diff --git a/assets/config.json b/assets/config.json index d35f76a..7ca0378 100644 --- a/assets/config.json +++ b/assets/config.json @@ -320,5 +320,10 @@ "SW": 8665, "W": 8592, "NW": 8598 - } + }, + "test_rituals": [ + { "has_spikes": true, "active": true }, + { "has_magick": true, "active": true }, + { "has_magick": true, "shiny_bauble": true, "active": true } + ] } diff --git a/assets/rituals.json b/assets/rituals.json index 6b358de..e24c464 100644 --- a/assets/rituals.json +++ b/assets/rituals.json @@ -139,7 +139,7 @@ "boost_magick": { "damage": 10, "kind": 2, - "element": 1, + "element": 2, "probability": 1.0 }, "pierce_type": { diff --git a/levelmanager.cpp b/levelmanager.cpp index 4bc59f3..e77dd64 100644 --- a/levelmanager.cpp +++ b/levelmanager.cpp @@ -26,22 +26,27 @@ void LevelManager::temp_create_player_rituals() { auto& level = current(); auto player = level.player; auto& the_belt = level.world->get(player); - + Config config("assets/config.json"); 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); - dbc::check(ritual.kind == combat::RitualKind::PHYSICAL, - fmt::format("second attack is not physical but is {}", - int(ritual.kind))); - the_belt.equip(1, ritual); + + int slot = 0; + + for(auto& settings : config["test_rituals"]) { + if(settings["active"]) { + auto blanket = re.start(); + + settings.erase("active"); + + for(auto& el : settings.items()) { + re.set_state(blanket, el.key(), el.value()); + } + + re.plan(blanket); + auto ritual = re.finalize(blanket); + the_belt.equip(slot, ritual); + slot++; + } + } } inline shared_ptr clone_load_world(shared_ptr prev_world) diff --git a/systems.cpp b/systems.cpp index 82989c4..2ef406f 100644 --- a/systems.cpp +++ b/systems.cpp @@ -243,9 +243,13 @@ void System::combat(GameLevel &level, int attack_id) { }; if(result.player_did > 0) { - auto effect = shaders::get( - ritual.kind == combat::RitualKind::PHYSICAL ? "flame" : "lightning"); - world.set(enemy.entity, {100, effect}); + using enum combat::RitualElement; + + if(ritual.element == FIRE || ritual.element == LIGHTNING) { + auto effect = shaders::get( + ritual.element == FIRE ? "flame" : "lightning"); + world.set(enemy.entity, {100, effect}); + } } if(enemy_action == combat::BattleAction::ATTACK) {