孤胆枪手1游戏修改(MOD)说明书

前言:本文将介绍一些针对孤胆枪手1的修改方法,供有需要的玩家参考。修改前请务必做好备份,并严格按照文中所述修改内容和方法进行修改,防止因修改不当导致游戏运行异常甚至无法进入。本篇暂不涉及地图制作/修改和对游戏模型的修改。以下所涉及的文件若无特殊说明,均位于游戏目录下的Maps文件夹中。完成后,需要退出并重新运行游戏才能使修改生效。未提及的文件不建议修改。

一、COMMON.LGC文件修改

1.作弊码修改。孤胆枪手1中,除商店作弊码“CHEATM”外,所有作弊码是通过该文件的如下语句控制的:

该部分代码的前半部分用于识别用户的输入,若输入的前五个字符为作弊码前缀“CHEAT”,则继续判断输入的最后一个字符,并实现相应的作弊功能。如果觉得输入前缀“CHEAT”太麻烦,希望改为更短的前缀,则可以修改如下部分代码:

以前缀“ZXC”为例,修改如下:

if( old_key==0 && new_key=='Z' )
  old_key = new_key;
else if( old_key=='Z' && new_key=='X' )
  old_key = new_key;
else if( old_key=='X' && new_key=='C' )
  old_key = new_key;
else if( old_key=='C' )

保存后重新进入游戏,作弊码将修改为“ZXCx”(x为A, E, H或W)。例如,若需要调整人物血量,输入“ZXCH”即可。以上修改对商店内金钱作弊码(CHEATM)无效,需要同时修改SHOP.LGC文件,修改方法将在后文讲述。

若要修改作弊码实现的效果,可以根据需要修改代码后半段:

else if( old_key=='T' )
{
  CheatOn = 1;
  if( new_key=='A' ) { //为所有武器增加弹药
    for( i=2; i < 10; i++ )
      Action(Flagman(0),ACT_ADD_AMMO,999,i); //修改999为其他数值,可以修改使用该作弊码后武器增加的弹药量
  } if( new_key=='H' ) { //调整血量
    Action(Flagman(0),ACT_SET_HP,1000,0); //修改1000为其他数值,可以修改使用该作弊码后人物的生命值
  } if( new_key=='W' ) { //解锁武器
    for( i = 2; i < 10; i++ ) //将i=2改为i=0,可以解锁游戏中的零号武器。零号武器每使用一次需要消耗人物10点生命值,若不希望使用时扣血,可以修改common_event.lgc文件,具体方法将在后文讲述
    {
      AddAmmo(i,GettingAmmo[i]/2);
      Action(Flagman(0),ACT_ADD_ITEM,260+i,0);
    }
  } else if ( new_key!='E' ) {
    CheatOn = 0;
  }
  iff( new_key=='E' )
    Win();
  old_key = 0;
}

此外,游戏默认生存模式下作弊码无效,若要解除该限制,将开头的“if( GetKey() && LevelNumber > 0 )”改为“if( GetKey() )”即可。

2. 孤胆枪手1中其实隐藏有两条秘籍:一条可使人物短暂进入无敌(Invulnerable)状态,另一条可将当前地图中所有敌人清除。这两条秘籍默认不可用,通过修改该文件可以解锁这两条秘籍。

在上一部分代码中找到“iff( new_key==’E’ )”一句,在前一行的花括号后加入如下内容:

if( new_key=='K' ) //清除地图中所有敌人。注意,若当前地图包含多形态的敌人(如装甲螳螂/犀牛)则需要多次使用该秘籍,有需要放置炸药的地图还需找到并放置所有炸药才能过关
  for( i=FirstUnit(U_UNIT); i; i=NextUnit() )
    if( Action(i,ACT_GET_ARMY)==1 )
      Action(i,ANI_DEATH);
