XML:BINA/OBJC/PATR: Difference between revisions

From OniGalore
< XML:BINA‎ | OBJC
m (Iritscen moved page OBD talk:BINA/OBJC/PATR to XML:BINA/OBJC/PATR without leaving a redirect)
m (copy-edit)
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
=[[OBD:BINA/OBJC/PATR|BINA/OBCJ/PATR]]: patrol paths=
{{XML_OBJC_Header | prev=PART | type=PATR | next=PWRU | name=Patrol Path}}


{{Template:XMLModdingHints}}
==General information==
{| border=0 cellspacing=20 cellpadding=0 align=center
* The XML 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'''
* "BINACJBOPatrol Path" is level-specific (level''x''_Final.dat).
|}
* A path can have at most 64 points.
 
;Corrupting BSL code in patrol scripts
:I ([[User:Paradox-01|Paradox]]) suspect that ''instantly'' played BSL code breaks patrol paths. Example: patrolscript0001 contains a sleep command and patrolscript0002 will be played. If you remove the sleep command, the patrol path will break. (This was tested in level 1 SP1 with A_t48 and his patrol_48.)
 
XML code - patrolscript points:


'''general information'''
<Points>
* '''BINACJBOPatrol Path.oni''' is level specific. (It can be found in edition/GameDataFolder/level''XX''_... )
    <ScriptId ScriptId="1" />
    <ScriptId ScriptId="2" />
    <ScriptId ScriptId="3" />
</Points>


BSL code:
func patrolscript0001
{
dmsg "1"
chr_animate 0 KONOKOpowerup
sleep 1
}
func patrolscript0002
{
dmsg "2"
}
func patrolscript0003
{
dmsg "3"
}


'''BSL support'''
==BSL support==
* <font color="#777777">ai2_showpaths = 1</font>
* <font color="#777777">ai2_showpaths = 1</font>
* ai2_dopath ''ai_name path_name''
* ai2_dopath ''ai_name path_name''


 
==File structure==
'''XML structure'''
 
  <?xml version="1.0" encoding="utf-8"?>
  <?xml version="1.0" encoding="utf-8"?>
  <Oni>
  <Oni>
Line 24: Line 45:
  </Oni>
  </Oni>


'''''[...]''''' means at least one patrol block. Paste all a patrol data into there (this includes <PATR Id="..."> and </PATR> tag).
'''''[...]''''' means at least one patrol block. Paste all your patrol data in there (this includes the <PATR Id="..."> and </PATR> tag).


 
'''Example'''
'''example'''


         <PATR Id="8283">
         <PATR Id="8283">
Line 57: Line 77:




* table content compatible with onisplit 0.9.61.0
{| class="wikitable" width="100%"
* if an update is needed extract '''[http://paradox.oni2.net/OniGalore/BINACJBOPatrol%20Path.oni this]''' file
!width=400px| XML tag
 
!width=100px| Content type
{{Table}}
! Description
!XML tag
!flags / values
!description
|-
|-
|<PATR Id="...">
| <PATR Id="...">
|positive integer
| integer
|actually the Id doesn't matter in collections
| ID doesn't matter
|-
|-
|<Flags>
| <Flags>
|
| flag
|should be unimportant
| Unknown
|-
|-
|<Position>
| <Position>
|
| float x3
|should be unimportant
| XYZ position, unused
|-
|-
|<Rotation>
| <Rotation>
|
| float x3
|should be unimportant
| XYZ rotation, unused
|-
|-
|<Name>
| <Name>
|string
| string
|for BSL command "ai2_dopath"
| Used by BSL command "ai2_dopath"
|-
|-
|<PatrolId>
| <PatrolId>
|positive integer
| integer
|used in [[OBD:BINA/OBJC/CHAR|BINA/OBJC/CHAR]]
| Used in [[XML:BINA/OBJC/CHAR|BINA/OBJC/CHAR]]
|-
|-
|valign=top|<ReturnToNearest>
|valign=top| <ReturnToNearest>
|
|valign=top| flag
:1
|
:0
: 1 (Yes)
|valign=top|1 = Yes; 0 = No
: 0 (No)
|-
|-
|<Points>
| <Points>
|
| -
|holds actual patrol content
| Holds the actual path data (up to 64 points).
|-
|-
|<MoveToFlag FlagId="..." />
| <MoveToFlag FlagId="..." />
|positive integer
| integer
|
|
|-
|-
|<Stop />
| <Stop />
|
| -
|
|
|-
|-
|<Pause Frames="..." />
| <Pause Frames="..." />
|positive integer
| integer
|
|
|-
|-
|<LookAtFlag FlagId="..." />
| <LookAtFlag FlagId="..." />
|positive integer
| integer
|
|
|-
|-
|<LookAtPoint X="..." Y="..." Z="..." />
| <LookAtPoint X="..." Y="..." Z="..." />
|integer
| float x3
|
|
|-
|-
|<MoveAndFaceFlag FlagId="..." />
| <MoveAndFaceFlag FlagId="..." />
|positive integer
| integer
|
|
|-
|-
|<Loop>...</Loop>
| <Loop>...</Loop>
|
|
|Patrol path tags can be enclosed by that loop tag.
| Patrol path tags can be enclosed by this loop tag.
|-
|-
|valign=top|<MovementMode Mode="..." />
|valign=top| <MovementMode Mode="..." />
|
|valign=top| flag
:ByAlertLevel
:Stop
:Crouch
:Creep
:WalkNoAim
:Walk
:RunNoAim
:Run
|
|
: ByAlertLevel
: Stop
: Crouch
: Creep
: WalkNoAim
: Walk
: RunNoAim
: Run
|-
|-
|<MoveToPoint X="..." Y="..." Z="..." />
| <MoveToPoint X="..." Y="..." Z="..." />
|integer
| float x3
|
|  
|-
|-
|valign=top|<LockFacing Facing="..." />
|valign=top| <LockFacing Facing="..." />
|
|valign=top| flag
:Forward
:Backward
:Left
:Right
:Stopped
|
|
: Forward
: Backward
: Left
: Right
: Stopped
|-
|-
|<MoveThroughFlag FlagId="..." Distance="..." />
| <MoveThroughFlag FlagId="..." Distance="..." />
|positive integer
| integer, float
|
|
|-
|-
|valign=top|<MoveThroughPoint X="..." Y="..." Z="..." Distance="..." />
|valign=top| <MoveThroughPoint X="..." Y="..." Z="..." Distance="..." />
|X, Y, Z = positive integer; Distance = integer
| float x4
|
|
|-
|-
|<StopLooking />
| <StopLooking />
|
| -
|
|
|-
|-
|<FreeFacing />
| <FreeFacing />
|
| -
|
|
|-
|-
|<GlanceAtFlagFor FlagId="..." Frames="..." />
| <GlanceAtFlagFor FlagId="..." Frames="..." />
|positive integer
| integer x2
|
|
|-
|-
|<MoveNearFlag FlagId="..." Distance="..." />
| <MoveNearFlag FlagId="..." Distance="..." />
|
| integer, float
|
|
|-
|-
|<Scan Frames="..." Rotation="..." />
| <Scan Frames="..." Rotation="..." />
|
| integer, float
|
|
|-
|-
|<StopScanning />
| <StopScanning />
|
| -
|
|
|-
|-
|<MoveToFlagLookAndWait Frames="..." FlagId="..." Rotation="..." />
| <MoveToFlagLookAndWait Frames="..." FlagId="..." Rotation="..." />
|
| integer x2, float
|
|
|-
|-
|valign=top|<CallScript ScriptId="..." />
|valign=top| <CallScript ScriptId="..." />
|
| integer
|Calls a BSL function by Id. For example if Id is 1 then BSL function is named "patrolscript0001"
|Calls a BSL function by ID. For example if the ID is 1 then the BSL function is named "patrolscript0001".
|-
|-
|valign=top|<ForkScript ScriptId="..." />
|valign=top| <ForkScript ScriptId="..." />
|
| integer
|Forks a BSL function by Id. For example if Id is 2 then BSL function is named "patrolscript0002"
|Forks a BSL function by ID. For example if the ID is 2 then the BSL function is named "patrolscript0002".
|-
|-
|valign=top|<IgnorePlayer Value="..." />
|valign=top| <IgnorePlayer Value="..." />
|
|valign=top| flag
:No
:Yes
|
|
: No
: Yes
|-
|-
|<FaceToFlagAndFire FlagId="..." Frames="..." Spread="..." />
| <FaceToFlagAndFire FlagId="..." Frames="..." Spread="..." />
|
| integer x2, float
|
|
|}
|}
{{XML}}

