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
checkingdead
is set to the BasicAttack 1 call- Yield all frames until
checkingdead
is 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:
Jump
sound 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):
Charge7
sound 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
trail
set to true- If we decided to loop:
- Over the course of 11.0 frames, this enemy moves to the result of a lerp from
playertargetentity
to 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]
Toss12
sound plays- Over the course of 19.0 frames (14.0 frames instead if hardmode is true), this enemy moves to
playertargetentity
position + (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:
Spin3
sound 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
trail
set 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
forcemove
is done - A new
Prefabs/Objects/BombCart
GameObject is instantiated childed to thebattlemap
at 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
InkOnBlock
property, thePrefabs/Objects/BombCart
's first child'ssprite
is set to the corresponding item sprite of the effect - Otherwise, the
Prefabs/Objects/BombCart
's first child'ssprite
is set to aHoneyDrop
item sprite with a color of 400040 (dark purple) - Yield for 0.5 seconds
Dig2
sound plays with 1.1 pitch- Yield for 31.0 frames counted locally
Digging
particles 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
Digging
particles gets childed toPrefabs/Objects/BombCart
- The
Digging
particles has their scale set to 1.0x - AddDelayedProjectile 1 call happens
- The
delproj
that was just added has itsargs
set 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