rpg-event-generator 4.0.1 → 5.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/demo.js +7 -2
- package/dist/RPGEventGenerator.d.ts +1 -1
- package/dist/RPGEventGenerator.d.ts.map +1 -1
- package/dist/RPGEventGenerator.js +7 -7
- package/dist/RPGEventGenerator.js.map +1 -1
- package/dist/chains/ChainSystem.d.ts +3 -2
- package/dist/chains/ChainSystem.d.ts.map +1 -1
- package/dist/chains/ChainSystem.js +4 -4
- package/dist/chains/ChainSystem.js.map +1 -1
- package/dist/core/DescriptionFragmentLibrary.d.ts +3 -2
- package/dist/core/DescriptionFragmentLibrary.d.ts.map +1 -1
- package/dist/core/DescriptionFragmentLibrary.js +4 -4
- package/dist/core/DescriptionFragmentLibrary.js.map +1 -1
- package/dist/core/GeneratorCore.d.ts +3 -2
- package/dist/core/GeneratorCore.d.ts.map +1 -1
- package/dist/core/GeneratorCore.js +23 -23
- package/dist/core/GeneratorCore.js.map +1 -1
- package/dist/core/GrammarRulesEngine.d.ts +3 -2
- package/dist/core/GrammarRulesEngine.d.ts.map +1 -1
- package/dist/core/GrammarRulesEngine.js +4 -4
- package/dist/core/GrammarRulesEngine.js.map +1 -1
- package/dist/core/SentenceBuilder.d.ts +3 -2
- package/dist/core/SentenceBuilder.d.ts.map +1 -1
- package/dist/core/SentenceBuilder.js +7 -36
- package/dist/core/SentenceBuilder.js.map +1 -1
- package/dist/environment/EnvironmentalSystem.d.ts +3 -2
- package/dist/environment/EnvironmentalSystem.d.ts.map +1 -1
- package/dist/environment/EnvironmentalSystem.js +4 -4
- package/dist/environment/EnvironmentalSystem.js.map +1 -1
- package/dist/src/types/config.d.ts +3 -1
- package/dist/src/types/config.d.ts.map +1 -1
- package/dist/src/utils/random.d.ts +73 -0
- package/dist/src/utils/random.d.ts.map +1 -0
- package/dist/src/utils/random.js +182 -0
- package/dist/src/utils/random.js.map +1 -0
- package/dist/time/TimeSystem.d.ts +3 -2
- package/dist/time/TimeSystem.d.ts.map +1 -1
- package/dist/time/TimeSystem.js +6 -6
- package/dist/time/TimeSystem.js.map +1 -1
- package/dist/types/config.d.ts +3 -1
- package/dist/types/config.d.ts.map +1 -1
- package/dist/utils/random.d.ts +23 -2
- package/dist/utils/random.d.ts.map +1 -1
- package/dist/utils/random.js +62 -5
- package/dist/utils/random.js.map +1 -1
- package/dist/utils/version.d.ts +1 -1
- package/dist/utils/version.js +1 -1
- package/dist/world/WorldBuildingSystem.d.ts +1 -1
- package/dist/world/WorldBuildingSystem.d.ts.map +1 -1
- package/dist/world/WorldBuildingSystem.js +66 -59
- package/dist/world/WorldBuildingSystem.js.map +1 -1
- package/package.json +1 -5
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TimeSystem.js","sourceRoot":"","sources":["../../src/time/TimeSystem.ts"],"names":[],"mappings":";AAAA,2CAA2C;AAC3C,oDAAoD;;;AAEpD,
|
|
1
|
+
{"version":3,"file":"TimeSystem.js","sourceRoot":"","sources":["../../src/time/TimeSystem.ts"],"names":[],"mappings":"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"}
|
package/dist/types/config.d.ts
CHANGED
|
@@ -2,8 +2,10 @@ import { Template, ChainDefinition } from './templates';
|
|
|
2
2
|
import { NPC } from './npcs';
|
|
3
3
|
import { RuleDefinition } from './rules';
|
|
4
4
|
import { AIEnhancementOptions } from '../ai';
|
|
5
|
+
import { SeededRandom } from '../utils/random';
|
|
5
6
|
export interface GeneratorOptions {
|
|
6
|
-
|
|
7
|
+
/** Injectable seeded RNG for reproducible generation */
|
|
8
|
+
rng?: SeededRandom;
|
|
7
9
|
stateSize?: number;
|
|
8
10
|
trainingData?: string[];
|
|
9
11
|
theme?: string | null;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAE7B,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/random.d.ts
CHANGED
|
@@ -39,14 +39,35 @@ export declare function weightedChoice<T>(items: T[], weights: number[]): T;
|
|
|
39
39
|
*/
|
|
40
40
|
export declare function randomString(length: number): string;
|
|
41
41
|
/**
|
|
42
|
-
*
|
|
42
|
+
* Seeded random number generator for reproducible results
|
|
43
43
|
*/
|
|
44
44
|
export declare class SeededRandom {
|
|
45
45
|
private seed;
|
|
46
|
-
constructor(seed?: number);
|
|
46
|
+
constructor(seed?: number | string);
|
|
47
47
|
next(): number;
|
|
48
48
|
nextInt(min: number, max: number): number;
|
|
49
49
|
nextChoice<T>(array: T[]): T;
|
|
50
50
|
nextBool(probability?: number): boolean;
|
|
51
|
+
pickone<T>(array: T[]): T;
|
|
52
|
+
pickset<T>(array: T[], count: number): T[];
|
|
53
|
+
bool(options: {
|
|
54
|
+
likelihood: number;
|
|
55
|
+
}): boolean;
|
|
56
|
+
integer(options: {
|
|
57
|
+
min: number;
|
|
58
|
+
max: number;
|
|
59
|
+
}): number;
|
|
60
|
+
floating(options: {
|
|
61
|
+
min: number;
|
|
62
|
+
max: number;
|
|
63
|
+
}): number;
|
|
64
|
+
string(options: {
|
|
65
|
+
length: number;
|
|
66
|
+
pool?: string;
|
|
67
|
+
}): string;
|
|
68
|
+
guid(): string;
|
|
69
|
+
shuffle<T>(array: T[]): T[];
|
|
51
70
|
}
|
|
71
|
+
/** Injectable RNG type for generator subsystems */
|
|
72
|
+
export type RandomSource = SeededRandom;
|
|
52
73
|
//# sourceMappingURL=random.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/utils/random.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"random.d.ts","sourceRoot":"","sources":["../../src/utils/random.ts"],"names":[],"mappings":"AAGA;;GAEG;AACH,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,CAE7C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE,CAG/D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,GAAE,MAAY,GAAG,OAAO,CAE7D;AAED;;GAEG;AACH,wBAAgB,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAErE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,IAAI,GAAE,MAAU,EAAE,MAAM,GAAE,MAAU,GAAG,MAAM,CAMzE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,CAM1C;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,CAiBlE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAOnD;AAcD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,IAAI,CAAS;gBAET,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM;IAIlC,IAAI,IAAI,MAAM;IAKd,OAAO,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM;IAIzC,UAAU,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;IAI5B,QAAQ,CAAC,WAAW,GAAE,MAAY,GAAG,OAAO;IAI5C,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC;IAOzB,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC,EAAE;IAU1C,IAAI,CAAC,OAAO,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO;IAI9C,OAAO,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAItD,QAAQ,CAAC,OAAO,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,GAAG,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAIvD,MAAM,CAAC,OAAO,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM;IAS1D,IAAI,IAAI,MAAM;IASd,OAAO,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE;CAQ5B;AAED,mDAAmD;AACnD,MAAM,MAAM,YAAY,GAAG,YAAY,CAAC"}
|
package/dist/utils/random.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
// RPG Event Generator
|
|
2
|
+
// RPG Event Generator v5.0.0 - Random Utility Functions
|
|
3
3
|
// Centralized random number generation and probability helpers
|
|
4
4
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
5
5
|
exports.SeededRandom = void 0;
|
|
@@ -99,15 +99,24 @@ function randomString(length) {
|
|
|
99
99
|
}
|
|
100
100
|
return result;
|
|
101
101
|
}
|
|
102
|
+
function hashSeed(seed) {
|
|
103
|
+
if (typeof seed === 'number') {
|
|
104
|
+
return Math.abs(Math.floor(seed)) % 233280 || 1;
|
|
105
|
+
}
|
|
106
|
+
let hash = 0;
|
|
107
|
+
for (let i = 0; i < seed.length; i++) {
|
|
108
|
+
hash = (hash * 31 + seed.charCodeAt(i)) % 233280;
|
|
109
|
+
}
|
|
110
|
+
return hash || 1;
|
|
111
|
+
}
|
|
102
112
|
/**
|
|
103
|
-
*
|
|
113
|
+
* Seeded random number generator for reproducible results
|
|
104
114
|
*/
|
|
105
115
|
class SeededRandom {
|
|
106
|
-
constructor(seed
|
|
107
|
-
this.seed = seed;
|
|
116
|
+
constructor(seed) {
|
|
117
|
+
this.seed = seed !== undefined ? hashSeed(seed) : Math.floor(Math.random() * 233280);
|
|
108
118
|
}
|
|
109
119
|
next() {
|
|
110
|
-
// Simple LCG (Linear Congruential Generator)
|
|
111
120
|
this.seed = (this.seed * 9301 + 49297) % 233280;
|
|
112
121
|
return this.seed / 233280;
|
|
113
122
|
}
|
|
@@ -120,6 +129,54 @@ class SeededRandom {
|
|
|
120
129
|
nextBool(probability = 0.5) {
|
|
121
130
|
return this.next() < probability;
|
|
122
131
|
}
|
|
132
|
+
pickone(array) {
|
|
133
|
+
if (array.length === 0) {
|
|
134
|
+
throw new Error('Cannot pick from an empty array');
|
|
135
|
+
}
|
|
136
|
+
return this.nextChoice(array);
|
|
137
|
+
}
|
|
138
|
+
pickset(array, count) {
|
|
139
|
+
const n = Math.min(count, array.length);
|
|
140
|
+
const copy = [...array];
|
|
141
|
+
for (let i = 0; i < n; i++) {
|
|
142
|
+
const j = i + this.nextInt(0, copy.length - 1 - i);
|
|
143
|
+
[copy[i], copy[j]] = [copy[j], copy[i]];
|
|
144
|
+
}
|
|
145
|
+
return copy.slice(0, n);
|
|
146
|
+
}
|
|
147
|
+
bool(options) {
|
|
148
|
+
return this.next() < options.likelihood / 100;
|
|
149
|
+
}
|
|
150
|
+
integer(options) {
|
|
151
|
+
return this.nextInt(options.min, options.max);
|
|
152
|
+
}
|
|
153
|
+
floating(options) {
|
|
154
|
+
return this.next() * (options.max - options.min) + options.min;
|
|
155
|
+
}
|
|
156
|
+
string(options) {
|
|
157
|
+
const pool = options.pool ?? 'abcdefghijklmnopqrstuvwxyz0123456789';
|
|
158
|
+
let result = '';
|
|
159
|
+
for (let i = 0; i < options.length; i++) {
|
|
160
|
+
result += pool.charAt(this.nextInt(0, pool.length - 1));
|
|
161
|
+
}
|
|
162
|
+
return result;
|
|
163
|
+
}
|
|
164
|
+
guid() {
|
|
165
|
+
let result = '';
|
|
166
|
+
const hex = '0123456789abcdef';
|
|
167
|
+
for (let i = 0; i < 32; i++) {
|
|
168
|
+
result += hex.charAt(this.nextInt(0, 15));
|
|
169
|
+
}
|
|
170
|
+
return result;
|
|
171
|
+
}
|
|
172
|
+
shuffle(array) {
|
|
173
|
+
const copy = [...array];
|
|
174
|
+
for (let i = copy.length - 1; i > 0; i--) {
|
|
175
|
+
const j = this.nextInt(0, i);
|
|
176
|
+
[copy[i], copy[j]] = [copy[j], copy[i]];
|
|
177
|
+
}
|
|
178
|
+
return copy;
|
|
179
|
+
}
|
|
123
180
|
}
|
|
124
181
|
exports.SeededRandom = SeededRandom;
|
|
125
182
|
//# sourceMappingURL=random.js.map
|
package/dist/utils/random.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../src/utils/random.ts"],"names":[],"mappings":";AAAA,wDAAwD;AACxD,+DAA+D;;;
|
|
1
|
+
{"version":3,"file":"random.js","sourceRoot":"","sources":["../../src/utils/random.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/version.d.ts
CHANGED
package/dist/utils/version.js
CHANGED
|
@@ -7,7 +7,7 @@ export declare class WorldBuildingSystem implements IWorldBuildingSystem {
|
|
|
7
7
|
private historicalEvents;
|
|
8
8
|
private currentYear;
|
|
9
9
|
private historyStartYear;
|
|
10
|
-
private
|
|
10
|
+
private rng;
|
|
11
11
|
private landmarkCounter;
|
|
12
12
|
constructor();
|
|
13
13
|
generateWorld(seedOrOptions?: number | WorldGenerationOptions): {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"WorldBuildingSystem.d.ts","sourceRoot":"","sources":["../../src/world/WorldBuildingSystem.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,WAAW,EACX,YAAY,EACZ,eAAe,EAEf,aAAa,EAEb,sBAAsB,EACvB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAgBrD,YAAY,EAAE,sBAAsB,EAAE,CAAC;AAEvC,qBAAa,mBAAoB,YAAW,oBAAoB;IAC9D,OAAO,CAAC,OAAO,CAA2B;IAC1C,OAAO,CAAC,QAAQ,CAA4B;IAC5C,OAAO,CAAC,gBAAgB,CAAoB;IAC5C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,gBAAgB,CAAS;IACjC,OAAO,CAAC,
|
|
1
|
+
{"version":3,"file":"WorldBuildingSystem.d.ts","sourceRoot":"","sources":["../../src/world/WorldBuildingSystem.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
// RPG Event Generator v4.0.0 - World Building System
|
|
3
3
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
4
|
exports.WorldBuildingSystem = void 0;
|
|
5
|
-
const
|
|
5
|
+
const random_1 = require("../utils/random");
|
|
6
6
|
const worldContent_1 = require("./worldContent");
|
|
7
7
|
class WorldBuildingSystem {
|
|
8
8
|
constructor() {
|
|
@@ -11,7 +11,7 @@ class WorldBuildingSystem {
|
|
|
11
11
|
this.historicalEvents = [];
|
|
12
12
|
this.currentYear = 1000;
|
|
13
13
|
this.historyStartYear = 800;
|
|
14
|
-
this.
|
|
14
|
+
this.rng = new random_1.SeededRandom();
|
|
15
15
|
this.landmarkCounter = 0;
|
|
16
16
|
}
|
|
17
17
|
generateWorld(seedOrOptions) {
|
|
@@ -22,7 +22,7 @@ class WorldBuildingSystem {
|
|
|
22
22
|
this.currentYear = options.currentYear ?? 1000;
|
|
23
23
|
this.historyStartYear = options.historyStartYear ?? 800;
|
|
24
24
|
this.landmarkCounter = 0;
|
|
25
|
-
this.
|
|
25
|
+
this.rng = options.seed !== undefined ? new random_1.SeededRandom(options.seed) : new random_1.SeededRandom();
|
|
26
26
|
const regions = this.generateRegions(options.continentCount ?? 5);
|
|
27
27
|
const factions = this.generateFactions(regions);
|
|
28
28
|
this.initializeRelationships(factions, regions);
|
|
@@ -39,10 +39,10 @@ class WorldBuildingSystem {
|
|
|
39
39
|
generateRegions(continentCount) {
|
|
40
40
|
const regions = [];
|
|
41
41
|
const count = Math.max(2, Math.min(8, continentCount));
|
|
42
|
-
const continents = this.
|
|
42
|
+
const continents = this.rng.pickset(worldContent_1.CONTINENT_NAMES, count);
|
|
43
43
|
continents.forEach((name, i) => {
|
|
44
|
-
const culture = this.
|
|
45
|
-
const climate = this.
|
|
44
|
+
const culture = this.rng.pickone(['Human', 'Elven', 'Dwarven', 'Orcish']);
|
|
45
|
+
const climate = this.rng.pickone(['temperate', 'tropical', 'arctic', 'desert']);
|
|
46
46
|
const continent = {
|
|
47
47
|
id: `continent_${i}`,
|
|
48
48
|
name,
|
|
@@ -50,21 +50,21 @@ class WorldBuildingSystem {
|
|
|
50
50
|
sub_regions: [],
|
|
51
51
|
landmarks: [],
|
|
52
52
|
resources: [],
|
|
53
|
-
population: this.
|
|
53
|
+
population: this.rng.integer({ min: 5000000, max: 14999999 }),
|
|
54
54
|
culture,
|
|
55
55
|
climate,
|
|
56
|
-
political_stability: this.
|
|
57
|
-
economic_prosperity: this.
|
|
56
|
+
political_stability: this.rng.floating({ min: 0.2, max: 1.0 }),
|
|
57
|
+
economic_prosperity: this.rng.floating({ min: 0.2, max: 1.0 })
|
|
58
58
|
};
|
|
59
|
-
const kingdomCount = this.
|
|
59
|
+
const kingdomCount = this.rng.integer({ min: 2, max: 4 });
|
|
60
60
|
const usedPrefixes = new Set();
|
|
61
61
|
for (let j = 0; j < kingdomCount; j++) {
|
|
62
|
-
let prefix = this.
|
|
62
|
+
let prefix = this.rng.pickone(worldContent_1.KINGDOM_PREFIXES);
|
|
63
63
|
while (usedPrefixes.has(prefix) && usedPrefixes.size < worldContent_1.KINGDOM_PREFIXES.length) {
|
|
64
|
-
prefix = this.
|
|
64
|
+
prefix = this.rng.pickone(worldContent_1.KINGDOM_PREFIXES);
|
|
65
65
|
}
|
|
66
66
|
usedPrefixes.add(prefix);
|
|
67
|
-
const suffix = this.
|
|
67
|
+
const suffix = this.rng.pickone(worldContent_1.KINGDOM_SUFFIXES);
|
|
68
68
|
const kingdomId = `kingdom_${i}_${j}`;
|
|
69
69
|
const kingdom = {
|
|
70
70
|
id: kingdomId,
|
|
@@ -72,13 +72,13 @@ class WorldBuildingSystem {
|
|
|
72
72
|
type: 'kingdom',
|
|
73
73
|
parent_region: continent.id,
|
|
74
74
|
sub_regions: [],
|
|
75
|
-
landmarks: this.generateLandmarks(this.
|
|
76
|
-
resources: this.generateResources(this.
|
|
77
|
-
population: this.
|
|
75
|
+
landmarks: this.generateLandmarks(this.rng.integer({ min: 2, max: 4 }), kingdomId, climate, culture),
|
|
76
|
+
resources: this.generateResources(this.rng.integer({ min: 3, max: 6 }), climate),
|
|
77
|
+
population: this.rng.integer({ min: 500000, max: 2499999 }),
|
|
78
78
|
culture,
|
|
79
79
|
climate,
|
|
80
|
-
political_stability: Math.max(0.1, continent.political_stability + this.
|
|
81
|
-
economic_prosperity: Math.max(0.1, continent.economic_prosperity + this.
|
|
80
|
+
political_stability: Math.max(0.1, continent.political_stability + this.rng.floating({ min: -0.2, max: 0.2 })),
|
|
81
|
+
economic_prosperity: Math.max(0.1, continent.economic_prosperity + this.rng.floating({ min: -0.2, max: 0.2 }))
|
|
82
82
|
};
|
|
83
83
|
continent.sub_regions.push(kingdom.id);
|
|
84
84
|
regions.push(kingdom);
|
|
@@ -94,17 +94,17 @@ class WorldBuildingSystem {
|
|
|
94
94
|
];
|
|
95
95
|
const landmarks = [];
|
|
96
96
|
for (let i = 0; i < count; i++) {
|
|
97
|
-
const type = this.
|
|
98
|
-
const adjective = this.
|
|
99
|
-
const noun = this.
|
|
97
|
+
const type = this.rng.pickone(landmarkTypes);
|
|
98
|
+
const adjective = this.rng.pickone(worldContent_1.LANDMARK_ADJECTIVES);
|
|
99
|
+
const noun = this.rng.pickone(worldContent_1.LANDMARK_NOUNS[type]);
|
|
100
100
|
const id = `landmark_${regionId}_${this.landmarkCounter++}`;
|
|
101
101
|
landmarks.push({
|
|
102
102
|
id,
|
|
103
103
|
name: `${adjective} ${noun}`,
|
|
104
104
|
type,
|
|
105
|
-
significance: this.
|
|
105
|
+
significance: this.rng.floating({ min: 0, max: 10 }),
|
|
106
106
|
description: `A ${adjective.toLowerCase()} ${type} sacred to ${culture} folk in the ${climate} lands.`,
|
|
107
|
-
discovered: this.
|
|
107
|
+
discovered: this.rng.bool({ likelihood: 70 })
|
|
108
108
|
});
|
|
109
109
|
}
|
|
110
110
|
return landmarks;
|
|
@@ -115,17 +115,17 @@ class WorldBuildingSystem {
|
|
|
115
115
|
const resources = [];
|
|
116
116
|
const used = new Set();
|
|
117
117
|
for (let i = 0; i < count; i++) {
|
|
118
|
-
let type = this.
|
|
118
|
+
let type = this.rng.pickone(resourceTypes);
|
|
119
119
|
let attempts = 0;
|
|
120
120
|
while (used.has(type) && attempts < 10) {
|
|
121
|
-
type = this.
|
|
121
|
+
type = this.rng.pickone(resourceTypes);
|
|
122
122
|
attempts++;
|
|
123
123
|
}
|
|
124
124
|
used.add(type);
|
|
125
125
|
resources.push({
|
|
126
126
|
type,
|
|
127
|
-
abundance: this.
|
|
128
|
-
quality: this.
|
|
127
|
+
abundance: this.rng.floating({ min: 0, max: 10 }),
|
|
128
|
+
quality: this.rng.floating({ min: 0, max: 10 })
|
|
129
129
|
});
|
|
130
130
|
}
|
|
131
131
|
return resources;
|
|
@@ -145,14 +145,14 @@ class WorldBuildingSystem {
|
|
|
145
145
|
type,
|
|
146
146
|
leader: this.generateLeaderName(kingdom.culture, kingdom.name),
|
|
147
147
|
home_region: kingdom.id,
|
|
148
|
-
influence: this.
|
|
149
|
-
reputation: this.
|
|
148
|
+
influence: this.rng.floating({ min: 0, max: 10 }),
|
|
149
|
+
reputation: this.rng.floating({ min: -5, max: 5 }),
|
|
150
150
|
resources: {
|
|
151
|
-
gold: this.
|
|
152
|
-
influence: this.
|
|
151
|
+
gold: this.rng.integer({ min: 0, max: 9999 }),
|
|
152
|
+
influence: this.rng.integer({ min: 0, max: 99 })
|
|
153
153
|
},
|
|
154
154
|
relationships: {},
|
|
155
|
-
goals: this.
|
|
155
|
+
goals: this.rng.pickset(worldContent_1.FACTION_GOALS[type] ?? worldContent_1.FACTION_GOALS.kingdom, 2)
|
|
156
156
|
};
|
|
157
157
|
factions.push(faction);
|
|
158
158
|
});
|
|
@@ -164,23 +164,23 @@ class WorldBuildingSystem {
|
|
|
164
164
|
case 'kingdom':
|
|
165
165
|
return kingdom.name;
|
|
166
166
|
case 'guild':
|
|
167
|
-
return `The ${this.
|
|
167
|
+
return `The ${this.rng.pickone(worldContent_1.LANDMARK_ADJECTIVES)} ${this.rng.pickone(['Smiths', 'Arcane', 'Shipwrights', 'Healers'])} Guild`;
|
|
168
168
|
case 'cult':
|
|
169
|
-
return `Cult of ${this.
|
|
169
|
+
return `Cult of ${this.rng.pickone(worldContent_1.CULT_DEITIES)}`;
|
|
170
170
|
case 'tribe':
|
|
171
|
-
return `${shortName} ${this.
|
|
171
|
+
return `${shortName} ${this.rng.pickone(['Clans', 'Horde', 'Kin', 'People'])}`;
|
|
172
172
|
case 'merchants':
|
|
173
173
|
return `${shortName} Merchant League`;
|
|
174
174
|
case 'nobles':
|
|
175
|
-
return `House ${this.
|
|
175
|
+
return `House ${this.rng.pickone(worldContent_1.LEADER_NAMES)} of ${kingdom.name.split(' of ')[1] ?? kingdom.name}`;
|
|
176
176
|
default:
|
|
177
177
|
return kingdom.name;
|
|
178
178
|
}
|
|
179
179
|
}
|
|
180
180
|
generateLeaderName(culture, realm) {
|
|
181
181
|
const titles = worldContent_1.LEADER_TITLES[culture] ?? worldContent_1.LEADER_TITLES.Human;
|
|
182
|
-
const title = this.
|
|
183
|
-
const name = this.
|
|
182
|
+
const title = this.rng.pickone(titles);
|
|
183
|
+
const name = this.rng.pickone(worldContent_1.LEADER_NAMES);
|
|
184
184
|
return `${title} ${name} of ${realm.split(' of ')[0]}`;
|
|
185
185
|
}
|
|
186
186
|
initializeRelationships(factions, regions) {
|
|
@@ -188,11 +188,11 @@ class WorldBuildingSystem {
|
|
|
188
188
|
factions.forEach(other => {
|
|
189
189
|
if (faction.id === other.id)
|
|
190
190
|
return;
|
|
191
|
-
let relationship = this.
|
|
191
|
+
let relationship = this.rng.floating({ min: -5, max: 5 });
|
|
192
192
|
if (this.areNeighborFactions(faction, other, regions)) {
|
|
193
|
-
relationship = this.
|
|
194
|
-
? this.
|
|
195
|
-
: this.
|
|
193
|
+
relationship = this.rng.bool({ likelihood: 45 })
|
|
194
|
+
? this.rng.floating({ min: -5, max: -0.5 })
|
|
195
|
+
: this.rng.floating({ min: 0.5, max: 5 });
|
|
196
196
|
}
|
|
197
197
|
faction.relationships[other.id] = relationship;
|
|
198
198
|
});
|
|
@@ -208,13 +208,20 @@ class WorldBuildingSystem {
|
|
|
208
208
|
}
|
|
209
209
|
generateInitialHistory(regions, factions) {
|
|
210
210
|
const events = [];
|
|
211
|
-
for (let year = this.historyStartYear; year <= this.currentYear; year += 50 + this.
|
|
212
|
-
if (this.
|
|
211
|
+
for (let year = this.historyStartYear; year <= this.currentYear; year += 50 + this.rng.integer({ min: 0, max: 99 })) {
|
|
212
|
+
if (this.rng.bool({ likelihood: 30 })) {
|
|
213
213
|
const event = this.generateHistoricalEvent(year, regions, factions);
|
|
214
214
|
events.push(event);
|
|
215
215
|
this.applyHistoricalConsequences(event);
|
|
216
216
|
}
|
|
217
217
|
}
|
|
218
|
+
if (events.length === 0) {
|
|
219
|
+
const span = Math.max(1, this.currentYear - this.historyStartYear);
|
|
220
|
+
const year = this.historyStartYear + this.rng.integer({ min: 0, max: span });
|
|
221
|
+
const event = this.generateHistoricalEvent(year, regions, factions);
|
|
222
|
+
events.push(event);
|
|
223
|
+
this.applyHistoricalConsequences(event);
|
|
224
|
+
}
|
|
218
225
|
return events;
|
|
219
226
|
}
|
|
220
227
|
generateHistoricalEvent(year, regions, factions) {
|
|
@@ -222,7 +229,7 @@ class WorldBuildingSystem {
|
|
|
222
229
|
'war', 'alliance', 'discovery', 'disaster', 'ascension', 'fall',
|
|
223
230
|
'plague', 'famine', 'revolution', 'invasion', 'treaty', 'betrayal'
|
|
224
231
|
];
|
|
225
|
-
const eventType = this.
|
|
232
|
+
const eventType = this.rng.pickone(eventTypes);
|
|
226
233
|
const involvedFactions = this.pickFactionsForEvent(eventType, factions);
|
|
227
234
|
const affectedRegions = regions
|
|
228
235
|
.filter(r => r.type === 'kingdom' &&
|
|
@@ -230,7 +237,7 @@ class WorldBuildingSystem {
|
|
|
230
237
|
.map(r => r.id);
|
|
231
238
|
const primaryRegion = regions.find(r => r.id === involvedFactions[0]?.home_region);
|
|
232
239
|
const event = {
|
|
233
|
-
id: `event_${year}_${this.
|
|
240
|
+
id: `event_${year}_${this.rng.string({ length: 9, pool: 'abcdefghijklmnopqrstuvwxyz0123456789' })}`,
|
|
234
241
|
year,
|
|
235
242
|
title: this.generateEventTitle(eventType, involvedFactions, primaryRegion),
|
|
236
243
|
description: this.generateEventDescription(eventType, involvedFactions, primaryRegion),
|
|
@@ -247,12 +254,12 @@ class WorldBuildingSystem {
|
|
|
247
254
|
return [];
|
|
248
255
|
if (factions.length === 1)
|
|
249
256
|
return [factions[0]];
|
|
250
|
-
const shuffled = this.
|
|
257
|
+
const shuffled = this.rng.shuffle([...factions]);
|
|
251
258
|
const pairTypes = [
|
|
252
259
|
'war', 'alliance', 'betrayal', 'treaty', 'invasion'
|
|
253
260
|
];
|
|
254
261
|
if (!pairTypes.includes(eventType)) {
|
|
255
|
-
return [this.
|
|
262
|
+
return [this.rng.pickone(shuffled)];
|
|
256
263
|
}
|
|
257
264
|
if (['war', 'invasion', 'betrayal'].includes(eventType)) {
|
|
258
265
|
for (const faction of shuffled) {
|
|
@@ -261,7 +268,7 @@ class WorldBuildingSystem {
|
|
|
261
268
|
.map(([id]) => this.factions.get(id))
|
|
262
269
|
.filter((f) => !!f);
|
|
263
270
|
if (enemies.length > 0) {
|
|
264
|
-
return [faction, this.
|
|
271
|
+
return [faction, this.rng.pickone(enemies)];
|
|
265
272
|
}
|
|
266
273
|
}
|
|
267
274
|
}
|
|
@@ -272,7 +279,7 @@ class WorldBuildingSystem {
|
|
|
272
279
|
.map(([id]) => this.factions.get(id))
|
|
273
280
|
.filter((f) => !!f);
|
|
274
281
|
if (allies.length > 0) {
|
|
275
|
-
return [faction, this.
|
|
282
|
+
return [faction, this.rng.pickone(allies)];
|
|
276
283
|
}
|
|
277
284
|
}
|
|
278
285
|
}
|
|
@@ -313,9 +320,9 @@ class WorldBuildingSystem {
|
|
|
313
320
|
}
|
|
314
321
|
generateEventDescription(type, factions, region) {
|
|
315
322
|
const templates = worldContent_1.HISTORICAL_TEMPLATES[type];
|
|
316
|
-
const template = templates ? this.
|
|
323
|
+
const template = templates ? this.rng.pickone(templates) : null;
|
|
317
324
|
const landmark = region?.landmarks?.length
|
|
318
|
-
? this.
|
|
325
|
+
? this.rng.pickone(region.landmarks).name
|
|
319
326
|
: 'a border fort';
|
|
320
327
|
const vars = {
|
|
321
328
|
factionA: factions[0]?.name ?? 'Unknown',
|
|
@@ -337,7 +344,7 @@ class WorldBuildingSystem {
|
|
|
337
344
|
generateAdvancedConsequences(eventType, factions, regionIds, allRegions) {
|
|
338
345
|
const consequences = [];
|
|
339
346
|
factions.forEach(faction => {
|
|
340
|
-
const baseChange = this.
|
|
347
|
+
const baseChange = this.rng.floating({ min: -0.5, max: 0.5 });
|
|
341
348
|
switch (eventType) {
|
|
342
349
|
case 'war':
|
|
343
350
|
consequences.push({
|
|
@@ -377,7 +384,7 @@ class WorldBuildingSystem {
|
|
|
377
384
|
target_id: faction.id,
|
|
378
385
|
property: 'resources.gold',
|
|
379
386
|
old_value: faction.resources.gold,
|
|
380
|
-
new_value: faction.resources.gold + this.
|
|
387
|
+
new_value: faction.resources.gold + this.rng.integer({ min: 0, max: 9999 })
|
|
381
388
|
});
|
|
382
389
|
consequences.push({
|
|
383
390
|
type: 'faction_change',
|
|
@@ -392,7 +399,7 @@ class WorldBuildingSystem {
|
|
|
392
399
|
case 'famine': {
|
|
393
400
|
const populationRegion = allRegions.find(r => r.id === faction.home_region);
|
|
394
401
|
if (populationRegion) {
|
|
395
|
-
const populationLoss = Math.floor(populationRegion.population * (0.05 + this.
|
|
402
|
+
const populationLoss = Math.floor(populationRegion.population * (0.05 + this.rng.floating({ min: 0, max: 0.15 })));
|
|
396
403
|
consequences.push({
|
|
397
404
|
type: 'region_change',
|
|
398
405
|
target_id: faction.home_region,
|
|
@@ -439,7 +446,7 @@ class WorldBuildingSystem {
|
|
|
439
446
|
target_id: regionId,
|
|
440
447
|
property: 'political_stability',
|
|
441
448
|
old_value: region.political_stability,
|
|
442
|
-
new_value: Math.max(0.1, region.political_stability - this.
|
|
449
|
+
new_value: Math.max(0.1, region.political_stability - this.rng.floating({ min: 0, max: 0.3 }))
|
|
443
450
|
});
|
|
444
451
|
}
|
|
445
452
|
});
|
|
@@ -552,7 +559,7 @@ class WorldBuildingSystem {
|
|
|
552
559
|
const factions = Array.from(this.factions.values());
|
|
553
560
|
for (let i = 0; i < years; i++) {
|
|
554
561
|
this.currentYear++;
|
|
555
|
-
if (this.
|
|
562
|
+
if (this.rng.bool({ likelihood: 20 })) {
|
|
556
563
|
const event = this.generateHistoricalEvent(this.currentYear, regions, factions);
|
|
557
564
|
newEvents.push(event);
|
|
558
565
|
this.historicalEvents.push(event);
|
|
@@ -623,7 +630,7 @@ class WorldBuildingSystem {
|
|
|
623
630
|
routes.push({
|
|
624
631
|
partner: partner.name,
|
|
625
632
|
volume: Math.floor((relationship + 5) * 10),
|
|
626
|
-
type: this.
|
|
633
|
+
type: this.rng.pickone(types)
|
|
627
634
|
});
|
|
628
635
|
}
|
|
629
636
|
}
|
|
@@ -699,7 +706,7 @@ class WorldBuildingSystem {
|
|
|
699
706
|
baseSignificance *= typeMultipliers[eventType] || 5;
|
|
700
707
|
baseSignificance *= 1 + (factionCount - 1) * 0.5;
|
|
701
708
|
baseSignificance *= 1 + (regionCount - 1) * 0.3;
|
|
702
|
-
return Math.min(10, Math.max(1, baseSignificance + this.
|
|
709
|
+
return Math.min(10, Math.max(1, baseSignificance + this.rng.floating({ min: -1, max: 1 })));
|
|
703
710
|
}
|
|
704
711
|
getRegionResources(regionId) {
|
|
705
712
|
return this.regions.get(regionId)?.resources ?? [];
|