Developer Mode: Difference between revisions

m (adding release-update template)
(→‎Runtime scripting: minor rewrite)
(4 intermediate revisions by the same user not shown)
Line 1: Line 1:
[[Image:TheDayIsMine_crate.png|frame|Developer Mode's cheat code on [[Easter_eggs#Old_Man_Murray|a special crate]] in Syndicate Warehouse.]]
[[Image:TheDayIsMine crate.png|frame|Developer Mode's cheat code on [[Easter eggs#Old Man Murray|a special crate]] in Syndicate Warehouse.]]
{{UpdatedForOniX|1.0.0}}
{{UpdatedForOniX|1.0.0}}
{{TOCfloat|limit=3}}
{{TOCfloat|limit=3}}
Developer Mode is a bundle of features created by [[Bungie West]] to help them develop [[Oni]]: a console line for entering scripting commands, manual camera controls, and various debugging features. It was traditionally activated with the [[Cheats|cheat code]] '''thedayismine''', but see "Unlocking it" and "Activating it" below before trying the code.
Developer Mode is a bundle of features created by [[Bungie West]] to help them develop [[Oni]]: a console line for entering scripting commands, manual camera controls, and various debugging features. It was traditionally activated with the [[Cheats|cheat code]] '''thedayismine''', but see "Unlocking it" and "Activating it" below before trying the code.


Despite being hinted at by a crate texture (right) and appearing on a leaked list of cheat codes during beta testing, this cheat code did not work upon Oni's release, and it was long believed that Developer Mode had been cut from retail versions of Oni. However, Dev Mode is actually present in ''all'' available versions of Oni. It just needed to be unlocked, as the community [[History_of_Oni_modding/The_tale_of_Dev_Mode|learned back in 2006]].
Despite being hinted at by a crate texture (right) and appearing on a leaked list of cheat codes during beta testing, this cheat code did not work upon Oni's release, and it was long believed that Developer Mode had been cut from retail versions of Oni. However, Dev Mode is actually present in ''all'' available versions of Oni. It just needed to be unlocked, as the community [[History of Oni modding/The tale of Dev Mode|learned back in 2006]].


Below you will find download links, unlocking instructions, and finally an overview of the Developer Mode's features. For Dev Mode features lurking in the PS2 version of Oni, first discovered in 2017, see [[Oni (PlayStation 2)]].
Below you will find download links, unlocking instructions, and finally an overview of the Developer Mode's features. For Dev Mode features lurking in the PS2 version of Oni, first discovered in 2017, see [[Oni (PlayStation 2)]].
Line 17: Line 17:
You may want to read this if your Windows version of Oni is not covered by the above DLL (e.g. if you have an odd language version) or if you are on a Mac that cannot run the Intel build (if you're using an old PowerPC Mac, note that a Dev Mode-enabled version of The Omni Group's "Mac OS X port" is [[OMNI|HERE]]).
You may want to read this if your Windows version of Oni is not covered by the above DLL (e.g. if you have an odd language version) or if you are on a Mac that cannot run the Intel build (if you're using an old PowerPC Mac, note that a Dev Mode-enabled version of The Omni Group's "Mac OS X port" is [[OMNI|HERE]]).


First, get a good hex editor. Ideally, it should allow you to search for sequences containing joker characters (that is, wildcards or bit masks). One such editor for Windows is [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32]. On Macs, [http://www.cihexviewer.com/ CI Hex Viewer] is free, powerful, and can perform the search you need, but [http://ridiculousfish.com/hexfiend/ Hex Fiend] has a better comparison function so you can check your work afterward (open the original and edited binaries and choose File > Compare "Oni" and "Oni").
First, get a good hex editor. Ideally, it should allow you to search for sequences containing joker characters (that is, wildcards or bit masks). One such editor for Windows is [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32]. On Macs, [http://www.cihexviewer.com/ CI Hex Viewer] is free, powerful, and can perform the search you need, but [https://ridiculousfish.com/hexfiend/ Hex Fiend] has a better comparison function so you can check your work afterward (open the original and edited binaries and choose File > Compare "Oni" and "Oni").


====Cheat code lookup tables====
====Cheat code lookup tables====
Line 101: Line 101:


;Cheat lookup table
;Cheat lookup table
:When you type characters in the Pause screen, the text you enter is progressively compared with all the strings in the cheat table.
:When you type characters on the Data Comlink screen (the F1 pause screen), the text you enter is progressively compared with all the strings in the cheat table.
:When and if there is a match, the corresponding confirmation message is displayed for enablement/confirmation, or for disablement if the cheat was already on, and the corresponding cheat event takes effect when the Pause screen is closed.
:When and if there is a match, the corresponding confirmation message is displayed – for activation, for recognition (when the cheat is not an on/off state but an action to perform), or for deactivation if the cheat was already on and the cheat event takes effect when the Data Comlink is closed.
:In full, each row of the cheat table consists of:
:In full, each row of the cheat table consists of:
:*a pointer to the cheat code string
:*a pointer to the cheat code string
Line 125: Line 125:
where the ## are joker characters (wildcard bytes). Once you've found that data (make sure it occurs only once in the file), replace the '''14''' with a '''0B'''.
where the ## are joker characters (wildcard bytes). Once you've found that data (make sure it occurs only once in the file), replace the '''14''' with a '''0B'''.


Developer Mode will now be enabled/disabled every time you type '''killmequick''' at the Pause screen; you'll get "Ultra Mode Enabled" and "Ultra Mode Disabled" as confirmation messages.
Developer Mode will now be enabled/disabled every time you type '''killmequick''' on the Data Comlink (pause) screen; you'll get "Ultra Mode Enabled" and "Ultra Mode Disabled" as confirmation messages.
{{Divhide|end}}
{{Divhide|end}}


Line 133: Line 133:


===Enter the cheat code===
===Enter the cheat code===
Enter the Pause screen (default key F1) and look for a confirmation message after typing the Developer Mode cheat '''thedayismine''' (or '''killmequick''' if you followed the DIY tutorial above). You can also just type '''x''' when the Daodan DLL or Mac Intel build is being used.
Enter the Data Comlink (default key F1) and look for a confirmation message after typing the Developer Mode cheat '''thedayismine''' (or '''killmequick''' if you followed the DIY tutorial above). You can also just type '''x''' when the Daodan DLL or Mac Intel build is being used.


==Using the console==
==Using the console==
Line 140: Line 140:
|width=95px align=center style="border-width:4px 4px 2px 2px; border-radius:1em; box-shadow:inset 0rem -0.8rem 2rem #dadada;"|<span style="font-size:150%">§</span><br><span style="font-size:150%; top:0.3em; position:relative">½</span>
|width=95px align=center style="border-width:4px 4px 2px 2px; border-radius:1em; box-shadow:inset 0rem -0.8rem 2rem #dadada;"|<span style="font-size:150%">§</span><br><span style="font-size:150%; top:0.3em; position:relative">½</span>
|width=95px align=center style="border-width:4px 4px 2px 2px; border-radius:1em; box-shadow:inset 0rem -0.8rem 2rem #dadada;"|<span style="font-size:150%">°</span><br><span style="font-size:150%; top:0.3em; position:relative">^</span>
|width=95px align=center style="border-width:4px 4px 2px 2px; border-radius:1em; box-shadow:inset 0rem -0.8rem 2rem #dadada;"|<span style="font-size:150%">°</span><br><span style="font-size:150%; top:0.3em; position:relative">^</span>
|width=95px align=center style="border-width:4px 4px 2px 2px; border-radius:1em; box-shadow:inset 0rem -0.8rem 2rem #dadada;"|<span style="font-size:150%"></span><br><span style="font-size:150%; top:0.3em; position:relative">2</span>
|-
|-
|align=center style="border-width:0px"|U.S.<br>QWERTY
|align=center style="border-width:0px"|U.S.<br>QWERTY
|align=center style="border-width:0px"|Danish<br>QWERTY
|align=center style="border-width:0px"|Danish<br>QWERTY
|align=center style="border-width:0px"|German<br>QWERTZ
|align=center style="border-width:0px"|German<br>QWERTZ
|align=center style="border-width:0px"|French<br>AZERTY
|}
|}
By default, Oni auto-binds the "console" toggle to the key to the left of the numeric row. On U.S. QWERTY keyboards, this is the key with a grave accent, `, in the lowercase position and a tilde, ~, in the uppercase position. It is usually called the "tilde key" by users even though it's really the "grave accent key".
By default, Oni auto-binds the "console" toggle to the key to the left of the numeric row. On U.S. QWERTY keyboards, this is the key with a grave accent, `, in the lowercase position and a tilde, ~, in the uppercase position. It is usually called the "tilde key" by users even though it's really the "grave accent key".


On non-U.S. keyboards, that key may not be recognized. Just add a line like "bind leftalt to console" to '''key_config.txt''' in your Oni folder and you'll be able to open the console with that key. In some cases, this bound key will not ''close'' the console; however, pressing the grave accent key, oddly enough, may work. Or you can press the appropriate key for your layout:
On non-U.S. keyboards, that key may not be present. The default key for your layout is depicted to the right:
:Danish QWERTY: The ½ key to the left of the numeric row.
:German QWERTZ: The circumflex accent key, ^.
:French AZERTY: The <sub>2</sub> key to the left of the numeric row.


Danish QWERTY: The ½ key to the left of the numeric row.
Or you can simply add a line like "bind z to console" to '''key_config.txt''' in your Oni folder and you'll be able to open the console with that key. In some cases, this bound key will not ''close'' the console, but pressing the grave accent key will, oddly enough.
 
German QWERTZ: The circumflex accent key, ^. In Windows, if playing Oni in windowed mode, you should use "rightalt" as your alternative console binding because "leftalt" activates the window's menu, stealing Oni's controls.


===Console output glitch===
===Console output glitch===
When Developer Mode is active, Oni prints debug messages about in-game events along the bottom-left of the screen. Past messages scroll up the screen and fade. In some situations, messages don't fade (e.g. if character debugging is enabled or you are currently using the console line).
When Developer Mode is active, Oni prints debug messages about in-game events along the bottom-left of the screen. Past messages scroll up the screen and fade. In some situations, messages don't fade (e.g. if character debugging is enabled or you are currently using the console line).


The easiest way to check whether that output works at all is to press '''F8''': the character class change is acknowledged with a console message.
The easiest way to check whether console output works at all is to press '''F8''': the character class change is acknowledged with a console message.


If you don't see anything, that means console output is broken in your version of Oni. If you're using the Windows version of Oni and you applied Ian's patch (the old WinXP patch, no longer offered because it is superseded by the Daodan DLL), that may be what disabled console output. In Windows demo Oni, both console output and console input are invisible (i.e. you can enter script commands, but you're "blindfolded").
If you don't see anything, console output is broken in your version of Oni. The old WinXP patch (no longer offered because it is superseded by the Daodan DLL) was known to disable console output. In Windows demo Oni, both console output and console input are invisible (i.e. you can enter script commands, but you're "blindfolded").


==Features==
==Features==
Line 558: Line 561:


===Runtime scripting===
===Runtime scripting===
====Basic idea====
Almost anything that you can write in a [[BSL]] script you can enter at runtime with the console. One major thing you can't do is register new variables and functions. You can only call existing functions and get/set the values of existing variables. "Existing" means either built-in ones (see [[BSL:Functions]] and [[BSL:Variables]]), or ones found in the level scripts, or ones defined by scripts you may have added to the current level.
(Almost) anything you write in scripts you can enter at runtime with the console. The only thing you can't do is register new variables and functions.
 
You can call existing functions, check on the values of existing variables. "Existing" means either built-in ones, or part of the original level logic, or part of your own scripts for the given level.
 
If a function/variable was succesfully registered by Oni during level load, you will be able to refer to them from the console.
 
You will even be able to browse the registered variables/functions with the '''Tab''' key, while typing at the console. '''Tab''' autocompletes the command being typed, then cycles through all available commands in (hex)alphabetical order (A...Z come before a...z). '''Shift+Tab''' lets you go back.
 
Previous commands can be navigated with up and down arrows. You can't insert/delete text in the middle of a command; you have to use '''Backspace'''.


The only keys that have an effect while the console is active are: '''Escape''', '''Enter''', '''Backspace''', '''(Shift+)Tab''', ASCII character keys and the arrow keys.
While typing on the console line, you'll see a suggested autocompletion for the command you're typing; Tab accepts the autocomplete, and then Tab or Shift-Tab will cycle forward/backward through adjacent commands in ASCIIbetical order (A…Z comes before a…z). Previous commands from the current session can be retrieved with the up/down arrows. You can't insert/delete text in the middle of a command; you have to use Backspace. Copy and Paste are not available either.


If you press an illegal key during console input (such as F1), the input display will freeze; hit '''Tab''' a few times to fix.
If you press an illegal key during console input (such as F1), the input display will freeze; hit Tab a few times to fix.


====Limitations====
===Cheating===
Obviously, if Oni is experiencing graphical issues and you have no console output, runtime scripting can be a bit frustrating. Even more so if console ''input'' is invisible -- you're in for some ''blindfolded'' scripting then. Still, there are a few commands which you can type in as equivalents to regular cheats:
There are a few commands which you can type in as equivalents to regular cheat codes, and more that you can't do with cheats:
:'''chr_nocollision 0 1''' and '''chr_nocollision 0 0''' enable/disable no-clipping. When in no-clipping mode, you can't fall down; thus, jumping makes you flail in midair, and eventually you die (so be careful about that)
*"chr_nocollision 0 1" and "chr_nocollision 0 0" enable/disable no-clip, allowing you to walk through walls. When in no-clip mode, you can't fall; thus, jumping makes you flail in midair, and eventually you die (so try not to jump).
:'''give_powerup shield''' gives you a force shield (which you can't have with '''fatloot''')
*"give_powerup shield" gives you a force shield (which you can't get with '''fatloot''').
:'''dump_docs''' prints all the registered commands/variables to a file in your Oni folder (so you know just what you can type)
*See [[Cheats]] for the BSL equivalents to various other cheats.


[[Category:Engine docs]][[Category:OniX-affected articles]]
[[Category:Engine docs]][[Category:OniX-affected articles]]