Rework map/hud loot icons to be more independent

This commit is contained in:
2026-06-03 20:50:55 -05:00
parent 6b3a05b9de
commit 04196daf5f
8 changed files with 138 additions and 62 deletions

View File

@@ -33,7 +33,7 @@ DRHUD_DrawIndicators:
DRHUD_BossIndicator:
LDA.w DungeonID : CMP.b #$FF : BNE .in_dungeon
LDA.w NpcItemIndicator : BEQ .early_exit
LDA.l ShowLootInHUD : BEQ .early_exit
LDA.l HudItems_enabled : BEQ .early_exit
REP #$10
LDY.w #!NPCIcon : STY.w HUDMultiIndicator
JMP DRHUD_Finished

View File

@@ -1,18 +1,15 @@
; A = room_id
; out A = level of loot
CheckLoot:
CheckMapLoot:
PHP
REP #$30
PHB : PHX : PHY
PHX
STA.b $CA
LDA.b $06 : PHA
LDA.b $0E : PHA
STZ.b $02 ; best item class found
LDA.l ShowItems_default
LDA.l MapItems_default
AND.w #$00FF
STA.b $0E
@@ -24,7 +21,7 @@ CheckLoot:
LDA.l SaveDataWRAM, X
AND.w #$000F
BEQ +
LDA.l ShowItems_visited_tile
LDA.l MapItems_visited_tile
AND.w #$00FF
CMP.b $0E
BCC +
@@ -40,7 +37,7 @@ CheckLoot:
LDA.l MapField
AND.l DungeonMask, X
BEQ +
LDA.l ShowItems_have_map
LDA.l MapItems_have_map
AND.w #$00FF
CMP.b $0E
BCC +
@@ -49,7 +46,7 @@ CheckLoot:
+ LDA.l CompassField
AND.l DungeonMask, X
BEQ +
LDA.l ShowItems_have_compass
LDA.l MapItems_have_compass
AND.w #$00FF
CMP.b $0E
BCC +
@@ -57,6 +54,84 @@ CheckLoot:
+
.skip_dungeon_checks
JMP GetLootLevelAndCleanUp
; A = room_id
; out A = level of loot
CheckHudLoot:
PHP
REP #$30
PHX
STA.b $CA
LDA.b $0E : PHA
+ LDA.w DungeonID
AND.w #$00FF
CMP.w #$00FF
BEQ .cave
TAX
LDA.l HudItems_default_dungeon
AND.w #$00FF
STA.b $0E
LDA.l MapField
AND.l DungeonMask, X
BEQ +
LDA.l HudItems_have_map
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+ LDA.l CompassField
AND.l DungeonMask, X
BEQ +
LDA.l HudItems_have_compass
AND.w #$00FF
CMP.b $0E
BCC +
STA.b $0E
+
BRA GetLootLevelAndCleanUp
.cave
LDA.l HudItems_cave
AND.w #$00FF
STA.b $0E
; intentional fall-through
GetLootLevelAndCleanUp:
STZ.b $02
LDA.b $0E
AND.w #$00FF
BEQ +
JSL GetLootLevel
+
PLA : STA.b $0E
PLX
PLP
LDA.b $02
RTL
; $CA = room_id
; $0E = level of details to return
; (1 - presence, 2 - compass or presence, 3 - value)
; out $02 = level of loot
GetLootLevel:
PHP
REP #$30
PHB : PHX : PHY
LDA.b $06 : PHA
STZ.b $02 ; best item class found
LDA.l ItemSources : BIT.w #$0001 : BEQ +
JSR CheckChests
@@ -82,11 +157,9 @@ CheckLoot:
JSR CheckNpcs
.done
PLA : STA.b $0E
PLA : STA.b $06
PLY : PLX : PLB
PLP
LDA.b $02
RTL
CheckChests:
@@ -543,15 +616,19 @@ GetLootClass:
CMP.w #$0080 : BNE .not_compass
.compass
LDA.l AlwaysShowCompass
LDA.b $0E
AND.w #$00FF
BNE .check_value
CMP.w #$0002
BEQ .check_value
.not_compass
LDA.b $0E
BEQ .done
CMP.w #$0001
BEQ .value_set
CMP.w #$0003
BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
LDA.l LootTypeMapping, X
@@ -574,9 +651,13 @@ GetPotJunkClass:
LDA.b $0E
BEQ .done
CMP.w #$0001
BEQ .value_set
CMP.w #$0003
BCS .check_value
LDA.w #$0001
BRA .value_set
.check_value
; hardcode as junk for now
LDA.w #$0002

