Hook up the score. Shooting fleas, spiders, scorpions or segments will increase the score. We track the score in two ways. One is just as a 32-bit unsigned integer for doing numeric comparisons on the score (say to the high score list to be implemented in the future) and secondly as a series of numeric digits displayed in a tile. Both are updated.

This commit is contained in:
Jeremy Rand 2020-10-13 23:24:15 -04:00
parent b85000b4ed
commit a1b4013e1c
5 changed files with 256 additions and 28 deletions

View File

@ -82,7 +82,7 @@
9D62AF3F2499CD1E00348F45 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = "<group>"; };
9D62AF402499CD3A00348F45 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = "<group>"; };
9D8AF0B72535542400C10E3C /* level.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = level.s; sourceTree = "<group>"; };
9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = "<group>"; };
9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = "<group>"; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; };
9D8FFC602491CA28005C9327 /* game.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = game.s; sourceTree = "<group>"; };
9D8FFC612491CAF0005C9327 /* game.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = "<group>"; };
9DB1505024C3801100558B87 /* gameFlea.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameFlea.s; sourceTree = "<group>"; };

View File

@ -1642,6 +1642,7 @@ addFastHeadSegment entry
; Call this with the segment num * 2 in the X register
shootSegment entry
dec numSegments
phx
lda segmentStates,x
cmp #SEGMENT_STATE_BODY
beq shootSegment_body
@ -1650,6 +1651,7 @@ shootSegment entry
shootSegment_body anop
jsl scoreAddTen
shootSegment_doneScore anop
plx
lda #SEGMENT_STATE_EXPLODING
sta segmentStates,x
ldy segmentPosOffset,x

View File

@ -691,9 +691,21 @@ shootSpider entry
lda spiderScreenOffset
inc a
sta spiderScreenOffset
; TODO - Increase the score and set the spiderScoreType to 0, 4 or 8 for
; 300, 600 or 900 points depending on the distance from the player.
; TODO - Set the spiderScoreType to 0, 4 or 8 for 300, 600 or 900 points depending on the distance from the player.
; For now, just hard code 900.
bra shootSpider_900
lda #SPIDER_SCORE_300
sta spiderScoreType
jmp scoreAddThreeHundred
shootSpider_600 anop
lda #SPIDER_SCORE_600
sta spiderScoreType
jmp scoreAddSixHundred
shootSpider_900 anop
lda #SPIDER_SCORE_900
sta spiderScoreType
jmp scoreAddNineHundred

View File

@ -8,7 +8,7 @@ s6d2 =
s7d1 = /Users/jrand/Library/Developer/Xcode/DerivedData/BuGS-bffpexoblaghkzcbtjtzxeulnuto/Build/Products/Debug/BuGS.2mg
g_limit_speed = 0
g_limit_speed = 3
bram1[00] = 00 00 00 01 00 00 0d 06 02 01 01 00 01 00 00 00

View File

@ -6,6 +6,7 @@
;Copyright © 2020 Jeremy Rand. All rights reserved.
;
case on
mcopy score.macros
keep score
@ -13,17 +14,15 @@
score start
using globalData
TILE_SCORE_ONES equ 4*LHS_NUM_TILES_WIDE+LHS_FIRST_TILE-2
TILE_SCORE_ONES equ LHS_FIRST_TILE+LHS_NUM_TILES_WIDE+LHS_NUM_TILES_WIDE+LHS_NUM_TILES_WIDE+LHS_NUM_TILES_WIDE-2
TILE_SCORE_ONES_OFFSET equ TILE_SCORE_ONES*SIZEOF_TILE_INFO
TILE_SCORE_TENS_OFFSET equ TILE_SCORE_ONES-SIZEOF_TILE_INFO
TILE_SCORE_TENS_OFFSET equ TILE_SCORE_ONES_OFFSET-SIZEOF_TILE_INFO
TILE_SCORE_HUNDREDS_OFFSET equ TILE_SCORE_TENS_OFFSET-SIZEOF_TILE_INFO
TILE_SCORE_THOUSANDS_OFFSET equ TILE_SCORE_HUNDREDS_OFFSET-SIZEOF_TILE_INFO
scoreStartGame entry
stz gameScore
stz gameScore+2
lda #1
sta gameIsHighScore
ldx #TILE_SCORE_ONES_OFFSET
lda #TILE_NUMBER_0
@ -96,53 +95,268 @@ scoreStartGame entry
rtl
scoreAddOne entry
; TODO - Write this code...
; The score tile to increment is in the X register
scoreAddOneToTile entry
_dirtyNonGameTile
lda tileType,x
beq scoreAddOneToTile_empty
cmp #TILE_NUMBER_9
beq scoreAddOneToTile_isNine anop
clc
adc #4
bra scoreAddOneToTile_done
scoreAddOneToTile_empty anop
lda #TILE_NUMBER_1
scoreAddOneToTile_done anop
sta tileType,x
rtl
scoreAddOneToTile_isNine anop
lda #TILE_NUMBER_0
sta tileType,x
dex
dex
jmp scoreAddOneToTile
; The score tile to add to is in the X register
; The amount to add to the tile is in the accumulator
; and must be 4 to 36 in multiples of 4. This is because
; the tile types are all 4 apart. So, to add one, we
; actually add 4 to the tile type.
scoreAddToTile entry
ldy tileType,x
bne scoreAddToTile_notEmpty
tay
lda #TILE_NUMBER_0
sta tileType,x
tya
scoreAddToTile_notEmpty anop
clc
adc tileType,x
cmp #TILE_NUMBER_9+1
blt scoreAddToTile_done
sec
sbc #40
sta tileType,x
_dirtyNonGameTile
dex
dex
jmp scoreAddOneToTile
scoreAddToTile_done anop
sta tileType,x
_dirtyNonGameTile
rtl
scoreAddOne entry
inc gameScore
bne scoreAddOne_noCarry
inc gameScore+2
scoreAddOne_noCarry anop
ldx #TILE_SCORE_ONES_OFFSET
jmp scoreAddOneToTile
scoreAddFive entry
; TODO - Write this code...
rtl
lda #5
clc
adc gameScore
sta gameScore
bcc scoreAddFive_noCarry
inc gameScore+2
scoreAddFive_noCarry anop
ldx #TILE_SCORE_ONES_OFFSET
lda #5*4
jmp scoreAddToTile
scoreAddTen entry
; TODO - Write this code...
rtl
lda #10
clc
adc gameScore
sta gameScore
bcc scoreAddTen_noCarry
inc gameScore+2
scoreAddTen_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddTen_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddTen_skipZeroOnes anop
ldx #TILE_SCORE_TENS_OFFSET
jmp scoreAddOneToTile
scoreAddOneHundred entry
; TODO - Write this code...
rtl
lda #100
clc
adc gameScore
sta gameScore
bcc scoreAddHundred_noCarry
inc gameScore+2
scoreAddHundred_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddHundred_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddHundred_skipZeroOnes anop
lda tileType+TILE_SCORE_TENS_OFFSET
bne scoreAddHundred_skipZeroTens
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_TENS_OFFSET
ldx #TILE_SCORE_TENS_OFFSET
_dirtyNonGameTile
scoreAddHundred_skipZeroTens anop
ldx #TILE_SCORE_HUNDREDS_OFFSET
jmp scoreAddOneToTile
scoreAddTwoHundred entry
; TODO - Write this code...
rtl
lda #200
clc
adc gameScore
sta gameScore
bcc scoreAddTwoHundred_noCarry
inc gameScore+2
scoreAddTwoHundred_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddTwoHundred_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddTwoHundred_skipZeroOnes anop
lda tileType+TILE_SCORE_TENS_OFFSET
bne scoreAddTwoHundred_skipZeroTens
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_TENS_OFFSET
ldx #TILE_SCORE_TENS_OFFSET
_dirtyNonGameTile
scoreAddTwoHundred_skipZeroTens anop
ldx #TILE_SCORE_HUNDREDS_OFFSET
lda #2*4
jmp scoreAddToTile
scoreAddThreeHundred entry
; TODO - Write this code...
rtl
lda #300
clc
adc gameScore
sta gameScore
bcc scoreAddThreeHundred_noCarry
inc gameScore+2
scoreAddThreeHundred_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddThreeHundred_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddThreeHundred_skipZeroOnes anop
lda tileType+TILE_SCORE_TENS_OFFSET
bne scoreAddThreeHundred_skipZeroTens
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_TENS_OFFSET
ldx #TILE_SCORE_TENS_OFFSET
_dirtyNonGameTile
scoreAddThreeHundred_skipZeroTens anop
ldx #TILE_SCORE_HUNDREDS_OFFSET
lda #3*4
jmp scoreAddToTile
scoreAddSixHundred entry
; TODO - Write this code...
rtl
lda #600
clc
adc gameScore
sta gameScore
bcc scoreAddSixHundred_noCarry
inc gameScore+2
scoreAddSixHundred_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddSixHundred_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddSixHundred_skipZeroOnes anop
lda tileType+TILE_SCORE_TENS_OFFSET
bne scoreAddSixHundred_skipZeroTens
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_TENS_OFFSET
ldx #TILE_SCORE_TENS_OFFSET
_dirtyNonGameTile
scoreAddSixHundred_skipZeroTens anop
ldx #TILE_SCORE_HUNDREDS_OFFSET
lda #6*4
jmp scoreAddToTile
scoreAddNineHundred entry
; TODO - Write this code...
rtl
lda #900
clc
adc gameScore
sta gameScore
bcc scoreAddNineHundred_noCarry
inc gameScore+2
scoreAddNineHundred_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddNineHundred_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddNineHundred_skipZeroOnes anop
lda tileType+TILE_SCORE_TENS_OFFSET
bne scoreAddNineHundred_skipZeroTens
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_TENS_OFFSET
ldx #TILE_SCORE_TENS_OFFSET
_dirtyNonGameTile
scoreAddNineHundred_skipZeroTens anop
ldx #TILE_SCORE_HUNDREDS_OFFSET
lda #9*4
jmp scoreAddToTile
scoreAddOneThousand entry
; TODO - Write this code...
rtl
lda #1000
clc
adc gameScore
sta gameScore
bcc scoreAddOneThousand_noCarry
inc gameScore+2
scoreAddOneThousand_noCarry anop
lda tileType+TILE_SCORE_ONES_OFFSET
bne scoreAddOneThousand_skipZeroOnes
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_ONES_OFFSET
ldx #TILE_SCORE_ONES_OFFSET
_dirtyNonGameTile
scoreAddOneThousand_skipZeroOnes anop
lda tileType+TILE_SCORE_TENS_OFFSET
bne scoreAddOneThousand_skipZeroTens
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_TENS_OFFSET
ldx #TILE_SCORE_TENS_OFFSET
_dirtyNonGameTile
scoreAddOneThousand_skipZeroTens anop
lda tileType+TILE_SCORE_HUNDREDS_OFFSET
bne scoreAddOneThousand_skipZeroHundreds
lda #TILE_NUMBER_0
sta tileType+TILE_SCORE_HUNDREDS_OFFSET
ldx #TILE_SCORE_HUNDREDS_OFFSET
_dirtyNonGameTile
scoreAddOneThousand_skipZeroHundreds anop
ldx #TILE_SCORE_THOUSANDS_OFFSET
jmp scoreAddOneToTile
highScore dc i4'0'
gameScore dc i4'0'
gameIsHighScore dc i2'1'
end