From 30319ce476221ddaabb307305f81e99e175d77a6 Mon Sep 17 00:00:00 2001 From: Kara Alexandra Date: Mon, 19 Jan 2026 13:36:33 -0600 Subject: [PATCH] Dark rooms don't show up on map with only visitation --- gk/doors_dungeon_map.asm | 94 +++++++++++++++++++++--- gk/draw_rooms.asm | 154 ++++++++++++++++++--------------------- gk/settings.asm | 4 +- gk_meta.asm | 3 +- lampmantlecone.asm | 1 - tables.asm | 1 + vanillalabels.asm | 1 + 7 files changed, 161 insertions(+), 97 deletions(-) diff --git a/gk/doors_dungeon_map.asm b/gk/doors_dungeon_map.asm index 862642c..1f66fde 100644 --- a/gk/doors_dungeon_map.asm +++ b/gk/doors_dungeon_map.asm @@ -541,7 +541,9 @@ DrawStairs: LDA.w SpiralProps, Y AND.w #$00FF STA.b $06 - BEQ .done + BNE + + JMP .done ++ STZ.b $02 INY @@ -578,11 +580,14 @@ DrawStairs: STA.b $CA JSR GetSpecificRoomVisibility + AND.w #$00FF BNE + LDA.b $0E AND.w #$000F - BNE + - BRA .ply_skip + BEQ .ply_skip + LDA.b $0B + AND.w #$00FF + BEQ .ply_skip + TYX @@ -619,32 +624,70 @@ GetCurrentRoomVisibility: GetSpecificRoomVisibility: PHX - LDA.l ShowRooms_default + + ; figure out if room is dark without lamp + LDA.b $CA AND.w #$00FF + ASL A + TAX + LDA.l RoomHeaderPointers, X + TAX + LDA.l bank(RoomHeaders)<<16, X + AND.w #$0001 + BEQ .not_dark + + SEP #$20 + JSL LampCheck + REP #$20 + BNE .not_dark + + LDA.l LampCone + BIT.w #$0020 ; all rooms are lit + BNE .not_dark + + LDA.l ShowRooms_dark_room_cap + AND.w #$00FF + CMP.w #$0006 + BCS .not_dark + + XBA + STA.b $0A + BRA .check_visibility + +.not_dark + LDA.w #$0600 STA.b $0A +.check_visibility + SEP #$20 + LDA.l ShowRooms_default + STA.b $0A + + REP #$20 LDX.w DungeonID LDA.l MapField AND.l DungeonMask, X BEQ + + SEP #$20 LDA.l ShowRooms_have_map - AND.w #$00FF CMP.b $0A BCC + STA.b $0A + + REP #$20 LDX.w DungeonID LDA.l CompassField AND.l DungeonMask, X BEQ + + SEP #$20 LDA.l ShowRooms_have_compass - AND.w #$00FF CMP.b $0A BCC + STA.b $0A + + REP #$20 LDA.b $CA AND.w #$00FF ASL A @@ -653,13 +696,20 @@ GetSpecificRoomVisibility: AND.w #$000F STA.b $0E BEQ + + SEP #$20 LDA.l ShowRooms_visited_tile - AND.w #$00FF CMP.b $0A BCC + + CMP.b $0B + BCS .too_dark + STA.b $0A + BRA + +.too_dark + LDA.b $0B STA.b $0A + + REP #$20 PLX LDA.b $0A RTS @@ -705,6 +755,7 @@ DrawDropOrWarp: STA.b $CA JSR GetSpecificRoomVisibility + AND.w #$00FF BNE + LDA.b $0E AND.w #$000F @@ -1491,8 +1542,9 @@ DoorsMapNextEntrance: STA.b $CA JSR GetSpecificRoomVisibility + AND.w #$00FF BNE .acceptable - BEQ .done + JMP .done + TYX @@ -1509,6 +1561,7 @@ DoorsMapNextEntrance: STA.b $CA JSR GetSpecificRoomVisibility + AND.w #$00FF BNE .acceptable LDA.w #$0001 @@ -1538,6 +1591,9 @@ DoorsMapNextEntrance: LDA.b $00 AND.b $0E BEQ .check_next + LDA.b $0B + AND.w #$00FF + BEQ .check_next .acceptable PHX @@ -1597,6 +1653,7 @@ FindFirstEntrance: STA.b $CA JSR GetSpecificRoomVisibility + AND.w #$00FF BNE .acceptable LDA.w #$0001 @@ -1626,6 +1683,9 @@ FindFirstEntrance: LDA.b $00 AND.b $0E BEQ .check_next + LDA.b $0B + AND.w #$00FF + BEQ .check_next .acceptable PLP @@ -1867,6 +1927,7 @@ DrawDoorsEntrances: BMI .check_dropdown JSR GetSpecificRoomVisibility + AND.w #$00FF BNE .draw_entrance PHX @@ -1876,6 +1937,9 @@ DrawDoorsEntrances: PLX AND.b $0E BEQ .check_dropdown + LDA.b $0B + AND.w #$00FF + BEQ .check_dropdown .draw_entrance SEP #$30 @@ -1906,6 +1970,7 @@ DrawDoorsEntrances: BMI .next_room JSR GetSpecificRoomVisibility + AND.w #$00FF BNE .draw_dropdown PHX @@ -1914,7 +1979,13 @@ DrawDoorsEntrances: LDA.l DropdownQuadrantMasks, X PLX AND.b $0E - BEQ .next_room + BEQ .goto_next_room + LDA.b $0B + AND.w #$00FF + BNE .draw_dropdown + +.goto_next_room + JMP .next_room .draw_dropdown SEP #$30 @@ -1964,7 +2035,6 @@ DrawDoorsStairs: INX : INX LDA.l SpiralProps, X - PHX ASL A TAX @@ -1996,6 +2066,10 @@ DrawDoorsStairs: AND.b $0E BEQ .skip + LDA.b $0B + CMP.b #$04 + BCC .skip + .draw LDY.b $00 LDA.b #$00 diff --git a/gk/draw_rooms.asm b/gk/draw_rooms.asm index 297a99b..bc7a4f5 100644 --- a/gk/draw_rooms.asm +++ b/gk/draw_rooms.asm @@ -7,6 +7,44 @@ DrawNonexistentRoom: STA.l $7F0042, X JML $8AE7F2 +GetVisibilityProps: + PHX + ASL A : ASL A + TAX + LDA.b $0C + AND.l .visibility_props, X + ORA.l .visibility_props+2, X + STA.b $0C + PLX + RTS + +.visibility_props: + dw $0000, $0F00 + dw $C000, $174F + dw $C000, $174F + dw $0000, $1400 + dw $0000, $1000 + dw $0000, $0C00 + dw $0000, $0800 + +; A = room shape +; $0C = visibility props +GetQuadrantTile: + PHA + + LDA.b $0C + AND.w #$03FF + BNE .square + + PLA + ORA.b $0C + RTS + +.square + PLA + LDA.b $0C + RTS + NormalDrawDungeonMapRoom: JSL DrawDungeonMapRoom JML $8AE7F2 @@ -19,54 +57,7 @@ DrawDungeonMapRoom: PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank LDA.b $0A : PHA - LDA.l ShowRooms_default - AND.w #$00FF - STA.b $0A - - PHX - - LDX.w DungeonID - LDA.l MapField - AND.l DungeonMask, X - BEQ + - LDA.l ShowRooms_have_map - AND.w #$00FF - CMP.b $0A - BCC + - STA.b $0A -+ - - LDX.w DungeonID - LDA.l CompassField - AND.l DungeonMask, X - BEQ + - LDA.l ShowRooms_have_compass - AND.w #$00FF - CMP.b $0A - BCC + - STA.b $0A -+ - - LDA.b $0E - AND.w #$000F - BEQ + - LDA.l ShowRooms_visited_tile - AND.w #$00FF - CMP.b $0A - BCC + - STA.b $0A -+ - - PLX - - LDA.b $0A : BNE + : LDA.w #$0F00 : BRA ++ -+ DEC A : BNE + : LDA.w #$174F : BRA ++ -+ DEC A : BNE + : LDA.w #$174F : BRA ++ -+ DEC A : BNE + : LDA.w #$1400 : BRA ++ -+ DEC A : BNE + : LDA.w #$1000 : BRA ++ -+ DEC A : BNE + : LDA.w #$0C00 : BRA ++ -+ LDA.w #$0800 -++ STA.b $0C + JSR GetSpecificRoomVisibility LDA.b $CA AND.w #$00FF @@ -74,49 +65,44 @@ DrawDungeonMapRoom: TAY macro DrawQuadrant(quadrant, writeOffset) - ?DrawQuadrant: - LDA.w SupertileRoomShapes+(2*), Y - CMP.w #$FFFF : BEQ ?.empty - PHA - LDA.b $0E - AND.w #1<<(3-) - BNE ?.visited + .draw_quadrant_: + LDA.w #(3-)<<14 + STA.b $0C - ?.unvisited - LDA.b $0A - CMP.w #$0003 - BCS ?.shape + LDA.b $0E + BIT.w #1<<(3-) + BNE ..visited - ?.square - PLA - LDA.b $0C - EOR.w #(3-)<<14 - BRA ?.write + LDA.b $0A + BRA ..continue - ?.shape - PLA - ORA.b $0C - BRA ?.write + ..visited + LDA.b $0B - ?.visited - PLA - ORA.w #$0800 - BRA ?.write + ..continue + AND.w #$00FF + JSR GetVisibilityProps - ?.empty - LDA.b $0A - CMP.w #$0001 - BEQ ?.full_square - LDA.w #$0F00 - BRA ?.write + LDA.w SupertileRoomShapes+(2*), Y + CMP.w #$FFFF : BNE ..get_quadrant + LDA.b $0A + AND.w #$00FF + CMP.w #$0001 + BNE ..empty - ?.full_square - LDA.w #$174F - EOR.w #(3-)<<14 + ..full_square + LDA.b $0C + BRA ..write - ?.write - STA.l $7F0000+, X - ?.done + ..get_quadrant + JSR GetQuadrantTile + BRA ..write + + ..empty + LDA.w #$0F00 + + ..write + STA.l $7F0000+, X endmacro %DrawQuadrant(0, $00) diff --git a/gk/settings.asm b/gk/settings.asm index 0aacd74..c2eb610 100644 --- a/gk/settings.asm +++ b/gk/settings.asm @@ -171,7 +171,9 @@ ShowRooms: .visited_tile db $04 .reserved - skip 4 + skip 3 +.dark_room_cap + db $01 warnpc $B9FF08 org $B9FF08 diff --git a/gk_meta.asm b/gk_meta.asm index b9a8197..99e2cab 100644 --- a/gk_meta.asm +++ b/gk_meta.asm @@ -14,7 +14,8 @@ GKMajorVersion: db $01 ;-------------------------------------------------------------------------------- GKMinorVersion: -db $00 +; $01 = Dark rooms don't show on map from visition +db $01 ;-------------------------------------------------------------------------------- GKBuild: db $00 diff --git a/lampmantlecone.asm b/lampmantlecone.asm index 0845526..1c3e790 100644 --- a/lampmantlecone.asm +++ b/lampmantlecone.asm @@ -43,7 +43,6 @@ RTL ;================================================================================ SetOverlayIfLamp: JSL LampCheck - CMP.b #$00 BEQ + LDA.b #$01 + diff --git a/tables.asm b/tables.asm index ec695e5..7e2bd37 100644 --- a/tables.asm +++ b/tables.asm @@ -1584,6 +1584,7 @@ dw $0000 ; STAIRS3 ; STAIRS4 ;-------------------------------------------------------------------------------- +org $B0DA00 RoomHeaders: org $B0DA00 : RoomHeader_0000: ; pc 0x185A00 db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04 diff --git a/vanillalabels.asm b/vanillalabels.asm index b42a0b8..e91955e 100644 --- a/vanillalabels.asm +++ b/vanillalabels.asm @@ -288,6 +288,7 @@ EntranceData_layer = $82D2F9 EntranceData_song = $82D592 SpawnPointData_room_id = $82D8D2 Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879 +RoomHeaderPointers = $84F1E2 Sprite_ShowSolicitedMessage_Direction = $85E1A3 FluteMenuNumbers_bits = $8AB7A3 WorldMap_RedXChars = $8ABF70