Cheat Engine Tips
Practical tips for scanning, pointers, value types, Lua, Mono, and general workflow. Mix of beginner and advanced.
Scanning & Values
- Try multiple value types. If 4 Bytes gives millions of results or zero, try Float, Double, or 8 Bytes. Health and money are often 4 Bytes or Float.
- Use “All” for type when unsure. Slower but can help when you don’t know how the game stores the value.
- Narrow with several Next Scans. Change the value in-game (e.g. take damage, spend gold) and do Next Scan each time until you have a manageable list.
- Unknown value workflow. For values you can’t type (e.g. “?”), use Unknown initial value, then Increased / Decreased / Changed value after you change it in the game.
- Displayed value can differ. Some games store value × 2 or × 8. If the number you type never matches, check the Wiki for “custom scan” or “multiplied value” tutorials.
Pointers & Stability
- Find pointers for important values. After finding an address, use Pointer scan so the cheat works after restart. It can take time and disk space; use a small “Max level” first to test.
- Filter pointer results. After a pointer scan, filter by “Must be readable” and “Pointer must be static” to reduce bad results. Re-scan after restarting the game to confirm.
- Save your table often. If pointer scan or a long session crashes, you lose progress. Save the .CT regularly.
Code & AOB
- Use AOB for code injection. Hard-coding an address in a script breaks after updates. AOB (array of bytes) finds the code location by pattern so the script is more likely to survive patches.
- Make AOBs unique. Include enough bytes so the pattern appears only once. Use ?? for unknown bytes if needed.
- Find what writes to an address. Right-click an address → “Find out what writes to this address.” Change the value in-game; CE will show the instruction. Useful for code injection.
Mono & Unity
- Dissect Mono first. In Mono games, use Mono → Dissect mono (or similar) to list classes. Search for “Player,” “Health,” “GameManager,” etc. to find the right class and field.
- Find instances. After finding a class, use “Find instances of class” or the Mono helper to get object instances, then browse fields for the value you want.
Lua & Automation
- Auto-attach with Lua. You can write a Lua script that waits for the process name and attaches automatically when the game starts.
- Check the Lua extensions forum. Many ready-made Lua scripts and extensions are shared there; read the code before use.
Performance & Safety
- Scan range. For large games, you can limit the scan range in settings to speed up scans (e.g. exclude huge DLL regions if you know the value is in the main module).
- Don’t open untrusted .CT files blindly. They can run Lua and modify your system. Open in a text editor first or use tables only from people you trust.
- Run CE as administrator only when needed. Some games require it to attach. Close CE when you’re done to reduce risk.
Workflow
- Start with the built-in tutorial. Complete at least steps 1–5 so you understand First Scan, Next Scan, and changing values.
- Name your addresses. In the address list, double-click the description to give addresses clear names (e.g. “Player HP”) so you don’t forget what they are.
- Group cheats in the table. Use groups and sub-groups in the address list to keep tables readable when you have many entries.
- Save before pointer scan. Pointer scans can crash on huge processes. Save your .CT first so you don’t lose addresses.
- Use “Writable” to narrow. In scan options, “Writable” can reduce results since the game must be able to write to the address.
- Coordinates are often Float. For X/Y/Z position, try Float or Double and move in the game between scans.
- Read .CT in a text editor. Before loading a table from the internet, open it and look for <LuaScript> or odd code to avoid running unknown scripts.
- Attach before main menu. For games that detect CE, attaching as soon as the process starts (before anticheat loads) sometimes works.