Parse first few fields of MObjSub from big-endian data.
(data, offset, label="MObjSub")
| 230 | |
| 231 | |
| 232 | def analyze_mobjsub(data, offset, label="MObjSub"): |
| 233 | """Parse first few fields of MObjSub from big-endian data.""" |
| 234 | print(f"\n {label} at blob offset 0x{offset:04X}") |
| 235 | print(f" {'-'*60}") |
| 236 | |
| 237 | d = data |
| 238 | o = offset |
| 239 | |
| 240 | # Word 0: u16 pad00, u8 fmt, u8 siz |
| 241 | pad00 = read_be_u16(d, o+0) |
| 242 | fmt = read_be_u8(d, o+2) |
| 243 | siz = read_be_u8(d, o+3) |
| 244 | print(f" {'pad00':<16} 0x{pad00:04X} {'fmt':<8} {fmt} {'siz':<8} {siz}") |
| 245 | print(f" Word 0 needs bswap32_undo (mixed u16+u8)") |
| 246 | |
| 247 | # Word 1: u32 sprites (token) |
| 248 | sprites = read_be_u32(d, o+4) |
| 249 | print(f" {'sprites (tok)':<16} 0x{sprites:08X} — u32 ok") |
| 250 | |
| 251 | # Words 2-3: u16 unk08/unk0A, u16 unk0C/unk0E |
| 252 | unk08 = read_be_u16(d, o+8) |
| 253 | unk0A = read_be_u16(d, o+10) |
| 254 | unk0C = read_be_u16(d, o+12) |
| 255 | unk0E = read_be_u16(d, o+14) |
| 256 | print(f" {'unk08':<8} {unk08:<6} {'unk0A':<8} {unk0A:<6} {'unk0C':<8} {unk0C:<6} {'unk0E':<8} {unk0E}") |
| 257 | print(f" Words 2-3 need rotate16 (u16 pairs)") |
| 258 | |
| 259 | # Word 4: s32 unk10 |
| 260 | unk10 = struct.unpack_from(">i", d, o+16)[0] |
| 261 | print(f" {'unk10':<16} {unk10} — s32 ok") |
| 262 | |
| 263 | # Words 5-10: f32 trau, trav, scau, scav, unk24, unk28 |
| 264 | trau = read_be_f32(d, o+20) |
| 265 | trav = read_be_f32(d, o+24) |
| 266 | scau = read_be_f32(d, o+28) |
| 267 | scav = read_be_f32(d, o+32) |
| 268 | print(f" trau={trau:.2f} trav={trav:.2f} scau={scau:.2f} scav={scav:.2f} — f32 ok") |
| 269 | |
| 270 | # Word 11: u32 palettes (token) at offset 0x2C |
| 271 | palettes = read_be_u32(d, o+0x2C) |
| 272 | print(f" {'palettes (tok)':<16} 0x{palettes:08X} — u32 ok") |
| 273 | |
| 274 | # Word 12: u16 flags, u8 block_fmt, u8 block_siz at offset 0x30 |
| 275 | flags = read_be_u16(d, o+0x30) |
| 276 | block_fmt = read_be_u8(d, o+0x32) |
| 277 | block_siz = read_be_u8(d, o+0x33) |
| 278 | print(f" {'flags':<8} 0x{flags:04X} {'block_fmt':<12} {block_fmt} {'block_siz':<12} {block_siz}") |
| 279 | print(f" Word 12 needs special handling (u16 + 2xu8)") |
| 280 | |
| 281 | |
| 282 | def main(): |
nothing calls this directly
no test coverage detected