import sys import re import math vertexmatcher = re.compile(r"v (.*?) (.*?) (.*)") trimatcher = re.compile(r"f (.*?) (.*?) (.*)") quadmatcher = re.compile(r"f (.*?) (.*?) (.*?) (.*)") indexmatcher = re.compile(r"([0-9]*)\/\/([0-9]*)") def getvindex(indexline): vindexmatch = indexmatcher.match(indexline) if vindexmatch: return vindexmatch.group(1) else: return indexline filenamematcher = re.compile(r"(.*)\..*?$") filenamematcher2 = re.compile(r".*[/\\](.*?)$") objfile = open(sys.argv[1]) filenamematch = filenamematcher.match(sys.argv[1]) outputname = filenamematch.group(1) objnamematch = filenamematcher2.match(filenamematch.group(1)) objname = objnamematch.group(1) vertices = [] fifoObjects = [] class FifoObject: def __init__(self): self.command = "" self.data = [] while 1: line = objfile.readline() if not line: break vertexmatch = vertexmatcher.match(line) if vertexmatch: vertices.append((vertexmatch.group(1), vertexmatch.group(2), vertexmatch.group(3))) continue quadmatch = quadmatcher.match(line) if quadmatch: fifoObject = FifoObject() fifoObject.command = "FIFO_BEGIN" fifoObject.data.append("GL_QUAD") fifoObjects.append(fifoObject) for i in range(1,4+1): fifoObject = FifoObject() fifoObject.command = "FIFO_VERTEX16" vertex = vertices[int(getvindex(quadmatch.group(i)))-1] fifoObject.data.append("VERTEX_PACK(floattov16(" + vertex[0] + "), floattov16(" + vertex[1] + "))") fifoObject.data.append("VERTEX_PACK(floattov16(" + vertex[2] + "), 0)") fifoObjects.append(fifoObject) continue # do the crazy fifocommand packing while (len(fifoObjects) % 4) > 0: fifoObject = FifoObject() fifoObject.command = "FIFO_END" fifoObjects.append(fifoObject) #fifopack = [] #fifocounter = 0 #while fifocounter < len(fifocommand): # fifopack.append("FIFO_COMMAND_PACK(" + fifocommand[fifocounter] + ", " # + fifocommand[fifocounter + 1] + ", " # + fifocommand[fifocounter + 2] + ", " # + fifocommand[fifocounter + 3] + ")") # fifocounter += 4 #i = 0 #datacounter = 0 #print len(fifodata) #for packedcommand in fifopack: # cfile.write(", \n" + packedcommand) # datasubcounter = 0 # while datasubcounter < 4: # print datacounter # cfile.write(", " + fifodata[datacounter]) # if fifodata[datacounter].startswith("VERTEX_PACK"): # datacounter += 1 # cfile.write(", " + fifodata[datacounter]) # datasubcounter += 1 # datacounter += 1 finaloutput = "" length = 0 for i in range(0,len(fifoObjects)): if (i % 4) == 0: finaloutput += (", FIFO_COMMAND_PACK(" + fifoObjects[i].command + ", " + fifoObjects[i + 1].command + ", " + fifoObjects[i + 2].command + ", " + fifoObjects[i + 3].command + ")") length += 1 for data in fifoObjects[i].data: finaloutput += ", " + data length += 1 # interleave it all together cfile = open(outputname + "Model.c", 'w') cfile.write("// created by AWESOME SCRIPT!\n") cfile.write("#include \n") cfile.write("const u32 " + objname + "Model[] = { " + str(length)) cfile.write(finaloutput) cfile.write(" };") hfile = open(outputname + "Model.h", 'w') hfile.write("extern const u32 " + objname + "Model[];\n")