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 fda4958..5566ef0 100644 Binary files a/menu/map_icons.3bpp and b/menu/map_icons.3bpp differ diff --git a/menu/map_icons_3.3bppc b/menu/map_icons_3.3bppc index 8b8edcc..c6f76a8 100644 Binary files a/menu/map_icons_3.3bppc and b/menu/map_icons_3.3bppc differ