rem +---------------------+-----------------+ rem | Jumper | created with | rem | for batariBasic | bB version 99b | rem | by Steve Engelhardt +-----------------+ rem | v0.99rc1 (7/08/2006) | 16k Build | rem +---------------------+-----------------+ rem rem +----------------------------------------------------------------+ rem | http://www.atariage.com/forums/index.php?showtopic=86304&st=75 | rem +----------------------------------------------------------------+ rem rem V14 rem Left Difficulty Switch used - 2 levels of missile speed. rem Title Screen added rem Sprite Animations for using the ladder, running, and jumping rem Audio Code added, not yet in use though. rem additional level of difficulty added rem lives "counter" changed to a single sprite - saved some more space. :) rem rem V15 rem changed ladder sprites to slightly shorter, changed the platform level where the player sprite walks rem this was to fix the problem of jumping onto a ladder and falling halfway down. rem I had the h variable reset when you're killed, which should resolve the random problem of the rem player sprite rising up the screen after you're killed. rem bugfix - missile/ball now reset after you're hit - so you don't get hit twice on the floor rem rem V16 rem Added ranking system on title screen (4K Version Only) rem one star - Collect 8+ treasures rem two stars - Collect 16+ treasures rem three stars - Collect 24+ treasures rem medal - Collect 28+ treasures rem medal w/bar - Collect 32+ treasures rem rem V17 rem Changed title screen to higher resolution. rem Now have 0 bytes free. :) rem rem V18 rem fixed bug where player sprite would jitter in place when pressing up at the top of a ladder. rem rem V19 rem added sounds to the game rem rem V20 rem tweaking sounds rem known bugs: if you get grab a treasure or get hit by a missile at the same time it's making it's shooting sound, rem the missile sound will remain during the "death" sound and the "falling" sound. I know how to fix rem it, the problem is there's no ROM space left to add the code to turn off the missile sound when rem those events occur. I need to figure out how to save some more space! rem rem rem V22-28 rem Now have 8k of space to work with! rem What I'm working on/added: rem X-Added 12 total screens - all levels have actually been worked on and are all unique rem X-Added "you win" screen after all 12 levels have been beaten (48 treasures collected) rem still needs work to look nicer. rem rem Changes rem Scoring? rem X-Level indicator (1-12) after you die, screen shows highest level that you completed. rem x-Change ranking system to include all 12 levels rem x-make sure audio stuff is working right after switch to 8k. rem X-Add intro "song"? Yes! Just need to change the song now. rem X-add additional Y levels for the death missiles to come in on. right now there are only rem four combinations. rem rem V29 rem Added code to keep you from remaining suspended in mid-air by holding down the fire button when you're not touching anything. rem Added code to silence V0 sound when you're going up and you've reached the top of a ladder. rem rem rem changes implemented: rem rank system changed to actual number of the last level you successfully completed. rem added additional Y levels for death missiles (later removed this -- too difficult on higher levels) rem rem V30 rem added sound to the "skull and crossbones" death sprite screen. rem changed you win screen to lower resolution to save some space. rem rem v31 rem re-added lower res title screen - it looks nicer, and saves space. rem rem V32-33 rem tweaked level designs - playtested all of them - they are all beatable. rem changed missile delay to a much shorter amount of time. I found that if you grabbed the last treasure on a level rem when the missiles were off screen, the game wouldn't jump to the next level until the missiles started again. rem (I Changed missile speed/level select code in V38 to fix this) rem I also changed the missile sounds to accomodate this change. rem rem V34-36 rem bug found and fixed: noticable pause between levels, starting after level 3 rem changed code that controls missile speed, changed code that detects/changes the level you go to rem (seems to have resolved the issue) rem saved a little space by making the level changes use a goto routine rather than a gosub. rem rem V37 rem added title "beat" - not great, but better then no sound I think. rem rem V38 rem added title song, but it's stolen from JoustPong/FlapPing. I just wanted to see if I could get a song in there. rem Sorry, Kirk, I'm going to change it, I swear! rem rem V39 rem Still had nearly 500 bytes of space available in bank 2, so I found a way to use it. Now have 3 bytes left total. rem levels 2,4,6,8 & 10 now have playfields that change dynamically. :) rem a few more bugfixes from last version having to do with sprites... rem a few more tweaks on level design and missile speeds... rem rem V40 rem still tweaking levels rem changed winner screen to display lives remaining rem decreased difficulty of the game a little bit - missiles are now slower at higher levels - easier to test gameplay. rem V41 rem Updated Level 11 rem rem V47 rem You'll now die if you fall too far. You can't fall more than two levels down. rem rem V48 rem Missiles now speed up if you are on close to the same Y Level - however they don't turn around if they're past you rem rem V50 rem Code Cleanup done, everything in and working, down to 0 bytes in each bank. :( rem rem rem V51 rem I got the reverse missile code working rem now need to free up space to fit it in! rem rem V53 rem Reverse missile code now working! rem unfortunately back down to 2 bytes free. rem rem V55 rem I've got the reverse missile code fixed and working: rem Missile and Ball both reverse direction, and shoot at high speed when the Y axis is close. rem Missile and Ball will continue at high speed until they go off the screen, just like jumpman. :) rem rem V56-57 rem audio tweaks to go along with the new missile speed code. Still need to change it so it makes a firing sound when it speeds up. rem Intro song removed to make space for new missile speed code. Missiles increased to two pixels, so they wouldn't shoot right through you. rem rem V58 rem mosquito jumping problem is actually fixed thanks to AA Member suggestions. The jumping looks rem a little funny now, though...I'd like to fix the visual aspect of the jumping motion, or just rem revamp all of the jump code. rem rem V59 rem The jump code has been reworked a little bit. The fire button must be lightly tapped to jump. rem rem KNOWN BUG: If you hold down the fire button when you fall, you'll won't die, even if you fall too far. rem KNOWN ISSUE: Not sure if this should be called a bug or not - if you hold down the fire button rem and walk to the end of a platform, you won't fall off. When you release the button, rem You'll jump. I tried to change this behavior, but if I set it to make you fall in rem that situation, there's no easy way to distinguish between hanging at the end of a rem platform with the fire button held down, or jumping - both result in a "no collision rem with anything" state. If I make you fall in that state, it messes up jumping. Bleh. rem rem V60 rem I'm going to attempt to tweak the audio in this version, to get it ready for the MGC. rem 1. Re-add intro song. Must increase beat time by one if the level number is indicated, it rem slows down the song. I'm sure it's caused by the two drawscreens called when the number is shown. rem X-2. Change audio when missiles are fired to when they speed up instead of when they enter the screen. rem 3. Maybe re-add the missile speed code that increases the speed as you increase in levels. I now rem have the space for it since I've gone up to 16k. rem rem V61-63 rem Audio Tweaking rem Changed jumping yet again - you have to lightly tap button to jump, hold it down and it won't work. rem fixed bug - jumping up and down on bottom level caused death rem made bottom level thicker - just think it looks better visually. rem holding down button when you fall will still save your life. rem rem V64 rem Pulled back most of the subroutines in the main game loop into bank 1, as the screen rolled on real hardware. rem title Screen, win screen moved to bank 3 rem Changed jump code back to original form, mosquito jumping is back for now. rem Added right difficulty switch option. Switching over to A makes missiles faster, but they don't shoot or rem change direction. rem it appears holding down the button when you fall will kill you? check that out. Good solution for trying rem to jump in midair??? :) rem rem V65 rem Added color/BW Switch Option. Color Mode-Player moves slow, BW Mode-player moves fast. rem rem V66 rem Tested on real hardware - doesn't roll! The level number doesn't appear when you finish the game though... rem but when I added that it did cause screen glitches--although it's not in the main loop. Hmmm. rem Jumping too much at the top platform (over and over again) will cause death - that's a problem. rem rem rem V67 rem Changed score to display actual number of treasures collected using two sprites. rem Tradeoffs: Removed alternate playfield for level 10. rem Removed playfield for winner screen. rem There's 4 bytes free in bank 4 now (graphics). Could delete a few more numbers, though. rem rem V68 rem Life and Treasure counter added - at the expense of the winner screen. EOG should bounce back to title rem screen now, but it's going to have to be tested. The alternate playfield for level 10 was also removed. rem rem V69-70 rem still need to test eog/win situation (tests ok in v70) rem title screen changed, locations of L/T sprites changed, may want to explore other possible title screen rem Death sprite changed from skull & crossbones to the stunned sprite, which flashes when you've lost your rem last life. rem Removing the original routine to display the level number seems to have fixed the title song problem, rem it no longer plays too slowly. It was caused by flickering between two different player0 sprites and rem calling drawscreen twice. rem rem ideas - maybe multiple colors on title screen (have to look outside of bb for how to do this though...) rem rem V70 rem Made a new "Win" screen based on 48 treasures being collected - the jumper title sprite is replaced rem with a player sprite jumping up and down in the middle of the screen. Tested ok. rem The only thing I'm not going to be able to re-add after adding the Level/Treasure score is the rem the level 10 alternate playfield. rem rem V71-72 rem some code cleanup, title screen tweaking rem rem rem V73-74 rem working on the "falling" code. Seems to work much better and more consistently now. rem Jumping in midair no longer works - it now speeds your fall to the ground, and doesn't affect rem how far you must fall before you die. rem rem V75 rem noticed possible bug here: rem 'if v<47 then goto chgnxt' rem 'if v>47 then goto chgspr' rem Change/Test this in the title screen subroutine rem FIXED rem rem V76 rem Testing Title song changes rem rem V77 rem Title Song Finally Changed! :) :) :) rem rem V99rc1 rem Release Candidate 1 - Final Bug Checking rem rem note on difficulty switches: rem Left Difficulty: A - Double Speed Missiles, B - Normal Speed Missiles rem Right Difficulty: A- Missles are double speed, but do not shoot at you or change direction, B - Slower Missiles that shoot and change direction. rem rem To Do: rem 2. Playtest game from beginning to end, make sure everything is working rem 5. Use Manuel's SID2TIA and change the intro song to something like the original jumpman song rem 6. Fix 'mosquito' jumping problem. :) rem 9. make sure you can't jump in midair rem x-10. May change missile at bottom of the screen, it results in some "cheap deaths" sometimes. rem rem G-05/12/06-10:15 rem includesfile multisprite_bankswitch.inc : rem set kernel multisprite set romsize 16k rem set smartbranching on rem songinit rem ---------------------------- rem Intitialize Audio Variables rem ---------------------------- dim beatPointer=b dim beatTimer=k dim tempaudv=l dim musicPointer=y dim musicTimer=j rem ---------------------------- rem Volume Down and Set Channels rem ---------------------------- AUDV0=0 AUDC0=10 AUDV1=0 AUDC1=8 rem ------------------------------ rem Initialize Pointers and Timers rem ------------------------------ musicPointer=$FF musicTimer=0 beatPointer=$FF beatTimer=0 rem rem goto title bank3 end rem --------------------- rem Initialize/Start Game rem --------------------- init rem rem set missile & ball to be 2 pixels wide (Default size for Death Missiles) rem rem NUSIZ0=$10 rem CTRLPF=$11 rem ------------------------------------------------------------------ rem Define Variables rem ------------------------------------------------------------------ a=1 : rem Level Counter b=0 : rem c=130 : rem Player0XPos=c d=22 : rem Player0YPos=d e=0 : rem missile0XPos f=0 : rem missile0Ypos g=0 : rem Y pos to move to h=0 : rem currently jumping i=130 : rem Player2 X Position (Treasure) j=1 : rem k=0 : rem l=0 : rem m=53 : rem Player3 (Top Ladder X Position) n=69 : rem Player4 (middle ladder X Position) o=0 : rem Death flag p=53 : rem Player5 (Bottom ladder X Position) q=0 : rem Ball Y Position r=250 : rem Timer s=0 : rem speed Counter t=0 : rem Color Cycler for win screen u=0 : rem Color Cycler for title & win screen v=0 : rem Treasure counter w=2 : rem Life Counter x=0 : rem Random Number Generator for Y Position of Death Missile y=0 : rem Used for death sound z=50 : rem Timer rem ------------------------------------------------------------------- rem rem ------------------------------ rem COLORS rem ------------------------------ rem Set Playfield Background rem COLUPF=144 rem rem Set Background color rem COLUBK=00 rem rem Set Jumper Player Color rem COLUP0=30 rem rem Set Lives Counter Color rem NewCOLUP1=14 rem rem Set color of Ladders rem COLUP2=46 COLUP3=46 COLUP4=46 COLUP5=46 rem rem Ball is one pixel rem CTRLPF=$01 rem rem Set Score Color (not used yet) rem rem scorecolor=246 rem rem Set Initial Ladder configuration for Level 1 rem NUSIZ3=$06 NUSIZ4=$02 NUSIZ5=$04 NewNUSIZ=$03 rem rem set ball to 2 pixels rem CTRLPF=$11 NUSIZ0=$10 rem rem Put life counter Sprite on the screen rem goto life liferet missile1x=0:missile1y=0 rem rem ------------------------------ rem MAIN GAME LOOP rem ------------------------------ rem main if !collision(player0,player1) && !collision(player0,playfield) then u=u+1 rem rem if you land on a platform, reset fall counter rem if collision(player0,player1) || collision(player0,playfield) then u=0 rem rem If you fall more than two levels, you die rem if u>10 && joy0fire && !collision(player0,player1) && !collision(player0,playfield) then u=u+1:d=d-2:g=g-2 if u>36 then u=0:goto death rem rem rem if d=22 then u=0 rem rem rem l=l+1 rem if l>150 then l=1 rem rem Sound Effects rem rem Turn off V0 sound at the beginning of every loop rem rem AUDV0=0 rem AUDV1=0 sound rem rem 'walking' sound rem rem if joy0left || joy0right then AUDF0=31:AUDC0=14:AUDV0=15 rem if joy0left then AUDF1=30:AUDC1=14:AUDV1=15 rem rem 'jumping' sound rem if joy0fire then AUDF0=11:AUDC0=1:AUDV0=7 else AUDV0=0 rem rem 'shooting' sound when missile/ball appears on screen rem rem if e>12 && e<24 then AUDF1=e:AUDC1=12:AUDV1=12 else AUDV1=0 if b=1 then AUDF1=29:AUDC1=l:AUDV1=4 else AUDV1=0 rem rem reset game if reset button is pressed rem if switchreset then goto init rem rem Counter rem This is the counter for the death sequence, it's reset here. rem z=100 rem rem ------------------------------- rem DEFINE PLAYFIELD (LEVEL SELECT) rem ------------------------------- rem if v > 47 then y=35:s=0:goto title bank3 if v > 43 then a=12:goto levels if v > 39 then a=11:goto levels if v > 35 then a=10:goto levels if v > 31 then a=9:goto levels if v > 27 then a=8:goto levels if v > 23 then a=7:goto levels if v > 19 then a=6:goto levels if v > 15 then a=5:goto levels if v > 11 then a=4:goto levels if v > 7 then a=3:goto levels if v > 3 then a=2:goto levels rem if v >= 0 then a=1:goto levels rem levels on a goto main level1 level2 level3 level4 level5 level6 level7 level8 level9 level10 level11 level12 levelret rem rem ------------------------------ rem SPRITE DEFINITIONS rem ------------------------------ rem rem Change sprite for running, jumping, and going up/down ladder rem if joy0right then REFP0=0:goto run if joy0left then REFP0=8:goto run if joy0up || joy0fire then goto ladder rem rem Player (Standing Still) rem player0: %01000100 %00101000 %01010100 %00111000 %00010000 %00111000 %00000000 %00000000 %00000000 %00000000 end runret rem rem Treasure Sprite rem player2: %01110000 %10001000 %01110000 end rem rem These skip statements are for the levels that don't have ladders rem if a=9 then skipmid if a=4 then skiplad if a=7 then skipall rem rem Ladder Sprite rem player3: %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %00000000 %00000000 end skiplad if a=10 || a=8 then skipmid rem rem Ladder Sprite rem player4: %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %00000000 %00000000 end skipmid if a=5 then skipall rem rem Ladder Sprite rem player5: %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %10001000 %11111000 %00000000 %00000000 end skipall rem rem Set Sprite Boundaries rem rem set outside boundaries for Player1 Left/Right movement rem (so you can't fall off the outer edges of the playfield) rem if c<15 then c=c+1 if c>138 then c=c-1 rem rem ------------------------------ rem Position Sprites rem ------------------------------ rem if i<20 then i=130 player0x=c : player0y=d : rem Player (130,23) (Starting Position of Player) player1x=23 : player1y=83 : rem Lives (23,83) (Lives Remaining Sprite) player2x=i : player2y=74 : rem Ladder (130,74) (Treasure) player3x=m : player3y=61 : rem Ladder (53,61) (Top Ladder) player4x=n : player4y=43 : rem Ladder (69,43) (Middle Ladder) player5x=p : player5y=25 : rem Ladder (53,25) (Bottom Ladder) rem rem This is the code I added at batari's suggestion, it allows for collisions to function. asm stx CXCLR end rem drawscreen rem rem ------------------------------ rem Difficulty Levels rem ------------------------------ rem rem Left: B = normal missiles, A = Fast Missiles rem if !switchleftb && e<145 then e=e+1 rem rem ------------------------------ rem Missile Routine rem ------------------------------ rem rem ------------------------------ rem Death Missiles rem ------------------------------ rem rem One Missile/One Ball, with four random starting locations each. rem Ball comes in from right side of screen, missile starts from the left. rem rem Random Number Generator rem 200 x=rand:if x>215 then 200 x=x/8:x=x+1 rem rem Based on random number, assign Y values to Ball and Missile0 rem if x > 0 && x < 8 && e>160 then f=62 : q=26 : rem if x > 7 && x < 15 && e>160 then f=66 : q=44 : rem if x > 14 && x < 22 && e>160 then f=38 : q=56 : rem if x > 21 && x < 29 && e>160 then f=50 : q=73 : rem rem rem skip missile movement if the X value is out of range rem rem if e>160 then e=e+12:b=0:missile0y=0:bally=0:goto skipmis rem if e<12 then e=e-12:b=0:missile0y=0:bally=0:goto skipmis if e>160 then e=e+12:b=0:goto skipmis if e<12 then e=e-12:b=0:goto skipmis rem rem Move Missile & Ball rem l=160-e missile0x=l: missile0y=f ballx=e: bally=q skipmis rem rem ------------------------------ rem Missile Speed Routine rem ------------------------------ rem rem if v>47 then goto title bank3 if f=0 then e=e+4 rem rem Speed the missiles up if you come close to the same Y Position, reverse direction if necessary. rem s = s + 1 if s=3 then e=e+1:s=0 rem k=l-4 j=e-4 if !switchrightb then e=e+1:goto skipspd if b=1 || b=2 then goto skipspd if f=62 && d>66 && d<72 then b=2:e=e-2: if c<=k then e=e+4:b=1 if f=66 && d>70 && d<76 then b=2:e=e-2: if c<=k then e=e+4:b=1 if f=38 && d>42 && d<48 then b=2:e=e-2: if c<=k then e=e+4:b=1 if f=50 && d>54 && d<60 then b=2:e=e-2: if c<=k then e=e+4:b=1 if q=26 && d>30 && d<36 then b=2:e=e-2: if c>=j then e=e+3:b=1 if q=44 && d>48 && d<54 then b=2:e=e-2: if c>=j then e=e+3:b=1 if q=56 && d>60 && d<66 then b=2:e=e-2: if c>=j then e=e+3:b=1 if q=14 && d>18 && d<24 then b=2:e=e-2: if c>=j then e=e+3:b=1 skipspd rem rem The skipspd routine below is to keep the missile moving in the same direction after rem it's shot at the faster speed. Without this, the missile would reverse direction rem again once the Y axis of player/missile didn't match rem if b=1 then e=e+1:if e<12 then e=e-12 if b=2 then e=e-2 rem rem ------------------------------ rem COLLISION DETECTION rem ------------------------------ rem rem Player/Missile Collision rem if collision(player0,missile0) && o < 1 then goto death if collision(player0,ball) && o < 1 then goto death rem rem Player/Treasure Collision rem rem If the player reaches the treasure, go to the routine that makes player drop back rem to the bottom of the screen and reset the treasure's location. rem if collision(player0,player1) && d>74 then goto gotit rem movement if s=2 && !switchbw then goto main rem rem ------------------------------ rem MOVEMENT/JUMPING rem ------------------------------ rem if d>79 && collision(player1,playfield) then d=d-1:g=g-1 if joy0up && collision(player1,player0) then g=g+1 if joy0down && collision(player1,player0) then g=g-1 if joy0left && collision(player0,playfield) then c=c-1 if joy0right && collision(player0,playfield) then c=c+1 rem rem rem keep player from going too far down the ladder on the bottom platform: rem rem if d < 23 then d=d+1 rem rem to keep from going too far down off the top ladder. rem if collision(player0,player1) && d > 57 && d < 60 then d=d+1 rem rem to keep from going too far down off the middle ladder rem if collision(player0,player1) && d > 39 && d < 42 then d=d+1 rem rem Player Jumps rem if joy0down then nojumping if h>4 then nojumping if collision(player0,player1) then goto nojumping if h>1 then goto gravity if !joy0fire then nojumping g=d+5 if joy0left then h=2:goto gravity if joy0right then h=3:goto gravity h=4 : goto gravity nojumping if h=6 then c=c-1 if h=7 then c=c+1 if g 33 && d < 38 && !joy0up && !collision(player0,player1) then AUDV0=0: g=34 : d=34 : rem L/R Bottom Middle Platform if d > 45 && d < 49 && !collision(player0,player1) then g=46 : d=46 : rem L/R Middle Platform if d > 57 && d < 61 && !collision(player0,player1) then g=58 : d=58 : rem L/R Top Middle Platform if d > 69 && d < 73 && !joy0up && !collision(player0,player1) then AUDV0=0: g=70 : d=70 : rem L/R Top Platform if d > 39 && d < 43 && !collision(player0,player1) then g=40 : d=40 : rem C Bottom Middle Platform if d > 51 && d < 55 && !joy0up && !collision(player0,player1) then AUDV0=0: g=52 : d=52 : rem C Middle Platform if d > 61 && d < 65 && !collision(player0,player1) then g=62 : d=62 : rem C Top Middle Platform if d > 73 && d < 76 && !collision(player0,player1) then g=74 : d=74 : rem C Top Platform rem rem rem gravity if h=2 then c=c-1 if h=3 then c=c+1 if g>d then d=d+1:goto main if g1 then h=h+4 rem rem This next line is to keep you from remaining suspended in mid-air by holding down the fire button when you're rem not touching a platform or ladder. rem rem if joy0fire && !collision(player0,player1) && !collision(player0,playfield) && d>22 then d=d-2 skipf rem rem ------------------------------ rem GRAVITY rem ------------------------------ rem I was trying to detect when the player was within a few pixels above or below the Y position of the platforms. rem That left some "dead" spots on the screen where if you jumped, you'd just be stuck rem in mid air. I then added the "general" gravity section below to fill in the gaps. rem rem Have player fall down to next level if you walk off a platform. rem rem If the player is within a certain Y range and isn't touching a platform, fall down to the next one. rem All Possible Y Positions of the player are covered in these, so I know exactly where to put rem the player0 sprite based on current the Y Position. rem rem U is the counter that keeps track of how far you've fallen. Fall too far and you'll die! rem if d > 22 && d < 38 && !collision(player0,player1) && !collision(player0,playfield) then g=22 if d > 37 && d < 49 && !collision(player0,player1) && !collision(player0,playfield) then g=35 if d > 57 && d < 61 && !collision(player0,player1) && !collision(player0,playfield) then g=47 if d > 69 && d < 73 && !collision(player0,player1) && !collision(player0,playfield) then g=59 if d > 39 && d < 43 && !collision(player0,player1) && !collision(player0,playfield) then g=22 if d > 51 && d < 55 && !collision(player0,player1) && !collision(player0,playfield) then g=41 if d > 61 && d < 65 && !collision(player0,player1) && !collision(player0,playfield) then g=53 if d > 64 && d < 90 && !collision(player0,player1) && !collision(player0,playfield) then g=63 if d > 42 && d < 46 && !collision(player0,player1) && !collision(player0,playfield) then g=41 if d > 48 && d < 52 && !collision(player0,player1) && !collision(player0,playfield) then g=47 if d > 54 && d < 58 && !collision(player0,player1) && !collision(player0,playfield) then g=53 if d=61 && !collision(player0,player1) && !collision(player0,playfield) then g=59:u=u+1 rem rem rem rem rem platform rem if collision(player0,player1) && collision(player0,playfield) then goto skipplat rem if d > 20 && d < 25 && joy0left && collision(player0,playfield) then d=22 rem if d > 20 && d < 25 && joy0right && collision(player0,playfield) then d=22 rem if d > 32 && d < 37 && joy0left && collision(player0,playfield) then d=35 rem if d > 44 && d < 48 && joy0left && collision(player0,playfield) then d=47 rem if d > 56 && d < 60 && joy0left && collision(player0,playfield) then d=59 rem if d > 32 && d < 37 && joy0right && collision(player0,playfield) then d=35 rem if d > 44 && d < 48 && joy0right && collision(player0,playfield) then d=46 rem if d > 56 && d < 60 && joy0right && collision(player0,playfield) then d=59 rem if d > 38 && d < 42 && joy0left && collision(player0,playfield) then d=41 rem if d > 50 && d < 54 && joy0left && collision(player0,playfield) then d=53 rem if d > 60 && d < 64 && joy0left && collision(player0,playfield) then d=63 rem if d > 38 && d < 42 && joy0right && collision(player0,playfield) then d=41 rem if d > 50 && d < 54 && joy0right && collision(player0,playfield) then d=53 rem if d > 60 && d < 64 && joy0right && collision(player0,playfield) then d=63 rem skipplat rem rem ------------------------------ rem END MAIN GAME LOOP rem ------------------------------ goto main rem ------------------------------ rem SPRITES rem ------------------------------ rem rem Sprite for Lives Remaining rem life player1: %00101000 %00010000 %00111000 %00010000 end goto liferet rem rem Player Running rem run player0: %01001000 %00101000 %00010010 %00111100 %01010000 %00011000 %00000000 %00000000 %00000000 %00000000 end goto runret rem rem Player going up a ladder/Pushing up on joystick rem ladder player0: %01000100 %00101000 %00010000 %01111100 %01010100 %00111000 %00000000 %00000000 %00000000 %00000000 end goto runret rem rem ------------------------------ rem Playfield / Level Definitions rem ------------------------------ rem rem Below are the playfield definitions for the 12 different levels. rem level1 COLUPF=158 pfheight=1 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ XXX........XX... ................ .....XXXX......X ................ ................ ................ ................ ................ .XXXXXXXX......X ................ ................ ...........XXX.. ................ ................ XXXX..XXX....... ................ ................ ...........XXXXX ................ ................ XXXXXXXXX....... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level2 COLUPF=190 NUSIZ3=$00 m=86 pfheight=1 if l>89 then goto lvl2alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ X...X...X...X... ................ ...............X ................ ................ ................ ................ ................ ..X.XXXXX......X ................ ..X............. ...........XXX.. ..X............. ................ ..X............. ................ ..X............. ...........XXXX. ..X............. ................ ..X.XXXXX....... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level3 NUSIZ3=$00 m=86 COLUPF=238 pfheight=1 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ ...X........X... ................ ...X.....XXX.XXX ................ ...X............ ................ ...X............ ................ ...XXXXXX......X ................ ................ ...........XXX.. ................ ................ ................ ................ ...X............ ...........XXX.. ...X............ ................ ...XXXXXX....... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level4 player3: %00000000 end NUSIZ3=$00 NUSIZ4=$00 m=86 n=86 COLUPF=94 pfheight=1 if l>89 then goto lvl4alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ ...X...X...X.... ................ ...X............ ................ ...X............ ................ ...X.......X.... ................ ...XXXXX...X.... ................ ...........X.... ...............X ...........X.... ................ ..X....XXXXX.... ................ ..X............. ...............X ..X............. ................ ..XXXXXXXXXXX... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level5 player5: %00000000 end NUSIZ0=$00 NUSIZ3=$04 NUSIZ4=$00 NUSIZ5=$04 m=53 n=86 P=53 COLUPF=62 pfheight=1 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ ...XX......XX... ................ .......XX....... ................ ................ ................ ................ ................ ......XXXXXXX... ................ ................ XXX............X ................ ................ ................ ................ ................ ..............XX ................ ...........X.... ...XXXXXX....... ................ ...X............ ................ ...X............ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level6 NUSIZ5=$00 NUSIZ0=$00 NUSIZ3=$00 NUSIZ4=$00 m=122 n=72 p=49 COLUPF=238 pfheight=1 if l>89 then goto lvl6alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ .XX........XX..X ................ .....XXXX....... ................ ................ ................ ................ ................ ...X.XXXXX.....X ................ ...X............ ..........XXXX.. ...X............ ................ ...X............ ................ ...X............ ...........XXX.. ...X............ ................ ...X.XXXXX...... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level7 NUSIZ0=$00 NUSIZ3=$00 NUSIZ4=$00 CTRLPF=$01 player3: %00000000 end player4: %00000000 end player5: %00000000 end m=25 n=144 COLUPF=54 pfheight=1 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ .X..XXX..XXX..XX ................ .X.............. ................ .X.............. ................ .X.............. ................ .XXXXX.......XXX ................ ...............X ........XXX..... ...............X ................ ...............X ................ ...............X XX..XX.......XXX ................ X............... ........XXX..... X............... ................ X............... ................ X............... XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level8 COLUPF=190 NUSIZ0=$20 NUSIZ3=$00 NUSIZ5=$00 CTRLPF=$21 m=86 p=86 pfheight=1 if l>89 then goto lvl8alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ XXXXX.....XXX... ................ .......X.......X ................ ................ ................ ................ ................ ......XXX......X ................ ................ ...X.......XXX.. ................ ................ X............... ................ X............... .....XXXXXXXXX.. X............... ................ X............XXX ................ X............... ................ X............... ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level9 player3: %00000000 end rem player4: rem %00000000 rem end n=60 NUSIZ5=$00 NUSIZ0=$20 NUSIZ4=$00 CTRLPF=$21 p=131 COLUPF=222 pfheight=1 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ XX..XX...X...X.. ................ ....XX.......... ................ ....XX.......... ................ ....XX.......... ................ ....XXXXXX..XXXX ................ ...............X ................ ...............X ................ ...............X ................ ...............X ........XXXXX... ................ ................ ...XXX.......... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level10 player4: %00000000 end m=86 p=125 rem n=26 CTRLPF=$21 NUSIZ0=$20 NUSIZ5=$00 NUSIZ4=$00 NUSIZ3=$00 COLUPF=30 pfheight=1 rem if l>89 then goto lvl10alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ XXX........XX... ................ .....XXXX......X ................ ................ ................ ................ ................ .XXX..XXX......X .X.............. ...............X .X.............. ...........XX..X .X.............. ...........XXXXX .X.............. ................ .XXX............ ................ ................ .....XXXX....... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level11 NUSIZ5=$00 NUSIZ0=$20 NUSIZ3=$00 NUSIZ4=$00 CTRLPF=$21 m=27 n=125 p=27 COLUPF=76 pfheight=1 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ .....XX..XX..... ................ XXX.........XXXX ................ ................ ................ ................ ................ XXX............. ................ ................ .....XX..XX..XX. ................ ................ ................ ................ ................ .....XX..XX..XX. ................ ................ XXX............. ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret level12 pfheight=1 NUSIZ5=$00 NUSIZ0=$30 NUSIZ3=$00 NUSIZ4=$04 CTRLPF=$31 m=52:n=38:p=86 COLUPF=14 playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ ...XX......XX... ................ ......XXXX....XX ................ ................ ................ ................ ................ .......XX.....XX ................ ................ ...XXX....XXX... ................ ................ XX.....XX....... ................ ................ ...XXX.....XX... ................ ................ ..............XX ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret rem ----------------------- rem Alternate Playfields rem ----------------------- rem rem Levels 2, 4, 6, 8, 10 will switch to these when e>77 rem lvl2alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ X.X.X.X.X.X.X.X. ................ ...............X ................ ................ ................ ................ ................ ..X.XXXXX......X ................ ..X............. ...........XXX.. ..X............. ................ ..X............. ................ ..X............. ...........XXXX. ..X............. ................ ..X.XXXXX....... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret lvl4alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ ...XXXXXXXXX.... ................ ...X............ ................ ...X............ ................ ...X.......X.... ................ ...XXXXX...X.... ................ ...........X.... ...............X ...........X.... ................ ..X....XXXXX.... ................ ..X............. ...............X ..X............. ................ ..XXXXXXXXXXX... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret lvl6alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ .XX........XX... ................ .....XXXX....... ................ ................ ................ ................ ................ .....XXXXX.....X ................ ................ ..........XXXX.. ................ ................ ................ ................ ................ ...........XXX.. ................ ................ .....XXXXX...... ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret lvl8alt playfield: ................ ................ ................ ................ ................ ................ XXXXXXXXXXXXXXXX ................ ................ ................ ................ ................ XXXXX......X.... ................ .......X.......X ................ ................ ................ ................ ................ ......XXX......X ................ ................ ...X.......XXX.. ................ ................ X............... ................ X............... .....XXXX..XXX.. X............... ................ X............XXX ................ X............... ................ X............... ................ XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ................ ................ ................ ................ end goto levelret rem lvl10alt rem playfield: rem ................ rem ................ rem ................ rem ................ rem ................ rem ................ rem XXXXXXXXXXXXXXXX rem ................ rem ................ rem ................ rem ................ rem ................ rem XXX........XX... rem ................ rem .....XXXX......X rem ................ rem ................ rem ................ rem ................ rem ................ rem .XXXXXXXX......X rem ................ rem ...............X rem ................ rem ...........XX..X rem ................ rem ...........XXXXX rem ................ rem ................ rem .XXX............ rem ................ rem ................ rem .....XXXX....... rem ................ rem ................ rem ................ rem ................ rem ................ rem XXXXXXXXXXXXXXXX rem XXXXXXXXXXXXXXXX rem ................ rem ................ rem ............... rem ................ rem end rem goto levelret death rem ------------------------------ rem PLAYER IS HIT BY MISSILE rem ------------------------------ rem if w=2 then NewNUSIZ=$01 if w=1 then NewNUSIZ=$00 if w=0 then NewCOLUP1=00 AUDF1=z:AUDC1=12:AUDV1=12:AUDV0=0 rem rem Timer for Death Sequence rem z=z-1 rem rem To avoid the missile & ball causing multiple deaths when you're at the bottom of the screen, rem I move the missile off screen after a hit is registered. rem e=e+8 rem rem attempting to fix the 'rise up the screen' issue after you're hit by a missile (h=0 reset) rem h=0 rem rem 'Stunned' Sprite rem player0: %11111110 %10010010 %00111000 %00010000 end rem rem When the timer runs out, take a way a life (W Variable) and return to the main game loop rem if z < 1 then w=w-1 : o=0: goto main rem rem If the life meter gets down to zero, go to the eog subroutine, which is what displays the rem skull and crossbones sprite and ends the game. rem if d>18 then d=d-1:goto skipd if w=0 then goto eog bank2 skipd rem rem Reposition the player sprite during this loop, so he falls down. rem player0y=d drawscreen rem rem This will be a continuous loop until the Z Timer counts down from 100 to 1, which causes rem the jump back to main. rem goto death gotit rem ------------------------------ rem PLAYER GRABS TREASURE rem ------------------------------ rem rem Redefine Player Sprite holding on to a treasure. rem o=1 player0: %01000100 %00111000 %01010000 %00111100 %00010100 %00001110 %00010001 %00001110 %00000000 end if d>18 then d=d-1 player0y=d player2: %00000000 end rem rem This is the sound that plays while the player is falling down the screen with a treasure. rem AUDF0=d:AUDC0=14:AUDV0=10:AUDV1=0 rem drawscreen rem rem As long as d>19, this loop will continue. rem rem Once the player reaches the bottom of the screen, the following happens: rem Treasure location is reset (i) rem Treasure Counter is incremented (v) rem death flag reset (o) - used so u don't die if you hit a missile when you're falling to the ground with the treasure rem H is reset (jumping) rem if d<20 then i=i-30 : v=v+1 : o=0: h=0 : goto movement else goto gotit bank 2 eog rem ------------------ rem END OF GAME rem ------------------ rem rem rem R is the counter for how long the death sprite sequence takes rem once it reaches zero, reset all audio parameters in preparation for the title screen to appear again. rem if r<1 then AUDV1=0:AUDV0=0:AUDC0=10:AUDC1=8:beatPointer=$FF:beatTimer=0:musicPointer=$FF:musicTimer=0:goto songinit bank1 if r>129 then AUDF1=y:AUDC1=y:AUDV1=9 else AUDV1=0 r=r-1 rem rem -------------------------- rem Death Sprite rem -------------------------- rem rem COLUP0=y end missile0x=0:missile0y=0 player0: %11111110 %10010010 %00111000 %00010000 %00000000 end drawscreen y=y+1 goto eog bank 3 title rem -------------------------- rem TITLE SCREEN rem -------------------------- rem rem Set Player0 Missile to One Pixel rem NUSIZ0=$30 NewNUSIZ=$35 NUSIZ3=$00 NUSIZ4=$05 NUSIZ5=$00 rem rem COLUP0=46 rem rem set sprites to move behind playfield (05) rem CTRLPF=$31 rem rem Since I'm using player0 for both the title sprite and the actualy player, and the player sprite rem is reflected back and forth during the game, I want to make sure that the title doesn't show rem up backwards - setting reflection to 0. rem REFP0=0 rem COLUP0=62 NewCOLUP1=62 COLUP2=206 COLUP3=206 COLUP4=62 COLUP5=206 rem rem Set Color of Playfield to red rem COLUPF=66 rem rem Reset location of ball, which will otherwise appear on the title screen after you die. rem rem ballx=0:bally=0 rem rem Draw Playfield rem pfheight=1 playfield: XXXXXXXXXXXXXXXX X.X.X.X.X.X.X.X. XXXXXXXXXXXXXXXX X............... X............... X.....XX........ X....X..X....... X.....XX........ X............... X............... X............... X........X.X.... X........XXX.... XXXXXXXXXX.XXX.. X.X.X.X.XXXX.X.. XXXXXXXXXX.XXX.. X........XXX.... X........X.X.... X........XXX.... X........X.X.... X........X.X.... X............... X............... X.....XXX....... X.....XXXX...... X.....XXX....... X.....XXX....... X......X...X.... X......X.XX..... X....XXXX....... X...X..X........ X...X..X........ X...X..X...X.... X....X.X.XX..XXX X......XX....X.X X.....X......XXX X....X.......... X...X........... X............... X............... X............... XXXXXXXXXXXXXXXX X.X.X.X.X.X.X.X. XXXXXXXXXXXXXXXX end if v<48 then goto chgnxt if v>47 then goto chgspr chgnxt rem rem Draw 'Jumper' Title Sprite rem player0: %00000000 %00000000 %11000011 %11000111 %11111110 %11111110 %11000011 %11111111 %01111110 %00000000 %01111111 %11111111 %11000000 %11111000 %11000000 %11111111 %01111111 %00000000 %11000000 %11000000 %11111110 %11111111 %11000011 %11111111 %11111110 %00000000 %11000011 %11000011 %11000011 %11011011 %11100111 %11000011 %00000000 %01111110 %11111111 %11100111 %11000011 %11000011 %11100111 %00000000 %01111110 %11111111 %11000111 %00000011 %00000011 %00000111 end goto chgskip chgspr player0: %01000001 %00100010 %00010100 %00001000 %00001000 %00111110 %01001001 %01011101 end chgskip if v>47 then goto jmpmove rem rem Position the 'Jumper' Title Sprite in the middle of the screen rem player0x=76:player0y=77 jmpback rem rem If button is pressed, or reset switch is pressed, start the game. rem if joy0fire || switchreset then goto init bank1 rem rem Set Player0Missile to 8 Pixels, set Player0 Sprite to Quad Width. rem This is for displaying the level number 'score', which is blank rem when you first power up the game, and stays blank if you die on level 1. rem rem NUSIZ0=$37 rem rem Display Level Number based on number of treasures collected rem player4: %00111000 %00100000 %00100000 %00100000 end player1: %00010000 %00010000 %00010000 %00111000 end if a<=1 then gosub 3num1 if a=2 then gosub 3num2 if a=3 then gosub 3num3 if a=4 then gosub 3num4 if a=5 then gosub 3num5 if a=6 then gosub 3num6 if a=7 then gosub 3num7 if a=8 then gosub 3num8 if a=9 then gosub 3num9 if a=10 then gosub 3num10 if a=11 then gosub 3num11 if a=12 then gosub 3num12 if v=0 then gosub 5num0:gosub 2num0 if v=1 then gosub 5num0:gosub 2num1 if v=2 then gosub 5num0:gosub 2num2 if v=3 then gosub 5num0:gosub 2num3 if v=4 then gosub 5num0:gosub 2num4 if v=5 then gosub 5num0:gosub 2num5 if v=6 then gosub 5num0:gosub 2num6 if v=7 then gosub 5num0:gosub 2num7 if v=8 then gosub 5num0:gosub 2num8 if v=9 then gosub 5num0:gosub 2num9 if v=10 then gosub 5num1:gosub 2num0 if v=11 then gosub 5num1:gosub 2num1 if v=12 then gosub 5num1:gosub 2num2 if v=13 then gosub 5num1:gosub 2num3 if v=14 then gosub 5num1:gosub 2num4 if v=15 then gosub 5num1:gosub 2num5 if v=16 then gosub 5num1:gosub 2num6 if v=17 then gosub 5num1:gosub 2num7 if v=18 then gosub 5num1:gosub 2num8 if v=19 then gosub 5num1:gosub 2num9 if v=20 then gosub 5num2:gosub 2num0 if v=21 then gosub 5num2:gosub 2num1 if v=22 then gosub 5num2:gosub 2num2 if v=23 then gosub 5num2:gosub 2num3 if v=24 then gosub 5num2:gosub 2num4 if v=25 then gosub 5num2:gosub 2num5 if v=26 then gosub 5num2:gosub 2num6 if v=27 then gosub 5num2:gosub 2num7 if v=28 then gosub 5num2:gosub 2num8 if v=29 then gosub 5num2:gosub 2num9 if v=30 then gosub 5num3:gosub 2num0 if v=31 then gosub 5num3:gosub 2num1 if v=32 then gosub 5num3:gosub 2num2 if v=33 then gosub 5num3:gosub 2num3 if v=34 then gosub 5num3:gosub 2num4 if v=35 then gosub 5num3:gosub 2num5 if v=36 then gosub 5num3:gosub 2num6 if v=37 then gosub 5num3:gosub 2num7 if v=38 then gosub 5num3:gosub 2num8 if v=39 then gosub 5num3:gosub 2num9 if v=40 then gosub 5num4:gosub 2num0 if v=41 then gosub 5num4:gosub 2num1 if v=42 then gosub 5num4:gosub 2num2 if v=43 then gosub 5num4:gosub 2num3 if v=44 then gosub 5num4:gosub 2num4 if v=45 then gosub 5num4:gosub 2num5 if v=46 then gosub 5num4:gosub 2num6 if v=47 then gosub 5num4:gosub 2num7 if v=48 then gosub 5num4:gosub 2num8 rem rem Position Level/Treasure counter sprites at the bottom middle of the screen. rem missile0x=23:missile0y=75 ballx=0:bally=0 missile1x=23:missile1y=47 player1x=25:player1y=52 player4x=25:player4y=80 player3x=28:player3y=72 player5x=28:player5y=44 player2x=32:player2y=44 drawscreen music rem rem ------------------ rem Intro Song Routine rem ------------------ rem if beatTimer = 0 then gosub changeBeatNote beatTimer = beatTimer - 1 if musicTimer = 0 then gosub changeMusicNote musicTimer = musicTimer - 1 rem return goto title changeBeatNote beatPointer = beatPointer + 1 AUDF1 = beatData[beatPointer] tempaudv = 4 if beatData[beatPointer] = $FF then tempaudv = 0 AUDV1 = tempaudv beatPointer = beatPointer + 1 beatTimer = beatData[beatPointer] rem value is (2 * #_OF_NOTES) - 1 if beatPointer > 226 then beatPointer = #-1 return changeMusicNote musicPointer = musicPointer + 1 AUDF0 = musicData[musicPointer] tempaudv = 8 if musicData[musicPointer] = $FF then tempaudv = 0 AUDV0 = tempaudv musicPointer = musicPointer + 1 musicTimer = musicData[musicPointer] rem value is (2 * #_OF_NOTES) - 1 if musicPointer > 226 then musicPointer = #-1 return data musicData 7,4,-1,6 11,4,-1,7 12,4,-1,7 13,4,-1,7 14,4,-1,7 13,4,-1,7 12,4,-1,7 11,4,-1,7 7,4,-1,6 11,4,-1,7 12,4,-1,7 13,4,-1,7 14,4,-1,7 13,4,-1,7 12,4,-1,7 11,4,-1,7 8,4,-1,6 17,4,-1,7 16,4,-1,7 15,4,-1,7 14,4,-1,7 13,4,-1,7 12,4,-1,7 9,4,-1,7 8,4,-1,6 17,4,-1,7 16,4,-1,7 15,4,-1,7 14,4,-1,7 13,4,-1,7 12,4,-1,7 9,4,-1,7 10,4,-1,6 10,4,-1,7 10,4,-1,8 11,4,-1,6 11,4,-1,7 11,4,-1,8 12,4,-1,6 12,4,-1,7 12,4,-1,8 13,4,-1,6 13,4,-1,7 13,4,-1,8 14,4,-1,6 14,4,-1,7 14,4,-1,8 15,4,-1,6 15,4,-1,7 15,4,-1,8 16,4,-1,6 16,4,-1,7 16,4,-1,8 17,4,-1,6 17,4,-1,7 17,4,-1,8 17,4,-1,8 17,4,-1,8 end data beatData 20,4,-1,6 25,4,-1,7 30,4,-1,7 35,4,-1,7 40,4,-1,7 45,4,-1,7 50,4,-1,7 55,4,-1,7 20,4,-1,6 25,4,-1,7 30,4,-1,7 35,4,-1,7 40,4,-1,7 45,4,-1,7 50,4,-1,7 55,4,-1,7 20,4,-1,6 25,4,-1,7 30,4,-1,7 35,4,-1,7 40,4,-1,7 45,4,-1,7 50,4,-1,7 55,4,-1,7 20,4,-1,6 25,4,-1,7 30,4,-1,7 35,4,-1,7 40,4,-1,7 45,4,-1,7 50,4,-1,7 55,4,-1,7 20,4,-1,6 20,4,-1,7 20,4,-1,8 25,4,-1,6 25,4,-1,7 25,4,-1,8 30,4,-1,6 30,4,-1,7 30,4,-1,8 35,4,-1,6 35,4,-1,7 35,4,-1,8 40,4,-1,6 40,4,-1,7 40,4,-1,8 45,4,-1,6 45,4,-1,7 45,4,-1,8 50,4,-1,6 50,4,-1,7 50,4,-1,8 55,4,-1,6 55,4,-1,7 55,4,-1,8 55,4,-1,8 55,4,-1,8 end goto title jmpmove s=s+1 if s=2 then y=y+1:s=0 player0y=y:player0x=76 if y<35 && collision(player0,playfield) then y=35 if y>44 && collision(player0,playfield) then y=35 goto jmpback rem rem ------------------------------ rem Define Number Sprites rem ------------------------------ rem rem These are used for displaying the level number score at the end of the game. rem 3num12 player3: %01011100 %01010000 %01011100 %01000100 %01011100 end return 3num11 player3: %00101000 %00101000 %00101000 %00101000 %00101000 end return 3num10 player3: %01011100 %01010100 %01010100 %01010100 %01011100 end return 3num0 player3: %00111000 %00101000 %00101000 %00101000 %00111000 end return 3num9 player3: %00111000 %00001000 %00111000 %00101000 %00111000 end return 3num8 player3: %00111000 %00101000 %00111000 %00101000 %00111000 end return 3num7 player3: %00100000 %00100000 %00010000 %00001000 %00111000 end return 3num6 player3: %00111000 %00101000 %00111000 %00100000 %00111000 end return 3num5 player3: %00111000 %00001000 %00111000 %00100000 %00111000 end return 3num4 player3: %00001000 %00001000 %00111000 %00101000 %00101000 end return 3num3 player3: %00111000 %00001000 %00011000 %00001000 %00111000 end return 3num2 player3: %00111000 %00100000 %00111000 %00001000 %00111000 end return 3num1 player3: %00111000 %00010000 %00010000 %00110000 %00010000 end return rem ----------Player5-------------- 5num0 player5: %00111000 %00101000 %00101000 %00101000 %00111000 end return 5num9 player5: %00111000 %00001000 %00111000 %00101000 %00111000 end return 5num8 player5: %00111000 %00101000 %00111000 %00101000 %00111000 end return 5num7 player5: %00100000 %00100000 %00010000 %00001000 %00111000 end return 5num6 player5: %00111000 %00101000 %00111000 %00100000 %00111000 end return 5num5 player5: %00111000 %00001000 %00111000 %00100000 %00111000 end return 5num4 player5: %00001000 %00001000 %00111000 %00101000 %00101000 end return 5num3 player5: %00111000 %00001000 %00011000 %00001000 %00111000 end return 5num2 player5: %00111000 %00100000 %00111000 %00001000 %00111000 end return 5num1 player5: %00111000 %00010000 %00010000 %00110000 %00010000 end return rem ----------Player0-------------- 2num0 player2: %00111000 %00101000 %00101000 %00101000 %00111000 end return 2num9 player2: %00111000 %00001000 %00111000 %00101000 %00111000 end return 2num8 player2: %00111000 %00101000 %00111000 %00101000 %00111000 end return 2num7 player2: %00100000 %00100000 %00010000 %00001000 %00111000 end return 2num6 player2: %00111000 %00101000 %00111000 %00100000 %00111000 end return 2num5 player2: %00111000 %00001000 %00111000 %00100000 %00111000 end return 2num4 player2: %00001000 %00001000 %00111000 %00101000 %00101000 end return 2num3 player2: %00111000 %00001000 %00011000 %00001000 %00111000 end return 2num2 player2: %00111000 %00100000 %00111000 %00001000 %00111000 end return 2num1 player2: %00111000 %00010000 %00010000 %00110000 %00010000 end return