;2 ;Warp Two ;ASTEROID by Tad Pole ;©2002 Reilly Beacom .NOLIST #define equ .equ #define EQU .equ #define end .end #include "ti83asm.inc" #include "tokens.inc" .LIST .org 9327h di ld hl,hi call _runIndicOff RESTART: ld ix,VARS ld (ix+0),1 ld (ix+1),0 ld (ix+2),1 ld (ix+3),47 ld (ix+4),31 ld (ix+5),1 ld (ix+6),0 ld (ix+7),0 ld (ix+8),0 ld (ix+9),0 ld hl,SHIP1 ld (SHIPSPRLOC),hl ld a,(BIGBOSS) cp 0 jp z,HOME ld (ix+3),20 HOME: call _grbufcpy_v ld hl,8e28h CLRLOOP: inc hl ld (hl),0 ld a,91h cp h jp nz,CLRLOOP ld a,28h cp l jp nz,CLRLOOP ld a,(LIVES) ld ($8e29),a ;copy big boss to buffer ld a,(BIGBOSS) cp 0 jp z,NOBIGBOSS BOSSPIC: ld hl,THEBOSSPIC ld de,grbuff+196 ld a,32 ld b,0 BOSSCPY: ld c,4 ldir dec a ld c,8 ex de,hl add hl,bc ex de,hl cp 0 jp nz,BOSSCPY NOBIGBOSS: ld a,$BF out (1),a in a,(1) xor 255 bit 6,a jp nz,PAUSE bit 7,a jp nz,EXITGAME ;check ship status ld ix,VARS ld a,(ix+10) cp 0 jp z,KEYINPUT ld a,(ix+1) cp 0 jp nz,MOVESHIP ld a,(ix+10) cp 8 jp z,GAMEOVER cp 255 jp z,TITLE cp 254 jp z,LEVELTITLE ld hl,SHIPEX1 cp 1 jp z,ECSS ld hl,SHIPEX2 cp 2 jp z,ECSS ld hl,SHIPEX3 cp 3 jp z,ECSS ld hl,SHIPEX4 cp 4 jp z,ECSS ld hl,BLANKSPR ECSS: ld (ix+1),12 inc (ix+10) ld (SHIPSPRLOC),hl jp MOVESHIP KEYINPUT: ld a,$BF out (1),a in a,(1) bit 5,a call nz,NOLAUNCH call z,LAUNCH ld a,$FE out (1),a in a,(1) bit 3,a call z,ACCELERATE ld a,$FE out (1),a in a,(1) bit 1,a call nz,NOLEFT call z,LEFT ld a,$FE out (1),a in a,(1) bit 2,a call nz,NORIGHT call z,RIGHT MOVESHIP: ld ix,VARS ld a,(ix+1) ; decrement accelerate delay if non-zero cp 0 jp z,SKIPDEC dec (ix+1) SKIPDEC: dec (ix+2) ; x ship move delay ld a,(ix+2) cp 0 jp nz,SKIPMOVSHIPX ld a,(ix+7) ; x-acceleration ld (ix+2),1 cp 0 jp z,SKIPMOVSHIPX ld (ix+2),4 cp 1 jp z,MOVSHIPX ld (ix+2),3 cp 2 jp z,MOVSHIPX ld (ix+2),2 MOVSHIPX: ld a,(ix+6) ; x-direction inc (ix+3) ; ship x cp 1 jp z,CHECKX dec (ix+3) dec (ix+3) CHECKX: ld a,(ix+3) cp 255 jp z,XZERO cp 96 jp nz,SKIPMOVSHIPX ld (ix+3),0 ;!!!!! jp SKIPMOVSHIPX XZERO: ld (ix+3),95 SKIPMOVSHIPX: dec (ix+0) ; y ship move delay ld a,(ix+0) cp 0 jp nz,CALLSHIP ld a,(ix+9) ; y-acceleration ld (ix+0),1 cp 0 jp z,CALLSHIP ld (ix+0),4 cp 1 jp z,MOVSHIPY ld (ix+0),3 cp 2 jp z,MOVSHIPY ld (ix+0),2 MOVSHIPY: ld a,(ix+8) ; y-direction inc (ix+4) ; ship y cp 1 jp z,CHECKY dec (ix+4) dec (ix+4) CHECKY: ld a,(ix+4) cp 255 jp z,YZERO cp 64 jp nz,CALLSHIP ld (ix+4),0 ;!!!!! jp CALLSHIP YZERO: ld (ix+4),63 CALLSHIP: ld hl,(SHIPSPRLOC) ld a,(ix+3) ld e,(ix+4) call drwspr ld ix,PHOTONS-4 MOVEPHOTON: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 170 jp z,ASTEROID cp 0 jp z,MOVEPHOTON push af ld a,(ix+3) cp 0 jr z,NOPHOTONDEC dec (ix+3) NOPHOTONDEC: pop af and 11101110b jp z,PY inc (ix+1) and 11110001b jp z,PY dec (ix+1) dec (ix+1) PY: ld a,(ix+0) and 10111011b jp z,PCHECKBND inc (ix+2) and 11000111b jp z,PCHECKBND dec (ix+2) dec (ix+2) PCHECKBND: ld a,(ix+1) cp 95 jp z,BNDHIT cp 0 jp z,BNDHIT ld a,(ix+2) cp 63 jp z,BNDHIT cp 0 jp z,BNDHIT CALLPHO: ld a,(ix+1) ld e,(ix+2) ld hl,PHOTON push ix call DRWSPR pop ix jp MOVEPHOTON BNDHIT: ld (ix+0),0 ld hl,(SCORE) ld bc,0 sbc hl,bc jr c,LCARRY ld (SCORE),hl LCARRY: jp MOVEPHOTON ASTEROID: BOSS0: ld ix,BOSS ld a,(ix+0) cp 0 jp z,MOVESHIP2 ld a,(ix+4) cp 0 jp z,MOVESHIP2 dec (ix+5) ld a,(ix+5) cp 0 jp nz,DRAWBOSS ld (ix+5),5 ld a,(ix+1) cp 1 jp z,BOSS2 cp 16 jp z,BOSS2 inc (ix+2) ld a,(ix+1) cp 2 jp z,BOSS2 cp 4 jp z,BOSS2 cp 8 jp z,BOSS2 dec (ix+2) dec (ix+2) BOSS2: ld a,(ix+1) cp 4 jp z,BOSS3 cp 64 jp z,BOSS3 inc (ix+3) ld a,(ix+1) cp 8 jp z,BOSS3 cp 16 jp z,BOSS3 cp 32 jp z,BOSS3 dec (ix+3) dec (ix+3) BOSS3: ld a,(ix+2) cp 80 jr z,BOSS4 cp 0 jr z,BOSS4 jr BOSS5 BOSS4: ld a,(ix+1) cp 2 jr z,BOSS42 cp 128 jr z,BOSS4128 cp 32 jr z,BOSS432 ld (ix+1),32 jr BOSS5 BOSS42: ld (ix+1),128 jr BOSS5 BOSS4128: ld (ix+1),2 jr BOSS5 BOSS432: ld (ix+1),8 BOSS5: ld a,(ix+3) cp 0 jr z,BOSS6 cp 48 jr z,BOSS6 jr DRAWBOSS BOSS6: ld a,(ix+1) cp 2 jr z,BOSS62 cp 128 jr z,BOSS6128 cp 32 jr z,BOSS632 ld (ix+1),2 jr DRAWBOSS BOSS62: ld (ix+1),8 jr DRAWBOSS BOSS6128: ld (ix+1),32 jr DRAWBOSS BOSS632: ld (ix+1),128 DRAWBOSS: push ix ld a,(ix+4) ld hl,BOSSDAMAGE1 ld bc,BOSSDAMAGE11 cp 1 jr z,DRAWBOSS2 ld hl,BOSSDAMAGE2 ld bc,BOSSDAMAGE22 cp 2 jr z,DRAWBOSS2 ld hl,BOSSDAMAGE3 ld bc,BOSSDAMAGE33 cp 3 jr z,DRAWBOSS2 ld hl,BOSSSPR1 ld bc,BOSSSPR2 DRAWBOSS2: ld a,(ix+2) ld e,(ix+3) push bc call DRWSPR pop bc pop ix ld h,b ld l,c ld a,(ix+2) add a,8 ld e,(ix+3) call DRWSPR ld ix,BOSS ld a,(ix+2) add a,15 ld d,a ld a,(ix+3) add a,15 ld e,a ld ix,VARS ld a,(ix+10) cp 0 jp nz,BCLOOP1 ld b,(ix+3) ld a,d sub b sub 21 jr nc,BCLOOP1 ld b,(ix+4) ld a,e sub b sub 20 jr nc,BCLOOP1 jp HITSHIP BCLOOP1: ld ix,PHOTONS-4 BPCLOOP: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 0 jr z,BPCLOOP cp 170 jp z,MOVESHIP2 ld b,(ix+1) ld a,d sub b sub 19 jr nc,BPCLOOP ld b,(ix+2) ld a,e sub b sub 19 jr nc,BPCLOOP ld (ix+0),0 ld hl,BOSS + 4 dec (hl) ld hl,(SCORE) ld bc,10 add hl,bc jp c,MAXSCORE ld (SCORE),hl MOVESHIP2: ld ix,ASTEROIDS-4 dec (ix+2) ld b,(ix+2) ld a,0 cp b jp nz,MOVEASTEROID ld a,(ix+3) ld (ix+2),a MOVEASTEROID: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 170 jp z,COLLISION cp 0 jp z,MOVEASTEROID ld a,b ;asteroid move delay (b) cp 0 jp nz,DRAWAST ld a,(ix+1) and 11101110b jp z,AY inc (ix+2) and 11110001b jp z,AY dec (ix+2) dec (ix+2) AY: ld a,(ix+2) cp 255 jp z,AXZERO sub 96 jp c,AY2 ld (ix+2),0 ;!!!!! jp AY2 AXZERO: ld (ix+2),95 AY2: ld a,(ix+1) and 10111011b jp z,ACHECKBND inc (ix+3) and 11000111b jp z,ACHECKBND dec (ix+3) dec (ix+3) ACHECKBND: ld a,(ix+3) cp 255 jp z,AYZERO sub 64 jp c,DRAWAST ld (ix+3),0 ;!!!!! jp DRAWAST AYZERO: ld (ix+3),63 DRAWAST: ld a,(ix+0) ld hl,ASTEROID3 bit 7,a jp nz,DRAWAST3 ld hl,ASTEROID4 bit 6,a jp nz,DRAWAST3 ld hl,ASTEROID1 cp 4 jp z,DRAWAST3 ld hl,ASTEROID2 cp 3 jp z,DRAWAST3 ld hl,SHIPEX2 cp 2 jp z,DRAWAST2 ld hl,SHIPEX3 cp 1 jp z,DRAWAST2 ld hl,BLACKAST jp DRAWAST3 DRAWAST2: dec (ix+0) DRAWAST3: push bc push ix ld a,(ix+2) ld e,(ix+3) call DRWSPR pop ix pop bc jp MOVEASTEROID COLLISION: ld ix,VARS ld a,(ix+10) cp 0 jp nz,HOME ld ix,ASTEROIDS-4 ANYAST: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 0 jp nz,ANYASTYES jp ANYAST ANYASTYES: cp 170 jp nz,ANYAST2 ld hl,(SCORE) ld bc,1000 add hl,bc jp c,MAXSCORE ld (SCORE),hl ld hl,LEVEL inc (hl) ld a,(hl) LOADLEVEL: ld b,0 ld c,4 ld hl,PHOTONS ld (hl),0 add hl,bc ld (hl),0 add hl,bc ld (hl),0 add hl,bc ld (hl),0 ld hl,BIGBOSS ld (hl),0 ld hl,LEVEL2 cp 2 jp z,SETLEVEL ld hl,LEVEL3 cp 1 jp z,SETLEVEL cp 3 jp z,SETLEVEL ld hl,LEVEL4 cp 4 jp z,SETLEVEL ld hl,LEVEL5 cp 5 jp z,SETLEVEL ld hl,LEVEL6 cp 6 jp z,SETLEVEL ld hl,LEVEL7 cp 7 jp z,SETLEVEL ld hl,LEVEL8 cp 8 jp z,SETLEVEL ld hl,LEVEL9 cp 9 jp z,SETLEVEL ld hl,LEVEL10 cp 10 jp z,SETLEVEL ld hl,LEVEL11 cp 11 jp z,SETLEVEL ld hl,BIGBOSS ld (hl),1 ld hl,LEVEL12 cp 12 jp z,SETLEVEL ld hl,LEVEL13 cp 13 jp z,SETLEVEL ld hl,LEVEL dec (hl) dec (hl) ld hl,LEVEL14 SETLEVEL: ld ix,BOSS SETLEVEL2: ld a,(hl) cp 222 jr z,ENDSETLEVEL ld (ix+0),a inc ix inc hl jr SETLEVEL2 ENDSETLEVEL: ld hl,VARS+10 ld (hl),254 jp RESTART ANYAST2: ld ix,ASTEROIDS-4 SCANAST: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 170 jp z,NOTQUITEHOME cp 0 jp z,SCANAST cp 1 jp z,SCANAST cp 2 jp z,SCANAST cp 3 jr z,XSMALL ld a,(ix+2) add a,8 ld c,11 jr XNOTSMALL XSMALL: ld a,(ix+2) add a,4 ld c,5 ;8 XNOTSMALL: ld hl,VARS+3 ld b,(hl) sub b sub c jp c,XCOL XSMALL2: jp PHOTONCOL XCOL: ld a,(ix+0) cp 3 jr z,YSMALL ld a,(ix+3) add a,5 ;8 ld c,11 jr YNOTSMALL YSMALL: ld a,(ix+3) add a,4 ld c,8 YNOTSMALL: ld hl,VARS+4 ld b,(hl) sub b sub c jp c,HITSHIP YSMALL2: jp PHOTONCOL HITSHIP: ld a,(MOVED) or a jp z,NODIE ld hl,LIVES sla (hl) ld a,0 ld (MOVED),a NODIE: ld hl,(SCORE) ld bc,99 sbc hl,bc jr nc,SNCARRY ld hl,0 SNCARRY: ld (SCORE),hl ld ix,VARS ld (ix+10),1 ld (ix+1),5 jp HOME PHOTONCOL: push ix ld c,(ix+0) ld d,(ix+2) ld e,(ix+3) ld ix,PHOTONS-4 PCLOOP: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 0 jr z,PCLOOP cp 170 jp z,PEND ld b,(ix+1) ld a,c cp 3 jr z,PXSMALL ld a,d add a,8 sub b cp 0 jp z,PXCOL cp 1 jp z,PXCOL cp 2 jp z,PXCOL cp 3 jp z,PXCOL PXSMALL: ld a,d add a,8 sub b cp 4 jp z,PXCOL cp 5 jp z,PXCOL cp 6 jp z,PXCOL cp 7 jp z,PXCOL cp 8 jp z,PXCOL cp 9 jp z,PXCOL cp 10 jp z,PXCOL PXSMALL2: jp PCLOOP PXCOL: ld b,(ix+2) ld a,c cp 3 jr z,PYSMALL ld a,e add a,8 sub b cp 0 jp z,HITAST cp 1 jp z,HITAST cp 2 jp z,HITAST cp 3 jp z,HITAST PYSMALL: ld a,e add a,8 sub b cp 4 jp z,HITAST cp 5 jp z,HITAST cp 6 jp z,HITAST cp 7 jp z,HITAST cp 8 jp z,HITAST cp 9 jp z,HITAST cp 10 jp z,HITAST PYSMALL2: jp PCLOOP HITAST: ld hl,(SCORE) ld de,20 add hl,de jp c,MAXSCORE ld (SCORE),hl ld a,c bit 7,a jp nz,SMILE bit 6,a jp nz,SHIELDED cp 4 jp nz,NOTFOUR ld hl,BOSS+4 ld a,(hl) cp 0 jp nz,SPAWNAST ld a,(ix+0) ld (ix+0),0 pop ix rrc a ld (ix+1),a rlc a rlc a ld (ix+5),a dec (ix+0) ld a,3 ld (ix+4),a ld a,(ix+2) add a,2 ld (ix+2),a ld (ix+6),a ld a,(ix+3) add a,2 ld (ix+3),a ld (ix+7),a jp SCANAST SPAWNAST: ld a,(ix+0) ld (ix+0),0 pop ix ld (ix+1),a ld hl,BOSS+2 ld a,(hl) add a,5 ld (ix+2),a inc hl ld a,(hl) add a,5 ld (ix+3),a jp SCANAST NOTFOUR: ld (ix+0),0 pop ix dec (ix+0) jp SCANAST SMILE: ld b,(ix+0) ld (ix+0),0 pop ix res 7,a dec a cp 5 jr z,KILLWHITE set 7,a KILLWHITE: ld (ix+0),a rrc b rrc b rrc b rrc b ld (ix+1),b jp SCANAST SHIELDED: ld b,a ld a,(ix+0) and %00001110 jr nz,NOSHIELD ld a,(ix+0) rrc a rrc a rrc a rrc a ld (ix+0),a pop ix jp SCANAST NOSHIELD: ld a,b ld (ix+0),0 pop ix res 6,a dec a cp 5 jr z,KILLWHITE2 set 6,a KILLWHITE2: ld (ix+0),a jp SCANAST PEND: pop ix jp SCANAST NOTQUITEHOME: ld ix,PHOTONS-4 ld hl, VARS+3 ld a,(hl) add a,4 ld d,a inc hl ld a,(hl) add a,4 ld e,a PHOSHIPCOL: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 0 jr z,PHOSHIPCOL cp 170 jp z,PHOSHIPEND ld a,(ix+3) cp 0 jr nz,PHOSHIPCOL ld a,d ld b,(ix+1) sub b jr c,PHOSHIPCOL sub 6 jr nc,PHOSHIPCOL ld a,e ld b,(ix+2) sub b jr c,PHOSHIPCOL sub 6 jr nc,PHOSHIPCOL ld (ix+0),0 jp HITSHIP PHOSHIPEND: ld a,(BIGBOSS) cp 0 jp z,HOME ld ix,PHOTONS-4 PHOBCOL: inc ix inc ix inc ix inc ix ld a,(ix+0) cp 0 jr z,PHOBCOL cp 170 jp z,PHOBEND ld a,60 ld b,(ix+1) sub b jr c,PHOBCOL sub 26 jr nc,PHOBCOL ld a,48 ld b,(ix+2) sub b jr c,PHOBCOL sub 34 jr nc,PHOBCOL ld a,(ix+0) rrc a rrc a rrc a rrc a ld (ix+0),a jp PHOBCOL PHOBEND: ld a,(BOUNCE) cp 0 jp z,BNC ld a,(BOUNCE) dec a ld (BOUNCE),a jp HOME BNC: ld ix,VARS ld a,60 ld b,(ix+3) sub b jp c,HOME sub 28 jp nc,HOME ld a,48 ld b,(ix+4) sub b jp c,HOME sub 36 jp nc,HOME ld a,5 ld (BOUNCE),a ld a,(ix+7) cp 0 jr z,BNCSHIP1 ld (ix+7),3 ld a,(ix+6) xor 1 ld (ix+6),a BNCSHIP1: ld a,(ix+9) cp 0 jp z,HOME ld (ix+9),3 ld a,(ix+8) xor 1 ld (ix+8),a jp HOME BOUNCE: .db 0 ;----------------------------- PAUSE: call _getkey jp MOVESHIP ;--------------------------------- NOLAUNCH: ld hl,LAUNCHED ld (hl),0 ret ;--------------------------------- LAUNCH: ld a,1 ld (MOVED),a ld hl,PHOTONS-3 ld a,(hl) cp 1 ret z ld (hl),1 ld bc,ENDPHOTONS dec hl LLOOP: inc hl inc hl inc hl inc hl ld a,c cp l ret z ld a,(hl) cp 0 jp nz,LLOOP ld ix,VARS ld a,(ix+3) sub 90 ret nc ld a,(ix+4) sub 60 ret nc ld a,(ix+5) ld (hl),a inc hl ld a,(ix+3) ; ship x add a,2 ld (hl),a inc hl ld a,(ix+4) ; ship y add a,2 ld (hl),a inc hl ld (hl),10 ret ;--------------------------------- ACCELERATE: ld a,1 ld (MOVED),a ld ix,VARS ld a,(ix+1) cp 0 ret nz ld (ix+1),15 ; accelerate delay ld a,(ix+7) ; x-acceleration cp 0 jp z,XAZ ld a,(ix+5) and 11101110b ;cp 1,16 jp z,YACC and 11110001b ;cp 2,4,6 jp z,X234 jp X678 XAZ: ld a,(ix+5) ; ship direction and 11101110b jp z,YACC inc (ix+7) ld (ix+6),0 and 00011111b jp z,YACC ld (ix+6),1 jp YACC X234: ld a,(ix+6) ; x-direction cp 1 jp z,XINC jp XDEC X678: ld a,(ix+6) ; x-direction cp 1 jp z,XDEC XINC: ld a,(ix+7) cp 3 jp z,YACC inc (ix+7) inc (ix+7) XDEC: dec (ix+7) YACC: ld a,(ix+9) ; y-acceleration cp 0 jp z,YAZ ld a,(ix+5) and 10111011b ;cp 4,64 ret z and 01111100b ;cp 128,1,2 jp z,Y812 jp Y456 YAZ: ld a,(ix+5) and 10111011b ret z inc (ix+9) ld (ix+8),1 and 11000111b ;cp 8,16,32 ret z ld (ix+8),0 ret Y812: ld a,(ix+8) ; y-direction cp 0 jp z,YINC jp YDEC Y456: ld a,(ix+8) ; y-direction cp 0 jp z,YDEC YINC: ld a,(ix+9) cp 3 ret z inc (ix+9) inc (ix+9) YDEC: dec (ix+9) ret ;------------------------------- NOLEFT: ld hl,LAUNCHED+1 ld (hl),0 ret NORIGHT: ld hl,LAUNCHED+2 ld (hl),0 ret LEFT: ld a,1 ld (MOVED),a ld hl,LAUNCHED+1 ld a,(hl) cp 1 ret z ld (hl),1 ld ix,VARS rrc (ix+5) jp ORIENTATE RIGHT: ld a,1 ld (MOVED),a ld hl,LAUNCHED+2 ld a,(hl) cp 1 ret z ld (hl),1 ld ix,VARS rlc (ix+5) ORIENTATE: ;ship ld a,(ix+5) ld hl,SHIP1 cp 1 jp z,ORIENTATED ld hl,SHIP2 cp 2 jp z,ORIENTATED ld hl,SHIP3 cp 4 jp z,ORIENTATED ld hl,SHIP4 cp 8 jp z,ORIENTATED ld hl,SHIP5 cp 16 jp z,ORIENTATED ld hl,SHIP6 cp 32 jp z,ORIENTATED ld hl,SHIP7 cp 64 jp z,ORIENTATED ld hl,SHIP8 ORIENTATED: ld (SHIPSPRLOC),hl ret ;-------------------------------- GAMEOVER: ld a,(LIVES) cp 0 jp nz,STILLALIVE call _getk cp $09 jr z,EXITGAME GAMEOVER2: ld hl,GAMEOVERTXT ld ix,$8f78 GAMEOVERCPY: ld a,(hl) cp 255 jp z,ASTEROID ld (ix+0),a inc ix inc hl jp GAMEOVERCPY GAMEOVERTXT: .db 0,0,0,15,207,63,239,31,216,189,224,0,0 .db 0,0,8,73,34,40,16,88,161,32,0,0,0,0,8 .db 73,34,40,16,88,161,32,0,0,0,0,8,9,34,47 .db 16,73,61,240,0,0,0,0,9,223,178,44,16,73 .db 49,144,0,0,0,0,8,216,178,44,16,73,49,144 .db 0,0,0,0,15,216,178,47,31,207,61,144,255 ;-------------------------------- MAXSCORE: EXITGAME: call _grbufclr ld hl,SCORETXT ld ix,36393 + (12 * 3) SCORECPY: ld a,(hl) cp 5 jp z,SCORECHK ld (ix+0),a inc ix inc hl jp SCORECPY SCORECHK: call _grbufcpy_v ld hl,CREDITSTXT ld b,50 DECODE: ld a,(hl) xor 38 ld (hl),a inc hl djnz DECODE ld hl,$3400 ld (PENCOL),hl ld hl,CREDITSTXT call _vputs ld hl,$3A2C ld (PENCOL),hl ld hl,CREDITSTXT2 call _vputs ld hl,$3A00 ld (PENCOL),hl ld hl,VERSION call _vputs ld hl,(HIGHSCORE) ld bc,(SCORE) sbc hl,bc jp c,GOTHIGHSCORE SCOREDISP: ld hl,0002h ld (CURROW),hl ld hl,YOURSCORE call _puts ld hl,0B02h ld (CURROW),hl ld hl,(SCORE) call _disphl ld hl,0004h ld (CURROW),hl ld hl,HIGHTXT call _puts ld hl,0B04h ld (CURROW),hl ld hl,(HIGHSCORE) call _disphl SCOREDISPWAIT: call _getk cp $09 jr nz,SCOREDISPWAIT call _grbufclr call _clrlcdfull call _homeup ei ret GOTHIGHSCORE: ld hl,0002h ld (CURROW),hl ld hl,HIGHTXT call _puts ld hl,0B02h ld (CURROW),hl ld hl,(HIGHSCORE) call _disphl ld hl,0B05h ld (CURROW),hl ld hl,(SCORE) call _disphl ld hl,0004h ld (CURROW),hl ld hl,NAMETXT call _puts ; set curAble,(iy+curflags) ld hl,0005h ld (CURROW),hl ld ix,HIGHTXT ld b,0 enter_name_loop: push bc call _getK pop bc or a jr z,enter_name_loop cp $38 jr z,backup cp $09 jp z,NAMEENTERED ld c,a ld a,7 cp b jr z,enter_name_loop ld hl,chartable-10 ld e,c ld d,0 add hl,de ld a,(hl) ld (ix),a call _putc inc b inc ix jr enter_name_loop backup: dec b ld a,255 cp b jr z,too_far dec ix ld (ix),32 ld hl,CURCOL dec (hl) ld a,32 call _putc dec (hl) jr enter_name_loop too_far: inc b jr enter_name_loop NAMEENTERED: ld (ix+0),$27 ld (ix+1),$53 ld (ix+2),$3A ld (ix+3),0 CALL _ZEROOOP1 LD A,05h LD (OP1),A LD DE,OP1+1 LD HL,PROGNAME LD BC,5 LDIR CALL _CHKFINDSYM jp c,PRGMNOTFND inc de inc de ld hl,HIGHSCORE ld bc,$9327 sbc hl,bc add hl,de ld bc,(SCORE) ld (hl),c inc hl ld (hl),b inc hl hi: push hl pop de LD HL,HIGHTXT LD BC,11 LDIR PRGMNOTFND: call _grbufclr call _clrlcdfull call _homeup ei ret PROGNAME: .db "WARP2" CREDITSTXT: .db $67,$55,$52,$43,$54,$49,$4F,$42 .db $1E,$15,$06,$06,$44,$5F,$06,$06 .db $74,$43,$4F,$4A,$4A,$5F,$06,$64 .db $43,$47,$45,$49,$4B .db 38 VERSION: .db $70,$17,$08,$16 .db 38 CREDITSTXT2: .db $65,$49,$56,$5F,$54,$4f,$41,$4E,$52,$06,$06,$14,$16,$16,$14 .db 38 YOURSCORE: .db "YOUR'S:" .db 0 NAMETXT: .db "ENTER NAME:" .db 0 CHARTABLE: .db "&WRMH" .db $CA .db "@?0VQLG!.:ZUPKFC" .db $25 .db " YTOJEB>.XSNIDA" .db ")54321(#" SCORETXT: .db 63,0,0,7,223,191,188,247,192,0,0,252 .db 74,135,128,4,81,160,164,132,64,1,225,42 .db 88,137,64,4,17,160,164,132,0,2,81,98 .db 98,138,192,7,208,32,190,247,192,2,177,138 .db 75,142,64,0,208,160,178,192,192,3,145,46 .db 120,137,192,4,208,160,178,196,192,2,113,226 .db 66,135,128,7,223,191,178,247,192,1,225,10 .db 63,0,0,0,0,0,0,0,0,0,0,252 .db 5 ;-------------------------------- STILLALIVE: ld hl,VARS+10 ld (hl),0 call ORIENTATE jp ASTEROID LEVELTITLE: ld a,$BF out (1),a in a,(1) cp 255 jp z,LEVT xor 11111111b and 11100000b jp nz,LEVT ld ix,VARS ld (ix+10),0 jp ASTEROID LEVT: ld hl,LEVELPIC ld ix,$8f79 LEVTCPY: ld a,(hl) cp 2 jp z,ASTEROID ld (ix+0),a inc ix inc hl jp LEVTCPY LEVELPIC: .db 0,0,1,139,209,16,135,177,122,0,0,0 .db 0,0,1,74,17,16,132,49,66,0,0,0 .db 0,0,1,74,17,16,132,49,66,0,0,0 .db 0,0,1,43,209,16,135,146,122,0,0,0 .db 0,0,1,171,25,16,198,18,99,0,0,0 .db 0,0,1,171,25,16,198,18,99,0,0,0 .db 0,0,1,155,223,240,247,158,123,192 .db 2 ;-------------------------------- TITLE: ld a,$BF out (1),a in a,(1) cp 255 jp z,TITLE2 xor 11111111b and 11100000b jp nz,TITLE2 ld ix,VARS ld (ix+10),0 jp ASTEROID TITLE2: ld hl,TITLEPIC ld ix,36705 - 24 - 60 TITLECPY: ld a,(hl) cp 2 jp z,ASTEROID ld (ix+0),a inc ix inc hl jp TITLECPY TITLEPIC: .db 31,128,95,1,129,128,0,0,0,0,0,0 .db 7,128,91,1,129,128,0,0,0,0,0,0 .db 6,123,219,125,190,188,0,0,0,0,0,0 .db 6,27,95,109,182,48,0,0,0,0,0,0 .db 6,123,92,109,190,60,0,0,0,0,0,0 .db 6,91,92,109,176,12,0,0,0,0,0,0 .db 6,127,220,125,190,60,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,0,0,0,0,0 .db 0,255,31,251,255,191,191,143,255,177,255,192 .db 0,255,31,251,255,191,191,143,255,177,255,192 .db 0,195,24,56,31,176,49,140,1,177,128,192 .db 0,195,24,56,31,176,49,141,221,177,128,192 .db 0,195,24,56,24,48,49,141,69,177,128,192 .db 0,195,24,0,24,48,63,141,69,177,128,192 .db 0,195,31,248,24,63,191,237,69,177,128,192 .db 1,195,159,248,24,63,188,109,221,185,192,192 .db 3,255,192,120,24,60,60,109,69,189,224,192 .db 3,255,216,120,24,60,60,109,69,189,224,192 .db 3,192,216,120,24,60,60,109,221,189,224,192 .db 3,192,216,120,24,60,60,108,1,189,224,192 .db 3,192,223,248,24,63,188,111,255,189,255,192 .db 3,192,223,248,24,63,188,111,255,189,255,192 .db 0,0,0,0,0,0,0,0,0,0,0,0 .db 0,0,0,0,0,0,0,4,95,121,243,240 .db 0,0,0,0,0,0,0,4,81,73,17,32 .db 0,0,0,0,0,0,0,5,95,125,241,32 .db 0,0,0,0,0,0,0,7,209,69,3,240 .db 2 DRWSPR: ;Input: hl=Sprite Address, a=x-coordinate, e=y-coordinate push hl pop ix push af ld hl,0 ; Do y*12 ld d,0 add hl,de add hl,de add hl,de add hl,hl add hl,hl ld d,0 ; Do x/8 ld e,a srl e srl e srl e add hl,de ld a,11 sub e ld d,a pop af push de ld de,8e29h add hl,de ; Add address to graphbuf ld b,00000111b ; Get the remainder of x/8 and b cp 0 ; Is this sprite aligned to 8*n,y? jp z,ALIGN ;Non aligned sprite blit starts here ld d,a ; d=how many bits to shift each line ld e,(ix+0) ; Line loop LILOP: ld b,(ix+1) ; Get sprite data ld c,0 ; Shift loop push de SHLOP: srl b rr c dec d jp nz,SHLOP pop de ld a,b ; Write line to graphbuf or (hl) ld (hl),a pop af push af cp 0 jr z,EDGE inc hl ld a,c or (hl) ld (hl),a ld bc,11 ; Calculate next line address add hl,bc inc ix ; Inc spritepointer push hl ld bc,GRBUFF + 768 sbc hl,bc pop hl jp c,NOTOUTOFBUFF ld bc,768 sbc hl,bc NOTOUTOFBUFF: dec e jp nz,LILOP ; Next line jp DONE1 EDGE: push bc ld bc,11 sbc hl,bc pop bc ld a,c or (hl) ld (hl),a ld bc,23 ; Calculate next line address add hl,bc inc ix ; Inc spritepointer push hl ld bc,GRBUFF + 768 sbc hl,bc pop hl jp c,NOTOUTOFBUFF2 ld bc,768 sbc hl,bc NOTOUTOFBUFF2: dec e jp nz,LILOP ; Next line jp DONE1 ;Aligned sprite blit starts here ALIGN: ; Blit an aligned sprite to graphbuf ld b,(ix+0) ALOP1: ld a,(ix+1) or (hl) ; xor=erase/blit ld (hl),a inc ix ld de,12 add hl,de push hl ld de,GRBUFF + 768 sbc hl,de pop hl jp c,NOTOUTOFBUFF3 ld de,768 sbc hl,de NOTOUTOFBUFF3: djnz ALOP1 DONE1: pop af ret ;--------------------------------- SHIP1: .db 3 .db %00100000 .db %01010000 .db %10001000 SHIP2: .db 4 .db %11110000 .db %00010000 .db %00010000 .db %00010000 SHIP3: .db 5 .db %10000000 .db %01000000 .db %00100000 .db %01000000 .db %10000000 SHIP4: .db 4 .db %00010000 .db %00010000 .db %00010000 .db %11110000 SHIP5: .db 3 .db %10001000 .db %01010000 .db %00100000 SHIP6: .db 4 .db %10000000 .db %10000000 .db %10000000 .db %11110000 SHIP7: .db 5 .db %00100000 .db %01000000 .db %10000000 .db %01000000 .db %00100000 SHIP8: .db 4 .db %11110000 .db %10000000 .db %10000000 .db %10000000 SHIPSPRLOC: .db 0,0 PHOTON: .db 2 .db %11000000 .db %11000000 BLACKAST: .db 8 .db %01111110 .db %11011011 .db %11110111 .db %10011101 .db %11111111 .db %11101111 .db %10110101 .db %01111110 ASTEROID1: .db 8 .db %01111110 .db %10010101 .db %10110001 .db %11000101 .db %10010111 .db %11110001 .db %10000101 .db %01111110 ASTEROID2: .db 6 .db %01111000 .db %10010100 .db %10101100 .db %11100100 .db %10011100 .db %01111000 ASTEROID3: .db 8 .db %01111110 .db %10000001 .db %10100101 .db %10000001 .db %10100101 .db %10011001 .db %10000001 .db %01111110 ASTEROID4: .db 8 .db %01111110 .db %10001111 .db %00111111 .db %10001111 .db %00011111 .db %00101111 .db %11011111 .db %01111110 SHIPEX1: .db 4 .db %10100000 .db %01010000 .db %10100000 .db %01000000 SHIPEX2: .db 5 .db %10100000 .db %00010000 .db %10000000 .db %00010000 .db %01000000 SHIPEX3: .db 5 .db %10100000 .db %00001000 .db %00000000 .db %10000000 .db %00010000 SHIPEX4: .db 5 .db %10000000 .db %00001000 .db %00000000 .db %00000000 .db %00010000 THEBOSSPIC: .db 3,241,125,240 .db 4,8,85,80 .db 12,12,109,176 .db 11,244,85,80 .db 8,4,109,176 .db 8,4,85,80 .db 8,4,109,176 .db 8,4,85,80 .db 8,4,109,176 .db 8,4,85,80 .db 8,4,109,176 .db 12,12,125,240 .db 3,240,16,64 .db 8,199,255,224 .db 0,200,0,144 .db 8,240,0,144 .db 0,240,0,144 .db 8,200,0,144 .db 0,199,255,224 .db 11,240,16,64 .db 4,200,125,240 .db 12,12,109,176 .db 11,244,85,80 .db 8,4,109,176 .db 8,4,85,80 .db 8,4,109,176 .db 8,4,85,80 .db 8,4,109,176 .db 8,4,85,80 .db 8,4,109,176 .db 12,12,85,80 .db 3,241,125,240 BOSSDAMAGE1: .db 16 .db 0,2,49,72,4,2,14,17,33,70,10,18,33,32,16,0 BOSSDAMAGE11: .db 16 .db 0,8,4,132,72,80,98,132,248,64,64,32,18,140,64,0 BOSSDAMAGE2: .db 16 .db 124,130,49,72,132,130,143,18,34,71,138,146,161,160,144,78 BOSSDAMAGE22: .db 16 .db 114,9,5,133,73,81,226,68,120,193,65,33,18,140,65,62 BOSSDAMAGE3: .db 16 .db 124,130,49,72,132,131,140,20,36,68,139,146,161,160,144,78 BOSSDAMAGE33: .db 16 .db 114,9,5,133,73,241,34,36,56,33,193,33,18,140,65,62 BOSSSPR1: .db 16 .db 124,130,49,72,135,132,136,24,40,72,140,147,161,160,144,78 BOSSSPR2: .db 16 .db 114,9,5,133,201,49,18,20,24,17,33,225,18,140,65,62 BLANKSPR: .db 1 .db 0 HIGHSCORE: .db 0,0 HIGHTXT: .db "TADPOLE'S:" .db 0 SCORE: .db 0,0 LEVEL: .db 1 LIVES: .db 255 MOVED: .db 0 VARS: .db 1 .db 0 ; 1. key delay count .db 1 ; 2. move delay count .db 40 ; 3. ship x .db 35 ; 4. ship y .db 1 ; 5. ship orientation .db 0 ; 6. x-direction .db 0 ; 7. x-acceleration .db 0 ; 8. y-direction .db 0 ; 9. y-acceleration .db 255 ; 10. if >0 then ship destroyed BIGBOSS: .db 0 BOSS: .db 0 ;class 0/1 .db 8 ;direction .db 5 ;x .db 5 ;y .db 0 ;life .db 5 ;delay ASTDELAY: .db 1 ;astdelaycnt .db 3 ;astdelay ASTEROIDS: .db 4,8,30,1 ;class(>4"black",4=big,3=small,2=explode,1=explode2,0=destroyed),orientation(1-8),x,y .db 0,0,0,0 .db 4,2,1,40 .db 0,0,0,0 .db 4,128,40,53 .db 0,0,0,0 .db 4,32,80,35 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 .db 170,0,0,0 .db 0,0,0,0 ENDASTEROIDS: .db 170 LAUNCHED: .db 0 ;photon launch key repeat prevention .db 0 ;left rotate .db 0 ;right rotate PHOTONS: .db 0,0,0,0 ;orientation(1-8)/nonexistance(0),x,y,post-launch delay .db 0,0,0,0 .db 0,0,0,0 .db 0,0,0,0 ENDPHOTONS: .db 170 LEVEL2: .db 0,0,0,0,0,0,1,3 .db 4,1,43,56 .db 0,0,0,0 .db 4,2,0,56 .db 0,0,0,0 .db 4,4,0,28 .db 0,0,0,0 .db 4,8,0,0 .db 0,0,0,0 .db 4,16,43,0 .db 0,0,0,0 .db 4,32,88,0 .db 0,0,0,0 .db 4,64,88,29 .db 0,0,0,0 .db 4,128,88,56 .db 0,0,0,0 .db 170,222 LEVEL3: .db 0,0,0,0,0,0,1,3 .db 30,8,30,1 .db 0,0,0,0 .db 30,2,1,40 .db 0,0,0,0 .db 30,128,40,53 .db 0,0,0,0 .db 30,32,80,35 .db 0,0,0,0 .db 170,222 LEVEL4: .db 0,0,0,0,0,0,1,2 .db 10,2,0,0 .db 0,0,0,0 .db 10,8,0,8 .db 0,0,0,0 .db 10,2,0,16 .db 0,0,0,0 .db 10,8,0,24 .db 0,0,0,0 .db 10,2,0,32 .db 0,0,0,0 .db 10,8,0,40 .db 0,0,0,0 .db 10,2,0,56 .db 0,0,0,0 .db 10,8,0,48 .db 0,0,0,0 .db 170,222 LEVEL5: .db 0,0,0,0,0,0,1,3 .db 148,2,0,37 .db 0,0,0,0 .db 20,128,78,56 .db 0,0,0,0 .db 170,222 LEVEL6: .db 0,0,0,0,0,0,1,3 .db 20,8,0,0 .db 0,0,0,0 .db 20,8,0,12 .db 0,0,0,0 .db 20,8,0,24 .db 0,0,0,0 .db 20,8,0,36 .db 0,0,0,0 .db 20,128,88,20 .db 0,0,0,0 .db 20,128,88,32 .db 0,0,0,0 .db 20,128,88,44 .db 0,0,0,0 .db 20,128,88,56 .db 0,0,0,0 .db 170,222 LEVEL7: .db 0,0,0,0,0,0,1,3 .db 148,8,14,0 .db 0,0,0,0 .db 148,2,0,53 .db 0,0,0,0 .db 148,32,88,12 .db 0,0,0,0 .db 148,128,88,48 .db 0,0,0,0 .db 170,222 LEVEL8: .db 0,0,0,0,0,0,1,3 .db 84,8,14,0 .db 0,0,0,0 .db 84,2,0,53 .db 0,0,0,0 .db 84,32,88,12 .db 0,0,0,0 .db 84,128,88,48 .db 0,0,0,0 .db 170,222 LEVEL9: .db 0,0,0,0,0,0,1,3 .db 148,8,14,0 .db 0,0,0,0 .db 20,2,0,53 .db 0,0,0,0 .db 84,32,88,12 .db 0,0,0,0 .db 170,222 LEVEL10: .db 1,8,5,5,30,5,1,4 .db 20,4,1,19 .db 0,0,0,0 .db 20,4,1,37 .db 0,0,0,0 .db 5,16,1,1 .db 0,0,0,0 .db 5,16,29,1 .db 0,0,0,0 .db 148,57,1 .db 0,0,0,0 .db 170,222 LEVEL11: .db 0,0,0,0,0,0,1,3 .db 84,32,52,9 .db 0,0,0,0 .db 84,32,62,9 .db 0,0,0,0 .db 84,32,72,9 .db 0,0,0,0 .db 84,32,52,19 .db 0,0,0,0 .db 84,32,62,19 .db 0,0,0,0 .db 84,32,72,19 .db 0,0,0,0 .db 84,32,72,29 .db 0,0,0,0 .db 84,32,62,29 .db 0,0,0,0 .db 84,32,52,29 .db 0,0,0,0 .db 170,222 LEVEL12: .db 0,0,0,0,0,0,1,3 .db 4,8,30,1 .db 0,0,0,0 .db 4,2,1,40 .db 0,0,0,0 .db 4,128,40,53 .db 0,0,0,0 .db 4,32,80,35 .db 0,0,0,0 .db 170,222 LEVEL13: .db 0,0,0,0,0,0,1,4 .db 30,8,30,1 .db 0,0,0,0 .db 30,2,1,40 .db 0,0,0,0 .db 30,128,40,53 .db 0,0,0,0 .db 30,32,80,35 .db 0,0,0,0 .db 170,222 LEVEL14: .db 0,0,0,0,0,0,1,3 .db 30,8,30,1 .db 0,0,0,0 .db 30,2,1,40 .db 0,0,0,0 .db 30,128,40,53 .db 0,0,0,0 .db 30,32,80,35 .db 0,0,0,0 .db 170,222 ret .end end