From 18d0c3a80f29c44311acb5824a9bed6b57c0fc72 Mon Sep 17 00:00:00 2001 From: Jeremy Rand Date: Sat, 25 Jul 2020 14:54:35 -0400 Subject: [PATCH] Add some randomness when the spider changes direction. --- BuGS/gameSpider.s | 23 ++++++++++++++++++++++- BuGS/random.s | 24 +++++++++++++++++++++--- 2 files changed, 43 insertions(+), 4 deletions(-) diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index 9d5b23f..83fffb3 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -37,6 +37,7 @@ SPIDER_RHS_TILE_OFFSET equ SPIDER_TOP_ROW_OFFSET+(GAME_NUM_TILES_WIDE-1)*SI SPIDER_STARTING_SHIFT equ 2 SPIDER_LHS_STARTING_SCREEN_OFFSET equ SCREEN_BYTES_PER_ROW*SPIDER_STARTING_SHIFT+6 +; Every four frames, change the spider sprite SPIDER_SPRITE_REFRESH_COUNT equ 4 @@ -366,7 +367,7 @@ updateSpider_tilesDown anop stx spiderTileOffsets+2 lda tiles+TILE_BELOW_OFFSET,x cmp #INVALID_TILE_NUM - beq updateSpider_offScreen + beq updateSpider_tilesDownSkip sta spiderTileOffsets ldx spiderTileOffsets+4 @@ -374,6 +375,8 @@ updateSpider_tilesDown anop lda tiles+TILE_BELOW_OFFSET,x sta spiderTileOffsets+4 +; If the middle tile is a game time and it isn't empty, then +; empty it. Spiders "consume" mushrooms as they pass over them. cpx #RHS_FIRST_TILE_OFFSET bge updateSpider_tilesDownCont lda tiles+TILE_TYPE_OFFSET,x @@ -387,6 +390,13 @@ updateSpider_tilesDownCont anop lda tiles+TILE_BELOW_OFFSET,x sta spiderTileOffsets+8 +updateSpider_tilesDownSkip anop + lda spiderCurrentRow + inc a + sta spiderCurrentRow + cmp spiderTargetRow + beq updateSpider_offScreen + rtl updateSpider_offScreen anop @@ -437,6 +447,14 @@ addSpider entry lda #SPIDER_SPRITE_REFRESH_COUNT sta spiderSpriteRefresh + lda #SPIDER_TOP_ROW-1 + sta spiderCurrentRow + + lda #SPIDER_NUM_POSSIBLE_ROWS-1 + jsl randN + adc #SPIDER_TOP_ROW+1 + sta spiderTargetRow + addSpider_done anop rtl @@ -453,6 +471,9 @@ spiderScreenOffset dc i2'0' spiderScreenShift dc i2'0' spiderShiftInTile dc i2'0' +spiderCurrentRow dc i2'0' +spiderTargetRow dc i2'0' + ; 10 6 2 ; 8 4 0 diff --git a/BuGS/random.s b/BuGS/random.s index 011ba23..af3381e 100644 --- a/BuGS/random.s +++ b/BuGS/random.s @@ -51,6 +51,7 @@ randInit_store16 anop rtl + ; Returns a number from 0 to 14 rand0_to_14 entry lda seed16 @@ -62,6 +63,21 @@ skipEor16 anop dec a rtl +; Returns a number from 0 to N-1 where N is <= 15, arrives in the accumulator +randN entry + cmp #2 + bge randN_doit + lda #0 + rtl + +randN_doit anop + sta upperLimit +randN_retry anop + jsl rand0_to_14 + cmp upperLimit + bge randN_retry + rtl + ; Returns a number from 0 to 30 rand0_to_30 entry @@ -94,7 +110,9 @@ skipEor65535 anop rtl -seed65535 dc i2'0' -seed32 dc i2'0' -seed16 dc i2'0' +seed65535 dc i2'0' +seed32 dc i2'0' +seed16 dc i2'0' + +upperLimit dc i2'0' end