The open source repository for the action RPG game in development by Sig Productions titled 'Adventures in Lestoria'!
https://forums.lestoria.net
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.5 KiB
54 lines
1.5 KiB
#include "Monster.h"
|
|
#include "MonsterStrategyHelpers.h"
|
|
#include "DEFINES.h"
|
|
#include "Crawler.h"
|
|
#include "utils.h"
|
|
|
|
INCLUDE_game
|
|
INCLUDE_BULLET_LIST
|
|
|
|
void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,int strategyNumber){
|
|
float bulletSpd=ConfigFloat("BulletSpd")/100*24;
|
|
|
|
switch(m.phase){
|
|
case 0:{
|
|
m.size=ConfigInt("Phase1.Size")/100;
|
|
m.diesNormally=false;
|
|
m.Set(Attribute::IFRAME_TIME_UPON_HIT,0.f);
|
|
m.iframe_timer=ConfigFloat("Phase5.IframeTimePerHit");
|
|
m.phase=1;
|
|
}break;
|
|
case 1:{
|
|
if(m.hp<=m.maxhp*ConfigFloat("Phase2.Change")/100){
|
|
m.phase=2;
|
|
m.SetSize(ConfigFloat("Phase2.Size")/100,false);
|
|
}
|
|
if(m.GetFloat(Attribute::SHOOT_RING_TIMER)==0){
|
|
int bulletCount=ConfigInt("Phase1.RingBulletCount");
|
|
for(int i=0;i<bulletCount;i++){
|
|
float angle=((2*PI)/bulletCount)*i;
|
|
BULLET_LIST.emplace_back(std::make_unique<Bullet>(m.GetPos(),vf2d{cos(angle),sin(angle)}*bulletSpd,6,ConfigInt("ProjectileDamage"),m.OnUpperLevel(),false,YELLOW,vf2d{6,6}));
|
|
}
|
|
m.Set(Attribute::SHOOT_RING_TIMER,ConfigFloat("Phase1.ShootRepeatTime"));
|
|
}
|
|
}break;
|
|
case 2:{
|
|
if(m.hp<=m.maxhp*ConfigFloat("Phase3.Change")/100){
|
|
m.phase=3;
|
|
m.SetSize(ConfigFloat("Phase3.Size")/100,false);
|
|
}
|
|
}break;
|
|
case 3:{
|
|
if(m.hp<=m.maxhp*ConfigFloat("Phase4.Change")/100){
|
|
m.phase=4;
|
|
m.SetSize(ConfigFloat("Phase4.Size")/100,false);
|
|
}
|
|
}break;
|
|
case 4:{
|
|
if(m.hp<=0){
|
|
m.phase=5;
|
|
m.Set(Attribute::IFRAME_TIME_UPON_HIT,1.f);
|
|
}
|
|
}break;
|
|
}
|
|
} |