From 69390b7743a3381a2579e191f5e7707e624e225e Mon Sep 17 00:00:00 2001 From: iisaev Date: Sat, 24 Oct 2026 10:01:12 +0200 Subject: [PATCH] Battle formulas: action values as stat formulas, costs from stat pools, MP gauge for party members, action schema Co-Authored-By: Claude Opus 5.5 --- .gitattributes | 30 +++++++ .gitignore | 37 +++++++++ locale/en.properties | 19 +++++ locale/es.properties | 19 +++++ locale/ja.properties | 19 +++++ locale/ko.properties | 19 +++++ locale/ru.properties | 19 +++++ locale/vi.properties | 19 +++++ locale/zh.properties | 19 +++++ manifest.json | 15 ++++ mod.jpg | Bin 0 -> 119773 bytes schemas/battle_formulas.json | 18 +++++ src/BattleFormulaScope.cs | 77 ++++++++++++++++++ src/BattleFormulasInitializer.cs | 28 +++++++ src/BattleStatsBridge.cs | 42 ++++++++++ src/FormulaActionExecutor.cs | 121 ++++++++++++++++++++++++++++ src/FormulaActions.cs | 47 +++++++++++ src/PoolGauge.cs | 42 ++++++++++ tests/BattleFormulaScopeTests.cs | 33 ++++++++ tests/FormulaActionExecutorTests.cs | 101 +++++++++++++++++++++++ 20 files changed, 724 insertions(+) create mode 100644 .gitattributes create mode 100644 .gitignore create mode 100644 locale/en.properties create mode 100644 locale/es.properties create mode 100644 locale/ja.properties create mode 100644 locale/ko.properties create mode 100644 locale/ru.properties create mode 100644 locale/vi.properties create mode 100644 locale/zh.properties create mode 100644 manifest.json create mode 100644 mod.jpg create mode 100644 schemas/battle_formulas.json create mode 100644 src/BattleFormulaScope.cs create mode 100644 src/BattleFormulasInitializer.cs create mode 100644 src/BattleStatsBridge.cs create mode 100644 src/FormulaActionExecutor.cs create mode 100644 src/FormulaActions.cs create mode 100644 src/PoolGauge.cs create mode 100644 tests/BattleFormulaScopeTests.cs create mode 100644 tests/FormulaActionExecutorTests.cs diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..3030c1a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,30 @@ +# Line endings: LF everywhere, on every OS, whatever core.autocrlf says. +* text=auto eol=lf + +# cmd.exe misreads labels and goto in LF batch files, so they stay CRLF. +*.bat text eol=crlf +*.cmd text eol=crlf + +# Binaries: never converted, never diffed as text. +*.png binary +*.jpg binary +*.jpeg binary +*.webp binary +*.svg text +*.ogg binary +*.wav binary +*.mp3 binary +*.ttf binary +*.otf binary +*.woff binary +*.woff2 binary +*.dll binary +*.so binary +*.dylib binary +*.pdb binary +*.exe binary +*.zip binary +*.pck binary +*.moc3 binary +*.res binary +*.scn binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..c301ca8 --- /dev/null +++ b/.gitignore @@ -0,0 +1,37 @@ +# Godot 4.x +.godot/ +.idea/ +sdk/ +bin/ +obj/ + +#ai +.omo/ +.opencode/ + +gen/ +obj/ +bin/ + +*.tres~ +*.tscn~ + +# GDScript LSP +.godot/ + +# Export +*.exe +*.dmg +*.apk +*.aab +*.pck +*.zip +*.log + +# OS +.DS_Store +Thumbs.db + +# Editor +*.import +*.godot.uid diff --git a/locale/en.properties b/locale/en.properties new file mode 100644 index 0000000..f2d1ff9 --- /dev/null +++ b/locale/en.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = Battle Formulas +mod_battle_formulas_desc = Battle actions as data for every battle core: an action with “Formula=a.mag * 3 - b.mdf + rand(0, 4)” needs no code — damage or healing, a mana price (Cost=mp:5), shield piercing, a status with a chance. a.* is the one acting, b.* the target: their stats and live health, attack, defence and points. The same skill works in the FF-style battle and in the card battle. Enemies with stats take their battle numbers from their sheets. +battle_formulas/schema/field/values = Values +battle_formulas/schema/field/values_desc = The action's parameters; keys the schema does not know are kept as they are +battle_formulas/schema/field/required_point = Action points +battle_formulas/schema/field/formula = Formula +battle_formulas/schema/battle/formula_desc = a.* is the one acting, b.* the target: a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = Effect +battle_formulas/schema/field/cost = Cost +battle_formulas/schema/battle/cost_desc = A pool cost, e.g. mp:4 +battle_formulas/schema/field/pierce = Pierce +battle_formulas/schema/battle/pierce_desc = Damage goes past the shield +battle_formulas/schema/field/state = Status +battle_formulas/schema/field/state_turns = Status turns +battle_formulas/schema/field/state_chance = Status chance, % +battle_formulas/schema/field/attack_factor = Attack factor +battle_formulas/schema/battle/attack_desc = For the cores' plain attacks: the attack factor +battle_formulas/schema/field/attack_type = Attack type +battle_formulas/schema/field/turn = Turns diff --git a/locale/es.properties b/locale/es.properties new file mode 100644 index 0000000..fce4673 --- /dev/null +++ b/locale/es.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = Fórmulas de combate +mod_battle_formulas_desc = Acciones de combate como datos para cualquier núcleo: una acción con «Formula=a.mag * 3 - b.mdf + rand(0, 4)» no necesita código — daño o curación, precio en maná (Cost=mp:5), perforar escudos, un estado con probabilidad. a.* es quien actúa, b.* el objetivo: sus estadísticas y su salud, ataque, defensa y puntos actuales. La misma habilidad funciona en el combate estilo FF y en el de cartas. Los enemigos con estadísticas toman sus números de combate de su hoja. +battle_formulas/schema/field/values = Valores +battle_formulas/schema/field/values_desc = Los parámetros de la acción; las claves que el esquema no conoce se conservan +battle_formulas/schema/field/required_point = Puntos de acción +battle_formulas/schema/field/formula = Fórmula +battle_formulas/schema/battle/formula_desc = a.* es quien actúa, b.* el objetivo: a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = Efecto +battle_formulas/schema/field/cost = Coste +battle_formulas/schema/battle/cost_desc = Un coste de reserva, p. ej. mp:4 +battle_formulas/schema/field/pierce = Perforar +battle_formulas/schema/battle/pierce_desc = El daño ignora el escudo +battle_formulas/schema/field/state = Estado +battle_formulas/schema/field/state_turns = Turnos del estado +battle_formulas/schema/field/state_chance = Probabilidad del estado, % +battle_formulas/schema/field/attack_factor = Factor de ataque +battle_formulas/schema/battle/attack_desc = Para los ataques normales de los núcleos: el factor de ataque +battle_formulas/schema/field/attack_type = Tipo de ataque +battle_formulas/schema/field/turn = Turnos diff --git a/locale/ja.properties b/locale/ja.properties new file mode 100644 index 0000000..f5e1a37 --- /dev/null +++ b/locale/ja.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = バトルの式 +mod_battle_formulas_desc = どのバトルコアにも使えるデータとしてのバトル行動:「Formula=a.mag * 3 - b.mdf + rand(0, 4)」を持つ行動はコード不要——ダメージか回復、MP 消費(Cost=mp:5)、シールド貫通、確率付きの状態付与。a.* は行動する者、b.* は対象:そのステータスと現在の HP、攻撃、防御、ポイント。同じスキルが FF 風バトルでもカードバトルでも動く。ステータスを持つ敵はシートから戦闘値を得る。 +battle_formulas/schema/field/values = 値 +battle_formulas/schema/field/values_desc = 行動のパラメーター。スキーマが知らないキーはそのまま残る +battle_formulas/schema/field/required_point = 行動ポイント +battle_formulas/schema/field/formula = 式 +battle_formulas/schema/battle/formula_desc = a.* は行動する者、b.* は対象:a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = 効果 +battle_formulas/schema/field/cost = コスト +battle_formulas/schema/battle/cost_desc = 蓄えのコスト。例:mp:4 +battle_formulas/schema/field/pierce = 貫通 +battle_formulas/schema/battle/pierce_desc = ダメージがシールドを抜ける +battle_formulas/schema/field/state = 状態 +battle_formulas/schema/field/state_turns = 状態ターン +battle_formulas/schema/field/state_chance = 状態の確率 % +battle_formulas/schema/field/attack_factor = 攻撃倍率 +battle_formulas/schema/battle/attack_desc = コアの通常攻撃用:攻撃倍率 +battle_formulas/schema/field/attack_type = 攻撃タイプ +battle_formulas/schema/field/turn = ターン diff --git a/locale/ko.properties b/locale/ko.properties new file mode 100644 index 0000000..cb01fb7 --- /dev/null +++ b/locale/ko.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = 전투 공식 +mod_battle_formulas_desc = 모든 전투 코어에 쓰는 데이터 전투 행동: “Formula=a.mag * 3 - b.mdf + rand(0, 4)”를 가진 행동은 코드가 필요 없습니다 — 피해나 회복, 마나 비용(Cost=mp:5), 보호막 관통, 확률로 거는 상태. a.*는 행동하는 쪽, b.*는 대상: 그들의 능력치와 현재 체력, 공격, 방어, 포인트. 같은 스킬이 FF 스타일 전투와 카드 전투 모두에서 작동합니다. 능력치가 있는 적은 시트에서 전투 수치를 받습니다. +battle_formulas/schema/field/values = 값 +battle_formulas/schema/field/values_desc = 행동의 매개변수. 스키마가 모르는 키는 그대로 유지 +battle_formulas/schema/field/required_point = 행동 포인트 +battle_formulas/schema/field/formula = 공식 +battle_formulas/schema/battle/formula_desc = a.*는 행동하는 쪽, b.*는 대상: a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = 효과 +battle_formulas/schema/field/cost = 비용 +battle_formulas/schema/battle/cost_desc = 비축 비용. 예: mp:4 +battle_formulas/schema/field/pierce = 관통 +battle_formulas/schema/battle/pierce_desc = 피해가 보호막을 무시 +battle_formulas/schema/field/state = 상태 +battle_formulas/schema/field/state_turns = 상태 턴 +battle_formulas/schema/field/state_chance = 상태 확률 % +battle_formulas/schema/field/attack_factor = 공격 배율 +battle_formulas/schema/battle/attack_desc = 코어의 일반 공격용: 공격 배율 +battle_formulas/schema/field/attack_type = 공격 유형 +battle_formulas/schema/field/turn = 턴 diff --git a/locale/ru.properties b/locale/ru.properties new file mode 100644 index 0000000..753ac79 --- /dev/null +++ b/locale/ru.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = Боевые формулы +mod_battle_formulas_desc = Боевые действия как данные для любого боевого ядра: действие с «Formula=a.mag * 3 - b.mdf + rand(0, 4)» не требует кода — урон или лечение, цена в мане (Cost=mp:5), пробивание щита, наложение состояния с шансом. a.* — кто действует, b.* — цель: их статы и живые здоровье, атака, защита, очки. Один и тот же навык работает и в бою в стиле FF, и в карточном. Враги со статами получают боевые числа из своего листа. +battle_formulas/schema/field/values = Значения +battle_formulas/schema/field/values_desc = Параметры действия; ключи, которых схема не знает, сохраняются как есть +battle_formulas/schema/field/required_point = Очки действия +battle_formulas/schema/field/formula = Формула +battle_formulas/schema/battle/formula_desc = a.* — кто действует, b.* — цель: a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = Эффект +battle_formulas/schema/field/cost = Цена +battle_formulas/schema/battle/cost_desc = Расход запаса, например mp:4 +battle_formulas/schema/field/pierce = Сквозь щит +battle_formulas/schema/battle/pierce_desc = Урон мимо щита (защиты) +battle_formulas/schema/field/state = Состояние +battle_formulas/schema/field/state_turns = Ходов состояния +battle_formulas/schema/field/state_chance = Шанс состояния, % +battle_formulas/schema/field/attack_factor = Множитель атаки +battle_formulas/schema/battle/attack_desc = Для обычных ударов ядер: множитель атаки +battle_formulas/schema/field/attack_type = Тип атаки +battle_formulas/schema/field/turn = Ходов diff --git a/locale/vi.properties b/locale/vi.properties new file mode 100644 index 0000000..ae50818 --- /dev/null +++ b/locale/vi.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = Công thức chiến đấu +mod_battle_formulas_desc = Hành động chiến đấu là dữ liệu cho mọi lõi chiến đấu: một hành động có «Formula=a.mag * 3 - b.mdf + rand(0, 4)» không cần mã — sát thương hoặc hồi máu, giá mana (Cost=mp:5), xuyên khiên, gây trạng thái theo xác suất. a.* là người hành động, b.* là mục tiêu: chỉ số của họ cùng máu, tấn công, phòng thủ và điểm hiện tại. Cùng một kỹ năng chạy được cả trong trận kiểu FF lẫn trận bài. Kẻ địch có chỉ số lấy con số chiến đấu từ bảng của mình. +battle_formulas/schema/field/values = Giá trị +battle_formulas/schema/field/values_desc = Tham số của hành động; khóa mà lược đồ không biết được giữ nguyên +battle_formulas/schema/field/required_point = Điểm hành động +battle_formulas/schema/field/formula = Công thức +battle_formulas/schema/battle/formula_desc = a.* là người hành động, b.* là mục tiêu: a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = Hiệu ứng +battle_formulas/schema/field/cost = Chi phí +battle_formulas/schema/battle/cost_desc = Chi phí nguồn, ví dụ mp:4 +battle_formulas/schema/field/pierce = Xuyên khiên +battle_formulas/schema/battle/pierce_desc = Sát thương bỏ qua khiên +battle_formulas/schema/field/state = Trạng thái +battle_formulas/schema/field/state_turns = Lượt trạng thái +battle_formulas/schema/field/state_chance = Tỉ lệ trạng thái, % +battle_formulas/schema/field/attack_factor = Hệ số tấn công +battle_formulas/schema/battle/attack_desc = Cho đòn thường của lõi: hệ số tấn công +battle_formulas/schema/field/attack_type = Loại tấn công +battle_formulas/schema/field/turn = Lượt diff --git a/locale/zh.properties b/locale/zh.properties new file mode 100644 index 0000000..2d3e3dc --- /dev/null +++ b/locale/zh.properties @@ -0,0 +1,19 @@ +mod_battle_formulas_name = 战斗公式 +mod_battle_formulas_desc = 适用于任何战斗核心的数据化战斗动作:带有“Formula=a.mag * 3 - b.mdf + rand(0, 4)”的动作无需代码——伤害或治疗、法力消耗(Cost=mp:5)、穿透护盾、按几率施加状态。a.* 是行动者,b.* 是目标:他们的属性以及实时的生命、攻击、防御和行动点。同一个技能在 FF 风格战斗和卡牌战斗中都能用。带属性的敌人从自己的面板获得战斗数值。 +battle_formulas/schema/field/values = 数值 +battle_formulas/schema/field/values_desc = 动作的参数;模式不认识的键原样保留 +battle_formulas/schema/field/required_point = 行动点 +battle_formulas/schema/field/formula = 公式 +battle_formulas/schema/battle/formula_desc = a.* 为行动者,b.* 为目标:a.atk * 2 - b.def + rand(0, 3) +battle_formulas/schema/field/effect = 效果 +battle_formulas/schema/field/cost = 消耗 +battle_formulas/schema/battle/cost_desc = 储备消耗,例如 mp:4 +battle_formulas/schema/field/pierce = 穿透 +battle_formulas/schema/battle/pierce_desc = 伤害无视护盾 +battle_formulas/schema/field/state = 状态 +battle_formulas/schema/field/state_turns = 状态回合 +battle_formulas/schema/field/state_chance = 状态几率 % +battle_formulas/schema/field/attack_factor = 攻击倍率 +battle_formulas/schema/battle/attack_desc = 用于核心的普通攻击:攻击倍率 +battle_formulas/schema/field/attack_type = 攻击类型 +battle_formulas/schema/field/turn = 回合 diff --git a/manifest.json b/manifest.json new file mode 100644 index 0000000..3e70ee7 --- /dev/null +++ b/manifest.json @@ -0,0 +1,15 @@ +{ + "id": "battle_formulas", + "name": "Battle Formulas", + "version": "1.0.0", + "author": "ct", + "description": "Battle actions as data for every battle core: an action entity with Formula= (a.mag * 3 - b.mdf + rand(0, 4)) needs no C# — Effect=damage|heal, Cost=mp:5 spends a stat pool, Pierce=1 ignores shields, State=basic/stun with StateTurns and StateChance puts a status on the target. a.* is the one acting, b.* the target: their stat sheets plus live hp, hp_max, attack, defence, point. Registered as global executors, so the same skill works in the FF core and in the card core. Enemies with stats data get their battle attributes from their sheets when the battle starts.", + "category": "gameplay", + "sources": [ + "src/**/*.cs" + ], + "test_sources": [ + "tests/*.cs" + ], + "depends": ["stats_base>=1", "turn_battle_base>=2", "characters_base>=1"] +} diff --git a/mod.jpg b/mod.jpg new file mode 100644 index 0000000000000000000000000000000000000000..79f536017c927f63c250e7a7adcc33150e88b731 GIT binary patch literal 119773 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 e@0?U7<9l#0J + /// What a battle formula can read: a.* is the one acting, b.* the target. + /// Each side answers its stat sheet (a.str, b.mag, a.level) and the + /// live battle attributes under fixed names — hp, hp_max, attack, + /// defence, point — so a formula may hit harder on a wounded target + /// (b.hp < b.hp_max / 2) whatever stats the game defines. + /// + public class BattleFormulaScope : IFormulaScope + { + private readonly Character user; + private readonly Character target; + + /// Scope of acting on (either may be null). + public BattleFormulaScope(Character user, Character target, Random random = null) + { + this.user = user; + this.target = target; + Random = random ?? Random.Shared; + } + + /// + public Random Random { get; } + + /// + public bool TryGet(string name, out double value) + { + value = 0; + if (name == null || name.Length < 3 || name[1] != '.') + return false; + var side = name[0] switch + { + 'a' => user, + 'b' => target, + _ => null + }; + return side != null && Read(side, name.Substring(2), out value); + } + + /// A value of one side: live attributes first, then its stat sheet. + public static bool Read(Character character, string key, out double value) + { + var attributes = character.Attributes; + switch (key) + { + case "hp": + value = attributes?.Health?.Value ?? 0; + return true; + case "hp_max": + value = attributes?.Health?.BaseValue ?? 0; + return true; + case "attack": + value = attributes?.Attack?.Value ?? 0; + return true; + case "defence": + value = attributes?.Defence?.Value ?? 0; + return true; + case "point": + value = attributes?.Point?.Value ?? 0; + return true; + } + var sheet = StatsService.Sheet(character.ID); + if (key == "level") + { + value = character.Level > 0 ? character.Level : sheet.Level; + return true; + } + return sheet.TryGet(key, out value); + } + } +} diff --git a/src/BattleFormulasInitializer.cs b/src/BattleFormulasInitializer.cs new file mode 100644 index 0000000..544085e --- /dev/null +++ b/src/BattleFormulasInitializer.cs @@ -0,0 +1,28 @@ +namespace Cthangover.Mods.BattleFormulas +{ + using Cthangover.Core.Events; + using Cthangover.Core.Mods; + + /// Registers the formula actions when resources are ready and hooks the battle start. + public class BattleFormulasInitializer : IModInitializer + { + private static bool subscribed; + + /// + public void OnModLoaded(string modId) + { + } + + /// + public void OnModResourcesReady() + { + FormulaActions.Refresh(); + if (subscribed) + return; + subscribed = true; + ModEventBus.Subscribe(BattleStatsBridge.OnRouteActivating); + ModEventBus.Subscribe(BattleStatsBridge.OnBattleStarted); + ModEventBus.Subscribe(PoolGauge.OnStatsChanged); + } + } +} diff --git a/src/BattleStatsBridge.cs b/src/BattleStatsBridge.cs new file mode 100644 index 0000000..5019e16 --- /dev/null +++ b/src/BattleStatsBridge.cs @@ -0,0 +1,42 @@ +namespace Cthangover.Mods.BattleFormulas +{ + using System.Linq; + using Cthangover.Core.Battle; + using Cthangover.Core.Events; + using Cthangover.Mods.Stats; + + /// + /// The moment a battle starts: formula actions are (re)registered, the party's bound + /// stats are synced (a member may have joined in the same dialog that started the + /// fight), and enemies whose templates carry stats data (Stats, + /// Archetype or Traits) get their battle attributes from their sheets. An + /// enemy without stats data keeps its template's numbers, so old content fights as before. + /// + public static class BattleStatsBridge + { + /// + /// The battle route is about to load: the battle scene builds its sides and HUD from + /// the attributes right after this, so they get their stats now. + /// + public static void OnRouteActivating(SceneRouteActivatingEvent evt) + { + if (evt?.LogicalName == "Battle") + OnBattleStarted(null); + } + + /// + /// Handler of (also run on the route activation); + /// every step is idempotent, so running twice changes nothing. + /// + public static void OnBattleStarted(BattleStartedEvent evt) + { + FormulaActions.Refresh(); + StatSync.SyncRoster(); + foreach (var enemy in BattleRequest.Current?.EnemiesCards?.Where(e => e != null) ?? Enumerable.Empty()) + { + if (StatsService.Participates(enemy.ID)) + StatBindings.Apply(StatsService.Sheet(enemy.ID), enemy.Attributes); + } + } + } +} diff --git a/src/FormulaActionExecutor.cs b/src/FormulaActionExecutor.cs new file mode 100644 index 0000000..94fc313 --- /dev/null +++ b/src/FormulaActionExecutor.cs @@ -0,0 +1,121 @@ +namespace Cthangover.Mods.BattleFormulas +{ + using System; + using Cthangover.Core.Cards.StatusEffect; + using Cthangover.Core.Characters; + using Cthangover.Core.Utils; + using Cthangover.Mods.Stats; + using Cthangover.Mods.Stats.Formulas; + + /// + /// Runs a battle action whose numbers are data. An "Kind": "action" entity with + /// these values needs no C# of its own: + /// + /// Formula= the amount (a.mag * 3 - b.mdf + rand(0, 4)), never below 0; + /// Effect=damage (default) or heal; + /// Cost=mp:5 spends a pool stat of a party member (enemies pay nothing); + /// RequiredPoint= spends action points as every core does; + /// Pierce=1 ignores the target's shield (the consumable defence attribute + /// the cards build up), otherwise the shield absorbs first, as in both cores; + /// State=effect/physics/stun (+ StateTurns=, StateChance= percent) puts a + /// status effect on the target. + /// + /// Status effect hooks see the damage like any core's damage, so passives and statuses + /// of other mods keep working. Executors are registered globally, which is why the same + /// skill works in the FF core and in the card core: each core's own provider is asked + /// first and falls back to the global ones for ids it does not know. + /// + public class FormulaActionExecutor : ActionBase + { + private readonly string id; + + /// Executor of the action entity . + public FormulaActionExecutor(string actionId) + { + id = actionId; + } + + /// + public override string ID => id; + + /// + public override ChangedAttributes Execute(ActionCharacter action, Character user, Character target) + { + if (user == null || action == null) + return new ChangedAttributes { Result = false }; + if (target == null || action.Type == ActionCharacterType.ToSelf) + target = user; + // The pool is only checked first and spent after the action points, so a refused + // action never costs mana. + if (!PayCost(action, user, false) || !CheckRequiredAndUsePoint(action, user)) + return new ChangedAttributes { Result = false }; + PayCost(action, user, true); + + var amount = Math.Max(0, (int)Math.Round(Formula.Evaluate(action.GetStr("Formula"), new BattleFormulaScope(user, target)), MidpointRounding.AwayFromZero)); + var result = string.Equals(action.GetStr("Effect"), "heal", StringComparison.OrdinalIgnoreCase) + ? Heal(target, amount) + : Damage(action, user, target, amount); + ApplyState(action, target); + GameLogger.Log("BATTLE", $"formula action '{id}': {user.ID} -> {target.ID}, amount {amount}, damage {result.Target.Damage}", LogLevel.Debug); + return result; + } + + private static ChangedAttributes Damage(ActionCharacter action, Character user, Character target, int amount) + { + StatusEffectService.Of(target).OnTakeDamage(user, ref amount); + StatusEffectService.Of(user).OnDealDamage(target, ref amount); + + var shield = 0; + var pierce = action.GetInt("Pierce") != 0 || user.HasPassiveEffect("IgnoreArmor"); + if (!pierce && target.Attributes.Defence.Value > 0) + { + shield = Math.Min(target.Attributes.Defence.Value, amount); + amount -= shield; + target.Attributes.Defence.Value -= shield; + } + target.Attributes.Health.Value = Math.Max(0, target.Attributes.Health.Value - amount); + return new ChangedAttributes { Result = true, Target = { Damage = amount, Defence = -shield } }; + } + + private static ChangedAttributes Heal(Character target, int amount) + { + var health = target.Attributes.Health; + var healed = Math.Max(0, Math.Min(amount, health.BaseValue - health.Value)); + health.Value += healed; + return new ChangedAttributes { Result = true, Target = { Damage = healed } }; + } + + private static bool PayCost(ActionCharacter action, Character user, bool spend) + { + var cost = action.GetStr("Cost"); + if (string.IsNullOrWhiteSpace(cost) || StatsService.RosterEntry(user.ID) == null) + return true; + var colon = cost.IndexOf(':'); + if (colon <= 0 || !int.TryParse(cost.Substring(colon + 1), out var amount)) + { + if (!spend) + GameLogger.Log("BATTLE", $"action '{action.ID}': Cost must look like 'mp:5', got '{cost}'", LogLevel.Error); + return true; + } + var stat = cost.Substring(0, colon).Trim(); + if (spend) + return StatPools.Spend(user.ID, stat, amount); + if (StatPools.Current(user.ID, stat) >= amount) + return true; + GameLogger.Log("BATTLE", $"{user.ID} lacks {stat} for '{action.ID}' ({StatPools.Current(user.ID, stat)} < {amount})", LogLevel.Warning); + return false; + } + + private static void ApplyState(ActionCharacter action, Character target) + { + var state = action.GetStr("State"); + if (string.IsNullOrWhiteSpace(state) || target.Attributes.Health.Value <= 0) + return; + var chance = action.Properties.Values.ContainsKey("StateChance") ? action.GetInt("StateChance") : 100; + if (Random.Shared.Next(100) >= chance) + return; + var turns = action.Properties.Values.ContainsKey("StateTurns") ? action.GetInt("StateTurns") : -1; + StatusEffectService.Of(target).Add(state.Trim(), turns); + } + } +} diff --git a/src/FormulaActions.cs b/src/FormulaActions.cs new file mode 100644 index 0000000..8c2c304 --- /dev/null +++ b/src/FormulaActions.cs @@ -0,0 +1,47 @@ +namespace Cthangover.Mods.BattleFormulas +{ + using System.Collections.Generic; + using System.Linq; + using Cthangover.Core.Battle.Actions; + using Cthangover.Core.Characters; + using Cthangover.Core.Mods.Resolvers; + using Cthangover.Core.Utils; + + /// + /// Finds the action entities that carry a Formula= value and registers a + /// for each as a global battle executor. Runs when + /// mod resources are ready and again as every battle starts, so an action added in an + /// editor or by a freshly loaded mod is playable in the next battle. + /// + /// The hub keys executors by action id and replaces on re-registration, so a reload + /// simply re-points the ids at this assembly's executors. + /// + public static class FormulaActions + { + private const string FormulaPrefix = "Formula="; + + private static object snapshot; + + /// The ids of the loaded formula actions. + public static List Ids() + => Entities.Collect().Values + .Where(IsFormulaAction).Select(a => a.ID).OrderBy(id => id, System.StringComparer.Ordinal).ToList(); + + /// Whether an action entity is driven by a formula. + public static bool IsFormulaAction(ActionCharacterInfo info) + => info?.Values != null && info.Values.Any(v => v != null && v.StartsWith(FormulaPrefix, System.StringComparison.OrdinalIgnoreCase)); + + /// Registers an executor per formula action (only when the data snapshot changed). + public static void Refresh() + { + var current = Entities.Collect(); + if (ReferenceEquals(current, snapshot)) + return; + snapshot = current; + var ids = Ids(); + foreach (var id in ids) + ActionExecutorHub.Instance.RegisterGlobal(new FormulaActionExecutor(id)); + GameLogger.Log("BATTLE", $"battle formulas: {ids.Count} formula action(s) registered"); + } + } +} diff --git a/src/PoolGauge.cs b/src/PoolGauge.cs new file mode 100644 index 0000000..d0f348b --- /dev/null +++ b/src/PoolGauge.cs @@ -0,0 +1,42 @@ +namespace Cthangover.Mods.BattleFormulas +{ + using System; + using System.Collections.Generic; + using System.Linq; + using Cthangover.Core.Battle; + using Cthangover.Core.Characters; + using Cthangover.Core.Events; + using Cthangover.Mods.Stats; + + /// + /// The pool stats ("Pool": true, like mana) of party members who take part in + /// the stats, as bars of the battle cores: current = what is left after spending, max = + /// the sheet value. Hidden stats and enemies (they never pay costs) get none. + /// + public class PoolGauge : IBattleUnitGauge + { + /// + public int Order => 100; + + /// + public IEnumerable Read(Character unit) + { + if (unit?.ID == null || StatsService.RosterEntry(unit.ID) == null || !StatsService.Participates(unit.ID)) + yield break; + var sheet = StatsService.Sheet(unit.ID); + foreach (var def in StatsService.Definitions.Where(d => d.Pool && !d.Hidden && sheet.Has(d.ID))) + { + yield return new BattleGauge + { + Id = def.ID, + Label = string.IsNullOrWhiteSpace(def.Short) ? def.Name ?? def.ID : def.Short, + Current = (int)Math.Round(StatPools.Current(unit.ID, def.ID), MidpointRounding.AwayFromZero), + Max = sheet.Rounded(def.ID), + }; + } + } + + /// Stats changed (mana spent or refilled): the cores redraw that unit's bars. + public static void OnStatsChanged(StatsChangedEvent evt) => BattleUnitGauges.NotifyChanged(evt?.CharacterId); + } +} diff --git a/tests/BattleFormulaScopeTests.cs b/tests/BattleFormulaScopeTests.cs new file mode 100644 index 0000000..cfabf2a --- /dev/null +++ b/tests/BattleFormulaScopeTests.cs @@ -0,0 +1,33 @@ +namespace Cthangover.Mods.BattleFormulas.Tests +{ + using Cthangover.Core.Characters; + using Cthangover.Core.Mods.Testing; + + /// a.* reads the one acting, b.* the target; live attributes under fixed names; other prefixes are unknown. + public class BattleFormulaScopeTests + { + [ModTest("scope/sides_and_live_names")] + static void SidesAndLiveNames(ModTestContext ctx) + { + var a = new Character { ID = "test_a_no_stats", Level = 4 }; + a.Attributes.Health.Init(40); + a.Attributes.Health.Value = 25; + a.Attributes.Attack.Init(7); + var b = new Character { ID = "test_b_no_stats", Level = 2 }; + b.Attributes.Defence.Init(3); + b.Attributes.Point.Init(2); + + var scope = new BattleFormulaScope(a, b); + + ModAssert.True(scope.TryGet("a.hp", out var hp) && hp == 25, "a.hp is the current health"); + ModAssert.True(scope.TryGet("a.hp_max", out var max) && max == 40, "a.hp_max"); + ModAssert.True(scope.TryGet("a.attack", out var atk) && atk == 7, "a.attack"); + ModAssert.True(scope.TryGet("a.level", out var level) && level == 4, "a.level from the battle character"); + ModAssert.True(scope.TryGet("b.defence", out var def) && def == 3, "b.defence"); + ModAssert.True(scope.TryGet("b.point", out var points) && points == 2, "b.point"); + ModAssert.False(scope.TryGet("c.hp", out _), "unknown side"); + ModAssert.False(scope.TryGet("hp", out _), "no side"); + ModAssert.False(scope.TryGet("b.no_such_stat", out _), "a stat nobody has"); + } + } +} diff --git a/tests/FormulaActionExecutorTests.cs b/tests/FormulaActionExecutorTests.cs new file mode 100644 index 0000000..c4c960c --- /dev/null +++ b/tests/FormulaActionExecutorTests.cs @@ -0,0 +1,101 @@ +namespace Cthangover.Mods.BattleFormulas.Tests +{ + using Cthangover.Core.Characters; + using Cthangover.Core.Mods.Testing; + using Cthangover.Core.Utils; + + /// + /// A formula action applied to two plain characters: damage through shields, heals + /// capped at the maximum, refused actions changing nothing. + /// + public class FormulaActionExecutorTests + { + private static Character Fighter(string id, int hp, int attack = 0, int defence = 0, int points = 3) + { + var c = new Character { ID = id, Level = 1 }; + c.Attributes.Health.Init(hp); + c.Attributes.Attack.Init(attack); + c.Attributes.Defence.Init(defence); + c.Attributes.Point.Init(points); + return c; + } + + private static ActionCharacter Action(ActionCharacterType type, params string[] values) + { + var props = new PropertyData(); + foreach (var value in values) + { + var eq = value.IndexOf('='); + props.Values[value.Substring(0, eq)] = value.Substring(eq + 1); + } + return new ActionCharacter { ID = "test/formula", Type = type, Properties = props }; + } + + [ModTest("executor/damage_from_live_attributes")] + static void DamageFromLiveAttributes(ModTestContext ctx) + { + var hero = Fighter("test_hero_no_stats", 20, attack: 10); + var slime = Fighter("test_slime_no_stats", 30); + + var result = new FormulaActionExecutor("test/formula").Execute(Action(ActionCharacterType.ToEnemy, "Formula=a.attack * 2 - 3"), hero, slime); + + ModAssert.True(result.Result, "applied"); + ModAssert.Equal(17, result.Target.Damage, "10 * 2 - 3"); + ModAssert.Equal(13, slime.Attributes.Health.Value, "health lost"); + } + + [ModTest("executor/shield_absorbs_unless_pierce")] + static void ShieldAbsorbsUnlessPierce(ModTestContext ctx) + { + var hero = Fighter("test_hero_no_stats", 20); + var guard = Fighter("test_guard_no_stats", 30, defence: 5); + + var blocked = new FormulaActionExecutor("test/formula").Execute(Action(ActionCharacterType.ToEnemy, "Formula=12"), hero, guard); + ModAssert.Equal(7, blocked.Target.Damage, "the shield took 5"); + ModAssert.Equal(-5, blocked.Target.Defence, "shield change"); + ModAssert.Equal(0, guard.Attributes.Defence.Value, "the shield is spent"); + + guard.Attributes.Defence.Value = 5; + var pierced = new FormulaActionExecutor("test/formula").Execute(Action(ActionCharacterType.ToEnemy, "Formula=12", "Pierce=1"), hero, guard); + ModAssert.Equal(12, pierced.Target.Damage, "pierce ignores the shield"); + ModAssert.Equal(5, guard.Attributes.Defence.Value, "the shield is kept"); + } + + [ModTest("executor/heal_is_capped_and_targets_self")] + static void HealIsCapped(ModTestContext ctx) + { + var hero = Fighter("test_hero_no_stats", 20); + hero.Attributes.Health.Value = 15; + + var result = new FormulaActionExecutor("test/formula").Execute(Action(ActionCharacterType.ToSelf, "Formula=10", "Effect=heal"), hero, null); + + ModAssert.True(result.Result, "applied"); + ModAssert.Equal(5, result.Target.Damage, "only the missing 5 are healed"); + ModAssert.Equal(20, hero.Attributes.Health.Value, "full"); + } + + [ModTest("executor/points_refuse_and_negative_is_zero")] + static void PointsRefuseAndNegativeIsZero(ModTestContext ctx) + { + var hero = Fighter("test_hero_no_stats", 20, points: 1); + var slime = Fighter("test_slime_no_stats", 30); + + var refused = new FormulaActionExecutor("test/formula").Execute(Action(ActionCharacterType.ToEnemy, "Formula=50", "RequiredPoint=2"), hero, slime); + ModAssert.False(refused.Result, "not enough action points"); + ModAssert.Equal(30, slime.Attributes.Health.Value, "nothing happened"); + ModAssert.Equal(1, hero.Attributes.Point.Value, "no points spent"); + + var zero = new FormulaActionExecutor("test/formula").Execute(Action(ActionCharacterType.ToEnemy, "Formula=b.hp - 999"), hero, slime); + ModAssert.Equal(0, zero.Target.Damage, "a negative amount is 0"); + ModAssert.Equal(30, slime.Attributes.Health.Value, "never heals by accident"); + } + + [ModTest("registry/formula_actions_are_detected")] + static void FormulaActionsAreDetected(ModTestContext ctx) + { + ModAssert.True(FormulaActions.IsFormulaAction(new ActionCharacterInfo { ID = "x", Values = new() { "RequiredPoint=1", "formula=a.attack" } }), "Formula= in any case"); + ModAssert.False(FormulaActions.IsFormulaAction(new ActionCharacterInfo { ID = "y", Values = new() { "Attack=2" } }), "a core action"); + ModAssert.False(FormulaActions.IsFormulaAction(new ActionCharacterInfo { ID = "z" }), "no values"); + } + } +}