if( new_key=='G' ) //进入无敌invulnerable状态
{
  int invulnerable;
  invulnerable = AddInvulnerable();
  Action(invulnerable,ACT_SET_DEATH_TIMER,30000); //数值单位为毫秒,代表invulnerable状态持续的时间
}

保存后重新进入游戏,输入作弊码(若前缀无修改则为“CHEATG”/“CHEATK”,前缀修改为“ZXC”则为“ZXCG”/“ZXCK”)即可实现相应的效果。注意,这两条秘籍对部分版本的游戏可能不起作用。

最后提醒,不到万不得已不要随意使用作弊码。

3. 一些玩家自制的游戏地图关卡数可能与游戏默认的关卡数目(CAMPAIGN1为10关,CAMPAIGN2/3为5关)不同,为确保游戏的连贯性,需要修改此文件中控制关卡总数的代码。首先修改全局最大关卡数量:

#define MAX_LEVEL             10 //改为更大值,如99,若关卡总数不超过10也可不修改

然后修改如下代码,调整每个模式关卡数量:

if( GameState==GAME_WIN )
  {
    if( GetKey()==' ' || ( WinTime && WinTime < GetTime() ) )
    {
	  Effect(EFF_FADE,0,0);//,FADE_GAME_TIME);
      GameState = GAME_SCORE_SCREEN;
      PlayerGameTime = (GetTime() - StartGameTime)/1000;
      WinTime = 0;
      if( LevelNumber == 10 ) //此句控制CAMPAIGN1模式的关卡数
        NextMapName = "maps\\level_11.map";
      else if( GameType == GAME_TYPE_ADDON && LevelNumber == 5 ) //此句控制CAMPAIGN2模式的关卡数
        NextMapName = "maps\\addon\\level_06.map";
      else if( GameType == GAME_TYPE_ADDON2 && LevelNumber == 5 ) //此句控制CAMPAIGN3模式的关卡数
        NextMapName = "maps\\addon2\\level_06.map";
      else if( LevelNumber < MAX_LEVEL )
        NextMapName = "maps\\shop.map";
      else
        NextMapName = "maps\\mainmenu.map";
    }
  }

同步修改如下部分代码(位于作弊码控制代码下方):

else if( GameState==GAME_WIN )
{
  PlayerGameTime = (GetTime() - StartGameTime)/1000;
  GameState = GAME_LOOSE;//GAME_SCORE_SCREEN
  Effect(EFF_NUKE,0xff0000);
  Effect(EFF_FADE,0,0);//,FADE_GAME_TIME);
  if( LevelNumber == 10 )
    NextMapName = "maps\\level_11.map";
  else if( GameType == GAME_TYPE_ADDON && LevelNumber == 5 )
    NextMapName = "maps\\addon\\level_06.map";
  else if( GameType == GAME_TYPE_ADDON2 && LevelNumber == 5 )
    NextMapName = "maps\\addon2\\level_06.map";
  else if( LevelNumber < MAX_LEVEL )
    NextMapName = "maps\\shop.map";
  else
    NextMapName = "maps\\mainmenu.map";
}

注意,若某个模式实际拥有的关卡数超过了游戏默认的设定值,则需要重命名通关文件(level_11.map、level_11.lgc和addon、addon2目录中的level_06.map、level_06.lgc)并相应修改以上代码中NextMapName的值。

二、common_event.lgc文件修改

1. 一些关卡设有机枪炮台,人物在操纵炮台时生命值为当前自身生命值的30倍。若要修改这一数值(例如调为50倍),找到如下代码:

将下方“Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP)*30);”中的数值“30”改为其他值,如“50”;同时在COMMON.LGC中找到如下语句:

Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP)/30);

将其中的“30”改为相同的值。

2. 调整冰冻枪威力。孤胆枪手1中武器的攻击力等信息位于objects.res文件中,一般文本编辑器无法直接修改,但冰冻枪(6号武器)的威力值可通过修改如下代码来调节:

