Implement checking for what maps can be viewed
This commit is contained in:
@@ -1240,7 +1240,7 @@ DrawDoorsMapBlinker:
|
|||||||
AND.w #$01E0
|
AND.w #$01E0
|
||||||
ASL A : ASL A : ASL A
|
ASL A : ASL A : ASL A
|
||||||
XBA
|
XBA
|
||||||
CLC : ADC.w #$00A4
|
CLC : ADC.w #$00A5
|
||||||
STA.w OAMBuffer, X
|
STA.w OAMBuffer, X
|
||||||
|
|
||||||
LDA.b LinkPosY
|
LDA.b LinkPosY
|
||||||
@@ -1718,10 +1718,13 @@ DoorsMapChangeDungeon:
|
|||||||
BNE +
|
BNE +
|
||||||
INX
|
INX
|
||||||
+ LDA.l DungeonMapData.prev, X
|
+ LDA.l DungeonMapData.prev, X
|
||||||
|
STA.w DungeonID
|
||||||
CMP.b $00
|
CMP.b $00
|
||||||
BEQ .done
|
BEQ .done
|
||||||
|
|
||||||
STA.w DungeonID
|
JSL IsValidDungeonToSwapTo
|
||||||
|
BCC .next
|
||||||
|
|
||||||
JSL FindFirstEntrance
|
JSL FindFirstEntrance
|
||||||
CPY.b #$FF
|
CPY.b #$FF
|
||||||
BEQ .next
|
BEQ .next
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
RedrawLoot:
|
RedrawLoot:
|
||||||
|
SEP #$20
|
||||||
JSL DrawLoot
|
JSL DrawLoot
|
||||||
|
|
||||||
; what we wrote over
|
; what we wrote over
|
||||||
|
|||||||
@@ -5,6 +5,15 @@ LoadDungeonIndicator:
|
|||||||
LDA.w DungeonID
|
LDA.w DungeonID
|
||||||
CMP.b #DungeonIndicatorMap_end-DungeonIndicatorMap : BCS .done
|
CMP.b #DungeonIndicatorMap_end-DungeonIndicatorMap : BCS .done
|
||||||
TAX
|
TAX
|
||||||
|
|
||||||
|
; mark dungeon as entered
|
||||||
|
REP #$20
|
||||||
|
LDA.w DungeonMask, X
|
||||||
|
ORA.l DungeonVisited
|
||||||
|
STA.l DungeonVisited
|
||||||
|
SEP #$20
|
||||||
|
|
||||||
|
; load indicator
|
||||||
LDA.l DungeonIndicatorMap, X
|
LDA.l DungeonIndicatorMap, X
|
||||||
TAX
|
TAX
|
||||||
|
|
||||||
|
|||||||
+77
-21
@@ -42,6 +42,8 @@ CheckSwitchMap:
|
|||||||
BRA .doors_done
|
BRA .doors_done
|
||||||
|
|
||||||
.change_dungeon
|
.change_dungeon
|
||||||
|
LDA.l MapSwapping
|
||||||
|
BEQ .doors_done
|
||||||
JSL DoorsMapChangeDungeon
|
JSL DoorsMapChangeDungeon
|
||||||
BRA .doors_done
|
BRA .doors_done
|
||||||
|
|
||||||
@@ -59,10 +61,14 @@ CheckSwitchMap:
|
|||||||
|
|
||||||
.not_fancy_door_map
|
.not_fancy_door_map
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
LDA.l MapSwapping
|
||||||
|
BEQ .no_swap
|
||||||
|
|
||||||
LDA.b $F6
|
LDA.b $F6
|
||||||
AND.b #$30
|
AND.b #$30
|
||||||
BNE +
|
BNE .do_swap
|
||||||
|
|
||||||
|
.no_swap
|
||||||
; what we wrote over
|
; what we wrote over
|
||||||
REP #$20
|
REP #$20
|
||||||
LDA.w DungeonMapFloorCountData, X
|
LDA.w DungeonMapFloorCountData, X
|
||||||
@@ -70,15 +76,20 @@ CheckSwitchMap:
|
|||||||
CLC : ADC.b $00
|
CLC : ADC.b $00
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
+ PHA
|
.do_swap
|
||||||
TXA
|
TXA
|
||||||
|
.try_next
|
||||||
ASL A
|
ASL A
|
||||||
TAX
|
TAX
|
||||||
PLA
|
LDA.b $F6
|
||||||
BIT.b #$20
|
BIT.b #$20
|
||||||
BNE +
|
BNE +
|
||||||
INX
|
INX
|
||||||
+ LDA.l DungeonMapData.prev, X
|
+
|
||||||
|
|
||||||
|
LDA.l DungeonMapData.prev, X
|
||||||
|
JSL IsValidDungeonToSwapTo
|
||||||
|
BCC .try_next
|
||||||
STA.w DungeonID
|
STA.w DungeonID
|
||||||
|
|
||||||
LDA.b #$04
|
LDA.b #$04
|
||||||
@@ -87,6 +98,58 @@ CheckSwitchMap:
|
|||||||
LDA.w #$0000
|
LDA.w #$0000
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
; in A = dungeon ID to check
|
||||||
|
; out C - CC = not valid, CS = valid
|
||||||
|
IsValidDungeonToSwapTo:
|
||||||
|
CMP.l CachedDungeonID ; dungeon we're in is always valid
|
||||||
|
BNE +
|
||||||
|
SEC
|
||||||
|
RTL
|
||||||
|
+
|
||||||
|
|
||||||
|
PHP
|
||||||
|
REP #$20
|
||||||
|
PHX : PHA
|
||||||
|
TAX
|
||||||
|
|
||||||
|
LDA.l MapSwapping
|
||||||
|
BIT.w #$0080
|
||||||
|
BNE .yes
|
||||||
|
|
||||||
|
BIT.w #$0001
|
||||||
|
BEQ +
|
||||||
|
; check visited flag
|
||||||
|
LDA.l SwapMasks, X
|
||||||
|
AND.l DungeonVisited
|
||||||
|
BNE .yes
|
||||||
|
+
|
||||||
|
|
||||||
|
LDA.l MapSwapping : BIT.w #$0002
|
||||||
|
BEQ +
|
||||||
|
; check map flag
|
||||||
|
LDA.l SwapMasks, X
|
||||||
|
AND.l MapField
|
||||||
|
BNE .yes
|
||||||
|
+
|
||||||
|
|
||||||
|
.no
|
||||||
|
PLA : PLX
|
||||||
|
PLP
|
||||||
|
CLC
|
||||||
|
RTL
|
||||||
|
|
||||||
|
.yes
|
||||||
|
PLA : PLX
|
||||||
|
PLP
|
||||||
|
SEC
|
||||||
|
RTL
|
||||||
|
|
||||||
|
SwapMasks:
|
||||||
|
dw $C000, $C000, $2000, $1000
|
||||||
|
dw $0800, $0400, $0200, $0100
|
||||||
|
dw $0080, $0040, $0020, $0010
|
||||||
|
dw $0008, $0004, $0002, $0001
|
||||||
|
|
||||||
DungeonMapSwitch_Submodule:
|
DungeonMapSwitch_Submodule:
|
||||||
JSL $80893D
|
JSL $80893D
|
||||||
JSL $80833F
|
JSL $80833F
|
||||||
@@ -224,39 +287,32 @@ DrawDungeonLabel:
|
|||||||
CLC : ADC.w #$0008
|
CLC : ADC.w #$0008
|
||||||
TAY
|
TAY
|
||||||
|
|
||||||
|
LDA.l MapSwapping
|
||||||
|
BEQ +
|
||||||
; L/R switch indicators
|
; L/R switch indicators
|
||||||
LDA.w #$E310
|
LDA.w #$E360
|
||||||
STA.w GFXStripes+$02, Y
|
STA.w GFXStripes+$02, Y
|
||||||
LDA.w #$E910
|
LDA.w #$E960
|
||||||
STA.w GFXStripes+$0A, Y
|
STA.w GFXStripes+$0A, Y
|
||||||
LDA.w #$E318
|
|
||||||
STA.w GFXStripes+$12, Y
|
|
||||||
LDA.w #$E918
|
|
||||||
STA.w GFXStripes+$1A, Y
|
|
||||||
|
|
||||||
LDA.w #$0300
|
LDA.w #$0300
|
||||||
STA.w GFXStripes+$04, Y
|
STA.w GFXStripes+$04, Y
|
||||||
STA.w GFXStripes+$0C, Y
|
STA.w GFXStripes+$0C, Y
|
||||||
STA.w GFXStripes+$14, Y
|
|
||||||
STA.w GFXStripes+$1C, Y
|
|
||||||
|
|
||||||
LDA.w #$49AF
|
LDA.w #$65BF
|
||||||
STA.w GFXStripes+$06, Y
|
STA.w GFXStripes+$06, Y
|
||||||
STA.w GFXStripes+$16, Y
|
LDA.w #$25BD
|
||||||
LDA.w #$099E
|
|
||||||
STA.w GFXStripes+$08, Y
|
STA.w GFXStripes+$08, Y
|
||||||
STA.w GFXStripes+$18, Y
|
|
||||||
|
|
||||||
LDA.w #$099F
|
LDA.w #$25BE
|
||||||
STA.w GFXStripes+$0E, Y
|
STA.w GFXStripes+$0E, Y
|
||||||
STA.w GFXStripes+$1E, Y
|
LDA.w #$25BF
|
||||||
LDA.w #$09AF
|
|
||||||
STA.w GFXStripes+$10, Y
|
STA.w GFXStripes+$10, Y
|
||||||
STA.w GFXStripes+$20, Y
|
|
||||||
|
|
||||||
TYA
|
TYA
|
||||||
CLC : ADC.w #$0020
|
CLC : ADC.w #$0010
|
||||||
TAY
|
TAY
|
||||||
|
+
|
||||||
|
|
||||||
LDA.l DRMode
|
LDA.l DRMode
|
||||||
BNE .doors
|
BNE .doors
|
||||||
|
|||||||
Binary file not shown.
+1
-1
@@ -9,7 +9,7 @@ UploadMenuOnlyIcons:
|
|||||||
REP #$20
|
REP #$20
|
||||||
LDA.w #MenuOnlyIcons : STA.w $4342
|
LDA.w #MenuOnlyIcons : STA.w $4342
|
||||||
LDA.w #$1801 : STA.w $4340
|
LDA.w #$1801 : STA.w $4340
|
||||||
LDA.w #$0310 : STA.w $4345
|
LDA.w #$0400 : STA.w $4345
|
||||||
LDA.w #$0F800>>1 : STA.w $2116
|
LDA.w #$0F800>>1 : STA.w $2116
|
||||||
|
|
||||||
SEP #$20
|
SEP #$20
|
||||||
|
|||||||
@@ -240,7 +240,9 @@ CompassCountDisplay: skip 2 ; Compass count display flags (bitfield)
|
|||||||
; High Byte: x c e d a s p m
|
; High Byte: x c e d a s p m
|
||||||
; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace
|
; x = Sewers | c = Hyrule Castle | e = Eastern Palace | d = Desert Palace
|
||||||
; a = Castle Tower | s = Swamp Palace | p = PoD | m = Mire
|
; a = Castle Tower | s = Swamp Palace | p = PoD | m = Mire
|
||||||
skip 10 ;
|
DungeonVisited: skip 2 ; Whether each dungeon has been entered (bitfield)
|
||||||
|
; same order of bits as CompassCountDisplay above
|
||||||
|
skip 8 ;
|
||||||
Aga2Duck: skip 1 ; Used in lieu of pyramid hole for checking if the duck should come
|
Aga2Duck: skip 1 ; Used in lieu of pyramid hole for checking if the duck should come
|
||||||
; 0 = Haven't called post-Aga 2 bird | 1 = Have called post-Aga 2 bird
|
; 0 = Haven't called post-Aga 2 bird | 1 = Have called post-Aga 2 bird
|
||||||
NpcFlags: skip 2 ; l - c s t k z o (bitfield)
|
NpcFlags: skip 2 ; l - c s t k z o (bitfield)
|
||||||
|
|||||||
Reference in New Issue
Block a user