MidgeBroodmother
¶
HardMode changes¶
HardMode being true does the following changes:
- On the start of the first actor turn that HPPercent gets lower than 0.5, a phase transition will happen that decrements this enemy's
cantmove
and sets themoves
of this enemy to 2. The overall effect is this enemy now gets 2 actor turns per main turns including the current one - In the dash attack move, the total amount of frames the enemy moves towards the target and past it changes to 37.0 from 48.0
- In the electric ball projectile throw move, the odds to use the Delayed Projectile version when there are no
delprojs
changes to 41% from 33% - In the electric ball projectile throw move (multiple hits version), the amount of projectiles to throw changes to be random between 2 and 3 instead of always being 2
- In the electric ball projectile throw move (multiple hits version), the yield time before each Projectile calls changes to 0.5 seconds instead of 0.65 seconds
- In the electric ball projectile throw move (multiple hits version), the speed of each projectile changes to 40.0 from 50.0
- In the electric ball projectile throw move (Delayed Projectile version), the framespeed changes to 60.0 from 80.0
- In the electric ball projectile throw move (Delayed Projectile version),
cantmove
gets decremented at the end which grants an additional actor turn to this enemy - In the enemy summon moves,
cantmove
gets decremented at the end which grants an additional actor turn to this enemy
Move selection¶
3 moves are possible:
- A single target dash attack
- An electric ball projectile throw that either hits multiple times on multiple targets or is added as a Delayed projectile
- Summons a new Midge enemy
The decision of which move to use is based on the following odds:
Move | Odds |
---|---|
1 | 1/4 |
2 | 2/4 |
3 | 1/4 |
However, move 3 won't be used if selected when there's already more than 2 enemy party members or if no suitable location is found to spawn the enemy after 20 attempts. If this happens, a continue directive is issued on the action loop which restarts the entire action logic in the same actor turn (this includes the pre move logic).
Pre move logic¶
The following logic always happen at the start of the actor turn:
checkingdead
is set to a new ChangePosition call to set the position of this enemy. The position to set isFlying
unless move 2 (electric projectile throw) is slated for usage where the position is set toGround
instead- Yield all frames until
checkingdead
is null (the coroutine completed) - If hardmode is true, HPPercent is less than 0.5 and
moves
is 1 (meaning the phase transition hasn't happened yet), a phase transition occurs which notably setsmoves
to 2:- ShakeSprite called with 0.1 intensity and 30.0 frametimer
- animstate set to 103
Charge7
sound plays- Yield for 0.5 seconds
StatUp
sound plays- StatEffect called on this enemy with type 5 (yellow up arrow)
- Yield for 0.5 seconds
cantmove
is decremented which gives a free actor turn on this enemy in the current main turnmoves
is set to 2 meaning this enemy now gets 2 actor turns per main turns (including the current one sincecantmove
was just decremented)
Move 1 - Dash attack¶
A single target dash attack.
DoDamage calls¶
# | Conditions | attacker | target | damageammount | property | overrides | block |
---|---|---|---|---|---|---|---|
1 | Always happen | This enemy | playertargetID after GetSingleTarget |
4 | null | null | commandsuccess |
Logic sequence¶
- GetSingleTarget called
- animstate set to 103
- Camera moves to look near the midpoint between this enemy and
playertargetentity
BMCharge
sound plays- Over the course of 41.0 frames, this enemy moves + 2.0 in x via a BeizierCurve3 with a ymax of -2.0
- ShakeSprite called with 0.1 intensity for 30.0 frametimer
- Yield for 0.5 seconds
- animstate set to 100
BMCharge2
sound plays- Over the course of 48.0 frames (37.0 frames instead if hardmode is true), this enemy moves to
playertargetentity
- (distance between this enemy andplayertargetentity
) in x and -0.1 in z via a BeizierCurve3 with a ymax of 0.35 -height
. On the first frame that this enemy x position gets lower thanplayertargetentity
x position:- ShakeScreen called with 0.1 ammount and 0.5 time
- DoDamage 1 call happens
- animstate set to 0 (
Idle
) - Yield for 0.5 seconds
- SetDefaultCamera called
- Over the course of 31.0 frames, this enemy moves from (15.0, 0.0, 0.0) to startp via a lerp
Move 2 - Electric projectile throw¶
An electric ball projectile throw that either hits multiple times on multiple targets or is added as a Delayed projectile without damages (but gains an actor turn if hardmode is true where damages may be dealt).
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.
Projectile calls¶
# | Conditions | damage | property | attacker | playertarget | obj | speed | height | extraargs | destroyparticle | audioonhit | audiomoving | spin | nosound |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Happens only if the multiple hits version of the move is used which always happen if delprojs isn't empty or if it is, it's used if a 67% RNG check passes (59% instead if hardmode is true). When this call happens, it is done 2 times (from 2 to 3 times instead if hardmode is true), but each call can only happen if GetRandomAvaliablePlayer with nullable doesn't return -1 |
2 | Numb | This enemy | GetRandomAvaliablePlayer with nullable1 (target changes for each calls) | A new Prefabs/Objects/EnergySphere GameObject rooted positioned at this enemy + (1.15, 2.8, -0.1) with NoMapColor tag |
50.0 (40.0 instead if hardmode is true) | Random integer between 3 and 5 inclusive then cast to float | SepPart@3@1,keepcolor |
Stars |
PingShot |
null | Vector3.zero | false |
1: This targetting scheme is broken. See the nullable GetRandomAvaliablePlayer documentation for more details.
AddDelayedProjectile calls¶
# | Conditions | obj | targetpos | damage | turnstohit | areadamage | property | framespeed | summonedby | hitsound | hitparticle | whilesound |
---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Happens only if the delayed projectile version of the move is used which only happen if delprojs is empty and a 33% RNG check passes (41% instead if hardmode is true) |
A new Prefabs/Objects/EnergySphere GameObject rooted positioned at (0.0, 20.0, 0.0) with NoMapColor tag |
playertargetID after GetSingleTarget |
3 | Random between 2 and 3 | 0 | Numb | 80.0 (60.0 instead if hardmode is true) | This enemy | null | null | Fall2 |
Logic sequence¶
- The version of the move is determined. It is the delayed projectile version if
delprojs
is empty and a 33% RNG check passes (41% instead if hardmode is true) and the multi hits version otherwise - animstate set to 101
- Yield for 0.5 seconds
Charge7
sound plays- animstate set to 102
- A
Prefabs/Particles/Charging
particles is instantiated rooted and positioned at this enemy position + (1.15, 2.8, -0.1)
Multi hits version¶
If using the multi hits version of the move:
- The amount of hits is determined. It's always 2 (random between 2 and 3 instead if hardmode is true). A new array of GameObject is created to hold each projectiles with the amount being the length
- For each hit:
- animstate set to 102
- GetRandomAvailablePlayer called with nullable to get a target player party member. If the result isn't -1:
- Yield for 0.65 seconds (0.5 seconds instead if hardmode is true)
- The projectile element is set to a new
Prefabs/Objects/EnergySphere
GameObject rooted positioned at this enemy + (1.15, 2.8, -0.1) withNoMapColor
tag Lazer2
sound plays- Projectile 1 call happens
Prefabs/Particles/Charging
particles stops playing
- animstate set to 101
- If this isn't the last hit:
- Yield for 0.5 seconds
Prefabs/Particles/Charging
particles resumes playing
- Yield all frames until all projectile elements are null (meaning all Projectile calls completed)
Delayed projectile version¶
If using the delayed projectile version of the move:
- GetSingleTarget called
- Camera moves to look near this enemy
- ShakeSprite called with 0.1 intensity and 30.0 frametimer
- Yield for 0.5 seconds
- A new
Prefabs/Objects/EnergySphere
GameObject is created rooted positioned at this enemy position + (1.15, 2.8, -0.1) withNoMapColor
tag Lazer2
sound playsPrefabs/Particles/Charging
particles stops playing- animstate set to 101
- Over the course of 51.0 frames,
Prefabs/Objects/EnergySphere
moves to (0.0, 20.0, 0.0) via a lerp - AddDelayedProjectile 1 call happens
- If hardmode is true,
cantmove
is decremented which gives an additional actor turn to this enemy
Cleanup¶
This happens no matter which version of the move used:
Prefabs/Particles/Charging
moved offscreen at -9999.0 in y then gets destroyed in 5.0 seconds
Move 3 - Enemy summon¶
Summons a new Midge enemy. No damages are dealt, but the enemy gains a free actor turn if hardmode is true where damages may be dealt.
Logic sequence¶
- A Vector3 is attempted to be generated that will corresponds to the position to spawn the new enemy. Each attempt may fail, but up to 20 attempts will be done and the first one that fufills some conditions will be used. Each attempts generates a vector where the x component is between 0.25 and 7.0, the y component is 0.0 and the z component is between -0.75 and 0.75. For the location to be accepted, any enemy part member needs to be located at a distance less than its
size
* 1.75. If no suitable locations is found after 20 attempts, the entire action logic restarts (including the pre move logic) - ShakeScreen called with 0.1 ammount and 1.0 time with dontreset
- animstate set to 103
Growl
sound plays with 1.2 pitch- Yield for 0.5 seconds
checkingdead
set to a new SummonEnemy call to summon a new Midge with typeOffscreen
at the location without cantmove (meaning the new enemy can act immediately on the same main turn)- Yield all frames until
checkingdead
is null (the coroutine completed) - The new enemy's
exp
is set to 0 - animstate set to 0 (
Idle
) - RegorganizeEnemies called
- If hardmode is true,
cantmove
is decremented which gives an additional actor turn to this enemy