Bloatshroom
¶
HardMode changes¶
HardMode being true does the following changes:
- In the numbing mist move, the DoCommand call (which is a TappingKey) has
barfill
decrease 25% faster each frame. However, this change doesn't affect anything ifmashcommandalt
is 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
enemydata
left:- MoveTowards (3.5, 0.0, 0.0) with a multiplier of 2.0
- Yield all frames until
forcemove
is done - startp is set to this enemy position with the y component at 0.0
Jump
sound 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
) rotater
gets a SpriteBounce added with astartscale
of true and a MessageBounce with a 2.0 multiplierMist
sound playsSpores
particles 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
spin
set to 15.0 and their animstate to 11 (Hurt
) - Yield all frames until
doingaction
is false (DoCommand 1 is done), Before each frame yield,flip
is set to false - DestroyHelpBox is called which sets
helpboxid
to -1 and destroyshelpbox
if it existed in 0.5 seconds with shrink before setting it to null - The
Spores
particles is moved offscreen at -9999.0 in y then destroyed in 10.0 seconds - All player party members has their
spin
zeroed out - PartyDamage 1 call happens
- The SpriteBounce of the
rotater
gets destroyed rotater
's scale gets set to the value it had before this action- If this enemy is the last
enemydata
:checkingdead
is set to a new SummonEnemy call to summon a Mushroom with typeFromGroundKeepScale
at (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
checkingdead
is 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
hp
amount 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
hp
is 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¶
checkingdead
is 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
checkingdead
is null (the coroutine completed)
Here is what the coroutine effectively ends up doing:
- GetSingleTarget called
- Camera moves to look near
playerdata[playertargetID]
- MoveTowards
playertargetentity
position + (3.0, 0.0, -0.1) - Yield all frames until
forcemove
is done sounds[9]
stopped (this won't do anything since no sounds should be playing there)- Yield for 0.3 seconds
Jump
sound plays with 0.8 pitchTurn
sound plays with 0.7 pitch- Over the course of 51.0 frames (38.25 frames instead if hardmode is true), this enemy moves to
playertargetentity
position -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
commandsuccess
is 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
commandsuccess
is 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
playertargetentity
position -0.1 in z via a BeizierCurve3 with a ymax of 5.5. Before each frame yield, animstate is set to 3 (Fall
) impactsmoke
particles plays atplayertargetentity
positionThud4
sound playsHugeHit3
soud 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
playertargetentity
position + (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
) Thud4
sound playsimpactsmoke
particles plays atplayertargetentity
position- 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
checkingdead
is set to null informing the caller that the coroutine completed