HELLDIVERS 2

Upload your cheat tables here (No requests)
vallenvega
Noobzor
Noobzor
Posts: 7
Joined: Sat Sep 11, 2021 2:52 pm
Reputation: 2

Re: HELLDIVERS 2

Post by vallenvega »

hey guys,
is there a code to swap armor perk around? e.g. put 'Democracy Protects' into Heavy Armor. or put Scout perk into Legionnaire armor.
so some kind of poor man's transmog.

btw come to think of it, 100% chance to trigger Democracy Protects would be great too.

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

fallout11
Expert Cheater
Expert Cheater
Posts: 53
Joined: Tue Apr 30, 2024 11:17 am
Reputation: 16

Re: HELLDIVERS 2

Post by fallout11 »

gir489 wrote:
Thu May 16, 2024 2:25 am
There was also some SEAF and shotgun IDs missing as well. Complete list:

#88 // SG-8 Punisher
#99 // SG-8S Slugger
#102 // SG-225 Breaker
#105 // SG-225IE Breaker Incendiary
#231 // Napalm SEAF impact
#273 // High-yield SEAF explosion
#287 // Hellbomb / SEAF Mini-Nuke
#298 // AX/LAS-5 "Guard Dog" Rover
#309 // Napalm SEAF burn

309 you mentioned in your notes is fire tornado / flamethrower, so I'm not sure why you chose to omit it entirely and have it path to the dmg_enemy scenario. Some of the SGs in your notes are commented out with a fix me, however, they work fine for me? Not sure what needs to be fixed here...

Anyway, speaking of the SEAF, my Infinite Strategems script wouldn't allow the SEAF to launch anything, but I've fixed it, along with a new damage mod script in the table on page 1.
I can answer this last question about #309, which is as you say not only fire tornados but all ground fire (from orbital laser and flamethrower, for instance), ZoDDeL's script has it path to enemy damage / be non-whitelisted so it will either do less damage (if you set the dmg_enemy multiplier to less than 1) or no damage (if it is zero). Being non-whitelisted, it doesn't do "regular" damage to you. You certainly wouldn't want that to do "super damage". =)

fallout11
Expert Cheater
Expert Cheater
Posts: 53
Joined: Tue Apr 30, 2024 11:17 am
Reputation: 16

Re: HELLDIVERS 2

Post by fallout11 »

vallenvega wrote:
Thu May 16, 2024 8:52 am
hey guys,
is there a code to swap armor perk around? e.g. put 'Democracy Protects' into Heavy Armor. or put Scout perk into Legionnaire armor.
so some kind of poor man's transmog.

btw come to think of it, 100% chance to trigger Democracy Protects would be great too.
Nope, that's all server-side stuff.

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

Re: HELLDIVERS 2

Post by ZoDDeL »

epicsrwtf wrote:
Wed May 15, 2024 10:42 pm
Hey was there a fix found for GetAsyncKeyState error? I get it for the instant completion script, I understand that for some systems it might not work? Could we possibly get a xp modifier in this case?
GetAsyncKeyState is windows api.
so if you on linux, osx there is pretty much no way to help you in this case.
xp modifier isnt possible because xp is serverside.
there are some libcurl stuff out there to dupe/spoof the server calls to get medals, xp etc. but i dont
have any experience in that and in the end we are in a cheat engine forum :D
btw. you could just use the old instant mission complete script without keystate check but this might crash on some missions
but at least you could use it a bit to farm medals.
p.s. xp doenst give you anything aside from a title.

AMGcheat wrote:
Thu May 16, 2024 1:44 am
fallout11 wrote:
Wed May 08, 2024 9:54 pm
ParadoxChris wrote:
Wed May 08, 2024 6:17 pm
anyone know how to set up infinite jetpack?

[ENABLE]
// unlimited jetpack
aobscanmodule(aob_ToTheSky,game.dll,89 04 B9 83 FD 01)
registersymbol(aob_ToTheSky)

aob_ToTheSky:
nop 3
//----------------------------------
[DISABLE]

Thanks to Gir489 (pretty sure) for this one a while back. It was working as of yesterday (pre-.303 patch).
Hello, I'm new to Cheat Engine. What exactly do I do with this code? Is there a link to a guide somewhere I could follow cause I've been trying to figure it out on my own with Cheat Engine 7.5 but I'm very lost. Any help would be greatly appreciated :cry:
while you have open CE / a table prest ctrl + alt + a
paste this code into the auto assamble window.
click on file (top left corner of the auto assembler window)
click on assign to current cheat table
now your table have an Auto Assemble script. you can rename it by doubleclick on the titel.
save your table with a click on file (top left corner main window of cheat engine)
then click on save or save as
gir489 wrote:
Thu May 16, 2024 2:25 am
ZoDDeL wrote:
Wed May 15, 2024 4:05 pm
i will add hellbomb id next update.
There was also some SEAF and shotgun IDs missing as well. Complete list:

