diff --git a/assets/enemies.json b/assets/enemies.json index 87f8cc2..c524359 100644 --- a/assets/enemies.json +++ b/assets/enemies.json @@ -7,7 +7,7 @@ "background": "color:transparent" }, {"_type": "Combat", "max_hp": 200, "max_ap": 12, - "ap_delta": 6, "damage": 20, "attack_rating": 0.5, "toughness_rating": 0.1, + "ap_delta": 6, "damage": 40, "attack_rating": 0.5, "toughness_rating": 0.1, "body_parts": { "head": 200, "chest": 200, @@ -33,7 +33,7 @@ "background": "color:transparent" }, {"_type": "Combat", "max_hp": 50, "max_ap": 12, - "ap_delta": 6,"damage": 20, "attack_rating": 0.6, "toughness_rating": 0.2, + "ap_delta": 6,"damage": 30, "attack_rating": 0.6, "toughness_rating": 0.2, "body_parts": { "head": 50, "chest": 50, diff --git a/src/combat/combat.cpp b/src/combat/combat.cpp index 31be018..13484c9 100644 --- a/src/combat/combat.cpp +++ b/src/combat/combat.cpp @@ -32,7 +32,7 @@ namespace components { // don't go below 0 body_parts[name] = std::max(0, hp - my_dmg); - fmt::println("BODY PART {} was {} now {}", name, hp, body_parts[name]); + fmt::println("BODY PART {} was {} now {} damage is {}", name, hp, body_parts[name], my_dmg); } bool Combat::less_than(int level) { diff --git a/src/game/systems.cpp b/src/game/systems.cpp index 95942cb..2f92ace 100644 --- a/src/game/systems.cpp +++ b/src/game/systems.cpp @@ -264,7 +264,9 @@ void System::combat(int attack_id) { // battle.dump(); + bool battle_ran = false; while(auto act = battle.next()) { + battle_ran = true; auto [enemy, enemy_action, cost, host_state] = *act; // player shouldn't hit theirself diff --git a/src/gui/fsm.cpp b/src/gui/fsm.cpp index 9d67031..7eead39 100644 --- a/src/gui/fsm.cpp +++ b/src/gui/fsm.cpp @@ -181,22 +181,10 @@ namespace gui { } void FSM::ATTACKING(Event ev, std::any data) { - using enum Event; - switch(ev) { - case TICK: { - dbc::log("!!!!!! FIX System::combat(0) doesn't use any weapons, only first"); - $systems.runCombat(0); - run_systems(); - state(State::IDLE); - } break; - case ATTACK: { - int attack_id = std::any_cast(data); - $systems.runCombat(attack_id); - run_systems(); - } break; - default: - dbc::log($F("In ATTACKING state, unhandled event {}", (int)ev)); - state(State::IDLE); + if(!$main_ui.hands_playing()) { + // run combat one more time + $systems.runCombat(0); + state(State::IDLE); } } @@ -254,13 +242,15 @@ namespace gui { $main_ui.plan_rotate(1, DEFAULT_ROTATE); state(State::ROTATING); break; - case ATTACK: + case ATTACK: { $main_ui.play_hands(); $main_ui.dirty(); sound::play("Sword_Hit_1"); + $systems.runCombat(0); + run_systems(); $status_ui.update(); state(State::ATTACKING); - break; + } break; case CLOSE: dbc::log("Nothing to close."); break; diff --git a/src/gui/main_ui.cpp b/src/gui/main_ui.cpp index 559df5e..3f8c546 100644 --- a/src/gui/main_ui.cpp +++ b/src/gui/main_ui.cpp @@ -146,6 +146,10 @@ namespace gui { if(!$hand_anim.playing) $hand_anim.play(); } + bool MainUI::hands_playing() { + return $hand_anim.playing; + } + void MainUI::render_hands() { if($hand_anim.playing) { $hand_anim.update(); diff --git a/src/gui/main_ui.hpp b/src/gui/main_ui.hpp index 7d1589b..6fb5e1a 100644 --- a/src/gui/main_ui.hpp +++ b/src/gui/main_ui.hpp @@ -49,6 +49,7 @@ namespace gui { void toggle_mind_reading(); void render_mind_reading(); void play_hands(); + bool hands_playing(); void render_hands(); }; }