Draw door connections? prototype???
This commit is contained in:
44
dungeon_map/data/doors_connections.asm
Normal file
44
dungeon_map/data/doors_connections.asm
Normal 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
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -166,3 +166,6 @@ org $8AE21C
|
||||
;================================================================================
|
||||
; Custom Door Rando Maps
|
||||
;--------------------------------------------------------------------------------
|
||||
org $8AE590
|
||||
JSL PrepDrawRow
|
||||
BRA + : NOP #5 : +
|
||||
|
||||
@@ -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.
Reference in New Issue
Block a user