summaryrefslogtreecommitdiff
path: root/bubbob/doc/bonus-doc.py
diff options
context:
space:
mode:
Diffstat (limited to 'bubbob/doc/bonus-doc.py')
-rwxr-xr-xbubbob/doc/bonus-doc.py170
1 files changed, 170 insertions, 0 deletions
diff --git a/bubbob/doc/bonus-doc.py b/bubbob/doc/bonus-doc.py
new file mode 100755
index 0000000..f03b013
--- /dev/null
+++ b/bubbob/doc/bonus-doc.py
@@ -0,0 +1,170 @@
+#!/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 >> img, 'P6'
+ print >> img, source[1][2], source[1][3]+extralines
+ print >> img, c
+ 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 >> dfile, """<!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>
+"""
+#" 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 processed.has_key(bonus):
+ 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 = processed.items()
+sorted_classes.sort(sorter)
+
+for clasindex, clas in enumerate(sorted_classes):
+ bonus = clas[0]
+ images = ''
+ name = bonus.__name__
+ if bonus.__dict__.has_key('nimages'):
+ # A multi image entry.
+ i = 0
+ l = len(bonus.nimages)
+ for image in bonus.nimages:
+ if image == 'potion4':
+ continue
+ images += create_image(name+`i`, sprmap[image], alt=name)
+ i += 1
+ if (l-3*(i/3) >= 3) and (i % 3) == 0:
+ images += '<br>'
+ elif bonus.__dict__.has_key('nimage'):
+ 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 >> dfile, '<TR><TD width=132 align=right>',
+ print >> dfile, images,
+ print >> dfile, '</TD><TD width=20></TD>',
+ print >> dfile, '<TD bgcolor=%s>%s</TD>' % (bgcolor, doc),
+ print >> dfile, '</TD><TD width=20 bgcolor=%s></TD>' % bgcolor,
+ print >> dfile, '<TD bgcolor=%s>%s</TD></TR>' % (bgcolor, bigdoc)
+
+print >> dfile, """ </TABLE>
+ </BODY>
+</HTML>
+"""
+
+dfile.close()