XML:BINA/OBJC/NEUT

From OniGalore
< XML:BINA‎ | OBJC
Revision as of 20:22, 22 January 2017 by Iritscen (talk | contribs) (sufficient mouse movement also interrupts conversations)
Jump to navigation Jump to search
NEUT : Neutral behavior list
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

MELE << Other OBJC >> PART

switch to OBD page


general information

  • The xml code on this page is based on onisplit v0.9.61.0
  • BINACJBONeutral.oni is level specific. (It can be found in AE/AEInstaller/vanilla/levelX_Final.dat)
  • Press control to talk with a character (if possible). The interaction depends on what id that character has.


file structure

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

[...] means at least one neutral behavior block. Paste all a behavior data into there (this includes <NEUT Id="..."> and </NEUT> tag).

example

       <NEUT Id="1853">
           <Header>
               <Flags></Flags>
               <Position>146.41217 -48.8205528 1027.55249</Position>
               <Rotation>0 0 0</Rotation>
           </Header>
           <OSD>
               <Name>Give VDG Pistol (CivFem)</Name>
               <NeutralId>2</NeutralId>
               <Flags>NoResumeAfterGive</Flags>
               <Ranges>
                   <Trigger>100</Trigger>
                   <Talk>40</Talk>
                   <Follow>200</Follow>
                   <Enemy>70</Enemy>
               </Ranges>
               <Speech>
                   <Trigger>civfem_trigger</Trigger>
                   <Abort>civfem_abort</Abort>
                   <Enemy>civfem_enemy</Enemy>
               </Speech>
               <Script>
                   <AfterTalk></AfterTalk>
               </Script>
               <Rewards>
                   <WeaponClass>w6_vdg</WeaponClass>
                   <Ammo>0</Ammo>
                   <EnergyCell>0</EnergyCell>
                   <Hypo>0</Hypo>
                   <Other></Other>
               </Rewards>
               <DialogLines>
                   <DialogLine>
                       <Flags></Flags>
                       <Anim>0</Anim>
                       <OtherAnim>0</OtherAnim>
                       <SpeechName>civfem_gift_weapon</SpeechName>
                   </DialogLine>
                   <DialogLine>
                       <Flags>GiveItems</Flags>
                       <Anim>202</Anim>
                       <OtherAnim>0</OtherAnim>
                       <SpeechName></SpeechName>
                   </DialogLine>
               </DialogLines>
           </OSD>
       </NEUT>


tags

XML tag content type description
<?xml version="1.0" encoding="utf-8"?> flag, float Don't change this.
<Oni> -
<ObjectCollection> -
<NEUT Id="1853"> integer Id doesn't matter here.
<Header> -
<Flags> flag
  • None
  • Locked
  • PlacedInGame
  • Temporary
  • Gunk
<Position> float x3 x y z position, useless here
<Rotation> float x3 x y z rotation, useless here
<OSD> -
<Name> char[32] A name of the NEUT profile. Used by a BSL command ai2_neutralbehavior
<NeutralId> integer used by BINA/OBJC/CHAR and BINA/CJBO/MELE
<Flags> flag
  • None - no flags utilized
  • NoResume - if the conversation is interrupted, NEUT behavior terminates. Conversation cannot be reinitaitated.
  • NoResumeAfterGive - interrupted conversation can be reinitiated, but only if so far no executed dialog line had the flag "GiveItems", otherwise NEUT behavior terminates.
    Also, if some dialog line is interrupted AFTER the dialog line with "GiveItems" flag, then the sound file of the interrupted dialog line is fully played (is not stopped by the conversation interruption). Maybe a bug?
  • Uninterruptible - probably should disable player's option to interrupt the conversation by some offensive action (punch, kick), but tests are negative. Maybe defunct?
<Ranges> -
<Trigger> float A distance between the AI2 character and the player character when the NEUT behavior mechanics kick in.

Outside of this distance, NEUT behavior of the given AI2 character does not execute.

<Talk> float

A threshold distance for approaching the player character:

  • If "distance to player" > "Talk range" then NEUT driven AI2 character keeps approaching the player character.
  • If "distance to player" =< "Talk range" then NEUT driven AI2 character stands still, attempts to rotate in order to keep looking at the player character and keeps repeating the TRAM animType=230 (0xE6, Hail) + Speech "Trigger" (see tag below) in a 5 second interval.
  • If "distance to player" =< "Talk range" AND also "distance to player" =< 35 game world units (empiric obesrvation), then the conversation can be triggered by facing the NEUT driven AI2 character and pressing the action key.
<Follow> float

