From b3f35f274bd69189e8c464dc60d899d52814ad1e Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 5 Jan 2026 23:25:51 -0600 Subject: [PATCH] Draw door connections? prototype??? --- dungeon_map/data/doors_connections.asm | 44 +++++++++ dungeon_map/data/supertile_shapes.asm | 4 +- dungeon_map/draw_rooms.asm | 87 +++++++++++++----- dungeon_map/hooks.asm | 3 + dungeon_map/mappable_doors.asm | 121 ++++++++++++++++++++++++- menu/map_icons.3bpp | Bin 4608 -> 4608 bytes menu/map_icons_3.3bppc | Bin 947 -> 1030 bytes 7 files changed, 235 insertions(+), 24 deletions(-) create mode 100644 dungeon_map/data/doors_connections.asm diff --git a/dungeon_map/data/doors_connections.asm b/dungeon_map/data/doors_connections.asm new file mode 100644 index 0000000..d859db7 --- /dev/null +++ b/dungeon_map/data/doors_connections.asm @@ -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 diff --git a/dungeon_map/data/supertile_shapes.asm b/dungeon_map/data/supertile_shapes.asm index 0fe27ef..befdfc7 100644 --- a/dungeon_map/data/supertile_shapes.asm +++ b/dungeon_map/data/supertile_shapes.asm @@ -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 diff --git a/dungeon_map/draw_rooms.asm b/dungeon_map/draw_rooms.asm index 66285ac..8d71016 100644 --- a/dungeon_map/draw_rooms.asm +++ b/dungeon_map/draw_rooms.asm @@ -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+ - STA.w OAMBuffer+0, X + CPX.b #$02 + BNE ?+ + ASL A +?+ + CLC : ADC.b $06 + ASL #3 + CLC : ADC.b # + 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 diff --git a/dungeon_map/hooks.asm b/dungeon_map/hooks.asm index a84f4cf..be7cf80 100644 --- a/dungeon_map/hooks.asm +++ b/dungeon_map/hooks.asm @@ -166,3 +166,6 @@ org $8AE21C ;================================================================================ ; Custom Door Rando Maps ;-------------------------------------------------------------------------------- +org $8AE590 + JSL PrepDrawRow + BRA + : NOP #5 : + diff --git a/dungeon_map/mappable_doors.asm b/dungeon_map/mappable_doors.asm index e2a870d..4617fb7 100644 --- a/dungeon_map/mappable_doors.asm +++ b/dungeon_map/mappable_doors.asm @@ -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 diff --git a/menu/map_icons.3bpp b/menu/map_icons.3bpp index fda495848e95aeae007a4957cc8176ccab899d02..5566ef0b61db3b24c6dd25036f86f65993908515 100644 GIT binary patch delta 459 zcmY*VF;2rU6n$-_!r+qCTPtCuYuP$PGy_6C0&J1!As7(#0oZZ{4p6BpLxzfTAkhPa z%|q4n{n!@CdzS2Py>Gwwt+8fTsPa{mI~GFi@MbCaP@6ELN^ z3*9MexMzNI#+J_kwN~FRi>|mq6H33kRxP(uJ2n3OTZ+JuV)qU2QeCUV!((YDMd>Dz z@QNO$t>b&T9FCQ~yG>2Z_Z6Ho;PI2L|J6QaE1#!n#^`13xl3{yeF|;?ozQi=d;*_>%EsTvNyL%KG~&2o2i4LbYv0@qMi=ExYJUI# delta 243 zcmZorX;9gaz%$vAQDSlekH=(3E)x-X26+a1AhctsV_;yA7cfv(N&+g75wT}b077*J z6(D3_uvbt}S5W~Pz@A-WMIty43isp6Cf6HvP^!$ z>oQr8)j+I{p$2HkABG=52m)>{M|e1XfJ_$yS@(p21qlCurBqa&u(13AN$JC^tOq(* e9w;f(fBZp#J%|O9fm;0^=z#zKH~;5jWCj42twPWM diff --git a/menu/map_icons_3.3bppc b/menu/map_icons_3.3bppc index 8b8edccb97809615ce1340d5c5a9e9c1a06e47e2..c6f76a846a823f1eb0807b53dccc21a6e87dd02e 100644 GIT binary patch delta 594 zcmWlV%}*0i6vfYdZS*lc8=Hy2L3RZhl;#Rnvr?GP`Zk`La$5(1QsO4VbG15Tgd>J;Fo-u9|EVC5>dsDFG9Pm7EJ{@Dt3jAAasAyR> zmKun%1DxP%LNT4g4Wl$)ZS{c_3-UL~O;(a=YAFO43Ch1iGl{HF@RIeeP%lk#f_esR z?6F{%@g!BOzX@09Qu~Z(*=R09juSCasF7>QM_~KLzMSSc#E4K8wHm9r4wCEGY#u{S zFdgxBF89mwU;NM1JcQq}eh$Sw$ zNTd$@ZEE046qOFf+Xd=|#6#C{+w@o~BzKH%4id04Uhz@`%}IFy{xhJ;9%YTAjl Lq^0VbE*$j_Kti=W delta 500 zcmWNLL1+_E7=-8l-!_|KDVkFbLPD}lQKX8B5iCjA-8L;k@gg1+DiXGbDzw*{zOB67 zfK=3GkDhb!BH}qE7{RL)1R*^LhAIe!3YH*YpL-dGVTSoy=?~^>o6Fd-|35>H>iiJnFfU1i;W?fjR#OL#~mYSm*z$lnRUBkp^JZ=6sxp@J>18O}cLt`G^ z67(4_G1lI%ieE-}K#M&XJ3X+pYUnuvbsveULsBn*@d|oqmTJSxNdZk4V`qdSj79g; zR65+^>u@Y!=)%A_e8a*T8buD0&U93UX*;{H4fTzQWziET!kIY1O2J zS;ZjT58C8n;P$hvO`=Yx(4}WOJjeBlFG@bxlH_>_kow2TDhOamp|wyivHMY|C#(*H tDe*A3mOaWksS)B}U6`x)qdVd%cPR?QCAu5E7jtR#mu6!1l%gY%{|{x$p|t=2