Press Select for next entrance

This commit is contained in:
2026-01-13 09:34:04 -06:00
parent 831e6cc27f
commit 633453f386
6 changed files with 279 additions and 13 deletions

View File

@@ -8,6 +8,9 @@ DrawWackyDoorRandoStuff:
STZ.w GFXStripes
LDA.w EntranceIndex
STA.l CurrentDoorEntrance
JSL DetectLinksSection
INC A
XBA
@@ -345,6 +348,7 @@ CheckCanSeeConnector:
BEQ .plx_nope
LDA.l CurrentDisplayedRoom
AND.w #$00FF
ASL A
TAX
LDA.l SaveDataWRAM, X
@@ -548,7 +552,12 @@ DrawStairs:
XBA
ORA.b $CA
STA.b $CA
JSR GetSpecificRoomVisibility
BEQ .ply_skip
TYX
LDA.b $CA
STA.l DoorSlots, X
LDA.w DoorSlotsBG2, Y
@@ -562,6 +571,7 @@ DrawStairs:
INC A
STA.l $7F0002-$40, X
JSL DrawFullRoomTile
.ply_skip
PLY
.skip
@@ -1384,6 +1394,96 @@ DoorsMapSelectCursor:
PLP
RTL
DoorsMapNextEntrance:
PHP
REP #$30
LDA.l CurrentDoorEntrance
TAY
.check_next
INY
CPY.w #$0085
BCC +
LDY.w #$0000
+
TYA
CMP.l CurrentDoorEntrance
BEQ .done
TYX
LDA.l $82D1EF, X
AND.w #$00FF
CMP.w DungeonID
BNE .check_next
TYA
ASL A
TAX
LDA.l EntranceData_room_id, X
STA.b $CA
JSR GetSpecificRoomVisibility
BNE .acceptable
LDA.w #$0001
STA.b $00
LDA.l EntranceData_x_coordinate, X
LSR A
AND.w #$00FF
CMP.w #$0080
BCS +
LDA.b $00
ASL A
STA.b $00
+
LDA.l EntranceData_y_coordinate, X
LSR A
AND.w #$00FF
CMP.w #$0080
BCS +
LDA.b $00
ASL A
ASL A
STA.b $00
+
LDA.b $00
AND.b $0E
BEQ .check_next
.acceptable
PHX
JSL DetectEntranceSection
PLX
INC A
ASL A : ASL A : ASL A : ASL A
XBA
ORA.l EntranceData_room_id, X
STA.l CurrentDisplayedRoom
TYA
STA.l CurrentDoorEntrance
STZ.w GFXStripes
JSL ClearDoorsMapBG1
JSL ClearDoorsMapBG2
JSL DrawCurrentSupertile
SEP #$30
LDA.b #$08
STA.b $17
LDA.b #$20
STA.w $012F
.done
PLP
RTL
ClearDoorsMapBG1:
LDA.w #$000B
STA.b $00
@@ -1480,7 +1580,7 @@ GetRoomEntrance:
BMI .not_found
TYX
LDA.l $02D1EF, X
LDA.l EntranceData_dungeon_id, X
AND.w #$00FF
CMP.w DungeonID
BNE -
@@ -1488,11 +1588,58 @@ GetRoomEntrance:
TYA
ASL A
TAX
LDA.l $02C577, X
LDA.l EntranceData_room_id, X
CMP.w $CA
BNE -
LDA.l $02CDC7, X
LDA.l EntranceData_x_coordinate, X
AND.w #$01FF
CMP.w #$00B9
BCC .left
CMP.w #$0149
BCC .middle
.right
LDA.w #$0004
BRA .done
.middle
LDA.w #$0002
BRA .done
.left
LDA.w #$0000
BRA .done
.not_found
LDA.w #$FFFF
.done
PLY : PLX
RTS
GetRoomDropdown:
PHX : PHY
LDY.w #$0083 ; entrance IDs 76 - 82 are dropdowns
-
DEY
CPY.w #$0076
BCC .not_found
TYX
LDA.l EntranceData_dungeon_id, X
AND.w #$00FF
CMP.w DungeonID
BNE -
TYA
ASL A
TAX
LDA.l EntranceData_room_id, X
CMP.w $CA
BNE -
LDA.l EntranceData_x_coordinate, X
AND.w #$01FF
CMP.w #$00B9
BCC .left
@@ -1524,7 +1671,9 @@ DrawDoorsEntrances:
.next_room
DEX : DEX
BMI .done
BPL +
JMP .done
+
LDA.l DoorSlots, X
BMI .next_room
@@ -1535,10 +1684,10 @@ DrawDoorsEntrances:
JSR GetRoomEntrance
STA.b $02
CMP.w #$0000
BMI .next_room
BMI .check_dropdown
JSR GetSpecificRoomVisibility
BNE .draw
BNE .draw_entrance
PHX
LDA.b $02
@@ -1546,9 +1695,9 @@ DrawDoorsEntrances:
LDA.l EntranceQuadrantMasks, X
PLX
AND.b $0E
BEQ .next_room
BEQ .check_dropdown
.draw
.draw_entrance
SEP #$30
LDY.b $00
LDA.b #$00
@@ -1570,7 +1719,45 @@ DrawDoorsEntrances:
STA.w OAMBuffer+2, Y
INC.b $00
BRA .next_room
.check_dropdown
JSR GetRoomDropdown
STA.b $02
CMP.w #$0000
BMI .next_room
JSR GetSpecificRoomVisibility
BNE .draw_dropdown
PHX
LDA.b $02
TAX
LDA.l DropdownQuadrantMasks, X
PLX
AND.b $0E
BEQ .next_room
.draw_dropdown
SEP #$30
LDY.b $00
LDA.b #$00
STA.w OAMBufferAux, Y
TYA
ASL A : ASL A
TAY
LDA.l DoorSlotsSprites, X
CLC : ADC.b $02 : ADC.b $02
STA.w OAMBuffer, Y
LDA.l DoorSlotsSprites+1, X
STA.w OAMBuffer+1, Y
REP #$30
LDA.w #$A333
STA.w OAMBuffer+2, Y
INC.b $00
JMP .next_room
.done
SEP #$30
@@ -1582,7 +1769,9 @@ DrawDoorsStairs:
LDA.l SpiralPropsIndex, X
TAX
LDA.l SpiralProps, X
BEQ .done
BNE +
JMP .done
+
STA.b $0C
STZ.b $0D
@@ -1595,10 +1784,21 @@ DrawDoorsStairs:
INX : INX
LDA.l SpiralProps, X
PHX
ASL A
TAX
PHX
LDA.b $0D
CLC : ADC.b #$15
ASL A
TAX
LDA.l DoorSlots, X
PLX
CMP.b #$0F
BEQ .skip
REP #$30
LDA.l CurrentDisplayedRoom
STA.b $CA
@@ -1658,7 +1858,9 @@ DetectLinksSection:
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $00
BEQ .done
BNE +
RTL
+
LDA.b LinkPosX
LSR A
@@ -1677,6 +1879,7 @@ DetectLinksSection:
INC A
STA.b $06
DetectSection:
INX
.next_section
PHX
@@ -1732,3 +1935,48 @@ DetectLinksSection:
.done
LDA.b $00
RTL
DetectEntranceSection:
TYA
ASL A
TAX
LDA.l EntranceData_room_id, X
ASL A
TAX
LDA.l SplitRooms, X
TAX
LDA.l SplitRooms, X
AND.w #$00FF
STA.b $00
BNE +
RTL
+
PHX
TYA
ASL A
TAX
LDA.l EntranceData_x_coordinate, X
LSR A
AND.w #$00FF
INC A
STA.b $02
TYA
ASL A
TAX
LDA.l EntranceData_y_coordinate, X
LSR A
AND.w #$00FF
INC A
STA.b $04
TYX
LDA.l EntranceData_layer, X
AND.w #$00FF
INC A
STA.b $06
PLX
JMP DetectSection

