* better player graphics
[oweals/minetest.git] / genmap.py
1 #!/usr/bin/python2
2
3 # This is an example script that generates some valid map data.
4
5 import struct
6 import random
7 import os
8 import sys
9 from pnoise import pnoise
10
11 """
12 Map format:
13 map/sectors/XXXXZZZZ/YYYY
14
15 XXXX,YYYY,ZZZZ = coordinates in hexadecimal
16
17 fffe = -2
18 ffff = -1
19 0000 =  0
20 0001 =  1
21 """
22
23 def to4h(i):
24         s = "";
25         s += '{0:1x}'.format((i>>12) & 0x000f)
26         s += '{0:1x}'.format((i>>8) & 0x000f)
27         s += '{0:1x}'.format((i>>4) & 0x000f)
28         s += '{0:1x}'.format((i>>0) & 0x000f)
29         return s
30
31 def getrand():
32         i = random.randrange(0,2)
33         if i==0:
34                 return 0
35         return 254
36
37 def writeblock(mapdir, px,py,pz, version):
38         sectordir = mapdir + "/sectors/" + to4h(px) + to4h(pz)
39         
40         try:
41                 os.makedirs(sectordir)
42         except OSError:
43                 pass
44
45         f = open(sectordir+"/"+to4h(py), "wb")
46
47         if version == 0:
48                 # version
49                 f.write(struct.pack('B', 0))
50                 # is_underground
51                 f.write(struct.pack('B', 0))
52         elif version == 2:
53                 # version
54                 f.write(struct.pack('B', 2))
55                 # is_underground
56                 f.write(struct.pack('B', 0))
57         
58         for z in range(0,16):
59                 for y in range(0,16):
60                         for x in range(0,16):
61                                 b = 254
62                                 r = 20.0*pnoise((px*16+x)/100.,(pz*16+z)/100.,0)
63                                 r += 5.0*pnoise((px*16+x)/25.,(pz*16+z)/25.,0)
64                                 #print("r="+str(r))
65                                 y1 = py*16+y
66                                 if y1 <= r-3:
67                                         b = 0 #stone
68                                 elif y1 <= r:
69                                         b = 1 #grass
70                                 elif y1 <= 1:
71                                         b = 9 #water
72                                 if version == 0:
73                                         # Material content
74                                         f.write(struct.pack('B', b))
75                                 elif version == 2:
76                                         # Material content
77                                         f.write(struct.pack('B', b))
78                                         # Brightness
79                                         f.write(struct.pack('B', 15))
80
81         f.close()
82
83 mapdir = "map"
84
85 for z in range(-2,3):
86         for y in range(-1,2):
87                 for x in range(-2,3):
88                         print("generating block "+str(x)+","+str(y)+","+str(z))
89                         writeblock(mapdir, x,y,z, 0)
90
91 #END