Data-Type Search

The Data-Type Search allows you to find values stored as one of the basic data types—char/byte, short/unsigned short, int, long/unsigned long, float, and double. The following chart shows the sizes and usefulness of each type.

Data-Type Information
Type Size/Range

Usefulness

char 1 byte, -128 to 127 Same as byte, but shifted down to handle negative numbers.
byte 1 byte, 0 to 255 Old games often used bytes to store character stats to save space. Any time your stats can only be from 0 to 99 or from 0 to 255, they are stored as bytes.
short 2 bytes, -32,768 to 32,767 Same as unsigned short, but shifted down to handle negative numbers.
unsigned short 2 bytes, 0 to 65,535

An unsigned short is large enough to hold most of the values you would need to find a game. If int searches fail, fall back to short searches, if the value is in the range of a short.

Some scanners call this a word.

long 4 bytes, -2,147,483,648 to 2,147,483,647 The most common type for storing health, lives, energy, ammo, etc. This is because it helps to maintain a 4-byte boundary which improves game speed.
unsigned long 4 bytes, 0 to 4,294,967,295

Same as long, but holds no negative numbers, and instead holds higher numbers. Usually there is no need to use long instead of unsigned long, and vice-versa.

Some scanners call this a dword.

int 4 bytes, -2,147,483,648 to 2,147,483,647 Exactly the same as long.
__int64 8 bytes, -9,223,372,036,854,775,808 to 9,223,372,036,854,775,807 A rare 64-bit integer type used usually in specialized software. Games rarely use these.
unsigned __int64 8 bytes, 0 to 18,446,744,073,709,551,615 Same as __int64 except the range is fully positive. This is also called a qword.
float 4 bytes, (+/-)3.4E+38 In 3-D games, player positions and directions are always stored in floats, and always in triplets—that is, 3 consecutive floats called a vector. Sometimes health is also stored in a float, and usually from 0 to 1. Perfect Dark and GoldenEye 007 are examples of games that store player health and armor in floats.
double 8 bytes, (+/-)1.7E+308 Old Flash games are “typeless” and as such they store everything in doubles, which are capable of storing all numbers represented by each of the previous types. This data type is very uncommon elsewhere because it takes more storage space and is more CPU-intensive than floats.

 

To begin a Data-Type Search, you must fill out a few parameters in the Data-Type Search dialog, shown below.

The following chart describes each option.

Option

Description

Data Type Select the type of data to find.

Value to Find

Find Values Not Equal to

From

Find Values Greater Than

Find Values Lower than

Let Me Handle This

This has different meanings depending in the Search Type.

Search Type Meaning
Exact Value Find the exact value specified.
Not Equal To Finds values that are not equal to the value specified.
Range Specifies the bottom of the range of the numbers to find, inclusively.
Lower Than Find all values lower than this.
Greater Than Find all values greater than this.
Unknown Unused.
To Only used in Range searches, and specifies the top of the range to find, inclusively.
Evaluation Type

Specifies the type of search to perform.

Search Type Meaning
Exact Value Find the exact value specified in Value to Find.
Not Equal To Find all numbers not equal to the value specified in Find Values Not Equal to.
Range Find all numbers between From and To, inclusively.
Lower Than Find all numbers lower than the value specified in Find Values Greater Than.
Greater Than Find all numbers greater than the value specified in Find Values Lower Than.
Unknown Find all numbers.
Aligned The search is aligned based on the size of the data type in Type of Data. For example, if you perform an int search, this will scan only every 4 bytes. If you perform a byte or char search, aligned searches have no meaning.
Enable “Same as Original” Sub Search Using the Same as Original sub search requires extra resources since the initial search must be stored to disk. If you do not need the Same as Original sub search, it is best to uncheck this.
From Specifies the starting address from which to search.
To Specifies the ending address at which to stop searching (exclusive).

 

Additional Notes

Range searches always go from the lower number to the higher number, regardless of the order in which you enter them.

The search itself always starts at the lower address and goes to the higher address, regardless of the order in which they are entered.

All search data entered into the dialog is saved if you click OK and perform a search, which allows you to repeat searches without having to fill out every box again.

Only if you perform a search will the previous results be lost.

 

Tips

  • The int/long type is the most common data type and is used to hold most values in most games.
  • It is less risky to search for values using the smallest type capable of containing all valid numbers the value can have. For example, if the number can only range from 0 to 99, a char or byte search will always find the value (if possible), while all other types may fail to find the value, even though they are large enough to hold every number from 0 to 99.
  • All 3-D games use float to store character positions.
  • Player positions in 3-D games can be found by searching for unknown (Search Type) floats (Type of Data), then jumping to a higher platform and sub searching for all values that have increased. Continue moving to higher and lower platforms and performing the appropriate sub search until there are only a few results. Often you will have multiple copies. See the following tip.
  • Sometimes, no matter how many times you search and sub search, you end up with two or more results that all behave the same way. One of the values is the real value, which, if modified, will change data in your game. The others are copies the game has made for any number of reasons. The most common reason for copying data is for display purposes. Usually one will be real and one will be a copy used to print the display on the screen. To find out which is real, modify them one-by-one and then change their values in the game. For example, if your health is at 23 and you change one of the values to 100, you will see 100 on your screen in the game. If you then take damage and the value drops to 22, you have changed the display number, and not the real value. Change another value to 100 and take damage. If it drops to 99 instead of 21, that value is the real value.
Copyright © 2006 Shawn (L. Spiro) Wilcoxen