hook vanilla HUD code

This commit is contained in:
Justin Scofield
2022-09-30 20:51:47 -05:00
parent 793c52c75c
commit 61c921a342
2 changed files with 240 additions and 223 deletions

View File

@@ -387,8 +387,6 @@ Menu_ScrollUp:
.loop
DEX : DEX : STX.w MenuScrollLevelV
JSL Menu_UpdateHudItem
RTS
}
@@ -426,7 +424,6 @@ Menu_Exit:
.no_item
REP #$20
STZ $0200
;;STZ $11
LDA.w $010C
STA.b $10
@@ -442,81 +439,9 @@ Menu_Exit:
RTS
}
; =============================================================================
; XX MENU HIJACK HUD
HudItems:
dw BowsGFX
dw BoomsGFX
dw HookGFX
dw BombsGFX
dw DekuMaskGFX
dw BottlesGFX
dw Fire_rodGFX
dw Ice_rodGFX
dw LampGFX
dw HammerGFX
dw GoronMaskGFX
dw BottlesGFX
dw SomariaGFX
dw ByrnaGFX
dw BookGFX
dw JumpFeatherGFX
dw BunnyHoodGFX
dw BottlesGFX
dw OcarinaGFX
dw MirrorGFX
dw ShovelGFX
dw PowderGFX
dw StoneMaskGFX
dw BottlesGFX
; LDA.w $0202
; ASL : TAX
; LDY.w HudItems-2, X
Menu_UpdateHudItem:
{
PHB
PHK
PLB
; print pc
; SEP #$30
; LDA.b #$7E : STA.b $0C ; set the indirect bank
; REP #$30
; LDA.w $0202
; ASL : TAX
; LDY.w HudItems-2, X
; STY.b $00
; LDY.w $0202
; LDX.w Menu_AddressIndex-1, Y
; LDA.l $7EF300, X
; STA.w $08
; LDA.b [$08]
; ADC.b $00
; TAY
REP #$30
LDA.w $0202
ASL : TAX
LDY.w HudItems-2, X
LDA.w $0000,Y : STA.l $7EC778
LDA.w $0002,Y : STA.l $7EC77A
LDA.w $0004,Y : STA.l $7EC7B8
LDA.w $0006,Y : STA.l $7EC7BA
SEP #$30
PLB
RTL
}
; =============================================================================
incsrc "menu_draw_bg.asm"
incsrc "lw_map_names.asm"
incsrc "menu_hud.asm"
; =============================================================================

View File