#88 // SG-8 Punisher
#99 // SG-8S Slugger
#102 // SG-225 Breaker
#105 // SG-225IE Breaker Incendiary
#231 // Napalm SEAF impact
#273 // High-yield SEAF explosion
#287 // Hellbomb / SEAF Mini-Nuke
#298 // AX/LAS-5 "Guard Dog" Rover
#309 // Napalm SEAF burn

309 you mentioned in your notes is fire tornado / flamethrower, so I'm not sure why you chose to omit it entirely and have it path to the dmg_enemy scenario. Some of the SGs in your notes are commented out with a fix me, however, they work fine for me? Not sure what needs to be fixed here...

Anyway, speaking of the SEAF, my Infinite Strategems script wouldn't allow the SEAF to launch anything, but I've fixed it, along with a new damage mod script in the table on page 1.
yeah never checked seaf shells before.
as seaf work like most orbital strategems i would assume they all have at least 2-3 ID's one for ther shell/projectile and 1-2 for the effect(explosion, shrapnell, fire etc).

the missing shotgun ID's (and some more) were only left out because i did not recheck them from the last update where ID's changed and did not want to have unknown ID's in script that maybe would affect enemy stuff.
that also the reason for the fixme section. they are all just untested since ID's change patch.
its a "iam lazy / dont wanna use time to test weapon nobody uses" problem :roll:

309 is the burn / ground fire that is a side effect of orbital laser, flamethrower second ID, incendiary grenade second ID and for sure flame tornadoes/ ground fire they spread. and yeah i guess a few more weapons also use this as extra effect ID.
iam so pissed by flame tornadoes/ground fire that i dont want this ID on super or even default because it kills you so quick you cant even hit a stim/syringe. its 50 dmg per tick from max hp was 135 i think so like 2,5 sec till death.

see i didnt even know that your inf strategems (no cooldown) script negativly affect seaf calls.
i will add it your new one for sure.
Last edited by ZoDDeL on Thu May 16, 2024 4:30 pm, edited 1 time in total.

User avatar
gir489
RCE Fanatics
RCE Fanatics
Posts: 779
Joined: Mon May 08, 2017 4:08 am
Reputation: 600

Re: HELLDIVERS 2

Post by gir489 »

ZoDDeL wrote:
Thu May 16, 2024 12:04 pm
see i didnt even know that your inf strategems (no cooldown) script negativly affect seaf calls.
i will add it your new one for sure.
I didn’t even notice it until I saw someone in my lobby called down a mini nuke only for it to do absolutely nothing.

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

Re: HELLDIVERS 2

Post by ZoDDeL »

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.

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

Re: HELLDIVERS 2

Post by Exemplify1524 »

ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
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...
In CE people can just make group "My selection of cheats" right click on it, and then Group config -> Activating this entry activates all children.
Then just drag and drop all cheats they want into this group and apply with 1 click.

I attached the example.

Also if you about simplify, my main LUA script (Table -> Show cheat table lua script) can launch HD2 for you, attach, wait game.dll, apply entry (and all childrens if options is set) or entries and close CE after injection. All can be fully silent from launching .ct to run the game with injected cheats user selected and drag and dropped in group if you edit "ASK" flags in (Table -> Show cheat table lua script) to false.

I think better way is to explain users how do this combined think. And then just release separate cheats entries. With description contains (.303) as explanation for what path this script is. So users will add stuff they found to their own building.
Attachments
_MyHD2.CT
(614.11 KiB) Downloaded 140 times
Last edited by Exemplify1524 on Fri May 17, 2024 11:43 pm, edited 2 times in total.

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

Re: HELLDIVERS 2

Post by Exemplify1524 »

Little fixed version of my version of ZoDDel's sample override script. In .304 they've added in RDX new digit. in .303 it was 0 for common_type 1 for rare 2 for super. in .304 path these values can be 0 20 or 60 for common 1 21 etc for rare and 2 21 etc for super. So divide by 10 solve problem 61%10 = 1.

Code: Select all

