@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.
- package/LICENSE +21 -0
- package/dist/__tests__/advantage.test.d.ts +5 -0
- package/dist/__tests__/advantage.test.d.ts.map +1 -0
- package/dist/__tests__/advantage.test.js +126 -0
- package/dist/__tests__/advantage.test.js.map +1 -0
- package/dist/__tests__/dice.test.d.ts +2 -0
- package/dist/__tests__/dice.test.d.ts.map +1 -0
- package/dist/__tests__/dice.test.js +150 -0
- package/dist/__tests__/dice.test.js.map +1 -0
- package/dist/__tests__/resolution.test.d.ts +5 -0
- package/dist/__tests__/resolution.test.d.ts.map +1 -0
- package/dist/__tests__/resolution.test.js +362 -0
- package/dist/__tests__/resolution.test.js.map +1 -0
- package/dist/__tests__/rng.test.d.ts +2 -0
- package/dist/__tests__/rng.test.d.ts.map +1 -0
- package/dist/__tests__/rng.test.js +93 -0
- package/dist/__tests__/rng.test.js.map +1 -0
- package/dist/dice/advantage.d.ts +45 -0
- package/dist/dice/advantage.d.ts.map +1 -0
- package/dist/dice/advantage.js +118 -0
- package/dist/dice/advantage.js.map +1 -0
- package/dist/dice/index.d.ts +7 -0
- package/dist/dice/index.d.ts.map +1 -0
- package/dist/dice/index.js +7 -0
- package/dist/dice/index.js.map +1 -0
- package/dist/dice/parser.d.ts +21 -0
- package/dist/dice/parser.d.ts.map +1 -0
- package/dist/dice/parser.js +61 -0
- package/dist/dice/parser.js.map +1 -0
- package/dist/dice/roller.d.ts +23 -0
- package/dist/dice/roller.d.ts.map +1 -0
- package/dist/dice/roller.js +62 -0
- package/dist/dice/roller.js.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/resolution/combat.d.ts +39 -0
- package/dist/resolution/combat.d.ts.map +1 -0
- package/dist/resolution/combat.js +214 -0
- package/dist/resolution/combat.js.map +1 -0
- package/dist/resolution/damage.d.ts +27 -0
- package/dist/resolution/damage.d.ts.map +1 -0
- package/dist/resolution/damage.js +44 -0
- package/dist/resolution/damage.js.map +1 -0
- package/dist/resolution/index.d.ts +8 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +8 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/initiative.d.ts +19 -0
- package/dist/resolution/initiative.d.ts.map +1 -0
- package/dist/resolution/initiative.js +55 -0
- package/dist/resolution/initiative.js.map +1 -0
- package/dist/resolution/test.d.ts +34 -0
- package/dist/resolution/test.d.ts.map +1 -0
- package/dist/resolution/test.js +143 -0
- package/dist/resolution/test.js.map +1 -0
- package/dist/rng/index.d.ts +6 -0
- package/dist/rng/index.d.ts.map +1 -0
- package/dist/rng/index.js +6 -0
- package/dist/rng/index.js.map +1 -0
- package/dist/rng/mulberry32.d.ts +13 -0
- package/dist/rng/mulberry32.d.ts.map +1 -0
- package/dist/rng/mulberry32.js +23 -0
- package/dist/rng/mulberry32.js.map +1 -0
- package/dist/rng/rng.d.ts +26 -0
- package/dist/rng/rng.d.ts.map +1 -0
- package/dist/rng/rng.js +51 -0
- package/dist/rng/rng.js.map +1 -0
- package/dist/rules/context.d.ts +86 -0
- package/dist/rules/context.d.ts.map +1 -0
- package/dist/rules/context.js +137 -0
- package/dist/rules/context.js.map +1 -0
- package/dist/rules/custom-test.d.ts +33 -0
- package/dist/rules/custom-test.d.ts.map +1 -0
- package/dist/rules/custom-test.js +164 -0
- package/dist/rules/custom-test.js.map +1 -0
- package/dist/rules/index.d.ts +6 -0
- package/dist/rules/index.d.ts.map +1 -0
- package/dist/rules/index.js +6 -0
- package/dist/rules/index.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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
|
+
}
|