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 STZ.w GFXStripes
LDA.w EntranceIndex
STA.l CurrentDoorEntrance
JSL DetectLinksSection JSL DetectLinksSection
INC A INC A
XBA XBA
@@ -345,6 +348,7 @@ CheckCanSeeConnector:
BEQ .plx_nope BEQ .plx_nope
LDA.l CurrentDisplayedRoom LDA.l CurrentDisplayedRoom
AND.w #$00FF
ASL A ASL A
TAX TAX
LDA.l SaveDataWRAM, X LDA.l SaveDataWRAM, X
@@ -548,7 +552,12 @@ DrawStairs:
XBA XBA
ORA.b $CA ORA.b $CA
STA.b $CA STA.b $CA
JSR GetSpecificRoomVisibility
BEQ .ply_skip
TYX TYX
LDA.b $CA
STA.l DoorSlots, X STA.l DoorSlots, X
LDA.w DoorSlotsBG2, Y LDA.w DoorSlotsBG2, Y
@@ -562,6 +571,7 @@ DrawStairs:
INC A INC A
STA.l $7F0002-$40, X STA.l $7F0002-$40, X
JSL DrawFullRoomTile JSL DrawFullRoomTile
.ply_skip
PLY PLY
.skip .skip
@@ -1384,6 +1394,96 @@ DoorsMapSelectCursor:
PLP PLP
RTL 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: ClearDoorsMapBG1:
LDA.w #$000B LDA.w #$000B
STA.b $00 STA.b $00
@@ -1480,7 +1580,7 @@ GetRoomEntrance:
BMI .not_found BMI .not_found
TYX TYX
LDA.l $02D1EF, X LDA.l EntranceData_dungeon_id, X
AND.w #$00FF AND.w #$00FF
CMP.w DungeonID CMP.w DungeonID
BNE - BNE -
@@ -1488,11 +1588,58 @@ GetRoomEntrance:
TYA TYA
ASL A ASL A
TAX TAX
LDA.l $02C577, X LDA.l EntranceData_room_id, X
CMP.w $CA CMP.w $CA
BNE - 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 AND.w #$01FF
CMP.w #$00B9 CMP.w #$00B9
BCC .left BCC .left
@@ -1524,7 +1671,9 @@ DrawDoorsEntrances:
.next_room .next_room
DEX : DEX DEX : DEX
BMI .done BPL +
JMP .done
+
LDA.l DoorSlots, X LDA.l DoorSlots, X
BMI .next_room BMI .next_room
@@ -1535,10 +1684,10 @@ DrawDoorsEntrances:
JSR GetRoomEntrance JSR GetRoomEntrance
STA.b $02 STA.b $02
CMP.w #$0000 CMP.w #$0000
BMI .next_room BMI .check_dropdown
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
BNE .draw BNE .draw_entrance
PHX PHX
LDA.b $02 LDA.b $02
@@ -1546,9 +1695,9 @@ DrawDoorsEntrances:
LDA.l EntranceQuadrantMasks, X LDA.l EntranceQuadrantMasks, X
PLX PLX
AND.b $0E AND.b $0E
BEQ .next_room BEQ .check_dropdown
.draw .draw_entrance
SEP #$30 SEP #$30
LDY.b $00 LDY.b $00
LDA.b #$00 LDA.b #$00
@@ -1570,7 +1719,45 @@ DrawDoorsEntrances:
STA.w OAMBuffer+2, Y STA.w OAMBuffer+2, Y
INC.b $00 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 .done
SEP #$30 SEP #$30
@@ -1582,7 +1769,9 @@ DrawDoorsStairs:
LDA.l SpiralPropsIndex, X LDA.l SpiralPropsIndex, X
TAX TAX
LDA.l SpiralProps, X LDA.l SpiralProps, X
BEQ .done BNE +
JMP .done
+
STA.b $0C STA.b $0C
STZ.b $0D STZ.b $0D
@@ -1595,10 +1784,21 @@ DrawDoorsStairs:
INX : INX INX : INX
LDA.l SpiralProps, X LDA.l SpiralProps, X
PHX PHX
ASL A ASL A
TAX TAX
PHX
LDA.b $0D
CLC : ADC.b #$15
ASL A
TAX
LDA.l DoorSlots, X
PLX
CMP.b #$0F
BEQ .skip
REP #$30 REP #$30
LDA.l CurrentDisplayedRoom LDA.l CurrentDisplayedRoom
STA.b $CA STA.b $CA
@@ -1658,7 +1858,9 @@ DetectLinksSection:
LDA.l SplitRooms, X LDA.l SplitRooms, X
AND.w #$00FF AND.w #$00FF
STA.b $00 STA.b $00
BEQ .done BNE +
RTL
+
LDA.b LinkPosX LDA.b LinkPosX
LSR A LSR A
@@ -1677,6 +1879,7 @@ DetectLinksSection:
INC A INC A
STA.b $06 STA.b $06
DetectSection:
INX INX
.next_section .next_section
PHX PHX
@@ -1732,3 +1935,48 @@ DetectLinksSection:
.done .done
LDA.b $00 LDA.b $00
RTL 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 $0003
dw $0001 dw $0001
DropdownQuadrantMasks:
dw $0008
dw $000C
dw $0004
MultiConnectorMapping: MultiConnectorMapping:
.two .two
db $02, $00 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) %d(..areas) : %d(..doors) : %d(.no_items) : %d(.no_items) : %d(.no_items) : %d(.no_items)
..areas ..areas
db $01, $00, $20, $28, $60 db $01, $00, $20, $28, $60
db $01, $00, $20, $28, $60 db $01, $E0, $FF, $28, $60
db $01, $E0, $FF, $58, $60 db $01, $00, $FF, $58, $60
db $FF db $FF
..doors ..doors
db $03, $09 db $03, $09

View File

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

View File

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

View File

@@ -280,6 +280,11 @@ Module1B_SpawnSelect_spawns = $828481
Overworld_ActualScreenID = $82A4E3 Overworld_ActualScreenID = $82A4E3
UnderworldTransitionLandingCoordinate = $82C034 UnderworldTransitionLandingCoordinate = $82C034
Overworld_FinalizeEntryOntoScreen_Data = $82C176 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 EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2 SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879 Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879