diff --git a/Masks/bunny_hood.asm b/Masks/bunny_hood.asm index 4872560..cda0929 100644 --- a/Masks/bunny_hood.asm +++ b/Masks/bunny_hood.asm @@ -1,4 +1,4 @@ -; ============================================================================= +; ========================================================= ; Bunny Hood Item ; Makes Link run quicker when holding ; Written by Conn (I think) @@ -17,7 +17,7 @@ ; (Default = 0D) ; db (10) $40 - Pegasus boots speed (Default = 40) ; -; ============================================================================= +; ========================================================= UpdateBunnyPalette: { @@ -33,7 +33,7 @@ UpdateBunnyPalette: RTL ; or RTS depending on where you need it } -; ============================================================================= +; ========================================================= bunny_palette: dw #$7BDE, #$7FFF, #$2F7D, #$19B5, #$3A9C, #$14A5, #$19FD, #$14B6 @@ -43,7 +43,7 @@ bunny_palette: print "End of Bunny Hood GFX ", pc -; ============================================================================= +; ========================================================= ; Bunny Hood Speed Modification org $07E330 @@ -81,30 +81,15 @@ BunnySpeedTable: db $20, $12, $0a, $18, $10, $08, $08, $04, $0c, $10, $09, $19, $14, $0d, $10, $08, $40 } -; ============================================================================= +; ========================================================= ; Press R to transform into bunny form and run faster. -; ============================================================================= +; ========================================================= org $07A494 LinkItem_Ether: { - %CheckNewR_ButtonPress() : BEQ .return - LDA $6C : BNE .return ; in a doorway - LDA $0FFC : BNE .return ; can't open menu - - %PlayerTransform() - - LDA $02B2 : CMP #$04 : BEQ .unequip ; is the hood already on? - JSL UpdateBunnyPalette - LDA #$37 : STA $BC ; change link's sprite - LDA #$04 : STA $02B2 - BRA .return - -.unequip - %ResetToLinkGraphics() - -.return - CLC + LDA #$04 + JSL Link_TransformMask RTS } diff --git a/Masks/deku_mask.asm b/Masks/deku_mask.asm index 047baa8..bb090df 100644 --- a/Masks/deku_mask.asm +++ b/Masks/deku_mask.asm @@ -4,16 +4,16 @@ UpdateDekuPalette: { - REP #$30 ; change 16bit mode - LDX #$001E + REP #$30 ; change 16bit mode + LDX #$001E .loop - LDA.l deku_palette, X : STA $7EC6E0, X - DEX : DEX : BPL .loop + LDA.l deku_palette, X : STA $7EC6E0, X + DEX : DEX : BPL .loop - SEP #$30 ; go back to 8 bit mode - INC $15 ; update the palette - RTL ; or RTS depending on where you need it + SEP #$30 ; go back to 8 bit mode + INC $15 ; update the palette + RTL ; or RTS depending on where you need it } deku_palette: @@ -30,30 +30,17 @@ LinkItem_DekuMask: RTS .continue - %CheckNewR_ButtonPress() : BEQ .return - LDA $6C : BNE .return ; in a doorway - LDA $0FFC : BNE .return ; can't open menu + LDA #$01 + JSL Link_TransformMask : BCC .return + STA $02F5 ; Somaria platform flag, no dash. - %PlayerTransform() - LDA $02B2 : CMP #$01 : BEQ .unequip ; is the deku mask on? +; .unequip +; STZ $5D +; ; Restore the shield +; LDA $0AAF : STA.l $7EF35A +; STZ $02F5 - LDA.l $7EF35A : STA $0AAF ; Store the current shield - LDA.b #$00 : STA $7EF35A ; Clear the shield - - LDA #$35 : STA $BC ; put the mask on - JSL UpdateDekuPalette ; set the palette - LDA #$01 : STA $02B2 ; set the deku mask flag - STA $02F5 ; Somaria platform flag, no dash. - - BRA .return - -.unequip - STZ $5D - ; Restore the shield - LDA $0AAF : STA.l $7EF35A - STZ $02F5 - - %ResetToLinkGraphics() +; %ResetToLinkGraphics() .return RTS diff --git a/Masks/mask_routines.asm b/Masks/mask_routines.asm index 502f515..c00d0d9 100644 --- a/Masks/mask_routines.asm +++ b/Masks/mask_routines.asm @@ -251,8 +251,6 @@ Overworld_CgramAuxToMain: org $079CD9 JSL LinkItem_CheckForSwordSwing_Masks -; ========================================================= - pullpc LinkItem_CheckForSwordSwing_Masks: { @@ -268,6 +266,52 @@ LinkItem_CheckForSwordSwing_Masks: RTL } +; ========================================================= +; Common Mask Transformation Routine +; A = Mask ID +; Carry clear = no transform press/cant use mask + +Link_TransformMask: +{ + PHB : PHK : PLB + PHA ; save mask ID + %CheckNewR_ButtonPress() : BEQ .return + LDA $6C : BNE .return ; in a doorway + LDA $0FFC : BNE .return ; can't open menu + + %PlayerTransform() + PLA ; restore mask ID + TAY + ; LDA $02B2 + CPY !CurrentMask : BEQ .unequip ; is the deku mask on? + + STA $02B2 ; set the mask ID + TAX ; save mask ID in X + LDA .mask_gfx, X : STA $BC ; put the mask on + JSL Palette_ArmorAndGloves ; set the palette + + STA $02F5 ; Somaria platform flag, no dash. + + PLB + SEC + RTL + + .unequip + STZ $5D + STZ $02F5 + + %ResetToLinkGraphics() + PLB : CLC : RTL + + .return + PLA : PLB : CLC : RTL + +.mask_gfx + db $00, $35, $36, $38, $37, $39, $3A, $3B +} + +; ========================================================= + ; Modifies the value of the Y register before it indexes the table ; LinkOAM_AnimationStepDataOffsets ; This is used to change the animation during 0x0A (Using Quake Medallion) diff --git a/Masks/minish_form.asm b/Masks/minish_form.asm index 12186f8..2c8f2c6 100644 --- a/Masks/minish_form.asm +++ b/Masks/minish_form.asm @@ -57,20 +57,18 @@ LinkState_CheckForMinishForm: RTS } -; ============================================================================= +; ========================================================= LinkState_CheckMinishTile: { - LDA $02B2 : BEQ .blocked ; no form - CMP.b #$05 : BNE .blocked ; not minish - - LDA $0A : TSB $0343 - RTS + LDA $02B2 : BEQ .blocked ; no form + CMP.b #$05 : BNE .blocked ; not minish + LDA $0A : TSB $0343 + RTS -.blocked - LDA $0A : TSB $0E ; Blocked - - RTS + .blocked + LDA $0A : TSB $0E ; Blocked + RTS } print "End of Masks/minish_form.asm ", pc diff --git a/Masks/wolf_mask.asm b/Masks/wolf_mask.asm index 7f1a9af..5c9de0c 100644 --- a/Masks/wolf_mask.asm +++ b/Masks/wolf_mask.asm @@ -1,26 +1,26 @@ -; ============================================================================= +; ========================================================= ; Wolf Mask ; ; Talk to animals ; Dig for treasure ability (shovel) ; -; ============================================================================= +; ========================================================= UpdateWolfPalette: { - REP #$30 ; change 16bit mode - LDX #$001E + REP #$30 ; change 16bit mode + LDX #$001E .loop - LDA.l WolfPalette, X : STA $7EC6E0, X - DEX : DEX : BPL .loop + LDA.l WolfPalette, X : STA $7EC6E0, X + DEX : DEX : BPL .loop - SEP #$30 ; go back to 8 bit mode - INC $15 ; update the palette - RTL ; or RTS depending on where you need it + SEP #$30 ; go back to 8 bit mode + INC $15 ; update the palette + RTL ; or RTS depending on where you need it } -; ============================================================================= +; ========================================================= WolfPalette: dw #$7BDE, #$7FFF, #$2F7D, #$19B5, #$3A9C, #$14A5, #$1A3D, #$14B6 @@ -28,7 +28,7 @@ WolfPalette: dw #$6565, #$7271, #$14B5, #$459B, #$3D95, #$22D0, #$567C, #$1890 dw #$7616, #$0000 -; ============================================================================= +; ========================================================= org $07A3DB LinkItem_Flute: @@ -36,7 +36,7 @@ org $07A3DB org $07A32C LinkItem_Shovel: -; ============================================================================= +; ========================================================= org $07A313 LinkItem_ShovelAndFlute: @@ -50,38 +50,22 @@ LinkItem_ShovelAndFlute: } ; warnpc $07A31F -; ============================================================================= +; ========================================================= ; Bank 07 Free Space pullpc LinkItem_WolfMask: { - ; SEP #$30 - LDA $02B2 : CMP #$03 : BNE .equip - JSR LinkItem_Shovel + LDA $02B2 : CMP #$03 : BNE .equip + JSR LinkItem_Shovel -.equip - ; Check for R button press - %CheckNewR_ButtonPress() : BEQ .return - LDA $6C : BNE .return ; in a doorway - LDA $0FFC : BNE .return ; can't open menu + .equip + LDA.b #$03 + JSL Link_TransformMask - %PlayerTransform() - - LDA $02B2 : CMP #$03 : BEQ .unequip ; is the wolf mask already on? - JSL UpdateWolfPalette - LDA #$38 : STA $BC ; change link's sprite - LDA #$03 : STA $02B2 - BRA .return - -.unequip - %ResetToLinkGraphics() - -.return - ; REP #$30 - - RTS + .return + RTS } print "End of Masks/wolf_mask.asm ", pc diff --git a/Masks/zora_mask.asm b/Masks/zora_mask.asm index f7b8a3c..a7e3f23 100644 --- a/Masks/zora_mask.asm +++ b/Masks/zora_mask.asm @@ -1,4 +1,4 @@ -; ============================================================================= +; ========================================================= ; Zora Mask - by scawful ; Based on the Fairy Flippers item by Conn ; Special Thanks to Zarby89 for the PaletteArmorAndGloves hook @@ -9,20 +9,20 @@ ; How To Use: ; Press R to transform into Zora Link. Press R again to transform back. ; Press Y in deep water to dive. Press Y again to resurface. -; ============================================================================= +; ========================================================= UpdateZoraPalette: { - REP #$30 ; change 16 bit mode - LDX #$001E + REP #$30 ; change 16 bit mode + LDX #$001E -.loop - LDA.l zora_palette, X : STA $7EC6E0, X - DEX : DEX : BPL .loop + .loop + LDA.l zora_palette, X : STA $7EC6E0, X + DEX : DEX : BPL .loop - SEP #$30 ; go back to 8 bit mode - INC $15 ; update the palette - RTL + SEP #$30 ; go back to 8 bit mode + INC $15 ; update the palette + RTL } ; ========================================================= @@ -51,29 +51,13 @@ org $0998FC org $07A569 LinkItem_ZoraMask: { - ; No removing the mask whilst diving. - LDA !ZoraDiving : BNE .return - - ; Check for R button held - %CheckNewR_ButtonPress() : BEQ .return + ; No removing the mask whilst diving. + LDA !ZoraDiving : BNE .return + LDA.b #$02 + JSL Link_TransformMask - LDA $6C : BNE .return ; in a doorway - LDA $0FFC : BNE .return ; can't open menu - - %PlayerTransform() - - LDA $02B2 : CMP #$02 : BEQ .unequip ; is the zora mask on? - JSL UpdateZoraPalette ; change links palette - LDA #$36 : STA $BC ; change links graphics - LDA #$02 : STA $02B2 ; set the zora mask on - BRA .return - -.unequip - %ResetToLinkGraphics() - -.return - CLC - RTS + .return + RTS } warnpc $07A5CE @@ -248,6 +232,7 @@ pullpc pushpc ; C2C3 +; Link_HopInOrOutOfWater_Vertical org $07C307 JSR LinkState_UsingZoraMask_dungeon_stairs RTS @@ -257,9 +242,9 @@ pullpc .dungeon_stairs { LDA $02B2 : CMP #$02 : BNE .return_hop - STZ $5E ; Reset speed to normal - STZ !ZoraDiving ; Reset underwater flag - LDA #$62 : STA $9A ; Reset dungeon layer + STZ $5E ; Reset speed to normal + STZ !ZoraDiving ; Reset underwater flag + LDA #$62 : STA $9A ; Reset dungeon layer .return_hop LDA #$06 : STA $5D ; Set Link to Recoil State RTS