Developer Mode: Difference between revisions

From OniGalore
Jump to navigation Jump to search
(continuing the rewrite for Intel Macs)
(correcting info on original Mac build's cheat tables, based on actual hex-editing and tests in OS 9)
Line 4: Line 4:
|http://geyser.oni2.net/Developer_Mode/TheDayIsMine0.png
|http://geyser.oni2.net/Developer_Mode/TheDayIsMine0.png
|}
|}
<div class="toclimit-3">__TOC__</div>
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 cheat code '''thedayismine''' (see picture, right). 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 around the time of 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, camera controls, and various debugging features -- that was associated with the cheat code '''thedayismine''' (see picture, right). 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 around the time of 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]].


Line 14: Line 15:
{{Divhide|...or do it yourself}}
{{Divhide|...or do it yourself}}
===...or do it yourself===
===...or do it yourself===
You may want to read this if your version of Oni is not covered by the above DLL (e.g. if you have an odd language version).
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 your Mac is not running the Intel build.


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 PC is [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32]. On Macs, [http://www.ufsexplorer.com/cihex.php 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 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 PC is [http://www.chmaas.handshake.de/delphi/freeware/xvi32/xvi32.htm XVI32]. On Macs, [http://www.ufsexplorer.com/cihex.php 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 original and edited binaries and choose File>Compare "Oni" and "Oni").
Line 36: Line 37:
|0x03
|0x03
|-
|-
|fatloot
|''fatloot''
|0x04
|0x04
|-
|-
Line 42: Line 43:
|0x05
|0x05
|-
|-
|winlevel
|''winlevel''
|0x06
|0x06
|-
|-
|loselevel
|''loselevel''
|0x07
|0x07
|-
|-
Line 81: Line 82:
|0x11
|0x11
|-
|-
|munitionfrenzy
|''munitionfrenzy''
|0x12
|0x12
|-
|-
Line 109: Line 110:
There is an row for every cheat, and they appear by order of increasing ID. In most Oni builds, the developer mode cheat (ID 0x0B) is simply skipped over; '''reservoirdogs''' (0x0C) comes right after '''superammo''' (0x0A).
There is an row for every cheat, and they appear by order of increasing ID. In most Oni builds, the developer mode cheat (ID 0x0B) is simply skipped over; '''reservoirdogs''' (0x0C) comes right after '''superammo''' (0x0A).
;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 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 Mac OS 9 retail and demo, every row of the lookup table takes up 12 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)
<!--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 beta, the pointers and the ID are 2-byte words (Big Endian); regular elements take up 8 bytes; if a cheat has no "disabled" message, weird stuff happens to the third pointer and to the ID, and the element takes up 10 bytes... the ID can be found in what would be the first byte of 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).-->
:In the Mac OS 9 builds, the pointers and the ID are 2-byte words (Big Endian); regular rows take up 8 bytes; if a cheat has no "disabled" message, weird stuff happens to the third pointer and to the ID, and the row takes up 10 bytes... the ID can be found in what would be the first byte of the ID field instead of the second, and the remaining 3 bytes are garbage. An additional garbage byte is added between consecutive one-way cheats (0x06 and 0x07).


====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 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).


====Finding the lookup table====
====Finding the lookup table====
Open the executable (or the data fork of the executable on Mac), 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'''.
;On PC and PC demo : look for '''13 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 14 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 15 00 00 00'''
;In the PC retail and PC demo builds, look for '''13 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 14 00 00 00 ## ## ## ## ## ## ## ## ## ## ## ## 15 00 00 00'''
;On Mac OS X : look for '''00 00 00 13 ## ## ## ## ## ## ## ## ## ## ## ## 00 00 00 14 ## ## ## ## ## ## ## ## ## ## ## ## 00 00 00 15'''
;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]])
;On Mac OS 9 retail/demo : look for '''00 00 13 ## ## ## ## ## ## ## ## ## 00 00 14 ## ## ## ## ## ## ## ## ## 00 00 15'''
;In the Mac OS 9 builds, look for '''00 13 ## ## ## ## ## ## 00 14 ## ## ## ## ## ## 00 15''' ([[:File:Finding killmequick - Mac OS 9 build.jpg|sample pic]])
;
;
where the ## are joker chars. 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 (hex wildcards). 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''' at the pause screen : you'll get "Ultra Mode Enabled" and "Ultra Mode Disabled" as confirmation messages.