F145_15(int cannon)
{
  int unit;
//  for( unit = FirstUnit(U_UNIT); unit; unit = NextUnit() )
  for( unit = FirstInBox(GetX(cannon)-130,GetY(cannon)-130,GetX(cannon)+130,GetY(cannon)+130);
       unit;
       unit = NextInBox() )
    if( SizeTo(unit,GetX(cannon),GetY(cannon)) < 130 && Action(unit,ACT_GET_ARMY)==1 && GetUnitVid(unit)%10!=9 )
    {
      Action(unit,ACT_DAMAGE,30); //修改此处的数值
      if( !IsBossVid( GetUnitVid(unit) ) )
        if( GetAnimation(unit)==ANI_DEATH || GetAnimation(unit)==ANI_DEATH2 )
        {
          Action(unit,ACT_CHANGE_VID,(GetUnitVid(unit)/10)*10+9,ANI_STAND);
          Action(unit,ACT_SET_BEHAVE,0,0);
          Action(unit,ACT_ATTACK,0,0);
          Action(unit,ACT_STOP,1,0);
        }
    }
}

将中间“Action(unit,ACT_DAMAGE,30);”一句中的“30”改为其他更大的值即可。

3. 使用零号武器不扣血。将如下代码:

F751_14(int unit)
{
  Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP,10)-10); //删去或注释该语句
}

中“Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP,10)-10);”一句去掉即可。

三、common_table.lgc文件

该文件包含商店各武器装备物品价格、一盒弹药所包含弹药发数、过关奖励金钱数等信息。此文件一般无需修改。

四、compaign_birth.lgc文件

该文件包含击败不同类型敌人后可能掉落的物品信息。孤胆枪手1中的敌人可分为“普通怪”和“精英怪”两大类,其中“精英怪”指各类BOSS敌人,“普通怪”根据等级高低可分为0至5级。在MONSTERS.LGC文件的定义中,绿色和黄色蟾蜍等级为0,红色蟾蜍、绿色/黄色螳螂、绿色蜘蛛等级为1,红色螳螂、黄色/红色蜘蛛、绿色装甲螳螂、绿色犀牛、蝙蝠等级为2,黄色装甲螳螂、黄色/红色犀牛等级为3,红色装甲螳螂、大头恐龙等级为4,所有颜色(蓝色除外)装甲犀牛等级为5。敌人等级越高,掉落的物品种类越高级。

此文件一般无需修改。

五、ITEMS.LGC文件修改

1. 调整血包使用效果。以下代码的F210_0部分针对小血包,F211_0部分针对中血包:

F210_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( Action(Flagman(0),ACT_GET_HP) < PlayerMaxHp )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      Action(Flagman(0),ACT_DAMAGE,-20); //修改此处数值,注意必须为负数。下同
      Action(unit,ANI_DEATH2,0,0);
      CreateSprite(760,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+60);
    }
}
F211_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( Action(Flagman(0),ACT_GET_HP) < PlayerMaxHp )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      Action(Flagman(0),ACT_DAMAGE,-50);
      Action(unit,ANI_DEATH2,0,0);
      CreateSprite(760,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+60);
    }
}

修改其中的“Action(Flagman(0),ACT_DAMAGE,-xx);”语句中的“-xx”值可以改变血包的使用效果。注意该值必须为负数,否则使用后将导致玩家生命值减少。

中、小血包仅在玩家生命值低于最大生命值时可用,且补血上限为玩家最大生命值。大血包可突破这一限制,其补血上限为玩家最大生命值与大血包血量之和。修改如下代码可修改大血包补血量:

F212_0(int unit)
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 )
    if( Action(Flagman(0),ACT_GET_HP) < (PlayerMaxHp+100) )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      if( Action(Flagman(0),ACT_GET_HP) < PlayerMaxHp )
        Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP)+100);
      else
        Action(Flagman(0),ACT_SET_HP,PlayerMaxHp+100); //修改"+"号后的值
      Action(unit,ANI_DEATH2);
      CreateSprite(760,GetX(Flagman(0)),GetY(Flagman(0)),GetZ(Flagman(0))+60);
    }
}

