GoldenSeedling¶
hitaction support, UNUSED¶
This enemy supports hitaction logic and it will be performed when hitaction is true instead of any moves.
NOTE: While this enemy technically supports
hitaction, under normal gameplay, it is assumed to not be possible for this enemy to be in ahitaction, but the logic still exists and is functional.
Logic sequence¶
- animstate set to 23 (
Chase) - Emoticon called with type 2 (red ! mark) with a time of 35
Wamsound playscheckingdeadset to a new Dig call on this enemy which changes its position toUnderground(checkingdeadis set to null when completed)- Yield all frames until
checkingdeadis null
Move selection¶
3 moves are possible:
- A single target tackle attack
- A single target headbonk attack
- Flees the battle
- A single target undergound strike attack, UNUSED move
Move 4 is always used (and can only be used) when position is Underground.
NOTE: As explained in the
hitactionsection above, it's not possible for this enemy to beUndergroundbecause it's not possible for this enemy to do ahitaction. Nonetheless, the move exists and is functional.
Move 3 usage is always considered first and it is used if all of the following conditions are fufilled:
- The enemy party isn't doing a firststrike
- This enemy doesn't have the Taunted condition
- A 49% RNG check passes
If move 3 isn't used, move 1 or 2 is used and their usage is based on these odds:
| Move | Odds |
|---|---|
| 1 | 51% |
| 2 | 49% |
Move 1 - Tackle attack¶
A single target tackle attack.
DoDamage calls¶
| # | Conditions | attacker | target | damageammount | property | overrides | block |
|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | playertargetID after GetSingleTarget |
7 | null | null | commandsuccess |
Logic sequence¶
- GetSingleTarget called
- If this enemy has the Taunted condition, their
chargeis set to 3 checkingdeadis set to new coroutine called SeedlingTackle which will setcheckingdeadto null upon completion- Yield all frames until
checkingdeadis null
This is what the coroutine effectively does:
- animstate set to 23 (
Chase) - Done 2 times:
- Jump called
Jumpsound plays with 0.75 pitch and 1.6 volume- Yield for 0.1 seconds
- Yield all frames until
ongroundgoes to true - Yield a frame
- CameraFocusTarget called
- MoveTowards
playerdata[playertargetID]position + 3.0 in x with a 2.0 multiplier and both the current animstate as the walkstate and stopstate - Yield all frames until
forcemoveis done - Yield for 0.2 seconds
Spin10sound plays- MoveTowards
playerdata[playertargetID]position + (0.35, 0.0, -0.1) with a 2.5 multiplier and both the current animstate as the walkstate and stopstate - Yield all frames until
forcemoveis done - DoDamage 1 call happens
- Jump called
flipset to false (withoverrideflip)- MoveTowards
playerdata[playertargetID]position + 2.0 in x with a 0.75 multiplier and both the current animstate as the walkstate and stopstate - Yield all frames until
forcemoveis done flipis set to falsecheckingdeadset to null indicating the caller that the coroutine completed
Move 2 - Headbonk attack¶
A single target headbonk attack.
DoDamage calls¶
| # | Conditions | attacker | target | damageammount | property | overrides | block |
|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | playertargetID after GetSingleTarget |
8 | null | null | commandsuccess |
Logic sequence¶
- GetSingleTarget called
- If this enemy has the Taunted condition, their
chargeis set to 3 checkingdeadset to a new SeedlingHeadbonk coroutine with 2 damage, actionid as the attacker id, no property and without skipwalk. This coroutine setscheckingdeadto null when completed- Yield all frames until
checkingdeadis null
Here is what SeedlingHeadbonk effectively does with those parameters:
- Camera moves to look near
playerdata[playertargetID] - animstate set to 23 (
Chase) - MoveTowards
playertargetentityposition + (2.0, 0.0, -0.2) with a multiplier of 2.0 - Yield all frames until
forcemoveis done Jumpsound plays- Jump called
- Yield for 0.3 seconds
- Yield all frames until
ongroundis true - Camera moves to look near
playertargetID - Yield a frame
- animstate set to 100
Turnsound plays- Over the course of 35.0 frames (but visually occurs as if it was 32.0 frames with the last 3 being padding), this enemy moves to
playertargetentityposition + (0.25, 2.8, -0.1) via a BeizierCurve3 with a ymax of 5.5 while the z angle gets a LerpAngle done to 180.0 - DoDamage 1 call happens
- Yield for 0.1 seconds
spriteangles zeroed out- animstate set to 1 (
Walk) Turn2sound plays- Over the course of 25.0 frames, this enemy moves to its current position + 2.0 in x with the y being 0.0 via a BeizierCurve3 with a ymax of 3.0
checkingdeadis set to null which signals the caller that this coroutine completed
Move 3 - Flee¶
Flees the battle. No damages are dealt.
Logic sequence¶
tryenemyhealset to a new EnemyFlee coroutine to make this enemy flee the battle with 23 (Chase) walkstate and with afterimage (tryenemyhealset to null when completed)- Yield all frames until
tryenemyhealis null - The local fled is set to true which changes what to do in the post-action
Move 4 - Undergound strike attack, UNUSED¶
A single target undergound strike attack. position is set to Ground after.
NOTE: This move can't be used under normal gameplay, but its logic remains functional. See the move selection section for more details.
DoDamage calls¶
| # | Conditions | attacker | target | damageammount | property | overrides | block |
|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | playertargetID after GetSingleTarget |
2 | Pierce1 | null | commandsuccess |
1: Enemy piercing damages are disabled so this property does nothing, see the CalculateBaseDamage documentation to learn more
About incorrect Poison property logic¶
While the DoDamage call features a Pierce property, the move ends up doing an incorrect version of the Poison property logic due to the single property shortcoming. Here are the differences:
- On FRAMEONE, regular blocking will incorrectly prevent the condition from being inflicted which doesn't happen normally
- The amount of turns to inflict is 3 instead of 2
- The Sturdy condition on the target won't prevent the condition to be inflicted when it normally would have
- The
StatusMirrormedal does nothing when equipped on the target when it should have inflicted the condition back to this enemy - The
PoisonTouchmedal won't work despite the attack being physical - The condition infliction can still happen if the target has the Numb while having the
ShockTroopermedal equipped - The
Poisonsound is not played when it should have been
Logic sequence¶
- GetSingleTarget called
checkingdeadis set to a new UndergroundStrike coroutine with 2 damage from this enemy with a poison property without staying underground- Yield all frames until
checkingdeadgoes to null (the coroutine is done)
This is effectively what the coroutine does:
- Camera moves to look near
playerdata[playertargetID], but zoomed in Diggingsound plays on loop usingsounds[9]with 1.1 pitch and 0.75 volume- Over the course of 100.0 frames, position moves to
playertargetentity's position + -0.25 in z - Yield for 0.25 seconds
sounds[9]stoppedDigPopsound plays- DoDamage 1 call happens
- If all of the following conditions are fufilled, SetCondition is called to inflict the Poison condition to
playerdata[playertargetID]for 3 main turns (NOTE: this has a lot of caveats, see the section above for details):commandsuccessis false (didn't blocked, ignores FRAMEONE)playerdata[playertargetID]'spoisonresis less than 100 (it's not immune)- A
poisonresresistance check passes playerdata[playertargetID]doesn't have the Shield condition
- y
spinset to 20.0 diggingset to false- scale reset to
startscale DirtExplodeLightparticle plays at this enemy position- ShakeScreen with 0.15 ammount and 0.2 time
- Over the course of 50.0 frames, position moves to
playertargetentity+ 2.0 in x using a BeizierCurve3 with a ymax of 6.0 spinzeroed out- position set to
Ground - Yield for 0.25 seconds
checkingdeadset to null to signal DoAction that the coroutine completed