Merged in DR v1.4.1.6
This commit is contained in:
160
entrances.asm
160
entrances.asm
@@ -8,30 +8,30 @@ LockAgahnimDoors:
|
||||
;#$0 = Never Locked
|
||||
LDA.w #$0000 : RTL
|
||||
+ : CMP.w #$0001 : BNE +
|
||||
LDA ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||
JSR.w LockAgahnimDoorsCore : RTL
|
||||
LDA.l ProgressIndicator : AND.w #$000F : CMP.w #$0002 : !BGE .unlock ; if we rescued zelda, skip
|
||||
JSR LockAgahnimDoorsCore : RTL
|
||||
+ : CMP.w #$0002 : BNE +
|
||||
JSR.w LockAgahnimDoorsCore : BEQ .unlock
|
||||
JSR LockAgahnimDoorsCore : BEQ .unlock
|
||||
PHX : PHY
|
||||
SEP #$30
|
||||
JSL.l CheckEnoughCrystalsForTower
|
||||
JSL CheckTowerOpen
|
||||
REP #$30
|
||||
PLY : PLX
|
||||
!BGE .crystalOrUnlock
|
||||
LDA #$0001 : RTL
|
||||
LDA.w #$0001 : RTL
|
||||
.crystalOrUnlock
|
||||
LDA SwapAgaGanonsTower : AND.w #$00FF : BEQ .unlock
|
||||
LDA.l SwapAgaGanonsTower : AND.w #$00FF : BEQ .unlock
|
||||
|
||||
LDA OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not
|
||||
LDA $0308 : AND.w #$0080 : BEQ ++ ;If we are holding an item
|
||||
LDA.l OverworldEventDataWRAM+$43 : AND.w #$0020 : BNE .unlock ; Check if GT overlay is already on or not
|
||||
LDA.w AButtonAct : AND.w #$0080 : BEQ ++ ;If we are holding an item
|
||||
|
||||
.locked
|
||||
LDA #$0001 : RTL ;Keep the door locked
|
||||
LDA.w #$0001 : RTL ;Keep the door locked
|
||||
++
|
||||
SEP #$30
|
||||
JSL $099B6F ;Add tower break seal
|
||||
JSL AncillaAdd_GTCutscene ;Add tower break seal
|
||||
REP #$30
|
||||
LDA #$0001 ;Prevent door from opening that frame otherwise it glitchy
|
||||
LDA.w #$0001 ;Prevent door from opening that frame otherwise it glitchy
|
||||
RTL
|
||||
|
||||
+
|
||||
@@ -44,18 +44,18 @@ RTL
|
||||
FlagAgahnimDoor:
|
||||
LDA.l SwapAgaGanonsTower : BEQ .vanilla
|
||||
|
||||
LDA OverworldEventDataWRAM+$43 : ORA #$20 : STA OverworldEventDataWRAM+$43 ; activate GT overlay
|
||||
LDA.l OverworldEventDataWRAM+$43 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$43 ; activate GT overlay
|
||||
|
||||
.vanilla
|
||||
LDA.b #$28 : STA.b $72
|
||||
LDA.b #$28 : STA.b ScrapBuffer72
|
||||
RTL
|
||||
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
LockAgahnimDoorsCore:
|
||||
LDA $22 : CMP.w #1992 : !BLT + ; door too far left, skip
|
||||
LDA.b LinkPosX : CMP.w #1992 : !BLT + ; door too far left, skip
|
||||
CMP.w #2088 : !BGE + ; door too rat right, skip
|
||||
LDA $20 : CMP.w #1720 : !BGE + ; door too low, skip
|
||||
LDA.b LinkPosY : CMP.w #1720 : !BGE + ; door too low, skip
|
||||
LDA.w #$0001
|
||||
RTS
|
||||
+
|
||||
@@ -65,19 +65,19 @@ RTS
|
||||
SmithDoorCheck:
|
||||
LDA.l SmithTravelsFreely : AND.w #$00FF : BEQ .orig
|
||||
;If SmithTravelsFreely is set Frog/Smith can enter multi-entrance overworld doors
|
||||
JML.l Overworld_Entrance_BRANCH_RHO
|
||||
JML Overworld_Entrance_BRANCH_RHO
|
||||
|
||||
.orig ; The rest is equivlent to what we overwrote
|
||||
CPX.w #$0076 : !BGE +
|
||||
JML.l Overworld_Entrance_BRANCH_LAMBDA
|
||||
JML Overworld_Entrance_BRANCH_LAMBDA
|
||||
+
|
||||
|
||||
JML.l Overworld_Entrance_BRANCH_RHO
|
||||
JML Overworld_Entrance_BRANCH_RHO
|
||||
;--------------------------------------------------------------------------------
|
||||
AllowStartFromSingleEntranceCave:
|
||||
; 16 Bit A, 16 bit XY
|
||||
; do not need to preserve A or X or Y
|
||||
LDA StartingEntrance : AND.w #$00FF ; What we wrote over
|
||||
LDA.l StartingEntrance : AND.w #$00FF ; What we wrote over
|
||||
PHA
|
||||
TAX
|
||||
LDA.l StartingAreaExitOffset, X : AND.w #$00FF
|
||||
@@ -85,49 +85,47 @@ AllowStartFromSingleEntranceCave:
|
||||
BNE +
|
||||
JMP .done
|
||||
+
|
||||
|
||||
DEC
|
||||
STA $00
|
||||
ASL #2 : !ADD $00 : ASL #2 ; mult by 20
|
||||
STA.b Scrap00
|
||||
ASL #2 : !ADD Scrap00 : ASL #2 ; mult by 20
|
||||
TAX
|
||||
|
||||
LDA #$0016 : STA $7EC142 ; Cache the main screen designation
|
||||
LDA.l StartingAreaExitTable+$05, X : STA $7EC144 ; Cache BG1 V scroll
|
||||
LDA.l StartingAreaExitTable+$07, X : STA $7EC146 ; Cache BG1 H scroll
|
||||
LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA $7EC148 ; Cache Link's Y coordinate
|
||||
LDA.l StartingAreaExitTable+$0B, X : STA $7EC14A ; Cache Link's X coordinate
|
||||
LDA.l StartingAreaExitTable+$0D, X : STA $7EC150 ; Cache Camera Y coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$0F, X : STA $7EC152 ; Cache Camera X coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$03, X : STA $7EC14E ; Cache Link VRAM Location
|
||||
LDA.w #$0016 : STA.l EN_MAINDESQ ; Cache the main screen designation
|
||||
LDA.l StartingAreaExitTable+$05, X : STA.l EN_BG2VERT ; Cache BG1 V scroll
|
||||
LDA.l StartingAreaExitTable+$07, X : STA.l EN_BG2HORZ ; Cache BG1 H scroll
|
||||
LDA.l StartingAreaExitTable+$09, X : !ADD.w #$0010 : STA.l EN_POSY ; Cache Link's Y coordinate
|
||||
LDA.l StartingAreaExitTable+$0B, X : STA.l EN_POSX ; Cache Link's X coordinate
|
||||
LDA.l StartingAreaExitTable+$0D, X : STA.l EN_SCROLLATN ; Cache Camera Y coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$0F, X : STA.l EN_SCROLLATW ; Cache Camera X coord lower bound.
|
||||
LDA.l StartingAreaExitTable+$03, X : STA.l EN_OWTMAPI ; Cache Link VRAM Location
|
||||
|
||||
; Handle the 2 "unknown" bytes, which control what area of the backgound
|
||||
; relative to the camera? gets loaded with new tile data as the player moves around
|
||||
; (because some overworld areas like Kak are too big for a single VRAM tilemap)
|
||||
|
||||
LDA.l StartingAreaExitTable+$11, X : AND.w #$00FF
|
||||
BIT.w #$0080 : BEQ + : ORA #$FF00 : + ; Sign extend
|
||||
STA.l $7EC16A
|
||||
BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend
|
||||
STA.l EN_SCRMODYA
|
||||
|
||||
LDA.l StartingAreaExitTable+$12, X : AND.w #$00FF
|
||||
BIT.w #$0080 : BEQ + : ORA #$FF00 : + ; Sign extend
|
||||
STA.l $7EC16E
|
||||
BIT.w #$0080 : BEQ + : ORA.w #$FF00 : + ; Sign extend
|
||||
STA.l EN_SCRMODXA
|
||||
|
||||
LDA.w #$0000 : !SUB.l $7EC16A : STA $7EC16C
|
||||
LDA.w #$0000 : !SUB.l $7EC16E : STA $7EC170
|
||||
LDA.w #$0000 : !SUB.l EN_SCRMODYA : STA.l EN_SCRMODYB
|
||||
LDA.w #$0000 : !SUB.l EN_SCRMODXA : STA.l EN_SCRMODXB
|
||||
|
||||
LDA.l StartingAreaExitTable+$02, X : AND.w #$00FF
|
||||
STA $7EC14C ; Cache the overworld area number
|
||||
STA $7EC140 ; Cache the aux overworld area number
|
||||
STA.l EN_OWSCR ; Cache the overworld area number
|
||||
STA.l EN_OWSCR2 ; Cache the aux overworld area number
|
||||
|
||||
STZ $0698 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ $0699 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ.w TileMapTile32 ;zero out door overlays in case starting overworld door is not set
|
||||
STZ.w TileMapTile32+1 ;zero out door overlays in case starting overworld door is not set
|
||||
|
||||
SEP #$20 ; set 8-bit accumulator
|
||||
LDA StartingEntrance : TAX
|
||||
LDA.l StartingAreaOverworldDoor, X : STA.l $7F5099 ;Load overworld door
|
||||
|
||||
LDA.l StartingEntrance : TAX
|
||||
LDA.l StartingAreaOverworldDoor, X : STA.l PreviousOverworldDoor ;Load overworld door
|
||||
REP #$20 ; reset 16-bit accumulator
|
||||
JSL.l CacheDoorFrameData
|
||||
JSL CacheDoorFrameData
|
||||
|
||||
.done
|
||||
PLA
|
||||
@@ -135,50 +133,50 @@ RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
AllowStartFromExit:
|
||||
|
||||
LDX $1CE8
|
||||
LDX.w MessageCursor
|
||||
LDA.l ShouldStartatExit, X : BNE .doStart
|
||||
|
||||
LDA.l StartingEntrance ; what we wrote over
|
||||
JML.l AllowStartFromExitReturn
|
||||
JML AllowStartFromExitReturn
|
||||
|
||||
.doStart
|
||||
|
||||
LDA.l $028481, X ;Module_LocationMenu_starting_points
|
||||
LDA.l Module1B_SpawnSelect_spawns, X
|
||||
ASL : TAX
|
||||
|
||||
LDA.l $02D8D2, X : STA $A0
|
||||
LDA.l $02D8D3, X : STA $A1
|
||||
LDA.l SpawnPointData_room_id, X : STA.b RoomIndex
|
||||
LDA.l SpawnPointData_room_id+1, X : STA.b RoomIndex+1
|
||||
|
||||
; Go to pre-overworld mode
|
||||
LDA.b #$08 : STA $10
|
||||
LDA.b #$08 : STA.b GameMode
|
||||
|
||||
STZ $11
|
||||
STZ $B0
|
||||
STZ.b GameSubMode
|
||||
STZ.b SubSubModule
|
||||
STZ.w DeathReloadFlag
|
||||
STZ.w RespawnFlag
|
||||
INC.w UpdateHUDFlag
|
||||
|
||||
STZ $010A
|
||||
|
||||
STZ $04AA
|
||||
JSL Equipment_SearchForEquippedItemLong
|
||||
JSL HUD_RebuildLong2
|
||||
JSL $0DDD32 ; Equipment_UpdateEquippedItemLong
|
||||
JSL HUD_RebuildIndoor_Palace
|
||||
JSL Equipment_UpdateEquippedItemLong
|
||||
RTL
|
||||
|
||||
;--------------------------------------------------------------------------------
|
||||
CheckHole:
|
||||
LDX.w #$0024
|
||||
.nextHoleClassic
|
||||
LDA.b $00 : CMP.l $1BB800, X
|
||||
LDA.b Scrap00 : CMP.l Overworld_GetPitDestination_map16, X
|
||||
BNE .wrongMap16Classic
|
||||
LDA.w $040A : CMP.l $1BB826, X
|
||||
LDA.b OverworldIndex : CMP.l Overworld_GetPitDestination_screen, X
|
||||
BEQ .matchedHoleClassic
|
||||
.wrongMap16Classic
|
||||
DEX #2 : BPL .nextHoleClassic
|
||||
|
||||
LDX.w #$001E
|
||||
.nextHoleExtra
|
||||
LDA.b $00 : CMP.l ExtraHole_Map16, X
|
||||
LDA.b Scrap00 : CMP.l ExtraHole_Map16, X
|
||||
BNE .wrongMap16Extra
|
||||
LDA.w $040A : CMP.l ExtraHole_Area, X
|
||||
LDA.b OverworldIndex : CMP.l ExtraHole_Area, X
|
||||
BEQ .matchedHoleExtra
|
||||
.wrongMap16Extra
|
||||
DEX #2 : BPL .nextHoleExtra
|
||||
@@ -189,42 +187,42 @@ CheckHole:
|
||||
.matchedHoleExtra
|
||||
SEP #$30
|
||||
TXA : LSR A : TAX
|
||||
LDA.l ExtraHole_Entrance, X : STA.w $010E : STZ.w $010F
|
||||
LDA.l ExtraHole_Entrance, X : STA.w EntranceIndex : STZ.w EntranceIndex+1
|
||||
JML Overworld_Hole_End
|
||||
;--------------------------------------------------------------------------------
|
||||
PreventEnterOnBonk:
|
||||
STA $00 ; part of what we wrote over
|
||||
LDA.b $8A : TAX : LDA.l OWTileMapAlt, X : AND.w #$0001 : BEQ .done
|
||||
LDA.l $5D : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
||||
LDA.b $8A : TAX : LDA.l OWTileWorldAssoc, X : AND.w #$00FF : CMP $7B : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||
STA.b Scrap00 ; part of what we wrote over
|
||||
LDA.b OverworldIndex : TAX : LDA.l OWTileMapAlt, X : AND.w #$0001 : BEQ .done
|
||||
LDA.b LinkState : AND.w #$00FF : CMP.w #$0014 : BNE .done ;in mirror mode?
|
||||
LDA.b OverworldIndex : TAX : LDA.l OWTileWorldAssoc, X : AND.w #$00FF : CMP.b WorldCache : BEQ .done ; Are we bonking, or doing the superbunny glitch?
|
||||
|
||||
; If in inverted, are in mirror mode, and are bonking then do not enter
|
||||
JML.l PreventEnterOnBonk_BRANCH_IX
|
||||
JML PreventEnterOnBonk_BRANCH_IX
|
||||
|
||||
.done
|
||||
LDX.w #$0102 ; rest of what we wrote over
|
||||
JML.l PreventEnterOnBonk_return
|
||||
JML PreventEnterOnBonk_return
|
||||
;--------------------------------------------------------------------------------
|
||||
TurtleRockEntranceFix:
|
||||
LDA TurtleRockAutoOpenFix : BEQ .done
|
||||
LDA $8A : CMP.b #$47 : BNE .done
|
||||
LDA.l TurtleRockAutoOpenFix : BEQ .done
|
||||
LDA.b OverworldIndex : CMP.b #$47 : BNE .done
|
||||
;If exiting to turtle rock ensure the entrance is open
|
||||
LDA.l OverworldEventDataWRAM+$47 : ORA.b #$20 : STA.l OverworldEventDataWRAM+$47
|
||||
.done
|
||||
RTL
|
||||
;--------------------------------------------------------------------------------
|
||||
AnimatedEntranceFix: ;when an entrance animation tries to start
|
||||
PHA : PHX
|
||||
PHA
|
||||
LDA.l InvertedMode : BEQ + ;If we are in inverted mode
|
||||
LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE + ;If we are in Mixed OW shuffle mode
|
||||
LDA $8A : AND #$40 : BNE + ;and in the light world
|
||||
PLX : PLA
|
||||
STZ $04C6 ; skip it.
|
||||
LDA #$00
|
||||
RTL
|
||||
LDA.l OWMode+1 : AND.b #!FLAG_OW_MIXED : BNE + ;If we are in Mixed OW shuffle mode
|
||||
LDA.b OverworldIndex : AND.b #$40 : BNE + ;and in the light world
|
||||
PLA
|
||||
STZ.w OWEntranceCutscene ; skip it.
|
||||
LDA.b #$00
|
||||
RTL
|
||||
+
|
||||
PLX : PLA
|
||||
STA $02E4 ;what we wrote over
|
||||
STA $0FC1 ;what we wrote over
|
||||
STA $0710 ;what we wrote over
|
||||
PLA
|
||||
STA.w CutsceneFlag ;what we wrote over
|
||||
STA.w FreezeSprites ;what we wrote over
|
||||
STA.w SkipOAM ;what we wrote over
|
||||
RTL
|
||||
|
||||
Reference in New Issue
Block a user