diff --git a/src/main.asm b/src/main.asm index ad2117b..662ff7d 100644 --- a/src/main.asm +++ b/src/main.asm @@ -1809,8 +1809,7 @@ EndGameText: dex ; are we printing the world/lives display? bne CheckPlayerName ; if not, branch to check player's name lda NumberofLives ; otherwise, check number of lives - clc ; and increment by one for display - adc #$01 + adc #$01 ; and increment by one for display (clc optimization) cmp #10 ; more than 9 lives? bcc PutLives sbc #10 ; if so, subtract 10 and put a crown tile @@ -2182,8 +2181,7 @@ SaveHAdder: lda #$00 sta $05 ; initialize temp high byte lda $02 ; get vertical high nybble offset used in block buffer routine - clc - adc #$20 ; add 32 pixels for the status bar + adc #$20 ; add 32 pixels for the status bar (clc optimization) asl rol $05 ; shift and rotate d7 onto d0 and d6 into carry asl @@ -4610,9 +4608,8 @@ GetAreaDataAddrs: lda AreaPointer ; mask out all but 5 LSB and #%00011111 sta AreaAddrsLOffset ; save as low offset - lda EnemyAddrHOffsets,y ; load base value with 2 altered MSB, - clc ; then add base value to 5 LSB, result - adc AreaAddrsLOffset ; becomes offset for level data + lda EnemyAddrHOffsets,y ; load base value with 2 altered MSB, then add base value to 5 LSB, + adc AreaAddrsLOffset ; result becomes offset for level data (clc optimization) tay lda EnemyDataAddrLow,y ; use offset to load pointer sta EnemyDataLow @@ -6590,9 +6587,8 @@ RghtFrict: XSpdSign: cmp #$00 ; if player not moving or moving to the right, bpl SetAbsSpd ; branch and leave horizontal speed value unmodified - eor #$ff - clc ; otherwise get two's compliment to get absolute - adc #$01 ; unsigned walking/running speed + eor #$ff ; otherwise get two's compliment to get absolute + adc #$01-1 ; unsigned walking/running speed (clc optimization) SetAbsSpd: sta Player_XSpeedAbsolute ; store walking/running speed here and leave rts @@ -6883,8 +6879,7 @@ WhirlpoolActivate: lsr ; shift d0 into carry (to run on every other frame) bcc WhPull ; if d0 not set, branch to last part of code lda $01 ; get center - sec - sbc Player_X_Position ; subtract player's horizontal coordinate + sbc Player_X_Position ; subtract player's horizontal coordinate (sec optimization) lda $00 ; get page location of center sbc Player_PageLoc ; subtract borrow bpl LeftWh ; if player to the left of center, branch @@ -6900,8 +6895,7 @@ LeftWh: lsr ; shift d0 into carry bcc WhPull ; if d0 not set, branch lda Player_X_Position ; otherwise slowly pull player right, towards the center - clc - adc #$01 ; add one pixel + adc #$01-1 ; add one pixel (clc optimization) sta Player_X_Position ; set player's new horizontal coordinate lda Player_PageLoc adc #$00 ; add carry @@ -7156,8 +7150,7 @@ FireCannon: lda Cannon_X_Position,y ; get horizontal coordinate of cannon sta Enemy_X_Position,x ; save as horizontal coordinate of bullet bill lda Cannon_Y_Position,y ; get vertical coordinate of cannon - sec - sbc #$08 ; subtract eight pixels (because enemies are 24 pixels tall) + sbc #$08-1 ; subtract eight pixels (because enemies are 24 pixels tall) (sec optimization) sta Enemy_Y_Position,x ; save as vertical coordinate of bullet bill lda #$01 sta Enemy_Y_HighPos,x ; set vertical high byte of bullet bill @@ -7283,8 +7276,7 @@ ProcHammerObj: beq SetHSpd ; if currently at 2, branch bcs SetHPos ; if greater than 2, branch elsewhere txa - clc ; add 13 bytes to use - adc #$0d ; proper misc object + adc #$0d ; add 13 bytes to use proper misc object (clc optimization) tax ; return offset to X lda #$10 sta $00 ; set downward movement force @@ -7309,8 +7301,7 @@ SetHSpd: SetHPos: dec Misc_State,x ; decrement hammer's state lda Enemy_X_Position,y ; get enemy's horizontal position - clc - adc #$02 ; set position 2 pixels to the right + adc #$02-1 ; set position 2 pixels to the right (clc optimization) sta Misc_X_Position,x ; store as hammer's horizontal position lda Enemy_PageLoc,y ; get enemy's page location adc #$00 ; add carry @@ -8739,8 +8730,7 @@ CreateSpiny: lda #$01 ; put spiny within vertical screen unit sta Enemy_Y_HighPos,x lda Enemy_Y_Position,y ; put spiny eight pixels above where lakitu is - sec - sbc #$08 + sbc #$08 ; (sec optimization) sta Enemy_Y_Position,x lda PseudoRandomBitReg,x ; get 2 LSB of LSFR and save to Y and #%00000011 @@ -8872,8 +8862,7 @@ MaxCC: asl ; otherwise, multiply A by 2 GSeed: pha ; save to stack - clc - adc $00 ; add to last two bits of LSFR we saved earlier + adc $00 ; add to last two bits of LSFR we saved earlier (clc optimization) sta $00 ; save it there lda PseudoRandomBitReg+1,x and #%00000011 ; if neither of the last two bits of second LSFR set, @@ -8883,8 +8872,7 @@ GSeed: sta $00 ; third LSFR part RSeed: pla ; get value from stack we saved earlier - clc - adc $01 ; add to last two bits of LSFR we saved in other place + adc $01 ; add to last two bits of LSFR we saved in other place (clc optimization) tay ; use as pseudorandom offset here lda FlyCCXSpeedData,y ; get horizontal speed using pseudorandom offset sta Enemy_X_Speed,x @@ -8897,9 +8885,8 @@ RSeed: and #%00000010 beq D2XPos1 ; if d1 not set, branch lda Enemy_X_Speed,x - eor #$ff ; if d1 set, change horizontal speed - clc ; into two's compliment, thus moving in the opposite - adc #$01 ; direction + eor #$ff ; if d1 set, change horizontal speed into two's compliment, + adc #$01 ; thus moving in the opposite direction (clc optimization) sta Enemy_X_Speed,x inc Enemy_MovingDir,x ; increment to move towards the left D2XPos1: @@ -9022,8 +9009,7 @@ PutAtRightExtent: SpawnFromMouth: lda Enemy_X_Position,y ; get bowser's horizontal position - sec - sbc #$0e ; subtract 14 pixels + sbc #$0e ; subtract 14 pixels (sec optimization) sta Enemy_X_Position,x ; save as flame's horizontal position lda Enemy_PageLoc,y sta Enemy_PageLoc,x ; copy page location from bowser to flame @@ -9077,9 +9063,8 @@ StarFChk: lda Enemy_ID,y ; check for presence of star flag object cmp #StarFlagObject ; if there isn't a star flag object, bne StarFChk ; routine goes into infinite loop = crash - lda Enemy_X_Position,y - sec ; get horizontal coordinate of star flag object, then - sbc #$30 ; subtract 48 pixels from it and save to + lda Enemy_X_Position,y ; get horizontal coordinate of star flag object, then + sbc #$30 ; subtract 48 pixels from it and save to (sec optimization) pha ; the stack lda Enemy_PageLoc,y sbc #$00 ; subtract the carry from the page location @@ -9198,8 +9183,7 @@ FireBulletBill: HandleGroupEnemies: ldy #$00 ; load value for green koopa troopa - sec - sbc #$37 ; subtract $37 from second byte read + sbc #$37-1 ; subtract $37 from second byte read (sec optimization) pha ; save result in stack for now cmp #$04 ; was byte in $3b-$3e range? bcs SnglID ; if so, branch @@ -9243,8 +9227,7 @@ GSltLp: sta Enemy_PageLoc,x ; store page location for enemy object lda $03 sta Enemy_X_Position,x ; store x coordinate for enemy object - clc - adc #$18 ; add 24 pixels for next enemy + adc #$18 ; add 24 pixels for next enemy (clc optimization) sta $03 lda $02 ; add carry to page location for adc #$00 ; next enemy @@ -9270,8 +9253,7 @@ InitPiranhaPlant: sta PiranhaPlant_MoveFlag,x ; be used as vertical speed, but not in this case lda Enemy_Y_Position,x sta PiranhaPlantDownYPos,x ; save original vertical coordinate here - sec - sbc #$18 + sbc #$18 ; (sec optimization) sta PiranhaPlantUpYPos,x ; save original vertical coordinate - 24 pixels here lda #$09 jmp SetBBox2 ; set specific value for bounding box control @@ -9440,10 +9422,10 @@ CommonSmallLift: ;-------------------------------- PlatPosDataLow: - .byte $08,$0c,$f8 + .byte $08, $0c, $f8 PlatPosDataHigh: - .byte $00,$00,$ff + .byte $00, $00, $ff PosPlatform: lda Enemy_X_Position,x ; get horizontal coordinate @@ -10016,8 +9998,7 @@ ProcSwimmingB: pla ; pull 3 LSB of frame counter from the stack bne BSwimE ; branch to leave, execute code only every eighth frame lda Enemy_Y_MoveForce,x - clc ; add to movement force to speed up swim - adc #$01 + adc #$01 ; add to movement force to speed up swim (clc optimization) sta Enemy_Y_MoveForce,x ; set movement force sta BlooperMoveSpeed,x ; set as movement speed cmp #$02 @@ -10030,8 +10011,7 @@ SlowSwim: pla ; pull 3 LSB of frame counter from the stack bne NoSSw ; branch to leave, execute code only every eighth frame lda Enemy_Y_MoveForce,x - sec ; subtract from movement force to slow swim - sbc #$01 + sbc #$01 ; subtract from movement force to slow swim (sec optimization) sta Enemy_Y_MoveForce,x ; set movement force sta BlooperMoveSpeed,x ; set as movement speed bne NoSSw ; if any speed, branch to leave @@ -10211,8 +10191,7 @@ SusFbar: cmp #$18 bne SetupGFB ; if not at twenty-four branch to not change SkpFSte: - clc - adc #$01 ; add one to spinning thing to avoid horizontal state + adc #$01-1 ; add one to spinning thing to avoid horizontal state (clc optimization) sta FirebarSpinState_High,x SetupGFB: sta $ef ; save high byte of spinning thing, modified or otherwise @@ -10275,8 +10254,7 @@ AddHA: sbc $06 ; original one and skip this part jmp ChkFOfs SubtR1: - sec ; subtract original X from the - sbc Enemy_Rel_XPos ; current sprite X + sbc Enemy_Rel_XPos ; subtract original X from the current sprite X (sec optimization) ChkFOfs: cmp #$59 ; if difference of coordinates within a certain range, bcc VAHandl ; continue by handling vertical adder @@ -10337,8 +10315,7 @@ ChkVFBD: cmp #$f0 ; because, really, what's the point? bcs Chk2Ofs lda Sprite_X_Position+4 ; get OAM X coordinate for sprite #1 - clc - adc #$04 ; add four pixels + adc #$04 ; add four pixels (clc optimization) sta $04 ; store here sec ; subtract horizontal coordinate of firebar sbc $06 ; from the X coordinate of player's sprite 1 @@ -10387,33 +10364,28 @@ GetFirebarPosition: cmp #$09 bcc GetHAdder ; if lower than $09, branch ahead eor #%00001111 ; otherwise get two's compliment to oscillate - clc - adc #$01 + adc #$01-1 ; (clc optimization) GetHAdder: sta $01 ; store result, modified or not, here ldy $00 ; load number of firebar ball where we're at lda FirebarTblOffsets,y ; load offset to firebar position data - clc - adc $01 ; add oscillated high byte of spinstate + adc $01 ; add oscillated high byte of spinstate (clc optimization) tay ; to offset here and use as new offset lda FirebarPosLookupTbl,y ; get data here and store as horizontal adder sta $01 pla ; pull whatever was in A from the stack pha ; save it again because we still need it - clc - adc #$08 ; add eight this time, to get vertical adder + adc #$08 ; add eight this time, to get vertical adder (clc optimization) and #%00001111 ; mask out high nybble cmp #$09 ; if lower than $09, branch ahead bcc GetVAdder eor #%00001111 ; otherwise get two's compliment - clc - adc #$01 + adc #$01-1 ; (clc optimization) GetVAdder: sta $02 ; store result here ldy $00 lda FirebarTblOffsets,y ; load offset to firebar position data again - clc - adc $02 ; this time add value in $02 to offset here and use as offset + adc $02 ; this time add value in $02 to offset here and use as offset (clc optimization) tay lda FirebarPosLookupTbl,y ; get data here and store as vertica adder sta $02 @@ -10460,8 +10432,7 @@ AddCCF: cmp #$08 ; if result or two's compliment greater than eight, bcs BPGet ; skip to the end without changing movement force lda Enemy_Y_MoveForce,x - clc - adc #$10 ; otherwise add to it + adc #$10 ; otherwise add to it (clc optimization) sta Enemy_Y_MoveForce,x lsr ; move high nybble to low again lsr @@ -11262,8 +11233,7 @@ ChkToMoveBalPlat: lda PlatformCollisionFlag,x ; get collision flag bpl ColFlg ; branch if collision lda Enemy_Y_MoveForce,x - clc ; add $05 to contents of moveforce, whatever they be - adc #$05 + adc #$05 ; add $05 to contents of moveforce, whatever they be (clc optimization) sta $00 ; store here lda Enemy_Y_Speed,x adc #$00 ; add carry to vertical speed @@ -11386,8 +11356,7 @@ GetLRp: pla ; get second/third copy of vertical speed from stack bpl GetHRp ; skip this part if moving downwards or not at all txa - clc - adc #$08 ; add eight to vertical coordinate and + adc #$08 ; add eight to vertical coordinate (clc optimization) and tax ; save as X GetHRp: txa ; move vertical coordinate to A @@ -11796,8 +11765,7 @@ PlayerHammerCollision: sta Misc_Collision_Flag,x ; otherwise set collision flag now lda Misc_X_Speed,x eor #$ff ; get two's compliment of - clc ; hammer's horizontal speed - adc #$01 + adc #$01-1 ; hammer's horizontal speed (clc optimization) sta Misc_X_Speed,x ; set to send hammer flying the opposite direction lda StarInvincibleTimer ; if star mario invincibility timer set, bne ExPHC ; branch to leave @@ -11958,8 +11926,7 @@ ChkInj: cmp #Bloober bcc ChkETmrs lda Player_Y_Position ; add 12 pixels to player's vertical position - clc - adc #$0c + adc #$0c-1 ; (clc optimization) cmp Enemy_Y_Position,x ; compare modified player's position to enemy's position bcc EnemyStomped ; branch if this player's position above (less than) enemy's ChkETmrs: @@ -12082,8 +12049,7 @@ HandleStompedShellE: sta Enemy_State,x inc StompChainCounter ; increment the stomp counter lda StompChainCounter ; add whatever is in the stomp counter - clc ; to whatever is in the stomp timer - adc StompTimer + adc StompTimer ; to whatever is in the stomp timer (clc optimization) jsr SetupFloateyNumber ; award points accordingly inc StompTimer ; increment stomp timer of some sort ldy PrimaryHardMode ; check primary hard mode flag @@ -12350,8 +12316,7 @@ ChkSmallPlatLoop: MoveBoundBox: lda BoundingBox_UL_YPos,y ; move bounding box vertical coordinates - clc ; 128 pixels downwards - adc #$80 + adc #$80 ; 128 pixels downwards (clc optimization) sta BoundingBox_UL_YPos,y lda BoundingBox_DR_YPos,y clc @@ -12369,9 +12334,8 @@ ProcSPlatCollisions: ldx ObjectOffset ; return enemy object buffer offset to X, then continue ProcLPlatCollisions: - lda BoundingBox_DR_YPos,y ; get difference by subtracting the top - sec ; of the player's bounding box from the bottom - sbc BoundingBox_UL_YPos ; of the platform's bounding box + lda BoundingBox_DR_YPos,y ; get difference by subtracting the top of the player's bounding box + sbc BoundingBox_UL_YPos ; from the bottom of the platform's bounding box (sec optimization) cmp #$04 ; if difference too large or negative, bcs ChkForTopCollision ; branch, do not alter vertical speed of player lda Player_Y_Speed ; check to see if player's vertical speed is moving down @@ -12442,8 +12406,7 @@ PositionPlayerOnVPlat: ldy Enemy_Y_HighPos,x cpy #$01 ; if vertical high byte offscreen, skip this bne ExPlPos - sec ; subtract 32 pixels from vertical coordinate - sbc #$20 ; for the player object's height + sbc #$20 ; subtract 32 pixels from vertical coordinate for the player object's height (sec optimization) sta Player_Y_Position ; save as player's new vertical coordinate tya sbc #$00 ; subtract borrow and store as player's @@ -13145,7 +13108,7 @@ LandEnemyProperly: and #%01000000 ; branch if d6 in enemy state is set bne LandEnemyInitState lda Enemy_State,x - bpl ChkLandedEnemyState ; branch if d7 in enemy state is not set + bpl ChkLandedEnemyState ; branch if d7 in enemy state is not set SChkA: jmp DoEnemySideCheck ; if lower nybble < $0d, d7 set but d6 not set, jump here @@ -13308,8 +13271,7 @@ EnemyJump: jsr SubtEnemyYPos ; do a sub here bcc DoSide ; if enemy vertical coord + 62 < 68, branch to leave lda Enemy_Y_Speed,x - clc ; add two to vertical speed - adc #$02 + adc #$02-1 ; add two to vertical speed (clc optimization) cmp #$03 ; if green paratroopa not falling, branch ahead bcc DoSide jsr ChkUnderEnemy ; otherwise, check to see if green paratroopa is @@ -13661,8 +13623,7 @@ BlockBufferChk_Enemy: BlockBufferChk_FBall: ldy #$1a ; set offset for block buffer adder data txa - clc - adc #$07 ; add seven bytes to use + adc #$07-1 ; add seven bytes to use (clc optimization) tax lda #$00 ; set A to return vertical coordinate BBChk_E: @@ -14101,8 +14062,7 @@ JCoinGfxHandler: bcs DrawFloateyNumber_Coin ; branch to draw floatey number lda Misc_Y_Position,x ; store vertical coordinate as sta Sprite_Y_Position,y ; Y coordinate for first sprite - clc - adc #$08 ; add eight pixels + adc #$08 ; add eight pixels (clc optimization) sta Sprite_Y_Position+4,y ; store as Y coordinate for second sprite lda Misc_Rel_XPos ; get relative horizontal coordinate sta Sprite_X_Position,y @@ -14402,8 +14362,7 @@ ChkRearSte: and #%00100000 ; if bowser not defeated, do not set flag beq DrawBowser lda $02 ; subtract 16 pixels from - sec ; saved vertical coordinate - sbc #$10 + sbc #$10 ; saved vertical coordinate (sec optimization) sta $02 jmp FlipBowserOver ; jump to set vertical flip flag @@ -14577,9 +14536,8 @@ CheckForVerticalFlip: cmp #$15 bcs FlipEnemyVertically ; also branch if enemy object => $15 txa - clc adc #$08 ; if not selected objects or => $15, set - tax ; offset in X for next row + tax ; offset in X for next row (clc optimization) FlipEnemyVertically: lda Sprite_Tilenumber,x ; load first or second row tiles