m (linking to LSI)  | 
				m (→Script functions:  bg color was too dark to read the text)  | 
				||
| (5 intermediate revisions by the same user 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   | ===Basic setup===  | ||
The character's appearance, weapon, position, and misc. spawn flags.  | |||
[[Image:bin_r_ch.gif]]  | |||
[[  | |||
{{Table}}  | {{Table}}  | ||
{{OBDth}}  | {{OBDth}}  | ||
{{OBDtr| 0x00 | char[4]  |FF0000| 43 4A 42 4F | OBJC       |   | {{OBDtr| 0x00 | char[4]  |FF0000| 43 4A 42 4F | OBJC       | wrapper tag }}  | ||
{{OBDtr| 0x04 | int32    |FFFF00| 2C 8B 00 00 | 35628      | size of the complete list from this position   | {{OBDtr| 0x04 | int32    |FFFF00| 2C 8B 00 00 | 35628      | size of the complete list in bytes from this position }}  | ||
{{OBDtr| 0x08 | int32    |00FF00| 27 00 00 00 | 39         | object list 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       |   | {{OBDtr| 0x000 | char[4]  |FFC8C8| 52 41 48 43 | CHAR       | tag name }}  | ||
{{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          | unknown }}  | {{OBDtr| 0x008 | int32    |C8FFC8| 00 00 00 00 | 0          | unknown }}  | ||
{{OBDtr| 0x00C | float    |C8FFFF| A5 7D 9D 43 | 314.981597 | x  | {{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  | {{OBDtr| 0x010 | float    |C8FFFF| 00 00 D8 C1 | -27.000000 | y position (height) of the character }}  | ||
{{OBDtr| 0x014 | float    |C8FFFF| 98 09 1E 42 | 39.509368  | z  | {{OBDtr| 0x014 | float    |C8FFFF| 98 09 1E 42 | 39.509368  | z position of the character }}  | ||
{{OBDtr| 0x018 | float    |FFC8FF| 00 00 00 00 | 0.000000   | rotation on the x  | {{OBDtr| 0x018 | float    |FFC8FF| 00 00 00 00 | 0.000000   | rotation on the x axis in degrees }}  | ||
{{OBDtr| 0x01C | float    |FFC8FF| 00 00 87 43 | 270.000000 | rotation on the y  | {{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  | {{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 following 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  | ||
| Line 39: | Line 39: | ||
:0x 00 '''10''' 00 00 - no auto-drop (doesn't drop "used" shield, "used" invisibility and LSI when killed)  | :0x 00 '''10''' 00 00 - no auto-drop (doesn't drop "used" shield, "used" invisibility and LSI when killed)  | ||
}}  | }}  | ||
{{OBDtr2|0x028 | char[64] |B0C3D4| konoko_generic           | character class name (reference to [[OBD:ONCC|  | {{OBDtr2|0x028 | char[64] |B0C3D4| konoko_generic           | character class name (reference to [[OBD:ONCC|ONCCkonoko_generic]]) }}  | ||
{{OBDtr2|0x068 | char[32] |E7CEA5| konoko                   | character name }}  | {{OBDtr2|0x068 | char[32] |E7CEA5| konoko                   | character name }}  | ||
{{OBDtr2|0x088 | char[64] |FFDDDD| w1_tap                   | weapon class name (reference to [[OBD:ONWC|  | {{OBDtr2|0x088 | char[64] |FFDDDD| w1_tap                   | weapon class name (reference to [[OBD:ONWC|ONWCw1_tap]] of level 0) }}  | ||
|}  | |}  | ||
===Script functions   | ===Script functions===  | ||
These are the names of the functions in the level script to call when certain things happen to a character.  | |||
{{Table}}  | {{Table}}  | ||
{{OBDth}}  | {{OBDth}}  | ||
{{OBDtr2|0x0C8 | char[32] |EBEBEB| unused                   |   | {{OBDtr2|0x0C8 | char[32] |EBEBEB| unused                   | called when character is spawned }}  | ||
{{OBDtr2|0x0E8 | char[32] |8C8CCC| you_lose                 |   | {{OBDtr2|0x0E8 | char[32] |8C8CCC| you_lose                 | called when character dies (health reaches 0); can work multiple times }}  | ||
{{OBDtr2|0x108 | char[32] |FF00C8| unused                   |   | {{OBDtr2|0x108 | char[32] |FF00C8| unused                   | called when character notices an enemy; works only once }}  | ||
{{OBDtr2|0x128 | char[32] |F0F096| unused                   |   | {{OBDtr2|0x128 | char[32] |F0F096| unused                   | never used in the game data, but it should be called when character is alarmed }}  | ||
{{OBDtr2|0x148 | char[32] |00C864| unused                   |   | {{OBDtr2|0x148 | char[32] |00C864| unused                   | called when character is hurt for the first time; works only once }}  | ||
{{OBDtr2|0x168 | char[32] |00C8FF| unused                   |   | {{OBDtr2|0x168 | char[32] |00C8FF| unused                   | called when character is "defeated" (health reaches 1); works only once }}  | ||
{{OBDtr2|0x188 | char[32] |C80040| unused                   |   | {{OBDtr2|0x188 | char[32] |C80040| unused                   | called when character runs out of ammo by reloading a weapon with the last available clip); works only once, and the character must have the ammo at spawn time }}  | ||
{{OBDtr2|0x1A8 | char[32] |  | {{OBDtr2|0x1A8 | char[32] |989898| unused                   | "nopath" function (meant to be called when a character has trouble pathfinding, but isn't) }}  | ||
|}  | |}  | ||
===Less basic setup===  | |||
===Less basic setup   | Inventory, team, jobs, alert/pursuit behavior.  | ||
{{Table}}  | {{Table}}  | ||
{{OBDth}}  | {{OBDth}}  | ||
{{OBDtr| 0x1C8 | int32    |C8C864| 00 00 00 00 | 0          |   | {{OBDtr| 0x1C8 | int32    |C8C864| 00 00 00 00 | 0          | +/- delta to the class's base health (stored in the [[OBD:ONCC|ONCC]] file of the character) }}  | ||
{{OBDtr| 0x1CC | int32    |0096C8| 00 00 00 00 | 0          | job ID; the following jobs are possible:  | {{OBDtr| 0x1CC | int32    |0096C8| 00 00 00 00 | 0          | job ID; the following jobs are possible:  | ||
:0 - none  | :0 - none  | ||
| Line 73: | Line 72: | ||
:4 - teambattle (never used in Oni)  | :4 - teambattle (never used in Oni)  | ||
}}  | }}  | ||
{{OBDtr| 0x1D0 | int16    |FF80C0| 00 00       | 0          | patrol path ID (reference to the [[OBD:BINA/OBJC/PATR|  | {{OBDtr| 0x1D0 | int16    |FF80C0| 00 00       | 0          | patrol path ID (reference to the [[OBD:BINA/OBJC/PATR|BINACJBOPatrol_Path]] file) }}  | ||
{{OBDtr| 0x1D2 | int16    |FF80C0| 00 00       | 0          | combat ID (reference to the [[OBD:BINA/OBJC/CMBT|  | {{OBDtr| 0x1D2 | int16    |FF80C0| 00 00       | 0          | combat ID (reference to the [[OBD:BINA/OBJC/CMBT|BINACJBOCombat]] file) }}  | ||
{{OBDtr| 0x1D4 | int16    |D0C0AF| 00 00       | 0          | melee ID (reference to the [[OBD:BINA/OBJC/MELE|  | {{OBDtr| 0x1D4 | int16    |D0C0AF| 00 00       | 0          | melee ID (reference to the [[OBD:BINA/OBJC/MELE|BINACJBOMelee Profile]] file) }}  | ||
{{OBDtr| 0x1D6 | int16    |D0C0AF| 00 00       | 0          | neutral ID (reference to the [[OBD:BINA/OBJC/NEUT|  | {{OBDtr| 0x1D6 | int16    |D0C0AF| 00 00       | 0          | neutral ID (reference to the [[OBD:BINA/OBJC/NEUT|BINACJBONeutral]] file) }}  | ||
{{OBDtr| 0x1D8 | int16    |EEDDFF| 01 00       | 1          | amount of ammo   | {{OBDtr| 0x1D8 | int16    |EEDDFF| 01 00       | 1          | amount of ballistic ammo that can be used }}  | ||
{{OBDtr| 0x1DA | int16    |EEDDFF| 00 00       | 0          | amount of ammo   | {{OBDtr| 0x1DA | int16    |EEDDFF| 00 00       | 0          | amount of ballistic ammo that can be dropped }}  | ||
{{OBDtr| 0x1DC | int16    |C5FF8A| 00 00       | 0          | amount of energy cells   | {{OBDtr| 0x1DC | int16    |C5FF8A| 00 00       | 0          | amount of energy cells that can be used }}  | ||
{{OBDtr| 0x1DE | int16    |C5FF8A| 00 00       | 0          | amount of energy cells   | {{OBDtr| 0x1DE | int16    |C5FF8A| 00 00       | 0          | amount of energy cells that can be dropped }}  | ||
{{OBDtr| 0x1E0 | int16    |C0C0C0| 00 00       | 0          | amount of hypos that can be used }}  | {{OBDtr| 0x1E0 | int16    |C0C0C0| 00 00       | 0          | amount of hypos that can be used }}  | ||
{{OBDtr| 0x1E2 | int16    |C0C0C0| 00 00       | 0          | amount of hypos that can be dropped }}  | {{OBDtr| 0x1E2 | int16    |C0C0C0| 00 00       | 0          | amount of hypos that can be dropped }}  | ||
{{OBDtr| 0x1E4 | int16    |FF0080| 00 00       | 0          | amount of force shields that can be used }}  | {{OBDtr| 0x1E4 | int16    |FF0080| 00 00       | 0          | amount of force shields that can be used }}  | ||
{{OBDtr| 0x1E6 | int16    |FF0080| 00 00       | 0          | amount of force shields that can be dropped }}  | {{OBDtr| 0x1E6 | int16    |FF0080| 00 00       | 0          | amount of force shields that can be dropped }}  | ||
{{OBDtr| 0x1E8 | int16    |FFFFA6| 00 00       | 0          | amount of phase   | {{OBDtr| 0x1E8 | int16    |FFFFA6| 00 00       | 0          | amount of phase cloak remaining; this number is in ticks (1/60 second) except if it's 1, in which case it's interpreted to mean "a full phase cloak" }}  | ||
{{OBDtr| 0x1EA | int16    |FFFFA6| 00 00       | 0          |   | {{OBDtr| 0x1EA | int16    |FFFFA6| 00 00       | 0          | will drop phase cloak (true if any value above zero) }}  | ||
{{OBDtr| 0x1EC | int16    |71FFB8| 00 00       | 0          |   | {{OBDtr| 0x1EC | int16    |71FFB8| 00 00       | 0          | unused }}  | ||
{{OBDtr| 0x1EE | int16    |71FFB8| 00 00       | 0          |   | {{OBDtr| 0x1EE | int16    |71FFB8| 00 00       | 0          | unused }}  | ||
{{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 101: | Line 100: | ||
:7 - SyndicateAccessory  | :7 - SyndicateAccessory  | ||
}}  | }}  | ||
{{OBDtr| 0x1F4 | int32    |804040| 64 00 00 00 | 100        | ammo   | {{OBDtr| 0x1F4 | int32    |804040| 64 00 00 00 | 100        | fullness of current ammo clip as a percentage }}  | ||
{{OBDtr| 0x1F8 | int32    |FF22FF| 00 00 00 00 | 0          | initial alert level; the following alert levels are possible:  | {{OBDtr| 0x1F8 | int32    |FF22FF| 00 00 00 00 | 0          | initial alert level; the following alert levels are possible:  | ||
:0 - lull  | :0 - lull  | ||
| Line 109: | Line 108: | ||
:4 - combat  | :4 - combat  | ||
}}  | }}  | ||
{{OBDtr| 0x1FC | int32    |808080| 00 00 00 00 | 0          |   | {{OBDtr| 0x1FC | int32    |808080| 00 00 00 00 | 0          | minimum alert level }}  | ||
{{OBDtr| 0x200 | int32    |FFAA82| 01 00 00 00 | 1          | alert level when starting a job }}  | {{OBDtr| 0x200 | int32    |FFAA82| 01 00 00 00 | 1          | alert level when starting a job }}  | ||
{{OBDtr| 0x204 | int32    |00D900| 02 00 00 00 | 2          | alert level when investigating }}  | {{OBDtr| 0x204 | int32    |00D900| 02 00 00 00 | 2          | alert level when investigating }}  | ||
| Line 117: | Line 116: | ||
{{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          | pursuit mode for lost contact (enemy was   | {{OBDtr| 0x21C | int32    |FF5E5E| 00 00 00 00 | 0          | pursuit mode for lost contact (enemy was identified but then the enemy ran away) }}  | ||
{{OBDtr| 0x220 | float    |FF5E5E| 20 02 00 00 | ?          | "facing; internal use only"; used? }}  | |||
|}  | |}  | ||
;Alarm groups  | ;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.)  | |||
:(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:  | ;Pursuit modes:  | ||
See   | See {{SectionLink|AI|Reactions and awareness}} and {{SectionLink|AI|Pursuit}} to learn about meaning of CHAR pursuit values.  | ||
==Dialog from level0_Tools==  | ==Dialog from level0_Tools==  | ||
[[Image:Tool dialog - Character Properties 2.png]]  | |||
| Line 137: | Line 135: | ||
[[Image:Tool dialog - Character Properties 1.png]]  | |||
{{OBD OBJC Footer | type=CHAR | prev=WEAP | next=CMBT | name=Character}}  | {{OBD OBJC Footer | type=CHAR | prev=WEAP | next=CMBT | name=Character | family=Level}}  | ||
{{OBD}}  | {{OBD}}  | ||
Latest revision as of 17:01, 5 November 2024
  | 
 
 | 
File description
Basic setup
The character's appearance, weapon, position, and misc. spawn flags.
| Offset | Type | Raw Hex | Value | Description | 
|---|---|---|---|---|
| 0x00 | char[4] | 43 4A 42 4F | OBJC | wrapper tag | 
| 0x04 | int32 | 2C 8B 00 00 | 35628 | size of the complete list in bytes from this position | 
| 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 | tag name | 
| 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:
  | 
| 0x028 | char[64] | konoko_generic | character class name (reference to ONCCkonoko_generic) | |
| 0x068 | char[32] | konoko | character name | |
| 0x088 | char[64] | w1_tap | weapon class name (reference to ONWCw1_tap of level 0) | |
Script functions
These are the names of the functions in the level script to call when certain things happen to a character.
| Offset | Type | Raw Hex | Value | Description | 
|---|---|---|---|---|
| 0x0C8 | char[32] | unused | called when character is spawned | |
| 0x0E8 | char[32] | you_lose | called when character dies (health reaches 0); can work multiple times | |
| 0x108 | char[32] | unused | called when character notices an enemy; works only once | |
| 0x128 | char[32] | unused | never used in the game data, but it should be called when character is alarmed | |
| 0x148 | char[32] | unused | called when character is hurt for the first time; works only once | |
| 0x168 | char[32] | unused | called when character is "defeated" (health reaches 1); works only once | |
| 0x188 | char[32] | unused | called when character runs out of ammo by reloading a weapon with the last available clip); works only once, and the character must have the ammo at spawn time | |
| 0x1A8 | char[32] | unused | "nopath" function (meant to be called when a character has trouble pathfinding, but isn't) | |
Less basic setup
Inventory, team, jobs, alert/pursuit behavior.
| Offset | Type | Raw Hex | Value | Description | 
|---|---|---|---|---|
| 0x1C8 | int32 | 00 00 00 00 | 0 | +/- delta to the class's base health (stored in the ONCC file of the character) | 
| 0x1CC | int32 | 00 00 00 00 | 0 | job ID; the following jobs are possible:
  | 
| 0x1D0 | int16 | 00 00 | 0 | patrol path ID (reference to the BINACJBOPatrol_Path file) | 
| 0x1D2 | int16 | 00 00 | 0 | combat ID (reference to the BINACJBOCombat file) | 
| 0x1D4 | int16 | 00 00 | 0 | melee ID (reference to the BINACJBOMelee Profile file) | 
| 0x1D6 | int16 | 00 00 | 0 | neutral ID (reference to the BINACJBONeutral file) | 
| 0x1D8 | int16 | 01 00 | 1 | amount of ballistic ammo that can be used | 
| 0x1DA | int16 | 00 00 | 0 | amount of ballistic ammo that can be dropped | 
| 0x1DC | int16 | 00 00 | 0 | amount of energy cells that can be used | 
| 0x1DE | int16 | 00 00 | 0 | amount of energy cells 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 cloak remaining; this number is in ticks (1/60 second) except if it's 1, in which case it's interpreted to mean "a full phase cloak" | 
| 0x1EA | int16 | 00 00 | 0 | will drop phase cloak (true if any value above zero) | 
| 0x1EC | int16 | 00 00 | 0 | unused | 
| 0x1EE | int16 | 00 00 | 0 | unused | 
| 0x1F0 | int32 | 00 00 00 00 | 0 | team ID; the following teams are possible:
  | 
| 0x1F4 | int32 | 64 00 00 00 | 100 | fullness of current ammo clip as a percentage | 
| 0x1F8 | int32 | 00 00 00 00 | 0 | initial alert level; the following alert levels are possible:
  | 
| 0x1FC | int32 | 00 00 00 00 | 0 | minimum 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 identified but then the enemy ran away) | 
| 0x220 | float | 20 02 00 00 | ? | "facing; internal use only"; used? | 
- 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 AI § Reactions and awareness and AI § Pursuit to learn about meaning of CHAR pursuit values.
Dialog from level0_Tools
Also available is the following dialog, which is redundant of CMBT and apparently predates both CHAR and AISA:
| ONI BINARY DATA | 
|---|
| AKVA << Other file types >> CBPI | 
| BINA : Binary data | 
| TMBD << Other BINA >> ONIE | 
| OBJC : Objects | 
| WEAP << Other OBJC >> CMBT | 
| CHAR : Character | 
| Level file | 
