Refactor and open edges
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
!CenterTile = $036A
|
||||
!ConnectorPalette = $0800
|
||||
!ConnectorPalette = $1000
|
||||
|
||||
DrawWackyDoorRandoStuff:
|
||||
JSL DrawBorder
|
||||
@@ -11,6 +11,8 @@ DrawWackyDoorRandoStuff:
|
||||
LDX.w #!CenterTile
|
||||
JSL DrawFullRoomTile
|
||||
|
||||
JSL ClearDoorSlotsTable
|
||||
|
||||
; multiply room id by 24 to get index in doors table
|
||||
LDA.l CurrentDisplayedRoom
|
||||
TAX
|
||||
@@ -25,6 +27,24 @@ DrawWackyDoorRandoStuff:
|
||||
JSL DrawConnectedRooms
|
||||
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:
|
||||
LDA.b $CA
|
||||
PHX
|
||||
@@ -54,52 +74,127 @@ DrawConnectedRooms:
|
||||
PLB
|
||||
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
|
||||
; $00 - Side
|
||||
; $02 - Door position number on side
|
||||
; $03 - Door index number on side
|
||||
; $04 - Target door position
|
||||
; $06 - Number of doors on side
|
||||
; $08 - Room Drawn Address
|
||||
; $0A - Door Index on side
|
||||
DrawSide:
|
||||
JSL ClearDoorSlotScratch
|
||||
|
||||
STZ.b $06
|
||||
STZ.b $02
|
||||
LDY.w #$0002
|
||||
|
||||
-
|
||||
LDA.l DoorTable, X
|
||||
AND.w #$00FF
|
||||
CMP.w #$0003
|
||||
BEQ +
|
||||
JSR GetConnection
|
||||
BMI +
|
||||
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
|
||||
BPL -
|
||||
|
||||
PHX
|
||||
|
||||
LDY.b $06
|
||||
LDA.w DoorsCurrentRoomOffsets_offsets, Y
|
||||
LDA.w DoorSlotOffsets, Y
|
||||
AND.w #$00FF
|
||||
STA.b $02
|
||||
|
||||
LDY.b $00
|
||||
LDA.w DoorsCurrentRoomOffsets_index, Y
|
||||
LDA.w DoorSlotSides, Y
|
||||
AND.w #$00FF
|
||||
CLC : ADC.b $02
|
||||
TAY
|
||||
|
||||
DEX #6
|
||||
STZ.b $02
|
||||
STZ.b $0A
|
||||
|
||||
-
|
||||
LDA.l DoorTable, X
|
||||
LDA.b $02
|
||||
AND.w #$00FF
|
||||
CMP.w #$0003
|
||||
BEQ +
|
||||
ASL A
|
||||
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
|
||||
INC.b $03
|
||||
INY : INY
|
||||
+
|
||||
INX : INX
|
||||
INC.b $02
|
||||
LDA.b $02
|
||||
AND.w #$00FF
|
||||
CMP.w #$0003
|
||||
BCC -
|
||||
|
||||
@@ -107,41 +202,39 @@ DrawSide:
|
||||
CMP.w #$0002
|
||||
BEQ .two
|
||||
BCS .three
|
||||
|
||||
.other
|
||||
RTS
|
||||
BRA .done
|
||||
|
||||
.two
|
||||
PHX
|
||||
JSR DrawDoubleConnector
|
||||
PLX
|
||||
RTS
|
||||
BRA .done
|
||||
|
||||
.three
|
||||
PHX
|
||||
JSR DrawTripleConnector
|
||||
|
||||
.done
|
||||
PLX
|
||||
RTS
|
||||
|
||||
|
||||
DrawSingleConnectedRoom:
|
||||
STA.b $0A
|
||||
AND.w #$00FF
|
||||
STA.b $CA
|
||||
PHX
|
||||
LDA.w DoorsCurrentRoomOffsets, Y
|
||||
LDA.w DoorSlotsBG2, Y
|
||||
CLC : ADC.w #!CenterTile
|
||||
STA.b $08
|
||||
TAX
|
||||
JSL DrawFullRoomTile
|
||||
INY : INY
|
||||
PLX
|
||||
|
||||
PHY
|
||||
|
||||
LDA.b $06
|
||||
BEQ ++
|
||||
CMP.w #$0001
|
||||
BEQ .single
|
||||
|
||||
JSR GetWhichDoorPosition
|
||||
TYX
|
||||
LDA.l DoorSlots+1, X
|
||||
AND.w #$00FF
|
||||
STA.b $04
|
||||
BRA .draw
|
||||
|
||||
@@ -151,7 +244,9 @@ DrawSingleConnectedRoom:
|
||||
CLC : ADC.b $02
|
||||
STA.b $04
|
||||
|
||||
JSR GetWhichDoorPosition
|
||||
TYX
|
||||
LDA.l DoorSlots+1, X
|
||||
AND.w #$00FF
|
||||
CLC : ADC.b $04
|
||||
STA.b $04
|
||||
ASL A
|
||||
@@ -169,11 +264,9 @@ DrawSingleConnectedRoom:
|
||||
|
||||
PLY
|
||||
.done
|
||||
INC.b $0A
|
||||
RTS
|
||||
|
||||
GetWhichDoorPosition:
|
||||
LDA.l DoorTable, X
|
||||
BMI .edge
|
||||
AND.w #$0300
|
||||
XBA
|
||||
@@ -246,7 +339,6 @@ macro Draw2x3Connector(offset, label)
|
||||
endmacro
|
||||
|
||||
macro Draw2TileConnector(offset1, offset2, flip, sublabel)
|
||||
LDX.b $08
|
||||
LDA.w DoorConnectionTiles_<sublabel>, Y
|
||||
BEQ ?+
|
||||
ORA.w #!ConnectorPalette
|
||||
@@ -263,7 +355,9 @@ macro Draw2TileConnector(offset1, offset2, flip, sublabel)
|
||||
endmacro
|
||||
|
||||
GetConnectorIndex:
|
||||
+ LDY.b $0A
|
||||
LDA.b $03
|
||||
AND.w #$00FF
|
||||
TAY
|
||||
LDA.b $06
|
||||
CMP.w #$0002
|
||||
BEQ +
|
||||
@@ -276,6 +370,25 @@ GetConnectorIndex:
|
||||
TAY
|
||||
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:
|
||||
LDA.b $06 : DEC A
|
||||
BNE +
|
||||
@@ -284,6 +397,7 @@ DrawEastConnectors:
|
||||
|
||||
+ JSR GetConnectorIndex
|
||||
PHX
|
||||
LDX.b $08
|
||||
%Draw2TileConnector(-$02, $3E, $4000, horizontal)
|
||||
PLX
|
||||
RTS
|
||||
@@ -297,6 +411,7 @@ DrawWestConnectors:
|
||||
|
||||
+ JSR GetConnectorIndex
|
||||
PHX
|
||||
LDX.b $08
|
||||
%Draw2TileConnector($04, $44, $0000, horizontal)
|
||||
PLX
|
||||
RTS
|
||||
@@ -310,6 +425,7 @@ DrawNorthConnectors:
|
||||
|
||||
+ JSR GetConnectorIndex
|
||||
PHX
|
||||
LDX.b $08
|
||||
%Draw2TileConnector($80, $82, $0000, vertical)
|
||||
PLX
|
||||
RTS
|
||||
@@ -322,6 +438,7 @@ DrawSouthConnectors:
|
||||
|
||||
+ JSR GetConnectorIndex
|
||||
PHX
|
||||
LDX.b $08
|
||||
%Draw2TileConnector(-$40, -$3E, $8000, vertical)
|
||||
PLX
|
||||
RTS
|
||||
@@ -395,3 +512,38 @@ DrawDoubleConnector:
|
||||
|
||||
DrawTripleConnector:
|
||||
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
|
||||
|
||||
@@ -11,9 +11,9 @@ DoorConnectionTiles:
|
||||
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 $81D2, $C1D0 ; $0B left-middle -> left-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 $01D0, $41D2 ; $0F left-right -> middle-right
|
||||
dw $C1D3, $01D3 ; $10 middle-right -> left-middle
|
||||
@@ -32,11 +32,11 @@ DoorConnectionTiles:
|
||||
dw $41D5, $41D4 ; $08 bottom -> middle
|
||||
dw $0300, $01C4 ; $09 bottom -> bottom
|
||||
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 $01D6, $01D4 ; $0D top-bottom -> top-middle
|
||||
dw $01D6, $41D4 ; $0D top-bottom -> top-middle
|
||||
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 $81D4, $C1D6 ; $11 middle-bottom -> top-bottom
|
||||
dw $01C5, $01C6 ; $12 middle-bottom -> middle-bottom
|
||||
|
||||
@@ -1,36 +1,22 @@
|
||||
DoorsCurrentRoomOffsets:
|
||||
.north
|
||||
..3
|
||||
DoorSlotsBG2:
|
||||
; north
|
||||
dw $FEBA, $FEC0, $FEC6
|
||||
..2
|
||||
dw $FEBC, $FEC4
|
||||
..1
|
||||
dw $FEC0
|
||||
.west
|
||||
..3
|
||||
; west
|
||||
dw $FF36, $FFF6, $00B6
|
||||
..2
|
||||
dw $FF76, $0076
|
||||
..1
|
||||
dw $FFF6
|
||||
.south
|
||||
..3
|
||||
; south
|
||||
dw $013A, $0140, $0146
|
||||
..2
|
||||
dw $013C, $0144
|
||||
..1
|
||||
dw $0140
|
||||
.east
|
||||
..3
|
||||
; east
|
||||
dw $FF4A, $000A, $00CA
|
||||
..2
|
||||
dw $FF8A, $008A
|
||||
..1
|
||||
dw $000A
|
||||
.index
|
||||
db $00, $0C, $18, $24
|
||||
.offsets
|
||||
db $00, $0A, $06, $00
|
||||
|
||||
DoorSlotSides:
|
||||
db $00, $0A, $14, $1E
|
||||
|
||||
DoorSlotOffsets:
|
||||
db $02, $02, $06, $00
|
||||
|
||||
SingleEdgeCurrentRoomConnectors:
|
||||
.north
|
||||
@@ -125,3 +111,54 @@ EdgePositions:
|
||||
db $00 ; Desert East Wing
|
||||
db $00, $02 ; TT Triple
|
||||
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
|
||||
|
||||
@@ -110,9 +110,10 @@ SkipMapSprites:
|
||||
LDA.l DRMode
|
||||
BEQ +
|
||||
LDA.l DungeonMapMode
|
||||
BEQ .draw_none
|
||||
BEQ .no_vanilla_draw
|
||||
JML $8AEADE
|
||||
.draw_none
|
||||
.no_vanilla_draw
|
||||
JSL DrawBlinkerFancyMode
|
||||
JML $8AEAFC
|
||||
+
|
||||
|
||||
|
||||
3
ram.asm
3
ram.asm
@@ -569,6 +569,9 @@ CachedCurrentFloor = $7EC22B ; to restore when closing
|
||||
CurrentDisplayedRoom = $7EC22C ; 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.
|
||||
;
|
||||
PaletteBufferAux = $7EC300 ; Secondary and main palette buffer. See symbols_wram.asm
|
||||
|
||||
Reference in New Issue
Block a user