 |
Cheat Engine The Official Site of Cheat Engine
|
View previous topic :: View next topic |
Author |
Message |
YetAnotherHal How do I cheat?
Reputation: 0
Joined: 26 Feb 2019 Posts: 5
|
Posted: Tue Feb 26, 2019 10:27 pm Post subject: memory view addresses as manual offsets from first address |
|
|
Hi. Near as I can tell, I started using Cheat Engine 66 in 2016. What a great product!
I'm just an old fart who's revisiting my ancient games from the early days of the PC. Usually I just enjoy the golden oldies, but sometimes I hit a rough spot and need a little nudge to help me over a speed bump.
I also used ArtMoney for a bit, but I have to say, it's amazing how Cheat Engine has anticipated anything that my limited imagination might desire, so it's been my go-to since 2016.
My games are quite simple, but I have a recurring need I haven't figured out how to solve within Cheat Engine.
Generally, each time a program is loaded, it's code shifts, but the relative distance between addresses remains the same. I've been using Excel to keep track of things, because I can paste in a key address, and Excel will automatically update all the other addresses.
Anyway, these addresses are not dynamic throughout the game: they're static, with absolute addresses varying only game to game.
How can I set up the memory view so that once I've found the key address, all other variables are set their appropriate offsets from that key address?
For example, in Brøderbund's 1989 Dark Heart of Uukrul, you can choose a unique name for your first character, then search for that string. It is at some address. Subtracting 0x7D from that address yields the 2-byte location of Uukrul party food in little-endian format, while subracting 0x7B yields the 2-byte location of Uukrul party cash, in little-endian binary coded decimal format.
For example, in MicroProse's 1993 Master of Orion (MOO), you can choose a unique name for your leader, then search for that string. It is at some address. Subtracting 0x5022 from that address yields the 4-byte location of MOO reserve credits in little endian format.
This is all great information, but (for example) every time I want to play Uukrul, I have to find the key address then manually subtract 0x7B and 0x7D (and others) to access the variables of interest within Cheat Engine.
I wish I could just create each address using offsets from a specified memory view variable. Then I could simply paste the new address over the old one, and then Cheat Engine would update ALL my variables appropriately.
Is this possible?
Thanks!
OBTW, did I say what a great product Cheat Engine is?
v/r YetAnotherHal
_________________
Thanks for your amazing and really well thought out program! |
|
Back to top |
|
 |
Dark Byte Site Admin
Reputation: 470
Joined: 09 May 2003 Posts: 25794 Location: The netherlands
|
Posted: Tue Feb 26, 2019 11:43 pm Post subject: |
|
|
Sre these dosgames running inside dosbox or windows games
if windows you can likely use modulename+offset notations
if dosbox it is more tricky, but there is a pointer to the emulated memory base that can be used
http://fearlessrevolution.com/viewtopic.php?t=7264
_________________
Do not ask me about online cheats. I don't know any and wont help finding them.
Like my help? Join me on Patreon so i can keep helping |
|
Back to top |
|
 |
YetAnotherHal How do I cheat?
Reputation: 0
Joined: 26 Feb 2019 Posts: 5
|
Posted: Wed Feb 27, 2019 1:40 am Post subject: offset: how do I tell Cheat Engine this is what I want to do |
|
|
Hi! Thanks for the really quick response, and also, thanks for that great information on finding the DOSBox 0.74 base address (DOSBox 0.74 is what I have been using).
I guess my ignorance of Cheat Engine is even greater than I suggested in my original post.
Right now, I need to type each variable's address into Cheat Engine each time I restart DOSBox, because, as you noted, those addresses change each time.
Knowing the pointer to the start of base memory doesn't change this, because with my lack of Cheat Engine knowledge, I would still recompute the new variable addresses from that new base address in Excel, and then I would still have to manually update each variable address in the Cheat Engine memory view section.
But, I already KNOW the new addresses with my current technique, because I paste the base address into my Excel tool, and then it tells me what the new addresses are for each of the variables. Then I still have to type them, one by one, into the Cheat Engine memory view section. That's what I was hoping to avoid.
The offsets never change -- only the base address changes. Once I enter the new base address, Excel calculates all the new addresses using the unchanging offsets. Then I start typing them in, again. I'm just thinking, hey, Excel can do it, probably Cheat Engine can do it as well and I simply don't understand how to represent base+offset in the Cheat Engine memory view section.
Is there some way I can permanently enter those unchanging offsets from the variable base address into Cheat Engine, for each variable, so that with each restart, I only have to paste the one changing base address somewhere?
Thanks!
PS There's a lot of great things about the memory view section, like how it easily recasts from decimal to hexadecimal, how you can lock a variable against changing, how you can quickly and easily edit any variable you can see -- again, you've anticipated my needs and implemented solutions that are better than I would have imagined to do it myself. Thanks again for this amazing dynamic debug tool!
_________________
Thanks for your amazing and really well thought out program! |
|
Back to top |
|
 |
Dark Byte Site Admin
Reputation: 470
Joined: 09 May 2003 Posts: 25794 Location: The netherlands
|
Posted: Wed Feb 27, 2019 2:16 am Post subject: |
|
|
let's say that the address you've found is at 442ab89c
and the dosbox base pointer shows it's at 44280000
then open a calculator , set it to programmer mode with hexadecimal type, and fill in 442ab89c-44280000 (or use excel for that), so that you know what the offset from the base is (in this case 2B89C)
With this base pointer in hand you can then create a memory record entry that is always the same.
Easiest is just add the basepointer to the list, create a new entry, and give it the relative offset with a + in front
Then drag it into the base pointer memory record and it'll update the address to be the base+2b89c. And it will do that each time the address changes
_________________
Do not ask me about online cheats. I don't know any and wont help finding them.
Like my help? Join me on Patreon so i can keep helping |
|
Back to top |
|
 |
OldCheatEngineUser Whateven rank
Reputation: 20
Joined: 01 Feb 2016 Posts: 1586
|
Posted: Wed Feb 27, 2019 3:24 am Post subject: |
|
|
that s good stuff db, maybe i should create wolfenstein 3d table based on what you shared lol.
_________________
About Me;
I Use CE Since Version 1.X, And Still Learning How To Use It Well!
Jul 26, 2020
STN wrote: | i am a sweetheart. |
|
|
Back to top |
|
 |
YetAnotherHal How do I cheat?
Reputation: 0
Joined: 26 Feb 2019 Posts: 5
|
Posted: Fri Mar 01, 2019 2:19 am Post subject: Brilliant! |
|
|
Thanks, once I had time to work through it, it went swimmingly! This saves a lot of set-up time for each gaming session. I wish I had taken the time and learned to use this two years ago!
Is there a place where I can upload the dot-CT for Broderbund's Dark Heart of Uukrul?
Thanks again for all the time and effort you've invested in this amazing tool -- you're way ahead of old farts like me, and have already implemented the capabilities we haven't even figured out that we need, yet!
|
|
Back to top |
|
 |
|
|
You cannot post new topics in this forum You cannot reply to topics in this forum You cannot edit your posts in this forum You cannot delete your posts in this forum You cannot vote in polls in this forum You cannot attach files in this forum You can download files in this forum
|
|