XML:ONCC: Difference between revisions

From OniGalore
Jump to navigation Jump to search
mNo edit summary
(33 intermediate revisions by 4 users not shown)
Line 1: Line 1:
__TOC__
{{XML_File_Header | type=ONCC | prev=OBAN | next=ONCV | name=Oni Character Class }}
{{XML}}


 
==general information==
{{Template:XMLModdingHints}}
* The xml code on this page is compatible with onisplit '''v0.9.61.0'''
{| border=0 cellspacing=20 cellpadding=0 align=center
| The xml code on this page is compatible with onisplit '''v0.9.61.0'''
|}
 
 
=ONCC: Oni character class=
'''general information'''
* ONCP, ONIA, OBPI and OBPM are part of '''ONCC*.oni''' files.
* ONCP, ONIA, OBPI and OBPM are part of '''ONCC*.oni''' files.
* ONCC files can be found in Edition/GameDataFolder/level0_Final
* ONCC files can be found in AE/AEInstaller/vanilla/level0_Final.dat
* Things that still need deeper explanation:
* Things that still need deeper explanation:
: '''<DamageFactors>'''
: '''<DamageFactors>'''
Line 17: Line 11:
: <AutoFreezeConstants>
: <AutoFreezeConstants>
: <LODConstants>
: <LODConstants>
: Loser's warehouse ninja that can follow player onto crates




Line 37: Line 32:
:if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH
:if FH1 < FH < FH2, the character takes damage (FH - FH1) / (FH2 - FH1) * BH


