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