@mythxengine/engine 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (82) hide show
  1. package/LICENSE +21 -0
  2. package/dist/__tests__/advantage.test.d.ts +5 -0
  3. package/dist/__tests__/advantage.test.d.ts.map +1 -0
  4. package/dist/__tests__/advantage.test.js +126 -0
  5. package/dist/__tests__/advantage.test.js.map +1 -0
  6. package/dist/__tests__/dice.test.d.ts +2 -0
  7. package/dist/__tests__/dice.test.d.ts.map +1 -0
  8. package/dist/__tests__/dice.test.js +150 -0
  9. package/dist/__tests__/dice.test.js.map +1 -0
  10. package/dist/__tests__/resolution.test.d.ts +5 -0
  11. package/dist/__tests__/resolution.test.d.ts.map +1 -0
  12. package/dist/__tests__/resolution.test.js +362 -0
  13. package/dist/__tests__/resolution.test.js.map +1 -0
  14. package/dist/__tests__/rng.test.d.ts +2 -0
  15. package/dist/__tests__/rng.test.d.ts.map +1 -0
  16. package/dist/__tests__/rng.test.js +93 -0
  17. package/dist/__tests__/rng.test.js.map +1 -0
  18. package/dist/dice/advantage.d.ts +45 -0
  19. package/dist/dice/advantage.d.ts.map +1 -0
  20. package/dist/dice/advantage.js +118 -0
  21. package/dist/dice/advantage.js.map +1 -0
  22. package/dist/dice/index.d.ts +7 -0
  23. package/dist/dice/index.d.ts.map +1 -0
  24. package/dist/dice/index.js +7 -0
  25. package/dist/dice/index.js.map +1 -0
  26. package/dist/dice/parser.d.ts +21 -0
  27. package/dist/dice/parser.d.ts.map +1 -0
  28. package/dist/dice/parser.js +61 -0
  29. package/dist/dice/parser.js.map +1 -0
  30. package/dist/dice/roller.d.ts +23 -0
  31. package/dist/dice/roller.d.ts.map +1 -0
  32. package/dist/dice/roller.js +62 -0
  33. package/dist/dice/roller.js.map +1 -0
  34. package/dist/index.d.ts +10 -0
  35. package/dist/index.d.ts.map +1 -0
  36. package/dist/index.js +14 -0
  37. package/dist/index.js.map +1 -0
  38. package/dist/resolution/combat.d.ts +39 -0
  39. package/dist/resolution/combat.d.ts.map +1 -0
  40. package/dist/resolution/combat.js +214 -0
  41. package/dist/resolution/combat.js.map +1 -0
  42. package/dist/resolution/damage.d.ts +27 -0
  43. package/dist/resolution/damage.d.ts.map +1 -0
  44. package/dist/resolution/damage.js +44 -0
  45. package/dist/resolution/damage.js.map +1 -0
  46. package/dist/resolution/index.d.ts +8 -0
  47. package/dist/resolution/index.d.ts.map +1 -0
  48. package/dist/resolution/index.js +8 -0
  49. package/dist/resolution/index.js.map +1 -0
  50. package/dist/resolution/initiative.d.ts +19 -0
  51. package/dist/resolution/initiative.d.ts.map +1 -0
  52. package/dist/resolution/initiative.js +55 -0
  53. package/dist/resolution/initiative.js.map +1 -0
  54. package/dist/resolution/test.d.ts +34 -0
  55. package/dist/resolution/test.d.ts.map +1 -0
  56. package/dist/resolution/test.js +143 -0
  57. package/dist/resolution/test.js.map +1 -0
  58. package/dist/rng/index.d.ts +6 -0
  59. package/dist/rng/index.d.ts.map +1 -0
  60. package/dist/rng/index.js +6 -0
  61. package/dist/rng/index.js.map +1 -0
  62. package/dist/rng/mulberry32.d.ts +13 -0
  63. package/dist/rng/mulberry32.d.ts.map +1 -0
  64. package/dist/rng/mulberry32.js +23 -0
  65. package/dist/rng/mulberry32.js.map +1 -0
  66. package/dist/rng/rng.d.ts +26 -0
  67. package/dist/rng/rng.d.ts.map +1 -0
  68. package/dist/rng/rng.js +51 -0
  69. package/dist/rng/rng.js.map +1 -0
  70. package/dist/rules/context.d.ts +86 -0
  71. package/dist/rules/context.d.ts.map +1 -0
  72. package/dist/rules/context.js +137 -0
  73. package/dist/rules/context.js.map +1 -0
  74. package/dist/rules/custom-test.d.ts +33 -0
  75. package/dist/rules/custom-test.d.ts.map +1 -0
  76. package/dist/rules/custom-test.js +164 -0
  77. package/dist/rules/custom-test.js.map +1 -0
  78. package/dist/rules/index.d.ts +6 -0
  79. package/dist/rules/index.d.ts.map +1 -0
  80. package/dist/rules/index.js +6 -0
  81. package/dist/rules/index.js.map +1 -0
  82. package/package.json +47 -0
