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,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NewGameFlowManager - Manages the new game creation flow
|
|
3
|
+
*
|
|
4
|
+
* This class encapsulates the entire New Game flow, ensuring consistency
|
|
5
|
+
* regardless of entry point (first launch, menu "New Game", etc.)
|
|
6
|
+
*
|
|
7
|
+
* Flow: Prologue -> Character Creation -> Success
|
|
8
|
+
*
|
|
9
|
+
* Uses Router for screen navigation tracking.
|
|
10
|
+
* Uses InputManager's focus stack for exclusive input during full-screen overlays.
|
|
11
|
+
*/
|
|
12
|
+
|
|
13
|
+
!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]="9f4a84e1-7b51-5502-8714-ab968e4c6c68")}catch(e){}}();
|
|
14
|
+
import { PrologueScreen } from '../app/screens/PrologueScreen.js';
|
|
15
|
+
import { CharacterCreationScreen } from '../app/screens/CharacterCreationScreen.js';
|
|
16
|
+
import { getRouter } from '../app/Router.js';
|
|
17
|
+
/**
|
|
18
|
+
* Manages the New Game creation flow
|
|
19
|
+
*/
|
|
20
|
+
export class NewGameFlowManager {
|
|
21
|
+
screen;
|
|
22
|
+
input;
|
|
23
|
+
router = getRouter();
|
|
24
|
+
currentKeyHandler = null;
|
|
25
|
+
constructor(screen, input) {
|
|
26
|
+
this.screen = screen;
|
|
27
|
+
this.input = input;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Run the complete New Game flow
|
|
31
|
+
*
|
|
32
|
+
* @param options - Flow options
|
|
33
|
+
* @returns Promise<NewGameFlowResult> - The result of the flow
|
|
34
|
+
*/
|
|
35
|
+
async run(options = {}) {
|
|
36
|
+
try {
|
|
37
|
+
// Step 1: Prologue (unless skipped)
|
|
38
|
+
if (!options.skipPrologue) {
|
|
39
|
+
this.router.navigate({ type: 'prologue' });
|
|
40
|
+
const prologueCompleted = await this.runPrologue();
|
|
41
|
+
if (!prologueCompleted) {
|
|
42
|
+
this.router.navigate({ type: 'explore' });
|
|
43
|
+
return { success: false, cancelled: true };
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// Step 2: Character Creation
|
|
47
|
+
this.router.navigate({ type: 'characterCreation' });
|
|
48
|
+
const actor = await this.runCharacterCreation();
|
|
49
|
+
if (!actor) {
|
|
50
|
+
this.router.navigate({ type: 'explore' });
|
|
51
|
+
return { success: false, cancelled: true };
|
|
52
|
+
}
|
|
53
|
+
// Success! Navigate back to explore
|
|
54
|
+
this.router.navigate({ type: 'explore' });
|
|
55
|
+
return { success: true, actor };
|
|
56
|
+
}
|
|
57
|
+
catch (error) {
|
|
58
|
+
// Clean up any remaining handlers
|
|
59
|
+
this.cleanupKeyHandler();
|
|
60
|
+
this.router.navigate({ type: 'explore' });
|
|
61
|
+
throw error;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Run the prologue screen
|
|
66
|
+
* @returns true if completed, false if cancelled
|
|
67
|
+
*/
|
|
68
|
+
async runPrologue() {
|
|
69
|
+
return new Promise((resolve) => {
|
|
70
|
+
const prologueScreen = new PrologueScreen();
|
|
71
|
+
// Set up key handler for this screen
|
|
72
|
+
const keyHandler = async (key) => {
|
|
73
|
+
// Check for escape to cancel the whole flow
|
|
74
|
+
// This is handled internally by PrologueScreen
|
|
75
|
+
const handled = await prologueScreen.handleKey(key);
|
|
76
|
+
if (handled) {
|
|
77
|
+
prologueScreen.render();
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
this.currentKeyHandler = keyHandler;
|
|
81
|
+
this.input.setMode('raw');
|
|
82
|
+
// Push onto focus stack - this gives us exclusive input
|
|
83
|
+
this.input.pushFocus(keyHandler);
|
|
84
|
+
// Enter the screen
|
|
85
|
+
prologueScreen.onEnter().then(() => {
|
|
86
|
+
prologueScreen.render();
|
|
87
|
+
// Wait for completion
|
|
88
|
+
prologueScreen.waitForComplete()
|
|
89
|
+
.then(() => {
|
|
90
|
+
this.cleanupKeyHandler();
|
|
91
|
+
prologueScreen.onLeave();
|
|
92
|
+
resolve(true);
|
|
93
|
+
})
|
|
94
|
+
.catch(() => {
|
|
95
|
+
// Cancelled
|
|
96
|
+
this.cleanupKeyHandler();
|
|
97
|
+
prologueScreen.onLeave();
|
|
98
|
+
resolve(false);
|
|
99
|
+
});
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
/**
|
|
104
|
+
* Run the character creation screen
|
|
105
|
+
* @returns The created Actor, or null if cancelled
|
|
106
|
+
*/
|
|
107
|
+
async runCharacterCreation() {
|
|
108
|
+
return new Promise((resolve) => {
|
|
109
|
+
const creationScreen = new CharacterCreationScreen();
|
|
110
|
+
// Set up key handler for this screen
|
|
111
|
+
const keyHandler = async (key) => {
|
|
112
|
+
const handled = await creationScreen.handleKey(key);
|
|
113
|
+
if (handled) {
|
|
114
|
+
creationScreen.render();
|
|
115
|
+
}
|
|
116
|
+
};
|
|
117
|
+
this.currentKeyHandler = keyHandler;
|
|
118
|
+
this.input.setMode('raw');
|
|
119
|
+
// Push onto focus stack - this gives us exclusive input
|
|
120
|
+
this.input.pushFocus(keyHandler);
|
|
121
|
+
// Enter the screen
|
|
122
|
+
creationScreen.onEnter().then(() => {
|
|
123
|
+
creationScreen.render();
|
|
124
|
+
// Wait for completion
|
|
125
|
+
creationScreen.waitForCreation()
|
|
126
|
+
.then((actor) => {
|
|
127
|
+
this.cleanupKeyHandler();
|
|
128
|
+
creationScreen.onLeave();
|
|
129
|
+
resolve(actor);
|
|
130
|
+
})
|
|
131
|
+
.catch(() => {
|
|
132
|
+
// Cancelled
|
|
133
|
+
this.cleanupKeyHandler();
|
|
134
|
+
creationScreen.onLeave();
|
|
135
|
+
resolve(null);
|
|
136
|
+
});
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Clean up the current key handler by popping it from the focus stack
|
|
142
|
+
*/
|
|
143
|
+
cleanupKeyHandler() {
|
|
144
|
+
if (this.currentKeyHandler) {
|
|
145
|
+
// Pop our handler from the focus stack
|
|
146
|
+
// This restores input to whatever was below us on the stack
|
|
147
|
+
this.input.popFocus();
|
|
148
|
+
this.currentKeyHandler = null;
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
//# sourceMappingURL=NewGameFlowManager.js.map
|
|
153
|
+
//# debugId=9f4a84e1-7b51-5502-8714-ab968e4c6c68
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"NewGameFlowManager.js","sources":["core/NewGameFlowManager.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * NewGameFlowManager - Manages the new game creation flow\r\n *\r\n * This class encapsulates the entire New Game flow, ensuring consistency\r\n * regardless of entry point (first launch, menu \"New Game\", etc.)\r\n *\r\n * Flow: Prologue -> Character Creation -> Success\r\n *\r\n * Uses Router for screen navigation tracking.\r\n * Uses InputManager's focus stack for exclusive input during full-screen overlays.\r\n */\r\n\r\nimport type { Screen } from '../tui/Screen.js';\r\nimport type { InputManager, KeyEvent, KeyHandler } from '../tui/Input.js';\r\nimport type { Actor } from './types.js';\r\nimport { PrologueScreen } from '../app/screens/PrologueScreen.js';\r\nimport { CharacterCreationScreen } from '../app/screens/CharacterCreationScreen.js';\r\nimport { getRouter } from '../app/Router.js';\r\n\r\n/**\r\n * Result of the New Game flow\r\n */\r\nexport interface NewGameFlowResult {\r\n /** Whether the flow completed successfully */\r\n success: boolean;\r\n /** The created actor (if successful) */\r\n actor?: Actor;\r\n /** Whether the flow was cancelled by the user */\r\n cancelled?: boolean;\r\n}\r\n\r\n/**\r\n * Options for running the New Game flow\r\n */\r\nexport interface NewGameFlowOptions {\r\n /** Skip the prologue (for returning players who've seen it) */\r\n skipPrologue?: boolean;\r\n}\r\n\r\n/**\r\n * Manages the New Game creation flow\r\n */\r\nexport class NewGameFlowManager {\r\n private screen: Screen;\r\n private input: InputManager;\r\n private router = getRouter();\r\n private currentKeyHandler: KeyHandler | null = null;\r\n\r\n constructor(screen: Screen, input: InputManager) {\r\n this.screen = screen;\r\n this.input = input;\r\n }\r\n\r\n /**\r\n * Run the complete New Game flow\r\n *\r\n * @param options - Flow options\r\n * @returns Promise<NewGameFlowResult> - The result of the flow\r\n */\r\n async run(options: NewGameFlowOptions = {}): Promise<NewGameFlowResult> {\r\n try {\r\n // Step 1: Prologue (unless skipped)\r\n if (!options.skipPrologue) {\r\n this.router.navigate({ type: 'prologue' });\r\n const prologueCompleted = await this.runPrologue();\r\n if (!prologueCompleted) {\r\n this.router.navigate({ type: 'explore' });\r\n return { success: false, cancelled: true };\r\n }\r\n }\r\n\r\n // Step 2: Character Creation\r\n this.router.navigate({ type: 'characterCreation' });\r\n const actor = await this.runCharacterCreation();\r\n if (!actor) {\r\n this.router.navigate({ type: 'explore' });\r\n return { success: false, cancelled: true };\r\n }\r\n\r\n // Success! Navigate back to explore\r\n this.router.navigate({ type: 'explore' });\r\n return { success: true, actor };\r\n\r\n } catch (error) {\r\n // Clean up any remaining handlers\r\n this.cleanupKeyHandler();\r\n this.router.navigate({ type: 'explore' });\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Run the prologue screen\r\n * @returns true if completed, false if cancelled\r\n */\r\n private async runPrologue(): Promise<boolean> {\r\n return new Promise((resolve) => {\r\n const prologueScreen = new PrologueScreen();\r\n\r\n // Set up key handler for this screen\r\n const keyHandler: KeyHandler = async (key: KeyEvent) => {\r\n // Check for escape to cancel the whole flow\r\n // This is handled internally by PrologueScreen\r\n\r\n const handled = await prologueScreen.handleKey(key);\r\n if (handled) {\r\n prologueScreen.render();\r\n }\r\n };\r\n\r\n this.currentKeyHandler = keyHandler;\r\n this.input.setMode('raw');\r\n\r\n // Push onto focus stack - this gives us exclusive input\r\n this.input.pushFocus(keyHandler);\r\n\r\n // Enter the screen\r\n prologueScreen.onEnter().then(() => {\r\n prologueScreen.render();\r\n\r\n // Wait for completion\r\n prologueScreen.waitForComplete()\r\n .then(() => {\r\n this.cleanupKeyHandler();\r\n prologueScreen.onLeave();\r\n resolve(true);\r\n })\r\n .catch(() => {\r\n // Cancelled\r\n this.cleanupKeyHandler();\r\n prologueScreen.onLeave();\r\n resolve(false);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Run the character creation screen\r\n * @returns The created Actor, or null if cancelled\r\n */\r\n private async runCharacterCreation(): Promise<Actor | null> {\r\n return new Promise((resolve) => {\r\n const creationScreen = new CharacterCreationScreen();\r\n\r\n // Set up key handler for this screen\r\n const keyHandler: KeyHandler = async (key: KeyEvent) => {\r\n const handled = await creationScreen.handleKey(key);\r\n if (handled) {\r\n creationScreen.render();\r\n }\r\n };\r\n\r\n this.currentKeyHandler = keyHandler;\r\n this.input.setMode('raw');\r\n\r\n // Push onto focus stack - this gives us exclusive input\r\n this.input.pushFocus(keyHandler);\r\n\r\n // Enter the screen\r\n creationScreen.onEnter().then(() => {\r\n creationScreen.render();\r\n\r\n // Wait for completion\r\n creationScreen.waitForCreation()\r\n .then((actor) => {\r\n this.cleanupKeyHandler();\r\n creationScreen.onLeave();\r\n resolve(actor);\r\n })\r\n .catch(() => {\r\n // Cancelled\r\n this.cleanupKeyHandler();\r\n creationScreen.onLeave();\r\n resolve(null);\r\n });\r\n });\r\n });\r\n }\r\n\r\n /**\r\n * Clean up the current key handler by popping it from the focus stack\r\n */\r\n private cleanupKeyHandler(): void {\r\n if (this.currentKeyHandler) {\r\n // Pop our handler from the focus stack\r\n // This restores input to whatever was below us on the stack\r\n this.input.popFocus();\r\n this.currentKeyHandler = null;\r\n }\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"9f4a84e1-7b51-5502-8714-ab968e4c6c68"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player management utilities
|
|
3
|
+
*/
|
|
4
|
+
import type { Player, PlayerStats, Weapon, InventoryItem, Quest } from './types.js';
|
|
5
|
+
/**
|
|
6
|
+
* Calculate total stats including equipment bonuses
|
|
7
|
+
*/
|
|
8
|
+
export declare function calculateTotalStats(player: Player): PlayerStats;
|
|
9
|
+
/**
|
|
10
|
+
* Check if player can level up
|
|
11
|
+
*/
|
|
12
|
+
export declare function canLevelUp(player: Player): boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Level up the player
|
|
15
|
+
*/
|
|
16
|
+
export declare function levelUp(player: Player): Player;
|
|
17
|
+
/**
|
|
18
|
+
* Add experience to player
|
|
19
|
+
*/
|
|
20
|
+
export declare function addExperience(player: Player, amount: number): Player;
|
|
21
|
+
/**
|
|
22
|
+
* Add gold to player
|
|
23
|
+
*/
|
|
24
|
+
export declare function addGold(player: Player, amount: number): Player;
|
|
25
|
+
/**
|
|
26
|
+
* Remove gold from player (returns null if insufficient)
|
|
27
|
+
*/
|
|
28
|
+
export declare function removeGold(player: Player, amount: number): Player | null;
|
|
29
|
+
/**
|
|
30
|
+
* Damage player
|
|
31
|
+
*/
|
|
32
|
+
export declare function damagePlayer(player: Player, amount: number): Player;
|
|
33
|
+
/**
|
|
34
|
+
* Heal player
|
|
35
|
+
*/
|
|
36
|
+
export declare function healPlayer(player: Player, amount: number): Player;
|
|
37
|
+
/**
|
|
38
|
+
* Check if player is alive
|
|
39
|
+
*/
|
|
40
|
+
export declare function isPlayerAlive(player: Player): boolean;
|
|
41
|
+
/**
|
|
42
|
+
* Equip a weapon
|
|
43
|
+
*/
|
|
44
|
+
export declare function equipWeapon(player: Player, weapon: Weapon): Player;
|
|
45
|
+
/**
|
|
46
|
+
* Add item to inventory
|
|
47
|
+
*/
|
|
48
|
+
export declare function addToInventory(player: Player, item: InventoryItem): Player;
|
|
49
|
+
/**
|
|
50
|
+
* Remove item from inventory
|
|
51
|
+
*/
|
|
52
|
+
export declare function removeFromInventory(player: Player, itemId: string, quantity?: number): Player | null;
|
|
53
|
+
/**
|
|
54
|
+
* Accept a quest
|
|
55
|
+
*/
|
|
56
|
+
export declare function acceptQuest(player: Player, quest: Quest): Player;
|
|
57
|
+
/**
|
|
58
|
+
* Complete a quest
|
|
59
|
+
*/
|
|
60
|
+
export declare function completeQuest(player: Player, questId: string): Player;
|
|
61
|
+
/**
|
|
62
|
+
* Format player stats for display
|
|
63
|
+
*/
|
|
64
|
+
export declare function formatPlayerStats(player: Player): string;
|
|
65
|
+
//# sourceMappingURL=Player.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Player.d.ts","sourceRoot":"/","sources":["core/Player.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EAEX,MAAM,EACN,aAAa,EACb,KAAK,EAEN,MAAM,YAAY,CAAC;AAEpB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,WAAW,CAgB/D;AAyBD;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAElD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAqB9C;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAepE;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAUxE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASnE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CASjE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAErD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAgClE;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,aAAa,GAAG,MAAM,CAmB1E;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,MAAM,EAAE,MAAM,EACd,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,MAAU,GACnB,MAAM,GAAG,IAAI,CAkBf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,GAAG,MAAM,CAehE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAarE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxD"}
|
|
@@ -0,0 +1,261 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Player management utilities
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Calculate total stats including equipment bonuses
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
!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]="46b1ec49-8f79-55a3-9354-4be82d85f57d")}catch(e){}}();
|
|
9
|
+
export function calculateTotalStats(player) {
|
|
10
|
+
const base = { ...player.stats };
|
|
11
|
+
// Add weapon bonuses
|
|
12
|
+
if (player.equipment.weapon) {
|
|
13
|
+
base.attack += player.equipment.weapon.baseAttack;
|
|
14
|
+
base.attack += calculateAffixBonuses(player.equipment.weapon.affixes, 'attack');
|
|
15
|
+
}
|
|
16
|
+
// Add armor bonuses
|
|
17
|
+
if (player.equipment.armor) {
|
|
18
|
+
base.defense += player.equipment.armor.baseDefense;
|
|
19
|
+
base.defense += calculateAffixBonuses(player.equipment.armor.affixes, 'defense');
|
|
20
|
+
}
|
|
21
|
+
return base;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Calculate stat bonuses from affixes
|
|
25
|
+
*/
|
|
26
|
+
function calculateAffixBonuses(affixes, stat) {
|
|
27
|
+
// Import would cause circular dependency, so we use dynamic import pattern
|
|
28
|
+
// For static calculation, we use predefined values based on rarity
|
|
29
|
+
const rarityBonusMap = {
|
|
30
|
+
common: { attack: 3, defense: 2, speed: 2, maxHp: 5, maxMp: 3 },
|
|
31
|
+
uncommon: { attack: 5, defense: 3, speed: 3, maxHp: 10, maxMp: 5 },
|
|
32
|
+
rare: { attack: 8, defense: 5, speed: 5, maxHp: 15, maxMp: 8 },
|
|
33
|
+
epic: { attack: 12, defense: 8, speed: 7, maxHp: 25, maxMp: 12 },
|
|
34
|
+
legendary: { attack: 20, defense: 12, speed: 10, maxHp: 40, maxMp: 20 },
|
|
35
|
+
};
|
|
36
|
+
let total = 0;
|
|
37
|
+
for (const affix of affixes) {
|
|
38
|
+
const bonuses = rarityBonusMap[affix.rarity] || rarityBonusMap.common;
|
|
39
|
+
total += bonuses[stat] || 0;
|
|
40
|
+
}
|
|
41
|
+
return total;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Check if player can level up
|
|
45
|
+
*/
|
|
46
|
+
export function canLevelUp(player) {
|
|
47
|
+
return player.stats.exp >= player.stats.expToNextLevel;
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Level up the player
|
|
51
|
+
*/
|
|
52
|
+
export function levelUp(player) {
|
|
53
|
+
if (!canLevelUp(player))
|
|
54
|
+
return player;
|
|
55
|
+
const newStats = {
|
|
56
|
+
...player.stats,
|
|
57
|
+
level: player.stats.level + 1,
|
|
58
|
+
exp: player.stats.exp - player.stats.expToNextLevel,
|
|
59
|
+
expToNextLevel: Math.floor(player.stats.expToNextLevel * 1.5),
|
|
60
|
+
maxHp: player.stats.maxHp + 10,
|
|
61
|
+
hp: player.stats.maxHp + 10, // Full heal on level up
|
|
62
|
+
maxMp: player.stats.maxMp + 5,
|
|
63
|
+
mp: player.stats.maxMp + 5,
|
|
64
|
+
attack: player.stats.attack + 2,
|
|
65
|
+
defense: player.stats.defense + 1,
|
|
66
|
+
speed: player.stats.speed + 1,
|
|
67
|
+
};
|
|
68
|
+
return {
|
|
69
|
+
...player,
|
|
70
|
+
stats: newStats,
|
|
71
|
+
};
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Add experience to player
|
|
75
|
+
*/
|
|
76
|
+
export function addExperience(player, amount) {
|
|
77
|
+
let updated = {
|
|
78
|
+
...player,
|
|
79
|
+
stats: {
|
|
80
|
+
...player.stats,
|
|
81
|
+
exp: player.stats.exp + amount,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
// Check for multiple level ups
|
|
85
|
+
while (canLevelUp(updated)) {
|
|
86
|
+
updated = levelUp(updated);
|
|
87
|
+
}
|
|
88
|
+
return updated;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Add gold to player
|
|
92
|
+
*/
|
|
93
|
+
export function addGold(player, amount) {
|
|
94
|
+
return {
|
|
95
|
+
...player,
|
|
96
|
+
stats: {
|
|
97
|
+
...player.stats,
|
|
98
|
+
gold: player.stats.gold + amount,
|
|
99
|
+
},
|
|
100
|
+
};
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Remove gold from player (returns null if insufficient)
|
|
104
|
+
*/
|
|
105
|
+
export function removeGold(player, amount) {
|
|
106
|
+
if (player.stats.gold < amount)
|
|
107
|
+
return null;
|
|
108
|
+
return {
|
|
109
|
+
...player,
|
|
110
|
+
stats: {
|
|
111
|
+
...player.stats,
|
|
112
|
+
gold: player.stats.gold - amount,
|
|
113
|
+
},
|
|
114
|
+
};
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Damage player
|
|
118
|
+
*/
|
|
119
|
+
export function damagePlayer(player, amount) {
|
|
120
|
+
const newHp = Math.max(0, player.stats.hp - amount);
|
|
121
|
+
return {
|
|
122
|
+
...player,
|
|
123
|
+
stats: {
|
|
124
|
+
...player.stats,
|
|
125
|
+
hp: newHp,
|
|
126
|
+
},
|
|
127
|
+
};
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Heal player
|
|
131
|
+
*/
|
|
132
|
+
export function healPlayer(player, amount) {
|
|
133
|
+
const newHp = Math.min(player.stats.maxHp, player.stats.hp + amount);
|
|
134
|
+
return {
|
|
135
|
+
...player,
|
|
136
|
+
stats: {
|
|
137
|
+
...player.stats,
|
|
138
|
+
hp: newHp,
|
|
139
|
+
},
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Check if player is alive
|
|
144
|
+
*/
|
|
145
|
+
export function isPlayerAlive(player) {
|
|
146
|
+
return player.stats.hp > 0;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Equip a weapon
|
|
150
|
+
*/
|
|
151
|
+
export function equipWeapon(player, weapon) {
|
|
152
|
+
const oldWeapon = player.equipment.weapon;
|
|
153
|
+
const newInventory = [...player.inventory];
|
|
154
|
+
// Add old weapon to inventory if exists
|
|
155
|
+
if (oldWeapon) {
|
|
156
|
+
newInventory.push({
|
|
157
|
+
id: oldWeapon.id,
|
|
158
|
+
type: 'weapon',
|
|
159
|
+
name: oldWeapon.name,
|
|
160
|
+
description: oldWeapon.description,
|
|
161
|
+
quantity: 1,
|
|
162
|
+
data: oldWeapon,
|
|
163
|
+
});
|
|
164
|
+
}
|
|
165
|
+
// Remove new weapon from inventory if it was there
|
|
166
|
+
const weaponIndex = newInventory.findIndex(item => item.type === 'weapon' && item.id === weapon.id);
|
|
167
|
+
if (weaponIndex !== -1) {
|
|
168
|
+
newInventory.splice(weaponIndex, 1);
|
|
169
|
+
}
|
|
170
|
+
return {
|
|
171
|
+
...player,
|
|
172
|
+
equipment: {
|
|
173
|
+
...player.equipment,
|
|
174
|
+
weapon,
|
|
175
|
+
},
|
|
176
|
+
inventory: newInventory,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Add item to inventory
|
|
181
|
+
*/
|
|
182
|
+
export function addToInventory(player, item) {
|
|
183
|
+
const existingIndex = player.inventory.findIndex(i => i.id === item.id && i.type === item.type);
|
|
184
|
+
if (existingIndex !== -1 && item.type !== 'weapon' && item.type !== 'armor') {
|
|
185
|
+
// Stack existing items (except equipment)
|
|
186
|
+
const newInventory = [...player.inventory];
|
|
187
|
+
newInventory[existingIndex] = {
|
|
188
|
+
...newInventory[existingIndex],
|
|
189
|
+
quantity: newInventory[existingIndex].quantity + item.quantity,
|
|
190
|
+
};
|
|
191
|
+
return { ...player, inventory: newInventory };
|
|
192
|
+
}
|
|
193
|
+
return {
|
|
194
|
+
...player,
|
|
195
|
+
inventory: [...player.inventory, item],
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
/**
|
|
199
|
+
* Remove item from inventory
|
|
200
|
+
*/
|
|
201
|
+
export function removeFromInventory(player, itemId, quantity = 1) {
|
|
202
|
+
const itemIndex = player.inventory.findIndex(i => i.id === itemId);
|
|
203
|
+
if (itemIndex === -1)
|
|
204
|
+
return null;
|
|
205
|
+
const item = player.inventory[itemIndex];
|
|
206
|
+
if (item.quantity < quantity)
|
|
207
|
+
return null;
|
|
208
|
+
const newInventory = [...player.inventory];
|
|
209
|
+
if (item.quantity === quantity) {
|
|
210
|
+
newInventory.splice(itemIndex, 1);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
newInventory[itemIndex] = {
|
|
214
|
+
...item,
|
|
215
|
+
quantity: item.quantity - quantity,
|
|
216
|
+
};
|
|
217
|
+
}
|
|
218
|
+
return { ...player, inventory: newInventory };
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Accept a quest
|
|
222
|
+
*/
|
|
223
|
+
export function acceptQuest(player, quest) {
|
|
224
|
+
if (player.activeQuests.some(q => q.id === quest.id)) {
|
|
225
|
+
return player; // Already have this quest
|
|
226
|
+
}
|
|
227
|
+
const activeQuest = {
|
|
228
|
+
...quest,
|
|
229
|
+
status: 'active',
|
|
230
|
+
startTime: Date.now(),
|
|
231
|
+
};
|
|
232
|
+
return {
|
|
233
|
+
...player,
|
|
234
|
+
activeQuests: [...player.activeQuests, activeQuest],
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Complete a quest
|
|
239
|
+
*/
|
|
240
|
+
export function completeQuest(player, questId) {
|
|
241
|
+
const questIndex = player.activeQuests.findIndex(q => q.id === questId);
|
|
242
|
+
if (questIndex === -1)
|
|
243
|
+
return player;
|
|
244
|
+
const quest = player.activeQuests[questIndex];
|
|
245
|
+
const newActiveQuests = [...player.activeQuests];
|
|
246
|
+
newActiveQuests.splice(questIndex, 1);
|
|
247
|
+
return {
|
|
248
|
+
...player,
|
|
249
|
+
activeQuests: newActiveQuests,
|
|
250
|
+
completedQuests: [...player.completedQuests, quest.id],
|
|
251
|
+
};
|
|
252
|
+
}
|
|
253
|
+
/**
|
|
254
|
+
* Format player stats for display
|
|
255
|
+
*/
|
|
256
|
+
export function formatPlayerStats(player) {
|
|
257
|
+
const s = player.stats;
|
|
258
|
+
return `Lv.${s.level} | HP: ${s.hp}/${s.maxHp} | MP: ${s.mp}/${s.maxMp} | ATK: ${s.attack} | DEF: ${s.defense}`;
|
|
259
|
+
}
|
|
260
|
+
//# sourceMappingURL=Player.js.map
|
|
261
|
+
//# debugId=46b1ec49-8f79-55a3-9354-4be82d85f57d
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Player.js","sources":["core/Player.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Player management utilities\r\n */\r\n\r\nimport type {\r\n Player,\r\n PlayerStats,\r\n Equipment,\r\n Weapon,\r\n InventoryItem,\r\n Quest,\r\n AppliedAffix,\r\n} from './types.js';\r\n\r\n/**\r\n * Calculate total stats including equipment bonuses\r\n */\r\nexport function calculateTotalStats(player: Player): PlayerStats {\r\n const base = { ...player.stats };\r\n\r\n // Add weapon bonuses\r\n if (player.equipment.weapon) {\r\n base.attack += player.equipment.weapon.baseAttack;\r\n base.attack += calculateAffixBonuses(player.equipment.weapon.affixes, 'attack');\r\n }\r\n\r\n // Add armor bonuses\r\n if (player.equipment.armor) {\r\n base.defense += player.equipment.armor.baseDefense;\r\n base.defense += calculateAffixBonuses(player.equipment.armor.affixes, 'defense');\r\n }\r\n\r\n return base;\r\n}\r\n\r\n/**\r\n * Calculate stat bonuses from affixes\r\n */\r\nfunction calculateAffixBonuses(affixes: AppliedAffix[], stat: string): number {\r\n // Import would cause circular dependency, so we use dynamic import pattern\r\n // For static calculation, we use predefined values based on rarity\r\n const rarityBonusMap: Record<string, Record<string, number>> = {\r\n common: { attack: 3, defense: 2, speed: 2, maxHp: 5, maxMp: 3 },\r\n uncommon: { attack: 5, defense: 3, speed: 3, maxHp: 10, maxMp: 5 },\r\n rare: { attack: 8, defense: 5, speed: 5, maxHp: 15, maxMp: 8 },\r\n epic: { attack: 12, defense: 8, speed: 7, maxHp: 25, maxMp: 12 },\r\n legendary: { attack: 20, defense: 12, speed: 10, maxHp: 40, maxMp: 20 },\r\n };\r\n\r\n let total = 0;\r\n for (const affix of affixes) {\r\n const bonuses = rarityBonusMap[affix.rarity] || rarityBonusMap.common;\r\n total += bonuses[stat] || 0;\r\n }\r\n \r\n return total;\r\n}\r\n\r\n/**\r\n * Check if player can level up\r\n */\r\nexport function canLevelUp(player: Player): boolean {\r\n return player.stats.exp >= player.stats.expToNextLevel;\r\n}\r\n\r\n/**\r\n * Level up the player\r\n */\r\nexport function levelUp(player: Player): Player {\r\n if (!canLevelUp(player)) return player;\r\n\r\n const newStats: PlayerStats = {\r\n ...player.stats,\r\n level: player.stats.level + 1,\r\n exp: player.stats.exp - player.stats.expToNextLevel,\r\n expToNextLevel: Math.floor(player.stats.expToNextLevel * 1.5),\r\n maxHp: player.stats.maxHp + 10,\r\n hp: player.stats.maxHp + 10, // Full heal on level up\r\n maxMp: player.stats.maxMp + 5,\r\n mp: player.stats.maxMp + 5,\r\n attack: player.stats.attack + 2,\r\n defense: player.stats.defense + 1,\r\n speed: player.stats.speed + 1,\r\n };\r\n\r\n return {\r\n ...player,\r\n stats: newStats,\r\n };\r\n}\r\n\r\n/**\r\n * Add experience to player\r\n */\r\nexport function addExperience(player: Player, amount: number): Player {\r\n let updated = {\r\n ...player,\r\n stats: {\r\n ...player.stats,\r\n exp: player.stats.exp + amount,\r\n },\r\n };\r\n\r\n // Check for multiple level ups\r\n while (canLevelUp(updated)) {\r\n updated = levelUp(updated);\r\n }\r\n\r\n return updated;\r\n}\r\n\r\n/**\r\n * Add gold to player\r\n */\r\nexport function addGold(player: Player, amount: number): Player {\r\n return {\r\n ...player,\r\n stats: {\r\n ...player.stats,\r\n gold: player.stats.gold + amount,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Remove gold from player (returns null if insufficient)\r\n */\r\nexport function removeGold(player: Player, amount: number): Player | null {\r\n if (player.stats.gold < amount) return null;\r\n\r\n return {\r\n ...player,\r\n stats: {\r\n ...player.stats,\r\n gold: player.stats.gold - amount,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Damage player\r\n */\r\nexport function damagePlayer(player: Player, amount: number): Player {\r\n const newHp = Math.max(0, player.stats.hp - amount);\r\n return {\r\n ...player,\r\n stats: {\r\n ...player.stats,\r\n hp: newHp,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Heal player\r\n */\r\nexport function healPlayer(player: Player, amount: number): Player {\r\n const newHp = Math.min(player.stats.maxHp, player.stats.hp + amount);\r\n return {\r\n ...player,\r\n stats: {\r\n ...player.stats,\r\n hp: newHp,\r\n },\r\n };\r\n}\r\n\r\n/**\r\n * Check if player is alive\r\n */\r\nexport function isPlayerAlive(player: Player): boolean {\r\n return player.stats.hp > 0;\r\n}\r\n\r\n/**\r\n * Equip a weapon\r\n */\r\nexport function equipWeapon(player: Player, weapon: Weapon): Player {\r\n const oldWeapon = player.equipment.weapon;\r\n const newInventory = [...player.inventory];\r\n\r\n // Add old weapon to inventory if exists\r\n if (oldWeapon) {\r\n newInventory.push({\r\n id: oldWeapon.id,\r\n type: 'weapon',\r\n name: oldWeapon.name,\r\n description: oldWeapon.description,\r\n quantity: 1,\r\n data: oldWeapon,\r\n });\r\n }\r\n\r\n // Remove new weapon from inventory if it was there\r\n const weaponIndex = newInventory.findIndex(\r\n item => item.type === 'weapon' && item.id === weapon.id\r\n );\r\n if (weaponIndex !== -1) {\r\n newInventory.splice(weaponIndex, 1);\r\n }\r\n\r\n return {\r\n ...player,\r\n equipment: {\r\n ...player.equipment,\r\n weapon,\r\n },\r\n inventory: newInventory,\r\n };\r\n}\r\n\r\n/**\r\n * Add item to inventory\r\n */\r\nexport function addToInventory(player: Player, item: InventoryItem): Player {\r\n const existingIndex = player.inventory.findIndex(\r\n i => i.id === item.id && i.type === item.type\r\n );\r\n\r\n if (existingIndex !== -1 && item.type !== 'weapon' && item.type !== 'armor') {\r\n // Stack existing items (except equipment)\r\n const newInventory = [...player.inventory];\r\n newInventory[existingIndex] = {\r\n ...newInventory[existingIndex],\r\n quantity: newInventory[existingIndex].quantity + item.quantity,\r\n };\r\n return { ...player, inventory: newInventory };\r\n }\r\n\r\n return {\r\n ...player,\r\n inventory: [...player.inventory, item],\r\n };\r\n}\r\n\r\n/**\r\n * Remove item from inventory\r\n */\r\nexport function removeFromInventory(\r\n player: Player,\r\n itemId: string,\r\n quantity: number = 1\r\n): Player | null {\r\n const itemIndex = player.inventory.findIndex(i => i.id === itemId);\r\n if (itemIndex === -1) return null;\r\n\r\n const item = player.inventory[itemIndex];\r\n if (item.quantity < quantity) return null;\r\n\r\n const newInventory = [...player.inventory];\r\n if (item.quantity === quantity) {\r\n newInventory.splice(itemIndex, 1);\r\n } else {\r\n newInventory[itemIndex] = {\r\n ...item,\r\n quantity: item.quantity - quantity,\r\n };\r\n }\r\n\r\n return { ...player, inventory: newInventory };\r\n}\r\n\r\n/**\r\n * Accept a quest\r\n */\r\nexport function acceptQuest(player: Player, quest: Quest): Player {\r\n if (player.activeQuests.some(q => q.id === quest.id)) {\r\n return player; // Already have this quest\r\n }\r\n\r\n const activeQuest: Quest = {\r\n ...quest,\r\n status: 'active',\r\n startTime: Date.now(),\r\n };\r\n\r\n return {\r\n ...player,\r\n activeQuests: [...player.activeQuests, activeQuest],\r\n };\r\n}\r\n\r\n/**\r\n * Complete a quest\r\n */\r\nexport function completeQuest(player: Player, questId: string): Player {\r\n const questIndex = player.activeQuests.findIndex(q => q.id === questId);\r\n if (questIndex === -1) return player;\r\n\r\n const quest = player.activeQuests[questIndex];\r\n const newActiveQuests = [...player.activeQuests];\r\n newActiveQuests.splice(questIndex, 1);\r\n\r\n return {\r\n ...player,\r\n activeQuests: newActiveQuests,\r\n completedQuests: [...player.completedQuests, quest.id],\r\n };\r\n}\r\n\r\n/**\r\n * Format player stats for display\r\n */\r\nexport function formatPlayerStats(player: Player): string {\r\n const s = player.stats;\r\n return `Lv.${s.level} | HP: ${s.hp}/${s.maxHp} | MP: ${s.mp}/${s.maxMp} | ATK: ${s.attack} | DEF: ${s.defense}`;\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"46b1ec49-8f79-55a3-9354-4be82d85f57d"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Room Handlers - Placeholder implementations for special room types
|
|
3
|
+
*
|
|
4
|
+
* These are simplified implementations that can be expanded later.
|
|
5
|
+
* Each handler returns a result that the DungeonRunner can use.
|
|
6
|
+
*/
|
|
7
|
+
import type { Player, DungeonRoom } from './types.js';
|
|
8
|
+
export interface RoomHandlerResult {
|
|
9
|
+
success: boolean;
|
|
10
|
+
message: string;
|
|
11
|
+
effects: RoomEffect[];
|
|
12
|
+
rewards: RoomReward[];
|
|
13
|
+
nextAction?: 'continue' | 'combat' | 'dialog' | 'shop';
|
|
14
|
+
}
|
|
15
|
+
export interface RoomEffect {
|
|
16
|
+
type: 'damage' | 'heal' | 'buff' | 'debuff' | 'status';
|
|
17
|
+
target: 'player' | 'enemy';
|
|
18
|
+
value: number;
|
|
19
|
+
duration?: number;
|
|
20
|
+
description: string;
|
|
21
|
+
}
|
|
22
|
+
export interface RoomReward {
|
|
23
|
+
type: 'gold' | 'exp' | 'item';
|
|
24
|
+
value: number | string;
|
|
25
|
+
quantity?: number;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Handle event room (random events)
|
|
29
|
+
* Placeholder: Simple random outcome
|
|
30
|
+
*/
|
|
31
|
+
export declare function handleEventRoom(room: DungeonRoom, player: Player): RoomHandlerResult;
|
|
32
|
+
/**
|
|
33
|
+
* Handle encounter room (NPC interactions)
|
|
34
|
+
* Placeholder: Simple friendly/hostile check
|
|
35
|
+
*/
|
|
36
|
+
export declare function handleEncounterRoom(room: DungeonRoom, player: Player): RoomHandlerResult;
|
|
37
|
+
/**
|
|
38
|
+
* Handle trap room
|
|
39
|
+
* Placeholder: Simple damage or disarm
|
|
40
|
+
*/
|
|
41
|
+
export declare function handleTrapRoom(room: DungeonRoom, player: Player, tryDisarm?: boolean): RoomHandlerResult;
|
|
42
|
+
/**
|
|
43
|
+
* Handle puzzle room
|
|
44
|
+
* Placeholder: Simple chance-based solving
|
|
45
|
+
*/
|
|
46
|
+
export declare function handlePuzzleRoom(room: DungeonRoom, player: Player): RoomHandlerResult;
|
|
47
|
+
/**
|
|
48
|
+
* Handle fountain room (healing)
|
|
49
|
+
*/
|
|
50
|
+
export declare function handleFountainRoom(room: DungeonRoom, player: Player): RoomHandlerResult;
|
|
51
|
+
/**
|
|
52
|
+
* Handle altar room (buffs)
|
|
53
|
+
*/
|
|
54
|
+
export declare function handleAltarRoom(room: DungeonRoom, player: Player): RoomHandlerResult;
|
|
55
|
+
/**
|
|
56
|
+
* Handle dead end room (search for secrets)
|
|
57
|
+
*/
|
|
58
|
+
export declare function handleDeadEndRoom(room: DungeonRoom, player: Player, search?: boolean): RoomHandlerResult;
|
|
59
|
+
/**
|
|
60
|
+
* Apply room effects to player
|
|
61
|
+
*/
|
|
62
|
+
export declare function applyRoomEffects(player: Player, effects: RoomEffect[]): void;
|
|
63
|
+
/**
|
|
64
|
+
* Apply room rewards to player
|
|
65
|
+
*/
|
|
66
|
+
export declare function applyRoomRewards(player: Player, rewards: RoomReward[]): void;
|
|
67
|
+
export type RoomHandlerType = 'event' | 'encounter' | 'trap' | 'puzzle' | 'fountain' | 'altar' | 'dead_end';
|
|
68
|
+
/**
|
|
69
|
+
* Get handler for room type
|
|
70
|
+
*/
|
|
71
|
+
export declare function handleRoom(type: RoomHandlerType, room: DungeonRoom, player: Player, options?: {
|
|
72
|
+
tryDisarm?: boolean;
|
|
73
|
+
search?: boolean;
|
|
74
|
+
}): RoomHandlerResult;
|
|
75
|
+
//# sourceMappingURL=RoomHandlers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"RoomHandlers.d.ts","sourceRoot":"/","sources":["core/RoomHandlers.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,WAAW,EAMZ,MAAM,YAAY,CAAC;AAMpB,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,OAAO,EAAE,UAAU,EAAE,CAAC;IACtB,UAAU,CAAC,EAAE,UAAU,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,CAAC;CACxD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvD,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC9B,KAAK,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAmDnB;AAMD;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAkEnB;AAMD;;;GAGG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,SAAS,GAAE,OAAe,GACzB,iBAAiB,CAuDnB;AAMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAgDnB;AAMD;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAanB;AAMD;;GAEG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,GACb,iBAAiB,CAenB;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,MAAM,GAAE,OAAe,GACtB,iBAAiB,CA2BnB;AAMD;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAqBN;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,UAAU,EAAE,GACpB,IAAI,CAkBN;AAMD,MAAM,MAAM,eAAe,GAAG,OAAO,GAAG,WAAW,GAAG,MAAM,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,GAAG,UAAU,CAAC;AAE5G;;GAEG;AACH,wBAAgB,UAAU,CACxB,IAAI,EAAE,eAAe,EACrB,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,MAAM,EACd,OAAO,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAO,GACtD,iBAAiB,CAwBnB"}
|