diff --git a/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist b/BuGS.xcodeproj/xcuserdata/jrand.xcuserdatad/xcschemes/xcschememanagement.plist index 0d0faee..c7870af 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 - 3 + 1 BuGS.xcscheme_^#shared#^_ @@ -17,12 +17,12 @@ DiskImage.xcscheme_^#shared#^_ orderHint - 1 + 2 doNotBuild.xcscheme_^#shared#^_ orderHint - 2 + 3 diff --git a/BuGS/gameSpider.s b/BuGS/gameSpider.s index 83fffb3..75a1997 100644 --- a/BuGS/gameSpider.s +++ b/BuGS/gameSpider.s @@ -236,16 +236,9 @@ jumpInst jmp >spider1 updateSpider entry - lda spiderState - bne updateSpider_cont - rtl - -updateSpider_cont anop - - dec a - beq updateSpider_exploding - - tay + ldx spiderState + cpx #SPIDER_STATE_LEFT_DIAG_DOWN + blt updateSpider_testState lda spiderSpriteRefresh beq updateSpider_spriteRefresh @@ -268,29 +261,10 @@ updateSpider_resetSprite anop sta spiderSprite updateSpider_testState anop - tya - dec a - beq updateSpider_leftDiagDown - - dec a - beq updateSpider_leftDiagUp - - dec a - beq updateSpider_leftDown - - dec a - beq updateSpider_leftUp - - dec a - beq updateSpider_rightDiagDown - - dec a - beq updateSpider_rightDiagUp - - dec a - beq updateSpider_rightDown - - bra updateSpider_rightUp + txa + asl a + tax + jmp (spiderUpdateJumpTable,x) updateSpider_exploding anop lda spiderSprite @@ -304,16 +278,32 @@ updateSpider_explosionDone anop stz spiderState rtl - -updateSpider_leftDiagDown anop -updateSpider_leftDiagUp anop -updateSpider_leftDown anop -updateSpider_leftUp anop -updateSpider_rightDiagUp anop updateSpider_rightDown anop -updateSpider_rightUp anop -; Write this code + lda spiderScreenOffset + clc + adc #SCREEN_BYTES_PER_ROW + sta spiderScreenOffset + + lda spiderShiftInTile + dec a + sta spiderShiftInTile + bne updateSpider_done + jmp updateSpider_tilesDown +updateSpider_done anop rtl + +updateSpider_rightUp anop + + lda spiderScreenOffset + sec + sbc #SCREEN_BYTES_PER_ROW + sta spiderScreenOffset + + lda spiderShiftInTile + dec a + sta spiderShiftInTile + bne updateSpider_done + jmp updateSpider_tilesUp updateSpider_rightDiagDown anop lda spiderScreenOffset @@ -328,20 +318,56 @@ updateSpider_rightDiagDown anop inc spiderScreenOffset updateSpider_rightDiagDown_skipInc anop - lda spiderShiftInTile dec a sta spiderShiftInTile - beq updateSpider_tilesDown + bne updateSpider_rightDiagDown_cont + jmp updateSpider_tilesDown +updateSpider_rightDiagDown_cont anop cmp #SPIDER_STARTING_SHIFT - beq updateSpider_tilesRight + bne updateSpider_done + jmp updateSpider_tilesRight + +updateSpider_leftDiagDown anop +updateSpider_leftDiagUp anop +updateSpider_leftDown anop +updateSpider_leftUp anop + rtl + +updateSpider_rightDiagUp anop + lda spiderScreenOffset + sec + sbc #SCREEN_BYTES_PER_ROW + sta spiderScreenOffset + + lda spiderScreenShift + eor #1 + sta spiderScreenShift + bne updateSpider_rightDiagUp_skipInc + inc spiderScreenOffset + +updateSpider_rightDiagUp_skipInc anop + lda spiderShiftInTile + dec a + sta spiderShiftInTile + bne updateSpider_rightDiagUp_cont + jmp updateSpider_tilesUp + +updateSpider_rightDiagUp_cont anop + cmp #SPIDER_STARTING_SHIFT + bne updateSpider_done + jmp updateSpider_tilesRight rtl updateSpider_tilesRight anop ldx spiderTileOffsets+4 - cmp #RHS_FIRST_TILE_OFFSET - bge updateSpider_offScreen + cpx #RHS_FIRST_TILE_OFFSET + blt updateSpider_tilesRight_cont + cpx #LHS_FIRST_TILE_OFFSET + bge updateSpider_tilesRight_cont + jmp updateSpider_offScreen +updateSpider_tilesRight_cont anop stx spiderTileOffsets+8 ldx spiderTileOffsets+6 @@ -358,16 +384,87 @@ updateSpider_tilesRight anop sta spiderTileOffsets rtl + +updateSpider_tilesLeft anop + ldx spiderTileOffsets+4 + cpx #LHS_FIRST_TILE_OFFSET + blt updateSpider_tilesLeft_cont + jmp updateSpider_offScreen +updateSpider_tilesLeft_cont anop + stx spiderTileOffsets + + ldx spiderTileOffsets+6 + stx spiderTileOffsets+2 + + ldx spiderTileOffsets+10 + stx spiderTileOffsets+6 + lda tiles+TILE_LEFT_OFFSET,x + sta spiderTileOffsets+10 + + ldx spiderTileOffsets+8 + stx spiderTileOffsets+4 + lda tiles+TILE_LEFT_OFFSET,x + sta spiderTileOffsets+8 + + rtl + +updateSpider_tilesUp anop + lda #TILE_PIXEL_HEIGHT + sta spiderShiftInTile + + lda spiderCurrentRow + dec a + sta spiderCurrentRow + cmp spiderTargetRow +; TODO - Change direction!! + beq updateSpider_upChangeDir + + ldx spiderTileOffsets+2 + stx spiderTileOffsets + lda tiles+TILE_ABOVE_OFFSET,x + sta spiderTileOffsets+2 + + ldx spiderTileOffsets+6 + stx spiderTileOffsets+4 + lda tiles+TILE_ABOVE_OFFSET,x + sta spiderTileOffsets+6 + +; As per the below, clear any mushroom if present + cpx #RHS_FIRST_TILE_OFFSET + bge updateSpider_tilesUpCont + lda tiles+TILE_TYPE_OFFSET,x + beq updateSpider_tilesUpCont + lda #TILE_EMPTY + sta tiles+TILE_TYPE_OFFSET,x + +updateSpider_tilesUpCont anop + ldx spiderTileOffsets+10 + stx spiderTileOffsets+8 + lda tiles+TILE_ABOVE_OFFSET,x + sta spiderTileOffsets+10 + rtl + +updateSpider_upChangeDir anop +; TODO - Randomly pick direction and row + lda #GAME_NUM_TILES_TALL-1 + sta spiderTargetRow + lda #SPIDER_STATE_RIGHT_DIAG_DOWN + sta spiderState + rtl updateSpider_tilesDown anop lda #TILE_PIXEL_HEIGHT sta spiderShiftInTile + lda spiderCurrentRow + inc a + sta spiderCurrentRow + cmp spiderTargetRow + beq updateSpider_downChangeDir + ldx spiderTileOffsets stx spiderTileOffsets+2 lda tiles+TILE_BELOW_OFFSET,x - cmp #INVALID_TILE_NUM - beq updateSpider_tilesDownSkip sta spiderTileOffsets ldx spiderTileOffsets+4 @@ -389,14 +486,14 @@ updateSpider_tilesDownCont anop stx spiderTileOffsets+10 lda tiles+TILE_BELOW_OFFSET,x sta spiderTileOffsets+8 + rtl -updateSpider_tilesDownSkip anop - lda spiderCurrentRow - inc a - sta spiderCurrentRow - cmp spiderTargetRow - beq updateSpider_offScreen - +updateSpider_downChangeDir anop +; TODO - Randomly pick direction and row + lda #SPIDER_TOP_ROW + sta spiderTargetRow + lda #SPIDER_STATE_RIGHT_DIAG_UP + sta spiderState rtl updateSpider_offScreen anop @@ -503,5 +600,16 @@ spiderShiftJumpTable dc i4'spider7s' dc i4'spider3s' dc i4'spider2s' dc i4'spider1s' + +spiderUpdateJumpTable dc i2'updateSpider_done' + dc i2'updateSpider_exploding' + dc i2'updateSpider_leftDiagDown' + dc i2'updateSpider_leftDiagUp' + dc i2'updateSpider_leftDown' + dc i2'updateSpider_leftUp' + dc i2'updateSpider_rightDiagDown' + dc i2'updateSpider_rightDiagUp' + dc i2'updateSpider_rightDown' + dc i2'updateSpider_rightUp' end