Daodan DLL: Difference between revisions

From OniGalore
Jump to navigation Jump to search
m (→‎All options: fixed typo, sorted items)
m (→‎All patches: sorting items)
Line 69: Line 69:
!Description
!Description
|-
|-
|levelplugins
|alttab
|true
|Allows user to switch applications while in Oni (Alt-Tab) and use Windows key, however it may enable the screensaver as well.
|-
|argb8888
|true
|Textures using ARGB8888 can be used.
|-
|bsl
|true
|Enables d_regen (unfinished) and prevents fly-in portraits from being stretched when playing in widescreen resolutions.
|-
|cheater
|true
|
|-
|cheatsenabled
|true
|true
|Allows level files to be loaded from the GDF which do not end in "_Final".
|Enables cheats without having to beat the game first.
|-
|-
|fonttexturecache
|cheattable
|true
|true
|Doubles size of font texture cache.
|
|-
|-
|largetextures
|cooldowntimer
|true
|true
|Textures up to 512x512 can be used.
|Disables weapon cooldown exploit.
|-
|-
|pathfinding
|daodandisplayenum
|true
|true
|Multiples size of pathfinding grid cache by eight in order to prevent crashes in large levels.
|Offers more display modes in the Options menu.
|-
|-
|projaware
|daodaninit
|true
|true
|Allows AI to dodge incoming gunfire properly.
|Adds new Daodan BSL functions.
|-
|-
|directinput
|directinput
Line 93: Line 109:
|Forces on DirectInput.
|Forces on DirectInput.
|-
|-
|wpfadetime
|disablecmdline
|true
|Ditto above.
|-
|fonttexturecache
|true
|Doubles size of font texture cache.
|-
|getcmdline
|true
|true
|Adds working function for existing BSL command wp_fadetime, sets fade time to 4800.
|Replaces existing command line with Daodan's in order to add new commands.
|-
|-
|kickguns
|kickguns
Line 101: Line 125:
|Unfinished, do not use.
|Unfinished, do not use.
|-
|-
|cooldowntimer
|killvtune
|REMOVED
|Would prevent loading of vtuneapi.dll.
|-
|largetextures
|true
|true
|Disables weapon cooldown exploit.
|Textures up to 512x512 can be used.
|-
|-
|throwtest
|levelplugins
|false
|
|-
|alttab
|true
|true
|Allows user to switch applications while in Oni (Alt-Tab) and use Windows key, however it may enable the screensaver as well.
|Allows level files to be loaded from the GDF which do not end in "_Final".
|-
|particledisablebit
|false
|Unlocks particle action disabling/enabling bits for all events.
|-
|-
|multibyte
|multibyte
Line 121: Line 141:
|Enables languages which use multibyte coding (such as Chinese).
|Enables languages which use multibyte coding (such as Chinese).
|-
|-
|cheattable
|newweap
|true
|true
|
|Picking up a weapon displays a message containing the weapon name and amount of ammo.
|-
|-
|argb8888
|particledisablebit
|true
|false
|Textures using ARGB8888 can be used.
|Unlocks particle action disabling/enabling bits for all events.
|-
|-
|killvtune
|pathfinding
|REMOVED
|Would prevent loading of vtuneapi.dll.
|-
|getcmdline
|true
|true
|Replaces existing command line with Daodan's in order to add new commands.
|Multiples size of pathfinding grid cache by eight in order to prevent crashes in large levels.
|-
|-
|disablecmdline
|projaware
|true
|true
|Ditto above.
|Allows AI to dodge incoming gunfire properly.
|-
|-
|safeprintf
|safeprintf
Line 145: Line 161:
|Replaces Oni's function that prints to startup.txt with a safer one.
|Replaces Oni's function that prints to startup.txt with a safer one.
|-
|-
|daodandisplayenum
|throwtest
|false
|
|-
|usedaodangl
|true
|true
|Offers more display modes in the Options menu.
|Provides an improved windowed mode (-noswitch); this patch is known to break the hiding of the Windows taskbar.
|-
|-
|usegettickcount
|usegettickcount
|true
|true
|Replaces Oni's timing functions with more accurate ones.
|Replaces Oni's timing functions with more accurate ones.
|-
|cheatsenabled
|true
|Enables cheats without having to beat the game first.
|-
|usedaodangl
|true
|Provides an improved windowed mode (-noswitch); this patch is known to break the hiding of the Windows taskbar.
|-
|-
|windowhack
|windowhack
Line 165: Line 177:
|Fallback to be used for simpler windowed mode hack instead of "usedaodangl".
|Fallback to be used for simpler windowed mode hack instead of "usedaodangl".
|-
|-
|daodaninit
|wpfadetime
|true
|true
|Adds new Daodan BSL functions.
|Adds working function for existing BSL command wp_fadetime, sets fade time to 4800.
|-
|bsl
|true
|Enables d_regen (unfinished) and prevents fly-in portraits from being stretched when playing in widescreen resolutions.
|-
|cheater
|true
|
|-
|newweap
|true
|Picking up a weapon displays a message containing the weapon name and amount of ammo.
|}
|}



