Previous File TypeAKVA FILENext File Type
BNV Node Array - Level File

HexTranslationMeaning
01 4E 02 0059000590-.AKVA
01 00 00 063level 3
AD DEdeadnot used
1E 01 00 00286286 packages follow (one package is edged in black)
Below follows the first package. (Thanks to geyser who figured nearly all out.)
00 00 00 000AKBP package number; BSP tree for this BNV
00 00 00 000BNV's ID (same as package number above)
00 00 00 000from AKBA package number ("side" range start)
06 00 00 006to AKBA package number ("side" range end)
FF FF FF FF-1AKVA child package number (Thanks to geyser.)
FF FF FF FF-1AKVA sibling package number (Thanks to geyser.)
FF FF FF FF-1unknown; always the same
C9 00 00 00201amount of grid tiles in x-position (Thanks to geyser.)
16 00 00 0022amount of grid tiles in z-position (Thanks to geyser.)
A0 3A 47 0047 3A A0from this position starts the pathfinding grid part in the raw file
F7 01 00 00503503 bytes; size of the pathfinding grid part in the raw file
00 00 80 404.000000size of a grid tile (Thanks to geyser.)
00 00 20 4110.000000min. x-coordinate of the grid volume (Thanks to geyser.)
00 00 58 C1-13.500000min. y-coordinate (height) of the grid volume (Thanks to geyser.)
00 80 2A C4−682.000000min. z-coordinate of the grid volume (Thanks to geyser.)
00 40 47 44797.000000max. x-coordinate of the grid volume (Thanks to geyser.)
00 00 22 4240.500000max. y-coordinate (height) of the grid volume (Thanks to geyser.)
00 00 19 C4-612.000000max. z-coordinate of the grid volume (Thanks to geyser.)
FE FF-2unknown; always the same
FE FF-2unknown; always the same
00 00 00 000BNV's ID again
00 00 00 000unknown; always zero
00 00 00 000unknown; always zero
00 00 00 000unknown; always zero (was it a raw file offset once?)
04 00 00 004identifier for the next five floats: the following identifiers are used in level 3 (other levels not checked; values in dec):

4 - grid lays on a straight plane (floats not used; all zero)
5 - grid lays on an inclined plane (floats are used)

00 00 00 000.000000x-value of the floor/ceiling normal
00 00 00 000.000000x-value of the floor/ceiling normal
00 00 00 000.000000z-value of the floor/ceiling normal
00 00 00 000.000000distance of floor plane to origin (Thanks to geyser.)
00 00 00 000.000000distance of ceiling plane to origin (Thanks to geyser.)

General 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 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 3 : PUZZLE PIECES (level3), big hall under main power line in Chapter 8 : 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).


Previous File TypeBack to File TypesNext File Type

Back to main page