Cheat Engine Forum Index Cheat Engine
The Official Site of Cheat Engine
 
 FAQFAQ   SearchSearch   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 


Cheat Engine Forum Index
PostGo back to topic
gibberishh
Cheater
Reputation: 1
Joined: 30 Aug 2021
Posts: 37

PostPosted: Tue Jun 21, 2022 1:39 am    Post subject: Simplify Table Updates by Linking Memrecs

Maybe I'm already late to the party, but I don't see many tables using these tricks, so I'm going to explain them. Maybe someone will benefit. I don't know what it is technically called, but this is a way to 'link' addresses across memory records, just like we can 'link' dropdown lists.

Most table makers (from tables I've seen) currently create memory records in one of these ways:
1. Somehow find a 'base' address and copy-paste that across all pointers. Sad E.g. Health: Pointer = game.exe+3120A, Offset = 20. Mana: Pointer = game.exe+3120A, Offset = 24. Stamina = game.exe+3120A, Offset = 28.
2. Use aobscans to find the 'base' address. That base address is assigned to a memory region (let's call it MyPlayer) which is then used to build all pointers. E.g., Health: Pointer = MyPlayer, Offset = 20, Mana: Pointer = MyPlayer, Offset = 24, Stamina: Pointer = MyPlayer, Offset = 28.

There are 2 very good tricks for simplifying basic tables, especially if you don't want to (or can't) use aobscans:

1. Nesting: Find your base address and create a memory record (let's name it Base): Address = $process+3120A. Note that you can do this even if you use aobscans. Just create your base memory record as an address or pointer, whichever is applicable. Now, nest all your other memory records under it in the following way: Health: Address = +20. Mana: Address = +24. Stamina: Address = +28. Note that these are NOT pointers. Enter these offsets into the Address field. Your table will look like:
Base
-|--Health
-|--Mana
-|--Stamina

Thus, when the game is updated and the base address changes, you need to update it in only one place.

2. Linking: This is the big one. Once you've found your base address, create its memory record just like in the previous example. Let's again name it Base.
Now create your other memory records this way:
Health: Pointer = (Base), Offset = 20.
Mana: Pointer = (Base), Offset = 24.
Stamina: Pointer = (Base), Offset = 28.
That is, enter the name of your base record within parentheses, just like you would do for linking dropdowns. AFAIK, you cannot have spaces or special characters in the record name for this to work, but it's still awesome because there is no nesting involved. You can place your memory record wherever you wish, and still need to update only one record when the game version changes. Very Happy (Nesting has its own uses and advantages though, so don't ignore that!)

My intention is not to present these as alternatives to aobscan-based pointers (though they work for that too). But if you find yourself copy-pasting hard-coded pointer addresses every time your games update, please switch to one of these methods!
* I don't know how far back in time the nesting and linking methods go. I'm using CE 7.2, but possibly a few versions earlier might also support these structures.
_________________
It's not cheating. It's playing by my rules.
Back to top
View user's profile Send private message
Post reviews:   Approve 1
Author Review
ParkourPenguin
Review: Approve
Post reference:
ReviewPosted: Tue Jun 21, 2022 11:09 am


Back to top
View user's profile Send private message
Display:  
Cheat Engine Forum Index


Powered by phpBB © 2001, 2005 phpBB Group

CE Wiki   IRC (#CEF)   Twitter
Third party websites