Developer Mode: Difference between revisions

From OniGalore
Jump to navigation Jump to search
(moving tip on German console access to Console input section)
m (→‎Hotkeys: no more questions)
(41 intermediate revisions by 5 users not shown)
Line 1: Line 1:
[[Image:TheDayIsMine_crate.png|frame|Found on a crate in<br>Syndicate Warehouse]]
[[Image:TheDayIsMine_crate.png|frame|Found on a crate in<br>Syndicate Warehouse]]
{{TOCfloat|limit=3}}
{{TOCfloat|limit=3}}
Developer Mode is a bundle of features created by [[Bungie West]] to help them develop [[Oni]] -- a console, camera controls, and various debugging features -- that was associated with the [[Cheats|cheat code]] '''thedayismine''' (see picture above for related [[Easter eggs|Easter egg]]). 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; it had only been observed to work in the [[Mac beta]] that was leaked during Oni's beta testing. However, this mode is actually present in ''all'' available versions of Oni (except PS2). It just needs to be unlocked, as the community learned [[History_of_Oni_modding/The_tale_of_Dev_Mode|back in 2006]].
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 is enabled by the [[Cheats|cheat code]] '''thedayismine''' (see "Download it..." below before trying the code).
 
Despite being hinted at by a crate texture (right) and leaked as part of a 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 (except PS2). It just needed to be unlocked, as the community learned [[History_of_Oni_modding/The_tale_of_Dev_Mode|back in 2006]].


Below you will find download links, unlocking instructions, and finally an overview of the Developer Mode's features.
Below you will find download links, unlocking instructions, and finally an overview of the Developer Mode's features.
Line 7: Line 9:
==Getting it to work==
==Getting it to work==
===Download it...===
===Download it...===
In Windows, you can install the [[Daodan DLL]] to unlock Developer Mode. On the Mac, the Intel build already has Dev Mode unlocked; it can be found [[AE:FERAL|HERE]].
In Windows, you can install the [[Daodan DLL]] to unlock Developer Mode; note that the [[Anniversary Edition]] installs the Daodan DLL automatically.<br>
On the Mac, the [[AE:FERAL|Intel build]] of Oni already has Dev Mode unlocked; note that the Anniversary Edition installs the Intel build automatically.


{{Divhide|...or do it yourself}}
{{Divhide|...or do it yourself}}
Line 107: Line 110:


;Data size on different platforms
;Data size on different platforms
:In the PC, PC demo and Mac OS X (PPC) builds, every row of the lookup table takes up 16 bytes; the 3 pointers and the ID are 4-byte data words (Little Endian on PC, Big Endian on PPC Macs); if a cheat has no "disabled" message, the row's third pointer is null.
:In the Windows retail, Windows demo and macOS PPC builds, every row of the lookup table takes up 16 bytes; the 3 pointers and the ID are 4-byte data words (Little Endian on PC, Big Endian on PPC Macs); if a cheat has no "disabled" message, the row's third pointer is null.
<!--This does not appear to be true, not sure what version geyser was looking at. The item below this claimed to be for the Mac beta, but it's actually true of the Mac retail app. --Iritscen
<!--This does not appear to be true, not sure what version geyser was looking at. The item below this claimed to be for the Mac beta, but it's actually true of the Mac retail app. --Iritscen
:In the Mac OS 9 retail and demo, every row of the lookup table takes up 8 bytes; the 3 pointers and the ID are 3-byte data words (Big Endian); if a cheat has no "disabled" message, the last byte of the third element is taken up by the ID (the remaining 2 bytes are garbage, as well as the ID field).-->
:In the Mac OS 9 retail and demo, every row of the lookup table takes up 8 bytes; the 3 pointers and the ID are 3-byte data words (Big Endian); if a cheat has no "disabled" message, the last byte of the third element is taken up by the ID (the remaining 2 bytes are garbage, as well as the ID field).-->
Line 113: Line 116:


