Dark rooms don't show up on map with only visitation

This commit is contained in:
2026-01-19 13:36:33 -06:00
parent ccc3e38b97
commit 30319ce476
7 changed files with 161 additions and 97 deletions

View File

@@ -541,7 +541,9 @@ DrawStairs:
LDA.w SpiralProps, Y LDA.w SpiralProps, Y
AND.w #$00FF AND.w #$00FF
STA.b $06 STA.b $06
BEQ .done BNE +
JMP .done
+
STZ.b $02 STZ.b $02
INY INY
@@ -578,11 +580,14 @@ DrawStairs:
STA.b $CA STA.b $CA
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE + BNE +
LDA.b $0E LDA.b $0E
AND.w #$000F AND.w #$000F
BNE + BEQ .ply_skip
BRA .ply_skip LDA.b $0B
AND.w #$00FF
BEQ .ply_skip
+ +
TYX TYX
@@ -619,32 +624,70 @@ GetCurrentRoomVisibility:
GetSpecificRoomVisibility: GetSpecificRoomVisibility:
PHX PHX
LDA.l ShowRooms_default
; figure out if room is dark without lamp
LDA.b $CA
AND.w #$00FF 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 STA.b $0A
.check_visibility
SEP #$20
LDA.l ShowRooms_default
STA.b $0A
REP #$20
LDX.w DungeonID LDX.w DungeonID
LDA.l MapField LDA.l MapField
AND.l DungeonMask, X AND.l DungeonMask, X
BEQ + BEQ +
SEP #$20
LDA.l ShowRooms_have_map LDA.l ShowRooms_have_map
AND.w #$00FF
CMP.b $0A CMP.b $0A
BCC + BCC +
STA.b $0A STA.b $0A
+ +
REP #$20
LDX.w DungeonID LDX.w DungeonID
LDA.l CompassField LDA.l CompassField
AND.l DungeonMask, X AND.l DungeonMask, X
BEQ + BEQ +
SEP #$20
LDA.l ShowRooms_have_compass LDA.l ShowRooms_have_compass
AND.w #$00FF
CMP.b $0A CMP.b $0A
BCC + BCC +
STA.b $0A STA.b $0A
+ +
REP #$20
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$00FF
ASL A ASL A
@@ -653,13 +696,20 @@ GetSpecificRoomVisibility:
AND.w #$000F AND.w #$000F
STA.b $0E STA.b $0E
BEQ + BEQ +
SEP #$20
LDA.l ShowRooms_visited_tile LDA.l ShowRooms_visited_tile
AND.w #$00FF
CMP.b $0A CMP.b $0A
BCC + BCC +
CMP.b $0B
BCS .too_dark
STA.b $0A
BRA +
.too_dark
LDA.b $0B
STA.b $0A STA.b $0A
+ +
REP #$20
PLX PLX
LDA.b $0A LDA.b $0A
RTS RTS
@@ -705,6 +755,7 @@ DrawDropOrWarp:
STA.b $CA STA.b $CA
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE + BNE +
LDA.b $0E LDA.b $0E
AND.w #$000F AND.w #$000F
@@ -1491,8 +1542,9 @@ DoorsMapNextEntrance:
STA.b $CA STA.b $CA
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE .acceptable BNE .acceptable
BEQ .done JMP .done
+ +
TYX TYX
@@ -1509,6 +1561,7 @@ DoorsMapNextEntrance:
STA.b $CA STA.b $CA
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE .acceptable BNE .acceptable
LDA.w #$0001 LDA.w #$0001
@@ -1538,6 +1591,9 @@ DoorsMapNextEntrance:
LDA.b $00 LDA.b $00
AND.b $0E AND.b $0E
BEQ .check_next BEQ .check_next
LDA.b $0B
AND.w #$00FF
BEQ .check_next
.acceptable .acceptable
PHX PHX
@@ -1597,6 +1653,7 @@ FindFirstEntrance:
STA.b $CA STA.b $CA
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE .acceptable BNE .acceptable
LDA.w #$0001 LDA.w #$0001
@@ -1626,6 +1683,9 @@ FindFirstEntrance:
LDA.b $00 LDA.b $00
AND.b $0E AND.b $0E
BEQ .check_next BEQ .check_next
LDA.b $0B
AND.w #$00FF
BEQ .check_next
.acceptable .acceptable
PLP PLP
@@ -1867,6 +1927,7 @@ DrawDoorsEntrances:
BMI .check_dropdown BMI .check_dropdown
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE .draw_entrance BNE .draw_entrance
PHX PHX
@@ -1876,6 +1937,9 @@ DrawDoorsEntrances:
PLX PLX
AND.b $0E AND.b $0E
BEQ .check_dropdown BEQ .check_dropdown
LDA.b $0B
AND.w #$00FF
BEQ .check_dropdown
.draw_entrance .draw_entrance
SEP #$30 SEP #$30
@@ -1906,6 +1970,7 @@ DrawDoorsEntrances:
BMI .next_room BMI .next_room
JSR GetSpecificRoomVisibility JSR GetSpecificRoomVisibility
AND.w #$00FF
BNE .draw_dropdown BNE .draw_dropdown
PHX PHX
@@ -1914,7 +1979,13 @@ DrawDoorsEntrances:
LDA.l DropdownQuadrantMasks, X LDA.l DropdownQuadrantMasks, X
PLX PLX
AND.b $0E 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 .draw_dropdown
SEP #$30 SEP #$30
@@ -1964,7 +2035,6 @@ DrawDoorsStairs:
INX : INX INX : INX
LDA.l SpiralProps, X LDA.l SpiralProps, X
PHX PHX
ASL A ASL A
TAX TAX
@@ -1996,6 +2066,10 @@ DrawDoorsStairs:
AND.b $0E AND.b $0E
BEQ .skip BEQ .skip
LDA.b $0B
CMP.b #$04
BCC .skip
.draw .draw
LDY.b $00 LDY.b $00
LDA.b #$00 LDA.b #$00

