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,383 @@
1
+ /**
2
+ * Room Handlers - Placeholder implementations for special room types
3
+ *
4
+ * These are simplified implementations that can be expanded later.
5
+ * Each handler returns a result that the DungeonRunner can use.
6
+ */
7
+ // ============================================================================
8
+ // Event Room Handler
9
+ // ============================================================================
10
+ /**
11
+ * Handle event room (random events)
12
+ * Placeholder: Simple random outcome
13
+ */
14
+
15
+ !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]="7d981599-71be-5a29-84ba-ce795ade5830")}catch(e){}}();
16
+ export function handleEventRoom(room, player) {
17
+ const event = room.content.event;
18
+ if (!event || event.processed) {
19
+ return {
20
+ success: true,
21
+ message: 'The room is empty.',
22
+ effects: [],
23
+ rewards: [],
24
+ };
25
+ }
26
+ event.processed = true;
27
+ // Random event outcomes
28
+ const outcomes = [
29
+ {
30
+ message: 'You found a hidden cache!',
31
+ rewards: [{ type: 'gold', value: Math.floor(Math.random() * 50) + 20 }],
32
+ effects: [],
33
+ },
34
+ {
35
+ message: 'A mysterious wind restores your energy.',
36
+ rewards: [],
37
+ effects: [{ type: 'heal', target: 'player', value: 30, description: 'Restored 30 HP' }],
38
+ },
39
+ {
40
+ message: 'You step on a loose stone and take minor damage.',
41
+ rewards: [],
42
+ effects: [{ type: 'damage', target: 'player', value: 10, description: 'Took 10 damage' }],
43
+ },
44
+ {
45
+ message: 'You find ancient writing on the wall. Interesting, but nothing useful.',
46
+ rewards: [],
47
+ effects: [],
48
+ },
49
+ {
50
+ message: 'A ghostly figure appears and blesses you!',
51
+ rewards: [{ type: 'exp', value: 25 }],
52
+ effects: [{ type: 'buff', target: 'player', value: 5, duration: 3, description: '+5 ATK for 3 rooms' }],
53
+ },
54
+ ];
55
+ const outcome = outcomes[Math.floor(Math.random() * outcomes.length)];
56
+ return {
57
+ success: true,
58
+ message: outcome.message,
59
+ effects: outcome.effects,
60
+ rewards: outcome.rewards,
61
+ };
62
+ }
63
+ // ============================================================================
64
+ // Encounter Room Handler
65
+ // ============================================================================
66
+ /**
67
+ * Handle encounter room (NPC interactions)
68
+ * Placeholder: Simple friendly/hostile check
69
+ */
70
+ export function handleEncounterRoom(room, player) {
71
+ const npc = room.content.npc;
72
+ if (!npc) {
73
+ return {
74
+ success: true,
75
+ message: 'The room is empty.',
76
+ effects: [],
77
+ rewards: [],
78
+ };
79
+ }
80
+ // Simple encounter types based on NPC type
81
+ switch (npc.type) {
82
+ case 'merchant':
83
+ return {
84
+ success: true,
85
+ message: `You meet ${npc.name}, a traveling merchant.`,
86
+ effects: [],
87
+ rewards: [],
88
+ nextAction: 'shop',
89
+ };
90
+ case 'traveler':
91
+ // Random help from traveler
92
+ const helps = Math.random() > 0.5;
93
+ if (helps) {
94
+ return {
95
+ success: true,
96
+ message: `${npc.name} shares some supplies with you.`,
97
+ effects: [{ type: 'heal', target: 'player', value: 20, description: 'Healed 20 HP' }],
98
+ rewards: [{ type: 'gold', value: 15 }],
99
+ };
100
+ }
101
+ return {
102
+ success: true,
103
+ message: `${npc.name} waves but hurries on their way.`,
104
+ effects: [],
105
+ rewards: [],
106
+ };
107
+ case 'guard':
108
+ return {
109
+ success: true,
110
+ message: `${npc.name} warns you of dangers ahead.`,
111
+ effects: [],
112
+ rewards: [],
113
+ };
114
+ case 'sage':
115
+ return {
116
+ success: true,
117
+ message: `${npc.name} shares ancient wisdom. You feel enlightened.`,
118
+ effects: [],
119
+ rewards: [{ type: 'exp', value: 30 }],
120
+ };
121
+ default:
122
+ return {
123
+ success: true,
124
+ message: `You encounter ${npc.name}.`,
125
+ effects: [],
126
+ rewards: [],
127
+ nextAction: 'dialog',
128
+ };
129
+ }
130
+ }
131
+ // ============================================================================
132
+ // Trap Room Handler
133
+ // ============================================================================
134
+ /**
135
+ * Handle trap room
136
+ * Placeholder: Simple damage or disarm
137
+ */
138
+ export function handleTrapRoom(room, player, tryDisarm = false) {
139
+ const trap = room.content.trap;
140
+ if (!trap) {
141
+ return {
142
+ success: true,
143
+ message: 'The room seems safe.',
144
+ effects: [],
145
+ rewards: [],
146
+ };
147
+ }
148
+ if (trap.isDisarmed) {
149
+ return {
150
+ success: true,
151
+ message: 'The trap has already been disarmed.',
152
+ effects: [],
153
+ rewards: [],
154
+ };
155
+ }
156
+ if (trap.isTriggered) {
157
+ return {
158
+ success: true,
159
+ message: 'The trap has already been triggered.',
160
+ effects: [],
161
+ rewards: [],
162
+ };
163
+ }
164
+ if (tryDisarm) {
165
+ // Disarm chance based on player speed and trap difficulty
166
+ const disarmChance = Math.min(0.9, (player.stats.speed / 10) / trap.disarmDifficulty);
167
+ if (Math.random() < disarmChance) {
168
+ trap.isDisarmed = true;
169
+ return {
170
+ success: true,
171
+ message: `You carefully disarmed the ${trap.name}!`,
172
+ effects: [],
173
+ rewards: [{ type: 'exp', value: 15 }],
174
+ };
175
+ }
176
+ }
177
+ // Trap triggered
178
+ trap.isTriggered = true;
179
+ const damage = Math.floor(trap.damage * (1 + Math.random() * 0.3));
180
+ return {
181
+ success: false,
182
+ message: `The ${trap.name} triggers! You take ${damage} damage.`,
183
+ effects: [{ type: 'damage', target: 'player', value: damage, description: `${trap.name} dealt ${damage} damage` }],
184
+ rewards: [],
185
+ };
186
+ }
187
+ // ============================================================================
188
+ // Puzzle Room Handler
189
+ // ============================================================================
190
+ /**
191
+ * Handle puzzle room
192
+ * Placeholder: Simple chance-based solving
193
+ */
194
+ export function handlePuzzleRoom(room, player) {
195
+ const puzzle = room.content.puzzle;
196
+ if (!puzzle) {
197
+ return {
198
+ success: true,
199
+ message: 'Nothing interesting here.',
200
+ effects: [],
201
+ rewards: [],
202
+ };
203
+ }
204
+ if (puzzle.isSolved) {
205
+ return {
206
+ success: true,
207
+ message: 'The puzzle has already been solved.',
208
+ effects: [],
209
+ rewards: [],
210
+ };
211
+ }
212
+ // Solve chance based on player level vs puzzle difficulty
213
+ const solveChance = Math.min(0.9, player.stats.level / puzzle.difficulty);
214
+ if (Math.random() < solveChance) {
215
+ puzzle.isSolved = true;
216
+ const rewards = [];
217
+ if (typeof puzzle.reward === 'number') {
218
+ rewards.push({ type: 'gold', value: puzzle.reward });
219
+ }
220
+ else {
221
+ rewards.push({ type: 'item', value: puzzle.reward.id, quantity: puzzle.reward.quantity });
222
+ }
223
+ return {
224
+ success: true,
225
+ message: `You solved the ${puzzle.name}!`,
226
+ effects: [],
227
+ rewards,
228
+ };
229
+ }
230
+ return {
231
+ success: false,
232
+ message: `The ${puzzle.name} remains unsolved. Perhaps with more experience...`,
233
+ effects: [],
234
+ rewards: [],
235
+ };
236
+ }
237
+ // ============================================================================
238
+ // Fountain Room Handler
239
+ // ============================================================================
240
+ /**
241
+ * Handle fountain room (healing)
242
+ */
243
+ export function handleFountainRoom(room, player) {
244
+ const hpRestore = Math.floor(player.stats.maxHp * 0.5);
245
+ const mpRestore = Math.floor(player.stats.maxMp * 0.3);
246
+ return {
247
+ success: true,
248
+ message: `The magical fountain restores your vitality. +${hpRestore} HP, +${mpRestore} MP`,
249
+ effects: [
250
+ { type: 'heal', target: 'player', value: hpRestore, description: `Restored ${hpRestore} HP` },
251
+ { type: 'heal', target: 'player', value: mpRestore, description: `Restored ${mpRestore} MP` },
252
+ ],
253
+ rewards: [],
254
+ };
255
+ }
256
+ // ============================================================================
257
+ // Altar Room Handler
258
+ // ============================================================================
259
+ /**
260
+ * Handle altar room (buffs)
261
+ */
262
+ export function handleAltarRoom(room, player) {
263
+ const blessings = [
264
+ { type: 'buff', value: 5, stat: 'ATK', description: '+5 ATK for 5 rooms' },
265
+ { type: 'buff', value: 5, stat: 'DEF', description: '+5 DEF for 5 rooms' },
266
+ { type: 'heal', value: 50, description: 'Restored 50 HP' },
267
+ ];
268
+ const blessing = blessings[Math.floor(Math.random() * blessings.length)];
269
+ return {
270
+ success: true,
271
+ message: `The altar glows with divine light. ${blessing.description}`,
272
+ effects: [{ ...blessing, target: 'player', duration: 5 }],
273
+ rewards: [],
274
+ };
275
+ }
276
+ // ============================================================================
277
+ // Dead End Handler
278
+ // ============================================================================
279
+ /**
280
+ * Handle dead end room (search for secrets)
281
+ */
282
+ export function handleDeadEndRoom(room, player, search = false) {
283
+ if (!search) {
284
+ return {
285
+ success: true,
286
+ message: 'A dead end. You could search for secrets...',
287
+ effects: [],
288
+ rewards: [],
289
+ };
290
+ }
291
+ // Small chance to find hidden treasure
292
+ if (Math.random() < 0.15) {
293
+ const gold = Math.floor(Math.random() * 30) + 10;
294
+ return {
295
+ success: true,
296
+ message: `You found a hidden compartment with ${gold} gold!`,
297
+ effects: [],
298
+ rewards: [{ type: 'gold', value: gold }],
299
+ };
300
+ }
301
+ return {
302
+ success: true,
303
+ message: 'Nothing but solid walls.',
304
+ effects: [],
305
+ rewards: [],
306
+ };
307
+ }
308
+ // ============================================================================
309
+ // Apply Effects to Player
310
+ // ============================================================================
311
+ /**
312
+ * Apply room effects to player
313
+ */
314
+ export function applyRoomEffects(player, effects) {
315
+ for (const effect of effects) {
316
+ if (effect.target !== 'player')
317
+ continue;
318
+ switch (effect.type) {
319
+ case 'damage':
320
+ player.stats.hp = Math.max(1, player.stats.hp - effect.value);
321
+ break;
322
+ case 'heal':
323
+ player.stats.hp = Math.min(player.stats.maxHp, player.stats.hp + effect.value);
324
+ break;
325
+ // Buff/debuff would need a buff system to track duration
326
+ // For now, they're logged but not fully implemented
327
+ case 'buff':
328
+ case 'debuff':
329
+ // Placeholder: would add to player.activeBuffs
330
+ break;
331
+ }
332
+ }
333
+ }
334
+ /**
335
+ * Apply room rewards to player
336
+ */
337
+ export function applyRoomRewards(player, rewards) {
338
+ for (const reward of rewards) {
339
+ switch (reward.type) {
340
+ case 'gold':
341
+ player.stats.gold += reward.value;
342
+ break;
343
+ case 'exp':
344
+ player.stats.exp += reward.value;
345
+ // Check level up would happen in Game.ts
346
+ break;
347
+ case 'item':
348
+ // Would add item to inventory
349
+ // For now, placeholder
350
+ break;
351
+ }
352
+ }
353
+ }
354
+ /**
355
+ * Get handler for room type
356
+ */
357
+ export function handleRoom(type, room, player, options = {}) {
358
+ switch (type) {
359
+ case 'event':
360
+ return handleEventRoom(room, player);
361
+ case 'encounter':
362
+ return handleEncounterRoom(room, player);
363
+ case 'trap':
364
+ return handleTrapRoom(room, player, options.tryDisarm);
365
+ case 'puzzle':
366
+ return handlePuzzleRoom(room, player);
367
+ case 'fountain':
368
+ return handleFountainRoom(room, player);
369
+ case 'altar':
370
+ return handleAltarRoom(room, player);
371
+ case 'dead_end':
372
+ return handleDeadEndRoom(room, player, options.search);
373
+ default:
374
+ return {
375
+ success: true,
376
+ message: 'Nothing special here.',
377
+ effects: [],
378
+ rewards: [],
379
+ };
380
+ }
381
+ }
382
+ //# sourceMappingURL=RoomHandlers.js.map
383
+ //# debugId=7d981599-71be-5a29-84ba-ce795ade5830
@@ -0,0 +1 @@
1
+ {"version":3,"file":"RoomHandlers.js","sources":["core/RoomHandlers.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Room Handlers - Placeholder implementations for special room types\r\n *\r\n * These are simplified implementations that can be expanded later.\r\n * Each handler returns a result that the DungeonRunner can use.\r\n */\r\n\r\nimport type {\r\n Player,\r\n DungeonRoom,\r\n InventoryItem,\r\n GameEvent,\r\n TrapData,\r\n PuzzleData,\r\n NPC,\r\n} from './types.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\nexport interface RoomHandlerResult {\r\n success: boolean;\r\n message: string;\r\n effects: RoomEffect[];\r\n rewards: RoomReward[];\r\n nextAction?: 'continue' | 'combat' | 'dialog' | 'shop';\r\n}\r\n\r\nexport interface RoomEffect {\r\n type: 'damage' | 'heal' | 'buff' | 'debuff' | 'status';\r\n target: 'player' | 'enemy';\r\n value: number;\r\n duration?: number;\r\n description: string;\r\n}\r\n\r\nexport interface RoomReward {\r\n type: 'gold' | 'exp' | 'item';\r\n value: number | string;\r\n quantity?: number;\r\n}\r\n\r\n// ============================================================================\r\n// Event Room Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle event room (random events)\r\n * Placeholder: Simple random outcome\r\n */\r\nexport function handleEventRoom(\r\n room: DungeonRoom,\r\n player: Player\r\n): RoomHandlerResult {\r\n const event = room.content.event;\r\n\r\n if (!event || event.processed) {\r\n return {\r\n success: true,\r\n message: 'The room is empty.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n event.processed = true;\r\n\r\n // Random event outcomes\r\n const outcomes = [\r\n {\r\n message: 'You found a hidden cache!',\r\n rewards: [{ type: 'gold' as const, value: Math.floor(Math.random() * 50) + 20 }],\r\n effects: [],\r\n },\r\n {\r\n message: 'A mysterious wind restores your energy.',\r\n rewards: [],\r\n effects: [{ type: 'heal' as const, target: 'player' as const, value: 30, description: 'Restored 30 HP' }],\r\n },\r\n {\r\n message: 'You step on a loose stone and take minor damage.',\r\n rewards: [],\r\n effects: [{ type: 'damage' as const, target: 'player' as const, value: 10, description: 'Took 10 damage' }],\r\n },\r\n {\r\n message: 'You find ancient writing on the wall. Interesting, but nothing useful.',\r\n rewards: [],\r\n effects: [],\r\n },\r\n {\r\n message: 'A ghostly figure appears and blesses you!',\r\n rewards: [{ type: 'exp' as const, value: 25 }],\r\n effects: [{ type: 'buff' as const, target: 'player' as const, value: 5, duration: 3, description: '+5 ATK for 3 rooms' }],\r\n },\r\n ];\r\n\r\n const outcome = outcomes[Math.floor(Math.random() * outcomes.length)];\r\n\r\n return {\r\n success: true,\r\n message: outcome.message,\r\n effects: outcome.effects,\r\n rewards: outcome.rewards,\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Encounter Room Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle encounter room (NPC interactions)\r\n * Placeholder: Simple friendly/hostile check\r\n */\r\nexport function handleEncounterRoom(\r\n room: DungeonRoom,\r\n player: Player\r\n): RoomHandlerResult {\r\n const npc = room.content.npc;\r\n\r\n if (!npc) {\r\n return {\r\n success: true,\r\n message: 'The room is empty.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n // Simple encounter types based on NPC type\r\n switch (npc.type) {\r\n case 'merchant':\r\n return {\r\n success: true,\r\n message: `You meet ${npc.name}, a traveling merchant.`,\r\n effects: [],\r\n rewards: [],\r\n nextAction: 'shop',\r\n };\r\n\r\n case 'traveler':\r\n // Random help from traveler\r\n const helps = Math.random() > 0.5;\r\n if (helps) {\r\n return {\r\n success: true,\r\n message: `${npc.name} shares some supplies with you.`,\r\n effects: [{ type: 'heal', target: 'player', value: 20, description: 'Healed 20 HP' }],\r\n rewards: [{ type: 'gold', value: 15 }],\r\n };\r\n }\r\n return {\r\n success: true,\r\n message: `${npc.name} waves but hurries on their way.`,\r\n effects: [],\r\n rewards: [],\r\n };\r\n\r\n case 'guard':\r\n return {\r\n success: true,\r\n message: `${npc.name} warns you of dangers ahead.`,\r\n effects: [],\r\n rewards: [],\r\n };\r\n\r\n case 'sage':\r\n return {\r\n success: true,\r\n message: `${npc.name} shares ancient wisdom. You feel enlightened.`,\r\n effects: [],\r\n rewards: [{ type: 'exp', value: 30 }],\r\n };\r\n\r\n default:\r\n return {\r\n success: true,\r\n message: `You encounter ${npc.name}.`,\r\n effects: [],\r\n rewards: [],\r\n nextAction: 'dialog',\r\n };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Trap Room Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle trap room\r\n * Placeholder: Simple damage or disarm\r\n */\r\nexport function handleTrapRoom(\r\n room: DungeonRoom,\r\n player: Player,\r\n tryDisarm: boolean = false\r\n): RoomHandlerResult {\r\n const trap = room.content.trap;\r\n\r\n if (!trap) {\r\n return {\r\n success: true,\r\n message: 'The room seems safe.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n if (trap.isDisarmed) {\r\n return {\r\n success: true,\r\n message: 'The trap has already been disarmed.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n if (trap.isTriggered) {\r\n return {\r\n success: true,\r\n message: 'The trap has already been triggered.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n if (tryDisarm) {\r\n // Disarm chance based on player speed and trap difficulty\r\n const disarmChance = Math.min(0.9, (player.stats.speed / 10) / trap.disarmDifficulty);\r\n\r\n if (Math.random() < disarmChance) {\r\n trap.isDisarmed = true;\r\n return {\r\n success: true,\r\n message: `You carefully disarmed the ${trap.name}!`,\r\n effects: [],\r\n rewards: [{ type: 'exp', value: 15 }],\r\n };\r\n }\r\n }\r\n\r\n // Trap triggered\r\n trap.isTriggered = true;\r\n const damage = Math.floor(trap.damage * (1 + Math.random() * 0.3));\r\n\r\n return {\r\n success: false,\r\n message: `The ${trap.name} triggers! You take ${damage} damage.`,\r\n effects: [{ type: 'damage', target: 'player', value: damage, description: `${trap.name} dealt ${damage} damage` }],\r\n rewards: [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Puzzle Room Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle puzzle room\r\n * Placeholder: Simple chance-based solving\r\n */\r\nexport function handlePuzzleRoom(\r\n room: DungeonRoom,\r\n player: Player\r\n): RoomHandlerResult {\r\n const puzzle = room.content.puzzle;\r\n\r\n if (!puzzle) {\r\n return {\r\n success: true,\r\n message: 'Nothing interesting here.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n if (puzzle.isSolved) {\r\n return {\r\n success: true,\r\n message: 'The puzzle has already been solved.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n // Solve chance based on player level vs puzzle difficulty\r\n const solveChance = Math.min(0.9, player.stats.level / puzzle.difficulty);\r\n\r\n if (Math.random() < solveChance) {\r\n puzzle.isSolved = true;\r\n\r\n const rewards: RoomReward[] = [];\r\n if (typeof puzzle.reward === 'number') {\r\n rewards.push({ type: 'gold', value: puzzle.reward });\r\n } else {\r\n rewards.push({ type: 'item', value: puzzle.reward.id, quantity: puzzle.reward.quantity });\r\n }\r\n\r\n return {\r\n success: true,\r\n message: `You solved the ${puzzle.name}!`,\r\n effects: [],\r\n rewards,\r\n };\r\n }\r\n\r\n return {\r\n success: false,\r\n message: `The ${puzzle.name} remains unsolved. Perhaps with more experience...`,\r\n effects: [],\r\n rewards: [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Fountain Room Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle fountain room (healing)\r\n */\r\nexport function handleFountainRoom(\r\n room: DungeonRoom,\r\n player: Player\r\n): RoomHandlerResult {\r\n const hpRestore = Math.floor(player.stats.maxHp * 0.5);\r\n const mpRestore = Math.floor(player.stats.maxMp * 0.3);\r\n\r\n return {\r\n success: true,\r\n message: `The magical fountain restores your vitality. +${hpRestore} HP, +${mpRestore} MP`,\r\n effects: [\r\n { type: 'heal', target: 'player', value: hpRestore, description: `Restored ${hpRestore} HP` },\r\n { type: 'heal', target: 'player', value: mpRestore, description: `Restored ${mpRestore} MP` },\r\n ],\r\n rewards: [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Altar Room Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle altar room (buffs)\r\n */\r\nexport function handleAltarRoom(\r\n room: DungeonRoom,\r\n player: Player\r\n): RoomHandlerResult {\r\n const blessings = [\r\n { type: 'buff' as const, value: 5, stat: 'ATK', description: '+5 ATK for 5 rooms' },\r\n { type: 'buff' as const, value: 5, stat: 'DEF', description: '+5 DEF for 5 rooms' },\r\n { type: 'heal' as const, value: 50, description: 'Restored 50 HP' },\r\n ];\r\n\r\n const blessing = blessings[Math.floor(Math.random() * blessings.length)];\r\n\r\n return {\r\n success: true,\r\n message: `The altar glows with divine light. ${blessing.description}`,\r\n effects: [{ ...blessing, target: 'player' as const, duration: 5 }],\r\n rewards: [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Dead End Handler\r\n// ============================================================================\r\n\r\n/**\r\n * Handle dead end room (search for secrets)\r\n */\r\nexport function handleDeadEndRoom(\r\n room: DungeonRoom,\r\n player: Player,\r\n search: boolean = false\r\n): RoomHandlerResult {\r\n if (!search) {\r\n return {\r\n success: true,\r\n message: 'A dead end. You could search for secrets...',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n\r\n // Small chance to find hidden treasure\r\n if (Math.random() < 0.15) {\r\n const gold = Math.floor(Math.random() * 30) + 10;\r\n return {\r\n success: true,\r\n message: `You found a hidden compartment with ${gold} gold!`,\r\n effects: [],\r\n rewards: [{ type: 'gold', value: gold }],\r\n };\r\n }\r\n\r\n return {\r\n success: true,\r\n message: 'Nothing but solid walls.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Apply Effects to Player\r\n// ============================================================================\r\n\r\n/**\r\n * Apply room effects to player\r\n */\r\nexport function applyRoomEffects(\r\n player: Player,\r\n effects: RoomEffect[]\r\n): void {\r\n for (const effect of effects) {\r\n if (effect.target !== 'player') continue;\r\n\r\n switch (effect.type) {\r\n case 'damage':\r\n player.stats.hp = Math.max(1, player.stats.hp - effect.value);\r\n break;\r\n\r\n case 'heal':\r\n player.stats.hp = Math.min(player.stats.maxHp, player.stats.hp + effect.value);\r\n break;\r\n\r\n // Buff/debuff would need a buff system to track duration\r\n // For now, they're logged but not fully implemented\r\n case 'buff':\r\n case 'debuff':\r\n // Placeholder: would add to player.activeBuffs\r\n break;\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Apply room rewards to player\r\n */\r\nexport function applyRoomRewards(\r\n player: Player,\r\n rewards: RoomReward[]\r\n): void {\r\n for (const reward of rewards) {\r\n switch (reward.type) {\r\n case 'gold':\r\n player.stats.gold += reward.value as number;\r\n break;\r\n\r\n case 'exp':\r\n player.stats.exp += reward.value as number;\r\n // Check level up would happen in Game.ts\r\n break;\r\n\r\n case 'item':\r\n // Would add item to inventory\r\n // For now, placeholder\r\n break;\r\n }\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Room Handler Registry\r\n// ============================================================================\r\n\r\nexport type RoomHandlerType = 'event' | 'encounter' | 'trap' | 'puzzle' | 'fountain' | 'altar' | 'dead_end';\r\n\r\n/**\r\n * Get handler for room type\r\n */\r\nexport function handleRoom(\r\n type: RoomHandlerType,\r\n room: DungeonRoom,\r\n player: Player,\r\n options: { tryDisarm?: boolean; search?: boolean } = {}\r\n): RoomHandlerResult {\r\n switch (type) {\r\n case 'event':\r\n return handleEventRoom(room, player);\r\n case 'encounter':\r\n return handleEncounterRoom(room, player);\r\n case 'trap':\r\n return handleTrapRoom(room, player, options.tryDisarm);\r\n case 'puzzle':\r\n return handlePuzzleRoom(room, player);\r\n case 'fountain':\r\n return handleFountainRoom(room, player);\r\n case 'altar':\r\n return handleAltarRoom(room, player);\r\n case 'dead_end':\r\n return handleDeadEndRoom(room, player, options.search);\r\n default:\r\n return {\r\n success: true,\r\n message: 'Nothing special here.',\r\n effects: [],\r\n rewards: [],\r\n };\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"7d981599-71be-5a29-84ba-ce795ade5830"}
@@ -0,0 +1,84 @@
1
+ /**
2
+ * Save Manager - Handles game save/load with file persistence
3
+ */
4
+ import type { SaveData } from './types.js';
5
+ import type { NPCSaveData } from '../npc/types.js';
6
+ import type { QuestSaveData } from '../quest/types.js';
7
+ /**
8
+ * Complete save file structure
9
+ */
10
+ export interface FullSaveData {
11
+ game: SaveData;
12
+ npcs: NPCSaveData;
13
+ quests: QuestSaveData;
14
+ checksum: string;
15
+ }
16
+ /**
17
+ * Save slot info for listing saves
18
+ */
19
+ export interface SaveSlotInfo {
20
+ slot: number;
21
+ playerName: string;
22
+ level: number;
23
+ gameTime: number;
24
+ timestamp: number;
25
+ exists: boolean;
26
+ }
27
+ /**
28
+ * Save game to a slot
29
+ */
30
+ export declare function saveGame(slot: number, game: SaveData, npcs: NPCSaveData, quests: QuestSaveData): Promise<{
31
+ success: boolean;
32
+ error?: string;
33
+ }>;
34
+ /**
35
+ * Load game from a slot
36
+ */
37
+ export declare function loadGame(slot: number): Promise<{
38
+ success: boolean;
39
+ data?: FullSaveData;
40
+ error?: string;
41
+ }>;
42
+ /**
43
+ * List all save slots with info
44
+ */
45
+ export declare function listSaveSlots(): Promise<SaveSlotInfo[]>;
46
+ /**
47
+ * Delete a save slot
48
+ */
49
+ export declare function deleteSave(slot: number): Promise<{
50
+ success: boolean;
51
+ error?: string;
52
+ }>;
53
+ /**
54
+ * Check if a save slot exists
55
+ */
56
+ export declare function saveExists(slot: number): Promise<boolean>;
57
+ /**
58
+ * Get the most recent save slot
59
+ */
60
+ export declare function getMostRecentSave(): Promise<number | null>;
61
+ /**
62
+ * Auto-save to a dedicated auto-save slot (slot 0)
63
+ */
64
+ export declare function autoSave(game: SaveData, npcs: NPCSaveData, quests: QuestSaveData): Promise<{
65
+ success: boolean;
66
+ error?: string;
67
+ }>;
68
+ /**
69
+ * Load auto-save
70
+ */
71
+ export declare function loadAutoSave(): Promise<{
72
+ success: boolean;
73
+ data?: FullSaveData;
74
+ error?: string;
75
+ }>;
76
+ /**
77
+ * Format time for display
78
+ */
79
+ export declare function formatPlayTime(seconds: number): string;
80
+ /**
81
+ * Format timestamp for display
82
+ */
83
+ export declare function formatTimestamp(timestamp: number): string;
84
+ //# sourceMappingURL=SaveManager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SaveManager.d.ts","sourceRoot":"/","sources":["core/SaveManager.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,OAAO,KAAK,EAAE,QAAQ,EAAgB,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,iBAAiB,CAAC;AACnD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvD;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,QAAQ,CAAC;IACf,IAAI,EAAE,WAAW,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AA4CD;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAwC/C;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACpD,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAsCD;AAED;;GAEG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,YAAY,EAAE,CAAC,CA8B7D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgB5F;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAQ/D;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQhE;AAED;;GAEG;AACH,wBAAsB,QAAQ,CAC5B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,WAAW,EACjB,MAAM,EAAE,aAAa,GACpB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAgC/C;AAED;;GAEG;AACH,wBAAsB,YAAY,IAAI,OAAO,CAAC;IAC5C,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,YAAY,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC,CAiBD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQtD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQzD"}