Merge in dungeon map changes #1

Merged
karafruit merged 75 commits from FancyDoorsMap into GKNew 2026-01-25 22:43:02 +00:00
5 changed files with 259 additions and 66 deletions
Showing only changes of commit 610607ece4 - Show all commits

View File

@@ -1,5 +1,5 @@
!CenterTile = $036A !CenterTile = $036A
!ConnectorPalette = $0800 !ConnectorPalette = $1000
DrawWackyDoorRandoStuff: DrawWackyDoorRandoStuff:
JSL DrawBorder JSL DrawBorder
@@ -11,6 +11,8 @@ DrawWackyDoorRandoStuff:
LDX.w #!CenterTile LDX.w #!CenterTile
JSL DrawFullRoomTile JSL DrawFullRoomTile
JSL ClearDoorSlotsTable
; multiply room id by 24 to get index in doors table ; multiply room id by 24 to get index in doors table
LDA.l CurrentDisplayedRoom LDA.l CurrentDisplayedRoom
TAX TAX
@@ -25,6 +27,24 @@ DrawWackyDoorRandoStuff:
JSL DrawConnectedRooms JSL DrawConnectedRooms
RTL RTL
ClearDoorSlotsTable:
LDX.w #$0026
LDA.w #$FF0F
- STA.l DoorSlots, X
DEX : DEX
BPL -
RTL
ClearDoorSlotScratch:
PHX
LDX.w #$0006
LDA.w #$FF0F
- STA.l DoorSlotScratch, X
DEX : DEX
BPL -
PLX
RTL
DrawFullRoomTile: DrawFullRoomTile:
LDA.b $CA LDA.b $CA
PHX PHX
@@ -54,52 +74,127 @@ DrawConnectedRooms:
PLB PLB
RTL RTL
CheckEdgesTable:
LDA.b $00
ASL A
CLC : ADC.b $00
ADC.b $02
XBA
ORA.l CurrentDisplayedRoom
STA.b $0C
PHX
LDX.w #$0000
-
LDA.w EdgeConnectionIndices, X
BMI .done
CMP.b $0C
BEQ .match
INX #4
BRA -
.match
INX #2
LDA.w EdgeConnectionIndices, X
TAX
LDA.l NorthOpenEdge, X
.done
PLX
RTS
GetConnection:
LDA.l DoorTable, X
.found
STA.b $08
AND.w #$00FF
CMP.w #$0003
BEQ .not_found
STA.b $0C
LDA.b $08
JSR GetWhichDoorPosition
XBA
ORA.b $0C
RTS
.not_found
JSR CheckEdgesTable
CMP.w #$0000
BPL .found
LDA.w #$FF0F
RTS
print "DrawSide: ", pc print "DrawSide: ", pc
; $00 - Side ; $00 - Side
; $02 - Door position number on side ; $02 - Door position number on side
; $03 - Door index number on side
; $04 - Target door position ; $04 - Target door position
; $06 - Number of doors on side ; $06 - Number of doors on side
; $08 - Room Drawn Address ; $08 - Room Drawn Address
; $0A - Door Index on side
DrawSide: DrawSide:
JSL ClearDoorSlotScratch
STZ.b $06 STZ.b $06
STZ.b $02
LDY.w #$0002 LDY.w #$0002
- -
LDA.l DoorTable, X JSR GetConnection
AND.w #$00FF BMI +
CMP.w #$0003
BEQ +
INC.b $06 INC.b $06
+ INX : INX PHX
PHA
LDA.b $02
ASL A
TAX
PLA
STA.l DoorSlotScratch, X
PLX
+
INX : INX
INC.b $02
DEY DEY
BPL - BPL -
PHX
LDY.b $06 LDY.b $06
LDA.w DoorsCurrentRoomOffsets_offsets, Y LDA.w DoorSlotOffsets, Y
AND.w #$00FF AND.w #$00FF
STA.b $02 STA.b $02
LDY.b $00 LDY.b $00
LDA.w DoorsCurrentRoomOffsets_index, Y LDA.w DoorSlotSides, Y
AND.w #$00FF AND.w #$00FF
CLC : ADC.b $02 CLC : ADC.b $02
TAY TAY
DEX #6
STZ.b $02 STZ.b $02
STZ.b $0A
- -
LDA.l DoorTable, X LDA.b $02
AND.w #$00FF AND.w #$00FF
CMP.w #$0003 ASL A
BEQ + TAX
LDA.l DoorSlotScratch, X
BPL .present
.missing
LDA.b $06
CMP.w #$0002
BNE +
JSR DrawDoubleConnectorRoot
BRA +
.present
TYX
STA.l DoorSlots, X
JSR DrawSingleConnectedRoom JSR DrawSingleConnectedRoom
INC.b $03
INY : INY
+ +
INX : INX
INC.b $02 INC.b $02
LDA.b $02 LDA.b $02
AND.w #$00FF
CMP.w #$0003 CMP.w #$0003
BCC - BCC -
@@ -107,41 +202,39 @@ DrawSide:
CMP.w #$0002 CMP.w #$0002
BEQ .two BEQ .two
BCS .three BCS .three
BRA .done
.other
RTS
.two .two
PHX
JSR DrawDoubleConnector JSR DrawDoubleConnector
PLX BRA .done
RTS
.three .three
PHX
JSR DrawTripleConnector JSR DrawTripleConnector
.done
PLX PLX
RTS RTS
DrawSingleConnectedRoom: DrawSingleConnectedRoom:
STA.b $0A
AND.w #$00FF
STA.b $CA STA.b $CA
PHX LDA.w DoorSlotsBG2, Y
LDA.w DoorsCurrentRoomOffsets, Y
CLC : ADC.w #!CenterTile CLC : ADC.w #!CenterTile
STA.b $08 STA.b $08
TAX TAX
JSL DrawFullRoomTile JSL DrawFullRoomTile
INY : INY
PLX
PHY PHY
LDA.b $06 LDA.b $06
BEQ ++ BEQ ++
CMP.w #$0001 CMP.w #$0001
BEQ .single BEQ .single
JSR GetWhichDoorPosition TYX
LDA.l DoorSlots+1, X
AND.w #$00FF
STA.b $04 STA.b $04
BRA .draw BRA .draw
@@ -151,7 +244,9 @@ DrawSingleConnectedRoom:
CLC : ADC.b $02 CLC : ADC.b $02
STA.b $04 STA.b $04
JSR GetWhichDoorPosition TYX
LDA.l DoorSlots+1, X
AND.w #$00FF
CLC : ADC.b $04 CLC : ADC.b $04
STA.b $04 STA.b $04
ASL A ASL A
@@ -169,11 +264,9 @@ DrawSingleConnectedRoom:
PLY PLY
.done .done
INC.b $0A
RTS RTS
GetWhichDoorPosition: GetWhichDoorPosition:
LDA.l DoorTable, X
BMI .edge BMI .edge
AND.w #$0300 AND.w #$0300
XBA XBA
@@ -246,7 +339,6 @@ macro Draw2x3Connector(offset, label)
endmacro endmacro
macro Draw2TileConnector(offset1, offset2, flip, sublabel) macro Draw2TileConnector(offset1, offset2, flip, sublabel)
LDX.b $08
LDA.w DoorConnectionTiles_<sublabel>, Y LDA.w DoorConnectionTiles_<sublabel>, Y
BEQ ?+ BEQ ?+
ORA.w #!ConnectorPalette ORA.w #!ConnectorPalette
@@ -263,7 +355,9 @@ macro Draw2TileConnector(offset1, offset2, flip, sublabel)
endmacro endmacro
GetConnectorIndex: GetConnectorIndex:
+ LDY.b $0A LDA.b $03
AND.w #$00FF
TAY
LDA.b $06 LDA.b $06
CMP.w #$0002 CMP.w #$0002
BEQ + BEQ +
@@ -276,6 +370,25 @@ GetConnectorIndex:
TAY TAY
RTS RTS
DrawDoubleConnectorRoot:
LDA.b $02
AND.w #$00FF
EOR.w #$FFFF
CLC : ADC.w #$0010
ASL A : ASL A
PHY
TAY
LDX.w #!CenterTile
LDA.b $00
BNE + : %Draw2TileConnector(-$40, -$3E, $0000, vertical) : BRA ++
+ DEC A : BNE + : %Draw2TileConnector(-$02, $3E, $0000, horizontal) : BRA ++
+ DEC A : BNE + : %Draw2TileConnector($80, $82, $8000, vertical) : BRA ++
+ DEC A : BNE + : %Draw2TileConnector($04, $44, $4000, horizontal) : BRA ++
+
++
PLY
RTS
DrawEastConnectors: DrawEastConnectors:
LDA.b $06 : DEC A LDA.b $06 : DEC A
BNE + BNE +
@@ -284,6 +397,7 @@ DrawEastConnectors:
+ JSR GetConnectorIndex + JSR GetConnectorIndex
PHX PHX
LDX.b $08
%Draw2TileConnector(-$02, $3E, $4000, horizontal) %Draw2TileConnector(-$02, $3E, $4000, horizontal)
PLX PLX
RTS RTS
@@ -297,6 +411,7 @@ DrawWestConnectors:
+ JSR GetConnectorIndex + JSR GetConnectorIndex
PHX PHX
LDX.b $08
%Draw2TileConnector($04, $44, $0000, horizontal) %Draw2TileConnector($04, $44, $0000, horizontal)
PLX PLX
RTS RTS
@@ -310,6 +425,7 @@ DrawNorthConnectors:
+ JSR GetConnectorIndex + JSR GetConnectorIndex
PHX PHX
LDX.b $08
%Draw2TileConnector($80, $82, $0000, vertical) %Draw2TileConnector($80, $82, $0000, vertical)
PLX PLX
RTS RTS
@@ -322,6 +438,7 @@ DrawSouthConnectors:
+ JSR GetConnectorIndex + JSR GetConnectorIndex
PHX PHX
LDX.b $08
%Draw2TileConnector(-$40, -$3E, $8000, vertical) %Draw2TileConnector(-$40, -$3E, $8000, vertical)
PLX PLX
RTS RTS
@@ -395,3 +512,38 @@ DrawDoubleConnector:
DrawTripleConnector: DrawTripleConnector:
RTS RTS
DrawBlinkerFancyMode:
LDX.b $00
STZ.w OAMBufferAux, X
TXA
ASL A : ASL A
TAX
REP #$20
LDA.b LinkPosX
AND.w #$01E0
ASL A : ASL A : ASL A
XBA
CLC : ADC.w #$00A4
STA.w OAMBuffer, X
LDA.b LinkPosY
AND.w #$01E0
ASL A : ASL A : ASL A
XBA
CLC : ADC.w #$0064
STA.w OAMBuffer+1, X
SEP #$20
LDA.b FrameCounter
AND.b #$0C
LSR A : LSR A
TAY
LDA.w $8AEB50
STA.w OAMBuffer+2, X
LDA.w $8AEB58, Y
STA.w OAMBuffer+3, X
RTL

