aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
committerGravatar Chris Xiong <chirs241097@gmail.com> 2015-10-26 22:52:36 +0800
commit3bd383baf6a17e734329e1fc677c7e86283db772 (patch)
tree69a9148087577f797624ceb9c71323a2563d6bb4
parent543e4f570be9b279ba558ca61cc02cda251af384 (diff)
downloadbullet-lab-remix-3bd383baf6a17e734329e1fc677c7e86283db772.tar.xz
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.
-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