diff --git a/dungeon_map/current_room_map.asm b/dungeon_map/current_room_map.asm index 2f3cd95..bc437b8 100644 --- a/dungeon_map/current_room_map.asm +++ b/dungeon_map/current_room_map.asm @@ -8,6 +8,11 @@ DrawWackyDoorRandoStuff: STZ.w GFXStripes + LDA.l CachedDungeonID + AND.w #$00FF + CMP.w DungeonID + BNE .different_dungeon + LDA.w EntranceIndex STA.l CurrentDoorEntrance @@ -17,6 +22,24 @@ DrawWackyDoorRandoStuff: ASL A : ASL A : ASL A : ASL A ORA.b RoomIndex STA.l CurrentDisplayedRoom + BRA DrawCurrentSupertile + +.different_dungeon + JSL FindFirstEntrance + TYA + STA.l CurrentDoorEntrance + + ASL A + TAX + LDA.l EntranceData_room_id, X + STA.l CurrentDisplayedRoom + + JSL DetectEntranceSection + INC A + XBA + ASL A : ASL A : ASL A : ASL A + ORA.l CurrentDisplayedRoom + STA.l CurrentDisplayedRoom DrawCurrentSupertile: LDA.w #$0000 @@ -1484,6 +1507,101 @@ DoorsMapNextEntrance: PLP RTL +FindFirstEntrance: + PHP + REP #$30 + LDY.w #$0000 + +.check_next + INY + CPY.w #$0085 + BCC + + LDY.w #$FFFF + PLP + RTL ++ + + TYX + LDA.l $82D1EF, X + AND.w #$00FF + CMP.w DungeonID + + BNE .check_next + + TYA + ASL A + TAX + LDA.l EntranceData_room_id, X + STA.b $CA + + JSR GetSpecificRoomVisibility + BNE .acceptable + + LDA.w #$0001 + STA.b $00 + + LDA.l EntranceData_x_coordinate, X + LSR A + AND.w #$00FF + CMP.w #$0080 + BCS + + LDA.b $00 + ASL A + STA.b $00 ++ + + LDA.l EntranceData_y_coordinate, X + LSR A + AND.w #$00FF + CMP.w #$0080 + BCS + + LDA.b $00 + ASL A + ASL A + STA.b $00 ++ + + LDA.b $00 + AND.b $0E + BEQ .check_next + +.acceptable + PLP + RTL + +DoorsMapChangeDungeon: + PHP + SEP #$30 + LDA.w DungeonID + STA.b $00 + +.next + LDA.w DungeonID + ASL A + TAX + + LDA.b $F6 + BIT.b #$20 + BNE + + INX ++ LDA.l DungeonMapData.prev, X + CMP.b $00 + BEQ .done + + STA.w DungeonID + JSL FindFirstEntrance + CPY.b #$FF + BEQ .next + + LDA.b #$04 + STA.w SubModuleInterface + REP #$20 + LDA.w #$0000 + +.done + PLP + RTL + ClearDoorsMapBG1: LDA.w #$000B STA.b $00 diff --git a/dungeon_map/dungeon_switch.asm b/dungeon_map/dungeon_switch.asm index da7b721..6996abf 100644 --- a/dungeon_map/dungeon_switch.asm +++ b/dungeon_map/dungeon_switch.asm @@ -7,8 +7,12 @@ CheckSwitchMap: ; fancy door map SEP #$20 LDA.b $F6 + BIT.b #$30 + BNE .change_dungeon + BIT.b #$80 BNE .select_new_room + LDA.b $F4 BIT.b #$80 BNE .select_new_room @@ -34,6 +38,11 @@ CheckSwitchMap: .next_entrance JSL DoorsMapNextEntrance + BRA .doors_done + +.change_dungeon + JSL DoorsMapChangeDungeon + BRA .doors_done .doors_done REP #$20