====Let's kill killmequick====
====Let's kill killmequick====
In the PC, PC demo and Mac OS X (PPC) builds, there's extra space at the end of the lookup table and where the cheat codes/messages are stored, so one can add '''thedayismine''' as an extra cheat. On Mac OS 9, the data is packed tighter (and the text strings are stored together with their size), so the only easy way is to replace an existing cheat. Since replacing an existing cheat is the only solution that works on all platforms, the following mini-tutorial will explain how to bind the Developer Mode cheat event to the Ultra Mode cheat code '''killmequick''' (since hardly anyone uses that cheat).
In the Windows, Windows demo and macOS PPC builds, there's extra space at the end of the lookup table and where the cheat codes/messages are stored, so one can add '''thedayismine''' as an extra cheat. On Mac OS 9, the data is packed tighter (and the text strings are stored together with their size), so the only easy way is to replace an existing cheat. Since replacing an existing cheat is the only solution that works on all platforms, the following mini-tutorial will explain how to bind the Developer Mode cheat event to the Ultra Mode cheat code '''killmequick''' (since hardly anyone uses that cheat).


====Finding the lookup table====
====Finding the lookup table====
Open the executable (or the data fork of the executable in the Mac OS 9 build), after backing it up of course.... We shall look for the last three elements of the table, corresponding to '''fistsoflegend''', '''killmequick''' and '''carousel'''.
Open the executable (or the data fork of the executable in the Mac OS 9 build), after backing it up of course.... We shall look for the last three elements of the table, corresponding to '''fistsoflegend''', '''killmequick''' and '''carousel'''.
;In the PC retail and PC demo builds, look for '''13 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 14 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 15 00 00 00'''
;In the Windows retail and demo builds, look for '''13 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 14 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 15 00 00 00'''
;In the Mac OS X (PPC) build, look for '''00 00 00 13 ## ## ## ## ## ## ## ## ## ## ## ## 00 00 00 14 ## ## ## ## ## ## ## ## ## ## ## ## 00 00 00 15''' ([[:File:Finding killmequick - Omni build.jpg|sample pic]])
;In the macOS PPC build, look for '''00 00 00 13 ## ## ## ## ## ## ## ## ## ## ## ## 00 00 00 14 ## ## ## ## ## ## ## ## ## ## ## ## 00 00 00 15''' ([[:File:Finding killmequick - Omni build.jpg|sample pic]])
;In the Mac OS 9 builds, look for '''00 13 ## ## ## ## ## ## 00 14 ## ## ## ## ## ## 00 15''' ([[:File:Finding killmequick - Mac OS 9 build.jpg|sample pic]])
;In the Mac OS 9 build, look for '''00 13 ## ## ## ## ## ## 00 14 ## ## ## ## ## ## 00 15''' ([[:File:Finding killmequick - Mac OS 9 build.jpg|sample pic]])
;
;
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'''.
Line 128: Line 131:
==Using it==
==Using it==
===First check===
===First check===
Cheats are normally unlocked when you finish the full version of the game. For unlocking cheats "manually" (especially necessary with the demos), see [[Cheats|HERE]]
Cheats are normally unavailable until you finish the full version of the game, and Developer Mode can only be activated through a cheat code. For unlocking cheats "manually" (especially necessary with the demos), see [[Cheats|HERE]]. However, cheats are enabled all the time when the Daodan DLL is installed in Windows or when using the Mac Intel build.


Let's say cheats are enabled and Developer Mode has been made available ''via'' the '''thedayismine''' cheatcode (or simply '''x''' with Daodan DLL or Mac Intel build).
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, or just '''x''' -- the DLL and Intel build provide that shortcut). However, you may not notice anything special when you get back to the game (although there should be occasional console messages appearing at the bottom-left).  
 
Just type the Developer Mode cheat and watch for the confirmation message. However, you may not notice anything special when you get back to the game (although there should be occasional console messages appearing at the bottom-left).  


The quickest way to tell whether Dev Mode definitely works, right after you get the confirmation message, is to exit the Diary screen and to press '''End'''. That should teleport you to where the camera is (usually back and up, possibly through walls and ceilings).
The quickest way to tell whether Dev Mode definitely works, right after you get the confirmation message, is to exit the Diary screen and to press '''End'''. That should teleport you to where the camera is (usually back and up, possibly through walls and ceilings).
Line 143: Line 144:
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 that 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 unfortunately disabled in your version of Oni. If you're on PC retail, you may have applied [[Troubleshooting/Blam|Ian's patch]] (aka XP patch), which disables console output. On PC demo, 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, that means console output is unfortunately disabled 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").


===Console input===
===Console input===
U.S. QWERTY: By default, Oni auto-binds the "console" toggle to the key which on U.S. keyboards has a grave accent, <span style="font-size:200%; top:0.3em; position:relative">`</span>, in the lowercase position and a tilde, <span style="font-size:175%">~</span>, in the uppercase position. It is usually called the "tilde key" by users, and perhaps even elsewhere on this wiki; however, you would have to hold Shift to type a tilde, and the console is activated by just pressing the key without Shift, thus it is actually the "grave accent key" which activates the console. 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.
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, <span style="font-size:200%; top:0.3em; position:relative">`</span>, in the lowercase position and a tilde, <span style="font-size:175%">~</span>, in the uppercase position. It is usually called the "tilde key" by users, and perhaps even elsewhere on this wiki; however, you would have to hold Shift to type a tilde, and the console is activated by just pressing the key without Shift, thus it is actually the "grave accent key" which activates the console.


German QWERTZ: By default, Oni uses the circumflex accent key, <span style="font-size:150%">^</span>, for console access. On Windows, when 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.
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:


Danish QWERTY: The <span style="font-size:150%">½</span> key to the left of the numeric row.
German QWERTZ: The circumflex accent key, <span style="font-size:150%">^</span>. 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.
===Features===
Many of the features listed below no longer work as intended, or work at all, either due to changes to the code made at the end of development or the absence in retail Oni of resources that the features were intended to call upon, such as [[level0_Tools]]. Nevertheless, some of these features are helpful for modders, most notably the camera controls and dev console.


===Usage===
====Hotkeys====
====Hotkeys====
Below are Oni's hardcoded mappings for Developer Mode functions. The Alt key (Option key on Macs) can be used in placed of Ctrl. Alternate mappings are welcome if you have another version of Oni that you would like to have listed below.
Below are Oni's hardcoded mappings for Developer Mode functions. The Alt key (Option key on Macs) can be used in place of Ctrl. Ctrl is called "Strg" on German keyboards.
 
The "U.S. QWERTY" column gives the standard hotkeys (the keys intended by the American developers to be pressed). In the "German QWERTZ" and "French AZERTY" columns, the hotkeys differing from U.S. QWERTY are shown. If you have another type of keyboard that you would like to have incorporated into the table, feel free to add a column (or ask for it on the talk page).


The QWERTY column is for the English release of Oni, for U.S. QWERTY keyboards. The QWERTZ column is for German Oni and only lists the hotkeys that are different from QWERTY on German QWERTZ keyboards; note that on German keyboards, the "Ctrl" key is named "Strg".
If a hotkey's functionality has been restored in Windows using the Daodan DLL, it will be checked off here. Stuff that doesn't work has been grouped at the end of the table.


{|class="wikitable" style="margin-left:auto; margin-right:auto;"
{|class="wikitable" style="margin-left:auto; margin-right:auto;"
!Hotkey (QWERTY)
!U.S. QWERTY
!Hotkey (QWERTZ)
!German QWERTZ
!French AZERTY
!Description
!Description
!width=75|Windows
!width=75|Windows
!width=75|Mac
!width=75|Mac
|-
|-
|Cntl+Shift+o
|` (grave accent)
|
|bgcolor=silver|^
|Draw No-Occlusion Quads (only makes console screens disappear)
|bgcolor=silver|²
|Displays console
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|colspan=3|Ctrl+Shift+O
|Hide non-(visually-)occluding quads '''(1)'''
|
|
|align=center|{{ckblue}}
|-
|colspan=3|Ctrl+Shift+S
|Hide non-sound-occluding quads '''(2)'''
|
|
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+i
|colspan=3|Ctrl+Shift+<tt>I</tt>
|
|Draw invisible quads
|Draw Invisible Quads
|
|
|
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+y
|Ctrl+Shift+Y
|Cntl+Shift+z
|bgcolor=silver|Ctrl+Shift+Z
|Performance Display (includes FPS)
|Ctrl+Shift+Y
|<center>{{ckblue}}</center>
|Performance display (includes FPS)
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+t
|colspan=3|Ctrl+Shift+T
|
|Draw only character-colliding geometry
|Draw Character Collision
|
|
|
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+r
|colspan=3|Ctrl+Shift+R
|
|Draw only object-colliding geometry
|Draw Object Collision
|
|
|
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+f
|colspan=3|Ctrl+Shift+F
|
|Fast Mode (runs Oni at up to 24x)
|Fast Mode (runs Oni at up to 24x)
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+g
|colspan=3|Ctrl+Shift+G
|
|Draw Every Frame Mode
|Draw every frame
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|'''(3)'''
|<center>*</center>
|-
|colspan=3|Ctrl+Shift+X
|Toggle show trigger volumes (formerly "Secret X")
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+x
|colspan=3|Ctrl+Shift+Ins
|
|Add flag
|Secret X / (Mac only) Show trigger volumes
|align=center|{{ckblue}}
|
|align=center|'''(4)'''
|<center>{{ckblue}}</center>
|-
|-
|Cntl+Shift+y
|colspan=3|Ctrl+Shift+Del
|
|Delete flag
|Secret Y
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|Cntl+Shift+z
|colspan=3|Ctrl+Shift+U
|
|Unstick player
|Secret Z
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|Cntl+Shift+Ins
|Ctrl+Shift+\
|
|bgcolor=silver|Ctrl+Shift+#
|Add Flag
|bgcolor=silver|Ctrl+Shift+*
|<center>{{ckblue}}</center>
|Displays "Profile on"/"Profile off" (no other known effect)
|align=center|{{ckblue}}
|
|
|-
|-
|Cntl+Shift+Del
|colspan=3|Ctrl+Shift+L
|
|Dumps a screenshot every frame
|Delete Flag
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|-
|-
|Cntl+Shift+u
|colspan=2|. (period)
|
|bgcolor=silver|: (colon)
|Unstick player
|Single Step Mode
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+n
|/
|
|bgcolor=silver| -
|Camera Record
|bgcolor=silver|!
|
|Advance one step (when in Single Step Mode)
|
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+m
|.+/
|
|bgcolor=silver|.+-
|Camera Stop
|bgcolor=silver|:+!
|
|Exit Single Step Mode (press keys simultaneously)
|
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+,
|colspan=3|Ctrl+Shift+Home
|
|Cycle active camera
|Camera Playback
|
|
|
|align=center|{{ckblue}}
|-
|-
|?
|colspan=3|End
|
|Warp to camera
|Place Quad
|align=center|{{ckblue}}
|<center>?</center>
|align=center|{{ckblue}}
|<center>?</center>
|-
|-
|?
|colspan=3|Ctrl+Shift+B
|
|Shows current opponent's logic
|Place Quad Mode
|align=center|{{ckblue}}
|<center>?</center>
|align=center|{{ckblue}}
|<center>?</center>
|-
|-
|Ctrl+Shift+\
|]
|Ctrl+Shift+#
|bgcolor=silver| +
|Profile Toggle
|bgcolor=silver|$
|<center>?</center>
|Freeze animation frame '''(6)'''
|
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|-
|Cntl+Shift+l
|[
|
|bgcolor=silver|Ü
|Dumps a screenshot every frame
|bgcolor=silver|^
|<center>{{ckblue}}</center>
|Advance animation frame '''(6)'''
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|align=center|{{ckblue}}
|-
|-
|Ctrl+Shift+1
|colspan=3|F2
|
|Cutscene Animation 1
|Test One
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|Ctrl+Shift+2
|colspan=3|F3
|
|Cutscene Animation 2
|Test Two
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|Ctrl+Shift+3
|colspan=3|F6
|
|Kill all AIs
|Test Three
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|Ctrl+Shift+4
|colspan=3|Ctrl+F7
|
|Play dead
|Test Four
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|. (period)
|colspan=3|F7, Shift+F7
|
|Cycle weapons (holster to get second weapon)
|Single Step Mode
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|-
|-
|/
|colspan=3|F8, Shift+F8
|
|Cycle characters
|Single Step (when in Single Step Mode)
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|-
|-
|Cntl+Shift+Home
|colspan=3|F9
|
|Start recording
|Change Active Camera
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|End
|colspan=3|F10
|
|Stop recording
|Warp to camera
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|align=center|{{ckblue}}
|<center>{{ckblue}}</center>
|-
|-
|Cntl+Shift+k
|colspan=3|F11
|
|Playback recording
|Kill Particles
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|Backspace
|colspan=3|Return/Enter
|
|Cycle camera modes (see table below for camera controls):<br>1. Normal<br>2. Detached A - mouse still controls character aim<br>3. Detached B - mouse aims camera
|Enter AI Debugger
|align=center|{{ckblue}}
|
|align=center|{{ckblue}}
|
|-
|-
|7
!U.S. QWERTY
|
!German QWERTZ
|Explode One
!French AZERTY
|
!Description
|
!width=75|Windows
!width=75|Mac
|-
|-
|8
|Ctrl+Shift+Y
|
|bgcolor=silver|Ctrl+Shift+Z
|Explode Two
|Ctrl+Shift+Y
|Secret Y '''(5)'''
|
|
|
|
|-
|-
|9
|Ctrl+Shift+Z
|
|bgcolor=silver|Ctrl+Shift+Y
|Explode Three
|Ctrl+Shift+Z
|Secret Z '''(5)'''
|
|
|
|
|-
|-
|0
|colspan=3|Ctrl+Shift+N
|
|Camera recording start
|Explode Four
|
|
|
|
|-
|-
|Cntl+Shift+j
|colspan=2|Ctrl+Shift+M
|
|bgcolor=silver|Ctrl+Shift+,
|Reset Particles
|Camera recording stop
|
|
|
|
|-
|-
|Cntl+Shift+w
|colspan=2|Ctrl+Shift+,
|bgcolor=silver|Ctrl+Shift+;
|Camera recording playback
|
|
|Drop Flag and Add Waypoint
|
|
|
|-
|Cntl+Shift+b
|
|Shows current opponent's logic
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|]
|colspan=3|
|Place quad
|
|
|Freeze (now causes camera drift while on;<br>stopping Freeze mode teleports to camera location)
|
|
|<center>?</center>
|-
|-
|[
|colspan=3|
|Place quad mode
|
|
|Frame Advance (now renders Konoko at camera location)
|
|
|<center>?</center>
|-
|-
|Cntl+Shift+s
|colspan=2|Ctrl+Shift+1
|bgcolor=silver|Ctrl+Shift+&
|Test One
|
|
|Highlight furniture (turns their textures red)
|<center>{{ckblue}}</center>
|<center>?</center>
|-
|F8, Shift+F8
|
|
|Cycle characters
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|Cntl+Shift+p
|colspan=2|Ctrl+Shift+2
|bgcolor=silver|Ctrl+Shift+é
|Test Two
|
|
|Perf Particle
|
|
|<center>?</center>
|-
|-
|Cntl+Shift+;
|colspan=2|Ctrl+Shift+3
|bgcolor=silver|Ctrl+Shift+"
|Test Three
|
|
|Perf Particle Lock
|
|
|<center>?</center>
|-
|-
|=
|colspan=2|Ctrl+Shift+4
|bgcolor=silver|Ctrl+Shift+'
|Test Four
|
|
|Screenshot
|<center>?</center>
|<center>?</center>
|-
|F2
|
|
|Cutscene 1
|<center>{{ckblue}}</center>
|
|-
|-
|F3
|colspan=3|Ctrl+Shift+K
|Kill particles
|
|
|Cutscene 2
|<center>{{ckblue}}</center>
|
|-
|F6
|
|
|Kill All AIs
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|Ctrl+F7
|colspan=3|Backspace
|Enter AI debugger
|
|
|Play dead
|<center>{{ckblue}}</center>
|
|
|-
|-
|F7, Shift+F7
|colspan=2|7
|bgcolor=silver|è
|Explode One
|
|
|Cycle weapons (holster to get second weapon)
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|F9
|
|
|Start recording
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|F10
|colspan=2|8
|bgcolor=silver|_
|Explode Two
|
|
|Stop recording
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|F11
|
|
|Playback recording
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|` (grave accent)
|colspan=2|9
|bgcolor=silver|ç
|Explode Three
|
|
|Displays console
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|Return/Enter
|
|
|Cycle Camera Modes:<br>
Normal<br>
Detached 1-mouse controls aim<br>
Detached 2-mouse controls camera<br>When in a detached mode, the following keys move the camera:
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|<ul><li>NumPad1</li></ul>
|colspan=2|0
|bgcolor=silver|@
|Explode Four
|
|
|Move camera left
|<center>{{ckblue}}</center>
|<center></center>
|-
|<ul><li>NumPad3</li></ul>
|
|
|Move camera right
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|<ul><li>NumPad8</li></ul>
|colspan=3|Ctrl+Shift+J
|Reset particles
|
|
|Move camera forward
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|<ul><li>NumPad5</li></ul>
|
|
|Move camera backward
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|<ul><li>NumPad-</li></ul>
|Ctrl+Shift+W
|bgcolor=silver|Ctrl+Shift+Z
|Ctrl+Shift+W
|Drop flag and add waypoint
|
|
|Move camera up
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|<ul><li>NumPad+</li></ul>
|
|
|Move camera down
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|<ul><li>NumPad6</li></ul>
|colspan=3|Ctrl+Shift+P
|Display particle performance
|
|
|Pan camera left
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|<ul><li>NumPad4</li></ul>
|
|
|Pan camera right
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|-
|<ul><li>Up Arrow</li></ul>
|Ctrl+Shift+;
|bgcolor=silver|Ctrl+Shift+Ö
|bgcolor=silver|Ctrl+Shift+M
|Lock particle performance display
|
|
|Pan camera up
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|-
|<ul><li>Down Arrow</li></ul>
|
|
|Pan camera down
|<center>{{ckblue}}</center>
|<center>{{ckblue}}</center>
|}
|}


'''(1)''' On Macs, Draw Every Frame mode speeds up the game almost to the extent of Fast mode, but with glitchy animations.


'''(2)''' On Macs, these keys will not work without custom key bindings. See note [[Customizing/Binding#Detached camera controls|HERE]] about how to bind these keys.
'''(1)''' This dev feature does not fully function in Windows, so the only non-occluding quads that disappear are console screens.


====German hotkeys====
'''(2)''' This dev feature does not fully function in Windows, so the non-sound-occluding quads remain visible. However, the second aspect of this feature, which marks furniture with a red texture to indicate that it is partially sound-occluding, still works.
 
'''(3)''' On Macs, Draw Every Frame Mode speeds up the game almost to the extent of Fast Mode, but with glitchy animations.
 
'''(4)''' Please see talk page section "Insert key on Macs".
 
'''(5)''' Wouldn't Ctrl+Y and Ctrl+Z conflict with "Performance display"?
 
'''(6)''' "Animation freezing" works on the main character and means two things:
:a) The character's position and pose remain exactly the same as they were at the time of freezing, along with collision shapes (spheres and body parts) and other stuff.
:b) The actual character, unless "pinned" with <tt>[[chr_pin_character]]=1</tt>, will keep moving with the same velocity as at the time of freezing.
:*For regular (grounded) animations, the vertical velocity is zero and the horizontal velocity is determined by the animation frame that was playing at the time of freezing.
:*If airborne (jumping or falling) the current airborne velocity (both vertical and horizontal) at the time of freezing is maintained.
:*Wall collision is disabled, as well as gravity acceleration and the "air" timer (so you can't die from falling for too long while frozen).
:*Floor collision still works, as well as the "off" timer that starts when you step off a ledge, and the downward velocity that is applied then (see [[ONCC]] for details on this downward velocity).
:If one sets <tt>[[chr_pin_character]]=1</tt>, then animation debugging works exactly as intended: there is no drifting, and one can conveniently advance through the frames of the current animation.
:If one does not set <tt>[[chr_pin_character]]=1</tt>, then the frame-freezing functionality does not allow one to study animations, and instead provides a powerful (and risky) teleporting gimmick.
 
====Camera controls====
Note that the camera controls have default mappings, given below, but unlike the developer hotkeys, they are '''custom-bindable'''. In fact, on Macs, the default numpad bindings ''need'' to be customized or they won't work at all. See note [[Customizing/Binding#Detached camera controls|HERE]] about how to bind these keys and fix the Mac numpad controls. Also, the definitions of panning left and right are reversed, as NumPad4 will turn the camera to the left, but its action is called "man_cam_pan_right", and vice versa for NumPad6....
 
After detaching the camera with Enter and flying it away from Konoko, the End key teleports Konoko to the camera position and attaches the camera to her position again. If you turn off collision with "chr_nocollision 0 1" before teleporting, Konoko will not fall out of the air when teleported to the camera position (just don't jump with collision off...).
{|class="wikitable" style="margin-left:auto; margin-right:auto;"
|align="center"|'''Windows'''
{|class="wikitable" style="margin-left:auto; margin-right:auto;"
{|class="wikitable" style="margin-left:auto; margin-right:auto;"
!Hotkey (can use Alt for Cntl)
!Key
!Description
!Result
!Windows
|-
|NumPad 1/3
|Move camera left/right
|-
|NumPad 8/5
|Move camera forward/backward
|-
|NumPad -/+
|Move camera up/down
|-
|NumPad 6/4
|Pan camera left/right
|-
|Up/Down Arrow
|Pan camera up/down
|}
|align="center"|'''Mac'''
{|class="wikitable" style="margin-left:auto; margin-right:auto;"
!Key
!Result
|-
|Left/Right Arrow
|Move camera left/right
|-
|-
| . (period)
|Up/Down Arrow
| Enter Single Step Mode
|Move camera forward/backward
|<center>{{ckblue}}</center>
|-
|-
| -
|Page Up/Down
| Single Step (when in Single Step Mode)
|Move camera up/down
|<center>{{ckblue}}</center>
|-
|-
| Cntl+.
|NumPad 6/4
| Freeze game
|Pan camera left/right
|<center>{{ckblue}}</center>
|-
|-
| Cntl+Shift+.+-
|NumPad 8/2
| Exit Single Step Mode
|Pan camera up/down
|<center>{{ckblue}}</center>
|}
|}
|}


 
===Runtime scripting===
 
====Basic idea====
====Runtime scripting====
=====Basic idea=====
(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.
(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.


Line 591: Line 562:
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.
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'''.
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.


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.
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====
=====Limitations=====
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:
Obviously, if you have no console output, it's a bit frustrating. Even more so if console ''input'' is invisible : you're in for some ''blindfolded'' scripting then.
:'''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)
Still there are a few commands which you can type in as complements to regular cheats :
:'''chr_nocollision 0 1''' and '''chr_nocollision 0 0''' enable/disable no-clipping. When in no-clipping, you can't fall down : jumping makes you flail in midair, and eventually you die (so be careful about that)
:'''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 have 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)
:'''dump_docs''' prints all the registered commands/variables to a file in your Oni folder (so you know just what you can type)
:other stuff...
Also, the available scripting commands may be limited in your version. The most commands are on PC retail, or on beta 4 and earlier. On Mac, the functionality is much more limited (see [[PC vs Mac|HERE]] for details).


