;Blockbuster v3.1 for CrASH ;ZoomLabs Software ;Doug Torrance ;profzoom@hotmail.com .include crash82.inc Title2: .db "Blockbuster v3.1",0 string = TEXT_MEM lilguyx = TEXT_MEM+6 lilguyy = TEXT_MEM+7 score = TEXT_MEM+8 otherlilguyy = TEXT_MEM+9 yetanotherlilguyy = TEXT_MEM+11 initial = TEXT_MEM+12 Beginning: ROM_CALL(CLEARLCD) set 1,(IY+05) set 3,(IY+05) ld de,0 ld hl,Title1 call vputs ld hl,Title2 ROM_CALL(D_ZM_STR) ld hl,Title1 ROM_CALL(D_ZM_STR) res 3,(IY+05) ld de,$0800 ld hl,AuthorStuff call vputs ld de,$0f00 call vputs ld de,$1600 call vputs ld de,$1d00 call vputs ld hl,(HighScore) call DM_HL_DECI ld b,0 Menu: ld a,b cp 0 jr z,StartIsHighlighted cp 1 jr z,HelpIsHighlighted StartIsHighlighted: set 3,(IY+05) ld de,$2a21 ld hl,Start call vputs res 3,(IY+05) ld de,$3223 ld hl,Help call vputs jr Choose HelpIsHighlighted: res 3,(IY+05) ld de,$2a21 ld hl,Start call vputs set 3,(IY+05) ld de,$3223 ld hl,Help call vputs Choose: call GET_KEY cp $01 jr z,DownOrUpKeyIsPressed cp $04 jr z,DownOrUpKeyIsPressed cp $09 jr z,EnterIsPressed cp $37 jp z,ExitGame ld hl,(RANDSEED) inc hl ld (RANDSEED),hl jr Choose DownOrUpKeyIsPressed: ld a,b or a jr z,HighlightHelp ld b,0 jr Menu HighlightHelp: ld b,1 jr Menu EnterIsPressed: ld a,b or a jp z,StartGame HelpScreen: ROM_CALL(CLEARLCD) set 3,(IY+05) ld de,0 ld hl,Title1 call vputs ld hl,Title2 ROM_CALL(D_ZM_STR) ld hl,Title1 ROM_CALL(D_ZM_STR) res 3,(IY+05) ld de,$0800 ld hl,HelpText call vputs ld de,$0f00 call vputs ld de,$1600 call vputs ld de,$1d05 call vputs ld de,$2400 call vputs HelpScreenLoop: call GET_KEY cp $37 jp z,Beginning cp 9 jp z,Beginning jr HelpScreenLoop StartGame: ld e,0 ld hl,Board WriteBoard: call GETRAND ld (hl),a inc hl inc e ld a,e cp 12 jr z,LetsGetStarted jr WriteBoard LetsGetStarted: ROM_CALL(CLEARLCD) ld b,0 ld c,0 ld e,1 ld hl,Board DrawRowOfBlocks: bit 0,(hl) call DrawBlock bit 1,(hl) call DrawBlock bit 2,(hl) call DrawBlock bit 3,(hl) call DrawBlock bit 4,(hl) call DrawBlock bit 5,(hl) call DrawBlock bit 6,(hl) call DrawBlock bit 7,(hl) call DrawBlock inc hl ld b,0 inc c ld a,c cp 12 jr z,DrawManAndExitDoor jr DrawRowOfBlocks DrawBlock: jr z,NoBlock push hl ld hl,BreakableBlock call ZoomSprite inc b pop hl ret NoBlock: ld a,b add a,8 ld b,a ret DrawManAndExitDoor: ld hl,Board res 0,(hl) ld hl,Board+11 res 7,(hl) ld b,0 ld c,0 ld hl,Man call ZoomSprite ld b,56 ld c,11 ld hl,Exit call ZoomSprite ld a,0 ld (score),a ld a,0 ld (lilguyx),a ld a,1 ld (lilguyy),a ld a,0 ld (otherlilguyy),a ld a,%11111110 ld (yetanotherlilguyy),a Gravity: ld a,(otherlilguyy) cp 56 jr z,WaitForKey call LoadBoardColumnIntoHL ld a,(lilguyy) rlca ld b,(hl) and b or a jr nz,WaitForKey call EraseLilGuy ld a,(lilguyy) rlca ld (lilguyy),a ld a,(otherlilguyy) add a,8 ld (otherlilguyy),a ld a,(yetanotherlilguyy) rlca ld (yetanotherlilguyy),a call DrawLilGuy jr Gravity WaitForSecond: ld a,$bf out (1),a in a,(1) bit 5,a jp z,SecondIsPressed WaitForKey: call GET_KEY cp $31 jr z,GraphIsPressed cp $32 jp z,TraceIsPressed cp 2 jr z,LeftKeyIsPressed cp 3 jr z,RightKeyIsPressed cp $37 jp z,Beginning ld a,(lilguyy) cp %10000000 jp z,AreYouFinished GuessNot: jr WaitForSecond LeftKeyIsPressed: ld a,(lilguyx) or a jr z,WaitForKey call LoadBoardColumnIntoHL dec hl ld b,(hl) ld a,(lilguyy) and b or a jr nz,WaitForKey call EraseLilGuy ld a,(lilguyx) dec a ld (lilguyx),a call DrawLilGuy jp Gravity RightKeyIsPressed: ld a,(lilguyx) cp 11 jr z,WaitForKey call LoadBoardColumnIntoHL inc hl ld b,(hl) ld a,(lilguyy) and b or a jr nz,WaitForKey call EraseLilGuy ld a,(lilguyx) inc a ld (lilguyx),a call DrawLilGuy jp Gravity GraphIsPressed: ld a,(lilguyx) cp 11 jr z,WaitForKey ld a,(otherlilguyy) or a jr z,WaitForKey call LoadBoardColumnIntoHL inc hl ld b,(hl) ld a,(lilguyy) rrca and b or a jp nz,WaitForKey call EraseLilGuy ld a,(lilguyx) inc a ld (lilguyx),a ld a,(lilguyy) rrca ld (lilguyy),a ld a,(otherlilguyy) sub 8 ld (otherlilguyy),a ld a,(yetanotherlilguyy) rrca ld (yetanotherlilguyy),a call DrawLilGuy jp Gravity TraceIsPressed: ld a,(lilguyx) or a jp z,WaitForKey ld a,(otherlilguyy) or a jp z,WaitForKey call LoadBoardColumnIntoHL dec hl ld b,(hl) ld a,(lilguyy) rrca and b or a jp nz,WaitForKey call EraseLilGuy ld a,(lilguyx) dec a ld (lilguyx),a ld a,(lilguyy) rrca ld (lilguyy),a ld a,(otherlilguyy) sub 8 ld (otherlilguyy),a ld a,(yetanotherlilguyy) rrca ld (yetanotherlilguyy),a call DrawLilGuy jp Gravity SecondIsPressed: ld a,$fe out (1),a in a,(1) bit 1,a jr z,SecondLeftIsPressed bit 2,a jr z,SecondRightIsPressed bit 0,a jr z,SecondDownIsPressed jp WaitForSecond SecondLeftIsPressed: ld a,(lilguyx) or a jp z,WaitForKey call LoadBoardColumnIntoHL dec hl ld b,(hl) ld a,(lilguyy) and b or a jp z,WaitForKey ld a,(yetanotherlilguyy) ld b,(hl) and b ld (hl),a ld a,(lilguyx) ld c,a dec c ld a,(otherlilguyy) ld b,a ld hl,Nothing call ZoomSprite ld a,(score) inc a ld (score),a call GET_KEY jp WaitForKey SecondRightIsPressed: ld a,(lilguyx) cp 11 jp z,WaitForKey call LoadBoardColumnIntoHL inc hl ld b,(hl) ld a,(lilguyy) and b or a jp z,WaitForKey ld a,(yetanotherlilguyy) ld b,(hl) and b ld (hl),a ld a,(lilguyx) ld c,a inc c ld a,(otherlilguyy) ld b,a ld hl,Nothing call ZoomSprite ld a,(score) inc a ld (score),a call GET_KEY jp WaitForKey SecondDownIsPressed: ld a,(otherlilguyy) cp 56 jp z,WaitForKey call LoadBoardColumnIntoHL ld b,(hl) ld a,(lilguyy) rlca and b or a jp z,WaitForKey ld a,(yetanotherlilguyy) rlca ld b,(hl) and b ld (hl),a ld a,(lilguyx) ld c,a ld a,(otherlilguyy) add a,8 ld b,a ld hl,Nothing call ZoomSprite ld a,(score) inc a ld (score),a ld b,0 ld c,0 GiveSufficientTime: inc b ld a,b cp $ff jr nz,GiveSufficientTime inc c ld a,c cp $80 jr nz,GiveSufficientTime jp Gravity AreYouFinished: ld a,(lilguyx) cp 11 jp nz,GuessNot YouAreFinished: ld de,$c20 ld hl,YourScore call vputs ld a,(score) ld h,0 ld l,a call DM_HL_DECI ld hl,HighScore ld a,(score) cp (hl) jr z,Loop jr nc,YouGotTheHighScore Loop: call GET_KEY cp 9 jp z,Beginning cp $37 jp z,Beginning jr Loop YouGotTheHighScore: ld de,$1300 ld hl,CongratulationsHighScore call vputs ld de,$1913 call vputs ld hl,HighScore ld a,(score) ld (hl),a ld de,0 NewInitial: ld hl,$0604 ld (CURSOR_ROW),hl ld hl,HighScoreBuffer add hl,de push hl res 3,(IY+05) ld hl,HighScoreBuffer-1 ld a,(hl) ROM_CALL(TX_CHARPUT) pop hl push hl ld a,e or a call z,HighlightFirstLetter cp 1 call z,HighlightSecondLetter cp 2 call z,HighlightThirdLetter pop hl EnterInitials: push hl call GET_KEY pop hl cp 4 jr z,EI_UpIsPressed cp 1 jr z,EI_DownIsPressed cp 3 jr z,EI_RightIsPressed cp 2 jr z,EI_LeftIsPressed cp 9 jp z,Beginning jr EnterInitials EI_UpIsPressed: inc (hl) ld a,(hl) cp $5b jr nz,NewInitial ld (hl),$41 jr NewInitial EI_DownIsPressed: dec (hl) ld a,(hl) cp $40 jr nz,NewInitial ld (hl),$5a jr NewInitial EI_RightIsPressed: ld a,e cp 3 jr z,NewInitial inc e jr NewInitial EI_LeftIsPressed: ld a,e or a jr z,EnterInitials dec e jr NewInitial HighlightFirstLetter: set 3,(IY+05) ld a,(hl) ROM_CALL(TX_CHARPUT) res 3,(IY+05) inc hl ld a,(hl) ROM_CALL(TX_CHARPUT) inc hl ld a,(hl) ROM_CALL(TX_CHARPUT) ret HighlightSecondLetter: dec hl res 3,(IY+05) ld a,(hl) ROM_CALL(TX_CHARPUT) set 3,(IY+05) inc hl ld a,(hl) ROM_CALL(TX_CHARPUT) res 3,(IY+05) inc hl ld a,(hl) ROM_CALL(TX_CHARPUT) inc hl ret HighlightThirdLetter: dec hl dec hl res 3,(IY+05) ld a,(hl) ROM_CALL(TX_CHARPUT) inc hl ld a,(hl) ROM_CALL(TX_CHARPUT) set 3,(IY+05) inc hl ld a,(hl) ROM_CALL(TX_CHARPUT) inc hl inc hl ret EraseLilGuy: ld a,(otherlilguyy) ld b,a ld a,(lilguyx) ld c,a ld hl,Nothing call ZoomSprite ret DrawLilGuy: ld a,(otherlilguyy) ld b,a ld a,(lilguyx) ld c,a ld hl,Man call ZoomSprite ret LoadBoardColumnIntoHL: ld d,0 ld a,(lilguyx) ld e,a ld hl,Board add hl,de ret ZoomSprite: ld d,0 ZS_Draw: ld a,$20 add a,c call $7f3 out ($10),a ld a,$80 add a,b call $7f3 out ($10),a ld a,(hl) call $7f3 out ($11),a inc d ld a,d cp 8 ret z inc b inc hl jr ZS_Draw ExitGame: res 1,(IY+05) ;fixes bug that crashed calc ret vputs: ld (CURSOR_X),de ROM_CALL(D_ZM_STR) ret ;--- Jimmy Mardell's DM_HL_DECI Code DM_HL_DECI: ld de, string+5 xor a ld (de), a DM_HL_DECI_Repeat: call UNPACK_HL add a, '0' dec de ld (de), a ld a, h or l jr nz, DM_HL_DECI_Repeat ex de, hl ROM_CALL(D_ZM_STR) ret ;getrand.asm by Jason Todd: GETRAND: ; SET UP (RANDSEED) WITH A WORD PUSH HL ; MAYBE HAVE A COUNTER AT THE TITLE SCREEN PUSH BC ; IF YOU'RE WAITING FOR A KEY TO BE PRESSED. LD HL,(RANDSEED) ; LD A,H ; JASON TODD (ALPHASOFT) ADD A,A RL L RL H ADD A,A RL L RL H ADD A,A RL L RL H LD BC,$7415 ADD HL,BC LD (RANDSEED),HL LD A,H ADD A,L POP BC POP HL RET Title1: .db " ",0 AuthorStuff: .db "ZoomLabs Software",0 .db "Doug Torrance",0 .db "profzoom@hotmail.com",0 .db "High Score - " HighScoreBuffer: .db "DAT" HighScoreTextContinued: .db " - ",0 HighScore: .db 0,0 Start: .db " START",0 Help: .db " HELP",0 HelpText: .db $c1,$cf,"]&",$c1,5,"]-move",0 .db $c1,"TRACE]&",$c1,"GRAPH]-jump",0 .db $c1,"2nd]+",$c1,$cf,"],",$c1,5,"] or ",$c1,7,"]-",0 .db "break block",0 .db $c1,"MODE]-exit",0 YourScore: .db "Score-",0 CongratulationsHighScore: .db "Congratulations! High Score!",0 .db "Enter your initials...",0 Board: .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 .db %00000000 Man: ;new grafx thanx to Blackbelt, make the game look a bit nicer (from 83 version) .db %01111100 .db %10101010 .db %00010000 .db %00111000 .db %01111100 .db %10111010 .db %00010000 .db %01101100 BreakableBlock: .db %01111110 .db %11010101 .db %10101011 .db %11010101 .db %10101011 .db %11010101 .db %10101011 .db %01111110 Exit: .db %01111110 .db %11111111 .db %11000011 .db %11000011 .db %11000011 .db %11000011 .db %11000011 .db %11000011 Nothing: .db 0,0,0,0,0,0,0,0 RANDSEED: .db 0,0