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¶
BeeMoveTowards (-4.5, 0.0, 0.0) at 2.0x speedBeetleMoveTowards (-8.2, 0.0, 0.0) at 2.0x speedMothMoveTowards (-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,BeetleandMoth'sforcemoveare done Bee,BeetleandMothhave LockRigid(true) called on them withoverrideflip,overrideanim,overideflyandflipset to trueMothanimstate set to 105Beeanimstate set to 11 (Hurt)Prefabs/Objects/IceSphereinstantiated 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 offscreenIceRadiusparticles played atBee's position + Vector3.up infinetly with 7.0x uniform scale chiled toBee'ssprite- iceball gets childed to
Bee'ssprite OverworldIcesound playsmothicenormalparticles 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'sbobrangeset to 1.0- DoCommand 1 call happens
Spinsound plays onsounds[9]with 0.5 pitch on loop- Yield until
doingactiongoes to false. Before each frame yield:- A value is calculated being the lerp from the previous value of
barfillclamped 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 yspinset to 20.0 * thebarfillprogression value- iceball scale set to a lerp from Vector3.zero to Vector3.one * 200.0 with a factor of the
barfillprogression value clamped from 0.5 to 1.0 Bee'sheightset 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 thebarfillprogression valuesounds[9]'s pitch set to a lerp from 0.5 to 0.75 with a factor ofbarfill- instance.
camoffsetset to a lerp fromdefaultcamoffsetto (0.0, 2.5, -11.0) with a factor of thebarfillprogression value
- A value is calculated being the lerp from the previous value of
sounds[9]is stopped- The corrected
barfillamount 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
barfillvalue clamped from 0.5 to 1.0 - instance.
camoffsetset to (0.0, 3.2, -9.85) IceRadiusmoved offscreen and destroyed in 5.0 seconds- iceball gets rooted
- bsprite gets childed to the iceball with a scale of Vector3.zero
Beeis moved offscreenFreezesound playsmothicenormalparticles plays without sound at bsprite's position + Vector3.one for 3.0 alivetime and 3500 rendersort with a scale of uniform 2.0x * the correctedbarfillvalue- Yield for 0.5 seconds
Beetlehas LockRigid(false) called on themBeetle'soverrideflipset to trueBeetleMoveTowards (-9.5, 0.0, 0.0) with a stopstate of 116Charge7sound plays at 0.7 pitch- Over the course of max 81.0 frames (or until the DoCommand 2 call is done with
doingactiongoing 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'sforcemoveis done, it gets ShakeSprite called with 0.1 intensity and 1.0 frametimer Beetleanimstate 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'sspritelocal position is reset to Vector3.zeroBeetlehas LockRigid(true) called on themMothanimstate set to 102- If
commandsuccessis true,PingShotsound plays at 0.9 pitch. Otherwise,Beetleanimstate set to 105 - Over the course of 16.0 frames (26.0 frames instead if
commandsuccessis false), iceball moves in y to 1.75f * x + 0.25f * (1f - x) where x is the correctedbarfillvalue andBeetlemoves 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
barfillvalue for 0.5 time with dontreset - A SpinAround gets added to iceball
- Camera reset to default
hitpart(the particles) plays atBeetle's position- If
commandsuccessis true:- iceball's SpinAround's
itselfset to (-10.0, -3.0, -8.0) * the correctedbarfillvalue BigHitsound plays
- iceball's SpinAround's
- Otherwise:
- iceball's SpinAround's
itselfset to (-10.0, -3.0, -8.0) * the correctedbarfillvalue / 3.0 Beetleanimstate set to 18 (KO)- DeathSmoke particles plays at
Beetle's position Damage0sound plays
- iceball's SpinAround's
- If
commandsuccessis true:Beetlemoves to its position + (-1.5, 0.0, 0.0) via an ArcMovement with a height of 3.0 over 40.0 frametimepresskeyset to 4 (Confirm)- If the corrected
barfillvalue is higher than 0.6, a ButtonSprite is SetUp with thepresskeyinput childed to theGUICamerawith a local positon of (0.0, 2.0, 10.0) and a sortorder of 10. The ButtonSprite is disabled for now
spin5sound 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
commandsuccessis false), the iceball moves to (10.0, its current y position, 0.0). During the move:- If
commandsuccessis 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
BeetleandMothanimstate set to 13 (BattleIdle)sounds[9]is stoppedExplosion5sound playsIceShatterparticles 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
mothicenormalparticles played atBee's position + 1.0 in y with scale of uniform 4.0 * corrected value ofbarfill- DamageWithinPos 1 call happens
- Otherwise (
commandsuccesswas false or no Confirm input was pressed), ShakeScreen for 0.2 ammount for 0.75 time with dontreset Bee's yspinset to 30.0Bee'sheightset to 0.0- Over the course of 61.0 frames,
Beemoves to their initial position before this action via a BeizierCurve3 with a ymax of 7.0 Beeanimstate set to 18 (KO)Bee'sspinis zeroed out- DeathSmoke particles played at
Bee's position Death3sound plays- Yield for 0.5 seconds
Bee,BeetleandMothhave LockRigid(false) called on them, they MoveTowards their initial position before this action with a 2.0x speed withoverrideflip,overrideanim,overridejumpandoverideflyset to false- Yield until
Bee,BeetleandMoth'sforcemoveare done Bee,BeetleandMothhave theirflipset 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,BeetleandMoth)