Revision as of 13:37, 20 January 2013

The Daodan DLL is a modification for Oni that hooks into the game engine and applies bug fixes and patches. It also replaces parts of the engine with its own code. Daodan fixes many issues, including the famous "Blam!" error that occurs on many Windows XP machines. It also adds new features such as support for extra screen resolutions (including many widescreen resolutions) and bonus cheat codes.

Installation Instructions

  1. Before installation, it is important to know where your copy of Oni has been installed to. For most people, it is stored in "C:\Program Files\Oni" (My Computer -> Local Disk (C:) -> Program Files -> Oni). This folder should contain a "GameDataFolder" and "Oni" or "Oni.exe".
  2. It is important that you use an "Oni.exe" that is compatible with Daodan. If you are using the FASM-Daodan, Oni will not start unless you have the correct EXE. If you are using the recommended version of C-Daodan, Oni will start, but most of the features of Daodan will not be present.
  3. Back up your Oni.exe and binkw32.dll files by renaming them (e.g. "Oni-original.exe").
  4. Place the newly-downloaded Oni.exe, binkw32.dll (and realbink.dll, if provided) in the folder with Oni.exe.

Testing

To test if you have done everything correctly, run "Oni.exe". Enter the pause (Diary) screen (F1 by default) and type "tellmetheversion"; if you get a result like "Daodan v.3.0", the DLL is working.

C-Daodan

This is the recommended version of the Daodan DLL. This is also the only version that supports windowed mode.

Download C-Daodan (binkw32.dll) —> Use with this version of the game app (you probably already have it)

Feature summary

  • Windows XP patch - Fixed Oni crashing at startup on modern computers.
  • Windowed mode - Oni runs inside a window.
  • Custom screen resolutions - Includes many more default screen resolutions and the ability to add custom resolutions (see below).
  • BGRA32 (ARGB8888) support.
  • Extra cheats - bigbadboss (player takes less weapon damage), bulletproof (player takes no weapon damage), kangaroo (high jumps), marypoppins (flight).
  • Cheats always enabled; no need to beat game first.
  • Extra command line options (for advanced users) - For a list, type "Oni -help".
  • DirectInput is used on NT, XP and Vista - Better support for keyboard layouts.
  • AIs have ability to properly dodge projectiles.
  • Stops fly-in character portraits from being stretched when playing in widescreen.

Settings

Patches

Creating a file called Daodan.ini in the same directory as the Daodan DLL will allow you to enable/disable the patches inside Daodan. It can also be used to store configuration settings and language items. Each setting is stored inside a section as a name and value pair.

To enable a patch, look for the patches section in your Daodan.ini. If the patches section doesn't exist, create it by typing

[Patch]

