update wolfos movement ai

This commit is contained in:
scawful
2024-05-29 11:41:44 -04:00
parent 0e64fee271
commit 8019c55c76

View File

@@ -63,40 +63,73 @@ Sprite_Wolfos_Prep:
RTL RTL
} }
Sprite_Wolfos_CheckIfDefeated:
{
LDA SprHealth, X : BEQ .defeated
RTS
.defeated
RTS
}
; ========================================================= ; =========================================================
macro Wolfos_Move() macro Wolfos_Move()
JSL Sprite_DamageFlash_Long JSL Sprite_DamageFlash_Long
JSL Sprite_CheckDamageFromPlayerLong JSL Sprite_CheckDamageFromPlayerLong : BCC +
+
JSL Sprite_PlayerCantPassThrough JSL Sprite_PlayerCantPassThrough
JSL Sprite_BounceFromTileCollision JSL Sprite_BounceFromTileCollision
JSL Sprite_Move JSL Sprite_Move
JSR Wolfos_Move JSR Wolfos_DecideAction
endmacro endmacro
Wolfos_Move: Wolfos_DecideAction:
{ {
JSL Sprite_ApplySpeedTowardsPlayer LDA SprTimerA, X : BNE .decide_new_action
RTS
.decide_new_action
JSL Sprite_IsToRightOfPlayer : TYA : BEQ .right JSL Sprite_DirectionToFacePlayer
%GotoAction(3) ; Walk Left LDA $0E ; y distance from player
RTS STA SprMiscC, X
.right LDA $0F ; x distance from player
%GotoAction(2) ; Walk Right STA SprMiscB, X
RTS
JSL Sprite_IsBelowPlayer : TYA : BEQ .above_player LDA SprMiscC, X
%GotoAction(1) ; Attack Back CMP #$10 ; Check if y distance is significant
RTS BCS .adjust_y
LDA SprMiscB, X
CMP #$10 ; Check if x distance is significant
BCS .adjust_x
.adjust_y
JSL Sprite_IsBelowPlayer
TYA
BEQ .above_player
%GotoAction(1) ; Attack Back
RTS
.above_player .above_player
%GotoAction(0) ; Attack Forward %GotoAction(0) ; Attack Forward
RTS RTS
.adjust_x
JSL Sprite_IsToRightOfPlayer
TYA
BEQ .right
%GotoAction(3) ; Walk Left
RTS
.right
%GotoAction(2) ; Walk Right
RTS
} }
!NormalSpeed = $06 !NormalSpeed = $08
!AttackSpeed = $0B !AttackSpeed = $0D
Sprite_Wolfos_Main: Sprite_Wolfos_Main:
{ {
@@ -109,13 +142,18 @@ Sprite_Wolfos_Main:
dw Wolfos_WalkLeft ; 0x03 dw Wolfos_WalkLeft ; 0x03
dw Wolfos_AttackRight ; 0x04 dw Wolfos_AttackRight ; 0x04
dw Wolfos_AttackLeft ; 0x05 dw Wolfos_AttackLeft ; 0x05
dw Wolfos_Subdued
Wolfos_AttackForward: Wolfos_AttackForward:
{ {
%PlayAnimation(0, 2, 10) %PlayAnimation(0, 2, 10)
%Wolfos_Move() %Wolfos_Move()
LDA #!NormalSpeed : STA.w SprYSpeed, X LDA #!NormalSpeed
STA.w SprYSpeed, X
LDA #$30
STA SprTimerA, X
RTS RTS
} }
@@ -125,74 +163,118 @@ Sprite_Wolfos_Main:
%PlayAnimation(3, 5, 10) %PlayAnimation(3, 5, 10)
%Wolfos_Move() %Wolfos_Move()
LDA #-!NormalSpeed : STA.w SprYSpeed, X LDA #-!NormalSpeed
STA.w SprYSpeed, X
LDA #$30
STA SprTimerA, X
RTS RTS
} }
Wolfos_WalkRight: Wolfos_WalkRight:
{ {
%StartOnFrame(6)
%PlayAnimation(6, 8, 10) %PlayAnimation(6, 8, 10)
%Wolfos_Move() %Wolfos_Move()
JSL Sprite_IsBelowPlayer : TYA : BEQ .above_player
%GotoAction(1) ; Attack Back
RTS
.above_player LDA #!NormalSpeed
%GotoAction(0) ; Attack Forward STA.w SprXSpeed, X
RTS STZ.w SprYSpeed, X
LDA #!NormalSpeed : STA.w SprXSpeed, X
JSL GetRandomInt : AND.b #$3F : BNE + JSL GetRandomInt : AND.b #$3F : BNE +
%GotoAction(4) %GotoAction(4)
+ +
LDA #$30
STA SprTimerA, X
RTS RTS
} }
Wolfos_WalkLeft: Wolfos_WalkLeft:
{ {
%StartOnFrame(9)
%PlayAnimation(9, 11, 10) %PlayAnimation(9, 11, 10)
%Wolfos_Move() %Wolfos_Move()
JSL Sprite_IsBelowPlayer : TYA : BEQ .above_player LDA #-!NormalSpeed
%GotoAction(1) ; Attack Back STA.w SprXSpeed, X
RTS STZ.w SprYSpeed, X
.above_player
%GotoAction(0) ; Attack Forward
RTS
LDA #-!NormalSpeed : STA.w SprXSpeed, X
JSL GetRandomInt : AND.b #$3F : BNE + JSL GetRandomInt : AND.b #$3F : BNE +
%GotoAction(5) %GotoAction(5)
+ +
LDA #$30
STA SprTimerA, X
RTS RTS
} }
Wolfos_AttackRight: Wolfos_AttackRight:
{ {
%StartOnFrame(12)
%PlayAnimation(12, 13, 10) %PlayAnimation(12, 13, 10)
%Wolfos_Move() JSL Sprite_PlayerCantPassThrough
JSL Sprite_BounceFromTileCollision
LDA #!AttackSpeed : STA.w SprXSpeed, X JSL Sprite_Move
LDA #!AttackSpeed
STA.w SprXSpeed, X
LDA SprTimerA, X : BNE +
%GotoAction(2)
+
RTS RTS
} }
Wolfos_AttackLeft: Wolfos_AttackLeft:
{ {
%StartOnFrame(14)
%PlayAnimation(14, 15, 10) %PlayAnimation(14, 15, 10)
%Wolfos_Move() JSL Sprite_PlayerCantPassThrough
JSL Sprite_BounceFromTileCollision
LDA #-!AttackSpeed : STA.w SprXSpeed, X JSL Sprite_Move
LDA #-!AttackSpeed
STA.w SprXSpeed, X
LDA SprTimerA, X : BNE +
%GotoAction(3)
+
RTS
}
Wolfos_Subdued:
{
%PlayAnimation(0, 0, 10)
STZ.w SprXSpeed, X
STZ.w SprYSpeed, X
; Run the dialogue and wait for a song of healing flag to be set
RTS RTS
} }
} }
Sprite_TimerAction:
{
LDA.w SprTimerA, X : BEQ .reset_timer
DEC.w SprTimerA, X
RTS
.reset_timer
LDA #$30 : STA SprTimerA, X
%GotoAction(0) ; Default to attack forward
RTS
}
; ========================================================= ; =========================================================
; Animation Frame ; Animation Frame
; 0-2 Attack Forward ; 0-2 Attack Forward