View File

@@ -174,6 +174,11 @@ EntranceQuadrantMasks:
dw $0003
dw $0001
DropdownQuadrantMasks:
dw $0008
dw $000C
dw $0004
MultiConnectorMapping:
.two
db $02, $00

View File

@@ -463,8 +463,8 @@ db $01
%d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas
db $01, $00, $20, $28, $60
db $01, $00, $20, $28, $60
db $01, $E0, $FF, $58, $60
db $01, $E0, $FF, $28, $60
db $01, $00, $FF, $58, $60
db $FF
..doors
db $03, $09

View File

@@ -13,6 +13,9 @@ CheckSwitchMap:
BIT.b #$80
BNE .select_new_room
BIT.b #$20
BNE .next_entrance
AND.b #$0F
BEQ .doors_done
BIT.b #$08 : BEQ + : LDA.b #$00 : BRA .doors_move_cursor : +
@@ -27,6 +30,10 @@ CheckSwitchMap:
.select_new_room
JSL DoorsMapSelectCursor
BRA .doors_done
.next_entrance
JSL DoorsMapNextEntrance
.doors_done
REP #$20

View File

@@ -572,6 +572,7 @@ DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map
DoorSlots = $7EC230 ; $32 bytes, used by dungeon map
DoorSlotScratch = $7EC262 ; 6 bytes, used by dungeon map
DoorSlotCursor = $7EC268 ; 2 bytes, used by dungeon map
CurrentDoorEntrance = $7EC26A ; 2 bytes, used by dungeon map
;
LastBGSet = $7EC2F8 ; Lists loaded sheets to check for decompression. 4 bytes.
;

View File

@@ -280,6 +280,11 @@ Module1B_SpawnSelect_spawns = $828481
Overworld_ActualScreenID = $82A4E3
UnderworldTransitionLandingCoordinate = $82C034
Overworld_FinalizeEntryOntoScreen_Data = $82C176
EntranceData_room_id = $82C577
EntranceData_y_coordinate = $82CCBD
EntranceData_x_coordinate = $82CDC7
EntranceData_dungeon_id = $82D1EF
EntranceData_layer = $82D2F9
EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879