常用程式碼及附件 命令與征服重製版MOD怎麼製作 MOD製作圖文教程

來源:樂享遊戲吧 2.13W

首先對上邊關於單位的程式碼段中關於可購買的陣營做一個補充 HOUSEF_GOOD, // OWNABLE: Ownable by house (bit field).

這段程式碼代表的是可購買的陣營 HOUSEF_GOOD 是GDI HOUSEF_BAD 是NOD ,如果設定成 HOUSEF_GOOD|(回車換行)HOUSEF_BAD, 就是兩個陣營都能選。

四、上邊給大家講到了 中對於遊戲中單位的修改。通過之前提到的對比方式我們可以在以下幾個檔案中查到並修改相關的一些資料。

裡面存放的是飛行單位的資料

裡面存放的是建築物的資料

裡面可以找到子彈相關資料(修改武器屬性可以用到)

裡面存放的是常量資料,我們可以在裡面找到武器屬性、彈頭傷害等相關的資料

DEFINE.H 裡面是一些定義 比如武器有哪些、彈頭有哪些,因為沒深層次研究所以不知道是否在這裡增加武器。因為就算光在這裡增加武器,沒修改其他相關程式碼也沒用。

飛行單位和建築物的修改,我就不做過多介紹了,仔細看好 // 符號右邊的相關注釋,實在不知道怎麼改對比一下同類其他單位或建築物的程式碼,一般不會有什麼大問題。

我們接下來講一下 中武器傷害的修改。

首先我們先通過之前查詢單位相關程式碼中找到關於 第一武器和第二武器的程式碼。然後在 中查詢你相關的武器程式碼,例如 WEAPON_M60MG (jeep的M60機槍)

可以看到以下的程式碼:

***************************************************************************

** 這些是各種武器及其特點

**

** 子彈型別 傷害,再次發射間隔,範圍, 聲音,動畫 //右邊的是武器程式碼

*/

