2020-06-11 03:51:53 +00:00
|
|
|
;
|
|
|
|
; game.s
|
|
|
|
; BuGS
|
|
|
|
;
|
|
|
|
; Created by Jeremy Rand on 2020-06-10.
|
|
|
|
;Copyright © 2020 Jeremy Rand. All rights reserved.
|
|
|
|
;
|
|
|
|
|
2020-06-19 03:35:20 +00:00
|
|
|
;
|
|
|
|
; The actual game is a 30x30 grid of 8x8 tiles.
|
|
|
|
; The GS can do 30 wide with 10 tiles to spare.
|
|
|
|
; The GS can only do 25 tiles tall though. So,
|
|
|
|
; the screen will be 30 wide pushed to the right-
|
|
|
|
; most side. The left side will have the score,
|
|
|
|
; count of lives and the high score. Rather than
|
|
|
|
; having them at the top, running that info on
|
|
|
|
; the side will give us more vertical height for
|
|
|
|
; more on-screen action.
|
|
|
|
|
2020-06-11 03:51:53 +00:00
|
|
|
case on
|
|
|
|
mcopy game.macros
|
|
|
|
keep game
|
|
|
|
|
|
|
|
game start
|
2020-07-22 01:47:50 +00:00
|
|
|
using globalData
|
|
|
|
|
2020-06-16 04:02:20 +00:00
|
|
|
jsl setupScreen
|
|
|
|
|
2020-06-19 03:35:20 +00:00
|
|
|
lda colourPalette
|
2020-06-16 04:02:20 +00:00
|
|
|
jsl setColour
|
2020-07-19 02:11:20 +00:00
|
|
|
|
|
|
|
gameLoop anop
|
2020-09-06 05:54:47 +00:00
|
|
|
|
|
|
|
_drawDirtyGameRow 0
|
|
|
|
_drawDirtyGameRow 1
|
|
|
|
_drawDirtyGameRow 2
|
|
|
|
_drawDirtyGameRow 3
|
|
|
|
_drawDirtyGameRow 4
|
|
|
|
_drawDirtyGameRow 5
|
|
|
|
_drawDirtyGameRow 6
|
|
|
|
_drawDirtyGameRow 7
|
|
|
|
_drawDirtyGameRow 8
|
|
|
|
_drawDirtyGameRow 9
|
|
|
|
_drawDirtyGameRow 10
|
|
|
|
_drawDirtyGameRow 11
|
|
|
|
_drawDirtyGameRow 12
|
|
|
|
_drawDirtyGameRow 13
|
|
|
|
_drawDirtyGameRow 14
|
2020-09-02 04:15:53 +00:00
|
|
|
|
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
and #$f7
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-09-06 05:54:47 +00:00
|
|
|
jsl drawScorpion
|
|
|
|
|
|
|
|
_drawDirtyGameRow 15
|
|
|
|
_drawDirtyGameRow 16
|
|
|
|
_drawDirtyGameRow 17
|
|
|
|
_drawDirtyGameRow 18
|
|
|
|
_drawDirtyGameRow 19
|
|
|
|
_drawDirtyGameRow 20
|
|
|
|
_drawDirtyGameRow 21
|
|
|
|
_drawDirtyGameRow 22
|
|
|
|
_drawDirtyGameRow 23
|
|
|
|
_drawDirtyGameRow 24
|
2020-09-02 04:15:53 +00:00
|
|
|
|
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
and #$f3
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-09-06 05:54:47 +00:00
|
|
|
jsl drawSpider
|
2020-09-02 04:15:53 +00:00
|
|
|
|
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
and #$f1
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-07-19 02:11:20 +00:00
|
|
|
jsl drawFlea
|
2020-09-02 04:15:53 +00:00
|
|
|
|
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
ora #$08
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-07-31 03:34:48 +00:00
|
|
|
jsl drawSegments
|
2020-09-02 04:15:53 +00:00
|
|
|
|
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
ora #$04
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-07-15 04:32:14 +00:00
|
|
|
jsl drawDirtyNonGameTiles
|
|
|
|
|
2020-07-28 01:47:28 +00:00
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
2020-09-02 04:15:53 +00:00
|
|
|
ora #$02
|
2020-07-28 01:47:28 +00:00
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-07-21 03:04:27 +00:00
|
|
|
jsl updateScorpion
|
2020-07-24 03:41:12 +00:00
|
|
|
jsl updateSpider
|
2020-07-19 02:11:20 +00:00
|
|
|
jsl updateFlea
|
2020-07-31 03:34:48 +00:00
|
|
|
jsl updateSegments
|
2020-07-19 02:11:20 +00:00
|
|
|
jsl checkKeyboard
|
2020-07-20 04:05:18 +00:00
|
|
|
|
2020-07-19 02:11:20 +00:00
|
|
|
jsl waitForVbl
|
|
|
|
|
|
|
|
lda shouldQuit
|
2020-09-02 04:15:53 +00:00
|
|
|
beq gameDone
|
|
|
|
jmp gameLoop
|
2020-07-19 02:11:20 +00:00
|
|
|
|
2020-09-02 04:15:53 +00:00
|
|
|
gameDone anop
|
2020-07-24 03:41:12 +00:00
|
|
|
short i,m
|
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
and #$f0
|
|
|
|
ora borderColour
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
|
|
|
long i,m
|
|
|
|
|
2020-07-15 04:32:14 +00:00
|
|
|
rtl
|
|
|
|
|
|
|
|
|
|
|
|
drawDirtyNonGameTiles entry
|
2020-07-17 06:46:36 +00:00
|
|
|
ldy numDirtyNonGameTiles
|
|
|
|
beq dirtyTileLoopDone2
|
2020-07-15 04:32:14 +00:00
|
|
|
dirtyTileLoop2 anop
|
2020-07-17 06:46:36 +00:00
|
|
|
dey
|
|
|
|
dey
|
2020-07-15 04:32:14 +00:00
|
|
|
phy
|
|
|
|
|
2020-07-17 06:46:36 +00:00
|
|
|
ldx dirtyNonGameTiles,y
|
2020-09-02 04:15:53 +00:00
|
|
|
stz tileDirty,x
|
2020-09-04 04:17:19 +00:00
|
|
|
ldy tileScreenOffset,x
|
2020-09-02 04:15:53 +00:00
|
|
|
lda tileType,x
|
2020-07-15 04:32:14 +00:00
|
|
|
|
|
|
|
jsl drawTile
|
|
|
|
|
|
|
|
ply
|
2020-07-17 06:46:36 +00:00
|
|
|
bne dirtyTileLoop2
|
|
|
|
dirtyTileLoopDone2 anop
|
|
|
|
stz numDirtyNonGameTiles
|
|
|
|
rtl
|
|
|
|
|
2020-07-15 04:32:14 +00:00
|
|
|
|
|
|
|
drawTile entry
|
2020-07-17 06:46:36 +00:00
|
|
|
tax
|
2020-07-15 04:32:14 +00:00
|
|
|
|
2020-07-17 06:46:36 +00:00
|
|
|
lda tileJumpTable,x
|
2020-07-15 04:32:14 +00:00
|
|
|
sta jumpInst+1
|
|
|
|
|
2020-07-17 06:46:36 +00:00
|
|
|
lda tileJumpTable+2,x
|
2020-07-15 04:32:14 +00:00
|
|
|
sta jumpInst+3
|
|
|
|
|
|
|
|
jumpInst jmp >mushroom1
|
|
|
|
nop
|
|
|
|
|
2020-06-11 03:51:53 +00:00
|
|
|
|
2020-06-16 04:02:20 +00:00
|
|
|
setupScreen entry
|
2020-06-11 03:51:53 +00:00
|
|
|
short i,m
|
2020-07-23 03:46:04 +00:00
|
|
|
lda >SHADOW_REGISTER ; Enable shadowing of SHR
|
2020-06-11 03:51:53 +00:00
|
|
|
and #$f7
|
2020-07-23 03:46:04 +00:00
|
|
|
sta >SHADOW_REGISTER
|
2020-06-11 03:51:53 +00:00
|
|
|
|
|
|
|
lda #$a1
|
2020-07-23 03:46:04 +00:00
|
|
|
sta >NEW_VIDEO_REGISTER ; Enable SHR mode
|
2020-07-24 03:41:12 +00:00
|
|
|
lda >BORDER_COLOUR_REGISTER
|
2020-06-11 03:51:53 +00:00
|
|
|
long i,m
|
2020-07-24 03:41:12 +00:00
|
|
|
and #$000f
|
|
|
|
sta borderColour
|
2020-06-11 03:51:53 +00:00
|
|
|
|
|
|
|
sei
|
|
|
|
phd
|
|
|
|
tsc
|
2020-09-04 04:17:19 +00:00
|
|
|
sta >backupStack
|
2020-07-23 03:46:04 +00:00
|
|
|
lda >STATE_REGISTER ; Direct Page and Stack in Bank 01/
|
2020-06-11 03:51:53 +00:00
|
|
|
ora #$0030
|
2020-07-23 03:46:04 +00:00
|
|
|
sta >STATE_REGISTER
|
2020-06-11 03:51:53 +00:00
|
|
|
ldx #$0000
|
|
|
|
|
2020-06-16 04:02:20 +00:00
|
|
|
lda #$9dfe
|
2020-06-11 03:51:53 +00:00
|
|
|
tcs
|
2020-06-16 04:02:20 +00:00
|
|
|
ldy #$7e00
|
2020-06-11 03:51:53 +00:00
|
|
|
nextWord anop
|
|
|
|
phx
|
|
|
|
dey
|
|
|
|
dey
|
|
|
|
bpl nextWord
|
|
|
|
|
2020-07-23 03:46:04 +00:00
|
|
|
lda >STATE_REGISTER
|
2020-06-11 03:51:53 +00:00
|
|
|
and #$ffcf
|
2020-07-23 03:46:04 +00:00
|
|
|
sta >STATE_REGISTER
|
2020-09-04 04:17:19 +00:00
|
|
|
lda >backupStack
|
2020-06-11 03:51:53 +00:00
|
|
|
tcs
|
|
|
|
pld
|
|
|
|
cli
|
2020-06-16 04:02:20 +00:00
|
|
|
|
2020-06-11 03:51:53 +00:00
|
|
|
rtl
|
|
|
|
|
|
|
|
|
2020-07-19 02:11:20 +00:00
|
|
|
|
|
|
|
checkKeyboard entry
|
|
|
|
checkKey_loop2 anop
|
|
|
|
short i,m
|
2020-07-23 03:46:04 +00:00
|
|
|
lda >KEYBOARD
|
2020-07-19 03:41:21 +00:00
|
|
|
bpl checkKey_done
|
2020-07-23 03:46:04 +00:00
|
|
|
sta >KEYBOARD_STROBE
|
2020-07-19 02:11:20 +00:00
|
|
|
long i,m
|
|
|
|
and #$007f
|
|
|
|
|
|
|
|
cmp #'q'
|
|
|
|
beq checkKey_quit
|
|
|
|
cmp #'Q'
|
|
|
|
beq checkKey_quit
|
|
|
|
cmp #$001b
|
|
|
|
beq checkKey_quit
|
|
|
|
|
|
|
|
cmp #'f'
|
|
|
|
beq checkKey_addFlea
|
|
|
|
cmp #'F'
|
2020-07-21 03:04:27 +00:00
|
|
|
beq checkKey_shootFlea
|
2020-07-19 02:11:20 +00:00
|
|
|
|
2020-07-20 04:05:18 +00:00
|
|
|
cmp #'s'
|
2020-07-21 03:04:27 +00:00
|
|
|
beq checkKey_addScorpion
|
2020-07-20 04:05:18 +00:00
|
|
|
cmp #'S'
|
2020-07-21 03:04:27 +00:00
|
|
|
beq checkKey_shootScorpion
|
2020-07-20 04:05:18 +00:00
|
|
|
|
2020-07-24 03:41:12 +00:00
|
|
|
cmp #'p'
|
|
|
|
beq checkKey_addSpider
|
|
|
|
cmp #'P'
|
|
|
|
beq checkKey_shootSpider
|
|
|
|
|
2020-07-28 02:27:18 +00:00
|
|
|
cmp #'+'
|
|
|
|
beq checkKey_fast
|
|
|
|
cmp #'-'
|
|
|
|
beq checkKey_slow
|
2020-10-20 03:34:08 +00:00
|
|
|
|
|
|
|
cmp #'g'
|
|
|
|
beq checkKey_game
|
|
|
|
|
2020-08-28 03:36:16 +00:00
|
|
|
cmp #'c'
|
|
|
|
beq checkKey_centipede
|
2020-10-02 18:50:14 +00:00
|
|
|
cmp #'C'
|
|
|
|
beq checkKey_shootCentipede
|
2020-08-28 03:36:16 +00:00
|
|
|
|
2020-07-19 02:11:20 +00:00
|
|
|
lda colourPalette
|
|
|
|
inc a
|
2020-07-23 03:46:04 +00:00
|
|
|
cmp #NUM_COLOUR_PALETTES
|
2020-07-19 02:11:20 +00:00
|
|
|
blt checkKey_skip
|
|
|
|
lda #$0000
|
|
|
|
checkKey_skip anop
|
|
|
|
sta colourPalette
|
2020-07-21 03:04:27 +00:00
|
|
|
jmp setColour
|
2020-07-19 02:11:20 +00:00
|
|
|
|
2020-07-28 02:27:18 +00:00
|
|
|
checkKey_done anop
|
|
|
|
rtl
|
|
|
|
|
2020-07-19 02:11:20 +00:00
|
|
|
checkKey_addFlea anop
|
2020-07-21 03:04:27 +00:00
|
|
|
jmp addFlea
|
2020-07-19 02:11:20 +00:00
|
|
|
|
2020-07-20 04:05:18 +00:00
|
|
|
checkKey_shootFlea anop
|
2020-07-21 03:04:27 +00:00
|
|
|
jmp shootFlea
|
|
|
|
|
|
|
|
checkKey_addScorpion anop
|
|
|
|
jmp addScorpion
|
|
|
|
|
|
|
|
checkKey_shootScorpion anop
|
|
|
|
jmp shootScorpion
|
2020-07-20 04:05:18 +00:00
|
|
|
|
2020-07-24 03:41:12 +00:00
|
|
|
checkKey_addSpider anop
|
|
|
|
jmp addSpider
|
|
|
|
|
|
|
|
checkKey_shootSpider anop
|
|
|
|
jmp shootSpider
|
2020-10-02 18:50:14 +00:00
|
|
|
|
|
|
|
checkKey_shootCentipede anop
|
|
|
|
jmp shootRandomSegment
|
2020-08-28 03:36:16 +00:00
|
|
|
|
|
|
|
checkKey_quit anop
|
|
|
|
stz shouldQuit
|
|
|
|
rtl
|
2020-07-24 03:41:12 +00:00
|
|
|
|
2020-07-28 02:27:18 +00:00
|
|
|
checkKey_fast anop
|
|
|
|
lda #SPRITE_SPEED_FAST
|
|
|
|
jsl setFleaSpeed
|
|
|
|
lda #SPRITE_SPEED_FAST
|
2020-07-28 03:30:11 +00:00
|
|
|
jsl setSpiderSpeed
|
|
|
|
lda #SPRITE_SPEED_FAST
|
2020-07-28 02:27:18 +00:00
|
|
|
jmp setScorpionSpeed
|
|
|
|
|
|
|
|
checkKey_slow anop
|
|
|
|
lda #SPRITE_SPEED_SLOW
|
|
|
|
jsl setFleaSpeed
|
|
|
|
lda #SPRITE_SPEED_SLOW
|
2020-07-28 03:30:11 +00:00
|
|
|
jsl setSpiderSpeed
|
|
|
|
lda #SPRITE_SPEED_SLOW
|
2020-07-28 02:27:18 +00:00
|
|
|
jmp setScorpionSpeed
|
2020-08-28 03:36:16 +00:00
|
|
|
|
2020-10-20 03:34:08 +00:00
|
|
|
checkKey_game anop
|
|
|
|
jsl levelInit
|
|
|
|
jmp levelStart
|
|
|
|
|
2020-08-28 03:36:16 +00:00
|
|
|
checkKey_centipede anop
|
2020-09-22 02:57:06 +00:00
|
|
|
jsl addFastHeadSegment
|
|
|
|
jsl addSlowHeadSegment
|
2020-09-06 17:39:00 +00:00
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jsl addBodySegment
|
|
|
|
jmp addBodySegment
|
2020-07-19 02:11:20 +00:00
|
|
|
|
|
|
|
|
2020-06-11 03:51:53 +00:00
|
|
|
waitForKey entry
|
2020-07-19 03:41:21 +00:00
|
|
|
short i,m
|
|
|
|
waitForKey_loop anop
|
2020-07-23 03:46:04 +00:00
|
|
|
lda >KEYBOARD
|
2020-07-19 03:41:21 +00:00
|
|
|
bpl waitForKey_loop
|
2020-07-23 03:46:04 +00:00
|
|
|
sta >KEYBOARD_STROBE
|
2020-06-11 03:51:53 +00:00
|
|
|
long i,m
|
2020-07-19 03:41:21 +00:00
|
|
|
rtl
|
2020-07-16 03:20:35 +00:00
|
|
|
|
|
|
|
|
|
|
|
waitForVbl entry
|
|
|
|
short i,m
|
2020-07-24 03:41:12 +00:00
|
|
|
lda >BORDER_COLOUR_REGISTER
|
|
|
|
and #$f0
|
|
|
|
sta >BORDER_COLOUR_REGISTER
|
2020-07-16 03:20:35 +00:00
|
|
|
long i,m
|
2020-09-04 04:17:19 +00:00
|
|
|
vblLoop anop
|
|
|
|
lda >VERTICAL_COUNTER ; load the counter value
|
|
|
|
and #$80ff ; mask out the VBL bits
|
|
|
|
asl a ; shift the word around
|
|
|
|
adc #0 ; move MSB -> LSB
|
2020-09-06 05:54:47 +00:00
|
|
|
cmp #$1c8
|
2020-09-04 04:17:19 +00:00
|
|
|
bge vblLoop
|
2020-07-16 03:20:35 +00:00
|
|
|
rtl
|
|
|
|
|
2020-06-11 03:51:53 +00:00
|
|
|
|
2020-07-24 03:41:12 +00:00
|
|
|
colourPalette dc i2'0'
|
|
|
|
shouldQuit dc i2'1'
|
|
|
|
borderColour dc i2'0'
|
2020-06-11 03:51:53 +00:00
|
|
|
|
|
|
|
end
|