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,615 @@
1
+ /**
2
+ * Dungeon Generator - Creates multi-level dungeons for IdleRPG
3
+ * Builds on BSP algorithm for room generation
4
+ */
5
+ // ============================================================================
6
+ // Seeded Random
7
+ // ============================================================================
8
+
9
+ !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]="f9bf2c94-0d0f-5913-8725-ff22ce400a3b")}catch(e){}}();
10
+ class SeededRandom {
11
+ seed;
12
+ constructor(seed) {
13
+ this.seed = seed;
14
+ }
15
+ next() {
16
+ this.seed = (this.seed * 1103515245 + 12345) & 0x7fffffff;
17
+ return this.seed / 0x7fffffff;
18
+ }
19
+ nextInt(min, max) {
20
+ return Math.floor(this.next() * (max - min + 1)) + min;
21
+ }
22
+ pick(array) {
23
+ return array[Math.floor(this.next() * array.length)];
24
+ }
25
+ shuffle(array) {
26
+ const result = [...array];
27
+ for (let i = result.length - 1; i > 0; i--) {
28
+ const j = Math.floor(this.next() * (i + 1));
29
+ [result[i], result[j]] = [result[j], result[i]];
30
+ }
31
+ return result;
32
+ }
33
+ }
34
+ // ============================================================================
35
+ // Room Type Weights by Difficulty
36
+ // ============================================================================
37
+ const ROOM_TYPE_WEIGHTS = {
38
+ easy: [
39
+ { type: 'combat', weight: 35 },
40
+ { type: 'treasure', weight: 15 },
41
+ { type: 'fountain', weight: 10 },
42
+ { type: 'altar', weight: 5 },
43
+ { type: 'event', weight: 10 },
44
+ { type: 'safe_room', weight: 10 },
45
+ { type: 'empty', weight: 10 },
46
+ { type: 'dead_end', weight: 5 },
47
+ ],
48
+ normal: [
49
+ { type: 'combat', weight: 35 },
50
+ { type: 'elite', weight: 10 },
51
+ { type: 'treasure', weight: 12 },
52
+ { type: 'fountain', weight: 8 },
53
+ { type: 'altar', weight: 5 },
54
+ { type: 'event', weight: 10 },
55
+ { type: 'trap', weight: 5 },
56
+ { type: 'safe_room', weight: 8 },
57
+ { type: 'dead_end', weight: 7 },
58
+ ],
59
+ hard: [
60
+ { type: 'combat', weight: 30 },
61
+ { type: 'elite', weight: 18 },
62
+ { type: 'ambush', weight: 7 },
63
+ { type: 'treasure', weight: 10 },
64
+ { type: 'fountain', weight: 5 },
65
+ { type: 'altar', weight: 5 },
66
+ { type: 'event', weight: 8 },
67
+ { type: 'trap', weight: 10 },
68
+ { type: 'puzzle', weight: 5 },
69
+ { type: 'dead_end', weight: 7 },
70
+ ],
71
+ nightmare: [
72
+ { type: 'combat', weight: 25 },
73
+ { type: 'elite', weight: 22 },
74
+ { type: 'ambush', weight: 10 },
75
+ { type: 'treasure', weight: 8 },
76
+ { type: 'fountain', weight: 3 },
77
+ { type: 'trap', weight: 15 },
78
+ { type: 'puzzle', weight: 7 },
79
+ { type: 'event', weight: 5 },
80
+ { type: 'dead_end', weight: 5 },
81
+ ],
82
+ legendary: [
83
+ { type: 'elite', weight: 30 },
84
+ { type: 'combat', weight: 20 },
85
+ { type: 'ambush', weight: 12 },
86
+ { type: 'trap', weight: 15 },
87
+ { type: 'puzzle', weight: 10 },
88
+ { type: 'treasure', weight: 8 },
89
+ { type: 'dead_end', weight: 5 },
90
+ ],
91
+ };
92
+ // ============================================================================
93
+ // Time Constants (in real seconds)
94
+ // Import from centralized time constants
95
+ // ============================================================================
96
+ import { ROOM_TIMES } from '../core/timeConstants.js';
97
+ const ROOM_TRAVERSE_TIMES = {
98
+ // Special navigation rooms
99
+ entrance: ROOM_TIMES.entrance,
100
+ exit: ROOM_TIMES.exit,
101
+ dead_end: ROOM_TIMES.dead_end,
102
+ safe_room: ROOM_TIMES.safe_room,
103
+ // Combat rooms
104
+ combat: ROOM_TIMES.combat,
105
+ elite: ROOM_TIMES.elite,
106
+ boss: ROOM_TIMES.boss,
107
+ ambush: ROOM_TIMES.ambush,
108
+ // Reward rooms
109
+ treasure: ROOM_TIMES.treasure,
110
+ fountain: ROOM_TIMES.fountain,
111
+ altar: ROOM_TIMES.altar,
112
+ shop: ROOM_TIMES.shop,
113
+ // Event rooms
114
+ event: ROOM_TIMES.event,
115
+ encounter: ROOM_TIMES.encounter,
116
+ trap: ROOM_TIMES.trap,
117
+ puzzle: ROOM_TIMES.puzzle,
118
+ // Generic rooms
119
+ rest: ROOM_TIMES.rest,
120
+ empty: ROOM_TIMES.empty,
121
+ };
122
+ // ============================================================================
123
+ // Generator Functions
124
+ // ============================================================================
125
+ /**
126
+ * Generate a complete dungeon with multiple levels
127
+ */
128
+ export function generateDungeon(config) {
129
+ const rng = new SeededRandom(config.seed ?? Date.now());
130
+ const levels = [];
131
+ // Generate each level
132
+ for (let levelNum = 1; levelNum <= config.numberOfLevels; levelNum++) {
133
+ const isLastLevel = levelNum === config.numberOfLevels;
134
+ const level = generateDungeonLevel(levelNum, config, rng, isLastLevel && config.hasBoss);
135
+ levels.push(level);
136
+ }
137
+ // Calculate estimated clear time
138
+ const estimatedTime = levels.reduce((total, level) => {
139
+ return total + level.rooms.reduce((levelTotal, room) => {
140
+ return levelTotal + room.timeToTraverse;
141
+ }, 0);
142
+ }, 0);
143
+ return {
144
+ id: config.dungeonId,
145
+ name: config.name,
146
+ description: config.description,
147
+ continentId: config.continentId,
148
+ nearestTownId: config.nearestTownId,
149
+ difficulty: config.difficulty,
150
+ recommendedLevel: config.recommendedLevel,
151
+ levels,
152
+ hasBoss: config.hasBoss,
153
+ bossName: config.bossName,
154
+ estimatedTime,
155
+ rewards: generateDungeonRewards(config.difficulty, config.recommendedLevel, rng),
156
+ travelTimeFromTown: 120, // 2 minutes to reach dungeon
157
+ };
158
+ }
159
+ /**
160
+ * Generate a single dungeon level
161
+ */
162
+ function generateDungeonLevel(levelNumber, config, rng, hasBoss) {
163
+ const roomCount = rng.nextInt(config.roomsPerLevel.min, config.roomsPerLevel.max);
164
+ const rooms = [];
165
+ // Generate entrance room
166
+ const entranceRoom = createRoom(`${config.dungeonId}_L${levelNumber}_entrance`, 'entrance', levelNumber, config, rng, { x: 0, y: 0 });
167
+ rooms.push(entranceRoom);
168
+ // Generate middle rooms
169
+ const middleRoomCount = roomCount - 2 - (hasBoss ? 1 : 0);
170
+ const roomTypes = selectRoomTypes(middleRoomCount, config.difficulty, rng);
171
+ let x = 1;
172
+ let y = 0;
173
+ for (let i = 0; i < middleRoomCount; i++) {
174
+ const roomId = `${config.dungeonId}_L${levelNumber}_R${i}`;
175
+ const room = createRoom(roomId, roomTypes[i], levelNumber, config, rng, { x, y });
176
+ rooms.push(room);
177
+ // Simple branching layout
178
+ if (rng.next() < 0.3 && i < middleRoomCount - 1) {
179
+ y += rng.next() < 0.5 ? 1 : -1;
180
+ }
181
+ else {
182
+ x++;
183
+ }
184
+ }
185
+ // Generate boss room if needed
186
+ let bossRoomId;
187
+ if (hasBoss) {
188
+ bossRoomId = `${config.dungeonId}_L${levelNumber}_boss`;
189
+ const bossRoom = createRoom(bossRoomId, 'boss', levelNumber, config, rng, { x: x + 1, y: 0 });
190
+ bossRoom.content.enemies = generateBossEnemy(config, rng);
191
+ rooms.push(bossRoom);
192
+ x++;
193
+ }
194
+ // Generate exit room
195
+ const exitRoom = createRoom(`${config.dungeonId}_L${levelNumber}_exit`, 'exit', levelNumber, config, rng, { x: x + 1, y: 0 });
196
+ rooms.push(exitRoom);
197
+ // Connect rooms
198
+ connectRooms(rooms, rng);
199
+ return {
200
+ levelNumber,
201
+ name: `${config.name} - Level ${levelNumber}`,
202
+ rooms,
203
+ entranceRoomId: entranceRoom.id,
204
+ exitRoomId: exitRoom.id,
205
+ bossRoomId,
206
+ minEnemyLevel: config.recommendedLevel + levelNumber - 1,
207
+ maxEnemyLevel: config.recommendedLevel + levelNumber + 1,
208
+ };
209
+ }
210
+ /**
211
+ * Select room types based on difficulty
212
+ */
213
+ function selectRoomTypes(count, difficulty, rng) {
214
+ const weights = ROOM_TYPE_WEIGHTS[difficulty];
215
+ const totalWeight = weights.reduce((sum, w) => sum + w.weight, 0);
216
+ const types = [];
217
+ for (let i = 0; i < count; i++) {
218
+ let roll = rng.next() * totalWeight;
219
+ for (const { type, weight } of weights) {
220
+ roll -= weight;
221
+ if (roll <= 0) {
222
+ types.push(type);
223
+ break;
224
+ }
225
+ }
226
+ }
227
+ return rng.shuffle(types);
228
+ }
229
+ /**
230
+ * Create a dungeon room
231
+ */
232
+ function createRoom(id, type, levelNumber, config, rng, position) {
233
+ const content = generateRoomContent(type, levelNumber, config, rng);
234
+ return {
235
+ id,
236
+ type,
237
+ name: generateRoomName(type, rng),
238
+ description: generateRoomDescription(type, rng),
239
+ connections: [],
240
+ content,
241
+ timeToTraverse: ROOM_TRAVERSE_TIMES[type],
242
+ isExplored: false,
243
+ isCleared: type === 'entrance' || type === 'exit' || type === 'empty',
244
+ position,
245
+ };
246
+ }
247
+ /**
248
+ * Generate room content based on type
249
+ */
250
+ function generateRoomContent(type, levelNumber, config, rng) {
251
+ const content = {};
252
+ switch (type) {
253
+ // Combat rooms
254
+ case 'combat':
255
+ content.enemies = generateEnemies(config.recommendedLevel + levelNumber - 1, 1, 3, rng);
256
+ break;
257
+ case 'elite':
258
+ content.enemies = generateEliteEnemies(config.recommendedLevel + levelNumber, rng);
259
+ break;
260
+ case 'ambush':
261
+ // Ambush: enemies attack first, player cannot use items initially
262
+ content.enemies = generateEnemies(config.recommendedLevel + levelNumber - 1, 2, 4, rng);
263
+ break;
264
+ // Reward rooms
265
+ case 'treasure':
266
+ content.treasureChest = generateTreasureChest(config.difficulty, rng);
267
+ break;
268
+ case 'fountain':
269
+ // Fountain: heals HP/MP (handled by game logic, no content needed)
270
+ break;
271
+ case 'altar':
272
+ // Altar: provides temporary buff (handled by game logic, no content needed)
273
+ break;
274
+ // Event rooms
275
+ case 'trap':
276
+ content.trap = generateTrap(config.difficulty, rng);
277
+ break;
278
+ case 'event':
279
+ content.items = rng.next() < 0.5 ? generateRandomItems(1, rng) : undefined;
280
+ break;
281
+ // Special rooms
282
+ case 'dead_end':
283
+ // Dead ends may have hidden treasure
284
+ if (rng.next() < 0.3) {
285
+ content.treasureChest = generateTreasureChest(config.difficulty, rng);
286
+ content.treasureChest.isLocked = false; // Hidden treasure is unlocked
287
+ }
288
+ break;
289
+ case 'safe_room':
290
+ // Safe rooms may have a merchant
291
+ if (rng.next() < 0.2) {
292
+ content.items = generateRandomItems(2, rng);
293
+ }
294
+ break;
295
+ }
296
+ return content;
297
+ }
298
+ /**
299
+ * Generate regular enemies
300
+ */
301
+ function generateEnemies(baseLevel, minCount, maxCount, rng) {
302
+ const count = rng.nextInt(minCount, maxCount);
303
+ const enemies = [];
304
+ const enemyTypes = [
305
+ { name: 'Goblin', hpMult: 1, atkMult: 1, defMult: 0.8 },
306
+ { name: 'Skeleton', hpMult: 0.8, atkMult: 1.1, defMult: 0.9 },
307
+ { name: 'Slime', hpMult: 1.2, atkMult: 0.8, defMult: 0.5 },
308
+ { name: 'Orc', hpMult: 1.5, atkMult: 1.2, defMult: 1 },
309
+ { name: 'Bat Swarm', hpMult: 0.6, atkMult: 0.7, defMult: 0.3 },
310
+ { name: 'Spider', hpMult: 0.9, atkMult: 1, defMult: 0.6 },
311
+ ];
312
+ for (let i = 0; i < count; i++) {
313
+ const type = rng.pick(enemyTypes);
314
+ const level = baseLevel + rng.nextInt(-1, 1);
315
+ enemies.push({
316
+ id: `enemy_${Date.now()}_${i}_${rng.nextInt(1000, 9999)}`,
317
+ name: type.name,
318
+ level,
319
+ hp: Math.floor(20 * level * type.hpMult),
320
+ maxHp: Math.floor(20 * level * type.hpMult),
321
+ attack: Math.floor(5 * level * type.atkMult),
322
+ defense: Math.floor(3 * level * type.defMult),
323
+ speed: 5 + level,
324
+ expReward: 10 * level,
325
+ goldReward: rng.nextInt(5, 20) * level,
326
+ dropTable: [
327
+ { itemId: 'health_potion', chance: 0.2, quantity: { min: 1, max: 1 } },
328
+ ],
329
+ isBoss: false,
330
+ });
331
+ }
332
+ return enemies;
333
+ }
334
+ /**
335
+ * Generate elite enemies
336
+ */
337
+ function generateEliteEnemies(baseLevel, rng) {
338
+ const eliteTypes = [
339
+ { name: 'Orc Warlord', hpMult: 2.5, atkMult: 1.5, defMult: 1.3 },
340
+ { name: 'Dark Mage', hpMult: 1.5, atkMult: 2, defMult: 0.8 },
341
+ { name: 'Stone Golem', hpMult: 3, atkMult: 1, defMult: 2 },
342
+ { name: 'Shadow Assassin', hpMult: 1.2, atkMult: 2.5, defMult: 0.5 },
343
+ ];
344
+ const type = rng.pick(eliteTypes);
345
+ const level = baseLevel + 2;
346
+ return [{
347
+ id: `elite_${Date.now()}_${rng.nextInt(1000, 9999)}`,
348
+ name: type.name,
349
+ level,
350
+ hp: Math.floor(30 * level * type.hpMult),
351
+ maxHp: Math.floor(30 * level * type.hpMult),
352
+ attack: Math.floor(7 * level * type.atkMult),
353
+ defense: Math.floor(4 * level * type.defMult),
354
+ speed: 8 + level,
355
+ expReward: 30 * level,
356
+ goldReward: rng.nextInt(20, 50) * level,
357
+ dropTable: [
358
+ { itemId: 'health_potion', chance: 0.5, quantity: { min: 1, max: 2 } },
359
+ { itemId: 'affix_fragment', chance: 0.3, quantity: { min: 1, max: 1 } },
360
+ ],
361
+ isBoss: false,
362
+ }];
363
+ }
364
+ /**
365
+ * Generate boss enemy
366
+ */
367
+ function generateBossEnemy(config, rng) {
368
+ const bossTypes = [
369
+ { name: 'Goblin King', hpMult: 4, atkMult: 1.8, defMult: 1.5 },
370
+ { name: 'Ancient Lich', hpMult: 3.5, atkMult: 2.5, defMult: 1 },
371
+ { name: 'Dragon Whelp', hpMult: 5, atkMult: 2, defMult: 2 },
372
+ { name: 'Demon Lord', hpMult: 4.5, atkMult: 2.2, defMult: 1.8 },
373
+ ];
374
+ const type = config.bossName
375
+ ? { name: config.bossName, hpMult: 4, atkMult: 2, defMult: 1.5 }
376
+ : rng.pick(bossTypes);
377
+ const level = config.recommendedLevel + config.numberOfLevels + 2;
378
+ return [{
379
+ id: `boss_${config.dungeonId}_${Date.now()}`,
380
+ name: type.name,
381
+ level,
382
+ hp: Math.floor(50 * level * type.hpMult),
383
+ maxHp: Math.floor(50 * level * type.hpMult),
384
+ attack: Math.floor(10 * level * type.atkMult),
385
+ defense: Math.floor(5 * level * type.defMult),
386
+ speed: 10 + level,
387
+ expReward: 100 * level,
388
+ goldReward: rng.nextInt(100, 300) * level,
389
+ dropTable: [
390
+ { itemId: 'health_potion', chance: 1, quantity: { min: 2, max: 3 } },
391
+ { itemId: 'affix_fragment', chance: 0.8, quantity: { min: 1, max: 2 } },
392
+ { itemId: 'rare_material', chance: 0.5, quantity: { min: 1, max: 1 } },
393
+ ],
394
+ isBoss: true,
395
+ }];
396
+ }
397
+ /**
398
+ * Generate treasure chest
399
+ */
400
+ function generateTreasureChest(difficulty, rng) {
401
+ const rarityByDifficulty = {
402
+ easy: ['common', 'common', 'uncommon'],
403
+ normal: ['common', 'uncommon', 'uncommon', 'rare'],
404
+ hard: ['uncommon', 'rare', 'rare', 'epic'],
405
+ nightmare: ['rare', 'epic', 'epic', 'legendary'],
406
+ legendary: ['epic', 'legendary', 'legendary'],
407
+ };
408
+ const rarity = rng.pick(rarityByDifficulty[difficulty]);
409
+ const goldMultiplier = { common: 1, uncommon: 2, rare: 4, epic: 8, legendary: 20 };
410
+ return {
411
+ id: `chest_${Date.now()}_${rng.nextInt(1000, 9999)}`,
412
+ rarity,
413
+ isOpened: false,
414
+ isLocked: rng.next() < 0.3,
415
+ contents: generateRandomItems(rng.nextInt(1, 3), rng),
416
+ goldAmount: rng.nextInt(10, 50) * goldMultiplier[rarity],
417
+ };
418
+ }
419
+ /**
420
+ * Generate trap
421
+ */
422
+ function generateTrap(difficulty, rng) {
423
+ const traps = [
424
+ { name: 'Spike Trap', damage: 20, effect: 'bleeding' },
425
+ { name: 'Poison Dart', damage: 10, effect: 'poisoned' },
426
+ { name: 'Fire Geyser', damage: 30, effect: 'burning' },
427
+ { name: 'Ice Blast', damage: 15, effect: 'frozen' },
428
+ { name: 'Pitfall', damage: 25 },
429
+ ];
430
+ const trap = rng.pick(traps);
431
+ const difficultyMod = { easy: 0.5, normal: 1, hard: 1.5, nightmare: 2, legendary: 3 };
432
+ return {
433
+ id: `trap_${Date.now()}_${rng.nextInt(1000, 9999)}`,
434
+ name: trap.name,
435
+ damage: Math.floor(trap.damage * difficultyMod[difficulty]),
436
+ effect: trap.effect,
437
+ disarmDifficulty: rng.nextInt(3, 8),
438
+ isTriggered: false,
439
+ isDisarmed: false,
440
+ };
441
+ }
442
+ /**
443
+ * Generate random items
444
+ */
445
+ function generateRandomItems(count, rng) {
446
+ const items = [];
447
+ const itemTypes = [
448
+ { id: 'health_potion', name: 'Health Potion', type: 'consumable' },
449
+ { id: 'mana_potion', name: 'Mana Potion', type: 'consumable' },
450
+ { id: 'antidote', name: 'Antidote', type: 'consumable' },
451
+ { id: 'iron_ore', name: 'Iron Ore', type: 'material' },
452
+ { id: 'magic_crystal', name: 'Magic Crystal', type: 'material' },
453
+ ];
454
+ for (let i = 0; i < count; i++) {
455
+ const item = rng.pick(itemTypes);
456
+ items.push({
457
+ id: `${item.id}_${Date.now()}_${i}`,
458
+ type: item.type,
459
+ name: item.name,
460
+ description: `A ${item.name.toLowerCase()}`,
461
+ quantity: rng.nextInt(1, 3),
462
+ });
463
+ }
464
+ return items;
465
+ }
466
+ /**
467
+ * Generate dungeon rewards
468
+ */
469
+ function generateDungeonRewards(difficulty, level, rng) {
470
+ const baseExp = level * 100;
471
+ const baseGold = level * 50;
472
+ const diffMod = { easy: 1, normal: 1.5, hard: 2, nightmare: 3, legendary: 5 };
473
+ return [
474
+ { type: 'exp', value: Math.floor(baseExp * diffMod[difficulty]), chance: 1 },
475
+ { type: 'gold', value: Math.floor(baseGold * diffMod[difficulty]), chance: 1 },
476
+ { type: 'item', value: 'affix_fragment', chance: 0.5 },
477
+ ];
478
+ }
479
+ /**
480
+ * Connect rooms in a level
481
+ */
482
+ function connectRooms(rooms, rng) {
483
+ // Connect rooms linearly first
484
+ for (let i = 0; i < rooms.length - 1; i++) {
485
+ const currentRoom = rooms[i];
486
+ const nextRoom = rooms[i + 1];
487
+ // Determine direction
488
+ const dx = nextRoom.position.x - currentRoom.position.x;
489
+ const dy = nextRoom.position.y - currentRoom.position.y;
490
+ let direction = 'east';
491
+ let reverseDir = 'west';
492
+ if (Math.abs(dy) > Math.abs(dx)) {
493
+ direction = dy > 0 ? 'south' : 'north';
494
+ reverseDir = dy > 0 ? 'north' : 'south';
495
+ }
496
+ currentRoom.connections.push({
497
+ targetRoomId: nextRoom.id,
498
+ direction,
499
+ isLocked: false,
500
+ isHidden: false,
501
+ });
502
+ nextRoom.connections.push({
503
+ targetRoomId: currentRoom.id,
504
+ direction: reverseDir,
505
+ isLocked: false,
506
+ isHidden: false,
507
+ });
508
+ }
509
+ // Add some random connections for variety
510
+ for (let i = 0; i < rooms.length - 2; i++) {
511
+ if (rng.next() < 0.2) {
512
+ const j = rng.nextInt(i + 2, Math.min(i + 4, rooms.length - 1));
513
+ const roomA = rooms[i];
514
+ const roomB = rooms[j];
515
+ // Check if already connected
516
+ if (!roomA.connections.some(c => c.targetRoomId === roomB.id)) {
517
+ roomA.connections.push({
518
+ targetRoomId: roomB.id,
519
+ direction: 'east',
520
+ isLocked: false,
521
+ isHidden: rng.next() < 0.3,
522
+ });
523
+ roomB.connections.push({
524
+ targetRoomId: roomA.id,
525
+ direction: 'west',
526
+ isLocked: false,
527
+ isHidden: rng.next() < 0.3,
528
+ });
529
+ }
530
+ }
531
+ }
532
+ }
533
+ /**
534
+ * Generate room name
535
+ */
536
+ function generateRoomName(type, rng) {
537
+ const names = {
538
+ // Special navigation rooms
539
+ entrance: ['Dungeon Entrance', 'Gateway', 'Entry Hall'],
540
+ exit: ['Stairway Down', 'Exit Passage', 'Descent'],
541
+ dead_end: ['Dead End', 'Blocked Passage', 'Collapsed Tunnel'],
542
+ safe_room: ['Safe Haven', 'Sanctuary', 'Hidden Refuge'],
543
+ // Combat rooms
544
+ combat: ['Monster Den', 'Dark Corridor', 'Infested Hall'],
545
+ elite: ['Champion\'s Arena', 'Elite Guard Post', 'Proving Grounds'],
546
+ boss: ['Throne Room', 'Lair of Darkness', 'Final Chamber'],
547
+ ambush: ['Shadow Corner', 'Ambush Point', 'Treacherous Path'],
548
+ // Reward rooms
549
+ treasure: ['Treasure Vault', 'Golden Chamber', 'Loot Room'],
550
+ fountain: ['Healing Spring', 'Crystal Fountain', 'Sacred Waters'],
551
+ altar: ['Ancient Altar', 'Blessing Shrine', 'Power Nexus'],
552
+ shop: ['Merchant\'s Corner', 'Trading Post', 'Hidden Shop'],
553
+ // Event rooms
554
+ event: ['Mysterious Shrine', 'Strange Chamber', 'Enigma Room'],
555
+ encounter: ['Traveler\'s Rest', 'Hidden Camp', 'Meeting Point'],
556
+ trap: ['Danger Zone', 'Trapped Corridor', 'Perilous Path'],
557
+ puzzle: ['Riddle Room', 'Puzzle Chamber', 'Mind Trial'],
558
+ // Generic rooms
559
+ rest: ['Resting Spot', 'Quiet Corner', 'Peaceful Alcove'],
560
+ empty: ['Empty Corridor', 'Silent Hall', 'Abandoned Room'],
561
+ };
562
+ return rng.pick(names[type]);
563
+ }
564
+ /**
565
+ * Generate room description
566
+ */
567
+ function generateRoomDescription(type, rng) {
568
+ const descriptions = {
569
+ // Special navigation rooms
570
+ entrance: ['The entrance to the dungeon. Darkness awaits.'],
571
+ exit: ['A passage leading deeper into the dungeon.'],
572
+ dead_end: ['The path ends here. Perhaps there is something hidden...'],
573
+ safe_room: ['A protected area where you can rest safely.'],
574
+ // Combat rooms
575
+ combat: ['Shadows move in the darkness. Enemies lurk here.'],
576
+ elite: ['A powerful foe guards this area.'],
577
+ boss: ['An oppressive presence fills the room. The boss awaits.'],
578
+ ambush: ['Something doesn\'t feel right... Watch your back!'],
579
+ // Reward rooms
580
+ treasure: ['Glittering treasures catch your eye.'],
581
+ fountain: ['Clear water flows from an ancient spring. It looks refreshing.'],
582
+ altar: ['A mystical altar radiates power. Touch it for a blessing.'],
583
+ shop: ['A merchant has set up shop here.'],
584
+ // Event rooms
585
+ event: ['Strange energy pulses from within.'],
586
+ encounter: ['Someone has made camp here.'],
587
+ trap: ['Something feels wrong about this place. Proceed with caution.'],
588
+ puzzle: ['Ancient mechanisms line the walls. A puzzle awaits.'],
589
+ // Generic rooms
590
+ rest: ['A peaceful respite from danger.'],
591
+ empty: ['An empty room. Nothing of immediate interest.'],
592
+ };
593
+ return rng.pick(descriptions[type]);
594
+ }
595
+ /**
596
+ * Regenerate a dungeon with a new seed
597
+ */
598
+ export function regenerateDungeon(dungeon, newSeed) {
599
+ return generateDungeon({
600
+ dungeonId: dungeon.id,
601
+ name: dungeon.name,
602
+ description: dungeon.description,
603
+ continentId: dungeon.continentId,
604
+ nearestTownId: dungeon.nearestTownId,
605
+ difficulty: dungeon.difficulty,
606
+ recommendedLevel: dungeon.recommendedLevel,
607
+ numberOfLevels: dungeon.levels.length,
608
+ roomsPerLevel: { min: 6, max: 10 },
609
+ hasBoss: dungeon.hasBoss,
610
+ bossName: dungeon.bossName,
611
+ seed: newSeed ?? Date.now(),
612
+ });
613
+ }
614
+ //# sourceMappingURL=DungeonGenerator.js.map
615
+ //# debugId=f9bf2c94-0d0f-5913-8725-ff22ce400a3b