Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>136156</ID>
<Description>"Freeze Buff Timers"</Description>
<Options moActivateChildrenAsWell="1" moDeactivateChildrenAsWell="1" moAllowManualCollapseAndExpand="1"/>
<Color>FFFFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136128</ID>
<Description>"Skill Primary & Potions"</Description>
<Options moAllowManualCollapseAndExpand="1"/>
<Color>FFFFFF</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>//Grim Dawn 1.2.0.3 Re-wrote
[ENABLE]
//Game.GAME::Skill_BuffSelfDuration::Update+4B
aobscanregion(buffTimeFreeze1,Game.GAME::Skill_BuffSelfDuration::Update,Game.GAME::Skill_BuffSelfDuration::Update+9F,29)
alloc(newmem,$1000,buffTimeFreeze1)
label(code)
label(return)
newmem:
//CHECK - PLAYER/FOE
cmp [rsi+00001B44],0 // checks if it is the player (0) or an enemy (2)
jne code // if not the player, jump to code
//CHECK - BLADE BARRIER (NIGHTBLADE SKILL)
cmp [rbx+00000018],#46 // checks if it is the Blade Barrier skill on the player
je code // if Blade Barrier, jump to code for time subtraction
// Change jump based on offset/value used
// je=jump if equal to #, jne=if not equal, jg=if greater, jl=if lower
//
// alternate Blade Barrier check offsets
// rbx+18 blade=#46 other=not #46 (tests are consistent) <<< using this one
// rbx+98 blade=#23 other=#22 (tests are consistent)
// rbx+A8 blade=#1 other=#2 (tests are consistent)
// rbx+BC blade=#1 other=not #1 (tests are consistent)
// rbx+C8 blade=#1 other=#12 (tests are consistent)
// rbx+1E8 blade=0 other=not 0 (tests are consistent)
// rbx+55C blade=#100 other=not #100 (tests are consistent)
//CHECK - ANGUISH BELT DEBUFF
cmp [rbx+000001C0],0 // checks if it is the Anguish debuff or a real buff on the player
je code // if Anguish debuff, jump to code for time subtraction
//
// alternate Anguish debuff check offsets
// rbx+1C0 anguish=0 buff=not 0 (tests are consistent) <<< using this one
// rbx+64C anguish=0 buff=not 0 (tests are consistent)
// rbx+658 anguish=#1 buff=0 (tests are consistent) (2nd choice)
// rbx+750 anguish=0 buff=not 0 (tests are consistent)
// rbx+868 anguish=#23 buff=0 (tests are consistent)
// rbx+870 anguish=#31 buff=#15 (tests are consistent)
// rbx+87C anguish=not 0 buff=0 (tests are consistent)
//OPTIONAL CHECK - Disable Burrwitch Brew drunk potion buff (disable the next two lines for this buff to get frozen also)
cmp [rbx+000001D0],0 // checks if it is the Burrwitch Brew drunk buff or a real buff on the player
jne code // if Burrwitch Brew drunk potion buff, jump to code for time subtraction
//
// alternate Burrwitch Brew buff check offsets
// rbx+1D0 Brew=not 0 buff=0 (tests are consistent) <<< using this one
// rbx+2C0 Brew=#256 buff=0 (tests are consistent)
//OPTIONAL: Time Remaining Check (enable the next two lines to activate)
// cmp [rbx+0000053C],#5100 // check if time remaining is under 5100ms (or your custom value in milliseconds)
// jl code // if lower, jump to code for time subtraction
//
sub [rbx+0000053C],0 // if a real buff, subtract nothing from timer
jmp return
code:
sub [rbx+0000053C],edi // subtract time from buff normally
jmp return
buffTimeFreeze1:
jmp newmem
nop
return:
registersymbol(buffTimeFreeze1)
[DISABLE]
buffTimeFreeze1:
db 29 BB 3C 05 00 00
unregistersymbol(buffTimeFreeze1)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Skill_BuffSelfDuration::Update+4B
Game.GAME::Skill_BuffSelfDuration::Update+24 - 75 0E - jne Game.GAME::Skill_BuffSelfDuration::Update+34
Game.GAME::Skill_BuffSelfDuration::Update+26 - 48 8B 0D FB324D00 - mov rcx,[Game.GAME::gGameEngine]
Game.GAME::Skill_BuffSelfDuration::Update+2D - 48 81 C1 785A0300 - add rcx,00035A78
Game.GAME::Skill_BuffSelfDuration::Update+34 - 48 8B 01 - mov rax,[rcx]
Game.GAME::Skill_BuffSelfDuration::Update+37 - FF 50 08 - call qword ptr [rax+08]
Game.GAME::Skill_BuffSelfDuration::Update+3A - 48 8B C8 - mov rcx,rax
Game.GAME::Skill_BuffSelfDuration::Update+3D - 48 85 C0 - test rax,rax
Game.GAME::Skill_BuffSelfDuration::Update+40 - 74 47 - je Game.GAME::Skill_BuffSelfDuration::Update+89
Game.GAME::Skill_BuffSelfDuration::Update+42 - 80 BB 38050000 00 - cmp byte ptr [rbx+00000538],00
Game.GAME::Skill_BuffSelfDuration::Update+49 - 74 3E - je Game.GAME::Skill_BuffSelfDuration::Update+89
// ---------- INJECTING HERE ----------
Game.GAME::Skill_BuffSelfDuration::Update+4B - 29 BB 3C050000 - sub [rbx+0000053C],edi
// ---------- DONE INJECTING ----------
Game.GAME::Skill_BuffSelfDuration::Update+51 - 83 BB 3C050000 00 - cmp dword ptr [rbx+0000053C],00
Game.GAME::Skill_BuffSelfDuration::Update+58 - 7F 2F - jg Game.GAME::Skill_BuffSelfDuration::Update+89
Game.GAME::Skill_BuffSelfDuration::Update+5A - C6 83 38050000 00 - mov byte ptr [rbx+00000538],00
Game.GAME::Skill_BuffSelfDuration::Update+61 - 4C 8D 44 24 30 - lea r8,[rsp+30]
Game.GAME::Skill_BuffSelfDuration::Update+66 - 48 8B 00 - mov rax,[rax]
Game.GAME::Skill_BuffSelfDuration::Update+69 - 48 8B D3 - mov rdx,rbx
Game.GAME::Skill_BuffSelfDuration::Update+6C - C7 44 24 30 00000000 - mov [rsp+30],00000000
Game.GAME::Skill_BuffSelfDuration::Update+74 - 66 C7 44 24 34 0000 - mov word ptr [rsp+34],0000
Game.GAME::Skill_BuffSelfDuration::Update+7B - FF 50 30 - call qword ptr [rax+30]
Game.GAME::Skill_BuffSelfDuration::Update+7E - 48 8B D6 - mov rdx,rsi
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>136133</ID>
<Description>">>> NOTES"</Description>
<Options moHideChildren="1" moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136140</ID>
<Description>"Example Buffs Affected"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136268</ID>
<Description>"> Bloodfang Oil (Potion) (def: 30s)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136141</ID>
<Description>"> Pneumatic Burst (Nightblade) (def: 60s)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136145</ID>
<Description>"> Mirror of Ereoctes (Arcanist) (def: 3s) "</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>136302</ID>
<Description>"Buff/Skill Exclusions (Default: Excluded)"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136405</ID>
<Description>"> "Blade Barrier" (Nightblade skill)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136524</ID>
<Description>"> "Anguish" non-buff (Chains of Anguish - belt)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136301</ID>
<Description>"> "Burrwitch Brew" (alcoholic potion)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>136266</ID>
<Description>"Examine Code For Options"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136303</ID>
<Description>"Freeze only if minimum time remaining (Default: Disabled)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>136132</ID>
<Description>"Skill Secondary"</Description>
<Options moAllowManualCollapseAndExpand="1"/>
<Color>FFFFFF</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
aobscanregion(buffTimeFreeze2,Game.GAME::SkillBuff::Update,Game.GAME::SkillBuff::Update+DF,0F84)
alloc(newmem,$2048,buffTimeFreeze2)
label(foecheck)
label(code)
label(return)
newmem:
jne foecheck // if time on buff remaining is above 0, redirects to my code instead of moving on to subtracting time
foecheck:
//PLAYER/FOE CHECK
cmp [rsi+00001B44],0 // checks if it is the player (0) or an enemy (2)
jne code // if not the player, jump to code
//BUFF/DEBUFF CHECK
cmp [rbx+000002C0],1 // checks if it is a buff (257) or a debuff (1) on the player
je code // if a debuff, jump to code for time subtraction
jmp Game.GAME::SkillBuff::Update+CD // if not a buff, jump past the subtraction of time
//
// alternate buff/debuff check offsets
// rbx+20 buff=63 debuff=79 or 95
// rbx+98 buff=20 debuff=18 or 23
// rbx+BC buff=0 debuff=1 or 3
// rbx+C8 buff=13 debuff=19 or 20
// rbx+D8 buff=13 debuff=20,19
// rbx+2C0 buff=257 debuff=1 <<< using this one, tests are consistent
code:
cmp dword ptr [rbx+00000518],00 // run original check
je Game.GAME::SkillBuff::Update+CD // if no time remains, jump past the subtraction of time, otherwise subtract time
jmp return
buffTimeFreeze2:
jmp newmem
nop
return:
registersymbol(buffTimeFreeze2)
[DISABLE]
buffTimeFreeze2:
db 0F 84 A1 00 00 00
unregistersymbol(buffTimeFreeze2)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::SkillBuff::Update+26
Game.GAME::SkillBuff::LoadResources+3E: CC - int 3
Game.GAME::SkillBuff::LoadResources+3F: CC - int 3
Game.GAME::SkillBuff::Update: 40 57 - push rdi
Game.GAME::SkillBuff::Update+2: 48 83 EC 50 - sub rsp,50
Game.GAME::SkillBuff::Update+6: 48 C7 44 24 20 FE FF FF FF - mov qword ptr [rsp+20],FFFFFFFFFFFFFFFE
Game.GAME::SkillBuff::Update+F: 48 89 5C 24 60 - mov [rsp+60],rbx
Game.GAME::SkillBuff::Update+14: 41 8B F8 - mov edi,r8d
Game.GAME::SkillBuff::Update+17: 48 8B D9 - mov rbx,rcx
Game.GAME::SkillBuff::Update+1A: E8 61 F5 F7 FF - call Game.GAME::Skill::Update
Game.GAME::SkillBuff::Update+1F: 83 BB 18 05 00 00 00 - cmp dword ptr [rbx+00000518],00
// ---------- INJECTING HERE ----------
Game.GAME::SkillBuff::Update+26: 0F 84 A1 00 00 00 - je Game.GAME::SkillBuff::Update+CD
// ---------- DONE INJECTING ----------
Game.GAME::SkillBuff::Update+2C: 29 BB 14 05 00 00 - sub [rbx+00000514],edi
Game.GAME::SkillBuff::Update+32: 0F 89 95 00 00 00 - jns Game.GAME::SkillBuff::Update+CD
Game.GAME::SkillBuff::Update+38: 48 8B 4B 30 - mov rcx,[rbx+30]
Game.GAME::SkillBuff::Update+3C: 48 85 C9 - test rcx,rcx
Game.GAME::SkillBuff::Update+3F: 75 0E - jne Game.GAME::SkillBuff::Update+4F
Game.GAME::SkillBuff::Update+41: 48 8B 0D F0 3F 4A 00 - mov rcx,[Game.GAME::gGameEngine]
Game.GAME::SkillBuff::Update+48: 48 81 C1 B8 5A 03 00 - add rcx,00035AB8
Game.GAME::SkillBuff::Update+4F: 48 8B 01 - mov rax,[rcx]
Game.GAME::SkillBuff::Update+52: FF 50 08 - call qword ptr [rax+08]
Game.GAME::SkillBuff::Update+55: 48 8B F8 - mov rdi,rax
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>136142</ID>
<Description>">>> NOTES"</Description>
<Options moHideChildren="1" moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136267</ID>
<Description>"Debuffs on the player excluded"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
<CheatEntry>
<ID>136269</ID>
<Description>"Example Buffs Affected"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136144</ID>
<Description>"> Lethal Assault (Nightblade > Amarasta's Blade Burst) (def: 8s)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>136304</ID>
<Description>"Skill Passive On Hit"</Description>
<Options moAllowManualCollapseAndExpand="1"/>
<Color>FFFFFF</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>//Grim Dawn 1.2.0.3
[ENABLE]
aobscanregion(buffTimeFreeze3,Game.GAME::Skill_PassiveOnHitBuffSelf::Update,Game.GAME::Skill_PassiveOnHitBuffSelf::Update+7F,2B)
alloc(newmem,$1000,buffTimeFreeze3)
label(code)
label(return)
newmem:
//PLAYER/FOE CHECK
cmp [rsi+00001B44],0 // checks if it is the player (0) or an enemy (2)
jne code // if not the player, jump to code
//
//BUFF CHECK - ANCESTRAL WARD (Invincibility)
cmp [rbx+C8],1 // checks if it is the Ancestral Ward buff on the player from the "Seal of Ancestry" component
je code // if Ancestral Ward buff, jump to code for time subtraction
//
// alternate Ancestral Ward buff check offsets
// rbx+C8 Ward=1 Others=12 (tests are consistent) <<< using this one
// rbx+2C0 Ward=257 Others=0 (tests are consistent)
// rbx+2C4 Ward=256 Others=0 (tests are consistent)
// rbx+508 Ward=not 0 Others=0 (tests are consistent, but likely unreliable longterm)
sub ecx,0
mov [rbx+00000504],ecx
jmp return
code:
sub ecx,edi
mov [rbx+00000504],ecx
jmp return
buffTimeFreeze3:
jmp newmem
nop 3
return:
registersymbol(buffTimeFreeze3)
[DISABLE]
buffTimeFreeze3:
db 2B CF 89 8B 04 05 00 00
unregistersymbol(buffTimeFreeze3)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Game.GAME::Skill_PassiveOnHitBuffSelf::Update+44
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+1E: 48 8B 0D 23 27 4C 00 - mov rcx,[Game.GAME::gGameEngine]
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+25: 48 81 C1 B8 5A 03 00 - add rcx,00035AB8
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+2C: 48 8B 01 - mov rax,[rcx]
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+2F: FF 50 08 - call qword ptr [rax+08]
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+32: 4C 8B C8 - mov r9,rax
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+35: 48 85 C0 - test rax,rax
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+38: 74 36 - je Game.GAME::Skill_PassiveOnHitBuffSelf::Update+70
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+3A: 8B 8B 04 05 00 00 - mov ecx,[rbx+00000504]
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+40: 85 C9 - test ecx,ecx
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+42: 7E 2C - jle Game.GAME::Skill_PassiveOnHitBuffSelf::Update+70
// ---------- INJECTING HERE ----------
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+44: 2B CF - sub ecx,edi
// ---------- DONE INJECTING ----------
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+46: 89 8B 04 05 00 00 - mov [rbx+00000504],ecx
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+4C: 85 C9 - test ecx,ecx
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+4E: 7F 20 - jg Game.GAME::Skill_PassiveOnHitBuffSelf::Update+70
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+50: 48 8B 00 - mov rax,[rax]
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+53: 4C 8D 44 24 30 - lea r8,[rsp+30]
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+58: 48 8B D3 - mov rdx,rbx
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+5B: C7 44 24 30 00 00 00 00 - mov [rsp+30],00000000
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+63: 49 8B C9 - mov rcx,r9
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+66: 66 C7 44 24 34 00 00 - mov word ptr [rsp+34],0000
Game.GAME::Skill_PassiveOnHitBuffSelf::Update+6D: FF 50 30 - call qword ptr [rax+30]
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>136305</ID>
<Description>">>> NOTES"</Description>
<Options moHideChildren="1" moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136306</ID>
<Description>"Example Buffs Affected"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136307</ID>
<Description>"> Deadly Aim (Inquisitor)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>136412</ID>
<Description>"Buff Exclusions (Default: Excluded)"</Description>
<Options moManualExpandCollapse="1" moAllowManualCollapseAndExpand="1"/>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
<CheatEntries>
<CheatEntry>
<ID>136416</ID>
<Description>"> "Ancestral Ward" (Invincibility) (Seal of Ancestry - component)"</Description>
<Color>80FFFF</Color>
<GroupHeader>1</GroupHeader>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>