;=================================================================== ;BLASTOPIA (C) 2018 THE NEW DIMENSION ;PROGRAMMING, GRAPHICS, SFX AND MUSIC BY RICHARD BAYLISS ;http://tnd64.unikat.sk ;=================================================================== SYSTEM !byte 0 ;System check PAL/NTSC NTSCTIMER !byte 0 ;If NTSC, time music GAMEMULTICOLOUR1 !byte $0b ;Selected multicolour according to level GAMEMULTICOLOUR2 !byte $03 ;Selected second multicolour according to level EXPLODECOLOURPOINTER !byte 0 ANIMDELAY !byte 0 ;Delay pointer for animating sprites ANIMPOINTER !byte 0 ;Anim pointer for actual sprite animation ALIENSCORE !byte 5 ;Pointer for alien score addition PLAYEREXPLODEANIMDELAY !byte 0 PLAYEREXPLODEPOINTER !byte 0 PADENABLED !byte 0 FIREBUTTON !byte 0 LEVELPOINTER !byte 0 INVULNERABILITYTIME !byte 0 ;In game properties PLAYERDEAD !byte 0 ;Pointer to check if player is dead or not ALIENTYPE1 !BYTE 0 ;Stored frames for aline animation ALIENTYPE2 !BYTE 0 ALIENTYPE3 !BYTE 0 ALIENTYPE4 !BYTE 0 ALIENTYPE5 !BYTE 0 ALIENTYPE6 !BYTE 0 ALIENTYPE7 !BYTE 0 ALIENTYPE8 !BYTE 0 ALIENTYPE9 !BYTE 0 ALIENTYPE10 !BYTE 0 ALIENTYPE11 !BYTE 0 ALIENTYPE12 !BYTE 0 ALIENTYPE13 !BYTE 0 ALIENTYPE14 !BYTE 0 ALIENTYPE15 !BYTE 0 ALIENTYPE16 !BYTE 0 ALIENTYPE17 !BYTE 0 ALIENTYPE18 !BYTE 0 ALIENTYPE19 !BYTE 0 ALIENTYPE20 !BYTE 0 ALIENTYPE21 !BYTE 0 ALIENTYPE22 !BYTE 0 ALIENTYPE23 !BYTE 0 ALIENTYPE24 !BYTE 0 PLAYERALIVETYPE !byte 0 BULLETTYPE !BYTE 0 CAMELTYPE !BYTE 0 ;Animation frame for camel LASTALIENPOSX !byte 0 ;Last X position of destroyed alien LASTALIENPOSY !byte 0 ;Last Y position of destroyed alien LAZERTIME !byte 0 ;Pointer for setting the lazer time LAZERON !byte 0 ;Pointer to detect if lazer is on or off ALIENHITCOUNT !byte 0 ;Alien hit counter (Amount of aliens destroyed) ;Alien properties AlienPropertiesStart ;For the loop (clearing alien properties) ALIEN1DEAD !byte 0 ;Pointer to indicate if is dead or not ALIEN1WAITTIME !byte 0;Pointer to indicate delay before spawning new alien ALIEN1SPAWNED !byte 0 ;Pointer to check if alien is spawned or not ALIEN1EXPLODEDELAY !byte 0 ;Alien explosion animation delay ALIEN1EXPLODEPOINTER !byte 0 ;Alien explosion animation pointer ;(The next 4 set of alien pointers are the same but for different aliens) ALIEN2DEAD !byte 0 ALIEN2WAITTIME !byte 0 ALIEN2SPAWNED !byte 0 ALIEN2EXPLODEDELAY !byte 0 ALIEN2EXPLODEPOINTER !byte 0 ALIEN3DEAD !byte 0 ALIEN3WAITTIME !byte 0 ALIEN3SPAWNED !byte 0 ALIEN3EXPLODEDELAY !byte 0 ALIEN3EXPLODEPOINTER !byte 0 ALIEN4DEAD !byte 0 ALIEN4WAITTIME !byte 0 ALIEN4SPAWNED !byte 0 ALIEN4EXPLODEDELAY !byte 0 ALIEN4EXPLODEPOINTER !byte 0 ALIEN5DEAD !byte 0 ALIEN5SPAWNED !byte 0 ALIEN5WAITTIME !byte 0 ALIEN5EXPLODEDELAY !byte 0 ALIEN5EXPLODEPOINTER !byte 0 AlienPropertiesEnd ALIEN1OFFSET !byte 0 ;Pointers to indicate if alien is offset or not ALIEN2OFFSET !byte 0 ALIEN3OFFSET !byte 0 ALIEN4OFFSET !byte 0 ALIEN5OFFSET !byte 0 PADANIMDELAY !byte 0 PADANIMPOINTER !byte 0 FormationTablePointer !byte 0 ;Formation select control pointer ALIENANIMSTORE !byte 0 ;Global alien animation frame pointer ALIENCOLOURSTORE !byte 0 ;Global alien colour pointer PLAYERFLASHPOINTER !byte 0 INVULNERABLECOLOUR !byte 0 FLASHCOLOURTABLE !byte $09,$0b,$0c,$08,$0f,$07,$01,$07,$0f,$08,$0c,$0b,$09 FLASHCOLOURTABLEEND ;Starting position table for each sprite STARTPOSITION !byte $30,$80 ;Player X/Y !byte $f0,$f0 ;Bullet X/Y !byte $00,$00 ;Alien X-Y (For all aliens) !byte $00,$00 !byte $00,$00 !byte $00,$00 !byte $00,$00 !byte $00,$00 ;Camel X/Y ;Software sprite positions to store to OBJPOS !byte 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 ;Collision tables to store to SHIPCOLLISION !byte 0,0,0,0 BULLETCOLLISION !byte 0,0,0,0 ;Low/Hi byte table representing the order of the alien ;type to place for animation ;Table consisting of low-byte pointers for all alien types ANIMTYPELO !byte ALIENTYPE1,>ALIENTYPE2,>ALIENTYPE3,>ALIENTYPE4 !byte >ALIENTYPE5,>ALIENTYPE6,>ALIENTYPE7,>ALIENTYPE8 !byte >ALIENTYPE9,>ALIENTYPE10,>ALIENTYPE11,>ALIENTYPE12 !byte >ALIENTYPE13,>ALIENTYPE14,>ALIENTYPE15,>ALIENTYPE16 !byte >ALIENTYPE17,>ALIENTYPE18,>ALIENTYPE19,>ALIENTYPE20 !byte >ALIENTYPE21,>ALIENTYPE22,>ALIENTYPE23,>ALIENTYPE24 ;LO-HI BYTE tables, indicating the alien ;formation X read table. ;Table consisting of low-byte pointers for Alien pos X-Formation FORMXLO !byte f01x,>f02x,>f03x,>f04x,>f05x,>f06x !byte >f07x,>f08x,>f09x,>f10x,>f11x,>f12x !byte >f13x,>f14x,>f15x,>f16x,>f17x,>f18x !byte >f19x,>f20x,>f21x,>f22x,>f23x,>f24x ;LO-HI BYTE tables, indicating the alien ;formation Y read table. ;Table consisting of low-byte pointers for Alien pos Y-Formation FORMYLO !byte f01y,>f02y,>f03y,>f04y,>f05y,>f06y !byte >f07y,>f08y,>f09y,>f10y,>f11y,>f12y !byte >f13y,>f14y,>f15y,>f16y,>f17y,>f18y !byte >f19y,>f20y,>f21y,>f22y,>f23y,>f24y ;Colour table read position also ;Table consisting of lo-byte pointers for sprite colours ANIMCOLLO !byte ENEMY1COLOUR,>ENEMY2COLOUR,>ENEMY3COLOUR,>ENEMY4COLOUR !byte >ENEMY5COLOUR,>ENEMY6COLOUR,>ENEMY7COLOUR,>ENEMY8COLOUR !byte >ENEMY9COLOUR,>ENEMY10COLOUR,>ENEMY11COLOUR,>ENEMY12COLOUR !byte >ENEMY13COLOUR,>ENEMY14COLOUR,>ENEMY15COLOUR,>ENEMY16COLOUR !byte >ENEMY17COLOUR,>ENEMY18COLOUR,>ENEMY19COLOUR,>ENEMY20COLOUR !byte >ENEMY21COLOUR,>ENEMY22COLOUR,>ENEMY23COLOUR,>ENEMY24COLOUR ;Table conisting of lo-byte pointers for the scoring value for each ;alien according to speed. ALIENSCORETABLE !byte 1,1,1,1 !byte 1,1,1,1 !byte 2,2,2,2 !byte 2,2,2,2 !byte 3,3,3,3 !byte 5,5,5,5,5 ;Camel Quota digit tables, for setting values ;of the number of camels to be rescued according to ;level. The idea is to increase the level difficulty ;by increasing the amount of camels to pick up. ;Final level is difficult enough, so make max of 10 ;to be picked. QUOTADIGITLEFT !byte 240 ;1 (10) !byte 240 ;1 (12) !byte 240 ;1 (15) !byte 240 ;1 (16) !byte 240 ;1 (15) !byte 240 ;1 (17) !byte 240 ;1 (14) !byte 240 ;1 (10) QUOTADIGITRIGHT !byte 239 ;0 (10) - level 1 !byte 241 ;2 (12) - level 2 !byte 244 ;5 (15) - level 3 !byte 245 ;6 (16) - level 4 !byte 244 ;5 (15) - level 5 !byte 246 ;7 (17) - level 6 !byte 243 ;4 (14) - level 7 !byte 239 ;0 (10) - level 8 ;Sprite Animation tables / pointers PLAYERFRAME !byte $80,$81,$82,$83 ;Player alive animation PLAYERCOLOUR !byte $03 ;Default colour for player 1 BULLETFRAME !byte $84 ;Only 1 frame for the bullet frame BULLETCOLOUR !byte $07 ;Default colour for player bullet EXPLODEFRAME !byte $85,$86,$87,$88,$89,$8a,$8b,$8b EXPLODECOLOUR !byte $07 ;Sprite animation table / pointers for enemies ;Enemy 1 - The purple alien ships ENEMY1FRAME !byte $8c,$8d,$8e,$8f ENEMY1COLOUR !byte $04 ;Purple ENEMY1SCORE !byte 1 ;1x100 points ;Enemy 2 - Circular Saucer ENEMY2FRAME !byte $90,$91,$92,$93 ENEMY2COLOUR !byte $0d ;Lt Green ENEMY2SCORE !byte 1 ;1x100 points ;ENEMY 3 - Blue doggy alien ENEMY3FRAME !byte $94,$95,$96,$97 ENEMY3COLOUR !byte $0e ;Lt Blue ENEMY3SCORE !byte 1 ;1x100 points ;ENEMY 4 - The green alien ships ENEMY4FRAME !byte $98,$99,$9a,$9b ENEMY4COLOUR !byte $05 ;Green ENEMY4SCORE !byte 1 ;1x100 points ;ENEMY 5 - Yellow alien ships ENEMY5FRAME !byte $9c,$9d,$9e,$9f ENEMY5COLOUR !byte $07 ;Yellow ENEMY5SCORE !byte 2 ;2x100 points ;ENEMY 6 - Evil eye ENEMY6FRAME !byte $a0,$a1,$a2,$a3 ENEMY6COLOUR !byte $0b ENEMY6SCORE !byte 2 ;2x100 points ;ENEMY 7 - Triangular Ships ENEMY7FRAME !byte $a4,$a5,$a6,$a7 ENEMY7COLOUR !byte $03 ;Cyan ENEMY7SCORE !byte 2 ;2x100 points ;ENEMY 8 - Silver robot droids ENEMY8FRAME !byte $a8,$a9,$aa,$ab ENEMY8COLOUR !byte $0f ;Light grey ENEMY8SCORE !byte 2 ;2x100 points ;ENEMY 9 - X-Ship ENEMY9FRAME !byte $ac,$ad,$ae,$af ENEMY9COLOUR !byte $0e ;Light blue ENEMY9SCORE !byte 3 ;3x100 points ;ENEMY 10 - Hyper Spinner ENEMY10FRAME !byte $b0,$b1,$b2,$b3 ENEMY10COLOUR !byte $03 ;Cyan ENEMY10SCORE !byte 3 ;3x100 points ;ENEMY 11 - Invadar ENEMY11FRAME !byte $b4,$b5,$b6,$b7 ENEMY11COLOUR !byte $0d ;Lt Green ENEMY11SCORE !byte 3 ;3x100 points ;ENEMY 12 - Cyber spinner claw ENEMY12FRAME !byte $b8,$b9,$ba,$bb ENEMY12COLOUR !byte $0e ;Lt Blue ENEMY12SCORE !byte 3 ;3x100 points ;ENEMY 13 - Critter ENEMY13FRAME !byte $bc,$bd,$be,$bf ENEMY13COLOUR !byte $0a ;Lt Red ENEMY13SCORE !byte 5 ;5x100 points ;ENEMY 14 - Drone ENEMY14FRAME !byte $c0,$c1,$c2,$c3 ENEMY14COLOUR !byte $0d ;Lt Green ENEMY14SCORE !byte 5 ;5x100 points ;ENEMY 15 - X-Ship II ENEMY15FRAME !byte $c4,$c5,$c6,$c7 ENEMY15COLOUR !byte $0a ;Pink ENEMY15SCORE !byte 5 ;5x100 points ;ENEMY 16 - EYE Alien ENEMY16FRAME !byte $c8,$c9,$ca,$cb ENEMY16COLOUR !byte $0e ;Lt Blue ENEMY16SCORE !byte 5 ;5x100 points ;ENEMY 17 - Dymoid ENEMY17FRAME !byte $cc,$cd,$ce,$cf ENEMY17COLOUR !byte $0d ;Lt green ENEMY17SCORE !byte 7 ;7x100 points ;ENEMY 18 - Rubber ball ENEMY18FRAME !byte $d0,$d1,$d2,$d3 ENEMY18COLOUR !byte $04 ;Purple ENEMY18SCORE !byte 7 ;7x100 points ;ENEMY 19 - Metallic droid ENEMY19FRAME !byte $d4,$d5,$d6,$d7 ENEMY19COLOUR !byte $0c ;Med Grey ENEMY19SCORE !byte 7 ;7x100 points ;ENEMY 20 - Inflator ENEMY20FRAME !byte $d8,$d9,$da,$db ENEMY20COLOUR !byte $0a ;Lt red ENEMY20SCORE !byte 8 ;8x100 points ;ENEMY 21 - Washing Machine ENEMY21FRAME !byte $dc,$dd,$de,$df ENEMY21COLOUR !byte $0e ;Lt blue ENEMY21SCORE !byte 8 ;8x100 points ;ENEMY 22 - Square illuminator ENEMY22FRAME !byte $e0,$e1,$e2,$e3 ENEMY22COLOUR !byte $0e ;Lt Blue ENEMY22SCORE !byte 8 ;8x100 points ;ENEMY 23 - Jetworm ENEMY23FRAME !byte $e4,$e5,$e6,$e7 ENEMY23COLOUR !byte $0a ;Lt Red ENEMY23SCORE !byte 8 ;8x100 points ;ENEMY 24 - Eye of Horus ENEMY24FRAME !byte $e8,$e9,$ea,$eb ENEMY24COLOUR !byte $08 ;Orange ENEMY24SCORE !byte 8 ;8x100 points ;OBJECT TO RESCUE - CAMEL CAMELFRAME !byte $ec,$ed,$ee,$ef CAMELCOLOUR !byte $07 ;Yellow ;Backup 8 bytes for lazer character LazerBackup !byte 0,0,0,0,0,0,0,0 ;Panel characters (Which should be masked according) ;to the type of character that the game should refer ;to. REFER TO SCOREPANEL.CTM to see which chars are ;being used for the score panel SCORE !byte 239,239,239,239,239,239 LIVES !byte 242 SHIELD !byte 248,248 QUOTAPICKED !byte 239,239 CAMELQUOTA !byte 239,239 LEVEL !byte 240 ;In game sound effects: ;Shooting sound effects table, for player firing SHOOTSFXTABLE !byte $0e,$08,$08,$c6,$81,$ae,$11,$c5,$11,$c3,$11,$c1,$00 ;Explosion SFX for alien kill ALIENEXPLODESFXTABLE !byte $0C,$00,$08,$DC,$81,$A8,$41,$AC,$AA,$A8,$41,$A7,$81,$cf,$00 ;Explosion SFX for player dead PLAYERDIESFXTABLE !BYTE $0A,$0A,$08,$A3,$81,$A0,$41,$AC,$41,$AA,$41,$aa,$81,$A0,$B0,$B6,$C0,$C6 !BYTE $A3,$A0,$B0,$B6,$C0,$C6,$A3,$A0,$B0,$B6,$C0,$C6,$A3,$A0,$B0,$B6 !BYTE $C0,$C6,$00 ;Explosion SFX for camel picked up CAMELPICKEDSFXTABLE !BYTE $0A,$AA,$00,$B8,$21,$Bc,$Bd,$Be,$Bf,$c0,$c1,$c2,$c3,$c4,0 ;Game over SFX (DING effect) GAMEOVERSFXTABLE !byte $0a,$00,$08,$41,$b5,$41,$b6,$41,$b7,$41,$b8,$41,$b9,$41,$ba,$bb,$bc,$bc,$bc,$bc !byte $bc,$bc,$bc,$bc,$bc,$bc,0 ;Level complete sfx (Screen explosion) BONUSSFXTABLE !byte $0A,$AA,$00,$B0,$81,$BC,$BB,$BA,$B9,$B8,$B7,$B6,$B5,$B4,$B3,$B2 !byte $B1,$B0,$AF,$AE,$AD,$AC,$AB,$AA,$A9,$A8,$A7,$A6,$A5 !byte $A4,$A3,$A2,$A1,$A2,$A3,$A4,$A5,$A6,$A7,$A8,0 ;Extra lives sfx EXTRALIFESFXTABLE !BYTE $0A,$AA,$00,$B0,$11,$B0,$B2,$B2,$B4,$B4,$B6,$B6,$B8,$B8,$BA,$BA !BYTE $BC,$BC,$00 ;Land SFX table LANDSFXTABLE !byte $0e,$08,$08,$c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41 !byte $c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41 !byte $c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41 !byte $c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41 !byte $c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41 !byte $c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41 !byte $c6,$41,$c5,$41,$c4,$41,$c3,$41,$c2,$41,$c1,$41,0 ;Char values for the GAME OVER text GAMEOVERCHARS !byte 198,192,204,196,254,206,213,196,209 ;Level compression map low/hi-byte tables. There ;are 8 different levels, so there should be 8 ;different maps that should decrunch. MAPDECRUNCHLO !byte LEVEL1MAPEND !byte >LEVEL2MAPEND !byte >LEVEL3MAPEND !byte >LEVEL4MAPEND !byte >LEVEL5MAPEND !byte >LEVEL6MAPEND !byte >LEVEL7MAPEND !byte >LEVEL8MAPEND ;Level multicolour setup table. This colour table is set ;up in order of level. ;Background Multicolour 1 ($D022) LEVELMCOLTBL1 !byte $0b,$0b,$09,$06,$02,$08,$0e,$09 ;Background Multicolour 2 ($D023) LEVELMCOLTBL2 !byte $03,$0f,$05,$0e,$0a,$0a,$03,$08 ;Background Char colour ($D800-$DB20) LEVELMCOLTBL3 !byte $09,$09,$09,$0b,$0f,$0f,$09,$0f ;Exploding colour table EXPLODECOLOURTABLE !byte $09,$0b,$08,$0c,$0a,$0f,$07,$01,$01,$01 !byte $01,$07,$0f,$0a,$0c,$08,$0b,$09,$00 EXPLODECOLOURTABLEEND ;Picking out aliens and their formation, according ;to level. ALIENSELECTPOINTER !byte 0 ALIENSELECTTABLE !byte 0,0,0,0,0,0,0,0 !byte 0,0,0,0,0,0,0,0 !byte 0,0,0,0,0,0,0,0 ALIENSELECTTABLEEND ;Picking out aliens and their formation, according ;to level. LEVEL1SELECTTABLE !byte 01,04,02,05,03,04,06,04 !byte 00,04,06,03,05,02,04,01 !byte 05,03,04,01,04,03,02,01 LEVEL2SELECTTABLE !byte 05,01,04,06,02,07,04,01 !byte 08,01,04,06,02,04,05,08 !byte 07,00,01,04,00,03,00,01 LEVEL3SELECTTABLE !byte 04,01,05,03,10,09,04,06 !byte 07,04,00,02,12,06,05,10 !byte 03,07,11,01,12,10,11,03 LEVEL4SELECTTABLE !byte 07,00,05,03,06,02,11,12 !byte 10,11,04,13,06,14,11,13 !byte 10,04,06,03,13,10,08,08 LEVEL5SELECTTABLE !byte 00,02,04,16,15,18,07,02 !byte 11,12,08,04,07,03,09,13 !byte 05,03,11,14,06,10,07,15 LEVEL6SELECTTABLE !byte 12,16,02,08,10,17,09,18 !byte 20,18,14,09,12,16,07,19 !byte 15,04,13,07,00,03,12,20 LEVEL7SELECTTABLE !byte 10,12,14,16,18,20,22,21 !byte 11,13,15,17,19,21,23,10 !byte 14,18,12,16,19,15,20,21 LEVEL8SELECTTABLE !byte 21,20,18,23,22,18,19,17 !byte 16,22,14,23,21,20,21,20 !byte 17,20,19,21,17,23,21,20 ;Setting up the level selection table ;LO-BYTE LEVELSELECTTABLELO !byte LEVEL1SELECTTABLE !byte >LEVEL2SELECTTABLE !byte >LEVEL3SELECTTABLE !byte >LEVEL4SELECTTABLE !byte >LEVEL5SELECTTABLE !byte >LEVEL6SELECTTABLE !byte >LEVEL7SELECTTABLE !byte >LEVEL8SELECTTABLE ;Text data for title screen TitleScreenText !ct scr line1 !text " (c) 2018 the new dimension " line2 !text "programming, graphics, sfx and music by" line3 !text " richard bayliss " line4 !text " last score^ " FINALSCORE !text "000000 hi score^ " HISCORE !text "000000 " line5 !text " press fire for some serious blasting " ;Text data for level complete WellDoneText wdline1 !text " well done " wdline2 !text " level clear " GameOverText goline1 !text " game over " hiline1 !text " sorry, but not a high score! " hiline2 !text " awesome! ... a brand new hi score! " ;Exclusive for the game ending hiline3 !text " unfortunately, no hi score fore you! " hiline4 !text " you also achieved a new hi score! " ;Finally text for game complete GameCompleteText gcline1 !text " congratulations " gcline2 !text " you have rescued enough camels and " gcline3 !text " destroyed all 8 alien planets. " gcline4 !text " may we all live in peace and prosper. " gcline5 !text " press fire for a new game " ;In game land prompt (Cover Quota) LANDTEXT !text "land!" LANDTEXTEND