OBD:ONCC: Difference between revisions

removed note about MELE overriding dazed frame fields; minor wording tweaks
No edit summary
(removed note about MELE overriding dazed frame fields; minor wording tweaks)
 
(31 intermediate revisions by 7 users not shown)
Line 1: Line 1:
{{OBD_File_Header | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character | align=center}}
{{OBD_File_Header | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character | align=center}}


 
[[Image:oncc_a.gif]]
[[image:oncc_a.gif]]
 


{{Table}}
{{Table}}
Line 9: Line 7:
{{OBDtr| 0x000 | res_id  |FF0000| 01 DF 03 00 | 991        | 00991-konoko_generic.ONCC }}
{{OBDtr| 0x000 | res_id  |FF0000| 01 DF 03 00 | 991        | 00991-konoko_generic.ONCC }}
{{OBDtr| 0x004 | lev_id  |FFFF00| 01 00 00 06 | 0          | level 3 }}
{{OBDtr| 0x004 | lev_id  |FFFF00| 01 00 00 06 | 0          | level 3 }}
{{OBDtr| 0x008 | float    |00FF00| CD CC 0C 3F | 0.550000    | downwards velocity? (unknown, always 0.55) }}
{{OBDtr| 0x008 | float    |00FF00| CD CC 0C 3F | 0.550000    | fall speed (always 0.55) (mostly unused, see below) }}
{{OBDtr| 0x00C | float    |00FF00| 8F C2 75 3D | 0.060000    | downward gravity acceleration }}
{{OBDtr| 0x00C | float    |00FF00| 8F C2 75 3D | 0.060000    | strength of gravity for this character }}
{{OBDtr| 0x010 | float    |00FF00| CD CC 8C 3F | 1.100000    | starting velocity for a simple (tap) JUMP }}
{{OBDtr| 0x010 | float    |00FF00| CD CC 8C 3F | 1.100000    | starting velocity for a simple (tap) JUMP }}
{{OBDtr| 0x014 | float    |00FF00| 00 00 80 C0 | -4.000000  | limit velocity for jumping and gravity flight }}
{{OBDtr| 0x014 | float    |00FF00| 00 00 80 C0 | -4.000000  | maximum velocity for jumping and falling }}
{{OBDtr| 0x018 | float    |00FF00| 8F C2 F5 3C | 0.030000    | upward acceleration (jetpack) if you hold JUMP }}
{{OBDtr| 0x018 | float    |00FF00| 8F C2 F5 3C | 0.030000    | upward acceleration as long as you hold JUMP }}
{{OBDtr| 0x01C | int16    |00FFFF| 07 00      | 7          | gravity timer? (unknown, always 7) }}
{{OBDtr| 0x01C | uint16  |00FFFF| 07 00      | 7          | fall timer (always 7) (mostly unused, see below) }}
{{OBDtr| 0x01E | int16    |00FFFF| 14 00      | 20          | jetpack timer; time during which you can use the jetpack }}
{{OBDtr| 0x01E | uint16  |00FFFF| 14 00      | 20          | how long you can continue holding down JUMP to increase the height of your jump }}
{{OBDtr| 0x020 | float    |FF00FF| 00 00 34 42 | 45.000000  | maximal falling height without damage }}
{{OBDtr| 0x020 | float    |FF00FF| 00 00 34 42 | 45.000000  | maximum falling height without damage }}
{{OBDtr| 0x024 | float    |FF00FF| 00 00 07 43 | 135.000000  | maximal falling height with damage }}
{{OBDtr| 0x024 | float    |FF00FF| 00 00 07 43 | 135.000000  | maximum falling height with damage }}
|}
|}




;Units:times are in frames
;Units
:heights are in world units
:Times are in frames
:velocities are in world units per frames
:Heights are in world units (0.1m or 4")
:accelerations are in world units per frames squared
:Velocities are in world units per tick (1/60s)
;Downwards velocity: could correspond to the steady push experienced when neither jumping nor falling
:Accelerations are in world units per tick squared
:would be roughly equivalent to the starting velocity of a fall
 
:although the value .55 seems right, the "sinking" seems to be hardcoded now
 
;Gravity timer:Seems to be hardcoded now (could be the time until gravity switches on)
;Fall speed and timer
;Jetpack timer:You can press JUMP multiple times during the time window (quite fun!)
:The fields 0x008 and 0x01C are only looked at when predicting whether an attack will hit a target while the attacker is in midair. They are probably a development relic that is looked at in error, as the actual falling speed is determined by the gravity setting at 0x00C and the actual "fall timer" is the jump timer at 0x01E.
 
 
;Jump timer
:You can press JUMP multiple times during the time window when it's large enough. See the [http://mods.oni2.net/node/83 Barabas Jetpack mod] for an application of this principle.
 
 
;Falling height: let FH1 be the height at 0x20
;Falling height: let FH1 be the height at 0x20
:let FH2 be the height at 0x24
:let FH2 be the height at 0x24
Line 38: Line 42:
:if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH
:if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH


;Shadow Constants


{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x028 | link    |FF8000| 01 F8 03 00 | 1016        | link to 01016-shadow1.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x028 | link    |FF8000| 01 F8 03 00 | 1016        | link to 01016-shadow1.[[OBD:TXMP|TXMP]] }}
{{OBDtr| 0x02C | float    |FF8000| 00 00 40 41 | 12.000000  | height where the shadow fades out completely }}
{{OBDtr| 0x02C | float    |FF8000| 00 00 40 41 | 12.000000  | height where the diameter of the shadow shrinks to 0x03C }}
{{OBDtr| 0x030 | float    |FF8000| 00 00 00 41 | 8.000000    | height where the diameter of the shadow decreases and the shadow fades out half }}
{{OBDtr| 0x030 | float    |FF8000| 00 00 00 41 | 8.000000    | height range over which the diameter of the shadow decreases from 0x034 to 0x038 and the shadow starts to fades out from 0x040 to 0x042 }}
{{OBDtr| 0x034 | float    |FF8000| 00 00 C0 40 | 6.000000    | height where the diameter of the shadow decreases }}
{{OBDtr| 0x034 | float    |FF8000| 00 00 C0 40 | 6.000000    | maximum diameter of the shadow }}
{{OBDtr| 0x038 | float    |FF8000| 00 00 90 40 | 4.500000    | height where the diameter of the shadow decreases }}
{{OBDtr| 0x038 | float    |FF8000| 00 00 90 40 | 4.500000    | diameter that the shadow shrinks to when 0x030 is reached }}
{{OBDtr| 0x03C | float    |FF8000| 00 00 40 40 | 3.000000    | height where the diameter of the shadow decreases }}
{{OBDtr| 0x03C | float    |FF8000| 00 00 40 40 | 3.000000    | minimum diameter of the shadow }}
{{OBDtr| 0x040 | int16    |FF8000| 30 00      | 48          | transparency of the shadow for the first part of a jump }}
{{OBDtr| 0x040 | uint16  |FF8000| 30 00      | 48          | starting transparency of the shadow as the character rises towards 0x030 }}
{{OBDtr| 0x042 | int16    |FF8000| 30 00      | 48          | transparency of the shadow for the second part of a jump }}
{{OBDtr| 0x042 | uint16  |FF8000| 30 00      | 48          | starting transparency of the shadow when the character begins to get above 0x030 }}
|}
|}


;Jump Constants?


;Jump Constants
These fields were deprecated at some point in Oni's development and do nothing.
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x044 | float    |FF0080| 00 00 C8 41 | 25.000000  | unknown; always the same }}
{{OBDtr| 0x044 | float    |FF0080| 00 00 C8 41 | 25.000000  | "jump distance"; unused (always 25) }}
{{OBDtr| 0x048 | int8    |FFC8C8| 16          | 22         | unknown }}
{{OBDtr| 0x048 | uint8    |FFC8C8| 16          | 22         | "jump height"; unused (always 22) }}
{{OBDtr| 0x049 | int8    |FFC8C8| 06          | 6         | unknown; always the same }}
{{OBDtr| 0x049 | uint8    |FFC8C8| 06          | 6           | "jump distance squares"; unused (always 6) }}
{{OBDtr| 0x04A | char[2]  |FFC8C8| AD DE      | dead        | unused; always the same }}
{{OBDtr| 0x04A | char[2]  |FFC8C8| AD DE      | dead        | padding }}
|}
|}


