Read map data from bank $B9 in custom map mode

This commit is contained in:
2026-01-07 05:12:07 -06:00
parent 72e126a1b6
commit d5917afb64
11 changed files with 177 additions and 99 deletions

View File

@@ -210,7 +210,8 @@ incsrc special_weapons.asm
incsrc variable_ganon_vulnerability.asm
incsrc pseudoflute.asm
incsrc dungeon_map/main.asm
warnpc $B9F000
warnpc $B9E000 ; $E000 - EFFF reserved for custom door rando map data
org $B9F000
incsrc dungeon_map/settings.asm

View File

@@ -1,44 +1,21 @@
DoorConnectionTiles:
.horizontal
dw $0300, $0300 ; $00
dw $03DF, $0300 ; $01 top -> top
dw $03CC, $03CB ; $02 top -> middle
dw $03CF, $C3CF ; $03 top -> bottom
dw $43CC, $43CB ; $04 middle -> top
dw $03CD, $83CD ; $05 middle -> middle
dw $C3CB, $C3CC ; $06 middle -> bottom
dw $C3CF, $03CF ; $07 bottom -> top
dw $83CB, $83CC ; $08 bottom -> middle
dw $0300, $03DF ; $09 bottom -> bottom
dw $83CD, $83DD ; $0A top-middle -> top-middle
dw $C3DC, $C3CC ; $0B top-middle -> top-bottom
dw $03CE, $C3CE ; $0C top-middle -> middle-bottom
dw $43DC, $83CC ; $0D top-bottom -> top-middle
dw $03DF, $03DF ; $0E top-bottom -> top-bottom
dw $03CC, $03DC ; $0F top-bottom -> middle-bottom
dw $43CE, $83CE ; $10 middle-bottom -> top-middle
dw $43CC, $43DC ; $11 middle-bottom -> top-bottom
dw $03CD, $03DD ; $12 middle-bottom -> middle-bottom
dw $03DD, $03DD ; $13 triple -> triple
.vertical
dw $0300, $0300 ; $00
dw $03CA, $0300 ; $01 left -> left
dw $83D7, $83DB ; $02 left -> middle
dw $C3CF, $03CF ; $03 left -> right
dw $03D7, $03DB ; $04 middle -> left
dw $03C7, $43C7 ; $05 middle -> middle
dw $43DB, $43D7 ; $06 middle -> right
dw $43CF, $83CF ; $07 right -> left
dw $C3DB, $C3D7 ; $08 right -> middle
dw $0300, $03CA ; $09 right -> right
dw $43C8, $43C7 ; $0A left-middle -> left-middle
dw $43D8, $43D7 ; $0B left-middle -> left-right
dw $83D9, $43D9 ; $0C left-middle -> middle-right
dw $C3D8, $C3D7 ; $0D left-right -> left-middle
dw $03CA, $03CA ; $0E left-right -> left-right
dw $83D7, $83D8 ; $0F left-right -> middle-right
dw $03D9, $C3D9 ; $10 middle-right -> left-middle
dw $03D7, $03D8 ; $11 middle-right -> left-right
dw $03C7, $03C8 ; $12 middle-right -> middle-right
dw $43C8, $03C8 ; $13 triple -> triple
dw $0000, $0000 ; $00
dw $01C0, $0000 ; $01 left -> left
dw $01D0, $01D1 ; $02 left -> middle
dw $81C3, $41C3 ; $03 left -> right
dw $81D0, $81D1 ; $04 middle -> left
dw $01C1, $41C1 ; $05 middle -> middle
dw $C1D1, $C1D0 ; $06 middle -> right
dw $01C3, $C1C3 ; $07 right -> left
dw $41D1, $41D0 ; $08 right -> middle
dw $0000, $01C0 ; $09 right -> right
dw $41C2, $41C1 ; $0A left-middle -> left-middle
dw $81D2, $81D0 ; $0B left-middle -> left-right
dw $41D3, $81D3 ; $0C left-middle -> middle-right
dw $01D2, $01D0 ; $0D left-right -> left-middle
dw $01C0, $01C0 ; $0E left-right -> left-right
dw $01D0, $41D2 ; $0F left-right -> middle-right
dw $C1D3, $01D3 ; $10 middle-right -> left-middle
dw $81D0, $C1D2 ; $11 middle-right -> left-right
dw $01C1, $01C2 ; $12 middle-right -> middle-right
dw $41C2, $01C2 ; $13 triple -> triple

