How different was the Windows version? Did ANY of the other cheats in the table work for you?
You could try looking through these two functions and searching for random byte arrays. Maybe one will work.
This is the function I injected. After it copies what appears to be a recipe object, I modified the list of required resources to have a length of zero so the game thinks it had no requirements.
Code: Select all
40 53 - push rbx
48 83 EC 30 - sub rsp,30 { 48 }
48 8B DA - mov rbx,rdx
C7 44 24 20 00000000 - mov [rsp+20],00000000 { 0 }
48 8D 91 08010000 - lea rdx,[rcx+00000108]
48 8B CB - mov rcx,rbx
E8 C0F2FEFF - call Astro-Win64-Shipping.exe+747030
48 8B C3 - mov rax,rbx
48 83 C4 30 - add rsp,30 { 48 }
5B - pop rbx
C3 - ret
This is the actual function that looks up the recipe and creates a copy. I've commented the exact line of code where the list's length comes from.
Code: Select all
48 89 4C 24 08 - mov [rsp+08],rcx
57 - push rdi
48 83 EC 30 - sub rsp,30 { 48 }
48 C7 44 24 20 FEFFFFFF - mov qword ptr [rsp+20],FFFFFFFE { -2 }
48 89 5C 24 48 - mov [rsp+48],rbx
48 89 74 24 50 - mov [rsp+50],rsi
48 8B D9 - mov rbx,rcx
48 89 4C 24 40 - mov [rsp+40],rcx
33 C0 - xor eax,eax
48 89 01 - mov [rcx],rax
48 63 7A 08 - movsxd rdi,dword ptr [rdx+08] // <<< list length is here
48 8B 32 - mov rsi,[rdx]
89 79 08 - mov [rcx+08],edi
85 FF - test edi,edi
75 05 - jne Astro-Win64-Shipping.exe+74706D
89 41 0C - mov [rcx+0C],eax
EB 1D - jmp Astro-Win64-Shipping.exe+74708A
45 33 C0 - xor r8d,r8d
8B D7 - mov edx,edi
E8 393CD101 - call Astro-Win64-Shipping.exe+245ACB0
4C 8B C7 - mov r8,rdi
49 C1 E0 04 - shl r8,04 { 4 }
48 8B D6 - mov rdx,rsi
48 8B 0B - mov rcx,[rbx]
E8 8F150902 - call Astro-Win64-Shipping.exe+27D8618 { ->->VCRUNTIME140.memcpy }
90 - nop
48 8B C3 - mov rax,rbx
48 8B 5C 24 48 - mov rbx,[rsp+48]
48 8B 74 24 50 - mov rsi,[rsp+50]
48 83 C4 30 - add rsp,30 { 48 }
5F - pop rdi
C3 - ret
To find this address, I did a lot of random stuff. First, I picked a recipe that required two Compounds to construct, such as the Medium Printer. I then found the memory locations of two resources. One Compound and one Organic. I placed both of these resources on the printer so that it met 1/2 of the crafting requirements.
I then compared the memory locations side-by-side to see the differences. Luckily, a lot of the values were the same and I could ignore them. Eventually, I discovered that changing the +160 offset of the Organic resource to match the value inside the Compound resource actually caused the printer to allow me to craft, even though it contained one Organic and one Compound. So +160 must be the "Resource Type" variable.
I then started a brand new game so there weren't any resources scattered throughout the world and then did a search for the Compound resource type value. There were a lot of results... Through trial and error, I just started to change the results (hundreds at a time) to match the Organic resource type value. Eventually, I noticed that when making the change, the printer's requirement actually changed from two Compound into two Organic. So now I knew I was inside that recipe's list of ingredients.
I then found what instructions were accessing that value, which then led me to the two functions I copied above.
Best of luck!