MCPcopy Create free account
hub / github.com/JRickey/BattleShip / analyze_mobjsub

Function analyze_mobjsub

tools/verify_struct_byteswap.py:232–279  ·  view source on GitHub ↗

Parse first few fields of MObjSub from big-endian data.

(data, offset, label="MObjSub")

Source from the content-addressed store, hash-verified

230
231
232def 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
282def main():

Callers

nothing calls this directly

Calls 4

read_be_u8Function · 0.85
read_be_f32Function · 0.85
read_be_u16Function · 0.70
read_be_u32Function · 0.70

Tested by

no test coverage detected