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