REM ********************************** REM * LOWRESNX COMUNITY GAME PROJECT * REM * STARTED ON 05.JUN. * REM * -_-_-_-_-_-_-_-_-_-_-_-_-_-_-_ * REM * CODE BY: * REM * DAN, SP4CEBAR, G9 * REM * * REM * MUSIC BY: * REM * NINTENDO,PORTED BY G-9 * REM * * REM * SOUND BY: * REM * SPACEB4R,G-9 * REM * * REM * SPRITES BY: * REM * DAN, SP4CEBAR * REM * * REM * LEVELS BY: * REM * LEVELS DAN, G-9 * REM * * REM ********************************** REM * SPRITE USAGE * REM REM PLEASE WRITE HERE THE OCCUPIED NUMBERS FOR SPRITES: REM 15-19 (WEARABLE ITEMS) REM 30 = MAIN CHAR REM 01 = SHIELDING SPRITE REM 31-41 - MONSTERSPRITES REM * PERSISTENT STORAGE PLAN: REM REM $E000 - 1 BYTE - CARTRIDGE WAS ALLREADY STARTED (IF, FOR SOME REASONS THE PERSISTENT STORAGE CAN'T BE USED, THE DEFAULT VALUES WOULD BE USED INSTEAD OF 0'OS) REM $E001 - 1 BYTE - MUSIC ON/OFF 1/0 REM $E002 - 1 BYTE - SOUND ON/OFF 1/0 REM $E003 - 1 BYTE - RESERVED (MAYBE STORE HIGHEST LEVEL HERE ?) REM $E004 - 4 BYTES - HI-SCORE GAMEPAD 1 FONT 192 REM SHIED 0/1, SHIELDTIMER=TIMER, SHIELDBLINK=0/1, SHIELDTT USED TO BYPASS THE TIMER ISSUE WHEN GAME IS PAUSED. GLOBAL MUS, SND, SHIELD, SHIELDTIMER, SHIELDBLINK, SHIELDTT GLOBAL ALTERNATE, ALTERNATE1, LEVELPAL, HISCORE, DIAMONDSINLEVEL, DIAMONDSPICKUP REM EXTRA STAGE: x,0 contains a number at which the extra stage will be triggered, x,1 0=not done, 1 done REM EXTRASTAGE(0,0) = NUMBER WHICH SHOULD BE CHECKED NEXT DIM GLOBAL EXTRASTAGE(6,2) IF PEEK($E000)=0 THEN MUS=1 SND=1 HISCORE=0 POKE $E000,1 ELSE MUS=PEEK($E001) SND=PEEK($E002) HISCORE=PEEKL($E004) END IF IF MUS=1 THEN MUSIC GLOBAL FIREBUTTON, PLAYTESTING, KEY MUSTXT$="OFFON " PAUSE OFF PLAYTESTING=0 DIM GLOBAL LVL(20,15,2) REM LVL(X,Y,INFO(CHAR,PAL,FLIPX AND FLIPY)) DIM GLOBAL ITEMS(3) REM ITEMS(ID)=ON/OFF (1 OR 0) ON MEANS THAT THE CHARACTER HAS EQUIPPED IT GLOBAL LASERMAX, LASERCOUNT, LASERACTIVE LASERACTIVE=0 LASERMAX=16 LASERCOUNT=0 DIM GLOBAL LASERS(LASERMAX,2) GAME_JUST_STARTED=-1 DIM GLOBAL TABLES(0,5,2) REM TABLES(TABLE NUMBER, TABLE ITEM, VARIABLES) REM TABLE 0: EQUIPPED ITEM OFFSET TABLE, EQUIPPED ITEM, X AND Y OFFSETS REM SET TABLE OFFSETS TABLES(0,0,0)=-1 TABLES(0,0,1)=2 TABLES(0,0,2)=1 TABLES(0,1,0)=4 TABLES(0,1,1)=-2 TABLES(0,1,2)=-4 TABLES(0,2,0)=-1 TABLES(0,2,1)=-1 TABLES(0,2,2)=1 TABLES(0,3,0)=-1 TABLES(0,3,1)=0 TABLES(0,3,2)=1 GLOBAL SCORE,JUMP,LIVES,LASER_REFRESH_TIME,ATTACK_TIME REM FRAMES TO REFRESH LASER STATE (THE LOWER THE HARDER THE GAME IS) LASER_REFRESH_TIME=48 REM MONSTER DEFINITION, 0 , 1=X, 2=Y, 3=TIMER, 4 = MOVING DIRECTION, 5=FLIPFLAG, 6=ANIM NUMBER, 7=FALLDOWN (0 NO, 1 YES), 8=SPEED, 9= SPRITE NUMBER, 10= TYP, 11=PALETTE, 12= ANIMCOUNTER, 13=ANIMTIMER DIM GLOBAL MONSTER(11,14) REM MONSTER(0,0) = MONSTERCOUNT REM KEYS DEFINITION, 0=GOT IT, 1=X, 2=Y DIM GLOBAL KEYS(5) REM EXTRA STAGE NPCS DEFINITION DIM GLOBAL NPCS(21,6) MAINMENU: SPRITE OFF 0 TO 63 CLS BG SOURCE ROM(4) FOR X=18 TO 0 STEP -1 BG COPY 0,0,20,16 TO X,X PAL 0 TEXT 0,15," " WAIT 05 WAIT VBL NEXT X MX=0 MY=0 SNDO=SND MUSO=MUS MP=0 REPEAT IF MX=0 THEN PAL 7 ELSE PAL 0 TEXT 0,14,"START GAME" IF MX=1 AND MY=0 THEN PAL 7 ELSE PAL 0 TEXT 0,15,"MUSIC "+MID$(MUSTXT$,(MUS*3)+1,3) IF MX=1 AND MY=1 THEN PAL 7 ELSE PAL 0 TEXT 11,15,"SOUND "+MID$(MUSTXT$,(SND*3)+1,3) IF UP(0) THEN MX=0 IF DOWN(0) THEN MX=1 IF MX=1 AND (LEFT TAP(0) OR RIGHT TAP(0)) THEN MY=(MY+1) MOD 2 IF BUTTON TAP(0) THEN IF MX=0 THEN MP=1 IF MX=1 THEN IF MY=0 THEN MUS=(MUS+1) MOD 2 IF MUS=1 THEN MUSIC IF MUS=0 THEN STOP END IF IF MY=1 THEN SND=(SND+1) MOD 2 END IF END IF WAIT VBL UNTIL MP=1 MP=PAUSE GOSUB SAVEOPTIONS RESET: REM RANGE CHECK X/Y RCX=0 RCY=0 LIVES=3 LEVEL=1 SCORE=0 IF LEVEL=1 THEN EXTRASTAGE(0,0)=1 RESTORE STAGEDATA For x=1 to 5 READ EXTRASTAGE(x,0) EXTRASTAGE(x,1)=0 NEXT X END IF STAGEDATA: DATA 6,41,26,31,40 REM 6,15,26,31,40 < Planed extra levels. DIED: REM PROGRAM JUMP VARIABLE (TO POSTPONE A GOTO TO AVOID A MEMORY LEAK) IF GAME_JUST_STARTED THEN GAME_JUST_STARTED=0 ELSE CALL SOUNDS(4) END IF REM PLAYER POSITION ACT_X=9 ACT_Y=0 REM PLAYERS SIZE ACT_SX=6.5 ACT_SY=6.5 REM PLAYER GRAVITY VALUES GRAVMAX=2 GRAVACC=0.1 REM SET LEVEL PALETTE LEVELPAL=0 MAINGAMEINIT: REM RESET COLORED KEYS FOR X=0 TO 4 KEYS(X)=0 NEXT X REM RESET LASER AND SHIELD LASERACTIVE=-1 SHIELD=0 SHIELDTIMER=TIMER SHIELDBLINK=0 SHIELDTT=0 REM SCORE/LEVEL DISPLAY SWITCH, ALTERNATE1=KEY ROTATION ALTERNATE=0 ALTERNATE1=0 REM ACTOR/PLAYER DELTA X/Y ACT_DX=0 ACT_DY=0 REM MORE OF ACTOR/PLAYER STUFF ACT_DIR=0 ACT_ANIM=0 ACT_TIMER=TIMER ACT_GRAV=0 ACT_DIR=0 ACT_FALL=0 ACT_JUMP=0 ACT_FLIP=0 ATTACK_TIME=0 REM JUMP IS USED TO SKIP TO DIFFERENT PARTS OF THE PROGRAM (IT HAS NOTHING TO DO WITH THE PLAYER JUMP) JUMP=0 REM COLLISION FLAG VARIABLE COL1=0 COL2=0 COL3=0 COL4=0 REM REMOVE EQUIPPED ITEMS FOR I=0 TO 3 ITEMS(I)=0 NEXT I SPRITE OFF 15 TO 19 LASERCOUNT=0 REM KEY RESET KEY=0 If LEVEL=EXTRASTAGE(EXTRASTAGE(0,0),0) THEN IF EXTRASTAGE(EXTRASTAGE(0,0),1)=0 THEN IF EXTRASTAGE(0,0)=1 Then Gosub Extrastage1 Else If EXTRASTAGE(0,0)=2 then Gosub Extrastage2 Else If EXTRASTAGE(0,0)=3 then Gosub Extrastage3 Else If EXTRASTAGE(0,0)=4 then Gosub Extrastage4 Else If EXTRASTAGE(0,0)=5 then Gosub Extrastage5 End IF End IF GOTO DIED END IF GOSUB GETLEVEL RANDOMIZE TIMER REM *************************** MAIN GAME LOOP MAINGAMELOOP: CALL UPDATE_ITEMS(ACT_X,ACT_Y,ACT_FLIP) GOSUB MONSTERMOVE GOSUB PLAYERMOVEMENT CALL UPDATE_LASERS(LASERCOUNT) IF PAUSE THEN GOSUB MENUPAUSE GOSUB INFOLINE REM DEBUGGING TEXT REM TEXT 0,0,STR$(MONSTER(0,0)) WAIT VBL GOTO MAINGAMELOOP REM ************************** PLAYERMOVEMENT: REM KD = JOYPAD RIGHT=1, LEFT=-1 REM KU = JOYPAD DOWN=1, UP=-1 KD=RIGHT(0)-LEFT(0) KU=DOWN(0)-UP(0) GOSUB ACTANIM Gosub GETPLAYERLEFTRIGHT REM COLLISION (LEFT/RIGHT SIDE) CHECKS CALL MAP(ACT_X+ACT_DX,ACT_Y+ACT_DY,COL1) CALL MAP(ACT_X+ACT_DX+ACT_SX,ACT_Y+ACT_DY,COL2) CALL MAP(ACT_X+ACT_DX,ACT_Y+ACT_DY+ACT_SY,COL3) CALL MAP(ACT_X+ACT_DX+ACT_SX,ACT_Y+ACT_DY+ACT_SY,COL4) IF COL1>0 OR COL2>0 OR COL3>0 OR COL4>0 THEN ACT_DX=0 IF JUMP=3 THEN JUMP=0 KEY=0 LEVEL=LEVEL+1 IF DIAMONDSINLEVEL=DIAMONDSPICKUP AND DIAMONDSINLEVEL>0 THEN ADD SCORE,(DIAMONDSPICKUP*10) GOTO MAINGAMEINIT END IF IF JUMP=2 THEN GOTO MAINMENU IF JUMP=1 THEN GOTO DIED REM GRAVITY+COLLISION CALL MAP(ACT_X+ACT_DX ,ACT_Y+ACT_DY+ACT_SY+1,COL1) CALL MAP(ACT_X+ACT_DX+ACT_SX,ACT_Y+ACT_DY+ACT_SY+1,COL2) IF COL1>0 OR COL2>0 THEN ACT_DY = 0 ELSE ACT_DY=ACT_DY+0.1 IF ACT_DY>2 THEN ACT_DY=2 END IF REM JUMPING + COLLISION REM G-9 ADDED JETPACK IF BUTTON(0,1) THEN IF ACT_DY=0 THEN ACT_DY=-2.3 ELSE IF ITEMS(3)=1 THEN REM FLY ACT_DY=-1.3 CALL SOUNDS(0) END IF END IF REM SWORD SWING IF FIREBUTTON THEN REM CHECK IF THE PLAYER IS WITHIN THE COORDINATES (FOR THE ARRAY CHECK) TMPX=(ACT_X+4+ACT_DX)/8 TMPY=(ACT_Y+ACT_DY)/8 TMPA=0 TMPB=0 TMPC=0 TMPD=0 REM ADD RANDOM GEM FOR DESTRUCTIBLE BLOCK! IF RND(3)=1 THEN IF RND(3)=2 THEN IF RND(5)=3 THEN REM HEART TILE TMPA=86 TMPB=1 ELSE REM PURPLE DIAMOND TMPA=88 TMPB=6 ADD DIAMONDSINLEVEL,1 END IF ELSE REM YELLOW DIAMOND TMPA=87 TMPB=3 ADD DIAMONDSINLEVEL,1 END IF END IF IF KU=-1 THEN REM JOY DOWN TMPC=1 ELSE IF KU=1 THEN REM JOY UP TMPC=-0.2 ELSE REM PLAYER FACING LEFT/RIGHT IF ACT_FLIP=1 THEN TMPD=1 ELSE TMPD=-1 END IF END IF IF (TMPX>0 AND TMPX<20) AND (TMPY>0 AND TMPY<15) THEN REM DESTRUCTIBLE BLOCK TMPE=CELL.C(TMPX-TMPD,TMPY+TMPC) IF TMPE=3 OR TMPE=4 OR TMPE=5 THEN LVL (TMPX-TMPD,TMPY+TMPC,0)=TMPA LVL (TMPX-TMPD,TMPY+TMPC,1)=TMPB LVL (TMPX-TMPD,TMPY+TMPC,2)=0 PAL TMPB CELL TMPX-TMPD,TMPY+TMPC,TMPA ADD SCORE,20 END IF REM DOOR ' IF CELL.C(TMPX-TMPD,TMPY+TMPC)=3 AND KEY=1 THEN ' ADD SCORE,100 ' LEVEL=LEVEL+1 ' GOTO MAINGAMEINIT ' END IF END IF END IF REM CEILING COLLISION CALL MAP(ACT_X+ACT_DX ,ACT_Y+ACT_DY+1,COL3) CALL MAP(ACT_X+ACT_DX+ACT_SX,ACT_Y+ACT_DY+1,COL4) IF ACT_DY<0 AND (COL3>0 OR COL4>0) THEN ACT_DY = 0 END IF ACT_X=ACT_X+ACT_DX ACT_Y=ACT_Y+ACT_DY REM LIMIT PLAYER TO THE SCREEN COORDINATES: IF ACT_Y>112 THEN LIVES=LIVES-1 GOTO DIED END IF IF ACT_Y<0 THEN ACT_Y=0 IF ACT_X<0 THEN ACT_X=0 IF ACT_X>152 THEN ACT_X=152 REM DRAW THE PLAYER CALL MAINSPRITE(ACT_X, ACT_Y, ACT_DIR, ACT_ANIM, ACT_FLIP) RETURN INFOLINE: IF (TIMER) MOD 200=195 THEN ALTERNATE=(ALTERNATE + 1) MOD 2 IF (TIMER) MOD 50=45 THEN ALTERNATE1=(ALTERNATE1 + 1) MOD 5 REM CLEAR INFO AREA (AT THE BOTTOM OF THE SCREEN) PAL 0 BG FILL 0,15 TO 19,15 CHAR 0 PAL 4 CELL 2,15,14 IF ALTERNATE=0 THEN REM SCORE DISPLAY CELL 0,15,12 CELL 1,15,13 PAL 5 TEXT 3,15,STR$(SCORE) PAL 4 ELSE CELL 0,15,28 CELL 1,15,29 TEXT 3,15,STR$(LEVEL) END IF IF ALTERNATE1=0 THEN PAL 0 ELSE IF ALTERNATE1=1 THEN PAL 2 ELSE IF ALTERNATE1=2 THEN PAL 4 ELSE IF ALTERNATE1=3 THEN PAL 5 ELSE IF ALTERNATE1=4 THEN PAL 6 END IF CELL 08,15,92 IF KEYS(ALTERNATE1)>0 THEN PAL 2 TMP=15 ELSE PAL 1 TMP=31 END IF CELL 09,15,TMP REM DISPLAY WEARABLE ITEMS PAL 1 IF ITEMS(0)=1 THEN CELL 10,15,80 IF ITEMS(1)=1 THEN CELL 11,15,81 IF ITEMS(2)=1 THEN CELL 12,15,82 IF ITEMS(3)=1 THEN CELL 13,15,83 REM DISPLAY THE KEY IF KEY=1 THEN PAL 3 CELL 14,15,89 END IF REM DISPLAY SHIELD IF SHIELD=1 THEN PAL 1 CELL 15,15,84 END IF REM DISPLAY LIVES PAL 1 CELL 16,15,86 PAL 4 CELL 17,15,14 TEXT 18,15,STR$(LIVES) PAL 0 RETURN GETLEVEL: REM LEGEND: REM #: CELL REM X: SPIKE REM >: LASER RIGHT REM <: LASER LEFT REM ^: LASER UP REM V: LASER DOWN REM S: SWORD REM D: SHIELD REM A: ARMOR REM J: JETPACK REM P: POWER-UP REM C: CHARACTER CLONER (WE COULD REMOVE THIS ONE) REM $: DIAMONDS REM @: PLAYER STARTING POSITION REM +: DESTRUCTIBLE TILE REM *: KEY REM %: DOOR REM !: HEART REM 0-4 COLORED DOORS, PAL 0,2,4,5,6 REM 5-9 COLORED KEYS, PAL 0,2,4,5,6 REM *********************** REM ** REM NOT YET IMPLEMENTED ITEMS - THESE ARE JUST IDEAS THEY DON'T ALL HAVE TO BE ADDED REM B: BUTTON REM F: MONSTER TYP 1 : GOING LEFT RIGHT, DOES NOT FALL OF THE EDGE REM G: MONSTER TYP 2 : FOLLOWS THE PLAYER, DOES NOT FALL OF THE EDGE REM H: MONSTER TYP 3 : FLYING LEFT/RIGHT, CHANGES THE DIRECTION AT THE WALLS REM I: MONSTER TYP 4 : FLYING UP/DOWN, CHANGES THE DIRECTION AT THE WALLS REM SIDENOTE: WE ARE RUNNING OUT OF THE LETTERS HERE REM RESET MONSTER COUNT FOR A=0 TO 10 MONSTER(A,0)=0 NEXT A SPRITE OFF 31 TO 41 A$="" DIAMONDSINLEVEL=0 DIAMONDSPICKUP=0 REM LEVEL RANGE CHECK, INCREASE THE SECOND IF WHEN MORE LEVELS ARE ADDED IF LEVEL<0 THEN LEVEL=1 IF LEVEL>40 THEN LEVEL=1 REM GHOSTBUSTERS QUOTE: "DO NOT CROSS THE LASER BEAMS!" IF LEVEL=1 THEN LEVELPAL=1 A$=A$+"#@ ###+++++########" A$=A$+"# $ $+ $ #" A$=A$+"#++++% ## # #" A$=A$+"# # # #" A$=A$+"# <# #" A$=A$+"#S ++ # ^ J#" A$=A$+"#++++++++++ +####" A$=A$+"#> ######V #" A$=A$+"+ $ # D#" A$=A$+"+### # +#+++## +#" A$=A$+"+P # #$# #" A$=A$+"+#### # ## $####" A$=A$+"#* # #+++ #" A$=A$+"#XXXXXXX## $$$+ #" A$=A$+"####################" ELSE IF LEVEL=2 THEN LEVELPAL=1 A$=A$+"# @ ++++++#++++++++#" A$=A$+"# ++++++++++++#" A$=A$+"###### +++#++++++++#" A$=A$+"#++++# +++#+++*++++#" A$=A$+"#+ +# +++#++++++++#" A$=A$+"#+ +# ++#++++++++#" A$=A$+"#+++++ +#+++++++!#" A$=A$+"# ++++ ##########" A$=A$+"#+ #++ #" A$=A$+"#+++ # ++++++++ +#" A$=A$+"#++++# + #" A$=A$+"#J+++# +## #+ ####" A$=A$+"###### ++# ###### #" A$=A$+"#$$$ ++# S%#" A$=A$+"####################" REM COPY AND PASTE THE LEVELMAP FROM THE LEVEL 1, PRESS INSERT KEY FOR EASY EDIT (AT LEAST ON WINDOWS, THE OVERWRITE MODE IS TURNED ON) REM RIP IPHONE USERS :3 ELSE IF LEVEL=3 THEN LEVELPAL=1 A$=A$+"#%@ ################" A$=A$+"# $ $ #!#" A$=A$+"##### ######* #$#" A$=A$+"#$$$# #P+ ## #+#" A$=A$+"## #+ ##> #" A$=A$+"#> # # ##" A$=A$+"###### # ##" A$=A$+"#A V # ########" A$=A$+"## # #" A$=A$+"#### ####### ##" A$=A$+"#$$$ # ## #" A$=A$+"##### # ## # #" A$=A$+"# ## V##### S#" A$=A$+"#J ^## X#" A$=A$+"####################" ELSE IF LEVEL=4 THEN LEVELPAL=1 A$=A$+"#### P#J ###########" A$=A$+"!++# #++# " A$=A$+"+++# +#++# ##### " A$=A$+"+++# #@ # $#$$$### " A$=A$+"++++ #+ # ##+++# " A$=A$+"####+ # # ##S## " A$=A$+"$++# # +#$ # # #+" A$=A$+"+++# # ## # #+" A$=A$+"+++# +#+ # ######$" A$=A$+"++++ # # + #" A$=A$+"#### # +# #" A$=A$+"$$$## # ######## #" A$=A$+"*$$$ " A$=A$+"XXXX #+ %" A$=A$+"####################" ELSE IF LEVEL=5 THEN LEVELPAL=1 A$=A$+" %" A$=A$+" ####" A$=A$+" $ $ $ $ # #+" A$=A$+" ############# #+" A$=A$+" *#+" A$=A$+"# ###+" A$=A$+"+# #+" A$=A$+"++# X X #+" A$=A$+"+++#####+++###### #+" A$=A$+" #+" A$=A$+" $ $ $#+" A$=A$+" ###############+" A$=A$+" #++++++++++++++#+" A$=A$+"@ #+++++++++++++++#+" A$=A$+"####################" ELSE IF LEVEL=6 THEN LEVELPAL=0 A$=A$+" " A$=A$+" " A$=A$+" $ " A$=A$+" $ " A$=A$+" $ " A$=A$+" " A$=A$+" " A$=A$+" $ " A$=A$+"* $ $ $ " A$=A$+" " A$=A$+"@ X $ X $ X %" A$=A$+"####################" A$=A$+"#+# ##+###### #+##" A$=A$+"### ######+## ####" A$=A$+"##+#################" ELSE IF LEVEL=7 THEN LEVELPAL=0 A$=A$+" " A$=A$+" " A$=A$+" $ $ " A$=A$+" $ " A$=A$+" " A$=A$+" $ " A$=A$+" $ " A$=A$+" " A$=A$+" %" A$=A$+" $" A$=A$+"@ *" A$=A$+"#### ^ ## ^ ## ^ ###" A$=A$+"++++++++++++++++++++" A$=A$+"++++++++++++++++++++" A$=A$+"####################" ELSE IF LEVEL=8 THEN LEVELPAL=0 A$=A$+" " A$=A$+" $ " A$=A$+" $ $ " A$=A$+" " A$=A$+" $ " A$=A$+" " A$=A$+" $ " A$=A$+" $" A$=A$+" $ $ $ !" A$=A$+"* %" A$=A$+"@ " A$=A$+"###X^X###X^X###X^X##" A$=A$+"######+ +###+ +#####" A$=A$+"###### ! ### ! #####" A$=A$+"####################" ELSE IF LEVEL=9 THEN LEVELPAL=0 A$=A$+"* @ " A$=A$+"# $ " A$=A$+" $ " A$=A$+" $ $ " A$=A$+" # " A$=A$+" $ " A$=A$+"$ " A$=A$+"# " A$=A$+" " A$=A$+" " A$=A$+"### #### #### @" A$=A$+" # ^ # # ^ # # %" A$=A$+" ##### ##### ####" A$=A$+"> " A$=A$+"####################" ELSE IF LEVEL=10 THEN LEVELPAL=0 A$=A$+"% $ $ " A$=A$+" " A$=A$+" # $ $ " A$=A$+" $ " A$=A$+" # " A$=A$+" # $ " A$=A$+" $ # # " A$=A$+" # # " A$=A$+" # " A$=A$+" " A$=A$+" @" A$=A$+"####*^$##X^X##X^X###" A$=A$+"++++++++++++++++++++" A$=A$+"++++++++++++++++++++" A$=A$+"####################" ELSE IF LEVEL=11 THEN LEVELPAL=5 A$=A$+" # " A$=A$+" # # # # " A$=A$+" # $X#X$*X#X$ X#@" A$=A$+" # ##############" A$=A$+"#####$ $" A$=A$+" #$ $" A$=A$+"########### ########" A$=A$+" $ $ $# " A$=A$+" ############ # " A$=A$+" # # " A$=A$+" #! " A$=A$+"$$$###### ######$$$$" A$=A$+"####++++# # #####" A$=A$+" #++++# # # " A$=A$+"#########%##########" ELSE IF LEVEL=12 THEN LEVELPAL=5 A$=A$+"!$$$$+ @ " A$=A$+"###### " A$=A$+"J $# " A$=A$+"9 $3 $$$$$$$ " A$=A$+"####### ########" A$=A$+"$$ # ## S" A$=A$+"8 2 # " A$=A$+"###### # " A$=A$+" ## ### " A$=A$+"7$$ 1 " A$=A$+"###### X X 5" A$=A$+" ## ########" A$=A$+" 0 # " A$=A$+"6 # 4 * %" A$=A$+"####################" ELSE IF LEVEL=13 THEN LEVELPAL=5 A$=A$+"!$$$$+ +$$$$$$$$#" A$=A$+"###### +$$$$$$$$#" A$=A$+"J $# ##$$$$$$$$#" A$=A$+"9 $0 #$$$$$*$$#" A$=A$+"####### ##########" A$=A$+"$$ # # S" A$=A$+"$ 0 # " A$=A$+"######## # " A$=A$+" # 2 " A$=A$+"$$$ 0 # 555 5" A$=A$+"###### ###4#######" A$=A$+" ## # #+ " A$=A$+" 0 # ++ " A$=A$+"$ #7 # +# %" A$=A$+"####################" ELSE IF LEVEL=14 THEN LEVELPAL=5 A$=A$+" " A$=A$+" ############## " A$=A$+" # $$$$$$$$$$!## " A$=A$+" <# ############ $" A$=A$+" # # #" A$=A$+" ############ # " A$=A$+" #> ## " A$=A$+" # # " A$=A$+" <# ########## #" A$=A$+" # <#$ " A$=A$+" # ## " A$=A$+" * ########## ## " A$=A$+" #> # #" A$=A$+" #$ @" A$=A$+" % #################" ELSE IF LEVEL=15 THEN LEVELPAL=5 A$=A$+"* @ " A$=A$+" " A$=A$+" $ $ " A$=A$+" " A$=A$+" $ " A$=A$+" " A$=A$+" J " A$=A$+" $ $ " A$=A$+" " A$=A$+" " A$=A$+" $ $ " A$=A$+" " A$=A$+" $ " A$=A$+" " A$=A$+"> %" ELSE IF LEVEL=16 THEN LEVELPAL=3 A$=A$+" V@V " A$=A$+" " A$=A$+" $ $ " A$=A$+"> X X <" A$=A$+" $ ! $ " A$=A$+" X <" A$=A$+"> X J " A$=A$+" $ $ " A$=A$+"> X X <" A$=A$+" " A$=A$+" $ $ " A$=A$+" " A$=A$+" # V # #$# " A$=A$+" #$$# $## #$# " A$=A$+" #$$$ $$# " A$=A$+" #$$$ *$$# # " A$=A$+" ########### " A$=A$+" #$# " A$=A$+"@ #$# %" A$=A$+"####################" ELSE IF LEVEL=22 THEN LEVELPAL=4 A$=A$+" " A$=A$+"S F * F F " A$=A$+"# # # # ! " A$=A$+" # " A$=A$+" " A$=A$+"$$$$ $$$$ " A$=A$+"#### #### #### " A$=A$+" " A$=A$+" # # " A$=A$+" " A$=A$+" @ " A$=A$+" ### " A$=A$+" " A$=A$+"$F$F$F$F$ F$F$F$ $F%" A$=A$+"####################" ELSE IF LEVEL=23 THEN LEVELPAL=4 A$=A$+" + $ H " A$=A$+"%+ H $ " A$=A$+"++ H $ $ " A$=A$+"S0 $ H # #$ " A$=A$+"###############H ## " A$=A$+" I " A$=A$+"I $ $$" A$=A$+"##+++#$$####### # " A$=A$+"!# ## #" A$=A$+"*+ I $ " A$=A$+"### #5 ##$ ### # " A$=A$+" ## ## " A$=A$+" #" A$=A$+"@ " A$=A$+"####################" ELSE IF LEVEL=24 THEN LEVELPAL=4 A$=A$+"@+ " A$=A$+" + " A$=A$+" + $$$ $$$ " A$=A$+" + ### * ### " A$=A$+" + G # G " A$=A$+" + ### # ### " A$=A$+" + # " A$=A$+" + ### " A$=A$+" +# # " A$=A$+" + # # " A$=A$+" + ############ " A$=A$+" +% +" A$=A$+" +++++++++++++++++ " A$=A$+" " A$=A$+"####################" ELSE IF LEVEL=25 THEN LEVELPAL=4 A$=A$+" $ $ $ I " A$=A$+"######## " A$=A$+" # " A$=A$+"* # %" A$=A$+" G G " A$=A$+" ##### ##### " A$=A$+"I " A$=A$+" " A$=A$+"####### ###### " A$=A$+"$ $" A$=A$+" G G " A$=A$+" ######## ####### " A$=A$+" " A$=A$+"$ @ $" A$=A$+"####################" ELSE IF LEVEL=26 THEN LEVELPAL=2 A$=A$+" @ I " A$=A$+" $ " A$=A$+" ##### " A$=A$+" #$$+ " A$=A$+" I #$$$+ H " A$=A$+" #*$$+ " A$=A$+" #$$51 # " A$=A$+" ##### " A$=A$+" +$$# " A$=A$+" +$$$# # " A$=A$+" H+$$%# " A$=A$+" 60$# # " A$=A$+" I ##### I " A$=A$+" $ " A$=A$+"####################" ELSE IF LEVEL=27 THEN LEVELPAL=2 A$=A$+" @2*2$$$1 6 $ " A$=A$+" ######## # # $" A$=A$+" #$$$71 #" A$=A$+" ####### $ " A$=A$+" #$$$$# # " A$=A$+" #6$$$1 $ " A$=A$+" ####### # " A$=A$+" #$$$$# $ " A$=A$+" #$$6$1 # " A$=A$+" ####### $ " A$=A$+" #$$$$# # #+++#" A$=A$+" #$$$61 $ 1$$$$$" A$=A$+" ####### # #$$$$$" A$=A$+" F#66$$%" A$=A$+"####################" ELSE IF LEVEL=28 THEN LEVELPAL=2 A$=A$+" $ # $ # $ #$$ # $ #" A$=A$+"@# # # #$#$# # # # #" A$=A$+"$# #$#$# # # # # > #" A$=A$+" #$> # # # > #$#$#$#" A$=A$+" #$# # #$# # # <$#$#" A$=A$+" > #$# # < #$# # # #" A$=A$+"$# # < # #$# #$# > #" A$=A$+" #$# # #$# # < # #$#" A$=A$+" # #$#$# # # #$#$#*#" A$=A$+"$#$> # # # #$# < # #" A$=A$+" #$# # # #$# # # # #" A$=A$+" > #$#$#$# > #$#$# #" A$=A$+" # # # # # #$# # # #" A$=A$+"J# $ # $ # # $ # %" A$=A$+"####################" ELSE IF LEVEL=29 THEN LEVELPAL=2 A$=A$+" @5 " A$=A$+" ######## " A$=A$+" #0#### ####0# " A$=A$+" #87761 167S8# " A$=A$+" ########2######### " A$=A$+" #$$$# #$$# #$$!# " A$=A$+" #$$$# #8$# #$$$# " A$=A$+" #$$$# ##3# #$$$# " A$=A$+" #79$2 +$$8# " A$=A$+" #####4######3##### " A$=A$+" #!$$2 3$$$# " A$=A$+" #9$$####3#####!$8# " A$=A$+" ###4# ##### " A$=A$+"* %" A$=A$+"####################" ELSE IF LEVEL=30 THEN LEVELPAL=2 A$=A$+"@ #* " A$=A$+"## ## $ # " A$=A$+"% # # ##H# #" A$=A$+" # " A$=A$+" # # " A$=A$+" F$ # I # " A$=A$+" # # " A$=A$+"# # H # " A$=A$+" # # " A$=A$+" $#$ # # " A$=A$+" #### #$$# " A$=A$+" $#$ $##$ " A$=A$+"# " A$=A$+" $$ " A$=A$+"####################" ELSE IF LEVEL=31 THEN LEVELPAL=6 A$=A$+" #+++++S@+++++++++# " A$=A$+" #++++++++++++++++# " A$=A$+" ##H +++++++++++++# " A$=A$+" #+++++++++++++++## " A$=A$+" # ++++++++++++++# " A$=A$+" # # " A$=A$+" ##++++++ F # " A$=A$+" #++++++++++++++### " A$=A$+" # F # " A$=A$+" ####+++++++ F # " A$=A$+" #++++++++++++##### " A$=A$+"*#++++++++++++++++# " A$=A$+" ################+# " A$=A$+" %" A$=A$+"####################" ELSE IF LEVEL=32 THEN LEVELPAL=6 A$=A$+" +++ S+++" A$=A$+" +$+ +++ #+$+" A$=A$+" +++ #+$+# +++" A$=A$+" +++ " A$=A$+" H F +++ " A$=A$+"+++ #+++ +$+ " A$=A$+"+$+# +$+ +++ " A$=A$+"+++ +++ " A$=A$+" F I " A$=A$+" +++# +++ " A$=A$+" +$+ +$+ " A$=A$+" +++ +++ +++ +++ " A$=A$+" +$+ +*+ " A$=A$+"% +++# +++@" A$=A$+"####################" ELSE IF LEVEL=33 THEN LEVELPAL=6 A$=A$+"#P 5#S " A$=A$+"# #!# " A$=A$+"## #! !# " A$=A$+"# # # " A$=A$+"# # * # XX" A$=A$+"## #+++++++++# ####" A$=A$+"# # 9 4 # #" A$=A$+"# # +++ ++###+ #" A$=A$+"## # +8+ 2 6#" A$=A$+"# # +++ ++ ######" A$=A$+"# # # $$$#" A$=A$+"# ## ####### #HI #" A$=A$+"# @# 3$$$$$# # #" A$=A$+"# 0 #$$$$7# 1 %" A$=A$+"####################" ELSE IF LEVEL=34 THEN LEVELPAL=6 A$=A$+"@ H##########215 " A$=A$+" $ # ! ## " A$=A$+" # $#> " A$=A$+" # $*$ ### #" A$=A$+" # <###> ## " A$=A$+" $# <# #> #> " A$=A$+" # <###> # #" A$=A$+" # VVV ## " A$=A$+" $ # #> " A$=A$+" # # #" A$=A$+"$ #7 ## " A$=A$+" #6 #> " A$=A$+" ##########0# " A$=A$+"% $ # " A$=A$+"####################" ELSE IF LEVEL=35 THEN LEVELPAL=6 A$=A$+" @ " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+"* $ %" A$=A$+"####################" ELSE IF LEVEL=36 THEN LEVELPAL=7 A$=A$+" @ " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+"* %" A$=A$+"####################" ELSE IF LEVEL=37 THEN LEVELPAL=7 A$=A$+" @ " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+"* %" A$=A$+"####################" ELSE IF LEVEL=38 THEN LEVELPAL=7 A$=A$+" @ " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+"* %" A$=A$+"####################" ELSE IF LEVEL=39 THEN LEVELPAL=7 A$=A$+" @ " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+" " A$=A$+"* %" A$=A$+"####################" ELSE IF LEVEL=40 THEN LEVELPAL=7 A$=A$+" $ $ J@ $ $ " A$=A$+" #$$$# ## #$ #$ " A$=A$+" #$$$# #$ #$ #$ " A$=A$+" #$$$# ## #$ #$ $$ " A$=A$+" #$#$# #$ #$ #$ ## " A$=A$+" $#$#$ ## ## ## ## " A$=A$+"$$ $$$$$$$$ $$ ## " A$=A$+"##$ $#$ #$$# ## ## " A$=A$+"# # # # #$$# #$ ## " A$=A$+"# # # # ##$# ## $$ " A$=A$+"# # # # #$## #$ ## " A$=A$+"##$ $#$ #$$# ## ## " A$=A$+" " A$=A$+"*! ! ! %" A$=A$+"####################" END IF CLS ACT_X=-1 ACT_Y=-1 ACT_TMPX=-1 FOR Y=0 TO 14 FOR X=0 TO 19 LVL (X,Y,0)=0 LVL (X,Y,1)=0 LVL (X,Y,2)=0 CELL X,Y,0 NEXT X NEXT Y FOR Y=0 TO 14 FOR X=0 TO 19 TMP$=MID$(A$,X+1+(Y*20),1) IF TMP$="#" THEN 'CELL LVL (X,Y,0)=1 LVL (X,Y,1)=LEVELPAL LVL (X,Y,2)=0 ELSE IF TMP$="X" THEN 'SPIKES LVL (X,Y,0)=2 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$=">" THEN 'LASER RIGHT TMPL=48 TMPF=0 GOSUB ADDLASER ELSE IF TMP$="<" THEN 'LASER LEFT TMPL=48 TMPF=1 GOSUB ADDLASER ELSE IF TMP$="^" THEN 'LASER UP TMPL=52 TMPF=0 GOSUB ADDLASER ELSE IF TMP$="V" THEN 'LASER DOWN TMPL=52 TMPF=2 GOSUB ADDLASER ELSE IF TMP$="S" THEN 'SWORD LVL (X,Y,0)=81 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="D" THEN 'SHIELD LVL (X,Y,0)=80 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="A" THEN 'ARMOR LVL (X,Y,0)=82 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="J" THEN 'JETPACK LVL (X,Y,0)=83 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="P" THEN 'POWER-UP LVL (X,Y,0)=84 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="C" THEN 'CHARACTER CLONER LVL (X,Y,0)=85 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="$" THEN 'VALUABLE ITEM (INCREASES SCORE) LVL (X,Y,0)=87 LVL (X,Y,1)=3 LVL (X,Y,2)=0 ADD DIAMONDSINLEVEL,1 ELSE IF TMP$="*" THEN 'KEY LVL (X,Y,0)=89 LVL (X,Y,1)=3 LVL (X,Y,2)=0 ELSE IF TMP$="%" THEN 'DOOR LVL (X,Y,0)=90 LVL (X,Y,1)=4 LVL (X,Y,2)=0 ELSE IF TMP$="!" THEN 'HEART LVL (X,Y,0)=86 LVL (X,Y,1)=1 LVL (X,Y,2)=0 ELSE IF TMP$="0" THEN 'GRAY DOOR LVL (X,Y,0)=91 LVL (X,Y,1)=0 LVL (X,Y,2)=0 ELSE IF TMP$="1" THEN 'GREEN DOOR LVL (X,Y,0)=91 LVL (X,Y,1)=2 LVL (X,Y,2)=0 ELSE IF TMP$="2" THEN 'DARK BLUE DOOR LVL (X,Y,0)=91 LVL (X,Y,1)=4 LVL (X,Y,2)=0 ELSE IF TMP$="3" THEN 'RED DOOR LVL (X,Y,0)=91 LVL (X,Y,1)=5 LVL (X,Y,2)=0 ELSE IF TMP$="4" THEN 'PURPLE DOOR LVL (X,Y,0)=91 LVL (X,Y,1)=6 LVL (X,Y,2)=0 ELSE IF TMP$="5" THEN 'GRAY KEY LVL (X,Y,0)=92 LVL (X,Y,1)=0 LVL (X,Y,2)=0 ELSE IF TMP$="6" THEN 'GREEN KEY LVL (X,Y,0)=92 LVL (X,Y,1)=2 LVL (X,Y,2)=0 ELSE IF TMP$="7" THEN 'DARK BLUE KEY LVL (X,Y,0)=92 LVL (X,Y,1)=4 LVL (X,Y,2)=0 ELSE IF TMP$="8" THEN 'RED KEY LVL (X,Y,0)=92 LVL (X,Y,1)=5 LVL (X,Y,2)=0 ELSE IF TMP$="9" THEN 'PURPLE KEY LVL (X,Y,0)=92 LVL (X,Y,1)=6 LVL (X,Y,2)=0 ELSE IF TMP$="B" THEN 'BUTTON 'LVL (X,Y,0)=2 'LVL (X,Y,1)=1 'LVL (X,Y,2)=0 ELSE IF TMP$="F" THEN 'MONSTER TYP 1 CALL ADDMONSTER(1,X,Y) ELSE IF TMP$="G" THEN 'MONSTER TYP 2 CALL ADDMONSTER(2,X,Y) ELSE IF TMP$="H" THEN 'MONSTER TYP 3 CALL ADDMONSTER(3,X,Y) ELSE IF TMP$="I" THEN 'MONSTER TYP 4 CALL ADDMONSTER(4,X,Y) ELSE IF TMP$="@" THEN ACT_X=X*8 ACT_Y=Y*8 ACT_TMPX=X*8 ELSE IF TMP$="+" THEN 'DESTRUCTIBLE TILE LVL (X,Y,0)=3+RND(2) LVL (X,Y,1)=LEVELPAL LVL (X,Y,2)=0 ELSE REM REMEMBER THE FIRST EMPTY SPOT IN THE LEVEL MAP IF ACT_TMPX=-1 THEN ACT_TMPX=X*8 ACT_TMPY=Y*8 END IF LVL (X,Y,0)=0 LVL (X,Y,1)=0 LVL (X,Y,2)=0 END IF CELL X,Y,LVL(X,Y,0) TINT X,Y PAL LVL(X,Y,1) FLIP LVL(X,Y,2) MOD 2,LVL(X,Y,2)\2 'IF TMP$="X" THEN TINT X,Y PAL 1 NEXT X NEXT Y DEC LASERCOUNT REM FALLBACK STRATEGY - PLAYER WAS NOT DEFINED IN THE MAP, SET HIM TO THE FIRST EMPTY SPOT IN THE LEVEL MAP IF ACT_X=-1 THEN ACT_X=ACT_TMPX ACT_Y=ACT_TMPY END IF RETURN SUB ADDMONSTER(TYP,X,Y) REM MONSTER DEFINITION, 0 (0=OFF, >0= MONSTER TYP) , 1=X, 2=Y, REM 3=TIMER, 4 = MOVING DIRECTION , 5=FLIPFLAG, 6=ANIM NUMBER, 7=FALLDOWN REM 8=PROCESSING SPEED, 9=SPRITE NUMBER (31-41),10= MOVEMENT SPEED, 11=PALETTE, 12= ANIMCOUNTER, 13=ANIMTIMER REM MOVING DIRECTION NUMBERS: REM (1=U; 2=D; 3=L; 4=R, 5=FOLLOW, 6=FLYING LEFT, 7=FLYING RIGHT ) REM SPRITE IMAGE DEFINITION REM TMPA=IMAGE NUMBER, TMPB=MOVING DIR, TMPC=DESTRUCTIBLE, TMPD=PALETTE TMPC=0 IF TYP=1 THEN REM F TMPA=112 TMPB=3 TMPC=1 TMPD=4 TMPE=0.8 END IF IF TYP=2 THEN REM G TMPA=112 TMPB=5 TMPC=1 TMPD=6 TMPE=0.9 END IF IF TYP=3 THEN REM H TMPA=114 TMPB=2 TMPD=3 TMPE=1.2 END IF IF TYP=4 THEN REM I TMPA=114 TMPB=6 TMPD=5 TMPE=1.4 END IF REM CHECK IF MONSTER-SLOT IS AVAILABLE. IF MONSTER(0,0)<10 THEN FOR A=1 TO 10 REM FIND THE FREE SLOT: IF MONSTER(A,0)=0 THEN MONSTER(A,0)=TYP MONSTER(A,1)=X*8 MONSTER(A,2)=Y*8 MONSTER(A,3)=TIMER MONSTER(A,4)=TMPB MONSTER(A,5)=0 MONSTER(A,6)=TMPA MONSTER(A,7)=TMPC MONSTER(A,8)=4 MONSTER(A,9)=30+A MONSTER(A,10)=TMPE MONSTER(A,11)=TMPD MONSTER(A,12)=0 MONSTER(A,13)=TIMER ADD MONSTER(0,0),1 SPRITE MONSTER(A,9) PAL MONSTER(A,11) SPRITE MONSTER(A,9),MONSTER(A,1),MONSTER(A,2),MONSTER(A,6) EXIT END IF NEXT A END IF END SUB MONSTERMOVE: FOR X=1 TO 10 IF MONSTER(X,0)>0 THEN IF TIMER-MONSTER(X,3)>MONSTER(X,8) THEN MONSTER(X,3)=TIMER IF TIMER-MONSTER(X,13)>16 THEN MONSTER(X,12)=(MONSTER(X,12)+1) MOD 2 MONSTER(X,13)=TIMER END IF TX=MONSTER(X,1)/8 TY=MONSTER(X,2)/8 TX1=(MONSTER(X,1)+7)/8 TY1=(MONSTER(X,2)+7)/8 REM CHECK THE TILE UNDER THE MONSTER: TMPC=CELL.C (TX,TY+1) IF (TMPC=0 OR (TMPC>=48 AND TMPC<=58) OR (TMPC>=80 AND TMPC<=89)) AND ((MONSTER(X,0)>0 AND MONSTER(X,0)<3) OR MONSTER(X,0)=5) THEN MONSTER(X,2)=MONSTER(X,2)+2 IF MONSTER(X,2)/8>14 THEN MONSTER(X,0)=0 ELSE GOSUB MONSTERWALK IF MONSTER(X,4)=1 THEN 'MOVING UP IF COL3=0 AND TY>0 THEN MONSTER(X,2)=MONSTER(X,2)-MONSTER(X,10) ELSE MONSTER(X,4)=2 END IF ELSE IF MONSTER(X,4)=2 THEN 'MOVING DOWN IF COL4=0 AND TY<14 THEN MONSTER(X,2)=MONSTER(X,2)+MONSTER(X,10) ELSE MONSTER(X,4)=1 END IF ELSE IF MONSTER(X,4)=3 THEN 'MOVING LEFT IF COL1=0 AND TX>0 THEN IF COL5=1 THEN MONSTER(X,1)=MONSTER(X,1)-MONSTER(X,10) ELSE MONSTER(X,4)=4 MONSTER(X,5)=1 END IF ELSE MONSTER(X,4)=4 MONSTER(X,5)=1 END IF ELSE IF MONSTER(X,4)=4 THEN 'MOVING RIGHT IF COL2=0 AND TX<19 THEN IF COL6=1 THEN MONSTER(X,1)=MONSTER(X,1)+MONSTER(X,10) ELSE MONSTER(X,4)=3 MONSTER(X,5)=0 END IF ELSE MONSTER(X,4)=3 MONSTER(X,5)=0 END IF ELSE IF MONSTER(X,4)=5 THEN 'FOLLOWING THE PLAYER TMP=(ACT_X>MONSTER(X,1)) IF TMP=0 THEN REM FOLLOW LEFT MONSTER(X,5)=0 IF COL1=0 AND TX>0 THEN IF COL5=1 THEN MONSTER(X,1)=MONSTER(X,1)-MONSTER(X,10) END IF ELSE REM FOLLOW RIGHT MONSTER(X,5)=1 IF COL2=0 AND TX<19 THEN IF COL6=1 THEN MONSTER(X,1)=MONSTER(X,1)+MONSTER(X,10) END IF END IF ELSE IF MONSTER(X,4)=6 THEN 'FLYING LEFT IF COL1=0 AND TX>0 THEN MONSTER(X,1)=MONSTER(X,1)-MONSTER(X,10) ELSE MONSTER(X,4)=7 MONSTER(X,5)=0 END IF ELSE IF MONSTER(X,4)=7 THEN 'FLYING RIGHT IF COL2=0 AND TX<19 THEN MONSTER(X,1)=MONSTER(X,1)+MONSTER(X,10) ELSE MONSTER(X,4)=6 MONSTER(X,5)=1 END IF END IF END IF SPRITE MONSTER(X,9) PAL MONSTER(X,11) FLIP MONSTER(X,5),0 SPRITE MONSTER(X,9),MONSTER(X,1),MONSTER(X,2),MONSTER(X,6)+MONSTER(X,12) IF FIREBUTTON=1 AND SPRITE HIT (MONSTER(X,9),15 TO 17) THEN IF MONSTER(X,7)=1 THEN MONSTER(X,0)=0 SPRITE OFF MONSTER(X,9) SCORE=SCORE+15 END IF END IF END IF ELSE SPRITE OFF MONSTER(X,9) END IF NEXT X RETURN MONSTERWALK: COL1=0 COL2=0 COL3=0 COL4=0 COL5=0 COL6=0 REM CHECK WALKABLE MONSTER TILES REM COL1 = LEFT SIDE TMPC=CELL.C(TX-0.2,TY) IF (TMPC>0 AND TMPC<6) OR TMPC=90 OR TMPC=91 THEN COL1=1 REM COL2 = RIGHT SIDE TMPC=CELL.C (TX1+0.2,TY) IF (TMPC>0 AND TMPC<6) OR TMPC=90 OR TMPC=91 THEN COL2=1 REM COL3 = TOP SIDE TMPC=CELL.C (TX,TY-0.2) IF (TMPC>0 AND TMPC<6) OR TMPC=90 OR TMPC=91 THEN COL3=1 REM COL4 = BOTTOM SIDE TMPC=CELL.C (TX,TY1+0.2) IF (TMPC>0 AND TMPC<6) OR TMPC=90 OR TMPC=91 THEN COL4=1 REM COL5=LEFT+DOWN TMPC=CELL.C (TX-0.2,TY+1) IF (TMPC>0 AND TMPC<6) OR TMPC=90 OR TMPC=91 THEN COL5=1 REM COL6=RIGHT+DOWN TMPC=CELL.C(TX1+0.2,TY+1) IF (TMPC>0 AND TMPC<6) OR TMPC=90 OR TMPC=91 THEN COL6=1 RETURN ADDLASER: REM TOKENSAVING SUBPROGRAM IF LASERCOUNT=2 THEN MP=2 WAIT 8 END IF IF PAUSE THEN QUITRESET=1 IF BUTTON (0,0) THEN WAIT 8 IF MP=0 THEN PLAYTESTING=(PLAYTESTING+1) MOD 2 END IF IF MP=1 THEN MUS=(MUS+1) MOD 2 IF MUS=1 THEN MUSIC IF MUS=0 THEN STOP END IF IF MP=2 THEN SND=(SND+1) MOD 2 END IF END IF VOLUME 0,5, WAIT VBL UNTIL QUITRESET=1 GOSUB SAVEOPTIONS FOR Y=0 TO 14 FOR X=0 TO 19 CELL X,Y,LVL(X,Y,0) TINT X,Y PAL LVL(X,Y,1) FLIP LVL(X,Y,2) MOD 2,LVL(X,Y,2)\2 NEXT X NEXT Y VOLUME 0,15, FOR I=60 TO 63 SPRITE I,0,0,16 NEXT I RETURN SAVEOPTIONS: IF MUSO<>MUS THEN POKE $E001,MUS IF SNDO<>SND THEN POKE $E002,SND WAIT 2 RETURN REM DEFINE SOUNDS IN HERE, USE NUMBERS TO PLAY, IF THE SND VARIABLE IS SET TO 0 THEN NO SOUND WILL PLAY SUB SOUNDS(NR) SOUND SOURCE ROM(14) REM VOICE 0 IS USED FOR MUSIC REM VOICE 1 IS USED FOR SOUND EFFECTS REM VOICE 2 IS USED FOR TRACK-BASED SOUND EFFECTS (BECAUSE TRACKS DON'T STOP THEMSELVES (AND ALLOW "PLAY" COMMANDS TO WORK ON THAT VOICE)) REM DEFAULT SETTINGS, IDK WHAT THEY SHOULD BE SOUND 1,0,8,10 ENVELOPE 1,0,10,5,5 LFO WAVE 1,0,0,0,0 LFO 1,0,0,0,0 IF SND=1 THEN IF NR=0 THEN REM JETPACK SOUND 1,3,,10 PLAY 1,25,1 ELSE IF NR=1 THEN REM SWORD ENVELOPE 1,1,10,5,5 SOUND 1,3,,10 PLAY 1,40,1 ELSE IF NR=2 THEN REM MONEY PICKUP TRACK 0,2 ELSE IF NR=3 THEN REM ITEM PICKUP SOUND 1,1,,10 ENVELOPE 1,0,10,5,5 LFO WAVE 1,1,1,1,1 LFO 1,15,10,, PLAY 1,66,9 ELSE IF NR=4 THEN REM RESTART ENVELOPE 1,0,10,5,5 SOUND 1,3,,10 PLAY 1,40,1 ELSE IF NR=5 THEN TRACK 1,2 ELSE IF NR=6 THEN REM EXTRA STAGE LASER Sound 2,2,8, Envelope 2,0,3,0,3 LFO 2,$e,$f,, PLAY 1,70,1 END IF REM POSSIBLE SOUNDS: SWORD DESTROY BLOCK, SHIELD BLOCK, ARMOR BREAK, LEVEL COMPLETE, GAME OVER, ENEMY SOUNDS, MAYBE LASER SOUNDS END IF SOUND SOURCE ROM(15) END SUB SUB MAP(X,Y,COL1) IF INT(X/8)>=0 AND INT(X/8)<=20 AND INT(Y/8)>=0 AND INT(Y/8)<=15 THEN COL1=LVL(INT(X/8),INT(Y/8),0) PAL1=LVL(INT(X/8),INT(Y/8),1) COL2=CELL.C(INT(X/8),INT(Y/8)) FATAL=0 REM LETHAL COLLISION CHECK IF JUMP=0 THEN REM I BETTER NOT JUMP OUTSIDE A SUB AND CAUSE A MEMORY LEAK REM CHECK IF THE SHIELD IS EQUIPED AND COLLISION WITH THE LASERS HAS OCCURED IF (COL2>=49 AND COL2<=51) OR (COL2>=53 AND COL2<=55) THEN IF ITEMS(0)=0 THEN FATAL=1 ELSE FATAL=0 END IF END IF REM CHECK IF THE ARMOR IS EQUIPED AND COLLISION WITH THE SPIKES HAS OCCURED IF COL2=2 AND FATAL=0 THEN IF ITEMS(2)=0 THEN FATAL=1 ELSE FATAL=0 END IF END IF IF FATAL=0 AND SPRITE HIT(30,31 TO 41) THEN FATAL=1 IF PLAYTESTING=0 AND FATAL=1 AND SHIELD=0 THEN JUMP=1 DEC LIVES IF LIVES=-1 THEN JUMP=2 SPRITE OFF 30 END IF END IF REM CHECK IF PLAYER COLLIDED WITH A COLORED DOOR IF COL1=91 THEN TMP=0 IF PAL1=0 AND KEYS(0)>0 THEN TMP=1 ADD KEYS(0),-1 ELSE IF PAL1=2 AND KEYS(1)>0 THEN TMP=1 ADD KEYS(1),-1 ELSE IF PAL1=4 AND KEYS(2)>0 THEN TMP=1 ADD KEYS(2),-1 ELSE IF PAL1=5 AND KEYS(3)>0 THEN TMP=1 ADD KEYS(3),-1 ELSE IF PAL1=6 AND KEYS(4)>0 THEN TMP=1 ADD KEYS(4),-1 END IF IF TMP=1 THEN LVL(INT(X/8),INT(Y/8),0)=0 LVL(INT(X/8),INT(Y/8),1)=0 LVL(INT(X/8),INT(Y/8),2)=0 PAL 0 CELL X/8,Y/8,0 END IF END IF REM DISABLE COLLISION FOR ITEMS AND LASERS IF (COL1>47 AND COL1<57) OR (COL1>79 AND COL1<91) OR COL1>91 THEN COL1=0 ELSE COL1=0 END IF END SUB SUB MAINSPRITE(X,Y,SET, AN, FL) REM SET = DEFINE SPRITE ANIMATION NUMBERS REM AN = ANIMATION FRAME IN THE SET (IF ANY) REM FL = DOES THE SPRITE NEED TO BE FLIPPED ? 'USING SPRITES 1,2,3,4 'SET DEFAULT PICTURE FRAMES SP3=0 SP4=0 REM: STANDING, 1 FRAME - UP/DOWN IF SET=0 THEN SP1=64 REM RUNNING 2 FRAME IF SET=1 THEN IF AN=0 THEN SP1=65 ELSE SP1=66 END IF END IF REM - FALLING DOWN IF SET=2 THEN SP1=67 REM SPRITE IS COMPOSED BY UP+DOWN IMAGES IF FL=0 THEN SPRITE 30 FLIP 0,0 SPRITE 30,X,Y,SP1 ELSE SPRITE 30 FLIP 1,0 SPRITE 30,X,Y,SP1 END IF IF SHIELD=1 THEN SPRITE 1 PAL 2 SPRITE 1,X,Y,68+SHIELDBLINK ELSE SPRITE 1,-8,-8,68 END IF END SUB SUB UPDATE_ITEMS(ACT_X,ACT_Y,ACT_FLIP) REM PICK UP ITEMS REM THESE ARE THE ITEM-PICKUP HITBOXES: (WE COULD CHANGE THIS TO USE THE COL1-COL4 VARS) X=(ACT_X+4)/8 Y=(ACT_Y+4)/8 C=CELL.C(X,Y) P=CELL.A(X,Y) P1=0 P2=0 P3=0 CALL BITREAD(P,1,P1) CALL BITREAD(P,2,P2) CALL BITREAD(P,3,P3) P=(P3*4)+(P2*2)+P1 REMOVETILE=0 IF C\16=5 THEN IF C<84 THEN REM EQUIP ITEM ITEMS(C-80)=1 SPRITE C-64,,,C SPRITE C-64 PAL 1 CALL SOUNDS(3) ADD SCORE,10 ELSE IF C=84 THEN REM POWER UP SHIELD=1 SHIELDTIMER=TIMER SHIELDTT=0 ELSE IF C=86 THEN REM HEART LIVES=LIVES+1 ADD SCORE,10 ELSE IF C=87 THEN REM YELLOW DIAMOND CALL SOUNDS(2) ADD SCORE, 10 ADD DIAMONDSPICKUP,1 ELSE IF C=88 THEN REM PURPLE DIAMOND ADD SCORE,50 CALL SOUNDS(2) ADD DIAMONDSPICKUP,1 ELSE IF C=89 THEN REM KEY PICKED UP KEY=1 CALL SOUNDS(2) ADD SCORE,5 ELSE IF C=92 THEN REM COLORED KEYS CODE IF P=0 THEN ADD KEYS(0),1 ELSE IF P=2 THEN ADD KEYS(1),1 ELSE IF P=4 THEN ADD KEYS(2),1 ELSE IF P=5 THEN ADD KEYS(3),1 ELSE IF P=6 THEN ADD KEYS(4),1 END IF END IF IF C<>90 THEN REM DO NOT REMOVE THE DOOR TILE (90) FROM THE MAP PAL 0 CELL X,Y,0 FOR J=0 TO 2 LVL(X,Y,J)=0 NEXT J END IF END IF IF C=90 AND KEY=1 THEN REM DOOR STOP CALL SOUNDS(5) WAIT 100 IF MUS=1 THEN MUSIC JUMP=3 ADD SCORE,100 END IF FIREBUTTON=0 REM UPDATE EQUIPPED ITEMS F=SGN(ACT_FLIP) FOR I=0 TO 3 IF ITEMS(I)=1 THEN SPRITE 16+I,ACT_X+TABLES(0,I,F*2),ACT_Y+TABLES(0,I,1), IF (BUTTON TAP(0,0) OR TIMER-ATTACK_TIME<4) AND I=1 THEN SPRITE 17 FLIP F-1,1 SPRITE 15,ACT_X+TABLES(0,I,F*2),ACT_Y+TABLES(0,I,1),96 CALL SOUNDS(1) SPRITE 15 FLIP F-1,0 FIREBUTTON=1 IF BUTTON TAP(0,0) THEN ATTACK_TIME=TIMER ELSE SPRITE 16+I FLIP F-1,0 IF I=1 THEN SPRITE OFF 15 END IF END IF NEXT I REM SHIELDING CODE SHIELDMODULUS=10 IF SHIELD=1 THEN IF TIMER-SHIELDTIMER>10 THEN ADD SHIELDTT,1 SHIELDTIMER=TIMER END IF IF SHIELDTT>25 THEN SHIELDMODULUS=5 IF SHIELDTT>40 THEN SHIELD=0 SHIELDTT=0 END IF IF (TIMER MOD SHIELDMODULUS) = 0 THEN SHIELDBLINK=(SHIELDBLINK + 1) MOD 2 END IF END SUB SUB UPDATE_LASERS(LASERCOUNT) REM SWITCH LASERS ON AND OFF IF TIMER MOD LASER_REFRESH_TIME = 0 THEN LASERACTIVE=LASERACTIVE+1 IF LASERACTIVE>LASERCOUNT THEN LASERACTIVE=0 IF LASERACTIVE>LASERMAX THEN LASERACTIVE=0 FOR I=0 TO LASERCOUNT LASERON=0 IF I=LASERACTIVE THEN LASERON=1 LASERS(I,2)=LASERON NEXT I END IF IF TIMER MOD 8=0 THEN FOR I=0 TO LASERCOUNT X=LASERS(I,0) Y=LASERS(I,1) S=LASERS(I,2) X1=X Y1=Y C=LVL(X,Y,0) F=LVL(X,Y,2) IF C/4=12 THEN REM HORIZONTAL LASER DX=1-SGN(F)*2 DY=0 FLIP F MOD 2,(TIMER\8)MOD 2 ELSE REM VERTICAL LASER DX=0 DY=SGN(F)*2-1 FLIP (TIMER\8)MOD 2,F\2 END IF REM RAYCAST LASER ADD X,DX ADD Y,DY REPEAT ADD X,DX ADD Y,DY CH=CELL.C(X,Y) UNTIL CH<>0 AND CH<>50 AND CH<>51 AND CH<>54 AND CH<>55 OR (X<0 OR X>19 OR Y<0 OR Y>14) ADD X,-DX ADD Y,-DY PAL 1 REM DRAW LASER IF S=0 THEN REM OFF PAL 0 FLIP 0,0 BG FILL X1,Y1 TO X,Y CHAR 0 BG FILL X,Y TO X1,Y1 CHAR 0 PAL 1 FLIP F MOD 2,F\2 CELL X1,Y1,C IF X>=0 AND X<=19 AND Y>=0 AND Y<=15 THEN LVL (X,Y,0)=0 LVL (X,Y,1)=0 LVL (X,Y,2)=0 END IF ELSE REM ON BG FILL X1,Y1 TO X,Y CHAR C+2 BG FILL X,Y TO X1,Y1 CHAR C+2 CELL X1,Y1,C+1 CELL X,Y,C+3 END IF NEXT I PAL 0 FLIP 0,0 END IF END SUB SUB BITREAD(A,B,PARAM) 'A = VARIABLE 'B = BIT NUMBER TO CHECK (1 IS THE RIGHTSIDE BIT) PARAM=VAL( MID$(BIN$(A,8),LEN(BIN$(A,8))-(B-1),1)) END SUB Extrastage1: GOSUB EXTRASTAGEINTRO CLS PAL 0 BG FILL 0,12 TO 19,14 CHAR 1 TMPTIMER=TIMER EXTTIMER=0 ACT_X=9*8 ACT_Y=11*8 ACT_DIR=0 SPRITE 31 PAL 0 SPRITE 32 PAL 1 LFIRED=0 LPOSX=-10 LPOSY=-8 SPAWNTIMER=TIMER MOVINGTIMER=TIMER For x=0 to 20 REM NPCS (x, 0=active, 1=x pos, 2=y pos, 3=type (heart or diamond), 4=moving direction NPCS(x,0)=0 Next x PAL 4 CELL 0,0,12 CELL 1,0,13 CELL 2,0,14 CELL 17,0,14 PAL 1 CELL 16,0,86 REPEAT IF TIMER-SPAWNTIMER>45 THEN FOR X=0 TO 9 IF NPCS(x,0)=0 THEN NPCS(x,0)=1 NPCS(x,2)=16 NPCS(x,1)=-8 NPCS(x,4)=0 IF RND(15)=3 THEN NPCS(x,3)=1 ELSE NPCS(x,3)=0 END IF EXIT END IF NEXT X FOR X=9 TO 18 IF NPCS(x,0)=0 THEN NPCS(x,0)=1 NPCS(x,1)=20*8 NPCS(x,2)=30 NPCS(x,3)=0 NPCS(x,4)=1 EXIT END IF NEXT X SPAWNTIMER=TIMER END IF IF TIMER-MOVINGTIMER>1 THEN FOR X=0 to 20 IF NPCS(x,0)=1 THEN TMP=87 Sprite 33+x pal 3 IF NPCS(x,3)=1 THEN TMP=86 Sprite 33+x pal 1 End If if npcs(x,4)=0 then ADD NPCS(X,1),1 IF NPCS(x,1)>162 THEN NPCS(x,0)=0 Else ADD NPCS(X,1),-1 IF NPCS(x,1)<=-8 THEN NPCS(x,0)=0 End If If SPRITE HIT (33+x,32) THEN NPCS(x,0)=0 NPCS(x,1)=-8 LFIRED=0 LPOSY=-8 IF NPCS(x,3)=0 THEN ADD SCORE,10 Call sounds(2) ELSE ADD LIVES,1 Call Sounds(3) END IF END IF SPRITE 33+X,NPCS(x,1),NPCS(x,2),TMP END IF NEXT X MOVINGTIMER=TIMER END IF PAL 4 TEXT 0,15,"TIME LEFT "+STR$(100-EXTTIMER)+" " TEXT 4,0,STR$(SCORE) TEXT 18,0,STR$(LIVES) KD=RIGHT(0)-LEFT(0) GOSUB GETPLAYERLEFTRIGHT GOSUB ACTANIM ACT_X=ACT_X+ACT_DX IF ACT_X<0 THEN ACT_X=0 IF ACT_X>154 THEN ACT_X=154 IF LFIRED=0 AND BUTTON(0,0) THEN LFIRED=1 LPOSX=ACT_X LPOSY=ACT_Y-8 Call sounds(6) END IF IF LFIRED=1 THEN LPOSY=LPOSY-1.5 IF LPOSY<=-8 then LFIRED=0 END IF SPRITE 32,LPOSX,LPOSY,54 SPRITE 31,ACT_X,ACT_Y-9,52 CALL MAINSPRITE(ACT_X, ACT_Y, ACT_DIR, ACT_ANIM, ACT_FLIP) GOSUB ADDTIMER WAIT VBL UNTIL EXTTIMER=100 GOSUB EXTRASTAGEOUTRO RETURN Extrastage2: GOSUB EXTRASTAGEINTRO GOSUB EXTRASTAGEOUTRO RETURN Extrastage3: GOSUB EXTRASTAGEINTRO GOSUB EXTRASTAGEOUTRO RETURN Extrastage4: GOSUB EXTRASTAGEINTRO GOSUB EXTRASTAGEOUTRO RETURN Extrastage5: GOSUB EXTRASTAGEINTRO GOSUB EXTRASTAGEOUTRO RETURN GETPLAYERLEFTRIGHT: ACT_DIR=0 IF KD=-1 THEN REM JOYPAD RIGHT ACT_DX=0.8 ACT_FLIP=0 ACT_DIR=1 ELSE IF KD=1 THEN REM JOYPAD LEFT ACT_DX=-0.8 ACT_FLIP=1 ACT_DIR=1 ELSE ACT_DX=0 END IF RETURN ACTANIM: TMP=ACT_TIMER IF TIMER-TMP>=10 THEN ACT_TIMER=TIMER 'ACT_ANIM=(ACT_ANIM+1) MOD 2 ADD ACT_ANIM,1,0 TO 1 END IF RETURN ADDTIMER: IF TIMER-TMPTIMER>60 THEN ADD EXTTIMER,1 TMPTIMER=TIMER END IF RETURN EXTRASTAGEINTRO: SPRITE OFF 0 TO 63 CLS PAL 4 TEXT 4,5,"EXTRA STAGE" TEXT 4,7,"GET READY !" TMPTIMER=TIMER REPEAT WAIT VBL UNTIL TIMER-TMPTIMER>150 RETURN EXTRASTAGEOUTRO: SPRITE OFF 0 TO 63 CLS PAL 4 TEXT 4,6,"WELL DONE !" TMPTIMER=TIMER REPEAT WAIT VBL UNTIL TIMER-TMPTIMER>150 REM IF WON THEN DO: EXTRASTAGE(EXTRASTAGE(0,0),1)=1 add EXTRASTAGE(0,0),1 RETURN #1:MAIN PALETTES 053F2A00002A1530003C0C00003C3834 001B031700343025003B3726001E0D09 #2:MAIN CHARACTERS FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF FE8181818181817F017F7F7F7F7F7FFF 001038387C7CFEFE0010382868202000 FEA191A3A585997F217F7F7F7F7F7FFF 7EA58193C493C17E10FF7FFF7E7F7F6C FEC3D1E98F91857F017F7F7F7F7F7FFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00DB92925252DB000000000000000000 00BBAAAAABB2AB000000000000000000 00000800000800000000000000000000 0000000000000000000002066C381000 00000000000000000000000000000000 FE81BFA0A0A0A060017F7F60606060E0 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 009A92929A93D9000000000000000000 00B4A4A4B4A436000000000000000000 00000000000000000000000000000000 0000663C183C66000000663C183C6600 FFFFFFFFFFFFFFFF0000000000000000 0000000000000000FFFFFFFFFFFFFFFF 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000040400000000080C08080C08000 1008007F7F0020001088C0BFBFC0A000 000000FFFF000000000000FFFF000000 040107FFFF010904000000FFFF000000 0000000000001800000000000000247E 18181858981A180018181858981A247E 18181818181818181818181818181818 7E38B91A181818181818181818181818 00000000000000000000000000000000 80C0C0C04040400000404040C0C0C080 181818FFFF181818181818FFFF181818 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 3838107C545428280000000000000000 383810F0103844820000000000000000 38381070901828300000000000000000 0000107C545428283838000000000000 7E8181818181817E0000000000000000 003C424242423C000000281428140000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 003C3C3C3C1800007E425A525A241800 C0E070381C0800000000000002040A01 0000000000000000387C44007C383838 0000000000000E0400040E0E6E3E0A04 3C7EFFFFFFFF7E3C0408103E7C081020 007E7E7E7E7E7E000000182020180000 006CFEFE7C381000006CF2FA7C381000 0000080C0E04081000103874F27C3810 007E8D8581422418007EF3FBFF7E3C18 000700FA005A00A700000707FDFDA7A7 3C7EFFFFFBFFFFFF3C66C381858181FF 000000000C0800007E7E7E7E72767E7E 00E0005F005C00E30000E0E0BFBFE3E3 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 1E316060C0C0C0C00000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 003C7EAFAFFF7E7E003C42D1D181427E 0000003C7EAF7EFF0000003C42D142FF 0000003C3C182400000066E7C381A500 0000003C3C18240081C3E76600002400 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00181818180018000000000000000000 006C6C24000000000000000000000000 00247E24247E24000000000000000000 00083E380E3E08000000000000000000 00626408102646000000000000000000 001C34386E643A000000000000000000 00181830000000000000000000000000 000C183030180C000000000000000000 0030180C0C1830000000000000000000 000024187E1824000000000000000000 000018187E1818000000000000000000 00000000181830000000000000000000 000000007E0000000000000000000000 00000000001818000000000000000000 00060C18306040000000000000000000 003C666E76663C000000000000000000 0018381818187E000000000000000000 003C660C18307E000000000000000000 003C660C06663C000000000000000000 0066667E060606000000000000000000 007E607C06067C000000000000000000 001C307C66663C000000000000000000 007E060C183030000000000000000000 003C663C66663C000000000000000000 003C663E06663C000000000000000000 00000018001800000000000000000000 00000018001830000000000000000000 00000C1830180C000000000000000000 0000007E007E00000000000000000000 000030180C1830000000000000000000 003C660C180018000000000000000000 003C666E6E603C000000000000000000 00183C667E6666000000000000000000 007C667C66667C000000000000000000 003C666060663C000000000000000000 00786C66666C78000000000000000000 007E607860607E000000000000000000 007E6078606060000000000000000000 003C606E66663C000000000000000000 0066667E666666000000000000000000 003C181818183C000000000000000000 001E060606663C000000000000000000 00666C78786C66000000000000000000 0060606060607E000000000000000000 0042667E7E6666000000000000000000 0066767E6E6666000000000000000000 003C666666663C000000000000000000 007C667C606060000000000000000000 003C66666A6C3E000000000000000000 007C667C786C66000000000000000000 003E603C06067C000000000000000000 007E1818181818000000000000000000 0066666666663C000000000000000000 00666666663C18000000000000000000 0066667E7E6642000000000000000000 00663C183C6666000000000000000000 0066663C181818000000000000000000 007E0C1830607E000000000000000000 003C303030303C000000000000000000 006030180C0602000000000000000000 003C0C0C0C0C3C000000000000000000 00183C66000000000000000000000000 0000000000007E000000000000000000 #3:MAIN BG 00001410000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #4:MAIN MENU BG 00001410010001000000010001000100 00000400000001000100000001000000 01000000000021030000000001000000 00000000010000000000000000000100 00000000010000000100000021032003 00030000010001000000000001000000 00000100000001000000000001000300 00002103210321032003000300000100 00000000010000000000010000000100 00000000010000000100000021032103 00030000010001000000000001000000 00000100000001000100000001000000 01000000000000030000000000002000 20002000000000000000000000000000 00000000000000000000000000000000 00000000000020002000200000000000 01000000000000000100000000000100 00000000010000000000010000000000 20000000000000000100050000000500 01000000010000000100000001000500 00000100200020002000200020000000 01000000040000000100000001000000 01000000010000000300010020000000 20000000200000000100000000000000 01000000010003000100000001000000 00000100200000002000000020000000 01000000000000000100000001000000 04000000010000000000010000002000 000020000000E400F500EE00E700E500 EF00EE00000000000000000000000000 0000000000002000000020000000E300 E800E100EC00EC00E500EE00E700E500 F3000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000 #14:SOUND EFFECTS 2800308A000000001800846C003A0000 08006060000000002800303019FE0000 38002020000000003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 00404040014040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 490F004E0F00FF00EA00000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 390F00FF0F003A0F003B0F00FF00003C 0F00FF00003D0F003E0FEEFF00000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 #15:MUSIC 280086A8153A80001800846C003A0000 08006060000000002800303019FE0000 38002020000000003800505000000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 0800000F000000000800000F00000000 804040400140404002C0404003404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 40404040404040404040404040404040 4B0CE6440C00460C00440C00450C0044 0C00460C00440C004B0C00440C004C0C 00440C004B0C00440C004A0C00440C00 470C00440C00460C00440C00450C0044 0C00460C00440C004B0C00440C004C0C 00440C004B0C00440C004A0C00440C00 460C00430C00450C00430C004A0C0043 0C004B0C00430C004A0C00430C004B0C 00430C004A0C00430C00490C00430C00 460C00430C00450C00430C004A0C0043 0C004B0C00430C004A0C00430C004B0C 00430C004A0C00430C00490C00430C00 4E0C00470C004F0C00470C004E0C0047 0C00490C00470C004E0C00470C004D0C 00470C00480C00470C004D0C00470C00 4A0C00470C004F0C00470C004E0C0047 0C00490C00470C004E0C00470C00490C 00470C00480C00470C004D0C00470C00