rendered paste bodyclass 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._writel(" |- 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))
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._writel("block0040")
for item in range(0,64):
z1_1 = self.conv_file.read(1)
z1_2 = self.conv_file.read(1)
self._writel(self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))
return 0
def _handle_block0041(self):
####################################################################################################
#
# block 0041 handler
#
####################################################################################################
self._writel("block0041")
for item in range(0,128):
#layer = 0
z1 = self.conv_file.read(1)
z2 = self.conv_file.read(1)
self._writel('header')
self._write(self._convert_to_hex(z1))
self._write(self._convert_to_hex(z2))
self._writel('')
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._writel("--" + self._convert_to_hex(z1_1) + self._convert_to_hex(z1_2))
layer+=1
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()