All pastes #61357 Raw Edit

Anonymous

public python v1 · immutable
#61357 ·published 2006-06-03 17:46 UTC
rendered paste body
#!/usr/bin/pythonimport Image########################################################################################################## class for handling geodata# needs geodata file as param# new_geodata = geodata('filename-without-.dat')#########################################################################################################class geodata:    ####################################################################################################    #    # writes some_string to the logfile and then a linebreak \n    #    ####################################################################################################    def _writel(self,some_string):        self.log_file.write(str(some_string)+'\n')        return 0    ####################################################################################################    #    # writes some_string to the logfile    #    ####################################################################################################    def _write(self,some_string):        self.log_file.write(str(some_string))        return 0    ####################################################################################################    #    # converts bytes hex values    #    ####################################################################################################    def _convert_to_hex(self,some_byte):        if len(some_byte)==0:            return '00'        charval = ord(some_byte)        hexval = hex(charval)        hexstrlen = len(hexval)        startpos = hexstrlen - 2        if hexval[startpos] == 'x':            startpos += 1            hexval = '0'+hexval[startpos]        else:            hexval = hexval[startpos:hexstrlen]        return hexval    ####################################################################################################    #    # test if z is > maxz if yes set maxz = z    #    ####################################################################################################    def _maxz(self,z=None):        if z:            # getting max z            if z!=0:                if self.maxz == None:                    self.maxz = z                else:                    if self.maxz < z:                        self.maxz = z        return self.maxz    ####################################################################################################    #    # test if z is < minz if yes set minz = z    #    ####################################################################################################    def _minz(self,z=None):        if z:            # getting min z            if self.minz == None:                self.minz = z            else:                if self.minz > z:                    self.minz = z        return self.minz                    ####################################################################################################    #    # getz z value from file    #    ####################################################################################################    def _getz(self):        # read bytes        z_2 = self._convert_to_hex(self.conv_file.read(1))        z_1 = self._convert_to_hex(self.conv_file.read(1))        # converts to int                                                                        z = int(z_1+z_2,16)        # get the real z1        if z > 55000:            z = z - 65336        # checking min/max z        self._minz(z)        self._maxz(z)        # return value        return z            ####################################################################################################    #    # block 0000 handler    # z1 min-z z2 max-z    # if z1 != z2 then its a water zone else its a floor    #    ####################################################################################################    def _handle_block0000(self):        # getting the bytes for z1/z2        z1 = self._getz()        z2 = self._getz()        # check if water -- debug output        if z1!=z2:            self._writel(' |- block0000 - Water from ocean floor ' + str(z1) + ' to surface ' + str(z2))        else:            self._writel(' |- block0000 - Floor %s ' %(str(z1)))        return z1,z2    ####################################################################################################    #    # block 0040 handler    #    ####################################################################################################    def _handle_block0040(self):        self._write(" |- block0040 ")        # loop 64 times        for item in range(0,64):            z = self._getz() / 2             # debug output            self._write( str(z)+ ' ')        self._writel('')        return 'foobar'    ####################################################################################################    #    # block 0041 handler    #    ####################################################################################################    def _handle_block0041(self,header):        self._writel(" |- block00"+ header +" ")        z1 = self.conv_file.read(1)        z2 = self.conv_file.read(1)        # loop 64 times        for item in range(0,64):            # get count of layers            layercount = self._getz()            # debug output            self._write(' |-- layercount ' + str(layercount) + ' -- ')            # loop layercount times            for i in range(0,layercount):                z = self._getz() / 2                # debug output                self._write(z)                self._write(' ')            self._writel('')        return 'foobar'    ####################################################################################################    #    # Decodes the geodata    #    ####################################################################################################    def decode(self):        # open files        self.conv_file = open(self.filename+'.dat','rb')        self.log_file  = open(self.filename+'.log','wb')        # the image        self.geoimage = Image.new('RGB', (256,256), (92390))         # will be used soon        self.data_all = {}        # we dont need header for now        self.conv_file.seek(18)        data=[]        # make x loop        for x in range(0,256):            # make y loop            for y in range(0,256):                # debug output                self._writel('x' + str(x) + ' y:' +str(y))                # reads data header                block1 = self.conv_file.read(1)                block2 = self.conv_file.read(1)                block1_hex = self._convert_to_hex(block1)                # handles the data                if block1_hex   == 'ff':                    self._writel("error")                elif block1_hex == '00':                    # get data                    z1,z2 = self._handle_block0000()                    color_value = z1+50000                    self.geoimage.putpixel((x,y),color_value)                    # check for water                    if z1==z2:                        data.append([x,y,z1,'F'])                    else:                        for item in range(z1,z2,32):                            data.append([x,y,item,'W'])                elif block1_hex == '40':                    self._handle_block0040()                elif int(block1_hex,16)>=64 and int(block1_hex,16)<=121:                    self._handle_block0041(block1_hex)                else: self._writel('block00' + block1_hex + ' ???')        # self._writel(str(data))        # debug output        self._writel(' |-- minz = %s' %(str(self._minz())))        self._writel(' |-- maxz = %s' %(str(self._maxz())))        # close files        self.conv_file.close()        self.log_file.close()        self.geoimage.save(self.filename+'.png')        return 'foobar'    def __init__(self,filename):        # init basic vars        self.filename=filename        self.minz=None        self.maxz=None########################################################################################################## Main Function#########################################################################################################field_of_silence = geodata('22_23_conv')field_of_silence.decode()#field_of_silence = geodata('16_22_conv')#field_of_silence.decode()giants_cave = geodata('25_19_conv')giants_cave.decode()tower_of_insolence = geodata('22_22_conv')tower_of_insolence.decode()