XML:ONCC
| ONCC : Oni Character Class |
| |
|---|---|---|
| XML
OBAN << Other file types >> ONCV |
general information
- The xml code on this page is compatible with onisplit v0.9.61.0
- ONCP, ONIA, OBPI and OBPM are part of ONCC*.oni files.
- ONCC files can be found in Edition/GameDataFolder/level0_Final
- Things that still need deeper explanation:
- <DamageFactors>
- <CoverConstants>
- <AutoFreezeConstants>
- <LODConstants>
<AirConstants>
- 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 <MaxNoDamageFallingHeight>
- let FH2 be <MaxDamageFallingHeight>
- 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
| XML tag | content type | description |
|---|---|---|
| <FallGravity> | float | downwards velocity? (always 0.55) |
| <JumpGravity> | float | downward gravity acceleration |
| <JumpStartVelocity> | float | starting velocity for a simple (tap) JUMP |
| <MaxVelocity> | float | limit velocity for jumping and gravity flight |
| <JetpackAcceleration> | float | upward acceleration (jetpack) if you hold JUMP |
| <FramesFallGravity> | int16 | gravity timer? (always 7) |
| <JetpackTimer> | int16 | time during which you can use the jetpack |
| <MaxNoDamageFallingHeight> | float | maximal falling height without damage |
| <MaxDamageFallingHeight> | float | maximal falling height with damage |
<ShadowConstants>
| XML tag | content type | description |
|---|---|---|
| <Texture> | link | TXMPfile.oni (file suffix not used) |
| <MaxHeight> | float | height where the shadow fades out completely |
| <FadeHeight> | float | height where the diameter of the shadow decreases and the shadow fades out half |
| <SizeMax> | float | height where the diameter of the shadow decreases |
| <SizeFade> | float | height where the diameter of the shadow decreases |
| <SizeMin> | float | height where the diameter of the shadow decreases |
| <AlphaMax> | int16 | transparency of the shadow for the first part of a jump |
| <AlphaFade> | int16 | transparency of the shadow for the second part of a jump |
<JumpConstants>
| XML tag | content type | description |
|---|---|---|
| <JumpDistance> | float | always the same (25) |
| <JumpHeight> | int8 | always the same (22) |
| <JumpDistanceSquares> | int8 | always the same (6) |
<CoverConstants>
| XML tag | content type | description |
|---|---|---|
| <RayIncrement> | float | always the same (40) |
| <RayMax> | float | always the same (300) |
| <RayAngle> | float | always the same (0.017453 = PI/180) |
| <RayAngleMax> | float | always the same (1.57 = PI/2) |
<AutoFreezeConstants>
| XML tag | content type | description |
|---|---|---|
| <DistanceXZ> | float | always the same (5) |
| <DistanceY> | float | always the same (1) |
<InventoryConstants>
| XML tag | content type | description |
|---|---|---|
| <HypoRegenerationRate> | int16 | (inverse) hypo regeneration rate in frames per health point; overhealth regeneration rate is not affected by this
if rate = 60; if a hypo restores 50HP then we get 60/1 * 50 = 3000 frames (50s) |
<LODConstants>
Distances from camera to render certain LODs (level of detail).
| XML tag | content type | description |
|---|---|---|
| <Float> | float | always the same (193600); this is 440 squared |
| <Float> | float | always the same (48400); this is 220 squared |
| <Float> | float | always the same (12100); this is 110 squared |
| <Float> | float | always the same (0) |
| <Float> | float | always the same (0) |
<HurtSoundConstants>
| XML tag | content type | description |
|---|---|---|
| <BasePercentage> | int16 | hurt_base_percentage; always the same (35) |
| <MaxPercentage> | int16 | hurt_max_percentage; always the same (90) |
| <PercentageThreshold> | int16 | hurt_percentage_threshold; always the same (15) |
| <Timer> | int16 | hurt_timer; always the same (120) |
| <MinTimer> | int16 | hurt_min_timer; always the same (35) |
| <MaxLight> | int16 | always the same (1) |
| <MaxMedium> | int16 | always the same (2) |
| <DeathChance> | int16 | always the same (100) |
| <VolumeTreshold> | int16 | hurt_volume_threshold; always the same (10) |
| <MediumTreshold> | int16 | hurt_medium_threshold; always the same (12) |
| <HeavyTreshold> | int16 | hurt_heavy_threshold; always the same (22) |
| <MinVolume> | float | minimal sound volume |
| <LightSound> | char[32] | OSBDfile.imp.oni (only the file name) |
| <MediumSound> | char[32] | OSBDfile.imp.oni (only the file name) |
| <HeavySound> | char[32] | OSBDfile.imp.oni (only the file name) |
| <DeathSound> | char[32] | OSBDfile.imp.oni (only the file name) |
<AIConstants>
| XML tag | content type | description |
|---|---|---|
| <Flags> | flag |
|
| <RotationSpeed> | float | 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 :) |
| <DazedMinFrames> | int16 | minimal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned |
| <DazedMaxFrames> | int16 | maximal fallen time; number of frames for which AI remains in *fallen* position when it is knockdowned |
| <DodgeReactFrames> | uint32 | number of frames after which AI realizes that it is in the firing spread and it starts dodging |
| <DodgeTimeScale> | float | 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) |
| <DodgeWeightScale> | float | maximal firingspread dodge amount; IMO similar to maneouvre variable |
| <Targeting> | see HERE | |
| <WeaponSkills> | see HERE | |
| <DeadMakeSureDelay> | int32 | always the same (90), AI waits at the corpse for some time? |
| <InvestigateBodyDelay> | int32 | always the same (240), unused ? |
| <LostContactDelay> | int32 | always the same (180) |
| <DeadTauntChance> | int32 | chance of AI doing a taunt when player or AI's of another team dies |
| <GoForGunChance> | int32 | determines possibility that AI will run to some weapon and take it; can be checked in devmode by *debug_gun_behavior* command |
| <RunPickupChance> | int32 | 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 |
| <CombatId> | int16 | combat profile ID |
| <MeleeId> | int16 | melee profile ID |
| <SoundConstants> | see HERE | |
| <HostileThreatDefiniteTimer> | int32 | 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) |
| <HostileThreatStrongTimer> | int32 | 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 |
| <HostileThreatWeakTimer> | int32 | 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 |
| <FriendlyThreatDefiniteTimer> | int32 | 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) |
| <FriendlyThreatStrongTimer> | int32 | 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 |
| <FriendlyThreatWeakTimer> | int32 | how long will AI remain in weak feeling of ally, doing its usual job; can be checked by *ai2_report_verbose* command |
| <EarshotRadius> | float | earshot radius; defines size of the sound-collision sphere around AI |
<Targeting>
| XML tag | content type | description |
|---|---|---|
| <StartleMissAngle> | float | always the same for TURR and ONCC (0.5) |
| <StartleMissDistance> | float | always the same for TURR and ONCC (25) |
| <PredictAmount> | float | always the same for TURR |
| <PredictPositionDelayFrames> | int32 | always the same for TURR |
| <PredictDelayFrames> | int32 | always the same for TURR |
| <PredictVelocityFrames> | int32 | always the same for TURR |
| <PredictTrendFrames> | int32 | always the same for TURR |
<WeaponSkills>
|
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...) |
<VisionConstants>
- 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):
|
|
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.
| XML tag | content type | description |
|---|---|---|
| <CentralDistance> | float | central vision distance |
| <PeripheralDistance> | float | peripheral vision distance |
| <VerticalRange> | float | vertical vision range |
| <CentralRange> | float | central vision range |
| <CentralMax> | float | central vision max |
| <PeripheralRange> | float | peripheral vision range |
| <PeripheralMax> | float | peripheral vision max |
ONCV, death particle, TRBS, TRMA, TRAC, TRAS, health, daodan, etc.
| XML tag | content type | description |
|---|---|---|
| <Variant> | link | ONCVfile.oni, defines variants and upgrades |
| <Particles> | link | ONCP instance number (#N) |
| <Impacts> | link | ONIA instance number (#N) |
| <ImpactModifierName> | flag | used to choose correct effect from ONIE; impact name -> material name -> modifier (<Component> must be probably "Impact")
|
| <Impacts> | link | holds a lot <ONCCImpact><Name>Imptname.oni</Name></ONCCImpact> for character-environment collision; see ... ONIE in relation to characters |
| <DeathParticle> | link | in vanilla Oni only Mad Bomber uses it |
| <BodySet> | link | TRBSfile.oni |
| <BodyTextures> | link | TRMAfile.oni |
| <BodyMaterials> | link | CBPM instance number (#N) |
| <BodyImpacts> | link | CBPI instance number (#N) |
| <FightModeTimer> | int32 | fight mode timer in 1/60 seconds |
| <IdleAnimation1Timer> | int32 | first idle animation timer in 1/60 seconds |
| <IdleAnimation2Timer> | int32 | second idle animation timer in 1/60 seconds |
| <Health> | int32 | basic health of the character model; extra health information for every unique character are stored in the BINACJBOCharacter.oni file |
| <FeetBones> | flag |
|
| <MinBodySizeFactor> | float | minimal body size factor |
| <MaxBodySizeFactor> | float | maximal body size factor |
| <DamageFactors> | see HERE | |
| <BossShieldProtectAmount> | float | BossShield Protect Amount |
| <Animations> | link | TRACfile.oni |
| <AimingScreens> | link | TRASfile.oni |
| <AIRateOfFire> | int16 | AI Rate of Fire |
| <DeathDeleteDelay> | int16 | time between death and deletion, in frames (about 3 seconds for mad bomber) |
| <WeaponHand> | flag |
|
| <HasDaodanPowers> | int8 | when set to 1 indicates that character has daodan powers (character does more damage in overpower mode) |
| <HasSupershield> | int8 | when set to 1 indicates that character has supershield
|
| <CantTouchThis> | int8 | when set to 1, generically turns on canttouchthis cheat for this ONCC (used by ONCCMutantMuro) |
<DamageFactors>
The following 7 float values corespond to damage types.
| XML tag | content type | description |
|---|---|---|
| <Float> | float | something with normal damage ? |
| <Float> | float | something with minor stun ? |
| <Float> | float | major 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 field 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) |
| <Float> | float | something with minor knockdown ? |
| <Float> | float | something with major knockdown ? |
| <Float> | float | something with blownup ? |
| <Float> | float | something with pickup ? |
ONCP: Oni Character Particle (Array)
- ONCP is used for giving particle to animations. Search for "Particles" tag in TRAM file.
XML structure
<ONCP id="3">
<Particles>
<ONCPParticle>
<Name>...</Name>
<Type>...</Type>
<BodyPart>...</BodyPart>
</ONCPParticle>
[...]
</Particles>
</ONCP>
- <Name> is anchor for TRAM link; vanilla names:
- acid - for death event in bio lab (level 3)
- barabwave - for Baraba's earthquaker
- blanka - for one of MutantMuro's special attacks
- contrail - for colored heavy attacks (character specific <Type>)
- daodan - Konoko's daodan blow
- daodan2 - Konoko's daodan blow (last level)
- death
- dust
- fireball - Mukade's devil star
- flash - attack impact flash
- glow - colored glow particle for attacks
- murowave - for MutantMuro's ass bomb
- snap - health indicator particle ?
- teleport - for Mukade's teleport animation
- thud
- thunderbolt - for one of MutantMuro's special attacks
- trail - white color contrail for standard attacks
- rocket - for Baraba's jetpack
- super_attractor - for MutantMuro
- super_glow - body daodan glow particle
- super_l_hand - left hand daodan glow particle (<BodyPart>LeftFist)
- super_r_hand - right hand daodan glow particle (<BodyPart>RightFist)
- <Type> provide particle (file name without prefix BINA3RAP and without suffix .oni)
- <BodyPart> means bone Id, see TRIA; also allowed: "KillImpact"
ONIA: Oni Character Impact Array
- ONIA is used for special attacks as kind of extension to CBPI in ONIE.
- <Name> is anchor for TRAM link, <Type> and <Modifier> are links for ONIE. "Light", "Medium" and "Heavy" are possible modifier.
- See ONIE for more information.
XML structure
<ONIA id="4">
<Impacts>
<ONIAImpact>
<Name>...</Name>
<Type>Bar_Super_Punch</Type>
<Modifier>Heavy</Modifier>
</ONIAImpact>
[...]
</ONIA>
CBPM: Character Body Part Materials
XML structure
The link Id is equal to bone list in TRIA. For example: eleventh material links to character's head.
<CBPM id="7">
<Materials>
<Link>MtrlCloth</Link>
<Link>MtrlCloth</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlCloth</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlCloth</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
<Link>MtrlArmor</Link>
</Materials>
</CBPM>
CBPI: Character Body Part Impacts
- They link to Impt files which are used by ONIE.
- Special attacks have there own Impt files. See ONIA.
XML structure
The link Id is equal to bone list in TRIA. For example: eleventh material links to character's head.
<CBPI id="8">
<HitImpacts>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptKick_Hit</Link>
<Link>ImptPunch_Hit</Link>
<Link>ImptHead_Hit</Link>
<Link>ImptHead_Hit</Link>
<Link>ImptHead_Hit</Link>
<Link>ImptPunch_Hit</Link>
<Link>ImptPunch_Hit</Link>
<Link>ImptPunch_Hit</Link>
<Link>ImptHead_Hit</Link>
<Link>ImptPunch_Hit</Link>
<Link>ImptPunch_Hit</Link>
<Link>ImptPunch_Hit</Link>
</HitImpacts>
<BlockedImpacts>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptKick_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
<Link>ImptHead_Blocked</Link>
<Link>ImptHead_Blocked</Link>
<Link>ImptHead_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
<Link>ImptHead_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
<Link>ImptPunch_Blocked</Link>
</BlockedImpacts>
<KilledImpacts>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptKick_Killed</Link>
<Link>ImptPunch_Killed</Link>
<Link>ImptHead_Killed</Link>
<Link>ImptHead_Killed</Link>
<Link>ImptHead_Killed</Link>
<Link>ImptPunch_Killed</Link>
<Link>ImptPunch_Killed</Link>
<Link>ImptPunch_Killed</Link>
<Link>ImptHead_Killed</Link>
<Link>ImptPunch_Killed</Link>
<Link>ImptPunch_Killed</Link>
<Link>ImptPunch_Killed</Link>
</KilledImpacts>
</CBPI>