An allowed "travel distance" for the NEUT driven AI2 character, starting from the moment player entered the Trigger range.
NEUT driven AI2 character is allowed to translocate only this specified distance from its pre-trigger location before it gives up on chasing the player character.
When Follow distance is depleted, NEUT behavior for given AI2 character is terminated and control over AI2 character is handed to some other AI2 system (for example the Patrol Path system).
Of course if the player character again enters the Trigger range, then NEUT mechanics kick in again (with fresh Follow distance to deplete).

<Enemy> float

A range in which NEUT driven AI2 character will react on present enemies, even those which are behind its back. Who is considered "enemy" is defined according to Oni team affiliations.

  • If some enemy is present within the Enemy range prior to the conversation, then conversation cannot be triggered till the enemy is either outside of Enemy range or neutralized.
  • If some enemy gets inside the Enemy range while the conversation is running, then the conversation is stopped and the Speech Enemy (see tag below) is played.

The further reaction of the NEUT driven AI2 character on enemy differs acording to CHAR setup - it can start cowering in fear (NonCombatant flag is set) or go attack the enemy (default setup).

<Speech> -
<Trigger> char[32] Speech sound for hailing the player.

If "distance to player" =< "Talk range" then NEUT driven AI2 character stands still, attempts to rotate in order to keep looking at the player character and keeps repeating the TRAM animType=230 (0xE6, Hail) + this Speech "Trigger" in a 5 second interval.
OSBDfile.amb.oni (without file pre-/suffix) examples of such OSBD amb files:

civfem_trigger
hey_konoko
civmale1_trigger
civmale2_trigger
civmale3_trigger
<Abort> char[32] Speech sound for when player interrupts the conversation.

This sound is played when the player aborts the conversation by performing some offensive action such as a punch/kick or breaking away in the middle of the conversation by moving the mouse at a speed greater than the "conversation lock-on" threshold.
OSBDfile.amb.oni (without file pre-/suffix) examples of such OSBD amb files:

civfem_abort
see_you_later
civmale1_abort
civmale2_abort
civmale3_abort
<Enemy> char[32] Speech sound for conversation interruption because of some enemy is present within the Enemy range.

This sound is played if some enemy gets inside the Enemy range in the middle of the conversation.
OSBDfile.amb.oni (without file pre-/suffix) examples of such OSBD amb files:

civfem_enemy
what_the
civmale1_enemy
civmale2_enemy
civmale3_enemy
<Script> -
<AfterTalk> char[32] A name of a BSL function. The function will will be executed after the conversation is finished.

The function in BSL has an optional parameter (string type) - name of the NEUT driven AI2 character.

<Rewards> - You can get rewards for saving people. A reward can be a weapon, ammo, cells, hypos, shield, phase cloak, and LSI.
<WeaponClass> char[32] Any weapon, filename without prefix ONWC and suffix .oni; for example "w6_vdg"
<Ammo> integer Number of ammo clips.
<EnergyCell> integer Number of energy cells.
<Hypo> integer Number of hypo sprays.
<Other> flag Combinations of flags are possible. Flags:
  • Shield
  • Invisibility
  • LSI
<DialogLines> -
<DialogLine> - There can be multiple dialog lines.
<Flags> flag Combinations of flags are possible. Flags:
  • None - no special flags.
  • IsPlayer - reverses roles of Anim and OtherAnim - now Anim is applied on the player character and OtherAnim is applied on the NEUT driven AI2 character.
  • GiveItems - will make conversation participants play respective give and take animations AND will add item(s) to the player character's inventory. This exchange cannot be interrupted by player's input.
  • AnimOnce - NEUT driven AI2 character will play its prescribed animType only once during the dialog line.
  • OtherAnimOnce - player character will play its prescribed animType only once during the dialog line.
<Anim> integer AnimType ID of the TRAM applied on NEUT driven AI2 character during this dialog line.
Any TRAM which has animState="Standing" and is present in a NEUT driven AI2 character's TRAC should be valid.
0 (None)
200 (Act_No)
201 (Act_Yes)
202 (Act_Talk)
203 (Act_Shrug)
204 (Act_Shout)
<OtherAnim> integer AnimType ID of the TRAM applied on the player character during this dialog line.
Any TRAM which has animState="Standing" and is present in the player character's TRAC should be valid.
<SpeechName> char[32] The actual sound played during the dialog line. Length of this sound file defines length of the dialog line.

OSBDfile.amb.oni (without file pre-/suffix) for example:

talking
civfem_gift_weapon
civfem_gift_hypo
civfem_gift_force_field
civmale1_gift_weaponS
civmale2_gift_weapon
civmale1_gift_ammo
civmale2_gift_ammo
civmale3_gift_ammo
civmale1_gift_hypoS
civmale2_gift_hypo
civmale3_gift_hypo
civmale1_gift_force_field
civmale2_gift_force_field
civmale3_gift_force_field
c03_12_06civ1
c03_12_07civ1
c03_12_08tctffag1
c03_12_09tctffag2