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,408 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* SaveMigration - Handles migration of save data from older formats to current
|
|
3
|
+
*
|
|
4
|
+
* Version History:
|
|
5
|
+
* - 0.1.0: Original single-player format
|
|
6
|
+
* - 2.0.0: Team system introduction (Actor, Team, PlayerAccount)
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
!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]="1327a650-a0f5-5a64-a256-004829bcd546")}catch(e){}}();
|
|
10
|
+
import { playerToActor, DEFAULT_AI_SETTINGS } from './Actor.js';
|
|
11
|
+
import { createTeamWithActor, DEFAULT_LOCATION } from './Team.js';
|
|
12
|
+
import { DEFAULT_STRATEGY } from '../strategy/defaultStrategy.js';
|
|
13
|
+
import { Sentry } from '../instrument.js';
|
|
14
|
+
// ============================================================================
|
|
15
|
+
// Version Constants
|
|
16
|
+
// ============================================================================
|
|
17
|
+
/**
|
|
18
|
+
* Current save format version
|
|
19
|
+
*/
|
|
20
|
+
export const CURRENT_SAVE_VERSION = '2.0.0';
|
|
21
|
+
/**
|
|
22
|
+
* Minimum version that doesn't need migration
|
|
23
|
+
*/
|
|
24
|
+
export const MIN_COMPATIBLE_VERSION = '2.0.0';
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Version Checking
|
|
27
|
+
// ============================================================================
|
|
28
|
+
/**
|
|
29
|
+
* Parse version string to comparable numbers
|
|
30
|
+
*/
|
|
31
|
+
function parseVersion(version) {
|
|
32
|
+
const parts = version.split('.').map(Number);
|
|
33
|
+
return [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Compare two version strings
|
|
37
|
+
* Returns: negative if a < b, 0 if equal, positive if a > b
|
|
38
|
+
*/
|
|
39
|
+
function compareVersions(a, b) {
|
|
40
|
+
const [aMajor, aMinor, aPatch] = parseVersion(a);
|
|
41
|
+
const [bMajor, bMinor, bPatch] = parseVersion(b);
|
|
42
|
+
if (aMajor !== bMajor)
|
|
43
|
+
return aMajor - bMajor;
|
|
44
|
+
if (aMinor !== bMinor)
|
|
45
|
+
return aMinor - bMinor;
|
|
46
|
+
return aPatch - bPatch;
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Check if save data needs migration
|
|
50
|
+
*/
|
|
51
|
+
export function needsMigration(saveData) {
|
|
52
|
+
// If it already has teamData, no migration needed
|
|
53
|
+
if (saveData.teamData) {
|
|
54
|
+
return compareVersions(saveData.teamData.version, MIN_COMPATIBLE_VERSION) < 0;
|
|
55
|
+
}
|
|
56
|
+
// Old format always needs migration
|
|
57
|
+
return true;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Get the version of save data
|
|
61
|
+
*/
|
|
62
|
+
export function getSaveVersion(saveData) {
|
|
63
|
+
if (saveData.teamData?.version) {
|
|
64
|
+
return saveData.teamData.version;
|
|
65
|
+
}
|
|
66
|
+
return saveData.game?.version ?? '0.1.0';
|
|
67
|
+
}
|
|
68
|
+
// ============================================================================
|
|
69
|
+
// Migration Functions
|
|
70
|
+
// ============================================================================
|
|
71
|
+
/**
|
|
72
|
+
* Migrate save data from any older format to current
|
|
73
|
+
*/
|
|
74
|
+
export function migrateSaveData(saveData) {
|
|
75
|
+
const currentVersion = getSaveVersion(saveData);
|
|
76
|
+
// Log migration attempt
|
|
77
|
+
Sentry.startSpan({ op: 'save.migration', name: 'Migrate Save Data' }, (span) => {
|
|
78
|
+
span.setAttribute('fromVersion', currentVersion);
|
|
79
|
+
span.setAttribute('toVersion', CURRENT_SAVE_VERSION);
|
|
80
|
+
});
|
|
81
|
+
try {
|
|
82
|
+
let result = saveData;
|
|
83
|
+
// Migrate from 0.x.x to 2.0.0
|
|
84
|
+
if (compareVersions(currentVersion, '2.0.0') < 0) {
|
|
85
|
+
result = migrateV0ToV2(result);
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
catch (error) {
|
|
90
|
+
Sentry.captureException(error, {
|
|
91
|
+
tags: { operation: 'save_migration', fromVersion: currentVersion },
|
|
92
|
+
});
|
|
93
|
+
throw error;
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Migrate from v0.x.x (single player) to v2.0.0 (team system)
|
|
98
|
+
*/
|
|
99
|
+
function migrateV0ToV2(saveData) {
|
|
100
|
+
const player = saveData.game?.player;
|
|
101
|
+
if (!player) {
|
|
102
|
+
throw new Error('Cannot migrate save data: no player found');
|
|
103
|
+
}
|
|
104
|
+
// Convert Player to Actor
|
|
105
|
+
const actor = playerToActor(player);
|
|
106
|
+
// Create Team with the actor
|
|
107
|
+
const team = createTeamWithActor(actor, `${player.name}'s Team`);
|
|
108
|
+
// Create PlayerAccount
|
|
109
|
+
const account = {
|
|
110
|
+
id: `account_${Date.now()}`,
|
|
111
|
+
accountName: player.name,
|
|
112
|
+
actors: { [actor.id]: actor },
|
|
113
|
+
teams: { [team.id]: team },
|
|
114
|
+
activeTeamId: team.id,
|
|
115
|
+
accountStats: createDefaultAccountStats(saveData),
|
|
116
|
+
settings: saveData.game?.settings ?? createDefaultSettings(),
|
|
117
|
+
globalUnlocks: createDefaultGlobalUnlocks(player),
|
|
118
|
+
createdAt: player.createdAt,
|
|
119
|
+
lastPlayedAt: Date.now(),
|
|
120
|
+
};
|
|
121
|
+
// Create WorldState from existing idle data or defaults
|
|
122
|
+
const worldState = saveData.idle?.worldState ?? {
|
|
123
|
+
unlockedContinents: ['verdantia'],
|
|
124
|
+
unlockedTowns: ['willowbrook'],
|
|
125
|
+
unlockedDungeons: ['goblin_cave'],
|
|
126
|
+
clearedDungeons: [],
|
|
127
|
+
completedQuests: player.completedQuests ?? [],
|
|
128
|
+
discoveredNPCs: [],
|
|
129
|
+
reputations: {},
|
|
130
|
+
};
|
|
131
|
+
// Create Statistics from existing or defaults
|
|
132
|
+
const statistics = saveData.idle?.statistics ?? {
|
|
133
|
+
totalPlayTime: player.playTime,
|
|
134
|
+
dungeonsCleared: 0,
|
|
135
|
+
dungeonsAttempted: 0,
|
|
136
|
+
enemiesKilled: 0,
|
|
137
|
+
bossesKilled: 0,
|
|
138
|
+
totalGoldEarned: player.stats.gold,
|
|
139
|
+
totalGoldSpent: 0,
|
|
140
|
+
itemsCollected: player.inventory.length,
|
|
141
|
+
questsCompleted: player.completedQuests.length,
|
|
142
|
+
deathCount: 0,
|
|
143
|
+
longestDungeonRun: 0,
|
|
144
|
+
fastestBossClear: {},
|
|
145
|
+
};
|
|
146
|
+
// Create TeamSaveData
|
|
147
|
+
const teamData = {
|
|
148
|
+
version: CURRENT_SAVE_VERSION,
|
|
149
|
+
timestamp: Date.now(),
|
|
150
|
+
account,
|
|
151
|
+
worldState,
|
|
152
|
+
statistics,
|
|
153
|
+
currentLocation: saveData.idle?.currentLocation ?? { ...DEFAULT_LOCATION },
|
|
154
|
+
activeDungeon: saveData.idle?.activeDungeon,
|
|
155
|
+
};
|
|
156
|
+
// Return migrated data, keeping old data for backward compatibility
|
|
157
|
+
return {
|
|
158
|
+
...saveData,
|
|
159
|
+
teamData,
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// ============================================================================
|
|
163
|
+
// Default Value Creators
|
|
164
|
+
// ============================================================================
|
|
165
|
+
/**
|
|
166
|
+
* Create default account stats from old save data
|
|
167
|
+
*/
|
|
168
|
+
function createDefaultAccountStats(saveData) {
|
|
169
|
+
const oldStats = saveData.idle?.statistics;
|
|
170
|
+
const player = saveData.game?.player;
|
|
171
|
+
return {
|
|
172
|
+
totalPlayTime: oldStats?.totalPlayTime ?? player?.playTime ?? 0,
|
|
173
|
+
actorsCreated: 1,
|
|
174
|
+
teamsCreated: 1,
|
|
175
|
+
totalDungeonsCleared: oldStats?.dungeonsCleared ?? 0,
|
|
176
|
+
totalEnemiesKilled: oldStats?.enemiesKilled ?? 0,
|
|
177
|
+
totalGoldEarned: oldStats?.totalGoldEarned ?? 0,
|
|
178
|
+
totalDeaths: oldStats?.deathCount ?? 0,
|
|
179
|
+
highestActorLevel: player?.stats.level ?? 1,
|
|
180
|
+
};
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Create default game settings
|
|
184
|
+
*/
|
|
185
|
+
function createDefaultSettings() {
|
|
186
|
+
return {
|
|
187
|
+
language: 'en',
|
|
188
|
+
autoSave: true,
|
|
189
|
+
autoSaveInterval: 60,
|
|
190
|
+
combatSpeed: 1,
|
|
191
|
+
soundEnabled: false,
|
|
192
|
+
};
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Create default global unlocks from player data
|
|
196
|
+
*/
|
|
197
|
+
function createDefaultGlobalUnlocks(player) {
|
|
198
|
+
return {
|
|
199
|
+
unlockedContinents: ['verdantia'],
|
|
200
|
+
unlockedClasses: ['balanced'], // Default class
|
|
201
|
+
unlockedAffixes: player.unlockedAffixes ?? [],
|
|
202
|
+
achievements: [],
|
|
203
|
+
};
|
|
204
|
+
}
|
|
205
|
+
// ============================================================================
|
|
206
|
+
// New Save Creation
|
|
207
|
+
// ============================================================================
|
|
208
|
+
/**
|
|
209
|
+
* Create a new save with the team system format
|
|
210
|
+
*/
|
|
211
|
+
export function createNewTeamSave(playerName, actorName) {
|
|
212
|
+
// Create the first actor
|
|
213
|
+
const actor = {
|
|
214
|
+
id: `actor_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`,
|
|
215
|
+
name: actorName ?? playerName,
|
|
216
|
+
stats: {
|
|
217
|
+
level: 1,
|
|
218
|
+
hp: 100,
|
|
219
|
+
maxHp: 100,
|
|
220
|
+
mp: 50,
|
|
221
|
+
maxMp: 50,
|
|
222
|
+
attack: 10,
|
|
223
|
+
defense: 5,
|
|
224
|
+
speed: 10,
|
|
225
|
+
exp: 0,
|
|
226
|
+
expToNextLevel: 100,
|
|
227
|
+
gold: 0,
|
|
228
|
+
},
|
|
229
|
+
position: { x: 0, y: 0, floor: 1 },
|
|
230
|
+
equipment: { weapon: null, armor: null, accessory: null },
|
|
231
|
+
inventory: [],
|
|
232
|
+
activeQuests: [],
|
|
233
|
+
completedQuests: [],
|
|
234
|
+
discoveredLocations: [],
|
|
235
|
+
unlockedAffixes: [],
|
|
236
|
+
createdAt: Date.now(),
|
|
237
|
+
playTime: 0,
|
|
238
|
+
character: {
|
|
239
|
+
backstory: '',
|
|
240
|
+
appearance: '',
|
|
241
|
+
personality: '',
|
|
242
|
+
motivation: '',
|
|
243
|
+
origin: '',
|
|
244
|
+
traits: [],
|
|
245
|
+
},
|
|
246
|
+
status: 'active',
|
|
247
|
+
teamId: undefined,
|
|
248
|
+
role: 'balanced',
|
|
249
|
+
aiSettings: { ...DEFAULT_AI_SETTINGS },
|
|
250
|
+
};
|
|
251
|
+
// Create team with the actor
|
|
252
|
+
const team = createTeamWithActor(actor, `${actor.name}'s Team`);
|
|
253
|
+
// Create account
|
|
254
|
+
const account = {
|
|
255
|
+
id: `account_${Date.now()}`,
|
|
256
|
+
accountName: playerName,
|
|
257
|
+
actors: { [actor.id]: actor },
|
|
258
|
+
teams: { [team.id]: team },
|
|
259
|
+
activeTeamId: team.id,
|
|
260
|
+
accountStats: {
|
|
261
|
+
totalPlayTime: 0,
|
|
262
|
+
actorsCreated: 1,
|
|
263
|
+
teamsCreated: 1,
|
|
264
|
+
totalDungeonsCleared: 0,
|
|
265
|
+
totalEnemiesKilled: 0,
|
|
266
|
+
totalGoldEarned: 0,
|
|
267
|
+
totalDeaths: 0,
|
|
268
|
+
highestActorLevel: 1,
|
|
269
|
+
},
|
|
270
|
+
settings: createDefaultSettings(),
|
|
271
|
+
globalUnlocks: {
|
|
272
|
+
unlockedContinents: ['verdantia'],
|
|
273
|
+
unlockedClasses: ['balanced'],
|
|
274
|
+
unlockedAffixes: [],
|
|
275
|
+
achievements: [],
|
|
276
|
+
},
|
|
277
|
+
createdAt: Date.now(),
|
|
278
|
+
lastPlayedAt: Date.now(),
|
|
279
|
+
};
|
|
280
|
+
// Create team save data
|
|
281
|
+
const teamData = {
|
|
282
|
+
version: CURRENT_SAVE_VERSION,
|
|
283
|
+
timestamp: Date.now(),
|
|
284
|
+
account,
|
|
285
|
+
worldState: {
|
|
286
|
+
unlockedContinents: ['verdantia'],
|
|
287
|
+
unlockedTowns: ['willowbrook'],
|
|
288
|
+
unlockedDungeons: ['goblin_cave'],
|
|
289
|
+
clearedDungeons: [],
|
|
290
|
+
completedQuests: [],
|
|
291
|
+
discoveredNPCs: [],
|
|
292
|
+
reputations: {},
|
|
293
|
+
},
|
|
294
|
+
statistics: {
|
|
295
|
+
totalPlayTime: 0,
|
|
296
|
+
dungeonsCleared: 0,
|
|
297
|
+
dungeonsAttempted: 0,
|
|
298
|
+
enemiesKilled: 0,
|
|
299
|
+
bossesKilled: 0,
|
|
300
|
+
totalGoldEarned: 0,
|
|
301
|
+
totalGoldSpent: 0,
|
|
302
|
+
itemsCollected: 0,
|
|
303
|
+
questsCompleted: 0,
|
|
304
|
+
deathCount: 0,
|
|
305
|
+
longestDungeonRun: 0,
|
|
306
|
+
fastestBossClear: {},
|
|
307
|
+
},
|
|
308
|
+
currentLocation: { ...DEFAULT_LOCATION },
|
|
309
|
+
};
|
|
310
|
+
// Also create legacy format for backward compatibility
|
|
311
|
+
const legacyPlayer = {
|
|
312
|
+
id: actor.id,
|
|
313
|
+
name: actor.name,
|
|
314
|
+
stats: { ...actor.stats },
|
|
315
|
+
position: { ...actor.position },
|
|
316
|
+
equipment: { ...actor.equipment },
|
|
317
|
+
inventory: [...actor.inventory],
|
|
318
|
+
activeQuests: [...actor.activeQuests],
|
|
319
|
+
completedQuests: [...actor.completedQuests],
|
|
320
|
+
discoveredLocations: [...actor.discoveredLocations],
|
|
321
|
+
unlockedAffixes: [...actor.unlockedAffixes],
|
|
322
|
+
createdAt: actor.createdAt,
|
|
323
|
+
playTime: actor.playTime,
|
|
324
|
+
character: actor.character ? { ...actor.character } : undefined,
|
|
325
|
+
};
|
|
326
|
+
return {
|
|
327
|
+
game: {
|
|
328
|
+
version: CURRENT_SAVE_VERSION,
|
|
329
|
+
timestamp: Date.now(),
|
|
330
|
+
player: legacyPlayer,
|
|
331
|
+
currentMapId: 'willowbrook',
|
|
332
|
+
currentRoomId: 'willowbrook_center',
|
|
333
|
+
discoveredMaps: ['willowbrook'],
|
|
334
|
+
gameTime: 0,
|
|
335
|
+
settings: createDefaultSettings(),
|
|
336
|
+
},
|
|
337
|
+
npcs: { npcs: [], dailyDeathCheckTime: 0, totalNPCsGenerated: 0, totalNPCsDied: 0 },
|
|
338
|
+
quests: { activeQuests: [], completedQuestIds: [], failedQuestIds: [], questLog: [] },
|
|
339
|
+
checksum: '',
|
|
340
|
+
idle: {
|
|
341
|
+
currentLocation: { ...DEFAULT_LOCATION },
|
|
342
|
+
strategy: { ...DEFAULT_STRATEGY },
|
|
343
|
+
worldState: teamData.worldState,
|
|
344
|
+
statistics: teamData.statistics,
|
|
345
|
+
},
|
|
346
|
+
teamData,
|
|
347
|
+
};
|
|
348
|
+
}
|
|
349
|
+
// ============================================================================
|
|
350
|
+
// Extraction Helpers
|
|
351
|
+
// ============================================================================
|
|
352
|
+
/**
|
|
353
|
+
* Extract the active team from save data
|
|
354
|
+
*/
|
|
355
|
+
export function getActiveTeamFromSave(saveData) {
|
|
356
|
+
if (!saveData.teamData?.account.activeTeamId)
|
|
357
|
+
return null;
|
|
358
|
+
return saveData.teamData.account.teams[saveData.teamData.account.activeTeamId] ?? null;
|
|
359
|
+
}
|
|
360
|
+
/**
|
|
361
|
+
* Extract all actors from save data
|
|
362
|
+
*/
|
|
363
|
+
export function getActorsFromSave(saveData) {
|
|
364
|
+
return saveData.teamData?.account.actors ?? {};
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Extract the account from save data
|
|
368
|
+
*/
|
|
369
|
+
export function getAccountFromSave(saveData) {
|
|
370
|
+
return saveData.teamData?.account ?? null;
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Get the "primary" player for backward compatibility
|
|
374
|
+
* Returns the leader of the active team as a Player object
|
|
375
|
+
*/
|
|
376
|
+
export function getLegacyPlayerFromSave(saveData) {
|
|
377
|
+
// First try legacy format
|
|
378
|
+
if (saveData.game?.player) {
|
|
379
|
+
return saveData.game.player;
|
|
380
|
+
}
|
|
381
|
+
// Try to extract from team data
|
|
382
|
+
const team = getActiveTeamFromSave(saveData);
|
|
383
|
+
if (!team || team.activeMembers.length === 0)
|
|
384
|
+
return null;
|
|
385
|
+
const actors = getActorsFromSave(saveData);
|
|
386
|
+
const leaderId = team.activeMembers[0];
|
|
387
|
+
const leader = actors[leaderId];
|
|
388
|
+
if (!leader)
|
|
389
|
+
return null;
|
|
390
|
+
// Convert actor to player format
|
|
391
|
+
return {
|
|
392
|
+
id: leader.id,
|
|
393
|
+
name: leader.name,
|
|
394
|
+
stats: { ...leader.stats, gold: team.sharedGold }, // Use team gold
|
|
395
|
+
position: { ...team.position },
|
|
396
|
+
equipment: { ...leader.equipment },
|
|
397
|
+
inventory: [...leader.inventory, ...team.sharedInventory],
|
|
398
|
+
activeQuests: [...leader.activeQuests],
|
|
399
|
+
completedQuests: [...leader.completedQuests],
|
|
400
|
+
discoveredLocations: [...leader.discoveredLocations],
|
|
401
|
+
unlockedAffixes: [...leader.unlockedAffixes],
|
|
402
|
+
createdAt: leader.createdAt,
|
|
403
|
+
playTime: leader.playTime,
|
|
404
|
+
character: leader.character,
|
|
405
|
+
};
|
|
406
|
+
}
|
|
407
|
+
//# sourceMappingURL=SaveMigration.js.map
|
|
408
|
+
//# debugId=1327a650-a0f5-5a64-a256-004829bcd546
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SaveMigration.js","sources":["core/SaveMigration.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * SaveMigration - Handles migration of save data from older formats to current\r\n *\r\n * Version History:\r\n * - 0.1.0: Original single-player format\r\n * - 2.0.0: Team system introduction (Actor, Team, PlayerAccount)\r\n */\r\n\r\nimport type {\r\n Player,\r\n Actor,\r\n Team,\r\n PlayerAccount,\r\n AccountStats,\r\n GlobalUnlocks,\r\n GameSettings,\r\n CurrentLocation,\r\n GameStatistics,\r\n StrategyStateMachine,\r\n WorldState,\r\n} from './types.js';\r\nimport { playerToActor, DEFAULT_AI_SETTINGS } from './Actor.js';\r\nimport { createTeamWithActor, DEFAULT_LOCATION } from './Team.js';\r\nimport { DEFAULT_STRATEGY } from '../strategy/defaultStrategy.js';\r\nimport type { IdleFullSaveData } from './IdleSaveManager.js';\r\nimport type { FullSaveData } from './SaveManager.js';\r\nimport { Sentry } from '../instrument.js';\r\n\r\n// ============================================================================\r\n// Version Constants\r\n// ============================================================================\r\n\r\n/**\r\n * Current save format version\r\n */\r\nexport const CURRENT_SAVE_VERSION = '2.0.0';\r\n\r\n/**\r\n * Minimum version that doesn't need migration\r\n */\r\nexport const MIN_COMPATIBLE_VERSION = '2.0.0';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Extended save data with team system\r\n */\r\nexport interface TeamSaveData {\r\n version: string;\r\n timestamp: number;\r\n account: PlayerAccount;\r\n worldState: WorldState;\r\n statistics: GameStatistics;\r\n currentLocation: CurrentLocation;\r\n activeDungeon?: unknown; // ActiveDungeonState\r\n}\r\n\r\n/**\r\n * Combined save format (supports both old and new)\r\n */\r\nexport interface MigratableSaveData extends IdleFullSaveData {\r\n // New fields for team system\r\n teamData?: TeamSaveData;\r\n}\r\n\r\n// ============================================================================\r\n// Version Checking\r\n// ============================================================================\r\n\r\n/**\r\n * Parse version string to comparable numbers\r\n */\r\nfunction parseVersion(version: string): [number, number, number] {\r\n const parts = version.split('.').map(Number);\r\n return [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0];\r\n}\r\n\r\n/**\r\n * Compare two version strings\r\n * Returns: negative if a < b, 0 if equal, positive if a > b\r\n */\r\nfunction compareVersions(a: string, b: string): number {\r\n const [aMajor, aMinor, aPatch] = parseVersion(a);\r\n const [bMajor, bMinor, bPatch] = parseVersion(b);\r\n\r\n if (aMajor !== bMajor) return aMajor - bMajor;\r\n if (aMinor !== bMinor) return aMinor - bMinor;\r\n return aPatch - bPatch;\r\n}\r\n\r\n/**\r\n * Check if save data needs migration\r\n */\r\nexport function needsMigration(saveData: MigratableSaveData): boolean {\r\n // If it already has teamData, no migration needed\r\n if (saveData.teamData) {\r\n return compareVersions(saveData.teamData.version, MIN_COMPATIBLE_VERSION) < 0;\r\n }\r\n\r\n // Old format always needs migration\r\n return true;\r\n}\r\n\r\n/**\r\n * Get the version of save data\r\n */\r\nexport function getSaveVersion(saveData: MigratableSaveData): string {\r\n if (saveData.teamData?.version) {\r\n return saveData.teamData.version;\r\n }\r\n return saveData.game?.version ?? '0.1.0';\r\n}\r\n\r\n// ============================================================================\r\n// Migration Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Migrate save data from any older format to current\r\n */\r\nexport function migrateSaveData(saveData: MigratableSaveData): MigratableSaveData {\r\n const currentVersion = getSaveVersion(saveData);\r\n\r\n // Log migration attempt\r\n Sentry.startSpan(\r\n { op: 'save.migration', name: 'Migrate Save Data' },\r\n (span) => {\r\n span.setAttribute('fromVersion', currentVersion);\r\n span.setAttribute('toVersion', CURRENT_SAVE_VERSION);\r\n }\r\n );\r\n\r\n try {\r\n let result = saveData;\r\n\r\n // Migrate from 0.x.x to 2.0.0\r\n if (compareVersions(currentVersion, '2.0.0') < 0) {\r\n result = migrateV0ToV2(result);\r\n }\r\n\r\n return result;\r\n } catch (error) {\r\n Sentry.captureException(error, {\r\n tags: { operation: 'save_migration', fromVersion: currentVersion },\r\n });\r\n throw error;\r\n }\r\n}\r\n\r\n/**\r\n * Migrate from v0.x.x (single player) to v2.0.0 (team system)\r\n */\r\nfunction migrateV0ToV2(saveData: MigratableSaveData): MigratableSaveData {\r\n const player = saveData.game?.player;\r\n if (!player) {\r\n throw new Error('Cannot migrate save data: no player found');\r\n }\r\n\r\n // Convert Player to Actor\r\n const actor = playerToActor(player);\r\n\r\n // Create Team with the actor\r\n const team = createTeamWithActor(actor, `${player.name}'s Team`);\r\n\r\n // Create PlayerAccount\r\n const account: PlayerAccount = {\r\n id: `account_${Date.now()}`,\r\n accountName: player.name,\r\n actors: { [actor.id]: actor },\r\n teams: { [team.id]: team },\r\n activeTeamId: team.id,\r\n accountStats: createDefaultAccountStats(saveData),\r\n settings: saveData.game?.settings ?? createDefaultSettings(),\r\n globalUnlocks: createDefaultGlobalUnlocks(player),\r\n createdAt: player.createdAt,\r\n lastPlayedAt: Date.now(),\r\n };\r\n\r\n // Create WorldState from existing idle data or defaults\r\n const worldState: WorldState = saveData.idle?.worldState ?? {\r\n unlockedContinents: ['verdantia'],\r\n unlockedTowns: ['willowbrook'],\r\n unlockedDungeons: ['goblin_cave'],\r\n clearedDungeons: [],\r\n completedQuests: player.completedQuests ?? [],\r\n discoveredNPCs: [],\r\n reputations: {},\r\n };\r\n\r\n // Create Statistics from existing or defaults\r\n const statistics: GameStatistics = saveData.idle?.statistics ?? {\r\n totalPlayTime: player.playTime,\r\n dungeonsCleared: 0,\r\n dungeonsAttempted: 0,\r\n enemiesKilled: 0,\r\n bossesKilled: 0,\r\n totalGoldEarned: player.stats.gold,\r\n totalGoldSpent: 0,\r\n itemsCollected: player.inventory.length,\r\n questsCompleted: player.completedQuests.length,\r\n deathCount: 0,\r\n longestDungeonRun: 0,\r\n fastestBossClear: {},\r\n };\r\n\r\n // Create TeamSaveData\r\n const teamData: TeamSaveData = {\r\n version: CURRENT_SAVE_VERSION,\r\n timestamp: Date.now(),\r\n account,\r\n worldState,\r\n statistics,\r\n currentLocation: saveData.idle?.currentLocation ?? { ...DEFAULT_LOCATION },\r\n activeDungeon: saveData.idle?.activeDungeon,\r\n };\r\n\r\n // Return migrated data, keeping old data for backward compatibility\r\n return {\r\n ...saveData,\r\n teamData,\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Default Value Creators\r\n// ============================================================================\r\n\r\n/**\r\n * Create default account stats from old save data\r\n */\r\nfunction createDefaultAccountStats(saveData: MigratableSaveData): AccountStats {\r\n const oldStats = saveData.idle?.statistics;\r\n const player = saveData.game?.player;\r\n\r\n return {\r\n totalPlayTime: oldStats?.totalPlayTime ?? player?.playTime ?? 0,\r\n actorsCreated: 1,\r\n teamsCreated: 1,\r\n totalDungeonsCleared: oldStats?.dungeonsCleared ?? 0,\r\n totalEnemiesKilled: oldStats?.enemiesKilled ?? 0,\r\n totalGoldEarned: oldStats?.totalGoldEarned ?? 0,\r\n totalDeaths: oldStats?.deathCount ?? 0,\r\n highestActorLevel: player?.stats.level ?? 1,\r\n };\r\n}\r\n\r\n/**\r\n * Create default game settings\r\n */\r\nfunction createDefaultSettings(): GameSettings {\r\n return {\r\n language: 'en',\r\n autoSave: true,\r\n autoSaveInterval: 60,\r\n combatSpeed: 1,\r\n soundEnabled: false,\r\n };\r\n}\r\n\r\n/**\r\n * Create default global unlocks from player data\r\n */\r\nfunction createDefaultGlobalUnlocks(player: Player): GlobalUnlocks {\r\n return {\r\n unlockedContinents: ['verdantia'],\r\n unlockedClasses: ['balanced'], // Default class\r\n unlockedAffixes: player.unlockedAffixes ?? [],\r\n achievements: [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// New Save Creation\r\n// ============================================================================\r\n\r\n/**\r\n * Create a new save with the team system format\r\n */\r\nexport function createNewTeamSave(\r\n playerName: string,\r\n actorName?: string\r\n): MigratableSaveData {\r\n // Create the first actor\r\n const actor: Actor = {\r\n id: `actor_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`,\r\n name: actorName ?? playerName,\r\n stats: {\r\n level: 1,\r\n hp: 100,\r\n maxHp: 100,\r\n mp: 50,\r\n maxMp: 50,\r\n attack: 10,\r\n defense: 5,\r\n speed: 10,\r\n exp: 0,\r\n expToNextLevel: 100,\r\n gold: 0,\r\n },\r\n position: { x: 0, y: 0, floor: 1 },\r\n equipment: { weapon: null, armor: null, accessory: null },\r\n inventory: [],\r\n activeQuests: [],\r\n completedQuests: [],\r\n discoveredLocations: [],\r\n unlockedAffixes: [],\r\n createdAt: Date.now(),\r\n playTime: 0,\r\n character: {\r\n backstory: '',\r\n appearance: '',\r\n personality: '',\r\n motivation: '',\r\n origin: '',\r\n traits: [],\r\n },\r\n status: 'active',\r\n teamId: undefined,\r\n role: 'balanced',\r\n aiSettings: { ...DEFAULT_AI_SETTINGS },\r\n };\r\n\r\n // Create team with the actor\r\n const team = createTeamWithActor(actor, `${actor.name}'s Team`);\r\n\r\n // Create account\r\n const account: PlayerAccount = {\r\n id: `account_${Date.now()}`,\r\n accountName: playerName,\r\n actors: { [actor.id]: actor },\r\n teams: { [team.id]: team },\r\n activeTeamId: team.id,\r\n accountStats: {\r\n totalPlayTime: 0,\r\n actorsCreated: 1,\r\n teamsCreated: 1,\r\n totalDungeonsCleared: 0,\r\n totalEnemiesKilled: 0,\r\n totalGoldEarned: 0,\r\n totalDeaths: 0,\r\n highestActorLevel: 1,\r\n },\r\n settings: createDefaultSettings(),\r\n globalUnlocks: {\r\n unlockedContinents: ['verdantia'],\r\n unlockedClasses: ['balanced'],\r\n unlockedAffixes: [],\r\n achievements: [],\r\n },\r\n createdAt: Date.now(),\r\n lastPlayedAt: Date.now(),\r\n };\r\n\r\n // Create team save data\r\n const teamData: TeamSaveData = {\r\n version: CURRENT_SAVE_VERSION,\r\n timestamp: Date.now(),\r\n account,\r\n worldState: {\r\n unlockedContinents: ['verdantia'],\r\n unlockedTowns: ['willowbrook'],\r\n unlockedDungeons: ['goblin_cave'],\r\n clearedDungeons: [],\r\n completedQuests: [],\r\n discoveredNPCs: [],\r\n reputations: {},\r\n },\r\n statistics: {\r\n totalPlayTime: 0,\r\n dungeonsCleared: 0,\r\n dungeonsAttempted: 0,\r\n enemiesKilled: 0,\r\n bossesKilled: 0,\r\n totalGoldEarned: 0,\r\n totalGoldSpent: 0,\r\n itemsCollected: 0,\r\n questsCompleted: 0,\r\n deathCount: 0,\r\n longestDungeonRun: 0,\r\n fastestBossClear: {},\r\n },\r\n currentLocation: { ...DEFAULT_LOCATION },\r\n };\r\n\r\n // Also create legacy format for backward compatibility\r\n const legacyPlayer: Player = {\r\n id: actor.id,\r\n name: actor.name,\r\n stats: { ...actor.stats },\r\n position: { ...actor.position },\r\n equipment: { ...actor.equipment },\r\n inventory: [...actor.inventory],\r\n activeQuests: [...actor.activeQuests],\r\n completedQuests: [...actor.completedQuests],\r\n discoveredLocations: [...actor.discoveredLocations],\r\n unlockedAffixes: [...actor.unlockedAffixes],\r\n createdAt: actor.createdAt,\r\n playTime: actor.playTime,\r\n character: actor.character ? { ...actor.character } : undefined,\r\n };\r\n\r\n return {\r\n game: {\r\n version: CURRENT_SAVE_VERSION,\r\n timestamp: Date.now(),\r\n player: legacyPlayer,\r\n currentMapId: 'willowbrook',\r\n currentRoomId: 'willowbrook_center',\r\n discoveredMaps: ['willowbrook'],\r\n gameTime: 0,\r\n settings: createDefaultSettings(),\r\n },\r\n npcs: { npcs: [], dailyDeathCheckTime: 0, totalNPCsGenerated: 0, totalNPCsDied: 0 },\r\n quests: { activeQuests: [], completedQuestIds: [], failedQuestIds: [], questLog: [] },\r\n checksum: '',\r\n idle: {\r\n currentLocation: { ...DEFAULT_LOCATION },\r\n strategy: { ...DEFAULT_STRATEGY },\r\n worldState: teamData.worldState,\r\n statistics: teamData.statistics,\r\n },\r\n teamData,\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Extraction Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Extract the active team from save data\r\n */\r\nexport function getActiveTeamFromSave(saveData: MigratableSaveData): Team | null {\r\n if (!saveData.teamData?.account.activeTeamId) return null;\r\n return saveData.teamData.account.teams[saveData.teamData.account.activeTeamId] ?? null;\r\n}\r\n\r\n/**\r\n * Extract all actors from save data\r\n */\r\nexport function getActorsFromSave(saveData: MigratableSaveData): Record<string, Actor> {\r\n return saveData.teamData?.account.actors ?? {};\r\n}\r\n\r\n/**\r\n * Extract the account from save data\r\n */\r\nexport function getAccountFromSave(saveData: MigratableSaveData): PlayerAccount | null {\r\n return saveData.teamData?.account ?? null;\r\n}\r\n\r\n/**\r\n * Get the \"primary\" player for backward compatibility\r\n * Returns the leader of the active team as a Player object\r\n */\r\nexport function getLegacyPlayerFromSave(saveData: MigratableSaveData): Player | null {\r\n // First try legacy format\r\n if (saveData.game?.player) {\r\n return saveData.game.player;\r\n }\r\n\r\n // Try to extract from team data\r\n const team = getActiveTeamFromSave(saveData);\r\n if (!team || team.activeMembers.length === 0) return null;\r\n\r\n const actors = getActorsFromSave(saveData);\r\n const leaderId = team.activeMembers[0];\r\n const leader = actors[leaderId];\r\n if (!leader) return null;\r\n\r\n // Convert actor to player format\r\n return {\r\n id: leader.id,\r\n name: leader.name,\r\n stats: { ...leader.stats, gold: team.sharedGold }, // Use team gold\r\n position: { ...team.position },\r\n equipment: { ...leader.equipment },\r\n inventory: [...leader.inventory, ...team.sharedInventory],\r\n activeQuests: [...leader.activeQuests],\r\n completedQuests: [...leader.completedQuests],\r\n discoveredLocations: [...leader.discoveredLocations],\r\n unlockedAffixes: [...leader.unlockedAffixes],\r\n createdAt: leader.createdAt,\r\n playTime: leader.playTime,\r\n character: leader.character,\r\n };\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"1327a650-a0f5-5a64-a256-004829bcd546"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* State Adapter - Converts IdleGameState to GameState format for UI compatibility
|
|
3
|
+
*
|
|
4
|
+
* This adapter bridges the new IdleGameManager with the existing GameUI
|
|
5
|
+
* by converting the IdleRPG state structure to the legacy GameState format.
|
|
6
|
+
*
|
|
7
|
+
* Also provides team-aware state conversion for the new multi-character system.
|
|
8
|
+
*/
|
|
9
|
+
import type { GameState, GameMap, Room, Player, TravelState, GameEvent, Actor, Team, TeamCombatState } from './types.js';
|
|
10
|
+
import type { IdleGameState } from './IdleGameManager.js';
|
|
11
|
+
/**
|
|
12
|
+
* Convert IdleGameState to GameState
|
|
13
|
+
*/
|
|
14
|
+
export declare function adaptIdleGameStateToGameState(idleState: IdleGameState): GameState;
|
|
15
|
+
/**
|
|
16
|
+
* Get connected rooms for UI display
|
|
17
|
+
* Returns facilities in town or adjacent rooms in dungeon
|
|
18
|
+
*/
|
|
19
|
+
export declare function getConnectedRoomsForUI(idleState: IdleGameState): Room[];
|
|
20
|
+
/**
|
|
21
|
+
* Team-aware game state for the new multi-character system
|
|
22
|
+
*/
|
|
23
|
+
export interface TeamGameState {
|
|
24
|
+
phase: 'exploring' | 'traveling' | 'combat' | 'dialog';
|
|
25
|
+
team: Team;
|
|
26
|
+
actors: Record<string, Actor>;
|
|
27
|
+
activeActors: Actor[];
|
|
28
|
+
leader: Actor | null;
|
|
29
|
+
currentMap: GameMap;
|
|
30
|
+
currentRoom: Room;
|
|
31
|
+
combat?: TeamCombatState;
|
|
32
|
+
pendingEvents: GameEvent[];
|
|
33
|
+
travelState?: TravelState;
|
|
34
|
+
gameTime: number;
|
|
35
|
+
lastUpdateTime: number;
|
|
36
|
+
isPaused: boolean;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get the team leader as a Player for legacy UI components
|
|
40
|
+
*/
|
|
41
|
+
export declare function getTeamLeaderAsPlayer(team: Team, actors: Record<string, Actor>): Player | null;
|
|
42
|
+
/**
|
|
43
|
+
* Get summary stats for the entire team
|
|
44
|
+
*/
|
|
45
|
+
export interface TeamStatsSummary {
|
|
46
|
+
totalHp: number;
|
|
47
|
+
totalMaxHp: number;
|
|
48
|
+
averageLevel: number;
|
|
49
|
+
totalAttack: number;
|
|
50
|
+
totalDefense: number;
|
|
51
|
+
activeCount: number;
|
|
52
|
+
aliveCount: number;
|
|
53
|
+
}
|
|
54
|
+
export declare function getTeamStatsSummary(team: Team, actors: Record<string, Actor>): TeamStatsSummary;
|
|
55
|
+
/**
|
|
56
|
+
* Get HP status string for all team members
|
|
57
|
+
* Format: "Alice: 80/100 | Bob: 50/80 | ..."
|
|
58
|
+
*/
|
|
59
|
+
export declare function getTeamHpStatusString(team: Team, actors: Record<string, Actor>): string;
|
|
60
|
+
/**
|
|
61
|
+
* Get compact team status for status bar
|
|
62
|
+
* Format: "Team (3/4): Lv5 HP:85%"
|
|
63
|
+
*/
|
|
64
|
+
export declare function getCompactTeamStatus(team: Team, actors: Record<string, Actor>): string;
|
|
65
|
+
/**
|
|
66
|
+
* Convert team combat state to legacy combat state for UI
|
|
67
|
+
* Uses the team leader's perspective
|
|
68
|
+
*/
|
|
69
|
+
export declare function teamCombatToLegacyCombat(teamCombat: TeamCombatState, team: Team, actors: Record<string, Actor>): {
|
|
70
|
+
isActive: boolean;
|
|
71
|
+
turn: number;
|
|
72
|
+
playerHp: number;
|
|
73
|
+
enemies: typeof teamCombat.enemies;
|
|
74
|
+
log: typeof teamCombat.log;
|
|
75
|
+
strategy: 'balanced';
|
|
76
|
+
startTime: number;
|
|
77
|
+
estimatedEndTime: number;
|
|
78
|
+
};
|
|
79
|
+
//# sourceMappingURL=StateAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateAdapter.d.ts","sourceRoot":"/","sources":["core/StateAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EACV,SAAS,EACT,OAAO,EACP,IAAI,EAEJ,MAAM,EACN,WAAW,EACX,SAAS,EAKT,KAAK,EACL,IAAI,EACJ,eAAe,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,aAAa,EAAiB,MAAM,sBAAsB,CAAC;AAuOzE;;GAEG;AACH,wBAAgB,6BAA6B,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,CAiFjF;AAED;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,SAAS,EAAE,aAAa,GAAG,IAAI,EAAE,CA6BvE;AAMD;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,WAAW,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,CAAC;IACvD,IAAI,EAAE,IAAI,CAAC;IACX,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC9B,YAAY,EAAE,KAAK,EAAE,CAAC;IACtB,MAAM,EAAE,KAAK,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,OAAO,CAAC;IACpB,WAAW,EAAE,IAAI,CAAC;IAClB,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,aAAa,EAAE,SAAS,EAAE,CAAC;IAC3B,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;IACvB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,GAAG,IAAI,CAY9F;AAED;;GAEG;AACH,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,gBAAgB,CAe/F;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAKvF;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,MAAM,CAMtF;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,eAAe,EAC3B,IAAI,EAAE,IAAI,EACV,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,KAAK,CAAC,GAC5B;IACD,QAAQ,EAAE,OAAO,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,UAAU,CAAC,OAAO,CAAC;IACnC,GAAG,EAAE,OAAO,UAAU,CAAC,GAAG,CAAC;IAC3B,QAAQ,EAAE,UAAU,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,gBAAgB,EAAE,MAAM,CAAC;CAC1B,CAgBA"}
|