修改“Action(Flagman(0),ACT_SET_HP,Action(Flagman(0),ACT_GET_HP)+100);”和“Action(Flagman(0),ACT_SET_HP,PlayerMaxHp+100);”两处的数值,以调整大血包补血量。

2. 不建议修改一次拾取金钱的数量,因为孤胆枪手1中基本不缺钱。如确实要修改,找到“F241_0(int unit)”代码块,修改“AddPlayerMoney(50);”一句中的参数即可。修改后,游戏目录中strings.ini的“Item241”一项的值也需要同步修改。

3. 修改芯片升级效果:

F242_0(int unit) //红色芯片,用以提高玩家生命值上限
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 || !unit )
    if( PlayerItem[720-720] < 3 )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      PlayerItem[720-720]++;
      PlayerMaxHp = (PlayerMaxHp*1263)/1000; //修改此处,注意此处不能直接使用小数,若要使用小数必须以乘除组合的方式实现,如要乘以1.25,必须先乘5再除以4。此外最终所乘的值必须大于1,否则芯片将不起作用或起负作用
      if( GetVidData(9,VID_MAXHP0) < PlayerMaxHp )
        SetVidData(9,VID_MAXHP0,PlayerMaxHp);
      Action(unit,ANI_DEATH2);
    }
}

F243_0(int unit) //蓝色芯片,用以提高装弹量上限
{
  int i;
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 || !unit )
    if( PlayerItem[721-720] < 3 )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      PlayerItem[721-720]++;
      for( i = 12; i < 20; i++ )
        SetVidData( i,VID_AMMO,(GetVidData(i,VID_AMMO)*13)/10 ); //修改此处,对小数的处理方法同上。最终所乘的值必须大于1,否则芯片将不起作用或起负作用
      Action(unit,ANI_DEATH2);
    }
}

F244_0(int unit) //黄色芯片,用以提高玩家移动速度
{
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 || !unit )
    if( PlayerItem[722-720] < 3 )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      PlayerItem[722-720]++;
      PlayerMaxSpeed = (PlayerMaxSpeed*115)/100; //修改此处,对小数的处理方法同上。最终所乘的值必须大于1,否则芯片将不起作用或起负作用
      SetVidData(9,VID_SPEED,PlayerMaxSpeed);
      Action(unit,ANI_DEATH2);
    }
}

F245_0(int unit) //绿色芯片,用以提高武器攻击力
{
  int i;
  if( SizeTo(Flagman(0),GetX(unit),GetY(unit)) < 60 || !unit )
    if( PlayerItem[723-720] < 3 )
    {
      if( StateBar )
        MessageText(GetString("items","Item"+itoa(GetUnitVid(unit))),-1,-1);
      PlayerItem[723-720]++;
      for( i = 10; i < 20; i++ )
      {
        SetVidData( i,VID_WEAPONAIM,(GetVidData(i,VID_WEAPONAIM)*6)/10 );
      }
      //修改以下几行,对小数的处理方法同上。最终所乘的值必须大于1,否则芯片将不起作用或起负作用
      SetVidData(168,VID_DAMAGE,(GetVidData(168,VID_DAMAGE)*120)/100);//手枪
      SetVidData(100,VID_DAMAGE,(GetVidData(100,VID_DAMAGE)*120)/100);//霰弹枪
      SetVidData(156,VID_DAMAGE,(GetVidData(156,VID_DAMAGE)*110)/100);//机枪
      SetVidData(113,VID_DAMAGE,(GetVidData(113,VID_DAMAGE)*110)/100);//火箭炮
      SetVidData(112,VID_DAMAGE,(GetVidData(112,VID_DAMAGE)*120)/100);//绿色激光枪
      SetVidData(904,VID_DAMAGE,(GetVidData(904,VID_DAMAGE)*130)/100);//喷火器
      SetVidData(129,VID_DAMAGE,(GetVidData(129,VID_DAMAGE)*110)/100);//9号武器
      Action(unit,ANI_DEATH2);
    }
}

