diff --git a/Crawler/Crawler.vcxproj b/Crawler/Crawler.vcxproj
index 09191c04..64f55478 100644
--- a/Crawler/Crawler.vcxproj
+++ b/Crawler/Crawler.vcxproj
@@ -302,6 +302,7 @@
+
diff --git a/Crawler/Crawler.vcxproj.filters b/Crawler/Crawler.vcxproj.filters
index a5459957..38fdedbc 100644
--- a/Crawler/Crawler.vcxproj.filters
+++ b/Crawler/Crawler.vcxproj.filters
@@ -239,6 +239,9 @@
Source Files\Monster Strategies
+
+ Source Files\Effects
+
diff --git a/Crawler/FallingDebris.h b/Crawler/FallingDebris.h
new file mode 100644
index 00000000..35243122
--- /dev/null
+++ b/Crawler/FallingDebris.h
@@ -0,0 +1,19 @@
+#include "Effect.h"
+#include "DEFINES.h"
+#include "safemap.h"
+
+INCLUDE_GFX
+
+class FallingDebris:public Effect{
+ const float GRAVITY=20;
+public:
+ inline FallingDebris(vf2d pos, float lifetime, std::string imgFile, bool upperLevel,vf2d size={1,1},float fadeout=0.0f,vf2d spd={},Pixel col=WHITE,float rotation=0,float rotationSpd=0,bool additiveBlending=false)
+ :Effect(pos,lifetime,imgFile,upperLevel,size,fadeout,spd,col,rotation,rotationSpd,additiveBlending){
+
+ }
+
+ inline bool Update(float fElapsedTime)override{
+ spd.y+=GRAVITY*fElapsedTime;
+ return Effect::Update(fElapsedTime);
+ }
+};
\ No newline at end of file
diff --git a/Crawler/SlimeKing.cpp b/Crawler/SlimeKing.cpp
index fa007b90..e03e661a 100644
--- a/Crawler/SlimeKing.cpp
+++ b/Crawler/SlimeKing.cpp
@@ -5,6 +5,7 @@
#include "utils.h"
#include "safemap.h"
#include "Effect.h"
+#include "FallingDebris.h"
INCLUDE_game
INCLUDE_BULLET_LIST
@@ -69,7 +70,7 @@ void Monster::STRATEGY::SLIMEKING(Monster&m,float fElapsedTime,int strategyNumbe
float dist=lineToPlayer.length();
for(int i=0;i<200;i++){
float randomDir=util::random(2*PI);
- //game->AddEffect(Effect{vf2d{cos(randomDir),sin(randomDir)}*m.GetSizeMult()*8,util::random(1),})
+ game->AddEffect(std::make_unique(m.GetPos()+vf2d{cos(randomDir),sin(randomDir)}*m.GetSizeMult()*8,util::random(1),"circle.png",m.OnUpperLevel(),vf2d{1,1},0.5,vf2d{cos(randomDir)*util::random(5),sin(randomDir)*-util::random(15)-5}*30,BLACK),true);
}
if(dist<12*m.GetSizeMult()){
game->GetPlayer()->Hurt(ConfigInt("JumpAttackDamage"),m.OnUpperLevel(),m.GetZ());
diff --git a/Crawler/Version.h b/Crawler/Version.h
index 22a4c5ec..cdc781b5 100644
--- a/Crawler/Version.h
+++ b/Crawler/Version.h
@@ -2,7 +2,7 @@
#define VERSION_MAJOR 0
#define VERSION_MINOR 2
#define VERSION_PATCH 0
-#define VERSION_BUILD 1324
+#define VERSION_BUILD 1330
#define stringify(a) stringify_(a)
#define stringify_(a) #a
diff --git a/Crawler/assets/config/MonsterStrategies.txt b/Crawler/assets/config/MonsterStrategies.txt
index 1f3ebb8b..a4c826a6 100644
--- a/Crawler/assets/config/MonsterStrategies.txt
+++ b/Crawler/assets/config/MonsterStrategies.txt
@@ -79,6 +79,7 @@ MonsterStrategy
ProjectileDamage = 10
JumpAttackDamage = 20
JumpMoveSpd = 75
+ # How far the player gets knocked back if hit.
JumpKnockbackFactor = 250
BulletSpd = 250