Assomeone who has never used a cheat engine, or even learrned about them, I have to ask why use one? Does it create new features, or unlock things that are normally locked? What does it do with game play, and or story lines? If I had to speculate it just sounds like a mod on steriods.
You are talking about custom gaming modes right? I think if a game provides options to deviate from a default or standard game play I would not call them cheats. Take X4 for instance. Would you call their custom modes cheats?
x4-screenshot25681472 698 KB
All types of things really. If you think the game could be made more fun if tweaked a bit then that is reason enough. I remember back in the ps2 days me and my brothers would play grand theft auto with the flying as well as exploding cars cheats and just do that for hours without so much as touching the actual missions.
in Disassembler, there is "Tools - Dissect Code" (Ctrl-J), which analyzes the source code of the game. After running that, the normal disassembler displays more informations, for example which addresses are calling a function. Double-clicking on one of these addresses lets the Disassembler jump to this location.
if your address list contains an adress resulting from some pointers, you cannot directly copy the address itself. Make a right-click on this address and invoke "Pointer Scan for this address. In the pointer scanner window you can easily copy the address and close the pointer scanner.
as you most likely now, pressing Ctrl-H on a table entry lets you set Hotkeys. Default is to check/uncheck the freeze-Box. But you can also set the hotkey to increase/decrease the value by a specific amount. So "get 1000$ ingame" does not require any scripting.
sometimes you have a table entry "full health" and an entry "current health". Of course you want to copy full to current. Instead of writing a script, you can freeze current health and set the value(!) of current health to (full health). Now the content of "full health" is copied to current health. Got this hint from DarkByte/Eric himself on the forums which shall not be named in a thread which has been deleted there.
well I discovered that when you try to break and trace vcruntime140 like with unreal games you have to leave the skip system
modules box unchecked or it won't work! Also leave stay inside initial module unchecked as well to capture everything or you will only get a few instructions captured! (Info by JoseFaction)
Another thing that's handy but many people don't know: If you use "find out what addresses this code accesses" on a 'ret' instruction, it'll return the addresses of the functions that called the function you're in (Info by Eric/DarkByte)
after copying an address with a code injection and save the wanted address as "playerbase", do not use [playerbase] in the address entries which use it. Instead, make a pointer-entry with the address playerbase and the offset 0. The effective addresses in the table are still the same, but are updated much faster - with the "wrong" way, it will take 4-5 seconds for values to get updated. (Thanks to Eric/DarkByte for pointing that out)
Whenever you try to refer a PID from a task manager back to cheat engine, r.click on the process list, convert PID to decimal. Somehow, I been missing this for years and been using calculator to convert the PID dec to hex back to CE.
If CE sort of pseudo-crash on you, where you cannot save your work but still can move around in cheat engine , error like out of memory, exception error, etc. Most of the time this happen to unity/mono game while mono features is on. You can copy paste your script/address to another cheat engine instance and save it without any error.
If some script didn't work as a user but you 100% sure you have the same game version with the cheat maker, try a different cheat engine version. Go up a version or down. I have at least 5 people that struggled to make cheat work, while 3 users literally took hours of finding root cause without avail. Changing to a different version solved their problem. Got 7.1,7.2,7.3,7.4 in my pc just for testing purposes.
This should be basic, but for beginner, If you're not sure why your script crash, pause the game by cheat engine pause hotkey, put a breakpoint around the injection point, resume the game. Step in to your script until you find the exact code before it crash.
creating cheat for a hobby, not obligated for requests or update.
my ct will always be free to be shared without removing the credit or where it originally came from.
anyone can update in case I'm not doing this anymore.
Did you know there is no globalDealloc? Each time you do a globalalloc and the name doesn't exist yet, it gets added to a memoyblock allocated in the target.
So, do not use unregisterSymbol these, unless the process has changed
globalalloc allocates the memory in a completely different part of the target program, and a label is just an address in the current block of memory.
Also, every script that uses globalalloc with the same name, gets the same address. So if script A uses globalloc(name,xxx) and script B use globalloc(name,yyy) then both will see name as the same address.
since not everyone knows:
code executing in $luacode runs in a different thread than the main(GUI) thread. That means it can not access GUI controls, like the addresslist and memoryrecords, unless you synchronize() the code first so it runs on the main thread
I just never really learned how Cheat Engine worked at all and just suffered through my failures to learn lol.
I did start by watching some very helpful tutorial videos from Sn34kyMofo Stephen Chapman on YouTube, but he didn't have any Mono hacking guides at that time so RIP.
Overall, the best guide is to read code and techniques from smart people who actually know what they're doing. I'm honestly still a novice compared to everyone else.
Oh, and also, the Cheat Engine Wiki is a super nice resource for learning.
Another thing useful for people to know: In proton_expiremental static memory that has been written to is still write_copy protected, so when scanning memory, include copy-on-write which is usually disabled by default (example: doom64)
3a8082e126