OBD:ONCC: Difference between revisions

From OniGalore
Jump to navigation Jump to search
No edit summary
m (link fix)
(12 intermediate revisions by 4 users not shown)
Line 86: Line 86:
{{Table}}
{{Table}}
{{OBDtr| 0x064 | int16    |C8FFC8| 06 00      | 6          | (inverse) hypo regeneration rate in frames per hitpoint }}
{{OBDtr| 0x064 | int16    |C8FFC8| 06 00      | 6          | (inverse) hypo regeneration rate in frames per hitpoint }}
{{OBDtr| 0x066 | char[2]  |C8FFC8| AD DE      | dead        | unused }}
{{OBDtr| 0x066 | char[2]  |C8FFC8| AD DE      | dead        | ignored }}
|}
|}


Line 102: Line 102:




;Hurt sound paramters
;Hurt Sound Constants


{{Table}}
{{Table}}
Line 117: Line 117:
{{OBDtr| 0x08E | int16    |FFC8FF| 0C 00      | 12          | hurt_medium_threshold; always the same }}
{{OBDtr| 0x08E | int16    |FFC8FF| 0C 00      | 12          | hurt_medium_threshold; always the same }}
{{OBDtr| 0x090 | int16    |FFC8FF| 16 00      | 22          | hurt_heavy_threshold; always the same }}
{{OBDtr| 0x090 | int16    |FFC8FF| 16 00      | 22          | hurt_heavy_threshold; always the same }}
{{OBDtr| 0x092 | int8    |FFC800| 00          | 0          | used at runtime only: if one sound pointers have been set }}
{{OBDtr| 0x092 | int8    |FFC800| 00          | 0          | runtime only: if 1 sound pointers have been set }}
{{OBDtr| 0x093 | char[1]  |C800C8| DE          | dead        | unused; always the same }}
{{OBDtr| 0x093 | char[1]  |C800C8| DE          | dead        | ignored }}
{{OBDtr| 0x094 | float    |C87C64| 00 00 00 3F | 0.500000    | unknown; always the same (sound volume?) }}
{{OBDtr| 0x094 | float    |C87C64| 00 00 00 3F | 0.500000    | 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|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|0x0B8 | char[32] |B0C3D4| konoko_hurt_medium        | hurt medium sound (reference to 08123-konoko_hurt_medium.[[OBD:OSBD|imp.OSBD]] of level 0) }}
Line 131: Line 131:




;AI Constants


{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x128 | bitsets  |E7CEA5| 17 00 00 00 | 23          | general AI option bitset collection ; see below }}
{{OBDtr| 0x128 | bitsets  |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 }}
{{OBDtr| 0x12C | float    |FFDDDD| 00 00 80 3F | 1.000000    | AI rotation speed factor }}
{{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| 0x130 | int16    |64AAAA| 06 00      | 6          | minimal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned }}
{{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| 0x132 | int16    |64AAAA| 18 00      | 24          | maximal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned }}
{{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| 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| 0x136 | int16   |EBEBEB| 00 00       | 0          | maximal realize firingspread time; (???number of frames???time in miliseconds???) }}
{{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| 0x13C | float   |8C8CCC| 00 00 80 3F | 1.000000    | maximal firingspread dodge amount; IMO similar to maneouvre variable }}
|}
|}


 
;AI options bitset
;AI rotation speed factor
:reference rotation speed is about 1 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 :)
 
 
;General 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
*NONE - startle anim is enabled, rest is disabled
Line 158: Line 153:
*0x10 - bit not used
*0x10 - bit not used


;AI rotation speed factor
:reference rotation speed is about 1 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 Constants


{{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| 0x13C | float    |8C8CCC| 00 00 80 3F | 1.000000    | maximal firingspread dodge amount; IMO similar to maneouvre variable }}
{{OBDtr| 0x140 | float    |8C8CCC| 00 00 00 3F | 0.500000    | unknown; something with AI targeting prediction; always the same for TURR and ONCC  }}
{{OBDtr| 0x140 | float    |8C8CCC| 00 00 00 3F | 0.500000    | unknown; something with AI targeting prediction; always the same for TURR and ONCC  }}
{{OBDtr| 0x144 | float    |8C8CCC| 00 00 C8 41 | 25.000000  | unknown; something with AI targeting prediction; always the same for TURR and ONCC  }}
{{OBDtr| 0x144 | float    |8C8CCC| 00 00 C8 41 | 25.000000  | unknown; something with AI targeting prediction; always the same for TURR and ONCC  }}
Line 170: Line 170:
{{OBDtr| 0x154 | int32    |FF00C8| 0F 00 00 00 | 15          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
{{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 }}
{{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) }}
{{OBDtrBK|1=First of 13 shooting skills (grey outline) }}
{{OBDtr| 0x15C | float    |F0F096| 00 00 00 00 | 0.000000    | recoil compensation amount (0.0 <nowiki>= min, 1.0 =</nowiki> max) }}
{{OBDtr| 0x15C | float    |F0F096| 00 00 00 00 | 0.000000    | recoil compensation amount (0.0 <nowiki>= min, 1.0 =</nowiki> max) }}
{{OBDtr| 0x160 | float    |F0F096| 00 00 00 00 | 0.000000    | best aiming angle in radians }}
{{OBDtr| 0x160 | float    |F0F096| 00 00 00 00 | 0.000000    | best aiming angle in radians }}
Line 176: Line 176:
{{OBDtr| 0x168 | float    |F0F096| 00 00 80 3F | 1.000000    | shot grouping decay }}
{{OBDtr| 0x168 | float    |F0F096| 00 00 80 3F | 1.000000    | shot grouping decay }}
{{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 between shots in frames }}
{{OBDtr| 0x172 | int16   |00C864| 00 00      | 0          | maximum delay between shots in frames }}
{{OBDtr| 0x172 | uint16   |00C864| 00 00      | 0          | maximum delay between shots in frames }}
|}
|}


 
;AI Shooting Skills
;SHOOTING SKILLS
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)
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...)
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|width=""|align="left"}}
{{Table|width=""|align="left"}}
|-BGCOLOR="#E9E9E9" ALIGN=CENTER
|-BGCOLOR="#E9E9E9" ALIGN=CENTER
Line 224: Line 214:
|'''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>




Line 261: Line 250:
{{OBDtr2|0x3BC | char[32] |0096C8| unused                    | "super3" sound (only the superninja uses this slot) }}
{{OBDtr2|0x3BC | char[32] |0096C8| unused                    | "super3" sound (only the superninja uses this slot) }}
{{OBDtr2|0x3DC | char[32] |0096C8| unused                    | "super4" sound (never used in Oni) }}
{{OBDtr2|0x3DC | char[32] |0096C8| unused                    | "super4" sound (never used in Oni) }}
{{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| 0x414 | float    |FF80C0| 6B 61 D8 BE | 0.422618    | peripheral vision max }}
{{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| 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| 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| 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 }}
Line 275: Line 265:
{{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| 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| 0x430 | float    |EEDDFF| 00 00 80 3F | 1.000000    | earshot radius; defines size of the sound-collision sphere around AI }}
{{OBDtr| 0x430 | float    |EEDDFF| 00 00 80 3F | 1.000000    | earshot radius; defines size of the sound-collision sphere around AI }}
|}
;Vision Field
The "range" and "max" values are logically angles but the cosine of the angle is stored instead for performace reasons. We have the following angles (in degrees):
:vertical range - 40
:horizontal central range - 35
:horizontal central max - 55
:horizontal peripheral range - 80
:horizontal peripheral max - 115
Within "range" the "distance" field is used to compute visibility (character is visible if the distance between AI and character is < "distance" field). Between "range" and "max" the visibility distance decreases gradually towards 0.
The vision field can be made visible with the script command *ai2_showvision <nowiki>=</nowiki>1* but it should be noted that the rendering might not be accurate. In particular the peripheral vision field it's missing the central segment.
;Character Constants
{{Table}}
{{OBDth}}
{{OBDtr| 0x434 | link    |C5FF8A| 01 FB 03 00 | 1019        | link to 01019-konoko.[[OBD:ONCV|ONCV]]; defines variants and upgrades }}
{{OBDtr| 0x434 | link    |C5FF8A| 01 FB 03 00 | 1019        | link to 01019-konoko.[[OBD:ONCV|ONCV]]; defines variants and upgrades }}
{{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| 0x438 | link    |C5FF8A| 01 F9 03 00 | 1017        | link to [[OBD:ONCP|01017-.ONCP]]; lists the particles available for this character (trails, flashes, etc) }}
Line 310: Line 317:
{{OBDtr| 0xC60 | float    |FF22FF| 00 00 80 3F | 1.000000    | minimal body size factor }}  
{{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 }}  
{{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) }}
{{OBDtrBK| The following 7 float values are ONCC specific multipliers for 7 PAR3 DamageTypes. See the [[Particle damage types]] page for DamageTypes description.<BR>
{{OBDtr| 0xC68 | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}  
These multipliers affect only StunDamage and Knockback, not the Damage.
{{OBDtr| 0xC6C | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}  
These multipliers are applied as follows: (StunDamage or Knockback)*(1 - the ONCC value) }}
{{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| 0xC68 | float    |FF22FF| 00 00 00 00 | 0.000000    | "Normal" DamageType multiplier }}  
{{OBDtr| 0xC74 | float    |FF22FF| 00 00 80 3E | 0.250000    | unknown }}  
{{OBDtr| 0xC6C | float    |FF22FF| 00 00 00 00 | 0.000000    | "MinorStun" DamageType multiplier }}  
{{OBDtr| 0xC78 | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}  
{{OBDtr| 0xC70 | float    |FF22FF| 00 00 00 3F | 0.500000    | "MajorStun" DamageType multiplier }}  
{{OBDtr| 0xC7C | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}  
{{OBDtr| 0xC74 | float    |FF22FF| 00 00 80 3E | 0.250000    | "MinorKnockdown" DamageType multiplier }}  
{{OBDtr| 0xC80 | float    |FF22FF| 00 00 00 00 | 0.000000    | unknown; always the same }}  
{{OBDtr| 0xC78 | float    |FF22FF| 00 00 00 00 | 0.000000    | "MajorKnockdown" DamageType multiplier }}  
{{OBDtr| 0xC84 | float    |FF22FF| 00 00 00 3F | 0.500000    | BossShield Protect Amount (testme) }}
{{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    | Boss Shield multiplier, employed when the character has a boss shield.<BR>For example via BSL command chr_boss_shield(ai_name).
Incoming Damage, StunDamage and Knockback from any DamageType are all multiplied by (1-this value). }}
{{OBDtr| 0xC88 | link    |808080| 01 F6 03 00 | 1014        | link to 01014-konoko_animations.[[OBD:TRAC|TRAC]] }}  
{{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| 0xC8C | link    |808080| 01 F6 03 00 | 1015        | link to 01015-konoko_screens.[[OBD:TRSC|TRSC]] }}  
Line 329: Line 339:
* needs daodan flag above and 51% overpower to be enabled; chenille cheat works too
* 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)
* 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])
* received (melee) hits cause not blue block flashes but orange flares (see [[:Image:XML ONCC daodan super shield.jpg|HERE]])
  }}  
  }}  
{{OBDtr| 0xC97 | int8    |00D900| 00          | 0          | when set to 1, generically turns on '''canttouchthis''' cheat for this ONCC (used by MutantMuro.ONCC }}  
{{OBDtr| 0xC97 | int8    |00D900| 00          | 0          | when set to 1, generically turns on '''canttouchthis''' cheat for this ONCC (used by MutantMuro.ONCC }}  
Line 335: Line 345:
|}
|}


 
{|align=right
|[[File:ONCC_body_size_factor-original.jpg|120px]]
|-
|[[File:ONCC_body_size_factor-spawn_order_change.jpg|120px]]
|}
;Body size factor
;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:
: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]]).
<gallery align="right">
: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]]).
File:ONCC_body_size_factor-original.jpg|Sample 1
: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]]).
File:ONCC_body_size_factor-spawn_order_change.jpg|Sample 2
: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):
File:ONCC_body_size_factor-sleep_insertion.jpg|Sample 3
func main {
</gallery>
  ai2_allpassive 1
<tt>#Outside shot of cops walking in
  ai2_spawn a_v3
 
  ai2_spawn Lv_40
ai2_spawn Recep
  ai2_spawn lobby_victim05
 
  chr_location 1 -1255 -1.5 50
ai2_spawn partner_cop_1
  chr_location 2 -1255 -1.5 60
 
  chr_location 3 -1255 -1.5 70
ai2_spawn partner_cop_2</tt>
  chr_location 4 -1255 -1.5 80
 
  ai2_lookatme
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:
}
 
: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.  
<tt>#Outside shot of cops walking in
 
ai2_spawn partner_cop_1
 
ai2_spawn partner_cop_2
 
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.


;TRSC bitset
;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:
: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
:NONE - Character is right-hander with both pistols and rifles
:0x01 - Character is left-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)
: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}}

Revision as of 16:02, 26 July 2020

ONI BINARY DATA
OFGA << Other file types >> ONCP
ONCC : Oni Character Class
switch to XML:ONCC page
Overview @ Oni Stuff
OBD.png


Oncc a.gif


Offset Type Raw Hex Value Description
0x000 res_id 01 DF 03 00 991 00991-konoko_generic.ONCC
0x004 lev_id 01 00 00 06 0 level 3
0x008 float CD CC 0C 3F 0.550000 downwards velocity? (unknown, always 0.55)
0x00C float 8F C2 75 3D 0.060000 downward gravity acceleration
0x010 float CD CC 8C 3F 1.100000 starting velocity for a simple (tap) JUMP
0x014 float 00 00 80 C0 -4.000000 limit velocity for jumping and gravity flight
0x018 float 8F C2 F5 3C 0.030000 upward acceleration (jetpack) if you hold JUMP
0x01C int16 07 00 7 gravity timer? (unknown, always 7)
0x01E int16 14 00 20 jetpack timer; time during which you can use the jetpack
0x020 float 00 00 34 42 45.000000 maximal falling height without damage
0x024 float 00 00 07 43 135.000000 maximal falling height with damage


Units
times are in frames
heights are in world units
velocities are in world units per frames
accelerations are in world units per frames squared
Downwards velocity
could correspond to the steady push experienced when neither jumping nor falling
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)
Jetpack timer
You can press JUMP multiple times during the time window (quite fun!)
Falling height
let FH1 be the height at 0x20
let FH2 be the height at 0x24
let BH be the base health of the character
let FH be the actual falling height
then, if FH > FH2, the character is killed
if FH < FH1, the character takes no damage
if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH


Offset Type Raw Hex Value Description
0x028 link 01 F8 03 00 1016 link to 01016-shadow1.TXMP
0x02C float 00 00 40 41 12.000000 height where the shadow fades out completely
0x030 float 00 00 00 41 8.000000 height where the diameter of the shadow decreases and the shadow fades out half
0x034 float 00 00 C0 40 6.000000 height where the diameter of the shadow decreases
0x038 float 00 00 90 40 4.500000 height where the diameter of the shadow decreases
0x03C float 00 00 40 40 3.000000 height where the diameter of the shadow decreases
0x040 int16 30 00 48 transparency of the shadow for the first part of a jump
0x042 int16 30 00 48 transparency of the shadow for the second part of a jump


Jump Constants
Offset Type Raw Hex Value Description
0x044 float 00 00 C8 41 25.000000 jumpDistance? ; always the same
0x048 int8 16 22 jumpHeight? ; always the same
0x049 int8 06 6 jumpDistanceSquares?!?! ; always the same
0x04A char[2] AD DE dead pad


Cover Constants
Offset Type Raw Hex Value Description
0x04C float 00 00 20 42 40.000000 rayIncrement; always the same
0x050 float 00 00 96 43 300.000000 rayMax; always the same
0x054 float 35 FA 8E 3C 0.017453 rayAngle; always the same (0.017453 = PI/180)
0x058 float DB 0F C9 3F 1.570796 rayAngleMax; always the same (1.57 = PI/2)


Autofreeze Constants (unused)
0x05C float 00 00 A0 40 5.000000 distance_xz; always the same
0x060 float 00 00 80 3F 1.000000 distance_y; always the same


Inventory Constants (unused?)
0x064 int16 06 00 6 (inverse) hypo regeneration rate in frames per hitpoint
0x066 char[2] AD DE dead ignored


LOD Constants

Distances from Camera to render certain LODs

Offset Type Raw Hex Value Description
0x068 float 00 10 3D 48 193600.000000 always the same; this is 440 squared
0x06C float 00 10 3D 47 48400.000000 always the same; this is 220 squared
0x070 float 00 10 3D 46 12100.000000 always the same; this is 110 squared
0x074 float 00 00 00 00 0.000000 always the same
0x078 float 00 00 00 00 0.000000 always the same


Hurt Sound Constants
Offset Type Raw Hex Value Description
0x07C int16 23 00 35 hurt_base_percentage; always the same
0x07E int16 5A 00 90 hurt_max_percentage; always the same
0x080 int16 0F 00 15 hurt_percentage_threshold; always the same
0x082 int16 78 00 120 hurt_timer; always the same
0x084 int16 23 00 35 hurt_min_timer; always the same
0x086 int16 01 00 1 hurt_max_light; always the same
0x088 int16 02 00 2 hurt_max_medium; always the same
0x08A int16 64 00 100 hurt_death_chance; always the same
0x08C int16 0A 00 10 hurt_volume_threshold; always the same
0x08E int16 0C 00 12 hurt_medium_threshold; always the same
0x090 int16 16 00 22 hurt_heavy_threshold; always the same
0x092 int8 00 0 runtime only: if 1 sound pointers have been set
0x093 char[1] DE dead ignored
0x094 float 00 00 00 3F 0.500000 sound volume
0x098 char[32] konoko_hurt_light hurt light sound (reference to 08121-konoko_hurt_light.imp.OSBD of level 0)
0x0B8 char[32] konoko_hurt_medium hurt medium sound (reference to 08123-konoko_hurt_medium.imp.OSBD of level 0)
0x0D8 char[32] konoko_hurt_heavy hurt heavy sound (reference to 08119-konoko_hurt_heavy.imp.OSBD of level 0)
0x0F8 char[32] konoko_death death sound (reference to 08115-konoko_death.imp.OSBD of level 0)
0x118 int32 00 00 00 00 0 runtime only: pointer to hurt light sound
0x11C int32 00 00 00 00 0 runtime only: pointer to hurt medium sound
0x120 int32 00 00 00 00 0 runtime only: pointer to hurt heavy sound
0x124 int32 00 00 00 00 0 runtime only: pointer to death sound


AI Constants
Offset Type Raw Hex Value Description
0x128 bitsets 17 00 00 00 23 AI options bitset; see below
0x12C float 00 00 80 3F 1.000000 AI rotation speed factor
0x130 int16 06 00 6 minimal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned
0x132 int16 18 00 24 maximal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned
0x134 uint32 0F 00 00 00 15 number of frames after which AI realizes that it is in the firing spread and it starts dodging
0x138 float 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)
0x13C float 00 00 80 3F 1.000000 maximal firingspread dodge amount; IMO similar to maneouvre variable
AI options bitset
allows or disables some parts of the AI behavior
  • NONE - startle anim is enabled, rest is disabled
  • 0x01 - startle anim disabled
  • 0x02 - firingspread/projectile dodge enabled for melee
  • 0x04 - requires 0x02; firingspread/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
  • 0x10 - bit not used
AI rotation speed factor
reference rotation speed is about 1 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 Constants
Offset Type Raw Hex Value Description
0x140 float 00 00 00 3F 0.500000 unknown; something with AI targeting prediction; always the same for TURR and ONCC
0x144 float 00 00 C8 41 25.000000 unknown; something with AI targeting prediction; always the same for TURR and ONCC
0x148 float 00 00 80 3F 1.000000 unknown; something with AI targeting prediction; always the same for TURR
0x14C int32 00 00 00 00 0 unknown frame count; something with AI targeting prediction; always the same for TURR
0x150 int32 05 00 00 00 5 unknown frame count; something with AI targeting prediction; always the same for TURR
0x154 int32 0F 00 00 00 15 unknown frame count; something with AI targeting prediction; always the same for TURR
0x158 int32 3C 00 00 00 60 unknown frame count; something with AI targeting prediction; always the same for TURR
First of 13 shooting skills (grey outline)
0x15C float 00 00 00 00 0.000000 recoil compensation amount (0.0 = min, 1.0 = max)
0x160 float 00 00 00 00 0.000000 best aiming angle in radians
0x164 float 00 00 00 00 0.000000 shot grouping error
0x168 float 00 00 80 3F 1.000000 shot grouping decay
0x16C float 00 00 80 3F 1.000000 shooting inaccuracy multiplier
0x170 uint16 00 00 0 minimum delay between shots in frames
0x172 uint16 00 00 0 maximum delay between shots in frames
AI Shooting Skills

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

Weapon Offset recoil bestangle error decay inaccuracy delays
w0_sec 0x15C/0x173 0.0 0.000000 0.00 1.0 1.0 0 - 0
w1_tap 0x174/0x18B 0.0 0.000000 0.40 0.4 0.0 30 - 45
w2_sap 0x18C/0x193 0.3 0.013962 0.13 1.0 1.0 0 - 0
w3_phr 0x194/0x20B 0.3 0.010472 0.05 0.5 1.0 0 - 0
w4_psm 0x20C/0x213 0.3 0.015707 0.03 0.2 1.0 0 - 0
w5_sbg 0x214/0x22B 0.3 0.001745 0.00 0.1 1.0 0 - 0
w6_vdg 0x22C/0x233 0.3 0.001745 0.13 0.9 1.0 0 - 0
w7_scc 0x234/0x24B 0.3 0.001745 0.05 0.1 1.0 0 - 0
w8_mbo 0x24C/0x253 0.3 0.005236 0.01 0.5 1.0 0 - 0
w9_scr 0x254/0x26B 0.3 0.010472 0.04 0.5 1.0 0 - 0
w10_sni 0x26C/0x273 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
w12_ba2 0x28B/0x293 0.0 0.000000 0.00 1.0 1.0 0 - 0


Oncc m.gif


Offset Type Raw Hex Value Description
0x294 int32 5A 00 00 00 90 unknown; always the same
0x298 int32 F0 00 00 00 240 unknown; always the same
0x29C int32 B4 00 00 00 180 unknown; always the same
0x2A0 int32 28 00 00 00 40 taunt chance (40%)
0x2A4 int32 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
0x2A8 int32 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
0x2AC int16 00 00 0 combat profile ID; for example *0D* is for Mutant Muro
0x2AE int16 16 00 22 melee profile ID
0x2B0 int8 64 100 "taunt" sound probability (always)
0x2B1 int8 00 0 "alert" sound probability (never)
0x2B2 int8 00 0 "startle" sound probability (never)
0x2B3 int8 00 0 "checkbody" sound probability (never)
0x2B4 int8 00 0 "pursue" sound probability (never)
0x2B5 int8 00 0 "cower" sound probability (never)
0x2B6 int8 64 100 "superpunch" probability (always)
0x2B7 int8 64 100 "superkick" probability (always)
0x2B8 int8 00 0 "super3" sound probability (never)
0x2B9 int8 00 0 "super4" sound probability (never)
0x2BA int16 00 00 0 probably a blank filler (always the same)
0x2BC char[32] c17_99_28konoko "taunt" sound (reference to 08108-c17_99_28konoko.amb.OSBD of level 0)
0x2DC char[32] unused "alert" sound
0x2FC char[32] unused "startle" sound
0x31C char[32] unused "checkbody" sound
0x33C char[32] unused "pursue" sound
0x35C char[32] unused "cower" sound
0x37C char[32] c18_79_14konoko "superpunch" sound (reference to 08110-c17_99_28konoko.amb.OSBD of level 0)
0x39C char[32] c18_79_15konoko "superkick" sound (reference to 08112-c17_99_28konoko.amb.OSBD of level 0)
0x3BC char[32] unused "super3" sound (only the superninja uses this slot)
0x3DC char[32] unused "super4" sound (never used in Oni)
the following 7 vision fields are used to detect if a character can be seen by AI; see Vision Field below for explanation
0x3FC float 00 80 ED 43 475.000000 central vision distance
0x400 float 00 00 16 43 150.000000 peripheral vision distance
0x404 float 7D 1B 44 3F 0.766044 vertical vision range
0x408 float F3 B3 51 3F 0.819152 central vision range
0x40C float E8 D5 12 3F 0.573576 central vision max
0x410 float D5 D0 31 3E 0.173648 peripheral vision range
0x414 float 6B 61 D8 BE 0.422618 peripheral vision max
0x418 int32 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)
0x41C int32 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
0x420 int32 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
0x424 int32 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)
0x428 int32 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
0x42C int32 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
0x430 float 00 00 80 3F 1.000000 earshot radius; defines size of the sound-collision sphere around AI
Vision Field

The "range" and "max" values are logically angles but the cosine of the angle is stored instead for performace reasons. We have the following angles (in degrees):

vertical range - 40
horizontal central range - 35
horizontal central max - 55
horizontal peripheral range - 80
horizontal peripheral max - 115

Within "range" the "distance" field is used to compute visibility (character is visible if the distance between AI and character is < "distance" field). Between "range" and "max" the visibility distance decreases gradually towards 0. The vision field can be made visible with the script command *ai2_showvision =1* but it should be noted that the rendering might not be accurate. In particular the peripheral vision field it's missing the central segment.


Character Constants
Offset Type Raw Hex Value Description
0x434 link 01 FB 03 00 1019 link to 01019-konoko.ONCV; defines variants and upgrades
0x438 link 01 F9 03 00 1017 link to 01017-.ONCP; lists the particles available for this character (trails, flashes, etc)
0x43C link 01 FA 03 00 1018 link to 01018-.ONIA; lists the special impact sounds (used for special combat moves)
0x440 int8 00 unused runtime only
0x441 int8 00 unused padding
0x442 int16 00 00 unused runtime only
0x444 char[16] 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

First of 15 impact elements.
0x454 char[128] Footstep_Walk walk impact (reference to 04124-Footstep_Walk.Impt of level 0); always the same; without the impacts you can't hear the steps of a character
0x4D4 int16 FF FF -1 set at runtime to the value stored at 0x08 in Impt


Oncc e.gif


Offset Type Raw Hex Value Description
0xBF2 int16 00 00 0 unknown; always the same; maybe only a filler
0xBF4 char[64] unused special death particle; only the mad bomber use it
0xC34 link 00 00 00 00 unused runtime only
0xC38 link 00 00 00 00 unused runtime only
0xC3C link 01 E6 03 00 998 link to 00998-konoko_body_high.TRBS
0xC40 link 01 E7 03 00 999 link to 00999-konoko002_high_texture_generic.TRMA
0xC44 link 01 E8 03 00 1000 link to 01000-.CBPM
0xC48 link 01 EC 03 00 1004 link to 01004-.CBPI
0xC4C int32 2C 01 00 00 300 fight mode timer in 1/60 seconds
0xC50 int32 30 75 00 00 30000 first idle animation timer in 1/60 seconds
0xC54 int32 30 75 00 00 30000 second idle animation timer in 1/60 seconds
0xC58 int32 C8 00 00 00 200 basic health of the character model; extra health information for every unique character are stored in the Character.BINA file
0xC5C int32 48 00 00 00 72 feetBits (these bits mark the characters feet)
0xC60 float 00 00 80 3F 1.000000 minimal body size factor
0xC64 float 00 00 80 3F 1.000000 maximal body size factor
The following 7 float values are ONCC specific multipliers for 7 PAR3 DamageTypes. See the Particle damage types page for DamageTypes description.

These multipliers affect only StunDamage and Knockback, not the Damage. These multipliers are applied as follows: (StunDamage or Knockback)*(1 - the ONCC value)

0xC68 float 00 00 00 00 0.000000 "Normal" DamageType multiplier
0xC6C float 00 00 00 00 0.000000 "MinorStun" DamageType multiplier
0xC70 float 00 00 00 3F 0.500000 "MajorStun" DamageType multiplier
0xC74 float 00 00 80 3E 0.250000 "MinorKnockdown" DamageType multiplier
0xC78 float 00 00 00 00 0.000000 "MajorKnockdown" DamageType multiplier
0xC7C float 00 00 00 00 0.000000 "Blownup" DamageType multiplier
0xC80 float 00 00 00 00 0.000000 "Pickup" DamageType multiplier
0xC84 float 00 00 00 3F 0.500000 Boss Shield multiplier, employed when the character has a boss shield.
For example via BSL command chr_boss_shield(ai_name).

Incoming Damage, StunDamage and Knockback from any DamageType are all multiplied by (1-this value).

0xC88 link 01 F6 03 00 1014 link to 01014-konoko_animations.TRAC
0xC8C link 01 F6 03 00 1015 link to 01015-konoko_screens.TRSC
0xC90 int16 1E 00 30 AI Rate of Fire (testme)
0xC92 int16 00 00 0 time between death and deletion, in frames (about 3 seconds for mad bomber)
0xC94 bitset 00 0 TRSC bitset; see below
0xC95 int8 01 1 when set to 1 indicates that character has daodan powers (character does more damage in overpower mode)
0xC96 int8 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 HERE)
0xC97 int8 00 0 when set to 1, generically turns on canttouchthis cheat for this ONCC (used by MutantMuro.ONCC
0xC98 char[8] AD DE dead unused
ONCC body size factor-original.jpg
ONCC body size factor-spawn order change.jpg
Body size factor
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 CHAPTER 06 . COUNTERATTACK 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)


ONI BINARY DATA
OFGA << Other file types >> ONCP
ONCC : Oni Character Class
Character file