Flowering
¶
EnemyCheck special logic¶
Before this enemy is loaded, it's possible that StartBattle overrides it to a GoldenSeedling
. See the documentation to learn more.
HardMode changes¶
HardMode being true does the following changes:
- In the enemy support move, when healing the enemy, the minimum amount of
hp
they will be healed by is 3 instead of 2
Move selection¶
3 move are possible:
- Supports another enemy party member by either healing their
hp
or inflicting them an AttackUp or DefenseUp condition - A single target aerial strike attack
- A single target tackle attack, UNUSED
Move 1 is always used if all the following conditions are fufilled:
- position is
Flying
(this should always be the case due to the pre move logic always setting it toFlying
) - This enemy isn't the only enemy party member left
- If there's exactly 2 enemy party members, the other enemy party member isn't another
Flowering
If any of the above aren't fufilled, Move 2 is used instead.
Move 3 is never used under normal gameplay, but remains functional. This is because this move requires the position to not be Flying
, but the pre move logic will always set it to Flying
.
Pre move logic¶
The following logic is always done at the start of the actor turn if position isn't Flying
:
checkingdead
is set to a new ChangePosition call to set the position toFlying
(checkingdead
set to null when completed)- Yield all frames until
checkingdead
is null
Move 1 - Enemy support¶
Supports another enemy party member by either healing them or inflicting them an AttackUp or DefenseUp condition. No damages are dealt.
Logic sequence¶
- An enemy party member other than this enemy is searched to see if any has their HPPercent less than 0.6. If any exists, the first one will be selected for healing. Otherwise, a condition infliction will happen on a random enemy party member other than this enemy
Toss2
sound plays on loop usingsounds[9]
with 1.1 pitch and 0.5 volume using PlayMoveSound- Camera moves to look near the targeted enemy party member
- ForceMove called to move to the targetted enemy party member's position + their
cursoroffset
+ (0.0, 0.25, -0.1) with 60.0 frametime using 1 (Walk
) as movestate and 0 (Idle
) as stopstate - Yield all frames until
forcemoving
is done sounds[9]
stopped- y
spin
set to 10.0 Charge14
sound playsPrefabs/Particles/FloweringHeal
particles instantiated rooted positioned at this enemy + theirheight
in y- Yield for 0.85 seconds
- If healing the enemy party member:
- Heal is called to heal the enemy party member with an
hp
amount of theirmaxhp
* 0.075 clamped from 2 to theirmaxhp
(clamped from 3 to theirmaxhp
instead if hardmode is true)
- Heal is called to heal the enemy party member with an
- Otherwise (inflicting a condition on the enemy party member):
StatUp
sound plays- If a 6/10 RNG check passes:
- StatEffect is called on the target enemy party member with type 0 (red up arrow)
- SetCondition called to inflict the AttackUp condition on the target enemy party member for 2 main turns
- Otherwise (4/10 RNG):
- StatEffect is called on the target enemy party member with type 1 (blue up arrow)
- SetCondition called to inflict the DefenseUp condition on the target enemy party member for 2 main turns
- Yield for 0.75 seconds
Prefabs/Particles/FloweringHeal
particles moved offscreen at -9999.0 in y then gets destroyed in 2.0 secondsspin
zeroed out
Move 2 - Aerial strike attack¶
A single target aerial strike attack
DoDamage calls¶
# | Conditions | attacker | target | damageammount | property | overrides | block |
---|---|---|---|---|---|---|---|
1 | Always happen | This enemy | playertargetID after GetSingleTarget |
1 | null | null | commandsuccess |
Logic sequence¶
- GetSingleTarget called
- Camera moves to look near
playerdata[playertargetID]
, but zoomed in Toss2
sound plays via PlayMoveSound on loop usingsounds[9]
with pitch 1.1 and volume 0.5- MoveTowards
playerdata[playertargetID]
+ (2.0, 0.0, -0.15) with 1.5 multiplier and stopstate 100 - Yield all frames until
forcemove
is done sounds[9]
stoppedheight
set to 0.0- y position set to the
height
value before this action - animstate set to 100
FastWoosh
sound plays- Over the course of 1 / 0.055 frames (~18.181818 frames), position moves to its current position + 0.75 in x via a BeizierCurve3 with a ymax of -0.01
- animstate set to 101
- Yield for 0.2 seconds
- animstate set to 100
Turn2
sound plays- Over the course of 1 / 0.07 frames (~14.285714 frames), position lerps to
playerdata[playertargetID]
position + (0.0, 1.0, -0.1) - DoDamage call 1 happens
- Yield for 0.15 seconds
height
set to 0.2- animstate set to 1 (
Walk
) - Over the course of 1 / 0.045 frames (~22.22222 frames), position lerps to its position before the BeizierCurve3 movement earlier
- y position is set to 0.0
height
is restored to its value before this action- Yield for 0.2 seconds
bobrange
reset tostartbf
bobspeed
reset tostartbs
- FlipAngle called with setangle
Move 3 - Tackle attack, UNUSED¶
A single target tackle attack.
NOTE: This move is practically UNUSED, see the move selection section above for more details.
DoDamage calls¶
# | Conditions | attacker | target | damageammount | property | overrides | block |
---|---|---|---|---|---|---|---|
1 | Always happen | This enemy | playertargetID after GetSingleTarget |
2 | null | null | commandsuccess |
Logic sequence¶
- GetSingleTarget called
checkingdead
is set to new coroutine called SeedlingTackle which will setcheckingdead
to null upon completion- Yield all frames until
checkingdead
is null - FlipAngle called with setangle
This is what the coroutine effectively does:
- animstate set to 23 (
Chase
) - Done 2 times:
- Jump called
Jump
sound plays with 0.75 pitch and 1.6 volume- Yield for 0.1 seconds
- Yield all frames until
onground
goes to true - Yield a frame
- CameraFocusTarget called
- MoveTowards
playerdata[playertargetID]
position + 3.0 in x with a 2.0 multiplier and both the current animstate as the walkstate and stopstate - Yield all frames until
forcemove
is done - Yield for 0.2 seconds
Spin10
sound plays- MoveTowards
playerdata[playertargetID]
position + (0.35, 0.0, -0.1) with a 2.5 multiplier and both the current animstate as the walkstate and stopstate - Yield all frames until
forcemove
is done - DoDamage 1 call happens
- Jump called
flip
set to false (withoverrideflip
)- MoveTowards
playerdata[playertargetID]
position + 2.0 in x with a 0.75 multiplier and both the current animstate as the walkstate and stopstate - Yield all frames until
forcemove
is done flip
is set to falsecheckingdead
set to null indicating the caller that the coroutine completed