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.
Files changed (478) hide show
  1. package/README.md +171 -0
  2. package/dist/affix/AffixRegistry.d.ts +68 -0
  3. package/dist/affix/AffixRegistry.d.ts.map +1 -0
  4. package/dist/affix/AffixRegistry.js +245 -0
  5. package/dist/affix/AffixRegistry.js.map +1 -0
  6. package/dist/affix/PluginLoader.d.ts +66 -0
  7. package/dist/affix/PluginLoader.d.ts.map +1 -0
  8. package/dist/affix/PluginLoader.js +321 -0
  9. package/dist/affix/PluginLoader.js.map +1 -0
  10. package/dist/affix/builtin.d.ts +6 -0
  11. package/dist/affix/builtin.d.ts.map +1 -0
  12. package/dist/affix/builtin.js +311 -0
  13. package/dist/affix/builtin.js.map +1 -0
  14. package/dist/affix/index.d.ts +8 -0
  15. package/dist/affix/index.d.ts.map +1 -0
  16. package/dist/affix/index.js +11 -0
  17. package/dist/affix/index.js.map +1 -0
  18. package/dist/affix/types.d.ts +152 -0
  19. package/dist/affix/types.d.ts.map +1 -0
  20. package/dist/affix/types.js +8 -0
  21. package/dist/affix/types.js.map +1 -0
  22. package/dist/ai/PlayKitClient.d.ts +208 -0
  23. package/dist/ai/PlayKitClient.d.ts.map +1 -0
  24. package/dist/ai/PlayKitClient.js +721 -0
  25. package/dist/ai/PlayKitClient.js.map +1 -0
  26. package/dist/ai/index.d.ts +5 -0
  27. package/dist/ai/index.d.ts.map +1 -0
  28. package/dist/ai/index.js +8 -0
  29. package/dist/ai/index.js.map +1 -0
  30. package/dist/app/App.d.ts +85 -0
  31. package/dist/app/App.d.ts.map +1 -0
  32. package/dist/app/App.js +296 -0
  33. package/dist/app/App.js.map +1 -0
  34. package/dist/app/EventBus.d.ts +222 -0
  35. package/dist/app/EventBus.d.ts.map +1 -0
  36. package/dist/app/EventBus.js +88 -0
  37. package/dist/app/EventBus.js.map +1 -0
  38. package/dist/app/Keybind.d.ts +83 -0
  39. package/dist/app/Keybind.d.ts.map +1 -0
  40. package/dist/app/Keybind.js +184 -0
  41. package/dist/app/Keybind.js.map +1 -0
  42. package/dist/app/Router.d.ts +123 -0
  43. package/dist/app/Router.d.ts.map +1 -0
  44. package/dist/app/Router.js +142 -0
  45. package/dist/app/Router.js.map +1 -0
  46. package/dist/app/ScreenManager.d.ts +97 -0
  47. package/dist/app/ScreenManager.d.ts.map +1 -0
  48. package/dist/app/ScreenManager.js +216 -0
  49. package/dist/app/ScreenManager.js.map +1 -0
  50. package/dist/app/index.d.ts +14 -0
  51. package/dist/app/index.d.ts.map +1 -0
  52. package/dist/app/index.js +19 -0
  53. package/dist/app/index.js.map +1 -0
  54. package/dist/app/screens/BaseScreen.d.ts +101 -0
  55. package/dist/app/screens/BaseScreen.d.ts.map +1 -0
  56. package/dist/app/screens/BaseScreen.js +132 -0
  57. package/dist/app/screens/BaseScreen.js.map +1 -0
  58. package/dist/app/screens/CharacterCreationScreen.d.ts +42 -0
  59. package/dist/app/screens/CharacterCreationScreen.d.ts.map +1 -0
  60. package/dist/app/screens/CharacterCreationScreen.js +467 -0
  61. package/dist/app/screens/CharacterCreationScreen.js.map +1 -0
  62. package/dist/app/screens/CombatScreen.d.ts +30 -0
  63. package/dist/app/screens/CombatScreen.d.ts.map +1 -0
  64. package/dist/app/screens/CombatScreen.js +309 -0
  65. package/dist/app/screens/CombatScreen.js.map +1 -0
  66. package/dist/app/screens/DialogScreen.d.ts +29 -0
  67. package/dist/app/screens/DialogScreen.d.ts.map +1 -0
  68. package/dist/app/screens/DialogScreen.js +295 -0
  69. package/dist/app/screens/DialogScreen.js.map +1 -0
  70. package/dist/app/screens/ExploreScreen.d.ts +50 -0
  71. package/dist/app/screens/ExploreScreen.d.ts.map +1 -0
  72. package/dist/app/screens/ExploreScreen.js +308 -0
  73. package/dist/app/screens/ExploreScreen.js.map +1 -0
  74. package/dist/app/screens/HelpScreen.d.ts +12 -0
  75. package/dist/app/screens/HelpScreen.d.ts.map +1 -0
  76. package/dist/app/screens/HelpScreen.js +155 -0
  77. package/dist/app/screens/HelpScreen.js.map +1 -0
  78. package/dist/app/screens/InventoryScreen.d.ts +27 -0
  79. package/dist/app/screens/InventoryScreen.d.ts.map +1 -0
  80. package/dist/app/screens/InventoryScreen.js +326 -0
  81. package/dist/app/screens/InventoryScreen.js.map +1 -0
  82. package/dist/app/screens/PrologueScreen.d.ts +24 -0
  83. package/dist/app/screens/PrologueScreen.d.ts.map +1 -0
  84. package/dist/app/screens/PrologueScreen.js +176 -0
  85. package/dist/app/screens/PrologueScreen.js.map +1 -0
  86. package/dist/app/screens/TitleScreen.d.ts +42 -0
  87. package/dist/app/screens/TitleScreen.d.ts.map +1 -0
  88. package/dist/app/screens/TitleScreen.js +380 -0
  89. package/dist/app/screens/TitleScreen.js.map +1 -0
  90. package/dist/app/screens/TravelScreen.d.ts +22 -0
  91. package/dist/app/screens/TravelScreen.d.ts.map +1 -0
  92. package/dist/app/screens/TravelScreen.js +122 -0
  93. package/dist/app/screens/TravelScreen.js.map +1 -0
  94. package/dist/app/screens/index.d.ts +14 -0
  95. package/dist/app/screens/index.d.ts.map +1 -0
  96. package/dist/app/screens/index.js +17 -0
  97. package/dist/app/screens/index.js.map +1 -0
  98. package/dist/commands/CommandRegistry.d.ts +91 -0
  99. package/dist/commands/CommandRegistry.d.ts.map +1 -0
  100. package/dist/commands/CommandRegistry.js +159 -0
  101. package/dist/commands/CommandRegistry.js.map +1 -0
  102. package/dist/commands/index.d.ts +7 -0
  103. package/dist/commands/index.d.ts.map +1 -0
  104. package/dist/commands/index.js +10 -0
  105. package/dist/commands/index.js.map +1 -0
  106. package/dist/core/Actor.d.ts +103 -0
  107. package/dist/core/Actor.d.ts.map +1 -0
  108. package/dist/core/Actor.js +409 -0
  109. package/dist/core/Actor.js.map +1 -0
  110. package/dist/core/Combat.d.ts +37 -0
  111. package/dist/core/Combat.d.ts.map +1 -0
  112. package/dist/core/Combat.js +294 -0
  113. package/dist/core/Combat.js.map +1 -0
  114. package/dist/core/DungeonRunner.d.ts +169 -0
  115. package/dist/core/DungeonRunner.d.ts.map +1 -0
  116. package/dist/core/DungeonRunner.js +627 -0
  117. package/dist/core/DungeonRunner.js.map +1 -0
  118. package/dist/core/Game.d.ts +133 -0
  119. package/dist/core/Game.d.ts.map +1 -0
  120. package/dist/core/Game.js +644 -0
  121. package/dist/core/Game.js.map +1 -0
  122. package/dist/core/IdleCombat.d.ts +61 -0
  123. package/dist/core/IdleCombat.d.ts.map +1 -0
  124. package/dist/core/IdleCombat.js +461 -0
  125. package/dist/core/IdleCombat.js.map +1 -0
  126. package/dist/core/IdleGameManager.d.ts +198 -0
  127. package/dist/core/IdleGameManager.d.ts.map +1 -0
  128. package/dist/core/IdleGameManager.js +688 -0
  129. package/dist/core/IdleGameManager.js.map +1 -0
  130. package/dist/core/IdleSaveManager.d.ts +109 -0
  131. package/dist/core/IdleSaveManager.d.ts.map +1 -0
  132. package/dist/core/IdleSaveManager.js +296 -0
  133. package/dist/core/IdleSaveManager.js.map +1 -0
  134. package/dist/core/NewGameFlowManager.d.ts +64 -0
  135. package/dist/core/NewGameFlowManager.d.ts.map +1 -0
  136. package/dist/core/NewGameFlowManager.js +153 -0
  137. package/dist/core/NewGameFlowManager.js.map +1 -0
  138. package/dist/core/Player.d.ts +65 -0
  139. package/dist/core/Player.d.ts.map +1 -0
  140. package/dist/core/Player.js +261 -0
  141. package/dist/core/Player.js.map +1 -0
  142. package/dist/core/RoomHandlers.d.ts +75 -0
  143. package/dist/core/RoomHandlers.d.ts.map +1 -0
  144. package/dist/core/RoomHandlers.js +383 -0
  145. package/dist/core/RoomHandlers.js.map +1 -0
  146. package/dist/core/SaveManager.d.ts +84 -0
  147. package/dist/core/SaveManager.d.ts.map +1 -0
  148. package/dist/core/SaveManager.js +281 -0
  149. package/dist/core/SaveManager.js.map +1 -0
  150. package/dist/core/SaveMigration.d.ts +69 -0
  151. package/dist/core/SaveMigration.d.ts.map +1 -0
  152. package/dist/core/SaveMigration.js +408 -0
  153. package/dist/core/SaveMigration.js.map +1 -0
  154. package/dist/core/StateAdapter.d.ts +79 -0
  155. package/dist/core/StateAdapter.d.ts.map +1 -0
  156. package/dist/core/StateAdapter.js +397 -0
  157. package/dist/core/StateAdapter.js.map +1 -0
  158. package/dist/core/Team.d.ts +145 -0
  159. package/dist/core/Team.d.ts.map +1 -0
  160. package/dist/core/Team.js +371 -0
  161. package/dist/core/Team.js.map +1 -0
  162. package/dist/core/TeamCombat.d.ts +88 -0
  163. package/dist/core/TeamCombat.d.ts.map +1 -0
  164. package/dist/core/TeamCombat.js +405 -0
  165. package/dist/core/TeamCombat.js.map +1 -0
  166. package/dist/core/TeamDungeonRunner.d.ts +186 -0
  167. package/dist/core/TeamDungeonRunner.d.ts.map +1 -0
  168. package/dist/core/TeamDungeonRunner.js +758 -0
  169. package/dist/core/TeamDungeonRunner.js.map +1 -0
  170. package/dist/core/TimeManager.d.ts +114 -0
  171. package/dist/core/TimeManager.d.ts.map +1 -0
  172. package/dist/core/TimeManager.js +318 -0
  173. package/dist/core/TimeManager.js.map +1 -0
  174. package/dist/core/index.d.ts +9 -0
  175. package/dist/core/index.d.ts.map +1 -0
  176. package/dist/core/index.js +12 -0
  177. package/dist/core/index.js.map +1 -0
  178. package/dist/core/timeConstants.d.ts +135 -0
  179. package/dist/core/timeConstants.d.ts.map +1 -0
  180. package/dist/core/timeConstants.js +157 -0
  181. package/dist/core/timeConstants.js.map +1 -0
  182. package/dist/core/types.d.ts +780 -0
  183. package/dist/core/types.d.ts.map +1 -0
  184. package/dist/core/types.js +16 -0
  185. package/dist/core/types.js.map +1 -0
  186. package/dist/data/continents/index.d.ts +163 -0
  187. package/dist/data/continents/index.d.ts.map +1 -0
  188. package/dist/data/continents/index.js +31 -0
  189. package/dist/data/continents/index.js.map +1 -0
  190. package/dist/data/continents/verdantia.d.ts +294 -0
  191. package/dist/data/continents/verdantia.d.ts.map +1 -0
  192. package/dist/data/continents/verdantia.js +327 -0
  193. package/dist/data/continents/verdantia.js.map +1 -0
  194. package/dist/handlers/DialogHandler.d.ts +95 -0
  195. package/dist/handlers/DialogHandler.d.ts.map +1 -0
  196. package/dist/handlers/DialogHandler.js +450 -0
  197. package/dist/handlers/DialogHandler.js.map +1 -0
  198. package/dist/handlers/SaveLoadHandler.d.ts +60 -0
  199. package/dist/handlers/SaveLoadHandler.d.ts.map +1 -0
  200. package/dist/handlers/SaveLoadHandler.js +187 -0
  201. package/dist/handlers/SaveLoadHandler.js.map +1 -0
  202. package/dist/handlers/TitleScreenHandler.d.ts +43 -0
  203. package/dist/handlers/TitleScreenHandler.d.ts.map +1 -0
  204. package/dist/handlers/TitleScreenHandler.js +508 -0
  205. package/dist/handlers/TitleScreenHandler.js.map +1 -0
  206. package/dist/handlers/WorkshopHandler.d.ts +75 -0
  207. package/dist/handlers/WorkshopHandler.d.ts.map +1 -0
  208. package/dist/handlers/WorkshopHandler.js +401 -0
  209. package/dist/handlers/WorkshopHandler.js.map +1 -0
  210. package/dist/handlers/index.d.ts +12 -0
  211. package/dist/handlers/index.d.ts.map +1 -0
  212. package/dist/handlers/index.js +14 -0
  213. package/dist/handlers/index.js.map +1 -0
  214. package/dist/handlers/types.d.ts +34 -0
  215. package/dist/handlers/types.d.ts.map +1 -0
  216. package/dist/handlers/types.js +8 -0
  217. package/dist/handlers/types.js.map +1 -0
  218. package/dist/i18n/en.d.ts +3 -0
  219. package/dist/i18n/en.d.ts.map +1 -0
  220. package/dist/i18n/en.js +130 -0
  221. package/dist/i18n/en.js.map +1 -0
  222. package/dist/i18n/index.d.ts +40 -0
  223. package/dist/i18n/index.d.ts.map +1 -0
  224. package/dist/i18n/index.js +105 -0
  225. package/dist/i18n/index.js.map +1 -0
  226. package/dist/i18n/types.d.ts +133 -0
  227. package/dist/i18n/types.d.ts.map +1 -0
  228. package/dist/i18n/types.js +8 -0
  229. package/dist/i18n/types.js.map +1 -0
  230. package/dist/i18n/zh.d.ts +3 -0
  231. package/dist/i18n/zh.d.ts.map +1 -0
  232. package/dist/i18n/zh.js +130 -0
  233. package/dist/i18n/zh.js.map +1 -0
  234. package/dist/instrument.d.ts +8 -0
  235. package/dist/instrument.d.ts.map +1 -0
  236. package/dist/instrument.js +33 -0
  237. package/dist/instrument.js.map +1 -0
  238. package/dist/main-new.d.ts +12 -0
  239. package/dist/main-new.d.ts.map +1 -0
  240. package/dist/main-new.js +32 -0
  241. package/dist/main-new.js.map +1 -0
  242. package/dist/main.d.ts +7 -0
  243. package/dist/main.d.ts.map +1 -0
  244. package/dist/main.js +2816 -0
  245. package/dist/main.js.map +1 -0
  246. package/dist/map/ContinentManager.d.ts +88 -0
  247. package/dist/map/ContinentManager.d.ts.map +1 -0
  248. package/dist/map/ContinentManager.js +241 -0
  249. package/dist/map/ContinentManager.js.map +1 -0
  250. package/dist/map/DungeonGenerator.d.ts +32 -0
  251. package/dist/map/DungeonGenerator.d.ts.map +1 -0
  252. package/dist/map/DungeonGenerator.js +615 -0
  253. package/dist/map/DungeonGenerator.js.map +1 -0
  254. package/dist/map/MapGenerator.d.ts +27 -0
  255. package/dist/map/MapGenerator.d.ts.map +1 -0
  256. package/dist/map/MapGenerator.js +485 -0
  257. package/dist/map/MapGenerator.js.map +1 -0
  258. package/dist/map/index.d.ts +5 -0
  259. package/dist/map/index.d.ts.map +1 -0
  260. package/dist/map/index.js +8 -0
  261. package/dist/map/index.js.map +1 -0
  262. package/dist/npc/NPCGenerator.d.ts +68 -0
  263. package/dist/npc/NPCGenerator.d.ts.map +1 -0
  264. package/dist/npc/NPCGenerator.js +468 -0
  265. package/dist/npc/NPCGenerator.js.map +1 -0
  266. package/dist/npc/NPCManager.d.ts +86 -0
  267. package/dist/npc/NPCManager.d.ts.map +1 -0
  268. package/dist/npc/NPCManager.js +217 -0
  269. package/dist/npc/NPCManager.js.map +1 -0
  270. package/dist/npc/fixedNPCs.d.ts +7 -0
  271. package/dist/npc/fixedNPCs.d.ts.map +1 -0
  272. package/dist/npc/fixedNPCs.js +196 -0
  273. package/dist/npc/fixedNPCs.js.map +1 -0
  274. package/dist/npc/index.d.ts +9 -0
  275. package/dist/npc/index.d.ts.map +1 -0
  276. package/dist/npc/index.js +12 -0
  277. package/dist/npc/index.js.map +1 -0
  278. package/dist/npc/traits.d.ts +33 -0
  279. package/dist/npc/traits.d.ts.map +1 -0
  280. package/dist/npc/traits.js +795 -0
  281. package/dist/npc/traits.js.map +1 -0
  282. package/dist/npc/types.d.ts +193 -0
  283. package/dist/npc/types.d.ts.map +1 -0
  284. package/dist/npc/types.js +9 -0
  285. package/dist/npc/types.js.map +1 -0
  286. package/dist/quest/QuestManager.d.ts +79 -0
  287. package/dist/quest/QuestManager.d.ts.map +1 -0
  288. package/dist/quest/QuestManager.js +273 -0
  289. package/dist/quest/QuestManager.js.map +1 -0
  290. package/dist/quest/index.d.ts +6 -0
  291. package/dist/quest/index.d.ts.map +1 -0
  292. package/dist/quest/index.js +9 -0
  293. package/dist/quest/index.js.map +1 -0
  294. package/dist/quest/types.d.ts +81 -0
  295. package/dist/quest/types.d.ts.map +1 -0
  296. package/dist/quest/types.js +8 -0
  297. package/dist/quest/types.js.map +1 -0
  298. package/dist/strategy/StrategyExecutor.d.ts +159 -0
  299. package/dist/strategy/StrategyExecutor.d.ts.map +1 -0
  300. package/dist/strategy/StrategyExecutor.js +479 -0
  301. package/dist/strategy/StrategyExecutor.js.map +1 -0
  302. package/dist/strategy/StrategyParser.d.ts +48 -0
  303. package/dist/strategy/StrategyParser.d.ts.map +1 -0
  304. package/dist/strategy/StrategyParser.js +321 -0
  305. package/dist/strategy/StrategyParser.js.map +1 -0
  306. package/dist/strategy/defaultStrategy.d.ts +40 -0
  307. package/dist/strategy/defaultStrategy.d.ts.map +1 -0
  308. package/dist/strategy/defaultStrategy.js +254 -0
  309. package/dist/strategy/defaultStrategy.js.map +1 -0
  310. package/dist/strategy/index.d.ts +8 -0
  311. package/dist/strategy/index.d.ts.map +1 -0
  312. package/dist/strategy/index.js +14 -0
  313. package/dist/strategy/index.js.map +1 -0
  314. package/dist/tui/ExploreMenu.d.ts +106 -0
  315. package/dist/tui/ExploreMenu.d.ts.map +1 -0
  316. package/dist/tui/ExploreMenu.js +282 -0
  317. package/dist/tui/ExploreMenu.js.map +1 -0
  318. package/dist/tui/GameUI.d.ts +313 -0
  319. package/dist/tui/GameUI.d.ts.map +1 -0
  320. package/dist/tui/GameUI.js +2116 -0
  321. package/dist/tui/GameUI.js.map +1 -0
  322. package/dist/tui/GameUIAdapter.d.ts +207 -0
  323. package/dist/tui/GameUIAdapter.d.ts.map +1 -0
  324. package/dist/tui/GameUIAdapter.js +1342 -0
  325. package/dist/tui/GameUIAdapter.js.map +1 -0
  326. package/dist/tui/Input.d.ts +139 -0
  327. package/dist/tui/Input.d.ts.map +1 -0
  328. package/dist/tui/Input.js +278 -0
  329. package/dist/tui/Input.js.map +1 -0
  330. package/dist/tui/Menu.d.ts +110 -0
  331. package/dist/tui/Menu.d.ts.map +1 -0
  332. package/dist/tui/Menu.js +365 -0
  333. package/dist/tui/Menu.js.map +1 -0
  334. package/dist/tui/Screen.d.ts +228 -0
  335. package/dist/tui/Screen.d.ts.map +1 -0
  336. package/dist/tui/Screen.js +502 -0
  337. package/dist/tui/Screen.js.map +1 -0
  338. package/dist/tui/components/Box.d.ts +36 -0
  339. package/dist/tui/components/Box.d.ts.map +1 -0
  340. package/dist/tui/components/Box.js +43 -0
  341. package/dist/tui/components/Box.js.map +1 -0
  342. package/dist/tui/components/List.d.ts +69 -0
  343. package/dist/tui/components/List.d.ts.map +1 -0
  344. package/dist/tui/components/List.js +136 -0
  345. package/dist/tui/components/List.js.map +1 -0
  346. package/dist/tui/components/ProgressBar.d.ts +42 -0
  347. package/dist/tui/components/ProgressBar.d.ts.map +1 -0
  348. package/dist/tui/components/ProgressBar.js +75 -0
  349. package/dist/tui/components/ProgressBar.js.map +1 -0
  350. package/dist/tui/components/index.d.ts +8 -0
  351. package/dist/tui/components/index.d.ts.map +1 -0
  352. package/dist/tui/components/index.js +11 -0
  353. package/dist/tui/components/index.js.map +1 -0
  354. package/dist/tui/core/BaseSection.d.ts +98 -0
  355. package/dist/tui/core/BaseSection.d.ts.map +1 -0
  356. package/dist/tui/core/BaseSection.js +174 -0
  357. package/dist/tui/core/BaseSection.js.map +1 -0
  358. package/dist/tui/core/Component.d.ts +61 -0
  359. package/dist/tui/core/Component.d.ts.map +1 -0
  360. package/dist/tui/core/Component.js +32 -0
  361. package/dist/tui/core/Component.js.map +1 -0
  362. package/dist/tui/core/Section.d.ts +101 -0
  363. package/dist/tui/core/Section.d.ts.map +1 -0
  364. package/dist/tui/core/Section.js +24 -0
  365. package/dist/tui/core/Section.js.map +1 -0
  366. package/dist/tui/core/SectionManager.d.ts +108 -0
  367. package/dist/tui/core/SectionManager.d.ts.map +1 -0
  368. package/dist/tui/core/SectionManager.js +258 -0
  369. package/dist/tui/core/SectionManager.js.map +1 -0
  370. package/dist/tui/core/index.d.ts +9 -0
  371. package/dist/tui/core/index.d.ts.map +1 -0
  372. package/dist/tui/core/index.js +12 -0
  373. package/dist/tui/core/index.js.map +1 -0
  374. package/dist/tui/index.d.ts +15 -0
  375. package/dist/tui/index.d.ts.map +1 -0
  376. package/dist/tui/index.js +23 -0
  377. package/dist/tui/index.js.map +1 -0
  378. package/dist/tui/screens/BaseScreen.d.ts +62 -0
  379. package/dist/tui/screens/BaseScreen.d.ts.map +1 -0
  380. package/dist/tui/screens/BaseScreen.js +55 -0
  381. package/dist/tui/screens/BaseScreen.js.map +1 -0
  382. package/dist/tui/screens/CombatScreen.d.ts +43 -0
  383. package/dist/tui/screens/CombatScreen.d.ts.map +1 -0
  384. package/dist/tui/screens/CombatScreen.js +125 -0
  385. package/dist/tui/screens/CombatScreen.js.map +1 -0
  386. package/dist/tui/screens/DialogScreen.d.ts +53 -0
  387. package/dist/tui/screens/DialogScreen.d.ts.map +1 -0
  388. package/dist/tui/screens/DialogScreen.js +90 -0
  389. package/dist/tui/screens/DialogScreen.js.map +1 -0
  390. package/dist/tui/screens/DungeonScreen.d.ts +80 -0
  391. package/dist/tui/screens/DungeonScreen.d.ts.map +1 -0
  392. package/dist/tui/screens/DungeonScreen.js +317 -0
  393. package/dist/tui/screens/DungeonScreen.js.map +1 -0
  394. package/dist/tui/screens/ExploreScreen.d.ts +69 -0
  395. package/dist/tui/screens/ExploreScreen.d.ts.map +1 -0
  396. package/dist/tui/screens/ExploreScreen.js +224 -0
  397. package/dist/tui/screens/ExploreScreen.js.map +1 -0
  398. package/dist/tui/screens/SectionScreen.d.ts +84 -0
  399. package/dist/tui/screens/SectionScreen.d.ts.map +1 -0
  400. package/dist/tui/screens/SectionScreen.js +156 -0
  401. package/dist/tui/screens/SectionScreen.js.map +1 -0
  402. package/dist/tui/screens/TitleScreen.d.ts +40 -0
  403. package/dist/tui/screens/TitleScreen.d.ts.map +1 -0
  404. package/dist/tui/screens/TitleScreen.js +253 -0
  405. package/dist/tui/screens/TitleScreen.js.map +1 -0
  406. package/dist/tui/screens/TownScreen.d.ts +98 -0
  407. package/dist/tui/screens/TownScreen.d.ts.map +1 -0
  408. package/dist/tui/screens/TownScreen.js +370 -0
  409. package/dist/tui/screens/TownScreen.js.map +1 -0
  410. package/dist/tui/screens/TravelScreen.d.ts +67 -0
  411. package/dist/tui/screens/TravelScreen.d.ts.map +1 -0
  412. package/dist/tui/screens/TravelScreen.js +286 -0
  413. package/dist/tui/screens/TravelScreen.js.map +1 -0
  414. package/dist/tui/screens/index.d.ts +8 -0
  415. package/dist/tui/screens/index.d.ts.map +1 -0
  416. package/dist/tui/screens/index.js +17 -0
  417. package/dist/tui/screens/index.js.map +1 -0
  418. package/dist/tui/sections/ActionsSection.d.ts +71 -0
  419. package/dist/tui/sections/ActionsSection.d.ts.map +1 -0
  420. package/dist/tui/sections/ActionsSection.js +184 -0
  421. package/dist/tui/sections/ActionsSection.js.map +1 -0
  422. package/dist/tui/sections/DungeonSection.d.ts +65 -0
  423. package/dist/tui/sections/DungeonSection.d.ts.map +1 -0
  424. package/dist/tui/sections/DungeonSection.js +144 -0
  425. package/dist/tui/sections/DungeonSection.js.map +1 -0
  426. package/dist/tui/sections/EventsSection.d.ts +50 -0
  427. package/dist/tui/sections/EventsSection.d.ts.map +1 -0
  428. package/dist/tui/sections/EventsSection.js +134 -0
  429. package/dist/tui/sections/EventsSection.js.map +1 -0
  430. package/dist/tui/sections/MapSection.d.ts +66 -0
  431. package/dist/tui/sections/MapSection.d.ts.map +1 -0
  432. package/dist/tui/sections/MapSection.js +669 -0
  433. package/dist/tui/sections/MapSection.js.map +1 -0
  434. package/dist/tui/sections/StatusSection.d.ts +47 -0
  435. package/dist/tui/sections/StatusSection.d.ts.map +1 -0
  436. package/dist/tui/sections/StatusSection.js +133 -0
  437. package/dist/tui/sections/StatusSection.js.map +1 -0
  438. package/dist/tui/sections/TeamSection.d.ts +71 -0
  439. package/dist/tui/sections/TeamSection.d.ts.map +1 -0
  440. package/dist/tui/sections/TeamSection.js +224 -0
  441. package/dist/tui/sections/TeamSection.js.map +1 -0
  442. package/dist/tui/sections/TravelingSection.d.ts +51 -0
  443. package/dist/tui/sections/TravelingSection.d.ts.map +1 -0
  444. package/dist/tui/sections/TravelingSection.js +106 -0
  445. package/dist/tui/sections/TravelingSection.js.map +1 -0
  446. package/dist/tui/sections/index.d.ts +9 -0
  447. package/dist/tui/sections/index.d.ts.map +1 -0
  448. package/dist/tui/sections/index.js +12 -0
  449. package/dist/tui/sections/index.js.map +1 -0
  450. package/dist/ui/Terminal.d.ts +68 -0
  451. package/dist/ui/Terminal.d.ts.map +1 -0
  452. package/dist/ui/Terminal.js +297 -0
  453. package/dist/ui/Terminal.js.map +1 -0
  454. package/dist/ui/index.d.ts +5 -0
  455. package/dist/ui/index.d.ts.map +1 -0
  456. package/dist/ui/index.js +8 -0
  457. package/dist/ui/index.js.map +1 -0
  458. package/dist/utils/configMigration.d.ts +14 -0
  459. package/dist/utils/configMigration.d.ts.map +1 -0
  460. package/dist/utils/configMigration.js +92 -0
  461. package/dist/utils/configMigration.js.map +1 -0
  462. package/dist/utils/errorHandler.d.ts +86 -0
  463. package/dist/utils/errorHandler.d.ts.map +1 -0
  464. package/dist/utils/errorHandler.js +224 -0
  465. package/dist/utils/errorHandler.js.map +1 -0
  466. package/dist/utils/logger.d.ts +14 -0
  467. package/dist/utils/logger.d.ts.map +1 -0
  468. package/dist/utils/logger.js +43 -0
  469. package/dist/utils/logger.js.map +1 -0
  470. package/dist/weapon/WeaponFactory.d.ts +32 -0
  471. package/dist/weapon/WeaponFactory.d.ts.map +1 -0
  472. package/dist/weapon/WeaponFactory.js +216 -0
  473. package/dist/weapon/WeaponFactory.js.map +1 -0
  474. package/dist/weapon/index.d.ts +5 -0
  475. package/dist/weapon/index.d.ts.map +1 -0
  476. package/dist/weapon/index.js +8 -0
  477. package/dist/weapon/index.js.map +1 -0
  478. 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"}