rpg-event-generator 3.1.1 → 4.0.1

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.
Files changed (66) hide show
  1. package/README.md +48 -298
  2. package/demo.js +75 -1055
  3. package/dist/RPGEventGenerator.d.ts +24 -2
  4. package/dist/RPGEventGenerator.d.ts.map +1 -1
  5. package/dist/RPGEventGenerator.js +47 -21
  6. package/dist/RPGEventGenerator.js.map +1 -1
  7. package/dist/chains/ChainSystem.js +1 -1
  8. package/dist/chains/index.js +1 -1
  9. package/dist/core/ContextAnalyzer.js +1 -1
  10. package/dist/core/DifficultyScaler.js +1 -1
  11. package/dist/core/GeneratorCore.d.ts +19 -112
  12. package/dist/core/GeneratorCore.d.ts.map +1 -1
  13. package/dist/core/GeneratorCore.js +1817 -1437
  14. package/dist/core/GeneratorCore.js.map +1 -1
  15. package/dist/core/MarkovEngine.js +1 -1
  16. package/dist/core/index.js +1 -1
  17. package/dist/database/MemoryDatabaseAdapter.js +1 -1
  18. package/dist/database/TemplateDatabase.js +1 -1
  19. package/dist/environment/EnvironmentalSystem.d.ts +2 -0
  20. package/dist/environment/EnvironmentalSystem.d.ts.map +1 -1
  21. package/dist/environment/EnvironmentalSystem.js +46 -10
  22. package/dist/environment/EnvironmentalSystem.js.map +1 -1
  23. package/dist/environment/index.js +1 -1
  24. package/dist/index.js +1 -1
  25. package/dist/interfaces/systems.d.ts +1 -1
  26. package/dist/interfaces/systems.d.ts.map +1 -1
  27. package/dist/localization/LocalizationSystem.js +1 -1
  28. package/dist/localization/index.js +1 -1
  29. package/dist/relationships/RelationshipSystem.js +1 -1
  30. package/dist/relationships/index.js +1 -1
  31. package/dist/rules/RuleEngine.js +1 -1
  32. package/dist/rules/index.js +1 -1
  33. package/dist/src/types/world.d.ts +9 -0
  34. package/dist/src/types/world.d.ts.map +1 -1
  35. package/dist/templates/TemplateSystem.js +1 -1
  36. package/dist/templates/index.js +1 -1
  37. package/dist/time/TimeSystem.js +1 -1
  38. package/dist/time/index.js +1 -1
  39. package/dist/types/world.d.ts +9 -0
  40. package/dist/types/world.d.ts.map +1 -1
  41. package/dist/utils/array.js +1 -1
  42. package/dist/utils/constants.js +1 -1
  43. package/dist/utils/file.js +1 -1
  44. package/dist/utils/index.d.ts +1 -0
  45. package/dist/utils/index.d.ts.map +1 -1
  46. package/dist/utils/index.js +2 -1
  47. package/dist/utils/index.js.map +1 -1
  48. package/dist/utils/random.js +1 -1
  49. package/dist/utils/text.js +1 -1
  50. package/dist/utils/validation.js +1 -1
  51. package/dist/utils/version.d.ts +8 -0
  52. package/dist/utils/version.d.ts.map +1 -0
  53. package/dist/utils/version.js +11 -0
  54. package/dist/utils/version.js.map +1 -0
  55. package/dist/world/WorldBuildingSystem.d.ts +16 -2
  56. package/dist/world/WorldBuildingSystem.d.ts.map +1 -1
  57. package/dist/world/WorldBuildingSystem.js +357 -155
  58. package/dist/world/WorldBuildingSystem.js.map +1 -1
  59. package/dist/world/index.d.ts +1 -1
  60. package/dist/world/index.d.ts.map +1 -1
  61. package/dist/world/index.js.map +1 -1
  62. package/dist/world/worldContent.d.ts +13 -0
  63. package/dist/world/worldContent.d.ts.map +1 -0
  64. package/dist/world/worldContent.js +109 -0
  65. package/dist/world/worldContent.js.map +1 -0
  66. package/package.json +1 -1
@@ -1,68 +1,26 @@
1
1
  "use strict";
2
- // RPG Event Generator v3.0.0 - Core Generator
3
- // Main event generation logic combining all components
2
+ // GeneratorCore - RPG event generation (v4)
4
3
  Object.defineProperty(exports, "__esModule", { value: true });
5
4
  exports.GeneratorCore = void 0;
6
5
  const chance_1 = require("chance");
7
- const MarkovEngine_1 = require("./MarkovEngine");
8
6
  const ContextAnalyzer_1 = require("./ContextAnalyzer");