Latest revision as of 01:21, 3 April 2021

PATR : Patrol Path
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

PART << Other OBJC >> PWRU

switch to OBD page

General information

  • The XML on this page is based on OniSplit v0.9.61.0.
  • "BINACJBOPatrol Path" is level-specific (levelx_Final.dat).
  • A path can have at most 64 points.
Corrupting BSL code in patrol scripts
I (Paradox) suspect that instantly played BSL code breaks patrol paths. Example: patrolscript0001 contains a sleep command and patrolscript0002 will be played. If you remove the sleep command, the patrol path will break. (This was tested in level 1 SP1 with A_t48 and his patrol_48.)

XML code - patrolscript points:

<Points>
   <ScriptId ScriptId="1" />
   <ScriptId ScriptId="2" />
   <ScriptId ScriptId="3" />
</Points>

BSL code:

func patrolscript0001
{
	dmsg "1"
	chr_animate 0 KONOKOpowerup
	sleep 1
}
func patrolscript0002
{
	dmsg "2"
}
func patrolscript0003
{
	dmsg "3"
}

BSL support

  • ai2_showpaths = 1
  • ai2_dopath ai_name path_name

File structure

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

[...] means at least one patrol block. Paste all your patrol data in there (this includes the <PATR Id="..."> and </PATR> tag).

