Start coding support for the spider. Also, try to show the performance of the main game loop in the border colour.

This commit is contained in:
Jeremy Rand 2020-07-23 23:41:12 -04:00
parent ada774960b
commit 4f74d630b9
5 changed files with 314 additions and 4 deletions

View File

@ -86,6 +86,7 @@
9DB1505024C3801100558B87 /* gameFlea.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameFlea.s; sourceTree = "<group>"; };
9DB1505124C6875C00558B87 /* gameScorpion.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameScorpion.s; sourceTree = "<group>"; };
9DB1505224C7495400558B87 /* globals.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = globals.s; sourceTree = "<group>"; };
9DB1505324C9E54C00558B87 /* gameSpider.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameSpider.s; sourceTree = "<group>"; };
9DC4D7BD24B7652100BACF4B /* ship.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = ship.s; sourceTree = "<group>"; };
9DC4D7BE24B80C9600BACF4B /* shot.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = shot.s; sourceTree = "<group>"; };
9DC4D7BF24BE9F7100BACF4B /* tiles.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = tiles.h; sourceTree = "<group>"; };
@ -134,6 +135,7 @@
9D8FFC612491CAF0005C9327 /* game.h */,
9DB1505024C3801100558B87 /* gameFlea.s */,
9DB1505124C6875C00558B87 /* gameScorpion.s */,
9DB1505324C9E54C00558B87 /* gameSpider.s */,
9D62AF3B249871A300348F45 /* colour.s */,
9D2FF6DA24C4C79A000181E5 /* random.s */,
9DB1505224C7495400558B87 /* globals.s */,

View File

@ -32,10 +32,12 @@ game start
gameLoop anop
jsl drawDirtyGameTiles
jsl drawScorpion
jsl drawSpider
jsl drawFlea
jsl drawDirtyNonGameTiles
jsl updateScorpion
jsl updateSpider
jsl updateFlea
jsl checkKeyboard
@ -44,6 +46,13 @@ gameLoop anop
lda shouldQuit
bne gameLoop
short i,m
lda >BORDER_COLOUR_REGISTER
and #$f0
ora borderColour
sta >BORDER_COLOUR_REGISTER
long i,m
rtl
@ -605,7 +614,10 @@ setupScreen entry
lda #$a1
sta >NEW_VIDEO_REGISTER ; Enable SHR mode
lda >BORDER_COLOUR_REGISTER
long i,m
and #$000f
sta borderColour
sei
phd
@ -663,6 +675,11 @@ checkKey_loop2 anop
cmp #'S'
beq checkKey_shootScorpion
cmp #'p'
beq checkKey_addSpider
cmp #'P'
beq checkKey_shootSpider
lda colourPalette
inc a
cmp #NUM_COLOUR_PALETTES
@ -684,6 +701,12 @@ checkKey_addScorpion anop
checkKey_shootScorpion anop
jmp shootScorpion
checkKey_addSpider anop
jmp addSpider
checkKey_shootSpider anop
jmp shootSpider
checkKey_quit anop
stz shouldQuit
@ -703,6 +726,9 @@ waitForKey_loop anop
waitForVbl entry
short i,m
lda >BORDER_COLOUR_REGISTER
and #$f0
sta >BORDER_COLOUR_REGISTER
vblLoop1 anop
lda #$fe
cmp >READ_VBL
@ -710,11 +736,15 @@ vblLoop1 anop
vblLoop2 anop
cmp >READ_VBL
bmi vblLoop2
lda >BORDER_COLOUR_REGISTER
ora #$0f
sta >BORDER_COLOUR_REGISTER
long i,m
rtl
colourPalette dc i2'0'
shouldQuit dc i2'1'
colourPalette dc i2'0'
shouldQuit dc i2'1'
borderColour dc i2'0'
end

View File

