As for inventory collected items:
Code: Select all
rsi == 0000000207B20980 == Inventory
Size of Inventory:
ACOrigins.exe+1BE4319 - 8B 56 34 - mov edx,[rsi+34]
ACOrigins.exe+1BE431C - 48 8B 4E 2C - mov rcx,[rsi+2C]
ACOrigins.exe+1BE4320 - C1 EA 11 - shr edx,11
ACOrigins.exe+1BE4323 - C1 E2 05 - shl edx,5
ACOrigins.exe+1BE4326 - 48 03 D1 - add rdx,rcx
ACOrigins.exe+1BE4329 - 48 3B CA - cmp rcx,rdx
get_Inventory:
ACOrigins.exe+19CA950 - 48 89 74 24 10 - mov [rsp+10],rsi
ACOrigins.exe+19CA955 - 57 - push rdi
ACOrigins.exe+19CA956 - 48 83 EC 20 - sub rsp,20 { 32 }
ACOrigins.exe+19CA95A - 48 8B 09 - mov rcx,[rcx]
ACOrigins.exe+19CA95D - 49 8B F8 - mov rdi,r8 <-- rcx = CharacterAI
ACOrigins.exe+19CA960 - 48 8B F2 - mov rsi,rdx
ACOrigins.exe+19CA963 - 48 85 C9 - test rcx,rcx
ACOrigins.exe+19CA966 - 74 45 - je ACOrigins.exe+19CA9AD
ACOrigins.exe+19CA968 - 48 8B 49 40 - mov rcx,[rcx+40]
ACOrigins.exe+19CA96C - 48 89 5C 24 30 - mov [rsp+30],rbx
ACOrigins.exe+19CA971 - 48 8B 1D 48CF1803 - mov rbx,[ACOrigins.exe+4B578C0] { [1443C8170] }
ACOrigins.exe+19CA978 - 48 8B 01 - mov rax,[rcx]
ACOrigins.exe+19CA97B - FF 90 98000000 - call qword ptr [rax+00000098]
ACOrigins.exe+19CA981 - 0FB6 4B 49 - movzx ecx,byte ptr [rbx+49]
ACOrigins.exe+19CA985 - 48 8B 5C 24 30 - mov rbx,[rsp+30]
ACOrigins.exe+19CA98A - 48 8B 00 - mov rax,[rax]
ACOrigins.exe+19CA98D - 48 8B 0C C8 - mov rcx,[rax+rcx*8] <-- get it here
ACOrigins.exe+19CA991 - 48 85 C9 - test rcx,rcx
ACOrigins.exe+19CA994 - 74 17 - je ACOrigins.exe+19CA9AD
ACOrigins.exe+19CA996 - 48 8B 01 - mov rax,[rcx]
ACOrigins.exe+19CA999 - 4C 8B C7 - mov r8,rdi
ACOrigins.exe+19CA99C - 48 8B D6 - mov rdx,rsi
ACOrigins.exe+19CA99F - 48 8B 74 24 38 - mov rsi,[rsp+38]
ACOrigins.exe+19CA9A4 - 48 83 C4 20 - add rsp,20 { 32 }
ACOrigins.exe+19CA9A8 - 5F - pop rdi
ACOrigins.exe+19CA9A9 - 48 FF 60 78 - jmp qword ptr [rax+78]
ACOrigins.exe+19CA9AD - B8 03000000 - mov eax,00000003 { 3 }
ACOrigins.exe+19CA9B2 - 48 8B 74 24 38 - mov rsi,[rsp+38]
ACOrigins.exe+19CA9B7 - 48 83 C4 20 - add rsp,20 { 32 }
ACOrigins.exe+19CA9BB - 5F - pop rdi
ACOrigins.exe+19CA9BC - C3 - ret
IStruct: 0x207B581C0
IName: 0x1443CE6D0
ObjStr: CharacterAI
ObjHash: 0x516CC959
adjust by:
ACOrigins.exe+8857330 - 53 - push rbx
ACOrigins.exe+8857331 - 48 83 EC 20 - sub rsp,20 { 32 }
ACOrigins.exe+8857335 - 48 83 C1 B0 - add rcx,-50 { 176 } <-- here
ACOrigins.exe+8857339 - 4C 89 C3 - mov rbx,r8
ACOrigins.exe+885733C - E8 8FCF38F9 - call ACOrigins.exe+1BE42D0
ACOrigins.exe+8857341 - 89 03 - mov [rbx],eax
ACOrigins.exe+8857343 - 31 C0 - xor eax,eax
ACOrigins.exe+8857345 - 48 83 C4 20 - add rsp,20 { 32 }
ACOrigins.exe+8857349 - 5B - pop rbx
ACOrigins.exe+885734A - C3 - ret
iterate all inventory items:
ACOrigins.exe+1BE4329 - 48 3B CA - cmp rcx,rdx <-- start vs. end
ACOrigins.exe+1BE432C - 74 1A - je ACOrigins.exe+1BE4348
ACOrigins.exe+1BE432E - 4C 8B 07 - mov r8,[rdi]
ACOrigins.exe+1BE4331 - 4C 3B 41 08 - cmp r8,[rcx+08]
ACOrigins.exe+1BE4335 - 75 08 - jne ACOrigins.exe+1BE433F
ACOrigins.exe+1BE4337 - 8B 47 08 - mov eax,[rdi+08]
ACOrigins.exe+1BE433A - 39 41 10 - cmp [rcx+10],eax
ACOrigins.exe+1BE433D - 74 38 - je ACOrigins.exe+1BE4377
ACOrigins.exe+1BE433F - 48 83 C1 20 - add rcx,20 { 32 } <-- size of item block
ACOrigins.exe+1BE4343 - 48 3B CA - cmp rcx,rdx
ACOrigins.exe+1BE4346 - 75 E9 - jne ACOrigins.exe+1BE4331
ACOrigins.exe+1BE4348 - 33 C0 - xor eax,eax
And here's some hashes:
Cedarwood: 2A80A8B0
Bronze: 2A80A8B1
Soft Leather: 2A80A8AF
Hard Leather: 12FA86C4
Pelt: 12FA86C6
Iron: 2A80A8B2
Carbon Crystal: 12FA86C7
Silica: 58DAAAAD
I used the last 4 bytes of the hash for checking, but the game actually verifies all 8 (a quad). You can use the same logic to build up a list of weapons/outfits/etc. hashes
Here's an example:
So
Sunslayer's hash is
0x0000010BDB8ED19.