Fix up MonsterStrategy ambiguous naming. Added operator<< overload for the enum for safemap compatibility. Release Build 13582.
Some checks failed
Emscripten Build / Build_and_Deploy_Web_Build (push) Successful in 7m4s
Emscripten Build / UnitTesting (push) Failing after 7m38s

This commit is contained in:
AMay 2026-05-11 00:55:11 -05:00
parent ffeab76719
commit 443434c30c
31 changed files with 62 additions and 54 deletions

View File

@ -69,7 +69,7 @@ DEFINE_STRATEGY(BEAR)
m.RotateTowardsPos(m.GetPos()+m.V(A::LOCKON_POS).cart());
}else{
m.target=game->GetPlayer()->GetPos();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}
}break;
case 1:{

View File

@ -61,14 +61,14 @@ DEFINE_STRATEGY(BOAR)
float distToPlayer=m.GetDistanceFrom(game->GetPlayer()->GetPos());
if(m.canMove&&distToPlayer>=ConfigInt("Closein Range")/100.f*24){
m.RemoveBuff(BuffType::SELF_INFLICTED_SLOWDOWN);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(m.HasLineOfSight(game->GetPlayer()->GetPos())&&m.canMove&&distToPlayer<=ConfigInt("Backpedal Range")/100.f*24){
m.RemoveBuff(BuffType::SELF_INFLICTED_SLOWDOWN);
m.AddBuff(BuffType::SELF_INFLICTED_SLOWDOWN,INFINITE,(100-ConfigInt("Backpedal Movespeed"))/100.f);
m.target=geom2d::line<float>(m.GetPos(),game->GetPlayer()->GetPos()).rpoint(-100);
if(m.attackedByPlayer)goto ScratchPhaseTransition;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.UpdateFacingDirection(game->GetPlayer()->GetPos());
}else{
ScratchPhaseTransition:
@ -109,7 +109,7 @@ DEFINE_STRATEGY(BOAR)
if(m.F(A::TARGET_TIMER)<=0||m.bumpedIntoTerrain||distToTarget<12.f){
TransitionToRecoveryPhase();
}else{
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
//m.PerformShootAnimation();
if(!m.canMove)TransitionToRecoveryPhase();
}

View File

@ -78,11 +78,11 @@ DEFINE_STRATEGY(CRAB)
}else
if(outsideMaxShootingRange){
m.target=game->GetPlayer()->GetPos();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(distToPlayer<ConfigPixels("Run Away Range")){
m.target=geom2d::line<float>(m.GetPos(),game->GetPlayer()->GetPos()).upoint(-1);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(distToPlayer>=ConfigPixelsArr("Random Direction Range",0)&&distToPlayer<ConfigPixelsArr("Random Direction Range",1)){
#define CW true
@ -91,7 +91,7 @@ DEFINE_STRATEGY(CRAB)
float dirFromPlayer=util::angleTo(game->GetPlayer()->GetPos(),m.GetPos());
float targetDir=m.B(A::RANDOM_DIRECTION)==CW?dirFromPlayer+PI/4:dirFromPlayer-PI/4;
m.target=game->GetPlayer()->GetPos()+vf2d{m.F(A::RANDOM_RANGE),targetDir}.cart();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.F(A::CHASE_TIMER)=1.f;
}
}break;
@ -105,7 +105,7 @@ DEFINE_STRATEGY(CRAB)
}break;
case CHARGE:{
m.F(A::CHASE_TIMER)-=fElapsedTime;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.F(A::CHASE_TIMER)<=0.f||m.ReachedTargetPos()){
SETPHASE(MOVE);
m.B(A::RANDOM_DIRECTION)=util::random()%2;

View File

@ -60,7 +60,7 @@ DEFINE_STRATEGY(FROG)
goto phase;
}
m.RotateTowardsPos(m.target);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.PerformJumpAnimation();
}break;
case 1:{

View File

@ -310,7 +310,7 @@ DEFINE_STRATEGY(GHOST_OF_PIRATE_CAPTAIN)
}
}break;
case FINAL:{
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.target=ConfigVec("Final Standing Spot");
m.PerformAnimation("SLASH",Direction::SOUTH);
m.SetStrategyOnHitFunction({});
@ -321,7 +321,7 @@ DEFINE_STRATEGY(GHOST_OF_PIRATE_CAPTAIN)
|std::views::filter([&PIRATES_TREASURE](std::shared_ptr<Monster>&m){return m->GetStrategyName()==PIRATES_TREASURE;})){
m.target=treasure->GetPos();
}
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.PerformAnimation("DEATH");
game->GetPlayer()->RemoveAllBuffs(BuffType::PIRATE_GHOST_CAPTAIN_CURSE_DOT);
return true;

