Update goldstar to work with hookshot, HUD and menu
This commit is contained in:
@@ -55,9 +55,8 @@ pullpc
|
||||
|
||||
HookMaskCheck:
|
||||
{
|
||||
LDA.w $0202 : AND.w #$00FF : CMP.w #$000E : BNE .not_mask
|
||||
; morning star graphics oam tile pattern id
|
||||
LDA.w $0109 : AND #$FF00 : ORA.w #$004A
|
||||
LDA GoldstarOrHookshot : AND.w #$00FF : CMP.w #$0002 : BNE .not_mask
|
||||
LDA.w $0109 : AND #$FF00 : ORA.w #$004A ; morning star graphics oam tile pattern id
|
||||
RTL
|
||||
.not_mask
|
||||
; return hookshot graphics oam tile pattern id
|
||||
@@ -95,7 +94,7 @@ pullpc
|
||||
; $22D4C0 - Hooked into AncillaDraw_Hookshot @ _08BF2D
|
||||
BallChain_DrawOrReturn:
|
||||
{
|
||||
LDA $0202 : CMP #$0E : BEQ +
|
||||
LDA GoldstarOrHookshot : CMP #$02 : BEQ +
|
||||
LDA #$00 : STA ($92),Y
|
||||
RTL
|
||||
+ ; $22D4CD
|
||||
@@ -114,13 +113,13 @@ pullpc
|
||||
BallChain_ExtraCollisionLogic:
|
||||
{
|
||||
TAX
|
||||
LDA $0202 : CMP #$0E : BNE + ; Check if turtle
|
||||
TXA : CMP #$0A : BNE ++ ; $22D4F3
|
||||
LDA #$FF : BRA ++ ; $22D4F3
|
||||
LDA GoldstarOrHookshot : CMP #$02 : BNE + ; Check if using goldstar
|
||||
TXA : CMP #$0A : BNE ++
|
||||
LDA #$FF : BRA ++
|
||||
+ ; $22D4F2
|
||||
TXA
|
||||
++ ; $22D4F3
|
||||
CMP #$FF : BEQ +++ ; $22D4FB
|
||||
CMP #$FF : BEQ +++
|
||||
JML $08BF10 ; AncillaDraw_Hookshot - JSR Ancilla_SetOAM_XY, skips hookshot char
|
||||
+++ ; $22D4FB
|
||||
JML $08BF32 ; AncillaDraw_Hookshot_skip
|
||||
@@ -241,7 +240,7 @@ pullpc
|
||||
; Sets Link state to 0x00 and resets the hookshot timer
|
||||
BallChain_ResetTimer:
|
||||
{
|
||||
LDA $0202 : CMP #$0E : BNE +
|
||||
LDA GoldstarOrHookshot : CMP #$02 : BNE +
|
||||
STZ $7A ; Clear the timer
|
||||
+
|
||||
STZ $5D ; Return to LinkState_Default
|
||||
@@ -262,7 +261,7 @@ pullpc
|
||||
; Natively NOPs out the bytes 08BFDA - 08BFEA
|
||||
BallChain_DrawChainOrHookshot:
|
||||
{
|
||||
LDA $0202 : CMP #$0E : BEQ +
|
||||
LDA GoldstarOrHookshot : CMP #$02 : BEQ +
|
||||
LDA #$19 : STA ($90),Y
|
||||
JSR BallChainOrHookshot_Modifier ; $D820
|
||||
ORA.b #$02
|
||||
@@ -292,7 +291,7 @@ struct HookshotSpriteData $08BD4C
|
||||
endstruct
|
||||
|
||||
pushpc
|
||||
org $8BF1B ; AncillaDraw_HookshotChain
|
||||
org $08BF1B ; AncillaDraw_HookshotChain
|
||||
JSL Goldstar_SetChainProperties
|
||||
NOP #3
|
||||
pullpc
|
||||
@@ -300,7 +299,7 @@ pullpc
|
||||
; $22D850 - Modify the palette
|
||||
Goldstar_SetChainProperties:
|
||||
{
|
||||
LDA $0202 : CMP #$0E : BEQ .ball_chain
|
||||
LDA GoldstarOrHookshot : CMP #$02 : BEQ .ball_chain
|
||||
LDA HookshotSpriteData.prop, X
|
||||
ORA.b #$02 : ORA.b $65
|
||||
RTL
|
||||
@@ -323,14 +322,14 @@ pullpc
|
||||
Link_OAM_Actually:
|
||||
{
|
||||
REP #$20
|
||||
LDA $0202 : AND #$00FF : CMP #$000E : BEQ +
|
||||
LDA $0202 : AND #$00FF : CMP #$0003 : BEQ +
|
||||
LDA $839B,Y
|
||||
RTL
|
||||
+ ; $22D892
|
||||
LDA $839B,Y : CMP #$221A : BEQ ++
|
||||
RTL
|
||||
++ ; $22D89B
|
||||
LDA $0202 : AND #$00FF : CMP #$000E : BEQ +++
|
||||
LDA GoldstarOrHookshot : AND #$00FF : CMP #$0002 : BEQ +++
|
||||
LDA $839B,Y
|
||||
RTL
|
||||
+++ ; $22D8AA
|
||||
@@ -383,6 +382,8 @@ HookshotChain_AncillaDraw:
|
||||
JMP Routine_22D9A0 ; $D9A0
|
||||
+++++++ ; 22D951
|
||||
CLC : CMP #$05 : BCC ++++++++
|
||||
LDA $F8 : CMP.b #$40 : BEQ +
|
||||
|
||||
JMP Routine_22D9A0 ; $D9A0
|
||||
++++++++ ; 22D959
|
||||
JMP Routine_22DBD0 ; $DBD0
|
||||
@@ -700,11 +701,10 @@ org $08BDFD
|
||||
pullpc
|
||||
|
||||
; 22DC50
|
||||
; Hooked into Hookshot_Extending_ignore_collision @ 08BDFD
|
||||
HookshotOrBallChain_Extending_ignore_collision:
|
||||
{
|
||||
; Ball Chain Timer
|
||||
LDA $7A : CMP #$00 : BNE + ; $22DC5E
|
||||
LDA $7A : CMP #$00 : BNE +
|
||||
JSL Hookshot_CheckTileCollision ; $07D576
|
||||
JML $08BE01 ; Hookshot_Extending_ignore_collision continue
|
||||
+ ; 22DC5E
|
||||
@@ -914,20 +914,55 @@ Hookshot_Init:
|
||||
|
||||
Goldstar_Begin:
|
||||
{
|
||||
BIT $3A : BVS .return
|
||||
LDA $6C : BNE .return
|
||||
|
||||
JSL Link_CheckNewY_ButtonPress_Long : BCC .return
|
||||
|
||||
JSL CheckForBallChain
|
||||
JSL Hookshot_Init
|
||||
JSL BallChain_StartAnimationFlag
|
||||
LDY.b #$03
|
||||
LDA.b #$1F ; ANCILLA 1F
|
||||
LDY.b #$03 : LDA.b #$1F ; ANCILLA 1F
|
||||
JSL $099B10 ; AncillaAdd_Hookshot
|
||||
JSL TransferGFXinRAM
|
||||
|
||||
.return
|
||||
|
||||
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
|
||||
@@ -230,10 +230,15 @@ DrawYItems:
|
||||
LDY.w #BoomsGFX
|
||||
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)
|
||||
LDY.w #HookGFX
|
||||
JSR DrawMenuItem
|
||||
.no_hookshot
|
||||
|
||||
LDA.l $7EF343
|
||||
CMP.w #$00 : BEQ .no_bomb
|
||||
@@ -288,18 +293,18 @@ DrawYItems:
|
||||
JSR DrawMenuItem
|
||||
|
||||
;; next row
|
||||
|
||||
LDA.w #$7EF34C
|
||||
LDA.l $7EF34C : CMP.w #$0000 : BEQ .no_ocarina
|
||||
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)
|
||||
LDY.w #OcarinaGFX
|
||||
JSR DrawMenuItem
|
||||
.no_ocarina
|
||||
|
||||
;LDA.w #$7EF34E
|
||||
LDA.l $7EF34E
|
||||
CMP.w #$00 : BEQ .no_book
|
||||
LDA.w #$01
|
||||
STA.w ShortSpoof
|
||||
LDA.w #ShortSpoof
|
||||
LDA.l $7EF34E : CMP.w #$00 : BEQ .no_book
|
||||
LDA.w #$01 : STA.w ShortSpoof : LDA.w #ShortSpoof
|
||||
LDX.w #menu_offset(13,6)
|
||||
LDY.w #BookGFX
|
||||
JSR DrawMenuItem
|
||||
|
||||
@@ -27,7 +27,7 @@ BoomsGFX:
|
||||
|
||||
HookGFX:
|
||||
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:
|
||||
dw $2CD4, $2CD5, $2CE4, $2CE5
|
||||
dw $2CD4, $2CD5, $2CE4, $2CE5
|
||||
dw $2CD4, $2CD5, $2CE4, $2CE5
|
||||
dw $3CD4, $3CD5, $3CE4, $3CE5 ; Green
|
||||
dw $24D4, $24D5, $24E4, $24E5 ; Red
|
||||
|
||||
; -------------------------------------
|
||||
|
||||
|
||||
@@ -273,12 +273,10 @@ HUD_UpdateItemBox:
|
||||
JMP .loadBottleContent
|
||||
.bottle1NotEquipped
|
||||
CPX.w #$000C : BNE .bottle2NotEquipped
|
||||
LDA.w #$0002
|
||||
JMP .loadBottleContent
|
||||
LDA.w #$0002 : JMP .loadBottleContent
|
||||
.bottle2NotEquipped
|
||||
CPX.w #$0012 : BNE .bottle3NotEquipped
|
||||
LDA.w #$0003
|
||||
JMP .loadBottleContent
|
||||
LDA.w #$0003 : JMP .loadBottleContent
|
||||
.bottle3NotEquipped
|
||||
CPX.w #$0018 : BNE .bottleNotEquipped
|
||||
LDA.w #$0004
|
||||
@@ -291,6 +289,21 @@ HUD_UpdateItemBox:
|
||||
|
||||
.fluteNotEquipped
|
||||
|
||||
CPX.w #$0003 : BNE .hookshotNotEquipped
|
||||
LDA.w GoldstarOrHookshot
|
||||
SEC : SBC.b #$01
|
||||
|
||||
.hookshotNotEquipped
|
||||
|
||||
JSR HUD_DrawItem
|
||||
|
||||
.noEquippedItem
|
||||
|
||||
RTS
|
||||
}
|
||||
|
||||
HUD_DrawItem:
|
||||
{
|
||||
STA $02
|
||||
TXA : DEC A : ASL A : TAX
|
||||
LDA $FA93, X : STA $04
|
||||
@@ -302,8 +315,6 @@ HUD_UpdateItemBox:
|
||||
LDA ($04), Y : STA $7EC7B6 : INY #2
|
||||
LDA ($04), Y : STA $7EC7B8 : INY #2
|
||||
|
||||
.noEquippedItem
|
||||
|
||||
RTS
|
||||
}
|
||||
|
||||
@@ -377,6 +388,8 @@ HexToDecimal:
|
||||
RTS
|
||||
}
|
||||
|
||||
pushpc
|
||||
|
||||
; =============================================================================
|
||||
|
||||
; $6FA93-$6FAFC DATA
|
||||
@@ -488,62 +501,23 @@ org $0DF811
|
||||
dw $20F5, $20F5, $20F5, $20F5
|
||||
dw $30B4, $30B5, $30C4, $30C5
|
||||
|
||||
org $0DF669
|
||||
dw $24F5, $24F6, $24C0, $24F5 ; Hookshot
|
||||
dw $2C17, $3531, $2D40, $3541 ; Ball & Chain
|
||||
|
||||
; =============================================================================
|
||||
; $6FE77-$6FFC0
|
||||
|
||||
|
||||
|
||||
org $0DFE77
|
||||
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
|
||||
; dw $200B, $200C, $200C, $200C, $200C, $200C
|
||||
; ; item frame top part
|
||||
; dw $206C, $206D, $206E, $206F
|
||||
; #_02816A: JSL RebuildHUD_Keys
|
||||
|
||||
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
|
||||
; dw $207F, $207F, $207F, $207F, $207F, $207F, $207F, $207F
|
||||
; 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
|
||||
; }
|
||||
; LoadUnderworldRoomRebuildHUD:
|
||||
; #_028118: LDA.b #$00 ; reset mosaic level
|
||||
|
||||
; ==============================================================================
|
||||
|
||||
@@ -636,4 +610,6 @@ FloorIndicator:
|
||||
SEP #$30
|
||||
|
||||
RTL
|
||||
}
|
||||
}
|
||||
|
||||
pullpc
|
||||
@@ -64,6 +64,7 @@ PlaytimeLabel:
|
||||
dw "PLAYTIME:_"
|
||||
|
||||
DrawPlaytimeLabel:
|
||||
{
|
||||
LDX.w #$10
|
||||
|
||||
.draw2
|
||||
@@ -71,7 +72,25 @@ DrawPlaytimeLabel:
|
||||
STA.w $1692, X
|
||||
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
|
||||
}
|
||||
|
||||
; =============================================================================
|
||||
|
||||
@@ -110,16 +129,27 @@ Menu_BottleItems:
|
||||
dw "____FAIRY_____ "
|
||||
dw "__GOOD_BEE____ "
|
||||
|
||||
Menu_GoldstarLabel:
|
||||
dw "__GOLD_STAR___ "
|
||||
|
||||
Menu_SongNames:
|
||||
dw "SONG:_SOARING_ "
|
||||
dw "SONG:_HEALING_ "
|
||||
dw "SONG:_STORMS__ "
|
||||
|
||||
Menu_DrawItemName:
|
||||
{
|
||||
SEP #$30
|
||||
LDA.w $0202 : CMP.b #$03 : BEQ .goldstar
|
||||
LDA.w $0202 : CMP.b #$0D : BEQ .ocarina
|
||||
; Check if it's a bottle
|
||||
LDA.w $0202 : CMP.b #$06 : BEQ .bottle_1
|
||||
LDA.w $0202 : CMP.b #$0C : BEQ .bottle_2
|
||||
LDA.w $0202 : CMP.b #$12 : BEQ .bottle_3
|
||||
LDA.w $0202 : CMP.b #$18 : BEQ .bottle_4
|
||||
|
||||
.draw_item
|
||||
REP #$30
|
||||
|
||||
LDA.w $0202 : BEQ .no_items
|
||||
DEC : ASL #5 : TAX
|
||||
LDY.w #$000
|
||||
@@ -141,16 +171,53 @@ Menu_DrawItemName:
|
||||
REP #$30 : LDX #$0002 : JMP .draw_bottle
|
||||
.bottle_4
|
||||
REP #$30 : LDX #$0003
|
||||
|
||||
.draw_bottle
|
||||
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
|
||||
JSR DrawBottleNames
|
||||
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
|
||||
}
|
||||
|
||||
; =============================================================================
|
||||
|
||||
Reference in New Issue
Block a user