EDIT: Re-pasted the codes just in case they did not paste properly last time.
Regarding the "Invincible Player, Pets and Allies" option, I've finally gotten it updated.
I finally learned what that "rbx+a6c" was in the code's compare that was being used for determining friend from foe. Now I understand a lot more about the registers, other areas of assembly, CE and of how stuff in Grim Dawn works in general.
(For those unfamiliar, this code adds a complete cheat option - just copy the code and then paste it (CTRL+V) into your cheat table to add the option.)
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>136101</ID>
<Description>"Invincible (Player, Pets and Allies) (sets 'Invincible' flag to 1)"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>FFFFFF</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>//Grim Dawn 1.2.0.3 Updated
[ENABLE]
aobscanmodule(godFriendlies,Game.dll,66 0F 2F 7F 20)
alloc(newmem,$1000,godFriendlies)
label(code)
label(return)
newmem:
cmp [rdi+D94],0 //friend/foe
jne code
// mov byte ptr [rbx+00001D9C],1 //Flag: Invincible (pet health bars hidden even if they are enabled)
mov byte ptr [rbx+00001D9E],1 //Flag: Invincible (pet health bars visible if they are enabled)
// mov byte ptr [rbx+00001D9F],1 //Flag: Infinite Mana
jmp return
code:
comisd xmm7,[rdi+20]
jmp return
godFriendlies:
jmp newmem
return:
registersymbol(godFriendlies)
[DISABLE]
godFriendlies:
db 66 0F 2F 7F 20
unregistersymbol(godFriendlies)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::CharacterBio::Update+242
Game.GAME::CharacterBio::Update+20D: E8 CE D2 01 00 - call Game.GAME::CharAttributeAccumulator::GetValue
Game.GAME::CharacterBio::Update+212: F3 0F 11 87 74 07 00 00 - movss [rdi+00000774],xmm0
Game.GAME::CharacterBio::Update+21A: 40 B5 01 - mov bpl,01
Game.GAME::CharacterBio::Update+21D: 80 BF A8 07 00 00 00 - cmp byte ptr [rdi+000007A8],00
Game.GAME::CharacterBio::Update+224: 0F 84 EB 02 00 00 - je Game.GAME::CharacterBio::Update+515
Game.GAME::CharacterBio::Update+22A: 80 BF A9 07 00 00 00 - cmp byte ptr [rdi+000007A9],00
Game.GAME::CharacterBio::Update+231: 0F 85 DE 02 00 00 - jne Game.GAME::CharacterBio::Update+515
Game.GAME::CharacterBio::Update+237: 85 F6 - test esi,esi
Game.GAME::CharacterBio::Update+239: 0F 8E 2C 03 00 00 - jng Game.GAME::CharacterBio::Update+56B
Game.GAME::CharacterBio::Update+23F: 0F 57 FF - xorps xmm7,xmm7
// ---------- INJECTING HERE ----------
Game.GAME::CharacterBio::Update+242: 66 0F 2F 7F 20 - comisd xmm7,[rdi+20]
// ---------- DONE INJECTING ----------
Game.GAME::CharacterBio::Update+247: 0F 83 1E 03 00 00 - jae Game.GAME::CharacterBio::Update+56B
Game.GAME::CharacterBio::Update+24D: 80 7F 34 00 - cmp byte ptr [rdi+34],00
Game.GAME::CharacterBio::Update+251: 45 0F 57 C0 - xorps xmm8,xmm8
Game.GAME::CharacterBio::Update+255: 44 0F 29 5C 24 30 - movaps [rsp+30],xmm11
Game.GAME::CharacterBio::Update+25B: 41 0F 28 F0 - movaps xmm6,xmm8
Game.GAME::CharacterBio::Update+25F: 66 44 0F 6E DE - movd xmm11,esi
Game.GAME::CharacterBio::Update+264: 45 0F 5B DB - cvtdq2ps xmm11,xmm11
Game.GAME::CharacterBio::Update+268: 41 0F 28 C3 - movaps xmm0,xmm11
Game.GAME::CharacterBio::Update+26C: F3 0F 59 05 D0 09 5C 00 - mulss xmm0,[Game.GAME::WeaponArmor_Offhand::`vftable'+EBC]
Game.GAME::CharacterBio::Update+274: 44 0F 5A D0 - cvtps2pd xmm10,xmm0
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>136114</ID>
<Description>"!!! Disabling option does not turn off the flags !!!"</Description>
<Color>0000FF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136119</ID>
<Description>">>> NOTES: Code options"</Description>
<Options moHideChildren="1" moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136113</ID>
<Description>"Only 'Invincible' flag set to 1 by default"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136122</ID>
<Description>"'Invincible' flag has health bars visible if they are enabled"</Description>
<Color>C0C0C0</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>136121</ID>
<Description>"Can enable 'Infinite Mana' line in code"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136120</ID>
<Description>"Can enable 'Combo Invincible + Infinite Mana' line in code"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136123</ID>
<Description>"> 'Combo' flag hides health bars even if they are enabled"</Description>
<Color>C0C0C0</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
The way they had made the option isn't the greatest (disabling the option doesn't turn off the invincible flag on pets/allies, but you can turn it off on you in the player info pointers section), so please read the notes I included about how the option works.
_____
I also applied what I learned from fixing that option to also fixing the "Set all enemies to 1 HP" option:
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>269</ID>
<Description>"Set all enemies to 1 HP"</Description>
<Color>FFFFFF</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>//Grim Dawn 1.2.0.3 Updated
[ENABLE]
aobscanmodule(KILLEMALL,Game.dll,C3 F2 0F 10 89 D0 0D 00 00)
alloc(newmem,$1000,KILLEMALL)
label(code)
label(return)
newmem:
cmp [rcx+00001B44],0 //friend/foe
je code
cmp [rcx+00001B44],#14
je code
cmp [rcx+00001B44],#1
je code
mov [rcx+00000DD0],0
mov [rcx+00000DD4],(float)1.875 //collectively = (double)1
code:
movsd xmm1,[rcx+00000DD0]
jmp return
KILLEMALL+01:
jmp newmem
nop 3
return:
registersymbol(KILLEMALL)
[DISABLE]
KILLEMALL+01:
db F2 0F 10 89 D0 0D 00 00
unregistersymbol(KILLEMALL)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Character::GetCurrentLifeInt
Game.GAME::Character::GetManaLimit+1A - CC - int 3
Game.GAME::Character::GetManaLimit+1B - CC - int 3
Game.GAME::Character::GetManaLimit+1C - CC - int 3
Game.GAME::Character::GetManaLimit+1D - CC - int 3
Game.GAME::Character::GetManaLimit+1E - CC - int 3
Game.GAME::Character::GetManaLimit+1F - CC - int 3
Game.GAME::Character::GetCurrentLife - F2 0F10 81 D00D0000 - movsd xmm0,[rcx+00000DD0]
Game.GAME::Character::GetCurrentLife+8- 0F57 C9 - xorps xmm1,xmm1
Game.GAME::Character::GetCurrentLife+B- F2 0F5F C1 - maxsd xmm0,xmm1
Game.GAME::Character::GetCurrentLife+F- C3 - ret
// ---------- INJECTING HERE ----------
Game.GAME::Character::GetCurrentLifeInt- F2 0F10 89 D00D0000 - movsd xmm1,[rcx+00000DD0]
// ---------- DONE INJECTING ----------
Game.GAME::Character::GetCurrentLifeInt+8- 0F57 C0 - xorps xmm0,xmm0
Game.GAME::Character::GetCurrentLifeInt+B- F2 0F5F C8 - maxsd xmm1,xmm0
Game.GAME::Character::GetCurrentLifeInt+F- 66 0F5A D1 - cvtpd2ps xmm2,xmm1
Game.GAME::Character::GetCurrentLifeInt+13- 0F2F 15 02DF5D00 - comiss xmm2,[Game.GAME::WeaponArmor_Offhand::`vftable'+F64]
Game.GAME::Character::GetCurrentLifeInt+1A- 76 06 - jna Game.GAME::Character::GetCurrentLifeInt+22
Game.GAME::Character::GetCurrentLifeInt+1C- F3 48 0F2C C2 - cvttss2si rax,xmm2
Game.GAME::Character::GetCurrentLifeInt+21- C3 - ret
Game.GAME::Character::GetCurrentLifeInt+22- 33 C0 - xor eax,eax
Game.GAME::Character::GetCurrentLifeInt+24- 0F2F D0 - comiss xmm2,xmm0
Game.GAME::Character::GetCurrentLifeInt+27- 0F97 C0 - seta al
}
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatTable>
_____
Now that I have a good grasp on finding friend from foe, I'll revisit my Freeze Buff Timers option to get rid of the duration limit that is needed to avoid applying to enemies also. I need to rework that option anyway due to the changes to buffs in the 1.2 update.
There are primary skill buffs that get frozen, but there are also secondary skill effects that are not, which I've had to make an option to also freeze those. But debuffs also get frozen on that option if the duration timer is set too low. Then there are buffs given by item skills that also need another option to freeze those.
I've been working on those, but now I can do them properly without needing to worry about enemies also getting affected by the options.
I can also look at the "Monsters Can't move" option to try to get it to not affect your pets too so that it only affects enemy monsters.
_____
This is what I am currently using for my assembled table of options for 1.2.0.3 x64.
It is a combination of many options originally made, updated, altered and/or expanded on by fantomas, Marcus101RR, Artykalamata, all_my_sins, me and likely a few others (many options have been included in many tables over the years, sometimes with altered names, and some options did not have the name of the creator in the scripts, so it is hard to figure out who originally made many options).
Are there any options not in this that are not yet updated and which others would like to see updated?
Are there any options in this that others do not have and want me to post?
Are there options I don't have in this that others feel really are useful and should be included?
_____
EDIT - Another question:
Does enabling the Max Pets Set To 20 and spawning 20 pets cause a game freeze and crash after a few battles for anyone else?
I think it is just my slow computer that can't handle that much action and effects on-screen. I lowered the option down to just 9 or 12 max for me to see if the problem continues.