Example

       <PATR Id="8283">
           <Header>
               <Flags></Flags>
               <Position>-408.598755 60.1162872 -1402.20361</Position>
               <Rotation>0 0 0</Rotation>
           </Header>
           <OSD>
               <Name>patrol_32</Name>
               <PatrolId>32</PatrolId>
               <ReturnToNearest>1</ReturnToNearest>
               <Points>
                   <IgnorePlayer Value="Yes" />
                   <MovementMode Mode="Run" />
                   <MoveToFlag FlagId="545" />
                   <Loop>
                       <MoveToFlagLookAndWait Frames="120" FlagId="545" Rotation="5" />
                       <IgnorePlayer Value="No" />
                       <MoveThroughFlag FlagId="145" Distance="0" />
                       <MovementMode Mode="ByAlertLevel" />
                       <MoveToFlagLookAndWait Frames="300" FlagId="144" Rotation="60" />
                       <MoveThroughFlag FlagId="145" Distance="0" />
                       <MoveToFlagLookAndWait Frames="300" FlagId="146" Rotation="90" />
                   </Loop>
               </Points>
           </OSD>
       </PATR>


XML tag Content type Description
<PATR Id="..."> integer ID doesn't matter
<Flags> flag Unknown
<Position> float x3 XYZ position, unused
<Rotation> float x3 XYZ rotation, unused
<Name> string Used by BSL command "ai2_dopath"
<PatrolId> integer Used in BINA/OBJC/CHAR
<ReturnToNearest> flag
1 (Yes)
0 (No)
<Points> - Holds the actual path data (up to 64 points).
<MoveToFlag FlagId="..." /> integer
<Stop /> -
<Pause Frames="..." /> integer
<LookAtFlag FlagId="..." /> integer
<LookAtPoint X="..." Y="..." Z="..." /> float x3
<MoveAndFaceFlag FlagId="..." /> integer
<Loop>...</Loop> Patrol path tags can be enclosed by this loop tag.
<MovementMode Mode="..." /> flag
ByAlertLevel
Stop
Crouch
Creep
WalkNoAim
Walk
RunNoAim
Run
<MoveToPoint X="..." Y="..." Z="..." /> float x3
<LockFacing Facing="..." /> flag
Forward
Backward
Left
Right
Stopped
<MoveThroughFlag FlagId="..." Distance="..." /> integer, float
<MoveThroughPoint X="..." Y="..." Z="..." Distance="..." /> float x4
<StopLooking /> -
<FreeFacing /> -
<GlanceAtFlagFor FlagId="..." Frames="..." /> integer x2
<MoveNearFlag FlagId="..." Distance="..." /> integer, float
<Scan Frames="..." Rotation="..." /> integer, float
<StopScanning /> -
<MoveToFlagLookAndWait Frames="..." FlagId="..." Rotation="..." /> integer x2, float
<CallScript ScriptId="..." /> integer Calls a BSL function by ID. For example if the ID is 1 then the BSL function is named "patrolscript0001".
<ForkScript ScriptId="..." /> integer Forks a BSL function by ID. For example if the ID is 2 then the BSL function is named "patrolscript0002".
<IgnorePlayer Value="..." /> flag
No
Yes
<FaceToFlagAndFire FlagId="..." Frames="..." Spread="..." /> integer x2, float