Re: HELLDIVERS 2
Posted: Wed May 01, 2024 11:31 am
Can confirm 122 is the ID for the AMR, I used it last evening.
Most all of the ID codes Exemplify posted in his google sheet tested out fine.
Community Cheat Tables of Cheat Engine
https://fearlessrevolution.com/
Can confirm 122 is the ID for the AMR, I used it last evening.
you da mannnZoDDeL wrote: ↑Wed May 01, 2024 12:20 pmUPDATE:
added inf energy shield (instead of setting cooldown to zero this one just writes on the shield value)
added a bunch of weapon ID's
table and guide as usual in my signature.Spoiler
super dmg >>
MP-98 Knight
MG-43 / EXO-45 Gatling / Gatling Turret
anti material rifle
FLAM-40
MG-206 HMG
GP-31 grenade pistol
LAS-98
RS-422 railgun
R-36 Eruptor
LAS-99 quasar
RL-77 airburst
GP-31 explosive crossbow
emancipator exo gun
EXO-45 rocket
SG-8P Punisher Plasma
PLAS-1 Scorcher
pelican weapon
SG-225NS Breaker Nailspitter
default dmg >>
G-123 Thermite
anti tank mines
anti personnel mines
incendiary mines
tesla tower
mortar turret
rocket sentry turret
hellpot damage
//eagle airstrike
//orbital 380MM HE barrage
//eagle 110mm rocket pods
//eagle clusterbomb
//orbital airburst
I see. Thanks for the info!icysnow wrote: ↑Wed May 01, 2024 9:58 amIt only crashes if you use it on planets with newly issued MOs and instant complete all missions. It works on other planetsMinazuki wrote: ↑Wed May 01, 2024 5:38 amThe new script make the Game crash everytime I start the mission...ZoDDeL wrote: ↑Sat Mar 16, 2024 3:26 amalternative and simpler guide with slightly different approach with no address input and easier timing.
this guide doesnt make your CE undetected but let you activate scripts and close CE before gameguard notice what happened
so you can cheat without crash / hack detected!
but you cannot use CE to search for stuff or debug the game!!!
follow the text+ picture guide or just watch one of the videos down below
i show the usage at the beginning of each video.
step 1
open CE table and open memory viewer
[Link]
step 2
open the game (my table should hook the game itself if you allow the lua execution and you should allow it!!!)
[Link]
step 3
wait a bit if everything was right you should see the last 2 entries in my table populate with adresses/values (green boxes)
like in this screenshot:
[Link]
now you can hit the checkbox on "all together" to activate it (or individual options above).
then close CE table quick with a click on the X on top right of the CE main window.
THE TABLE
the table is split into 3 sections.
basic scripts and advanced scripts and all in one scripts.
while basic script just search for array of byte pattern and overwrite it (nop or change bytes to jump etc.)
the advanced script do memory allocations, full code with jumps and compares and change values.
the all in one scripts are like presets for alle the scripts in the table.
each section has an "all together" script that bound all features into one (so you dont have to click multiple scripts)
all basic scripts with one star / asterisk * (blue box in screenshot) are put into the alltogether for this section.
all advanced script with two star / asterisk ** (red box in screenshot) are put into the alltogether for this section.
if you activate any single script that is also part of alltogether you cannot activate alltogether anymore!!!
easiest way to just choose one of the AIO scripts (yellow box in screenshot) activate it and close the table.
but better take i look into the scripts before and maybe change values to your needs.
currently whitelisted (damage / armor damage / pentration increased) weapons:
AR-23 Liberator / AR-22C Patriot / AR-48 Truth Whisperer / M-105 Stalwart
P-2 Peacemaker / P-19 Redeemer
SG-225SP Breaker Spray&Pray (16)
P-4 Senator
JAR-5 Dominator
LAS-7 Dagger
LAS-5 Scythe
SMG-37 Defender
LAS-16 Sickle
GL-21
autocannon
R-63CS Diligence Counter SNiper
EAT-17
recoil-less rifle
default weapons(these weapons keep their default values):
G-6 Frag
G-12 High Explosive / G-16 Impact
G-10 Incendiary
//500kg bomb
//orbital laser
//orbital precision strike
//orbital railcannon strike
//orbital 120MM HE barrage
everything else get set down to 0 (enemy attacks, airstrikes, orbital strikes, mines, flame tornados)
showcase instant mission complete + instant extraction timer:
showcase fast rescue mission + instant extraction timer:
p.s. credits to sunbeam who ignited the idea to check the game.dllolder showcase videos
p.p.s basic scripts on my table are manually taken from "version.dll" visual studio builds.
but the script codes (byte arrays etc.) originate from posts here in the forum and on the UC forum.
users like cfemen, gir489 and others.
the most advanced scripts are totally written by me or in parts adapted/improved.
i cut down all scripts to keep the table small and clean.
that including comments, orignal code, credits, registersymbols
ZoDDeL wrote: ↑Wed May 01, 2024 12:20 pmUPDATE:
added inf energy shield (instead of setting cooldown to zero this one just writes on the shield value)
added a bunch of weapon ID's
table and guide as usual in my signature.Spoiler
super dmg >>
MP-98 Knight
MG-43 / EXO-45 Gatling / Gatling Turret
anti material rifle
FLAM-40
MG-206 HMG
GP-31 grenade pistol
LAS-98
RS-422 railgun
R-36 Eruptor
LAS-99 quasar
RL-77 airburst
GP-31 explosive crossbow
emancipator exo gun
EXO-45 rocket
SG-8P Punisher Plasma
PLAS-1 Scorcher
pelican weapon
SG-225NS Breaker Nailspitter
default dmg >>
G-123 Thermite
anti tank mines
anti personnel mines
incendiary mines
tesla tower
mortar turret
rocket sentry turret
hellpot damage
//eagle airstrike
//orbital 380MM HE barrage
//eagle 110mm rocket pods
//eagle clusterbomb
//orbital airburst
nice script and explanation, glad to see more developers in here.Exemplify1524 wrote: ↑Wed May 01, 2024 10:29 amlatest and full version of modified ZoDDels damage script rewritten in ccode to more usability and changebility. good to use with table [Link]
main part is
// default damage multiplier for all damages.
damage_ratio = 0.2f;
and the weapons table
{51, 100.0f, -1, -1, 100, 100, 100, 100, "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / Guard Dog / Stalwart"},
51 is ID
100.0f is damage and armor damage multiplier (damage * multiplier)
-1 is damage (-1 for not change, for example to only multiply default value)
-1 is armor damage
100 is penetration1 at no angle is set to 100 (you can use -1 to not change)
100 is penetration2 with angle is set to 100 (you can use -1 to not change)
100 is penetration3 unknown is set to 100 (you can use -1 to not change)
100 is penetration4 unknown is set to 100 (you can use -1 to not change)
also damage monitoring with miscosoft DebugView tool is working.
Code: Select all
[ENABLE] aobscanmodule(damage_inject,game.dll,66 0F 6E 59 04 66 0F 6E 49 08 0F 5B C9 0F 5B DB) alloc(damage_newmem,$10000) label(damage_return) //label(damage_change) //label(damage_and_penetration_change) //label(damage_no_change) //label(damage_multiplier) alloc(damage_ratio,4) registersymbol(damage_ratio) damage_newmem: // push rbx //save rbx as it's going to be changed {$ccode base_address=rcx jmpaddress=rbx} extern __cdecl int sprintf(char *, char *, ...); extern __cdecl void OutputDebugStringA(const char* lpOutputString); extern float damage_ratio; //extern void damage_change(); //extern void damage_and_penetration_change(); //extern void damage_no_change(); char debug_string[400]; char* weapon_name; //float unknown_damage_mult = 0.2f; //bool damage_is_unknown; // char* damage_type_name; typedef struct { int id; float damage_mult; int damage_value; int armor_damage_value; int penetration1_no_angle_value; int penetration2_angle_value; int penetration3_unknown_value; int penetration4_unknown_value; char* weapon_name; } Weapon; int *weapon_id=(int*)(base_address); int *weapon_dmg=(int*)(base_address+0x04); int *weapon_admg=(int*)(base_address+0x08); int *weapon_pen1=(int*)(base_address+0x0C); int *weapon_pen2=(int*)(base_address+0x10); int *weapon_pen3=(int*)(base_address+0x14); int *weapon_pen4=(int*)(base_address+0x18); Weapon weapons[76] = { {326, 1.0f, -1, -1, -1, -1, -1, -1, "Helldiver melee"}, {50, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23C Liberator Concussive"}, {48, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23P Liberator Penetrator"}, {51, 100.0f, -1, -1, 100, 100, 100, 100, "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / Guard Dog / Stalwart"}, {73, 1.0f, -1, -1, -1, -1, -1, -1, "R-63 Diligence"}, {74, 1.0f, -1, -1, -1, -1, -1, -1, "R-63CS Diligence Counter Sniper"}, {65, 1.0f, -1, -1, -1, -1, -1, -1, "AR-20L Justice / BR-14 Adjudicator / Machine Gun / Gatling/Machine Gun Sentry"}, {26, 1.0f, -1, -1, -1, -1, -1, -1, "MP-98 Knight"}, {34, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8S / SMG-37 Defender"}, {117, 1.0f, -1, -1, -1, -1, -1, -1, "ARC-12 Blitzer"}, {93, 1.0f, -1, -1, -1, -1, -1, -1, "Break action shotgun"}, {102, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225 Breaker"}, {103, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225BB Breaker Bugbiter"}, {104, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225NS Breaker Nailspitter"}, {101, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225SP Breaker Spray&Pray"}, {105, 1.0f, -1, -1, -1, -1, -1, -1, "SG-255IE Breaker Incendiary"}, {88, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8 Punisher"}, {99, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8S Slugger"}, {124, 1.0f, -1, -1, -1, -1, -1, -1, "CB-9 Exploding Crossbow"}, {84, 1.0f, -1, -1, -1, -1, -1, -1, "JAR-5 Dominator"}, {80, 1.0f, -1, -1, -1, -1, -1, -1, "R-36 Eruptor"}, {19, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-16 Sickle"}, {297, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-5 Scythe"}, {20, 1.0f, -1, -1, -1, -1, -1, -1, "PLAS-1 Scorcher / SG-8P Punisher Plasma"}, {134, 1.0f, -1, -1, -1, -1, -1, -1, "GP-31 Grenade Pistol"}, {296, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-7 Dagger"}, {44, 1.0f, -1, -1, -1, -1, -1, -1, "P-4 Senator"}, {25, 1.0f, -1, -1, -1, -1, -1, -1, "P-19 Redeemer / P-2 Peacemaker"}, {203, 1.0f, -1, -1, -1, -1, -1, -1, "G-10 Incendiary"}, {201, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 1"}, {201, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 1"}, {111, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 2"}, {213, 1.0f, -1, -1, -1, -1, -1, -1, "G-12 High Explosive / G-16 Impact"}, {204, 1.0f, -1, -1, -1, -1, -1, -1, "G-123 Thermite"}, {122, 1.0f, -1, -1, -1, -1, -1, -1, "Antimaterial Rifle"}, {115, 1.0f, -1, -1, -1, -1, -1, -1, "ARC3 Thrower"}, {127, 1.0f, -1, -1, -1, -1, -1, -1, "Autocannon (part 1/2)"}, {216, 1.0f, -1, -1, -1, -1, -1, -1, "Autocannon (part 2/2)"}, {145, 1.0f, -1, -1, -1, -1, -1, -1, "Commando"}, {135, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 1"}, {189, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 2"}, {226, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 3"}, {129, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator gun part 1"}, {217, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator gun part 2"}, {147, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator rocket part 1"}, {234, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator rocket part 2"}, {9, 1.0f, -1, -1, -1, -1, -1, -1, "FLAM-40 Flamethrower part 1"}, {220, 1.0f, -1, -1, -1, -1, -1, -1, "GL-21 Grenade launcher part 2 explosion"}, {121, 1.0f, -1, -1, -1, -1, -1, -1, "Heavy Machinegun"}, {149, 1.0f, -1, -1, -1, -1, -1, -1, "Javelin rocket part 1"}, {236, 1.0f, -1, -1, -1, -1, -1, -1, "Javelin rocket part 2"}, {302, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-98 Laser Cannon"}, {227, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 1"}, {228, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 2"}, {280, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 3 (???)"}, {136, 1.0f, -1, -1, -1, -1, -1, -1, "Recoiless Rifle part 1 shell"}, {225, 1.0f, -1, -1, -1, -1, -1, -1, "Recoiless Rifle part 2 explosion"}, {22, 1.0f, -1, -1, -1, -1, -1, -1, "RS-422 Railgun"}, {10, 1.0f, -1, -1, -1, -1, -1, -1, "GL-21 Grenade launcher part 1 / Mortar Sentry shell"}, {11, 1.0f, -1, -1, -1, -1, -1, -1, "Grenade Launcher / EMS Mortar Sentry / Mortar Sentry 1"}, {223, 1.0f, -1, -1, -1, -1, -1, -1, "Mortar Sentry 2"}, {126, 1.0f, -1, -1, -1, -1, -1, -1, "Tesla Tower"}, {241, 1.0f, -1, -1, -1, -1, -1, -1, "AntiPersonal MineField / Eagle 110mm rocket pods part 2"}, {154, 1.0f, -1, -1, -1, -1, -1, -1, "500kg bomb1 shell"}, {273, 1.0f, -1, -1, -1, -1, -1, -1, "500kg bomb2 explosion"}, {152, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle 110mm rocket pods part 1"}, {142, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle airstrike part 1"}, {254, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle airstrike part 2"}, {229, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle cluster bomb"}, {159, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital 120MM HE barrage1"}, {268, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital 120MM HE barrage2"}, {305, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital laser"}, {160, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital precision strike1"}, {267, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital precision strike2"}, {161, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital railcannon strike1"}, {266, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital railcannon strike2"} }; // damage_type_name = "unknown type"; // strcpy(weapon_name_list, ""); // default damage multiplier for all damages. damage_ratio = 0.2f; if (*weapon_id != 0) { // set default values. May change during analyzing table later. weapon_name = "unknown damage"; //damage_is_unknown = true; // analyzing if we have damage_id in table for (int i = 0; i < sizeof(weapons) / sizeof(weapons[0]); ++i) { if (weapons[i].id == 0) { continue; } if (*weapon_id == weapons[i].id) { // damage_is_unknown = false; // we have this damage_id in table. So set flag 'damage_is_unknown' to false, with this we will not apply unknown_damage debuffer to this damage latter weapon_name = weapons[i].weapon_name; // is only for debugging. Used only in sprintf and OutputDebugString latter // damage_type_name = weapons[i].damage_type_name; if (weapons[i].damage_value != -1) { *weapon_dmg = weapons[i].damage_value; } if (weapons[i].armor_damage_value != -1) { *weapon_admg = weapons[i].armor_damage_value; } if (weapons[i].penetration1_no_angle_value != -1) { *weapon_pen1 = weapons[i].penetration1_no_angle_value; } if (weapons[i].penetration2_angle_value != -1) { *weapon_pen2 = weapons[i].penetration2_angle_value; } if (weapons[i].penetration3_unknown_value != -1) { *weapon_pen3 = weapons[i].penetration3_unknown_value; } if (weapons[i].penetration4_unknown_value != -1) { *weapon_pen4 = weapons[i].penetration4_unknown_value; } // apply damage multiplier damage_ratio = weapons[i].damage_mult; //strcat(weapon_name_list, " / "); //strcat(weapon_name_list, weapons[i].name); //sprintf(debug_string, "HD2. ID %d is for %s", *weapon_id, weapon_name); //OutputDebugStringA(debug_string); break; } } // If damage_id was not found in table. Then assume it is some enemy or environmental damage. Apply 'unknown_damage_mult' to it (reduce) /* if (damage_is_unknown) { *weapon_dmg = (int)((float)*weapon_dmg * unknown_damage_mult); *weapon_admg = (int)((float)*weapon_admg * unknown_damage_mult); *weapon_pen1 = (int)((float)*weapon_pen1 * unknown_damage_mult); *weapon_pen2 = (int)((float)*weapon_pen2 * unknown_damage_mult); *weapon_pen3 = (int)((float)*weapon_pen3 * unknown_damage_mult); *weapon_pen4 = (int)((float)*weapon_pen4 * unknown_damage_mult); }*/ sprintf(debug_string, "HD2 %3d | DMG %3d %3d | PEN %3d %3d %3d %3d | %s", *weapon_id, *weapon_dmg, *weapon_admg, *weapon_pen1, *weapon_pen2, *weapon_pen3, *weapon_pen4, weapon_name); OutputDebugStringA(debug_string); } // weapon_id != 0 {$asm} // standart code start movd xmm3,[rcx+04] movd xmm1,[rcx+08] cvtdq2ps xmm1,xmm1 cvtdq2ps xmm3,xmm3 // standart code end // damage_ratio part mulss xmm3, dword ptr [damage_ratio] mulss xmm1, dword ptr [damage_ratio] jmp damage_return damage_inject: jmp far damage_newmem nop 2 damage_return: // ------------------------------------------------------ [DISABLE]
it's in his table, buddy. just read. the table it's in his signature, as his post says. click the link and you'll be taken to the message with both the download for the table and the instructions.rdg1995 wrote: ↑Wed May 01, 2024 2:16 pmZoDDeL wrote: ↑Wed May 01, 2024 12:20 pmUPDATE:
added inf energy shield (instead of setting cooldown to zero this one just writes on the shield value)
added a bunch of weapon ID's
table and guide as usual in my signature.Spoiler
super dmg >>
MP-98 Knight
MG-43 / EXO-45 Gatling / Gatling Turret
anti material rifle
FLAM-40
MG-206 HMG
GP-31 grenade pistol
LAS-98
RS-422 railgun
R-36 Eruptor
LAS-99 quasar
RL-77 airburst
GP-31 explosive crossbow
emancipator exo gun
EXO-45 rocket
SG-8P Punisher Plasma
PLAS-1 Scorcher
pelican weapon
SG-225NS Breaker Nailspitter
default dmg >>
G-123 Thermite
anti tank mines
anti personnel mines
incendiary mines
tesla tower
mortar turret
rocket sentry turret
hellpot damage
//eagle airstrike
//orbital 380MM HE barrage
//eagle 110mm rocket pods
//eagle clusterbomb
//orbital airburst
how to make this work man> the infinite shield can you teach me?
You are the best ZoDDel! Donated to you for the great work. Hopefully others will reciprocate. ZoDDel's signature has their paypal for those who are feeling generous.ZoDDeL wrote: ↑Sat Mar 16, 2024 3:26 amalternative and simpler guide with slightly different approach with no address input and easier timing.
this guide doesnt make your CE undetected but let you activate scripts and close CE before gameguard notice what happened
so you can cheat without crash / hack detected!
but you cannot use CE to search for stuff or debug the game!!!
follow the text+ picture guide or just watch one of the videos down below
i show the usage at the beginning of each video.
......
If I understand this correctly would I be able to change a single weapon, by changing this values?Exemplify1524 wrote: ↑Wed May 01, 2024 10:29 amlatest and full version of modified ZoDDels damage script rewritten in ccode to more usability and changebility. good to use with table [Link]
main part is
// default damage multiplier for all damages.
damage_ratio = 0.2f;
and the weapons table
{51, 100.0f, -1, -1, 100, 100, 100, 100, "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / Guard Dog / Stalwart"},
51 is ID
100.0f is damage and armor damage multiplier (damage * multiplier)
-1 is damage (-1 for not change, for example to only multiply default value)
-1 is armor damage
100 is penetration1 at no angle is set to 100 (you can use -1 to not change)
100 is penetration2 with angle is set to 100 (you can use -1 to not change)
100 is penetration3 unknown is set to 100 (you can use -1 to not change)
100 is penetration4 unknown is set to 100 (you can use -1 to not change)
also damage monitoring with miscosoft DebugView tool is working.
Code: Select all
[ENABLE] aobscanmodule(damage_inject,game.dll,66 0F 6E 59 04 66 0F 6E 49 08 0F 5B C9 0F 5B DB) alloc(damage_newmem,$10000) label(damage_return) //label(damage_change) //label(damage_and_penetration_change) //label(damage_no_change) //label(damage_multiplier) alloc(damage_ratio,4) registersymbol(damage_ratio) damage_newmem: // push rbx //save rbx as it's going to be changed {$ccode base_address=rcx jmpaddress=rbx} extern __cdecl int sprintf(char *, char *, ...); extern __cdecl void OutputDebugStringA(const char* lpOutputString); extern float damage_ratio; //extern void damage_change(); //extern void damage_and_penetration_change(); //extern void damage_no_change(); char debug_string[400]; char* weapon_name; //float unknown_damage_mult = 0.2f; //bool damage_is_unknown; // char* damage_type_name; typedef struct { int id; float damage_mult; int damage_value; int armor_damage_value; int penetration1_no_angle_value; int penetration2_angle_value; int penetration3_unknown_value; int penetration4_unknown_value; char* weapon_name; } Weapon; int *weapon_id=(int*)(base_address); int *weapon_dmg=(int*)(base_address+0x04); int *weapon_admg=(int*)(base_address+0x08); int *weapon_pen1=(int*)(base_address+0x0C); int *weapon_pen2=(int*)(base_address+0x10); int *weapon_pen3=(int*)(base_address+0x14); int *weapon_pen4=(int*)(base_address+0x18); Weapon weapons[76] = { {326, 1.0f, -1, -1, -1, -1, -1, -1, "Helldiver melee"}, {50, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23C Liberator Concussive"}, {48, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23P Liberator Penetrator"}, {51, 100.0f, -1, -1, 100, 100, 100, 100, "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / Guard Dog / Stalwart"}, {73, 1.0f, -1, -1, -1, -1, -1, -1, "R-63 Diligence"}, {74, 1.0f, -1, -1, -1, -1, -1, -1, "R-63CS Diligence Counter Sniper"}, {65, 1.0f, -1, -1, -1, -1, -1, -1, "AR-20L Justice / BR-14 Adjudicator / Machine Gun / Gatling/Machine Gun Sentry"}, {26, 1.0f, -1, -1, -1, -1, -1, -1, "MP-98 Knight"}, {34, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8S / SMG-37 Defender"}, {117, 1.0f, -1, -1, -1, -1, -1, -1, "ARC-12 Blitzer"}, {93, 1.0f, -1, -1, -1, -1, -1, -1, "Break action shotgun"}, {102, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225 Breaker"}, {103, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225BB Breaker Bugbiter"}, {104, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225NS Breaker Nailspitter"}, {101, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225SP Breaker Spray&Pray"}, {105, 1.0f, -1, -1, -1, -1, -1, -1, "SG-255IE Breaker Incendiary"}, {88, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8 Punisher"}, {99, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8S Slugger"}, {124, 1.0f, -1, -1, -1, -1, -1, -1, "CB-9 Exploding Crossbow"}, {84, 1.0f, -1, -1, -1, -1, -1, -1, "JAR-5 Dominator"}, {80, 1.0f, -1, -1, -1, -1, -1, -1, "R-36 Eruptor"}, {19, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-16 Sickle"}, {297, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-5 Scythe"}, {20, 1.0f, -1, -1, -1, -1, -1, -1, "PLAS-1 Scorcher / SG-8P Punisher Plasma"}, {134, 1.0f, -1, -1, -1, -1, -1, -1, "GP-31 Grenade Pistol"}, {296, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-7 Dagger"}, {44, 1.0f, -1, -1, -1, -1, -1, -1, "P-4 Senator"}, {25, 1.0f, -1, -1, -1, -1, -1, -1, "P-19 Redeemer / P-2 Peacemaker"}, {203, 1.0f, -1, -1, -1, -1, -1, -1, "G-10 Incendiary"}, {201, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 1"}, {201, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 1"}, {111, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 2"}, {213, 1.0f, -1, -1, -1, -1, -1, -1, "G-12 High Explosive / G-16 Impact"}, {204, 1.0f, -1, -1, -1, -1, -1, -1, "G-123 Thermite"}, {122, 1.0f, -1, -1, -1, -1, -1, -1, "Antimaterial Rifle"}, {115, 1.0f, -1, -1, -1, -1, -1, -1, "ARC3 Thrower"}, {127, 1.0f, -1, -1, -1, -1, -1, -1, "Autocannon (part 1/2)"}, {216, 1.0f, -1, -1, -1, -1, -1, -1, "Autocannon (part 2/2)"}, {145, 1.0f, -1, -1, -1, -1, -1, -1, "Commando"}, {135, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 1"}, {189, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 2"}, {226, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 3"}, {129, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator gun part 1"}, {217, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator gun part 2"}, {147, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator rocket part 1"}, {234, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator rocket part 2"}, {9, 1.0f, -1, -1, -1, -1, -1, -1, "FLAM-40 Flamethrower part 1"}, {220, 1.0f, -1, -1, -1, -1, -1, -1, "GL-21 Grenade launcher part 2 explosion"}, {121, 1.0f, -1, -1, -1, -1, -1, -1, "Heavy Machinegun"}, {149, 1.0f, -1, -1, -1, -1, -1, -1, "Javelin rocket part 1"}, {236, 1.0f, -1, -1, -1, -1, -1, -1, "Javelin rocket part 2"}, {302, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-98 Laser Cannon"}, {227, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 1"}, {228, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 2"}, {280, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 3 (???)"}, {136, 1.0f, -1, -1, -1, -1, -1, -1, "Recoiless Rifle part 1 shell"}, {225, 1.0f, -1, -1, -1, -1, -1, -1, "Recoiless Rifle part 2 explosion"}, {22, 1.0f, -1, -1, -1, -1, -1, -1, "RS-422 Railgun"}, {10, 1.0f, -1, -1, -1, -1, -1, -1, "GL-21 Grenade launcher part 1 / Mortar Sentry shell"}, {11, 1.0f, -1, -1, -1, -1, -1, -1, "Grenade Launcher / EMS Mortar Sentry / Mortar Sentry 1"}, {223, 1.0f, -1, -1, -1, -1, -1, -1, "Mortar Sentry 2"}, {126, 1.0f, -1, -1, -1, -1, -1, -1, "Tesla Tower"}, {241, 1.0f, -1, -1, -1, -1, -1, -1, "AntiPersonal MineField / Eagle 110mm rocket pods part 2"}, {154, 1.0f, -1, -1, -1, -1, -1, -1, "500kg bomb1 shell"}, {273, 1.0f, -1, -1, -1, -1, -1, -1, "500kg bomb2 explosion"}, {152, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle 110mm rocket pods part 1"}, {142, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle airstrike part 1"}, {254, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle airstrike part 2"}, {229, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle cluster bomb"}, {159, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital 120MM HE barrage1"}, {268, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital 120MM HE barrage2"}, {305, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital laser"}, {160, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital precision strike1"}, {267, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital precision strike2"}, {161, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital railcannon strike1"}, {266, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital railcannon strike2"} }; // damage_type_name = "unknown type"; // strcpy(weapon_name_list, ""); // default damage multiplier for all damages. damage_ratio = 0.2f; if (*weapon_id != 0) { // set default values. May change during analyzing table later. weapon_name = "unknown damage"; //damage_is_unknown = true; // analyzing if we have damage_id in table for (int i = 0; i < sizeof(weapons) / sizeof(weapons[0]); ++i) { if (weapons[i].id == 0) { continue; } if (*weapon_id == weapons[i].id) { // damage_is_unknown = false; // we have this damage_id in table. So set flag 'damage_is_unknown' to false, with this we will not apply unknown_damage debuffer to this damage latter weapon_name = weapons[i].weapon_name; // is only for debugging. Used only in sprintf and OutputDebugString latter // damage_type_name = weapons[i].damage_type_name; if (weapons[i].damage_value != -1) { *weapon_dmg = weapons[i].damage_value; } if (weapons[i].armor_damage_value != -1) { *weapon_admg = weapons[i].armor_damage_value; } if (weapons[i].penetration1_no_angle_value != -1) { *weapon_pen1 = weapons[i].penetration1_no_angle_value; } if (weapons[i].penetration2_angle_value != -1) { *weapon_pen2 = weapons[i].penetration2_angle_value; } if (weapons[i].penetration3_unknown_value != -1) { *weapon_pen3 = weapons[i].penetration3_unknown_value; } if (weapons[i].penetration4_unknown_value != -1) { *weapon_pen4 = weapons[i].penetration4_unknown_value; } // apply damage multiplier damage_ratio = weapons[i].damage_mult; //strcat(weapon_name_list, " / "); //strcat(weapon_name_list, weapons[i].name); //sprintf(debug_string, "HD2. ID %d is for %s", *weapon_id, weapon_name); //OutputDebugStringA(debug_string); break; } } // If damage_id was not found in table. Then assume it is some enemy or environmental damage. Apply 'unknown_damage_mult' to it (reduce) /* if (damage_is_unknown) { *weapon_dmg = (int)((float)*weapon_dmg * unknown_damage_mult); *weapon_admg = (int)((float)*weapon_admg * unknown_damage_mult); *weapon_pen1 = (int)((float)*weapon_pen1 * unknown_damage_mult); *weapon_pen2 = (int)((float)*weapon_pen2 * unknown_damage_mult); *weapon_pen3 = (int)((float)*weapon_pen3 * unknown_damage_mult); *weapon_pen4 = (int)((float)*weapon_pen4 * unknown_damage_mult); }*/ sprintf(debug_string, "HD2 %3d | DMG %3d %3d | PEN %3d %3d %3d %3d | %s", *weapon_id, *weapon_dmg, *weapon_admg, *weapon_pen1, *weapon_pen2, *weapon_pen3, *weapon_pen4, weapon_name); OutputDebugStringA(debug_string); } // weapon_id != 0 {$asm} // standart code start movd xmm3,[rcx+04] movd xmm1,[rcx+08] cvtdq2ps xmm1,xmm1 cvtdq2ps xmm3,xmm3 // standart code end // damage_ratio part mulss xmm3, dword ptr [damage_ratio] mulss xmm1, dword ptr [damage_ratio] jmp damage_return damage_inject: jmp far damage_newmem nop 2 damage_return: // ------------------------------------------------------ [DISABLE]
I believe so, but in the example you provided, you would need to keep the Weapon ID "50" instead of changing it to "150" to only affect the Liberator Concussive.gunbalde60 wrote: ↑Thu May 02, 2024 12:36 amIf I understand this correctly would I be able to change a single weapon, by changing this values?Exemplify1524 wrote: ↑Wed May 01, 2024 10:29 amlatest and full version of modified ZoDDels damage script rewritten in ccode to more usability and changebility. good to use with table [Link]
main part is
// default damage multiplier for all damages.
damage_ratio = 0.2f;
and the weapons table
{51, 100.0f, -1, -1, 100, 100, 100, 100, "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / Guard Dog / Stalwart"},
51 is ID
100.0f is damage and armor damage multiplier (damage * multiplier)
-1 is damage (-1 for not change, for example to only multiply default value)
-1 is armor damage
100 is penetration1 at no angle is set to 100 (you can use -1 to not change)
100 is penetration2 with angle is set to 100 (you can use -1 to not change)
100 is penetration3 unknown is set to 100 (you can use -1 to not change)
100 is penetration4 unknown is set to 100 (you can use -1 to not change)
also damage monitoring with miscosoft DebugView tool is working.
Code: Select all
[ENABLE] aobscanmodule(damage_inject,game.dll,66 0F 6E 59 04 66 0F 6E 49 08 0F 5B C9 0F 5B DB) alloc(damage_newmem,$10000) label(damage_return) //label(damage_change) //label(damage_and_penetration_change) //label(damage_no_change) //label(damage_multiplier) alloc(damage_ratio,4) registersymbol(damage_ratio) damage_newmem: // push rbx //save rbx as it's going to be changed {$ccode base_address=rcx jmpaddress=rbx} extern __cdecl int sprintf(char *, char *, ...); extern __cdecl void OutputDebugStringA(const char* lpOutputString); extern float damage_ratio; //extern void damage_change(); //extern void damage_and_penetration_change(); //extern void damage_no_change(); char debug_string[400]; char* weapon_name; //float unknown_damage_mult = 0.2f; //bool damage_is_unknown; // char* damage_type_name; typedef struct { int id; float damage_mult; int damage_value; int armor_damage_value; int penetration1_no_angle_value; int penetration2_angle_value; int penetration3_unknown_value; int penetration4_unknown_value; char* weapon_name; } Weapon; int *weapon_id=(int*)(base_address); int *weapon_dmg=(int*)(base_address+0x04); int *weapon_admg=(int*)(base_address+0x08); int *weapon_pen1=(int*)(base_address+0x0C); int *weapon_pen2=(int*)(base_address+0x10); int *weapon_pen3=(int*)(base_address+0x14); int *weapon_pen4=(int*)(base_address+0x18); Weapon weapons[76] = { {326, 1.0f, -1, -1, -1, -1, -1, -1, "Helldiver melee"}, {50, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23C Liberator Concussive"}, {48, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23P Liberator Penetrator"}, {51, 100.0f, -1, -1, 100, 100, 100, 100, "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / Guard Dog / Stalwart"}, {73, 1.0f, -1, -1, -1, -1, -1, -1, "R-63 Diligence"}, {74, 1.0f, -1, -1, -1, -1, -1, -1, "R-63CS Diligence Counter Sniper"}, {65, 1.0f, -1, -1, -1, -1, -1, -1, "AR-20L Justice / BR-14 Adjudicator / Machine Gun / Gatling/Machine Gun Sentry"}, {26, 1.0f, -1, -1, -1, -1, -1, -1, "MP-98 Knight"}, {34, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8S / SMG-37 Defender"}, {117, 1.0f, -1, -1, -1, -1, -1, -1, "ARC-12 Blitzer"}, {93, 1.0f, -1, -1, -1, -1, -1, -1, "Break action shotgun"}, {102, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225 Breaker"}, {103, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225BB Breaker Bugbiter"}, {104, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225NS Breaker Nailspitter"}, {101, 1.0f, -1, -1, -1, -1, -1, -1, "SG-225SP Breaker Spray&Pray"}, {105, 1.0f, -1, -1, -1, -1, -1, -1, "SG-255IE Breaker Incendiary"}, {88, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8 Punisher"}, {99, 1.0f, -1, -1, -1, -1, -1, -1, "SG-8S Slugger"}, {124, 1.0f, -1, -1, -1, -1, -1, -1, "CB-9 Exploding Crossbow"}, {84, 1.0f, -1, -1, -1, -1, -1, -1, "JAR-5 Dominator"}, {80, 1.0f, -1, -1, -1, -1, -1, -1, "R-36 Eruptor"}, {19, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-16 Sickle"}, {297, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-5 Scythe"}, {20, 1.0f, -1, -1, -1, -1, -1, -1, "PLAS-1 Scorcher / SG-8P Punisher Plasma"}, {134, 1.0f, -1, -1, -1, -1, -1, -1, "GP-31 Grenade Pistol"}, {296, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-7 Dagger"}, {44, 1.0f, -1, -1, -1, -1, -1, -1, "P-4 Senator"}, {25, 1.0f, -1, -1, -1, -1, -1, -1, "P-19 Redeemer / P-2 Peacemaker"}, {203, 1.0f, -1, -1, -1, -1, -1, -1, "G-10 Incendiary"}, {201, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 1"}, {201, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 1"}, {111, 1.0f, -1, -1, -1, -1, -1, -1, "G-6 Frag part 2"}, {213, 1.0f, -1, -1, -1, -1, -1, -1, "G-12 High Explosive / G-16 Impact"}, {204, 1.0f, -1, -1, -1, -1, -1, -1, "G-123 Thermite"}, {122, 1.0f, -1, -1, -1, -1, -1, -1, "Antimaterial Rifle"}, {115, 1.0f, -1, -1, -1, -1, -1, -1, "ARC3 Thrower"}, {127, 1.0f, -1, -1, -1, -1, -1, -1, "Autocannon (part 1/2)"}, {216, 1.0f, -1, -1, -1, -1, -1, -1, "Autocannon (part 2/2)"}, {145, 1.0f, -1, -1, -1, -1, -1, -1, "Commando"}, {135, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 1"}, {189, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 2"}, {226, 1.0f, -1, -1, -1, -1, -1, -1, "EAT-17 Expendable Anti-Tank part 3"}, {129, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator gun part 1"}, {217, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator gun part 2"}, {147, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator rocket part 1"}, {234, 1.0f, -1, -1, -1, -1, -1, -1, "EXO-45 Emancipator rocket part 2"}, {9, 1.0f, -1, -1, -1, -1, -1, -1, "FLAM-40 Flamethrower part 1"}, {220, 1.0f, -1, -1, -1, -1, -1, -1, "GL-21 Grenade launcher part 2 explosion"}, {121, 1.0f, -1, -1, -1, -1, -1, -1, "Heavy Machinegun"}, {149, 1.0f, -1, -1, -1, -1, -1, -1, "Javelin rocket part 1"}, {236, 1.0f, -1, -1, -1, -1, -1, -1, "Javelin rocket part 2"}, {302, 1.0f, -1, -1, -1, -1, -1, -1, "LAS-98 Laser Cannon"}, {227, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 1"}, {228, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 2"}, {280, 1.0f, -1, -1, -1, -1, -1, -1, "Quasar Cannon part 3 (???)"}, {136, 1.0f, -1, -1, -1, -1, -1, -1, "Recoiless Rifle part 1 shell"}, {225, 1.0f, -1, -1, -1, -1, -1, -1, "Recoiless Rifle part 2 explosion"}, {22, 1.0f, -1, -1, -1, -1, -1, -1, "RS-422 Railgun"}, {10, 1.0f, -1, -1, -1, -1, -1, -1, "GL-21 Grenade launcher part 1 / Mortar Sentry shell"}, {11, 1.0f, -1, -1, -1, -1, -1, -1, "Grenade Launcher / EMS Mortar Sentry / Mortar Sentry 1"}, {223, 1.0f, -1, -1, -1, -1, -1, -1, "Mortar Sentry 2"}, {126, 1.0f, -1, -1, -1, -1, -1, -1, "Tesla Tower"}, {241, 1.0f, -1, -1, -1, -1, -1, -1, "AntiPersonal MineField / Eagle 110mm rocket pods part 2"}, {154, 1.0f, -1, -1, -1, -1, -1, -1, "500kg bomb1 shell"}, {273, 1.0f, -1, -1, -1, -1, -1, -1, "500kg bomb2 explosion"}, {152, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle 110mm rocket pods part 1"}, {142, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle airstrike part 1"}, {254, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle airstrike part 2"}, {229, 1.0f, -1, -1, -1, -1, -1, -1, "Eagle cluster bomb"}, {159, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital 120MM HE barrage1"}, {268, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital 120MM HE barrage2"}, {305, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital laser"}, {160, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital precision strike1"}, {267, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital precision strike2"}, {161, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital railcannon strike1"}, {266, 1.0f, -1, -1, -1, -1, -1, -1, "Orbital railcannon strike2"} }; // damage_type_name = "unknown type"; // strcpy(weapon_name_list, ""); // default damage multiplier for all damages. damage_ratio = 0.2f; if (*weapon_id != 0) { // set default values. May change during analyzing table later. weapon_name = "unknown damage"; //damage_is_unknown = true; // analyzing if we have damage_id in table for (int i = 0; i < sizeof(weapons) / sizeof(weapons[0]); ++i) { if (weapons[i].id == 0) { continue; } if (*weapon_id == weapons[i].id) { // damage_is_unknown = false; // we have this damage_id in table. So set flag 'damage_is_unknown' to false, with this we will not apply unknown_damage debuffer to this damage latter weapon_name = weapons[i].weapon_name; // is only for debugging. Used only in sprintf and OutputDebugString latter // damage_type_name = weapons[i].damage_type_name; if (weapons[i].damage_value != -1) { *weapon_dmg = weapons[i].damage_value; } if (weapons[i].armor_damage_value != -1) { *weapon_admg = weapons[i].armor_damage_value; } if (weapons[i].penetration1_no_angle_value != -1) { *weapon_pen1 = weapons[i].penetration1_no_angle_value; } if (weapons[i].penetration2_angle_value != -1) { *weapon_pen2 = weapons[i].penetration2_angle_value; } if (weapons[i].penetration3_unknown_value != -1) { *weapon_pen3 = weapons[i].penetration3_unknown_value; } if (weapons[i].penetration4_unknown_value != -1) { *weapon_pen4 = weapons[i].penetration4_unknown_value; } // apply damage multiplier damage_ratio = weapons[i].damage_mult; //strcat(weapon_name_list, " / "); //strcat(weapon_name_list, weapons[i].name); //sprintf(debug_string, "HD2. ID %d is for %s", *weapon_id, weapon_name); //OutputDebugStringA(debug_string); break; } } // If damage_id was not found in table. Then assume it is some enemy or environmental damage. Apply 'unknown_damage_mult' to it (reduce) /* if (damage_is_unknown) { *weapon_dmg = (int)((float)*weapon_dmg * unknown_damage_mult); *weapon_admg = (int)((float)*weapon_admg * unknown_damage_mult); *weapon_pen1 = (int)((float)*weapon_pen1 * unknown_damage_mult); *weapon_pen2 = (int)((float)*weapon_pen2 * unknown_damage_mult); *weapon_pen3 = (int)((float)*weapon_pen3 * unknown_damage_mult); *weapon_pen4 = (int)((float)*weapon_pen4 * unknown_damage_mult); }*/ sprintf(debug_string, "HD2 %3d | DMG %3d %3d | PEN %3d %3d %3d %3d | %s", *weapon_id, *weapon_dmg, *weapon_admg, *weapon_pen1, *weapon_pen2, *weapon_pen3, *weapon_pen4, weapon_name); OutputDebugStringA(debug_string); } // weapon_id != 0 {$asm} // standart code start movd xmm3,[rcx+04] movd xmm1,[rcx+08] cvtdq2ps xmm1,xmm1 cvtdq2ps xmm3,xmm3 // standart code end // damage_ratio part mulss xmm3, dword ptr [damage_ratio] mulss xmm1, dword ptr [damage_ratio] jmp damage_return damage_inject: jmp far damage_newmem nop 2 damage_return: // ------------------------------------------------------ [DISABLE]
{50, 1.0f, -1, -1, -1, -1, -1, -1, "AR-23C Liberator Concussive"},
EX:
{150, 1.0f, 5, 5, 5, 5, 5, 5, "AR-23C Liberator Concussive"},
Would this work? Or am I not understanding this correctly?