[[Category:Modding information]]
[[Category:Engine docs]]

Revision as of 14:50, 25 August 2018

Found on a crate in
Syndicate Warehouse

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 is enabled by the cheat code thedayismine (see "Download it..." below before trying the code).

Despite being hinted at by a crate texture (right) and leaked as part of a 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 (except PS2). It just needed to be unlocked, as the community learned back in 2006.

Below you will find download links, unlocking instructions, and finally an overview of the Developer Mode's features.

Getting it to work

Download it...

In Windows, you can install the Daodan DLL to unlock Developer Mode; note that the Anniversary Edition installs the Daodan DLL automatically.
On the Mac, the Intel build of Oni already has Dev Mode unlocked; note that the Anniversary Edition installs the Intel build automatically.

Using it

First check

Cheats are normally unavailable until you finish the full version of the game, and Developer Mode can only be activated through a cheat code. For unlocking cheats "manually" (especially necessary with the demos), see HERE. However, cheats are enabled all the time when the Daodan DLL is installed in Windows or when using the Mac Intel build.

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, or just x -- the DLL and Intel build provide that shortcut). However, you may not notice anything special when you get back to the game (although there should be occasional console messages appearing at the bottom-left).

The quickest way to tell whether Dev Mode definitely works, right after you get the confirmation message, is to exit the Diary screen and to press End. That should teleport you to where the camera is (usually back and up, possibly through walls and ceilings).