{ Game   : helldivers2.exe
  Version:
  Date   : 2024-04-30
  Author : ZoDDeL
  Mod by : Anton v5
  Tested on: .304 path

  If hold CHEAT_ALL_HOTKEY while taking sample it will override all 3 counters to specified (edit section)
  If take sample and dont hold CHEAT_ALL_HOTKEY you receive HOTKEY_NOT_PRESSED_ADD_VALUE of sample type you taken
  You can edit #define section values below
  For debugging purposes you can open DebugViewPP tool and take some samples. you will receive messages.
}
{$c}
  // YOU CAN EDIT SECTION START
  #define CHEAT_ALL_HOTKEY 'C'
  #define SECRET_HOTKEY 'Q'
  // Keep common + rare + super sum below or equal to 100. For example you can specify 50+40+10 = 100
  #define HOTKEY_PRESSED_COMMON_SAMPLE_COUNT_REDEFINE 45
  #define HOTKEY_PRESSED_RARE_SAMPLE_COUNT_REDEFINE 30
  #define HOTKEY_PRESSED_SUPER_SAMPLE_COUNT_REDEFINE 10
  // if hotkey is not pressed and player take sample it will add specified value (game default is 1)
  #define HOTKEY_NOT_PRESSED_ADD_VALUE 10
  // YOU CAN EDIT SECTION END
  #define NO_OLDNAMES
  #include <windows.h>
  extern __cdecl int sprintf(char *, char *, ...);
  extern __cdecl void OutputDebugStringA(const char* lpOutputString);
  short GetAsyncKeyState(int);
  char debug_string[400];
  typedef struct {
    int common;
    int rare;
    int super;
  } Samples;


void show_bits_sprintf(int *rdx_value, char *buffer) {
  unsigned int mask = 0x80000000; // Маска для старшего бита
  int i;

  for (i = 0; i < 32; ++i) {
    // Проверяем, установлен ли бит
    if (*rdx_value & mask) {
      sprintf(buffer + i, "1");
    } else {
      sprintf(buffer + i, "0");
    }

    mask >>= 1; // Сдвигаем маску на один бит вправо
  }

  sprintf(buffer + 32, "\0"); // Добавляем завершающий нуль-символ
}
{$asm}

[ENABLE]
aobscanmodule(samples_inject,game.dll,48 8D 14 41 48 8B 43 40 4B 8D 0C 89 44 01 7C 90 04) // should be unique
alloc(samples_newmem,$2000)
label(samples_return)

