@ -50,7 +50,7 @@ struct EnergyBolt:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct FireBolt : public Bullet {
@ -59,7 +59,7 @@ struct FireBolt:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
std : : optional < std : : reference_wrapper < TrailEffect > > flameTrail ;
} ;
@ -74,7 +74,7 @@ struct LightningBolt:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
/*chainLightningRepeatCount - Set to higher amount to indicate when this monster instead affects monsters due to the enchantment, which changes which shock count variable we look at and will be used for counting down shock times.*/
static void ApplyLightningShock ( const Monster & monster , const bool onUpperLevel , const ChainLightningStatus chainLightningRepeatCount = ORIGINAL_BOLT ) ;
@ -94,7 +94,7 @@ struct Arrow:public Bullet{
const vf2d PointToBestTargetPath ( const uint8_t perceptionLevel ) ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
void Draw ( const Pixel blendCol ) const override ;
} ;
@ -105,7 +105,7 @@ struct ChargedArrow:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
std : : string laserGraphic ;
} ;
@ -121,7 +121,7 @@ struct FrogTongue:public Bullet{
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void Draw ( const Pixel blendCol ) const override ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct Wisp : public Bullet {
@ -129,7 +129,7 @@ struct Wisp:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
enum class HorizontalFlip {
@ -158,7 +158,7 @@ struct DaggerStab:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct DaggerSlash : public Bullet {
@ -171,7 +171,7 @@ struct DaggerSlash:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct Bomb : public Bullet {
@ -188,7 +188,7 @@ struct Bomb:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
void Draw ( const Pixel blendCol ) const override ;
} ;
@ -214,7 +214,7 @@ struct LevitatingRock:public Bullet{
void Draw ( const Pixel blendCol ) const override ;
void AssignMaster ( LevitatingRock * masterRock ) ;
const bool IsMaster ( ) const ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct Tornado : public Bullet {
@ -229,7 +229,7 @@ struct Tornado:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct Debris : public Bullet {
@ -240,7 +240,7 @@ struct Debris:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
void Draw ( const Pixel blendCol ) const override ;
} ;
@ -253,12 +253,12 @@ struct LargeTornado:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct Feather : public Bullet {
Feather ( vf2d pos , vf2d vel , float radius , int damage , bool upperLevel , bool hitsMultiple = false , float lifetime = INFINITE , bool friendly = false , Pixel col = WHITE , vf2d scale = { 1 , 1 } , float image_angle = 0.f ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct LargeStone : public Bullet {
@ -268,7 +268,7 @@ protected:
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
const float gravity ;
const float fixedTimeStep { 1 / 30.f } ;
@ -288,7 +288,7 @@ struct FallingBullet:public Bullet{
protected :
void Update ( float fElapsedTime ) override ;
void Draw ( const Pixel blendCol ) const override ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
const vf2d targetPos ;
const float zVel { } ;
@ -304,7 +304,7 @@ struct DeadlyDash:public Bullet{
DeadlyDash ( vf2d startPos , vf2d endPos , float radius , float afterImagesLingeringTime , int damage , float knockbackAmt , bool upperLevel , bool friendly , float afterImagesSpreadDist , const std : : string & animation , Pixel col ) ;
protected :
void Draw ( const Pixel blendCol ) const override ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
const vf2d startPos ;
const vf2d endPos ;
@ -319,7 +319,7 @@ struct BearTrap:public Bullet{
BearTrap ( vf2d pos , float radius , int damage , float fadeinTime , float fadeoutTime , bool upperLevel , bool hitsMultiple = false , float lifetime = INFINITE , bool friendly = false , Pixel col = WHITE , vf2d scale = { 1 , 1 } ) ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
} ;
struct ExplosiveTrap : public Bullet {
@ -327,7 +327,7 @@ struct ExplosiveTrap:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
void Detonate ( ) ;
const float explosionRadius { } ;
@ -358,7 +358,7 @@ private:
struct ThrownProjectile : public Bullet {
ThrownProjectile ( vf2d pos , vf2d targetPos , const std : : string & img , float explodeRadius , float z , float totalFallTime , float totalRiseZAmt , int damage , bool upperLevel , bool hitsMultiple = false , float lifetime = INFINITE , bool friendly = false , Pixel col = WHITE , vf2d scale = { 1 , 1 } , float image_angle = { 0.f } , const std : : optional < Effect > explodeEffect = { } , const std : : optional < std : : string > explodeSoundEffect = { } , const std : : optional < LingeringEffect > lingeringEffect = { } ) ;
void Update ( float fElapsedTime ) override ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
void _OnGroundLand ( ) ;
virtual void OnGroundLand ( ) ; //This is called when the projectile lands, damage is not dealt yet, default behavior just deals damage in the area.
protected :
@ -379,7 +379,7 @@ protected:
struct PoisonBottle : public ThrownProjectile {
PoisonBottle ( vf2d pos , vf2d targetPos , const std : : string & img , float explodeRadius , float bounceExplodeRadius , float z , float totalFallTime , float totalRiseZAmt , int damage , int additionalBounceCount , bool upperLevel , bool hitsMultiple = false , float lifetime = INFINITE , bool friendly = false , Pixel col = WHITE , vf2d scale = { 1 , 1 } , float image_angle = { 0.f } ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
virtual void OnGroundLand ( ) override final ; //This is called when the projectile lands, damage is not dealt yet, default behavior just deals damage in the area.
private :
const float bounceExplodeRadius ;
@ -391,7 +391,7 @@ struct BurstBullet:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
void Explode ( ) ;
const Entity target ;
@ -413,7 +413,7 @@ struct RotateBullet:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
const float headingAngleChange ;
} ;
@ -423,7 +423,7 @@ struct InkBullet:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
void Splat ( ) ;
const vf2d targetPos ;
@ -437,7 +437,7 @@ private:
struct HomingBullet : public Bullet {
HomingBullet ( const vf2d pos , const Entity target , const float rotateTowardsSpeed , const float rotateTowardsSpeedCoveredInInk , const float lifetime , const float speed , const float radius , const int damage , const bool upperLevel , const bool friendly = false , const Pixel col = WHITE , const vf2d scale = { 1 , 1 } , const float image_angle = 0.f ) ;
void Update ( float fElapsedTime ) override ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
const Entity target ;
const float rotateTowardsSpeed ;
@ -449,7 +449,7 @@ struct GhostSaber:public Bullet{
void Update ( float fElapsedTime ) override ;
BulletDestroyState PlayerHit ( Player * player ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _PlayerHit()!!
BulletDestroyState MonsterHit ( Monster & monster , const uint8_t markStacksBeforeHit ) override ; //DO NOT CALL THIS DIRECTLY! INSTEAD USE _MonsterHit()!!
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) ;
void ModifyOutgoingDamageData ( HurtDamageInfo & data ) override ;
private :
const std : : weak_ptr < Monster > attachedMonster ;
const float rotSpd ;