Add stone rain attack to second chapter boss. Second Chapter boss AI routine completed. Release Build 10015.
parent
001d5e1c79
commit
7bb265e82a
@ -0,0 +1,90 @@ |
|||||||
|
#pragma region License |
||||||
|
/*
|
||||||
|
License (OLC-3) |
||||||
|
~~~~~~~~~~~~~~~ |
||||||
|
|
||||||
|
Copyright 2024 Joshua Sigona <sigonasr2@gmail.com> |
||||||
|
|
||||||
|
Redistribution and use in source and binary forms, with or without modification, |
||||||
|
are permitted provided that the following conditions are met: |
||||||
|
|
||||||
|
1. Redistributions or derivations of source code must retain the above copyright |
||||||
|
notice, this list of conditions and the following disclaimer. |
||||||
|
|
||||||
|
2. Redistributions or derivative works in binary form must reproduce the above |
||||||
|
copyright notice. This list of conditions and the following disclaimer must be |
||||||
|
reproduced in the documentation and/or other materials provided with the distribution. |
||||||
|
|
||||||
|
3. Neither the name of the copyright holder nor the names of its contributors may |
||||||
|
be used to endorse or promote products derived from this software without specific |
||||||
|
prior written permission. |
||||||
|
|
||||||
|
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY |
||||||
|
EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
||||||
|
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT |
||||||
|
SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, |
||||||
|
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED |
||||||
|
TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR |
||||||
|
BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN |
||||||
|
CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN |
||||||
|
ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
||||||
|
SUCH DAMAGE. |
||||||
|
|
||||||
|
Portions of this software are copyright © 2024 The FreeType |
||||||
|
Project (www.freetype.org). Please see LICENSE_FT.txt for more information. |
||||||
|
All rights reserved. |
||||||
|
*/ |
||||||
|
#pragma endregion |
||||||
|
|
||||||
|
#include "BulletTypes.h" |
||||||
|
#include "DEFINES.h" |
||||||
|
#include "AdventuresInLestoria.h" |
||||||
|
#include "util.h" |
||||||
|
#include <ranges> |
||||||
|
#include "SoundEffect.h" |
||||||
|
|
||||||
|
INCLUDE_game |
||||||
|
|
||||||
|
FallingStone::FallingStone(vf2d targetPos,vf2d vel,float zVel,float indicatorDisplayTime,float radius,int damage,bool upperLevel,bool hitsMultiple,float knockbackAmt,float lifetime,bool friendly,Pixel col,vf2d scale,float image_angle,float spellCircleRotation,float spellCircleRotationSpd,Pixel insigniaCol,float insigniaRotation,float insigniaRotationSpd) |
||||||
|
:Bullet(targetPos,vel,radius,damage,"rock.png",upperLevel,false,lifetime+0.1f,false,friendly,col,scale,image_angle),targetPos(targetPos),zVel(zVel),indicatorDisplayTime(indicatorDisplayTime),knockbackAmt(knockbackAmt), |
||||||
|
indicator(targetPos,lifetime+0.1f,"range_indicator.png","spell_insignia.png",upperLevel,radius/12.f,0.5f,{},col,spellCircleRotation,spellCircleRotationSpd,false,radius/12.f,0.f,{},insigniaCol,insigniaRotation,insigniaRotationSpd,false){ |
||||||
|
pos+=-vel*lifetime; |
||||||
|
z=-zVel*lifetime; |
||||||
|
} |
||||||
|
|
||||||
|
void FallingStone::Update(float fElapsedTime){ |
||||||
|
z+=zVel*fElapsedTime; |
||||||
|
lastTrailEffect-=fElapsedTime; |
||||||
|
if(z<=0.f){ |
||||||
|
z=0.f; |
||||||
|
vel={}; |
||||||
|
if(IsActivated()){ |
||||||
|
fadeOutTime=0.5f; |
||||||
|
SoundEffect::PlaySFX("Stone Land",pos); |
||||||
|
if(friendly){ |
||||||
|
for(auto&[monsterPtr,hurt]:game->Hurt(targetPos,radius,damage,OnUpperLevel(),z,HurtType::MONSTER)){ |
||||||
|
if(hurt)std::get<Monster*>(monsterPtr)->ApplyIframes(0.1f); |
||||||
|
} |
||||||
|
} |
||||||
|
else{ |
||||||
|
for(auto&[playerPtr,hurt]:game->Hurt(targetPos,radius,damage,OnUpperLevel(),z,HurtType::PLAYER)){ |
||||||
|
if(hurt)std::get<Player*>(playerPtr)->ApplyIframes(0.1f); |
||||||
|
} |
||||||
|
} |
||||||
|
game->ProximityKnockback(targetPos,radius,knockbackAmt,HurtType::PLAYER|HurtType::MONSTER); |
||||||
|
for(int i:std::ranges::iota_view(0,30))game->AddEffect(std::make_unique<Effect>(pos-vf2d{0.f,GetZ()},util::random_range(0.05f,0.2f),"circle_outline.png",OnUpperLevel(),util::random_range(0.5f,1.f),0.2f,vf2d{util::random_range(-10.f,10.f),util::random_range(-3.f,0.f)},PixelLerp(BLACK,col,util::random(1.f)),0.f,0.f,true)); |
||||||
|
Deactivate(); |
||||||
|
} |
||||||
|
}else{ |
||||||
|
if(lastTrailEffect<=0.f){ |
||||||
|
game->AddEffect(std::make_unique<Effect>(pos-vf2d{0.f,GetZ()},util::random_range(0.05f,0.2f),"circle_outline.png",OnUpperLevel(),util::random_range(0.5f,1.f),0.2f,vf2d{util::random_range(-3.f,3.f),util::random_range(-3.f,3.f)},PixelLerp(BLACK,col,util::random(1.f)),0.f,0.f,true)); |
||||||
|
} |
||||||
|
} |
||||||
|
indicator.Update(fElapsedTime); |
||||||
|
} |
||||||
|
void FallingStone::Draw(const Pixel blendCol)const{ |
||||||
|
if(lifetime<=indicatorDisplayTime){ |
||||||
|
indicator.Draw(); |
||||||
|
} |
||||||
|
Bullet::Draw(blendCol); |
||||||
|
} |
Binary file not shown.
Binary file not shown.
Loading…
Reference in new issue