samples_newmem:


  // original code start
  lea rdx,[rcx+rax*2]
  mov rax,[rbx+40]
  lea rcx,[r9+r9*4]
  // add [rax+rdx*4+04],r15d
  // original code end

  /*
  cmp rdx,0
  je samples_common
  cmp rdx,1
  je samples_rare
  cmp rdx,2
  je samples_super
samples_common: // when you pickup common
  mov [rax+rdx*4+04],#49 // common sample
  mov [rax+rdx*4+04+4],#30 // rare sample
  mov [rax+rdx*4+04+8],#20 // super sample
  jmp samples_return

samples_rare: // when you pickup rare
  mov [rax+rdx*4+04-4],#49 // common sample
  mov [rax+rdx*4+04],#30 // rare sample
  mov [rax+rdx*4+04+4],#20 // super sample
  jmp samples_return

samples_super: // when you pickup super
  mov [rax+rdx*4+04-8],#49 // common sample
  mov [rax+rdx*4+04-4],#30 // rare sample
  mov [rax+rdx*4+04],#20 // super sample
  jmp samples_return
  */
{$ccode base1=rax rdx=rdx}
  // calculate base_address of samples structure
  // rdx 0 = base+4
  // rdx 1 = base+4+4-4 = base+4
  // rdx 2 = base+8+4-8 = base+4
  // Samples* samples = (Samples*)(base1 + sample_type*4 + 4 - sample_type*4 );
  short sample_type = rdx % 10; // for common samples can be 0 20 or 60 (zero at the end). Rare 1 or 21.  Super 2 or 22
  short sample_unk = (int)(rdx / 10);
  int *picked_up_sample_counter = (int*)(base1 + rdx*4 + 4);
  //Samples* samples = (Samples*)(base1 + 4);
  Samples* samples = (Samples*)(base1 + rdx*4 + 4 - sample_type*4);

  int samples_count_now = samples->common + samples->rare + samples->super;

  sprintf(debug_string, "Samples: Taken type: %d | counts %d + %d + %d = %d. Unknown value is %d", sample_type, samples->common, samples->rare, samples->super, samples_count_now, sample_unk);
  OutputDebugStringA(debug_string);
  /*
  OutputDebugStringA("Samples: sample_type RDX  bits:");
  show_bits_sprintf(&sample_type, &debug_string);
  OutputDebugStringA(debug_string);
  */
  /*
  OutputDebugStringA("Samples: sample amount r15d bits:");
  show_bits_sprintf(&taken_sample_amount_r15d, &debug_string);
  OutputDebugStringA(debug_string);
  */

  // Already more than maxed out, restore max counts and exit
  if (samples_count_now > 100) {
    samples->common = HOTKEY_PRESSED_COMMON_SAMPLE_COUNT_REDEFINE;
    samples->rare = HOTKEY_PRESSED_RARE_SAMPLE_COUNT_REDEFINE;
    samples->super = HOTKEY_PRESSED_SUPER_SAMPLE_COUNT_REDEFINE;
    sprintf(debug_string, "Samples: count is >100. Restoring to maximum: %d %d %d", samples->common, samples->rare, samples->super);
    OutputDebugStringA(debug_string);
    goto end_section;
  }

  // Max all if hotkey pressed
  if (GetAsyncKeyState(CHEAT_ALL_HOTKEY) & 0x8000) {
    samples->common = HOTKEY_PRESSED_COMMON_SAMPLE_COUNT_REDEFINE;
    samples->rare = HOTKEY_PRESSED_RARE_SAMPLE_COUNT_REDEFINE;
    samples->super = HOTKEY_PRESSED_SUPER_SAMPLE_COUNT_REDEFINE;
    sprintf(debug_string, "Samples: hotkey pressed. Sample counts just set to maximum: %d %d %d", samples->common, samples->rare, samples->super);
    OutputDebugStringA(debug_string);
    goto end_section;
  }

  int value_to_add = 1;
  if (GetAsyncKeyState(SECRET_HOTKEY) & 0x8000) {
    sprintf(debug_string, "Samples: secret hotkey pressed. Samples piclup will be default(1)");
    OutputDebugStringA(debug_string);
  } else {
    value_to_add = HOTKEY_NOT_PRESSED_ADD_VALUE;
    int add_limit = 100 - samples_count_now;
    if (add_limit == 0) {
      sprintf(debug_string, "Samples: limit reached %d. No additional samples will be added", add_limit);
      OutputDebugStringA(debug_string);
    } else if (add_limit < 0) {
      samples->common = 50;
      samples->rare = 40;
      samples->super = 10;
      sprintf(debug_string, "Samples: count is more than allowed: %d. No additional samples will be added. Sample counts are set to maximum: %d %d %d", samples_count_now, samples->common, samples->rare, samples->super);
      OutputDebugStringA(debug_string);
    } else if (value_to_add > add_limit) {
      value_to_add = add_limit;
      sprintf(debug_string, "Samples: too much samples already collected. Add value is clamped to %d/%d", value_to_add, HOTKEY_NOT_PRESSED_ADD_VALUE);
      OutputDebugStringA(debug_string);
    } else {
      sprintf(debug_string, "Samples: will add %d of type %d", value_to_add, sample_type);
      OutputDebugStringA(debug_string);
    }
  }

  *picked_up_sample_counter += value_to_add;
  /*
  if (sample_type == 0) {
     samples->common += value_to_add;
  }
  if (sample_type == 1) {
     samples->rare += value_to_add;
  }
  if (sample_type == 2) {
     samples->super += value_to_add;
  }
  */

  /*
  samples->common += value_to_add+1;
  samples->rare += value_to_add+2;
  samples->super += value_to_add+3;
  */
  /*
  // hardcoded limit guard
  samples_count_now = samples->common + samples->rare + samples->super;
  if (samples_count_now > 100) {
    samples->common = 50;
    samples->rare = 40;
    samples->super = 10;
    sprintf(debug_string, "Samples: Hardcoded guard. Samples SUM is >100: %d. Sample counts are reset to maximum allowed: %d %d %d", samples_count_now, samples->common, samples->rare, samples->super);
    OutputDebugStringA(debug_string);
  }
  */

/*
  // output debug. you can look in DebugViewPP tool https://github.com/CobaltFusion/DebugViewPP
  sprintf(debug_string, "Samples out: common %d | rare %d | super %d", samples->common, samples->rare, samples->super);
  OutputDebugStringA(debug_string);
*/
end_section:
{$asm}
jmp samples_return

samples_inject:
jmp far samples_newmem
nop 3

samples_return:
registersymbol(samples_inject)

[DISABLE]

samples_inject:
  db 48 8D 14 41 48 8B 43 40 4B 8D 0C 89 44 01 7C 90 04

unregistersymbol(samples_inject)
dealloc(samples_newmem)

