idlerpg.sh 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +171 -0
- package/dist/affix/AffixRegistry.d.ts +68 -0
- package/dist/affix/AffixRegistry.d.ts.map +1 -0
- package/dist/affix/AffixRegistry.js +245 -0
- package/dist/affix/AffixRegistry.js.map +1 -0
- package/dist/affix/PluginLoader.d.ts +66 -0
- package/dist/affix/PluginLoader.d.ts.map +1 -0
- package/dist/affix/PluginLoader.js +321 -0
- package/dist/affix/PluginLoader.js.map +1 -0
- package/dist/affix/builtin.d.ts +6 -0
- package/dist/affix/builtin.d.ts.map +1 -0
- package/dist/affix/builtin.js +311 -0
- package/dist/affix/builtin.js.map +1 -0
- package/dist/affix/index.d.ts +8 -0
- package/dist/affix/index.d.ts.map +1 -0
- package/dist/affix/index.js +11 -0
- package/dist/affix/index.js.map +1 -0
- package/dist/affix/types.d.ts +152 -0
- package/dist/affix/types.d.ts.map +1 -0
- package/dist/affix/types.js +8 -0
- package/dist/affix/types.js.map +1 -0
- package/dist/ai/PlayKitClient.d.ts +208 -0
- package/dist/ai/PlayKitClient.d.ts.map +1 -0
- package/dist/ai/PlayKitClient.js +721 -0
- package/dist/ai/PlayKitClient.js.map +1 -0
- package/dist/ai/index.d.ts +5 -0
- package/dist/ai/index.d.ts.map +1 -0
- package/dist/ai/index.js +8 -0
- package/dist/ai/index.js.map +1 -0
- package/dist/app/App.d.ts +85 -0
- package/dist/app/App.d.ts.map +1 -0
- package/dist/app/App.js +296 -0
- package/dist/app/App.js.map +1 -0
- package/dist/app/EventBus.d.ts +222 -0
- package/dist/app/EventBus.d.ts.map +1 -0
- package/dist/app/EventBus.js +88 -0
- package/dist/app/EventBus.js.map +1 -0
- package/dist/app/Keybind.d.ts +83 -0
- package/dist/app/Keybind.d.ts.map +1 -0
- package/dist/app/Keybind.js +184 -0
- package/dist/app/Keybind.js.map +1 -0
- package/dist/app/Router.d.ts +123 -0
- package/dist/app/Router.d.ts.map +1 -0
- package/dist/app/Router.js +142 -0
- package/dist/app/Router.js.map +1 -0
- package/dist/app/ScreenManager.d.ts +97 -0
- package/dist/app/ScreenManager.d.ts.map +1 -0
- package/dist/app/ScreenManager.js +216 -0
- package/dist/app/ScreenManager.js.map +1 -0
- package/dist/app/index.d.ts +14 -0
- package/dist/app/index.d.ts.map +1 -0
- package/dist/app/index.js +19 -0
- package/dist/app/index.js.map +1 -0
- package/dist/app/screens/BaseScreen.d.ts +101 -0
- package/dist/app/screens/BaseScreen.d.ts.map +1 -0
- package/dist/app/screens/BaseScreen.js +132 -0
- package/dist/app/screens/BaseScreen.js.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
- package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
- package/dist/app/screens/CharacterCreationScreen.js +467 -0
- package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
- package/dist/app/screens/CombatScreen.d.ts +30 -0
- package/dist/app/screens/CombatScreen.d.ts.map +1 -0
- package/dist/app/screens/CombatScreen.js +309 -0
- package/dist/app/screens/CombatScreen.js.map +1 -0
- package/dist/app/screens/DialogScreen.d.ts +29 -0
- package/dist/app/screens/DialogScreen.d.ts.map +1 -0
- package/dist/app/screens/DialogScreen.js +295 -0
- package/dist/app/screens/DialogScreen.js.map +1 -0
- package/dist/app/screens/ExploreScreen.d.ts +50 -0
- package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/app/screens/ExploreScreen.js +308 -0
- package/dist/app/screens/ExploreScreen.js.map +1 -0
- package/dist/app/screens/HelpScreen.d.ts +12 -0
- package/dist/app/screens/HelpScreen.d.ts.map +1 -0
- package/dist/app/screens/HelpScreen.js +155 -0
- package/dist/app/screens/HelpScreen.js.map +1 -0
- package/dist/app/screens/InventoryScreen.d.ts +27 -0
- package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
- package/dist/app/screens/InventoryScreen.js +326 -0
- package/dist/app/screens/InventoryScreen.js.map +1 -0
- package/dist/app/screens/PrologueScreen.d.ts +24 -0
- package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
- package/dist/app/screens/PrologueScreen.js +176 -0
- package/dist/app/screens/PrologueScreen.js.map +1 -0
- package/dist/app/screens/TitleScreen.d.ts +42 -0
- package/dist/app/screens/TitleScreen.d.ts.map +1 -0
- package/dist/app/screens/TitleScreen.js +380 -0
- package/dist/app/screens/TitleScreen.js.map +1 -0
- package/dist/app/screens/TravelScreen.d.ts +22 -0
- package/dist/app/screens/TravelScreen.d.ts.map +1 -0
- package/dist/app/screens/TravelScreen.js +122 -0
- package/dist/app/screens/TravelScreen.js.map +1 -0
- package/dist/app/screens/index.d.ts +14 -0
- package/dist/app/screens/index.d.ts.map +1 -0
- package/dist/app/screens/index.js +17 -0
- package/dist/app/screens/index.js.map +1 -0
- package/dist/commands/CommandRegistry.d.ts +91 -0
- package/dist/commands/CommandRegistry.d.ts.map +1 -0
- package/dist/commands/CommandRegistry.js +159 -0
- package/dist/commands/CommandRegistry.js.map +1 -0
- package/dist/commands/index.d.ts +7 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +10 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/core/Actor.d.ts +103 -0
- package/dist/core/Actor.d.ts.map +1 -0
- package/dist/core/Actor.js +409 -0
- package/dist/core/Actor.js.map +1 -0
- package/dist/core/Combat.d.ts +37 -0
- package/dist/core/Combat.d.ts.map +1 -0
- package/dist/core/Combat.js +294 -0
- package/dist/core/Combat.js.map +1 -0
- package/dist/core/DungeonRunner.d.ts +169 -0
- package/dist/core/DungeonRunner.d.ts.map +1 -0
- package/dist/core/DungeonRunner.js +627 -0
- package/dist/core/DungeonRunner.js.map +1 -0
- package/dist/core/Game.d.ts +133 -0
- package/dist/core/Game.d.ts.map +1 -0
- package/dist/core/Game.js +644 -0
- package/dist/core/Game.js.map +1 -0
- package/dist/core/IdleCombat.d.ts +61 -0
- package/dist/core/IdleCombat.d.ts.map +1 -0
- package/dist/core/IdleCombat.js +461 -0
- package/dist/core/IdleCombat.js.map +1 -0
- package/dist/core/IdleGameManager.d.ts +198 -0
- package/dist/core/IdleGameManager.d.ts.map +1 -0
- package/dist/core/IdleGameManager.js +688 -0
- package/dist/core/IdleGameManager.js.map +1 -0
- package/dist/core/IdleSaveManager.d.ts +109 -0
- package/dist/core/IdleSaveManager.d.ts.map +1 -0
- package/dist/core/IdleSaveManager.js +296 -0
- package/dist/core/IdleSaveManager.js.map +1 -0
- package/dist/core/NewGameFlowManager.d.ts +64 -0
- package/dist/core/NewGameFlowManager.d.ts.map +1 -0
- package/dist/core/NewGameFlowManager.js +153 -0
- package/dist/core/NewGameFlowManager.js.map +1 -0
- package/dist/core/Player.d.ts +65 -0
- package/dist/core/Player.d.ts.map +1 -0
- package/dist/core/Player.js +261 -0
- package/dist/core/Player.js.map +1 -0
- package/dist/core/RoomHandlers.d.ts +75 -0
- package/dist/core/RoomHandlers.d.ts.map +1 -0
- package/dist/core/RoomHandlers.js +383 -0
- package/dist/core/RoomHandlers.js.map +1 -0
- package/dist/core/SaveManager.d.ts +84 -0
- package/dist/core/SaveManager.d.ts.map +1 -0
- package/dist/core/SaveManager.js +281 -0
- package/dist/core/SaveManager.js.map +1 -0
- package/dist/core/SaveMigration.d.ts +69 -0
- package/dist/core/SaveMigration.d.ts.map +1 -0
- package/dist/core/SaveMigration.js +408 -0
- package/dist/core/SaveMigration.js.map +1 -0
- package/dist/core/StateAdapter.d.ts +79 -0
- package/dist/core/StateAdapter.d.ts.map +1 -0
- package/dist/core/StateAdapter.js +397 -0
- package/dist/core/StateAdapter.js.map +1 -0
- package/dist/core/Team.d.ts +145 -0
- package/dist/core/Team.d.ts.map +1 -0
- package/dist/core/Team.js +371 -0
- package/dist/core/Team.js.map +1 -0
- package/dist/core/TeamCombat.d.ts +88 -0
- package/dist/core/TeamCombat.d.ts.map +1 -0
- package/dist/core/TeamCombat.js +405 -0
- package/dist/core/TeamCombat.js.map +1 -0
- package/dist/core/TeamDungeonRunner.d.ts +186 -0
- package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
- package/dist/core/TeamDungeonRunner.js +758 -0
- package/dist/core/TeamDungeonRunner.js.map +1 -0
- package/dist/core/TimeManager.d.ts +114 -0
- package/dist/core/TimeManager.d.ts.map +1 -0
- package/dist/core/TimeManager.js +318 -0
- package/dist/core/TimeManager.js.map +1 -0
- package/dist/core/index.d.ts +9 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +12 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/timeConstants.d.ts +135 -0
- package/dist/core/timeConstants.d.ts.map +1 -0
- package/dist/core/timeConstants.js +157 -0
- package/dist/core/timeConstants.js.map +1 -0
- package/dist/core/types.d.ts +780 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +16 -0
- package/dist/core/types.js.map +1 -0
- package/dist/data/continents/index.d.ts +163 -0
- package/dist/data/continents/index.d.ts.map +1 -0
- package/dist/data/continents/index.js +31 -0
- package/dist/data/continents/index.js.map +1 -0
- package/dist/data/continents/verdantia.d.ts +294 -0
- package/dist/data/continents/verdantia.d.ts.map +1 -0
- package/dist/data/continents/verdantia.js +327 -0
- package/dist/data/continents/verdantia.js.map +1 -0
- package/dist/handlers/DialogHandler.d.ts +95 -0
- package/dist/handlers/DialogHandler.d.ts.map +1 -0
- package/dist/handlers/DialogHandler.js +450 -0
- package/dist/handlers/DialogHandler.js.map +1 -0
- package/dist/handlers/SaveLoadHandler.d.ts +60 -0
- package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
- package/dist/handlers/SaveLoadHandler.js +187 -0
- package/dist/handlers/SaveLoadHandler.js.map +1 -0
- package/dist/handlers/TitleScreenHandler.d.ts +43 -0
- package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
- package/dist/handlers/TitleScreenHandler.js +508 -0
- package/dist/handlers/TitleScreenHandler.js.map +1 -0
- package/dist/handlers/WorkshopHandler.d.ts +75 -0
- package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
- package/dist/handlers/WorkshopHandler.js +401 -0
- package/dist/handlers/WorkshopHandler.js.map +1 -0
- package/dist/handlers/index.d.ts +12 -0
- package/dist/handlers/index.d.ts.map +1 -0
- package/dist/handlers/index.js +14 -0
- package/dist/handlers/index.js.map +1 -0
- package/dist/handlers/types.d.ts +34 -0
- package/dist/handlers/types.d.ts.map +1 -0
- package/dist/handlers/types.js +8 -0
- package/dist/handlers/types.js.map +1 -0
- package/dist/i18n/en.d.ts +3 -0
- package/dist/i18n/en.d.ts.map +1 -0
- package/dist/i18n/en.js +130 -0
- package/dist/i18n/en.js.map +1 -0
- package/dist/i18n/index.d.ts +40 -0
- package/dist/i18n/index.d.ts.map +1 -0
- package/dist/i18n/index.js +105 -0
- package/dist/i18n/index.js.map +1 -0
- package/dist/i18n/types.d.ts +133 -0
- package/dist/i18n/types.d.ts.map +1 -0
- package/dist/i18n/types.js +8 -0
- package/dist/i18n/types.js.map +1 -0
- package/dist/i18n/zh.d.ts +3 -0
- package/dist/i18n/zh.d.ts.map +1 -0
- package/dist/i18n/zh.js +130 -0
- package/dist/i18n/zh.js.map +1 -0
- package/dist/instrument.d.ts +8 -0
- package/dist/instrument.d.ts.map +1 -0
- package/dist/instrument.js +33 -0
- package/dist/instrument.js.map +1 -0
- package/dist/main-new.d.ts +12 -0
- package/dist/main-new.d.ts.map +1 -0
- package/dist/main-new.js +32 -0
- package/dist/main-new.js.map +1 -0
- package/dist/main.d.ts +7 -0
- package/dist/main.d.ts.map +1 -0
- package/dist/main.js +2816 -0
- package/dist/main.js.map +1 -0
- package/dist/map/ContinentManager.d.ts +88 -0
- package/dist/map/ContinentManager.d.ts.map +1 -0
- package/dist/map/ContinentManager.js +241 -0
- package/dist/map/ContinentManager.js.map +1 -0
- package/dist/map/DungeonGenerator.d.ts +32 -0
- package/dist/map/DungeonGenerator.d.ts.map +1 -0
- package/dist/map/DungeonGenerator.js +615 -0
- package/dist/map/DungeonGenerator.js.map +1 -0
- package/dist/map/MapGenerator.d.ts +27 -0
- package/dist/map/MapGenerator.d.ts.map +1 -0
- package/dist/map/MapGenerator.js +485 -0
- package/dist/map/MapGenerator.js.map +1 -0
- package/dist/map/index.d.ts +5 -0
- package/dist/map/index.d.ts.map +1 -0
- package/dist/map/index.js +8 -0
- package/dist/map/index.js.map +1 -0
- package/dist/npc/NPCGenerator.d.ts +68 -0
- package/dist/npc/NPCGenerator.d.ts.map +1 -0
- package/dist/npc/NPCGenerator.js +468 -0
- package/dist/npc/NPCGenerator.js.map +1 -0
- package/dist/npc/NPCManager.d.ts +86 -0
- package/dist/npc/NPCManager.d.ts.map +1 -0
- package/dist/npc/NPCManager.js +217 -0
- package/dist/npc/NPCManager.js.map +1 -0
- package/dist/npc/fixedNPCs.d.ts +7 -0
- package/dist/npc/fixedNPCs.d.ts.map +1 -0
- package/dist/npc/fixedNPCs.js +196 -0
- package/dist/npc/fixedNPCs.js.map +1 -0
- package/dist/npc/index.d.ts +9 -0
- package/dist/npc/index.d.ts.map +1 -0
- package/dist/npc/index.js +12 -0
- package/dist/npc/index.js.map +1 -0
- package/dist/npc/traits.d.ts +33 -0
- package/dist/npc/traits.d.ts.map +1 -0
- package/dist/npc/traits.js +795 -0
- package/dist/npc/traits.js.map +1 -0
- package/dist/npc/types.d.ts +193 -0
- package/dist/npc/types.d.ts.map +1 -0
- package/dist/npc/types.js +9 -0
- package/dist/npc/types.js.map +1 -0
- package/dist/quest/QuestManager.d.ts +79 -0
- package/dist/quest/QuestManager.d.ts.map +1 -0
- package/dist/quest/QuestManager.js +273 -0
- package/dist/quest/QuestManager.js.map +1 -0
- package/dist/quest/index.d.ts +6 -0
- package/dist/quest/index.d.ts.map +1 -0
- package/dist/quest/index.js +9 -0
- package/dist/quest/index.js.map +1 -0
- package/dist/quest/types.d.ts +81 -0
- package/dist/quest/types.d.ts.map +1 -0
- package/dist/quest/types.js +8 -0
- package/dist/quest/types.js.map +1 -0
- package/dist/strategy/StrategyExecutor.d.ts +159 -0
- package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
- package/dist/strategy/StrategyExecutor.js +479 -0
- package/dist/strategy/StrategyExecutor.js.map +1 -0
- package/dist/strategy/StrategyParser.d.ts +48 -0
- package/dist/strategy/StrategyParser.d.ts.map +1 -0
- package/dist/strategy/StrategyParser.js +321 -0
- package/dist/strategy/StrategyParser.js.map +1 -0
- package/dist/strategy/defaultStrategy.d.ts +40 -0
- package/dist/strategy/defaultStrategy.d.ts.map +1 -0
- package/dist/strategy/defaultStrategy.js +254 -0
- package/dist/strategy/defaultStrategy.js.map +1 -0
- package/dist/strategy/index.d.ts +8 -0
- package/dist/strategy/index.d.ts.map +1 -0
- package/dist/strategy/index.js +14 -0
- package/dist/strategy/index.js.map +1 -0
- package/dist/tui/ExploreMenu.d.ts +106 -0
- package/dist/tui/ExploreMenu.d.ts.map +1 -0
- package/dist/tui/ExploreMenu.js +282 -0
- package/dist/tui/ExploreMenu.js.map +1 -0
- package/dist/tui/GameUI.d.ts +313 -0
- package/dist/tui/GameUI.d.ts.map +1 -0
- package/dist/tui/GameUI.js +2116 -0
- package/dist/tui/GameUI.js.map +1 -0
- package/dist/tui/GameUIAdapter.d.ts +207 -0
- package/dist/tui/GameUIAdapter.d.ts.map +1 -0
- package/dist/tui/GameUIAdapter.js +1342 -0
- package/dist/tui/GameUIAdapter.js.map +1 -0
- package/dist/tui/Input.d.ts +139 -0
- package/dist/tui/Input.d.ts.map +1 -0
- package/dist/tui/Input.js +278 -0
- package/dist/tui/Input.js.map +1 -0
- package/dist/tui/Menu.d.ts +110 -0
- package/dist/tui/Menu.d.ts.map +1 -0
- package/dist/tui/Menu.js +365 -0
- package/dist/tui/Menu.js.map +1 -0
- package/dist/tui/Screen.d.ts +228 -0
- package/dist/tui/Screen.d.ts.map +1 -0
- package/dist/tui/Screen.js +502 -0
- package/dist/tui/Screen.js.map +1 -0
- package/dist/tui/components/Box.d.ts +36 -0
- package/dist/tui/components/Box.d.ts.map +1 -0
- package/dist/tui/components/Box.js +43 -0
- package/dist/tui/components/Box.js.map +1 -0
- package/dist/tui/components/List.d.ts +69 -0
- package/dist/tui/components/List.d.ts.map +1 -0
- package/dist/tui/components/List.js +136 -0
- package/dist/tui/components/List.js.map +1 -0
- package/dist/tui/components/ProgressBar.d.ts +42 -0
- package/dist/tui/components/ProgressBar.d.ts.map +1 -0
- package/dist/tui/components/ProgressBar.js +75 -0
- package/dist/tui/components/ProgressBar.js.map +1 -0
- package/dist/tui/components/index.d.ts +8 -0
- package/dist/tui/components/index.d.ts.map +1 -0
- package/dist/tui/components/index.js +11 -0
- package/dist/tui/components/index.js.map +1 -0
- package/dist/tui/core/BaseSection.d.ts +98 -0
- package/dist/tui/core/BaseSection.d.ts.map +1 -0
- package/dist/tui/core/BaseSection.js +174 -0
- package/dist/tui/core/BaseSection.js.map +1 -0
- package/dist/tui/core/Component.d.ts +61 -0
- package/dist/tui/core/Component.d.ts.map +1 -0
- package/dist/tui/core/Component.js +32 -0
- package/dist/tui/core/Component.js.map +1 -0
- package/dist/tui/core/Section.d.ts +101 -0
- package/dist/tui/core/Section.d.ts.map +1 -0
- package/dist/tui/core/Section.js +24 -0
- package/dist/tui/core/Section.js.map +1 -0
- package/dist/tui/core/SectionManager.d.ts +108 -0
- package/dist/tui/core/SectionManager.d.ts.map +1 -0
- package/dist/tui/core/SectionManager.js +258 -0
- package/dist/tui/core/SectionManager.js.map +1 -0
- package/dist/tui/core/index.d.ts +9 -0
- package/dist/tui/core/index.d.ts.map +1 -0
- package/dist/tui/core/index.js +12 -0
- package/dist/tui/core/index.js.map +1 -0
- package/dist/tui/index.d.ts +15 -0
- package/dist/tui/index.d.ts.map +1 -0
- package/dist/tui/index.js +23 -0
- package/dist/tui/index.js.map +1 -0
- package/dist/tui/screens/BaseScreen.d.ts +62 -0
- package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
- package/dist/tui/screens/BaseScreen.js +55 -0
- package/dist/tui/screens/BaseScreen.js.map +1 -0
- package/dist/tui/screens/CombatScreen.d.ts +43 -0
- package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
- package/dist/tui/screens/CombatScreen.js +125 -0
- package/dist/tui/screens/CombatScreen.js.map +1 -0
- package/dist/tui/screens/DialogScreen.d.ts +53 -0
- package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
- package/dist/tui/screens/DialogScreen.js +90 -0
- package/dist/tui/screens/DialogScreen.js.map +1 -0
- package/dist/tui/screens/DungeonScreen.d.ts +80 -0
- package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
- package/dist/tui/screens/DungeonScreen.js +317 -0
- package/dist/tui/screens/DungeonScreen.js.map +1 -0
- package/dist/tui/screens/ExploreScreen.d.ts +69 -0
- package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
- package/dist/tui/screens/ExploreScreen.js +224 -0
- package/dist/tui/screens/ExploreScreen.js.map +1 -0
- package/dist/tui/screens/SectionScreen.d.ts +84 -0
- package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
- package/dist/tui/screens/SectionScreen.js +156 -0
- package/dist/tui/screens/SectionScreen.js.map +1 -0
- package/dist/tui/screens/TitleScreen.d.ts +40 -0
- package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
- package/dist/tui/screens/TitleScreen.js +253 -0
- package/dist/tui/screens/TitleScreen.js.map +1 -0
- package/dist/tui/screens/TownScreen.d.ts +98 -0
- package/dist/tui/screens/TownScreen.d.ts.map +1 -0
- package/dist/tui/screens/TownScreen.js +370 -0
- package/dist/tui/screens/TownScreen.js.map +1 -0
- package/dist/tui/screens/TravelScreen.d.ts +67 -0
- package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
- package/dist/tui/screens/TravelScreen.js +286 -0
- package/dist/tui/screens/TravelScreen.js.map +1 -0
- package/dist/tui/screens/index.d.ts +8 -0
- package/dist/tui/screens/index.d.ts.map +1 -0
- package/dist/tui/screens/index.js +17 -0
- package/dist/tui/screens/index.js.map +1 -0
- package/dist/tui/sections/ActionsSection.d.ts +71 -0
- package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
- package/dist/tui/sections/ActionsSection.js +184 -0
- package/dist/tui/sections/ActionsSection.js.map +1 -0
- package/dist/tui/sections/DungeonSection.d.ts +65 -0
- package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
- package/dist/tui/sections/DungeonSection.js +144 -0
- package/dist/tui/sections/DungeonSection.js.map +1 -0
- package/dist/tui/sections/EventsSection.d.ts +50 -0
- package/dist/tui/sections/EventsSection.d.ts.map +1 -0
- package/dist/tui/sections/EventsSection.js +134 -0
- package/dist/tui/sections/EventsSection.js.map +1 -0
- package/dist/tui/sections/MapSection.d.ts +66 -0
- package/dist/tui/sections/MapSection.d.ts.map +1 -0
- package/dist/tui/sections/MapSection.js +669 -0
- package/dist/tui/sections/MapSection.js.map +1 -0
- package/dist/tui/sections/StatusSection.d.ts +47 -0
- package/dist/tui/sections/StatusSection.d.ts.map +1 -0
- package/dist/tui/sections/StatusSection.js +133 -0
- package/dist/tui/sections/StatusSection.js.map +1 -0
- package/dist/tui/sections/TeamSection.d.ts +71 -0
- package/dist/tui/sections/TeamSection.d.ts.map +1 -0
- package/dist/tui/sections/TeamSection.js +224 -0
- package/dist/tui/sections/TeamSection.js.map +1 -0
- package/dist/tui/sections/TravelingSection.d.ts +51 -0
- package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
- package/dist/tui/sections/TravelingSection.js +106 -0
- package/dist/tui/sections/TravelingSection.js.map +1 -0
- package/dist/tui/sections/index.d.ts +9 -0
- package/dist/tui/sections/index.d.ts.map +1 -0
- package/dist/tui/sections/index.js +12 -0
- package/dist/tui/sections/index.js.map +1 -0
- package/dist/ui/Terminal.d.ts +68 -0
- package/dist/ui/Terminal.d.ts.map +1 -0
- package/dist/ui/Terminal.js +297 -0
- package/dist/ui/Terminal.js.map +1 -0
- package/dist/ui/index.d.ts +5 -0
- package/dist/ui/index.d.ts.map +1 -0
- package/dist/ui/index.js +8 -0
- package/dist/ui/index.js.map +1 -0
- package/dist/utils/configMigration.d.ts +14 -0
- package/dist/utils/configMigration.d.ts.map +1 -0
- package/dist/utils/configMigration.js +92 -0
- package/dist/utils/configMigration.js.map +1 -0
- package/dist/utils/errorHandler.d.ts +86 -0
- package/dist/utils/errorHandler.d.ts.map +1 -0
- package/dist/utils/errorHandler.js +224 -0
- package/dist/utils/errorHandler.js.map +1 -0
- package/dist/utils/logger.d.ts +14 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +43 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/weapon/WeaponFactory.d.ts +32 -0
- package/dist/weapon/WeaponFactory.d.ts.map +1 -0
- package/dist/weapon/WeaponFactory.js +216 -0
- package/dist/weapon/WeaponFactory.js.map +1 -0
- package/dist/weapon/index.d.ts +5 -0
- package/dist/weapon/index.d.ts.map +1 -0
- package/dist/weapon/index.js +8 -0
- package/dist/weapon/index.js.map +1 -0
- package/package.json +46 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traits.js","sources":["npc/traits.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * NPC Traits, Races, and Roles Database\r\n * Western Fantasy / D&D Style\r\n */\r\n\r\nimport type { \r\n WeightedTrait, \r\n RaceDefinition, \r\n RoleDefinition,\r\n NPCRace,\r\n NPCRole,\r\n NPCImportance \r\n} from './types.js';\r\n\r\n// ============================================================================\r\n// RACES\r\n// ============================================================================\r\n\r\nexport const RACES: RaceDefinition[] = [\r\n {\r\n id: 'human',\r\n name: 'Human',\r\n weight: 30,\r\n lifespan: '70-90 years',\r\n namePrefixes: {\r\n male: ['Aldric', 'Bran', 'Cedric', 'Dorian', 'Edmund', 'Gareth', 'Hendrick', 'Ivan', 'Jasper', 'Kael'],\r\n female: ['Aria', 'Brynn', 'Celeste', 'Diana', 'Elena', 'Fiona', 'Gwen', 'Helena', 'Iris', 'Juliet'],\r\n neutral: ['Morgan', 'Rowan', 'Quinn', 'Sage', 'Avery'],\r\n },\r\n nameSuffixes: {\r\n male: ['ric', 'mund', 'ard', 'bert', 'fred'],\r\n female: ['ina', 'ella', 'lyn', 'beth', 'anne'],\r\n neutral: [''],\r\n },\r\n traits: ['adaptable', 'ambitious'],\r\n appearance: ['weathered face', 'calloused hands', 'tired eyes', 'sturdy build', 'sun-darkened skin'],\r\n },\r\n {\r\n id: 'elf',\r\n name: 'Elf',\r\n weight: 15,\r\n lifespan: '700-900 years',\r\n namePrefixes: {\r\n male: ['Aelindor', 'Caelum', 'Elendil', 'Faelar', 'Galathil', 'Ilyndor', 'Leorin', 'Mirethil', 'Sylvan', 'Thaelon'],\r\n female: ['Aelara', 'Caelia', 'Elowen', 'Faelynn', 'Galadria', 'Ilyana', 'Liriel', 'Miriel', 'Sylvara', 'Thaelia'],\r\n neutral: ['Aerin', 'Cael', 'Elys', 'Fael', 'Gael'],\r\n },\r\n nameSuffixes: {\r\n male: ['ion', 'iel', 'orn', 'il', 'ar'],\r\n female: ['iel', 'wen', 'ara', 'ith', 'ia'],\r\n neutral: ['yn', 'ys', 'el'],\r\n },\r\n traits: ['ancient_wisdom', 'detached', 'graceful'],\r\n appearance: ['pointed ears', 'ageless features', 'slender build', 'luminous eyes', 'ethereal grace'],\r\n floorAffinity: { min: 1, max: 10 },\r\n },\r\n {\r\n id: 'dwarf',\r\n name: 'Dwarf',\r\n weight: 12,\r\n lifespan: '300-400 years',\r\n namePrefixes: {\r\n male: ['Thorin', 'Balin', 'Dwalin', 'Gimli', 'Oin', 'Gloin', 'Fili', 'Kili', 'Dain', 'Nain'],\r\n female: ['Dis', 'Hild', 'Sigrid', 'Thyra', 'Brynja', 'Gerta', 'Magna', 'Olga', 'Runa', 'Vala'],\r\n neutral: ['Durin', 'Khazad', 'Azag'],\r\n },\r\n nameSuffixes: {\r\n male: ['rim', 'rin', 'din', 'grim', 'bur'],\r\n female: ['hild', 'run', 'dis', 'va', 'ga'],\r\n neutral: ['ak', 'ul', 'az'],\r\n },\r\n traits: ['stubborn', 'loyal', 'craftsman'],\r\n appearance: ['thick beard', 'stocky build', 'muscular arms', 'deep-set eyes', 'stone-dust in hair'],\r\n floorAffinity: { min: 3, max: 15 },\r\n },\r\n {\r\n id: 'halfling',\r\n name: 'Halfling',\r\n weight: 8,\r\n lifespan: '150-200 years',\r\n namePrefixes: {\r\n male: ['Bilbo', 'Frodo', 'Sam', 'Merry', 'Pippin', 'Drogo', 'Folco', 'Largo', 'Polo', 'Saradoc'],\r\n female: ['Belladonna', 'Daisy', 'Elanor', 'Marigold', 'Primula', 'Rosie', 'Bell', 'Esme', 'Ruby', 'Pearl'],\r\n neutral: ['Robin', 'Finch', 'Wren'],\r\n },\r\n nameSuffixes: {\r\n male: ['o', 'as', 'in', 'oc', 'go'],\r\n female: ['a', 'ie', 'y', 'ose', 'la'],\r\n neutral: [''],\r\n },\r\n traits: ['cheerful', 'curious', 'lucky'],\r\n appearance: ['bare hairy feet', 'round face', 'curly hair', 'bright eyes', 'short stature'],\r\n floorAffinity: { min: 1, max: 5 },\r\n },\r\n {\r\n id: 'gnome',\r\n name: 'Gnome',\r\n weight: 6,\r\n lifespan: '400-500 years',\r\n namePrefixes: {\r\n male: ['Fizwick', 'Gimble', 'Namfoodle', 'Roondar', 'Zook', 'Boddynock', 'Dimble', 'Fonkin', 'Gerbo', 'Jebeddo'],\r\n female: ['Bimpnottin', 'Caramip', 'Donella', 'Ellywick', 'Lilli', 'Nissa', 'Oda', 'Shamil', 'Tana', 'Zanna'],\r\n neutral: ['Pip', 'Fizz', 'Sprocket'],\r\n },\r\n nameSuffixes: {\r\n male: ['wick', 'bin', 'nock', 'bar', 'dle'],\r\n female: ['wen', 'tin', 'li', 'na', 'sa'],\r\n neutral: ['ix', 'oz', 'et'],\r\n },\r\n traits: ['inventive', 'eccentric', 'tinkerer'],\r\n appearance: ['large nose', 'wild hair', 'goggles', 'ink-stained fingers', 'tiny spectacles'],\r\n floorAffinity: { min: 2, max: 8 },\r\n },\r\n {\r\n id: 'half-elf',\r\n name: 'Half-Elf',\r\n weight: 10,\r\n lifespan: '150-200 years',\r\n namePrefixes: {\r\n male: ['Aric', 'Beren', 'Daelan', 'Eryn', 'Finn', 'Galen', 'Haelor', 'Kieran', 'Liam', 'Nolan'],\r\n female: ['Aeris', 'Briana', 'Celia', 'Elara', 'Fiora', 'Gwynn', 'Isla', 'Kira', 'Lyra', 'Mira'],\r\n neutral: ['Ash', 'River', 'Sky', 'Storm'],\r\n },\r\n nameSuffixes: {\r\n male: ['an', 'en', 'or', 'el', 'in'],\r\n female: ['a', 'is', 'ra', 'ia', 'yn'],\r\n neutral: [''],\r\n },\r\n traits: ['adaptable', 'conflicted', 'diplomatic'],\r\n appearance: ['slightly pointed ears', 'youthful appearance', 'mixed features', 'expressive eyes'],\r\n },\r\n {\r\n id: 'half-orc',\r\n name: 'Half-Orc',\r\n weight: 8,\r\n lifespan: '60-80 years',\r\n namePrefixes: {\r\n male: ['Grom', 'Krusk', 'Morg', 'Thok', 'Urog', 'Varg', 'Zug', 'Drok', 'Feng', 'Harg'],\r\n female: ['Baggi', 'Emen', 'Engong', 'Myev', 'Neega', 'Ovak', 'Shautha', 'Vola', 'Yevelda', 'Zugbu'],\r\n neutral: ['Grak', 'Mog', 'Thag'],\r\n },\r\n nameSuffixes: {\r\n male: ['ash', 'ug', 'ok', 'ar', 'um'],\r\n female: ['a', 'gi', 'bu', 'ev', 'tha'],\r\n neutral: [''],\r\n },\r\n traits: ['aggressive', 'honorable', 'survivor'],\r\n appearance: ['tusks', 'greenish skin', 'muscular build', 'scarred', 'fierce eyes'],\r\n floorAffinity: { min: 4, max: 15 },\r\n },\r\n {\r\n id: 'tiefling',\r\n name: 'Tiefling',\r\n weight: 5,\r\n lifespan: '100-150 years',\r\n namePrefixes: {\r\n male: ['Akmenos', 'Amnon', 'Barakas', 'Damakos', 'Ekemon', 'Iados', 'Kairon', 'Leucis', 'Morthos', 'Therai'],\r\n female: ['Akta', 'Bryseis', 'Criella', 'Damaia', 'Ea', 'Kallista', 'Lerissa', 'Makaria', 'Nemeia', 'Rieta'],\r\n neutral: ['Virtue', 'Sin', 'Fate', 'Chaos'],\r\n },\r\n nameSuffixes: {\r\n male: ['os', 'on', 'us', 'ai', 'eon'],\r\n female: ['a', 'is', 'ia', 'eia', 'sta'],\r\n neutral: [''],\r\n },\r\n traits: ['mistrusted', 'cunning', 'resilient'],\r\n appearance: ['horns', 'tail', 'unusual skin color', 'solid-colored eyes', 'sharp features'],\r\n floorAffinity: { min: 5, max: 15 },\r\n },\r\n {\r\n id: 'dragonborn',\r\n name: 'Dragonborn',\r\n weight: 4,\r\n lifespan: '80-100 years',\r\n namePrefixes: {\r\n male: ['Arjhan', 'Balasar', 'Bharash', 'Donaar', 'Ghesh', 'Heskan', 'Kriv', 'Medrash', 'Nadarr', 'Shamash'],\r\n female: ['Akra', 'Biri', 'Daar', 'Harann', 'Kava', 'Korinn', 'Mishann', 'Nala', 'Perra', 'Sora'],\r\n neutral: ['Rhogar', 'Surina', 'Thava'],\r\n },\r\n nameSuffixes: {\r\n male: ['ar', 'ash', 'an', 'iv', 'rr'],\r\n female: ['a', 'ann', 'ra', 'va', 'inn'],\r\n neutral: [''],\r\n },\r\n traits: ['proud', 'honorable', 'draconic'],\r\n appearance: ['scales', 'draconic head', 'clawed hands', 'powerful build', 'no tail'],\r\n floorAffinity: { min: 6, max: 15 },\r\n },\r\n {\r\n id: 'goblin',\r\n name: 'Goblin',\r\n weight: 3,\r\n lifespan: '40-60 years',\r\n namePrefixes: {\r\n male: ['Blix', 'Crink', 'Droop', 'Grik', 'Nix', 'Pox', 'Rix', 'Snig', 'Tix', 'Zix'],\r\n female: ['Blinka', 'Crinkle', 'Dripa', 'Grika', 'Nixa', 'Poxa', 'Rixa', 'Sniga', 'Tixa', 'Zixa'],\r\n neutral: ['Squeek', 'Rat', 'Mud'],\r\n },\r\n nameSuffixes: {\r\n male: ['k', 'x', 'g', 'z', 'p'],\r\n female: ['a', 'ka', 'le', 'la', 'xa'],\r\n neutral: [''],\r\n },\r\n traits: ['cowardly', 'cunning', 'greedy'],\r\n appearance: ['large ears', 'sharp teeth', 'beady eyes', 'green skin', 'scrawny'],\r\n floorAffinity: { min: 1, max: 6 },\r\n },\r\n {\r\n id: 'orc',\r\n name: 'Orc',\r\n weight: 3,\r\n lifespan: '50-70 years',\r\n namePrefixes: {\r\n male: ['Azog', 'Bolg', 'Gorbag', 'Grishnakh', 'Lugdush', 'Mauhur', 'Shagrat', 'Ugluk', 'Gashnak', 'Muzgash'],\r\n female: ['Aghra', 'Bashka', 'Grisha', 'Lagduf', 'Moksha', 'Nazgha', 'Orbak', 'Shaga', 'Ulka', 'Zurga'],\r\n neutral: ['Snarl', 'Gore', 'Fang'],\r\n },\r\n nameSuffixes: {\r\n male: ['og', 'uk', 'ag', 'ash', 'ub'],\r\n female: ['a', 'sha', 'ka', 'ga', 'ha'],\r\n neutral: [''],\r\n },\r\n traits: ['brutal', 'tribal', 'warrior'],\r\n appearance: ['large tusks', 'green skin', 'massive build', 'battle scars', 'fierce war paint'],\r\n floorAffinity: { min: 6, max: 15 },\r\n },\r\n {\r\n id: 'undead',\r\n name: 'Undead',\r\n weight: 2,\r\n lifespan: 'Eternal',\r\n namePrefixes: {\r\n male: ['Vecna', 'Strahd', 'Acererak', 'Kas', 'Azalin', 'Manfred', 'Radu', 'Sergei', 'Vlad', 'Yorick'],\r\n female: ['Ezmerelda', 'Ireena', 'Lydia', 'Patrina', 'Sasha', 'Tatyana', 'Viktoria', 'Wanda', 'Yelena', 'Zora'],\r\n neutral: ['Bones', 'Shade', 'Whisper', 'Echo'],\r\n },\r\n nameSuffixes: {\r\n male: ['', 'us', 'or', 'on', 'ek'],\r\n female: ['', 'a', 'ia', 'ina', 'ya'],\r\n neutral: [''],\r\n },\r\n traits: ['undying', 'emotionless', 'ancient_memory'],\r\n appearance: ['pale skin', 'hollow eyes', 'skeletal', 'ethereal glow', 'decaying'],\r\n floorAffinity: { min: 8, max: 15 },\r\n },\r\n];\r\n\r\n// ============================================================================\r\n// ROLES\r\n// ============================================================================\r\n\r\nexport const ROLES: RoleDefinition[] = [\r\n {\r\n id: 'merchant',\r\n name: 'Merchant',\r\n weight: 15,\r\n description: 'A trader of goods and secrets',\r\n typicalRaces: ['human', 'halfling', 'gnome', 'dwarf'],\r\n associatedTraits: ['greedy', 'cunning', 'well_traveled'],\r\n },\r\n {\r\n id: 'sage',\r\n name: 'Sage',\r\n weight: 8,\r\n description: 'A keeper of ancient knowledge',\r\n typicalRaces: ['elf', 'gnome', 'human', 'tiefling'],\r\n associatedTraits: ['ancient_wisdom', 'bookish', 'mysterious'],\r\n floorAffinity: { min: 3, max: 15 },\r\n },\r\n {\r\n id: 'guard',\r\n name: 'Guard',\r\n weight: 12,\r\n description: 'A protector of this place',\r\n typicalRaces: ['human', 'dwarf', 'half-orc', 'dragonborn'],\r\n associatedTraits: ['loyal', 'vigilant', 'gruff'],\r\n },\r\n {\r\n id: 'traveler',\r\n name: 'Traveler',\r\n weight: 15,\r\n description: 'A wanderer between worlds',\r\n typicalRaces: ['human', 'half-elf', 'halfling', 'elf'],\r\n associatedTraits: ['well_traveled', 'curious', 'storyteller'],\r\n },\r\n {\r\n id: 'blacksmith',\r\n name: 'Blacksmith',\r\n weight: 8,\r\n description: 'A master of metal and fire',\r\n typicalRaces: ['dwarf', 'human', 'half-orc', 'dragonborn'],\r\n associatedTraits: ['craftsman', 'patient', 'perfectionist'],\r\n },\r\n {\r\n id: 'quest_giver',\r\n name: 'Quest Giver',\r\n weight: 10,\r\n description: 'One with tasks for brave adventurers',\r\n typicalRaces: ['human', 'elf', 'dwarf', 'gnome'],\r\n associatedTraits: ['desperate', 'mysterious', 'wealthy'],\r\n },\r\n {\r\n id: 'hermit',\r\n name: 'Hermit',\r\n weight: 5,\r\n description: 'A recluse who has seen too much',\r\n typicalRaces: ['human', 'elf', 'gnome', 'tiefling'],\r\n associatedTraits: ['paranoid', 'prophetic', 'hermit'],\r\n floorAffinity: { min: 5, max: 15 },\r\n },\r\n {\r\n id: 'refugee',\r\n name: 'Refugee',\r\n weight: 10,\r\n description: 'One fleeing from danger',\r\n typicalRaces: ['human', 'halfling', 'gnome', 'goblin'],\r\n associatedTraits: ['fearful', 'desperate', 'survivor'],\r\n },\r\n {\r\n id: 'hunter',\r\n name: 'Hunter',\r\n weight: 8,\r\n description: 'A tracker of beasts and monsters',\r\n typicalRaces: ['human', 'elf', 'half-elf', 'half-orc'],\r\n associatedTraits: ['patient', 'observant', 'ruthless'],\r\n floorAffinity: { min: 3, max: 12 },\r\n },\r\n {\r\n id: 'scholar',\r\n name: 'Scholar',\r\n weight: 6,\r\n description: 'A seeker of forbidden knowledge',\r\n typicalRaces: ['human', 'elf', 'gnome', 'tiefling'],\r\n associatedTraits: ['bookish', 'curious', 'obsessive'],\r\n floorAffinity: { min: 4, max: 15 },\r\n },\r\n {\r\n id: 'healer',\r\n name: 'Healer',\r\n weight: 7,\r\n description: 'One who mends wounds of body and soul',\r\n typicalRaces: ['human', 'elf', 'halfling', 'half-elf'],\r\n associatedTraits: ['compassionate', 'patient', 'wise'],\r\n },\r\n {\r\n id: 'thief',\r\n name: 'Thief',\r\n weight: 8,\r\n description: 'A shadow who takes what they need',\r\n typicalRaces: ['human', 'halfling', 'half-elf', 'tiefling', 'goblin'],\r\n associatedTraits: ['cunning', 'quick', 'greedy'],\r\n floorAffinity: { min: 2, max: 10 },\r\n },\r\n {\r\n id: 'knight',\r\n name: 'Knight',\r\n weight: 5,\r\n description: 'A warrior bound by a code',\r\n typicalRaces: ['human', 'dragonborn', 'half-elf'],\r\n associatedTraits: ['honorable', 'brave', 'noble'],\r\n floorAffinity: { min: 1, max: 8 },\r\n },\r\n {\r\n id: 'cultist',\r\n name: 'Cultist',\r\n weight: 4,\r\n description: 'A servant of darker powers',\r\n typicalRaces: ['human', 'tiefling', 'half-orc', 'undead'],\r\n associatedTraits: ['fanatical', 'secretive', 'dangerous'],\r\n floorAffinity: { min: 6, max: 15 },\r\n },\r\n {\r\n id: 'bard',\r\n name: 'Bard',\r\n weight: 6,\r\n description: 'A collector of songs and stories',\r\n typicalRaces: ['human', 'half-elf', 'halfling', 'tiefling'],\r\n associatedTraits: ['charismatic', 'storyteller', 'flirtatious'],\r\n },\r\n {\r\n id: 'priest',\r\n name: 'Priest',\r\n weight: 5,\r\n description: 'A servant of the divine',\r\n typicalRaces: ['human', 'elf', 'dwarf', 'dragonborn'],\r\n associatedTraits: ['pious', 'judgmental', 'compassionate'],\r\n },\r\n {\r\n id: 'mercenary',\r\n name: 'Mercenary',\r\n weight: 10,\r\n description: 'A sword for hire',\r\n typicalRaces: ['human', 'half-orc', 'dwarf', 'dragonborn'],\r\n associatedTraits: ['pragmatic', 'ruthless', 'professional'],\r\n floorAffinity: { min: 3, max: 15 },\r\n },\r\n {\r\n id: 'noble',\r\n name: 'Noble',\r\n weight: 3,\r\n description: 'Aristocracy fallen on hard times',\r\n typicalRaces: ['human', 'elf', 'half-elf', 'tiefling'],\r\n associatedTraits: ['arrogant', 'refined', 'desperate'],\r\n floorAffinity: { min: 1, max: 6 },\r\n },\r\n];\r\n\r\n// ============================================================================\r\n// TRAITS (Weighted)\r\n// ============================================================================\r\n\r\nexport const TRAITS: WeightedTrait[] = [\r\n // PERSONALITY\r\n {\r\n id: 'kind',\r\n name: 'Kind',\r\n weight: 15,\r\n category: 'personality',\r\n description: 'Genuinely cares about others',\r\n promptModifier: 'You are genuinely kind and try to help others when you can.',\r\n },\r\n {\r\n id: 'gruff',\r\n name: 'Gruff',\r\n weight: 12,\r\n category: 'personality',\r\n description: 'Rough exterior, speaks bluntly',\r\n promptModifier: 'You speak bluntly and don\\'t waste words on pleasantries.',\r\n incompatibleWith: ['charming', 'flirtatious'],\r\n },\r\n {\r\n id: 'cunning',\r\n name: 'Cunning',\r\n weight: 10,\r\n category: 'personality',\r\n description: 'Always calculating the angles',\r\n promptModifier: 'You always look for the advantage in any situation and speak carefully.',\r\n },\r\n {\r\n id: 'paranoid',\r\n name: 'Paranoid',\r\n weight: 6,\r\n category: 'personality',\r\n description: 'Trusts no one completely',\r\n promptModifier: 'You are suspicious of everyone and often hint at hidden dangers.',\r\n incompatibleWith: ['trusting', 'naive'],\r\n },\r\n {\r\n id: 'cheerful',\r\n name: 'Cheerful',\r\n weight: 10,\r\n category: 'personality',\r\n description: 'Maintains optimism despite circumstances',\r\n promptModifier: 'You maintain a cheerful demeanor even in dark times.',\r\n incompatibleWith: ['melancholic', 'bitter'],\r\n },\r\n {\r\n id: 'melancholic',\r\n name: 'Melancholic',\r\n weight: 8,\r\n category: 'personality',\r\n description: 'Carries a deep sadness',\r\n promptModifier: 'There is a deep sadness in you that colors your words.',\r\n incompatibleWith: ['cheerful'],\r\n },\r\n {\r\n id: 'arrogant',\r\n name: 'Arrogant',\r\n weight: 7,\r\n category: 'personality',\r\n description: 'Believes themselves superior',\r\n promptModifier: 'You consider yourself superior to most and it shows in your speech.',\r\n incompatibleWith: ['humble'],\r\n },\r\n {\r\n id: 'humble',\r\n name: 'Humble',\r\n weight: 8,\r\n category: 'personality',\r\n description: 'Downplays their own abilities',\r\n promptModifier: 'You are humble and tend to downplay your own knowledge or abilities.',\r\n incompatibleWith: ['arrogant'],\r\n },\r\n {\r\n id: 'mysterious',\r\n name: 'Mysterious',\r\n weight: 10,\r\n category: 'personality',\r\n description: 'Speaks in riddles and hints',\r\n promptModifier: 'You speak cryptically and rarely give direct answers.',\r\n },\r\n {\r\n id: 'direct',\r\n name: 'Direct',\r\n weight: 12,\r\n category: 'personality',\r\n description: 'Says exactly what they mean',\r\n promptModifier: 'You are direct and say exactly what you mean without embellishment.',\r\n incompatibleWith: ['mysterious'],\r\n },\r\n {\r\n id: 'charismatic',\r\n name: 'Charismatic',\r\n weight: 8,\r\n category: 'personality',\r\n description: 'Naturally draws people in',\r\n promptModifier: 'You have a magnetic personality and speak with natural charm.',\r\n },\r\n {\r\n id: 'nervous',\r\n name: 'Nervous',\r\n weight: 10,\r\n category: 'personality',\r\n description: 'Easily startled and anxious',\r\n promptModifier: 'You are nervous and jumpy, often interrupting yourself.',\r\n incompatibleWith: ['brave', 'confident'],\r\n },\r\n {\r\n id: 'brave',\r\n name: 'Brave',\r\n weight: 8,\r\n category: 'personality',\r\n description: 'Faces danger without flinching',\r\n promptModifier: 'You speak of danger matter-of-factly, without fear.',\r\n incompatibleWith: ['cowardly', 'nervous'],\r\n },\r\n {\r\n id: 'cowardly',\r\n name: 'Cowardly',\r\n weight: 6,\r\n category: 'personality',\r\n description: 'Self-preservation above all',\r\n promptModifier: 'You prioritize your own survival and advise others to do the same.',\r\n incompatibleWith: ['brave', 'honorable'],\r\n },\r\n\r\n // BACKGROUND\r\n {\r\n id: 'well_traveled',\r\n name: 'Well-Traveled',\r\n weight: 12,\r\n category: 'background',\r\n description: 'Has seen many lands and dungeons',\r\n promptModifier: 'You often reference places you\\'ve been and things you\\'ve seen.',\r\n },\r\n {\r\n id: 'local',\r\n name: 'Local',\r\n weight: 15,\r\n category: 'background',\r\n description: 'Has lived in this dungeon for years',\r\n promptModifier: 'You know this area intimately and speak of it possessively.',\r\n },\r\n {\r\n id: 'former_adventurer',\r\n name: 'Former Adventurer',\r\n weight: 8,\r\n category: 'background',\r\n description: 'Once sought glory, now retired',\r\n promptModifier: 'You speak of your adventuring days with a mix of nostalgia and regret.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'refugee',\r\n name: 'Refugee',\r\n weight: 10,\r\n category: 'background',\r\n description: 'Fled from something terrible',\r\n promptModifier: 'You hint at something terrible that drove you here.',\r\n },\r\n {\r\n id: 'noble_blood',\r\n name: 'Noble Blood',\r\n weight: 4,\r\n category: 'background',\r\n description: 'Of aristocratic lineage',\r\n promptModifier: 'Your noble upbringing shows in your refined speech patterns.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'criminal_past',\r\n name: 'Criminal Past',\r\n weight: 8,\r\n category: 'background',\r\n description: 'Has a dark history',\r\n promptModifier: 'You are evasive about your past and know things honest folk shouldn\\'t.',\r\n },\r\n {\r\n id: 'scholar',\r\n name: 'Scholarly',\r\n weight: 7,\r\n category: 'background',\r\n description: 'Formally educated',\r\n promptModifier: 'You use educated vocabulary and reference historical events.',\r\n },\r\n\r\n // QUIRKS\r\n {\r\n id: 'stutters',\r\n name: 'Stutters',\r\n weight: 5,\r\n category: 'quirk',\r\n description: 'Has a speech impediment',\r\n promptModifier: 'You occasionally stutter, especially when nervous or excited.',\r\n },\r\n {\r\n id: 'speaks_formally',\r\n name: 'Speaks Formally',\r\n weight: 8,\r\n category: 'quirk',\r\n description: 'Uses formal, archaic language',\r\n promptModifier: 'You use formal, somewhat archaic language patterns.',\r\n },\r\n {\r\n id: 'uses_slang',\r\n name: 'Uses Slang',\r\n weight: 10,\r\n category: 'quirk',\r\n description: 'Peppers speech with colorful expressions',\r\n promptModifier: 'You use casual slang and colorful expressions.',\r\n incompatibleWith: ['speaks_formally'],\r\n },\r\n {\r\n id: 'tells_stories',\r\n name: 'Storyteller',\r\n weight: 8,\r\n category: 'quirk',\r\n description: 'Can\\'t help but tell tales',\r\n promptModifier: 'You love to tell stories and often go off on tangents.',\r\n },\r\n {\r\n id: 'superstitious',\r\n name: 'Superstitious',\r\n weight: 7,\r\n category: 'quirk',\r\n description: 'Believes in omens and signs',\r\n promptModifier: 'You often mention superstitions and interpret events as omens.',\r\n },\r\n {\r\n id: 'forgetful',\r\n name: 'Forgetful',\r\n weight: 5,\r\n category: 'quirk',\r\n description: 'Has trouble remembering things',\r\n promptModifier: 'You sometimes forget what you were saying or mix up details.',\r\n incompatibleWith: ['perfect_memory'],\r\n },\r\n {\r\n id: 'perfect_memory',\r\n name: 'Perfect Memory',\r\n weight: 3,\r\n category: 'quirk',\r\n description: 'Remembers everything',\r\n promptModifier: 'You remember every detail and reference past conversations precisely.',\r\n minImportance: 'minor',\r\n incompatibleWith: ['forgetful'],\r\n },\r\n\r\n // MOTIVATIONS\r\n {\r\n id: 'seeking_revenge',\r\n name: 'Seeking Revenge',\r\n weight: 6,\r\n category: 'motivation',\r\n description: 'Driven by a desire for vengeance',\r\n promptModifier: 'You are driven by revenge and sometimes let your anger show.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'seeking_knowledge',\r\n name: 'Seeking Knowledge',\r\n weight: 8,\r\n category: 'motivation',\r\n description: 'Wants to understand secrets',\r\n promptModifier: 'You are driven by curiosity and seek knowledge above all.',\r\n },\r\n {\r\n id: 'seeking_wealth',\r\n name: 'Seeking Wealth',\r\n weight: 12,\r\n category: 'motivation',\r\n description: 'Motivated by gold and treasure',\r\n promptModifier: 'You are always looking for ways to profit.',\r\n },\r\n {\r\n id: 'seeking_redemption',\r\n name: 'Seeking Redemption',\r\n weight: 5,\r\n category: 'motivation',\r\n description: 'Trying to atone for past sins',\r\n promptModifier: 'You seek redemption for past wrongs and sometimes hint at your guilt.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'protecting_someone',\r\n name: 'Protecting Someone',\r\n weight: 6,\r\n category: 'motivation',\r\n description: 'Has someone they must keep safe',\r\n promptModifier: 'You are protective and often think of someone you must keep safe.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'survival',\r\n name: 'Survival',\r\n weight: 15,\r\n category: 'motivation',\r\n description: 'Just trying to stay alive',\r\n promptModifier: 'Your primary concern is survival, and it colors all your advice.',\r\n },\r\n\r\n // SECRETS (Higher importance required)\r\n {\r\n id: 'knows_boss_weakness',\r\n name: 'Knows Boss Weakness',\r\n weight: 2,\r\n category: 'secret',\r\n description: 'Knows how to defeat a powerful enemy',\r\n promptModifier: 'You know a secret weakness of a powerful creature but rarely share it directly.',\r\n minImportance: 'major',\r\n },\r\n {\r\n id: 'hidden_treasure',\r\n name: 'Hidden Treasure',\r\n weight: 4,\r\n category: 'secret',\r\n description: 'Knows location of hidden treasure',\r\n promptModifier: 'You know of hidden treasure and might share hints if you trust someone.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'secret_passage',\r\n name: 'Secret Passage',\r\n weight: 5,\r\n category: 'secret',\r\n description: 'Knows of hidden paths',\r\n promptModifier: 'You know of secret passages and might hint at them.',\r\n },\r\n {\r\n id: 'cursed',\r\n name: 'Cursed',\r\n weight: 3,\r\n category: 'secret',\r\n description: 'Bears a terrible curse',\r\n promptModifier: 'You bear a curse that occasionally causes you pain or strange behavior.',\r\n minImportance: 'minor',\r\n },\r\n {\r\n id: 'not_what_they_seem',\r\n name: 'Not What They Seem',\r\n weight: 2,\r\n category: 'secret',\r\n description: 'Hiding their true identity',\r\n promptModifier: 'You are not what you appear to be and sometimes slip in your act.',\r\n minImportance: 'major',\r\n },\r\n];\r\n\r\n// ============================================================================\r\n// HELPER FUNCTIONS\r\n// ============================================================================\r\n\r\n/**\r\n * Get race by ID\r\n */\r\nexport function getRace(id: NPCRace): RaceDefinition | undefined {\r\n return RACES.find(r => r.id === id);\r\n}\r\n\r\n/**\r\n * Get role by ID\r\n */\r\nexport function getRole(id: NPCRole): RoleDefinition | undefined {\r\n return ROLES.find(r => r.id === id);\r\n}\r\n\r\n/**\r\n * Get trait by ID\r\n */\r\nexport function getTrait(id: string): WeightedTrait | undefined {\r\n return TRAITS.find(t => t.id === id);\r\n}\r\n\r\n/**\r\n * Get all traits for a category\r\n */\r\nexport function getTraitsByCategory(category: WeightedTrait['category']): WeightedTrait[] {\r\n return TRAITS.filter(t => t.category === category);\r\n}\r\n\r\n/**\r\n * Get importance weight (for death probability calculation)\r\n */\r\nexport function getImportanceWeight(importance: NPCImportance): number {\r\n const weights: Record<NPCImportance, number> = {\r\n legendary: 0.01, // 1% daily death chance\r\n major: 0.05, // 5% daily death chance\r\n minor: 0.15, // 15% daily death chance\r\n background: 0.30, // 30% daily death chance\r\n };\r\n return weights[importance];\r\n}\r\n\r\n/**\r\n * Get importance based on weights\r\n */\r\nexport function rollImportance(weights: Record<NPCImportance, number>): NPCImportance {\r\n const total = Object.values(weights).reduce((a, b) => a + b, 0);\r\n let roll = Math.random() * total;\r\n \r\n for (const [importance, weight] of Object.entries(weights)) {\r\n roll -= weight;\r\n if (roll <= 0) {\r\n return importance as NPCImportance;\r\n }\r\n }\r\n \r\n return 'background';\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"9046dde2-5ea0-5338-b1b3-071c38c58a4f"}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NPC System Type Definitions
|
|
3
|
+
* Western Fantasy / D&D Style
|
|
4
|
+
*/
|
|
5
|
+
import type { Quest } from '../core/types.js';
|
|
6
|
+
/**
|
|
7
|
+
* NPC importance level - affects backstory complexity and survival
|
|
8
|
+
*/
|
|
9
|
+
export type NPCImportance = 'legendary' | 'major' | 'minor' | 'background';
|
|
10
|
+
/**
|
|
11
|
+
* NPC gender
|
|
12
|
+
*/
|
|
13
|
+
export type NPCGender = 'male' | 'female' | 'non-binary' | 'unknown';
|
|
14
|
+
/**
|
|
15
|
+
* NPC race (D&D / Western Fantasy style)
|
|
16
|
+
*/
|
|
17
|
+
export type NPCRace = 'human' | 'elf' | 'dwarf' | 'halfling' | 'gnome' | 'half-elf' | 'half-orc' | 'tiefling' | 'dragonborn' | 'goblin' | 'orc' | 'undead';
|
|
18
|
+
/**
|
|
19
|
+
* NPC role/archetype
|
|
20
|
+
*/
|
|
21
|
+
export type NPCRole = 'merchant' | 'sage' | 'guard' | 'traveler' | 'blacksmith' | 'quest_giver' | 'hermit' | 'refugee' | 'hunter' | 'scholar' | 'healer' | 'thief' | 'knight' | 'cultist' | 'bard' | 'priest' | 'mercenary' | 'noble';
|
|
22
|
+
/**
|
|
23
|
+
* Weighted trait - trait with appearance probability
|
|
24
|
+
*/
|
|
25
|
+
export interface WeightedTrait {
|
|
26
|
+
id: string;
|
|
27
|
+
name: string;
|
|
28
|
+
weight: number;
|
|
29
|
+
category: 'personality' | 'background' | 'quirk' | 'motivation' | 'secret';
|
|
30
|
+
description: string;
|
|
31
|
+
promptModifier: string;
|
|
32
|
+
minImportance?: NPCImportance;
|
|
33
|
+
incompatibleWith?: string[];
|
|
34
|
+
requiresRace?: NPCRace[];
|
|
35
|
+
requiresRole?: NPCRole[];
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Race definition with cultural traits
|
|
39
|
+
*/
|
|
40
|
+
export interface RaceDefinition {
|
|
41
|
+
id: NPCRace;
|
|
42
|
+
name: string;
|
|
43
|
+
namePrefixes: {
|
|
44
|
+
male: string[];
|
|
45
|
+
female: string[];
|
|
46
|
+
neutral: string[];
|
|
47
|
+
};
|
|
48
|
+
nameSuffixes: {
|
|
49
|
+
male: string[];
|
|
50
|
+
female: string[];
|
|
51
|
+
neutral: string[];
|
|
52
|
+
};
|
|
53
|
+
weight: number;
|
|
54
|
+
lifespan: string;
|
|
55
|
+
traits: string[];
|
|
56
|
+
appearance: string[];
|
|
57
|
+
floorAffinity?: {
|
|
58
|
+
min: number;
|
|
59
|
+
max: number;
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
/**
|
|
63
|
+
* Role definition with associated traits
|
|
64
|
+
*/
|
|
65
|
+
export interface RoleDefinition {
|
|
66
|
+
id: NPCRole;
|
|
67
|
+
name: string;
|
|
68
|
+
weight: number;
|
|
69
|
+
description: string;
|
|
70
|
+
typicalRaces: NPCRace[];
|
|
71
|
+
associatedTraits: string[];
|
|
72
|
+
floorAffinity?: {
|
|
73
|
+
min: number;
|
|
74
|
+
max: number;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Knowledge tier - what an NPC knows based on floor and importance
|
|
79
|
+
*/
|
|
80
|
+
export interface KnowledgeTier {
|
|
81
|
+
floorRange: [number, number];
|
|
82
|
+
topics: string[];
|
|
83
|
+
secrets: string[];
|
|
84
|
+
rumors: string[];
|
|
85
|
+
questTypes: string[];
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Extended NPC definition
|
|
89
|
+
*/
|
|
90
|
+
export interface ExtendedNPC {
|
|
91
|
+
id: string;
|
|
92
|
+
name: string;
|
|
93
|
+
race: NPCRace;
|
|
94
|
+
gender: NPCGender;
|
|
95
|
+
role: NPCRole;
|
|
96
|
+
importance: NPCImportance;
|
|
97
|
+
age: number;
|
|
98
|
+
isFixed: boolean;
|
|
99
|
+
fixedRoomId?: string;
|
|
100
|
+
currentFloor: number;
|
|
101
|
+
traits: WeightedTrait[];
|
|
102
|
+
appearance: string;
|
|
103
|
+
speechPattern: string;
|
|
104
|
+
backstory: string;
|
|
105
|
+
systemPrompt: string;
|
|
106
|
+
knowledgeTier: KnowledgeTier;
|
|
107
|
+
dialogHistory: DialogEntry[];
|
|
108
|
+
playerRelationship: number;
|
|
109
|
+
metPlayer: boolean;
|
|
110
|
+
lastInteractionTime?: number;
|
|
111
|
+
availableQuests: Quest[];
|
|
112
|
+
givenQuests: string[];
|
|
113
|
+
isAlive: boolean;
|
|
114
|
+
deathProbability: number;
|
|
115
|
+
createdAt: number;
|
|
116
|
+
diedAt?: number;
|
|
117
|
+
deathCause?: string;
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Dialog entry
|
|
121
|
+
*/
|
|
122
|
+
export interface DialogEntry {
|
|
123
|
+
role: 'player' | 'npc';
|
|
124
|
+
content: string;
|
|
125
|
+
timestamp: number;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Fixed/Important NPC template
|
|
129
|
+
*/
|
|
130
|
+
export interface FixedNPCTemplate {
|
|
131
|
+
id: string;
|
|
132
|
+
name: string;
|
|
133
|
+
role: NPCRole;
|
|
134
|
+
roomId: string;
|
|
135
|
+
backstory: string;
|
|
136
|
+
appearance: string;
|
|
137
|
+
personality: string;
|
|
138
|
+
speechPattern: string;
|
|
139
|
+
customSystemPrompt: string;
|
|
140
|
+
questTemplates: QuestTemplate[];
|
|
141
|
+
specialKnowledge: string[];
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Quest template for NPC-given quests
|
|
145
|
+
*/
|
|
146
|
+
export interface QuestTemplate {
|
|
147
|
+
id: string;
|
|
148
|
+
name: string;
|
|
149
|
+
description: string;
|
|
150
|
+
type: 'kill' | 'collect' | 'explore' | 'deliver' | 'escort' | 'survive';
|
|
151
|
+
minPlayerLevel: number;
|
|
152
|
+
requiresPreviousQuest?: string;
|
|
153
|
+
objectives: {
|
|
154
|
+
type: string;
|
|
155
|
+
target: string;
|
|
156
|
+
count: number;
|
|
157
|
+
}[];
|
|
158
|
+
rewards: {
|
|
159
|
+
type: 'exp' | 'gold' | 'item' | 'affix' | 'reputation';
|
|
160
|
+
value: number | string;
|
|
161
|
+
}[];
|
|
162
|
+
timeLimit: number;
|
|
163
|
+
giveDialog: string;
|
|
164
|
+
progressDialog: string;
|
|
165
|
+
completeDialog: string;
|
|
166
|
+
failDialog: string;
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* NPC generation config
|
|
170
|
+
*/
|
|
171
|
+
export interface NPCGenerationConfig {
|
|
172
|
+
floor: number;
|
|
173
|
+
importanceWeights: Record<NPCImportance, number>;
|
|
174
|
+
roleWeights: Record<NPCRole, number>;
|
|
175
|
+
traitCount: {
|
|
176
|
+
min: number;
|
|
177
|
+
max: number;
|
|
178
|
+
};
|
|
179
|
+
backgroundCount: {
|
|
180
|
+
min: number;
|
|
181
|
+
max: number;
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* NPC save data for persistence
|
|
186
|
+
*/
|
|
187
|
+
export interface NPCSaveData {
|
|
188
|
+
npcs: ExtendedNPC[];
|
|
189
|
+
dailyDeathCheckTime: number;
|
|
190
|
+
totalNPCsGenerated: number;
|
|
191
|
+
totalNPCsDied: number;
|
|
192
|
+
}
|
|
193
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"/","sources":["npc/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NPC System Type Definitions
|
|
3
|
+
* Western Fantasy / D&D Style
|
|
4
|
+
*/
|
|
5
|
+
|
|
6
|
+
!function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="d8f03c97-adc9-5c47-b03c-98c82535059c")}catch(e){}}();
|
|
7
|
+
export {};
|
|
8
|
+
//# sourceMappingURL=types.js.map
|
|
9
|
+
//# debugId=d8f03c97-adc9-5c47-b03c-98c82535059c
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sources":["npc/types.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * NPC System Type Definitions\r\n * Western Fantasy / D&D Style\r\n */\r\n\r\nimport type { Quest } from '../core/types.js';\r\n\r\n/**\r\n * NPC importance level - affects backstory complexity and survival\r\n */\r\nexport type NPCImportance = 'legendary' | 'major' | 'minor' | 'background';\r\n\r\n/**\r\n * NPC gender\r\n */\r\nexport type NPCGender = 'male' | 'female' | 'non-binary' | 'unknown';\r\n\r\n/**\r\n * NPC race (D&D / Western Fantasy style)\r\n */\r\nexport type NPCRace = \r\n | 'human'\r\n | 'elf'\r\n | 'dwarf'\r\n | 'halfling'\r\n | 'gnome'\r\n | 'half-elf'\r\n | 'half-orc'\r\n | 'tiefling'\r\n | 'dragonborn'\r\n | 'goblin'\r\n | 'orc'\r\n | 'undead';\r\n\r\n/**\r\n * NPC role/archetype\r\n */\r\nexport type NPCRole = \r\n | 'merchant' \r\n | 'sage' \r\n | 'guard' \r\n | 'traveler' \r\n | 'blacksmith'\r\n | 'quest_giver'\r\n | 'hermit'\r\n | 'refugee'\r\n | 'hunter'\r\n | 'scholar'\r\n | 'healer'\r\n | 'thief'\r\n | 'knight'\r\n | 'cultist'\r\n | 'bard'\r\n | 'priest'\r\n | 'mercenary'\r\n | 'noble';\r\n\r\n/**\r\n * Weighted trait - trait with appearance probability\r\n */\r\nexport interface WeightedTrait {\r\n id: string;\r\n name: string;\r\n weight: number; // Probability weight (higher = more common)\r\n category: 'personality' | 'background' | 'quirk' | 'motivation' | 'secret';\r\n description: string;\r\n promptModifier: string;\r\n minImportance?: NPCImportance; // Only for NPCs of this importance or higher\r\n incompatibleWith?: string[]; // Trait IDs that can't coexist\r\n requiresRace?: NPCRace[]; // Only for specific races\r\n requiresRole?: NPCRole[]; // Only for specific roles\r\n}\r\n\r\n/**\r\n * Race definition with cultural traits\r\n */\r\nexport interface RaceDefinition {\r\n id: NPCRace;\r\n name: string;\r\n namePrefixes: { male: string[]; female: string[]; neutral: string[] };\r\n nameSuffixes: { male: string[]; female: string[]; neutral: string[] };\r\n weight: number; // Appearance probability\r\n lifespan: string; // Description\r\n traits: string[]; // Cultural/racial trait IDs that are more common\r\n appearance: string[]; // Appearance descriptors\r\n floorAffinity?: { min: number; max: number }; // Which floors they appear on\r\n}\r\n\r\n/**\r\n * Role definition with associated traits\r\n */\r\nexport interface RoleDefinition {\r\n id: NPCRole;\r\n name: string;\r\n weight: number;\r\n description: string;\r\n typicalRaces: NPCRace[]; // Races more likely to have this role\r\n associatedTraits: string[]; // Trait IDs more common for this role\r\n floorAffinity?: { min: number; max: number };\r\n}\r\n\r\n/**\r\n * Knowledge tier - what an NPC knows based on floor and importance\r\n */\r\nexport interface KnowledgeTier {\r\n floorRange: [number, number]; // [min, max] floors\r\n topics: string[]; // Topics this NPC can discuss\r\n secrets: string[]; // Secrets they might reveal\r\n rumors: string[]; // Rumors they've heard\r\n questTypes: string[]; // Types of quests they can give\r\n}\r\n\r\n/**\r\n * Extended NPC definition\r\n */\r\nexport interface ExtendedNPC {\r\n id: string;\r\n name: string;\r\n \r\n // Core identity\r\n race: NPCRace;\r\n gender: NPCGender;\r\n role: NPCRole;\r\n importance: NPCImportance;\r\n age: number; // Approximate age in human years\r\n \r\n // Location\r\n isFixed: boolean; // True for important fixed NPCs\r\n fixedRoomId?: string;\r\n currentFloor: number;\r\n \r\n // Personality & Background (weighted traits)\r\n traits: WeightedTrait[];\r\n appearance: string;\r\n speechPattern: string;\r\n backstory: string; // Generated based on importance\r\n \r\n // AI Integration\r\n systemPrompt: string;\r\n knowledgeTier: KnowledgeTier;\r\n \r\n // Dialog & Memory\r\n dialogHistory: DialogEntry[];\r\n playerRelationship: number; // -100 to 100\r\n metPlayer: boolean;\r\n lastInteractionTime?: number;\r\n \r\n // Quests\r\n availableQuests: Quest[];\r\n givenQuests: string[]; // Quest IDs given to player\r\n \r\n // Lifecycle\r\n isAlive: boolean;\r\n deathProbability: number; // 0-1, checked daily at midnight\r\n createdAt: number;\r\n diedAt?: number;\r\n deathCause?: string;\r\n}\r\n\r\n/**\r\n * Dialog entry\r\n */\r\nexport interface DialogEntry {\r\n role: 'player' | 'npc';\r\n content: string;\r\n timestamp: number;\r\n}\r\n\r\n/**\r\n * Fixed/Important NPC template\r\n */\r\nexport interface FixedNPCTemplate {\r\n id: string;\r\n name: string;\r\n role: NPCRole;\r\n roomId: string;\r\n \r\n // Full custom backstory\r\n backstory: string;\r\n appearance: string;\r\n personality: string;\r\n speechPattern: string;\r\n \r\n // Custom system prompt (overrides generation)\r\n customSystemPrompt: string;\r\n \r\n // Quest templates they can give\r\n questTemplates: QuestTemplate[];\r\n \r\n // Special knowledge\r\n specialKnowledge: string[];\r\n}\r\n\r\n/**\r\n * Quest template for NPC-given quests\r\n */\r\nexport interface QuestTemplate {\r\n id: string;\r\n name: string;\r\n description: string;\r\n type: 'kill' | 'collect' | 'explore' | 'deliver' | 'escort' | 'survive';\r\n \r\n // Requirements\r\n minPlayerLevel: number;\r\n requiresPreviousQuest?: string;\r\n \r\n // Objectives (with placeholders)\r\n objectives: {\r\n type: string;\r\n target: string; // Can use {enemy}, {item}, {location} placeholders\r\n count: number;\r\n }[];\r\n \r\n // Rewards\r\n rewards: {\r\n type: 'exp' | 'gold' | 'item' | 'affix' | 'reputation';\r\n value: number | string;\r\n }[];\r\n \r\n // Time limit in real seconds (0 = no limit)\r\n timeLimit: number;\r\n \r\n // Dialog\r\n giveDialog: string;\r\n progressDialog: string;\r\n completeDialog: string;\r\n failDialog: string;\r\n}\r\n\r\n/**\r\n * NPC generation config\r\n */\r\nexport interface NPCGenerationConfig {\r\n floor: number;\r\n importanceWeights: Record<NPCImportance, number>;\r\n roleWeights: Record<NPCRole, number>;\r\n traitCount: { min: number; max: number };\r\n backgroundCount: { min: number; max: number };\r\n}\r\n\r\n/**\r\n * NPC save data for persistence\r\n */\r\nexport interface NPCSaveData {\r\n npcs: ExtendedNPC[];\r\n dailyDeathCheckTime: number; // Last midnight check timestamp\r\n totalNPCsGenerated: number;\r\n totalNPCsDied: number;\r\n}\r\n"],"names":[],"mappings":"AAAA;;;GAGG","debug_id":"d8f03c97-adc9-5c47-b03c-98c82535059c"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quest Manager - Handles quest lifecycle, progress tracking, and rewards
|
|
3
|
+
*/
|
|
4
|
+
import type { Quest, QuestReward, QuestSaveData } from './types.js';
|
|
5
|
+
import type { Player } from '../core/types.js';
|
|
6
|
+
export declare class QuestManager {
|
|
7
|
+
private activeQuests;
|
|
8
|
+
private completedQuestIds;
|
|
9
|
+
private failedQuestIds;
|
|
10
|
+
private questLog;
|
|
11
|
+
private eventListeners;
|
|
12
|
+
/**
|
|
13
|
+
* Accept a quest
|
|
14
|
+
*/
|
|
15
|
+
acceptQuest(quest: Quest): boolean;
|
|
16
|
+
/**
|
|
17
|
+
* Update quest progress
|
|
18
|
+
*/
|
|
19
|
+
updateProgress(eventType: 'kill' | 'collect' | 'reach' | 'talk', targetId: string, amount?: number): Quest[];
|
|
20
|
+
/**
|
|
21
|
+
* Check if target matches objective target (supports wildcards)
|
|
22
|
+
*/
|
|
23
|
+
private matchesTarget;
|
|
24
|
+
/**
|
|
25
|
+
* Turn in a completed quest
|
|
26
|
+
*/
|
|
27
|
+
completeQuest(questId: string, player: Player): {
|
|
28
|
+
success: boolean;
|
|
29
|
+
player: Player;
|
|
30
|
+
rewards: QuestReward[];
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* Apply a single reward
|
|
34
|
+
*/
|
|
35
|
+
private applyReward;
|
|
36
|
+
/**
|
|
37
|
+
* Fail a quest
|
|
38
|
+
*/
|
|
39
|
+
failQuest(questId: string, reason?: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Abandon a quest
|
|
42
|
+
*/
|
|
43
|
+
abandonQuest(questId: string): boolean;
|
|
44
|
+
/**
|
|
45
|
+
* Check for timed quest failures
|
|
46
|
+
*/
|
|
47
|
+
checkTimeouts(): Quest[];
|
|
48
|
+
/**
|
|
49
|
+
* Get time remaining for a quest
|
|
50
|
+
*/
|
|
51
|
+
getTimeRemaining(questId: string): number | null;
|
|
52
|
+
/**
|
|
53
|
+
* Get active quests
|
|
54
|
+
*/
|
|
55
|
+
getActiveQuests(): Quest[];
|
|
56
|
+
/**
|
|
57
|
+
* Get quest by ID
|
|
58
|
+
*/
|
|
59
|
+
getQuest(questId: string): Quest | undefined;
|
|
60
|
+
/**
|
|
61
|
+
* Check if quest is completed (ever)
|
|
62
|
+
*/
|
|
63
|
+
isQuestCompleted(questId: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Get quests from a specific NPC
|
|
66
|
+
*/
|
|
67
|
+
getQuestsFromNPC(npcId: string): Quest[];
|
|
68
|
+
/**
|
|
69
|
+
* Log a quest event
|
|
70
|
+
*/
|
|
71
|
+
private logEvent;
|
|
72
|
+
on(event: string, callback: (data: unknown) => void): void;
|
|
73
|
+
off(event: string, callback: (data: unknown) => void): void;
|
|
74
|
+
private emit;
|
|
75
|
+
save(): QuestSaveData;
|
|
76
|
+
load(data: QuestSaveData): void;
|
|
77
|
+
}
|
|
78
|
+
export declare function getQuestManager(): QuestManager;
|
|
79
|
+
//# sourceMappingURL=QuestManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"QuestManager.d.ts","sourceRoot":"/","sources":["quest/QuestManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,KAAK,EAGL,WAAW,EAEX,aAAa,EACd,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAG/C,qBAAa,YAAY;IACvB,OAAO,CAAC,YAAY,CAAiC;IACrD,OAAO,CAAC,iBAAiB,CAA0B;IACnD,OAAO,CAAC,cAAc,CAA0B;IAChD,OAAO,CAAC,QAAQ,CAAuB;IACvC,OAAO,CAAC,cAAc,CAAwD;IAE9E;;OAEG;IACH,WAAW,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO;IAyBlC;;OAEG;IACH,cAAc,CACZ,SAAS,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,MAAM,EAChD,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,MAAU,GACjB,KAAK,EAAE;IA0CV;;OAEG;IACH,OAAO,CAAC,aAAa;IAkBrB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG;QAAE,OAAO,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,WAAW,EAAE,CAAA;KAAE;IAwB5G;;OAEG;IACH,OAAO,CAAC,WAAW;IAoBnB;;OAEG;IACH,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,GAAE,MAAkB,GAAG,OAAO;IAe/D;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAYtC;;OAEG;IACH,aAAa,IAAI,KAAK,EAAE;IAiBxB;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAShD;;OAEG;IACH,eAAe,IAAI,KAAK,EAAE;IAI1B;;OAEG;IACH,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS;IAI5C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI1C;;OAEG;IACH,gBAAgB,CAAC,KAAK,EAAE,MAAM,GAAG,KAAK,EAAE;IAIxC;;OAEG;IACH,OAAO,CAAC,QAAQ;IAkBhB,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAO1D,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC,IAAI,EAAE,OAAO,KAAK,IAAI,GAAG,IAAI;IAI3D,OAAO,CAAC,IAAI;IAQZ,IAAI,IAAI,aAAa;IASrB,IAAI,CAAC,IAAI,EAAE,aAAa,GAAG,IAAI;CAUhC;AAKD,wBAAgB,eAAe,IAAI,YAAY,CAK9C"}
|