;Cover\autofreeze\Inventory Constants?


;Cover Constants
These fields were deprecated at some point in Oni's development and do nothing.
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x04C | float    |FFFFC8| 00 00 20 42 | 40.000000  | unknown; always the same }}
{{OBDtr| 0x04C | float    |FFFFC8| 00 00 20 42 | 40.000000  | "ray increment"; unused (always 40) }}
{{OBDtr| 0x050 | float    |FFFFC8| 00 00 96 43 | 300.000000  | unknown; always the same }}
{{OBDtr| 0x050 | float    |FFFFC8| 00 00 96 43 | 300.000000  | "ray max"; unused (always 300) }}
{{OBDtr| 0x054 | float    |FFFFC8| 35 FA 8E 3C | 0.017453    | unknown; always the same (0.017453 <nowiki>=</nowiki> PI/180) }}
{{OBDtr| 0x054 | float    |FFFFC8| 35 FA 8E 3C | 0.017453    | "ray angle"; unused (always π/180) }}
{{OBDtr| 0x058 | float    |FFFFC8| DB 0F C9 3F | 1.570796    | unknown; always the same (1.57 <nowiki>=</nowiki> PI/2) }}
{{OBDtr| 0x058 | float    |FFFFC8| DB 0F C9 3F | 1.570796    | "ray angle max"; unused (always π/2) }}
{{OBDtr| 0x05C | float    |FFFFC8| 00 00 A0 40 | 5.000000    | unknown; always the same }}
{{OBDtr| 0x060 | float    |FFFFC8| 00 00 80 3F | 1.000000    | unknown; always the same }}
{{OBDtr| 0x064 | int16    |C8FFC8| 06 00      | 6          | (inverse) hypo regeneration rate in frames per hitpoint }}
{{OBDtr| 0x066 | char[2]  |C8FFC8| AD DE      | dead        | unused }}
|}
|}


;LOD Constants


;Autofreeze Constants
These fields were deprecated at some point in Oni's development and do nothing.
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x068 | float    |C8FFFF| 00 10 3D 48 |193600.000000| unknown; always the same; this is 440 squared }}
{{OBDtr| 0x05C | float    |FFFFC8| 00 00 A0 40 | 5.000000    | "distance XZ"; unused (always 5) }}
{{OBDtr| 0x06C | float    |C8FFFF| 00 10 3D 47 | 48400.000000| unknown; always the same; this is 220 squared }}
{{OBDtr| 0x060 | float    |FFFFC8| 00 00 80 3F | 1.000000    | "distance Y"; unused (always 1) }}
{{OBDtr| 0x070 | float    |C8FFFF| 00 10 3D 46 | 12100.000000| unknown; always the same; this is 110 squared }}
{{OBDtr| 0x074 | float    |C8FFFF| 00 00 00 00 | 0.000000    | unknown; always the same }}
{{OBDtr| 0x078 | float    |C8FFFF| 00 00 00 00 | 0.000000    | unknown; always the same }}
|}
|}




;Hurt sound paramters
;Inventory Constants


{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x07C | int16   |FFC8FF| 23 00       | 35          | unknown; always the same }}
{{OBDtr| 0x064 | uint16   |C8FFC8| 06 00     | 6           | hypo regeneration rate in ticks per hit point restored }}
{{OBDtr| 0x07E | int16    |FFC8FF| 5A 00      | 90          | unknown; always the same }}
{{OBDtr| 0x066 | char[2]  |C8FFC8| AD DE       | dead        | padding }}
{{OBDtr| 0x080 | int16    |FFC8FF| 0F 00      | 15          | unknown; always the same }}
{{OBDtr| 0x082 | int16    |FFC8FF| 78 00      | 120        | unknown; always the same }}
{{OBDtr| 0x084 | int16    |FFC8FF| 23 00      | 35          | unknown; always the same }}
{{OBDtr| 0x086 | int16    |FFC8FF| 01 00      | 1          | unknown; always the same }}
{{OBDtr| 0x088 | int16    |FFC8FF| 02 00      | 2           | unknown; always the same }}
{{OBDtr| 0x08A | int16    |FFC8FF| 64 00      | 100        | unknown; always the same }}
{{OBDtr| 0x08C | int16    |FFC8FF| 0A 00      | 10          | unknown; always the same }}
{{OBDtr| 0x08E | int16    |FFC8FF| 0C 00      | 12          | unknown; always the same }}
{{OBDtr| 0x090 | int16    |FFC8FF| 16 00      | 22          | unknown; always the same }}
{{OBDtr| 0x092 | int8    |FFC800| 00          | 0          | used at runtime only: if one sound pointers have been set }}
{{OBDtr| 0x093 | char[1]  |C800C8| DE         | dead        | unused; always the same }}
{{OBDtr| 0x094 | float    |C87C64| 00 00 00 3F | 0.500000    | unknown; always the same (sound volume?) }}
{{OBDtr2|0x098 | char[32] |B0C3D4| konoko_hurt_light        | hurt light sound (reference to 08121-konoko_hurt_light.[[OBD:OSBD|imp.OSBD]] of level 0) }}
{{OBDtr2|0x0B8 | char[32] |B0C3D4| konoko_hurt_medium        | hurt medium sound (reference to 08123-konoko_hurt_medium.[[OBD:OSBD|imp.OSBD]] of level 0) }}
{{OBDtr2|0x0D8 | char[32] |B0C3D4| konoko_hurt_heavy        | hurt heavy sound (reference to 08119-konoko_hurt_heavy.[[OBD:OSBD|imp.OSBD]] of level 0) }}
{{OBDtr2|0x0F8 | char[32] |B0C3D4| konoko_death              | death sound (reference to 08115-konoko_death.[[OBD:OSBD|imp.OSBD]] of level 0) }}
{{OBDtr| 0x118 | int32    |E7CEA5| 00 00 00 00 | 0          | runtime only: pointer to hurt light sound }}
{{OBDtr| 0x11C | int32    |E7CEA5| 00 00 00 00 | 0          | runtime only: pointer to hurt medium sound }}
{{OBDtr| 0x120 | int32    |E7CEA5| 00 00 00 00 | 0          | runtime only: pointer to hurt heavy sound }}
{{OBDtr| 0x124 | int32    |E7CEA5| 00 00 00 00 | 0          | runtime only: pointer to death sound }}
|}
|}


;LOD Constants
Squares of the distance from the camera at which each LOD kicks in; see {{SectionLink|XML:ONCC|<LODConstants>}} for an explanation of this table, and {{SectionLink|Graphics|LOD}} for the full calculation on which LOD to use.
{{Table}}
{{OBDth}}
{{OBDtr| 0x068 | float    |C8FFFF| 00 10 3D 48 |193600.000000| min. distance for super-low LOD; always 440² }}
{{OBDtr| 0x06C | float    |C8FFFF| 00 10 3D 47 | 48400.000000| min. distance for low LOD; always 220² }}
{{OBDtr| 0x070 | float    |C8FFFF| 00 10 3D 46 | 12100.000000| min. distance for medium LOD; always 110² }}
{{OBDtr| 0x074 | float    |C8FFFF| 00 00 00 00 |    0.000000| min. distance for high LOD; always 0 }}
{{OBDtr| 0x078 | float    |C8FFFF| 00 00 00 00 |    0.000000| min. distance for super-high LOD; always 0 }}
|}




