From db537fe4d633a92b5f3a0435324963efc5498c1e Mon Sep 17 00:00:00 2001 From: LLCoolDave Date: Sat, 1 Jul 2017 19:06:31 +0200 Subject: [PATCH] Add hooks to store door frame overlay information based on entrance used, not cave entered, for simple cave entrances. Also use entrance info, not destination cave, to determine if link should walk up or down after triggering screen transition. --- LTTP_RND_GeneralBugfixes.asm | 1 + doorframefixes.asm | 44 ++++++++++++++++++++++++++++++++++++ hooks.asm | 21 +++++++++++++++++ tables.asm | 15 +++++++++++- 4 files changed, 80 insertions(+), 1 deletion(-) create mode 100644 doorframefixes.asm diff --git a/LTTP_RND_GeneralBugfixes.asm b/LTTP_RND_GeneralBugfixes.asm index e13d8a6..10c0631 100644 --- a/LTTP_RND_GeneralBugfixes.asm +++ b/LTTP_RND_GeneralBugfixes.asm @@ -119,6 +119,7 @@ incsrc glitched.asm incsrc hardmode.asm incsrc goalitem.asm incsrc compasses.asm +incsrc doorframefixes.asm incsrc hashalphabet.asm ; <- TAKE OUT THE EXTRA ORGS IN HERE - THIS IS WHY WE COULDN'T ADD MORE FILES EARLIER warnpc $A18000 diff --git a/doorframefixes.asm b/doorframefixes.asm new file mode 100644 index 0000000..fef6d2e --- /dev/null +++ b/doorframefixes.asm @@ -0,0 +1,44 @@ +;================================================================================ +; Door Frame Fixes +;================================================================================ + +;-------------------------------------------------------------------------------- +; StoreLastEntranceID +;-------------------------------------------------------------------------------- +StoreLastEntranceID: + CPX #$003a : BCC .noStore + TXA : SBC #$3a + BRA .done + .noStore + LDA #$00 + .done + STA $7F5099 + LDA $1BBB73, X : STA $010E +RTL +;-------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +; CacheDoorFrameData +;-------------------------------------------------------------------------------- +CacheDoorFrameData: + LDA $7F5099 : BEQ .originalBehaviour + DEC : ASL : TAX + LDA EntranceDoorFrameTable, X : STA $0696 + BRA .done + .originalBehaviour + LDA $D724, X : STA $0696 + .done + STZ $0698 + LDA #$00 + STA $7F5099 +RTL +;-------------------------------------------------------------------------------- + +;-------------------------------------------------------------------------------- +; WalkDownIntoTavern +;-------------------------------------------------------------------------------- +WalkDownIntoTavern: + LDA $7F5099 + CMP #$08 +RTL +;-------------------------------------------------------------------------------- diff --git a/hooks.asm b/hooks.asm index 944a272..64b9810 100644 --- a/hooks.asm +++ b/hooks.asm @@ -1744,4 +1744,25 @@ JSL.l LampCheck ;-------------------------------------------------------------------------------- org $01F503 ; <- F503 - Bank01.asm:14994 (LDA.b #$01 : STA $1D) JSL.l SetOverlayIfLamp +;================================================================================ + +;================================================================================ +; Overworld Door Frame Overlay Fix +; +; When entering an overworld entrance, if it is an entrance to a simple cave, we +; store the entrance id, then use that (instead of the cave id) to determine the +; overlay to draw when leaving the cave again. We also use this value to +; identify the tavern entrance to determine whether link should walk up or down. +;-------------------------------------------------------------------------------- +org $1BBD5F ; <- Bank1b.asm:296 (LDA $1BBB73, X : STA $010E) +JSL.l StoreLastEntranceID +NOP #3 +;-------------------------------------------------------------------------------- +org $02D754 ; <- Bank02.asm:10847 (LDA $D724, X : STA $0696 : STZ $0698) +JSL.l CacheDoorFrameData +NOP #5 +;-------------------------------------------------------------------------------- +org $0298AD ; <- Bank02.asm:4495 (LDA $010E : CMP.b #$43) +JSL.l WalkDownIntoTavern +NOP #1 ;================================================================================ \ No newline at end of file diff --git a/tables.asm b/tables.asm index addf59b..8ff3ea6 100644 --- a/tables.asm +++ b/tables.asm @@ -1105,6 +1105,7 @@ dw #9999 ; Rupee Limit ; $7F5096 - Dialog Offset Pointer Return (Low) ; $7F5097 - Dialog Offset Pointer Return (High) ; $7F5098 - Water Entry Index +; $7F5099 - Last Entered Entrance ; $7F50D0 - $7F50FF - Block Cypher Parameters ; $7F5100 - $7F51FF - Block Cypher Buffer ; $7F5200 - $7F52FF - RNG Pointer Block @@ -1132,4 +1133,16 @@ db $36, $4B, $A8, $01, $65, $3B, $EF, $59, $04, $18, $79, $0D, $DD, $CE, $CC, $A db $83, $21, $EB, $6E, $0A, $71, $B0, $11, $85, $C7, $A1, $FD, $E5, $16, $48, $FB db $F2, $23, $2F, $28, $9B, $AA, $AB, $D0, $6A, $9D, $C6, $2D, $00, $FE, $E1, $3F db $A0, $4A, $B8, $4E, $74, $1F, $8E, $A9, $F5, $CD, $60, $91, $DB, $D8, $52, $E2 -;================================================================================ \ No newline at end of file +;================================================================================ +org $30A100 ; PC 0x182100 +EntranceDoorFrameTable: +dw $0000, $0000, $0DE8, $0B98, $14CE, $0000, $1C50, $FFFF +dw $1466, $0000, $1AB6, $0B98, $1AB6, $040E, $9C0C, $1530 +dw $0A98, $0000, $0000, $0000, $0000, $0000, $0000, $0816 +dw $0DE8, $0000, $0000, $0000, $0000, $09AC, $0000, $0000 +dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 +dw $041A, $0000, $091E, $09AC, $0000, $0000, $0000, $0000 +dw $0000, $0000, $0000, $0000, $0000, $0000, $0000, $0000 +dw $0000, $0AA8, $07AA, $0000, $0000, $0000, $0000, $0000 +dw $0000, $0000, $0000, $0000, $0000, $0000 +;=============================================================================== \ No newline at end of file