]> git.lizzy.rs Git - dragonfireclient.git/blobdiff - genmap.py
+ rail
[dragonfireclient.git] / genmap.py
index 8949888a40bdae04a612665c9fec84fe1a8ed09b..aaa35690fd6f0f83937c3ca78693a12fce85d8b3 100755 (executable)
--- a/genmap.py
+++ b/genmap.py
@@ -1,13 +1,12 @@
-#!/usr/bin/python
+#!/usr/bin/python2
+
+# This is an example script that generates some valid map data.
 
 import struct
 import random
-
-def getrand():
-       i = random.randrange(0,2)
-       if i==0:
-               return 0
-       return 254
+import os
+import sys
+from pnoise import pnoise
 
 """
 Map format:
@@ -21,18 +20,72 @@ ffff = -1
 0001 =  1
 """
 
-f = open("map/sectors/00000000/ffff", "wb")
+def to4h(i):
+       s = "";
+       s += '{0:1x}'.format((i>>12) & 0x000f)
+       s += '{0:1x}'.format((i>>8) & 0x000f)
+       s += '{0:1x}'.format((i>>4) & 0x000f)
+       s += '{0:1x}'.format((i>>0) & 0x000f)
+       return s
+
+def getrand():
+       i = random.randrange(0,2)
+       if i==0:
+               return 0
+       return 254
+
+def writeblock(mapdir, px,py,pz, version):
+       sectordir = mapdir + "/sectors/" + to4h(px) + to4h(pz)
+       
+       try:
+               os.makedirs(sectordir)
+       except OSError:
+               pass
+
+       f = open(sectordir+"/"+to4h(py), "wb")
+
+       if version == 0:
+               # version
+               f.write(struct.pack('B', 0))
+               # is_underground
+               f.write(struct.pack('B', 0))
+       elif version == 2:
+               # version
+               f.write(struct.pack('B', 2))
+               # is_underground
+               f.write(struct.pack('B', 0))
+       
+       for z in range(0,16):
+               for y in range(0,16):
+                       for x in range(0,16):
+                               b = 254
+                               r = 20.0*pnoise((px*16+x)/100.,(pz*16+z)/100.,0)
+                               r += 5.0*pnoise((px*16+x)/25.,(pz*16+z)/25.,0)
+                               #print("r="+str(r))
+                               y1 = py*16+y
+                               if y1 <= r-3:
+                                       b = 0 #stone
+                               elif y1 <= r:
+                                       b = 1 #grass
+                               elif y1 <= 1:
+                                       b = 9 #water
+                               if version == 0:
+                                       # Material content
+                                       f.write(struct.pack('B', b))
+                               elif version == 2:
+                                       # Material content
+                                       f.write(struct.pack('B', b))
+                                       # Brightness
+                                       f.write(struct.pack('B', 15))
 
-# version
-f.write(struct.pack('B', 2))
-# is_underground
-f.write(struct.pack('B', 0))
+       f.close()
 
-for i in range(0,16*16*16):
-       # Material content
-       f.write(struct.pack('B', getrand()))
-       # Brightness
-       f.write(struct.pack('B', 15))
+mapdir = "map"
 
-f.close()
+for z in range(-2,3):
+       for y in range(-1,2):
+               for x in range(-2,3):
+                       print("generating block "+str(x)+","+str(y)+","+str(z))
+                       writeblock(mapdir, x,y,z, 0)
 
+#END