Last curse phase does not spawn a coin and immediately applies the curse. Release Build 12250.
All checks were successful
Emscripten Build / Build_and_Deploy_Web_Build (push) Successful in 6m38s

This commit is contained in:
sigonasr2 2025-08-04 13:45:50 -05:00
parent a22179f692
commit e780d2b48e
3 changed files with 12 additions and 7 deletions

View File

@ -234,20 +234,25 @@ void Monster::STRATEGY::GHOST_OF_PIRATE_CAPTAIN(Monster&m,float fElapsedTime,std
m.F(A::TOSS_COIN_WAIT_TIMER)-=fElapsedTime; m.F(A::TOSS_COIN_WAIT_TIMER)-=fElapsedTime;
if(m.F(A::TOSS_COIN_WAIT_TIMER)<=0.f){ if(m.F(A::TOSS_COIN_WAIT_TIMER)<=0.f){
const float curseDmgPctOverTime{ConfigFloat("Curse Damage")}; const float curseDmgPctOverTime{ConfigFloat("Curse Damage")};
game->GetPlayer()->AddBuff(BuffType::PIRATE_GHOST_CAPTAIN_PRECURSE,ConfigFloat("Curse Damage Wait Time"),ceil(game->GetPlayer()->GetMaxHealth()*ConfigFloat("Curse Damage")/100.f)+1,[curseDmgPctOverTime](Player*attachedTarget,Buff&b){ const bool OnLastCursePhase{Config("Curse Thresholds").GetValueCount()==m.I(A::CURSE_THRESHOLD_ARRAY_IND)};
attachedTarget->AddBuff(BuffType::PIRATE_GHOST_CAPTAIN_CURSE_DOT,BuffRestorationType::OVER_TIME,BuffOverTimeType::HP_PCT_DAMAGE_OVER_TIME,INFINITY,curseDmgPctOverTime,1.f); if(OnLastCursePhase){ //Permanent Curse for the rest of the fight.
}); game->GetPlayer()->AddBuff(BuffType::PIRATE_GHOST_CAPTAIN_CURSE_DOT,BuffRestorationType::OVER_TIME,BuffOverTimeType::HP_PCT_DAMAGE_OVER_TIME,INFINITY,curseDmgPctOverTime,1.f);
game->SpawnMonster(m.V(A::TOSS_COIN_TARGET),MONSTER_DATA["Pirate's Coin"],m.OnUpperLevel()); }else{
game->GetPlayer()->AddBuff(BuffType::PIRATE_GHOST_CAPTAIN_PRECURSE,ConfigFloat("Curse Damage Wait Time"),ceil(game->GetPlayer()->GetMaxHealth()*ConfigFloat("Curse Damage")/100.f)+1,[curseDmgPctOverTime](Player*attachedTarget,Buff&b){
attachedTarget->AddBuff(BuffType::PIRATE_GHOST_CAPTAIN_CURSE_DOT,BuffRestorationType::OVER_TIME,BuffOverTimeType::HP_PCT_DAMAGE_OVER_TIME,INFINITY,curseDmgPctOverTime,1.f);
});
game->SpawnMonster(m.V(A::TOSS_COIN_TARGET),MONSTER_DATA["Pirate's Coin"],m.OnUpperLevel());
}
m.SetupAfterImage(); m.SetupAfterImage();
m.afterImagePos=m.GetPos(); m.afterImagePos=m.GetPos();
m.SetPos(m.V(A::HIDING_POS)); m.SetPos(m.V(A::HIDING_POS));
m.SetVelocity({}); m.SetVelocity({});
m.arrowIndicator=false; //While the boss is hiding, the indicator will not show up. m.arrowIndicator=false; //While the boss is hiding, the indicator will not show up.
m.SetStrategyOnHitFunction([&m,&strategy](const HurtDamageInfo damageData,Monster&monster,const StrategyName&strategyName)->void{ m.SetStrategyOnHitFunction([&m,&OnLastCursePhase](const HurtDamageInfo damageData,Monster&monster,const StrategyName&strategyName)->void{
m.SetPhase(strategyName,NORMAL); m.SetPhase(strategyName,NORMAL);
m.arrowIndicator=true; m.arrowIndicator=true;
m.SetStrategyOnHitFunction({}); m.SetStrategyOnHitFunction({});
if(Config("Curse Thresholds").GetValueCount()==m.I(A::CURSE_THRESHOLD_ARRAY_IND)){ if(OnLastCursePhase){
const std::string_view PIRATES_TREASURE{"Pirate's Treasure"}; const std::string_view PIRATES_TREASURE{"Pirate's Treasure"};
for(std::shared_ptr<Monster>&m:MONSTER_LIST for(std::shared_ptr<Monster>&m:MONSTER_LIST
|std::views::filter([&PIRATES_TREASURE](std::shared_ptr<Monster>&m){return m->GetStrategyName()==PIRATES_TREASURE;})){ |std::views::filter([&PIRATES_TREASURE](std::shared_ptr<Monster>&m){return m->GetStrategyName()==PIRATES_TREASURE;})){

View File

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