update wolfos movement ai
This commit is contained in:
@@ -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
|
||||||
|
|||||||
Reference in New Issue
Block a user