Collision sits inside core_data at the offset the core index gives, behind a 0x40-byte header that self-describes: it carries its own size and the payload size. That pairing is the invariant -- the declared header size is exactly 0x40 on all 27 levels and header + payload stays inside the lump. 41,481,520 payload bytes across the 19 levels that have any; 8 declare zero length, which is present-but-empty rather than absent, so the two are counted separately. The cells inside the payload are not decoded. They do not walk as fixed-stride cells, and treating faces as variable-length records stops partway into the first cell on level 0 rather than tiling the payload. The first cell reads as 11 verts and 33 faces under every hypothesis tried, which is exactly the kind of agreement that looks like a result and is not one -- three different strides all produce the same first cell and all of them are wrong. Left open rather than committed as a guess.
15 lines
246 B
Rust
15 lines
246 B
Rust
pub mod buf;
|
|
pub mod collision;
|
|
pub mod global_wad;
|
|
pub mod iso9660;
|
|
pub mod level_core;
|
|
pub mod level_data;
|
|
pub mod level_wad;
|
|
pub mod occlusion;
|
|
pub mod sound_bank;
|
|
pub mod texture;
|
|
pub mod tfrag;
|
|
pub mod tfrag_light;
|
|
pub mod tie;
|
|
pub mod wad;
|