{
// ORIGINAL CODE - INJECTION POINT: game.dll+608B8F

game.dll+608B68: 41 FF C0        - inc r8d
game.dll+608B6B: 45 3B C1        - cmp r8d,r9d
game.dll+608B6E: 72 E0           - jb game.dll+608B50
game.dll+608B70: B8 FF FF FF FF  - mov eax,FFFFFFFF
game.dll+608B75: 48 8B 74 24 48  - mov rsi,[rsp+48]
game.dll+608B7A: 48 8B 6C 24 40  - mov rbp,[rsp+40]
game.dll+608B7F: 48 8B 7C 24 50  - mov rdi,[rsp+50]
game.dll+608B84: 44 8B C8        - mov r9d,eax
game.dll+608B87: 41 8D 4E FF     - lea ecx,[r14-01]
game.dll+608B8B: 4B 8D 04 89     - lea rax,[r9+r9*4]
// ---------- INJECTING HERE ----------
game.dll+608B8F: 48 8D 14 41     - lea rdx,[rcx+rax*2]
// ---------- DONE INJECTING  ----------
game.dll+608B93: 48 8B 43 40     - mov rax,[rbx+40]
game.dll+608B97: 4B 8D 0C 89     - lea rcx,[r9+r9*4]
game.dll+608B9B: 44 01 7C 90 04  - add [rax+rdx*4+04],r15d
game.dll+608BA0: BA 94 4C 74 92  - mov edx,92744C94
game.dll+608BA5: 48 8B 43 40     - mov rax,[rbx+40]
game.dll+608BA9: 4C 8D 04 C8     - lea r8,[rax+rcx*8]
game.dll+608BAD: 48 8B 43 30     - mov rax,[rbx+30]
game.dll+608BB1: 4A 8B 0C C8     - mov rcx,[rax+r9*8]
game.dll+608BB5: 8B 49 10        - mov ecx,[rcx+10]
game.dll+608BB8: E8 63 13 49 00  - call game.dll+A99F20
}

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

Re: HELLDIVERS 2

Post by nos4r2 »

Exemplify1524 wrote:
Sat May 18, 2024 1:38 am
Little fixed version of my version of ZoDDel's sample override script. In .304 they've added in RDX new digit. in .303 it was 0 for common_type 1 for rare 2 for super. in .304 path these values can be 0 20 or 60 for common 1 21 etc for rare and 2 21 etc for super. So divide by 10 solve problem 61%10 = 1.

Code: Select all

{ Game   : helldivers2.exe
  Version:
  Date   : 2024-04-30
  Author : ZoDDeL
  Mod by : Anton v5
  Tested on: .304 path

  If hold CHEAT_ALL_HOTKEY while taking sample it will override all 3 counters to specified (edit section)
  If take sample and dont hold CHEAT_ALL_HOTKEY you receive HOTKEY_NOT_PRESSED_ADD_VALUE of sample type you taken
  You can edit #define section values below
  For debugging purposes you can open DebugViewPP tool and take some samples. you will receive messages.
}
{$c}
  // YOU CAN EDIT SECTION START
  #define CHEAT_ALL_HOTKEY 'C'
  #define SECRET_HOTKEY 'Q'
  // Keep common + rare + super sum below or equal to 100. For example you can specify 50+40+10 = 100
  #define HOTKEY_PRESSED_COMMON_SAMPLE_COUNT_REDEFINE 45
  #define HOTKEY_PRESSED_RARE_SAMPLE_COUNT_REDEFINE 30
  #define HOTKEY_PRESSED_SUPER_SAMPLE_COUNT_REDEFINE 10
  // if hotkey is not pressed and player take sample it will add specified value (game default is 1)
  #define HOTKEY_NOT_PRESSED_ADD_VALUE 10
  // YOU CAN EDIT SECTION END
  #define NO_OLDNAMES
  #include <windows.h>
  extern __cdecl int sprintf(char *, char *, ...);
  extern __cdecl void OutputDebugStringA(const char* lpOutputString);
  short GetAsyncKeyState(int);
  char debug_string[400];
  typedef struct {
    int common;
    int rare;
    int super;
  } Samples;


void show_bits_sprintf(int *rdx_value, char *buffer) {
  unsigned int mask = 0x80000000; // Маска для старшего бита
  int i;

  for (i = 0; i < 32; ++i) {
    // Проверяем, установлен ли бит
    if (*rdx_value & mask) {
      sprintf(buffer + i, "1");
    } else {
      sprintf(buffer + i, "0");
    }

    mask >>= 1; // Сдвигаем маску на один бит вправо
  }

  sprintf(buffer + 32, "\0"); // Добавляем завершающий нуль-символ
}
{$asm}