View File

@@ -35,13 +35,13 @@ DrawLoot:
STZ.b $0E
LDX.w DungeonID
LDA.l DungeonMapRoomPointers, X
STA.b $0C
JSL LoadDungeonMapRoomPointer
STA.b $72
SEP #$20
LDA.l DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.w $020E
CLC : ADC.w DungeonMapCurrentFloor
PHA
JSR DrawSingleFloorLoot
@@ -130,7 +130,7 @@ DrawSingleFloorLoot:
.next_room
REP #$20
LDA.b ($0C), Y ; get room id
LDA.b [$72], Y ; get room id
PHY
AND.w #$00FF

View File

@@ -138,13 +138,13 @@ DrawEntrances:
LDA.b $06 : PHA
LDX.w DungeonID
LDA.l DungeonMapRoomPointers, X
STA.b $0C
JSL LoadDungeonMapRoomPointer
STA.b $72
SEP #$20
LDA.l DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.w $020E
CLC : ADC.w DungeonMapCurrentFloor
REP #$20
AND.w #$00FF
@@ -182,7 +182,7 @@ DrawSingleFloorEntrances:
.next_room
REP #$20
LDA.b ($0C), Y ; get room id
LDA.b [$72], Y ; get room id
AND.w #$00FF
CMP.w #$000F ; $0F = empty room

View File

@@ -160,10 +160,10 @@ DrawDungeonLabel:
RTL
StartCurrentRoomSearch:
LDA.w $8AF5E9, X ; dungeon map floor count data
LDA.w DungeonMapFloorCountData, X
LSR A : LSR A : LSR A : LSR A
STA.b $00
LDA.w $8AF5E9, X
LDA.w DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.b $00
ASL A
@@ -190,7 +190,7 @@ FindCurrentRoom:
CPY.b $0C
BCS .not_found
LDA.b ($04), Y
LDA.b [$72], Y
INY
CMP.b $0E
BEQ .found

View File

@@ -187,3 +187,33 @@ org $8AE21C
org $8AE590
JSL PrepDrawRow
BRA + : NOP #5 : +
org $8AE5F2
JSR LoadDungeonMapRoomPointer_0A
STA.b $72
org $8AE600
LDA.b [$72], Y
org $8AE634
JSR LoadDungeonMapRoomPointer_0A
STA.b $72
org $8AE63B
LDA.b [$72], Y
org $8AE867
JSR LoadDungeonMapRoomPointer_0A
STA.b $72
org $8AE872
LDA.b [$72], Y
org $8AE8DD
JSR LoadDungeonMapRoomPointer_0A
org $8AE8E4
STA.b $72
org $8AE8F9
LDA.b [$72], Y

View File

