diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj b/Adventures in Lestoria/Adventures in Lestoria.vcxproj index ee132871..3e602540 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj @@ -619,6 +619,10 @@ + + + + diff --git a/Adventures in Lestoria/Boar.cpp b/Adventures in Lestoria/Boar.cpp new file mode 100644 index 00000000..b6eb86d4 --- /dev/null +++ b/Adventures in Lestoria/Boar.cpp @@ -0,0 +1,80 @@ +#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 © 2024 The FreeType +Project (www.freetype.org). Please see LICENSE_FT.txt for more information. +All rights reserved. +*/ +#pragma endregion +#include "AdventuresInLestoria.h" +#include "DEFINES.h" +#include "Monster.h" +#include "MonsterStrategyHelpers.h" +/* +* Attack Strategie: If range to player >700 move closer. +if range 400-700 Scratch the ground twice and then charge with 30% Move-Spd bonus in the players direction for a distance of 900. +If range to player<400 backpaddle with 50% move-spd. if getting hit while backpaddling, start charge sequence. +*/ + +INCLUDE_game +using A=Attribute; + +void Monster::STRATEGY::BOAR(Monster&m,float fElapsedTime,std::string strategy){ + enum PhaseName{ + MOVE, + SCRATCH, + CHARGE, + }; + + switch(m.phase){ + case PhaseName::MOVE:{ + float distToPlayer=geom2d::line(m.GetPos(),game->GetPlayer()->GetPos()).length(); + if(distToPlayer>=ConfigInt("Closein Range")/100.f*24){ + m.RemoveBuff(BuffType::SLOWDOWN); + RUN_TOWARDS(m,fElapsedTime,"Run Towards"); + }else + if(distToPlayer<=ConfigInt("Backpedal Range")/100.f*24){ + Key prevFacingDirection=m.GetFacingDirection(); + m.AddBuff(BuffType::SLOWDOWN,INFINITE,(100-ConfigInt("Backpedal Movespeed"))/100.f); + RUN_AWAY(m,fElapsedTime,"Run Away"); + m.UpdateFacingDirection(game->GetPlayer()->GetPos()); + }else m.phase=PhaseName::SCRATCH; + }break; + case PhaseName::SCRATCH:{ + m.RemoveBuff(BuffType::SLOWDOWN); + + }break; + case PhaseName::CHARGE:{ + + }break; + } +} \ No newline at end of file diff --git a/Adventures in Lestoria/Monster.h b/Adventures in Lestoria/Monster.h index 15f907e3..95d3dd6d 100644 --- a/Adventures in Lestoria/Monster.h +++ b/Adventures in Lestoria/Monster.h @@ -227,6 +227,7 @@ private: static void BEAR(Monster&m,float fElapsedTime,std::string strategy); static void URSULE(Monster&m,float fElapsedTime,std::string strategy); static void NPC(Monster&m,float fElapsedTime,std::string strategy); + static void BOAR(Monster&m,float fElapsedTime,std::string strategy); }; }; diff --git a/Adventures in Lestoria/MonsterAttribute.h b/Adventures in Lestoria/MonsterAttribute.h index dd91afc2..2e4db660 100644 --- a/Adventures in Lestoria/MonsterAttribute.h +++ b/Adventures in Lestoria/MonsterAttribute.h @@ -107,4 +107,5 @@ enum class Attribute{ LAST_JUMP_TIMER, INITIALIZED, JUMP_MOVE_TO_TARGET_TIMER, + }; \ No newline at end of file diff --git a/Adventures in Lestoria/RUN_STRATEGY.cpp b/Adventures in Lestoria/RUN_STRATEGY.cpp index 61242a4d..6eb23c36 100644 --- a/Adventures in Lestoria/RUN_STRATEGY.cpp +++ b/Adventures in Lestoria/RUN_STRATEGY.cpp @@ -53,6 +53,7 @@ void Monster::InitializeStrategies(){ STRATEGY_DATA.insert("Bear",Monster::STRATEGY::BEAR); STRATEGY_DATA.insert("Ursule",Monster::STRATEGY::URSULE); STRATEGY_DATA.insert("NPC",Monster::STRATEGY::NPC); + STRATEGY_DATA.insert("Boar",Monster::STRATEGY::BOAR); STRATEGY_DATA.SetInitialized(); } diff --git a/Adventures in Lestoria/assets/Campaigns/World_Map.png b/Adventures in Lestoria/assets/Campaigns/World_Map.png index 5283138f..88c4e1a4 100644 Binary files a/Adventures in Lestoria/assets/Campaigns/World_Map.png and b/Adventures in Lestoria/assets/Campaigns/World_Map.png differ diff --git a/Adventures in Lestoria/assets/config/MonsterStrategies.txt b/Adventures in Lestoria/assets/config/MonsterStrategies.txt index 2e5f53b4..c3b63e8a 100644 --- a/Adventures in Lestoria/assets/config/MonsterStrategies.txt +++ b/Adventures in Lestoria/assets/config/MonsterStrategies.txt @@ -531,4 +531,18 @@ MonsterStrategy # The maximum distance from the player that the NPC can be to interact with them. Interaction Distance = 200 } + Boar + { + Closein Range = 700 + + Backpedal Range = 400 + + Ground Scratch Count = 2 + + Charge Movespeed = 130% + + Charge Distance = 900 + + Backpedal Movespeed = 50% + } } \ No newline at end of file