0ð ððð\L?@€ÿQ‡kP²‡rbð0ÛL–‘�€ð€ù½œÓÓÓÿæÊööö @ÿÿÿÿÿÿÿÿ2Tv˜ºÜþïÍ«‰gE#2Tv˜ºÜþ2Tv˜ºÜþÿÿÿÿðÿÿÿÿ}w§wwªpww07y0ÃÃãèwwz§wy‡œ8<< Ž> w§wwªpww07y0ÃÃãèwwz§wy‡œ8<< Ž> w§wwªpww07y0ÃÃãèwwz§wy‡œ8<< Ž> w§wwª0wy0“ŒÃÃàèwwzªw8773w3|<w§wwª0wy0“ŒÃÃàèwwzªw8773w3|<w§wwª0wy0“ŒÃÃàèwwzªw8773w3|<€€€€€€ˆ€ˆ€€€€€€€ˆ€ˆÀîzÙ ª�ß§ÿœ§_eeð î �§Ùª ÿzýõzÉVVÐpÃîÌzÉœ§ÿ§]ee  î<œ§ÿz ov ö_Ð ÃîªÉЧÿ�göõoÐ î<œªÌÿzÉÕzVV  ÀΙÐ}}`Uð99 0zªßœU­ÀΙpß Õ Uð­99ݪúzÍ VÀ ÀΧðªÌ}œPª99Ú ªzªz ee ߈€ˆ  "ˆ ˆ €"   "  " ppzp§37333s3|ww§ªzwy7—œ3ÇÃìèw§wwª0ss03s03w0ÃÇwwzªw—wÉ9<<Žw§wwª0ss03s03w0ÃÇwwzªw—wÉ9<<ŽÿÿðMÔßDDýODDôODDôßDDýðMÔÿÿÿÿð�Ø߈ˆý�ˆˆø�ˆˆøßˆˆýð�Øÿÿÿÿð½Ûß»»ý¿»»û¿»»ûß»»ýð½ÛÿÿÿÿðÑßýññßýðÑÿÿÿÿðÍÜßÌÌýÏÌÌüÏÌÌüßÌÌýðÍÜÿÿÿÿð�Ùß™™ýŸ™™ùŸ™™ùß™™ýð�Ùÿÿÿÿ"ð"ˆð‚ˆ/ˆˆ/ˆˆÿ"ÿˆ"ˆ(ˆˆòˆˆòÿÿfðf»ð¶»o»»o»»ÿfÿ»f»k»»ö»»ö090w§×P• ÉÎ� Úz  \eý““pݯªÀܧ� e ì ™ý]�U Ú““Э§ª�§ª�VVýì zª×ÌɪýßÐDD ðDDðDDÐDD ýßýßЈˆ ðˆˆðˆˆЈˆ ýßýßл» ð»»ð»»л» ýßýßÐ ððÐ ýßýßÐÌÌ ðÌÌðÌÌÐÌÌ ýßýßЙ™ ð™™ð™™Й™ ýß/ˆˆ/ˆˆð‚ˆð"ˆÿ"ÿˆˆòˆˆòˆ(ˆ""ÿÿo»»o»»ð¶»ðf»ÿfÿ»»ö»»ö»k»ffÿÿw§wwª0ww0ss033033wwz§www773333w§wwª0ww0ss033033wwz§www773333w§wwª0ww0ss033033wwz§www773333ÿßÿÿÝÐÿÿÐýýÐÝÝÐÝÝÿÿýßÿÿÿ ßß ÝÝ ÝÝ ÿßÿÿÝÐÿÿÐýýÐÝÝÐÝÝÿÿýßÿÿÿ ßß ÝÝ ÝÝ ÌŒÌ̈€ÌÌ€ÈÈ€ˆˆ€ˆˆÌÌÈŒÌÌÌŒŒˆˆˆˆÌŒÌ̈€ÌÌ€ÈÈ€ˆˆ€ˆˆÌÌÈŒÌÌÌŒŒˆˆˆˆ""" "" "r"""r"""""'"""'"33:7 ªª¯§ªÜ§zeeð 33s£ªª ªzú§zÍVVÐ33­:7­§ª§zõoÐ 33s£ª×ª— VÆ   33:7ð}ªÀyªÀle  33s£ÚªzÚ§zö_Ð ÝÝÿßÝÿýÿýßýßðÝÝÝýÿýÿÝ ÝÝ ðÝÝßÝðßÿÐÝÿÐÝÝðÝÝÝýÿÿßÿýßýßðˆˆÌŒˆÌÈÌȌȌÀ ˆˆˆÈÌÈ ÌˆˆˆÀ ˆˆŒˆÀŒÌ€ˆÌ€ˆˆÀ ˆˆˆÈÌÌŒÌȌȌÀ "r"" "r """""'"""'""""""" ""‚"ˆ""("ˆ" ""‚ ‚ˆ ‚ˆ"ˆˆ"("ˆ(ˆ(ˆˆ" " """‚ˆ"ˆˆ ‚ˆˆ ‚ˆˆ ‚ˆˆ"""ˆ("ˆˆ"ˆˆ(ˆˆ(ˆˆ( " ‚ˆ‚ˆˆ ˆˆˆ ˆˆˆ‚ˆˆˆ‚ˆˆˆ‚ˆˆˆ"ˆ(ˆˆ(ˆˆˆˆˆˆˆˆˆ(ˆˆˆ(ˆˆˆ(€ˆ€ˆˆˆˆˆ€ˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆ€ˆˆ€ˆ€ˆˆˆˆˆ€ˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆ€ˆ€ˆˆˆˆ€ˆ€ˆˆˆˆˆˆˆ€ˆˆ€ˆˆ€ˆ€ˆˆ€ˆ€ˆˆ€€ˆˆˆˆ€ˆ€€"ˆ"‚ ""ˆ"(""""ˆˆ ‚ˆ ‚ˆ"‚ " ˆˆ"ˆ(ˆ(("" ‚ˆˆ ‚ˆˆ ‚ˆˆ"ˆˆ"‚ˆ "" "ˆˆ(ˆˆ(ˆˆ(ˆˆ"ˆ(""""‚ˆˆˆ‚ˆˆˆ‚ˆˆˆ ˆˆˆ ˆˆˆ‚ˆˆ ‚ˆ "ˆˆˆ(ˆˆˆ(ˆˆˆ(ˆˆˆˆˆˆˆˆ(ˆ("ˆˆˆˆˆˆˆˆ€ˆˆˆ€ˆˆˆˆˆˆ€ˆˆ€ˆ€ˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆ€ˆˆˆˆˆˆ€ˆˆ€ˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆ€ˆˆˆ€ˆˆ€ˆˆ€ˆ€ˆˆ€ˆ€ˆˆˆˆˆˆ€€ˆ€ˆ€ˆ€€ˆ€ˆˆˆ"""""!""21!!""S$"1DEB#$2DB"3$B26$"c8""†:2"BDBT%2"#"#"6"c#h#b6Š62fªhƒfŠˆ8b26hfqq‘‘‘Ѝ¡¨!"1E"CT$B"C1$2C!$cC!2†#1b¨#""B$"BTE$"""$2"22b#2bƒ6"b¦h#c¦Š6""&&ccˆ61!#""!""1E""CT$$B"C$$2C2$cCb2†#bb¨#c"D4DU"2"22b#2&‚6"&£h#c¦Š6ˆ¦ˆˆcc66&#caa#†ˆc#ˆªc#hfh&¶ˆj6¸¸™†xfw†xfwf˜ywhªŠ6ªf††Š‹hhš·¸hzg¶jygvŠww—ªww—Šfhffif¨¨�—©w‰ŠˆqŠ—‘ˆ¨¡¨ŠˆŠ�š˜¡cˆ8�ª:¡f†aa‹¨a�‹›ˆgv¨gv‰¡™w†¦ˆˆ¦ªªh¦ª™j¦š™‰©Šf¨—f™ªwww©www©c6c6ˆfff–f†jˆjŠja212161aaffbˆ8†‚¨:¦‚f†¦b‹¨¦‚‹›©ƒgv—†gvw†™ww†ªhc¨ªjˆš©Šf™™ªif¨vx—ªˆww©ww‰66119˜—‰z˜™f˜wŠa¡yˆaz‡�ša�f¶§f²}a&.͈x©hˆ˜ˆ©ab™ˆ&.ˆ·"îº'"âÛ+"&Ýâb±—ŠafÁË‘˜šª·ˆ�±Ñ©�y‡ª˜‡ØÛ¡w{Û¨·mfÝff{f&ÛaâÒˆˆw©ˆˆ—Šˆx©h™©ˆˆˆÛfª{k"·½&"Ü-.&¨a—©—�ˆ©�—¨ffaywwšw‡¡w‡¨™¡ˆ¡ø©ú•©_Uªw—Šfx©˜Š‰¨Ÿˆúš—š¯ª™y¥ŠˆWõˆ¡¨¨�¡©¡™ª¨™ªª©¨Š�¡¨šÛ&îû½mâ÷Øâwˆ&wŠ&w&wbw`b·Ûîb±×.f·.f·"f·"b·"b·&"·&"f·Ý{aâ¾æ~&~&r"r!"v!"vab{¿í.fí.Öwëbwëbw+bw+"wk"b{k"bÛ‘Û¨�¨ˆ¡ª¨™¡™©¡óUÿ¡8ÿªª£™Š‘wñ‘§ð‘y0¨™ñƒªUõ_?ú3©ˆ—:—:U©øSZõ3_˜�‰aÖËÂÌÂ!,--ª™™af»m"fÂÂf--,Ì‘©q—wfÖ½,,ÁÒÒ!,,ª™™af¼Û&b,,lÒÒÂÂ,,,,‘©q—wf?8_ð?Šóñ©ˆ™Š™‰™——U?Šñõ£©3š—xw‘w¡wwyUáîafafafw»{·»îî"îafafaqw»wâî».áîafafafw»{·»îî"îaaaq»âffww»î.¡©¡©¡©¡Š¨ˆ¡ªŠ©˜Šš¡ˆ¡Š¡ª‘™™šš¨™¨üÿÿÿÿÿÿððððÿÿðÿÿÿÿðÿðÿðÿÿÿÿðÿððÿÿÿððÿÿððÿÿÿðððððððððÿÿðÿððÿðÿðÿÿÿðÿðÿÿðÿðÿÿÿðÿÿðÿÿÿðÿðððÿÿðÿÿððððððÿÿððÿÿðÿÿÿðððððÿðÿÿðÿðÿðððÿðÿðððððÿÿðÿÿÿðÿÿÿðÿÿÿÿÿðÿÿÿðÿÿðÿððÿÿðÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿððÿÿÿÿðÿÿÿÿÿðÿððÿÿÿÿÿÿðÿðÿÿÿðÿÿðÿððÿðÿÿðÿÿðÿÿÿðÿððÿÿðÿðÿððððððððÿÿðÿðÿðÿÿÿÿÿÿÿðÿðÿðÿððÿÿÿÿÿÿðÿÿÿ  " """" "" "  """"  """  "" """ " " " "  """""" " """"" """"""""""""""""ˆˆˆˆˆˆˆˆˆ€ˆˆ€€€€€€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ»° »° »°° »»» »»» » » »° » ° »»° »° »»» »° »° »° »° »° »° ° »» °»»» »»»»»»»»»» @DD@@@@@@@DD@@@@@@DDD@DDDDDDDDD@@D@D@DDDDDDDDDDDDD€ˆˆˆˆˆˆˆˆˆˆ€ˆˆˆx€ """'w'""p''"""w'wp° »»»» »»» »»» °»»»{°      ""   """" "" """""""""""""""""      """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""€ˆˆˆˆˆˆˆˆˆˆ€ˆˆˆx€ˆ€ˆˆ€ˆ€ˆˆˆˆ€ˆ€ˆˆˆˆ€ˆ€ˆˆˆˆ€ˆ€ˆˆˆˆˆ€€ˆˆˆ€€ˆˆˆˆˆˆˆ€ˆ€ˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆ€€€ˆˆˆ€ˆ€ˆ€ˆˆˆˆ€ˆ€ˆ€€ˆˆ€€€€€€ˆˆ€€€€€ˆ€€ˆˆˆ€ˆˆˆ€ˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆ€ˆˆˆˆˆˆˆˆˆ€€ˆ€ˆ€ˆ€ˆ€ˆˆ€ˆˆˆˆ€ˆˆˆˆ€€ˆˆˆ€ˆ€ˆ€ˆ€ˆ€€ˆˆˆˆˆˆ€ˆ€ˆ€ˆˆˆˆˆ€ˆˆˆ€ˆ€ˆ€ˆ€ˆˆˆ€ˆˆˆˆˆ€ˆ€ˆˆˆˆˆ€ˆˆˆ€ˆˆˆˆ€ˆˆ€ˆ€€ˆˆ€ˆˆ€€€€€€ˆ€ˆ€ˆ€ˆ€ˆ€ˆ€€ˆˆˆ€ˆ€ˆ€ˆ€€ˆˆ€ˆ€ˆ€ˆ€€ˆˆˆˆˆˆˆˆˆ€ˆ€ˆˆ€ˆˆˆ€ˆˆˆˆˆ€€€€€€€ˆˆ€€€ˆˆˆˆ€ˆˆ€ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ€€ˆˆ€€ˆˆ€€ˆˆ€ˆˆˆˆˆˆˆˆˆ€ˆˆ€€ˆˆˆ@@DD@DD@D@DDDD@D@DDDD@D@DDDD@D@DDDDD@@DDD@@DDDDDDD@D@D@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDD@DDDD@@@DDD@D@D@DDDD@D@D@@DD@@@@@@DD@@@@@D@@DDD@DDD@DDDDD@DDDDDDDDDDDDD@DDDDDDDDD@@D@D@D@D@DD@DDDD@DDDD@@DDD@D@D@D@D@@DDDDDD@D@D@DDDDD@DDD@D@D@D@DDD@DDDDD@D@DDDDD@DDD@DDDD@DD@D@@DD@DD@@@@@@D@D@D@D@D@D@@DDD@D@D@D@@DD@D@D@D@@DDDDDDDDD@D@DD@DDD@DDDDD@@@@@@@DD@@@DDDD@DD@DDDDDDDDDDDDDDDDD@@@@@@DDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDDD°»» »»»»»»»»°»» »»°;» ° »»° »° »»» »° »° »»»»° »° »»»»° »° »»»»»° ° »»»° ° »»»» »»»° »° »° »»»» »»» »»»»»»»»»» »»» »»»»»»»»»» ° »»» »° ° ° »» »° »° »° »»» »° »° »° °»» ° ° ° ° ° °»» ° ° ° ° ° »° °»»»° »»»° »»»» »°»»» »»»»»»»»» »° » » »»» »»» »°° »° »° »° » ° »»° »»» »°» »» »° °»»»° »° »° »° »° °»»»»»»° »° »° »»»»»°»»»° »° »° »°» »»°» »»»»° »° »» »» »°»»» °» »»»°»»° »° °»»°»» ° ° ° ° ° ° »° »° »° »° »° »° °»»»° »° »° »° ° »» °»° »° »°° »»» »»» » » »° »° » » °»»» °»»» » »° ° ° ° ° ° ° »»° ° ° »»» » °»» °»» »»» »»»»»»»»»° ° »»° °»» ° °»» ° »»»»»»»»»° »»° ° »»» ðÿÿÿÿÿÿÿÿÿÿðÿÿÿÿð?ÿðÿÿðÿðÿÿÿÿðÿðÿÿÿÿðÿðÿÿÿÿðÿðÿÿÿÿÿððÿÿÿððÿÿÿÿÿÿÿðÿðÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿðððÿÿÿðÿðÿðÿÿÿÿðÿðÿððÿÿððððððÿÿðððððÿððÿÿÿðÿÿÿðÿÿÿÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿðÿÿÿÿÿÿÿÿÿððÿðÿðÿðÿðÿÿðÿÿÿÿðÿÿÿÿððÿÿÿðÿðÿðÿðÿððÿÿÿÿÿÿðÿðÿðÿÿÿÿÿðÿÿÿðÿðÿðÿðÿÿÿðÿÿÿÿÿðÿðÿÿÿÿÿðÿÿÿðÿÿÿÿðÿÿðÿððÿÿðÿÿððððððÿðÿðÿðÿðÿðÿððÿÿÿðÿðÿðÿððÿÿðÿðÿðÿððÿÿÿÿÿÿÿÿÿðÿðÿÿðÿÿÿðÿÿÿÿÿðððððððÿÿðððÿÿÿÿðÿÿðÿÿÿÿÿÿÿÿÿÿÿÿÿÿððÿÿððÿÿððÿÿðÿÿÿÿÿÿÿÿÿðÿÿððÿÿÿ€ �FHJLNOOOOOOOOOOOOOOOOOOOOOOOOO778899::;;<<==>>??????????????  2p2`3P3@404 5567ð8à9Ð:À;°???????????????? `P0 ðÐ  € ° P1p2`4P6@801 479;???????????????????? €€��¡¡²³ÄÅÖ×èé ú û   . / ? ? O _ o   §§§‡ ‡ ‡ ‡‡ a a� a a� a� aa� aa� a�a aaa aaaa a�� a�� a� a a� a a� a� aa� aa� a�a aaa aaaa a�� a�� a�```````````````````` " B " B " B " B " B " B " B " B"B"B"B"B " B " B " B " B " B " B " B " B " B " B " B " B"B"B"B"B " B " B " B " B3�@ �@ �@ @ �@ �@ �@ �@À?  P 3333333333333333333333333333333333333333  3333333333333333333333333333333333333333""03333333333333333333333333333333333333333@wwww pwww3333333333333333333333333333333333333333wwww pwww×3333333333333333333333333333333333333333 wªwwwwªwp§zwww§z3333333333333333333333333333333333333333wªwwwwªw€p§zwww§z3333333333333333333333333333333333333333wwªªwªwwpw§ªz§zw3333333333333333333333333333333333333333wwªªwªwwpw§ªz§zw3333333333333333333333333333333333333333wwwww™wwˆ3pwwww—yw‡83333333333333333333333333333333333333333wwwww™wwˆ3ð pwwww—yw‡83333#"233""3#""3"""3"""233333333333333333w3™wÌ™ˆ330s7“yÇœ‰833333"3"3#2#2"3#2"3#2"33333333333333333333w3™wÌ™ˆ330s7“yÇœ‰83"3333"333"333"3#2"3#2"3333333333333333333p33Ì3ÌÌ3Ì3Ì03Ã<ÃÌ<Ã<à "3333#""3"333"3#2"3"2"""3333333333333333333Ì3ÌÌ3Ì3Ì03Ã<ÃÌ<Ã<à 333333#2"333"3#2""23"33333333333333333333îˆîîˆî3™0ãŽèîŽè>“ 3333"3#2#2#2"3#2"#"3"33333333333333333333îˆîîˆî3™ 0ãŽèîŽè>“ 3333#""33""3#""3"3"2"""233333333333333333ÌîîîîÌ3w0ÃìîîîÎ ßDýð�ˆØO°0Žîè“3333333333333333333333333333333333333333Ãîî<ðÿ߈ý0ìîÎs3333333333333333333333333333333333333333ªÉœªÌðÿ šÌ©Ê 3333333333333333333333333333333333333333ЧÿÿzÉà}úÿ¯— 3333333333333333333333333333333333333333�göÕzyf_­`3333333333333333333333333333333333333333õoVVð Pÿfe 3333333333333333333333333333333333333333Ð   ðÿPݪ3333CDD4CDD4D3C4DDD433333333óÿÿ33ÿ?33333À߈ý33333C433C43D4D4D33333333333ÿ3ó?ó3ÿ33333ð�ˆØ33333C433C43DDD4D33333333333ÿ3ó?ÿ3ó?3333ðˆˆˆ33333C433C43DDD4DDD333333333óÿÿ?ÿ3ó?3333`ðˆˆˆ33333C433C43DCC4D3333333333333ó?ÿ3ó?3333ð�ˆØðÿ33333C433C43D3C4D3333333333333ÿ3ó?ó33333`߈ý ßDý33333C43CDD4D3C4DDD433333333óÿ?33ÿ?333333ðÿÿðMDÔ3333333333333333333333333333333333333333`3ð�ØðDDD°3333333333333333333333333333333333333333߈ˆý pðDDD3333333333333333333333333333333333333333�ˆˆø ðMDÔ3333333333333333333333333333333333333333Ð �ˆˆø  ßDý3333333333333333333333333333333333333333 Ð ߈ˆý ðÿ3333333333333333333333333333333333333333 ð�Ø""À3333333333333333333333333333333333333333ÿÿ 3333333333333333333333333333333333333333ðÿ3333333333333333333333333333333333333333 ßˆýà3333333333333333333333333333333333333333°ð�ˆØ 3333333333333333333333333333333333333333ðˆˆˆ333311131333333333óÿ33ÿ?33333ðˆˆˆ ðÿ333331331333311333333333ÿÿ3ó3ÿ333330ð�ˆØ߈ý3333313313333133333333ó?ÿ3ÿ3ó?3333߈ýà�ðÿÿØ033333133133133333333ÿ3ÿ3ÿ3ó?3333ðÿðMÔ�3333313313333133333333ÿÿÿ?ÿ3ó?3333ßDDý_3333313313333313333333333ÿ3ó?ó33333 ODDôÀ333313131313333333333ÿ33ÿ?33333ðODDôðÿ3333333333333333333333333333333333333333ßDDý ߈ý3333333333333333333333333333333333333333P°ðMÔð�ˆØ 3333333333333333333333333333333333333333ÿÿðˆˆˆ333333333333"32333333#233333"3#"3#"33333ððˆˆˆ333333333333"22#"3"#2""2333#"3"#2"#23333 ð�ˆØ°333333333333""2"#2#"3#233333"3"22"223333߈ý333333333333"#2"23#"3#233333"3"32"323333ðÿ333333333333"32#"3"#23"2333#"2#"3#"33333 3333333333333333333333333333333333333333 @3333333333333333333333333333333333333333P33333333333333333333333333333333333333333333333333333333333333333333333333333333€3333333333333333333333333333333333333333°ÿÿ p3333333333333333333333333333333333333333àðMÔ333333333333333333sw73333333333333333333ßDDý 33333333333333333szw§7333333333333333333ODDô"" €33333333333333333s§ªz7333333333333333333 ODDô 3333333333333333337wy7333333333333333333ßDDý  À3333333333333333333—œ3333333333333333333ðMÔ pwp 333333333333333333sÇÃ3333333333333333333ÿÿpzw§`P333333333333333333|ìè33333333333333333330p§zz3333333333333333339ÉÎ3333333333333333333swww7 333333333333333333ݪ73333333333333333333à37ws333333333333333333sªªú3333333333333333333Ðà3333333333333333333333yªzÍ<333333333333333333€î3333333333333333333333ieU“<33333333333333³;»3 î033333333333333333333Ó?£:333333333333333»»»;  s37ª ð333333333333333333333333333333333333»»»;ß§ªª§ 333333333333333333333333333333333333»»»;œ§zª 333333333333333333333333333333333333³»»7À `ÌVfÿ 3333333333333333333333333333333333333»{3ªÝ3333333333333333333333333333333333333³733333333333333333333333333333333333333333ªo-- title: ProNama-Chan shooter! -- version: 1.06 (2022/06/18) -- author: ZAP -- desc: Tiny shoot'em up featuring "ProNama-chan" -- script: lua local InitEndFlag=0 -- Const local SCENE_TITLE=0 local PHASE_TitleInit=0 local PHASE_TitleMain=1 local PHASE_TitleGameStart=2 local SCENE_GAME=1 local PHASE_GameInit=0 local PHASE_GameWaveStart=1 local PHASE_GameMain=2 local PHASE_GameOver=3 local PHASE_GameEnding=4 local Scene=SCENE_TITLE local Phase=PHASE_TitleInit local HiScore=0 local Counter=0 local GameoverFlag=0 local Score=0 local Life=0 local GetItemCount=0 local GetItemNorma=0 local Round=0 local Wave=0 local WaveDispTime=0 local WaveClearFlag=0 local WaveTimer=0 local TimeBonus=0 local ExHeartColor=0 local ExHeartFlag=0 local ExHeartX=0 local ExHeartY=0 local OsanpoK_Time=0 local OsanpoK_X=0 local OsanpoK_Dir=0 local OsanpoK_Spd=0 local MyX=0 local MyY=0 local MySpeed=0 local MyFlashFlag=0 local MyFlashTime=0 local Muteki=0 local MyShotMax=7 local MyShotInterval=0 local MyShotFlag={} local MyShotX={} local MyShotY={} local MyShotDir={} local MyShotSpd={} local EnemyMax=12 local EnemyFlag={} local EnemyX={} local EnemyY={} local EnemyDir={} local EnemySpd={} local EnemyScale={} local EnemyHP={} local EnemyExpandTime=0 local EneTamaSeqNum={} local EneTamaSeqWait={} local EneTamaSeqPointer={} local EneTamaSeq={ --tim ofs dir spd way pch col No.1 { 120, 0, -1,115, 1, 0, 0, -255 }, --tim ofs dir spd way pch col No.2 { 150, 0, -1,100, 3, 16, 1, 60, 0, -1,120, 4, 16, 3, -255 }, --tim ofs dir spd way pch col No.3 { 120, 0, -1,120, 5, 24, 0, 60, 0, -1,140, 7, 16, 4, 120, 0,192,178, 9, 14, 2, -255 }, --tim ofs dir spd way pch col No.4 { 110, 0, -1, 80, 23, 11, 4, 16, 0, -1,140, 1, 0, 0, 16, 0, -1,150, 1, 0, 0, 16, 0, -1,160, 1, 0, 0, 16, 0, -1,170, 1, 0, 0, 1, 0, -1, 60, 23, 11, 2, 16, 0, -1,180, 1, 0, 0, 16, 0, -1,190, 1, 0, 0, 16, 0, -1,200, 1, 0, 0, 16, 0, -1,210, 1, 0, 0, 1, 0, -1, 70, 23, 11, 4, 16, 0, -1,180, 1, 0, 0, 16, 0, -1,190, 1, 0, 0, 90, 0, -1,200, 15, 16, 1, 30, 0,192,220, 16, 16, 3, 20, 0, -1,240, 15, 16, 1, 15, 0,192,260, 16, 16, 3, -255 }, --tim ofs dir spd way pch col No.5 { 140, 0, -1,100, 1, 0, 2, 6, 0, -1,100, 1, 0, 2, 6, 0, -1,100, 1, 0, 2, 6, 0, -1,100, 1, 0, 2, 6, 0, -1,100, 1, 0, 2, 6, 0, -1,100, 1, 0, 2, -255 }, --tim ofs dir spd way pch col No.6 { 120, 0,192,165, 2, 16, 3, 4, 0,184,165, 2, 16, 3, 4, 0,176,165, 2, 16, 3, 4, 0,168,165, 2, 16, 3, 4, 0,160,165, 2, 16, 3, 4, 0,152,165, 2, 16, 3, 4, 0,144,165, 2, 16, 3, 4, 0,136,165, 2, 16, 3, 4, 0,128,165, 2, 16, 3, 4, 0,120,165, 2, 16, 3, 4, 0,112,165, 2, 16, 3, 4, 0,104,165, 2, 16, 3, 4, 0, 96,165, 2, 16, 3, 8, 0, 88,165, 2, 16, 3, 4, 0, 80,165, 2, 16, 3, 4, 0, 72,165, 2, 16, 3, 4, 0, 64,165, 2, 16, 3, 4, 0, 56,165, 2, 16, 3, 4, 0, 48,165, 2, 16, 3, 4, 0, 40,165, 2, 16, 3, 4, 0, 32,165, 2, 16, 3, 4, 0, 24,165, 2, 16, 3, 4, 0, 16,165, 2, 16, 3, 4, 0, 8,165, 2, 16, 3, 4, 0, 0,165, 2, 16, 3, 4, 0,248,165, 2, 16, 3, 4, 0,240,165, 2, 16, 3, 4, 0,232,165, 2, 16, 3, 4, 0,224,165, 2, 16, 3, 4, 0,216,165, 2, 16, 3, 4, 0,208,165, 2, 16, 3, 4, 0,200,165, 2, 16, 3, 40, 0,192,165, 2, 16, 0, 4, 0,200,165, 2, 16, 0, 4, 0,208,165, 2, 16, 0, 4, 0,216,165, 2, 16, 0, 4, 0,224,165, 2, 16, 0, 4, 0,232,165, 2, 16, 0, 4, 0,240,165, 2, 16, 0, 4, 0,248,165, 2, 16, 0, 4, 0, 0,165, 2, 16, 0, 4, 0, 8,165, 2, 16, 0, 4, 0, 16,165, 2, 16, 0, 4, 0, 24,165, 2, 16, 0, 4, 0, 32,165, 2, 16, 0, 4, 0, 40,165, 2, 16, 0, 4, 0, 48,165, 2, 16, 0, 4, 0, 56,165, 2, 16, 0, 4, 0, 64,165, 2, 16, 0, 4, 0, 72,165, 2, 16, 0, 4, 0, 80,165, 2, 16, 0, 4, 0, 88,165, 2, 16, 0, 4, 0, 96,165, 2, 16, 0, 4, 0,104,165, 2, 16, 0, 4, 0,112,165, 2, 16, 0, 4, 0,120,165, 2, 16, 0, 4, 0,128,165, 2, 16, 0, 4, 0,136,165, 2, 16, 0, 4, 0,144,165, 2, 16, 0, 4, 0,152,165, 2, 16, 0, 4, 0,160,165, 2, 16, 0, 4, 0,168,165, 2, 16, 0, 4, 0,176,165, 2, 16, 0, 4, 0,184,165, 2, 16, 0, 70, 0, -1,180, 3, 8, 1, -255 } } -- "Tama" means bullet. local TamaMax=64 local TamaFlag={} local TamaX={} local TamaY={} local TamaDir={} local TamaSpd={} local TamaColor={} -- "Baku" means explosion. local BakuMax=48 local BakuTime=15 local BakuFlag={} local BakuX={} local BakuY={} local BakuScale={} local ItemMax=128 local ItemFlag={} local ItemX={} local ItemY={} local ItemVX={} local ItemVY={} local StarMax=256 local StarX={} local StarY={} local StarCol={} local StarSpd={} local PalData1={ 0,0,0,240,32,240,240,240,0,92,76,63,64,128,255,81,135,107,80,178,127,135,114,98,240,16,48,219,127,76,150,145,129,128,240,128,249,189,156,211,211,211,255,230,202,246,246,246 } local PalData2={ 128,128,192,28,26,24,114,99,84,91,72,52,178,145,132,189,217,156,70,47,37,252,237,220,170,73,37,246,187,154,234,144,94,167,206,211,50,68,58,114,158,158,147,142,125,110,156,89 } InitEndFlag=1 function save(_s,_d) pmem(_s,_d) end function load(_s) return(pmem(_s)) end function GetSin(_dir) -- Dir takes a value from 0 to 255 local var=math.sin(math.rad(_dir*360/256))*10000 if var>0 then return -math.floor(var)/10000 else return -math.ceil(var)/10000 end end function GetCos(_dir) -- Dir takes a value from 0 to 255 local var=math.cos(math.rad(_dir*360/256))*10000 if var>0 then return math.floor(var)/10000 else return math.ceil(var)/10000 end end function GetDir(_x1,_y1,_x2,_y2) local d=math.deg(math.atan(-(_y2-_y1),_x2-_x1)) if d<0 then d=360+d end return math.floor(d*256/360+0.5) end function CheckHit(_x1,_y1,_x2,_y2,_Depth) local x1=_x1//1 local x2=_x2//1 local y1=_y1//1 local y2=_y2//1 if (x1-x2)*(x1-x2)+(y1-y2)*(y1-y2) < _Depth*_Depth then return true else return false end end function SprEx(_id,_x,_y,_color,_scale,_flip,_rot,_w,_h) local x1=_x local y1=_y local x2=x1+8*_w*_scale-1 local y2=y1+8*_h*_scale-1 local u1=(_id%16)*8 local v1=(_id//16)*8 local u2=u1+8*_w-1 local v2=v1+8*_h-1 textri(x1,y1,x2,y1,x1,y2, u1,v1,u2,v1,u1,v2, false,_color) textri(x2,y1,x1,y2,x2,y2, u2,v1,u1,v2,u2,v2, false,_color) end function MyMove() local dir=-1 if btn(0) and btn(3) then dir=32 elseif btn(0) and btn(2) then dir=96 elseif btn(1) and btn(2) then dir=160 elseif btn(1) and btn(3) then dir=224 elseif btn(3) then dir=0 elseif btn(0) then dir=64 elseif btn(2) then dir=128 elseif btn(1) then dir=192 end if dir>-1 then local tmpV=MySpeed if btn(5) then tmpV=tmpV*0.43 end MyY=MyY+GetSin(dir)*tmpV MyX=MyX+GetCos(dir)*tmpV end -- Border check if MyY<10 then MyY=10 end if MyY>128 then MyY=128 end if MyX<8 then MyX=8 end if MyX>152 then MyX=152 end if MyFlashFlag>0 then MyFlashTime=MyFlashTime-1 if MyFlashTime==0 then MyFlashFlag=0 end end end function MyShotCheck() if btn(4) then if MyShotInterval<1 then MyShotAppear() else MyShotInterval=MyShotInterval-1 end elseif MyShotInterval<3 then MyShotInterval=0 end end function MyShotAppear() MyShotInterval=4 for i=1,MyShotMax do if MyShotFlag[i]==-1 then if btn(5) then MyShotFlag[i]=1 else MyShotFlag[i]=0 end MyShotX[i]=MyX MyShotY[i]=MyY MyShotDir[i]=56+math.random(0,16) MyShotSpd[i]=6 break end end end function MyShotMove() for i=1,MyShotMax do if MyShotFlag[i]~=-1 then MyShotX[i]=MyShotX[i]+GetCos(MyShotDir[i])*MyShotSpd[i] MyShotY[i]=MyShotY[i]+GetSin(MyShotDir[i])*MyShotSpd[i] if (MyShotY[i]<-15) or (MyShotY[i]>144) or (MyShotX[i]<-15) or (MyShotX[i]>168) then MyShotFlag[i]=-1 end end end end function EnemyMove() if EnemyExpandTime>0 then EnemyExpandTime=EnemyExpandTime-1 return end local EnemyAppearNum=CheckEnemyNum() for i=1,EnemyMax do if EnemyFlag[i]~=-1 then EnemyX[i]=EnemyX[i]+GetCos(EnemyDir[i])*EnemySpd[i] EnemyY[i]=EnemyY[i]+GetSin(EnemyDir[i])*EnemySpd[i] if (Counter%120)==0 then EnemyDir[i]=(EnemyDir[i]+128)&255 end if EnemyFlag[i]~=-1 then -- Enemy Tama sequence check local tmp=0 if EnemyAppearNum<5 then tmp=(5-EnemyAppearNum)*0.4 end EneTamaSeqWait[i]=EneTamaSeqWait[i]-1-tmp if EneTamaSeqWait[i]<0 then -- Enemy Tama data set local p=EneTamaSeqPointer[i]*7 -- TamaOffsetIndex=EneTamaSeq[EneTamaSeqNum[i]][p+2] local TD=EneTamaSeq[EneTamaSeqNum[i]][p+3] local TS=EneTamaSeq[EneTamaSeqNum[i]][p+4]/100 local TW=EneTamaSeq[EneTamaSeqNum[i]][p+5] local TP=EneTamaSeq[EneTamaSeqNum[i]][p+6] local TC=EneTamaSeq[EneTamaSeqNum[i]][p+7] TamaAppear(EnemyX[i],EnemyY[i],TD,TS,TW,TP,TC) EneTamaSeqPointer[i]=EneTamaSeqPointer[i]+1 EneTamaSeqWait[i]=EneTamaSeq[EneTamaSeqNum[i]][EneTamaSeqPointer[i]*7+1] end -- Enemy Tama sequence loop check if EneTamaSeqWait[i]==-255 then EneTamaSeqPointer[i]=0 EneTamaSeqWait[i]=EneTamaSeq[EneTamaSeqNum[i]][1] end end end end end function CheckEnemyNum() local EnemyNum=0 for i=1,EnemyMax do if EnemyFlag[i]~=-1 then EnemyNum=EnemyNum+EnemyScale[i] end end return EnemyNum end function EnemyAllDelete() for i=1,EnemyMax do if EnemyFlag[i]~=-1 then EnemyFlag[i]=-1 for k=1,4 do local tmp=math.random(0,255) local tmp2=k*EnemyScale[i]*1.25 local BakuX=EnemyX[i]+tmp2*GetCos(tmp) local BakuY=EnemyY[i]+tmp2*GetSin(tmp) BakuAppear(BakuX,BakuY,EnemyScale[i],k*3) end BakuAppear(EnemyX[i],EnemyY[i],EnemyScale[i],0) end end end function TamaAppear(_tX,_tY,_tDir,_tSpd,_tWay,_tPitch,_tColor) if _tDir==-1 then _tDir=GetDir(_tX,_tY,MyX,MyY) -- Aim player end if (_tWay & 1)==1 then _tDir=(_tDir-(_tWay//2*_tPitch)) & 255 -- Odd else _tDir=(_tDir-_tPitch//2-(_tWay//2-1)*_tPitch) & 255 -- Even end for j=1,_tWay do for i=1,TamaMax do if TamaFlag[i]==-1 then TamaFlag[i]=1 TamaX[i]=_tX TamaY[i]=_tY TamaDir[i]=_tDir TamaSpd[i]=_tSpd*(0.95+0.5*Round) TamaColor[i]=_tColor break end end _tDir=(_tDir+_tPitch) & 255 end end function TamaMove() for i=1,TamaMax do if TamaFlag[i]==1 then TamaX[i]=TamaX[i]+GetCos(TamaDir[i])*TamaSpd[i] TamaY[i]=TamaY[i]+GetSin(TamaDir[i])*TamaSpd[i] if (TamaY[i]<-15) or (TamaY[i]>144) or (TamaX[i]<-15) or (TamaX[i]>168) then TamaFlag[i]=-1 end end end end function TamaAllDelete() for i=1,TamaMax do TamaFlag[i]=-1 end end function ItemAppear(_x,_y) for i=1,ItemMax do if ItemFlag[i]<0 then ItemFlag[i]=1 ItemX[i]=_x ItemY[i]=_y ItemVX[i]=math.random(0,80)/80-0.4 ItemVY[i]=math.random(0,100)/100-2.0 break end end end function ItemMove() for i=1,ItemMax do if ItemFlag[i]==1 then ItemX[i]=ItemX[i]+ItemVX[i] ItemY[i]=ItemY[i]+ItemVY[i] ItemVY[i]=ItemVY[i]+0.04 if (ItemY[i]>144) or (ItemX[i]<-15) or (ItemX[i]>168) then ItemFlag[i]=-1 end end end end function BakuAppear(_x,_y,_s,_w) for i=1,BakuMax do if BakuFlag[i]<0 then BakuFlag[i]=BakuTime+_w BakuX[i]=_x BakuY[i]=_y BakuScale[i]=_s break end end end function BakuCheck() for i=1,BakuMax do if BakuFlag[i]>-1 then BakuFlag[i]=BakuFlag[i]-1 if BakuFlag[i]==BakuTime-1 then sfx(3) end end end end function HitCheck_MyShot_Enemy() if EnemyExpandTime>0 then return end for i=1,MyShotMax do for j=1,EnemyMax do if (MyShotFlag[i]~=-1) and (EnemyFlag[j]~=-1) then if CheckHit(MyShotX[i],MyShotY[i],EnemyX[j],EnemyY[j],EnemyScale[j]*9)==true then -- sfx(5) Score=Score+1 EnemyHP[j]=EnemyHP[j]-10-MyShotFlag[i]*3 MyShotFlag[i]=-1 if EnemyHP[j]<1 then EnemyFlag[j]=-1 for k=1,12 do local tmp=math.random(0,255) local tmp2=k*EnemyScale[j]*1.5 local BakuX=EnemyX[j]+tmp2*GetCos(tmp) local BakuY=EnemyY[j]+tmp2*GetSin(tmp) BakuAppear(BakuX,BakuY,EnemyScale[j],k*3) end for k=1,EnemyScale[j]*18 do ItemAppear(EnemyX[j],EnemyY[j]) end Score=Score+EnemyScale[j]*EnemyScale[j]*1000 if EnemyScale[j]>1 then Score=Score+1000 end end end end end end end function HitCheck_Tama_MyChr() -- Invincible check if Muteki>0 then Muteki=Muteki-1 return 0 end for i=1,TamaMax do if TamaFlag[i]==1 then if CheckHit(TamaX[i],TamaY[i],MyX,MyY,2)==true then TamaFlag[i]=-1 if Life>0 then sfx(6) Life=Life-1 if Life==0 then for k=1,48 do local tmp=math.random(0,255) local tmp2=k*1.05 local BakuX=MyX+tmp2*GetCos(tmp) local BakuY=MyY+tmp2*GetSin(tmp) BakuAppear(BakuX,BakuY,1,k*2) end GameoverFlag=300 end end MyFlashFlag=2 MyFlashTime=15 Muteki=120 break end end end end function HitCheck_Item_MyChr() if MyFlashFlag==2 then return 0 end for i=1,ItemMax do if ItemFlag[i]==1 then if CheckHit(ItemX[i],ItemY[i],MyX,MyY,14)==true then ItemFlag[i]=-1 GetItemCount=GetItemCount+1 if GetItemCount==GetItemNorma then if Life<5 then Life=Life+1 ExHeartColor=0 else Score=Score+GetItemNorma*1000 ExHeartColor=1 end GetItemCount=0 if GetItemNorma<451 then GetItemNorma=GetItemNorma+50 end ExHeartFlag=60 ExHeartX=MyX-3 ExHeartY=MyY end Score=Score+500 MyFlashFlag=1 MyFlashTime=15 Muteki=30 sfx(4) break end end end end function ClearCheck() if WaveClearFlag==0 then WaveTimer=WaveTimer-1 if WaveTimer<1 then EnemyAllDelete() end if CheckEnemyNum()==0 then WaveClearFlag=180 TimeBonus=WaveTimer*2 Score=Score+TimeBonus TamaAllDelete() end else WaveClearFlag=WaveClearFlag-1 if WaveClearFlag==0 then Wave=Wave+1 if Wave<10 then Phase=PHASE_GameWaveStart else Phase=PHASE_GameEnding EndingTime=0 end end end end function OsanpoK() -- Mascot character OsanpoK_Time=OsanpoK_Time-1 if OsanpoK_Time<1 then OsanpoK_Time=math.random(120,480) OsanpoK_Dir=math.random(1,3)-2 end OsanpoK_X=OsanpoK_X+OsanpoK_Dir*OsanpoK_Spd if OsanpoK_X<0 then OsanpoK_X=0 OsanpoK_Dir=-OsanpoK_Dir end if OsanpoK_X>60 then OsanpoK_X=60 OsanpoK_Dir=-OsanpoK_Dir end end function Title_Init() -- Palette change for i=1,48 do poke(0x3FC0+i-1,PalData2[i]) end HiScore=load(0) if HiScore<10000 then HiScore=10000 end cls(0) spr(128,166,-8,0,2,0,0,4,4) spr(192,166,56,0,2,0,0,4,4) print("Pro-Nama Chan",12,40,9,false,2) print("SHOOTER!",72,64,9,false,2) print("Push Z key To Start!!",28,96,7,false,1) print(string.format("High Score %8d",HiScore),70,0,7,false,1) print("Programmed by ZAP",0,131,7,false,1) print("Version 1.06",178,131,7,false,1) Phase=PHASE_TitleMain end function Title_Main() local YesNoflag if btnp(4) then cls(0) rect(166,32,32,64,0) spr(132,166,-8,0,2,0,0,4,4) spr(196,166,56,0,2,0,0,4,4) print("OK, Good Luck!",12,64,9,false,2) TitleWait=120 Phase=PHASE_TitleGameStart end if keyp(18) then -- R key pushed print("Reset High Score OK? [y/n]",52,10,1,false,1) YesNoflag=1 else YesNoflag=0 end if YesNoflag then if keyp(25) then -- Y key pushed HiScore=10000 save(0,HiScore) rect(0,0,240,18,0) print(string.format("High Score %8d",HiScore),70,0,7,false,1) YesNoflag=0 end if keyp(14) then -- N key pushed rect(0,10,240,8,0) YesNoflag=0 end end end function Title_GameStart() TitleWait=TitleWait-1 if TitleWait==0 then -- Palette change for i=1,48 do poke(0x3FC0+i-1,PalData1[i]) end Scene=SCENE_GAME Phase=PHASE_GameInit end end function Game_Init() GameoverFlag=0 Score=0 Life=5 GetItemCount=0 GetItemNorma=50 Round=0 Wave=1 -- WaveDispTime=180 -- WaveClearFlag=0 -- WaveTimer=100*60-1 -- TimeBonus=0 MyX=80 MyY=120 MySpeed=1.9 MyFlashFlag=0 MyFlashTime=0 Muteki=60 for i=1,MyShotMax do MyShotFlag[i]=-1 MyShotX[i]=0 MyShotY[i]=0 MyShotDir[i]=0 MyShotSpd[i]=0 end for i=1,EnemyMax do EnemyFlag[i]=-1 EnemyX[i]=0 EnemyY[i]=0 EnemyDir[i]=0 EnemySpd[i]=0 EnemyScale[i]=0 EnemyHP[i]=0 EneTamaSeqNum[i]=0 EneTamaSeqWait[i]=-1 EneTamaSeqPointer[i]=0 end -- EnemyExpandTime=0 for i=1,TamaMax do TamaFlag[i]=-1 TamaX[i]=0 TamaY[i]=0 TamaDir[i]=0 TamaSpd[i]=0 TamaColor[i]=0 end for i=1,BakuMax do BakuFlag[i]=-1 BakuX[i]=0 BakuY[i]=0 BakuScale[i]=1 end for i=1,ItemMax do ItemFlag[i]=-1 ItemX[i]=0 ItemY[i]=0 ItemVX[i]=0.0 ItemVY[i]=0.0 end for i=1,StarMax do StarX[i]=math.random(0,160) StarY[i]=math.random(0,1350000) StarSpd[i]=math.random(0,20000)+5000 StarCol[i]=math.random(1,15) end OsanpoK_Time=math.random(300,1000) OsanpoK_X=math.random(1,56) OsanpoK_Dir=math.random(1,3)-2 OsanpoK_Spd=0.3 -- Debug value -- tmpy=0 -- tmpx=0 music(0) Phase=PHASE_GameWaveStart end function Game_WaveStart() for i=1,EnemyMax do EnemyFlag[i]=-1 end if Wave==1 then EnemyData={ --ID X Y dir spd HP seq { 2, 80, 32,192, 25, 75, 2}, -- 1 { 1, 40, 64, 0, 25, 25, 1}, -- 2 { 1,120, 64,128, 25, 25, 1}, -- 3 {-1, 0, 0, 0, 0, 0, 0}, -- 4 {-1, 0, 0, 0, 0, 0, 0}, -- 5 {-1, 0, 0, 0, 0, 0, 0}, -- 6 {-1, 0, 0, 0, 0, 0, 0}, -- 7 {-1, 0, 0, 0, 0, 0, 0}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==2 then EnemyData={ --ID X Y dir spd HP seq { 1, 24, 48, 64, 25, 25, 1}, -- 1 { 1, 80, 36, 64, 25, 25, 1}, -- 2 { 1,136, 48, 64, 25, 25, 1}, -- 3 { 2, 60, 56,128, 20, 75, 2}, -- 4 { 2,100, 56, 0, 20, 75, 2}, -- 5 {-1, 0, 0, 0, 0, 0, 0}, -- 6 {-1, 0, 0, 0, 0, 0, 0}, -- 7 {-1, 0, 0, 0, 0, 0, 0}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==3 then EnemyData={ --ID X Y dir spd HP seq { 2, 32, 16, 0, 30, 75, 2}, -- 1 { 1, 32, 48,128, 30, 25, 1}, -- 2 { 1, 32, 72, 0, 30, 25, 1}, -- 3 { 2,128, 16,128, 30, 75, 2}, -- 4 { 1,128, 48, 0, 30, 25, 1}, -- 5 { 1,128, 72,128, 30, 25, 1}, -- 6 {-1, 0, 0, 0, 0, 0, 0}, -- 7 {-1, 0, 0, 0, 0, 0, 0}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==4 then EnemyData={ --ID X Y dir spd HP seq { 1, 32, 60, 0, 30, 25, 1}, -- 1 { 1, 32, 80, 0, 30, 25, 1}, -- 2 { 1, 80, 60, 0, 30, 25, 1}, -- 3 { 1, 80, 80, 0, 30, 25, 1}, -- 4 { 1,128, 60, 0, 30, 25, 1}, -- 5 { 1,128, 80, 0, 30, 25, 1}, -- 6 { 3, 80, 24, 0, 10,120, 3}, -- 7 {-1, 0, 0, 0, 0, 0, 0}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==5 then EnemyData={ --ID X Y dir spd HP seq { 2, 60, 32, 96, 20, 75, 2}, -- 1 { 2, 60, 64,160, 20, 75, 5}, -- 2 { 2, 84, 32, 32, 20, 75, 2}, -- 3 { 2, 84, 64,224, 20, 75, 5}, -- 4 { 1, 48, 16, 96, 25, 25, 1}, -- 5 { 1, 48, 80,160, 25, 25, 1}, -- 6 { 1,100, 16, 32, 25, 25, 1}, -- 7 { 1,100, 80,224, 25, 25, 1}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==6 then EnemyData={ --ID X Y dir spd HP seq { 1, 32, 60, 0, 30, 25, 1}, -- 1 { 1, 32, 80, 0, 30, 25, 1}, -- 2 { 2, 80, 60, 0, 30, 75, 5}, -- 3 { 1, 80, 80, 0, 30, 25, 1}, -- 4 { 1,128, 60, 0, 30, 25, 1}, -- 5 { 1,128, 80, 0, 30, 25, 1}, -- 6 { 3, 48, 24, 0, 10,125, 3}, -- 7 { 3,112, 24, 0, 10,125, 3}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==7 then EnemyData={ --ID X Y dir spd HP seq { 3, 80, 40,192, 20,125, 6}, -- 1 { 3, 32, 56, 0, 15,125, 3}, -- 2 { 3,128, 56,128, 15,125, 3}, -- 3 {-1, 0, 0, 0, 0, 0, 0}, -- 4 {-1, 0, 0, 0, 0, 0, 0}, -- 5 {-1, 0, 0, 0, 0, 0, 0}, -- 6 {-1, 0, 0, 0, 0, 0, 0}, -- 7 {-1, 0, 0, 0, 0, 0, 0}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } elseif Wave==8 then EnemyData={ --ID X Y dir spd HP seq { 2, 32, 16, 0, 30, 75, 2}, -- 1 { 2, 32, 44,128, 30, 75, 2}, -- 2 {-1, 32, 72, 0, 30, 25, 1}, -- 3 { 1, 56, 64,192, 30, 25, 1}, -- 4 { 1, 56, 80,192, 30, 25, 1}, -- 5 { 2,128, 16,128, 30, 75, 2}, -- 6 { 2,128, 44, 0, 30, 75, 2}, -- 7 {-1,128, 72,128, 30, 25, 1}, -- 8 { 1,104, 64,192, 30, 25, 1}, -- 9 { 1,104, 80,192, 30, 25, 1}, --10 { 3, 80, 32,192, 10,125, 3}, --11 { 2, 80, 64,192, 10, 75, 5}, --12 } elseif Wave==9 then EnemyData={ --ID X Y dir spd HP seq { 5, 80, 48, 64, 15,300, 4}, -- 1 {-1, 0, 0, 0, 0, 0, 0}, -- 2 {-1, 0, 0, 0, 0, 0, 0}, -- 3 {-1, 0, 0, 0, 0, 0, 0}, -- 4 {-1, 0, 0, 0, 0, 0, 0}, -- 5 {-1, 0, 0, 0, 0, 0, 0}, -- 6 {-1, 0, 0, 0, 0, 0, 0}, -- 7 {-1, 0, 0, 0, 0, 0, 0}, -- 8 {-1, 0, 0, 0, 0, 0, 0}, -- 9 {-1, 0, 0, 0, 0, 0, 0}, --10 {-1, 0, 0, 0, 0, 0, 0}, --11 {-1, 0, 0, 0, 0, 0, 0} --12 } end for i=1,EnemyMax do EnemyFlag[i]=EnemyData[i][1] if EnemyData[i][1]~=-1 then EnemyScale[i]=EnemyData[i][1] EnemyX[i]=EnemyData[i][2] EnemyY[i]=EnemyData[i][3] EnemyDir[i]=EnemyData[i][4] EnemySpd[i]=EnemyData[i][5]/100 EnemyHP[i]=EnemyData[i][6]*10 EneTamaSeqNum[i]=EnemyData[i][7] EneTamaSeqWait[i]=60+math.random(0,120) EneTamaSeqPointer[i]=0 end end EnemyExpandTime=120 WaveDispTime=180 WaveClearFlag=0 WaveTimer=100*60-1 TimeBonus=0 Counter=60 Phase=PHASE_GameMain end function Game_Main() if GameoverFlag==0 then HitCheck_MyShot_Enemy() HitCheck_Tama_MyChr() HitCheck_Item_MyChr() MyMove() MyShotCheck() else GameoverFlag=GameoverFlag-1 if GameoverFlag==1 then GameoverDispTime=420 music() Phase=PHASE_GameOver end end MyShotMove() EnemyMove() TamaMove() ItemMove() BakuCheck() ClearCheck() -- Osanpo mascot Kei OsanpoK() -- Count up Counter=Counter+1 end function Game_Over() GameoverDispTime=GameoverDispTime-1 if GameoverDispTime==0 then Scene=SCENE_TITLE Phase=PHASE_TitleInit end if HiScore180 then print("You defeated all Waves!!",16,42,7,false,1) end if EndingTime>360 then LifeBonus=Life*20000 print("LIFE BONUS "..LifeBonus,24,55,7,false,1) end if EndingTime>540 then print("We present you next Waves!!",16,95,7,false,1) end if EndingTime>720 then print("Push Button!",80,120,7,false,1) if btnp(4) then -- Palette change for i=1,48 do poke(0x3FC0+i-1,PalData1[i]) end Score=Score+LifeBonus Wave=1 Round=Round+1 Phase=PHASE_GameWaveStart end end end function TIC() if InitEndFlag==0 then return end if Scene==SCENE_TITLE then if Phase==PHASE_TitleInit then Title_Init() elseif Phase==PHASE_TitleMain then Title_Main() elseif Phase==PHASE_TitleGameStart then Title_GameStart() end elseif Scene==SCENE_GAME then cls(0) if Phase==PHASE_GameInit then Game_Init() elseif Phase==PHASE_GameWaveStart then Game_WaveStart() PutStars() PutBG() elseif Phase==PHASE_GameMain then Game_Main() PutStars() PutSprite() PutBG() elseif Phase==PHASE_GameOver then Game_Over() PutStars() PutBG() elseif Phase==PHASE_GameEnding then Game_Ending() end end end function PutStars() -- Stars for i=1,StarMax do StarY[i]=StarY[i]+StarSpd[i] if StarY[i]>1350000 then StarX[i]=math.random(0,160) StarY[i]=0 StarSpd[i]=math.random(0,20000)+5000 StarCol[i]=math.random(1,15) end pix(StarX[i],StarY[i]//10000,StarCol[i]) if StarSpd[i]>22500 then pix(StarX[i]+1,StarY[i]//10000,StarCol[i]) pix(StarX[i] ,StarY[i]//10000+1,StarCol[i]) pix(StarX[i]+1,StarY[i]//10000+1,StarCol[i]) end end end function PutSprite() -- Explosion for i=1,BakuMax do if (BakuFlag[i]>-1) and (BakuFlag[i]0 then tmpX=EnemyX[i]-EnemyScale[i]*8*(120-EnemyExpandTime)/120+1 tmpY=EnemyY[i]-EnemyScale[i]*8*(120-EnemyExpandTime)/120+1 tmpScale=EnemyScale[i]*(120-EnemyExpandTime)/120 SprEx(2+Counter%60//30*2,tmpX,tmpY,0,tmpScale,0,0,2,2) else tmpX=EnemyX[i]-EnemyScale[i]*8+1 tmpY=EnemyY[i]-EnemyScale[i]*8+1 tmpScale=EnemyScale[i] spr(2+Counter%60//30*2,tmpX,tmpY,0,tmpScale,0,0,2,2) end end end -- Item (Candy) for i=1,ItemMax do if ItemFlag[i]==1 then if ItemVY[i]>=0 then spr(78,ItemX[i]-7,ItemY[i]-7,0,1,0,0,2,2) else local scale=1+ItemVY[i]/4 SprEx(78,ItemX[i]-7*scale,ItemY[i]-7*scale,0,scale,0,0,2,2) end end end if ExHeartFlag>0 then spr(342+ExHeartColor,ExHeartX,ExHeartY-(30-ExHeartFlag/2),0,1,0,0,1,1) ExHeartFlag=ExHeartFlag-1 end -- MyChr if (GameoverFlag==0) and (Phase~=PHASE_GameOver) then local tmp=0 if MyFlashFlag==1 then tmp=4 elseif MyFlashFlag==2 then tmp=8 end spr(66+Counter%60//30*2+tmp,MyX-7,MyY-7,0,1,0,0,2,2) end -- EnemyTama for i=1,TamaMax do if TamaFlag[i]==1 then spr(38+TamaColor[i],TamaX[i]-3,TamaY[i]-3,0,1,0,0,1,1) end end if WaveDispTime>0 then font("JKLM "..string.format("%2d",Wave),52,64,0,8,8,true,1) WaveDispTime=WaveDispTime-1 end end function PutBG() -- Side wallPaper rect(160,0,80,136,3) -- Status font("ABCDE",168,10,0,8,8,true,1) font(string.format("%8d",Score),168,20,0,8,8,true,1) font("FGHI",168,34,0,8,8,true,1) if Life>0 then for i=1,Life do font("V",232-8*i,44,0,8,8,true,1) end end font("JKLM",168,60,0,8,8,true,1) font(string.format("%2d",Wave),168+8*6,60,0,8,8,true,1) font("NOPQ",168,78,0,8,8,true,1) font(string.format("%3d",WaveTimer//60),168+8*5,78,0,8,8,true,1) font("RSTU",168,96,0,8,8,true,1) font(string.format("%3d",GetItemCount),168+8*5,96,0,8,8,true,1) print(string.format("Next %3d",GetItemNorma),168+8*2,106,2,true) for i=1,Round+1 do font("X",240-8*i,128,0,8,8,true,1) end if WaveClearFlag>0 then if TimeBonus>0 then print(string.format("TIME BONUS %5d",TimeBonus),32,124,2,true) else print("TIME UP!",56,124,2,true) end end if Phase==PHASE_GameOver then print("GAME",70,60,2,true) print("OVER",70,68,2,true) print("Try Again!",50,96,15,true) else -- Osanpo Kei mascot draw local tmp=2 if OsanpoK_Dir<0 then tmp=8 elseif OsanpoK_Dir>0 then tmp=34 end spr(tmp+Counter%60//30*2,OsanpoK_X+162,116,0,1,0,0,2,2) end -- Debug info --[[ print("MyX "..MyX,160,128,15) ]] end