Development mode (commonly referred to as
devmode, after the console command that activates it) is a special mode, exclusive to Single Player, used for testing and development of levels in SRB2. It prints debug information into the console and displays many internal attributes of the game on the HUD. Additionally, it allows skin and color changes in Single Player and unlocks several console commands and variables that would be considered cheating in a regular game, such as setting the player's lives or changing the character's abilities. Because of this, enabling development mode activates the cheat protection, disallowing any secrets to be unlocked for the rest of the SRB2 session. Development mode cannot be activated in netgames.
Development mode's features are split into twelve parts. Each part has its own set of debug messages and/or HUD attributes for debugging a particular feature or component of the game, and is enabled by toggling on the corresponding flag. The values of multiple flags can be added together for a particular combination of features. Either the decimal or hexadecimal values can be used with the
devmode command – e.g.
devmode 4095 (or
devmode 0xFFF) will turn all of development mode's features on, and
devmode 0 will turn all of them off.
||Basic||Displays basic information on the HUD, such as the player's map coordinates and angle.|
||Detailed||Displays more detailed information on the HUD, such as the player's X/Y/Z momentum, scale and ceiling/floor Z heights.|
||Randomizer||Displays information for random seeds on the HUD.|
||Render||Prints rendering-related debugging messages into the console.|
||NiGHTS Basic||Displays basic information for NiGHTS mode on the HUD, such as timers for power-ups, links and bumpers, amount left in the drill meter, and displaying milliseconds as well as seconds for the time left as NiGHTS. Also prints messages into the console signaling when the Ideya Drone displays the "GOAL" sign or not.|
||NiGHTS||When playing as NiGHTS Super Sonic, axis transfers are displayed in-game as a rail ring sparkle trail stretching outwards from the point of the axis transfer and at the height of the player. When the player is transferred to another axis, "TRANSFER!" is displayed in the center of the screen. Also prints information on mares, axes and axis transfers into the console.|
||PolyObj||Prints PolyObject-related debugging messages into the console.|
||Gamelogic||Prints miscellaneous debugging messages related to game logic into the console. This includes messages relating to actions.|
||Netplay||Prints netplay-related debugging messages into the console.|
||Memory||Prints memory-related debugging messages into the console. Also displays the amount of heap memory used on the HUD.|
||Setup||Prints setup/initialization-related debugging messages into the console. This includes information for level-loading, loading files into the game, loading ghosts for Record Attack, MD5 computing, etc.|
||Lua||Prints Lua-related debugging messages into the console.|
Console commands requiring development mode
A number of console commands/variables require development mode to be enabled to function, because they modify gameplay in a way that could be considered cheating. Due to this, they cannot be used in netgames (with the exception of
ringslinger). These commands/variables include:
-noresetplayersparameter of the
* If Pandora's Box has been unlocked, these console commands/variables will be available regardless of whether development mode is turned on or not.
When some of development mode's feature flags are turned on, the values of certain game attributes are displayed on the HUD. This section lists the attributes displayed by enabling particular flags.
- X: Shows the X-axis position in fracunits of the player on the map.
- Y: Shows the Y-axis position in fracunits of the player on the map.
- Z: Shows the Z-axis position (height) in fracunits of the player on the map.
- A: Shows the yaw angle that the player is facing on the map in degrees, going counter-clockwise relative to East (0). It does not translate the same way as hoops.
- SHIELD: Shows the current value of
pw_shieldfor the player, in hexadecimal form:
|Value (Hex)||Shield/other details|
|5-7||Unimplemented S3&K Shields|
|100||Fire Flower power-up (value can be combined with values for all other shields including Force)|
|200 - 2FF||Force Shield (200 + no. of extra hits before losing shield; 200 = 1 hit left, 2FF = 256 hits left)|
- SCALE: Shows the player's current scale as a percentage of the normal scale (normal scale is 100%, small scales are < 100%, and large scales are > 100%).
- DASH: Shows the player's spindashing speed as a fraction of the player character's maxdash value, displayed as such: dashspeed/maxdash
- AIR: Shows both underwater and space countdown timers (
pw_spacetime), showing how many tics the player has left to survive before drowning/suffocating. When the player is neither underwater or in space, they will both be 0. These are displayed as such: underwater, spacetime
- FLAGS: Shows which of the player's flags are currently turned on. Four such flags are shown here, represented by four pieces of colored text that turn green when on and red when off:
- JM is for whether the player is holding the jump button or not.
- JD is for whether the player is currently in a "jumping" state at all.
- SP is for whether the player is spinning or not.
- ST is for whether the player is charging up a spindash or not.
- CEILZ: Shows the ceiling height in fracunits of the lowest tangible ceiling above the player's head.
- FLOORZ: Shows the floor height in fracunits of the highest tangible floor below the player's feet.
- CNVX: Shows the X-axis momentum of the player produced by a conveyor belt or wind/current.
- CNVY: Shows the Y-axis momentum of the player produced by a conveyor belt or wind/current.
- PLTZ: Shows the Z-axis momentum of the player produced by a moving platform the player is standing on.
- MOMX: Shows the X-axis momentum of the player not from a conveyor belt or wind/current.
- MOMY: Shows the Y-axis momentum of the player not from a conveyor belt or wind/current.
- MOMZ: Shows the Z-axis momentum of the player.
- SPEED: Shows the combined X-axis and Y-axis momentum of the player.
- Init: Shows the initial random seed value, in hexadecimal form.
- Seed: Shows the current random seed value, in hexadecimal form.
- ==: Shows the next
P_RandomFixedoutput value, converted to a decimal number between 0 and 1, that would be given with the current random seed value.
- Heap used: Shows the total heap memory used, in KB.
Pressing the Tab key while in development mode will show the automap, which is a map of the level as viewed from above. This feature is retained from Doom, where it was a regular game feature that could be used in normal gameplay. However, since SRB2's map layouts are largely straightforward and exploration is rewarded with hidden items, the automap feature can only be activated via development mode. Unlike in Doom, the full map is shown even if the player has not visited certain areas yet.
Keep in mind that the automap will not work in any significantly large map, which includes several of SRB2's official stages.
The automap displays Objects and linedefs in the map in a variety of colors to highlight what they are exactly:
|Map items||Displayed as|
w/ differing ceiling heights
w/ differing floor heights
|"Thok barrier" linedefs
(two-sided linedefs w/ height 0 on one side)
Several keys perform actions inside the automap:
|Tab||Toggles on/off the automap: if in normal view, start up the automap; if not, exit the automap and return to normal view.|
|Arrow keys||If follow mode is off, these can be used to move the portion of the map viewed with the automap. Otherwise, these do nothing.|
|F||Toggles follow mode, which is enabled by default. If follow mode is on, the map is centered on the player and moves with them; if it is off, the arrow keys can be used to move the portion of the map viewed with the automap separately from the player itself, though this doesn't necessarily stop the player from moving.|
|G||Toggles grid lines.|
|0||Toggles between the current zoom level being used and the maximum limit for zooming out.|
If one of these keys has also been mapped to a gameplay function (e.g., running or jumping), the above table overrides that key's default behavior during automap mode. All other keys can be used as normal, however.
NiGHTS development mode
As NiGHTS Super Sonic, development mode (with the "NiGHTS" flag set) illustrates the behavior of transferring Axes. It displays the Axis Transfers as the game interprets them, a wall starting at the center of the Axis that Super Sonic breaks off, and stretching infinitely through the point of the relevant Axis Transfer. Crossing the wall registers the Axis Transfer. Transferring Axes will cause "TRANSFER!" to be displayed in the center of the screen as well. The player actually gets hurt by the visual cue of the wall created by development mode, so it is recommended to activate God mode in this situation.