This is a mod for game Anarch that adds simple movement inertia, made by
drummyfish, released under CC0 1.0, diff made against version 1.02d.

diff --git a/constants.h b/constants.h
index 956baa0..00737f1 100644
--- a/constants.h
+++ b/constants.h
@@ -141,6 +141,17 @@
 */
 #define SFG_DAMAGE_RANDOMNESS 64 
 
+/**
+  Specifies the amount of movement inertia, every frame 1 / 
+  SFG_MOVEMENT_INERTIA_AMOUNT th of the desired move direction will contribute
+  to the current movement state.
+*/
+#if SFG_FPS >= 45
+  #define SFG_MOVEMENT_INERTIA_AMOUNT 16
+#else
+  #define SFG_MOVEMENT_INERTIA_AMOUNT 8
+#endif
+
 /**
   Height of monster collision BBox in RCL_Units.
 */
diff --git a/game.h b/game.h
index 24285cb..65c9ebf 100755
--- a/game.h
+++ b/game.h
@@ -421,6 +421,7 @@ struct
   int8_t squarePosition[2];
   RCL_Vector2D direction;
   RCL_Unit verticalSpeed;
+  RCL_Vector2D movementForce;      ///< for movement inertia
   RCL_Unit previousVerticalSpeed;  /**< Vertical speed in previous frame, needed
                                    for determining whether player is in the
                                    air. */
@@ -1391,6 +1392,9 @@ void SFG_initPlayer(void)
   SFG_player.camera.direction = SFG_currentLevel.levelPointer->playerStart[2] *
     (RCL_UNITS_PER_SQUARE / 256);
 
+  SFG_player.movementForce.x = 0;
+  SFG_player.movementForce.y = 0;
+
   SFG_recomputePLayerDirection(); 
 
   SFG_player.previousVerticalSpeed = 0;
@@ -3549,7 +3553,16 @@ void SFG_gameStepPlaying(void)
   SFG_player.camera.height += 
     SFG_PREVIEW_MODE_SPEED_MULTIPLIER * SFG_player.verticalSpeed;
 #else
-  RCL_moveCameraWithCollision(&(SFG_player.camera),moveOffset,
+
+  SFG_player.movementForce.x =
+    (SFG_player.movementForce.x * (SFG_MOVEMENT_INERTIA_AMOUNT - 1) + 
+      moveOffset.x) / SFG_MOVEMENT_INERTIA_AMOUNT;
+
+  SFG_player.movementForce.y =
+    (SFG_player.movementForce.y * (SFG_MOVEMENT_INERTIA_AMOUNT - 1) + 
+      moveOffset.y) / SFG_MOVEMENT_INERTIA_AMOUNT;
+
+  RCL_moveCameraWithCollision(&(SFG_player.camera),SFG_player.movementForce,
     verticalOffset,SFG_floorCollisionHeightAt,SFG_ceilingHeightAt,1,1);
 
   SFG_player.previousVerticalSpeed = SFG_player.verticalSpeed;