@ -60,7 +60,6 @@ drawScorpion_nonGame1 anop
sty numDirtyNonGameTiles
drawScorpion_skipTile1 anop
ldx scorpionTileOffsets+2
lda tiles+TILE_DIRTY_OFFSET,x
bne drawScorpion_skipTile2
@ -85,7 +84,6 @@ drawScorpion_nonGame2 anop
sty numDirtyNonGameTiles
drawScorpion_skipTile2 anop
ldx scorpionTileOffsets+4
lda tiles+TILE_DIRTY_OFFSET,x
bne drawScorpion_done

279
BuGS/gameSpider.s Normal file
View File

@ -0,0 +1,279 @@
;
; gameSpider.s
; BuGS
;
; Created by Jeremy Rand on 2020-07-23.
;Copyright © 2020 Jeremy Rand. All rights reserved.
;
case on
mcopy gameSpider.macros
keep gameSpider
gameSpider start
using globalData
SPIDER_STATE_NONE equ 0
SPIDER_STATE_LEFT_DIAG_DOWN equ 1
SPIDER_STATE_LEFT_DIAG_UP equ 2
SPIDER_STATE_LEFT_DOWN equ 3
SPIDER_STATE_LEFT_UP equ 4
SPIDER_STATE_RIGHT_DIAG_DOWN equ 5
SPIDER_STATE_RIGHT_DIAG_UP equ 6
SPIDER_STATE_RIGHT_DOWN equ 7
SPIDER_STATE_RIGHT_UP equ 8
SPIDER_STATE_EXPLODING equ 9
drawSpider entry
lda spiderState
bne drawSpider_cont
rtl
drawSpider_cont anop
ldy spiderScreenOffset
ldx spiderSprite
jsl spiderJump
ldx spiderTileOffsets
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_skipTile1
lda #TILE_STATE_DIRTY
sta tiles+TILE_DIRTY_OFFSET,x
txa
cmp #RHS_FIRST_TILE_OFFSET
bge drawSpider_nonGame1
ldy numDirtyGameTiles
sta dirtyGameTiles,y
iny
iny
sty numDirtyGameTiles
bra drawSpider_skipTile1
drawSpider_nonGame1 anop
ldy numDirtyNonGameTiles
sta dirtyNonGameTiles,y
iny
iny
sty numDirtyNonGameTiles
drawSpider_skipTile1 anop
ldx spiderTileOffsets+2
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_skipTile2
lda #TILE_STATE_DIRTY
sta tiles+TILE_DIRTY_OFFSET,x
txa
cmp #RHS_FIRST_TILE_OFFSET
bge drawSpider_nonGame2
ldy numDirtyGameTiles
sta dirtyGameTiles,y
iny
iny
sty numDirtyGameTiles
bra drawSpider_skipTile2
drawSpider_nonGame2 anop
ldy numDirtyNonGameTiles
sta dirtyNonGameTiles,y
iny
iny
sty numDirtyNonGameTiles
drawSpider_skipTile2 anop
ldx spiderTileOffsets+4
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_skipTile3
lda #TILE_STATE_DIRTY
sta tiles+TILE_DIRTY_OFFSET,x
txa
cmp #RHS_FIRST_TILE_OFFSET
bge drawSpider_nonGame3
ldy numDirtyGameTiles
sta dirtyGameTiles,y
iny
iny
sty numDirtyGameTiles
bra drawSpider_skipTile3
drawSpider_nonGame3 anop
ldy numDirtyNonGameTiles
sta dirtyNonGameTiles,y
iny
iny
sty numDirtyNonGameTiles
drawSpider_skipTile3 anop
ldx spiderTileOffsets+6
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_skipTile4
lda #TILE_STATE_DIRTY
sta tiles+TILE_DIRTY_OFFSET,x
txa
cmp #RHS_FIRST_TILE_OFFSET
bge drawSpider_nonGame4
ldy numDirtyGameTiles
sta dirtyGameTiles,y
iny
iny
sty numDirtyGameTiles
bra drawSpider_skipTile4
drawSpider_nonGame4 anop
ldy numDirtyNonGameTiles
sta dirtyNonGameTiles,y
iny
iny
sty numDirtyNonGameTiles
drawSpider_skipTile4 anop
ldx spiderTileOffsets+8
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_skipTile5
lda #TILE_STATE_DIRTY
sta tiles+TILE_DIRTY_OFFSET,x
txa
cmp #RHS_FIRST_TILE_OFFSET
bge drawSpider_nonGame5
ldy numDirtyGameTiles
sta dirtyGameTiles,y
iny
iny
sty numDirtyGameTiles
bra drawSpider_skipTile5
drawSpider_nonGame5 anop
ldy numDirtyNonGameTiles
sta dirtyNonGameTiles,y
iny
iny
sty numDirtyNonGameTiles
drawSpider_skipTile5 anop
ldx spiderTileOffsets+2
lda tiles+TILE_DIRTY_OFFSET,x
bne drawSpider_done
lda #TILE_STATE_DIRTY
sta tiles+TILE_DIRTY_OFFSET,x
txa
cmp #RHS_FIRST_TILE_OFFSET
bge drawSpider_nonGame6
ldy numDirtyGameTiles
sta dirtyGameTiles,y
iny
iny
sty numDirtyGameTiles
rtl
drawSpider_nonGame6 anop
ldy numDirtyNonGameTiles
sta dirtyNonGameTiles,y
iny
iny
sty numDirtyNonGameTiles
drawSpider_done anop
rtl
spiderJump entry
cmp #SPIDER_STATE_EXPLODING
beq spiderJump_exploding
lda spiderScreenShift
beq spiderJump_shift
lda spiderJumpTable,x
sta jumpInst+1
lda spiderJumpTable+2,x
sta jumpInst+3
bra jumpInst
spiderJump_shift anop
lda spiderShiftJumpTable,x
sta jumpInst+1
lda spiderShiftJumpTable+2,x
sta jumpInst+3
bra jumpInst
spiderJump_exploding anop
tya
clc
adc #TILE_BYTE_WIDTH
tay
lda explosionJumpTable,x
sta jumpInst+1
lda explosionJumpTable+2,x
sta jumpInst+3
jumpInst jmp >spider1
nop
updateSpider entry
; Write this code
rtl
addSpider entry
lda spiderState
bne addSpider_done
lda #SPIDER_STATE_RIGHT_DOWN
sta spiderState
stz spiderScreenShift
; Write this code
addSpider_done anop
rtl
shootSpider entry
; Write this code
rtl
spiderState dc i2'SPIDER_STATE_NONE'
spiderSprite dc i2'0'
spiderScreenOffset dc i2'0'
spiderScreenShift dc i2'0'
spiderShiftInTile dc i2'0'
spiderTileOffsets dc i2'0'
dc i2'0'
dc i2'0'
dc i2'0'
dc i2'0'
dc i2'0'
SPIDER_SPRITE_LAST_OFFSET gequ 7*4
spiderJumpTable dc i4'spider7'
dc i4'spider6'
dc i4'spider2'
dc i4'spider3'
dc i4'spider4'
dc i4'spider3'
dc i4'spider2'
dc i4'spider1'
spiderShiftJumpTable dc i4'spider7s'
dc i4'spider6s'
dc i4'spider2s'
dc i4'spider3s'
dc i4'spider4s'
dc i4'spider3s'
dc i4'spider2s'
dc i4'spider1s'
end

View File

@ -125,6 +125,7 @@ KEYBOARD_STROBE gequ $e0c010
READ_VBL gequ $e0c019
SHADOW_REGISTER gequ $e0c035
NEW_VIDEO_REGISTER gequ $e0c029
BORDER_COLOUR_REGISTER gequ $e0c034
STATE_REGISTER gequ $e1c068