Draw door connections? prototype???

This commit is contained in:
2026-01-05 23:25:51 -06:00
parent 5574eea4c7
commit b3f35f274b
7 changed files with 235 additions and 24 deletions

View File

@@ -0,0 +1,44 @@
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 $83C9, $43C9 ; $03 left -> right
dw $03D7, $03DB ; $04 middle -> left
dw $03C7, $43C7 ; $05 middle -> middle
dw $43DB, $43D7 ; $06 middle -> right
dw $03C9, $C3C9 ; $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

View File

@@ -48,7 +48,7 @@ dw $FFFF, $838F, $FFFF, $FFFF ; 2E
dw $C3B4, $FFFF, $436E, $03B2 ; 2F - Kakariko well
dw $C361, $FFFF, $839A, $FFFF ; 30 - inset stairs if possible
dw $43B2, $0397, $839B, $C399 ; 31
dw $43C5, $03C5, $43D5, $03D5 ; 32
dw $43C4, $03C4, $43D4, $03D4 ; 32
dw $FFFF, $FFFF, $438F, $FFFF ; 33
dw $4348, $0368, $4349, $8368 ; 34
dw $C38D, $039B, $43B1, $037D ; 35
@@ -63,7 +63,7 @@ dw $039B, $439B, $0361, $838E ; 3D
dw $FFFF, $438F, $43B2, $0373 ; 3E
dw $FFFF, $FFFF, $8399, $C399 ; 3F
dw $C3A5, $FFFF, $4372, $C399 ; 40 - inset stairs if feasible
dw $03C6, $03C7, $03D6, $03D7 ; 41
dw $03C5, $03C6, $03D5, $03D6 ; 41
dw $03E9, $03EA, $FFFF, $FFFF ; 42
dw $C3B2, $03B2, $FFFF, $0361 ; 43
dw $038D, $839F, $838D, $039F ; 44

View File

@@ -145,11 +145,18 @@ DrawEntrances:
LDA.l DungeonMapFloorCountData, X
AND.b #$0F
CLC : ADC.w $020E
DEC A
REP #$20
AND.w #$00FF
JSR DrawBothFloorsEntrances
STZ.b $02
PHA
JSR DrawSingleFloorEntrances
INC.b $02
INC.b $02
PLA
DEC A
JSR DrawSingleFloorEntrances
.done
REP #$20
@@ -158,14 +165,21 @@ DrawEntrances:
SEP #$30
RTL
DrawBothFloorsEntrances:
DrawSingleFloorEntrances:
ASL A
TAX
LDA.l DungeonMapFloorToDataOffset, X
CLC : ADC.l DungeonMapMode
ASL A
TAX
LDA.l MapDrawingData_floor_data_offset, X
TAY
STZ.b $06
LDA.l DungeonMapMode
ASL A
TAX
.next_room
REP #$20
LDA.b ($0C), Y ; get room id
@@ -173,7 +187,9 @@ DrawBothFloorsEntrances:
CMP.w #$000F ; $0F = empty room
BEQ +
PHX
JSR DrawSingleRoomEntrances
PLX
+
INY
@@ -181,51 +197,78 @@ DrawBothFloorsEntrances:
SEP #$20
INC.b $06
LDA.b $06
CMP.b #$05
CMP.l MapDrawingData_column_count, X
BCC .next_room
STZ.b $06
- INC.b $07
LDA.b $07
CMP.b #$0A
CMP.l MapDrawingData_row_count, X
BCC .next_room
.done
REP #$20
RTS
macro DrawSingleEntrance(offset)
LDX.b $00
STZ.w OAMBufferAux, X ; high x-bit and size bit
TXA
LDY.b $00
LDA.b #$00
STA.w OAMBufferAux, Y ; high x-bit and size bit
TYA
ASL #2
TAX
TAY
LDA.b $06
ASL #4
CLC : ADC.b #$90+<offset>
STA.w OAMBuffer+0, X
CPX.b #$02
BNE ?+
ASL A
?+
CLC : ADC.b $06
ASL #3
CLC : ADC.b #<offset>
CLC : ADC.l MapDrawingData_sprite_offset_x_base, X
STA.w OAMBuffer+0, Y
PHX
LDA.b $07
ASL #4
CMP.b #$50
BCC ?+
CLC : ADC.b #$50
?+ CLC : ADC.b #$87
CPX.b #$02
BNE ?+
ASL A
?+
CLC : ADC.b $07
ASL #3
PHA
LDA.b $02
CLC : ADC.l DungeonMapMode
ASL A
TAX
PLA
CLC : ADC.l MapDrawingData_sprite_offset_y_base, X
PLX
CLC : ADC.b #$08
CLC : ADC.w $0213
SEC : SBC.b $E8
STA.w OAMBuffer+1, X
STA.w OAMBuffer+1, Y
LDA.b #$33
STA.w OAMBuffer+2, X
STA.w OAMBuffer+2, Y
LDA.b #$23
STA.w OAMBuffer+3, X
STA.w OAMBuffer+3, Y
INC.b $00
endmacro
DrawSingleRoomEntrances:
STA.b $0E
PHY
LDA.l DungeonMapMode
ASL A
TAY
SEP #$10
LDX.b #$FE
@@ -242,6 +285,7 @@ DrawSingleRoomEntrances:
SEP #$20
LDA.l SupertileEntrances+1, X
TYX
PHA : PHA
BIT.b #$40
@@ -263,4 +307,5 @@ DrawSingleRoomEntrances:
.done
REP #$30
PLY
RTS