WeaponTypeClass const Weapons[WEAPON_COUNT] = {

{BULLET_SNIPER, 125, 40, 0x0580, VOC_SNIPER, ANIM_NONE}, // WEAPON_RIFLE

{BULLET_SPREADFIRE, 25, 50, 0x0400, VOC_MINI, ANIM_GUN_N}, // WEAPON_CHAIN_GUN

{BULLET_BULLET, 1, 7, 0x01C0, VOC_RIFLE, ANIM_NONE}, // WEAPON_PISTOL

{BULLET_BULLET, 15, 20, 0x0200, VOC_MGUN2, ANIM_NONE}, // WEAPON_M16

{BULLET_TOW, 30, 60, 0x0400, VOC_BAZOOKA,ANIM_NONE}, // WEAPON_DRAGON

{BULLET_FLAME, 35, 50, 0x0200, VOC_FLAMER1,ANIM_FLAME_N}, // WEAPON_FLAMETHROWER

{BULLET_FLAME, 50, 50, 0x0200, VOC_FLAMER1,ANIM_FLAME_N}, // WEAPON_FLAME_TONGUE

{BULLET_CHEMSPRAY, 80, 70, 0x0200, VOC_FLAMER1,ANIM_CHEM_N}, // WEAPON_CHEMSPRAY

{BULLET_GRENADE, 50, 60, 0x0340, VOC_TOSS, ANIM_NONE}, // WEAPON_GRENADE

{BULLET_APDS, 25, 60, 0x0400, VOC_TANK2, ANIM_MUZZLE_FLASH}, // WEAPON_75MM

{BULLET_APDS, 30, 50, 0x04C0, VOC_TANK3, ANIM_MUZZLE_FLASH}, // WEAPON_105MM

{BULLET_APDS, 40, 80, 0x04C0, VOC_TANK4, ANIM_MUZZLE_FLASH}, // WEAPON_120MM

{BULLET_APDS, 40, 60, 0x0600, VOC_TANK4, ANIM_MUZZLE_FLASH}, // WEAPON_TURRET_GUN

{BULLET_SSM, 75, 80, 0x0500, VOC_ROCKET1,ANIM_NONE}, // WEAPON_MAMMOTH_TUSK

{BULLET_SSM2, 75, 80, 0x0600, VOC_ROCKET1,ANIM_NONE}, // WEAPON_MLRS

{BULLET_HE, 150, 65, 0x0600, VOC_TANK1, ANIM_MUZZLE_FLASH}, // WEAPON_155MM

{BULLET_BULLET, 15, 30, 0x0400, VOC_MGUN11, ANIM_GUN_N}, // WEAPON_M60MG

{BULLET_SSM, 60, 35, 0x0780, VOC_ROCKET2,ANIM_NONE}, // WEAPON_TOMAHAWK

{BULLET_SSM, 60, 40, 0x0680, VOC_ROCKET2,ANIM_NONE}, // WEAPON_TOW_TWO

{BULLET_NAPALM, 100, 20, 0x0480, VOC_NONE, ANIM_NONE}, // WEAPON_NAPALM

{BULLET_LASER, 200, 90, 0x0780, VOC_LASER, ANIM_NONE}, // WEAPON_OBELISK_LASER

{BULLET_SAM, 50, 50, 0x0780, VOC_ROCKET2,ANIM_NONE}, // WEAPON_NIKE

{BULLET_HONEST_JOHN, 100, 200, 0x0A00, VOC_ROCKET1,ANIM_NONE}, // WEAPON_HONEST_JOHN

{BULLET_HEADBUTT, 100, 30, 0x0180, VOC_DINOATK1,ANIM_NONE}, // WEAPON_STEG

{BULLET_TREXBITE, 155, 30, 0x0180, VOC_DINOATK1,ANIM_NONE}, // WEAPON_TREX

#ifdef PETROGLYPH_EXAMPLE_MOD

{BULLET_NUKE_LOB, 150, 130, 0x0B00, VOC_NUKE_LOB, ANIM_MUZZLE_FLASH}, // WEAPON_NUKE_LOB

#endif //PETROGLYPH_EXAMPLE_MOD

從上邊程式碼可以看出M60機槍的預設屬性

使用的子彈型別是BULLET_BULLET(普通子彈),傷害值——15,射擊間隔(暫定為15=1秒)2秒,射擊距離為0x0400(怎麼計算不知道),聲音為VOC_MGUN11,射擊動畫 ANIM_GUN_N

這段程式碼結合其他武器程式碼,我們可以修改傷害值不用說,比如把射擊距離改的和155MM艦炮一樣0x0600,子彈型別改成 BULLET_HE(高爆)或者 BULLET_NUKE_LOB (核彈)。

我們接下來看一下子彈的相關資料,以高爆彈 BULLET_HE為例,我們從 裡查到程式碼如下:

tatic BulletTypeClass const Class120mm(

BULLET_HE,

"120mm", // NAME: Text name of this unit type. 單位名稱

true, // Flies over tall walls? 是否飛躍建築物

false, // Homes in on target? 房屋是否列為目標

true, // Projectile arcs to the target? 向目標發射弧線彈道嗎

false, // Is this a dropping bomb-like object? 這是否是一個炸彈

false, // Is this projectile invisible? 這個投射物不可見嗎?

false, // Will it blow up even if it gets just NEAR to target? 接近目標,會爆炸嗎?

false, // Does it have flickering flame animation? 是否有閃爍的火焰動畫

false, // Can it run out of fuel? 是否會耗光燃料

true, // Is there no visual difference between projectile facings? 拋射面之間是否沒有視覺差異

true, // Is projectile inherently inaccurate? 拋射本身就不準確嗎?

false, // Translucent colors are used? 使用半透明的顏色

false, // Good against aircraft? 是否對飛機有好處

0, // ARMING: Time to arm projectile after launch. 發射後準備發射的時間

0, // RANGE: Inherent override range factor. 固有覆蓋範圍因子

MPH_MEDIUM_FAST, // SPEED: Miles per hour.

0, // ROT: Rate of turn (degrees per tick). 旋轉速度

WARHEAD_HE, // WARHEAD: If fires weapon, warhead type 子彈的彈頭型別

ANIM_ART_EXP1 // Explosion to use upon impact. 子彈爆炸的動畫

);。

子彈的彈頭相關資料還在 中,就在武器程式碼的下方:

/***************************************************************************

** 這些是各種彈頭。

**

** 擴散係數, 是否摧毀牆壁,是否摧毀建築, 是否摧毀泰礦, {裝甲防禦表} ///裝甲防禦表代表不同的裝甲在該種彈頭的攻擊下受到的不同的傷害比例

** -vs- {無裝甲, 木頭, 鋁質, 鋼鐵, 混凝土}

*/

WarheadTypeClass const Warheads[WARHEAD_COUNT] = {

{ 2,false,false,false,{0x100, 0x80, 0x90, 0x40, 0x40}}, // WARHEAD_SA Small arms -- good against infantry.

{ 6,true,true,true,{0xE0, 0xC0, 0x90, 0x40, 0x100}}, // WARHEAD_HE High explosive -- good against buildings & infantry.

{ 6,true,true,false,{0x40, 0xC0, 0xC0, 0x100, 0x80}}, // WARHEAD_AP Armor piercing -- good against armor.

{ 8,false,true,true,{0xE0, 0x100, 0xB0, 0x40, 0x80}}, // WARHEAD_FIRE Incendiary -- Good against flammables.

{ 4,false,false,false,{0x100, 0x100, 0x100, 0x100, 0x100}},// WARHEAD_LASER Light Amplification of Stimulated Emission by Radiation.

{ 7,true,true,true,{0x100, 0x100, 0xC0, 0xC0, 0xC0}}, // WARHEAD_PB Particle beam (neutron beam).

{ 4,false,false,false,{0x100, 0x20, 0x20, 0x10, 0x10}}, // WARHEAD_FIST Punching in hand-to-hand combat.

{ 4,false,false,false,{0x100, 0x20, 0x20, 0x10, 0x10}}, // WARHEAD_FOOT Kicking in hand-to-hand combat.

{ 4,false,false,false,{0x100, 0x08, 0x08, 0x08, 0x08}}, // WARHEAD_HOLLOW_POINT Sniper bullet type.

{255,false,false,false,{0x100, 0x01, 0x01, 0x01, 0x01}}, // WARHEAD_SPORE

{ 1, true,true,false,{0x100, 0xC0, 0x80, 0x20, 0x08}}, // WARHEAD_HEADBUTT

{ 1, true,true,false,{0x100, 0xC0, 0x80, 0x20, 0x08}}, // WARHEAD_FEEDME

};

對比一下各種彈頭對於不同型別傷害,可以看出,WARHEAD_HE 彈頭,對於無裝甲目標的時候的傷害是最高的 0xE0 。只要不超過這個值你可以根據需要自己設定。

五,超級武器冷卻間隔的設定

STEAM創意工廠已經有人放出了修改了冷卻時間的MOD,這裡就給大家講一下搜尋以及修改的原理

我們首先要知道兩個要素:1 超級武器裡的核武 NUKE ;2 時間 TIME ,其次要知道 TIME 這個要素肯定有很多地方會用到,相對的 NUKE 則會用到的地方少一些。

在 Microsoft Visual Studio 開啟的原始碼中按 CTRL+SHIFT+F 彈出搜尋框,查詢內容一欄輸入 NUKE ,查詢範圍選擇 當前專案 ,然後點 查詢全部,會在下方出現 查詢結果 。

我們從查詢結果列表中可以看到列出的各個檔案中包含 NUKE 這個程式碼的所有檔案和相對應的程式碼語句。滑鼠點選列表中的任意一項就會開啟對應的檔案以及定位到對應的語句。

常用程式碼及附件 命令與征服重製版MOD怎麼製作 MOD製作圖文教程

通過查詢列表可以看到 SOURCECODETIBERIANDAWNDEFINES.H(320):#define NUKE_GONE_TIME 14*TICKS_PER_MINUTE 這一項中兩個要查詢的要素都包含。

點選該項開啟檔案,我們可以看到以下程式碼段:

/**********************************************************************

** These defines control the rate of ion cannon and airstrike recharging.

*/

#define NUKE_GONE_TIME 14*TICKS_PER_MINUTE //核武冷卻時間

#define ION_CANNON_GONE_TIME 10*TICKS_PER_MINUTE //離子加農炮冷卻時間

#define AIR_CANNON_GONE_TIME 8*TICKS_PER_MINUTE //空中打擊冷卻時間

#define OBELISK_ANIMATION_RATE 15

這就是超級武器的冷卻時間。但是 TICKS_PER_MINUTE 是什麼意思呢?用上邊講到的方法,我們查詢 TICKS_PER_MINUTE ,在 檔案中可以找到以下程式碼段:

/****************************************************************************

** Timer constants. These are used when setting the countdown timer.

** Note that this is based upon a timer that ticks every 60th of a second.

*/

#define TICKS_PER_SECOND 15

#define TICKS_PER_MINUTE (TICKS_PER_SECOND * 60)

#define TIMER_SECOND 60

#define TIMER_MINUTE (TIMER_SECOND*60)

這個是整個原始碼中對於一些時間變數的定義。比如你查到的時間變數是 14*TICKS_PER_MINUTE ,這個是多久?通過這個定義就知道了,是14分鐘。如果查到的是 14*TIMER_SECOND,就是14秒。

瞭解了時間變數 TICKS_PER_MINUTE 的含義,我們回到之前的超級武器冷卻時間的程式碼段,就明白了該怎麼設定了吧。3*TICKS_PER_SECOND ? 1*TICKS_PER_MINUTE?一切都隨你所願。如果想

徹底無冷卻就改成 0*TICKS_PER_MINUTE 即可。

附件連結:

提取碼:cx1j

熱門標籤