add Sprite_Octorok_Move based on vanilla logic

This commit is contained in:
scawful
2024-07-27 15:40:32 -04:00
parent 580ca66b78
commit 9ff8118e5f

View File

@@ -29,6 +29,7 @@
!ImperviousArrow = 00 ; 01 = Impervious to arrows !ImperviousArrow = 00 ; 01 = Impervious to arrows
!ImpervSwordHammer = 00 ; 01 = Impervious to sword and hammer attacks !ImpervSwordHammer = 00 ; 01 = Impervious to sword and hammer attacks
!Boss = 00 ; 00 = normal sprite, 01 = sprite is a boss !Boss = 00 ; 00 = normal sprite, 01 = sprite is a boss
%Set_Sprite_Properties(Sprite_Octorok_Prep, Sprite_Octorok_Long) %Set_Sprite_Properties(Sprite_Octorok_Prep, Sprite_Octorok_Long)
; ========================================================= ; =========================================================
@@ -63,6 +64,8 @@ Sprite_Octorok_Prep:
Sprite_Octorok_Main: Sprite_Octorok_Main:
{ {
JSR Sprite_Octorok_Move
LDA.w SprAction, X LDA.w SprAction, X
JSL UseImplicitRegIndexedLocalJumpTable JSL UseImplicitRegIndexedLocalJumpTable
@@ -70,13 +73,11 @@ Sprite_Octorok_Main:
dw Octorok_MoveUp dw Octorok_MoveUp
dw Octorok_MoveLeft dw Octorok_MoveLeft
dw Octorok_MoveRight dw Octorok_MoveRight
dw Octorok_Stone
Octorok_MoveDown: Octorok_MoveDown:
{ {
%PlayAnimation(0,1,10) %PlayAnimation(0,1,10)
RTS RTS
} }
@@ -100,6 +101,92 @@ Sprite_Octorok_Main:
RTS RTS
} }
}
Sprite_Octorok_Move:
{
JSL Sprite_CheckIfRecoiling
JSL Sprite_Move
JSL Sprite_CheckDamageFromPlayer
JSL Sprite_CheckDamageToPlayer
LDA.w SprAction, X : AND.b #$01 : BNE .octorok_used_barrage
LDA.w SprMiscC, X : AND.b #$02 : ASL A : STA.b $00
INC.w SprDelay, X
LDA.w SprDelay, X
LSR A
LSR A
LSR A
AND.b #$03
ORA.b $00
STA.w SprGfx, X
LDA.w SprTimerA, X : BNE .wait
INC.w SprAction,X
LDY.w SprType,X
LDA.w .timer-8,Y : STA.w SprTimerA,X
RTS
.wait
LDY.w SprMiscC, X
LDA.w .speed_x, Y : STA.w $0D50,X
LDA.w .speed_y, Y : STA.w $0D40,X
JSL Sprite_CheckTileCollision
LDA.w $0E70, X : BEQ .no_collision
LDA.w SprMiscC,X : EOR.b #$01 : STA.w SprMiscC,X
BRA .exit
.no_collision
RTS
; ---------------------------------------------------------
.octorok_used_barrage
#_06CF5D: STZ.w $0D50,X
#_06CF60: STZ.w $0D40,X
LDA.w SprTimerA, X : BNE Octorock_ShootEmUp
INC.w SprAction,X
LDA.w SprMiscC,X
PHA
JSL GetRandomInt : AND.b #$3F : ADC.b #$30 : STA.w SprTimerA,X
AND.b #$03 : STA.w SprMiscC,X
PLA
CMP.w SprMiscC,X : BEQ .exit
EOR.w SprMiscC,X : BNE .exit
LDA.b #$08 : STA.w SprTimerB,X
.exit
RTS
.direction
db 3, 2, 0, 1
.speed_x
db 24, -24, 0, 0
.speed_y
db 0, 0, 24, -24
.unused
db $01, $02, $04, $08
.timer
db 60, 128, 160, 128
}
; TODO: Make this randomized behavior to free up Sprite 0A ; TODO: Make this randomized behavior to free up Sprite 0A
Octorock_ShootEmUp: Octorock_ShootEmUp: