Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Cheat System

Hidden cheat system built into the Redguard game engine. The 13 cheat codes are XOR-obfuscated in the binary (each byte XOR’d with 0xAA).

The developer console reference lists all other console commands and their aliases.

Activation

Cheats can be triggered in three ways:

During Gameplay (no console)

Type the cheat name on the keyboard during normal gameplay and press Enter. The engine reads keypresses every frame into a hidden 127-character input buffer. On Enter, the buffer is compared against all cheat names. No visual feedback is given — the cheat silently toggles.

Developer Console

Press F12 to open the console, type the cheat name, and press Enter. The console prints Cheat <name> turned on or Cheat <name> turned off.

Console with Explicit Value

In the console, use <cheatname> = <value> to set a specific integer value instead of toggling. For example, magiccarpet = 1 forces the cheat on, magiccarpet = 0 forces it off.

Toggle rules

Cheats normally store 0 for off or 1 for on. Typing a cheat name again switches between those two values, whether entered during gameplay or in the console.

The console also accepts other numbers, such as oddjob = 2. These are raw values, not strength levels. Their gameplay meaning depends on the cheat: some checks accept any nonzero value, while others require exactly one.

Entering the name again handles these unusual values differently:

  • During gameplay, any nonzero value becomes zero.
  • In the console, an even value becomes one and an odd value becomes zero.

For example, after oddjob = 2, entering oddjob in the console stores one; entering it during gameplay stores zero. The console rule is (value + 1) & 1.

oracle and savecheats run dedicated actions. oddjob follows the ordinary state-handling rules above.

Cheat List

#NameEffect
0oracleLists all 13 cheats and their raw integer state values in the console
1nodemarkerRecognized state slot: accepts toggles and explicit console values, appears in oracle, persists in REDGUARD.CHT and is replaced at startup by the node_marker key of SYSTEM.INI [debug]. No code reads the slot after startup, so it changes no display or movement behavior; the node-map and node displays follow the separate display_node_map and display_nodes keys of the same section.
2moonrakerWhile the state is nonzero the selected player skips two collision passes of its ordinary update: the three forward obstacle probes (the one at the actor’s position and the two at the extent-derived heights, each also run again after an overlap repair) and the actor overlap pass (candidate gathering and resolution). Other actors are unaffected. Each update also sets bit 0 of the first flag byte of the selected player’s control record when the state is zero and clears it otherwise; that bit is the enable of the overlap pass for that record.
3taskToggles the task scheduling system — a high-level bytecode-driven behavior scheduler that runs on top of SOUP scripts. SOUP is the low-level scripting VM (“do X right now”); the task system is the higher-level sequencer (“do X, then Y, then Z over time”). Each actor has 6 independent task slots with their own bytecode pointers and frame counters. When enabled, a state machine interpreter processes ~30 task opcodes (0x00–0x1e) per actor per frame, handling action queuing, behavior transitions, AI/combat processing (pathfinding, combat stances, NPC-vs-player logic), and actor destruction. When disabled, only SOUP script execution runs — actors lose multi-step behaviors, combat AI, and pathfinding. Corresponds to task_system in SYSTEM.INI [system] (default: yes).
4animationToggles the animation state machine — the system that manages animation playback, transitions, blending, and frame timing for all actors. When enabled, actors play animations (walk, fight, idle, etc.) with managed transitions and priority blending, and combat actions are gated by animation timing (a new attack cannot start until the current animation allows it). When disabled, all animation management early-returns: actors freeze on their current frame, combat action timing checks are bypassed (attacks fire without animation constraints), and animation progress always reports zero. The zero value also suppresses the ordinary animated-player draw; it does not retain a visible frozen player pose. Corresponds to animation_system in SYSTEM.INI [system] (default: yes).
5magiccarpetFly mode — disables gravity and falling, allowing the player to walk horizontally through the air at current altitude
6savecheatsWrites all cheat states to REDGUARD.CHT so they persist across sessions
7drevilPrevents player death — suppresses death handling when health reaches zero and bypasses some player damage application paths. While the state is nonzero, a hit message or a direct-damage message to the selected player applies no health change and starts no death response; the hit reaction animation request and the restoring of the sender’s charged weapon still run. Other actors take damage normally. The kill routine for the selected player also returns without effect.
8drnoDisables part of the non-player actor update path, reducing/skipping some NPC behavior processing. While the state is nonzero, the per-actor update returns early for every actor except the selected player and the actor the camera setup was given, skipping the rest of that update.
9goldfingerRetains a burning torch. During ordinary actor updates, a nonzero selected-player torch counter becomes 100 when the world frame is divisible by eight and living state is not 34. A zero counter remains zero. The refresh takes the place of the burn rules on that update: the counter is set to 100 without the water branches and without the countdown.
10neversaydieMakes SOUP PlayerDistance() return 9999999 instead of calculating distance.
11oddjobRecognized state slot: accepts toggles and explicit console values, appears in oracle, and persists in REDGUARD.CHT.
12yeahbabyVertical surface bypass — while active, Page Up moves the player upward through surfaces and Page Down clips below the current surface. The selected player’s ground-support probe is skipped, clearing its living-state byte, the sliding, falling and queued-motion bytes, the rope node reference (+0x1ab) and the last_direction byte (+0x1cb), whenever Page Up or Page Down is held or a flag toggled by Home is set (the player’s per-update handler consumes the Home key state and flips that flag once per press, and only while the handler is enabled); otherwise normal surface collision applies. Horizontal collision is unaffected. In the player’s per-update handler, each held vertical key moves the player’s Y position by 4096 (16 map units) per pass, Page Up subtracting and Page Down adding. While Insert is held the same handler also moves the player forward along its heading by 128 Q8 units times the frame’s step value and sets the camera record flag that suspends camera movement limiting, clearing it when Insert is released. The flag is set once, on the first held pass, on the camera record selected at that moment; the release test runs on every pass of the handler, whether or not the cheat is on, and clears the flag on the record selected at that moment, so turning the cheat off while Insert is held also restores the limiting. The handler and the bypass are enabled by this cheat or, in developer mode ([debug] final_version=0), regardless of it.

The cheat names are themed after James Bond films (Moonraker, Dr. No, Goldfinger, Oddjob, Never Say Never Again) and Austin Powers (“Yeah Baby”).

Values other than zero and one

The Glide engine does not apply one shared on/off rule to every cheat. The ordinary gameplay checks use these conditions:

CheatsCondition usedMeaning of 2
task, magiccarpetValue equals 1Does not enable the corresponding check
nodemarker, oddjobNo gameplay check reads the slotAny value is only stored
moonraker, drevil, drno, goldfinger, neversaydie, yeahbabyValue is nonzeroEnables the check, just like 1
animationThe movement natives’ wait for their requested group to become current requires 1; the animation requests (including the default request and forced requests), advancement and the progress readout accept any nonzero valueRuns the animation system but skips the movement natives’ wait: the natives that request a walking, backing or side-stepping group then step without waiting for it, so it is not equivalent to either ordinary on or off

With animation at zero the selected player still moves: holding the walk key and forward advances it by the walking startup distance each update (16 units per update at frame scale 512 once the startup ramp ends), holding forward alone runs it at the run speed (40 units per update at 512), and the current animation group stays at its value (group 0 when idle) because the request routines do nothing. Nothing stops or faults.

oracle and savecheats execute commands instead of using these gameplay conditions. oddjob accepts and stores arbitrary values through the shared cheat-state handling described above.

For example, neversaydie = 2 still makes PlayerDistance() return 9999999, but magiccarpet = 2 does not enable its fly-mode check. Values above one are not additional strength levels. Use 0 and 1 for consistent on/off control.

The CHT parser preserves each raw integer. Its is_on() helper reports whether that integer is nonzero; it does not reproduce the per-cheat conditions in this table. Callers implementing gameplay must use the raw value and the corresponding condition.

Persistence — REDGUARD.CHT

The savecheats command (cheat #6) writes the 64-slot state array, including the 13 named cheat slots, to a file called REDGUARD.CHT in the game directory. It clears its own slot before writing, then sets that slot to one after closing the file. On startup, the engine checks for this file and restores any previously saved cheat states. Delete the file to discard the saved cheat values. See CHT format specification for the binary layout.

Startup first clears the cheat slots, then loads the optional CHT file. Later, SYSTEM.INI supplies task_system, animation_system, and node_marker, replacing the corresponding task, animation, and nodemarker values. ODDJOB has no such configuration replacement; saved values such as 0, 1, and 2 remain unchanged through system initialization.

Relationship to SOUP flags

Cheat slots and SOUP global flags use separate storage. SOUP’s SetGlobalFlag, TestGlobalFlag, and ResetGlobalFlag operate on the flags declared in SOUP386.DEF; a flag index is not a cheat index. The installed native function bindings do not provide a generic cheat getter/setter or console-command executor.

Native functions can still consult specific cheats internally. For example, PlayerDistance and AcuratePlayerDistance check neversaydie. The console’s getflag and setflag commands access SOUP flags, while cheat names access cheat state directly.

Obfuscation

The cheat names are stored in the game binary as XOR-encoded strings (each byte XOR’d with the constant 0xAA). This is a simple obfuscation to prevent discovery via hex editors or string dumps. The names are decoded into memory at startup.

External References