diff --git a/Sprites/Bosses/manhandla.asm b/Sprites/Bosses/manhandla.asm index 76afd50..7906203 100644 --- a/Sprites/Bosses/manhandla.asm +++ b/Sprites/Bosses/manhandla.asm @@ -295,7 +295,7 @@ Sprite_Manhandla_Move: MoveXorY: { LDA $36 : STA $00 - JSL NewSprite_ApplySpeedTowardsPlayerXOrY + JSL Sprite_ApplySpeedTowardsPlayerXOrY_Long JSR Manhandla_StopIfOutOfBounds JSL MoveBody diff --git a/Sprites/ZSpriteLib/sprite_new_functions.asm b/Sprites/ZSpriteLib/sprite_new_functions.asm index 09dfd98..5a3b591 100644 --- a/Sprites/ZSpriteLib/sprite_new_functions.asm +++ b/Sprites/ZSpriteLib/sprite_new_functions.asm @@ -725,3 +725,92 @@ Sprite_SetupHitBox: db 8 ; 0x1E db 12 ; 0x1F + +Sprite_ApplySpeedTowardsPlayerXOrY_Long: +{ + JSL Sprite_IsBelowPlayer : BEQ .player_below + ;playerAbove + + REP #$20 + ; if link.y is 6 above sprite.y it is considered below + LDA SprCachedY : SEC : SBC $20 : CLC : ADC.w #$0006 : STA $01 ;delta Y + SEP #$20 + + JSL Sprite_IsToRightOfPlayer : BEQ .player_to_the_Right1 + ;player_to_the_Left + REP #$20 + LDA SprCachedX : SEC : SBC $22 ; delta X + + CMP $01 : BCS .XGreaterThanY1 + ;YGreaterThanX + SEP #$20 + LDA.b #$00 : SEC : SBC $00 : STA.w SprYSpeed + STZ.w SprXSpeed + RTL + + .XGreaterThanY1 + SEP #$20 + LDA.b #$00 : SEC : SBC $00 : STA.w SprXSpeed + STZ.w SprYSpeed + RTL + + .player_to_the_Right1 + REP #$20 + LDA $22 : SEC : SBC SprCachedX ; delta X + + CMP $01 : BCS .XGreaterThanY2 + ;YGreaterThanX + SEP #$20 + LDA.b #$00 : SEC : SBC $00 : STA.w SprYSpeed + STZ.w SprXSpeed + RTL + + .XGreaterThanY2 + SEP #$20 + LDA.b #$00 : CLC : ADC $00 : STA.w SprXSpeed + STZ.w SprYSpeed + RTL + + + .player_below + REP #$20 + ; if link.y is 6 above sprite.y it is considered below + LDA $20 : SEC : SBC SprCachedY : CLC : ADC.w #$0006 : STA $01 ; delta Y + SEP #$20 + + JSL Sprite_IsToRightOfPlayer : BEQ .player_to_the_Right2 + ;player_to_the_Left + REP #$20 + LDA SprCachedX : SEC : SBC $22 ; delta X + + CMP $01 : BCS .XGreaterThanY3 + ;YGreaterThanX + SEP #$20 + LDA.b #$00 : CLC : ADC $00 : STA.w SprYSpeed + STZ.w SprXSpeed + RTL + + .XGreaterThanY3 + SEP #$20 + LDA.b #$00 : SEC : SBC $00 : STA.w SprXSpeed + STZ.w SprYSpeed + RTL + + + .player_to_the_Right2 + REP #$20 + LDA $22 : SEC : SBC SprCachedX ; delta X + + CMP $01 : BCS .XGreaterThanY4 + ;YGreaterThanX + SEP #$20 + LDA.b #$00 : CLC : ADC $00 : STA.w SprYSpeed + STZ.w SprXSpeed + RTL + + .XGreaterThanY4 + SEP #$20 + LDA.b #$00 : CLC : ADC $00 : STA.w SprXSpeed + STZ.w SprYSpeed + RTL +} \ No newline at end of file