Cleanup goldstar.asm

This commit is contained in:
scawful
2024-10-01 17:36:55 -04:00
parent 1c677e0470
commit 3c33b015c4

View File

@@ -9,18 +9,18 @@
pullpc pullpc
TransferGFXinRAM: TransferGFXinRAM:
{ {
PHX ; keep X PHX ; keep X
PHP ; keep processor byte PHP ; keep processor byte
REP #$20 ; 16bit is a bit faster REP #$20 ; 16bit is a bit faster
LDX #$80 LDX #$80
-- --
LDA.l .morningstargfx, X : STA.l $7EA180, X LDA.l .morningstargfx, X : STA.l $7EA180, X
DEX : DEX : BPL -- DEX : DEX : BPL --
PLP PLP
PLX PLX
RTL RTL
.morningstargfx .morningstargfx
incbin morningstar.bin incbin morningstar.bin
@@ -30,13 +30,11 @@ pushpc
; OAM Draw Pattern for spikeball gfx ; OAM Draw Pattern for spikeball gfx
org $0085C4 org $0085C4
dw $0040 dw $0040
pullpc
; ========================================================= ; =========================================================
; Zarby Code ; Zarby Code
; Handles the layout of OAM tile patterns for the hookshot ; Handles the layout of OAM tile patterns for the hookshot
pushpc
org $0DABA2 ; LinkOAM_SetWeaponVRAMOffsets org $0DABA2 ; LinkOAM_SetWeaponVRAMOffsets
JSL HookMaskCheck JSL HookMaskCheck
BRA LinkOAM_SetWeaponVRAMOffsets_not_rod_hook BRA LinkOAM_SetWeaponVRAMOffsets_not_rod_hook
@@ -54,7 +52,7 @@ HookMaskCheck:
{ {
LDA.w GoldstarOrHookshot : AND.w #$00FF : CMP.w #$0002 : BNE .not_mask LDA.w GoldstarOrHookshot : AND.w #$00FF : CMP.w #$0002 : BNE .not_mask
LDA $0202 : AND.w #$00FF : CMP.w #$0003 : BNE .not_mask LDA $0202 : AND.w #$00FF : CMP.w #$0003 : BNE .not_mask
; morning star graphics oam tile pattern id ; morning star graphics oam tile pattern id
LDA.w $0109 : AND #$FF00 : ORA.w #$004A LDA.w $0109 : AND #$FF00 : ORA.w #$004A
RTL RTL
.not_mask .not_mask
@@ -73,7 +71,7 @@ CheckForBallChain:
{ {
LDA #$13 : STA $5D ; Set hookshot state LDA #$13 : STA $5D ; Set hookshot state
LDA #$FF : STA $7A ; Start the rotation Timer LDA #$FF : STA $7A ; Start the rotation Timer
JMP LinkItem_BallChain_GfxTransfer ; $D520 JMP LinkItem_BallChain_GfxTransfer ; $D520
RTL RTL
} }
@@ -88,7 +86,7 @@ pullpc
; $22D4C0 - Hooked into AncillaDraw_Hookshot @ _08BF2D ; $22D4C0 - Hooked into AncillaDraw_Hookshot @ _08BF2D
BallChain_DrawOrReturn: BallChain_DrawOrReturn:
{ {
LDA.w GoldstarOrHookshot : CMP #$02 : BEQ + LDA.w GoldstarOrHookshot : CMP #$02 : BEQ +
LDA #$00 : STA ($92),Y LDA #$00 : STA ($92),Y
RTL RTL
+ ; $22D4CD + ; $22D4CD
@@ -103,11 +101,11 @@ org $08BF0C
JML BallChain_ExtraCollisionLogic JML BallChain_ExtraCollisionLogic
pullpc pullpc
; $22D4E0 - Hooked into Hookshot_ExtraCollisionLogic @ 08BF0C ; $22D4E0 - Hooked into Hookshot_ExtraCollisionLogic @ 08BF0C
BallChain_ExtraCollisionLogic: BallChain_ExtraCollisionLogic:
{ {
TAX TAX
LDA.w GoldstarOrHookshot : CMP #$02 : BNE + ; Check if using goldstar LDA.w GoldstarOrHookshot : CMP #$02 : BNE + ; Check if using goldstar
TXA : CMP #$0A : BNE ++ TXA : CMP #$0A : BNE ++
LDA #$FF : BRA ++ LDA #$FF : BRA ++
+ ; $22D4F2 + ; $22D4F2
@@ -115,7 +113,7 @@ BallChain_ExtraCollisionLogic:
++ ; $22D4F3 ++ ; $22D4F3
CMP #$FF : BEQ +++ CMP #$FF : BEQ +++
; AncillaDraw_Hookshot - JSR Ancilla_SetOAM_XY, skips hookshot char ; AncillaDraw_Hookshot - JSR Ancilla_SetOAM_XY, skips hookshot char
JML $08BF10 JML $08BF10
+++ ; $22D4FB +++ ; $22D4FB
JML $08BF32 ; AncillaDraw_Hookshot_skip JML $08BF32 ; AncillaDraw_Hookshot_skip
@@ -129,10 +127,9 @@ LinkItem_BallChain_GfxTransfer:
; Check link direction ; Check link direction
LDA $2F : CMP #$04 : BEQ .transfer_gfx_sideways LDA $2F : CMP #$04 : BEQ .transfer_gfx_sideways
CMP #$06 : BEQ .transfer_gfx_sideways CMP #$06 : BEQ .transfer_gfx_sideways
REP #$30 REP #$30
LDA #$0040 : LDX #GFX_D600 : LDY #$9AC0 LDA #$0040 : LDX #GFX_D600 : LDY #$9AC0
MVN $2B, $7E MVN $2B, $7E
LDA #$0040 : LDX #GFX_D640 : LDY #$9B40 LDA #$0040 : LDX #GFX_D640 : LDY #$9B40
MVN $2B, $7E MVN $2B, $7E
PLB : LDA #GFX_D6A0 : STA $4302 PLB : LDA #GFX_D6A0 : STA $4302
@@ -145,12 +142,12 @@ LinkItem_BallChain_GfxTransfer:
LDA #$0040 : LDX #GFX_D640 : LDY #$9B80 LDA #$0040 : LDX #GFX_D640 : LDY #$9B80
MVN $2B, $7E MVN $2B, $7E
PLB : LDA #GFX_D6C0 : STA $4302 PLB : LDA #GFX_D6C0 : STA $4302
.transfer_handle_and_links ; $22D574 .transfer_handle_and_links ; $22D574
LDA #$41E0 : STA $2116 LDA #$41E0 : STA $2116
LDA #$1801 : STA $4300 LDA #$1801 : STA $4300
SEP #$30 SEP #$30
LDA #$80 : STA $2115 LDA #$80 : STA $2115
.transfer_loop .transfer_loop
LDA $4212 : AND #$80 LDA $4212 : AND #$80
@@ -224,7 +221,7 @@ GoldstarHandleGfx:
; ========================================================= ; =========================================================
pushpc pushpc
org $07ABAF org $07ABAF
JSL BallChain_ResetTimer JSL BallChain_ResetTimer
pullpc pullpc
@@ -245,7 +242,7 @@ BallChain_ResetTimer:
; ========================================================= ; =========================================================
pushpc pushpc
org $08BFDA org $08BFDA
JSL BallChain_DrawChainOrHookshot JSL BallChain_DrawChainOrHookshot
NOP #8 NOP #8
@@ -265,7 +262,7 @@ BallChain_DrawChainOrHookshot:
+ ; 22D812 + ; 22D812
LDA #$0E : STA ($90),Y LDA #$0E : STA ($90),Y
JSR BallChainOrHookshot_Modifier ; $D820 JSR BallChainOrHookshot_Modifier ; $D820
ORA.b #$04 ; 02 is gray color ORA.b #$04 ; 02 is gray color
RTL RTL
} }
@@ -290,7 +287,7 @@ pushpc
org $08BF1B ; AncillaDraw_HookshotChain org $08BF1B ; AncillaDraw_HookshotChain
JSL Goldstar_SetChainProperties JSL Goldstar_SetChainProperties
NOP #3 NOP #3
pullpc pullpc
; $22D850 - Modify the palette ; $22D850 - Modify the palette
Goldstar_SetChainProperties: Goldstar_SetChainProperties:
@@ -301,7 +298,7 @@ Goldstar_SetChainProperties:
RTL RTL
.ball_chain ; 22D860 .ball_chain ; 22D860
LDA HookshotSpriteData.prop, X LDA HookshotSpriteData.prop, X
ORA.b #$02 ORA.b #$02
ORA.b $65 ORA.b $65
RTL RTL
} }
@@ -311,7 +308,7 @@ Goldstar_SetChainProperties:
pushpc pushpc
org $0DA6E3 org $0DA6E3
JSL LinkOAM_GoldstarWeaponTiles JSL LinkOAM_GoldstarWeaponTiles
NOP NOP
pullpc pullpc
LinkOAM_WeaponTiles = $0D839B LinkOAM_WeaponTiles = $0D839B
@@ -356,14 +353,14 @@ HookshotChain_AncillaDraw:
+ ; $22D914 + ; $22D914
CMP #$0000 : BNE ++ ; $22D921 CMP #$0000 : BNE ++ ; $22D921
LDA Hookshot_box_size_y, X LDA Hookshot_box_size_y, X
JML $08BFB5 ; AncillaDraw_HookshotChain JML $08BFB5 ; AncillaDraw_HookshotChain
++ ++
JSR CheckForSomariaBlock ; CheckAndClearAncillaId has set the timer in A JSR CheckForSomariaBlock ; CheckAndClearAncillaId has set the timer in A
SEP #$30 SEP #$30
; Compare rotation progress ; Compare rotation progress
CLC : CMP #$FB : BNE +++ CLC : CMP #$FB : BNE +++
LDA #$06 : STA $2143 LDA #$06 : STA $2143
+++ ; 22D930 +++ ; 22D930
BCC ++++ BCC ++++
@@ -371,12 +368,12 @@ HookshotChain_AncillaDraw:
++++ ; 22D935 ++++ ; 22D935
; Compare rotation progress ; Compare rotation progress
CLC : CMP #$AB : BNE +++++ CLC : CMP #$AB : BNE +++++
LDA #$06 : STA $2143 LDA #$06 : STA $2143
+++++ ;22D93F +++++ ;22D93F
; Compare rotation progress ; Compare rotation progress
CLC : CMP #$5B : BNE ++++++ CLC : CMP #$5B : BNE ++++++
LDA #$06 : STA $2143 LDA #$06 : STA $2143
++++++ ;22D949 ++++++ ;22D949
@@ -427,22 +424,22 @@ Routine_22D9A0:
+ ; 22D9B6 + ; 22D9B6
AND #$3F : PHX : TAX AND #$3F : PHX : TAX
LDA Ancilla_GetRadialProjection.multiplier_y, X LDA Ancilla_GetRadialProjection.multiplier_y, X
STA $4202 : JSR Routine_22DAA0 : STA $4203 STA $4202 : JSR Routine_22DAA0 : STA $4203
; Sign of the projected distance. ; Sign of the projected distance.
LDA Ancilla_GetRadialProjection.meta_sign_y, X LDA Ancilla_GetRadialProjection.meta_sign_y, X
STA $02 : STZ $03 STA $02 : STZ $03
; Get Y of projected distance ; Get Y of projected distance
LDA $4216 : ASL LDA $4216 : ASL
LDA $4217 : ADC #$00 : STA $00 : STZ $01 LDA $4217 : ADC #$00 : STA $00 : STZ $01
LDA Ancilla_GetRadialProjection.multiplier_x, X LDA Ancilla_GetRadialProjection.multiplier_x, X
STA $4202 : JSR Routine_22DAA0 : STA $4203 STA $4202 : JSR Routine_22DAA0 : STA $4203
; Sign of the projected distance. ; Sign of the projected distance.
LDA Ancilla_GetRadialProjection.meta_sign_x, X LDA Ancilla_GetRadialProjection.meta_sign_x, X
STA $06 : STZ $07 STA $06 : STZ $07
; Get X of projected distance ; Get X of projected distance
@@ -473,7 +470,7 @@ Routine_22D9A0:
Goldstar_GetPlayerPosY: Goldstar_GetPlayerPosY:
{ {
ADC $20 : CLC : ADC #$000C ADC $20 : CLC : ADC #$000C
CPX #$00 : BNE + CPX #$00 : BNE +
SEC : SBC #$000C SEC : SBC #$000C
RTS RTS
+ ; $22DA3F + ; $22DA3F
@@ -538,7 +535,7 @@ Routine_22DAA0:
CPY #$04 : BNE .alpha CPY #$04 : BNE .alpha
JMP Routine_22DB50 ; $DB50 JMP Routine_22DB50 ; $DB50
.alpha ; 22DAA7 .alpha ; 22DAA7
CPY #$08 : BNE + CPY #$08 : BNE +
LDA #$00 LDA #$00
RTS RTS
+ ; 22DAAE + ; 22DAAE
@@ -546,11 +543,11 @@ Routine_22DAA0:
LDA #$04 LDA #$04
RTS RTS
++ ; 22DAB5 ++ ; 22DAB5
CPY #$10 : BNE +++ CPY #$10 : BNE +++
LDA #$08 LDA #$08
RTS RTS
+++ ; 22DABC +++ ; 22DABC
CPY #$14 : BNE ++++ CPY #$14 : BNE ++++
LDA #$0C LDA #$0C
RTS RTS
++++ ; 22DAC3 ++++ ; 22DAC3
@@ -593,17 +590,17 @@ pullpc
; 22DB00 ; 22DB00
; Hooks into AncillaDraw_HookshotChain @ 08BF94 ; Hooks into AncillaDraw_HookshotChain @ 08BF94
; Hookshot box size ; Hookshot box size
BallChain_TryAncillaDraw: BallChain_TryAncillaDraw:
{ {
; Ball Chain timer should be $FF here on first run ; Ball Chain timer should be $FF here on first run
LDA $7A : AND #$00FF : CMP #$0000 : BEQ + LDA $7A : AND #$00FF : CMP #$0000 : BEQ +
CMP #$0001 : BEQ + CMP #$0001 : BEQ +
SEP #$20 SEP #$20
JML HookshotChain_AncillaDraw ; $22D900 JML HookshotChain_AncillaDraw ; $22D900
+ ; $22DB15 + ; $22DB15
LDA Hookshot_box_size_y,X : BNE ++ LDA Hookshot_box_size_y,X : BNE ++
JML $08BF99 ; AncillaDraw_HookshotChain JML $08BF99 ; AncillaDraw_HookshotChain
++ ; $22DB1F ++ ; $22DB1F
@@ -612,7 +609,7 @@ BallChain_TryAncillaDraw:
; ========================================================= ; =========================================================
pushpc pushpc
org $08F7DC org $08F7DC
JML BallChain_CheckProximityToLink JML BallChain_CheckProximityToLink
pullpc pullpc
@@ -704,16 +701,16 @@ Routine_22DBD0:
LDA $2F : LSR : STA $0C76 LDA $2F : LSR : STA $0C76
ASL : TAX ASL : TAX
LDA $20 : CLC : ADC AncillaAdd_HookshotData.offset_y, X LDA $20 : CLC : ADC AncillaAdd_HookshotData.offset_y, X
STA $00 : STA $04 STA $00 : STA $04
LDA $22 : CLC : ADC AncillaAdd_HookshotData.offset_x, X LDA $22 : CLC : ADC AncillaAdd_HookshotData.offset_x, X
STA $02 : STA $06 STA $02 : STA $06
SEP #$30 SEP #$30
LDA $00 : STA $0BFE : LDA $01 : STA $0C12 ; Ancilla4 Y LDA $00 : STA $0BFE : LDA $01 : STA $0C12 ; Ancilla4 Y
LDA $02 : STA $0C08 : LDA $03 : STA $0C1C ; Ancilla4 X LDA $02 : STA $0C08 : LDA $03 : STA $0C1C ; Ancilla4 X
LDX #$06 : LDA Hookshot_box_size_y,X ; hookshot box size y table LDX #$06 : LDA Hookshot_box_size_y,X ; hookshot box size y table
SEP #$20 SEP #$20
JML $08BFD0 ; AncillaDraw_HookshotChain before Hookshot_CheckProximityToLink JML $08BFD0 ; AncillaDraw_HookshotChain before Hookshot_CheckProximityToLink
} }
@@ -729,7 +726,7 @@ pullpc
HookshotOrBallChain_Extending_ignore_collision: HookshotOrBallChain_Extending_ignore_collision:
{ {
; Ball Chain Timer ; Ball Chain Timer
LDA $7A : CMP #$00 : BNE + 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
@@ -746,7 +743,7 @@ ClearAncillaVariables:
STA $7F580E ; en center x-pos STA $7F580E ; en center x-pos
STA $7F5810 ; en center y-pos STA $7F5810 ; en center y-pos
STA $7F5803 ; rotation state STA $7F5803 ; rotation state
SEP #$30 SEP #$30
RTS RTS
} }
@@ -816,7 +813,7 @@ CheckAndClearAncillaId:
; ========================================================= ; =========================================================
; 22E5A0 ; 22E5A0
; Checks for the Somaria block before moving on ; Checks for the Somaria block before moving on
; TODO: Replace the JMP $E5DB with the proper code ; TODO: Replace the JMP $E5DB with the proper code
; to handle the somaria block case. ; to handle the somaria block case.
CheckForSomariaBlock: CheckForSomariaBlock:
@@ -891,11 +888,11 @@ CheckForSomariaBlast:
BallChain_StartAnimationFlag: BallChain_StartAnimationFlag:
{ {
; Restore vanilla code ; Restore vanilla code
LDA #$01 : STA $037B LDA #$01 : STA $037B
; Check if we are rotating the goldstar ; Check if we are rotating the goldstar
LDA $037A : CMP #$04 : BNE + LDA $037A : CMP #$04 : BNE +
; Animation flag, prevent menu from opening ; Animation flag, prevent menu from opening
LDA #$01 : STA $0112 LDA #$01 : STA $0112
+ +
RTL RTL
} }
@@ -909,7 +906,7 @@ org $07AB95
pullpc pullpc
; 22EF12 ; 22EF12
; Hooked inside LinkState_Hookshotting @ 07AB95 ; Hooked inside LinkState_Hookshotting @ 07AB95
BallChain_Finish: BallChain_Finish:
{ {
STZ.w $0300 : STZ.w $037B ; Restore vanilla STZ.w $0300 : STZ.w $037B ; Restore vanilla
@@ -962,7 +959,7 @@ BeginGoldstarOrHookshot:
JSL AncillaAdd_Hookshot JSL AncillaAdd_Hookshot
JSL TransferGFXinRAM JSL TransferGFXinRAM
RTL RTL
.begin_hookshot .begin_hookshot
JSL Hookshot_Init JSL Hookshot_Init
LDA.b #$13 : STA $5D ; Set hookshot state LDA.b #$13 : STA $5D ; Set hookshot state
@@ -1006,7 +1003,7 @@ CheckForSwitchToGoldstar:
{ {
%CheckNewR_ButtonPress() : BEQ .continue %CheckNewR_ButtonPress() : BEQ .continue
LDA.w GoldstarOrHookshot : CMP.b #$01 : BEQ .set_hookshot LDA.w GoldstarOrHookshot : CMP.b #$01 : BEQ .set_hookshot
LDA.b #$01 : STA.w GoldstarOrHookshot LDA.b #$01 : STA.w GoldstarOrHookshot
JMP .continue JMP .continue
.set_hookshot: .set_hookshot:
LDA.b #$02 : STA.w GoldstarOrHookshot LDA.b #$02 : STA.w GoldstarOrHookshot
@@ -1041,9 +1038,9 @@ org $07AB3A ;$07AB40
RTS RTS
org $008B2A org $008B2A
JML MaybeUploadBirdGraphicsToOam JML MaybeUploadBirdGraphicsToOam
org $07AD49 org $07AD49
LinkHookshot_GetDragged: LinkHookshot_GetDragged:
JSL Goldstar_GetDragged JSL Goldstar_GetDragged