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,371 @@
1
+ /**
2
+ * Team - Functions for creating and managing character teams
3
+ *
4
+ * A Team consists of up to 4 active members and any number of reserve members.
5
+ * Teams share inventory, gold, and position on the map.
6
+ */
7
+
8
+ !function(){try{var e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof globalThis?globalThis:"undefined"!=typeof self?self:{},n=(new e.Error).stack;n&&(e._sentryDebugIds=e._sentryDebugIds||{},e._sentryDebugIds[n]="a833c558-3d87-597b-90d7-ce06f9993349")}catch(e){}}();
9
+ import { playerToActor, canActorFight, isActorAlive } from './Actor.js';
10
+ import { DEFAULT_STRATEGY } from '../strategy/defaultStrategy.js';
11
+ // ============================================================================
12
+ // Constants
13
+ // ============================================================================
14
+ /**
15
+ * Maximum number of active members in a team
16
+ */
17
+ export const MAX_ACTIVE_MEMBERS = 4;
18
+ /**
19
+ * Default team location (starting town)
20
+ */
21
+ export const DEFAULT_LOCATION = {
22
+ type: 'town',
23
+ continentId: 'verdantia',
24
+ townId: 'willowbrook',
25
+ };
26
+ // ============================================================================
27
+ // Team Creation
28
+ // ============================================================================
29
+ /**
30
+ * Create a new empty team
31
+ */
32
+ export function createTeam(name, leaderId) {
33
+ return {
34
+ id: `team_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`,
35
+ name,
36
+ activeMembers: leaderId ? [leaderId] : [],
37
+ reserveMembers: [],
38
+ sharedInventory: [],
39
+ sharedGold: 50, // Starting gold
40
+ position: { x: 0, y: 0, floor: 1 },
41
+ currentLocation: { ...DEFAULT_LOCATION },
42
+ formation: 'line',
43
+ strategy: { ...DEFAULT_STRATEGY },
44
+ createdAt: Date.now(),
45
+ totalPlayTime: 0,
46
+ };
47
+ }
48
+ /**
49
+ * Create a team with a single actor (for migration from single-player)
50
+ */
51
+ export function createTeamWithActor(actor, teamName) {
52
+ const team = createTeam(teamName || `${actor.name}'s Team`, actor.id);
53
+ team.sharedGold = actor.stats.gold; // Transfer gold to team
54
+ actor.stats.gold = 0;
55
+ actor.teamId = team.id;
56
+ return team;
57
+ }
58
+ /**
59
+ * Create a team from a legacy Player
60
+ * Used for save migration
61
+ */
62
+ export function createTeamFromPlayer(player) {
63
+ const actor = playerToActor(player);
64
+ const team = createTeamWithActor(actor, `${player.name}'s Team`);
65
+ return { team, actor };
66
+ }
67
+ // ============================================================================
68
+ // Team Membership Management
69
+ // ============================================================================
70
+ /**
71
+ * Add an actor to the team's active roster
72
+ * Returns false if team is full
73
+ */
74
+ export function addActiveTeamMember(team, actor) {
75
+ if (team.activeMembers.length >= MAX_ACTIVE_MEMBERS) {
76
+ return false;
77
+ }
78
+ if (team.activeMembers.includes(actor.id)) {
79
+ return true; // Already in active
80
+ }
81
+ // Remove from reserve if present
82
+ const reserveIndex = team.reserveMembers.indexOf(actor.id);
83
+ if (reserveIndex !== -1) {
84
+ team.reserveMembers.splice(reserveIndex, 1);
85
+ }
86
+ team.activeMembers.push(actor.id);
87
+ actor.teamId = team.id;
88
+ actor.status = 'active';
89
+ return true;
90
+ }
91
+ /**
92
+ * Move an actor to the reserve roster
93
+ */
94
+ export function moveToReserve(team, actor) {
95
+ const activeIndex = team.activeMembers.indexOf(actor.id);
96
+ if (activeIndex !== -1) {
97
+ team.activeMembers.splice(activeIndex, 1);
98
+ }
99
+ if (!team.reserveMembers.includes(actor.id)) {
100
+ team.reserveMembers.push(actor.id);
101
+ }
102
+ actor.status = 'reserve';
103
+ }
104
+ /**
105
+ * Remove an actor from the team entirely
106
+ */
107
+ export function removeFromTeam(team, actor) {
108
+ const activeIndex = team.activeMembers.indexOf(actor.id);
109
+ if (activeIndex !== -1) {
110
+ team.activeMembers.splice(activeIndex, 1);
111
+ }
112
+ const reserveIndex = team.reserveMembers.indexOf(actor.id);
113
+ if (reserveIndex !== -1) {
114
+ team.reserveMembers.splice(reserveIndex, 1);
115
+ }
116
+ actor.teamId = undefined;
117
+ }
118
+ /**
119
+ * Swap positions of two active members
120
+ */
121
+ export function swapActivePositions(team, index1, index2) {
122
+ if (index1 < 0 || index1 >= team.activeMembers.length ||
123
+ index2 < 0 || index2 >= team.activeMembers.length) {
124
+ return false;
125
+ }
126
+ [team.activeMembers[index1], team.activeMembers[index2]] =
127
+ [team.activeMembers[index2], team.activeMembers[index1]];
128
+ return true;
129
+ }
130
+ /**
131
+ * Set the team leader (move to position 0)
132
+ */
133
+ export function setTeamLeader(team, actorId) {
134
+ const currentIndex = team.activeMembers.indexOf(actorId);
135
+ if (currentIndex === -1)
136
+ return false;
137
+ if (currentIndex === 0)
138
+ return true; // Already leader
139
+ return swapActivePositions(team, 0, currentIndex);
140
+ }
141
+ /**
142
+ * Get the team leader ID
143
+ */
144
+ export function getTeamLeaderId(team) {
145
+ return team.activeMembers[0] ?? null;
146
+ }
147
+ // ============================================================================
148
+ // Team Combat Helpers
149
+ // ============================================================================
150
+ /**
151
+ * Get actors that can fight (active status, HP > 0)
152
+ */
153
+ export function getActiveActorsForCombat(team, actors) {
154
+ return team.activeMembers
155
+ .map(id => actors[id])
156
+ .filter((actor) => actor !== undefined && canActorFight(actor));
157
+ }
158
+ /**
159
+ * Get all active members regardless of combat status
160
+ */
161
+ export function getActiveMembers(team, actors) {
162
+ return team.activeMembers
163
+ .map(id => actors[id])
164
+ .filter((actor) => actor !== undefined);
165
+ }
166
+ /**
167
+ * Get reserve members
168
+ */
169
+ export function getReserveMembers(team, actors) {
170
+ return team.reserveMembers
171
+ .map(id => actors[id])
172
+ .filter((actor) => actor !== undefined);
173
+ }
174
+ /**
175
+ * Check if all active members are dead
176
+ */
177
+ export function isTeamWiped(team, actors) {
178
+ return team.activeMembers.every(id => {
179
+ const actor = actors[id];
180
+ return !actor || !isActorAlive(actor);
181
+ });
182
+ }
183
+ /**
184
+ * Get total team level (sum of all active members)
185
+ */
186
+ export function getTeamTotalLevel(team, actors) {
187
+ return team.activeMembers.reduce((sum, id) => {
188
+ const actor = actors[id];
189
+ return sum + (actor?.stats.level ?? 0);
190
+ }, 0);
191
+ }
192
+ /**
193
+ * Get average team level
194
+ */
195
+ export function getTeamAverageLevel(team, actors) {
196
+ if (team.activeMembers.length === 0)
197
+ return 0;
198
+ return Math.floor(getTeamTotalLevel(team, actors) / team.activeMembers.length);
199
+ }
200
+ // ============================================================================
201
+ // Team Formation
202
+ // ============================================================================
203
+ /**
204
+ * Set the team's formation
205
+ */
206
+ export function setTeamFormation(team, formation) {
207
+ team.formation = formation;
208
+ }
209
+ /**
210
+ * Get the position index for an actor in the team
211
+ * Returns -1 if not found
212
+ */
213
+ export function getActorFormationPosition(team, actorId) {
214
+ return team.activeMembers.indexOf(actorId);
215
+ }
216
+ /**
217
+ * Check if an actor is on the frontline based on formation
218
+ */
219
+ export function isActorOnFrontline(team, actorId) {
220
+ const position = getActorFormationPosition(team, actorId);
221
+ if (position === -1)
222
+ return false;
223
+ // Import formation effects
224
+ const { FORMATION_EFFECTS } = require('./types.js');
225
+ const config = FORMATION_EFFECTS[team.formation];
226
+ return config.frontline.includes(position);
227
+ }
228
+ /**
229
+ * Get damage multiplier for an actor based on formation
230
+ */
231
+ export function getFormationDamageMultiplier(team, actorId) {
232
+ const position = getActorFormationPosition(team, actorId);
233
+ if (position === -1)
234
+ return 0;
235
+ // Import formation effects
236
+ const { FORMATION_EFFECTS } = require('./types.js');
237
+ const config = FORMATION_EFFECTS[team.formation];
238
+ return config.damage[position] ?? 1.0;
239
+ }
240
+ // ============================================================================
241
+ // Team Inventory & Resources
242
+ // ============================================================================
243
+ /**
244
+ * Add gold to team's shared pool
245
+ */
246
+ export function addTeamGold(team, amount) {
247
+ team.sharedGold += amount;
248
+ }
249
+ /**
250
+ * Spend gold from team's shared pool
251
+ * Returns true if successful
252
+ */
253
+ export function spendTeamGold(team, amount) {
254
+ if (team.sharedGold < amount)
255
+ return false;
256
+ team.sharedGold -= amount;
257
+ return true;
258
+ }
259
+ /**
260
+ * Add item to team's shared inventory
261
+ */
262
+ export function addItemToTeam(team, item) {
263
+ const existing = team.sharedInventory.find(i => i.id === item.id && i.type === item.type);
264
+ if (existing) {
265
+ existing.quantity += item.quantity;
266
+ }
267
+ else {
268
+ team.sharedInventory.push({ ...item });
269
+ }
270
+ }
271
+ /**
272
+ * Remove item from team's shared inventory
273
+ * Returns true if successful
274
+ */
275
+ export function removeItemFromTeam(team, itemId, quantity = 1) {
276
+ const index = team.sharedInventory.findIndex(i => i.id === itemId);
277
+ if (index === -1)
278
+ return false;
279
+ const item = team.sharedInventory[index];
280
+ if (item.quantity < quantity)
281
+ return false;
282
+ item.quantity -= quantity;
283
+ if (item.quantity <= 0) {
284
+ team.sharedInventory.splice(index, 1);
285
+ }
286
+ return true;
287
+ }
288
+ // ============================================================================
289
+ // Team Experience Distribution
290
+ // ============================================================================
291
+ /**
292
+ * Distribute experience evenly among active team members
293
+ * Returns actors that leveled up
294
+ */
295
+ export function distributeTeamExperience(team, actors, totalExp, addExperienceFn) {
296
+ const activeActors = getActiveActorsForCombat(team, actors);
297
+ if (activeActors.length === 0)
298
+ return [];
299
+ const expPerActor = Math.floor(totalExp / activeActors.length);
300
+ const leveledUp = [];
301
+ for (const actor of activeActors) {
302
+ if (addExperienceFn(actor, expPerActor)) {
303
+ leveledUp.push(actor);
304
+ }
305
+ }
306
+ return leveledUp;
307
+ }
308
+ // ============================================================================
309
+ // Team Movement & Location
310
+ // ============================================================================
311
+ /**
312
+ * Update team position
313
+ */
314
+ export function setTeamPosition(team, position) {
315
+ team.position = { ...position };
316
+ }
317
+ /**
318
+ * Update team location
319
+ */
320
+ export function setTeamLocation(team, location) {
321
+ team.currentLocation = { ...location };
322
+ }
323
+ // ============================================================================
324
+ // Team Strategy
325
+ // ============================================================================
326
+ /**
327
+ * Update team strategy
328
+ */
329
+ export function setTeamStrategy(team, strategy) {
330
+ team.strategy = { ...strategy };
331
+ }
332
+ // ============================================================================
333
+ // Team Display Helpers
334
+ // ============================================================================
335
+ /**
336
+ * Get team summary for display
337
+ */
338
+ export function getTeamSummary(team, actors) {
339
+ const activeCount = team.activeMembers.length;
340
+ const reserveCount = team.reserveMembers.length;
341
+ const avgLevel = getTeamAverageLevel(team, actors);
342
+ return `${team.name} (${activeCount}/4 active, ${reserveCount} reserve, Avg Lv${avgLevel})`;
343
+ }
344
+ /**
345
+ * Get formation display name
346
+ */
347
+ export function getFormationDisplayName(formation) {
348
+ switch (formation) {
349
+ case 'line': return 'Line';
350
+ case 'wedge': return 'Wedge';
351
+ case 'defensive': return 'Defensive';
352
+ case 'spread': return 'Spread';
353
+ }
354
+ }
355
+ /**
356
+ * Get formation description
357
+ */
358
+ export function getFormationDescription(formation) {
359
+ switch (formation) {
360
+ case 'line':
361
+ return 'Leader takes full damage, others take 50%';
362
+ case 'wedge':
363
+ return 'Front 2 take 80% damage, back 2 take 40%';
364
+ case 'defensive':
365
+ return 'Front 3 take 60% damage, last takes 20%';
366
+ case 'spread':
367
+ return 'All take 50% damage, no protection';
368
+ }
369
+ }
370
+ //# sourceMappingURL=Team.js.map
371
+ //# debugId=a833c558-3d87-597b-90d7-ce06f9993349
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Team.js","sources":["core/Team.ts"],"sourceRoot":"/","sourcesContent":["/**\r\n * Team - Functions for creating and managing character teams\r\n *\r\n * A Team consists of up to 4 active members and any number of reserve members.\r\n * Teams share inventory, gold, and position on the map.\r\n */\r\n\r\nimport type {\r\n Team,\r\n Actor,\r\n Player,\r\n TeamFormation,\r\n StrategyStateMachine,\r\n CurrentLocation,\r\n Position,\r\n InventoryItem,\r\n FORMATION_EFFECTS,\r\n} from './types.js';\r\nimport { createActor, playerToActor, canActorFight, isActorAlive } from './Actor.js';\r\nimport { DEFAULT_STRATEGY } from '../strategy/defaultStrategy.js';\r\n\r\n// ============================================================================\r\n// Constants\r\n// ============================================================================\r\n\r\n/**\r\n * Maximum number of active members in a team\r\n */\r\nexport const MAX_ACTIVE_MEMBERS = 4;\r\n\r\n/**\r\n * Default team location (starting town)\r\n */\r\nexport const DEFAULT_LOCATION: CurrentLocation = {\r\n type: 'town',\r\n continentId: 'verdantia',\r\n townId: 'willowbrook',\r\n};\r\n\r\n// ============================================================================\r\n// Team Creation\r\n// ============================================================================\r\n\r\n/**\r\n * Create a new empty team\r\n */\r\nexport function createTeam(name: string, leaderId?: string): Team {\r\n return {\r\n id: `team_${Date.now()}_${Math.random().toString(36).substring(2, 8)}`,\r\n name,\r\n activeMembers: leaderId ? [leaderId] : [],\r\n reserveMembers: [],\r\n sharedInventory: [],\r\n sharedGold: 50, // Starting gold\r\n position: { x: 0, y: 0, floor: 1 },\r\n currentLocation: { ...DEFAULT_LOCATION },\r\n formation: 'line',\r\n strategy: { ...DEFAULT_STRATEGY },\r\n createdAt: Date.now(),\r\n totalPlayTime: 0,\r\n };\r\n}\r\n\r\n/**\r\n * Create a team with a single actor (for migration from single-player)\r\n */\r\nexport function createTeamWithActor(actor: Actor, teamName?: string): Team {\r\n const team = createTeam(teamName || `${actor.name}'s Team`, actor.id);\r\n team.sharedGold = actor.stats.gold; // Transfer gold to team\r\n actor.stats.gold = 0;\r\n actor.teamId = team.id;\r\n return team;\r\n}\r\n\r\n/**\r\n * Create a team from a legacy Player\r\n * Used for save migration\r\n */\r\nexport function createTeamFromPlayer(player: Player): { team: Team; actor: Actor } {\r\n const actor = playerToActor(player);\r\n const team = createTeamWithActor(actor, `${player.name}'s Team`);\r\n return { team, actor };\r\n}\r\n\r\n// ============================================================================\r\n// Team Membership Management\r\n// ============================================================================\r\n\r\n/**\r\n * Add an actor to the team's active roster\r\n * Returns false if team is full\r\n */\r\nexport function addActiveTeamMember(team: Team, actor: Actor): boolean {\r\n if (team.activeMembers.length >= MAX_ACTIVE_MEMBERS) {\r\n return false;\r\n }\r\n if (team.activeMembers.includes(actor.id)) {\r\n return true; // Already in active\r\n }\r\n // Remove from reserve if present\r\n const reserveIndex = team.reserveMembers.indexOf(actor.id);\r\n if (reserveIndex !== -1) {\r\n team.reserveMembers.splice(reserveIndex, 1);\r\n }\r\n team.activeMembers.push(actor.id);\r\n actor.teamId = team.id;\r\n actor.status = 'active';\r\n return true;\r\n}\r\n\r\n/**\r\n * Move an actor to the reserve roster\r\n */\r\nexport function moveToReserve(team: Team, actor: Actor): void {\r\n const activeIndex = team.activeMembers.indexOf(actor.id);\r\n if (activeIndex !== -1) {\r\n team.activeMembers.splice(activeIndex, 1);\r\n }\r\n if (!team.reserveMembers.includes(actor.id)) {\r\n team.reserveMembers.push(actor.id);\r\n }\r\n actor.status = 'reserve';\r\n}\r\n\r\n/**\r\n * Remove an actor from the team entirely\r\n */\r\nexport function removeFromTeam(team: Team, actor: Actor): void {\r\n const activeIndex = team.activeMembers.indexOf(actor.id);\r\n if (activeIndex !== -1) {\r\n team.activeMembers.splice(activeIndex, 1);\r\n }\r\n const reserveIndex = team.reserveMembers.indexOf(actor.id);\r\n if (reserveIndex !== -1) {\r\n team.reserveMembers.splice(reserveIndex, 1);\r\n }\r\n actor.teamId = undefined;\r\n}\r\n\r\n/**\r\n * Swap positions of two active members\r\n */\r\nexport function swapActivePositions(team: Team, index1: number, index2: number): boolean {\r\n if (index1 < 0 || index1 >= team.activeMembers.length ||\r\n index2 < 0 || index2 >= team.activeMembers.length) {\r\n return false;\r\n }\r\n [team.activeMembers[index1], team.activeMembers[index2]] =\r\n [team.activeMembers[index2], team.activeMembers[index1]];\r\n return true;\r\n}\r\n\r\n/**\r\n * Set the team leader (move to position 0)\r\n */\r\nexport function setTeamLeader(team: Team, actorId: string): boolean {\r\n const currentIndex = team.activeMembers.indexOf(actorId);\r\n if (currentIndex === -1) return false;\r\n if (currentIndex === 0) return true; // Already leader\r\n return swapActivePositions(team, 0, currentIndex);\r\n}\r\n\r\n/**\r\n * Get the team leader ID\r\n */\r\nexport function getTeamLeaderId(team: Team): string | null {\r\n return team.activeMembers[0] ?? null;\r\n}\r\n\r\n// ============================================================================\r\n// Team Combat Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Get actors that can fight (active status, HP > 0)\r\n */\r\nexport function getActiveActorsForCombat(team: Team, actors: Record<string, Actor>): Actor[] {\r\n return team.activeMembers\r\n .map(id => actors[id])\r\n .filter((actor): actor is Actor => actor !== undefined && canActorFight(actor));\r\n}\r\n\r\n/**\r\n * Get all active members regardless of combat status\r\n */\r\nexport function getActiveMembers(team: Team, actors: Record<string, Actor>): Actor[] {\r\n return team.activeMembers\r\n .map(id => actors[id])\r\n .filter((actor): actor is Actor => actor !== undefined);\r\n}\r\n\r\n/**\r\n * Get reserve members\r\n */\r\nexport function getReserveMembers(team: Team, actors: Record<string, Actor>): Actor[] {\r\n return team.reserveMembers\r\n .map(id => actors[id])\r\n .filter((actor): actor is Actor => actor !== undefined);\r\n}\r\n\r\n/**\r\n * Check if all active members are dead\r\n */\r\nexport function isTeamWiped(team: Team, actors: Record<string, Actor>): boolean {\r\n return team.activeMembers.every(id => {\r\n const actor = actors[id];\r\n return !actor || !isActorAlive(actor);\r\n });\r\n}\r\n\r\n/**\r\n * Get total team level (sum of all active members)\r\n */\r\nexport function getTeamTotalLevel(team: Team, actors: Record<string, Actor>): number {\r\n return team.activeMembers.reduce((sum, id) => {\r\n const actor = actors[id];\r\n return sum + (actor?.stats.level ?? 0);\r\n }, 0);\r\n}\r\n\r\n/**\r\n * Get average team level\r\n */\r\nexport function getTeamAverageLevel(team: Team, actors: Record<string, Actor>): number {\r\n if (team.activeMembers.length === 0) return 0;\r\n return Math.floor(getTeamTotalLevel(team, actors) / team.activeMembers.length);\r\n}\r\n\r\n// ============================================================================\r\n// Team Formation\r\n// ============================================================================\r\n\r\n/**\r\n * Set the team's formation\r\n */\r\nexport function setTeamFormation(team: Team, formation: TeamFormation): void {\r\n team.formation = formation;\r\n}\r\n\r\n/**\r\n * Get the position index for an actor in the team\r\n * Returns -1 if not found\r\n */\r\nexport function getActorFormationPosition(team: Team, actorId: string): number {\r\n return team.activeMembers.indexOf(actorId);\r\n}\r\n\r\n/**\r\n * Check if an actor is on the frontline based on formation\r\n */\r\nexport function isActorOnFrontline(team: Team, actorId: string): boolean {\r\n const position = getActorFormationPosition(team, actorId);\r\n if (position === -1) return false;\r\n\r\n // Import formation effects\r\n const { FORMATION_EFFECTS } = require('./types.js');\r\n const config = FORMATION_EFFECTS[team.formation];\r\n return config.frontline.includes(position);\r\n}\r\n\r\n/**\r\n * Get damage multiplier for an actor based on formation\r\n */\r\nexport function getFormationDamageMultiplier(team: Team, actorId: string): number {\r\n const position = getActorFormationPosition(team, actorId);\r\n if (position === -1) return 0;\r\n\r\n // Import formation effects\r\n const { FORMATION_EFFECTS } = require('./types.js');\r\n const config = FORMATION_EFFECTS[team.formation];\r\n return config.damage[position] ?? 1.0;\r\n}\r\n\r\n// ============================================================================\r\n// Team Inventory & Resources\r\n// ============================================================================\r\n\r\n/**\r\n * Add gold to team's shared pool\r\n */\r\nexport function addTeamGold(team: Team, amount: number): void {\r\n team.sharedGold += amount;\r\n}\r\n\r\n/**\r\n * Spend gold from team's shared pool\r\n * Returns true if successful\r\n */\r\nexport function spendTeamGold(team: Team, amount: number): boolean {\r\n if (team.sharedGold < amount) return false;\r\n team.sharedGold -= amount;\r\n return true;\r\n}\r\n\r\n/**\r\n * Add item to team's shared inventory\r\n */\r\nexport function addItemToTeam(team: Team, item: InventoryItem): void {\r\n const existing = team.sharedInventory.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 team.sharedInventory.push({ ...item });\r\n }\r\n}\r\n\r\n/**\r\n * Remove item from team's shared inventory\r\n * Returns true if successful\r\n */\r\nexport function removeItemFromTeam(team: Team, itemId: string, quantity: number = 1): boolean {\r\n const index = team.sharedInventory.findIndex(i => i.id === itemId);\r\n if (index === -1) return false;\r\n\r\n const item = team.sharedInventory[index];\r\n if (item.quantity < quantity) return false;\r\n\r\n item.quantity -= quantity;\r\n if (item.quantity <= 0) {\r\n team.sharedInventory.splice(index, 1);\r\n }\r\n return true;\r\n}\r\n\r\n// ============================================================================\r\n// Team Experience Distribution\r\n// ============================================================================\r\n\r\n/**\r\n * Distribute experience evenly among active team members\r\n * Returns actors that leveled up\r\n */\r\nexport function distributeTeamExperience(\r\n team: Team,\r\n actors: Record<string, Actor>,\r\n totalExp: number,\r\n addExperienceFn: (actor: Actor, exp: number) => boolean\r\n): Actor[] {\r\n const activeActors = getActiveActorsForCombat(team, actors);\r\n if (activeActors.length === 0) return [];\r\n\r\n const expPerActor = Math.floor(totalExp / activeActors.length);\r\n const leveledUp: Actor[] = [];\r\n\r\n for (const actor of activeActors) {\r\n if (addExperienceFn(actor, expPerActor)) {\r\n leveledUp.push(actor);\r\n }\r\n }\r\n\r\n return leveledUp;\r\n}\r\n\r\n// ============================================================================\r\n// Team Movement & Location\r\n// ============================================================================\r\n\r\n/**\r\n * Update team position\r\n */\r\nexport function setTeamPosition(team: Team, position: Position): void {\r\n team.position = { ...position };\r\n}\r\n\r\n/**\r\n * Update team location\r\n */\r\nexport function setTeamLocation(team: Team, location: CurrentLocation): void {\r\n team.currentLocation = { ...location };\r\n}\r\n\r\n// ============================================================================\r\n// Team Strategy\r\n// ============================================================================\r\n\r\n/**\r\n * Update team strategy\r\n */\r\nexport function setTeamStrategy(team: Team, strategy: StrategyStateMachine): void {\r\n team.strategy = { ...strategy };\r\n}\r\n\r\n// ============================================================================\r\n// Team Display Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Get team summary for display\r\n */\r\nexport function getTeamSummary(team: Team, actors: Record<string, Actor>): string {\r\n const activeCount = team.activeMembers.length;\r\n const reserveCount = team.reserveMembers.length;\r\n const avgLevel = getTeamAverageLevel(team, actors);\r\n return `${team.name} (${activeCount}/4 active, ${reserveCount} reserve, Avg Lv${avgLevel})`;\r\n}\r\n\r\n/**\r\n * Get formation display name\r\n */\r\nexport function getFormationDisplayName(formation: TeamFormation): string {\r\n switch (formation) {\r\n case 'line': return 'Line';\r\n case 'wedge': return 'Wedge';\r\n case 'defensive': return 'Defensive';\r\n case 'spread': return 'Spread';\r\n }\r\n}\r\n\r\n/**\r\n * Get formation description\r\n */\r\nexport function getFormationDescription(formation: TeamFormation): string {\r\n switch (formation) {\r\n case 'line':\r\n return 'Leader takes full damage, others take 50%';\r\n case 'wedge':\r\n return 'Front 2 take 80% damage, back 2 take 40%';\r\n case 'defensive':\r\n return 'Front 3 take 60% damage, last takes 20%';\r\n case 'spread':\r\n return 'All take 50% damage, no protection';\r\n }\r\n}\r\n"],"names":[],"mappings":"AAAA;;;;;GAKG;;;AAaH,OAAO,EAAe,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AACrF,OAAO,EAAE,gBAAgB,EAAE,MAAM,gCAAgC,CAAC;AAElE,+EAA+E;AAC/E,YAAY;AACZ,+EAA+E;AAE/E;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAoB;IAC/C,IAAI,EAAE,MAAM;IACZ,WAAW,EAAE,WAAW;IACxB,MAAM,EAAE,aAAa;CACtB,CAAC;AAEF,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,IAAY,EAAE,QAAiB;IACxD,OAAO;QACL,EAAE,EAAE,QAAQ,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;QACtE,IAAI;QACJ,aAAa,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE;QACzC,cAAc,EAAE,EAAE;QAClB,eAAe,EAAE,EAAE;QACnB,UAAU,EAAE,EAAE,EAAG,gBAAgB;QACjC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;QAClC,eAAe,EAAE,EAAE,GAAG,gBAAgB,EAAE;QACxC,SAAS,EAAE,MAAM;QACjB,QAAQ,EAAE,EAAE,GAAG,gBAAgB,EAAE;QACjC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;QACrB,aAAa,EAAE,CAAC;KACjB,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAY,EAAE,QAAiB;IACjE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,IAAI,GAAG,KAAK,CAAC,IAAI,SAAS,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC;IACtE,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAE,wBAAwB;IAC7D,KAAK,CAAC,KAAK,CAAC,IAAI,GAAG,CAAC,CAAC;IACrB,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACvB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC;IACpC,MAAM,IAAI,GAAG,mBAAmB,CAAC,KAAK,EAAE,GAAG,MAAM,CAAC,IAAI,SAAS,CAAC,CAAC;IACjE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACzB,CAAC;AAED,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,KAAY;IAC1D,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAC;QACpD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC1C,OAAO,IAAI,CAAC,CAAE,oBAAoB;IACpC,CAAC;IACD,iCAAiC;IACjC,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC;IACvB,KAAK,CAAC,MAAM,GAAG,QAAQ,CAAC;IACxB,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,KAAY;IACpD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;QAC5C,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACrC,CAAC;IACD,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,KAAY;IACrD,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACzD,IAAI,WAAW,KAAK,CAAC,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC;IAC5C,CAAC;IACD,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3D,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;QACxB,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;IAC9C,CAAC;IACD,KAAK,CAAC,MAAM,GAAG,SAAS,CAAC;AAC3B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,MAAc,EAAE,MAAc;IAC5E,IAAI,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM;QACjD,MAAM,GAAG,CAAC,IAAI,MAAM,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;QACtD,OAAO,KAAK,CAAC;IACf,CAAC;IACD,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC;IAC3D,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,OAAe;IACvD,MAAM,YAAY,GAAG,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,IAAI,YAAY,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IACtC,IAAI,YAAY,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC,CAAE,iBAAiB;IACvD,OAAO,mBAAmB,CAAC,IAAI,EAAE,CAAC,EAAE,YAAY,CAAC,CAAC;AACpD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU;IACxC,OAAO,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACvC,CAAC;AAED,+EAA+E;AAC/E,sBAAsB;AACtB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,wBAAwB,CAAC,IAAU,EAAE,MAA6B;IAChF,OAAO,IAAI,CAAC,aAAa;SACtB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACrB,MAAM,CAAC,CAAC,KAAK,EAAkB,EAAE,CAAC,KAAK,KAAK,SAAS,IAAI,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC;AACpF,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAU,EAAE,MAA6B;IACxE,OAAO,IAAI,CAAC,aAAa;SACtB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACrB,MAAM,CAAC,CAAC,KAAK,EAAkB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAU,EAAE,MAA6B;IACzE,OAAO,IAAI,CAAC,cAAc;SACvB,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;SACrB,MAAM,CAAC,CAAC,KAAK,EAAkB,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,MAA6B;IACnE,OAAO,IAAI,CAAC,aAAa,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE;QACnC,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,CAAC,KAAK,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,iBAAiB,CAAC,IAAU,EAAE,MAA6B;IACzE,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;QACzB,OAAO,GAAG,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IACzC,CAAC,EAAE,CAAC,CAAC,CAAC;AACR,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAU,EAAE,MAA6B;IAC3E,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,CAAC;IAC9C,OAAO,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,CAAC;AACjF,CAAC;AAED,+EAA+E;AAC/E,iBAAiB;AACjB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,IAAU,EAAE,SAAwB;IACnE,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;AAC7B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,yBAAyB,CAAC,IAAU,EAAE,OAAe;IACnE,OAAO,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAU,EAAE,OAAe;IAC5D,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAElC,2BAA2B;IAC3B,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;AAC7C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,4BAA4B,CAAC,IAAU,EAAE,OAAe;IACtE,MAAM,QAAQ,GAAG,yBAAyB,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IAC1D,IAAI,QAAQ,KAAK,CAAC,CAAC;QAAE,OAAO,CAAC,CAAC;IAE9B,2BAA2B;IAC3B,MAAM,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IACpD,MAAM,MAAM,GAAG,iBAAiB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACjD,OAAO,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC;AACxC,CAAC;AAED,+EAA+E;AAC/E,6BAA6B;AAC7B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,IAAU,EAAE,MAAc;IACpD,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,MAAc;IACtD,IAAI,IAAI,CAAC,UAAU,GAAG,MAAM;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,CAAC,UAAU,IAAI,MAAM,CAAC;IAC1B,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,IAAU,EAAE,IAAmB;IAC3D,MAAM,QAAQ,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1F,IAAI,QAAQ,EAAE,CAAC;QACb,QAAQ,CAAC,QAAQ,IAAI,IAAI,CAAC,QAAQ,CAAC;IACrC,CAAC;SAAM,CAAC;QACN,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,CAAC;IACzC,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAU,EAAE,MAAc,EAAE,WAAmB,CAAC;IACjF,MAAM,KAAK,GAAG,IAAI,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAC;IACnE,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,KAAK,CAAC;IAE/B,MAAM,IAAI,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;IACzC,IAAI,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAAE,OAAO,KAAK,CAAC;IAE3C,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC;IAC1B,IAAI,IAAI,CAAC,QAAQ,IAAI,CAAC,EAAE,CAAC;QACvB,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,+EAA+E;AAC/E,+BAA+B;AAC/B,+EAA+E;AAE/E;;;GAGG;AACH,MAAM,UAAU,wBAAwB,CACtC,IAAU,EACV,MAA6B,EAC7B,QAAgB,EAChB,eAAuD;IAEvD,MAAM,YAAY,GAAG,wBAAwB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAC5D,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEzC,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,SAAS,GAAY,EAAE,CAAC;IAE9B,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE,CAAC;QACjC,IAAI,eAAe,CAAC,KAAK,EAAE,WAAW,CAAC,EAAE,CAAC;YACxC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,+EAA+E;AAC/E,2BAA2B;AAC3B,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,QAAkB;IAC5D,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,QAAyB;IACnE,IAAI,CAAC,eAAe,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;AACzC,CAAC;AAED,+EAA+E;AAC/E,gBAAgB;AAChB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,eAAe,CAAC,IAAU,EAAE,QAA8B;IACxE,IAAI,CAAC,QAAQ,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;AAClC,CAAC;AAED,+EAA+E;AAC/E,uBAAuB;AACvB,+EAA+E;AAE/E;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,IAAU,EAAE,MAA6B;IACtE,MAAM,WAAW,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;IAC9C,MAAM,YAAY,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;IAChD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACnD,OAAO,GAAG,IAAI,CAAC,IAAI,KAAK,WAAW,cAAc,YAAY,mBAAmB,QAAQ,GAAG,CAAC;AAC9F,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAwB;IAC9D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,OAAO,MAAM,CAAC;QAC3B,KAAK,OAAO,CAAC,CAAC,OAAO,OAAO,CAAC;QAC7B,KAAK,WAAW,CAAC,CAAC,OAAO,WAAW,CAAC;QACrC,KAAK,QAAQ,CAAC,CAAC,OAAO,QAAQ,CAAC;IACjC,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,uBAAuB,CAAC,SAAwB;IAC9D,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,MAAM;YACT,OAAO,2CAA2C,CAAC;QACrD,KAAK,OAAO;YACV,OAAO,0CAA0C,CAAC;QACpD,KAAK,WAAW;YACd,OAAO,yCAAyC,CAAC;QACnD,KAAK,QAAQ;YACX,OAAO,oCAAoC,CAAC;IAChD,CAAC;AACH,CAAC","debug_id":"a833c558-3d87-597b-90d7-ce06f9993349"}
@@ -0,0 +1,88 @@
1
+ /**
2
+ * TeamCombat - Multi-character turn-based combat system
3
+ *
4
+ * Handles combat involving multiple team members:
5
+ * - Turn order based on speed
6
+ * - Formation-based damage distribution
7
+ * - Individual HP/MP tracking for each actor
8
+ * - Experience distribution after combat
9
+ */
10
+ import type { Actor, Team, Enemy, TeamCombatState, CombatTurnEntry, CombatLogEntry, InventoryItem } from './types.js';
11
+ export interface TeamCombatResult {
12
+ victory: boolean;
13
+ rewards: {
14
+ exp: number;
15
+ gold: number;
16
+ items: InventoryItem[];
17
+ };
18
+ casualties: string[];
19
+ levelUps: string[];
20
+ turns: number;
21
+ combatLog: CombatLogEntry[];
22
+ }
23
+ export interface TeamCombatCallbacks {
24
+ onCombatStart: (state: TeamCombatState) => void;
25
+ onTurnStart: (entry: CombatTurnEntry, state: TeamCombatState) => void;
26
+ onActorAction: (actorId: string, action: string, target: string, damage: number) => void;
27
+ onEnemyAction: (enemyId: string, action: string, target: string, damage: number) => void;
28
+ onActorDefeated: (actorId: string) => void;
29
+ onEnemyDefeated: (enemyId: string) => void;
30
+ onTurnEnd: (state: TeamCombatState) => void;
31
+ onCombatEnd: (result: TeamCombatResult) => void;
32
+ onLogEntry: (entry: CombatLogEntry) => void;
33
+ }
34
+ /**
35
+ * Create initial combat state from team and enemies
36
+ */
37
+ export declare function createTeamCombatState(team: Team, actors: Record<string, Actor>, enemies: Enemy[], combatType?: TeamCombatState['combatType']): TeamCombatState;
38
+ /**
39
+ * Execute an actor's attack on an enemy
40
+ */
41
+ export declare function executeActorAttack(state: TeamCombatState, actorId: string, actor: Actor, targetIndex: number): {
42
+ damage: number;
43
+ defeated: boolean;
44
+ targetName: string;
45
+ };
46
+ /**
47
+ * Execute an enemy's attack on the team
48
+ */
49
+ export declare function executeEnemyAttack(state: TeamCombatState, enemy: Enemy, team: Team, actors: Record<string, Actor>): {
50
+ damage: number;
51
+ targetId: string;
52
+ targetName: string;
53
+ defeated: boolean;
54
+ };
55
+ /**
56
+ * Process a single turn in combat
57
+ */
58
+ export declare function processCombatTurn(state: TeamCombatState, team: Team, actors: Record<string, Actor>, callbacks?: Partial<TeamCombatCallbacks>): void;
59
+ /**
60
+ * Check if combat should end
61
+ */
62
+ export declare function isCombatOver(state: TeamCombatState, team: Team, actors: Record<string, Actor>): boolean;
63
+ /**
64
+ * Check if combat was a victory
65
+ */
66
+ export declare function isCombatVictory(state: TeamCombatState): boolean;
67
+ /**
68
+ * Calculate combat rewards
69
+ */
70
+ export declare function calculateCombatRewards(state: TeamCombatState, team: Team, actors: Record<string, Actor>): TeamCombatResult['rewards'];
71
+ /**
72
+ * Finalize combat and distribute rewards
73
+ */
74
+ export declare function finalizeCombat(state: TeamCombatState, team: Team, actors: Record<string, Actor>): TeamCombatResult;
75
+ /**
76
+ * Run combat automatically until completion
77
+ * Returns the result
78
+ */
79
+ export declare function runAutoCombat(team: Team, actors: Record<string, Actor>, enemies: Enemy[], combatType?: TeamCombatState['combatType'], callbacks?: Partial<TeamCombatCallbacks>, maxTurns?: number): TeamCombatResult;
80
+ /**
81
+ * Get current HP percentages for all actors
82
+ */
83
+ export declare function getActorHpPercentages(state: TeamCombatState, team: Team, actors: Record<string, Actor>): Record<string, number>;
84
+ /**
85
+ * Get combat status summary
86
+ */
87
+ export declare function getCombatStatusSummary(state: TeamCombatState, team: Team, actors: Record<string, Actor>): string;
88
+ //# sourceMappingURL=TeamCombat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TeamCombat.d.ts","sourceRoot":"/","sources":["core/TeamCombat.ts"],"names":[],"mappings":"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"}