;Hurt Sound Constants
The numbers below cannot be understood without some elaboration. See [[XML:ONCC#.3CHurtSoundConstants.3E|HERE]] for the full calculation of whether to play a hurt sound and which sound to play.
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x128 | bitsets  |E7CEA5| 17 00 00 00 | 23         | general AI option bitset collection ; see below }}
{{OBDtr| 0x07C | uint16    |FFC8FF| 23 00       | 35          | minimum % chance of playing a pain sound if char. has not been hurt before (always 35) }}
{{OBDtr| 0x12C | float   |FFDDDD| 00 00 80 3F | 1.000000    | AI rotation speed factor }}
{{OBDtr| 0x07E | uint16    |FFC8FF| 5A 00       | 90          | maximum % chance of playing a pain sound if char. has not been hurt before (always 90) }}
{{OBDtr| 0x130 | int16   |64AAAA| 06 00      | 6           | minimal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned }}
{{OBDtr| 0x080 | uint16    |FFC8FF| 0F 00       | 15         | damage threshold; used to calculate a percentage chance of pain sound between min % and max % (always 15) }}
{{OBDtr| 0x132 | int16   |64AAAA| 18 00      | 24          | maximal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned }}
{{OBDtr| 0x082 | uint16   |FFC8FF| 78 00       | 120        | time in ticks before the damage tracker used for this AI's pain sounds resets (always 120) }}
{{OBDtr| 0x134 | int16   |EBEBEB| 0F 00      | 15          | minimal realize firingspread time; (???number of frames???time in miliseconds???) after which AI realizes that it is in the firing spread (and it starts dodging) }}
{{OBDtr| 0x084 | uint16    |FFC8FF| 23 00       | 35          | time in ticks that must pass between pain sounds being played (always 35) }}
{{OBDtr| 0x136 | int16   |EBEBEB| 00 00      | 0          | maximal realize firingspread time; (???number of frames???time in miliseconds???) }}
{{OBDtr| 0x086 | uint16   |FFC8FF| 01 00      | 1           | number of times that AI will play light pain sound before "upgrading" to a medium pain sound (always 1) }}
{{OBDtr| 0x088 | uint16   |FFC8FF| 02 00      | 2          | number of times that AI will play medium pain sound before "upgrading" to a heavy pain sound (always 2) }}
{{OBDtr| 0x08A | uint16   |FFC8FF| 64 00      | 100        | chance of playing a death sound (always 100) }}
{{OBDtr| 0x08C | uint16    |FFC8FF| 0A 00      | 10          | minimum damage required for an AI to play the pain sound at maximum volume (always 10) }}
{{OBDtr| 0x08E | uint16   |FFC8FF| 0C 00       | 12          | cumulative damage before a light pain sound gets upgraded to a medium pain sound (always 12) }}
{{OBDtr| 0x090 | uint16    |FFC8FF| 16 00      | 22          | cumulative damage before a medium pain sound gets upgraded to a heavy pain sound (always 22) }}
{{OBDtr| 0x092 | bool    |FFC800| 00          | 0          | runtime only: if sound pointers have been set (if sounds are found) }}
{{OBDtr| 0x093 | char[1]  |C800C8| DE          | dead        | padding }}
{{OBDtr| 0x094 | float    |C87C64| 00 00 00 3F | 0.500000    | minimum volume of pain sound (before 0x08C is reached and volume becomes 100%) }}
{{OBDtr2|0x098 | char[32] |B0C3D4| konoko_hurt_light        | light hurt sound (reference to 08121-konoko_hurt_light.[[OBD:OSBD|imp.OSBD]] of level 0) }}
{{OBDtr2|0x0B8 | char[32] |B0C3D4| konoko_hurt_medium        | medium hurt sound (reference to 08123-konoko_hurt_medium.imp.OSBD of level 0) }}
{{OBDtr2|0x0D8 | char[32] |B0C3D4| konoko_hurt_heavy        | heavy hurt sound (reference to 08119-konoko_hurt_heavy.imp.OSBD of level 0) }}
{{OBDtr2|0x0F8 | char[32] |B0C3D4| konoko_death              | death sound (reference to 08115-konoko_death.imp.OSBD of level 0) }}
{{OBDtr| 0x118 | offset    |E7CEA5| 00 00 00 00 | 0          | runtime only: raw offset of light hurt sound }}
{{OBDtr| 0x11C | offset    |E7CEA5| 00 00 00 00 | 0          | runtime only: raw offset of medium hurt sound }}
{{OBDtr| 0x120 | offset    |E7CEA5| 00 00 00 00 | 0          | runtime only: raw offset of heavy hurt sound }}
{{OBDtr| 0x124 | offset    |E7CEA5| 00 00 00 00 | 0          | runtime only: raw offset of death sound }}
|}
|}




;AI rotation speed factor
 
:reference rotation speed is about 1 turn (360&#65533;) per second
;AI Constants
:the setting is only effective if the AI is in control
 
:so it's a bit like the AI's mouse sensitivity :)
{{Table}}
{{OBDth}}
{{OBDtr| 0x128 | bitset  |E7CEA5| 17 00 00 00 | 23          | AI options bitset; see below }}
{{OBDtr| 0x12C | float    |FFDDDD| 00 00 80 3F | 1.000000    | AI rotation speed factor; always 1.0 except for ninjabots, ninjas and super_ninja, which use 2.0 }}
{{OBDtr| 0x130 | uint16  |64AAAA| 06 00      | 6          | minimum number of frames AI can remain dazed (in fallen position) when it is knocked down }}
{{OBDtr| 0x132 | uint16  |64AAAA| 18 00      | 24          | maximum number of frames AI can remain dazed (in fallen position) when it is knocked down (actual number used is picked randomly from the range {min ... max}) }}
{{OBDtr| 0x134 | uint32  |EBEBEB| 0F 00 00 00 | 15          | number of frames after which AI realizes that it is in the firing spread and it starts dodging }}
{{OBDtr| 0x138 | float    |8C8CCC| 00 00 80 3F | 1.000000    | minimum dodge time; how long AI should perform dodging/hiding in response to being inside a firing spread (the higher it is, the longer he will hide/dodge even after firing spread disappears) }}
{{OBDtr| 0x13C | float    |8C8CCC| 00 00 80 3F | 1.000000    | dodge priority dampening; the higher it is, the lower priority the AI gives to dodging }}
|}




;General AI options bitset
;AI options bitset
:allows or disables some parts of the AI behavior
:Allows or disables some parts of the AI behavior:
*NONE - startle anim is enabled, rest is disabled
*no flags - startle anim is enabled, rest is disabled
*0x01 - startle anim disabled
*0x01 - startle anim disabled
*0x02 - firingspread/projectile dodge enabled for melee
*0x02 - firing spread/projectile dodge enabled for melee
*0x04 - requires 0x02; firingspread/projectile dodge enabled for weapons; AI tries to face shooter and shoot back while dodging
*0x04 - requires 0x02; firing spread/projectile dodge enabled for weapons; AI tries to face shooter and shoot back while dodging
*0x08 - requires 0x02, overrides 0x04 if both are set; firingspread/projectile dodge enabled for weapons; AI isn't shooting, it just tends to run away, not facing shooter
*0x08 - requires 0x02, overrides 0x04 if both are set; firing spread/projectile dodge enabled for weapons; AI isn't shooting, it just tends to run away, not facing shooter
*0x10 - bit not used
*0x10 - bit not used