View File

@ -78,7 +78,7 @@ DEFINE_STRATEGY(GIANT_CRAB)
}
}
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}break;
}
END_STRATEGY

View File

@ -64,7 +64,7 @@ DEFINE_STRATEGY(GOBLIN_BOAR_RIDER)
m.deathData.emplace_back(ConfigString("Spawned Monster"),1U);
}
m.RunStrategy(BOAR);
m.RunStrategy(MonsterStrategy::BOAR);
m.F(A::ATTACK_COOLDOWN)+=fElapsedTime;
if(m.F(A::SHOOT_TIMER)>0.f){

View File

@ -79,7 +79,7 @@ DEFINE_STRATEGY(GOBLIN_BOMB)
m.F(A::SHOOT_TIMER)=0.f;
}
if(m.F(A::SHOOT_ANIMATION_TIME)<0.f)m.B(A::IGNORE_DEFAULT_ANIMATIONS)=false;
m.RunStrategy(RUN_AWAY);
m.RunStrategy(MonsterStrategy::RUN_AWAY);
}break;
}
END_STRATEGY

View File

@ -86,14 +86,14 @@ DEFINE_STRATEGY(GOBLIN_BOW)
if(outsideMaxShootingRange){
m.target=game->GetPlayer()->GetPos();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(m.F(A::ATTACK_COOLDOWN)>=ConfigFloat("Attack Reload Time")){
PrepareToShoot();
}else
if(distToPlayer<ConfigPixels("Run Away Range")){
m.target=geom2d::line<float>(m.GetPos(),game->GetPlayer()->GetPos()).upoint(-1);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(distToPlayer>=ConfigPixelsArr("Random Direction Range",0)&&distToPlayer<ConfigPixelsArr("Random Direction Range",1)){
#define CW true
@ -102,7 +102,7 @@ DEFINE_STRATEGY(GOBLIN_BOW)
float dirFromPlayer=util::angleTo(game->GetPlayer()->GetPos(),m.GetPos());
float targetDir=m.B(A::RANDOM_DIRECTION)==CW?dirFromPlayer+PI/4:dirFromPlayer-PI/4;
m.target=game->GetPlayer()->GetPos()+vf2d{m.F(A::RANDOM_RANGE),targetDir}.cart();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(m.F(A::ATTACK_COOLDOWN)>=ConfigFloat("Attack Reload Time")/2.f){ //Only the stand still and shoot range remains, which is twice as fast...
PrepareToShoot();

View File

@ -69,7 +69,7 @@ DEFINE_STRATEGY(GOBLIN_DAGGER)
case MOVE:{
float distToPlayer=m.GetDistanceFrom(game->GetPlayer()->GetPos());
if(distToPlayer>ConfigFloat("Attack Spacing")/100.f*24){
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else{
SETPHASE(WINDUP);
m.I(A::ATTACK_TYPE)=util::random()%2; //Choose randomly between stab or slash.

View File

@ -81,7 +81,7 @@ DEFINE_STRATEGY(HAWK)
float dirToPlayer{util::pointTo(game->GetPlayer()->GetPos(),m.GetPos()).polar().y};
dirToPlayer+=m.B(A::RANDOM_DIRECTION)?0.25*PI:-0.25*PI;
m.target=game->GetPlayer()->GetPos()+vf2d{ConfigFloat("Flight Distance"),dirToPlayer}.cart();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}
}break;
case PREPARE_CHARGE:{
@ -99,7 +99,7 @@ DEFINE_STRATEGY(HAWK)
m.B(A::IGNORE_DEFAULT_ANIMATIONS)=true;
if(m.F(A::FLYING_HEIGHT)>-ConfigFloat("Flight Oscillation Amount"))m.F(A::FLYING_HEIGHT)=std::max(-ConfigFloat("Flight Oscillation Amount"),m.F(A::FLYING_HEIGHT)-ConfigFloat("Attack Z Speed")*fElapsedTime);
m.targetAcquireTimer=1.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
float distToTarget=geom2d::line<float>(m.GetPos(),m.target).length();
if(distToTarget<12.f){
m.F(A::TARGET_FLYING_HEIGHT)=ConfigFloat("Flight Height")-ConfigFloat("Flight Height Variance")+util::random_range(0,ConfigFloat("Flight Height Variance")*2);

View File

@ -79,7 +79,7 @@ DEFINE_STRATEGY(MAJOR_HAWK)
float dirToPlayer{util::pointTo(game->GetPlayer()->GetPos(),m.GetPos()).polar().y};
dirToPlayer+=m.B(A::RANDOM_DIRECTION)?0.25*PI:-0.25*PI;
m.target=game->GetPlayer()->GetPos()+vf2d{ConfigFloat("Aggressive Flight Distance"),dirToPlayer}.cart();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}
}break;
case PREPARE_CHARGE:{
@ -97,7 +97,7 @@ DEFINE_STRATEGY(MAJOR_HAWK)
m.B(A::IGNORE_DEFAULT_ANIMATIONS)=true;
if(m.F(A::FLYING_HEIGHT)>-ConfigFloat("Aggressive Flight Oscillation Amount"))m.F(A::FLYING_HEIGHT)=std::max(-ConfigFloat("Aggressive Flight Oscillation Amount"),m.F(A::FLYING_HEIGHT)-ConfigFloat("Aggressive Attack Z Speed")*fElapsedTime);
m.targetAcquireTimer=1.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
float distToTarget=geom2d::line<float>(m.GetPos(),m.target).length();
if(distToTarget<12.f){
m.F(A::TARGET_FLYING_HEIGHT)=ConfigFloat("Aggressive Flight Height")-ConfigFloat("Aggressive Flight Height Variance")+util::random_range(0,ConfigFloat("Aggressive Flight Height Variance")*2);
@ -108,5 +108,5 @@ DEFINE_STRATEGY(MAJOR_HAWK)
m.B(A::IGNORE_DEFAULT_ANIMATIONS)=false;
}break;
}
}else m.RunStrategy(HAWK); //Use normal hawk behaviors when there are too many Major Hawks.
}else m.RunStrategy(MonsterStrategy::HAWK); //Use normal hawk behaviors when there are too many Major Hawks.
END_STRATEGY

View File

@ -82,7 +82,7 @@ class Monster:public IAttributable{
friend const bool Entity::IsBoss()const;
friend class Entity;
public:
enum MonsterStrategy{
enum class MonsterStrategy{
RUN_TOWARDS,
SHOOT_AFAR,
TURRET,
@ -135,6 +135,7 @@ public:
////////////////////////////////////
END_ENUM //THIS SHOULD ALWAYS BE THE LAST ITEM
};
friend std::ostream&operator<<(std::ostream&out,const Monster::MonsterStrategy&strategy);
struct STRATEGY{
static std::string ERR;
static int _GetInt(Monster&m,const std::string&param,const std::string&strategy,int index=0);
@ -532,4 +533,6 @@ struct MonsterSpawner{
vf2d GetPos();
bool DoesUpperLevelSpawning();
void SetTriggered(bool trigger,bool spawnMonsters=true);
};
};
std::ostream&operator<<(std::ostream&out,const Monster::MonsterStrategy&strategy);

View File

@ -53,7 +53,7 @@ DEFINE_STRATEGY(PARROT)
case RUN:{
if(!m.attachedTarget.expired()&&m.attachedTarget.lock()->IsAlive()){
m.PerformAnimation("FLYING");
m.RunStrategy(HAWK);
m.RunStrategy(MonsterStrategy::HAWK);
}else{
m.lifetime=10.f;
SETPHASE(FLY_AWAY);

View File

@ -79,14 +79,14 @@ DEFINE_STRATEGY(PIRATE_BUCCANEER)
if(outsideMaxShootingRange){
m.target=game->GetPlayer()->GetPos();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(m.F(A::ATTACK_COOLDOWN)>=ConfigFloat("Attack Reload Time")){
PrepareToShoot();
}else
if(distToPlayer<ConfigPixels("Run Away Range")){
m.target=geom2d::line<float>(m.GetPos(),game->GetPlayer()->GetPos()).upoint(-1);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else
if(m.F(A::ATTACK_COOLDOWN)>=ConfigFloat("Attack Reload Time")/2.f){ //Only the stand still and shoot range remains, which is twice as fast...
PrepareToShoot();

View File

@ -108,7 +108,7 @@ DEFINE_STRATEGY(PIRATE_CAPTAIN)
else{
float distToPlayer=m.GetDistanceFrom(game->GetPlayer()->GetPos());
if(distToPlayer>ConfigFloat("Attack Spacing")/100.f*24){
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else{
SETPHASE(WINDUP);
m.I(A::ATTACK_TYPE)=util::random()%2; //Choose randomly between stab or slash.

View File

@ -108,7 +108,7 @@ DEFINE_STRATEGY(PIRATE_MARAUDER)
}
NormalBehavior:
if(distToPlayer>ConfigFloat("Attack Spacing")/100.f*24){
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}else{
SETPHASE(WINDUP);
m.F(A::CASTING_TIMER)=ConfigFloat("Slash Windup Time");

View File

@ -49,6 +49,7 @@ void Monster::InitializeStrategies(){
#define ADD_STRATEGY(enum,name) \
Monster::monsterStrategies.insert(enum,StrategyFunction{name,Monster::STRATEGY::enum}); \
Monster::stringToStrategyMap.insert(name,enum);
using enum Monster::MonsterStrategy;
ADD_STRATEGY(RUN_TOWARDS,"Run Towards");
ADD_STRATEGY(SHOOT_AFAR,"Shoot Afar");
ADD_STRATEGY(TURRET,"Turret");
@ -209,4 +210,8 @@ float Monster::STRATEGY::_GetPixels(Monster&m,const std::string&param,const std:
ERR(std::format("Monster {} trying to read non-existent Real Property {}[{}] (for pixel conversion) for Strategy {}. THIS SHOULD NOT BE HAPPENING!",m.GetName(),param,index,strategy))
return{};
}
}
std::ostream&operator<<(std::ostream&out,const Monster::MonsterStrategy&strategy){
return out<<Monster::monsterStrategies.at(strategy).name;
}

View File

@ -73,7 +73,7 @@ DEFINE_STRATEGY(SANDWORM)
}break;
case UNDERGROUND:{
m.SetCollisionRadius(0.f);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.PerformAnimation("SWIM",m.GetFacingDirection());
if(m.ReachedTargetPos()){
m.PerformAnimation("EMERGE",game->GetPlayer()->GetPos());

View File

@ -69,7 +69,7 @@ DEFINE_STRATEGY(SKELETON_BARBARIAN)
SETPHASE(WINDUP_WHIRLWIND);
break;
}
m.RunStrategy(GOBLIN_DAGGER);
m.RunStrategy(MonsterStrategy::GOBLIN_DAGGER);
}break;
case WINDUP_WHIRLWIND:{
m.F(A::CASTING_TIMER)-=fElapsedTime;

View File

@ -94,7 +94,7 @@ DEFINE_STRATEGY(SKELETON_CAPTAIN)
m.PerformJumpAnimation();
}else{
m.target=m.V(A::LOCKON_POS);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}
}break;
case RECOVERY:{

View File

@ -44,6 +44,6 @@ INCLUDE_game
DEFINE_STRATEGY(SKELETON_MAGE)
if(!m.currentCast){
m.RunStrategy(RUN_AWAY);
m.RunStrategy(MonsterStrategy::RUN_AWAY);
}
END_STRATEGY

View File

@ -154,7 +154,7 @@ DEFINE_STRATEGY(SLIMEKING)
};
if(m.F(A::RUN_AWAY_TIMER)>0){
m.RunStrategy(RUN_AWAY);
m.RunStrategy(MonsterStrategy::RUN_AWAY);
return;
}
@ -377,7 +377,7 @@ DEFINE_STRATEGY(SLIMEKING)
}break;
case 5:{
float targetSize=ConfigFloat("Phase5.SizeLossPerHit")/100*m.I(A::HITS_UNTIL_DEATH);
m.RunStrategy(RUN_AWAY);
m.RunStrategy(MonsterStrategy::RUN_AWAY);
if(targetSize>0){
m.SetSize(targetSize,false);
}else{

View File

@ -53,7 +53,7 @@ DEFINE_STRATEGY(SPIDER)
}break;
case RUN:{
const bool isHidden{util::distance(game->GetPlayer()->GetPos(),m.GetPos())>=ConfigPixels("Hide Range")};
m.RunStrategy(GOBLIN_DAGGER);
m.RunStrategy(MonsterStrategy::GOBLIN_DAGGER);
const float fadeSpd{255*(1/ConfigFloat("Hide Fade Speed"))};
if(isHidden)m.SetTransparency(std::max(0.f,m.F(A::ALPHA_AMOUNT)-fadeSpd*game->GetElapsedTime()));
else m.SetTransparency(std::min(255.f,m.F(A::ALPHA_AMOUNT)+fadeSpd*game->GetElapsedTime()));

View File

@ -299,7 +299,7 @@ DEFINE_STRATEGY(STONE_GOLEM)
}break;
case BEAR_ATTACK:{
m.F(A::CHASE_TIMER)+=fElapsedTime;
m.RunStrategy(BEAR);
m.RunStrategy(MonsterStrategy::BEAR);
//Extending the bear script's variables to read the state of it...
const bool SlamHasFinished=m.I(A::ATTACK_COUNT)!=m.I(A::BEAR_STOMP_COUNT); //The bear script uses the internal phase variable to determine the state of things.
if(SlamHasFinished){

View File

@ -140,7 +140,7 @@ DEFINE_STRATEGY(STONE_ELEMENTAL)
geom2d::line<float>stonePillarCastLine{m.V(A::LOCKON_POS),m.GetPos()};
const vf2d targetWalkPos=stonePillarCastLine.rpoint(stonePillarCastLine.length()+48.f);
m.target=targetWalkPos;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.PerformAnimation("STONE PILLAR CAST");
m.UpdateFacingDirection(targetWalkPos);
}else{
@ -192,7 +192,7 @@ DEFINE_STRATEGY(STONE_ELEMENTAL)
}break;
case DIVE_UNDERGROUND_MOVE:{
m.F(A::CASTING_TIMER)-=fElapsedTime;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.F(A::CASTING_TIMER)<=0.f){
m.B(A::IGNORE_DEFAULT_ANIMATIONS)=false;

View File

@ -129,7 +129,7 @@ DEFINE_STRATEGY(URSULE)
if(distToCenter>4.0f){
m.targetAcquireTimer=20.f;
m.target=mapCenter;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
break;
}else{ //Now we're finally good for phase 2.
TransitionToPhase2();
@ -147,7 +147,7 @@ DEFINE_STRATEGY(URSULE)
}
bear:
m.RunStrategy(BEAR);
m.RunStrategy(MonsterStrategy::BEAR);
}break;
case 2:{
m.PerformAnimation("GLARE");
@ -289,7 +289,7 @@ DEFINE_STRATEGY(URSULE)
if(distToCenter>4.0f){
m.targetAcquireTimer=20.f;
m.target=mapCenter;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
break;
}else{ //Now we're finally good for phase 2.
TransitionToPhase5();
@ -336,7 +336,7 @@ DEFINE_STRATEGY(URSULE)
}
bear2:
m.RunStrategy(BEAR);
m.RunStrategy(MonsterStrategy::BEAR);
}break;
case 4:{ //A charging phase.
m.F(A::TARGET_TIMER)=std::max(0.f,m.F(A::TARGET_TIMER)-fElapsedTime);
@ -424,7 +424,7 @@ DEFINE_STRATEGY(URSULE)
m.F(A::RUN_AWAY_TIMER)=std::max(0.f,m.F(A::RUN_AWAY_TIMER)-fElapsedTime);
m.targetAcquireTimer=20.f;
m.target=game->GetPlayer()->GetPos();
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.F(A::RUN_AWAY_TIMER)==0.f){
SETPHASE(m.I(A::PREVIOUS_PHASE));
m.RemoveBuff(SPEEDBOOST);

View File

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 3
#define VERSION_PATCH 0
#define VERSION_BUILD 13575
#define VERSION_BUILD 13582
#define stringify(a) stringify_(a)
#define stringify_(a) #a

View File

@ -64,7 +64,7 @@ DEFINE_STRATEGY(WARRIORTHIEF)
}break;
case SPIN:{
m.target=game->GetPlayer()->GetPos();
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.RunStrategy(RUN_TOWARDS);
m.F(A::SPIN_ANGLE)+=ConfigFloat("Warrior.Ability 2.SpinSpd")*game->GetElapsedTime();
if((m.F(A::SPIN_ATTACK_TIMER)-=game->GetElapsedTime())>0){
m.SetZ(float("Warrior.Ability 2.SpinMaxHeight"_I)*sin(PI*(ConfigFloat("Warrior.Ability 2.SpinTime")-m.F(A::SPIN_ATTACK_TIMER))/ConfigFloat("Warrior.Ability 2.SpinTime")));

View File

@ -56,7 +56,7 @@ DEFINE_STRATEGY(WOLF)
m.AddBuff(BuffType::LOCKON_SPEEDBOOST,INFINITE,ConfigFloat("Lockon Speed Boost")/100);
m.F(A::TARGET_TIMER)=5.0f;
}
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.target=game->GetPlayer()->GetPos();
}break;
case 1:{ //Charge the player.
@ -68,7 +68,7 @@ DEFINE_STRATEGY(WOLF)
m.PerformIdleAnimation();
}else{
m.target=m.V(A::LOCKON_POS);
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
}
}break;
case 2:{ //Recovery period after charging.

View File

@ -165,7 +165,7 @@ DEFINE_STRATEGY(ZEPHY)
}break;
case FLY_ACROSS_PREPARE:{
m.targetAcquireTimer=20.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.ReachedTargetPos()){
const bool RightDirectionChosen=m.I(A::ATTACK_CHOICE)==int(AttackChoice::RIGHT);
@ -179,7 +179,7 @@ DEFINE_STRATEGY(ZEPHY)
}break;
case FLY_ACROSS:{
m.targetAcquireTimer=20.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
m.F(A::SHOOT_TIMER)-=fElapsedTime;
if(m.F(A::SHOOT_TIMER)<=0.f){
CreateBullet(Bullet)(m.GetPos(),vf2d{0.f,ConfigFloat("Fly Across Attack.Attack Y Speed")},4,ConfigInt("Fly Across Attack.Poop Damage"),"birdpoop.png",m.OnUpperLevel(),false,INFINITY,false,NON_FRIENDLY,WHITE,vf2d{1.f,1.25f})EndBullet;
@ -204,7 +204,7 @@ DEFINE_STRATEGY(ZEPHY)
}break;
case TORNADO_ATTACK_PREPARE:{
m.targetAcquireTimer=20.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.ReachedTargetPos()){
SETPHASE(TORNADO_ATTACK);
m.PerformAnimation("ATTACK",Direction::SOUTH);
@ -237,7 +237,7 @@ DEFINE_STRATEGY(ZEPHY)
}break;
case WIND_ATTACK_FLY:{
m.targetAcquireTimer=20.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.ReachedTargetPos()){
SETPHASE(WIND_ATTACK_LAND);
m.F(A::TARGET_FLYING_HEIGHT)=0.f;
@ -328,7 +328,7 @@ DEFINE_STRATEGY(ZEPHY)
}break;
case HALFHEALTH_PREPARE_PHASE:{
m.targetAcquireTimer=20.f;
m.RunStrategy(RUN_TOWARDS);
m.RunStrategy(MonsterStrategy::RUN_TOWARDS);
if(m.ReachedTargetPos()){
m.F(A::TARGET_FLYING_HEIGHT)=0.f;