六、Level_xx.lgc文件

此类文件为游戏地图(Level_xx.map)的配套文件,其中定义了关卡的一些基本属性(战斗BGM、玩家复活点、过关条件等)和触发事件(停电、传送玩家、显示BOSS血量条等)。由于涉及地图制作,故此处不讲述。

七、MONSTERS.LGC文件修改

MONSTERS.LGC中定义了不同敌人的等级,和不同等级敌人掉落物品的算法CreateItemsForBirth0(int unit)~CreateItemsForBirth5(int unit):

//以下语句定义怪物等级,用于区分掉落物品种类
F040_14(int unit) { CreateItemsForBirth1(unit); }
F043_14(int unit) { CreateItemsForBirth2(unit); }
F046_14(int unit) { CreateItemsForBirth2(unit); }
F050_14(int unit) { CreateItemsForBirth0(unit); }
F053_14(int unit) { CreateItemsForBirth0(unit); }
F056_14(int unit) { CreateItemsForBirth1(unit); }
F060_14(int unit) { CreateItemsForBirth1(unit); }
F063_14(int unit) { CreateItemsForBirth1(unit); }
F066_14(int unit) { CreateItemsForBirth2(unit); }
F070_14(int unit) { CreateItemsForBirth2(unit); }
F073_14(int unit) { CreateItemsForBirth3(unit); }
F076_14(int unit) { CreateItemsForBirth4(unit); }
F080_14(int unit) { CreateItemsForBirth2(unit); }
F083_14(int unit) { CreateItemsForBirth3(unit); }
F086_14(int unit) { CreateItemsForBirth3(unit); }
F090_14(int unit) { CreateItemsForBirth5(unit); }
F093_14(int unit) { CreateItemsForBirth5(unit); }
F096_14(int unit) { CreateItemsForBirth5(unit); }
F880_14(int unit) { CreateItemsForBirth2(unit); }
F885_14(int unit) { CreateItemsForBirth4(unit); }

1. 解决犀牛类敌人无掉落物品的问题。原始MONSTERS.LGC文件的后半部分有如下代码:

