Read map data from bank $B9 in custom map mode
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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.
2
ram.asm
2
ram.asm
@@ -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 (?)
|
||||
|
||||
Reference in New Issue
Block a user