Add Chapter 2 boss AI setup. Add Chapter 2 Boss Monster Entry. Add Boss Pillar Monster Entry. Setup Breaking Pillar Monster Strategy. Release Build 9554.

mac-build
sigonasr2 6 months ago
parent ba7ccf72b0
commit efcd3f0bf8
  1. 9
      Adventures in Lestoria/Adventures in Lestoria.vcxproj
  2. 9
      Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters
  3. 62
      Adventures in Lestoria/BreakingPillar.cpp
  4. 69
      Adventures in Lestoria/Chapter_2_Boss.txt
  5. 2
      Adventures in Lestoria/Monster.h
  6. 1
      Adventures in Lestoria/MonsterAttribute.h
  7. 2
      Adventures in Lestoria/RUN_STRATEGY.cpp
  8. 53
      Adventures in Lestoria/StoneGolem.cpp
  9. 2
      Adventures in Lestoria/Version.h
  10. 12
      Adventures in Lestoria/assets/config/MonsterStrategies.txt
  11. 90
      Adventures in Lestoria/assets/config/Monsters.txt
  12. BIN
      x64/Release/Adventures in Lestoria.exe

@ -639,6 +639,10 @@
<SubType>
</SubType>
</ClCompile>
<ClCompile Include="BreakingPillar.cpp">
<SubType>
</SubType>
</ClCompile>
<ClCompile Include="Bullet.cpp" />
<ClCompile Include="BuyItemWindow.cpp">
<SubType>
@ -910,6 +914,10 @@
<SubType>
</SubType>
</ClCompile>
<ClCompile Include="StoneGolem.cpp">
<SubType>
</SubType>
</ClCompile>
<ClCompile Include="Stone_Elemental.cpp">
<SubType>
</SubType>
@ -997,6 +1005,7 @@
<Text Include="assets\config\story\Chapter 1.txt" />
<Text Include="Chapter_1_2nd_Boss.txt" />
<Text Include="Chapter_1_Creatures_Part_2.txt" />
<Text Include="Chapter_2_Boss.txt" />
<Text Include="Chapter_2_Monsters.txt" />
<Text Include="characters.txt" />
<Text Include="Crawler_2_Bonus_Boss.txt" />

@ -1079,6 +1079,12 @@
<ClCompile Include="LargeTornado.cpp">
<Filter>Source Files\Bullet Types</Filter>
</ClCompile>
<ClCompile Include="StoneGolem.cpp">
<Filter>Source Files\Monster Strategies</Filter>
</ClCompile>
<ClCompile Include="BreakingPillar.cpp">
<Filter>Source Files\Monster Strategies</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<None Include="cpp.hint" />
@ -1247,6 +1253,9 @@
<Text Include="Crawler_2_Bonus_Boss.txt">
<Filter>Documentation\Mechanics</Filter>
</Text>
<Text Include="Chapter_2_Boss.txt">
<Filter>Documentation\Mechanics</Filter>
</Text>
</ItemGroup>
<ItemGroup>
<Image Include="assets\heart.ico">

@ -0,0 +1,62 @@
#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 "Monster.h"
#include "MonsterStrategyHelpers.h"
#include "config.h"
using A=Attribute;
void Monster::STRATEGY::BREAKING_PILLAR(Monster&m,float fElapsedTime,std::string strategy){
enum PhaseName{
INITIALIZE,
IDLE,
};
if(m.GetHealthRatio()>=ConfigFloat("Break Phase 1 HP % Threshold")/100.f){
m.animation.ModifyDisplaySprite(m.internal_animState,ConfigString("Unbroken Animation Name"));
}else
if(m.GetHealthRatio()>=ConfigFloat("Break Phase 2 HP % Threshold")/100.f){
m.animation.ModifyDisplaySprite(m.internal_animState,ConfigString("Break Phase 1 Animation Name"));
}else m.animation.ModifyDisplaySprite(m.internal_animState,ConfigString("Break Phase 2 Animation Name"));
if(m.IsDead()&&!m.B(A::MARKED_DEAD)){ //Kill and fade out the pillar.
m.lifetime=0.01f;
m.B(A::MARKED_DEAD)=true;
}
}

