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_