IceSphere
¶
This is a MultiSkillMove with Bee
, Beetle
and Moth
and as such, it is assumed that the attacker is one of them and it also means that post-action won't consume their actor turns like normal.
DoCommand calls¶
# | Conditions | timer | commandtype | data |
---|---|---|---|---|
1 | None | 275.0 | SequentialKeys | {6.0, 1.0} |
2 | None | 53.3333321 | PressKeyTimer | {Random integer (cast to float) between 4 and 6 (Confirm, Cancel or Switch input)} |
DoDamage calls¶
# | Conditions | attacker | target | damageammount | property | overrides | block |
---|---|---|---|---|---|---|---|
1 | Done for each enemy party member that fufills these conditions:
|
null | The enemy party member | GetMultiDamage with Bee , Beetle and Moth (halved ceiled if DoCommand 2 set commandsuccess to false) * (barfill if it's 0.9 or higher otherwise, take barfill * 0.8 clamped from 0.25 to 1.0) ceiled clamped from 2 to 99 |
Freeze | empty array | false |
DamageWithinPos calls¶
# | Conditions | playerid | damageammount | property | radius | xonly |
---|---|---|---|---|---|---|
1 | DoCommand 2 set commandsuccess to true and the Confirm input was pressed to explode the iceball. The iceball's position is effectively used as the position since Bee 's position is set to it (see the section below for details) |
0 (Bee ) |
GetMultiDamage with Bee , Beetle and Moth (halved ceiled if DoCommand 2 set commandsuccess to false) / 2.0 * (barfill if it's 0.9 or higher otherwise, take barfill * 0.8 clamped from 0.25 to 1.0) clamped from 1.0 floored |
Freeze | 3.0 | false |
Iceball rolling logic¶
The damaging logic of this action is affected by an iceball rolling to the right towards the enemy party and by its optional explosion that the player can trigger.
How it works is a Prefabs/Objects/IceSphere
gets instantiated and after a bunch of animation logic (after DoCommand 2), it ends up being rooted at (-4.5, 1.75 * x + 0.25 * (1.0 - x), 0.0) where x is barfill
if it's 0.9 or higher otherwise, it's barfill
* 0.8 clamped from 0.25 to 1.0.
From there, over the course of 81.0 frames (101.0 frames instead if DoCommand 2 set commandsuccess
to false), the iceball will move to 10.0 in x via a lerp. During this move, this is where DoDamage 1 call can take effect if the iceball's position + 1.0 goes past an enemy party member's position (they still need to respect some other conditions as the DoDamage table above shows).
However, during the move, the player can at any point interrupt it by pressing the Confirm input when past 34.0 frames. This is only available if DoCommand 2 set commandsuccess
to true. This is optional: the player may decide to not press the input and let the iceball move all the way to 10.0 in x.
If it is pressed, the iceball immediately stops, Bee
's position is set to the iceball's position and DoDamageWithinPos 1 call happens. Since Bee
's position is the same as the iceball's for that moment, the iceball's position is what is going to be used as the position to compare the radiuses and determine which enemy party members is affected.
Logic sequence¶
Bee
MoveTowards (-4.5, 0.0, 0.0) at 2.0x speedBeetle
MoveTowards (-8.2, 0.0, 0.0) at 2.0x speedMoth
MoveTowards (-6.45, 0.0, -0.85) at 2.0x speed- Camera is set to look at at the left side of the stage
- Yield until
Bee
,Beetle
andMoth
'sforcemove
are done Bee
,Beetle
andMoth
have LockRigid(true) called on them withoverrideflip
,overrideanim
,overidefly
andflip
set to trueMoth
animstate set to 105Bee
animstate set to 11 (Hurt
)Prefabs/Objects/IceSphere
instantiated rooted with a scale of Vector3.zero and stored in a local named iceball with its first child named bsrpite which is rooted and moved offscreenIceRadius
particles played atBee
's position + Vector3.up infinetly with 7.0x uniform scale chiled toBee
'ssprite
- iceball gets childed to
Bee
'ssprite
OverworldIce
sound playsmothicenormal
particles plays without sound atBee
's position + 1.0 in y for 3.0 alivetime and 3500 rendersort- iceball local position set to Vector3.up
Bee
'sbobrange
set to 1.0- DoCommand 1 call happens
Spin
sound plays onsounds[9]
with 0.5 pitch on loop- Yield until
doingaction
goes to false. Before each frame yield:- A value is calculated being the lerp from the previous value of
barfill
clamped from 0.25 to 1.0 (starting at 0.0) to its current value clamped from 0.25 to 1.0 with a factor of 1/10th of the game's frametime. This controls progression throughbarfill
Bee
's yspin
set to 20.0 * thebarfill
progression value- iceball scale set to a lerp from Vector3.zero to Vector3.one * 200.0 with a factor of the
barfill
progression value clamped from 0.5 to 1.0 Bee
'sheight
set to a lerp from the existing one to 2.5 with a factor of 0.0075 * the game's frametimeIceRadius
's ParticleSystem's emmision's rateOverTime set to a lerp from 1.0 to 20.0 with a factor of thebarfill
progression valuesounds[9]
's pitch set to a lerp from 0.5 to 0.75 with a factor ofbarfill
- instance.
camoffset
set to a lerp fromdefaultcamoffset
to (0.0, 2.5, -11.0) with a factor of thebarfill
progression value
- A value is calculated being the lerp from the previous value of
sounds[9]
is stopped- The corrected
barfill
amount is calculated by taking its value (or the value * 0.8 if it's less than 0.9) and clamping it from 0.25 to 1.0 - iceball's scale set to uniform 200.0x * the corrected
barfill
value clamped from 0.5 to 1.0 - instance.
camoffset
set to (0.0, 3.2, -9.85) IceRadius
moved offscreen and destroyed in 5.0 seconds- iceball gets rooted
- bsprite gets childed to the iceball with a scale of Vector3.zero
Bee
is moved offscreenFreeze
sound playsmothicenormal
particles plays without sound at bsprite's position + Vector3.one for 3.0 alivetime and 3500 rendersort with a scale of uniform 2.0x * the correctedbarfill
value- Yield for 0.5 seconds
Beetle
has LockRigid(false) called on themBeetle
'soverrideflip
set to trueBeetle
MoveTowards (-9.5, 0.0, 0.0) with a stopstate of 116Charge7
sound plays at 0.7 pitch- Over the course of max 81.0 frames (or until the DoCommand 2 call is done with
doingaction
going false after it started), the iceball moves to its position + 2.0 in y via a BeizierCurve3 with a ymax of 8.0. Before each frame yield, the following happens:- If
Beetle
'sforcemove
is done, it gets ShakeSprite called with 0.1 intensity and 1.0 frametimer Beetle
animstate set to 116- Yield for an additional extra frame
- If DoCommand 2 call didn't happened yet and we are past 32.0 frames, DoCommand 2 call happens
- If
Beetle
'ssprite
local position is reset to Vector3.zeroBeetle
has LockRigid(true) called on themMoth
animstate set to 102- If
commandsuccess
is true,PingShot
sound plays at 0.9 pitch. Otherwise,Beetle
animstate set to 105 - Over the course of 16.0 frames (26.0 frames instead if
commandsuccess
is false), iceball moves in y to 1.75f * x + 0.25f * (1f - x) where x is the correctedbarfill
value andBeetle
moves to the iceball initial position before this move -1.0 in x (0.0 for y and z) - ShakeScreen with an ammount of 0.2 * the corrected
barfill
value for 0.5 time with dontreset - A SpinAround gets added to iceball
- Camera reset to default
hitpart
(the particles) plays atBeetle
's position- If
commandsuccess
is true:- iceball's SpinAround's
itself
set to (-10.0, -3.0, -8.0) * the correctedbarfill
value BigHit
sound plays
- iceball's SpinAround's
- Otherwise:
- iceball's SpinAround's
itself
set to (-10.0, -3.0, -8.0) * the correctedbarfill
value / 3.0 Beetle
animstate set to 18 (KO
)- DeathSmoke particles plays at
Beetle
's position Damage0
sound plays
- iceball's SpinAround's
- If
commandsuccess
is true:Beetle
moves to its position + (-1.5, 0.0, 0.0) via an ArcMovement with a height of 3.0 over 40.0 frametimepresskey
set to 4 (Confirm)- If the corrected
barfill
value is higher than 0.6, a ButtonSprite is SetUp with thepresskey
input childed to theGUICamera
with a local positon of (0.0, 2.0, 10.0) and a sortorder of 10. The ButtonSprite is disabled for now
spin5
sound plays onsounds[9]
with 1.5 pitch and 0.9 volume on loop- Yield for a frame
- Over the course of 81.0 frames (101.0 frames instead if
commandsuccess
is false), the iceball moves to (10.0, its current y position, 0.0). During the move:- If
commandsuccess
is true and we are past 24 frames:- The ButtonSprite gets enabled
- The ButtonSprite's
basesprite
's color is set to grey or white (white if Sin(Time.time * 20.0) is higher than 0.0, grey otherwise) - If
presskey
(Confirm) is pressed, the iceball moves breaks out early and the explosion damage will happen
- DoDamage 2 call happens for each applicable enemy party members if they hadn't received the call yet
- If
- The ButtonSprite is destroyed
Beetle
andMoth
animstate set to 13 (BattleIdle
)sounds[9]
is stoppedExplosion5
sound playsIceShatter
particles plays at the iceball with a scale of uniform 3.0xBee
's position is set to the iceball's- The iceball is destroyed
- If the Confirm input press was accepted earlier:
- ShakeScreen for 0.3 ammount and 1.25 time with dontreset
mothicenormal
particles played atBee
's position + 1.0 in y with scale of uniform 4.0 * corrected value ofbarfill
- DamageWithinPos 1 call happens
- Otherwise (
commandsuccess
was false or no Confirm input was pressed), ShakeScreen for 0.2 ammount for 0.75 time with dontreset Bee
's yspin
set to 30.0Bee
'sheight
set to 0.0- Over the course of 61.0 frames,
Bee
moves to their initial position before this action via a BeizierCurve3 with a ymax of 7.0 Bee
animstate set to 18 (KO
)Bee
'sspin
is zeroed out- DeathSmoke particles played at
Bee
's position Death3
sound plays- Yield for 0.5 seconds
Bee
,Beetle
andMoth
have LockRigid(false) called on them, they MoveTowards their initial position before this action with a 2.0x speed withoverrideflip
,overrideanim
,overridejump
andoveridefly
set to false- Yield until
Bee
,Beetle
andMoth
'sforcemove
are done Bee
,Beetle
andMoth
have theirflip
set to true and their position set to their initial one before this action- UpdateAnim is called
- Yield for a frame
- MultiSkillMove is called with 0, 1 and 2 (normally
Bee
,Beetle
andMoth
)