XML:BINA/OBJC/CMBT: Difference between revisions

From OniGalore
< XML:BINA‎ | OBJC
Jump to navigation Jump to search
m (todo: pursuit distance + melee override)
m (using Image: consistently to make it easier to find all image refs on a page)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{XML_OBJC_Header | type=CMBT | prev=CONS | next=DOOR | name=Combat profiles }}
{{XML_OBJC_Header | prev=CHAR | type=CMBT | next=CONS | name=Combat}}


===general information===
===General information===
* The xml code on this page is compatible with onisplit v0.9.61.0
* The XML code on this page is compatible with OniSplit v0.9.61.0
* BINACJBOCombat.oni is '''global''' (It's stored in '''level0_'''...)
* BINACJBOCombat.oni is '''global''' (It's stored in '''level0_'''...)


 
===File structure===
===file structure===
  <?xml version="1.0" encoding="utf-8"?>
  <?xml version="1.0" encoding="utf-8"?>
  <Oni>
  <Oni>
Line 16: Line 15:
''[...]'' stands for a combat profile. You can add new profiles between the <Objects> </Objects> tags.
''[...]'' stands for a combat profile. You can add new profiles between the <Objects> </Objects> tags.


'''example: Id 0 (Stand_and_Fire)'''
'''example: ID 0 (Stand_and_Fire)'''
{|width=200px border=0 cellspacing=20 cellpadding=0 style="float:right"
|'''combat ranges'''


[http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XSI_modding/ai2_showcombatranges.png http://i305.photobucket.com/albums/nn207/unknownfuture/Oni_Galore_Images/XSI_modding/ai2_showcombatranges_tn.png]
[[Image:CombatRanges.png|thumb|ai2_showcombatranges = 1]]
|}


         <CMBT Id="368">
         <CMBT Id="368">
Line 62: Line 58:
         </CMBT>
         </CMBT>


 
===Tags===
===tags===
{| class="wikitable" width="100%"
{| class="wikitable" width="100%"
!width=150px| XML tag
!width=150px| XML tag
!width=120px| content type
!width=120px| Content type
! description
! Description
|-
|-
| <?xml version="1.0" encoding="utf-8"?>
| <?xml version="1.0" encoding="utf-8"?>
Line 109: Line 104:
| Name of the profile (making it easier to remember what the content does).
| Name of the profile (making it easier to remember what the content does).
|- style="background-color:#BBFFBB"
|- style="background-color:#BBFFBB"
| <CombatId>
|valign="top"| <CombatId>
| integer
|valign="top"| integer
| Used by CHAR and ONCC.
| Used by CHAR and ONCC.
: A table of combat IDs can be found '''[[OBD_talk:BINA/OBJC/CMBT|HERE]]'''.
|- style="background-color:#BBBBFF"
|- style="background-color:#BBBBFF"
| <Behaviors>
| <Behaviors>
Line 137: Line 133:
| <MediumRange>
| <MediumRange>
| flag
| flag
| the flags are identical with <LongRange>
| uses the same flags as <LongRange>
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <ShortRange>
| <ShortRange>
| flag
| flag
| the flags are identical with <LongRange>
| uses the same flags as <LongRange>
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <MediumRetreat>
| <MediumRetreat>
| flag
| flag
| the flags are identical with <LongRange>
| uses the same flags as <LongRange>
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <LongRetreat>
| <LongRetreat>
| flag
| flag
| the flags are identical with <LongRange>
| uses the same flags as <LongRange>
|- style="background-color:#BBBBFF"
|- style="background-color:#BBBBFF"
| <Combat>
| <Combat>
Line 157: Line 153:
| <MediumRange>
| <MediumRange>
| float
| float
| you can make it visible with the script command ai2_showcombatranges = 1
| you can show the combat ranges on-screen with the scripting command "ai2_showcombatranges = 1"
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
|valign="top"| <MeleeOverride>
|valign="top"| <MeleeOverride>
Line 178: Line 174:
| <ShortRange>
| <ShortRange>
| float
| float
| you can make it visible with the script command ai2_showcombatranges = 1
| you can show the combat ranges on-screen with the scripting command "ai2_showcombatranges = 1"
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <PursuitDistance>
| <PursuitDistance>
Line 190: Line 186:
| <Hurt>
| <Hurt>
| integer
| integer
| frame number (60 frames = 1 second)
| number of ticks to panic when hurt (60 ticks = 1 second)
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <GunFire>
| <GunFire>
| integer
| integer
| frame number
| number of ticks to panic when hearing gunfire
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <Melee>
| <Melee>
| integer
| integer
| frame number
| number of ticks to panic when melee occurs nearby
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <Sight>
| <Sight>
| integer
| integer
| frame number
| number of ticks to panic when seeing someone hostile
|- style="background-color:#BBBBFF"
|- style="background-color:#BBBBFF"
| <Alarm>
| <Alarm>
Line 210: Line 206:
| <SearchDistance>
| <SearchDistance>
| float
| float
| Area around AI, where engine checks if there is some [[XML:BINA/OBJC/CONS#tags|alarm console]].
| Maximum distance from AI that search is performed for an [[XML:BINA/OBJC/CONS#Tags|alarm console]].
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
| <EnemyIgnoreDistance>
| <EnemyIgnoreDistance>
| float
| float
| Enemies which are inside this range are not ignored but AI doesn't attack them.  
| Enemies which are inside this range are not ignored, but the AI doesn't attack them.  
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
|valign="top"| <EnemyAttackDistance>
|valign="top"| <EnemyAttackDistance>
|valign="top"| float
|valign="top"| float
| This one specifies an "attack range" around an AI running for an alarm. When there is an enemy inside, AI stops running for the console and attack the enemy (if AI knows about him, of course). Nevertheless AI still keeps in mind that it should run for the console. So when there is no enemy inside this range and fight timer runs out, AI resumes running to the specified console.
| This one specifies an "attack range" around an AI running for an alarm. When there is an enemy inside, the AI stops running for the console and attacks the enemy (if the AI knows about him, of course). Nevertheless the AI still keeps in mind that it should run for the console. So when there is no enemy inside this range and the fight timer runs out, the AI resumes running to the specified console.
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
|valign="top"| <DamageThreshold>
|valign="top"| <DamageThreshold>
|valign="top"| integer
|valign="top"| integer
| Specifies how long AI, which is running for the console, remembers someone hurt it. Until this timer runs away, AI doesn't tend to use console. It only stays in fight stance near console, ready to fight. If someone hurts AI which is running for the console, then escapes and then tries to hurt it again while this timer isn't finished yet, AI remembers him and imitatively attacks him the moment he steps inside '''<EnemyAttackDistance>'''.  
| Specifies how long the AI, which is running for the console, remembers someone hurt it. Until this timer runs out, the AI doesn't tend to use its desired console; it stays in fight stance near the console, ready to fight. If someone hurts the AI which is running for the console, then escapes and then tries to hurt it again while this timer isn't finished yet, the AI remembers him and immediately attacks him the moment he steps inside '''<EnemyAttackDistance>'''.  
|- style="background-color:#DDDDFF"
|- style="background-color:#DDDDFF"
|valign="top"| <FightTimer>
|valign="top"| <FightTimer>
|valign="top"| integer
|valign="top"| integer
|
|
When AI, which is running for the console, is engaged in a fight and enemy manages to disappear (either by phase-cloak or simply by hiding behind some corner), AI tries to chase him or looks for him. Alarm timer specifies how long should AI chase/look for the enemy. For chasing, timer starts when the enemy is outside '''<EnemyAttackDistance>'''. Of course when the enemy escapes even from '''<EnemyIgnoreDistance>''', AI abandons him automatically.  
When the AI, which is running for the console, is engaged in a fight and the enemy manages to disappear (either by phase cloak or simply by hiding), the AI tries to chase him or looks for him. FightTimer specifies how long should the AI chase/look for the enemy. For chasing, the timer starts when the enemy is outside '''<EnemyAttackDistance>'''. Of course when the enemy escapes even from '''<EnemyIgnoreDistance>''', the AI abandons him automatically.  
|}
|}


{{XML}}
{{XML}}

Latest revision as of 17:38, 21 February 2022

CMBT : Combat
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

AKEV << Other file types >> CONS

TMBD << Other BINA >> ONIE

CHAR << Other OBJC >> CONS

switch to OBD page

General information

  • The XML code on this page is compatible with OniSplit v0.9.61.0
  • BINACJBOCombat.oni is global (It's stored in level0_...)

File structure

<?xml version="1.0" encoding="utf-8"?>
<Oni>
   <Objects>
   [...]
   </Objects>
</Oni>

[...] stands for a combat profile. You can add new profiles between the <Objects> </Objects> tags.

example: ID 0 (Stand_and_Fire)

ai2_showcombatranges = 1
       <CMBT Id="368">
           <Header>
               <Flags></Flags>
               <Position>-223.332321 17.8324356 -116.511253</Position>
               <Rotation>0 0 0</Rotation>
           </Header>
           <OSD>
               <Name>Stand_and_Fire</Name>
               <CombatId>0</CombatId>
               <Behaviors>
                   <LongRange>HoldAndFire</LongRange>
                   <MediumRange>HoldAndFire</MediumRange>
                   <ShortRange>HoldAndFire</ShortRange>
                   <MediumRetreat>HoldAndFire</MediumRetreat>
                   <LongRetreat>HoldAndFire</LongRetreat>
               </Behaviors>
               <Combat>
                   <MediumRange>120</MediumRange>
                   <MeleeOverride>IfPunched</MeleeOverride>
                   <NoGunBehavior>Melee</NoGunBehavior>
                   <ShortRange>40</ShortRange>
                   <PursuitDistance>200</PursuitDistance>
               </Combat>
               <Panic>
                   <Hurt>600</Hurt>
                   <GunFire>900</GunFire>
                   <Melee>600</Melee>
                   <Sight>1200</Sight>
               </Panic>
               <Alarm>
                   <SearchDistance>300</SearchDistance>
                   <EnemyIgnoreDistance>80</EnemyIgnoreDistance>
                   <EnemyAttackDistance>0</EnemyAttackDistance>
                   <DamageThreshold>30</DamageThreshold>
                   <FightTimer>360</FightTimer>
               </Alarm>
           </OSD>
       </CMBT>

Tags

XML tag Content type Description
<?xml version="1.0" encoding="utf-8"?> float, flag Ignore this.
<Oni> -
<Objects> - Encloses the profiles, starting with <CMBT Id="..."> and ending with </CMBT>.
<CMBT Id="..."> integer Ignore this.
<Header> -
<Flags> flag Ignore this.
<Position> float x3 Ignore this.
<Rotation> float x3 Ignore this.
<OSD> -
<Name> char[64] Name of the profile (making it easier to remember what the content does).
<CombatId> integer Used by CHAR and ONCC.
A table of combat IDs can be found HERE.
<Behaviors> - Behavior at different ranges.
<LongRange> flag
None
Stare
HoldAndFire
FiringCharge
Melee
BarabasShoot
BarabasAdvance
BarabasMelee
SuperNinjaFireball
SuperNinjaAdvance
SuperNinjaMelee
RunForAlarm
MutantMuroMelee
MuroThunderbolt
<MediumRange> flag uses the same flags as <LongRange>
<ShortRange> flag uses the same flags as <LongRange>
<MediumRetreat> flag uses the same flags as <LongRange>
<LongRetreat> flag uses the same flags as <LongRange>
<Combat> -
<MediumRange> float you can show the combat ranges on-screen with the scripting command "ai2_showcombatranges = 1"
<MeleeOverride> flag
None
IfPunched
Cancelled
ShortRange
MediumRange
AlwaysMelee
<NoGunBehavior> flag
Melee
Retreat
RunForAlarm
<ShortRange> float you can show the combat ranges on-screen with the scripting command "ai2_showcombatranges = 1"
<PursuitDistance> float
<Panic> -
<Hurt> integer number of ticks to panic when hurt (60 ticks = 1 second)
<GunFire> integer number of ticks to panic when hearing gunfire
<Melee> integer number of ticks to panic when melee occurs nearby
<Sight> integer number of ticks to panic when seeing someone hostile
<Alarm> -
<SearchDistance> float Maximum distance from AI that search is performed for an alarm console.
<EnemyIgnoreDistance> float Enemies which are inside this range are not ignored, but the AI doesn't attack them.
<EnemyAttackDistance> float This one specifies an "attack range" around an AI running for an alarm. When there is an enemy inside, the AI stops running for the console and attacks the enemy (if the AI knows about him, of course). Nevertheless the AI still keeps in mind that it should run for the console. So when there is no enemy inside this range and the fight timer runs out, the AI resumes running to the specified console.
<DamageThreshold> integer Specifies how long the AI, which is running for the console, remembers someone hurt it. Until this timer runs out, the AI doesn't tend to use its desired console; it stays in fight stance near the console, ready to fight. If someone hurts the AI which is running for the console, then escapes and then tries to hurt it again while this timer isn't finished yet, the AI remembers him and immediately attacks him the moment he steps inside <EnemyAttackDistance>.
<FightTimer> integer

When the AI, which is running for the console, is engaged in a fight and the enemy manages to disappear (either by phase cloak or simply by hiding), the AI tries to chase him or looks for him. FightTimer specifies how long should the AI chase/look for the enemy. For chasing, the timer starts when the enemy is outside <EnemyAttackDistance>. Of course when the enemy escapes even from <EnemyIgnoreDistance>, the AI abandons him automatically.