XML:ONCC
ONCC : Oni Character Class | ||
---|---|---|
XML
OFGA << Other file types >> ONCV |
General information
- The XML on this page is compatible with OniSplit v0.9.61.0.
- ONCP, ONIA, OBPI and OBPM are part of ONCC*.oni files.
- ONCC files are global; they 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
XML tag | Content type | Description |
---|---|---|
<FallGravity> | float | Downwards velocity? Always 0.55. It would be roughly equivalent to the starting velocity of a fall. Although the value 0.55 seems right, the "sinking" seems to be hardcoded now. |
<JumpGravity> | float | Downward gravity acceleration |
<JumpStartVelocity> | float | Starting velocity for a simple jump (tapping JUMP) |
<MaxVelocity> | float | Maximum velocity for jumping and falling |
<JetpackAcceleration> | float | Upward acceleration (jetpack) if you hold JUMP |
<FramesFallGravity> | int16 | Gravity timer (the time until gravity switches on)? Always 7. Seems to be hardcoded now. |
<JetpackTimer> | int16 | Time during which you can use the jetpack. This mod allows you to press JUMP multiple times during the time window (quite fun!). |
<MaxNoDamageFallingHeight> | float | Maximum falling height without damage (see below) |
<MaxDamageFallingHeight> | float | Maximum falling height with damage
|
<ShadowConstants>
XML tag | Content type | Description |
---|---|---|
<Texture> | link | TXMPfile.oni (file suffix not used) |
<MaxHeight> | float | Height where the diameter of the shadow shrinks to <SizeMin> |
<FadeHeight> | float | Height range over which the diameter of the shadow decreases from <SizeMax> to <SizeFade> and the shadow starts to fades out from <AlphaMax> to <AlphaFade> |
<SizeMax> | float | Maximum diameter of the shadow |
<SizeFade> | float | Diameter that the shadow shrinks to when <FadeHeight> is reached |
<SizeMin> | float | Minimum diameter of the shadow |
<AlphaMax> | int16 | Starting transparency of the shadow as the character rises towards <FadeHeight> |
<AlphaFade> | int16 | Starting transparency of the shadow when the character begins to get above <FadeHeight> |
<JumpConstants>
XML tag | Content type | Description |
---|---|---|
<JumpDistance> | float | Always 25; unused |
<JumpHeight> | int8 | Always 22; unused |
<JumpDistanceSquares> | int8 | Always 6 |
<CoverConstants>
XML tag | Content type | Description |
---|---|---|
<RayIncrement> | float | Always 40; unused |
<RayMax> | float | Always 300; unused |
<RayAngle> | float | Always 0.017453 (π/180); unused |
<RayAngleMax> | float | Always 1.57 (π/2); unused |
<AutoFreezeConstants>
XML tag | Content type | Description |
---|---|---|
<DistanceXZ> | float | Always 5; unused |
<DistanceY> | float | Always 1; unused |
<InventoryConstants>
XML tag | Content type | Description |
---|---|---|
<HypoRegenerationRate> | int16 | Hypo healing speed in ticks per health point; overhealth regeneration rate is not affected by this
If rate = 60 and a hypo restores 50HP then we get a total healing time of 60 * 50 = 3000 ticks (50s) |
<LODConstants>
Distances from camera used to choose which LOD (level of detail) to use for a character model.
XML tag | Content type | Description |
---|---|---|
<Float> | float | Always 193,600 (440^2) |
<Float> | float | Always 48,400 (220^2) |
<Float> | float | Always 12,100 (110^2) |
<Float> | float | Always 0 |
<Float> | float | Always 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, which defines variants and upgrades; see XML:ONCV for explanation |
<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
Seems to be a list of slots for specific animation types so that those animations inherit the Impt value (name). See <ONCCImpact><Name>"Fall_LandHard" and StNA anim type Fall_LandHard. |
<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, active for X frames
COMidle animations will play until X frames passed and beyond that time. The character will return to his non-COM idle animations when an animation plays that has no COM variant, like running, so that the COM idle looped is breaked. This behavior qualifies as a bug.
|
<IdleAnimation1Timer> | int32 | minimum timer in X frames before an Idle type animation can be played, engine adds a few frames to the counter (always different)
Idle type animation are not to be confused with typical idle animations which use Stand as type
|
<IdleAnimation2Timer> | int32 | timer in X frames, resets IdleAnimation1Timer (it is basically the minumum pause between to Idle animations) |
<Health> | int32 | basic health of the character model; extra health information for every unique character are stored in the BINACJBOCharacter.oni file. If playing on hard the character receives automatically a boost of 25% health by default (from ONGS, excluding player character). |
<FeetBones> | flag |
|
<MinBodySizeFactor> | float | minimal body size factor |
<MaxBodySizeFactor> | float | maximal body size factor |
<DamageFactors> | see HERE | |
<BossShieldProtectAmount> | float | Boss Shield Protect Amount, when boss shield is used by this ONCC (for example via chr_boss_shield(ai_name)), all incoming DamageTypes are multiplied by the value (1 - BossShieldProtectAmount) |
<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 correspond to damage types. These are ONCC specific multipliers for DamageTypes. See Particle damage types for details.
These multipliers affect StunDamage and Knockback parameters of DamageBlast and DamageChar PAR3 actions, which utilize these DamageTypes. Damage parameters is not affected by these multipliers.
These multipliers are applied as follows: actual applied StunDamage or Knocback = (PAR3 StunDamage or Knockback)*(1-ONCCvalue)
XML tag | content type | description |
---|---|---|
<Float> | float | "Normal" DamageType multiplier |
<Float> | float | "MinorStun" DamageType multiplier |
<Float> | float | "MajorStun" DamageType multiplier |
<Float> | float | "MinorKnockdown" DamageType multiplier |
<Float> | float | "MajorKnockdown" DamageType multiplier |
<Float> | float | "Blownup" DamageType multiplier |
<Float> | float | "Pickup" DamageType multiplier |
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 - Floor dust particle when player falls from heights
- 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 and XML:TRBS.
- The bones belong to any zero-based array. XML flags:
Pelvis LeftThigh LeftCalf LeftFoot RightThigh RightCalf RightFoot Mid Chest Neck Head LeftShoulder LeftArm LeftWrist LeftFist RightShoulder RightArm RightWrist RightFist KillImpact None
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 impact 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>
list of original ONCC
barabus bdfem_1 bdfem_2 bdfem_3 bdfem_4 bd_1 bd_2 bd_3 bd_4 bd_5 comguy_1 comguy_2 comguy_3 CopfemA1 CopfemA2 CopmaleA1 CopmaleA2 CopmaleA3 CopmaleA4 elite_easy_1 elite_easy_2 elite_easy_3 elite_hard_1 elite_hard_2 elite_hard_3 elite_med_1 elite_med_2 elite_med_3 generic_female_1 generic_female_2 generic_female_3 generic_female_4 generic_female_5 generic_female_6 generic_female_7 generic_female_8 generic_female_9 generic_male_1 generic_male_2 generic_male_3 generic_male_4 generic_male_5 generic_male_6 griffin_generic griffin_swat k3 k4_A k4_F k4_G k4_K k4_L konoko_generic mad_bomber muro_generic mutantmuro ninjabot ninja_easy_1 ninja_easy_2 ninja_easy_3 ninja_hard_1 ninja_hard_2 ninja_hard_3 ninja_med_1 ninja_med_2 ninja_med_3 red_easy_1 red_easy_2 red_easy_3 red_hard_1 red_hard_2 red_hard_3 red_med_1 red_med_2 red_med_3 security_guard_1 security_guard_2 Shinzom_generic SH_dream_lab SH_generic sniper_generic striker_dream_lab striker_easy_1 striker_easy_2 striker_easy_3 striker_hard_1 striker_hard_2 striker_hard_3 striker_med_1 striker_med_2 striker_med_3 super_ninja_1 tanker_easy_1 tanker_hard_1 tanker_med_1 TCTF_lite_1 TCTF_lite_blackops_1 TCTF_swat_1 TCTF_swat_blackops_1 thug_air_1 thug_air_2 thug_air_3 thug_air_4 thug_air_5 thug_mfg_1 thug_mfg_2 thug_mfg_3 thug_mfg_4 thug_mfg_5 thug_neuro_1 thug_neuro_2 thug_neuro_3 thug_neuro_4 thug_neuro_5 thug_pow_1 thug_pow_2 thug_pow_3 thug_pow_4 thug_pow_5 thug_wh_1 thug_wh_2 thug_wh_3 thug_wh_4 thug_wh_5
character balance
Is a character sufficiently balanced?
To decide on this we might compare vanilla characters against against custome characters.
Values that could be taken into account:
- health
- attack strength (per TRAM)
- attack speed (frame count) (per TRAM)
- average damage of movement set
- max attack damage per minute
- damage multipliers (<DamageFactors>)
- block chances (melee profile)