OBD:AKVA: Difference between revisions

From OniGalore
Jump to navigation Jump to search
m (nearly final revision ^^)
m (woohoops, forgot how to transclude ^^)
Line 161: Line 161:
:Those occur when smaller BNVs are completely included into larger ones.
:Those occur when smaller BNVs are completely included into larger ones.
:The bigger BNV only links to its first child. If there are several children, the sibling link is used to define the series.
:The bigger BNV only links to its first child. If there are several children, the sibling link is used to define the series.
::Examples: lobby in {{{C3}}} (level3), big hall under main power line in {{{C8}}} (level10).
::Examples: lobby in {{C3}} (level3), big hall under main power line in {{C8}} (level10).
;0x1C - Pathfinding grid
;0x1C - Pathfinding grid
:The RAW format is rather complex (see [[OBD:AKVA 0|HERE]]). It requires the X and Z size for parsing.
:The RAW format is rather complex (see [[OBD:AKVA 0|HERE]]). It requires the X and Z size for parsing.

Revision as of 23:58, 19 April 2007

ONI BINARY DATA
AKOT << Other file types >> BINA
AKVA : BNV Node Array
switch to XML:AKVA page
Overview @ Oni Stuff
OBD.png

BNVs are volumes that have a pathfinding grid assigned to them.
The grid itself is in the RAW, while its overall parameters are in the DAT.
  • Child AKBP tree refines the volume after the AABB is checked
  • Child AKBA defines the "sides" needed by the pathfinding graph


akva_a.gif


Hex Translation Meaning
01 4E 02 00 590 00590-.AKVA
01 00 00 06 3 level 3
AD DE dead not used
1E 01 00 00 286 286 BNV nodes in array
First BNV node (black outline)
00 00 00 00 0 index into AKBP array : BSP tree for this BNV
00 00 00 00 0 BNV's ID (same as index in array)
00 00 00 00 0 index into AKBA array : "side" range start
06 00 00 00 6 index into AKBA array : "side" range end
FF FF FF FF -1 index in array of child BNV
FF FF FF FF -1 index in array of sibling BNV
FF FF FF FF -1 unknown, always -1
C9 00 00 00 201 size of the pathfinding grid along x : 201 tiles
16 00 00 00 22 size of the pathfinding grid along z : 22 tiles
A0 3A 47 00 0x473AA0 offset of the pathfinding grid data in the RAW file : 0x473AA0
F7 01 00 00 503 size of the pathfinding grid data in the RAW file : 503 bytes
00 00 80 40 4.000000 tile size of the pathfinding grid
00 00 20 41 10.000000 AABB X-
00 00 58 C1 -13.500000 AABB Y-
00 80 2A C4 -682.000000 AABB Z-
00 40 47 44 797.000000 AABB X+
00 00 22 42 40.500000 AABB Y+
00 00 19 C4 612.000000 AABB Z+
FE FF 64534 unknown, always -2
FE FF 64534 unknown, always -2
00 00 00 00 0 BNV's ID again
00 00 00 00 0 unknown, always 0
00 00 00 00 0 unknown, always 0
00 00 00 00 0 unknown, always 0 (was a raw file offset once?)
04 00 00 00 4 bit 4 always set, bit 1 set if "sloped", bit 16 see below
00 00 00 00 0.000000 if "sloped", x-component of floor/ceiling normal
00 00 00 00 0.000000 if "sloped", y-component of floor/ceiling normal
00 00 00 00 0.000000 if "sloped", z-component of floor/ceiling normal
00 00 00 00 0.000000 if "sloped", distance of floor plane to origin
00 00 00 00 0.000000 if "sloped", distance of ceiling plane to origin
0x00 - AKBP tree
This binary space partition (BSP) tree is used for a refined check against a character's position.
0x08 - AKBA range
The "sides" of a BNV define the quads by which an AI can transit to adjacent BNVs.
0x10 - Children and siblings
Those occur when smaller BNVs are completely included into larger ones.
The bigger BNV only links to its first child. If there are several children, the sibling link is used to define the series.
Examples: lobby in CHAPTER 03 . PUZZLE PIECES (level3), big hall under main power line in CHAPTER 08 . AN INNOCENT LIFE (level10).
0x1C - Pathfinding grid
The RAW format is rather complex (see HERE). It requires the X and Z size for parsing.
BNV 165 in level4 (far side of tarmac, behind the fence) has a non-zero X-Z grid size but no RAW data.
Notably, that one BNV also has the 16 flag set at 0x5C (see below).
The grid usually "bleeds" outside the (x,z) extent of the BNV.
The amount of bleeding is defined by the grid's size (in tiles) and by the size of a tile.
The grid seems to be always centered of the "floor" of the BNV's AABB (see above).
0x30 - AABB
The axis-aligned bounding boxes are used for a first, quick check against a character's position.
(note that the AKVA itself is looked up via the octtree: 2nd IDXA of the AKOT + OTLF)
0x5C - Floor and ceiling
Bitset:
  • the 4 bit is always set (meaning unknown)
  • the 16 bit is set only for BNV 165 of level4 (no RAW part, see above)
  • the 1 bit is set for BNVs involving "sloped" floors and ceilings
(typical environment requiring this feature is compact staircases)
The sloped floor and ceiling are used to apply a final cut to the volume defined by the AKBP tree
(the walls of which are typically vertical (possibly not axis-aligned) and horizontal)
When the "sloped" bit isn't set, all 5 floats are always zero (and are probably ignored anyway).
The 3 power lines in level10 have all 5 floats equal to zero even though the "sloped" bit is set
(possibly a design error: interestingly, BNV detection and pathfinding work fine for those 3).



ONI BINARY DATA
AKOT << Other file types >> BINA
AKVA : BNV Node Array
Level file