forked from Mirrorlandia_minetest/minetest
92 lines
1.7 KiB
Python
Executable File
92 lines
1.7 KiB
Python
Executable File
#!/usr/bin/python2
|
|
|
|
# This is an example script that generates some valid map data.
|
|
|
|
import struct
|
|
import random
|
|
import os
|
|
import sys
|
|
from pnoise import pnoise
|
|
|
|
"""
|
|
Map format:
|
|
map/sectors/XXXXZZZZ/YYYY
|
|
|
|
XXXX,YYYY,ZZZZ = coordinates in hexadecimal
|
|
|
|
fffe = -2
|
|
ffff = -1
|
|
0000 = 0
|
|
0001 = 1
|
|
"""
|
|
|
|
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))
|
|
|
|
f.close()
|
|
|
|
mapdir = "map"
|
|
|
|
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
|