View File

@@ -150,7 +150,7 @@ DrawFullRoomTile:
RTL
DrawSingleRoomLoot:
LDA.l ShowLootOnMap : AND.w #$00FF : BNE +
LDA.l MapItems_enabled : AND.w #$00FF : BNE +
RTL
+ PHX : PHY
@@ -176,7 +176,7 @@ DrawSingleRoomLoot:
LDA.b $CA
AND.w #$F0FF
JSL CheckLoot
JSL CheckMapLoot
ASL A : ASL A : ASL A

View File

@@ -32,7 +32,7 @@ DrawLoot:
LDA.l DRMode
BNE .skip
LDA.l ShowLootOnMap
LDA.l MapItems_enabled
BEQ .skip
REP #$30
@@ -128,7 +128,7 @@ DrawSingleFloorLoot:
LDA.w #$0000
BRA +
.valid_room
JSL CheckLoot
JSL CheckMapLoot
+
ASL A : ASL A : ASL A

View File

@@ -45,7 +45,7 @@ UpdateLootHUD:
PHX : PHY
SEP #$30
LDA.l ShowLootInHUD : BEQ .setting_off
LDA.l HudItems_enabled : BEQ .setting_off
LDA.b IndoorsFlag : BEQ .done
REP #$30
@@ -77,23 +77,7 @@ UpdateLootHUD:
ASL A : ASL A : ASL A : ASL A
ORA.b RoomIndex
.check
JSL CheckLoot
SEP #$30
CMP.l ShowItems_hud_cap
BCC +
LDA.l ShowItems_hud_cap
+
LDX.w DungeonID
CPX.b #$FF
BNE +
CMP.l ShowItems_cave_cap
BCC +
LDA.l ShowItems_cave_cap
+
REP #$30
JSL CheckHudLoot
ASL A : TAX
LDA.l HUDLootTypeIcons, X

View File

@@ -52,7 +52,7 @@ dw $2DCB, $6DCB, $ADCB, $EDCB ; 01 - unknown - dot
dw $29EB, $69EB, $29FB, $69FB ; 02 - junk - pot
dw $29CA, $69CA, $29DA, $29DB ; 03 - small key
dw $29E9, $69E9, $29F9, $69F9 ; 04 - triforce piece
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - safety - plus
dw $29DD, $69DD, $A9DD, $E9DD ; 05 - health - plus
dw $29EC, $69EC, $29FC, $69FC ; 06 - less important item - small chest
dw $29E8, $69E8, $29F8, $69F8 ; 07 - compass
dw $29CE, $29CF, $29DE, $29DF ; 08 - map
@@ -87,7 +87,7 @@ dw $10A4 : db $04 : dl HeartContainer_Trinexx
dw $1073 : db $05 : dl BonkKey_Desert ; torch
dw $108C : db $05 : dl BonkKey_GTower ; torch
dw $1087 : db $05 : dl StandingKey_Hera ; investigate
dw $1087 : db $05 : dl StandingKey_Hera
dw $10E1 : db $06 : dl HeartPiece_Forest_Thieves
dw $10E2 : db $06 : dl HeartPiece_Lumberjack_Tree
@@ -220,42 +220,53 @@ warnpc $B9FF08
org $B9FF08
; $00 - do not show anything
; $01 - show presence of unobtained items
; $02 - show category of item
ShowItems:
; $02 - show compass if presence, otherwise presence of unobtained items
; $03 - show category of item
MapItems:
.default
db $00
.have_map
db $00
.have_compass
db $02
db $03
.visited_tile
db $01
db $02
.reserved
skip 2
.hud_cap
db $FF
.cave_cap
skip 3
.enabled
db $01
warnpc $B9FF10
org $B9FF10
; ---P bepc
HudItems:
.cave
db $00
.default_dungeon
db $00
.have_map
db $01
.have_compass
db $03
.reserved
skip 3
.enabled
db $01
warnpc $B9FF18
org $B9FF20
; ---P sepc
; P - dungeon prizes
; b - bosses (and torches in GT and desert, plus hera basement standing item)
; s - standing items (plus torches in GT and desert and bosses)
; e - enemy drops
; p - pots
; c - chests
ItemSources:
db $09
; $B9FF11
AlwaysShowCompass:
db $01
; $B9FF12
ShowLootOnMap:
db $01
; $B9FF13
ShowLootInHUD:
; B9FF21
; a--- --mv
; a - always
; m - have map
; v - have visited dungeon
MapSwapping:
db $01

Binary file not shown.

Binary file not shown.