View File

@@ -11,9 +11,9 @@ DoorConnectionTiles:
dw $41D1, $41D0 ; $08 right -> middle dw $41D1, $41D0 ; $08 right -> middle
dw $0000, $01C0 ; $09 right -> right dw $0000, $01C0 ; $09 right -> right
dw $41C2, $41C1 ; $0A left-middle -> left-middle dw $41C2, $41C1 ; $0A left-middle -> left-middle
dw $81D2, $81D0 ; $0B left-middle -> left-right dw $81D2, $C1D0 ; $0B left-middle -> left-right
dw $41D3, $81D3 ; $0C left-middle -> middle-right dw $41D3, $81D3 ; $0C left-middle -> middle-right
dw $01D2, $01D0 ; $0D left-right -> left-middle dw $01D2, $41D0 ; $0D left-right -> left-middle
dw $01C0, $01C0 ; $0E left-right -> left-right dw $01C0, $01C0 ; $0E left-right -> left-right
dw $01D0, $41D2 ; $0F left-right -> middle-right dw $01D0, $41D2 ; $0F left-right -> middle-right
dw $C1D3, $01D3 ; $10 middle-right -> left-middle dw $C1D3, $01D3 ; $10 middle-right -> left-middle
@@ -32,11 +32,11 @@ DoorConnectionTiles:
dw $41D5, $41D4 ; $08 bottom -> middle dw $41D5, $41D4 ; $08 bottom -> middle
dw $0300, $01C4 ; $09 bottom -> bottom dw $0300, $01C4 ; $09 bottom -> bottom
dw $41C6, $41C5 ; $0A top-middle -> top-middle dw $41C6, $41C5 ; $0A top-middle -> top-middle
dw $81D6, $81D4 ; $0B top-middle -> top-bottom dw $41D6, $01D4 ; $0B top-middle -> top-bottom
dw $41D7, $81D7 ; $0C top-middle -> middle-bottom dw $41D7, $81D7 ; $0C top-middle -> middle-bottom
dw $01D6, $01D4 ; $0D top-bottom -> top-middle dw $01D6, $41D4 ; $0D top-bottom -> top-middle
dw $01C4, $01C4 ; $0E top-bottom -> top-bottom dw $01C4, $01C4 ; $0E top-bottom -> top-bottom
dw $01D4, $41D6 ; $0F top-bottom -> middle-bottom dw $C1D4, $81D6 ; $0F top-bottom -> middle-bottom
dw $C1D7, $01D7 ; $10 middle-bottom -> top-middle dw $C1D7, $01D7 ; $10 middle-bottom -> top-middle
dw $81D4, $C1D6 ; $11 middle-bottom -> top-bottom dw $81D4, $C1D6 ; $11 middle-bottom -> top-bottom
dw $01C5, $01C6 ; $12 middle-bottom -> middle-bottom dw $01C5, $01C6 ; $12 middle-bottom -> middle-bottom

