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 AE/AEInstaller/vanilla/level0_Final.dat
- 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 | Boss Shield 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>