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.