import struct, collections RES = r"C:\git\nick-games\decomp\BTL4.RES" data = open(RES, "rb").read() labOnly, maxID = struct.unpack_from(" ends: bad += 1; break mlen, mid, mflags = struct.unpack_from(" NextBit=1) rr = resources.get(rid) includes.append(rr.name if rr else "?%d" % rid) else: rr = resources.get(rid) nm = rr.name if rr else ("?rid=%d" % rid) inst[nm] += 1 inst_class[nm] = cls s = solid_member(rid) if s: solid_recs[nm] = s.length // 60 p += (mlen + 3) & ~3 print("\n===== MAP %s (id=%d, %d messages) =====" % (mname, r.rid, count)) if includes: print(" includes:", includes) tot_solids = 0 for nm, c in sorted(inst.items()): sr = solid_recs.get(nm, 0) tot_solids += sr * c print(" %-14s x%-3d class=%-3d solidsRecords=%s" % (nm, c, inst_class[nm], sr if sr else "-")) print(" TOTAL instances=%d, instances-with-solids=%d, total solid records=%d" % (sum(inst.values()), sum(c for nm,c in inst.items() if solid_recs.get(nm)), tot_solids)) # dump key ground solids print("\n\n== key solid stream contents ==") for nm in ["gr100_cv.sld","gr100acv.sld","rfloor_c.sld","afloor~1.sld","hillg1_c.sld","buttea_c.sld","wall1_cv.sld","bld08_cv.sld"]: rs = [r for r in resources.values() if r.rtype == 9 and r.name == nm] if not rs: print(nm, "NOT FOUND"); continue r = rs[0] print("\n-- %s (%d records)" % (nm, r.length//60)) for se, sl, st, mt in decode_solids(r)[:6]: print(" type=%-10s mat=%d solidExt X[%g,%g] Y[%g,%g] Z[%g,%g]" % (SOLID_TYPES.get(st,st), mt, se[0],se[1],se[2],se[3],se[4],se[5]))