diff --git a/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist b/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist index 1ebd7b3..dc9e153 100644 --- a/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Binary.xcscheme_^#shared#^_ orderHint - 1 + 3 BuGS.xcscheme_^#shared#^_ @@ -17,12 +17,12 @@ DiskImage.xcscheme_^#shared#^_ orderHint - 3 + 2 doNotBuild.xcscheme_^#shared#^_ orderHint - 2 + 1 diff --git a/BuGS/game.s b/BuGS/game.s index fd8abff..9f61a29 100644 --- a/BuGS/game.s +++ b/BuGS/game.s @@ -161,6 +161,10 @@ drawTile entry jumpInst jmp >mushroom1 nop + +addPlayer entry +; TODO - Write code to add a new life. + rtl setupScreen entry @@ -229,7 +233,7 @@ checkKey_loop2 anop beq checkKey_quit cmp #'f' - beq checkKey_addFlea + beq checkKey_shootFlea cmp #'F' beq checkKey_shootFlea @@ -244,9 +248,7 @@ checkKey_loop2 anop beq checkKey_shootSpider cmp #'+' - beq checkKey_fast - cmp #'-' - beq checkKey_slow + beq checkKey_scoreAdd cmp #'g' beq checkKey_game @@ -259,9 +261,6 @@ checkKey_loop2 anop checkKey_done anop rtl -checkKey_addFlea anop - jmp addFlea - checkKey_shootFlea anop jmp shootFlea @@ -273,18 +272,13 @@ checkKey_shootSpider anop checkKey_shootCentipede anop jmp shootRandomSegment + +checkKey_scoreAdd anop + jmp scoreAddTwentyThousand checkKey_quit anop stz shouldQuit rtl - -checkKey_fast anop - lda #SPRITE_SPEED_FAST - jsl setFleaSpeed - -checkKey_slow anop - lda #SPRITE_SPEED_SLOW - jsl setFleaSpeed checkKey_game anop jmp startGame diff --git a/BuGS/gameFlea.s b/BuGS/gameFlea.s index f81c522..1162ae4 100644 --- a/BuGS/gameFlea.s +++ b/BuGS/gameFlea.s @@ -64,11 +64,10 @@ jumpInst jmp >flea1 updateFlea entry lda fleaState - bne updateFlea_cont - -updateFlea_cont anop + beq updateFlea_maybeAdd + cmp #FLEA_STATE_FALLING - beq updateFlea_cont2 + beq updateFlea_cont ; Handle explosion lda fleaSprite @@ -81,8 +80,39 @@ updateFlea_cont anop updateFlea_explosionDone anop stz fleaState rtl + +updateFlea_maybeAdd anop + lda gameRunning + bne updateFlea_doNotAdd + lda gameLevel + beq updateFlea_doNotAdd + lda scoreNum20000 + bne updateFlea_moreThan20000 +; Below 20000 points, 5 or more mushrooms do not result in a flea + lda #4 + bra updateFlea_checkNumMushrooms +updateFlea_moreThan20000 anop + cmp #6 + bge updateFlea_moreThan120000 +; Between 20000 and 120000, 9 or more mushrooms do not result in a flea + lda #8 + bra updateFlea_checkNumMushrooms +updateFlea_moreThan120000 anop +; Above 120000, 15 or more mushrooms do not result in a flea and for every +; 20000 more points, this goes up by 1 more mushroom. So, the accumulator +; has 6 in it for scores from 120000 to 139999. Add 8 to that to get 14 +; which is the threshold at which fleas appear. + clc + adc #8 +updateFlea_checkNumMushrooms anop + cmp numInfieldMushrooms + blt updateFlea_doNotAdd + jmp addFlea + +updateFlea_doNotAdd anop + rtl -updateFlea_cont2 anop +updateFlea_cont anop lda fleaHeightInTile beq updateFlea_nextTile dec a @@ -133,7 +163,9 @@ updateFlea_nextTile anop bne updateFlea_nextAction lda #TILE_MUSHROOM4 sta tileType,x - + cpx #SPIDER_TOP_ROW_OFFSET + blt updateFlea_nextAction + inc numInfieldMushrooms bra updateFlea_nextAction updateFlea_bottom anop @@ -155,8 +187,16 @@ updateFlea_done anop addFlea entry lda fleaState bne addFlea_done - - lda fleaSpriteSpeed + + lda scoreNum20000 + cmp #3 + bge addFlea_fast + lda #SEGMENT_SPEED_SLOW + bra addFlea_setSpeed +addFlea_fast anop + lda #SEGMENT_SPEED_FAST +addFlea_setSpeed anop + sta fleaSpriteSpeed jsl setFleaSpeed lda #FLEA_STATE_FALLING diff --git a/BuGS/gameScorpion.s b/BuGS/gameScorpion.s index 60c5c35..6a597bb 100644 --- a/BuGS/gameScorpion.s +++ b/BuGS/gameScorpion.s @@ -245,11 +245,8 @@ addScorpion entry rtl addScorpion_doit anop - lda gameScore+2 + lda scoreNum20000 bne addScorpion_randomSpeed - lda gameScore - cmp #20000 - bge addScorpion_randomSpeed addScorpion_slow anop lda #SPRITE_SPEED_SLOW bra addScorpion_setSpeed diff --git a/BuGS/gameSegments.s b/BuGS/gameSegments.s index d382459..337b6a6 100644 --- a/BuGS/gameSegments.s +++ b/BuGS/gameSegments.s @@ -1687,14 +1687,17 @@ shootSegment_doneScore anop bge shootSegment_skipMushroom tay lda tileType,y - beq shootSegment_normalMushroom + beq shootSegment_noMushroom cmp #TILE_POISON_MUSHROOM1 - bge shootSegment_poisonMushroom + blt shootSegment_normalMushroom + lda #TILE_POISON_MUSHROOM4 + bra shootSegment_dirtyTile +shootSegment_noMushroom anop + cpy #SPIDER_TOP_ROW_OFFSET + blt shootSegment_normalMushroom + inc numInfieldMushrooms shootSegment_normalMushroom anop lda #TILE_MUSHROOM4 - bra shootSegment_dirtyTile -shootSegment_poisonMushroom anop - lda #TILE_POISON_MUSHROOM4 shootSegment_dirtyTile anop sta tileType,y lda #TILE_STATE_DIRTY diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index b09ccfc..4e527cf 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -26,10 +26,6 @@ SPIDER_STATE_RIGHT_DOWN equ 9 SPIDER_STATE_RIGHT_UP equ 10 -; A spider only travels in the bottom N rows. This defines that number. -SPIDER_NUM_POSSIBLE_ROWS equ 10 -SPIDER_TOP_ROW equ GAME_NUM_TILES_TALL-SPIDER_NUM_POSSIBLE_ROWS -SPIDER_TOP_ROW_OFFSET equ SPIDER_TOP_ROW*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO SPIDER_LHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET SPIDER_RHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET+(GAME_NUM_TILES_WIDE-1)*SIZEOF_TILE_INFO @@ -422,6 +418,9 @@ updateSpider_tilesUp anop beq updateSpider_tilesUpCont lda #TILE_EMPTY sta tileType,x + cpx #SPIDER_TOP_ROW_OFFSET + blt updateSpider_tilesUpCont + dec numInfieldMushrooms updateSpider_tilesUpCont anop ldx spiderTileOffsets+10 @@ -494,6 +493,9 @@ updateSpider_tilesDown anop beq updateSpider_tilesDownCont lda #TILE_EMPTY sta tileType,x + cpx #SPIDER_TOP_ROW_OFFSET + blt updateSpider_tilesDownCont + dec numInfieldMushrooms updateSpider_tilesDownCont anop ldx spiderTileOffsets+8 diff --git a/BuGS/global.macros b/BuGS/global.macros index 1da1d1a..6831da9 100644 --- a/BuGS/global.macros +++ b/BuGS/global.macros @@ -138,3 +138,38 @@ _dirtyGameTile_skip&SYSCNT anop _dirtyNonGameTile_skip&SYSCNT anop mend + + +; Update the score + macro + _incrementScore &increment + lda #&increment + clc + adc gameScore + sta gameScore + bcc _incrementScore_noCarry&SYSCNT + inc gameScore+2 +_incrementScore_noCarry&SYSCNT anop + lda #&increment + clc + adc scoreWithin12000 + cmp #12000 + blt _incrementScore_noExtraMan&SYSCNT + sec + sbc #12000 + pha + jsl addPlayer + pla +_incrementScore_noExtraMan&SYSCNT anop + sta scoreWithin12000 + lda #&increment + clc + adc scoreWithin20000 + cmp #20000 + blt _incrementScore_no2000&SYSCNT + sec + sbc #20000 + inc scoreNum20000 +_incrementScore_no2000&SYSCNT anop + sta scoreWithin20000 + mend diff --git a/BuGS/globals.s b/BuGS/globals.s index 14537c2..d67b224 100644 --- a/BuGS/globals.s +++ b/BuGS/globals.s @@ -28,6 +28,11 @@ SEGMENT_DIR_RIGHT equ 1 SEGMENT_SPEED_FAST equ 0 SEGMENT_SPEED_SLOW equ 1 +; A spider only travels in the bottom N rows. This defines that number. +SPIDER_NUM_POSSIBLE_ROWS equ 10 +SPIDER_TOP_ROW equ GAME_NUM_TILES_TALL-SPIDER_NUM_POSSIBLE_ROWS +SPIDER_TOP_ROW_OFFSET equ SPIDER_TOP_ROW*GAME_NUM_TILES_WIDE*SIZEOF_TILE_INFO + SCREEN_BYTES_PER_ROW gequ 160 SIZEOF_TILE_INFO gequ 2 @@ -140,6 +145,7 @@ gameRunning dc i2'1' numSegments dc i2'0' gameLevel dc i2'0' gameScore dc i4'0' +scoreNum20000 dc i2'0' backupStack dc i2'0' diff --git a/BuGS/level.s b/BuGS/level.s index d39c9e4..73a6b43 100644 --- a/BuGS/level.s +++ b/BuGS/level.s @@ -95,10 +95,8 @@ levelNext_skip anop sta colourLevelNum inc gameLevel - lda gameScore+2 - bne levelNext_fastOnly - lda gameScore - cmp #40000 + lda scoreNum20000 + cmp #2 bge levelNext_fastOnly ldy centipedeLevelNum diff --git a/BuGS/score.s b/BuGS/score.s index ab41e80..c3761b6 100644 --- a/BuGS/score.s +++ b/BuGS/score.s @@ -19,10 +19,14 @@ TILE_SCORE_ONES_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 +TILE_SCORE_TEN_THOUSANDS_OFFSET equ TILE_SCORE_THOUSANDS_OFFSET-SIZEOF_TILE_INFO scoreStartGame entry stz gameScore stz gameScore+2 + stz scoreWithin12000 + stz scoreWithin20000 + stz scoreNum20000 ldx #TILE_SCORE_ONES_OFFSET lda #TILE_NUMBER_0 @@ -158,35 +162,20 @@ scoreAddToTile_done anop scoreAddOne entry - inc gameScore - bne scoreAddOne_noCarry - inc gameScore+2 -scoreAddOne_noCarry anop + _incrementScore 1 ldx #TILE_SCORE_ONES_OFFSET jmp scoreAddOneToTile scoreAddFive entry - lda #5 - clc - adc gameScore - sta gameScore - bcc scoreAddFive_noCarry - inc gameScore+2 -scoreAddFive_noCarry anop + _incrementScore 5 ldx #TILE_SCORE_ONES_OFFSET lda #5*4 jmp scoreAddToTile scoreAddTen entry - lda #10 - clc - adc gameScore - sta gameScore - bcc scoreAddTen_noCarry - inc gameScore+2 -scoreAddTen_noCarry anop + _incrementScore 10 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddTen_skipZeroOnes lda #TILE_NUMBER_0 @@ -199,13 +188,7 @@ scoreAddTen_skipZeroOnes anop scoreAddOneHundred entry - lda #100 - clc - adc gameScore - sta gameScore - bcc scoreAddHundred_noCarry - inc gameScore+2 -scoreAddHundred_noCarry anop + _incrementScore 100 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddHundred_skipZeroOnes lda #TILE_NUMBER_0 @@ -225,13 +208,7 @@ scoreAddHundred_skipZeroTens anop scoreAddTwoHundred entry - lda #200 - clc - adc gameScore - sta gameScore - bcc scoreAddTwoHundred_noCarry - inc gameScore+2 -scoreAddTwoHundred_noCarry anop + _incrementScore 200 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddTwoHundred_skipZeroOnes lda #TILE_NUMBER_0 @@ -252,13 +229,7 @@ scoreAddTwoHundred_skipZeroTens anop scoreAddThreeHundred entry - lda #300 - clc - adc gameScore - sta gameScore - bcc scoreAddThreeHundred_noCarry - inc gameScore+2 -scoreAddThreeHundred_noCarry anop + _incrementScore 300 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddThreeHundred_skipZeroOnes lda #TILE_NUMBER_0 @@ -279,13 +250,7 @@ scoreAddThreeHundred_skipZeroTens anop scoreAddSixHundred entry - lda #600 - clc - adc gameScore - sta gameScore - bcc scoreAddSixHundred_noCarry - inc gameScore+2 -scoreAddSixHundred_noCarry anop + _incrementScore 600 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddSixHundred_skipZeroOnes lda #TILE_NUMBER_0 @@ -306,13 +271,7 @@ scoreAddSixHundred_skipZeroTens anop scoreAddNineHundred entry - lda #900 - clc - adc gameScore - sta gameScore - bcc scoreAddNineHundred_noCarry - inc gameScore+2 -scoreAddNineHundred_noCarry anop + _incrementScore 900 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddNineHundred_skipZeroOnes lda #TILE_NUMBER_0 @@ -333,13 +292,7 @@ scoreAddNineHundred_skipZeroTens anop scoreAddOneThousand entry - lda #1000 - clc - adc gameScore - sta gameScore - bcc scoreAddOneThousand_noCarry - inc gameScore+2 -scoreAddOneThousand_noCarry anop + _incrementScore 1000 lda tileType+TILE_SCORE_ONES_OFFSET bne scoreAddOneThousand_skipZeroOnes lda #TILE_NUMBER_0 @@ -363,8 +316,21 @@ scoreAddOneThousand_skipZeroTens anop scoreAddOneThousand_skipZeroHundreds anop ldx #TILE_SCORE_THOUSANDS_OFFSET jmp scoreAddOneToTile + +; This function is used purely for debug to test high score threshold stuff. It +; doesn't do all the right things though to update the score on the display so I am +; cheating a bit here. +scoreAddTwentyThousand entry + _incrementScore 20000 + ldx #TILE_SCORE_TEN_THOUSANDS_OFFSET + lda #2*4 + jmp scoreAddToTile + + highScore dc i4'0' +scoreWithin12000 dc i2'0' +scoreWithin20000 dc i2'0' end diff --git a/BuGS/tiles.c b/BuGS/tiles.c index eb6c405..96ef477 100644 --- a/BuGS/tiles.c +++ b/BuGS/tiles.c @@ -63,6 +63,8 @@ word numDirtyNonGameTiles; word numPlayers; +word numInfieldMushrooms; + /* Implementation */ @@ -282,6 +284,7 @@ void addStartingMushrooms(void) { tTileNum tileNum; unsigned int numMushrooms = 0; + numInfieldMushrooms = 0; while (numMushrooms < STARTING_NUM_MUSHROOMS) { @@ -294,5 +297,7 @@ void addStartingMushrooms(void) tileType[tileNum] = TILE_MUSHROOM4; ADD_DIRTY_GAME_TILE(tileNum); numMushrooms++; + if ((tileNum / GAME_NUM_TILES_WIDE) >= GAME_NUM_TILES_TALL - 10) + numInfieldMushrooms++; } } diff --git a/BuGS/tiles.h b/BuGS/tiles.h index b0dd49b..c5f90dc 100644 --- a/BuGS/tiles.h +++ b/BuGS/tiles.h @@ -117,6 +117,7 @@ extern word tileBitMask[NUM_GAME_TILES]; extern tTileOffset dirtyNonGameTiles[NUM_NON_GAME_TILES]; extern word numDirtyNonGameTiles; +extern word numInfieldMushrooms; /* API */