### How to install ###

Copy to the same folder as your Oni.exe:
Main: binkw32.dll,libgcc_s_dw2-1.dll,libode_single.dll,libssp-0.dll,libstdc++-6.dll,libwinpthread-1.dll,realbink.dll
Optional: discord-rpc.dll
Note: If you are running AE, you will already have realbink.dll, this is the exact same file

Note that for Anniversary Edition exe is located in AE folder

There is a bundled daodan.ini in ini folder that has all fps daodan specific options set to their default values and has a comment with description for each one.
You can copy over bundled daodan.ini with descriptions from ini folder or make changes manually in your existing one.
You should put it in the same folder as Oni.exe.

### First Person Mode ###

To enable first person mode you can:
- Add "firstpersonmode = true" to daodan.ini in [gameplay] section.
- Add custom keybind "fpstoggle" to key_config.txt. Example: "bind X to fpstoggle".
- Use "fpsmode" cheatcode in F1 menu.

You can also change fov to your liking by adding
"firstpersonfov = [your value]" to daodan.ini in [gameplay] section.

First person mode bsl variables:
d_usefirstperson - enables or disables first person (0/1)
d_fpsFw - forward camera offset from the heads origin in first person
d_fpsUp - vertical camera offset from the heads origin in first person
d_fpsgs_fov_set - same as the original function, value to be used in first person only (changes only on entering first person)
d_fpsNearClipPlane - near clip setting in first person
d_fpscm_distance - same as the original variable to be used in first person only
d_fpsheadFw - controls head martix distance from camera



### Bindable Sprint ###

To use bindable sprint you can:
Add custom keybind "sprint" to key_config.txt if you want hold to sprint. Example: "bind X to sprint"
Add custom keybind "sprinttoggle" to key_config.txt if you want toggle sprint. Example: "bind X to sprinttoggle"

You can also disable original doubletap sprint behavior by adding
"disabledoubletapsprint = true" to daodan.ini in [gameplay] section.



### Visible Holster ###

Makes holstered weapon visible.
To enable if use "onmyhip" cheatcode or set "visibleholster = true" in daodan.ini in [graphics] section.



### Scope Mode ###

To use bindable sprint you can:
Add custom keybind "scope" to key_config.txt if you want hold to scope. Example: "bind X to scope"
Add custom keybind "scopetoggle" to key_config.txt if you want toggle scope. Example: "bind X to scopetoggle"

Scope bsl variables (note that these are reset to gun specific values on entering scope):
d_scopegs_fov_set - same as the original function, value to be used in first person only
d_scopeFw - forward camera offset from the gun in scope
d_scopeSd - side camera offset from the gun in scope
d_scopeUp - vertical camera offset from the gun in scope
d_scopecm_distance - same as the original variable to be used in scope only



### Discord Rich Presence ###

OFF by default.
To enable it add "discordrpc = true" to daodan.ini in [oni] section.
Note that you don't need discord-rpc.dll if you don't plan to use Discord Rich Presence.



### Fix sky seams ###

ON by default.
To disable it add "fixsky = false" to daodan.ini in [graphics] section.



### Fix Console Kicking Bug ###

ON by default.
To disable it add "fixconkick = false" to daodan.ini in [gameplay] section.
Fixes kicking the console instead of using it when still holding the movement key.



### Reload Drop Ammo ###

ON by default.
To disable it add "reldropammo = false" to daodan.ini in [gameplay] section.
Drop ammo, inse if reload is interrupted before weapon's ammo is replenished.



### UI scale ###

daodan.ini in [graphics] section:
uiscale = float value or small/medium/large - scales HUD elements by value. Can also be changed by console variable d_uiscale in game.
subtscale = float value or small/medium/large - scales subtitles and messages by value. d_subtscale variable can also used.
Where autoscale options are:
small - autoscale trying to match 1280x768 in size
medium - autoscale trying to match 800x600 in size
large - autoscale trying to match 640x480 in size



### ODE physics: ragdolls and physics objects ###

To enable add "enableODE = true" to daodan.ini in [ode] section.
Check phys_commands.txt for tweaking and object BSL commands
Check AnimRules\readme.txt for info on phys animation rules

Other settings that you can set in daodan.ini in [ode]:
ODEthreads = <number> - sets number of threads ODE will use. 0 - do not multithread. Default: 0

