RitualEngine now uses the crafting results to create a description of the ritual's combat in a RitualAction struct.

master
Zed A. Shaw 3 days ago
parent 43435509f6
commit a342c53b02
  1. 2
      Makefile
  2. 30
      assets/rituals.json
  3. 20
      rituals.cpp
  4. 11
      rituals.hpp
  5. 17
      tests/rituals.cpp

@ -22,7 +22,7 @@ tracy_build:
meson compile -j 10 -C builddir
test: build
./builddir/runtests
./builddir/runtests "[rituals-finalize]"
run: build test
powershell "cp ./builddir/zedcaster.exe ."

@ -134,5 +134,35 @@
"boost_damage_large",
"combined"
]
},
"effects": {
"boost_magick": {
"damage": 10,
"probability": 1.0
},
"pierce_type": {
"damage": 11,
"probability": 1.1
},
"magick_type": {
"damage": 12,
"probability": 1.2
},
"heals_user": {
"damage": 13,
"probability": 1.3
},
"curses_user": {
"damage": 14,
"probability": 1.4
},
"boost_damage_large": {
"damage": 15,
"probability": 1.5
},
"combined": {
"damage": 16,
"probability": 1.6
}
}
}

@ -72,4 +72,24 @@ namespace combat {
void RitualAI::dump() {
ai::dump_script(script, start, plan.script);
}
RitualAction RitualEngine::finalize(RitualAI& ritual) {
(void)ritual;
RitualAction result;
auto effects = $config["effects"];
for(auto action : ritual.plan.script) {
if(effects.contains(action.name)) {
auto& effect = effects[action.name];
result.damage += int(effect["damage"]);
result.probability += float(effect["probability"]);
fmt::println("ritual has action {} with damage {}, prob: {}",
action.name, result.damage, result.probability);
}
}
return result;
}
}

@ -25,6 +25,16 @@ namespace combat {
ai::Action pop();
};
enum class RitualElement {
FIRE, LIGHTNING, PHYSICAL
};
struct RitualAction {
float probability = 1.0f;
int damage = 0;
RitualElement element{RitualElement::FIRE};
};
struct RitualEngine {
Config $config;
ai::AIProfile $profile;
@ -40,5 +50,6 @@ namespace combat {
void reset(RitualAI& ritual);
void set_state(RitualAI& ritual, std::string name, bool setting);
void plan(RitualAI& ritual);
RitualAction finalize(RitualAI& ritual);
};
}

@ -49,15 +49,18 @@ TEST_CASE("RitualEngine basic tests", "[rituals]") {
ritual.dump();
}
TEST_CASE("confirm that cycles are avoided/detected", "[rituals]") {
TEST_CASE("rituals can be finalized for the end result", "[rituals-finalize]") {
RitualEngine re("assets/rituals.json");
auto ritual = re.start();
auto plan = re.start();
re.set_state(ritual, "has_magick", true);
re.set_state(ritual, "cursed_item", true);
re.set_state(ritual, "shiny_bauble", true);
re.plan(ritual);
re.set_state(plan, "has_magick", true);
re.set_state(plan, "cursed_item", true);
re.set_state(plan, "shiny_bauble", true);
re.plan(plan);
fmt::println("\n\n------------ CYCLES AVOIDED");
ritual.dump();
plan.dump();
auto action = re.finalize(plan);
(void)action;
}

Loading…
Cancel
Save