Commit Graph

176 Commits

Author SHA1 Message Date
MpakobecEx a1e7c250bf Target selection and Activated abilities
PendingChoice/ChooseCommand let effects ask the player to pick a unit. Added Counter Blast and Soul Blast cost helpers. Blaster Blade implemented for both zones with its CB2 cost and rear-guard target. Activated abilities pay rest-self and discard; Lake Maiden Lien, Gojo and Shout draw a card. Seven tests.
2026-10-21 13:14:16 +05:00
MpakobecEx 5262b6b93c Add a test proving guard also protects a rear-guard from retirement 2026-10-21 13:10:03 +05:00
MpakobecEx b7473f73d7 Ability bus, Check Timing and the first card scripts
CardScript model with Triggered and Continuous abilities. Check Timing collects triggered abilities, orders them (turn player first, player picks the order via SelectTriggerCommand), and pauses on optional abilities (ResolveAbilityCommand). Continuous effects are recomputed on demand in EffectivePower. Scripts: Barcgal (optional call from soul), Wingal (+4000 when boosting Blaster Blade), Alfred (+2000 per Royal Paladin rear-guard). Six tests.
2026-10-21 00:53:36 +05:00
MpakobecEx bf2ea337f8 Drive checks belong to the attacking card
Grade 0-2 vanguard performs one check, grade 3+ performs two, rear-guards perform none by default. CardInstance.DriveChecksOverride lets effects remove Twin Drive or grant checks to a rear-guard. Added DriveCheckedEvent for the log. Five tests.
2026-10-21 00:47:44 +05:00
MpakobecEx 71db856480 Move: rear-guard moves within its column and swaps with an occupied circle
MoveCommand(from, to) in the Main phase. Only 0-3 (left) and 2-4 (right) are valid pairs; the center back row has no partner. Rested state stays with the card. Five tests.
2026-10-21 00:45:15 +05:00
MpakobecEx 4dd96e6f02 Intercept also works when the vanguard is attacked
Removed the rear-guard-only restriction. Interceptor resolution now runs before the vanguard damage branch, so a successful intercept retires the interceptor and the vanguard takes no damage. The attacked rear-guard still cannot intercept itself. Two tests.
2026-10-21 00:43:10 +05:00
MpakobecEx fdc21c8a26 Intercept: grade 2 front-row rear-guard moves to the guardian circle
InterceptCommand during the guard step. The interceptor leaves its circle, becomes the power reference for the attack and goes to the drop zone at the end of the battle; the original target survives. Grade 1 cannot intercept, back row only with InterceptFromBackRow granted by an effect. Five tests.
2026-10-21 00:40:23 +05:00
MpakobecEx 830785a8d6 Perfect Guard: pay the cost to nullify the attack, otherwise zero shield
GuardCommand takes an optional discard. Sentinel cards have zero shield; paying with a card of the same clan sets Nullified on the battle so power no longer matters. Three tests: paid, unpaid, wrong clan.
2026-10-21 00:37:05 +05:00
MpakobecEx 66f2ecc3f5 Implement Boost as a separate ability that effects can grant or remove
Cards of grade 0 and 1 have boost by default (HasBoost); CardInstance.BoostOverride lets an effect grant or remove it at runtime. AttackCommand takes an optional BoosterSlot: the back-row unit in the same column adds its power for that battle only and becomes rested. Four new tests.
2026-10-21 00:34:58 +05:00
MpakobecEx c2480bab63 Trigger buffs last until end of turn; trigger cards go through the trigger zone first
Order is now: reveal -> trigger zone -> resolve effects -> hand (drive check) or damage (damage check). Damage is added only after the trigger resolves, so heal compares the pre-damage count. Temporary power/crit are cleared at end of turn instead of end of battle.
2026-10-21 00:30:28 +05:00
MpakobecEx ebbfb46834 Damage check triggers also pause for target selection
Damage check now places the card, then pauses on a trigger with PendingTrigger(DamageCheck) and the remaining damage count. Resolving applies the same +5000 and secondary effect as drive check, then continues the remaining damage or closes the battle. 34 tests.
2026-10-21 00:27:09 +05:00
MpakobecEx a4457c6d21 Trigger targeting: +5000 and secondary effect are chosen by the player
Drive check now pauses on a trigger and waits for ResolveTriggerCommand(powerTarget, effectTarget). Power and crit modifiers moved from the battle to the unit and are cleared at the end of the battle. Stand stands the chosen rear-guard; Critical applies +1 crit to the chosen unit. Damage-check triggers still apply only the secondary effect.
2026-10-21 00:24:21 +05:00
MpakobecEx 1b317b6532 Game engine skeleton: phases, ride, call, battle, drive and damage
Pure rules library with no Orleans or database. Command in, events out. Deterministic RNG stored in GameState. Covers setup with starting vanguard and mulligan, six phases, ride, call, attack, guard, drive check, damage check with triggers, retirement and win at six damage. 8 engine tests, 30 total. Sentinel, boost and card abilities are the next step.
2026-10-21 00:20:10 +05:00
MpakobecEx 7687d2f0b6 Confirm polite 'vy' address; translation canon is closed 2026-10-21 00:16:45 +05:00
MpakobecEx d63f223783 Fix translation tests for the required nameRu field 2026-10-21 00:15:45 +05:00
MpakobecEx b37845f33d Bring back nameRu as a reserved field filled with the English name
Card names stay English, but the field exists so renaming later does not require a schema change. translations build keeps existing nameRu values.
2026-10-21 00:15:26 +05:00
MpakobecEx b82927389d Finalize card text terminology: close step, call, zones
close step -> 'zavershayushchiy shag', call confirmed as 'prizvat', zone tooltips kept. Added a check for the old 'shag zaversheniya' wording.
2026-10-21 00:13:32 +05:00
MpakobecEx 6623a43d5e Confirm all six phase names and apply them to card texts
Stand -> Faza Podyoma, Draw -> Faza Dobora, Ride -> Faza Smeny, Main -> Osnovnaya faza, Battle -> Boevaya faza, End -> Zavershayushchaya faza. Card texts updated (9 occurrences). Checker now rejects the old wording.
2026-10-21 00:11:29 +05:00
MpakobecEx e7a5058775 Confirm translation terms: yo letter, boosted unit, retire
Added the yo letter (porazhyon), renamed boosted unit to 'usilennaya karta', confirmed 'unichtozhit' for retire. Refined the forbidden-term check to allow 'usilennaya' while still catching 'usilen'/'usilennyy'.
2026-10-21 00:06:50 +05:00
MpakobecEx 921a6dc081 Propagate customer translation canon to all card texts
Applied the style from the customer's edits: unit -> 'karta', place on -> 'pomeshchaetsya v', ride -> 'smena', boost -> 'podderzhivat', attack hits -> 'prokhodit', drive check -> 'proverka', Restraint -> 'Sderzhivanie', {heal} reminder simplified, long clauses split, pronouns instead of repeated 'eta karta'. Added a forbidden-terms check to translations check. Removed the one-off seed script: ru.yaml is now the source of truth.
2026-10-21 00:04:06 +05:00
MpakobecEx 7b7737a83e Apply customer terminology: Avangard, Aryergard, rank, drive check
Applied to all 66 texts: vanguard -> Avangard, rear-guard -> Aryergard (capitalized), grade -> rank, drive check reveals -> 'v draiveke okazyvaetsya', from a zone -> 'iz'. Updated zone tooltips and translation rules to v0.2.
2026-10-20 21:54:12 +05:00
MpakobecEx d1f4e433db Draft Russian translation of all card texts and translation rules
66 effect texts translated with icon tokens preserved. Added docs/translation-rules.md with terminology, syntax patterns and open terminology questions. Normalized the source typo Own(VC/RC) to [AUTO](VC/RC).
2026-10-20 21:43:58 +05:00
MpakobecEx edd6a7506c Keep card names in English, translate only effect text
Dropped nameRu from the translation workflow and from content validation warnings. Progress now counts cards whose text is filled; vanilla cards without text count as done.
2026-10-20 21:40:45 +05:00
MpakobecEx 625ed36f94 Card text tokenization, keyword catalog and RU translation workflow
Card texts are stored as templates with icon tokens ({auto}, {cb:3}, {vcrc}, {clan:kagero}). Keyword catalog maps tokens to icons and captions. translations build generates content/translations/ru.yaml preserving existing work; translations check verifies completeness and token integrity. 21 tests.
2026-10-20 21:35:55 +05:00
MpakobecEx 0b771bf8bb Server skeleton, content pipeline and 94-card catalog
Solution on .NET 10 LTS with rules, content and CLI projects. Content importer pulls stats from the official card list, merges trigger/rarity data, emits three YAML sets (94 cards, 124 printings). Validator checks the grade-0 shield invariant, sentinel shield, parallel printing links, and deck construction limits. 14 tests cover catalog integrity and deck validation.
2026-10-20 21:27:45 +05:00
MpakobecEx 83fd1b74d1 Base version: design docs, card catalog, implementation checklist 2026-10-20 21:15:00 +05:00