9
- const SentenceBuilder_1 = require("./SentenceBuilder");
10
- const GrammarRulesEngine_1 = require("./GrammarRulesEngine");
11
- const DescriptionFragmentLibrary_1 = require("./DescriptionFragmentLibrary");
12
- const utils_1 = require("../utils");
13
- let nlp;
14
- try {
15
- nlp = require('compromise');
16
- }
17
- catch (e) {
18
- nlp = null;
19
- }
20
- let natural;
21
- try {
22
- natural = require('natural');
23
- }
24
- catch (e) {
25
- natural = null;
26
- }
27
7
  class GeneratorCore {
28
8
  constructor(options = {}) {
9
+ this.customTitles = {};
10
+ this.customDescriptions = {};
11
+ this.customChoices = {};
29
12
  this.options = options;
30
13
  this.chance = options.chance || new chance_1.Chance();
31
- this.markovEngine = new MarkovEngine_1.MarkovEngine({ stateSize: options.stateSize });
32
14
  this.contextAnalyzer = new ContextAnalyzer_1.ContextAnalyzer();
33
- this.sentenceBuilder = new SentenceBuilder_1.SentenceBuilder(this.chance);
34
- this.grammarRulesEngine = new GrammarRulesEngine_1.GrammarRulesEngine(this.sentenceBuilder, this.chance);
35
- this.fragmentLibrary = new DescriptionFragmentLibrary_1.DescriptionFragmentLibrary(this.chance);
36
- this.useSentenceBuilder = options.enableRuleEngine !== false;
37
- if (options.trainingData) {
38
- this.markovEngine.addData(options.trainingData);
39
- }
40
15
  }
41
- /**
42
- * Generate a complete event
43
- */
44
16
  generateEvent(playerContext = {}) {
45
17
  const analyzedContext = this.contextAnalyzer.analyzeContext(playerContext);
46
- const contextModifiers = this.contextAnalyzer.getContextModifiers(analyzedContext);
47
18
  const id = this.generateEventId();
48
- const type = this.selectEventType(analyzedContext, contextModifiers.eventTypePreferences);
49
- const difficulty = this.calculateDifficulty(analyzedContext, contextModifiers.difficultyModifier);
50
- const generationContext = {
51
- type,
52
- analyzedContext,
53
- contextModifiers,
54
- difficulty
55
- };
56
- let title = this.generateTitle(type, analyzedContext, generationContext);
57
- let description = this.generateDescription(title, type, analyzedContext, generationContext);
58
- let coherenceAttempts = 0;
59
- const maxCoherenceAttempts = 3;
60
- while (!this.validateCoherence(title, description, type) && coherenceAttempts < maxCoherenceAttempts) {
61
- title = this.generateTitle(type, analyzedContext, generationContext);
62
- description = this.generateDescription(title, type, analyzedContext, generationContext);
63
- coherenceAttempts++;
64
- }
65
- const choices = this.generateChoices(type, difficulty, analyzedContext, contextModifiers.rewardModifier);
19
+ const type = this.selectEventType(analyzedContext);
20
+ const difficulty = this.calculateDifficulty(analyzedContext);
21
+ const title = this.generateTitle(type, analyzedContext);
22
+ const description = this.generateDescription(title, type, analyzedContext);
23
+ const choices = this.generateChoices(type, difficulty, analyzedContext);
66
24
  return {
67
25
  id,
68
26
  title,
@@ -74,9 +32,6 @@ class GeneratorCore {
74
32
  tags: this.generateTags(type, analyzedContext)
75
33
  };
76
34
  }
77
- /**
78
- * Generate multiple events
79
- */
80
35
  generateEvents(playerContext = {}, count = 1) {
81
36
  const events = [];
82
37
  for (let i = 0; i < count; i++) {
@@ -84,1469 +39,1894 @@ class GeneratorCore {
84
39
  }
85
40
  return events;
86
41
  }
87
- addTrainingData(texts, theme) {
88
- this.markovEngine.addData(texts, theme);
42
+ addTrainingData(data, theme = 'default') {
43
+ if (typeof data === 'object' && !Array.isArray(data)) {
44
+ const options = data;
45
+ if (options.titles) {
46
+ if (!this.customTitles[theme])
47
+ this.customTitles[theme] = {};
48
+ Object.assign(this.customTitles[theme], options.titles);
49
+ }
50
+ if (options.descriptions) {
51
+ if (!this.customDescriptions[theme])
52
+ this.customDescriptions[theme] = {};
53
+ Object.assign(this.customDescriptions[theme], options.descriptions);
54
+ }
55
+ if (options.choices) {
56
+ if (!this.customChoices[theme])
57
+ this.customChoices[theme] = {};
58
+ Object.assign(this.customChoices[theme], options.choices);
59
+ }
60
+ if (options.texts) {
61
+ this.processRawTrainingTexts(options.texts, theme);
62
+ }
63
+ return;
64
+ }
65
+ if (Array.isArray(data)) {
66
+ this.processRawTrainingTexts(data, theme);
67
+ }
68
+ }
69
+ /** @deprecated No-op for backward compatibility; use structured addTrainingData. */
70
+ processRawTrainingTexts(texts, theme) {
71
+ if (this.options.debug) {
72
+ console.warn(`[GeneratorCore] Raw training texts are not supported in v4.0.0. Use structured content (titles, descriptions, choices) instead. Received ${texts.length} texts for theme '${theme}' which will be ignored.`);
73
+ }
74
+ }
75
+ addContextualEnhancements(description, context) {
76
+ const contextEnhancements = [];
77
+ if (context.location && this.chance.bool({ likelihood: 70 })) {
78
+ const locationPrefixes = [
79
+ `In the ${context.location}, `,
80
+ `Deep within the ${context.location}, `,
81
+ `From the heart of the ${context.location}, `,
82
+ `At the edge of the ${context.location}, `,
83
+ `Beneath the ${context.location}, `,
84
+ `Above the ${context.location}, `,
85
+ `Within the shadows of the ${context.location}, `,
86
+ `Amidst the ruins of the ${context.location}, `,
87
+ `At the center of the ${context.location}, `,
88
+ `Surrounded by the ${context.location}, `
89
+ ];
90
+ contextEnhancements.push(this.chance.pickone(locationPrefixes));
91
+ }
92
+ if (context.weather && this.chance.bool({ likelihood: 60 })) {
93
+ const weatherPrefixes = {
94
+ sunny: [
95
+ 'Under the brilliant sun, ',
96
+ 'Beneath clear blue skies, ',
97
+ 'In the warm sunlight, ',
98
+ 'Bathed in golden daylight, '
99
+ ],
100
+ rainy: [
101
+ 'Through the pouring rain, ',
102
+ 'Amidst the stormy downpour, ',
103
+ 'In the relentless rain, ',
104
+ 'Under darkening clouds, '
105
+ ],
106
+ cloudy: [
107
+ 'Beneath overcast skies, ',
108
+ 'In the gloomy overcast, ',
109
+ 'Under clouded heavens, ',
110
+ 'Within the misty clouds, '
111
+ ],
112
+ snowy: [
113
+ 'Through the falling snow, ',
114
+ 'In the winter blizzard, ',
115
+ 'Amidst the snowstorm, ',
116
+ 'Under snow-laden skies, '
117
+ ],
118
+ stormy: [
119
+ 'During the raging storm, ',
120
+ 'Amidst thunder and lightning, ',
121
+ 'In the heart of the tempest, ',
122
+ 'Beneath storm-tossed skies, '
123
+ ],
124
+ foggy: [
125
+ 'Within the thick fog, ',
126
+ 'Through the mysterious mist, ',
127
+ 'In the enveloping haze, ',
128
+ 'Amidst the foggy shroud, '
129
+ ],
130
+ windy: [
131
+ 'Against the howling wind, ',
132
+ 'In the gusting breeze, ',
133
+ 'Amidst the windy gale, ',
134
+ 'Under blustering skies, '
135
+ ]
136
+ };
137
+ const weatherOptions = weatherPrefixes[context.weather] || ['In this weather, '];
138
+ contextEnhancements.push(this.chance.pickone(weatherOptions));
139
+ }
140
+ if (context.timeOfDay && this.chance.bool({ likelihood: 50 })) {
141
+ const timePrefixes = {
142
+ dawn: [
143
+ 'At the break of dawn, ',
144
+ 'In the early morning light, ',
145
+ 'As the sun first rises, ',
146
+ 'During the dawn hours, '
147
+ ],
148
+ morning: [
149
+ 'In the morning hours, ',
150
+ 'During the bright morning, ',
151
+ 'Under the morning sun, ',
152
+ 'In the early daylight, '
153
+ ],
154
+ noon: [
155
+ 'At the height of noon, ',
156
+ 'Under the midday sun, ',
157
+ 'In the noon heat, ',
158
+ 'During midday brightness, '
159
+ ],
160
+ afternoon: [
161
+ 'In the afternoon light, ',
162
+ 'During the waning afternoon, ',
163
+ 'Under the afternoon sun, ',
164
+ 'In the late daylight, '
165
+ ],
166
+ dusk: [
167
+ 'As dusk approaches, ',
168
+ 'In the fading light, ',
169
+ 'During the evening twilight, ',
170
+ 'At dusk\'s edge, '
171
+ ],
172
+ evening: [
173
+ 'In the evening hours, ',
174
+ 'During the gathering darkness, ',
175
+ 'Under evening skies, ',
176
+ 'In the night\'s approach, '
177
+ ],
178
+ night: [
179
+ 'Deep in the night, ',
180
+ 'Under starry skies, ',
181
+ 'In the midnight hour, ',
182
+ 'During the dark night, '
183
+ ],
184
+ midnight: [
185
+ 'At the stroke of midnight, ',
186
+ 'In the dead of night, ',
187
+ 'During midnight darkness, ',
188
+ 'At the midnight hour, '
189
+ ]
190
+ };
191
+ const timeOptions = timePrefixes[context.timeOfDay] || ['At this hour, '];
192
+ contextEnhancements.push(this.chance.pickone(timeOptions));
193
+ }
194
+ if ((context.class || context.race) && this.chance.bool({ likelihood: 40 })) {
195
+ if (context.class) {
196
+ const classContexts = {
197
+ fighter: ['As a warrior, ', 'In your martial tradition, ', 'Drawing on your combat experience, '],
198
+ mage: ['With your arcane knowledge, ', 'Using your magical insight, ', 'Through your spellcasting wisdom, '],
199
+ rogue: ['With your cunning instincts, ', 'Using your stealthy experience, ', 'Drawing on your shadowy skills, '],
200
+ cleric: ['Through your divine connection, ', 'With your spiritual guidance, ', 'Using your holy wisdom, '],
201
+ necromancer: ['With your deathly arts, ', 'Through your necrotic knowledge, ', 'Using your dark magic, ']
202
+ };
203
+ const classOptions = classContexts[context.class] || [`As a ${context.class}, `];
204
+ contextEnhancements.push(this.chance.pickone(classOptions));
205
+ }
206
+ else if (context.race) {
207
+ const raceContexts = {
208
+ human: ['In the human tradition, ', 'Drawing on human ingenuity, ', 'With human determination, '],
209
+ elf: ['With elven grace, ', 'Using elven wisdom, ', 'Through elven perception, '],
210
+ dwarf: ['With dwarven strength, ', 'Using dwarven craftsmanship, ', 'Through dwarven endurance, '],
211
+ halfling: ['With halfling luck, ', 'Using halfling cunning, ', 'Through halfling resourcefulness, '],
212
+ orc: ['With orcish fury, ', 'Using orcish strength, ', 'Through orcish determination, ']
213
+ };
214
+ const raceOptions = raceContexts[context.race] || [`As a ${context.race}, `];
215
+ contextEnhancements.push(this.chance.pickone(raceOptions));
216
+ }
217
+ }
218
+ if (contextEnhancements.length > 0) {
219
+ const selectedEnhancement = this.chance.pickone(contextEnhancements);
220
+ description = selectedEnhancement + description.charAt(0).toLowerCase() + description.slice(1);
221
+ }
222
+ return description;
89
223
  }
90
- /**
91
- * Generate unique event ID
92
- */
93
224
  generateEventId() {
94
225
  return `event_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
95
226
  }
96
- /**
97
- * Select appropriate event type based on context
98
- */
99
- selectEventType(context, preferences) {
100
- const baseTypes = [
101
- 'COMBAT', 'SOCIAL', 'EXPLORATION', 'ECONOMIC',
102
- 'MYSTERY', 'SUPERNATURAL', 'POLITICAL', 'TECHNOLOGICAL'
227
+ selectEventType(context) {
228
+ const types = [
229
+ 'ADVENTURE', 'COMBAT', 'ECONOMIC', 'EXPLORATION', 'GUILD', 'MAGIC', 'MYSTERY',
230
+ 'POLITICAL', 'QUEST', 'SOCIAL', 'SPELLCASTING', 'SUPERNATURAL', 'TECHNOLOGICAL', 'UNDERWORLD'
103
231
  ];
104
- let typePool = [...baseTypes];
105
- if (preferences.length > 0) {
106
- typePool = [...preferences, ...baseTypes];
107
- }
108
- return this.chance.pickone(typePool);
232
+ return this.chance.pickone(types);
109
233
  }
110
- /**
111
- * Calculate event difficulty
112
- */
113
- calculateDifficulty(context, modifier = 0) {
114
- const powerLevel = context.powerLevel + modifier;
115
- if (powerLevel <= utils_1.DIFFICULTY_SETTINGS.easy.powerRange[1])
234
+ calculateDifficulty(context) {
235
+ const powerLevel = context.powerLevel || 50;
236
+ if (powerLevel <= 25)
116
237
  return 'easy';
117
- if (powerLevel <= utils_1.DIFFICULTY_SETTINGS.normal.powerRange[1])
238
+ if (powerLevel <= 50)
118
239
  return 'normal';
119
- if (powerLevel <= utils_1.DIFFICULTY_SETTINGS.hard.powerRange[1])
240
+ if (powerLevel <= 75)
120
241
  return 'hard';
121
242
  return 'legendary';
122
243
  }
123
- /**
124
- * Generate event title with context awareness
125
- */
126
- generateTitle(type, context, generationContext) {
127
- const customProps = Object.keys(context).filter(k => !['age', 'gold', 'influence', 'wealth', 'skills', 'level', 'reputation', 'power_level',
128
- 'career', 'health', 'tags', 'relationships', 'location', 'season', 'stress', 'happiness',
129
- 'karma', 'faith', 'vices', 'secrets', 'ambitions', 'social_standing', 'life_experience',
130
- 'knowledge', 'powerLevel', 'wealthTier', 'influenceTier', 'skillProfile', 'lifeStage',
131
- 'careerPath', 'personality'].includes(k));
132
- const markovStats = this.markovEngine.getStats();
133
- let adjective;
134
- let noun;
135
- if (markovStats.totalTransitions > 0) {
136
- const markovResult = this.markovEngine.generateContextual({ powerLevel: context.powerLevel, complexity: 5 }, generationContext?.theme);
137
- const words = markovResult.string.split(/\s+/).filter(w => w.length > 3);
138
- if (words.length >= 2) {
139
- noun = words[0].charAt(0).toUpperCase() + words[0].slice(1).toLowerCase();
140
- adjective = words[1].charAt(0).toUpperCase() + words[1].slice(1).toLowerCase();
141
- }
142
- else if (words.length === 1) {
143
- noun = words[0].charAt(0).toUpperCase() + words[0].slice(1).toLowerCase();
144
- adjective = this.generateMeaningfulAdjective(context);
145
- }
146
- else {
147
- adjective = this.generateMeaningfulAdjective(context);
148
- noun = this.generateMeaningfulNoun(type, context);
149
- }
150
- }
151
- else {
152
- adjective = this.generateMeaningfulAdjective(context);
153
- noun = this.generateMeaningfulNoun(type, context);
154
- }
155
- let title = `${adjective} ${noun}`;
156
- if (customProps.length > 0 && this.chance.bool({ likelihood: 20 })) {
157
- const randomProp = this.chance.pickone(customProps);
158
- const propValue = context[randomProp];
159
- if (typeof propValue === 'string' && propValue.length > 0 && propValue.length < 10 && propValue.split(/\s+/).length === 1 && !propValue.includes(' ')) {
160
- title = `${adjective} ${propValue.charAt(0).toUpperCase() + propValue.slice(1)} ${noun}`;
161
- }
162
- else if (typeof propValue === 'number' && propValue > 0 && propValue < 1000 && this.chance.bool({ likelihood: 10 })) {
163
- title = `${adjective} ${noun} of ${propValue}`;
164
- }
165
- }
166
- const titleWords = title.split(/\s+/);
167
- if (titleWords.length <= 3 && this.chance.bool({ likelihood: 25 })) {
168
- const locationWords = ['Shadows', 'Darkness', 'Light', 'Fate', 'Destiny', 'Honor', 'Glory', 'Doom', 'Hope', 'Despair'];
169
- const suffixTemplates = [
170
- ` in the ${this.chance.pickone(locationWords)}`,
171
- ` of ${this.chance.pickone(locationWords)}`,
172
- ` ${this.chance.pickone(['Revealed', 'Awakened', 'Unleashed', 'Rising', 'Lost', 'Found', 'Hidden', 'Forgotten'])}`
173
- ];
174
- title += this.chance.pickone(suffixTemplates);
175
- }
176
- const finalTitleWords = title.split(/\s+/);
177
- if (finalTitleWords.length > 4) {
178
- title = `${adjective} ${noun}`;
179
- if (this.chance.bool({ likelihood: 30 })) {
180
- title += ` ${this.chance.pickone(['Revealed', 'Awakened', 'Unleashed', 'Rising', 'Lost', 'Found', 'Hidden'])}`;
244
+ generateTitle(type, context) {
245
+ const themesToCheck = ['default', ...Object.keys(this.customTitles).filter(k => k !== 'default')];
246
+ for (const theme of themesToCheck) {
247
+ const customThemeTitles = this.customTitles[theme];
248
+ if (customThemeTitles && customThemeTitles[type] && customThemeTitles[type].length > 0) {
249
+ return this.chance.pickone(customThemeTitles[type]);
181
250
  }
182
251
  }
183
- return title;
184
- }
185
- generateMeaningfulAdjective(context) {
186
- const baseAdjectives = [
187
- 'Unexpected', 'Mysterious', 'Dangerous', 'Lucrative', 'Critical', 'Extraordinary',
188
- 'Strange', 'Perilous', 'Profitable', 'Urgent', 'Remarkable', 'Unusual',
189
- 'Fascinating', 'Troublesome', 'Rewarding', 'Important', 'Notable', 'Rare',
190
- 'Intriguing', 'Hazardous', 'Valuable', 'Significant', 'Exceptional', 'Unique',
191
- 'Compelling', 'Risky', 'Beneficial', 'Crucial', 'Memorable', 'Uncommon',
192
- 'Forgotten', 'Hidden', 'Ancient', 'Legendary', 'Powerful', 'Mystical',
193
- 'Eerie', 'Enigmatic', 'Formidable', 'Glorious', 'Haunting', 'Immense',
194
- 'Jarring', 'Keen', 'Luminous', 'Majestic', 'Noble', 'Ominous',
195
- 'Pristine', 'Quiet', 'Radiant', 'Savage', 'Terrifying', 'Unfathomable',
196
- 'Vicious', 'Wondrous', 'Xenial', 'Yearning', 'Zealous', 'Abandoned',
197
- 'Bewildering', 'Cunning', 'Dreadful', 'Elegant', 'Fierce', 'Grim',
198
- 'Harmonious', 'Incredible', 'Jubilant', 'Knightly', 'Lethal', 'Magnificent',
199
- 'Nefarious', 'Obedient', 'Peculiar', 'Quixotic', 'Ruthless', 'Serene',
200
- 'Titanic', 'Unbreakable', 'Vengeful', 'Wicked', 'Xenophobic', 'Yielding',
201
- 'Zealous', 'Abysmal', 'Brilliant', 'Cursed', 'Divine', 'Eternal',
202
- 'Furious', 'Glorious', 'Hollow', 'Infinite', 'Jaded', 'Kingly',
203
- 'Lonely', 'Mighty', 'Noble', 'Oracular', 'Proud', 'Quiet',
204
- 'Raging', 'Sacred', 'Tainted', 'Unholy', 'Vast', 'Wise',
205
- 'Xeric', 'Youthful', 'Zany', 'Awe-inspiring', 'Breathtaking', 'Captivating',
206
- 'Daunting', 'Enthralling', 'Formidable', 'Gripping', 'Hypnotic', 'Intense',
207
- 'Jaw-dropping', 'Kaleidoscopic', 'Lavish', 'Mesmerizing', 'Numinous', 'Overwhelming',
208
- 'Phenomenal', 'Quaking', 'Riveting', 'Stunning', 'Transcendent', 'Unforgettable',
209
- 'Vibrant', 'Whimsical', 'Xenodochial', 'Yearning', 'Zestful'
210
- ];
211
- let adjectives = [...baseAdjectives];
212
- if (context.wealthTier === 'poor') {
213
- adjectives.push('Desperate', 'Urgent', 'Dire', 'Critical', 'Necessary', 'Destitute', 'Impoverished', 'Beggared', 'Penniless', 'Needy');
214
- }
215
- else if (context.wealthTier === 'rich') {
216
- adjectives.push('Luxurious', 'Exclusive', 'Prestigious', 'Elite', 'Opulent', 'Refined', 'Affluent', 'Prosperous', 'Wealthy', 'Sumptuous');
217
- }
218
- if (context.lifeStage === 'elder') {
219
- adjectives.push('Ancient', 'Forgotten', 'Legendary', 'Timeless', 'Historic', 'Venerable', 'Aged', 'Hoary', 'Antiquated', 'Timeworn');
220
- }
221
- else if (context.lifeStage === 'youth') {
222
- adjectives.push('New', 'Fresh', 'Bold', 'Energetic', 'Vibrant', 'Dynamic', 'Youthful', 'Spirited', 'Vigorous', 'Brisk');
223
- }
224
- return this.chance.pickone(adjectives);
225
- }
226
- generateMeaningfulNoun(type, context) {
227
- const typeNouns = {
252
+ const titles = {
228
253
  COMBAT: [
229
- 'Battle', 'Confrontation', 'Clash', 'Skirmish', 'Duel', 'Fight', 'War', 'Conflict', 'Struggle', 'Showdown',
230
- 'Combat', 'Engagement', 'Encounter', 'Assault', 'Attack', 'Charge', 'Offensive', 'Defense', 'Siege', 'Raid',
231
- 'Ambush', 'Melee', 'Brawl', 'Scuffle', 'Tussle', 'Fray', 'Hostility', 'Aggression', 'Violence', 'Carnage',
232
- 'Massacre', 'Slaughter', 'Bloodshed', 'Conquest', 'Victory', 'Defeat', 'Retreat', 'Standoff', 'Truce', 'Armistice'
254
+ 'Dangerous Encounter', 'Hostile Confrontation', 'Violent Clash', 'Deadly Battle',
255
+ 'Fierce Combat', 'Brutal Fight', 'Savage Struggle', 'Ruthless Conflict',
256
+ 'Armed Assault', 'Bloody Skirmish', 'Savage Attack', 'Lethal Ambush',
257
+ 'Merciless Onslaught', 'Vicious Brawl', 'Fatal Duel', 'Wicked Melee',
258
+ 'Barbaric Confrontation', 'Ferocious Battle', 'Grim Struggle', 'Dire Combat',
259
+ 'Treacherous Fight', 'Nasty Scuffle', 'Cruel Clash', 'Malicious Encounter',
260
+ 'Sinister Battle', 'Dark Confrontation', 'Evil Clash', 'Shadowy Fight',
261
+ 'Phantom Attack', 'Ghostly Assault', 'Spectral Battle', 'Ethereal Conflict',
262
+ 'Arcane Duel', 'Magical Combat', 'Enchanted Fight', 'Cursed Battle',
263
+ 'Divine Struggle', 'Holy War', 'Sacred Combat', 'Blessed Conflict',
264
+ 'Demonic Onslaught', 'Infernal Battle', 'Hellish Fight', 'Fiendish Assault',
265
+ 'Celestial Combat', 'Heavenly Clash', 'Angelic Battle', 'Divine Confrontation',
266
+ 'Elemental Fury', 'Primal Rage', 'Natural Assault', 'Wild Attack',
267
+ 'Beast Rampage', 'Monster Assault', 'Creature Attack', 'Wildlife Onslaught'
233
268
  ],
234
269
  SOCIAL: [
235
- 'Gathering', 'Meeting', 'Encounter', 'Assembly', 'Convention', 'Summit', 'Reunion', 'Festival', 'Celebration', 'Reception',
236
- 'Party', 'Soiree', 'Banquet', 'Feast', 'Gala', 'Ball', 'Masquerade', 'Revelry', 'Merrymaking', 'Festivity',
237
- 'Conference', 'Symposium', 'Forum', 'Debate', 'Discussion', 'Dialogue', 'Conversation', 'Exchange', 'Interaction', 'Connection',
238
- 'Alliance', 'Partnership', 'Friendship', 'Companionship', 'Camaraderie', 'Fellowship', 'Brotherhood', 'Sisterhood', 'Community', 'Society'
270
+ 'Unexpected Meeting', 'Friendly Conversation', 'Important Discussion', 'Social Gathering',
271
+ 'Personal Encounter', 'Meaningful Dialogue', 'Social Opportunity', 'Personal Interaction',
272
+ 'Noble Reception', 'Courtly Introduction', 'Diplomatic Exchange', 'Royal Audience',
273
+ 'Tavern Chat', 'Inn Conversation', 'Market Discussion', 'Street Encounter',
274
+ 'Scholarly Debate', 'Academic Discourse', 'Intellectual Exchange', 'Learned Discussion',
275
+ 'Romantic Rendezvous', 'Love Affair', 'Heartfelt Confession', 'Passionate Meeting',
276
+ 'Family Reunion', 'Blood Relation', 'Kinship Meeting', 'Ancestral Gathering',
277
+ 'Business Negotiation', 'Trade Discussion', 'Commercial Deal', 'Merchant Meeting',
278
+ 'Political Alliance', 'Diplomatic Summit', 'Treaty Discussion', 'Alliance Formation',
279
+ 'Religious Ceremony', 'Spiritual Gathering', 'Faith Discussion', 'Divine Meeting',
280
+ 'Military Briefing', 'Strategic Discussion', 'Tactical Meeting', 'Combat Planning',
281
+ 'Artistic Collaboration', 'Creative Partnership', 'Cultural Exchange', 'Performance Discussion',
282
+ 'Medical Consultation', 'Healing Session', 'Health Discussion', 'Wellness Meeting',
283
+ 'Legal Matter', 'Judicial Hearing', 'Court Proceeding', 'Justice Meeting',
284
+ 'Educational Session', 'Teaching Moment', 'Learning Discussion', 'Knowledge Exchange',
285
+ 'Exploration Planning', 'Adventure Discussion', 'Journey Meeting', 'Discovery Talk',
286
+ 'Mystical Revelation', 'Arcane Discussion', 'Magical Meeting', 'Supernatural Exchange'
239
287
  ],
240
288
  EXPLORATION: [
241
- 'Discovery', 'Journey', 'Expedition', 'Exploration', 'Voyage', 'Quest', 'Adventure', 'Pilgrimage', 'Odyssey', 'Trek',
242
- 'Travel', 'Wander', 'Roam', 'Roaming', 'Roaming', 'Venture', 'Excursion', 'Tour', 'Trip', 'Passage',
243
- 'Trail', 'Path', 'Route', 'Course', 'Way', 'Track', 'Road', 'Highway', 'Pathway', 'Passageway',
244
- 'Expedition', 'Mission', 'Crusade', 'Campaign', 'Venture', 'Enterprise', 'Undertaking', 'Pursuit', 'Search', 'Hunt'
289
+ 'Hidden Discovery', 'Unknown Territory', 'Mysterious Location', 'Ancient Secret',
290
+ 'Forgotten Place', 'New Exploration', 'Hidden Path', 'Secret Location',
291
+ 'Lost Civilization', 'Ancient Ruins', 'Forgotten Temple', 'Buried Treasure',
292
+ 'Hidden Cave', 'Secret Passage', 'Concealed Chamber', 'Veiled Sanctuary',
293
+ 'Uncharted Island', 'Mysterious Peninsula', 'Unknown Continent', 'New World',
294
+ 'Deep Abyss', 'Bottomless Pit', 'Endless Cavern', 'Infinite Depths',
295
+ 'Floating Castle', 'Sky Palace', 'Cloud Citadel', 'Aerial Fortress',
296
+ 'Underwater City', 'Submerged Ruins', 'Aquatic Temple', 'Marine Sanctuary',
297
+ 'Volcanic Chamber', 'Lava Cave', 'Fire Temple', 'Inferno Depths',
298
+ 'Frozen Wasteland', 'Ice Palace', 'Snow Citadel', 'Glacial Chamber',
299
+ 'Enchanted Forest', 'Magical Grove', 'Fey Woodland', 'Arcane Thicket',
300
+ 'Desert Oasis', 'Sand Temple', 'Dune Palace', 'Mirage Chamber',
301
+ 'Mountain Peak', 'Summit Temple', 'Cliff Sanctuary', 'Alpine Citadel',
302
+ 'Jungle Ruin', 'Vine Temple', 'Tropical Palace', 'Rainforest Chamber',
303
+ 'Space Station', 'Orbital Platform', 'Cosmic Outpost', 'Stellar Citadel',
304
+ 'Time Rift', 'Temporal Anomaly', 'Chronal Chamber', 'Eternal Passage',
305
+ 'Pocket Dimension', 'Miniature World', 'Parallel Realm', 'Alternate Plane',
306
+ 'Crystal Cavern', 'Gem Chamber', 'Mineral Palace', 'Ore Citadel'
245
307
  ],
246
308
  ECONOMIC: [
247
- 'Opportunity', 'Transaction', 'Deal', 'Exchange', 'Trade', 'Negotiation', 'Bargain', 'Contract', 'Agreement', 'Partnership',
248
- 'Business', 'Commerce', 'Market', 'Bazaar', 'Auction', 'Sale', 'Purchase', 'Acquisition', 'Investment', 'Venture',
249
- 'Enterprise', 'Company', 'Corporation', 'Firm', 'Establishment', 'Operation', 'Industry', 'Commerce', 'Trade', 'Business',
250
- 'Wealth', 'Fortune', 'Treasure', 'Riches', 'Assets', 'Resources', 'Capital', 'Funds', 'Finance', 'Economy'
309
+ 'Profitable Opportunity', 'Financial Deal', 'Business Venture', 'Economic Chance',
310
+ 'Wealth Opportunity', 'Trade Deal', 'Financial Gain', 'Business Opportunity',
311
+ 'Golden Investment', 'Lucrative Venture', 'Money-Making Scheme', 'Wealth-Building Deal',
312
+ 'Merchant Caravan', 'Trade Expedition', 'Commercial Journey', 'Business Voyage',
313
+ 'Bank Transaction', 'Financial Transfer', 'Monetary Exchange', 'Coin Deal',
314
+ 'Property Acquisition', 'Land Purchase', 'Estate Deal', 'Territory Sale',
315
+ 'Investment Portfolio', 'Asset Management', 'Wealth Preservation', 'Financial Planning',
316
+ 'Market Speculation', 'Stock Trading', 'Commodity Exchange', 'Goods Trading',
317
+ 'Loan Agreement', 'Credit Arrangement', 'Debt Settlement', 'Financial Obligation',
318
+ 'Inheritance Claim', 'Estate Distribution', 'Wealth Transfer', 'Fortune Division',
319
+ 'Auction House', 'Bidding War', 'Item Sale', 'Valuable Goods',
320
+ 'Treasure Appraisal', 'Gem Evaluation', 'Artifact Assessment', 'Valuable Discovery',
321
+ 'Smuggling Operation', 'Contraband Trade', 'Illegal Commerce', 'Black Market Deal',
322
+ 'Royal Tax', 'Government Levy', 'Economic Burden', 'Financial Obligation',
323
+ 'Mining Claim', 'Resource Extraction', 'Mineral Rights', 'Ore Discovery',
324
+ 'Farming Investment', 'Agricultural Venture', 'Crop Deal', 'Harvest Opportunity',
325
+ 'Art Commission', 'Creative Sale', 'Craftsmanship Deal', 'Artisan Opportunity',
326
+ 'Shipping Contract', 'Transportation Deal', 'Logistics Agreement', 'Supply Chain',
327
+ 'Bankruptcy Crisis', 'Financial Ruin', 'Economic Disaster', 'Wealth Loss'
251
328
  ],
252
329
  MYSTERY: [
253
- 'Mystery', 'Enigma', 'Puzzle', 'Riddle', 'Secret', 'Conundrum', 'Intrigue', 'Case', 'Investigation', 'Inquiry',
254
- 'Puzzle', 'Problem', 'Question', 'Dilemma', 'Paradox', 'Contradiction', 'Anomaly', 'Aberration', 'Oddity', 'Curiosity',
255
- 'Secret', 'Confidentiality', 'Privacy', 'Secrecy', 'Covert', 'Hidden', 'Concealed', 'Obscured', 'Veiled', 'Shrouded',
256
- 'Investigation', 'Examination', 'Inspection', 'Analysis', 'Study', 'Research', 'Probe', 'Inquiry', 'Search', 'Hunt'
330
+ 'Strange Occurrence', 'Mysterious Event', 'Puzzling Situation', 'Enigmatic Discovery',
331
+ 'Curious Mystery', 'Weird Phenomenon', 'Strange Mystery', 'Intriguing Puzzle',
332
+ 'Baffling Enigma', 'Confusing Riddle', 'Perplexing Problem', 'Cryptic Clue',
333
+ 'Hidden Message', 'Secret Code', 'Encoded Mystery', 'Veiled Secret',
334
+ 'Ghostly Apparition', 'Spectral Vision', 'Phantom Presence', 'Ethereal Mystery',
335
+ 'Ancient Prophecy', 'Forgotten Oracle', 'Mystic Prediction', 'Divine Riddle',
336
+ 'Cursed Artifact', 'Hexed Relic', 'Bewitched Object', 'Enchanted Mystery',
337
+ 'Disappearing Act', 'Vanishing Trick', 'Sudden Disappearance', 'Mysterious Vanishing',
338
+ 'Impossible Crime', 'Unsolvable Murder', 'Perfect Mystery', 'Crime Enigma',
339
+ 'Time Paradox', 'Temporal Anomaly', 'Chronal Mystery', 'Time Riddle',
340
+ 'Dimension Breach', 'Reality Tear', 'Planar Mystery', 'World Enigma',
341
+ 'Forbidden Knowledge', 'Secret Wisdom', 'Hidden Truth', 'Veiled Understanding',
342
+ 'Lost Civilization', 'Ancient Mystery', 'Forgotten People', 'Buried Secret',
343
+ 'Alien Artifact', 'Extraterrestrial Mystery', 'Cosmic Enigma', 'Stellar Riddle',
344
+ 'Psychic Phenomenon', 'Mental Mystery', 'Thought Enigma', 'Mind Riddle',
345
+ 'Supernatural Event', 'Paranormal Mystery', 'Occult Enigma', 'Arcane Riddle',
346
+ 'Cursed Location', 'Hexed Place', 'Bewitched Site', 'Enchanted Mystery',
347
+ 'Haunted Ground', 'Ghostly Place', 'Spectral Location', 'Phantom Site',
348
+ 'Mysterious Illness', 'Strange Disease', 'Enigmatic Affliction', 'Puzzling Plague',
349
+ 'Unexplained Death', 'Mysterious Demise', 'Strange Passing', 'Enigmatic End'
257
350
  ],
258
351
  SUPERNATURAL: [
259
- 'Phenomenon', 'Manifestation', 'Vision', 'Curse', 'Omen', 'Prophecy', 'Miracle', 'Portent', 'Sign', 'Revelation',
260
- 'Apparition', 'Specter', 'Phantom', 'Ghost', 'Spirit', 'Wraith', 'Phantasm', 'Shade', 'Shadow', 'Presence',
261
- 'Magic', 'Sorcery', 'Witchcraft', 'Wizardry', 'Enchantment', 'Spell', 'Charm', 'Hex', 'Incantation', 'Ritual',
262
- 'Divination', 'Prophecy', 'Prediction', 'Foretelling', 'Augury', 'Omen', 'Portent', 'Sign', 'Harbinger', 'Herald'
352
+ 'Otherworldly Manifestation', 'Supernatural Event', 'Mystical Occurrence', 'Ethereal Presence',
353
+ 'Arcane Phenomenon', 'Supernatural Manifestation', 'Mystical Event', 'Otherworldly Occurrence',
354
+ 'Spectral Vision', 'Ghostly Apparition', 'Phantom Presence', 'Spirit Manifestation',
355
+ 'Divine Intervention', 'Heavenly Visit', 'Angelic Appearance', 'Celestial Event',
356
+ 'Demonic Possession', 'Infernal Invasion', 'Hellish Manifestation', 'Diabolic Event',
357
+ 'Elemental Fury', 'Nature Spirit', 'Wild Magic', 'Primal Force',
358
+ 'Time Distortion', 'Temporal Anomaly', 'Chronal Shift', 'Time Warp',
359
+ 'Reality Breach', 'Dimensional Tear', 'Planar Rift', 'World Fracture',
360
+ 'Soul Echo', 'Life Force', 'Spiritual Energy', 'Astral Projection',
361
+ 'Cursed Awakening', 'Hexed Revival', 'Bewitched Animation', 'Enchanted Life',
362
+ 'Prophetic Vision', 'Fateful Dream', 'Destiny Revelation', 'Oracle Message',
363
+ 'Blood Ritual', 'Sacrificial Ceremony', 'Dark Summoning', 'Necrotic Ritual',
364
+ 'Crystal Power', 'Gem Resonance', 'Mineral Magic', 'Stone Spirit',
365
+ 'Storm Summoning', 'Weather Control', 'Atmospheric Magic', 'Climate Shift',
366
+ 'Shadow Manipulation', 'Darkness Control', 'Void Energy', 'Abyss Power',
367
+ 'Light Manifestation', 'Radiant Energy', 'Holy Power', 'Divine Light',
368
+ 'Dream Invasion', 'Nightmare Realm', 'Sleep Magic', 'Mental Realm',
369
+ 'Mirror World', 'Reflection Magic', 'Duplicate Reality', 'Parallel Self',
370
+ 'Voice from Beyond', 'Ancient Whisper', 'Forgotten Echo', 'Lost Message',
371
+ 'Forbidden Power', 'Taboo Magic', 'Banned Ritual', 'Prohibited Force'
263
372
  ],
264
373
  POLITICAL: [
265
- 'Affair', 'Intrigue', 'Scheme', 'Conspiracy', 'Plot', 'Alliance', 'Treaty', 'Summit', 'Crisis', 'Scandal',
266
- 'Diplomacy', 'Negotiation', 'Mediation', 'Arbitration', 'Conciliation', 'Reconciliation', 'Settlement', 'Accord', 'Pact', 'Compact',
267
- 'Government', 'Administration', 'Regime', 'Authority', 'Power', 'Rule', 'Governance', 'Leadership', 'Command', 'Control',
268
- 'Election', 'Campaign', 'Vote', 'Ballot', 'Poll', 'Referendum', 'Plebiscite', 'Selection', 'Choice', 'Decision'
374
+ 'Political Intrigue', 'Diplomatic Matter', 'Political Situation', 'Governmental Affair',
375
+ 'Political Opportunity', 'Diplomatic Challenge', 'Political Matter', 'Governmental Issue',
376
+ 'Royal Decree', 'King\'s Command', 'Monarch\'s Order', 'Sovereign Directive',
377
+ 'Court Conspiracy', 'Palace Plot', 'Throne Intrigue', 'Royal Conspiracy',
378
+ 'Senate Session', 'Council Meeting', 'Parliament Debate', 'Assembly Gathering',
379
+ 'Election Campaign', 'Political Race', 'Leadership Contest', 'Power Struggle',
380
+ 'Treaty Negotiation', 'Peace Accord', 'Alliance Formation', 'Diplomatic Agreement',
381
+ 'Rebellion Threat', 'Revolutionary Movement', 'Uprising Plot', 'Insurrection Plan',
382
+ 'Assassination Attempt', 'Murder Plot', 'Regicide Scheme', 'Killing Conspiracy',
383
+ 'Succession Crisis', 'Throne Dispute', 'Heir Problem', 'Royal Inheritance',
384
+ 'Border Dispute', 'Territorial Conflict', 'Land Claim', 'Boundary Issue',
385
+ 'Trade Embargo', 'Economic Sanction', 'Commercial Blockade', 'Market Restriction',
386
+ 'Religious Conflict', 'Faith Dispute', 'Sectarian Division', 'Belief Conflict',
387
+ 'Military Alliance', 'Defense Pact', 'Strategic Partnership', 'Combat Coalition',
388
+ 'Tax Revolt', 'Economic Protest', 'Financial Rebellion', 'Revenue Dispute',
389
+ 'Corruption Scandal', 'Bribery Exposure', 'Graft Revelation', 'Embezzlement Affair',
390
+ 'Exile Decree', 'Banishment Order', 'Expulsion Command', 'Removal Directive',
391
+ 'Amnesty Proclamation', 'Pardon Declaration', 'Forgiveness Decree', 'Mercy Grant',
392
+ 'War Declaration', 'Battle Proclamation', 'Combat Announcement', 'Hostility Declaration',
393
+ 'Peace Treaty', 'Truce Agreement', 'Ceasefire Accord', 'Armistice Pact'
269
394
  ],
270
395
  TECHNOLOGICAL: [
271
- 'Innovation', 'Malfunction', 'Breakthrough', 'System', 'Device', 'Invention', 'Machine', 'Apparatus', 'Contraption', 'Mechanism',
272
- 'Technology', 'Gadget', 'Tool', 'Instrument', 'Implement', 'Appliance', 'Equipment', 'Hardware', 'Software', 'Firmware',
273
- 'Automation', 'Mechanization', 'Computerization', 'Digitization', 'Modernization', 'Upgrade', 'Enhancement', 'Improvement', 'Advancement', 'Progress',
274
- 'Engine', 'Motor', 'Generator', 'Transformer', 'Converter', 'Processor', 'Controller', 'Regulator', 'Modulator', 'Amplifier'
396
+ 'Technological Discovery', 'Advanced Mechanism', 'Technical Innovation', 'Mechanical Wonder',
397
+ 'Technological Device', 'Advanced Technology', 'Technical Marvel', 'Mechanical Device',
398
+ 'Steam Engine', 'Power Machine', 'Automated Device', 'Clockwork Mechanism',
399
+ 'Electrical Invention', 'Power Grid', 'Energy System', 'Current Flow',
400
+ 'Communication Device', 'Message Machine', 'Signal Transmitter', 'Information Relay',
401
+ 'Transportation System', 'Travel Device', 'Movement Machine', 'Locomotion Engine',
402
+ 'Medical Technology', 'Healing Device', 'Surgical Machine', 'Health Apparatus',
403
+ 'Weapon System', 'Combat Technology', 'War Machine', 'Defense Device',
404
+ 'Computing Engine', 'Calculation Device', 'Logic Machine', 'Thinking Apparatus',
405
+ 'Observation Tool', 'Detection Device', 'Measurement Instrument', 'Analysis Machine',
406
+ 'Construction Equipment', 'Building Machine', 'Fabrication Device', 'Manufacturing Tool',
407
+ 'Agricultural Technology', 'Farming Machine', 'Harvest Device', 'Cultivation Tool',
408
+ 'Mining Equipment', 'Excavation Machine', 'Extraction Device', 'Resource Tool',
409
+ 'Navigation System', 'Direction Device', 'Guidance Machine', 'Location Tool',
410
+ 'Recording Technology', 'Memory Device', 'Storage Machine', 'Archive System',
411
+ 'Lighting System', 'Illumination Device', 'Brightness Machine', 'Glow Technology',
412
+ 'Heating Device', 'Temperature Control', 'Climate Machine', 'Thermal System',
413
+ 'Cooling Technology', 'Refrigeration Device', 'Cold Machine', 'Freezing System',
414
+ 'Flying Machine', 'Aviation Device', 'Flight Technology', 'Airborne System',
415
+ 'Submarine Vessel', 'Underwater Craft', 'Deep-Sea Machine', 'Aquatic Technology',
416
+ 'Space Technology', 'Orbital Device', 'Cosmic Machine', 'Stellar System'
275
417
  ],
276
418
  MAGIC: [
277
- 'Spell', 'Ritual', 'Enchantment', 'Conjuration', 'Incantation', 'Sorcery', 'Wizardry', 'Arcana', 'Mysticism', 'Thaumaturgy',
278
- 'Magic', 'Magick', 'Witchcraft', 'Necromancy', 'Alchemy', 'Divination', 'Summoning', 'Invocation', 'Evocation', 'Conjuring',
279
- 'Enchantment', 'Charm', 'Hex', 'Curse', 'Blessing', 'Benediction', 'Invocation', 'Prayer', 'Supplication', 'Appeal',
280
- 'Artifact', 'Relic', 'Talisman', 'Amulet', 'Charm', 'Trinket', 'Bauble', 'Ornament', 'Jewel', 'Gem'
419
+ 'Magical Manifestation', 'Arcane Event', 'Magical Phenomenon', 'Spell Effect',
420
+ 'Magical Occurrence', 'Arcane Manifestation', 'Magical Event', 'Spell Phenomenon',
421
+ 'Enchantment Ritual', 'Spellcasting Ceremony', 'Magical Incantation', 'Arcane Ritual',
422
+ 'Potion Brewing', 'Elixir Creation', 'Alchemical Mixture', 'Magical Brew',
423
+ 'Rune Activation', 'Glyph Power', 'Symbol Magic', 'Sigil Energy',
424
+ 'Wand Waving', 'Staff Channeling', 'Rod Power', 'Scepter Command',
425
+ 'Crystal Focus', 'Gem Resonance', 'Stone Power', 'Mineral Magic',
426
+ 'Elemental Summoning', 'Nature Calling', 'Spirit Invocation', 'Force Manifestation',
427
+ 'Illusion Weaving', 'Deception Magic', 'False Reality', 'Trick Spell',
428
+ 'Transformation Magic', 'Shape Changing', 'Form Alteration', 'Metamorphosis Spell',
429
+ 'Healing Touch', 'Restoration Magic', 'Cure Spell', 'Mending Power',
430
+ 'Combat Magic', 'Battle Spells', 'War Enchantment', 'Fighting Sorcery',
431
+ 'Protection Ward', 'Defense Magic', 'Shield Spell', 'Guard Enchantment',
432
+ 'Divination Ritual', 'Fate Reading', 'Future Vision', 'Prophecy Magic',
433
+ 'Necromancy Practice', 'Death Magic', 'Soul Manipulation', 'Life Force Control',
434
+ 'Summoning Circle', 'Entity Calling', 'Being Invocation', 'Creature Manifestation',
435
+ 'Portal Opening', 'Gate Creation', 'Passage Magic', 'Travel Spell',
436
+ 'Weather Control', 'Climate Magic', 'Storm Calling', 'Atmospheric Power',
437
+ 'Mind Magic', 'Psychic Power', 'Thought Control', 'Mental Manipulation',
438
+ 'Shadow Magic', 'Darkness Power', 'Void Energy', 'Night Force',
439
+ 'Light Magic', 'Radiant Power', 'Glow Energy', 'Day Force'
281
440
  ],
282
441
  SPELLCASTING: [
283
- 'Casting', 'Invocation', 'Evocation', 'Summoning', 'Channeling', 'Weaving', 'Manipulation', 'Control', 'Mastery', 'Art',
284
- 'Magic', 'Sorcery', 'Wizardry', 'Witchcraft', 'Necromancy', 'Alchemy', 'Enchantment', 'Conjuration', 'Incantation', 'Ritual',
285
- 'Power', 'Energy', 'Force', 'Mana', 'Essence', 'Aura', 'Aether', 'Ether', 'Quintessence', 'Spirit',
286
- 'Technique', 'Method', 'Practice', 'Discipline', 'School', 'Tradition', 'Path', 'Way', 'Style', 'Form'
442
+ 'Spellcasting Ritual', 'Magical Incantation', 'Arcane Casting', 'Spell Performance',
443
+ 'Magical Ritual', 'Arcane Incantation', 'Spell Ritual', 'Magical Performance',
444
+ 'Fireball Conjuration', 'Flame Spell', 'Inferno Casting', 'Blaze Ritual',
445
+ 'Ice Lance', 'Frost Spell', 'Cold Casting', 'Freeze Ritual',
446
+ 'Lightning Bolt', 'Storm Spell', 'Thunder Casting', 'Electric Ritual',
447
+ 'Earthquake Summoning', 'Tremor Spell', 'Ground Casting', 'Seismic Ritual',
448
+ 'Water Surge', 'Flood Spell', 'Wave Casting', 'Tidal Ritual',
449
+ 'Wind Gust', 'Air Spell', 'Breeze Casting', 'Gale Ritual',
450
+ 'Healing Wave', 'Cure Spell', 'Restoration Casting', 'Mending Ritual',
451
+ 'Protection Circle', 'Shield Spell', 'Defense Casting', 'Ward Ritual',
452
+ 'Invisibility Veil', 'Stealth Spell', 'Concealment Casting', 'Hidden Ritual',
453
+ 'Strength Boost', 'Power Spell', 'Enhancement Casting', 'Fortification Ritual',
454
+ 'Speed Burst', 'Haste Spell', 'Acceleration Casting', 'Swiftness Ritual',
455
+ 'Telekinesis', 'Mind Spell', 'Force Casting', 'Psychic Ritual',
456
+ 'Teleportation', 'Blink Spell', 'Travel Casting', 'Movement Ritual',
457
+ 'Illusion Creation', 'Deception Spell', 'False Casting', 'Trick Ritual',
458
+ 'Summoning Call', 'Entity Spell', 'Being Casting', 'Invocation Ritual',
459
+ 'Necrotic Touch', 'Death Spell', 'Decay Casting', 'Rot Ritual',
460
+ 'Divine Light', 'Holy Spell', 'Blessing Casting', 'Sacred Ritual',
461
+ 'Shadow Step', 'Dark Spell', 'Void Casting', 'Night Ritual',
462
+ 'Crystal Focus', 'Gem Spell', 'Mineral Casting', 'Stone Ritual'
463
+ ],
464
+ FIGHTER: [
465
+ 'Warrior Challenge', 'Combat Trial', 'Fighting Opportunity', 'Battle Chance',
466
+ 'Warrior Encounter', 'Combat Challenge', 'Fighting Trial', 'Battle Opportunity',
467
+ 'Arena Combat', 'Gladiator Fight', 'Colosseum Battle', 'Ring Challenge',
468
+ 'Duel Request', 'Single Combat', 'One-on-One Fight', 'Personal Challenge',
469
+ 'Tournament Entry', 'Competition Fight', 'Championship Battle', 'Contest Challenge',
470
+ 'Training Spar', 'Practice Fight', 'Drill Combat', 'Exercise Battle',
471
+ 'Weapon Mastery', 'Skill Demonstration', 'Technique Show', 'Combat Display',
472
+ 'Honor Duel', 'Reputation Fight', 'Prestige Battle', 'Glory Challenge',
473
+ 'Survival Test', 'Endurance Fight', 'Resilience Battle', 'Stamina Challenge',
474
+ 'Weapon Choice', 'Arm Selection', 'Equipment Fight', 'Gear Battle',
475
+ 'Style Demonstration', 'Fighting Method', 'Combat Technique', 'Battle Approach',
476
+ 'Strength Test', 'Power Fight', 'Force Battle', 'Might Challenge',
477
+ 'Speed Trial', 'Agility Fight', 'Quickness Battle', 'Swiftness Challenge',
478
+ 'Defense Drill', 'Guard Fight', 'Protection Battle', 'Shield Challenge',
479
+ 'Attack Practice', 'Offense Fight', 'Striking Battle', 'Assault Challenge',
480
+ 'Tactical Combat', 'Strategic Fight', 'Planned Battle', 'Methodical Challenge',
481
+ 'Unarmed Fight', 'Barehanded Combat', 'Fist Battle', 'Martial Challenge',
482
+ 'Armored Combat', 'Plate Fight', 'Heavy Battle', 'Armored Challenge',
483
+ 'Light Combat', 'Agile Fight', 'Swift Battle', 'Mobile Challenge',
484
+ 'Mounted Fight', 'Horse Combat', 'Cavalry Battle', 'Riding Challenge',
485
+ 'Team Combat', 'Group Fight', 'Squad Battle', 'Unit Challenge'
486
+ ],
487
+ GUILD: [
488
+ 'Guild Meeting', 'Organizational Matter', 'Guild Opportunity', 'Group Affair',
489
+ 'Guild Meeting', 'Organizational Issue', 'Guild Matter', 'Group Opportunity',
490
+ 'Apprentice Initiation', 'Membership Ceremony', 'Joining Ritual', 'Guild Induction',
491
+ 'Master Promotion', 'Rank Advancement', 'Status Elevation', 'Level Upgrading',
492
+ 'Craft Demonstration', 'Skill Display', 'Technique Show', 'Art Showcase',
493
+ 'Trade Negotiation', 'Business Deal', 'Commercial Agreement', 'Economic Pact',
494
+ 'Resource Allocation', 'Supply Distribution', 'Material Assignment', 'Goods Sharing',
495
+ 'Training Session', 'Skill Teaching', 'Knowledge Transfer', 'Education Meeting',
496
+ 'Quality Control', 'Standard Enforcement', 'Craft Regulation', 'Work Inspection',
497
+ 'Competition Event', 'Skill Contest', 'Craft Competition', 'Artisan Challenge',
498
+ 'Innovation Workshop', 'Creation Session', 'Design Meeting', 'Invention Gathering',
499
+ 'Heritage Celebration', 'Tradition Event', 'History Commemoration', 'Legacy Festival',
500
+ 'Charity Drive', 'Community Support', 'Aid Campaign', 'Help Initiative',
501
+ 'Dispute Resolution', 'Conflict Mediation', 'Problem Solving', 'Issue Settlement',
502
+ 'Expansion Planning', 'Growth Strategy', 'Development Meeting', 'Progress Session',
503
+ 'Security Briefing', 'Protection Meeting', 'Defense Planning', 'Safety Council',
504
+ 'Financial Review', 'Budget Meeting', 'Treasury Session', 'Fund Management',
505
+ 'Recruitment Drive', 'Member Search', 'Talent Acquisition', 'New Blood Initiative',
506
+ 'Technology Adoption', 'Tool Upgrade', 'Equipment Modernization', 'Gear Improvement',
507
+ 'Ethical Debate', 'Moral Discussion', 'Values Meeting', 'Principles Session',
508
+ 'International Relations', 'Alliance Building', 'Partnership Formation', 'Cooperation Pact'
509
+ ],
510
+ UNDERWORLD: [
511
+ 'Criminal Activity', 'Illegal Operation', 'Underground Deal', 'Criminal Matter',
512
+ 'Illegal Activity', 'Criminal Operation', 'Underground Affair', 'Illegal Matter',
513
+ 'Thieves Guild', 'Burglary Operation', 'Theft Mission', 'Robbery Assignment',
514
+ 'Smuggling Run', 'Contraband Transport', 'Illegal Cargo', 'Forbidden Goods',
515
+ 'Assassination Contract', 'Hit Job', 'Murder Assignment', 'Killing Contract',
516
+ 'Black Market', 'Illegal Trade', 'Underground Commerce', 'Shadow Economy',
517
+ 'Protection Racket', 'Extortion Scheme', 'Shakedown Operation', 'Intimidation Business',
518
+ 'Forgery Operation', 'Document Falsification', 'Fake Creation', 'Counterfeit Production',
519
+ 'Information Brokerage', 'Secret Trading', 'Whisper Network', 'Intelligence Sale',
520
+ 'Sabotage Mission', 'Disruption Operation', 'Destruction Assignment', 'Chaos Creation',
521
+ 'Kidnapping Plot', 'Abduction Scheme', 'Hostage Taking', 'Ransom Demand',
522
+ 'Fencing Operation', 'Stolen Goods', 'Hot Property', 'Illicit Merchandise',
523
+ 'Gambling Den', 'Illegal Betting', 'Underground Casino', 'Forbidden Gaming',
524
+ 'Drug Trade', 'Narcotics Operation', 'Substance Dealing', 'Addiction Business',
525
+ 'Weapon Smuggling', 'Arms Trafficking', 'Illegal Weapons', 'Forbidden Arms',
526
+ 'Slave Trade', 'Human Trafficking', 'Captive Dealing', 'Bondage Commerce',
527
+ 'Piracy Operation', 'Sea Robbery', 'Maritime Crime', 'Ocean Banditry',
528
+ 'Bandit Activity', 'Highway Robbery', 'Road Crime', 'Travel Banditry',
529
+ 'Poison Dealing', 'Toxin Trade', 'Venom Commerce', 'Death Substance',
530
+ 'Spy Network', 'Espionage Ring', 'Secret Agents', 'Covert Operations',
531
+ 'Terrorist Plot', 'Destruction Scheme', 'Chaos Planning', 'Anarchy Mission'
532
+ ],
533
+ NECROMANCER: [
534
+ 'Death Magic', 'Necrotic Ritual', 'Undead Summoning', 'Death Ritual',
535
+ 'Necrotic Magic', 'Death Summoning', 'Undead Ritual', 'Necrotic Ritual',
536
+ 'Skeleton Army', 'Bone Warrior', 'Death Knight', 'Bone Construct',
537
+ 'Zombie Horde', 'Flesh Golem', 'Corpse Animation', 'Dead Rising',
538
+ 'Ghost Summoning', 'Spirit Calling', 'Phantom Invocation', 'Spectral Army',
539
+ 'Wraith Creation', 'Soul Binding', 'Ethereal Servant', 'Ghostly Minion',
540
+ 'Lich Transformation', 'Immortal Ritual', 'Eternal Life', 'Deathless Power',
541
+ 'Soul Harvesting', 'Life Force', 'Vital Energy', 'Essence Collection',
542
+ 'Grave Robbery', 'Tomb Raiding', 'Cemetery Violation', 'Rest Disturbance',
543
+ 'Cursed Burial', 'Hexed Grave', 'Bewitched Tomb', 'Enchanted Resting Place',
544
+ 'Death Prophecy', 'Mortal Prediction', 'Fateful Vision', 'Doom Oracle',
545
+ 'Plague Spreading', 'Disease Magic', 'Contagion Ritual', 'Illness Curse',
546
+ 'Blood Magic', 'Vital Fluid', 'Life Essence', 'Crimson Power',
547
+ 'Bone Crafting', 'Skeleton Construction', 'Death Sculpting', 'Mortal Remains',
548
+ 'Soul Trapping', 'Spirit Imprisonment', 'Ghost Containment', 'Phantom Prison',
549
+ 'Death Worship', 'Necrotic Religion', 'Grave Cult', 'Tomb Faith',
550
+ 'Eternal Slumber', 'Final Rest', 'Death Sleep', 'Mortal End',
551
+ 'Reaper Calling', 'Death Messenger', 'Grim Summoning', 'Fate Weaver',
552
+ 'Shadow Realm', 'Death Plane', 'Grave World', 'Necrotic Dimension',
553
+ 'Life Extinction', 'Death Dominion', 'Mortal Cessation', 'Vital Termination',
554
+ 'Soul Consumption', 'Life Devouring', 'Essence Absorption', 'Vital Draining'
555
+ ],
556
+ MAGE: [
557
+ 'Arcane Study', 'Magical Research', 'Wizard Experiment', 'Arcane Experiment',
558
+ 'Magical Study', 'Wizard Research', 'Arcane Study', 'Magical Experiment',
559
+ 'Spell Research', 'Incantation Study', 'Ritual Investigation', 'Magic Analysis',
560
+ 'Potion Creation', 'Elixir Brewing', 'Alchemical Mixture', 'Formula Development',
561
+ 'Rune Carving', 'Glyph Inscription', 'Symbol Etching', 'Sigil Drawing',
562
+ 'Crystal Growing', 'Gem Cultivation', 'Stone Enhancement', 'Mineral Attunement',
563
+ 'Familiar Bonding', 'Spirit Companion', 'Magical Pet', 'Arcane Ally',
564
+ 'Tower Construction', 'Mage Spire', 'Wizard Tower', 'Arcane Citadel',
565
+ 'Library Expansion', 'Knowledge Collection', 'Book Acquisition', 'Lore Gathering',
566
+ 'Apprentice Training', 'Student Teaching', 'Magic Instruction', 'Spell Tutoring',
567
+ 'Artifact Creation', 'Magical Item', 'Enchanted Object', 'Mystic Device',
568
+ 'Portal Research', 'Gate Study', 'Dimension Investigation', 'Realm Exploration',
569
+ 'Elemental Mastery', 'Force Control', 'Energy Manipulation', 'Power Harnessing',
570
+ 'Time Study', 'Chronal Research', 'Temporal Experiment', 'Age Manipulation',
571
+ 'Mind Magic', 'Psychic Power', 'Thought Control', 'Mental Domination',
572
+ 'Illusion Crafting', 'False Reality', 'Deception Weaving', 'Trick Construction',
573
+ 'Summoning Practice', 'Entity Calling', 'Being Invocation', 'Creature Command',
574
+ 'Divination Session', 'Fate Reading', 'Future Vision', 'Prophecy Casting',
575
+ 'Enchantment Workshop', 'Spell Imbuement', 'Magic Infusion', 'Power Embedding',
576
+ 'Alchemy Laboratory', 'Transmutation Study', 'Substance Conversion', 'Matter Change',
577
+ 'Herbology Research', 'Plant Magic', 'Botanical Study', 'Flora Enchantment'
578
+ ],
579
+ ROGUE: [
580
+ 'Stealth Operation', 'Covert Mission', 'Sneaky Business', 'Covert Operation',
581
+ 'Stealth Mission', 'Sneaky Operation', 'Covert Business', 'Stealthy Mission',
582
+ 'Lockpicking Challenge', 'Door Opening', 'Security Bypass', 'Entry Violation',
583
+ 'Treasure Hunting', 'Loot Seeking', 'Valuable Acquisition', 'Wealth Discovery',
584
+ 'Trap Disarming', 'Hazard Removal', 'Danger Neutralization', 'Threat Elimination',
585
+ 'Guard Avoidance', 'Sentinel Evasion', 'Watchman Dodging', 'Patrol Circumvention',
586
+ 'Pickpocketing', 'Pocket Lifting', 'Wallet Acquisition', 'Coin Removal',
587
+ 'Burglary Job', 'House Breaking', 'Property Invasion', 'Residence Violation',
588
+ 'Assassination Target', 'Silent Killing', 'Quiet Elimination', 'Stealth Murder',
589
+ 'Sabotage Mission', 'Disruption Task', 'Interference Operation', 'Chaos Creation',
590
+ 'Espionage Assignment', 'Secret Gathering', 'Information Theft', 'Intelligence Acquisition',
591
+ 'Forgery Task', 'Document Falsification', 'Paper Counterfeiting', 'Record Alteration',
592
+ 'Poison Delivery', 'Toxin Administration', 'Venom Application', 'Death Substance',
593
+ 'Kidnapping Operation', 'Abduction Mission', 'Hostage Taking', 'Person Acquisition',
594
+ 'Blackmail Scheme', 'Extortion Plot', 'Compromise Operation', 'Leverage Creation',
595
+ 'Smuggling Route', 'Contraband Transport', 'Illegal Conveyance', 'Forbidden Movement',
596
+ 'Fence Contact', 'Stolen Goods', 'Hot Property', 'Illicit Merchandise',
597
+ 'Gambling Fix', 'Game Rigging', 'Bet Manipulation', 'Wager Control',
598
+ 'Information Broker', 'Secret Seller', 'Whisper Trader', 'Knowledge Merchant',
599
+ 'Thief Guild', 'Burglar Society', 'Criminal Brotherhood', 'Rogue Association'
600
+ ],
601
+ CLERIC: [
602
+ 'Divine Matter', 'Religious Affair', 'Sacred Business', 'Holy Matter',
603
+ 'Divine Affair', 'Religious Business', 'Sacred Affair', 'Holy Business',
604
+ 'Prayer Ceremony', 'Devotional Ritual', 'Worship Service', 'Faith Gathering',
605
+ 'Healing Ministry', 'Restoration Service', 'Cure Ministry', 'Health Blessing',
606
+ 'Exorcism Ritual', 'Demon Banishing', 'Evil Expulsion', 'Spirit Cleansing',
607
+ 'Blessing Ceremony', 'Divine Favor', 'Holy Anointing', 'Sacred Approval',
608
+ 'Funeral Service', 'Burial Ritual', 'Final Rites', 'Soul Passage',
609
+ 'Wedding Ceremony', 'Marriage Blessing', 'Union Sacrament', 'Holy Matrimony',
610
+ 'Baptism Ritual', 'Purification Ceremony', 'Spiritual Cleansing', 'Faith Initiation',
611
+ 'Confession Session', 'Sin Absolution', 'Guilt Forgiveness', 'Soul Cleansing',
612
+ 'Pilgrimage Journey', 'Holy Travel', 'Sacred Quest', 'Faithful Voyage',
613
+ 'Miracle Working', 'Divine Intervention', 'Holy Manifestation', 'Sacred Wonder',
614
+ 'Prophecy Interpretation', 'Divine Message', 'Oracle Reading', 'Fate Revelation',
615
+ 'Temple Maintenance', 'Sacred Building', 'Holy Structure', 'Divine Dwelling',
616
+ 'Scripture Study', 'Holy Text', 'Sacred Writing', 'Divine Word',
617
+ 'Charity Work', 'Almsgiving', 'Generous Giving', 'Compassion Service',
618
+ 'Missionary Work', 'Faith Spreading', 'Belief Teaching', 'Religion Propagation',
619
+ 'Meditation Practice', 'Contemplation', 'Spiritual Reflection', 'Mindful Prayer',
620
+ 'Sacrificial Offering', 'Divine Gift', 'Holy Sacrifice', 'Sacred Donation',
621
+ 'Divine Judgment', 'Righteous Verdict', 'Holy Justice', 'Sacred Law'
622
+ ],
623
+ ADVENTURE: [
624
+ 'Heroic Quest', 'Epic Journey', 'Legendary Expedition', 'Grand Adventure',
625
+ 'Daring Exploration', 'Brave Expedition', 'Courageous Quest', 'Valiant Journey',
626
+ 'Treasure Hunt', 'Wealth Discovery', 'Fortune Quest', 'Riches Expedition',
627
+ 'Ancient Mystery', 'Forgotten Secret', 'Lost Knowledge', 'Hidden Wisdom',
628
+ 'Monster Slaying', 'Beast Hunting', 'Creature Tracking', 'Wildlife Expedition',
629
+ 'Lost Civilization', 'Ancient Ruins', 'Forgotten Empire', 'Buried Kingdom',
630
+ 'Magical Artifact', 'Enchanted Relic', 'Mystical Treasure', 'Arcane Discovery',
631
+ 'Dragon Lair', 'Monster Den', 'Beast Habitat', 'Creature Domain',
632
+ 'Forbidden Temple', 'Sacred Shrine', 'Holy Sanctuary', 'Divine Chamber',
633
+ 'Underwater City', 'Sunken Kingdom', 'Aquatic Empire', 'Submerged Civilization',
634
+ 'Sky Castle', 'Floating Citadel', 'Aerial Fortress', 'Cloud Palace',
635
+ 'Time Portal', 'Chronal Gateway', 'Temporal Passage', 'Age Rift',
636
+ 'Dimension Door', 'Reality Gate', 'Planar Portal', 'World Bridge',
637
+ 'Legendary Weapon', 'Heroic Blade', 'Mythical Sword', 'Epic Artifact',
638
+ 'Ancient Prophecy', 'Fateful Prediction', 'Destined Quest', 'Chosen Journey',
639
+ 'Guardian Challenge', 'Protector Trial', 'Defender Quest', 'Sentinel Mission',
640
+ 'Elemental Trial', 'Nature Test', 'Force Challenge', 'Power Quest',
641
+ 'Spirit Journey', 'Soul Quest', 'Essence Expedition', 'Life Force Mission'
642
+ ],
643
+ QUEST: [
644
+ 'Sacred Mission', 'Divine Task', 'Holy Quest', 'Blessed Journey',
645
+ 'Royal Assignment', 'King\'s Command', 'Monarch\'s Request', 'Sovereign Mission',
646
+ 'Guild Contract', 'Professional Assignment', 'Trade Guild Quest', 'Craft Mission',
647
+ 'Personal Vendetta', 'Revenge Quest', 'Justice Mission', 'Retribution Journey',
648
+ 'Rescue Operation', 'Save Mission', 'Recovery Quest', 'Liberation Journey',
649
+ 'Investigation Task', 'Inquiry Mission', 'Research Quest', 'Discovery Journey',
650
+ 'Delivery Assignment', 'Transport Mission', 'Courier Quest', 'Delivery Journey',
651
+ 'Escort Duty', 'Protection Mission', 'Guardian Quest', 'Safeguard Journey',
652
+ 'Treasure Recovery', 'Artifact Retrieval', 'Relic Quest', 'Treasure Journey',
653
+ 'Monster Hunt', 'Beast Slaying', 'Creature Quest', 'Monster Journey',
654
+ 'Bandit Clearing', 'Outlaw Hunt', 'Criminal Quest', 'Thief Journey',
655
+ 'Diplomatic Mission', 'Peace Quest', 'Alliance Journey', 'Negotiation Task',
656
+ 'Spy Assignment', 'Intelligence Mission', 'Espionage Quest', 'Secret Journey',
657
+ 'Healing Pilgrimage', 'Cure Quest', 'Restoration Journey', 'Recovery Mission',
658
+ 'Knowledge Seeking', 'Wisdom Quest', 'Learning Journey', 'Education Mission',
659
+ 'Artifact Collection', 'Relic Gathering', 'Treasure Quest', 'Collection Journey',
660
+ 'Time-Sensitive Task', 'Urgent Mission', 'Deadline Quest', 'Rush Journey',
661
+ 'Multi-Stage Mission', 'Complex Quest', 'Extended Journey', 'Epic Mission',
662
+ 'Faction Alliance', 'Group Quest', 'Team Journey', 'Party Mission',
663
+ 'Solo Challenge', 'Personal Quest', 'Individual Journey', 'Lone Mission'
287
664
  ]
288
665
  };
289
- let nouns = typeNouns[type] || [
290
- 'Occurrence', 'Situation', 'Happening', 'Incident', 'Affair',
291
- 'Episode', 'Experience', 'Encounter', 'Circumstance', 'Condition', 'State',
292
- 'Matter', 'Issue', 'Case', 'Subject', 'Topic', 'Theme', 'Motif', 'Element',
293
- 'Challenge', 'Opportunity', 'Quest', 'Mission', 'Task', 'Venture'
294
- ];
295
- const customProps = Object.keys(context).filter(k => !['age', 'gold', 'influence', 'wealth', 'skills', 'level', 'reputation', 'power_level',
296
- 'career', 'health', 'tags', 'relationships', 'location', 'season', 'stress', 'happiness',
297
- 'karma', 'faith', 'vices', 'secrets', 'ambitions', 'social_standing', 'life_experience',
298
- 'knowledge', 'powerLevel', 'wealthTier', 'influenceTier', 'skillProfile', 'lifeStage',
299
- 'careerPath', 'personality'].includes(k));
300
- if (customProps.length > 0 && this.chance.bool({ likelihood: 30 })) {
301
- const randomProp = this.chance.pickone(customProps);
302
- const propValue = context[randomProp];
303
- if (typeof propValue === 'string' && propValue.length > 0 && propValue.length < 15) {
304
- nouns.push(propValue.charAt(0).toUpperCase() + propValue.slice(1));
305
- }
306
- }
307
- return this.chance.pickone(nouns);
308
- }
309
- /**
310
- * Categorize noun by semantic type
311
- */
312
- categorizeNoun(noun) {
313
- const nounLower = noun.toLowerCase();
314
- const abstractNouns = new Set([
315
- 'rule', 'law', 'principle', 'concept', 'idea', 'notion', 'theory', 'philosophy',
316
- 'situation', 'circumstance', 'condition', 'state', 'matter', 'issue', 'case',
317
- 'subject', 'topic', 'theme', 'motif', 'element', 'aspect', 'factor',
318
- 'challenge', 'opportunity', 'quest', 'mission', 'task', 'venture', 'endeavor',
319
- 'occurrence', 'happening', 'incident', 'affair', 'episode', 'experience',
320
- 'encounter', 'event', 'phenomenon', 'development', 'change', 'shift',
321
- 'method', 'technique', 'practice', 'discipline', 'way', 'path', 'approach',
322
- 'commerce', 'trade', 'business', 'deal', 'transaction', 'agreement',
323
- 'leadership', 'conspiracy', 'alliance', 'pact', 'treaty', 'accord'
324
- ]);
325
- const eventNouns = new Set([
326
- 'melee', 'battle', 'combat', 'fight', 'conflict', 'skirmish', 'clash',
327
- 'conquest', 'invasion', 'siege', 'raid', 'assault', 'attack',
328
- 'celebration', 'festival', 'feast', 'gala', 'party', 'gathering',
329
- 'ceremony', 'ritual', 'rite', 'tradition', 'custom',
330
- 'crusade', 'campaign', 'expedition', 'journey', 'voyage', 'adventure'
331
- ]);
332
- const placeNouns = new Set([
333
- 'tower', 'castle', 'fortress', 'keep', 'stronghold',
334
- 'forest', 'woods', 'grove', 'clearing',
335
- 'city', 'town', 'village', 'settlement',
336
- 'temple', 'shrine', 'sanctuary', 'cathedral',
337
- 'cave', 'cavern', 'tunnel', 'passage',
338
- 'market', 'bazaar', 'square', 'plaza'
339
- ]);
340
- if (abstractNouns.has(nounLower))
341
- return 'abstract';
342
- if (eventNouns.has(nounLower))
343
- return 'event';
344
- if (placeNouns.has(nounLower))
345
- return 'place';
346
- return 'physical';
347
- }
348
- /**
349
- * Generate event description - SIMPLIFIED VERSION
350
- * Just use the title with simple, safe templates
351
- */
352
- generateDescription(title, type, context, generationContext) {
353
- const titleLower = title.toLowerCase();
354
- const firstWord = title.split(/\s+/)[0].toLowerCase();
355
- const article = this.getArticle(firstWord);
356
- const safeTemplates = [
357
- `${title} requires your attention.`,
358
- `You encounter ${article} ${titleLower} that requires your attention.`,
359
- `${title} presents itself before you.`,
360
- `You face ${article} ${titleLower} that needs your response.`,
361
- `${title} demands your attention.`
362
- ];
363
- let description = this.chance.pickone(safeTemplates);
364
- const titleWords = title.split(/\s+/);
365
- const lastWord = titleWords[titleWords.length - 1];
366
- const noun = lastWord || titleWords[0];
367
- description = this.addContextualDetails(description, context, type, noun);
368
- return description;
369
- }
370
- /**
371
- * Generate description using SentenceBuilder system
372
- */
373
- generateWithSentenceBuilder(noun, adjective, type, context) {
374
- const rule = this.grammarRulesEngine.getRule(type);
375
- const pattern = this.grammarRulesEngine.suggestPattern(type);
376
- const styleModifiers = this.grammarRulesEngine.getStyleModifiers(type);
377
- const actionThat = this.getActionForType(type, 'that');
378
- const actionSubject = this.getActionForType(type, 'subject');
379
- let description = '';
380
- if (this.chance.bool({ likelihood: 40 })) {
381
- const fragmentDescription = this.fragmentLibrary.combineFragments(noun, adjective, type, {
382
- useOpening: true,
383
- useMiddle: this.chance.bool({ likelihood: 60 }),
384
- useClosing: this.chance.bool({ likelihood: 70 })
385
- });
386
- if (fragmentDescription) {
387
- description = fragmentDescription;
388
- }
389
- }
390
- if (!description) {
391
- switch (pattern) {
392
- case 'svo':
393
- const objectPhrases = [
394
- 'your path',
395
- 'your attention',
396
- 'a response',
397
- 'your decision',
398
- 'your action'
399
- ];
400
- const objectPhrase = this.chance.pickone(objectPhrases);
401
- description = this.sentenceBuilder.buildSVO(`${adjective.toLowerCase()} ${noun.toLowerCase()}`, actionSubject.split(' ')[0], objectPhrase, {
402
- adjective: this.chance.pickone(styleModifiers.adjectives || []),
403
- adverb: this.chance.pickone(styleModifiers.adverbs || [])
404
- });
405
- break;
406
- case 'sv':
407
- description = this.sentenceBuilder.buildSV(`the ${adjective.toLowerCase()} ${noun.toLowerCase()}`, actionSubject.split(' ')[0], {
408
- complement: this.chance.pickone([
409
- 'and requires your attention',
410
- 'demanding a response',
411
- 'needing your decision'
412
- ]),
413
- adjective: this.chance.pickone(styleModifiers.adjectives || []),
414
- adverb: this.chance.pickone(styleModifiers.adverbs || [])
415
- });
416
- break;
417
- case 'svc':
418
- description = this.sentenceBuilder.buildSVC(`the ${adjective.toLowerCase()} ${noun.toLowerCase()}`, actionSubject.split(' ')[0], this.chance.pickone([
419
- 'a challenge',
420
- 'an opportunity',
421
- 'a situation',
422
- 'a dilemma'
423
- ]), {
424
- adjective: this.chance.pickone(styleModifiers.adjectives || []),
425
- adverb: this.chance.pickone(styleModifiers.adverbs || [])
426
- });
427
- break;
428
- case 'passive':
429
- const passiveVerbs = ['confronted', 'challenged', 'threatened', 'presented', 'offered'];
430
- description = this.sentenceBuilder.buildFromStructure({
431
- pattern: 'passive',
432
- components: {
433
- object: `${adjective.toLowerCase()} ${noun.toLowerCase()}`,
434
- verb: this.chance.pickone(passiveVerbs),
435
- complement: 'by this situation'
436
- },
437
- modifiers: styleModifiers
438
- });
439
- break;
440
- default:
441
- description = this.fragmentLibrary.combineFragments(noun, adjective, type);
442
- }
443
- }
444
- if (this.chance.bool({ likelihood: 30 })) {
445
- const closingFragment = this.fragmentLibrary.getFragment(type, 'closing');
446
- if (closingFragment) {
447
- description = this.sentenceBuilder.combineClauses(description.replace(/\.$/, ''), closingFragment.text.replace(/\.$/, ''), this.chance.pickone(['and', 'but', 'while']));
448
- }
449
- }
450
- return description;
666
+ const typeTitles = titles[type] || ['Unexpected Event', 'Strange Occurrence', 'Curious Situation', 'Interesting Development'];
667
+ return this.chance.pickone(typeTitles);
451
668
  }
452
- extractNounFromTitle(titleWords, type) {
453
- const titleText = titleWords.join(' ');
454
- const genericNouns = new Set(['happening', 'occurrence', 'event', 'thing', 'stuff', 'matter', 'issue', 'case', 'situation', 'circumstance']);
455
- if (nlp) {
456
- try {
457
- const doc = nlp(titleText);
458
- const nouns = doc.nouns().out('array');
459
- if (nouns.length > 0) {
460
- const typeNounWhitelists = this.getTypeNounWhitelists();
461
- const whitelist = type && typeNounWhitelists[type] ? typeNounWhitelists[type] : [];
462
- for (const noun of nouns) {
463
- const nounLower = noun.toLowerCase();
464
- if (genericNouns.has(nounLower) && whitelist.length > 0) {
465
- continue;
466
- }
467
- if (whitelist.length > 0) {
468
- const matchesWhitelist = whitelist.some(wlNoun => nounLower === wlNoun || nounLower.includes(wlNoun) || wlNoun.includes(nounLower));
469
- if (matchesWhitelist) {
470
- return noun.charAt(0).toUpperCase() + noun.slice(1);
471
- }
472
- }
473
- if (noun.length >= 4 && !genericNouns.has(nounLower)) {
474
- return noun.charAt(0).toUpperCase() + noun.slice(1);
475
- }
476
- }
477
- for (const noun of nouns) {
478
- const nounLower = noun.toLowerCase();
479
- if (!genericNouns.has(nounLower) && noun.length >= 3) {
480
- return noun.charAt(0).toUpperCase() + noun.slice(1);
481
- }
482
- }
483
- }
484
- }
485
- catch (e) {
486
- }
487
- }
488
- const skipWords = new Set([
489
- 'in', 'the', 'of', 'a', 'an', 'and', 'or', 'but', 'with', 'from', 'to', 'for',
490
- 'beyond', 'revealed', 'awakened', 'unleashed', 'rising', 'falling', 'eternal',
491
- 'lost', 'found', 'hidden', 'forbidden', 'sacred', 'cursed', 'blessed', 'ancient',
492
- 'new', 'old', 'dark', 'light', 'shadow', 'flame', 'storm', 'wind', 'earth',
493
- 'sea', 'sky', 'star', 'moon', 'sun', 'dawn', 'dusk', 'night', 'day',
494
- 'winter', 'spring', 'summer', 'autumn', 'your', 'you', 'this', 'that', 'these', 'those',
495
- 'directs', 'seeking', 'demanding', 'requiring', 'blocking', 'offering', 'creating', 'presenting'
496
- ]);
497
- const verbEndings = ['ed', 'ing', 'es', 's'];
498
- const adjectiveEndings = ['ful', 'less', 'ous', 'ive', 'ic', 'al', 'y'];
499
- const typeNounWhitelists = this.getTypeNounWhitelists();
500
- const whitelist = type && typeNounWhitelists[type] ? typeNounWhitelists[type] : [];
501
- for (let i = titleWords.length - 1; i >= 0; i--) {
502
- const word = titleWords[i];
503
- const wordLower = word.toLowerCase().replace(/[.,!?;:]/g, '');
504
- if (skipWords.has(wordLower) || wordLower.length < 3) {
505
- continue;
506
- }
507
- const isLikelyVerb = verbEndings.some(ending => wordLower.endsWith(ending)) && wordLower.length > 5;
508
- const isLikelyAdjective = adjectiveEndings.some(ending => wordLower.endsWith(ending));
509
- if (isLikelyVerb && !isLikelyAdjective) {
510
- continue;
511
- }
512
- if (whitelist.length > 0) {
513
- const matchesWhitelist = whitelist.some(noun => wordLower === noun || wordLower.includes(noun) || noun.includes(wordLower));
514
- if (matchesWhitelist) {
515
- return word.replace(/[.,!?;:]/g, '');
669
+ generateDescription(title, type, context) {
670
+ const themesToCheck = ['default', ...Object.keys(this.customDescriptions).filter(k => k !== 'default')];
671
+ for (const theme of themesToCheck) {
672
+ const customThemeDescriptions = this.customDescriptions[theme];
673
+ if (customThemeDescriptions && customThemeDescriptions[type] && customThemeDescriptions[type].length > 0) {
674
+ let description = this.chance.pickone(customThemeDescriptions[type]);
675
+ description = this.addContextualEnhancements(description, context);
676
+ description = description.trim();
677
+ if (!/[.!?]$/.test(description)) {
678
+ description += '.';
516
679
  }
517
- }
518
- if (wordLower.length >= 4 && !isLikelyVerb && !genericNouns.has(wordLower)) {
519
- return word.replace(/[.,!?;:]/g, '');
680
+ return description;
520
681
  }
521
682
  }
522
- const ofIndex = titleWords.findIndex(w => w.toLowerCase() === 'of');
523
- if (ofIndex > 0 && ofIndex < titleWords.length - 1) {
524
- const beforeOf = titleWords[ofIndex - 1].toLowerCase().replace(/[.,!?;:]/g, '');
525
- if (beforeOf.length >= 4 && !skipWords.has(beforeOf) && !genericNouns.has(beforeOf)) {
526
- return titleWords[ofIndex - 1].replace(/[.,!?;:]/g, '');
527
- }
528
- }
529
- for (let i = titleWords.length - 1; i >= 0; i--) {
530
- const word = titleWords[i];
531
- const wordLower = word.toLowerCase().replace(/[.,!?;:]/g, '');
532
- if (wordLower.length >= 4 && !skipWords.has(wordLower) && !genericNouns.has(wordLower)) {
533
- const nextWord = i > 0 ? titleWords[i - 1].toLowerCase() : '';
534
- if (nextWord !== 'of') {
535
- return word.replace(/[.,!?;:]/g, '');
536
- }
537
- }
538
- }
539
- const fallbackNouns = ['encounter', 'situation', 'circumstance', 'development', 'incident', 'affair', 'challenge', 'opportunity'];
540
- const selectedNoun = type && typeNounWhitelists[type] && typeNounWhitelists[type].length > 0
541
- ? typeNounWhitelists[type][0]
542
- : this.chance.pickone(fallbackNouns);
543
- return selectedNoun.charAt(0).toUpperCase() + selectedNoun.slice(1);
544
- }
545
- getTypeNounWhitelists() {
546
- return {
547
- COMBAT: ['battle', 'confrontation', 'clash', 'skirmish', 'duel', 'fight', 'war', 'conflict', 'struggle', 'showdown', 'combat', 'engagement', 'encounter', 'assault', 'attack', 'charge', 'offensive', 'defense', 'siege', 'raid', 'ambush', 'melee', 'brawl', 'scuffle', 'tussle', 'fray', 'hostility', 'aggression', 'violence', 'carnage', 'massacre', 'slaughter', 'bloodshed', 'conquest', 'victory', 'defeat', 'retreat', 'standoff', 'truce', 'armistice'],
548
- SOCIAL: ['gathering', 'meeting', 'encounter', 'assembly', 'convention', 'summit', 'reunion', 'festival', 'celebration', 'reception', 'party', 'soiree', 'banquet', 'feast', 'gala', 'ball', 'masquerade', 'revelry', 'merrymaking', 'festivity', 'conference', 'symposium', 'forum', 'debate', 'discussion', 'dialogue', 'conversation', 'exchange', 'interaction', 'connection', 'alliance', 'partnership', 'friendship', 'companionship', 'camaraderie', 'fellowship', 'brotherhood', 'sisterhood', 'community', 'society'],
549
- EXPLORATION: ['discovery', 'journey', 'expedition', 'exploration', 'voyage', 'quest', 'adventure', 'pilgrimage', 'odyssey', 'trek', 'travel', 'wander', 'roaming', 'venture', 'excursion', 'tour', 'trip', 'passage', 'trail', 'path', 'route', 'course', 'way', 'track', 'road', 'highway', 'pathway', 'passageway', 'mission', 'crusade', 'campaign', 'enterprise', 'undertaking', 'pursuit', 'search', 'hunt'],
550
- ECONOMIC: ['opportunity', 'transaction', 'deal', 'exchange', 'trade', 'negotiation', 'bargain', 'contract', 'agreement', 'partnership', 'business', 'commerce', 'market', 'bazaar', 'auction', 'sale', 'purchase', 'acquisition', 'investment', 'venture', 'enterprise', 'company', 'corporation', 'firm', 'establishment', 'operation', 'industry', 'wealth', 'fortune', 'treasure', 'riches', 'assets', 'resources', 'capital', 'funds', 'finance', 'economy'],
551
- MYSTERY: ['mystery', 'enigma', 'puzzle', 'riddle', 'secret', 'conundrum', 'intrigue', 'case', 'investigation', 'inquiry', 'problem', 'question', 'dilemma', 'paradox', 'contradiction', 'anomaly', 'aberration', 'oddity', 'curiosity', 'confidentiality', 'privacy', 'secrecy', 'examination', 'inspection', 'analysis', 'study', 'research', 'probe', 'search'],
552
- SUPERNATURAL: ['phenomenon', 'manifestation', 'vision', 'curse', 'omen', 'prophecy', 'miracle', 'portent', 'sign', 'revelation', 'apparition', 'specter', 'phantom', 'ghost', 'spirit', 'wraith', 'phantasm', 'shade', 'shadow', 'presence', 'magic', 'sorcery', 'witchcraft', 'wizardry', 'enchantment', 'spell', 'charm', 'hex', 'incantation', 'ritual', 'divination', 'prediction', 'foretelling', 'augury', 'harbinger', 'herald'],
553
- POLITICAL: ['affair', 'intrigue', 'scheme', 'conspiracy', 'plot', 'alliance', 'treaty', 'summit', 'crisis', 'scandal', 'diplomacy', 'mediation', 'arbitration', 'conciliation', 'reconciliation', 'settlement', 'accord', 'pact', 'compact', 'government', 'administration', 'regime', 'authority', 'power', 'rule', 'governance', 'leadership', 'command', 'control', 'election', 'campaign', 'vote', 'ballot', 'poll', 'referendum', 'plebiscite', 'selection', 'choice', 'decision'],
554
- TECHNOLOGICAL: ['innovation', 'malfunction', 'breakthrough', 'system', 'device', 'invention', 'machine', 'apparatus', 'contraption', 'mechanism', 'technology', 'gadget', 'tool', 'instrument', 'implement', 'appliance', 'equipment', 'hardware', 'software', 'firmware', 'automation', 'mechanization', 'computerization', 'digitization', 'modernization', 'upgrade', 'enhancement', 'improvement', 'advancement', 'progress', 'engine', 'motor', 'generator', 'transformer', 'converter', 'processor', 'controller', 'regulator', 'modulator', 'amplifier'],
555
- MAGIC: ['spell', 'ritual', 'enchantment', 'conjuration', 'incantation', 'sorcery', 'wizardry', 'arcana', 'mysticism', 'thaumaturgy', 'magic', 'magick', 'witchcraft', 'necromancy', 'alchemy', 'divination', 'summoning', 'invocation', 'evocation', 'conjuring', 'charm', 'hex', 'curse', 'blessing', 'benediction', 'prayer', 'supplication', 'appeal', 'artifact', 'relic', 'talisman', 'amulet', 'trinket', 'bauble', 'ornament', 'jewel', 'gem'],
556
- SPELLCASTING: ['casting', 'invocation', 'evocation', 'summoning', 'channeling', 'weaving', 'manipulation', 'control', 'mastery', 'art', 'power', 'energy', 'force', 'mana', 'essence', 'aura', 'aether', 'ether', 'quintessence', 'spirit', 'technique', 'method', 'practice', 'discipline', 'school', 'tradition', 'path', 'way', 'style', 'form']
683
+ const descriptions = {
684
+ COMBAT: [
685
+ 'The clash of steel echoes through the air as a heavily armed mercenary steps forward, eyes gleaming with battle lust and gold coins jingling in his purse.',
686
+ 'From the darkened alley, a pack of wild dogs with unnaturally sharp teeth and glowing red eyes launches itself at you with terrifying speed.',
687
+ 'A grizzled veteran warrior, his armor scarred from countless battles, raises his sword and bellows a challenge that shakes the very ground beneath your feet.',
688
+ 'Bandits emerge from the trees ahead, their leader twirling a wicked curved blade while his companions nock arrows to their bows with practiced ease.',
689
+ 'The air fills with the acrid stench of smoke as enemy soldiers pour from a breached fortress wall, their war cries rising to a deafening crescendo.',
690
+ 'A colossal troll lumbers into view, its massive club dragging grooves in the earth as it sniffs the air for fresh meat, its beady eyes locking onto you.',
691
+ 'Skeletal warriors rise from ancient burial mounds, their rusted weapons still sharp and their empty sockets burning with necromantic fire.',
692
+ 'The arena sands shift beneath your feet as gladiators from distant lands circle you, each armed with exotic weapons and fueled by the crowd\'s bloodlust.',
693
+ 'Thunder crashes as a storm giant descends from blackened clouds, wielding lightning like a whip and commanding the tempest itself in battle.',
694
+ 'Crystal golems emerge from the cavern walls, their faceted bodies refracting light into deadly prisms that can slice through armor like butter.',
695
+ 'A vampire lord emerges from his coffin at dusk, his cloak billowing like living shadow as he unleashes a horde of lesser undead upon the battlefield.',
696
+ 'Mechanical automatons march in perfect formation, their steam-powered limbs hissing as they unleash a barrage of alchemical explosives.',
697
+ 'The dragon\'s roar shakes the mountains as it swoops low, its scales gleaming like molten metal and its breath promising fiery annihilation.',
698
+ 'Barbarian hordes crest the hill, their painted faces contorted in rage as they charge with axes raised, their war chants drowning out all other sound.',
699
+ 'Elven archers materialize from the forest canopy, their arrows tipped with enchanted silver that can pierce magical defenses.',
700
+ 'Dwarven siege engines rumble forward, their massive ballistae loaded with enchanted bolts capable of shattering castle gates.',
701
+ 'Orc warlords clash their weapons against tribal shields, their guttural battle cries promising a fight to the death and beyond.',
702
+ 'Shadow assassins strike from the darkness, their poisoned blades leaving trails of inky blackness that devour light itself.',
703
+ 'Paladin knights charge on armored warhorses, their lances lowered and holy banners fluttering as they crusade against the forces of darkness.',
704
+ 'Pirate crews board your ship in a frenzy of cutlasses and pistols, their captain\'s hook gleaming wickedly in the moonlight.',
705
+ 'Beastmasters unleash their trained monstrosities - dire wolves, giant spiders, and mutated bears - all hungry for combat.',
706
+ 'Spellcasters duel in the skies above, hurling bolts of arcane energy that illuminate the battlefield with impossible colors.',
707
+ 'Time distortions ripple through the combat zone as chronomancers manipulate the flow of battle, aging weapons to dust or rejuvenating fallen allies.',
708
+ 'Elemental lords manifest in physical form, summoning hurricanes of fire, tidal waves of water, and avalanches of stone to crush their enemies.',
709
+ 'Psychic warriors invade your mind even as their physical forms clash, planting seeds of doubt and fear that weaken your resolve.',
710
+ 'Alien invaders descend in crystalline ships, their energy weapons humming with otherworldly power that defies conventional defense.',
711
+ 'Undead legions march with mechanical precision, their decaying forms augmented by alchemical treatments that grant unnatural strength.',
712
+ 'Fey warriors dance through the battlefield, their movements too graceful and swift for mortal eyes to follow, leaving trails of glittering magic.',
713
+ 'Demon princes tear through reality itself to enter the fray, their flaming weapons and hellish auras promising eternal torment.',
714
+ 'Celestial beings descend with wings of light, their divine weapons shining with the power of creation itself.',
715
+ 'Void entities seep through cracks in reality, their amorphous forms devouring matter and magic alike in their endless hunger.'
716
+ ],
717
+ SOCIAL: [
718
+ 'A elegantly dressed noblewoman approaches with graceful poise, her silk gown whispering against the floor as she extends a gloved hand bearing a sealed letter.',
719
+ 'Sweat beads on the brow of a frantic messenger who bursts through the tavern doors, gasping that he carries urgent news from the royal court.',
720
+ 'An elderly scholar with ink-stained fingers and spectacles perched on his nose beckons you closer, his voice barely containing his excitement over a remarkable discovery.',
721
+ 'A mysterious stranger in a hooded cloak slips a small, intricately carved box into your hand with a whispered warning about powerful forces at work.',
722
+ 'The innkeeper\'s daughter, her apron stained with flour and her cheeks flushed from the kitchen heat, pulls you aside with news of a secret meeting.',
723
+ 'A royal advisor, his robes embroidered with golden thread, requests a private audience to discuss matters of state that could change the kingdom\'s fate.',
724
+ 'Tavern regulars gather around you, their faces weathered by time and ale, sharing stories of legendary heroes and forgotten treasures.',
725
+ 'A foreign merchant, his accent thick and musical, offers exotic spices and silks while hinting at political unrest in distant lands.',
726
+ 'The town mayor hosts a lavish banquet in your honor, where nobles and commoners alike seek your favor and political alliance.',
727
+ 'A wandering bard strums his lute outside the inn, his songs telling of your exploits and drawing admirers who wish to join your cause.',
728
+ 'An alchemist demonstrates wondrous potions in the market square, offering you a partnership that could revolutionize healing and warfare.',
729
+ 'The captain of the guard seeks your counsel on a series of mysterious disappearances that threaten the city\'s peace.',
730
+ 'A beautiful enchantress invites you to her tower for tea, her eyes sparkling with curiosity about your adventures and magical potential.',
731
+ 'Guild masters from various crafts approach you with proposals for joint ventures that could make you wealthy beyond imagination.',
732
+ 'A retired general, his uniform still crisp despite his age, offers tactical advice and hints at a coming conflict that requires heroes.',
733
+ 'The high priestess of the temple requests your presence for a blessing ceremony that could grant you divine favor.',
734
+ 'A circus master with a twinkle in his eye offers you a starring role in his next performance, promising fame and fortune.',
735
+ 'Diplomatic envoys from rival nations compete for your allegiance, each offering alliances, gold, and political power.',
736
+ 'A renowned artist begs for the privilege of painting your portrait, claiming your legend deserves immortalization on canvas.',
737
+ 'The librarian of the great archive reveals ancient texts that speak of your destiny and offers to teach you forbidden knowledge.',
738
+ 'A pirate captain, his peg leg thumping against the dock, proposes a lucrative partnership in maritime adventures.',
739
+ 'The queen\'s personal attendant delivers an invitation to court, where royal favor could elevate your status immensely.',
740
+ 'A master thief offers his services for a heist that could topple a corrupt noble and redistribute wealth to the deserving.',
741
+ 'Scholars from the arcane academy invite you to present your findings, offering research grants and magical artifacts.',
742
+ 'A caravan master proposes joining his expedition to uncharted territories, promising glory and unimaginable discoveries.',
743
+ 'The head chef of the royal kitchen seeks your opinion on a new recipe that could become legendary throughout the land.',
744
+ 'A famous playwright offers to immortalize your deeds in a theatrical production that will tour every major city.',
745
+ 'Tribal elders from distant lands seek your mediation in an ancient conflict, offering ancestral artifacts as payment.',
746
+ 'A mysterious oracle appears in a dream, urging you to seek her out in the waking world for prophecies of great importance.',
747
+ 'The commander of the city watch requests your help investigating a conspiracy that threatens the very foundations of society.',
748
+ 'An eccentric inventor demonstrates flying machines and mechanical wonders, offering partnership in technological revolution.'
749
+ ],
750
+ EXPLORATION: [
751
+ 'Your torchlight catches the glint of gold in the depths of this ancient tomb, but as you approach, you realize the treasure is guarded by something far more valuable - and dangerous.',
752
+ 'The dense jungle canopy parts to reveal a vine-choked stone temple, its weathered carvings depicting scenes of forgotten gods and impossible magic.',
753
+ 'A narrow cave passage opens into a vast underground chamber where glowing crystals illuminate walls covered in bioluminescent fungi and strange, moving shadows.',
754
+ 'The abandoned castle towers loom against the stormy sky, their broken battlements hiding secrets that have waited centuries to be discovered.',
755
+ 'Your boots sink into the soft earth of this overgrown ruin, where the air hangs heavy with the scent of decaying magic and long-forgotten enchantments.',
756
+ 'The ocean depths reveal a sunken city of coral and pearl, where merfolk guard treasures that could buy kingdoms.',
757
+ 'A floating island drifts through the clouds above, its surface dotted with crystal spires and gardens that defy gravity.',
758
+ 'The desert sands part to reveal an underground oasis, complete with palm trees, freshwater springs, and a hidden civilization.',
759
+ 'Mountain peaks pierce the sky like jagged teeth, concealing monasteries where monks practice impossible feats of magic and meditation.',
760
+ 'The frozen tundra hides entrances to subterranean realms where fire elementals dance and warmth defies the endless cold.',
761
+ 'Volcanic calderas bubble with lava that forms intricate patterns, revealing maps to legendary weapons forged in dragonfire.',
762
+ 'Ancient forests whisper secrets to those who listen, their trees older than nations and wiser than the oldest sages.',
763
+ 'Crystal caverns refract light into rainbows that reveal hidden paths to pocket dimensions filled with impossible wonders.',
764
+ 'Shipwrecked vessels on stormy coasts contain logs that speak of islands where time flows differently and dreams become reality.',
765
+ 'The moonlit moors reveal standing stones that align with celestial events, opening portals to other worlds and times.',
766
+ 'Subterranean rivers carve through glowing geodes, leading to chambers where mineral spirits offer wisdom and power.',
767
+ 'Cloud palaces float in eternal twilight, home to sky nomads who trade in winds, weather, and aerial combat techniques.',
768
+ 'The deepest abysses contain bioluminescent ecosystems where creatures of nightmare and delight coexist in fragile balance.',
769
+ 'Magnetic anomalies in the northern wastes point to ancient alien crash sites, filled with technology beyond mortal comprehension.',
770
+ 'Sacred groves where the veil between worlds grows thin allow glimpses of faerie realms and their capricious inhabitants.',
771
+ 'The highest peaks reveal monasteries carved into the rock itself, where lamas teach enlightenment through impossible trials.',
772
+ 'Coral reefs form living cathedrals underwater, where sea spirits hoard knowledge of lost civilizations and sunken magic.',
773
+ 'Lightning-scarred plains hide entrances to storm elemental realms, where thunder beings forge weapons of pure electricity.',
774
+ 'The darkest swamps conceal voodoo temples where practitioners commune with spirits of earth, water, and transformation.',
775
+ 'Starlit deserts contain astronomical alignments that reveal stargates to other planets and cosmic mysteries.',
776
+ 'Ice caverns in glacial mountains preserve ancient libraries, their frozen tomes containing spells that could reshape reality.',
777
+ 'The heart of active volcanoes reveals fire temples where salamanders guard artifacts that control flame and destruction.',
778
+ 'Underground salt mines form crystalline labyrinths where mirror spirits create illusions of endless wealth and power.',
779
+ 'Jungle canopies hide aerial villages connected by vine bridges, home to tribes who commune with birds and weather spirits.',
780
+ 'The ocean floor reveals trenches where pressure has compressed matter into impossible densities, creating portals to other dimensions.',
781
+ 'Desert whirlwinds conceal entrances to sand element realms, where djinn offer wishes and terrible bargains.'
782
+ ],
783
+ ECONOMIC: [
784
+ 'A shrewd merchant with calculating eyes spreads a velvet cloth before you, displaying jewels that sparkle like captured starlight and whisper promises of wealth.',
785
+ 'The air in the bustling market square vibrates with opportunity as a caravan master offers you a share in a profitable trade route to distant lands.',
786
+ 'An alchemist\'s apprentice, her robes stained with mysterious substances, offers you a vial of glowing liquid that could revolutionize potion-making techniques.',
787
+ 'The bank vault door swings open to reveal stacks of gold coins and precious gems, but the vault keeper\'s nervous glances suggest not everything is as it seems.',
788
+ 'A land agent unfurls ancient property deeds showing ownership of fertile farmland, abandoned mines, and strategic border territories waiting to be claimed.',
789
+ 'The stock exchange buzzes with frantic activity as brokers offer you shares in revolutionary inventions that could change the world.',
790
+ 'A mining consortium proposes partnership in extracting rare minerals from dragon-guarded mountains, promising unimaginable profits.',
791
+ 'The royal treasury overflows with confiscated wealth, but the king offers you a finder\'s fee to locate even greater hoards.',
792
+ 'Shipping magnates compete for your investment in a new fleet that could dominate oceanic trade routes.',
793
+ 'An auction house displays legendary artifacts, their auctioneers promising that bidding could make you the richest person alive.',
794
+ 'The black market thrives in shadowed alleys, where forbidden goods and illicit services offer wealth beyond moral constraints.',
795
+ 'Agricultural barons offer shares in genetically enhanced crops that grow ten times faster and feed entire nations.',
796
+ 'The gambling halls of the rich and powerful invite you to high-stakes games where fortunes are won and lost in a single roll.',
797
+ 'Patent offices overflow with revolutionary inventions, their inventors seeking backers willing to risk everything for innovation.',
798
+ 'The slave markets of distant lands offer human capital for ambitious projects, though the ethics weigh heavily on the soul.',
799
+ 'Art collectors from around the world bid furiously for masterpieces that could appreciate in value for centuries.',
800
+ 'The weapon smiths\' guild offers exclusive contracts for arming armies, promising profits from both sides of every war.',
801
+ 'Magical artifact dealers display items of impossible power, their prices reflecting the lives that could be saved or lost.',
802
+ 'The spice merchants of the east offer monopoly rights to exotic flavors that could make you the culinary king of nations.',
803
+ 'Bank consortiums propose loans with interest rates that could either make you a tycoon or beggar you completely.',
804
+ 'The entertainment industry seeks investors for theaters and circuses that could become cultural institutions.',
805
+ 'Fur traders from frozen north offer pelts of mythical beasts, their rarity guaranteeing astronomical prices.',
806
+ 'The information brokers sell secrets that could manipulate markets, politics, and even the course of history.',
807
+ 'Construction guilds bid for massive projects - castles, cathedrals, and infrastructure that could employ thousands.',
808
+ 'The alchemical industry offers shares in potions that could extend life, enhance beauty, or grant impossible abilities.',
809
+ 'Pirate captains offer letters of marque for privateering ventures that blur the line between commerce and warfare.',
810
+ 'The fossil trade reveals ancient bones that could rewrite history, their value increasing with scholarly verification.',
811
+ 'Jewelry artisans offer custom pieces embedded with magic, their prices reflecting both craftsmanship and enchantment.',
812
+ 'The livestock breeders showcase genetically superior animals that could revolutionize farming and transportation.',
813
+ 'Underground fight clubs offer ownership stakes in gladiatorial combat, where champions become legends and legends become rich.',
814
+ 'The map makers\' guild sells charts to uncharted territories, their accuracy determining whether you return as hero or corpse.'
815
+ ],
816
+ MYSTERY: [
817
+ 'Blood-red symbols glow faintly on the ancient stone tablet, pulsing in rhythm with your heartbeat as if trying to communicate some urgent, unknowable message.',
818
+ 'The abandoned manor\'s windows stare at you like empty eye sockets, while strange whispers emanate from the locked attic, begging to be investigated.',
819
+ 'Your fingers brush against a hidden compartment in the antique desk, revealing a bundle of yellowed letters tied with faded ribbon and sealed with black wax.',
820
+ 'The full moon casts eerie shadows through the twisted trees as you discover fresh footprints that lead to a cliff edge and simply... stop.',
821
+ 'A child\'s doll lies abandoned in the muddy street, its porcelain face cracked and its glass eyes reflecting a wisdom far beyond its tiny form.',
822
+ 'The mirror reflects a figure that isn\'t there, its movements mimicking yours with increasing precision and malevolent intent.',
823
+ 'Ancient runes appear on your skin overnight, glowing with inner light and whispering secrets in languages you shouldn\'t understand.',
824
+ 'The town clock strikes thirteen times at midnight, and with each toll, reality seems to thin like worn fabric.',
825
+ 'A book in the library rearranges its pages when you\'re not looking, revealing chapters that weren\'t there before.',
826
+ 'Your shadow detaches itself during the eclipse, moving independently and leading you toward forbidden knowledge.',
827
+ 'The painting in the gallery ages before your eyes, its subjects changing expression from joy to terror in seconds.',
828
+ 'Footprints appear in fresh snow leading to nowhere, as if someone walked into the air itself and vanished.',
829
+ 'The music box plays a melody you\'ve never heard, yet somehow recognize from dreams you can\'t quite remember.',
830
+ 'Candles in the abandoned chapel light themselves at dusk, their flames dancing to an unheard rhythm.',
831
+ 'The well at the village center bubbles with water that tastes of salt and blood, though no sea lies nearby.',
832
+ 'Your reflection smiles when you don\'t, its teeth too sharp and its eyes too knowing for comfort.',
833
+ 'The forest path rearranges itself nightly, leading wanderers to places they never intended to visit.',
834
+ 'Coins found in the riverbed bear the faces of rulers who died centuries ago, yet the metal feels warm to the touch.',
835
+ 'The storm clouds form letters that spell out warnings in a script that changes meaning with each gust of wind.',
836
+ 'The old tree in the town square bleeds sap that smells of copper and forms patterns that predict future events.',
837
+ 'Whispers in empty rooms speak of events that haven\'t happened yet, their voices growing louder with each passing day.',
838
+ 'The cave paintings move when unobserved, their ancient artists adding new scenes to their prehistoric narratives.',
839
+ 'Your dreams begin bleeding into reality, with objects from your nightmares appearing in the waking world.',
840
+ 'The compass needle spins wildly in certain locations, pointing to truths that contradict known geography.',
841
+ 'The abandoned mine shaft echoes with the sounds of machinery that was never installed, yet functions perfectly.',
842
+ 'Flowers bloom in impossible colors during the new moon, their petals containing maps to hidden realms.',
843
+ 'The tavern sign creaks with voices that tell stories of patrons long dead, their tales growing more urgent.',
844
+ 'Frost forms patterns on windows that depict crimes not yet committed, their icy scenes melting with the dawn.',
845
+ 'The mountain peak shows different faces depending on the time of day, each revealing aspects of an impossible geography.',
846
+ 'Books in the restricted section rearrange themselves alphabetically by authors who never existed.',
847
+ 'The echo in the canyon repeats words you haven\'t spoken yet, their meaning becoming clearer with each repetition.'
848
+ ],
849
+ SUPERNATURAL: [
850
+ 'The mirror in the abandoned bedroom shows your reflection moving independently, its mouth opening in a silent scream as blood begins to trickle from its eyes.',
851
+ 'Ghostly apparitions drift through the ruined chapel walls, their translucent forms reaching toward you with fingers that pass through flesh like mist.',
852
+ 'The ancient tome on the pedestal opens itself, its pages turning with invisible hands to reveal spells that bend the very fabric of reality.',
853
+ 'A storm brews overhead despite the cloudless sky, and within the thunder you hear voices speaking in languages long dead to the mortal world.',
854
+ 'The statue in the town square animates at midnight, its stone eyes fixing upon you with an intelligence that suggests it has been watching for centuries.',
855
+ 'Angelic choirs manifest in the cathedral rafters, their ethereal songs promising salvation while shadows deepen in unholy corners.',
856
+ 'Demonic sigils burn themselves into the stone floor, each symbol representing a pact that could grant power at terrible cost.',
857
+ 'The veil between worlds thins at the crossroads, allowing glimpses of creatures that should not - and cannot - exist.',
858
+ 'Crystal balls fog with visions of alternate timelines, showing you choices that could reshape reality itself.',
859
+ 'Spectral hounds bay at the moonless sky, their howls opening rifts to the hunting grounds of forgotten gods.',
860
+ 'Blood rain falls from cloudless skies, each drop containing memories of those who died violently in this place.',
861
+ 'The ground splits open to reveal a bottomless abyss where stars shine in impossible constellations.',
862
+ 'Time loops manifest as ghostly figures repeating the same actions eternally, their faces masks of frozen horror.',
863
+ 'Elemental forces personify themselves as living beings of pure fire, water, earth, and air, demanding tribute.',
864
+ 'Prophetic dreams invade your sleep, showing futures that become real when you wake, changing with each decision.',
865
+ 'The dead rise from their graves at midnight, not as zombies, but as themselves - confused and seeking answers.',
866
+ 'Reality fractures like broken glass, revealing glimpses of other dimensions where physics bows to different laws.',
867
+ 'Cursed artifacts hum with contained power, their enchantments promising greatness while sowing seeds of doom.',
868
+ 'Fey circles appear in impossible locations - mountaintops, ocean floors, cloud banks - gateways to eternal revelry.',
869
+ 'The stars rearrange themselves into messages written in celestial script, foretelling events that defy mortal comprehension.',
870
+ 'Living shadows detach from their owners, gaining sentience and hunger for experiences they can never have.',
871
+ 'Ancient curses manifest as physical ailments that spread like contagion, carrying the weight of centuries.',
872
+ 'Divine interventions occur in mundane moments - water turning to wine, bread multiplying, wounds healing instantly.',
873
+ 'Psychic echoes reverberate through crowded streets, allowing you to hear thoughts that should remain private.',
874
+ 'The boundary between dream and reality dissolves, causing nightmares to manifest as tangible threats.',
875
+ 'Sacred geometry manifests in the architecture around you, revealing hidden chambers and divine purposes.',
876
+ 'Soul fragments litter the battlefield, each one a tiny echo of lives cut short, begging for completion.',
877
+ 'Weather patterns form words and symbols in the sky, communicating messages from entities beyond understanding.',
878
+ 'The laws of nature suspend themselves temporarily, allowing impossible feats like walking on air or breathing underwater.',
879
+ 'Memory spirits possess the living, forcing them to relive traumas from centuries past.',
880
+ 'Reality anchors fail, causing objects and people to phase in and out of existence at random intervals.'
881
+ ],
882
+ POLITICAL: [
883
+ 'The royal herald unfurls a crimson scroll bearing the king\'s seal, announcing a tournament that will decide the fate of disputed border territories.',
884
+ 'Whispers in the shadowed corners of the throne room speak of assassination plots, forbidden alliances, and betrayals that could shatter the kingdom.',
885
+ 'A foreign diplomat, his silken robes embroidered with golden thread, offers you a treaty that promises peace but demands unacceptable concessions.',
886
+ 'The town council convenes in emergency session, their faces pale as they discuss reports of monstrous creatures massing at the kingdom\'s borders.',
887
+ 'Ancient scrolls recovered from a forgotten archive reveal prophecies of royal bloodlines, hidden heirs, and conspiracies that span generations.',
888
+ 'The parliament descends into chaos as factions vie for control, their debates threatening to erupt into civil war.',
889
+ 'A rebel leader offers you command of guerrilla forces, promising glory and land reforms in exchange for your allegiance.',
890
+ 'The emperor\'s court buzzes with intrigue as concubines and advisors compete for influence over the aging monarch.',
891
+ 'Diplomatic cables reveal that neighboring nations are forming secret alliances that could isolate your homeland.',
892
+ 'The senate votes on war declarations, their decisions potentially dooming thousands to death for political gain.',
893
+ 'Corrupt officials auction government positions to the highest bidder, their greed threatening the nation\'s stability.',
894
+ 'Election campaigns turn violent as rival candidates employ assassins and smear campaigns to eliminate competition.',
895
+ 'The prime minister proposes controversial reforms that could either modernize the nation or tear it apart.',
896
+ 'Border disputes escalate as surveyors discover mineral-rich territories claimed by multiple nations.',
897
+ 'The chancellor\'s office leaks documents revealing widespread espionage that compromises national security.',
898
+ 'Tribal councils debate whether to ally with colonial powers or resist, their decisions affecting generations.',
899
+ 'The president\'s cabinet fractures over policy disagreements, creating opportunities for foreign manipulation.',
900
+ 'Revolutionary pamphlets circulate underground, their radical ideas inspiring both hope and terror among the populace.',
901
+ 'The governor issues emergency decrees that suspend civil liberties, claiming necessity in the face of crisis.',
902
+ 'International summits become battlegrounds of rhetoric, where words can start wars or prevent them.',
903
+ 'The monarch\'s illegitimate children emerge from hiding, each claiming the throne with forged documents.',
904
+ 'Political exiles return with foreign backing, threatening coups and destabilizing the current regime.',
905
+ 'The congress debates taxation policies that could either fund prosperity or incite widespread rebellion.',
906
+ 'Diplomatic immunity becomes a shield for spies and assassins, complicating international relations.',
907
+ 'The supreme court rules on constitutional matters that could redefine the balance of power in government.',
908
+ 'Military juntas seize control during times of crisis, promising order through authoritarian rule.',
909
+ 'The foreign minister negotiates trade agreements that favor certain industries while harming others.',
910
+ 'Election fraud allegations spark protests and investigations that threaten the legitimacy of government.',
911
+ 'The intelligence agency uncovers plots within plots, revealing that no one can be trusted completely.',
912
+ 'Colonial administrators struggle to maintain control as independence movements gain momentum.',
913
+ 'The treasury secretary proposes economic policies that could either stimulate growth or cause depression.'
914
+ ],
915
+ TECHNOLOGICAL: [
916
+ 'Gears grind and pistons hiss as a massive mechanical construct awakens, its crystal eyes focusing on you with artificial intelligence beyond mortal comprehension.',
917
+ 'The laboratory air hums with electricity as you discover a device that can manipulate time itself, bending seconds into minutes and minutes into hours.',
918
+ 'A network of glowing conduits pulses with energy, channeling power from sources that seem to draw from the very stars themselves.',
919
+ 'The mechanical arm extends with hydraulic precision, its metallic fingers capable of crafting objects with microscopic perfection.',
920
+ 'Strange symbols dance across crystal displays as you interface with a device that can predict future events with uncanny accuracy.',
921
+ 'Steam-powered automatons march in formation, their brass bodies gleaming as they execute commands with mechanical precision.',
922
+ 'The telegraph network crackles with messages from distant cities, revealing plots and opportunities in real-time.',
923
+ 'Clockwork hearts beat within mechanical chests, offering immortality through technology rather than magic.',
924
+ 'Flying machines soar through the clouds, their propellers chopping the air as pilots navigate by steam-powered compass.',
925
+ 'The printing press churns out revolutionary pamphlets, their words spreading ideas faster than any army could march.',
926
+ 'Submarine vessels lurk beneath the waves, their periscopes watching for targets in an underwater war.',
927
+ 'The phonograph captures voices from beyond the grave, preserving memories and secrets for eternity.',
928
+ 'Electric lights banish shadows from entire cities, illuminating secrets that once hid in darkness.',
929
+ 'The calculating engine solves complex equations in moments, predicting astronomical events and military strategies.',
930
+ 'Railroad networks span continents, carrying goods and people at speeds that shrink the world.',
931
+ 'The camera captures souls on photographic plates, revealing auras and emotions invisible to the naked eye.',
932
+ 'Telephones connect voices across vast distances, allowing conspirators to plot without ever meeting.',
933
+ 'The dynamo generates limitless power, fueling factories that produce goods beyond imagination.',
934
+ 'Airships float majestically above the clouds, their gas bags filled with explosive potential.',
935
+ 'The microscope reveals worlds within droplets, showing bacteria and viruses that threaten all life.',
936
+ 'Mechanical looms weave fabrics of impossible fineness, creating garments that protect against any element.',
937
+ 'The spectroscope analyzes light from distant stars, revealing the composition of celestial bodies.',
938
+ 'Powered exoskeletons grant superhuman strength, allowing workers to move mountains or build cathedrals.',
939
+ 'The wireless transmitter sends messages through the air itself, revolutionizing communication forever.',
940
+ 'Refrigeration machines preserve food indefinitely, ending famines and changing the nature of trade.',
941
+ 'The seismograph predicts earthquakes and volcanic eruptions, saving lives through technological prophecy.',
942
+ 'Steam hammers forge impossible alloys, creating metals stronger than any natural substance.',
943
+ 'The telescope peers into the depths of space, discovering planets and comets that defy ancient astronomy.',
944
+ 'Mechanical calculators balance complex ledgers in seconds, preventing fraud and ensuring fair commerce.',
945
+ 'The phonograph captures voices from beyond the grave, preserving memories and secrets for eternity.',
946
+ 'Powered streetcars revolutionize urban transport, connecting cities in ways never before possible.'
947
+ ],
948
+ MAGIC: [
949
+ 'Arcane runes float in the air like living fireflies, weaving complex spells that bend light and shadow to create impossible illusions.',
950
+ 'The enchanted forest breathes with magical life, its trees whispering secrets and its flowers blooming in colors that don\'t exist in nature.',
951
+ 'A staff topped with a glowing crystal channels raw magical energy, shaping it into bolts of lightning that dance across your fingertips.',
952
+ 'The air shimmers with residual magic as you discover the site where a powerful ritual was recently performed, leaving echoes of incredible power.',
953
+ 'Enchanted artifacts line the shelves of this hidden vault, each pulsing with contained magic that begs to be unleashed upon the world.',
954
+ 'The wizard\'s tower spirals into the clouds, its rooms expanding infinitely and containing libraries of spells from every conceivable reality.',
955
+ 'Potion bottles bubble with elixirs that can grant eternal youth, infinite wisdom, or transformations beyond imagination.',
956
+ 'A magical mirror shows not your reflection, but alternate versions of yourself from parallel lives you might have lived.',
957
+ 'The alchemist\'s laboratory contains philosopher\'s stones that transmute not just lead to gold, but thoughts to reality itself.',
958
+ 'Enchanted weapons sing in their scabbards, their blades forged in dragonfire and quenched in the tears of ancient gods.',
959
+ 'The summoning circle glows with otherworldly light as creatures from beyond the veil manifest, offering power and knowledge.',
960
+ 'Crystal formations in the cavern amplify magical energies, creating zones where spells become reality with mere thoughts.',
961
+ 'The grimoire writes itself as you read, adding new spells born from your deepest desires and darkest fears.',
962
+ 'Magical gardens bloom with flowers that sing, fruits that grant visions, and herbs that cure any ailment.',
963
+ 'The enchanted forge hammers magical metals that remember their shape, reforming weapons broken in battle.',
964
+ 'Aura readers interpret the colors of your soul, revealing potentials and curses that shape your destiny.',
965
+ 'Telekinetic forces move objects with invisible hands, building structures or crushing enemies with pure willpower.',
966
+ 'Divination pools show futures that shift with every decision, revealing the butterfly effect of your choices.',
967
+ 'Elemental bindings allow control of fire, water, earth, and air, commanding the fundamental forces of nature.',
968
+ 'The magical library contains books that transport readers to the worlds within their pages, living the stories they contain.',
969
+ 'Enchantment workshops imbue ordinary objects with extraordinary powers, from self-cleaning dishes to flying carpets.',
970
+ 'The astral plane opens before you, allowing travel through dreams and exploration of the collective unconscious.',
971
+ 'Rune stones arrange themselves in patterns that predict events, their ancient symbols holding the keys to fate.',
972
+ 'The potion brewer demonstrates elixirs that alter time perception, allowing hours to pass in seconds or seconds to last hours.',
973
+ 'Magical beasts offer bonds of companionship, their loyalties purchased with trust rather than gold.',
974
+ 'The spell forge combines different magics into hybrids, creating effects that bend multiple laws of reality simultaneously.',
975
+ 'Enchanted inks write contracts that enforce themselves, binding parties with magical consequences for breach.',
976
+ 'The crystal ball network connects seers worldwide, allowing instantaneous communication across any distance.',
977
+ 'Transformation chambers allow shapeshifting into any form, from dragons to mice to clouds of mist.',
978
+ 'The magical academy teaches spells that rewrite memories, alter emotions, and reshape personalities.',
979
+ 'Portal stones create gateways to anywhere imaginable, from the center of the earth to the heart of stars.'
980
+ ],
981
+ SPELLCASTING: [
982
+ 'A circle of glowing runes pulses with power as a master spellcaster channels energies from multiple elemental planes simultaneously.',
983
+ 'The air crackles with arcane electricity as complex incantations weave through the atmosphere, bending reality to the caster\'s will.',
984
+ 'Crystal orbs float in intricate patterns, focusing beams of magical energy that could level mountains or heal the gravest wounds.',
985
+ 'A spellbook lies open on the pedestal, its pages turning themselves as invisible forces practice casting spells of incredible complexity.',
986
+ 'The sorcerer\'s hands move in mesmerizing patterns, drawing power from ley lines and shaping it into effects that defy natural law.',
987
+ 'Fireballs erupt from outstretched palms, their flames dancing with unnatural colors as they seek out enemies with homing precision.',
988
+ 'Ice storms manifest from clear skies, coating battlefields in crystalline beauty while freezing foes in their tracks.',
989
+ 'Lightning arcs between fingertips, chaining through multiple targets and leaving trails of ozone and charred flesh.',
990
+ 'Earth spikes erupt from the ground like stony spears, impaling enemies with the fury of an awakened mountain.',
991
+ 'Healing waves pulse through crowds, mending wounds and curing diseases with the warmth of a mother\'s touch.',
992
+ 'Invisibility spells bend light around casters, rendering them ghosts in plain sight until they choose to strike.',
993
+ 'Telekinesis lifts boulders like feathers, hurling them at enemies or constructing fortifications in seconds.',
994
+ 'Illusion armies march across fields, their phantom soldiers creating chaos and confusion among real troops.',
995
+ 'Time bubbles slow enemies to a crawl while allies move at normal speed, creating devastating temporal advantages.',
996
+ 'Summoned elementals manifest as beings of pure force, their forms shifting between fire, water, earth, and air.',
997
+ 'Mind blasts shatter enemy wills, leaving them catatonic or turning allies against each other in confusion.',
998
+ 'Gravity wells pull enemies into crushing centers, compacting armor and bone with irresistible force.',
999
+ 'Portal spells create gateways for ambushes, allowing troops to appear behind enemy lines instantly.',
1000
+ 'Weather manipulation calls down hurricanes or clears skies, controlling battlefields with atmospheric fury.',
1001
+ 'Necrotic energy drains life from the living, transferring vitality to the caster in waves of dark power.',
1002
+ 'Divine light sears undead hordes, their holy radiance burning away darkness and corruption.',
1003
+ 'Shadow magic creates impenetrable darkness, hiding assassins and draining strength from those who enter.',
1004
+ 'Crystal barriers spring up instantly, deflecting arrows and spells with refracting magical shields.',
1005
+ 'Blood magic empowers spells with vital essence, creating effects limited only by the caster\'s willingness to pay.',
1006
+ 'Rune magic etches symbols of power into reality itself, creating permanent magical effects that endure.',
1007
+ 'Soul binding captures enemy spirits, preventing resurrection and creating permanent magical anchors.',
1008
+ 'Chaos magic unleashes unpredictable effects, from beneficial boons to catastrophic wild magic surges.',
1009
+ 'Order magic imposes structure on chaos, creating predictable zones where physics obeys strict rules.',
1010
+ 'Life magic accelerates growth and healing, causing plants to entangle foes and wounds to close instantly.',
1011
+ 'Death magic withers flesh and corrodes metal, aging enemies prematurely and weakening their weapons.',
1012
+ 'Dream magic sends enemies into nightmares, their sleeping minds fighting battles that kill them in reality.'
1013
+ ],
1014
+ FIGHTER: [
1015
+ 'The arena sands shift beneath your feet as a champion gladiator, his muscles rippling like coiled springs, raises his weapon in salute.',
1016
+ 'Battle-scarred veterans form a shield wall, their disciplined formation unbreakable as they advance with deadly purpose.',
1017
+ 'A master swordsman demonstrates techniques passed down through generations, his blade moving with the grace of a dancer and the precision of a surgeon.',
1018
+ 'The training grounds echo with the clash of weapons as warriors hone their skills, their sweat mixing with the dust of countless battles.',
1019
+ 'A tactical commander studies ancient battle maps, planning maneuvers that could turn the tide of legendary conflicts.',
1020
+ 'Weapon masters duel with exotic arms from across the world, their styles blending into a symphony of lethal precision.',
1021
+ 'Heavy infantry charges with spears lowered, their armored forms creating an unstoppable wall of steel and flesh.',
1022
+ 'Light skirmishers harass enemy flanks, their javelins and bows keeping formations off balance and disorganized.',
1023
+ 'Cavalry squadrons thunder across plains, their lances gleaming as they prepare to break enemy lines.',
1024
+ 'Archers form firing lines, their arrows darkening the sky like an artificial storm cloud.',
1025
+ 'Shield bearers lock together in tortoise formation, advancing slowly but inexorably toward victory.',
1026
+ 'Berserkers enter battle trance, their rage granting inhuman strength and pain immunity.',
1027
+ 'Duelists challenge champions to single combat, their honor and skill determining the outcome of larger battles.',
1028
+ 'Siege engineers construct war machines, their catapults and ballistae capable of breaching any fortress.',
1029
+ 'Scouts range ahead of main forces, mapping terrain and reporting enemy positions with deadly accuracy.',
1030
+ 'Medics tend to the wounded on chaotic battlefields, their skills preserving lives amid the carnage.',
1031
+ 'Quartermasters distribute weapons and armor, ensuring every soldier is equipped for the fight ahead.',
1032
+ 'Drill instructors break recruits and rebuild them into disciplined fighting machines.',
1033
+ 'Champions lead from the front, their heroic deeds inspiring allies and demoralizing enemies.',
1034
+ 'Tacticians analyze enemy formations, finding weaknesses that can be exploited for decisive victory.',
1035
+ 'Weapon smiths forge blades during lulls in battle, repairing damaged equipment and creating new tools.',
1036
+ 'Standard bearers carry unit flags, their symbols representing honor, tradition, and unbreakable resolve.',
1037
+ 'Sappers tunnel beneath enemy fortifications, undermining walls and creating surprise entrances.',
1038
+ 'Mounted archers circle battlefields, raining death from horseback with impossible accuracy.',
1039
+ 'Pikemen form hedgehog defenses, their long spears creating barriers that cavalry fears to approach.',
1040
+ 'Fencing masters teach the art of the blade, their lessons turning street fighters into elegant killers.',
1041
+ 'Wrestlers grapple with monstrous foes, using leverage and technique to overcome size differences.',
1042
+ 'Martial artists demonstrate forms that combine combat with spiritual discipline and physical perfection.',
1043
+ 'Gladiators train in various weapon combinations, mastering the tools of death from every culture.',
1044
+ 'Survival instructors teach wilderness combat, turning forests and mountains into allied terrain.',
1045
+ 'Honor guards protect leaders with their lives, their loyalty tested in the fires of battle.'
1046
+ ],
1047
+ GUILD: [
1048
+ 'The guild hall\'s great oak doors swing open to reveal masters of various crafts, each demonstrating skills that could only be learned through decades of dedication.',
1049
+ 'Apprentices scurry about the workshop, their hands skilled beyond their years as they craft items of remarkable quality and precision.',
1050
+ 'The guildmaster sits enthroned behind his massive desk, surrounded by ledgers and artifacts that represent the accumulated wealth of generations.',
1051
+ 'Skilled artisans demonstrate techniques that border on the magical, creating objects of such beauty and function that they seem impossible.',
1052
+ 'The guild library contains tomes of forgotten knowledge, guarded by scholars who have dedicated their lives to preserving and advancing their craft.',
1053
+ 'Master craftsmen showcase their lifework, from intricate jewelry to massive siege engines that could change the course of wars.',
1054
+ 'Apprenticeship ceremonies bind young talents to masters, creating lineages of skill that span centuries.',
1055
+ 'Quality inspectors examine finished works, ensuring that guild standards maintain the highest levels of excellence.',
1056
+ 'Innovation workshops develop new techniques, pushing the boundaries of what\'s possible with traditional crafts.',
1057
+ 'Trade negotiations establish pricing and territories, preventing destructive competition between guild members.',
1058
+ 'Heritage museums display artifacts from guild history, reminding members of their noble traditions and responsibilities.',
1059
+ 'Skill competitions pit masters against each other, their contests advancing the craft through friendly rivalry.',
1060
+ 'Education programs teach the next generation, ensuring that ancient techniques survive into the future.',
1061
+ 'Research divisions experiment with new materials and methods, discovering breakthroughs that revolutionize industries.',
1062
+ 'Ethics committees judge member conduct, maintaining honor and integrity within the guild\'s ranks.',
1063
+ 'Charitable foundations support aging masters and orphaned apprentices, creating a safety net for the entire community.',
1064
+ 'Diplomatic corps negotiate with other guilds and governments, securing favorable conditions for members.',
1065
+ 'Apprenticeship lotteries determine which masters receive which students, creating diverse skill lineages.',
1066
+ 'Technology exchanges share innovations between related crafts, accelerating progress across industries.',
1067
+ 'Retirement ceremonies honor masters who step down, their wisdom preserved in guild oral traditions.',
1068
+ 'Mentorship programs pair experienced crafters with novices, ensuring knowledge transfer across generations.',
1069
+ 'Quality certification programs guarantee authenticity, protecting consumers and guild reputation.',
1070
+ 'Innovation grants fund risky experiments that might lead to revolutionary breakthroughs.',
1071
+ 'Dispute resolution panels settle conflicts between members, maintaining harmony within the guild.',
1072
+ 'Historical preservation societies maintain ancient techniques, ensuring traditional crafts don\'t disappear.',
1073
+ 'Community outreach programs teach basic skills to the public, building goodwill and recruiting talent.',
1074
+ 'Research libraries catalog every advancement, creating searchable databases of craft knowledge.',
1075
+ 'Masterpiece competitions create showcases of exceptional work, attracting wealthy patrons and commissions.',
1076
+ 'Apprenticeship contracts establish clear expectations, protecting both masters and students legally.',
1077
+ 'Technology sharing agreements prevent monopolies, ensuring that innovations benefit the entire guild.',
1078
+ 'Legacy programs honor deceased masters, their names and achievements recorded for eternity.'
1079
+ ],
1080
+ UNDERWORLD: [
1081
+ 'Shadowy figures lurk in the alleyways, their faces obscured by hoods as they conduct business that would never see the light of day.',
1082
+ 'The thieves\' guild operates from a network of hidden tunnels, their agents moving like ghosts through the city\'s underbelly.',
1083
+ 'Contraband goods change hands in whispered conversations, each transaction carrying the weight of discovery and severe punishment.',
1084
+ 'The criminal underworld pulses with illicit activity, from smuggling operations to protection rackets that span the entire city.',
1085
+ 'Hidden dens of vice and villainy offer services that respectable society would never acknowledge, but desperately needs.',
1086
+ 'Black market auctions sell forbidden artifacts, their sellers anonymous and their buyers desperate or wealthy.',
1087
+ 'Assassins\' contracts are negotiated in smoke-filled rooms, their targets ranging from merchants to monarchs.',
1088
+ 'Smugglers\' caravans move under cover of night, their cargo valuable enough to start wars if discovered.',
1089
+ 'Protection rackets demand tribute from businesses, their enforcers making examples of those who refuse.',
1090
+ 'Information brokers trade secrets like currency, their networks spanning from slums to royal courts.',
1091
+ 'Fence operations launder stolen goods, turning hot property into legitimate merchandise.',
1092
+ 'Pirate crews offer privateering commissions, their letters of marque blurring legal and illegal lines.',
1093
+ 'Drug dens provide exotic substances, their dealers promising escape from reality\'s harsh demands.',
1094
+ 'Gambling dens operate with loaded dice and marked cards, their house always winning in the end.',
1095
+ 'Slave markets traffic in human lives, their auctions conducted in hidden chambers far from prying eyes.',
1096
+ 'Weapon smugglers deal in illegal arms, their inventory ranging from poisoned daggers to siege engines.',
1097
+ 'Forgery operations create false documents, their artists capable of duplicating any seal or signature.',
1098
+ 'Burglary crews plan heists of legendary difficulty, their targets including banks, museums, and palaces.',
1099
+ 'Extortion rings squeeze businesses dry, their threats backed by arson, sabotage, and worse.',
1100
+ 'Kidnapping specialists offer ransom services, their victims chosen for wealth and political influence.',
1101
+ 'Sabotage experts disrupt competitors, their methods ranging from industrial accidents to corporate espionage.',
1102
+ 'Terrorist cells plan attacks for political gain, their ideologies as varied as their methods of destruction.',
1103
+ 'Money launderers clean illicit gains, their complex schemes hiding wealth in legitimate enterprises.',
1104
+ 'Hit squads eliminate problems permanently, their methods efficient and their discretion absolute.',
1105
+ 'Contraband alchemists brew illegal potions, their elixirs promising power at the cost of addiction.',
1106
+ 'Underground fighting pits stage illegal combats, their champions becoming legends in criminal circles.',
1107
+ 'Bribery networks corrupt officials systematically, their webs of influence reaching into government.',
1108
+ 'Smuggling tunnels honeycomb the city, their entrances hidden behind false walls and trap doors.',
1109
+ 'Blackmail operations collect compromising information, their victims paying eternal silence.',
1110
+ 'Rogue tax collectors skim from criminal enterprises, their protection costing more than official rates.',
1111
+ 'Underground banks offer loans at predatory rates, their collateral often including lives and limbs.'
1112
+ ],
1113
+ NECROMANCER: [
1114
+ 'Skeletal hands claw their way through the earth as a necromancer conducts a ritual to raise an army from the graveyard\'s silent residents.',
1115
+ 'The air grows cold and heavy as necrotic energies swirl around the dark sorcerer, animating corpses with unholy life.',
1116
+ 'Ancient tombs creak open as the dead rise to serve their new master, their empty eye sockets glowing with baleful light.',
1117
+ 'A lich floats above his throne of bones, his skeletal fingers weaving spells that blur the line between life and death.',
1118
+ 'Death magic saturates the air like a choking fog, raising legions of undead warriors to march under necrotic banners.',
1119
+ 'Soul jars capture essence at the moment of death, their glowing contents containing memories and personalities intact.',
1120
+ 'Bone golems assemble themselves from scattered remains, their joints grinding as they form protective guardians.',
1121
+ 'Wailing spirits manifest as banshees, their screams capable of shattering stone and driving men to madness.',
1122
+ 'Mummified priests rise from sarcophagi, their bandages inscribed with curses that activate upon disturbance.',
1123
+ 'Zombie hordes shamble forward mindlessly, their decayed forms driven by necromantic will alone.',
1124
+ 'Spectral warriors haunt battlefields, their ghostly blades passing through armor to strike the soul directly.',
1125
+ 'Lich phylacteries hide in impossible locations, their destruction the only way to permanently end their masters.',
1126
+ 'Death knights ride skeletal steeds, their cursed armor and weapons striking fear into the hearts of the living.',
1127
+ 'Ghoul packs hunt in packs, their regenerative abilities making them terrifyingly persistent combatants.',
1128
+ 'Wight lords command lesser undead, their intelligence and spellcasting making them strategic threats.',
1129
+ 'Vampiric thralls serve their masters eternally, their bloodlust tempered by necromantic control.',
1130
+ 'Bone naga slither from tombs, their serpentine forms combining undead resilience with arcane power.',
1131
+ 'Death worms burrow through graveyards, their acidic blood dissolving both earth and enemy alike.',
1132
+ 'Skeletal dragons soar on necrotic winds, their bony wings casting shadows that wither plant life below.',
1133
+ 'Mummy lords awaken in pyramid depths, their curses bringing plagues and misfortune to violators.',
1134
+ 'Ghost ships sail ethereal seas, their phantom crews seeking living sailors to join their cursed voyage.',
1135
+ 'Bone collectors harvest remains systematically, their necromantic arts creating specialized undead servants.',
1136
+ 'Soul forges bind spirits to weapons, creating blades that drink life force with every strike.',
1137
+ 'Death altars pulse with stolen life energy, their power growing with each sacrifice made upon them.',
1138
+ 'Necrotic storms rage around ritual sites, their lightning carrying fragments of trapped souls.',
1139
+ 'Bone libraries contain grimoires written in marrow ink, their pages turning themselves to reveal secrets.',
1140
+ 'Soul cages imprison powerful spirits, their rage fueling necromantic spells of incredible power.',
1141
+ 'Death gardens grow crystalline flowers that bloom only in the presence of violent death.',
1142
+ 'Lich academies teach the arts of undeath, their students progressing from corpses to immortal beings.',
1143
+ 'Soul merchants trade in captured essences, their markets dealing in the currency of stolen lives.',
1144
+ 'Necrotic beacons draw the dead like moths to flame, concentrating undead forces for massive assaults.'
1145
+ ],
1146
+ MAGE: [
1147
+ 'Towering spires of arcane energy reach toward the heavens as a grand mage conducts experiments that bend the laws of physics itself.',
1148
+ 'Crystal spheres float in complex orbital patterns, each containing miniature universes created through sheer magical willpower.',
1149
+ 'The air shimmers with uncontrolled magic as apprentices practice spells that could accidentally rewrite reality itself.',
1150
+ 'Ancient tomes levitate around the master mage, their pages turning as they absorb knowledge directly into his mind.',
1151
+ 'The laboratory pulses with magical energy, containing devices that can manipulate matter at the atomic level through arcane means.',
1152
+ 'Arcane academies teach the fundamentals of magic, their curriculums covering everything from basic cantrips to reality warping.',
1153
+ 'Spell research laboratories develop new incantations, their experiments sometimes causing magical anomalies.',
1154
+ 'Crystal libraries store knowledge in gem matrices, their information accessible only through magical means.',
1155
+ 'Alchemy workshops combine magic with science, creating potions that bend natural laws.',
1156
+ 'Enchantment forges imbue items with permanent magic, their products ranging from flying carpets to self-cleaning armor.',
1157
+ 'Divination chambers allow glimpses of possible futures, their predictions becoming self-fulfilling prophecies.',
1158
+ 'Teleportation circles connect distant locations, their magical gates allowing instantaneous travel.',
1159
+ 'Elemental summoning chambers contain bound spirits, their powers available for spell enhancement.',
1160
+ 'Rune carving studios create permanent magical effects, their symbols etched into reality itself.',
1161
+ 'Familiar bonding rituals create lifelong magical partnerships, their bonds strengthening both parties.',
1162
+ 'Spell component greenhouses grow magical herbs, their rare plants requiring specific conditions to thrive.',
1163
+ 'Crystal growth chambers cultivate power sources, their gems storing magical energy for later use.',
1164
+ 'Memory palaces store vast knowledge magically, their rooms containing perfect recollections of any subject.',
1165
+ 'Illusion workshops create deceptive realities, their training grounds teaching mastery over perception.',
1166
+ 'Transformation laboratories allow shapeshifting studies, their subjects practicing animal and object forms.',
1167
+ 'Time manipulation chambers slow or accelerate local time, allowing research that would take years in hours.',
1168
+ 'Gravity manipulation rooms defy physics, their floating platforms and weightless environments enabling unique experiments.',
1169
+ 'Language decipherment studies unlock ancient magical texts, their translations revealing lost spells.',
1170
+ 'Weather control observatories manipulate local climate, their mages commanding storms and sunshine.',
1171
+ 'Portal research creates stable gateways to other planes, their explorers returning with exotic materials.',
1172
+ 'Soul binding studies explore the connection between magic and life force, their ethics highly debated.',
1173
+ 'Dimensional folding experiments create extra space, their pocket dimensions storing impossible amounts.',
1174
+ 'Mind magic laboratories study thought and consciousness, their research bordering on mental domination.',
1175
+ 'Energy manipulation workshops harness raw magical power, their experiments creating new forms of magic.',
1176
+ 'Prophecy workshops train oracles and seers, their visions guiding magical research directions.',
1177
+ 'Spell combination studies create hybrid magic, their results unpredictable but often revolutionary.'
1178
+ ],
1179
+ ROGUE: [
1180
+ 'Silent footsteps echo through the shadows as a master thief demonstrates techniques that make him all but invisible in plain sight.',
1181
+ 'Locks click open with delicate precision as skilled fingers manipulate tumblers and wards with the finesse of a surgeon.',
1182
+ 'Traps are disarmed with surgical precision, each wire and pressure plate handled with the care of someone who values their life.',
1183
+ 'The rogue moves through the crowd like a ghost, slipping purses and secrets with equal facility and without detection.',
1184
+ 'Shadowy figures scale sheer walls with impossible grace, finding handholds where none should exist.',
1185
+ 'Pickpocket schools teach the art of the light touch, their graduates able to steal thoughts along with coins.',
1186
+ 'Burglary workshops train in breaking and entering, their students mastering every type of lock and alarm.',
1187
+ 'Assassination techniques range from poison to politics, their practitioners ghosts in the corridors of power.',
1188
+ 'Sabotage experts disable security systems, their work making heists possible or buildings collapse.',
1189
+ 'Forgery ateliers create perfect duplicates, their artists copying seals, signatures, and even magical auras.',
1190
+ 'Information networks span cities and nations, their whispers carrying secrets that topple governments.',
1191
+ 'Smuggling tunnels honeycomb borders, their guides knowing every patrol pattern and hidden route.',
1192
+ 'Gambling dens employ cheating techniques, their dealers stacking decks and loading dice with precision.',
1193
+ 'Kidnapping specialists plan extractions flawlessly, their targets vanishing without a trace.',
1194
+ 'Blackmail operations collect compromising evidence, their networks of informants creating leverage.',
1195
+ 'Fence operations clean stolen goods, their experts knowing exactly what sells and for how much.',
1196
+ 'Spy rings infiltrate organizations, their agents becoming trusted members while stealing secrets.',
1197
+ 'Poison labs create undetectable toxins, their chemists mixing substances that mimic natural death.',
1198
+ 'Disguise artists become anyone, their transformations so perfect they fool magical detection.',
1199
+ 'Trap makers design devious devices, their mechanisms combining mechanical and magical elements.',
1200
+ 'Escape artists teach breakout techniques, their methods working on any jail or magical binding.',
1201
+ 'Surveillance experts track targets invisibly, their reports detailing habits, weaknesses, and opportunities.',
1202
+ 'Weapon concealers hide armories in plain sight, their techniques making swords disappear into canes.',
1203
+ 'Code breakers decipher encrypted messages, their minds unraveling the most complex ciphers.',
1204
+ 'Shadow warriors train in darkness combat, their techniques allowing perfect vision in total black.',
1205
+ 'Acrobatics schools teach impossible maneuvers, their graduates walking tightropes over sheer drops.',
1206
+ 'Thievery museums display legendary heists, their exhibits teaching techniques to aspiring criminals.',
1207
+ 'Interrogation experts extract information, their methods ranging from charm to coercion.',
1208
+ 'Demolition specialists prepare explosives, their controlled blasts creating opportunities or diversions.',
1209
+ 'Counterfeiting operations produce fake currency, their notes passing every magical and mundane test.',
1210
+ 'Infiltration teams breach secure facilities, their members becoming part of the environment.'
1211
+ ],
1212
+ CLERIC: [
1213
+ 'Divine light radiates from sacred symbols as a high priest conducts rituals that channel the power of the gods themselves.',
1214
+ 'Holy water sizzles as it touches corrupted flesh, while sacred chants drive back the forces of darkness and decay.',
1215
+ 'The temple air fills with the scent of incense and divine power as priests perform miracles that heal the body and soothe the soul.',
1216
+ 'Sacred relics pulse with holy energy, their power capable of banishing demons or curing the most virulent plagues.',
1217
+ 'The clerics chant in unison, their voices weaving a tapestry of divine magic that can reshape reality according to their faith.',
1218
+ 'Cathedral choirs sing hymns that manifest as physical light, their music creating zones of protection and healing.',
1219
+ 'Exorcism chambers contain bound demons, their priests practicing banishment rituals on willing test subjects.',
1220
+ 'Healing wards treat the sick and injured, their divine magic curing diseases that mundane medicine cannot.',
1221
+ 'Divination altars allow communion with deities, their priests receiving visions and prophecies directly.',
1222
+ 'Blessing ceremonies imbue weapons and armor with divine power, making them effective against supernatural threats.',
1223
+ 'Funeral rites guide souls to the afterlife, their ceremonies preventing undead creation and ensuring peace.',
1224
+ 'Marriage sacraments bind couples in divine union, their vows magically enforced and spiritually blessed.',
1225
+ 'Ordination ceremonies elevate priests to higher ranks, their new powers manifesting as visible auras.',
1226
+ 'Confession booths absolve sins through divine forgiveness, their priests counseling and spiritually healing.',
1227
+ 'Pilgrimage routes lead to holy sites, their travelers gaining divine favor through acts of devotion.',
1228
+ 'Miracle working requires deep faith, their priests channeling deity power for impossible acts.',
1229
+ 'Temple libraries contain sacred texts, their scholars interpreting divine will and ancient prophecies.',
1230
+ 'Sacrificial altars accept offerings, their priests distributing blessings in exchange for devotion.',
1231
+ 'Divine intervention calls upon gods directly, their answers ranging from subtle signs to cataclysmic events.',
1232
+ 'Holy wars are declared against evil, their crusaders blessed with divine protection and strength.',
1233
+ 'Sanctification rituals purify corrupted areas, their priests cleansing taint and restoring natural balance.',
1234
+ 'Prayer circles amplify faith power, their combined devotion creating effects beyond individual capability.',
1235
+ 'Divine judgment reveals truth and lies, their priests becoming living detectors of deception.',
1236
+ 'Resurrection ceremonies restore life to the dead, their success depending on faith and divine favor.',
1237
+ 'Temple guardians protect sacred sites, their combat training combining martial skill with divine power.',
1238
+ 'Charity missions aid the poor and suffering, their priests distributing divine blessings along with material help.',
1239
+ 'Prophecy interpretation guides communities, their seers translating divine messages for practical application.',
1240
+ 'Divine crafting creates holy artifacts, their smiths and artisans blessed with supernatural skill.',
1241
+ 'Faith healing soothes mind and body, their priests addressing spiritual causes of physical ailments.',
1242
+ 'Temple politics navigate divine hierarchies, their priests managing relationships between gods and mortals.',
1243
+ 'Divine magic research explores god-given powers, their scholars pushing boundaries of faith and magic.'
1244
+ ],
1245
+ ADVENTURE: [
1246
+ 'The call of adventure beckons as ancient maps reveal forgotten paths leading to legendary destinations where heroes are forged and legends are born.',
1247
+ 'Mysterious ruins emerge from the mists of time, their weathered stones whispering secrets of civilizations long lost to the sands of history.',
1248
+ 'A legendary artifact pulses with otherworldly energy, promising unimaginable power to those brave enough to claim it from its ancient guardians.',
1249
+ 'The wilderness calls with untamed fury, offering both peril and glory to those who dare venture into its uncharted depths and hidden wonders.',
1250
+ 'Ancient prophecies speak of a chosen hero destined to undertake a journey that will reshape the world and define the course of history.',
1251
+ 'Forgotten temples rise from jungle vines, their sacred chambers containing artifacts of power that could change the balance of nations.',
1252
+ 'The ocean depths hide sunken cities of unimaginable wealth, guarded by creatures of nightmare and treasures beyond mortal comprehension.',
1253
+ 'Skyward spires pierce the clouds, home to winged beings and floating citadels where the laws of physics bend to magical will.',
1254
+ 'Time itself fractures in these ancient lands, creating pockets where past, present, and future collide in spectacular and dangerous ways.',
1255
+ 'Elemental forces manifest as living entities, offering alliances, challenges, and powers that could tip the scales of any conflict.',
1256
+ 'Spirit realms overlap with the mortal world in these sacred places, allowing communion with beings of pure thought and emotion.',
1257
+ 'The very fabric of reality thins here, creating opportunities for planar travel and encounters with entities from other dimensions.',
1258
+ 'Legendary beasts roam these wild lands, their hides containing materials that could forge weapons capable of slaying gods.',
1259
+ 'Ancient curses and blessings intertwine in these locations, offering power at the cost of destiny and free will.',
1260
+ 'The landscape itself seems alive, with trees that whisper secrets and stones that remember the touch of ancient heroes.',
1261
+ 'Portals to other worlds shimmer in the air, offering shortcuts to distant lands or pathways to realms of unimaginable danger.',
1262
+ 'Sacred groves contain the essence of nature itself, where druids and shamans can commune with the primal forces of creation.',
1263
+ 'Volcanic forges in mountain hearts contain metals that can be shaped into artifacts of devastating power and beauty.',
1264
+ 'Frozen wastes hide crystal caverns where time crystals allow glimpses of future events and alternate realities.',
1265
+ 'Desert sands conceal buried pyramids containing mummies, treasures, and curses that have waited millennia for the unwary.',
1266
+ 'Thunderstorms rage eternally in these storm-wracked peaks, where cloud giants hoard lightning-forged weapons of legend.',
1267
+ 'Subterranean networks of caves connect the surface world to underworld realms, home to dwarves, dragons, and darker things.',
1268
+ 'Floating islands drift through endless skies, containing gardens, castles, and creatures that have never touched the earth.',
1269
+ 'Mirror lakes reflect not just the physical world, but alternate realities where different choices led to different fates.',
1270
+ 'Crystal formations grow like living sculptures, their structures containing the accumulated wisdom of geological ages.',
1271
+ 'Eternal flames burn in sacred hearths, their fires containing the essence of creation and capable of forging divine artifacts.',
1272
+ 'Whispering winds carry messages from distant lands, speaking of opportunities, dangers, and destinies yet to be fulfilled.',
1273
+ 'Ancient standing stones align with celestial events, creating moments when the barriers between worlds grow thin.',
1274
+ 'Living forests contain trees that have witnessed the rise and fall of empires, their bark etched with the stories of ages.',
1275
+ 'Coral castles rise from ocean depths, their chambers containing pearls that grant visions of the future and past.'
1276
+ ],
1277
+ QUEST: [
1278
+ 'A royal decree summons you to undertake a perilous quest that could determine the fate of the kingdom and its people.',
1279
+ 'The guild master presents a contract of legendary difficulty, promising wealth and glory to those who can complete its demands.',
1280
+ 'An ancient prophecy foretells your role in a grand quest that will span continents and challenge the very gods themselves.',
1281
+ 'A personal tragedy drives you to undertake a quest for vengeance, justice, or redemption that will test your limits.',
1282
+ 'Diplomatic negotiations hinge on your ability to complete a dangerous quest that could prevent or ignite a war.',
1283
+ 'A loved one\'s life depends on successfully completing this quest, adding emotional weight to every decision and action.',
1284
+ 'The fate of an entire village rests on your shoulders as you undertake a quest to save them from impending doom.',
1285
+ 'Arcane forces compel you to undertake a quest that could unravel the mysteries of magic itself.',
1286
+ 'A legendary artifact can only be obtained through a quest of such difficulty that few have even attempted it.',
1287
+ 'Time itself seems to run short as you undertake a quest with a deadline that could doom entire civilizations.',
1288
+ 'Multiple factions compete to have you undertake their quest, each offering different rewards and complications.',
1289
+ 'A dream visitation from a deity compels you to undertake a sacred quest that could elevate you to legendary status.',
1290
+ 'The black market offers a quest of such profitability that it attracts adventurers from across the known world.',
1291
+ 'A scholarly pursuit leads to a quest for knowledge so dangerous that it has claimed the lives of previous seekers.',
1292
+ 'Environmental disasters can only be averted through a quest to find and activate ancient protective mechanisms.',
1293
+ 'Rival adventurers challenge you to quests of increasing difficulty, turning the entire endeavor into a competition.',
1294
+ 'A series of connected quests unfolds like a grand tapestry, each completion revealing the next piece of the puzzle.',
1295
+ 'The quest requires assembling a team of specialists, each bringing unique skills to overcome different challenges.',
1296
+ 'What begins as a simple task evolves into a complex quest spanning multiple continents and cultures.',
1297
+ 'The quest\'s true nature is hidden, revealing itself gradually through clues, betrayals, and unexpected alliances.',
1298
+ 'Ancient guardians test your worthiness at each stage of the quest, demanding wisdom as much as strength.',
1299
+ 'The quest spans generations, requiring you to pass on knowledge and artifacts to ensure its completion.',
1300
+ 'Multiple paths exist to complete the quest, each with different risks, rewards, and moral implications.',
1301
+ 'The quest requires mastering new skills and abilities, transforming you as much as achieving the goal.',
1302
+ 'Political intrigue complicates the quest, with various factions attempting to influence or sabotage your efforts.',
1303
+ 'The natural world itself seems to oppose or aid your quest, with weather and wildlife playing crucial roles.',
1304
+ 'Technological marvels encountered during the quest offer shortcuts but also present new dangers and temptations.',
1305
+ 'The quest requires balancing multiple objectives, forcing difficult choices between competing priorities.',
1306
+ 'Supernatural elements weave through the quest, blurring the lines between the physical and spiritual worlds.',
1307
+ 'The quest\'s completion promises not just material rewards, but fundamental changes to your character and destiny.'
1308
+ ]
557
1309
  };
558
- }
559
- getArticle(word) {
560
- if (nlp) {
561
- try {
562
- const doc = nlp(word);
563
- const article = doc.articles().out('text');
564
- if (article && (article.toLowerCase() === 'a' || article.toLowerCase() === 'an')) {
565
- return article.toLowerCase();
566
- }
567
- }
568
- catch (e) {
569
- }
570
- }
571
- const vowels = ['a', 'e', 'i', 'o', 'u'];
572
- const firstLetter = word.toLowerCase().charAt(0);
573
- if (vowels.includes(firstLetter)) {
574
- return 'an';
575
- }
576
- if (firstLetter === 'h') {
577
- const silentHWords = ['honor', 'honour', 'honest', 'hour', 'heir', 'herb'];
578
- if (silentHWords.some(w => word.toLowerCase().startsWith(w))) {
579
- return 'an';
580
- }
581
- }
582
- if (firstLetter === 'u') {
583
- const uAsConsonant = ['university', 'union', 'unicorn', 'uniform', 'unique', 'unit', 'unity', 'universe', 'usage', 'useful', 'usual', 'utensil', 'user', 'utopia', 'uranium'];
584
- if (uAsConsonant.some(w => word.toLowerCase().startsWith(w))) {
585
- return 'a';
586
- }
1310
+ const typeDescriptions = descriptions[type] || [
1311
+ 'A significant event occurs that requires your attention.',
1312
+ 'You encounter a situation that demands consideration.',
1313
+ 'An important matter presents itself for resolution.',
1314
+ 'You face circumstances that require decisive action.',
1315
+ 'A meaningful opportunity or challenge appears before you.'
1316
+ ];
1317
+ let description = this.chance.pickone(typeDescriptions);
1318
+ description = this.addContextualEnhancements(description, context);
1319
+ description = description.trim();
1320
+ if (!/[.!?]$/.test(description)) {
1321
+ description += '.';
587
1322
  }
588
- return 'a';
1323
+ return description;
589
1324
  }
590
- getActionForType(type, context) {
591
- const actions = {
592
- COMBAT: {
593
- that: ['threatens you', 'challenges you', 'confronts you', 'blocks your path', 'menaces you', 'assaults you', 'engages you', 'attacks you', 'demands your attention', 'requires a response'],
594
- subject: ['threatens you', 'challenges you', 'confronts you', 'blocks your path', 'menaces you', 'assaults you', 'engages you', 'attacks you'],
595
- gerund: ['threatening you', 'challenging you', 'confronting you', 'blocking your path', 'menacing you', 'assaulting you', 'engaging you', 'attacking you']
596
- },
597
- SOCIAL: {
598
- that: ['approaches you', 'greets you', 'welcomes you', 'invites you', 'requests your attention', 'offers an opportunity', 'proposes a deal', 'presents itself', 'seeks your involvement', 'awaits your response'],
599
- subject: ['approaches you', 'greets you', 'welcomes you', 'invites you', 'requests your attention', 'offers an opportunity', 'proposes a deal', 'presents itself'],
600
- gerund: ['approaching you', 'greeting you', 'welcoming you', 'inviting you', 'requesting your attention', 'offering an opportunity', 'proposing a deal', 'presenting itself']
601
- },
602
- EXPLORATION: {
603
- that: ['appears before you', 'emerges from the shadows', 'reveals itself', 'unfolds before you', 'blocks your path', 'awaits discovery', 'beckons to you', 'calls for investigation'],
604
- subject: ['appears before you', 'emerges from the shadows', 'reveals itself', 'unfolds before you', 'blocks your path', 'awaits discovery'],
605
- gerund: ['appearing before you', 'emerging from the shadows', 'revealing itself', 'unfolding before you', 'blocking your path', 'awaiting discovery']
606
- },
607
- ECONOMIC: {
608
- that: ['offers an opportunity', 'presents a deal', 'proposes a transaction', 'suggests a trade', 'provides options', 'delivers a proposal', 'becomes available', 'promises potential gain', 'requires a decision'],
609
- subject: ['offers an opportunity', 'presents a deal', 'proposes a transaction', 'suggests a trade', 'provides options', 'delivers a proposal', 'becomes available'],
610
- gerund: ['offering an opportunity', 'presenting a deal', 'proposing a transaction', 'suggesting a trade', 'providing options', 'delivering a proposal', 'becoming available']
611
- },
612
- MYSTERY: {
613
- that: ['puzzles you', 'confuses you', 'bewilders you', 'intrigues you', 'fascinates you', 'captivates you', 'demands investigation', 'requires careful examination', 'calls for answers'],
614
- subject: ['puzzles you', 'confuses you', 'bewilders you', 'intrigues you', 'fascinates you', 'captivates you', 'demands investigation'],
615
- gerund: ['puzzling you', 'confusing you', 'bewildering you', 'intriguing you', 'fascinating you', 'captivating you', 'demanding investigation']
616
- },
617
- SUPERNATURAL: {
618
- that: ['manifests before you', 'appears suddenly', 'materializes', 'emerges from the void', 'reveals itself', 'transforms the area', 'radiates otherworldly energy', 'defies natural explanation'],
619
- subject: ['manifests before you', 'appears suddenly', 'materializes', 'emerges from the void', 'reveals itself', 'transforms the area'],
620
- gerund: ['manifesting before you', 'appearing suddenly', 'materializing', 'emerging from the void', 'revealing itself', 'transforming the area']
621
- },
622
- POLITICAL: {
623
- that: ['develops around you', 'unfolds before you', 'progresses rapidly', 'advances quickly', 'evolves', 'requires your attention', 'demands your involvement', 'calls for a decision'],
624
- subject: ['develops around you', 'unfolds before you', 'progresses rapidly', 'advances quickly', 'evolves', 'requires your attention'],
625
- gerund: ['developing around you', 'unfolding before you', 'progressing rapidly', 'advancing quickly', 'evolving', 'requiring your attention']
626
- },
627
- TECHNOLOGICAL: {
628
- that: ['activates suddenly', 'begins functioning', 'starts operating', 'comes to life', 'performs its task', 'executes its program', 'processes data', 'requires your interaction', 'awaits your command'],
629
- subject: ['activates suddenly', 'begins functioning', 'starts operating', 'comes to life', 'performs its task', 'executes its program', 'processes data'],
630
- gerund: ['activating suddenly', 'beginning to function', 'starting to operate', 'coming to life', 'performing its task', 'executing its program', 'processing data']
631
- },
632
- MAGIC: {
633
- that: ['glows with power', 'shimmers mysteriously', 'pulses with energy', 'radiates magic', 'emanates power', 'flows with energy', 'surges with power', 'demands your attention', 'calls to you'],
634
- subject: ['glows with power', 'shimmers mysteriously', 'pulses with energy', 'radiates magic', 'emanates power', 'flows with energy', 'surges with power'],
635
- gerund: ['glowing with power', 'shimmering mysteriously', 'pulsing with energy', 'radiating magic', 'emanating power', 'flowing with energy', 'surging with power']
636
- },
637
- SPELLCASTING: {
638
- that: ['channels energy', 'weaves spells', 'manipulates magic', 'controls the flow', 'directs power', 'shapes reality', 'forms enchantments', 'requires your focus', 'demands precision'],
639
- subject: ['channels energy', 'weaves spells', 'manipulates magic', 'controls the flow', 'directs power', 'shapes reality', 'forms enchantments'],
640
- gerund: ['channeling energy', 'weaving spells', 'manipulating magic', 'controlling the flow', 'directing power', 'shaping reality', 'forming enchantments']
1325
+ generateChoices(type, difficulty, context) {
1326
+ const themesToCheck = ['default', ...Object.keys(this.customChoices).filter(k => k !== 'default')];
1327
+ for (const theme of themesToCheck) {
1328
+ const customThemeChoices = this.customChoices[theme];
1329
+ if (customThemeChoices && customThemeChoices[type] && customThemeChoices[type].length > 0) {
1330
+ const texts = customThemeChoices[type];
1331
+ const choiceCount = Math.min(4, texts.length);
1332
+ const selectedTexts = this.chance.pickset(texts, choiceCount);
1333
+ return selectedTexts.map((text, index) => ({
1334
+ text,
1335
+ effect: this.generateChoiceEffect(type, difficulty, index)
1336
+ }));
641
1337
  }
642
- };
643
- const contextType = context || 'that';
644
- const typeActions = actions[type]?.[contextType] ||
645
- (contextType === 'that' ? ['takes place', 'unfolds', 'develops', 'requires your attention', 'demands consideration', 'calls for action'] :
646
- contextType === 'subject' ? ['takes place', 'unfolds', 'develops', 'emerges', 'arises'] :
647
- ['taking place', 'unfolding', 'developing', 'emerging', 'arising']);
648
- return this.chance.pickone(typeActions);
649
- }
650
- getActionPastForType(type) {
651
- const actions = {
652
- COMBAT: ['demanding', 'requiring', 'needing'],
653
- SOCIAL: ['seeking', 'requesting', 'offering'],
654
- EXPLORATION: ['awaiting', 'promising', 'hiding'],
655
- ECONOMIC: ['offering', 'presenting', 'promising'],
656
- MYSTERY: ['hiding', 'concealing', 'revealing'],
657
- SUPERNATURAL: ['emanating', 'radiating', 'pulsing'],
658
- POLITICAL: ['developing', 'unfolding', 'progressing'],
659
- TECHNOLOGICAL: ['functioning', 'operating', 'processing'],
660
- MAGIC: ['glowing', 'shimmering', 'pulsing'],
661
- SPELLCASTING: ['channeling', 'weaving', 'manipulating']
662
- };
663
- const typeActions = actions[type] || ['awaiting', 'requiring', 'needing'];
664
- return this.chance.pickone(typeActions);
665
- }
666
- /**
667
- * Generate event choices
668
- */
669
- generateChoices(type, difficulty, context, rewardModifier) {
670
- const choiceCount = this.chance.integer({ min: 2, max: 4 });
671
- const choices = [];
672
- for (let i = 0; i < choiceCount; i++) {
673
- choices.push(this.generateChoice(type, difficulty, context, rewardModifier, i));
674
1338
  }
675
- return choices;
676
- }
677
- /**
678
- * Generate a single choice
679
- */
680
- generateChoice(type, difficulty, context, rewardModifier, index) {
681
- const typeMapping = {
682
- UNDERWORLD: 'COMBAT',
683
- CRIMINAL: 'COMBAT',
684
- THIEF: 'COMBAT',
685
- ASSASSIN: 'COMBAT',
686
- GUILD: 'SOCIAL',
687
- MAGIC: 'SUPERNATURAL',
688
- SPELLCASTING: 'SUPERNATURAL',
689
- ENCHANTED: 'SUPERNATURAL',
690
- ARCHMAGE: 'SUPERNATURAL',
691
- WIZARD: 'SUPERNATURAL',
692
- MAGE: 'SUPERNATURAL',
693
- NECROMANCER: 'SUPERNATURAL',
694
- PALADIN: 'COMBAT',
695
- WARRIOR: 'COMBAT',
696
- FIGHTER: 'COMBAT',
697
- ROGUE: 'COMBAT',
698
- RANGER: 'EXPLORATION',
699
- DRUID: 'SUPERNATURAL',
700
- CLERIC: 'SOCIAL',
701
- BARD: 'SOCIAL',
702
- MONK: 'COMBAT',
703
- BARBARIAN: 'COMBAT',
704
- HUMAN: 'SOCIAL',
705
- ELF: 'SUPERNATURAL',
706
- 'DARK ELF': 'SUPERNATURAL',
707
- DWARF: 'ECONOMIC',
708
- HALFLING: 'SOCIAL',
709
- GNOME: 'TECHNOLOGICAL',
710
- ORC: 'COMBAT',
711
- DRAGONBORN: 'COMBAT',
712
- TIEFLING: 'SUPERNATURAL'
713
- };
714
- const baseType = typeMapping[type] || type;
715
1339
  const choiceTexts = {
716
1340
  COMBAT: [
717
- 'Fight bravely', 'Attempt to flee', 'Negotiate', 'Use strategy',
718
- 'Stand your ground', 'Retreat tactically', 'Call for backup', 'Use your weapon',
719
- 'Challenge directly', 'Look for advantage', 'Distract and strike', 'Form a defensive position'
1341
+ 'Charge into battle', 'Fight bravely', 'Stand your ground', 'Press the attack',
1342
+ 'Attempt to flee', 'Retreat strategically', 'Fall back', 'Withdraw to safety',
1343
+ 'Negotiate peace', 'Parley with the enemy', 'Seek truce', 'Offer surrender terms',
1344
+ 'Use tactical strategy', 'Flank the enemy', 'Set up ambush', 'Outmaneuver opponent',
1345
+ 'Call for reinforcements', 'Signal allies', 'Summon backup', 'Request aid',
1346
+ 'Use defensive formation', 'Build barricade', 'Take cover', 'Fortify position',
1347
+ 'Counterattack', 'Exploit weakness', 'Seize opportunity', 'Strike decisively',
1348
+ 'Intimidate enemy', 'Show force', 'Demonstrate power', 'Issue challenge',
1349
+ 'Use terrain advantage', 'Fight from high ground', 'Control the battlefield', 'Dominate position',
1350
+ 'Conserve energy', 'Wait for opening', 'Observe and learn', 'Bide your time',
1351
+ 'Sacrifice for victory', 'Make last stand', 'Fight to the death', 'Never surrender',
1352
+ 'Use hit-and-run tactics', 'Harass enemy', 'Wear them down', 'Attrition warfare',
1353
+ 'Break enemy formation', 'Disrupt their lines', 'Cause chaos', 'Sow confusion'
720
1354
  ],
721
1355
  SOCIAL: [
722
- 'Be diplomatic', 'Be assertive', 'Listen carefully', 'Change the subject',
723
- 'Offer assistance', 'Share information', 'Request help', 'Propose an alliance',
724
- 'Show respect', 'Make a joke', 'Ask questions', 'Share your story'
1356
+ 'Be diplomatic', 'Speak eloquently', 'Choose words carefully', 'Communicate respectfully',
1357
+ 'Be assertive', 'Stand firm', 'Express confidence', 'Demand attention',
1358
+ 'Listen carefully', 'Pay close attention', 'Show interest', 'Be attentive',
1359
+ 'Change the subject', 'Redirect conversation', 'Shift focus', 'Alter direction',
1360
+ 'Offer friendship', 'Extend hand of alliance', 'Build rapport', 'Create connection',
1361
+ 'Express gratitude', 'Show appreciation', 'Give thanks', 'Acknowledge kindness',
1362
+ 'Share information', 'Reveal knowledge', 'Provide insight', 'Offer wisdom',
1363
+ 'Ask questions', 'Seek clarification', 'Inquire further', 'Request details',
1364
+ 'Make small talk', 'Engage in pleasantries', 'Chat casually', 'Converse lightly',
1365
+ 'Compliment others', 'Offer praise', 'Express admiration', 'Give respect',
1366
+ 'Show empathy', 'Demonstrate understanding', 'Express sympathy', 'Share feelings',
1367
+ 'Negotiate terms', 'Discuss conditions', 'Bargain effectively', 'Reach agreement',
1368
+ 'Tell a story', 'Share anecdote', 'Narrate experience', 'Relate tale',
1369
+ 'Offer assistance', 'Provide help', 'Lend support', 'Extend aid',
1370
+ 'Express disagreement', 'Voice objection', 'State opposition', 'Raise concerns',
1371
+ 'Make joke', 'Lighten mood', 'Use humor', 'Diffuse tension',
1372
+ 'Give advice', 'Offer counsel', 'Provide guidance', 'Share wisdom',
1373
+ 'Express curiosity', 'Show interest', 'Demonstrate intrigue', 'Reveal fascination',
1374
+ 'Offer compromise', 'Find middle ground', 'Suggest solution', 'Propose alternative'
725
1375
  ],
726
1376
  EXPLORATION: [
727
- 'Investigate', 'Proceed cautiously', 'Call for help', 'Turn back',
728
- 'Examine closely', 'Take notes', 'Mark the location', 'Gather resources',
729
- 'Press forward', 'Search thoroughly', 'Document findings', 'Set up camp'
1377
+ 'Investigate thoroughly', 'Examine closely', 'Study carefully', 'Analyze deeply',
1378
+ 'Proceed cautiously', 'Move carefully', 'Advance slowly', 'Tread lightly',
1379
+ 'Call for help', 'Summon assistance', 'Request backup', 'Signal for aid',
1380
+ 'Turn back', 'Retreat safely', 'Return to safety', 'Abandon exploration',
1381
+ 'Map the area', 'Chart surroundings', 'Record findings', 'Document discovery',
1382
+ 'Collect samples', 'Gather specimens', 'Take evidence', 'Secure artifacts',
1383
+ 'Follow the trail', 'Track the path', 'Pursue the lead', 'Chase the clue',
1384
+ 'Set up camp', 'Establish base', 'Create outpost', 'Build shelter',
1385
+ 'Search for resources', 'Look for supplies', 'Find materials', 'Locate provisions',
1386
+ 'Observe wildlife', 'Study creatures', 'Watch animals', 'Monitor behavior',
1387
+ 'Examine ruins', 'Inspect ancient sites', 'Study architecture', 'Analyze structures',
1388
+ 'Test the waters', 'Check depth', 'Assess danger', 'Gauge risk',
1389
+ 'Mark the path', 'Leave trail markers', 'Create waypoints', 'Establish route',
1390
+ 'Listen for sounds', 'Strain to hear', 'Detect noises', 'Perceive audio cues',
1391
+ 'Look for signs', 'Search for clues', 'Find indicators', 'Discover evidence',
1392
+ 'Climb higher', 'Scale elevation', 'Reach summit', 'Gain vantage point',
1393
+ 'Dig deeper', 'Excavate site', 'Unearth artifacts', 'Reveal buried items',
1394
+ 'Consult maps', 'Check charts', 'Reference guides', 'Study navigation aids',
1395
+ 'Test the ground', 'Check stability', 'Assess terrain', 'Evaluate footing',
1396
+ 'Observe weather', 'Monitor conditions', 'Watch sky', 'Track atmospheric changes',
1397
+ 'Follow instincts', 'Trust intuition', 'Follow gut feeling', 'Rely on experience',
1398
+ 'Document findings', 'Record observations', 'Note discoveries', 'Log information'
730
1399
  ],
731
1400
  ECONOMIC: [
732
- 'Accept the deal', 'Negotiate better terms', 'Decline politely', 'Make a counteroffer',
733
- 'Request more information', 'Ask for guarantees', 'Propose payment plan', 'Offer trade instead',
734
- 'Seek better price', 'Accept with conditions', 'Walk away', 'Request time to think'
1401
+ 'Accept the deal', 'Agree to terms', 'Seal the agreement', 'Finalize contract',
1402
+ 'Negotiate better terms', 'Bargain harder', 'Improve conditions', 'Refine agreement',
1403
+ 'Decline politely', 'Politely refuse', 'Gracefully reject', 'Courteously decline',
1404
+ 'Seek advice', 'Consult experts', 'Get counsel', 'Request guidance',
1405
+ 'Invest heavily', 'Commit resources', 'Put up capital', 'Fund the venture',
1406
+ 'Diversify portfolio', 'Spread investments', 'Balance risk', 'Hedge bets',
1407
+ 'Cut losses', 'Abandon failing venture', 'Accept defeat', 'Withdraw investment',
1408
+ 'Seek partnership', 'Find collaborators', 'Form alliance', 'Create joint venture',
1409
+ 'Audit finances', 'Review accounts', 'Check books', 'Examine records',
1410
+ 'Raise capital', 'Secure funding', 'Obtain loans', 'Generate revenue',
1411
+ 'Reduce expenses', 'Cut costs', 'Trim budget', 'Economize operations',
1412
+ 'Expand business', 'Grow enterprise', 'Scale operations', 'Increase market share',
1413
+ 'Research market', 'Study trends', 'Analyze competition', 'Understand demand',
1414
+ 'Price competitively', 'Set fair rates', 'Determine value', 'Establish pricing',
1415
+ 'Build reputation', 'Establish trust', 'Create brand', 'Develop goodwill',
1416
+ 'Network actively', 'Make connections', 'Build relationships', 'Expand contacts',
1417
+ 'Manage risk', 'Assess threats', 'Plan contingencies', 'Prepare for uncertainty',
1418
+ 'Track performance', 'Monitor results', 'Measure success', 'Evaluate outcomes',
1419
+ 'Adapt strategy', 'Change approach', 'Modify plan', 'Adjust course',
1420
+ 'Celebrate success', 'Reward achievement', 'Recognize effort', 'Honor accomplishment',
1421
+ 'Learn from failure', 'Study mistakes', 'Analyze errors', 'Understand setbacks',
1422
+ 'Plan for future', 'Prepare ahead', 'Anticipate needs', 'Forecast trends',
1423
+ 'Delegate tasks', 'Assign responsibilities', 'Distribute work', 'Share load',
1424
+ 'Innovate processes', 'Improve methods', 'Streamline operations', 'Enhance efficiency'
735
1425
  ],
736
1426
  MYSTERY: [
737
- 'Investigate thoroughly', 'Ask questions', 'Examine evidence', 'Seek expert opinion',
738
- 'Follow the clues', 'Document everything', 'Share your findings', 'Keep it secret',
739
- 'Report to authorities', 'Form a theory', 'Test your hypothesis', 'Gather more information'
1427
+ 'Investigate thoroughly', 'Examine evidence', 'Study clues', 'Analyze findings',
1428
+ 'Ask questions', 'Inquire deeply', 'Seek answers', 'Probe for information',
1429
+ 'Look for clues', 'Search for evidence', 'Find indicators', 'Discover hints',
1430
+ 'Be cautious', 'Exercise care', 'Proceed carefully', 'Show prudence',
1431
+ 'Follow the trail', 'Track the path', 'Pursue the lead', 'Chase the clue',
1432
+ 'Interview witnesses', 'Question suspects', 'Gather testimony', 'Collect statements',
1433
+ 'Examine crime scene', 'Study location', 'Analyze site', 'Inspect area',
1434
+ 'Decode messages', 'Interpret symbols', 'Unravel codes', 'Break ciphers',
1435
+ 'Research history', 'Study background', 'Investigate past', 'Examine records',
1436
+ 'Test theories', 'Verify hypotheses', 'Validate ideas', 'Confirm suspicions',
1437
+ 'Observe suspects', 'Watch carefully', 'Monitor activity', 'Track movements',
1438
+ 'Gather intelligence', 'Collect information', 'Acquire knowledge', 'Build dossier',
1439
+ 'Consult experts', 'Seek specialists', 'Get professional help', 'Request expertise',
1440
+ 'Follow instincts', 'Trust intuition', 'Follow gut feeling', 'Rely on experience',
1441
+ 'Document findings', 'Record observations', 'Note discoveries', 'Log information',
1442
+ 'Connect the dots', 'Find patterns', 'Link evidence', 'Establish connections',
1443
+ 'Challenge assumptions', 'Question beliefs', 'Test preconceptions', 'Verify facts',
1444
+ 'Explore motives', 'Understand reasons', 'Analyze motivations', 'Examine causes',
1445
+ 'Time the sequence', 'Establish timeline', 'Create chronology', 'Map events',
1446
+ 'Test alibis', 'Verify stories', 'Check claims', 'Validate accounts',
1447
+ 'Search for hidden meanings', 'Look for subtext', 'Find deeper significance', 'Uncover layers',
1448
+ 'Compare evidence', 'Cross-reference data', 'Correlate findings', 'Match information',
1449
+ 'Draw conclusions', 'Reach decisions', 'Form judgments', 'Make assessments',
1450
+ 'Present findings', 'Share discoveries', 'Report results', 'Communicate conclusions',
1451
+ 'Pursue justice', 'Seek resolution', 'Find closure', 'Achieve understanding'
740
1452
  ],
741
1453
  SUPERNATURAL: [
742
- 'Approach carefully', 'Use protective magic', 'Observe from distance', 'Seek guidance',
743
- 'Attempt communication', 'Prepare for danger', 'Call upon allies', 'Use holy protection',
744
- 'Document the phenomenon', 'Retreat safely', 'Attempt to banish', 'Study the manifestation'
1454
+ 'Approach carefully', 'Move cautiously', 'Advance slowly', 'Tread lightly',
1455
+ 'Use protective magic', 'Cast wards', 'Create barriers', 'Establish protection',
1456
+ 'Observe from distance', 'Watch remotely', 'Monitor safely', 'Study from afar',
1457
+ 'Seek guidance', 'Request counsel', 'Ask for advice', 'Consult wisdom',
1458
+ 'Perform ritual', 'Conduct ceremony', 'Execute rite', 'Complete ritual',
1459
+ 'Invoke protection', 'Call for safety', 'Summon guardians', 'Request defense',
1460
+ 'Study phenomenon', 'Examine occurrence', 'Analyze event', 'Investigate mystery',
1461
+ 'Communicate with entity', 'Contact being', 'Reach out', 'Establish dialogue',
1462
+ 'Offer tribute', 'Provide offering', 'Give sacrifice', 'Present gift',
1463
+ 'Banish presence', 'Exorcise spirit', 'Remove entity', 'Eliminate threat',
1464
+ 'Harness power', 'Channel energy', 'Control force', 'Direct influence',
1465
+ 'Research lore', 'Study legends', 'Investigate myths', 'Examine traditions',
1466
+ 'Consult oracle', 'Seek prophecy', 'Request vision', 'Ask for foresight',
1467
+ 'Purify area', 'Cleanse space', 'Remove corruption', 'Eliminate taint',
1468
+ 'Bind entity', 'Control spirit', 'Dominate being', 'Subjugate force',
1469
+ 'Open portal', 'Create gateway', 'Establish connection', 'Form link',
1470
+ 'Close breach', 'Seal rift', 'Repair tear', 'Fix damage',
1471
+ 'Absorb energy', 'Draw power', 'Siphon force', 'Extract essence',
1472
+ 'Transform reality', 'Alter existence', 'Change nature', 'Modify being',
1473
+ 'Witness miracle', 'Observe wonder', 'Experience phenomenon', 'Encounter marvel',
1474
+ 'Challenge authority', 'Question power', 'Test limits', 'Push boundaries',
1475
+ 'Accept fate', 'Embrace destiny', 'Surrender to will', 'Submit to power',
1476
+ 'Resist influence', 'Fight control', 'Oppose domination', 'Reject authority',
1477
+ 'Embrace change', 'Accept transformation', 'Welcome alteration', 'Celebrate evolution',
1478
+ 'Preserve balance', 'Maintain harmony', 'Keep equilibrium', 'Sustain order',
1479
+ 'Disrupt order', 'Break harmony', 'Destroy balance', 'Cause chaos'
745
1480
  ],
746
1481
  POLITICAL: [
747
- 'Support the proposal', 'Voice opposition', 'Seek compromise', 'Gather support',
748
- 'Form an alliance', 'Remain neutral', 'Leverage influence', 'Request favors',
749
- 'Make a speech', 'Negotiate terms', 'Build consensus', 'Take a stand'
1482
+ 'Support the proposal', 'Back the plan', 'Endorse the idea', 'Champion the cause',
1483
+ 'Voice opposition', 'Express dissent', 'State disagreement', 'Raise objection',
1484
+ 'Seek compromise', 'Find middle ground', 'Negotiate settlement', 'Reach agreement',
1485
+ 'Abstain from voting', 'Decline participation', 'Choose neutrality', 'Remain impartial',
1486
+ 'Lobby for change', 'Advocate reform', 'Push for progress', 'Campaign for improvement',
1487
+ 'Form alliance', 'Create coalition', 'Build partnership', 'Establish union',
1488
+ 'Challenge authority', 'Question leadership', 'Test power', 'Probe limits',
1489
+ 'Exercise influence', 'Use connections', 'Leverage relationships', 'Apply pressure',
1490
+ 'Gather support', 'Build consensus', 'Unite factions', 'Create majority',
1491
+ 'Block legislation', 'Prevent passage', 'Obstruct progress', 'Halt advancement',
1492
+ 'Propose amendment', 'Suggest changes', 'Offer modifications', 'Recommend alterations',
1493
+ 'Conduct investigation', 'Launch inquiry', 'Initiate probe', 'Begin examination',
1494
+ 'Issue decree', 'Proclaim edict', 'Announce policy', 'Declare position',
1495
+ 'Negotiate treaty', 'Bargain agreement', 'Hammer out deal', 'Forge pact',
1496
+ 'Address public', 'Speak to masses', 'Communicate with people', 'Reach citizens',
1497
+ 'Consult advisors', 'Seek counsel', 'Request advice', 'Ask for guidance',
1498
+ 'Monitor opposition', 'Watch rivals', 'Track enemies', 'Observe competition',
1499
+ 'Build reputation', 'Establish credibility', 'Create image', 'Develop persona',
1500
+ 'Navigate bureaucracy', 'Work the system', 'Manage paperwork', 'Handle administration',
1501
+ 'Court favor', 'Seek patronage', 'Gain sponsorship', 'Win support',
1502
+ 'Stage protest', 'Organize demonstration', 'Mobilize crowd', 'Lead march',
1503
+ 'Conduct diplomacy', 'Practice statecraft', 'Exercise tact', 'Show finesse',
1504
+ 'Manage crisis', 'Handle emergency', 'Control situation', 'Steer outcome',
1505
+ 'Plan succession', 'Arrange transition', 'Prepare replacement', 'Design handover',
1506
+ 'Exercise veto', 'Use blocking power', 'Apply restraint', 'Impose limitation',
1507
+ 'Grant pardon', 'Offer clemency', 'Provide forgiveness', 'Extend mercy',
1508
+ 'Declare war', 'Announce conflict', 'Proclaim hostilities', 'Start war',
1509
+ 'Negotiate peace', 'Pursue armistice', 'Seek ceasefire', 'End hostilities'
750
1510
  ],
751
1511
  TECHNOLOGICAL: [
752
- 'Activate the device', 'Examine the mechanism', 'Test functionality', 'Seek expert help',
753
- 'Attempt repair', 'Document the system', 'Use with caution', 'Study the design',
754
- 'Upgrade components', 'Troubleshoot issues', 'Optimize performance', 'Shut down safely'
1512
+ 'Activate the device', 'Start the machine', 'Power up system', 'Initialize equipment',
1513
+ 'Examine the mechanism', 'Study the device', 'Analyze the machine', 'Inspect the apparatus',
1514
+ 'Test functionality', 'Check operations', 'Verify performance', 'Assess capability',
1515
+ 'Be careful', 'Exercise caution', 'Proceed safely', 'Show prudence',
1516
+ 'Calibrate system', 'Adjust settings', 'Tune parameters', 'Fine-tune controls',
1517
+ 'Debug the code', 'Fix programming', 'Resolve errors', 'Correct bugs',
1518
+ 'Upgrade components', 'Improve hardware', 'Enhance systems', 'Boost performance',
1519
+ 'Maintain equipment', 'Service machinery', 'Perform upkeep', 'Conduct repairs',
1520
+ 'Research applications', 'Explore uses', 'Investigate potential', 'Study possibilities',
1521
+ 'Document procedures', 'Record methods', 'Log processes', 'Note techniques',
1522
+ 'Train operators', 'Teach usage', 'Instruct users', 'Educate personnel',
1523
+ 'Scale production', 'Increase output', 'Expand capacity', 'Grow operations',
1524
+ 'Automate process', 'Implement machines', 'Introduce automation', 'Create efficiency',
1525
+ 'Monitor performance', 'Track metrics', 'Measure results', 'Analyze data',
1526
+ 'Innovate design', 'Create new models', 'Develop prototypes', 'Build inventions',
1527
+ 'Test safety', 'Verify security', 'Check reliability', 'Assess stability',
1528
+ 'Integrate systems', 'Connect components', 'Link technologies', 'Unify platforms',
1529
+ 'Optimize efficiency', 'Improve productivity', 'Enhance output', 'Maximize results',
1530
+ 'Troubleshoot issues', 'Solve problems', 'Fix malfunctions', 'Resolve failures',
1531
+ 'Reverse engineer', 'Study construction', 'Analyze design', 'Understand workings',
1532
+ 'Patent invention', 'Protect intellectual property', 'Secure rights', 'Claim ownership',
1533
+ 'Commercialize technology', 'Market invention', 'Sell product', 'Monetize creation',
1534
+ 'Collaborate on research', 'Share knowledge', 'Pool expertise', 'Joint development',
1535
+ 'Standardize processes', 'Establish protocols', 'Create guidelines', 'Set standards',
1536
+ 'Recycle materials', 'Reuse components', 'Conserve resources', 'Reduce waste',
1537
+ 'Upgrade infrastructure', 'Modernize systems', 'Update technology', 'Refresh equipment'
755
1538
  ],
756
1539
  MAGIC: [
757
- 'Channel the energy', 'Study the spell', 'Attempt to learn', 'Use protective wards',
758
- 'Combine with other magic', 'Enhance the effect', 'Control the flow', 'Dispel if dangerous',
759
- 'Document the ritual', 'Share knowledge', 'Experiment carefully', 'Seek guidance'
1540
+ 'Approach carefully', 'Move cautiously', 'Advance slowly', 'Tread lightly',
1541
+ 'Use protective magic', 'Cast wards', 'Create barriers', 'Establish protection',
1542
+ 'Observe from distance', 'Watch remotely', 'Monitor safely', 'Study from afar',
1543
+ 'Seek guidance', 'Request counsel', 'Ask for advice', 'Consult wisdom',
1544
+ 'Channel energy', 'Harness power', 'Draw mana', 'Gather essence',
1545
+ 'Cast spell', 'Weave magic', 'Invoke power', 'Release energy',
1546
+ 'Study runes', 'Examine symbols', 'Analyze glyphs', 'Investigate sigils',
1547
+ 'Brew potion', 'Mix elixir', 'Create concoction', 'Prepare remedy',
1548
+ 'Enchant item', 'Imbue object', 'Infuse magic', 'Empower artifact',
1549
+ 'Summon familiar', 'Call companion', 'Invoke ally', 'Conjure helper',
1550
+ 'Research spells', 'Study magic', 'Investigate arcane', 'Explore mysteries',
1551
+ 'Meditate deeply', 'Contemplate magic', 'Reflect on power', 'Consider essence',
1552
+ 'Practice incantation', 'Rehearse spell', 'Drill casting', 'Exercise magic',
1553
+ 'Experiment with magic', 'Test theories', 'Try new spells', 'Explore possibilities',
1554
+ 'Consult grimoire', 'Read spellbook', 'Study tome', 'Examine codex',
1555
+ 'Craft wand', 'Create staff', 'Forge focus', 'Build tool',
1556
+ 'Align with elements', 'Balance forces', 'Harmonize powers', 'Unite energies',
1557
+ 'Purify ritual', 'Cleanse magic', 'Remove corruption', 'Eliminate taint',
1558
+ 'Amplify spell', 'Strengthen magic', 'Boost power', 'Increase potency',
1559
+ 'Control magic', 'Master power', 'Command energy', 'Dominate force',
1560
+ 'Share knowledge', 'Teach magic', 'Instruct apprentice', 'Pass wisdom',
1561
+ 'Discover new spell', 'Create incantation', 'Invent magic', 'Develop power',
1562
+ 'Preserve magic', 'Maintain balance', 'Keep harmony', 'Sustain order',
1563
+ 'Challenge magical limits', 'Push boundaries', 'Test extremes', 'Explore depths',
1564
+ 'Accept magical cost', 'Pay the price', 'Bear the burden', 'Endure sacrifice',
1565
+ 'Celebrate magic', 'Honor tradition', 'Respect power', 'Revere mystery',
1566
+ 'Question magic', 'Challenge beliefs', 'Test assumptions', 'Doubt certainty',
1567
+ 'Embrace magic', 'Accept power', 'Welcome mystery', 'Surrender to wonder'
760
1568
  ],
761
1569
  SPELLCASTING: [
762
- 'Cast the spell', 'Modify the incantation', 'Increase power', 'Focus precisely',
763
- 'Combine elements', 'Channel safely', 'Enhance effect', 'Control carefully',
764
- 'Practice the gesture', 'Refine the words', 'Balance the energy', 'Complete the ritual'
1570
+ 'Prepare incantation', 'Focus mind', 'Center energy', 'Gather will',
1571
+ 'Cast fireball', 'Launch flame', 'Hurl blaze', 'Send inferno',
1572
+ 'Summon ice lance', 'Call frost spear', 'Invoke cold weapon', 'Create ice projectile',
1573
+ 'Release lightning', 'Unleash storm', 'Call thunder', 'Send electric bolt',
1574
+ 'Cause earthquake', 'Shake ground', 'Rumble earth', 'Tremor terrain',
1575
+ 'Surge water', 'Flood area', 'Drown zone', 'Submerge region',
1576
+ 'Gust wind', 'Blow gale', 'Storm blast', 'Hurricane force',
1577
+ 'Heal wounds', 'Restore health', 'Mend injuries', 'Cure damage',
1578
+ 'Shield ally', 'Protect friend', 'Guard companion', 'Defend partner',
1579
+ 'Invisibility cloak', 'Hide from sight', 'Become unseen', 'Vanish from view',
1580
+ 'Telekinesis lift', 'Move by mind', 'Shift objects', 'Control matter',
1581
+ 'Illusion create', 'Fabricate reality', 'Weave deception', 'Construct false image',
1582
+ 'Portal open', 'Create gateway', 'Form passage', 'Build door',
1583
+ 'Weather control', 'Command climate', 'Rule atmosphere', 'Dominate sky',
1584
+ 'Necrotic drain', 'Sap life', 'Steal vitality', 'Extract essence',
1585
+ 'Divine light', 'Radiate holiness', 'Glow with faith', 'Shine with purity',
1586
+ 'Shadow step', 'Move through darkness', 'Travel in shade', 'Walk in gloom',
1587
+ 'Crystal focus', 'Concentrate power', 'Channel through gem', 'Amplify with stone',
1588
+ 'Blood magic', 'Power through life', 'Strength from essence', 'Force from vitality',
1589
+ 'Rune activation', 'Awaken symbols', 'Empower glyphs', 'Charge sigils',
1590
+ 'Elemental binding', 'Control natural forces', 'Master primal powers', 'Command elements',
1591
+ 'Soul manipulation', 'Influence spirit', 'Control essence', 'Dominate soul',
1592
+ 'Time distortion', 'Bend chronology', 'Warp duration', 'Alter flow',
1593
+ 'Reality weave', 'Modify existence', 'Change fabric', 'Alter reality',
1594
+ 'Mind reading', 'Sense thoughts', 'Perceive intentions', 'Read consciousness',
1595
+ 'Body control', 'Master flesh', 'Command form', 'Dominate physique',
1596
+ 'Energy manipulation', 'Control power', 'Direct force', 'Guide energy',
1597
+ 'Summon creature', 'Call being', 'Invoke entity', 'Conjure presence',
1598
+ 'Banish spirit', 'Exile entity', 'Remove presence', 'Eliminate being',
1599
+ 'Enchant weapon', 'Imbue blade', 'Empower tool', 'Charge instrument',
1600
+ 'Ward area', 'Protect space', 'Shield zone', 'Guard territory'
1601
+ ],
1602
+ FIGHTER: [
1603
+ 'Charge forward', 'Rush enemy', 'Close distance', 'Engage directly',
1604
+ 'Defend position', 'Hold ground', 'Maintain defense', 'Protect area',
1605
+ 'Strike decisively', 'Attack with power', 'Deliver blow', 'Land hit',
1606
+ 'Parry attack', 'Block strike', 'Deflect weapon', 'Counter blow',
1607
+ 'Dodge swiftly', 'Evade attack', 'Sidestep danger', 'Avoid threat',
1608
+ 'Counterattack', 'Exploit opening', 'Seize opportunity', 'Capitalize on error',
1609
+ 'Press advantage', 'Maintain momentum', 'Keep pressure', 'Sustain attack',
1610
+ 'Conserve energy', 'Pace yourself', 'Manage stamina', 'Preserve strength',
1611
+ 'Feint attack', 'Fake strike', 'Mislead opponent', 'Deceive enemy',
1612
+ 'Disarm foe', 'Remove weapon', 'Strip armament', 'Unarm opponent',
1613
+ 'Grapple enemy', 'Wrestle opponent', 'Close combat', 'Fight in close quarters',
1614
+ 'Use terrain', 'Leverage environment', 'Exploit surroundings', 'Utilize landscape',
1615
+ 'Coordinate with allies', 'Work with team', 'Support comrades', 'Aid companions',
1616
+ 'Intimidate opponent', 'Show dominance', 'Demonstrate strength', 'Project power',
1617
+ 'Endure pain', 'Fight through injury', 'Ignore wounds', 'Push through pain',
1618
+ 'Finish fight', 'End combat', 'Conclude battle', 'Resolve conflict',
1619
+ 'Train harder', 'Practice technique', 'Hone skills', 'Improve form',
1620
+ 'Study opponent', 'Analyze enemy', 'Learn weakness', 'Understand foe',
1621
+ 'Adapt strategy', 'Change approach', 'Modify tactics', 'Adjust plan',
1622
+ 'Lead by example', 'Inspire others', 'Motivate team', 'Encourage allies',
1623
+ 'Accept defeat', 'Learn from loss', 'Grow from failure', 'Improve from setback',
1624
+ 'Celebrate victory', 'Honor achievement', 'Recognize success', 'Value triumph',
1625
+ 'Respect opponent', 'Honor adversary', 'Acknowledge skill', 'Value combat',
1626
+ 'Seek fair fight', 'Demand honorable combat', 'Insist on rules', 'Require integrity',
1627
+ 'Test limits', 'Push boundaries', 'Challenge self', 'Explore potential',
1628
+ 'Master weapon', 'Perfect technique', 'Refine skill', 'Excel in combat',
1629
+ 'Protect the weak', 'Defend vulnerable', 'Shield innocent', 'Guard helpless',
1630
+ 'Fight for cause', 'Battle for belief', 'Combat for principle', 'Struggle for ideal',
1631
+ 'Accept challenge', 'Welcome duel', 'Embrace combat', 'Enter fray willingly'
1632
+ ],
1633
+ GUILD: [
1634
+ 'Accept membership', 'Join the guild', 'Become member', 'Enter organization',
1635
+ 'Decline invitation', 'Reject offer', 'Refuse membership', 'Turn down guild',
1636
+ 'Complete initiation', 'Pass trials', 'Finish apprenticeship', 'Graduate program',
1637
+ 'Seek mentorship', 'Find master', 'Request guidance', 'Ask for teaching',
1638
+ 'Contribute to guild', 'Aid organization', 'Support group', 'Help community',
1639
+ 'Learn trade secrets', 'Study techniques', 'Master skills', 'Acquire knowledge',
1640
+ 'Network with members', 'Build connections', 'Form alliances', 'Create relationships',
1641
+ 'Participate in events', 'Join activities', 'Attend gatherings', 'Take part in ceremonies',
1642
+ 'Advance in rank', 'Climb hierarchy', 'Gain status', 'Earn promotion',
1643
+ 'Teach apprentices', 'Mentor newcomers', 'Share knowledge', 'Pass on wisdom',
1644
+ 'Represent guild', 'Speak for organization', 'Act as ambassador', 'Serve as delegate',
1645
+ 'Uphold traditions', 'Honor customs', 'Preserve heritage', 'Maintain legacy',
1646
+ 'Innovate practices', 'Improve methods', 'Modernize techniques', 'Advance craft',
1647
+ 'Resolve disputes', 'Settle conflicts', 'Mediate disagreements', 'Solve problems',
1648
+ 'Manage resources', 'Oversee supplies', 'Control inventory', 'Handle materials',
1649
+ 'Organize events', 'Plan activities', 'Coordinate gatherings', 'Arrange ceremonies',
1650
+ 'Maintain standards', 'Enforce quality', 'Ensure excellence', 'Uphold requirements',
1651
+ 'Expand influence', 'Grow power', 'Increase reach', 'Extend authority',
1652
+ 'Form alliances', 'Create partnerships', 'Build coalitions', 'Establish unions',
1653
+ 'Protect interests', 'Defend rights', 'Safeguard privileges', 'Preserve benefits',
1654
+ 'Adapt to change', 'Embrace evolution', 'Accept progress', 'Welcome innovation',
1655
+ 'Celebrate achievements', 'Honor successes', 'Recognize accomplishments', 'Value progress',
1656
+ 'Support members', 'Aid colleagues', 'Help associates', 'Assist peers',
1657
+ 'Foster community', 'Build fellowship', 'Create brotherhood', 'Establish sisterhood',
1658
+ 'Preserve knowledge', 'Guard secrets', 'Protect wisdom', 'Safeguard lore',
1659
+ 'Encourage excellence', 'Promote quality', 'Inspire mastery', 'Motivate perfection',
1660
+ 'Navigate politics', 'Handle intrigue', 'Manage relationships', 'Control dynamics',
1661
+ 'Balance tradition', 'Merge old and new', 'Harmonize past and present', 'Bridge eras',
1662
+ 'Serve the craft', 'Honor the trade', 'Respect the profession', 'Value the skill',
1663
+ 'Commit to growth', 'Dedicate to improvement', 'Devote to advancement', 'Pledge to progress'
1664
+ ],
1665
+ UNDERWORLD: [
1666
+ 'Accept the job', 'Take the contract', 'Agree to work', 'Commit to task',
1667
+ 'Negotiate price', 'Bargain fee', 'Set terms', 'Establish payment',
1668
+ 'Refuse assignment', 'Decline job', 'Reject contract', 'Turn down work',
1669
+ 'Plan heist', 'Organize robbery', 'Arrange theft', 'Coordinate crime',
1670
+ 'Gather intelligence', 'Collect information', 'Acquire data', 'Obtain knowledge',
1671
+ 'Assemble crew', 'Recruit team', 'Form gang', 'Build organization',
1672
+ 'Establish alibi', 'Create cover', 'Forge identity', 'Build false persona',
1673
+ 'Fence goods', 'Sell stolen items', 'Move merchandise', 'Liquidate assets',
1674
+ 'Evade authorities', 'Avoid law', 'Escape pursuit', 'Shake tails',
1675
+ 'Launder money', 'Clean funds', 'Legitimize wealth', 'Sanitize profits',
1676
+ 'Eliminate witnesses', 'Silence informants', 'Remove threats', 'Neutralize dangers',
1677
+ 'Build reputation', 'Establish credibility', 'Create fear', 'Gain respect',
1678
+ 'Expand territory', 'Claim turf', 'Control area', 'Dominate region',
1679
+ 'Form alliances', 'Create partnerships', 'Build coalitions', 'Establish pacts',
1680
+ 'Betray associates', 'Double-cross partners', 'Break agreements', 'Violate trusts',
1681
+ 'Collect debts', 'Extract payments', 'Enforce collections', 'Demand repayment',
1682
+ 'Intimidate rivals', 'Threaten competition', 'Coerce opponents', 'Pressure enemies',
1683
+ 'Run protection', 'Offer security', 'Provide safety', 'Guarantee protection',
1684
+ 'Smuggle goods', 'Move contraband', 'Transport illegal items', 'Convey forbidden cargo',
1685
+ 'Forge documents', 'Create fake papers', 'Manufacture false identities', 'Produce counterfeit',
1686
+ 'Run gambling', 'Operate games', 'Manage betting', 'Control vice',
1687
+ 'Traffic substances', 'Deal drugs', 'Move narcotics', 'Distribute chemicals',
1688
+ 'Arrange kidnappings', 'Plan abductions', 'Organize hostage situations', 'Set up ransom demands',
1689
+ 'Conduct sabotage', 'Perform disruption', 'Create chaos', 'Cause destruction',
1690
+ 'Gather blackmail', 'Collect leverage', 'Acquire compromising information', 'Build dossiers',
1691
+ 'Establish network', 'Build web of contacts', 'Create information channels', 'Form intelligence rings',
1692
+ 'Manage operations', 'Oversee activities', 'Control enterprises', 'Direct organizations',
1693
+ 'Adapt to heat', 'Handle pressure', 'Manage pursuit', 'Navigate danger',
1694
+ 'Celebrate success', 'Enjoy victory', 'Savor triumph', 'Relish achievement',
1695
+ 'Learn from failure', 'Study mistakes', 'Analyze setbacks', 'Understand failures',
1696
+ 'Retire wealthy', 'Exit game', 'Cash out', 'Leave profession'
1697
+ ],
1698
+ NECROMANCER: [
1699
+ 'Raise skeleton', 'Animate bones', 'Summon undead', 'Create bone warrior',
1700
+ 'Summon wraith', 'Call spirit', 'Invoke ghost', 'Conjure phantom',
1701
+ 'Create zombie', 'Animate corpse', 'Raise dead', 'Form flesh golem',
1702
+ 'Bind soul', 'Capture essence', 'Trap spirit', 'Imprison consciousness',
1703
+ 'Harvest life force', 'Drain vitality', 'Extract essence', 'Siphon life',
1704
+ 'Command undead', 'Control minions', 'Direct servants', 'Guide creations',
1705
+ 'Study death', 'Research mortality', 'Investigate afterlife', 'Explore demise',
1706
+ 'Communicate with dead', 'Speak to spirits', 'Contact ghosts', 'Reach beyond',
1707
+ 'Preserve corpse', 'Maintain body', 'Prevent decay', 'Halt decomposition',
1708
+ 'Create phylactery', 'Forge soul vessel', 'Build life container', 'Construct essence holder',
1709
+ 'Achieve lichdom', 'Become immortal', 'Attain undeath', 'Reach eternal life',
1710
+ 'Control plague', 'Master disease', 'Command pestilence', 'Dominate sickness',
1711
+ 'Manipulate souls', 'Influence spirits', 'Control essences', 'Dominate consciousness',
1712
+ 'Create death knight', 'Forge dark champion', 'Build cursed warrior', 'Construct damned fighter',
1713
+ 'Summon bone dragon', 'Call skeletal beast', 'Invoke osseous monster', 'Conjure bone horror',
1714
+ 'Weave necrotic spells', 'Cast death magic', 'Invoke mortality', 'Channel demise',
1715
+ 'Balance life and death', 'Maintain equilibrium', 'Keep harmony', 'Preserve balance',
1716
+ 'Challenge death itself', 'Defy mortality', 'Oppose demise', 'Fight ending',
1717
+ 'Embrace darkness', 'Accept shadow', 'Welcome void', 'Surrender to nothing',
1718
+ 'Preserve knowledge', 'Maintain wisdom', 'Guard secrets', 'Protect forbidden lore',
1719
+ 'Teach necromancy', 'Instruct in death', 'Educate in undeath', 'Train in mortality',
1720
+ 'Experiment ethically', 'Test boundaries', 'Push limits', 'Explore extremes',
1721
+ 'Serve greater purpose', 'Work for cause', 'Labor for goal', 'Strive for objective',
1722
+ 'Question morality', 'Challenge ethics', 'Test beliefs', 'Examine principles',
1723
+ 'Accept consequences', 'Bear burden', 'Carry weight', 'Endure responsibility',
1724
+ 'Find peace', 'Achieve tranquility', 'Reach serenity', 'Attain calm',
1725
+ 'Transcend limits', 'Surpass boundaries', 'Exceed expectations', 'Go beyond',
1726
+ 'Master craft', 'Perfect art', 'Refine skill', 'Excel in necromancy',
1727
+ 'Create legacy', 'Build heritage', 'Establish tradition', 'Found school',
1728
+ 'Inspire fear', 'Instill terror', 'Generate dread', 'Produce horror',
1729
+ 'Command respect', 'Demand reverence', 'Require obedience', 'Earn submission'
1730
+ ],
1731
+ MAGE: [
1732
+ 'Study ancient tomes', 'Read forbidden texts', 'Examine arcane writings', 'Analyze mystical books',
1733
+ 'Experiment with spells', 'Test incantations', 'Try new magic', 'Practice sorcery',
1734
+ 'Research new magic', 'Investigate arcane', 'Explore mysteries', 'Discover secrets',
1735
+ 'Consult with mentors', 'Seek guidance', 'Request advice', 'Ask for wisdom',
1736
+ 'Attend academy', 'Join magical school', 'Enter arcane university', 'Study at institute',
1737
+ 'Master element', 'Control natural force', 'Command primal power', 'Dominate element',
1738
+ 'Create artifact', 'Forge magical item', 'Build enchanted object', 'Construct mystic device',
1739
+ 'Summon familiar', 'Call magical companion', 'Invoke arcane ally', 'Conjure mystical helper',
1740
+ 'Explore other planes', 'Visit different realms', 'Journey to other dimensions', 'Travel alternate worlds',
1741
+ 'Teach apprentices', 'Instruct students', 'Educate novices', 'Train beginners',
1742
+ 'Preserve knowledge', 'Maintain wisdom', 'Guard secrets', 'Protect lore',
1743
+ 'Innovate magic', 'Create new spells', 'Develop techniques', 'Invent methods',
1744
+ 'Collaborate with peers', 'Work with colleagues', 'Partner with equals', 'Cooperate with mages',
1745
+ 'Challenge traditions', 'Question established ways', 'Test conventional wisdom', 'Examine norms',
1746
+ 'Pursue forbidden knowledge', 'Seek banned wisdom', 'Hunt proscribed lore', 'Chase restricted secrets',
1747
+ 'Balance power and wisdom', 'Maintain harmony', 'Keep equilibrium', 'Preserve balance',
1748
+ 'Serve greater good', 'Work for benefit', 'Labor for improvement', 'Strive for progress',
1749
+ 'Accept limitations', 'Recognize boundaries', 'Understand constraints', 'Appreciate limits',
1750
+ 'Push magical boundaries', 'Expand arcane limits', 'Extend mystical horizons', 'Broaden magical scope',
1751
+ 'Create spell focus', 'Craft power conduit', 'Build energy channel', 'Forge magic amplifier',
1752
+ 'Study spell components', 'Research material needs', 'Investigate reagent requirements', 'Analyze ingredient demands',
1753
+ 'Develop spell theory', 'Formulate magical principles', 'Establish arcane laws', 'Create mystical frameworks',
1754
+ 'Test spell safety', 'Verify incantation security', 'Check magic stability', 'Assess spell reliability',
1755
+ 'Document discoveries', 'Record findings', 'Log observations', 'Note breakthroughs',
1756
+ 'Share knowledge', 'Disseminate wisdom', 'Spread understanding', 'Distribute insight',
1757
+ 'Mentor young mages', 'Guide aspiring wizards', 'Counsel novice sorcerers', 'Advise budding arcanists',
1758
+ 'Establish magical tradition', 'Found arcane school', 'Create mystical lineage', 'Build magical heritage',
1759
+ 'Challenge magical dogma', 'Question established beliefs', 'Test arcane assumptions', 'Examine mystical tenets',
1760
+ 'Explore ethical magic', 'Investigate moral sorcery', 'Study principled wizardry', 'Analyze virtuous arcanery',
1761
+ 'Accept magical responsibility', 'Bear arcane burden', 'Carry mystical weight', 'Endure magical obligation',
1762
+ 'Find magical balance', 'Achieve arcane harmony', 'Reach mystical equilibrium', 'Attain magical peace',
1763
+ 'Transcend magical limits', 'Surpass arcane boundaries', 'Exceed mystical expectations', 'Go beyond magical constraints'
1764
+ ],
1765
+ ROGUE: [
1766
+ 'Plan infiltration', 'Organize stealth entry', 'Arrange covert access', 'Coordinate secret entry',
1767
+ 'Pick lock', 'Bypass security', 'Open sealed door', 'Defeat mechanism',
1768
+ 'Move silently', 'Traverse quietly', 'Navigate without sound', 'Travel undetected',
1769
+ 'Hide in shadows', 'Conceal presence', 'Avoid detection', 'Remain unseen',
1770
+ 'Pick pocket', 'Lift valuables', 'Steal discretely', 'Remove items unnoticed',
1771
+ 'Set trap', 'Prepare ambush', 'Create hazard', 'Establish danger zone',
1772
+ 'Disarm trap', 'Neutralize hazard', 'Remove threat', 'Clear danger',
1773
+ 'Climb wall', 'Scale obstacle', 'Ascend barrier', 'Overcome height',
1774
+ 'Use disguise', 'Assume false identity', 'Adopt persona', 'Create deception',
1775
+ 'Gather information', 'Collect intelligence', 'Acquire data', 'Obtain knowledge',
1776
+ 'Tail target', 'Follow suspect', 'Track individual', 'Shadow person',
1777
+ 'Forge document', 'Create fake paper', 'Manufacture false identity', 'Produce counterfeit',
1778
+ 'Sabotage operation', 'Disrupt plans', 'Interfere with activities', 'Hinder progress',
1779
+ 'Assassinate target', 'Eliminate individual', 'Remove threat', 'Neutralize danger',
1780
+ 'Fence stolen goods', 'Sell hot merchandise', 'Move illicit items', 'Liquidate stolen property',
1781
+ 'Run confidence game', 'Execute scam', 'Perform con', 'Conduct fraud',
1782
+ 'Establish network', 'Build contacts', 'Create connections', 'Form alliances',
1783
+ 'Learn new skill', 'Acquire technique', 'Master method', 'Perfect approach',
1784
+ 'Test security', 'Probe defenses', 'Check vulnerabilities', 'Assess weaknesses',
1785
+ 'Create diversion', 'Cause distraction', 'Generate confusion', 'Produce chaos',
1786
+ 'Escape pursuit', 'Evade capture', 'Shake followers', 'Lose tails',
1787
+ 'Blend into crowd', 'Disappear in masses', 'Vanish in groups', 'Hide among people',
1788
+ 'Use terrain', 'Leverage environment', 'Exploit surroundings', 'Utilize landscape',
1789
+ 'Time action', 'Coordinate timing', 'Synchronize effort', 'Align execution',
1790
+ 'Adapt to situation', 'Adjust plan', 'Modify approach', 'Change strategy',
1791
+ 'Minimize risk', 'Reduce danger', 'Lower exposure', 'Decrease vulnerability',
1792
+ 'Maximize reward', 'Optimize gain', 'Increase profit', 'Enhance return',
1793
+ 'Cover tracks', 'Erase evidence', 'Remove traces', 'Eliminate clues',
1794
+ 'Establish alibi', 'Create cover story', 'Forge credibility', 'Build false trail',
1795
+ 'Test loyalties', 'Verify trustworthiness', 'Check reliability', 'Assess dependability',
1796
+ 'Betray associates', 'Double-cross partners', 'Break agreements', 'Violate trusts',
1797
+ 'Maintain honor', 'Keep code', 'Preserve integrity', 'Uphold principles',
1798
+ 'Retire wealthy', 'Exit game', 'Cash out', 'Leave profession'
1799
+ ],
1800
+ CLERIC: [
1801
+ 'Pray for guidance', 'Seek divine wisdom', 'Request holy counsel', 'Ask for sacred advice',
1802
+ 'Perform ritual', 'Conduct ceremony', 'Execute rite', 'Complete sacrament',
1803
+ 'Heal the wounded', 'Restore health', 'Mend injuries', 'Cure afflictions',
1804
+ 'Bless followers', 'Grant divine favor', 'Bestow holy protection', 'Provide sacred shield',
1805
+ 'Exorcise demons', 'Banish evil spirits', 'Remove unclean entities', 'Eliminate dark forces',
1806
+ 'Convert unbelievers', 'Bring faith to heathens', 'Spread divine word', 'Share sacred truth',
1807
+ 'Conduct funeral', 'Perform burial rites', 'Guide soul to afterlife', 'Facilitate transition',
1808
+ 'Marry couple', 'Perform wedding ceremony', 'Unite souls in holy bond', 'Sanctify union',
1809
+ 'Baptize child', 'Perform christening', 'Welcome to faith', 'Initiate into religion',
1810
+ 'Confess sins', 'Hear repentance', 'Absolve guilt', 'Grant forgiveness',
1811
+ 'Preach sermon', 'Deliver divine message', 'Share holy wisdom', 'Communicate sacred truth',
1812
+ 'Lead worship', 'Conduct service', 'Guide congregation', 'Direct devotion',
1813
+ 'Study scriptures', 'Read holy texts', 'Examine sacred writings', 'Analyze divine word',
1814
+ 'Meditate on faith', 'Contemplate divinity', 'Reflect on spirituality', 'Consider holiness',
1815
+ 'Fast for purification', 'Deny flesh', 'Practice abstinence', 'Achieve spiritual clarity',
1816
+ 'Pilgrimage to holy site', 'Journey to sacred place', 'Travel to divine location', 'Visit holy ground',
1817
+ 'Build temple', 'Construct sacred space', 'Create place of worship', 'Establish holy site',
1818
+ 'Ordain priest', 'Confer holy orders', 'Grant divine authority', 'Bestow sacred power',
1819
+ 'Counsel troubled soul', 'Guide lost spirit', 'Help suffering person', 'Aid afflicted individual',
1820
+ 'Perform miracle', 'Manifest divine power', 'Demonstrate holy might', 'Show sacred strength',
1821
+ 'Challenge heresy', 'Oppose false doctrine', 'Combat wrong belief', 'Fight incorrect faith',
1822
+ 'Preserve tradition', 'Maintain holy customs', 'Guard sacred practices', 'Protect divine rituals',
1823
+ 'Interpret prophecy', 'Read divine signs', 'Understand holy omens', 'Decipher sacred messages',
1824
+ 'Serve community', 'Aid congregation', 'Help followers', 'Support believers',
1825
+ 'Teach faith', 'Instruct in beliefs', 'Educate in doctrine', 'Train in sacred ways',
1826
+ 'Maintain purity', 'Preserve holiness', 'Keep sanctity', 'Guard divine essence',
1827
+ 'Accept divine calling', 'Answer holy summons', 'Respond to sacred duty', 'Fulfill divine purpose',
1828
+ 'Question faith', 'Test beliefs', 'Challenge doctrine', 'Examine sacred truths',
1829
+ 'Deepen devotion', 'Strengthen faith', 'Intensify belief', 'Heighten spirituality',
1830
+ 'Share divine love', 'Spread holy compassion', 'Distribute sacred mercy', 'Give divine kindness',
1831
+ 'Confront evil', 'Face darkness', 'Oppose corruption', 'Battle malevolence',
1832
+ 'Bring hope', 'Offer salvation', 'Provide redemption', 'Deliver deliverance',
1833
+ 'Witness miracle', 'Observe divine act', 'Experience holy wonder', 'Encounter sacred marvel'
1834
+ ],
1835
+ ADVENTURE: [
1836
+ 'Embark on the journey', 'Begin the expedition', 'Start the adventure', 'Commence the quest',
1837
+ 'Gather supplies first', 'Prepare thoroughly', 'Stock up on equipment', 'Acquire provisions',
1838
+ 'Recruit companions', 'Find allies', 'Assemble a team', 'Gather followers',
1839
+ 'Study ancient maps', 'Research the route', 'Examine old charts', 'Review historical records',
1840
+ 'Consult local experts', 'Seek knowledgeable guides', 'Find experienced mentors', 'Ask for advice',
1841
+ 'Scout the area first', 'Reconnaissance mission', 'Survey the surroundings', 'Assess the terrain',
1842
+ 'Set up a base camp', 'Establish headquarters', 'Create a safe haven', 'Build a forward position',
1843
+ 'Follow mysterious clues', 'Pursue hidden leads', 'Chase enigmatic hints', 'Track secret signs',
1844
+ 'Face the first challenge', 'Confront initial obstacle', 'Overcome opening trial', 'Surmount first barrier',
1845
+ 'Discover hidden treasure', 'Unearth secret riches', 'Find concealed wealth', 'Locate buried fortune',
1846
+ 'Battle legendary creatures', 'Fight mythical beasts', 'Combat ancient monsters', 'Confront primal horrors',
1847
+ 'Solve ancient puzzles', 'Decipher forgotten riddles', 'Unravel mystic enigmas', 'Crack timeless codes',
1848
+ 'Form unlikely alliances', 'Create unexpected partnerships', 'Forge strange friendships', 'Build odd coalitions',
1849
+ 'Navigate treacherous terrain', 'Cross dangerous landscapes', 'Traverse perilous paths', 'Journey through hazards',
1850
+ 'Harness elemental powers', 'Control natural forces', 'Master primal energies', 'Command elemental might',
1851
+ 'Communicate with spirits', 'Speak to ethereal beings', 'Converse with otherworldly entities', 'Dialogue with ghosts',
1852
+ 'Access hidden dimensions', 'Enter secret realms', 'Visit concealed worlds', 'Journey to parallel planes',
1853
+ 'Forge legendary weapons', 'Craft mythical artifacts', 'Create epic equipment', 'Build heroic tools',
1854
+ 'Fulfill ancient prophecies', 'Complete fateful predictions', 'Achieve destined outcomes', 'Realize legendary fates',
1855
+ 'Challenge powerful guardians', 'Test mighty protectors', 'Confront ancient sentinels', 'Face legendary wardens',
1856
+ 'Master new abilities', 'Learn powerful skills', 'Acquire mighty techniques', 'Gain legendary capabilities',
1857
+ 'Transform through experience', 'Evolve through trials', 'Change through challenges', 'Grow through adversity',
1858
+ 'Return as a legend', 'Come back as a hero', 'Return transformed', 'Come back changed',
1859
+ 'Share the discoveries', 'Reveal the findings', 'Disclose the secrets', 'Publish the knowledge',
1860
+ 'Protect the sacred sites', 'Safeguard holy places', 'Defend mystical locations', 'Shield magical areas',
1861
+ 'Establish trade routes', 'Create commercial paths', 'Open economic avenues', 'Develop merchant highways',
1862
+ 'Build monuments', 'Construct memorials', 'Erect lasting tributes', 'Create eternal markers',
1863
+ 'Inspire future generations', 'Motivate coming heroes', 'Encourage future adventurers', 'Spark new legends'
1864
+ ],
1865
+ QUEST: [
1866
+ 'Accept the quest immediately', 'Embrace the mission eagerly', 'Take on the task willingly', 'Accept the challenge gladly',
1867
+ 'Negotiate better terms', 'Bargain for improved conditions', 'Haggle for better rewards', 'Discuss enhanced compensation',
1868
+ 'Request time to prepare', 'Ask for preparation period', 'Demand setup time', 'Require planning phase',
1869
+ 'Seek additional information', 'Request more details', 'Ask for clarification', 'Demand further explanation',
1870
+ 'Consult trusted advisors', 'Seek wise counsel', 'Ask for expert advice', 'Request knowledgeable guidance',
1871
+ 'Gather necessary resources', 'Collect required materials', 'Acquire essential supplies', 'Obtain needed equipment',
1872
+ 'Assemble a capable team', 'Recruit skilled companions', 'Form an effective group', 'Build a competent party',
1873
+ 'Research the quest history', 'Study the mission background', 'Investigate the task origins', 'Examine the quest context',
1874
+ 'Plan the approach carefully', 'Strategize the method thoroughly', 'Devise a detailed plan', 'Create a comprehensive strategy',
1875
+ 'Set intermediate goals', 'Establish milestone objectives', 'Define progress markers', 'Create achievement checkpoints',
1876
+ 'Prepare contingency plans', 'Develop backup strategies', 'Create emergency responses', 'Form alternative approaches',
1877
+ 'Begin the first phase', 'Start the initial stage', 'Commence the opening act', 'Initiate the first step',
1878
+ 'Overcome initial obstacles', 'Surmount opening challenges', 'Conquer starting difficulties', 'Master beginning trials',
1879
+ 'Solve the first puzzle', 'Crack the initial riddle', 'Unravel the opening mystery', 'Decode the first enigma',
1880
+ 'Defeat early enemies', 'Overcome initial foes', 'Conquer starting adversaries', 'Master beginning opponents',
1881
+ 'Acquire crucial information', 'Obtain vital intelligence', 'Gain essential knowledge', 'Secure important data',
1882
+ 'Form key alliances', 'Create important partnerships', 'Establish crucial connections', 'Build vital relationships',
1883
+ 'Navigate political complications', 'Handle diplomatic challenges', 'Manage political obstacles', 'Address governmental issues',
1884
+ 'Survive environmental hazards', 'Endure natural dangers', 'Withstand elemental threats', 'Resist environmental perils',
1885
+ 'Master new skills', 'Learn essential abilities', 'Acquire necessary techniques', 'Gain required competencies',
1886
+ 'Adapt to unexpected changes', 'Adjust to unforeseen circumstances', 'Modify for unexpected developments', 'Flex for surprise elements',
1887
+ 'Maintain team morale', 'Keep group spirits high', 'Preserve party motivation', 'Sustain team enthusiasm',
1888
+ 'Manage limited resources', 'Handle scarce supplies', 'Administer constrained materials', 'Control restricted assets',
1889
+ 'Make difficult moral choices', 'Face ethical dilemmas', 'Confront moral quandaries', 'Address philosophical decisions',
1890
+ 'Push through exhaustion', 'Endure fatigue', 'Continue despite weariness', 'Persist through tiredness',
1891
+ 'Celebrate small victories', 'Acknowledge minor successes', 'Recognize incremental achievements', 'Value partial accomplishments',
1892
+ 'Adjust strategy dynamically', 'Modify approach flexibly', 'Change tactics adaptively', 'Evolve methods responsively',
1893
+ 'Protect team members', 'Safeguard companions', 'Defend party members', 'Shield group allies',
1894
+ 'Complete the quest successfully', 'Achieve quest objectives', 'Fulfill mission requirements', 'Accomplish quest goals',
1895
+ 'Claim well-earned rewards', 'Receive deserved compensation', 'Accept rightful payment', 'Obtain earned prizes',
1896
+ 'Share the glory', 'Distribute the fame', 'Spread the recognition', 'Broadcast the achievement',
1897
+ 'Reflect on the journey', 'Contemplate the experience', 'Consider the adventure', 'Meditate on the quest'
765
1898
  ]
766
1899
  };
767
- const baseTexts = choiceTexts[baseType] || [
768
- 'Accept', 'Decline', 'Investigate', 'Ignore',
769
- 'Proceed', 'Retreat', 'Observe', 'Act'
770
- ];
771
- let text;
772
- if (index < baseTexts.length) {
773
- text = baseTexts[index];
774
- }
775
- else {
776
- const actionVerbs = ['Act', 'Respond', 'Decide', 'Choose', 'Proceed', 'Engage', 'Interact', 'React'];
777
- const actionNouns = ['carefully', 'boldly', 'wisely', 'quickly', 'cautiously', 'confidently'];
778
- text = `${this.chance.pickone(actionVerbs)} ${this.chance.pickone(actionNouns)}`;
779
- }
780
- const effect = this.generateChoiceEffect(type, difficulty, context, rewardModifier);
781
- return {
1900
+ const texts = choiceTexts[type] || ['Accept', 'Decline', 'Investigate', 'Wait'];
1901
+ const choiceCount = Math.min(4, texts.length);
1902
+ const selectedTexts = this.chance.pickset(texts, choiceCount);
1903
+ return selectedTexts.map((text, index) => ({
782
1904
  text,
783
- effect
784
- };
1905
+ effect: this.generateChoiceEffect(type, difficulty, index)
1906
+ }));
785
1907
  }
786
- /**
787
- * Generate effect for a choice
788
- */
789
- generateChoiceEffect(type, difficulty, context, rewardModifier) {
790
- const effect = {};
791
- const difficultyMultiplier = this.getDifficultyMultiplier(difficulty);
792
- switch (type) {
793
- case 'COMBAT':
794
- effect.health = Math.round(this.chance.integer({ min: -20, max: 10 }) * difficultyMultiplier);
795
- if (this.chance.bool({ likelihood: 30 })) {
796
- effect.gold = Math.round(this.chance.integer({ min: 0, max: 100 }) * rewardModifier);
797
- }
798
- break;
799
- case 'SOCIAL':
800
- effect.reputation = Math.round(this.chance.integer({ min: -10, max: 15 }) * difficultyMultiplier);
801
- if (this.chance.bool({ likelihood: 40 })) {
802
- effect.influence = Math.round(this.chance.integer({ min: 0, max: 20 }) * rewardModifier);
803
- }
804
- break;
805
- case 'ECONOMIC':
806
- effect.gold = Math.round(this.chance.integer({ min: -50, max: 200 }) * difficultyMultiplier * rewardModifier);
807
- if (this.chance.bool({ likelihood: 25 })) {
808
- effect.reputation = Math.round(this.chance.integer({ min: -5, max: 10 }));
809
- }
810
- break;
811
- case 'EXPLORATION':
812
- if (this.chance.bool({ likelihood: 60 })) {
813
- effect.gold = Math.round(this.chance.integer({ min: 0, max: 150 }) * rewardModifier);
814
- }
815
- if (this.chance.bool({ likelihood: 20 })) {
816
- effect.health = Math.round(this.chance.integer({ min: -15, max: 0 }));
817
- }
818
- break;
819
- default:
820
- effect.gold = Math.round(this.chance.integer({ min: -20, max: 50 }) * difficultyMultiplier);
821
- break;
822
- }
823
- return effect;
824
- }
825
- /**
826
- * Get difficulty multiplier for effects
827
- */
828
- getDifficultyMultiplier(difficulty) {
829
- const settings = utils_1.DIFFICULTY_SETTINGS[difficulty];
830
- return settings ? settings.rewardMultiplier : 1.0;
831
- }
832
- /**
833
- * Remove duplicate consecutive words from description
834
- */
835
- removeDuplicateWords(description) {
836
- let fixed = description;
837
- const brokenHyphenPattern = /\b(\w+)-\s+\1-(\w+)\b/gi;
838
- fixed = fixed.replace(brokenHyphenPattern, '$1-$2');
839
- const brokenHyphenPattern2 = /\b(\w+)-\s+(\w+)-(\w+)\b/gi;
840
- fixed = fixed.replace(brokenHyphenPattern2, (_match, part1, part2, part3) => {
841
- const part1Lower = part1.toLowerCase();
842
- const part2Lower = part2.toLowerCase();
843
- if (part2Lower.startsWith(part1Lower) || part1Lower === part2Lower.substring(0, Math.min(part1Lower.length, part2Lower.length))) {
844
- return `${part1}-${part3}`;
845
- }
846
- return `${part1}-${part2}-${part3}`;
847
- });
848
- const brokenHyphenPattern3 = /\b(\w+)-\s+(\w+)\b/gi;
849
- fixed = fixed.replace(brokenHyphenPattern3, (match, part1, part2) => {
850
- const part1Lower = part1.toLowerCase();
851
- const part2Lower = part2.toLowerCase();
852
- if (part2Lower.startsWith(part1Lower) || part1Lower === part2Lower.substring(0, Math.min(part1Lower.length, 4))) {
853
- return `${part1}-${part2}`;
854
- }
855
- return match;
856
- });
857
- const brokenHyphenPattern4 = /\b(\w+)-\s+\1-(\w+)\b/gi;
858
- fixed = fixed.replace(brokenHyphenPattern4, '$1-$2');
859
- const brokenHyphenPattern5 = /\b(\w+)-\s+(\w+)-(\w+)\b/gi;
860
- fixed = fixed.replace(brokenHyphenPattern5, (match, part1, part2, part3) => {
861
- if (part2.toLowerCase().startsWith(part1.toLowerCase())) {
862
- return `${part1}-${part3}`;
863
- }
864
- return match;
865
- });
866
- const consecutiveDuplicate = /\b(\w{4,})\s+\1\b/gi;
867
- fixed = fixed.replace(consecutiveDuplicate, (match, word) => {
868
- return word;
869
- });
870
- const consecutiveDuplicate2 = /\b(a|an|the)\s+(\w{4,})\s+\2\b/gi;
871
- fixed = fixed.replace(consecutiveDuplicate2, (match, article, word) => {
872
- return `${article} ${word}`;
873
- });
874
- const words = fixed.split(/\s+/);
875
- const result = [];
876
- const seenWords = new Map();
877
- for (let i = 0; i < words.length; i++) {
878
- const currentWord = words[i].toLowerCase().replace(/[.,!?;:]/g, '');
879
- const prevWord = i > 0 ? words[i - 1].toLowerCase().replace(/[.,!?;:]/g, '') : '';
880
- const prevWordOriginal = i > 0 ? words[i - 1] : '';
881
- const isStartOfSentence = i === 0 || /[.!?]\s*$/.test(prevWordOriginal);
882
- const isHyphenated = words[i].includes('-');
883
- if (currentWord.length > 3 && !isHyphenated) {
884
- if (currentWord === prevWord) {
885
- continue;
886
- }
887
- const count = seenWords.get(currentWord) || 0;
888
- if (count > 0 && !isStartOfSentence) {
889
- continue;
890
- }
891
- if (!isStartOfSentence) {
892
- seenWords.set(currentWord, count + 1);
893
- }
894
- }
895
- result.push(words[i]);
896
- }
897
- fixed = result.join(' ');
898
- const duplicatePatterns = [
899
- /\b(\w{4,})\s+\w+\s+\1\b/gi,
900
- /\b(\w+)\s+\1\s+\w+\b/gi,
901
- /\b\w+\s+(\w{4,})\s+\1\b/gi,
902
- /\b(\w{4,})\s+(\w+)\s+\1\b/gi,
903
- /\b(\w{4,})\s+\1\b/gi
904
- ];
905
- for (const pattern of duplicatePatterns) {
906
- fixed = fixed.replace(pattern, (match) => {
907
- const words = match.split(/\s+/);
908
- const uniqueWords = [];
909
- const seen = new Set();
910
- for (const word of words) {
911
- const wordLower = word.toLowerCase().replace(/[.,!?;:]/g, '');
912
- if (wordLower.length > 3 && !seen.has(wordLower)) {
913
- seen.add(wordLower);
914
- uniqueWords.push(word);
915
- }
916
- else if (wordLower.length <= 3) {
917
- uniqueWords.push(word);
918
- }
919
- }
920
- return uniqueWords.join(' ');
921
- });
922
- }
923
- return fixed;
924
- }
925
- /**
926
- * Fix word order issues (noun before adjective)
927
- */
928
- fixWordOrder(description, adjective, noun) {
929
- const adjLower = adjective.toLowerCase();
930
- const nounLower = noun.toLowerCase();
931
- const wrongOrderPattern = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+${adjLower}\\b`, 'gi');
932
- description = description.replace(wrongOrderPattern, (_match, article) => {
933
- return `${article} ${adjLower} ${nounLower}`;
934
- });
935
- const wrongOrderPattern2 = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+(\\w+)\\s+${adjLower}\\b`, 'gi');
936
- description = description.replace(wrongOrderPattern2, (_match, article, middle) => {
937
- return `${article} ${adjLower} ${nounLower} ${middle}`;
938
- });
939
- const wrongOrderPattern3 = new RegExp(`\\bThe\\s+${nounLower}\\s+${adjLower}\\b`, 'gi');
940
- description = description.replace(wrongOrderPattern3, () => {
941
- return `The ${adjLower} ${nounLower}`;
942
- });
943
- const duplicateNounPattern = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+\\w+\\s+${nounLower}\\b`, 'gi');
944
- description = description.replace(duplicateNounPattern, (_match, article) => {
945
- return `${article} ${adjLower} ${nounLower}`;
946
- });
947
- const duplicateNounPattern2 = new RegExp(`\\b(an?|the|The)\\s+${nounLower}\\s+${nounLower}\\b`, 'gi');
948
- description = description.replace(duplicateNounPattern2, (_match, article) => {
949
- const art = article.toLowerCase() === 'the' ? 'The' : article;
950
- return `${art} ${adjLower} ${nounLower}`;
951
- });
952
- const duplicateNounPattern3 = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+${adjLower}\\s+${nounLower}\\b`, 'gi');
953
- description = description.replace(duplicateNounPattern3, (_match, article) => {
954
- return `${article} ${adjLower} ${nounLower}`;
955
- });
956
- const duplicateNounPattern4 = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+\\w+\\s+${nounLower}\\b`, 'gi');
957
- description = description.replace(duplicateNounPattern4, (_match, article) => {
958
- return `${article} ${adjLower} ${nounLower}`;
959
- });
960
- const wrongOrderPattern4 = new RegExp(`\\b(an?|the|The|A)\\s+${nounLower}\\s+(captivating|overwhelming|tainted|uncommon|mighty|quiet|ruthless|wicked|yielding|serene|lavish|unbreakable|sacred|kingly|fierce|mysterious|ancient|powerful|extraordinary|radiant|wise|nefarious|crucial|jaded|furious|pristine|formidable|wealthy|numinous|glorious|ominous|transcendent)\\b`, 'gi');
961
- description = description.replace(wrongOrderPattern4, (_match, article, adj) => {
962
- const art = article.toLowerCase() === 'the' ? 'The' : (article.toLowerCase() === 'a' ? 'A' : article);
963
- return `${art} ${adj} ${nounLower}`;
964
- });
965
- const commonAdjectives = ['wicked', 'yielding', 'serene', 'lavish', 'unbreakable', 'sacred', 'kingly', 'fierce', 'mysterious', 'ancient', 'powerful', 'extraordinary', 'radiant', 'wise', 'overwhelming', 'nefarious', 'crucial', 'commerce', 'mission', 'jaded', 'furious', 'pristine', 'formidable', 'wealthy', 'numinous', 'glorious', 'ominous', 'transcendent', 'captivating', 'tainted', 'uncommon', 'mighty', 'quiet', 'ruthless'];
966
- for (const adj of commonAdjectives) {
967
- if (adj === nounLower)
968
- continue;
969
- const pattern = new RegExp(`\\b(an?|the|The)\\s+${nounLower}\\s+${adj}\\b`, 'gi');
970
- description = description.replace(pattern, (_match, article) => {
971
- const art = article.toLowerCase() === 'the' ? 'The' : article;
972
- return `${art} ${adj} ${nounLower}`;
973
- });
974
- }
975
- const anyNounBeforeAdj = new RegExp(`\\b(an?|the|The)\\s+(${nounLower}|commerce|mission|poll|feast|benediction|intrigue|leadership|conspiracy|crusade|assault|brawl|battle|combat|gala|blessing|wander|quest|forum|convention|contract|software|struggle|confrontation|topic)\\s+(wicked|yielding|serene|lavish|unbreakable|sacred|kingly|fierce|mysterious|ancient|powerful|extraordinary|radiant|wise|overwhelming|nefarious|crucial|jaded|furious|pristine|formidable|wealthy|numinous|glorious|ominous|transcendent|captivating|tainted|uncommon|mighty|quiet|ruthless)\\b`, 'gi');
976
- description = description.replace(anyNounBeforeAdj, (_match, article, nounWord, adjWord) => {
977
- const art = article.toLowerCase() === 'the' ? 'The' : article;
978
- return `${art} ${adjWord} ${nounWord}`;
979
- });
980
- const brokenHyphen = /\b(\w+)-\s+\1-(\w+)\b/gi;
981
- description = description.replace(brokenHyphen, '$1-$2');
982
- const brokenHyphen2 = /\b(\w+)-\s+(\w+)-(\w+)\b/gi;
983
- description = description.replace(brokenHyphen2, (match, part1, part2, part3) => {
984
- const part1Lower = part1.toLowerCase();
985
- const part2Lower = part2.toLowerCase();
986
- if (part2Lower.startsWith(part1Lower) || part1Lower === part2Lower.substring(0, Math.min(part1Lower.length, part2Lower.length))) {
987
- return `${part1}-${part3}`;
988
- }
989
- return `${part1}-${part2}-${part3}`;
990
- });
991
- const brokenHyphen3 = /\b(\w+)-\s+(\w+)\b/gi;
992
- description = description.replace(brokenHyphen3, (match, part1, part2) => {
993
- const part1Lower = part1.toLowerCase();
994
- const part2Lower = part2.toLowerCase();
995
- if (part2Lower.startsWith(part1Lower) || part1Lower === part2Lower.substring(0, Math.min(part1Lower.length, 4))) {
996
- return `${part1}-${part2}`;
997
- }
998
- return match;
999
- });
1000
- const brokenHyphen4 = /\b(\w+)-\s+\1-(\w+)\b/gi;
1001
- description = description.replace(brokenHyphen4, '$1-$2');
1002
- const brokenHyphen5 = /\b(\w+)-\s+(\w+)-(\w+)\b/gi;
1003
- description = description.replace(brokenHyphen5, (match, part1, part2, part3) => {
1004
- if (part2.toLowerCase().startsWith(part1.toLowerCase())) {
1005
- return `${part1}-${part3}`;
1006
- }
1007
- return match;
1008
- });
1009
- const duplicateAfterArticle = /\b(an?|the)\s+(\w{4,})\s+\2\b/gi;
1010
- let prevDescription = '';
1011
- while (description !== prevDescription) {
1012
- prevDescription = description;
1013
- description = description.replace(duplicateAfterArticle, (match, article, word) => {
1014
- return `${article} ${word}`;
1015
- });
1016
- }
1017
- const consecutiveDuplicate = /\b(\w{4,})\s+\1\b/gi;
1018
- description = description.replace(consecutiveDuplicate, '$1');
1019
- const brokenPhrase = /\bthis\s+of\s+(\w+)/gi;
1020
- description = description.replace(brokenPhrase, (_match, word) => {
1021
- return `this ${nounLower} ${word}`;
1022
- });
1023
- return description;
1024
- }
1025
- /**
1026
- * Fix redundant phrases like "happening happens", "occurrence occurs"
1027
- */
1028
- fixRedundantPhrases(description, noun) {
1029
- const nounLower = noun.toLowerCase();
1030
- const nounRoot = nounLower.replace(/ing$|s$|ed$|tion$/, '');
1031
- const redundantPatterns = [
1032
- { pattern: new RegExp(`\\b${nounLower}\\s+happens\\b`, 'gi'), replacement: 'unfolds' },
1033
- { pattern: new RegExp(`\\b${nounLower}\\s+occurs\\b`, 'gi'), replacement: 'develops' },
1034
- { pattern: new RegExp(`\\b${nounLower}\\s+${nounRoot}s\\b`, 'gi'), replacement: 'unfolds' },
1035
- { pattern: new RegExp(`\\b${nounLower}\\s+${nounRoot}ing\\b`, 'gi'), replacement: 'develops' },
1036
- { pattern: /\bhappening\s+happens\b/gi, replacement: 'unfolds' },
1037
- { pattern: /\boccurrence\s+occurs\b/gi, replacement: 'develops' },
1038
- { pattern: /\bevent\s+happens\b/gi, replacement: 'unfolds' },
1039
- { pattern: /\bsituation\s+occurs\b/gi, replacement: 'develops' },
1040
- { pattern: /\b(\w+)\s+\1s\b/gi, replacement: 'unfolds' },
1041
- { pattern: /\b(\w+ing)\s+\1\b/gi, replacement: 'develops' }
1908
+ generateChoiceEffect(type, difficulty, index) {
1909
+ const effects = [
1910
+ { gold: this.chance.integer({ min: -10, max: 50 }) },
1911
+ { health: this.chance.integer({ min: -5, max: 10 }) },
1912
+ { experience: this.chance.integer({ min: 0, max: 20 }) },
1913
+ { reputation: this.chance.integer({ min: -2, max: 5 }) }
1042
1914
  ];
1043
- let fixed = description;
1044
- const replacements = ['unfolds', 'develops', 'emerges', 'arises', 'takes shape', 'manifests', 'comes to pass', 'takes place'];
1045
- for (const { pattern, replacement } of redundantPatterns) {
1046
- if (pattern.test(fixed)) {
1047
- fixed = fixed.replace(pattern, (match) => {
1048
- const words = match.split(/\s+/);
1049
- const selectedReplacement = words[0].toLowerCase() === 'happening' || words[0].toLowerCase() === 'occurrence'
1050
- ? replacement
1051
- : this.chance.pickone(replacements);
1052
- return words[0] + ' ' + selectedReplacement;
1053
- });
1054
- }
1055
- }
1056
- return fixed;
1915
+ return effects[index % effects.length] || {};
1057
1916
  }
1058
- /**
1059
- * Add contextual details to description based on player context
1060
- */
1061
- addContextualDetails(description, context, type, noun) {
1062
- const contextDetails = [];
1063
- const skipWords = new Set(['in', 'the', 'of', 'a', 'an', 'and', 'or', 'but', 'with', 'from', 'to', 'for']);
1064
- if (context.wealthTier === 'poor' && this.chance.bool({ likelihood: 30 })) {
1065
- const poorDetails = [
1066
- 'Your limited resources make this particularly challenging.',
1067
- 'Given your financial constraints, this situation requires careful consideration.',
1068
- 'Your modest means add an extra layer of difficulty to this encounter.',
1069
- 'With your current financial situation, this presents a significant challenge.'
1070
- ];
1071
- contextDetails.push(this.chance.pickone(poorDetails));
1072
- }
1073
- if (context.wealthTier === 'rich' && this.chance.bool({ likelihood: 20 })) {
1074
- const richDetails = [
1075
- 'Your wealth and influence may open doors that others cannot access.',
1076
- 'Your financial resources could provide unique advantages here.',
1077
- 'Given your substantial means, you have options that many would not.',
1078
- 'Your wealth might offer solutions that are unavailable to most.'
1079
- ];
1080
- contextDetails.push(this.chance.pickone(richDetails));
1081
- }
1082
- if (context.wealthTier === 'wealthy' && this.chance.bool({ likelihood: 15 })) {
1083
- contextDetails.push('Your comfortable financial position gives you some flexibility in how to approach this.');
1084
- }
1085
- if (context.lifeStage === 'elder' && this.chance.bool({ likelihood: 25 })) {
1086
- const elderDetails = [
1087
- 'Drawing on your extensive experience may prove valuable here.',
1088
- 'Your years of wisdom could be an asset in this situation.',
1089
- 'Your long life has taught you to recognize patterns others might miss.',
1090
- 'With your accumulated knowledge, you see nuances that younger eyes might overlook.'
1091
- ];
1092
- contextDetails.push(this.chance.pickone(elderDetails));
1093
- }
1094
- if (context.lifeStage === 'youth' && this.chance.bool({ likelihood: 25 })) {
1095
- const youthDetails = [
1096
- 'Your youthful energy and enthusiasm could be an advantage.',
1097
- 'Your fresh perspective might reveal solutions others have overlooked.',
1098
- 'Your inexperience could be a liability, but your adaptability might compensate.',
1099
- 'Your youth brings both risks and opportunities to this situation.'
1100
- ];
1101
- contextDetails.push(this.chance.pickone(youthDetails));
1102
- }
1103
- if (context.lifeStage === 'experienced' && this.chance.bool({ likelihood: 15 })) {
1104
- contextDetails.push('Your experience has prepared you for situations like this.');
1105
- }
1106
- if (context.careerPath && context.careerPath !== 'adventurer') {
1107
- const career = context.careerPath.toLowerCase();
1108
- if (this.chance.bool({ likelihood: 20 })) {
1109
- const careerDetails = {
1110
- warrior: ['Your training as a warrior has prepared you for this moment.', 'Your combat expertise gives you an edge in this situation.'],
1111
- mage: ['Your arcane knowledge might prove useful here.', 'Your magical training could provide unique insights.'],
1112
- rogue: ['Your skills in stealth and cunning may serve you well.', 'Your experience with deception could be valuable.'],
1113
- cleric: ['Your faith and divine connection might guide you.', 'Your healing abilities could prove crucial.'],
1114
- ranger: ['Your knowledge of the wilderness could be helpful.', 'Your tracking skills might reveal important details.'],
1115
- bard: ['Your charisma and social skills may help navigate this.', 'Your ability to read people could be an advantage.'],
1116
- paladin: ['Your sense of justice and honor will guide your response.', 'Your divine purpose might be tested here.'],
1117
- merchant: ['Your business acumen could turn this into an opportunity.', 'Your negotiation skills might prove valuable.'],
1118
- scholar: ['Your extensive knowledge might provide crucial insights.', 'Your research skills could uncover important information.'],
1119
- noble: ['Your social standing might influence how others perceive this.', 'Your connections and influence could be useful.']
1120
- };
1121
- if (careerDetails[career]) {
1122
- contextDetails.push(this.chance.pickone(careerDetails[career]));
1123
- }
1124
- else {
1125
- contextDetails.push(`Your background as ${this.getArticle(career)} ${career} might be relevant here.`);
1126
- }
1127
- }
1128
- }
1129
- if (type === 'COMBAT' && context.skillProfile.combat > 50) {
1130
- const combatDetails = [
1131
- 'Your combat expertise gives you an edge in this situation.',
1132
- 'Your training in battle has prepared you for this confrontation.',
1133
- 'Your martial skills could prove decisive here.',
1134
- 'Your experience in combat helps you assess the threat level.'
1135
- ];
1136
- contextDetails.push(this.chance.pickone(combatDetails));
1137
- }
1138
- if (type === 'SOCIAL' && context.skillProfile.social > 50) {
1139
- const socialDetails = [
1140
- 'Your social skills may help navigate this encounter.',
1141
- 'Your charisma and interpersonal abilities could be valuable.',
1142
- 'Your ability to read people might give you an advantage.',
1143
- 'Your social experience helps you understand the dynamics at play.'
1144
- ];
1145
- contextDetails.push(this.chance.pickone(socialDetails));
1146
- }
1147
- if (type === 'SUPERNATURAL' && context.skillProfile.magic > 50) {
1148
- const magicDetails = [
1149
- 'Your magical knowledge might help you understand what is happening.',
1150
- 'Your arcane training could provide insights into this phenomenon.',
1151
- 'Your connection to mystical forces might be relevant here.',
1152
- 'Your experience with the supernatural helps you recognize the signs.'
1153
- ];
1154
- contextDetails.push(this.chance.pickone(magicDetails));
1155
- }
1156
- if (type === 'TECHNOLOGICAL' && context.skillProfile.technical > 50) {
1157
- const techDetails = [
1158
- 'Your technical expertise might help you understand this system.',
1159
- 'Your knowledge of technology could prove useful here.',
1160
- 'Your experience with machines helps you assess the situation.',
1161
- 'Your technical skills might reveal solutions others would miss.'
1162
- ];
1163
- contextDetails.push(this.chance.pickone(techDetails));
1164
- }
1165
- if (context.level && context.level > 10) {
1166
- if (this.chance.bool({ likelihood: 15 })) {
1167
- contextDetails.push(`At level ${context.level}, you've faced similar challenges before.`);
1168
- }
1169
- }
1170
- if (context.level && context.level < 5) {
1171
- if (this.chance.bool({ likelihood: 20 })) {
1172
- contextDetails.push('Your relative inexperience makes this situation more daunting.');
1173
- }
1174
- }
1175
- if (context.location && typeof context.location === 'string') {
1176
- if (this.chance.bool({ likelihood: 15 })) {
1177
- const location = context.location.toLowerCase();
1178
- const nounLower = (noun || '').toLowerCase().trim();
1179
- const skipWords = new Set(['in', 'the', 'of', 'a', 'an', 'and', 'or', 'but', 'with', 'from', 'to', 'for', 'wondrous', 'luminous', 'pristine', 'ruthless', 'furious', 'hollow', 'unforgettable', 'oracular', 'titanic', 'xenophobic', 'beneficial', 'unfathomable', 'quiet', 'infinite', 'ancient', 'mighty', 'transcendent', 'glorious', 'ominous']);
1180
- if (nounLower && nounLower.length > 2 && nounLower !== 'of' && !skipWords.has(nounLower) && nounLower.length < 30 && !nounLower.endsWith('ing') && !nounLower.endsWith('ed')) {
1181
- contextDetails.push(`Here in ${location}, this ${nounLower} takes on added significance.`);
1182
- }
1183
- else {
1184
- contextDetails.push(`Here in ${location}, this situation takes on added significance.`);
1185
- }
1186
- }
1187
- }
1188
- if (context.season && typeof context.season === 'string') {
1189
- if (this.chance.bool({ likelihood: 10 })) {
1190
- const season = context.season.toLowerCase();
1191
- const seasonDetails = {
1192
- spring: ['The spring air seems to enhance the energy of this moment.', 'The renewal of spring adds a hopeful note to this situation.'],
1193
- summer: ['The summer heat makes this encounter feel more intense.', 'The long summer days seem to stretch this moment.'],
1194
- autumn: ['The autumn atmosphere adds a sense of change to this encounter.', 'The falling leaves seem to mark this moment.'],
1195
- fall: ['The autumn atmosphere adds a sense of change to this encounter.', 'The falling leaves seem to mark this moment.'],
1196
- winter: ['The winter chill seems to make this situation more stark.', 'The cold winter air adds urgency to this encounter.']
1197
- };
1198
- if (seasonDetails[season]) {
1199
- contextDetails.push(this.chance.pickone(seasonDetails[season]));
1200
- }
1201
- }
1202
- }
1203
- if (context.influenceTier === 'elite' && this.chance.bool({ likelihood: 15 })) {
1204
- contextDetails.push('Your elite status and connections might provide unique opportunities here.');
1205
- }
1206
- if (context.influenceTier === 'low' && this.chance.bool({ likelihood: 15 })) {
1207
- contextDetails.push('Your lack of influence means you must rely on your own skills and wits.');
1208
- }
1209
- if (context.health !== undefined && context.health < 30) {
1210
- if (this.chance.bool({ likelihood: 20 })) {
1211
- contextDetails.push('Your weakened state makes this situation more dangerous.');
1212
- }
1213
- }
1214
- if (context.health !== undefined && context.health > 80) {
1215
- if (this.chance.bool({ likelihood: 10 })) {
1216
- contextDetails.push('Your excellent health gives you confidence in facing this challenge.');
1217
- }
1218
- }
1219
- if (context.stress !== undefined && context.stress > 70) {
1220
- if (this.chance.bool({ likelihood: 20 })) {
1221
- contextDetails.push('Your high stress level makes it harder to think clearly about this situation.');
1222
- }
1223
- }
1224
- if (context.relationships && typeof context.relationships === 'object') {
1225
- const relationshipCount = Object.keys(context.relationships).length;
1226
- if (relationshipCount > 5 && this.chance.bool({ likelihood: 10 })) {
1227
- contextDetails.push('Your network of relationships might provide support or complications.');
1228
- }
1229
- }
1230
- if (contextDetails.length > 0) {
1231
- const selectedDetails = this.chance.pickset(contextDetails, this.chance.integer({ min: 1, max: Math.min(2, contextDetails.length) }));
1232
- description += ' ' + selectedDetails.join(' ');
1233
- }
1234
- return description;
1235
- }
1236
- /**
1237
- * Validate sentence grammar and completeness
1238
- */
1239
- validateFinalDescription(description, adjective, noun) {
1240
- const descLower = description.toLowerCase();
1241
- const adjLower = adjective.toLowerCase();
1242
- const nounLower = noun.toLowerCase();
1243
- const wrongOrderPattern = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+${adjLower}\\b`, 'i');
1244
- if (wrongOrderPattern.test(description)) {
1245
- return { valid: false, reason: 'noun before adjective' };
1246
- }
1247
- const wrongOrderPattern2 = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+\\w+\\s+${adjLower}\\b`, 'i');
1248
- if (wrongOrderPattern2.test(description)) {
1249
- return { valid: false, reason: 'noun before adjective with word between' };
1250
- }
1251
- const wrongOrderPattern3 = new RegExp(`\\bThe\\s+${nounLower}\\s+${adjLower}\\b`, 'i');
1252
- if (wrongOrderPattern3.test(description)) {
1253
- return { valid: false, reason: 'The noun adjective - wrong order' };
1254
- }
1255
- const commonAdjectives = ['sacred', 'kingly', 'fierce', 'mysterious', 'ancient', 'powerful', 'extraordinary', 'radiant', 'wise', 'overwhelming', 'nefarious', 'crucial', 'awe-inspiring', 'awe', 'inspiring', 'wicked', 'yielding', 'serene', 'lavish', 'unbreakable'];
1256
- for (const adj of commonAdjectives) {
1257
- const wrongOrderPattern = new RegExp(`\\b(an?|the)\\s+\\w{4,}\\s+${adj}\\b`, 'i');
1258
- if (wrongOrderPattern.test(description) && !description.toLowerCase().match(new RegExp(`\\b(an?|the)\\s+${adj}\\s+\\w+\\b`, 'i'))) {
1259
- return { valid: false, reason: `adjective ${adj} after noun` };
1260
- }
1261
- }
1262
- const duplicatePattern = new RegExp(`\\b${nounLower}\\s+\\w+\\s+${nounLower}\\b`, 'i');
1263
- if (duplicatePattern.test(description)) {
1264
- return { valid: false, reason: 'duplicate noun' };
1265
- }
1266
- const duplicatePattern2 = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+\\w+\\s+${nounLower}\\b`, 'i');
1267
- if (duplicatePattern2.test(description)) {
1268
- return { valid: false, reason: 'duplicate noun with article' };
1269
- }
1270
- const duplicatePattern3 = new RegExp(`\\b(an?|the)\\s+${nounLower}\\s+${adjLower}\\s+${nounLower}\\b`, 'i');
1271
- if (duplicatePattern3.test(description)) {
1272
- return { valid: false, reason: 'duplicate noun with adjective between' };
1273
- }
1274
- const brokenHyphenPattern = /\b\w+-\s+\w+/i;
1275
- if (brokenHyphenPattern.test(description)) {
1276
- return { valid: false, reason: 'broken hyphenated word' };
1277
- }
1278
- const brokenHyphenPattern2 = /\b(\w+)-\s+\1-/i;
1279
- if (brokenHyphenPattern2.test(description)) {
1280
- return { valid: false, reason: 'broken hyphenated word with duplicate' };
1281
- }
1282
- const brokenPhrasePattern = /\bthis\s+of\s+\w+/i;
1283
- if (brokenPhrasePattern.test(description)) {
1284
- return { valid: false, reason: 'broken phrase: this of' };
1285
- }
1286
- const wrongArticlePattern = /\b(an\s+[bcdfghjklmnpqrstvwxyz][a-z]{3,}|a\s+[aeiou][a-z]{3,})/i;
1287
- if (wrongArticlePattern.test(description)) {
1288
- return { valid: false, reason: 'wrong article' };
1289
- }
1290
- return { valid: true };
1291
- }
1292
- validateSentence(sentence) {
1293
- if (!sentence || sentence.trim().length === 0) {
1294
- return false;
1295
- }
1296
- const trimmed = sentence.trim();
1297
- if (trimmed.length < 10) {
1298
- return false;
1299
- }
1300
- if (!trimmed.match(/[.!?]$/)) {
1301
- return false;
1302
- }
1303
- if (natural && natural.SentenceTokenizer) {
1304
- try {
1305
- const tokenizer = new natural.SentenceTokenizer();
1306
- const naturalSentences = tokenizer.tokenize(trimmed);
1307
- if (naturalSentences.length === 0) {
1308
- return false;
1309
- }
1310
- for (const sent of naturalSentences) {
1311
- const words = sent.trim().split(/\s+/);
1312
- if (words.length < 3) {
1313
- return false;
1314
- }
1315
- if (natural && natural.PorterStemmer) {
1316
- try {
1317
- const stemmer = natural.PorterStemmer;
1318
- const hasVerb = words.some((word) => {
1319
- const wordLower = word.toLowerCase().replace(/[.,!?;:]/g, '');
1320
- if (wordLower.length < 2)
1321
- return false;
1322
- const verbEndings = ['ed', 'ing', 'es', 's'];
1323
- const hasVerbEnding = verbEndings.some(ending => wordLower.endsWith(ending));
1324
- const isCommonVerb = ['is', 'are', 'was', 'were', 'has', 'have', 'had', 'do', 'does', 'did', 'will', 'would', 'can', 'could', 'should', 'may', 'might', 'must'].includes(wordLower);
1325
- if (hasVerbEnding || isCommonVerb) {
1326
- try {
1327
- const stemmed = stemmer.stem(wordLower);
1328
- return stemmed !== wordLower || hasVerbEnding || isCommonVerb;
1329
- }
1330
- catch (e) {
1331
- return hasVerbEnding || isCommonVerb;
1332
- }
1333
- }
1334
- return false;
1335
- });
1336
- if (!hasVerb && words.length < 5) {
1337
- return false;
1338
- }
1339
- }
1340
- catch (e) {
1341
- }
1342
- }
1343
- }
1344
- }
1345
- catch (e) {
1346
- }
1347
- }
1348
- if (nlp) {
1349
- try {
1350
- const doc = nlp(trimmed);
1351
- const sentences = doc.sentences();
1352
- if (sentences.length === 0) {
1353
- return false;
1354
- }
1355
- for (let i = 0; i < sentences.length; i++) {
1356
- const sent = sentences.eq(i);
1357
- const hasSubject = sent.match('#Noun').length > 0 || sent.match('#Pronoun').length > 0;
1358
- const hasVerb = sent.match('#Verb').length > 0;
1359
- if (!hasSubject || !hasVerb) {
1360
- return false;
1361
- }
1362
- }
1363
- }
1364
- catch (e) {
1365
- }
1366
- }
1367
- const words = trimmed.split(/\s+/).map(w => w.toLowerCase().replace(/[.,!?;:]/g, ''));
1368
- const seenWords = new Map();
1369
- for (let i = 0; i < words.length; i++) {
1370
- const word = words[i];
1371
- if (word.length > 3) {
1372
- const count = seenWords.get(word) || 0;
1373
- if (count > 0) {
1374
- return false;
1375
- }
1376
- seenWords.set(word, count + 1);
1377
- }
1378
- }
1379
- const duplicateWordPatterns = [
1380
- /\b(\w{4,})\s+\1\b/i,
1381
- /\b(\w{4,})\s+\w+\s+\1\b/i,
1382
- /\b\w+\s+(\w{4,})\s+\1\b/i
1383
- ];
1384
- for (const pattern of duplicateWordPatterns) {
1385
- if (pattern.test(trimmed)) {
1386
- return false;
1387
- }
1388
- }
1389
- const incorrectWordOrderPattern = /\b(an?|the)\s+(\w{4,})\s+(extraordinary|mysterious|unexpected|intriguing|significant|notable|strange|unusual|powerful|dangerous|ancient|mystical|magical|dark|bright|large|small|great|huge|tiny|massive|enormous|immense|vast|colossal|gigantic|titanic|mighty|fierce|savage|brutal|vicious|deadly|lethal|fatal|mortal|immortal|eternal|infinite|endless|boundless|limitless|unlimited|countless|numerous|plentiful|abundant|copious|profuse|excessive|extreme|intense|severe|harsh|rigorous|strict|stern|austere|ascetic|spartan|frugal|parsimonious|stingy|miserly|avaricious|greedy|covetous|rapacious|voracious|insatiable|unquenchable|unappeasable|inexorable|relentless|unrelenting|unremitting|incessant|ceaseless|continuous|constant|perpetual|everlasting|unending|interminable|protracted|prolonged|extended|lengthy|long|short|brief|concise|succinct|terse|laconic|pithy|compact|condensed|compressed|abbreviated|abridged|curtailed|truncated|wise|radiant)\b/i;
1390
- if (incorrectWordOrderPattern.test(trimmed)) {
1391
- return false;
1392
- }
1393
- const verbLikeInWrongPlace = /\b(an?|the)\s+\w+\s+\w+\s+(revealed|awakened|unleashed|rising|falling|directs|seeking|demanding|requiring|blocking|offering|creating|presenting)\s+/i;
1394
- if (verbLikeInWrongPlace.test(trimmed)) {
1395
- return false;
1396
- }
1397
- const nounBeforeAdjective = /\b(an?|the)\s+(\w{4,})\s+(radiant|wise|extraordinary|mysterious|unexpected|intriguing|significant|notable|strange|unusual|powerful|dangerous|ancient|mystical|magical|dark|bright|large|small|great|huge|tiny|massive|enormous|immense|vast|colossal|gigantic|titanic|mighty|fierce|savage|brutal|vicious|deadly|lethal|fatal|mortal|immortal|eternal|infinite|endless|boundless|limitless|unlimited|countless|numerous|plentiful|abundant|copious|profuse|excessive|extreme|intense|severe|harsh|rigorous|strict|stern|austere|ascetic|spartan|frugal|parsimonious|stingy|miserly|avaricious|greedy|covetous|rapacious|voracious|insatiable|unquenchable|unappeasable|inexorable|relentless|unrelenting|unremitting|incessant|ceaseless|continuous|constant|perpetual|everlasting|unending|interminable|protracted|prolonged|extended|lengthy|long|short|brief|concise|succinct|terse|laconic|pithy|compact|condensed|compressed|abbreviated|abridged|curtailed|truncated|sacred|kingly|nefarious|crucial|awe-inspiring|awe|inspiring)\s+\w+/i;
1398
- if (nounBeforeAdjective.test(trimmed)) {
1399
- return false;
1400
- }
1401
- const brokenHyphen = /\b\w+-\s+\w+/i;
1402
- if (brokenHyphen.test(trimmed)) {
1403
- return false;
1404
- }
1405
- const brokenPhrase = /\bthis\s+of\s+\w+/i;
1406
- if (brokenPhrase.test(trimmed)) {
1407
- return false;
1408
- }
1409
- const redundantBeforeYou = /\b\w+\s+before\s+you\s+before\s+you\b/i;
1410
- if (redundantBeforeYou.test(trimmed)) {
1411
- return false;
1412
- }
1413
- const redundantPhrases = [
1414
- /\bhappening\s+happens\b/i,
1415
- /\boccurrence\s+occurs\b/i,
1416
- /\bevent\s+happens\b/i,
1417
- /\bsituation\s+occurs\b/i,
1418
- /\b(\w+)\s+\1s\b/i,
1419
- /\b(\w+ing)\s+\1\b/i
1420
- ];
1421
- for (const pattern of redundantPhrases) {
1422
- if (pattern.test(trimmed)) {
1423
- return false;
1424
- }
1425
- }
1426
- const incompletePatterns = [
1427
- /that\s+(handles|reveals|progresses|develops|occurs|happens|unfolds|begins|starts|ends|finishes)\.$/i,
1428
- /involving\s+\w+\s+(handles|reveals|progresses|develops|occurs|happens|unfolds|begins|starts|ends|finishes)\.$/i,
1429
- /with\s+(cursed|blessed|ancient|new|old|dark|light)\s+(implications|consequences|results)\.$/i,
1430
- /\w+\s+(that|which)\s+(handles|reveals|progresses|develops|occurs|happens|unfolds|begins|starts|ends|finishes)\.$/i
1431
- ];
1432
- for (const pattern of incompletePatterns) {
1433
- if (pattern.test(trimmed)) {
1434
- return false;
1435
- }
1436
- }
1437
- const danglingVerbPattern = /(handles|reveals|progresses|develops|occurs|happens|unfolds|begins|starts|ends|finishes)\.$/i;
1438
- if (danglingVerbPattern.test(trimmed)) {
1439
- const lastWords = trimmed.split(/\s+/).slice(-3).map(w => w.toLowerCase());
1440
- const hasObject = lastWords.some(w => !['that', 'which', 'who', 'what', 'where', 'when', 'why', 'how'].includes(w) &&
1441
- w.length > 2);
1442
- if (!hasObject) {
1443
- return false;
1444
- }
1445
- }
1446
- let sentences = [];
1447
- if (natural && natural.SentenceTokenizer) {
1448
- try {
1449
- const tokenizer = new natural.SentenceTokenizer();
1450
- const tokenized = tokenizer.tokenize(trimmed);
1451
- if (tokenized && tokenized.length > 0) {
1452
- sentences = tokenized;
1453
- }
1454
- else {
1455
- sentences = trimmed.split(/[.!?]+/).filter(s => s.trim().length > 0);
1456
- }
1457
- }
1458
- catch (e) {
1459
- sentences = trimmed.split(/[.!?]+/).filter(s => s.trim().length > 0);
1460
- }
1461
- }
1462
- else {
1463
- sentences = trimmed.split(/[.!?]+/).filter(s => s.trim().length > 0);
1464
- }
1465
- for (const sent of sentences) {
1466
- const words = sent.trim().split(/\s+/);
1467
- if (words.length < 3) {
1468
- return false;
1469
- }
1470
- const commonVerbs = /\b(is|are|was|were|has|have|had|do|does|did|will|would|can|could|should|may|might|must|be|been|being|become|becomes|became|get|gets|got|go|goes|went|come|comes|came|see|sees|saw|know|knows|knew|think|thinks|thought|take|takes|took|make|makes|made|give|gives|gave|find|finds|found|tell|tells|told|ask|asks|asked|work|works|worked|call|calls|called|try|tries|tried|use|uses|used|need|needs|needed|want|wants|wanted|feel|feels|felt|seem|seems|seemed|leave|leaves|left|put|puts|mean|means|meant|keep|keeps|kept|let|lets|begin|begins|began|begun|help|helps|helped|show|shows|showed|shown|hear|hears|heard|play|plays|played|run|runs|ran|move|moves|moved|live|lives|lived|believe|believes|believed|bring|brings|brought|happen|happens|happened|write|writes|wrote|written|sit|sits|sat|stand|stands|stood|lose|loses|lost|pay|pays|paid|meet|meets|met|include|includes|included|continue|continues|continued|set|sets|learn|learns|learned|change|changes|changed|lead|leads|led|understand|understands|understood|watch|watches|watched|follow|follows|followed|stop|stops|stopped|create|creates|created|speak|speaks|spoke|spoken|read|reads|spend|spends|spent|grow|grows|grew|grown|open|opens|opened|walk|walks|walked|win|wins|won|teach|teaches|taught|offer|offers|offered|remember|remembers|remembered|consider|considers|considered|appear|appears|appeared|buy|buys|bought|serve|serves|served|die|dies|died|send|sends|sent|build|builds|built|stay|stays|stayed|fall|falls|fell|fallen|cut|cuts|reach|reaches|reached|kill|kills|killed|raise|raises|raised|pass|passes|passed|sell|sells|sold|decide|decides|decided|return|returns|returned|explain|explains|explained|join|joins|joined|expect|expects|expected|suggest|suggests|suggested|allow|allows|allowed|add|adds|added|produce|produces|produced|ensure|ensures|ensured|refer|refers|referred|discuss|discusses|discussed|agree|agrees|agreed|improve|improves|improved|reduce|reduces|reduced|establish|establishes|established|claim|claims|claimed|require|requires|required|indicate|indicates|indicated|design|designs|designed|suppose|supposes|supposed|maintain|maintains|maintained|determine|determines|determined|prepare|prepares|prepared|achieve|achieves|achieved|seek|seeks|sought|obtain|obtains|obtained|occur|occurs|occurred|involve|involves|involved|represent|represents|represented|publish|publishes|published|recognize|recognizes|recognized|describe|describes|described|compare|compares|compared|identify|identifies|identified|choose|chooses|chose|chosen|develop|develops|developed|report|reports|reported|result|results|resulted|threatens|challenges|confronts|blocks|menaces|assaults|engages|attacks|approaches|greets|welcomes|invites|requests|offers|proposes|presents|appears|emerges|reveals|unfolds|awaits|suggests|provides|delivers|becomes|puzzles|confuses|bewilders|intrigues|fascinates|captivates|demands|manifests|materializes|transforms|progresses|advances|evolves|activates|functions|operates|performs|executes|processes|glows|shimmers|pulses|radiates|emanates|flows|surges|channels|weaves|manipulates|controls|directs|shapes|forms)\b/i;
1471
- const hasVerb = commonVerbs.test(sent);
1472
- if (!hasVerb && words.length < 5) {
1473
- return false;
1474
- }
1475
- if (hasVerb) {
1476
- const subjectVerbAgreementPatterns = [
1477
- /\b(they|these|those|we|you)\s+(is|was|has|does)\b/i,
1478
- /\b(he|she|it|this|that|one)\s+(are|were|have|do)\b/i,
1479
- /\b(things|items|events|situations|people|characters)\s+(is|was|has|does)\b/i,
1480
- /\b(thing|item|event|situation|person|character)\s+(are|were|have|do)\b/i
1481
- ];
1482
- for (const pattern of subjectVerbAgreementPatterns) {
1483
- if (pattern.test(sent)) {
1484
- return false;
1485
- }
1486
- }
1487
- }
1488
- }
1489
- return true;
1490
- }
1491
- /**
1492
- * Validate coherence between title and description
1493
- */
1494
- validateCoherence(title, description, type) {
1495
- const titleWords = title.toLowerCase().split(/\s+/);
1496
- const descriptionLower = description.toLowerCase();
1497
- const meaningfulTitleWords = titleWords.filter(w => w.length > 3);
1498
- if (meaningfulTitleWords.length > 0) {
1499
- const hasCommonWord = meaningfulTitleWords.some(word => descriptionLower.includes(word));
1500
- if (!hasCommonWord && meaningfulTitleWords.length > 1) {
1501
- return false;
1502
- }
1503
- }
1504
- const genericPhrases = ['something happened', 'an event occurs', 'you find yourself'];
1505
- const isTooGeneric = genericPhrases.some(phrase => descriptionLower.includes(phrase));
1506
- if (isTooGeneric) {
1507
- return false;
1508
- }
1509
- if (description.length < 20) {
1510
- return false;
1511
- }
1512
- return true;
1513
- }
1514
- /**
1515
- * Generate tags for the event
1516
- */
1517
1917
  generateTags(type, context) {
1518
1918
  const tags = [type.toLowerCase()];
1519
- if (context.wealthTier !== 'moderate') {
1919
+ if (context.wealthTier && context.wealthTier !== 'moderate') {
1520
1920
  tags.push(context.wealthTier);
1521
1921
  }
1522
- if (context.lifeStage !== 'adult') {
1922
+ if (context.lifeStage && context.lifeStage !== 'adult') {
1523
1923
  tags.push(context.lifeStage);
1524
1924
  }
1525
1925
  if (context.careerPath && context.careerPath !== 'adventurer') {
1526
1926
  tags.push(context.careerPath.toLowerCase());
1527
1927
  }
1528
- const thematicTags = ['adventure', 'danger', 'opportunity', 'intrigue', 'discovery'];
1529
- if (this.chance.bool({ likelihood: 40 })) {
1530
- tags.push(this.chance.pickone(thematicTags));
1531
- }
1532
1928
  return tags;
1533
1929
  }
1534
- /**
1535
- * Update generator with new training data
1536
- */
1537
- updateTrainingData(texts) {
1538
- this.markovEngine.addData(texts);
1539
- }
1540
- /**
1541
- * Get generator statistics
1542
- */
1543
- getStats() {
1544
- return {
1545
- markovStats: this.markovEngine.getStats(),
1546
- contextAnalysisEnabled: true,
1547
- options: this.options
1548
- };
1549
- }
1550
1930
  }
1551
1931
  exports.GeneratorCore = GeneratorCore;
1552
1932
  //# sourceMappingURL=GeneratorCore.js.map