OBD:BINA/OBJC/CHAR: Difference between revisions

From OniGalore
< OBD:BINA‎ | OBJC
Jump to navigation Jump to search
m (→‎Dialog from level0_Tools: changed to English images)
m (fixed Stuff link)
(9 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{OBD OBJC Header | align=center | type=CHAR | prev=WEAP | next=CMBT | name=Character}}
{{OBD OBJC Header | align=center | type=CHAR | prev=WEAP | next=CMBT | name=Character |stuff=b_ch}}


==File description==
==File description==
===Basic setup - Apperance, weapon, position, misc spawn flags===
===Basic setup - Appearance, weapon, position, misc spawn flags===




Line 10: Line 10:
{{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| 2C 8B 00 00 | 35628      | size of the complete collection from this postion in bytes }}
{{OBDtr| 0x04 | int32    |FFFF00| 2C 8B 00 00 | 35628      | size of the complete list 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| 20 02 00 00 | 544        | size of the following element in bytes }}
{{OBDtr| 0x0C | int32    |00FFFF| 20 02 00 00 | 544        | size of the following element in bytes }}
{{OBDtrBK}}
{{OBDtrBK}}
{{OBDtr| 0x000 | char[4]  |FFC8C8| 52 41 48 43 | CHAR      | character }}
{{OBDtr| 0x000 | char[4]  |FFC8C8| 52 41 48 43 | CHAR      | character }}
{{OBDtr| 0x004 | int32    |FFFFC8| 87 19 00 00 | 6535      | old file ID }}
{{OBDtr| 0x004 | int32    |FFFFC8| 87 19 00 00 | 6535      | old file ID }}
{{OBDtr| 0x008 | int32    |C8FFC8| 00 00 00 00 | 0          | unknwon }}
{{OBDtr| 0x008 | int32    |C8FFC8| 00 00 00 00 | 0          | unknown }}
{{OBDtr| 0x00C | float    |C8FFFF| A5 7D 9D 43 | 314.981597 | x-position of the character }}
{{OBDtr| 0x00C | float    |C8FFFF| A5 7D 9D 43 | 314.981597 | x-position of the character }}
{{OBDtr| 0x010 | float    |C8FFFF| 00 00 D8 C1 | -27.000000 | y-position (height) of the character }}
{{OBDtr| 0x010 | float    |C8FFFF| 00 00 D8 C1 | -27.000000 | y-position (height) of the character }}
Line 24: Line 24:
{{OBDtr| 0x01C | float    |FFC8FF| 00 00 87 43 | 270.000000 | rotation on the y-axis in degrees }}
{{OBDtr| 0x01C | float    |FFC8FF| 00 00 87 43 | 270.000000 | rotation on the y-axis in degrees }}
{{OBDtr| 0x020 | float    |FFC8FF| 00 00 00 00 | 0.000000  | rotation on the z-axis in degrees }}
{{OBDtr| 0x020 | float    |FFC8FF| 00 00 00 00 | 0.000000  | rotation on the z-axis in degrees }}
{{OBDtr| 0x024 | bitset32 |FFC800| 01 00 00 00 | 1, 0, 0, 0 | character options; the folowing bits are used:
{{OBDtr| 0x024 | bitset32 |FFC800| 01 00 00 00 | 1, 0, 0, 0 | character options; the following bits are used:
:0x '''01''' 00 00 00 - player character
:0x '''01''' 00 00 00 - player character
:0x '''02''' 00 00 00 - random skin
:0x '''02''' 00 00 00 - random skin
:0x '''04''' 00 00 00 - not prespawned
:0x '''04''' 00 00 00 - not pre-spawned
:0x '''08''' 00 00 00 - non-combatant
:0x '''08''' 00 00 00 - non-combatant
:0x '''10''' 00 00 00 - multi-spawnable
:0x '''10''' 00 00 00 - multi-spawnable
Line 34: Line 34:
:0x '''80''' 00 00 00 - superammo
:0x '''80''' 00 00 00 - superammo
:0x 00 '''01''' 00 00 - omniscient
:0x 00 '''01''' 00 00 - omniscient
:0x 00 '''02''' 00 00 - has LSI
:0x 00 '''02''' 00 00 - has [[LSI]]
:0x 00 '''04''' 00 00 - boss
:0x 00 '''04''' 00 00 - boss
:0x 00 '''08''' 00 00 - upgrade difficulty (spawns a stronger enemy if you play on medium or hard)
:0x 00 '''08''' 00 00 - upgrade difficulty (spawns a stronger enemy if you play on medium or hard)
Line 88: Line 88:
{{OBDtr| 0x1EA | int16    |FFFFA6| 00 00      | 0          | amount of phase cloaking that can be dropped }}
{{OBDtr| 0x1EA | int16    |FFFFA6| 00 00      | 0          | amount of phase cloaking that can be dropped }}


{{OBDtr| 0x1EC | int16    |71FFB8| 00 00      | 0          | unknown; always zero; used "nci"? }}
{{OBDtr| 0x1EC | int16    |71FFB8| 00 00      | 0          | used "nci" (feature not used in Oni) }}
{{OBDtr| 0x1EE | int16    |71FFB8| 00 00      | 0          | unknown; always zero; dropped "nci"? }}
{{OBDtr| 0x1EE | int16    |71FFB8| 00 00      | 0          | dropped "nci" (feature not used Oni) }}


{{OBDtr| 0x1F0 | int32    |0000BF| 00 00 00 00 | 0          | team ID; the following teams are possible:
{{OBDtr| 0x1F0 | int32    |0000BF| 00 00 00 00 | 0          | team ID; the following teams are possible:
Line 117: Line 117:
{{OBDtr| 0x214 | int32    |4F7291| 04 00 00 00 | 4          | pursuit mode for strong awareness when alert level medium/high/combat }}
{{OBDtr| 0x214 | int32    |4F7291| 04 00 00 00 | 4          | pursuit mode for strong awareness when alert level medium/high/combat }}
{{OBDtr| 0x218 | int32    |FFD6C1| 04 00 00 00 | 4          | pursuit mode for weak awareness when alert level medium/high/combat }}
{{OBDtr| 0x218 | int32    |FFD6C1| 04 00 00 00 | 4          | pursuit mode for weak awareness when alert level medium/high/combat }}
{{OBDtr| 0x21C | int32    |FF5E5E| 00 00 00 00 | 0          | unknown (pm_pursue_lost?) }}
{{OBDtr| 0x21C | int32    |FF5E5E| 00 00 00 00 | 0          | pursuit mode for lost contact (enemy was indentified, but then the enemy ran away) }}
|}
|}


Line 127: Line 127:


;Pursuit modes:
;Pursuit modes:
:AI2 has 4 awareness modes: '''forgotten''', '''weak''', '''strong''', '''definite'''.
See [[AI#Reactions and awareness|Reactions]] and [[AI#Pursuit|Pursuit of enemy]] to learn about meaning of CHAR pursuit values.
:Forgotten and definite are clear (either AI2 forgets about enemy or AI2 sees enemy with central vision field).
:Weak and strong are modes used when AI2 character pursues enemy. The moment AI2 char sees (with '''peripheral''' vision field) or hears enemy, it goes into pursue mode with this enemy. Strong is first, then (after timer finishes) it degrades to weak (and then to forgotten).
*At the beginning of pursuit, AI2 chars tries to move as close to the point where enemy stood (or center of dangerous sound was) as possible. AI2 character has limited '''pursuit distance''', specified in [[CMBT]] profile it is using. If source of danger (or interest?) is too far away, AI2 char moves only so far where it can move from its current location according to the pursuit distance. For movement, pursuit mode 2 (GoTo) is used. Whole pursuit behavior depends on pathfinding, no "vectors of movement" or how should I call those green lines.
:"Green lines": ai2_showpaths=1, when in MELE mode or dodging, AI2 has some short green line pointing in the direction of movement instead of regular brown pathfinding line.
*Then AI2 performs pursuit mode 4 (Look) for some specified time (which is probably hardcoded in this pursuit mode's procedure). Awareness of enemy is strong. See my note for info about possible bug in peripheral vision contact.
*After this initial Look mode ends, AI2 char starts its '''strong awareness''' pursuit mode, choice depends on alert level.
*When timer for strong awareness fades, AI2 goes to weak awareness and starts using its '''weak awareness''' pursuit mode, choice depends on alert level again. Possible pursuit modes are listed below.
NOTE
 
This all was tested with sound awareness as peripheral awareness seems to be broken and always calls pursuit mode '''Look''' with '''infinite timer''' (so AI2 stucks and stares in a direction forever, that is why you can escape gunner sometimes, then you peek from corner and he just stands and stares, no action).
 
/NOTE
 
;Useable values for pursuit modes:
*0 - No mode; looks like engine uses Look mode as "safe ring" from crash; maybe 0 is GoTo + Look ("starter" of AI2 pursuit mode, see above)???
*1 - '''Forget'''; works like "ai2_forget" command
*2 - '''GoTo'''; used by engine when char has to move to another place while in pursuit mode, if you set it in CHAR, it does nothing.
*3 - '''Wait'''; AI2 char keeps looking at the point where it looked before this mode started, waiting ^_^
*4 - '''Look'''; AI2 char keeps rotating whole body, looking around
*5 - '''Move'''; no effect when this value is set in CHAR, I don't have idea for what this is good if we have GoTo already. Maybe move randomly ???
*6 - '''Hunt'''; not implemented in Oni (as a few of us noticed, eh, EdT? ^_^). Looks like it is here (it has name, it does not make Oni crash etc), but main procedure is probably unfinished or what (or wrong linked)
*7 - '''Glance'''; AI2 char stands and rotates only as if player pressed "look" key ("v" by default) and tried to move the mouse. So no full-body turning, only "twisting" from extreme angle to extreme angle.
:speculations:
*9 - Find alarm?; this is interesting, becuase when you make AI2 char alarmed via "ai2_tripalarm" (or by alarm console), report will say that reason of high alert of AI2 is ''unknown: 9''. Maybe this mode means "find player, who is alarming whole place by doing his business here?"
 
Exe rip which contains (probably) all modes is in [[CMBT]], se near the end of the page.
 
--[[User:Loser|Loser]] 14:45, 31 July 2008 (CEST)


==Dialog from level0_Tools==
==Dialog from level0_Tools==
Line 170: Line 142:


{{OBD OBJC Footer | type=CHAR | prev=WEAP | next=CMBT | name=Character}}
{{OBD OBJC Footer | type=CHAR | prev=WEAP | next=CMBT | name=Character}}
{{OBD}}

Revision as of 19:20, 28 August 2020

ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
WEAP << Other OBJC >> CMBT
CHAR : Character
XML tutorial
Overview @ Oni Stuff
OBD.png

File description

Basic setup - Appearance, weapon, position, misc spawn flags

Bin r ch.gif


Offset Type Raw Hex Value Description
0x00 char[4] 43 4A 42 4F OBJC objects
0x04 int32 2C 8B 00 00 35628 size of the complete list from this position in bytes
0x08 int32 27 00 00 00 39 object list version
0x0C int32 20 02 00 00 544 size of the following element in bytes
First element (black outline)
0x000 char[4] 52 41 48 43 CHAR character
0x004 int32 87 19 00 00 6535 old file ID
0x008 int32 00 00 00 00 0 unknown
0x00C float A5 7D 9D 43 314.981597 x-position of the character
0x010 float 00 00 D8 C1 -27.000000 y-position (height) of the character
0x014 float 98 09 1E 42 39.509368 z-position of the character
0x018 float 00 00 00 00 0.000000 rotation on the x-axis in degrees
0x01C float 00 00 87 43 270.000000 rotation on the y-axis in degrees
0x020 float 00 00 00 00 0.000000 rotation on the z-axis in degrees
0x024 bitset32 01 00 00 00 1, 0, 0, 0 character options; the following bits are used:
0x 01 00 00 00 - player character
0x 02 00 00 00 - random skin
0x 04 00 00 00 - not pre-spawned
0x 08 00 00 00 - non-combatant
0x 10 00 00 00 - multi-spawnable
0x 20 00 00 00 - unknown
0x 40 00 00 00 - unkillable
0x 80 00 00 00 - superammo
0x 00 01 00 00 - omniscient
0x 00 02 00 00 - has LSI
0x 00 04 00 00 - boss
0x 00 08 00 00 - upgrade difficulty (spawns a stronger enemy if you play on medium or hard)
0x 00 10 00 00 - no auto-drop (doesn't drop "used" shield, "used" invisibility and LSI when killed)
0x028 char[64] konoko_generic character class name (reference to 00991-konoko_generic.ONCC)
0x068 char[32] konoko character name
0x088 char[64] w1_tap weapon class name (reference to 03701-w1_tap.ONWC of level 0)

Script functions - Called by engine when certain things happen to a character

Offset Type Raw Hex Value Description
0x0C8 char[32] unused script function called when character is spawned
0x0E8 char[32] you_lose script function called when character dies (health reaches 0); can work multiple times
0x108 char[32] unused script function called when character notices an enemy; works only once
0x128 char[32] unused alarm function; never used in Oni, it is called when character is alarmed
0x148 char[32] unused script function called when character is hurt for the first time; works only once
0x168 char[32] unused script function called when character is "defeated" (health reaches 1); works only once
0x188 char[32] unused script function 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
0x1A8 char[32] unused nopath function, some exotic script function call ("should" be called when a character has trouble pathfinding, but isn't)


Less basic setup - Inventory, team, jobs, alert/pursuit

Offset Type Raw Hex Value Description
0x1C8 int32 00 00 00 00 0 additional health (the basic health is stored in the ONCC file of the character)
0x1CC int32 00 00 00 00 0 job ID; the following jobs are possible:
0 - none
1 - idle
2 - guard (never used in Oni)
3 - patrol
4 - teambattle (never used in Oni)
0x1D0 int16 00 00 0 patrol path ID (reference to the Patrol_Path.BINA file)
0x1D2 int16 00 00 0 combat ID (reference to the Combat.BINA file)
0x1D4 int16 00 00 0 melee ID (reference to the Melee Profile.BINA file)
0x1D6 int16 00 00 0 neutral ID (reference to the Neutral.BINA file)
0x1D8 int16 01 00 1 amount of ammo (red clips) that can be used
0x1DA int16 00 00 0 amount of ammo (red clips) that can be dropped
0x1DC int16 00 00 0 amount of energy cells (green clips) that can be used
0x1DE int16 00 00 0 amount of energy cells (green clips) that can be dropped
0x1E0 int16 00 00 0 amount of hypos that can be used
0x1E2 int16 00 00 0 amount of hypos that can be dropped
0x1E4 int16 00 00 0 amount of force shields that can be used
0x1E6 int16 00 00 0 amount of force shields that can be dropped
0x1E8 int16 00 00 0 amount of phase cloaking that can be used (60 = 1 second)
0x1EA int16 00 00 0 amount of phase cloaking that can be dropped
0x1EC int16 00 00 0 used "nci" (feature not used in Oni)
0x1EE int16 00 00 0 dropped "nci" (feature not used Oni)
0x1F0 int32 00 00 00 00 0 team ID; the following teams are possible:
0 - Konoko
1 - TCTF
2 - Syndicate
3 - Neutral
4 - SecurityGuard
5 - RogueKonoko
6 - Switzerland
7 - SyndicateAccessory
0x1F4 int32 64 00 00 00 100 ammo filling in percent
0x1F8 int32 00 00 00 00 0 initial alert level; the following alert levels are possible:
0 - lull
1 - low
2 - medium
3 - high
4 - combat
0x1FC int32 00 00 00 00 0 minimal alert level
0x200 int32 01 00 00 00 1 alert level when starting a job
0x204 int32 02 00 00 00 2 alert level when investigating
0x208 bitset32 00 00 00 00 0, 0, 0, 0 alarm groups, see below this table
0x20C int32 04 00 00 00 4 pursuit mode for strong awareness when alert level lull/low
0x210 int32 01 00 00 00 1 pursuit mode for weak awareness when alert level lull/low
0x214 int32 04 00 00 00 4 pursuit mode for strong awareness when alert level medium/high/combat
0x218 int32 04 00 00 00 4 pursuit mode for weak awareness when alert level medium/high/combat
0x21C int32 00 00 00 00 0 pursuit mode for lost contact (enemy was indentified, but then the enemy ran away)


Alarm groups
Stored as a bitset
If bit 2^N is ON, the character will be alarmed by script command ai2_tripalarm(N) or alarm console command 0060 NN00 where NN is the hex for N.
(Since the size of the alarm group field is 4 bytes, there's a maximum of 32 alarm groups, i.e. N ranges from 0 to 31)
Pursuit modes

See Reactions and Pursuit of enemy to learn about meaning of CHAR pursuit values.

Dialog from level0_Tools

215_character_properties2.png


Also available is the following dialog, which is redundant of CMBT and apparently predates both CHAR and AISA:


211_character_properties.png


ONI BINARY DATA
AKVA << Other file types >> CBPI
BINA : Binary data
TMBD << Other BINA >> ONIE
OBJC : Objects
WEAP << Other OBJC >> CMBT
CHAR : Character
[[OBD:File types/{{{family}}}|{{{family}}} file]]