//打败敌人得分代码
F040_15(int unit) { CreateItems(unit); }
F040_16(int unit) { CreateItems(unit); }
F043_15(int unit) { CreateItems(unit); }
F043_16(int unit) { CreateItems(unit); }
F046_15(int unit) { CreateItems(unit); }
F046_16(int unit) { CreateItems(unit); }
F049_15(int unit) { CreateItems(unit); }
F049_16(int unit) { CreateItems(unit); }
F050_15(int unit) { CreateItems(unit); }
F050_16(int unit) { CreateItems(unit); }
F053_15(int unit) { CreateItems(unit); }
F053_16(int unit) { CreateItems(unit); }
F056_15(int unit) { CreateItems(unit); }
F056_16(int unit) { CreateItems(unit); }
F059_15(int unit) { CreateItems(unit); }
F059_16(int unit) { CreateItems(unit); }
F060_15(int unit) { CreateItems(unit); }
F060_16(int unit) { CreateItems(unit); }
F063_15(int unit) { CreateItems(unit); }
F063_16(int unit) { CreateItems(unit); }
F066_15(int unit) { CreateItems(unit); }
F066_16(int unit) { CreateItems(unit); }
F069_15(int unit) { CreateItems(unit); }
F069_16(int unit) { CreateItems(unit); }
F070_15(int unit) { CreateItems(unit); }
F070_16(int unit) { CreateItems(unit); }
F073_15(int unit) { CreateItems(unit); }
F073_16(int unit) { CreateItems(unit); }
F076_15(int unit) { CreateItems(unit); }
F076_16(int unit) { CreateItems(unit); }
F079_15(int unit) { CreateItems(unit); }
F079_16(int unit) { CreateItems(unit); }
F080_15(int unit) { CreateItems(unit); }
F080_16(int unit) { CreateItems(unit); }
F083_15(int unit) { AddScores(unit); }
F083_16(int unit) { AddScores(unit); }
F086_15(int unit) { AddScores(unit); }
F086_16(int unit) { AddScores(unit); }
F089_15(int unit) { AddScores(unit); }
F089_16(int unit) { AddScores(unit); }
F090_15(int unit) { AddScores(unit); }
F090_16(int unit) { AddScores(unit); }
F093_15(int unit) { AddScores(unit); }
F093_16(int unit) { AddScores(unit); }
F096_15(int unit) { AddScores(unit); }
F096_16(int unit) { AddScores(unit); }
F099_15(int unit) { AddScores(unit); }
F099_16(int unit) { AddScores(unit); }
F850_15(int unit) { CreateItems(unit); }
F850_16(int unit) { CreateItems(unit); }
F853_15(int unit) { CreateItems(unit); }
F853_16(int unit) { CreateItems(unit); }
F856_15(int unit) { CreateItems(unit); }
F856_16(int unit) { CreateItems(unit); }
F860_15(int unit) { CreateItems(unit); }
F860_16(int unit) { CreateItems(unit); }
F863_15(int unit) { CreateItems(unit); }
F863_16(int unit) { CreateItems(unit); }
F866_15(int unit) { CreateItems(unit); }
F866_16(int unit) { CreateItems(unit); }
F880_15(int unit) { CreateItems(unit); }
F880_16(int unit) { CreateItems(unit); }
F885_15(int unit) { CreateItems(unit); }
F885_16(int unit) { CreateItems(unit); }

注意到中间针对击败犀牛类敌人仅采用了AddScores而非CreateItems算法,导致出现只得分不掉落物品的情况。解决方法是将该部分所有“AddScores(unit);”替换为“CreateItems(unit);”。

2. 若要击败精英怪后也掉落物品,重载F8xx_14(xx=50,53,56,60,63,66,67)函数并使用CreateItemsForBirth算法即可。例如:

F850_14(int unit) { CreateItemsForBirth1(unit); }
F853_14(int unit) { CreateItemsForBirth2(unit); }
F856_14(int unit) { CreateItemsForBirth5(unit); }
F860_14(int unit) { CreateItemsForBirth3(unit); }
F863_14(int unit) { CreateItemsForBirth5(unit); }
F867_14(int unit) { CreateItemsForBirth5(unit); }

3. 让箱子中的物品永不消失。找到如下语句:

Action(item,ACT_SET_ZSPEED,20);
Action(item,ACT_SET_SPEED,5);
AddCommand(item,ACT_PAUSE,17000,5000);
AddCommand(item,ANI_DEATH);

将其替换为:

//Action(item,ACT_SET_ZSPEED,20);
//Action(item,ACT_SET_SPEED,5);
    //以上两句也可直接去掉
if ( GetUnitVid(unit) != 419 )
{
  AddCommand(item,ACT_PAUSE,17000,5000);
  AddCommand(item,ANI_DEATH);
}

4. 修改得分规则,使其不受武器类型影响。找到如下语句:

AddScores(int unit)
{
  int weapon;
  weapon = GetVidData(9,VID_LINK)-10;
  if( !weapon)
    weapon = 10;
  if( PlayerScoresTact < 15000 )
    PlayerScoresTact = (PlayerScoresTact*11)/10;
  PlayerScoresTact += GetVidData(GetUnitVid(unit),VID_MAXHP) + (GetVidData(GetUnitVid(unit),VID_MAXHP) * 10) / (weapon*3);
  //非steam版本游戏不含以下语句
	PlayerKillMonster++;
	StatNumKilled++;
	if (StatNumKilled == ACH_KILL_MONSTER_0) StoreSetAchievement("ACH_KILL_MONSTER_0");
	if (StatNumKilled == ACH_KILL_MONSTER_1) StoreSetAchievement("ACH_KILL_MONSTER_1");
	if (StatNumKilled == ACH_KILL_MONSTER_2) StoreSetAchievement("ACH_KILL_MONSTER_2");
}