Here's another quick test, meant to see if the Control and Alt keys work fine (on Mac, use the Option key instead of Alt): Ctrl+Shift+U and Ctrl+Alt+U should both perform the "unstick" action; Konoko will shift forward by a small amount.

Console output

In Developer Mode, Oni prints debug messages about in-game events along the bottom-left of the screen. Past messages scroll up across 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.

If you don't see anything, that means console output is unfortunately disabled 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").

Console input

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, and perhaps even elsewhere on this wiki; however, you would have to hold Shift to type a tilde, and the console is activated by just pressing the key without Shift, thus it is actually the "grave accent key" which activates the console.

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:

Danish QWERTY: The ½ key to the left of the numeric row.

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.

Features

Many of the features listed below no longer work as intended, or work at all, either due to changes to the code made at the end of development or the absence in retail Oni of resources that the features were intended to call upon, such as level0_Tools. Nevertheless, some of these features are helpful for modders, most notably the camera controls and dev console.

Hotkeys

Below are Oni's hardcoded mappings for Developer Mode functions. The Alt key (Option key on Macs) can be used in place of Ctrl. Ctrl is called "Strg" on German keyboards.

The "U.S. QWERTY" column gives the standard hotkeys (the keys intended by the American developers to be pressed). In the "German QWERTZ" and "French AZERTY" columns, the hotkeys differing from U.S. QWERTY are shown. If you have another type of keyboard that you would like to have incorporated into the table, feel free to add a column (or ask for it on the talk page).