[ENABLE]
aobscanmodule(samples_inject,game.dll,48 8D 14 41 48 8B 43 40 4B 8D 0C 89 44 01 7C 90 04) // should be unique
alloc(samples_newmem,$2000)
label(samples_return)

samples_newmem:


  // original code start
  lea rdx,[rcx+rax*2]
  mov rax,[rbx+40]
  lea rcx,[r9+r9*4]
  // add [rax+rdx*4+04],r15d
  // original code end

  /*
  cmp rdx,0
  je samples_common
  cmp rdx,1
  je samples_rare
  cmp rdx,2
  je samples_super
samples_common: // when you pickup common
  mov [rax+rdx*4+04],#49 // common sample
  mov [rax+rdx*4+04+4],#30 // rare sample
  mov [rax+rdx*4+04+8],#20 // super sample
  jmp samples_return

samples_rare: // when you pickup rare
  mov [rax+rdx*4+04-4],#49 // common sample
  mov [rax+rdx*4+04],#30 // rare sample
  mov [rax+rdx*4+04+4],#20 // super sample
  jmp samples_return

samples_super: // when you pickup super
  mov [rax+rdx*4+04-8],#49 // common sample
  mov [rax+rdx*4+04-4],#30 // rare sample
  mov [rax+rdx*4+04],#20 // super sample
  jmp samples_return
  */
{$ccode base1=rax rdx=rdx}
  // calculate base_address of samples structure
  // rdx 0 = base+4
  // rdx 1 = base+4+4-4 = base+4
  // rdx 2 = base+8+4-8 = base+4
  // Samples* samples = (Samples*)(base1 + sample_type*4 + 4 - sample_type*4 );
  short sample_type = rdx % 10; // for common samples can be 0 20 or 60 (zero at the end). Rare 1 or 21.  Super 2 or 22
  short sample_unk = (int)(rdx / 10);
  int *picked_up_sample_counter = (int*)(base1 + rdx*4 + 4);
  //Samples* samples = (Samples*)(base1 + 4);
  Samples* samples = (Samples*)(base1 + rdx*4 + 4 - sample_type*4);

  int samples_count_now = samples->common + samples->rare + samples->super;

  sprintf(debug_string, "Samples: Taken type: %d | counts %d + %d + %d = %d. Unknown value is %d", sample_type, samples->common, samples->rare, samples->super, samples_count_now, sample_unk);
  OutputDebugStringA(debug_string);
  /*
  OutputDebugStringA("Samples: sample_type RDX  bits:");
  show_bits_sprintf(&sample_type, &debug_string);
  OutputDebugStringA(debug_string);
  */
  /*
  OutputDebugStringA("Samples: sample amount r15d bits:");
  show_bits_sprintf(&taken_sample_amount_r15d, &debug_string);
  OutputDebugStringA(debug_string);
  */

  // Already more than maxed out, restore max counts and exit
  if (samples_count_now > 100) {
    samples->common = HOTKEY_PRESSED_COMMON_SAMPLE_COUNT_REDEFINE;
    samples->rare = HOTKEY_PRESSED_RARE_SAMPLE_COUNT_REDEFINE;
    samples->super = HOTKEY_PRESSED_SUPER_SAMPLE_COUNT_REDEFINE;
    sprintf(debug_string, "Samples: count is >100. Restoring to maximum: %d %d %d", samples->common, samples->rare, samples->super);
    OutputDebugStringA(debug_string);
    goto end_section;
  }

  // Max all if hotkey pressed
  if (GetAsyncKeyState(CHEAT_ALL_HOTKEY) & 0x8000) {
    samples->common = HOTKEY_PRESSED_COMMON_SAMPLE_COUNT_REDEFINE;
    samples->rare = HOTKEY_PRESSED_RARE_SAMPLE_COUNT_REDEFINE;
    samples->super = HOTKEY_PRESSED_SUPER_SAMPLE_COUNT_REDEFINE;
    sprintf(debug_string, "Samples: hotkey pressed. Sample counts just set to maximum: %d %d %d", samples->common, samples->rare, samples->super);
    OutputDebugStringA(debug_string);
    goto end_section;
  }

  int value_to_add = 1;
  if (GetAsyncKeyState(SECRET_HOTKEY) & 0x8000) {
    sprintf(debug_string, "Samples: secret hotkey pressed. Samples piclup will be default(1)");
    OutputDebugStringA(debug_string);
  } else {
    value_to_add = HOTKEY_NOT_PRESSED_ADD_VALUE;
    int add_limit = 100 - samples_count_now;
    if (add_limit == 0) {
      sprintf(debug_string, "Samples: limit reached %d. No additional samples will be added", add_limit);
      OutputDebugStringA(debug_string);
    } else if (add_limit < 0) {
      samples->common = 50;
      samples->rare = 40;
      samples->super = 10;
      sprintf(debug_string, "Samples: count is more than allowed: %d. No additional samples will be added. Sample counts are set to maximum: %d %d %d", samples_count_now, samples->common, samples->rare, samples->super);
      OutputDebugStringA(debug_string);
    } else if (value_to_add > add_limit) {
      value_to_add = add_limit;
      sprintf(debug_string, "Samples: too much samples already collected. Add value is clamped to %d/%d", value_to_add, HOTKEY_NOT_PRESSED_ADD_VALUE);
      OutputDebugStringA(debug_string);
    } else {
      sprintf(debug_string, "Samples: will add %d of type %d", value_to_add, sample_type);
      OutputDebugStringA(debug_string);
    }
  }

  *picked_up_sample_counter += value_to_add;
  /*
  if (sample_type == 0) {
     samples->common += value_to_add;
  }
  if (sample_type == 1) {
     samples->rare += value_to_add;
  }
  if (sample_type == 2) {
     samples->super += value_to_add;
  }
  */

  /*
  samples->common += value_to_add+1;
  samples->rare += value_to_add+2;
  samples->super += value_to_add+3;
  */
  /*
  // hardcoded limit guard
  samples_count_now = samples->common + samples->rare + samples->super;
  if (samples_count_now > 100) {
    samples->common = 50;
    samples->rare = 40;
    samples->super = 10;
    sprintf(debug_string, "Samples: Hardcoded guard. Samples SUM is >100: %d. Sample counts are reset to maximum allowed: %d %d %d", samples_count_now, samples->common, samples->rare, samples->super);
    OutputDebugStringA(debug_string);
  }
  */

