- #if n > 500:
- # break
- if n % 200 == 0:
- nowtime = time.time()
- dtime = nowtime - starttime
- try:
- n_per_second = 1.0 * n / dtime
- except ZeroDivisionError:
- n_per_second = 0
- if n_per_second != 0:
- seconds_per_n = 1.0 / n_per_second
- time_guess = seconds_per_n * len(xlist)
- remaining_s = time_guess - dtime
- remaining_minutes = int(remaining_s / 60)
- remaining_s -= remaining_minutes * 60;
- print("Processing sector "+str(n)+" of "+str(len(xlist))
- +" ("+str(round(100.0*n/len(xlist), 1))+"%)"
- +" (ETA: "+str(remaining_minutes)+"m "
- +str(int(remaining_s))+"s)")
-
- xpos = xlist[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()
-
- # 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")
-
- version = 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
-
- dec_o = zlib.decompressobj()
- try:
- mapdata = dec_o.decompress(f.read())
- except:
- mapdata = []
-
- f.close()
-
- if(len(mapdata) < 4096):
- print "bad: " + xhex + "/" + zhex + "/" + yhex + " " + str(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 and ord(mapdata[datapos]) in colors):
- if(ord(mapdata[datapos]) == 2 or ord(mapdata[datapos]) == 9):
- water[(x, z)] += 1
- # Add dummy stuff for drawing sea without seabed
- stuff[(chunkxpos + x, chunkzpos + z)] = (chunkypos + y, ord(mapdata[datapos]), water[(x, z)])
- else:
- 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]), water[(x, z)])
- break
- elif(ord(mapdata[datapos]) != 254 and ord(mapdata[datapos]) not in colors):
- print "strange block: " + xhex + "/" + zhex + "/" + yhex + " x: " + str(x) + " y: " + str(y) + " z: " + str(z) + " palikka: " + str(ord(mapdata[datapos]))
-
- # 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 = 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 + " " + str(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 and ord(mapdata[datapos]) in colors):
- if(ord(mapdata[datapos]) == 2 or ord(mapdata[datapos]) == 9):
- water[(x, z)] += 1
- # Add dummy stuff for drawing sea without seabed
- stuff[(chunkxpos + x, chunkzpos + z)] = (chunkypos + y, ord(mapdata[datapos]), water[(x, z)])
- else:
- 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]), water[(x, z)])
- break
- elif(ord(mapdata[datapos]) != 254 and ord(mapdata[datapos]) not in colors):
- print "outo palikka: " + xhex + "/" + zhex + "/" + yhex + " x: " + str(x) + " y: " + str(y) + " z: " + str(z) + " palikka: " + str(ord(mapdata[datapos]))
-
- # 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"
+ #if n > 500:
+ # break
+ if n % 200 == 0:
+ nowtime = time.time()
+ dtime = nowtime - starttime
+ try:
+ n_per_second = 1.0 * n / dtime
+ except ZeroDivisionError:
+ n_per_second = 0
+ if n_per_second != 0:
+ seconds_per_n = 1.0 / n_per_second
+ time_guess = seconds_per_n * len(xlist)
+ remaining_s = time_guess - dtime
+ remaining_minutes = int(remaining_s / 60)
+ remaining_s -= remaining_minutes * 60
+ print("Processing sector " + str(n) + " of " + str(len(xlist))
+ + " (" + str(round(100.0 * n / len(xlist), 1)) + "%)"
+ + " (ETA: " + str(remaining_minutes) + "m "
+ + str(int(remaining_s)) + "s)")
+
+ xpos = xlist[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 = ""
+
+ if cur:
+ psmin = getBlockAsInteger((xpos, -2048, zpos))
+ psmax = getBlockAsInteger((xpos, 2047, zpos))
+ cur.execute("SELECT `pos` FROM `blocks` WHERE `pos`>=? AND `pos`<=? AND (`pos` - ?) % 4096 = 0", (psmin, psmax, psmin))
+ while True:
+ r = cur.fetchone()
+ if not r:
+ break
+ pos = getIntegerAsBlock(r[0])[1]
+ ylist.append(pos)
+ sectortype = "sqlite"
+ 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 == "":
+ 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()
+
+ # 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.
+ for ypos in reversed(ylist):
+
+ yhex = int_to_hex4(ypos)
+
+ if sectortype == "sqlite":
+ ps = getBlockAsInteger((xpos, ypos, zpos))
+ cur.execute("SELECT `data` FROM `blocks` WHERE `pos`==? LIMIT 1", (ps,))
+ r = cur.fetchone()
+ if not r:
+ continue
+ f = cStringIO.StringIO(r[0])
+ else:
+ 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
+ day_night_differs = ((ord(flags) & 2) != 0)
+
+ read_mapdata(f, version, pixellist, water, day_night_differs)
+
+ # 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")