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,644 @@
1
+ /**
2
+ * Main Game class - orchestrates the game loop and state management
3
+ */
4
+
5
+ !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]="2cabfb3c-6dcf-5bd3-9b23-de27057ab179")}catch(e){}}();
6
+ import { generateMap } from '../map/MapGenerator.js';
7
+ import { initCombat, processCombatTurn, calculateCombatRewards } from './Combat.js';
8
+ import { addExperience, addGold, healPlayer } from './Player.js';
9
+ const DEFAULT_SETTINGS = {
10
+ language: 'en',
11
+ autoSave: true,
12
+ autoSaveInterval: 60,
13
+ combatSpeed: 1,
14
+ soundEnabled: false,
15
+ };
16
+ export class Game {
17
+ state = null;
18
+ settings;
19
+ tickInterval = null;
20
+ lastTickTime = 0;
21
+ eventListeners = new Map();
22
+ // Event cooldown system - minimum 30 seconds between random events
23
+ lastRandomEventTime = 0;
24
+ MIN_EVENT_COOLDOWN_MS = 30000; // 30 seconds
25
+ constructor(settings = {}) {
26
+ this.settings = { ...DEFAULT_SETTINGS, ...settings };
27
+ }
28
+ /**
29
+ * Initialize a new game
30
+ */
31
+ async initialize(playerName) {
32
+ const player = this.createNewPlayer(playerName);
33
+ const startMap = this.createStartingMap();
34
+ const startRoom = startMap.rooms.get(startMap.startRoomId);
35
+ this.state = {
36
+ phase: 'exploring',
37
+ player,
38
+ currentMap: startMap,
39
+ currentRoom: startRoom,
40
+ pendingEvents: [],
41
+ gameTime: 0,
42
+ lastUpdateTime: Date.now(),
43
+ isPaused: false,
44
+ };
45
+ // Start the game loop
46
+ this.startGameLoop();
47
+ this.emit('game:initialized', { player, map: startMap });
48
+ }
49
+ /**
50
+ * Start the real-time game loop
51
+ */
52
+ startGameLoop() {
53
+ const TICK_RATE = 1000; // 1 second per tick (real-time sync)
54
+ this.lastTickTime = Date.now();
55
+ this.tickInterval = setInterval(() => {
56
+ this.tick();
57
+ }, TICK_RATE);
58
+ }
59
+ /**
60
+ * Stop the game loop
61
+ */
62
+ stopGameLoop() {
63
+ if (this.tickInterval) {
64
+ clearInterval(this.tickInterval);
65
+ this.tickInterval = null;
66
+ }
67
+ }
68
+ /**
69
+ * Main game tick - called every second
70
+ */
71
+ tick() {
72
+ if (!this.state || this.state.isPaused)
73
+ return;
74
+ const now = Date.now();
75
+ const deltaTime = (now - this.lastTickTime) / 1000; // Seconds
76
+ this.lastTickTime = now;
77
+ // Update game time (synced with real time)
78
+ this.state.gameTime += deltaTime;
79
+ this.state.lastUpdateTime = now;
80
+ // Process based on current phase
81
+ switch (this.state.phase) {
82
+ case 'traveling':
83
+ this.processTravelTick(deltaTime);
84
+ break;
85
+ case 'combat':
86
+ this.processCombatTick(deltaTime);
87
+ break;
88
+ case 'exploring':
89
+ this.processExploringTick(deltaTime);
90
+ break;
91
+ default:
92
+ break;
93
+ }
94
+ // Process pending events
95
+ this.processPendingEvents();
96
+ // Auto-save check
97
+ if (this.settings.autoSave &&
98
+ this.state.gameTime % this.settings.autoSaveInterval < deltaTime) {
99
+ this.save();
100
+ }
101
+ this.emit('game:tick', { gameTime: this.state.gameTime, deltaTime });
102
+ }
103
+ /**
104
+ * Process travel state
105
+ */
106
+ processTravelTick(deltaTime) {
107
+ if (!this.state?.travelState)
108
+ return;
109
+ const travel = this.state.travelState;
110
+ const elapsed = (Date.now() - travel.startTime) / 1000;
111
+ travel.progress = Math.min(elapsed / travel.duration, 1);
112
+ // Check for random events during travel
113
+ if (Math.random() < 0.1 * deltaTime) { // 10% chance per second
114
+ this.generateTravelEvent();
115
+ }
116
+ // Check if travel is complete
117
+ if (travel.progress >= 1) {
118
+ this.completeTravelArrival();
119
+ }
120
+ this.emit('travel:progress', travel);
121
+ }
122
+ /**
123
+ * Process combat state (auto-combat based on strategy)
124
+ */
125
+ processCombatTick(deltaTime) {
126
+ if (!this.state?.combat)
127
+ return;
128
+ // Combat processes one turn every 2 seconds (modified by speed setting)
129
+ const combatDelta = deltaTime * this.settings.combatSpeed;
130
+ this.combatAccumulator = (this.combatAccumulator || 0) + combatDelta;
131
+ const turnDuration = 2; // 2 seconds per turn
132
+ if (this.combatAccumulator >= turnDuration) {
133
+ this.combatAccumulator = 0;
134
+ // Process combat turn
135
+ const result = processCombatTurn(this.state.combat, this.state.player);
136
+ this.state.combat = result.combat;
137
+ if (result.finished) {
138
+ if (result.victory) {
139
+ // Calculate rewards
140
+ const rewards = calculateCombatRewards(this.state.combat.enemies);
141
+ this.state.player = addExperience(this.state.player, rewards.exp);
142
+ this.state.player = addGold(this.state.player, rewards.gold);
143
+ // Mark room as cleared
144
+ this.state.currentRoom.isCleared = true;
145
+ this.emit('combat:victory', { rewards });
146
+ }
147
+ else {
148
+ // Player defeated - respawn at start room
149
+ this.respawnPlayer();
150
+ this.emit('combat:defeat', {});
151
+ }
152
+ this.state.combat = undefined;
153
+ this.state.phase = 'exploring';
154
+ }
155
+ }
156
+ this.emit('combat:tick', { deltaTime: combatDelta, combat: this.state.combat });
157
+ }
158
+ combatAccumulator = 0;
159
+ /**
160
+ * Process exploring state
161
+ */
162
+ processExploringTick(deltaTime) {
163
+ // Check for timed quests
164
+ this.checkQuestTimers();
165
+ // Random events while exploring (with cooldown to prevent spam)
166
+ const now = Date.now();
167
+ const timeSinceLastEvent = now - this.lastRandomEventTime;
168
+ // Only allow random events if cooldown has passed
169
+ if (timeSinceLastEvent >= this.MIN_EVENT_COOLDOWN_MS) {
170
+ if (Math.random() < 0.02 * deltaTime) { // 2% chance per second
171
+ this.generateRandomEvent();
172
+ this.lastRandomEventTime = now;
173
+ }
174
+ }
175
+ }
176
+ /**
177
+ * Generate a random travel event
178
+ */
179
+ generateTravelEvent() {
180
+ const eventTypes = ['resource_found', 'enemy_encounter', 'npc_sighting', 'nothing'];
181
+ const weights = [0.3, 0.2, 0.1, 0.4];
182
+ const roll = Math.random();
183
+ let cumulative = 0;
184
+ let selectedType = 'nothing';
185
+ for (let i = 0; i < eventTypes.length; i++) {
186
+ cumulative += weights[i];
187
+ if (roll < cumulative) {
188
+ selectedType = eventTypes[i];
189
+ break;
190
+ }
191
+ }
192
+ if (selectedType !== 'nothing') {
193
+ const event = {
194
+ id: `event_${Date.now()}`,
195
+ type: 'travel_event',
196
+ title: this.getTravelEventTitle(selectedType),
197
+ description: this.getTravelEventDescription(selectedType),
198
+ timestamp: Date.now(),
199
+ processed: false,
200
+ };
201
+ this.state.pendingEvents.push(event);
202
+ }
203
+ }
204
+ /**
205
+ * Complete travel and arrive at destination
206
+ */
207
+ completeTravelArrival() {
208
+ if (!this.state?.travelState)
209
+ return;
210
+ const destRoom = this.state.currentMap.rooms.get(this.state.travelState.toRoomId);
211
+ if (destRoom) {
212
+ this.state.currentRoom = destRoom;
213
+ this.state.player.position = { ...destRoom.position };
214
+ if (!destRoom.isExplored) {
215
+ destRoom.isExplored = true;
216
+ if (!this.state.player.discoveredLocations.includes(destRoom.id)) {
217
+ this.state.player.discoveredLocations.push(destRoom.id);
218
+ }
219
+ }
220
+ this.emit('travel:arrived', { room: destRoom });
221
+ // Check for room encounters
222
+ if (destRoom.enemies && destRoom.enemies.length > 0 && !destRoom.isCleared) {
223
+ this.startCombat(destRoom.enemies);
224
+ }
225
+ }
226
+ this.state.travelState = undefined;
227
+ this.state.phase = 'exploring';
228
+ }
229
+ /**
230
+ * Start traveling to a room
231
+ */
232
+ travelTo(roomId) {
233
+ if (!this.state)
234
+ return false;
235
+ const targetRoom = this.state.currentMap.rooms.get(roomId);
236
+ if (!targetRoom)
237
+ return false;
238
+ // Check if connected
239
+ if (!this.state.currentRoom.connections.includes(roomId)) {
240
+ return false;
241
+ }
242
+ // Calculate travel time based on distance
243
+ const distance = this.calculateDistance(this.state.currentRoom.position, targetRoom.position);
244
+ const baseDuration = distance * 30; // 30 seconds per unit distance
245
+ this.state.travelState = {
246
+ fromRoomId: this.state.currentRoom.id,
247
+ toRoomId: roomId,
248
+ startTime: Date.now(),
249
+ duration: baseDuration,
250
+ progress: 0,
251
+ events: [],
252
+ };
253
+ this.state.phase = 'traveling';
254
+ this.emit('travel:started', this.state.travelState);
255
+ return true;
256
+ }
257
+ /**
258
+ * Cancel current travel and return to origin room
259
+ */
260
+ cancelTravel() {
261
+ if (!this.state?.travelState)
262
+ return false;
263
+ // Stay at origin room (don't change currentRoom)
264
+ this.state.travelState = undefined;
265
+ this.state.phase = 'exploring';
266
+ this.emit('travel:cancelled', {});
267
+ return true;
268
+ }
269
+ /**
270
+ * Start combat with enemies
271
+ */
272
+ startCombat(enemies) {
273
+ if (!this.state)
274
+ return;
275
+ // Initialize combat using the Combat module
276
+ this.state.combat = initCombat(this.state.player, enemies);
277
+ this.state.phase = 'combat';
278
+ this.combatAccumulator = 0;
279
+ this.emit('combat:started', this.state.combat);
280
+ }
281
+ /**
282
+ * Set combat strategy
283
+ */
284
+ setCombatStrategy(strategy) {
285
+ if (this.state?.combat) {
286
+ this.state.combat.strategy = strategy;
287
+ this.emit('combat:strategy_changed', { strategy });
288
+ }
289
+ }
290
+ /**
291
+ * Respawn player at start room with full HP
292
+ */
293
+ respawnPlayer() {
294
+ if (!this.state)
295
+ return;
296
+ // Heal player to full HP
297
+ this.state.player = healPlayer(this.state.player, this.state.player.stats.maxHp);
298
+ // Move to start room
299
+ const startRoom = this.state.currentMap.rooms.get('start_room');
300
+ if (startRoom) {
301
+ this.state.currentRoom = startRoom;
302
+ this.state.player.position = { ...startRoom.position };
303
+ }
304
+ this.emit('player:respawn', { room: this.state.currentRoom });
305
+ }
306
+ /**
307
+ * Process pending events
308
+ */
309
+ processPendingEvents() {
310
+ if (!this.state)
311
+ return;
312
+ const unprocessed = this.state.pendingEvents.filter(e => !e.processed);
313
+ for (const event of unprocessed) {
314
+ this.emit('event:new', event);
315
+ event.processed = true;
316
+ }
317
+ // Clean up old processed events to prevent memory leak (keep last 50)
318
+ if (this.state.pendingEvents.length > 50) {
319
+ this.state.pendingEvents = this.state.pendingEvents.slice(-50);
320
+ }
321
+ }
322
+ /**
323
+ * Check quest timers
324
+ */
325
+ checkQuestTimers() {
326
+ if (!this.state)
327
+ return;
328
+ for (const quest of this.state.player.activeQuests) {
329
+ if (quest.timeLimit && quest.startTime) {
330
+ const elapsed = (Date.now() - quest.startTime) / 1000;
331
+ if (elapsed >= quest.timeLimit) {
332
+ quest.status = 'failed';
333
+ this.emit('quest:failed', { quest });
334
+ }
335
+ }
336
+ }
337
+ }
338
+ /**
339
+ * Generate a random exploration event
340
+ */
341
+ generateRandomEvent() {
342
+ if (!this.state)
343
+ return;
344
+ const eventTypes = [
345
+ { type: 'item_found', weight: 30 },
346
+ { type: 'random_encounter', weight: 20 },
347
+ { type: 'npc_encounter', weight: 15 },
348
+ { type: 'quest_hint', weight: 15 },
349
+ { type: 'nothing', weight: 20 },
350
+ ];
351
+ const totalWeight = eventTypes.reduce((sum, e) => sum + e.weight, 0);
352
+ let roll = Math.random() * totalWeight;
353
+ let selectedType = 'nothing';
354
+ for (const et of eventTypes) {
355
+ roll -= et.weight;
356
+ if (roll <= 0) {
357
+ selectedType = et.type;
358
+ break;
359
+ }
360
+ }
361
+ if (selectedType === 'nothing')
362
+ return;
363
+ const eventData = {
364
+ item_found: {
365
+ title: 'Discovery!',
366
+ description: 'You found a small cache of supplies hidden nearby.',
367
+ },
368
+ random_encounter: {
369
+ title: 'Danger!',
370
+ description: 'Something stirs in the shadows...',
371
+ },
372
+ npc_encounter: {
373
+ title: 'A Stranger Appears',
374
+ description: 'A mysterious figure approaches you.',
375
+ },
376
+ quest_hint: {
377
+ title: 'Clue Found',
378
+ description: 'You notice something that might be useful for your quest.',
379
+ },
380
+ };
381
+ const data = eventData[selectedType];
382
+ if (data) {
383
+ const event = {
384
+ id: `event_${Date.now()}`,
385
+ type: selectedType,
386
+ title: data.title,
387
+ description: data.description,
388
+ timestamp: Date.now(),
389
+ processed: false,
390
+ };
391
+ // Add to pending events - processPendingEvents() will emit and mark as processed
392
+ this.state.pendingEvents.push(event);
393
+ }
394
+ }
395
+ /**
396
+ * Create a new player
397
+ */
398
+ createNewPlayer(name) {
399
+ return {
400
+ id: `player_${Date.now()}`,
401
+ name,
402
+ stats: {
403
+ level: 1,
404
+ hp: 100,
405
+ maxHp: 100,
406
+ mp: 50,
407
+ maxMp: 50,
408
+ attack: 10,
409
+ defense: 5,
410
+ speed: 10,
411
+ exp: 0,
412
+ expToNextLevel: 100,
413
+ gold: 50,
414
+ },
415
+ position: { x: 0, y: 0, floor: 1 },
416
+ equipment: {
417
+ weapon: null,
418
+ armor: null,
419
+ accessory: null,
420
+ },
421
+ inventory: [],
422
+ activeQuests: [],
423
+ completedQuests: [],
424
+ discoveredLocations: [],
425
+ unlockedAffixes: [],
426
+ createdAt: Date.now(),
427
+ playTime: 0,
428
+ // Character customization (can be filled in by player)
429
+ character: {
430
+ backstory: '',
431
+ appearance: '',
432
+ personality: '',
433
+ motivation: '',
434
+ origin: '',
435
+ traits: [],
436
+ },
437
+ };
438
+ }
439
+ /**
440
+ * Create the starting map using BSP algorithm
441
+ */
442
+ createStartingMap() {
443
+ // Generate a procedural dungeon with BSP
444
+ const map = generateMap({
445
+ width: 40,
446
+ height: 40,
447
+ floor: 1,
448
+ minRoomSize: 8,
449
+ maxRoomSize: 15,
450
+ roomTypes: [
451
+ { type: 'combat', weight: 40 },
452
+ { type: 'shop', weight: 15 },
453
+ { type: 'treasure', weight: 20 },
454
+ { type: 'event', weight: 15 },
455
+ { type: 'rest', weight: 5 },
456
+ { type: 'boss', weight: 5 },
457
+ ],
458
+ });
459
+ return map;
460
+ }
461
+ /**
462
+ * Calculate distance between two positions
463
+ */
464
+ calculateDistance(a, b) {
465
+ const dx = Math.abs(a.x - b.x);
466
+ const dy = Math.abs(a.y - b.y);
467
+ const df = Math.abs(a.floor - b.floor);
468
+ return dx + dy + df * 2; // Floor changes take longer
469
+ }
470
+ /**
471
+ * Get travel event title
472
+ */
473
+ getTravelEventTitle(type) {
474
+ const titles = {
475
+ resource_found: 'Discovery!',
476
+ enemy_encounter: 'Ambush!',
477
+ npc_sighting: 'A Fellow Traveler',
478
+ };
479
+ return titles[type] || 'Something happened...';
480
+ }
481
+ /**
482
+ * Get travel event description
483
+ */
484
+ getTravelEventDescription(type) {
485
+ const descriptions = {
486
+ resource_found: 'You found something interesting along the way.',
487
+ enemy_encounter: 'Enemies block your path!',
488
+ npc_sighting: 'You notice someone in the distance.',
489
+ };
490
+ return descriptions[type] || '';
491
+ }
492
+ // =========================================================================
493
+ // Event System
494
+ // =========================================================================
495
+ on(event, callback) {
496
+ if (!this.eventListeners.has(event)) {
497
+ this.eventListeners.set(event, new Set());
498
+ }
499
+ this.eventListeners.get(event).add(callback);
500
+ }
501
+ off(event, callback) {
502
+ this.eventListeners.get(event)?.delete(callback);
503
+ }
504
+ emit(event, data) {
505
+ this.eventListeners.get(event)?.forEach(cb => cb(data));
506
+ }
507
+ // =========================================================================
508
+ // Save/Load
509
+ // =========================================================================
510
+ save() {
511
+ if (!this.state)
512
+ return null;
513
+ const saveData = {
514
+ version: '0.1.0',
515
+ timestamp: Date.now(),
516
+ player: this.state.player,
517
+ currentMapId: this.state.currentMap.id,
518
+ currentRoomId: this.state.currentRoom.id,
519
+ discoveredMaps: [this.state.currentMap.id],
520
+ gameTime: this.state.gameTime,
521
+ settings: this.settings,
522
+ };
523
+ this.emit('game:saved', saveData);
524
+ return saveData;
525
+ }
526
+ // =========================================================================
527
+ // Getters
528
+ // =========================================================================
529
+ getState() {
530
+ return this.state;
531
+ }
532
+ getSettings() {
533
+ return this.settings;
534
+ }
535
+ getPhase() {
536
+ return this.state?.phase ?? null;
537
+ }
538
+ getPlayer() {
539
+ return this.state?.player ?? null;
540
+ }
541
+ getCurrentRoom() {
542
+ return this.state?.currentRoom ?? null;
543
+ }
544
+ getGameTime() {
545
+ return this.state?.gameTime ?? 0;
546
+ }
547
+ /**
548
+ * Update player name
549
+ */
550
+ setPlayerName(name) {
551
+ if (!this.state?.player)
552
+ return false;
553
+ this.state.player.name = name;
554
+ this.emit('player:name_changed', { name });
555
+ return true;
556
+ }
557
+ /**
558
+ * Update player character customization
559
+ */
560
+ setPlayerCharacter(character) {
561
+ if (!this.state?.player)
562
+ return false;
563
+ // Initialize character if not exists
564
+ if (!this.state.player.character) {
565
+ this.state.player.character = {
566
+ backstory: '',
567
+ appearance: '',
568
+ personality: '',
569
+ motivation: '',
570
+ origin: '',
571
+ traits: [],
572
+ };
573
+ }
574
+ // Merge provided fields
575
+ this.state.player.character = {
576
+ ...this.state.player.character,
577
+ ...character,
578
+ };
579
+ this.emit('player:character_updated', { character: this.state.player.character });
580
+ return true;
581
+ }
582
+ /**
583
+ * Get player character customization
584
+ */
585
+ getPlayerCharacter() {
586
+ return this.state?.player?.character;
587
+ }
588
+ // =========================================================================
589
+ // Lifecycle
590
+ // =========================================================================
591
+ pause() {
592
+ if (this.state) {
593
+ this.state.isPaused = true;
594
+ this.emit('game:paused', null);
595
+ }
596
+ }
597
+ resume() {
598
+ if (this.state) {
599
+ this.state.isPaused = false;
600
+ this.lastTickTime = Date.now();
601
+ this.emit('game:resumed', null);
602
+ }
603
+ }
604
+ destroy() {
605
+ this.stopGameLoop();
606
+ this.state = null;
607
+ this.eventListeners.clear();
608
+ this.emit('game:destroyed', null);
609
+ }
610
+ /**
611
+ * Load game state from save data
612
+ */
613
+ loadState(saveData) {
614
+ if (!this.state)
615
+ return false;
616
+ try {
617
+ // Restore player
618
+ this.state.player = saveData.player;
619
+ // Restore game time
620
+ this.state.gameTime = saveData.gameTime;
621
+ // Try to restore current room (need to regenerate map with same seed)
622
+ // For now, just use the current map
623
+ const room = this.state.currentMap.rooms.get(saveData.currentRoomId);
624
+ if (room) {
625
+ this.state.currentRoom = room;
626
+ this.state.player.position = { ...room.position };
627
+ }
628
+ // Reset to exploring state
629
+ this.state.phase = 'exploring';
630
+ this.state.combat = undefined;
631
+ this.state.travelState = undefined;
632
+ this.state.isPaused = false;
633
+ this.state.lastUpdateTime = Date.now();
634
+ this.emit('game:loaded', saveData);
635
+ return true;
636
+ }
637
+ catch (error) {
638
+ console.error('[Game] Failed to load state:', error);
639
+ return false;
640
+ }
641
+ }
642
+ }
643
+ //# sourceMappingURL=Game.js.map
644
+ //# debugId=2cabfb3c-6dcf-5bd3-9b23-de27057ab179