Add HUD map mode flag, "chest key" totals table, and seen-counter flags
for tracking
This commit is contained in:
@@ -42,11 +42,16 @@ DungeonItemMasks: ; these are dungeon correlations to $7EF364 - $7EF369 so it kn
|
|||||||
dw $8000, $4000, $2000, $1000, $0800, $0400, $0200, $0100
|
dw $8000, $4000, $2000, $1000, $0800, $0400, $0200, $0100
|
||||||
dw $0080, $0040, $0020, $0010, $0008, $0004
|
dw $0080, $0040, $0020, $0010, $0008, $0004
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
InitCompassTotalsRAM:
|
InitDungeonCounts:
|
||||||
LDX.b #$00
|
LDX.b #$0F
|
||||||
-
|
-
|
||||||
LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X
|
LDA.l CompassTotalsROM, X : STA.l CompassTotalsWRAM, X
|
||||||
INX
|
DEX
|
||||||
CPX.b #$0F : !BLT -
|
BPL -
|
||||||
|
LDX.b #$0F
|
||||||
|
-
|
||||||
|
LDA.l ChestKeys, X : STA.l MapTotalsWRAM, X
|
||||||
|
DEX
|
||||||
|
BPL -
|
||||||
RTL
|
RTL
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ JML.l ReturnFromOnDrawHud
|
|||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OnDungeonEntrance:
|
OnDungeonEntrance:
|
||||||
STA.l PegColor ; thing we wrote over
|
STA.l PegColor ; thing we wrote over
|
||||||
JSL MaybeFlagCompassTotalEntrance
|
JSL MaybeFlagDungeonTotalsEntrance
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
OnPlayerDead:
|
OnPlayerDead:
|
||||||
|
|||||||
2
init.asm
2
init.asm
@@ -67,6 +67,6 @@ Init_PostRAMClear:
|
|||||||
|
|
||||||
JSL MSUInit
|
JSL MSUInit
|
||||||
JSL InitRNGPointerTable
|
JSL InitRNGPointerTable
|
||||||
JSL InitCompassTotalsRAM
|
JSL InitDungeonCounts
|
||||||
|
|
||||||
JML $00D463 ; The original target of the jump table that we hijacked
|
JML $00D463 ; The original target of the jump table that we hijacked
|
||||||
|
|||||||
@@ -408,6 +408,7 @@ AddInventory:
|
|||||||
JSR .incrementBigKey
|
JSR .incrementBigKey
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$33 : BNE + ; Map
|
+ CPY.b #$33 : BNE + ; Map
|
||||||
|
JSL MaybeFlagMapTotalPickup
|
||||||
JSR .incrementMap
|
JSR .incrementMap
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants
|
+ CPY.b #$37 : !BLT + ; Items $37 - $39 - Pendants
|
||||||
@@ -492,6 +493,7 @@ AddInventory:
|
|||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps
|
+ CPY.b #$70 : !BLT + ; Items $70 - $7F - Free Maps
|
||||||
CPY.b #$80 : !BGE +
|
CPY.b #$80 : !BGE +
|
||||||
|
JSL MaybeFlagMapTotalPickup
|
||||||
JSR .incrementMap
|
JSR .incrementMap
|
||||||
JMP .done
|
JMP .done
|
||||||
+ CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses
|
+ CPY.b #$80 : !BLT + ; Items $80 - $8F - Free Compasses
|
||||||
|
|||||||
64
newitems.asm
64
newitems.asm
@@ -1087,14 +1087,23 @@ MaybeFlagCompassTotalPickup:
|
|||||||
.done
|
.done
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; Set the compass count display flag if we're entering a dungeon and alerady have
|
; Set the dungeon item count display flags if we're entering a dungeon and have the
|
||||||
; that compass
|
; corresponding dungeon item
|
||||||
MaybeFlagCompassTotalEntrance:
|
MaybeFlagDungeonTotalsEntrance:
|
||||||
LDX.w DungeonID : CPX.b #$FF : BEQ .done ; Skip if we're not entering dungeon
|
LDX.w DungeonID : CPX.b #$FF : BEQ .done ; Skip if we're not entering dungeon
|
||||||
LDA.l CompassMode : AND.w #$000F : BEQ .done ; Skip if we're not showing compass counts
|
LDA.l CompassMode : AND.w #$000F : BEQ .maps ; Skip if we're not showing compass counts
|
||||||
CMP.w #$0002 : BEQ .countShown
|
JSR.w FlagCompassCount
|
||||||
|
.maps
|
||||||
|
LDA.l MapHUDMode : AND.w #$000F : BEQ .done
|
||||||
|
LDX.w DungeonID
|
||||||
|
JSR.w FlagMapCount
|
||||||
|
.done
|
||||||
|
RTL
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
FlagCompassCount:
|
||||||
|
CMP.w #$0002 : BEQ .compassShown
|
||||||
LDA.l CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass
|
LDA.l CompassField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have compass
|
||||||
.countShown
|
.compassShown
|
||||||
SEP #$20
|
SEP #$20
|
||||||
TXA : LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag index
|
TXA : LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag index
|
||||||
CMP.b #$08 : !BGE ++
|
CMP.b #$08 : !BGE ++
|
||||||
@@ -1109,5 +1118,46 @@ MaybeFlagCompassTotalEntrance:
|
|||||||
ORA.l CompassCountDisplay+1 : STA.l CompassCountDisplay+1
|
ORA.l CompassCountDisplay+1 : STA.l CompassCountDisplay+1
|
||||||
REP #$20
|
REP #$20
|
||||||
.done
|
.done
|
||||||
|
RTS
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
FlagMapCount:
|
||||||
|
CMP.w #$0002 : BEQ .mapShown
|
||||||
|
LDA.l MapField : AND.l DungeonItemMasks, X : BEQ .done ; skip if we don't have map
|
||||||
|
.mapShown
|
||||||
|
SEP #$20
|
||||||
|
TXA : LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag index
|
||||||
|
CMP.b #$08 : !BGE ++
|
||||||
|
%ValueShift()
|
||||||
|
ORA.l MapCountDisplay : STA.l MapCountDisplay
|
||||||
|
REP #$20
|
||||||
|
BRA .done
|
||||||
|
++
|
||||||
|
!SUB #$08
|
||||||
|
%ValueShift()
|
||||||
|
BIT.b #$C0 : BEQ + : LDA.b #$C0 : + ; Make Hyrule Castle / Sewers Count for Both
|
||||||
|
ORA.l MapCountDisplay+1 : STA.l MapCountDisplay+1
|
||||||
|
REP #$20
|
||||||
|
.done
|
||||||
|
RTS
|
||||||
|
;--------------------------------------------------------------------------------
|
||||||
|
MaybeFlagMapTotalPickup:
|
||||||
|
LDA.l MapMode : AND.b #$0F : BEQ .done
|
||||||
|
LDA.w DungeonID : CMP.b #$FF : BEQ .done
|
||||||
|
LSR : STA.b Scrap04 : LDA.b #$0F : !SUB Scrap04 ; Compute flag "index"
|
||||||
|
CPY.b #$25 : BEQ .setFlag ; Set flag if it's a compass for this dungeon
|
||||||
|
STA.b Scrap04
|
||||||
|
TYA : AND.b #$0F : CMP.b Scrap04 : BNE .done ; Check if map is for this dungeon
|
||||||
|
.setFlag
|
||||||
|
CMP.b #$08 : !BGE ++
|
||||||
|
%ValueShift()
|
||||||
|
ORA.l MapCountDisplay : STA.l MapCountDisplay
|
||||||
|
BRA .done
|
||||||
|
++
|
||||||
|
!SUB #$08
|
||||||
|
%ValueShift()
|
||||||
|
BIT.b #$C0 : BEQ + : LDA.b #$C0 : + ; Make Hyrule Castle / Sewers Count for Both
|
||||||
|
ORA.l MapCountDisplay+1 : STA.l MapCountDisplay+1
|
||||||
|
.done
|
||||||
RTL
|
RTL
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|
||||||
|
|||||||
6
ram.asm
6
ram.asm
@@ -544,8 +544,9 @@ RxStatus: skip 1 ;
|
|||||||
TxBuffer: skip $7F ;
|
TxBuffer: skip $7F ;
|
||||||
TxStatus: skip 1 ;
|
TxStatus: skip 1 ;
|
||||||
skip $10 ; Unused
|
skip $10 ; Unused
|
||||||
CompassTotalsWRAM: skip $10 ; skip $10
|
CompassTotalsWRAM: skip $10 ; \ Compass and map dungeon HUD display totals. Placed in WRAM
|
||||||
skip $40 ; Reserved for general dungeon tracking data. May have over
|
MapTotalsWRAM: skip $10 ; / on boot for tracking.
|
||||||
|
skip $30 ; Reserved for general dungeon tracking data. May have over
|
||||||
; allocated here. Feel free to reassign.
|
; allocated here. Feel free to reassign.
|
||||||
skip $40 ; Unused
|
skip $40 ; Unused
|
||||||
skip $260 ; Unused
|
skip $260 ; Unused
|
||||||
@@ -913,6 +914,7 @@ endmacro
|
|||||||
%assertRAM(TxBuffer, $7F5380)
|
%assertRAM(TxBuffer, $7F5380)
|
||||||
%assertRAM(TxStatus, $7F53FF)
|
%assertRAM(TxStatus, $7F53FF)
|
||||||
%assertRAM(CompassTotalsWRAM, $7F5410)
|
%assertRAM(CompassTotalsWRAM, $7F5410)
|
||||||
|
%assertRAM(MapTotalsWRAM, $7F5420)
|
||||||
%assertRAM(DialogBuffer, $7F5700)
|
%assertRAM(DialogBuffer, $7F5700)
|
||||||
%assertRAM(MiniGameTime, $7FFE00)
|
%assertRAM(MiniGameTime, $7FFE00)
|
||||||
%assertRAM(MiniGameTimeFinal, $7FFE04)
|
%assertRAM(MiniGameTimeFinal, $7FFE04)
|
||||||
|
|||||||
4
sram.asm
4
sram.asm
@@ -317,7 +317,8 @@ HeartPieceCounter: skip 1 ; Total Number of heartpieces collected (integer
|
|||||||
CrystalCounter: skip 1 ; Total Number of crystals collected (integer)
|
CrystalCounter: skip 1 ; Total Number of crystals collected (integer)
|
||||||
DungeonsCompleted: skip 2 ; Bitfield indicating whether a dungeon's prize has been collected.
|
DungeonsCompleted: skip 2 ; Bitfield indicating whether a dungeon's prize has been collected.
|
||||||
; This has the same shape as the dungeon item bitfields.
|
; This has the same shape as the dungeon item bitfields.
|
||||||
skip 44 ; Unused
|
MapCountDisplay: skip 2 ;
|
||||||
|
skip 42 ; Unused
|
||||||
ServiceSequence: ; See servicerequest.asm
|
ServiceSequence: ; See servicerequest.asm
|
||||||
ServiceSequenceRx: skip 8 ; Service sequence receive
|
ServiceSequenceRx: skip 8 ; Service sequence receive
|
||||||
ServiceSequenceTx: skip 8 ; Service sequence transmit
|
ServiceSequenceTx: skip 8 ; Service sequence transmit
|
||||||
@@ -602,6 +603,7 @@ endmacro
|
|||||||
%assertSRAM(HeartPieceCounter, $7EF470)
|
%assertSRAM(HeartPieceCounter, $7EF470)
|
||||||
%assertSRAM(CrystalCounter, $7EF471)
|
%assertSRAM(CrystalCounter, $7EF471)
|
||||||
%assertSRAM(DungeonsCompleted, $7EF472)
|
%assertSRAM(DungeonsCompleted, $7EF472)
|
||||||
|
%assertSRAM(MapCountDisplay, $7EF474)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
%assertSRAM(ServiceSequence, $7EF4A0)
|
%assertSRAM(ServiceSequence, $7EF4A0)
|
||||||
%assertSRAM(ServiceSequenceRx, $7EF4A0)
|
%assertSRAM(ServiceSequenceRx, $7EF4A0)
|
||||||
|
|||||||
10
tables.asm
10
tables.asm
@@ -118,9 +118,11 @@ org $308038 ; PC 0x180038
|
|||||||
LampConeSewers:
|
LampConeSewers:
|
||||||
db #$01 ; #$00 = Off - #$01 = On (default)
|
db #$01 ; #$00 = Off - #$01 = On (default)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; 0x180039 - 0x18003A (Unused)
|
; 0x180039 - 0x180039 (Unused)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
org $30803B ; PC 0x18003B - PC 0x18003C
|
org $30803A ; PC 0x18003B - PC 0x18003C
|
||||||
|
MapHUDMode:
|
||||||
|
db #$00 ; #$00 = Off (default) - #$01 = Display Dungeon Count w/Map - #$02 = Display Dungeon Count Always
|
||||||
MapMode:
|
MapMode:
|
||||||
db #$00 ; #$00 = Always On (default) - #$01 = Require Map Item
|
db #$00 ; #$00 = Always On (default) - #$01 = Require Map Item
|
||||||
CompassMode:
|
CompassMode:
|
||||||
@@ -2544,6 +2546,10 @@ org $30F000 ; PC 0x187000-0x18700F
|
|||||||
CompassTotalsROM:
|
CompassTotalsROM:
|
||||||
db $08, $08, $06, $06, $02, $0A, $0E, $08, $08, $08, $06, $08, $0C, $1B, $00, $00
|
db $08, $08, $06, $06, $02, $0A, $0E, $08, $08, $08, $06, $08, $0C, $1B, $00, $00
|
||||||
|
|
||||||
|
org $30F010
|
||||||
|
ChestKeys: ; PC 0x187010-0x18701F
|
||||||
|
db $01, $01, $00, $01, $02, $01, $06, $03, $03, $02, $01, $01, $04, $04, $00, $00
|
||||||
|
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
; 0x187010 - 187FFF (unused)
|
; 0x187010 - 187FFF (unused)
|
||||||
;--------------------------------------------------------------------------------
|
;--------------------------------------------------------------------------------
|
||||||
|
|||||||
Reference in New Issue
Block a user