import struct, math data = open("content/VIDEO/GEO/TSPHERE.BGF","rb").read() print("file bytes:", len(data)) TAGS = {0x0003:"HEADER",0x0005:"BIZ_DONE",0x0040:"OBJECT",0x0041:"LOD",0x0042:"PATCH", 0x0046:"PMESH",0x0047:"CONN",0x0048:"SPHERE_LIST",0x004d:"PCONN",0x0070:"BOUND", 0x0080:"V_XYZ",0x0081:"V_XYZ_N",0x0082:"V_XYZ_RGBA",0x0088:"V_XYZ_UV",0x0089:"V_XYZ_N_UV", 0x008A:"V_XYZ_RGBA_UV",0x2030:"SV_MATERIAL",0x2037:"SV_SPECIAL",0x2008:"NAME"} CONTAINER={0x0003,0x0070,0x0040,0x0041,0x0042,0x0046,0x0048,0x0010,0x0020,0x0030} verts=[] # (x,y,z,u,v) def parse(p,end,depth): while p+3<=end: tagword=struct.unpack_from("end: return ln=data[p] if lw==1 else (struct.unpack_from("end: return name=TAGS.get(cid,hex(cid)) if cid in (0x0088,0x0089,0x008A,0x0080,0x0081,0x0082): # vertex list stride={0x0080:12,0x0081:24,0x0082:28,0x0088:20,0x0089:32,0x008A:36}[cid] n=ln//stride print(" "*depth+f"{name} verts={n} stride={stride} len={ln}") for i in range(n): off=p+i*stride x,y,z=struct.unpack_from("