diff --git a/BuGS.xcodeproj/project.pbxproj b/BuGS.xcodeproj/project.pbxproj index 0677173..84a1603 100644 --- a/BuGS.xcodeproj/project.pbxproj +++ b/BuGS.xcodeproj/project.pbxproj @@ -82,7 +82,7 @@ 9D62AF3F2499CD1E00348F45 /* LICENSE */ = {isa = PBXFileReference; lastKnownFileType = text; path = LICENSE; sourceTree = ""; }; 9D62AF402499CD3A00348F45 /* README.md */ = {isa = PBXFileReference; lastKnownFileType = net.daringfireball.markdown; path = README.md; sourceTree = ""; }; 9D8AF0B72535542400C10E3C /* level.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = level.s; sourceTree = ""; }; - 9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = ""; }; + 9D8AF0B82535543000C10E3C /* score.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = score.s; sourceTree = ""; xcLanguageSpecificationIdentifier = xcode.lang.asm.orcam; }; 9D8FFC602491CA28005C9327 /* game.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = game.s; sourceTree = ""; }; 9D8FFC612491CAF0005C9327 /* game.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = game.h; sourceTree = ""; }; 9DB1505024C3801100558B87 /* gameFlea.s */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.asm; path = gameFlea.s; sourceTree = ""; }; diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index 59119d6..2d920aa 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -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 diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index cd9a200..ee3762d 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -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 diff --git a/BuGS/make/config.txt b/BuGS/make/config.txt index 6e02df5..4cf9182 100644 --- a/BuGS/make/config.txt +++ b/BuGS/make/config.txt @@ -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 diff --git a/BuGS/score.s b/BuGS/score.s index 063375f..b3ee84d 100644 --- a/BuGS/score.s +++ b/BuGS/score.s @@ -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