Jump to content

OBD:AKVA: Difference between revisions

102 bytes added ,  30 November 2025
m
wording; removed redundant wikilinks
m (contrary to Windows' claims, these are not "RAW" and "DAT" files)
m (wording; removed redundant wikilinks)
 
(One intermediate revision by one other user not shown)
Line 2: Line 2:




[[image:akva_a.gif]]
[[Image:akva_a.gif]]




Line 10: Line 10:
{{OBDtr| 0x04 | lev_id  |FFFF00| 01 00 00 06 | 3    | level 3 }}
{{OBDtr| 0x04 | lev_id  |FFFF00| 01 00 00 06 | 3    | level 3 }}
{{OBDtr| 0x08 | char[20] |00FF00| AD DE      | dead  | unused }}
{{OBDtr| 0x08 | char[20] |00FF00| AD DE      | dead  | unused }}
{{OBDtr| 0x1C | int32    |00FFFF| 1E 01 00 00 | 10000 | array size }}
{{OBDtr| 0x1C | uint32  |00FFFF| 1E 01 00 00 | 10000 | array size }}
{{OBDtrBK}}
{{OBDtrBK}}
{{OBDtr| 0x00 | int32    |FFC8C8| 00 00 00 00 | 0        | index into [[OBD:AKBP|AKBP]] array; BSP tree for this BNV }}
{{OBDtr| 0x00 | uint32  |FFC8C8| 00 00 00 00 | 0        | index into [[OBD:AKBP|AKBP]] array; BSP tree for this BNV }}
{{OBDtr| 0x04 | int32    |FFFFC8| 00 00 00 00 | 0        | BNV's ID (same as index in array) }}
{{OBDtr| 0x04 | uint32  |FFFFC8| 00 00 00 00 | 0        | BNV's ID (same as index in array) }}
{{OBDtr| 0x08 | int32    |C8FFC8| 00 00 00 00 | 0        | index into [[OBD:AKBA|AKBA]] array; "side" range start }}
{{OBDtr| 0x08 | uint32  |C8FFC8| 00 00 00 00 | 0        | index into [[OBD:AKBA|AKBA]] array; "side" range start }}
{{OBDtr| 0x0C | int32    |C8FFC8| 06 00 00 00 | 6        | index into [[OBD:AKBA|AKBA]] array; "side" range end }}
{{OBDtr| 0x0C | uint32  |C8FFC8| 06 00 00 00 | 6        | index into [[OBD:AKBA|AKBA]] array; "side" range end }}
{{OBDtr| 0x10 | int32    |C8FFFF| FF FF FF FF | -1        | index in array of child BNV }}
{{OBDtr| 0x10 | uint32  |C8FFFF| FF FF FF FF | -1        | index in array of child BNV }}
{{OBDtr| 0x14 | int32    |C8FFFF| FF FF FF FF | -1        | index in array of sibling BNV }}
{{OBDtr| 0x14 | uint32  |C8FFFF| FF FF FF FF | -1        | index in array of sibling BNV }}
{{OBDtr| 0x18 | int32    |C8FFFF| FF FF FF FF | -1        | runtime only }}
{{OBDtr| 0x18 | uint32  |C8FFFF| FF FF FF FF | -1        | path node index; runtime only }}
{{OBDtr| 0x1C | int32    |FFC8FF| C9 00 00 00 | 201      | size of the pathfinding grid along x in tiles }}
{{OBDtr| 0x1C | uint32  |FFC8FF| C9 00 00 00 | 201      | size of the pathfinding grid along x in tiles }}
{{OBDtr| 0x20 | int32    |FFC8FF| 16 00 00 00 | 22        | size of the pathfinding grid along z in tiles }}
{{OBDtr| 0x20 | uint32  |FFC8FF| 16 00 00 00 | 22        | size of the pathfinding grid along z in tiles }}
{{OBDtr| 0x24 | offset  |FFC800| A0 3A 47 00 |00 47 3A A0| at this position starts the pathfinding grid part in the raw file }}
{{OBDtr| 0x24 | offset  |FFC800| A0 3A 47 00 |00 47 3A A0| offset of pathfinding grid data in the raw file }}
{{OBDtr| 0x28 | int32    |C800C8| F7 01 00 00 | 503      | size of the pathfinding grid part in the raw file in bytes }}
{{OBDtr| 0x28 | uint32  |C800C8| F7 01 00 00 | 503      | size of data in the raw file }}
{{OBDtr| 0x2C | float    |C87C64| 00 00 80 40 | 4.000000  | tile size of the pathfinding grid }}
{{OBDtr| 0x2C | float    |C87C64| 00 00 80 40 | 4.000000  | tile size of the pathfinding grid (in AutoCAD units) }}
{{OBDtr| 0x30 | float    |B0C3D4| 00 00 20 41 | 10.000000 | AABB X- (AABB <nowiki>=</nowiki> Axis-aligned bounding box) }}
{{OBDtr| 0x30 | float    |B0C3D4| 00 00 20 41 | 10.000000 | [[OBD:Data types#AABB|AABB]] X- }}
{{OBDtr| 0x34 | float    |B0C3D4| 00 00 58 C1 | -13.500000| AABB Y- }}
{{OBDtr| 0x34 | float    |B0C3D4| 00 00 58 C1 | -13.500000| AABB Y- }}
{{OBDtr| 0x38 | float    |B0C3D4| 00 80 2A C4 |−682.000000| AABB Z- }}
{{OBDtr| 0x38 | float    |B0C3D4| 00 80 2A C4 |−682.000000| AABB Z- }}
Line 32: Line 32:
{{OBDtr| 0x48 | int16    |FFDDDD| FE FF      | -2        | grid x origin (in tiles) }}
{{OBDtr| 0x48 | int16    |FFDDDD| FE FF      | -2        | grid x origin (in tiles) }}
{{OBDtr| 0x4A | int16    |FFDDDD| FE FF      | -2        | grid z origin (in tiles) }}
{{OBDtr| 0x4A | int16    |FFDDDD| FE FF      | -2        | grid z origin (in tiles) }}
{{OBDtr| 0x4C | int32    |64AAAA| 00 00 00 00 | 0        | BNV's ID again }}
{{OBDtr| 0x4C | uint32  |64AAAA| 00 00 00 00 | 0        | parent BNV ID (same as current BNV ID, if no parent?) }}
{{OBDtr| 0x50 | int32    |EBEBEB| 00 00 00 00 | 0        | runtime only }}
{{OBDtr| 0x50 | uint32  |EBEBEB| 00 00 00 00 | 0        | debug render time; debug only; runtime only }}
{{OBDtr| 0x54 | int32    |EBEBEB| 00 00 00 00 | 0        | path debug info size }}
{{OBDtr| 0x54 | uint32  |EBEBEB| 00 00 00 00 | 0        | path debug info size; always 0, unless imported with "-pathdebug" through original importer }}
{{OBDtr| 0x58 | int32    |EBEBEB| 00 00 00 00 | 0        | path debug info offset (in the raw file) }}
{{OBDtr| 0x58 | uint32  |EBEBEB| 00 00 00 00 | 0        | path debug info offset (in the raw file) }}
{{OBDtr| 0x5C | int32    |8C8CCC| 04 00 00 00 | 4        | flags; used values:
{{OBDtr| 0x5C | int32    |8C8CCC| 04 00 00 00 | 4        | flags; used values:
:0x'''01''' 00 00 00 - sloped floor  
:0x'''01''' 00 00 00 - sloped floor  
Line 50: Line 50:
;General
;General
:BNVs are volumes that have a [[OBD:AKVA/0x24|pathfinding grid]] assigned to them. The grid itself is in the raw file, while its overall parameters are in the .dat file.
:BNVs are volumes that have a [[OBD:AKVA/0x24|pathfinding grid]] assigned to them. The grid itself is in the raw file, while its overall parameters are in the .dat file.
:The usual volume is a right prism (or an oblique prism if the foor is sloped) but there are a few BNVs that are a bit more complex. There's not limit to the number of faces a volume can have but it's probably better to keep this number low. Most BNVs are convex but concave BNVs work too (level2 has some).
:The usual volume is a right prism (or an oblique prism if the floor is sloped) but there are a few BNVs that are a bit more complex. There's not limit to the number of faces a volume can have but it's probably better to keep this number low. Most BNVs are convex but concave BNVs work too (level2 has some).
:The horizontal BNVs never overlap (that might work but it's probably useless) but a sloped BNV can overlap a horizontal one (for example some stairs that are placed in the middle of a floor, see first stairs in level 2). This means that it is possible to have ghost quads placed inside a BNV instead of on an edge. It is unknown if the engine checks that while moving inside a BNV such a ghost quad is interesected.
:The horizontal BNVs never overlap (that might work but it's probably useless) but a sloped BNV can overlap a horizontal one (for example some stairs that are placed in the middle of a floor, see first stairs in level 2). This means that it is possible to have ghost quads placed inside a BNV instead of on an edge. It is unknown if the engine checks that while moving inside a BNV such a ghost quad is interesected.
:It should be noted that the floor of a BNV doesn't always match the visible geometry. Common examples are sidewalks (sometimes they're included in the street's BNV which has a lower floor), stairs and the power lines in level 10.
:It should be noted that the floor of a BNV doesn't always match the visible geometry. Common examples are sidewalks (sometimes they're included in the street's BNV which has a lower floor), stairs and the power lines in level 10.
Line 61: Line 61:
;0x08 - [[OBD:AKBA|AKBA]] range
;0x08 - [[OBD:AKBA|AKBA]] range
:The "sides" of a BNV define the quads (invisible "ghost" quads, see [[AGQG]] flags and [[AKAA]]) by which an AI can transit to adjacent BNVs. These quads are used to create "connections" between the pathfinding graph's nodes. It appears that such a connection is one way only so if 2 BNVs are adjacent then each should have a transition quad that connects it to the other.
:The "sides" of a BNV define the quads (invisible "ghost" quads, see [[AGQG]] flags and [[AKAA]]) by which an AI can transit to adjacent BNVs. These quads are used to create "connections" between the pathfinding graph's nodes. It appears that such a connection is one way only so if 2 BNVs are adjacent then each should have a transition quad that connects it to the other.
:Tipically the base of a ghost quad is in the same plane as the floor but there are some exceptions. It seems that it is possible for the ghost quad to be a above the floor (like for a sidewalk).
:Typically the base of a ghost quad is in the same plane as the floor but there are some exceptions. It seems that it is possible for the ghost quad to be a above the floor (like for a sidewalk).