Python Map Parser

import struct import string import glob

up = struct.unpack
 * 1) for code brevity

PMS_Vertex = 0 PMS_Vector = 1 PMS_Type = 2

class pmsMap: 'Soldat PMS reading class' def __init__(self, fileName): self.fileName = fileName f = file(fileName, 'rb') self.version = up('l', f.read(4))[0] self.descLen = up('B', f.read(1))[0] self.desc = ''.join(up("c"*self.descLen, f.read(self.descLen))) # discard fillers -- 1 is for os.SEEK_CUR f.seek(38 - self.descLen, 1) self.textureLen = up('B', f.read(1))[0] self.texture = ''.join(up("c"*self.textureLen, f.read(self.textureLen))) # discard filler f.seek(24 - self.textureLen, 1) self.bgColorTop = up("B"*4, f.read(4)) self.bgColorBottom = up("B"*4, f.read(4)) self.jetAmount = up('l', f.read(4))[0] self.grenades = up('B', f.read(1))[0] self.medkits = up('B', f.read(1))[0] self.weatherType = up('B', f.read(1))[0] self.stepsType = up('B', f.read(1))[0] self.randID = up('l', f.read(4))[0] self.polyCount = up('l', f.read(4))[0] self.polygons = [] for i in range(0, self.polyCount): self.polygons.append( (((up('ffff', f.read(4*4)), up('B'*4, f.read(4)), up('ff', f.read(4*2))) # three vertex                                , (up('ffff', f.read(4*4)), up('B'*4, f.read(4)), up('ff', f.read(4*2)))                                  , (up('ffff', f.read(4*4)), up('B'*4, f.read(4)), up('ff', f.read(4*2)))) , (up('fff', f.read(4*3)), up('fff', f.read(4*3)), up('fff', f.read(4*3))) , up('B', f.read(1))[0] )) # polygons shall be accessed: #  polygons[id][PMS_Vertex][0-3] #  polygons[id][PMS_Vector][0-3] #  polygons[id][PMS_Type] # the rest--- f.close

maps = glob.glob('c:/soldat_def/maps/*.PMS') for map in maps: m = pmsMap(map) print m.fileName + ' => ' + m.texture