OBD:BINA/OBJC/PATR: Difference between revisions

From OniGalore
< OBD:BINA‎ | OBJC
Jump to navigation Jump to search
mNo edit summary
m (added family to footer template call)
 
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{OBD OBJC Header | align=center | type=PATR | prev=PART | next=PWRU | name=Patrol path}}
{{OBD OBJC Header | align=center | type=PATR | prev=PART | next=PWRU | name=Patrol path | stuff=b_pp}}




[[image:bin_r_pp.gif]]
[[Image:bin_r_pp.gif]]




{{Table}}
{{Table}}
{{OBDth}}
{{OBDth}}
{{OBDtr| 0x00 | char[4]  |FF0000| 43 4A 42 4F | OBJC      | object collection }}
{{OBDtr| 0x00 | char[4]  |FF0000| 43 4A 42 4F | OBJC      | objects }}
{{OBDtr| 0x04 | int32    |FFFF00| B4 1F 00 00 | 8116      | size of the complete patrol path part from this postion in bytes }}
{{OBDtr| 0x04 | int32    |FFFF00| B4 1F 00 00 | 8116      | size of the complete patrol path part from this position in bytes }}
{{OBDtr| 0x08 | int32    |00FF00| 27 00 00 00 | 39        | object collection version }}
{{OBDtr| 0x08 | int32    |00FF00| 27 00 00 00 | 39        | object list version }}
{{OBDtr| 0x0C | int32    |00FFFF| 78 00 00 00 | 120        | size of the following element in bytes }}
{{OBDtr| 0x0C | int32    |00FFFF| 78 00 00 00 | 120        | size of the following element in bytes }}
{{OBDtrBK}}
{{OBDtrBK}}
Line 36: Line 36:
:05 - move and face to flag (short)
:05 - move and face to flag (short)
:06 - run path in a loop (nothing)
:06 - run path in a loop (nothing)
:07 - movement mode (long) - the following movement modes are possible (Don't use other numbers. Oni will crash.):
:07 - movement mode (long) - the following values are possible:


::0 - by alert level
::1 - stop
::2 - crouch
::3 - creep
::4 - walk - no aim
::5 - walk
::6 - run - no aim
::7 - run
::8 - forwards (* doesn't respond to ai2_setmovementmode and can make Oni crash when used in the patrol path file)
::9 - backwards (*)
::10 - left (*)
::11 - right (*)
::12 - stopped (*)


::0 - walk in firing position
:08 - move to point; (not used in Oni); in-game test result: works fine
::3 - walk crouch in firing position
:09 - turn head by X degrees; (not used in Oni); in-game test result: malfunctioning
::4 - walk relaxed (weapon down)
::5 - walk in firing position (the same as 0)
::6 - run relaxed (weapon down)
::7 - run in firing position
 
 
:08 - unknown; (not used in Oni)
:09 - unknown; (not used in Oni)
:10 - move through flag (short, float) - character moves to this flag until he/she has reached the radius border of it
:10 - move through flag (short, float) - character moves to this flag until he/she has reached the radius border of it
:11 - move through point (float, float, float, float) - character moves to this point until he/she has reached the radius border of it; (not used in Oni)
:11 - move through point (float, float, float, float) - character moves to this point until he/she has reached the radius border of it; (not used in Oni)
Line 57: Line 62:
:16 - run path in a loop from block number (long) - runs the complete path once; after that it loops the path from the block number to the end (note that the block number of the first block is zero and not one)
:16 - run path in a loop from block number (long) - runs the complete path once; after that it loops the path from the block number to the end (note that the block number of the first block is zero and not one)
:17 - time + rotation (short + float) - character looks/aims around for the fixed time
:17 - time + rotation (short + float) - character looks/aims around for the fixed time
:18 - unkown (nothing follows)
:18 - force loop continuance and correctness (type 17 can cause incorrect loops and a complete break in case of 0 frames)
:19 - time + flag + rotation in degrees (short + short + float) - character moves to the flag and when reached he/she looks/aims around for the fixed time
:19 - time + flag + rotation in degrees (short + short + float) - character moves to the flag and when reached he/she looks/aims around for the fixed time
:20 - time follows (short)
:20 - <u>fork</u> patrolscript by id (short) - BSL function with this id is called up (f.e. id <nowiki>= 1, then called up function =</nowiki> patrolscript0001)
:21 - patrolscript id follows (short) - function with this id is called up (f.e. id <nowiki>= 1, then called up function =</nowiki> patrolscript0001)
:21 - <u>call</u> patrolscript by id (short) - BSL function with this id is called up (f.e. id <nowiki>= 1, then called up function =</nowiki> patrolscript0001), caution: bsl can interrupt the patrol path (see example below)
:22 - ignore player (byte) - 0 <nowiki>= off; 1 =</nowiki> on
:22 - ignore player (byte) - 0 <nowiki>= off; 1 =</nowiki> on
:23 - flag + time + firing spread in degrees (short + short + float) - character faces to to the flag and fires his/her weapon for the fixed time  
:23 - flag + time + firing spread in degrees (short + short + float) - character faces to to the flag and fires his/her weapon for the fixed time  
Line 68: Line 73:
{{OBDtr| 0x04 | int16    |FFDDDD| 58 02      | 600        | sleep time in 1/60 seconds }}
{{OBDtr| 0x04 | int16    |FFDDDD| 58 02      | 600        | sleep time in 1/60 seconds }}
{{OBDtr| 0x06 | int16    |64AAAA| CB 00      | 203        | flag ID }}
{{OBDtr| 0x06 | int16    |64AAAA| CB 00      | 203        | flag ID }}
{{OBDtr| 0x08 | float    |EBEBEB| 00 00 A0 42 | 80.000000  | unknown; character roation on the y-axis in degrees? }}
{{OBDtr| 0x08 | float    |EBEBEB| 00 00 A0 42 | 80.000000  | look around angle in degrees }}
|}
|}


