HELLDIVERS 2

Upload your cheat tables here (No requests)
nos4r2
Expert Cheater
Expert Cheater
Posts: 241
Joined: Sun Oct 29, 2017 3:58 am
Reputation: 46

Re: HELLDIVERS 2

Post by nos4r2 »

ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:

added weapon ID's
// SG-8 Punisher
// SG-8S Slugger
// SG-225 Breaker
// SG-225IE Breaker Incendiary
// Napalm SEAF impact
// High-yield SEAF explosion
// Hellbomb / SEAF Mini-Nuke
// AX/LAS-5 "Guard Dog" Rover

P-2 Peacemaker
(has own ID now, was together with redeemer before)

changed a few explosive / unsafe
weapon ID's to default to prevent selfkills.

added the updated inf strategems (no cooldown)
(made by gir489)

added a pre-script that holds
a bunch of customizable user settings
and is required for many scripts to run!

added a bunch of custom options and
jumps (weapon dmg, penetration, demo, stagger)
to super damage mod.
added a legit option to speedhack


table + guide as usual in my signature



about new pre-script:
(<---- start me after game.dll is fully loaded (This program c))
this check if game.dll is loaded but you still have to wait for the value above to poulate before active.
also this adds a bunch of globals that work as user settings.
this pre-script is a requirement for many scripts to work!!!!!