If a hotkey's functionality has been restored in Windows using the Daodan DLL, it will be checked off here. Stuff that doesn't work has been grouped at the end of the table.

U.S. QWERTY German QWERTZ French AZERTY Description Windows Mac
` (grave accent) ^ ² Displays console Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+O Hide non-(visually-)occluding quads (1) Checkmark 16px blue.png
Ctrl+Shift+S Hide non-sound-occluding quads (2) Checkmark 16px blue.png
Ctrl+Shift+I Draw invisible quads Checkmark 16px blue.png
Ctrl+Shift+Y Ctrl+Shift+Z Ctrl+Shift+Y Performance display (includes FPS) Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+T Draw only character-colliding geometry Checkmark 16px blue.png
Ctrl+Shift+R Draw only object-colliding geometry Checkmark 16px blue.png
Ctrl+Shift+F Fast Mode (runs Oni at up to 24x) Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+G Draw Every Frame Mode Checkmark 16px blue.png (3)
Ctrl+Shift+X Toggle show trigger volumes (formerly "Secret X") Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+Ins Add flag Checkmark 16px blue.png (4)
Ctrl+Shift+Del Delete flag Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+U Unstick player Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+\ Ctrl+Shift+# Ctrl+Shift+* Displays "Profile on"/"Profile off" (no other known effect) Checkmark 16px blue.png
Ctrl+Shift+L Dumps a screenshot every frame Checkmark 16px blue.png Checkmark 16px blue.png
. (period) : (colon) Single Step Mode Checkmark 16px blue.png Checkmark 16px blue.png
/ - ! Advance one step (when in Single Step Mode) Checkmark 16px blue.png Checkmark 16px blue.png
.+/ .+- :+! Exit Single Step Mode (press keys simultaneously) Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+Home Cycle active camera Checkmark 16px blue.png
End Warp to camera Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+Shift+B Shows current opponent's logic Checkmark 16px blue.png Checkmark 16px blue.png
] + $ Freeze animation frame (6) Checkmark 16px blue.png Checkmark 16px blue.png
[ Ü ^ Advance animation frame (6) Checkmark 16px blue.png Checkmark 16px blue.png
F2 Cutscene Animation 1 Checkmark 16px blue.png Checkmark 16px blue.png
F3 Cutscene Animation 2 Checkmark 16px blue.png Checkmark 16px blue.png
F6 Kill all AIs Checkmark 16px blue.png Checkmark 16px blue.png
Ctrl+F7 Play dead Checkmark 16px blue.png Checkmark 16px blue.png
F7, Shift+F7 Cycle weapons (holster to get second weapon) Checkmark 16px blue.png Checkmark 16px blue.png
F8, Shift+F8 Cycle characters Checkmark 16px blue.png Checkmark 16px blue.png
F9 Start recording Checkmark 16px blue.png Checkmark 16px blue.png
F10 Stop recording Checkmark 16px blue.png Checkmark 16px blue.png
F11 Playback recording Checkmark 16px blue.png Checkmark 16px blue.png
Return/Enter Cycle camera modes (see table below for camera controls):
1. Normal
2. Detached A - mouse still controls character aim
3. Detached B - mouse aims camera
Checkmark 16px blue.png Checkmark 16px blue.png
U.S. QWERTY German QWERTZ French AZERTY Description Windows Mac
Ctrl+Shift+Y Ctrl+Shift+Z Ctrl+Shift+Y Secret Y (5)
Ctrl+Shift+Z Ctrl+Shift+Y Ctrl+Shift+Z Secret Z (5)
Ctrl+Shift+N Camera recording start
Ctrl+Shift+M Ctrl+Shift+, Camera recording stop
Ctrl+Shift+, Ctrl+Shift+; Camera recording playback
Place quad
Place quad mode
Ctrl+Shift+1 Ctrl+Shift+& Test One
Ctrl+Shift+2 Ctrl+Shift+é Test Two
Ctrl+Shift+3 Ctrl+Shift+" Test Three
Ctrl+Shift+4 Ctrl+Shift+' Test Four
Ctrl+Shift+K Kill particles
Backspace Enter AI debugger
7 è Explode One
8 _ Explode Two
9 ç Explode Three
0 @ Explode Four
Ctrl+Shift+J Reset particles
Ctrl+Shift+W Ctrl+Shift+Z Ctrl+Shift+W Drop flag and add waypoint
Ctrl+Shift+P Display particle performance
Ctrl+Shift+; Ctrl+Shift+Ö Ctrl+Shift+M Lock particle performance display


(1) This dev feature does not fully function in Windows, so the only non-occluding quads that disappear are console screens.

(2) This dev feature does not fully function in Windows, so the non-sound-occluding quads remain visible. However, the second aspect of this feature, which marks furniture with a red texture to indicate that it is partially sound-occluding, still works.

(3) On Macs, Draw Every Frame Mode speeds up the game almost to the extent of Fast Mode, but with glitchy animations.

(4) Please see talk page section "Insert key on Macs".

(5) Wouldn't Ctrl+Y and Ctrl+Z conflict with "Performance display"?

(6) "Animation freezing" works on the main character and means two things:

a) The character's position and pose remain exactly the same as they were at the time of freezing, along with collision shapes (spheres and body parts) and other stuff.
b) The actual character, unless "pinned" with chr_pin_character=1, will keep moving with the same velocity as at the time of freezing.
  • For regular (grounded) animations, the vertical velocity is zero and the horizontal velocity is determined by the animation frame that was playing at the time of freezing.
  • If airborne (jumping or falling) the current airborne velocity (both vertical and horizontal) at the time of freezing is maintained.
  • Wall collision is disabled, as well as gravity acceleration and the "air" timer (so you can't die from falling for too long while frozen).
  • Floor collision still works, as well as the "off" timer that starts when you step off a ledge, and the downward velocity that is applied then (see ONCC for details on this downward velocity).
If one sets chr_pin_character=1, then animation debugging works exactly as intended: there is no drifting, and one can conveniently advance through the frames of the current animation.
If one does not set chr_pin_character=1, then the frame-freezing functionality does not allow one to study animations, and instead provides a powerful (and risky) teleporting gimmick.

Camera controls

Note that the camera controls have default mappings, given below, but unlike the developer hotkeys, they are custom-bindable. In fact, on Macs, the default numpad bindings need to be customized or they won't work at all. See note HERE about how to bind these keys and fix the Mac numpad controls. Also, the definitions of panning left and right are reversed, as NumPad4 will turn the camera to the left, but its action is called "man_cam_pan_right", and vice versa for NumPad6....

After detaching the camera with Enter and flying it away from Konoko, the End key teleports Konoko to the camera position and attaches the camera to her position again. If you turn off collision with "chr_nocollision 0 1" before teleporting, Konoko will not fall out of the air when teleported to the camera position (just don't jump with collision off...).

Windows
Key Result
NumPad 1/3 Move camera left/right
NumPad 8/5 Move camera forward/backward
NumPad -/+ Move camera up/down
NumPad 6/4 Pan camera left/right
Up/Down Arrow Pan camera up/down
Mac
Key Result
Left/Right Arrow Move camera left/right
Up/Down Arrow Move camera forward/backward
Page Up/Down Move camera up/down
NumPad 6/4 Pan camera left/right
NumPad 8/2 Pan camera up/down

Runtime scripting

Basic idea

(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.

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

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:

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)
give_powerup shield gives you a force shield (which you can't have 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)