diff --git a/Makefile b/Makefile
index 7401ae4..60f7708 100644
--- a/Makefile
+++ b/Makefile
@@ -41,7 +41,7 @@ clean:
 	meson compile --clean -C builddir
 
 debug_test: build
-	gdb --nx -x .gdbinit --ex run --args builddir/runtests.exe -e
+	gdb --nx -x .gdbinit --ex run --args builddir/runtests.exe -e "[rituals-belt]"
 
 win_installer:
 	powershell 'start "C:\Program Files (x86)\solicus\InstallForge\bin\ifbuilderenvx86.exe" win_installer.ifp'
diff --git a/gui_fsm.cpp b/gui_fsm.cpp
index 71e8134..01e26e9 100644
--- a/gui_fsm.cpp
+++ b/gui_fsm.cpp
@@ -24,6 +24,7 @@ namespace gui {
     $mini_map($level),
     $font{FONT_FILE_NAME}
     {
+      $levels.temp_create_player_rituals();
     }
 
   void FSM::event(Event ev) {
@@ -41,6 +42,7 @@ namespace gui {
   }
 
   void FSM::START(Event ) {
+
     $main_ui.update_level($level);
     $level.world->set_the<Debug>({});
     $main_ui.init();
diff --git a/levelmanager.cpp b/levelmanager.cpp
index 92f57cc..d4e1a9d 100644
--- a/levelmanager.cpp
+++ b/levelmanager.cpp
@@ -4,6 +4,7 @@
 #include "save.hpp"
 #include "systems.hpp"
 #include "components.hpp"
+#include "rituals.hpp"
 
 using lighting::LightRender;
 using std::shared_ptr, std::make_shared;
@@ -21,6 +22,24 @@ LevelScaling LevelManager::scale_level() {
   };
 }
 
+void LevelManager::temp_create_player_rituals() {
+  auto& level = current();
+  auto player = level.player;
+  auto& the_belt = level.world->get<combat::RitualBelt>(player);
+
+  combat::RitualEngine re("assets/rituals.json");
+  auto blanket = re.start();
+  re.set_state(blanket, "has_magick", true);
+  re.plan(blanket);
+  auto ritual = re.finalize(blanket);
+  the_belt.equip(0, ritual);
+
+  blanket = re.start();
+  re.set_state(blanket, "has_spikes", true);
+  re.plan(blanket);
+  ritual = re.finalize(blanket);
+  the_belt.equip(1, ritual);
+}
 
 inline shared_ptr<DinkyECS::World> clone_load_world(shared_ptr<DinkyECS::World> prev_world)
 {
diff --git a/levelmanager.hpp b/levelmanager.hpp
index a51faff..12f2084 100644
--- a/levelmanager.hpp
+++ b/levelmanager.hpp
@@ -42,5 +42,7 @@ class LevelManager {
   GameLevel &get(size_t index);
   LevelScaling scale_level();
 
+  void temp_create_player_rituals();
+
   DinkyECS::Entity spawn_enemy(std::string named);
 };
diff --git a/rituals.cpp b/rituals.cpp
index 0676e7b..9caec8f 100644
--- a/rituals.cpp
+++ b/rituals.cpp
@@ -46,6 +46,10 @@ namespace combat {
   }
 
   void RitualEngine::set_state(RitualAI& ritual, std::string name, bool setting) {
+    dbc::check($profile.contains(name),
+        fmt::format("ritual action named {} is not in profile, look in {} config",
+          name, $config.$src_path));
+
     ritual.start.set($profile.at(name), setting);
   }
 
@@ -69,10 +73,17 @@ namespace combat {
     return result;
   }
 
+  // BUG: maybe this should be called RitualBlanket instead?
   void RitualAI::dump() {
     ai::dump_script(script, start, plan.script);
   }
 
+  bool RitualAI::is_combined() {
+    dbc::check(!plan.script.empty(), "you are attempting to check an empty plan");
+    auto& last = plan.script.back();
+    return plan.script.size() > 1 && last.name == "combined";
+  }
+
   RitualAction RitualEngine::finalize(RitualAI& ritual) {
     (void)ritual;
 
diff --git a/rituals.hpp b/rituals.hpp
index 220e0e5..1a9710e 100644
--- a/rituals.hpp
+++ b/rituals.hpp
@@ -23,6 +23,7 @@ namespace combat {
     bool will_do(std::string name);
     void dump();
     ai::Action pop();
+    bool is_combined();
   };
 
   enum class RitualElement {
diff --git a/tests/rituals.cpp b/tests/rituals.cpp
index 0a4dd0a..a1f2bdd 100644
--- a/tests/rituals.cpp
+++ b/tests/rituals.cpp
@@ -3,86 +3,92 @@
 #include "rituals.hpp"
 #include "fsm.hpp"
 #include "dinkyecs.hpp"
+#include "levelmanager.hpp"
 
 using namespace combat;
 
 TEST_CASE("RitualEngine basic tests", "[rituals]") {
   RitualEngine re("assets/rituals.json");
-  auto ritual = re.start();
+  auto blanket = re.start();
 
-  re.set_state(ritual, "has_spikes", true);
-  re.plan(ritual);
+  re.set_state(blanket, "has_spikes", true);
+  re.plan(blanket);
 
   fmt::println("\n\n------------ TEST WILL DO PIERCE");
-  ritual.dump();
-  REQUIRE(ritual.will_do("pierce_type"));
+  blanket.dump();
+  REQUIRE(blanket.will_do("pierce_type"));
 
-  REQUIRE(ritual.start != ritual.original);
-  re.reset(ritual);
-  REQUIRE(ritual.start == ritual.original);
+  REQUIRE(blanket.start != blanket.original);
+  re.reset(blanket);
+  REQUIRE(blanket.start == blanket.original);
 
-  re.set_state(ritual, "has_magick", true);
-  re.set_state(ritual, "has_spikes", true);
-  re.plan(ritual);
+  re.set_state(blanket, "has_magick", true);
+  re.set_state(blanket, "has_spikes", true);
+  re.plan(blanket);
 
   fmt::println("\n\n------------ TEST WILL DO MAGICK TOO");
-  ritual.dump();
-  REQUIRE(ritual.will_do("pierce_type"));
-
-  ritual.pop();
-  REQUIRE(ritual.will_do("magick_type"));
-
-  re.reset(ritual);
-  re.set_state(ritual, "has_magick", true);
-  re.set_state(ritual, "has_spikes", true);
-  re.set_state(ritual, "shiny_bauble", true);
-  re.plan(ritual);
+  blanket.dump();
+  REQUIRE(blanket.will_do("pierce_type"));
+
+  blanket.pop();
+  REQUIRE(blanket.will_do("magick_type"));
+
+  re.reset(blanket);
+  re.set_state(blanket, "has_magick", true);
+  re.set_state(blanket, "has_spikes", true);
+  re.set_state(blanket, "shiny_bauble", true);
+  REQUIRE(blanket.is_combined());
+  re.plan(blanket);
   fmt::println("\n\n------------ TEST WILL DO DAMAGE BOOST");
-  ritual.dump();
-
-  re.reset(ritual);
-  re.set_state(ritual, "has_magick", true);
-  re.set_state(ritual, "cursed_item", true);
-  re.set_state(ritual, "shiny_bauble", true);
-  re.plan(ritual);
+  blanket.dump();
+
+  re.reset(blanket);
+  re.set_state(blanket, "has_magick", true);
+  re.set_state(blanket, "cursed_item", true);
+  re.set_state(blanket, "shiny_bauble", true);
+  REQUIRE(blanket.is_combined());
+  re.plan(blanket);
   fmt::println("\n\n------------ TEST WILL DO LARGE DAMAGE BOOST");
-  ritual.dump();
+  blanket.dump();
 }
 
-TEST_CASE("rituals can be finalized for the end result", "[rituals]") {
+TEST_CASE("blanket can be finalized for the end result", "[rituals]") {
   RitualEngine re("assets/rituals.json");
-  auto plan = re.start();
+  auto blanket = re.start();
 
-  re.set_state(plan, "has_magick", true);
-  re.set_state(plan, "cursed_item", true);
-  re.set_state(plan, "shiny_bauble", true);
-  re.plan(plan);
+  re.set_state(blanket, "has_magick", true);
+  re.set_state(blanket, "cursed_item", true);
+  re.set_state(blanket, "shiny_bauble", true);
+  re.plan(blanket);
+  REQUIRE(blanket.is_combined());
 
   fmt::println("\n\n------------ CYCLES AVOIDED");
-  plan.dump();
+  blanket.dump();
 
-  auto action = re.finalize(plan);
-  action.dump();
+  auto ritual = re.finalize(blanket);
+  ritual.dump();
 }
 
 
 TEST_CASE("the ritual belt works", "[rituals-belt]") {
   RitualBelt the_belt;
   RitualEngine re("assets/rituals.json");
-  auto plan = re.start();
+  auto blanket = re.start();
 
-  re.set_state(plan, "has_magick", true);
-  re.plan(plan);
+  re.set_state(blanket, "has_magick", true);
+  re.plan(blanket);
+  REQUIRE(blanket.is_combined());
+  blanket.dump();
 
   {
-    auto action = re.finalize(plan);
-    the_belt.equip(0, action);
+    auto ritual = re.finalize(blanket);
+    the_belt.equip(0, ritual);
     REQUIRE(the_belt.has(0));
   }
 
   {
-    auto action = the_belt.get(0);
-    action.dump();
+    auto ritual = the_belt.get(0);
+    ritual.dump();
   }
 
   {
@@ -90,3 +96,19 @@ TEST_CASE("the ritual belt works", "[rituals-belt]") {
     REQUIRE(!the_belt.has(0));
   }
 }
+
+
+TEST_CASE("LevelManager makes a temp belt", "[rituals-belt]") {
+  LevelManager lm;
+  lm.temp_create_player_rituals();
+  auto& level = lm.current();
+  auto& the_belt = level.world->get<RitualBelt>(level.player);
+
+  REQUIRE(the_belt.has(0));
+  auto& ritual = the_belt.get(0);
+  REQUIRE(ritual.damage > 0);
+
+  REQUIRE(the_belt.has(1));
+  ritual = the_belt.get(1);
+  REQUIRE(ritual.damage > 1);
+}
diff --git a/worldbuilder.cpp b/worldbuilder.cpp
index b461d5f..1a8a6da 100644
--- a/worldbuilder.cpp
+++ b/worldbuilder.cpp
@@ -4,6 +4,7 @@
 #include <iostream>
 #include "components.hpp"
 #include "inventory.hpp"
+#include "rituals.hpp"
 
 using namespace fmt;
 using namespace components;
@@ -257,6 +258,7 @@ void WorldBuilder::place_entities(DinkyECS::World &world) {
     // configure player in the world
     Player player{player_ent};
     world.set_the<Player>(player);
+    world.set<combat::RitualBelt>(player.entity, {});
     world.set<Inventory>(player.entity, {5});
     world.make_constant(player.entity);
   }