at the end of your file. You can now enable or disable patches by typing the patch name followed by =True or =False (caps and spacing don't matter). For example, let's say you want to turn off the cooldown timer patch (so you can drop and pick up the Mercury Bow after firing to fire again immediately) and the new windowed mode makes your game crash or makes it run slowly:

[Patch]
CooldownTimer = False
WindowHack = False

All patch names are found in the "All patches" section below.

Options

With an unpatched Oni, the only way to change settings such as windowed mode was to create a batch file (.bat) and type command line options into it. In the beta Daodan, options can be added to the Daodan.ini. To add an option, look for the options section or type

[Options]

at the end of your Daodan.ini. To enable windowed mode by default, type:

[Options]
Switch = False

Similarly, to disable sound, add the line:

[Options]
Switch = False
Sound = False

A list of options can be found in the "All options" section below.

Command-line arguments

Command line options are still present in the beta Daodan although the syntax is a little different (and a bit more powerful.) The basic syntax for a command line option is this:

-<ini section>.<name> <value>

Where <ini section> is the Daodan.ini section (usually Patch or Options,) <name> is the option and <value> is the value to set it to (usually True or False.) Therefore, 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 <name> 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. Currently Oni's command line parser isn't powerful enough to parse language elements (no support for quoting arguments); this will be fixed in a later release.

All patches

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

INI name Default Description
alttab true Allows user to switch applications while in Oni (Alt-Tab) and use Windows key, however it may enable the screensaver as well.
argb8888 true Textures using ARGB8888 can be used.
bsl true Enables d_regen (unfinished) and prevents fly-in portraits from being stretched when playing in widescreen resolutions.
cheater true
cheatsenabled true Enables cheats without having to beat the game first.
cheattable true
cooldowntimer true Disables weapon cooldown exploit.
daodandisplayenum true Offers more display modes in the Options menu.
daodaninit true Adds new Daodan BSL functions.
directinput true Forces on DirectInput.
disablecmdline true Ditto above.
fonttexturecache true Doubles size of font texture cache.
getcmdline true Replaces existing command line with Daodan's in order to add new commands.
kickguns false Unfinished, do not use.
killvtune REMOVED Would prevent loading of vtuneapi.dll.
largetextures true Textures up to 512x512 can be used.
levelplugins true Allows level files to be loaded from the GDF which do not end in "_Final".
multibyte false Enables languages which use multibyte coding (such as Chinese).
newweap true Picking up a weapon displays a message containing the weapon name and amount of ammo.
particledisablebit false Unlocks particle action disabling/enabling bits for all events.
pathfinding true Multiples size of pathfinding grid cache by eight in order to prevent crashes in large levels.
projaware true Allows AI to dodge incoming gunfire properly.
safeprintf true Replaces Oni's function that prints to startup.txt with a safer one.
throwtest false
usedaodangl true Provides an improved windowed mode (-noswitch); this patch is known to break the hiding of the Windows taskbar.
usegettickcount true Replaces Oni's timing functions with more accurate ones.
windowhack false Fallback to be used for simpler windowed mode hack instead of "usedaodangl".
wpfadetime true Adds working function for existing BSL command wp_fadetime, sets fade time to 4800.

All options

Below are the names of the options you can turn on and off in Daodan.ini (names are case-insensitive). Also noted is whether the DLL has this option turned on or off by default.

INI name Default Description
border true If "windowhack" patch is active, make sure game window has border in windowed mode.
multibyte false Redirects to patch "multibyte"; see "Patches" section.
shadow false If "windowhack" patch is active, make sure game window has shadow in windowed mode.
switch true Simply an inversely-named alternative to the built-in "noswitch".
topmost false Keep game window on top in windowed mode, even when switching applications.
usedaodanbsl true Adds new BSL commands (see below).
various -- Oni's built-in arguments; see Customizing#Command-line_arguments.

Added BSL functions

BSL

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

Math

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

Characters

  • int d_getkills [ai_name:str | script_id:int]
Gets the number of kills a character has
  • int d_getdamage [ai_name:str | script_id:int]
Gets the amount of damage a character has caused
  • string d_name [ai_name:str | script_id:int] [newname:string]
Gets or sets a character's name
  • string d_regen [ai_name:str | script_id:int] on_off:bool
Currently broken, won't do anything
  • int d_getindex [ai_name:str]
Gets a character's script_id from their 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 the same as with chr_givepowerup with the addition of "bossshield"
  • int d_health [ai_name:str | script_id:int] [newhealth:int]
Gets or sets a character's health
  • int d_maxhealth [ai_name:str | script_id:int] [newmaxhealth:int]
Gets or sets a character's maxhealth
  • 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
  • int d_waitforkeypress keys
Waits for a keypress from the player
  • int d_powerup [ai_name:string | script_id:int] powerup:string
Gets or sets a character's powerups
  • float d_location [ai_name:string | script_id:int] xyz:string
Gets the X\Y\Z coordinate of a character
  • float d_location [ai_name:string | script_id:int] x:float y:float z:float
Sets the XYZ coordinates of a character
  • int d_regen [ai_name:string | script_id:int] yesno:int
Gets or sets a character's regeneration abilities

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

Developer Mode

The DLL enables Developer Mode; go to the pause screen (F1) and type "thedayismine" or simply 'x' to activate it.

Custom screen resolutions

If you wish to run in a screen resolution that is not available and you are running the recommended version of C-Daodan, create a text file (Notepad document) called "res.txt" in your Oni folder (C:\Program Files\Oni) containing a list of custom resolutions in this format (one resolution per line):

800x600
1024x600
1024x768

FASM-Daodan (old)

There is also a much older release of Daodan, referred to as FASM-Daodan. This is the original version by SFeLi. Unlike the C-Daodan, FASM-Daodan requires a different DLL to be downloaded depending on which Oni.exe is used. It does not support the newer Daodan features, such as windowed mode and custom resolutions, however it still contains the basic patches such as the Windows XP patch and the custom cheats.

Download a ZIP containing the DLLs for each version.

Download a ZIP containing the DLLs for an experimental (unstable) FASM-Daodan This includes the projectile awareness patch and support for any language (except Chinese and Japanese).