feat(rules): Hand to Hand Expert, Martial Arts, Assassin & Commando#39
Merged
Conversation
Adds the four remaining RUE Hand-to-Hand progressions (printed pp.347-349) to combat content. The engine is data-driven, so no engine changes: attacksPerMelee/hthBonuses read the new types as-is. New accumulative bonus keys carried by the tables (initiative, entangle, autoDodge, bodyFlipThrow, saveVsHorrorFactor, strikeThrown, strikeGuns) validate through the open bonus record and await the attack resolver (#16) to be consumed; special moves without flat modifiers are notes. Builder fallout: the LLW wizard upgrades (Expert/Martial Arts/Assassin) light up automatically via hthIdFromName resolution. Tests updated to pin the flipped availability, upgrade costs against the real LLW, the Assassin evil-alignment gate through a modeled target, and the still-unavailable path via a synthetic unmodeled style.
There was a problem hiding this comment.
No issues found across 4 files
Auto-approved: Content-only addition of four hand-to-hand combat progressions with corresponding tests. No engine logic, infrastructure, or security changes.
Re-trigger cubic
Root-level `vp test` loaded ONLY the root vite.config.ts as a single Vitest project, so per-package configs never applied: apps/web lost its solid plugin and `resolve.conditions` fix, solid-js resolved to the non-reactive server build, and the Convex bindings resubscription test failed (createRenderEffect never re-ran on signal change). Per-package `vp run web#test` was unaffected, which is why CI stayed green. Declaring `test.projects: ["apps/*", "packages/*"]` makes root runs load each package's own config — same plugins, resolve conditions and test environments as the per-package commands. 170/170 from root and per-package. Pre-existing on main; surfaced while validating #15.
There was a problem hiding this comment.
0 issues found across 1 file (changes from recent commits).
Requires human review: This PR adds core combat data (H2H progressions) and updates builder logic/tests. Even though no engine changes are needed, the content addition affects core character progression and the schema changes introduce new bonus keys that will be wired into the attack resolver.
Re-trigger cubic
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #15.
What
Adds the four remaining Hand-to-Hand combat progressions from RUE printed pp.347-349 to
content/combat/hand-to-hand.json:Content-only for the engine:
attacksPerMelee/hthBonuses/combatProfileare data-driven and read the new types without code changes.New bonus keys
The advanced styles grant bonuses beyond strike/parry/dodge/damage. These are encoded with the same accumulative semantics under new keys —
initiative,entangle,autoDodge,bodyFlipThrow,saveVsHorrorFactor,strikeThrown,strikeGuns— and validate through the schema's open bonus record. They surface viahthBonuses()today; wiring them into the sheet/rolls is #16 (attack resolver) scope. Special moves without a flat modifier (karate kick damage, back flips, death blows, knockout ranges) are captured as page-faithfulnotes.Builder fallout (by design)
hthIdFromNamenow resolves all three printed LLW upgrades, so the wizard's upgrade options flipavailable: trueautomatically — no UI changes needed. Tests updated accordingly:expert/martial-arts/assassinas available with printed costsVerification
vp run rules#test), incl. accumulated-bonus totals at level 15 for each new type hand-checked against the book pagesvp run rules#check/ rootvp checkcleanBonus fix: root
vp testwas silently non-reactive for apps/webWhile validating, root-level
vp testfailedapps/web/tests/convex.test.ts("resubscribes when reactive args change") — reproduced on cleanmain, so pre-existing, not caused by this PR. Root cause: rootvp testloaded only the rootvite.config.tsas a single Vitest project, soapps/web's own config (solid plugin + theresolve.conditionsfix from #31) never applied and solid-js resolved to its non-reactive server build —createRenderEffectran once but never re-ran on signal change. Per-packagevp run web#testwas unaffected, which is why CI (per-package) stayed green.Fixed by declaring
test.projects: ["apps/*", "packages/*"]in the root config, so root runs load each package's own config (plugins, resolve conditions,node/edge-runtimeenvironments) exactly like the per-package commands. Verified: 170/170 from root, 152/6/12 per-package,vp checkclean.Summary by cubic
Adds the remaining Hand-to-Hand progressions — Expert, Martial Arts, Assassin, and Commando (RUE pp.347–349) — to
packages/rules/src/content/combat/hand-to-hand.json. The engine consumes them as-is; Ley Line Walker upgrade options now auto-enable and are tested.initiative,entangle,autoDodge,bodyFlipThrow,saveVsHorrorFactor,strikeThrown,strikeGuns(special moves captured as notes).attacksPerMelee,hthBonuses, andcombatProfileread the new content.hthIdFromNameresolvesexpert/martial-arts/assassin; LLW upgrades flip to available; Assassin still requires evil alignment.ninjutsu.Written for commit 19e9a48. Summary will update on new commits.