* tabs to spaces
authorNils Dagsson Moskopp <nils@dieweltistgarnichtso.net>
Thu, 2 Jun 2011 15:13:00 +0000 (17:13 +0200)
committerNils Dagsson Moskopp <nils@dieweltistgarnichtso.net>
Thu, 2 Jun 2011 15:13:05 +0000 (17:13 +0200)
minetestmapper/minetestmapper2.py

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