* tabs to spaces

master
Nils Dagsson Moskopp 2011-06-02 17:13:00 +02:00
parent b11f08d5d2
commit 74fd1756c2
1 changed files with 185 additions and 185 deletions

View File

@ -12,7 +12,7 @@
# Requires Python Imaging Library: http://www.pythonware.com/products/pil/ # Requires Python Imaging Library: http://www.pythonware.com/products/pil/
# Some speed-up: ...lol, actually it slows it down. # Some speed-up: ...lol, actually it slows it down.
#import psyco ; psyco.full() #import psyco ; psyco.full()
#from psyco.classes import * #from psyco.classes import *
import zlib import zlib
@ -22,36 +22,36 @@ import string
import time import time
def hex_to_int(h): def hex_to_int(h):
i = int(h,16) i = int(h,16)
if(i > 2047): if(i > 2047):
i-=4096 i-=4096
return i return i
def hex4_to_int(h): def hex4_to_int(h):
i = int(h,16) i = int(h,16)
if(i > 32767): if(i > 32767):
i-=65536 i-=65536
return i return i
def int_to_hex3(i): def int_to_hex3(i):
if(i < 0): if(i < 0):
return "%03X" % (i + 4096) return "%03X" % (i + 4096)
else: else:
return "%03X" % i return "%03X" % i
def int_to_hex4(i): def int_to_hex4(i):
if(i < 0): if(i < 0):
return "%04X" % (i + 65536) return "%04X" % (i + 65536)
else: else:
return "%04X" % i return "%04X" % i
def limit(i,l,h): def limit(i,l,h):
if(i>h): if(i>h):
i=h i=h
if(i<l): if(i<l):
i=l i=l
return i return i
# Fix these! # Fix these!
path="../map/" path="../map/"
output="map.png" output="map.png"
@ -65,8 +65,8 @@ sector_zmax = 1000/16
colors = {} colors = {}
f = file("colors.txt") f = file("colors.txt")
for line in f: for line in f:
values = string.split(line) values = string.split(line)
colors[int(values[0])] = (int(values[1]), int(values[2]), int(values[3])) colors[int(values[0])] = (int(values[1]), int(values[2]), int(values[3]))
f.close() f.close()
xlist = [] xlist = []
@ -74,24 +74,24 @@ zlist = []
# List all sectors to memory and calculate the width and heigth of the resulting picture. # List all sectors to memory and calculate the width and heigth of the resulting picture.
for filename in os.listdir(path + "sectors2"): for filename in os.listdir(path + "sectors2"):
for filename2 in os.listdir(path + "sectors2/" + filename): for filename2 in os.listdir(path + "sectors2/" + filename):
x = hex_to_int(filename) x = hex_to_int(filename)
z = hex_to_int(filename2) z = hex_to_int(filename2)
if x < sector_xmin or x > sector_xmax: if x < sector_xmin or x > sector_xmax:
continue continue
if z < sector_zmin or z > sector_zmax: if z < sector_zmin or z > sector_zmax:
continue continue
xlist.append(x) xlist.append(x)
zlist.append(z) zlist.append(z)
for filename in os.listdir(path + "sectors"): for filename in os.listdir(path + "sectors"):
x = hex4_to_int(filename[:4]) x = hex4_to_int(filename[:4])
z = hex4_to_int(filename[-4:]) z = hex4_to_int(filename[-4:])
if x < sector_xmin or x > sector_xmax: if x < sector_xmin or x > sector_xmax:
continue continue
if z < sector_zmin or z > sector_zmax: if z < sector_zmin or z > sector_zmax:
continue continue
xlist.append(x) xlist.append(x)
zlist.append(z) zlist.append(z)
w = (max(xlist) - min(xlist)) * 16 + 16 w = (max(xlist) - min(xlist)) * 16 + 16
h = (max(zlist) - min(zlist)) * 16 + 16 h = (max(zlist) - min(zlist)) * 16 + 16
@ -107,118 +107,118 @@ starttime = time.time()
# Go through all sectors. # Go through all sectors.
for n in range(len(xlist)): for n in range(len(xlist)):
#if n > 500: #if n > 500:
# break # break
if n % 200 == 0: if n % 200 == 0:
nowtime = time.time() nowtime = time.time()
dtime = nowtime - starttime dtime = nowtime - starttime
n_per_second = 1.0 * n / dtime n_per_second = 1.0 * n / dtime
if n_per_second != 0: if n_per_second != 0:
seconds_per_n = 1.0 / n_per_second seconds_per_n = 1.0 / n_per_second
time_guess = seconds_per_n * len(xlist) time_guess = seconds_per_n * len(xlist)
remaining_s = time_guess - dtime remaining_s = time_guess - dtime
remaining_minutes = int(remaining_s / 60) remaining_minutes = int(remaining_s / 60)
remaining_s -= remaining_minutes * 60; remaining_s -= remaining_minutes * 60;
print("Processing sector "+str(n)+" of "+str(len(xlist)) print("Processing sector "+str(n)+" of "+str(len(xlist))
+" ("+str(round(100.0*n/len(xlist), 1))+"%)" +" ("+str(round(100.0*n/len(xlist), 1))+"%)"
+" (ETA: "+str(remaining_minutes)+"m " +" (ETA: "+str(remaining_minutes)+"m "
+str(int(remaining_s))+"s)") +str(int(remaining_s))+"s)")
xpos = xlist[n] xpos = xlist[n]
zpos = zlist[n] zpos = zlist[n]
xhex = int_to_hex3(xpos)
zhex = int_to_hex3(zpos)
xhex4 = int_to_hex4(xpos)
zhex4 = int_to_hex4(zpos)
sector1 = xhex4.lower() + zhex4.lower()
sector2 = xhex.lower() + "/" + zhex.lower()
ylist=[]
sectortype = ""
try:
for filename in os.listdir(path + "sectors/" + sector1):
if(filename != "meta"):
pos = int(filename,16)
if(pos > 32767):
pos-=65536
ylist.append(pos)
sectortype = "old"
except OSError:
pass
if sectortype != "old":
try:
for filename in os.listdir(path + "sectors2/" + sector2):
if(filename != "meta"):
pos = int(filename,16)
if(pos > 32767):
pos-=65536
ylist.append(pos)
sectortype = "new"
except OSError:
pass
if sectortype == "":
continue
ylist.sort() xhex = int_to_hex3(xpos)
zhex = int_to_hex3(zpos)
# Make a list of pixels of the sector that are to be looked for. xhex4 = int_to_hex4(xpos)
pixellist = [] zhex4 = int_to_hex4(zpos)
for x in range(16):
for y in range(16):
pixellist.append((x,y))
# Go through the Y axis from top to bottom.
for ypos in reversed(ylist):
yhex = int_to_hex4(ypos)
filename = "" sector1 = xhex4.lower() + zhex4.lower()
if sectortype == "old": sector2 = xhex.lower() + "/" + zhex.lower()
filename = path + "sectors/" + sector1 + "/" + yhex.lower()
else:
filename = path + "sectors2/" + sector2 + "/" + yhex.lower()
f = file(filename, "rb") ylist=[]
# Let's just memorize these even though it's not really necessary. sectortype = ""
version = f.read(1)
flags = f.read(1)
dec_o = zlib.decompressobj() try:
try: for filename in os.listdir(path + "sectors/" + sector1):
mapdata = dec_o.decompress(f.read()) if(filename != "meta"):
except: pos = int(filename,16)
mapdata = [] if(pos > 32767):
pos-=65536
f.close() ylist.append(pos)
sectortype = "old"
if(len(mapdata)<4096): except OSError:
print "bad: " + xhex+zhex+"/"+yhex + " " + len(mapdata) pass
else:
chunkxpos=xpos*16 if sectortype != "old":
chunkypos=ypos*16 try:
chunkzpos=zpos*16 for filename in os.listdir(path + "sectors2/" + sector2):
for (x,z) in reversed(pixellist): if(filename != "meta"):
for y in reversed(range(16)): pos = int(filename,16)
datapos=x+y*16+z*256 if(pos > 32767):
if(ord(mapdata[datapos])!=254): pos-=65536
try: ylist.append(pos)
pixellist.remove((x,z)) sectortype = "new"
# Memorize information on the type and height of the block and for drawing the picture. except OSError:
stuff[(chunkxpos+x,chunkzpos+z)]=(chunkypos+y,ord(mapdata[datapos])) pass
break
except: if sectortype == "":
print "strange block: " + xhex+zhex+"/"+yhex + " x: " + str(x) + " y: " + str(y) + " z: " + str(z) + " block: " + str(ord(mapdata[datapos])) continue
# After finding all the pixeld in the sector, we can move on to the next sector without having to continue the Y axis. ylist.sort()
if(len(pixellist)==0):
break # Make a list of pixels of the sector that are to be looked for.
pixellist = []
for x in range(16):
for y in range(16):
pixellist.append((x,y))
# Go through the Y axis from top to bottom.
for ypos in reversed(ylist):
yhex = int_to_hex4(ypos)
filename = ""
if sectortype == "old":
filename = path + "sectors/" + sector1 + "/" + yhex.lower()
else:
filename = path + "sectors2/" + sector2 + "/" + yhex.lower()
f = file(filename, "rb")
# Let's just memorize these even though it's not really necessary.
version = f.read(1)
flags = f.read(1)
dec_o = zlib.decompressobj()
try:
mapdata = dec_o.decompress(f.read())
except:
mapdata = []
f.close()
if(len(mapdata)<4096):
print "bad: " + xhex+zhex+"/"+yhex + " " + len(mapdata)
else:
chunkxpos=xpos*16
chunkypos=ypos*16
chunkzpos=zpos*16
for (x,z) in reversed(pixellist):
for y in reversed(range(16)):
datapos=x+y*16+z*256
if(ord(mapdata[datapos])!=254):
try:
pixellist.remove((x,z))
# Memorize information on the type and height of the block and for drawing the picture.
stuff[(chunkxpos+x,chunkzpos+z)]=(chunkypos+y,ord(mapdata[datapos]))
break
except:
print "strange block: " + xhex+zhex+"/"+yhex + " x: " + str(x) + " y: " + str(y) + " z: " + str(z) + " block: " + str(ord(mapdata[datapos]))
# After finding all the pixeld in the sector, we can move on to the next sector without having to continue the Y axis.
if(len(pixellist)==0):
break
print "Drawing image" print "Drawing image"
# Drawing the picture # Drawing the picture
@ -227,46 +227,46 @@ n = 0
minx = min(xlist) minx = min(xlist)
minz = min(zlist) minz = min(zlist)
for (x,z) in stuff.iterkeys(): for (x,z) in stuff.iterkeys():
if n % 500000 == 0: if n % 500000 == 0:
nowtime = time.time() nowtime = time.time()
dtime = nowtime - starttime dtime = nowtime - starttime
n_per_second = 1.0 * n / dtime n_per_second = 1.0 * n / dtime
if n_per_second != 0: if n_per_second != 0:
listlen = len(stuff) listlen = len(stuff)
seconds_per_n = 1.0 / n_per_second seconds_per_n = 1.0 / n_per_second
time_guess = seconds_per_n * listlen time_guess = seconds_per_n * listlen
remaining_s = time_guess - dtime remaining_s = time_guess - dtime
remaining_minutes = int(remaining_s / 60) remaining_minutes = int(remaining_s / 60)
remaining_s -= remaining_minutes * 60; remaining_s -= remaining_minutes * 60;
print("Drawing pixel "+str(n)+" of "+str(listlen) print("Drawing pixel "+str(n)+" of "+str(listlen)
+" ("+str(round(100.0*n/listlen, 1))+"%)" +" ("+str(round(100.0*n/listlen, 1))+"%)"
+" (ETA: "+str(remaining_minutes)+"m " +" (ETA: "+str(remaining_minutes)+"m "
+str(int(remaining_s))+"s)") +str(int(remaining_s))+"s)")
n += 1 n += 1
(r,g,b)=colors[stuff[(x,z)][1]] (r,g,b)=colors[stuff[(x,z)][1]]
# Comparing heights of a couple of adjacent blocks and changing brightness accordingly. # Comparing heights of a couple of adjacent blocks and changing brightness accordingly.
try: try:
y1=stuff[(x-1,z)][0] y1=stuff[(x-1,z)][0]
y2=stuff[(x,z-1)][0] y2=stuff[(x,z-1)][0]
y=stuff[(x,z)][0] y=stuff[(x,z)][0]
d=(y-y1+y-y2)*12 d=(y-y1+y-y2)*12
if(d>36): if(d>36):
d=36 d=36
r=limit(r+d,0,255) r=limit(r+d,0,255)
g=limit(g+d,0,255) g=limit(g+d,0,255)
b=limit(b+d,0,255) b=limit(b+d,0,255)
except: except:
pass pass
#impix[w-1-(x-minx*16),h-1-(z-minz*16)]=(r,g,b) #impix[w-1-(x-minx*16),h-1-(z-minz*16)]=(r,g,b)
impix[x-minx*16,h-1-(z-minz*16)]=(r,g,b) impix[x-minx*16,h-1-(z-minz*16)]=(r,g,b)
# Flip the picture to make it right and save. # Flip the picture to make it right and save.
#print "Transposing" #print "Transposing"
#im=im.transpose(Image.FLIP_TOP_BOTTOM) #im=im.transpose(Image.FLIP_TOP_BOTTOM)
print "Saving" print "Saving"
im.save(output) im.save(output)