!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_