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)
Gender and unlock status - easily. The offsets posted before help. 01 00 00 00 01 pattern from above, that's it. First "one" is an unlocked character, unplayables have 00 or 02, managers 03. Change that to 1, that's it. For gender the second 01 means female, at 00 it's male, so a male manager would have 03 00 00 00 00, change that to 01 00 00 00 01 and Paul Heyman can compete for Divas championship. Similarly, can make Michael Cole playable so he can finally lose his Wrestlemania streak to Bayley. As it should be.
Height is SLIGHTLY more different as it has more complex values than 00-03, and last time it was THE first hexes after name/slot, which are 00 to 05, first six pairs in individual pofos listed above by multiple people. It was the easiest thing to change TBH, just find a table where each height corresponds to . Other values are things like hometown, call name, commentary value and they're also changeable, you can see several people (WhatsTheStatus and WorldsFinest) uploading CAWs with hidden chants, trons and stuff used, they edit it same way I make Becky bleed. Changing a value in these things. They probably remember what it took in 2k22 and go from there.
Thanks for the shout out. Glad some people have taken an interest in my little project.
Also just a quick weight class note, in my brief 2k23 testing it seems they still have a hidden max weight class that went unused and in the past games was called "Ultra Heavyweight" but now simply is blank (no name) when you switch to it.
If I remember right, several years back it was Andre the Giant that had this max "ultra" weight class and then for several years it was like they forgot all about that weight class even though it's still in a lot of the games. In fact, some years it's hidden but STILL has its correct name instead of being blank when you switch to it with Cheat Engine!
Funny side note: The 2k journey through their left over coding in wrestling games from year to year is actually quite fascinating when you start digging into things! There were even some years where the Special Referee match was still in the game coding but just NOT available as a playable match! (but if you used Cheat Engine you could force it to work and even the announcer would say special referee match! So the whole match WAS actually there! LOL) That old 40 Man Royal Rumble they had one year also remained in the programming in later years if you knew how to activate it with Cheat Engine.
Thanks guys appreciate it. So do I just use the AOB's and search for weight class the same way I was able to change genders? It was easy for me to find the Gender byte, not sure what I should look for weight class. Do I just look for these?
I believe this page has the correct bytes for each category. If you were able to find and change gender bytes after searching for the AOBs then this page should help you know which bytes to look for: _2K23_POFO_Breakdown
795a8134c1