mirror of
https://github.com/abakh/nbsdgames
synced 2025-04-28 14:09:32 -04:00
171 lines
4.9 KiB
Python
Executable File
171 lines
4.9 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import os, sys, string, struct
|
|
os.chdir(os.pardir)
|
|
sys.path.insert(0, os.getcwd())
|
|
sys.path.insert(1, os.path.abspath(os.path.join(os.pardir, 'common')))
|
|
|
|
from images import sprmap
|
|
import bonuses, images
|
|
|
|
try:
|
|
import psyco; psyco.full()
|
|
except ImportError:
|
|
pass
|
|
|
|
def create_image(name,source,extralines=0,alt=''):
|
|
if len(sys.argv) == 2 and sys.argv[1] == '-i':
|
|
return
|
|
print(name, source)
|
|
src = open(source[0],'r')
|
|
assert src.readline().strip() == 'P6'
|
|
line = src.readline()
|
|
while line[0] == '#':
|
|
line = src.readline()
|
|
size = string.split(line)
|
|
w = string.atoi(size[0])
|
|
h = string.atoi(size[1])
|
|
c = src.readline().strip()
|
|
data = src.read()
|
|
src.close()
|
|
img = os.popen("convert PPM:- doc/images/"+name+'.png','w')
|
|
print('P6', file=img)
|
|
print(source[1][2], source[1][3]+extralines, file=img)
|
|
print(c, file=img)
|
|
cx = source[1][0]+source[1][2]//2
|
|
cy = source[1][1]+source[1][3]*6//7
|
|
for y in range(source[1][1],source[1][1]+source[1][3]):
|
|
for x in range(source[1][0],source[1][0]+source[1][2]):
|
|
rgb = data[y*3*w+3*x:y*3*w+3*x+3]
|
|
if rgb == '\x01\x01\x01':
|
|
d = (x-cx)*(x-cx)+(y-cy)*(y-cy)*6
|
|
if d > 255: d = 255
|
|
rgb = chr(d)*3
|
|
img.write(rgb)
|
|
for y in range(y+1, y+1+extralines):
|
|
for x in range(source[1][0],source[1][0]+source[1][2]):
|
|
d = (x-cx)*(x-cx)+(y-cy)*(y-cy)*6
|
|
if d > 255: d = 255
|
|
rgb = chr(d)*3
|
|
img.write(rgb)
|
|
img.close()
|
|
return html_tag(name, alt)
|
|
|
|
def html_tag(name, alt):
|
|
url = 'images/%s.png' % (name,)
|
|
f = open('doc/'+url, 'rb')
|
|
alldata = f.read()
|
|
f.close()
|
|
url = 'data:image/png;base64,' + alldata.encode('base64').replace('\n','')
|
|
return '<IMG SRC="%s" ALT="%s">' % (url, alt)
|
|
|
|
|
|
def split_name(name):
|
|
"Split a name into its words based on capitalisation."
|
|
words = []
|
|
word = ''
|
|
for c in name:
|
|
if c.isupper() and word != '':
|
|
words.append(word)
|
|
word = c
|
|
else:
|
|
word += c
|
|
words.append(word)
|
|
return words
|
|
|
|
dfile = open('doc/bonuses.html','w')
|
|
print("""<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML//EN">
|
|
<HTML>
|
|
<HEAD>
|
|
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
|
|
<META NAME="Author" CONTENT="The Bub's Brothers">
|
|
<TITLE>The Bub's Brothers Bonuses</TITLE>
|
|
</HEAD>
|
|
<BODY bgcolor=white text=black>
|
|
<TABLE cellspacing=0 border=0>
|
|
<TR>
|
|
<TD width=132 align=right>
|
|
</TD>
|
|
<TD width=20>
|
|
</TD>
|
|
<TD bgcolor="#80FF80" align=center>
|
|
<I>regular bonus</I>
|
|
</TD>
|
|
<TD bgcolor="#80FF80" width=20>
|
|
</TD>
|
|
<TD bgcolor="#80FF80" align=center>
|
|
<I>big bonus</I>
|
|
</TD>
|
|
</TR>
|
|
""", file=dfile)
|
|
#" A stupid comment to stop emacs from mis-fontifying.
|
|
|
|
class Potion4:
|
|
"Subgame! For a while, let's play one of the seven mini-games."
|
|
nimage = 'potion4'
|
|
|
|
# Some classes exists in more than one example just to increase their
|
|
# probability. Removes the duplicate with the help of this dict.
|
|
processed = {}
|
|
|
|
for bonus in bonuses.Classes:
|
|
if bonus in processed:
|
|
continue
|
|
name = split_name(bonus.__name__)
|
|
name.reverse()
|
|
processed[bonus] = string.join(name)
|
|
if bonus is bonuses.Potion:
|
|
processed[Potion4] = string.join(name) + '.'
|
|
|
|
def sorter(a,b):
|
|
if a[1] == b[1]:
|
|
return 0
|
|
elif a[1] < b[1]:
|
|
return -1
|
|
else:
|
|
return 1
|
|
|
|
sorted_classes = list(processed.items())
|
|
sorted_classes.sort(sorter)
|
|
|
|
for clasindex, clas in enumerate(sorted_classes):
|
|
bonus = clas[0]
|
|
images = ''
|
|
name = bonus.__name__
|
|
if 'nimages' in bonus.__dict__:
|
|
# A multi image entry.
|
|
i = 0
|
|
l = len(bonus.nimages)
|
|
for image in bonus.nimages:
|
|
if image == 'potion4':
|
|
continue
|
|
images += create_image(name+repr(i), sprmap[image], alt=name)
|
|
i += 1
|
|
if (l-3*(i/3) >= 3) and (i % 3) == 0:
|
|
images += '<br>'
|
|
elif 'nimage' in bonus.__dict__:
|
|
images = create_image(name, sprmap[bonus.nimage], alt=name)
|
|
doc = bonus.__doc__
|
|
if doc == None:
|
|
doc = ''
|
|
bigdoc = getattr(bonus, 'bigdoc', None) or ''
|
|
if hasattr(bonus, 'bigbonus'):
|
|
assert bigdoc, "missing 'bigdoc' on %r" % (bonus,)
|
|
if clasindex % 2 == 1:
|
|
bgcolor = '"#E0FFE0"'
|
|
else:
|
|
bgcolor = 'white'
|
|
print('<TR><TD width=132 align=right>', end=' ', file=dfile)
|
|
print(images, end=' ', file=dfile)
|
|
print('</TD><TD width=20></TD>', end=' ', file=dfile)
|
|
print('<TD bgcolor=%s>%s</TD>' % (bgcolor, doc), end=' ', file=dfile)
|
|
print('</TD><TD width=20 bgcolor=%s></TD>' % bgcolor, end=' ', file=dfile)
|
|
print('<TD bgcolor=%s>%s</TD></TR>' % (bgcolor, bigdoc), file=dfile)
|
|
|
|
print(""" </TABLE>
|
|
</BODY>
|
|
</HTML>
|
|
""", file=dfile)
|
|
|
|
dfile.close()
|