import 'dart:typed_data'; import 'package:wolf_dart/classes/matrix.dart'; class VswapParser { /// Extracts the 64x64 wall textures from VSWAP.WL1 static List> parseWalls(ByteData vswap) { // 1. Read Header int chunks = vswap.getUint16(0, Endian.little); int spriteStart = vswap.getUint16(2, Endian.little); // int soundStart = vswap.getUint16(4, Endian.little); // We don't need this yet // 2. Read Offsets (Where does each chunk start in the file?) List offsets = []; for (int i = 0; i < spriteStart; i++) { offsets.add(vswap.getUint32(6 + (i * 4), Endian.little)); } // 3. Extract the Wall Textures List>> textures = []; // Walls are chunks 0 through (spriteStart - 1) for (int i = 0; i < spriteStart; i++) { int offset = offsets[i]; if (offset == 0) continue; // Empty chunk // Walls are always exactly 64x64 pixels (4096 bytes) // Note: Wolf3D stores pixels in COLUMN-MAJOR order (Top to bottom, then left to right) List> texture = List.generate(64, (_) => List.filled(64, 0)); for (int x = 0; x < 64; x++) { for (int y = 0; y < 64; y++) { int byteIndex = offset + (x * 64) + y; texture[x][y] = vswap.getUint8(byteIndex); } } textures.add(texture); } return textures; } }