改为:

AddScores(int unit)
{
  if( PlayerScoresTact < 15000 )
    PlayerScoresTact = (PlayerScoresTact*11)/10;
  PlayerScoresTact += GetVidData(GetUnitVid(unit),VID_MAXHP) + (GetVidData(GetUnitVid(unit),VID_MAXHP) * 10) / 3;
  //非steam版本游戏不含以下语句
	PlayerKillMonster++;
	StatNumKilled++;
	if (StatNumKilled == ACH_KILL_MONSTER_0) StoreSetAchievement("ACH_KILL_MONSTER_0");
	if (StatNumKilled == ACH_KILL_MONSTER_1) StoreSetAchievement("ACH_KILL_MONSTER_1");
	if (StatNumKilled == ACH_KILL_MONSTER_2) StoreSetAchievement("ACH_KILL_MONSTER_2");
}

八、SHOP.LGC文件修改

该文件除商店作弊码(CHEATM)相关代码外其他均不建议修改。

if( GetKey() )
{
  static int old_key=0,new_key;
  if( GetKey()>='a' &&  GetKey()<='z' )
    new_key = GetKey() - ('a'-'A');
  else
    new_key = GetKey();
  if( old_key==0 && new_key=='C' ) //以下部分用于控制作弊码前缀,修改方法见第一章
    old_key = new_key;
  else if( old_key=='C' && new_key=='H' )
    old_key = new_key;
  else if( old_key=='H' && new_key=='E' )
    old_key = new_key;
  else if( old_key=='E' && new_key=='A' )
    old_key = new_key;
  else if( old_key=='A' && new_key=='T' )
    old_key = new_key;
  else if( old_key=='T' ) //前缀部分结束
  {
    if( new_key=='M' ) //最后一位字母
    {
      PlayerMoney=50000; //将等号改为“+=”可实现加钱而非将金钱变为特定数量
      SetShop();
    }
    old_key = 0;
  }
  else old_key = 0;
}

九、survive_birth.lgc文件

该文件包含生存模式每波敌人出现的种类和数量。该文件仅建议修改MonsterBirthP函数。使用高级文本编辑器或代码编辑器打开该文件,可以看到该函数第一行(红框部分)为注释,分别代表每种敌人的ID,绿框部分每行相应位置处的值代表每波攻势中该类敌人出现的数量。以最后一行为例,它代表该波攻势中共出现15只绿蜘蛛、5只黄蜘蛛、1只红蜘蛛、40只绿蟾蜍、20只黄蟾蜍、10只红蟾蜍、10只绿螳螂、5只黄螳螂、3只红螳螂。

图片[1]-孤胆枪手1游戏修改(MOD)说明书-龙网 - 教程、网赚、安全、免费资源

注释中ID分别代表绿/黄/红色蜘蛛、蟾蜍、螳螂、装甲螳螂、犀牛、装甲犀牛,蓝色蟾蜍、螳螂、装甲螳螂、蜘蛛、犀牛、装甲犀牛、装甲螳螂(强化版)、蝙蝠、大头恐龙、脉冲炮恐龙。下方每行的一组数值代表每波攻势中每种敌人总共出现的数量。

版权声明
转载请注明本文来源:孤胆枪手1游戏修改(MOD)说明书
转载请注明本文地址:https://www.e363.com/2178.html
THE END
喜欢龙网的内容,就支持一下吧!
点赞146赞赏 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容