honestly i have no idea what those numbers are and they dont match up with anything i have. Weapon, items, and armor all used pointers so i would assume bloodcodes are the same. I'm working on a minor tutorial via the console dumper on how to swap items. Not sure about adding new ones though
edit: Here is the code that will let you change your character that you already have started.
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>1215</ID>
<Description>"Bypass Customziation Reset"</Description>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>[ENABLE]
aobscanmodule(CustBypassAOB,CodeVein-Win64-Shipping.exe,41 0F B6 D6 48 89 F1 E8 88) // should be unique
alloc(newmem,$1000,"CodeVein-Win64-Shipping.exe"+5F7FE2C)
label(code)
label(return)
newmem:
code:
movzx edx,r14l
mov rcx,rsi
jmp return
CustBypassAOB:
jmp newmem
nop
nop
CustBypassAOB+c:
return:
registersymbol(CustBypassAOB)
[DISABLE]
CustBypassAOB:
db 41 0F B6 D6 48 89 F1
unregistersymbol(CustBypassAOB)
dealloc(newmem)
</AssemblerScript>
</CheatEntry>
</CheatEntries>
</CheatTable>
What this code does is it disabled your character being reset after previewing a customization. So basically you start a new game, make the character you want, save the customization, back out, load your main save, enable the code, go to the customization, highlight it, and then back out. You will notice that your character didnt revert back. Then you can just exit the customization screen and your character will be saved via that preset.
Edit2:
Code: Select all
<?xml version="1.0" encoding="utf-8"?>
<CheatTable>
<CheatEntries>
<CheatEntry>
<ID>1223</ID>
<Description>"Current Highlighted Weapon"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : CodeVein-Win64-Shipping.exe
Version:
Date : 2019-09-30
Author : Turk
This script does blah blah blah
}
[ENABLE]
aobscanmodule(CurWeapAOB,CodeVein-Win64-Shipping.exe,4D 8B 40 08 88 44 24 20) // should be unique
alloc(newmem,$1000,"CodeVein-Win64-Shipping.exe"+6651F68)
label(code)
label(return)
label(WeaponData)
registersymbol(WeaponData)
newmem:
code:
mov [WeaponData],r8
mov r8,[r8+08]
mov [rsp+20],al
jmp return
WeaponData:
CurWeapAOB:
jmp newmem
nop
nop
nop
return:
registersymbol(CurWeapAOB)
[DISABLE]
CurWeapAOB:
db 4D 8B 40 08 88 44 24 20
unregistersymbol(CurWeapAOB)
unregistersymbol(WeaponData)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "CodeVein-Win64-Shipping.exe"+6651F68
"CodeVein-Win64-Shipping.exe"+6651F49: 48 89 D8 - mov rax,rbx
"CodeVein-Win64-Shipping.exe"+6651F4C: 48 8B 5C 24 40 - mov rbx,[rsp+40]
"CodeVein-Win64-Shipping.exe"+6651F51: 48 83 C4 30 - add rsp,30
"CodeVein-Win64-Shipping.exe"+6651F55: 5F - pop rdi
"CodeVein-Win64-Shipping.exe"+6651F56: C3 - ret
"CodeVein-Win64-Shipping.exe"+6651F57: 0F B6 40 18 - movzx eax,byte ptr [rax+18]
"CodeVein-Win64-Shipping.exe"+6651F5B: 48 89 DA - mov rdx,rbx
"CodeVein-Win64-Shipping.exe"+6651F5E: 45 8B 48 14 - mov r9d,[r8+14]
"CodeVein-Win64-Shipping.exe"+6651F62: 48 89 F9 - mov rcx,rdi
"CodeVein-Win64-Shipping.exe"+6651F65: 4C 8B 17 - mov r10,[rdi]
// ---------- INJECTING HERE ----------
"CodeVein-Win64-Shipping.exe"+6651F68: 4D 8B 40 08 - mov r8,[r8+08]
"CodeVein-Win64-Shipping.exe"+6651F6C: 88 44 24 20 - mov [rsp+20],al
// ---------- DONE INJECTING ----------
"CodeVein-Win64-Shipping.exe"+6651F70: 41 FF 92 98 00 00 00 - call qword ptr [r10+00000098]
"CodeVein-Win64-Shipping.exe"+6651F77: 48 89 D8 - mov rax,rbx
"CodeVein-Win64-Shipping.exe"+6651F7A: 48 8B 5C 24 40 - mov rbx,[rsp+40]
"CodeVein-Win64-Shipping.exe"+6651F7F: 48 83 C4 30 - add rsp,30
"CodeVein-Win64-Shipping.exe"+6651F83: 5F - pop rdi
"CodeVein-Win64-Shipping.exe"+6651F84: C3 - ret
"CodeVein-Win64-Shipping.exe"+6651F85: CC - int 3
"CodeVein-Win64-Shipping.exe"+6651F86: 41 53 - push r11
"CodeVein-Win64-Shipping.exe"+6651F88: 49 F7 D3 - not r11
"CodeVein-Win64-Shipping.exe"+6651F8B: 4C 21 1C 24 - and [rsp],r11
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>1226</ID>
<Description>"Weapon Pointer"</Description>
<ShowAsHex>1</ShowAsHex>
<VariableType>8 Bytes</VariableType>
<Address>WeaponData</Address>
<Offsets>
<Offset>8</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1225</ID>
<Description>"Quantity"</Description>
<VariableType>4 Bytes</VariableType>
<Address>WeaponData</Address>
<Offsets>
<Offset>1c</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1227</ID>
<Description>"Quality"</Description>
<VariableType>4 Bytes</VariableType>
<Address>WeaponData</Address>
<Offsets>
<Offset>14</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1228</ID>
<Description>"Transformation"</Description>
<DropDownList DisplayValueAsItem="1">0:None
1:Alleviation
2:Fortification
3:Intensification
4:Gifts
5:Devour
6:Fire
7:Ice
8:Lightning
9:Venom
10:Stun
11:Inhibit
12:Slow
</DropDownList>
<VariableType>Byte</VariableType>
<Address>WeaponData</Address>
<Offsets>
<Offset>18</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>1229</ID>
<Description>"Current Highlighted Blood Veil"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : CodeVein-Win64-Shipping.exe
Version:
Date : 2019-09-30
Author : Turk
This script does blah blah blah
}
[ENABLE]
aobscanmodule(CurVeilAOB,CodeVein-Win64-Shipping.exe,4C 8B 40 08 4D 85 C0 74 E1) // should be unique
alloc(newmem,$1000,"CodeVein-Win64-Shipping.exe"+64B3337)
label(code)
label(return)
label(VeilData)
registersymbol(VeilData)
newmem:
code:
mov [VeilData],rax
mov r8,[rax+08]
test r8,r8
jmp return
VeilData:
CurVeilAOB:
jmp newmem
nop
nop
return:
registersymbol(CurVeilAOB)
[DISABLE]
CurVeilAOB:
db 4C 8B 40 08 4D 85 C0
unregistersymbol(CurVeilAOB)
unregistersymbol(VeilData)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "CodeVein-Win64-Shipping.exe"+64B3337
"CodeVein-Win64-Shipping.exe"+64B3319: 48 89 C2 - mov rdx,rax
"CodeVein-Win64-Shipping.exe"+64B331C: 48 85 C0 - test rax,rax
"CodeVein-Win64-Shipping.exe"+64B331F: 75 16 - jne CodeVein-Win64-Shipping.exe+64B3337
"CodeVein-Win64-Shipping.exe"+64B3321: 48 89 D9 - mov rcx,rbx
"CodeVein-Win64-Shipping.exe"+64B3324: E8 A7 1C 6A FA - call CodeVein-Win64-Shipping.exe+B54FD0
"CodeVein-Win64-Shipping.exe"+64B3329: 48 89 D8 - mov rax,rbx
"CodeVein-Win64-Shipping.exe"+64B332C: 48 8B 5C 24 40 - mov rbx,[rsp+40]
"CodeVein-Win64-Shipping.exe"+64B3331: 48 83 C4 30 - add rsp,30
"CodeVein-Win64-Shipping.exe"+64B3335: 5F - pop rdi
"CodeVein-Win64-Shipping.exe"+64B3336: C3 - ret
// ---------- INJECTING HERE ----------
"CodeVein-Win64-Shipping.exe"+64B3337: 4C 8B 40 08 - mov r8,[rax+08]
"CodeVein-Win64-Shipping.exe"+64B333B: 4D 85 C0 - test r8,r8
// ---------- DONE INJECTING ----------
"CodeVein-Win64-Shipping.exe"+64B333E: 74 E1 - je CodeVein-Win64-Shipping.exe+64B3321
"CodeVein-Win64-Shipping.exe"+64B3340: 0F B6 40 18 - movzx eax,byte ptr [rax+18]
"CodeVein-Win64-Shipping.exe"+64B3344: 48 89 F9 - mov rcx,rdi
"CodeVein-Win64-Shipping.exe"+64B3347: 44 8B 4A 14 - mov r9d,[rdx+14]
"CodeVein-Win64-Shipping.exe"+64B334B: 48 89 DA - mov rdx,rbx
"CodeVein-Win64-Shipping.exe"+64B334E: 4C 8B 17 - mov r10,[rdi]
"CodeVein-Win64-Shipping.exe"+64B3351: 88 44 24 20 - mov [rsp+20],al
"CodeVein-Win64-Shipping.exe"+64B3355: 41 FF 92 A0 00 00 00 - call qword ptr [r10+000000A0]
"CodeVein-Win64-Shipping.exe"+64B335C: 48 89 D8 - mov rax,rbx
"CodeVein-Win64-Shipping.exe"+64B335F: 48 8B 5C 24 40 - mov rbx,[rsp+40]
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>1231</ID>
<Description>"Veil Pointer"</Description>
<ShowAsHex>1</ShowAsHex>
<VariableType>8 Bytes</VariableType>
<Address>VeilData</Address>
<Offsets>
<Offset>8</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1232</ID>
<Description>"Quantity"</Description>
<VariableType>4 Bytes</VariableType>
<Address>VeilData</Address>
<Offsets>
<Offset>1c</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1233</ID>
<Description>"Quality"</Description>
<VariableType>4 Bytes</VariableType>
<Address>VeilData</Address>
<Offsets>
<Offset>14</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1234</ID>
<Description>"Transformation"</Description>
<DropDownList DisplayValueAsItem="1">0:None
1:Alleviation
2:Fortification
3:Intensification
4:Gifts
5:Devour
6:Fire
7:Ice
8:Lightning
9:Venom
10:Stun
11:Inhibit
12:Slow
</DropDownList>
<VariableType>Byte</VariableType>
<Address>VeilData</Address>
<Offsets>
<Offset>18</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
<CheatEntry>
<ID>1235</ID>
<Description>"Current Highlighted Item"</Description>
<Options moHideChildren="1"/>
<LastState/>
<VariableType>Auto Assembler Script</VariableType>
<AssemblerScript>{ Game : CodeVein-Win64-Shipping.exe
Version:
Date : 2019-09-30
Author : Turk
This script does blah blah blah
}
[ENABLE]
aobscanmodule(CurItemAOB,CodeVein-Win64-Shipping.exe,1A 0F 10 00 0F 10 48 10) // should be unique
alloc(newmem,$1000,"CodeVein-Win64-Shipping.exe"+612A86F)
label(code)
label(return)
label(ItemData)
registersymbol(ItemData)
newmem:
code:
mov [ItemData],rax
movups xmm0,[rax]
movups xmm1,[rax+10]
jmp return
ItemData:
CurItemAOB+01:
jmp newmem
nop
nop
return:
registersymbol(CurItemAOB)
[DISABLE]
CurItemAOB+01:
db 0F 10 00 0F 10 48 10
unregistersymbol(CurItemAOB)
unregistersymbol(ItemData)
dealloc(newmem)
{
// ORIGINAL CODE - INJECTION POINT: "CodeVein-Win64-Shipping.exe"+612A86F
"CodeVein-Win64-Shipping.exe"+612A842: 48 89 44 24 30 - mov [rsp+30],rax
"CodeVein-Win64-Shipping.exe"+612A847: E8 44 62 91 FA - call CodeVein-Win64-Shipping.exe+A40A90
"CodeVein-Win64-Shipping.exe"+612A84C: 48 89 C2 - mov rdx,rax
"CodeVein-Win64-Shipping.exe"+612A84F: 4C 8D 4C 24 30 - lea r9,[rsp+30]
"CodeVein-Win64-Shipping.exe"+612A854: 41 B8 2B 00 00 00 - mov r8d,0000002B
"CodeVein-Win64-Shipping.exe"+612A85A: 48 89 F9 - mov rcx,rdi
"CodeVein-Win64-Shipping.exe"+612A85D: E8 2E 11 82 FA - call CodeVein-Win64-Shipping.exe+94B990
"CodeVein-Win64-Shipping.exe"+612A862: 48 8B 84 24 A8 00 00 00 - mov rax,[rsp+000000A8]
"CodeVein-Win64-Shipping.exe"+612A86A: 48 85 C0 - test rax,rax
"CodeVein-Win64-Shipping.exe"+612A86D: 74 1A - je CodeVein-Win64-Shipping.exe+612A889
// ---------- INJECTING HERE ----------
"CodeVein-Win64-Shipping.exe"+612A86F: 0F 10 00 - movups xmm0,[rax]
"CodeVein-Win64-Shipping.exe"+612A872: 0F 10 48 10 - movups xmm1,[rax+10]
// ---------- DONE INJECTING ----------
"CodeVein-Win64-Shipping.exe"+612A876: 0F 11 03 - movups [rbx],xmm0
"CodeVein-Win64-Shipping.exe"+612A879: F2 0F 10 40 20 - movsd xmm0,[rax+20]
"CodeVein-Win64-Shipping.exe"+612A87E: 0F 11 4B 10 - movups [rbx+10],xmm1
"CodeVein-Win64-Shipping.exe"+612A882: F2 0F 11 43 20 - movsd [rbx+20],xmm0
"CodeVein-Win64-Shipping.exe"+612A887: EB 29 - jmp CodeVein-Win64-Shipping.exe+612A8B2
"CodeVein-Win64-Shipping.exe"+612A889: 48 89 43 10 - mov [rbx+10],rax
"CodeVein-Win64-Shipping.exe"+612A88D: 48 89 43 18 - mov [rbx+18],rax
"CodeVein-Win64-Shipping.exe"+612A891: 48 89 43 20 - mov [rbx+20],rax
"CodeVein-Win64-Shipping.exe"+612A895: 48 89 33 - mov [rbx],rsi
"CodeVein-Win64-Shipping.exe"+612A898: 48 89 73 08 - mov [rbx+08],rsi
}
</AssemblerScript>
<CheatEntries>
<CheatEntry>
<ID>1238</ID>
<Description>"Item Pointer"</Description>
<ShowAsHex>1</ShowAsHex>
<VariableType>8 Bytes</VariableType>
<Address>ItemData</Address>
<Offsets>
<Offset>0</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1239</ID>
<Description>"Item Function?"</Description>
<ShowAsHex>1</ShowAsHex>
<VariableType>8 Bytes</VariableType>
<Address>ItemData</Address>
<Offsets>
<Offset>8</Offset>
</Offsets>
</CheatEntry>
<CheatEntry>
<ID>1237</ID>
<Description>"Quantity Held"</Description>
<VariableType>4 Bytes</VariableType>
<Address>ItemData</Address>
<Offsets>
<Offset>14</Offset>
</Offsets>
</CheatEntry>
</CheatEntries>
</CheatEntry>
</CheatEntries>
</CheatTable>
Here are the current highlighted scripts recreated since zach's AOBs didnt work for me. Will also be the basis of the item swap tutorial