home *** CD-ROM | disk | FTP | other *** search
- #include "ti82.h"
- #include "keys.inc"
-
- ;-------------------------------------------------------------------------------
- ;Variables in text-memory:
- ;-------------------------------------------------------------------------------
- LEVELY = TEXT_MEM ;position in level
- SCROLLY = TEXT_MEM+1 ;position in level-y
- LEVELPT = TEXT_MEM+2 ;pointer to level data
- BKPT = TEXT_MEM+4 ;pointer to background
- PLAYERPT = TEXT_MEM+6 ;pointer to player
- JUMPFLAG = TEXT_MEM+8 ;0 = no jump; 1 = up; 2 = down
- PLAYERPT1 = TEXT_MEM+9 ;pointer to black-player image
- ANICOUNT = TEXT_MEM+11 ;animation counter
- SPEED = TEXT_MEM+12 ;speed of ball
- LIFE = TEXT_MEM+14 ;lifes of player
- SCORE = TEXT_MEM+15 ;contains player's score
- ORIGLVL = TEXT_MEM+17 ;pointer to start of level
- BALLX = TEXT_MEM+19 ;only needed for savegame
- BALLY = TEXT_MEM+20
- Data = TEXT_MEM+21 ;needed for ZCP
- StringPlace = TEXT_MEM+22
- ZeroByte = TEXT_MEM+27
- HiScoreTemp = TEXT_MEM+28
- Count = TEXT_MEM+30
- TempByte = TEXT_MEM+31
- MASK = TEXT_MEM+32
- ANISCROLLC = TEXT_MEM+33
- KEYPRESS = TEXT_MEM+34
- ;-------------------------------------------------------------------------------
- BITMAPMEM = APD_BUF ;this points to the graph mem
-
- .org START_ADDR
- .DB "PlainJump v1.0",0
-
- ;-------------------------------------------------------------------------------
- ;Program start!
- ;-------------------------------------------------------------------------------
- SaveCheck:
- LD A,$8C ;Needed for
- OUT (2),A ;FIND_PIXEL
- res 1,(iy+13) ;Same with TextShadow
- ;res 6,(iy+9) ;VERY IMPORTANT since I am using the STATVARS. Thanks SCaBBY!
-
- call ClearGraphMem
- call ClearAPDBUF
- ld HL, LevelSaved
- ld A, (HL)
- and A
- jp nz, LoadGame
-
- Title:
- call ClearGraphMem
- call ClearAPDBUF
- ld de,$88b8
- ld bc,400
- ld hl,TitlePicture
- ldir
- call fastCopy
- ld hl,Instr
- ld de, 50*256+12
- call DMX
- ld de, 36*256+4
- call DMX
- ld de,57*256+1
- call DMX
-
-
- ld de,43*256+10
- call DMX
-
- ld de,43*256+43
- call DMX
-
- ld hl,43*256+65
- ld (CURSOR_X),HL
- ld hl,HiScore
- call LD_HL_MHL
- call HL_DECIMAL_MENU
-
-
- WaitForKey:
- call GET_KEY
- or a
- jr z, WaitForKey
- cp G_MODE
- jp z,ExitGame
- cp G_ALPHA
- jp z,LevelEditor
- cp G_2nd
- jr z,userlevel
-
- jr RegularGame
-
- ;------------------------------------>>>>>>Replace w/SavedGame Stuff!
- LoadGame:
- ROM_CALL(CLEARLCD)
- ld hl, LevelSaved
- ld a, (hl)
- cp 0
- jr z, RegularGame
- ;Copy saved game(20 bytes) to TEXT_MEM
- ld bc, 21
- inc hl
- ld de, LEVELY
- ldir
- CALL DrawScreen
- ld a, (BALLX)
- ld b, a
- ld a, (BALLY)
- ld c, a
- ld a, 0
- ld (SCROLLY), a
- CALL ScanBk
- JP GameLoop
-
- userlevel:
- ld hl, Level
- ld (LEVELPT), hl
- ld (ORIGLVL), hl
- call BuiltInLevels
- jp lost2
-
- RegularGame:
- ;Do some initialisation
- ld hl, Level1
- ld (LEVELPT), hl
- ld (ORIGLVL), hl
- call BuiltInLevels
- jr StartAfterLife
-
- BuiltInLevels:
- ld hl, BackgroundTemp
- ld (BKPT), hl
- ld hl, WhiteBall
- ld (PLAYERPT), hl
- ld hl, BlackBall1
- ld (PLAYERPT1), hl
- ROM_CALL(CLEARLCD)
- xor a
- ld (SCROLLY), a
- ld (LEVELY), a
- ld (JUMPFLAG), a
- ld (ANICOUNT), a
- ld (SPEED), a
- ld hl, 0
- ld (SCORE), hl
- ld a, 6
- ld (LIFE), a
- ret
- ;Draw screen first time:
- StartAfterLife:
- ld b, 40
- ld c, 46
- StartGameLoop:
- ld HL, $0003
- ld ($800C), HL
- ld HL, LifeStatus
- ROM_CALL(D_ZT_STR)
- ld A, (LIFE)
- ld H, 0
- ld L, A
- ROM_CALL(D_HL_DECI)
- WaitInfo:
- ei
- halt
- call GET_KEY
- cp G_ENTER
- jr nz, WaitInfo
- push bc
- call ClearGraphMem
- call ClearAPDBUF
- call DrawScreen
- pop bc
- ;ld hl, (LEVELPT)
- ;inc hl
- ;ld (LEVELPT), hl
- call ScanBk
-
- ;-------------------------------------------------------------------------------
- ;The game loop:
- ;-------------------------------------------------------------------------------
- GameLoop:
- call DrawBk ;erase ball
- ld a,c
- cp 46
- jr nz,TestKeys
- push BC
- ld A, B
- add A, 8
- ld B, A
- ld C, 63-60
- call FIND_PIXEL
- ld DE, BITMAPMEM
- add HL, DE
- and (HL)
- pop BC
- jp z, LostLife
- TestKeys:
- push bc
- ld a,$FE
- out (1),a
- in a,(1)
- ld b,a
- ld a,$BF
- out (1),a
- in a,(1)
- or $0F
- and b
- pop bc
- cp $FF
- jp z,Redraw
- TestLeftKey:
- ld d,a
- ld a,(SPEED)
- ld e,a
- bit 1,d
- jr nz,TestRightKey
- ld a,b
- cp 2
- jr c,TestRightKey
- dec b
- ld a,e
- cp 3
- jr nz,TestRightKey
- dec b
- TestRightKey:
- bit 2,d
- jr nz,TestUpKey
- ld a,b
- cp 80
- jr nc,TestUpKey
- inc b
- ld a,e
- cp 3
- jr nz,TestUpKey
- inc b
- TestUpKey:
- bit 3,d
- jr nz,TestDownKey
- ld a,e
- cp 3
- jr nc,TestDownKey
- inc e
- TestDownKey:
- bit 0,d
- jr nz,Test2ndKey
- ld a,e
- or a
- jr z,Test2ndKey
- dec e
- Test2ndKey:
- ld a,e
- ld (SPEED),a
- bit 5,d
- jr nz,TestExitKey
- ld a,(JUMPFLAG)
- or a
- jr nz,TestExitKey
- inc a
- ld (JUMPFLAG),a
- TestExitKey:
- bit 6,d
- jp z,ExitGame
- TestPauseKey:
- bit 7,d
- jp z,Pause
- TestF1Key:
- bit 4,d
- jp z,LSaveGame
-
- Redraw:
- ld a,(JUMPFLAG)
- or a
- jr z,ReallyRedraw
- dec a
- jr nz,FlyDown
- ld a,c
- cp 20
- jr z,SetFlyDown
- dec c
- jr ReallyRedraw
- SetFlyDown:
- ld a,2
- ld (JUMPFLAG),a
- FlyDown:
- ld a,c
- cp 46
- jr nz,FlyDown1
- xor a
- ld (JUMPFLAG),a
- jr ReallyRedraw
- FlyDown1:
- inc c
- ReallyRedraw:
- ld a,(SPEED)
- or a
- jr z,RedrawBall
- push bc
- ld b,a
- DoScrolling:
- call DoScroll
- djnz DoScrolling
- pop bc
-
- RedrawBall:
- call ScanBk
- ld de,WhiteBall
- call WhiteSprite
- ld de,(PLAYERPT1)
- call BlackSprite
-
- ld a,(ANISCROLLC)
- ld hl,SPEED
- add a,(hl)
- ld (ANISCROLLC),a
- cp 6
- jr c,GoOnMainLoop
-
- xor a
- ld (ANISCROLLC),a
- ld hl,ANICOUNT
- inc (hl)
- ld a,(hl)
- cp 3
- jr nz,NextFrame
- ld (hl),0
- ld hl,BlackBall1
- ld (PLAYERPT1),hl
- jr GoOnMainLoop
- NextFrame:
- ld hl,(PLAYERPT1)
- ld de,32
- add hl,de
- ld (PLAYERPT1),hl
-
- GoOnMainLoop:
-
- ;copy GRAPH-MEM to LCD-MEM
- push bc
- ld de,GRAPH_MEM
- ld hl,APD_BUF
- ld bc,768
- ldir
- ei
- halt
- halt
- call fastCopy
- pop bc
- jp GameLoop
-
- ;---------------------------------------------------------
- ; WhiteSprite: draws each white element of a 24*24 sprite
- ;---------------------------------------------------------
- WhiteSprite:
- push bc
- push de
- ld a,32
- ld (TempByte),a
- ld A, 63
- sub C
- ld C, A
- call FIND_PIXEL
- ld de,APD_BUF
- add hl,de
- pop de
- ld c,a
- ld b,128
- WSLoop:
- ld a,(de)
- and b
- jr nz,WSLoop1
- ld a,c
- cpl
- and (hl)
- ld (hl),a
- WSLoop1:
- rrc c
- jr nc,WSLoop2
- inc hl
- WSLoop2:
- rrc b
- jr nc,WSLoop
- WSNextLine:
- inc de
- ld a,(TempByte)
- dec a
- ld (TempByte),a
- jr z,WSEndBMP
- bit 0,a
- jr nz,WSLoop
- push de
- ld de,10
- add hl,de
- pop de
- jr WSLoop
- WSEndBMP:
- pop bc
- ret
-
- ;---------------------------------------------------------
- ; BlackSprite: draws each black element of a 24*24 sprite
- ;---------------------------------------------------------
- BlackSprite:
- push bc
- push de
- ld a,32
- ld (TempByte),a
- ld A, 63
- sub C
- ld C, A
- call FIND_PIXEL
- ld de,APD_BUF
- add hl,de
- pop de
- ld c,a
- ld b,128
- BSLoop:
- ld a,(de)
- and b
- jr z,BSLoop1
- ld a,(hl)
- or c
- ld (hl),a
- BSLoop1:
- rrc c
- jr nc,BSLoop2
- inc hl
- BSLoop2:
- rrc b
- jr nc,BSLoop
- BSNextLine:
- inc de
- ld a,(TempByte)
- dec a
- ld (TempByte),a
- jr z,BSEndBMP
- bit 0,a
- jr nz,BSLoop
- push de
- ld de,10
- add hl,de
- pop de
- jr BSLoop
- BSEndBMP:
- pop bc
- ret
-
- ;------------
- ; Drawscreen
- ;------------
- DrawScreen:
- push bc
- ld ix,(LEVELPT)
- ld e,(ix)
- ld b,31
- DrawScrLoop:
- ld a,b
- add a,32
- ld d,a
- call DrawLine
- djnz DrawScrLoop
- ld e,(IX+1)
- ld b,21
- DrawScrLoop1:
- ld a,b
- add a,11
- ld d,A
- call DrawLine
- djnz DrawScrLoop1
- ld e,(ix+2)
- ld b,11
- DrawScrLoop2:
- ld d,b
- call DrawLine
- djnz DrawScrLoop2
- pop bc
- ret
-
-
- ;-------------------------------------------------------------------------------
- ;DrawLine: this draws a line at y-pos D, accoriding to bits in E
- ;-------------------------------------------------------------------------------
- DrawLine:
- push BC
- push IX
- ld IX, StartLine
- ld B, 0
- ld C, D
- sla C
- add IX, BC
- add IX, BC
- ;IX now contains pointer to StartLine1
-
- ld L, $80
- DrawLine_Loop1:
- ld A, 47
- sub (IX)
- ld B, A
- ld A, 47
- sub (IX+1)
- ld C, A
- bit 4, L
- jr z, NotMiddle
- ld C, 47
- NotMiddle:
- inc IX
-
- ld A, E
- and L
- jr z, WhiteLine_1
- call BlackLine
- jr DrawLine_Loop1_2
- WhiteLine_1:
- call WhiteLine
- DrawLine_Loop1_2:
- rrc L
- ld A, L
- cp $08
- jr nz, DrawLine_Loop1
-
- dec IX
- ld B, 47 ;63
- jr SkipMiddle
- DrawLine_Loop2:
- ld A, (IX+1)
- add A, 47 ; 63
- ld B, A
- SkipMiddle:
- ld A, (IX)
- add A, 47 ;63
- ld C, A
- dec IX
-
- ld A, E
- and L
- jr z, WhiteLine_2
- call BlackLine
- jr DrawLine_Loop2_2
- WhiteLine_2:
- call WhiteLine
- DrawLine_Loop2_2:
- rrc L
- jr nc, DrawLine_Loop2
- pop IX
- pop BC
- ret
-
- ;---------------------------------------------------------------
- ; WhiteLine: draws a horizontal, white line from (B,D) to (C,D)
- ;---------------------------------------------------------------
- WhiteLine:
- push hl
- push de
- ld a,c
- sub b
- push af
- ld A, 63
- sub D
- ld C, A
- call FIND_PIXEL
- ld de,BITMAPMEM
- add hl,de
- ld b,a
- pop af
- ld c,a
- WLoop:
- ld a,b
- cpl
- and (hl)
- ld (hl),a
- dec c
- jr z,EndWhite
- rrc b
- jr nc,WLoop
- inc hl
- jr WLoop
-
- EndWhite:
- ;fastCopy
- pop de
- pop hl
- ret
-
- ;-------------------------------------------------------------------------------
- ;BlackLine: draws a horizontal, black line from (B,D) to (C,D)
- ;-------------------------------------------------------------------------------
- BlackLine:
- push hl
- push de
- ld a,c
- sub b
- push af
- ld A, 63
- sub D
- ld C, A
- call FIND_PIXEL
- ld de,BITMAPMEM
- add hl,de
- ld b,a
- pop af
- ld c,a
- BLoop:
- ld a,(hl)
- or b
- ld (hl),a
- dec c
- jr z,EndBlack
- rrc B
- jr nc,BLoop
- inc hl
- jr BLoop
- EndBlack:
- ;fastCopy
- pop de
- pop hl
- ret
-
- ExitGame:
- ld hl, LevelSaved
- ld a,0
- ld (hl),a
-
- call ClearGraphMem
- ;set 6,(iy+9) ;Restore the StatVars, to avoid screen garbage
- set 1,(iy+13) ;Same with TextShadow
- ret
-
- ;-------------------------------------------------------------------------------
- ;ScanBk: stores background from(B,C)-(B+24,C+24) in BKPT
- ;-------------------------------------------------------------------------------
- ScanBk:
- push bc
- ld a, 63
- sub c
- ld c, a
- call FIND_PIXEL
- ld de,BITMAPMEM
- add hl,de
- ld de,BackgroundTemp
- ld b,23
- ScanLoop:
- push bc
- ld bc, 4
- ldir ;move 4 bytes from hl to de
- pop bc
- push de ;next line in vid-ram
- ld de, 8
- add hl, de
- pop de
- djnz ScanLoop
- pop bc
- ret
-
- ;-------------------------------------------------------------------------------
- ;DrawBk: draws background from(B,C)-(B+24,C+24) in BKPT
- ;-------------------------------------------------------------------------------
- DrawBk:
- push bc
- ld a, 63
- sub c
- ld c, a
- call FIND_PIXEL
- ld de,BITMAPMEM
- add hl,de
- ld de,BackgroundTemp
- ex de,hl
- ld b, 23 ;23 lines to draw
- PutLoop:
- push bc
- ld bc, 4
- ldir ;move 4 bytes from hl to de
- pop bc
- push hl ;next line in vid-ram
- ld hl, 8
- add hl, de
- ex de, hl
- pop hl
- djnz PutLoop
- pop bc
- ret
-
-
-
- ;-------------------------------------------------------------------------------
- ;Built-in Level editor:
- ;-------------------------------------------------------------------------------
- LevelEditor:
- ROM_CALL(CLEARLCD)
- call ClearGraphMem
- ld hl, Level
- ld (LEVELPT), hl
- xor a
- ld (LEVELY), a
- set 7,(iy+$14)
- ld e, 10
- ld d, 1
- ld hl, Arrow
- call DMX
- ld d, 8
- call DMX
- ld d, 15
- call DMX
- ld d,22
- call DMX
- ld d,29
- call DMX
- res 7,(iy+$14)
- call EDrwScreen
- ld a, $C0
- ld (MASK), a
- ld b, 0
- ld c, 60
- KeyLoop:
- call PointChg
- WaitKey:
- call GET_KEY
- or a
- jr z, WaitKey
- push af
- call PointChg
- pop af
- cp $01
- jr z, MoveUp ;Flip the keys...
- cp $02
- jr z, MoveLeft
- cp $03
- jr z, MoveRight
- cp $04
- jr z, MoveDown ;Had to flip the keys...
- cp $36
- jp z,ChangeStone
- cp $37
- jp z,ExitEditor
- cp $0F
- jp z,ClearLevel
- jr KeyLoop
- MoveDown:
- ld a, (LEVELY)
- or a
- jr z, KeyLoop
- dec a
- ld (LEVELY), a
- inc c
- inc c
- ld a, c
- cp 62
- jr nz, KeyLoop
- ld hl, (LEVELPT)
- dec hl
- ld (LEVELPT), hl
- ld c, 60
- call EDrwScreen
- jr KeyLoop
- MoveLeft:
- ld a, b
- or a
- jr z, KeyLoop
- dec b
- dec b
- ld a, (MASK)
- add a, a
- add a, a
- ld (MASK), a
- jr KeyLoop
- MoveRight:
- ld a, b
- cp 6
- jr z, KeyLoop
- inc b
- inc b
- ld a, (MASK)
- srl a
- srl a
- ld (MASK), a
- jr KeyLoop
- MoveUp:
- ld a, (LEVELY)
- cp 253
- jp z,KeyLoop
- inc a
- ld (LEVELY), a
- dec c
- dec c
- ld a, c
- or a
- jp nz,KeyLoop
- ld hl, (LEVELPT)
- inc hl
- ld (LEVELPT), hl
- ld c, 2
- call EDrwScreen
- jp KeyLoop
- ChangeStone:
- ld hl, (LEVELPT)
- ld a, 60
- sub c
- ld e, a
- srl e
- ld d, 0
- add hl, de
- ld a, (MASK)
- xor (hl)
- ld (hl), a
- call EDrwScreen
- jp KeyLoop
-
-
- ClearLevel:
- ld hl, (LEVELPT)
- ld b, 255
- ld a,-1
- ClearLL:
- ld (hl), a
- inc hl
- djnz ClearLL
- call EDrwScreen
- jp KeyLoop
-
- ExitEditor:
- ld hl, (LEVELPT)
- ld de, (LEVELPT)
- ld bc, 254
- add hl, bc
- ex de, hl
- ldi
- ldi
- call ClearGraphMem
- jp Title
-
- ;-----------------------------------------------------------------------------
- ;EDrwScreen: draws screen
- ;-----------------------------------------------------------------------------
- EDrwScreen:
- push bc
- call ClearGraph
- ld hl, (LEVELPT)
- ld b, 30
- DrawLoop:
- ld a, b
- add a, a
- ld c, a
- push bc
- bit 6, (hl)
- ld b, 0
- call nz,DrawBox
- bit 4, (hl)
- ld b, 2
- call nz,DrawBox
- bit 2, (hl)
- ld b, 4
- call nz,DrawBox
- bit 0, (hl)
- ld b, 6
- call nz,DrawBox
- pop bc
- inc hl
- djnz DrawLoop
- call fastCopy
- pop bc
- ret
-
- ;-----------------------------------------------------------------------------
- ;DrawBox
- ;-----------------------------------------------------------------------------
- DrawBox:
- push bc
- call PointOn
- inc b
- call PointOn
- inc c
- call PointOn
- dec b
- call PointOn
- pop bc
- ret
-
- ;-----------------------------------------------------------------------------
- ;PointOn: draws point at b=x, c=y
- ;-----------------------------------------------------------------------------
- PointOn:
- push hl
- push bc
- call FIND_PIXEL ;HL=byte offset in video buffer, A=2^(bit to change)
- ld de, GRAPH_MEM
- add hl, de
- or (hl)
- ld (hl),a
- pop bc
- pop hl
- ret
-
- ;-----------------------------------------------------------------------------
- ;PointChg: changes point at b=x, c=y
- ;-----------------------------------------------------------------------------
- PointChg:
- push bc
- push hl
- call FIND_PIXEL
- ld de,GRAPH_MEM
- add hl,de
- xor (hl)
- ld (hl),a
- call fastCopy
- pop hl
- pop bc
- ret
-
-
- ClearGraphMem:
- ld hl,GRAPH_MEM
- ld (hl),0
- ld de,GRAPH_MEM+1
- ld bc,767
- ldir
- ret
- ;-------------------------------------------------------------------------------
- ;Some important variables:
- ;-------------------------------------------------------------------------------
- Arrow: .db "USE ARROWS TO MOVE,",0
- Second: .db "2ND TO Change Block",0
- Clear: .db "CLEAR TO Erase Level",0
- Down: .db "DOWN TO Scroll Down",0
- Exit: .db "MODE TO Save & Exit",0
-
- Instr: .db "Press Any Key to Play!",0
- ByStr2: .db "By: Andreas Ess/Sam Heald",0
- PortStr: .db "2ND-User Lvl ALPHA-Editor",0
-
- HiScrTxt: .db "HiScore: ",0
- HiScrName: .db "AND",0
- HiScore: .dw 10 ;This is standard hi-score
- HiScr: .db "NEW HIGH SCORE!",0
- EnterInit: .db "ENTER YOUR INITIALS:",0
-
-
-
- StartLine:
- .db 16,12,8,4 ;#0
- .db 16,12,8,4
- .db 17,12,8,4
- .db 17,13,8,4
- .db 18,13,9,4 ;#4
- .db 18,13,9,4
- .db 19,14,9,4
- .db 19,14,9,5
- .db 20,14,10,5 ;#8
- .db 20,15,10,5
- .db 21,15,10,5
- .db 21,15,10,5
- .db 22,16,11,5 ;#12
- .db 22,16,11,5
- .db 23,16,11,6
- .db 23,17,11,6
- .db 24,17,12,6 ;#16
- .db 24,17,12,6
- .db 25,18,12,6
- .db 25,18,12,6
- .db 26,18,13,6 ;#20
- .db 26,19,13,7
- .db 27,19,13,7
- .db 27,19,13,7
- .db 28,20,14,7 ;#24
- .db 28,20,14,7
- .db 29,20,14,7
- .db 29,21,14,7
- .db 30,21,15,8 ;#28
- .db 30,21,15,8
- .db 31,22,15,8
- .db 31,22,15,8
- .db 32,22,16,8 ;#32
- .db 32,23,16,6
- .db 33,23,16,7
- .db 33,23,16,9
- .db 34,24,17,9 ;#36
- .db 34,24,17,9
- .db 35,24,17,9
- .db 35,25,17,9
- .db 36,25,18,9 ;#40
- .db 36,25,18,9
- .db 37,26,18,10
- .db 37,26,18,10
- .db 38,26,19,10 ;#44
- .db 38,27,19,10
- .db 39,27,19,10
- .db 39,27,19,10
- .db 40,28,20,10 ;#48
- .db 40,28,20,11
- .db 41,28,20,11
- .db 41,29,20,11
- .db 42,29,21,11 ;#52
- .db 42,29,21,11
- .db 43,30,21,11
- .db 43,30,21,11
- .db 44,30,22,12 ;#56
- .db 44,31,22,12
- .db 45,31,22,12
- .db 45,31,22,12
- .db 46,32,23,12 ;#60
- .db 46,32,23,12
- .db 47,32,23,12
- .db 47,32,23,12
-
- ;-------------------------------------------------------------------------------
- ;Bitmapdata:
- ;-------------------------------------------------------------------------------
- BackgroundTemp = TEXT_MEM2
-
- WhiteBall:
- .db $FF,$FF,$FF,$FF,$F8,$3F,$E0,$0F,$C0,$07,$C0,$07,$80,$03,$80,$03
- .db $80,$03,$80,$03,$80,$03,$C0,$07,$C0,$07,$E0,$0F,$F8,$3F,$FF,$FF,
-
- BlackBall1:
- .db $00,$00,$07,$C0,$18,$30,$20,$08,$40,$04,$40,$04,$80,$02,$80,$02
- .db $80,$02,$C0,$06,$A0,$0A,$54,$54,$6A,$AC,$35,$58,$1A,$B0,$07,$C0
-
- .db $00,$00,$07,$C0,$18,$30,$20,$08,$40,$04,$40,$04,$8A,$A2,$D5,$56
- .db $AA,$AA,$D5,$56,$8A,$A2,$40,$04,$40,$04,$20,$08,$18,$30,$07,$C0
-
- .db $00,$00,$07,$C0,$1A,$B0,$35,$58,$6A,$AC,$54,$54,$A0,$0A,$C0,$06
- .db $80,$02,$80,$02,$80,$02,$40,$04,$40,$04,$20,$08,$18,$30,$07,$C0
-
- Level1:
- .db $FF,$3C,$FF,$3C,$0C,$0C,$0F,$03,$03,$03,$C0,$C0,$C0,$FF,$FF,$00 ;16
- .db $FF,$FF,$00,$3C,$3C,$00,$03,$0C,$30,$C0,$FF,$3C,$C3,$C3,$03,$FF ;32
- .db $33,$33,$03,$30,$03,$30,$03,$C0,$FF,$03,$03,$C0,$0C,$C3,$CF,$CF ;48
- .db $C0,$C0,$FF,$00,$0C,$00,$30,$00,$03,$00,$C0,$F3,$F3,$F3,$F0,$C0 ;72
- .db $C0,$F0,$30,$3C,$0C,$0F,$03,$03,$03,$F0,$F0,$00,$FF,$3C,$FF,$C0 ;80
- .db $00,$30,$FF,$FC,$F0,$C0,$03,$C0,$03,$FF,$FF,$F3,$FF,$CF,$FF,$C3 ;96
- .db $3C,$00,$C3,$00,$03,$00,$00,$FF,$FF,$03,$0C,$30,$C0,$30,$C0,$03 ;112
- .db $FF,$00,$00,$3C,$00,$03,$00,$00,$FF,$00,$00,$FF,$FF,$F3,$CF,$F3 ;128
- .db $00,$00,$C0,$00,$00,$00,$FF,$0C,$0C,$0F,$03,$03,$0F,$0C,$0F,$30 ;144
- .db $F0,$C0,$C0,$00,$FF,$00,$00,$03,$03,$03,$03,$03,$C0,$C0,$00,$00 ;160
- .db $FF,$F3,$FC,$F3,$CF,$3F,$3F,$00,$00,$FF,$00,$00,$FF,$00,$00,$FF ;176
- .db $C3,$3C,$C3,$F3,$FC,$FF,$00,$00,$00,$03,$FF,$C0,$F0,$03,$3C,$0C ;192
- .db $0F,$03,$03,$00,$00,$C0,$FF,$FF,$F3,$CF,$CF,$F3,$FF,$03,$0C,$03 ;208
- .db $00,$FF,$3C,$FF,$00,$FF,$33,$CC,$CC,$33,$3C,$00,$FF,$00,$00,$00 ;224
- .db $FF,$FF,$03,$C0,$30,$0C,$30,$0C,$FF,$00,$FF,$F3,$CF,$3F,$00,$FF ;240
- .db $FF,$00,$FF,$00,$3C,$00,$3C,$00,$3C,$00,$30,$00,$30,$00,$00,$00,$FF ;256
-
- ;-------------------------------------------------------------------------------
- ;This is the edit-able level:
- ;-------------------------------------------------------------------------------
- Level:
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
-
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF
- .db $FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$FF,$00,$FF,$00
-
- ;---------------------------------------------------------------------------------
- ;Title Picture
- ;---------------------------------------------------------------------------------
- TitlePicture:
- .db 16,0,8,0,0,0,0,0,0,0,0,16,0,0,0,0,0,0,0,0,0,8,0,48,16,8,4,0,0,0,0
- .db 0,0,1,131,248,0,0,2,0,0,0,0,0,0,0,127,252,16,16,3,0,0,0,0,198,2,0,62,6,48,96
- .db 35,224,0,2,3,239,128,0,24,131,60,224,15,48,0,0,7,109,224,128,26,113,255,192,6,28,0,8,14,120,112
- .db 72,52,249,195,192,6,159,144,0,28,56,24,121,180,252,1,193,6,220,0,16,56,48,184,61,241,252,0,228,119,48
- .db 0,48,112,17,176,63,241,252,60,120,255,240,112,96,232,139,112,55,113,252,126,120,223,225,252,224,118,56,102,119,112
- .db 249,126,113,143,243,15,192,57,246,111,99,114,3,126,97,143,158,3,192,31,179,253,226,49,143,60,225,143,30,0,224
- .db 31,51,249,224,17,254,1,227,143,31,0,112,63,51,240,192,16,248,135,247,7,31,32,48,63,51,248,64,18,192,127
- .db 255,7,31,112,56,103,51,248,64,16,96,63,255,39,31,60,24,195,49,248,64,9,96,31,222,115,31,63,29,131,24
- .db 249,80,137,96,31,142,115,31,63,31,3,88,48,77,1,184,15,158,115,95,63,31,143,76,1,71,64,190,71,156,3
- .db 30,63,31,254,44,2,71,164,219,163,28,49,94,191,63,252,108,134,199,184,216,177,28,9,92,62,56,240,222,124,135
- .db 180,220,216,184,113,156,190,58,0,63,57,142,205,204,209,62,120,153,188,54,3,243,195,204,124,60,230,65,120,250,121
- .db 19,31,193,254,252,55,248,111,58,120,253,250,0,255,131,252,124,7,192,127,196,124,127,187,7,253,131,28,24,3,0
- .db 121,255,236,118,25,175,224,196,12,24,2,0,48,127,207,224,28,31,0,64,4,8,6,0,0,31,199,192,63,252,0
- .db 0,2,8,4,0,0,3,128,0,63,240,0,32,0,0,4,0,0,1,128,0,97,192,0,0,0,136,0,0,0,0
- .db 192,1,0,128,0,0,0,0,8,0,0,0,64,0,0,128,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
- LSaveGame:
- ld a, b
- ld (BALLX), a
- ld a, c
- ld (BALLY), a
- ld hl, LevelSaved
- ld a, 1
- ld (hl), a
- inc hl
- ld de, LEVELY
- ex de, hl
- ld bc, 21
- ldir
- ret
-
- Pause:
- call GET_KEY
- cp G_ENTER
- jr nz, Pause
- JP GameLoop
-
- LostLife:
- xor A
- ld (SPEED), A
- NoFade:
- ld A, (LIFE)
- dec A
- jr z, GameOver
- lost2:
- ROM_CALL(CLEARLCD)
- ld (LIFE), A
- xor A
- ld HL, SCROLLY
- ld (HL), A
- ld HL, (LEVELPT)
- FindStone:
- dec HL
- ld (LEVELPT), HL
- ld A, (LEVELY)
- dec A
- ld (LEVELY), A
- jp z, StartAfterLife
- ld C, $80
- ld B, 1
- FindStone1:
- ld A, (HL)
- and C
- jr nz, FoundDone
- srl C
- jr z, FindStone
- ld A, B
- add A, 12
- ld B, A
- jr FindStone1
- FoundDone:
- ld C, 46
- jp StartGameLoop
-
- GameOver:
- ROM_CALL(CLEARLCD)
- ld hl, LevelSaved
- ld a,0
- ld (hl),a
- CALL HiScoreHand
- JP Title
-
-
- LevelSaved: .db 0 ;standard: no level saved
- SavedLevel: .db 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
-
- HiScoreHand:
- ROM_CALL(CLEARLCD)
- ld hl, HiScore
- call LD_HL_MHL
- ld de,(SCORE)
- ld (HiScoreTemp),de
- call CP_HL_DE
- ret nc
- ld hl,HiScore
- ex de,hl
- ld hl,HiScoreTemp
- ld c,2
- ldi
- ldi
- ld hl,$0100
- ld (CURSOR_ROW),hl
- ld hl,HiScr
- ROM_CALL(D_ZT_STR)
- ld de,$0A0F
- call DMX
- ld hl, $0603
- ld (CURSOR_ROW),hl
- ld hl,HiScrName
- ld c,3
- push hl
- ld d,$41
- ld a,(CURSOR_COL)
- ld e,a
- ld b,0
- jr InvLet
- WaitKey2:
- push bc
- push de
- push hl
- call GET_KEY
- pop hl
- pop de
- pop bc
- cp G_UP
- jr z,LetUp
- cp G_DOWN
- jr z,LetDown
- cp G_2nd
- jr nz,WaitKey2
- ld (hl),d
- inc hl
- ld a,d
- ROM_CALL(TX_CHARPUT)
- inc e
- inc b
- ld a,c
- cp b
- jr nz,InvLet
- ld (hl),0
- pop hl
- ret
- LetUp:
- inc d
- ld a,d
- cp $5B
- jr nz,InvLet
- ld d,$41
- jr InvLet
- LetDown:
- dec d
- ld a,d
- cp $40
- jr nz,InvLet
- ld d,$5A
- InvLet:
- set 3,(iy+$05)
- ld a,d
- ROM_CALL(TX_CHARPUT)
- ld a,e
- ld (CURSOR_COL),a
- res 3,(iy+$05)
- jr WaitKey2
-
- ;-----------------------------------------------------------------------------
- ;HL_DECIMAL_MENU(Magnus Hagander):Writes the in HL stored word in menu font
- ;-----------------------------------------------------------------------------
- HL_DECIMAL_MENU:
- push bc
- push de
- ld de, StringPlace+4
- ld b, 5
- ConvLoop:
- call UNPACK_HL
- add a,'0'
- ld (de), a
- dec de
- djnz ConvLoop
- ld hl, StringPlace
- ROM_CALL(D_ZM_STR)
- pop de
- pop bc
- ret
-
- ;-------------------------------------------------------------------------------
- ;DoScroll: handles scrolling
- ;-------------------------------------------------------------------------------
- DoScroll:
- ld a, (SCROLLY) ;increment SCROLLY
- inc a
- ld d, a
- ld (SCROLLY), a ;save it
- cp 32 ;SCROLLY = 32 ?
- jr nz, LoadHLScr
- ld a, 0 ;yes, set it to 0,
- ld d, 0
- ld (SCROLLY), a
- set 7,(iy+$14) ;Write text to GRAPH_MEM
- ld hl,$0000
- ld (CURSOR_X), hl
- ld HL, (SCORE)
- call HL_DECIMAL_MENU ;display HL menu style
- res 7,(iy+$14) ;Stop Writing text to GRAPH_MEM
- push bc ;Save bc
- ld de, BITMAPMEM ;Copy to APD_BUF
- ld hl, GRAPH_MEM ;Copy from GRAPH_MEM
- ld bc,72 ;Copy first 6 lines of GM
- ldir ;Do it
- pop bc ;Restore BC
-
- ld a,(LEVELY)
- inc a
- cp 251
- jr nz,NoBonus
- Bonus:
- ld hl,LIFE
- inc (hl)
- NoBonus:
- cp 253
- jr nz,GoOnScroll
- xor a
- ld (LEVELY), a
- ld hl, (ORIGLVL)
- ld (LEVELPT), hl
- GoOnScroll:
- ld (LEVELY),a
- ld hl,(SCORE)
- ld d,0
- ld a,(SPEED)
- ld e,a
- add hl,de
- ld (SCORE),hl
- ld hl,(LEVELPT)
- inc hl
- ld (LEVELPT),hl
-
- LoadHLScr:
- ld hl, (LEVELPT) ;get Levelinformation from LEVELPT
- inc hl
- inc hl
- ld e, (hl)
- CALL DrawLine
- ld a, (SCROLLY)
- add a, 32
- ld d, a
- ld hl, (LEVELPT)
- inc hl
- ld e, (hl)
- CALL DrawLine
- ret
-
-
-
-
- ClearAPDBUF:
- push bc
- ld hl,APD_BUF
- ld (hl),0
- ld de,APD_BUF+1
- ld bc,767
- ldir
- pop bc
- ret
- LifeStatus: .db "Lives Left:",0
-
- DMX:
- ld (CURSOR_X),de
- DMX2:
- ROM_CALL(D_ZM_STR)
- ret
-
- fastCopy:
- di ; 4
- ld a,$80 ; 7
- out ($10),a ; 11
- ld hl,GRAPH_MEM-12-(-(12*64)+1) ; 10
- ld a,$20 ; 7
- ld c,a ; 4 ; 43
- fastCopyAgain:
- ld b,64 ; 7
- inc c ; 4
- ld de,-(12*64)+1 ; 10
- out ($10),a ; 11
- add hl,de ; 11
- ld de,11 ; 10
- fastCopyLoop:
- add hl,de ; 11
- inc hl ; 6
- ret c ; 5 ; do nothing instruction (was nop (4 clocks))
- ld a,(hl) ; 7
- out ($11),a ; 11
- djnz fastCopyLoop ; 13/8 ; 3392
- ld a,c ; 4
- cp $2B+1 ; 7
- jr nz,fastCopyAgain; 12/7 ; 52 ; 41773 (used to be 41136)
- ret ; 11 ; 18
-
- ClearGraph:
- push bc
- ld b, 64
- ld hl, GRAPH_MEM
- ld de, 12
- Loop:
- ld (hl), 0
- add hl, de
- djnz Loop
- pop bc
- ret
-
-
- .end
-
-
-