/*
  // output debug. you can look in DebugViewPP tool https://github.com/CobaltFusion/DebugViewPP
  sprintf(debug_string, "Samples out: common %d | rare %d | super %d", samples->common, samples->rare, samples->super);
  OutputDebugStringA(debug_string);
*/
end_section:
{$asm}
jmp samples_return

samples_inject:
jmp far samples_newmem
nop 3

samples_return:
registersymbol(samples_inject)

[DISABLE]

samples_inject:
  db 48 8D 14 41 48 8B 43 40 4B 8D 0C 89 44 01 7C 90 04

unregistersymbol(samples_inject)
dealloc(samples_newmem)

{
// ORIGINAL CODE - INJECTION POINT: game.dll+608B8F

game.dll+608B68: 41 FF C0        - inc r8d
game.dll+608B6B: 45 3B C1        - cmp r8d,r9d
game.dll+608B6E: 72 E0           - jb game.dll+608B50
game.dll+608B70: B8 FF FF FF FF  - mov eax,FFFFFFFF
game.dll+608B75: 48 8B 74 24 48  - mov rsi,[rsp+48]
game.dll+608B7A: 48 8B 6C 24 40  - mov rbp,[rsp+40]
game.dll+608B7F: 48 8B 7C 24 50  - mov rdi,[rsp+50]
game.dll+608B84: 44 8B C8        - mov r9d,eax
game.dll+608B87: 41 8D 4E FF     - lea ecx,[r14-01]
game.dll+608B8B: 4B 8D 04 89     - lea rax,[r9+r9*4]
// ---------- INJECTING HERE ----------
game.dll+608B8F: 48 8D 14 41     - lea rdx,[rcx+rax*2]
// ---------- DONE INJECTING  ----------
game.dll+608B93: 48 8B 43 40     - mov rax,[rbx+40]
game.dll+608B97: 4B 8D 0C 89     - lea rcx,[r9+r9*4]
game.dll+608B9B: 44 01 7C 90 04  - add [rax+rdx*4+04],r15d
game.dll+608BA0: BA 94 4C 74 92  - mov edx,92744C94
game.dll+608BA5: 48 8B 43 40     - mov rax,[rbx+40]
game.dll+608BA9: 4C 8D 04 C8     - lea r8,[rax+rcx*8]
game.dll+608BAD: 48 8B 43 30     - mov rax,[rbx+30]
game.dll+608BB1: 4A 8B 0C C8     - mov rcx,[rax+r9*8]
game.dll+608BB5: 8B 49 10        - mov ecx,[rcx+10]
game.dll+608BB8: E8 63 13 49 00  - call game.dll+A99F20
}
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 )

