nbsdgames/bubbob/save_rnglevel.py
2022-02-03 13:46:22 +03:30

126 lines
3.2 KiB
Python

#
# This script outputs the random levels in a format you can
# save into a file in the levels-directory and bub'n'bros
# will be able to use it.
#
# this accepts the following parameters:
# -seed N use random seed N for the generation
#
import sys
import random
import string
sys.path.append('..')
sys.path.append('../common')
n_lvls = 1
idx = 0
while idx < len(sys.argv):
arg = sys.argv[idx]
idx += 1
if arg == '-seed':
arg = sys.argv[idx]
idx += 1
print("# Using seed: " + arg + "\n")
random.seed(arg)
def printlvl(level):
mons = {}
monconv = {}
tmpmons = {}
# Populate monster tables
for y in range(0,level.HEIGHT):
for x in range(0,level.WIDTH):
wm = level.wmap[y][x]
if wm >= 'a':
m = getattr(level, wm)
if m.dir == 1:
dir = 'L'
else:
dir = 'R'
s = dir + m.cls.__name__
if s in tmpmons:
tmpmons[s].append(wm)
else:
tmpmons[s] = [wm]
# Build monster character conversion tables
lettr = 'a'
for m in tmpmons:
for n in tmpmons[m]:
monconv[n] = lettr
mons[lettr] = m
lettr = chr(ord(lettr) + 1)
# Build walls, replacing monsters from mons[]
walls = ""
for y in range(0,level.HEIGHT-1):
walls += "##"
for x in range(0,level.WIDTH):
wm = level.wmap[y][x]
if wm >= 'a':
if wm in monconv:
walls += monconv[wm]
else:
walls += '?'
else:
walls += wm
walls += "##\n"
walls += "##"
for x in range(0,level.WIDTH):
if level.wmap[0][x] == '#' or level.wmap[level.HEIGHT-1][x] == '#':
walls += "#"
else:
walls += " "
walls += "##\n"
# Build winds
winds = ""
for y in range(0,level.HEIGHT):
for x in range(0,level.WIDTH+4):
winds += level.winds[y][x]
winds += "\n"
for m in mons:
print(" " + m + " = " + mons[m])
if level.letter:
print(" letter = 1")
if level.fire:
print(" fire = 1")
if level.lightning:
print(" lightning = 1")
if level.water:
print(" water = 1")
if level.top:
print(" top = 1")
print(" walls = \"\"\"\n" + walls + "\"\"\"")
print(" winds = \"\"\"\n" + winds + "\"\"\"")
for i in range(n_lvls):
print("""
import boarddef, mnstrmap, random
from boarddef import LNasty, LMonky, LGhosty, LFlappy
from boarddef import LSpringy, LOrcy, LGramy, LBlitzy
from boarddef import RNasty, RMonky, RGhosty, RFlappy
from boarddef import RSpringy, ROrcy, RGramy, RBlitzy
""")
d = {'__name__': 'RandomLevels'}
exec(compile(open('levels/RandomLevels.py', "rb").read(), 'levels/RandomLevels.py', 'exec'), d)
for i, Lvl in enumerate(d['GenerateLevels']()):
level = Lvl(i)
if level.monsters:
print("\n\nclass level%02d(boarddef.Level):" % (i+1))
else:
print("\n\nclass levelFinal(boarddef.Level):")
printlvl(level)
print()