rem Errata rem dim foreground_color=COLUPF barfed rem Compiler options set smartbranching on set romsize 8k rem Declare constants def true = 1 def false = 0 rem NTSC Colors const c_aqua = $B8 const c_black = $00 const c_blue = $86 const c_dkgray = $06 const c_fuchsia = $58 const c_gray = $08 const c_green = $D8 const c_lime = $DE const c_ltgray = $0A const c_maroon = $52 const c_navy = $A4 const c_olive = $E8 const c_purple = $66 const c_red = $44 const c_silver = $0C const c_teal = $00 const c_white = $0E const c_yellow = $1E const c_brown = $F6 const c_dkblue = $70 const screen_height = 160 const screen_width = 192 rem Can't foreground_color=COLUPF for some reason.. dim fground_color=COLUPF dim bground_color=COLUBK rem Declare variables dim counter = a dim cooldown = b dim boolean = c dim enemyhp = d dim enemycolor = e dim enemypattern = f dim enemysize = g dim enemies = h dim enemytype = i dim nitebearhp = j dim weapondmg = k rem Define boolean variables def march=counter{4} def enemydir=boolean{2} rem Init variables score = 0 scorecolor = c_silver fground_color = c_brown bground_color = c_dkblue enemies = 8 enemyhp = 15 nitebearhp = 100 weapondmg = 1 cooldown = 10 gosub sound_stop_all bank2 playfield: .X..X.X.XXX.XXX..XX..XX..X..XX.. .XX.X.X..X..X....X.X.X..X.X.X.X. .X.XX.X..X..XX...XX..XX.XXX.XX.. .X..X.X..X..X....X.X.X..X.X.X.X. .X..X.X..X..XXX..XXX.XX.X.X.X.X. ................................ ............XX....XX............ ............XXXXXXXX............ ..........XXX.XXXX.XXX.......... .....XX....X.X.XX.X.X....XX..... ....XXXX..XXX.X..X.XXX..XXXX.... end draw_title gosub update_counters drawscreen if joy0fire then rand = counter : goto main_creation_event goto draw_title main_creation_event playfield: X.X..........................XXX XX...........................X.X XXX...........................XX XXX..........................XXX X.X..........................XXX XX...........................X.X XXX...........................XX XXX..........................XXX X.X..........................XXX XX...........................X.X XXX...........................XX XXX..........................XXX end player0: %11100000 %01100011 %01110011 %00111110 %00111100 %11011100 %10111101 %11111111 %01111110 %00100100 %10100101 %11011011 %10100101 %11011011 %01111110 %01100110 end player0x = 80 player0y = 80 ballx = 35 bally = 0 COLUPF = $0A COLUBK = $C2 boolean{0} = 0 boolean{1} = 0 enemydir = 0 gosub createenemy main_begin_step gosub update_counters if cooldown > 0 then cooldown = cooldown - 1 main_draw_event if switchreset then reboot if player0x > 29 && joy0left then player0x = player0x - 1 if player0x < 125 && joy0right then player0x = player0x + 1 if player0y > 32 && joy0up then player0y = player0y - 1 if player0y < 88 && joy0down then player0y = player0y + 1 if joy0fire && bally = 0 && cooldown = 0 then bally = player0y - 9 : ballx = player0x + 4 if bally > 1 then gosub draw_weapon if collision(ball, player1) then enemyhp = enemyhp - weapondmg: gosub draw_hit if collision(player0, player1) then gosub nitebear_col_event rem GOTCHA: enemyph will wrap around to 255 instead of being a negative number thus the OR operation.. if enemyhp < 1 || enemyhp > 128 then player1x = 0 : player1y = -1 : enemies = enemies - 1 : enemyhp = 15 : gosub createenemy else gosub move_enemy if nitebearhp < 1 then reboot score = 0 score = score + enemyhp draw_event rem if enemies > 1 then pfscroll down if enemies > 1 then if march then REFP0 = 8 : REFP1 = 8 : pfscroll down COLUP0 = $F8 COLUP1 = enemycolor NUSIZ1 = enemysize drawscreen main_end_step goto main_begin_step draw_hit if enemies > 1 && march then REFP0 = 8 : REFP1 = 8 COLUP0 = $F8 COLUP1 = c_red NUSIZ1 = enemysize drawscreen return draw_nitebearhit if march then REFP0 = 8 : REFP1 = 8 COLUP0 = c_yellow COLUP1 = enemycolor NUSIZ1 = enemysize drawscreen return update_counters counter = counter + 1 return draw_weapon bally = bally - 2 if bally < 4 then bally = 0 : ballx = 0 : return if counter{0} then goto shaft else goto hilt shaft ballx = ballx + 1 bally = bally + 2 CTRLPF = $11 ballheight = 9 return hilt ballx = ballx - 1 bally = bally - 2 CTRLPF = $21 ballheight = 1 return move_enemy rem on goto crashed game for some reason.. if enemypattern = 1 then goto pattern_fastdown if enemypattern = 2 then goto pattern_down if enemypattern = 3 then goto pattern_backforth if enemypattern = 4 then goto pattern_swoop return pattern_fastdown player1y = player1y + 2 if player1y > 160 then gosub createenemy return pattern_down player1y = player1y + 1 if player1y > 160 then gosub createenemy return pattern_backforth if enemydir then player1x = player1x - 1 else player1x = player1x + 1 if player1x > 115 then enemydir = 1 if player1x < 29 then enemydir = 0 return pattern_swoop player1y = player1y + 1 if march then player1x = player1x - 2 else player1x = player1x + 2 return nitebear_col_event if enemytype < 8 then nitebearhp = nitebearhp - 1 : gosub draw_nitebearhit : if player0y < 88 then player0y = player0y + 1 : return if enemytype = 8 then weapondmg = weapondmg + 4 : gosub createenemy : return return createenemy enemytype = (rand&7) + 1 if enemies = 1 then gosub draw_castle rem ERRATA: Wanted to use on goto but the last label reset game if enemies = 1 then goto create_boss if enemytype = 1 then goto create_spacecars if enemytype = 2 then goto create_frogsnake if enemytype = 3 then goto create_three if enemytype = 4 then goto create_four if enemytype = 5 then goto create_frogsnake if enemytype = 6 then goto create_three if enemytype = 7 then goto create_four if enemytype = 8 then goto create_powerup return create_spacecars gosub draw_spacecars player1x = (rand&63) + 32 player1y = 0 enemycolor = c_gray enemypattern = 1 enemysize = $00 return create_frogsnake gosub draw_frogsnake player1x = (rand&63) + 32 player1y = 0 enemycolor = c_green enemypattern = 2 enemysize = $00 return create_three gosub draw_wave3 player1x = (rand&63) + 32 player1y = 24 enemycolor = c_black enemypattern = 4 enemysize = $00 return create_four gosub draw_frogsnake player1x = (rand&63) + 32 player1y = 0 enemycolor = c_green enemypattern = 1 enemysize = $15 return create_boss gosub draw_boss player1x = (rand&63) + 32 player1y = 36 enemyhp = 30 enemycolor = c_fuchsia enemypattern = 3 enemysize = $35 return create_powerup gosub draw_powerup player1x = (rand&63) + 32 player1y = 24 enemyhp = 5 enemycolor = c_fuchsia enemypattern = 1 enemysize = $00 return draw_frogsnake player1: %11100000 %00100110 %00111100 %00111101 %11111110 %00100100 %01011010 %00100100 %00000000 %00000000 %00000000 %00000000 %00000000 %00000000 %00000000 %00000000 %00111110 %01100011 %11001110 %00011000 %01100110 %10111101 %10011001 %01100110 end return draw_spacecars player1: %00001001 %00000110 %00001001 %00000110 %00000110 %00001111 %00001111 %00001001 %01100000 %01100000 %11110000 %10010000 %10010000 %11110000 %01100000 %11110000 %00000110 %00001111 %00000110 %00000110 %00001001 %00001111 %00001001 %00001111 end return draw_wave3 player1: %10000000 %11010101 %01111111 %00111110 %01101100 %11010110 %10111011 %00101001 end return draw_boss player1: %11000011 %01100110 %01111110 %11111111 %11111111 %10011001 %01111110 %11111111 %00011000 %00100100 %01100110 %10011001 %10111101 %11111111 %01111110 %10100101 end return draw_powerup player1: %00000000 %00000000 %00011000 %00011000 %00011000 %00011000 %00011000 %00000000 %00111100 %01000010 %10111001 %11101101 %10100101 %10111101 %01000010 %00111100 end return draw_castle playfield: X.X.XX.XX.XX.XX..XX.XX.XX.XX.XXX XX...XXXXXXXXXXXXXXXXXXXXXX..X.X XXX...XXXXXX........XXXXXX....XX XXX..........................XXX X.X..........................XXX XX...........................X.X XXX...........................XX XXX..........................XXX X.X..........................XXX XX...........................X.X XXX...........................XX end return bank 2 sound_stop_all AUDV0=0 AUDV1=0 return otherbank