@ -0,0 +1,69 @@
Chapter 2 Boss
Stonegolem
HP: 30 000
Size: 800%
The boss casts 3 Pillars at the beginning of the fight, targeting the player.
1 at a time.
2 sec cast.
0.5 sec delay until next cast starts.
40 dmg
Pillar-radius: 350
every 10% (first time at 90%) use a shockwave where you need to hide behind one of the pillar to avoid the damage. (Shockwave has 3 seconds cast, 60 dmg)
The pillars get damaged with every shockwave. after the 3rd the pillar break.
starting 75% every 10% (75%, 65%, 55% ...) The Stone golem targetst the Player with 3 Pillar attacks like the one at the beginning of the fight.
2 of the 3 Pillars spawn damaged and will break 3 seconds later again. one is solid and can tank up to 3 shockwaves.
Like previously every pillar appears with 2,5 seconds delay from each other. (2 sec with an indicator, 0,5 seconds delay after a pillar got created)
The Boss continues with its normal behaviour while the pillars are getting casted.
every Pillar that breaks Casts a ring of projectiles on death (15 dmg)
The golem attacks similar like bear boss but with half the radius on the attack. (35 dmg)
after every attack there is a 25% chance The Stone golem targets the Player. the targeting gets Indicated around the player.
after 2.5 seconds the golems throws a giant rock with 250 radius on the players position. Damaging the player and destroying Pillars hit. (55 dmg)
Stone Throw cant overlap with shockwave. when a 10% mark is reached while a rock is targeting the player, Shockwave cast starts after the rock was thrown.
if the golem wasnt able to attack the player for 7 seconds it throws 2 stones in the air.
Afterwards Screenwide ~25 indicators appear where small rocks will rain down with a delay of 2,5 - 4 seonds (30 dmg each, 50 radius)
(The trigger condition for this ability may changes in the future, depending how it actually plays out.)

@ -288,6 +288,8 @@ private:
static void ZEPHY(Monster&m,float fElapsedTime,std::string strategy);
static void MAJOR_HAWK(Monster&m,float fElapsedTime,std::string strategy);
static void DONOTHING(Monster&m,float fElapsedTime,std::string strategy);
static void STONE_GOLEM(Monster&m,float fElapsedTime,std::string strategy);
static void BREAKING_PILLAR(Monster&m,float fElapsedTime,std::string strategy);
};
bool bumpedIntoTerrain=false; //Gets set to true before a strategy executes if the monster runs into some terrain on this frame.
bool attackedByPlayer=false; //Gets set to true before a strategy executes if the monster has been attacked by the player.

@ -120,4 +120,5 @@ enum class Attribute{
ATTACK_CHOICE,
WIND_STRENGTH,
WIND_PHASE_TIMER,
MARKED_DEAD,
};

@ -65,6 +65,8 @@ void Monster::InitializeStrategies(){
STRATEGY_DATA.insert("Zephy",Monster::STRATEGY::ZEPHY);
STRATEGY_DATA.insert("Major Hawk",Monster::STRATEGY::MAJOR_HAWK);
STRATEGY_DATA.insert("Do Nothing",Monster::STRATEGY::DONOTHING);
STRATEGY_DATA.insert("Stone Golem",Monster::STRATEGY::STONE_GOLEM);
STRATEGY_DATA.insert("Breaking Pillar",Monster::STRATEGY::BREAKING_PILLAR);
STRATEGY_DATA.SetInitialized();
}

@ -0,0 +1,53 @@
#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 "Monster.h"
#include "MonsterStrategyHelpers.h"
void Monster::STRATEGY::STONE_GOLEM(Monster&m,float fElapsedTime,std::string strategy){
enum PhaseName{
INITIALIZE,
};
switch(m.phase){
case INITIALIZE:{
}break;
}
}

