From 588db4fcc4b17ca0a884cbebb2b9d1f9ee5b0db7 Mon Sep 17 00:00:00 2001 From: redcrab Date: Fri, 23 Nov 2012 15:50:31 +0100 Subject: [PATCH] block unit (1block = 16 cubes) params -xmin -xmax -zmin -zmax + bug fix Long/int conversion in array usage --- util/minetestmapper.py | 41 ++++++++++++++++++++++++++++++++++------- 1 file changed, 34 insertions(+), 7 deletions(-) diff --git a/util/minetestmapper.py b/util/minetestmapper.py index 83ce716e9..f38e09d6d 100755 --- a/util/minetestmapper.py +++ b/util/minetestmapper.py @@ -95,7 +95,7 @@ def unsignedToSigned(i, max_positive): return i - 2*max_positive def getIntegerAsBlock(i): - x = unsignedToSigned(i % 4096, 2048) + x = int(unsignedToSigned(i % 4096, 2048)) i = int((i - x) / 4096) y = unsignedToSigned(i % 4096, 2048) i = int((i - y) / 4096) @@ -141,7 +141,7 @@ try: opts, args = getopt.getopt(sys.argv[1:], "hi:o:", ["help", "input=", "output=", "bgcolor=", "scalecolor=", "origincolor=", "playercolor=", "draworigin", "drawplayers", "drawscale", - "drawunderground"]) + "drawunderground","xmin=","xmax=","zmin=","zmax="]) except getopt.GetoptError as err: # print help information and exit: print(str(err)) # will print something like "option -a not recognized" @@ -179,6 +179,14 @@ for o, a in opts: scalecolor = ImageColor.getrgb(a) elif o == "--playercolor": playercolor = ImageColor.getrgb(a) + elif o == "--xmin": + sector_xmin = int(a) + elif o == "--xmax": + sector_xmax = int(a) + elif o == "--zmin": + sector_zmin = int(a) + elif o == "--zmax": + sector_zmax = int(a) elif o == "--origincolor": origincolor = ImageColor.getrgb(a) elif o == "--drawscale": @@ -196,7 +204,7 @@ for o, a in opts: if path is None: print("Please select world path (eg. -i ../worlds/yourworld) (or use --help)") sys.exit(1) - +print("xmin=" + str(sector_xmin) + " xmax=" + str(sector_xmax) + " zmin=" + str(sector_zmin) + " zmax=" + str(sector_zmax)) if path[-1:] != "/" and path[-1:] != "\\": path = path + "/" @@ -324,7 +332,9 @@ def content_is_air(d): return d in [126, 127, 254, "air"] def read_content(mapdata, version, datapos): - if version >= 20: + if version >= 24: + return (mapdata[datapos*2] << 8) | (mapdata[datapos*2 + 1]) + elif version >= 20: if mapdata[datapos] < 0x80: return mapdata[datapos] else: @@ -387,6 +397,7 @@ def read_mapdata(mapdata, version, pixellist, water, day_night_differs, id_to_na #print("unknown node: %s/%s/%s x: %d y: %d z: %d block id: %x" # % (xhex, zhex, yhex, x, y, z, content)) + # Go through all sectors. for n in range(len(xlist)): #if n > 500: @@ -546,6 +557,14 @@ for n in range(len(xlist)): if version == 23: readU8(f) # Unused node timer version (always 0) + if version == 24: + ver = readU8(f) + if ver == 1: + num = readU16(f) + for i in range(0,num): + readU16(f) + readS32(f) + readS32(f) static_object_version = readU8(f) static_object_count = readU16(f) @@ -578,6 +597,15 @@ for n in range(len(xlist)): #print(str(node_id)+" = "+name) id_to_name[node_id] = name + # Node timers + if version >= 25: + timer_size = readU8(f) + num = readU16(f) + for i in range(0,num): + readU16(f) + readS32(f) + readS32(f) + read_mapdata(mapdata, version, pixellist, water, day_night_differs, id_to_name) # After finding all the pixels in the sector, we can move on to @@ -663,8 +691,8 @@ for (x, z) in stuff.iterkeys(): r = int(r * .15 + colors[2][0] * .85) g = int(g * .15 + colors[2][1] * .85) b = int(b * .15 + colors[2][2] * .85) - - impix[x - minx * 16 + border, h - 1 - (z - minz * 16) + border] = (r, g, b) +# print("x:" + str(x) + " z:" + str(z) + " minx:" + str(minx) + " minz:" + str(minz) + " border:" + str(border) + " h:" + str(h) + " r:" + str(r) + " g:" + str(g) + " b:" + str(b)) + impix[int(x - minx * 16 + border), int(h - 1 - (z - minz * 16) + border)] = (r, g, b) if draworigin: @@ -729,4 +757,3 @@ if unknown_node_ids: for node_id in unknown_node_ids: sys.stdout.write(" "+str(hex(node_id))) sys.stdout.write(os.linesep) -