aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--AUTHORS4
-rw-r--r--COPYING725
-rw-r--r--[-rwxr-xr-x]ChangeLog788
-rw-r--r--INSTALL34
-rw-r--r--NEWS1
-rw-r--r--README.md50
-rw-r--r--TODO6
-rw-r--r--[-rwxr-xr-x]VERSION2
-rw-r--r--archive/Readme3
-rw-r--r--archive/blr1/ChangeLog40
-rw-r--r--archive/blr1/Compiling.txt9
-rw-r--r--archive/blr1/Compiling_zh.txt9
-rw-r--r--archive/blr1/README.txt178
-rw-r--r--archive/blr1/README_zh.txt166
-rw-r--r--archive/blr1/VERSION.txt1
-rw-r--r--archive/blr1/resources/bg.pngbin0 -> 261 bytes
-rw-r--r--archive/blr1/resources/blnsns.pngbin0 -> 9928 bytes
-rw-r--r--archive/blr1/resources/charmap.fnt99
-rw-r--r--archive/blr1/resources/credits.pngbin0 -> 3281111 bytes
-rw-r--r--archive/blr1/resources/ss1.pngbin0 -> 25257 bytes
-rw-r--r--archive/blr1/resources/ss2.pngbin0 -> 49339 bytes
-rw-r--r--archive/blr1/resources/tap.oggbin0 -> 3626 bytes
-rw-r--r--archive/blr1/resources/title.pngbin0 -> 822432 bytes
-rw-r--r--archive/blr1/src/effects.h88
-rw-r--r--archive/blr1/src/global.h297
-rw-r--r--archive/blr1/src/levels.h1880
-rw-r--r--archive/blr1/src/loading.h (renamed from loading.h)0
-rw-r--r--archive/blr1/src/main.cpp510
-rw-r--r--archive/blr1/src/menuitem.cpp201
-rw-r--r--archive/blr1/src/menuitem.h46
-rw-r--r--archive/blr1/src/menus.h742
-rw-r--r--archive/blr1/src/scorec.h252
-rw-r--r--archive/blr1/src/towernbullet.h983
-rw-r--r--archive/blr2/COPYING51
-rwxr-xr-xarchive/blr2/ChangeLog728
-rw-r--r--archive/blr2/Extras (renamed from Extras)0
-rw-r--r--archive/blr2/FAQ (renamed from FAQ)0
-rw-r--r--archive/blr2/FAQ.zh (renamed from FAQ.zh)0
-rw-r--r--archive/blr2/INSTALL29
-rw-r--r--archive/blr2/Levels (renamed from Levels)0
-rw-r--r--archive/blr2/Levels.zh (renamed from Levels.zh)0
-rw-r--r--archive/blr2/Readme (renamed from Readme)0
-rw-r--r--archive/blr2/Readme.zh (renamed from Readme.zh)0
-rwxr-xr-xarchive/blr2/VERSION1
-rwxr-xr-xarchive/blr2/resources/b_diff.pngbin0 -> 849040 bytes
-rw-r--r--archive/blr2/resources/b_inter.pngbin0 -> 673510 bytes
-rwxr-xr-xarchive/blr2/resources/b_leaves.pngbin0 -> 92942 bytes
-rwxr-xr-xarchive/blr2/resources/b_null.pngbin0 -> 256 bytes
-rw-r--r--archive/blr2/resources/bdig.fnt15
-rwxr-xr-xarchive/blr2/resources/blnsns.pngbin0 -> 22038 bytes
-rwxr-xr-xarchive/blr2/resources/charmap.fnt99
-rwxr-xr-xarchive/blr2/resources/credits.pngbin0 -> 444814 bytes
-rwxr-xr-xarchive/blr2/resources/e_leaf.pngbin0 -> 96212 bytes
-rw-r--r--archive/blr2/resources/e_sflake.pngbin0 -> 491254 bytes
-rw-r--r--archive/blr2/resources/e_skyitem.pngbin0 -> 1313643 bytes
-rw-r--r--archive/blr2/resources/help.pngbin0 -> 486996 bytes
-rw-r--r--archive/blr2/resources/menus.pngbin0 -> 68585 bytes
-rwxr-xr-xarchive/blr2/resources/ss.pngbin0 -> 17442 bytes
-rwxr-xr-xarchive/blr2/resources/tap.oggbin0 -> 3626 bytes
-rw-r--r--archive/blr2/resources/title.pngbin0 -> 824146 bytes
-rw-r--r--archive/blr2/resources/vdig.fnt20
-rw-r--r--archive/blr2/src/background.h (renamed from background.h)0
-rw-r--r--archive/blr2/src/effects.h (renamed from effects.h)0
-rw-r--r--archive/blr2/src/global.h (renamed from global.h)2
-rw-r--r--archive/blr2/src/hgeft.cpp (renamed from hgeft.cpp)4
-rw-r--r--archive/blr2/src/hgeft.h (renamed from hgeft.h)0
-rw-r--r--archive/blr2/src/levels.h (renamed from levels.h)0
-rw-r--r--archive/blr2/src/libcgh.h (renamed from libcgh.h)0
-rw-r--r--archive/blr2/src/libcghEx.cpp (renamed from libcghEx.cpp)42
-rw-r--r--archive/blr2/src/loading.h384
-rw-r--r--archive/blr2/src/main.cpp (renamed from main.cpp)7
-rw-r--r--archive/blr2/src/menus.h (renamed from menus.h)10
-rw-r--r--archive/blr2/src/music.h (renamed from music.h)0
-rw-r--r--archive/blr2/src/scorec.h (renamed from scorec.h)0
-rw-r--r--archive/blr2/src/scoresystem.h (renamed from scoresystem.h)0
-rw-r--r--archive/blr2/src/towernbullet.h (renamed from towernbullet.h)0
-rw-r--r--archive/hge/CxImage/license.txt (renamed from hge/CxImage/license.txt)0
-rw-r--r--archive/hge/CxImage/stdint.h (renamed from hge/CxImage/stdint.h)0
-rw-r--r--archive/hge/CxImage/tif_xfile.cpp (renamed from hge/CxImage/tif_xfile.cpp)0
-rw-r--r--archive/hge/CxImage/xfile.h (renamed from hge/CxImage/xfile.h)0
-rw-r--r--archive/hge/CxImage/ximabmp.cpp (renamed from hge/CxImage/ximabmp.cpp)0
-rw-r--r--archive/hge/CxImage/ximabmp.h (renamed from hge/CxImage/ximabmp.h)0
-rw-r--r--archive/hge/CxImage/ximacfg.h (renamed from hge/CxImage/ximacfg.h)0
-rw-r--r--archive/hge/CxImage/ximadef.h (renamed from hge/CxImage/ximadef.h)0
-rw-r--r--archive/hge/CxImage/ximadsp.cpp (renamed from hge/CxImage/ximadsp.cpp)0
-rw-r--r--archive/hge/CxImage/ximaenc.cpp (renamed from hge/CxImage/ximaenc.cpp)0
-rw-r--r--archive/hge/CxImage/ximaexif.cpp (renamed from hge/CxImage/ximaexif.cpp)0
-rw-r--r--archive/hge/CxImage/ximage.cpp (renamed from hge/CxImage/ximage.cpp)0
-rw-r--r--archive/hge/CxImage/ximage.h (renamed from hge/CxImage/ximage.h)0
-rw-r--r--archive/hge/CxImage/ximagif.cpp (renamed from hge/CxImage/ximagif.cpp)0
-rw-r--r--archive/hge/CxImage/ximagif.h (renamed from hge/CxImage/ximagif.h)0
-rw-r--r--archive/hge/CxImage/ximahist.cpp (renamed from hge/CxImage/ximahist.cpp)0
-rw-r--r--archive/hge/CxImage/ximaico.cpp (renamed from hge/CxImage/ximaico.cpp)0
-rw-r--r--archive/hge/CxImage/ximaico.h (renamed from hge/CxImage/ximaico.h)0
-rw-r--r--archive/hge/CxImage/ximainfo.cpp (renamed from hge/CxImage/ximainfo.cpp)0
-rw-r--r--archive/hge/CxImage/ximaint.cpp (renamed from hge/CxImage/ximaint.cpp)0
-rw-r--r--archive/hge/CxImage/ximaiter.h (renamed from hge/CxImage/ximaiter.h)0
-rw-r--r--archive/hge/CxImage/ximajas.cpp (renamed from hge/CxImage/ximajas.cpp)0
-rw-r--r--archive/hge/CxImage/ximajas.h (renamed from hge/CxImage/ximajas.h)0
-rw-r--r--archive/hge/CxImage/ximajbg.cpp (renamed from hge/CxImage/ximajbg.cpp)0
-rw-r--r--archive/hge/CxImage/ximajbg.h (renamed from hge/CxImage/ximajbg.h)0
-rw-r--r--archive/hge/CxImage/ximajpg.cpp (renamed from hge/CxImage/ximajpg.cpp)0
-rw-r--r--archive/hge/CxImage/ximajpg.h (renamed from hge/CxImage/ximajpg.h)0
-rw-r--r--archive/hge/CxImage/ximalpha.cpp (renamed from hge/CxImage/ximalpha.cpp)0
-rw-r--r--archive/hge/CxImage/ximalyr.cpp (renamed from hge/CxImage/ximalyr.cpp)0
-rw-r--r--archive/hge/CxImage/ximamng.cpp (renamed from hge/CxImage/ximamng.cpp)0
-rw-r--r--archive/hge/CxImage/ximamng.h (renamed from hge/CxImage/ximamng.h)0
-rw-r--r--archive/hge/CxImage/ximapal.cpp (renamed from hge/CxImage/ximapal.cpp)0
-rw-r--r--archive/hge/CxImage/ximapcx.cpp (renamed from hge/CxImage/ximapcx.cpp)0
-rw-r--r--archive/hge/CxImage/ximapcx.h (renamed from hge/CxImage/ximapcx.h)0
-rw-r--r--archive/hge/CxImage/ximapng.cpp (renamed from hge/CxImage/ximapng.cpp)0
-rw-r--r--archive/hge/CxImage/ximapng.h (renamed from hge/CxImage/ximapng.h)0
-rw-r--r--archive/hge/CxImage/ximapsd.cpp (renamed from hge/CxImage/ximapsd.cpp)0
-rw-r--r--archive/hge/CxImage/ximapsd.h (renamed from hge/CxImage/ximapsd.h)0
-rw-r--r--archive/hge/CxImage/ximaraw.cpp (renamed from hge/CxImage/ximaraw.cpp)0
-rw-r--r--archive/hge/CxImage/ximaraw.h (renamed from hge/CxImage/ximaraw.h)0
-rw-r--r--archive/hge/CxImage/ximasel.cpp (renamed from hge/CxImage/ximasel.cpp)0
-rw-r--r--archive/hge/CxImage/ximaska.cpp (renamed from hge/CxImage/ximaska.cpp)0
-rw-r--r--archive/hge/CxImage/ximaska.h (renamed from hge/CxImage/ximaska.h)0
-rw-r--r--archive/hge/CxImage/ximatga.cpp (renamed from hge/CxImage/ximatga.cpp)0
-rw-r--r--archive/hge/CxImage/ximatga.h (renamed from hge/CxImage/ximatga.h)0
-rw-r--r--archive/hge/CxImage/ximath.cpp (renamed from hge/CxImage/ximath.cpp)0
-rw-r--r--archive/hge/CxImage/ximath.h (renamed from hge/CxImage/ximath.h)0
-rw-r--r--archive/hge/CxImage/ximatif.cpp (renamed from hge/CxImage/ximatif.cpp)0
-rw-r--r--archive/hge/CxImage/ximatif.h (renamed from hge/CxImage/ximatif.h)0
-rw-r--r--archive/hge/CxImage/ximatran.cpp (renamed from hge/CxImage/ximatran.cpp)0
-rw-r--r--archive/hge/CxImage/ximawbmp.cpp (renamed from hge/CxImage/ximawbmp.cpp)0
-rw-r--r--archive/hge/CxImage/ximawbmp.h (renamed from hge/CxImage/ximawbmp.h)0
-rw-r--r--archive/hge/CxImage/ximawmf.cpp (renamed from hge/CxImage/ximawmf.cpp)0
-rw-r--r--archive/hge/CxImage/ximawmf.h (renamed from hge/CxImage/ximawmf.h)0
-rw-r--r--archive/hge/CxImage/ximawnd.cpp (renamed from hge/CxImage/ximawnd.cpp)0
-rw-r--r--archive/hge/CxImage/xiofile.h (renamed from hge/CxImage/xiofile.h)0
-rw-r--r--archive/hge/CxImage/xmemfile.cpp (renamed from hge/CxImage/xmemfile.cpp)0
-rw-r--r--archive/hge/CxImage/xmemfile.h (renamed from hge/CxImage/xmemfile.h)0
-rw-r--r--archive/hge/ZLIB/adler32.c (renamed from hge/ZLIB/adler32.c)0
-rw-r--r--archive/hge/ZLIB/crc32.c (renamed from hge/ZLIB/crc32.c)0
-rw-r--r--archive/hge/ZLIB/crc32.h (renamed from hge/ZLIB/crc32.h)0
-rw-r--r--archive/hge/ZLIB/crypt.h (renamed from hge/ZLIB/crypt.h)0
-rw-r--r--archive/hge/ZLIB/deflate.h (renamed from hge/ZLIB/deflate.h)0
-rw-r--r--archive/hge/ZLIB/inffast.c (renamed from hge/ZLIB/inffast.c)0
-rw-r--r--archive/hge/ZLIB/inffast.h (renamed from hge/ZLIB/inffast.h)0
-rw-r--r--archive/hge/ZLIB/inffixed.h (renamed from hge/ZLIB/inffixed.h)0
-rw-r--r--archive/hge/ZLIB/inflate.c (renamed from hge/ZLIB/inflate.c)0
-rw-r--r--archive/hge/ZLIB/inflate.h (renamed from hge/ZLIB/inflate.h)0
-rw-r--r--archive/hge/ZLIB/inftrees.c (renamed from hge/ZLIB/inftrees.c)0
-rw-r--r--archive/hge/ZLIB/inftrees.h (renamed from hge/ZLIB/inftrees.h)0
-rw-r--r--archive/hge/ZLIB/ioapi.c (renamed from hge/ZLIB/ioapi.c)0
-rw-r--r--archive/hge/ZLIB/ioapi.h (renamed from hge/ZLIB/ioapi.h)0
-rw-r--r--archive/hge/ZLIB/trees.c (renamed from hge/ZLIB/trees.c)0
-rw-r--r--archive/hge/ZLIB/trees.h (renamed from hge/ZLIB/trees.h)0
-rw-r--r--archive/hge/ZLIB/uncompr.c (renamed from hge/ZLIB/uncompr.c)0
-rw-r--r--archive/hge/ZLIB/unzip.c (renamed from hge/ZLIB/unzip.c)0
-rw-r--r--archive/hge/ZLIB/unzip.h (renamed from hge/ZLIB/unzip.h)0
-rw-r--r--archive/hge/ZLIB/zconf.h (renamed from hge/ZLIB/zconf.h)0
-rw-r--r--archive/hge/ZLIB/zconf.in.h (renamed from hge/ZLIB/zconf.in.h)0
-rw-r--r--archive/hge/ZLIB/zip.h (renamed from hge/ZLIB/zip.h)0
-rw-r--r--archive/hge/ZLIB/zlib.h (renamed from hge/ZLIB/zlib.h)0
-rw-r--r--archive/hge/ZLIB/zutil.c (renamed from hge/ZLIB/zutil.c)0
-rw-r--r--archive/hge/ZLIB/zutil.h (renamed from hge/ZLIB/zutil.h)0
-rw-r--r--archive/hge/demo.cpp (renamed from hge/demo.cpp)0
-rw-r--r--archive/hge/gl.h (renamed from hge/gl.h)0
-rw-r--r--archive/hge/graphics.cpp (renamed from hge/graphics.cpp)0
-rw-r--r--archive/hge/hge_glfuncs.h (renamed from hge/hge_glfuncs.h)0
-rw-r--r--archive/hge/hge_impl.h (renamed from hge/hge_impl.h)0
-rw-r--r--archive/hge/ini.cpp (renamed from hge/ini.cpp)0
-rw-r--r--archive/hge/input.cpp (renamed from hge/input.cpp)0
-rw-r--r--archive/hge/power.cpp (renamed from hge/power.cpp)0
-rw-r--r--archive/hge/random.cpp (renamed from hge/random.cpp)0
-rw-r--r--archive/hge/resource.cpp (renamed from hge/resource.cpp)0
-rw-r--r--archive/hge/sound.cpp (renamed from hge/sound.cpp)0
-rw-r--r--archive/hge/system.cpp (renamed from hge/system.cpp)0
-rw-r--r--archive/hge/timer.cpp (renamed from hge/timer.cpp)0
-rw-r--r--archive/hgehelp/hgeanim.cpp (renamed from hgehelp/hgeanim.cpp)0
-rw-r--r--archive/hgehelp/hgecolor.cpp (renamed from hgehelp/hgecolor.cpp)0
-rw-r--r--archive/hgehelp/hgedistort.cpp (renamed from hgehelp/hgedistort.cpp)0
-rw-r--r--archive/hgehelp/hgefont.cpp (renamed from hgehelp/hgefont.cpp)0
-rw-r--r--archive/hgehelp/hgegui.cpp (renamed from hgehelp/hgegui.cpp)0
-rw-r--r--archive/hgehelp/hgeguictrls.cpp (renamed from hgehelp/hgeguictrls.cpp)0
-rw-r--r--archive/hgehelp/hgeparticle.cpp (renamed from hgehelp/hgeparticle.cpp)0
-rw-r--r--archive/hgehelp/hgepmanager.cpp (renamed from hgehelp/hgepmanager.cpp)0
-rw-r--r--archive/hgehelp/hgerect.cpp (renamed from hgehelp/hgerect.cpp)0
-rw-r--r--archive/hgehelp/hgeresource.cpp (renamed from hgehelp/hgeresource.cpp)0
-rw-r--r--archive/hgehelp/hgesprite.cpp (renamed from hgehelp/hgesprite.cpp)0
-rw-r--r--archive/hgehelp/hgestrings.cpp (renamed from hgehelp/hgestrings.cpp)0
-rw-r--r--archive/hgehelp/hgevector.cpp (renamed from hgehelp/hgevector.cpp)0
-rw-r--r--archive/hgehelp/parser.cpp (renamed from hgehelp/parser.cpp)0
-rw-r--r--archive/hgehelp/parser.h (renamed from hgehelp/parser.h)0
-rw-r--r--archive/hgehelp/resources.cpp (renamed from hgehelp/resources.cpp)0
-rw-r--r--archive/hgehelp/resources.h (renamed from hgehelp/resources.h)0
-rw-r--r--archive/hgewin/ZLIB/adler32.c (renamed from hgewin/ZLIB/adler32.c)0
-rw-r--r--archive/hgewin/ZLIB/crc32.c (renamed from hgewin/ZLIB/crc32.c)0
-rw-r--r--archive/hgewin/ZLIB/crc32.h (renamed from hgewin/ZLIB/crc32.h)0
-rw-r--r--archive/hgewin/ZLIB/crypt.h (renamed from hgewin/ZLIB/crypt.h)0
-rw-r--r--archive/hgewin/ZLIB/deflate.h (renamed from hgewin/ZLIB/deflate.h)0
-rw-r--r--archive/hgewin/ZLIB/inffast.c (renamed from hgewin/ZLIB/inffast.c)0
-rw-r--r--archive/hgewin/ZLIB/inffast.h (renamed from hgewin/ZLIB/inffast.h)0
-rw-r--r--archive/hgewin/ZLIB/inffixed.h (renamed from hgewin/ZLIB/inffixed.h)0
-rw-r--r--archive/hgewin/ZLIB/inflate.c (renamed from hgewin/ZLIB/inflate.c)0
-rw-r--r--archive/hgewin/ZLIB/inflate.h (renamed from hgewin/ZLIB/inflate.h)0
-rw-r--r--archive/hgewin/ZLIB/inftrees.c (renamed from hgewin/ZLIB/inftrees.c)0
-rw-r--r--archive/hgewin/ZLIB/inftrees.h (renamed from hgewin/ZLIB/inftrees.h)0
-rw-r--r--archive/hgewin/ZLIB/ioapi.c (renamed from hgewin/ZLIB/ioapi.c)0
-rw-r--r--archive/hgewin/ZLIB/ioapi.h (renamed from hgewin/ZLIB/ioapi.h)0
-rw-r--r--archive/hgewin/ZLIB/trees.c (renamed from hgewin/ZLIB/trees.c)0
-rw-r--r--archive/hgewin/ZLIB/trees.h (renamed from hgewin/ZLIB/trees.h)0
-rw-r--r--archive/hgewin/ZLIB/uncompr.c (renamed from hgewin/ZLIB/uncompr.c)0
-rw-r--r--archive/hgewin/ZLIB/unzip.c (renamed from hgewin/ZLIB/unzip.c)0
-rw-r--r--archive/hgewin/ZLIB/unzip.h (renamed from hgewin/ZLIB/unzip.h)0
-rw-r--r--archive/hgewin/ZLIB/zconf.h (renamed from hgewin/ZLIB/zconf.h)0
-rw-r--r--archive/hgewin/ZLIB/zconf.in.h (renamed from hgewin/ZLIB/zconf.in.h)0
-rw-r--r--archive/hgewin/ZLIB/zip.h (renamed from hgewin/ZLIB/zip.h)0
-rw-r--r--archive/hgewin/ZLIB/zlib.h (renamed from hgewin/ZLIB/zlib.h)0
-rw-r--r--archive/hgewin/ZLIB/zutil.c (renamed from hgewin/ZLIB/zutil.c)0
-rw-r--r--archive/hgewin/ZLIB/zutil.h (renamed from hgewin/ZLIB/zutil.h)0
-rw-r--r--archive/hgewin/demo.cpp (renamed from hgewin/demo.cpp)0
-rwxr-xr-xarchive/hgewin/graphics.cpp (renamed from hgewin/graphics.cpp)0
-rwxr-xr-xarchive/hgewin/hge_impl.h (renamed from hgewin/hge_impl.h)0
-rwxr-xr-xarchive/hgewin/ini.cpp (renamed from hgewin/ini.cpp)0
-rwxr-xr-xarchive/hgewin/input.cpp (renamed from hgewin/input.cpp)0
-rwxr-xr-xarchive/hgewin/power.cpp (renamed from hgewin/power.cpp)0
-rwxr-xr-xarchive/hgewin/random.cpp (renamed from hgewin/random.cpp)0
-rwxr-xr-xarchive/hgewin/resource.cpp (renamed from hgewin/resource.cpp)0
-rw-r--r--archive/hgewin/sound.cpp (renamed from hgewin/sound.cpp)0
-rwxr-xr-xarchive/hgewin/system.cpp (renamed from hgewin/system.cpp)0
-rwxr-xr-xarchive/hgewin/timer.cpp (renamed from hgewin/timer.cpp)0
-rw-r--r--archive/include/hge.h (renamed from include/hge.h)0
-rw-r--r--archive/include/hgeanim.h (renamed from include/hgeanim.h)0
-rw-r--r--archive/include/hgecolor.h (renamed from include/hgecolor.h)0
-rw-r--r--archive/include/hgedistort.h (renamed from include/hgedistort.h)0
-rw-r--r--archive/include/hgefont.h (renamed from include/hgefont.h)0
-rw-r--r--archive/include/hgegui.h (renamed from include/hgegui.h)0
-rw-r--r--archive/include/hgeguictrls.h (renamed from include/hgeguictrls.h)0
-rw-r--r--archive/include/hgeparticle.h (renamed from include/hgeparticle.h)0
-rw-r--r--archive/include/hgerect.h (renamed from include/hgerect.h)0
-rw-r--r--archive/include/hgeresource.h (renamed from include/hgeresource.h)0
-rw-r--r--archive/include/hgesprite.h (renamed from include/hgesprite.h)0
-rw-r--r--archive/include/hgestrings.h (renamed from include/hgestrings.h)0
-rw-r--r--archive/include/hgevector.h (renamed from include/hgevector.h)0
-rw-r--r--archive/include/unix_compat.h (renamed from include/unix_compat.h)0
-rwxr-xr-xbuild42
240 files changed, 7670 insertions, 878 deletions
diff --git a/AUTHORS b/AUTHORS
new file mode 100644
index 0000000..92c7dc9
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,4 @@
+The whole BLR series is created and maintained by Chris Xiong solely.
+Amazing, right?
+
+E-mail: chirs241097@gmail.com
diff --git a/COPYING b/COPYING
index bf98efc..20d40b6 100644
--- a/COPYING
+++ b/COPYING
@@ -1,51 +1,674 @@
-BLRII itself distributes under the terms of the BSD license.
-Varieties of hge-unix and hge included in the source code distribution are still zlib-licensed.
-Here's the text of the BSD license and the zlib license.
-==============================================================================================
-Copyright (c) 2014, Chris Xiong
-All rights reserved.
-
-Redistribution and use in source and binary forms, with or without
-modification, are permitted provided that the following conditions are met:
- * Redistributions of source code must retain the above copyright
- notice, this list of conditions and the following disclaimer.
- * Redistributions in binary form must reproduce the above copyright
- notice, this list of conditions and the following disclaimer in the
- documentation and/or other materials provided with the distribution.
- * Neither the name of "Chrisoft" nor the names of its contributors may
- be used to endorse or promote products derived from this software
- without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
-ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
-WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
-DISCLAIMED. IN NO EVENT SHALL CHRIS XIONG BE LIABLE FOR ANY
-DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
-(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
-LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
-ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
-(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
-SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
-==============================================================================================
-Copyright (c) 2003-2008 Relish Games
- 2011 Ryan C. Gordon
- 2013-2014 Chris Xiong
-
-
-This software is provided 'as-is', without any express or implied warranty.
-In no event will the authors be held liable for any damages arising from
-the use of this software.
-
-Permission is granted to anyone to use this software for any purpose,
-including commercial applications, and to alter it and redistribute it
-freely, subject to the following restrictions:
-
-1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
-
-2. Altered source versions must be plainly marked as such, and must not
- be misrepresented as being the original software.
-
-3. This notice may not be removed or altered from any source distribution.
+ GNU GENERAL PUBLIC LICENSE
+ Version 3, 29 June 2007
+
+ Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The GNU General Public License is a free, copyleft license for
+software and other kinds of works.
+
+ The licenses for most software and other practical works are designed
+to take away your freedom to share and change the works. By contrast,
+the GNU General Public License is intended to guarantee your freedom to
+share and change all versions of a program--to make sure it remains free
+software for all its users. We, the Free Software Foundation, use the
+GNU General Public License for most of our software; it applies also to
+any other work released this way by its authors. You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+them if you wish), that you receive source code or can get it if you
+want it, that you can change the software or use pieces of it in new
+free programs, and that you know you can do these things.
+
+ To protect your rights, we need to prevent others from denying you
+these rights or asking you to surrender the rights. Therefore, you have
+certain responsibilities if you distribute copies of the software, or if
+you modify it: responsibilities to respect the freedom of others.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must pass on to the recipients the same
+freedoms that you received. You must make sure that they, too, receive
+or can get the source code. And you must show them these terms so they
+know their rights.
+
+ Developers that use the GNU GPL protect your rights with two steps:
+(1) assert copyright on the software, and (2) offer you this License
+giving you legal permission to copy, distribute and/or modify it.
+
+ For the developers' and authors' protection, the GPL clearly explains
+that there is no warranty for this free software. For both users' and
+authors' sake, the GPL requires that modified versions be marked as
+changed, so that their problems will not be attributed erroneously to
+authors of previous versions.
+
+ Some devices are designed to deny users access to install or run
+modified versions of the software inside them, although the manufacturer
+can do so. This is fundamentally incompatible with the aim of
+protecting users' freedom to change the software. The systematic
+pattern of such abuse occurs in the area of products for individuals to
+use, which is precisely where it is most unacceptable. Therefore, we
+have designed this version of the GPL to prohibit the practice for those
+products. If such problems arise substantially in other domains, we
+stand ready to extend this provision to those domains in future versions
+of the GPL, as needed to protect the freedom of users.
+
+ Finally, every program is threatened constantly by software patents.
+States should not allow patents to restrict development and use of
+software on general-purpose computers, but in those that do, we wish to
+avoid the special danger that patents applied to a free program could
+make it effectively proprietary. To prevent this, the GPL assures that
+patents cannot be used to render the program non-free.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ TERMS AND CONDITIONS
+
+ 0. Definitions.
+
+ "This License" refers to version 3 of the GNU General Public License.
+
+ "Copyright" also means copyright-like laws that apply to other kinds of
+works, such as semiconductor masks.
+
+ "The Program" refers to any copyrightable work licensed under this
+License. Each licensee is addressed as "you". "Licensees" and
+"recipients" may be individuals or organizations.
+
+ To "modify" a work means to copy from or adapt all or part of the work
+in a fashion requiring copyright permission, other than the making of an
+exact copy. The resulting work is called a "modified version" of the
+earlier work or a work "based on" the earlier work.
+
+ A "covered work" means either the unmodified Program or a work based
+on the Program.
+
+ To "propagate" a work means to do anything with it that, without
+permission, would make you directly or secondarily liable for
+infringement under applicable copyright law, except executing it on a
+computer or modifying a private copy. Propagation includes copying,
+distribution (with or without modification), making available to the
+public, and in some countries other activities as well.
+
+ To "convey" a work means any kind of propagation that enables other
+parties to make or receive copies. Mere interaction with a user through
+a computer network, with no transfer of a copy, is not conveying.
+
+ An interactive user interface displays "Appropriate Legal Notices"
+to the extent that it includes a convenient and prominently visible
+feature that (1) displays an appropriate copyright notice, and (2)
+tells the user that there is no warranty for the work (except to the
+extent that warranties are provided), that licensees may convey the
+work under this License, and how to view a copy of this License. If
+the interface presents a list of user commands or options, such as a
+menu, a prominent item in the list meets this criterion.
+
+ 1. Source Code.
+
+ The "source code" for a work means the preferred form of the work
+for making modifications to it. "Object code" means any non-source
+form of a work.
+
+ A "Standard Interface" means an interface that either is an official
+standard defined by a recognized standards body, or, in the case of
+interfaces specified for a particular programming language, one that
+is widely used among developers working in that language.
+
+ The "System Libraries" of an executable work include anything, other
+than the work as a whole, that (a) is included in the normal form of
+packaging a Major Component, but which is not part of that Major
+Component, and (b) serves only to enable use of the work with that
+Major Component, or to implement a Standard Interface for which an
+implementation is available to the public in source code form. A
+"Major Component", in this context, means a major essential component
+(kernel, window system, and so on) of the specific operating system
+(if any) on which the executable work runs, or a compiler used to
+produce the work, or an object code interpreter used to run it.
+
+ The "Corresponding Source" for a work in object code form means all
+the source code needed to generate, install, and (for an executable
+work) run the object code and to modify the work, including scripts to
+control those activities. However, it does not include the work's
+System Libraries, or general-purpose tools or generally available free
+programs which are used unmodified in performing those activities but
+which are not part of the work. For example, Corresponding Source
+includes interface definition files associated with source files for
+the work, and the source code for shared libraries and dynamically
+linked subprograms that the work is specifically designed to require,
+such as by intimate data communication or control flow between those
+subprograms and other parts of the work.
+
+ The Corresponding Source need not include anything that users
+can regenerate automatically from other parts of the Corresponding
+Source.
+
+ The Corresponding Source for a work in source code form is that
+same work.
+
+ 2. Basic Permissions.
+
+ All rights granted under this License are granted for the term of
+copyright on the Program, and are irrevocable provided the stated
+conditions are met. This License explicitly affirms your unlimited
+permission to run the unmodified Program. The output from running a
+covered work is covered by this License only if the output, given its
+content, constitutes a covered work. This License acknowledges your
+rights of fair use or other equivalent, as provided by copyright law.
+
+ You may make, run and propagate covered works that you do not
+convey, without conditions so long as your license otherwise remains
+in force. You may convey covered works to others for the sole purpose
+of having them make modifications exclusively for you, or provide you
+with facilities for running those works, provided that you comply with
+the terms of this License in conveying all material for which you do
+not control copyright. Those thus making or running the covered works
+for you must do so exclusively on your behalf, under your direction
+and control, on terms that prohibit them from making any copies of
+your copyrighted material outside their relationship with you.
+
+ Conveying under any other circumstances is permitted solely under
+the conditions stated below. Sublicensing is not allowed; section 10
+makes it unnecessary.
+
+ 3. Protecting Users' Legal Rights From Anti-Circumvention Law.
+
+ No covered work shall be deemed part of an effective technological
+measure under any applicable law fulfilling obligations under article
+11 of the WIPO copyright treaty adopted on 20 December 1996, or
+similar laws prohibiting or restricting circumvention of such
+measures.
+
+ When you convey a covered work, you waive any legal power to forbid
+circumvention of technological measures to the extent such circumvention
+is effected by exercising rights under this License with respect to
+the covered work, and you disclaim any intention to limit operation or
+modification of the work as a means of enforcing, against the work's
+users, your or third parties' legal rights to forbid circumvention of
+technological measures.
+
+ 4. Conveying Verbatim Copies.
+
+ You may convey verbatim copies of the Program's source code as you
+receive it, in any medium, provided that you conspicuously and
+appropriately publish on each copy an appropriate copyright notice;
+keep intact all notices stating that this License and any
+non-permissive terms added in accord with section 7 apply to the code;
+keep intact all notices of the absence of any warranty; and give all
+recipients a copy of this License along with the Program.
+
+ You may charge any price or no price for each copy that you convey,
+and you may offer support or warranty protection for a fee.
+
+ 5. Conveying Modified Source Versions.
+
+ You may convey a work based on the Program, or the modifications to
+produce it from the Program, in the form of source code under the
+terms of section 4, provided that you also meet all of these conditions:
+
+ a) The work must carry prominent notices stating that you modified
+ it, and giving a relevant date.
+
+ b) The work must carry prominent notices stating that it is
+ released under this License and any conditions added under section
+ 7. This requirement modifies the requirement in section 4 to
+ "keep intact all notices".
+
+ c) You must license the entire work, as a whole, under this
+ License to anyone who comes into possession of a copy. This
+ License will therefore apply, along with any applicable section 7
+ additional terms, to the whole of the work, and all its parts,
+ regardless of how they are packaged. This License gives no
+ permission to license the work in any other way, but it does not
+ invalidate such permission if you have separately received it.
+
+ d) If the work has interactive user interfaces, each must display
+ Appropriate Legal Notices; however, if the Program has interactive
+ interfaces that do not display Appropriate Legal Notices, your
+ work need not make them do so.
+
+ A compilation of a covered work with other separate and independent
+works, which are not by their nature extensions of the covered work,
+and which are not combined with it such as to form a larger program,
+in or on a volume of a storage or distribution medium, is called an
+"aggregate" if the compilation and its resulting copyright are not
+used to limit the access or legal rights of the compilation's users
+beyond what the individual works permit. Inclusion of a covered work
+in an aggregate does not cause this License to apply to the other
+parts of the aggregate.
+
+ 6. Conveying Non-Source Forms.
+
+ You may convey a covered work in object code form under the terms
+of sections 4 and 5, provided that you also convey the
+machine-readable Corresponding Source under the terms of this License,
+in one of these ways:
+
+ a) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by the
+ Corresponding Source fixed on a durable physical medium
+ customarily used for software interchange.
+
+ b) Convey the object code in, or embodied in, a physical product
+ (including a physical distribution medium), accompanied by a
+ written offer, valid for at least three years and valid for as
+ long as you offer spare parts or customer support for that product
+ model, to give anyone who possesses the object code either (1) a
+ copy of the Corresponding Source for all the software in the
+ product that is covered by this License, on a durable physical
+ medium customarily used for software interchange, for a price no
+ more than your reasonable cost of physically performing this
+ conveying of source, or (2) access to copy the
+ Corresponding Source from a network server at no charge.
+
+ c) Convey individual copies of the object code with a copy of the
+ written offer to provide the Corresponding Source. This
+ alternative is allowed only occasionally and noncommercially, and
+ only if you received the object code with such an offer, in accord
+ with subsection 6b.
+
+ d) Convey the object code by offering access from a designated
+ place (gratis or for a charge), and offer equivalent access to the
+ Corresponding Source in the same way through the same place at no
+ further charge. You need not require recipients to copy the
+ Corresponding Source along with the object code. If the place to
+ copy the object code is a network server, the Corresponding Source
+ may be on a different server (operated by you or a third party)
+ that supports equivalent copying facilities, provided you maintain
+ clear directions next to the object code saying where to find the
+ Corresponding Source. Regardless of what server hosts the
+ Corresponding Source, you remain obligated to ensure that it is
+ available for as long as needed to satisfy these requirements.
+
+ e) Convey the object code using peer-to-peer transmission, provided
+ you inform other peers where the object code and Corresponding
+ Source of the work are being offered to the general public at no
+ charge under subsection 6d.
+
+ A separable portion of the object code, whose source code is excluded
+from the Corresponding Source as a System Library, need not be
+included in conveying the object code work.
+
+ A "User Product" is either (1) a "consumer product", which means any
+tangible personal property which is normally used for personal, family,
+or household purposes, or (2) anything designed or sold for incorporation
+into a dwelling. In determining whether a product is a consumer product,
+doubtful cases shall be resolved in favor of coverage. For a particular
+product received by a particular user, "normally used" refers to a
+typical or common use of that class of product, regardless of the status
+of the particular user or of the way in which the particular user
+actually uses, or expects or is expected to use, the product. A product
+is a consumer product regardless of whether the product has substantial
+commercial, industrial or non-consumer uses, unless such uses represent
+the only significant mode of use of the product.
+
+ "Installation Information" for a User Product means any methods,
+procedures, authorization keys, or other information required to install
+and execute modified versions of a covered work in that User Product from
+a modified version of its Corresponding Source. The information must
+suffice to ensure that the continued functioning of the modified object
+code is in no case prevented or interfered with solely because
+modification has been made.
+
+ If you convey an object code work under this section in, or with, or
+specifically for use in, a User Product, and the conveying occurs as
+part of a transaction in which the right of possession and use of the
+User Product is transferred to the recipient in perpetuity or for a
+fixed term (regardless of how the transaction is characterized), the
+Corresponding Source conveyed under this section must be accompanied
+by the Installation Information. But this requirement does not apply
+if neither you nor any third party retains the ability to install
+modified object code on the User Product (for example, the work has
+been installed in ROM).
+
+ The requirement to provide Installation Information does not include a
+requirement to continue to provide support service, warranty, or updates
+for a work that has been modified or installed by the recipient, or for
+the User Product in which it has been modified or installed. Access to a
+network may be denied when the modification itself materially and
+adversely affects the operation of the network or violates the rules and
+protocols for communication across the network.
+
+ Corresponding Source conveyed, and Installation Information provided,
+in accord with this section must be in a format that is publicly
+documented (and with an implementation available to the public in
+source code form), and must require no special password or key for
+unpacking, reading or copying.
+
+ 7. Additional Terms.
+
+ "Additional permissions" are terms that supplement the terms of this
+License by making exceptions from one or more of its conditions.
+Additional permissions that are applicable to the entire Program shall
+be treated as though they were included in this License, to the extent
+that they are valid under applicable law. If additional permissions
+apply only to part of the Program, that part may be used separately
+under those permissions, but the entire Program remains governed by
+this License without regard to the additional permissions.
+
+ When you convey a copy of a covered work, you may at your option
+remove any additional permissions from that copy, or from any part of
+it. (Additional permissions may be written to require their own
+removal in certain cases when you modify the work.) You may place
+additional permissions on material, added by you to a covered work,
+for which you have or can give appropriate copyright permission.
+
+ Notwithstanding any other provision of this License, for material you
+add to a covered work, you may (if authorized by the copyright holders of
+that material) supplement the terms of this License with terms:
+
+ a) Disclaiming warranty or limiting liability differently from the
+ terms of sections 15 and 16 of this License; or
+
+ b) Requiring preservation of specified reasonable legal notices or
+ author attributions in that material or in the Appropriate Legal
+ Notices displayed by works containing it; or
+
+ c) Prohibiting misrepresentation of the origin of that material, or
+ requiring that modified versions of such material be marked in
+ reasonable ways as different from the original version; or
+
+ d) Limiting the use for publicity purposes of names of licensors or
+ authors of the material; or
+
+ e) Declining to grant rights under trademark law for use of some
+ trade names, trademarks, or service marks; or
+
+ f) Requiring indemnification of licensors and authors of that
+ material by anyone who conveys the material (or modified versions of
+ it) with contractual assumptions of liability to the recipient, for
+ any liability that these contractual assumptions directly impose on
+ those licensors and authors.
+
+ All other non-permissive additional terms are considered "further
+restrictions" within the meaning of section 10. If the Program as you
+received it, or any part of it, contains a notice stating that it is
+governed by this License along with a term that is a further
+restriction, you may remove that term. If a license document contains
+a further restriction but permits relicensing or conveying under this
+License, you may add to a covered work material governed by the terms
+of that license document, provided that the further restriction does
+not survive such relicensing or conveying.
+
+ If you add terms to a covered work in accord with this section, you
+must place, in the relevant source files, a statement of the
+additional terms that apply to those files, or a notice indicating
+where to find the applicable terms.
+
+ Additional terms, permissive or non-permissive, may be stated in the
+form of a separately written license, or stated as exceptions;
+the above requirements apply either way.
+
+ 8. Termination.
+
+ You may not propagate or modify a covered work except as expressly
+provided under this License. Any attempt otherwise to propagate or
+modify it is void, and will automatically terminate your rights under
+this License (including any patent licenses granted under the third
+paragraph of section 11).
+
+ However, if you cease all violation of this License, then your
+license from a particular copyright holder is reinstated (a)
+provisionally, unless and until the copyright holder explicitly and
+finally terminates your license, and (b) permanently, if the copyright
+holder fails to notify you of the violation by some reasonable means
+prior to 60 days after the cessation.
+
+ Moreover, your license from a particular copyright holder is
+reinstated permanently if the copyright holder notifies you of the
+violation by some reasonable means, this is the first time you have
+received notice of violation of this License (for any work) from that
+copyright holder, and you cure the violation prior to 30 days after
+your receipt of the notice.
+
+ Termination of your rights under this section does not terminate the
+licenses of parties who have received copies or rights from you under
+this License. If your rights have been terminated and not permanently
+reinstated, you do not qualify to receive new licenses for the same
+material under section 10.
+
+ 9. Acceptance Not Required for Having Copies.
+
+ You are not required to accept this License in order to receive or
+run a copy of the Program. Ancillary propagation of a covered work
+occurring solely as a consequence of using peer-to-peer transmission
+to receive a copy likewise does not require acceptance. However,
+nothing other than this License grants you permission to propagate or
+modify any covered work. These actions infringe copyright if you do
+not accept this License. Therefore, by modifying or propagating a
+covered work, you indicate your acceptance of this License to do so.
+
+ 10. Automatic Licensing of Downstream Recipients.
+
+ Each time you convey a covered work, the recipient automatically
+receives a license from the original licensors, to run, modify and
+propagate that work, subject to this License. You are not responsible
+for enforcing compliance by third parties with this License.
+
+ An "entity transaction" is a transaction transferring control of an
+organization, or substantially all assets of one, or subdividing an
+organization, or merging organizations. If propagation of a covered
+work results from an entity transaction, each party to that
+transaction who receives a copy of the work also receives whatever
+licenses to the work the party's predecessor in interest had or could
+give under the previous paragraph, plus a right to possession of the
+Corresponding Source of the work from the predecessor in interest, if
+the predecessor has it or can get it with reasonable efforts.
+
+ You may not impose any further restrictions on the exercise of the
+rights granted or affirmed under this License. For example, you may
+not impose a license fee, royalty, or other charge for exercise of
+rights granted under this License, and you may not initiate litigation
+(including a cross-claim or counterclaim in a lawsuit) alleging that
+any patent claim is infringed by making, using, selling, offering for
+sale, or importing the Program or any portion of it.
+
+ 11. Patents.
+
+ A "contributor" is a copyright holder who authorizes use under this
+License of the Program or a work on which the Program is based. The
+work thus licensed is called the contributor's "contributor version".
+
+ A contributor's "essential patent claims" are all patent claims
+owned or controlled by the contributor, whether already acquired or
+hereafter acquired, that would be infringed by some manner, permitted
+by this License, of making, using, or selling its contributor version,
+but do not include claims that would be infringed only as a
+consequence of further modification of the contributor version. For
+purposes of this definition, "control" includes the right to grant
+patent sublicenses in a manner consistent with the requirements of
+this License.
+
+ Each contributor grants you a non-exclusive, worldwide, royalty-free
+patent license under the contributor's essential patent claims, to
+make, use, sell, offer for sale, import and otherwise run, modify and
+propagate the contents of its contributor version.
+
+ In the following three paragraphs, a "patent license" is any express
+agreement or commitment, however denominated, not to enforce a patent
+(such as an express permission to practice a patent or covenant not to
+sue for patent infringement). To "grant" such a patent license to a
+party means to make such an agreement or commitment not to enforce a
+patent against the party.
+
+ If you convey a covered work, knowingly relying on a patent license,
+and the Corresponding Source of the work is not available for anyone
+to copy, free of charge and under the terms of this License, through a
+publicly available network server or other readily accessible means,
+then you must either (1) cause the Corresponding Source to be so
+available, or (2) arrange to deprive yourself of the benefit of the
+patent license for this particular work, or (3) arrange, in a manner
+consistent with the requirements of this License, to extend the patent
+license to downstream recipients. "Knowingly relying" means you have
+actual knowledge that, but for the patent license, your conveying the
+covered work in a country, or your recipient's use of the covered work
+in a country, would infringe one or more identifiable patents in that
+country that you have reason to believe are valid.
+
+ If, pursuant to or in connection with a single transaction or
+arrangement, you convey, or propagate by procuring conveyance of, a
+covered work, and grant a patent license to some of the parties
+receiving the covered work authorizing them to use, propagate, modify
+or convey a specific copy of the covered work, then the patent license
+you grant is automatically extended to all recipients of the covered
+work and works based on it.
+
+ A patent license is "discriminatory" if it does not include within
+the scope of its coverage, prohibits the exercise of, or is
+conditioned on the non-exercise of one or more of the rights that are
+specifically granted under this License. You may not convey a covered
+work if you are a party to an arrangement with a third party that is
+in the business of distributing software, under which you make payment
+to the third party based on the extent of your activity of conveying
+the work, and under which the third party grants, to any of the
+parties who would receive the covered work from you, a discriminatory
+patent license (a) in connection with copies of the covered work
+conveyed by you (or copies made from those copies), or (b) primarily
+for and in connection with specific products or compilations that
+contain the covered work, unless you entered into that arrangement,
+or that patent license was granted, prior to 28 March 2007.
+
+ Nothing in this License shall be construed as excluding or limiting
+any implied license or other defenses to infringement that may
+otherwise be available to you under applicable patent law.
+
+ 12. No Surrender of Others' Freedom.
+
+ If conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot convey a
+covered work so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you may
+not convey it at all. For example, if you agree to terms that obligate you
+to collect a royalty for further conveying from those to whom you convey
+the Program, the only way you could satisfy both those terms and this
+License would be to refrain entirely from conveying the Program.
+
+ 13. Use with the GNU Affero General Public License.
+
+ Notwithstanding any other provision of this License, you have
+permission to link or combine any covered work with a work licensed
+under version 3 of the GNU Affero General Public License into a single
+combined work, and to convey the resulting work. The terms of this
+License will continue to apply to the part which is the covered work,
+but the special requirements of the GNU Affero General Public License,
+section 13, concerning interaction through a network will apply to the
+combination as such.
+
+ 14. Revised Versions of this License.
+
+ The Free Software Foundation may publish revised and/or new versions of
+the GNU General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+ Each version is given a distinguishing version number. If the
+Program specifies that a certain numbered version of the GNU General
+Public License "or any later version" applies to it, you have the
+option of following the terms and conditions either of that numbered
+version or of any later version published by the Free Software
+Foundation. If the Program does not specify a version number of the
+GNU General Public License, you may choose any version ever published
+by the Free Software Foundation.
+
+ If the Program specifies that a proxy can decide which future
+versions of the GNU General Public License can be used, that proxy's
+public statement of acceptance of a version permanently authorizes you
+to choose that version for the Program.
+
+ Later license versions may give you additional or different
+permissions. However, no additional obligations are imposed on any
+author or copyright holder as a result of your choosing to follow a
+later version.
+
+ 15. Disclaimer of Warranty.
+
+ THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
+APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
+HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
+OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
+THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
+IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
+ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
+
+ 16. Limitation of Liability.
+
+ IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
+THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
+GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
+USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
+DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
+PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
+EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGES.
+
+ 17. Interpretation of Sections 15 and 16.
+
+ If the disclaimer of warranty and limitation of liability provided
+above cannot be given local legal effect according to their terms,
+reviewing courts shall apply local law that most closely approximates
+an absolute waiver of all civil liability in connection with the
+Program, unless a warranty or assumption of liability accompanies a
+copy of the Program in return for a fee.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+state the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+Also add information on how to contact you by electronic and paper mail.
+
+ If the program does terminal interaction, make it output a short
+notice like this when it starts in an interactive mode:
+
+ <program> Copyright (C) <year> <name of author>
+ This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, your program's commands
+might be different; for a GUI interface, you would use an "about box".
+
+ You should also get your employer (if you work as a programmer) or school,
+if any, to sign a "copyright disclaimer" for the program, if necessary.
+For more information on this, and how to apply and follow the GNU GPL, see
+<http://www.gnu.org/licenses/>.
+
+ The GNU General Public License does not permit incorporating your program
+into proprietary programs. If your program is a subroutine library, you
+may consider it more useful to permit linking proprietary applications with
+the library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License. But first, please read
+<http://www.gnu.org/philosophy/why-not-lgpl.html>. \ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index cbd158e..22d8342 100755..100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,728 +1,62 @@
-===================================================================
-Next version:
-The final release is just there!!
-Todo's:
-Bug fixes.
-Tests.
-Known bugs:
-Blue bullets appearing in Vortex of leaves.//don't know why...
-
-Wishlist: <-strikethrough
-~~Now Playing(Music Room)~~
-~~BLR script virtual machine~~(Now working for BLR3)
-
-Releases:
-
-1.0.0-0 (r101)
-Fix a bug in the hgeft library, and try git...
-
-1.0.0-0 (r100)
-Rev. 100!!!
-This is the final release.
-No more major changes will be made.
-Further changes of BLR2 will only be bug fixes (BGM addition
-excluded).
-
-Changes:
-Fix screenshot excluding the info panel.
-Make Lv-2P4 harder (reporter: BLumia).
-If it is the first time you start BLR in Windows, resolution in
-the options menu will be "?". Fixed now.
-Fixed a critical bug in scorec.h.
-
-Pre-Released versions:
-
-0.9.9-0 (r99)
-Rev. 99! WTF?
-THIS IS THE FINAL RELEASE CANDIDATE!!!
-Everything is frozen, that means no more new features will be
-added and no big changes will be made after this revision. Only
-bug fixes will be provided.
-//Again, "frozen" is a term borrowed from the Debian project and
-//is completely unrelated to Cirno!
-
-Tweak bullet9, shrink its removal border.
-Change Multpo texture, add spawning effect.
-Fix stubbed rankings.
-Update sprite sheet.
-Store assessment total elapsed time in the score file. Score
-files from older revisions shouldn't cause any errors but you may
-get "Time elapsed 0.00" in highscore details. If you've got any
-sort of OCD (Obsessive-compulsive disorder), just remove it.
-Document!!!
-
-0.9.8-0 (r98)
-Dear Pre-Release Candidate version(RC-0).
-
-CLR will collect multiplier +1's in range now.
-Multiplier +1's caught by player won't disappear now.
-Add/Move background transitions.
-Add volume control to options. This make the configuration file
-not compatible with older versions. Just delete it!
-Modify hge's API so that it can handle real volume and pan values.
-Volume value varys from 0 to 1, pan value varys from -1 to 1.
-Document...
-
-0.9.7-0 (r97)
-Fix: small semi-coll bullets are collected by clr...
-Add Multpo's for Level 7/-1.
-Do slight changes to level -1...
-Distribute CLRs for level 1~-1.
-
-0.9.6-0 (r96)
-Fix bug that cause you unable to charge if you try to use clr directly
-after your clr's used up.
-Add Multpo's for Level 3/4/5/6, and level 7 partically.
-Fix stupid bug in Level4Part2 and other similiar parts.
-Fix several bugs in level 5/6.
-Reduce given-away score in level "Sine Wave". It wassssSssss too long!
-Fix typo...
-Blinking HangUpText *should* be fixed now...
-
-0.9.5-0 (r95)
-Change configuration and score file names. Files with their names
-begin with "." may be annoying in Windows though...
-If we find a score file during first start up, assume it's valid and
-don't overwrite it.
-Fix the problem that in-game music won't be resumed when back from pause.
-Fix the problem that Multpo's won't be removed if a new game is created.
-Fix the problem that the first tip is not shown correctly if the game
-is restarted.
-(Probably) fixed the problem that the sound is played out of game.
-Prevent Multpo's from "escaping". This happens when fps is extremely low...
-Adding Multpo for Level2.
-Update CanonTechno.
-
-0.9.2-0 (r94)
-Mod, mod, mod...!
-Assessment mode is mostly frozen now.
-I'll make a pre-release at r99 and that revision will be set to
-0.9.9-0.
-Write the document... That's really tiring.
-
-~~0.9.1-4 (r94)~~
-Ooooooooops... I've forgotten to commit this one!
-So this is merged to the revision above, actually.
-=================================================================================
-Modify a couple of levels. (Making them easier...)
-Fix about scene text rendering out of the window.
-(Probably) fixed Level3Part3 by making them temporarily invulnerable...
-Are we bug-free now?
-
-0.9.1-4 (r93)
-Picking it up after almost one month... I'm now lost in my code...
----------------------------------------------------------------------------------
-Add player position display into debug display.
-Rewrite pinball, adding collision between the balls...
-The collision code is based on Kollision (a game included in KDE SC).
-
-0.9.1-3 (r92)
-I installed Archlinux alongside Debian recently. Now we officially support
-Archlinux and Debian.
-Archlinux doesn't eat my CPU or try to destroy it... So further development will
-be made mainly under archlinux...
----------------------------------------------------------------------------------
-Content freeze -- nothing will be added or removed any more (music etc excluded).
-Fix build failure in Archlinux.
-Fix font issue in Archlinux.
-realloc may change the base address... That's the cause of the crashes...
---now removing all Bullet* based implementations.
-Affected parts:
-Assessment: Constant patterns, pinball
-All parts in level 2.
-L4P2, and more
-L5P5~6
-L-1P17
-L-1P19
-L3P3
-L7P12
-L7P14
-L7P25
-Avoid memory leaks... I don't know if they have been really fixed...
-
-0.9.1-2 (r91)
-Add built-in help.
-Now the pause menu should be fixed...
-Compress resources again.
-
-0.9.1-1 (r90)
-Fix a bug in the credit scene.
-Now the pause menu shouldn't be broken now...(It's so hard to reproduce
-that I have to assume it *has* been fixed.(IT STILL HAPPENS!!!)
-Close the "infinity CLR" "bug".
-(Huge) Code cleanup, mainly removing duplicate code.
-Allocate bullets dynamically. The array is freed every time a new game
-is started.
-Add a signal handler, print back trace on error(currently only available
-for linux...).
-
-0.9.1-1 (r89)
-Fix a critical bug in Score_Initailize.
-Modify level pinball.
-Drop "_PR" in version string.
-Partly rewrite the credit scene, displaying accurate version
-details.
-Remove some warnings from hgewin.
-A set of basic tests are done on a Intel+Nvidia desktop computer.
-Add a simple build script(instead of makefile).
-Reduce the Windows version executable size...(local work, recompile
-freetype using reduced features enabled.)
-Current tested (by me) and worked plantforms:
-Debian sid x86_64/Windows 8.1 @Intel core i7-2670QM, 8GiB RAM,
-Intel HD3000.
-Debian sid x86_64 @Intel Core2 Quad Q8300, 8GiB RAM, nvidia GT320.
-Windows XP x64 @VirutalBox, Dualcore Virtual CPU, 1.5GiB RAM, VBox
-Addons installed.
-Windows XP @Intel core i3-3240, 4GiB RAM, Intel HD3000.
-
-0.9.1-1_PR (r88)
-%lld seems to work with mingw-w64(also VS2005+)...
-So let's remove all %I64d.
-Change point bullet behaviour.
-Fix a minor multiplier problem.
-Mark the source code as C++.
-Re-document levels(not done).
-Update wiki.
-
-0.9.1-1_PR (r87)
-Disable screenshot when you're entering your honourable name. It's
-not tested so we could only hope that will work...
-Add crappy sounds to (part of) the menus.
-
-Replace a level in assessment mode. The original one was meanless..
-The menu sounds are too crappy... remove them temporarily. However,
-let's complete the code base so that we won't waste time writing
-it...
-
-0.9.1-1_PR (r86)
-Port highscore view and details menu. Menu rewrite is almost done!
-Disable select key while transferring.
-Fix "typo" caused bugs.
-Hopefully fix small bugs in the new menu system.
-Rename several files. Add some additional files.
-Remove legacy menu components.
-
-0.9.1-0_PR (r85)
-Port death menu, complete menu and new highscore menu to the new
-menu code base.
-Clean up old menu code.
-Update wiki.
-
-0.9.1-0_PR (r84)
-Port player preference menu, pause menu and return to title menu
-to the new menu code base.
-Add shake effect to player preference menu.
-Make effects faster...
-Press esc in a menu will select back/exit now.
-Add several background transfers.
-Fix possible memory leaks in HangUpText.
-Remove some commented statements.
-
-0.9.1-0_PR (r83)
-Now you can change the game resolution.
-Some resources are not re-made so they may look blurred...
-Make font bigger for higher resolution.
-Add command line option for changing the resolution.
-Complete the option menu rewrite.
-
-0.9.1-0_PR (r82)
-Add missing file menus.png...
-Finish the start menu rewrite.
-Modify "Lunatic Lunar", however it's not done...
-Modify resource unpacking of Windows version.
-
-0.9.1-0_PR (r81)
-Start menu rewrite...
-Add information about the built time.
-
-0.9.1-0_PR (r80)
-Remove "high FPS mode", it won't reach 500 FPS on my computer any
-more. Replace it with Vsync mode.
-Add float HGE::Timer_GetFPSf(). The return value will be updated
-every 1000ms.
-
-0.9.0-1_PR (b79/r79)
-Bump version!
-BLR will use revision number instead of build number one day...
-==changelog here==
-New assessment level "density test"...
-New assessment level "pinball"...
-New assessment level "Road blocks"...
-New assessment level "Extreme speeds"...
-New assessment level "Messed up"...
-New assessment level "Bonus - Lunatic Lunar!", finishing assessment
-mode!
-Laser extentions, add LineLaser for two-point laser inheriting all
-Laser interfaces.
-Modify laser collision parameters.
-Level corrections.
-Improve density test.
-Add screen shot. Press S for a screen shot.
-Fix the upside down screen shot output.
-Fix stubbed HGE::System_Launch.
-
-0.9.0-0_PR (b78)
-First two assessment levels.
-Two more assessment levels...
-Tow _more_ assessment levels......
-Another assessment level...
-Yet another level for assessment mode... why don't I bump the
-version?
-Modify player attribute.
-Allow bullet to kill itself at a certain point.
-Add extborder attribute.
-Finish assessment system framework.
-Add circ2pnt.
-
-0.8.1-1_PR (b77)
-All parts from level -1 to 7 are completed!
-Fixed the crash in the mingw-w64 build.
-Switch to mingw-w64 for building Windows version now.
-Complete GUI bring back.
-Fix a bug appeared after the cross-plantform port(when forked
-from BLRI).
-Prepare for assessment mode.
-
-0.8.1-0_PR (b76)
-New level "Sink over the horizon".
-New level "Gravity vortex".
-New level "Double reflective".
-Make point bullet additive blending.
-Allow bullets to pause before being accelerated.
-Modify "Gravity vortex".
-Modify "Achromatopsia". (Thanks to my classmate's advice...)
-Report build and version in the log file.
-Add command line argument support. Use "--help" for usage.
-Add freetype support to hge. It's still pretty buggy. (and make
-the executable extremely big!)
-Add experimental support for cross compiling with mingw-w64.
-(Mingw-w64 build *will* be the official build in the future.)
-Fix blinking HangUpText.
-Fix crashes in mingw-64 build.
-Change numeric characters to monospace.
-Modify player speed settings.
-Beewx still messes up memory... fixed now.
-Exit 1 if not terminated correctly.
-
-0.8.0-1_PR (b75)
-New level Supernova.
-New level (still unnamed).
-Support additive blending bullets(for Supernova).
-Add some additional tips.
-Move levels to level -1.
-Fix blinking of HGE::Gfx_SetTransform in OpenGL.
-Fix includes like " #include "../../include/..." " that would
-cause errors.
-Extend libcgh again. Adding operator ^ and method l().
-Modify clearrange behaviour in level hyper-threading.
-Modify the corresponding score bullet.
-
-0.8.0-0_PR (b74)
-New level Achromatopsia.
-New level hyper-threading.
-Tower8 partly rewritten, dropping tdir.
-Fix a small problem in level 2.
-Move levels to level -1. <-typo fixed
-Modify the semi-coll threshold of laser.
-SCEffect_Attatch now take a optional parameter.
-Global varibles cleanup.
-Fix a bug in bullet8 caused by RandomEngine port.
-Rename "Minesweeper"->"Spiky", add noname2pnt.
-Add achroma2pnt.
-
-0.7.3-0_PR (b73)
-This is a pre-release version of 0.7.2-2_PR.
-This version is released to public for level previewing.
-This release contains level 1~7 (while level -1/-2 are still
-"imaginary")
-Changes:
-Compress several png files.
-Merge code for Windows.
-Fixed compile problems of Windows version.
-Small fixes of level2.
-This build will be short-lived.
-
-0.7.2-2_PR (b72)
-New level "return to void". That's a 3 in 1 class. I used
-particularly many "return(void)(...);" in this level (which I
-always love to use).
-This indicates all "normal" levels are completed.
-Multiplier system was fully adopted into BLR.
-Implement a RandomEngine, replacing all rand().
-Rewrite Leaf_Anim using std::list, won't cause crashes now.
-Fixed: Trypophobia stops if too many CLR's are used.
-Fixed the problem in All2pnt().
-Fixed blinking target.
-Fixed Hexagon loops memory leak (the pointer array is too small...)
-Tests under Windows were done, all gameplay features ran perfectly.
-Make Laser::GetDist() private to avoid misusage.
-Fixed several background problems.
-Remove unused statements:
-DWORD ColTrans(DWORD,DWORD,DWORD): replaced by
-DWORD ColorTransfer(DWORD,DWORD).
-void SaySomethingAndBye(char*): useless.
-void DirectBullet(Bullet&,double): this has been coexisted with
-the same method in the Bullet class for a long time. Now it's
-replaced by Bullet::setdir(double).
-A Small bug in the Windows build is fixed.
-File list in the Windows build is updated.
-
-0.7.2-1_PR (b71)
-(Level7 will be almost twice longer than Level6!)
-I'm extremely tired these days, I can't even keep my eyes open
-while typing...
-Some of my classmates helped testing several levels and found
-some bugs, thanks a lot!
-
-After a short test, I found that the Windows build is almost
-broken... Crashes and misbehaves are everywhere!
-
-Maybe Windows is noble and won't run this garbage:(
-===Real changelog starts from here===
-New level "Trypophobia", however it seems that this level won't
-cause trypophobia at all!
-New level "Photon fusion", using a slightly modified Tower8.
-Rewrote laser distance detection using vector2d calculations,
-extending libcgh and bump its version at the same time.(*2)
-Put the new level to the correct place.
-Bring back "Minesweeper" level, adjust it to the new interfaces.
-Convert Bullet from struct to class.
-Bring back Classic Mode. There are no "easy", "normal" or "hard"
-now, there's only "classic"! Fix problems with the classic mode in
-the new code base.
-Fixed a bug appeared after the levels were put together.
-Other minor changes to the level WOP.
-Minor cleanups and code style adjustments. Add missing free's and
-delete's.
-Remake the credits page, it grows from 350KiB to 6MiB. (And so I'll
-enable PNG compression later.)
-
-0.7.2-0_PR (b70)
-I wasn't willing to bump the build number because I want the svn
-revision to chase the build number.
-However it wouldn't be appropriate to put three new levels into one
-build...
-The real changelog is here:
-New level "interference" (it's another small class "SimpleThing").
-New level "diffraction" (yet another dull class), hopefully fixed a
-memory leak in this level (by using more memory!)
-Rearrange levels to the order they will appear in the final version.
-New background interface, use background pictures easily.
-Make "Tiled" background mode work.
-Add SetScale to background class. Make you dizzy easily...
-Fix a small glitch in Level3Part3-4. This level won't run correctly
-under Low FPS Mode.
-Minor code cleanups.
-Removed more useless comments, my code is still hard to comprehend,
-though.
-Fix the misbehave of modulo with minus numbers...
-Small interface and behaviour changes:
--If a bullet is effect-attatched and the effect is running, it won't
-die.
--Bullet::redir now always make dist=1, for some bullet processing
-doesn't use dist now.
-Don't copyleft, it's radical.
-
-0.7.1-6_PR (b69)
-Finish some new levels ("Great Circle" bring back & "rainbow
-appearance").
-Fusion bullet first work draft.
-Fix some of the warnings from the compiler.
-Adjust level difficulty. It was indeed too easy...
-Remake some resources with GIMP.
-Merge great circles and finish it.
-Small code cleanups.
-
-0.7.1-5_PR (b68)
-Draft new level. (Another level threatening you using circles!)
-Update some old interfaces from BLR1.
-
-0.7.1-4_PR (b67)
-New level (name and placement undetermined).
-Fix level transition mismatches.
-Improved accelerated bullets.
-
-0.7.1-3_PR (b66)
-Fix a few glitches. Removing some useless interfaces for BLR I.
-Change "Dangerous Target" for proper difficulty.
-
-0.7.1-2_PR (b65)
-Bullet death effect, applied to Wave of Photon. It seems buggy.
-Fixed something left for debuging in the last commit.
-
-0.7.1-1_PR (b64)
-New level: Wave of Photon. A lazy level again. Despite of a new
-class, it's a copy of "photon school".
-Level improved: Cross threaten. Make it impossible to pass this
-part without crossing those blue bullets.
-libcgh improvement. Added new interfaces to vector2d struct. So the
-libcgh version was bumped. Was it worth doing that?
-
-0.7.1-0_PR (b63)
-New level: Rainbow bullets - nauty photon (in fact it's a lazy
-level! I must have seen the same thing some where else...)
-The last "photon school" level was put to where it should be.
-Rewrite some silly parts of the Changelog.
-I ran out of my AppEngine quota today... So I can't commit that to
-svn as planned...
-
-0.7.0-9_PR (b62)
-Performed a couple of tests, under both full FPS mode and low FPS
-mode.
-New background is used by now.
-
-0.7.0-8_PR (b61)
-Improved the rendering code. More tests are required...
-That made the rendering more efficient. It also eats less RAM then.
---Okay it's now tested. Another bug in FPS independent bullets
-fixed. No (big) bugs were found in the new rendering code.
-
-0.7.0-7_PR (b60)
-Spring Festival commit...
-One level is rewritten.
-Ready to sync this to svn...
-
-0.7.0-6_PR (b59)
-Fixed 3D clouds background. New background components added.
-Experimental FPS independent bullets.
-
-0.7.0-5_PR (b58)
-Fixed another critical bug in laser collision detection
-implementation... Laser is almost perfect now...//Still, it's
-inefficient.
-
-0.7.0-4_PR (b57)
-Fixed a critical bug in laser implementation and another awful
-memory leak bug...
-
-0.7.0-3_PR (b56)
-A new level is going to be complete...
-
-0.7.0-2_PR (b55)
-Auto pause and do not make game suspend if focus is lost.
-
-0.7.0-1_PR (b54)
-First two parts for level7.
-
-0.7.0-0_PR (b53)
-New background for level7. Preparing interfaces for level7.
-
-0.6.2-2_PR (b52)
-Level6 is frozen now. It's the longest level ever... (in blr!)
-
-0.6.2-1_PR (b51)
-Completing level6!
-Spring is coming? (Well, not really...)
-
-0.6.2-0_PR (b50)
-Completing && improving hexagon.
-Bumped the minor version for the sixth level is almost complete.
-
-0.6.1-4_PR (b49)
-New level hexagon.
-
-0.6.1-3_PR (b48)
-New level...(Avalanche)
-Spotlight: Supporting BGM loop points(using my new hge
-interfaces...)!
-I have no idea on new levels (except "hyper fluid", that's a well-
-planned part...). Maybe I've spent too much time staring at the
-desktop? I feel like void these days.
-The build count is bumped four times a day, you enough!
-
-0.6.1-2_PR (b47)
-New level "Wriggle Nightbug-like"?...
-
-0.6.1-1_PR (b46)
-Implemented several unimplemented audio interfaces of hge (OpenAL).
-A Windows build to check compatibility is planned.
-
-0.6.1-0_PR (b45)
-Now we have 11 parts in level6...
-A BGM called Canon Techno is completed around here...
-
-0.6.0-0_PR (b44)
-Starting level 6!
-//We are in 2014 now. I'm regretful for I didn't have the dates
-recorded.
-
-0.5.3-2_PR (b43)
-Optimizing memory usage... (first step...)[*]
-Borrowed "the unbreakable jail" from old code...
-//[*]Note @ 0.6.1-3 && @ 0.7.0-9:
-//1. I found this useless.
-//2. This may cause SIGSEGV!
-//3. It's completely removed after b61. Because they are not used
-// any longer
-
-0.5.3-1_PR (b42)
-Final(the second last..) level for level 5, fish in a barrel?
-
-0.5.3-0_PR (b41)
-Small fixes and levels as usual...
-
-0.5.2-3_PR (b40)
-New minor parts for level5, fixed a bug in Player_Clear_Rotate.
-
-0.5.2-2_PR (b39)
-Several patches on new clear range.
-Changing interfaces for new levels.
-
-0.5.2-1_PR (b38)
-New trigger method for clear range...
-
-0.4.4-0_PRG (b37a)
-Regression version for releasing...
--------------------------------------------------------------
-This will be released as a official Preview Release version.<-obsolete
--------------------------------------------------------------
-
-0.5.2-0_PR (b37)
-New part for level5. Now I'm working on the regression 0.4.x.
-
-0.5.1-1_PR (b36)
-Several fixes including:
--Fading info panel when approaching.
--Sending mult. inc. indicator layer up.
-
-0.5.1-0_PR (b35)
-First two levels of level5.
-
-0.5.0-0_PR (b34)
-Starting level5... Crazy Autumn...
-
-A regression is planned to release a 0.4.x-x_PR version as
-official pre-released version. However it's still nowhere in sight
-that if I could use Windows these days.
-
-0.4.3-0_PR (b33)
-Level4 is almost complete. Now I'm using LOW FPS Mode for
-development because I just want to cool my laptop down without
-using my own power. //However I stopped that at the next version...
-
-0.4.2-0_PR (b32)
-A new level... without using *ANY* old code (from level.h).
-
-0.4.1-2_PR (b31)
-Level4 is now 18 parts...
-
-0.4.1-1_PR (b30)
-Transfered sevel old levels here.
-
-0.4.1-0_PR (b29)
-Optimizing old code for level4.
-
-0.4.0-0_PR (b28)
-Now let's move to level4...
-
-0.3.2-0_PR (b27)
-New levels for level3. In fact, it's almost completed now...
-
-0.3.1-2_PR (b26)
-Improved bullet clearing method, avoiding hidden bullets
-completely!(Just by converting them all to score points...)
-
-0.3.1-1_PR (b25)
-A new "big" level for level3.
-Added several new interfaces to tower&bullet section.
-
-0.3.1-0_PR (b24)
-Complete the first two parts of level3.
-
-0.3.0-0_PR (b23)
-Starting the development of level3...
-
-0.2.9-2_PR (b22)
-Completing level2...
-
-0.2.9-1_PR (b21)
-New parts for level2. level2 is almost completed now.
-PlayerLockX/Y implemented.
--------------------------------------------------------------
-This will be released as a official Preview Release version.<-obsolete
--------------------------------------------------------------
-BLR will be licensed under WTFPL from now.
-(WTF?)
-.............................................................
-No it's now licensed under the BSD license...
-
-0.2.9_PR (b20)
-Level 2 is frozen "by heart". (How? By heart?)
-
-0.2.5_PR (b19)
-Optimizing the second level to a "realistic" state... Added two
-extra musics(although still remain not used).
-
-0.2.2_PR (b18)
-The main development has been transferred to Linux. Optimizing
-code for Linux.
-//Revision count is not important.
-
-0.2.0_PR (b17)
-Level 2?...
-
-0.1.7-2_PR (b16)
-The first level is almost completed now...
-
-0.1.7-1_PR (b15)
-Fixed several serious bug in Low FPS Mode. Fixed FPS Level option
-code.
-
-0.1.7_PR (b14)
-Updated the only level to synchronize with the In-Game Music.
-Added "Multiplier +1" into the game system. Added an unimportant
-loading screen.//In fact, it's loading nothing. May be unpacking
-resource pack in Windows version...
-
-0.1.4_PR (b13)
-libcghEx has been made independent and can apply to any other
-projects. This is also the first BLR version that includes
-In-Game Music. libcghEx has been extended with LinearProgresser
-and HangUpText.
-
-0.1.1_PR (b12)
-Added auto-multiplier system. libcghEx (Chrisoft Game Helper
-Extras Library) is included in this version with CircleIndicator.
-
-0.1.0_PR (b11)
-Creation of the Pre-Released Version. Removed all old level code.
-Bourne-again!//Can you imagine what I was thinking when deleting
-the result of 3 months' work?...
-=================================================================
-TestBed versions:
-
-TB130907 (b10)
-A "Noname" level. Laser implementation partly rewritten.
-
-TB130903 (b9)
-Additional backgrounds
-
-TB130827 (b8)
-Laser implementation, Cheers!
-
-TB130818 (b7)
-New Levels such as rainbow towers and squashing levels.
-
-TB130802 (b6)
-Discarding old code, rewrite of part of the code.
-
-TB130718 (b5)
-Bullet creation effects, sync code back to BLR1.
-
-TB130714 (b4)
-Target indicator completed.
-
-TB130705 (b3)
-New level and bullet creation code for orange bullets.
-
-TB130703 (b2)
-Completing Orange Towers.
-
-TB130620 (b1)
-Completing Deep Blue Towers.//Well, "Dark Blue" right? Or more formally, "Navy".
-//However, they are all not the real color. I used #0000FF, which is just "Blue",
-//it just seems dark.
-
-TB130610 (b0)
-Creation of Testbed version.
+2015-10-26 0.0.1(r11)
+I suddenly feel it necessary to start a changelog today...
+So the content before today is written according to the git log.
+
+Added support for relative line numbers.
+Added instructions for, brk and cont. (They are still untested...)
+Parser code cleanup. Removed garbage output to stderr.
+Reorganize the repository structure.
+Updated BLR2 code move it into archive.
+Added BLR1 files.
+
+2015-10-13 0.0.1(r10)
+Make BLR 16:9.
+Port Junko's final spell card to BLR... make it the default testing level.
+
+2015-10-12 0.0.1(r9)
+Initial implementation of smPath.
+Minor changes on the (s)coll effect.
+
+2015-10-11 0.0.1(r9)
+Implementation of the collision system and collision effects.
+Fixed a problem that keeps the screen black on start up.
+Replace the build script in dtputil with makefile.
+
+2015-10-10 0.0.0(r8)
+Fixed the stupid bug.
+Initial implementation of the plugin system.
+
+2015-10-09 0.0.0(r7)
+Initial implementation of bonus bullet.
+A stupid bug existed in this revision.
+
+2015-10-08 0.0.0(r6)
+Added more VM functions.
+
+2015-10-07 0.0.0(r5)
+Eliminate compile warnings.
+Add makefiles.
+
+2015-10-06 0.0.0(r4)
+Tools were added.
+Added licensing information.
+
+2015-10-05 0.0.0(r3)
+The script VM is finally enabled.
+Call stack was reimplemented, so the function calling method
+changed again.
+Unified Float data types.
+
+2015-10-04 0.0.0(r2)
+Function calling method was changed.
+
+2015-10-03 0.0.0 (r1)
+VM functions are ported to the new code base.
+But the script VM is still not enabled.
+
+2015-10-02 0.0.0 (r0)
+The sources are uploaded to github...
+Changes before this revision is just building the backbone.
+Basic scene managing, bullet managing were done.
+The script VM existed but was incomplete. \ No newline at end of file
diff --git a/INSTALL b/INSTALL
index c48e870..a0f3c2c 100644
--- a/INSTALL
+++ b/INSTALL
@@ -1,29 +1,11 @@
-Installing a game is really useless, isn't it?
-So just compile it!
+I dunno why to install it actually.
-A brief guide for compiling BLR
-Required SDKs:
-OpenAL
-ogg
-vorbis
-DirectX(Windows only)
-OpenGL(Linux only)
-SDL(Linux only)
+Building dependencies on debian-based systems:
+libfreetype6-dev libopenal-dev libsdl2-dev libpng12-dev libjpeg62-turbo-dev libvorbis-dev libogg-dev
-Steps to do:
-1. Get the source code.
- You can choose from svn or the official packaged release.
- The code from svn will always be newer than the official
- packaged release.
-2. Get required SDKs mentioned above.
- Piece of cake.
-3. Use Visual Studio(Windows) or Code::Blocks(Linux), create
- project. Configure it correctly.
- If you'd like to do it, you can also write a Makefile
- yourself.
-4. Hit build (or type make)!
-5. If it failed, check step 2 and 3, then repeat step 4...
+If you are using another Linux distribution, install the corresponding packages.
+After that a simple 'make' should do the work for you. If it doesn't, you have to modify it manually...
-Warning:
-Some revisions in the svn repo has noticeable problems.
-Always build the latest svn revision or official release!
+(Important) For Windows users:
+PLEASE DO NOT BUILD THE CURRENT VERSION!!!
+SMELT now only supports OpenGL. It works on Windows indeed but very inefficiently...
diff --git a/NEWS b/NEWS
new file mode 100644
index 0000000..bbe8d66
--- /dev/null
+++ b/NEWS
@@ -0,0 +1 @@
+Perhaps we don't need this file now?...
diff --git a/README.md b/README.md
new file mode 100644
index 0000000..cf9196d
--- /dev/null
+++ b/README.md
@@ -0,0 +1,50 @@
+# Bullet Lab Remix
+_Bullet Lab got its new life here._
+
+This is a bullet dodging game with level scripting,
+plugins, console and several other features.
+
+The current in-development release is:
+
+## Bullet Lab Remix 3 - Mind in Circuits
+
+Currently it's still in heavy development and is very incomplete.
+
+Building is tested on debian sid and Arch Linux.
+
+Current working status:
+
+> the BLR Script VM: 90%
+> VM functions: 40%
+> the BLR js VM: 0%
+> bullet system: 40%
+> tower system: 0%
+> laser system: 0%
+> the player: 40%
+> menus: 30%
+> plugin system & api: 5%
+> console: 0%
+> score & record: 0%
+> master: 60%
+
+If you are looking for older BLR releases, please
+have a look into the archive folder.
+
+Bullet Lab Remix is built upon SMELT:
+https://github.com/BearKidsTeam/SMELT
+
+Bullet Lab Remix 3 is licensed under the terms of GPLv3.
+Read COPYING for more information.
+
+Older Bullet Lab Remix releases were released under the terms
+of the BSD license.
+
+## About the releases
+BLR 1 - The Creature of Colour was completed in early 2014.
+BLR 2 - The Reunion of Rainbow was completed in late 2014.
+BLR 3 - Mind in Circuits was started in June 2015 and is now in active development.
+BLR 3.5 - Assessment Collection has been planned.
+
+Only the mainline will stay in the root directory of the repo,
+older releases will go to the archive folder (I don't think
+git branching is suitable for the case). \ No newline at end of file
diff --git a/TODO b/TODO
new file mode 100644
index 0000000..cddf501
--- /dev/null
+++ b/TODO
@@ -0,0 +1,6 @@
+Laser (depends on smPath)
+smPath
+Tower
+Plugin system
+Console
+and much more... \ No newline at end of file
diff --git a/VERSION b/VERSION
index 9f8cf97..8a9ecc2 100755..100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-1.0.0-0 (r101) \ No newline at end of file
+0.0.1 \ No newline at end of file
diff --git a/archive/Readme b/archive/Readme
new file mode 100644
index 0000000..8eb62d0
--- /dev/null
+++ b/archive/Readme
@@ -0,0 +1,3 @@
+Archive of the dead old releases...
+
+They might be re-released in the form of level packs someday... \ No newline at end of file
diff --git a/archive/blr1/ChangeLog b/archive/blr1/ChangeLog
new file mode 100644
index 0000000..6125f79
--- /dev/null
+++ b/archive/blr1/ChangeLog
@@ -0,0 +1,40 @@
+0.5.3
+-Fixed a problem in bullet position calculating.
+0.5.4
+-Replaces arc- functions to make calculating more efficient.
+0.7.0
+-Levels->7
+0.7.4
+-Clear range added
+0.8.4
+-Limiting clear range usage. Freezing Level design.
+0.8.6
+-Adding readme files. Fixing small bugs in program.
+-Semi-Collision Effects.
+0.8.7α
+-Spliting main.cpp into mulitiple headers.
+-Compressing resources.
+-Removing dependency of Bass.dll
+0.8.8α
+-Maintaince version.
+0.8.9α
+-Rewriting menus, pause etc. added.
+-Highscore recording. Basic level complete information.
+-Average FPS.
+-Preparation for porting to Linux.
+1.0.0 Pre-Release
+-Upgrading hge graphic engine to DirectX9.
+-Removing some cheats.
+-Linux version built successfully(using hge-unix).
+1.0.1 Pre-Release
+-Embedding HGE into project, getting rid of hge.dll
+-Merging configuration program.
+-Adding first start up configuration, no initial configuration file needed.
+1.0.2 Pre-Release
+-Sync code with Bullet Lab Remix II.
+-Status->Main Functions Frozen+Core Frozen+Level Frozen.
+-Fix some bugs with the keyboard and the render engine.
+-Trying SFX and Music.
+1.0.3 Stable Release
+-Fix hidden bullets.
+-Build up for final release. \ No newline at end of file
diff --git a/archive/blr1/Compiling.txt b/archive/blr1/Compiling.txt
new file mode 100644
index 0000000..b883265
--- /dev/null
+++ b/archive/blr1/Compiling.txt
@@ -0,0 +1,9 @@
+Compiling BLR under Linux
+1. Get HGE UNIX here: http://icculus.org/hge-unix/.
+2. Replace the same files in hge-unix using the files in /hgehack.
+3. Compile and install hge-unix.
+4. Run compile if hge-unix has been successfully installed.
+5. Enjoy BLR by executing BulletLabRemix!
+If you have any problem compiling BLR, just write a feedback.
+Email: chirs241097@163.com
+Forum: http://tieba.baidu.com/f?kw=chrisoft \ No newline at end of file
diff --git a/archive/blr1/Compiling_zh.txt b/archive/blr1/Compiling_zh.txt
new file mode 100644
index 0000000..8f3acf8
--- /dev/null
+++ b/archive/blr1/Compiling_zh.txt
@@ -0,0 +1,9 @@
+在Linux下编译BLR
+1. 获取HGE-UNIX: http://icculus.org/hge-unix/。
+2. 用/hgehack内的文件替换hge-unix里的同名文件。
+3. 编译并安装hge-unix。
+4. 如果hge-unix已经成功安装,运行compile脚本。
+5. 运行BulletLabRemix!
+如果你在编译时遇到了任何问题,请与作者联系。
+Email: chirs241097@163.com
+贴吧: http://tieba.baidu.com/f?kw=chrisoft
diff --git a/archive/blr1/README.txt b/archive/blr1/README.txt
new file mode 100644
index 0000000..e5b1ddc
--- /dev/null
+++ b/archive/blr1/README.txt
@@ -0,0 +1,178 @@
+/*************************************\
+ * Bullet Lab Remix HGE 1.0.3 *
+ * The Creature of Colour *
+ * CopyLeft Chris Xiong *
+ * Readme File for binary release *
+\*************************************/
+*************************************************************
+First, I'm glad to annonce the first stable release of BLR.
+After three and a half of lazy work, BLR1 Stable came out at last.
+Well, this is just the start. Let's expect BLR2!
+*************************************************************
+WARNING: Everything works correctly on my computer, but I can't guarantee the same
+thing will happen on your computer!
+----------------------------------------------------------------------------------
+Why I am writting this "Game":
+
+-Do not care details...
+----------------------------------------------------------------------------------
+Attention: If you are using Linux, just ignore this and read Compiling.txt
+Basic requirements of this game:
+
+Hardware requirements:
+CPU: Better than none.
+RAM: If you are using Windows XP+, you can ignore this.
+GPU: Any GPU supporting DirectX 9 is okay.
+A keyboard is necessary. Although this game doesn't use a mouse to control, you'd
+better have one to use your operating system...
+
+Software requirements:
+If your computer is not from the last century and the game wouldn't start, check...
+If DirectX 9 Runtime is installed.
+If you are using Windows XP or later version.
+
+Something else...:
+CheatEngine (Optional, recommended for people who are urgent to highscores.)
+No Trypophobia! (Important!!)
+
+Additional:
+To run it in High FPS mode (much better experience than Low FPS mode)
+-Turn on "Lock FPS to the highest level" in BLR config
+-Configure your GPU correctly. A mis-configured GPU can cause many problems...
+-Have a stronger CPU. Quad core is recommended.
+
+If FPS is only around 500... Just give it up... Turn on Low FPS mode in BLR config.
+
+Another small tip:
+I found that Intel HD Graphics always get the highest FPS easily...
+----------------------------------------------------------------------------------
+[Attention!]: The topic below is for those who have tried to play but failed.
+
+Operating with keyboard:
+Arrow keys: Move
+Shift+Arrow keys: Precise move (If you ignore this you will probably NEVER pass easy)
+(Well, I was joking. You can "Continue" anyway.)
+Z (or X, determined in your configuration): Call Clear Range
+Z/Enter(In menus): Confirm
+Esc(In game): Pause
+
+Collision & "Semi-collision":
+Only a VERY close distance will be treat as a collision (about 2 pixels, imagine that.)
+Other bullets passed by you(in 4 pixels) will be treat as a semi-collision, which would
+plus your score by 2000.
+
+Configuring the player:
+You can customize the player in the Player Profile menu.
+You can determine the player's moving speed(both in normal mode or precise mode).
+And a clear range bonus.
+You should know that you are customizing yourself in the limit of "Ability Points".
+----------------------------------------------------------------------------------
+Softwared used to develop Bullet Lab Remix:
+Visual Studio 2012 (Compiler)
+DirectX SDK (Aug. 2009)
+HGE (Packed DirectX APIs)
+Photosohop CS6 for graphic resources
+Inkscape for vector graphics
+Porting to Linux is also done by Chris Xiong, using Kwrite and Geany.
+----------------------------------------------------------------------------------
+Frequently Asked Questions and my own problems
+
+Q: ...The game crashes and quit automatically?
+A: I didn't have that problem... This may be caused by a wrong RAM access.
+ Make sure you have enough RAM to run this game.
+
+Q: It stopped working just before the menu appears...
+A: Well, I use "freopen" for file operations. M$ said that's not safe but I insisted..
+ Just be patient and restart the game.
+
+Q: Huge RAM usage?
+A: The main code uses less than 5 MB RAM. However, levels with too much bullets may
+ use a huge amount of RAM.
+
+Q: "Cannot decompress resources!"
+A: Resources used in this game have been compressed with Microsoft LZ compresss program.
+ If you meet this fault, check if there's already a folder called "Decompressed" in
+ the Resources folder. If so, delete it. (Now the program could delete it automatically
+ even the error has already been reported. So you may not find this folder. Just restart
+ the game)
+ If that doesn't work, check if "expand.exe" is included in your system.
+
+Q: Everything runs slowly!
+A: Check FPS which is displayed at the right bottom corner of the game. The game
+ should run at at least 850 FPS (In HighFPS mode).
+ If it is below 700 (at the menu scene), turn on Low FPS mode using the
+ configure application.
+ If it is fixed at 60 and it is running EXTREMELY slowly, try turn off vertical
+ sync first (in your graphics driver settings). If it doesn't work, turn on Low
+ FPS mode.
+ Please note that Low FPS mode may provide a horrible experience...
+
+Q: What is "Average FPS"?
+A: Average FPS is the average of FPS during the game(WTF!). It showed how your computer felt during
+ the game...
+
+Q: Tell me something about the UI.
+A: The main menu:
+ Start---------------Enter the difficulty selecting menu.
+ Highscore && Records--------Enter highscore view selecting menu.
+ Options--------------Enter options menu.
+ Credits--------------Show a long, dull credits list.
+ Exit---------------Parents are coming!!!
+ The difficulty selecting menu:
+ Easy---------------Difficulty without difficulty.
+ Normal--------------For most human-beings.
+ Extreme--------------Who would like to try?
+ Free Play Mode----------No deaths, go for highest score.
+ Back---------------Giving up?
+ The Options menu:
+ Fullscreen: ...----------Toggle fullscreen, the settings will be applied after restarting the game.
+ FPS Level: ...-------------Toggle FPS level mode. Possible modes are: Low FPS, Highest and Natural.
+Use Key . for Clear Range------Change the key to call Clear Range.
+ Player Profile-------------Customize the player.
+ Back------------------Done setting, I'm ready!
+Tips:
+ If supported, you can toggle fullscreen in game by pressing Alt+Enter. However this won't affect your settings.
+ Use key Left/Right to adjust values in Player Profile page.
+
+Q: How to load default configuration?
+A: To load default configuration, just delete blr.cfg. Then start BLR, you can do your initial settings again.
+ Attention: YOUR SCORE FILE WILL BE CLEARED AS WELL!!
+
+Q: When I use a Clear Range, FPS falls terriblely.
+A: This is normal... Because the code of Clear Range is terribly inefficient...
+
+Q: Some levels are impossible to pass!
+A: That may be true... (I got the same result from some of the testers)
+ However this is an excuse, I think.
+
+Q: Ain't there any background?
+A: It is painful to think about a background...
+ So think about your own background... everyone will have his own version...(Chemistry Laboratory etc.)
+
+Q: Where to get the source code?
+A: The source code is terribly ugly...
+ However, when I release the binary version, I will also release a tarball of
+ the source code.
+ To be more creative, WRITE YOUR OWN CODE.
+----------------------------------------------------------------------------------
+Version History && Planning Versions
+For detailed information, view CHANGELOG.txt.
+
+1.0.3sr: Hope this fix for hidden bullets could work!
+1.0.2pr: Some input event fixes. Fixed a problem in the render engine. Get rid of the config program.
+1.0.1pr: Get rid of hge.dll. Merging hge into project.
+1.0.0pr: Fixing small bugs and cheats. Upgrading DirectX to DX9. Trying porting to Linux.
+0.8.9α : Adding a lot of lacking functions in earlier versions.
+0.8.8α : Small fixes for adding functions.
+0.8.7α : Preparation for 1.0.0, categorizing code, bug fixes, resoureces compression andadding some effects etc.
+0.8.6α : Second released version, small bugs fixed, a better icon for configure program.
+0.8.4α : First released version, most cheats are removed, level frozen version(No new levels will be added).
+0.7.4 : A developer only version, the game system is almost completed.
+0.7.0 : A developer only version, 7 levels available now.
+0.5.3 : A developer only version, 5 levels available now, added collision and semi-collision detection.
+0.2.1 : First tower, first bullet. 2 basic levels completed. Basic effects added.
+0.0.1 : Only a main menu!
+
+2013-5-11: Project Started
+Let's remember the great day!
+Thank everyone that waste time to test my poor project! \ No newline at end of file
diff --git a/archive/blr1/README_zh.txt b/archive/blr1/README_zh.txt
new file mode 100644
index 0000000..d4f8f25
--- /dev/null
+++ b/archive/blr1/README_zh.txt
@@ -0,0 +1,166 @@
+/*************************************\
+ * Bullet Lab Remix HGE 1.0.3 * ->后文将称其为BLR
+ * The Creature of Colour *
+ * 版权所无 Chris Xiong *
+ * 可执行文件自述 *
+\*************************************/
+*************************************************************
+首先,非常高兴地“宣布”BLR1的正式版终于可以发布了!
+经过三个半月的偷懒工作,BLR1的正式版终于出来了。。
+当然,这只是个开始。等待BLR2的开发吧!
+*************************************************************
+警告:不保证本程序在所有计算机上都能正常运行。
+----------------------------------------------------------------------------------
+为什么写这破玩意?
+
+-不要在意细节。。。
+----------------------------------------------------------------------------------
+注意:如果你正在使用Linux,无视这部分内容好了。直接去看Compiling_CHS.txt。
+运行BLR的基本要求:
+
+硬件需求
+CPU: 要比没有强。
+RAM: 如果你的操作系统能够启动,这项可以忽略。
+GPU: 任何支持DirectX9的GPU都行。
+键盘是必要的。虽然本游戏不需要鼠标来操作,你也最好用鼠标来使用来控制操作系统。。。
+
+软件需求
+如果你的电脑不是从上世纪来的,但是游戏仍无法启动,检查:
+DirectX9运行库是否已经安装
+你运行的是否是Windows XP或以后的版本。
+
+其他
+CheatEngine (非必需。这是为那些特别想要高分的人准备的)
+没有密集恐惧症(非常重要!)
+
+附加条件:
+要想在高帧率模式下运行(1000FPS,流畅度自行想象),你需要:
+-在设置程序中打开"Lock FPS to the highest level"(将帧率锁定在最大值)
+-正确地设置你的GPU。错误的设置可能导致许多问题。。
+-要有一颗足够快的CPU,最好四核
+
+如果FPS只在500附近(或者更低),放弃吧。。。在设置程序内打开
+"Low FPS mode"(低帧率模式,60FPS)
+
+无意义内容:
+我发现Intel集成显卡总是非常容易地达到1000FPS。。。
+----------------------------------------------------------------------------------
+注意:以下内容是为尝试过但是失败了的人写的。
+
+如何用键盘操作:
+方向键:移动
+Shift+方向键:精确移动(如果你无视这个你可能永远无法通过Easy关)
+(当然,我只是开玩笑。无论如何你也可以选择继续。。。)
+Z(或者是X,取决于你的设置):调用Clear Range。
+(在菜单中)Z或回车:确认
+Esc(在游戏界面):暂停
+
+碰撞和所谓的半碰撞(<-自造词)
+只有【特别近】的接触将会被当作是碰撞(大于仅有两个像素,想象一下)
+其他从你附近飞过的子弹(约4像素)将会被当作“半碰撞”,每次将加分2000点。
+
+设置你所控制的小方块:
+你可以在玩家设定菜单自行决定小方块的属性。
+你可以设置的项目有移动速度(普通移动和精确移动速度都可以设定)和额外的Clear Range。
+当然,不能随便设置。需要在"Ability Points"(能力点)的限制之内。
+----------------------------------------------------------------------------------
+开发所用的软件
+Visual Studio 2012(编译器)
+DirectX SDK (Aug. 2009)
+HGE(封装DirectX接口)
+Photoshop CS6处理图形资源
+Inkscape处理矢量图
+移植到Linux的工作也是由作者自行完成的。使用了kwrite和Geany。
+----------------------------------------------------------------------------------
+常见问题和我自己的问题
+
+Q: 游戏崩溃了并自动退出。。
+A: 我没遇到过此类问题。。可能是由于错误的RAM存取。
+ 保证你有足够的内存。
+
+Q: 它在菜单出现前就停止工作。。。
+A: 我用了freopen来处理文件。微软说那可能不安全但我没有理他。重启游戏就好了。
+
+Q: 巨大的RAM开销。。
+A: 主程序仅占用5MB内存。但是,子弹太多的关卡可能用很多的RAM。
+
+Q: "Cannot decompress resources!"(无法解压资源!)
+A: 本游戏使用的资源已经使用微软的压缩程序压缩过了。如果你遇到了这个问题,检查游戏资源文件夹
+ (/Resources/)内是否已经有了一个叫做"Decompressed"的文件夹。如果有,删掉它。(即使已经报错,
+ 程序现在已经可以自动删掉它了,所以你可能找不到这个文件夹,重启游戏即可)
+ 如果那不管用,检查/system32里是否有expand.exe。
+
+Q: 一切都运行缓慢!
+A: 看看显示在右下角的FPS数。此游戏应该至少运行在850FPS(在高帧率模式下)。
+ 如果主菜单的FPS也小于700,用设置程序打开低帧率模式。
+ 如果帧率固定在60FPS并且运行【极其】缓慢,先试试关掉显卡的垂直同步。不行再用低帧率模式。
+ 请注意低帧率模式可能带来接近恐怖的体验。。。
+
+Q: 什么是"Average FPS"(平均帧率)?
+A: Average FPS就是平均帧率(什么玩意儿。。)。它表示了你的电脑的在游戏中的受罪程度。。。
+ (CPU压力什么的)
+
+Q: 界面上都是什么意思。。
+A: 主菜单:
+ Start---------------开始。进入难度选择界面
+ Highscore && Records--------高分和记录。在这里回顾高分(记录是数据,不是录像!)
+ Options--------------选项菜单
+ Credits--------------制作者。显示一个长而无聊的制作者名单(就一个“制作者”,对吧。。)
+ Exit---------------退出。家长来了!!!
+ 难度选择菜单:
+ Easy---------------没有难度的难度。
+ Normal--------------为大部分人准备的难度。
+ Extreme--------------谁愿意试试?
+ Free Play Mode----------不死模式,刷分专用。
+ Back---------------放弃了?
+ 选项菜单:
+ Fullscreen: ...----------切换全屏显示。重启游戏后生效。
+ FPS Level: ...-------------切换FPS模式。可能的选项为:Low FPS(低帧率),Highest(最高)和Natural(不限制)。
+Use key . for Clear Range------选择用X或者是Z键使用Clear Range
+ Player Profile-------------自定义玩家属性。
+ Back------------------完成设置。
+Tips:
+ 如果电脑支持,你可以在游戏中用Alt+回车来切换全屏。但这不会改写配置文件。
+ 在玩家设定页面内用左右键来调整数值。
+
+Q: 如何恢复原始设定?
+A: 只需要删除blr.cfg这个文件。然后启动BLR,就可以重新做初始化设定了。
+ 注意:你的分数文件也将被清空!
+
+Q: 用了Clear Range之后FPS严重下降。
+A: 这很正常。。Clear Range的代码效率不高。
+
+Q: 有些关过不了!
+A: 可能是真的吧(我从一些测试人员那里也得到了相同的结果)
+ 但是这可能是个借口,我想。(语序错乱)
+
+Q: 没有背景(所谓的background)?
+A: 想一个背景是痛苦的事情。。
+ 自己YY一个吧。。每个人都会有他自己的版本。。(化学实验室之类的)
+
+Q: 如何取得源代码?
+A: 代码写的非常丑陋。。
+ 但是每次发布可执行文件时,我也会发布一个源代码包。
+ 为了创新,【还是写自己的代码】。
+----------------------------------------------------------------------------------
+版本历史和以后的版本
+有关版本的详细信息,请见ChangeLog
+
+1.0.3sr: 希望这次解决隐藏子弹的方案没有问题。。
+1.0.2pr: 解决了一些键盘和渲染引擎的问题。将配置程序并入游戏中。
+1.0.1pr: 不再依赖hge.dll。将hge并入工程。
+1.0.0pr: 解决小的问题,封一部分cheats。升级DirectX到DX9。移植Linux版工作开始。
+0.8.9α : 添加了一堆早期版本缺失的功能。
+0.8.8α : 为添加功能做准备。
+0.8.7α : 为1.0.0做准备。代码分类,解决小问题,压缩资源并添加一些特效。
+0.8.6α : 第二个发布版本,解决了一部分问题。换了图标。
+0.8.4α : 第一个发布版本。移除了一部分内挂(。。。)。关卡冻结版本(不会再添加新的关卡)
+0.7.4 : 开发者版本。游戏系统已经基本完成。
+0.7.0 : 开发者版本。有7个关卡。
+0.5.3 : 开发者版本。已有5关。添加了碰撞检测。
+0.2.1 : 一切的开始。写完了两关。最基本的效果。
+0.0.1 : 菜单。。
+
+2013-5-11: 工程开始。
+让我们记住这伟大的一天!
+感谢所有浪费时间来测试这个烂工程的人! \ No newline at end of file
diff --git a/archive/blr1/VERSION.txt b/archive/blr1/VERSION.txt
new file mode 100644
index 0000000..245832a
--- /dev/null
+++ b/archive/blr1/VERSION.txt
@@ -0,0 +1 @@
+1.0.3 Stable release \ No newline at end of file
diff --git a/archive/blr1/resources/bg.png b/archive/blr1/resources/bg.png
new file mode 100644
index 0000000..bb0a8a2
--- /dev/null
+++ b/archive/blr1/resources/bg.png
Binary files differ
diff --git a/archive/blr1/resources/blnsns.png b/archive/blr1/resources/blnsns.png
new file mode 100644
index 0000000..8651ee1
--- /dev/null
+++ b/archive/blr1/resources/blnsns.png
Binary files differ
diff --git a/archive/blr1/resources/charmap.fnt b/archive/blr1/resources/charmap.fnt
new file mode 100644
index 0000000..4d90feb
--- /dev/null
+++ b/archive/blr1/resources/charmap.fnt
@@ -0,0 +1,99 @@
+[HGEFONT]
+
+Bitmap=blnsns.png
+
+Char=" ",1,1,3,30,-1,5
+Char="!",5,1,5,30,1,0
+Char=""",11,1,8,30,0,0
+Char="#",20,1,18,30,0,0
+Char="$",39,1,12,30,0,0
+Char="%",52,1,20,30,0,0
+Char="&",73,1,19,30,0,0
+Char="'",93,1,4,30,0,1
+Char="(",98,1,10,30,0,-1
+Char=")",109,1,10,30,-1,0
+Char="*",120,1,11,30,0,-1
+Char="+",132,1,12,30,-1,0
+Char=",",145,1,7,30,-1,0
+Char="-",153,1,10,30,0,0
+Char=".",164,1,6,30,0,0
+Char="/",171,1,10,30,-1,-1
+Char="0",182,1,16,30,0,0
+Char="1",199,1,7,30,0,1
+Char="2",207,1,15,30,-1,-1
+Char="3",223,1,14,30,-1,0
+Char="4",238,1,14,30,0,0
+Char="5",1,32,14,30,-1,0
+Char="6",16,32,14,30,0,0
+Char="7",31,32,14,30,-1,-1
+Char="8",46,32,13,30,-1,0
+Char="9",60,32,14,30,0,0
+Char=":",75,32,6,30,0,0
+Char=";",82,32,7,30,-1,0
+Char="<",90,32,10,30,0,0
+Char="=",101,32,12,30,0,0
+Char=">",114,32,10,30,0,0
+Char="?",125,32,12,30,-1,0
+Char="@",138,32,17,30,0,0
+Char="A",156,32,19,30,-1,0
+Char="B",176,32,16,30,1,0
+Char="C",193,32,17,30,0,-1
+Char="D",211,32,17,30,1,0
+Char="E",229,32,14,30,1,0
+Char="F",1,63,13,30,1,0
+Char="G",15,63,18,30,0,0
+Char="H",34,63,17,30,1,1
+Char="I",52,63,5,30,1,1
+Char="J",58,63,7,30,0,1
+Char="K",66,63,16,30,1,-1
+Char="L",83,63,13,30,1,0
+Char="M",97,63,19,30,1,1
+Char="N",117,63,17,30,1,1
+Char="O",135,63,20,30,0,0
+Char="P",156,63,16,30,1,0
+Char="Q",173,63,20,30,0,0
+Char="R",194,63,15,30,1,0
+Char="S",210,63,13,30,1,-1
+Char="T",224,63,15,30,0,-1
+Char="U",1,94,16,30,1,1
+Char="V",18,94,17,30,0,0
+Char="W",36,94,25,30,0,0
+Char="X",62,94,15,30,0,0
+Char="Y",78,94,17,30,-1,0
+Char="Z",96,94,15,30,-1,0
+Char="[",112,94,9,30,1,0
+Char="\",122,94,8,30,0,0
+Char="]",131,94,9,30,0,1
+Char="^",141,94,13,30,0,0
+Char="_",155,94,14,30,-1,-1
+Char="`",170,94,9,30,0,0
+Char="a",180,94,15,30,0,0
+Char="b",196,94,15,30,0,0
+Char="c",212,94,11,30,0,0
+Char="d",224,94,15,30,0,0
+Char="e",240,94,13,30,0,0
+Char="f",1,125,10,30,-2,0
+Char="g",12,125,14,30,0,0
+Char="h",27,125,14,30,0,0
+Char="i",42,125,6,30,0,-1
+Char="j",49,125,8,30,-2,-1
+Char="k",58,125,15,30,0,0
+Char="l",74,125,5,30,0,0
+Char="m",80,125,21,30,0,0
+Char="n",102,125,14,30,0,0
+Char="o",117,125,14,30,0,0
+Char="p",132,125,15,30,0,0
+Char="q",148,125,15,30,0,0
+Char="r",164,125,10,30,0,-1
+Char="s",175,125,8,30,0,0
+Char="t",184,125,11,30,-2,0
+Char="u",196,125,15,30,0,0
+Char="v",212,125,13,30,0,0
+Char="w",226,125,21,30,0,-1
+Char="x",1,156,12,30,0,0
+Char="y",14,156,13,30,0,0
+Char="z",28,156,12,30,0,-1
+Char="{",41,156,10,30,0,-1
+Char="|",52,156,4,30,1,2
+Char="}",57,156,10,30,-1,0
+Char="~",68,156,15,30,-1,-1
diff --git a/archive/blr1/resources/credits.png b/archive/blr1/resources/credits.png
new file mode 100644
index 0000000..14c2a49
--- /dev/null
+++ b/archive/blr1/resources/credits.png
Binary files differ
diff --git a/archive/blr1/resources/ss1.png b/archive/blr1/resources/ss1.png
new file mode 100644
index 0000000..19dd5c2
--- /dev/null
+++ b/archive/blr1/resources/ss1.png
Binary files differ
diff --git a/archive/blr1/resources/ss2.png b/archive/blr1/resources/ss2.png
new file mode 100644
index 0000000..5959cdf
--- /dev/null
+++ b/archive/blr1/resources/ss2.png
Binary files differ
diff --git a/archive/blr1/resources/tap.ogg b/archive/blr1/resources/tap.ogg
new file mode 100644
index 0000000..1ef00b0
--- /dev/null
+++ b/archive/blr1/resources/tap.ogg
Binary files differ
diff --git a/archive/blr1/resources/title.png b/archive/blr1/resources/title.png
new file mode 100644
index 0000000..b4205c2
--- /dev/null
+++ b/archive/blr1/resources/title.png
Binary files differ
diff --git a/archive/blr1/src/effects.h b/archive/blr1/src/effects.h
new file mode 100644
index 0000000..044a803
--- /dev/null
+++ b/archive/blr1/src/effects.h
@@ -0,0 +1,88 @@
+//Chrisoft Bullet Lab Remix HGE
+//Effects Implementations
+//"Copyleft" Chrisoft 2013
+void SCEffect_Attatch()
+{
+ int cnt=rand()%8+3;
+ for (int ii=1;ii<=cnt;++ii)
+ {
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=254;
+ bullet[i].bulletpos.x=playerpos.x;
+ bullet[i].bulletpos.y=playerpos.y;
+ bullet[i].bulletdir.x=rand()%100-50;
+ bullet[i].bulletdir.y=rand()%100-50;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=rand()%4+2;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,46,0,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ }
+}
+void SCEffect_Process()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=254)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ ++effskp;
+ if (effskp==7)
+ bullet[i].bulletspr->SetColor(bullet[i].bulletspr->GetColor()-0x1F000000),effskp=0;
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ ++effskp;
+ if (effskp==7)
+ bullet[i].bulletspr->SetColor(bullet[i].bulletspr->GetColor()-0x1000000),effskp=0;
+ }
+ //bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ //bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (GETA(bullet[i].bulletspr->GetColor())<=0x0A||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x,bullet[i].bulletpos.y,0,0.2,0);
+ }
+ }
+
+}
+void BulletEffect_Attatch(int n)
+{
+ bullet[n].scale=2;
+ bullet[n].effbrk=17;
+}
+void BulletEffect_Process(int n)
+{
+ if (bullet[n].scale<=1){bullet[n].scale=1;return;}
+ if (LOWFPS)
+ bullet[n].effbrk-=17;
+ else
+ --bullet[n].effbrk;
+ if (bullet[n].effbrk<=0)
+ bullet[n].scale-=0.04,bullet[n].effbrk=17;
+} \ No newline at end of file
diff --git a/archive/blr1/src/global.h b/archive/blr1/src/global.h
new file mode 100644
index 0000000..85804e8
--- /dev/null
+++ b/archive/blr1/src/global.h
@@ -0,0 +1,297 @@
+//Chrisoft Bullet Lab Remix HGE
+//Global varibles and implementations
+//"Copyleft" Chrisoft 2013
+#include "hge.h"
+#include "hgefont.h"
+#include "hgegui.h"
+HGE *hge=0;
+HEFFECT snd;
+HTEXTURE tex;
+hgeQuad quad;
+hgeGUI *gui;
+hgeFont *fnt;
+hgeSprite *spr,*titlespr;
+//Here are some Varibles in Bullet Lab
+int Current_Position;//Where are we now.
+/*Scenes:
+0: main menu
+1: game scene
+2: tip scene
+3: start menu
+4: about scene
+5: death scene
+6: complete scene
+7: new highscore scene
+8: highscore scene
+9: highscore view scene
+10: highscore details scene
+11: Pause scene
+12: BackToTitle Confirm
+13: Options scene
+14: Player Profile scene
+*/
+HTEXTURE SprSheet1,SprSheet2,TexTitle,TexCredits;
+/*
+Texture Mapping:
+SprSheet1:
+Player 47,46,24,24
+Cursor 24,46,24,24
+Blue 0,0,24,24
+Green 23,0,24,24
+Pnt 46,0,24,24
+Purple 0,23,24,24
+Red 23,23,24,24
+White 46,23,24,24
+Yellow 0,46,24,24
+SprSheet2:
+Blue 0,0,44,44
+Green 44,0,44,44
+Purple 88,0,44,44
+Red 0,44,44,44
+White 44,44,44,44
+Yellow 88,44,44,44
+*/
+const double zero=1e-3;
+struct vector2d
+{
+ double x,y;
+};
+struct Bullet
+{
+ hgeSprite *bulletspr;
+ vector2d bulletpos;
+ vector2d bulletdir;
+ double dist;
+ int bullettype;
+ int redexplo,redattrib,oriexplo,whicnt;
+ double bulletspeed;
+ bool exist;
+ double scale;
+ int whirem,whiskp,yelbrk;
+ int lifetime;
+ bool scollable;
+ int effbrk;
+}bullet[10000];
+//Something about bullets:
+//bullettype:
+//1: dir-based green bullet
+//2: degree-based blue bullet (for clocks only)
+//3: 12direction-based blue bullet
+//4: yellow chaser bullet
+//5: purple slow down bullet
+//6: red exploding bullet
+//7: white stalled bullet
+//8: black shading bullet (dummy in version 1)
+//254: Semi-collision effect
+//255: Score point
+struct Tower
+{
+ hgeSprite *towerspr;
+ vector2d towerpos;
+ int towertype;
+ int towertimer,curtimer;
+ double bulletspeed;
+ int redexplo,whicnt,yelbrk;
+ int t3t;
+ bool exist;
+ bool effect;
+}tower[100];
+//t3t is for Tower3
+//0:All 12 directions
+//1:four default directions
+//2:random left/right
+//3:random up/down
+struct Line
+{
+ vector2d pos;
+ double radian;
+ DWORD color;
+ bool exist;
+}line[12];
+//Line is currently dummy.
+int bulcnt=0,towcnt=0,linecnt=0;
+vector2d playerpos;
+double playerrot;
+double playerspeed;
+double playerslospeed;
+double playerfulspd=0.2;
+double playerfulslospd=0.05;
+double clockrot,deltarot,deltadelta;
+double whirot,dwhirot;
+hgeSprite *playerspr;
+int frameleft;
+int level,part,clrtime,clrbns;
+int coll,semicoll,mode,dsmc,restarts;
+double clrrange;
+bool IfCallLevel;
+bool DisableAllTower=false;
+bool DisablePlayer=false;
+int frameskips=0,stepskips=0;
+bool IfShowTip=false,FadeTip=false;
+hgeFont *TipFont;
+char lasttip[200];
+int p2t1,p2t2,p2t3,p2t4;
+int whicnt,shots,clrusg;
+bool yelattrib;
+bool LOWFPS=false,diffkey=false;
+bool Complete=false;
+bool Refliction=false;
+double linerad=0;
+double bsscale;
+long long score,scminus;
+int frms;double averfps;
+int plrspd,plrslospd;
+int TenSeconds=10000,TwentySeconds=20000,ThirtySeconds=30000,AMinute=60000;
+int effskp=0;
+hgeSprite *Credits,*CreditsRail;
+double scroll;
+bool tfs;
+int fpslvl;
+
+void Error(char EC[],bool hgecreated=false)
+{
+ fprintf(stderr,EC);
+ hge->System_Log(EC);
+ if (hgecreated)
+ {
+ hge->System_Shutdown();
+ hge->Release();
+ }
+ exit(0);
+}
+inline double GetDist(const vector2d a,const vector2d b)
+{
+ return sqrtf((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
+}
+void ShowTip(char tip[])
+{
+ if (strcmp(tip,lasttip)!=0)
+ {
+ TipFont->SetColor(0x00FFFFFF);
+ }
+ memcpy(lasttip,tip,sizeof(lasttip));
+ DisableAllTower=true;
+ DisablePlayer=true;
+ if (hge->Input_GetKeyStateEx(HGEK_Z)==HGEKST_HIT)
+ {
+ //DisableAllTower=false;
+ //DisablePlayer=false;
+ //Current_Position=1;
+ FadeTip=true;
+ }
+ double width=TipFont->GetStringWidth(tip);
+ TipFont->printf(400-width/2,400,HGETEXT_LEFT,tip);
+ if (FadeTip)
+ {
+ if (LOWFPS)
+ {
+ if (TipFont->GetColor()>>24>=0x08)
+ TipFont->SetColor(TipFont->GetColor()-0x8000000);
+ else
+ {
+ DisableAllTower=false;
+ DisablePlayer=false;
+ Current_Position=1;
+ }
+ }
+ else
+ {
+ if (TipFont->GetColor()>>24>=0x01)
+ TipFont->SetColor(TipFont->GetColor()-0x1000000);
+ else
+ {
+ DisableAllTower=false;
+ DisablePlayer=false;
+ Current_Position=1;
+ }
+ }
+ return;
+ }
+ if (!LOWFPS)
+ {
+ if (TipFont->GetColor()>>24<=0xFE)
+ TipFont->SetColor(TipFont->GetColor()+0x01000000);
+ }
+ else
+ {
+ if (TipFont->GetColor()>>24<=0xF7)
+ TipFont->SetColor(TipFont->GetColor()+0x08000000);
+ }
+}
+void ClearAll()
+{
+ DisableAllTower=true;
+ bool none=true;
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)continue;
+ if (LOWFPS)
+ {
+ if (tower[i].towerspr->GetColor()>>24>=0x08)
+ {
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()-0x8000000);
+ none=false;
+ }
+ }
+ else
+ {
+ if (tower[i].towerspr->GetColor()>>24>=0x01)
+ {
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()-0x1000000);
+ none=false;
+ }
+ }
+ }
+ if (none)
+ {
+ towcnt=0;
+ memset(tower,0,sizeof(tower));
+ }
+ none=true;
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (LOWFPS)
+ {
+ if (bullet[i].bulletspr->GetColor()>>24>=0x08)
+ {
+ bullet[i].bulletspr->SetColor(bullet[i].bulletspr->GetColor()-0x8000000);
+ none=false;
+ }
+ }
+ else
+ {
+ if (bullet[i].bulletspr->GetColor()>>24>=0x01)
+ {
+ bullet[i].bulletspr->SetColor(bullet[i].bulletspr->GetColor()-0x1000000);
+ none=false;
+ }
+ }
+ }
+ if (none)
+ {
+ bulcnt=0;
+ memset(bullet,0,sizeof(bullet));
+ }
+ none=true;
+ for (int i=1;i<=bulcnt;++i)if (bullet[i].bulletspr->GetColor()>>24>=0x3F){none=false;break;}
+ if (none)
+ bulcnt=0,memset(bullet,0,sizeof(bullet));
+}
+void SaySomethingAndBye(char *text)
+{
+ ClearAll();
+ DisableAllTower=false;
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip(text);
+ return;
+ }
+ Current_Position=0;
+ towcnt=bulcnt=0;
+ memset(tower,0,sizeof(tower));
+ memset(bullet,0,sizeof(bullet));
+ gui->Enter();
+}
diff --git a/archive/blr1/src/levels.h b/archive/blr1/src/levels.h
new file mode 100644
index 0000000..d706f4a
--- /dev/null
+++ b/archive/blr1/src/levels.h
@@ -0,0 +1,1880 @@
+//Chrisoft Bullet Lab Remix HGE
+//Level Implementations
+//"Copyleft" Chrisoft 2013
+void Level1Part1()
+{
+ //Level procedure
+ //Simple Level procedures should only run once during a level, you know.
+ if ((tower[CreateTower1(400,300,2000,1)].towerspr->GetColor()>>24)>=0x80)IfCallLevel=false;
+ Current_Position=2;
+ ShowTip("Welcome to Bullet Lab Remix...\nMove around and hit nothing, easy right?\n\Press Z to close these tips.");
+}
+void Level1Part2()
+{
+ frameleft=TenSeconds;
+ ++frameskips;
+ int secondtower=CreateTower1(567,300,2000,1);
+ if (tower[secondtower].towerspr->GetColor()==0x80FFFFFF)
+ tower[secondtower].towerspr->SetColor(0x00FFFFFF);
+ if (frameskips<10&&!LOWFPS&&!LOWFPS)return;
+ frameskips=0;
+ if ((tower[secondtower].towerspr->GetColor()>>24)<=0x80)
+ tower[secondtower].towerspr->SetColor(tower[secondtower].towerspr->GetColor()+0x01FFFFFF);
+ if (tower[1].towerpos.x>=233)--tower[1].towerpos.x;
+ if (tower[1].towerpos.x<233)
+ {
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Want another tower?");
+ IfCallLevel=false;
+ }
+ }
+}
+void Level1Part3()
+{
+ frameleft=TenSeconds;
+ tower[1].bulletspeed=4;
+ tower[1].towertimer=1500;
+ tower[2].bulletspeed=4;
+ tower[2].towertimer=1500;
+ IfCallLevel=false;
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Maybe faster bullets will kill you?");
+ IfCallLevel=false;
+ }
+}
+void Level1Part4()
+{
+ frameleft=TenSeconds;
+ tower[1].bulletspeed=2;
+ tower[1].towertimer=100;
+ tower[2].bulletspeed=2;
+ tower[2].towertimer=100;
+ IfCallLevel=false;
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("There are two things to tell you.\nFirst one is that this game has very\
+ loose collision detection.\nNext one is two machineguns are ready for\
+ the next level...");
+ IfCallLevel=false;
+ }
+}
+void Level2Part0()
+{
+ frameleft=50;
+ if (towcnt==2)
+ {
+ ClearAll();
+ return;
+ }
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ DisableAllTower=false;
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Level 2 - Divide and Conquer!");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ p2t1=p2t2=p2t3=p2t4=0;
+ return;
+ }
+}
+void Level2Part1()
+{
+ frameleft=TwentySeconds;
+ if (p2t1==0)p2t1=CreateTower1(399,299,1000,2);
+ if (p2t2==0)p2t2=CreateTower1(401,299,1000,2);
+ if (p2t3==0)p2t3=CreateTower1(399,301,1000,2);
+ if (p2t4==0)p2t4=CreateTower1(401,301,1000,2);
+ bool none=true;
+ if (!LOWFPS)
+ {
+ if (tower[p2t1].towerpos.x>=10)tower[p2t1].towerpos.x-=0.4075,none=false;
+ if (tower[p2t1].towerpos.y>=10)tower[p2t1].towerpos.y-=0.3,none=false;
+ if (tower[p2t2].towerpos.x<=766)tower[p2t2].towerpos.x+=0.3813,none=false;
+ if (tower[p2t2].towerpos.y>=10)tower[p2t2].towerpos.y-=0.3,none=false;
+ if (tower[p2t3].towerpos.x>=10)tower[p2t3].towerpos.x-=0.4453125,none=false;
+ if (tower[p2t3].towerpos.y<=566)tower[p2t3].towerpos.y+=0.3,none=false;
+ if (tower[p2t4].towerpos.x<=766)tower[p2t4].towerpos.x+=0.455859,none=false;
+ if (tower[p2t4].towerpos.y<=566)tower[p2t4].towerpos.y+=0.3,none=false;
+ }
+ else
+ {
+ if (tower[p2t1].towerpos.x>=10)tower[p2t1].towerpos.x-=0.4075*10,none=false;
+ if (tower[p2t1].towerpos.y>=10)tower[p2t1].towerpos.y-=0.3*10,none=false;
+ if (tower[p2t2].towerpos.x<=766)tower[p2t2].towerpos.x+=0.3813*10,none=false;
+ if (tower[p2t2].towerpos.y>=10)tower[p2t2].towerpos.y-=0.3*10,none=false;
+ if (tower[p2t3].towerpos.x>=10)tower[p2t3].towerpos.x-=0.4453125*10,none=false;
+ if (tower[p2t3].towerpos.y<=566)tower[p2t3].towerpos.y+=0.3*10,none=false;
+ if (tower[p2t4].towerpos.x<=766)tower[p2t4].towerpos.x+=0.455859*10,none=false;
+ if (tower[p2t4].towerpos.y<=566)tower[p2t4].towerpos.y+=0.3*10,none=false;
+ }
+ if (none)IfCallLevel=false;
+}
+void Level2Part2()
+{
+ frameleft=TenSeconds;
+ tower[p2t1].bulletspeed=tower[p2t2].bulletspeed=4;
+ tower[p2t3].bulletspeed=tower[p2t4].bulletspeed=4;
+ IfCallLevel=false;
+}
+void Level2Part3()
+{
+ frameleft=ThirtySeconds;
+ tower[p2t1].bulletspeed=tower[p2t2].bulletspeed=1;
+ tower[p2t3].bulletspeed=tower[p2t4].bulletspeed=1;
+ tower[p2t1].towertimer=tower[p2t2].towertimer=100;
+ tower[p2t3].towertimer=tower[p2t4].towertimer=100;
+ IfCallLevel=false;
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Got ready for being hunted by four machineguns?\n\
+Don't tell me you've got stuck just here...");
+ IfCallLevel=false;
+ }
+}
+void Level3Part0()
+{
+ frameleft=50;
+ if (towcnt==4&&(mode!=2))
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ if (mode==2)
+ ShowTip("Let's start from a higher position...\n\
+Level 3 - Blue Masters");
+ else
+ ShowTip("Time for something new now...\n\
+Level 3 - Blue Masters");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ return;
+ }
+}
+void Level3Part1()
+{
+ frameleft=ThirtySeconds;
+ ++frameskips;
+ if (towcnt==4)towcnt=0;
+ deltadelta=0.004363322313;
+ int towerclk=CreateTower2(400,300,100,1,true);
+ if (tower[towerclk].towerspr->GetColor()==0x80FFFFFF)
+ tower[towerclk].towerspr->SetColor(0x00FFFFFF);
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ if ((tower[towerclk].towerspr->GetColor()>>24)<=0x80)
+ tower[towerclk].towerspr->SetColor(tower[towerclk].towerspr->GetColor()+0x01FFFFFF);
+ else IfCallLevel=false;
+}
+//L3P2: /*Magic, DO NOT TOUCH!!*/
+void Level3Part2()
+{
+ frameleft=TenSeconds;
+ if (towcnt==1)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Are you scared?\nI'm just joking last time!");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower1(233,300,500,2);
+ CreateTower1(567,300,500,2);
+ int tmp=CreateTower3(100,100,1000,1,true);
+ tower[tmp].t3t=1;
+ tmp=CreateTower3(300,100,1000,1,true);
+ tower[tmp].t3t=1;
+ tmp=CreateTower3(500,100,1000,1,true);
+ tower[tmp].t3t=1;
+ tmp=CreateTower3(700,100,1000,1,true);
+ tower[tmp].t3t=1;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level3Part3()
+{
+ frameleft=TwentySeconds;
+ if (towcnt==6&&IfShowTip)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Got stuck in my pentagon...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower3(30,10,500,2,true);
+ CreateTower3(746,10,500,2,true);
+ CreateTower3(30,556,500,2,true);
+ CreateTower3(746,556,500,2,true);
+ for (int i=1;i<=4;++i)
+ tower[i].t3t=0;
+ CreateTower1(5,10,1000,2);
+ CreateTower1(771,10,1000,2);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level3Part4()
+{
+ frameleft=TwentySeconds;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towertype==3)tower[i].towertimer=300;else tower[i].towertimer=500;
+ int aa=CreateTower1(5,556,500,2);
+ int bb=CreateTower1(771,556,500,2);
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ if (tower[aa].towerspr->GetColor()==0x80FFFFFF)
+ tower[aa].towerspr->SetColor(0x00FFFFFF);
+ if (tower[bb].towerspr->GetColor()==0x80FFFFFF)
+ tower[bb].towerspr->SetColor(0x00FFFFFF);
+ if ((tower[aa].towerspr->GetColor()>>24)<=0x80)
+ tower[aa].towerspr->SetColor(tower[aa].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+ if ((tower[bb].towerspr->GetColor()>>24)<=0x80)
+ tower[bb].towerspr->SetColor(tower[bb].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level3Part5()
+{
+ frameleft=ThirtySeconds;
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ for (int i=1;i<=4;++i)tower[i].t3t=1;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towertype==1)
+ tower[i].towertimer=750;
+ bool none=true;
+ if (tower[1].towerpos.x<=120)++tower[1].towerpos.x,none=false;
+ if (tower[1].towerpos.y<=80)++tower[1].towerpos.y,none=false;
+ if (tower[2].towerpos.x>=660)--tower[2].towerpos.x,none=false;
+ if (tower[2].towerpos.y<=80)++tower[2].towerpos.y,none=false;
+ if (tower[3].towerpos.x<=120)++tower[3].towerpos.x,none=false;
+ if (tower[3].towerpos.y>=480)--tower[3].towerpos.y,none=false;
+ if (tower[4].towerpos.x>=660)--tower[4].towerpos.x,none=false;
+ if (tower[4].towerpos.y>=480)--tower[4].towerpos.y,none=false;
+ if (none)IfCallLevel=false;
+}
+void Level3Part6()
+{
+ frameleft=ThirtySeconds;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towertype==1)
+ tower[i].towertimer=1000,tower[i].bulletspeed=6;
+ IfCallLevel=false;
+}
+void Level3Part7()
+{
+ frameleft=ThirtySeconds;
+ if (towcnt==8)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("This part will be a great fun if the green tower didn't exist...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower1(400,540,750,3);
+ for (int i=1;i<=33;++i)
+ {
+ int tmp=CreateTower3(i*24-20,570,300,2);
+ tower[tmp].t3t=3;
+ }
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level4Part0()
+{
+ frameleft=50;
+ if (towcnt==34)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Someone is following you.\n\
+Level 4 - At the Pet Store");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ return;
+ }
+}
+void Level4Part1()
+{
+ frameleft=TenSeconds;
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower4(400,300,2000,2);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level4Part2()
+{
+ frameleft=TwentySeconds;
+ if (towcnt==1)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("May be they are kittens petted by you?..");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower4(30,10,2000,1);
+ CreateTower4(746,10,2000,1);
+ CreateTower4(30,556,2000,1);
+ CreateTower4(746,556,2000,1);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level4Part3()
+{
+ frameleft=TenSeconds;
+ if (towcnt==4)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower3(30,10,300,2);
+ CreateTower3(746,10,300,2);
+ CreateTower3(30,556,300,2);
+ CreateTower3(746,556,300,2);
+ for (int i=1;i<=4;++i)
+ tower[i].t3t=1;
+ CreateTower4(5,10,2000,2);
+ CreateTower4(771,10,2000,2);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level4Part4()
+{
+ frameleft=TwentySeconds;
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ tower[5].towertimer=tower[6].towertimer=1500;
+ bool none=true;
+ if (tower[1].towerpos.x<=120)++tower[1].towerpos.x,none=false;
+ if (tower[1].towerpos.y<=80)++tower[1].towerpos.y,none=false;
+ if (tower[2].towerpos.x>=660)--tower[2].towerpos.x,none=false;
+ if (tower[2].towerpos.y<=80)++tower[2].towerpos.y,none=false;
+ if (tower[3].towerpos.x<=120)++tower[3].towerpos.x,none=false;
+ if (tower[3].towerpos.y>=480)--tower[3].towerpos.y,none=false;
+ if (tower[4].towerpos.x>=660)--tower[4].towerpos.x,none=false;
+ if (tower[4].towerpos.y>=480)--tower[4].towerpos.y,none=false;
+ if (none)IfCallLevel=false;
+}
+void Level4Part5()
+{
+ frameleft=ThirtySeconds;
+ if (towcnt==6)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Keep your rhythm!");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower3(30,10,300,2);
+ CreateTower3(746,10,300,2);
+ CreateTower3(30,556,300,2);
+ CreateTower3(746,556,300,2);
+ CreateTower3(400,10,300,2);
+ CreateTower3(400,556,300,2);
+ CreateTower4(6,10,2000,2);
+ CreateTower4(760,10,2000,2);
+ CreateTower4(6,556,2000,2);
+ CreateTower4(760,556,2000,2);
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ if (tower[i].towertype==3)
+ tower[i].t3t=1;
+ }
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+
+}
+void Level4Part6()
+{
+ frameleft=ThirtySeconds;
+ if (towcnt==10)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Play with a kitten in the maze?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower4(400,540,3000,2);
+ for (int i=1;i<=33;++i)
+ {
+ int tmp=CreateTower3(i*24-20,570,500,2);
+ tower[tmp].t3t=3;
+ }
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level5Part0()
+{
+ frameleft=50;
+ if (towcnt==34)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Bullets that kill you won't move so fast...\n\
+Level 5 - A Huge Joke");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ return;
+ }
+}
+void Level5Part1()
+{
+ frameleft=TenSeconds;
+ if (towcnt==8)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ int tmp=CreateTower5(i*24-20,30,200,10);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level5Part2()
+{
+ frameleft=TwentySeconds;
+ if (towcnt==33)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower1(233,300,750,4);
+ CreateTower1(567,300,750,4);
+ for (int i=1;i<=33;++i)
+ int tmp=CreateTower5(i*24-20,30,500,4);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level5Part3()
+{
+ frameleft=ThirtySeconds;
+ if (towcnt==35)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower4(400,300,1000,2);
+ for (int i=1;i<=33;++i)
+ int tmp=CreateTower5(i*24-20,30,500,4);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level5Part4()
+{
+ frameleft=ThirtySeconds;
+ if (towcnt==34)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Avoiding is no longer an option.");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ int tmp=CreateTower1(i*24-20,30,500,4);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part0()
+{
+ frameleft=50;
+ if (towcnt==33)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Now you are going to meet my ultimate fire power...\n\
+Level 6 - The Great Clock");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ return;
+ }
+}
+void Level6Part1()
+{
+ frameleft=TwentySeconds;clrtime=0;
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower6(400,300,1000,2,1000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part2()
+{
+ frameleft=ThirtySeconds;clrtime=5;
+ if (towcnt==1)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Let's test the Advanced Bullet Script...\n\
+From now on you can use your Clear Ranges, try pressing Z in game.");
+ }
+ if (Current_Position==1)
+ {
+ ++part;
+ }
+}
+int Level6Part3_Child()
+{
+ ++stepskips;
+ if (stepskips<100)return 0;
+ stepskips=0;
+ if (towcnt==1){towcnt=0;return 0;}
+ CreateTower6(rand()%800,rand()%300,50,2,500);
+ return 1;
+}
+void Level6Part3()
+{
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ if (Level6Part3_Child())
+ {
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ return;
+ }
+ }
+}
+void Level6Part4()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (bulcnt!=0||towcnt!=5&&towcnt!=0)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Last level was very cool, wasn't it?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower6(400,300,750,2,1000);
+ CreateTower6(30,10,750,2,1000);
+ CreateTower6(746,10,750,2,1000);
+ CreateTower6(30,556,750,2,1000);
+ CreateTower6(746,556,750,2,1000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part5()
+{
+ frameleft=ThirtySeconds;clrtime=5;
+ if (bulcnt!=0||towcnt!=33)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("A row of fierce red tower?...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ int tmp=CreateTower6(i*24-20,30,3000,2,1000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part6()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (bulcnt!=0||towcnt!=37)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Enjoy the same maze.");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower6(30,10,1500,2,1000);
+ CreateTower6(746,10,1500,2,1000);
+ CreateTower6(30,556,1500,2,1000);
+ CreateTower6(746,556,1500,2,1000);
+ for (int i=1;i<=33;++i)
+ {
+ int tmp=CreateTower3(i*24-20,570,1000,2,true);
+ tower[tmp].t3t=3;
+ }
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part7()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (towcnt==37)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("You are supposed to leave now...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower4(30,10,2000,2);
+ CreateTower4(746,10,2000,2);
+ CreateTower4(30,556,2000,2);
+ CreateTower4(746,556,2000,2);
+ CreateTower3(120,80,300,2);
+ CreateTower3(660,80,300,2);
+ CreateTower3(120,480,300,2);
+ CreateTower3(660,480,300,2);
+ CreateTower1(400,30,500,2);
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ if (tower[i].towertype==3)tower[i].t3t=1;
+ }
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part8()
+{
+ frameleft=ThirtySeconds;clrtime=1;
+ if (towcnt==9)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("I don't think you can pass this easily...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower1(30,10,300,2);
+ CreateTower1(746,10,300,2);
+ CreateTower1(30,556,300,2);
+ CreateTower1(746,556,300,2);
+ CreateTower4(400,30,3000,3);
+ CreateTower3(900,900,999999,1);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level6Part9()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (towcnt!=2&&towcnt!=0)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Okay you survived...\n\
+But that was nothing much, more bombs is always the answer!");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower2(400,300,100,1);
+ CreateTower6(400,301,2000,1,1500);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part0()
+{
+ frameleft=50;
+ if (towcnt==2||bulcnt!=0)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Some freezy small objects are getting nearer...\n\
+Level 7 - Frozen Towers");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ return;
+ }
+}
+void Level7Part1()
+{
+ frameleft=ThirtySeconds;clrtime=0;
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ whicnt=10;
+ CreateTower7(400,300,1000,2,3000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part2()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (bulcnt!=0||(towcnt!=5&&towcnt!=0))
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Is it horrifying?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ whicnt=8;
+ CreateTower7(400,300,2000,1,3000);
+ CreateTower7(30,10,2000,1,3000);
+ CreateTower7(746,10,2000,1,3000);
+ CreateTower7(30,556,2000,1,3000);
+ CreateTower7(746,556,2000,1,3000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part3()
+{
+ frameleft=ThirtySeconds;clrtime=5;
+ if (towcnt==5)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Red & White.\n\
+Bloody snow?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ whicnt=5;
+ for (int i=1;i<=33;++i)
+ if (i&1)
+ CreateTower6(i*24-20,30,3000,2,1000);
+ else
+ CreateTower7(i*24-20,30,3000,2,1000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part4()
+{
+ frameleft=ThirtySeconds;clrtime=0;
+ if (towcnt==33||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Or this is only a bonus level?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ CreateTower1(i*24-20,30,1000,4),CreateTower1(i*24-20,567,1000,4);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part5()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (towcnt==66||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Wasn't that enough?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ CreateTower1(i*24-20,30,500,4),CreateTower5(i*24-20,567,500,4);
+ CreateTower3(900,900,999999,1);//Dummy tower for avoiding mis-clearing
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part6()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (towcnt==67||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("The impossible thing happened in the end...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ if (i&1)
+ CreateTower6(i*24-20,30,3000,1,1500),CreateTower5(i*24-20,567,500,3);
+ else
+ CreateTower5(i*24-20,567,500,3);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part7()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (towcnt==50||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Do you think you are fooled?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ whicnt=3;
+ for (int i=1;i<=33;++i)
+ if (i&1)
+ CreateTower7(i*24-20,30,2000,1,2000),CreateTower5(i*24-20,567,500,3);
+ else
+ CreateTower5(i*24-20,567,500,3);
+ CreateTower3(900,900,999999,1);//Dummy tower
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+
+}
+void Level7Part8()
+{
+ frameleft=ThirtySeconds;clrtime=5;
+ if (towcnt==51)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("I won't let you go easily...\n\
+But why?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ whicnt=2;
+ for (int i=1;i<=33;++i)
+ if (i&1)
+ CreateTower6(400,30,3000,1,2000);//,CreateTower5(i*24-20,567,2000,3);
+ else
+ CreateTower1(i*24-20,567,2000,3);//,CreateTower7(i*24-20,30,3000,1,2000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part9()
+{
+ frameleft=TwentySeconds;clrtime=1;
+ if (towcnt!=5&&towcnt!=0)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Let's relax a bit...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ CreateTower1(400,30,300,2);
+ CreateTower6(30,10,1000,2,1000);
+ CreateTower6(746,10,1000,2,1000);
+ CreateTower6(30,556,1000,2,1000);
+ CreateTower6(746,556,1000,2,1000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+
+}
+void Level7Part10()
+{
+ frameleft=ThirtySeconds;clrtime=3;
+ if (towcnt==5)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("I still can't let you go...\n\
+Just play with me! (And enjoy the double laby!)");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ for (int i=1;i<=33;++i)
+ {
+ int tmp=CreateTower3(i*24-20,570,500,2);
+ tower[tmp].t3t=3;
+ }
+ for (int i=1;i<=23;++i)
+ {
+ int tmp=CreateTower3(772,i*24,500,2);
+ tower[tmp].t3t=2;
+ }
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part11()
+{
+ frameleft=AMinute;clrtime=3;
+ if ((towcnt!=5&&towcnt!=0)||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("You will be full of holes after this level...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ whicnt=50;
+ CreateTower7(400,30,3000,1,3000);
+ CreateTower6(30,10,2000,1,2000);
+ CreateTower6(746,10,2000,1,2000);
+ CreateTower6(30,556,2000,1,2000);
+ CreateTower6(746,556,2000,1,2000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level7Part12()
+{
+ frameleft=AMinute;clrtime=3;
+ if ((towcnt!=6&&towcnt!=0)||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Well, here it is.");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ whicnt=50;
+ CreateTower7(400,30,3000,1,3000);
+ CreateTower6(400,300,2000,1,1500);
+ CreateTower1(30,10,2000,2);
+ CreateTower1(746,10,2000,2);
+ CreateTower1(30,556,2000,2);
+ CreateTower1(746,556,2000,2);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+
+}
+void Level8Part0()
+{
+ frameleft=50;
+ if (towcnt==6)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Welcome to the world that is only known by...masochism\n\
+Level 8 - Entertainment!");
+ IfCallLevel=false;
+ }
+ if (Current_Position==1)
+ {
+ frameleft=0;
+ return;
+ }
+}
+void Level8Part1()
+{
+ frameleft=ThirtySeconds;clrtime=0;
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower7(400,300,2500,8,750);
+ whicnt=25;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+
+}
+void Level8Part2()
+{
+ frameleft=TenSeconds;clrtime=3;
+ if (towcnt!=2&&bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Just another joke?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ deltadelta=0.004363322313/4;
+ CreateTower2(420,60,100,3);
+ CreateTower2(380,60,100,3);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level8Part3()
+{
+ frameleft=TenSeconds;
+ CreateTower2(460,100,100,3);
+ CreateTower2(340,100,100,3);
+ deltadelta=0.004363322313/8;
+ IfCallLevel=false;
+}
+void Level8Part4()
+{
+ frameleft=TenSeconds;
+ CreateTower2(500,140,100,3);
+ CreateTower2(300,140,100,3);
+ deltadelta=0.004363322313/16;
+ IfCallLevel=false;
+}
+void Level8Part5()
+{
+ frameleft=ThirtySeconds;clrtime=1;
+ if (towcnt==6||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("They are not cute enough to follow you all the time...");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ yelattrib=true;
+ for (int i=1;i<=33;++i)
+ int tmp=CreateTower4(i*24-20,30,2000,4,2000);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level8Part6()
+{
+ frameleft=AMinute;clrtime=3;
+ clrtime=3;
+ if (towcnt==33||(bulcnt!=0&&towcnt!=4))
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Hope you can enjoy... the entertaining level\n\
+Are they bullets or other object?");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower1(30,10,20,10);
+ CreateTower1(746,10,20,10);
+ CreateTower1(30,556,20,10);
+ CreateTower1(746,556,20,10);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level8Part7()
+{
+ frameleft=ThirtySeconds;clrtime=5;
+ if (towcnt==4||bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Nautilus!");
+ }
+ if (Current_Position==1)
+ {
+ ++part;
+ }
+}
+int Level8Part8_Child()
+{
+ ++stepskips;
+ if (stepskips<2)return 0;
+ stepskips=0;
+ linerad+=0.05;
+ for (int i=1;;++i)
+ {
+ double tx=400+sin(linerad)*i*12;
+ double ty=300+cos(linerad)*i*12;
+ if (tx>800||tx<0||ty>600||ty<0)
+ {
+ hge->Gfx_RenderLine(400,300,tx,ty,0x80CCFF00);
+ break;
+ }
+ int bult=CreateBullet1(tx,ty,1);
+ bullet[bult].bulletdir.x=-sin(linerad/*-1.5707963268*/);
+ bullet[bult].bulletdir.y=-cos(linerad/*-1.5707963268*/);
+ bullet[bult].dist=bullet[bult].bulletdir.x*bullet[bult].bulletdir.x+bullet[bult].bulletdir.y*bullet[bult].bulletdir.y;
+ bullet[bult].dist=sqrt(bullet[bult].dist);
+ }
+ return 1;
+}
+void Level8Part8()
+{
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ frameskips=0;
+ if (Level8Part8_Child())
+ {
+ }
+}
+void Level8Part9()
+{
+ frameleft=AMinute;clrtime=5;
+ if (bulcnt!=0&&towcnt!=2)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Two towers means too much");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower6(380,60,1000,8,1000);
+ CreateTower7(420,60,1000,8,750);
+ whicnt=16;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level8Part10()
+{
+ frameleft=AMinute;clrtime=5;
+ if (towcnt==2)
+ {
+ ClearAll();
+ return;
+ }
+ DisableAllTower=false;
+ bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Well, here is the final mixture.\n\
+Enjoy it!");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ CreateTower4(30,10,2000,2,3000);
+ CreateTower4(746,10,2000,2,3000);
+ CreateTower4(30,556,2000,2,3000);
+ CreateTower4(746,556,2000,2,3000);
+ CreateTower3(120,80,300,2);
+ CreateTower3(660,80,300,2);
+ CreateTower3(120,480,300,2);
+ CreateTower3(660,480,300,2);
+ CreateTower1(400,30,500,2);
+ CreateTower6(380,60,1000,6,1000);
+ CreateTower7(420,60,1000,6,750);
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towertype==3)
+ tower[i].t3t=1;
+ yelattrib=true;
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+}
+void Level8Part11()
+{
+ frameleft=AMinute;
+ if (towcnt!=1&&bulcnt!=0)
+ {
+ ClearAll();
+ if (bulcnt!=0||towcnt!=0)return;
+ }
+ DisableAllTower=false;
+ towcnt=0;bulcnt=0;memset(bullet,0,sizeof(bullet));
+ if (IfShowTip)
+ {
+ IfShowTip=false;
+ FadeTip=false;
+ Current_Position=2;
+ ShowTip("Addition Level: Reflection++\n\
+Give yourself an award even if you cannot pass this level.");
+ return;
+ }
+ ++frameskips;
+ if (frameskips<10&&!LOWFPS)return;
+ Refliction=true;
+ CreateTower6(400,566,1000,2,1000);
+ /*for (int i=1;i<=33;++i)
+ {
+ int tmp=CreateTower3(i*24-20,570,1000,2);
+ tower[tmp].t3t=3;
+ }
+ for (int i=1;i<=23;++i)
+ {
+ int tmp=CreateTower3(772,i*24,1000,2);
+ tower[tmp].t3t=2;
+ }*/
+ for (int i=1;i<=towcnt;++i)
+ if (tower[i].towerspr->GetColor()==0x80FFFFFF)
+ tower[i].towerspr->SetColor(0x00FFFFFF);
+ for (int i=1;i<=towcnt;++i)
+ if ((tower[i].towerspr->GetColor()>>24)<=0x80)
+ tower[i].towerspr->SetColor(tower[i].towerspr->GetColor()+0x01FFFFFF);
+ else
+ {
+ IfCallLevel=false;
+ return;
+ }
+} \ No newline at end of file
diff --git a/loading.h b/archive/blr1/src/loading.h
index acf59aa..acf59aa 100644
--- a/loading.h
+++ b/archive/blr1/src/loading.h
diff --git a/archive/blr1/src/main.cpp b/archive/blr1/src/main.cpp
new file mode 100644
index 0000000..d0ca2ed
--- /dev/null
+++ b/archive/blr1/src/main.cpp
@@ -0,0 +1,510 @@
+//Chrisoft Bullet Lab Remix HGE
+//Main Code
+//"Copyleft" Chrisoft 2013
+//#define Debug
+#include "hge.h"
+#include "hgefont.h"
+#include "hgegui.h"
+#include <cmath>
+#include <ctime>
+#include <cstdlib>
+#include <cstdio>
+#include "menuitem.h"
+#include "global.h"
+#include "towernbullet.h"
+#include "levels.h"
+#include "scorec.h"
+#include "menus.h"
+void firststartup()
+{
+ /*if (MessageBoxA(NULL,"It seems that you are running BLR for the First time!\nLet's do some \
+basic settings first!\n\nEnable Low FPS Mode?","First Start Up",0x00000024)==6)
+ fpslvl=1;
+ else*/
+ fpslvl=0;
+ /*if (MessageBoxA(NULL,"Enable Fullscreen?","First Start Up",0x00000024)==6)
+ tfs=1;
+ else*/
+ tfs=0;
+ diffkey=false;
+ plrspd=3;plrslospd=3;clrbns=0;
+ hge->System_Log("Finishing first start up configuraion...");
+ Options_Writeback();
+ Score_Initailize();
+}
+void Player_Clear()
+{
+ if (LOWFPS)
+ clrrange+=13.6;
+ else
+ clrrange+=0.8;
+ for (int i=1;i<=bulcnt;++i)
+ {
+ double dis=GetDist(bullet[i].bulletpos,playerpos);
+ if (dis<=clrrange&&bullet[i].exist)
+ {
+ CreateBullet255(bullet[i].bulletpos.x,bullet[i].bulletpos.y,10);
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ }
+}
+void ProcessPlayer()
+{
+ playerspr->RenderEx(playerpos.x+8.4,playerpos.y+8.4,playerrot,0.7,0);
+ if (DisablePlayer)return;
+ if (!LOWFPS)
+ playerrot+=0.00174533;
+ else
+ playerrot+=0.00174533*17;
+ double realspd;
+ if (hge->Input_GetKeyState(HGEK_SHIFT))
+ if (LOWFPS)
+ realspd=playerslospeed*17;
+ else
+ realspd=playerslospeed;
+ else
+ if (LOWFPS)
+ realspd=playerspeed*17;
+ else
+ realspd=playerspeed;
+ if (hge->Input_GetKeyState(HGEK_LEFT))
+ {
+ if (playerpos.x>10)
+ playerpos.x-=realspd;
+ }
+ if (hge->Input_GetKeyState(HGEK_RIGHT))
+ {
+ if (playerpos.x<770)
+ playerpos.x+=realspd;
+ }
+ if (hge->Input_GetKeyState(HGEK_UP))
+ {
+ if (playerpos.y>10)
+ playerpos.y-=realspd;
+ }
+ if (hge->Input_GetKeyState(HGEK_DOWN))
+ {
+ if (playerpos.y<570)
+ playerpos.y+=realspd;
+ }
+ if (hge->Input_GetKeyState(HGEK_Z)&&clrrange==0&&clrtime+clrbns&&!diffkey)
+ {
+ Player_Clear();--clrtime;++clrusg;
+ }
+ if (hge->Input_GetKeyState(HGEK_X)&&clrrange==0&&clrtime+clrbns&&diffkey)
+ {
+ Player_Clear();--clrtime;++clrusg;
+ }
+ //Player_Attack();
+ if (clrrange!=0)Player_Clear();
+ if (clrrange>=300)clrrange=0;
+}
+void RefreshScore()
+{
+ if (DisablePlayer)return;
+ int multp=1;
+ if (mode==2)multp=5;
+ if (LOWFPS)
+ score+=multp*16;
+ else
+ score+=multp;
+ score+=100*shots;
+ score-=scminus;
+ score+=2000*dsmc;
+ ++frms;
+ averfps=(averfps*(frms-1)+hge->Timer_GetFPS())/(double)frms;
+}
+void CallLevels()
+{
+ //Use this to call level procedures.
+ //Don't use this to call the first level!
+ if (level<6)clrtime=0;
+ if ((mode==4||mode<=2)&&coll!=0){DeathGUI_Init();return;}
+ if (!IfCallLevel) return;
+ if (level==7&&part==0&&mode==4)//Easy
+ {
+ CompleteGUI_Init();
+ return;
+ }
+ if (level==8&&part==0&&mode==4)//Easy
+ {
+ CompleteGUI_Init();
+ return;
+ }
+ if (level==8&&part==12&&(mode==2||mode==3))//Extreme or FPM
+ {
+ CompleteGUI_Init();
+ return;
+ }
+ if (level==1&&part==1)Level1Part1();
+ if (level==1&&part==2)Level1Part2();
+ if (level==1&&part==3)Level1Part3();
+ if (level==1&&part==4)Level1Part4();
+ if (level==2&&part==0)Level2Part0();
+ if (level==2&&part==1)Level2Part1();
+ if (level==2&&part==2)Level2Part2();
+ if (level==2&&part==3)Level2Part3();
+ if (level==3&&part==0)Level3Part0();
+ if (level==3&&part==1)Level3Part1();
+ if (level==3&&part==2)Level3Part2();
+ if (level==3&&part==3)Level3Part3();
+ if (level==3&&part==4)Level3Part4();
+ if (level==3&&part==5)Level3Part5();
+ if (level==3&&part==6)Level3Part6();
+ if (level==3&&part==7)Level3Part7();
+ if (level==4&&part==0)Level4Part0();
+ if (level==4&&part==1)Level4Part1();
+ if (level==4&&part==2)Level4Part2();
+ if (level==4&&part==3)Level4Part3();
+ if (level==4&&part==4)Level4Part4();
+ if (level==4&&part==5)Level4Part5();
+ if (level==4&&part==6)Level4Part6();
+ if (level==5&&part==0)Level5Part0();
+ if (level==5&&part==1)Level5Part1();
+ if (level==5&&part==2)Level5Part2();
+ if (level==5&&part==3)Level5Part3();
+ if (level==5&&part==4)Level5Part4();
+ if (level==6&&part==0)Level6Part0();
+ if (level==6&&part==1)Level6Part1();
+ if (level==6&&part==2)Level6Part2();
+ if (level==6&&part==3)Level6Part3();
+ if (level==6&&part==4)Level6Part4();
+ if (level==6&&part==5)Level6Part5();
+ if (level==6&&part==6)Level6Part6();
+ if (level==6&&part==7)Level6Part7();
+ if (level==6&&part==8)Level6Part8();
+ if (level==6&&part==9)Level6Part9();
+ if (level==7&&part==0)Level7Part0();
+ if (level==7&&part==1)Level7Part1();
+ if (level==7&&part==2)Level7Part2();
+ if (level==7&&part==3)Level7Part3();
+ if (level==7&&part==4)Level7Part4();
+ if (level==7&&part==5)Level7Part5();
+ if (level==7&&part==6)Level7Part6();
+ if (level==7&&part==7)Level7Part7();
+ if (level==7&&part==8)Level7Part8();
+ if (level==7&&part==9)Level7Part9();
+ if (level==7&&part==10)Level7Part10();
+ if (level==7&&part==11)Level7Part11();
+ if (level==7&&part==12)Level7Part12();
+ if (level==8&&part==0)Level8Part0();
+ if (level==8&&part==1)Level8Part1();
+ if (level==8&&part==2)Level8Part2();
+ if (level==8&&part==3)Level8Part3();
+ if (level==8&&part==4)Level8Part4();
+ if (level==8&&part==5)Level8Part5();
+ if (level==8&&part==6)Level8Part6();
+ if (level==8&&part==7)Level8Part7();
+ if (level==8&&part==8)Level8Part8();
+ if (level==8&&part==9)Level8Part9();
+ if (level==8&&part==10)Level8Part10();
+ if (level==8&&part==11)Level8Part11();
+}
+void AboutScene()
+{
+ if (LOWFPS)scroll+=0.51;else scroll+=0.03;
+ Credits->Render(200,600-scroll);
+ CreditsRail->Render(200,0);
+ if(hge->Input_GetKeyState(HGEK_Z)||scroll>1624)
+ {
+ Current_Position=0;
+ gui->SetFocus(1);
+ gui->Enter();
+ }
+}
+bool FrameFunc()
+{
+ float dt=hge->Timer_GetDelta();
+ static float t=0.0f;
+ float tx,ty;
+ int id;
+ static int lastid=0;
+ // If ESCAPE was pressed, tell the GUI to finish
+ if (hge->Input_GetKeyState(HGEK_ESCAPE)&&Current_Position==0) { lastid=5; gui->Leave(); }
+ if (Current_Position==1&&hge->Input_GetKeyState(HGEK_ESCAPE))PauseGUI_Init();
+ // We update the GUI and take an action if
+ // one of the menu items was selected
+ if (Current_Position==0)
+ {
+ id=gui->Update(dt);
+ if(id == -1)
+ {
+ switch(lastid)
+ {
+ case 1:Current_Position=3; StartGUI_Init();gui->Leave();break;
+ case 2:gui->Leave();HighScoreGUI_Init();break;
+ case 3:gui->Leave();OptionsGUI_Init();break;
+ case 4:
+ Credits=new hgeSprite(TexCredits,0,0,400,1024);
+ CreditsRail=new hgeSprite(TexCredits,400,0,400,1024);
+ scroll=0;
+ Current_Position=4;
+ AboutScene();
+ lastid=0;
+ break;
+ case 5: return true;
+ }
+ }
+ else if(id) { lastid=id; gui->Leave(); }
+ }
+ if (Current_Position==3)StartGUI_FrameFnk();
+ if (Current_Position==5)DeathGUI_FrameFnk();
+ if (Current_Position==6)CompleteGUI_FrameFnk();
+ if (Current_Position==7)NewHighScoreGUI_FrameFnk();
+ if (Current_Position==8)HighScoreGUI_FrameFnk();
+ if (Current_Position==9)HSViewGUI_FrameFnk();
+ if (Current_Position==10)HSDetGUI_FrameFnk();
+ if (Current_Position==11)PauseGUI_FrameFnk();
+ if (Current_Position==12)BkTTitleGUI_FrameFnk();
+ if (Current_Position==13)OptionsGUI_FrameFnk();
+ if (Current_Position==14)PlayerProfGUI_FrameFnk();
+ // Here we update our background animation
+ t+=dt;
+ tx=50*cosf(t/60);
+ ty=50*sinf(t/60);
+ quad.v[0].tx=tx; quad.v[0].ty=ty;
+ quad.v[1].tx=tx+800/64; quad.v[1].ty=ty;
+ quad.v[2].tx=tx+800/64; quad.v[2].ty=ty+600/64;
+ quad.v[3].tx=tx; quad.v[3].ty=ty+600/64;
+ return false;
+}
+bool RenderFunc()
+{
+ // Render graphics
+ hge->Gfx_BeginScene();
+ hge->Gfx_RenderQuad(&quad);
+ if (Current_Position==0||Current_Position==3||Current_Position==8||
+ Current_Position==9||Current_Position==10||Current_Position==13||Current_Position==14)
+ {
+ if (Current_Position==0)
+ gui->Render();
+ titlespr->Render(160,0);
+ }
+ if (Current_Position==3)
+ StartGUI->Render();
+ if (Current_Position==1||Current_Position==2||Current_Position==5||Current_Position==11||Current_Position==12)
+ {
+ //If we are at the main scene or tip scene(which towers and bullets should still appear..)
+ //Render towers, bullets and player.
+ shots=0;
+ dsmc=0;
+ scminus=0;
+ ProcessTower1();
+ ProcessTower2();
+ ProcessTower3();
+ ProcessTower4();
+ ProcessTower5();
+ ProcessTower6();
+ ProcessTower7();
+ ProcessBullet1();
+ ProcessBullet2();
+ //No ProcessBullet3() needed
+ ProcessBullet4();
+ ProcessBullet5();
+ ProcessBullet6();
+ ProcessBullet7();
+ ProcessBullet255();
+ ProcessPlayer();
+ SCEffect_Process();
+ RefreshScore();
+ if (!DisablePlayer)
+ --frameleft;//If we are at the tip scene, disable the player movement.
+ if (!LOWFPS)
+ {
+ if (playerspeed<playerfulspd)playerspeed+=playerfulspd/400;
+ if (playerslospeed<playerfulslospd)playerslospeed+=playerfulslospd/400;
+ }
+ else
+ {
+ if (playerspeed<playerfulspd)playerspeed+=playerfulspd/25;
+ if (playerslospeed<playerfulslospd)playerslospeed+=playerfulslospd/25;
+ }
+ }
+ if (frameleft == 0&&Current_Position==1)
+ {
+ IfCallLevel=true;
+ ++part;
+ IfShowTip=true;
+ if (level==1&&part==5)++level,part=0;
+ if (level==2&&part==4)++level,part=0;
+ if (level==3&&part==8)++level,part=0;
+ if (level==4&&part==7)++level,part=0;
+ if (level==5&&part==5)++level,part=0;
+ if (level==6&&part==10)++level,part=0;
+ if (level==7&&part==13)++level,part=0;
+ }
+ if (Current_Position==1)
+ {
+ CallLevels();
+ }
+ if (shots)hge->Effect_Play(snd);
+ if (Current_Position==2)
+ {
+ ShowTip(lasttip);
+ //if (Complete)
+ // TipFont->printf(200,200,HGETEXT_LEFT,"Score");
+ }
+ if (Current_Position==4)AboutScene();
+ if (Current_Position==5)DeathGUI->Render();
+ if (Current_Position==6)CompleteGUI->Render();
+ if (Current_Position==7)NewHighScoreGUI_Render();
+ if (Current_Position==8)HighScoreGUI->Render();
+ if (Current_Position==9)HSViewGUI->Render();
+ if (Current_Position==10)HSDetailGUI->Render();
+ if (Current_Position==11)PauseGUI->Render();
+ if (Current_Position==12)BkTTitleGUI->Render();
+ if (Current_Position==13)OptionsGUI->Render();
+ if (Current_Position==14)PlayerProfGUI->Render();
+ fnt->SetColor(0xFFFFFFFF);
+ fnt->printf(680, 575, HGETEXT_LEFT, "FPS: %d", hge->Timer_GetFPS());
+ if (Current_Position==1||Current_Position==2)
+ {
+ fnt->printf(670,555, HGETEXT_LEFT, "AF: %.2f", averfps);
+ fnt->printf(5, 0, HGETEXT_LEFT, "Frames to go: %d",frameleft);
+ fnt->printf(5, 25, HGETEXT_LEFT, "Score: %lld",score);
+ fnt->printf(5, 50, HGETEXT_LEFT, "Level %d Part %d",level,part);
+ if (mode==3)
+ fnt->printf(5, 75, HGETEXT_LEFT, "Collisions: %d",coll);
+ else
+ fnt->printf(5, 75, HGETEXT_LEFT, "Restarts: %d",restarts);
+ fnt->printf(5, 100, HGETEXT_LEFT, "Semi-Collisions: %d",semicoll);
+ fnt->printf(5, 125, HGETEXT_LEFT, "Clear Range Left: %d",clrtime+clrbns);
+ }
+ hge->Gfx_EndScene();
+ return false;
+}
+int main()
+{
+ srand(time(NULL));
+ hge = hgeCreate(HGE_VERSION);
+ hge->System_SetState(HGE_LOGFILE, "BLRLOG.txt");
+ hge->System_Log("Bullet Lab Remix Log File");
+ hge->System_Log("Folder Decompressed created successfully.");
+ /*
+ Resourece Files list
+ bg.lz->bg.png
+ blnsns.lz->blnsns.png
+ charmap.lz->charmap.fnt
+ ss1.lz->ss1.png
+ ss2.lz->ss2.png
+ title.lz->title.png
+ credits.lz->credits.png
+ tap.lz->tap.wav
+ */
+ hge->System_SetState(HGE_FRAMEFUNC, FrameFunc);
+ hge->System_SetState(HGE_RENDERFUNC, RenderFunc);
+ hge->System_SetState(HGE_TITLE, "Bullet Lab Remix");
+ hge->System_SetState(HGE_WINDOWED, true);
+ hge->System_SetState(HGE_SCREENWIDTH, 800);
+ hge->System_SetState(HGE_SCREENHEIGHT, 600);
+ hge->System_SetState(HGE_SCREENBPP, 32);
+ hge->System_SetState(HGE_SHOWSPLASH, false);
+ hge->System_SetState(HGE_FPS,0);
+ if((access("blr.cfg",0))==-1)
+ {
+ hge->System_Log("Config file not found. Calling first startup.");
+ firststartup();
+ }
+ hge->System_Log("Loading config file");
+ freopen("blr.cfg","r",stdin);
+ char tch=getchar();
+ if (tch!=';'){}
+ tch=getchar();
+ if (tch!='C'){}
+ tch=getchar();
+ if (tch!='B'){}
+ tch=getchar();
+ if (tch!='L'){}
+ fpslvl=0;
+ tch=getchar();//LOWFPS
+ if (tch==1)
+ {
+ LOWFPS=true;
+ TenSeconds=600;
+ TwentySeconds=1200;
+ ThirtySeconds=1800;
+ AMinute=3600;
+ hge->System_SetState(HGE_FPS,61);
+ fpslvl=1;
+ }
+ tch=getchar();//FULLSCRREEN
+ tfs=false;
+ if (tch==1)
+ hge->System_SetState(HGE_WINDOWED, false),tfs=true;
+ tch=getchar();//LockFPS
+ if (tch==1&&!LOWFPS)
+ {
+ hge->System_SetState(HGE_FPS,1000);
+ fpslvl=2;
+ }
+ tch=getchar();//Key binding
+ if (tch==1)diffkey=true;
+ plrspd=tch=getchar();
+ playerfulspd=(tch)*0.05f;
+ playerspeed=playerfulspd;
+ plrslospd=tch=getchar();
+ playerfulslospd=(tch)*0.0125f;
+ playerslospeed=playerfulslospd;
+ tch=getchar();
+ clrbns=tch;
+ fclose(stdin);
+ if (AP_Update(plrspd,plrslospd,clrbns)>10000)Error("Invalid configuration!\nDelete blr.cfg and run the game again!");
+ hge->System_Log("Loading Score file");
+ Score_Init();
+#ifdef Debug
+ playerspeed=playerfulspd=0.2;
+ playerslospeed=playerfulslospd=0.05;
+#endif
+ Current_Position=0;//We are at the main menu at first
+ if(hge->System_Initiate())
+ {
+ quad.tex=hge->Texture_Load("./Resources/bg.png");
+ SprSheet1=hge->Texture_Load("./Resources/ss1.png");
+ SprSheet2=hge->Texture_Load("./Resources/ss2.png");
+ TexTitle=hge->Texture_Load("./Resources/title.png");
+ TexCredits=hge->Texture_Load("./Resources/credits.png");
+ snd=hge->Effect_Load("./Resources/tap.ogg");
+ titlespr=new hgeSprite(TexTitle,0,0,640,320);
+ playerspr=new hgeSprite(SprSheet1,47,46,24,24);
+ playerspr->SetHotSpot(12,12);//Set player anchor
+ playerspr->SetColor(0xC0FFFFFF);
+ if(!quad.tex||!SprSheet1||!SprSheet2||!TexTitle||!TexCredits)
+ {
+ Error("Error Loading Resources!",true);
+ }
+ quad.blend=BLEND_ALPHABLEND | BLEND_COLORMUL | BLEND_NOZWRITE;
+ for(int i=0;i<4;i++)
+ {
+ quad.v[i].z=0.5f;
+ quad.v[i].col=0xFFFFFFFF;
+ }
+ quad.v[0].x=0; quad.v[0].y=0;
+ quad.v[1].x=800; quad.v[1].y=0;
+ quad.v[2].x=800; quad.v[2].y=600;
+ quad.v[3].x=0; quad.v[3].y=600;
+ fnt=new hgeFont("./Resources/charmap.fnt");
+ TipFont=new hgeFont("./Resources/charmap.fnt");
+ spr=new hgeSprite(SprSheet1,24,46,24,24);
+ gui=new hgeGUI();
+ gui->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Start"));
+ gui->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Highscores && Records"));
+ gui->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Options"));
+ gui->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"About"));
+ gui->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Exit"));
+ gui->SetNavMode(HGEGUI_UPDOWN | HGEGUI_CYCLED);
+ gui->SetCursor(spr);
+ gui->SetFocus(1);
+ gui->Enter();
+ if (LOWFPS)
+ hge->System_Log("Low FPS Mode Enabled.\n");
+ hge->System_Start();
+ }
+ // Clean up and shutdown
+ hge->System_Shutdown();
+ hge->Release();
+ return 0;
+}
diff --git a/archive/blr1/src/menuitem.cpp b/archive/blr1/src/menuitem.cpp
new file mode 100644
index 0000000..353b6b7
--- /dev/null
+++ b/archive/blr1/src/menuitem.cpp
@@ -0,0 +1,201 @@
+/*
+** Haaf's Game Engine 1.7
+** Copyright (C) 2003-2007, Relish Games
+** hge.relishgames.com
+**
+** Tutorial 06 - Creating menus
+*/
+
+// In menuitem.cpp/h we define the
+// behaviour of our custom GUI control
+
+#include "menuitem.h"
+#define UnfocColor 0xFFAAAAAA
+#define FocColor 0xFFFFFFFF
+// This is a GUI control constructor,
+// we should initialize all the variables here
+hgeGUIMenuItem::hgeGUIMenuItem(int _id, hgeFont *_fnt, HEFFECT _snd, float _x, float _y, float _delay, char *_title)
+{
+ float w;
+
+ id=_id;
+ fnt=_fnt;
+ snd=_snd;
+ delay=_delay;
+ title=_title;
+
+ color.SetHWColor(UnfocColor);
+ shadow.SetHWColor(0x30000000);
+ offset=0.0f;
+ timer=-1.0f;
+ timer2=-1.0f;
+
+ bStatic=false;
+ bVisible=true;
+ bEnabled=true;
+
+ w=fnt->GetStringWidth(title);
+ rect.Set(_x-w/2, _y, _x+w/2, _y+fnt->GetHeight());
+}
+
+// Reposition the item
+void hgeGUIMenuItem::RePos(float x,float y)
+{
+ float w=fnt->GetStringWidth(title);
+ rect.Set(x-w/2, y, x+w/2, y+fnt->GetHeight());
+}
+
+// This method is called when the control should be rendered
+void hgeGUIMenuItem::Render()
+{
+ fnt->SetColor(shadow.GetHWColor());
+ fnt->Render(rect.x1+offset+3, rect.y1+3, HGETEXT_LEFT, title);
+ fnt->SetColor(color.GetHWColor());
+ fnt->Render(rect.x1-offset, rect.y1-offset, HGETEXT_LEFT, title);
+}
+
+// This method is called each frame,
+// we should update the animation here
+void hgeGUIMenuItem::Update(float dt)
+{
+ if(timer2 != -1.0f)
+ {
+ timer2+=dt;
+ if(timer2 >= delay+0.1f)
+ {
+ color=scolor2+dcolor2;
+ shadow=sshadow+dshadow;
+ offset=0.0f;
+ timer2=-1.0f;
+ }
+ else
+ {
+ if(timer2 < delay) { color=scolor2; shadow=sshadow; }
+ else { color=scolor2+dcolor2*(timer2-delay)*10; shadow=sshadow+dshadow*(timer2-delay)*10; }
+ }
+ }
+ else if(timer != -1.0f)
+ {
+ timer+=dt;
+ if(timer >= 0.2f)
+ {
+ color=scolor+dcolor;
+ offset=soffset+doffset;
+ timer=-1.0f;
+ }
+ else
+ {
+ color=scolor+dcolor*timer*5;
+ offset=soffset+doffset*timer*5;
+ }
+ }
+}
+
+// This method is called when the GUI
+// is about to appear on the screen
+void hgeGUIMenuItem::Enter()
+{
+ hgeColor tcolor2;
+
+ scolor2.SetHWColor(UnfocColor&0x00FFFFFF);
+ tcolor2.SetHWColor(UnfocColor);
+ dcolor2=tcolor2-scolor2;
+
+ sshadow.SetHWColor(0x00000000);
+ tcolor2.SetHWColor(0x30000000);
+ dshadow=tcolor2-sshadow;
+
+ timer2=0.0f;
+}
+
+// This method is called when the GUI
+// is about to disappear from the screen
+void hgeGUIMenuItem::Leave()
+{
+ hgeColor tcolor2;
+
+ scolor2.SetHWColor(UnfocColor);
+ tcolor2.SetHWColor(UnfocColor&0x00FFFFFF);
+ dcolor2=tcolor2-scolor2;
+
+ sshadow.SetHWColor(0x30000000);
+ tcolor2.SetHWColor(0x00000000);
+ dshadow=tcolor2-sshadow;
+
+ timer2=0.0f;
+}
+
+// This method is called to test whether the control
+// have finished it's Enter/Leave animation
+bool hgeGUIMenuItem::IsDone()
+{
+ if(timer2==-1.0f) return true;
+ else return false;
+}
+
+// This method is called when the control
+// receives or loses keyboard input focus
+void hgeGUIMenuItem::Focus(bool bFocused)
+{
+ hgeColor tcolor;
+
+ if(bFocused)
+ {
+ hge->Effect_Play(snd);
+ scolor.SetHWColor(UnfocColor);
+ tcolor.SetHWColor(FocColor);
+ soffset=0;
+ doffset=4;
+ }
+ else
+ {
+ scolor.SetHWColor(FocColor);
+ tcolor.SetHWColor(UnfocColor);
+ soffset=4;
+ doffset=-4;
+ }
+
+ dcolor=tcolor-scolor;
+ timer=0.0f;
+}
+
+// This method is called to notify the control
+// that the mouse cursor has entered or left it's area
+void hgeGUIMenuItem::MouseOver(bool bOver)
+{
+ if(bOver) gui->SetFocus(id);
+}
+
+// This method is called to notify the control
+// that the left mouse button state has changed.
+// If it returns true - the caller will receive
+// the control's ID
+bool hgeGUIMenuItem::MouseLButton(bool bDown)
+{
+ if(!bDown)
+ {
+ offset=4;
+ return true;
+ }
+ else
+ {
+ hge->Effect_Play(snd);
+ offset=0;
+ return false;
+ }
+}
+
+// This method is called to notify the
+// control that a key has been clicked.
+// If it returns true - the caller will
+// receive the control's ID
+bool hgeGUIMenuItem::KeyClick(int key, int chr)
+{
+ if(key==HGEK_ENTER || key==HGEK_SPACE || key==HGEK_Z)
+ {
+ MouseLButton(true);
+ return MouseLButton(false);
+ }
+
+ return false;
+}
diff --git a/archive/blr1/src/menuitem.h b/archive/blr1/src/menuitem.h
new file mode 100644
index 0000000..5788ed9
--- /dev/null
+++ b/archive/blr1/src/menuitem.h
@@ -0,0 +1,46 @@
+/*
+** Haaf's Game Engine 1.7
+** Copyright (C) 2003-2007, Relish Games
+** hge.relishgames.com
+**
+** Tutorial 06 - Creating menus
+*/
+
+// In menuitem.cpp/h we define the
+// behaviour of our custom GUI control
+
+#include "hge.h"
+#include "hgegui.h"
+#include "hgefont.h"
+#include "hgecolor.h"
+
+
+class hgeGUIMenuItem : public hgeGUIObject
+{
+public:
+ hgeGUIMenuItem(int id, hgeFont *fnt, HEFFECT snd, float x, float y, float delay, char *title);
+
+ virtual void Render();
+ virtual void Update(float dt);
+
+ virtual void Enter();
+ virtual void Leave();
+ virtual bool IsDone();
+ virtual void Focus(bool bFocused);
+ virtual void MouseOver(bool bOver);
+
+ virtual bool MouseLButton(bool bDown);
+ virtual bool KeyClick(int key, int chr);
+ virtual void RePos(float x,float y);
+ char *title;
+
+private:
+ hgeFont *fnt;
+ HEFFECT snd;
+ float delay;
+
+ hgeColor scolor, dcolor, scolor2, dcolor2, sshadow, dshadow;
+ hgeColor color, shadow;
+ float soffset, doffset, offset;
+ float timer, timer2;
+};
diff --git a/archive/blr1/src/menus.h b/archive/blr1/src/menus.h
new file mode 100644
index 0000000..cffcee7
--- /dev/null
+++ b/archive/blr1/src/menus.h
@@ -0,0 +1,742 @@
+//Chrisoft Bullet Lab Remix HGE
+//Menu Implementations
+//"Copyleft" Chrisoft 2013
+hgeGUI *StartGUI,*DeathGUI,*CompleteGUI,*HighScoreGUI;
+hgeGUI *HSViewGUI,*HSDetailGUI,*PauseGUI,*BkTTitleGUI;
+hgeGUI *OptionsGUI,*PlayerProfGUI;
+char ds1[255],ds2[255],ds3[255],ds4[255];
+char hs1[255],hs2[255],hs3[255],hs4[255],hs5[255],hs6[255];
+char HSVstr[7][255];
+char HSDetstr[10][255];
+char opt[10][255];
+bool toogleundl;
+int view,detv;
+int lastkeypressed;
+void HSViewGUI_Init();
+void HighScoreGUI_Init();
+void PauseGUI_Init();
+void StartGUI_Init()
+{
+ StartGUI=new hgeGUI();
+ StartGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Easy"));
+ StartGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Normal"));
+ StartGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Extreme"));
+ StartGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Free Play Mode"));
+ StartGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Back"));
+ StartGUI->SetCursor(spr);
+ StartGUI->SetNavMode(HGEGUI_UPDOWN);
+ StartGUI->SetFocus(1);
+ StartGUI->Enter();
+}
+void StartGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=StartGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 1:
+ playerpos.x=400,playerpos.y=400,playerrot=0;
+ frameleft=TenSeconds;
+ level=1,part=1;frms=0,averfps=0.0;restarts=0;bsscale=0.75;
+ towcnt=bulcnt=0;
+ mode=4;
+ score=0;
+ coll=semicoll=clrusg=0;
+ memset(tower,0,sizeof(tower));
+ memset(bullet,0,sizeof(bullet));
+ Complete=false;
+ Refliction=false;
+ Level1Part1();
+ IfCallLevel=true;
+ break;
+ case 2:
+ playerpos.x=400,playerpos.y=400,playerrot=0;
+ frameleft=TenSeconds;
+ level=1,part=1;frms=0,averfps=0.0;restarts=0;bsscale=1;
+ towcnt=bulcnt=0;
+ mode=1;
+ score=0;
+ coll=semicoll=clrusg=0;
+ memset(tower,0,sizeof(tower));
+ memset(bullet,0,sizeof(bullet));
+ Complete=false;
+ Refliction=false;
+ Level1Part1();
+ IfCallLevel=true;
+ break;
+ case 3:
+ playerpos.x=400,playerpos.y=400,playerrot=0;
+ frameleft=ThirtySeconds;
+ level=3,part=1;frms=0,averfps=0.0;restarts=0;bsscale=1.5;
+ towcnt=4;bulcnt=0;
+ memset(tower,0,sizeof(tower));
+ memset(bullet,0,sizeof(bullet));
+ mode=2;
+ score=0;
+ coll=semicoll=clrusg=0;
+ IfShowTip=true;
+ Complete=false;
+ Refliction=false;
+ Level3Part0();
+ IfCallLevel=true;
+ break;
+ case 4:
+ playerpos.x=400,playerpos.y=400,playerrot=0;
+ frameleft=TenSeconds;
+ level=1,part=1;frms=0,averfps=0.0;bsscale=1;
+ towcnt=bulcnt=0;
+ score=0;
+ coll=semicoll=clrusg=0;
+ memset(tower,0,sizeof(tower));
+ memset(bullet,0,sizeof(bullet));
+ Complete=false;
+ Refliction=false;
+ Level1Part1();
+ IfCallLevel=true;
+ mode=3;
+ break;
+ case 5:
+ Current_Position=0;
+ StartGUI->Leave();
+ gui->Enter();
+ }
+ }
+}
+void DeathGUI_Init()
+{
+ DeathGUI=new hgeGUI();
+ Current_Position=5;
+ DisableAllTower=true;DisablePlayer=true;
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,160,0.0f,"You Are Dead!"));
+ sprintf(ds1,"You scored %lld at level %d",score,level);
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,200,0.1f,ds1));
+ switch (mode)
+ {
+ case 1:sprintf(ds2,"Difficulty: Normal");break;
+ case 2:sprintf(ds2,"Difficulty: Extreme");break;
+ case 3:sprintf(ds2,"What Happened?! You died in Free Play Mode?!");break;
+ case 4:sprintf(ds2,"Difficulty: Easy");break;
+ }
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,240,0.2f,ds2));
+ sprintf(ds3,"Average FPS: %.2f",averfps);
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,280,0.3f,ds3));
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,320,0.3f,""));
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,360,0.4f,"Continue from beginning of level? Your score will be set to minus!"));
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,400,0.5f,"Continue!"));
+ DeathGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,440,0.6f,"No thanks..."));
+ for (int i=1;i<=6;++i)DeathGUI->EnableCtrl(i,false);
+ DeathGUI->SetCursor(spr);
+ DeathGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
+ DeathGUI->SetFocus(7);
+ DeathGUI->Enter();
+}
+void DeathGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=DeathGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 7:
+ IfCallLevel=true;
+ Current_Position=1;
+ DeathGUI->Leave();
+ score=-abs(score);
+ ++restarts;
+ part=1;
+ clockrot=deltarot=0;
+ coll=towcnt=bulcnt=0;
+ DisableAllTower=DisablePlayer=false;
+ break;
+ case 8:Current_Position=0;gui->Enter();DeathGUI->Leave();break;
+ }
+ }
+}
+void NewHighScoreGUI_Init()
+{
+ Current_Position=7;
+ memset(newname,0,sizeof(newname));newlen=0;tbframebrk=0;toogleundl=false;
+ TipFont->SetColor(0xFFFFFFFF);
+}
+void nameins(char a)
+{
+ if (newlen<=14)
+ newname[newlen++]=a;
+}
+void namedel()
+{
+ if (newlen>0)newname[--newlen]=0;
+}
+void NewHighScoreGUI_FrameFnk()
+{
+ int key=hge->Input_GetKey();
+ if (key>=0x30&&key<=0x39)nameins('0'+key-0x30);
+ if (key>=0x41&&key<=0x5A)
+ nameins('a'+key-0x41);
+ if (key==HGEK_SPACE)nameins('_');
+ if (key==HGEK_BACKSPACE)namedel();
+ if (key==HGEK_ENTER)
+ {
+ InsertHighScore();
+ switch (mode)
+ {
+ case 4:view=1;HSViewGUI_Init();break;
+ case 1:view=2;HSViewGUI_Init();break;
+ case 2:view=3;HSViewGUI_Init();break;
+ case 3:view=4;HSViewGUI_Init();break;
+ }
+ }
+}
+void NewHighScoreGUI_Render()
+{
+ if (LOWFPS)tbframebrk+=17;else ++tbframebrk;
+ if (tbframebrk>=500)toogleundl=!toogleundl,tbframebrk=0;
+ TipFont->printf(200,200,HGETEXT_LEFT,"Please Enter Your Honorable Name...");
+ if (!toogleundl)
+ TipFont->printf(200,240,HGETEXT_LEFT,"%s",newname);
+ else
+ TipFont->printf(200,240,HGETEXT_LEFT,"%s_",newname);
+}
+void CompleteGUI_Init()
+{
+ CompleteGUI=new hgeGUI();
+ Current_Position=6;
+ DisableAllTower=true;DisablePlayer=true;
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,120,0.0f,"YOU DID THAT!"));
+ if (CheckHighScore()!=-1)
+ sprintf(hs1,"New Highscore %lld!",score);
+ else
+ sprintf(hs1,"Score %lld",score);
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,160,0.1f,hs1));
+ switch (mode)
+ {
+ case 1:
+ case 2:
+ case 4:sprintf(hs2,"Restarts %d",restarts);break;
+ case 3:sprintf(hs2,"Collisions %d",coll);break;
+ }
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,200,0.2f,hs2));
+ sprintf(hs3,"Semi-Collisions %d",semicoll);
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,240,0.3f,hs3));
+ sprintf(hs4,"CLR usage %d",clrusg);
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,280,0.3f,hs4));
+ sprintf(hs5,"Average FPS %.2f",averfps);
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,320,0.4f,hs5));
+ if (CheckHighScore()!=-1)
+ {
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,360,0.5f,"Keep this in your record?"));
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,400,0.6f,"Yes"));
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(9,fnt,snd,400,440,0.7f,"No thanks..."));
+ }
+ else
+ {
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,360,0.5f,""));
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,400,0.6f,""));
+ CompleteGUI->AddCtrl(new hgeGUIMenuItem(9,fnt,snd,400,440,0.7f,"Back to menu"));
+ }
+ for (int i=1;i<=7;++i)CompleteGUI->EnableCtrl(i,false);
+ CompleteGUI->SetCursor(spr);
+ CompleteGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
+ CompleteGUI->SetFocus(7);
+ CompleteGUI->Enter();
+}
+void CompleteGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=CompleteGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 8:NewHighScoreGUI_Init();CompleteGUI->Leave();break;
+ case 9:Current_Position=0;gui->Enter();CompleteGUI->Leave();break;
+ }
+ }
+}
+void HSDetGUI_Init()
+{
+ HSDetailGUI=new hgeGUI();
+ Current_Position=10;
+ switch (view)
+ {
+ case 1:
+ memset(HSDetstr,0,sizeof(HSDetstr));
+ if (!ERec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
+ else
+ {
+ sprintf(HSDetstr[1],"No. %d of Easy Mode",detv);
+ sprintf(HSDetstr[2],"Scored %lld by %s",ERec[detv].score,ERec[detv].name);
+ sprintf(HSDetstr[3],"Restarts %d",ERec[detv].rescol);
+ sprintf(HSDetstr[4],"Semi-Collisions %d",ERec[detv].scoll);
+ sprintf(HSDetstr[5],"CLR Usage %d",ERec[detv].clrusg);
+ sprintf(HSDetstr[6],"Average FPS %d.%d",ERec[detv].af_int,ERec[detv].af_fric);
+ }
+ for (int i=1;i<=6;++i)
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
+ HSDetailGUI->EnableCtrl(i,false);
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
+ break;
+ case 2:
+ memset(HSDetstr,0,sizeof(HSDetstr));
+ if (!NRec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
+ else
+ {
+ sprintf(HSDetstr[1],"No. %d of Normal Mode",detv);
+ sprintf(HSDetstr[2],"Scored %lld by %s",NRec[detv].score,NRec[detv].name);
+ sprintf(HSDetstr[3],"Restarts %d",NRec[detv].rescol);
+ sprintf(HSDetstr[4],"Semi-Collisions %d",NRec[detv].scoll);
+ sprintf(HSDetstr[5],"CLR Usage %d",NRec[detv].clrusg);
+ sprintf(HSDetstr[6],"Average FPS %d.%d",NRec[detv].af_int,NRec[detv].af_fric);
+ }
+ for (int i=1;i<=6;++i)
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
+ HSDetailGUI->EnableCtrl(i,false);
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
+ break;
+ case 3:
+ memset(HSDetstr,0,sizeof(HSDetstr));
+ if (!ExRec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
+ else
+ {
+ sprintf(HSDetstr[1],"No. %d of Extreme Mode",detv);
+ sprintf(HSDetstr[2],"Scored %lld by %s",ExRec[detv].score,ExRec[detv].name);
+ sprintf(HSDetstr[3],"Restarts %d",ExRec[detv].rescol);
+ sprintf(HSDetstr[4],"Semi-Collisions %d",ExRec[detv].scoll);
+ sprintf(HSDetstr[5],"CLR Usage %d",ExRec[detv].clrusg);
+ sprintf(HSDetstr[6],"Average FPS %d.%d",ExRec[detv].af_int,ExRec[detv].af_fric);
+ }
+ for (int i=1;i<=6;++i)
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
+ HSDetailGUI->EnableCtrl(i,false);
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
+ break;
+ case 4:
+ memset(HSDetstr,0,sizeof(HSDetstr));
+ if (!FPMRec[detv].score)sprintf(HSDetstr[1],"Nothing here...");
+ else
+ {
+ sprintf(HSDetstr[1],"No. %d of Free Play Mode",detv);
+ sprintf(HSDetstr[2],"Scored %lld by %s",FPMRec[detv].score,FPMRec[detv].name);
+ sprintf(HSDetstr[3],"Collisions %d",FPMRec[detv].rescol);
+ sprintf(HSDetstr[4],"Semi-Collisions %d",FPMRec[detv].scoll);
+ sprintf(HSDetstr[5],"CLR Usage %d",FPMRec[detv].clrusg);
+ sprintf(HSDetstr[6],"Average FPS %d.%d",FPMRec[detv].af_int,FPMRec[detv].af_fric);
+ }
+ for (int i=1;i<=6;++i)
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(i,fnt,snd,400,170+30*i,0.1f*i-0.1f,HSDetstr[i])),
+ HSDetailGUI->EnableCtrl(i,false);
+ HSDetailGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Back"));
+ break;
+ }
+ HSDetailGUI->SetCursor(spr);
+ HSDetailGUI->SetNavMode(HGEGUI_UPDOWN);
+ HSDetailGUI->SetFocus(7);
+ HSDetailGUI->Enter();
+}
+void HSDetGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=HSDetailGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 7:Current_Position=9;HSDetailGUI->Leave();HSViewGUI->Enter();break;
+ }
+ }
+}
+void HSViewGUI_Init()
+{
+ Current_Position=9;
+ HSViewGUI=new hgeGUI();
+ switch (view)
+ {
+ case 1:
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Easy"));
+ for (int i=1;i<=Ecnt;++i)
+ {
+ sprintf(HSVstr[i],"%d. %s - %lld",i,ERec[i].name,ERec[i].score);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ for (int i=Ecnt+1;i<=5;++i)
+ {
+ sprintf(HSVstr[i],"%d. ----------",i);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ break;
+ case 2:
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Normal"));
+ for (int i=1;i<=Ncnt;++i)
+ {
+ sprintf(HSVstr[i],"%d. %s - %lld",i,NRec[i].name,NRec[i].score);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ for (int i=Ncnt+1;i<=5;++i)
+ {
+ sprintf(HSVstr[i],"%d. ----------",i);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ break;
+ case 3:
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Extreme"));
+ for (int i=1;i<=Excnt;++i)
+ {
+ sprintf(HSVstr[i],"%d. %s - %lld",i,ExRec[i].name,ExRec[i].score);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ for (int i=Excnt+1;i<=5;++i)
+ {
+ sprintf(HSVstr[i],"%d. ----------",i);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ break;
+ case 4:
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Highscore - Free Play Mode"));
+ for (int i=1;i<=FPMcnt;++i)
+ {
+ sprintf(HSVstr[i],"%d. %s - %lld",i,FPMRec[i].name,FPMRec[i].score);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ for (int i=FPMcnt+1;i<=5;++i)
+ {
+ sprintf(HSVstr[i],"%d. ----------",i);
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(i+1,fnt,snd,400,200+30*i,0.1f*i,HSVstr[i]));
+ }
+ break;
+ }
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(7,fnt,snd,400,380,0.6f,"Select one record to view details."));
+ HSViewGUI->AddCtrl(new hgeGUIMenuItem(8,fnt,snd,400,410,0.7f,"Back"));
+ HSViewGUI->EnableCtrl(1,false);HSViewGUI->EnableCtrl(7,false);
+ HSViewGUI->SetCursor(spr);
+ HSViewGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
+ HSViewGUI->SetFocus(2);
+ HSViewGUI->Enter();
+}
+void HSViewGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=HSViewGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 2:detv=1;HSDetGUI_Init();break;
+ case 3:detv=2;HSDetGUI_Init();break;
+ case 4:detv=3;HSDetGUI_Init();break;
+ case 5:detv=4;HSDetGUI_Init();break;
+ case 6:detv=5;HSDetGUI_Init();break;
+ case 8:Current_Position=8;HSViewGUI->Leave();if (!HighScoreGUI)HighScoreGUI_Init();HighScoreGUI->Enter();break;
+ }
+ }
+}
+void HighScoreGUI_Init()
+{
+ HighScoreGUI=new hgeGUI();
+ Current_Position=8;
+ HighScoreGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,350,200,0.0f,"View Highscores && Records for..."));
+ HighScoreGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Easy"));
+ HighScoreGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Normal"));
+ HighScoreGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Extreme"));
+ HighScoreGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Free Play Mode"));
+ HighScoreGUI->AddCtrl(new hgeGUIMenuItem(6,fnt,snd,400,400,0.5f,"Back"));
+ HighScoreGUI->EnableCtrl(1,false);
+ HighScoreGUI->SetCursor(spr);
+ HighScoreGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
+ HighScoreGUI->SetFocus(7);
+ HighScoreGUI->Enter();
+}
+void HighScoreGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=HighScoreGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 2:view=1;HSViewGUI_Init();break;
+ case 3:view=2;HSViewGUI_Init();break;
+ case 4:view=3;HSViewGUI_Init();break;
+ case 5:view=4;HSViewGUI_Init();break;
+ case 6:Current_Position=0;HighScoreGUI->Leave();gui->Enter();break;
+ }
+ }
+
+}
+void BkTTitleGUI_Init()
+{
+ BkTTitleGUI=new hgeGUI();
+ Current_Position=12;
+ BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Really?"));
+ BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,200,250,0.1f,"I've pressed the wrong key"));
+ BkTTitleGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,600,250,0.2f,"Do return to menu!"));
+ BkTTitleGUI->EnableCtrl(1,false);
+ BkTTitleGUI->SetCursor(spr);
+ BkTTitleGUI->SetNavMode(HGEGUI_LEFTRIGHT|HGEGUI_CYCLED);
+ BkTTitleGUI->SetFocus(2);
+ BkTTitleGUI->Enter();
+}
+void BkTTitleGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=BkTTitleGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 2:
+ BkTTitleGUI->Leave();
+ Current_Position=11;
+ PauseGUI_Init();
+ break;
+ case 3:
+ Current_Position=0;BkTTitleGUI->Leave();gui->Enter();
+ break;
+ }
+ }
+}
+void PauseGUI_Init()
+{
+ PauseGUI=new hgeGUI();
+ Current_Position=11;
+ DisableAllTower=DisablePlayer=true;
+ PauseGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,"Paused..."));
+ PauseGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,"Return to Game"));
+ PauseGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,"Return to Title"));
+ PauseGUI->EnableCtrl(1,false);
+ PauseGUI->SetCursor(spr);
+ PauseGUI->SetNavMode(HGEGUI_UPDOWN|HGEGUI_CYCLED);
+ PauseGUI->SetFocus(2);
+ PauseGUI->Enter();
+}
+void PauseGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=PauseGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 2:
+ PauseGUI->Leave();
+ Current_Position=1;
+ DisableAllTower=DisablePlayer=false;
+ break;
+ case 3:
+ BkTTitleGUI_Init();
+ break;
+ }
+ }
+}
+int AP_Update(int plrspd,int plrslospd,int clrbns)
+{
+ int res=0;
+ if (plrspd<=4)res+=plrspd*1200;else res+=5000;
+ switch (plrslospd)
+ {
+ case 1:res+=4000;break;
+ case 2:res+=3200;break;
+ case 3:res+=2000;break;
+ case 4:res+=1500;break;
+ case 5:res+=700;break;
+ }
+ switch (clrbns)
+ {
+ case 0:break;
+ case 1:res+=1500;break;
+ case 2:res+=2700;break;
+ case 3:res+=4000;break;
+ case 4:res+=5500;break;
+ }
+ return res;
+}
+void Options_Writeback()
+{
+ freopen("blr.cfg","w",stdout);
+ printf(";CBL");
+ printf("%c",fpslvl==1?1:0);
+ printf("%c",tfs?1:0);
+ printf("%c",fpslvl==2?1:0);
+ printf("%c",diffkey?1:0);
+ printf("%c%c%c",plrspd,plrslospd,clrbns);
+ fclose(stdout);
+}
+void OptionsGUI_Init()
+{
+ OptionsGUI=new hgeGUI();
+ Current_Position=13;
+ if (!tfs)
+ sprintf(opt[0],"Fullscreen: Off");
+ else
+ sprintf(opt[0],"Fullscreen: On");
+ OptionsGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,opt[0]));
+ switch (fpslvl)
+ {
+ case 0:sprintf(opt[1],"FPS Level: Natural");break;
+ case 1:sprintf(opt[1],"FPS Level: Low FPS");break;
+ case 2:sprintf(opt[1],"FPS Level: Highest");break;
+ }
+ OptionsGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,opt[1]));
+ if (diffkey)
+ sprintf(opt[2],"Use Key X for Clear Range");
+ else
+ sprintf(opt[2],"Use Key Z for Clear Range");
+ OptionsGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,opt[2]));
+ OptionsGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,"Player Profile"));
+ OptionsGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Save and Exit"));
+ OptionsGUI->SetNavMode(HGEGUI_UPDOWN);
+ OptionsGUI->SetCursor(spr);
+ OptionsGUI->SetFocus(1);
+ OptionsGUI->Enter();
+}
+void PlayerProfGUI_Init()
+{
+ PlayerProfGUI=new hgeGUI();
+ Current_Position=14;
+ sprintf(opt[3],"Moving Speed: -%d+",plrspd);
+ sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd);
+ sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(1,fnt,snd,400,200,0.0f,opt[3]));
+ PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(2,fnt,snd,400,240,0.1f,opt[4]));
+ PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(3,fnt,snd,400,280,0.2f,opt[5]));
+ PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(4,fnt,snd,400,320,0.3f,opt[6]));
+ PlayerProfGUI->AddCtrl(new hgeGUIMenuItem(5,fnt,snd,400,360,0.4f,"Back"));
+ PlayerProfGUI->SetNavMode(HGEGUI_UPDOWN);
+ PlayerProfGUI->SetCursor(spr);
+ PlayerProfGUI->SetFocus(1);
+ PlayerProfGUI->Enter();
+}
+void PlayerProfGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=PlayerProfGUI->Update(dt);
+ if (id==5&&AP_Update(plrspd,plrslospd,clrbns)<=10000)
+ {PlayerProfGUI->Leave();OptionsGUI_Init();}
+ if (hge->Input_GetKeyState(HGEK_LEFT))
+ {
+ if (!LOWFPS)++lastkeypressed;else lastkeypressed+=17;
+ if (lastkeypressed>=100)
+ {
+ switch (PlayerProfGUI->GetFocus())
+ {
+ case 1:
+ if (plrspd>1)--plrspd;
+ sprintf(opt[3],"Moving Speed: -%d+",plrspd);
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(1))->RePos(400,200);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
+ break;
+ case 2:
+ if (plrslospd>1)--plrslospd;
+ sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd);
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(2))->RePos(400,240);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
+ break;
+ case 3:
+ if (clrbns>0)--clrbns;
+ sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns);
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(3))->RePos(400,280);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
+ break;
+ }
+ lastkeypressed=0;
+ }
+ }
+ if (hge->Input_GetKeyState(HGEK_RIGHT))
+ {
+ if (!LOWFPS)++lastkeypressed;else lastkeypressed+=17;
+ if (lastkeypressed>=100)
+ {
+ switch (PlayerProfGUI->GetFocus())
+ {
+ case 1:
+ if (plrspd<5)++plrspd;
+ sprintf(opt[3],"Moving Speed: -%d+",plrspd);
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(1))->RePos(400,200);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
+ break;
+ case 2:
+ if (plrslospd<5)++plrslospd;
+ sprintf(opt[4],"Precise Moving Speed: -%d+",plrslospd);
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(2))->RePos(400,240);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
+ break;
+ case 3:
+ if (clrbns<4)++clrbns;
+ sprintf(opt[5],"Clear Range Bonus: -%d+",clrbns);
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(3))->RePos(400,280);
+ sprintf(opt[6],"Ability Point %d/10000",AP_Update(plrspd,plrslospd,clrbns));
+ ((hgeGUIMenuItem*)PlayerProfGUI->GetCtrl(4))->RePos(400,320);
+ break;
+ }
+ lastkeypressed=0;
+ }
+ }
+}
+void OptionsGUI_FrameFnk()
+{
+ float dt=hge->Timer_GetDelta();
+ int id=OptionsGUI->Update(dt);
+ if (id)
+ {
+ switch (id)
+ {
+ case 1:
+ tfs=!tfs;
+ if (!tfs)
+ sprintf(opt[0],"Fullscreen: Off");
+ else
+ sprintf(opt[0],"Fullscreen: On");
+ ((hgeGUIMenuItem*)OptionsGUI->GetCtrl(1))->RePos(400,200);
+ break;
+ case 2:
+ switch (fpslvl)
+ {
+ case 0:
+ fpslvl=1;LOWFPS=true;
+ hge->System_SetState(HGE_FPS,61);
+ break;
+ case 1:
+ fpslvl=2;LOWFPS=false;
+ hge->System_SetState(HGE_FPS,1000);
+ break;
+ case 2:
+ fpslvl=0;LOWFPS=false;
+ hge->System_SetState(HGE_FPS,0);
+ break;
+ }
+ switch (fpslvl)
+ {
+ case 0:sprintf(opt[1],"FPS Level: Natural");break;
+ case 1:sprintf(opt[1],"FPS Level: Low FPS");break;
+ case 2:sprintf(opt[1],"FPS Level: Highest");break;
+ }
+ ((hgeGUIMenuItem*)OptionsGUI->GetCtrl(2))->RePos(400,240);
+ break;
+ case 3:
+ diffkey=!diffkey;
+ if (diffkey)
+ sprintf(opt[2],"Use Key X for Clear Range");
+ else
+ sprintf(opt[2],"Use Key Z for Clear Range");
+ ((hgeGUIMenuItem*)OptionsGUI->GetCtrl(3))->RePos(400,280);
+ break;
+ case 4:
+ PlayerProfGUI_Init();
+ break;
+ case 5:
+ Options_Writeback();
+ OptionsGUI->Leave();
+ gui->Enter();
+ Current_Position=0;
+ break;
+ }
+ }
+}
diff --git a/archive/blr1/src/scorec.h b/archive/blr1/src/scorec.h
new file mode 100644
index 0000000..d07615a
--- /dev/null
+++ b/archive/blr1/src/scorec.h
@@ -0,0 +1,252 @@
+//Chrisoft Bullet Lab Remix HGE
+//Score Recording Implementations
+//"Copyleft" Chrisoft 2013
+struct TRecord
+{
+ long long score;
+ int len,rescol,scoll,clrusg;
+ int af_int,af_fric;
+ char name[16];
+}ERec[10],NRec[10],ExRec[10],FPMRec[10];
+unsigned int Ecnt,Ncnt,Excnt,FPMcnt;
+unsigned int header,seprt;
+char newname[16];
+int newlen,tbframebrk;
+unsigned int Getuint()
+{
+ unsigned int c1,c2,c3,c4,res;
+ c1=c2=c3=c4=0;
+ scanf("%c%c%c%c",&c1,&c2,&c3,&c4);
+ res=(c1<<24)+(c2<<16)+(c3<<8)+c4;
+ return res;
+}
+int Getint()
+{
+ return (int)Getuint();
+}
+long long Getll()
+{
+ long long c1,c2,c3,c4,c5,c6,c7,c8,res;
+ c1=c2=c3=c4=c5=c6=c7=c8=0;
+ scanf("%c%c%c%c%c%c%c%c",&c1,&c2,&c3,&c4,&c5,&c6,&c7,&c8);
+ res=(c1<<56)+(c2<<48)+(c3<<40)+(c4<<32)+(c5<<24)+(c6<<16)+(c7<<8)+c8;
+ return res;
+}
+void Putuint(unsigned int a)
+{
+ unsigned int c1,c2,c3,c4;
+ c1=a&0xFF000000;c2=a&0x00FF0000;
+ c3=a&0x0000FF00;c4=a&0x000000FF;
+ printf("%c%c%c%c",c1,c2,c3,c4);
+}
+void Putint(int a)
+{
+ Putuint((unsigned int)a);
+}
+void Putll(long long a)
+{
+ int c1,c2,c3,c4,c5,c6,c7,c8;
+ c1=a&0xFF00000000000000;
+ c2=a&0x00FF000000000000;
+ c3=a&0x0000FF0000000000;
+ c4=a&0x000000FF00000000;
+ c5=a&0x00000000FF000000;
+ c6=a&0x0000000000FF0000;
+ c7=a&0x000000000000FF00;
+ c8=a&0x00000000000000FF;
+ printf("%c%c%c%c%c%c%c%c",c1,c2,c3,c4,c5,c6,c7,c8);
+}
+TRecord GetTRecord()
+{
+ TRecord res;
+ res.len=Getint();
+ memset(res.name,0,sizeof(res.name));
+ for (int i=0;i<res.len;++i)scanf("%c",&res.name[i]);
+ res.score=Getll();
+ res.rescol=Getint();
+ res.scoll=Getint();
+ res.clrusg=Getint();
+ res.af_int=Getint();res.af_fric=Getint();
+ return res;
+}
+void PutTRecord(TRecord a)
+{
+ Putint(a.len);
+ for (int i=0;i<a.len;++i)printf("%c",a.name[i]);
+ Putll(a.score);
+ Putint(a.rescol);
+ Putint(a.scoll);
+ Putint(a.clrusg);
+ Putint(a.af_int);Putint(a.af_fric);
+}
+void Score_Init()
+{
+ freopen("score.cfg","r",stdin);
+ header=Getuint();
+ if (header!=0x3b424c53)//0x3b424c53=";BLS"
+ {
+ fclose(stdin);
+ Error("Error when loading score file!");
+ }
+ seprt=Getuint();
+ if (seprt!=0xd1ffa0c0)
+ {
+ fclose(stdin);
+ Error("Error when loading score file!");
+ }
+ Ecnt=Getuint();
+ for (unsigned int i=1;i<=Ecnt;++i)ERec[i]=GetTRecord();
+ seprt=Getuint();
+ if (seprt!=0xd1ffa0c1)
+ {
+ fclose(stdin);
+ Error("Error when loading score file!");
+ }
+ Ncnt=Getuint();
+ for (unsigned int i=1;i<=Ncnt;++i)NRec[i]=GetTRecord();
+ seprt=Getuint();
+ if (seprt!=0xd1ffa0c2)
+ {
+ fclose(stdin);
+ Error("Error when loading score file!");
+ }
+ Excnt=Getuint();
+ for (unsigned int i=1;i<=Excnt;++i)ExRec[i]=GetTRecord();
+ seprt=Getuint();
+ if (seprt!=0xd1ffa0c3)
+ {
+ fclose(stdin);
+ Error("Error when loading score file!");
+ }
+ FPMcnt=Getuint();
+ for (unsigned int i=1;i<=FPMcnt;++i)FPMRec[i]=GetTRecord();
+ fclose(stdin);
+}
+int CheckHighScore()
+{
+ int i;
+ switch (mode)
+ {
+ case 4:
+ for (i=1;i<=Ecnt;++i)
+ if (ERec[i].score<score)break;
+ if (i==5&&ERec[i].score>score)return -1;
+ if (Ecnt<5&&ERec[Ecnt].score>score)return Ecnt+1;
+ return i;
+ break;
+ case 1:
+ for (i=1;i<=Ncnt;++i)
+ if (NRec[i].score<score)break;
+ if (i==5&&NRec[i].score>score)return -1;
+ if (Ncnt<5&&NRec[Ncnt].score>score)return Ncnt+1;
+ return i;
+ break;
+ case 2:
+ for (i=1;i<=Excnt;++i)
+ if (ExRec[i].score<score)break;
+ if (i==5&&ExRec[i].score>score)return -1;
+ if (Excnt<5&&ExRec[Ncnt].score>score)return Excnt+1;
+ return i;
+ break;
+ case 3:
+ for (i=1;i<=FPMcnt;++i)
+ if (FPMRec[i].score<score)break;
+ if (i==5&&FPMRec[i].score>score)return -1;
+ if (FPMcnt<5&&FPMRec[Ncnt].score>score)return FPMcnt+1;
+ return i;
+ break;
+ }
+}
+void Score_Write()
+{
+ freopen("score.cfg","w",stdout);
+ Putuint(0x3b424c53u);
+ Putuint(0xd1ffa0c0u);
+ Putint(Ecnt);
+ for (int i=1;i<=Ecnt;++i)
+ PutTRecord(ERec[i]);
+ Putuint(0xd1ffa0c1u);
+ Putint(Ncnt);
+ for (int i=1;i<=Ncnt;++i)
+ PutTRecord(NRec[i]);
+ Putuint(0xd1ffa0c2u);
+ Putint(Excnt);
+ for (int i=1;i<=Excnt;++i)
+ PutTRecord(ExRec[i]);
+ Putuint(0xd1ffa0c3u);
+ Putint(FPMcnt);
+ for (int i=1;i<=FPMcnt;++i)
+ PutTRecord(FPMRec[i]);
+ fclose(stdout);
+}
+void Score_Initailize()
+{
+ freopen("score.cfg","w",stdout);
+ printf(";BLS");
+ printf("%c%c%c%c",0xd1,0xff,0xa0,0xc0);printf("%c%c%c%c",0,0,0,0);
+ printf("%c%c%c%c",0xd1,0xff,0xa0,0xc1);printf("%c%c%c%c",0,0,0,0);
+ printf("%c%c%c%c",0xd1,0xff,0xa0,0xc2);printf("%c%c%c%c",0,0,0,0);
+ printf("%c%c%c%c",0xd1,0xff,0xa0,0xc3);printf("%c%c%c%c",0,0,0,0);
+ fclose(stdout);
+}
+void InsertHighScore()
+{
+ int pos=CheckHighScore();
+ switch (mode)
+ {
+ case 4:
+ if (pos<=Ecnt)
+ for (int i=5;i>pos;--i)
+ ERec[i]=ERec[i-1];
+ else ++Ecnt;
+ if (Ecnt<5)++Ecnt;
+ ERec[pos].score=score;
+ ERec[pos].len=newlen;
+ memcpy(ERec[pos].name,newname,sizeof(newname));
+ ERec[pos].clrusg=clrusg;
+ ERec[pos].rescol=restarts;ERec[pos].scoll=semicoll;
+ ERec[pos].af_int=(int)averfps;
+ ERec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10;
+ break;
+ case 1:
+ if (pos<=Ncnt)
+ for (int i=5;i>pos;--i)
+ NRec[i]=NRec[i-1];
+ if (Ncnt<5)++Ncnt;
+ NRec[pos].score=score;
+ NRec[pos].len=newlen;
+ memcpy(NRec[pos].name,newname,sizeof(newname));
+ NRec[pos].clrusg=clrusg;
+ NRec[pos].rescol=restarts;NRec[pos].scoll=semicoll;
+ NRec[pos].af_int=(int)averfps;
+ NRec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10;
+ break;
+ case 2:
+ if (pos<=Excnt)
+ for (int i=5;i>pos;--i)
+ ExRec[i]=ExRec[i-1];
+ if (Excnt<5)++Excnt;
+ ExRec[pos].score=score;
+ ExRec[pos].len=newlen;
+ memcpy(ExRec[pos].name,newname,sizeof(newname));
+ ExRec[pos].clrusg=clrusg;
+ ExRec[pos].rescol=restarts;ExRec[pos].scoll=semicoll;
+ ExRec[pos].af_int=(int)averfps;
+ ExRec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10;
+ break;
+ case 3:
+ if (pos<=FPMcnt)
+ for (int i=5;i>pos;--i)
+ FPMRec[i]=FPMRec[i-1];
+ if (FPMcnt<5)++FPMcnt;
+ FPMRec[pos].score=score;
+ FPMRec[pos].len=newlen;
+ memcpy(FPMRec[pos].name,newname,sizeof(newname));
+ FPMRec[pos].clrusg=clrusg;
+ FPMRec[pos].rescol=coll;FPMRec[pos].scoll=semicoll;
+ FPMRec[pos].af_int=(int)averfps;
+ FPMRec[pos].af_fric=(int)(averfps*10)%10*10+(int)(averfps*100)%10;
+ break;
+ }
+ Score_Write();
+} \ No newline at end of file
diff --git a/archive/blr1/src/towernbullet.h b/archive/blr1/src/towernbullet.h
new file mode 100644
index 0000000..6cae63d
--- /dev/null
+++ b/archive/blr1/src/towernbullet.h
@@ -0,0 +1,983 @@
+//Chrisoft Bullet Lab Remix HGE
+//Towers and Bullets Implementations
+//"Copyleft" Chrisoft 2013
+//WANTED:
+//Human-being which really knows what these mean, please contact Chirsno which is puzzled by these shitty codes..
+#include "effects.h"
+int CreateBullet1(double x,double y,double bs,bool eff=false)
+{
+ ++shots;
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=1;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=x-playerpos.x;
+ bullet[i].bulletdir.y=y-playerpos.y;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=bs;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,23,0,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ bullet[i].scollable=true;
+ bullet[i].scale=1;
+ bullet[i].bulletspr->SetHotSpot(12,12);
+ if (eff)BulletEffect_Attatch(i);
+ return i;
+}
+void CreateBullet2(double x,double y,double bs,double rad,bool eff=false)
+{
+ ++shots;
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=2;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=cos(rad);
+ bullet[i].bulletdir.y=sin(rad);
+ bullet[i].bulletspeed=bs;
+ bullet[i].lifetime=0;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,0,0,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ bullet[i].scollable=true;
+ bullet[i].scale=1;
+ bullet[i].bulletspr->SetHotSpot(12,12);
+ if (eff)BulletEffect_Attatch(i);
+}
+void CreateBullet3(double x,double y,double bs,int dir,bool eff=false)
+{
+ CreateBullet2(x,y,bs,dir*0.5235987756,eff);
+}
+void CreateBullet4(double x,double y,double bs,int yelbrk=0,bool eff=false)
+{
+ ++shots;
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=4;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=x-playerpos.x;
+ bullet[i].bulletdir.y=y-playerpos.y;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=bs;
+ bullet[i].yelbrk=yelbrk;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,0,46,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ bullet[i].scollable=true;
+ bullet[i].scale=1;
+ bullet[i].bulletspr->SetHotSpot(12,12);
+ if (eff)BulletEffect_Attatch(i);
+}
+void CreateBullet5(double x,double y,double bs,bool eff=false)
+{
+ ++shots;
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=5;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=x-playerpos.x;
+ bullet[i].bulletdir.y=y-playerpos.y;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=bs;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,0,23,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ bullet[i].scollable=true;
+ bullet[i].scale=1;
+ bullet[i].bulletspr->SetHotSpot(12,12);
+ if (eff)BulletEffect_Attatch(i);
+}
+int CreateBullet6(double x,double y,double bs,int explo,bool eff=false)
+{
+ ++shots;
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=6;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=rand()%100-50;
+ bullet[i].bulletdir.y=rand()%100-50;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=bs;
+ bullet[i].oriexplo=bullet[i].redexplo=explo;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,23,23,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ bullet[i].scollable=true;
+ bullet[i].scale=1;
+ bullet[i].bulletspr->SetHotSpot(12,12);
+ if (eff)BulletEffect_Attatch(i);
+ return i;
+}
+int CreateBullet7(double x,double y,double bs,int explo,bool eff=false)
+{
+ ++shots;
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=7;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=rand()%100-50;
+ bullet[i].bulletdir.y=rand()%100-50;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=bs;
+ bullet[i].oriexplo=bullet[i].redexplo=explo;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,46,23,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+ bullet[i].redattrib=0;
+ bullet[i].whirem=whicnt;
+ bullet[i].whiskp=0;
+ bullet[i].scollable=true;
+ bullet[i].scale=1;
+ bullet[i].bulletspr->SetHotSpot(12,12);
+ if (eff)BulletEffect_Attatch(i);
+ return i;
+}
+void CreateBullet255(double x,double y,double bs)
+{
+ int i;
+ if (bulcnt==0)
+ bulcnt=i=1;
+ else
+ {
+ for (i=1;i<=bulcnt;++i)
+ if (!bullet[i].exist)break;
+ if (i>bulcnt)bulcnt=i;
+ }
+ bullet[i].exist=true;
+ bullet[i].bullettype=255;
+ bullet[i].bulletpos.x=x;
+ bullet[i].bulletpos.y=y;
+ bullet[i].bulletdir.x=x-playerpos.x;
+ bullet[i].bulletdir.y=y-playerpos.y;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ bullet[i].bulletspeed=bs;
+ bullet[i].bulletspr=new hgeSprite(SprSheet1,46,0,24,24);
+ bullet[i].bulletspr->SetColor(0x80FFFFFF);
+}
+void ProcessBullet1()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=1)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ }
+ BulletEffect_Process(i);
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ if (dis<=6)++coll,scminus+=10000;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+ if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
+ }
+ }
+}
+void ProcessBullet2()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=2)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (LOWFPS)bullet[i].lifetime+=17;else ++bullet[i].lifetime;
+ if (bullet[i].lifetime>=15000&&Refliction)
+ {
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ continue;
+ }
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y)/20;//Process bullet's y coor.
+ }
+ }
+ BulletEffect_Process(i);
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ {
+ if (Refliction)
+ bullet[i].bulletdir.x=-bullet[i].bulletdir.x,
+ bullet[i].bulletdir.y=-bullet[i].bulletdir.y;
+ else
+ {
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ continue;
+ }
+ }
+ if (dis<=6)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ ++coll,scminus+=10000;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ continue;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+ if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
+ }
+ }
+}
+//There is no need for ProcessBullet3() because they are in fact bullet2
+void ProcessBullet4()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=4)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ bullet[i].whirem+=17;
+ else
+ ++bullet[i].whirem;
+ if ((yelattrib&&bullet[i].whirem>=bullet[i].yelbrk)||!yelattrib)
+ {
+ bullet[i].whirem=0;
+ bullet[i].bulletdir.x=bullet[i].bulletpos.x-playerpos.x;
+ bullet[i].bulletdir.y=bullet[i].bulletpos.y-playerpos.y;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ }
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ //bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ //bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ BulletEffect_Process(i);
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ if (dis<=6)++coll,scminus+=10000;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+ if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
+ }
+ }
+}
+void ProcessBullet5()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=5)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ //bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ //bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ BulletEffect_Process(i);
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ if (dis<=6)playerspeed*=0.9,playerslospeed*=0.9;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+ }
+ }
+}
+void ProcessBullet6()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=6)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ //bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ //bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ BulletEffect_Process(i);
+ if (!LOWFPS)
+ {
+ if (bullet[i].redattrib==0)
+ --bullet[i].redexplo;
+ else
+ bullet[i].redexplo-=2;
+ }
+ else
+ {
+ if (bullet[i].redattrib==0)
+ bullet[i].redexplo-=17;
+ else
+ bullet[i].redexplo-=34;
+ }
+ if (bullet[i].redexplo<=0&&!DisableAllTower)
+ {
+ if (bullet[i].redattrib==0)
+ {
+ for (int j=1;j<=8;++j)
+ {
+ int pnt=CreateBullet6(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,bullet[i].oriexplo);
+ //hge->Effect_PlayEx(snd,100,(bullet[i].bulletpos.x-400)/4);
+ bullet[pnt].bulletdir.x=cos(j*0.785398);
+ bullet[pnt].bulletdir.y=sin(j*0.785398);
+ bullet[pnt].dist=bullet[pnt].bulletdir.x*bullet[pnt].bulletdir.x+bullet[pnt].bulletdir.y*bullet[pnt].bulletdir.y;
+ bullet[pnt].dist=sqrt(bullet[pnt].dist);
+ bullet[pnt].redattrib=1;
+ }
+ }
+ else
+ {
+ for (int j=1;j<=12;++j)
+ CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,j*0.5236+clockrot);
+ clockrot+=deltarot;
+ deltarot+=0.004363322313;
+ }
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ if (dis<=6)++coll,scminus+=10000;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+ if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
+ }
+ }
+}
+void ProcessBullet7()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=7)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bsscale*bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ //bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ //bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ BulletEffect_Process(i);
+ if (!LOWFPS)
+ {
+ if (bullet[i].redattrib==0)
+ --bullet[i].redexplo;
+ else
+ bullet[i].redexplo-=3;
+ }
+ else
+ {
+ if (bullet[i].redattrib==0)
+ bullet[i].redexplo-=17;
+ else
+ bullet[i].redexplo-=51;
+ }
+ if (bullet[i].redexplo<=0&&!DisableAllTower)
+ {
+ if (bullet[i].redattrib==0)
+ {
+ int pnt=CreateBullet7(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,bullet[i].oriexplo);
+ //hge->Effect_PlayEx(snd,100,(bullet[i].bulletpos.x-400)/4);
+ bullet[pnt].bulletdir.x=0;
+ bullet[pnt].bulletdir.y=0;
+ bullet[pnt].dist=1;
+ bullet[pnt].redattrib=1;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ if (!LOWFPS)
+ ++bullet[i].whiskp;
+ else
+ bullet[i].whiskp+=17;
+ if (bullet[i].whiskp>50)
+ {
+ for (int j=1;j<=12;++j)
+ CreateBullet2(bullet[i].bulletpos.x,bullet[i].bulletpos.y,bullet[i].bulletspeed,j*0.5236+whirot);
+ whirot+=dwhirot;
+ dwhirot+=0.004363322313;
+ bullet[i].whiskp=0;
+ --bullet[i].whirem;
+ }
+ if (bullet[i].whirem<=0)
+ {
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ }
+ }
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ if (dis<=6)++coll,scminus+=10000;
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x+7.2,bullet[i].bulletpos.y+7.2,0,0.6*bullet[i].scale,0);
+ if (dis<=16&&bullet[i].scollable)++semicoll,++dsmc,bullet[i].scollable=false,SCEffect_Attatch();
+ }
+ }
+}
+void ProcessBullet255()
+{
+ for (int i=1;i<=bulcnt;++i)
+ {
+ if (!bullet[i].exist||bullet[i].bullettype!=255)continue;//If this bullet doesn't exist or is not of this type, do not render it.
+ if (!DisablePlayer)
+ {
+ bullet[i].bulletdir.x=bullet[i].bulletpos.x-playerpos.x;
+ bullet[i].bulletdir.y=bullet[i].bulletpos.y-playerpos.y;
+ bullet[i].dist=bullet[i].bulletdir.x*bullet[i].bulletdir.x+bullet[i].bulletdir.y*bullet[i].bulletdir.y;
+ bullet[i].dist=sqrt(bullet[i].dist);
+ if (LOWFPS)
+ {
+ bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20*17;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20*17;//Process bullet's y coor.
+ }
+ else
+ {
+ bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ //bullet[i].bulletpos.x-=bullet[i].bulletspeed*(bullet[i].bulletdir.x/bullet[i].dist)/20;//Process bullet's x coor.
+ //bullet[i].bulletpos.y-=bullet[i].bulletspeed*(bullet[i].bulletdir.y/bullet[i].dist)/20;//Process bullet's y coor.
+ }
+ double dis=GetDist(bullet[i].bulletpos,playerpos);//Get distance between player and bullet
+ if (dis<=6||bullet[i].bulletpos.x<=-10||bullet[i].bulletpos.x>=800||bullet[i].bulletpos.y<=-10||bullet[i].bulletpos.y>=600)
+ //If collision is detected or the bullet flys out of screen, delete it.
+ {
+ bullet[i].exist=false;
+ bullet[i].bulletpos.x=bullet[i].bulletpos.y=0;
+ bullet[i].bulletdir.x=bullet[i].bulletdir.y=0;
+ bullet[i].dist=0;
+ bullet[i].bullettype=0;
+ }
+ else
+ {
+ bullet[i].bulletspr->RenderEx(bullet[i].bulletpos.x,bullet[i].bulletpos.y,0,0.5,0);
+ }
+ }
+}
+int CreateTower1(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
+ {
+ return i;
+ }
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=1;
+ tower[i].bulletspeed=bs;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,44,0,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].effect=eff;
+ return i;
+}
+int CreateTower2(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)return i;
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=2;
+ tower[i].bulletspeed=bs;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,0,0,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].effect=eff;
+ return i;
+}
+int CreateTower3(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)return i;
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=3;
+ tower[i].bulletspeed=bs;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,0,0,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].effect=eff;
+ return i;
+}
+int CreateTower4(double x,double y,int timer,double bs,int yelbrk=0,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
+ {
+ return i;
+ }
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=4;
+ tower[i].bulletspeed=bs;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,88,44,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].yelbrk=yelbrk;
+ tower[i].effect=eff;
+ return i;
+}
+int CreateTower5(double x,double y,int timer,double bs,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
+ {
+ return i;
+ }
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=5;
+ tower[i].bulletspeed=bs;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,88,0,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].effect=eff;
+ return i;
+}
+int CreateTower6(double x,double y,int timer,double bs,int redexplo,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
+ {
+ return i;
+ }
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=6;
+ tower[i].bulletspeed=bs;
+ tower[i].redexplo=redexplo;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,0,44,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].effect=eff;
+ return i;
+}
+int CreateTower7(double x,double y,int timer,double bs,int redexplo,bool eff=false)//This returns the created tower number.
+{
+ int i;
+ if (towcnt==0)
+ towcnt=i=1;
+ else
+ {
+ for (i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist)break;
+ if (abs(tower[i].towerpos.x-x)<=zero&&abs(tower[i].towerpos.y-y)<=zero)
+ {
+ return i;
+ }
+ }
+ if (i>towcnt)
+ towcnt=i;
+ }
+ tower[i].exist=true;
+ tower[i].towertype=7;
+ tower[i].bulletspeed=bs;
+ tower[i].redexplo=redexplo;
+ tower[i].towertimer=tower[i].curtimer=timer;
+ tower[i].towerpos.x=x,tower[i].towerpos.y=y;
+ tower[i].towerspr=new hgeSprite(SprSheet2,44,44,44,44);
+ tower[i].towerspr->SetHotSpot(22,22);
+ tower[i].towerspr->SetColor(0x80FFFFFF);
+ tower[i].whicnt=whicnt;
+ tower[i].effect=eff;
+ return i;
+}
+void ProcessTower1()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=1)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ tower[i].curtimer=tower[i].towertimer;
+ CreateBullet1(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].effect);
+ }
+ }
+}
+void ProcessTower2()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=2)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ tower[i].curtimer=tower[i].towertimer;
+ for (int j=1;j<=12;++j)
+ CreateBullet2(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,j*0.5236+clockrot,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ clockrot+=deltarot;
+ //deltarot+=0.004363322313;
+ deltarot+=deltadelta;
+ }
+ }
+}
+void ProcessTower3()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=3)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ tower[i].curtimer=tower[i].towertimer;
+ if (tower[i].t3t==0)
+ for (int j=1;j<=12;++j)
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,j,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ if (tower[i].t3t==1)
+ {
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,12,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,3,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,6,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,9,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ if (tower[i].t3t==2)
+ {
+ if (rand()%2==0)
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,12,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ else
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,6,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ if (tower[i].t3t==3)
+ {
+ if (rand()%2==0)
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,3,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ else
+ CreateBullet3(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,9,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ }
+ }
+}
+void ProcessTower4()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=4)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ tower[i].curtimer=tower[i].towertimer;
+ CreateBullet4(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].yelbrk,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ }
+}
+void ProcessTower5()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=5)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ tower[i].curtimer=tower[i].towertimer;
+ CreateBullet5(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ }
+}
+void ProcessTower6()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=6)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ tower[i].curtimer=tower[i].towertimer;
+ CreateBullet6(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].redexplo,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ }
+}
+void ProcessTower7()
+{
+ for (int i=1;i<=towcnt;++i)
+ {
+ if (!tower[i].exist||tower[i].towertype!=7)continue;
+ tower[i].towerspr->RenderEx(tower[i].towerpos.x+7.2,tower[i].towerpos.y+7.2,0,0.545);
+ if (DisableAllTower)continue;
+ if (LOWFPS)
+ tower[i].curtimer-=17;
+ else
+ --tower[i].curtimer;
+ if (tower[i].curtimer<=0)
+ {
+ tower[i].curtimer=tower[i].towertimer;
+ CreateBullet7(tower[i].towerpos.x,tower[i].towerpos.y,tower[i].bulletspeed,tower[i].redexplo,tower[i].effect);
+ //hge->Effect_PlayEx(snd,100,(tower[i].towerpos.x-400)/4);
+ }
+ }
+}
diff --git a/archive/blr2/COPYING b/archive/blr2/COPYING
new file mode 100644
index 0000000..bf98efc
--- /dev/null
+++ b/archive/blr2/COPYING
@@ -0,0 +1,51 @@
+BLRII itself distributes under the terms of the BSD license.
+Varieties of hge-unix and hge included in the source code distribution are still zlib-licensed.
+Here's the text of the BSD license and the zlib license.
+==============================================================================================
+Copyright (c) 2014, Chris Xiong
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+ * Redistributions of source code must retain the above copyright
+ notice, this list of conditions and the following disclaimer.
+ * Redistributions in binary form must reproduce the above copyright
+ notice, this list of conditions and the following disclaimer in the
+ documentation and/or other materials provided with the distribution.
+ * Neither the name of "Chrisoft" nor the names of its contributors may
+ be used to endorse or promote products derived from this software
+ without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
+WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL CHRIS XIONG BE LIABLE FOR ANY
+DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
+(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
+LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+==============================================================================================
+Copyright (c) 2003-2008 Relish Games
+ 2011 Ryan C. Gordon
+ 2013-2014 Chris Xiong
+
+
+This software is provided 'as-is', without any express or implied warranty.
+In no event will the authors be held liable for any damages arising from
+the use of this software.
+
+Permission is granted to anyone to use this software for any purpose,
+including commercial applications, and to alter it and redistribute it
+freely, subject to the following restrictions:
+
+1. The origin of this software must not be misrepresented; you must not
+ claim that you wrote the original software. If you use this software
+ in a product, an acknowledgment in the product documentation would be
+ appreciated but is not required.
+
+2. Altered source versions must be plainly marked as such, and must not
+ be misrepresented as being the original software.
+
+3. This notice may not be removed or altered from any source distribution.
diff --git a/archive/blr2/ChangeLog b/archive/blr2/ChangeLog
new file mode 100755
index 0000000..cbd158e
--- /dev/null
+++ b/archive/blr2/ChangeLog
@@ -0,0 +1,728 @@
+===================================================================
+Next version:
+The final release is just there!!
+Todo's:
+Bug fixes.
+Tests.
+
+Known bugs:
+Blue bullets appearing in Vortex of leaves.//don't know why...
+
+Wishlist: <-strikethrough
+~~Now Playing(Music Room)~~
+~~BLR script virtual machine~~(Now working for BLR3)
+
+Releases:
+
+1.0.0-0 (r101)
+Fix a bug in the hgeft library, and try git...
+
+1.0.0-0 (r100)
+Rev. 100!!!
+This is the final release.
+No more major changes will be made.
+Further changes of BLR2 will only be bug fixes (BGM addition
+excluded).
+
+Changes:
+Fix screenshot excluding the info panel.
+Make Lv-2P4 harder (reporter: BLumia).
+If it is the first time you start BLR in Windows, resolution in
+the options menu will be "?". Fixed now.
+Fixed a critical bug in scorec.h.
+
+Pre-Released versions:
+
+0.9.9-0 (r99)
+Rev. 99! WTF?
+THIS IS THE FINAL RELEASE CANDIDATE!!!
+Everything is frozen, that means no more new features will be
+added and no big changes will be made after this revision. Only
+bug fixes will be provided.
+//Again, "frozen" is a term borrowed from the Debian project and
+//is completely unrelated to Cirno!
+
+Tweak bullet9, shrink its removal border.
+Change Multpo texture, add spawning effect.
+Fix stubbed rankings.
+Update sprite sheet.
+Store assessment total elapsed time in the score file. Score
+files from older revisions shouldn't cause any errors but you may
+get "Time elapsed 0.00" in highscore details. If you've got any
+sort of OCD (Obsessive-compulsive disorder), just remove it.
+Document!!!
+
+0.9.8-0 (r98)
+Dear Pre-Release Candidate version(RC-0).
+
+CLR will collect multiplier +1's in range now.
+Multiplier +1's caught by player won't disappear now.
+Add/Move background transitions.
+Add volume control to options. This make the configuration file
+not compatible with older versions. Just delete it!
+Modify hge's API so that it can handle real volume and pan values.
+Volume value varys from 0 to 1, pan value varys from -1 to 1.
+Document...
+
+0.9.7-0 (r97)
+Fix: small semi-coll bullets are collected by clr...
+Add Multpo's for Level 7/-1.
+Do slight changes to level -1...
+Distribute CLRs for level 1~-1.
+
+0.9.6-0 (r96)
+Fix bug that cause you unable to charge if you try to use clr directly
+after your clr's used up.
+Add Multpo's for Level 3/4/5/6, and level 7 partically.
+Fix stupid bug in Level4Part2 and other similiar parts.
+Fix several bugs in level 5/6.
+Reduce given-away score in level "Sine Wave". It wassssSssss too long!
+Fix typo...
+Blinking HangUpText *should* be fixed now...
+
+0.9.5-0 (r95)
+Change configuration and score file names. Files with their names
+begin with "." may be annoying in Windows though...
+If we find a score file during first start up, assume it's valid and
+don't overwrite it.
+Fix the problem that in-game music won't be resumed when back from pause.
+Fix the problem that Multpo's won't be removed if a new game is created.
+Fix the problem that the first tip is not shown correctly if the game
+is restarted.
+(Probably) fixed the problem that the sound is played out of game.
+Prevent Multpo's from "escaping". This happens when fps is extremely low...
+Adding Multpo for Level2.
+Update CanonTechno.
+
+0.9.2-0 (r94)
+Mod, mod, mod...!
+Assessment mode is mostly frozen now.
+I'll make a pre-release at r99 and that revision will be set to
+0.9.9-0.
+Write the document... That's really tiring.
+
+~~0.9.1-4 (r94)~~
+Ooooooooops... I've forgotten to commit this one!
+So this is merged to the revision above, actually.
+=================================================================================
+Modify a couple of levels. (Making them easier...)
+Fix about scene text rendering out of the window.
+(Probably) fixed Level3Part3 by making them temporarily invulnerable...
+Are we bug-free now?
+
+0.9.1-4 (r93)
+Picking it up after almost one month... I'm now lost in my code...
+---------------------------------------------------------------------------------
+Add player position display into debug display.
+Rewrite pinball, adding collision between the balls...
+The collision code is based on Kollision (a game included in KDE SC).
+
+0.9.1-3 (r92)
+I installed Archlinux alongside Debian recently. Now we officially support
+Archlinux and Debian.
+Archlinux doesn't eat my CPU or try to destroy it... So further development will
+be made mainly under archlinux...
+---------------------------------------------------------------------------------
+Content freeze -- nothing will be added or removed any more (music etc excluded).
+Fix build failure in Archlinux.
+Fix font issue in Archlinux.
+realloc may change the base address... That's the cause of the crashes...
+--now removing all Bullet* based implementations.
+Affected parts:
+Assessment: Constant patterns, pinball
+All parts in level 2.
+L4P2, and more
+L5P5~6
+L-1P17
+L-1P19
+L3P3
+L7P12
+L7P14
+L7P25
+Avoid memory leaks... I don't know if they have been really fixed...
+
+0.9.1-2 (r91)
+Add built-in help.
+Now the pause menu should be fixed...
+Compress resources again.
+
+0.9.1-1 (r90)
+Fix a bug in the credit scene.
+Now the pause menu shouldn't be broken now...(It's so hard to reproduce
+that I have to assume it *has* been fixed.(IT STILL HAPPENS!!!)
+Close the "infinity CLR" "bug".
+(Huge) Code cleanup, mainly removing duplicate code.
+Allocate bullets dynamically. The array is freed every time a new game
+is started.
+Add a signal handler, print back trace on error(currently only available
+for linux...).
+
+0.9.1-1 (r89)
+Fix a critical bug in Score_Initailize.
+Modify level pinball.
+Drop "_PR" in version string.
+Partly rewrite the credit scene, displaying accurate version
+details.
+Remove some warnings from hgewin.
+A set of basic tests are done on a Intel+Nvidia desktop computer.
+Add a simple build script(instead of makefile).
+Reduce the Windows version executable size...(local work, recompile
+freetype using reduced features enabled.)
+Current tested (by me) and worked plantforms:
+Debian sid x86_64/Windows 8.1 @Intel core i7-2670QM, 8GiB RAM,
+Intel HD3000.
+Debian sid x86_64 @Intel Core2 Quad Q8300, 8GiB RAM, nvidia GT320.
+Windows XP x64 @VirutalBox, Dualcore Virtual CPU, 1.5GiB RAM, VBox
+Addons installed.
+Windows XP @Intel core i3-3240, 4GiB RAM, Intel HD3000.
+
+0.9.1-1_PR (r88)
+%lld seems to work with mingw-w64(also VS2005+)...
+So let's remove all %I64d.
+Change point bullet behaviour.
+Fix a minor multiplier problem.
+Mark the source code as C++.
+Re-document levels(not done).
+Update wiki.
+
+0.9.1-1_PR (r87)
+Disable screenshot when you're entering your honourable name. It's
+not tested so we could only hope that will work...
+Add crappy sounds to (part of) the menus.
+
+Replace a level in assessment mode. The original one was meanless..
+The menu sounds are too crappy... remove them temporarily. However,
+let's complete the code base so that we won't waste time writing
+it...
+
+0.9.1-1_PR (r86)
+Port highscore view and details menu. Menu rewrite is almost done!
+Disable select key while transferring.
+Fix "typo" caused bugs.
+Hopefully fix small bugs in the new menu system.
+Rename several files. Add some additional files.
+Remove legacy menu components.
+
+0.9.1-0_PR (r85)
+Port death menu, complete menu and new highscore menu to the new
+menu code base.
+Clean up old menu code.
+Update wiki.
+
+0.9.1-0_PR (r84)
+Port player preference menu, pause menu and return to title menu
+to the new menu code base.
+Add shake effect to player preference menu.
+Make effects faster...
+Press esc in a menu will select back/exit now.
+Add several background transfers.
+Fix possible memory leaks in HangUpText.
+Remove some commented statements.
+
+0.9.1-0_PR (r83)
+Now you can change the game resolution.
+Some resources are not re-made so they may look blurred...
+Make font bigger for higher resolution.
+Add command line option for changing the resolution.
+Complete the option menu rewrite.
+
+0.9.1-0_PR (r82)
+Add missing file menus.png...
+Finish the start menu rewrite.
+Modify "Lunatic Lunar", however it's not done...
+Modify resource unpacking of Windows version.
+
+0.9.1-0_PR (r81)
+Start menu rewrite...
+Add information about the built time.
+
+0.9.1-0_PR (r80)
+Remove "high FPS mode", it won't reach 500 FPS on my computer any
+more. Replace it with Vsync mode.
+Add float HGE::Timer_GetFPSf(). The return value will be updated
+every 1000ms.
+
+0.9.0-1_PR (b79/r79)
+Bump version!
+BLR will use revision number instead of build number one day...
+==changelog here==
+New assessment level "density test"...
+New assessment level "pinball"...
+New assessment level "Road blocks"...
+New assessment level "Extreme speeds"...
+New assessment level "Messed up"...
+New assessment level "Bonus - Lunatic Lunar!", finishing assessment
+mode!
+Laser extentions, add LineLaser for two-point laser inheriting all
+Laser interfaces.
+Modify laser collision parameters.
+Level corrections.
+Improve density test.
+Add screen shot. Press S for a screen shot.
+Fix the upside down screen shot output.
+Fix stubbed HGE::System_Launch.
+
+0.9.0-0_PR (b78)
+First two assessment levels.
+Two more assessment levels...
+Tow _more_ assessment levels......
+Another assessment level...
+Yet another level for assessment mode... why don't I bump the
+version?
+Modify player attribute.
+Allow bullet to kill itself at a certain point.
+Add extborder attribute.
+Finish assessment system framework.
+Add circ2pnt.
+
+0.8.1-1_PR (b77)
+All parts from level -1 to 7 are completed!
+Fixed the crash in the mingw-w64 build.
+Switch to mingw-w64 for building Windows version now.
+Complete GUI bring back.
+Fix a bug appeared after the cross-plantform port(when forked
+from BLRI).
+Prepare for assessment mode.
+
+0.8.1-0_PR (b76)
+New level "Sink over the horizon".
+New level "Gravity vortex".
+New level "Double reflective".
+Make point bullet additive blending.
+Allow bullets to pause before being accelerated.
+Modify "Gravity vortex".
+Modify "Achromatopsia". (Thanks to my classmate's advice...)
+Report build and version in the log file.
+Add command line argument support. Use "--help" for usage.
+Add freetype support to hge. It's still pretty buggy. (and make
+the executable extremely big!)
+Add experimental support for cross compiling with mingw-w64.
+(Mingw-w64 build *will* be the official build in the future.)
+Fix blinking HangUpText.
+Fix crashes in mingw-64 build.
+Change numeric characters to monospace.
+Modify player speed settings.
+Beewx still messes up memory... fixed now.
+Exit 1 if not terminated correctly.
+
+0.8.0-1_PR (b75)
+New level Supernova.
+New level (still unnamed).
+Support additive blending bullets(for Supernova).
+Add some additional tips.
+Move levels to level -1.
+Fix blinking of HGE::Gfx_SetTransform in OpenGL.
+Fix includes like " #include "../../include/..." " that would
+cause errors.
+Extend libcgh again. Adding operator ^ and method l().
+Modify clearrange behaviour in level hyper-threading.
+Modify the corresponding score bullet.
+
+0.8.0-0_PR (b74)
+New level Achromatopsia.
+New level hyper-threading.
+Tower8 partly rewritten, dropping tdir.
+Fix a small problem in level 2.
+Move levels to level -1. <-typo fixed
+Modify the semi-coll threshold of laser.
+SCEffect_Attatch now take a optional parameter.
+Global varibles cleanup.
+Fix a bug in bullet8 caused by RandomEngine port.
+Rename "Minesweeper"->"Spiky", add noname2pnt.
+Add achroma2pnt.
+
+0.7.3-0_PR (b73)
+This is a pre-release version of 0.7.2-2_PR.
+This version is released to public for level previewing.
+This release contains level 1~7 (while level -1/-2 are still
+"imaginary")
+Changes:
+Compress several png files.
+Merge code for Windows.
+Fixed compile problems of Windows version.
+Small fixes of level2.
+This build will be short-lived.
+
+0.7.2-2_PR (b72)
+New level "return to void". That's a 3 in 1 class. I used
+particularly many "return(void)(...);" in this level (which I
+always love to use).
+This indicates all "normal" levels are completed.
+Multiplier system was fully adopted into BLR.
+Implement a RandomEngine, replacing all rand().
+Rewrite Leaf_Anim using std::list, won't cause crashes now.
+Fixed: Trypophobia stops if too many CLR's are used.
+Fixed the problem in All2pnt().
+Fixed blinking target.
+Fixed Hexagon loops memory leak (the pointer array is too small...)
+Tests under Windows were done, all gameplay features ran perfectly.
+Make Laser::GetDist() private to avoid misusage.
+Fixed several background problems.
+Remove unused statements:
+DWORD ColTrans(DWORD,DWORD,DWORD): replaced by
+DWORD ColorTransfer(DWORD,DWORD).
+void SaySomethingAndBye(char*): useless.
+void DirectBullet(Bullet&,double): this has been coexisted with
+the same method in the Bullet class for a long time. Now it's
+replaced by Bullet::setdir(double).
+A Small bug in the Windows build is fixed.
+File list in the Windows build is updated.
+
+0.7.2-1_PR (b71)
+(Level7 will be almost twice longer than Level6!)
+I'm extremely tired these days, I can't even keep my eyes open
+while typing...
+Some of my classmates helped testing several levels and found
+some bugs, thanks a lot!
+
+After a short test, I found that the Windows build is almost
+broken... Crashes and misbehaves are everywhere!
+
+Maybe Windows is noble and won't run this garbage:(
+===Real changelog starts from here===
+New level "Trypophobia", however it seems that this level won't
+cause trypophobia at all!
+New level "Photon fusion", using a slightly modified Tower8.
+Rewrote laser distance detection using vector2d calculations,
+extending libcgh and bump its version at the same time.(*2)
+Put the new level to the correct place.
+Bring back "Minesweeper" level, adjust it to the new interfaces.
+Convert Bullet from struct to class.
+Bring back Classic Mode. There are no "easy", "normal" or "hard"
+now, there's only "classic"! Fix problems with the classic mode in
+the new code base.
+Fixed a bug appeared after the levels were put together.
+Other minor changes to the level WOP.
+Minor cleanups and code style adjustments. Add missing free's and
+delete's.
+Remake the credits page, it grows from 350KiB to 6MiB. (And so I'll
+enable PNG compression later.)
+
+0.7.2-0_PR (b70)
+I wasn't willing to bump the build number because I want the svn
+revision to chase the build number.
+However it wouldn't be appropriate to put three new levels into one
+build...
+The real changelog is here:
+New level "interference" (it's another small class "SimpleThing").
+New level "diffraction" (yet another dull class), hopefully fixed a
+memory leak in this level (by using more memory!)
+Rearrange levels to the order they will appear in the final version.
+New background interface, use background pictures easily.
+Make "Tiled" background mode work.
+Add SetScale to background class. Make you dizzy easily...
+Fix a small glitch in Level3Part3-4. This level won't run correctly
+under Low FPS Mode.
+Minor code cleanups.
+Removed more useless comments, my code is still hard to comprehend,
+though.
+Fix the misbehave of modulo with minus numbers...
+Small interface and behaviour changes:
+-If a bullet is effect-attatched and the effect is running, it won't
+die.
+-Bullet::redir now always make dist=1, for some bullet processing
+doesn't use dist now.
+Don't copyleft, it's radical.
+
+0.7.1-6_PR (b69)
+Finish some new levels ("Great Circle" bring back & "rainbow
+appearance").
+Fusion bullet first work draft.
+Fix some of the warnings from the compiler.
+Adjust level difficulty. It was indeed too easy...
+Remake some resources with GIMP.
+Merge great circles and finish it.
+Small code cleanups.
+
+0.7.1-5_PR (b68)
+Draft new level. (Another level threatening you using circles!)
+Update some old interfaces from BLR1.
+
+0.7.1-4_PR (b67)
+New level (name and placement undetermined).
+Fix level transition mismatches.
+Improved accelerated bullets.
+
+0.7.1-3_PR (b66)
+Fix a few glitches. Removing some useless interfaces for BLR I.
+Change "Dangerous Target" for proper difficulty.
+
+0.7.1-2_PR (b65)
+Bullet death effect, applied to Wave of Photon. It seems buggy.
+Fixed something left for debuging in the last commit.
+
+0.7.1-1_PR (b64)
+New level: Wave of Photon. A lazy level again. Despite of a new
+class, it's a copy of "photon school".
+Level improved: Cross threaten. Make it impossible to pass this
+part without crossing those blue bullets.
+libcgh improvement. Added new interfaces to vector2d struct. So the
+libcgh version was bumped. Was it worth doing that?
+
+0.7.1-0_PR (b63)
+New level: Rainbow bullets - nauty photon (in fact it's a lazy
+level! I must have seen the same thing some where else...)
+The last "photon school" level was put to where it should be.
+Rewrite some silly parts of the Changelog.
+I ran out of my AppEngine quota today... So I can't commit that to
+svn as planned...
+
+0.7.0-9_PR (b62)
+Performed a couple of tests, under both full FPS mode and low FPS
+mode.
+New background is used by now.
+
+0.7.0-8_PR (b61)
+Improved the rendering code. More tests are required...
+That made the rendering more efficient. It also eats less RAM then.
+--Okay it's now tested. Another bug in FPS independent bullets
+fixed. No (big) bugs were found in the new rendering code.
+
+0.7.0-7_PR (b60)
+Spring Festival commit...
+One level is rewritten.
+Ready to sync this to svn...
+
+0.7.0-6_PR (b59)
+Fixed 3D clouds background. New background components added.
+Experimental FPS independent bullets.
+
+0.7.0-5_PR (b58)
+Fixed another critical bug in laser collision detection
+implementation... Laser is almost perfect now...//Still, it's
+inefficient.
+
+0.7.0-4_PR (b57)
+Fixed a critical bug in laser implementation and another awful
+memory leak bug...
+
+0.7.0-3_PR (b56)
+A new level is going to be complete...
+
+0.7.0-2_PR (b55)
+Auto pause and do not make game suspend if focus is lost.
+
+0.7.0-1_PR (b54)
+First two parts for level7.
+
+0.7.0-0_PR (b53)
+New background for level7. Preparing interfaces for level7.
+
+0.6.2-2_PR (b52)
+Level6 is frozen now. It's the longest level ever... (in blr!)
+
+0.6.2-1_PR (b51)
+Completing level6!
+Spring is coming? (Well, not really...)
+
+0.6.2-0_PR (b50)
+Completing && improving hexagon.
+Bumped the minor version for the sixth level is almost complete.
+
+0.6.1-4_PR (b49)
+New level hexagon.
+
+0.6.1-3_PR (b48)
+New level...(Avalanche)
+Spotlight: Supporting BGM loop points(using my new hge
+interfaces...)!
+I have no idea on new levels (except "hyper fluid", that's a well-
+planned part...). Maybe I've spent too much time staring at the
+desktop? I feel like void these days.
+The build count is bumped four times a day, you enough!
+
+0.6.1-2_PR (b47)
+New level "Wriggle Nightbug-like"?...
+
+0.6.1-1_PR (b46)
+Implemented several unimplemented audio interfaces of hge (OpenAL).
+A Windows build to check compatibility is planned.
+
+0.6.1-0_PR (b45)
+Now we have 11 parts in level6...
+A BGM called Canon Techno is completed around here...
+
+0.6.0-0_PR (b44)
+Starting level 6!
+//We are in 2014 now. I'm regretful for I didn't have the dates
+recorded.
+
+0.5.3-2_PR (b43)
+Optimizing memory usage... (first step...)[*]
+Borrowed "the unbreakable jail" from old code...
+//[*]Note @ 0.6.1-3 && @ 0.7.0-9:
+//1. I found this useless.
+//2. This may cause SIGSEGV!
+//3. It's completely removed after b61. Because they are not used
+// any longer
+
+0.5.3-1_PR (b42)
+Final(the second last..) level for level 5, fish in a barrel?
+
+0.5.3-0_PR (b41)
+Small fixes and levels as usual...
+
+0.5.2-3_PR (b40)
+New minor parts for level5, fixed a bug in Player_Clear_Rotate.
+
+0.5.2-2_PR (b39)
+Several patches on new clear range.
+Changing interfaces for new levels.
+
+0.5.2-1_PR (b38)
+New trigger method for clear range...
+
+0.4.4-0_PRG (b37a)
+Regression version for releasing...
+-------------------------------------------------------------
+This will be released as a official Preview Release version.<-obsolete
+-------------------------------------------------------------
+
+0.5.2-0_PR (b37)
+New part for level5. Now I'm working on the regression 0.4.x.
+
+0.5.1-1_PR (b36)
+Several fixes including:
+-Fading info panel when approaching.
+-Sending mult. inc. indicator layer up.
+
+0.5.1-0_PR (b35)
+First two levels of level5.
+
+0.5.0-0_PR (b34)
+Starting level5... Crazy Autumn...
+
+A regression is planned to release a 0.4.x-x_PR version as
+official pre-released version. However it's still nowhere in sight
+that if I could use Windows these days.
+
+0.4.3-0_PR (b33)
+Level4 is almost complete. Now I'm using LOW FPS Mode for
+development because I just want to cool my laptop down without
+using my own power. //However I stopped that at the next version...
+
+0.4.2-0_PR (b32)
+A new level... without using *ANY* old code (from level.h).
+
+0.4.1-2_PR (b31)
+Level4 is now 18 parts...
+
+0.4.1-1_PR (b30)
+Transfered sevel old levels here.
+
+0.4.1-0_PR (b29)
+Optimizing old code for level4.
+
+0.4.0-0_PR (b28)
+Now let's move to level4...
+
+0.3.2-0_PR (b27)
+New levels for level3. In fact, it's almost completed now...
+
+0.3.1-2_PR (b26)
+Improved bullet clearing method, avoiding hidden bullets
+completely!(Just by converting them all to score points...)
+
+0.3.1-1_PR (b25)
+A new "big" level for level3.
+Added several new interfaces to tower&bullet section.
+
+0.3.1-0_PR (b24)
+Complete the first two parts of level3.
+
+0.3.0-0_PR (b23)
+Starting the development of level3...
+
+0.2.9-2_PR (b22)
+Completing level2...
+
+0.2.9-1_PR (b21)
+New parts for level2. level2 is almost completed now.
+PlayerLockX/Y implemented.
+-------------------------------------------------------------
+This will be released as a official Preview Release version.<-obsolete
+-------------------------------------------------------------
+BLR will be licensed under WTFPL from now.
+(WTF?)
+.............................................................
+No it's now licensed under the BSD license...
+
+0.2.9_PR (b20)
+Level 2 is frozen "by heart". (How? By heart?)
+
+0.2.5_PR (b19)
+Optimizing the second level to a "realistic" state... Added two
+extra musics(although still remain not used).
+
+0.2.2_PR (b18)
+The main development has been transferred to Linux. Optimizing
+code for Linux.
+//Revision count is not important.
+
+0.2.0_PR (b17)
+Level 2?...
+
+0.1.7-2_PR (b16)
+The first level is almost completed now...
+
+0.1.7-1_PR (b15)
+Fixed several serious bug in Low FPS Mode. Fixed FPS Level option
+code.
+
+0.1.7_PR (b14)
+Updated the only level to synchronize with the In-Game Music.
+Added "Multiplier +1" into the game system. Added an unimportant
+loading screen.//In fact, it's loading nothing. May be unpacking
+resource pack in Windows version...
+
+0.1.4_PR (b13)
+libcghEx has been made independent and can apply to any other
+projects. This is also the first BLR version that includes
+In-Game Music. libcghEx has been extended with LinearProgresser
+and HangUpText.
+
+0.1.1_PR (b12)
+Added auto-multiplier system. libcghEx (Chrisoft Game Helper
+Extras Library) is included in this version with CircleIndicator.
+
+0.1.0_PR (b11)
+Creation of the Pre-Released Version. Removed all old level code.
+Bourne-again!//Can you imagine what I was thinking when deleting
+the result of 3 months' work?...
+=================================================================
+TestBed versions:
+
+TB130907 (b10)
+A "Noname" level. Laser implementation partly rewritten.
+
+TB130903 (b9)
+Additional backgrounds
+
+TB130827 (b8)
+Laser implementation, Cheers!
+
+TB130818 (b7)
+New Levels such as rainbow towers and squashing levels.
+
+TB130802 (b6)
+Discarding old code, rewrite of part of the code.
+
+TB130718 (b5)
+Bullet creation effects, sync code back to BLR1.
+
+TB130714 (b4)
+Target indicator completed.
+
+TB130705 (b3)
+New level and bullet creation code for orange bullets.
+
+TB130703 (b2)
+Completing Orange Towers.
+
+TB130620 (b1)
+Completing Deep Blue Towers.//Well, "Dark Blue" right? Or more formally, "Navy".
+//However, they are all not the real color. I used #0000FF, which is just "Blue",
+//it just seems dark.
+
+TB130610 (b0)
+Creation of Testbed version.
diff --git a/Extras b/archive/blr2/Extras
index 0368e7e..0368e7e 100644
--- a/Extras
+++ b/archive/blr2/Extras
diff --git a/FAQ b/archive/blr2/FAQ
index 9935458..9935458 100644
--- a/FAQ
+++ b/archive/blr2/FAQ
diff --git a/FAQ.zh b/archive/blr2/FAQ.zh
index f6561f5..f6561f5 100644
--- a/FAQ.zh
+++ b/archive/blr2/FAQ.zh
diff --git a/archive/blr2/INSTALL b/archive/blr2/INSTALL
new file mode 100644
index 0000000..c48e870
--- /dev/null
+++ b/archive/blr2/INSTALL
@@ -0,0 +1,29 @@
+Installing a game is really useless, isn't it?
+So just compile it!
+
+A brief guide for compiling BLR
+Required SDKs:
+OpenAL
+ogg
+vorbis
+DirectX(Windows only)
+OpenGL(Linux only)
+SDL(Linux only)
+
+Steps to do:
+1. Get the source code.
+ You can choose from svn or the official packaged release.
+ The code from svn will always be newer than the official
+ packaged release.
+2. Get required SDKs mentioned above.
+ Piece of cake.
+3. Use Visual Studio(Windows) or Code::Blocks(Linux), create
+ project. Configure it correctly.
+ If you'd like to do it, you can also write a Makefile
+ yourself.
+4. Hit build (or type make)!
+5. If it failed, check step 2 and 3, then repeat step 4...
+
+Warning:
+Some revisions in the svn repo has noticeable problems.
+Always build the latest svn revision or official release!
diff --git a/Levels b/archive/blr2/Levels
index e22e9f4..e22e9f4 100644
--- a/Levels
+++ b/archive/blr2/Levels
diff --git a/Levels.zh b/archive/blr2/Levels.zh
index 123b1e6..123b1e6 100644
--- a/Levels.zh
+++ b/archive/blr2/Levels.zh
diff --git a/Readme b/archive/blr2/Readme
index 9161aca..9161aca 100644
--- a/Readme
+++ b/archive/blr2/Readme
diff --git a/Readme.zh b/archive/blr2/Readme.zh
index f712fca..f712fca 100644
--- a/Readme.zh
+++ b/archive/blr2/Readme.zh
diff --git a/archive/blr2/VERSION b/archive/blr2/VERSION
new file mode 100755
index 0000000..9f8cf97
--- /dev/null
+++ b/archive/blr2/VERSION
@@ -0,0 +1 @@
+1.0.0-0 (r101) \ No newline at end of file
diff --git a/archive/blr2/resources/b_diff.png b/archive/blr2/resources/b_diff.png
new file mode 100755
index 0000000..400cac9
--- /dev/null
+++ b/archive/blr2/resources/b_diff.png
Binary files differ
diff --git a/archive/blr2/resources/b_inter.png b/archive/blr2/resources/b_inter.png
new file mode 100644
index 0000000..00976a5
--- /dev/null
+++ b/archive/blr2/resources/b_inter.png
Binary files differ
diff --git a/archive/blr2/resources/b_leaves.png b/archive/blr2/resources/b_leaves.png
new file mode 100755
index 0000000..6bd4a8b
--- /dev/null
+++ b/archive/blr2/resources/b_leaves.png
Binary files differ
diff --git a/archive/blr2/resources/b_null.png b/archive/blr2/resources/b_null.png
new file mode 100755
index 0000000..7c60dce
--- /dev/null
+++ b/archive/blr2/resources/b_null.png
Binary files differ
diff --git a/archive/blr2/resources/bdig.fnt b/archive/blr2/resources/bdig.fnt
new file mode 100644
index 0000000..453c492
--- /dev/null
+++ b/archive/blr2/resources/bdig.fnt
@@ -0,0 +1,15 @@
+[HGEFONT]
+
+Bitmap=credits.png
+
+Char="-",340,354,23,33,0,0
+Char="0",6,354,30,33,0,0
+Char="1",46,354,14,33,0,0
+Char="2",72,354,29,33,0,0
+Char="3",105,354,29,33,0,0
+Char="4",140,354,26,33,0,0
+Char="5",171,354,28,33,0,0
+Char="6",204,354,29,33,0,0
+Char="7",238,354,27,33,0,0
+Char="8",269,354,31,33,0,0
+Char="9",302,354,31,33,0,0
diff --git a/archive/blr2/resources/blnsns.png b/archive/blr2/resources/blnsns.png
new file mode 100755
index 0000000..ae8f7d4
--- /dev/null
+++ b/archive/blr2/resources/blnsns.png
Binary files differ
diff --git a/archive/blr2/resources/charmap.fnt b/archive/blr2/resources/charmap.fnt
new file mode 100755
index 0000000..f31840d
--- /dev/null
+++ b/archive/blr2/resources/charmap.fnt
@@ -0,0 +1,99 @@
+[HGEFONT]
+
+Bitmap=blnsns.png
+
+Char=" ",1,1,3,36,-1,7
+Char="!",5,1,6,36,1,1
+Char=""",12,1,10,36,0,0
+Char="#",23,1,24,36,0,-1
+Char="$",48,1,15,36,0,-1
+Char="%",64,1,25,36,0,0
+Char="&",90,1,23,36,0,0
+Char="'",114,1,5,36,0,1
+Char="(",120,1,12,36,1,-1
+Char=")",133,1,12,36,-1,1
+Char="*",146,1,13,36,0,-1
+Char="+",160,1,15,36,-1,0
+Char=",",176,1,9,36,-1,0
+Char="-",186,1,13,36,0,0
+Char=".",200,1,7,36,0,0
+Char="/",208,1,10,36,0,0
+Char="0",219,1,20,36,0,0
+Char="1",240,1,9,36,11,0
+Char="2",250,1,16,36,4,0
+Char="3",267,1,16,36,4,0
+Char="4",284,1,18,36,2,0
+Char="5",303,1,17,36,3,0
+Char="6",321,1,17,36,3,0
+Char="7",339,1,17,36,3,0
+Char="8",357,1,17,36,3,0
+Char="9",375,1,17,36,3,0
+Char=":",393,1,7,36,0,0
+Char=";",401,1,9,36,-2,0
+Char="<",411,1,13,36,0,-1
+Char="=",425,1,15,36,0,0
+Char=">",441,1,12,36,0,0
+Char="?",454,1,15,36,-1,0
+Char="@",470,1,20,36,0,1
+Char="A",1,38,24,36,-1,-1
+Char="B",26,38,20,36,1,0
+Char="C",47,38,21,36,0,-1
+Char="D",69,38,22,36,1,0
+Char="E",92,38,17,36,1,0
+Char="F",110,38,17,36,1,0
+Char="G",128,38,23,36,0,0
+Char="H",152,38,22,36,1,1
+Char="I",175,38,6,36,1,1
+Char="J",182,38,9,36,-1,1
+Char="K",192,38,20,36,1,-1
+Char="L",213,38,17,36,1,0
+Char="M",231,38,25,36,1,1
+Char="N",257,38,22,36,1,1
+Char="O",280,38,25,36,0,0
+Char="P",306,38,20,36,1,0
+Char="Q",327,38,25,36,0,0
+Char="R",353,38,19,36,1,0
+Char="S",373,38,15,36,1,0
+Char="T",389,38,18,36,0,-1
+Char="U",408,38,20,36,1,1
+Char="V",429,38,21,36,0,0
+Char="W",451,38,30,36,0,0
+Char="X",482,38,20,36,0,-1
+Char="Y",1,75,20,36,0,0
+Char="Z",22,75,19,36,-1,-1
+Char="[",42,75,11,36,2,-1
+Char="\",54,75,10,36,0,0
+Char="]",65,75,11,36,-1,2
+Char="^",77,75,17,36,-1,0
+Char="_",95,75,17,36,-1,-1
+Char="`",113,75,11,36,0,1
+Char="a",125,75,19,36,0,0
+Char="b",145,75,17,36,1,1
+Char="c",163,75,13,36,0,1
+Char="d",177,75,18,36,0,1
+Char="e",196,75,15,36,0,1
+Char="f",212,75,12,36,-1,-1
+Char="g",225,75,17,36,0,1
+Char="h",243,75,16,36,1,1
+Char="i",260,75,7,36,1,0
+Char="j",268,75,9,36,-2,1
+Char="k",278,75,17,36,1,1
+Char="l",296,75,6,36,1,1
+Char="m",303,75,29,36,0,1
+Char="n",333,75,17,36,0,1
+Char="o",351,75,17,36,0,0
+Char="p",369,75,18,36,0,1
+Char="q",388,75,19,36,0,0
+Char="r",408,75,12,36,0,-1
+Char="s",421,75,9,36,0,1
+Char="t",431,75,12,36,-1,1
+Char="u",444,75,17,36,1,1
+Char="v",462,75,17,36,0,1
+Char="w",480,75,26,36,0,-1
+Char="x",1,112,14,36,0,1
+Char="y",16,112,15,36,0,1
+Char="z",32,112,14,36,0,0
+Char="{",47,112,13,36,0,-1
+Char="|",61,112,5,36,2,1
+Char="}",67,112,12,36,0,0
+Char="~",80,112,18,36,0,-1
diff --git a/archive/blr2/resources/credits.png b/archive/blr2/resources/credits.png
new file mode 100755
index 0000000..d647d86
--- /dev/null
+++ b/archive/blr2/resources/credits.png
Binary files differ
diff --git a/archive/blr2/resources/e_leaf.png b/archive/blr2/resources/e_leaf.png
new file mode 100755
index 0000000..d64d6ca
--- /dev/null
+++ b/archive/blr2/resources/e_leaf.png
Binary files differ
diff --git a/archive/blr2/resources/e_sflake.png b/archive/blr2/resources/e_sflake.png
new file mode 100644
index 0000000..963d85e
--- /dev/null
+++ b/archive/blr2/resources/e_sflake.png
Binary files differ
diff --git a/archive/blr2/resources/e_skyitem.png b/archive/blr2/resources/e_skyitem.png
new file mode 100644
index 0000000..e3e168b
--- /dev/null
+++ b/archive/blr2/resources/e_skyitem.png
Binary files differ
diff --git a/archive/blr2/resources/help.png b/archive/blr2/resources/help.png
new file mode 100644
index 0000000..32718ee
--- /dev/null
+++ b/archive/blr2/resources/help.png
Binary files differ
diff --git a/archive/blr2/resources/menus.png b/archive/blr2/resources/menus.png
new file mode 100644
index 0000000..9ce0aba
--- /dev/null
+++ b/archive/blr2/resources/menus.png
Binary files differ
diff --git a/archive/blr2/resources/ss.png b/archive/blr2/resources/ss.png
new file mode 100755
index 0000000..e34abbb
--- /dev/null
+++ b/archive/blr2/resources/ss.png
Binary files differ
diff --git a/archive/blr2/resources/tap.ogg b/archive/blr2/resources/tap.ogg
new file mode 100755
index 0000000..1ef00b0
--- /dev/null
+++ b/archive/blr2/resources/tap.ogg
Binary files differ
diff --git a/archive/blr2/resources/title.png b/archive/blr2/resources/title.png
new file mode 100644
index 0000000..f0801ef
--- /dev/null
+++ b/archive/blr2/resources/title.png
Binary files differ
diff --git a/archive/blr2/resources/vdig.fnt b/archive/blr2/resources/vdig.fnt
new file mode 100644
index 0000000..6d89742
--- /dev/null
+++ b/archive/blr2/resources/vdig.fnt
@@ -0,0 +1,20 @@
+[HGEFONT]
+
+Bitmap=credits.png
+
+Char=" ",541,279,1,50,33,5
+Char="(",326,278,23,61,0,0
+Char=")",354,278,23,60,0,0
+Char="-",512,279,29,50,0,0
+Char=".",483,279,7,50,13,14
+Char="0",244,222,42,50,0,0
+Char="1",305,222,15,50,0,0
+Char="2",341,222,39,50,0,0
+Char="3",389,222,39,50,0,0
+Char="4",440,222,34,50,0,0
+Char="5",485,222,39,50,0,0
+Char="6",533,222,39,50,0,0
+Char="7",248,279,34,50,0,0
+Char="8",383,279,43,50,0,0
+Char="9",433,279,39,50,0,0
+Char="r",293,279,29,50,0,0
diff --git a/background.h b/archive/blr2/src/background.h
index 849438c..849438c 100644
--- a/background.h
+++ b/archive/blr2/src/background.h
diff --git a/effects.h b/archive/blr2/src/effects.h
index d71a445..d71a445 100644
--- a/effects.h
+++ b/archive/blr2/src/effects.h
diff --git a/global.h b/archive/blr2/src/global.h
index 5e1d873..a20c5d1 100644
--- a/global.h
+++ b/archive/blr2/src/global.h
@@ -7,7 +7,7 @@
#define Resd 20.0f
#define MaxBulCnt 20000
HGE *hge=0;
-HEFFECT snd,menuin,menuout;
+HEFFECT snd,menuin,menuout,menumov;
hgeQuad quad;
hgeFont *fnt,*vdig,*bdig;
hgeSprite *spr,*titlespr;
diff --git a/hgeft.cpp b/archive/blr2/src/hgeft.cpp
index e424756..479027b 100644
--- a/hgeft.cpp
+++ b/archive/blr2/src/hgeft.cpp
@@ -11,7 +11,9 @@ bool hgeTTChar::SetChar(wchar_t ch,FT_Face ttfface)
err=FT_Render_Glyph(ttfface->glyph,FT_RENDER_MODE_NORMAL);
if(err){hge->System_Log("%s: Glyph render failed!",HGEFT_SRC_FN);return false;}
_w=slot->advance.x>>6;_h=slot->bitmap.rows;//we are one line only.
- rw=slot->bitmap.width;rh=slot->bitmap.rows;yofst=slot->bitmap.rows-slot->bitmap_top;
+ rw=slot->bitmap.width;rh=slot->bitmap.rows;
+ xofst=slot->bitmap_left;
+ yofst=slot->bitmap.rows-slot->bitmap_top;
quad.tex=hge->Texture_Create(
slot->bitmap.width?slot->bitmap.width:1,
slot->bitmap.rows?slot->bitmap.rows:1);
diff --git a/hgeft.h b/archive/blr2/src/hgeft.h
index 1badc74..1badc74 100644
--- a/hgeft.h
+++ b/archive/blr2/src/hgeft.h
diff --git a/levels.h b/archive/blr2/src/levels.h
index 58d7505..58d7505 100644
--- a/levels.h
+++ b/archive/blr2/src/levels.h
diff --git a/libcgh.h b/archive/blr2/src/libcgh.h
index 324ba42..324ba42 100644
--- a/libcgh.h
+++ b/archive/blr2/src/libcgh.h
diff --git a/libcghEx.cpp b/archive/blr2/src/libcghEx.cpp
index 9c9fa78..a8fa698 100644
--- a/libcghEx.cpp
+++ b/archive/blr2/src/libcghEx.cpp
@@ -41,30 +41,30 @@ void CircleIndicator::Init(double _r,double _thk,BYTE _a,bool _gr,HTEXTURE _Text
void CircleIndicator::SetAlpha(BYTE _alpha){alpha=_alpha;}
void CircleIndicator::SetValue(double _value)
{
- value=_value;
- for (int i=0;i<=1024;++i)
+ value=_value;
+ for (int i=0;i<=1024;++i)
+ {
+ int tr=(int)((1.0f-value)*255);
+ int tg=(int)(value*255);
+ DWORD tcolour=ARGB(alpha,tr,tg,0);
+ hgeColorHSV *tc=new hgeColorHSV(tcolour);
+ if (tc->v<0.85)tc->v=0.85;
+ if (gradient)tcolour=SETA(tc->GetHWColor(),alpha);else tcolour=SETA(ccolour,alpha);
+ if ((double)i/1024.0f<=value)
{
- int tr=(int)((1.0f-value)*255);
- int tg=(int)(value*255);
- DWORD tcolour=ARGB(alpha,tr,tg,0);
- hgeColorHSV *tc=new hgeColorHSV(tcolour);
- if (tc->v<0.85)tc->v=0.85;
- if (gradient)tcolour=SETA(tc->GetHWColor(),alpha);else tcolour=SETA(ccolour,alpha);
- if ((double)i/1024.0f<=value)
- {
- circle->SetColor(i,0,tcolour);
- circle->SetColor(i,1,SETA(0x00FFFFFF,alpha));
- circle->SetColor(i,2,tcolour);
- }
- else
- {
- circle->SetColor(i,0,0x00000000);
- circle->SetColor(i,1,0x00000000);
- circle->SetColor(i,2,0x00000000);
- }
- delete tc;
+ circle->SetColor(i,0,tcolour);
+ circle->SetColor(i,1,SETA(0x00FFFFFF,alpha));
+ circle->SetColor(i,2,tcolour);
}
+ else
+ {
+ circle->SetColor(i,0,0x00000000);
+ circle->SetColor(i,1,0x00000000);
+ circle->SetColor(i,2,0x00000000);
+ }
+ delete tc;
}
+}
void CircleIndicator::Render(double x,double y){circle->Render(x,y);}
void LinearProgresser::Init(double _a,double _b,double _Lim){a=_a,b=_b,Limit=_Lim;}
diff --git a/archive/blr2/src/loading.h b/archive/blr2/src/loading.h
new file mode 100644
index 0000000..acf59aa
--- /dev/null
+++ b/archive/blr2/src/loading.h
@@ -0,0 +1,384 @@
+unsigned char Loading[]=
+{0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x60,
+0x00,0x00,0x00,0x20,0x08,0x06,0x00,0x00,0x00,0xED,0xC0,0x7D,0x54,0x00,0x00,0x00,0x09,0x70,0x48,
+0x59,0x73,0x00,0x00,0x0B,0x13,0x00,0x00,0x0B,0x13,0x01,0x00,0x9A,0x9C,0x18,0x00,0x00,0x0A,0x4D,
+0x69,0x43,0x43,0x50,0x50,0x68,0x6F,0x74,0x6F,0x73,0x68,0x6F,0x70,0x20,0x49,0x43,0x43,0x20,0x70,
+0x72,0x6F,0x66,0x69,0x6C,0x65,0x00,0x00,0x78,0xDA,0x9D,0x53,0x77,0x58,0x93,0xF7,0x16,0x3E,0xDF,
+0xF7,0x65,0x0F,0x56,0x42,0xD8,0xF0,0xB1,0x97,0x6C,0x81,0x00,0x22,0x23,0xAC,0x08,0xC8,0x10,0x59,
+0xA2,0x10,0x92,0x00,0x61,0x84,0x10,0x12,0x40,0xC5,0x85,0x88,0x0A,0x56,0x14,0x15,0x11,0x9C,0x48,
+0x55,0xC4,0x82,0xD5,0x0A,0x48,0x9D,0x88,0xE2,0xA0,0x28,0xB8,0x67,0x41,0x8A,0x88,0x5A,0x8B,0x55,
+0x5C,0x38,0xEE,0x1F,0xDC,0xA7,0xB5,0x7D,0x7A,0xEF,0xED,0xED,0xFB,0xD7,0xFB,0xBC,0xE7,0x9C,0xE7,
+0xFC,0xCE,0x79,0xCF,0x0F,0x80,0x11,0x12,0x26,0x91,0xE6,0xA2,0x6A,0x00,0x39,0x52,0x85,0x3C,0x3A,
+0xD8,0x1F,0x8F,0x4F,0x48,0xC4,0xC9,0xBD,0x80,0x02,0x15,0x48,0xE0,0x04,0x20,0x10,0xE6,0xCB,0xC2,
+0x67,0x05,0xC5,0x00,0x00,0xF0,0x03,0x79,0x78,0x7E,0x74,0xB0,0x3F,0xFC,0x01,0xAF,0x6F,0x00,0x02,
+0x00,0x70,0xD5,0x2E,0x24,0x12,0xC7,0xE1,0xFF,0x83,0xBA,0x50,0x26,0x57,0x00,0x20,0x91,0x00,0xE0,
+0x22,0x12,0xE7,0x0B,0x01,0x90,0x52,0x00,0xC8,0x2E,0x54,0xC8,0x14,0x00,0xC8,0x18,0x00,0xB0,0x53,
+0xB3,0x64,0x0A,0x00,0x94,0x00,0x00,0x6C,0x79,0x7C,0x42,0x22,0x00,0xAA,0x0D,0x00,0xEC,0xF4,0x49,
+0x3E,0x05,0x00,0xD8,0xA9,0x93,0xDC,0x17,0x00,0xD8,0xA2,0x1C,0xA9,0x08,0x00,0x8D,0x01,0x00,0x99,
+0x28,0x47,0x24,0x02,0x40,0xBB,0x00,0x60,0x55,0x81,0x52,0x2C,0x02,0xC0,0xC2,0x00,0xA0,0xAC,0x40,
+0x22,0x2E,0x04,0xC0,0xAE,0x01,0x80,0x59,0xB6,0x32,0x47,0x02,0x80,0xBD,0x05,0x00,0x76,0x8E,0x58,
+0x90,0x0F,0x40,0x60,0x00,0x80,0x99,0x42,0x2C,0xCC,0x00,0x20,0x38,0x02,0x00,0x43,0x1E,0x13,0xCD,
+0x03,0x20,0x4C,0x03,0xA0,0x30,0xD2,0xBF,0xE0,0xA9,0x5F,0x70,0x85,0xB8,0x48,0x01,0x00,0xC0,0xCB,
+0x95,0xCD,0x97,0x4B,0xD2,0x33,0x14,0xB8,0x95,0xD0,0x1A,0x77,0xF2,0xF0,0xE0,0xE2,0x21,0xE2,0xC2,
+0x6C,0xB1,0x42,0x61,0x17,0x29,0x10,0x66,0x09,0xE4,0x22,0x9C,0x97,0x9B,0x23,0x13,0x48,0xE7,0x03,
+0x4C,0xCE,0x0C,0x00,0x00,0x1A,0xF9,0xD1,0xC1,0xFE,0x38,0x3F,0x90,0xE7,0xE6,0xE4,0xE1,0xE6,0x66,
+0xE7,0x6C,0xEF,0xF4,0xC5,0xA2,0xFE,0x6B,0xF0,0x6F,0x22,0x3E,0x21,0xF1,0xDF,0xFE,0xBC,0x8C,0x02,
+0x04,0x00,0x10,0x4E,0xCF,0xEF,0xDA,0x5F,0xE5,0xE5,0xD6,0x03,0x70,0xC7,0x01,0xB0,0x75,0xBF,0x6B,
+0xA9,0x5B,0x00,0xDA,0x56,0x00,0x68,0xDF,0xF9,0x5D,0x33,0xDB,0x09,0xA0,0x5A,0x0A,0xD0,0x7A,0xF9,
+0x8B,0x79,0x38,0xFC,0x40,0x1E,0x9E,0xA1,0x50,0xC8,0x3C,0x1D,0x1C,0x0A,0x0B,0x0B,0xED,0x25,0x62,
+0xA1,0xBD,0x30,0xE3,0x8B,0x3E,0xFF,0x33,0xE1,0x6F,0xE0,0x8B,0x7E,0xF6,0xFC,0x40,0x1E,0xFE,0xDB,
+0x7A,0xF0,0x00,0x71,0x9A,0x40,0x99,0xAD,0xC0,0xA3,0x83,0xFD,0x71,0x61,0x6E,0x76,0xAE,0x52,0x8E,
+0xE7,0xCB,0x04,0x42,0x31,0x6E,0xF7,0xE7,0x23,0xFE,0xC7,0x85,0x7F,0xFD,0x8E,0x29,0xD1,0xE2,0x34,
+0xB1,0x5C,0x2C,0x15,0x8A,0xF1,0x58,0x89,0xB8,0x50,0x22,0x4D,0xC7,0x79,0xB9,0x52,0x91,0x44,0x21,
+0xC9,0x95,0xE2,0x12,0xE9,0x7F,0x32,0xF1,0x1F,0x96,0xFD,0x09,0x93,0x77,0x0D,0x00,0xAC,0x86,0x4F,
+0xC0,0x4E,0xB6,0x07,0xB5,0xCB,0x6C,0xC0,0x7E,0xEE,0x01,0x02,0x8B,0x0E,0x58,0xD2,0x76,0x00,0x40,
+0x7E,0xF3,0x2D,0x8C,0x1A,0x0B,0x91,0x00,0x10,0x67,0x34,0x32,0x79,0xF7,0x00,0x00,0x93,0xBF,0xF9,
+0x8F,0x40,0x2B,0x01,0x00,0xCD,0x97,0xA4,0xE3,0x00,0x00,0xBC,0xE8,0x18,0x5C,0xA8,0x94,0x17,0x4C,
+0xC6,0x08,0x00,0x00,0x44,0xA0,0x81,0x2A,0xB0,0x41,0x07,0x0C,0xC1,0x14,0xAC,0xC0,0x0E,0x9C,0xC1,
+0x1D,0xBC,0xC0,0x17,0x02,0x61,0x06,0x44,0x40,0x0C,0x24,0xC0,0x3C,0x10,0x42,0x06,0xE4,0x80,0x1C,
+0x0A,0xA1,0x18,0x96,0x41,0x19,0x54,0xC0,0x3A,0xD8,0x04,0xB5,0xB0,0x03,0x1A,0xA0,0x11,0x9A,0xE1,
+0x10,0xB4,0xC1,0x31,0x38,0x0D,0xE7,0xE0,0x12,0x5C,0x81,0xEB,0x70,0x17,0x06,0x60,0x18,0x9E,0xC2,
+0x18,0xBC,0x86,0x09,0x04,0x41,0xC8,0x08,0x13,0x61,0x21,0x3A,0x88,0x11,0x62,0x8E,0xD8,0x22,0xCE,
+0x08,0x17,0x99,0x8E,0x04,0x22,0x61,0x48,0x34,0x92,0x80,0xA4,0x20,0xE9,0x88,0x14,0x51,0x22,0xC5,
+0xC8,0x72,0xA4,0x02,0xA9,0x42,0x6A,0x91,0x5D,0x48,0x23,0xF2,0x2D,0x72,0x14,0x39,0x8D,0x5C,0x40,
+0xFA,0x90,0xDB,0xC8,0x20,0x32,0x8A,0xFC,0x8A,0xBC,0x47,0x31,0x94,0x81,0xB2,0x51,0x03,0xD4,0x02,
+0x75,0x40,0xB9,0xA8,0x1F,0x1A,0x8A,0xC6,0xA0,0x73,0xD1,0x74,0x34,0x0F,0x5D,0x80,0x96,0xA2,0x6B,
+0xD1,0x1A,0xB4,0x1E,0x3D,0x80,0xB6,0xA2,0xA7,0xD1,0x4B,0xE8,0x75,0x74,0x00,0x7D,0x8A,0x8E,0x63,
+0x80,0xD1,0x31,0x0E,0x66,0x8C,0xD9,0x61,0x5C,0x8C,0x87,0x45,0x60,0x89,0x58,0x1A,0x26,0xC7,0x16,
+0x63,0xE5,0x58,0x35,0x56,0x8F,0x35,0x63,0x1D,0x58,0x37,0x76,0x15,0x1B,0xC0,0x9E,0x61,0xEF,0x08,
+0x24,0x02,0x8B,0x80,0x13,0xEC,0x08,0x5E,0x84,0x10,0xC2,0x6C,0x82,0x90,0x90,0x47,0x58,0x4C,0x58,
+0x43,0xA8,0x25,0xEC,0x23,0xB4,0x12,0xBA,0x08,0x57,0x09,0x83,0x84,0x31,0xC2,0x27,0x22,0x93,0xA8,
+0x4F,0xB4,0x25,0x7A,0x12,0xF9,0xC4,0x78,0x62,0x3A,0xB1,0x90,0x58,0x46,0xAC,0x26,0xEE,0x21,0x1E,
+0x21,0x9E,0x25,0x5E,0x27,0x0E,0x13,0x5F,0x93,0x48,0x24,0x0E,0xC9,0x92,0xE4,0x4E,0x0A,0x21,0x25,
+0x90,0x32,0x49,0x0B,0x49,0x6B,0x48,0xDB,0x48,0x2D,0xA4,0x53,0xA4,0x3E,0xD2,0x10,0x69,0x9C,0x4C,
+0x26,0xEB,0x90,0x6D,0xC9,0xDE,0xE4,0x08,0xB2,0x80,0xAC,0x20,0x97,0x91,0xB7,0x90,0x0F,0x90,0x4F,
+0x92,0xFB,0xC9,0xC3,0xE4,0xB7,0x14,0x3A,0xC5,0x88,0xE2,0x4C,0x09,0xA2,0x24,0x52,0xA4,0x94,0x12,
+0x4A,0x35,0x65,0x3F,0xE5,0x04,0xA5,0x9F,0x32,0x42,0x99,0xA0,0xAA,0x51,0xCD,0xA9,0x9E,0xD4,0x08,
+0xAA,0x88,0x3A,0x9F,0x5A,0x49,0x6D,0xA0,0x76,0x50,0x2F,0x53,0x87,0xA9,0x13,0x34,0x75,0x9A,0x25,
+0xCD,0x9B,0x16,0x43,0xCB,0xA4,0x2D,0xA3,0xD5,0xD0,0x9A,0x69,0x67,0x69,0xF7,0x68,0x2F,0xE9,0x74,
+0xBA,0x09,0xDD,0x83,0x1E,0x45,0x97,0xD0,0x97,0xD2,0x6B,0xE8,0x07,0xE9,0xE7,0xE9,0x83,0xF4,0x77,
+0x0C,0x0D,0x86,0x0D,0x83,0xC7,0x48,0x62,0x28,0x19,0x6B,0x19,0x7B,0x19,0xA7,0x18,0xB7,0x19,0x2F,
+0x99,0x4C,0xA6,0x05,0xD3,0x97,0x99,0xC8,0x54,0x30,0xD7,0x32,0x1B,0x99,0x67,0x98,0x0F,0x98,0x6F,
+0x55,0x58,0x2A,0xF6,0x2A,0x7C,0x15,0x91,0xCA,0x12,0x95,0x3A,0x95,0x56,0x95,0x7E,0x95,0xE7,0xAA,
+0x54,0x55,0x73,0x55,0x3F,0xD5,0x79,0xAA,0x0B,0x54,0xAB,0x55,0x0F,0xAB,0x5E,0x56,0x7D,0xA6,0x46,
+0x55,0xB3,0x50,0xE3,0xA9,0x09,0xD4,0x16,0xAB,0xD5,0xA9,0x1D,0x55,0xBB,0xA9,0x36,0xAE,0xCE,0x52,
+0x77,0x52,0x8F,0x50,0xCF,0x51,0x5F,0xA3,0xBE,0x5F,0xFD,0x82,0xFA,0x63,0x0D,0xB2,0x86,0x85,0x46,
+0xA0,0x86,0x48,0xA3,0x54,0x63,0xB7,0xC6,0x19,0x8D,0x21,0x16,0xC6,0x32,0x65,0xF1,0x58,0x42,0xD6,
+0x72,0x56,0x03,0xEB,0x2C,0x6B,0x98,0x4D,0x62,0x5B,0xB2,0xF9,0xEC,0x4C,0x76,0x05,0xFB,0x1B,0x76,
+0x2F,0x7B,0x4C,0x53,0x43,0x73,0xAA,0x66,0xAC,0x66,0x91,0x66,0x9D,0xE6,0x71,0xCD,0x01,0x0E,0xC6,
+0xB1,0xE0,0xF0,0x39,0xD9,0x9C,0x4A,0xCE,0x21,0xCE,0x0D,0xCE,0x7B,0x2D,0x03,0x2D,0x3F,0x2D,0xB1,
+0xD6,0x6A,0xAD,0x66,0xAD,0x7E,0xAD,0x37,0xDA,0x7A,0xDA,0xBE,0xDA,0x62,0xED,0x72,0xED,0x16,0xED,
+0xEB,0xDA,0xEF,0x75,0x70,0x9D,0x40,0x9D,0x2C,0x9D,0xF5,0x3A,0x6D,0x3A,0xF7,0x75,0x09,0xBA,0x36,
+0xBA,0x51,0xBA,0x85,0xBA,0xDB,0x75,0xCF,0xEA,0x3E,0xD3,0x63,0xEB,0x79,0xE9,0x09,0xF5,0xCA,0xF5,
+0x0E,0xE9,0xDD,0xD1,0x47,0xF5,0x6D,0xF4,0xA3,0xF5,0x17,0xEA,0xEF,0xD6,0xEF,0xD1,0x1F,0x37,0x30,
+0x34,0x08,0x36,0x90,0x19,0x6C,0x31,0x38,0x63,0xF0,0xCC,0x90,0x63,0xE8,0x6B,0x98,0x69,0xB8,0xD1,
+0xF0,0x84,0xE1,0xA8,0x11,0xCB,0x68,0xBA,0x91,0xC4,0x68,0xA3,0xD1,0x49,0xA3,0x27,0xB8,0x26,0xEE,
+0x87,0x67,0xE3,0x35,0x78,0x17,0x3E,0x66,0xAC,0x6F,0x1C,0x62,0xAC,0x34,0xDE,0x65,0xDC,0x6B,0x3C,
+0x61,0x62,0x69,0x32,0xDB,0xA4,0xC4,0xA4,0xC5,0xE4,0xBE,0x29,0xCD,0x94,0x6B,0x9A,0x66,0xBA,0xD1,
+0xB4,0xD3,0x74,0xCC,0xCC,0xC8,0x2C,0xDC,0xAC,0xD8,0xAC,0xC9,0xEC,0x8E,0x39,0xD5,0x9C,0x6B,0x9E,
+0x61,0xBE,0xD9,0xBC,0xDB,0xFC,0x8D,0x85,0xA5,0x45,0x9C,0xC5,0x4A,0x8B,0x36,0x8B,0xC7,0x96,0xDA,
+0x96,0x7C,0xCB,0x05,0x96,0x4D,0x96,0xF7,0xAC,0x98,0x56,0x3E,0x56,0x79,0x56,0xF5,0x56,0xD7,0xAC,
+0x49,0xD6,0x5C,0xEB,0x2C,0xEB,0x6D,0xD6,0x57,0x6C,0x50,0x1B,0x57,0x9B,0x0C,0x9B,0x3A,0x9B,0xCB,
+0xB6,0xA8,0xAD,0x9B,0xAD,0xC4,0x76,0x9B,0x6D,0xDF,0x14,0xE2,0x14,0x8F,0x29,0xD2,0x29,0xF5,0x53,
+0x6E,0xDA,0x31,0xEC,0xFC,0xEC,0x0A,0xEC,0x9A,0xEC,0x06,0xED,0x39,0xF6,0x61,0xF6,0x25,0xF6,0x6D,
+0xF6,0xCF,0x1D,0xCC,0x1C,0x12,0x1D,0xD6,0x3B,0x74,0x3B,0x7C,0x72,0x74,0x75,0xCC,0x76,0x6C,0x70,
+0xBC,0xEB,0xA4,0xE1,0x34,0xC3,0xA9,0xC4,0xA9,0xC3,0xE9,0x57,0x67,0x1B,0x67,0xA1,0x73,0x9D,0xF3,
+0x35,0x17,0xA6,0x4B,0x90,0xCB,0x12,0x97,0x76,0x97,0x17,0x53,0x6D,0xA7,0x8A,0xA7,0x6E,0x9F,0x7A,
+0xCB,0x95,0xE5,0x1A,0xEE,0xBA,0xD2,0xB5,0xD3,0xF5,0xA3,0x9B,0xBB,0x9B,0xDC,0xAD,0xD9,0x6D,0xD4,
+0xDD,0xCC,0x3D,0xC5,0x7D,0xAB,0xFB,0x4D,0x2E,0x9B,0x1B,0xC9,0x5D,0xC3,0x3D,0xEF,0x41,0xF4,0xF0,
+0xF7,0x58,0xE2,0x71,0xCC,0xE3,0x9D,0xA7,0x9B,0xA7,0xC2,0xF3,0x90,0xE7,0x2F,0x5E,0x76,0x5E,0x59,
+0x5E,0xFB,0xBD,0x1E,0x4F,0xB3,0x9C,0x26,0x9E,0xD6,0x30,0x6D,0xC8,0xDB,0xC4,0x5B,0xE0,0xBD,0xCB,
+0x7B,0x60,0x3A,0x3E,0x3D,0x65,0xFA,0xCE,0xE9,0x03,0x3E,0xC6,0x3E,0x02,0x9F,0x7A,0x9F,0x87,0xBE,
+0xA6,0xBE,0x22,0xDF,0x3D,0xBE,0x23,0x7E,0xD6,0x7E,0x99,0x7E,0x07,0xFC,0x9E,0xFB,0x3B,0xFA,0xCB,
+0xFD,0x8F,0xF8,0xBF,0xE1,0x79,0xF2,0x16,0xF1,0x4E,0x05,0x60,0x01,0xC1,0x01,0xE5,0x01,0xBD,0x81,
+0x1A,0x81,0xB3,0x03,0x6B,0x03,0x1F,0x04,0x99,0x04,0xA5,0x07,0x35,0x05,0x8D,0x05,0xBB,0x06,0x2F,
+0x0C,0x3E,0x15,0x42,0x0C,0x09,0x0D,0x59,0x1F,0x72,0x93,0x6F,0xC0,0x17,0xF2,0x1B,0xF9,0x63,0x33,
+0xDC,0x67,0x2C,0x9A,0xD1,0x15,0xCA,0x08,0x9D,0x15,0x5A,0x1B,0xFA,0x30,0xCC,0x26,0x4C,0x1E,0xD6,
+0x11,0x8E,0x86,0xCF,0x08,0xDF,0x10,0x7E,0x6F,0xA6,0xF9,0x4C,0xE9,0xCC,0xB6,0x08,0x88,0xE0,0x47,
+0x6C,0x88,0xB8,0x1F,0x69,0x19,0x99,0x17,0xF9,0x7D,0x14,0x29,0x2A,0x32,0xAA,0x2E,0xEA,0x51,0xB4,
+0x53,0x74,0x71,0x74,0xF7,0x2C,0xD6,0xAC,0xE4,0x59,0xFB,0x67,0xBD,0x8E,0xF1,0x8F,0xA9,0x8C,0xB9,
+0x3B,0xDB,0x6A,0xB6,0x72,0x76,0x67,0xAC,0x6A,0x6C,0x52,0x6C,0x63,0xEC,0x9B,0xB8,0x80,0xB8,0xAA,
+0xB8,0x81,0x78,0x87,0xF8,0x45,0xF1,0x97,0x12,0x74,0x13,0x24,0x09,0xED,0x89,0xE4,0xC4,0xD8,0xC4,
+0x3D,0x89,0xE3,0x73,0x02,0xE7,0x6C,0x9A,0x33,0x9C,0xE4,0x9A,0x54,0x96,0x74,0x63,0xAE,0xE5,0xDC,
+0xA2,0xB9,0x17,0xE6,0xE9,0xCE,0xCB,0x9E,0x77,0x3C,0x59,0x35,0x59,0x90,0x7C,0x38,0x85,0x98,0x12,
+0x97,0xB2,0x3F,0xE5,0x83,0x20,0x42,0x50,0x2F,0x18,0x4F,0xE5,0xA7,0x6E,0x4D,0x1D,0x13,0xF2,0x84,
+0x9B,0x85,0x4F,0x45,0xBE,0xA2,0x8D,0xA2,0x51,0xB1,0xB7,0xB8,0x4A,0x3C,0x92,0xE6,0x9D,0x56,0x95,
+0xF6,0x38,0xDD,0x3B,0x7D,0x43,0xFA,0x68,0x86,0x4F,0x46,0x75,0xC6,0x33,0x09,0x4F,0x52,0x2B,0x79,
+0x91,0x19,0x92,0xB9,0x23,0xF3,0x4D,0x56,0x44,0xD6,0xDE,0xAC,0xCF,0xD9,0x71,0xD9,0x2D,0x39,0x94,
+0x9C,0x94,0x9C,0xA3,0x52,0x0D,0x69,0x96,0xB4,0x2B,0xD7,0x30,0xB7,0x28,0xB7,0x4F,0x66,0x2B,0x2B,
+0x93,0x0D,0xE4,0x79,0xE6,0x6D,0xCA,0x1B,0x93,0x87,0xCA,0xF7,0xE4,0x23,0xF9,0x73,0xF3,0xDB,0x15,
+0x6C,0x85,0x4C,0xD1,0xA3,0xB4,0x52,0xAE,0x50,0x0E,0x16,0x4C,0x2F,0xA8,0x2B,0x78,0x5B,0x18,0x5B,
+0x78,0xB8,0x48,0xBD,0x48,0x5A,0xD4,0x33,0xDF,0x66,0xFE,0xEA,0xF9,0x23,0x0B,0x82,0x16,0x7C,0xBD,
+0x90,0xB0,0x50,0xB8,0xB0,0xB3,0xD8,0xB8,0x78,0x59,0xF1,0xE0,0x22,0xBF,0x45,0xBB,0x16,0x23,0x8B,
+0x53,0x17,0x77,0x2E,0x31,0x5D,0x52,0xBA,0x64,0x78,0x69,0xF0,0xD2,0x7D,0xCB,0x68,0xCB,0xB2,0x96,
+0xFD,0x50,0xE2,0x58,0x52,0x55,0xF2,0x6A,0x79,0xDC,0xF2,0x8E,0x52,0x83,0xD2,0xA5,0xA5,0x43,0x2B,
+0x82,0x57,0x34,0x95,0xA9,0x94,0xC9,0xCB,0x6E,0xAE,0xF4,0x5A,0xB9,0x63,0x15,0x61,0x95,0x64,0x55,
+0xEF,0x6A,0x97,0xD5,0x5B,0x56,0x7F,0x2A,0x17,0x95,0x5F,0xAC,0x70,0xAC,0xA8,0xAE,0xF8,0xB0,0x46,
+0xB8,0xE6,0xE2,0x57,0x4E,0x5F,0xD5,0x7C,0xF5,0x79,0x6D,0xDA,0xDA,0xDE,0x4A,0xB7,0xCA,0xED,0xEB,
+0x48,0xEB,0xA4,0xEB,0x6E,0xAC,0xF7,0x59,0xBF,0xAF,0x4A,0xBD,0x6A,0x41,0xD5,0xD0,0x86,0xF0,0x0D,
+0xAD,0x1B,0xF1,0x8D,0xE5,0x1B,0x5F,0x6D,0x4A,0xDE,0x74,0xA1,0x7A,0x6A,0xF5,0x8E,0xCD,0xB4,0xCD,
+0xCA,0xCD,0x03,0x35,0x61,0x35,0xED,0x5B,0xCC,0xB6,0xAC,0xDB,0xF2,0xA1,0x36,0xA3,0xF6,0x7A,0x9D,
+0x7F,0x5D,0xCB,0x56,0xFD,0xAD,0xAB,0xB7,0xBE,0xD9,0x26,0xDA,0xD6,0xBF,0xDD,0x77,0x7B,0xF3,0x0E,
+0x83,0x1D,0x15,0x3B,0xDE,0xEF,0x94,0xEC,0xBC,0xB5,0x2B,0x78,0x57,0x6B,0xBD,0x45,0x7D,0xF5,0x6E,
+0xD2,0xEE,0x82,0xDD,0x8F,0x1A,0x62,0x1B,0xBA,0xBF,0xE6,0x7E,0xDD,0xB8,0x47,0x77,0x4F,0xC5,0x9E,
+0x8F,0x7B,0xA5,0x7B,0x07,0xF6,0x45,0xEF,0xEB,0x6A,0x74,0x6F,0x6C,0xDC,0xAF,0xBF,0xBF,0xB2,0x09,
+0x6D,0x52,0x36,0x8D,0x1E,0x48,0x3A,0x70,0xE5,0x9B,0x80,0x6F,0xDA,0x9B,0xED,0x9A,0x77,0xB5,0x70,
+0x5A,0x2A,0x0E,0xC2,0x41,0xE5,0xC1,0x27,0xDF,0xA6,0x7C,0x7B,0xE3,0x50,0xE8,0xA1,0xCE,0xC3,0xDC,
+0xC3,0xCD,0xDF,0x99,0x7F,0xB7,0xF5,0x08,0xEB,0x48,0x79,0x2B,0xD2,0x3A,0xBF,0x75,0xAC,0x2D,0xA3,
+0x6D,0xA0,0x3D,0xA1,0xBD,0xEF,0xE8,0x8C,0xA3,0x9D,0x1D,0x5E,0x1D,0x47,0xBE,0xB7,0xFF,0x7E,0xEF,
+0x31,0xE3,0x63,0x75,0xC7,0x35,0x8F,0x57,0x9E,0xA0,0x9D,0x28,0x3D,0xF1,0xF9,0xE4,0x82,0x93,0xE3,
+0xA7,0x64,0xA7,0x9E,0x9D,0x4E,0x3F,0x3D,0xD4,0x99,0xDC,0x79,0xF7,0x4C,0xFC,0x99,0x6B,0x5D,0x51,
+0x5D,0xBD,0x67,0x43,0xCF,0x9E,0x3F,0x17,0x74,0xEE,0x4C,0xB7,0x5F,0xF7,0xC9,0xF3,0xDE,0xE7,0x8F,
+0x5D,0xF0,0xBC,0x70,0xF4,0x22,0xF7,0x62,0xDB,0x25,0xB7,0x4B,0xAD,0x3D,0xAE,0x3D,0x47,0x7E,0x70,
+0xFD,0xE1,0x48,0xAF,0x5B,0x6F,0xEB,0x65,0xF7,0xCB,0xED,0x57,0x3C,0xAE,0x74,0xF4,0x4D,0xEB,0x3B,
+0xD1,0xEF,0xD3,0x7F,0xFA,0x6A,0xC0,0xD5,0x73,0xD7,0xF8,0xD7,0x2E,0x5D,0x9F,0x79,0xBD,0xEF,0xC6,
+0xEC,0x1B,0xB7,0x6E,0x26,0xDD,0x1C,0xB8,0x25,0xBA,0xF5,0xF8,0x76,0xF6,0xED,0x17,0x77,0x0A,0xEE,
+0x4C,0xDC,0x5D,0x7A,0x8F,0x78,0xAF,0xFC,0xBE,0xDA,0xFD,0xEA,0x07,0xFA,0x0F,0xEA,0x7F,0xB4,0xFE,
+0xB1,0x65,0xC0,0x6D,0xE0,0xF8,0x60,0xC0,0x60,0xCF,0xC3,0x59,0x0F,0xEF,0x0E,0x09,0x87,0x9E,0xFE,
+0x94,0xFF,0xD3,0x87,0xE1,0xD2,0x47,0xCC,0x47,0xD5,0x23,0x46,0x23,0x8D,0x8F,0x9D,0x1F,0x1F,0x1B,
+0x0D,0x1A,0xBD,0xF2,0x64,0xCE,0x93,0xE1,0xA7,0xB2,0xA7,0x13,0xCF,0xCA,0x7E,0x56,0xFF,0x79,0xEB,
+0x73,0xAB,0xE7,0xDF,0xFD,0xE2,0xFB,0x4B,0xCF,0x58,0xFC,0xD8,0xF0,0x0B,0xF9,0x8B,0xCF,0xBF,0xAE,
+0x79,0xA9,0xF3,0x72,0xEF,0xAB,0xA9,0xAF,0x3A,0xC7,0x23,0xC7,0x1F,0xBC,0xCE,0x79,0x3D,0xF1,0xA6,
+0xFC,0xAD,0xCE,0xDB,0x7D,0xEF,0xB8,0xEF,0xBA,0xDF,0xC7,0xBD,0x1F,0x99,0x28,0xFC,0x40,0xFE,0x50,
+0xF3,0xD1,0xFA,0x63,0xC7,0xA7,0xD0,0x4F,0xF7,0x3E,0xE7,0x7C,0xFE,0xFC,0x2F,0xF7,0x84,0xF3,0xFB,
+0x25,0xD2,0x9F,0x33,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4D,0x00,0x00,0x7A,0x25,0x00,0x00,0x80,
+0x83,0x00,0x00,0xF9,0xFF,0x00,0x00,0x80,0xE9,0x00,0x00,0x75,0x30,0x00,0x00,0xEA,0x60,0x00,0x00,
+0x3A,0x98,0x00,0x00,0x17,0x6F,0x92,0x5F,0xC5,0x46,0x00,0x00,0x03,0x40,0x49,0x44,0x41,0x54,0x78,
+0xDA,0xEC,0x5A,0xED,0x71,0xE2,0x40,0x0C,0x7D,0x64,0xEE,0x3F,0x7B,0x15,0x9C,0xAF,0x82,0x38,0x15,
+0x9C,0xA9,0xE0,0xA0,0x82,0x90,0x0A,0xC2,0x55,0x00,0x54,0xC0,0xA5,0x02,0xE8,0xC0,0x50,0x81,0x49,
+0x05,0x71,0x07,0xB8,0x03,0x7C,0x15,0xE8,0xFE,0x68,0x27,0x42,0xD1,0x62,0xC2,0x67,0x48,0xF6,0xCD,
+0x78,0x6C,0xCB,0xFB,0xA1,0x5D,0xAD,0xA4,0xB7,0x0B,0x2D,0x22,0x42,0xC4,0xE5,0x70,0x13,0xA7,0x20,
+0x1A,0x20,0x1A,0x20,0x22,0x1A,0x20,0x1A,0x20,0xE2,0x32,0xF8,0xC6,0x77,0x07,0x20,0xE5,0xE7,0x8A,
+0xAF,0x6B,0x80,0xD7,0x3B,0x05,0x50,0x03,0x98,0x5D,0xAB,0x07,0xA4,0x00,0x0A,0xBE,0xEE,0xAF,0x48,
+0x7F,0xAF,0xF7,0x44,0xE9,0xDD,0x07,0x30,0x60,0x03,0x5D,0x85,0x07,0x7C,0x26,0xF4,0x01,0x4C,0xF9,
+0xF9,0x16,0xC0,0x43,0xCC,0x01,0xE7,0x0F,0x4B,0xD6,0x73,0xF4,0x80,0x33,0xE1,0x2F,0xDF,0xDB,0x00,
+0x9E,0xBE,0x8A,0x01,0x64,0x12,0x5F,0x9E,0xA0,0xBC,0x47,0xC6,0xF7,0x92,0x93,0xAE,0x44,0x69,0x18,
+0x61,0x57,0x3D,0x6A,0x55,0x7F,0x17,0x7D,0x53,0x96,0x2F,0x0F,0x9A,0x39,0x22,0x02,0x11,0x65,0xF4,
+0x8A,0x21,0xCB,0x76,0xB9,0x52,0x22,0x2A,0xE8,0x2D,0xA6,0x44,0xE4,0x8C,0xF2,0x09,0x11,0xE5,0xAA,
+0xEC,0x9A,0x88,0x06,0xFC,0x7D,0x25,0xEA,0xFB,0x3A,0x8E,0x88,0x26,0x46,0x1F,0xC3,0x80,0xDE,0x21,
+0x59,0xC1,0x7D,0x65,0xDC,0xE6,0x54,0xB5,0xB7,0xE2,0xF1,0x40,0xF5,0x3D,0x35,0xF4,0xED,0xAA,0x71,
+0x67,0xEF,0x98,0xB3,0x8D,0xEB,0x10,0x0F,0xF0,0x0C,0xC4,0x05,0x12,0x61,0x0A,0xA0,0x23,0x56,0x6A,
+0x02,0xE0,0xC5,0x28,0xEF,0x98,0xC5,0xB4,0xB9,0x0C,0x14,0x0D,0x2E,0xC4,0xEA,0x93,0x18,0x35,0xAC,
+0x5A,0xDD,0x87,0xF7,0x9E,0x47,0x7E,0xD6,0x7A,0x24,0x00,0x72,0x00,0x3F,0x85,0x2C,0x17,0xF5,0x64,
+0x5B,0xF9,0xB1,0xA8,0xFA,0xCD,0x01,0x21,0x27,0xE7,0x7B,0xCD,0x4C,0xA3,0x05,0xE0,0x3B,0x4F,0x8C,
+0x37,0xD0,0x54,0xD4,0x99,0x8A,0x41,0xCF,0x79,0xA0,0x2D,0x36,0x52,0x29,0xEA,0x49,0x0C,0xC5,0xE4,
+0x97,0x5C,0xB6,0xC5,0x75,0xE7,0x01,0xC3,0x58,0x90,0xE1,0xAA,0xCB,0xEF,0x1D,0xD1,0xBF,0x5C,0x24,
+0xA9,0x58,0x44,0x32,0xE4,0xDD,0x71,0xF9,0x3B,0x7E,0x4F,0x8E,0x12,0xBC,0xF7,0x0C,0x41,0x7D,0x51,
+0xBE,0x6B,0x7C,0x97,0x21,0x23,0xE1,0x4B,0xBA,0xBA,0x15,0x9A,0xD6,0x86,0x4B,0xAF,0x55,0x3B,0xBA,
+0xDE,0x6A,0xC7,0x10,0x04,0xD5,0xBF,0xDB,0xA2,0xAF,0xEF,0xBB,0xD8,0xD2,0x77,0xA2,0xC2,0xD2,0xDE,
+0x21,0x68,0x5F,0x0F,0xF8,0x2D,0x42,0xC5,0xDC,0xF8,0xFE,0xA4,0x56,0x5C,0x57,0xBC,0x8F,0x8D,0xF2,
+0x56,0x3B,0xA9,0xF0,0x98,0x59,0xC0,0xE5,0xC7,0x7B,0xE8,0x5E,0x19,0x09,0xBC,0x6E,0x48,0xF8,0x95,
+0xD1,0x46,0xA9,0xDE,0xCF,0xCA,0x82,0x5C,0x43,0xC7,0x52,0xDE,0xDE,0xF2,0x6D,0x9B,0xDC,0xED,0x51,
+0xE7,0x14,0xA8,0x77,0x90,0x57,0xE7,0xCE,0x01,0x4D,0x1B,0x1D,0xF7,0x01,0xEA,0x1C,0x8A,0x4A,0x78,
+0x82,0xDB,0x92,0xD4,0x2F,0x92,0x84,0x17,0x22,0x4C,0x58,0x8A,0x3C,0xAA,0xB2,0xCF,0x81,0x6F,0x72,
+0x40,0x7D,0x25,0x5B,0x2A,0x56,0x65,0x4D,0xF6,0x29,0xCF,0xAD,0x64,0x48,0x9C,0x88,0xFE,0x3D,0x6B,
+0x3B,0xFB,0x51,0x84,0xB7,0x7A,0xC2,0x31,0xB9,0x16,0xCA,0x25,0x2A,0x76,0x0E,0xC4,0x24,0x96,0x7C,
+0xAF,0x8C,0xEF,0x72,0x40,0x72,0x82,0x7F,0x89,0xD8,0xAF,0x59,0x97,0xC7,0x40,0xE5,0x96,0x63,0x63,
+0x2C,0xC6,0xD8,0x07,0xB0,0x62,0x4A,0xBC,0x32,0x16,0x8B,0x64,0x7A,0x64,0xB0,0x3F,0x2D,0xDB,0xCA,
+0x82,0x9A,0x30,0x34,0x98,0x10,0x31,0x6B,0x78,0x51,0x1B,0x96,0x54,0x6D,0xDA,0xF4,0xC6,0xA7,0x10,
+0x4C,0x67,0x6D,0xF4,0xE1,0x94,0x7C,0xCD,0x75,0x56,0xA2,0x0D,0x52,0x9B,0xB7,0x26,0x16,0x54,0x18,
+0x6C,0x64,0x18,0x60,0x34,0xA9,0xEA,0xC3,0x23,0x57,0x63,0xB5,0xE6,0x30,0x0B,0xC8,0x0E,0x66,0x41,
+0xFF,0xC4,0xEA,0x7C,0x10,0xAB,0x24,0xC3,0xE6,0x6F,0x0A,0x1D,0xC5,0x14,0x4A,0x83,0x73,0xFB,0xF8,
+0x3A,0x02,0xD0,0x0B,0x24,0x3A,0xD9,0x8E,0xF6,0xC2,0x3F,0x6A,0x23,0x75,0x6C,0x94,0xBC,0xE7,0xE8,
+0xB1,0x8E,0x23,0xDE,0x07,0xF4,0x8C,0x5C,0x21,0xD9,0x55,0x8D,0xD7,0xDF,0x55,0xB4,0x6C,0x03,0x2D,
+0xFE,0x5B,0x8A,0xDB,0x71,0x53,0x93,0x70,0x6C,0xAC,0x8D,0xD0,0x74,0xCB,0xEF,0xCF,0x0D,0xE7,0x23,
+0x8E,0x43,0xC7,0x0F,0x36,0xE6,0x5C,0x85,0xA7,0x2A,0xC0,0x2A,0xBA,0xA2,0x8F,0x85,0x30,0x4A,0x26,
+0x06,0x58,0x22,0xFC,0xE3,0x92,0x2E,0xA7,0xC7,0x95,0x18,0xE7,0x4C,0x43,0x96,0x2F,0x78,0x4C,0x35,
+0xBF,0xDF,0x8B,0x8D,0xE3,0x4C,0x1C,0x79,0xA7,0x4C,0xD1,0xA5,0x7E,0x96,0xEC,0x8D,0x01,0x22,0x6C,
+0xE4,0x0D,0x79,0xA6,0x66,0x8F,0xB8,0x18,0x0D,0xFD,0xEC,0x18,0x07,0x36,0x9A,0x9E,0x60,0x74,0x0E,
+0xDD,0x8B,0x44,0x0F,0x78,0xFF,0x51,0x78,0xE8,0x38,0x3C,0x1A,0xE0,0x1A,0x11,0x43,0x50,0x34,0x40,
+0x34,0x40,0x44,0x34,0xC0,0xD7,0xC5,0xFF,0x01,0x00,0xCC,0x01,0x97,0x8B,0x00,0x58,0xE9,0x5F,0x00,
+0x00,0x00,0x00,0x49,0x45,0x4E,0x44,0xAE,0x42,0x60,0x82};
+unsigned char LoadCircle[]=
+{0x89,0x50,0x4E,0x47,0x0D,0x0A,0x1A,0x0A,0x00,0x00,0x00,0x0D,0x49,0x48,0x44,0x52,0x00,0x00,0x00,0x30,
+0x00,0x00,0x00,0x2E,0x08,0x06,0x00,0x00,0x00,0x6E,0xDE,0x9A,0x6C,0x00,0x00,0x00,0x09,0x70,0x48,
+0x59,0x73,0x00,0x00,0x0B,0x13,0x00,0x00,0x0B,0x13,0x01,0x00,0x9A,0x9C,0x18,0x00,0x00,0x0A,0x4D,
+0x69,0x43,0x43,0x50,0x50,0x68,0x6F,0x74,0x6F,0x73,0x68,0x6F,0x70,0x20,0x49,0x43,0x43,0x20,0x70,
+0x72,0x6F,0x66,0x69,0x6C,0x65,0x00,0x00,0x78,0xDA,0x9D,0x53,0x77,0x58,0x93,0xF7,0x16,0x3E,0xDF,
+0xF7,0x65,0x0F,0x56,0x42,0xD8,0xF0,0xB1,0x97,0x6C,0x81,0x00,0x22,0x23,0xAC,0x08,0xC8,0x10,0x59,
+0xA2,0x10,0x92,0x00,0x61,0x84,0x10,0x12,0x40,0xC5,0x85,0x88,0x0A,0x56,0x14,0x15,0x11,0x9C,0x48,
+0x55,0xC4,0x82,0xD5,0x0A,0x48,0x9D,0x88,0xE2,0xA0,0x28,0xB8,0x67,0x41,0x8A,0x88,0x5A,0x8B,0x55,
+0x5C,0x38,0xEE,0x1F,0xDC,0xA7,0xB5,0x7D,0x7A,0xEF,0xED,0xED,0xFB,0xD7,0xFB,0xBC,0xE7,0x9C,0xE7,
+0xFC,0xCE,0x79,0xCF,0x0F,0x80,0x11,0x12,0x26,0x91,0xE6,0xA2,0x6A,0x00,0x39,0x52,0x85,0x3C,0x3A,
+0xD8,0x1F,0x8F,0x4F,0x48,0xC4,0xC9,0xBD,0x80,0x02,0x15,0x48,0xE0,0x04,0x20,0x10,0xE6,0xCB,0xC2,
+0x67,0x05,0xC5,0x00,0x00,0xF0,0x03,0x79,0x78,0x7E,0x74,0xB0,0x3F,0xFC,0x01,0xAF,0x6F,0x00,0x02,
+0x00,0x70,0xD5,0x2E,0x24,0x12,0xC7,0xE1,0xFF,0x83,0xBA,0x50,0x26,0x57,0x00,0x20,0x91,0x00,0xE0,
+0x22,0x12,0xE7,0x0B,0x01,0x90,0x52,0x00,0xC8,0x2E,0x54,0xC8,0x14,0x00,0xC8,0x18,0x00,0xB0,0x53,
+0xB3,0x64,0x0A,0x00,0x94,0x00,0x00,0x6C,0x79,0x7C,0x42,0x22,0x00,0xAA,0x0D,0x00,0xEC,0xF4,0x49,
+0x3E,0x05,0x00,0xD8,0xA9,0x93,0xDC,0x17,0x00,0xD8,0xA2,0x1C,0xA9,0x08,0x00,0x8D,0x01,0x00,0x99,
+0x28,0x47,0x24,0x02,0x40,0xBB,0x00,0x60,0x55,0x81,0x52,0x2C,0x02,0xC0,0xC2,0x00,0xA0,0xAC,0x40,
+0x22,0x2E,0x04,0xC0,0xAE,0x01,0x80,0x59,0xB6,0x32,0x47,0x02,0x80,0xBD,0x05,0x00,0x76,0x8E,0x58,
+0x90,0x0F,0x40,0x60,0x00,0x80,0x99,0x42,0x2C,0xCC,0x00,0x20,0x38,0x02,0x00,0x43,0x1E,0x13,0xCD,
+0x03,0x20,0x4C,0x03,0xA0,0x30,0xD2,0xBF,0xE0,0xA9,0x5F,0x70,0x85,0xB8,0x48,0x01,0x00,0xC0,0xCB,
+0x95,0xCD,0x97,0x4B,0xD2,0x33,0x14,0xB8,0x95,0xD0,0x1A,0x77,0xF2,0xF0,0xE0,0xE2,0x21,0xE2,0xC2,
+0x6C,0xB1,0x42,0x61,0x17,0x29,0x10,0x66,0x09,0xE4,0x22,0x9C,0x97,0x9B,0x23,0x13,0x48,0xE7,0x03,
+0x4C,0xCE,0x0C,0x00,0x00,0x1A,0xF9,0xD1,0xC1,0xFE,0x38,0x3F,0x90,0xE7,0xE6,0xE4,0xE1,0xE6,0x66,
+0xE7,0x6C,0xEF,0xF4,0xC5,0xA2,0xFE,0x6B,0xF0,0x6F,0x22,0x3E,0x21,0xF1,0xDF,0xFE,0xBC,0x8C,0x02,
+0x04,0x00,0x10,0x4E,0xCF,0xEF,0xDA,0x5F,0xE5,0xE5,0xD6,0x03,0x70,0xC7,0x01,0xB0,0x75,0xBF,0x6B,
+0xA9,0x5B,0x00,0xDA,0x56,0x00,0x68,0xDF,0xF9,0x5D,0x33,0xDB,0x09,0xA0,0x5A,0x0A,0xD0,0x7A,0xF9,
+0x8B,0x79,0x38,0xFC,0x40,0x1E,0x9E,0xA1,0x50,0xC8,0x3C,0x1D,0x1C,0x0A,0x0B,0x0B,0xED,0x25,0x62,
+0xA1,0xBD,0x30,0xE3,0x8B,0x3E,0xFF,0x33,0xE1,0x6F,0xE0,0x8B,0x7E,0xF6,0xFC,0x40,0x1E,0xFE,0xDB,
+0x7A,0xF0,0x00,0x71,0x9A,0x40,0x99,0xAD,0xC0,0xA3,0x83,0xFD,0x71,0x61,0x6E,0x76,0xAE,0x52,0x8E,
+0xE7,0xCB,0x04,0x42,0x31,0x6E,0xF7,0xE7,0x23,0xFE,0xC7,0x85,0x7F,0xFD,0x8E,0x29,0xD1,0xE2,0x34,
+0xB1,0x5C,0x2C,0x15,0x8A,0xF1,0x58,0x89,0xB8,0x50,0x22,0x4D,0xC7,0x79,0xB9,0x52,0x91,0x44,0x21,
+0xC9,0x95,0xE2,0x12,0xE9,0x7F,0x32,0xF1,0x1F,0x96,0xFD,0x09,0x93,0x77,0x0D,0x00,0xAC,0x86,0x4F,
+0xC0,0x4E,0xB6,0x07,0xB5,0xCB,0x6C,0xC0,0x7E,0xEE,0x01,0x02,0x8B,0x0E,0x58,0xD2,0x76,0x00,0x40,
+0x7E,0xF3,0x2D,0x8C,0x1A,0x0B,0x91,0x00,0x10,0x67,0x34,0x32,0x79,0xF7,0x00,0x00,0x93,0xBF,0xF9,
+0x8F,0x40,0x2B,0x01,0x00,0xCD,0x97,0xA4,0xE3,0x00,0x00,0xBC,0xE8,0x18,0x5C,0xA8,0x94,0x17,0x4C,
+0xC6,0x08,0x00,0x00,0x44,0xA0,0x81,0x2A,0xB0,0x41,0x07,0x0C,0xC1,0x14,0xAC,0xC0,0x0E,0x9C,0xC1,
+0x1D,0xBC,0xC0,0x17,0x02,0x61,0x06,0x44,0x40,0x0C,0x24,0xC0,0x3C,0x10,0x42,0x06,0xE4,0x80,0x1C,
+0x0A,0xA1,0x18,0x96,0x41,0x19,0x54,0xC0,0x3A,0xD8,0x04,0xB5,0xB0,0x03,0x1A,0xA0,0x11,0x9A,0xE1,
+0x10,0xB4,0xC1,0x31,0x38,0x0D,0xE7,0xE0,0x12,0x5C,0x81,0xEB,0x70,0x17,0x06,0x60,0x18,0x9E,0xC2,
+0x18,0xBC,0x86,0x09,0x04,0x41,0xC8,0x08,0x13,0x61,0x21,0x3A,0x88,0x11,0x62,0x8E,0xD8,0x22,0xCE,
+0x08,0x17,0x99,0x8E,0x04,0x22,0x61,0x48,0x34,0x92,0x80,0xA4,0x20,0xE9,0x88,0x14,0x51,0x22,0xC5,
+0xC8,0x72,0xA4,0x02,0xA9,0x42,0x6A,0x91,0x5D,0x48,0x23,0xF2,0x2D,0x72,0x14,0x39,0x8D,0x5C,0x40,
+0xFA,0x90,0xDB,0xC8,0x20,0x32,0x8A,0xFC,0x8A,0xBC,0x47,0x31,0x94,0x81,0xB2,0x51,0x03,0xD4,0x02,
+0x75,0x40,0xB9,0xA8,0x1F,0x1A,0x8A,0xC6,0xA0,0x73,0xD1,0x74,0x34,0x0F,0x5D,0x80,0x96,0xA2,0x6B,
+0xD1,0x1A,0xB4,0x1E,0x3D,0x80,0xB6,0xA2,0xA7,0xD1,0x4B,0xE8,0x75,0x74,0x00,0x7D,0x8A,0x8E,0x63,
+0x80,0xD1,0x31,0x0E,0x66,0x8C,0xD9,0x61,0x5C,0x8C,0x87,0x45,0x60,0x89,0x58,0x1A,0x26,0xC7,0x16,
+0x63,0xE5,0x58,0x35,0x56,0x8F,0x35,0x63,0x1D,0x58,0x37,0x76,0x15,0x1B,0xC0,0x9E,0x61,0xEF,0x08,
+0x24,0x02,0x8B,0x80,0x13,0xEC,0x08,0x5E,0x84,0x10,0xC2,0x6C,0x82,0x90,0x90,0x47,0x58,0x4C,0x58,
+0x43,0xA8,0x25,0xEC,0x23,0xB4,0x12,0xBA,0x08,0x57,0x09,0x83,0x84,0x31,0xC2,0x27,0x22,0x93,0xA8,
+0x4F,0xB4,0x25,0x7A,0x12,0xF9,0xC4,0x78,0x62,0x3A,0xB1,0x90,0x58,0x46,0xAC,0x26,0xEE,0x21,0x1E,
+0x21,0x9E,0x25,0x5E,0x27,0x0E,0x13,0x5F,0x93,0x48,0x24,0x0E,0xC9,0x92,0xE4,0x4E,0x0A,0x21,0x25,
+0x90,0x32,0x49,0x0B,0x49,0x6B,0x48,0xDB,0x48,0x2D,0xA4,0x53,0xA4,0x3E,0xD2,0x10,0x69,0x9C,0x4C,
+0x26,0xEB,0x90,0x6D,0xC9,0xDE,0xE4,0x08,0xB2,0x80,0xAC,0x20,0x97,0x91,0xB7,0x90,0x0F,0x90,0x4F,
+0x92,0xFB,0xC9,0xC3,0xE4,0xB7,0x14,0x3A,0xC5,0x88,0xE2,0x4C,0x09,0xA2,0x24,0x52,0xA4,0x94,0x12,
+0x4A,0x35,0x65,0x3F,0xE5,0x04,0xA5,0x9F,0x32,0x42,0x99,0xA0,0xAA,0x51,0xCD,0xA9,0x9E,0xD4,0x08,
+0xAA,0x88,0x3A,0x9F,0x5A,0x49,0x6D,0xA0,0x76,0x50,0x2F,0x53,0x87,0xA9,0x13,0x34,0x75,0x9A,0x25,
+0xCD,0x9B,0x16,0x43,0xCB,0xA4,0x2D,0xA3,0xD5,0xD0,0x9A,0x69,0x67,0x69,0xF7,0x68,0x2F,0xE9,0x74,
+0xBA,0x09,0xDD,0x83,0x1E,0x45,0x97,0xD0,0x97,0xD2,0x6B,0xE8,0x07,0xE9,0xE7,0xE9,0x83,0xF4,0x77,
+0x0C,0x0D,0x86,0x0D,0x83,0xC7,0x48,0x62,0x28,0x19,0x6B,0x19,0x7B,0x19,0xA7,0x18,0xB7,0x19,0x2F,
+0x99,0x4C,0xA6,0x05,0xD3,0x97,0x99,0xC8,0x54,0x30,0xD7,0x32,0x1B,0x99,0x67,0x98,0x0F,0x98,0x6F,
+0x55,0x58,0x2A,0xF6,0x2A,0x7C,0x15,0x91,0xCA,0x12,0x95,0x3A,0x95,0x56,0x95,0x7E,0x95,0xE7,0xAA,
+0x54,0x55,0x73,0x55,0x3F,0xD5,0x79,0xAA,0x0B,0x54,0xAB,0x55,0x0F,0xAB,0x5E,0x56,0x7D,0xA6,0x46,
+0x55,0xB3,0x50,0xE3,0xA9,0x09,0xD4,0x16,0xAB,0xD5,0xA9,0x1D,0x55,0xBB,0xA9,0x36,0xAE,0xCE,0x52,
+0x77,0x52,0x8F,0x50,0xCF,0x51,0x5F,0xA3,0xBE,0x5F,0xFD,0x82,0xFA,0x63,0x0D,0xB2,0x86,0x85,0x46,
+0xA0,0x86,0x48,0xA3,0x54,0x63,0xB7,0xC6,0x19,0x8D,0x21,0x16,0xC6,0x32,0x65,0xF1,0x58,0x42,0xD6,
+0x72,0x56,0x03,0xEB,0x2C,0x6B,0x98,0x4D,0x62,0x5B,0xB2,0xF9,0xEC,0x4C,0x76,0x05,0xFB,0x1B,0x76,
+0x2F,0x7B,0x4C,0x53,0x43,0x73,0xAA,0x66,0xAC,0x66,0x91,0x66,0x9D,0xE6,0x71,0xCD,0x01,0x0E,0xC6,
+0xB1,0xE0,0xF0,0x39,0xD9,0x9C,0x4A,0xCE,0x21,0xCE,0x0D,0xCE,0x7B,0x2D,0x03,0x2D,0x3F,0x2D,0xB1,
+0xD6,0x6A,0xAD,0x66,0xAD,0x7E,0xAD,0x37,0xDA,0x7A,0xDA,0xBE,0xDA,0x62,0xED,0x72,0xED,0x16,0xED,
+0xEB,0xDA,0xEF,0x75,0x70,0x9D,0x40,0x9D,0x2C,0x9D,0xF5,0x3A,0x6D,0x3A,0xF7,0x75,0x09,0xBA,0x36,
+0xBA,0x51,0xBA,0x85,0xBA,0xDB,0x75,0xCF,0xEA,0x3E,0xD3,0x63,0xEB,0x79,0xE9,0x09,0xF5,0xCA,0xF5,
+0x0E,0xE9,0xDD,0xD1,0x47,0xF5,0x6D,0xF4,0xA3,0xF5,0x17,0xEA,0xEF,0xD6,0xEF,0xD1,0x1F,0x37,0x30,
+0x34,0x08,0x36,0x90,0x19,0x6C,0x31,0x38,0x63,0xF0,0xCC,0x90,0x63,0xE8,0x6B,0x98,0x69,0xB8,0xD1,
+0xF0,0x84,0xE1,0xA8,0x11,0xCB,0x68,0xBA,0x91,0xC4,0x68,0xA3,0xD1,0x49,0xA3,0x27,0xB8,0x26,0xEE,
+0x87,0x67,0xE3,0x35,0x78,0x17,0x3E,0x66,0xAC,0x6F,0x1C,0x62,0xAC,0x34,0xDE,0x65,0xDC,0x6B,0x3C,
+0x61,0x62,0x69,0x32,0xDB,0xA4,0xC4,0xA4,0xC5,0xE4,0xBE,0x29,0xCD,0x94,0x6B,0x9A,0x66,0xBA,0xD1,
+0xB4,0xD3,0x74,0xCC,0xCC,0xC8,0x2C,0xDC,0xAC,0xD8,0xAC,0xC9,0xEC,0x8E,0x39,0xD5,0x9C,0x6B,0x9E,
+0x61,0xBE,0xD9,0xBC,0xDB,0xFC,0x8D,0x85,0xA5,0x45,0x9C,0xC5,0x4A,0x8B,0x36,0x8B,0xC7,0x96,0xDA,
+0x96,0x7C,0xCB,0x05,0x96,0x4D,0x96,0xF7,0xAC,0x98,0x56,0x3E,0x56,0x79,0x56,0xF5,0x56,0xD7,0xAC,
+0x49,0xD6,0x5C,0xEB,0x2C,0xEB,0x6D,0xD6,0x57,0x6C,0x50,0x1B,0x57,0x9B,0x0C,0x9B,0x3A,0x9B,0xCB,
+0xB6,0xA8,0xAD,0x9B,0xAD,0xC4,0x76,0x9B,0x6D,0xDF,0x14,0xE2,0x14,0x8F,0x29,0xD2,0x29,0xF5,0x53,
+0x6E,0xDA,0x31,0xEC,0xFC,0xEC,0x0A,0xEC,0x9A,0xEC,0x06,0xED,0x39,0xF6,0x61,0xF6,0x25,0xF6,0x6D,
+0xF6,0xCF,0x1D,0xCC,0x1C,0x12,0x1D,0xD6,0x3B,0x74,0x3B,0x7C,0x72,0x74,0x75,0xCC,0x76,0x6C,0x70,
+0xBC,0xEB,0xA4,0xE1,0x34,0xC3,0xA9,0xC4,0xA9,0xC3,0xE9,0x57,0x67,0x1B,0x67,0xA1,0x73,0x9D,0xF3,
+0x35,0x17,0xA6,0x4B,0x90,0xCB,0x12,0x97,0x76,0x97,0x17,0x53,0x6D,0xA7,0x8A,0xA7,0x6E,0x9F,0x7A,
+0xCB,0x95,0xE5,0x1A,0xEE,0xBA,0xD2,0xB5,0xD3,0xF5,0xA3,0x9B,0xBB,0x9B,0xDC,0xAD,0xD9,0x6D,0xD4,
+0xDD,0xCC,0x3D,0xC5,0x7D,0xAB,0xFB,0x4D,0x2E,0x9B,0x1B,0xC9,0x5D,0xC3,0x3D,0xEF,0x41,0xF4,0xF0,
+0xF7,0x58,0xE2,0x71,0xCC,0xE3,0x9D,0xA7,0x9B,0xA7,0xC2,0xF3,0x90,0xE7,0x2F,0x5E,0x76,0x5E,0x59,
+0x5E,0xFB,0xBD,0x1E,0x4F,0xB3,0x9C,0x26,0x9E,0xD6,0x30,0x6D,0xC8,0xDB,0xC4,0x5B,0xE0,0xBD,0xCB,
+0x7B,0x60,0x3A,0x3E,0x3D,0x65,0xFA,0xCE,0xE9,0x03,0x3E,0xC6,0x3E,0x02,0x9F,0x7A,0x9F,0x87,0xBE,
+0xA6,0xBE,0x22,0xDF,0x3D,0xBE,0x23,0x7E,0xD6,0x7E,0x99,0x7E,0x07,0xFC,0x9E,0xFB,0x3B,0xFA,0xCB,
+0xFD,0x8F,0xF8,0xBF,0xE1,0x79,0xF2,0x16,0xF1,0x4E,0x05,0x60,0x01,0xC1,0x01,0xE5,0x01,0xBD,0x81,
+0x1A,0x81,0xB3,0x03,0x6B,0x03,0x1F,0x04,0x99,0x04,0xA5,0x07,0x35,0x05,0x8D,0x05,0xBB,0x06,0x2F,
+0x0C,0x3E,0x15,0x42,0x0C,0x09,0x0D,0x59,0x1F,0x72,0x93,0x6F,0xC0,0x17,0xF2,0x1B,0xF9,0x63,0x33,
+0xDC,0x67,0x2C,0x9A,0xD1,0x15,0xCA,0x08,0x9D,0x15,0x5A,0x1B,0xFA,0x30,0xCC,0x26,0x4C,0x1E,0xD6,
+0x11,0x8E,0x86,0xCF,0x08,0xDF,0x10,0x7E,0x6F,0xA6,0xF9,0x4C,0xE9,0xCC,0xB6,0x08,0x88,0xE0,0x47,
+0x6C,0x88,0xB8,0x1F,0x69,0x19,0x99,0x17,0xF9,0x7D,0x14,0x29,0x2A,0x32,0xAA,0x2E,0xEA,0x51,0xB4,
+0x53,0x74,0x71,0x74,0xF7,0x2C,0xD6,0xAC,0xE4,0x59,0xFB,0x67,0xBD,0x8E,0xF1,0x8F,0xA9,0x8C,0xB9,
+0x3B,0xDB,0x6A,0xB6,0x72,0x76,0x67,0xAC,0x6A,0x6C,0x52,0x6C,0x63,0xEC,0x9B,0xB8,0x80,0xB8,0xAA,
+0xB8,0x81,0x78,0x87,0xF8,0x45,0xF1,0x97,0x12,0x74,0x13,0x24,0x09,0xED,0x89,0xE4,0xC4,0xD8,0xC4,
+0x3D,0x89,0xE3,0x73,0x02,0xE7,0x6C,0x9A,0x33,0x9C,0xE4,0x9A,0x54,0x96,0x74,0x63,0xAE,0xE5,0xDC,
+0xA2,0xB9,0x17,0xE6,0xE9,0xCE,0xCB,0x9E,0x77,0x3C,0x59,0x35,0x59,0x90,0x7C,0x38,0x85,0x98,0x12,
+0x97,0xB2,0x3F,0xE5,0x83,0x20,0x42,0x50,0x2F,0x18,0x4F,0xE5,0xA7,0x6E,0x4D,0x1D,0x13,0xF2,0x84,
+0x9B,0x85,0x4F,0x45,0xBE,0xA2,0x8D,0xA2,0x51,0xB1,0xB7,0xB8,0x4A,0x3C,0x92,0xE6,0x9D,0x56,0x95,
+0xF6,0x38,0xDD,0x3B,0x7D,0x43,0xFA,0x68,0x86,0x4F,0x46,0x75,0xC6,0x33,0x09,0x4F,0x52,0x2B,0x79,
+0x91,0x19,0x92,0xB9,0x23,0xF3,0x4D,0x56,0x44,0xD6,0xDE,0xAC,0xCF,0xD9,0x71,0xD9,0x2D,0x39,0x94,
+0x9C,0x94,0x9C,0xA3,0x52,0x0D,0x69,0x96,0xB4,0x2B,0xD7,0x30,0xB7,0x28,0xB7,0x4F,0x66,0x2B,0x2B,
+0x93,0x0D,0xE4,0x79,0xE6,0x6D,0xCA,0x1B,0x93,0x87,0xCA,0xF7,0xE4,0x23,0xF9,0x73,0xF3,0xDB,0x15,
+0x6C,0x85,0x4C,0xD1,0xA3,0xB4,0x52,0xAE,0x50,0x0E,0x16,0x4C,0x2F,0xA8,0x2B,0x78,0x5B,0x18,0x5B,
+0x78,0xB8,0x48,0xBD,0x48,0x5A,0xD4,0x33,0xDF,0x66,0xFE,0xEA,0xF9,0x23,0x0B,0x82,0x16,0x7C,0xBD,
+0x90,0xB0,0x50,0xB8,0xB0,0xB3,0xD8,0xB8,0x78,0x59,0xF1,0xE0,0x22,0xBF,0x45,0xBB,0x16,0x23,0x8B,
+0x53,0x17,0x77,0x2E,0x31,0x5D,0x52,0xBA,0x64,0x78,0x69,0xF0,0xD2,0x7D,0xCB,0x68,0xCB,0xB2,0x96,
+0xFD,0x50,0xE2,0x58,0x52,0x55,0xF2,0x6A,0x79,0xDC,0xF2,0x8E,0x52,0x83,0xD2,0xA5,0xA5,0x43,0x2B,
+0x82,0x57,0x34,0x95,0xA9,0x94,0xC9,0xCB,0x6E,0xAE,0xF4,0x5A,0xB9,0x63,0x15,0x61,0x95,0x64,0x55,
+0xEF,0x6A,0x97,0xD5,0x5B,0x56,0x7F,0x2A,0x17,0x95,0x5F,0xAC,0x70,0xAC,0xA8,0xAE,0xF8,0xB0,0x46,
+0xB8,0xE6,0xE2,0x57,0x4E,0x5F,0xD5,0x7C,0xF5,0x79,0x6D,0xDA,0xDA,0xDE,0x4A,0xB7,0xCA,0xED,0xEB,
+0x48,0xEB,0xA4,0xEB,0x6E,0xAC,0xF7,0x59,0xBF,0xAF,0x4A,0xBD,0x6A,0x41,0xD5,0xD0,0x86,0xF0,0x0D,
+0xAD,0x1B,0xF1,0x8D,0xE5,0x1B,0x5F,0x6D,0x4A,0xDE,0x74,0xA1,0x7A,0x6A,0xF5,0x8E,0xCD,0xB4,0xCD,
+0xCA,0xCD,0x03,0x35,0x61,0x35,0xED,0x5B,0xCC,0xB6,0xAC,0xDB,0xF2,0xA1,0x36,0xA3,0xF6,0x7A,0x9D,
+0x7F,0x5D,0xCB,0x56,0xFD,0xAD,0xAB,0xB7,0xBE,0xD9,0x26,0xDA,0xD6,0xBF,0xDD,0x77,0x7B,0xF3,0x0E,
+0x83,0x1D,0x15,0x3B,0xDE,0xEF,0x94,0xEC,0xBC,0xB5,0x2B,0x78,0x57,0x6B,0xBD,0x45,0x7D,0xF5,0x6E,
+0xD2,0xEE,0x82,0xDD,0x8F,0x1A,0x62,0x1B,0xBA,0xBF,0xE6,0x7E,0xDD,0xB8,0x47,0x77,0x4F,0xC5,0x9E,
+0x8F,0x7B,0xA5,0x7B,0x07,0xF6,0x45,0xEF,0xEB,0x6A,0x74,0x6F,0x6C,0xDC,0xAF,0xBF,0xBF,0xB2,0x09,
+0x6D,0x52,0x36,0x8D,0x1E,0x48,0x3A,0x70,0xE5,0x9B,0x80,0x6F,0xDA,0x9B,0xED,0x9A,0x77,0xB5,0x70,
+0x5A,0x2A,0x0E,0xC2,0x41,0xE5,0xC1,0x27,0xDF,0xA6,0x7C,0x7B,0xE3,0x50,0xE8,0xA1,0xCE,0xC3,0xDC,
+0xC3,0xCD,0xDF,0x99,0x7F,0xB7,0xF5,0x08,0xEB,0x48,0x79,0x2B,0xD2,0x3A,0xBF,0x75,0xAC,0x2D,0xA3,
+0x6D,0xA0,0x3D,0xA1,0xBD,0xEF,0xE8,0x8C,0xA3,0x9D,0x1D,0x5E,0x1D,0x47,0xBE,0xB7,0xFF,0x7E,0xEF,
+0x31,0xE3,0x63,0x75,0xC7,0x35,0x8F,0x57,0x9E,0xA0,0x9D,0x28,0x3D,0xF1,0xF9,0xE4,0x82,0x93,0xE3,
+0xA7,0x64,0xA7,0x9E,0x9D,0x4E,0x3F,0x3D,0xD4,0x99,0xDC,0x79,0xF7,0x4C,0xFC,0x99,0x6B,0x5D,0x51,
+0x5D,0xBD,0x67,0x43,0xCF,0x9E,0x3F,0x17,0x74,0xEE,0x4C,0xB7,0x5F,0xF7,0xC9,0xF3,0xDE,0xE7,0x8F,
+0x5D,0xF0,0xBC,0x70,0xF4,0x22,0xF7,0x62,0xDB,0x25,0xB7,0x4B,0xAD,0x3D,0xAE,0x3D,0x47,0x7E,0x70,
+0xFD,0xE1,0x48,0xAF,0x5B,0x6F,0xEB,0x65,0xF7,0xCB,0xED,0x57,0x3C,0xAE,0x74,0xF4,0x4D,0xEB,0x3B,
+0xD1,0xEF,0xD3,0x7F,0xFA,0x6A,0xC0,0xD5,0x73,0xD7,0xF8,0xD7,0x2E,0x5D,0x9F,0x79,0xBD,0xEF,0xC6,
+0xEC,0x1B,0xB7,0x6E,0x26,0xDD,0x1C,0xB8,0x25,0xBA,0xF5,0xF8,0x76,0xF6,0xED,0x17,0x77,0x0A,0xEE,
+0x4C,0xDC,0x5D,0x7A,0x8F,0x78,0xAF,0xFC,0xBE,0xDA,0xFD,0xEA,0x07,0xFA,0x0F,0xEA,0x7F,0xB4,0xFE,
+0xB1,0x65,0xC0,0x6D,0xE0,0xF8,0x60,0xC0,0x60,0xCF,0xC3,0x59,0x0F,0xEF,0x0E,0x09,0x87,0x9E,0xFE,
+0x94,0xFF,0xD3,0x87,0xE1,0xD2,0x47,0xCC,0x47,0xD5,0x23,0x46,0x23,0x8D,0x8F,0x9D,0x1F,0x1F,0x1B,
+0x0D,0x1A,0xBD,0xF2,0x64,0xCE,0x93,0xE1,0xA7,0xB2,0xA7,0x13,0xCF,0xCA,0x7E,0x56,0xFF,0x79,0xEB,
+0x73,0xAB,0xE7,0xDF,0xFD,0xE2,0xFB,0x4B,0xCF,0x58,0xFC,0xD8,0xF0,0x0B,0xF9,0x8B,0xCF,0xBF,0xAE,
+0x79,0xA9,0xF3,0x72,0xEF,0xAB,0xA9,0xAF,0x3A,0xC7,0x23,0xC7,0x1F,0xBC,0xCE,0x79,0x3D,0xF1,0xA6,
+0xFC,0xAD,0xCE,0xDB,0x7D,0xEF,0xB8,0xEF,0xBA,0xDF,0xC7,0xBD,0x1F,0x99,0x28,0xFC,0x40,0xFE,0x50,
+0xF3,0xD1,0xFA,0x63,0xC7,0xA7,0xD0,0x4F,0xF7,0x3E,0xE7,0x7C,0xFE,0xFC,0x2F,0xF7,0x84,0xF3,0xFB,
+0x25,0xD2,0x9F,0x33,0x00,0x00,0x00,0x20,0x63,0x48,0x52,0x4D,0x00,0x00,0x7A,0x25,0x00,0x00,0x80,
+0x83,0x00,0x00,0xF9,0xFF,0x00,0x00,0x80,0xE9,0x00,0x00,0x75,0x30,0x00,0x00,0xEA,0x60,0x00,0x00,
+0x3A,0x98,0x00,0x00,0x17,0x6F,0x92,0x5F,0xC5,0x46,0x00,0x00,0x03,0x6A,0x49,0x44,0x41,0x54,0x78,
+0xDA,0xD4,0x99,0xDB,0x8B,0x4D,0x51,0x1C,0xC7,0x3F,0x73,0x30,0x33,0xB9,0x1B,0x91,0x26,0xE4,0x96,
+0x41,0x23,0x64,0xBC,0x10,0x21,0x22,0x49,0xE4,0xC1,0x03,0x25,0xA6,0x49,0xE3,0x6F,0xF0,0xE4,0x4D,
+0xA3,0x88,0x72,0x8B,0x79,0x91,0x86,0x22,0x21,0x91,0x68,0x94,0x6B,0x6E,0x33,0xEE,0x23,0x14,0x66,
+0x18,0x53,0x43,0x72,0x3B,0xE3,0xFA,0xF5,0x60,0x4D,0x9D,0x8E,0x73,0xF6,0x59,0x6B,0xED,0x7D,0xCE,
+0x71,0xBE,0xB5,0xDA,0x9D,0xCE,0xDA,0xBF,0xB5,0xBE,0xEB,0xB7,0x7E,0xD7,0x5D,0x24,0x89,0x42,0x46,
+0xCF,0x88,0xE4,0x14,0x03,0x53,0x81,0xF1,0x40,0x15,0x30,0x0E,0x18,0x06,0xF4,0x06,0x3E,0x03,0xED,
+0xC0,0x33,0xE0,0x16,0xF0,0x04,0x68,0x02,0xF4,0x3F,0x10,0x98,0x02,0xD4,0x00,0xCB,0x80,0x11,0x0E,
+0xEF,0x3D,0x07,0x4E,0x00,0x07,0x80,0x47,0xA1,0x76,0x20,0xC9,0x67,0xCC,0x94,0x74,0x51,0xD1,0xE0,
+0xB4,0xA4,0xE9,0x9E,0xFB,0x70,0x26,0x50,0x26,0xE9,0xB0,0xB2,0x83,0x7A,0x49,0xFD,0x5D,0x09,0x14,
+0x39,0x18,0xF1,0x2C,0xA3,0xF6,0xC1,0x59,0xB4,0xC9,0x37,0xC0,0x12,0xE0,0xAE,0xED,0x0B,0x31,0xCB,
+0x79,0x6B,0x81,0xCB,0x59,0xDE,0x3C,0x40,0x39,0x70,0x07,0x58,0x1E,0xA5,0x0D,0x54,0x2B,0x3F,0x58,
+0x15,0xC5,0x15,0x5A,0x09,0x1C,0xCD,0xA3,0x9B,0x5F,0x08,0x9C,0x0F,0x9A,0x10,0x44,0x60,0x0C,0x70,
+0x0D,0x18,0x9A,0x47,0x02,0x6D,0xC6,0xF6,0x5E,0xF9,0xD8,0x40,0x7D,0x9E,0x37,0x0F,0x30,0x1C,0xD8,
+0xE3,0xA3,0x81,0x1A,0x60,0x9F,0xC7,0x82,0x5D,0xE6,0x50,0x9A,0x4C,0x90,0xEA,0x6D,0x22,0xEE,0x67,
+0xA0,0x1A,0x98,0x06,0xFC,0x06,0xFA,0x38,0xCA,0x5D,0x03,0x1C,0xB2,0x35,0xE2,0x52,0x49,0x4F,0x3D,
+0x8C,0xEE,0x8A,0xA4,0x05,0x92,0x7A,0x49,0x2A,0x49,0x21,0xB7,0xD8,0x3C,0xE7,0x48,0x3A,0x22,0xE9,
+0xAB,0x83,0xEC,0xBB,0x2E,0x81,0x6C,0xBD,0xE3,0xC6,0x5B,0x25,0xCD,0xF7,0x88,0xA2,0xF3,0x24,0x7D,
+0x72,0x58,0x67,0xB5,0x2D,0x81,0x46,0x07,0xA1,0xED,0x92,0x26,0xF9,0xA6,0x01,0x46,0x1B,0x3F,0x2D,
+0xD7,0x6A,0xB4,0x21,0x30,0x5A,0x52,0xDC,0x52,0x60,0xA7,0xA4,0x09,0x21,0x36,0xEF,0xAA,0xF1,0xB8,
+0xA4,0x8A,0xE4,0xF7,0x63,0x49,0x6E,0x73,0x05,0x50,0x6A,0x61,0x54,0x1F,0x81,0xB9,0x40,0x4B,0x04,
+0x9E,0xA6,0x1E,0x38,0x65,0x31,0xAF,0x14,0x58,0x14,0xE4,0x46,0x87,0x03,0x63,0x2D,0x17,0xDD,0x05,
+0x3C,0x88,0xD0,0x5D,0xD6,0x59,0xCE,0x9B,0x1C,0x44,0x60,0x06,0x50,0x69,0x21,0xE4,0x3D,0xB0,0x3D,
+0x62,0x7F,0x7F,0x09,0xB8,0x62,0x59,0x7F,0xA4,0x25,0x30,0xD1,0x5C,0xA3,0x4C,0xD8,0x0B,0x74,0x64,
+0x21,0x68,0xD9,0x68,0xB4,0xC2,0x54,0x7A,0x29,0x09,0x94,0x03,0x43,0x32,0x08,0x88,0x03,0xFB,0xB3,
+0x14,0x75,0x6D,0x34,0x50,0x02,0xF4,0x4D,0x47,0xA0,0x9F,0x99,0x10,0x84,0x5F,0xC0,0x97,0x2C,0x11,
+0x68,0xB5,0x98,0xD3,0x03,0xE8,0x95,0x8E,0xC0,0x77,0x13,0xE6,0x03,0xB3,0x6F,0x43,0x22,0x1B,0xB0,
+0xAD,0xAC,0x62,0xE9,0x7E,0xBC,0x05,0xDE,0x65,0x78,0xF9,0x37,0xF0,0xC3,0x63,0x73,0x03,0xCD,0x08,
+0xC2,0x08,0x1F,0xA2,0x89,0x04,0x9E,0x05,0xA5,0xAD,0x21,0xD1,0x60,0x2A,0xAD,0xB2,0x0C,0x25,0x2B,
+0x16,0x57,0xF8,0x5B,0x3A,0x02,0xD7,0x81,0x7B,0x19,0x04,0xF4,0x75,0x6C,0x9F,0x74,0x63,0x14,0x30,
+0x1A,0x38,0x17,0x40,0x62,0xB2,0x25,0x81,0xAE,0x74,0x04,0xDE,0x98,0x91,0xC9,0x88,0x56,0x78,0x10,
+0xF8,0x69,0x9E,0xD3,0x81,0x0B,0xC6,0x61,0x24,0x62,0xB6,0xA5,0x06,0xF4,0x8F,0xAD,0x24,0xE5,0x16,
+0x55,0x16,0x39,0x49,0x9B,0xA4,0x41,0x8E,0xF9,0xCE,0xBD,0x24,0x19,0xF7,0x93,0x5A,0x28,0x27,0x2D,
+0xF3,0xA1,0x17,0x92,0x06,0x04,0x25,0x73,0x3D,0x25,0x3D,0xB4,0x10,0xB4,0xC7,0x91,0x40,0x2A,0x99,
+0xCD,0xE6,0xBF,0xE5,0x0E,0xD9,0xEF,0xA6,0xA0,0x64,0xAE,0x5B,0xD5,0x0D,0x16,0xAA,0xDC,0x00,0x6C,
+0x74,0xB8,0x42,0xB1,0x34,0x69,0xC1,0x7D,0xC7,0xB4,0xE4,0xB6,0x4D,0x45,0x36,0x52,0xD2,0x07,0x8B,
+0xD3,0x78,0x6B,0x3A,0x75,0x36,0x1A,0x78,0x1C,0x41,0x9B,0xE5,0x71,0x2A,0xD9,0xA9,0x4E,0xE6,0x15,
+0xB0,0xDB,0xE2,0x34,0x0E,0x9A,0xC4,0x2E,0x57,0x68,0x70,0xE9,0x4A,0x6C,0x01,0x5E,0x67,0x10,0x78,
+0x35,0x87,0x9B,0xEF,0x30,0x29,0xBC,0x35,0x81,0x0F,0x40,0x6D,0x80,0xC0,0x9D,0xC0,0xF1,0x1C,0x12,
+0xD8,0x01,0x74,0xFA,0xB4,0x16,0x37,0xA7,0xB8,0x8B,0x5B,0x3D,0xCA,0xC6,0x96,0x10,0x77,0xBF,0x2E,
+0x6C,0x7B,0xFD,0x40,0x42,0xE1,0xBD,0xCD,0xB3,0xEE,0xF5,0x25,0xD0,0x6C,0x5C,0x7B,0x5A,0xD9,0x36,
+0xDD,0xE9,0x5A,0xD3,0xA1,0x9B,0x0D,0x6C,0xCA,0x71,0x67,0xEE,0x58,0x42,0x14,0x77,0xEE,0x8D,0x46,
+0x89,0x16,0x53,0x4D,0xB9,0xE2,0x97,0x69,0xF0,0x36,0x86,0xFD,0x3E,0x90,0x2F,0xF4,0x00,0xCE,0x02,
+0x8B,0x0B,0x95,0x00,0xFC,0xFD,0x02,0x7A,0x06,0x58,0x5A,0xA8,0x04,0xBA,0x71,0x0A,0x58,0x97,0x2F,
+0x02,0x37,0x12,0x2A,0xBA,0x30,0xA8,0x74,0x8D,0x03,0x51,0x8D,0x98,0xE9,0x4E,0xD7,0x48,0x7A,0xE9,
+0xE9,0x52,0x8F,0x85,0xFD,0x4A,0x19,0x15,0xCA,0x4D,0xF5,0x15,0xB7,0x98,0x5B,0x64,0x6E,0x49,0x31,
+0x70,0x33,0x55,0xEE,0x95,0x0F,0x02,0x91,0x22,0x46,0x81,0xE3,0xCF,0x00,0xD2,0xF0,0xF4,0x75,0x05,
+0xC1,0xEC,0xA0,0x00,0x00,0x00,0x00,0x49,0x45,0x4E,0x44,0xAE,0x42,0x60,0x82};
diff --git a/main.cpp b/archive/blr2/src/main.cpp
index 3fa99b9..3c1bec1 100644
--- a/main.cpp
+++ b/archive/blr2/src/main.cpp
@@ -1236,8 +1236,9 @@ int main(int argc,char *argv[])
HelpTex=hge->Texture_Load("./Resources/help.png");
sky.Init();
snd=hge->Effect_Load("./Resources/tap.ogg");
- menuin=hge->Effect_Load("./Resources/menuin.ogg");
- menuout=hge->Effect_Load("./Resources/menuout.ogg");
+ menumov=hge->Effect_Load("./Resources/tap.ogg");
+ menuin=hge->Effect_Load("./Resources/tap.ogg");
+ menuout=hge->Effect_Load("./Resources/tap.ogg");
if(!quad.tex||!SprSheet||!TexTitle||!TexCredits)
Error("Error Loading Resources!",true);
titlespr=new hgeSprite(TexTitle,0,0,640,320);
@@ -1331,7 +1332,7 @@ int main(int argc,char *argv[])
if(i<grey)delete towerspr[i];
}
hge->Effect_Free(snd);hge->Effect_Free(menuin);
- hge->Effect_Free(menuout);
+ hge->Effect_Free(menuout);hge->Effect_Free(menumov);
hge->Texture_Free(SprSheet);hge->Texture_Free(TLeaf);
hge->Texture_Free(quad.tex);hge->Texture_Free(TSflake);
hge->Texture_Free(TexTitle);hge->Texture_Free(TexCredits);
diff --git a/menus.h b/archive/blr2/src/menus.h
index 4dcd7c6..30d8b0a 100644
--- a/menus.h
+++ b/archive/blr2/src/menus.h
@@ -7,9 +7,9 @@ void TriggerSound(int type)
{
switch(type)
{
- case 0:hge->Effect_PlayEx(snd,sfxvol/15.0,0,1,false);break;
- //case 1:hge->Effect_Play(menuin);break;
- //case 2:hge->Effect_Play(menuout);break;
+ case 0:hge->Effect_PlayEx(menumov,sfxvol/15.0,0,1,false);break;
+ case 1:hge->Effect_Play(menuin);break;
+ case 2:hge->Effect_Play(menuout);break;
}
}
void ConfigureQuad(hgeQuad *quad,double x,double y,double w,double h)
@@ -391,7 +391,7 @@ public:
{
if(selected==7&&!(hge->Input_GetKeyStateEx(HGEK_Z)==HGEKST_HIT||hge->Input_GetKeyStateEx(HGEK_ENTER)==HGEKST_HIT))
return -1;
- TriggerSound(selected==7?2:1);
+ TriggerSound(selected==7?2:0);
if(onSwitch||onSwitchi)return -1;
if(selected<=5)
{
@@ -426,7 +426,7 @@ public:
if(hge->Input_GetKeyStateEx(HGEK_LEFT)==HGEKST_HIT)
{
if(onSwitch||onSwitchi)return -1;
- TriggerSound(1);
+ TriggerSound(0);
if(selected<=5){onSwitchi=true;swoffset=0;}
if(selected==0)tfs=!tfs;
if(selected==1)
diff --git a/music.h b/archive/blr2/src/music.h
index ef09c41..ef09c41 100644
--- a/music.h
+++ b/archive/blr2/src/music.h
diff --git a/scorec.h b/archive/blr2/src/scorec.h
index abca9c6..abca9c6 100644
--- a/scorec.h
+++ b/archive/blr2/src/scorec.h
diff --git a/scoresystem.h b/archive/blr2/src/scoresystem.h
index c8efc79..c8efc79 100644
--- a/scoresystem.h
+++ b/archive/blr2/src/scoresystem.h
diff --git a/towernbullet.h b/archive/blr2/src/towernbullet.h
index 8acf516..8acf516 100644
--- a/towernbullet.h
+++ b/archive/blr2/src/towernbullet.h
diff --git a/hge/CxImage/license.txt b/archive/hge/CxImage/license.txt
index 1ea1f04..1ea1f04 100644
--- a/hge/CxImage/license.txt
+++ b/archive/hge/CxImage/license.txt
diff --git a/hge/CxImage/stdint.h b/archive/hge/CxImage/stdint.h
index 2e93323..2e93323 100644
--- a/hge/CxImage/stdint.h
+++ b/archive/hge/CxImage/stdint.h
diff --git a/hge/CxImage/tif_xfile.cpp b/archive/hge/CxImage/tif_xfile.cpp
index 4d1d79a..4d1d79a 100644
--- a/hge/CxImage/tif_xfile.cpp
+++ b/archive/hge/CxImage/tif_xfile.cpp
diff --git a/hge/CxImage/xfile.h b/archive/hge/CxImage/xfile.h
index 6de281c..6de281c 100644
--- a/hge/CxImage/xfile.h
+++ b/archive/hge/CxImage/xfile.h
diff --git a/hge/CxImage/ximabmp.cpp b/archive/hge/CxImage/ximabmp.cpp
index c173c7d..c173c7d 100644
--- a/hge/CxImage/ximabmp.cpp
+++ b/archive/hge/CxImage/ximabmp.cpp
diff --git a/hge/CxImage/ximabmp.h b/archive/hge/CxImage/ximabmp.h
index c828de5..c828de5 100644
--- a/hge/CxImage/ximabmp.h
+++ b/archive/hge/CxImage/ximabmp.h
diff --git a/hge/CxImage/ximacfg.h b/archive/hge/CxImage/ximacfg.h
index 875f517..875f517 100644
--- a/hge/CxImage/ximacfg.h
+++ b/archive/hge/CxImage/ximacfg.h
diff --git a/hge/CxImage/ximadef.h b/archive/hge/CxImage/ximadef.h
index 372ec13..372ec13 100644
--- a/hge/CxImage/ximadef.h
+++ b/archive/hge/CxImage/ximadef.h
diff --git a/hge/CxImage/ximadsp.cpp b/archive/hge/CxImage/ximadsp.cpp
index df73136..df73136 100644
--- a/hge/CxImage/ximadsp.cpp
+++ b/archive/hge/CxImage/ximadsp.cpp
diff --git a/hge/CxImage/ximaenc.cpp b/archive/hge/CxImage/ximaenc.cpp
index 6064e49..6064e49 100644
--- a/hge/CxImage/ximaenc.cpp
+++ b/archive/hge/CxImage/ximaenc.cpp
diff --git a/hge/CxImage/ximaexif.cpp b/archive/hge/CxImage/ximaexif.cpp
index f880d72..f880d72 100644
--- a/hge/CxImage/ximaexif.cpp
+++ b/archive/hge/CxImage/ximaexif.cpp
diff --git a/hge/CxImage/ximage.cpp b/archive/hge/CxImage/ximage.cpp
index 904b807..904b807 100644
--- a/hge/CxImage/ximage.cpp
+++ b/archive/hge/CxImage/ximage.cpp
diff --git a/hge/CxImage/ximage.h b/archive/hge/CxImage/ximage.h
index 4eed84e..4eed84e 100644
--- a/hge/CxImage/ximage.h
+++ b/archive/hge/CxImage/ximage.h
diff --git a/hge/CxImage/ximagif.cpp b/archive/hge/CxImage/ximagif.cpp
index 8c94b9e..8c94b9e 100644
--- a/hge/CxImage/ximagif.cpp
+++ b/archive/hge/CxImage/ximagif.cpp
diff --git a/hge/CxImage/ximagif.h b/archive/hge/CxImage/ximagif.h
index 4eec35e..4eec35e 100644
--- a/hge/CxImage/ximagif.h
+++ b/archive/hge/CxImage/ximagif.h
diff --git a/hge/CxImage/ximahist.cpp b/archive/hge/CxImage/ximahist.cpp
index 830337f..830337f 100644
--- a/hge/CxImage/ximahist.cpp
+++ b/archive/hge/CxImage/ximahist.cpp
diff --git a/hge/CxImage/ximaico.cpp b/archive/hge/CxImage/ximaico.cpp
index a808697..a808697 100644
--- a/hge/CxImage/ximaico.cpp
+++ b/archive/hge/CxImage/ximaico.cpp
diff --git a/hge/CxImage/ximaico.h b/archive/hge/CxImage/ximaico.h
index 8d81b02..8d81b02 100644
--- a/hge/CxImage/ximaico.h
+++ b/archive/hge/CxImage/ximaico.h
diff --git a/hge/CxImage/ximainfo.cpp b/archive/hge/CxImage/ximainfo.cpp
index 582d9ed..582d9ed 100644
--- a/hge/CxImage/ximainfo.cpp
+++ b/archive/hge/CxImage/ximainfo.cpp
diff --git a/hge/CxImage/ximaint.cpp b/archive/hge/CxImage/ximaint.cpp
index 5f93038..5f93038 100644
--- a/hge/CxImage/ximaint.cpp
+++ b/archive/hge/CxImage/ximaint.cpp
diff --git a/hge/CxImage/ximaiter.h b/archive/hge/CxImage/ximaiter.h
index 2371d28..2371d28 100644
--- a/hge/CxImage/ximaiter.h
+++ b/archive/hge/CxImage/ximaiter.h
diff --git a/hge/CxImage/ximajas.cpp b/archive/hge/CxImage/ximajas.cpp
index 788e204..788e204 100644
--- a/hge/CxImage/ximajas.cpp
+++ b/archive/hge/CxImage/ximajas.cpp
diff --git a/hge/CxImage/ximajas.h b/archive/hge/CxImage/ximajas.h
index da76dfc..da76dfc 100644
--- a/hge/CxImage/ximajas.h
+++ b/archive/hge/CxImage/ximajas.h
diff --git a/hge/CxImage/ximajbg.cpp b/archive/hge/CxImage/ximajbg.cpp
index ee7bc10..ee7bc10 100644
--- a/hge/CxImage/ximajbg.cpp
+++ b/archive/hge/CxImage/ximajbg.cpp
diff --git a/hge/CxImage/ximajbg.h b/archive/hge/CxImage/ximajbg.h
index 1cf4965..1cf4965 100644
--- a/hge/CxImage/ximajbg.h
+++ b/archive/hge/CxImage/ximajbg.h
diff --git a/hge/CxImage/ximajpg.cpp b/archive/hge/CxImage/ximajpg.cpp
index b66bf97..b66bf97 100644
--- a/hge/CxImage/ximajpg.cpp
+++ b/archive/hge/CxImage/ximajpg.cpp
diff --git a/hge/CxImage/ximajpg.h b/archive/hge/CxImage/ximajpg.h
index da21643..da21643 100644
--- a/hge/CxImage/ximajpg.h
+++ b/archive/hge/CxImage/ximajpg.h
diff --git a/hge/CxImage/ximalpha.cpp b/archive/hge/CxImage/ximalpha.cpp
index 2932068..2932068 100644
--- a/hge/CxImage/ximalpha.cpp
+++ b/archive/hge/CxImage/ximalpha.cpp
diff --git a/hge/CxImage/ximalyr.cpp b/archive/hge/CxImage/ximalyr.cpp
index 23dc226..23dc226 100644
--- a/hge/CxImage/ximalyr.cpp
+++ b/archive/hge/CxImage/ximalyr.cpp
diff --git a/hge/CxImage/ximamng.cpp b/archive/hge/CxImage/ximamng.cpp
index d5ea82e..d5ea82e 100644
--- a/hge/CxImage/ximamng.cpp
+++ b/archive/hge/CxImage/ximamng.cpp
diff --git a/hge/CxImage/ximamng.h b/archive/hge/CxImage/ximamng.h
index 9466fc2..9466fc2 100644
--- a/hge/CxImage/ximamng.h
+++ b/archive/hge/CxImage/ximamng.h
diff --git a/hge/CxImage/ximapal.cpp b/archive/hge/CxImage/ximapal.cpp
index fe0615b..fe0615b 100644
--- a/hge/CxImage/ximapal.cpp
+++ b/archive/hge/CxImage/ximapal.cpp
diff --git a/hge/CxImage/ximapcx.cpp b/archive/hge/CxImage/ximapcx.cpp
index 2fa2f5d..2fa2f5d 100644
--- a/hge/CxImage/ximapcx.cpp
+++ b/archive/hge/CxImage/ximapcx.cpp
diff --git a/hge/CxImage/ximapcx.h b/archive/hge/CxImage/ximapcx.h
index 05c5ad0..05c5ad0 100644
--- a/hge/CxImage/ximapcx.h
+++ b/archive/hge/CxImage/ximapcx.h
diff --git a/hge/CxImage/ximapng.cpp b/archive/hge/CxImage/ximapng.cpp
index db2f636..db2f636 100644
--- a/hge/CxImage/ximapng.cpp
+++ b/archive/hge/CxImage/ximapng.cpp
diff --git a/hge/CxImage/ximapng.h b/archive/hge/CxImage/ximapng.h
index 262ea02..262ea02 100644
--- a/hge/CxImage/ximapng.h
+++ b/archive/hge/CxImage/ximapng.h
diff --git a/hge/CxImage/ximapsd.cpp b/archive/hge/CxImage/ximapsd.cpp
index 2d8417b..2d8417b 100644
--- a/hge/CxImage/ximapsd.cpp
+++ b/archive/hge/CxImage/ximapsd.cpp
diff --git a/hge/CxImage/ximapsd.h b/archive/hge/CxImage/ximapsd.h
index 92be8f1..92be8f1 100644
--- a/hge/CxImage/ximapsd.h
+++ b/archive/hge/CxImage/ximapsd.h
diff --git a/hge/CxImage/ximaraw.cpp b/archive/hge/CxImage/ximaraw.cpp
index aedc50a..aedc50a 100644
--- a/hge/CxImage/ximaraw.cpp
+++ b/archive/hge/CxImage/ximaraw.cpp
diff --git a/hge/CxImage/ximaraw.h b/archive/hge/CxImage/ximaraw.h
index 2fe4961..2fe4961 100644
--- a/hge/CxImage/ximaraw.h
+++ b/archive/hge/CxImage/ximaraw.h
diff --git a/hge/CxImage/ximasel.cpp b/archive/hge/CxImage/ximasel.cpp
index c50ff99..c50ff99 100644
--- a/hge/CxImage/ximasel.cpp
+++ b/archive/hge/CxImage/ximasel.cpp
diff --git a/hge/CxImage/ximaska.cpp b/archive/hge/CxImage/ximaska.cpp
index 6f1b1c2..6f1b1c2 100644
--- a/hge/CxImage/ximaska.cpp
+++ b/archive/hge/CxImage/ximaska.cpp
diff --git a/hge/CxImage/ximaska.h b/archive/hge/CxImage/ximaska.h
index ad3f598..ad3f598 100644
--- a/hge/CxImage/ximaska.h
+++ b/archive/hge/CxImage/ximaska.h
diff --git a/hge/CxImage/ximatga.cpp b/archive/hge/CxImage/ximatga.cpp
index f1a762a..f1a762a 100644
--- a/hge/CxImage/ximatga.cpp
+++ b/archive/hge/CxImage/ximatga.cpp
diff --git a/hge/CxImage/ximatga.h b/archive/hge/CxImage/ximatga.h
index 3cbc36a..3cbc36a 100644
--- a/hge/CxImage/ximatga.h
+++ b/archive/hge/CxImage/ximatga.h
diff --git a/hge/CxImage/ximath.cpp b/archive/hge/CxImage/ximath.cpp
index 0175184..0175184 100644
--- a/hge/CxImage/ximath.cpp
+++ b/archive/hge/CxImage/ximath.cpp
diff --git a/hge/CxImage/ximath.h b/archive/hge/CxImage/ximath.h
index 014c14b..014c14b 100644
--- a/hge/CxImage/ximath.h
+++ b/archive/hge/CxImage/ximath.h
diff --git a/hge/CxImage/ximatif.cpp b/archive/hge/CxImage/ximatif.cpp
index 7675361..7675361 100644
--- a/hge/CxImage/ximatif.cpp
+++ b/archive/hge/CxImage/ximatif.cpp
diff --git a/hge/CxImage/ximatif.h b/archive/hge/CxImage/ximatif.h
index 5ea31f0..5ea31f0 100644
--- a/hge/CxImage/ximatif.h
+++ b/archive/hge/CxImage/ximatif.h
diff --git a/hge/CxImage/ximatran.cpp b/archive/hge/CxImage/ximatran.cpp
index decac18..decac18 100644
--- a/hge/CxImage/ximatran.cpp
+++ b/archive/hge/CxImage/ximatran.cpp
diff --git a/hge/CxImage/ximawbmp.cpp b/archive/hge/CxImage/ximawbmp.cpp
index 7ba5d00..7ba5d00 100644
--- a/hge/CxImage/ximawbmp.cpp
+++ b/archive/hge/CxImage/ximawbmp.cpp
diff --git a/hge/CxImage/ximawbmp.h b/archive/hge/CxImage/ximawbmp.h
index 9a7837e..9a7837e 100644
--- a/hge/CxImage/ximawbmp.h
+++ b/archive/hge/CxImage/ximawbmp.h
diff --git a/hge/CxImage/ximawmf.cpp b/archive/hge/CxImage/ximawmf.cpp
index a1057f5..a1057f5 100644
--- a/hge/CxImage/ximawmf.cpp
+++ b/archive/hge/CxImage/ximawmf.cpp
diff --git a/hge/CxImage/ximawmf.h b/archive/hge/CxImage/ximawmf.h
index 94fb168..94fb168 100644
--- a/hge/CxImage/ximawmf.h
+++ b/archive/hge/CxImage/ximawmf.h
diff --git a/hge/CxImage/ximawnd.cpp b/archive/hge/CxImage/ximawnd.cpp
index 7f23f8f..7f23f8f 100644
--- a/hge/CxImage/ximawnd.cpp
+++ b/archive/hge/CxImage/ximawnd.cpp
diff --git a/hge/CxImage/xiofile.h b/archive/hge/CxImage/xiofile.h
index e05811e..e05811e 100644
--- a/hge/CxImage/xiofile.h
+++ b/archive/hge/CxImage/xiofile.h
diff --git a/hge/CxImage/xmemfile.cpp b/archive/hge/CxImage/xmemfile.cpp
index f235899..f235899 100644
--- a/hge/CxImage/xmemfile.cpp
+++ b/archive/hge/CxImage/xmemfile.cpp
diff --git a/hge/CxImage/xmemfile.h b/archive/hge/CxImage/xmemfile.h
index e132db3..e132db3 100644
--- a/hge/CxImage/xmemfile.h
+++ b/archive/hge/CxImage/xmemfile.h
diff --git a/hge/ZLIB/adler32.c b/archive/hge/ZLIB/adler32.c
index 65ad6a5..65ad6a5 100644
--- a/hge/ZLIB/adler32.c
+++ b/archive/hge/ZLIB/adler32.c
diff --git a/hge/ZLIB/crc32.c b/archive/hge/ZLIB/crc32.c
index 91be372..91be372 100644
--- a/hge/ZLIB/crc32.c
+++ b/archive/hge/ZLIB/crc32.c
diff --git a/hge/ZLIB/crc32.h b/archive/hge/ZLIB/crc32.h
index 8053b61..8053b61 100644
--- a/hge/ZLIB/crc32.h
+++ b/archive/hge/ZLIB/crc32.h
diff --git a/hge/ZLIB/crypt.h b/archive/hge/ZLIB/crypt.h
index c01e587..c01e587 100644
--- a/hge/ZLIB/crypt.h
+++ b/archive/hge/ZLIB/crypt.h
diff --git a/hge/ZLIB/deflate.h b/archive/hge/ZLIB/deflate.h
index cbf0d1e..cbf0d1e 100644
--- a/hge/ZLIB/deflate.h
+++ b/archive/hge/ZLIB/deflate.h
diff --git a/hge/ZLIB/inffast.c b/archive/hge/ZLIB/inffast.c
index 2f1d60b..2f1d60b 100644
--- a/hge/ZLIB/inffast.c
+++ b/archive/hge/ZLIB/inffast.c
diff --git a/hge/ZLIB/inffast.h b/archive/hge/ZLIB/inffast.h
index e5c1aa4..e5c1aa4 100644
--- a/hge/ZLIB/inffast.h
+++ b/archive/hge/ZLIB/inffast.h
diff --git a/hge/ZLIB/inffixed.h b/archive/hge/ZLIB/inffixed.h
index 75ed4b5..75ed4b5 100644
--- a/hge/ZLIB/inffixed.h
+++ b/archive/hge/ZLIB/inffixed.h
diff --git a/hge/ZLIB/inflate.c b/archive/hge/ZLIB/inflate.c
index a8431ab..a8431ab 100644
--- a/hge/ZLIB/inflate.c
+++ b/archive/hge/ZLIB/inflate.c
diff --git a/hge/ZLIB/inflate.h b/archive/hge/ZLIB/inflate.h
index 95f4986..95f4986 100644
--- a/hge/ZLIB/inflate.h
+++ b/archive/hge/ZLIB/inflate.h
diff --git a/hge/ZLIB/inftrees.c b/archive/hge/ZLIB/inftrees.c
index 11e9c52..11e9c52 100644
--- a/hge/ZLIB/inftrees.c
+++ b/archive/hge/ZLIB/inftrees.c
diff --git a/hge/ZLIB/inftrees.h b/archive/hge/ZLIB/inftrees.h
index baa53a0..baa53a0 100644
--- a/hge/ZLIB/inftrees.h
+++ b/archive/hge/ZLIB/inftrees.h
diff --git a/hge/ZLIB/ioapi.c b/archive/hge/ZLIB/ioapi.c
index 9ac1985..9ac1985 100644
--- a/hge/ZLIB/ioapi.c
+++ b/archive/hge/ZLIB/ioapi.c
diff --git a/hge/ZLIB/ioapi.h b/archive/hge/ZLIB/ioapi.h
index b2ffb14..b2ffb14 100644
--- a/hge/ZLIB/ioapi.h
+++ b/archive/hge/ZLIB/ioapi.h
diff --git a/hge/ZLIB/trees.c b/archive/hge/ZLIB/trees.c
index 56e9bb1..56e9bb1 100644
--- a/hge/ZLIB/trees.c
+++ b/archive/hge/ZLIB/trees.c
diff --git a/hge/ZLIB/trees.h b/archive/hge/ZLIB/trees.h
index d35639d..d35639d 100644
--- a/hge/ZLIB/trees.h
+++ b/archive/hge/ZLIB/trees.h
diff --git a/hge/ZLIB/uncompr.c b/archive/hge/ZLIB/uncompr.c
index ad98be3..ad98be3 100644
--- a/hge/ZLIB/uncompr.c
+++ b/archive/hge/ZLIB/uncompr.c
diff --git a/hge/ZLIB/unzip.c b/archive/hge/ZLIB/unzip.c
index 868f035..868f035 100644
--- a/hge/ZLIB/unzip.c
+++ b/archive/hge/ZLIB/unzip.c
diff --git a/hge/ZLIB/unzip.h b/archive/hge/ZLIB/unzip.h
index 2a9f26f..2a9f26f 100644
--- a/hge/ZLIB/unzip.h
+++ b/archive/hge/ZLIB/unzip.h
diff --git a/hge/ZLIB/zconf.h b/archive/hge/ZLIB/zconf.h
index 02ce56c..02ce56c 100644
--- a/hge/ZLIB/zconf.h
+++ b/archive/hge/ZLIB/zconf.h
diff --git a/hge/ZLIB/zconf.in.h b/archive/hge/ZLIB/zconf.in.h
index 91a0f73..91a0f73 100644
--- a/hge/ZLIB/zconf.in.h
+++ b/archive/hge/ZLIB/zconf.in.h
diff --git a/hge/ZLIB/zip.h b/archive/hge/ZLIB/zip.h
index 944ed78..944ed78 100644
--- a/hge/ZLIB/zip.h
+++ b/archive/hge/ZLIB/zip.h
diff --git a/hge/ZLIB/zlib.h b/archive/hge/ZLIB/zlib.h
index bfbba83..bfbba83 100644
--- a/hge/ZLIB/zlib.h
+++ b/archive/hge/ZLIB/zlib.h
diff --git a/hge/ZLIB/zutil.c b/archive/hge/ZLIB/zutil.c
index 898ed34..898ed34 100644
--- a/hge/ZLIB/zutil.c
+++ b/archive/hge/ZLIB/zutil.c
diff --git a/hge/ZLIB/zutil.h b/archive/hge/ZLIB/zutil.h
index 258fa88..258fa88 100644
--- a/hge/ZLIB/zutil.h
+++ b/archive/hge/ZLIB/zutil.h
diff --git a/hge/demo.cpp b/archive/hge/demo.cpp
index a8a2ce3..a8a2ce3 100644
--- a/hge/demo.cpp
+++ b/archive/hge/demo.cpp
diff --git a/hge/gl.h b/archive/hge/gl.h
index 96fb7d7..96fb7d7 100644
--- a/hge/gl.h
+++ b/archive/hge/gl.h
diff --git a/hge/graphics.cpp b/archive/hge/graphics.cpp
index 6ee9578..6ee9578 100644
--- a/hge/graphics.cpp
+++ b/archive/hge/graphics.cpp
diff --git a/hge/hge_glfuncs.h b/archive/hge/hge_glfuncs.h
index 1c0af81..1c0af81 100644
--- a/hge/hge_glfuncs.h
+++ b/archive/hge/hge_glfuncs.h
diff --git a/hge/hge_impl.h b/archive/hge/hge_impl.h
index bf42c2f..bf42c2f 100644
--- a/hge/hge_impl.h
+++ b/archive/hge/hge_impl.h
diff --git a/hge/ini.cpp b/archive/hge/ini.cpp
index 6fed586..6fed586 100644
--- a/hge/ini.cpp
+++ b/archive/hge/ini.cpp
diff --git a/hge/input.cpp b/archive/hge/input.cpp
index 2710c7f..2710c7f 100644
--- a/hge/input.cpp
+++ b/archive/hge/input.cpp
diff --git a/hge/power.cpp b/archive/hge/power.cpp
index eabeeaa..eabeeaa 100644
--- a/hge/power.cpp
+++ b/archive/hge/power.cpp
diff --git a/hge/random.cpp b/archive/hge/random.cpp
index ab9956a..ab9956a 100644
--- a/hge/random.cpp
+++ b/archive/hge/random.cpp
diff --git a/hge/resource.cpp b/archive/hge/resource.cpp
index 4937ee1..4937ee1 100644
--- a/hge/resource.cpp
+++ b/archive/hge/resource.cpp
diff --git a/hge/sound.cpp b/archive/hge/sound.cpp
index 9024652..9024652 100644
--- a/hge/sound.cpp
+++ b/archive/hge/sound.cpp
diff --git a/hge/system.cpp b/archive/hge/system.cpp
index b32783b..b32783b 100644
--- a/hge/system.cpp
+++ b/archive/hge/system.cpp
diff --git a/hge/timer.cpp b/archive/hge/timer.cpp
index 13711c7..13711c7 100644
--- a/hge/timer.cpp
+++ b/archive/hge/timer.cpp
diff --git a/hgehelp/hgeanim.cpp b/archive/hgehelp/hgeanim.cpp
index 0e370db..0e370db 100644
--- a/hgehelp/hgeanim.cpp
+++ b/archive/hgehelp/hgeanim.cpp
diff --git a/hgehelp/hgecolor.cpp b/archive/hgehelp/hgecolor.cpp
index 561a9cc..561a9cc 100644
--- a/hgehelp/hgecolor.cpp
+++ b/archive/hgehelp/hgecolor.cpp
diff --git a/hgehelp/hgedistort.cpp b/archive/hgehelp/hgedistort.cpp
index c7dc821..c7dc821 100644
--- a/hgehelp/hgedistort.cpp
+++ b/archive/hgehelp/hgedistort.cpp
diff --git a/hgehelp/hgefont.cpp b/archive/hgehelp/hgefont.cpp
index eb06393..eb06393 100644
--- a/hgehelp/hgefont.cpp
+++ b/archive/hgehelp/hgefont.cpp
diff --git a/hgehelp/hgegui.cpp b/archive/hgehelp/hgegui.cpp
index 2faf24c..2faf24c 100644
--- a/hgehelp/hgegui.cpp
+++ b/archive/hgehelp/hgegui.cpp
diff --git a/hgehelp/hgeguictrls.cpp b/archive/hgehelp/hgeguictrls.cpp
index 4319491..4319491 100644
--- a/hgehelp/hgeguictrls.cpp
+++ b/archive/hgehelp/hgeguictrls.cpp
diff --git a/hgehelp/hgeparticle.cpp b/archive/hgehelp/hgeparticle.cpp
index d0d054d..d0d054d 100644
--- a/hgehelp/hgeparticle.cpp
+++ b/archive/hgehelp/hgeparticle.cpp
diff --git a/hgehelp/hgepmanager.cpp b/archive/hgehelp/hgepmanager.cpp
index 16a0b1d..16a0b1d 100644
--- a/hgehelp/hgepmanager.cpp
+++ b/archive/hgehelp/hgepmanager.cpp
diff --git a/hgehelp/hgerect.cpp b/archive/hgehelp/hgerect.cpp
index 303286c..303286c 100644
--- a/hgehelp/hgerect.cpp
+++ b/archive/hgehelp/hgerect.cpp
diff --git a/hgehelp/hgeresource.cpp b/archive/hgehelp/hgeresource.cpp
index e681369..e681369 100644
--- a/hgehelp/hgeresource.cpp
+++ b/archive/hgehelp/hgeresource.cpp
diff --git a/hgehelp/hgesprite.cpp b/archive/hgehelp/hgesprite.cpp
index 3ff926f..3ff926f 100644
--- a/hgehelp/hgesprite.cpp
+++ b/archive/hgehelp/hgesprite.cpp
diff --git a/hgehelp/hgestrings.cpp b/archive/hgehelp/hgestrings.cpp
index 6eda71c..6eda71c 100644
--- a/hgehelp/hgestrings.cpp
+++ b/archive/hgehelp/hgestrings.cpp
diff --git a/hgehelp/hgevector.cpp b/archive/hgehelp/hgevector.cpp
index 921f7b7..921f7b7 100644
--- a/hgehelp/hgevector.cpp
+++ b/archive/hgehelp/hgevector.cpp
diff --git a/hgehelp/parser.cpp b/archive/hgehelp/parser.cpp
index 0386ef9..0386ef9 100644
--- a/hgehelp/parser.cpp
+++ b/archive/hgehelp/parser.cpp
diff --git a/hgehelp/parser.h b/archive/hgehelp/parser.h
index c33ff11..c33ff11 100644
--- a/hgehelp/parser.h
+++ b/archive/hgehelp/parser.h
diff --git a/hgehelp/resources.cpp b/archive/hgehelp/resources.cpp
index 33afcaa..33afcaa 100644
--- a/hgehelp/resources.cpp
+++ b/archive/hgehelp/resources.cpp
diff --git a/hgehelp/resources.h b/archive/hgehelp/resources.h
index 8be8384..8be8384 100644
--- a/hgehelp/resources.h
+++ b/archive/hgehelp/resources.h
diff --git a/hgewin/ZLIB/adler32.c b/archive/hgewin/ZLIB/adler32.c
index 65ad6a5..65ad6a5 100644
--- a/hgewin/ZLIB/adler32.c
+++ b/archive/hgewin/ZLIB/adler32.c
diff --git a/hgewin/ZLIB/crc32.c b/archive/hgewin/ZLIB/crc32.c
index 91be372..91be372 100644
--- a/hgewin/ZLIB/crc32.c
+++ b/archive/hgewin/ZLIB/crc32.c
diff --git a/hgewin/ZLIB/crc32.h b/archive/hgewin/ZLIB/crc32.h
index 8053b61..8053b61 100644
--- a/hgewin/ZLIB/crc32.h
+++ b/archive/hgewin/ZLIB/crc32.h
diff --git a/hgewin/ZLIB/crypt.h b/archive/hgewin/ZLIB/crypt.h
index c01e587..c01e587 100644
--- a/hgewin/ZLIB/crypt.h
+++ b/archive/hgewin/ZLIB/crypt.h
diff --git a/hgewin/ZLIB/deflate.h b/archive/hgewin/ZLIB/deflate.h
index cbf0d1e..cbf0d1e 100644
--- a/hgewin/ZLIB/deflate.h
+++ b/archive/hgewin/ZLIB/deflate.h
diff --git a/hgewin/ZLIB/inffast.c b/archive/hgewin/ZLIB/inffast.c
index 2f1d60b..2f1d60b 100644
--- a/hgewin/ZLIB/inffast.c
+++ b/archive/hgewin/ZLIB/inffast.c
diff --git a/hgewin/ZLIB/inffast.h b/archive/hgewin/ZLIB/inffast.h
index e5c1aa4..e5c1aa4 100644
--- a/hgewin/ZLIB/inffast.h
+++ b/archive/hgewin/ZLIB/inffast.h
diff --git a/hgewin/ZLIB/inffixed.h b/archive/hgewin/ZLIB/inffixed.h
index 75ed4b5..75ed4b5 100644
--- a/hgewin/ZLIB/inffixed.h
+++ b/archive/hgewin/ZLIB/inffixed.h
diff --git a/hgewin/ZLIB/inflate.c b/archive/hgewin/ZLIB/inflate.c
index a8431ab..a8431ab 100644
--- a/hgewin/ZLIB/inflate.c
+++ b/archive/hgewin/ZLIB/inflate.c
diff --git a/hgewin/ZLIB/inflate.h b/archive/hgewin/ZLIB/inflate.h
index 95f4986..95f4986 100644
--- a/hgewin/ZLIB/inflate.h
+++ b/archive/hgewin/ZLIB/inflate.h
diff --git a/hgewin/ZLIB/inftrees.c b/archive/hgewin/ZLIB/inftrees.c
index 11e9c52..11e9c52 100644
--- a/hgewin/ZLIB/inftrees.c
+++ b/archive/hgewin/ZLIB/inftrees.c
diff --git a/hgewin/ZLIB/inftrees.h b/archive/hgewin/ZLIB/inftrees.h
index baa53a0..baa53a0 100644
--- a/hgewin/ZLIB/inftrees.h
+++ b/archive/hgewin/ZLIB/inftrees.h
diff --git a/hgewin/ZLIB/ioapi.c b/archive/hgewin/ZLIB/ioapi.c
index 9ac1985..9ac1985 100644
--- a/hgewin/ZLIB/ioapi.c
+++ b/archive/hgewin/ZLIB/ioapi.c
diff --git a/hgewin/ZLIB/ioapi.h b/archive/hgewin/ZLIB/ioapi.h
index b2ffb14..b2ffb14 100644
--- a/hgewin/ZLIB/ioapi.h
+++ b/archive/hgewin/ZLIB/ioapi.h
diff --git a/hgewin/ZLIB/trees.c b/archive/hgewin/ZLIB/trees.c
index 56e9bb1..56e9bb1 100644
--- a/hgewin/ZLIB/trees.c
+++ b/archive/hgewin/ZLIB/trees.c
diff --git a/hgewin/ZLIB/trees.h b/archive/hgewin/ZLIB/trees.h
index d35639d..d35639d 100644
--- a/hgewin/ZLIB/trees.h
+++ b/archive/hgewin/ZLIB/trees.h
diff --git a/hgewin/ZLIB/uncompr.c b/archive/hgewin/ZLIB/uncompr.c
index ad98be3..ad98be3 100644
--- a/hgewin/ZLIB/uncompr.c
+++ b/archive/hgewin/ZLIB/uncompr.c
diff --git a/hgewin/ZLIB/unzip.c b/archive/hgewin/ZLIB/unzip.c
index 868f035..868f035 100644
--- a/hgewin/ZLIB/unzip.c
+++ b/archive/hgewin/ZLIB/unzip.c
diff --git a/hgewin/ZLIB/unzip.h b/archive/hgewin/ZLIB/unzip.h
index 2a9f26f..2a9f26f 100644
--- a/hgewin/ZLIB/unzip.h
+++ b/archive/hgewin/ZLIB/unzip.h
diff --git a/hgewin/ZLIB/zconf.h b/archive/hgewin/ZLIB/zconf.h
index 02ce56c..02ce56c 100644
--- a/hgewin/ZLIB/zconf.h
+++ b/archive/hgewin/ZLIB/zconf.h
diff --git a/hgewin/ZLIB/zconf.in.h b/archive/hgewin/ZLIB/zconf.in.h
index 91a0f73..91a0f73 100644
--- a/hgewin/ZLIB/zconf.in.h
+++ b/archive/hgewin/ZLIB/zconf.in.h
diff --git a/hgewin/ZLIB/zip.h b/archive/hgewin/ZLIB/zip.h
index 944ed78..944ed78 100644
--- a/hgewin/ZLIB/zip.h
+++ b/archive/hgewin/ZLIB/zip.h
diff --git a/hgewin/ZLIB/zlib.h b/archive/hgewin/ZLIB/zlib.h
index bfbba83..bfbba83 100644
--- a/hgewin/ZLIB/zlib.h
+++ b/archive/hgewin/ZLIB/zlib.h
diff --git a/hgewin/ZLIB/zutil.c b/archive/hgewin/ZLIB/zutil.c
index 898ed34..898ed34 100644
--- a/hgewin/ZLIB/zutil.c
+++ b/archive/hgewin/ZLIB/zutil.c
diff --git a/hgewin/ZLIB/zutil.h b/archive/hgewin/ZLIB/zutil.h
index 258fa88..258fa88 100644
--- a/hgewin/ZLIB/zutil.h
+++ b/archive/hgewin/ZLIB/zutil.h
diff --git a/hgewin/demo.cpp b/archive/hgewin/demo.cpp
index a8a2ce3..a8a2ce3 100644
--- a/hgewin/demo.cpp
+++ b/archive/hgewin/demo.cpp
diff --git a/hgewin/graphics.cpp b/archive/hgewin/graphics.cpp
index 43a5cc1..43a5cc1 100755
--- a/hgewin/graphics.cpp
+++ b/archive/hgewin/graphics.cpp
diff --git a/hgewin/hge_impl.h b/archive/hgewin/hge_impl.h
index 244dafc..244dafc 100755
--- a/hgewin/hge_impl.h
+++ b/archive/hgewin/hge_impl.h
diff --git a/hgewin/ini.cpp b/archive/hgewin/ini.cpp
index eef4354..eef4354 100755
--- a/hgewin/ini.cpp
+++ b/archive/hgewin/ini.cpp
diff --git a/hgewin/input.cpp b/archive/hgewin/input.cpp
index 0610376..0610376 100755
--- a/hgewin/input.cpp
+++ b/archive/hgewin/input.cpp
diff --git a/hgewin/power.cpp b/archive/hgewin/power.cpp
index dadcda9..dadcda9 100755
--- a/hgewin/power.cpp
+++ b/archive/hgewin/power.cpp
diff --git a/hgewin/random.cpp b/archive/hgewin/random.cpp
index c3332f1..c3332f1 100755
--- a/hgewin/random.cpp
+++ b/archive/hgewin/random.cpp
diff --git a/hgewin/resource.cpp b/archive/hgewin/resource.cpp
index 6921dc6..6921dc6 100755
--- a/hgewin/resource.cpp
+++ b/archive/hgewin/resource.cpp
diff --git a/hgewin/sound.cpp b/archive/hgewin/sound.cpp
index 9024652..9024652 100644
--- a/hgewin/sound.cpp
+++ b/archive/hgewin/sound.cpp
diff --git a/hgewin/system.cpp b/archive/hgewin/system.cpp
index 2cbd741..2cbd741 100755
--- a/hgewin/system.cpp
+++ b/archive/hgewin/system.cpp
diff --git a/hgewin/timer.cpp b/archive/hgewin/timer.cpp
index 13711c7..13711c7 100755
--- a/hgewin/timer.cpp
+++ b/archive/hgewin/timer.cpp
diff --git a/include/hge.h b/archive/include/hge.h
index 18d57b9..18d57b9 100644
--- a/include/hge.h
+++ b/archive/include/hge.h
diff --git a/include/hgeanim.h b/archive/include/hgeanim.h
index 7c5f237..7c5f237 100644
--- a/include/hgeanim.h
+++ b/archive/include/hgeanim.h
diff --git a/include/hgecolor.h b/archive/include/hgecolor.h
index 7cd4d82..7cd4d82 100644
--- a/include/hgecolor.h
+++ b/archive/include/hgecolor.h
diff --git a/include/hgedistort.h b/archive/include/hgedistort.h
index 3c8f449..3c8f449 100644
--- a/include/hgedistort.h
+++ b/archive/include/hgedistort.h
diff --git a/include/hgefont.h b/archive/include/hgefont.h
index 403d307..403d307 100644
--- a/include/hgefont.h
+++ b/archive/include/hgefont.h
diff --git a/include/hgegui.h b/archive/include/hgegui.h
index 7e2144b..7e2144b 100644
--- a/include/hgegui.h
+++ b/archive/include/hgegui.h
diff --git a/include/hgeguictrls.h b/archive/include/hgeguictrls.h
index 8a1addd..8a1addd 100644
--- a/include/hgeguictrls.h
+++ b/archive/include/hgeguictrls.h
diff --git a/include/hgeparticle.h b/archive/include/hgeparticle.h
index fd1e622..fd1e622 100644
--- a/include/hgeparticle.h
+++ b/archive/include/hgeparticle.h
diff --git a/include/hgerect.h b/archive/include/hgerect.h
index 9e26907..9e26907 100644
--- a/include/hgerect.h
+++ b/archive/include/hgerect.h
diff --git a/include/hgeresource.h b/archive/include/hgeresource.h
index ace8f21..ace8f21 100644
--- a/include/hgeresource.h
+++ b/archive/include/hgeresource.h
diff --git a/include/hgesprite.h b/archive/include/hgesprite.h
index e414c02..e414c02 100644
--- a/include/hgesprite.h
+++ b/archive/include/hgesprite.h
diff --git a/include/hgestrings.h b/archive/include/hgestrings.h
index e02cbe9..e02cbe9 100644
--- a/include/hgestrings.h
+++ b/archive/include/hgestrings.h
diff --git a/include/hgevector.h b/archive/include/hgevector.h
index b86bd01..b86bd01 100644
--- a/include/hgevector.h
+++ b/archive/include/hgevector.h
diff --git a/include/unix_compat.h b/archive/include/unix_compat.h
index 56ec4b3..56ec4b3 100644
--- a/include/unix_compat.h
+++ b/archive/include/unix_compat.h
diff --git a/build b/build
deleted file mode 100755
index dab46d9..0000000
--- a/build
+++ /dev/null
@@ -1,42 +0,0 @@
-#!/bin/bash
-cd hge
-#############################################################################
-cd CxImage
-echo Compiling CxImage...
-g++ -c *.cpp -D_LINUX
-ar rcs libCxImage.a *.o
-rm *.o
-cd ..
-mv ./CxImage/libCxImage.a libCxImage.a
-#############################################################################
-cd ZLIB
-echo Compiling zlib...
-gcc -c *.c
-ar rcs libz.a *.o
-rm *.o
-cd ..
-mv ./ZLIB/libz.a libz.a
-#############################################################################
-echo Compiling libhge...
-g++ -c *.cpp -I/usr/include/SDL/ -I../include
-ar rcs libhge.a *.o
-rm *.o
-cd ..
-mv ./hge/*.a ./
-#############################################################################
-cd hgehelp
-echo Compiling libhgehelp...
-g++ -c *.cpp -I../include
-ar rcs libhgehelp.a *.o
-rm *.o
-cd ..
-mv ./hgehelp/libhgehelp.a libhgehelp.a
-#############################################################################
-echo Compiling the main executable...
-g++ *.cpp -I/usr/include/freetype2 -I./include \
--lSDL -lvorbis -lvorbisfile -lopenal -ljpeg -lpng -lfreetype \
--Wl,libhgehelp.a,libhge.a,libCxImage.a,libz.a -o BulletLabRemixII
-#############################################################################
-rm *.a
-strip BulletLabRemixII
-cd .. \ No newline at end of file