@@ -78,6 +78,31 @@ MapDrawingData:
.floor_pixel_row_wrap
dw $0040, $0030
CustomMapDrawingData:
.column_wrap
dw $0003
.column_count
dw $0004
.row_wrap
dw $0002
.floor_connection_data_offset
dw $0000
dw $0011
dw $0022
dw $0033
dw $0044
dw $0055
dw $0066
dw $0077
dw $0088
.row_connection_data_offset
dw $0000
dw $0007
dw $000E
dw $0015
macro Map_LDA(addr, label)
pushpc
org <addr>
@@ -206,6 +231,10 @@ JSR ADC_Y_sprite_offset_y_base
org $8AE652 ; steal some space from the old map-drawing code we're no longer using
LoadDungeonMapRoomPointer_0A:
JSL LoadDungeonMapRoomPointer
RTS
%Map_LDAY($8AE45F, corner_tile_address)
%Map_LDAY($8AE489, row_tile_address)
%Map_CMP($8AE4B0, row_tile_length)
@@ -229,6 +258,20 @@ pullpc
incsrc data/doors_connections.asm
LoadDungeonMapRoomPointer:
LDA.l DungeonMapMode
BEQ .normal
LDA.w #bank(CustomMapPointers)
STA.b $74
LDA.l CustomMapPointers, X
RTL
.normal
LDA.w #bank(DungeonMapRoomPointers)
STA.b $74
LDA.l DungeonMapRoomPointers, X
RTL
PrepDrawRow:
CLC : ADC.l DungeonMapMode
ASL A
@@ -247,67 +290,66 @@ PrepDrawRow:
.done
RTL
TripleTable:
dw $0000, $0003, $0006
DrawRowOfRoomConnections:
PHB : PHK : PLB
PHX
LDX.w DungeonID
LDA.l DoorConnectionPointers, X
STA.b $04
LDA.l DungeonMapFloorCountData, X
AND.w #$000F
CLC : ADC.w DungeonMapCurrentFloor
ASL A
TAX
LDA.l CustomMapDrawingData_floor_connection_data_offset, X
CLC : ADC.b $04
STA.b $04
LDA.b $00
ASL A
TAY
LDA.w TripleTable, Y
TAY
TAX
LDA.l CustomMapDrawingData_row_connection_data_offset, X
CLC : ADC.b $04
STA.b $04
LDA.w $B9FC00, Y
STZ.b $02
PLX : PHX
LDY.w #$0000
.next_horizontal
LDA.b ($04), Y
AND.w #$00FF
JSR DrawHorizontalConnector
INY
INX #6
LDA.w $B9FC00, Y
AND.w #$00FF
JSR DrawHorizontalConnector
INY
INX #6
LDA.w $B9FC00, Y
AND.w #$00FF
JSR DrawHorizontalConnector
INC.b $02
LDA.b $02
CMP.l CustomMapDrawingData_column_wrap
BCC .next_horizontal
LDA.b $00
CMP.w #$0002
CMP.l CustomMapDrawingData_row_wrap
BCS .done
PLX : PHX
ASL A : ASL A
TAY
LDA.w $B9FC09, Y
STZ.b $02
.next_vertical
LDA.b ($04), Y
AND.w #$00FF
JSR DrawVerticalConnector
INY
INX #6
LDA.w $B9FC09, Y
AND.w #$00FF
JSR DrawVerticalConnector
INY
INX #6
LDA.w $B9FC09, Y
AND.w #$00FF
JSR DrawVerticalConnector
INY
INX #6
LDA.w $B9FC09, Y
AND.w #$00FF
JSR DrawVerticalConnector
INY
INX #6
INC.b $02
LDA.b $02
CMP.l CustomMapDrawingData_column_count
BCC .next_vertical
.done
PLX
@@ -320,12 +362,19 @@ DrawHorizontalConnector:
PHY
ASL A : ASL A
TAY
LDA.w DoorConnectionTiles_horizontal+0, Y
ORA.w #$1400
LDA.w DoorConnectionTiles+0, Y
BEQ +
ORA.w #$1404
STA.l $7F0004, X
LDA.w DoorConnectionTiles_horizontal+2, Y
ORA.w #$1400
+
LDA.w DoorConnectionTiles+2, Y
BEQ +
ORA.w #$1404
STA.l $7F0044, X
+
PLY
RTS
@@ -335,11 +384,18 @@ DrawVerticalConnector:
PHY
ASL A : ASL A
TAY
LDA.w DoorConnectionTiles_vertical+0, Y
LDA.w DoorConnectionTiles+0, Y
BEQ +
ORA.w #$1400
STA.l $7F0080, X
LDA.w DoorConnectionTiles_vertical+2, Y
+
LDA.w DoorConnectionTiles+2, Y
BEQ +
ORA.w #$1400
STA.l $7F0082, X
+
PLY
RTS

View File

@@ -31,6 +31,18 @@ struct DungeonMapData DungeonMapData
.unused: skip 1
endstruct
warnpc $B9F840
org $B9F840
DoorConnectionPointers:
skip $20
warnpc $B9F860
org $B9F860
CustomMapPointers:
skip $20
warnpc $B9F880
org $B9F880

Binary file not shown.

Binary file not shown.

View File

@@ -196,6 +196,8 @@ BottleMenuCounter = $7E0205 ; Step counter for opening bottle menu
MenuFrameCounter = $7E0206 ; Incremented every menu frame. Never read.
MenuBlink = $7E0207 ; Incremented every frame and masked with $10 to blink cursor
;
DungeonMapCurrentFloor = $7E020E ;
;
RaceGameFlag = $7E021B ;
;
MessageJunk = $7E0223 ; Zeroed but never used (?)