User avatar
gir489
RCE Fanatics
RCE Fanatics
Posts: 779
Joined: Mon May 08, 2017 4:08 am
Reputation: 600

Re: HELLDIVERS 2

Post by gir489 »

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

added weapon ID's
// AX/LAS-5 "Guard Dog" Rover
One of the things I noticed with making the Guard Dog a jmp_Super is that if a teammate hits you with it, you die instantly. Kinda sucks.

I updated my table to use the damage stats for a hellbomb as the stats for all jmp_Super weapons. Maybe that will fix things like the illegal broadcast tower not exploding properly?

Passer556
Novice Cheater
Novice Cheater
Posts: 17
Joined: Mon May 22, 2017 12:16 pm
Reputation: 8

Re: HELLDIVERS 2

Post by Passer556 »

gir489 wrote:
Sat May 18, 2024 3:00 am
Maybe that will fix things like the illegal broadcast tower not exploding properly?
If you mean broadcast towers (and other structures, like Fabber) evaporating when shot at instead of doing the sequential "blowing up" animation, try lowering the demo value of whatever weapon you are Supering to 40 (the same as a normal Eagle Airstrike).
Maybe 50 (Orbital Strike direct impact and 500kg) can also work, but when I set nades to demo 50, Fabber will first disappear, THEN the blowing up explosion would play.

DarkestLite
Novice Cheater
Novice Cheater
Posts: 17
Joined: Tue Mar 26, 2024 3:24 pm
Reputation: 0

Re: HELLDIVERS 2

Post by DarkestLite »

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



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.
Hmm, I usually just copy and paste which ones I needed into a different section of the CT. Then I could activate those with a single click. Im not understanding this new layout. Maybe Im missing something??

Edit* nevermind, I figured out where everything is.

User avatar
gir489
RCE Fanatics
RCE Fanatics
Posts: 779
Joined: Mon May 08, 2017 4:08 am
Reputation: 600

Re: HELLDIVERS 2

Post by gir489 »

Passer556 wrote:
Sat May 18, 2024 3:52 am
gir489 wrote:
Sat May 18, 2024 3:00 am
Maybe that will fix things like the illegal broadcast tower not exploding properly?
If you mean broadcast towers (and other structures, like Fabber) evaporating when shot at instead of doing the sequential "blowing up" animation, try lowering the demo value of whatever weapon you are Supering to 40 (the same as a normal Eagle Airstrike).
Maybe 50 (Orbital Strike direct impact and 500kg) can also work, but when I set nades to demo 50, Fabber will first disappear, THEN the blowing up explosion would play.
Thanks, that worked.

NeroX327
What is cheating?
What is cheating?
Posts: 4
Joined: Fri Aug 20, 2021 7:14 am
Reputation: 0

Re: HELLDIVERS 2

Post by NeroX327 »

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.
Hi! Thanks for the table. Can I ask you some questions about getting your table from FR to work please?
I think I followed your guide on FR well, despite it is missing some pictures now. But every time I try to use your CT uploaded on may 17th, after clicking on game.dll and this program c when they have an address. I get this error:
<<Error while scanning for AOB's: loaded Error: Not all results found>>
And I cannot check the start me box or see any other scrips.
Anyways, if your are unwilling/ unable to help, it's ok. Still wanna say thanks for the ct, especially the sample script.

firedragon1x
Noobzor
Noobzor
Posts: 11
Joined: Sun Apr 21, 2024 10:51 am
Reputation: 1

Re: HELLDIVERS 2

Post by firedragon1x »

gir489 wrote:
Sat May 18, 2024 3:00 am
ZoDDeL wrote:
Fri May 17, 2024 3:56 pm
UPDATE:

added weapon ID's
// AX/LAS-5 "Guard Dog" Rover
One of the things I noticed with making the Guard Dog a jmp_Super is that if a teammate hits you with it, you die instantly. Kinda sucks.

I updated my table to use the damage stats for a hellbomb as the stats for all jmp_Super weapons. Maybe that will fix things like the illegal broadcast tower not exploding properly?
Does your latest damage script include the weapons from the latest warbond? I didn't see the SMG Pummeler, Plasma Purifier, or Verdict pistol in the damage script.

Edit: nvm I'm dumb. I was looking in Zoddel's table, yours does include it.

Post Reply

Who is online

Users browsing this forum: admantx, burrito222, Buttseckz, Google [Bot], michu101, Ninomae Tako'nis, sinnedomoyap, sombra