Revision as of 04:32, 6 May 2013

Label on a crate in
Syndicate Warehouse
(an Easter egg)
TheDayIsMine.png TheDayIsMine0.png

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 cheat code thedayismine (see picture, right). 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 around the time of 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 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. On the Mac, the Intel build has Dev Mode unlocked; it can be found HERE.

Using it

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 HERE

Let's say cheats are enabled and Developer Mode has been made available via the thedayismine cheatcode (or simply x with Daodan DLL installed).

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

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 on PC retail, you may have applied 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").

Console input

By default, Oni auto-binds the "console" toggle to the key which on U.S. keyboards has 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.


Usage

Hotkeys

Hotkey (can use Alt for Ctrl) Description Windows Mac
Cntl+Shift+o Draw No-Occlusion Quads (only makes console screens disappear)
Cntl+Shift+i Draw Invisible Quads
Cntl+Shift+y Performance Display (includes FPS)
Checkmark 16px blue.png
Checkmark 16px blue.png
Cntl+Shift+t Draw Character Collision
Cntl+Shift+r Draw Object Collision
Cntl+Shift+f Fast Mode (runs Oni at up to 24x)
Checkmark 16px blue.png
Checkmark 16px blue.png
Cntl+Shift+g Draw every frame
Checkmark 16px blue.png
*
Cntl+Shift+x Secret X / (Mac only) Show trigger volumes
Checkmark 16px blue.png
Cntl+Shift+y Secret Y
Cntl+Shift+z Secret Z
Cntl+Shift+Ins Add Flag
?
?
Cntl+Shift+Del Delete Flag
?
Checkmark 16px blue.png
Cntl+Shift+u Unstick player
Checkmark 16px blue.png
Checkmark 16px blue.png
Cntl+Shift+n Camera Record
?
Cntl+Shift+m Camera Stop
?
Cntl+Shift+, Camera Playback
?
? Place Quad
?
? Place Quad Mode
?
Ctrl+Shift+\ Profile Toggle
?
Cntl+Shift+l Dumps a screenshot every frame
Checkmark 16px blue.png
Checkmark 16px blue.png
Ctrl+Shift+1 Test One
?
Ctrl+Shift+2 Test Two
?
Ctrl+Shift+3 Test Three
?
Ctrl+Shift+4 Test Four
?
. (period) Single Step Mode
Checkmark 16px blue.png
Checkmark 16px blue.png
/ Single Step (when in Single Step Mode)
Checkmark 16px blue.png
Checkmark 16px blue.png
Cntl+Shift+Home Change Active Camera
?
End Warp to camera
Checkmark 16px blue.png
Checkmark 16px blue.png
Cntl+Shift+k Kill Particles
?
Backspace Enter AI Debugger
?
7 Explode One
?
8 Explode Two
?
9 Explode Three
?
0 Explode Four
?
Cntl+Shift+j Reset Particles
?
Cntl+Shift+w Drop Flag and Add Waypoint
?
Cntl+Shift+b Shows current opponent's logic
Checkmark 16px blue.png
Checkmark 16px blue.png
] Freeze
?
?
[ Frame Advance
?
?
Cntl+Shift+s furnitures' textures (turns red)
Checkmark 16px blue.png
?
F8, Shift+F8 Cycle characters
Checkmark 16px blue.png
Checkmark 16px blue.png
Cntl+Shift+p Perf Particle
?
?
Cntl+Shift+; Perf Particle Lock
?
?
= Screenshot
?
?
F2 Cutscene 1
Checkmark 16px blue.png
F3 Cutscene 2
Checkmark 16px blue.png
F6 Kill All AI
Checkmark 16px blue.png
Checkmark 16px blue.png
Ctrl+F7 Play dead
Checkmark 16px blue.png
Fkey7, Shift+Fkey7 Cycle weapons (holster to get second weapon)
Checkmark 16px blue.png
Checkmark 16px blue.png
Fkey9 Start recording
Checkmark 16px blue.png
Checkmark 16px blue.png
Fkey10 Stop recording
Checkmark 16px blue.png
Checkmark 16px blue.png
Fkey11 Playback recording
Checkmark 16px blue.png
Checkmark 16px blue.png
` (grave accent) Displays console
Checkmark 16px blue.png
Checkmark 16px blue.png
Return/Enter Cycle Camera Modes:

Normal
Detached 1-mouse controls aim
Detached 2-mouse controls camera
(When activated the following applies)

Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad1
Move camera left
Checkmark 16px blue.png
see note HERE
  • NumPad3
Move camera right
Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad4
Pan camera right
Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad5
Move camera backward
Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad6
Pan camera left
Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad8
Move camera forward
Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad-
Move camera up
Checkmark 16px blue.png
Checkmark 16px blue.png
  • NumPad+
Move camera down
Checkmark 16px blue.png
Checkmark 16px blue.png
  • Up Arrow
Pan camera up
Checkmark 16px blue.png
Checkmark 16px blue.png
  • Down Arrow
Pan camera down
Checkmark 16px blue.png
Checkmark 16px blue.png

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

**doesn't seem show any effect on German OS


German hotkeys

"Cntl" = "Strg"

German Windows version uses ^ by default for console access. On Windows with window mode on you should use rightalt as alternative console binding because leftalt has a special function: it's used to show extra options of windows/programs, in this case it will steal Oni's mouse controls until you make a click.

Hotkey (can use Alt for Cntl) Description Windows
. (period) enter Single Step Mode
Checkmark 16px blue.png
- Single Step (when in Single Step Mode)
Checkmark 16px blue.png
Shift+Cntl+.+- exit single step mode
Checkmark 16px blue.png
Cntl+Shift+# Profile Toggle (whatever that is ...)
Checkmark 16px blue.png
Cntl+Shift+b Shows current opponent's logic
[N] - move's probability to get picked up?
Checkmark 16px blue.png
Cntl+Shift+f Toggle fastmode
Checkmark 16px blue.png
Cntl+Shift+l Screenshot per frame
Checkmark 16px blue.png
Cntl+Shift+s furnitures' textures (turns red)
Checkmark 16px blue.png
Cntl+Shift+z Frames Per Second
Checkmark 16px blue.png
Enter Cycle Camera Modes:

Normal
Detached 1-mouse controls aim
Detached 2-mouse controls camera
(When activated the following applies)

Checkmark 16px blue.png
End Warp player to camera
Checkmark 16px blue.png
  • NumPad1
Move camera left
Checkmark 16px blue.png
  • NumPad3
Move camera right
Checkmark 16px blue.png
  • NumPad4
Pan camera left
Checkmark 16px blue.png
  • NumPad5
Move camera backward
Checkmark 16px blue.png
  • NumPad6
Pan camera right
Checkmark 16px blue.png
  • NumPad8
Move camera forward
Checkmark 16px blue.png
  • NumPad-
Move camera up
Checkmark 16px blue.png
  • NumPad+
Move camera down
Checkmark 16px blue.png
  • Up Arrow
Pan camera up
Checkmark 16px blue.png
  • Down Arrow
Pan camera down
Checkmark 16px blue.png
F6 Kill All AI
Checkmark 16px blue.png
Cntl+F7 Play dead
Checkmark 16px blue.png
F7, Shift+F7 Cycle weapons (holster to get second weapon)
Checkmark 16px blue.png
F9 Start recording
Checkmark 16px blue.png
F10 Stop recording
Checkmark 16px blue.png
F11 Playback recording
Checkmark 16px blue.png


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 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. 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)
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 HERE for details).