@ai-rpg-engine/modules 2.0.0 → 2.0.2

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
@@ -28,4 +28,8 @@ export { createObserverPresentation, presentForObserver, presentForAllObservers,
28
28
  export type { ObserverContext, PresentationRule, ObserverPresentedEvent, ObserverPresentationConfig, DivergenceRecord, } from './observer-presentation.js';
29
29
  export { createSimulationInspector, inspectEntity, inspectAllEntities, inspectFaction, inspectAllFactions, inspectZone, inspectAllZones, inspectDistrict, inspectAllDistricts, createSnapshot, formatEntityInspection, formatFactionInspection, formatDistrictInspection, } from './simulation-inspector.js';
30
30
  export type { EntityInspection, FactionInspection, ZoneInspection, DistrictInspection, SimulationSnapshot, } from './simulation-inspector.js';
31
+ export { deriveStance, getReputationConsequence, evolveTitle, buildPlayerDescriptor, } from './social-consequence.js';
32
+ export type { Stance, ReputationConsequence, TitleEvolution, } from './social-consequence.js';
33
+ export { spawnPlayerRumor, spawnReputationRumor, propagateRumor, shouldMutate, mutateRumorClaim, deriveRumorValence, getRumorsKnownToFaction, getRumorsInDistrict, formatRumorForDirector, } from './player-rumor.js';
34
+ export type { PlayerRumor, RumorValence, RumorMutation, MilestoneHint, } from './player-rumor.js';
31
35
  //# 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
@@ -15,4 +15,6 @@ export { createDistrictCore, getDistrictForZone, getDistrictState, getDistrictDe
15
15
  export { createBeliefProvenance, traceEntityBelief, traceFactionBelief, traceSubject, formatBeliefTrace, } from './belief-provenance.js';
16
16
  export { createObserverPresentation, presentForObserver, presentForAllObservers, getDivergences, getEventDivergences, } from './observer-presentation.js';
17
17
  export { createSimulationInspector, inspectEntity, inspectAllEntities, inspectFaction, inspectAllFactions, inspectZone, inspectAllZones, inspectDistrict, inspectAllDistricts, createSnapshot, formatEntityInspection, formatFactionInspection, formatDistrictInspection, } from './simulation-inspector.js';
18
+ export { deriveStance, getReputationConsequence, evolveTitle, buildPlayerDescriptor, } from './social-consequence.js';
19
+ export { spawnPlayerRumor, spawnReputationRumor, propagateRumor, shouldMutate, mutateRumorClaim, deriveRumorValence, getRumorsKnownToFaction, getRumorsInDistrict, formatRumorForDirector, } from './player-rumor.js';
18
20
  //# 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"}
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"}
@@ -0,0 +1,69 @@
1
+ import type { CharacterProfile } from '@ai-rpg-engine/character-profile';
2
+ export type RumorValence = 'heroic' | 'fearsome' | 'tragic' | 'mysterious';
3
+ export type PlayerRumor = {
4
+ id: string;
5
+ /** Structured claim: "defeated the Bone Collector" */
6
+ claim: string;
7
+ /** From buildPlayerDescriptor — how NPCs describe the player */
8
+ subjectDescriptor: string;
9
+ /** Event type that spawned it */
10
+ sourceEvent: string;
11
+ /** Milestone label if applicable */
12
+ sourceMilestone?: string;
13
+ /** Faction that witnessed/originated */
14
+ originFactionId?: string;
15
+ /** District where it happened */
16
+ originDistrictId?: string;
17
+ /** 0-1, decays with hops */
18
+ confidence: number;
19
+ /** 0-1, increases with mutations */
20
+ distortion: number;
21
+ /** How many times the claim has been mutated */
22
+ mutationCount: number;
23
+ /** Emotional charge */
24
+ valence: RumorValence;
25
+ /** FactionIds that have received this rumor */
26
+ spreadTo: string[];
27
+ /** Engine tick when spawned */
28
+ originTick: number;
29
+ };
30
+ export type RumorMutation = {
31
+ type: 'exaggerate' | 'invert' | 'conflate';
32
+ field: 'claim' | 'valence';
33
+ before: string;
34
+ after: string;
35
+ };
36
+ export type MilestoneHint = {
37
+ label: string;
38
+ description: string;
39
+ tags: string[];
40
+ };
41
+ /** Derive emotional charge from milestone tags. */
42
+ export declare function deriveRumorValence(tags: string[]): RumorValence;
43
+ /** Spawn a player rumor from a milestone event. */
44
+ export declare function spawnPlayerRumor(milestone: MilestoneHint, profile: CharacterProfile, originFactionId?: string, originDistrictId?: string, tick?: number): PlayerRumor;
45
+ /** Spawn a player rumor from a reputation change event. */
46
+ export declare function spawnReputationRumor(factionId: string, delta: number, factionName: string, profile: CharacterProfile, districtId?: string, tick?: number): PlayerRumor;
47
+ /**
48
+ * Propagate a rumor to a new faction.
49
+ * Returns a new rumor with the target added to spreadTo, confidence decayed,
50
+ * and possible mutation applied.
51
+ */
52
+ export declare function propagateRumor(rumor: PlayerRumor, targetFactionId: string, distortionRate?: number): PlayerRumor;
53
+ /** Determine if a rumor should mutate during propagation. */
54
+ export declare function shouldMutate(rumor: PlayerRumor): boolean;
55
+ /**
56
+ * Apply a structured mutation to a rumor's claim.
57
+ * Returns the mutated rumor and a record of what changed.
58
+ */
59
+ export declare function mutateRumorClaim(rumor: PlayerRumor): {
60
+ rumor: PlayerRumor;
61
+ mutation: RumorMutation;
62
+ };
63
+ /** Get all rumors known to a specific faction (originated or spread to). */
64
+ export declare function getRumorsKnownToFaction(rumors: PlayerRumor[], factionId: string): PlayerRumor[];
65
+ /** Get all rumors that originated in a specific district. */
66
+ export declare function getRumorsInDistrict(rumors: PlayerRumor[], districtId: string): PlayerRumor[];
67
+ /** Format a single rumor for the director /rumors view. */
68
+ export declare function formatRumorForDirector(rumor: PlayerRumor): string;
69
+ //# sourceMappingURL=player-rumor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-rumor.d.ts","sourceRoot":"","sources":["../src/player-rumor.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,kCAAkC,CAAC;AAIzE,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,GAAG,YAAY,CAAC;AAE3E,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,sDAAsD;IACtD,KAAK,EAAE,MAAM,CAAC;IACd,gEAAgE;IAChE,iBAAiB,EAAE,MAAM,CAAC;IAC1B,iCAAiC;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,oCAAoC;IACpC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,wCAAwC;IACxC,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,iCAAiC;IACjC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,4BAA4B;IAC5B,UAAU,EAAE,MAAM,CAAC;IACnB,oCAAoC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,gDAAgD;IAChD,aAAa,EAAE,MAAM,CAAC;IACtB,uBAAuB;IACvB,OAAO,EAAE,YAAY,CAAC;IACtB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,IAAI,EAAE,YAAY,GAAG,QAAQ,GAAG,UAAU,CAAC;IAC3C,KAAK,EAAE,OAAO,GAAG,SAAS,CAAC;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,EAAE,CAAC;CAChB,CAAC;AA8BF,mDAAmD;AACnD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,YAAY,CAO/D;AAgBD,mDAAmD;AACnD,wBAAgB,gBAAgB,CAC9B,SAAS,EAAE,aAAa,EACxB,OAAO,EAAE,gBAAgB,EACzB,eAAe,CAAC,EAAE,MAAM,EACxB,gBAAgB,CAAC,EAAE,MAAM,EACzB,IAAI,GAAE,MAAU,GACf,WAAW,CAgBb;AAED,2DAA2D;AAC3D,wBAAgB,oBAAoB,CAClC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,gBAAgB,EACzB,UAAU,CAAC,EAAE,MAAM,EACnB,IAAI,GAAE,MAAU,GACf,WAAW,CAoBb;AAID;;;;GAIG;AACH,wBAAgB,cAAc,CAC5B,KAAK,EAAE,WAAW,EAClB,eAAe,EAAE,MAAM,EACvB,cAAc,GAAE,MAA6B,GAC5C,WAAW,CAkBb;AAED,6DAA6D;AAC7D,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAOxD;AAID;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,WAAW,GAAG;IAAE,KAAK,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,aAAa,CAAA;CAAE,CA8BpG;AAcD,4EAA4E;AAC5E,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,SAAS,EAAE,MAAM,GAAG,WAAW,EAAE,CAI/F;AAED,6DAA6D;AAC7D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,WAAW,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,WAAW,EAAE,CAE5F;AAID,2DAA2D;AAC3D,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAgBjE"}
@@ -0,0 +1,186 @@
1
+ // player-rumor — structured player legend propagation
2
+ // Pure functions + types for rumor lifecycle. No module registration.
3
+ // Rumors are structured claims, not prose. Claude renders them into dialogue.
4
+ import { buildPlayerDescriptor } from './social-consequence.js';
5
+ // --- Constants ---
6
+ const CONFIDENCE_DECAY = 0.85;
7
+ const BASE_DISTORTION_RATE = 0.08;
8
+ const MUTATION_THRESHOLD = 0.10;
9
+ const CLAIM_EXAGGERATIONS = {
10
+ 'defeated': 'slaughtered',
11
+ 'entered': 'conquered',
12
+ 'discovered': 'claimed',
13
+ 'slew': 'annihilated',
14
+ 'killed': 'massacred',
15
+ };
16
+ const VALENCE_INVERSIONS = {
17
+ heroic: 'fearsome',
18
+ fearsome: 'heroic',
19
+ tragic: 'mysterious',
20
+ mysterious: 'tragic',
21
+ };
22
+ let rumorCounter = 0;
23
+ function nextRumorId() {
24
+ return `pr-${++rumorCounter}`;
25
+ }
26
+ // --- Valence Derivation ---
27
+ /** Derive emotional charge from milestone tags. */
28
+ export function deriveRumorValence(tags) {
29
+ const has = (t) => tags.includes(t);
30
+ if (has('combat') && has('boss-kill'))
31
+ return 'fearsome';
32
+ if (has('exploration') && has('landmark'))
33
+ return 'mysterious';
34
+ if (has('combat'))
35
+ return 'heroic';
36
+ if (has('exploration') && has('boss-lair'))
37
+ return 'fearsome';
38
+ return 'mysterious';
39
+ }
40
+ // --- Spawning ---
41
+ /** Build a subject descriptor from a profile. */
42
+ function descriptorFromProfile(profile) {
43
+ const injuryNames = profile.injuries.map((i) => i.name);
44
+ return buildPlayerDescriptor(profile.build.name, profile.build.archetypeId, profile.progression.level, injuryNames, profile.custom.title);
45
+ }
46
+ /** Spawn a player rumor from a milestone event. */
47
+ export function spawnPlayerRumor(milestone, profile, originFactionId, originDistrictId, tick = 0) {
48
+ return {
49
+ id: nextRumorId(),
50
+ claim: milestone.label,
51
+ subjectDescriptor: descriptorFromProfile(profile),
52
+ sourceEvent: 'milestone',
53
+ sourceMilestone: milestone.label,
54
+ originFactionId,
55
+ originDistrictId,
56
+ confidence: 1.0,
57
+ distortion: 0,
58
+ mutationCount: 0,
59
+ valence: deriveRumorValence(milestone.tags),
60
+ spreadTo: originFactionId ? [originFactionId] : [],
61
+ originTick: tick,
62
+ };
63
+ }
64
+ /** Spawn a player rumor from a reputation change event. */
65
+ export function spawnReputationRumor(factionId, delta, factionName, profile, districtId, tick = 0) {
66
+ const claim = delta < 0
67
+ ? `angered the ${factionName}`
68
+ : `honored by the ${factionName}`;
69
+ const valence = delta < 0 ? 'fearsome' : 'heroic';
70
+ return {
71
+ id: nextRumorId(),
72
+ claim,
73
+ subjectDescriptor: descriptorFromProfile(profile),
74
+ sourceEvent: 'reputation',
75
+ originFactionId: factionId,
76
+ originDistrictId: districtId,
77
+ confidence: 0.9,
78
+ distortion: 0,
79
+ mutationCount: 0,
80
+ valence,
81
+ spreadTo: [factionId],
82
+ originTick: tick,
83
+ };
84
+ }
85
+ // --- Propagation ---
86
+ /**
87
+ * Propagate a rumor to a new faction.
88
+ * Returns a new rumor with the target added to spreadTo, confidence decayed,
89
+ * and possible mutation applied.
90
+ */
91
+ export function propagateRumor(rumor, targetFactionId, distortionRate = BASE_DISTORTION_RATE) {
92
+ const newConfidence = rumor.confidence * CONFIDENCE_DECAY;
93
+ const newDistortion = Math.min(1, rumor.distortion + distortionRate);
94
+ let propagated = {
95
+ ...rumor,
96
+ confidence: newConfidence,
97
+ distortion: newDistortion,
98
+ spreadTo: [...rumor.spreadTo, targetFactionId],
99
+ };
100
+ // Mutation chance based on distortion level
101
+ if (shouldMutate(propagated)) {
102
+ const result = mutateRumorClaim(propagated);
103
+ propagated = result.rumor;
104
+ }
105
+ return propagated;
106
+ }
107
+ /** Determine if a rumor should mutate during propagation. */
108
+ export function shouldMutate(rumor) {
109
+ // Higher distortion = higher mutation chance
110
+ // Base 10% + distortion bonus
111
+ const chance = MUTATION_THRESHOLD + rumor.distortion * 0.15;
112
+ // Deterministic based on mutation count + confidence for reproducibility
113
+ const seed = (rumor.mutationCount * 7 + Math.round(rumor.confidence * 100)) % 100;
114
+ return seed < chance * 100;
115
+ }
116
+ // --- Mutation ---
117
+ /**
118
+ * Apply a structured mutation to a rumor's claim.
119
+ * Returns the mutated rumor and a record of what changed.
120
+ */
121
+ export function mutateRumorClaim(rumor) {
122
+ // Alternate between mutation types based on mutation count
123
+ const mutationType = rumor.mutationCount % 3;
124
+ if (mutationType === 0) {
125
+ // Exaggerate: replace a verb in the claim
126
+ const exaggerated = exaggerateClaim(rumor.claim);
127
+ if (exaggerated !== rumor.claim) {
128
+ return {
129
+ rumor: { ...rumor, claim: exaggerated, mutationCount: rumor.mutationCount + 1 },
130
+ mutation: { type: 'exaggerate', field: 'claim', before: rumor.claim, after: exaggerated },
131
+ };
132
+ }
133
+ }
134
+ if (mutationType === 1) {
135
+ // Invert valence
136
+ const newValence = VALENCE_INVERSIONS[rumor.valence];
137
+ return {
138
+ rumor: { ...rumor, valence: newValence, mutationCount: rumor.mutationCount + 1 },
139
+ mutation: { type: 'invert', field: 'valence', before: rumor.valence, after: newValence },
140
+ };
141
+ }
142
+ // Conflate: modify the descriptor
143
+ const newDescriptor = `${rumor.subjectDescriptor}, whose deeds grow stranger in the telling`;
144
+ return {
145
+ rumor: { ...rumor, subjectDescriptor: newDescriptor, mutationCount: rumor.mutationCount + 1 },
146
+ mutation: { type: 'conflate', field: 'claim', before: rumor.subjectDescriptor, after: newDescriptor },
147
+ };
148
+ }
149
+ function exaggerateClaim(claim) {
150
+ const lower = claim.toLowerCase();
151
+ for (const [original, exaggerated] of Object.entries(CLAIM_EXAGGERATIONS)) {
152
+ if (lower.includes(original)) {
153
+ return claim.replace(new RegExp(original, 'i'), exaggerated);
154
+ }
155
+ }
156
+ return claim;
157
+ }
158
+ // --- Queries ---
159
+ /** Get all rumors known to a specific faction (originated or spread to). */
160
+ export function getRumorsKnownToFaction(rumors, factionId) {
161
+ return rumors.filter((r) => r.originFactionId === factionId || r.spreadTo.includes(factionId));
162
+ }
163
+ /** Get all rumors that originated in a specific district. */
164
+ export function getRumorsInDistrict(rumors, districtId) {
165
+ return rumors.filter((r) => r.originDistrictId === districtId);
166
+ }
167
+ // --- Director Display ---
168
+ /** Format a single rumor for the director /rumors view. */
169
+ export function formatRumorForDirector(rumor) {
170
+ const conf = Math.round(rumor.confidence * 100);
171
+ const dist = Math.round(rumor.distortion * 100);
172
+ const spread = rumor.spreadTo.length > 0 ? rumor.spreadTo.join(' → ') : 'none';
173
+ const parts = [
174
+ ` "${rumor.claim}"`,
175
+ ` Subject: ${rumor.subjectDescriptor}`,
176
+ ` Valence: ${rumor.valence} | Confidence: ${conf}% | Distortion: ${dist}%`,
177
+ ` Origin: ${rumor.originFactionId ?? '?'} / ${rumor.originDistrictId ?? '?'} (tick ${rumor.originTick})`,
178
+ ` Spread: ${spread}`,
179
+ ` Mutations: ${rumor.mutationCount}`,
180
+ ];
181
+ if (rumor.sourceMilestone) {
182
+ parts.splice(2, 0, ` Source: milestone "${rumor.sourceMilestone}"`);
183
+ }
184
+ return parts.join('\n');
185
+ }
186
+ //# sourceMappingURL=player-rumor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"player-rumor.js","sourceRoot":"","sources":["../src/player-rumor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,43 @@
1
+ export type Stance = 'hostile' | 'fearful' | 'awed' | 'pitying' | 'opportunistic' | 'kinship' | 'neutral';
2
+ export type ReputationConsequence = {
3
+ /** Price multiplier: < 1 = discount, > 1 = markup */
4
+ priceModifier: number;
5
+ /** Access level granted by the faction */
6
+ accessLevel: 'denied' | 'restricted' | 'normal' | 'privileged';
7
+ /** One-liner for prompt injection describing faction attitude */
8
+ dialogueBias: string;
9
+ };
10
+ export type TitleEvolution = {
11
+ /** Prepend to current title */
12
+ prefix?: string;
13
+ /** Append to current title */
14
+ suffix?: string;
15
+ /** Full replacement (overrides prefix/suffix) */
16
+ replace?: string;
17
+ /** All of these milestone tags must be present */
18
+ requiredTags: string[];
19
+ /** Minimum count of each required tag (default: 1) */
20
+ minCount?: number;
21
+ };
22
+ /**
23
+ * Derive an NPC's social stance toward the player.
24
+ * Priority cascade — first matching condition wins.
25
+ */
26
+ export declare function deriveStance(reputationValue: number, cognition: {
27
+ morale: number;
28
+ suspicion: number;
29
+ }, alertLevel: number): Stance;
30
+ /**
31
+ * Map a reputation value to mechanical consequences.
32
+ */
33
+ export declare function getReputationConsequence(reputationValue: number): ReputationConsequence;
34
+ /**
35
+ * Check if milestone tags qualify for a title evolution.
36
+ * Returns the evolved title, or the current title if no evolution matches.
37
+ */
38
+ export declare function evolveTitle(currentTitle: string | undefined, milestoneTags: string[], evolutions: TitleEvolution[]): string | undefined;
39
+ /**
40
+ * Build a rumorized identity string for how NPCs describe the player.
41
+ */
42
+ export declare function buildPlayerDescriptor(name: string, archetypeId: string, level: number, injuryNames: string[], titleStr?: string): string;
43
+ //# sourceMappingURL=social-consequence.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-consequence.d.ts","sourceRoot":"","sources":["../src/social-consequence.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,MAAM,GACd,SAAS,GACT,SAAS,GACT,MAAM,GACN,SAAS,GACT,eAAe,GACf,SAAS,GACT,SAAS,CAAC;AAEd,MAAM,MAAM,qBAAqB,GAAG;IAClC,qDAAqD;IACrD,aAAa,EAAE,MAAM,CAAC;IACtB,0CAA0C;IAC1C,WAAW,EAAE,QAAQ,GAAG,YAAY,GAAG,QAAQ,GAAG,YAAY,CAAC;IAC/D,iEAAiE;IACjE,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,+BAA+B;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,8BAA8B;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,kDAAkD;IAClD,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AAIF;;;GAGG;AACH,wBAAgB,YAAY,CAC1B,eAAe,EAAE,MAAM,EACvB,SAAS,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,EAChD,UAAU,EAAE,MAAM,GACjB,MAAM,CAQR;AAID;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,eAAe,EAAE,MAAM,GAAG,qBAAqB,CAcvF;AAID;;;GAGG;AACH,wBAAgB,WAAW,CACzB,YAAY,EAAE,MAAM,GAAG,SAAS,EAChC,aAAa,EAAE,MAAM,EAAE,EACvB,UAAU,EAAE,cAAc,EAAE,GAC3B,MAAM,GAAG,SAAS,CAqBpB;AAID;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EAAE,EACrB,QAAQ,CAAC,EAAE,MAAM,GAChB,MAAM,CAgBR"}
@@ -0,0 +1,87 @@
1
+ // social-consequence — pure helpers for deriving social reactions
2
+ // No module registration; operates on existing cognition/faction/reputation data.
3
+ // --- Stance Derivation ---
4
+ /**
5
+ * Derive an NPC's social stance toward the player.
6
+ * Priority cascade — first matching condition wins.
7
+ */
8
+ export function deriveStance(reputationValue, cognition, alertLevel) {
9
+ if (reputationValue <= -60)
10
+ return 'hostile';
11
+ if (cognition.suspicion >= 80)
12
+ return 'fearful';
13
+ if (reputationValue >= 60)
14
+ return 'awed';
15
+ if (cognition.morale <= 20)
16
+ return 'pitying';
17
+ if (alertLevel >= 50 && reputationValue < 0)
18
+ return 'opportunistic';
19
+ if (reputationValue >= 30)
20
+ return 'kinship';
21
+ return 'neutral';
22
+ }
23
+ // --- Reputation Consequences ---
24
+ /**
25
+ * Map a reputation value to mechanical consequences.
26
+ */
27
+ export function getReputationConsequence(reputationValue) {
28
+ if (reputationValue <= -60) {
29
+ return { priceModifier: 1.5, accessLevel: 'denied', dialogueBias: 'This one is not welcome here.' };
30
+ }
31
+ if (reputationValue <= -20) {
32
+ return { priceModifier: 1.3, accessLevel: 'restricted', dialogueBias: 'Watch this one carefully.' };
33
+ }
34
+ if (reputationValue >= 60) {
35
+ return { priceModifier: 0.7, accessLevel: 'privileged', dialogueBias: 'We are honored by your presence.' };
36
+ }
37
+ if (reputationValue >= 20) {
38
+ return { priceModifier: 0.9, accessLevel: 'normal', dialogueBias: 'A friend of the faction.' };
39
+ }
40
+ return { priceModifier: 1.0, accessLevel: 'normal', dialogueBias: '' };
41
+ }
42
+ // --- Title Evolution ---
43
+ /**
44
+ * Check if milestone tags qualify for a title evolution.
45
+ * Returns the evolved title, or the current title if no evolution matches.
46
+ */
47
+ export function evolveTitle(currentTitle, milestoneTags, evolutions) {
48
+ // Count tag occurrences
49
+ const tagCounts = new Map();
50
+ for (const tag of milestoneTags) {
51
+ tagCounts.set(tag, (tagCounts.get(tag) ?? 0) + 1);
52
+ }
53
+ for (const evo of evolutions) {
54
+ const minCount = evo.minCount ?? 1;
55
+ const qualifies = evo.requiredTags.every((tag) => (tagCounts.get(tag) ?? 0) >= minCount);
56
+ if (!qualifies)
57
+ continue;
58
+ if (evo.replace)
59
+ return evo.replace;
60
+ if (!currentTitle)
61
+ continue;
62
+ if (evo.prefix)
63
+ return `${evo.prefix} ${currentTitle}`;
64
+ if (evo.suffix)
65
+ return `${currentTitle} ${evo.suffix}`;
66
+ }
67
+ return currentTitle;
68
+ }
69
+ // --- Player Descriptor (for rumors) ---
70
+ /**
71
+ * Build a rumorized identity string for how NPCs describe the player.
72
+ */
73
+ export function buildPlayerDescriptor(name, archetypeId, level, injuryNames, titleStr) {
74
+ const parts = [];
75
+ if (titleStr) {
76
+ parts.push(`${name} "${titleStr}"`);
77
+ }
78
+ else {
79
+ parts.push(name);
80
+ }
81
+ parts.push(`a level ${level} ${archetypeId}`);
82
+ if (injuryNames.length > 0) {
83
+ parts.push(`bearing ${injuryNames.join(' and ')}`);
84
+ }
85
+ return parts.join(', ');
86
+ }
87
+ //# sourceMappingURL=social-consequence.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"social-consequence.js","sourceRoot":"","sources":["../src/social-consequence.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.0",
3
+ "version": "2.0.2",
4
4
  "description": "AI RPG Engine built-in modules: combat, dialogue, inventory, traversal, status",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -11,7 +11,9 @@
11
11
  "import": "./dist/index.js"
12
12
  }
13
13
  },
14
- "files": ["dist"],
14
+ "files": [
15
+ "dist"
16
+ ],
15
17
  "scripts": {
16
18
  "build": "tsc",
17
19
  "test": "vitest run"
@@ -28,7 +30,15 @@
28
30
  "url": "https://github.com/mcp-tool-shop-org/ai-rpg-engine.git",
29
31
  "directory": "packages/modules"
30
32
  },
31
- "keywords": ["rpg", "game-engine", "simulation", "combat", "perception", "cognition", "factions"],
33
+ "keywords": [
34
+ "rpg",
35
+ "game-engine",
36
+ "simulation",
37
+ "combat",
38
+ "perception",
39
+ "cognition",
40
+ "factions"
41
+ ],
32
42
  "bugs": {
33
43
  "url": "https://github.com/mcp-tool-shop-org/ai-rpg-engine/issues"
34
44
  },