just open the script and take a look into.
you can change values like:
the amounts for killcount or rescue count.
damage multipliers(global) for super damage mod
custom damage values (multiply or static(set or add)
// using custom requires to manual change the jumps in super damage mod script / aio)
as example the P-19 Redeemer currently jumps to custom so is has a bit added dmg instead of multiply (from global)
and is doesnt do demo but pen and stagger.

toggle for super dmg mod (damage to stagger global order)
these toggles allow you with a simple 1 / 0 to enable or disable damage, penetration, demo or stagger for
weapons that jump to super dmg or enemy dmg
speedhack mode switch (legit / obvious)

this might be a bit overwhelming for some but at least the most values/toggles
are now in one place instead of spread over all scripts.
i plan to add more values/toggles in the future for more fine tuning of
super damage mod and some other scripts like speedhack.
if you dont find a value you wanna change in the pre-script yet they still are in their respective scripts like
speed multipliers in speedhack or penetration in super damage mod.

i know it looks a bit messy but i wanna have big all inclusive solution instead of a bundle of single scripts.
the idea is, once you have setup your personal settings you just can run the aio script instead of clicking 10 scripts...

p.s. strongly suggest ctrl+f for search in the scripts as they are now got a bit inflated.
So no individual script going forward? :(

How to exclude some weapon id or it not possible anymore?

How to use this cheat table?
  1. Install Cheat Engine
  2. Double-click the .CT file in order to open it.
  3. Click the PC icon in Cheat Engine in order to select the game process.
  4. Keep the list.
  5. Activate the trainer options by checking boxes or setting values from 0 to 1

Gundraz
What is cheating?
What is cheating?
Posts: 1
Joined: Sat May 18, 2024 12:33 pm
Reputation: 0

Re: HELLDIVERS 2

Post by Gundraz »

ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:

added weapon ID's
// SG-8 Punisher
// SG-8S Slugger
// SG-225 Breaker
// SG-225IE Breaker Incendiary
// Napalm SEAF impact
// High-yield SEAF explosion
// Hellbomb / SEAF Mini-Nuke
// AX/LAS-5 "Guard Dog" Rover

P-2 Peacemaker
(has own ID now, was together with redeemer before)

changed a few explosive / unsafe
weapon ID's to default to prevent selfkills.

added the updated inf strategems (no cooldown)
(made by gir489)

added a pre-script that holds
a bunch of customizable user settings
and is required for many scripts to run!

added a bunch of custom options and
jumps (weapon dmg, penetration, demo, stagger)
to super damage mod.
added a legit option to speedhack


table + guide as usual in my signature



about new pre-script:
(<---- start me after game.dll is fully loaded (This program c))
this check if game.dll is loaded but you still have to wait for the value above to poulate before active.
also this adds a bunch of globals that work as user settings.
this pre-script is a requirement for many scripts to work!!!!!

just open the script and take a look into.
you can change values like:
the amounts for killcount or rescue count.
damage multipliers(global) for super damage mod
custom damage values (multiply or static(set or add)
// using custom requires to manual change the jumps in super damage mod script / aio)
as example the P-19 Redeemer currently jumps to custom so is has a bit added dmg instead of multiply (from global)
and is doesnt do demo but pen and stagger.

toggle for super dmg mod (damage to stagger global order)
these toggles allow you with a simple 1 / 0 to enable or disable damage, penetration, demo or stagger for
weapons that jump to super dmg or enemy dmg
speedhack mode switch (legit / obvious)

this might be a bit overwhelming for some but at least the most values/toggles
are now in one place instead of spread over all scripts.
i plan to add more values/toggles in the future for more fine tuning of
super damage mod and some other scripts like speedhack.
if you dont find a value you wanna change in the pre-script yet they still are in their respective scripts like
speed multipliers in speedhack or penetration in super damage mod.

i know it looks a bit messy but i wanna have big all inclusive solution instead of a bundle of single scripts.
the idea is, once you have setup your personal settings you just can run the aio script instead of clicking 10 scripts...

p.s. strongly suggest ctrl+f for search in the scripts as they are now got a bit inflated.
Is there any chance youd ever add in the ability to use the unreleased stratagems that seemed to disappear a few weeks ago? If you have access to them that is. IE, the SEAF Squad call in.

elamigopaisa
Novice Cheater
Novice Cheater
Posts: 22
Joined: Fri Feb 02, 2024 5:49 pm
Reputation: 1

Re: HELLDIVERS 2

Post by elamigopaisa »

ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:

added weapon ID's
// SG-8 Punisher
// SG-8S Slugger
// SG-225 Breaker
// SG-225IE Breaker Incendiary
// Napalm SEAF impact
// High-yield SEAF explosion
// Hellbomb / SEAF Mini-Nuke
// AX/LAS-5 "Guard Dog" Rover

P-2 Peacemaker
(has own ID now, was together with redeemer before)

changed a few explosive / unsafe
weapon ID's to default to prevent selfkills.

added the updated inf strategems (no cooldown)
(made by gir489)

added a pre-script that holds
a bunch of customizable user settings
and is required for many scripts to run!

added a bunch of custom options and
jumps (weapon dmg, penetration, demo, stagger)
to super damage mod.
added a legit option to speedhack


table + guide as usual in my signature



about new pre-script:
(<---- start me after game.dll is fully loaded (This program c))
this check if game.dll is loaded but you still have to wait for the value above to poulate before active.
also this adds a bunch of globals that work as user settings.
this pre-script is a requirement for many scripts to work!!!!!

just open the script and take a look into.
you can change values like:
the amounts for killcount or rescue count.
damage multipliers(global) for super damage mod
custom damage values (multiply or static(set or add)
// using custom requires to manual change the jumps in super damage mod script / aio)
as example the P-19 Redeemer currently jumps to custom so is has a bit added dmg instead of multiply (from global)
and is doesnt do demo but pen and stagger.

toggle for super dmg mod (damage to stagger global order)
these toggles allow you with a simple 1 / 0 to enable or disable damage, penetration, demo or stagger for
weapons that jump to super dmg or enemy dmg
speedhack mode switch (legit / obvious)

this might be a bit overwhelming for some but at least the most values/toggles
are now in one place instead of spread over all scripts.
i plan to add more values/toggles in the future for more fine tuning of
super damage mod and some other scripts like speedhack.
if you dont find a value you wanna change in the pre-script yet they still are in their respective scripts like
speed multipliers in speedhack or penetration in super damage mod.

i know it looks a bit messy but i wanna have big all inclusive solution instead of a bundle of single scripts.
the idea is, once you have setup your personal settings you just can run the aio script instead of clicking 10 scripts...

p.s. strongly suggest ctrl+f for search in the scripts as they are now got a bit inflated.
it tells me that it cant compile certain parts of the speedhack script, im trying to only use the legit version

User avatar
ZoDDeL
Table Makers
Table Makers
Posts: 138
Joined: Mon May 08, 2017 9:37 am
Reputation: 294

Re: HELLDIVERS 2

Post by ZoDDeL »

nos4r2 wrote:
Sat May 18, 2024 8:43 am
ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:
So no individual script going forward? :(

How to exclude some weapon id or it not possible anymore?
you still just can open the super dmg script / aio script.
you need to right click the prescript and change group config and untick hide children.
then you can edit super dmg / aio.
elamigopaisa wrote:
Sat May 18, 2024 3:27 pm
it tells me that it cant compile certain parts of the speedhack script, im trying to only use the legit version
you can ignore the memory allocation error and just click yes to edit stuff.
this error just shows up because the script uses globalalloc but there is no process hooked yet...


p.s.
does anybody still have my previous table? from a few days ago?.
i had it overwritten and no backup so if somebody could send it to me.

T420killz
What is cheating?
What is cheating?
Posts: 4
Joined: Fri Mar 29, 2024 5:00 am
Reputation: 0

Re: HELLDIVERS 2

Post by T420killz »

here u go @zoddel
Attachments
helldivers2_ZoDDeL (11).CT
(56.71 KiB) Downloaded 148 times

T420killz
What is cheating?
What is cheating?
Posts: 4
Joined: Fri Mar 29, 2024 5:00 am
Reputation: 0

Re: HELLDIVERS 2

Post by T420killz »

ZoDDeL wrote:
Sat May 18, 2024 3:59 pm
nos4r2 wrote:
Sat May 18, 2024 8:43 am
ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:
So no individual script going forward? :(

How to exclude some weapon id or it not possible anymore?
you still just can open the super dmg script / aio script.
you need to right click the prescript and change group config and untick hide children.
then you can edit super dmg / aio.
elamigopaisa wrote:
Sat May 18, 2024 3:27 pm
it tells me that it cant compile certain parts of the speedhack script, im trying to only use the legit version
you can ignore the memory allocation error and just click yes to edit stuff.
this error just shows up because the script uses globalalloc but there is no process hooked yet...


p.s.
does anybody still have my previous table? from a few days ago?.
i had it overwritten and no backup so if somebody could send it to me.
posted above

nos4r2
Expert Cheater
Expert Cheater
Posts: 241
Joined: Sun Oct 29, 2017 3:58 am
Reputation: 46

Re: HELLDIVERS 2

Post by nos4r2 »

T420killz wrote:
Sat May 18, 2024 5:10 pm
here u go @zoddel
Thx i'm gonna stick with this dmg script for now, the new one kinda confusing to setup for me.

elamigopaisa
Novice Cheater
Novice Cheater
Posts: 22
Joined: Fri Feb 02, 2024 5:49 pm
Reputation: 1

Re: HELLDIVERS 2

Post by elamigopaisa »

ZoDDeL wrote:
Sat May 18, 2024 3:59 pm
nos4r2 wrote:
Sat May 18, 2024 8:43 am
ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:
So no individual script going forward? :(

How to exclude some weapon id or it not possible anymore?
you still just can open the super dmg script / aio script.
you need to right click the prescript and change group config and untick hide children.
then you can edit super dmg / aio.
elamigopaisa wrote:
Sat May 18, 2024 3:27 pm
it tells me that it cant compile certain parts of the speedhack script, im trying to only use the legit version
you can ignore the memory allocation error and just click yes to edit stuff.
this error just shows up because the script uses globalalloc but there is no process hooked yet...


p.s.
does anybody still have my previous table? from a few days ago?.
i had it overwritten and no backup so if somebody could send it to me.
so although the checkbox is not on that means the script is running?

User avatar
ZoDDeL
Table Makers
Table Makers
Posts: 138
Joined: Mon May 08, 2017 9:37 am
Reputation: 294

Re: HELLDIVERS 2

Post by ZoDDeL »

UPDATE / ROLLBACK:

i wasnt happy with the recent changes
(too much lines, too complex, too much to maintain, not userfriendly).
so i made a rollback to previous table and
added the ID's and inf strategem script by gir489.

2 steps forward and 1 back.
sorry for the struggle you may had.


p.s.
thx to all who respond to my request for the missing table :D

Jokersrwild
Noobzor
Noobzor
Posts: 5
Joined: Sat Apr 20, 2024 3:51 am
Reputation: 0

Re: HELLDIVERS 2

Post by Jokersrwild »

Zodd not sure which line controls superdamage for terrain damage but I got one shot by a piece of barbwire today XD any idea which line I should adjust to fix that?

User avatar
ZoDDeL
Table Makers
Table Makers
Posts: 138
Joined: Mon May 08, 2017 9:37 am
Reputation: 294

Re: HELLDIVERS 2

Post by ZoDDeL »

Jokersrwild wrote:
Sat May 18, 2024 11:36 pm
Zodd not sure which line controls superdamage for terrain damage but I got one shot by a piece of barbwire today XD any idea which line I should adjust to fix that?
usually everything not whitelisted get dmg to 0 (or to the value you might had change it for enemy)
there is a slight chance that the barbwire uses same id as a weapon put on super dmg (including penetration, demolation)
but to check this i need more information. cant rember ever had this before.
i assume a bot planet? did you remember the name and mission type?
will try to find it next time i work on the table.

Exemplify1524
Cheater
Cheater
Posts: 34
Joined: Tue Apr 30, 2024 8:37 am
Reputation: 16

Re: HELLDIVERS 2

Post by Exemplify1524 »

nos4r2 wrote:
Sat May 18, 2024 1:55 am
Hi can you fix the lastest dmg script you did? it have some weird bug that every weapon or stuff will ragdoll myself to dead if i happen to hit myself with it ( with aoe ) i even test your default value but it still happen, you can try use scorcher to shoot near the ground at front of you or stun grenade which shouldn't ragdoll you but it did, same thing with another explosive weapon ( autocannon, nade pistol etc )
Hi. Yes, I played too much with the "knockback" parameter. I found this option to be very fun (enemies flying out far), but it leads that you flying out far if your own damage hits you too. It can be fixed by blacklisting from HIGH Knockback values weapons that have explosion effect. But more simple is just set 0 to all knockback parameters (enemy and your own).

I attached .ct where this is fixed.
Also added to weapon damage script GOD hotkey (ctrl by default) while you pressing it all OUTPUT damage (not unknown or enemy or environment) are set to extremely high values. So you playing like normal person, but if situation is bad, you press ctrl and can destroy enemy buildings or titans with one shot from pistol. Then release Ctrl key and play as normal (with multipliers and values you set in table) again.
This works for sentries, stratagems, rover dog. So it can help a lot in bad scenarios.

Also added more parameters in weapons damage script:

Now additionally to individual damage settings you can set more general values (all script code is commented, you can read):

// set multiplier 0 to set damage to 0. For example damage 4000 * 0 = 0. Set 0.5f to get only half of damage 4000*0.5 = 2000. Set 2.0f to multiply input damage by 2 4000*2=8000.
// the same for DEMOLITION and KNOCKBACK
#define INPUT_DAMAGE_MULTIPLIER 0.4f
#define INPUT_PENETRATION_MULTIPLIER 0.5f
#define INPUT_DEMOLITION_MULTIPLIER 0.0f
#define INPUT_KNOCKBACK_MULTIPLIER 0.0f

#define OUTPUT_DAMAGE_MULTIPLIER 3.0f
#define OUTPUT_PENETRATION_MULTIPLIER 1.0f
#define OUTPUT_DEMOLITION_MULTIPLIER 1.0f
// explosion guns will not ragdoll you if shoot nearly
#define OUTPUT_KNOCKBACK_MULTIPLIER 0.0f

// ADD is absolute value to add before multiplying. for example you want to set output knockback multiplier to 2.0f. But pistol have knockback value 0 by default. So the formula will be 0 * 2 = 0 - no knockback
// Here you can set add value. So if set OUTPUT_KNOCKBACK_ADD to 20, pistol will get knockback with this formula (0 (game default) + 20 (OUTPUT_KNOCKBACK_ADD)) * 2 (OUTPUT_KNOCKBACK_MULTIPLIER) = 20 * 2 = 40 knockback
// negative values acceptable too. But result value will be clamped to not go below 0.
#define INPUT_DAMAGE_ADD 0
#define INPUT_PENETRATION_ADD 0
#define INPUT_DEMOLITION_ADD 0
#define INPUT_KNOCKBACK_ADD 0

#define OUTPUT_DAMAGE_ADD 0
#define OUTPUT_PENETRATION_ADD 0
#define OUTPUT_DEMOLITION_ADD 0
#define OUTPUT_KNOCKBACK_ADD 0




Also added Input damage limit parameter:

// INPUT_DAMAGE_LIMIT if titan attack you it have 4000 damage, instant kill. You can set maximum damage for any unknown/enemy/environment
// Set any negative value to switch off this function
#define INPUT_DAMAGE_LIMIT 80


If somethink dont work as it should, for debugging purposes, I recommend to get opensourse DebugViewPP tool, run it while you playing, there will appear debug messages from weapon damage script. You can put here debug strings about problematic damage.


Only script:
Spoiler

Code: Select all

{
Author ZoDDel
Mod by Anton
}

{$c}
float ext_damage_mult = 1.0f;
typedef struct {
  int id; // 1
  int d1; // 2 normal_value;
  int d2; // 3 armor_value;
  int p1; // 4 p1;
  int p2; // 5 p2;
  int p3; // 6 p3;
  int p4; // 7 p4;
  int demolition; // 8
  int knockback1; // 9
  int knockback2; // 10
  int decal_type; // 11
  int decal_size; // 12
  float decal_duration; // 13
  int u7; // 14
  int u8; // 15
} GameDamageInfo;
enum DamageDirection {
     INPUT_DIRECTION = 2542,
     OUTPUT_DIRECTION = 2543
};
typedef struct {
   int id; // 1
   int d1; // -2
   int d2; // -3
   int p1; // -4
   int p2; // -5
   int p3; // -6
   int p4; // -7
   int demolition; // -8
   int knockback1; // -9
   int knockback2; // -10
   float damage_mult; // -1 is default
   char *p_weapon_type;
   char *p_damage_name;
   char *p_base_stats_string;
   char hide_output;
   char is_unknown;
   enum DamageDirection damage_direction;
   GameDamageInfo game_damage_backup;
} CheatDamageInfo;
/*
enum CheatMode_enum {
  NO_CHEAT,
  LITTLE_BOOST,
  MIDDLE_BOOST,
  MAX_BOOST,

};
typedef struct {
  enum CheatMode_enum cheat_mode;
  float d1; // 2 normal_value;
  float d2; // 3 armor_value;
  float p1; // 4 p1;
  float p2; // 5 p2;
  float p3; // 6 p3;
  float p4; // 7 p4;
  float demolition; // 8
  float knockback1; // 9
  float knockback2; // 10
} CheatMode;

CheatMode cheat_modes[10] = {
  {NO_CHEAT, 1, 1,       1, 1, 1, 1,   1,     1,1},
  {LITTLE_BOOST, -1, -1,       -1, -1, -1, -1,   -1,     -1,-1},
}
*/

// YOU CAN CHANGE SECTION START
// TIP. INPUT is damage we assume is applying to US.  OUTPUT damage we apply to enemy (Script detect it if damage is in table and contains Enemy or Environment in type name. Or if damage is not in table, then it is unknown damage and we assume it is INPUT damage to us.

// HOTKEYS to include or exclude damage messages you see in DebugViewPP tool.
#define HOTKEY_EXCLUDE_DAMAGE 'U'
#define HOTKEY_INCLUDE_DAMAGE 'I'

// GOD SHOT hotkey just oneshot kill everything from any weapon while holding key (ex. pistol against buildings or titans). No table or multiplier values used for this. Just direct extreme values. Only for known output damages.
#define HOTKEY_GOD_SHOT VK_CONTROL

// set multiplier 0 to set damage to 0. For example damage 4000 * 0 = 0. Set 0.5f to get only half of damage 4000*0.5 = 2000.  Set 2.0f to multiply input damage by 2   4000*2=8000.
// the same for DEMOLITION and KNOCKBACK
#define INPUT_DAMAGE_MULTIPLIER 0.4f
#define INPUT_PENETRATION_MULTIPLIER 0.5f
#define INPUT_DEMOLITION_MULTIPLIER 0.0f
#define INPUT_KNOCKBACK_MULTIPLIER 0.0f

#define OUTPUT_DAMAGE_MULTIPLIER 3.0f
#define OUTPUT_PENETRATION_MULTIPLIER 1.0f
#define OUTPUT_DEMOLITION_MULTIPLIER 1.0f
// explosion guns will not ragdoll you if shoot nearly
#define OUTPUT_KNOCKBACK_MULTIPLIER 0.0f

// ADD is absolute value to add before multiplying. for example you want to set output knockback multiplier to 2.0f. But pistol have knockback value 0 by default. So the formula will be 0 * 2 = 0 - no knockback
// Here you can set add value. So if set OUTPUT_KNOCKBACK_ADD to 20, pistol will get knockback with this formula  (0 (game default) + 20 (OUTPUT_KNOCKBACK_ADD)) * 2 (OUTPUT_KNOCKBACK_MULTIPLIER) = 20 * 2 = 40 knockback
// negative values acceptable too. But result value will be clamped to not go below 0.
#define INPUT_DAMAGE_ADD 0
#define INPUT_PENETRATION_ADD 0
#define INPUT_DEMOLITION_ADD 0
#define INPUT_KNOCKBACK_ADD 0

#define OUTPUT_DAMAGE_ADD 0
#define OUTPUT_PENETRATION_ADD 0
#define OUTPUT_DEMOLITION_ADD 0
#define OUTPUT_KNOCKBACK_ADD 0

// INPUT_DAMAGE_LIMIT if titan attack you it have 4000 damage, instant kill. You can set maximum damage for any unknown/enemy/environment
// Set any negative value to switch off this function
#define INPUT_DAMAGE_LIMIT 80

/* Damage individual settings.
-2 -3 -4 -5 -6 -7 -8 -9 -10 are numbered placeholders where you can specify individual absolute (not multiplier) values for:
-2 damage1
-3 damage2
-4 -5 -6 -7 penetration1-2
-8 = demolition
-9 -10 = knockback values
If specify value below zero parameter will not change for individual weapon. But still may change it it is Enemy or Environmental or Unknown (not in table) damage.
For example this:
{326,	-2,	-3, -4, -5,	-6,	-7,	-8,	5000,	5000,	1.0f, "00 Melee", "Helldiver melee", "050 005 | 01 00 00 00 | 10 | 25 30 | 0 0 0 | 0 0"},
will set -9 and -10 (both knockback values to 5000. Other fields will not thange in section where individual parameters are applied

The next value after -10 is multiplier for damage1-2. Value 1.0f is game default
After that there is weapon class (if contains Enemy or Enrironment, damage will get
*/
CheatDamageInfo g_damage_table[500] = {
{326,	-2,	-3, -4, -5,	-6,	-7,	-8,	-9,	-10,	1.0f, "00 Melee", "Helldiver melee", "050 005 | 01 00 00 00 | 10 | 25 30 | 0 0 0 | 0 0"},
{ 51,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "01 Assault rifle", "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / AR-61 Tenderizer / Stalwart / AX/AR-23 Guard Dog (w Liberator AR)", "060 006 | 02 02 02 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{ 50,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "01 Assault rifle", "AR-23C Liberator Concussive", "065 015 | 02 02 02 02 | 10 | 35 100 | 0 0 0 | 0 0"},
{ 48,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "01 Assault rifle", "AR-23P Liberator Penetrator", "045 015 | 03 03 03 00 | 10 | 10 10 | 0 0 0 | 0 0"},
// love
{ 65,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	50,  40, 	1.0f, "02 Marksman rifle", "AR-20L Justice / BR-14 Adjudicator / Machine Gun / Gatling Sentry / Machine Gun Sentry", "080 008 | 03 03 03 01 | 10 | 15 12 | 0 0 0 | 0 0"},
{ 73,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "02 Marksman rifle", "R-63 Diligence", "125 013 | 02 02 02 00 | 10 | 15 14 | 0 0 0 | 0 0"},
{ 74,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "02 Marksman rifle", "R-63CS Diligence Counter Sniper", "140 014 | 03 03 03 00 | 10 | 15 14 | 0 0 0 | 0 0"},
{ 26,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "03 Submachine gun", "MP-98 Knight", "050 005 | 02 02 02 00 | 10 | 10 4 | 0 0 0 | 0 0"},
{ 34,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "03 Submachine gun", "SG-8S / SMG-37 Defender", "070 007 | 02 02 02 00 | 10 | 10 5 | 0 0 0 | 0 0"},
{ 41,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "03 Submachine gun", "SMG-72 Pummeler", "065 007 | 02 02 02 00 | 10 | 15 5 | 0 34 2 | 0 0"},
{102,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-225 Breaker", "030 006 | 02 02 02 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{103,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-225BB Breaker Bugbiter", "045 009 | 02 02 02 00 | 10 | 15 15 | 0 0 0 | 0 0"},
{104,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-225NS Breaker Nailspitter", "020 004 | 03 03 03 00 | 10 | 10 10 | 0 0 0 | 0 0"},
// love
{101,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9, -10,	1.0f, "04 Shotgun", "SG-225SP Breaker Spray&Pray", "012 004 | 02 02 02 00 | 10 | 3 1 | 0 0 0 | 0 0"},
{105,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-255IE Breaker Incendiary", "020 010 | 02 02 02 00 | 10 | 10 10 | 1 6 100 | 0 0"},
{ 88,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-8 Punisher", "045 012 | 02 02 02 00 | 10 | 35 30 | 0 0 0 | 0 0"},
{ 99,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-8S Slugger", "250 075 | 03 03 03 00 | 10 | 20 35 | 0 0 0 | 0 0"},
{117,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SMG-37 Defender", "050 035 | 03 03 03 00 | 10 | 30 25 | 2 0 0 | 0 0"},
{124,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "CB-9 Exploding Crossbow part 1 (impact)", "270 050 | 03 03 03 00 | 0 | 30 10 | 0 0 0 | 0 0"},
{125,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "CB-9 Exploding Crossbow part 2 (explosion)", "150 150 | 02 02 02 00 | 15 | 25 10 | 0 0 0 | 0 0"},
{ 84,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "JAR-5 Dominator", "275 090 | 03 03 03 00 | 10 | 35 15 | 0 0 0 | 0 0"},
{ 80,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "R-36 Eruptor p1 (direct shell impact)", "230 115 | 03 03 03 00 | 30 | 35 20 | 0 0 0 | 0 0"},
{205,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "R-36 Eruptor p2 (sub-shell enemy hits)", "150 150 | 03 00 00 00 | 20 | 25 40 | 0 0 0 | 0 0"},
{ 19,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "LAS-16 Sickle", "055 005 | 02 02 02 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{297,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "LAS-5 Scythe", "350 070 | 02 02 02 00 | 10 | 0 0 | 0 6 0 | 0 0"},
{ 20,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-1 Scorcher p1 / PLAS-101 Purifier (Part 1) / SG-8P Punisher Plasma part 1 impact of projectile", "100 050 | 02 02 02 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{184,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-1 Scorcher p2 (Plasma Damage)", "100 100 | 03 00 00 00 | 10 | 10 7 | 0 0 0 | 0 0"},
{ 21,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-101 Purifier", "250 100 | 03 03 03 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{186,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-101 Purifier (Part 2) / SG-8P Punisher Plasma part 2 explosion", "150 150 | 03 03 03 00 | 10 | 35 30 | 0 0 0 | 0 0"},
{134,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "GP-31 Grenade Pistol part1 shell", "250 250 | 03 03 03 00 | 30 | 40 10 | 0 0 0 | 0 0"},
{220,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "GP-31 Grenade Pistol part2 explosion / GL-21 Grenade launcher part 2 explosion", "350 350 | 03 00 00 00 | 30 | 25 40 | 0 0 0 | 0 0"},
{296,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "LAS-7 Dagger (continuous laser pistol)", "200 020 | 02 02 02 00 | 10 | 0 0 | 0 6 0 | 0 0"},
{ 42,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-113 Verdict", "125 012 | 02 02 02 00 | 10 | 12 10 | 0 0 0 | 0 0"},
{ 25,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-19 Redeemer", "060 005 | 02 02 02 00 | 10 | 10 4 | 0 0 0 | 0 0"},
{ 27,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-2 Peacemaker", "075 015 | 02 02 02 00 | 10 | 10 4 | 0 0 0 | 0 0"},
{ 44,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-4 Senator", "175 035 | 03 03 03 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{203,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-10 Incendiary / G-13 Incendiary impact / Incendary Impact / Incendary Impact", "150 150 | 03 00 00 00 | 30 | 20 15 | 1 6 100 | 0 0"},
{213,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-12 High Explosive / G-16 Impact", "400 400 | 04 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{201,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-6 Frag part 1", "250 250 | 03 00 00 00 | 20 | 25 40 | 0 0 0 | 0 0"},
{111,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-6 Frag part 2", "080 008 | 02 02 02 00 | 10 | 10 20 | 0 0 0 | 0 0"},
{204,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "09 Grenade Special", "G-123 Thermite", "100 100 | 07 00 00 00 | 30 | 20 40 | 0 0 0 | 0 0"},
{169,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "09 Grenade Special", "G-23 Stun", "000 000 | 06 00 00 00 | 0 | 0 0 | 0 35 25 | 0 0"},
{122,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Antimaterial Rifle", "450 135 | 04 04 04 00 | 20 | 20 25 | 0 0 0 | 0 0"},
{115,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "ARC3 Thrower", "250 050 | 07 07 07 00 | 20 | 35 10 | 2 0 0 | 0 0"},
{127,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Autocannon (part 1/2)", "260 260 | 04 04 04 00 | 30 | 30 20 | 0 0 0 | 0 0"},
{216,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Autocannon (part 2/2)", "150 150 | 03 00 00 00 | 30 | 40 40 | 0 0 0 | 0 0"},
{ 93,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Break action shotgun", "065 013 | 02 02 02 00 | 10 | 20 20 | 0 0 0 | 0 0"},
{145,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Commando", "500 500 | 06 05 03 00 | 40 | 50 25 | 0 0 0 | 0 0"},
{135,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EAT-17 Expendable Anti-Tank part 1", "650 650 | 06 06 06 03 | 30 | 50 25 | 0 0 0 | 0 0"},
{189,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EAT-17 Expendable Anti-Tank part 2", "015 015 | 03 00 00 00 | 10 | 30 15 | 0 0 0 | 0 0"},
{226,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EAT-17 Expendable Anti-Tank part 3", "150 150 | 03 00 00 00 | 30 | 60 40 | 0 0 0 | 0 0"},
{129,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator gun part 1", "300 060 | 05 05 05 00 | 30 | 30 10 | 0 0 0 | 0 0"},
{217,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator gun part 2", "150 150 | 03 00 00 00 | 30 | 40 40 | 0 0 0 | 0 0"},
{147,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator rocket part 1", "400 400 | 06 06 04 00 | 30 | 40 25 | 0 0 0 | 0 0"},
{234,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator rocket part 2", "400 400 | 03 00 00 00 | 30 | 60 70 | 0 0 0 | 0 0"},
{  9,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "FLAM-40 Flamethrower part 1", "003 003 | 03 03 03 00 | 10 | 5 5 | 1 6 10 | 0 0"},
{ 10,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "GL-21 Grenade launcher part 1 / Mortar Sentry shoot (not shell)", "020 002 | 00 00 00 00 | 10 | 40 10 | 0 0 0 | 0 0"},
{ 11,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Grenade Launcher", "005 000 | 02 01 00 00 | 10 | 40 10 | 0 0 0 | 0 0"},
{121,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Heavy Machinegun", "100 035 | 04 04 04 00 | 15 | 15 20 | 0 0 0 | 0 0"},
{149,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Javelin rocket part 1", "1000 1000 | 08 07 06 00 | 40 | 50 25 | 0 0 0 | 0 0"},
{236,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Javelin rocket part 2", "200 200 | 05 00 00 00 | 30 | 60 70 | 0 0 0 | 0 0"},
{302,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "LAS-98 Laser Cannon", "350 200 | 04 04 04 04 | 20 | 0 0 | 0 6 0 | 0 0"},
{227,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Quasar Cannon part 1", "650 650 | 06 06 06 03 | 30 | 50 40 | 0 0 0 | 0 0"},
{228,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Quasar Cannon part 2", "150 150 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
{136,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Recoiless Rifle part 1 shell", "650 650 | 06 06 06 03 | 30 | 50 25 | 0 0 0 | 0 0"},
{225,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Recoiless Rifle part 2 explosion", "150 150 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
// Love
{ 22,	-2,	240	-4,	-5,	-6,	-7,	30,	50,	 30,	1.0f, "10 Stratagem weapon", "RS-422 Railgun", "600 060 | 05 05 05 05 | 10 | 35 15 | 0 0 0 | 0 0"},
{130,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "Autocannon Sentry / Pelican evacuation ship part 1", "300 300 | 05 05 05 00 | 30 | 40 10 | 0 0 0 | 0 0"},
{298,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "AX/LAS-5 Guard Dog Rover (w Laser Rifle)", "200 040 | 02 02 02 00 | 10 | 0 0 | 0 6 0 | 0 0"},
{271,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "EMS Mortar Sentry - shell impact", "000 000 | 04 00 00 00 | 30 | 10 40 | 0 0 0 | 0 0"},
{243,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "MD-6 Anti-Personnel Minefield", "200 200 | 03 00 00 00 | 30 | 30 30 | 0 0 0 | 0 0"},
{223,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "Mortar Sentry shell", "400 400 | 03 00 00 00 | 30 | 35 40 | 0 0 0 | 0 0"},
{126,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "Tesla Tower", "600 600 | 04 04 04 00 | 20 | 20 10 | 2 0 0 | 0 0"},
{245,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Defensive", "AntiTank mine", "1000 1000 | 05 05 05 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{113,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Defensive", "MD-I4 Incendiary mines", ""},
{154,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "500kg bomb1 shell", "1400 1400 | 07 07 07 00 | 50 | 20 15 | 0 0 0 | 0 0"},
{273,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "500kg bomb2 explosion", "1200 1200 | 06 00 00 00 | 50 | 100 40 | 0 0 0 | 0 0"},
{152,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle 110mm rocket pods part 1", "600 600 | 05 05 05 00 | 40 | 20 15 | 0 0 0 | 0 0"},
{241,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle 110mm rocket pods part 2", "200 200 | 05 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{254,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle Airstrike part 2", "800 800 | 05 00 00 00 | 40 | 50 40 | 0 0 0 | 0 0"},
{142,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle Aistrike shell / Eagle Napalm Strike shell", "500 500 | 05 05 05 00 | 40 | 20 15 | 0 0 0 | 0 0"},
{229,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle cluster bomb / Orbital airburst strike p2", "350 350 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
{159,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital 120MM HE barrage p1", "300 300 | 07 07 06 00 | 50 | 20 20 | 0 0 0 | 0 0"},
{268,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital 120MM HE barrage p2", "750 750 | 05 00 00 00 | 50 | 70 40 | 0 0 0 | 0 0"},
{112,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital airburst strike p1", "300 150 | 03 03 03 00 | 10 | 10 20 | 0 0 0 | 0 0"},
{158,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital gas strike", "300 300 | 07 07 06 00 | 50 | 60 15 | 0 0 0 | 0 0"},
{305,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital laser", "030 015 | 06 06 06 00 | 50 | 30 30 | 0 6 1 | 0 0"},
{160,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital precision strike1 / Traitor player orbital atata 1", "450 450 | 08 07 06 00 | 50 | 20 20 | 0 0 0 | 0 0"},
{267,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital precision strike2 / Traitor player orbital atata 2", "1000 1000 | 06 00 00 00 | 50 | 70 60 | 0 0 0 | 0 0"},
{161,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital railcannon strike1", "2000 2000 | 10 09 08 00 | 50 | 60 35 | 0 0 0 | 0 0"},
{266,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital railcannon strike2", "500 500 | 06 00 00 00 | 50 | 30 50 | 0 0 0 | 0 0"},
{196,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Barrel explosion", "300 300 | 03 00 00 00 | 30 | 20 40 | 1 6 10 | 0 0"},
{337,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Big smoke? On automaton map", "001 001 | 07 00 00 00 | 41 | 40 35 | 0 0 0 | 0 0"},
{309,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Burning", "050 025 | 04 04 04 00 | 0 | 0 0 | 1 0 0 | 0 0"},
{280,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Explosion", "200 200 | 03 00 00 00 | 50 | 50 40 | 0 0 0 | 0 0"},
{287,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Fall damage", "4000 4000 | 10 00 00 00 | 60 | 50 100 | 0 0 0 | 0 0"},
{294,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Green flower exploded slow effect", "015 015 | 03 00 00 00 | 0 | 15 15 | 0 46 75 | 35 50"},
{258,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Orbital capsula impact damage", "150 150 | 10 00 00 00 | 40 | 80 40 | 0 0 0 | 0 0"},
{219,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Pelican evacuation ship part 2", "150 150 | 03 00 00 00 | 30 | 40 40 | 0 0 0 | 0 0"},
{192,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Terminid yellow ground spore 1", "000 000 | 06 00 00 00 | 10 | 20 40 | 3 10 100 | 0 0"},
{311,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Terminid yellow ground spore 2 / Terminid Bug melee damage / Terminid Hunter attack 1", "003 000 | 01 01 01 00 | 0 | 0 0 | 3 0 0 | 0 0"},
{360,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Berserker melee", "050 050 | 03 00 00 00 | 20 | 20 15 | 0 0 0 | 0 0"},
{354,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Commissar (red shoulders) melee", "030 015 | 03 00 00 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{  5,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton damage", "040 020 | 02 02 02 00 | 10 | 5 5 | 1 6 50 | 0 0"},
{324,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton distance damage (some1) / Automaton Hulk Scorcher (Gromila) Self flame?", "001 001 | 09 09 09 09 | 0 | 0 0 | 4 0 0 | 0 0"},
{  6,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton distance damage (some2) / Automaton Gunship rocket blast", "075 050 | 06 05 04 00 | 20 | 50 25 | 0 0 0 | 0 0"},
{261,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Drop/Gun-ship fall on somethink", "100 100 | 03 00 00 00 | 40 | 50 40 | 0 0 0 | 0 0"},
{265,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton grenade", "200 200 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
{119,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Gunship blaster / Automaton Hulk Scorcher right hand blaster / Automatons SHREDDER TANK 1 blaster shells", "055 005 | 03 03 03 00 | 20 | 20 15 | 0 0 0 | 0 0"},
{257,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Gunship rocket / Automaton rocket / Automaton Rocket devastator (rocket launchers on shoulders)", "060 060 | 03 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{  7,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton hand blaster", "030 003 | 02 02 01 00 | 10 | 10 15 | 0 0 0 | 0 0"},
{356,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Hulk Scorcher melee", "150 150 | 05 00 00 00 | 30 | 40 35 | 0 0 0 | 0 0"},
{353,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Maradeur melee / Automaton Rocket rider melee", "010 005 | 01 00 00 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{206,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton unknown", "100 100 | 03 00 00 00 | 20 | 50 40 | 0 0 0 | 0 0"},
{239,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton unknown", "150 150 | 05 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{281,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton unknown", "300 300 | 03 00 00 00 | 50 | 50 40 | 0 0 0 | 0 0"},
{246,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automatons ground red mine", "300 300 | 03 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{322,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automatons SHREDDER TANK 2 continuous scan", "075 075 | 06 06 06 00 | 0 | 0 0 | 5 0 0 | 0 0"},
{358,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automatons SHREDDER TANK 3 rare", "200 200 | 04 00 00 00 | 40 | 40 40 | 0 0 0 | 0 0"},
{176,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bile Titan bile1", "050 050 | 06 00 00 00 | 0 | 0 0 | 3 10 100 | 0 0"},
{  2,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bile Titan bile2", "050 050 | 05 05 05 00 | 0 | 20 10 | 0 0 0 | 0 0"},
{351,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bile Titan Stomp (impact)", "3000 3000 | 10 00 00 00 | 40 | 60 10 | 0 0 0 | 0 0"},
{342,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Brood commander melee attack / Terminid Hive Guard melee attack / Terminid Hunter swipes / Terminid Warrior melee attack", "040 040 | 02 00 00 00 | 20 | 20 10 | 0 0 0 | 0 0"},
{  1,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bug Bile spew", "032 032 | 04 04 04 00 | 0 | 20 10 | 0 0 0 | 0 0"},
{335,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Charger Rush", "350 350 | 07 00 00 00 | 40 | 50 50 | 0 0 0 | 0 0"},
{292,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Ground spores if shoot then blow&throw away", "005 005 | 03 00 00 00 | 20 | 55 55 | 0 35 25 | 0 0"},
{338,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Hunter attack 2", "030 015 | 02 00 00 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{  3,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Nursing spewer bile", "032 032 | 04 04 04 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{345,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Scavenger melee attack", "030 015 | 02 00 00 00 | 10 | 10 5 | 0 0 0 | 0 0"},
{332,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid some bug melee 1", "000 000 | 07 00 00 00 | 40 | 0 0 | 0 0 0 | 0 0"},
{336,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid some bug melee 2", "030 030 | 07 00 00 00 | 41 | 40 35 | 0 0 0 | 0 0"},
{348,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Stalker attack", "040 040 | 03 00 00 00 | 20 | 20 15 | 0 0 0 | 0 0"},
{349,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Stalker throw away attack", "035 035 | 02 00 00 00 | 0 | 35 45 | 0 0 0 | 0 0"},
{340,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminod Stalker melee", "035 003 | 01 00 00 00 | 15 | 20 10 | 0 0 0 | 0 0"}
};
// YOU CAN CHANGE SECTION END

#define NO_OLDNAMES
#include <stddef.h>
#include <windows.h>
#include <string.h>

extern __cdecl int sprintf(char *, char *, ...);
extern __cdecl void OutputDebugStringA(const char* lpOutputString);
char g_debug_string[400];
char included_excluded_str[15];
short GetAsyncKeyState(int);


// how much records in table.  unknown damages, detected in game will be recorded above
int g_damage_table_records = 150;
// Include / Exclude global flags
char g_exclude_flag = 1;
char g_include_flag = 0;
//char damage_debug_global = 1;
int knock_value = 10;


// function to calculate final value
float calculate(int original_value,
                int user_table_value,
                float user_table_multiplier,
                int damage_direction_add_value,
                float damage_direction_multiplier) {
  float output_value = (user_table_value >= 0) ? user_table_value : original_value;

  if ((user_table_multiplier >= 0) && (user_table_multiplier != 1.0f)) {
    output_value *= user_table_multiplier;
  }

  output_value += damage_direction_add_value;
  if (output_value < 0) {
    output_value = 0;
  }

  if ((damage_direction_multiplier >= 0) && (damage_direction_multiplier != 1.0f)) {
    output_value *= damage_direction_multiplier;
  }
  return output_value;
}

{$asm}

[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,$20000)
label(damage_return)
// define global variable
alloc(damage_ratio,4)
registersymbol(damage_ratio)


damage_newmem:
{$ccode base_address=rcx}
//extern float damage_ratio = 1.0f;
//                           damage_ratio = UNKNOWN_DAMAGE_MULTIPLIER; // Default damage multiplier for damages (unknown) that are not found in g_damage_table. Assuming they are some enemy attacks.

GameDamageInfo *game_damage = (GameDamageInfo*)(base_address);
if (game_damage->id == 0) { goto end_section; }

CheatDamageInfo *user_table_entry = NULL; // current_damage is place where to put address of g_damage_table entry with id equals damage_id

// search in-game damage in user's damage_table
for (int i = 0; i < sizeof(g_damage_table) / sizeof(g_damage_table[0]); ++i) {
  if (g_damage_table[i].id == 0) {
    continue;
  }
  if (game_damage->id == g_damage_table[i].id) {
    // entry found
    user_table_entry = &g_damage_table[i];
    break;
  }
}

if (!user_table_entry) {
  // if in-game damage was not found in user's damage_table, then add it to user's damage table, so we can work with it usual way
  user_table_entry = &g_damage_table[g_damage_table_records++];
  user_table_entry->id = game_damage->id;
  user_table_entry->d1 = -1;
  user_table_entry->d2 = -1;
  user_table_entry->p1 = -1;
  user_table_entry->p2 = -1;
  user_table_entry->p3 = -1;
  user_table_entry->p4 = -1;
  user_table_entry->demolition = -1;
  user_table_entry->knockback1 = -1;
  user_table_entry->knockback2 = -1;
  user_table_entry->damage_mult = 1.0f;
  user_table_entry->p_weapon_type = "Enemy, Environmental or Unknown. Added from game, not from user table. Assuming it is input_damage to player";
  user_table_entry->p_damage_name = "Enemy, Environmental or Unknown. Added from game, not from user table. Assuming it is input_damage to player";
  user_table_entry->p_base_stats_string = "";
  user_table_entry->hide_output = 0;
  user_table_entry->game_damage_backup = *game_damage;
  user_table_entry->damage_direction = INPUT_DIRECTION; // Any unknown damage (not in table) interpreted as INPUT_DIRECTION (damage to our player)

  sprintf(g_debug_string, "Damage: New damage class added to table: id %3d", game_damage->id);
  OutputDebugStringA(g_debug_string);
}

// Error situation. Usually could not happen.
if (!user_table_entry) {
  sprintf(g_debug_string, "Damage: user_table_entry is null. return");
  OutputDebugStringA(g_debug_string);
  goto end_section;
}

// backup untouched game_damage values for later use
if (user_table_entry->game_damage_backup.id != game_damage->id) {
  sprintf(g_debug_string, "Damage: id %d saved game_damage_backup", game_damage->id);
  OutputDebugStringA(g_debug_string);
  user_table_entry->game_damage_backup = *game_damage;
}

// Detect damage direction if not detected earlier
if ((user_table_entry->damage_direction != INPUT_DIRECTION) && (user_table_entry->damage_direction != OUTPUT_DIRECTION)) {
   if (strstr(user_table_entry->p_weapon_type, "Enemy") || strstr(user_table_entry->p_weapon_type, "Environment")) {
     user_table_entry->damage_direction = INPUT_DIRECTION;
   } else {
     user_table_entry->damage_direction = OUTPUT_DIRECTION;
   }
}


if ((GetAsyncKeyState(HOTKEY_GOD_SHOT) & 0x8000) && (user_table_entry->damage_direction == OUTPUT_DIRECTION)) {
  // GOD SHOT hotkey just oneshot kill everything from any weapon (ex. pistol against buildings or titans)
  game_damage->d1 = 9999;
  game_damage->d2 = 9999;
  game_damage->p1 = 10;
  game_damage->p2 = 10;
  game_damage->p3 = 10;
  game_damage->p4 = 10;
  game_damage->p4 = 10;
  game_damage->demolition = 1000;
  game_damage->knockback1 = 0;
  game_damage->knockback2 = 0;
} else {
  game_damage->d1 = calculate(user_table_entry->game_damage_backup.d1,
                             user_table_entry->d1,
                             user_table_entry->damage_mult,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_ADD : OUTPUT_DAMAGE_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_MULTIPLIER : OUTPUT_DAMAGE_MULTIPLIER);
  game_damage->d2 = calculate(user_table_entry->game_damage_backup.d2,
                             user_table_entry->d2,
                             user_table_entry->damage_mult,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_ADD : OUTPUT_DAMAGE_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_MULTIPLIER : OUTPUT_DAMAGE_MULTIPLIER);
  game_damage->p1 = calculate(user_table_entry->game_damage_backup.p1,
                             user_table_entry->p1,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->p2 = calculate(user_table_entry->game_damage_backup.p2,
                             user_table_entry->p2,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->p3 = calculate(user_table_entry->game_damage_backup.p3,
                             user_table_entry->p3,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->p4 = calculate(user_table_entry->game_damage_backup.p4,
                             user_table_entry->p4,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->demolition = calculate(user_table_entry->game_damage_backup.demolition,
                             user_table_entry->demolition,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DEMOLITION_ADD : OUTPUT_DEMOLITION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DEMOLITION_MULTIPLIER : OUTPUT_DEMOLITION_MULTIPLIER);
  game_damage->knockback1 = calculate(user_table_entry->game_damage_backup.knockback1,
                             user_table_entry->knockback1,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_ADD : OUTPUT_KNOCKBACK_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_MULTIPLIER : OUTPUT_KNOCKBACK_MULTIPLIER);
  game_damage->knockback2 = calculate(user_table_entry->game_damage_backup.knockback2,
                             user_table_entry->knockback2,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_ADD : OUTPUT_KNOCKBACK_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_MULTIPLIER : OUTPUT_KNOCKBACK_MULTIPLIER);
}

// INPUT DAMAGE LIMIT
if (INPUT_DAMAGE_LIMIT >= 0) {
  if (user_table_entry->damage_direction == INPUT_DIRECTION) {
    if (game_damage->d1 > INPUT_DAMAGE_LIMIT) {
      game_damage->d1 = INPUT_DAMAGE_LIMIT;
    }
    if (game_damage->d2 > INPUT_DAMAGE_LIMIT) {
      game_damage->d2 = INPUT_DAMAGE_LIMIT;
    }
  }
}


// Include / Exclude damage_id printing routines
if (GetAsyncKeyState(HOTKEY_EXCLUDE_DAMAGE) & 0x8000) {
   // Exclude mode. While key pressed, all damages that are happening will mark as excluded and will not be printed in OutputDebug section
   g_exclude_flag = 1;
   g_include_flag = 0;
} else {
   g_exclude_flag = 0;
   // Include mode. While key pressed, all damages that happening and was excluded before, including back and will print in OutputDebug section
  if (GetAsyncKeyState(HOTKEY_INCLUDE_DAMAGE) & 0x8000) {
     // include mode
     g_exclude_flag = 0;
     g_include_flag = 1;
  } else {
    g_include_flag = 0;
  }
}

strcpy(included_excluded_str, "");
if (g_exclude_flag) {
  if (!user_table_entry->hide_output) {
    strcpy(included_excluded_str, " excluded ");
  }
  user_table_entry->hide_output = 1;
}
if (g_include_flag) {
  if (user_table_entry->hide_output) {
    strcpy(included_excluded_str, " included ");
  }
  user_table_entry->hide_output = 0;
}
// Output debug information
if (!user_table_entry->hide_output) {
   sprintf(g_debug_string, "Damage: %s id %3d | %d->%d %d->%d | pen: %d->%d %d->%d %d->%d %d->%d | demolition: %d->%d | knock %d->%d %d->%d | decal size: %d duration x100: %d type: %d | mult %d%% mult ext %d%% | damage_to_us: %d | %s",
                      included_excluded_str,

                      game_damage->id,

                      user_table_entry->game_damage_backup.d1,
                      game_damage->d1,

                      user_table_entry->game_damage_backup.d2,
                      game_damage->d2,

                      user_table_entry->game_damage_backup.p1,
                      game_damage->p1,

                      user_table_entry->game_damage_backup.p2,
                      game_damage->p2,

                      user_table_entry->game_damage_backup.p3,
                      game_damage->p3,

                      user_table_entry->game_damage_backup.p4,
                      game_damage->p4,

                      user_table_entry->game_damage_backup.demolition,
                      game_damage->demolition,

                      user_table_entry->game_damage_backup.knockback1,
                      game_damage->knockback1,

                      user_table_entry->game_damage_backup.knockback2,
                      game_damage->knockback2,

                      game_damage->decal_size,
                      (int)(game_damage->decal_duration * 100),
                      game_damage->decal_type,

                      (int)(user_table_entry->damage_mult*100.0f),
                      (int)(ext_damage_mult),
                      (user_table_entry->damage_direction == INPUT_DIRECTION),
                      user_table_entry->p_damage_name
                      );
  OutputDebugStringA(g_debug_string);
}
end_section:
{$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]
Attachments
_MyHD2.CT
(691.1 KiB) Downloaded 80 times

nos4r2
Expert Cheater
Expert Cheater
Posts: 241
Joined: Sun Oct 29, 2017 3:58 am
Reputation: 46

Re: HELLDIVERS 2

Post by nos4r2 »

Exemplify1524 wrote:
Sun May 19, 2024 2:08 am
nos4r2 wrote:
Sat May 18, 2024 1:55 am
Hi can you fix the lastest dmg script you did? it have some weird bug that every weapon or stuff will ragdoll myself to dead if i happen to hit myself with it ( with aoe ) i even test your default value but it still happen, you can try use scorcher to shoot near the ground at front of you or stun grenade which shouldn't ragdoll you but it did, same thing with another explosive weapon ( autocannon, nade pistol etc )
Hi. Yes, I played too much with the "knockback" parameter. I found this option to be very fun (enemies flying out far), but it leads that you flying out far if your own damage hits you too. It can be fixed by blacklisting from HIGH Knockback values weapons that have explosion effect. But more simple is just set 0 to all knockback parameters (enemy and your own).

I attached .ct where this is fixed.
Also added to weapon damage script GOD hotkey (ctrl by default) while you pressing it all OUTPUT damage (not unknown or enemy or environment) are set to extremely high values. So you playing like normal person, but if situation is bad, you press ctrl and can destroy enemy buildings or titans with one shot from pistol. Then release Ctrl key and play as normal (with multipliers and values you set in table) again.
This works for sentries, stratagems, rover dog. So it can help a lot in bad scenarios.

Also added more parameters in weapons damage script:

Now additionally to individual damage settings you can set more general values (all script code is commented, you can read):

// set multiplier 0 to set damage to 0. For example damage 4000 * 0 = 0. Set 0.5f to get only half of damage 4000*0.5 = 2000. Set 2.0f to multiply input damage by 2 4000*2=8000.
// the same for DEMOLITION and KNOCKBACK
#define INPUT_DAMAGE_MULTIPLIER 0.4f
#define INPUT_PENETRATION_MULTIPLIER 0.5f
#define INPUT_DEMOLITION_MULTIPLIER 0.0f
#define INPUT_KNOCKBACK_MULTIPLIER 0.0f

#define OUTPUT_DAMAGE_MULTIPLIER 3.0f
#define OUTPUT_PENETRATION_MULTIPLIER 1.0f
#define OUTPUT_DEMOLITION_MULTIPLIER 1.0f
// explosion guns will not ragdoll you if shoot nearly
#define OUTPUT_KNOCKBACK_MULTIPLIER 0.0f

// ADD is absolute value to add before multiplying. for example you want to set output knockback multiplier to 2.0f. But pistol have knockback value 0 by default. So the formula will be 0 * 2 = 0 - no knockback
// Here you can set add value. So if set OUTPUT_KNOCKBACK_ADD to 20, pistol will get knockback with this formula (0 (game default) + 20 (OUTPUT_KNOCKBACK_ADD)) * 2 (OUTPUT_KNOCKBACK_MULTIPLIER) = 20 * 2 = 40 knockback
// negative values acceptable too. But result value will be clamped to not go below 0.
#define INPUT_DAMAGE_ADD 0
#define INPUT_PENETRATION_ADD 0
#define INPUT_DEMOLITION_ADD 0
#define INPUT_KNOCKBACK_ADD 0

#define OUTPUT_DAMAGE_ADD 0
#define OUTPUT_PENETRATION_ADD 0
#define OUTPUT_DEMOLITION_ADD 0
#define OUTPUT_KNOCKBACK_ADD 0




Also added Input damage limit parameter:

// INPUT_DAMAGE_LIMIT if titan attack you it have 4000 damage, instant kill. You can set maximum damage for any unknown/enemy/environment
// Set any negative value to switch off this function
#define INPUT_DAMAGE_LIMIT 80


If somethink dont work as it should, for debugging purposes, I recommend to get opensourse DebugViewPP tool, run it while you playing, there will appear debug messages from weapon damage script. You can put here debug strings about problematic damage.


Only script:
Spoiler

Code: Select all

{
Author ZoDDel
Mod by Anton
}

{$c}
float ext_damage_mult = 1.0f;
typedef struct {
  int id; // 1
  int d1; // 2 normal_value;
  int d2; // 3 armor_value;
  int p1; // 4 p1;
  int p2; // 5 p2;
  int p3; // 6 p3;
  int p4; // 7 p4;
  int demolition; // 8
  int knockback1; // 9
  int knockback2; // 10
  int decal_type; // 11
  int decal_size; // 12
  float decal_duration; // 13
  int u7; // 14
  int u8; // 15
} GameDamageInfo;
enum DamageDirection {
     INPUT_DIRECTION = 2542,
     OUTPUT_DIRECTION = 2543
};
typedef struct {
   int id; // 1
   int d1; // -2
   int d2; // -3
   int p1; // -4
   int p2; // -5
   int p3; // -6
   int p4; // -7
   int demolition; // -8
   int knockback1; // -9
   int knockback2; // -10
   float damage_mult; // -1 is default
   char *p_weapon_type;
   char *p_damage_name;
   char *p_base_stats_string;
   char hide_output;
   char is_unknown;
   enum DamageDirection damage_direction;
   GameDamageInfo game_damage_backup;
} CheatDamageInfo;
/*
enum CheatMode_enum {
  NO_CHEAT,
  LITTLE_BOOST,
  MIDDLE_BOOST,
  MAX_BOOST,

};
typedef struct {
  enum CheatMode_enum cheat_mode;
  float d1; // 2 normal_value;
  float d2; // 3 armor_value;
  float p1; // 4 p1;
  float p2; // 5 p2;
  float p3; // 6 p3;
  float p4; // 7 p4;
  float demolition; // 8
  float knockback1; // 9
  float knockback2; // 10
} CheatMode;

CheatMode cheat_modes[10] = {
  {NO_CHEAT, 1, 1,       1, 1, 1, 1,   1,     1,1},
  {LITTLE_BOOST, -1, -1,       -1, -1, -1, -1,   -1,     -1,-1},
}
*/

// YOU CAN CHANGE SECTION START
// TIP. INPUT is damage we assume is applying to US.  OUTPUT damage we apply to enemy (Script detect it if damage is in table and contains Enemy or Environment in type name. Or if damage is not in table, then it is unknown damage and we assume it is INPUT damage to us.

// HOTKEYS to include or exclude damage messages you see in DebugViewPP tool.
#define HOTKEY_EXCLUDE_DAMAGE 'U'
#define HOTKEY_INCLUDE_DAMAGE 'I'

// GOD SHOT hotkey just oneshot kill everything from any weapon while holding key (ex. pistol against buildings or titans). No table or multiplier values used for this. Just direct extreme values. Only for known output damages.
#define HOTKEY_GOD_SHOT VK_CONTROL

// set multiplier 0 to set damage to 0. For example damage 4000 * 0 = 0. Set 0.5f to get only half of damage 4000*0.5 = 2000.  Set 2.0f to multiply input damage by 2   4000*2=8000.
// the same for DEMOLITION and KNOCKBACK
#define INPUT_DAMAGE_MULTIPLIER 0.4f
#define INPUT_PENETRATION_MULTIPLIER 0.5f
#define INPUT_DEMOLITION_MULTIPLIER 0.0f
#define INPUT_KNOCKBACK_MULTIPLIER 0.0f

#define OUTPUT_DAMAGE_MULTIPLIER 3.0f
#define OUTPUT_PENETRATION_MULTIPLIER 1.0f
#define OUTPUT_DEMOLITION_MULTIPLIER 1.0f
// explosion guns will not ragdoll you if shoot nearly
#define OUTPUT_KNOCKBACK_MULTIPLIER 0.0f

// ADD is absolute value to add before multiplying. for example you want to set output knockback multiplier to 2.0f. But pistol have knockback value 0 by default. So the formula will be 0 * 2 = 0 - no knockback
// Here you can set add value. So if set OUTPUT_KNOCKBACK_ADD to 20, pistol will get knockback with this formula  (0 (game default) + 20 (OUTPUT_KNOCKBACK_ADD)) * 2 (OUTPUT_KNOCKBACK_MULTIPLIER) = 20 * 2 = 40 knockback
// negative values acceptable too. But result value will be clamped to not go below 0.
#define INPUT_DAMAGE_ADD 0
#define INPUT_PENETRATION_ADD 0
#define INPUT_DEMOLITION_ADD 0
#define INPUT_KNOCKBACK_ADD 0

#define OUTPUT_DAMAGE_ADD 0
#define OUTPUT_PENETRATION_ADD 0
#define OUTPUT_DEMOLITION_ADD 0
#define OUTPUT_KNOCKBACK_ADD 0

// INPUT_DAMAGE_LIMIT if titan attack you it have 4000 damage, instant kill. You can set maximum damage for any unknown/enemy/environment
// Set any negative value to switch off this function
#define INPUT_DAMAGE_LIMIT 80

/* Damage individual settings.
-2 -3 -4 -5 -6 -7 -8 -9 -10 are numbered placeholders where you can specify individual absolute (not multiplier) values for:
-2 damage1
-3 damage2
-4 -5 -6 -7 penetration1-2
-8 = demolition
-9 -10 = knockback values
If specify value below zero parameter will not change for individual weapon. But still may change it it is Enemy or Environmental or Unknown (not in table) damage.
For example this:
{326,	-2,	-3, -4, -5,	-6,	-7,	-8,	5000,	5000,	1.0f, "00 Melee", "Helldiver melee", "050 005 | 01 00 00 00 | 10 | 25 30 | 0 0 0 | 0 0"},
will set -9 and -10 (both knockback values to 5000. Other fields will not thange in section where individual parameters are applied

The next value after -10 is multiplier for damage1-2. Value 1.0f is game default
After that there is weapon class (if contains Enemy or Enrironment, damage will get
*/
CheatDamageInfo g_damage_table[500] = {
{326,	-2,	-3, -4, -5,	-6,	-7,	-8,	-9,	-10,	1.0f, "00 Melee", "Helldiver melee", "050 005 | 01 00 00 00 | 10 | 25 30 | 0 0 0 | 0 0"},
{ 51,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "01 Assault rifle", "AR-22C Patriot / AR-23 Liberator / AR-48 Truth Whisperer / AR-61 Tenderizer / Stalwart / AX/AR-23 Guard Dog (w Liberator AR)", "060 006 | 02 02 02 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{ 50,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "01 Assault rifle", "AR-23C Liberator Concussive", "065 015 | 02 02 02 02 | 10 | 35 100 | 0 0 0 | 0 0"},
{ 48,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "01 Assault rifle", "AR-23P Liberator Penetrator", "045 015 | 03 03 03 00 | 10 | 10 10 | 0 0 0 | 0 0"},
// love
{ 65,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	50,  40, 	1.0f, "02 Marksman rifle", "AR-20L Justice / BR-14 Adjudicator / Machine Gun / Gatling Sentry / Machine Gun Sentry", "080 008 | 03 03 03 01 | 10 | 15 12 | 0 0 0 | 0 0"},
{ 73,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "02 Marksman rifle", "R-63 Diligence", "125 013 | 02 02 02 00 | 10 | 15 14 | 0 0 0 | 0 0"},
{ 74,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "02 Marksman rifle", "R-63CS Diligence Counter Sniper", "140 014 | 03 03 03 00 | 10 | 15 14 | 0 0 0 | 0 0"},
{ 26,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "03 Submachine gun", "MP-98 Knight", "050 005 | 02 02 02 00 | 10 | 10 4 | 0 0 0 | 0 0"},
{ 34,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "03 Submachine gun", "SG-8S / SMG-37 Defender", "070 007 | 02 02 02 00 | 10 | 10 5 | 0 0 0 | 0 0"},
{ 41,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "03 Submachine gun", "SMG-72 Pummeler", "065 007 | 02 02 02 00 | 10 | 15 5 | 0 34 2 | 0 0"},
{102,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-225 Breaker", "030 006 | 02 02 02 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{103,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-225BB Breaker Bugbiter", "045 009 | 02 02 02 00 | 10 | 15 15 | 0 0 0 | 0 0"},
{104,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-225NS Breaker Nailspitter", "020 004 | 03 03 03 00 | 10 | 10 10 | 0 0 0 | 0 0"},
// love
{101,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9, -10,	1.0f, "04 Shotgun", "SG-225SP Breaker Spray&Pray", "012 004 | 02 02 02 00 | 10 | 3 1 | 0 0 0 | 0 0"},
{105,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-255IE Breaker Incendiary", "020 010 | 02 02 02 00 | 10 | 10 10 | 1 6 100 | 0 0"},
{ 88,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-8 Punisher", "045 012 | 02 02 02 00 | 10 | 35 30 | 0 0 0 | 0 0"},
{ 99,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SG-8S Slugger", "250 075 | 03 03 03 00 | 10 | 20 35 | 0 0 0 | 0 0"},
{117,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "04 Shotgun", "SMG-37 Defender", "050 035 | 03 03 03 00 | 10 | 30 25 | 2 0 0 | 0 0"},
{124,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "CB-9 Exploding Crossbow part 1 (impact)", "270 050 | 03 03 03 00 | 0 | 30 10 | 0 0 0 | 0 0"},
{125,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "CB-9 Exploding Crossbow part 2 (explosion)", "150 150 | 02 02 02 00 | 15 | 25 10 | 0 0 0 | 0 0"},
{ 84,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "JAR-5 Dominator", "275 090 | 03 03 03 00 | 10 | 35 15 | 0 0 0 | 0 0"},
{ 80,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "R-36 Eruptor p1 (direct shell impact)", "230 115 | 03 03 03 00 | 30 | 35 20 | 0 0 0 | 0 0"},
{205,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "05 Explosive", "R-36 Eruptor p2 (sub-shell enemy hits)", "150 150 | 03 00 00 00 | 20 | 25 40 | 0 0 0 | 0 0"},
{ 19,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "LAS-16 Sickle", "055 005 | 02 02 02 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{297,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "LAS-5 Scythe", "350 070 | 02 02 02 00 | 10 | 0 0 | 0 6 0 | 0 0"},
{ 20,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-1 Scorcher p1 / PLAS-101 Purifier (Part 1) / SG-8P Punisher Plasma part 1 impact of projectile", "100 050 | 02 02 02 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{184,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-1 Scorcher p2 (Plasma Damage)", "100 100 | 03 00 00 00 | 10 | 10 7 | 0 0 0 | 0 0"},
{ 21,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-101 Purifier", "250 100 | 03 03 03 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{186,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "06 Energy-based", "PLAS-101 Purifier (Part 2) / SG-8P Punisher Plasma part 2 explosion", "150 150 | 03 03 03 00 | 10 | 35 30 | 0 0 0 | 0 0"},
{134,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "GP-31 Grenade Pistol part1 shell", "250 250 | 03 03 03 00 | 30 | 40 10 | 0 0 0 | 0 0"},
{220,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "GP-31 Grenade Pistol part2 explosion / GL-21 Grenade launcher part 2 explosion", "350 350 | 03 00 00 00 | 30 | 25 40 | 0 0 0 | 0 0"},
{296,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "LAS-7 Dagger (continuous laser pistol)", "200 020 | 02 02 02 00 | 10 | 0 0 | 0 6 0 | 0 0"},
{ 42,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-113 Verdict", "125 012 | 02 02 02 00 | 10 | 12 10 | 0 0 0 | 0 0"},
{ 25,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-19 Redeemer", "060 005 | 02 02 02 00 | 10 | 10 4 | 0 0 0 | 0 0"},
{ 27,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-2 Peacemaker", "075 015 | 02 02 02 00 | 10 | 10 4 | 0 0 0 | 0 0"},
{ 44,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "07 Pistol", "P-4 Senator", "175 035 | 03 03 03 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{203,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-10 Incendiary / G-13 Incendiary impact / Incendary Impact / Incendary Impact", "150 150 | 03 00 00 00 | 30 | 20 15 | 1 6 100 | 0 0"},
{213,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-12 High Explosive / G-16 Impact", "400 400 | 04 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{201,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-6 Frag part 1", "250 250 | 03 00 00 00 | 20 | 25 40 | 0 0 0 | 0 0"},
{111,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "08 Grenade Standard", "G-6 Frag part 2", "080 008 | 02 02 02 00 | 10 | 10 20 | 0 0 0 | 0 0"},
{204,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "09 Grenade Special", "G-123 Thermite", "100 100 | 07 00 00 00 | 30 | 20 40 | 0 0 0 | 0 0"},
{169,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "09 Grenade Special", "G-23 Stun", "000 000 | 06 00 00 00 | 0 | 0 0 | 0 35 25 | 0 0"},
{122,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Antimaterial Rifle", "450 135 | 04 04 04 00 | 20 | 20 25 | 0 0 0 | 0 0"},
{115,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "ARC3 Thrower", "250 050 | 07 07 07 00 | 20 | 35 10 | 2 0 0 | 0 0"},
{127,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Autocannon (part 1/2)", "260 260 | 04 04 04 00 | 30 | 30 20 | 0 0 0 | 0 0"},
{216,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Autocannon (part 2/2)", "150 150 | 03 00 00 00 | 30 | 40 40 | 0 0 0 | 0 0"},
{ 93,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Break action shotgun", "065 013 | 02 02 02 00 | 10 | 20 20 | 0 0 0 | 0 0"},
{145,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Commando", "500 500 | 06 05 03 00 | 40 | 50 25 | 0 0 0 | 0 0"},
{135,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EAT-17 Expendable Anti-Tank part 1", "650 650 | 06 06 06 03 | 30 | 50 25 | 0 0 0 | 0 0"},
{189,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EAT-17 Expendable Anti-Tank part 2", "015 015 | 03 00 00 00 | 10 | 30 15 | 0 0 0 | 0 0"},
{226,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EAT-17 Expendable Anti-Tank part 3", "150 150 | 03 00 00 00 | 30 | 60 40 | 0 0 0 | 0 0"},
{129,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator gun part 1", "300 060 | 05 05 05 00 | 30 | 30 10 | 0 0 0 | 0 0"},
{217,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator gun part 2", "150 150 | 03 00 00 00 | 30 | 40 40 | 0 0 0 | 0 0"},
{147,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator rocket part 1", "400 400 | 06 06 04 00 | 30 | 40 25 | 0 0 0 | 0 0"},
{234,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "EXO-45 Emancipator rocket part 2", "400 400 | 03 00 00 00 | 30 | 60 70 | 0 0 0 | 0 0"},
{  9,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "FLAM-40 Flamethrower part 1", "003 003 | 03 03 03 00 | 10 | 5 5 | 1 6 10 | 0 0"},
{ 10,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "GL-21 Grenade launcher part 1 / Mortar Sentry shoot (not shell)", "020 002 | 00 00 00 00 | 10 | 40 10 | 0 0 0 | 0 0"},
{ 11,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Grenade Launcher", "005 000 | 02 01 00 00 | 10 | 40 10 | 0 0 0 | 0 0"},
{121,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Heavy Machinegun", "100 035 | 04 04 04 00 | 15 | 15 20 | 0 0 0 | 0 0"},
{149,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Javelin rocket part 1", "1000 1000 | 08 07 06 00 | 40 | 50 25 | 0 0 0 | 0 0"},
{236,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Javelin rocket part 2", "200 200 | 05 00 00 00 | 30 | 60 70 | 0 0 0 | 0 0"},
{302,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "LAS-98 Laser Cannon", "350 200 | 04 04 04 04 | 20 | 0 0 | 0 6 0 | 0 0"},
{227,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Quasar Cannon part 1", "650 650 | 06 06 06 03 | 30 | 50 40 | 0 0 0 | 0 0"},
{228,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Quasar Cannon part 2", "150 150 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
{136,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Recoiless Rifle part 1 shell", "650 650 | 06 06 06 03 | 30 | 50 25 | 0 0 0 | 0 0"},
{225,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "10 Stratagem weapon", "Recoiless Rifle part 2 explosion", "150 150 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
// Love
{ 22,	-2,	240	-4,	-5,	-6,	-7,	30,	50,	 30,	1.0f, "10 Stratagem weapon", "RS-422 Railgun", "600 060 | 05 05 05 05 | 10 | 35 15 | 0 0 0 | 0 0"},
{130,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "Autocannon Sentry / Pelican evacuation ship part 1", "300 300 | 05 05 05 00 | 30 | 40 10 | 0 0 0 | 0 0"},
{298,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "AX/LAS-5 Guard Dog Rover (w Laser Rifle)", "200 040 | 02 02 02 00 | 10 | 0 0 | 0 6 0 | 0 0"},
{271,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "EMS Mortar Sentry - shell impact", "000 000 | 04 00 00 00 | 30 | 10 40 | 0 0 0 | 0 0"},
{243,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "MD-6 Anti-Personnel Minefield", "200 200 | 03 00 00 00 | 30 | 30 30 | 0 0 0 | 0 0"},
{223,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "Mortar Sentry shell", "400 400 | 03 00 00 00 | 30 | 35 40 | 0 0 0 | 0 0"},
{126,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "11 Stratagem Sentry", "Tesla Tower", "600 600 | 04 04 04 00 | 20 | 20 10 | 2 0 0 | 0 0"},
{245,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Defensive", "AntiTank mine", "1000 1000 | 05 05 05 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{113,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Defensive", "MD-I4 Incendiary mines", ""},
{154,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "500kg bomb1 shell", "1400 1400 | 07 07 07 00 | 50 | 20 15 | 0 0 0 | 0 0"},
{273,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "500kg bomb2 explosion", "1200 1200 | 06 00 00 00 | 50 | 100 40 | 0 0 0 | 0 0"},
{152,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle 110mm rocket pods part 1", "600 600 | 05 05 05 00 | 40 | 20 15 | 0 0 0 | 0 0"},
{241,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle 110mm rocket pods part 2", "200 200 | 05 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{254,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle Airstrike part 2", "800 800 | 05 00 00 00 | 40 | 50 40 | 0 0 0 | 0 0"},
{142,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle Aistrike shell / Eagle Napalm Strike shell", "500 500 | 05 05 05 00 | 40 | 20 15 | 0 0 0 | 0 0"},
{229,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Eagle cluster bomb / Orbital airburst strike p2", "350 350 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
{159,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital 120MM HE barrage p1", "300 300 | 07 07 06 00 | 50 | 20 20 | 0 0 0 | 0 0"},
{268,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital 120MM HE barrage p2", "750 750 | 05 00 00 00 | 50 | 70 40 | 0 0 0 | 0 0"},
{112,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital airburst strike p1", "300 150 | 03 03 03 00 | 10 | 10 20 | 0 0 0 | 0 0"},
{158,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital gas strike", "300 300 | 07 07 06 00 | 50 | 60 15 | 0 0 0 | 0 0"},
{305,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital laser", "030 015 | 06 06 06 00 | 50 | 30 30 | 0 6 1 | 0 0"},
{160,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital precision strike1 / Traitor player orbital atata 1", "450 450 | 08 07 06 00 | 50 | 20 20 | 0 0 0 | 0 0"},
{267,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital precision strike2 / Traitor player orbital atata 2", "1000 1000 | 06 00 00 00 | 50 | 70 60 | 0 0 0 | 0 0"},
{161,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital railcannon strike1", "2000 2000 | 10 09 08 00 | 50 | 60 35 | 0 0 0 | 0 0"},
{266,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "12 Stratagem Orbital", "Orbital railcannon strike2", "500 500 | 06 00 00 00 | 50 | 30 50 | 0 0 0 | 0 0"},
{196,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Barrel explosion", "300 300 | 03 00 00 00 | 30 | 20 40 | 1 6 10 | 0 0"},
{337,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Big smoke? On automaton map", "001 001 | 07 00 00 00 | 41 | 40 35 | 0 0 0 | 0 0"},
{309,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Burning", "050 025 | 04 04 04 00 | 0 | 0 0 | 1 0 0 | 0 0"},
{280,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Explosion", "200 200 | 03 00 00 00 | 50 | 50 40 | 0 0 0 | 0 0"},
{287,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Fall damage", "4000 4000 | 10 00 00 00 | 60 | 50 100 | 0 0 0 | 0 0"},
{294,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Green flower exploded slow effect", "015 015 | 03 00 00 00 | 0 | 15 15 | 0 46 75 | 35 50"},
{258,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Orbital capsula impact damage", "150 150 | 10 00 00 00 | 40 | 80 40 | 0 0 0 | 0 0"},
{219,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Pelican evacuation ship part 2", "150 150 | 03 00 00 00 | 30 | 40 40 | 0 0 0 | 0 0"},
{192,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Terminid yellow ground spore 1", "000 000 | 06 00 00 00 | 10 | 20 40 | 3 10 100 | 0 0"},
{311,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "15 Environment", "Terminid yellow ground spore 2 / Terminid Bug melee damage / Terminid Hunter attack 1", "003 000 | 01 01 01 00 | 0 | 0 0 | 3 0 0 | 0 0"},
{360,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Berserker melee", "050 050 | 03 00 00 00 | 20 | 20 15 | 0 0 0 | 0 0"},
{354,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Commissar (red shoulders) melee", "030 015 | 03 00 00 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{  5,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton damage", "040 020 | 02 02 02 00 | 10 | 5 5 | 1 6 50 | 0 0"},
{324,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton distance damage (some1) / Automaton Hulk Scorcher (Gromila) Self flame?", "001 001 | 09 09 09 09 | 0 | 0 0 | 4 0 0 | 0 0"},
{  6,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton distance damage (some2) / Automaton Gunship rocket blast", "075 050 | 06 05 04 00 | 20 | 50 25 | 0 0 0 | 0 0"},
{261,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Drop/Gun-ship fall on somethink", "100 100 | 03 00 00 00 | 40 | 50 40 | 0 0 0 | 0 0"},
{265,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton grenade", "200 200 | 03 00 00 00 | 30 | 50 40 | 0 0 0 | 0 0"},
{119,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Gunship blaster / Automaton Hulk Scorcher right hand blaster / Automatons SHREDDER TANK 1 blaster shells", "055 005 | 03 03 03 00 | 20 | 20 15 | 0 0 0 | 0 0"},
{257,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Gunship rocket / Automaton rocket / Automaton Rocket devastator (rocket launchers on shoulders)", "060 060 | 03 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{  7,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton hand blaster", "030 003 | 02 02 01 00 | 10 | 10 15 | 0 0 0 | 0 0"},
{356,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Hulk Scorcher melee", "150 150 | 05 00 00 00 | 30 | 40 35 | 0 0 0 | 0 0"},
{353,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton Maradeur melee / Automaton Rocket rider melee", "010 005 | 01 00 00 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{206,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton unknown", "100 100 | 03 00 00 00 | 20 | 50 40 | 0 0 0 | 0 0"},
{239,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton unknown", "150 150 | 05 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{281,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automaton unknown", "300 300 | 03 00 00 00 | 50 | 50 40 | 0 0 0 | 0 0"},
{246,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automatons ground red mine", "300 300 | 03 00 00 00 | 30 | 30 40 | 0 0 0 | 0 0"},
{322,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automatons SHREDDER TANK 2 continuous scan", "075 075 | 06 06 06 00 | 0 | 0 0 | 5 0 0 | 0 0"},
{358,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Automatons", "Automatons SHREDDER TANK 3 rare", "200 200 | 04 00 00 00 | 40 | 40 40 | 0 0 0 | 0 0"},
{176,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bile Titan bile1", "050 050 | 06 00 00 00 | 0 | 0 0 | 3 10 100 | 0 0"},
{  2,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bile Titan bile2", "050 050 | 05 05 05 00 | 0 | 20 10 | 0 0 0 | 0 0"},
{351,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bile Titan Stomp (impact)", "3000 3000 | 10 00 00 00 | 40 | 60 10 | 0 0 0 | 0 0"},
{342,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Brood commander melee attack / Terminid Hive Guard melee attack / Terminid Hunter swipes / Terminid Warrior melee attack", "040 040 | 02 00 00 00 | 20 | 20 10 | 0 0 0 | 0 0"},
{  1,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Bug Bile spew", "032 032 | 04 04 04 00 | 0 | 20 10 | 0 0 0 | 0 0"},
{335,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Charger Rush", "350 350 | 07 00 00 00 | 40 | 50 50 | 0 0 0 | 0 0"},
{292,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Ground spores if shoot then blow&throw away", "005 005 | 03 00 00 00 | 20 | 55 55 | 0 35 25 | 0 0"},
{338,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Hunter attack 2", "030 015 | 02 00 00 00 | 10 | 10 10 | 0 0 0 | 0 0"},
{  3,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Nursing spewer bile", "032 032 | 04 04 04 00 | 10 | 20 10 | 0 0 0 | 0 0"},
{345,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Scavenger melee attack", "030 015 | 02 00 00 00 | 10 | 10 5 | 0 0 0 | 0 0"},
{332,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid some bug melee 1", "000 000 | 07 00 00 00 | 40 | 0 0 | 0 0 0 | 0 0"},
{336,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid some bug melee 2", "030 030 | 07 00 00 00 | 41 | 40 35 | 0 0 0 | 0 0"},
{348,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Stalker attack", "040 040 | 03 00 00 00 | 20 | 20 15 | 0 0 0 | 0 0"},
{349,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminid Stalker throw away attack", "035 035 | 02 00 00 00 | 0 | 35 45 | 0 0 0 | 0 0"},
{340,	-2,	-3,	-4,	-5,	-6,	-7,	-8,	-9,	-10,	1.0f, "Enemy Terminids", "Terminod Stalker melee", "035 003 | 01 00 00 00 | 15 | 20 10 | 0 0 0 | 0 0"}
};
// YOU CAN CHANGE SECTION END

#define NO_OLDNAMES
#include <stddef.h>
#include <windows.h>
#include <string.h>

extern __cdecl int sprintf(char *, char *, ...);
extern __cdecl void OutputDebugStringA(const char* lpOutputString);
char g_debug_string[400];
char included_excluded_str[15];
short GetAsyncKeyState(int);


// how much records in table.  unknown damages, detected in game will be recorded above
int g_damage_table_records = 150;
// Include / Exclude global flags
char g_exclude_flag = 1;
char g_include_flag = 0;
//char damage_debug_global = 1;
int knock_value = 10;


// function to calculate final value
float calculate(int original_value,
                int user_table_value,
                float user_table_multiplier,
                int damage_direction_add_value,
                float damage_direction_multiplier) {
  float output_value = (user_table_value >= 0) ? user_table_value : original_value;

  if ((user_table_multiplier >= 0) && (user_table_multiplier != 1.0f)) {
    output_value *= user_table_multiplier;
  }

  output_value += damage_direction_add_value;
  if (output_value < 0) {
    output_value = 0;
  }

  if ((damage_direction_multiplier >= 0) && (damage_direction_multiplier != 1.0f)) {
    output_value *= damage_direction_multiplier;
  }
  return output_value;
}

{$asm}

[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,$20000)
label(damage_return)
// define global variable
alloc(damage_ratio,4)
registersymbol(damage_ratio)


damage_newmem:
{$ccode base_address=rcx}
//extern float damage_ratio = 1.0f;
//                           damage_ratio = UNKNOWN_DAMAGE_MULTIPLIER; // Default damage multiplier for damages (unknown) that are not found in g_damage_table. Assuming they are some enemy attacks.

GameDamageInfo *game_damage = (GameDamageInfo*)(base_address);
if (game_damage->id == 0) { goto end_section; }

CheatDamageInfo *user_table_entry = NULL; // current_damage is place where to put address of g_damage_table entry with id equals damage_id

// search in-game damage in user's damage_table
for (int i = 0; i < sizeof(g_damage_table) / sizeof(g_damage_table[0]); ++i) {
  if (g_damage_table[i].id == 0) {
    continue;
  }
  if (game_damage->id == g_damage_table[i].id) {
    // entry found
    user_table_entry = &g_damage_table[i];
    break;
  }
}

if (!user_table_entry) {
  // if in-game damage was not found in user's damage_table, then add it to user's damage table, so we can work with it usual way
  user_table_entry = &g_damage_table[g_damage_table_records++];
  user_table_entry->id = game_damage->id;
  user_table_entry->d1 = -1;
  user_table_entry->d2 = -1;
  user_table_entry->p1 = -1;
  user_table_entry->p2 = -1;
  user_table_entry->p3 = -1;
  user_table_entry->p4 = -1;
  user_table_entry->demolition = -1;
  user_table_entry->knockback1 = -1;
  user_table_entry->knockback2 = -1;
  user_table_entry->damage_mult = 1.0f;
  user_table_entry->p_weapon_type = "Enemy, Environmental or Unknown. Added from game, not from user table. Assuming it is input_damage to player";
  user_table_entry->p_damage_name = "Enemy, Environmental or Unknown. Added from game, not from user table. Assuming it is input_damage to player";
  user_table_entry->p_base_stats_string = "";
  user_table_entry->hide_output = 0;
  user_table_entry->game_damage_backup = *game_damage;
  user_table_entry->damage_direction = INPUT_DIRECTION; // Any unknown damage (not in table) interpreted as INPUT_DIRECTION (damage to our player)

  sprintf(g_debug_string, "Damage: New damage class added to table: id %3d", game_damage->id);
  OutputDebugStringA(g_debug_string);
}

// Error situation. Usually could not happen.
if (!user_table_entry) {
  sprintf(g_debug_string, "Damage: user_table_entry is null. return");
  OutputDebugStringA(g_debug_string);
  goto end_section;
}

// backup untouched game_damage values for later use
if (user_table_entry->game_damage_backup.id != game_damage->id) {
  sprintf(g_debug_string, "Damage: id %d saved game_damage_backup", game_damage->id);
  OutputDebugStringA(g_debug_string);
  user_table_entry->game_damage_backup = *game_damage;
}

// Detect damage direction if not detected earlier
if ((user_table_entry->damage_direction != INPUT_DIRECTION) && (user_table_entry->damage_direction != OUTPUT_DIRECTION)) {
   if (strstr(user_table_entry->p_weapon_type, "Enemy") || strstr(user_table_entry->p_weapon_type, "Environment")) {
     user_table_entry->damage_direction = INPUT_DIRECTION;
   } else {
     user_table_entry->damage_direction = OUTPUT_DIRECTION;
   }
}


if ((GetAsyncKeyState(HOTKEY_GOD_SHOT) & 0x8000) && (user_table_entry->damage_direction == OUTPUT_DIRECTION)) {
  // GOD SHOT hotkey just oneshot kill everything from any weapon (ex. pistol against buildings or titans)
  game_damage->d1 = 9999;
  game_damage->d2 = 9999;
  game_damage->p1 = 10;
  game_damage->p2 = 10;
  game_damage->p3 = 10;
  game_damage->p4 = 10;
  game_damage->p4 = 10;
  game_damage->demolition = 1000;
  game_damage->knockback1 = 0;
  game_damage->knockback2 = 0;
} else {
  game_damage->d1 = calculate(user_table_entry->game_damage_backup.d1,
                             user_table_entry->d1,
                             user_table_entry->damage_mult,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_ADD : OUTPUT_DAMAGE_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_MULTIPLIER : OUTPUT_DAMAGE_MULTIPLIER);
  game_damage->d2 = calculate(user_table_entry->game_damage_backup.d2,
                             user_table_entry->d2,
                             user_table_entry->damage_mult,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_ADD : OUTPUT_DAMAGE_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DAMAGE_MULTIPLIER : OUTPUT_DAMAGE_MULTIPLIER);
  game_damage->p1 = calculate(user_table_entry->game_damage_backup.p1,
                             user_table_entry->p1,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->p2 = calculate(user_table_entry->game_damage_backup.p2,
                             user_table_entry->p2,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->p3 = calculate(user_table_entry->game_damage_backup.p3,
                             user_table_entry->p3,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->p4 = calculate(user_table_entry->game_damage_backup.p4,
                             user_table_entry->p4,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_ADD : OUTPUT_PENETRATION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_PENETRATION_MULTIPLIER : OUTPUT_PENETRATION_MULTIPLIER);
  game_damage->demolition = calculate(user_table_entry->game_damage_backup.demolition,
                             user_table_entry->demolition,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DEMOLITION_ADD : OUTPUT_DEMOLITION_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_DEMOLITION_MULTIPLIER : OUTPUT_DEMOLITION_MULTIPLIER);
  game_damage->knockback1 = calculate(user_table_entry->game_damage_backup.knockback1,
                             user_table_entry->knockback1,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_ADD : OUTPUT_KNOCKBACK_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_MULTIPLIER : OUTPUT_KNOCKBACK_MULTIPLIER);
  game_damage->knockback2 = calculate(user_table_entry->game_damage_backup.knockback2,
                             user_table_entry->knockback2,
                             1.0f,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_ADD : OUTPUT_KNOCKBACK_ADD,
                             (user_table_entry->damage_direction == INPUT_DIRECTION) ? INPUT_KNOCKBACK_MULTIPLIER : OUTPUT_KNOCKBACK_MULTIPLIER);
}

// INPUT DAMAGE LIMIT
if (INPUT_DAMAGE_LIMIT >= 0) {
  if (user_table_entry->damage_direction == INPUT_DIRECTION) {
    if (game_damage->d1 > INPUT_DAMAGE_LIMIT) {
      game_damage->d1 = INPUT_DAMAGE_LIMIT;
    }
    if (game_damage->d2 > INPUT_DAMAGE_LIMIT) {
      game_damage->d2 = INPUT_DAMAGE_LIMIT;
    }
  }
}


// Include / Exclude damage_id printing routines
if (GetAsyncKeyState(HOTKEY_EXCLUDE_DAMAGE) & 0x8000) {
   // Exclude mode. While key pressed, all damages that are happening will mark as excluded and will not be printed in OutputDebug section
   g_exclude_flag = 1;
   g_include_flag = 0;
} else {
   g_exclude_flag = 0;
   // Include mode. While key pressed, all damages that happening and was excluded before, including back and will print in OutputDebug section
  if (GetAsyncKeyState(HOTKEY_INCLUDE_DAMAGE) & 0x8000) {
     // include mode
     g_exclude_flag = 0;
     g_include_flag = 1;
  } else {
    g_include_flag = 0;
  }
}

strcpy(included_excluded_str, "");
if (g_exclude_flag) {
  if (!user_table_entry->hide_output) {
    strcpy(included_excluded_str, " excluded ");
  }
  user_table_entry->hide_output = 1;
}
if (g_include_flag) {
  if (user_table_entry->hide_output) {
    strcpy(included_excluded_str, " included ");
  }
  user_table_entry->hide_output = 0;
}
// Output debug information
if (!user_table_entry->hide_output) {
   sprintf(g_debug_string, "Damage: %s id %3d | %d->%d %d->%d | pen: %d->%d %d->%d %d->%d %d->%d | demolition: %d->%d | knock %d->%d %d->%d | decal size: %d duration x100: %d type: %d | mult %d%% mult ext %d%% | damage_to_us: %d | %s",
                      included_excluded_str,

                      game_damage->id,

                      user_table_entry->game_damage_backup.d1,
                      game_damage->d1,

                      user_table_entry->game_damage_backup.d2,
                      game_damage->d2,

                      user_table_entry->game_damage_backup.p1,
                      game_damage->p1,

                      user_table_entry->game_damage_backup.p2,
                      game_damage->p2,

                      user_table_entry->game_damage_backup.p3,
                      game_damage->p3,

                      user_table_entry->game_damage_backup.p4,
                      game_damage->p4,

                      user_table_entry->game_damage_backup.demolition,
                      game_damage->demolition,

                      user_table_entry->game_damage_backup.knockback1,
                      game_damage->knockback1,

                      user_table_entry->game_damage_backup.knockback2,
                      game_damage->knockback2,

                      game_damage->decal_size,
                      (int)(game_damage->decal_duration * 100),
                      game_damage->decal_type,

                      (int)(user_table_entry->damage_mult*100.0f),
                      (int)(ext_damage_mult),
                      (user_table_entry->damage_direction == INPUT_DIRECTION),
                      user_table_entry->p_damage_name
                      );
  OutputDebugStringA(g_debug_string);
}
end_section:
{$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]
Seem working just fine after abit of testing, that ctrl key is sick tbh very convenient to use if i ever want to. :D

excilomat
What is cheating?
What is cheating?
Posts: 4
Joined: Tue Mar 21, 2023 10:33 am
Reputation: 0

Re: HELLDIVERS 2

Post by excilomat »

@Exemplify1524

is it possible to change or add effect type/size with your Damage script?
Like for example LAS-Sickle leaving heat marks on metal/ground/bug armor

Exemplify1524
Cheater
Cheater
Posts: 34
Joined: Tue Apr 30, 2024 8:37 am
Reputation: 16

Re: HELLDIVERS 2

Post by Exemplify1524 »

excilomat wrote:
Sun May 19, 2024 7:58 am
@Exemplify1524

is it possible to change or add effect type/size with your Damage script?
Like for example LAS-Sickle leaving heat marks on metal/ground/bug armor
I was wrong with these parameters. Modifying it didnt do anything :(

Post Reply

Who is online

Users browsing this forum: dbyw9291, Diark, Flarist, Google [Bot], Google Adsense [Bot], jlee100, Majestic-12 [Bot], niaforever, readlfj, roronoalance, SemrushBot, silly