Update goldstar to work with hookshot, HUD and menu

This commit is contained in:
scawful
2024-02-10 15:48:28 -05:00
parent 18f79ba293
commit 916f660335
5 changed files with 185 additions and 102 deletions

View File

@@ -55,9 +55,8 @@ pullpc
HookMaskCheck: HookMaskCheck:
{ {
LDA.w $0202 : AND.w #$00FF : CMP.w #$000E : BNE .not_mask LDA GoldstarOrHookshot : AND.w #$00FF : CMP.w #$0002 : BNE .not_mask
; morning star graphics oam tile pattern id LDA.w $0109 : AND #$FF00 : ORA.w #$004A ; morning star graphics oam tile pattern id
LDA.w $0109 : AND #$FF00 : ORA.w #$004A
RTL RTL
.not_mask .not_mask
; return hookshot graphics oam tile pattern id ; return hookshot graphics oam tile pattern id
@@ -95,7 +94,7 @@ pullpc
; $22D4C0 - Hooked into AncillaDraw_Hookshot @ _08BF2D ; $22D4C0 - Hooked into AncillaDraw_Hookshot @ _08BF2D
BallChain_DrawOrReturn: BallChain_DrawOrReturn:
{ {
LDA $0202 : CMP #$0E : BEQ + LDA GoldstarOrHookshot : CMP #$02 : BEQ +
LDA #$00 : STA ($92),Y LDA #$00 : STA ($92),Y
RTL RTL
+ ; $22D4CD + ; $22D4CD
@@ -114,13 +113,13 @@ pullpc
BallChain_ExtraCollisionLogic: BallChain_ExtraCollisionLogic:
{ {
TAX TAX
LDA $0202 : CMP #$0E : BNE + ; Check if turtle LDA GoldstarOrHookshot : CMP #$02 : BNE + ; Check if using goldstar
TXA : CMP #$0A : BNE ++ ; $22D4F3 TXA : CMP #$0A : BNE ++
LDA #$FF : BRA ++ ; $22D4F3 LDA #$FF : BRA ++
+ ; $22D4F2 + ; $22D4F2
TXA TXA
++ ; $22D4F3 ++ ; $22D4F3
CMP #$FF : BEQ +++ ; $22D4FB CMP #$FF : BEQ +++
JML $08BF10 ; AncillaDraw_Hookshot - JSR Ancilla_SetOAM_XY, skips hookshot char JML $08BF10 ; AncillaDraw_Hookshot - JSR Ancilla_SetOAM_XY, skips hookshot char
+++ ; $22D4FB +++ ; $22D4FB
JML $08BF32 ; AncillaDraw_Hookshot_skip JML $08BF32 ; AncillaDraw_Hookshot_skip
@@ -241,7 +240,7 @@ pullpc
; Sets Link state to 0x00 and resets the hookshot timer ; Sets Link state to 0x00 and resets the hookshot timer
BallChain_ResetTimer: BallChain_ResetTimer:
{ {
LDA $0202 : CMP #$0E : BNE + LDA GoldstarOrHookshot : CMP #$02 : BNE +
STZ $7A ; Clear the timer STZ $7A ; Clear the timer
+ +
STZ $5D ; Return to LinkState_Default STZ $5D ; Return to LinkState_Default
@@ -262,7 +261,7 @@ pullpc
; Natively NOPs out the bytes 08BFDA - 08BFEA ; Natively NOPs out the bytes 08BFDA - 08BFEA
BallChain_DrawChainOrHookshot: BallChain_DrawChainOrHookshot:
{ {
LDA $0202 : CMP #$0E : BEQ + LDA GoldstarOrHookshot : CMP #$02 : BEQ +
LDA #$19 : STA ($90),Y LDA #$19 : STA ($90),Y
JSR BallChainOrHookshot_Modifier ; $D820 JSR BallChainOrHookshot_Modifier ; $D820
ORA.b #$02 ORA.b #$02
@@ -292,7 +291,7 @@ struct HookshotSpriteData $08BD4C
endstruct endstruct
pushpc pushpc
org $8BF1B ; AncillaDraw_HookshotChain org $08BF1B ; AncillaDraw_HookshotChain
JSL Goldstar_SetChainProperties JSL Goldstar_SetChainProperties
NOP #3 NOP #3
pullpc pullpc
@@ -300,7 +299,7 @@ pullpc
; $22D850 - Modify the palette ; $22D850 - Modify the palette
Goldstar_SetChainProperties: Goldstar_SetChainProperties:
{ {
LDA $0202 : CMP #$0E : BEQ .ball_chain LDA GoldstarOrHookshot : CMP #$02 : BEQ .ball_chain
LDA HookshotSpriteData.prop, X LDA HookshotSpriteData.prop, X
ORA.b #$02 : ORA.b $65 ORA.b #$02 : ORA.b $65
RTL RTL
@@ -323,14 +322,14 @@ pullpc
Link_OAM_Actually: Link_OAM_Actually:
{ {
REP #$20 REP #$20
LDA $0202 : AND #$00FF : CMP #$000E : BEQ + LDA $0202 : AND #$00FF : CMP #$0003 : BEQ +
LDA $839B,Y LDA $839B,Y
RTL RTL
+ ; $22D892 + ; $22D892
LDA $839B,Y : CMP #$221A : BEQ ++ LDA $839B,Y : CMP #$221A : BEQ ++
RTL RTL
++ ; $22D89B ++ ; $22D89B
LDA $0202 : AND #$00FF : CMP #$000E : BEQ +++ LDA GoldstarOrHookshot : AND #$00FF : CMP #$0002 : BEQ +++
LDA $839B,Y LDA $839B,Y
RTL RTL
+++ ; $22D8AA +++ ; $22D8AA
@@ -383,6 +382,8 @@ HookshotChain_AncillaDraw:
JMP Routine_22D9A0 ; $D9A0 JMP Routine_22D9A0 ; $D9A0
+++++++ ; 22D951 +++++++ ; 22D951
CLC : CMP #$05 : BCC ++++++++ CLC : CMP #$05 : BCC ++++++++
LDA $F8 : CMP.b #$40 : BEQ +
JMP Routine_22D9A0 ; $D9A0 JMP Routine_22D9A0 ; $D9A0
++++++++ ; 22D959 ++++++++ ; 22D959
JMP Routine_22DBD0 ; $DBD0 JMP Routine_22DBD0 ; $DBD0
@@ -700,11 +701,10 @@ org $08BDFD
pullpc pullpc
; 22DC50 ; 22DC50
; Hooked into Hookshot_Extending_ignore_collision @ 08BDFD
HookshotOrBallChain_Extending_ignore_collision: HookshotOrBallChain_Extending_ignore_collision:
{ {
; Ball Chain Timer ; Ball Chain Timer
LDA $7A : CMP #$00 : BNE + ; $22DC5E LDA $7A : CMP #$00 : BNE +
JSL Hookshot_CheckTileCollision ; $07D576 JSL Hookshot_CheckTileCollision ; $07D576
JML $08BE01 ; Hookshot_Extending_ignore_collision continue JML $08BE01 ; Hookshot_Extending_ignore_collision continue
+ ; 22DC5E + ; 22DC5E
@@ -914,20 +914,55 @@ Hookshot_Init:
Goldstar_Begin: Goldstar_Begin:
{ {
BIT $3A : BVS .return
LDA $6C : BNE .return
JSL Link_CheckNewY_ButtonPress_Long : BCC .return
JSL CheckForBallChain JSL CheckForBallChain
JSL Hookshot_Init JSL Hookshot_Init
JSL BallChain_StartAnimationFlag JSL BallChain_StartAnimationFlag
LDY.b #$03 LDY.b #$03 : LDA.b #$1F ; ANCILLA 1F
LDA.b #$1F ; ANCILLA 1F
JSL $099B10 ; AncillaAdd_Hookshot JSL $099B10 ; AncillaAdd_Hookshot
JSL TransferGFXinRAM JSL TransferGFXinRAM
.return
RTL RTL
} }
CheckForSwitchToGoldstar:
{
%CheckNewR_ButtonPress() : BEQ .continue
LDA GoldstarOrHookshot : CMP #$01 : BEQ .set_hookshot
LDA #$01 : STA GoldstarOrHookshot
JMP .continue
.set_hookshot:
LDA #$02 : STA GoldstarOrHookshot
.continue:
; Restore vanilla code
LDA.b $3A : AND.b #$40
RTL
}
BeginGoldstarOrHookshot:
{
LDA GoldstarOrHookshot : CMP #$02 : BEQ .begin_goldstar
JMP .return
.begin_goldstar:
JSL Goldstar_Begin
RTL
.return
JSL Hookshot_Init
LDA #$13 : STA $5D ; Set hookshot state
LDA #$01 : STA.w $037B
LDY.b #$03
LDA.b #$1F ; ANCILLA 1F
JSL $099B10 ; AncillaAdd_Hookshot
RTL
}
pushpc
org $07AB25
JSL CheckForSwitchToGoldstar
org $07AB3A ;$07AB40
JSL BeginGoldstarOrHookshot
RTS
pullpc

View File

@@ -230,10 +230,15 @@ DrawYItems:
LDY.w #BoomsGFX LDY.w #BoomsGFX
JSR DrawMenuItem JSR DrawMenuItem
LDA.w #$7EF342 LDA.l $7EF342 : CMP.w #$0000 : BEQ .no_hookshot
LDA.w GoldstarOrHookshot : BNE .spoof_hookshot
LDA #$0001 ; No goldstar, but hookshot
.spoof_hookshot
STA.w MenuItemValueSpoof : LDA.w #MenuItemValueSpoof
LDX.w #menu_offset(7,9) LDX.w #menu_offset(7,9)
LDY.w #HookGFX LDY.w #HookGFX
JSR DrawMenuItem JSR DrawMenuItem
.no_hookshot
LDA.l $7EF343 LDA.l $7EF343
CMP.w #$00 : BEQ .no_bomb CMP.w #$00 : BEQ .no_bomb
@@ -288,18 +293,18 @@ DrawYItems:
JSR DrawMenuItem JSR DrawMenuItem
;; next row ;; next row
LDA.l $7EF34C : CMP.w #$0000 : BEQ .no_ocarina
LDA.w #$7EF34C LDA.w $030F : BNE .spoof_ocarina
LDA #$0001 ; Multi-songs not unlocked yet
.spoof_ocarina
STA.w ShortSpoof : LDA.w #ShortSpoof
LDX.w #menu_offset(13,3) LDX.w #menu_offset(13,3)
LDY.w #OcarinaGFX LDY.w #OcarinaGFX
JSR DrawMenuItem JSR DrawMenuItem
.no_ocarina
;LDA.w #$7EF34E LDA.l $7EF34E : CMP.w #$00 : BEQ .no_book
LDA.l $7EF34E LDA.w #$01 : STA.w ShortSpoof : LDA.w #ShortSpoof
CMP.w #$00 : BEQ .no_book
LDA.w #$01
STA.w ShortSpoof
LDA.w #ShortSpoof
LDX.w #menu_offset(13,6) LDX.w #menu_offset(13,6)
LDY.w #BookGFX LDY.w #BookGFX
JSR DrawMenuItem JSR DrawMenuItem

View File

@@ -27,7 +27,7 @@ BoomsGFX:
HookGFX: HookGFX:
dw $24F5, $24F6, $24C0, $24F5 ; Hookshot dw $24F5, $24F6, $24C0, $24F5 ; Hookshot
;dw $2C17, $3531, $2D40, $3541 Ball & Chain dw $2C17, $3531, $2D40, $3541 ; Ball & Chain
; ------------------------------------- ; -------------------------------------
@@ -81,8 +81,8 @@ ShovelGFX:
OcarinaGFX: OcarinaGFX:
dw $2CD4, $2CD5, $2CE4, $2CE5 dw $2CD4, $2CD5, $2CE4, $2CE5
dw $2CD4, $2CD5, $2CE4, $2CE5 dw $3CD4, $3CD5, $3CE4, $3CE5 ; Green
dw $2CD4, $2CD5, $2CE4, $2CE5 dw $24D4, $24D5, $24E4, $24E5 ; Red
; ------------------------------------- ; -------------------------------------

View File

@@ -273,12 +273,10 @@ HUD_UpdateItemBox:
JMP .loadBottleContent JMP .loadBottleContent
.bottle1NotEquipped .bottle1NotEquipped
CPX.w #$000C : BNE .bottle2NotEquipped CPX.w #$000C : BNE .bottle2NotEquipped
LDA.w #$0002 LDA.w #$0002 : JMP .loadBottleContent
JMP .loadBottleContent
.bottle2NotEquipped .bottle2NotEquipped
CPX.w #$0012 : BNE .bottle3NotEquipped CPX.w #$0012 : BNE .bottle3NotEquipped
LDA.w #$0003 LDA.w #$0003 : JMP .loadBottleContent
JMP .loadBottleContent
.bottle3NotEquipped .bottle3NotEquipped
CPX.w #$0018 : BNE .bottleNotEquipped CPX.w #$0018 : BNE .bottleNotEquipped
LDA.w #$0004 LDA.w #$0004
@@ -291,6 +289,21 @@ HUD_UpdateItemBox:
.fluteNotEquipped .fluteNotEquipped
CPX.w #$0003 : BNE .hookshotNotEquipped
LDA.w GoldstarOrHookshot
SEC : SBC.b #$01
.hookshotNotEquipped
JSR HUD_DrawItem
.noEquippedItem
RTS
}
HUD_DrawItem:
{
STA $02 STA $02
TXA : DEC A : ASL A : TAX TXA : DEC A : ASL A : TAX
LDA $FA93, X : STA $04 LDA $FA93, X : STA $04
@@ -302,8 +315,6 @@ HUD_UpdateItemBox:
LDA ($04), Y : STA $7EC7B6 : INY #2 LDA ($04), Y : STA $7EC7B6 : INY #2
LDA ($04), Y : STA $7EC7B8 : INY #2 LDA ($04), Y : STA $7EC7B8 : INY #2
.noEquippedItem
RTS RTS
} }
@@ -377,6 +388,8 @@ HexToDecimal:
RTS RTS
} }
pushpc
; ============================================================================= ; =============================================================================
; $6FA93-$6FAFC DATA ; $6FA93-$6FAFC DATA
@@ -488,62 +501,23 @@ org $0DF811
dw $20F5, $20F5, $20F5, $20F5 dw $20F5, $20F5, $20F5, $20F5
dw $30B4, $30B5, $30C4, $30C5 dw $30B4, $30B5, $30C4, $30C5
org $0DF669
dw $24F5, $24F6, $24C0, $24F5 ; Hookshot
dw $2C17, $3531, $2D40, $3541 ; Ball & Chain
; ============================================================================= ; =============================================================================
; $6FE77-$6FFC0 ; $6FE77-$6FFC0
org $0DFE77 org $0DFE77
HUD_Tilemap: HUD_Tilemap:
incbin tilemaps/hud.tilemap incbin tilemaps/hud.tilemap
; {
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F
; ; magic bar top part ; #_02816A: JSL RebuildHUD_Keys
; dw $200B, $200C, $200C, $200C, $200C, $200C
; ; item frame top part
; dw $206C, $206D, $206E, $206F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F ; LoadUnderworldRoomRebuildHUD:
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F ; #_028118: LDA.b #$00 ; reset mosaic level
; dw $207F
; ; rupee icon key icon
; dw $3CA8, $FCA8, $207F, $2071, $207F
; ; magic bar
; dw $201B, $344B
; dw $344B, $344B, $344B, $344B
; ; item frame left part
; dw $20DE, $207F, $207F, $20DF
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F
; ; magic bar bottom part
; dw $A00B, $A00C
; dw $A00C, $A00C, $A00C, $A00C
; ; item frame right part
; dw $20EE, $207F, $207F, $20EF
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F
; ; item frame bottom part
; dw $207C, $207D, $207E, $201D
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
; dw $207F
; }
; ============================================================================== ; ==============================================================================
@@ -636,4 +610,6 @@ FloorIndicator:
SEP #$30 SEP #$30
RTL RTL
} }
pullpc

View File

@@ -64,6 +64,7 @@ PlaytimeLabel:
dw "PLAYTIME:_" dw "PLAYTIME:_"
DrawPlaytimeLabel: DrawPlaytimeLabel:
{
LDX.w #$10 LDX.w #$10
.draw2 .draw2
@@ -71,7 +72,25 @@ DrawPlaytimeLabel:
STA.w $1692, X STA.w $1692, X
DEX : DEX : BPL .draw2 DEX : DEX : BPL .draw2
; ; Starting at 0 = $2570 we draw the hours
; ; Get hours
; LDA $7EE000
; ; CLC : ADC #$2570
; STA.w $1692+#$12 ; First digit of hour
; STA.w $1692+#$14 ; Second digit of hour
; ; Get minutes
; LDA $7EE001
; ; CLC : ADC #$2570
; STA.w $1692+#$16 ; First digit of minute
; STA.w $1692+#$18 ; Second digit of minute
RTS RTS
}
; ============================================================================= ; =============================================================================
@@ -110,16 +129,27 @@ Menu_BottleItems:
dw "____FAIRY_____ " dw "____FAIRY_____ "
dw "__GOOD_BEE____ " dw "__GOOD_BEE____ "
Menu_GoldstarLabel:
dw "__GOLD_STAR___ "
Menu_SongNames:
dw "SONG:_SOARING_ "
dw "SONG:_HEALING_ "
dw "SONG:_STORMS__ "
Menu_DrawItemName: Menu_DrawItemName:
{ {
SEP #$30 SEP #$30
LDA.w $0202 : CMP.b #$03 : BEQ .goldstar
LDA.w $0202 : CMP.b #$0D : BEQ .ocarina
; Check if it's a bottle ; Check if it's a bottle
LDA.w $0202 : CMP.b #$06 : BEQ .bottle_1 LDA.w $0202 : CMP.b #$06 : BEQ .bottle_1
LDA.w $0202 : CMP.b #$0C : BEQ .bottle_2 LDA.w $0202 : CMP.b #$0C : BEQ .bottle_2
LDA.w $0202 : CMP.b #$12 : BEQ .bottle_3 LDA.w $0202 : CMP.b #$12 : BEQ .bottle_3
LDA.w $0202 : CMP.b #$18 : BEQ .bottle_4 LDA.w $0202 : CMP.b #$18 : BEQ .bottle_4
.draw_item
REP #$30 REP #$30
LDA.w $0202 : BEQ .no_items LDA.w $0202 : BEQ .no_items
DEC : ASL #5 : TAX DEC : ASL #5 : TAX
LDY.w #$000 LDY.w #$000
@@ -141,16 +171,53 @@ Menu_DrawItemName:
REP #$30 : LDX #$0002 : JMP .draw_bottle REP #$30 : LDX #$0002 : JMP .draw_bottle
.bottle_4 .bottle_4
REP #$30 : LDX #$0003 REP #$30 : LDX #$0003
.draw_bottle .draw_bottle
LDA.l $7EF35C, X : AND.w #$00FF JSR DrawBottleNames
DEC : ASL #5 : TAX
LDY.w #$0000
.draw_bottle_loop
LDA.w Menu_BottleItems, X : STA.w $1692, Y
INX #2 : INY #2
CPY #$001C : BCC .draw_bottle_loop
RTS RTS
.goldstar
LDA GoldstarOrHookshot : CMP.b #$02 : BNE .draw_item
JSR MaybeDrawGoldstarName
RTS
.ocarina
REP #$30
; Check the timer and see if we should draw the item name
LDA $1A : AND.w #$00FF : CMP #$0080 : BCC .draw_item
LDA $030F : BEQ .draw_item
LDA $030F : AND.w #$00FF : DEC : ASL #5 : TAX
LDY.w #$0000
.draw_ocarina_loop
LDA.w Menu_SongNames, X : STA.w $1692, Y
INX #2 : INY #2 : CPY #$001C : BCC .draw_ocarina_loop
RTS
}
DrawBottleNames:
{
LDA.l $7EF35C, X : AND.w #$00FF
DEC : ASL #5 : TAX
LDY.w #$0000
.draw_bottle_loop
LDA.w Menu_BottleItems, X : STA.w $1692, Y
INX #2 : INY #2
CPY #$001C : BCC .draw_bottle_loop
RTS
}
MaybeDrawGoldstarName:
{
REP #$30
LDX.w #$0000
LDY.w #$0000
.draw_goldstar_loop
LDA.w Menu_GoldstarLabel, X
STA.w $1692, X : INX #2 : INY #2 : CPY #$001C : BCC .draw_goldstar_loop
RTS
} }
; ============================================================================= ; =============================================================================