!CenterTile = $036A !ConnectorPalette = $1000 DrawWackyDoorRandoStuff: JSL DrawBorder LDA.b RoomIndex AND.w #$00FF STA.l CurrentDisplayedRoom STA.b $CA LDX.w #!CenterTile JSL DrawFullRoomTile JSL ClearDoorSlotsTable ; 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 ClearDoorSlotsTable: LDX.w #$0026 LDA.w #$FF0F - STA.l DoorSlots, X DEX : DEX BPL - RTL ClearDoorSlotScratch: PHX LDX.w #$0006 LDA.w #$FF0F - STA.l DoorSlotScratch, X DEX : DEX BPL - PLX 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 CheckEdgesTable: LDA.b $00 ASL A CLC : ADC.b $00 ADC.b $02 XBA ORA.l CurrentDisplayedRoom STA.b $0C PHX LDX.w #$0000 - LDA.w EdgeConnectionIndices, X BMI .done CMP.b $0C BEQ .match INX #4 BRA - .match INX #2 LDA.w EdgeConnectionIndices, X TAX LDA.l NorthOpenEdge, X .done PLX RTS GetConnection: LDA.l DoorTable, X .found STA.b $08 AND.w #$00FF CMP.w #$0003 BEQ .not_found STA.b $0C LDA.b $08 JSR GetWhichDoorPosition XBA ORA.b $0C RTS .not_found JSR CheckEdgesTable CMP.w #$0000 BPL .found LDA.w #$FF0F RTS print "DrawSide: ", pc ; $00 - Side ; $02 - Door position number on side ; $03 - Door index number on side ; $04 - Target door position ; $06 - Number of doors on side ; $08 - Room Drawn Address DrawSide: JSL ClearDoorSlotScratch STZ.b $06 STZ.b $02 LDY.w #$0002 - JSR GetConnection BMI + INC.b $06 PHX PHA LDA.b $02 ASL A TAX PLA STA.l DoorSlotScratch, X PLX + INX : INX INC.b $02 DEY BPL - PHX LDY.b $06 LDA.w DoorSlotOffsets, Y AND.w #$00FF STA.b $02 LDY.b $00 LDA.w DoorSlotSides, Y AND.w #$00FF CLC : ADC.b $02 TAY STZ.b $02 - LDA.b $02 AND.w #$00FF ASL A TAX LDA.l DoorSlotScratch, X BPL .present .missing LDA.b $06 CMP.w #$0002 BNE + JSR DrawDoubleConnectorRoot BRA + .present TYX STA.l DoorSlots, X JSR DrawSingleConnectedRoom INC.b $03 INY : INY + INC.b $02 LDA.b $02 AND.w #$00FF CMP.w #$0003 BCC - LDA.b $06 CMP.w #$0002 BEQ .two BCS .three BRA .done .two JSR DrawDoubleConnector BRA .done .three JSR DrawTripleConnectorRoot JSR DrawTripleConnector .done PLX RTS DrawSingleConnectedRoom: STA.b $0A AND.w #$00FF STA.b $CA LDA.w DoorSlotsBG2, Y CLC : ADC.w #!CenterTile STA.b $08 TAX JSL DrawFullRoomTile PHY LDA.b $06 BEQ ++ CMP.w #$0001 BEQ .single TYX LDA.l DoorSlots+1, X AND.w #$00FF STA.b $04 BRA .draw .single LDA.b $02 ASL A CLC : ADC.b $02 STA.b $04 TYX LDA.l DoorSlots+1, X AND.w #$00FF 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 RTS GetWhichDoorPosition: BMI .edge AND.w #$0300 XBA CMP.w #$0003 BNE + LDA.w #$0002 + 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_