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,294 @@
1
+ /**
2
+ * Combat system - handles battles with Idle RPG mechanics
3
+ */
4
+
5
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="22ce7d41-75c0-5801-9f33-e30a9bbae9bc")}catch(e){}}();
6
+ import { t } from '../i18n/index.js';
7
+ /**
8
+ * Initialize a new combat state
9
+ */
10
+ export function initCombat(player, enemies) {
11
+ // Estimate combat duration based on total enemy HP and player attack
12
+ const totalEnemyHp = enemies.reduce((sum, e) => sum + e.maxHp, 0);
13
+ const avgPlayerDamage = player.stats.attack * 0.8; // Account for defense
14
+ const estimatedTurns = Math.ceil(totalEnemyHp / avgPlayerDamage);
15
+ const estimatedDuration = estimatedTurns * 2; // 2 seconds per turn
16
+ return {
17
+ isActive: true,
18
+ turn: 0,
19
+ playerHp: player.stats.hp,
20
+ enemies: enemies.map(e => ({ ...e })), // Clone enemies
21
+ log: [{
22
+ timestamp: Date.now(),
23
+ message: t('combat.battleStart'),
24
+ type: 'system',
25
+ }],
26
+ strategy: 'balanced',
27
+ startTime: Date.now(),
28
+ estimatedEndTime: Date.now() + estimatedDuration * 1000,
29
+ };
30
+ }
31
+ /**
32
+ * Process a single combat turn
33
+ */
34
+ export function processCombatTurn(combat, player) {
35
+ if (!combat.isActive) {
36
+ return { combat, finished: true, victory: false };
37
+ }
38
+ combat.turn++;
39
+ const log = [];
40
+ // Get living enemies
41
+ const livingEnemies = combat.enemies.filter(e => e.hp > 0);
42
+ if (livingEnemies.length === 0) {
43
+ return endCombat(combat, true);
44
+ }
45
+ // Player attacks based on strategy
46
+ const playerDamage = calculatePlayerDamage(player, combat.strategy);
47
+ const targetEnemy = selectTarget(livingEnemies, combat.strategy);
48
+ const actualDamage = applyDamage(targetEnemy, playerDamage);
49
+ log.push({
50
+ timestamp: Date.now(),
51
+ message: `${player.name} ${t('combat.damage', { amount: actualDamage })} to ${targetEnemy.name}`,
52
+ type: 'damage',
53
+ });
54
+ // Check for critical hit
55
+ if (Math.random() < 0.1) {
56
+ log.push({
57
+ timestamp: Date.now(),
58
+ message: t('combat.critical'),
59
+ type: 'damage',
60
+ });
61
+ }
62
+ // Apply weapon effects (affixes)
63
+ if (player.equipment.weapon) {
64
+ applyWeaponEffects(player.equipment.weapon, targetEnemy, log);
65
+ }
66
+ // Check if enemy defeated
67
+ if (targetEnemy.hp <= 0) {
68
+ log.push({
69
+ timestamp: Date.now(),
70
+ message: `${targetEnemy.name} defeated!`,
71
+ type: 'system',
72
+ });
73
+ }
74
+ // Enemies attack
75
+ for (const enemy of livingEnemies.filter(e => e.hp > 0)) {
76
+ const enemyDamage = calculateEnemyDamage(enemy, player, combat.strategy);
77
+ combat.playerHp = Math.max(0, combat.playerHp - enemyDamage);
78
+ log.push({
79
+ timestamp: Date.now(),
80
+ message: `${enemy.name} ${t('combat.damage', { amount: enemyDamage })} to ${player.name}`,
81
+ type: 'damage',
82
+ });
83
+ }
84
+ // Check player defeat
85
+ if (combat.playerHp <= 0) {
86
+ return endCombat(combat, false);
87
+ }
88
+ // Check all enemies defeated
89
+ if (combat.enemies.every(e => e.hp <= 0)) {
90
+ return endCombat(combat, true);
91
+ }
92
+ combat.log.push(...log);
93
+ return { combat, finished: false, victory: false };
94
+ }
95
+ /**
96
+ * Calculate player damage based on strategy
97
+ */
98
+ function calculatePlayerDamage(player, strategy) {
99
+ let baseDamage = player.stats.attack;
100
+ // Apply equipment bonuses
101
+ if (player.equipment.weapon) {
102
+ baseDamage += player.equipment.weapon.baseAttack;
103
+ }
104
+ // Strategy modifiers
105
+ switch (strategy) {
106
+ case 'aggressive':
107
+ baseDamage *= 1.3;
108
+ break;
109
+ case 'defensive':
110
+ baseDamage *= 0.7;
111
+ break;
112
+ case 'skill_focus':
113
+ baseDamage *= 1.1;
114
+ break;
115
+ default:
116
+ break;
117
+ }
118
+ // Add some randomness (±20%)
119
+ const variance = 0.2;
120
+ const multiplier = 1 + (Math.random() * variance * 2 - variance);
121
+ return Math.floor(baseDamage * multiplier);
122
+ }
123
+ /**
124
+ * Calculate enemy damage based on defense and strategy
125
+ */
126
+ function calculateEnemyDamage(enemy, player, strategy) {
127
+ let baseDamage = enemy.attack;
128
+ let defense = player.stats.defense;
129
+ // Apply armor bonuses
130
+ if (player.equipment.armor) {
131
+ defense += player.equipment.armor.baseDefense;
132
+ }
133
+ // Strategy modifiers for defense
134
+ switch (strategy) {
135
+ case 'aggressive':
136
+ defense *= 0.7; // Take more damage
137
+ break;
138
+ case 'defensive':
139
+ defense *= 1.5; // Take less damage
140
+ break;
141
+ default:
142
+ break;
143
+ }
144
+ // Damage formula: attack - defense/2, minimum 1
145
+ const damage = Math.max(1, baseDamage - Math.floor(defense / 2));
146
+ // Add some randomness
147
+ const variance = 0.15;
148
+ const multiplier = 1 + (Math.random() * variance * 2 - variance);
149
+ return Math.floor(damage * multiplier);
150
+ }
151
+ /**
152
+ * Select target enemy based on strategy
153
+ */
154
+ function selectTarget(enemies, strategy) {
155
+ switch (strategy) {
156
+ case 'aggressive':
157
+ // Target lowest HP enemy for quick kills
158
+ return enemies.reduce((min, e) => e.hp < min.hp ? e : min, enemies[0]);
159
+ case 'defensive':
160
+ // Target highest damage enemy first
161
+ return enemies.reduce((max, e) => e.attack > max.attack ? e : max, enemies[0]);
162
+ case 'skill_focus':
163
+ // Target boss first if present
164
+ const boss = enemies.find(e => e.isBoss);
165
+ return boss || enemies[0];
166
+ default:
167
+ return enemies[0];
168
+ }
169
+ }
170
+ /**
171
+ * Apply damage to enemy
172
+ */
173
+ function applyDamage(enemy, damage) {
174
+ const actualDamage = Math.max(1, damage - Math.floor(enemy.defense / 3));
175
+ enemy.hp = Math.max(0, enemy.hp - actualDamage);
176
+ return actualDamage;
177
+ }
178
+ /**
179
+ * Apply weapon effects from affixes
180
+ */
181
+ function applyWeaponEffects(weapon, target, log) {
182
+ // Process each affix's on-hit effects
183
+ for (const affix of weapon.affixes) {
184
+ // Element damage effects based on affix name patterns
185
+ const elementEffects = {
186
+ 'of_flames': { element: 'fire', baseDamage: 8, statusChance: 0.3 },
187
+ 'of_frost': { element: 'ice', baseDamage: 6, statusChance: 0.25 },
188
+ 'of_thunder': { element: 'lightning', baseDamage: 12, statusChance: 0.15 },
189
+ 'of_venom': { element: 'poison', baseDamage: 4, statusChance: 0.5 },
190
+ 'of_the_night': { element: 'dark', baseDamage: 15, statusChance: 0.2 },
191
+ 'of_light': { element: 'holy', baseDamage: 10, statusChance: 0.3 },
192
+ };
193
+ const effect = elementEffects[affix.definitionId];
194
+ if (effect) {
195
+ // Apply elemental damage
196
+ target.hp = Math.max(0, target.hp - effect.baseDamage);
197
+ log.push({
198
+ timestamp: Date.now(),
199
+ message: `${effect.element} damage: ${effect.baseDamage}`,
200
+ type: 'damage',
201
+ });
202
+ // Chance to apply status effect
203
+ if (Math.random() < effect.statusChance) {
204
+ log.push({
205
+ timestamp: Date.now(),
206
+ message: t('combat.statusEffect', { target: target.name, effect: effect.element }),
207
+ type: 'status',
208
+ });
209
+ }
210
+ }
211
+ // Vampiric effect
212
+ if (affix.definitionId === 'vampiric') {
213
+ const healAmount = Math.floor(weapon.baseAttack * 0.1);
214
+ log.push({
215
+ timestamp: Date.now(),
216
+ message: t('combat.heal', { amount: healAmount }),
217
+ type: 'heal',
218
+ });
219
+ }
220
+ // Critical bonuses from deadly affix are handled in damage calculation
221
+ }
222
+ }
223
+ /**
224
+ * End combat and calculate rewards
225
+ */
226
+ function endCombat(combat, victory) {
227
+ combat.isActive = false;
228
+ if (victory) {
229
+ combat.log.push({
230
+ timestamp: Date.now(),
231
+ message: t('combat.victory'),
232
+ type: 'system',
233
+ });
234
+ }
235
+ else {
236
+ combat.log.push({
237
+ timestamp: Date.now(),
238
+ message: t('combat.defeat'),
239
+ type: 'system',
240
+ });
241
+ }
242
+ return { combat, finished: true, victory };
243
+ }
244
+ /**
245
+ * Calculate combat rewards
246
+ */
247
+ export function calculateCombatRewards(enemies) {
248
+ let exp = 0;
249
+ let gold = 0;
250
+ const items = [];
251
+ for (const enemy of enemies) {
252
+ exp += enemy.expReward;
253
+ gold += enemy.goldReward;
254
+ // Roll for drops
255
+ for (const drop of enemy.dropTable) {
256
+ if (Math.random() < drop.chance) {
257
+ items.push(drop.itemId);
258
+ }
259
+ }
260
+ }
261
+ return { exp, gold, items };
262
+ }
263
+ /**
264
+ * Format combat log for display
265
+ */
266
+ export function formatCombatLog(combat, maxLines = 10) {
267
+ return combat.log
268
+ .slice(-maxLines)
269
+ .map(entry => {
270
+ const time = new Date(entry.timestamp).toLocaleTimeString();
271
+ return `[${time}] ${entry.message}`;
272
+ });
273
+ }
274
+ /**
275
+ * Get combat progress (0-1)
276
+ */
277
+ export function getCombatProgress(combat) {
278
+ const totalMaxHp = combat.enemies.reduce((sum, e) => sum + e.maxHp, 0);
279
+ const totalCurrentHp = combat.enemies.reduce((sum, e) => sum + Math.max(0, e.hp), 0);
280
+ return 1 - (totalCurrentHp / totalMaxHp);
281
+ }
282
+ /**
283
+ * Get estimated time remaining
284
+ */
285
+ export function getEstimatedTimeRemaining(combat) {
286
+ const elapsed = Date.now() - combat.startTime;
287
+ const progress = getCombatProgress(combat);
288
+ if (progress <= 0)
289
+ return Infinity;
290
+ const totalEstimated = elapsed / progress;
291
+ return Math.max(0, totalEstimated - elapsed);
292
+ }
293
+ //# sourceMappingURL=Combat.js.map
294
+ //# debugId=22ce7d41-75c0-5801-9f33-e30a9bbae9bc
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combat.js","sources":["core/Combat.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Combat system - handles battles with Idle RPG mechanics\r\n */\r\n\r\nimport type {\r\n Player,\r\n Enemy,\r\n CombatState,\r\n CombatStrategy,\r\n CombatLogEntry,\r\n Weapon,\r\n} from './types.js';\r\nimport { t } from '../i18n/index.js';\r\n\r\n/**\r\n * Initialize a new combat state\r\n */\r\nexport function initCombat(player: Player, enemies: Enemy[]): CombatState {\r\n // Estimate combat duration based on total enemy HP and player attack\r\n const totalEnemyHp = enemies.reduce((sum, e) => sum + e.maxHp, 0);\r\n const avgPlayerDamage = player.stats.attack * 0.8; // Account for defense\r\n const estimatedTurns = Math.ceil(totalEnemyHp / avgPlayerDamage);\r\n const estimatedDuration = estimatedTurns * 2; // 2 seconds per turn\r\n\r\n return {\r\n isActive: true,\r\n turn: 0,\r\n playerHp: player.stats.hp,\r\n enemies: enemies.map(e => ({ ...e })), // Clone enemies\r\n log: [{\r\n timestamp: Date.now(),\r\n message: t('combat.battleStart'),\r\n type: 'system',\r\n }],\r\n strategy: 'balanced',\r\n startTime: Date.now(),\r\n estimatedEndTime: Date.now() + estimatedDuration * 1000,\r\n };\r\n}\r\n\r\n/**\r\n * Process a single combat turn\r\n */\r\nexport function processCombatTurn(\r\n combat: CombatState,\r\n player: Player\r\n): { combat: CombatState; finished: boolean; victory: boolean } {\r\n if (!combat.isActive) {\r\n return { combat, finished: true, victory: false };\r\n }\r\n\r\n combat.turn++;\r\n const log: CombatLogEntry[] = [];\r\n\r\n // Get living enemies\r\n const livingEnemies = combat.enemies.filter(e => e.hp > 0);\r\n if (livingEnemies.length === 0) {\r\n return endCombat(combat, true);\r\n }\r\n\r\n // Player attacks based on strategy\r\n const playerDamage = calculatePlayerDamage(player, combat.strategy);\r\n const targetEnemy = selectTarget(livingEnemies, combat.strategy);\r\n \r\n const actualDamage = applyDamage(targetEnemy, playerDamage);\r\n log.push({\r\n timestamp: Date.now(),\r\n message: `${player.name} ${t('combat.damage', { amount: actualDamage })} to ${targetEnemy.name}`,\r\n type: 'damage',\r\n });\r\n\r\n // Check for critical hit\r\n if (Math.random() < 0.1) {\r\n log.push({\r\n timestamp: Date.now(),\r\n message: t('combat.critical'),\r\n type: 'damage',\r\n });\r\n }\r\n\r\n // Apply weapon effects (affixes)\r\n if (player.equipment.weapon) {\r\n applyWeaponEffects(player.equipment.weapon, targetEnemy, log);\r\n }\r\n\r\n // Check if enemy defeated\r\n if (targetEnemy.hp <= 0) {\r\n log.push({\r\n timestamp: Date.now(),\r\n message: `${targetEnemy.name} defeated!`,\r\n type: 'system',\r\n });\r\n }\r\n\r\n // Enemies attack\r\n for (const enemy of livingEnemies.filter(e => e.hp > 0)) {\r\n const enemyDamage = calculateEnemyDamage(enemy, player, combat.strategy);\r\n combat.playerHp = Math.max(0, combat.playerHp - enemyDamage);\r\n \r\n log.push({\r\n timestamp: Date.now(),\r\n message: `${enemy.name} ${t('combat.damage', { amount: enemyDamage })} to ${player.name}`,\r\n type: 'damage',\r\n });\r\n }\r\n\r\n // Check player defeat\r\n if (combat.playerHp <= 0) {\r\n return endCombat(combat, false);\r\n }\r\n\r\n // Check all enemies defeated\r\n if (combat.enemies.every(e => e.hp <= 0)) {\r\n return endCombat(combat, true);\r\n }\r\n\r\n combat.log.push(...log);\r\n\r\n return { combat, finished: false, victory: false };\r\n}\r\n\r\n/**\r\n * Calculate player damage based on strategy\r\n */\r\nfunction calculatePlayerDamage(player: Player, strategy: CombatStrategy): number {\r\n let baseDamage = player.stats.attack;\r\n \r\n // Apply equipment bonuses\r\n if (player.equipment.weapon) {\r\n baseDamage += player.equipment.weapon.baseAttack;\r\n }\r\n\r\n // Strategy modifiers\r\n switch (strategy) {\r\n case 'aggressive':\r\n baseDamage *= 1.3;\r\n break;\r\n case 'defensive':\r\n baseDamage *= 0.7;\r\n break;\r\n case 'skill_focus':\r\n baseDamage *= 1.1;\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n // Add some randomness (±20%)\r\n const variance = 0.2;\r\n const multiplier = 1 + (Math.random() * variance * 2 - variance);\r\n \r\n return Math.floor(baseDamage * multiplier);\r\n}\r\n\r\n/**\r\n * Calculate enemy damage based on defense and strategy\r\n */\r\nfunction calculateEnemyDamage(\r\n enemy: Enemy,\r\n player: Player,\r\n strategy: CombatStrategy\r\n): number {\r\n let baseDamage = enemy.attack;\r\n let defense = player.stats.defense;\r\n\r\n // Apply armor bonuses\r\n if (player.equipment.armor) {\r\n defense += player.equipment.armor.baseDefense;\r\n }\r\n\r\n // Strategy modifiers for defense\r\n switch (strategy) {\r\n case 'aggressive':\r\n defense *= 0.7; // Take more damage\r\n break;\r\n case 'defensive':\r\n defense *= 1.5; // Take less damage\r\n break;\r\n default:\r\n break;\r\n }\r\n\r\n // Damage formula: attack - defense/2, minimum 1\r\n const damage = Math.max(1, baseDamage - Math.floor(defense / 2));\r\n \r\n // Add some randomness\r\n const variance = 0.15;\r\n const multiplier = 1 + (Math.random() * variance * 2 - variance);\r\n \r\n return Math.floor(damage * multiplier);\r\n}\r\n\r\n/**\r\n * Select target enemy based on strategy\r\n */\r\nfunction selectTarget(enemies: Enemy[], strategy: CombatStrategy): Enemy {\r\n switch (strategy) {\r\n case 'aggressive':\r\n // Target lowest HP enemy for quick kills\r\n return enemies.reduce((min, e) => e.hp < min.hp ? e : min, enemies[0]);\r\n case 'defensive':\r\n // Target highest damage enemy first\r\n return enemies.reduce((max, e) => e.attack > max.attack ? e : max, enemies[0]);\r\n case 'skill_focus':\r\n // Target boss first if present\r\n const boss = enemies.find(e => e.isBoss);\r\n return boss || enemies[0];\r\n default:\r\n return enemies[0];\r\n }\r\n}\r\n\r\n/**\r\n * Apply damage to enemy\r\n */\r\nfunction applyDamage(enemy: Enemy, damage: number): number {\r\n const actualDamage = Math.max(1, damage - Math.floor(enemy.defense / 3));\r\n enemy.hp = Math.max(0, enemy.hp - actualDamage);\r\n return actualDamage;\r\n}\r\n\r\n/**\r\n * Apply weapon effects from affixes\r\n */\r\nfunction applyWeaponEffects(\r\n weapon: Weapon,\r\n target: Enemy,\r\n log: CombatLogEntry[]\r\n): void {\r\n // Process each affix's on-hit effects\r\n for (const affix of weapon.affixes) {\r\n // Element damage effects based on affix name patterns\r\n const elementEffects: Record<string, { element: string; baseDamage: number; statusChance: number }> = {\r\n 'of_flames': { element: 'fire', baseDamage: 8, statusChance: 0.3 },\r\n 'of_frost': { element: 'ice', baseDamage: 6, statusChance: 0.25 },\r\n 'of_thunder': { element: 'lightning', baseDamage: 12, statusChance: 0.15 },\r\n 'of_venom': { element: 'poison', baseDamage: 4, statusChance: 0.5 },\r\n 'of_the_night': { element: 'dark', baseDamage: 15, statusChance: 0.2 },\r\n 'of_light': { element: 'holy', baseDamage: 10, statusChance: 0.3 },\r\n };\r\n\r\n const effect = elementEffects[affix.definitionId];\r\n if (effect) {\r\n // Apply elemental damage\r\n target.hp = Math.max(0, target.hp - effect.baseDamage);\r\n log.push({\r\n timestamp: Date.now(),\r\n message: `${effect.element} damage: ${effect.baseDamage}`,\r\n type: 'damage',\r\n });\r\n\r\n // Chance to apply status effect\r\n if (Math.random() < effect.statusChance) {\r\n log.push({\r\n timestamp: Date.now(),\r\n message: t('combat.statusEffect', { target: target.name, effect: effect.element }),\r\n type: 'status',\r\n });\r\n }\r\n }\r\n\r\n // Vampiric effect\r\n if (affix.definitionId === 'vampiric') {\r\n const healAmount = Math.floor(weapon.baseAttack * 0.1);\r\n log.push({\r\n timestamp: Date.now(),\r\n message: t('combat.heal', { amount: healAmount }),\r\n type: 'heal',\r\n });\r\n }\r\n\r\n // Critical bonuses from deadly affix are handled in damage calculation\r\n }\r\n}\r\n\r\n/**\r\n * End combat and calculate rewards\r\n */\r\nfunction endCombat(\r\n combat: CombatState,\r\n victory: boolean\r\n): { combat: CombatState; finished: boolean; victory: boolean } {\r\n combat.isActive = false;\r\n\r\n if (victory) {\r\n combat.log.push({\r\n timestamp: Date.now(),\r\n message: t('combat.victory'),\r\n type: 'system',\r\n });\r\n } else {\r\n combat.log.push({\r\n timestamp: Date.now(),\r\n message: t('combat.defeat'),\r\n type: 'system',\r\n });\r\n }\r\n\r\n return { combat, finished: true, victory };\r\n}\r\n\r\n/**\r\n * Calculate combat rewards\r\n */\r\nexport function calculateCombatRewards(\r\n enemies: Enemy[]\r\n): { exp: number; gold: number; items: string[] } {\r\n let exp = 0;\r\n let gold = 0;\r\n const items: string[] = [];\r\n\r\n for (const enemy of enemies) {\r\n exp += enemy.expReward;\r\n gold += enemy.goldReward;\r\n\r\n // Roll for drops\r\n for (const drop of enemy.dropTable) {\r\n if (Math.random() < drop.chance) {\r\n items.push(drop.itemId);\r\n }\r\n }\r\n }\r\n\r\n return { exp, gold, items };\r\n}\r\n\r\n/**\r\n * Format combat log for display\r\n */\r\nexport function formatCombatLog(combat: CombatState, maxLines: number = 10): string[] {\r\n return combat.log\r\n .slice(-maxLines)\r\n .map(entry => {\r\n const time = new Date(entry.timestamp).toLocaleTimeString();\r\n return `[${time}] ${entry.message}`;\r\n });\r\n}\r\n\r\n/**\r\n * Get combat progress (0-1)\r\n */\r\nexport function getCombatProgress(combat: CombatState): number {\r\n const totalMaxHp = combat.enemies.reduce((sum, e) => sum + e.maxHp, 0);\r\n const totalCurrentHp = combat.enemies.reduce((sum, e) => sum + Math.max(0, e.hp), 0);\r\n return 1 - (totalCurrentHp / totalMaxHp);\r\n}\r\n\r\n/**\r\n * Get estimated time remaining\r\n */\r\nexport function getEstimatedTimeRemaining(combat: CombatState): number {\r\n const elapsed = Date.now() - combat.startTime;\r\n const progress = getCombatProgress(combat);\r\n \r\n if (progress <= 0) return Infinity;\r\n \r\n const totalEstimated = elapsed / progress;\r\n return Math.max(0, totalEstimated - elapsed);\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"22ce7d41-75c0-5801-9f33-e30a9bbae9bc"}
@@ -0,0 +1,169 @@
1
+ /**
2
+ * Dungeon Runner
3
+ * Main exploration loop for AI-driven dungeon crawling
4
+ *
5
+ * Coordinates between:
6
+ * - TimeManager: Real-time action scheduling
7
+ * - StrategyExecutor: Decision making
8
+ * - IdleCombat: Battle processing
9
+ * - DungeonGenerator: Map data
10
+ */
11
+ import type { Player, Dungeon, DungeonRoom, StrategyStateMachine, ActiveDungeonState, InventoryItem, Enemy } from './types.js';
12
+ import { StrategyExecutor } from '../strategy/index.js';
13
+ import { type IdleCombatState, type CombatTurnResult } from './IdleCombat.js';
14
+ export type DungeonRunnerPhase = 'idle' | 'entering' | 'exploring' | 'in_combat' | 'processing_room' | 'moving' | 'descending' | 'returning' | 'completed' | 'failed';
15
+ export interface DungeonRunnerState {
16
+ phase: DungeonRunnerPhase;
17
+ dungeon: Dungeon;
18
+ currentLevel: number;
19
+ currentRoomId: string;
20
+ exploredRooms: Set<string>;
21
+ clearedRooms: Set<string>;
22
+ strategy: StrategyStateMachine;
23
+ strategyExecutor: StrategyExecutor;
24
+ activeCombat: IdleCombatState | null;
25
+ lootCollected: InventoryItem[];
26
+ goldCollected: number;
27
+ expGained: number;
28
+ enemiesKilled: number;
29
+ startTime: number;
30
+ eventLog: string[];
31
+ }
32
+ export interface DungeonRunnerCallbacks {
33
+ onPhaseChange: (phase: DungeonRunnerPhase, state: DungeonRunnerState) => void;
34
+ onRoomEnter: (room: DungeonRoom, state: DungeonRunnerState) => void;
35
+ onCombatStart: (enemies: Enemy[], state: DungeonRunnerState) => void;
36
+ onCombatTurn: (result: CombatTurnResult, state: DungeonRunnerState) => void;
37
+ onCombatEnd: (victory: boolean, rewards: {
38
+ exp: number;
39
+ gold: number;
40
+ items: string[];
41
+ }, state: DungeonRunnerState) => void;
42
+ onLevelComplete: (level: number, state: DungeonRunnerState) => void;
43
+ onDungeonComplete: (state: DungeonRunnerState) => void;
44
+ onDungeonFailed: (reason: string, state: DungeonRunnerState) => void;
45
+ onEventLog: (message: string, state: DungeonRunnerState) => void;
46
+ }
47
+ export declare class DungeonRunner {
48
+ private state;
49
+ private player;
50
+ private timeManager;
51
+ private callbacks;
52
+ private isPaused;
53
+ constructor(player: Player);
54
+ /**
55
+ * Set callbacks for dungeon events
56
+ */
57
+ setCallbacks(callbacks: Partial<DungeonRunnerCallbacks>): void;
58
+ /**
59
+ * Start a dungeon run
60
+ */
61
+ startDungeon(dungeon: Dungeon, strategy: StrategyStateMachine): void;
62
+ /**
63
+ * Get current state
64
+ */
65
+ getState(): DungeonRunnerState | null;
66
+ /**
67
+ * Get current room
68
+ */
69
+ getCurrentRoom(): DungeonRoom | null;
70
+ /**
71
+ * Pause dungeon exploration
72
+ */
73
+ pause(): void;
74
+ /**
75
+ * Resume dungeon exploration
76
+ */
77
+ resume(): void;
78
+ /**
79
+ * Abort dungeon run
80
+ */
81
+ abort(): void;
82
+ /**
83
+ * Get active dungeon state for saving
84
+ */
85
+ getActiveDungeonState(): ActiveDungeonState | null;
86
+ /**
87
+ * Handle time action completion
88
+ */
89
+ private handleActionComplete;
90
+ /**
91
+ * Enter a room
92
+ */
93
+ private enterRoom;
94
+ /**
95
+ * Process current room based on type
96
+ */
97
+ private processRoom;
98
+ /**
99
+ * Start combat in room
100
+ */
101
+ private startCombat;
102
+ /**
103
+ * Queue next combat turn
104
+ */
105
+ private queueCombatTurn;
106
+ /**
107
+ * Process combat turn
108
+ */
109
+ private processCombatTurn;
110
+ /**
111
+ * End combat
112
+ */
113
+ private endCombat;
114
+ /**
115
+ * Process treasure room
116
+ */
117
+ private processTreasureRoom;
118
+ /**
119
+ * Process fountain room (heal)
120
+ */
121
+ private processFountainRoom;
122
+ /**
123
+ * Process altar room (buff)
124
+ */
125
+ private processAltarRoom;
126
+ /**
127
+ * Process shop room
128
+ */
129
+ private processShopRoom;
130
+ /**
131
+ * Process trap room
132
+ */
133
+ private processTrapRoom;
134
+ /**
135
+ * Process event/encounter room
136
+ */
137
+ private processEventRoom;
138
+ /**
139
+ * Process exit room
140
+ */
141
+ private processExitRoom;
142
+ /**
143
+ * Descend to next dungeon level
144
+ */
145
+ private descendToNextLevel;
146
+ /**
147
+ * After room is processed, decide next action
148
+ */
149
+ private afterRoomProcessed;
150
+ /**
151
+ * Execute exploration decision
152
+ */
153
+ private executeExplorationDecision;
154
+ /**
155
+ * Set phase and notify callback
156
+ */
157
+ private setPhase;
158
+ /**
159
+ * Add to event log
160
+ */
161
+ private log;
162
+ /**
163
+ * Finish dungeon run
164
+ */
165
+ private finishDungeon;
166
+ }
167
+ export declare function getDungeonRunner(player: Player): DungeonRunner;
168
+ export declare function createDungeonRunner(player: Player): DungeonRunner;
169
+ //# sourceMappingURL=DungeonRunner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"DungeonRunner.d.ts","sourceRoot":"/","sources":["core/DungeonRunner.ts"],"names":[],"mappings":"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"}