def readSMC(file): data = [] with open(file, "rb") as f: br = BinaryReader(f) dataCount = br.ReadInt() for i in range(dataCount): id = br.ReadInt() if id != 0: meshClass = br.ReadBytesToString(br.ReadInt16(), 'latin1') meshSize = br.ReadInt() meshData = [] for j in range(meshSize): meshNum = br.ReadInt() meshTFNM = br.ReadBytesToString(br.ReadInt16(), 'latin1') texSize = br.ReadInt() meshData.append({ "meshNum": meshNum, "meshPath": meshTFNM, }) texData = [] for k in range(texSize): textureName = br.ReadBytesToString( br.ReadInt16(), 'latin1') texturePath = br.ReadBytesToString( br.ReadInt16(), 'latin1') texData.append({ "texName": textureName, "texPath": texturePath, }) data.append({ "id": id - 1, "model": { "modelName": meshClass, "mesh": meshData, "texture": texData } }) return data
def readAnimation(file): data = [] with open(file, "rb") as f: br = BinaryReader(f) magic = br.ReadBytesToString(4, 'latin1') version = br.ReadInt() animCount = br.ReadInt() for i in range(animCount): skaPath = br.ReadBytesToString(br.ReadInt(), 'latin1') animName = br.ReadBytesToString(br.ReadInt(), 'latin1') fps = br.ReadFloat() numberOfFrames = br.ReadInt() threshold = br.ReadInt() isCompressed = True if br.ReadInt() else False customSpeed = br.ReadInt() bones = [] boneCount = br.ReadInt() for j in range(boneCount): boneName = br.ReadBytesToString(br.ReadInt(), 'latin1') defaultPosition = br.ReadFloatToList(12) positions = [] positionCount = br.ReadInt() for k in range(positionCount): positions.append({ "frame": br.ReadInt16(), "flags": br.ReadInt16(), "position": { "x": br.ReadFloat(), "y": br.ReadFloat(), "z": br.ReadFloat() } }) rotations = [] rotationCount = br.ReadInt() for k in range(rotationCount): rotations.append({ "frame": br.ReadInt16(), "flags": br.ReadInt16(), "position": { "w": br.ReadFloat(), "x": br.ReadFloat(), "y": br.ReadFloat(), "z": br.ReadFloat() } }) offsetLen = br.ReadFloat() bones.append({ "boneName": boneName, "defaultPosition": defaultPosition, # matrix12 "positions": positions, "rotations": rotations, "offsetLen": offsetLen }) data.append({ "skaPath": skaPath, "name": animName, "fps": fps, "frameCount": numberOfFrames, "threshold": threshold, "isCompressed": isCompressed, "customSpeed": customSpeed, "bones": bones, "morphCount": br.ReadInt() }) return {"magic": magic, "version": version, "animations": data}