XML:BINA/OBJC/CHAR: Difference between revisions

From OniGalore
< XML:BINA‎ | OBJC
Jump to navigation Jump to search
mNo edit summary
mNo edit summary
 
(28 intermediate revisions by 4 users not shown)
Line 1: Line 1:
{{XML_OBJC_Header | type=CHAR | prev=WEAP | next=CMBT | name=Character }}
{{XML_OBJC_Header | prev=WEAP | type=CHAR | next=CMBT | name=Character}}


{| border=0 cellspacing=20 cellpadding=0 style="margin-left:auto; margin-right:auto"
==General information==
| The xml code on this page is based on onisplit '''v0.9.61.0'''
* The XML code on this page is based on OniSplit '''v0.9.61.0'''
|}
* '''BINACJBOCharacter.oni''' is level specific (it can be found in AE/AEInstaller/vanilla/level'''X'''_Final.dat).
 
* An alternative method for creating characters is [[XML:AISA|AISA]].
 
* All original characters can be seen [http://ssg.oni2.net/subfold/charas/charas.htm HERE]. (The lists include the ONCC name, character's BSL name, health, team and attached BSL event function names.)
'''general information'''
* '''BINACJBOCharacter.oni''' is level specific. (It can be found in edition/GameDataFolder/level''XX''_... )
* An alternative is [[OBD:AISA|AISA]].
* All original characters can be seen [http://ssg.oni2.net/subfold/charas/charas.htm HERE.] (The lists include used ONCC, character's BSL name, health, team and BSL function.)
 
 
'''XML structure'''


==XML structure==
  <?xml version="1.0" encoding="utf-8"?>
  <?xml version="1.0" encoding="utf-8"?>
  <Oni>
  <Oni>
Line 100: Line 94:
{| class="wikitable" width="100%"
{| class="wikitable" width="100%"
!width=200px| XML tag
!width=200px| XML tag
!width=200px| content type
!width=200px| Content type
! description
! Description
|-
|-
|valign=top| <?xml version="1.0" encoding="utf-8"?>
|valign=top| <?xml version="1.0" encoding="utf-8"?>
Line 117: Line 111:
|valign=top| <CHAR Id="3860">
|valign=top| <CHAR Id="3860">
|valign=top| integer
|valign=top| integer
| Id doesn't matter.
| ID doesn't matter. --  For [[XML:ONLV|level import]] use <CHAR>.
|-
|-
| <Header>
| <Header>
Line 125: Line 119:
|valign=top| <Flags>
|valign=top| <Flags>
|valign=top| -
|valign=top| -
| unknown; usually empty
| obsolete
|-
|-
|valign=top| <Position>
|valign=top| <Position>
|valign=top| float x3
|valign=top| float x3
| character is spawned at this xyz-position
| character is spawned at this XYZ position
|-
|-
|valign=top| <Rotation>
|valign=top| <Rotation>
|valign=top| float x3
|valign=top| float x3
| character is spawned with this xyz-rotation, only y is useful
| character is spawned with this XYZ rotation; only Y (facing) is useful
|-
|-
|valign=top| <OSD>
|valign=top| <OSD>
Line 142: Line 136:
|valign=top| flag
|valign=top| flag
| determines some special properties
| determines some special properties
: IsPlayer (1) (if you have two of them then delete one and spawn the other one at same time, if not made simultaneously camera glitch can appear)
: IsPlayer (1) (if you have two of them, and delete one and then spawn the other, if not done simultaneously a camera glitch can appear)
: RandomCostume (2) (flag belongs to [[XML:ONCV|ONCV]])
: RandomCostume (2) (flag belongs to [[XML:ONCV|ONCV]]) Note: if a character has no alternate costumes, a random ONCC will be picked by the engine!
: NotInitiallyPresent (4)
: NotInitiallyPresent (4) (not spawned at level load; must be called from BSL)
: NonCombatant (8)
: NonCombatant (8) (character doesn't fight; character panics if enemy (team) is in range)
: CanSpawnMultiple (16) (needs WasSpawned)
: CanSpawnMultiple (16)
: WasSpawned (32) (...)
: Spawned (32) (unknown)
: Unkillable (64) (character won't loss more life points if it reaches 1, same as BSL command "chr_unkillable")
: Unkillable (64) (character won't lose more HP if it reaches 1; same as BSL command "chr_unkillable")
: InfiniteAmmo (128) (Raiden: "You got enough ?" Snake points to his head. "Infinite ammo...")
: InfiniteAmmo (128) (Raiden: "You got enough?" Snake points to his head. "Infinite ammo...")
: Omniscient (256) ('''?'''; tested ideas: doesn't unlock moves for player)
: Omniscient (256) (AI will not forget having seen an enemy, and will know enemy's position even if they are not visible to it)
: HasLSI (512) (this character drops an level specific item like truck keys in [[CHAPTER_14_._DAWN_OF_THE_CHRYSALIS|level 19]])
: HasLSI (512) (this character drops a [[LSI|level specific item]])
: Boss (1024) (used for boss mode fights. makes the AI ignore this character unless there is nobody else around)
: Boss (1024) (makes the AI prefer to attack the player; used for Muro in final battle if Griffin's group is present)
: UpgradeDifficulty (2048) (spawns a stronger enemy if you play on medium or hard)
: UpgradeDifficulty (2048) (spawns a stronger enemy if you play on Normal or Hard)
: NoAutoDrop (4096) (doesn't drop "used" shield, "used" invisibility and LSI when killed)
: NoAutoDrop (4096) (doesn't drop "used" shield, "used" invisibility and LSI when killed)


'''After onisplit v0.9.54.0, merged integer flags can appear.'''
'''After OniSplit v0.9.54.0, merged integer flags can appear.''' Let's say you encounter a 6180: then it's actually 4096 + 2048 + 32 + 4.
 
Let's say you encounter a 6180, then it's actually 4096 + 2048 + 32 + 4.
|-
|-
|valign=top| <Class>
|valign=top| <Class>
|valign=top| char[64]
|valign=top| char[64]
| ONCC file name without file pre- and suffix. Character can change appearance with "chr_set_class".
| ONCC file name without file prefix and suffix. Character can change appearance with "chr_set_class".
|-
|-
|valign=top| <Name>
|valign=top| <Name>
Line 170: Line 162:
|valign=top| <Weapon>
|valign=top| <Weapon>
|valign=top| char[64]
|valign=top| char[64]
| ONWC file name without file pre- and suffix. The character is spawned with that weapon.  
| ONWC file name without file prefix and suffix. The character is spawned with that weapon.  


Original weapon classes:
Original weapon classes:
Line 178: Line 170:
: w4_psm (phase stream projector)
: w4_psm (phase stream projector)
: w5_sbg (super ball gun)
: w5_sbg (super ball gun)
: w6_vdg (shocker)
: w6_vdg (van de graaff pistol)
: w7_scc (scram cannon (mini-rockets))
: w7_scc (scram cannon (mini-rockets))
: w8_mbo (mercury bow)
: w8_mbo (mercury bow)
: w9_scr (screamer gun)
: w9_scr (screamer gun)
: w10_sni (Mukade's firework)
: w10_sni (Mukade's fireball)
: w11_ba1 (Barabas' gun)
: w11_ba1 (Barabas' gun)
: w12_ba2 (-)
: w12_ba2 (-)
Line 200: Line 192:
|valign=top| <AdditionalHealth>
|valign=top| <AdditionalHealth>
|valign=top| integer
|valign=top| integer
| ''main'' health is stored in ONCC, "additional health" will be added to that ''main'' health; also negative value possible here (which would then reduce main health)
| ''Base'' health is stored in ONCC; AdditionalHealth will be added to that base health; a negative value is allowed here, which would reduce base health
|-
|-
|valign=top| <Job>
|valign=top| <Job>
Line 213: Line 205:
: <font color="#777">Guard (never used in Oni)</font>
: <font color="#777">Guard (never used in Oni)</font>
: Patrol
: Patrol
: <font color="#777">Teambattle (never used in Oni)</font>
: <font color="#777">Team Battle (never used in Oni)</font>
: Combat (not tested)
: Combat (not tested)
: Melee (not tested)
: Melee (not tested)
Line 222: Line 214:
|valign=top| [[XML:BINA/OBJC/PATR|<PatrolPathId>]]
|valign=top| [[XML:BINA/OBJC/PATR|<PatrolPathId>]]
|valign=top| integer
|valign=top| integer
|
| Use '''''<Type>None''''' if you don't want a character to have a patrol path; otherwise the character won't fight.
|-
|-
|valign=top| <Behaviors>
|valign=top| <Behaviors>
Line 254: Line 246:
|valign=top| <MeleeId>
|valign=top| <MeleeId>
|valign=top| flag
|valign=top| flag
| [[OBD:BINA/OBJC/MELE#All_profiles_sorted_by_ID|here are all melee IDs sorted by ID]]
| [[XML:BINA/OBJC/MELE#Melee_IDs|here are all melee IDs sorted by ID]]
|-
|-
|valign=top| <NeutralId>
|valign=top| <NeutralId>
|valign=top| flag
|valign=top| flag
|[[OBD:BINA/OBJC/NEUT|...]] (no overview so far)
|[[XML:BINA/OBJC/NEUT|these profiles are level-specific]]
|-
|-
|valign=top| <Inventory>
|valign=top| <Inventory>
Line 267: Line 259:
|valign=top| integer
|valign=top| integer
|
|
: <Use> (Player becomes spawned with ammo clips, here you set the amount.)
: <Use> (Player is spawned with this many ammo clips.)
: <Drop> (AI drop these items when defeated.)
: <Drop> (AI drops these items when defeated.)
|-
|-
|valign=top| <EnergyCell>
|valign=top| <EnergyCell>
Line 279: Line 271:
|valign=top| integer
|valign=top| integer
|  
|  
: <Use>
: <Use> (AI cannot use hypos.)
: <Drop> (AI cannot use hypos.)
: <Drop>
|-
|-
|valign=top| <Shield>
|valign=top| <Shield>
Line 297: Line 289:
|valign=top| flag
|valign=top| flag
|
|
'''Characters of the same team''' can be made to ''attack'' each other via ai2_attack aiNameAttacker aiNameDefender 1 although melee damage is only dealt when team flags of both characters create a '''[[OBD_talk:BINA/OBJC/CHAR#Teams|hostile match]]'''.
: Konoko
: Konoko
: TCTF
: TCTF
Line 303: Line 296:
: SecurityGuard
: SecurityGuard
: RogueKonoko
: RogueKonoko
: Switzlerland (is melee-immune)
: Switzerland (is melee-immune)
: SyndicateAccessory
: SyndicateAccessory
|-
|-
Line 312: Line 305:
|valign=top| <Alert>
|valign=top| <Alert>
|valign=top| -
|valign=top| -
| [[Tricks_behind_Oni_A.I.|HERE]] you get some helpful information on how to use "Alert" and "Pursuit".
| [[AI|HERE]] you get some helpful information on how to use "Alert" and "Pursuit".
: Lull
: Lull
: Low
: Low
Line 337: Line 330:
|valign=top| <AlarmGroups>
|valign=top| <AlarmGroups>
|valign=top| integer
|valign=top| integer
|It's a bitset32 converted to int32. If Ns bit = TRUE then a bot gets highest alert level by a console command ai2_tripalarm(N)
|It's a bitset32 converted to int32. For any bit ("N") that is 1, the scripting command "ai2_tripalarm N" is called, alerting the AI with that scripting ID
: <AlarmGroups>VAR</AlarmGroups>
: <AlarmGroups>VAR</AlarmGroups>
:: VAR = 2^N1 + 2^N2 + 2^N3 etc.
:: VAR = 2^N1 + 2^N2 + 2^N3 etc.
Line 376: Line 369:
: FindAlarm
: FindAlarm
|}
|}
{{XML}}

Latest revision as of 17:07, 2 November 2023

CHAR : Character
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

WEAP << Other OBJC >> CMBT

switch to OBD page

General information

  • The XML code on this page is based on OniSplit v0.9.61.0
  • BINACJBOCharacter.oni is level specific (it can be found in AE/AEInstaller/vanilla/levelX_Final.dat).
  • An alternative method for creating characters is AISA.
  • All original characters can be seen HERE. (The lists include the ONCC name, character's BSL name, health, team and attached BSL event function names.)

XML structure

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

[...] means at least one character. Paste all character data into there (this includes <CHAR Id="..."> and </CHAR> tag).

example

       <CHAR Id="3860">
           <Header>
               <Flags></Flags>
               <Position>-543.22 159 -630.0954</Position>
               <Rotation>0 180 0</Rotation>
           </Header>
           <OSD>
               <Flags>NotInitiallyPresent</Flags>
               <Class>konoko_generic</Class>
               <Name>konoko</Name>
               <Weapon>w1_tap</Weapon>
               <Scripts>
                   <Spawn></Spawn>
                   <Die>you_lose</Die>
                   <Combat></Combat>
                   <Alarm></Alarm>
                   <Hurt></Hurt>
                   <Defeated></Defeated>
                   <OutOfAmmo></OutOfAmmo>
                   <NoPath></NoPath>
               </Scripts>
               <AdditionalHealth>0</AdditionalHealth>
               <Job>
                   <Type>None</Type>
                   <PatrolPathId>0</PatrolPathId>
               </Job>
               <Behaviors>
                   <CombatId>0</CombatId>
                   <MeleeId>0</MeleeId>
                   <NeutralId>0</NeutralId>
               </Behaviors>
               <Inventory>
                   <Ammo>
                       <Use>3</Use>
                       <Drop>0</Drop>
                   </Ammo>
                   <EnergyCell>
                       <Use>0</Use>
                       <Drop>0</Drop>
                   </EnergyCell>
                   <Hypo>
                       <Use>0</Use>
                       <Drop>0</Drop>
                   </Hypo>
                   <Shield>
                       <Use>0</Use>
                       <Drop>0</Drop>
                   </Shield>
                   <Invisibility>
                       <Use>0</Use>
                       <Drop>0</Drop>
                   </Invisibility>
               </Inventory>
               <Team>Konoko</Team>
               <AmmoPercentage>100</AmmoPercentage>
               <Alert>
                   <Initial>Lull</Initial>
                   <Minimal>Lull</Minimal>
                   <JobStart>Low</JobStart>
                   <Investigate>Medium</Investigate>
               </Alert>
               <AlarmGroups>0</AlarmGroups>
               <Pursuit>
                   <StrongUnseen>Look</StrongUnseen>
                   <WeakUnseen>Forget</WeakUnseen>
                   <StrongSeen>Look</StrongSeen>
                   <WeakSeen>Look</WeakSeen>
                   <Lost>ReturnToJob</Lost>
               </Pursuit>
           </OSD>
       </CHAR>


XML tag Content type Description
<?xml version="1.0" encoding="utf-8"?> float, flag There's no reason to change this.
<Oni> -
<Objects> -
<CHAR Id="3860"> integer ID doesn't matter. -- For level import use <CHAR>.
<Header> -
<Flags> - obsolete
<Position> float x3 character is spawned at this XYZ position
<Rotation> float x3 character is spawned with this XYZ rotation; only Y (facing) is useful
<OSD> -
<Flags> flag determines some special properties
IsPlayer (1) (if you have two of them, and delete one and then spawn the other, if not done simultaneously a camera glitch can appear)
RandomCostume (2) (flag belongs to ONCV) Note: if a character has no alternate costumes, a random ONCC will be picked by the engine!
NotInitiallyPresent (4) (not spawned at level load; must be called from BSL)
NonCombatant (8) (character doesn't fight; character panics if enemy (team) is in range)
CanSpawnMultiple (16)
Spawned (32) (unknown)
Unkillable (64) (character won't lose more HP if it reaches 1; same as BSL command "chr_unkillable")
InfiniteAmmo (128) (Raiden: "You got enough?" Snake points to his head. "Infinite ammo...")
Omniscient (256) (AI will not forget having seen an enemy, and will know enemy's position even if they are not visible to it)
HasLSI (512) (this character drops a level specific item)
Boss (1024) (makes the AI prefer to attack the player; used for Muro in final battle if Griffin's group is present)
UpgradeDifficulty (2048) (spawns a stronger enemy if you play on Normal or Hard)
NoAutoDrop (4096) (doesn't drop "used" shield, "used" invisibility and LSI when killed)

After OniSplit v0.9.54.0, merged integer flags can appear. Let's say you encounter a 6180: then it's actually 4096 + 2048 + 32 + 4.

<Class> char[64] ONCC file name without file prefix and suffix. Character can change appearance with "chr_set_class".
<Name> char[32] used by BSL commands
<Weapon> char[64] ONWC file name without file prefix and suffix. The character is spawned with that weapon.

Original weapon classes:

w1_tap (TCTF pistol)
w2_sap (Syndicate uzi)
w3_phr (plasma rifle)
w4_psm (phase stream projector)
w5_sbg (super ball gun)
w6_vdg (van de graaff pistol)
w7_scc (scram cannon (mini-rockets))
w8_mbo (mercury bow)
w9_scr (screamer gun)
w10_sni (Mukade's fireball)
w11_ba1 (Barabas' gun)
w12_ba2 (-)
<Scripts> string BSL function
<Spawn> (called when character is spawned)
<Die> (called when character dies (health reaches 0); can work multiple times)
<Combat> (called when character notices an enemy; works only once)
<Alarm> (called when character is alarmed)
<Hurt> (called when character is hurt for the first time; works only once)
<Defeated> (called when character is "defeated" (health reaches 1); works only once)
<OutOfAmmo> (called when character runs out of ammo (reloads a weapon with the last clip/cell); works only once, and the character must have the ammo at spawn-time)
<NoPath> (should be called when a character has trouble pathfinding, but isn't)
<AdditionalHealth> integer Base health is stored in ONCC; AdditionalHealth will be added to that base health; a negative value is allowed here, which would reduce base health
<Job> -
<Type> flag
None
Idle
Guard (never used in Oni)
Patrol
Team Battle (never used in Oni)
Combat (not tested)
Melee (not tested)
Alarm (not tested)
Neutral (not tested)
Panic (not tested)
<PatrolPathId> integer Use <Type>None if you don't want a character to have a patrol path; otherwise the character won't fight.
<Behaviors> - specified by IDs linking to melee, combat and neutral profile collection file
<CombatId> flag
0 (Stand_and_Fire)
1 (Murder)
2 (Shoot_And_Fight)
3 (Take_my_Big_Black_Stuff)
4 (Assault)
5 (Civilian)
6 (Pursuit)
7 (Group_battle)
8 (Watchman)
9 (Barabbas_TCTF)
10 (COMGUY)
11 (SuperNinja)
12 (Griffin)
13 (Mutant_Muro)
14 (Alarm Guard)
15 (Non-Combatant)
16 (Griffin_Final)
207 (Sniper)
208 (Sniper For Joe)
17 (Average_striker; new profile for AE)
<MeleeId> flag here are all melee IDs sorted by ID
<NeutralId> flag these profiles are level-specific
<Inventory> -
<Ammo> integer
<Use> (Player is spawned with this many ammo clips.)
<Drop> (AI drops these items when defeated.)
<EnergyCell> integer
<Use>
<Drop>
<Hypo> integer
<Use> (AI cannot use hypos.)
<Drop>
<Shield> integer
<Use>
<Drop>
<Invisibility> integer
<Use>
<Drop>
<Team> flag

Characters of the same team can be made to attack each other via ai2_attack aiNameAttacker aiNameDefender 1 although melee damage is only dealt when team flags of both characters create a hostile match.

Konoko
TCTF
Syndicate
Neutral
SecurityGuard
RogueKonoko
Switzerland (is melee-immune)
SyndicateAccessory
<AmmoPercentage> integer ammo in weapon, percent value: 0 - 100, overload not tested
<Alert> - HERE you get some helpful information on how to use "Alert" and "Pursuit".
Lull
Low
Medium
High
Combat
<Initial> flag initial alert level, see <Alert> for all flags
<Minimal> flag minimal alert level, see <Alert> for all flags
<JobStarting> flag alert level when starting a job, see <Alert> for all flags
<Investigating> flag alert level when investigating, see <Alert> for all flags
<AlarmGroups> integer It's a bitset32 converted to int32. For any bit ("N") that is 1, the scripting command "ai2_tripalarm N" is called, alerting the AI with that scripting ID
<AlarmGroups>VAR</AlarmGroups>
VAR = 2^N1 + 2^N2 + 2^N3 etc.
<Pursuit> -
None
Forget
GoTo
Wait
Look
Move
Hunt
Glanc
<StrongUnseen> flag usually Look, see <Pursuit> for all flags
<WeakUnseen> flag usually Forget, see <Pursuit> for all flags
<StrongSeen> flag usually Look, see <Pursuit> for all flags
<WeakSeen> flag usually Look, see <Pursuit> for all flags
<Lost> flag usually ReturnToJob
ReturnToJob
KeepLooking
FindAlarm