From 17840716d03d087fec54d19bcbf43dfe97fe4665 Mon Sep 17 00:00:00 2001 From: scawful Date: Wed, 19 Jun 2024 11:26:18 -0400 Subject: [PATCH] add expanded special areas table, allow for additional entry points --- Overworld/overworld.asm | 6 +- Overworld/special_areas.asm | 252 ++++++++++++++++++++++++++++++++++++ 2 files changed, 256 insertions(+), 2 deletions(-) create mode 100644 Overworld/special_areas.asm diff --git a/Overworld/overworld.asm b/Overworld/overworld.asm index b367bcb..f25744b 100644 --- a/Overworld/overworld.asm +++ b/Overworld/overworld.asm @@ -86,6 +86,10 @@ LoadOverworldPitAreas: RTL } +pushpc + +incsrc "Overworld/special_areas.asm" + org $0794D9 ; LDA $8A : CMP #$57 : BEQ .overworld_pit_transition JSL LoadOverworldPitAreas : BCC .overworld_pit_transition @@ -93,5 +97,3 @@ org $0794D9 RTS .overworld_pit_transition -; incsrc "Overworld/special_areas.asm" - diff --git a/Overworld/special_areas.asm b/Overworld/special_areas.asm new file mode 100644 index 0000000..365ec72 --- /dev/null +++ b/Overworld/special_areas.asm @@ -0,0 +1,252 @@ +; ========================================================= + +org $0EDE49 +JSL Overworld_CheckForSpecialOverworldTrigger +RTL + +pullpc + +Overworld_CheckForSpecialOverworldTrigger: +{ + PHB : PHK : PLB + + REP #$31 + + JSR GetMap16Tile + + LDA.l Map16Definitions,X : AND.w #$01FF : STA.b $00 + + LDX.w #$000A + + .check_next_screen + LDA.b $00 + + .check_next_tile + DEX + DEX + BMI .exit + + CMP.l .tile_type,X : BNE .check_next_tile + + LDA.b $8A : CMP.l .screen_id, X : BNE .check_next_screen + + ;-------------------------------------------------------- + + LDA.l .special_id,X + STA.b $A0 + + SEP #$20 + + LDA.l .direction,X + STA.b $67 + + STA.w $0410 + STA.w $0416 + + LDX.w #$0004 + + .continue_shifting + DEX + + LSR A + BCC .continue_shifting + + STX.w $0418 + STX.w $069C + + LDA.b #$17 + STA.b $11 + + LDA.b #$0B + STA.b $10 + + .exit + SEP #$30 + + PLB + + RTL + + ; .tile_type + ; dw $0105 + ; dw $01E4 + ; dw $00AD + ; dw $00B9 + + ; .screen_id + ; dw $0000 ; OW 00 + ; dw $002D ; OW 2D + ; dw $000F ; OW 0F + ; dw $0081 ; OW 81 + + ; .direction + ; dw $0008 + ; dw $0002 + ; dw $0008 + ; dw $0008 + + ; .special_id + ; dw $0180 ; OW 80 + ; dw $0181 ; OW 81 + ; dw $0182 ; OW 82 + ; dw $0189 ; OW 89 + + ; corresponding warp types that lead to special overworld areas + .tile_type + dw $01EF, $01EF, $00AD, $00B9, $01EF + + ; Lost woods, Hyrule Castle Bridge, Entrance to Zora falls, and in Zora Falls... + .screen_id + dw $002A, $0018, $000F, $0081, $0017 + + ; Direction Link will face when he enters the special area + .direction + dw $0008, $0008, $0008, $0008, $0008 + + ; Exit value for the special area. In Hyrule Magic these are those White markers. + .special_id + dw $0180, $0181, $0182, $0189, $0181 +} + + +GetMap16Tile: +{ + LDA.b $20 + CLC + ADC.w #$000C + STA.b $00 + + SEC + SBC.w $0708 + + AND.w $070A + ASL A + ASL A + ASL A + STA.b $06 + + LDA.b $22 + CLC + ADC.w #$0008 + + LSR A + LSR A + LSR A + STA.b $02 + + SEC + SBC.w $070C + + AND.w $070E + CLC + ADC.b $06 + + TAY + TAX + + LDA.l $7E2000,X + ASL A + ASL A + ASL A + TAX + + RTS +} + +#EXIT_0EDEE0: +SEP #$30 + +RTL + +; ========================================================= + +SpecialOverworld_CheckForReturnTrigger: +{ + REP #$31 + + JSR GetMap16Tile + + LDA.l Map16Definitions,X + AND.w #$01FF + STA.b $00 + + LDX.w #$0006 + + .check_next_screen + LDA.b $00 + + .check_next_tile + DEX + DEX + BMI EXIT_0EDEE0 + + CMP.l .tile_type,X + BNE .check_next_tile + + LDA.b $8A + CMP.l .screen_id,X + BNE .check_next_screen + + SEP #$30 + + LDA.l .direction,X + STA.b $67 + + LDX.b #$04 + + .keep_shifting + DEX + + LSR A + BCC .keep_shifting + + TXA + STA.w $0418 + + LDA.b $67 + + LDX.b #$04 + + .just_keep_shifting + DEX + + LSR A + BCC .just_keep_shifting + + TXA + STA.w $069C + + LDA.b #$24 + STA.b $11 + + STZ.b $B0 + STZ.b $A0 + + RTL + + .tile_type + dw $017C + dw $01E4 + dw $00AD + + .screen_id + dw $0080 ; OW 80 + dw $0080 ; OW 80 + dw $0081 ; OW 81 + + .direction + dw $0004 + dw $0001 + dw $0004 +} + +LoadExpandedSpecialArea: +{ + LDA.b $A0 : CMP.w #$0191 : BNE .not_minish_woods + LDA.w #$0180 : STA.b $A0 + .not_minish_woods + RTL +} + +org $02E90E +JSL LoadExpandedSpecialArea : NOP