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,409 @@
1
+ /**
2
+ * Actor - Functions for creating and managing individual characters
3
+ *
4
+ * An Actor represents a single playable character. Multiple Actors can
5
+ * form a Team for cooperative gameplay.
6
+ */
7
+ // ============================================================================
8
+ // Constants
9
+ // ============================================================================
10
+ /**
11
+ * Default AI settings for new actors
12
+ */
13
+
14
+ !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]="c5466145-1d1d-53ac-83d2-9163a786cc39")}catch(e){}}();
15
+ export const DEFAULT_AI_SETTINGS = {
16
+ autoAttack: true,
17
+ useSkills: true,
18
+ targetPriority: 'nearest',
19
+ healThreshold: 0.3,
20
+ retreatThreshold: 0.15,
21
+ };
22
+ /**
23
+ * Base stats for level 1 actors by role
24
+ */
25
+ const BASE_STATS_BY_ROLE = {
26
+ tank: {
27
+ maxHp: 150,
28
+ maxMp: 30,
29
+ attack: 8,
30
+ defense: 10,
31
+ speed: 6,
32
+ },
33
+ dps: {
34
+ maxHp: 80,
35
+ maxMp: 50,
36
+ attack: 15,
37
+ defense: 3,
38
+ speed: 12,
39
+ },
40
+ healer: {
41
+ maxHp: 70,
42
+ maxMp: 100,
43
+ attack: 5,
44
+ defense: 4,
45
+ speed: 8,
46
+ },
47
+ support: {
48
+ maxHp: 90,
49
+ maxMp: 80,
50
+ attack: 7,
51
+ defense: 5,
52
+ speed: 10,
53
+ },
54
+ balanced: {
55
+ maxHp: 100,
56
+ maxMp: 50,
57
+ attack: 10,
58
+ defense: 5,
59
+ speed: 10,
60
+ },
61
+ };
62
+ // ============================================================================
63
+ // Actor Creation
64
+ // ============================================================================
65
+ /**
66
+ * Create a new Actor with the given name and role
67
+ */
68
+ export function createActor(name, role = 'balanced', character) {
69
+ const baseStats = BASE_STATS_BY_ROLE[role];
70
+ const stats = {
71
+ level: 1,
72
+ hp: baseStats.maxHp ?? 100,
73
+ maxHp: baseStats.maxHp ?? 100,
74
+ mp: baseStats.maxMp ?? 50,
75
+ maxMp: baseStats.maxMp ?? 50,
76
+ attack: baseStats.attack ?? 10,
77
+ defense: baseStats.defense ?? 5,
78
+ speed: baseStats.speed ?? 10,
79
+ exp: 0,
80
+ expToNextLevel: 100,
81
+ gold: 0,
82
+ };
83
+ return {
84
+ id: `actor_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`,
85
+ name,
86
+ stats,
87
+ position: { x: 0, y: 0, floor: 1 },
88
+ equipment: {
89
+ weapon: null,
90
+ armor: null,
91
+ accessory: null,
92
+ },
93
+ inventory: [],
94
+ activeQuests: [],
95
+ completedQuests: [],
96
+ discoveredLocations: [],
97
+ unlockedAffixes: [],
98
+ createdAt: Date.now(),
99
+ playTime: 0,
100
+ character: {
101
+ backstory: character?.backstory ?? '',
102
+ appearance: character?.appearance ?? '',
103
+ personality: character?.personality ?? '',
104
+ motivation: character?.motivation ?? '',
105
+ origin: character?.origin ?? '',
106
+ traits: character?.traits ?? [],
107
+ },
108
+ status: 'active',
109
+ teamId: undefined,
110
+ role,
111
+ aiSettings: { ...DEFAULT_AI_SETTINGS },
112
+ };
113
+ }
114
+ /**
115
+ * Convert a legacy Player to an Actor
116
+ * Used for save migration from old format
117
+ */
118
+ export function playerToActor(player) {
119
+ return {
120
+ id: player.id,
121
+ name: player.name,
122
+ stats: { ...player.stats },
123
+ position: { ...player.position },
124
+ equipment: {
125
+ weapon: player.equipment.weapon ? { ...player.equipment.weapon } : null,
126
+ armor: player.equipment.armor ? { ...player.equipment.armor } : null,
127
+ accessory: player.equipment.accessory ? { ...player.equipment.accessory } : null,
128
+ },
129
+ inventory: player.inventory.map(item => ({ ...item })),
130
+ activeQuests: player.activeQuests.map(quest => ({ ...quest })),
131
+ completedQuests: [...player.completedQuests],
132
+ discoveredLocations: [...player.discoveredLocations],
133
+ unlockedAffixes: [...player.unlockedAffixes],
134
+ createdAt: player.createdAt,
135
+ playTime: player.playTime,
136
+ character: player.character ? { ...player.character } : {
137
+ backstory: '',
138
+ appearance: '',
139
+ personality: '',
140
+ motivation: '',
141
+ origin: '',
142
+ traits: [],
143
+ },
144
+ status: 'active',
145
+ teamId: undefined,
146
+ role: 'balanced',
147
+ aiSettings: { ...DEFAULT_AI_SETTINGS },
148
+ };
149
+ }
150
+ /**
151
+ * Convert an Actor to legacy Player format
152
+ * Used for backward compatibility with existing code
153
+ */
154
+ export function actorToPlayer(actor) {
155
+ return {
156
+ id: actor.id,
157
+ name: actor.name,
158
+ stats: { ...actor.stats },
159
+ position: { ...actor.position },
160
+ equipment: {
161
+ weapon: actor.equipment.weapon ? { ...actor.equipment.weapon } : null,
162
+ armor: actor.equipment.armor ? { ...actor.equipment.armor } : null,
163
+ accessory: actor.equipment.accessory ? { ...actor.equipment.accessory } : null,
164
+ },
165
+ inventory: actor.inventory.map(item => ({ ...item })),
166
+ activeQuests: actor.activeQuests.map(quest => ({ ...quest })),
167
+ completedQuests: [...actor.completedQuests],
168
+ discoveredLocations: [...actor.discoveredLocations],
169
+ unlockedAffixes: [...actor.unlockedAffixes],
170
+ createdAt: actor.createdAt,
171
+ playTime: actor.playTime,
172
+ character: actor.character ? { ...actor.character } : undefined,
173
+ };
174
+ }
175
+ // ============================================================================
176
+ // Actor Stats Management
177
+ // ============================================================================
178
+ /**
179
+ * Calculate total attack including equipment bonuses
180
+ */
181
+ export function getActorTotalAttack(actor) {
182
+ let total = actor.stats.attack;
183
+ if (actor.equipment.weapon) {
184
+ total += actor.equipment.weapon.baseAttack;
185
+ }
186
+ return total;
187
+ }
188
+ /**
189
+ * Calculate total defense including equipment bonuses
190
+ */
191
+ export function getActorTotalDefense(actor) {
192
+ let total = actor.stats.defense;
193
+ if (actor.equipment.armor) {
194
+ total += actor.equipment.armor.baseDefense;
195
+ }
196
+ return total;
197
+ }
198
+ /**
199
+ * Apply damage to an actor
200
+ * Returns the actual damage dealt after defense
201
+ */
202
+ export function damageActor(actor, rawDamage) {
203
+ const defense = getActorTotalDefense(actor);
204
+ const actualDamage = Math.max(1, rawDamage - defense);
205
+ actor.stats.hp = Math.max(0, actor.stats.hp - actualDamage);
206
+ // Update status if actor dies
207
+ if (actor.stats.hp <= 0) {
208
+ actor.status = 'dead';
209
+ }
210
+ return actualDamage;
211
+ }
212
+ /**
213
+ * Heal an actor
214
+ * Returns the actual amount healed
215
+ */
216
+ export function healActor(actor, amount) {
217
+ const beforeHp = actor.stats.hp;
218
+ actor.stats.hp = Math.min(actor.stats.maxHp, actor.stats.hp + amount);
219
+ return actor.stats.hp - beforeHp;
220
+ }
221
+ /**
222
+ * Fully restore an actor's HP and MP
223
+ */
224
+ export function fullRestoreActor(actor) {
225
+ actor.stats.hp = actor.stats.maxHp;
226
+ actor.stats.mp = actor.stats.maxMp;
227
+ if (actor.status === 'injured') {
228
+ actor.status = 'active';
229
+ }
230
+ }
231
+ /**
232
+ * Add experience to an actor
233
+ * Returns true if the actor leveled up
234
+ */
235
+ export function addExperience(actor, exp) {
236
+ actor.stats.exp += exp;
237
+ let leveledUp = false;
238
+ while (actor.stats.exp >= actor.stats.expToNextLevel) {
239
+ actor.stats.exp -= actor.stats.expToNextLevel;
240
+ levelUp(actor);
241
+ leveledUp = true;
242
+ }
243
+ return leveledUp;
244
+ }
245
+ /**
246
+ * Level up an actor
247
+ */
248
+ export function levelUp(actor) {
249
+ actor.stats.level++;
250
+ // Stat growth based on role
251
+ const growth = getStatGrowth(actor.role);
252
+ actor.stats.maxHp += growth.hp;
253
+ actor.stats.maxMp += growth.mp;
254
+ actor.stats.attack += growth.attack;
255
+ actor.stats.defense += growth.defense;
256
+ actor.stats.speed += growth.speed;
257
+ // Restore HP/MP on level up
258
+ actor.stats.hp = actor.stats.maxHp;
259
+ actor.stats.mp = actor.stats.maxMp;
260
+ // Increase exp requirement
261
+ actor.stats.expToNextLevel = Math.floor(actor.stats.expToNextLevel * 1.5);
262
+ }
263
+ /**
264
+ * Get stat growth per level for a role
265
+ */
266
+ function getStatGrowth(role) {
267
+ switch (role) {
268
+ case 'tank':
269
+ return { hp: 20, mp: 3, attack: 2, defense: 3, speed: 1 };
270
+ case 'dps':
271
+ return { hp: 8, mp: 5, attack: 4, defense: 1, speed: 2 };
272
+ case 'healer':
273
+ return { hp: 6, mp: 12, attack: 1, defense: 1, speed: 1 };
274
+ case 'support':
275
+ return { hp: 10, mp: 8, attack: 2, defense: 1, speed: 2 };
276
+ case 'balanced':
277
+ default:
278
+ return { hp: 12, mp: 5, attack: 2, defense: 2, speed: 1 };
279
+ }
280
+ }
281
+ // ============================================================================
282
+ // Actor Status Management
283
+ // ============================================================================
284
+ /**
285
+ * Check if an actor can participate in combat
286
+ */
287
+ export function canActorFight(actor) {
288
+ return actor.status === 'active' && actor.stats.hp > 0;
289
+ }
290
+ /**
291
+ * Check if an actor is alive
292
+ */
293
+ export function isActorAlive(actor) {
294
+ return actor.stats.hp > 0 && actor.status !== 'dead';
295
+ }
296
+ /**
297
+ * Revive a dead actor with partial HP
298
+ * Only works in town/safe areas
299
+ */
300
+ export function reviveActor(actor, hpPercent = 0.5) {
301
+ if (actor.status === 'dead') {
302
+ actor.stats.hp = Math.floor(actor.stats.maxHp * hpPercent);
303
+ actor.status = 'reserve'; // Revived actors go to reserve
304
+ }
305
+ }
306
+ /**
307
+ * Move actor between active and reserve status
308
+ */
309
+ export function setActorStatus(actor, status) {
310
+ if (status === 'active' && actor.stats.hp <= 0) {
311
+ // Can't set to active if dead
312
+ actor.status = 'dead';
313
+ return;
314
+ }
315
+ actor.status = status;
316
+ }
317
+ // ============================================================================
318
+ // Actor Role & AI
319
+ // ============================================================================
320
+ /**
321
+ * Change an actor's role
322
+ */
323
+ export function setActorRole(actor, role) {
324
+ actor.role = role;
325
+ // Optionally adjust AI settings based on role
326
+ if (role === 'tank') {
327
+ actor.aiSettings.retreatThreshold = 0.1; // Tanks don't retreat easily
328
+ }
329
+ else if (role === 'healer') {
330
+ actor.aiSettings.healThreshold = 0.5; // Healers are more proactive
331
+ }
332
+ }
333
+ /**
334
+ * Update an actor's AI settings
335
+ */
336
+ export function updateActorAISettings(actor, settings) {
337
+ actor.aiSettings = { ...actor.aiSettings, ...settings };
338
+ }
339
+ // ============================================================================
340
+ // Actor Inventory
341
+ // ============================================================================
342
+ /**
343
+ * Add an item to an actor's personal inventory
344
+ */
345
+ export function addItemToActor(actor, item) {
346
+ const existing = actor.inventory.find(i => i.id === item.id && i.type === item.type);
347
+ if (existing) {
348
+ existing.quantity += item.quantity;
349
+ }
350
+ else {
351
+ actor.inventory.push({ ...item });
352
+ }
353
+ }
354
+ /**
355
+ * Remove an item from an actor's inventory
356
+ * Returns true if successful
357
+ */
358
+ export function removeItemFromActor(actor, itemId, quantity = 1) {
359
+ const index = actor.inventory.findIndex(i => i.id === itemId);
360
+ if (index === -1)
361
+ return false;
362
+ const item = actor.inventory[index];
363
+ if (item.quantity < quantity)
364
+ return false;
365
+ item.quantity -= quantity;
366
+ if (item.quantity <= 0) {
367
+ actor.inventory.splice(index, 1);
368
+ }
369
+ return true;
370
+ }
371
+ // ============================================================================
372
+ // Actor Display Helpers
373
+ // ============================================================================
374
+ /**
375
+ * Get a short status string for an actor
376
+ */
377
+ export function getActorStatusString(actor) {
378
+ const hpPercent = Math.floor((actor.stats.hp / actor.stats.maxHp) * 100);
379
+ const statusIcon = actor.status === 'active' ? '●' :
380
+ actor.status === 'reserve' ? '○' :
381
+ actor.status === 'injured' ? '△' : '✗';
382
+ return `${statusIcon} ${actor.name} Lv${actor.stats.level} HP:${hpPercent}%`;
383
+ }
384
+ /**
385
+ * Get role icon for display
386
+ */
387
+ export function getActorRoleIcon(role) {
388
+ switch (role) {
389
+ case 'tank': return '🛡';
390
+ case 'dps': return '⚔';
391
+ case 'healer': return '✚';
392
+ case 'support': return '★';
393
+ case 'balanced': return '◆';
394
+ }
395
+ }
396
+ /**
397
+ * Get role display name
398
+ */
399
+ export function getActorRoleDisplayName(role) {
400
+ switch (role) {
401
+ case 'tank': return 'Tank';
402
+ case 'dps': return 'DPS';
403
+ case 'healer': return 'Healer';
404
+ case 'support': return 'Support';
405
+ case 'balanced': return 'Balanced';
406
+ }
407
+ }
408
+ //# sourceMappingURL=Actor.js.map
409
+ //# debugId=c5466145-1d1d-53ac-83d2-9163a786cc39
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Actor.js","sources":["core/Actor.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Actor - Functions for creating and managing individual characters\r\n *\r\n * An Actor represents a single playable character. Multiple Actors can\r\n * form a Team for cooperative gameplay.\r\n */\r\n\r\nimport type {\r\n Actor,\r\n ActorStats,\r\n ActorCharacter,\r\n ActorStatus,\r\n ActorRole,\r\n ActorAISettings,\r\n Player,\r\n Equipment,\r\n Position,\r\n InventoryItem,\r\n Quest,\r\n} from './types.js';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\n/**\r\n * Default AI settings for new actors\r\n */\r\nexport const DEFAULT_AI_SETTINGS: ActorAISettings = {\r\n autoAttack: true,\r\n useSkills: true,\r\n targetPriority: 'nearest',\r\n healThreshold: 0.3,\r\n retreatThreshold: 0.15,\r\n};\r\n\r\n/**\r\n * Base stats for level 1 actors by role\r\n */\r\nconst BASE_STATS_BY_ROLE: Record<ActorRole, Partial<ActorStats>> = {\r\n tank: {\r\n maxHp: 150,\r\n maxMp: 30,\r\n attack: 8,\r\n defense: 10,\r\n speed: 6,\r\n },\r\n dps: {\r\n maxHp: 80,\r\n maxMp: 50,\r\n attack: 15,\r\n defense: 3,\r\n speed: 12,\r\n },\r\n healer: {\r\n maxHp: 70,\r\n maxMp: 100,\r\n attack: 5,\r\n defense: 4,\r\n speed: 8,\r\n },\r\n support: {\r\n maxHp: 90,\r\n maxMp: 80,\r\n attack: 7,\r\n defense: 5,\r\n speed: 10,\r\n },\r\n balanced: {\r\n maxHp: 100,\r\n maxMp: 50,\r\n attack: 10,\r\n defense: 5,\r\n speed: 10,\r\n },\r\n};\r\n\r\n// ============================================================================\r\n// Actor Creation\r\n// ============================================================================\r\n\r\n/**\r\n * Create a new Actor with the given name and role\r\n */\r\nexport function createActor(\r\n name: string,\r\n role: ActorRole = 'balanced',\r\n character?: Partial<ActorCharacter>\r\n): Actor {\r\n const baseStats = BASE_STATS_BY_ROLE[role];\r\n\r\n const stats: ActorStats = {\r\n level: 1,\r\n hp: baseStats.maxHp ?? 100,\r\n maxHp: baseStats.maxHp ?? 100,\r\n mp: baseStats.maxMp ?? 50,\r\n maxMp: baseStats.maxMp ?? 50,\r\n attack: baseStats.attack ?? 10,\r\n defense: baseStats.defense ?? 5,\r\n speed: baseStats.speed ?? 10,\r\n exp: 0,\r\n expToNextLevel: 100,\r\n gold: 0,\r\n };\r\n\r\n return {\r\n id: `actor_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`,\r\n name,\r\n stats,\r\n position: { x: 0, y: 0, floor: 1 },\r\n equipment: {\r\n weapon: null,\r\n armor: null,\r\n accessory: null,\r\n },\r\n inventory: [],\r\n activeQuests: [],\r\n completedQuests: [],\r\n discoveredLocations: [],\r\n unlockedAffixes: [],\r\n createdAt: Date.now(),\r\n playTime: 0,\r\n character: {\r\n backstory: character?.backstory ?? '',\r\n appearance: character?.appearance ?? '',\r\n personality: character?.personality ?? '',\r\n motivation: character?.motivation ?? '',\r\n origin: character?.origin ?? '',\r\n traits: character?.traits ?? [],\r\n },\r\n status: 'active',\r\n teamId: undefined,\r\n role,\r\n aiSettings: { ...DEFAULT_AI_SETTINGS },\r\n };\r\n}\r\n\r\n/**\r\n * Convert a legacy Player to an Actor\r\n * Used for save migration from old format\r\n */\r\nexport function playerToActor(player: Player): Actor {\r\n return {\r\n id: player.id,\r\n name: player.name,\r\n stats: { ...player.stats },\r\n position: { ...player.position },\r\n equipment: {\r\n weapon: player.equipment.weapon ? { ...player.equipment.weapon } : null,\r\n armor: player.equipment.armor ? { ...player.equipment.armor } : null,\r\n accessory: player.equipment.accessory ? { ...player.equipment.accessory } : null,\r\n },\r\n inventory: player.inventory.map(item => ({ ...item })),\r\n activeQuests: player.activeQuests.map(quest => ({ ...quest })),\r\n completedQuests: [...player.completedQuests],\r\n discoveredLocations: [...player.discoveredLocations],\r\n unlockedAffixes: [...player.unlockedAffixes],\r\n createdAt: player.createdAt,\r\n playTime: player.playTime,\r\n character: player.character ? { ...player.character } : {\r\n backstory: '',\r\n appearance: '',\r\n personality: '',\r\n motivation: '',\r\n origin: '',\r\n traits: [],\r\n },\r\n status: 'active',\r\n teamId: undefined,\r\n role: 'balanced',\r\n aiSettings: { ...DEFAULT_AI_SETTINGS },\r\n };\r\n}\r\n\r\n/**\r\n * Convert an Actor to legacy Player format\r\n * Used for backward compatibility with existing code\r\n */\r\nexport function actorToPlayer(actor: Actor): Player {\r\n return {\r\n id: actor.id,\r\n name: actor.name,\r\n stats: { ...actor.stats },\r\n position: { ...actor.position },\r\n equipment: {\r\n weapon: actor.equipment.weapon ? { ...actor.equipment.weapon } : null,\r\n armor: actor.equipment.armor ? { ...actor.equipment.armor } : null,\r\n accessory: actor.equipment.accessory ? { ...actor.equipment.accessory } : null,\r\n },\r\n inventory: actor.inventory.map(item => ({ ...item })),\r\n activeQuests: actor.activeQuests.map(quest => ({ ...quest })),\r\n completedQuests: [...actor.completedQuests],\r\n discoveredLocations: [...actor.discoveredLocations],\r\n unlockedAffixes: [...actor.unlockedAffixes],\r\n createdAt: actor.createdAt,\r\n playTime: actor.playTime,\r\n character: actor.character ? { ...actor.character } : undefined,\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Actor Stats Management\r\n// ============================================================================\r\n\r\n/**\r\n * Calculate total attack including equipment bonuses\r\n */\r\nexport function getActorTotalAttack(actor: Actor): number {\r\n let total = actor.stats.attack;\r\n if (actor.equipment.weapon) {\r\n total += actor.equipment.weapon.baseAttack;\r\n }\r\n return total;\r\n}\r\n\r\n/**\r\n * Calculate total defense including equipment bonuses\r\n */\r\nexport function getActorTotalDefense(actor: Actor): number {\r\n let total = actor.stats.defense;\r\n if (actor.equipment.armor) {\r\n total += actor.equipment.armor.baseDefense;\r\n }\r\n return total;\r\n}\r\n\r\n/**\r\n * Apply damage to an actor\r\n * Returns the actual damage dealt after defense\r\n */\r\nexport function damageActor(actor: Actor, rawDamage: number): number {\r\n const defense = getActorTotalDefense(actor);\r\n const actualDamage = Math.max(1, rawDamage - defense);\r\n actor.stats.hp = Math.max(0, actor.stats.hp - actualDamage);\r\n\r\n // Update status if actor dies\r\n if (actor.stats.hp <= 0) {\r\n actor.status = 'dead';\r\n }\r\n\r\n return actualDamage;\r\n}\r\n\r\n/**\r\n * Heal an actor\r\n * Returns the actual amount healed\r\n */\r\nexport function healActor(actor: Actor, amount: number): number {\r\n const beforeHp = actor.stats.hp;\r\n actor.stats.hp = Math.min(actor.stats.maxHp, actor.stats.hp + amount);\r\n return actor.stats.hp - beforeHp;\r\n}\r\n\r\n/**\r\n * Fully restore an actor's HP and MP\r\n */\r\nexport function fullRestoreActor(actor: Actor): void {\r\n actor.stats.hp = actor.stats.maxHp;\r\n actor.stats.mp = actor.stats.maxMp;\r\n if (actor.status === 'injured') {\r\n actor.status = 'active';\r\n }\r\n}\r\n\r\n/**\r\n * Add experience to an actor\r\n * Returns true if the actor leveled up\r\n */\r\nexport function addExperience(actor: Actor, exp: number): boolean {\r\n actor.stats.exp += exp;\r\n let leveledUp = false;\r\n\r\n while (actor.stats.exp >= actor.stats.expToNextLevel) {\r\n actor.stats.exp -= actor.stats.expToNextLevel;\r\n levelUp(actor);\r\n leveledUp = true;\r\n }\r\n\r\n return leveledUp;\r\n}\r\n\r\n/**\r\n * Level up an actor\r\n */\r\nexport function levelUp(actor: Actor): void {\r\n actor.stats.level++;\r\n\r\n // Stat growth based on role\r\n const growth = getStatGrowth(actor.role);\r\n actor.stats.maxHp += growth.hp;\r\n actor.stats.maxMp += growth.mp;\r\n actor.stats.attack += growth.attack;\r\n actor.stats.defense += growth.defense;\r\n actor.stats.speed += growth.speed;\r\n\r\n // Restore HP/MP on level up\r\n actor.stats.hp = actor.stats.maxHp;\r\n actor.stats.mp = actor.stats.maxMp;\r\n\r\n // Increase exp requirement\r\n actor.stats.expToNextLevel = Math.floor(actor.stats.expToNextLevel * 1.5);\r\n}\r\n\r\n/**\r\n * Get stat growth per level for a role\r\n */\r\nfunction getStatGrowth(role: ActorRole): { hp: number; mp: number; attack: number; defense: number; speed: number } {\r\n switch (role) {\r\n case 'tank':\r\n return { hp: 20, mp: 3, attack: 2, defense: 3, speed: 1 };\r\n case 'dps':\r\n return { hp: 8, mp: 5, attack: 4, defense: 1, speed: 2 };\r\n case 'healer':\r\n return { hp: 6, mp: 12, attack: 1, defense: 1, speed: 1 };\r\n case 'support':\r\n return { hp: 10, mp: 8, attack: 2, defense: 1, speed: 2 };\r\n case 'balanced':\r\n default:\r\n return { hp: 12, mp: 5, attack: 2, defense: 2, speed: 1 };\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Actor Status Management\r\n// ============================================================================\r\n\r\n/**\r\n * Check if an actor can participate in combat\r\n */\r\nexport function canActorFight(actor: Actor): boolean {\r\n return actor.status === 'active' && actor.stats.hp > 0;\r\n}\r\n\r\n/**\r\n * Check if an actor is alive\r\n */\r\nexport function isActorAlive(actor: Actor): boolean {\r\n return actor.stats.hp > 0 && actor.status !== 'dead';\r\n}\r\n\r\n/**\r\n * Revive a dead actor with partial HP\r\n * Only works in town/safe areas\r\n */\r\nexport function reviveActor(actor: Actor, hpPercent: number = 0.5): void {\r\n if (actor.status === 'dead') {\r\n actor.stats.hp = Math.floor(actor.stats.maxHp * hpPercent);\r\n actor.status = 'reserve'; // Revived actors go to reserve\r\n }\r\n}\r\n\r\n/**\r\n * Move actor between active and reserve status\r\n */\r\nexport function setActorStatus(actor: Actor, status: ActorStatus): void {\r\n if (status === 'active' && actor.stats.hp <= 0) {\r\n // Can't set to active if dead\r\n actor.status = 'dead';\r\n return;\r\n }\r\n actor.status = status;\r\n}\r\n\r\n// ============================================================================\r\n// Actor Role & AI\r\n// ============================================================================\r\n\r\n/**\r\n * Change an actor's role\r\n */\r\nexport function setActorRole(actor: Actor, role: ActorRole): void {\r\n actor.role = role;\r\n // Optionally adjust AI settings based on role\r\n if (role === 'tank') {\r\n actor.aiSettings.retreatThreshold = 0.1; // Tanks don't retreat easily\r\n } else if (role === 'healer') {\r\n actor.aiSettings.healThreshold = 0.5; // Healers are more proactive\r\n }\r\n}\r\n\r\n/**\r\n * Update an actor's AI settings\r\n */\r\nexport function updateActorAISettings(actor: Actor, settings: Partial<ActorAISettings>): void {\r\n actor.aiSettings = { ...actor.aiSettings, ...settings };\r\n}\r\n\r\n// ============================================================================\r\n// Actor Inventory\r\n// ============================================================================\r\n\r\n/**\r\n * Add an item to an actor's personal inventory\r\n */\r\nexport function addItemToActor(actor: Actor, item: InventoryItem): void {\r\n const existing = actor.inventory.find(i => i.id === item.id && i.type === item.type);\r\n if (existing) {\r\n existing.quantity += item.quantity;\r\n } else {\r\n actor.inventory.push({ ...item });\r\n }\r\n}\r\n\r\n/**\r\n * Remove an item from an actor's inventory\r\n * Returns true if successful\r\n */\r\nexport function removeItemFromActor(actor: Actor, itemId: string, quantity: number = 1): boolean {\r\n const index = actor.inventory.findIndex(i => i.id === itemId);\r\n if (index === -1) return false;\r\n\r\n const item = actor.inventory[index];\r\n if (item.quantity < quantity) return false;\r\n\r\n item.quantity -= quantity;\r\n if (item.quantity <= 0) {\r\n actor.inventory.splice(index, 1);\r\n }\r\n return true;\r\n}\r\n\r\n// ============================================================================\r\n// Actor Display Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Get a short status string for an actor\r\n */\r\nexport function getActorStatusString(actor: Actor): string {\r\n const hpPercent = Math.floor((actor.stats.hp / actor.stats.maxHp) * 100);\r\n const statusIcon = actor.status === 'active' ? '●' :\r\n actor.status === 'reserve' ? '○' :\r\n actor.status === 'injured' ? '△' : '✗';\r\n return `${statusIcon} ${actor.name} Lv${actor.stats.level} HP:${hpPercent}%`;\r\n}\r\n\r\n/**\r\n * Get role icon for display\r\n */\r\nexport function getActorRoleIcon(role: ActorRole): string {\r\n switch (role) {\r\n case 'tank': return '🛡';\r\n case 'dps': return '⚔';\r\n case 'healer': return '✚';\r\n case 'support': return '★';\r\n case 'balanced': return '◆';\r\n }\r\n}\r\n\r\n/**\r\n * Get role display name\r\n */\r\nexport function getActorRoleDisplayName(role: ActorRole): string {\r\n switch (role) {\r\n case 'tank': return 'Tank';\r\n case 'dps': return 'DPS';\r\n case 'healer': return 'Healer';\r\n case 'support': return 'Support';\r\n case 'balanced': return 'Balanced';\r\n }\r\n}\r\n"],"names":[],"mappings":"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","debug_id":"c5466145-1d1d-53ac-83d2-9163a786cc39"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Combat system - handles battles with Idle RPG mechanics
3
+ */
4
+ import type { Player, Enemy, CombatState } from './types.js';
5
+ /**
6
+ * Initialize a new combat state
7
+ */
8
+ export declare function initCombat(player: Player, enemies: Enemy[]): CombatState;
9
+ /**
10
+ * Process a single combat turn
11
+ */
12
+ export declare function processCombatTurn(combat: CombatState, player: Player): {
13
+ combat: CombatState;
14
+ finished: boolean;
15
+ victory: boolean;
16
+ };
17
+ /**
18
+ * Calculate combat rewards
19
+ */
20
+ export declare function calculateCombatRewards(enemies: Enemy[]): {
21
+ exp: number;
22
+ gold: number;
23
+ items: string[];
24
+ };
25
+ /**
26
+ * Format combat log for display
27
+ */
28
+ export declare function formatCombatLog(combat: CombatState, maxLines?: number): string[];
29
+ /**
30
+ * Get combat progress (0-1)
31
+ */
32
+ export declare function getCombatProgress(combat: CombatState): number;
33
+ /**
34
+ * Get estimated time remaining
35
+ */
36
+ export declare function getEstimatedTimeRemaining(combat: CombatState): number;
37
+ //# sourceMappingURL=Combat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Combat.d.ts","sourceRoot":"/","sources":["core/Combat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EACV,MAAM,EACN,KAAK,EACL,WAAW,EAIZ,MAAM,YAAY,CAAC;AAGpB;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,WAAW,CAqBxE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EACnB,MAAM,EAAE,MAAM,GACb;IAAE,MAAM,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAyE9D;AAsLD;;GAEG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,KAAK,EAAE,GACf;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,EAAE,CAAA;CAAE,CAkBhD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,GAAE,MAAW,GAAG,MAAM,EAAE,CAOpF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,WAAW,GAAG,MAAM,CAQrE"}