From 9c5f0768524c002b2d66bbd47bf6c55da8249942 Mon Sep 17 00:00:00 2001 From: scawful Date: Sat, 11 Mar 2023 15:06:22 -0600 Subject: [PATCH] zora mask and bottle net disassembly --- Items/bottle_net.asm | 120 ++++++++++++++++++++++-- Masks/zora_mask.asm | 188 ++++++++++++++++++++++++++++++-------- Menu/menu.asm | 107 ++++++++++++---------- Menu/menu_draw.asm | 57 +++++++----- Menu/menu_select_item.asm | 2 + 5 files changed, 356 insertions(+), 118 deletions(-) diff --git a/Items/bottle_net.asm b/Items/bottle_net.asm index 1a48894..259aa4c 100644 --- a/Items/bottle_net.asm +++ b/Items/bottle_net.asm @@ -2,7 +2,6 @@ ; Bottle Net Code ; ============================================================================= - org $07B073 Link_CheckNewY_ButtonPress: @@ -19,19 +18,124 @@ PlayerItem_ReleaseBee: ; LinkItem_Bottle org $07A15B + JMP $FFA0 ; Local Bank Conditional + +; ============================================================================= +; $07FFA0 + +org $07FFA0 { - BIT $3A : BVS .return ;if Y or B are already pressed + LDA $030D - LDA $6C : BNE .return ; if we are standing in a dooray or not + BNE $07FFBD + LDA $0300 + BNE $07FFBD + LDA $7F5020 + TAX + LDA $7EF35B, X + CMP #$02 + BEQ $07FFBD + JSR $B073 + JMP $A15E - JSR Link_CheckNewY_ButtonPress : BCC .return; Check if we just pressed Y Button ; - - JSL LinkItem_NewBottle - -.return +; 07FFBD + JMP $AFF8 ; LinkItem_BugCatchingNet + JMP $FAF0 ; + NOP + JSR $B073 + STZ $030F RTS } +; ============================================================================= +; LinkItem_BugCatchingNet + +org $07AFF8 +{ + BIT $3A + BVS $07B029 + LDA $6C + BNE $07AFB4 + JSR $B073 + BCC $07AFB4 + LDA $2F + LSR + TAY + LDX $AFF4,Y + LDA $AFCC,X + STA $0300 + LDA #$03 + STA $3D + STZ $030D + LDA #$10 + STA $037A + JSL $8EFEF0 + STZ $2E + LDA #$32 + JSR $8028 + JSR $AE65 + LDA $67 + AND #$F0 + STA $67 + DEC $3D + BPL $07B072 + LDX $030D + INX + STX $030D + LDA #$03 + STA $3D + LDA $2F + LSR + TAY + LDA $AFF4,Y + CLC + ADC $030D + TAY + LDA $AFCC,Y + STA $0300 + CPX #$0A + BNE $07B072 + STZ $030D + STZ $0300 + LDA $3A + AND #$80 + STA $3A + STZ $037A + JSL $8EFEF8 + STA $50 + LDA #$80 + STA $44 + STA $45 + RTS +} + +; 07B073 +org $07B073 +{ + BIT $3A + BVS $07B085 + LDA $46 + BNE $07B085 + LDA $F4 + AND #$40 + BEQ $07B085 + TSB $3A + SEC + RTS + +; 07B085 +org $07B085 + CLC + RTS +} + +; $8EFEF0 + LDA #$01 + TSB $50 + STA $0112 + RTL + + ; ============================================================================= org $338000 diff --git a/Masks/zora_mask.asm b/Masks/zora_mask.asm index 5315d3d..4eebcd7 100644 --- a/Masks/zora_mask.asm +++ b/Masks/zora_mask.asm @@ -72,34 +72,59 @@ LinkItem_UsingZoraMask: ; Disassembled/Debugged Code of Conn's Zora Flippers ; May God Give Me Strength +; ============================================================================= +; 22E0E0 + +{ + LDA $1B + BNE $22E0F7 + LDA $7F500E + CMP #$01 + BNE $22E0F7 + LDA #$01 + STA $55 + STZ $5D + LDA #$08 + STA $5E + RTL +;------- + LDA #$01 + STA $4D + RTL +} + ; ============================================================================= ; 22E100 - LDA $2F - STA $0323 - JMP $E5F0 +{ + LDA $2F ; The direction the player is currently facing + STA $0323 ; Mirror of $2F + JMP $E5F0 NOP NOP NOP NOP - LDA $0345 - CMP #$01 + LDA $0345 ; Set to 1 when we are in deep water, 0 otherwise + CMP #$01 ; Are we in deep water? BEQ $22E120 LDA $7F500E CMP #$01 BEQ $22E11C RTL +} ; ============================================================================= ; 22E120 - LDA $F0 +{ + LDA $F0 ; Joypad 1 Register CMP #$40 - BEQ $22E12D + BEQ .alpha ; $22E12D LDA #$00 STA $7F500F RTL ;------- +.alpha LDA $7F500F CMP #$01 BNE $22E136 @@ -116,26 +141,28 @@ LinkItem_UsingZoraMask: CMP #$00 BNE $22E163 JMP $E320 +} ; ============================================================================= ; 22E17D +{ LDA $7F500E CMP #$00 BNE $22E1A3 - LDA $5D + LDA $5D ; Player Handler or "State" CMP #$04 BEQ $22E18C RTL ;------- LDA #$01 STA $7F500E - STZ $5D + STZ $5D ; Player Handler or "State" LDA #$01 - STA $55 + STA $55 ; Cape flag STA $037B LDA #$08 - STA $5E + STA $5E ; Speed setting for link NOP NOP NOP @@ -144,45 +171,97 @@ LinkItem_UsingZoraMask: LDA #$00 JSL $22EF80 LDA #$04 - STA $5D - STZ $55 - STZ $5E + STA $5D ; Player Handler or "State" + STZ $55 ; Reset cape flag (invisible invincible) + STZ $5E ; Reset Speed LDA #$01 - STA $0345 + STA $0345 ; Set to 1 when we are in deep water. 0 otherwise STZ $037B RTL +} ; ============================================================================= ; 22E1E0 +; Observed behavior: Triggers when entering and exiting water indoors only +; Returns to 3C30B below +; Noted changes added - LDA $1B +{ + LDA $1B ; Flag set to 1 when indoors, 0 otherwise BNE $22E1F7 + LDA $7F500E CMP #$01 BNE $22E1F7 + LDA #$01 - STA $55 - STZ $5D - LDA #$08 - STA $5E + STA $55 ; Set cape flag (invisible invincible) + STZ $5D ; Player Handler or "State" + LDA #$08 + STA $5E ; Set player speed RTL ;------- - LDA #$06 - STA $5D + LDA #$06 ; recoil mode 2 + STA $5D ; Player Handler or "State" RTL +} + +; ============================================================================= +; *$3C2C3-$3C30B LOCAL + +{ + LDA $1B : BNE .alpha ; Set to 1 if indoors, 0 otherwise + LDX #$02 + BRA .beta + +.alpha + LDX $1D + LDA $047A : BEQ .beta + LDX #$00 ; Modified from vanilla `LDY.b #$00` + +.beta + STX $00 + LDA $C2BA, X : TAX + LDA $66 : BNE .gamma + TXA : EOR #$FF : INC : TAX + +.gamma + STX $27 + STZ $28 + LDX $00 + LDA $C2BD,X + + STA $29 ; vertical resistance + STA $02C7 ; countdown timer + STZ $24 ; z coordinate for link + STZ $25 ; ??? No idea + + LDA $C2C0,X + JSL $8EFCE0 ; Dungeon Code (Flippers?) + CMP #$02 : BEQ .delta + JSL $22E0E0 + STZ $0360 + +.delta + JSL $22E1E0 + RTS +} + ; ============================================================================= ; 22E260 - LDA $7EF33C +{ + LDA $7EF33C ; fairy flippers save ram AND #$00FF CMP #$0001 - BEQ $22E271 + BEQ .has_fairy_flippers ; $22E271 LDA $7EF357 RTL ; ------- ; 22E271 +.has_fairy_flippers SEP #$30 LDA #$3C STA $1613 @@ -192,6 +271,7 @@ LinkItem_UsingZoraMask: REP #$30 LDA $7EF357 RTL +} ; ============================================================================= ; 22E2A0 @@ -239,7 +319,7 @@ FairyFlipper_Prepare: FairyFlippers_RestoreControlHandler: { - LDA $5D ; Player Handler or "State" + LDA $5D ; Player Handler or "State" ASL TAX JMP $078106 ; Link_ControlHandler Jump Table Statement @@ -248,43 +328,50 @@ FairyFlippers_RestoreControlHandler: ; ============================================================================= ; 22E300 +{ LDA #$00 - STA $5D + STA $5D ; Player Handler or "State" STA $7F500E STA $7F500F STA $5E STA $0345 JSL $00E3FA RTL +} ; ============================================================================= ; 22E340 - LDA $1B +{ + LDA $1B ; 1 if indoors, 0 otherwise BEQ $22E34E - LDA $0114 + LDA $0114 ; Value of the type of tile Link is standing on BEQ $22E34E CMP #$08 BEQ $22E34E RTS ;------- - LDA #$24 - STA $012E + LDA #$24 ; Splash sound effect + STA $012E RTS +} ; ============================================================================= ; 22E460 - LDA $02E4 +FairyFlippers_Untitled: +{ + LDA $02E4 ; If flag nonzero, Link cannot move AND #$00FF - BNE $22E46E + BNE .alpha ; $22E46E LDA #$0009 LDX $8C RTL ;------- - LDA $0202 +.alpha + LDA $0202 ; currently selected item AND #$00FF - CMP #$000F + CMP #$000F ; what item is F? BNE $22E481 LDA $02F0 AND #$00FF @@ -292,13 +379,17 @@ FairyFlippers_RestoreControlHandler: LDA #$0009 LDX $8C RTL +} + ; ============================================================================= ; 22E500 +{ CMP #$5A BEQ $22E507 JMP $D00B +} ; ============================================================================= ; 22E530 @@ -337,6 +428,7 @@ FairyFlippers_Main: ; ============================================================================= ; 22E5F0 +{ LDA $7EF33C BNE $22E5F7 RTL @@ -346,11 +438,15 @@ FairyFlippers_Main: RTL ;------- JMP $E108 +} ; ============================================================================= ; 22E600 ; Possibly relevant, unconfirmed +; Referenced at: 0D:E507 + +{ LDA $7EF34A AND #$00FF CMP #$0001 @@ -374,7 +470,7 @@ FairyFlippers_Main: REP #$30 LDA $7EF35C,X RTL - +} ; ============================================================================= ; 22E670 @@ -409,6 +505,7 @@ FairyFlippers_HandleMagic: ; ============================================================================= ; 22E700 +{ STA $F6 STY $FA REP #$30 @@ -425,21 +522,25 @@ FairyFlippers_HandleMagic: STA $7EE000 SEP #$30 RTL +} ; ============================================================================= ; 22E760 +{ LDA #$0E10 STA $7EE000 LDY #$0000 LDX $00 RTL +} ; ============================================================================= ; 22E780 ; Jesucristo... - REP #$30 +{ + REP #$30 LDY #$0000 LDA $7EF339 CMP #$000A @@ -518,10 +619,12 @@ FairyFlippers_HandleMagic: INC $0207 LDA $F0 RTL +} ; ============================================================================= ; 22E830 +{ ADC #$0020 STA $1CD0 LDA $10 @@ -537,26 +640,32 @@ FairyFlippers_HandleMagic: CMP #$0000 BNE $22E854 RTL +} ; ============================================================================= ; 22EF50 +{ LDA $7EF3CC CMP #$0D BEQ $22EF59 RTL +} ; ============================================================================= ; 22EF80 +{ STA $7F500E ; reset underwater variable STZ $0372 ; link bounce flag RTL +} ; ============================================================================= ; 22EFA0 - LDA $5D +{ + LDA $5D ; Player Handler or "State" CMP #$05 BNE $22EFAA STZ $0351 @@ -566,5 +675,6 @@ FairyFlippers_HandleMagic: CMP #$01 BNE $22EFB4 LDA #$04 - STA $5D - RTS \ No newline at end of file + STA $5D ; Player Handler or "State" + RTS +} \ No newline at end of file diff --git a/Menu/menu.asm b/Menu/menu.asm index 71471ac..d4c2357 100644 --- a/Menu/menu.asm +++ b/Menu/menu.asm @@ -185,6 +185,13 @@ Menu_ItemScreen: LSR : BCS .move_left LSR : BCS .move_down LSR : BCS .move_up + +; Check if A button is pressed +; LDA $F6 : AND.b #$80 : BEQ .a_not_pressed +; JSR Menu_SubItemScreen + +; .a_not_pressed + BRA .no_inputs .move_right @@ -280,70 +287,70 @@ Menu_StatsScreen: { JSR Menu_CheckHScroll - ; Increase selector time and check music RAM - INC $0207 : LDA.w $02D5 : BEQ .no_inputs +; ; Increase selector time and check music RAM +; INC $0207 : LDA.w $02D5 : BEQ .no_inputs - ; Scroll through joypad 1 inputs - ASL : TAY : LDA.b $F4 - LSR : BCS .move_right - LSR : BCS .move_left - BRA .no_inputs +; ; Scroll through joypad 1 inputs +; ASL : TAY : LDA.b $F4 +; LSR : BCS .move_right +; LSR : BCS .move_left +; BRA .no_inputs -.move_right - JSR Menu_DeleteSongCursor - JSR Menu_FindNextSong - BRA .draw_cursor +; .move_right +; JSR Menu_DeleteSongCursor +; JSR Menu_FindNextSong +; BRA .draw_cursor -.move_left - JSR Menu_DeleteSongCursor - JSR Menu_FindPrevSong - BRA .draw_cursor +; .move_left +; JSR Menu_DeleteSongCursor +; JSR Menu_FindPrevSong +; BRA .draw_cursor -.draw_cursor - LDA.b #$20 : STA.w $012F ; cursor move sound effect +; .draw_cursor +; LDA.b #$20 : STA.w $012F ; cursor move sound effect -.no_inputs - SEP #$30 - LDA.w $02D5 - ASL : TAY - REP #$10 - LDX.w Menu_OcarinaSongPositions, Y +; .no_inputs +; SEP #$30 +; LDA.w $02D5 +; ASL : TAY +; REP #$10 +; LDX.w Menu_OcarinaSongPositions, Y - LDA.b #$20 : BIT.w $0207 +; LDA.b #$20 : BIT.w $0207 - REP #$20 +; REP #$20 - BEQ .no_delete +; BEQ .no_delete - LDA.w #$20F5 - STA.w $1108, X - STA.w $1148, X - STA.w $114E, X - STA.w $110E, X - STA.w $11C8, X - STA.w $1188, X - STA.w $118E, X - STA.w $11CE, X - BRA .done +; LDA.w #$20F5 +; STA.w $1108, X +; STA.w $1148, X +; STA.w $114E, X +; STA.w $110E, X +; STA.w $11C8, X +; STA.w $1188, X +; STA.w $118E, X +; STA.w $11CE, X +; BRA .done -.no_delete +; .no_delete - LDA.w #$3060 : STA.w $1108, X ; corner - LDA.w #$3070 : STA.w $1148, X +; LDA.w #$3060 : STA.w $1108, X ; corner +; LDA.w #$3070 : STA.w $1148, X - LDA.w #$7060 : STA.w $110E, X ; corner - LDA.w #$7070 : STA.w $114E, X +; LDA.w #$7060 : STA.w $110E, X ; corner +; LDA.w #$7070 : STA.w $114E, X - LDA.w #$3070 : STA.w $1188, X - LDA.w #$B060 : STA.w $11C8, X ; corner +; LDA.w #$3070 : STA.w $1188, X +; LDA.w #$B060 : STA.w $11C8, X ; corner - LDA.w #$7070 : STA.w $118E, X - LDA.w #$F060 : STA.w $11CE, X ; corner +; LDA.w #$7070 : STA.w $118E, X +; LDA.w #$F060 : STA.w $11CE, X ; corner -.done - SEP #$20 - LDA.b #$22 : STA.w $0116 - LDA.b #$01 : STA.b $17 +; .done +; SEP #$20 +; LDA.b #$22 : STA.w $0116 +; LDA.b #$01 : STA.b $17 RTS } @@ -448,7 +455,7 @@ Menu_Exit: menu_frame: incbin "tilemaps/menu_frame.tilemap" quest_icons: incbin "tilemaps/quest_icons.tilemap" -incsrc "lw_map_names.asm" +incsrc "menu_map_names.asm" incsrc "menu_hud.asm" ; ============================================================================= \ No newline at end of file diff --git a/Menu/menu_draw.asm b/Menu/menu_draw.asm index 02650c2..d2c791c 100644 --- a/Menu/menu_draw.asm +++ b/Menu/menu_draw.asm @@ -35,6 +35,7 @@ Menu_DrawBackground: ; Credit to Kan DrawMenuItem: +{ STA.b $08 STY.b $00 @@ -60,11 +61,14 @@ DrawMenuItem: LDA.w $0006,Y : STA.w $114A,X RTS +} + ; ============================================================================= ; Quest Icons Tilemap Draw Routine DrawQuestIcons: +{ LDX.w #$10 .loop @@ -87,10 +91,13 @@ DrawQuestIcons: LDA.w #$20F5 : STA.w $13B4 : STA.w $13F4 : STA.w $1474 : STA.w $14B4 RTS +} + ; ============================================================================= DrawTriforceIcon: +{ LDA.l $7EF37A LDX.w #$3534 LDY.w #$3544 @@ -125,24 +132,29 @@ DrawTriforceIcon: + RTS +} + ;=============================================================================== DrawPendantIcons: - LDA.l $7EF374 - LSR : BCC + - LDX.w #$2502 : STX.w $14A4 : INX : STX.w $14A6 - LDX.w #$2512 : STX.w $14E4 : INX : STX.w $14E6 +{ + LDA.l $7EF374 + LSR : BCC + + LDX.w #$2502 : STX.w $14A4 : INX : STX.w $14A6 + LDX.w #$2512 : STX.w $14E4 : INX : STX.w $14E6 -+ LSR : BCC + - LDX.w #$3D00 : STX.w $14AA : INX : STX.w $14AC - LDX.w #$3D10 : STX.w $14EA : INX : STX.w $14EC ++ LSR : BCC + + LDX.w #$3D00 : STX.w $14AA : INX : STX.w $14AC + LDX.w #$3D10 : STX.w $14EA : INX : STX.w $14EC -+ LSR : BCC + - LDX.w #$2D06 : STX.w $14B0 : INX : STX.w $14B2 - LDX.w #$2D16 : STX.w $14F0 : INX : STX.w $14F2 ++ LSR : BCC + + LDX.w #$2D06 : STX.w $14B0 : INX : STX.w $14B2 + LDX.w #$2D16 : STX.w $14F0 : INX : STX.w $14F2 + ++ RTS +} -+ RTS ;=============================================================================== @@ -156,20 +168,23 @@ DrawPendantIcons: ; E100 would be T = 16 DrawHeartPieces: - LDA.l $7EF36B - AND.w #$00FF - CMP.w #3 : BEQ .top_right - CMP.w #1 : BEQ .top_left - BCS .bottom_left - RTS +{ + LDA.l $7EF36B + AND.w #$00FF + CMP.w #3 : BEQ .top_right + CMP.w #1 : BEQ .top_left + BCS .bottom_left + RTS .top_right - LDX.w #$64AD : STX.w $14A0 + LDX.w #$64AD : STX.w $14A0 .bottom_left - LDX.w #$24AE : STX.w $14DE + LDX.w #$24AE : STX.w $14DE .top_left - LDX.w #$24AD : STX.w $149E - RTS + LDX.w #$24AD : STX.w $149E + RTS +} + ;=============================================================================== diff --git a/Menu/menu_select_item.asm b/Menu/menu_select_item.asm index 1f4ba20..67f7515 100644 --- a/Menu/menu_select_item.asm +++ b/Menu/menu_select_item.asm @@ -249,3 +249,5 @@ Menu_DeleteSongCursor: STZ $0207 RTS } + +; ----------------------------------------------------------------------------- \ No newline at end of file