@@ -2,160 +2,165 @@ org $0DFB91
JSL NewMenuUpdate
RTS
org $3D8000
newIgnoreItemBox:
JSL NewMenuUpdate_ignoreItemBox
RTS
org $0DDD21
JSR newIgnoreItemBox
org $268000
NewMenuUpdate:
{
PHB : PHK : PLB
JSR Hud_UpdateItemBox
; ; *$6FB94 ALTERNATE ENTRY POINT
; .ignoreItemBox
; *$6FB94 ALTERNATE ENTRY POINT
.ignoreItemBox
; SEP #$30
SEP #$30
; ; the hook for optimization was placed here...
; ; need to draw partial heart still though. update: optimization complete with great results
; LDA.b #$FD : STA $0A
; LDA.b #$F9 : STA $0B
; LDA.b #$0D : STA $0C
; the hook for optimization was placed here...
; need to draw partial heart still though. update: optimization complete with great results
LDA.b #$FD : STA $0A
LDA.b #$F9 : STA $0B
LDA.b #$0D : STA $0C
; LDA.b #$68 : STA $07
; LDA.b #$C7 : STA $08
; LDA.b #$7E : STA $09
LDA.b #$68 : STA $07
LDA.b #$C7 : STA $08
LDA.b #$7E : STA $09
; REP #$30
REP #$30
; ; Load Capacity health.
; LDA $7EF36C : AND.w #$00FF : STA $00 : STA $02 : STA $04
; Load Capacity health.
LDA $7EF36C : AND.w #$00FF : STA $00 : STA $02 : STA $04
; ; First, just draw all the empty hearts (capacity health)
; JSR HUD_UpdateHearts
; First, just draw all the empty hearts (capacity health)
JSR HUD_UpdateHearts
; SEP #$30
SEP #$30
; LDA.b #$03 : STA $0A
; LDA.b #$FA : STA $0B
; LDA.b #$0D : STA $0C
LDA.b #$03 : STA $0A
LDA.b #$FA : STA $0B
LDA.b #$0D : STA $0C
; LDA.b #$68 : STA $07
; LDA.b #$C7 : STA $08
; LDA.b #$7E : STA $09
LDA.b #$68 : STA $07
LDA.b #$C7 : STA $08
LDA.b #$7E : STA $09
; ; Branch if at full health
; LDA $7EF36C : CMP $7EF36D : BEQ .healthUpdated
; Branch if at full health
LDA $7EF36C : CMP $7EF36D : BEQ .healthUpdated
; ; Seems absurd to have a branch of zero bytes, right?
; SBC #$04 : CMP $7EF36D : BCS .healthUpdated
; Seems absurd to have a branch of zero bytes, right?
SBC #$04 : CMP $7EF36D : BCS .healthUpdated
; .healthUpdated
.healthUpdated
; ; A = actual health + 0x03;
; LDA $7EF36D : ADC #$03
; A = actual health + 0x03;
LDA $7EF36D : ADC.b #$03
; REP #$30
REP #$30
; AND.w #$00FC : STA $00 : STA $04
AND.w #$00FC : STA $00 : STA $04
; LDA $7EF36C : AND.w #$00FF : STA $02
LDA $7EF36C : AND.w #$00FF : STA $02
; ; this time we're filling in the full and partially filled hearts (actual health)
; JSR HUD_UpdateHearts
; this time we're filling in the full and partially filled hearts (actual health)
JSR HUD_UpdateHearts
; ; *$6FC09 ALTERNATE ENTRY POINT ; reentry hook
; .ignoreHealth
; *$6FC09 ALTERNATE ENTRY POINT ; reentry hook
.ignoreHealth
; REP #$30
REP #$30
; ; Magic amount indicator (normal, 1/2, or 1/4)
; LDA $7EF37B : AND.w #$00FF : CMP.w #$0001 : BCC .normalMagicMeter
; Magic amount indicator (normal, 1/2, or 1/4)
LDA $7EF37B : AND.w #$00FF : CMP.w #$0001 : BCC .normalMagicMeter
; ; draws a 1/2 magic meter (note, we could add in the 1/4 magic meter here if
; ; we really cared about that >_>
; LDA.w #$28F7 : STA $7EC704
; LDA.w #$2851 : STA $7EC706
; LDA.w #$28FA : STA $7EC708
; draws a 1/2 magic meter (note, we could add in the 1/4 magic meter here if
; we really cared about that >_>
LDA.w #$28F7 : STA $7EC704
LDA.w #$2851 : STA $7EC706
LDA.w #$28FA : STA $7EC708
; .normalMagicMeter
.normalMagicMeter
; ; check how much magic power the player has at the moment (ranges from 0 to 0x7F)
; ; X = ((MP & 0xFF)) + 7) & 0xFFF8)
; LDA $7EF36E : AND.w #$00FF : ADC #$0007 : AND.w #$FFF8 : TAX
; check how much magic power the player has at the moment (ranges from 0 to 0x7F)
; X = ((MP & 0xFF)) + 7) & 0xFFF8)
LDA $7EF36E : AND.w #$00FF : ADC.w #$0007 : AND.w #$FFF8 : TAX
; ; these four writes draw the magic power bar based on how much MP you have
; LDA MagicTilemap+0, X : STA $7EC746
; LDA MagicTilemap+2, X : STA $7EC786
; LDA MagicTilemap+4, X : STA $7EC7C6
; LDA MagicTilemap+6, X : STA $7EC806
; these four writes draw the magic power bar based on how much MP you have
LDA MagicTilemap+0, X : STA $7EC746
LDA MagicTilemap+2, X : STA $7EC786
LDA MagicTilemap+4, X : STA $7EC7C6
LDA MagicTilemap+6, X : STA $7EC806
; ; Load how many rupees the player has
; LDA $7EF362
; Load how many rupees the player has
LDA $7EF362
; JSR HexToDecimal
JSR HexToDecimal
; REP #$30
REP #$30
; ; The tile index for the first rupee digit
; LDA $03 : AND.w #$00FF : ORA.w #$2400 : STA $7EC750
; The tile index for the first rupee digit
LDA $03 : AND.w #$00FF : ORA.w #$2400 : STA $7EC750
; ; The tile index for the second rupee digit
; LDA $04 : AND.w #$00FF : ORA.w #$2400 : STA $7EC752
; The tile index for the second rupee digit
LDA $04 : AND.w #$00FF : ORA.w #$2400 : STA $7EC752
; ; The tile index for the third rupee digit
; LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC754
; The tile index for the third rupee digit
LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC754
; ; Number of bombs Link has.
; LDA $7EF343 : AND.w #$00FF
; Number of bombs Link has.
LDA $7EF343 : AND.w #$00FF
; JSR HexToDecimal
JSR HexToDecimal
; REP #$30
REP #$30
; ; The tile index for the first bomb digit
; LDA $04 : AND.w #$00FF : ORA.w #$2400 : STA $7EC758
; The tile index for the first bomb digit
LDA $04 : AND.w #$00FF : ORA.w #$2400 : STA $7EC758
; ; The tile index for the second bomb digit
; LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC75A
; The tile index for the second bomb digit
LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC75A
; ; Number of Arrows Link has.
; LDA $7EF377 : AND.w #$00FF
; Number of Arrows Link has.
LDA $7EF377 : AND.w #$00FF
; ; converts hex to up to 3 decimal digits
; JSR HexToDecimal
; converts hex to up to 3 decimal digits
JSR HexToDecimal
; REP #$30
REP #$30
; ; ; The tile index for the first arrow digit
; ; LDA $04 : AND.w #$00FF : ORA.w #$2400 : STA $7EC75E
; The tile index for the first arrow digit
LDA $04 : AND.w #$00FF : ORA.w #$2400 : STA $7EC75E
; ; ; The tile index for the second arrow digit
; ; LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC760
; The tile index for the second arrow digit
LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC760
; ; LDA.w #$007F : STA $05
LDA.w #$007F : STA $05
; ; Load number of Keys Link has
; LDA $7EF36F : AND.w #$00FF : CMP.w #$00FF : BEQ .noKeys
; Load number of Keys Link has
LDA $7EF36F : AND.w #$00FF : CMP.w #$00FF : BEQ .noKeys
; JSR HexToDecimal
JSR HexToDecimal
; .noKeys
.noKeys
; REP #$30
REP #$30
; ; The key digit, which is optionally drawn.
; ; Also check to see if the key spot is blank
; LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC764
; The key digit, which is optionally drawn.
; Also check to see if the key spot is blank
LDA $05 : AND.w #$00FF : ORA.w #$2400 : STA $7EC764
; CMP.w #$247F : BNE .dontBlankKeyIcon
CMP.w #$247F : BNE .dontBlankKeyIcon
; ; If the key digit is blank, also blank out the key icon.
; STA $7EC724
; If the key digit is blank, also blank out the key icon.
STA $7EC724
; .dontBlankKeyIcon
.dontBlankKeyIcon
; SEP #$30
SEP #$30
PLB
RTL
RTL
}
; ==============================================================================
@@ -189,6 +194,7 @@ HudItems:
Hud_UpdateItemBox:
{
REP #$30
LDA.w $0202
ASL : TAX
LDY.w HudItems-2, X
@@ -197,12 +203,94 @@ Hud_UpdateItemBox:
LDA.w $0002,Y : STA.l $7EC77A
LDA.w $0004,Y : STA.l $7EC7B8
LDA.w $0006,Y : STA.l $7EC7BA
SEP #$30
RTS
}
; ==============================================================================
Vanilla_UpdateItemBox:
{
SEP #$30
; Dost thou haveth the the bow?
LDA $7EF340 : BEQ .havethNoBow
; Dost thou haveth the silver arrows?
; (okay I'll stop soon)
CMP.b #$03 : BCC .havethNoSilverArrows
; Draw the arrow guage icon as silver rather than normal wood arrows.
LDA.b #$86 : STA $7EC71E
LDA.b #$24 : STA $7EC71F
LDA.b #$87 : STA $7EC720
LDA.b #$24 : STA $7EC721
LDX.b #$04
; check how many arrows the player has
LDA $7EF377 : BNE .drawBowItemIcon
LDX.b #$03
BRA .drawBowItemIcon
.havethNoSilverArrows
LDX.b #$02
LDA $7EF377 : BNE .drawBowItemIcon
LDX.b #$01
.drawBowItemIcon
; values of X correspond to how the icon will end up drawn:
; 0x01 - normal bow with no arrows
; 0x02 - normal bow with arrows
; 0x03 - silver bow with no silver arrows
; 0x04 - silver bow with silver arrows
TXA : STA $7EF340
.havethNoBow
REP #$30
LDX $0202 : BEQ .noEquippedItem
LDA $7EF33F, X : AND.w #$00FF
CPX.w #$0004 : BNE .bombsNotEquipped
LDA.w #$0001
.bombsNotEquipped
CPX.w #$0010 : BNE .bottleNotEquipped
TXY : TAX : LDA $7EF35B, X : AND.w #$00FF : TYX
.bottleNotEquipped
STA $02
TXA : DEC A : ASL A : TAX
LDA $FA93, X : STA $04
LDA $02 : ASL #3 : TAY
; These addresses form the item box graphics.
LDA ($04), Y : STA $7EC74A : INY #2
LDA ($04), Y : STA $7EC74C : INY #2
LDA ($04), Y : STA $7EC78A : INY #2
LDA ($04), Y : STA $7EC78C : INY #2
.noEquippedItem
RTS
}
; ==============================================================================
HUD_UpdateHearts:
{
@@ -255,7 +343,7 @@ HUD_UpdateHearts:
; if not, we have to move down one tile in the tilemap
LDX.w #$0000
LDA $07 : ADC #$0040 : STA $07
LDA $07 : ADC.w #$0040 : STA $07
.noLineChange
@@ -264,6 +352,8 @@ HUD_UpdateHearts:
RTS
}
; ==============================================================================
MagicTilemap:
dw $3CF5, $3CF5, $3CF5, $3CF5
dw $3CF5, $3CF5, $3CF5, $3C5F
@@ -283,6 +373,8 @@ MagicTilemap:
dw $3C4D, $3C5E, $3C5E, $3C5E
dw $3C4E, $3C5E, $3C5E, $3C5E
; ==============================================================================
HexToDecimal:
{
; This apparently is a hex to decimal converter for use with displaying numbers