diff --git a/.gitignore b/.gitignore index b0678d5c..9cee0b3d 100644 --- a/.gitignore +++ b/.gitignore @@ -424,3 +424,4 @@ desktop.ini /x64/Unit Testing/assets /Adventures in Lestoria Tests/x64/Unit Testing /x64/Unit Testing +/Adventures in Lestoria/assets/2.10 diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj b/Adventures in Lestoria/Adventures in Lestoria.vcxproj index 0b369131..50f22e80 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj @@ -1126,6 +1126,7 @@ + diff --git a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters index 41dddc8f..45eeb963 100644 --- a/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters +++ b/Adventures in Lestoria/Adventures in Lestoria.vcxproj.filters @@ -1298,6 +1298,9 @@ Documentation + + Documentation\Mechanics + diff --git a/Adventures in Lestoria/Chapter_3_Monsters.txt b/Adventures in Lestoria/Chapter_3_Monsters.txt new file mode 100644 index 00000000..d74bb6b6 --- /dev/null +++ b/Adventures in Lestoria/Chapter_3_Monsters.txt @@ -0,0 +1,190 @@ +Pirate +-Wields a Saber and wears an eye patch, pirate hat, the typical Pirate stereotype. + +Animations (5): +Idle +Walk +Slash +Stab +Dead + +Pirate Marauder +-Equipped with 2 Swords. + +Animations (5): +Idle +Walk +Jump Attack (Plunge) +Whirlwind Attack (Spinning around frantically) +Dead + +Pirate Buccaneer +-Equipped with a musket. + +Animations (5): +Idle +Walk +Aim +Firing +Dead + +Pirate Captain +-Holds a Saber in one hand and a Hand Gun in the other. + +Animations (7): +Idle +Walk +Slash using Saber +Stab using Saber +Raise + Shoot Handgun +Drink a bottle of Rum. +Dead + +Parrot +====== +(Does not require a death animation) + +Animations (3): +Idle +Fly +Charge + +Crab +==== +Animations (4): +Idle +Sidestep / Crab Walk +Lifts up pincers and charges +Dead + +Sandworm +======== +Starts underground (can see silhouette) + +Animations (6): +Idle (Head above ground) +Dive underground +Swim in sand +Rise up from ground +Shoot/Spit Sand +Dead + + +Seagull +======= +Animations (3): +Idle +Flying +Dead + +================= + +Pirate + Size: 100% + Hp: 350 + Exp: 33 + Attack: 31 + Move-Spd: 110% + +Equipped with a Saber. +Same behaviour like Chapter 2 Dagger Goblins. + +Pirate Marauder + Size: 100% + Hp: 500 + Exp: 39 + Attack: 43 + Move-Spd: 125% + + Equipped with 2 Swords. +Base behaviour like Pirate. +every 8 seconds chance to do an ability: +25% & insight of players vision & further then 400 range away: Jump attack on the player 150 radius impact area +25% & within 700 range of player & further then 400 range away: whirlwind attack, spinning to the players position +60% Move-spd during this attack +50% continue base behaviour. + +Pirate Buccaneer + Size: 100% + Hp: 430 + Exp: 37 + Attack: 45 + Move-Spd: 100% + + Equipped with a Muskeet. + Aim (1.0 Sec) - Lock position (0.3 sec) - Shoot - reload (2 sec) - move if to far away. (trying to stay in 1000 Range) + + +Pirate Captain (+Parrot) + Size: 120% + Hp: 1050 + Exp: 59 + Attack: 55 + Move-Spd: 95% + +1 hand Saber. 1 Hand Gun +Also Base Pirate behaviour. +every 6 seconds if range <400 60% chance to stand still for 0.5 seconds - shoot his gun and continue base movement. + +Once the Captain dropps below 300 health he pulls out a bottle of Rum and starts drinking. takes 2 seconds and recovers 150 Health. Only triggers once. + +When the Pirate Enters the Screen the Parrot is still sitting on its shoulder and starts flying 2 seconds after the enemy is visible. +The parrot has the same stats and behaviour like chapter 2 Hawks. +The Parrot doesnt die, instead it gets stunned for 5 seconds on death and then recovers. +When the Captain dies the Parrot flies away and despawns out of screen. + +Crap + Size: 60% + Hp: 600 + Exp: 34 + Attack: 23 + Move-Spd: 120% + + Side step circles around the player in a 400 range radius. + every second running in a circle 20% chance to stop for 0.5 seconds, turn his side towards the player and charges with a pincer attack and runs a bit further to get to 400 range on the other side of the player. +starts circling the player again. + +Giant Crap + Size: 180% + Hp: 1800 + Exp: 61 + Attack: 49 + Move-Spd: 90% + + Charges player sideways. charges 600 range further then players position. + After charge 1 second no moving. then starts next charge building up movespeed over first 2 seconds. + +Sandworm + Size: 90% + Hp: 400 + Exp: 24 + Attack: 33 + Move-Spd: 200% // 0% (stationary on air) + + The sandworm spawns underground. + The sandworm ist completly invisible when its underground. + + It moves to a random point within a 400 range around the player. (can be exactly under the player aswell) + + once it reaches it position there is an 300 radisu animation and the player gets sucked in with a 30% movespd effect ( + Examples: + if playing doesnt move it moves with 30% speed into the middle, + if moving to the center normal speed +30% + if moving out normal speed -30% + + Effect lasts for 3 seconds. If player is in the middle player receives collision damage. + + Worm behaves like Chapter 1 Flower for up to 6 Attacks or if range to player is higher then 1500. + Then it burrows down again and repeats. + +Seagul + Size: 80% + Hp: 40 + Exp: 6 + Attack: 0 + Move-Spd: 120% +When Player gets within 1000 Range Seagul starts flying away. takes 2 seconds to leave the ground. (time needs to be extended if 2 seconds arent enough for a warrior to get in warcry range) +Despawns once it reaches 4000 Range. + +Bosses +Giant Octopus +Pirate Captain Ghost \ No newline at end of file diff --git a/Adventures in Lestoria/MonsterAttribute.h b/Adventures in Lestoria/MonsterAttribute.h index 830353db..736fdfa2 100644 --- a/Adventures in Lestoria/MonsterAttribute.h +++ b/Adventures in Lestoria/MonsterAttribute.h @@ -142,4 +142,5 @@ enum class Attribute{ CHASE_TIMER, STONE_TOSS_COUNT, STONE_TOSS_TIMER, + SHOCKWAVE_COLOR, }; \ No newline at end of file diff --git a/Adventures in Lestoria/StoneGolem.cpp b/Adventures in Lestoria/StoneGolem.cpp index 06d7a9bd..9a898e59 100644 --- a/Adventures in Lestoria/StoneGolem.cpp +++ b/Adventures in Lestoria/StoneGolem.cpp @@ -105,13 +105,13 @@ void Monster::STRATEGY::STONE_GOLEM(Monster&m,float fElapsedTime,std::string str const vf2d extendedSmallestCornerPoint{geom2d::line{m.GetPos(),smallestCorner.second}.rpoint((100000.f))}; #pragma endregion - m.VEC(A::STAGE_POLYGONS).emplace_back(StageMaskPolygon{{largestCorner.second,extendedLargestCornerPoint,extendedSmallestCornerPoint,smallestCorner.second},"safeIndicatorGradient.png",angleToMiddle,PixelLerp(VERY_DARK_BLUE,BLACK,sin(geom2d::pi*game->GetRunTime()*2))}); + m.VEC(A::STAGE_POLYGONS).emplace_back(StageMaskPolygon{{largestCorner.second,extendedLargestCornerPoint,extendedSmallestCornerPoint,smallestCorner.second},"safeIndicatorGradient.png",angleToMiddle,PixelLerp(Pixel{uint32_t(m.I(A::SHOCKWAVE_COLOR))},BLACK,sin(geom2d::pi*game->GetRunTime()*2))}); }); - m.SetStrategyDrawFunction([&](AiL*game,Monster&m,const std::string&strategyName){ + m.SetStrategyDrawFunction([](AiL*game,Monster&m,const std::string&strategyName){ std::for_each(m.VEC(A::STAGE_POLYGONS).begin(),m.VEC(A::STAGE_POLYGONS).end(),[&](std::any&data){ StageMaskPolygon&polygon{std::any_cast(data)}; - Pixel newCol{PixelLerp(VERY_DARK_BLUE,BLACK,sin(geom2d::pi*game->GetRunTime()*2)/2.f+0.5f)}; - newCol.a=util::lerp(255.f,0.f,sin(geom2d::pi*game->GetRunTime()*2)/2.f+0.5f); + Pixel newCol{PixelLerp(Pixel{uint32_t(m.I(A::SHOCKWAVE_COLOR))},BLACK,sin(geom2d::pi*game->GetRunTime()*2)/2.f+0.5f)}; + newCol.a=util::lerp(Pixel{uint32_t(m.I(A::SHOCKWAVE_COLOR))}.a,0.f,sin(geom2d::pi*game->GetRunTime()*2)/2.f+0.5f); polygon.SetBlendColor(newCol); polygon.Draw(); }); @@ -163,6 +163,7 @@ void Monster::STRATEGY::STONE_GOLEM(Monster&m,float fElapsedTime,std::string str m.I(A::PATTERN_REPEAT_COUNT)=ConfigInt("Beginning Phase.Repeat Count"); m.F(A::HEALTH_PCT_PHASE)=1.f; m.F(A::NEXT_HEALTH_PCT_PILLAR_PHASE)=ConfigFloat("Pillar Respawns.Start HP Threshold")/100.f; + m.I(A::SHOCKWAVE_COLOR)=ConfigPixel("Shockwave.Danger Area Color").n; m.phase=SPAWN_PILLAR_PREPARE; if(ConfigIntArr("Pillar Respawns.Respawn Count",0)