Line 76: Line 81:




;Bluebox screenshots
;Corrupting BSL code at patrolscripts
:I suspect that ''instantly'' played BSL code breaks patrol path.
:example:
::patrolscript0001 contains a sleep command and patrolscript0002 will be played.
::But 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"
}
 
 
;Tool Mode dialogs


http://ssg.oni2.net/subfold/bluebox/images/300_edit_paths.png
[[Image:Tool dialog - Edit Paths.png]]




http://ssg.oni2.net/subfold/bluebox/images/301_edit_path.png
[[Image:Tool dialog - Edit Path.png]]




http://ssg.oni2.net/subfold/bluebox/images/302_edit_path_point.png
[[Image:Tool dialog - Edit Path Point.png]]




{{OBD OBJC Footer | type=PATR | prev=PART | next=PWRU | name=Patrol path}}
{{OBD OBJC Footer | type=PATR | prev=PART | next=PWRU | name=Patrol path | family=Level}}


{{OBD}}
{{OBD}}

Latest revision as of 21:19, 9 December 2023

ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
PART << Other OBJC >> PWRU
PATR : Patrol path
XML tutorial
Overview @ Oni Stuff
OBD.png


Bin r pp.gif


Offset Type Raw Hex Value Description
0x00 char[4] 43 4A 42 4F OBJC objects
0x04 int32 B4 1F 00 00 8116 size of the complete patrol path part from this position in bytes
0x08 int32 27 00 00 00 39 object list version
0x0C int32 78 00 00 00 120 size of the following element in bytes
First element (black outline)
0x00 char[4] 52 54 41 50 PATR patrol path
0x04 int32 6F 1A 00 00 6767 old file ID
0x08 int32 00 00 00 00 0 unknown
0x0C float 08 AB 20 44 642.672363 x-position of the patrol path start point
0x10 float E7 26 87 41 16.893995 y-position (height) of the patrol path start point
0x14 float 6C CD BD C3 -379.604858 z-position of the patrol path start point
0x18 float 00 00 00 00 0.000000 rotation on the x-axis in degrees
0x1C float 00 00 00 00 0.000000 rotation on the y-axis in degrees
0x20 float 00 00 00 00 0.000000 rotation on the z-axis in degrees
0x24 char[32] Floor1_Stk_1 patrol path name
0x44 int32 04 00 00 00 4 number of path points (grey outline)
0x48 int16 00 00 0 patrol path ID
0x4A int16 01 00 1 "return to nearest"?
First path point (grey outline)
0x00 int32 13 00 00 00 19 path point type; the following types are possible (values in dec):


00 - move to flag (short)
01 - stop (nothing); (not used in Oni)
02 - pause in frames (long)
03 - look at flag (short)
04 - look at point (float, float, float); (not used in Oni)
05 - move and face to flag (short)
06 - run path in a loop (nothing)
07 - movement mode (long) - the following values are possible:
0 - by alert level
1 - stop
2 - crouch
3 - creep
4 - walk - no aim
5 - walk
6 - run - no aim
7 - run
8 - forwards (* doesn't respond to ai2_setmovementmode and can make Oni crash when used in the patrol path file)
9 - backwards (*)
10 - left (*)
11 - right (*)
12 - stopped (*)
08 - move to point; (not used in Oni); in-game test result: works fine
09 - turn head by X degrees; (not used in Oni); in-game test result: malfunctioning
10 - move through flag (short, float) - character moves to this flag until he/she has reached the radius border of it
11 - move through point (float, float, float, float) - character moves to this point until he/she has reached the radius border of it; (not used in Oni)
12 - stop looking (nothing)
13 - free facing?; used only once
14 - glance at flag for ... frames (short + long) - character looks (rotates only the head) to the flag for the fixed time
15 - move near flag (short + float) - character moves to this flag until he/she has reached the radius border of it
16 - run path in a loop from block number (long) - runs the complete path once; after that it loops the path from the block number to the end (note that the block number of the first block is zero and not one)
17 - time + rotation (short + float) - character looks/aims around for the fixed time
18 - force loop continuance and correctness (type 17 can cause incorrect loops and a complete break in case of 0 frames)
19 - time + flag + rotation in degrees (short + short + float) - character moves to the flag and when reached he/she looks/aims around for the fixed time
20 - fork patrolscript by id (short) - BSL function with this id is called up (f.e. id = 1, then called up function = patrolscript0001)
21 - call patrolscript by id (short) - BSL function with this id is called up (f.e. id = 1, then called up function = patrolscript0001), caution: bsl can interrupt the patrol path (see example below)
22 - ignore player (byte) - 0 = off; 1 = on
23 - flag + time + firing spread in degrees (short + short + float) - character faces to to the flag and fires his/her weapon for the fixed time


0x04 int16 58 02 600 sleep time in 1/60 seconds
0x06 int16 CB 00 203 flag ID
0x08 float 00 00 A0 42 80.000000 look around angle in degrees


Path points
A path can have at most 64 points.


Corrupting BSL code at patrolscripts
I suspect that instantly played BSL code breaks patrol path.
example:
patrolscript0001 contains a sleep command and patrolscript0002 will be played.
But 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"
}


Tool Mode dialogs

Tool dialog - Edit Paths.png


Tool dialog - Edit Path.png


Tool dialog - Edit Path Point.png


ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
PART << Other OBJC >> PWRU
PATR : Patrol path
Level file