diff --git a/gui.cpp b/gui.cpp
index c578a45..28472d8 100644
--- a/gui.cpp
+++ b/gui.cpp
@@ -1,4 +1,3 @@
-#define FSM_DEBUG 1
 #include "gui.hpp"
 #include <iostream>
 #include <chrono>
@@ -41,8 +40,8 @@ namespace gui {
   }
 
   void FSM::START(Event ) {
-    // ZED: this must die
     generate_map();
+    $rayview.init_shaders();
     $rayview.set_position(RAY_VIEW_X, RAY_VIEW_Y);
     $rayview.position_camera($player.x + 0.5, $player.y + 0.5);
     state(State::IDLE);
@@ -199,7 +198,7 @@ namespace gui {
     $stats.sample(1/elapsed.count());
 
     draw_gui();
-    draw_weapon();
+    // draw_weapon();
     $window.display();
   }
 
diff --git a/raycaster.cpp b/raycaster.cpp
index a0eb5c7..346691f 100644
--- a/raycaster.cpp
+++ b/raycaster.cpp
@@ -136,7 +136,11 @@ void Raycaster::sprite_casting(sf::RenderTarget &target) {
       $anim.step(*sf_sprite, texX, texY, texX_end - texX, textureHeight);
       sf_sprite->setPosition({x, y});
 
-      target.draw(*sf_sprite);
+      $brightness.setUniform("offsetFactor", sf::Glsl::Vec2{0.0f, 0.0f});
+
+      float level = sqrt(rec.first);
+      $brightness.setUniform("darkness", level);
+      target.draw(*sf_sprite, &$brightness);
     }
   }
 }
@@ -351,3 +355,10 @@ void Raycaster::set_level(GameLevel level) {
       }
   });
 }
+
+void Raycaster::init_shaders() {
+  dbc::check(sf::Shader::isAvailable(), "no shaders?!");
+  bool good = $brightness.loadFromFile("shaders/modal.frag", sf::Shader::Type::Fragment);
+  dbc::check(good, "shader could not be loaded");
+  $brightness.setUniform("source", sf::Shader::CurrentTexture);
+}
diff --git a/raycaster.hpp b/raycaster.hpp
index 01dc31a..b676a2d 100644
--- a/raycaster.hpp
+++ b/raycaster.hpp
@@ -13,7 +13,7 @@ using RGBA = uint32_t;
 struct Raycaster {
   int $pitch=0;
   sf::Clock $clock;
-
+  sf::Shader $brightness;
   TexturePack &$textures;
   double $posX = 0;
   double $posY = 0;
@@ -56,4 +56,5 @@ struct Raycaster {
   }
 
   void set_level(GameLevel level);
+  void init_shaders();
 };
diff --git a/shaders/modal.frag b/shaders/modal.frag
index 9c1a9b2..5045658 100644
--- a/shaders/modal.frag
+++ b/shaders/modal.frag
@@ -1,6 +1,6 @@
-uniform sampler2D 	source;
+uniform sampler2D source;
 uniform sampler2D bloom;
-uniform vec2 		offsetFactor;
+uniform vec2 offsetFactor;
 uniform float darkness;
 
 void main()
@@ -19,5 +19,7 @@ void main()
 
     vec4 sourceFragment = texture2D(source, gl_TexCoord[0].xy);
     vec4 bloomFragment = texture2D(bloom, gl_TexCoord[0].xy);
-    gl_FragColor = color + sourceFragment - bloomFragment - darkness;
+    float alpha = color.a;
+    gl_FragColor = (color + sourceFragment - bloomFragment) / darkness;
+    gl_FragColor.a = alpha;
 }