@ai-rpg-engine/modules 2.0.2 → 2.0.3

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/dist/index.d.ts CHANGED
@@ -32,4 +32,6 @@ export { deriveStance, getReputationConsequence, evolveTitle, buildPlayerDescrip
32
32
  export type { Stance, ReputationConsequence, TitleEvolution, } from './social-consequence.js';
33
33
  export { spawnPlayerRumor, spawnReputationRumor, propagateRumor, shouldMutate, mutateRumorClaim, deriveRumorValence, getRumorsKnownToFaction, getRumorsInDistrict, formatRumorForDirector, } from './player-rumor.js';
34
34
  export type { PlayerRumor, RumorValence, RumorMutation, MilestoneHint, } from './player-rumor.js';
35
+ export { evaluatePressures, tickPressures, getPressuresForFaction, getVisiblePressures, formatPressureForDirector, formatPressureForNarrator, formatPressureForDialogue, } from './pressure-system.js';
36
+ export type { PressureKind, PressureVisibility, WorldPressure, PressureInputs, PressureSpawnResult, } from './pressure-system.js';
35
37
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -17,4 +17,5 @@ export { createObserverPresentation, presentForObserver, presentForAllObservers,
17
17
  export { createSimulationInspector, inspectEntity, inspectAllEntities, inspectFaction, inspectAllFactions, inspectZone, inspectAllZones, inspectDistrict, inspectAllDistricts, createSnapshot, formatEntityInspection, formatFactionInspection, formatDistrictInspection, } from './simulation-inspector.js';
18
18
  export { deriveStance, getReputationConsequence, evolveTitle, buildPlayerDescriptor, } from './social-consequence.js';
19
19
  export { spawnPlayerRumor, spawnReputationRumor, propagateRumor, shouldMutate, mutateRumorClaim, deriveRumorValence, getRumorsKnownToFaction, getRumorsInDistrict, formatRumorForDirector, } from './player-rumor.js';
20
+ export { evaluatePressures, tickPressures, getPressuresForFaction, getVisiblePressures, formatPressureForDirector, formatPressureForNarrator, formatPressureForDialogue, } from './pressure-system.js';
20
21
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,uDAAuD;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACrG,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAEhE,OAAO,EAAE,aAAa,EAAE,mBAAmB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAEnF,OAAO,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAExD,OAAO,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAEzI,OAAO,EACL,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,SAAS,EACT,cAAc,EACd,QAAQ,EACR,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,YAAY,EACZ,eAAe,EACf,kBAAkB,EAClB,iBAAiB,EACjB,eAAe,GAChB,MAAM,qBAAqB,CAAC;AAY7B,OAAO,EACL,sBAAsB,EACtB,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,YAAY,GACb,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EACL,qBAAqB,EACrB,WAAW,EACX,WAAW,EACX,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,SAAS,EACT,UAAU,EACV,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EACL,qBAAqB,EACrB,eAAe,EACf,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,wBAAwB,EACxB,UAAU,EACV,cAAc,GACf,MAAM,uBAAuB,CAAC;AAS/B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,sBAAsB,GACvB,MAAM,wBAAwB,CAAC;AAOhC,OAAO,EACL,sBAAsB,EACtB,aAAa,EACb,kBAAkB,EAClB,WAAW,GACZ,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EACL,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,EAChB,qBAAqB,EACrB,iBAAiB,EACjB,iBAAiB,EACjB,oBAAoB,EACpB,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAQ5B,OAAO,EACL,sBAAsB,EACtB,iBAAiB,EACjB,kBAAkB,EAClB,YAAY,EACZ,iBAAiB,GAClB,MAAM,wBAAwB,CAAC;AAKhC,OAAO,EACL,0BAA0B,EAC1B,kBAAkB,EAClB,sBAAsB,EACtB,cAAc,EACd,mBAAmB,GACpB,MAAM,4BAA4B,CAAC;AAQpC,OAAO,EACL,yBAAyB,EACzB,aAAa,EACb,kBAAkB,EAClB,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,eAAe,EACf,mBAAmB,EACnB,cAAc,EACd,sBAAsB,EACtB,uBAAuB,EACvB,wBAAwB,GACzB,MAAM,2BAA2B,CAAC;AAQnC,OAAO,EACL,YAAY,EACZ,wBAAwB,EACxB,WAAW,EACX,qBAAqB,GACtB,MAAM,yBAAyB,CAAC;AAMjC,OAAO,EACL,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,mBAAmB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,78 @@
1
+ import type { PlayerRumor } from './player-rumor.js';
2
+ export type PressureKind = 'bounty-issued' | 'faction-summons' | 'merchant-blacklist' | 'revenge-attempt' | 'investigation-opened' | 'heresy-whisper' | 'chapel-sanction' | 'case-opened' | 'witness-vanished' | 'mutiny-brewing' | 'navy-bounty' | 'infection-suspicion' | 'camp-panic' | 'corp-manhunt' | 'ice-escalation';
3
+ export type PressureVisibility = 'hidden' | 'rumored' | 'known' | 'public';
4
+ export type WorldPressure = {
5
+ id: string;
6
+ kind: PressureKind;
7
+ /** Faction that generated this pressure */
8
+ sourceFactionId: string;
9
+ /** Structured claim about what this pressure represents */
10
+ description: string;
11
+ /** What triggered it — rumor id, milestone label, or event type */
12
+ triggeredBy: string;
13
+ /** 0-1, higher = more imminent */
14
+ urgency: number;
15
+ /** How widely known this pressure is */
16
+ visibility: PressureVisibility;
17
+ /** Turns remaining before expiry (null = permanent until resolved) */
18
+ turnsRemaining: number | null;
19
+ /** Possible outcomes if the player engages or ignores */
20
+ potentialOutcomes: string[];
21
+ /** Genre/thematic tags */
22
+ tags: string[];
23
+ /** Engine tick when created */
24
+ createdAtTick: number;
25
+ };
26
+ export type PressureInputs = {
27
+ playerRumors: PlayerRumor[];
28
+ reputation: Array<{
29
+ factionId: string;
30
+ value: number;
31
+ }>;
32
+ milestones: Array<{
33
+ label: string;
34
+ tags: string[];
35
+ }>;
36
+ factionStates: Record<string, {
37
+ alertLevel: number;
38
+ cohesion: number;
39
+ }>;
40
+ districtMetrics?: Record<string, {
41
+ alertPressure: number;
42
+ rumorDensity: number;
43
+ stability: number;
44
+ }>;
45
+ playerLevel: number;
46
+ totalTurns: number;
47
+ activePressures: WorldPressure[];
48
+ /** From PackMetadata.genres[0], e.g. 'fantasy', 'cyberpunk' */
49
+ genre: string;
50
+ /** Current engine tick for timestamps */
51
+ currentTick: number;
52
+ };
53
+ export type PressureSpawnResult = {
54
+ pressure: WorldPressure;
55
+ /** One-line reason for director mode */
56
+ reason: string;
57
+ };
58
+ /**
59
+ * Tick all active pressures: decrement timers, remove expired,
60
+ * escalate visibility over time. Returns new array (immutable).
61
+ */
62
+ export declare function tickPressures(pressures: WorldPressure[], currentTick: number): WorldPressure[];
63
+ /**
64
+ * Evaluate simulation state for new pressure. Returns at most ONE new pressure.
65
+ * Returns null most turns — scarcity by design.
66
+ */
67
+ export declare function evaluatePressures(inputs: PressureInputs): PressureSpawnResult | null;
68
+ /** Get pressures originating from a specific faction. */
69
+ export declare function getPressuresForFaction(pressures: WorldPressure[], factionId: string): WorldPressure[];
70
+ /** Get pressures the player would be aware of (not hidden). */
71
+ export declare function getVisiblePressures(pressures: WorldPressure[]): WorldPressure[];
72
+ /** Format a single pressure for the director /pressures view. */
73
+ export declare function formatPressureForDirector(pressure: WorldPressure): string;
74
+ /** Compact summary for narrator prompt injection (~15 tokens). */
75
+ export declare function formatPressureForNarrator(pressure: WorldPressure): string;
76
+ /** NPC-facing description for dialogue context. */
77
+ export declare function formatPressureForDialogue(pressure: WorldPressure): string;
78
+ //# sourceMappingURL=pressure-system.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pressure-system.d.ts","sourceRoot":"","sources":["../src/pressure-system.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAIrD,MAAM,MAAM,YAAY,GAEpB,eAAe,GACf,iBAAiB,GACjB,oBAAoB,GACpB,iBAAiB,GACjB,sBAAsB,GAEtB,gBAAgB,GAChB,iBAAiB,GAEjB,aAAa,GACb,kBAAkB,GAElB,gBAAgB,GAChB,aAAa,GAEb,qBAAqB,GACrB,YAAY,GAEZ,cAAc,GACd,gBAAgB,CAAC;AAErB,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE3E,MAAM,MAAM,aAAa,GAAG;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,YAAY,CAAC;IACnB,2CAA2C;IAC3C,eAAe,EAAE,MAAM,CAAC;IACxB,2DAA2D;IAC3D,WAAW,EAAE,MAAM,CAAC;IACpB,mEAAmE;IACnE,WAAW,EAAE,MAAM,CAAC;IACpB,kCAAkC;IAClC,OAAO,EAAE,MAAM,CAAC;IAChB,wCAAwC;IACxC,UAAU,EAAE,kBAAkB,CAAC;IAC/B,sEAAsE;IACtE,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,yDAAyD;IACzD,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,0BAA0B;IAC1B,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,+BAA+B;IAC/B,aAAa,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,UAAU,EAAE,KAAK,CAAC;QAAE,SAAS,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxD,UAAU,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACrD,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACxE,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACrG,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,aAAa,EAAE,CAAC;IACjC,+DAA+D;IAC/D,KAAK,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,QAAQ,EAAE,aAAa,CAAC;IACxB,wCAAwC;IACxC,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAeF;;;GAGG;AACH,wBAAgB,aAAa,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,WAAW,EAAE,MAAM,GAAG,aAAa,EAAE,CA0B9F;AAID;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,GAAG,mBAAmB,GAAG,IAAI,CAmBpF;AAkhBD,yDAAyD;AACzD,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,aAAa,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,aAAa,EAAE,CAErG;AAED,+DAA+D;AAC/D,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,aAAa,EAAE,GAAG,aAAa,EAAE,CAE/E;AAID,iEAAiE;AACjE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAYzE;AAED,kEAAkE;AAClE,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGzE;AAED,mDAAmD;AACnD,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,aAAa,GAAG,MAAM,CAGzE"}
@@ -0,0 +1,577 @@
1
+ // pressure-system — emergent world pressure generation
2
+ // Pure functions + types for pressure lifecycle. No module registration.
3
+ // Pressures are structured objects, not prose. Claude renders them into narration.
4
+ // Most turns produce nothing — scarcity makes pressures meaningful.
5
+ // --- Constants ---
6
+ const MAX_ACTIVE_PRESSURES = 3;
7
+ const MIN_TURNS_BETWEEN_SPAWNS = 3;
8
+ const VISIBILITY_ESCALATION_TICKS = 3;
9
+ let pressureCounter = 0;
10
+ function nextPressureId() {
11
+ return `wp-${++pressureCounter}`;
12
+ }
13
+ // --- Lifecycle ---
14
+ /**
15
+ * Tick all active pressures: decrement timers, remove expired,
16
+ * escalate visibility over time. Returns new array (immutable).
17
+ */
18
+ export function tickPressures(pressures, currentTick) {
19
+ const result = [];
20
+ for (const p of pressures) {
21
+ // Expire if turnsRemaining hit 0
22
+ if (p.turnsRemaining !== null && p.turnsRemaining <= 0)
23
+ continue;
24
+ const updated = { ...p };
25
+ // Decrement timer
26
+ if (updated.turnsRemaining !== null) {
27
+ updated.turnsRemaining = updated.turnsRemaining - 1;
28
+ }
29
+ // Escalate visibility over time
30
+ const age = currentTick - updated.createdAtTick;
31
+ if (updated.visibility === 'hidden' && age >= VISIBILITY_ESCALATION_TICKS) {
32
+ updated.visibility = 'rumored';
33
+ }
34
+ else if (updated.visibility === 'rumored' && age >= VISIBILITY_ESCALATION_TICKS * 2) {
35
+ updated.visibility = 'known';
36
+ }
37
+ result.push(updated);
38
+ }
39
+ return result;
40
+ }
41
+ // --- Evaluation ---
42
+ /**
43
+ * Evaluate simulation state for new pressure. Returns at most ONE new pressure.
44
+ * Returns null most turns — scarcity by design.
45
+ */
46
+ export function evaluatePressures(inputs) {
47
+ // Scarcity guard: max active
48
+ if (inputs.activePressures.length >= MAX_ACTIVE_PRESSURES)
49
+ return null;
50
+ // Scarcity guard: min turns between spawns
51
+ if (inputs.activePressures.length > 0) {
52
+ const mostRecent = Math.max(...inputs.activePressures.map((p) => p.createdAtTick));
53
+ if (inputs.currentTick - mostRecent < MIN_TURNS_BETWEEN_SPAWNS)
54
+ return null;
55
+ }
56
+ // Existing kinds — no duplicates
57
+ const activeKinds = new Set(inputs.activePressures.map((p) => p.kind));
58
+ // Try universal rules first
59
+ const universal = evaluateUniversalRules(inputs, activeKinds);
60
+ if (universal)
61
+ return universal;
62
+ // Try genre-specific rules
63
+ return evaluateGenreRules(inputs, activeKinds);
64
+ }
65
+ // --- Universal Rules ---
66
+ function evaluateUniversalRules(inputs, activeKinds) {
67
+ const { reputation, factionStates, playerRumors, currentTick } = inputs;
68
+ for (const rep of reputation) {
69
+ const factionState = factionStates[rep.factionId];
70
+ if (!factionState)
71
+ continue;
72
+ // Bounty: deep hostility + high alert
73
+ if (!activeKinds.has('bounty-issued') &&
74
+ rep.value <= -50 &&
75
+ factionState.alertLevel >= 60) {
76
+ return {
77
+ pressure: makePressure({
78
+ kind: 'bounty-issued',
79
+ sourceFactionId: rep.factionId,
80
+ description: `${rep.factionId} has placed a bounty on the player`,
81
+ triggeredBy: `reputation:${rep.value}`,
82
+ urgency: 0.7,
83
+ visibility: 'rumored',
84
+ turnsRemaining: 12,
85
+ potentialOutcomes: [
86
+ 'Hunters sent after the player',
87
+ 'Safe passage denied in faction territory',
88
+ 'Bounty can be cleared by major service to the faction',
89
+ ],
90
+ tags: ['hostile', 'universal'],
91
+ currentTick,
92
+ }),
93
+ reason: `Faction ${rep.factionId} reputation ${rep.value} with alert ${factionState.alertLevel}`,
94
+ };
95
+ }
96
+ // Investigation: moderate hostility + moderate alert
97
+ if (!activeKinds.has('investigation-opened') &&
98
+ rep.value <= -30 &&
99
+ factionState.alertLevel >= 40) {
100
+ return {
101
+ pressure: makePressure({
102
+ kind: 'investigation-opened',
103
+ sourceFactionId: rep.factionId,
104
+ description: `${rep.factionId} has opened an investigation into the player's activities`,
105
+ triggeredBy: `reputation:${rep.value}`,
106
+ urgency: 0.4,
107
+ visibility: 'hidden',
108
+ turnsRemaining: 8,
109
+ potentialOutcomes: [
110
+ 'NPCs withhold information during investigation',
111
+ 'Investigation may escalate to bounty if ignored',
112
+ 'Player can cooperate to clear suspicion',
113
+ ],
114
+ tags: ['probe', 'universal'],
115
+ currentTick,
116
+ }),
117
+ reason: `Faction ${rep.factionId} reputation ${rep.value} with alert ${factionState.alertLevel}`,
118
+ };
119
+ }
120
+ // Faction summons: high rep with one faction, their rival hates the player
121
+ if (!activeKinds.has('faction-summons') &&
122
+ rep.value >= 50) {
123
+ const hasRival = reputation.some((other) => other.factionId !== rep.factionId && other.value <= -20);
124
+ if (hasRival) {
125
+ return {
126
+ pressure: makePressure({
127
+ kind: 'faction-summons',
128
+ sourceFactionId: rep.factionId,
129
+ description: `${rep.factionId} summons the player to discuss a matter of importance`,
130
+ triggeredBy: `reputation:${rep.value}`,
131
+ urgency: 0.5,
132
+ visibility: 'known',
133
+ turnsRemaining: 10,
134
+ potentialOutcomes: [
135
+ 'Faction offers a mission against their rival',
136
+ 'Refusing the summons may strain the relationship',
137
+ 'Accepting deepens alliance and rival hostility',
138
+ ],
139
+ tags: ['diplomatic', 'universal'],
140
+ currentTick,
141
+ }),
142
+ reason: `Faction ${rep.factionId} rep ${rep.value} while rival faction hostile`,
143
+ };
144
+ }
145
+ }
146
+ // Merchant blacklist: hostility with merchant-tagged factions
147
+ // (We check tags via faction id containing 'merchant', 'trade', 'guild', 'market')
148
+ if (!activeKinds.has('merchant-blacklist') &&
149
+ rep.value <= -40 &&
150
+ isMerchantFaction(rep.factionId)) {
151
+ return {
152
+ pressure: makePressure({
153
+ kind: 'merchant-blacklist',
154
+ sourceFactionId: rep.factionId,
155
+ description: `${rep.factionId} has blacklisted the player from trade`,
156
+ triggeredBy: `reputation:${rep.value}`,
157
+ urgency: 0.5,
158
+ visibility: 'known',
159
+ turnsRemaining: 15,
160
+ potentialOutcomes: [
161
+ 'Trade access revoked at faction shops',
162
+ 'Prices inflated at neutral merchants who heard',
163
+ 'Blacklist lifted after reputation repair',
164
+ ],
165
+ tags: ['economic', 'universal'],
166
+ currentTick,
167
+ }),
168
+ reason: `Merchant faction ${rep.factionId} reputation ${rep.value}`,
169
+ };
170
+ }
171
+ }
172
+ // Revenge: fearsome rumors spread widely
173
+ if (!activeKinds.has('revenge-attempt')) {
174
+ const fearsomeWideRumors = playerRumors.filter((r) => r.valence === 'fearsome' && r.spreadTo.length >= 3 && r.confidence > 0.3);
175
+ if (fearsomeWideRumors.length > 0) {
176
+ const trigger = fearsomeWideRumors[0];
177
+ const originFaction = trigger.originFactionId ?? reputation[0]?.factionId ?? 'unknown';
178
+ return {
179
+ pressure: makePressure({
180
+ kind: 'revenge-attempt',
181
+ sourceFactionId: originFaction,
182
+ description: `allies of those the player wronged are seeking revenge`,
183
+ triggeredBy: `rumor:${trigger.id}`,
184
+ urgency: 0.6,
185
+ visibility: 'hidden',
186
+ turnsRemaining: 8,
187
+ potentialOutcomes: [
188
+ 'Ambush attempt in the current district',
189
+ 'NPCs may betray the player to avengers',
190
+ 'Avengers can be confronted or evaded',
191
+ ],
192
+ tags: ['hostile', 'universal'],
193
+ currentTick,
194
+ }),
195
+ reason: `Fearsome rumor "${trigger.claim}" spread to ${trigger.spreadTo.length} factions`,
196
+ };
197
+ }
198
+ }
199
+ return null;
200
+ }
201
+ // --- Genre Rules ---
202
+ function evaluateGenreRules(inputs, activeKinds) {
203
+ const { genre } = inputs;
204
+ switch (genre) {
205
+ case 'fantasy':
206
+ return evaluateFantasyRules(inputs, activeKinds);
207
+ case 'mystery':
208
+ return evaluateMysteryRules(inputs, activeKinds);
209
+ case 'pirate':
210
+ return evaluatePirateRules(inputs, activeKinds);
211
+ case 'horror':
212
+ case 'post-apocalyptic':
213
+ return evaluateHorrorRules(inputs, activeKinds);
214
+ case 'cyberpunk':
215
+ return evaluateCyberpunkRules(inputs, activeKinds);
216
+ default:
217
+ return null;
218
+ }
219
+ }
220
+ function evaluateFantasyRules(inputs, activeKinds) {
221
+ const { reputation, factionStates, currentTick, milestones } = inputs;
222
+ // Heresy whisper: religious faction + negative rep + religious milestones
223
+ if (!activeKinds.has('heresy-whisper')) {
224
+ const chapelFaction = findFactionByHint(reputation, ['chapel', 'church', 'temple', 'clergy', 'faith']);
225
+ if (chapelFaction && chapelFaction.value < -20) {
226
+ const hasReligiousMilestone = milestones.some((m) => m.tags.some((t) => ['faith', 'chapel', 'heresy', 'divine', 'sacrilege'].includes(t)));
227
+ if (hasReligiousMilestone || (factionStates[chapelFaction.factionId]?.alertLevel ?? 0) >= 40) {
228
+ return {
229
+ pressure: makePressure({
230
+ kind: 'heresy-whisper',
231
+ sourceFactionId: chapelFaction.factionId,
232
+ description: `the ${chapelFaction.factionId} whispers of heresy against the player`,
233
+ triggeredBy: `reputation:${chapelFaction.value}`,
234
+ urgency: 0.4,
235
+ visibility: 'rumored',
236
+ turnsRemaining: 10,
237
+ potentialOutcomes: [
238
+ 'Religious NPCs become suspicious and uncooperative',
239
+ 'May escalate to formal chapel sanction if unaddressed',
240
+ 'Can be defused through piety or atonement',
241
+ ],
242
+ tags: ['religious', 'fantasy'],
243
+ currentTick,
244
+ }),
245
+ reason: `Chapel faction ${chapelFaction.factionId} rep ${chapelFaction.value}`,
246
+ };
247
+ }
248
+ }
249
+ }
250
+ // Chapel sanction: heresy-whisper expired (not currently active but was recently)
251
+ if (!activeKinds.has('chapel-sanction') && !activeKinds.has('heresy-whisper')) {
252
+ const chapelFaction = findFactionByHint(reputation, ['chapel', 'church', 'temple', 'clergy', 'faith']);
253
+ if (chapelFaction && chapelFaction.value < -40) {
254
+ return {
255
+ pressure: makePressure({
256
+ kind: 'chapel-sanction',
257
+ sourceFactionId: chapelFaction.factionId,
258
+ description: `the ${chapelFaction.factionId} has formally sanctioned the player`,
259
+ triggeredBy: `reputation:${chapelFaction.value}`,
260
+ urgency: 0.7,
261
+ visibility: 'public',
262
+ turnsRemaining: 20,
263
+ potentialOutcomes: [
264
+ 'Healing and blessing services denied',
265
+ 'Faithful NPCs refuse all aid',
266
+ 'Sanction can be lifted through a major act of devotion',
267
+ ],
268
+ tags: ['religious', 'fantasy', 'escalation'],
269
+ currentTick,
270
+ }),
271
+ reason: `Chapel faction ${chapelFaction.factionId} rep ${chapelFaction.value}, heresy unresolved`,
272
+ };
273
+ }
274
+ }
275
+ return null;
276
+ }
277
+ function evaluateMysteryRules(inputs, activeKinds) {
278
+ const { reputation, factionStates, milestones, currentTick } = inputs;
279
+ // Case opened: law faction alert + investigation milestones
280
+ if (!activeKinds.has('case-opened')) {
281
+ const lawFaction = findFactionByHint(reputation, ['police', 'law', 'detective', 'constable', 'precinct']);
282
+ if (lawFaction) {
283
+ const alert = factionStates[lawFaction.factionId]?.alertLevel ?? 0;
284
+ const hasInvestigationMilestone = milestones.some((m) => m.tags.some((t) => ['investigation', 'crime', 'evidence', 'witness'].includes(t)));
285
+ if (alert >= 50 || hasInvestigationMilestone) {
286
+ return {
287
+ pressure: makePressure({
288
+ kind: 'case-opened',
289
+ sourceFactionId: lawFaction.factionId,
290
+ description: `${lawFaction.factionId} has opened a case involving the player`,
291
+ triggeredBy: hasInvestigationMilestone ? 'milestone:investigation' : `alert:${alert}`,
292
+ urgency: 0.5,
293
+ visibility: 'hidden',
294
+ turnsRemaining: 10,
295
+ potentialOutcomes: [
296
+ 'Investigators shadow the player',
297
+ 'Evidence may implicate or exonerate',
298
+ 'Player can cooperate, obstruct, or flee',
299
+ ],
300
+ tags: ['investigation', 'mystery'],
301
+ currentTick,
302
+ }),
303
+ reason: `Law faction alert ${alert}, investigation milestones present`,
304
+ };
305
+ }
306
+ }
307
+ }
308
+ // Witness vanished: active investigation + high suspicion environment
309
+ if (!activeKinds.has('witness-vanished') && activeKinds.has('case-opened')) {
310
+ const lawFaction = findFactionByHint(reputation, ['police', 'law', 'detective', 'constable', 'precinct']);
311
+ if (lawFaction) {
312
+ const alert = factionStates[lawFaction.factionId]?.alertLevel ?? 0;
313
+ if (alert >= 70) {
314
+ return {
315
+ pressure: makePressure({
316
+ kind: 'witness-vanished',
317
+ sourceFactionId: lawFaction.factionId,
318
+ description: `a key witness in the investigation has disappeared`,
319
+ triggeredBy: 'case-opened:escalation',
320
+ urgency: 0.7,
321
+ visibility: 'rumored',
322
+ turnsRemaining: 6,
323
+ potentialOutcomes: [
324
+ 'Suspicion falls on the player',
325
+ 'Finding the witness may clear the player',
326
+ 'The witness may have been silenced by a third party',
327
+ ],
328
+ tags: ['investigation', 'mystery', 'escalation'],
329
+ currentTick,
330
+ }),
331
+ reason: `Active case with law faction alert ${alert}`,
332
+ };
333
+ }
334
+ }
335
+ }
336
+ return null;
337
+ }
338
+ function evaluatePirateRules(inputs, activeKinds) {
339
+ const { reputation, factionStates, playerRumors, currentTick } = inputs;
340
+ // Mutiny brewing: crew faction low cohesion
341
+ if (!activeKinds.has('mutiny-brewing')) {
342
+ const crewFaction = findFactionByHint(reputation, ['crew', 'pirate', 'sailor', 'buccaneer']);
343
+ if (crewFaction) {
344
+ const cohesion = factionStates[crewFaction.factionId]?.cohesion ?? 1;
345
+ if (cohesion < 0.4) {
346
+ return {
347
+ pressure: makePressure({
348
+ kind: 'mutiny-brewing',
349
+ sourceFactionId: crewFaction.factionId,
350
+ description: `discontent festers among the ${crewFaction.factionId}`,
351
+ triggeredBy: `cohesion:${cohesion}`,
352
+ urgency: 0.6,
353
+ visibility: 'rumored',
354
+ turnsRemaining: 8,
355
+ potentialOutcomes: [
356
+ 'Crew members may refuse orders',
357
+ 'A ringleader emerges to challenge the player',
358
+ 'Sharing plunder or winning a battle may restore loyalty',
359
+ ],
360
+ tags: ['social', 'pirate'],
361
+ currentTick,
362
+ }),
363
+ reason: `Crew faction ${crewFaction.factionId} cohesion ${cohesion}`,
364
+ };
365
+ }
366
+ }
367
+ }
368
+ // Navy bounty: fearsome rumors spread widely
369
+ if (!activeKinds.has('navy-bounty')) {
370
+ const fearsomeRumors = playerRumors.filter((r) => r.valence === 'fearsome' && r.spreadTo.length >= 2 && r.confidence > 0.4);
371
+ if (fearsomeRumors.length > 0) {
372
+ const navyFaction = findFactionByHint(reputation, ['navy', 'admiralty', 'crown', 'port-authority']);
373
+ const factionId = navyFaction?.factionId ?? 'navy';
374
+ return {
375
+ pressure: makePressure({
376
+ kind: 'navy-bounty',
377
+ sourceFactionId: factionId,
378
+ description: `naval forces have posted a bounty for the player's capture`,
379
+ triggeredBy: `rumor:${fearsomeRumors[0].id}`,
380
+ urgency: 0.7,
381
+ visibility: 'known',
382
+ turnsRemaining: 15,
383
+ potentialOutcomes: [
384
+ 'Naval patrols hunt the player at sea',
385
+ 'Port access may be restricted',
386
+ 'Privateers may seek the bounty reward',
387
+ ],
388
+ tags: ['hostile', 'pirate', 'naval'],
389
+ currentTick,
390
+ }),
391
+ reason: `Fearsome rumors spread to ${fearsomeRumors[0].spreadTo.length} factions`,
392
+ };
393
+ }
394
+ }
395
+ return null;
396
+ }
397
+ function evaluateHorrorRules(inputs, activeKinds) {
398
+ const { reputation, factionStates, playerRumors, currentTick, milestones } = inputs;
399
+ // Infection suspicion: community on high alert + injury-related milestones
400
+ if (!activeKinds.has('infection-suspicion')) {
401
+ const communityFaction = findFactionByHint(reputation, ['camp', 'settlement', 'survivors', 'community', 'haven']);
402
+ if (communityFaction) {
403
+ const alert = factionStates[communityFaction.factionId]?.alertLevel ?? 0;
404
+ const hasInjury = milestones.some((m) => m.tags.some((t) => ['injury', 'wound', 'infection', 'bite', 'exposure'].includes(t)));
405
+ if (alert >= 60 && hasInjury) {
406
+ return {
407
+ pressure: makePressure({
408
+ kind: 'infection-suspicion',
409
+ sourceFactionId: communityFaction.factionId,
410
+ description: `the ${communityFaction.factionId} suspects the player may be infected`,
411
+ triggeredBy: 'injury+alert',
412
+ urgency: 0.6,
413
+ visibility: 'rumored',
414
+ turnsRemaining: 6,
415
+ potentialOutcomes: [
416
+ 'NPCs demand the player submit to examination',
417
+ 'Access to safe zones restricted',
418
+ 'Player may be quarantined or expelled',
419
+ ],
420
+ tags: ['social', 'horror', 'medical'],
421
+ currentTick,
422
+ }),
423
+ reason: `Community alert ${alert} with injury milestones`,
424
+ };
425
+ }
426
+ }
427
+ }
428
+ // Camp panic: multiple fearsome rumors in circulation
429
+ if (!activeKinds.has('camp-panic')) {
430
+ const fearsomeRumors = playerRumors.filter((r) => r.valence === 'fearsome' && r.confidence > 0.3);
431
+ if (fearsomeRumors.length >= 2) {
432
+ const communityFaction = findFactionByHint(reputation, ['camp', 'settlement', 'survivors', 'community', 'haven']);
433
+ const factionId = communityFaction?.factionId ?? reputation[0]?.factionId ?? 'community';
434
+ return {
435
+ pressure: makePressure({
436
+ kind: 'camp-panic',
437
+ sourceFactionId: factionId,
438
+ description: `fear spreads through the settlement — the player's reputation precedes them`,
439
+ triggeredBy: `rumors:fearsome:${fearsomeRumors.length}`,
440
+ urgency: 0.5,
441
+ visibility: 'known',
442
+ turnsRemaining: 8,
443
+ potentialOutcomes: [
444
+ 'NPCs hoard resources and refuse to share',
445
+ 'Some NPCs flee the settlement entirely',
446
+ 'A leader may demand the player leave',
447
+ ],
448
+ tags: ['social', 'horror', 'panic'],
449
+ currentTick,
450
+ }),
451
+ reason: `${fearsomeRumors.length} fearsome rumors in circulation`,
452
+ };
453
+ }
454
+ }
455
+ return null;
456
+ }
457
+ function evaluateCyberpunkRules(inputs, activeKinds) {
458
+ const { reputation, factionStates, currentTick } = inputs;
459
+ // Corp manhunt: corporate faction hostile + high alert
460
+ if (!activeKinds.has('corp-manhunt')) {
461
+ const corpFaction = findFactionByHint(reputation, ['corp', 'corporation', 'corporate', 'zaibatsu', 'syndicate']);
462
+ if (corpFaction && corpFaction.value <= -40) {
463
+ const alert = factionStates[corpFaction.factionId]?.alertLevel ?? 0;
464
+ if (alert >= 50) {
465
+ return {
466
+ pressure: makePressure({
467
+ kind: 'corp-manhunt',
468
+ sourceFactionId: corpFaction.factionId,
469
+ description: `${corpFaction.factionId} security division has authorized a manhunt`,
470
+ triggeredBy: `reputation:${corpFaction.value}`,
471
+ urgency: 0.8,
472
+ visibility: 'rumored',
473
+ turnsRemaining: 10,
474
+ potentialOutcomes: [
475
+ 'Corporate operatives deployed to player location',
476
+ 'Surveillance systems track player movement',
477
+ 'A fixer may offer to broker a truce — for a price',
478
+ ],
479
+ tags: ['hostile', 'cyberpunk', 'corporate'],
480
+ currentTick,
481
+ }),
482
+ reason: `Corp faction ${corpFaction.factionId} rep ${corpFaction.value} alert ${alert}`,
483
+ };
484
+ }
485
+ }
486
+ }
487
+ // ICE escalation: investigation expired or failed + digital presence
488
+ if (!activeKinds.has('ice-escalation') && !activeKinds.has('investigation-opened')) {
489
+ const corpFaction = findFactionByHint(reputation, ['corp', 'corporation', 'corporate', 'zaibatsu', 'syndicate', 'net']);
490
+ if (corpFaction && corpFaction.value <= -30) {
491
+ const alert = factionStates[corpFaction.factionId]?.alertLevel ?? 0;
492
+ if (alert >= 60) {
493
+ return {
494
+ pressure: makePressure({
495
+ kind: 'ice-escalation',
496
+ sourceFactionId: corpFaction.factionId,
497
+ description: `${corpFaction.factionId} has upgraded its ICE against the player`,
498
+ triggeredBy: `alert:${alert}`,
499
+ urgency: 0.5,
500
+ visibility: 'hidden',
501
+ turnsRemaining: 12,
502
+ potentialOutcomes: [
503
+ 'Digital zones become more dangerous',
504
+ 'Hacking attempts face increased resistance',
505
+ 'A netrunner contact may offer countermeasures',
506
+ ],
507
+ tags: ['digital', 'cyberpunk', 'escalation'],
508
+ currentTick,
509
+ }),
510
+ reason: `Corp faction ${corpFaction.factionId} alert ${alert} after investigation`,
511
+ };
512
+ }
513
+ }
514
+ }
515
+ return null;
516
+ }
517
+ // --- Queries ---
518
+ /** Get pressures originating from a specific faction. */
519
+ export function getPressuresForFaction(pressures, factionId) {
520
+ return pressures.filter((p) => p.sourceFactionId === factionId);
521
+ }
522
+ /** Get pressures the player would be aware of (not hidden). */
523
+ export function getVisiblePressures(pressures) {
524
+ return pressures.filter((p) => p.visibility !== 'hidden');
525
+ }
526
+ // --- Formatting ---
527
+ /** Format a single pressure for the director /pressures view. */
528
+ export function formatPressureForDirector(pressure) {
529
+ const urgencyPct = Math.round(pressure.urgency * 100);
530
+ const turns = pressure.turnsRemaining !== null ? `${pressure.turnsRemaining} turns` : 'permanent';
531
+ const parts = [
532
+ ` [${pressure.kind}] ${pressure.description}`,
533
+ ` Source: ${pressure.sourceFactionId} | Urgency: ${urgencyPct}% | Visibility: ${pressure.visibility}`,
534
+ ` Expires: ${turns} | Triggered by: ${pressure.triggeredBy}`,
535
+ ` Tags: ${pressure.tags.join(', ')}`,
536
+ ` Outcomes:`,
537
+ ...pressure.potentialOutcomes.map((o) => ` - ${o}`),
538
+ ];
539
+ return parts.join('\n');
540
+ }
541
+ /** Compact summary for narrator prompt injection (~15 tokens). */
542
+ export function formatPressureForNarrator(pressure) {
543
+ const urgency = pressure.urgency >= 0.7 ? 'urgent' : pressure.urgency >= 0.4 ? 'growing' : 'distant';
544
+ return `${pressure.kind}: ${pressure.description} (${urgency})`;
545
+ }
546
+ /** NPC-facing description for dialogue context. */
547
+ export function formatPressureForDialogue(pressure) {
548
+ const urgency = pressure.urgency >= 0.7 ? 'imminent' : pressure.urgency >= 0.4 ? 'developing' : 'emerging';
549
+ return `${pressure.kind} (${urgency}): ${pressure.description}`;
550
+ }
551
+ // --- Helpers ---
552
+ function makePressure(opts) {
553
+ return {
554
+ id: nextPressureId(),
555
+ kind: opts.kind,
556
+ sourceFactionId: opts.sourceFactionId,
557
+ description: opts.description,
558
+ triggeredBy: opts.triggeredBy,
559
+ urgency: opts.urgency,
560
+ visibility: opts.visibility,
561
+ turnsRemaining: opts.turnsRemaining,
562
+ potentialOutcomes: opts.potentialOutcomes,
563
+ tags: opts.tags,
564
+ createdAtTick: opts.currentTick,
565
+ };
566
+ }
567
+ function isMerchantFaction(factionId) {
568
+ const lower = factionId.toLowerCase();
569
+ return ['merchant', 'trade', 'guild', 'market', 'bazaar', 'shop', 'vendor'].some((hint) => lower.includes(hint));
570
+ }
571
+ function findFactionByHint(reputation, hints) {
572
+ return reputation.find((r) => {
573
+ const lower = r.factionId.toLowerCase();
574
+ return hints.some((h) => lower.includes(h));
575
+ });
576
+ }
577
+ //# sourceMappingURL=pressure-system.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pressure-system.js","sourceRoot":"","sources":["../src/pressure-system.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ai-rpg-engine/modules",
3
- "version": "2.0.2",
3
+ "version": "2.0.3",
4
4
  "description": "AI RPG Engine built-in modules: combat, dialogue, inventory, traversal, status",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",