diff --git a/Adventures in Lestoria/Adventures in Lestoria.tiled-project b/Adventures in Lestoria/Adventures in Lestoria.tiled-project index 52be7824..f6f7a2d8 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.tiled-project +++ b/Adventures in Lestoria/Adventures in Lestoria.tiled-project @@ -288,7 +288,8 @@ "Slime King", "Windhound", "Bear", - "Frog" + "Frog", + "Ursule, Mother of Bears" ], "valuesAsFlags": false }, diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters index 73f186aa..d01bc6e1 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters @@ -737,6 +737,9 @@ Source Files\Monster Strategies + + Source Files\Monster Strategies + Source Files\Interface diff --git a/Adventures in Lestoria/Monster.cpp b/Adventures in Lestoria/Monster.cpp index 9849dd40..dffae2d8 100644 --- a/Adventures in Lestoria/Monster.cpp +++ b/Adventures in Lestoria/Monster.cpp @@ -79,9 +79,17 @@ Monster::Monster(vf2d pos,MonsterData data,bool upperLevel,bool bossMob): vf2d&Monster::GetPos(){ return pos; } -int Monster::GetHealth(){ +const int Monster::GetHealth()const{ return hp; } + +const int Monster::GetMaxHealth()const{ + return stats.A_Read("Health"); + +} +const float Monster::GetRemainingHPPct()const{ + return float(GetHealth())/GetMaxHealth(); +} int Monster::GetAttack(){ float mod_atk=float(stats.A("Attack")); mod_atk+=Get("Attack %"); diff --git a/Adventures in Lestoria/Monster.h b/Adventures in Lestoria/Monster.h index 377b5fb1..b145518f 100644 --- a/Adventures in Lestoria/Monster.h +++ b/Adventures in Lestoria/Monster.h @@ -121,7 +121,9 @@ public: Monster()=delete; Monster(vf2d pos,MonsterData data,bool upperLevel=false,bool bossMob=false); vf2d&GetPos(); - int GetHealth(); + const int GetHealth()const; + const int GetMaxHealth()const; + const float GetRemainingHPPct()const; int GetAttack(); float GetMoveSpdMult(); float GetSizeMult(); @@ -254,6 +256,7 @@ private: static void FROG(Monster&m,float fElapsedTime,std::string strategy); static void WOLF(Monster&m,float fElapsedTime,std::string strategy); static void BEAR(Monster&m,float fElapsedTime,std::string strategy); + static void URSULE(Monster&m,float fElapsedTime,std::string strategy); }; }; diff --git a/Adventures in Lestoria/Ursule.cpp b/Adventures in Lestoria/Ursule.cpp new file mode 100644 index 00000000..04d4821a --- /dev/null +++ b/Adventures in Lestoria/Ursule.cpp @@ -0,0 +1,70 @@ +#pragma region License +/* +License (OLC-3) +~~~~~~~~~~~~~~~ + +Copyright 2024 Joshua Sigona + +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 � 2023 The FreeType +Project (www.freetype.org). Please see LICENSE_FT.txt for more information. +All rights reserved. +*/ +#pragma endregion + +#include "Monster.h" +#include "AdventuresInLestoria.h" +#include "MonsterStrategyHelpers.h" +#include "util.h" +#include "BulletTypes.h" +#include "SoundEffect.h" + +INCLUDE_game +INCLUDE_BULLET_LIST +INCLUDE_GFX +INCLUDE_MONSTER_LIST +INCLUDE_MONSTER_DATA + +using A=Attribute; + +void Monster::STRATEGY::URSULE(Monster&m,float fElapsedTime,std::string strategy){ + switch(m.I(A::PHASE)){ + case 0:{ + m.phase=ConfigInt("StartPhase"); + }break; + case 1:{ //Run bear strategy in phase 1. + if(m.GetRemainingHPPct()<=ConfigInt("Phase 2.Change")/100.f){ + m.I(A::PHASE)=2; + } + + BEAR(m,fElapsedTime,"Bear"); + }break; + case 2:{ + + }break; + } +} \ No newline at end of file