From f0f89a1fb742b6361d6e2376870253f268bad77e Mon Sep 17 00:00:00 2001 From: scawful Date: Sat, 6 Jul 2024 18:49:33 -0400 Subject: [PATCH] fix deku mask hover speed and control --- Masks/deku_mask.asm | 8 +++++++- Masks/mask_routines.asm | 29 ++++++++++++++--------------- Sprites/ZSpriteLib/sprites.asm | 8 +++++++- 3 files changed, 28 insertions(+), 17 deletions(-) diff --git a/Masks/deku_mask.asm b/Masks/deku_mask.asm index 38b8761..c665ed4 100644 --- a/Masks/deku_mask.asm +++ b/Masks/deku_mask.asm @@ -171,4 +171,10 @@ LinkState_UsingQuake: RTS } -warnpc $07A779 \ No newline at end of file +warnpc $07A779 + +; LinkHop_FindArbitraryLandingSpot +; Allow LinkState 0x0A to use velocity +; Previously would skip velocity for LinkState 0x0A +org $07E38B + LDA.b $5D : CMP.b #$09 \ No newline at end of file diff --git a/Masks/mask_routines.asm b/Masks/mask_routines.asm index 972514e..e7e7e20 100644 --- a/Masks/mask_routines.asm +++ b/Masks/mask_routines.asm @@ -348,19 +348,19 @@ pullpc PrepareMagicBubble: { - #_07A049: LDA.b $20 + #_07A049: LDA.b LinkY #_07A04B: STA.b $72 - #_07A04D: LDA.b $21 + #_07A04D: LDA.b LinkYH #_07A04F: STA.b $73 - #_07A051: LDA.b $22 + #_07A051: LDA.b LinkX #_07A053: STA.b $74 - #_07A055: LDA.b $23 + #_07A055: LDA.b LinkXH #_07A057: STA.b $75 - #_07A059: LDX.b $2F + #_07A059: LDX.b LinkFaceDir #_07A05B: LDY.b #$02 #_07A05D: LDA.b #$09 ; ANCILLA 09 @@ -395,8 +395,8 @@ InitCamera: { LDA.b $22 : STA.b $3F LDA.b $23 : STA.b $41 - LDA.b $20 : STA.b $3E - LDA.b $21 : STA.b $40 + LDA.b LinkY : STA.b $3E + LDA.b LinkYH : STA.b $40 RTS } @@ -410,7 +410,7 @@ HandleMovement: LDA.w .drag_y_high, Y : ADC.w $0B7F : STA.w $0B7F LDA #$01 : STA $031C LDA #$05 : STA $3D - STZ $2F + STZ.w LinkFaceDir .not_up LDA $F0 : AND #$04 : BEQ .not_down @@ -419,7 +419,7 @@ HandleMovement: LDA.w .drag_y_high, Y : ADC.w $0B7F : STA.w $0B7F LDA #$02 : STA $031C LDA #$05 : STA $3D - LDA #$02 : STA $2F + LDA #$02 : STA LinkFaceDir .not_down LDA $F0 : AND #$02 : BEQ .not_left @@ -428,7 +428,7 @@ HandleMovement: LDA.w .drag_x_high, Y : ADC.w DragYH : STA DragYH LDA #$03 : STA $031C LDA #$05 : STA $3D - LDA #$04 : STA $2F + LDA #$04 : STA LinkFaceDir .not_left LDA $F0 : AND #$01 : BEQ .not_right @@ -437,7 +437,7 @@ HandleMovement: LDA.w .drag_x_high, Y : ADC.w DragYH : STA DragYH LDA #$04 : STA $031C LDA #$05 : STA $3D - LDA #$06 : STA $2F + LDA #$06 : STA LinkFaceDir .not_right RTS @@ -479,8 +479,8 @@ DekuLink_HoverBasedOnInput: JSL Link_CancelDash ; Pos - Cache Pos = difference - LDA $22 : SEC : SBC $3F : STA $31 - LDA $20 : SEC : SBC $3E : STA $30 + LDA LinkX : SEC : SBC $3F : STA $31 + LDA LinkY : SEC : SBC $3E : STA $30 LDA $5C : AND #$1F : BNE .continue_me DEC $24 @@ -506,7 +506,6 @@ DekuLink_HoverBasedOnInput: STZ.w $0FC1 STZ.w $011A : STZ.w $011B : STZ.w $011C : STZ.w $011D - .no_turtle_rock_trigger LDY.b #$00 LDA.b $3C : BEQ .no_sword_charge @@ -514,7 +513,7 @@ DekuLink_HoverBasedOnInput: .no_sword_charge STY.b $3A - STZ.b $5E : STZ.w $0325 + STZ.b $5E ; Set height at end of hover ; This makes it so the landing animation timer looks correct ; Floating for a bit, then slowly landing on the ground diff --git a/Sprites/ZSpriteLib/sprites.asm b/Sprites/ZSpriteLib/sprites.asm index 38bca90..2f981bd 100644 --- a/Sprites/ZSpriteLib/sprites.asm +++ b/Sprites/ZSpriteLib/sprites.asm @@ -516,6 +516,12 @@ LinkXH = $23 ; High position X of link ; Direction link is pushing against LinkPushDir = $26 +; Link's subpixel velocity +; when this value overflows, Link's main velocity gains an extra pixel +; reset on direction change, so not really a positional subpixel +LinkSubVelY = $2A +LinkSubVelX = $2B + ; Direction link is facing ; 00:Up, 02:Down, 04:Left, 06:Right LinkFaceDir = $2F @@ -658,7 +664,7 @@ ApplyLinksMovementToCamera = $07E9D3 HandleIndoorCameraAndDoors = $07F42F -Link_HandleVelocityAndSandDrag = $07E3E0 +Link_HandleVelocityAndSandDrag = $07E3DD Link_HandleMovingAnimation_FullLongEntry = $07E6A6 Link_HandleMovingAnimation_General = $07E765