;AI rotation speed factor
:A rotation speed of 1 is roughly one turn (360°) per second. The setting is only effective if the AI is in control. So it's a bit like the AI's mouse sensitivity.
;AI Targeting Prediction Constants
See [[XML:ONCC#.3CTargeting.3E|HERE]] for how the variables here interact to control the AI's target prediction.
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x138 | float    |8C8CCC| 00 00 80 3F | 1.000000   | minimal firingspread dodge amount; IMO similar to maneouvre variable, it tells AI how long it should perform dodging/hiding in response to some time spent inside firing spread (so setting this very high means that once enemy starts dodging/hiding, he will perform it even after firing spread disappears) }}
{{OBDtr| 0x140 | float    |8C8CCC| 00 00 00 3F | 0.500000   | multiplied against target's distance to get error in AI's/turret's first wild shot (always 0.5) }}
{{OBDtr| 0x13C | float    |8C8CCC| 00 00 80 3F | 1.000000    | maximal firingspread dodge amount; IMO similar to maneouvre variable }}
{{OBDtr| 0x144 | float    |8C8CCC| 00 00 C8 41 | 25.000000  | max value for result of multiplication above (always 25) }}
{{OBDtr| 0x140 | float    |8C8CCC| 00 00 00 3F | 0.500000    | unknown; something with AI targeting prediction; always the same for TURR and ONCC  }}
{{OBDtr| 0x148 | float    |8C8CCC| 00 00 80 3F | 1.000000    | accuracy multiplier for prediction of target's position (always 1) }}
{{OBDtr| 0x144 | float    |8C8CCC| 00 00 C8 41 | 25.000000  | unknown; something with AI targeting prediction; always the same for TURR and ONCC  }}
{{OBDtr| 0x14C | uint32   |FF00C8| 00 00 00 00 | 0          | maximum allowed frames of lookback to be used for predicting target's position (always 0) }}
{{OBDtr| 0x148 | float    |8C8CCC| 00 00 80 3F | 1.000000    | unknown; something with AI targeting prediction; always the same for TURR }}
{{OBDtr| 0x150 | uint32   |FF00C8| 05 00 00 00 | 5          | frames of delay in recognizing target's current position (always 5) }}
{{OBDtr| 0x14C | int32   |FF00C8| 00 00 00 00 | 0          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
{{OBDtr| 0x154 | uint32   |FF00C8| 0F 00 00 00 | 15          | number of frames over which AI can average target's velocity to help predict position (always 15) }}
{{OBDtr| 0x150 | int32   |FF00C8| 05 00 00 00 | 5          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
{{OBDtr| 0x158 | uint32   |FF00C8| 3C 00 00 00 | 60          | size in frames of target's history location buffer (always 60) }}
{{OBDtr| 0x154 | int32   |FF00C8| 0F 00 00 00 | 15          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
|}
{{OBDtr| 0x158 | int32   |FF00C8| 3C 00 00 00 | 60          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
 
{{OBDtrBK|1=First of 13 elements (grey outline) }}
 
{{OBDtr| 0x15C | float    |F0F096| 00 00 00 00 | 0.000000    | recoil compensation amount (0.0 <nowiki>= min, 1.0 =</nowiki> max) }}
;AI Weapon Skills
{{OBDtr| 0x160 | float    |F0F096| 00 00 00 00 | 0.000000    | best aiming angle in radians }}
This is an array of 13 sets of skill variables, one for each weapon. Below is the data for the first element:
{{OBDtr| 0x164 | float    |F0F096| 00 00 00 00 | 0.000000    | shot grouping error }}
{{Table}}
{{OBDtr| 0x168 | float    |F0F096| 00 00 80 3F | 1.000000    | shot grouping decay }}
{{OBDth}}
{{OBDtr| 0x15C | float    |F0F096| 00 00 00 00 | 0.000000    | recoil compensation amount (0.0 <nowiki>= no compensation, 1.0 =</nowiki> no recoil) }}
{{OBDtr| 0x160 | float    |F0F096| 00 00 00 00 | 0.000000    | minimum aiming error as an angle in radians }}
{{OBDtr| 0x164 | float    |F0F096| 00 00 00 00 | 0.000000    | shot grouping error as a percentage }}
{{OBDtr| 0x168 | float    |F0F096| 00 00 80 3F | 1.000000    | how quickly aiming inaccuracy decreases or increases while shooting (ranges from 0.0 to 1.0) }}
{{OBDtr| 0x16C | float    |F0F096| 00 00 80 3F | 1.000000    | shooting inaccuracy multiplier }}
{{OBDtr| 0x16C | float    |F0F096| 00 00 80 3F | 1.000000    | shooting inaccuracy multiplier }}
{{OBDtr| 0x170 | int16    |00C864| 00 00      | 0          | minimum delay between shots in frames }}
{{OBDtr| 0x170 | uint16  |00C864| 00 00      | 0          | minimum delay in ticks before pulling the trigger again }}
{{OBDtr| 0x172 | int16    |00C864| 00 00      | 0          | maximum delay between shots in frames }}
{{OBDtr| 0x172 | uint16  |00C864| 00 00      | 0          | maximum delay in ticks before pulling the trigger again }}
|}
|}


AI weapon skills can be reviewed with e.g. '''ai2_skill_select konoko_generic w1_tap''' and then either '''ai2_skill_show''' (prints to console) or '''ai2_skill_save''' (prints to file).


;SHOOTING SKILLS
The first weapon (weapon 0) is not in the game anymore, whatever it was. Mutant Muro's thunderbolt is handled as animation-bound particles, although it used to be handled as a weapon (same for Mukade's Devil Star, except '''w10_sni''' is still available). Barabas' Wave Motion Cannon is a bit mixed up since the beam is made of '''w12_ba2''' particles and the grenade is a '''w11_ba1''' particle.
These can be reviewed with e.g. '''ai2_skill_select konoko_generic w1_tap''' and then either '''ai2_skill_show''' (prints to console) or '''ai2_skill_save''' (prints to file)
;Fields
:recoil compensation amount, between 0 and 1 (float)
:best aiming angle, in radians (float)
:shot grouping error (float)
:shot grouping decay (float)
:shooting inaccuracy multiplier (float)
:minimum delay between shots, in frames (short)
:maximum delay between shots, in frames (short)
The first weapon (weapon 0) is not in the game anymore, whatever that was. Muro's thunderbolt is handled as animation-bound particles, although it used to be handled as a weapon (same for Mukade's ball, except '''w10_sni''' is still available) ('''w12_ba2''' and '''w11_ba1''' are a bit mixed up : the beam is made of '''w12_ba2''' particles, and the grenade is a '''w11_ba1''' particle...)


See screenshot for the raw hex (example is '''konoko_generic''' from '''level3_Final''')
{{Table}}
{{Table|width=""|align="left"}}
|- bgcolor="#E9E9E9" align=center
|-BGCOLOR="#E9E9E9" ALIGN=CENTER
!Weapon      ||Offset    ||recoil||bestangle||error||decay||inaccuracy||delays
!Weapon      ||Offset    ||recoil||bestangle||error||decay||inaccuracy||delays
|-ALIGN=CENTER      
|- align=center      
|'''w0_sec''' ||0x15C/0x173|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|'''w0_sec''' ||0x15C/0x173|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w1_tap''' ||0x174/0x18B|| 0.0  || 0.000000|| 0.40|| 0.4 || 0.0      || 30 - 45
|'''w1_tap''' ||0x174/0x18B|| 0.0  || 0.000000|| 0.40|| 0.4 || 0.0      || 30 - 45
|-ALIGN=CENTER      
|- align=center      
|'''w2_sap''' ||0x18C/0x193|| 0.3  || 0.013962|| 0.13|| 1.0 || 1.0      || 0 - 0
|'''w2_sap''' ||0x18C/0x193|| 0.3  || 0.013962|| 0.13|| 1.0 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w3_phr''' ||0x194/0x20B|| 0.3  || 0.010472|| 0.05|| 0.5 || 1.0      || 0 - 0
|'''w3_phr''' ||0x194/0x20B|| 0.3  || 0.010472|| 0.05|| 0.5 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w4_psm''' ||0x20C/0x213|| 0.3  || 0.015707|| 0.03|| 0.2 || 1.0      || 0 - 0
|'''w4_psm''' ||0x20C/0x213|| 0.3  || 0.015707|| 0.03|| 0.2 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w5_sbg''' ||0x214/0x22B|| 0.3  || 0.001745|| 0.00|| 0.1 || 1.0      || 0 - 0
|'''w5_sbg''' ||0x214/0x22B|| 0.3  || 0.001745|| 0.00|| 0.1 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w6_vdg''' ||0x22C/0x233|| 0.3  || 0.001745|| 0.13|| 0.9 || 1.0      || 0 - 0
|'''w6_vdg''' ||0x22C/0x233|| 0.3  || 0.001745|| 0.13|| 0.9 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w7_scc''' ||0x234/0x24B|| 0.3  || 0.001745|| 0.05|| 0.1 || 1.0      || 0 - 0
|'''w7_scc''' ||0x234/0x24B|| 0.3  || 0.001745|| 0.05|| 0.1 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w8_mbo''' ||0x24C/0x253|| 0.3  || 0.005236|| 0.01|| 0.5 || 1.0      || 0 - 0
|'''w8_mbo''' ||0x24C/0x253|| 0.3  || 0.005236|| 0.01|| 0.5 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w9_scr''' ||0x254/0x26B|| 0.3  || 0.010472|| 0.04|| 0.5 || 1.0      || 0 - 0
|'''w9_scr''' ||0x254/0x26B|| 0.3  || 0.010472|| 0.04|| 0.5 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w10_sni'''||0x26C/0x273|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|'''w10_sni'''||0x26C/0x273|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w11_ba1'''||0x274/0x28B|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|'''w11_ba1'''||0x274/0x28B|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|-ALIGN=CENTER      
|- align=center      
|'''w12_ba2'''||0x28B/0x293|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|'''w12_ba2'''||0x28B/0x293|| 0.0  || 0.000000|| 0.00|| 1.0 || 1.0      || 0 - 0
|}
|}
<br clear=all>
[[image:oncc_m.gif]]




;Other AI Behaviors
[[Image:oncc_m.gif]]
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x294 | int32   |00C8FF| 5A 00 00 00 | 90          | unknown; always the same }}
{{OBDtr| 0x294 | uint32   |00C8FF| 5A 00 00 00 | 90          | how long AI will continue shooting a dead body to make sure it's dead (always 90) }}
{{OBDtr| 0x298 | int32   |00C8FF| F0 00 00 00 | 240        | unknown; always the same }}
{{OBDtr| 0x298 | uint32   |00C8FF| F0 00 00 00 | 240        | how long AI will stand over dead body before returning to last job (always 240) }}
{{OBDtr| 0x29C | int32   |00C8FF| B4 00 00 00 | 180        | unknown; always the same }}
{{OBDtr| 0x29C | uint32   |00C8FF| B4 00 00 00 | 180        | how long after losing sight of target until AI engages pursuit mode (always 180) }}
{{OBDtr| 0x2A0 | int32   |00C8FF| 28 00 00 00 | 40          | taunt chance (40%) }}
{{OBDtr| 0x2A0 | uint32   |00C8FF| 28 00 00 00 | 40          | chance (as a percentage) of AI taunting a dead body }}
{{OBDtr| 0x2A4 | int32   |00C8FF| 37 00 00 00 | 55          | go for gun chance (55%); determines possibility that AI will run to some weapon and take it; can be checked in devmode by *debug_gun_behavior* command }}
{{OBDtr| 0x2A4 | uint32   |00C8FF| 37 00 00 00 | 55          | chance (as a percentage) of AI running to some weapon to pick it up; can be checked in Dev Mode with the '''debug_gun_behavior''' command }}
{{OBDtr| 0x2A8 | int32   |00C8FF| 3C 00 00 00 | 60          | running pickup chance (60%); this value is possibility of AI running weapon pickup (acrobatics, slides) instead of normal "stop->pickup";this is calculated AFTER engine decides that AI should run for weapon }}
{{OBDtr| 0x2A8 | uint32   |00C8FF| 3C 00 00 00 | 60          | chance (as a percentage) of AI performing a running weapon pickup (including acrobatics moves, slides) instead of the normal "stop and pick up"; this is calculated after the engine decides that the AI will go for a gun }}
{{OBDtr| 0x2AC | int16   |C80040| 00 00      | 0          | combat profile ID; for example *0D* is for Mutant Muro }}
{{OBDtr| 0x2AC | uint16   |C80040| 00 00      | 0          | combat profile ID; for example *0D* is for Mutant Muro }}
{{OBDtr| 0x2AE | int16   |C80040| 16 00      | 22          | melee profile ID }}
{{OBDtr| 0x2AE | uint16   |C80040| 16 00      | 22          | melee profile ID }}
{{OBDtr| 0x2B0 | int8     |FFCD96| 64          | 100        | "taunt" sound probability (always) }}
{{OBDtr| 0x2B0 | uint8     |FFCD96| 64          | 100        | "taunt" sound probability (always) }}
{{OBDtr| 0x2B1 | int8     |FFCD96| 00          | 0          | "alert" sound probability (never) }}
{{OBDtr| 0x2B1 | uint8     |FFCD96| 00          | 0          | "alert" sound probability (never) }}
{{OBDtr| 0x2B2 | int8     |FFCD96| 00          | 0          | "startle" sound probability (never) }}
{{OBDtr| 0x2B2 | uint8     |FFCD96| 00          | 0          | "startle" sound probability (never) }}
{{OBDtr| 0x2B3 | int8     |FFCD96| 00          | 0          | "checkbody" sound probability (never) }}
{{OBDtr| 0x2B3 | uint8     |FFCD96| 00          | 0          | "checkbody" sound probability (never) }}
{{OBDtr| 0x2B4 | int8     |FFCD96| 00          | 0          | "pursue" sound probability (never) }}
{{OBDtr| 0x2B4 | uint8     |FFCD96| 00          | 0          | "pursue" sound probability (never) }}
{{OBDtr| 0x2B5 | int8     |FFCD96| 00          | 0          | "cower" sound probability (never) }}
{{OBDtr| 0x2B5 | uint8     |FFCD96| 00          | 0          | "cower" sound probability (never) }}
{{OBDtr| 0x2B6 | int8     |FFCD96| 64          | 100        | "superpunch" probability (always) }}
{{OBDtr| 0x2B6 | uint8     |FFCD96| 64          | 100        | "superpunch" probability (always) }}
{{OBDtr| 0x2B7 | int8     |FFCD96| 64          | 100        | "superkick" probability (always) }}
{{OBDtr| 0x2B7 | uint8     |FFCD96| 64          | 100        | "superkick" probability (always) }}
{{OBDtr| 0x2B8 | int8     |FFCD96| 00          | 0          | "super3" sound probability (never) }}
{{OBDtr| 0x2B8 | uint8     |FFCD96| 00          | 0          | "super3" sound probability (never) }}
{{OBDtr| 0x2B9 | int8     |FFCD96| 00          | 0          | "super4" sound probability (never) }}
{{OBDtr| 0x2B9 | uint8     |FFCD96| 00          | 0          | "super4" sound probability (never) }}
{{OBDtr| 0x2BA | int16   |C8C864| 00 00      | 0          | probably a blank filler (always the same) }}
{{OBDtr| 0x2BA | char[2]   |C8C864| 00 00      | 0          | padding }}
{{OBDtr2|0x2BC | char[32] |0096C8| c17_99_28konoko          | "taunt" sound (reference to 08108-c17_99_28konoko.[[OBD:OSBD|amb.OSBD]] of level 0) }}
{{OBDtr2|0x2BC | char[32] |0096C8| c17_99_28konoko          | "taunt" sound (reference to 08108-c17_99_28konoko.[[OBD:OSBD|amb.OSBD]] of level 0) }}
{{OBDtr2|0x2DC | char[32] |0096C8| unused                    | "alert" sound }}
{{OBDtr2|0x2DC | char[32] |0096C8| unused                    | "alert" sound name }}
{{OBDtr2|0x2FC | char[32] |0096C8| unused                    | "startle" sound }}
{{OBDtr2|0x2FC | char[32] |0096C8| unused                    | "startle" sound name }}
{{OBDtr2|0x31C | char[32] |0096C8| unused                    | "checkbody" sound }}
{{OBDtr2|0x31C | char[32] |0096C8| unused                    | "checkbody" sound name }}
{{OBDtr2|0x33C | char[32] |0096C8| unused                    | "pursue" sound }}
{{OBDtr2|0x33C | char[32] |0096C8| unused                    | "pursue" sound name }}
{{OBDtr2|0x35C | char[32] |0096C8| unused                    | "cower" sound }}
{{OBDtr2|0x35C | char[32] |0096C8| unused                    | "cower" sound name }}
{{OBDtr2|0x37C | char[32] |0096C8| c18_79_14konoko          | "superpunch" sound (reference to 08110-c17_99_28konoko.[[OBD:OSBD|amb.OSBD]] of level 0) }}
{{OBDtr2|0x37C | char[32] |0096C8| c18_79_14konoko          | "superpunch" sound name (reference to 08110-c17_99_28konoko.amb.OSBD of level 0) }}
{{OBDtr2|0x39C | char[32] |0096C8| c18_79_15konoko          | "superkick" sound (reference to 08112-c17_99_28konoko.[[OBD:OSBD|amb.OSBD]] of level 0) }}
{{OBDtr2|0x39C | char[32] |0096C8| c18_79_15konoko          | "superkick" sound name (reference to 08112-c17_99_28konoko.amb.OSBD of level 0) }}
{{OBDtr2|0x3BC | char[32] |0096C8| unused                    | "super3" sound (only the superninja uses this slot) }}
{{OBDtr2|0x3BC | char[32] |0096C8| unused                    | "super3" sound name (only Mukade uses this slot) }}
{{OBDtr2|0x3DC | char[32] |0096C8| unused                    | "super4" sound (never used in Oni) }}
{{OBDtr2|0x3DC | char[32] |0096C8| unused                    | "super4" sound name (never used in game data) }}
{{OBDtr| 0x3FC | float    |FF80C0| 00 80 ED 43 | 475.000000  | central vision field range; you can make it visible with the script command *ai2_showvision <nowiki>=</nowiki>1* }}
{{OBDtrBK|The following 7 vision fields are used to detect if a character can be seen by AI; see Vision Field below for explanation }}
{{OBDtr| 0x400 | float    |FF80C0| 00 00 16 43 | 150.000000  | peripheral vision field range; you can make it visible with the script command *ai2_showvision <nowiki>=</nowiki> 1* }}
{{OBDtr| 0x3FC | float    |FF80C0| 00 80 ED 43 | 475.000000  | central vision distance }}
{{OBDtr| 0x404 | float    |FF80C0| 7D 1B 44 3F | 0.766044    | horizontal angle between two couples of "eye-rays" (one couple is left, one if right eye); works for both vision fields }}
{{OBDtr| 0x400 | float    |FF80C0| 00 00 16 43 | 150.000000  | peripheral vision distance }}
{{OBDtr| 0x408 | float    |FF80C0| F3 B3 51 3F | 0.819152    | vision field curve for central vision field; vision field looks like something between cone and cylinder; this value affect central angle of that; the higher this value is, the more is this field wrapped in order to achieve shaper angle; when set lower, vision field unwraps totally and it looks like radar antenna, attached to a character by two couples of straight strings(one couple left, one right) }}
{{OBDtr| 0x404 | float    |FF80C0| 7D 1B 44 3F | 0.766044    | vertical vision range }}
{{OBDtr| 0x40C | float    |FF80C0| E8 D5 12 3F | 0.573576    | vertical angle between eye-rays in one couple; this is for central vision field }}
{{OBDtr| 0x408 | float    |FF80C0| F3 B3 51 3F | 0.819152    | central vision range }}
{{OBDtr| 0x410 | float    |FF80C0| D5 D0 31 3E | 0.173648    | vision field curve for peripheral vision field }}
{{OBDtr| 0x40C | float    |FF80C0| E8 D5 12 3F | 0.573576    | central vision max }}
{{OBDtr| 0x414 | float    |FF80C0| 6B 61 D8 BE | 0.422618    | vertical angle between eye-rays in one couple; this is for peripheral vision field }}
{{OBDtr| 0x410 | float    |FF80C0| D5 D0 31 3E | 0.173648    | peripheral vision range }}
{{OBDtr| 0x418 | int32   |D0C0AF| B4 00 00 00 | 180        | hostilethreat definite timer; how long will AI know exactly where its enemy is even if it can't see him with central vision-field; AI attacks him; can be checked by *ai2_report_verbose* command (this command causes random crashes, beware) }}
{{OBDtr| 0x414 | float    |FF80C0| 6B 61 D8 BE | 0.422618    | peripheral vision max }}
{{OBDtr| 0x41C | int32   |D0C0AF| 84 03 00 00 | 900        | hostilethreat strong timer; how long will AI remain in strong feeling that there is the enemy, but will not attack him but investigate; can be checked by *ai2_report_verbose* command }}
{{OBDtr| 0x418 | uint32   |D0C0AF| B4 00 00 00 | 180        | how long will AI know exactly where its enemy is even if it can't see him with central vision field, and attempt to attack him }}
{{OBDtr| 0x420 | int32   |D0C0AF| 10 0E 00 00 | 3600        | hostilethreat weak timer; how long will AI remain in weak feeling of an enemy, just looking around aimlessly (Glance pursue mode); can be checked by *ai2_report_verbose* command }}
{{OBDtr| 0x41C | uint32   |D0C0AF| 84 03 00 00 | 900        | how long will AI remain strongly convinced that there is an enemy, but will investigate his presence rather than attack him }}
{{OBDtr| 0x424 | int32   |D0C0AF| 10 0E 00 00 | 3600        | friendlythreat definite timer; how long will AI know exactly where its ally (Syndicate saw Syndicate for example) is even if it can't see him with central vision-field; AI simply knows there is someone else nearby; maybe has further possibilities; can be checked by *ai2_report_verbose* command (this command causes random crashes, beware) }}
{{OBDtr| 0x420 | uint32   |D0C0AF| 10 0E 00 00 | 3600        | how long an AI will remain weakly convinced of an enemy's presence, looking around aimlessly to find him (Glance pursuit mode) }}
{{OBDtr| 0x428 | int32   |D0C0AF| 50 46 00 00 | 18000      | friendlythreat strong timer; how long will AI remain in strong feeling that there is someone else, but will not try to find him or look at him; can be checked by *ai2_report_verbose* command }}
{{OBDtr| 0x424 | uint32   |D0C0AF| 10 0E 00 00 | 3600        | decay time for dropping back from high alert to medium alert }}
{{OBDtr| 0x42C | int32   |D0C0AF| A0 8C 00 00 | 36000      | friendlythreat weak timer; how long will AI remain in weak feeling of ally, doing its usual job; can be checked by *ai2_report_verbose* command }}
{{OBDtr| 0x428 | uint32   |D0C0AF| 50 46 00 00 | 18000      | decay time for dropping back from medium alert to low alert }}
{{OBDtr| 0x430 | float    |EEDDFF| 00 00 80 3F | 1.000000    | earshot radius; defines size of the sound-collision sphere around AI }}
{{OBDtr| 0x42C | uint32   |D0C0AF| A0 8C 00 00 | 36000      | decay time for dropping back from low alert to no alert status }}
{{OBDtr| 0x434 | link    |C5FF8A| 01 FB 03 00 | 1019        | link to 01019-konoko.[[OBD:ONCV|ONCV]]; defines variants and upgrades }}
{{OBDtr| 0x430 | float    |EEDDFF| 00 00 80 3F | 1.000000    | hearing radius; defines size of the sound-detection sphere around an AI }}
{{OBDtr| 0x438 | link    |C5FF8A| 01 F9 03 00 | 1017        | link to [[OBD:ONCP|01017-.ONCP]]; lists the particles available for this character (trails, flashes, etc) }}
{{OBDtr| 0x43C | link    |C5FF8A| 01 FA 03 00 | 1018        | link to [[OBD:ONIA|01018-.ONIA]]; lists the special impact sounds (used for special combat moves) }}
{{OBDtr| 0x440 | int8    |C5FF8A| 00          | unused      | runtime only }}
{{OBDtr| 0x441 | int8    |C5FF8A| 00          | unused      | padding }}
{{OBDtr| 0x442 | int16    |C5FF8A| 00 00      | unused      | runtime only }}
{{OBDtr2|0x444 | char[16] |C0C0C0| Light                    | modifier; either hardcoded or defunct (only visible in pm_mod_type.WMM_, level 0)
edit: WMDD says: Effects found for Impact x on Material y with Modifier: pm_mod_types }}
{{OBDtrBK|1=First of 15 impact elements. }}
{{OBDtr2|0x454 | char[128] |FF0080| Footstep_Walk            | walk impact (reference to 04124-Footstep_Walk.[[OBD:Impt|Impt]] of level 0); always the same; without the impacts you can't hear the steps of a character }}
{{OBDtr| 0x4D4 | int16    |FF0080| FF FF | -1 | set at runtime to the value stored at 0x08 in [[OBD:Impt|Impt]] }}
|}
|}




[[image:oncc_e.gif]]
;Vision Field
See [[XML:ONCC#.3CVisionConstants.3E|HERE]] for details on how this works.




;File Links
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0xBF2 | int16    |FFFFA6| 00 00      | 0          | unknown; always the same; maybe only a filler }}
{{OBDtr| 0x434 | link    |C5FF8A| 01 FB 03 00 | 1019      | link to 01019-konoko.[[OBD:ONCV|ONCV]]; defines variants and upgrades }}
{{OBDtr2|0xBF4 | char[64] |71FFB8| unused                    | special death particle; only the mad bomber use it }}
{{OBDtr| 0x438 | link    |C5FF8A| 01 F9 03 00 | 1017      | link to [[OBD:ONCP|01017-.ONCP]]; lists the particles available for this character (trails, flashes, etc) }}
{{OBDtr| 0xC34 | link    |0000BF| 00 00 00 00 | unused      | runtime only }}
{{OBDtr| 0x43C | link    |C5FF8A| 01 FA 03 00 | 1018      | link to [[OBD:ONIA|01018-.ONIA]]; lists the special impact sounds (used for special combat moves) }}
{{OBDtr| 0xC38 | link    |0000BF| 00 00 00 00 | unused      | runtime only }}
{{OBDtr| 0x440 | bool     |C5FF8A| 00         | 0          | runtime: flag meaning that modifier type has been set by looking up modifier name and impact types have been set by looking up impact names; runtime only }}
{{OBDtr| 0xC3C | link    |0000BF| 01 E6 03 00 | 998        | link to [[OBD:TRBS|00998-konoko_body_high.TRBS]] }}
{{OBDtr| 0x441 | uint8   |C5FF8A| 00        | 0          | padding }}
{{OBDtr| 0xC40 | link    |0000BF| 01 E7 03 00 | 999        | link to [[OBD:TRMA|00999-konoko002_high_texture_generic.TRMA]] }}
{{OBDtr| 0x442 | uint16  |C5FF8A| 00 00     | 0          | runtime: modifier type }}
{{OBDtr| 0xC44 | link    |0000BF| 01 E8 03 00 | 1000        | link to [[OBD:CBPM|01000-.CBPM]] }}
{{OBDtr2|0x444 | char[16] |C0C0C0| Light                    | modifier name, used to look up modifier type }}
{{OBDtr| 0xC48 | link     |0000BF| 01 EC 03 00 | 1004        | link to [[OBD:CBPI|01004-.CBPI]] }}
{{OBDtrBK|1=Array of 15 impact elements: first element }}
{{OBDtr| 0xC4C | int32   |804040| 2C 01 00 00 | 300         | fight mode timer in 1/60 seconds }}
{{OBDtr2|0x454 | char[128]|FF0080| Footstep_Walk            | impact name, used to look up impact type (reference to 04124-Footstep_Walk.Impt of level 0); always the same; without the impacts you can't hear the steps of a character }}
{{OBDtr| 0xC50 | int32    |804040| 30 75 00 00 | 30000      | first idle animation timer in 1/60 seconds }}  
{{OBDtr| 0x4D4 | uint16  |FF0080| FF FF      | -1          | runtime: impact type (comes from 0x08 in [[OBD:Impt|Impt]]) }}
{{OBDtr| 0xC54 | int32    |804040| 30 75 00 00 | 30000      | second idle animation timer in 1/60 seconds }}  
{{OBDtrBK|1=End of array }}
{{OBDtr| 0xC58 | int32    |804040| C8 00 00 00 | 200        | basic health of the character model; extra health information for every unique character are stored in the [[OBD:BINA/OBJC/CHAR|Character.BINA]] file}}
{{OBDtr| 0xBF2 | char[2]  |FFFFA5| 00 00      | unused      | padding (seen below) }}
{{OBDtr| 0xC5C | int32    |804040| 48 00 00 00 | 72          | feetBits (these bits mark the characters feet)
}}  
{{OBDtr| 0xC60 | float    |FF22FF| 00 00 80 3F | 1.000000    | minimal body size factor }}  
{{OBDtr| 0xC64 | float    |FF22FF| 00 00 80 3F | 1.000000    | maximal body size factor }}
{{OBDtrBK| the following 7 float values corespond to damage types (see the [[OBD:BINA/PAR3|PAR3]] page for the 7 possible types of damage) }}
{{OBDtr| 0xC68 | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}
{{OBDtr| 0xC6C | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}
{{OBDtr| 0xC70 | float    |FF22FF| 00 00 00 3F | 0.500000    | stun timer; specifies how long should be this char stunned when hit with w6_vdg; the longest time possible to be stunned is when this byte is zero. Then this ONCC is stunned for 200 frames (30 frames for initial stagger + the rest of the frames is stun animation). The shortest time is for 1.000000 (no stagger/stun at all) }}
{{OBDtr| 0xC74 | float    |FF22FF| 00 00 80 3E | 0.250000    | unknown }}
{{OBDtr| 0xC78 | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}
{{OBDtr| 0xC7C | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}
{{OBDtr| 0xC80 | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}  
{{OBDtr| 0xC84 | float    |FF22FF| 00 00 00 3F | 0.500000    | BossShield Protect Amount (testme) }}
{{OBDtr| 0xC88 | link    |808080| 01 F6 03 00 | 1014        | link to 01014-konoko_animations.[[OBD:TRAC|TRAC]] }}
{{OBDtr| 0xC8C | link    |808080| 01 F6 03 00 | 1015        | link to 01015-konoko_screens.[[OBD:TRSC|TRSC]] }}
{{OBDtr| 0xC90 | int16    |FFAA82| 1E 00      | 30          | AI Rate of Fire (testme) }}  
{{OBDtr| 0xC92 | int16    |FFAA82| 00 00      | 0          | time between death and deletion, in frames (about 3 seconds for mad bomber) }}
{{OBDtr| 0xC94 | bitset  |00D900| 00          | 0          | TRSC bitset; see below }}
{{OBDtr| 0xC95 | int8    |00D900| 01          | 1           | when set to 1 indicates that character has daodan powers (character does more damage in overpower mode)}}  
{{OBDtr| 0xC96 | int8    |00D900| 00          | 0          | when set to 1 indicates that character has supershield
* is visible as red shield when overpowered
* needs daodan flag above and 51% overpower to be enabled; chenille cheat works too
* now it prevents damage from weapon fire and melee (exception are throws)
* received (melee) hits cause not blue block flashes but orange flares (see [http://paradox.oni2.net/Bilder/blocked_attacks_on_51percent_overpower_plus_daodan-flag_plus_supershield.png HERE])
  }}
{{OBDtr| 0xC97 | int8    |00D900| 00         | 0          | when set to 1, generically turns on '''canttouchthis''' cheat for this ONCC (used by MutantMuro.ONCC }}
{{OBDtr| 0xC98 | char[8]  |CACAFF| AD DE      | dead        | unused }}  
|}
|}


[[Image:oncc_e.gif]]


;Body size factor
The body size of a model will be scaled uniformly by a random coefficient that falls in the range defined with 0xC60 and 0xC64. This is apparently a provision for increasing the variety of appearances in classes like TCTF soldiers; unique characters like Konoko get a range of 1.0 to 1.0. The basis or seed for the randomness is apparently the time and/or order of spawning of that character, and therefore the "random" size of the character can be reproduced consistently as long as the execution of the code is the same each time. To illustrate, find the following code in IGMD/manplant/manplant_cutscene.bsl:
<gallery align="right">
File:ONCC_body_size_factor-original.jpg|Sample 1
File:ONCC_body_size_factor-spawn_order_change.jpg|Sample 2
File:ONCC_body_size_factor-sleep_insertion.jpg|Sample 3
</gallery>
<tt>#Outside shot of cops walking in


ai2_spawn Recep
{{Table}}
{{OBDth}}
{{OBDtr2|0xBF4 | char[64] |71FFB8| unused                  | name of particle spawned on death; only the Mad Bomber uses it }}
{{OBDtr| 0xC34 | offset  |0000BF| 00 00 00 00 | unused    | runtime: raw offset of death particle class }}
{{OBDtr| 0xC38 | offset  |0000BF| 00 00 00 00 | unused    | runtime: raw offset of cache of derived information on body model geometry }}
{{OBDtr| 0xC3C | link    |0000BF| 01 E6 03 00 | 998      | link to [[OBD:TRBS|00998-konoko_body_high.TRBS]] }}
{{OBDtr| 0xC40 | link    |0000BF| 01 E7 03 00 | 999      | link to [[OBD:TRMA|00999-konoko002_high_texture_generic.TRMA]] }}
{{OBDtr| 0xC44 | link    |0000BF| 01 E8 03 00 | 1000      | link to [[OBD:CBPM|01000-.CBPM]] }}
{{OBDtr| 0xC48 | link    |0000BF| 01 EC 03 00 | 1004      | link to [[OBD:CBPI|01004-.CBPI]] }}
{{OBDtr| 0xC4C | uint32  |804040| 2C 01 00 00 | 300      | how long in ticks before character can leave fight mode }}
{{OBDtr| 0xC50 | uint32  |804040| 30 75 00 00 | 30000    | how long in ticks before the Idle animation can be played the first time }}
{{OBDtr| 0xC54 | uint32  |804040| 30 75 00 00 | 30000    | how long in ticks before the Idle animation can be played another time }}
{{OBDtr| 0xC58 | uint32  |804040| C8 00 00 00 | 200      | base health of the character model; specific health information for every unique character is stored in the [[OBD:BINA/OBJC/CHAR|Character.BINA]] file}}
{{OBDtr| 0xC5C | uint32  |804040| 48 00 00 00 | 72        | "feet bits"; unused }}
{{OBDtr| 0xC60 | float    |FF22FF| 00 00 80 3F | 1.000000  | minimum body size factor }}
{{OBDtr| 0xC64 | float    |FF22FF| 00 00 80 3F | 1.000000  | maximum body size factor }}
{{Anchor|DamageTypes}}
{{OBDtrBK|The following 7 float values are ONCC-specific multipliers for each of the 7 PAR3 DamageTypes. See [[Particle damage types]] for an explanation of DamageTypes. Values range from 0.0-1.0, with 0 meaning "no immunity" and 1 meaning "total immunity".<br>
Note: These multipliers only affect the stun damage and knockback components of a PAR3 action, not the HP damage dealt.}}
{{OBDtr| 0xC68 | float    |FF22FF| 00 00 00 00 | 0.000000    | "Normal" DamageType multiplier }}
{{OBDtr| 0xC6C | float    |FF22FF| 00 00 00 00 | 0.000000    | "MinorStun" DamageType multiplier }}
{{OBDtr| 0xC70 | float    |FF22FF| 00 00 00 3F | 0.500000    | "MajorStun" DamageType multiplier }}
{{OBDtr| 0xC74 | float    |FF22FF| 00 00 80 3E | 0.250000    | "MinorKnockdown" DamageType multiplier }}
{{OBDtr| 0xC78 | float    |FF22FF| 00 00 00 00 | 0.000000    | "MajorKnockdown" DamageType multiplier }}
{{OBDtr| 0xC7C | float    |FF22FF| 00 00 00 00 | 0.000000    | "Blownup" DamageType multiplier }}
{{OBDtr| 0xC80 | float    |FF22FF| 00 00 00 00 | 0.000000    | "Pickup" DamageType multiplier }}
{{OBDtr| 0xC84 | float    |FF22FF| 00 00 00 3F | 0.500000    | damage reducer, employed when the character has a [[boss shield]] (0.0-1.0 <nowiki>=</nowiki> 0%-100%) }}
{{OBDtr| 0xC88 | link    |808080| 01 F6 03 00 | 1014        | link to 01014-konoko_animations.[[OBD:TRAC|TRAC]] }}
{{OBDtr| 0xC8C | link    |808080| 01 F6 03 00 | 1015        | link to 01015-konoko_screens.[[OBD:TRSC|TRSC]] }}
{{OBDtr| 0xC90 | uint16    |FFAA82| 1E 00      | 30          | AI rate of firing; unused }}
{{OBDtr| 0xC92 | uint16    |FFAA82| 00 00      | 0          | time between death and deletion, in frames (0 for all characters except Mad Bomber, who is 190 ticks) }}
{{OBDtr| 0xC94 | bool  |00D900| 00          | 0          | TRSC bitset; see below }}
{{OBDtr| 0xC95 | bool    |00D900| 01          | 1          | character has Daodan powers (can overheal with hypos, do more damage in overpower mode) and can display a Daodan aura particle)}}
{{OBDtr| 0xC96 | bool    |00D900| 00          | 0          | character has [[supershield]] }}
{{OBDtr| 0xC97 | bool    |00D900| 00          | 0          | knockdown resistant (used by MutantMuro.ONCC) }}
|}


ai2_spawn partner_cop_1


ai2_spawn partner_cop_2</tt>
;TRSC bitset
:Determines whether character is left-handed or right-handed (weapon is attached to left or right fist bone). Must be consistent with character's TRSC or glitches appear. Possibilities are:
:NONE - Character is right-hander with both pistols and rifles
:0x01 - Character is left-hander with both pistols and rifles
:0x02 - Character is left-hander with pistols but "right-hander" with rifles (however, animations for rifles are treated as left-handed)


When you play the opening cutscene for Chapter 2, Agent Thorson should appear as he does in the first pic in the table to the right. Change the code to:


<tt>#Outside shot of cops walking in
;Body size factor
 
{|align=right
ai2_spawn partner_cop_1
|[[Image:ONCC_body_size_factor-original.jpg|120px]]
 
|-
ai2_spawn partner_cop_2
|[[Image:ONCC_body_size_factor-spawn_order_change.jpg|120px]]
 
|}
ai2_spawn Recep</tt>
 
and he'll appear as in the middle pic. Look out, he's a giant! Even the receptionist is bigger! Change the code to:
 
<tt>#Outside shot of cops walking in
 
ai2_spawn Recep
 
sleep 15
 
ai2_spawn partner_cop_1
 
ai2_spawn partner_cop_2</tt>


and you'll also get a deluxe-sized Thorson (right pic), though not as big as before. In complex scripts, body size quickly becomes truly random-seeming, but as you can see, in situations where the spawn function is called near the beginning of the code, before there is an opportunity for too much forking and branching, the results are quite reproducible.
:The geometry specified in a character's [[TRBS]] (Totoro body set) can be multiplied by a scale factor. For example, the '''minime''' and '''behemoth''' [[cheats]] set that factor to 0.25 or 1.8, and back to 1. The size can be used for specific purposes (mini-Strikers, Mutant Muro, giant Shinatama), or it can be used to add generic variety to Oni's characters, as a complement to "character variants" ([[ONCV]]).
:The floats at 0xC60 and 0xC64 define a range in which Oni can pick a random body size factor (if the two values are identical, then the body size factor is effectively fixed instead of random). Konoko, Shinatama (both regular and zombified), Griffin (both variants) and Muro all have a fixed body size of 1. Mini-Strikers have 0.5 and giant Shinatama has 7 (yes, [[seven]]).
:Everybody else (including Barabas, Mukade and Kerr) has a random body size within 5% of 1 (i.e., the floats at 0xC60 and 0xC64 are 0.95 and 1.05). Mutant Muro is a bit odd because his "minimum" body size 1.75 and the "maximum" is 1.74 (the difference is barely noticeable anyway). In the [[Anniversary Edition]], some characters have altered factors (e.g., [[Shinatama Too]]).
:The random value is different every time the [[ONCC]] is looked up (e.g., when a character is spawned or shapeshifted) and is not reproducible. Here is a simple script for {{C|6}} a.k.a. [[IGMD/tctf]] (remove all BSL files and leave only the one below):
func main
{
  ai2_allpassive 1
  ai2_spawn a_v3
  ai2_spawn Lv_40
  ai2_spawn lobby_victim05
  chr_location 1 -1255 -1.5 50
  chr_location 2 -1255 -1.5 60
  chr_location 3 -1255 -1.5 70
  chr_location 4 -1255 -1.5 80
  ai2_lookatme
}
:This script lines up four "usual suspects" against a wall in the parking lot of the TCTF HQ. Load the level repeatedly and note how their heights vary.


;TRSC bitset
:determines whether character is left-hander or right-hander (weapon is attached to left or right fist bone) Must be consistent with TRSC or glitches appear. Possibilities are:
:NONE - Character is right-hander with both pistols and rifles
:0x01 - Character is left-hander with both pistols and rifles
:0x02 - Character is left-hander with pistols but "right-hander" with rifles (however, animations for rifles are treated as left-handed)
{{OBD_File_Footer | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character}}
{{OBD_File_Footer | type=ONCC | prev=OFGA | next=ONCP | name=Oni Character Class | family=Character}}


{{OBD}}
{{OBD}}