@ -39,7 +39,7 @@ All rights reserved.
#define VERSION_MAJOR 1
#define VERSION_MINOR 2
#define VERSION_PATCH 3
#define VERSION_BUILD 9551
#define VERSION_BUILD 9554
#define stringify(a) stringify_(a)
#define stringify_(a) #a

@ -881,4 +881,16 @@ MonsterStrategy
Large Tornado Knockback Amount = 300
}
}
Stone Golem
{
}
Breaking Pillar
{
Unbroken Animation Name = NORMAL
Break Phase 1 HP % Threshold = below 68%
Break Phase 1 Animation Name = BREAK1
Break Phase 2 HP % Threshold = below 34%
Break Phase 2 Animation Name = BREAK2
}
}

@ -978,6 +978,96 @@ Monsters
Death Sound = Slime Dead
Walk Sound = Wing Flap
# Drop Item Name, Drop Percentage(0-100%), Drop Min Quantity, Drop Max Quantity
# DROP[0] = Ring of the Bear,100%,1,1
}
Stone Golem
{
Health = 30000
Attack = 40
CollisionDmg = 40
MoveSpd = 180%
Size = 400%
XP = 5
# A flag to show an arrow indicator when the boss is off-screen.
ShowBossIndicator = True
Strategy = Stone Golem
#Size of each animation frame
SheetFrameSize = 48,48
# Setting this to true means every four rows indicates one animation, the ordering of the directions is: NORTH, EAST, SOUTH, WEST
4-Way Spritesheet = True
Animations
{
# Frame Count, Frame Speed (s), Frame Cycling (Repeat,OneShot,PingPong,Reverse)
# Animations must be defined in the same order as they are in their sprite sheets
# The First Four animations must represent a standing, walking, attack, and death animation. Their names are up to the creator.
IDLE = 2, 0.6, Repeat
WALK = 4, 0.2, Repeat
TOSS ROCK = 4, 0.2, OneShot
DEATH = 4, 0.15, OneShot
BURROW UNDERGROUND = 5, 0.15, OneShot
RISE FROM UNDERGROUND = 5, 0.15, OneShot
ROCK TOSS CAST = 2, 0.3, Repeat
STONE PILLAR CAST = 2, 0.3, Repeat
}
Ignore Collisions = False
Hurt Sound = Monster Hurt
Death Sound = Slime Dead
Walk Sound = Slime Walk
# Drop Item Name, Drop Percentage(0-100%), Drop Min Quantity, Drop Max Quantity
# DROP[0] = Ring of the Bear,100%,1,1
}
Stone Golem Pillar
{ # Has three lives and breaks once all three health is lost. Changes sprite based on health.
Health = 3
Attack = 40
CollisionDmg = 0
Immovable = True
Invulnerable = True
MoveSpd = 0%
# The Pillar is supposed to be 350 radius.
Size = 300%
Collision Radius = 7
XP = 0
Strategy = Breaking Pillar
#Size of each animation frame
SheetFrameSize = 24,96
# Setting this to true means every four rows indicates one animation, the ordering of the directions is: NORTH, EAST, SOUTH, WEST
4-Way Spritesheet = False
Animations
{
# Frame Count, Frame Speed (s), Frame Cycling (Repeat,OneShot,PingPong,Reverse)
# Animations must be defined in the same order as they are in their sprite sheets
# The First Four animations must represent a standing, walking, attack, and death animation. Their names are up to the creator.
NORMAL = 4, 0.4, OneShot
BREAK1 = 4, 0.4, OneShot
BREAK2 = 4, 0.4, OneShot
DEATH = 1, 0.15, OneShot
}
Hurt Sound = Warrior Ground Slam
# Death Sound = Slime Dead
# Walk Sound = Slime Walk
# Drop Item Name, Drop Percentage(0-100%), Drop Min Quantity, Drop Max Quantity
# DROP[0] = Ring of the Bear,100%,1,1
}

Loading…
Cancel
Save