Setup Zephy AI phases. Added slight recoil when monsters take damage. Release Build 9434.
This commit is contained in:
parent
f115786584
commit
e1ed802fed
@ -424,9 +424,14 @@ void Monster::Draw()const{
|
||||
if(markedForDeletion)return;
|
||||
Pixel blendCol=GetBuffs(BuffType::SLOWDOWN).size()>0?Pixel{uint8_t(255*abs(sin(1.4*GetBuffs(BuffType::SLOWDOWN)[0].duration))),uint8_t(255*abs(sin(1.4*GetBuffs(BuffType::SLOWDOWN)[0].duration))),uint8_t(128+127*abs(sin(1.4*GetBuffs(BuffType::SLOWDOWN)[0].duration)))}:WHITE;
|
||||
|
||||
const vf2d hitTimerOffset=vf2d{sin(20*PI*lastHitTimer+randomFrameOffset),0.f}*2.f*GetSizeMult();
|
||||
const vf2d zOffset=-vf2d{0,GetZ()};
|
||||
|
||||
const vf2d drawPos=GetPos()+zOffset+hitTimerOffset;
|
||||
|
||||
if(GetZ()>0){
|
||||
vf2d shadowScale=vf2d{8*GetSizeMult()/3.f,1}/std::max(1.f,GetZ()/24);
|
||||
game->view.DrawDecal(GetPos()-vf2d{3,3}*shadowScale/2+vf2d{0,6*GetSizeMult()},GFX["circle.png"].Decal(),shadowScale,BLACK);
|
||||
game->view.DrawDecal(drawPos-vf2d{3,3}*shadowScale/2+vf2d{0,6*GetSizeMult()},GFX["circle.png"].Decal(),shadowScale,BLACK);
|
||||
}
|
||||
|
||||
const bool NotOnTitleScreen=GameState::STATE!=GameState::states[States::MAIN_MENU];
|
||||
@ -439,15 +444,15 @@ void Monster::Draw()const{
|
||||
|
||||
blendCol.a=blendColAlpha;
|
||||
|
||||
game->view.DrawPartialRotatedDecal(GetPos()-vf2d{0,GetZ()},GetFrame().GetSourceImage()->Decal(),spriteRot,GetFrame().GetSourceRect().size/2,GetFrame().GetSourceRect().pos,GetFrame().GetSourceRect().size,vf2d(GetSizeMult()*(!HasFourWaySprites()&&GetFacingDirection()==Direction::EAST?-1:1),GetSizeMult()),blendCol);
|
||||
game->view.DrawPartialRotatedDecal(drawPos,GetFrame().GetSourceImage()->Decal(),spriteRot,GetFrame().GetSourceRect().size/2,GetFrame().GetSourceRect().pos,GetFrame().GetSourceRect().size,vf2d(GetSizeMult()*(!HasFourWaySprites()&&GetFacingDirection()==Direction::EAST?-1:1),GetSizeMult()),blendCol);
|
||||
if(overlaySprite.length()!=0){
|
||||
game->view.DrawPartialRotatedDecal(GetPos()-vf2d{0,GetZ()},GFX[overlaySprite].Decal(),spriteRot,GetFrame().GetSourceRect().size/2,GetFrame().GetSourceRect().pos,GetFrame().GetSourceRect().size,vf2d(GetSizeMult()*(!HasFourWaySprites()&&GetFacingDirection()==Direction::EAST?-1:1),GetSizeMult()),{blendCol.r,blendCol.g,blendCol.b,overlaySpriteTransparency});
|
||||
game->view.DrawPartialRotatedDecal(drawPos,GFX[overlaySprite].Decal(),spriteRot,GetFrame().GetSourceRect().size/2,GetFrame().GetSourceRect().pos,GetFrame().GetSourceRect().size,vf2d(GetSizeMult()*(!HasFourWaySprites()&&GetFacingDirection()==Direction::EAST?-1:1),GetSizeMult()),{blendCol.r,blendCol.g,blendCol.b,overlaySpriteTransparency});
|
||||
}
|
||||
if(HasMountedMonster())game->view.DrawPartialRotatedDecal(GetPos()-vf2d{0,GetZ()}+mountedSprOffset,GetMountedFrame().value().GetSourceImage()->Decal(),spriteRot,GetMountedFrame().value().GetSourceRect().size/2,GetMountedFrame().value().GetSourceRect().pos,GetMountedFrame().value().GetSourceRect().size,vf2d(GetSizeMult()*(!HasFourWaySprites()&&GetFacingDirection()==Direction::EAST?-1:1),GetSizeMult()),blendCol);
|
||||
if(HasMountedMonster())game->view.DrawPartialRotatedDecal(drawPos+mountedSprOffset,GetMountedFrame().value().GetSourceImage()->Decal(),spriteRot,GetMountedFrame().value().GetSourceRect().size/2,GetMountedFrame().value().GetSourceRect().pos,GetMountedFrame().value().GetSourceRect().size,vf2d(GetSizeMult()*(!HasFourWaySprites()&&GetFacingDirection()==Direction::EAST?-1:1),GetSizeMult()),blendCol);
|
||||
|
||||
std::vector<Buff>shieldBuffs=GetBuffs(BARRIER_DAMAGE_REDUCTION);
|
||||
if(shieldBuffs.size()>0){
|
||||
game->view.DrawRotatedDecal(GetPos()-vf2d{0,GetZ()},GFX["block.png"].Decal(),0.f,GFX["block.png"].Sprite()->Size()/2,{GetSizeMult(),GetSizeMult()});
|
||||
game->view.DrawRotatedDecal(drawPos,GFX["block.png"].Decal(),0.f,GFX["block.png"].Sprite()->Size()/2,{GetSizeMult(),GetSizeMult()});
|
||||
}
|
||||
|
||||
#pragma region Debug Pathfinding
|
||||
|
@ -116,4 +116,5 @@ enum class Attribute{
|
||||
IGNORE_DEFAULT_ANIMATIONS, //If set to true, movement scripts like move towards and run away will not play their animations and leave it up to the monster strategy itself. This can be useful for overrides when trying to play other attack animations etc.
|
||||
FLYING_HEIGHT,
|
||||
TARGET_FLYING_HEIGHT,
|
||||
SPAWNER_TIMER,
|
||||
};
|
@ -39,7 +39,7 @@ All rights reserved.
|
||||
#define VERSION_MAJOR 1
|
||||
#define VERSION_MINOR 2
|
||||
#define VERSION_PATCH 3
|
||||
#define VERSION_BUILD 9426
|
||||
#define VERSION_BUILD 9434
|
||||
|
||||
#define stringify(a) stringify_(a)
|
||||
#define stringify_(a) #a
|
||||
|
@ -43,10 +43,44 @@ All rights reserved.
|
||||
#include "util.h"
|
||||
|
||||
INCLUDE_game
|
||||
INCLUDE_BULLET_LIST
|
||||
INCLUDE_MONSTER_DATA
|
||||
|
||||
using A=Attribute;
|
||||
|
||||
void Monster::STRATEGY::ZEPHY(Monster&m,float fElapsedTime,std::string strategy){
|
||||
enum Phase{
|
||||
INITIALIZE,
|
||||
IDLE,
|
||||
FLY_ACROSS,
|
||||
TORNADO_ATTACK,
|
||||
WIND_ATTACK,
|
||||
HALFHEALTH_PHASE,
|
||||
};
|
||||
|
||||
if(m.phase!=HALFHEALTH_PHASE)m.F(A::SPAWNER_TIMER)-=fElapsedTime;
|
||||
if(m.F(A::SPAWNER_TIMER)<=0.f){
|
||||
const float randomDir=util::random(2*PI);
|
||||
game->SpawnMonster(m.GetPos()+vf2d{ConfigFloat("Basic Hawk Spawn Radius"),randomDir}.cart(),MONSTER_DATA.at("Hawk_NOXP"),m.OnUpperLevel());
|
||||
}
|
||||
|
||||
switch(m.phase){
|
||||
case INITIALIZE:{
|
||||
m.F(A::SPAWNER_TIMER)=ConfigFloat("Basic Hawk Spawn Time");
|
||||
}break;
|
||||
case IDLE:{
|
||||
|
||||
}break;
|
||||
case FLY_ACROSS:{
|
||||
|
||||
}break;
|
||||
case TORNADO_ATTACK:{
|
||||
|
||||
}break;
|
||||
case WIND_ATTACK:{
|
||||
|
||||
}break;
|
||||
case HALFHEALTH_PHASE:{
|
||||
|
||||
}break;
|
||||
}
|
||||
}
|
@ -775,4 +775,9 @@ MonsterStrategy
|
||||
Aggressive Hawk Count = 1
|
||||
Flight Charge Cooldown = 3s
|
||||
}
|
||||
Zephy
|
||||
{
|
||||
Basic Hawk Spawn Time = 10s
|
||||
Basic Hawk Spawn Radius = 1000
|
||||
}
|
||||
}
|
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user