@@ -0,0 +1,33 @@
1
+ /**
2
+ * Custom Test Resolution
3
+ *
4
+ * Resolves custom tests defined in world pack rules (panic checks, sanity rolls, etc.)
5
+ */
6
+ import type { CustomTestDefinition, CustomTestResult } from "@mythxengine/types";
7
+ import type { RNG } from "../rng/rng.js";
8
+ import type { RulesContext } from "./context.js";
9
+ export interface CustomTestOptions {
10
+ /** The custom test definition to use */
11
+ test: CustomTestDefinition;
12
+ /** Character's ability values */
13
+ abilities: Record<string, number>;
14
+ /** RNG instance */
15
+ rng: RNG;
16
+ /** Rules context */
17
+ ctx: RulesContext;
18
+ /** Optional additional modifiers */
19
+ modifiers?: number;
20
+ }
21
+ /**
22
+ * Resolve a custom test
23
+ */
24
+ export declare function resolveCustomTest(options: CustomTestOptions): CustomTestResult;
25
+ /**
26
+ * Find a custom test by ID in rules context
27
+ */
28
+ export declare function findCustomTest(ctx: RulesContext, testId: string): CustomTestDefinition | undefined;
29
+ /**
30
+ * Find custom tests that match a trigger
31
+ */
32
+ export declare function findCustomTestsByTrigger(ctx: RulesContext, trigger: string): CustomTestDefinition[];
33
+ //# sourceMappingURL=custom-test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-test.d.ts","sourceRoot":"","sources":["../../src/rules/custom-test.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EACV,oBAAoB,EAIpB,gBAAgB,EACjB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGjD,MAAM,WAAW,iBAAiB;IAChC,wCAAwC;IACxC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,iCAAiC;IACjC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,mBAAmB;IACnB,GAAG,EAAE,GAAG,CAAC;IACT,oBAAoB;IACpB,GAAG,EAAE,YAAY,CAAC;IAClB,oCAAoC;IACpC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAoHD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,iBAAiB,GAAG,gBAAgB,CAkF9E;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,YAAY,EACjB,MAAM,EAAE,MAAM,GACb,oBAAoB,GAAG,SAAS,CAElC;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,MAAM,GACd,oBAAoB,EAAE,CAExB"}
@@ -0,0 +1,164 @@
1
+ /**
2
+ * Custom Test Resolution
3
+ *
4
+ * Resolves custom tests defined in world pack rules (panic checks, sanity rolls, etc.)
5
+ */
6
+ import { parseFormula } from "@mythxengine/types";
7
+ import { rollDice } from "../dice/roller.js";
8
+ import { checkCriticalSuccess, checkCriticalFailure } from "./context.js";
9
+ /**
10
+ * Calculate the difficulty target for a custom test
11
+ */
12
+ function calculateDifficulty(test, abilities) {
13
+ const { roll } = test;
14
+ // Fixed difficulty
15
+ if (roll.difficulty !== undefined) {
16
+ return roll.difficulty;
17
+ }
18
+ // Dynamic difficulty from formula
19
+ if (roll.difficultyFormula) {
20
+ const formula = parseFormula(roll.difficultyFormula);
21
+ return Math.floor(formula(abilities));
22
+ }
23
+ // Roll-under: target is the ability value
24
+ if (roll.underAbility) {
25
+ return abilities[roll.underAbility] ?? 10;
26
+ }
27
+ // Default to standard difficulty
28
+ return 12;
29
+ }
30
+ /**
31
+ * Determine success for a custom test
32
+ */
33
+ function determineSuccess(test, roll, total, target, isCritSuccess, isCritFail, ctx) {
34
+ const isRollUnder = test.roll.underAbility !== undefined;
35
+ const mechanics = ctx.rules.mechanics;
36
+ // Critical success always succeeds (unless rules say otherwise)
37
+ if (isCritSuccess && mechanics.criticals.autoSuccess) {
38
+ return true;
39
+ }
40
+ // Critical failure always fails (unless rules say otherwise)
41
+ if (isCritFail && mechanics.criticals.autoFailure) {
42
+ return false;
43
+ }
44
+ // Roll-under: succeed if roll is <= target
45
+ if (isRollUnder) {
46
+ return roll <= target;
47
+ }
48
+ // Roll-over: succeed if total >= target
49
+ return total >= target;
50
+ }
51
+ /**
52
+ * Get the appropriate outcome based on result
53
+ */
54
+ function getOutcome(test, success, isCritical) {
55
+ const { outcomes } = test;
56
+ if (success) {
57
+ if (isCritical && outcomes.criticalSuccess) {
58
+ return outcomes.criticalSuccess;
59
+ }
60
+ return outcomes.success;
61
+ }
62
+ else {
63
+ if (isCritical && outcomes.criticalFailure) {
64
+ return outcomes.criticalFailure;
65
+ }
66
+ return outcomes.failure;
67
+ }
68
+ }
69
+ /**
70
+ * Roll on an outcome table
71
+ */
72
+ function rollOnTable(table, abilities, rng) {
73
+ const diceResult = rollDice(table.dice, rng);
74
+ let roll = diceResult.total;
75
+ // Add ability modifier if specified
76
+ if (table.addAbility && abilities[table.addAbility] !== undefined) {
77
+ roll += abilities[table.addAbility];
78
+ }
79
+ // Find matching entry
80
+ const entry = table.entries.find((e) => roll >= e.range[0] && roll <= e.range[1]);
81
+ if (!entry) {
82
+ return undefined;
83
+ }
84
+ return { roll, entry };
85
+ }
86
+ /**
87
+ * Resolve a custom test
88
+ */
89
+ export function resolveCustomTest(options) {
90
+ const { test, abilities, rng, ctx, modifiers = 0 } = options;
91
+ const { roll: rollConfig } = test;
92
+ // Roll the dice
93
+ const diceResult = rollDice(rollConfig.dice, rng);
94
+ const natural = diceResult.total;
95
+ // Calculate modifier from ability
96
+ let abilityMod = 0;
97
+ if (rollConfig.ability) {
98
+ abilityMod = abilities[rollConfig.ability] ?? 0;
99
+ }
100
+ const totalMod = abilityMod + modifiers;
101
+ const total = natural + totalMod;
102
+ // Calculate target
103
+ const target = calculateDifficulty(test, abilities);
104
+ // Check for criticals
105
+ const isCritSuccess = checkCriticalSuccess(ctx, natural);
106
+ const isCritFail = checkCriticalFailure(ctx, natural);
107
+ const isCritical = isCritSuccess || isCritFail;
108
+ // Determine success
109
+ const success = determineSuccess(test, natural, total, target, isCritSuccess, isCritFail, ctx);
110
+ // Get the outcome
111
+ const outcome = getOutcome(test, success, isCritical);
112
+ // Collect effects
113
+ const effects = [];
114
+ // Table roll result
115
+ let tableRoll;
116
+ if (outcome) {
117
+ // Add direct effects
118
+ if (outcome.effects) {
119
+ effects.push(...outcome.effects);
120
+ }
121
+ // Roll on table if present
122
+ if (outcome.table) {
123
+ const tableResult = rollOnTable(outcome.table, abilities, rng);
124
+ if (tableResult) {
125
+ tableRoll = {
126
+ dice: outcome.table.dice,
127
+ roll: tableResult.roll,
128
+ entry: tableResult.entry,
129
+ };
130
+ if (tableResult.entry.effects) {
131
+ effects.push(...tableResult.entry.effects);
132
+ }
133
+ }
134
+ }
135
+ }
136
+ return {
137
+ testId: test.id,
138
+ roll: {
139
+ dice: rollConfig.dice,
140
+ natural,
141
+ modifier: totalMod,
142
+ total,
143
+ },
144
+ target,
145
+ success,
146
+ critical: isCritical,
147
+ outcome: outcome ?? { description: "No outcome defined" },
148
+ tableRoll,
149
+ effects,
150
+ };
151
+ }
152
+ /**
153
+ * Find a custom test by ID in rules context
154
+ */
155
+ export function findCustomTest(ctx, testId) {
156
+ return ctx.rules.customTestMap.get(testId);
157
+ }
158
+ /**
159
+ * Find custom tests that match a trigger
160
+ */
161
+ export function findCustomTestsByTrigger(ctx, trigger) {
162
+ return ctx.rules.customTests.filter((t) => t.triggers.includes(trigger));
163
+ }
164
+ //# sourceMappingURL=custom-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"custom-test.js","sourceRoot":"","sources":["../../src/rules/custom-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Rules module exports
3
+ */
4
+ export * from "./context.js";
5
+ export * from "./custom-test.js";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Rules module exports
3
+ */
4
+ export * from "./context.js";
5
+ export * from "./custom-test.js";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/rules/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,cAAc,cAAc,CAAC;AAC7B,cAAc,kBAAkB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@mythxengine/engine",
3
+ "version": "0.1.0",
4
+ "description": "Pure game mechanics engine for MythX RPG (dice, combat, RNG)",
5
+ "type": "module",
6
+ "exports": {
7
+ ".": {
8
+ "types": "./dist/index.d.ts",
9
+ "import": "./dist/index.js"
10
+ }
11
+ },
12
+ "files": [
13
+ "dist"
14
+ ],
15
+ "keywords": [
16
+ "rpg",
17
+ "tabletop",
18
+ "dice",
19
+ "combat",
20
+ "game-engine"
21
+ ],
22
+ "author": "Proto Labs AI",
23
+ "license": "MIT",
24
+ "repository": {
25
+ "type": "git",
26
+ "url": "git+https://github.com/proto-labs-ai/rpg-claude-plugin.git",
27
+ "directory": "packages/engine"
28
+ },
29
+ "bugs": {
30
+ "url": "https://github.com/proto-labs-ai/rpg-claude-plugin/issues"
31
+ },
32
+ "homepage": "https://github.com/proto-labs-ai/rpg-claude-plugin#readme",
33
+ "dependencies": {
34
+ "@mythxengine/types": "0.1.0"
35
+ },
36
+ "devDependencies": {
37
+ "typescript": "^5.7.0",
38
+ "vitest": "^2.1.0"
39
+ },
40
+ "scripts": {
41
+ "build": "tsc",
42
+ "dev": "tsc --watch",
43
+ "test": "vitest run",
44
+ "test:watch": "vitest",
45
+ "clean": "rm -rf dist"
46
+ }
47
+ }