Bloatshroom¶
HardMode changes¶
HardMode being true does the following changes:
- In the numbing mist move, the DoCommand call (which is a TappingKey) has
barfilldecrease 25% faster each frame. However, this change doesn't affect anything ifmashcommandaltis true making the command a SequentialKeys - In the numbing mist move when summoning a Mushroom, the summoned enemy will be able to act on the current main turn right after this enemy actor turn is over
- The move selection odds changes to slightly favor the numbing mist move
- In the jump attack move, the amount of frames this enemy takes to reach its target changes to 38.25 frames from 51.0 frames
Move selection¶
2 moves are possible:
- A party wide numbing mist that may either summon a Mushroom or targets other enemy party members except ones from the fungi family who are healed instead
- A single target jump attack
The decision of which move to use is based on odds, but the odds changes based on hardmode being true or not. The following table shows the odds in either situations:
| Move | Odds when hardmode is false | Odds when hardmode is true |
|---|---|---|
| 1 | 30% | 40% |
| 2 | 70% | 60% |
Move 1 - Numbing mist¶
A party wide numbing mist that may either summon a Mushroom or targets other enemy party members except ones from the fungi family who are healed instead.
nonphyscal set to true¶
This move always sets nonphyscal to true which affects the effects of the FrostBite, SpikeBod and PoisonTouch medal if equipped on the target.
DoCommand calls¶
| # | Conditions | timer | commandtype | data |
|---|---|---|---|---|
| 1 | None | 165.0 | TappingKey |
|
1: Due to the clamping logic related to this value, it means that the decrease value per frame is 0.005 * the game's frametime when hardmode is false and 0.00625 * the game's frametime when hardmode is true. Effectively, it means that hardmode being true makes barfil decrease 25% more per frame
PartyDamage calls¶
| # | Conditions | caller | damage | property | block | jumpheight | spinammount | jumpevenonblock | overrides |
|---|---|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | 1 | Numb | true only if barfill is at least 90.0 after DoCommand 1 (meaning the bar was filled at least 90% of the way), false otherwise |
0.0 | Vector3.zero | false | null |
DoDamage calls¶
| # | Conditions | attacker | target | damageammount | property | overrides | block |
|---|---|---|---|---|---|---|---|
| 1 | Only happens if this enemy isn't the only enemydata left at the start of the action and it happens for each enemy party member other than this enemy whose kind isn't from the following list: |
null | The enemy party member | 1 (this cannot be lethal to the target as enforced after the call) | Numb | null | false |
Logic sequence¶
- If this enemy is the last
enemydataleft:- MoveTowards (3.5, 0.0, 0.0) with a multiplier of 2.0
- Yield all frames until
forcemoveis done - startp is set to this enemy position with the y component at 0.0
Jumpsound plays with 0.8 pitch- Jump called on this enemy with an h of
jumpheight* 1.25 - Yield for 0.5 seconds
- Yield all frames until this enemy is
onground - animstate set to 5 (
Angry) rotatergets a SpriteBounce added with astartscaleof true and a MessageBounce with a 2.0 multiplierMistsound playsSporesparticles plays at this enemy position + 1.0 in y with -1.0 time (infinite)- CreateHelpBox called with 4 (the TappingKey command's help)
- DoCommand 1 call happens
- All player party member who isn't stopped has their y
spinset to 15.0 and their animstate to 11 (Hurt) - Yield all frames until
doingactionis false (DoCommand 1 is done), Before each frame yield,flipis set to false - DestroyHelpBox is called which sets
helpboxidto -1 and destroyshelpboxif it existed in 0.5 seconds with shrink before setting it to null - The
Sporesparticles is moved offscreen at -9999.0 in y then destroyed in 10.0 seconds - All player party members has their
spinzeroed out - PartyDamage 1 call happens
- The SpriteBounce of the
rotatergets destroyed rotater's scale gets set to the value it had before this action- If this enemy is the last
enemydata:checkingdeadis set to a new SummonEnemy call to summon a Mushroom with typeFromGroundKeepScaleat (3.5, either 3.0 or -3.0 determined with uniform RNG, 0.0) and with cantmove (without cantmove instead if hardmode is true meaning the enemy will only be able to act on the current main turn if hardmode is true)- Yield all frames until
checkingdeadis null (the coroutine completed)
- Otherwise (there were already other enemy party members than this enemy),
- For each enemy party members other than this enemy:
- If they are a CordycepsAnt, Mushroom, Zombee, Zombeetle, Bloatshroom or Zommoth, Heal is called on them to heal an
hpamount of theirmaxhp* 0.2 ceiled then clamped from 0 to 5 - Otherwise (the enemy party member isn't a fungi), DoDamage 1 call happens on them
- If the enemy party member's
hpis 1 or below, it is set to 1 (this prevents DoDamage 1 from being lethal to them)
- If they are a CordycepsAnt, Mushroom, Zombee, Zombeetle, Bloatshroom or Zommoth, Heal is called on them to heal an
- For each enemy party members other than this enemy:
- Yield for 0.5 seconds
Move 2 - Jump attack¶
A single target jump attack.
DoDamage calls¶
| # | Conditions | attacker | target | damageammount | property | overrides | block |
|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | playertargetID after GetSingleTarget |
3 | Flip1 | {BlockSoundOnly} | commandsuccess |
1: This property gets overriden to null in CalculateBaseDamage as the target is a player party member so it does nothing.
Logic sequence¶
checkingdeadis set to a new HeavyJump coroutine for this enemy with 3 damage and 60.0 speed (45.0 if hardmode is true)- Yield all frames until
checkingdeadis null (the coroutine completed)
Here is what the coroutine effectively ends up doing:
- GetSingleTarget called
- Camera moves to look near
playerdata[playertargetID] - MoveTowards
playertargetentityposition + (3.0, 0.0, -0.1) - Yield all frames until
forcemoveis done sounds[9]stopped (this won't do anything since no sounds should be playing there)- Yield for 0.3 seconds
Jumpsound plays with 0.8 pitchTurnsound plays with 0.7 pitch- Over the course of 51.0 frames (38.25 frames instead if hardmode is true), this enemy moves to
playertargetentityposition -0.1 in z via a BeizierCurve3 with a ymax of 5.5 scaled over the course of 60.0 frames (45.0 frames instead if hardmode is true). Before each frame yield, animstate is set to 2 (Jump) until halfway 30.0 frames passed (27.5 frames instead if harmode is true) where it's set to 3 (Fall) instead - If
commandsuccessis false (didn't blocked, ignores FRAMEONE), ShakeScreen is called with ammount (0.075, 0.3, 0.0) and 0.75 time with dontreset - DoDamage 1 call happens
- If
commandsuccessis false (didn't blocked, ignores FRAMEONE):- Over the course of 9.0 frames (16.75 frames instead if hardmode is true), this enemy moves to
playertargetentityposition -0.1 in z via a BeizierCurve3 with a ymax of 5.5. Before each frame yield, animstate is set to 3 (Fall) impactsmokeparticles plays atplayertargetentitypositionThud4sound playsHugeHit3soud plays
- Over the course of 9.0 frames (16.75 frames instead if hardmode is true), this enemy moves to
- Otherwise (blocked, ignores FRAMEONE):
- Over the course of 41.0 frames, this enemy moves to
playertargetentityposition + (2.0, 0.0, -0.1) via a BeizierCurve3 with a ymax of 3.0. Before each frame yield, animstate is set to 3 (Fall) Thud4sound playsimpactsmokeparticles plays atplayertargetentityposition- ShakeScreen is called with ammount (0.05, 0.2, 0.0) and 0.5 time with dontreset
- animstate set to 0 (
Idle)
- Over the course of 41.0 frames, this enemy moves to
- Yield for 0.5 seconds
checkingdeadis set to null informing the caller that the coroutine completed