Help File:Searching Tip

From Cheat Engine
Jump to navigation Jump to search

Originally posted by Smidge204

When searching for a value in memory using the scan, here are a few pointers to find the value quickly:

  • If the value is known, but the format is not (ie: Byte, 2 Bytes, 4 Bytes...) search for the smallest type that will hold the data.

For example, if the value you want is 60, search for bytes. If the value is 1224, search for 2 Byte values, etc. The idea being that if the actual format is larger (You searched for 2 byte values but it's actually a 4 byte values) then the other bytes would be 0 anyway and the value would still be found.

But if you search for a 4 byte value when it's really less, you might never find it because you're reading nearby bytes as well that might screw up your search!

  • If the value is unknown, use the "Unknown initial value" scan along with method 1 (ie: always use bytes unless you happen to know it's size). Then do something that changes it's value.

Once the value has changed, repeat the scan using "Changed values". This will filter out all the crap.

Now go back into the game and do a bunch of stuff that DOESN'T change the value, if possible. Now repeat the scan for "Unchanged values". This will filter out stuff like position values, timers and counters.

Keep repeating until you've widdled down the searches to a managable amount, then add all the results to your list and keep an eye on them as the game runs. Remove anything that changes when it logically shouldn't. Anything that's left, try plugging in random values and see if something happens!

  • If you've found a bunch of good values, and youre looking for information that is somewhat related (Such as Lives and money, or whatever) , try restricting your search range to within a few kilobytes of the known value either way. This is especially powerful when looking for values in tables (High score list, for example) since they tend to be right next to eachother.

  • Use "Bigger than" and "Smaller than" as often as possible, especially after scans for changed or unchanged values. This can generally wittle down the results pretty fast.

  • Use arrays to peek at multiple byte values at once. Useful for detecing patterns!

  • Sometimes string values are not stored as ASCII strings, so the "Text" search doesn't work. For example, "A" might be stored as 0x01 instead of 41. If that's the case, and you have control over the value in-game (character name?) then try these steps:

  1. Set the character name
  2. Search for "Unknown initial value"
  3. Change name
  4. Search for "Changed values" (Repeat above two steps to eliminate as much junk as possible. See also tip #2)
  5. Change name to all the same characters. ie: "AAAAAAA". Try to max out the space you're given.
  6. Search one more time for changed values. If you've increased the number of displayed results enough to get a list, scroll down and see if you have a bunch of consecutive memory locations that have the same value. (Should be the same as the length of the string!)
  7. Add the first address to your list as an array equal to the length of the string you entered.
  8. Change name to an easily identifiable pattern. ie: "ABCDEFG"
  9. See if the bytes in your array changed to a similar pattern. If so, start mapping the characters to their values and you're done!

Once you have the character map, you can use it to "translate" other text you couldn't find before. Simply search for an array of bytes and enter in the expected values of each letter in order.

Hope that helps!