All pastes #60709 Raw Edit

Mine

public text v1 · immutable
#60709 ·published 2006-06-01 19:03 UTC
rendered paste body
class geodata:
########################################################################################################
#
# class for handling geodata
# needs geodata file as param
# new_geodata = geodata('filename-without-.dat')
#
########################################################################################################

    def _writel(self,some_string):
    ####################################################################################################
    #
    # writes some_string to the logfile
    #
    ####################################################################################################
        self.log_file.write(str(some_string)+'\n')
        return 0

    def _write(self,some_string):
    ####################################################################################################
    #
    # writes some_string to the logfile
    #
    ####################################################################################################
        self.log_file.write(str(some_string))
        return 0


    def _convert_to_hex(self,some_string):
    ####################################################################################################
    #
    # converts some_string to his hex values
    #
    ####################################################################################################
        if len(some_string)==0:
            return '00'
        charval = ord(some_string)
        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


    def _handle_block0000(self):
    ####################################################################################################
    #
    # block 0000 handler
    # z1 min-z z2 max-z
    # if z1 != z2 then its a water zone else its a floor
    #
    ####################################################################################################
        self._write(" |- block0000 ")        
        z1_1 = self.conv_file.read(1)
        z1_2 = self.conv_file.read(1)
        z2_1 = self.conv_file.read(1)
        z2_2 = self.conv_file.read(1)
        z1 = str(self._convert_to_hex(z1_2) + self._convert_to_hex(z1_1))
        z2 = str(self._convert_to_hex(z2_2) + self._convert_to_hex(z2_1))
        self._write(z1)
        self._write(z2)
        self._writel('')
        if z1!=z2:
            self._writel(' |-- Water from floor '+str(int(z2,16))+' to surface '+str(int(z1,16)))
        return z1,z2


    def _handle_block0040(self):
    ####################################################################################################
    #
    # block 0040 handler
    #
    ####################################################################################################
        self._write(" |- block0040 ")
        for item in range(0,64):
            z1_1 = self.conv_file.read(1)
            z1_2 = self.conv_file.read(1)
            self._write(self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))
        self._writel('')
        return 0


    def _handle_block0041(self):
    ####################################################################################################
    #
    # block 0041 handler
    #
    ####################################################################################################
        self._write(" |- block0041 ")
        for item in range(0,128):
            #layer = 0
            z1 = self.conv_file.read(1)
            z2 = self.conv_file.read(1)
            #self._write(' header: ')
            self._write(self._convert_to_hex(z1))
            self._write(self._convert_to_hex(z2))
            #self._write(' data: ')
            layercounter  = int(self._convert_to_hex(z2)+self._convert_to_hex(z1),16)
            #self._writel(" |--- layercounter:" + str(layercounter))
            layer = 0
            for item2 in range(0,layercounter):
                #self._writel(" |---- layer:" + str(layer))
                z1_1 = self.conv_file.read(1)
                z1_2 = self.conv_file.read(1)
                self._write(self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))
                layer+=1
        self._writel('')
        return 0


    def decode(self):
    ####################################################################################################
    #
    # Decodes the geodata
    #
    ####################################################################################################
        self.conv_file = open(self.filename+'.dat','r')
        self.csv_file  = open(self.filename+'.csv','w')
        self.log_file  = open(self.filename+'.log','w')
        self.data_all = {}
        self.conv_file.seek(18) # header dont need that currently
        data=[]
        for x in range(0,256):
            #self._writel('x:'+str(x))
            for y in range(0,256):
                self._writel('x' + str(x) + ' y:' +str(y))
                block1 = self.conv_file.read(1)
                block2 = self.conv_file.read(1)        
                block2_hex = self._convert_to_hex(block1)
                if block2_hex   == 'ff': self._writel("error")
                elif block2_hex == '00':
                    z1,z2 = self._handle_block0000()
                    if z1==z2:
                        data.append([x,y,int(z1,16),'F'])
                    else:
                        for item in range(int(z1,16),int(z2,16),32):
                            data.append([x,y,int(item),'W'])
                elif block2_hex == '40': self._handle_block0040()
                else: self._handle_block0041()
        self._writel(str(data))
        self.conv_file.close()
        self.csv_file.close()
        self.log_file.close()
        return 0

    def __init__(self,filename):
        self.filename=filename

########################################################################################################
#
# Main Function
#
########################################################################################################

field_of_silence = geodata('22_23_conv')
field_of_silence.decode()

giants_cave = geodata('25_19_conv')
giants_cave.decode()

tower_of_insolence = geodata('23_18_conv')
tower_of_insolence.decode()