View File

@@ -7,6 +7,44 @@ DrawNonexistentRoom:
STA.l $7F0042, X STA.l $7F0042, X
JML $8AE7F2 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: NormalDrawDungeonMapRoom:
JSL DrawDungeonMapRoom JSL DrawDungeonMapRoom
JML $8AE7F2 JML $8AE7F2
@@ -19,54 +57,7 @@ DrawDungeonMapRoom:
PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank PHB : PHK : PLB ; need to keep this in same bank as data, or else specify bank
LDA.b $0A : PHA LDA.b $0A : PHA
LDA.l ShowRooms_default JSR GetSpecificRoomVisibility
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
LDA.b $CA LDA.b $CA
AND.w #$00FF AND.w #$00FF
@@ -74,49 +65,44 @@ DrawDungeonMapRoom:
TAY TAY
macro DrawQuadrant(quadrant, writeOffset) macro DrawQuadrant(quadrant, writeOffset)
?DrawQuadrant: .draw_quadrant_<quadrant>:
LDA.w SupertileRoomShapes+(2*<quadrant>), Y LDA.w #(3-<quadrant>)<<14
CMP.w #$FFFF : BEQ ?.empty STA.b $0C
PHA
LDA.b $0E
AND.w #1<<(3-<quadrant>)
BNE ?.visited
?.unvisited LDA.b $0E
LDA.b $0A BIT.w #1<<(3-<quadrant>)
CMP.w #$0003 BNE ..visited
BCS ?.shape
?.square LDA.b $0A
PLA BRA ..continue
LDA.b $0C
EOR.w #(3-<quadrant>)<<14
BRA ?.write
?.shape ..visited
PLA LDA.b $0B
ORA.b $0C
BRA ?.write
?.visited ..continue
PLA AND.w #$00FF
ORA.w #$0800 JSR GetVisibilityProps
BRA ?.write
?.empty LDA.w SupertileRoomShapes+(2*<quadrant>), Y
LDA.b $0A CMP.w #$FFFF : BNE ..get_quadrant
CMP.w #$0001 LDA.b $0A
BEQ ?.full_square AND.w #$00FF
LDA.w #$0F00 CMP.w #$0001
BRA ?.write BNE ..empty
?.full_square ..full_square
LDA.w #$174F LDA.b $0C
EOR.w #(3-<quadrant>)<<14 BRA ..write
?.write ..get_quadrant
STA.l $7F0000+<writeOffset>, X JSR GetQuadrantTile
?.done BRA ..write
..empty
LDA.w #$0F00
..write
STA.l $7F0000+<writeOffset>, X
endmacro endmacro
%DrawQuadrant(0, $00) %DrawQuadrant(0, $00)

View File

@@ -171,7 +171,9 @@ ShowRooms:
.visited_tile .visited_tile
db $04 db $04
.reserved .reserved
skip 4 skip 3
.dark_room_cap
db $01
warnpc $B9FF08 warnpc $B9FF08
org $B9FF08 org $B9FF08

View File

@@ -14,7 +14,8 @@ GKMajorVersion:
db $01 db $01
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GKMinorVersion: GKMinorVersion:
db $00 ; $01 = Dark rooms don't show on map from visition
db $01
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
GKBuild: GKBuild:
db $00 db $00

View File

@@ -43,7 +43,6 @@ RTL
;================================================================================ ;================================================================================
SetOverlayIfLamp: SetOverlayIfLamp:
JSL LampCheck JSL LampCheck
CMP.b #$00
BEQ + BEQ +
LDA.b #$01 LDA.b #$01
+ +

View File

@@ -1584,6 +1584,7 @@ dw $0000
; STAIRS3 ; STAIRS3
; STAIRS4 ; STAIRS4
;-------------------------------------------------------------------------------- ;--------------------------------------------------------------------------------
org $B0DA00
RoomHeaders: RoomHeaders:
org $B0DA00 : RoomHeader_0000: ; pc 0x185A00 org $B0DA00 : RoomHeader_0000: ; pc 0x185A00
db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04 db $41, $21, $13, $22, $07, $3D, $00, $00, $00, $10, $C0, $00, $00, $04

View File

@@ -288,6 +288,7 @@ EntranceData_layer = $82D2F9
EntranceData_song = $82D592 EntranceData_song = $82D592
SpawnPointData_room_id = $82D8D2 SpawnPointData_room_id = $82D8D2
Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879 Overworld_CheckForSpecialOverworldTrigger_Direction = $84E879
RoomHeaderPointers = $84F1E2
Sprite_ShowSolicitedMessage_Direction = $85E1A3 Sprite_ShowSolicitedMessage_Direction = $85E1A3
FluteMenuNumbers_bits = $8AB7A3 FluteMenuNumbers_bits = $8AB7A3
WorldMap_RedXChars = $8ABF70 WorldMap_RedXChars = $8ABF70