¡Hello! This post is about a gameplay of a futuristic anti-gravity racing game, in where there're cheat codes used. These cheats are created by me ^^. Used assembly (x64) scripts to let these cheats work correctly.
The featured ones can be executed using hotkays:
-Instant random weapon (On "PgUp"/Off "PgDown")
-Auto-pilot (On "Num1"/Off "Num0")
-Auto-pilot speed; Hold speed increase (On "Num3"/Off "Num2")
-Shield (On "Num5"/Off "Num4")
-Select weapon (relative) with "Home"/"End".
In video, I have instant random weapons, auto-pilot & a permanent shield.
Download link of cheat table (open with CheatEngine): https://www.mediafire.com/file/6c69p3wvetg70tv/BallisticNG+v1.2.5.CT
The used music belongs to beaTHawk (all rights reserved to him): http://modarchive.org/index.php?request=view_by_moduleid&query=83860
A bit more info about the cheat table.
The file looks like this:
The blue assembly script (the one with description "Build blue pointers") allows blue cheats to work only for player 1. A pointer address is an address where its value can be interpreted as other address, and so on until the correct value is found. An address is a place of memory region which 'inside', has such information called "Value" (watch the cheat table screenshot to understand better).
I will explain how could I do for let the assembly script to write only the right address to the base address of blue pointers.
This is the interior of the mentioned script above:
From what I remember, this is a particular memory injection method called "Full Injection" (done pressing "Ctrl+F" in that window). The original formula is "movss xmm0,[rax+00000250]", where this formula gives information about all players' health (& it's known becuase of the offset "00000250"). rax is a variable (in assembly is called "register") which works here as a base address of all players. So, used one of the tools of CheatEngine for compare the values of rax so I can find common factors between the value of rax who belongs to my player & the other ones who belong to the other players.
I could find that a common factor is that the value of rax+218 is 0 for my player (in assembly, one can say that "[rax+218] is 0"), & respect of other players, [rax+218] is 1.
So, I compared it to 'tell the script that I want to only get the value of eax who belongs my player, so I can write it in a base address to get a 100% accurate opointer forcely'.
Translaed in assembly, this is:
...
newmem:cmp [rax+218],00jne codemov ["UnityPlayer.dll"+014F0080],rax- ​
code:movss xmm0,[rax+00000250]jmp return- ​
INJECT:jmp newmemnop 3return:
...
Watch the code screenshot above to understand.