collideragdolls = true/false - enables collision between ragdolls. Default: true
selfcollideragdolls = true/false - enables ragdoll collision with itself. Default: true
odeusequadtreespace = true/false - enables the use of quad tree space for the environment. Default: true
odedoublestep = true/false - two ODE simulation steps per one Oni game step for better precision. Default: true

ragdollonlyondeath = true/false - ragdoll only on character's death. Default: false
ragdollinsidewall = true/false - allow ragdolls to initiate when character is inside a wall. Default: true
ragdollcorpses = true/false - enables the use of dynamic ragdoll corpses. Requires 'collideragdolls' to be enabled. Default: true

Custom bindiable actions:
can be bound in key_config.txt
playdead - falls back, equivalent to ctrl+F7 in devmode.
playdeadfront - same but fall forwards.



### Geom Sky (3d skybox) ###

ON by default.
Can be used for modding. A set of BSL functions to create 3d skyboxes. See geomsky_commands.txt for a list of functions.
"GeomSky = false" to daodan.ini in [modding] to disable.



### Max Corpses ###

Sets the new maximum corpses.
"maxcorpses = [value > 20]" in daodan.ini in [graphics] section.



### Weapon Stay ###

Ensures that "wp_disable_fade" is always enabled, even if level scripting changes it, so that weapons never disappear.
"weaponstay = true" to daodan.ini in [gameplay] to enable



### Bloody Screen ###

Adds red tint to the screen when taking damage, which fades over time.
"bloodyscreen = true" in daodan.ini in [graphics] section or cheatcode "soreal" to enable.
bloodyscreen_dmgscale - bsl variable to set damage multiplier for the amount of red you get
bloodyscreen_speed - bsl variable to set how quickliy screen will clear
bloodyscreen_white - bsl variable to set how white the bloody screen is. The lower the value the purer the red.



### Cutscene Skip ###

Always ON
Cutscenes can be skipped with Escape



### Quicksave ###

Allows to save the game at any moment
New keybinds in key_config.txt:
quicksave
quickload

Note that when you enable Developer Mode F1-F12 keys will be rebound to Developer Mode functions.



### Quicksave style saves on checkpoints ###

OFF by default.
Makes a quicksave style save, in addition to a normal checkpoint, and loads it when loading through a menu.
Allows for more consistency in the level when loading a save. I.e. doors don't lock behind you and enemies stay in the same spots.
"checkpoint_saves = true" to daodan.ini in [oni] to enable.



### Autoexec File ###

If there is "oni_autoexec.txt" beside Oni.exe, it will be piped in as bsl commands line by line on level load.



### New Throw Logic ###

ON by default.
Can be used for modding. Adds a more definite link between the thrower and the thrown animations which allows for more unique throw moves to be added than it was previously possible.
Also adds a collision check to prevent throwing whrough walls.
If xml editing the animation, in throw target animation replace

<ThrowSource />

With

<ThrowSource>
    <TargetAdjustment>
        <Position>0 0 0</Position>
        <Angle>0</Angle>
    </TargetAdjustment>
    <Distance>0</Distance>
    <TargetType>*Your throw source animation type*</TargetType>
</ThrowSource>
To link back animation type of the source in the target. This will prevent wrong animation from playing when there is multiple choices.

"newthrowlogic = false" to daodan.ini in [oni] to disable new throw logic entirely.
"throwcheckforwalls  = false" to daodan.ini in [oni] to disable only the collision check and allow throwing through walls. Does nothing if enabled or disabled when new throw logic is disabled.



### Also ###

you can use "chibimode" cheatcode to make everyone a bit puffier.

chibimode bsl variables:
d_chibimode - enables or disables chibimode (0/1)
d_chibi_amount - chibimode size multiplier


Additional unrelated bsl functions:
- d_isinair - Gets or sets character's isinair value. [ai_name:string | script_id:int] [setvalue:int|]
- d_nearclipplane_set - Sets near clipping plane and adjusts current fog value to match. [newvalue:float|]
  Note that any fog changes called by Oni levels bsl will set fog to wrong values.
- d_move - Teleports character to location. Character must be active. [ai_name:string | script_id:int] [X:float] [Y:float] [Z:float]
- d_shift - Offsets character location. Character must be active. [ai_name:string | script_id:int] [X:float] [Y:float] [Z:float] [headingmode:int]
- d_push - Pushes airbourne character by a vector. Character must be active.
  This can be used to make jetpack or jump pads.
Heading modes for d_shift and d_push are: 0 - absolute, 1 - relative to the body heading, 2 - relative to the head heading