Casteele How do I cheat?
Reputation: 0
Joined: 22 Jul 2006 Posts: 9
|
Posted: Fri Jan 18, 2008 9:18 am Post subject: Suggestion: New Data Types |
|
|
I've used CE for a long time now, and it's great. However, there are a few things I think are lacking (in most memory editors/trainers, not just CE).. For now, I'm just suggesting some new "data types"; Most of these work with each other for very specific purposes:
- A pointer type:
Before anyone says CE already handles pointers, I know it does--for game data. However, I am talking about a CE table-pointer type (maybe I should call it something else?) that would work something like this:
When searching game memory for values, I sometimes have to look up memory pointers, offset and adjust them, etc. Then I have to write them down, then type them in over and over as I add items to game locations, etc. Worse, as I discover more about the memory structure of the game, I sometimes learn that the pointers I previously found need to be adjusted. So I have to edit each item to fix the pointer, and so on.
What I would like to be able to do is create an table item that is really just an address/pointer, then any other items that need a pointer can either accept a hex address or a pointer item as it's pointer address. That way, if I ever need to change the pointer address, I only have to change one entry, and the rest calculate correctly with the new address. They could also chain so one pointer can rely on the value of another.
(Such "pointer" types are not really useful in finished tables where you're already sure of the addresses and such.. They can, however, be very useful when trying to find data and create a table!)
In truth, this type would be little more than promoting the pointer address from the dialog boxes into entries within the table itself that can be referenced by other table entries.
- Address types:
Addresses really aren't much different than pointers as above. They could even be done by using the pointer types above. But their purpose might be a little different; Pointers would contain addresses similar to those used in the game, while addresses would be addresses of certain memory locations found that are not really pointers. Addresses would be used mainly to set reference points for offsets, below.
- Offset types:
Offsets would work in conjunction with addresses (or maybe pointers); The offset is the offset from a know address/reference point to the memory desired. that is, I can define an address entry, such as "Character Name", then offsets such as "Character Hit Points => Character Name + 4", "Character Race => Character Name - 8", etc. (The offset would be stored in the table as simply "+4" or "-8", etc. That would allow a single offset entry to work with different address/pointer entries.)
- Other types:
By adding pointer/address/offset types, it would be much easier to eventually add more complex types and data structures to cheat tables. These could be similar to C/C++ enums, structs, arrays of *, etc. For example, in some RPG game, you might have three pointers chained in order to locate the base address of a single character record. the various character data could then be based off the base address of the character record. All this could be done with a few linked entries in the cheat table, instead of having to type in several pointers and offsets into each item. Even more, if I know that there are more than one character record, I could define a single base address (a pointer/base address operation), select which character I want to edit (an array operation), then select which data item in the character record I want to edit (an offset operation).
Here's a real example, and the one that made me start to wish CE had these types:
I finally got my Wizardry VII: Crusaders of the Dark Savant (I refer to it as W7 here) game to work under DOSBox (I had to do some hex hacking of the game data files), and started to mess around with it in CE. Within W7, the locations of the various character data are pretty well-defined and easy to locate. I even did this at first, and have a cheat table with some 60+ entries describing each location.
However, running the game in DOSBox, the addresses are not always the same, and worse, there are some 200+ different pointer addresses found, many of which change as the game runs, loads and changes overlays, etc. It's very hard, however, to find a single pointer that reliably points to the right memory block, and DOSBox seems to change it from time to time as part of it's virtual memory management.
So every time I run the game, I have to search for a known item (the character's name as a text string), then go back and edit each of the 60+ entries to the pointer used to locate the character name text. It would be much nicer if I only had to edit a single pointer that the other 60+ data items reference, rather than editing all 60 items every time I play the game.
Most of this won't really be of much use to "finished" tables, but definitely helpful while building and modifying them, trying to figure out which memory locations are important, and eventually extending the power of CE, making it smarter and able to work with complex data structures. It could even be used in making trainers; Changing which character (or whatever) you wish to edit is as simple as changing the base address that the other items reference.
Please let me know if I am not clear on anything.
Regards,
C.
|
|