Daodan DLL: Difference between revisions

From OniGalore
Jump to navigation Jump to search
m (+cat)
m (corrected a section name that changed and added more SectionLinks for convenience)
 
(90 intermediate revisions by 5 users not shown)
Line 1: Line 1:
==Daodan DLL site==
{{Hatnote|This is about a Windows-only patch for the game engine. For the entity within the game's story, see [[Daodan]]. For information on the patches to Mac versions of Oni and historical patching of Windows Oni, see the [[:Category:Patches|Patches category]]. Also see [[OniX]], a rebuild of the Oni application for modern Windows systems.}}
Contains the latest downloads and detailed installation instructions: http://daodan.rossy.oni2.net/
The '''Daodan DLL''' is a patch for Oni for Windows that hooks into the game engine to fix bugs and add features. It does this by posing as '''binkw32.dll''', the library that Oni loads so that it can play the game's opening and ending videos. The Daodan fixes issues such as the famous "[[Blam|Blam!]]" error that occurs on modern machines. It also adds new features such as support for widescreen resolutions and bonus cheat codes. The Daodan DLL was created by [[User:SFeLi|SFeLi]] and then developed further by [[User:RossyMiles|RossyMiles]], [[User:Gumby|Gumby]] and [[User:Admin|Alloc]].
:''Subpages:'' [[/Change log|Change log]]
{{TOCfloat}}


==What it is==
Note that you '''already have the Daodan DLL installed''' if you installed the [[Anniversary Edition]].
The Daodan DLL is a file called vtuneapi.dll, which is loaded at startup by all PC versions of Oni.


It allows one to hook Oni's runtime environment and patch the executable dynamically, at runtime.
===Manual installation instructions===
:'''''(For non-AE users)'''''
1. You'll have to extract the Daodan DLL files yourself from the AE package [http://mods.oni2.net/node/233 here]. The files you need are in the plain\win_only\ directory.<br />
2. Extract the Oni.exe meant to go with the Daodan DLL from the AE package [http://mods.oni2.net/node/231 here].<br />
3. Find where your copy of Oni has been installed on your hard drive; usually it's "C:\Program Files\Oni\". This folder should contain GameDataFolder and Oni.exe (just called "Oni" if you have file extensions hidden). Back up this Oni.exe by renaming it (e.g. "Oni-original.exe").<br />
4. Place the newly-downloaded Oni.exe, binkw32.dll, realbink.dll, and assorted files into the Oni\ folder.<br />
5. To confirm that you have done everything correctly, run Oni.exe. Enter the game, bring up the Data Comlink (F1 by default), and type "tellmetheversion"; if you get a result like "Daodan v.''x.y''", the DLL is working.


The key features at the moment are a few bug fixes and a bunch of more or less revolutionary cheats.
===Troubleshooting===
If the game does not display correctly (for instance, a black window), try the following in any order:


The DLL fixes the common [[Troubleshooting/Blam|"Blam"]] at startup (caused by the overflow of the GL extensions buffer).
1. Disable the intro movie by renaming GameDataFolder\intro.bik. This often fixes the game window.<br />
:(it does not yet fix all critical overflows (e.g., Oni can not handle over 32 chars with an Nvidia GFX card)
2. Open the daodan.ini in Notepad and set either "daodangl" or "windowhack" to true. "windowhack" should at least center the window on the screen.<br />
3. Try [http://www.google.com/search?q=windows+run+as+administrator launching Oni as Administrator].<br />
4. Make the Oni folder writable by un-checking "Read-only" in the Properties window for the folder.<br />
5. Try both the run_full and run_wind scripts.


The DLL ''does'' fix the pathfinding grid cache size, which used to cause crashes for some extreme scripts.
You can report problems with the Daodan DLL on [{{Discord}} our Discord server].


The DLL fixes a bug in the AI projectile awareness, however the actual projectile dodging is still flawed.
===Feature summary===
*Buffer overflow patch – Fixes Oni crashing at startup on modern computers.
*Windowed mode – Oni can run inside a window properly.
*Custom screen resolutions – Includes many more possible screen resolutions.
*BGRA32 (ARGB8888) texture support.
*Extra cheats – See {{SectionLink||Added cheat codes}}.
*Cheats always enabled – No need to beat game first.
*Extra command-line options (for advanced users) – For a list, type "Oni -help".
*A new input system based on Raw Input, which should fix mouse lag and judder, as well as disabling mouse acceleration.
*AIs have ability to properly dodge projectiles.
*Stops fly-in character portraits from being stretched when playing in widescreen resolutions.
*Enables [[Developer Mode]] – Enter the [[Data Comlink]] and type "thedayismine" or simply 'x' to activate it.


The DLL enables plugins (level#_Whatever.dat) which are a convenient complement to the [[AE|Edition]].
===Languages===
The Daodan DLL offers support for the Chinese version of the game as well as multibyte languages in general (see "multibyte" under {{SectionLink||All configuration settings}}). It also adds some basic localization support by allowing cheat code names and two hardcoded strings in Oni to be translated.


The DLL enables the support of extended ASCII (Latin languages and Cyrillic; ''not'' Chinese (yet?) )
To enable Chinese support, type:
[language]
Chinese = True
This will load a DLL called xfhsm_oni.dll (provided with a Chinese copy of Oni in order to load the Chinese font that also comes with it).


The DLL enables DirectInput, making the key configuration layout-independent. Also fixes mouse wheel etc.
Here are the strings that you can replace using the .ini file:
{| class="wikitable"
!INI name
!Description
|-
|blam
|Replaces body text of the [[:Image:Blam!.png|Blam window]].
|-
|damn
|Replaces title of the Blam window.
|-
|savepoint
|Replaces string "Save Point" in Load Game menu (see "Locales" below).
|-
|syndicatewarehouse
|Replaces string "Syndicate Warehouse" in Load Game menu (see "Locales" below).
|-
|''nameofcheat''_on/_off
|Replaces name of the built-in cheat code as it appears on the Data Comlink screen when code is entered. E.g., "behemoth_on=Gojira Desu!".
|}


The DLL unlocks the [[thedayismine]] cheat and makes it available through "x" to save on typing.
====Locales====
In order to use the "savepoint" and "syndicatewarehouse" settings above, you must create a locale:
:1. Add a setting called "language" under the daodan.ini's [language] section with the name of your locale, e.g.:
[language]
language = xx
:You can call the locale whatever you want and it need not be an official ISO locale code such as "en" or "pt", but [[wp:List of ISO 639 language codes|here's the list of language codes]] if you want it.
:2. Create a folder alongside the Daodan DLL called "daodan_locales".
:3. Create an INI file inside called xx.ini (or whatever you called your locale in step 1).
:4. The contents of the INI should be:
savepoint = ''translation''
syndicatewarehouse = ''translation''
The next time Oni runs, you should see your translated strings in the Load Game screen. This approach allows you to create/download as many locale INIs as you want, place them in daodan_locales, and switch between them by changing the "language" setting in daodan.ini.


The DLL makes cheats available even if the game has not been completed (which can't happen with the demo).
===Configuration===
Creating a plain-text file called "daodan.[[wp:INI file|ini]]" in the same directory as the Daodan DLL will allow you to configure which patches are enabled, as well as to store configuration settings and language items. This file is typically created by the Daodan DLL the first time it loads.


The DLL adds cheats like '''kangaroo''', '''marypoppins''', '''bulletproof''', '''bigbadboss''' and '''tellmetheversion''' ^^
On modern versions of Windows (starting with Windows Vista), Oni does not properly request write access to the directory containing Oni.exe (i.e. C:\Program Files (x86)\Oni in typical installs). Windows detects this, and creates a dedicated directory for Oni.exe (and thus the Daodan DLL) to write its files to, located in C:\Users\<Your Username>\AppData\Local\VirtualStore. The directory for Oni will mirror its relative path on disk, so in a typical install it will be at VirtualStore\Program Files (x86)\Oni. This is where all files output by the program (startup.txt, persist.dat, key_config.txt, etc.) will be located when Oni is not run as an administrator. '''This is the location where daodan.ini must be placed if Oni is to be run as a non-administrator.''' Note that you can create your own folder for Oni, e.g. C:\Games\, to avoid this permissions issue.


;For more information, please refer to the README file
Inside of the daodan.ini file, each configuration setting is stored inside a section as a name-value pair. To temporarily disable a setting in the INI, add a '#' to the beginning of the line and the Daodan will ignore it. Any settings not listed in the INI will use their default values which are listed in {{SectionLink||All configuration settings}}. To change a setting away from its default, add the setting to the relevant section. If the section does not yet exist, add it to the end of the file and add relevant entries under it. Entries are case-<u>in</u>sensitive and spacing does not matter.
:http://geyser.oni2.net/EXE/pc.east/daodan.txt


;Quick notes about the C-Daodan (to make this documentation less out of date for now)
Here is a simple example of a daodan.ini file:
*it's written in C (MinGW for now, maybe Pelles-C later)
[devmode]
*it implements all of the above, plus more recent fixes
highres_console = True
*it finally runs Oni in a true window (with a menu bar)
showtriggervolumes = True
*it poses as binkw32.dll instead of vtuneapi.dll ATM
[gameplay]
cooldowntimer = False


daodan.ini may contain the following sections:
* devmode ''(Developer Mode Configuration)''
* gameplay ''(Gameplay Configuration)''
* graphics ''(Graphics Configuration)''
* language ''(Language Configuration)''
* modding ''(Modding Configuration)''
* oni ''(Original Oni Options Configuration)''
* windows ''(OS Interaction Options)''


----
For information on all possible settings, see {{SectionLink||All configuration settings}}.
==Get the C-Daodan==
Developed by [[User:RossyMiles|Rossy]]. Currently replaces '''binkw32.dll''' instead of providing '''vtuneapi.dll''', so if you were using '''vtuneapi.dll''' until now, just remove it to avoid conflicts.
;Here is the directory where Rossy's current stuff is:http://rossy.oni2.net/files/daodan
;Here is the DLL:http://rossy.oni2.net/files/daodan/binkw32.dll
;Here is an extra EXE that allows binkw32.dll to play BINK movies when Oni wants it to:http://rossy.oni2.net/files/daodan/binkplay.exe
;Here is the source:http://rossy.oni2.net/files/daodan/src.zip


===Command-line arguments===
[[Customizing#Command-line arguments|Command line options]] for the Daodan DLL can also be used when launching Oni, although the syntax is a little different (and a bit more powerful). The basic syntax for a command line option is this:
-<ini section>.<option> <value>
For example, to disable sound start Oni with this:
oni -options.sound false
When <ini section> is omitted, it is assumed to be '''options'''. When <value> is omitted, it is assumed to be '''true''' unless <option> starts with '''no''' (eg. '''nosound''') in which case it is assumed to be '''false'''. So an easier way to write the above command would be:
oni -nosound
Options or patches specified on the command line take precedence over options specified in daodan.ini so that you can temporarily override the usual settings. Currently Oni's command line parser isn't powerful enough to parse Language settings (no support for quoting arguments); this will be fixed in a later release.


----
===All configuration settings===
==Get the older FASM Daodan==
Below are the names of the configuration settings you can turn on and off in daodan.ini (names and sections are case-insensitive). Also noted is whether the DLL has this patch turned on or off by default.
;Discontinued. Also called "basic" as opposed to the newer C-Daodan (see above).
{| class="wikitable"
:"current" is the experimental build which has more features & may have bugs.
!INI Section
:Versions covered: demo ("demo"), Russian ("buka"), and Eastern English ("standard")
!INI Name
===Get it from SFeLi===
!Default
;A single ZIP for all 3 versions:Extract the DLL you need and place it alongside your Oni.exe
!Description
;Here it is:http://sfeli.oni2.net/daodan/basic-0.6.6.zip
|-
;Experimental:http://sfeli.oni2.net/daodan/current.zip
|[devmode]
;New features
|highres_console
:new '''marypoppins''' cheat
|true
:pathfinding grid cache fix
|Fixes bug where console line becomes invisible at higher resolutions.
;Current version only
|-
:AI projectile awareness
|[devmode]
:support for any language (except Chinese and Japanese)
|showtriggervolumes
|true
|Allows BSL variable "show_triggervolumes" and Ctrl+Shift+X (in devmode) to work.
|-
|[gameplay]
|bindablecheats
|true
|Enables cheats to be bound to keys using key_config.txt. Requires "customactions" and "cheattable" to be on.
|-
|[gameplay]
|characterawareness
|true
|Prevents AIs from forgetting about you when they are pursuing you and lose sight of you.
|-
|[gameplay]
|cheatsenabled
|true
|Enables cheats without having to beat the game first. Required for using 'tellmetheversion'.
|-
|[gameplay]
|cheattable
|true
|Replaces Oni's cheat table with table that includes new cheats (see section below). Required for using 'tellmetheversion'.
|-
|[gameplay]
|cooldowntimer
|true
|Disables weapon cooldown exploit, e.g. dropping the Mercury Bow and picking it back up right away to reset weapon cooldown.
|-
|[gameplay]
|customactions
|true
|Allows new bindable actions to be registered with the DLL, such as bindable cheats (if "bindablecheats" is on).
|-
|[gameplay]
|kickguns
|false
|EXPERIMENTAL! Unfinished, do not use.
|-
|[gameplay]
|pathfinding
|true
|Multiplies size of pathfinding grid cache by eight in order to prevent crashes in large levels.
|-
|[gameplay]
|projaware
|true
|Allows AI to dodge incoming gunfire properly.
|-
|[gameplay]
|throwtest
|false
|EXPERIMENTAL! Enables experimentation with allowing enemies to be thrown over railings.
|-
|[gameplay]
|wpfadetime
|true
|Adds working function for existing BSL command wp_fadetime, sets fade time to 4800.
|-
|[graphics]
|binkplay
|true
|Fixes binkplay calls to use GDI and outro same mode as intro.
|-
|[graphics]
|daodangl
|true
|Provides an improved windowed mode (-noswitch); this patch is known to break the hiding of the Windows taskbar in fullscreen mode.
|-
|[graphics]
|displayenum
|true
|Offers a more accurate list of available display modes in the Options menu.
|-
|[graphics]
|gamma
|true
|Enables gamma slider in fullscreen, disables it in windowed mode.
|-
|[graphics]
|newweap
|true
|Enables weapon info, so that standing above a weapon displays a message containing the weapon name and amount of ammo.
|-
|[graphics]
|optionsvisible
|true
|Enables always showing the options button in main menu, even when pausing from a game.
|-
|[graphics]
|showalllasersights
|false
|Enables visibility of all (also enemies') weapon lasersights
|-
|[graphics]
|widescreenportraits
|true
|Prevents fly-in portraits from being stretched when playing in widescreen resolutions.
|-
|[language]
|chinese
|true
|Allows Chinese fonts to be shown if the required DLL is available.
|-
|[language]
|fonttexturecache
|true
|Doubles size of font texture cache.
|-
|[language]
|language
|en
|Sets locale name for hardcoded strings (see {{SectionLink||Locales}}).
|-
|[language]
|nomultibyte
|true
|Enables languages which use multibyte coding (such as Chinese).
|-
|[modding]
|argb8888
|true
|Enables the use of textures using ARGB8888.
|-
|[modding]
|d_regen
|true
|Enables script command d_regen (query/set regeneration for any character).
|-
|[modding]
|daodanbsl
|true
|Adds new BSL commands (see below).
|-
|[modding]
|hdscreens_lowres
|true
|Allows HD intro/ending screens on game resolutions smaller than 1024x768.
|-
|[modding]
|largetextures
|true
|Enables the use of textures up to 512x512.
|-
|[modding]
|levelplugins
|true
|Allows level files that do not end in "_Final" to be loaded from the GDF.
|-
|[oni]
|debug
|false
|Not useful; probably does nothing.
|-
|[oni]
|debugfiles
|false
|Enables function logging; when active, BSL function calls are logged to script_debug.txt.
|-
|[oni]
|findsounds
|false
|Not useful, extends output of sound_list_broken_links.
|-
|[oni]
|ignore_private_data
|false
|Disables the loading of 'private data' in level0. Probably has no effect.
|-
|[oni]
|sound
|true
|Enables sound.
|-
|[oni]
|switch
|true
|Enables always switching screen to resolution on Oni's Options screen, making the game fullscreen; opposite of Oni's built-in argument "noswitch".
|-
|[windows]
|alttab
|true
|Allows user to switch applications while in Oni (Alt-Tab) and use the Windows key; however, it may enable the screensaver as well.
|-
|[windows]
|border
|true
|Adds a border in windowed mode if '[graphics] daodangl' is active.
|-
|[windows]
|clipcursor
|true
|Limits cursor to Oni's window. This is always enabled if Daodan Input is enabled.
|-
|[windows]
|daodaninput
|true
|A new input system which reports input on every frame, which should fix issues with mouse lag/judder and high-FPS displays.
|-
|[windows]
|directinput
|true
|Forces on DirectInput when Daodan Input is disabled.
|-
|[windows]
|mousesensitivity
|1.0
|Multiplier for mouse movement values when Daodan Input is enabled. 1.0 is Oni's default.
|-
|[windows]
|disablecmdline
|true
|Disables Oni's existing command line parser as Daodan has its own.
|-
|[windows]
|killvtune
|false
|Prevents loading of vtuneapi.dll.
|-
|[windows]
|safeprintf
|true
|Replaces Oni's function that prints to startup.txt with a safer one.
|-
|[windows]
|topmost
|false
|Keeps game window on top in windowed mode, even when switching applications.
|-
|[windows]
|usegettickcount
|true
|Replaces Oni's timing functions with more accurate ones.
|}


===Get it from geyser===
===Added cheat codes===
;Non-zipped DLLs for every version
*'''bigbadboss'''
:Download the one you need and place it alongside your Oni.exe
:Player takes less weapon damage.
:If it complains, try replacing your Oni.exe with the one provided.
*'''buddha'''
;Here they are
:Player is unkillable (will not go below 1HP).
:http://geyser.oni2.net/EXE/pc.east/
*'''bulletproof'''
:http://geyser.oni2.net/EXE/pc.buka/
:Player takes no weapon damage.
:http://geyser.oni2.net/EXE/pc.demo/
*'''kangaroo'''
;README file
:Player can make super-high jumps.
:http://geyser.oni2.net/EXE/pc.east/daodan.txt
*'''marypoppins'''
;Last updated
:Player can fly by holding down jump key.
:16:17, 28 May 2008 (CEST)
*'''shinobi'''
:Extra difficulty mode; player always has 1HP, but also is immune to weapons, and the enemy AI cannot hear the player.


===Added BSL functions===
Any time a function can both get and set a value, and you set the value, the old value should be returned, barring any programming oversight by Gumby.
====Math====
* int '''int32div''' n1:int n2:int
:Divides two integers
* int '''int32mul''' n1:int n2:int
:Multiplies two integers
* float '''div''' [int1:int|float1:float] [int2:int|float2:float]
:Divides two two numbers
* float '''mul''' [int1:int|float1:float] [int2:int|float2:float]
:Multiplies two numbers
* int '''int32rand''' start:int end:int
:Returns a pseudo-random number between two numbers (inclusive).
====Characters====
* float '''d_distance''' [ai_name:string | script_id:int] [ai_name:string | script_id:int]
:Gets the distance between two characters
* int '''d_getdamage''' [ai_name:str | script_id:int]
:Gets the amount of damage a character has caused
* int '''d_getindex''' [ai_name:str]
:Gets a character's script_id from their name
* int '''d_getkills''' [ai_name:str | script_id:int]
:Gets the number of kills a character has
* int '''d_health''' [ai_name:str | script_id:int] [newhealth:int]
:Gets or sets a character's health
* int '''d_holdkey''' [ai_name:string | script_id:int] keys frames:int
:Makes a character hold a key
:Possibly broken
* int '''d_isheld''' keys
:Checks if player is holding a key
:Possibly broken
* float '''d_location''' [ai_name:string | script_id:int] axis:string anything:string
:Gets the X, Y or Z coordinate of a character, as specified in "axis"; the "anything" parameter is unused but must be present
* float '''d_location''' [ai_name:string | script_id:int] x:float y:float z:float
:Sets the XYZ coordinates of a character
* int '''d_maxhealth''' [ai_name:str | script_id:int] [newmaxhealth:int]
:Gets or sets a character's maxhealth
* string '''d_name''' [ai_name:str | script_id:int] [newname:string]
:Gets or sets a character's name
* int '''d_powerup''' ai_name:str|script_id:int powerup:str [newcount:int]
:Gets or sets the amount of powerups a character has
:Powerup list is the same one used with '''chr_givepowerup''', with the addition of "bossshield"
* int '''d_regen''' [ai_name:str | script_id:int] on_off:bool
:Gets or sets a character's regeneration (like elderrune for the player)
* int '''d_waitforkey''' keys
:Waits for a keypress from the player
====Text====
* void '''d_dprint''' text:string [textcolor: r b g] [shadowcolor: r b g]
:Prints to console in color
:Colors are ints between 0 and 255. Other numbers will be reduced to 255.
:Any colors you do not supply will be replaced with the default values: 255, 255, 255 and 63, 63. 63
* string '''sprintf''' str1:format ...
:Does a C-style sprintf operation on a string
===Added input bindings===
When Daodan Input is enabled, the following inputs can be bound in key_config.txt in addition to the [[Customizing/Binding#Bindable key names|usual ones]].
*'''mousebutton5'''
:The "forward" button on most 5-button mice.
*'''scrollup'''
:Scrolling up one notch on a mouse scroll wheel or touchpad.
*'''scrolldown'''
:Scrolling down one notch on a mouse scroll wheel or touchpad.
*'''scrollleft'''
:Scrolling left on a mouse with an omnidirectional scroll wheel or a touchpad.
*'''scrollright'''
:Scrolling right on a mouse with an omnidirectional scroll wheel or a touchpad.
*'''pagedown'''
:This was broken in DirectInput mode in vanilla Oni.


----
==See also==
*[[Developer Mode]] AKA "thedayismine"
*[[AE|Anniversary Edition]]
*{{OCF}}
[[Category:Patches]]
[[Category:Patches]]

Latest revision as of 18:10, 27 March 2024

This is about a Windows-only patch for the game engine. For the entity within the game's story, see Daodan. For information on the patches to Mac versions of Oni and historical patching of Windows Oni, see the Patches category. Also see OniX, a rebuild of the Oni application for modern Windows systems.

The Daodan DLL is a patch for Oni for Windows that hooks into the game engine to fix bugs and add features. It does this by posing as binkw32.dll, the library that Oni loads so that it can play the game's opening and ending videos. The Daodan fixes issues such as the famous "Blam!" error that occurs on modern machines. It also adds new features such as support for widescreen resolutions and bonus cheat codes. The Daodan DLL was created by SFeLi and then developed further by RossyMiles, Gumby and Alloc.

Subpages: Change log

Note that you already have the Daodan DLL installed if you installed the Anniversary Edition.

Manual installation instructions

(For non-AE users)

1. You'll have to extract the Daodan DLL files yourself from the AE package here. The files you need are in the plain\win_only\ directory.
2. Extract the Oni.exe meant to go with the Daodan DLL from the AE package here.
3. Find where your copy of Oni has been installed on your hard drive; usually it's "C:\Program Files\Oni\". This folder should contain GameDataFolder and Oni.exe (just called "Oni" if you have file extensions hidden). Back up this Oni.exe by renaming it (e.g. "Oni-original.exe").
4. Place the newly-downloaded Oni.exe, binkw32.dll, realbink.dll, and assorted files into the Oni\ folder.
5. To confirm that you have done everything correctly, run Oni.exe. Enter the game, bring up the Data Comlink (F1 by default), and type "tellmetheversion"; if you get a result like "Daodan v.x.y", the DLL is working.

Troubleshooting

If the game does not display correctly (for instance, a black window), try the following in any order:

1. Disable the intro movie by renaming GameDataFolder\intro.bik. This often fixes the game window.
2. Open the daodan.ini in Notepad and set either "daodangl" or "windowhack" to true. "windowhack" should at least center the window on the screen.
3. Try launching Oni as Administrator.
4. Make the Oni folder writable by un-checking "Read-only" in the Properties window for the folder.
5. Try both the run_full and run_wind scripts.

You can report problems with the Daodan DLL on our Discord server.

Feature summary

  • Buffer overflow patch – Fixes Oni crashing at startup on modern computers.
  • Windowed mode – Oni can run inside a window properly.
  • Custom screen resolutions – Includes many more possible screen resolutions.
  • BGRA32 (ARGB8888) texture support.
  • Extra cheats – See § Added cheat codes.
  • Cheats always enabled – No need to beat game first.
  • Extra command-line options (for advanced users) – For a list, type "Oni -help".
  • A new input system based on Raw Input, which should fix mouse lag and judder, as well as disabling mouse acceleration.
  • AIs have ability to properly dodge projectiles.
  • Stops fly-in character portraits from being stretched when playing in widescreen resolutions.
  • Enables Developer Mode – Enter the Data Comlink and type "thedayismine" or simply 'x' to activate it.

Languages

The Daodan DLL offers support for the Chinese version of the game as well as multibyte languages in general (see "multibyte" under § All configuration settings). It also adds some basic localization support by allowing cheat code names and two hardcoded strings in Oni to be translated.

To enable Chinese support, type:

[language]
Chinese = True

This will load a DLL called xfhsm_oni.dll (provided with a Chinese copy of Oni in order to load the Chinese font that also comes with it).

Here are the strings that you can replace using the .ini file:

INI name Description
blam Replaces body text of the Blam window.
damn Replaces title of the Blam window.
savepoint Replaces string "Save Point" in Load Game menu (see "Locales" below).
syndicatewarehouse Replaces string "Syndicate Warehouse" in Load Game menu (see "Locales" below).
nameofcheat_on/_off Replaces name of the built-in cheat code as it appears on the Data Comlink screen when code is entered. E.g., "behemoth_on=Gojira Desu!".

Locales

In order to use the "savepoint" and "syndicatewarehouse" settings above, you must create a locale:

1. Add a setting called "language" under the daodan.ini's [language] section with the name of your locale, e.g.:
[language]
language = xx
You can call the locale whatever you want and it need not be an official ISO locale code such as "en" or "pt", but here's the list of language codes if you want it.
2. Create a folder alongside the Daodan DLL called "daodan_locales".
3. Create an INI file inside called xx.ini (or whatever you called your locale in step 1).
4. The contents of the INI should be:
savepoint = translation
syndicatewarehouse = translation

The next time Oni runs, you should see your translated strings in the Load Game screen. This approach allows you to create/download as many locale INIs as you want, place them in daodan_locales, and switch between them by changing the "language" setting in daodan.ini.

Configuration

Creating a plain-text file called "daodan.ini" in the same directory as the Daodan DLL will allow you to configure which patches are enabled, as well as to store configuration settings and language items. This file is typically created by the Daodan DLL the first time it loads.

On modern versions of Windows (starting with Windows Vista), Oni does not properly request write access to the directory containing Oni.exe (i.e. C:\Program Files (x86)\Oni in typical installs). Windows detects this, and creates a dedicated directory for Oni.exe (and thus the Daodan DLL) to write its files to, located in C:\Users\<Your Username>\AppData\Local\VirtualStore. The directory for Oni will mirror its relative path on disk, so in a typical install it will be at VirtualStore\Program Files (x86)\Oni. This is where all files output by the program (startup.txt, persist.dat, key_config.txt, etc.) will be located when Oni is not run as an administrator. This is the location where daodan.ini must be placed if Oni is to be run as a non-administrator. Note that you can create your own folder for Oni, e.g. C:\Games\, to avoid this permissions issue.

Inside of the daodan.ini file, each configuration setting is stored inside a section as a name-value pair. To temporarily disable a setting in the INI, add a '#' to the beginning of the line and the Daodan will ignore it. Any settings not listed in the INI will use their default values which are listed in § All configuration settings. To change a setting away from its default, add the setting to the relevant section. If the section does not yet exist, add it to the end of the file and add relevant entries under it. Entries are case-insensitive and spacing does not matter.

Here is a simple example of a daodan.ini file:

[devmode]
highres_console = True
showtriggervolumes = True

[gameplay]
cooldowntimer = False

daodan.ini may contain the following sections:

  • devmode (Developer Mode Configuration)
  • gameplay (Gameplay Configuration)
  • graphics (Graphics Configuration)
  • language (Language Configuration)
  • modding (Modding Configuration)
  • oni (Original Oni Options Configuration)
  • windows (OS Interaction Options)

For information on all possible settings, see § All configuration settings.

Command-line arguments

Command line options for the Daodan DLL can also be used when launching Oni, although the syntax is a little different (and a bit more powerful). The basic syntax for a command line option is this:

-<ini section>.<option> <value>

For example, to disable sound start Oni with this:

oni -options.sound false

When <ini section> is omitted, it is assumed to be options. When <value> is omitted, it is assumed to be true unless <option> starts with no (eg. nosound) in which case it is assumed to be false. So an easier way to write the above command would be:

oni -nosound

Options or patches specified on the command line take precedence over options specified in daodan.ini so that you can temporarily override the usual settings. Currently Oni's command line parser isn't powerful enough to parse Language settings (no support for quoting arguments); this will be fixed in a later release.

All configuration settings

Below are the names of the configuration settings you can turn on and off in daodan.ini (names and sections are case-insensitive). Also noted is whether the DLL has this patch turned on or off by default.

INI Section INI Name Default Description
[devmode] highres_console true Fixes bug where console line becomes invisible at higher resolutions.
[devmode] showtriggervolumes true Allows BSL variable "show_triggervolumes" and Ctrl+Shift+X (in devmode) to work.
[gameplay] bindablecheats true Enables cheats to be bound to keys using key_config.txt. Requires "customactions" and "cheattable" to be on.
[gameplay] characterawareness true Prevents AIs from forgetting about you when they are pursuing you and lose sight of you.
[gameplay] cheatsenabled true Enables cheats without having to beat the game first. Required for using 'tellmetheversion'.
[gameplay] cheattable true Replaces Oni's cheat table with table that includes new cheats (see section below). Required for using 'tellmetheversion'.
[gameplay] cooldowntimer true Disables weapon cooldown exploit, e.g. dropping the Mercury Bow and picking it back up right away to reset weapon cooldown.
[gameplay] customactions true Allows new bindable actions to be registered with the DLL, such as bindable cheats (if "bindablecheats" is on).
[gameplay] kickguns false EXPERIMENTAL! Unfinished, do not use.
[gameplay] pathfinding true Multiplies size of pathfinding grid cache by eight in order to prevent crashes in large levels.
[gameplay] projaware true Allows AI to dodge incoming gunfire properly.
[gameplay] throwtest false EXPERIMENTAL! Enables experimentation with allowing enemies to be thrown over railings.
[gameplay] wpfadetime true Adds working function for existing BSL command wp_fadetime, sets fade time to 4800.
[graphics] binkplay true Fixes binkplay calls to use GDI and outro same mode as intro.
[graphics] daodangl true Provides an improved windowed mode (-noswitch); this patch is known to break the hiding of the Windows taskbar in fullscreen mode.
[graphics] displayenum true Offers a more accurate list of available display modes in the Options menu.
[graphics] gamma true Enables gamma slider in fullscreen, disables it in windowed mode.
[graphics] newweap true Enables weapon info, so that standing above a weapon displays a message containing the weapon name and amount of ammo.
[graphics] optionsvisible true Enables always showing the options button in main menu, even when pausing from a game.
[graphics] showalllasersights false Enables visibility of all (also enemies') weapon lasersights
[graphics] widescreenportraits true Prevents fly-in portraits from being stretched when playing in widescreen resolutions.
[language] chinese true Allows Chinese fonts to be shown if the required DLL is available.
[language] fonttexturecache true Doubles size of font texture cache.
[language] language en Sets locale name for hardcoded strings (see § Locales).
[language] nomultibyte true Enables languages which use multibyte coding (such as Chinese).
[modding] argb8888 true Enables the use of textures using ARGB8888.
[modding] d_regen true Enables script command d_regen (query/set regeneration for any character).
[modding] daodanbsl true Adds new BSL commands (see below).
[modding] hdscreens_lowres true Allows HD intro/ending screens on game resolutions smaller than 1024x768.
[modding] largetextures true Enables the use of textures up to 512x512.
[modding] levelplugins true Allows level files that do not end in "_Final" to be loaded from the GDF.
[oni] debug false Not useful; probably does nothing.
[oni] debugfiles false Enables function logging; when active, BSL function calls are logged to script_debug.txt.
[oni] findsounds false Not useful, extends output of sound_list_broken_links.
[oni] ignore_private_data false Disables the loading of 'private data' in level0. Probably has no effect.
[oni] sound true Enables sound.
[oni] switch true Enables always switching screen to resolution on Oni's Options screen, making the game fullscreen; opposite of Oni's built-in argument "noswitch".
[windows] alttab true Allows user to switch applications while in Oni (Alt-Tab) and use the Windows key; however, it may enable the screensaver as well.
[windows] border true Adds a border in windowed mode if '[graphics] daodangl' is active.
[windows] clipcursor true Limits cursor to Oni's window. This is always enabled if Daodan Input is enabled.
[windows] daodaninput true A new input system which reports input on every frame, which should fix issues with mouse lag/judder and high-FPS displays.
[windows] directinput true Forces on DirectInput when Daodan Input is disabled.
[windows] mousesensitivity 1.0 Multiplier for mouse movement values when Daodan Input is enabled. 1.0 is Oni's default.
[windows] disablecmdline true Disables Oni's existing command line parser as Daodan has its own.
[windows] killvtune false Prevents loading of vtuneapi.dll.
[windows] safeprintf true Replaces Oni's function that prints to startup.txt with a safer one.
[windows] topmost false Keeps game window on top in windowed mode, even when switching applications.
[windows] usegettickcount true Replaces Oni's timing functions with more accurate ones.

Added cheat codes

  • bigbadboss
Player takes less weapon damage.
  • buddha
Player is unkillable (will not go below 1HP).
  • bulletproof
Player takes no weapon damage.
  • kangaroo
Player can make super-high jumps.
  • marypoppins
Player can fly by holding down jump key.
  • shinobi
Extra difficulty mode; player always has 1HP, but also is immune to weapons, and the enemy AI cannot hear the player.

Added BSL functions

Any time a function can both get and set a value, and you set the value, the old value should be returned, barring any programming oversight by Gumby.

Math

  • int int32div n1:int n2:int
Divides two integers
  • int int32mul n1:int n2:int
Multiplies two integers
  • float div [int1:int|float1:float] [int2:int|float2:float]
Divides two two numbers
  • float mul [int1:int|float1:float] [int2:int|float2:float]
Multiplies two numbers
  • int int32rand start:int end:int
Returns a pseudo-random number between two numbers (inclusive).

Characters

  • float d_distance [ai_name:string | script_id:int] [ai_name:string | script_id:int]
Gets the distance between two characters
  • int d_getdamage [ai_name:str | script_id:int]
Gets the amount of damage a character has caused
  • int d_getindex [ai_name:str]
Gets a character's script_id from their name
  • int d_getkills [ai_name:str | script_id:int]
Gets the number of kills a character has
  • int d_health [ai_name:str | script_id:int] [newhealth:int]
Gets or sets a character's health
  • int d_holdkey [ai_name:string | script_id:int] keys frames:int
Makes a character hold a key
Possibly broken
  • int d_isheld keys
Checks if player is holding a key
Possibly broken
  • float d_location [ai_name:string | script_id:int] axis:string anything:string
Gets the X, Y or Z coordinate of a character, as specified in "axis"; the "anything" parameter is unused but must be present
  • float d_location [ai_name:string | script_id:int] x:float y:float z:float
Sets the XYZ coordinates of a character
  • int d_maxhealth [ai_name:str | script_id:int] [newmaxhealth:int]
Gets or sets a character's maxhealth
  • string d_name [ai_name:str | script_id:int] [newname:string]
Gets or sets a character's name
  • int d_powerup ai_name:str|script_id:int powerup:str [newcount:int]
Gets or sets the amount of powerups a character has
Powerup list is the same one used with chr_givepowerup, with the addition of "bossshield"
  • int d_regen [ai_name:str | script_id:int] on_off:bool
Gets or sets a character's regeneration (like elderrune for the player)
  • int d_waitforkey keys
Waits for a keypress from the player

Text

  • void d_dprint text:string [textcolor: r b g] [shadowcolor: r b g]
Prints to console in color
Colors are ints between 0 and 255. Other numbers will be reduced to 255.
Any colors you do not supply will be replaced with the default values: 255, 255, 255 and 63, 63. 63
  • string sprintf str1:format ...
Does a C-style sprintf operation on a string

Added input bindings

When Daodan Input is enabled, the following inputs can be bound in key_config.txt in addition to the usual ones.

  • mousebutton5
The "forward" button on most 5-button mice.
  • scrollup
Scrolling up one notch on a mouse scroll wheel or touchpad.
  • scrolldown
Scrolling down one notch on a mouse scroll wheel or touchpad.
  • scrollleft
Scrolling left on a mouse with an omnidirectional scroll wheel or a touchpad.
  • scrollright
Scrolling right on a mouse with an omnidirectional scroll wheel or a touchpad.
  • pagedown
This was broken in DirectInput mode in vanilla Oni.