90 lines
3.4 KiB
NASM
90 lines
3.4 KiB
NASM
;================================================================================
|
|
; Door Frame Fixes
|
|
;================================================================================
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; StoreLastOverworldDoorID
|
|
;--------------------------------------------------------------------------------
|
|
StoreLastOverworldDoorID:
|
|
TXA : INC
|
|
STA.l PreviousOverworldDoor
|
|
LDA.l Overworld_Entrance_ID, X : STA.w EntranceIndex
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; CacheDoorFrameData
|
|
;--------------------------------------------------------------------------------
|
|
CacheDoorFrameData:
|
|
LDA.l PreviousOverworldDoor : BEQ .originalBehaviour
|
|
DEC : ASL : TAX
|
|
LDA.l EntranceDoorFrameTable, X : STA.w TileMapEntranceDoors
|
|
LDA.l EntranceAltDoorFrameTable, X : STA.w TileMapTile32
|
|
BRA .done
|
|
.originalBehaviour
|
|
LDA.w $D724, X : STA.w TileMapEntranceDoors
|
|
STZ.w TileMapTile32
|
|
.done
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; WalkDownIntoTavern
|
|
;--------------------------------------------------------------------------------
|
|
WalkDownIntoTavern:
|
|
LDA.l PreviousOverworldDoor
|
|
; tavern door has index 0x42 (saved off value is incremented by one)
|
|
CMP.b #$43
|
|
RTL
|
|
;--------------------------------------------------------------------------------
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; TurnAroundOnUnderworld
|
|
;--------------------------------------------------------------------------------
|
|
TurnAroundOnUnderworld:
|
|
LDA.b LinkPushDirection : BEQ .done
|
|
; turn around if ($010E == #$43) != ($7F5099 == #$43)
|
|
LDX.b #$00
|
|
LDA.b #$43 : CMP.w EntranceIndex : BEQ +
|
|
INX
|
|
+
|
|
CMP.l PreviousOverworldDoor : BEQ +
|
|
DEX
|
|
+
|
|
CPX.b #$00 : BEQ .done
|
|
LDA.b LinkPushDirection : EOR.b #$0C : STA.b LinkPushDirection
|
|
.done
|
|
JML Underworld_LoadCustomTileAttributes ; what we overwrote
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; TurnUpOnOverworld
|
|
;--------------------------------------------------------------------------------
|
|
TurnUpOnOverworld:
|
|
LDA.l EntranceTavernBack : CMP.b #$43 : BEQ .done
|
|
LDA.b #$08 : STA.b LinkPushDirection ; only fix this glitch if exit not vanilla
|
|
.done
|
|
JML Link_HandleMovingAnimation_FullLongEntry ; what we overwrote
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; WalkUpOnOverworld
|
|
;--------------------------------------------------------------------------------
|
|
WalkUpOnOverworld:
|
|
LDA.b LinkPosY : CMP.w #$091B : BNE .normal ; hardcoded Y coordinate
|
|
STZ.b LinkDirection
|
|
RTL
|
|
.normal
|
|
LDA.w #$0002 : STA.b LinkDirection ; what we overwrote
|
|
RTL
|
|
|
|
;--------------------------------------------------------------------------------
|
|
; CheckStairsAdjustment
|
|
;--------------------------------------------------------------------------------
|
|
CheckStairsAdjustment:
|
|
LDA.b RoomIndex
|
|
CMP.w #$0124 ; vanilla check, rooms $0124 to $0127 have a lower exit position (currently ER ignores the entrance location)
|
|
BCC .done
|
|
LDA.w #$FFFF-1
|
|
CMP.w TileMapEntranceDoors ; tavern back ($0696 == #$FFFF) should always have carry cleared
|
|
.done
|
|
RTL
|
|
; if carry cleared, shift position up |