* PEP 8 compliance

master
Nils Dagsson Moskopp 2011-07-30 21:05:33 +02:00
parent 17830c5894
commit 4681392bac
1 changed files with 365 additions and 334 deletions

View File

@ -9,93 +9,101 @@
# Made by Jogge, modified by celeron55 # Made by Jogge, modified by celeron55
# 2011-05-29: j0gge: initial release # 2011-05-29: j0gge: initial release
# 2011-05-30: celeron55: simultaneous support for sectors/sectors2, removed # 2011-05-30: celeron55: simultaneous support for sectors/sectors2, removed
# 2011-06-02: j0gge: command line parameters, coordinates, players, ... # 2011-06-02: j0gge: command line parameters, coordinates, players, ...
# 2011-06-04: celeron55: added #!/usr/bin/python2 and converted \r\n to \n # 2011-06-04: celeron55: added #!/usr/bin/python2 and converted \r\n to \n
# to make it easily executable on Linux # to make it easily executable on Linux
# 2011-07-30: WF: Support for content types extension, refactoring # 2011-07-30: WF: Support for content types extension, refactoring
# 2011-07-30: erlehmann: PEP 8 compliance.
# 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
import Image, ImageDraw, ImageFont, ImageColor
import os import os
import string import string
import time import time
import getopt import getopt
import sys import sys
import array import array
from PIL import Image, ImageDraw, ImageFont, ImageColor
CONTENT_WATER = [2, 9] CONTENT_WATER = [2, 9]
TRANSLATION_TABLE = { TRANSLATION_TABLE = {
1: 0x800, # CONTENT_GRASS 1: 0x800, # CONTENT_GRASS
4: 0x801, # CONTENT_TREE 4: 0x801, # CONTENT_TREE
5: 0x802, # CONTENT_LEAVES 5: 0x802, # CONTENT_LEAVES
6: 0x803, # CONTENT_GRASS_FOOTSTEPS 6: 0x803, # CONTENT_GRASS_FOOTSTEPS
7: 0x804, # CONTENT_MESE 7: 0x804, # CONTENT_MESE
8: 0x805, # CONTENT_MUD 8: 0x805, # CONTENT_MUD
10: 0x806, # CONTENT_CLOUD 10: 0x806, # CONTENT_CLOUD
11: 0x807, # CONTENT_COALSTONE 11: 0x807, # CONTENT_COALSTONE
12: 0x808, # CONTENT_WOOD 12: 0x808, # CONTENT_WOOD
13: 0x809, # CONTENT_SAND 13: 0x809, # CONTENT_SAND
18: 0x80a, # CONTENT_COBBLE 18: 0x80a, # CONTENT_COBBLE
19: 0x80b, # CONTENT_STEEL 19: 0x80b, # CONTENT_STEEL
20: 0x80c, # CONTENT_GLASS 20: 0x80c, # CONTENT_GLASS
22: 0x80d, # CONTENT_MOSSYCOBBLE 22: 0x80d, # CONTENT_MOSSYCOBBLE
23: 0x80e, # CONTENT_GRAVEL 23: 0x80e, # CONTENT_GRAVEL
24: 0x80f, #CONTENT_SANDSTONE 24: 0x80f, # CONTENT_SANDSTONE
25: 0x810, #CONTENT_CACTUS 25: 0x810, # CONTENT_CACTUS
26: 0x811, #CONTENT_BRICK 26: 0x811, # CONTENT_BRICK
27: 0x812, #CONTENT_CLAY 27: 0x812, # CONTENT_CLAY
28: 0x813, #CONTENT_PAPYRUS 28: 0x813, # CONTENT_PAPYRUS
29: 0x814 #CONTENT_BOOKSHELF 29: 0x814} # CONTENT_BOOKSHELF
}
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
def usage(): def usage():
print "TODO: Help" print "TODO: Help"
try: try:
opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input=", "output=", "bgcolor=", "scalecolor=", "origincolor=", "playercolor=", "draworigin", "drawplayers", "drawscale"]) opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input=",
"output=", "bgcolor=", "scalecolor=", "origincolor=",
"playercolor=", "draworigin", "drawplayers", "drawscale"])
except getopt.GetoptError, err: except getopt.GetoptError, err:
# print help information and exit: # print help information and exit:
print str(err) # will print something like "option -a not recognized" print str(err) # will print something like "option -a not recognized"
usage() usage()
sys.exit(2) sys.exit(2)
path = "../world/" path = "../world/"
output = "map.png" output = "map.png"
@ -114,68 +122,72 @@ sector_zmin = -1500 / 16
sector_zmax = 1500 / 16 sector_zmax = 1500 / 16
for o, a in opts: for o, a in opts:
if o in ("-h", "--help"): if o in ("-h", "--help"):
usage() usage()
sys.exit() sys.exit()
elif o in ("-i", "--input"): elif o in ("-i", "--input"):
path = a path = a
elif o in ("-o", "--output"): elif o in ("-o", "--output"):
output = a output = a
elif o == "--bgcolor": elif o == "--bgcolor":
bgcolor = ImageColor.getrgb(a) bgcolor = ImageColor.getrgb(a)
elif o == "--scalecolor": elif o == "--scalecolor":
scalecolor = ImageColor.getrgb(a) scalecolor = ImageColor.getrgb(a)
elif o == "--playercolor": elif o == "--playercolor":
playercolor = ImageColor.getrgb(a) playercolor = ImageColor.getrgb(a)
elif o == "--origincolor": elif o == "--origincolor":
origincolor = ImageColor.getrgb(a) origincolor = ImageColor.getrgb(a)
elif o == "--drawscale": elif o == "--drawscale":
drawscale = True drawscale = True
border = 40 border = 40
elif o == "--drawplayers": elif o == "--drawplayers":
drawplayers = True drawplayers = True
elif o == "--draworigin": elif o == "--draworigin":
draworigin = True draworigin = True
else: else:
assert False, "unhandled option" assert False, "unhandled option"
if path[-1:]!="/" and path[-1:]!="\\": if path[-1:] != "/" and path[-1:] != "\\":
path = path + "/" path = path + "/"
# Load color information for the blocks. # Load color information for the blocks.
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], 16)] = (int(values[1]), int(values[2]), int(values[3])) colors[int(values[0], 16)] = (
int(values[1]),
int(values[2]),
int(values[3]))
f.close() f.close()
xlist = [] xlist = []
zlist = [] 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.
if os.path.exists(path + "sectors2"): if os.path.exists(path + "sectors2"):
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)
if os.path.exists(path + "sectors"): if os.path.exists(path + "sectors"):
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)
minx = min(xlist) minx = min(xlist)
minz = min(zlist) minz = min(zlist)
@ -185,7 +197,7 @@ maxz = max(zlist)
w = (maxx - minx) * 16 + 16 w = (maxx - minx) * 16 + 16
h = (maxz - minz) * 16 + 16 h = (maxz - minz) * 16 + 16
print "w="+str(w)+" h="+str(h) print "w=" + str(w) + " h=" + str(h)
im = Image.new("RGB", (w + border, h + border), bgcolor) im = Image.new("RGB", (w + border, h + border), bgcolor)
draw = ImageDraw.Draw(im) draw = ImageDraw.Draw(im)
@ -195,271 +207,290 @@ stuff = {}
starttime = time.time() starttime = time.time()
def data_is_air(d): def data_is_air(d):
return d in [126, 127, 254] return d in [126, 127, 254]
def read_blocknum(mapdata, version, datapos): def read_blocknum(mapdata, version, datapos):
if version == 20: if version == 20:
if mapdata[datapos] < 0x80: if mapdata[datapos] < 0x80:
return mapdata[datapos] return mapdata[datapos]
else: else:
return (mapdata[datapos] << 4) | (mapdata[datapos + 0x2000] >> 4) return (mapdata[datapos] << 4) | (mapdata[datapos + 0x2000] >> 4)
elif 16 <= version < 20: elif 16 <= version < 20:
return TRANSLATION_TABLE.get(mapdata[datapos], mapdata[datapos]) return TRANSLATION_TABLE.get(mapdata[datapos], mapdata[datapos])
else: else:
raise Exception("Unsupported map format: " + str(version)) raise Exception("Unsupported map format: " + str(version))
def read_mapdata(f, version, pixellist, water): def read_mapdata(f, version, pixellist, water):
global stuff # oh my :-) global stuff # oh my :-)
dec_o = zlib.decompressobj() dec_o = zlib.decompressobj()
try: try:
mapdata = array.array("B", dec_o.decompress(f.read())) mapdata = array.array("B", dec_o.decompress(f.read()))
except: except:
mapdata = [] mapdata = []
f.close() f.close()
if(len(mapdata) < 4096): if(len(mapdata) < 4096):
print "bad: " + xhex + "/" + zhex + "/" + yhex + " " + str(len(mapdata)) print "bad: " + xhex + "/" + zhex + "/" + yhex + " " + \
else: str(len(mapdata))
chunkxpos = xpos * 16 else:
chunkypos = ypos * 16 chunkxpos = xpos * 16
chunkzpos = zpos * 16 chunkypos = ypos * 16
blocknum = 0 chunkzpos = zpos * 16
datapos = 0 blocknum = 0
for (x, z) in reversed(pixellist): datapos = 0
for y in reversed(range(16)): for (x, z) in reversed(pixellist):
datapos = x + y * 16 + z * 256 for y in reversed(range(16)):
blocknum = read_blocknum(mapdata, version, datapos) datapos = x + y * 16 + z * 256
if not data_is_air(blocknum) and blocknum in colors: blocknum = read_blocknum(mapdata, version, datapos)
if blocknum in CONTENT_WATER: if not data_is_air(blocknum) and blocknum in colors:
water[(x, z)] += 1 if blocknum in CONTENT_WATER:
# Add dummy stuff for drawing sea without seabed water[(x, z)] += 1
stuff[(chunkxpos + x, chunkzpos + z)] = (chunkypos + y, blocknum, water[(x, z)]) # Add dummy stuff for drawing sea without seabed
else: stuff[(chunkxpos + x, chunkzpos + z)] = (
pixellist.remove((x, z)) chunkypos + y, blocknum, water[(x, z)])
# Memorize information on the type and height of the block and for drawing the picture. else:
stuff[(chunkxpos + x, chunkzpos + z)] = (chunkypos + y, blocknum, water[(x, z)]) pixellist.remove((x, z))
break # Memorize information on the type and height of
elif not data_is_air(blocknum) and blocknum not in colors: # the block and for drawing the picture.
print "strange block: %s/%s/%s x: %d y: %d z: %d block id: %x" % (xhex, zhex, yhex, x, y, z, blocknum) stuff[(chunkxpos + x, chunkzpos + z)] = (
chunkypos + y, blocknum, water[(x, z)])
break
elif not data_is_air(blocknum) and blocknum not in colors:
print "strange block: %s/%s/%s x: %d y: %d z: %d \
block id: %x" % (xhex, zhex, yhex, x, y, z, blocknum)
# 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
try: try:
n_per_second = 1.0 * n / dtime n_per_second = 1.0 * n / dtime
except ZeroDivisionError: except ZeroDivisionError:
n_per_second = 0 n_per_second = 0
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)
xhex4 = int_to_hex4(xpos)
# Make a list of pixels of the sector that are to be looked for. zhex4 = int_to_hex4(zpos)
pixellist = []
water = {}
for x in range(16):
for z in range(16):
pixellist.append((x, z))
water[(x, z)] = 0
# Go through the Y axis from top to bottom.
ylist2=[]
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 = ord(f.read(1))
flags = f.read(1)
# Checking day and night differs -flag
if not ord(flags) & 2:
ylist2.append((ypos,filename))
f.close()
continue
read_mapdata(f, version, pixellist, water) try:
for filename in os.listdir(path + "sectors/" + sector1):
# After finding all the pixels in the sector, we can move on to the next sector without having to continue the Y axis. if(filename != "meta"):
if(len(pixellist) == 0): pos = int(filename, 16)
break if(pos > 32767):
pos -= 65536
if len(pixellist) > 0: ylist.append(pos)
for (ypos, filename) in ylist2: sectortype = "old"
f = file(filename, "rb") except OSError:
pass
version = ord(f.read(1)) if sectortype != "old":
flags = f.read(1) try:
for filename in os.listdir(path + "sectors2/" + sector2):
read_mapdata(f, version, pixellist, water) if(filename != "meta"):
pos = int(filename, 16)
# After finding all the pixels in the sector, we can move on to the next sector without having to continue the Y axis. if(pos > 32767):
if(len(pixellist) == 0): pos -= 65536
break ylist.append(pos)
sectortype = "new"
except OSError:
pass
if sectortype == "":
continue
ylist.sort()
# Make a list of pixels of the sector that are to be looked for.
pixellist = []
water = {}
for x in range(16):
for z in range(16):
pixellist.append((x, z))
water[(x, z)] = 0
# Go through the Y axis from top to bottom.
ylist2 = []
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 = ord(f.read(1))
flags = f.read(1)
# Checking day and night differs -flag
if not ord(flags) & 2:
ylist2.append((ypos, filename))
f.close()
continue
read_mapdata(f, version, pixellist, water)
# After finding all the pixels in the sector, we can move on to
# the next sector without having to continue the Y axis.
if(len(pixellist) == 0):
break
if len(pixellist) > 0:
for (ypos, filename) in ylist2:
f = file(filename, "rb")
version = ord(f.read(1))
flags = f.read(1)
read_mapdata(f, version, pixellist, water)
# After finding all the pixels 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
starttime = time.time() starttime = time.time()
n = 0 n = 0
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
try: try:
n_per_second = 1.0 * n / dtime n_per_second = 1.0 * n / dtime
except ZeroDivisionError: except ZeroDivisionError:
n_per_second = 0 n_per_second = 0
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
try: # brightness accordingly.
c1 = stuff[(x - 1, z)][1] try:
c2 = stuff[(x, z + 1)][1] c1 = stuff[(x - 1, z)][1]
c = stuff[(x, z)][1] c2 = stuff[(x, z + 1)][1]
if c1 not in CONTENT_WATER and c2 not in CONTENT_WATER and c not in CONTENT_WATER: c = stuff[(x, z)][1]
y1 = stuff[(x - 1, z)][0] if c1 not in CONTENT_WATER and c2 not in CONTENT_WATER and \
y2 = stuff[(x, z + 1)][0] c not in CONTENT_WATER:
y = stuff[(x, z)][0] y1 = stuff[(x - 1, z)][0]
y2 = stuff[(x, z + 1)][0]
d = ((y - y1) + (y - y2)) * 12 y = stuff[(x, z)][0]
else:
d = 0 d = ((y - y1) + (y - y2)) * 12
else:
if(d > 36): d = 0
d = 36
if(d > 36):
r = limit(r + d, 0, 255) d = 36
g = limit(g + d, 0, 255)
b = limit(b + d, 0, 255) r = limit(r + d, 0, 255)
except: g = limit(g + d, 0, 255)
pass b = limit(b + d, 0, 255)
except:
# Water pass
if(stuff[(x,z)][2] > 0):
r=int(r * .15 + colors[2][0] * .85) # Water
g=int(g * .15 + colors[2][1] * .85) if(stuff[(x, z)][2] > 0):
b=int(b * .15 + colors[2][2] * .85) r = int(r * .15 + colors[2][0] * .85)
g = int(g * .15 + colors[2][1] * .85)
impix[x - minx * 16 + border, h - 1 - (z - minz * 16) + border] = (r, g, b) b = int(b * .15 + colors[2][2] * .85)
impix[x - minx * 16 + border, h - 1 - (z - minz * 16) + border] = (r, g, b)
if draworigin: if draworigin:
draw.ellipse((minx * -16 - 5 + border, h - minz * -16 - 6 + border, minx * -16 + 5 + border, h - minz * -16 + 4 + border), outline = origincolor) draw.ellipse((minx * -16 - 5 + border, h - minz * -16 - 6 + border,
minx * -16 + 5 + border, h - minz * -16 + 4 + border),
outline=origincolor)
font = ImageFont.load_default() font = ImageFont.load_default()
if drawscale: if drawscale:
draw.text((24, 0), "X", font = font, fill = scalecolor) draw.text((24, 0), "X", font=font, fill=scalecolor)
draw.text((2, 24), "Z", font = font, fill = scalecolor) draw.text((2, 24), "Z", font=font, fill=scalecolor)
for n in range(int(minx / -4) * -4, maxx, 4): for n in range(int(minx / -4) * -4, maxx, 4):
draw.text((minx * -16 + n * 16 + 2 + border, 0), str(n * 16), font = font, fill = scalecolor) draw.text((minx * -16 + n * 16 + 2 + border, 0), str(n * 16),
draw.line((minx * -16 + n * 16 + border, 0, minx * -16 + n * 16 + border, border - 1), fill = scalecolor) font=font, fill=scalecolor)
draw.line((minx * -16 + n * 16 + border, 0,
minx * -16 + n * 16 + border, border - 1), fill=scalecolor)
for n in range(int(maxz / 4) * 4, minz, -4): for n in range(int(maxz / 4) * 4, minz, -4):
draw.text((2, h - 1 - (n * 16 - minz * 16) + border), str(n * 16), font = font, fill = scalecolor) draw.text((2, h - 1 - (n * 16 - minz * 16) + border), str(n * 16),
draw.line((0, h - 1 - (n * 16 - minz * 16) + border, border - 1, h - 1 - (n * 16 - minz * 16) + border), fill = scalecolor) font=font, fill=scalecolor)
draw.line((0, h - 1 - (n * 16 - minz * 16) + border, border - 1,
h - 1 - (n * 16 - minz * 16) + border), fill=scalecolor)
if drawplayers: if drawplayers:
try: try:
for filename in os.listdir(path + "players"): for filename in os.listdir(path + "players"):
f = file(path + "players/" + filename) f = file(path + "players/" + filename)
lines = f.readlines() lines = f.readlines()
name="" name = ""
position=[] position = []
for line in lines: for line in lines:
p = string.split(line) p = string.split(line)
if p[0] == "name": if p[0] == "name":
name = p[2] name = p[2]
print filename + ": name = " + name print filename + ": name = " + name
if p[0] == "position": if p[0] == "position":
position = string.split(p[2][1:-1], ",") position = string.split(p[2][1:-1], ",")
print filename + ": position = " + p[2] print filename + ": position = " + p[2]
if len(name) > 0 and len(position) == 3: if len(name) > 0 and len(position) == 3:
x=(int(float(position[0]) / 10 - minx * 16)) x = (int(float(position[0]) / 10 - minx * 16))
z=int(h - (float(position[2]) / 10 - minz * 16)) z = int(h - (float(position[2]) / 10 - minz * 16))
draw.ellipse((x - 2 + border, z - 2 + border, x + 2 + border, z + 2 + border), outline = playercolor) draw.ellipse((x - 2 + border, z - 2 + border,
draw.text((x + 2 + border, z + 2 + border), name, font = font, fill = playercolor) x + 2 + border, z + 2 + border), outline=playercolor)
f.close() draw.text((x + 2 + border, z + 2 + border), name,
except OSError: font=font, fill=playercolor)
pass f.close()
except OSError:
pass
print "Saving" print "Saving"
im.save(output) im.save(output)