#!/usr/bin/python2.4
#
# Copyright 2007 The Android Open Source Project
"""Dump Quake ms2 files.
Useful for debugging Quake.
"""
# ms2 file format
# int32 numcommands
# int32 numorder
# int32 commands[numcommands]
# int32 vertexorder[numorder]
#
# Where a command is
#
# >= 0 --> strip(n)
# < 0 --> fan(-n)
# followed by struct { float s; float t; } st[n];
import array
import sys
def readInt32(f):
a = array.array('i')
a.read(f, 1)
return a[0]
def readFloat32(f):
a = array.array('f')
a.read(f, 1)
return a[0]
def dumpms2(path):
f = open(path, "rw")
numCommands = readInt32(f)
numOrder = readInt32(f)
commandIndex = 0
# Seek ahead and read the vertex order information
f.seek(4 + 4 + 4 * numCommands)
vertexOrder = array.array('i')
vertexOrder.read(f, numOrder)
# Read commands
f.seek(4 + 4)
vertexOrderIndex = 0
while commandIndex < numCommands:
cmd = readInt32(f)
commandIndex = commandIndex + 1
if cmd == 0:
break
elif(cmd > 0):
# strip
print "strip ", cmd
for i in range(cmd):
s = readFloat32(f)
t = readFloat32(f)
print "[", i, "] ", vertexOrder[vertexOrderIndex], \
" (", s, ",", t, ")"
commandIndex += 2
vertexOrderIndex += 1
else:
# fan
print "fan ", -cmd
for i in range(-cmd):
s = readFloat32(f)
t = readFloat32(f)
print "[", i, "] ", vertexOrder[vertexOrderIndex], \
" (", s, ",", t, ")"
commandIndex += 2
vertexOrderIndex += 1
f.close()
if __name__ == '__main__':
dumpms2(sys.argv[1])