View File

@@ -166,3 +166,6 @@ org $8AE21C
;================================================================================
; Custom Door Rando Maps
;--------------------------------------------------------------------------------
org $8AE590
JSL PrepDrawRow
BRA + : NOP #5 : +

View File

@@ -66,6 +66,9 @@ MapDrawingData:
dw $001F, $002F
dw $007F, $008F
.entrance_sprite_offset_y_base
dw $0087, $0097
.supertile_pixel_spacing
dw $0010, $0018
@@ -213,7 +216,6 @@ org $8AE652 ; steal some space from the old map-drawing code we're no longer usi
%Map_LDAY($8AE5F7, floor_data_offset)
%Map_CMP($8AE5A2, row_count)
%Map_CMP($8AE7FA, column_count)
%Map_LDAX($8AE591, row_start_address)
%Map_ADC($8AE896, sprite_offset_x_base)
%Map_ADCY($8AE8B5, sprite_offset_y_base)
%Map_ADC($8AE952, sprite_offset_y_base)
@@ -224,3 +226,120 @@ padbyte $EA
pad $8AE7F6
pullpc
incsrc data/doors_connections.asm
PrepDrawRow:
CLC : ADC.l DungeonMapMode
ASL A
TAX
LDA.l MapDrawingData_row_start_address, X
CLC : ADC.b $06
AND.w #$0FFF
TAX
LDA.l DungeonMapMode
CMP.w #$0001
BNE .done
JSR DrawRowOfRoomConnections
.done
RTL
TripleTable:
dw $0000, $0003, $0006
DrawRowOfRoomConnections:
PHB : PHK : PLB
PHX
LDA.b $00
ASL A
TAY
LDA.w TripleTable, Y
TAY
LDA.w $B9FC00, 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
LDA.b $00
CMP.w #$0002
BCS .done
PLX : PHX
ASL A : ASL A
TAY
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
LDA.w $B9FC09, Y
AND.w #$00FF
JSR DrawVerticalConnector
INY
INX #6
.done
PLX
PLB
RTS
; A = connector index
; X = address
DrawHorizontalConnector:
PHY
ASL A : ASL A
TAY
LDA.w DoorConnectionTiles_horizontal+0, Y
ORA.w #$1400
STA.l $7F0004, X
LDA.w DoorConnectionTiles_horizontal+2, Y
ORA.w #$1400
STA.l $7F0044, X
PLY
RTS
; A = connector index
; X = address
DrawVerticalConnector:
PHY
ASL A : ASL A
TAY
LDA.w DoorConnectionTiles_vertical+0, Y
ORA.w #$1400
STA.l $7F0080, X
LDA.w DoorConnectionTiles_vertical+2, Y
ORA.w #$1400
STA.l $7F0082, X
PLY
RTS

Binary file not shown.

Binary file not shown.