From 278e4286581263ace61d96d9bd09d2488e8906d1 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Fri, 9 Jan 2026 13:45:00 -0600 Subject: [PATCH] First steps --- dungeon_map/blink_loot.asm | 11 + dungeon_map/current_room_map.asm | 397 +++++++++++++++++++++++++ dungeon_map/data/doors_connections.asm | 22 ++ dungeon_map/data/doors_display.asm | 127 ++++++++ dungeon_map/data/supertile_shapes.asm | 4 +- dungeon_map/draw_rooms.asm | 8 +- dungeon_map/dungeon_switch.asm | 18 +- dungeon_map/hooks.asm | 58 +++- dungeon_map/main.asm | 2 + dungeon_map/map_bg3.asm | 146 ++++++++- dungeon_map/settings.asm | 7 +- menu/door_connectors.3bpp | Bin 1536 -> 1536 bytes menu/door_connectors.3bppc | Bin 792 -> 826 bytes menu/map_icons.3bpp | Bin 4608 -> 4608 bytes menu/map_icons_1.3bppc | Bin 650 -> 662 bytes menu/map_icons_4.3bppc | Bin 1050 -> 1042 bytes menu/map_icons_b.3bpp | Bin 4608 -> 4608 bytes ram.asm | 3 + 18 files changed, 780 insertions(+), 23 deletions(-) create mode 100644 dungeon_map/current_room_map.asm create mode 100644 dungeon_map/data/doors_display.asm diff --git a/dungeon_map/blink_loot.asm b/dungeon_map/blink_loot.asm index db8f671..8df3f0f 100644 --- a/dungeon_map/blink_loot.asm +++ b/dungeon_map/blink_loot.asm @@ -20,6 +20,17 @@ BlinkLoot: StartDoubleWrite: ; what we wrote over + LDA.l DRMode + BEQ .draw + LDA.l DungeonMapMode + BNE .draw + + INC.w $020D ; next subsubmode + PLA : PLA : PLA ; pull our jump to here off the stack + PLB + RTL + +.draw REP #$30 STZ.w GFXStripes diff --git a/dungeon_map/current_room_map.asm b/dungeon_map/current_room_map.asm new file mode 100644 index 0000000..de4755f --- /dev/null +++ b/dungeon_map/current_room_map.asm @@ -0,0 +1,397 @@ +!CenterTile = $036A +!ConnectorPalette = $0800 + +DrawWackyDoorRandoStuff: + JSL DrawBorder + + LDA.b RoomIndex + AND.w #$00FF + STA.l CurrentDisplayedRoom + STA.b $CA + LDX.w #!CenterTile + JSL DrawFullRoomTile + + ; multiply room id by 24 to get index in doors table + LDA.l CurrentDisplayedRoom + TAX + LDA.l DoorOffset, X + AND.w #$00FF + STA.l DisplayedRoomDoorIndex + ASL A + CLC : ADC.l DisplayedRoomDoorIndex + ASL A : ASL A : ASL A + STA.l DisplayedRoomDoorIndex + + JSL DrawConnectedRooms + RTL + +DrawFullRoomTile: + LDA.b $CA + PHX + ASL A + TAX + LDA.l SaveDataWRAM, X + STA.b $0E + PLX + PHY + JSL DrawDungeonMapRoom + PLY + RTL + +DrawConnectedRooms: + PHB : PHK : PLB + LDA.l DisplayedRoomDoorIndex + TAX + STZ.b $00 + +.next_side + JSR DrawSide + INC.b $00 + LDA.b $00 + CMP.w #$0004 + BCC .next_side + + PLB + RTL + +print "DrawSide: ", pc +; $00 - Side +; $02 - Door position number on side +; $04 - Target door position +; $06 - Number of doors on side +; $08 - Room Drawn Address +; $0A - Door Index on side +DrawSide: + STZ.b $06 + LDY.w #$0002 + +- + LDA.l DoorTable, X + AND.w #$00FF + CMP.w #$0003 + BEQ + + INC.b $06 ++ INX : INX + DEY + BPL - + + LDY.b $06 + LDA.w DoorsCurrentRoomOffsets_offsets, Y + AND.w #$00FF + STA.b $02 + + LDY.b $00 + LDA.w DoorsCurrentRoomOffsets_index, Y + AND.w #$00FF + CLC : ADC.b $02 + TAY + + DEX #6 + STZ.b $02 + STZ.b $0A + +- + LDA.l DoorTable, X + AND.w #$00FF + CMP.w #$0003 + BEQ + + JSR DrawSingleConnectedRoom ++ + INX : INX + INC.b $02 + LDA.b $02 + CMP.w #$0003 + BCC - + + LDA.b $06 + CMP.w #$0002 + BEQ .two + BCS .three + +.other + RTS + +.two + PHX + JSR DrawDoubleConnector + PLX + RTS + +.three + PHX + JSR DrawTripleConnector + PLX + RTS + +DrawSingleConnectedRoom: + STA.b $CA + PHX + LDA.w DoorsCurrentRoomOffsets, 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 + STA.b $04 + BRA .draw + +.single + LDA.b $02 + ASL A + CLC : ADC.b $02 + STA.b $04 + + JSR GetWhichDoorPosition + CLC : ADC.b $04 + STA.b $04 + ASL A + CLC : ADC.b $04 + ASL A : ASL A + TAY + +.draw + LDA.b $00 + BNE + : JSR DrawNorthConnectors : BRA ++ : + + DEC A : BNE + : JSR DrawWestConnectors : BRA ++ : + + DEC A : BNE + : JSR DrawSouthConnectors : BRA ++ : + + DEC A : BNE + : JSR DrawEastConnectors : BRA ++ : + +++ + + PLY +.done + INC.b $0A + RTS + +GetWhichDoorPosition: + LDA.l DoorTable, X + BMI .edge + AND.w #$0300 + XBA + RTS + +.edge + AND.w #$0F00 + XBA + PHX + PHA + + LDA.b $00 + BIT.w #$0001 + BEQ .north_south + +.east_west + PLX + LDA.l EdgePositions_east_west, X + AND.w #$00FF + PLX + RTS + +.north_south + PLX + LDA.l EdgePositions_north_south, X + AND.w #$00FF + PLX + RTS + +macro Draw3x2Connector(offset, label) + LDA.w SingleEdgeCurrentRoomConnectors_