Sign In

@mythxengine/engine

Package Overview
Dependencies
Maintainers
1
Versions
3
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@mythxengine/engine - npm Package Compare versions

Comparing version
0.1.1
to
0.1.3
+5
dist/__tests__/outcome.test.d.ts
/**
* Tests for three-tier outcome resolution
*/
export {};
//# sourceMappingURL=outcome.test.d.ts.map
{"version":3,"file":"outcome.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/outcome.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
/**
* Tests for three-tier outcome resolution
*/
import { describe, it, expect } from "vitest";
import { determineOutcome, isSuccess, isFailure, isPartial, isCritical, toLegacySuccess, fromLegacySuccess, getGMMoves, } from "../resolution/outcome.js";
import { BASE_OUTCOME_THRESHOLDS, BASE_CRITICALS } from "@mythxengine/types";
describe("determineOutcome", () => {
describe("basic outcomes", () => {
it("returns critical_success for margin >= 10", () => {
const result = determineOutcome({
margin: 10,
natural: 15,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
});
expect(result).toBe("critical_success");
});
it("returns critical_success for nat 20", () => {
const result = determineOutcome({
margin: 0,
natural: 20,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
});
expect(result).toBe("critical_success");
});
it("returns success for margin >= 0", () => {
const result = determineOutcome({
margin: 0,
natural: 12,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
});
expect(result).toBe("success");
});
it("returns success for margin = 5", () => {
const result = determineOutcome({
margin: 5,
natural: 15,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
});
expect(result).toBe("success");
});
it("returns partial for margin -1 to -4", () => {
expect(determineOutcome({
margin: -1,
natural: 10,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
})).toBe("partial");
expect(determineOutcome({
margin: -4,
natural: 8,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
})).toBe("partial");
});
it("returns failure for margin < -4", () => {
const result = determineOutcome({
margin: -5,
natural: 7,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
});
expect(result).toBe("failure");
});
it("returns critical_failure for nat 1", () => {
const result = determineOutcome({
margin: 5, // Would be success, but nat 1 overrides
natural: 1,
thresholds: BASE_OUTCOME_THRESHOLDS,
criticals: BASE_CRITICALS,
});
expect(result).toBe("critical_failure");
});
});
describe("custom thresholds", () => {
it("respects custom critical success threshold", () => {
const result = determineOutcome({
margin: 6,
natural: 15,
thresholds: { ...BASE_OUTCOME_THRESHOLDS, criticalSuccess: 5 },
criticals: BASE_CRITICALS,
});
expect(result).toBe("critical_success");
});
it("respects custom partial threshold", () => {
// With partial at -2, margin -3 would be failure
const result = determineOutcome({
margin: -3,
natural: 8,
thresholds: { ...BASE_OUTCOME_THRESHOLDS, partial: -2 },
criticals: BASE_CRITICALS,
});
expect(result).toBe("failure");
});
});
});
describe("outcome helper functions", () => {
it("isSuccess returns true for success and critical_success", () => {
expect(isSuccess("critical_success")).toBe(true);
expect(isSuccess("success")).toBe(true);
expect(isSuccess("partial")).toBe(false);
expect(isSuccess("failure")).toBe(false);
expect(isSuccess("critical_failure")).toBe(false);
});
it("isFailure returns true for failure and critical_failure", () => {
expect(isFailure("critical_failure")).toBe(true);
expect(isFailure("failure")).toBe(true);
expect(isFailure("partial")).toBe(false);
expect(isFailure("success")).toBe(false);
expect(isFailure("critical_success")).toBe(false);
});
it("isPartial returns true only for partial", () => {
expect(isPartial("partial")).toBe(true);
expect(isPartial("success")).toBe(false);
expect(isPartial("failure")).toBe(false);
});
it("isCritical returns true for critical outcomes", () => {
expect(isCritical("critical_success")).toBe(true);
expect(isCritical("critical_failure")).toBe(true);
expect(isCritical("success")).toBe(false);
expect(isCritical("partial")).toBe(false);
expect(isCritical("failure")).toBe(false);
});
});
describe("toLegacySuccess", () => {
it("returns true for success outcomes including partial", () => {
expect(toLegacySuccess("critical_success")).toBe(true);
expect(toLegacySuccess("success")).toBe(true);
expect(toLegacySuccess("partial")).toBe(true);
expect(toLegacySuccess("failure")).toBe(false);
expect(toLegacySuccess("critical_failure")).toBe(false);
});
});
describe("fromLegacySuccess", () => {
it("converts true with high margin to critical_success", () => {
const result = fromLegacySuccess(true, 12, 18);
expect(result).toBe("critical_success");
});
it("converts true with normal margin to success", () => {
const result = fromLegacySuccess(true, 3, 15);
expect(result).toBe("success");
});
it("converts false with partial margin to partial", () => {
const result = fromLegacySuccess(false, -2, 10);
expect(result).toBe("partial");
});
it("converts false with low margin to failure", () => {
const result = fromLegacySuccess(false, -8, 5);
expect(result).toBe("failure");
});
it("converts nat 1 to critical_failure", () => {
const result = fromLegacySuccess(false, -5, 1);
expect(result).toBe("critical_failure");
});
it("converts nat 20 to critical_success", () => {
const result = fromLegacySuccess(true, 5, 20);
expect(result).toBe("critical_success");
});
});
describe("getGMMoves", () => {
it("returns empty array for success", () => {
const moves = getGMMoves("success", "risky");
expect(moves).toEqual([]);
});
it("returns empty array for critical_success", () => {
const moves = getGMMoves("critical_success", "desperate");
expect(moves).toEqual([]);
});
it("returns moves for partial with risky position", () => {
const moves = getGMMoves("partial", "risky");
expect(moves.length).toBeGreaterThan(0);
expect(moves).toContain("offer_hard_bargain");
});
it("returns harder moves for failure with desperate position", () => {
const moves = getGMMoves("failure", "desperate");
expect(moves.length).toBeGreaterThan(0);
expect(moves).toContain("inflict_harm");
});
it("returns soft moves for failure with controlled position", () => {
const moves = getGMMoves("failure", "controlled");
expect(moves).toContain("reveal_unwelcome_truth");
expect(moves).not.toContain("inflict_harm");
});
});
//# sourceMappingURL=outcome.test.js.map
{"version":3,"file":"outcome.test.js","sourceRoot":"","sources":["../../src/__tests__/outcome.test.ts"],"names":[],"mappings":"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"}
/**
* Tests for stress mechanics: push, resist, recover
*/
export {};
//# sourceMappingURL=stress.test.d.ts.map
{"version":3,"file":"stress.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/stress.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
/**
* Tests for stress mechanics: push, resist, recover
*/
import { describe, it, expect } from "vitest";
import { pushRoll, resistConsequence, recoverStress, flashback, isTraumaRisk, } from "../resolution/stress.js";
import { createRNG } from "../rng/index.js";
// Test character factory
function createTestCharacter(overrides = {}) {
return {
id: "test-char",
name: "Test Character",
abilities: { STR: 2, AGI: 1, WIT: 0, CON: 1 },
hp: { current: 20, max: 20 },
stress: { current: 0, max: 9 },
trauma: [],
skills: [],
specialAbilities: [],
conditions: [],
flags: [],
background: "Test background",
personality: [],
psychology: { fears: [], goals: [], ambitions: [], bonds: [], flaws: [] },
archetypeId: "test",
equipment: { weapons: [], armor: null, gear: [] },
...overrides,
};
}
describe("pushRoll", () => {
it("adds bonus and costs stress", () => {
const rng = createRNG(42);
const result = pushRoll({
rng,
currentStress: 0,
maxStress: 9,
});
expect(result.bonus).toBeGreaterThanOrEqual(1);
expect(result.bonus).toBeLessThanOrEqual(6);
expect(result.stressCost).toBe(2);
expect(result.newStress).toBe(2);
expect(result.traumaTriggered).toBe(false);
});
it("triggers trauma when stress exceeds max", () => {
const rng = createRNG(42);
const result = pushRoll({
rng,
currentStress: 8,
maxStress: 9,
});
expect(result.traumaTriggered).toBe(true);
expect(result.stressOverflow).toBeGreaterThan(0);
expect(result.newStress).toBe(9); // Capped at max
});
it("uses custom push cost if provided", () => {
const rng = createRNG(42);
const result = pushRoll({
rng,
currentStress: 0,
maxStress: 9,
pushCost: 3,
});
expect(result.stressCost).toBe(3);
expect(result.newStress).toBe(3);
});
it("returns consistent bonus from same seed", () => {
const result1 = pushRoll({
rng: createRNG(42),
currentStress: 0,
maxStress: 9,
});
const result2 = pushRoll({
rng: createRNG(42),
currentStress: 0,
maxStress: 9,
});
expect(result1.bonus).toBe(result2.bonus);
});
});
describe("resistConsequence", () => {
it("always reduces consequence", () => {
const character = createTestCharacter();
const rng = createRNG(42);
const result = resistConsequence({
character,
resistAbility: "STR",
rng,
});
expect(result.reduced).toBe(true);
});
it("rolls dice equal to ability modifier", () => {
const character = createTestCharacter({ abilities: { STR: 3, AGI: 1, WIT: 0, CON: 1 } });
const rng = createRNG(42);
// With STR 3, should roll 3d6 and take highest
const result = resistConsequence({
character,
resistAbility: "STR",
rng,
});
expect(result.resistRoll).toBeGreaterThanOrEqual(1);
expect(result.resistRoll).toBeLessThanOrEqual(6);
});
it("costs 0 stress on highest roll of 6", () => {
// Find a seed that rolls a 6
let result;
for (let seed = 1; seed < 1000; seed++) {
const character = createTestCharacter({ abilities: { STR: 3, AGI: 1, WIT: 0, CON: 1 } });
result = resistConsequence({
character,
resistAbility: "STR",
rng: createRNG(seed),
});
if (result.resistRoll === 6)
break;
}
expect(result.resistRoll).toBe(6);
expect(result.stressCost).toBe(0);
});
it("costs more stress on lower rolls", () => {
// Find a seed that rolls a 1
let result;
for (let seed = 1; seed < 10000; seed++) {
const character = createTestCharacter({ abilities: { STR: 1, AGI: 1, WIT: 0, CON: 1 } });
result = resistConsequence({
character,
resistAbility: "STR",
rng: createRNG(seed),
});
if (result.resistRoll === 1)
break;
}
expect(result.resistRoll).toBe(1);
expect(result.stressCost).toBe(3);
});
it("triggers trauma when stress exceeds max", () => {
const character = createTestCharacter({
stress: { current: 8, max: 9 },
});
// Find a seed that costs more than 1 stress
let result;
for (let seed = 1; seed < 1000; seed++) {
result = resistConsequence({
character: { ...character, stress: { current: 8, max: 9 } },
resistAbility: "STR",
rng: createRNG(seed),
});
if (result.stressCost >= 2)
break;
}
expect(result.traumaTriggered).toBe(true);
});
});
describe("recoverStress", () => {
it("recovers 2 stress on short rest", () => {
const character = createTestCharacter({
stress: { current: 5, max: 9 },
});
const result = recoverStress({
character,
restType: "short",
});
expect(result.recovered).toBe(2);
expect(result.newStress).toBe(3);
expect(result.previousStress).toBe(5);
});
it("recovers all stress on long rest", () => {
const character = createTestCharacter({
stress: { current: 7, max: 9 },
});
const result = recoverStress({
character,
restType: "long",
});
expect(result.recovered).toBe(7);
expect(result.newStress).toBe(0);
});
it("does not recover below 0", () => {
const character = createTestCharacter({
stress: { current: 1, max: 9 },
});
const result = recoverStress({
character,
restType: "short",
});
expect(result.recovered).toBe(1);
expect(result.newStress).toBe(0);
});
it("applies bonus recovery", () => {
const character = createTestCharacter({
stress: { current: 5, max: 9 },
});
const result = recoverStress({
character,
restType: "short",
bonuses: 2,
});
expect(result.recovered).toBe(4);
expect(result.newStress).toBe(1);
});
});
describe("flashback", () => {
it("costs 0 stress for complexity 0", () => {
const character = createTestCharacter();
const result = flashback({
character,
complexity: 0,
});
expect(result.stressCost).toBe(0);
expect(result.newStress).toBe(0);
});
it("costs stress equal to complexity", () => {
const character = createTestCharacter();
expect(flashback({ character, complexity: 1 }).stressCost).toBe(1);
expect(flashback({ character, complexity: 2 }).stressCost).toBe(2);
expect(flashback({ character, complexity: 3 }).stressCost).toBe(3);
});
it("triggers trauma if stress exceeds max", () => {
const character = createTestCharacter({
stress: { current: 8, max: 9 },
});
const result = flashback({
character,
complexity: 3,
});
expect(result.traumaTriggered).toBe(true);
expect(result.newStress).toBe(9); // Capped at max
});
it("provides guidance for complexity level", () => {
const character = createTestCharacter();
const result = flashback({
character,
complexity: 2,
});
expect(result.guidance).toBeDefined();
expect(result.guidance).toContain("Complex");
});
});
describe("isTraumaRisk", () => {
it("returns true when stress is near max", () => {
const character = createTestCharacter({
stress: { current: 7, max: 9 },
});
expect(isTraumaRisk(character)).toBe(true);
});
it("returns true when stress is at max", () => {
const character = createTestCharacter({
stress: { current: 9, max: 9 },
});
expect(isTraumaRisk(character)).toBe(true);
});
it("returns false when stress is low", () => {
const character = createTestCharacter({
stress: { current: 3, max: 9 },
});
expect(isTraumaRisk(character)).toBe(false);
});
});
//# sourceMappingURL=stress.test.js.map
{"version":3,"file":"stress.test.js","sourceRoot":"","sources":["../../src/__tests__/stress.test.ts"],"names":[],"mappings":"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"}
/**
* Outcome Resolution
*
* Pure functions for determining three-tier outcomes based on roll margins.
* Replaces binary success/failure with graduated results.
*/
import type { OutcomeType, Position, GMMove, OutcomeThresholds, CriticalsConfig } from "@mythxengine/types";
export interface DetermineOutcomeOptions {
/** The margin (total - difficulty) */
margin: number;
/** The natural roll (for critical detection) */
natural: number;
/** Outcome thresholds to use */
thresholds?: OutcomeThresholds;
/** Critical configuration to use */
criticals?: CriticalsConfig;
}
/**
* Determine the outcome type based on margin and natural roll
*
* Outcome hierarchy:
* - critical_success: nat 20 OR margin >= criticalSuccess threshold
* - success: margin >= success threshold (default 0)
* - partial: margin >= partial threshold (default -4)
* - failure: margin < partial threshold
* - critical_failure: nat 1 with autoFailure enabled
*/
export declare function determineOutcome(options: DetermineOutcomeOptions): OutcomeType;
/**
* Get appropriate GM moves for an outcome and position
*/
export declare function getGMMoves(outcome: OutcomeType, position: Position): GMMove[];
/**
* Get narrative guidance for an outcome and position
*/
export declare function getGMGuidance(outcome: OutcomeType, position: Position): string;
/**
* Check if an outcome represents any form of success
*/
export declare function isSuccess(outcome: OutcomeType): boolean;
/**
* Check if an outcome represents any form of failure
*/
export declare function isFailure(outcome: OutcomeType): boolean;
/**
* Check if an outcome represents a partial result
*/
export declare function isPartial(outcome: OutcomeType): boolean;
/**
* Check if an outcome is critical (either success or failure)
*/
export declare function isCritical(outcome: OutcomeType): boolean;
/**
* Get the "legacy" success boolean for backwards compatibility
* Partial counts as success (they achieve something, just with complications)
*/
export declare function toLegacySuccess(outcome: OutcomeType): boolean;
/**
* Convert from legacy success boolean to outcome
* Used for migration - assumes standard outcomes
*/
export declare function fromLegacySuccess(success: boolean, margin: number, natural: number, criticals?: CriticalsConfig): OutcomeType;
//# sourceMappingURL=outcome.d.ts.map
{"version":3,"file":"outcome.d.ts","sourceRoot":"","sources":["../../src/resolution/outcome.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,QAAQ,EACR,MAAM,EACN,iBAAiB,EACjB,eAAe,EAChB,MAAM,oBAAoB,CAAC;AAQ5B,MAAM,WAAW,uBAAuB;IACtC,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,gDAAgD;IAChD,OAAO,EAAE,MAAM,CAAC;IAChB,gCAAgC;IAChC,UAAU,CAAC,EAAE,iBAAiB,CAAC;IAC/B,oCAAoC;IACpC,SAAS,CAAC,EAAE,eAAe,CAAC;CAC7B;AAED;;;;;;;;;GASG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,uBAAuB,GAAG,WAAW,CAmC9E;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,EAAE,CAE7E;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,GAAG,MAAM,CAE9E;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAEvD;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAExD;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,WAAW,GAAG,OAAO,CAE7D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,SAAS,GAAE,eAAgC,GAC1C,WAAW,CAsBb"}
/**
* Outcome Resolution
*
* Pure functions for determining three-tier outcomes based on roll margins.
* Replaces binary success/failure with graduated results.
*/
import { getAppropriateMoves, getNarrativeGuidance, BASE_OUTCOME_THRESHOLDS, BASE_CRITICALS, } from "@mythxengine/types";
/**
* Determine the outcome type based on margin and natural roll
*
* Outcome hierarchy:
* - critical_success: nat 20 OR margin >= criticalSuccess threshold
* - success: margin >= success threshold (default 0)
* - partial: margin >= partial threshold (default -4)
* - failure: margin < partial threshold
* - critical_failure: nat 1 with autoFailure enabled
*/
export function determineOutcome(options) {
const { margin, natural, thresholds = BASE_OUTCOME_THRESHOLDS, criticals = BASE_CRITICALS, } = options;
// Check for critical failure first (nat 1)
if (criticals.failureOn.includes(natural) && criticals.autoFailure) {
return "critical_failure";
}
// Check for critical success (nat 20 or high margin)
if (criticals.successOn.includes(natural) && criticals.autoSuccess) {
return "critical_success";
}
// Margin-based critical success (even without nat 20)
if (margin >= thresholds.criticalSuccess) {
return "critical_success";
}
// Standard success
if (margin >= thresholds.success) {
return "success";
}
// Partial success (close but not quite)
if (margin >= thresholds.partial) {
return "partial";
}
// Failure
return "failure";
}
/**
* Get appropriate GM moves for an outcome and position
*/
export function getGMMoves(outcome, position) {
return getAppropriateMoves(outcome, position);
}
/**
* Get narrative guidance for an outcome and position
*/
export function getGMGuidance(outcome, position) {
return getNarrativeGuidance(outcome, position);
}
/**
* Check if an outcome represents any form of success
*/
export function isSuccess(outcome) {
return outcome === "critical_success" || outcome === "success";
}
/**
* Check if an outcome represents any form of failure
*/
export function isFailure(outcome) {
return outcome === "critical_failure" || outcome === "failure";
}
/**
* Check if an outcome represents a partial result
*/
export function isPartial(outcome) {
return outcome === "partial";
}
/**
* Check if an outcome is critical (either success or failure)
*/
export function isCritical(outcome) {
return outcome === "critical_success" || outcome === "critical_failure";
}
/**
* Get the "legacy" success boolean for backwards compatibility
* Partial counts as success (they achieve something, just with complications)
*/
export function toLegacySuccess(outcome) {
return outcome === "critical_success" || outcome === "success" || outcome === "partial";
}
/**
* Convert from legacy success boolean to outcome
* Used for migration - assumes standard outcomes
*/
export function fromLegacySuccess(success, margin, natural, criticals = BASE_CRITICALS) {
// Check criticals first
if (criticals.failureOn.includes(natural) && criticals.autoFailure) {
return "critical_failure";
}
if (criticals.successOn.includes(natural) && criticals.autoSuccess) {
return "critical_success";
}
if (success) {
if (margin >= BASE_OUTCOME_THRESHOLDS.criticalSuccess) {
return "critical_success";
}
return "success";
}
// Check if it would be partial
if (margin >= BASE_OUTCOME_THRESHOLDS.partial) {
return "partial";
}
return "failure";
}
//# sourceMappingURL=outcome.js.map
{"version":3,"file":"outcome.js","sourceRoot":"","sources":["../../src/resolution/outcome.ts"],"names":[],"mappings":"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"}
/**
* Stress Resolution
*
* Pure functions for stress mechanics: push rolls, resist consequences, recover stress.
* Inspired by Forged in the Dark systems.
*/
import type { Character, AbilityName, StressConfig } from "@mythxengine/types";
import type { RNG } from "../rng/rng.js";
import type { RulesContext } from "../rules/context.js";
export interface PushRollOptions {
/** RNG for rolling the push bonus */
rng: RNG;
/** Current stress level */
currentStress: number;
/** Maximum stress capacity */
maxStress: number;
/** Optional custom push cost (default from stress config) */
pushCost?: number;
/** Optional custom push bonus dice (default from stress config) */
pushBonus?: string;
/** Rules context for stress configuration */
rules?: RulesContext;
}
export interface PushRollResult {
/** The bonus to add to the roll */
bonus: number;
/** The dice expression used */
bonusDice: string;
/** New stress level after pushing */
newStress: number;
/** Stress cost incurred */
stressCost: number;
/** Whether trauma was triggered (stress exceeded max) */
traumaTriggered: boolean;
/** Stress overflow (amount over max, triggers trauma) */
stressOverflow: number;
}
/**
* Push a roll by spending stress for a bonus
*
* @returns The bonus to add and the new stress state
*/
export declare function pushRoll(options: PushRollOptions): PushRollResult;
export interface ResistConsequenceOptions {
/** The character resisting */
character: Character;
/** The ability used to resist */
resistAbility: AbilityName;
/** RNG for the resistance roll */
rng: RNG;
/** Rules context */
rules?: RulesContext;
}
export interface ResistConsequenceResult {
/** Whether the consequence was reduced/avoided */
reduced: boolean;
/** The resistance roll total */
resistRoll: number;
/** Stress cost incurred */
stressCost: number;
/** New stress level */
newStress: number;
/** Whether trauma was triggered */
traumaTriggered: boolean;
}
/**
* Resist a consequence by rolling an ability and taking stress
*
* Roll 1d6 per point of ability. Highest die determines stress cost.
* 6 = 0 stress, 5-4 = 1 stress, 3-2 = 2 stress, 1 = 3 stress
*/
export declare function resistConsequence(options: ResistConsequenceOptions): ResistConsequenceResult;
export interface RecoverStressOptions {
/** The character recovering */
character: Character;
/** Type of rest */
restType: "short" | "long";
/** Optional bonus recovery (from abilities, circumstances) */
bonuses?: number;
/** Rules context */
rules?: RulesContext;
}
export interface RecoverStressResult {
/** Amount of stress recovered */
recovered: number;
/** New stress level */
newStress: number;
/** Previous stress level */
previousStress: number;
}
/**
* Recover stress through rest
*/
export declare function recoverStress(options: RecoverStressOptions): RecoverStressResult;
export interface FlashbackOptions {
/** The character having the flashback */
character: Character;
/** Complexity of the flashback (0-3) */
complexity: 0 | 1 | 2 | 3;
/** Rules context */
rules?: RulesContext;
}
export interface FlashbackResult {
/** Stress cost for the flashback */
stressCost: number;
/** New stress level */
newStress: number;
/** Whether trauma was triggered */
traumaTriggered: boolean;
/** Description of what the flashback can establish */
guidance: string;
}
/**
* Establish a flashback for retroactive preparation
*
* Stress cost scales with complexity:
* - 0: Free, simple/obvious preparation
* - 1: 1 stress, reasonable preparation
* - 2: 2 stress, complex preparation
* - 3: 3+ stress, elaborate preparation (may require roll)
*/
export declare function flashback(options: FlashbackOptions): FlashbackResult;
/**
* Result of applying trauma when stress exceeds max.
*
* Note: `trauma` is intentionally an empty string. The engine only handles
* the mechanical reset (stress -> 0). Actual trauma content must be provided
* by the GM or external narrative tools based on the circumstances that
* caused the trauma.
*/
export interface TraumaResult {
/** New trauma gained (empty - GM/tool provides narrative content) */
trauma: string;
/** Stress reset to 0 after trauma */
newStress: number;
}
/**
* Apply trauma when stress exceeds maximum.
*
* This function handles only the mechanical reset (stress -> 0).
* The actual trauma description must be narratively determined by the GM
* based on circumstances. The empty string for `trauma` is intentional -
* do not auto-generate trauma content here.
*
* @param _stressOverflow - Amount of stress over max. Available for future
* severity scaling (e.g., higher overflow = worse trauma) but currently unused.
*/
export declare function applyTrauma(_stressOverflow: number): TraumaResult;
/**
* Check if a character is at risk of trauma
*/
export declare function isTraumaRisk(character: Character): boolean;
/**
* Get stress config from rules context
*/
export declare function getStressConfig(rules?: RulesContext): StressConfig;
//# sourceMappingURL=stress.d.ts.map
{"version":3,"file":"stress.d.ts","sourceRoot":"","sources":["../../src/resolution/stress.ts"],"names":[],"mappings":"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"}
/**
* Stress Resolution
*
* Pure functions for stress mechanics: push rolls, resist consequences, recover stress.
* Inspired by Forged in the Dark systems.
*/
import { BASE_STRESS } from "@mythxengine/types";
import { rollDice } from "../dice/roller.js";
import { getDefaultRulesContext } from "../rules/context.js";
/**
* Push a roll by spending stress for a bonus
*
* @returns The bonus to add and the new stress state
*/
export function pushRoll(options) {
const { rng, currentStress, maxStress, rules = getDefaultRulesContext(), } = options;
const stressConfig = rules.rules.mechanics.stress;
const pushCost = options.pushCost ?? stressConfig.pushCost;
const pushBonus = options.pushBonus ?? stressConfig.pushBonus;
// Roll the push bonus
const bonusRoll = rollDice(pushBonus, rng);
const bonus = bonusRoll.total;
// Calculate new stress
const newStress = currentStress + pushCost;
const traumaTriggered = newStress > maxStress;
const stressOverflow = Math.max(0, newStress - maxStress);
return {
bonus,
bonusDice: pushBonus,
newStress: Math.min(newStress, maxStress),
stressCost: pushCost,
traumaTriggered,
stressOverflow,
};
}
/**
* Resist a consequence by rolling an ability and taking stress
*
* Roll 1d6 per point of ability. Highest die determines stress cost.
* 6 = 0 stress, 5-4 = 1 stress, 3-2 = 2 stress, 1 = 3 stress
*/
export function resistConsequence(options) {
const { character, resistAbility, rng, rules = getDefaultRulesContext(), } = options;
const abilityMod = character.abilities[resistAbility];
const stressConfig = rules.rules.mechanics.stress;
// Roll dice equal to ability modifier (minimum 1)
const diceCount = Math.max(1, abilityMod);
const rolls = [];
for (let i = 0; i < diceCount; i++) {
rolls.push(rng.nextInt(1, 6));
}
// Take highest roll
const highest = Math.max(...rolls);
// Determine stress cost based on highest die
let stressCost;
if (highest === 6) {
stressCost = 0;
}
else if (highest >= 4) {
stressCost = stressConfig.resistCost;
}
else if (highest >= 2) {
stressCost = stressConfig.resistCost * 2;
}
else {
stressCost = stressConfig.resistCost * 3;
}
const newStress = character.stress.current + stressCost;
const traumaTriggered = newStress > character.stress.max;
return {
reduced: true, // Resistance always reduces the consequence to some degree
resistRoll: highest,
stressCost,
newStress: Math.min(newStress, character.stress.max),
traumaTriggered,
};
}
/**
* Recover stress through rest
*/
export function recoverStress(options) {
const { character, restType, bonuses = 0, rules = getDefaultRulesContext(), } = options;
const stressConfig = rules.rules.mechanics.stress;
const previousStress = character.stress.current;
let baseRecovery;
if (restType === "long") {
// Long rest: recover all or configured amount
baseRecovery = stressConfig.recoveryPerLongRest === "all"
? previousStress
: stressConfig.recoveryPerLongRest;
}
else {
// Short rest: recover configured amount
baseRecovery = stressConfig.recoveryPerShortRest;
}
const totalRecovery = baseRecovery + bonuses;
const recovered = Math.min(totalRecovery, previousStress);
const newStress = previousStress - recovered;
return {
recovered,
newStress,
previousStress,
};
}
/**
* Establish a flashback for retroactive preparation
*
* Stress cost scales with complexity:
* - 0: Free, simple/obvious preparation
* - 1: 1 stress, reasonable preparation
* - 2: 2 stress, complex preparation
* - 3: 3+ stress, elaborate preparation (may require roll)
*/
export function flashback(options) {
const { character, complexity } = options;
// Rules context reserved for future use (e.g., custom flashback costs per world)
const stressCost = complexity;
const newStress = character.stress.current + stressCost;
const traumaTriggered = newStress > character.stress.max;
const guidanceMap = {
0: "Simple preparation that any competent character would do. No cost.",
1: "Reasonable preparation requiring some forethought. Brief scene.",
2: "Complex preparation requiring specific knowledge or resources. Full scene.",
3: "Elaborate preparation that pushes believability. May require a roll to see if it works.",
};
return {
stressCost,
newStress: Math.min(newStress, character.stress.max),
traumaTriggered,
guidance: guidanceMap[complexity],
};
}
/**
* Apply trauma when stress exceeds maximum.
*
* This function handles only the mechanical reset (stress -> 0).
* The actual trauma description must be narratively determined by the GM
* based on circumstances. The empty string for `trauma` is intentional -
* do not auto-generate trauma content here.
*
* @param _stressOverflow - Amount of stress over max. Available for future
* severity scaling (e.g., higher overflow = worse trauma) but currently unused.
*/
export function applyTrauma(_stressOverflow) {
return {
trauma: "", // Intentionally empty - GM/narrator provides trauma text
newStress: 0,
};
}
/**
* Check if a character is at risk of trauma
*/
export function isTraumaRisk(character) {
return character.stress.current >= character.stress.max - 2;
}
/**
* Get stress config from rules context
*/
export function getStressConfig(rules) {
if (!rules) {
return BASE_STRESS;
}
return rules.rules.mechanics.stress;
}
//# sourceMappingURL=stress.js.map
{"version":3,"file":"stress.js","sourceRoot":"","sources":["../../src/resolution/stress.ts"],"names":[],"mappings":"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"}
+2
-0

@@ -15,2 +15,4 @@ /**

hp: { current: 20, max: 20 },
stress: { current: 0, max: 9 },
trauma: [],
skills: [

@@ -17,0 +19,0 @@ { id: "combat", name: "Combat", ability: "STR", bonus: 2, description: "Fighting" },

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"file":"resolution.test.js","sourceRoot":"","sources":["../../src/__tests__/resolution.test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"resolution.test.js","sourceRoot":"","sources":["../../src/__tests__/resolution.test.ts"],"names":[],"mappings":"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"}
/**
* Combat resolution
*/
import type { Character, Enemy, Weapon, Modifier, AttackResult } from "@mythxengine/types";
import type { Character, Enemy, Weapon, Modifier, AttackResult, Position } from "@mythxengine/types";
import type { RNG } from "../rng/rng.js";

@@ -21,2 +21,4 @@ import type { RulesContext } from "../rules/context.js";

rules?: RulesContext;
/** Attacker's position for consequence interpretation (default: "risky") */
attackerPosition?: Position;
}

@@ -23,0 +25,0 @@ /**

@@ -1,1 +0,1 @@

{"version":3,"file":"combat.d.ts","sourceRoot":"","sources":["../../src/resolution/combat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EAGb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAUxD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA2ID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CA6GlE"}
{"version":3,"file":"combat.d.ts","sourceRoot":"","sources":["../../src/resolution/combat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,KAAK,EACL,MAAM,EACN,QAAQ,EACR,YAAY,EAGZ,QAAQ,EACT,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAGzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAWxD,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,QAAQ,EAAE,SAAS,GAAG,KAAK,CAAC;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,mEAAmE;IACnE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,qEAAqE;IACrE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oDAAoD;IACpD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,4EAA4E;IAC5E,gBAAgB,CAAC,EAAE,QAAQ,CAAC;CAC7B;AA2ID;;;;;;;;;;;;;;;GAeG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,aAAa,GAAG,YAAY,CAsIlE"}

@@ -7,2 +7,3 @@ /**

import { getDefaultRulesContext, checkCriticalSuccess, checkCriticalFailure, calculateDefenseTarget, getResistanceMultiplier, getVulnerabilityMultiplier, } from "../rules/context.js";
import { determineOutcome, toLegacySuccess } from "./outcome.js";
/**

@@ -137,3 +138,3 @@ * Check if combatant is a Character (not an Enemy)

export function resolveAttack(options) {
const { attacker, defender, weapon, modifiers = [], rng, advantageSources = [], disadvantageSources = [], damageType = "physical", rules = getDefaultRulesContext(), } = options;
const { attacker, defender, weapon, modifiers = [], rng, advantageSources = [], disadvantageSources = [], damageType = "physical", rules = getDefaultRulesContext(), attackerPosition = "risky", } = options;
// Determine attack ability

@@ -171,7 +172,15 @@ const attackAbility = weapon.ability ?? "STR";

const criticalMiss = checkCriticalFailure(rules, attackRoll.natural);
// Determine hit (respects autoSuccess/autoFailure from rules)
const { criticals } = rules.rules.mechanics;
const autoHit = criticalHit && criticals.autoSuccess;
const autoMiss = criticalMiss && criticals.autoFailure;
const hit = autoHit || (!autoMiss && attackTotal >= defenseTarget);
// Calculate attack margin
const attackMargin = attackTotal - defenseTarget;
// Determine outcome using three-tier system
const { criticals, outcomeThresholds } = rules.rules.mechanics;
const outcome = determineOutcome({
margin: attackMargin,
natural: attackRoll.natural,
thresholds: outcomeThresholds,
criticals,
});
// Legacy hit: partial counts as hit (graze)
const hit = toLegacySuccess(outcome);
// Handle miss outcomes
if (!hit) {

@@ -183,2 +192,4 @@ return {

advantageState,
outcome,
position: attackerPosition,
};

@@ -191,7 +202,14 @@ }

const critMultiplier = criticalHit ? criticals.damageMultiplier : 1;
let finalDamage = Math.floor(damageResult.damage * critMultiplier);
let fullDamage = Math.floor(damageResult.damage * critMultiplier);
// Apply resistance/vulnerability using rules context for default multipliers
const damageMultiplierInfo = getDamageMultiplier(defender, damageType, rules);
const originalDamage = finalDamage;
finalDamage = Math.floor(finalDamage * damageMultiplierInfo.multiplier);
const originalDamage = fullDamage;
fullDamage = Math.floor(fullDamage * damageMultiplierInfo.multiplier);
// Handle graze damage for partial hits (50% of full damage)
let finalDamage = fullDamage;
let grazeDamage;
if (outcome === "partial") {
grazeDamage = Math.floor(fullDamage * 0.5);
finalDamage = grazeDamage;
}
// Build damage modification info if applicable

@@ -202,3 +220,3 @@ let damageModification;

originalDamage,
finalDamage,
finalDamage: fullDamage, // Report full damage before graze reduction
reason: damageMultiplierInfo.reason,

@@ -218,4 +236,7 @@ damageType,

damageModification,
outcome,
grazeDamage,
position: attackerPosition,
};
}
//# sourceMappingURL=combat.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"combat.js","sourceRoot":"","sources":["../../src/resolution/combat.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"combat.js","sourceRoot":"","sources":["../../src/resolution/combat.ts"],"names":[],"mappings":"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"}

@@ -8,2 +8,4 @@ /**

export { rollInitiative, rollInitiativeDetailed } from "./initiative.js";
export { determineOutcome, getGMMoves, getGMGuidance, isSuccess, isFailure, isPartial, isCritical, toLegacySuccess, fromLegacySuccess, type DetermineOutcomeOptions, } from "./outcome.js";
export { pushRoll, resistConsequence, recoverStress, flashback, applyTrauma, isTraumaRisk, getStressConfig, type PushRollOptions, type PushRollResult, type ResistConsequenceOptions, type ResistConsequenceResult, type RecoverStressOptions, type RecoverStressResult, type FlashbackOptions, type FlashbackResult, type TraumaResult, } from "./stress.js";
//# sourceMappingURL=index.d.ts.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolution/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/resolution/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAE,KAAK,WAAW,EAAE,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,YAAY,EAAE,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzE,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,eAAe,EACf,iBAAiB,EACjB,KAAK,uBAAuB,GAC7B,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,wBAAwB,EAC7B,KAAK,uBAAuB,EAC5B,KAAK,oBAAoB,EACzB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,YAAY,GAClB,MAAM,aAAa,CAAC"}

@@ -8,2 +8,6 @@ /**

export { rollInitiative, rollInitiativeDetailed } from "./initiative.js";
// Outcome resolution
export { determineOutcome, getGMMoves, getGMGuidance, isSuccess, isFailure, isPartial, isCritical, toLegacySuccess, fromLegacySuccess, } from "./outcome.js";
// Stress mechanics
export { pushRoll, resistConsequence, recoverStress, flashback, applyTrauma, isTraumaRisk, getStressConfig, } from "./stress.js";
//# sourceMappingURL=index.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolution/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC"}
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/resolution/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,WAAW,EAAoB,MAAM,WAAW,CAAC;AAC1D,OAAO,EAAE,aAAa,EAAsB,MAAM,aAAa,CAAC;AAChE,OAAO,EAAE,eAAe,EAAE,gBAAgB,EAAqB,MAAM,aAAa,CAAC;AACnF,OAAO,EAAE,cAAc,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzE,qBAAqB;AACrB,OAAO,EACL,gBAAgB,EAChB,UAAU,EACV,aAAa,EACb,SAAS,EACT,SAAS,EACT,SAAS,EACT,UAAU,EACV,eAAe,EACf,iBAAiB,GAElB,MAAM,cAAc,CAAC;AAEtB,mBAAmB;AACnB,OAAO,EACL,QAAQ,EACR,iBAAiB,EACjB,aAAa,EACb,SAAS,EACT,WAAW,EACX,YAAY,EACZ,eAAe,GAUhB,MAAM,aAAa,CAAC"}
/**
* Skill/ability test resolution
*/
import type { Character, AbilityName, Modifier, TestResult } from "@mythxengine/types";
import type { Character, AbilityName, Modifier, TestResult, Position, EffectLevel } from "@mythxengine/types";
import type { RNG } from "../rng/rng.js";

@@ -20,2 +20,6 @@ import type { RulesContext } from "../rules/context.js";

rules?: RulesContext;
/** Position for consequence interpretation (default: "risky") */
position?: Position;
/** Effect level for success interpretation (default: "standard") */
effectLevel?: EffectLevel;
}

@@ -22,0 +26,0 @@ /**

@@ -1,1 +0,1 @@

{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/resolution/test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EAEX,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAQxD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,oDAAoD;IACpD,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA6FD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CAiF5D"}
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../src/resolution/test.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,WAAW,EACX,QAAQ,EACR,UAAU,EAEV,QAAQ,EACR,WAAW,EACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,eAAe,CAAC;AAEzC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AASxD,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,GAAG,EAAE,GAAG,CAAC;IACT,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,qEAAqE;IACrE,mBAAmB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC/B,oDAAoD;IACpD,KAAK,CAAC,EAAE,YAAY,CAAC;IACrB,iEAAiE;IACjE,QAAQ,CAAC,EAAE,QAAQ,CAAC;IACpB,oEAAoE;IACpE,WAAW,CAAC,EAAE,WAAW,CAAC;CAC3B;AA6FD;;;;;;;;;;;GAWG;AACH,wBAAgB,WAAW,CAAC,OAAO,EAAE,WAAW,GAAG,UAAU,CA+F5D"}

@@ -6,2 +6,3 @@ /**

import { getDefaultRulesContext, checkCriticalSuccess, checkCriticalFailure, getTestDice, } from "../rules/context.js";
import { determineOutcome, toLegacySuccess } from "./outcome.js";
/**

@@ -88,3 +89,3 @@ * Get the ability associated with a skill

export function resolveTest(options) {
const { character, skill, ability, difficulty, modifiers = [], rng, advantageSources = [], disadvantageSources = [], rules = getDefaultRulesContext(), } = options;
const { character, skill, ability, difficulty, modifiers = [], rng, advantageSources = [], disadvantageSources = [], rules = getDefaultRulesContext(), position = "risky", effectLevel = "standard", } = options;
// Determine which ability to use

@@ -121,7 +122,14 @@ const abilityName = ability ?? (skill ? getSkillAbility(character, skill) : "WIT");

const isCritFail = checkCriticalFailure(rules, roll.natural);
// Determine success using rules context
const { criticals } = rules.rules.mechanics;
const autoSucceeds = isCritSuccess && criticals.autoSuccess;
const autoFails = isCritFail && criticals.autoFailure;
const success = autoSucceeds || (!autoFails && total >= difficulty);
// Calculate margin
const margin = total - difficulty;
// Determine outcome using three-tier system
const { criticals, outcomeThresholds } = rules.rules.mechanics;
const outcome = determineOutcome({
margin,
natural: roll.natural,
thresholds: outcomeThresholds,
criticals,
});
// Legacy success: partial counts as success (with complications)
const success = toLegacySuccess(outcome);
return {

@@ -141,7 +149,10 @@ skill: skill ?? "",

success,
margin: total - difficulty,
margin,
critical: isCritSuccess || isCritFail,
advantageState,
outcome,
position,
effectLevel,
};
}
//# sourceMappingURL=test.js.map

@@ -1,1 +0,1 @@

{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/resolution/test.ts"],"names":[],"mappings":"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"}
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../src/resolution/test.ts"],"names":[],"mappings":"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"}
{
"name": "@mythxengine/engine",
"version": "0.1.1",
"version": "0.1.3",
"description": "Pure game mechanics engine for MythX RPG (dice, combat, RNG)",

@@ -34,3 +34,3 @@ "type": "module",

"dependencies": {
"@mythxengine/types": "0.1.1"
"@mythxengine/types": "0.1.4"
},

@@ -37,0 +37,0 @@ "devDependencies": {