set kernel multisprite set smartbranching off set optimization size init const screenheight = 84 pfheight = 1 const pfscore=1 gosub boat dim boatspeed = a dim gamebits = b dim timer = c dim wakedelay = d dim wakeframe = e dim waketimer = f dim skierx = player0x.g dim skiery = player0y.h dim skierxaccel = i.j dim skieryaccel = k.l dim skierdirfloat = m.n dim skierdir = m dim waterfloory = o dim height = p dim tempdir = temp4 dim tempxaccel = temp5.temp6 dim skiermovedir = q dim level = r rem s is sound dim skitime = u dim staticobjectx = player2x dim staticobjecty = player2y level = 255 AUDC0 = 15 : AUDF0 = 31 : AUDC0 = 8 : AUDF0 = 31 gosub gamechange gameoverloop pfscore1=255 player0x=76 : player0y=31 gosub water1 : gosub straight AUDV0 = 0 : AUDV1 = 0 gosub resetpf timer = timer + 1 drawscreen if switchreset then goto newgame if timer > 15 && switchselect then goto gamechange goto gameoverloop resetpf if level = 0 then COLUBK = 128 : COLUPF = 142 if level = 1 then COLUBK = 176 : COLUPF = 190 if level = 2 then COLUBK = 0 : COLUPF = 2 : scorecolor = 2 if level = 3 then COLUBK = 64 : COLUPF = 78 : scorecolor = 0 return gamechange timer = 0: level = level + 1 : if level = 4 then level = 0 goto gameoverloop gameover gosub resetpf AUDV0 = 0 : AUDV1 = 0 drawscreen if switchreset then goto newgame if switchselect then goto gamechange goto gameover newgame pfscore1=255 wakedelay = 5 wakeframe = 0 skitime = 0 gamebits{0} = 0 skierdirfloat = 4.0 player1x=84 : player1y=62 : player0x=76 : player0y=31 : missile1y = 64 staticobjectx=142 : staticobjecty=25 NUSIZ2=$00 gameloop gosub resetpf gosub boat if level = 0 then gosub level0 if level = 1 then gosub level1 if level = 2 then gosub level2 if level = 3 then gosub level3 if timer{1} then staticobjecty = staticobjecty - 1 if staticobjecty = 0 then gosub resetstaticobject if timer=0 then skitime=skitime+1 if skitime>3 then skitime=0 : pfscore1=pfscore1/2 if pfscore1=0 then goto gameover if collision(player0, missile1) then score = score + 100 : gosub resettarget if collision(player0, player1) then gosub crashcheck if timer{0} && timer{1} then missile1y = missile1y - (level + 1) if missile1y = 0 then gosub resettarget if switchreset then goto newgame if switchselect then goto gamechange gosub straight rem calculate water floor height and skier height if player0x < 50 || player0x > 105 then waterfloory = 25 else waterfloory = 30 height = player0y - waterfloory rem gravity if height > 0 && height < 128 then gamebits{0} = 1 : skieryaccel = skieryaccel - 0.05 else gamebits{0} = 0 if !gamebits{0} then skiermovedir = skierdir rem bouyancy if height > 127 then skieryaccel = 0.2 if !gamebits{0} && collision(playfield, player0) then gosub jump gosub changeskiersprite gosub changeskierxaccel if joy0right then if skierdirfloat < 7 then skierdirfloat = skierdirfloat + 0.05 if joy0left then if skierdirfloat > 1 then skierdirfloat = skierdirfloat - 0.05 if player0x < 10 then player0x = 10 if player0x > 145 then player0x = 145 skierx = skierx + skierxaccel : skiery = skiery + skieryaccel rem handle wake look timer = timer + 1 : if timer > 254 then timer = 0 : wakedelay = wakedelay - 1 if wakedelay < 3 then wakedelay = 3 waketimer = waketimer + 1 : if waketimer > wakedelay then waketimer = 0 : wakeframe = wakeframe + 1 if wakeframe > 2 then wakeframe = 0 drawscreen if wakeframe=0 then gosub water1 if wakeframe=1 then gosub water2 if wakeframe=2 then gosub water3 goto gameloop crashcheck temp3 = player0y - 5 temp4 = player0y - 8 if player2y > temp3 || player2y < temp4 then return if height < 3 then goto gameover return resetstaticobject temp5 = rand : temp6 = rand staticobjectx = temp5 / 2 : staticobjecty = 64 return resettarget temp5 = rand : temp6 = rand missile1x = temp5 / 2 : missile1y = 64 return changeskiersprite tempdir = skierdir if tempdir < 5 then REFP0 = 8 else tempdir = 8 - tempdir : REFP0 = 0 if tempdir = 0 then gosub 90 if tempdir = 1 then gosub 67 if tempdir = 2 then gosub 45 if tempdir = 3 then gosub 22 if tempdir = 4 then gosub straight return changeskierxaccel tempdir = skiermovedir : tempxaccel = 0.0 if tempdir >= 5 then tempdir = 8 - tempdir if tempdir = 0 then tempxaccel = 0.4 if tempdir = 1 then tempxaccel = 1.2 if tempdir = 2 then tempxaccel = 0.65 if tempdir = 3 then tempxaccel = 0.15 if skiermovedir < 5 then skierxaccel = 0.0 - tempxaccel else skierxaccel = tempxaccel return jump if skierxaccel > 128 && player0x > 70 then skieryaccel = 0.0 - skierxaccel if skierxaccel < 128 && player0x < 70 then skieryaccel = skierxaccel return lightning temp5 = rand if temp5 < 35 then COLUBK = 4 else COLUBK = 0 return level0 gosub tree NUSIZ2=$01 return level1 gosub buoy if staticobjectx{0} then NUSIZ2=$02 else NUSIZ2=$04 return level2 gosub tree : gosub lightning return level3 gosub death if staticobjectx{0} then NUSIZ2=$03 else NUSIZ2=$06 return water1 playfield: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ...............X ..............X. ..............X. ..............X. ..............X. ..............X. .............X.. .............X.. .............X.. .............X.. ............X... ............X... ............X... ............X... ............X... ...........X.... ...........X.... ...........X.... ...........X.... ..........X..... ..........X..... ..........X..... ..........X..... .........X...... .........X...... .........X...... ........X....... ........X....... ........X....... ................ end return water2 playfield: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ..............XX .............XX. .............XX. .............XX. .............XX. .............XX. ............XX.. ............XX.. ............XX.. ............XX.. ...........XX... ...........XX... ...........XX... ...........XX... ...........XX... ..........XX.... ..........XX.... ..........XX.... ..........XX.... .........XX..... .........XX..... .........XX..... .........XX..... ........XX...... ........XX...... ........XX...... .......XX....... .......XX....... .......XX....... ................ end return water3 playfield: XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX XXXXXXXXXXXXXXXX ..............XX .............X.. .............X.. .............X.. .............X.. .............X.. ............X... ............X... ............X... ............X... ...........X.... ...........X.... ...........X.... ...........X.... ...........X.... ..........X..... ..........X..... ..........X..... ..........X..... .........X...... .........X...... .........X...... .........X...... ........X....... ........X....... ........X....... .......X........ .......X........ .......X........ ................ end return straight player0: %00010100 %00010100 %00010100 %00010100 %00001000 %00011100 %00001000 %00011100 %00011100 end return 90 player0: %00000000 %01111110 %00111111 %00010100 %00001000 %00011100 %00001000 %00011100 %00011100 end return 67 player0: %01010000 %00111100 %00011111 %00010100 %00001000 %00011100 %00001000 %00011100 %00011100 end return 45 player0: %00101000 %00010100 %00011110 %00010101 %00001000 %00011100 %00001000 %00011100 %00011100 end return 22 player0: %00010100 %00010100 %00011110 %00011110 %00001000 %00011100 %00001000 %00011100 %00011100 end return boat player1x=84 : player1y=62 player1: %01111110 %10000001 %11111111 %01111110 end return tree player2: %00011000 %00110000 %11011001 %00010110 %00100000 end return buoy if timer{4} then goto buoy2 player2: %00111000 %00010000 %00000000 %00000000 %00000000 end return buoy2 player2: %00111000 %00111000 %00010000 end return death if timer{2} then goto death2 player2: %01111110 %11111111 %11111111 %00111100 end return death2 player2: %01111110 %11100111 %11100111 %00100100 end return