{|
 
{{table}}
{| class="wikitable" width="100%"
|width=200px|<FallGravity>
!width=150px| XML tag
|width=40px| float
!width=120px| content type
! description
|-
|<FallGravity>
| float
| downwards velocity? (always 0.55)
| downwards velocity? (always 0.55)
|-
|-
Line 78: Line 77:


==<ShadowConstants>==
==<ShadowConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <Texture>
!width=120px| content type
|width=40px| float
! description
| <font color="#777777">TXMP</font>file<font color="#777777">.oni</font>
|-
| <Texture>
| link
| TXMPfile<font color="#777777">.oni (file suffix not used)</font>  
|-
|-
| <MaxHeight>
| <MaxHeight>
Line 115: Line 117:


==<JumpConstants>==
==<JumpConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <JumpDistance>
!width=120px| content type
|width=40px| float
! description
|-
| <JumpDistance>
| float
| always the same (25)
| always the same (25)
|-
|-
Line 132: Line 137:


==<CoverConstants>==
==<CoverConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <RayIncrement>
!width=120px| content type
|width=40px| float
! description
|always the same (40)
|-
| <RayIncrement>
| float
| always the same (40)
|-
|-
| <RayMax>
| <RayMax>
Line 153: Line 161:


==<AutoFreezeConstants>==
==<AutoFreezeConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <DistanceXZ>
!width=120px| content type
|width=40px| float
! description
|-
| <DistanceXZ>
| float
| always the same (5)
| always the same (5)
|-
|-
Line 166: Line 177:


==<InventoryConstants>==
==<InventoryConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <HypoRegenerationRate>
!width=120px| content type
|width=40px| int16
! description
|-
|valign=top| <HypoRegenerationRate>
|valign=top| int16
| (inverse) hypo regeneration rate in frames per health point; overhealth regeneration rate is not affected by this
| (inverse) hypo regeneration rate in frames per health point; overhealth regeneration rate is not affected by this


Line 179: Line 193:


==<LODConstants>==
==<LODConstants>==
{|
Distances from camera to render certain [[XML:TRBS|LODs]] (level of detail).
{{table}}
{| class="wikitable" width="100%"
|width=200px| <Float>
!width=150px| XML tag
|width=40px| float
!width=120px| content type
! description
|-
| <Float>
| float
| always the same (193600); this is 440 squared
| always the same (193600); this is 440 squared
|-
|-
Line 204: Line 222:


==<HurtSoundConstants>==
==<HurtSoundConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <BasePercentage>
!width=120px| content type
|width=40px|int16
! description
|-
| <BasePercentage>
| int16
| hurt_base_percentage; always the same (35)
| hurt_base_percentage; always the same (35)
|-
|-
Line 273: Line 294:


==<AIConstants>==
==<AIConstants>==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <Flags>
!width=120px| content type
|width=40|flag
! description
|-
|valign=top| <Flags>
|valign=top| flag
|
|
: NoStartleAnim
: NoStartleAnim
Line 300: Line 324:
| number of frames after which AI realizes that it is in the firing spread and it starts dodging
| number of frames after which AI realizes that it is in the firing spread and it starts dodging
|-
|-
| <DodgeTimeScale>
|valign=top| <DodgeTimeScale>
| float
|valign=top| 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)
| 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)
|-
|-
Line 342: Line 366:
| <CombatId>
| <CombatId>
| int16
| int16
| [[OBD_talk:BINA/OBJC/CMBT|combat profile ID]]
| [[XML:BINA/OBJC/CMBT|combat profile ID]]
|-
|-
| <MeleeId>
| <MeleeId>
| int16
| int16
| [[OBD_talk:BINA/OBJC/MELE|melee profile ID]]
| [[XML:BINA/OBJC/MELE|melee profile ID]]
|-
|-
| <SoundConstants>
| <SoundConstants>
|
|
| see [[OBD_talk:SNDD#step_1:_preparing_the_TRAM|HERE]]
| see [[XML:SNDD#step_1:_preparing_the_TRAM|HERE]]
|-
|-
| <HostileThreatDefiniteTimer>
|valign=top| <HostileThreatDefiniteTimer>
| int32
|valign=top| 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)
| 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>
|valign=top| <HostileThreatStrongTimer>
| int32
|valign=top| 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
| 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>
|valign=top| <HostileThreatWeakTimer>
| int32
|valign=top| 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
| 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>
|valign=top| <FriendlyThreatDefiniteTimer>
| int32
|valign=top| 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)
| 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>
|valign=top| <FriendlyThreatStrongTimer>
| int32
|valign=top| 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  
| 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>
|valign=top| <FriendlyThreatWeakTimer>
| int32  
|valign=top| int32  
| how long will AI remain in weak feeling of ally, doing its usual job; can be checked by *ai2_report_verbose* command  
| how long will AI remain in weak feeling of ally, doing its usual job; can be checked by *ai2_report_verbose* command  
|-
|-
Line 383: Line 407:


===<Targeting>===
===<Targeting>===
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <StartleMissAngle>
!width=120px| content type
| width=40px| float
! description
|-
| <StartleMissAngle>
| float
| always the same for TURR and ONCC (0.5)
| always the same for TURR and ONCC (0.5)
|-
|-
Line 416: Line 443:


===<WeaponSkills>===
===<WeaponSkills>===
{|width=100%|
{|class="wikitable width=100%|
|valign=top|
|valign=top|


{{Table|width=""|align="left"}}
{| class="wikitable" style="text-align:center"
|-BGCOLOR="#E9E9E9" ALIGN=CENTER
|-BGCOLOR="#E9E9E9"  
!Weapon      ||recoil||bestangle||error||decay||inaccuracy||delays
!Weapon      ||recoil||bestangle||error||decay||inaccuracy||delays
|-ALIGN=CENTER     
|-ALIGN=CENTER     
Line 452: Line 479:
|valign=top|
|valign=top|


{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <RecoilCompensation>
!width=120px| content type
|width=40px| float
! description
| (float; 0.0 = min, 1.0 = max)
|-
| <RecoilCompensation>
| float
| min = 0.0, max = 1.0
|-       
|-       
| <BestAimingAngle>
| <BestAimingAngle>
Line 514: Line 544:




{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <CentralDistance>
!width=120px| content type
|width=40px| float
! description
|-
| <CentralDistance>
| float
| central vision distance
| central vision distance
|-
|-
Line 547: Line 580:


==ONCV, death particle, TRBS, TRMA, TRAC, TRAS, health, daodan, etc.==
==ONCV, death particle, TRBS, TRMA, TRAC, TRAS, health, daodan, etc.==
{|
{| class="wikitable" width="100%"
{{table}}
!width=150px| XML tag
|width=200px| <Variant>
!width=120px| content type
|width=40px|link
! description
|-
| <Variant>
| link
| <font color="#777777">ONCV</font>file<font color="#777777">.oni</font>, defines variants and upgrades  
| <font color="#777777">ONCV</font>file<font color="#777777">.oni</font>, defines variants and upgrades  
|-
|-
| <Particles>
| <Particles>
| link
| link
| [[#ONCP: character particle|ONCP]] instance number (#N)
| [[#ONCP: Oni Character Particle (Array)|ONCP]] instance number (#N)
|-
|-
| <Impacts>
| <Impacts>
| link
| link
| [[#ONIA: Oni character impact array|ONIA]] instance number (#N)
| [[#ONIA: Oni Character Impact Array|ONIA]] instance number (#N)
|-
|-
| <ImpactModifierName>
|valign=top| <ImpactModifierName>
| flag
|valign=top| flag
| used to choose correct effect from [[OBD_talk:BINA/ONIE#XML_flags|ONIE]]; impact name -> material name -> modifier (<Component> must be probably "Impact")
| used to choose correct effect from [[XML:BINA/ONIE#list_of_tags.2C_types.2C_and_flags|ONIE]]; impact name -> material name -> modifier (<Component> must be probably "Impact")
: Any
: Any
: Light
: Light
Line 571: Line 607:
| <Impacts>
| <Impacts>
| link
| link
| holds a lot <ONCCImpact><Name><font color="#777777">Impt</font>name<font color="#777777">.oni</font></Name></ONCCImpact> for character-environment collision; see [[OBD_talk:BINA/ONIE#Visual_guides:_weapon.2C_melee.2C_environment|... ONIE in relation to characters]]
| holds a lot <ONCCImpact><Name><font color="#777777">Impt</font>name<font color="#777777">.oni</font></Name></ONCCImpact> for character-environment collision; see [[XML:BINA/ONIE#Visual_guides:_weapon.2C_melee.2C_environment|... 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>
| <DeathParticle>
Line 587: Line 625:
| <BodyMaterials>
| <BodyMaterials>
| link
| link
| [[#CBPM: character body part materials|CBPM]] instance number (#N)
| [[#CBPM: Character Body Part Materials|CBPM]] instance number (#N)
|-
|-
| <BodyImpacts>
| <BodyImpacts>
| link
| link
| [[#CBPI: character body part impacts|CBPI]] instance number (#N)
| [[#CBPI: Character Body Part Impacts|CBPI]] instance number (#N)
|-
|-
| <FightModeTimer>
| <FightModeTimer>
| int32
| int32
| fight mode timer in 1/60 seconds
| 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.
:with chr_debug_characters = 1)
|-
|-
| <IdleAnimation1Timer>
| <IdleAnimation1Timer>
| int32
| int32
| first idle animation timer in 1/60 seconds
| 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
 
: chr_debug_characters = 1
|-
|-
| <IdleAnimation2Timer>
| <IdleAnimation2Timer>
| int32
| int32
| second idle animation timer in 1/60 seconds
| timer in X frames, resets IdleAnimation1Timer (it is basically the minumum pause between to Idle animations)
|-
|-
| <Health>
| <Health>
| int32
| int32
| basic health of the character model; extra health information for every unique character are stored in the [[OBD_talk:BINA/OBJC/CHAR#XML|BINACJBOCharacter.oni]] file
| basic health of the character model; extra health information for every unique character are stored in the [[XML:BINA/OBJC/CHAR#XML|BINACJBOCharacter.oni]] file. If playing on hard the character receives automatically a boost of 25% health by default (from [[OBD:ONGS|ONGS]], excluding player character).
|-
|-
| <FeetBones>
|valign=top| <FeetBones>
| flag
|valign=top| flag
|
|
: LeftFoot
: LeftFoot
Line 629: Line 673:
| <BossShieldProtectAmount>
| <BossShieldProtectAmount>
| float
| float
| BossShield Protect Amount
| 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>
| <Animations>
Line 647: Line 691:
| time between death and deletion, in frames (about 3 seconds for mad bomber)
| time between death and deletion, in frames (about 3 seconds for mad bomber)
|-
|-
| <WeaponHand>
|valign=top| <WeaponHand>
| flag
|valign=top| flag
|
|
: 0 (right)
: 0 (right)
Line 657: Line 701:
| when set to 1 indicates that character has daodan powers (character does more damage in overpower mode)
| when set to 1 indicates that character has daodan powers (character does more damage in overpower mode)
|-
|-
| <HasSupershield>
|valign=top| <HasSupershield>
| int8
|valign=top| int8
| when set to 1 indicates that character has supershield
| when set to 1 indicates that character has supershield
* is visible as red shield when overpowered
* is visible as red shield when overpowered
* 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
[[Image:XML_ONCC_daodan_super_shield.jpg|thumb|200px|super shield]]
|-
|-
| <CantTouchThis>
| <CantTouchThis>
Line 672: Line 717:


===<DamageFactors>===
===<DamageFactors>===
The following 7 float values corespond to damage types.
The following 7 float values correspond to damage types. These are ONCC specific multipliers for DamageTypes. See [[Particle damage types]] for details.
{|
 
{{table}}
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.
|width=200px| <Float>
 
|width=40px| float
These multipliers are applied as follows: actual applied StunDamage or Knocback = (PAR3 StunDamage or Knockback)*(1-ONCCvalue)
| somthing with normal damage ?
{| class="wikitable" width="100%"
!width=150px| XML tag
!width=120px| content type
! description
|-
| <Float>
| float
| "Normal" DamageType multiplier
|-
|-
| <Float>
| <Float>
| float
| float
| something with minor stun ?
| "MinorStun" DamageType multiplier
|-
|-
| <Float>
| <Float>
| 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)
| "MajorStun" DamageType multiplier
|-
|-
| <Float>
| <Float>
| float
| float
| something with minor knockdown ?
| "MinorKnockdown" DamageType multiplier
|-
|-
| <Float>
| <Float>
| float
| float
| something with major knockdown ?
| "MajorKnockdown" DamageType multiplier
|-
|-
| <Float>
| <Float>
| float
| float
| something with blownup ?
| "Blownup" DamageType multiplier
|-
|-
| <Float>
| <Float>
| float
| float
| something with pickup ?
| "Pickup" DamageType multiplier
|}
|}


 
==[[OBD:ONCP|ONCP]]: Oni Character Particle (Array)==
==[[OBD:ONCP|ONCP]]: Oni character particle array==
* ONCP is used for giving particle to animations. Search for "Particles" tag in TRAM file.
* ONCP is used for giving particle to animations. Search for "Particles" tag in TRAM file.


Line 729: Line 780:
:: daodan2 - Konoko's daodan blow (last level)
:: daodan2 - Konoko's daodan blow (last level)
:: '''death'''
:: '''death'''
:: '''dust'''
:: '''dust''' - Floor dust particle when player falls from heights
:: fireball - Mukade's devil star
:: fireball - Mukade's devil star
:: flash - attack impact flash
:: flash - attack impact flash
Line 745: Line 796:
:: super_r_hand - right hand daodan glow particle (<BodyPart>RightFist)
:: super_r_hand - right hand daodan glow particle (<BodyPart>RightFist)
: <Type> provide particle (file name without prefix BINA3RAP and without suffix .oni)
: <Type> provide particle (file name without prefix BINA3RAP and without suffix .oni)
: <BodyPart> means bone Id, see [[OBD:TRIA#Bones|TRIA]]; also allowed: "KillImpact"
: <BodyPart> means bone Id, see [[OBD:TRIA#Bones|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




==[[OBD:ONIA|ONIA]]: Oni character impact array==
==[[OBD:ONIA|ONIA]]: Oni Character Impact Array==
* ONIA is used for special attacks as kind of extension to [[#OBPI:_character_body_part_impacts|CBPI]] in ONIE.
* ONIA is used for special attacks as kind of extension to [[#CBPI:_Character_Body_Part_Impacts|CBPI]] in ONIE.
* <Name> is anchor for TRAM link, <Type> and <Modifier> are links for ONIE. "Light", "Medium" and "Heavy" are possible modifier.
* <Name> is anchor for TRAM link, <Type> and <Modifier> are links for ONIE. "Light", "Medium" and "Heavy" are possible modifier.
* See [[OBD_talk:BINA/ONIE#ONIE:_impact_effects|ONIE]] for more information.
* See [[XML:BINA/ONIE|ONIE]] for more information.




Line 766: Line 840:




==[[OBD_talk:ONCC#CBPM|CBPM]]: character body part materials==
==[[OBD:ONCC#CBPM|CBPM]]: Character Body Part Materials==
* CBPM link to [[OBD_talk:Mtrl#Mtrl:_materials|Mtrl]] files which are used by [[OBD_talk:BINA/ONIE#ONIE:_impact_effects|ONIE]].
* CBPM link to [[XML:Mtrl|Mtrl]] files which are used by [[XML:BINA/ONIE|ONIE]].




Line 799: Line 873:




==[[OBD:CBPI|CBPI]]: character body part impacts==
==[[OBD:CBPI|CBPI]]: Character Body Part Impacts==
* They link to [[OBD_talk:Impt#Impt:_impacts|Impt]] files which are used by [[OBD_talk:BINA/ONIE#ONIE:_impact_effects|ONIE]].
* They link to [[XML:Impt|Impt]] files which are used by [[XML:BINA/ONIE|ONIE]].
* Special attacks have there own Impt files. See [[#ONIA:_Oni_character_impact_array|ONIA]].
* Special attacks have there own Impt files. See [[#ONIA:_Oni_Character_Impact_Array|ONIA]].




'''XML structure'''
'''XML structure'''


The link Id is equal to bone list in [[OBD:TRIA#Bones|TRIA]]. For example: eleventh material links to character's head.
The link Id is equal to bone list in [[OBD:TRIA#Bones|TRIA]]. For example: eleventh impact links to character's head.
     <CBPI id="8">
     <CBPI id="8">
         <HitImpacts>
         <HitImpacts>
Line 873: Line 947:
     </CBPI>
     </CBPI>


=special ONCC overview=
==list of original ONCC==
"Here you can download the complete overview of all used different ONCC files as a text file.<BR>Copy it to a spreadsheet calculation program like Excel." - '''[[User_talk:Ssg|ssg]]'''
  barabus
*http://ssg.oni2.net/subfold/text/oni_oncc_dp.txt
  bdfem_1
*http://ssg.oni2.net/subfold/text/oni_oncc_dc.txt
  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)

Revision as of 16:08, 2 September 2020

ONCC : Oni Character Class
XML modding tips
  • See HERE to start learning about XML modding.
  • See HERE if you are searching for information on how to handle object coordinates.
  • See HERE for some typical modding errors and their causes.
XML.png
XML

OBAN << Other file types >> ONCV

switch to OBD page


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>
Loser's warehouse ninja that can follow player onto crates


<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)
if rate = 6; if a hypo restores 50HP then we get 6/1 * 50 = 300 frames (5s)
if rate = 0 it becomes rate = 1 at runtime, so regeneration will still take 50 frames (< 1s)


<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
NoStartleAnim
EnableMeleeFireDodge
ShootDodge (requires EnableMeleeFireDodge; AI tries to face shooter and shoot back while dodging)
RunAwayDodge (requires EnableMeleeFireDodge; overrides ShootDodge; firingspread/projectile dodge enabled for weapons; AI isn't shooting, it just tends to run away, not facing shooter)
NotUsed
<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>

Weapon recoil bestangle error decay inaccuracy delays
w0_sec 0.0 0.000000 0.00 1.0 1.0 0 - 0
w1_tap 0.0 0.000000 0.40 0.4 0.0 30 - 45
w2_sap 0.3 0.013962 0.13 1.0 1.0 0 - 0
w3_phr 0.3 0.010472 0.05 0.5 1.0 0 - 0
w4_psm 0.3 0.015707 0.03 0.2 1.0 0 - 0
w5_sbg 0.3 0.001745 0.00 0.1 1.0 0 - 0
w6_vdg 0.3 0.001745 0.13 0.9 1.0 0 - 0
w7_scc 0.3 0.001745 0.05 0.1 1.0 0 - 0
w8_mbo 0.3 0.005236 0.01 0.5 1.0 0 - 0
w9_scr 0.3 0.010472 0.04 0.5 1.0 0 - 0
w10_sni 0.0 0.000000 0.00 1.0 1.0 0 - 0
w11_ba1 0.0 0.000000 0.00 1.0 1.0 0 - 0
w12_ba2 0.0 0.000000 0.00 1.0 1.0 0 - 0
XML tag content type description
<RecoilCompensation> float min = 0.0, max = 1.0
<BestAimingAngle> float best aiming angle in radians
<ShotGroupError> float shot grouping error
<ShotGroupDecay> float shot grouping decay
<ShootingInaccuracyMultiplier> float shooting inaccuracy multiplier
<MinShotDelay> uint16 minimum delay between shots in frames
<MaxShotDelay> uint16 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...)


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

<VerticalRange>0.766044438</VerticalRange>
<CentralRange>0.819152057</CentralRange>
<CentralMax>0.57357645 </CentralMax>
<PeripheralRange>0.1736482</PeripheralRange>
<PeripheralMax>-0.42261824</PeripheralMax>
= 40°
= 35°
= 55°
= 80°
= 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.


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")
Any
Light
Medium
Heavy
<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.

with chr_debug_characters = 1)
<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

chr_debug_characters = 1
<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
LeftFoot
RightFoot
<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
0 (right)
1 (left)
<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
  • 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
<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

  • CBPM link to Mtrl files which are used by ONIE.


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)