Find below a few simple scripts that i made for the version 2.9.1 (indicated ingame on bottom righ in the main menu) of the game on steam.
Rules :
- You still need to have enough credits and materials to buy/craft/mod/forge the item, i didn't remove the required conditions.
- Always save and make a backup of your save before using any script/cheat.
- Try to activate theses scripts only when you need them, they may have undesired effect if kept active when doing something else (i personaly kept them enabled for a few hours while playing and i didn't had any issues but still, it's always a possibility.
- Theses scripts are made in the most easy/newbie way so they will probably not work on updated versions of the game, but they should be easy to update (by you) as i left the "auto assemble"/"auto aob" comments with the code around the injection point.
Buy for Free & Credits/Fate Editor
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>217889</ID>
<Description>"Buy for Free & Credits/Fate Editor"</Description>
<Options moHideChildren="1" moDeactivateChildrenAsWell="1"/>
<LastState/>
<Color>FFFF00</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : Warhammer.exe
Version:
Date : 2024-05-27
Author : acecel
This script does blah blah blah
}
[ENABLE]
//Cost in credits
aobscanmodule(aob_buy,Warhammer.exe,29 8B 78 06 00 00 49) // should be unique
alloc(newmem,$1000,aob_buy)
label(code)
label(code1)
label(return)
alloc(pCredits,$8)
registersymbol(pCredits)
alloc(bFree,$1)
registersymbol(bFree)
pCredits:
dd 0
bFree:
dd 1 // Change value here if you dont want for free by default
newmem:
push rcx
lea rcx,[rbx+00000678]
mov [pCredits],rcx
pop rcx
push rcx
mov rcx,[bFree]
cmp rcx,1 //Buy for Free ?
je code1
jmp code
code: // Buy
pop rcx
sub [rbx+00000678],ecx
jmp return
code1: // Buy for Free
pop rcx
// sub [rbx+00000678],ecx
jmp return
aob_buy:
jmp newmem
nop
return:
registersymbol(aob_buy)
//Cost in Fate
aobscanmodule(buy_cost_fate,Warhammer.exe,29 8B 7C 06 00 00) // should be unique
alloc(newmem2,$1000,buy_cost_fate)
label(code2)
label(return2)
newmem2:
code2:
//sub [rbx+0000067C],ecx
jmp return2
buy_cost_fate:
jmp newmem2
nop
return2:
registersymbol(buy_cost_fate)
[DISABLE]
aob_buy:
db 29 8B 78 06 00 00
unregistersymbol(pCredits)
unregistersymbol(bFree)
unregistersymbol(aob_buy)
dealloc(pCredits)
dealloc(bFree)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Warhammer.exe.text+31ED48
Warhammer.exe.text+31ED19: 89 54 24 30 - mov [rsp+30],edx
Warhammer.exe.text+31ED1D: 4C 63 C1 - movsxd r8,ecx
Warhammer.exe.text+31ED20: 4C 89 44 24 38 - mov [rsp+38],r8
Warhammer.exe.text+31ED25: 85 C9 - test ecx,ecx
Warhammer.exe.text+31ED27: 0F 8E 3F 02 00 00 - jng Warhammer.exe.text+31EF6C
Warhammer.exe.text+31ED2D: 44 8B E6 - mov r12d,esi
Warhammer.exe.text+31ED30: 48 89 74 24 40 - mov [rsp+40],rsi
Warhammer.exe.text+31ED35: 66 66 66 0F 1F 84 00 00 00 00 00 - nop word ptr [rax+rax+00000000]
Warhammer.exe.text+31ED40: 49 8B 47 08 - mov rax,[r15+08]
Warhammer.exe.text+31ED44: 41 8B 0C 04 - mov ecx,[r12+rax]
// ---------- INJECTING HERE ----------
Warhammer.exe.text+31ED48: 29 8B 78 06 00 00 - sub [rbx+00000678],ecx
// ---------- DONE INJECTING ----------
Warhammer.exe.text+31ED4E: 49 8B 47 08 - mov rax,[r15+08]
Warhammer.exe.text+31ED52: 42 8B 4C 20 04 - mov ecx,[rax+r12+04]
Warhammer.exe.text+31ED57: 29 8B 7C 06 00 00 - sub [rbx+0000067C],ecx
Warhammer.exe.text+31ED5D: 49 8B 47 08 - mov rax,[r15+08]
Warhammer.exe.text+31ED61: 42 83 7C 20 18 00 - cmp dword ptr [rax+r12+18],00
Warhammer.exe.text+31ED67: 0F 84 06 01 00 00 - je Warhammer.exe.text+31EE73
Warhammer.exe.text+31ED6D: 41 8B 74 04 08 - mov esi,[r12+rax+08]
Warhammer.exe.text+31ED72: F7 DE - neg esi
Warhammer.exe.text+31ED74: 48 63 C2 - movsxd rax,edx
Warhammer.exe.text+31ED77: 48 8D 14 40 - lea rdx,[rax+rax*2]
}
buy_cost_fate:
db 29 8B 7C 06 00 00
unregistersymbol(buy_cost_fate)
dealloc(newmem2)
{
// ORIGINAL CODE - INJECTION POINT: Warhammer.exe.text+31ED57
Warhammer.exe.text+31ED27: 0F 8E 3F 02 00 00 - jng Warhammer.exe.text+31EF6C
Warhammer.exe.text+31ED2D: 44 8B E6 - mov r12d,esi
Warhammer.exe.text+31ED30: 48 89 74 24 40 - mov [rsp+40],rsi
Warhammer.exe.text+31ED35: 66 66 66 0F 1F 84 00 00 00 00 00 - nop word ptr [rax+rax+00000000]
Warhammer.exe.text+31ED40: 49 8B 47 08 - mov rax,[r15+08]
Warhammer.exe.text+31ED44: 41 8B 0C 04 - mov ecx,[r12+rax]
aob_buy: E9 B3 02 C3 FF - jmp 7FF697EA0000
Warhammer.exe.text+31ED4D: 90 - nop
Warhammer.exe.text+31ED4E: 49 8B 47 08 - mov rax,[r15+08]
Warhammer.exe.text+31ED52: 42 8B 4C 20 04 - mov ecx,[rax+r12+04]
// ---------- INJECTING HERE ----------
Warhammer.exe.text+31ED57: 29 8B 7C 06 00 00 - sub [rbx+0000067C],ecx
// ---------- DONE INJECTING ----------
Warhammer.exe.text+31ED5D: 49 8B 47 08 - mov rax,[r15+08]
Warhammer.exe.text+31ED61: 42 83 7C 20 18 00 - cmp dword ptr [rax+r12+18],00
Warhammer.exe.text+31ED67: 0F 84 06 01 00 00 - je Warhammer.exe.text+31EE73
Warhammer.exe.text+31ED6D: 41 8B 74 04 08 - mov esi,[r12+rax+08]
Warhammer.exe.text+31ED72: F7 DE - neg esi
Warhammer.exe.text+31ED74: 48 63 C2 - movsxd rax,edx
Warhammer.exe.text+31ED77: 48 8D 14 40 - lea rdx,[rax+rax*2]
Warhammer.exe.text+31ED7B: 48 C1 E2 04 - shl rdx,04
Warhammer.exe.text+31ED7F: 48 83 C2 10 - add rdx,10
Warhammer.exe.text+31ED83: 49 03 57 08 - add rdx,[r15+08]
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>217895</ID>
<Description>"Buy for Free ?"</Description>
<DropDownList ReadOnly="1" DescriptionOnly="1" DisplayValueAsItem="1">0:No
1:Yes
</DropDownList>
<ShowAsSigned>0</ShowAsSigned>
<Color>FFC6FF</Color>
<VariableType>Byte</VariableType>
<Address>bFree</Address>
</CheatEntry>
<CheatEntry>
<ID>217896</ID>
<Description>"Credits"</Description>
<ShowAsSigned>0</ShowAsSigned>
<VariableType>4 Bytes</VariableType>
<Address>pCredits</Address>
<Offsets>
<Offset>0</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>217898</ID>
<Description>"Fate"</Description>
<ShowAsSigned>0</ShowAsSigned>
<VariableType>4 Bytes</VariableType>
<Address>pCredits</Address>
<Offsets>
<Offset>4</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
Craft Item for Free
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>217909</ID>
<Description>"Craft Item for Free"</Description>
<LastState/>
<Color>FFFF00</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : Warhammer.exe
Version:
Date : 2024-05-29
Author : acecel
This script does blah blah blah
}
[ENABLE]
aobscanmodule(aob_craft_mat_use,Warhammer.exe,44 01 30 EB 1E) // should be unique
alloc(newmem,$1000,aob_craft_mat_use)
label(code)
label(return)
newmem:
code:
// add [rax],r14d
jmp Warhammer.exe.text+2B28C5
jmp return
aob_craft_mat_use:
jmp newmem
return:
registersymbol(aob_craft_mat_use)
aobscanmodule(aob_craft_credit_use,Warhammer.exe,29 87 78 06 00 00) // should be unique
alloc(newmem2,$1000,aob_craft_credit_use)
label(code2)
label(return2)
newmem2:
code2:
//sub [rdi+00000678],eax
jmp return2
aob_craft_credit_use:
jmp newmem2
nop
return2:
registersymbol(aob_craft_credit_use)
[DISABLE]
aob_craft_mat_use:
db 44 01 30 EB 1E
unregistersymbol(aob_craft_mat_use)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Warhammer.exe.text+2B28A2
Warhammer.exe.text+2B2888: 48 3B C1 - cmp rax,rcx
Warhammer.exe.text+2B288B: 74 07 - je Warhammer.exe.text+2B2894
Warhammer.exe.text+2B288D: 8B 50 40 - mov edx,[rax+40]
Warhammer.exe.text+2B2890: 39 16 - cmp [rsi],edx
Warhammer.exe.text+2B2892: 73 03 - jae Warhammer.exe.text+2B2897
Warhammer.exe.text+2B2894: 48 8B C1 - mov rax,rcx
Warhammer.exe.text+2B2897: 48 3B C1 - cmp rax,rcx
Warhammer.exe.text+2B289A: 74 0B - je Warhammer.exe.text+2B28A7
Warhammer.exe.text+2B289C: 48 83 C0 48 - add rax,48
Warhammer.exe.text+2B28A0: 74 05 - je Warhammer.exe.text+2B28A7
// ---------- INJECTING HERE ----------
Warhammer.exe.text+2B28A2: 44 01 30 - add [rax],r14d
// ---------- DONE INJECTING ----------
Warhammer.exe.text+2B28A5: EB 1E - jmp Warhammer.exe.text+2B28C5
Warhammer.exe.text+2B28A7: 4C 8D 46 E0 - lea r8,[rsi-20]
Warhammer.exe.text+2B28AB: 48 8D 54 24 20 - lea rdx,[rsp+20]
Warhammer.exe.text+2B28B0: 48 8D 8F 10 0B 00 00 - lea rcx,[rdi+00000B10]
Warhammer.exe.text+2B28B7: E8 64 A5 FC FF - call Warhammer.exe.text+27CE20
Warhammer.exe.text+2B28BC: 48 8B 44 24 20 - mov rax,[rsp+20]
Warhammer.exe.text+2B28C1: 44 89 70 48 - mov [rax+48],r14d
Warhammer.exe.text+2B28C5: 48 83 C6 30 - add rsi,30
Warhammer.exe.text+2B28C9: 48 8D 46 E0 - lea rax,[rsi-20]
Warhammer.exe.text+2B28CD: 48 3B C3 - cmp rax,rbx
}
aob_craft_credit_use:
db 29 87 78 06 00 00
unregistersymbol(aob_craft_credit_use)
dealloc(newmem2)
{
// ORIGINAL CODE - INJECTION POINT: Warhammer.exe.text+2B2C57
Warhammer.exe.text+2B2C39: 0F 5B C0 - cvtdq2ps xmm0,xmm0
Warhammer.exe.text+2B2C3C: 0F 2E C1 - ucomiss xmm0,xmm1
Warhammer.exe.text+2B2C3F: 74 12 - je Warhammer.exe.text+2B2C53
Warhammer.exe.text+2B2C41: 0F 14 C9 - unpcklps xmm1,xmm1
Warhammer.exe.text+2B2C44: 0F 50 C1 - movmskps eax,xmm1
Warhammer.exe.text+2B2C47: 83 E0 01 - and eax,01
Warhammer.exe.text+2B2C4A: 2B C8 - sub ecx,eax
Warhammer.exe.text+2B2C4C: 66 0F 6E C9 - movd xmm1,ecx
Warhammer.exe.text+2B2C50: 0F 5B C9 - cvtdq2ps xmm1,xmm1
Warhammer.exe.text+2B2C53: F3 0F 2C C1 - cvttss2si eax,xmm1
// ---------- INJECTING HERE ----------
Warhammer.exe.text+2B2C57: 29 87 78 06 00 00 - sub [rdi+00000678],eax
// ---------- DONE INJECTING ----------
Warhammer.exe.text+2B2C5D: 48 8D 8D 00 02 00 00 - lea rcx,[rbp+00000200]
Warhammer.exe.text+2B2C64: E8 07 C7 49 00 - call Warhammer.exe.text+74F370
Warhammer.exe.text+2B2C69: 90 - nop
Warhammer.exe.text+2B2C6A: 48 8D 4C 24 20 - lea rcx,[rsp+20]
Warhammer.exe.text+2B2C6F: E8 9C 10 FA FF - call Warhammer.exe.text+253D10
Warhammer.exe.text+2B2C74: 90 - nop
Warhammer.exe.text+2B2C75: 48 8B D0 - mov rdx,rax
Warhammer.exe.text+2B2C78: 48 8D 8D 40 02 00 00 - lea rcx,[rbp+00000240]
Warhammer.exe.text+2B2C7F: E8 0C 0A BE 00 - call Warhammer.exe.text+E93690
Warhammer.exe.text+2B2C84: 90 - nop
}
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatTable>
Modify/Forge Item for Free
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>217915</ID>
<Description>"Modify/Forge Item for Free"</Description>
<LastState/>
<Color>FFFF00</Color>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : Warhammer.exe
Version:
Date : 2024-05-29
Author : acecel
This script does blah blah blah
}
[ENABLE]
aobscanmodule(aob_mod_mat_use,Warhammer.exe,01 30 E9 8E 00 00 00 48 8B C1 48 8B 49 08 48 8B D8 80 79 19 00 75 18) // should be unique
alloc(newmem,$1000,aob_mod_mat_use)
label(code)
label(return)
newmem:
code:
// add [rax],esi
jmp Warhammer.exe.text+2B4576
jmp return
aob_mod_mat_use:
jmp newmem
nop 2
return:
registersymbol(aob_mod_mat_use)
aobscanmodule(aob_mod_credit_use,Warhammer.exe,29 90 78 06 00 00 8B 73) // should be unique
alloc(newmem2,$1000,aob_mod_credit_use)
label(code2)
label(return2)
newmem2:
code2:
// sub [rax+00000678],edx
jmp return2
aob_mod_credit_use:
jmp newmem2
nop
return2:
registersymbol(aob_mod_credit_use)
[DISABLE]
aob_mod_mat_use:
db 01 30 E9 8E 00 00 00 48 8B C1 48 8B 49 08 48 8B D8 80 79 19 00 75 18
unregistersymbol(aob_mod_mat_use)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: Warhammer.exe.text+2B44E1
Warhammer.exe.text+2B44C6: 74 E8 - je Warhammer.exe.text+2B44B0
Warhammer.exe.text+2B44C8: 48 3B C1 - cmp rax,rcx
Warhammer.exe.text+2B44CB: 74 06 - je Warhammer.exe.text+2B44D3
Warhammer.exe.text+2B44CD: 44 3B 40 40 - cmp r8d,[rax+40]
Warhammer.exe.text+2B44D1: 73 03 - jae Warhammer.exe.text+2B44D6
Warhammer.exe.text+2B44D3: 48 8B C1 - mov rax,rcx
Warhammer.exe.text+2B44D6: 48 3B C1 - cmp rax,rcx
Warhammer.exe.text+2B44D9: 74 0D - je Warhammer.exe.text+2B44E8
Warhammer.exe.text+2B44DB: 48 83 C0 48 - add rax,48
Warhammer.exe.text+2B44DF: 74 07 - je Warhammer.exe.text+2B44E8
// ---------- INJECTING HERE ----------
Warhammer.exe.text+2B44E1: 01 30 - add [rax],esi
// ---------- DONE INJECTING ----------
Warhammer.exe.text+2B44E3: E9 8E 00 00 00 - jmp Warhammer.exe.text+2B4576
Warhammer.exe.text+2B44E8: 48 8B C1 - mov rax,rcx
Warhammer.exe.text+2B44EB: 48 8B 49 08 - mov rcx,[rcx+08]
Warhammer.exe.text+2B44EF: 48 8B D8 - mov rbx,rax
Warhammer.exe.text+2B44F2: 80 79 19 00 - cmp byte ptr [rcx+19],00
Warhammer.exe.text+2B44F6: 75 18 - jne Warhammer.exe.text+2B4510
Warhammer.exe.text+2B44F8: 44 39 41 40 - cmp [rcx+40],r8d
Warhammer.exe.text+2B44FC: 73 06 - jae Warhammer.exe.text+2B4504
Warhammer.exe.text+2B44FE: 48 8B 49 10 - mov rcx,[rcx+10]
Warhammer.exe.text+2B4502: EB 06 - jmp Warhammer.exe.text+2B450A
}
aob_mod_credit_use:
db 29 90 78 06 00 00
unregistersymbol(aob_mod_credit_use)
dealloc(newmem2)
{
// ORIGINAL CODE - INJECTION POINT: Warhammer.exe.text+2B447A
Warhammer.exe.text+2B4455: 55 - push rbp
Warhammer.exe.text+2B4456: 56 - push rsi
Warhammer.exe.text+2B4457: 57 - push rdi
Warhammer.exe.text+2B4458: 48 83 EC 60 - sub rsp,60
Warhammer.exe.text+2B445C: 48 C7 44 24 30 FE FF FF FF - mov qword ptr [rsp+30],FFFFFFFFFFFFFFFE
Warhammer.exe.text+2B4465: 48 89 9C 24 98 00 00 00 - mov [rsp+00000098],rbx
Warhammer.exe.text+2B446D: 48 8B D9 - mov rbx,rcx
Warhammer.exe.text+2B4470: E8 9B 4C 33 00 - call Warhammer.exe.text+5E9110
Warhammer.exe.text+2B4475: 48 8B F8 - mov rdi,rax
Warhammer.exe.text+2B4478: 8B 13 - mov edx,[rbx]
// ---------- INJECTING HERE ----------
Warhammer.exe.text+2B447A: 29 90 78 06 00 00 - sub [rax+00000678],edx
// ---------- DONE INJECTING ----------
Warhammer.exe.text+2B4480: 8B 73 04 - mov esi,[rbx+04]
Warhammer.exe.text+2B4483: F7 DE - neg esi
Warhammer.exe.text+2B4485: 48 8D 6B 08 - lea rbp,[rbx+08]
Warhammer.exe.text+2B4489: 48 8B D5 - mov rdx,rbp
Warhammer.exe.text+2B448C: 48 8D 4C 24 38 - lea rcx,[rsp+38]
Warhammer.exe.text+2B4491: E8 BA 54 BE 00 - call Warhammer.exe.text+E99950
Warhammer.exe.text+2B4496: 90 - nop
Warhammer.exe.text+2B4497: 48 8B 8F 10 0B 00 00 - mov rcx,[rdi+00000B10]
Warhammer.exe.text+2B449E: 48 8B 51 08 - mov rdx,[rcx+08]
Warhammer.exe.text+2B44A2: 48 8B C1 - mov rax,rcx
}
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatTable>