Jump to content

OBD:ONCC: Difference between revisions

1,329 bytes removed ,  22 October 2021
final update to match XML page
(update part 2)
(final update to match XML page)
Line 153: Line 153:
{{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 }}
{{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 }}
|}
|}


;AI options bitset
;AI options bitset
Line 162: Line 163:
*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
*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
;AI rotation speed factor
Line 169: Line 171:




;AI Targeting Constants
;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| 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    | multiplied against target's distance to get error in AI's/turret's first wild shot (always 0.5) }}
{{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  | max value for result of multiplication above (always 25) }}
{{OBDtr| 0x148 | float    |8C8CCC| 00 00 80 3F | 1.000000    | unknown; something with AI targeting prediction; always the same for TURR }}
{{OBDtr| 0x148 | float    |8C8CCC| 00 00 80 3F | 1.000000    | accuracy multiplier for prediction of target's position (always 1) }}
{{OBDtr| 0x14C | int32    |FF00C8| 00 00 00 00 | 0          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
{{OBDtr| 0x14C | int32    |FF00C8| 00 00 00 00 | 0          | maximum allowed frames of lookback to be used for predicting target's position (always 0) }}
{{OBDtr| 0x150 | int32    |FF00C8| 05 00 00 00 | 5          | unknown frame count; something with AI targeting prediction; always the same for TURR }}
{{OBDtr| 0x150 | int32    |FF00C8| 05 00 00 00 | 5          | frames of delay in recognizing target's current position (always 5) }}
{{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          | number of frames over which AI can average target's velocity to help predict position (always 15) }}
{{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          | size in frames of target's history location buffer (always 60) }}
{{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| 0x160 | float    |F0F096| 00 00 00 00 | 0.000000    | best aiming angle in radians }}
 
{{OBDtr| 0x164 | float    |F0F096| 00 00 00 00 | 0.000000    | shot grouping error }}
;AI Weapon Skills
{{OBDtr| 0x168 | float    |F0F096| 00 00 80 3F | 1.000000    | shot grouping decay }}
 
This is an array of 13 sets of skill variables, one for each weapon. Below is the data for the first element:
 
{{Table}}
{{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 | uint16   |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 | uint16   |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 Shooting Skills
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).
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...)
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.


{{Table|width=""|align="left"}}
{{Table}}
|-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
|}
|}




[[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 | int32    |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 | int32    |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 | int32    |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 | int32    |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 | int32    |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 | int32    |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 | int16    |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 | int16    |C80040| 16 00      | 22          | melee profile ID }}
Line 251: Line 263:
{{OBDtr| 0x2BA | int16    |C8C864| 00 00      | 0          | probably a blank filler (always the same) }}
{{OBDtr| 0x2BA | int16    |C8C864| 00 00      | 0          | probably a blank filler (always the same) }}
{{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.[[OBD:OSBD|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.[[OBD:OSBD|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) }}
{{OBDtrBK| the following 7 vision fields are used to detect if a character can be seen by AI; see Vision Field below for explanation }}
{{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| 0x3FC | float    |FF80C0| 00 80 ED 43 | 475.000000  | central vision distance }}
{{OBDtr| 0x3FC | float    |FF80C0| 00 80 ED 43 | 475.000000  | central vision distance }}
{{OBDtr| 0x400 | float    |FF80C0| 00 00 16 43 | 150.000000  | peripheral vision distance }}
{{OBDtr| 0x400 | float    |FF80C0| 00 00 16 43 | 150.000000  | peripheral vision distance }}
Line 268: Line 280:
{{OBDtr| 0x410 | float    |FF80C0| D5 D0 31 3E | 0.173648    | peripheral vision range }}
{{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| 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        | 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| 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        | how long will AI remain strongly convinced that there is an enemy, but will investigate his presence rather than 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| 0x420 | int32    |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| 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| 0x424 | int32    |D0C0AF| 10 0E 00 00 | 3600        | decay time for dropping back from high alert to medium alert }}
{{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| 0x428 | int32    |D0C0AF| 50 46 00 00 | 18000      | decay time for dropping back from medium alert to low 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| 0x42C | int32    |D0C0AF| A0 8C 00 00 | 36000      | decay time for dropping back from low alert to no alert status }}
{{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    | hearing radius; defines size of the sound-detection sphere around an AI }}
|}
|}


;Vision Field
;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):
See [[XML:ONCC#.3CVisionConstants.3E|HERE]] for details on how this works.
: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
;File Links


{{Table}}
{{Table}}
Line 311: Line 317:
{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0xBF2 | int16    |FFFFA6| 00 00      | 0          | unknown; always the same; maybe only a filler }}  
{{OBDtr| 0xBF2 | int16    |FFFFA6| 00 00      | 0          | padding }}  
{{OBDtr2|0xBF4 | char[64] |71FFB8| unused                    | special death particle; only the mad bomber use it }}  
{{OBDtr2|0xBF4 | char[64] |71FFB8| unused                    | special death particle; only the Mad Bomber uses it }}  
{{OBDtr| 0xC34 | link    |0000BF| 00 00 00 00 | unused      | runtime only }}
{{OBDtr| 0xC34 | link    |0000BF| 00 00 00 00 | unused      | runtime only }}
{{OBDtr| 0xC38 | link    |0000BF| 00 00 00 00 | unused      | runtime only }}
{{OBDtr| 0xC38 | link    |0000BF| 00 00 00 00 | unused      | runtime only }}
Line 319: Line 325:
{{OBDtr| 0xC44 | link    |0000BF| 01 E8 03 00 | 1000        | link to [[OBD:CBPM|01000-.CBPM]] }}
{{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| 0xC48 | link    |0000BF| 01 EC 03 00 | 1004        | link to [[OBD:CBPI|01004-.CBPI]] }}
{{OBDtr| 0xC4C | int32    |804040| 2C 01 00 00 | 300        | fight mode timer in 1/60 seconds }}  
{{OBDtr| 0xC4C | int32    |804040| 2C 01 00 00 | 300        | how long in ticks before character can leave fight mode }}  
{{OBDtr| 0xC50 | int32    |804040| 30 75 00 00 | 30000      | first idle animation timer in 1/60 seconds }}  
{{OBDtr| 0xC50 | int32    |804040| 30 75 00 00 | 30000      | how long in ticks before the Idle animation can be played the first time }}  
{{OBDtr| 0xC54 | int32    |804040| 30 75 00 00 | 30000      | second idle animation timer in 1/60 seconds }}  
{{OBDtr| 0xC54 | int32    |804040| 30 75 00 00 | 30000      | how long in ticks before the Idle animation can be played another time }}  
{{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| 0xC58 | int32    |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 | int32    |804040| 48 00 00 00 | 72          | feetBits (these bits mark the characters feet)
{{OBDtr| 0xC5C | int32    |804040| 48 00 00 00 | 72          | unused }}  
}}  
{{OBDtr| 0xC60 | float    |FF22FF| 00 00 80 3F | 1.000000    | minimum 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    | maximum body size factor }}  
{{OBDtr| 0xC64 | float    |FF22FF| 00 00 80 3F | 1.000000    | maximal body size factor }}  
{{Anchor|DamageTypes}}
{{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>
{{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>
Line 337: Line 342:
{{OBDtr| 0xC7C | float    |FF22FF| 00 00 00 00 | 0.000000    | "Blownup" 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| 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).
{{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%) }}
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]] }}  
{{OBDtr| 0xC90 | int16    |FFAA82| 1E 00      | 30          | AI Rate of Fire (testme) }}  
{{OBDtr| 0xC90 | int16    |FFAA82| 1E 00      | 30          | unused }}  
{{OBDtr| 0xC92 | int16    |FFAA82| 00 00      | 0          | time between death and deletion, in frames (about 3 seconds for mad bomber) }}  
{{OBDtr| 0xC92 | int16    |FFAA82| 00 00      | 0          | time between death and deletion, in frames (0 for all characters except Mad Bomber, who is 190 ticks) }}  
{{OBDtr| 0xC94 | bitset  |00D900| 00          | 0          | TRSC bitset; see below }}  
{{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| 0xC95 | int8    |00D900| 01          | 1          | character has Daodan powers (can overheal with hypos, do more damage in overpower mode)}}  
{{OBDtr| 0xC96 | int8    |00D900| 00          | 0          | when set to 1 indicates that character has supershield
{{OBDtr| 0xC96 | int8    |00D900| 00          | 0          | character has supershield (see [[XML:ONCC]] for details) }}  
* is visible as red shield when overpowered
{{OBDtr| 0xC97 | int8    |00D900| 00          | 0          | turns on '''canttouchthis''' cheat (used by MutantMuro.ONCC) }}  
* 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 [[: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| 0xC98 | char[8]  |CACAFF| AD DE      | dead        | unused }}  
{{OBDtr| 0xC98 | char[8]  |CACAFF| AD DE      | dead        | unused }}  
|}
|}


;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)
;Body size factor
{|align=right
{|align=right
|[[File:ONCC_body_size_factor-original.jpg|120px]]
|[[File:ONCC_body_size_factor-original.jpg|120px]]
Line 360: Line 368:
|[[File:ONCC_body_size_factor-spawn_order_change.jpg|120px]]
|[[File:ONCC_body_size_factor-spawn_order_change.jpg|120px]]
|}
|}
;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 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]]).
: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]]).
: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):
: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 {
  func main
{
   ai2_allpassive 1
   ai2_allpassive 1
   ai2_spawn a_v3
   ai2_spawn a_v3
Line 376: Line 385:
   ai2_lookatme
   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.  
: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}}