View File

@@ -1,36 +1,22 @@
DoorsCurrentRoomOffsets: DoorSlotsBG2:
.north ; north
..3
dw $FEBA, $FEC0, $FEC6 dw $FEBA, $FEC0, $FEC6
..2
dw $FEBC, $FEC4 dw $FEBC, $FEC4
..1 ; west
dw $FEC0
.west
..3
dw $FF36, $FFF6, $00B6 dw $FF36, $FFF6, $00B6
..2
dw $FF76, $0076 dw $FF76, $0076
..1 ; south
dw $FFF6
.south
..3
dw $013A, $0140, $0146 dw $013A, $0140, $0146
..2
dw $013C, $0144 dw $013C, $0144
..1 ; east
dw $0140
.east
..3
dw $FF4A, $000A, $00CA dw $FF4A, $000A, $00CA
..2
dw $FF8A, $008A dw $FF8A, $008A
..1
dw $000A DoorSlotSides:
.index db $00, $0A, $14, $1E
db $00, $0C, $18, $24
.offsets DoorSlotOffsets:
db $00, $0A, $06, $00 db $02, $02, $06, $00
SingleEdgeCurrentRoomConnectors: SingleEdgeCurrentRoomConnectors:
.north .north
@@ -125,3 +111,54 @@ EdgePositions:
db $00 ; Desert East Wing db $00 ; Desert East Wing
db $00, $02 ; TT Triple db $00, $02 ; TT Triple
db $02 ; TT Big Key Chest db $02 ; TT Big Key Chest
EdgeConnectionIndices:
; North
dw $0182, $0000
dw $0082, $0003
dw $0283, $0006
dw $0084, $0009
dw $0184, $000C
dw $0284, $000F
dw $0085, $0012
dw $01DB, $0015
dw $02DB, $0018
dw $00DC, $001B
dw $01DC, $001E
; South
dw $0772, $0021
dw $0672, $0024
dw $0873, $0027
dw $0674, $002A
dw $0774, $002D
dw $0874, $0030
dw $0675, $0033
dw $07CB, $0036
dw $08CB, $0039
dw $06CC, $003C
dw $07CC, $003F
; West
dw $0565, $0042
dw $0574, $0045
dw $0575, $0048
dw $0582, $004B
dw $0382, $004E
dw $0385, $0051
dw $03CC, $0054
dw $05CC, $0057
dw $05DC, $005A
; East
dw $0B64, $005D
dw $0B73, $0060
dw $0B74, $0063
dw $0B81, $0066
dw $0981, $0069
dw $0984, $006C
dw $09CB, $006F
dw $0BCB, $0072
dw $0BDB, $0075
dw $FFFF

View File

@@ -110,9 +110,10 @@ SkipMapSprites:
LDA.l DRMode LDA.l DRMode
BEQ + BEQ +
LDA.l DungeonMapMode LDA.l DungeonMapMode
BEQ .draw_none BEQ .no_vanilla_draw
JML $8AEADE JML $8AEADE
.draw_none .no_vanilla_draw
JSL DrawBlinkerFancyMode
JML $8AEAFC JML $8AEAFC
+ +

View File

@@ -569,6 +569,9 @@ CachedCurrentFloor = $7EC22B ; to restore when closing
CurrentDisplayedRoom = $7EC22C ; 2 bytes, used by dungeon map CurrentDisplayedRoom = $7EC22C ; 2 bytes, used by dungeon map
DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map DisplayedRoomDoorIndex = $7EC22E ; 2 bytes, used by dungeon map
; ;
DoorSlotScratch = $7EC230 ; 8 bytes, used by dungeon map
DoorSlots = $7EC238 ; $28 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.
; ;
PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm