Fisherman¶
data usage¶
At the start of the action, if data is null or empty, it's initialised to be 1 element with a starting value of 0.
data[0]: An actor turn cooldown for the delayed projectile move. The value is set to 2 when the move is used and it is always decremented in the post move logic if it's still above 0. The delayed projectile move requires that the value is 0 or below for the move to be used. Effectively, it's an antispam of 1 full actor turn where the delayed projectile move can't be used
HardMode changes¶
HardMode being true does the following changes:
- In the spear dash attack move, the odds to perform a loop before moving towards the target changes to 40% from 30%
- In the spear dash attack move, if a loop will be done before moving towards the target, it is now possible if a 50% RNG check passes for this eneny to jump twice instead of once at the start of the move
- In the spear dash attack move, if no loop will be done before moving towards the target, the amount of frames this enemy takes to move to its target changes to 14.0 frames from 19.0 frames
- In the delayed projectile move, the framespeed of the AddDelayedProjectile call changes to 35.0 from 48.0
- When using the delayed projectile move, the spear dash attack is now performed immediately after on the same actor turn
Move selection¶
3 moves are possible:
- A single target spear slash attack
- A single target spear dash attack
- Adds a delayed projectile that can inflict a bad condition which may be followed up by performing move 1
If this enemy has the Inked, move 1 is always used.
Otherwise, the decision of which move to use is based on the following odds:
| Move | Odds |
|---|---|
| 1 | 3/11 |
| 2 | 3/11 |
| 3 | 5 |
However, if move 3 is selected and data[0] is above 0 (meaning to cooldown on it hasn't expired yet), move 2 is used instead.
Post move logic¶
The following logic always happen after using a move:
- If
data[0]is above 0, it is decremented.
Move 1 - Spear slash attack¶
A single target spear slash attack.
BasicAttack calls¶
| # | Conditions | enemyid | walkstate | attackstate | attackstate2 | damage | offset | property | shake | delay | sounds | dontgettarget |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | 1 (Walk) |
100 | 101 | 4 | (2.0, 0.0, -0.1) | Ink | 0.0 | Random interval between 0.5 and 0.65 seconds | ,RuffianKickSwing |
false |
Logic sequence¶
- GetSingleTarget called
checkingdeadis set to the BasicAttack 1 call- Yield all frames until
checkingdeadis null (the BasicAttack 1 call completed)
Move 2 - Spear dash attack¶
A single target spear dash attack.
DoDamage calls¶
| # | Conditions | attacker | target | damageammount | property | overrides | block |
|---|---|---|---|---|---|---|---|
| 1 | Always happen | This enemy | playertargetID after GetSingleTarget |
4 | Ink | null | commandsuccess |
Logic sequence¶
- GetSingleTarget called
- animstate set to 23 (
Chase) - The decision of whether or not to loop or not is determined. It will be done if a 30% RNG check passes (40% instead if hardmode is true)
- If we decided to loop, the amount of jumps to do is determined. It's 1, but if hardmode is true and a 50% RNG check passes, it's 2
- If we decided to loop, for each jump to do:
Jumpsound plays- Jump called on this enemy with an h of
jumpheight/ 1.5 - Yield for 0.1 seconds
- Yield all frames until this enemy is
onground
- Otherwise (decided to not loop):
Charge7sound plays- ShakeSprite called with 0.3 intensity and 30.0 frametimer
- Over the course of 31.0 frames, this enemy moves to + 2.0 in x via a lerp
trailset to true- If we decided to loop:
- Over the course of 11.0 frames, this enemy moves to the result of a lerp from
playertargetentityto startp with a factor of 0.75 (meaning 25% of the distance towardsplayertargetentity) via a lerp
- Over the course of 11.0 frames, this enemy moves to the result of a lerp from
- Otherwise (decided to not loop):
- Camera moves to look near
playerdata[playertargetID] Toss12sound plays- Over the course of 19.0 frames (14.0 frames instead if hardmode is true), this enemy moves to
playertargetentityposition + (2.0, 0.0, -0.1) via a lerp
- Camera moves to look near
- If we decided to loop it is performed like the following:
Spin3sound plays with 0.9 pitch- Over the course of 31.0 frames:
- This enemy x position goes from its existing one to BeizierFloat of -5.0 on the first half (will smoothly decrease up to 2.5 than back to no decrease) then on the second half, it will go from the existing one to BeizierFloat of 5.0 (will smoothly increase up to 2.5 than back to no increase). Basically, it will cycle to - 2.5 then back to the starting value halfway then + 2.5 then back to the starting value at the end
- This enemy y position goes from its existing one to BeizierFloat of 10.0 (will smoothly increase to 5.0 than back to no increase)
- This enemy z angle changes from 360.0 to 0.0 via a lerp
- Camera moves to look near
playerdata[playertargetID] - Over the course of 11.0 frames, this enemy moves to
playertargetentity+ (2.0, 0.0, -0.1) via a lerp
- DoDamage 1 call happens
- Over the course of 31.0 frames, this enemy moves to + 1.5 in x via a BeizierCurve3 with a ymax of 4.0
trailset to false
Move 3 - Adds a delayed projectile¶
Adds a delayed projectile that can inflict a bad condition which may be followed up by performing move 1. No damages are dealt for this move, but if move 1 is performed, that move will deal damages.
AddDelayedProjectile calls¶
| # | Conditions | obj | targetpos | damage | turnstohit | areadamage | property | framespeed | summonedby | hitsound | hitparticle | whilesound |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1* | Always happen | A new Prefabs/Objects/BombCart GameObject is instantiated childed to the battlemap at startp + Random.insideUnitCircle * 2.5 with a y of -2.0 with a scale of 0.0x with Diggin particles child playing infintely. The first child's sprite is an item sprite that depends on the property:
|
playertargetID |
Depends on the property:
|
2 | 0 | Determined randomly with the following odds:
|
48.0 (35.0 instead if hardmode is true) | This enemy | Depends on the property:
|
Depends on the property:
|
Digging@Down |
*: The delproj gets the following args: move,0,-0.5,0@noshadow@partoff,0,0.5,0@partoff,0,1,0
Logic sequence¶
- GetSingleTarget called
- MoveTowards startp + Random.insideUnitCircle * 2.5 with a y component of 0.0 using 2.0 multiplier
- Camera moves to look near the point this enemy is moving towards
- Yield all frames until
forcemoveis done - A new
Prefabs/Objects/BombCartGameObject is instantiated childed to thebattlemapat this enemy position - 2.0 in y - animstate set to 102
- The effects of the delayed projectile is determined here (see the AddDelayedProjectile table above for details)
- If the effect of the delayed projectile won't be with
InkOnBlockproperty, thePrefabs/Objects/BombCart's first child'sspriteis set to the corresponding item sprite of the effect - Otherwise, the
Prefabs/Objects/BombCart's first child'sspriteis set to aHoneyDropitem sprite with a color of 400040 (dark purple) - Yield for 0.5 seconds
Dig2sound plays with 1.1 pitch- Yield for 31.0 frames counted locally
Diggingparticles plays at this enemy position + (-0.25, 0.0, -0.1) with -1.0 alivetime (infinite)- Yield for 0.5 seconds
- Over the course of 11.0 frames,
Prefabs/Objects/BombCart's scale changes to Vector3.zero via a lerp - The
Diggingparticles gets childed toPrefabs/Objects/BombCart - The
Diggingparticles has their scale set to 1.0x - AddDelayedProjectile 1 call happens
- The
delprojthat was just added has itsargsset tomove,0,-0.5,0@noshadow@partoff,0,0.5,0@partoff,0,1,0 - animstate set to 103
- Yield for 0.5 seconds
data[0]is set to 2 (meaning this move can't be used on the next actor turn, but it will become usable in 2 actor turns)- If hardmode is true, the spear dash attack move is performed immediately without ending the actor turn