isaacscript-common 6.6.0 → 6.6.1-dev.2

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 (820) hide show
  1. package/cachedClasses.d.ts +1 -0
  2. package/cachedClasses.js +59 -0
  3. package/cachedClasses.lua +2 -0
  4. package/callbacks/customRevive.js +153 -0
  5. package/callbacks/customRevive.lua +2 -0
  6. package/callbacks/itemPickup.js +64 -0
  7. package/callbacks/itemPickup.lua +2 -0
  8. package/callbacks/postAmbush.js +54 -0
  9. package/callbacks/postAmbush.lua +2 -0
  10. package/callbacks/postBombExploded.js +20 -0
  11. package/callbacks/postBombExploded.lua +2 -0
  12. package/callbacks/postBombInitLate.js +28 -0
  13. package/callbacks/postBombInitLate.lua +2 -0
  14. package/callbacks/postBoneSwing.js +49 -0
  15. package/callbacks/postBoneSwing.lua +2 -0
  16. package/callbacks/postCollectibleEmpty.js +32 -0
  17. package/callbacks/postCollectibleEmpty.lua +2 -0
  18. package/callbacks/postCollectibleInitFirst.js +27 -0
  19. package/callbacks/postCollectibleInitFirst.lua +2 -0
  20. package/callbacks/postCursedTeleport.js +120 -0
  21. package/callbacks/postCursedTeleport.lua +2 -0
  22. package/callbacks/postCustomDoorEnter.js +205 -0
  23. package/callbacks/postCustomDoorEnter.lua +2 -0
  24. package/callbacks/postDiceRoomActivated.js +39 -0
  25. package/callbacks/postDiceRoomActivated.lua +2 -0
  26. package/callbacks/postDoorRender.js +20 -0
  27. package/callbacks/postDoorRender.lua +2 -0
  28. package/callbacks/postDoorUpdate.js +20 -0
  29. package/callbacks/postDoorUpdate.lua +2 -0
  30. package/callbacks/postEffectInitLate.js +28 -0
  31. package/callbacks/postEffectInitLate.lua +2 -0
  32. package/callbacks/postEffectStateChanged.js +31 -0
  33. package/callbacks/postEffectStateChanged.lua +2 -0
  34. package/callbacks/postEsauJr.js +70 -0
  35. package/callbacks/postEsauJr.lua +2 -0
  36. package/callbacks/postFamiliarInitLate.js +28 -0
  37. package/callbacks/postFamiliarInitLate.lua +2 -0
  38. package/callbacks/postFamiliarStateChanged.js +31 -0
  39. package/callbacks/postFamiliarStateChanged.lua +2 -0
  40. package/callbacks/postFlip.js +59 -0
  41. package/callbacks/postFlip.lua +2 -0
  42. package/callbacks/postGreedModeWave.js +31 -0
  43. package/callbacks/postGreedModeWave.lua +2 -0
  44. package/callbacks/postGridEntity.js +107 -0
  45. package/callbacks/postGridEntity.lua +2 -0
  46. package/callbacks/postGridEntityCollision.js +49 -0
  47. package/callbacks/postGridEntityCollision.lua +2 -0
  48. package/callbacks/postGridEntityRender.js +20 -0
  49. package/callbacks/postGridEntityRender.lua +2 -0
  50. package/callbacks/postHolyMantleRemoved.js +33 -0
  51. package/callbacks/postHolyMantleRemoved.lua +2 -0
  52. package/callbacks/postItemDischarged.js +94 -0
  53. package/callbacks/postItemDischarged.lua +2 -0
  54. package/callbacks/postKnifeInitLate.js +28 -0
  55. package/callbacks/postKnifeInitLate.lua +2 -0
  56. package/callbacks/postLaserInitLate.js +28 -0
  57. package/callbacks/postLaserInitLate.lua +2 -0
  58. package/callbacks/postNPCInitLate.js +28 -0
  59. package/callbacks/postNPCInitLate.lua +2 -0
  60. package/callbacks/postNPCStateChanged.js +31 -0
  61. package/callbacks/postNPCStateChanged.lua +2 -0
  62. package/callbacks/postNewRoomEarly.js +69 -0
  63. package/callbacks/postNewRoomEarly.lua +2 -0
  64. package/callbacks/postPickupCollect.js +37 -0
  65. package/callbacks/postPickupCollect.lua +2 -0
  66. package/callbacks/postPickupInitFirst.js +52 -0
  67. package/callbacks/postPickupInitFirst.lua +2 -0
  68. package/callbacks/postPickupInitLate.js +28 -0
  69. package/callbacks/postPickupInitLate.lua +2 -0
  70. package/callbacks/postPickupStateChanged.js +31 -0
  71. package/callbacks/postPickupStateChanged.lua +2 -0
  72. package/callbacks/postPitRender.js +20 -0
  73. package/callbacks/postPitRender.lua +2 -0
  74. package/callbacks/postPitUpdate.js +20 -0
  75. package/callbacks/postPitUpdate.lua +2 -0
  76. package/callbacks/postPlayerChangeHealth.js +43 -0
  77. package/callbacks/postPlayerChangeHealth.lua +2 -0
  78. package/callbacks/postPlayerChangeType.js +31 -0
  79. package/callbacks/postPlayerChangeType.lua +2 -0
  80. package/callbacks/postPlayerCollectible.js +74 -0
  81. package/callbacks/postPlayerCollectible.lua +2 -0
  82. package/callbacks/postPlayerFatalDamage.js +74 -0
  83. package/callbacks/postPlayerFatalDamage.lua +2 -0
  84. package/callbacks/postPlayerInitLate.js +28 -0
  85. package/callbacks/postPlayerInitLate.lua +2 -0
  86. package/callbacks/postPlayerReordered.js +109 -0
  87. package/callbacks/postPlayerReordered.lua +2 -0
  88. package/callbacks/postPoopRender.js +20 -0
  89. package/callbacks/postPoopRender.lua +2 -0
  90. package/callbacks/postPoopUpdate.js +20 -0
  91. package/callbacks/postPoopUpdate.lua +2 -0
  92. package/callbacks/postPressurePlateRender.js +20 -0
  93. package/callbacks/postPressurePlateRender.lua +2 -0
  94. package/callbacks/postPressurePlateUpdate.js +20 -0
  95. package/callbacks/postPressurePlateUpdate.lua +2 -0
  96. package/callbacks/postProjectileInitLate.js +28 -0
  97. package/callbacks/postProjectileInitLate.lua +2 -0
  98. package/callbacks/postPurchase.js +39 -0
  99. package/callbacks/postPurchase.lua +2 -0
  100. package/callbacks/postRockRender.js +20 -0
  101. package/callbacks/postRockRender.lua +2 -0
  102. package/callbacks/postRockUpdate.js +20 -0
  103. package/callbacks/postRockUpdate.lua +2 -0
  104. package/callbacks/postRoomClearChanged.js +41 -0
  105. package/callbacks/postRoomClearChanged.lua +2 -0
  106. package/callbacks/postSacrifice.js +38 -0
  107. package/callbacks/postSacrifice.lua +2 -0
  108. package/callbacks/postSlotDestroyed.js +64 -0
  109. package/callbacks/postSlotDestroyed.lua +2 -0
  110. package/callbacks/postSlotInitUpdate.js +49 -0
  111. package/callbacks/postSlotInitUpdate.lua +2 -0
  112. package/callbacks/postSlotRender.js +48 -0
  113. package/callbacks/postSlotRender.lua +2 -0
  114. package/callbacks/postSpikesRender.js +20 -0
  115. package/callbacks/postSpikesRender.lua +2 -0
  116. package/callbacks/postSpikesUpdate.js +20 -0
  117. package/callbacks/postSpikesUpdate.lua +2 -0
  118. package/callbacks/postTNTRender.js +20 -0
  119. package/callbacks/postTNTRender.lua +2 -0
  120. package/callbacks/postTNTUpdate.js +20 -0
  121. package/callbacks/postTNTUpdate.lua +2 -0
  122. package/callbacks/postTearInitLate.js +28 -0
  123. package/callbacks/postTearInitLate.lua +2 -0
  124. package/callbacks/postTearInitVeryLate.js +32 -0
  125. package/callbacks/postTearInitVeryLate.lua +2 -0
  126. package/callbacks/postTransformation.js +37 -0
  127. package/callbacks/postTransformation.lua +2 -0
  128. package/callbacks/postTrinketBreak.js +64 -0
  129. package/callbacks/postTrinketBreak.lua +2 -0
  130. package/callbacks/preBerserkDeath.js +35 -0
  131. package/callbacks/preBerserkDeath.lua +2 -0
  132. package/callbacks/preNewLevel.js +45 -0
  133. package/callbacks/preNewLevel.lua +2 -0
  134. package/callbacks/reorderedCallbacks.js +136 -0
  135. package/callbacks/reorderedCallbacks.lua +2 -0
  136. package/callbacks/subscriptions/postAmbushFinished.js +20 -0
  137. package/callbacks/subscriptions/postAmbushFinished.lua +2 -0
  138. package/callbacks/subscriptions/postAmbushStarted.js +20 -0
  139. package/callbacks/subscriptions/postAmbushStarted.lua +2 -0
  140. package/callbacks/subscriptions/postBombInitLate.js +20 -0
  141. package/callbacks/subscriptions/postBombInitLate.lua +2 -0
  142. package/callbacks/subscriptions/postBoneExploded.js +20 -0
  143. package/callbacks/subscriptions/postBoneExploded.lua +2 -0
  144. package/callbacks/subscriptions/postBoneSwing.js +16 -0
  145. package/callbacks/subscriptions/postBoneSwing.lua +2 -0
  146. package/callbacks/subscriptions/postCollectibleEmpty.js +21 -0
  147. package/callbacks/subscriptions/postCollectibleEmpty.lua +2 -0
  148. package/callbacks/subscriptions/postCollectibleInitFirst.js +21 -0
  149. package/callbacks/subscriptions/postCollectibleInitFirst.lua +2 -0
  150. package/callbacks/subscriptions/postCursedTeleport.js +16 -0
  151. package/callbacks/subscriptions/postCursedTeleport.lua +2 -0
  152. package/callbacks/subscriptions/postCustomDoorEnter.js +21 -0
  153. package/callbacks/subscriptions/postCustomDoorEnter.lua +2 -0
  154. package/callbacks/subscriptions/postCustomRevive.js +21 -0
  155. package/callbacks/subscriptions/postCustomRevive.lua +2 -0
  156. package/callbacks/subscriptions/postDiceRoomActivated.js +21 -0
  157. package/callbacks/subscriptions/postDiceRoomActivated.lua +2 -0
  158. package/callbacks/subscriptions/postDoorRender.js +22 -0
  159. package/callbacks/subscriptions/postDoorRender.lua +2 -0
  160. package/callbacks/subscriptions/postDoorUpdate.js +22 -0
  161. package/callbacks/subscriptions/postDoorUpdate.lua +2 -0
  162. package/callbacks/subscriptions/postEffectInitLate.js +20 -0
  163. package/callbacks/subscriptions/postEffectInitLate.lua +2 -0
  164. package/callbacks/subscriptions/postEffectStateChanged.js +20 -0
  165. package/callbacks/subscriptions/postEffectStateChanged.lua +2 -0
  166. package/callbacks/subscriptions/postEsauJr.js +16 -0
  167. package/callbacks/subscriptions/postEsauJr.lua +2 -0
  168. package/callbacks/subscriptions/postFamiliarInitLate.js +20 -0
  169. package/callbacks/subscriptions/postFamiliarInitLate.lua +2 -0
  170. package/callbacks/subscriptions/postFamiliarStateChanged.js +20 -0
  171. package/callbacks/subscriptions/postFamiliarStateChanged.lua +2 -0
  172. package/callbacks/subscriptions/postFirstEsauJr.js +16 -0
  173. package/callbacks/subscriptions/postFirstEsauJr.lua +2 -0
  174. package/callbacks/subscriptions/postFirstFlip.js +16 -0
  175. package/callbacks/subscriptions/postFirstFlip.lua +2 -0
  176. package/callbacks/subscriptions/postFlip.js +16 -0
  177. package/callbacks/subscriptions/postFlip.lua +2 -0
  178. package/callbacks/subscriptions/postGameStartedReordered.js +16 -0
  179. package/callbacks/subscriptions/postGameStartedReordered.lua +2 -0
  180. package/callbacks/subscriptions/postGreedModeWave.js +16 -0
  181. package/callbacks/subscriptions/postGreedModeWave.lua +2 -0
  182. package/callbacks/subscriptions/postGridEntityBroken.js +28 -0
  183. package/callbacks/subscriptions/postGridEntityBroken.lua +2 -0
  184. package/callbacks/subscriptions/postGridEntityCollision.js +28 -0
  185. package/callbacks/subscriptions/postGridEntityCollision.lua +2 -0
  186. package/callbacks/subscriptions/postGridEntityInit.js +28 -0
  187. package/callbacks/subscriptions/postGridEntityInit.lua +2 -0
  188. package/callbacks/subscriptions/postGridEntityRemove.js +26 -0
  189. package/callbacks/subscriptions/postGridEntityRemove.lua +2 -0
  190. package/callbacks/subscriptions/postGridEntityRender.js +28 -0
  191. package/callbacks/subscriptions/postGridEntityRender.lua +2 -0
  192. package/callbacks/subscriptions/postGridEntityStateChanged.js +28 -0
  193. package/callbacks/subscriptions/postGridEntityStateChanged.lua +2 -0
  194. package/callbacks/subscriptions/postGridEntityUpdate.js +28 -0
  195. package/callbacks/subscriptions/postGridEntityUpdate.lua +2 -0
  196. package/callbacks/subscriptions/postHolyMantleRemoved.js +25 -0
  197. package/callbacks/subscriptions/postHolyMantleRemoved.lua +2 -0
  198. package/callbacks/subscriptions/postItemDischarged.js +21 -0
  199. package/callbacks/subscriptions/postItemDischarged.lua +2 -0
  200. package/callbacks/subscriptions/postItemPickup.js +25 -0
  201. package/callbacks/subscriptions/postItemPickup.lua +2 -0
  202. package/callbacks/subscriptions/postKnifeInitLate.js +20 -0
  203. package/callbacks/subscriptions/postKnifeInitLate.lua +2 -0
  204. package/callbacks/subscriptions/postLaserInitLate.js +20 -0
  205. package/callbacks/subscriptions/postLaserInitLate.lua +2 -0
  206. package/callbacks/subscriptions/postNPCInitLate.js +20 -0
  207. package/callbacks/subscriptions/postNPCInitLate.lua +2 -0
  208. package/callbacks/subscriptions/postNPCStateChanged.js +24 -0
  209. package/callbacks/subscriptions/postNPCStateChanged.lua +2 -0
  210. package/callbacks/subscriptions/postNewLevelReordered.js +16 -0
  211. package/callbacks/subscriptions/postNewLevelReordered.lua +2 -0
  212. package/callbacks/subscriptions/postNewRoomEarly.js +16 -0
  213. package/callbacks/subscriptions/postNewRoomEarly.lua +2 -0
  214. package/callbacks/subscriptions/postNewRoomReordered.js +16 -0
  215. package/callbacks/subscriptions/postNewRoomReordered.lua +2 -0
  216. package/callbacks/subscriptions/postPEffectUpdateReordered.js +25 -0
  217. package/callbacks/subscriptions/postPEffectUpdateReordered.lua +2 -0
  218. package/callbacks/subscriptions/postPickupCollect.js +20 -0
  219. package/callbacks/subscriptions/postPickupCollect.lua +2 -0
  220. package/callbacks/subscriptions/postPickupInitFirst.js +20 -0
  221. package/callbacks/subscriptions/postPickupInitFirst.lua +2 -0
  222. package/callbacks/subscriptions/postPickupInitLate.js +20 -0
  223. package/callbacks/subscriptions/postPickupInitLate.lua +2 -0
  224. package/callbacks/subscriptions/postPickupStateChanged.js +20 -0
  225. package/callbacks/subscriptions/postPickupStateChanged.lua +2 -0
  226. package/callbacks/subscriptions/postPitRender.js +22 -0
  227. package/callbacks/subscriptions/postPitRender.lua +2 -0
  228. package/callbacks/subscriptions/postPitUpdate.js +22 -0
  229. package/callbacks/subscriptions/postPitUpdate.lua +2 -0
  230. package/callbacks/subscriptions/postPlayerChangeHealth.js +25 -0
  231. package/callbacks/subscriptions/postPlayerChangeHealth.lua +2 -0
  232. package/callbacks/subscriptions/postPlayerChangeType.js +20 -0
  233. package/callbacks/subscriptions/postPlayerChangeType.lua +2 -0
  234. package/callbacks/subscriptions/postPlayerCollectibleAdded.js +21 -0
  235. package/callbacks/subscriptions/postPlayerCollectibleAdded.lua +2 -0
  236. package/callbacks/subscriptions/postPlayerCollectibleRemoved.js +21 -0
  237. package/callbacks/subscriptions/postPlayerCollectibleRemoved.lua +2 -0
  238. package/callbacks/subscriptions/postPlayerFatalDamage.js +29 -0
  239. package/callbacks/subscriptions/postPlayerFatalDamage.lua +2 -0
  240. package/callbacks/subscriptions/postPlayerInitLate.js +25 -0
  241. package/callbacks/subscriptions/postPlayerInitLate.lua +2 -0
  242. package/callbacks/subscriptions/postPlayerInitReordered.js +25 -0
  243. package/callbacks/subscriptions/postPlayerInitReordered.lua +2 -0
  244. package/callbacks/subscriptions/postPlayerRenderReordered.js +25 -0
  245. package/callbacks/subscriptions/postPlayerRenderReordered.lua +2 -0
  246. package/callbacks/subscriptions/postPlayerUpdateReordered.js +25 -0
  247. package/callbacks/subscriptions/postPlayerUpdateReordered.lua +2 -0
  248. package/callbacks/subscriptions/postPoopRender.js +22 -0
  249. package/callbacks/subscriptions/postPoopRender.lua +2 -0
  250. package/callbacks/subscriptions/postPoopUpdate.js +22 -0
  251. package/callbacks/subscriptions/postPoopUpdate.lua +2 -0
  252. package/callbacks/subscriptions/postPressurePlateRender.js +22 -0
  253. package/callbacks/subscriptions/postPressurePlateRender.lua +2 -0
  254. package/callbacks/subscriptions/postPressurePlateUpdate.js +22 -0
  255. package/callbacks/subscriptions/postPressurePlateUpdate.lua +2 -0
  256. package/callbacks/subscriptions/postProjectileInitLate.js +21 -0
  257. package/callbacks/subscriptions/postProjectileInitLate.lua +2 -0
  258. package/callbacks/subscriptions/postPurchase.js +16 -0
  259. package/callbacks/subscriptions/postPurchase.lua +2 -0
  260. package/callbacks/subscriptions/postRockRender.js +22 -0
  261. package/callbacks/subscriptions/postRockRender.lua +2 -0
  262. package/callbacks/subscriptions/postRockUpdate.js +22 -0
  263. package/callbacks/subscriptions/postRockUpdate.lua +2 -0
  264. package/callbacks/subscriptions/postRoomClearChanged.js +20 -0
  265. package/callbacks/subscriptions/postRoomClearChanged.lua +2 -0
  266. package/callbacks/subscriptions/postSacrifice.js +25 -0
  267. package/callbacks/subscriptions/postSacrifice.lua +2 -0
  268. package/callbacks/subscriptions/postSlotAnimationChanged.js +20 -0
  269. package/callbacks/subscriptions/postSlotAnimationChanged.lua +2 -0
  270. package/callbacks/subscriptions/postSlotDestroyed.js +26 -0
  271. package/callbacks/subscriptions/postSlotDestroyed.lua +2 -0
  272. package/callbacks/subscriptions/postSlotInit.js +20 -0
  273. package/callbacks/subscriptions/postSlotInit.lua +2 -0
  274. package/callbacks/subscriptions/postSlotRender.js +20 -0
  275. package/callbacks/subscriptions/postSlotRender.lua +2 -0
  276. package/callbacks/subscriptions/postSlotUpdate.js +20 -0
  277. package/callbacks/subscriptions/postSlotUpdate.lua +2 -0
  278. package/callbacks/subscriptions/postSpikesRender.js +22 -0
  279. package/callbacks/subscriptions/postSpikesRender.lua +2 -0
  280. package/callbacks/subscriptions/postSpikesUpdate.js +22 -0
  281. package/callbacks/subscriptions/postSpikesUpdate.lua +2 -0
  282. package/callbacks/subscriptions/postTNTRender.js +22 -0
  283. package/callbacks/subscriptions/postTNTRender.lua +2 -0
  284. package/callbacks/subscriptions/postTNTUpdate.js +22 -0
  285. package/callbacks/subscriptions/postTNTUpdate.lua +2 -0
  286. package/callbacks/subscriptions/postTearInitLate.js +20 -0
  287. package/callbacks/subscriptions/postTearInitLate.lua +2 -0
  288. package/callbacks/subscriptions/postTearInitVeryLate.js +20 -0
  289. package/callbacks/subscriptions/postTearInitVeryLate.lua +2 -0
  290. package/callbacks/subscriptions/postTransformation.js +20 -0
  291. package/callbacks/subscriptions/postTransformation.lua +2 -0
  292. package/callbacks/subscriptions/postTrinketBreak.js +21 -0
  293. package/callbacks/subscriptions/postTrinketBreak.lua +2 -0
  294. package/callbacks/subscriptions/preBerserkDeath.js +26 -0
  295. package/callbacks/subscriptions/preBerserkDeath.lua +2 -0
  296. package/callbacks/subscriptions/preCustomRevive.js +29 -0
  297. package/callbacks/subscriptions/preCustomRevive.lua +2 -0
  298. package/callbacks/subscriptions/preItemPickup.js +25 -0
  299. package/callbacks/subscriptions/preItemPickup.lua +2 -0
  300. package/callbacks/subscriptions/preNewLevel.js +16 -0
  301. package/callbacks/subscriptions/preNewLevel.lua +2 -0
  302. package/classes/DefaultMap.js +145 -0
  303. package/classes/DefaultMap.lua +2 -0
  304. package/classes/ModUpgraded.js +57 -0
  305. package/classes/ModUpgraded.lua +2 -0
  306. package/constants.js +143 -0
  307. package/constants.lua +2 -0
  308. package/constantsFirstLast.js +156 -0
  309. package/constantsFirstLast.lua +2 -0
  310. package/enums/AmbushType.js +6 -0
  311. package/enums/AmbushType.lua +2 -0
  312. package/enums/CornerType.js +8 -0
  313. package/enums/CornerType.lua +2 -0
  314. package/enums/DecorationVariant.js +11 -0
  315. package/enums/DecorationVariant.lua +2 -0
  316. package/enums/HealthType.js +18 -0
  317. package/enums/HealthType.lua +2 -0
  318. package/enums/ModCallbackCustom.js +1213 -0
  319. package/enums/ModCallbackCustom.lua +2 -0
  320. package/enums/PocketItemType.js +10 -0
  321. package/enums/PocketItemType.lua +2 -0
  322. package/enums/RockAltType.js +9 -0
  323. package/enums/RockAltType.lua +2 -0
  324. package/enums/SerializationType.js +7 -0
  325. package/enums/SerializationType.lua +2 -0
  326. package/enums/SlotDestructionType.js +6 -0
  327. package/enums/SlotDestructionType.lua +2 -0
  328. package/enums/private/CopyableIsaacAPIClassType.js +9 -0
  329. package/enums/private/CopyableIsaacAPIClassType.lua +2 -0
  330. package/enums/private/SaveDataKey.js +8 -0
  331. package/enums/private/SaveDataKey.lua +2 -0
  332. package/enums/private/SerializationBrand.js +41 -0
  333. package/enums/private/SerializationBrand.lua +2 -0
  334. package/features/characterHealthConversion.js +86 -0
  335. package/features/characterHealthConversion.lua +2 -0
  336. package/features/characterStats.js +52 -0
  337. package/features/characterStats.lua +2 -0
  338. package/features/collectibleItemPoolType.js +45 -0
  339. package/features/collectibleItemPoolType.lua +2 -0
  340. package/features/customGridEntity.js +148 -0
  341. package/features/customGridEntity.lua +2 -0
  342. package/features/customStage/backdrop.js +191 -0
  343. package/features/customStage/backdrop.lua +9 -7
  344. package/features/customStage/customStageConstants.js +2 -0
  345. package/features/customStage/customStageConstants.lua +2 -0
  346. package/features/customStage/exports.js +147 -0
  347. package/features/customStage/exports.lua +8 -1
  348. package/features/customStage/gridEntities.js +138 -0
  349. package/features/customStage/gridEntities.lua +2 -0
  350. package/features/customStage/init.js +104 -0
  351. package/features/customStage/init.lua +4 -9
  352. package/features/customStage/metadata.json +1 -0
  353. package/features/customStage/metadata.lua +2 -0
  354. package/features/customStage/shadows.d.ts +0 -1
  355. package/features/customStage/shadows.js +63 -0
  356. package/features/customStage/shadows.lua +31 -19
  357. package/features/customStage/streakText.d.ts +1 -1
  358. package/features/customStage/streakText.js +35 -0
  359. package/features/customStage/streakText.lua +14 -3
  360. package/features/customStage/util.js +36 -0
  361. package/features/customStage/util.lua +2 -0
  362. package/features/customStage/v.js +18 -0
  363. package/features/customStage/v.lua +2 -0
  364. package/features/customStage/versusScreen.js +184 -0
  365. package/features/customStage/versusScreen.lua +8 -1
  366. package/features/debugDisplay/debugDisplay.js +183 -0
  367. package/features/debugDisplay/debugDisplay.lua +2 -0
  368. package/features/debugDisplay/exports.js +441 -0
  369. package/features/debugDisplay/exports.lua +2 -0
  370. package/features/debugDisplay/v.d.ts +18 -0
  371. package/features/debugDisplay/v.js +61 -0
  372. package/features/debugDisplay/v.lua +2 -0
  373. package/features/deployJSONRoom.js +532 -0
  374. package/features/deployJSONRoom.lua +2 -0
  375. package/features/disableAllSound.js +63 -0
  376. package/features/disableAllSound.lua +2 -0
  377. package/features/disableInputs.js +130 -0
  378. package/features/disableInputs.lua +2 -0
  379. package/features/extraConsoleCommands/commandsDisplay.js +236 -0
  380. package/features/extraConsoleCommands/commandsDisplay.lua +2 -0
  381. package/features/extraConsoleCommands/commandsSubroutines.js +109 -0
  382. package/features/extraConsoleCommands/commandsSubroutines.lua +2 -0
  383. package/features/extraConsoleCommands/exports.js +53 -0
  384. package/features/extraConsoleCommands/exports.lua +2 -0
  385. package/features/extraConsoleCommands/init.js +239 -0
  386. package/features/extraConsoleCommands/init.lua +2 -0
  387. package/features/extraConsoleCommands/listCommands.js +1081 -0
  388. package/features/extraConsoleCommands/listCommands.lua +2 -0
  389. package/features/extraConsoleCommands/v.js +25 -0
  390. package/features/extraConsoleCommands/v.lua +2 -0
  391. package/features/fadeInRemover.js +51 -0
  392. package/features/fadeInRemover.lua +2 -0
  393. package/features/fastReset.js +61 -0
  394. package/features/fastReset.lua +2 -0
  395. package/features/forgottenSwitch.js +33 -0
  396. package/features/forgottenSwitch.lua +2 -0
  397. package/features/pause.js +68 -0
  398. package/features/pause.lua +2 -0
  399. package/features/persistentEntities.js +120 -0
  400. package/features/persistentEntities.lua +2 -0
  401. package/features/playerInventory.js +89 -0
  402. package/features/playerInventory.lua +2 -0
  403. package/features/ponyDetection.js +63 -0
  404. package/features/ponyDetection.lua +2 -0
  405. package/features/preventCollectibleRotation.js +81 -0
  406. package/features/preventCollectibleRotation.lua +2 -0
  407. package/features/registerHotkey.js +91 -0
  408. package/features/registerHotkey.lua +2 -0
  409. package/features/roomClearFrame.js +42 -0
  410. package/features/roomClearFrame.lua +2 -0
  411. package/features/runInNFrames.js +189 -0
  412. package/features/runInNFrames.lua +2 -0
  413. package/features/runNextRoom.js +34 -0
  414. package/features/runNextRoom.lua +2 -0
  415. package/features/saveDataManager/exports.js +183 -0
  416. package/features/saveDataManager/exports.lua +2 -0
  417. package/features/saveDataManager/load.js +69 -0
  418. package/features/saveDataManager/load.lua +2 -0
  419. package/features/saveDataManager/main.js +131 -0
  420. package/features/saveDataManager/main.lua +2 -0
  421. package/features/saveDataManager/maps.js +9 -0
  422. package/features/saveDataManager/maps.lua +2 -0
  423. package/features/saveDataManager/merge.js +139 -0
  424. package/features/saveDataManager/merge.lua +2 -0
  425. package/features/saveDataManager/save.js +43 -0
  426. package/features/saveDataManager/save.lua +2 -0
  427. package/features/saveDataManager/saveDataManagerConstants.js +4 -0
  428. package/features/saveDataManager/saveDataManagerConstants.lua +2 -0
  429. package/features/saveDataManager/serializationBrand.js +12 -0
  430. package/features/saveDataManager/serializationBrand.lua +2 -0
  431. package/features/sirenHelpers.js +90 -0
  432. package/features/sirenHelpers.lua +2 -0
  433. package/features/stageHistory.js +43 -0
  434. package/features/stageHistory.lua +2 -0
  435. package/features/taintedLazarusPlayers.js +92 -0
  436. package/features/taintedLazarusPlayers.lua +2 -0
  437. package/featuresInitialized.js +16 -0
  438. package/featuresInitialized.lua +2 -0
  439. package/functions/ambush.js +35 -0
  440. package/functions/ambush.lua +2 -0
  441. package/functions/array.js +423 -0
  442. package/functions/array.lua +2 -0
  443. package/functions/benchmark.js +28 -0
  444. package/functions/benchmark.lua +2 -0
  445. package/functions/bitwise.js +74 -0
  446. package/functions/bitwise.lua +2 -0
  447. package/functions/bombs.js +11 -0
  448. package/functions/bombs.lua +2 -0
  449. package/functions/boss.js +137 -0
  450. package/functions/boss.lua +2 -0
  451. package/functions/cacheFlag.js +11 -0
  452. package/functions/cacheFlag.lua +2 -0
  453. package/functions/cards.js +217 -0
  454. package/functions/cards.lua +2 -0
  455. package/functions/challenges.js +9 -0
  456. package/functions/challenges.lua +2 -0
  457. package/functions/character.js +102 -0
  458. package/functions/character.lua +2 -0
  459. package/functions/charge.js +202 -0
  460. package/functions/charge.lua +2 -0
  461. package/functions/chargeBar.js +44 -0
  462. package/functions/chargeBar.lua +2 -0
  463. package/functions/collectibleCacheFlag.js +68 -0
  464. package/functions/collectibleCacheFlag.lua +2 -0
  465. package/functions/collectibleSet.js +108 -0
  466. package/functions/collectibleSet.lua +2 -0
  467. package/functions/collectibleTag.js +65 -0
  468. package/functions/collectibleTag.lua +2 -0
  469. package/functions/collectibles.js +469 -0
  470. package/functions/collectibles.lua +2 -0
  471. package/functions/color.d.ts +1 -1
  472. package/functions/color.js +60 -0
  473. package/functions/color.lua +2 -0
  474. package/functions/debug.js +60 -0
  475. package/functions/debug.lua +2 -0
  476. package/functions/deepCopy.js +361 -0
  477. package/functions/deepCopy.lua +2 -0
  478. package/functions/deepCopyTests.js +308 -0
  479. package/functions/deepCopyTests.lua +2 -0
  480. package/functions/direction.js +41 -0
  481. package/functions/direction.lua +2 -0
  482. package/functions/doors.js +326 -0
  483. package/functions/doors.lua +2 -0
  484. package/functions/easing.js +142 -0
  485. package/functions/easing.lua +2 -0
  486. package/functions/eden.js +32 -0
  487. package/functions/eden.lua +2 -0
  488. package/functions/effects.js +11 -0
  489. package/functions/effects.lua +2 -0
  490. package/functions/entity.js +324 -0
  491. package/functions/entity.lua +2 -0
  492. package/functions/entitySpecific.js +481 -0
  493. package/functions/entitySpecific.lua +2 -0
  494. package/functions/entityTypes.js +6 -0
  495. package/functions/entityTypes.lua +2 -0
  496. package/functions/enums.js +151 -0
  497. package/functions/enums.lua +2 -0
  498. package/functions/familiars.js +85 -0
  499. package/functions/familiars.lua +2 -0
  500. package/functions/flag.js +137 -0
  501. package/functions/flag.lua +2 -0
  502. package/functions/flying.js +88 -0
  503. package/functions/flying.lua +2 -0
  504. package/functions/globals.js +230 -0
  505. package/functions/globals.lua +2 -0
  506. package/functions/gridEntity.js +488 -0
  507. package/functions/gridEntity.lua +2 -0
  508. package/functions/gridEntitySpecific.js +109 -0
  509. package/functions/gridEntitySpecific.lua +2 -0
  510. package/functions/input.js +95 -0
  511. package/functions/input.lua +2 -0
  512. package/functions/isaacAPIClass.js +48 -0
  513. package/functions/isaacAPIClass.lua +2 -0
  514. package/functions/jsonHelpers.js +40 -0
  515. package/functions/jsonHelpers.lua +2 -0
  516. package/functions/jsonRoom.js +132 -0
  517. package/functions/jsonRoom.lua +2 -0
  518. package/functions/kColor.d.ts +1 -1
  519. package/functions/kColor.js +63 -0
  520. package/functions/kColor.lua +2 -0
  521. package/functions/language.js +13 -0
  522. package/functions/language.lua +2 -0
  523. package/functions/level.js +20 -0
  524. package/functions/level.lua +2 -0
  525. package/functions/log.js +567 -0
  526. package/functions/log.lua +2 -0
  527. package/functions/map.js +45 -0
  528. package/functions/map.lua +2 -0
  529. package/functions/math.js +103 -0
  530. package/functions/math.lua +2 -0
  531. package/functions/mergeTests.js +213 -0
  532. package/functions/mergeTests.lua +2 -0
  533. package/functions/minimap.js +80 -0
  534. package/functions/minimap.lua +2 -0
  535. package/functions/nextStage.js +290 -0
  536. package/functions/nextStage.lua +2 -0
  537. package/functions/npc.js +101 -0
  538. package/functions/npc.lua +2 -0
  539. package/functions/pickupVariants.js +47 -0
  540. package/functions/pickupVariants.lua +2 -0
  541. package/functions/pickups.js +219 -0
  542. package/functions/pickups.lua +2 -0
  543. package/functions/pills.js +160 -0
  544. package/functions/pills.lua +2 -0
  545. package/functions/player.js +808 -0
  546. package/functions/player.lua +2 -0
  547. package/functions/playerCenter.js +50 -0
  548. package/functions/playerCenter.lua +2 -0
  549. package/functions/playerDataStructures.js +114 -0
  550. package/functions/playerDataStructures.lua +2 -0
  551. package/functions/playerHealth.js +321 -0
  552. package/functions/playerHealth.lua +2 -0
  553. package/functions/playerIndex.js +160 -0
  554. package/functions/playerIndex.lua +2 -0
  555. package/functions/pocketItems.js +124 -0
  556. package/functions/pocketItems.lua +2 -0
  557. package/functions/positionVelocity.js +136 -0
  558. package/functions/positionVelocity.lua +2 -0
  559. package/functions/random.js +73 -0
  560. package/functions/random.lua +2 -0
  561. package/functions/revive.js +140 -0
  562. package/functions/revive.lua +2 -0
  563. package/functions/rng.d.ts +1 -1
  564. package/functions/rng.js +117 -0
  565. package/functions/rng.lua +2 -0
  566. package/functions/roomData.js +174 -0
  567. package/functions/roomData.lua +2 -0
  568. package/functions/roomGrid.js +81 -0
  569. package/functions/roomGrid.lua +2 -0
  570. package/functions/roomShape.js +99 -0
  571. package/functions/roomShape.lua +2 -0
  572. package/functions/rooms.js +487 -0
  573. package/functions/rooms.lua +2 -0
  574. package/functions/run.js +53 -0
  575. package/functions/run.lua +2 -0
  576. package/functions/saveFile.js +104 -0
  577. package/functions/saveFile.lua +2 -0
  578. package/functions/seeds.js +18 -0
  579. package/functions/seeds.lua +2 -0
  580. package/functions/serialization.js +52 -0
  581. package/functions/serialization.lua +2 -0
  582. package/functions/set.js +99 -0
  583. package/functions/set.lua +2 -0
  584. package/functions/sound.js +9 -0
  585. package/functions/sound.lua +2 -0
  586. package/functions/spawnCollectible.js +66 -0
  587. package/functions/spawnCollectible.lua +2 -0
  588. package/functions/sprite.js +80 -0
  589. package/functions/sprite.lua +2 -0
  590. package/functions/stage.js +172 -0
  591. package/functions/stage.lua +2 -0
  592. package/functions/string.js +37 -0
  593. package/functions/string.lua +2 -0
  594. package/functions/table.js +143 -0
  595. package/functions/table.lua +2 -0
  596. package/functions/tears.js +31 -0
  597. package/functions/tears.lua +2 -0
  598. package/functions/transformations.js +101 -0
  599. package/functions/transformations.lua +2 -0
  600. package/functions/trinketCacheFlag.js +46 -0
  601. package/functions/trinketCacheFlag.lua +2 -0
  602. package/functions/trinketGive.js +121 -0
  603. package/functions/trinketGive.lua +2 -0
  604. package/functions/trinkets.js +169 -0
  605. package/functions/trinkets.lua +2 -0
  606. package/functions/tstlClass.js +125 -0
  607. package/functions/tstlClass.lua +2 -0
  608. package/functions/types.js +27 -0
  609. package/functions/types.lua +2 -0
  610. package/functions/ui.js +124 -0
  611. package/functions/ui.lua +2 -0
  612. package/functions/utils.js +172 -0
  613. package/functions/utils.lua +2 -0
  614. package/functions/vector.js +68 -0
  615. package/functions/vector.lua +2 -0
  616. package/index.js +140 -0
  617. package/index.lua +2 -0
  618. package/initCustomCallbacks.js +133 -0
  619. package/initCustomCallbacks.lua +2 -0
  620. package/initFeatures.js +51 -0
  621. package/initFeatures.lua +2 -0
  622. package/interfaces/AddCallbackParameterCustom.js +2 -0
  623. package/interfaces/AddCallbackParameterCustom.lua +2 -0
  624. package/interfaces/ChargeBarSprites.js +2 -0
  625. package/interfaces/ChargeBarSprites.lua +2 -0
  626. package/interfaces/Corner.js +2 -0
  627. package/interfaces/Corner.lua +2 -0
  628. package/interfaces/CustomGridEntityData.js +2 -0
  629. package/interfaces/CustomGridEntityData.lua +2 -0
  630. package/interfaces/CustomStage.js +2 -0
  631. package/interfaces/CustomStage.lua +2 -0
  632. package/interfaces/CustomStageLua.d.ts +64 -24
  633. package/interfaces/CustomStageLua.js +13 -0
  634. package/interfaces/CustomStageLua.lua +2 -0
  635. package/interfaces/JSONRoomsFile.js +2 -0
  636. package/interfaces/JSONRoomsFile.lua +2 -0
  637. package/interfaces/PlayerHealth.js +2 -0
  638. package/interfaces/PlayerHealth.lua +2 -0
  639. package/interfaces/PocketItemDescription.js +2 -0
  640. package/interfaces/PocketItemDescription.lua +2 -0
  641. package/interfaces/SaveData.js +2 -0
  642. package/interfaces/SaveData.lua +2 -0
  643. package/interfaces/TrinketSituation.js +2 -0
  644. package/interfaces/TrinketSituation.lua +2 -0
  645. package/interfaces/private/TSTLClassMetatable.js +2 -0
  646. package/interfaces/private/TSTLClassMetatable.lua +2 -0
  647. package/maps/PHDPillConversions.js +20 -0
  648. package/maps/PHDPillConversions.lua +2 -0
  649. package/maps/cardMap.js +208 -0
  650. package/maps/cardMap.lua +2 -0
  651. package/maps/characterMap.js +86 -0
  652. package/maps/characterMap.lua +2 -0
  653. package/maps/collectibleDescriptionMap.js +728 -0
  654. package/maps/collectibleDescriptionMap.lua +2 -0
  655. package/maps/collectibleNameMap.js +727 -0
  656. package/maps/collectibleNameMap.lua +2 -0
  657. package/maps/defaultPlayerStatMap.js +14 -0
  658. package/maps/defaultPlayerStatMap.lua +2 -0
  659. package/maps/falsePHDPillConversions.js +34 -0
  660. package/maps/falsePHDPillConversions.lua +2 -0
  661. package/maps/gridEntityTypeToBrokenStateMap.js +29 -0
  662. package/maps/gridEntityTypeToBrokenStateMap.lua +2 -0
  663. package/maps/gridEntityXMLMap.js +128 -0
  664. package/maps/gridEntityXMLMap.lua +2 -0
  665. package/maps/pillEffectMap.js +88 -0
  666. package/maps/pillEffectMap.lua +2 -0
  667. package/maps/roomShapeToTopLeftWallGridIndexMap.js +14 -0
  668. package/maps/roomShapeToTopLeftWallGridIndexMap.lua +2 -0
  669. package/maps/roomTypeMap.js +39 -0
  670. package/maps/roomTypeMap.lua +2 -0
  671. package/maps/trinketDescriptionMap.js +196 -0
  672. package/maps/trinketDescriptionMap.lua +2 -0
  673. package/maps/trinketNameMap.js +195 -0
  674. package/maps/trinketNameMap.lua +2 -0
  675. package/objects/LRoomShapeToRectangles.js +33 -0
  676. package/objects/LRoomShapeToRectangles.lua +2 -0
  677. package/objects/backdropTypeToRockAltType.js +66 -0
  678. package/objects/backdropTypeToRockAltType.lua +2 -0
  679. package/objects/bossNamePNGFileNames.js +112 -0
  680. package/objects/bossNamePNGFileNames.lua +2 -0
  681. package/objects/bossPortraitPNGFileNames.js +115 -0
  682. package/objects/bossPortraitPNGFileNames.lua +2 -0
  683. package/objects/callbackRegisterFunctions.js +170 -0
  684. package/objects/callbackRegisterFunctions.lua +2 -0
  685. package/objects/cardDescriptions.js +104 -0
  686. package/objects/cardDescriptions.lua +2 -0
  687. package/objects/cardNames.js +104 -0
  688. package/objects/cardNames.lua +2 -0
  689. package/objects/cardTypes.js +103 -0
  690. package/objects/cardTypes.lua +2 -0
  691. package/objects/challengeNames.js +51 -0
  692. package/objects/challengeNames.lua +2 -0
  693. package/objects/characterNames.js +46 -0
  694. package/objects/characterNames.lua +2 -0
  695. package/objects/coinSubTypeToValue.js +13 -0
  696. package/objects/coinSubTypeToValue.lua +2 -0
  697. package/objects/colors.d.ts +1 -0
  698. package/objects/colors.js +24 -0
  699. package/objects/colors.lua +2 -0
  700. package/objects/directionNames.js +9 -0
  701. package/objects/directionNames.lua +2 -0
  702. package/objects/directionToDegrees.js +9 -0
  703. package/objects/directionToDegrees.lua +2 -0
  704. package/objects/directionToVector.js +10 -0
  705. package/objects/directionToVector.lua +2 -0
  706. package/objects/doorSlotFlagToDoorSlot.js +13 -0
  707. package/objects/doorSlotFlagToDoorSlot.lua +2 -0
  708. package/objects/doorSlotToDirection.js +13 -0
  709. package/objects/doorSlotToDirection.lua +2 -0
  710. package/objects/doorSlotToDoorSlotFlag.js +13 -0
  711. package/objects/doorSlotToDoorSlotFlag.lua +2 -0
  712. package/objects/isaacAPIClassTypeToBrand.js +9 -0
  713. package/objects/isaacAPIClassTypeToBrand.lua +2 -0
  714. package/objects/isaacAPIClassTypeToCopyFunction.js +12 -0
  715. package/objects/isaacAPIClassTypeToCopyFunction.lua +2 -0
  716. package/objects/languageNames.js +11 -0
  717. package/objects/languageNames.lua +2 -0
  718. package/objects/oppositeDoorSlots.js +13 -0
  719. package/objects/oppositeDoorSlots.lua +2 -0
  720. package/objects/pillEffectClasses.js +56 -0
  721. package/objects/pillEffectClasses.lua +2 -0
  722. package/objects/pillEffectNames.js +55 -0
  723. package/objects/pillEffectNames.lua +2 -0
  724. package/objects/pillEffectTypes.js +55 -0
  725. package/objects/pillEffectTypes.lua +2 -0
  726. package/objects/playerNamePNGFileNames.js +55 -0
  727. package/objects/playerNamePNGFileNames.lua +2 -0
  728. package/objects/playerPortraitPNGFileNames.js +52 -0
  729. package/objects/playerPortraitPNGFileNames.lua +2 -0
  730. package/objects/roomShapeBounds.js +46 -0
  731. package/objects/roomShapeBounds.lua +2 -0
  732. package/objects/roomShapeCorners.js +268 -0
  733. package/objects/roomShapeCorners.lua +2 -0
  734. package/objects/roomShapeLayoutSizes.js +39 -0
  735. package/objects/roomShapeLayoutSizes.lua +2 -0
  736. package/objects/roomShapeToBottomRightPosition.js +22 -0
  737. package/objects/roomShapeToBottomRightPosition.lua +2 -0
  738. package/objects/roomShapeToDoorSlotCoordinates.js +109 -0
  739. package/objects/roomShapeToDoorSlotCoordinates.lua +2 -0
  740. package/objects/roomShapeToDoorSlots.js +69 -0
  741. package/objects/roomShapeToDoorSlots.lua +2 -0
  742. package/objects/roomShapeToDoorSlotsToGridIndexDelta.js +113 -0
  743. package/objects/roomShapeToDoorSlotsToGridIndexDelta.lua +2 -0
  744. package/objects/roomShapeToGridWidth.js +18 -0
  745. package/objects/roomShapeToGridWidth.lua +2 -0
  746. package/objects/roomShapeToTopLeftPosition.js +23 -0
  747. package/objects/roomShapeToTopLeftPosition.lua +2 -0
  748. package/objects/roomShapeVolumes.js +30 -0
  749. package/objects/roomShapeVolumes.lua +2 -0
  750. package/objects/roomTypeGotoPrefixes.js +33 -0
  751. package/objects/roomTypeGotoPrefixes.lua +2 -0
  752. package/objects/roomTypeNames.js +34 -0
  753. package/objects/roomTypeNames.lua +2 -0
  754. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.js +12 -0
  755. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.lua +2 -0
  756. package/objects/stageTypeSuffixes.js +10 -0
  757. package/objects/stageTypeSuffixes.lua +2 -0
  758. package/objects/stageTypeToLetter.js +12 -0
  759. package/objects/stageTypeToLetter.lua +2 -0
  760. package/objects/transformationNames.js +18 -0
  761. package/objects/transformationNames.lua +2 -0
  762. package/objects/versusScreenBackgroundColors.js +36 -0
  763. package/objects/versusScreenBackgroundColors.lua +2 -0
  764. package/objects/versusScreenDirtSpotColors.js +36 -0
  765. package/objects/versusScreenDirtSpotColors.lua +2 -0
  766. package/package.json +1 -1
  767. package/patchErrorFunctions.js +67 -0
  768. package/patchErrorFunctions.lua +2 -0
  769. package/sets/LRoomShapesSet.js +8 -0
  770. package/sets/LRoomShapesSet.lua +2 -0
  771. package/sets/bossSets.js +374 -0
  772. package/sets/bossSets.lua +2 -0
  773. package/sets/charactersThatStartWithAnActiveItemSet.js +15 -0
  774. package/sets/charactersThatStartWithAnActiveItemSet.lua +2 -0
  775. package/sets/charactersWithBlackHeartFromEternalHeartSet.js +6 -0
  776. package/sets/charactersWithBlackHeartFromEternalHeartSet.lua +2 -0
  777. package/sets/charactersWithFreeDevilDealsSet.js +3 -0
  778. package/sets/charactersWithFreeDevilDealsSet.lua +2 -0
  779. package/sets/charactersWithNoRedHeartsSet.js +16 -0
  780. package/sets/charactersWithNoRedHeartsSet.lua +2 -0
  781. package/sets/charactersWithNoSoulHeartsSet.js +13 -0
  782. package/sets/charactersWithNoSoulHeartsSet.lua +2 -0
  783. package/sets/chestPickupVariantsSet.js +16 -0
  784. package/sets/chestPickupVariantsSet.lua +2 -0
  785. package/sets/consoleCommandsSet.js +61 -0
  786. package/sets/consoleCommandsSet.lua +2 -0
  787. package/sets/familiarsThatShootPlayerTearsSet.js +12 -0
  788. package/sets/familiarsThatShootPlayerTearsSet.lua +2 -0
  789. package/sets/lostStyleCharactersSet.js +13 -0
  790. package/sets/lostStyleCharactersSet.lua +2 -0
  791. package/sets/mineShaftRoomSubTypesSet.js +9 -0
  792. package/sets/mineShaftRoomSubTypesSet.lua +2 -0
  793. package/sets/narrowRoomShapesSet.js +8 -0
  794. package/sets/narrowRoomShapesSet.lua +2 -0
  795. package/sets/redHeartSubTypesSet.js +7 -0
  796. package/sets/redHeartSubTypesSet.lua +2 -0
  797. package/sets/sinEntityTypesSet.js +11 -0
  798. package/sets/sinEntityTypesSet.lua +2 -0
  799. package/sets/singleUseActiveCollectibleTypesSet.js +12 -0
  800. package/sets/singleUseActiveCollectibleTypesSet.lua +2 -0
  801. package/sets/storyBossesSet.js +17 -0
  802. package/sets/storyBossesSet.lua +2 -0
  803. package/shaderCrashFix.js +17 -0
  804. package/shaderCrashFix.lua +2 -0
  805. package/types/AnyEntity.js +2 -0
  806. package/types/AnyEntity.lua +2 -0
  807. package/types/CollectibleIndex.js +2 -0
  808. package/types/CollectibleIndex.lua +2 -0
  809. package/types/PickingUpItem.js +38 -0
  810. package/types/PickingUpItem.lua +2 -0
  811. package/types/PlayerIndex.js +2 -0
  812. package/types/PlayerIndex.lua +2 -0
  813. package/types/private/IsaacAPIClass.js +2 -0
  814. package/types/private/IsaacAPIClass.lua +2 -0
  815. package/types/private/SerializedIsaacAPIClass.js +2 -0
  816. package/types/private/SerializedIsaacAPIClass.lua +2 -0
  817. package/types/private/TSTLClass.js +2 -0
  818. package/types/private/TSTLClass.lua +2 -0
  819. package/upgradeMod.js +47 -0
  820. package/upgradeMod.lua +2 -0
@@ -0,0 +1,172 @@
1
+ import { LevelStage, StageType } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { ROOM_TYPE_GOTO_PREFIXES } from "../objects/roomTypeGotoPrefixes";
4
+ import { STAGE_TYPE_SUFFIXES } from "../objects/stageTypeSuffixes";
5
+ import { STAGE_TYPE_TO_LETTER } from "../objects/stageTypeToLetter";
6
+ /**
7
+ * Helper function that calculates what the stage type should be for the provided stage. This
8
+ * emulates what the game's internal code does.
9
+ */
10
+ export function calculateStageType(stage) {
11
+ // The following is the game's internal code to determine the floor type. (This came directly from
12
+ // Spider.)
13
+ /*
14
+ u32 Seed = g_Game->GetSeeds().GetStageSeed(NextStage);
15
+ if (!g_Game->IsGreedMode()) {
16
+ StageType = ((Seed % 2) == 0 && (
17
+ ((NextStage == STAGE1_1 || NextStage == STAGE1_2) && gd.Unlocked(ACHIEVEMENT_CELLAR)) ||
18
+ ((NextStage == STAGE2_1 || NextStage == STAGE2_2) && gd.Unlocked(ACHIEVEMENT_CATACOMBS)) ||
19
+ ((NextStage == STAGE3_1 || NextStage == STAGE3_2) && gd.Unlocked(ACHIEVEMENT_NECROPOLIS)) ||
20
+ ((NextStage == STAGE4_1 || NextStage == STAGE4_2)))
21
+ ) ? STAGE_TYPE_WOTL : STAGE_TYPE_ORIGINAL;
22
+ if (Seed % 3 == 0 && NextStage < STAGE5)
23
+ StageType = STAGE_TYPE_AFTERBIRTH;
24
+ */
25
+ const seeds = game.GetSeeds();
26
+ const stageSeed = seeds.GetStageSeed(stage);
27
+ if (stageSeed % 2 === 0) {
28
+ return StageType.WRATH_OF_THE_LAMB;
29
+ }
30
+ if (stageSeed % 3 === 0) {
31
+ return StageType.AFTERBIRTH;
32
+ }
33
+ return StageType.ORIGINAL;
34
+ }
35
+ /**
36
+ * Helper function that calculates what the Repentance stage type should be for the provided stage.
37
+ * This emulates what the game's internal code does.
38
+ */
39
+ export function calculateStageTypeRepentance(stage) {
40
+ // There is no alternate floor for Corpse.
41
+ if (stage === LevelStage.WOMB_1 || stage === LevelStage.WOMB_2) {
42
+ return StageType.REPENTANCE;
43
+ }
44
+ // This algorithm is from Kilburn. We add one because the alt path is offset by 1 relative to the
45
+ // normal path.
46
+ const seeds = game.GetSeeds();
47
+ const adjustedStage = (stage + 1);
48
+ const stageSeed = seeds.GetStageSeed(adjustedStage);
49
+ // Kilburn does not know why he divided the stage seed by 2 first.
50
+ const halfStageSeed = Math.floor(stageSeed / 2);
51
+ if (halfStageSeed % 2 === 0) {
52
+ return StageType.REPENTANCE_B;
53
+ }
54
+ return StageType.REPENTANCE;
55
+ }
56
+ /**
57
+ * Helper function to account for Repentance floors being offset by 1. For example, Downpour 2 is
58
+ * the third level of the run, but the game considers it to have a stage of 2. This function will
59
+ * consider Downpour 2 to have a stage of 3.
60
+ */
61
+ export function getEffectiveStage() {
62
+ const level = game.GetLevel();
63
+ const stage = level.GetStage();
64
+ if (onRepentanceStage()) {
65
+ return stage + 1; // eslint-disable-line isaacscript/strict-enums
66
+ }
67
+ return stage;
68
+ }
69
+ /**
70
+ * Helper function to get the corresponding "goto" console command that would correspond to the
71
+ * provided room type and room variant.
72
+ */
73
+ export function getGotoCommand(roomType, roomVariant) {
74
+ const prefix = ROOM_TYPE_GOTO_PREFIXES[roomType];
75
+ return `goto ${prefix}.${roomVariant}`;
76
+ }
77
+ /** Alias for the `Level.GetStage` method. */
78
+ export function getStage() {
79
+ const level = game.GetLevel();
80
+ return level.GetStage();
81
+ }
82
+ /** Alias for the `Level.GetStageType` method. */
83
+ export function getStageType() {
84
+ const level = game.GetLevel();
85
+ return level.GetStageType();
86
+ }
87
+ /** Helper function to directly warp to a specific stage using the "stage" console command. */
88
+ export function goToStage(stage, stageType) {
89
+ const stageTypeLetterSuffix = stageTypeToLetter(stageType);
90
+ const command = `stage ${stage}${stageTypeLetterSuffix}`;
91
+ Isaac.ExecuteCommand(command);
92
+ }
93
+ export function isRepentanceStage(stageType) {
94
+ return (stageType === StageType.REPENTANCE || stageType === StageType.REPENTANCE_B);
95
+ }
96
+ export function onCathedral() {
97
+ const level = game.GetLevel();
98
+ const stage = level.GetStage();
99
+ const stageType = level.GetStageType();
100
+ return (stage === LevelStage.SHEOL_CATHEDRAL &&
101
+ stageType === StageType.WRATH_OF_THE_LAMB);
102
+ }
103
+ export function onChest() {
104
+ const level = game.GetLevel();
105
+ const stage = level.GetStage();
106
+ const stageType = level.GetStageType();
107
+ return (stage === LevelStage.DARK_ROOM_CHEST &&
108
+ stageType === StageType.WRATH_OF_THE_LAMB);
109
+ }
110
+ export function onDarkRoom() {
111
+ const level = game.GetLevel();
112
+ const stage = level.GetStage();
113
+ const stageType = level.GetStageType();
114
+ return (stage === LevelStage.DARK_ROOM_CHEST && stageType === StageType.ORIGINAL);
115
+ }
116
+ /**
117
+ * Returns whether or not the player is on the "final floor" of the particular run. The final floor
118
+ * is defined as one that prevents the player from entering the I AM ERROR room on.
119
+ *
120
+ * For example, when using Undefined on The Chest, it has a 50% chance of teleporting the player to
121
+ * the Secret Room and a 50% chance of teleporting the player to the Super Secret Room, because the
122
+ * I AM ERROR room is never entered into the list of possibilities.
123
+ */
124
+ export function onFinalFloor() {
125
+ const level = game.GetLevel();
126
+ const stage = level.GetStage();
127
+ return (stage === LevelStage.DARK_ROOM_CHEST ||
128
+ stage === LevelStage.THE_VOID ||
129
+ stage === LevelStage.HOME ||
130
+ (stage === LevelStage.WOMB_2 && onRepentanceStage()) // Corpse 2
131
+ );
132
+ }
133
+ export function onRepentanceStage() {
134
+ const level = game.GetLevel();
135
+ const stageType = level.GetStageType();
136
+ return isRepentanceStage(stageType);
137
+ }
138
+ export function onSheol() {
139
+ const level = game.GetLevel();
140
+ const stage = level.GetStage();
141
+ const stageType = level.GetStageType();
142
+ return (stage === LevelStage.SHEOL_CATHEDRAL && stageType === StageType.ORIGINAL);
143
+ }
144
+ /**
145
+ * Helper function to warp to a new stage/level.
146
+ *
147
+ * @param stage The stage number to warp to.
148
+ * @param stageType The stage type to warp to.
149
+ * @param reseed Optional. Whether or not to reseed the floor upon arrival. Default is false. Set
150
+ * this to true if you are warping to the same stage but a different stage type (or
151
+ * else the floor layout will be identical to the old floor).
152
+ */
153
+ export function setStage(stage, stageType, reseed = false) {
154
+ // Build the command that will take us to the next floor.
155
+ const stageTypeSuffix = STAGE_TYPE_SUFFIXES[stageType];
156
+ const command = `stage ${stage}${stageTypeSuffix}`;
157
+ Isaac.ExecuteCommand(command);
158
+ if (reseed) {
159
+ // Doing a "reseed" immediately after a "stage" command won't mess anything up.
160
+ Isaac.ExecuteCommand("reseed");
161
+ }
162
+ }
163
+ /**
164
+ * Helper function to convert a numerical `StageType` into the letter suffix supplied to the "stage"
165
+ * console command. For example, `StageType.REPENTANCE` is the stage type for Downpour, and the
166
+ * console command to go to Downpour is "stage 1c", so this function converts `StageType.REPENTANCE`
167
+ * to "c".
168
+ */
169
+ export function stageTypeToLetter(stageType) {
170
+ return STAGE_TYPE_TO_LETTER[stageType];
171
+ }
172
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zdGFnZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFZLFNBQVMsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBQy9FLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxpQ0FBaUMsQ0FBQztBQUMxRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUNuRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUVwRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUMsS0FBaUI7SUFDbEQsa0dBQWtHO0lBQ2xHLFdBQVc7SUFFWDs7Ozs7Ozs7Ozs7TUFXRTtJQUVGLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsWUFBWSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRTVDLElBQUksU0FBUyxHQUFHLENBQUMsS0FBSyxDQUFDLEVBQUU7UUFDdkIsT0FBTyxTQUFTLENBQUMsaUJBQWlCLENBQUM7S0FDcEM7SUFFRCxJQUFJLFNBQVMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO1FBQ3ZCLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQztLQUM3QjtJQUVELE9BQU8sU0FBUyxDQUFDLFFBQVEsQ0FBQztBQUM1QixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLDRCQUE0QixDQUFDLEtBQWlCO0lBQzVELDBDQUEwQztJQUMxQyxJQUFJLEtBQUssS0FBSyxVQUFVLENBQUMsTUFBTSxJQUFJLEtBQUssS0FBSyxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQzlE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
@@ -140,3 +140,5 @@ function ____exports.setStage(self, stage, stageType, reseed)
140
140
  end
141
141
  end
142
142
  return ____exports
143
+
144
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3N0YWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw2Q0FBZ0Q7QUFBdkM7QUFBc0I7QUFDL0IsMEJBQXFCO0FBQVo7QUFDVCxpQ0FBd0M7QUFBL0I7QUFDVCw4QkFBb0M7QUFBM0I7QUFDVCw4QkFBcUM7QUFBNUI7QUE0R1QsNkNBQWtDO0FBQ2hDLFdBQ0UsYUFBYyx3QkFBd0IsYUFBYztBQUZ4RDtBQTBEQTtBQUNRLGtCQUFRLEtBQUs7QUFDYixzQkFBWSxNQUFNO0FBRXhCLFdBQU8sbUNBQWtCO0FBSjNCOzs7OztBQWdEQSw2Q0FBa0M7QUFDaEMsV0FBTyxxQkFBcUI7QUFEOUI7OztBQWhOQSw4Q0FBbUM7QUFpQjNCLGtCQUFRLEtBQUs7QUFDYixzQkFBWSxNQUFNLGFBQWE7T0FFakMsWUFBWSxLQUFNO0FBQ3BCLGVBQU87O09BR0wsWUFBWSxLQUFNO0FBQ3BCLGVBQU87O0FBR1QsV0FBTztBQTVCVDs7O0FBbUNBLHdEQUE2QztPQUV2QyxTQUFVLHFCQUFxQixTQUFVO0FBQzNDLGVBQU87O0FBS0gsa0JBQVEsS0FBSztBQUNiLDBCQUFpQixRQUFpQjtBQUNsQyxzQkFBWSxNQUFNLGFBQWE7QUFHL0IsMEJBQWdCLFdBQVcsWUFBWTtPQUN6QyxnQkFBZ0IsS0FBTTtBQUN4QixlQUFPOztBQUdULFdBQU87QUFsQlQ7Ozs7QUEwQkE7QUFDUSxrQkFBUSxLQUFLO0FBQ2Isa0JBQVEsTUFBTTtPQUVoQjtBQUNGLGVBQU8sUUFBUTs7QUFHakIsV0FBTztBQVJUOzs7QUFlQSwwQ0FBK0IsVUFBb0I7QUFDM0MsbUJBQVMsd0JBQXdCO0FBQ3ZDLGFBQU8sV0FBUSxXQUFNLGlCQUFJO0FBRjNCOztBQU1BO0FBQ1Esa0JBQVEsS0FBSztBQUVuQixXQUFPLE1BQU07QUFIZjs7QUFPQTtBQUNRLGtCQUFRLEtBQUs7QUFFbkIsV0FBTyxNQUFNO0FBSGY7O0FBT0EscUNBQTBCLE9BQW1CO0FBQ3JDLGtDQUF3QixtQ0FBa0I7QUFDMUMscUJBQVUscUJBQVMsV0FBUTtJQUNqQyxxQkFBcUI7QUFIdkI7QUFZQTtBQUNRLGtCQUFRLEtBQUs7QUFDYixrQkFBUSxNQUFNO0FBQ2Qsc0JBQVksTUFBTTtBQUV4QixXQUNFLFNBQVUsK0JBQ1YsYUFBYztBQVBsQjtBQVdBO0FBQ1Esa0JBQVEsS0FBSztBQUNiLGtCQUFRLE1BQU07QUFDZCxzQkFBWSxNQUFNO0FBRXhCLFdBQ0UsU0FBVSwrQkFDVixhQUFjO0FBUGxCO0FBV0E7QUFDUSxrQkFBUSxLQUFLO0FBQ2Isa0JBQVEsTUFBTTtBQUNkLHNCQUFZLE1BQU07QUFFeEIsV0FDRSxTQUFVLCtCQUE4QixhQUFjO0FBTjFEOzs7Ozs7O0FBa0JBO0FBQ1Esa0JBQVEsS0FBSztBQUNiLGtCQUFRLE1BQU07QUFFcEIsV0FDRSxTQUFVLDhCQUNWLFNBQVUsdUJBQ1YsU0FBVSxtQkFDVCxTQUFVLHNCQUFxQjtBQVJwQztBQW1CQTtBQUNRLGtCQUFRLEtBQUs7QUFDYixrQkFBUSxNQUFNO0FBQ2Qsc0JBQVksTUFBTTtBQUV4QixXQUNFLFNBQVUsK0JBQThCLGFBQWM7QUFOMUQ7Ozs7Ozs7O0FBbUJBLG9DQUNFLE9BQ0EsV0FDQTtPQUFBO1FBQUEsU0FBUzs7QUFHSCw0QkFBa0Isb0JBQW9CO0FBQ3RDLHFCQUFVLHFCQUFTLFdBQVE7SUFDakMscUJBQXFCO09BRWpCO1FBRUYscUJBQXFCOztBQVp6QiIsImZpbGUiOiJzdGFnZS5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1,37 @@
1
+ export function capitalizeFirstLetter(string) {
2
+ const firstCharacter = string.charAt(0);
3
+ const capitalizedFirstLetter = firstCharacter.toUpperCase();
4
+ const restOfString = string.slice(1);
5
+ return `${capitalizedFirstLetter}${restOfString}`;
6
+ }
7
+ export function removeAllCharacters(string, character) {
8
+ return string.replaceAll(character, "");
9
+ }
10
+ /**
11
+ * Helper function to remove one or more substrings from a string, if they exist. Returns the
12
+ * modified string.
13
+ *
14
+ * This function is variadic, meaning that you can pass as many substrings as you want to remove.
15
+ */
16
+ export function removeSubstring(string, ...substrings) {
17
+ for (const substring of substrings) {
18
+ string = string.replaceAll(substring, "");
19
+ }
20
+ return string;
21
+ }
22
+ /** Helper function to trim a prefix from a string, if it exists. Returns the trimmed string. */
23
+ export function trimPrefix(string, prefix) {
24
+ if (!string.startsWith(prefix)) {
25
+ return string;
26
+ }
27
+ return string.slice(prefix.length);
28
+ }
29
+ /** Helper function to trim a suffix from a string, if it exists. Returns the trimmed string. */
30
+ export function trimSuffix(string, prefix) {
31
+ if (!string.endsWith(prefix)) {
32
+ return string;
33
+ }
34
+ const endCharacter = string.length - prefix.length;
35
+ return string.slice(0, endCharacter);
36
+ }
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RyaW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvc3RyaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxNQUFjO0lBQ2xELE1BQU0sY0FBYyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEMsTUFBTSxzQkFBc0IsR0FBRyxjQUFjLENBQUMsV0FBVyxFQUFFLENBQUM7SUFDNUQsTUFBTSxZQUFZLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUVyQyxPQUFPLEdBQUcsc0JBQXNCLEdBQUcsWUFBWSxFQUFFLENBQUM7QUFDcEQsQ0FBQztBQUVELE1BQU0sVUFBVSxtQkFBbUIsQ0FBQyxNQUFjLEVBQUUsU0FBaUI7SUFDbkUsT0FBTyxNQUFNLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZUFBZSxDQUM3QixNQUFjLEVBQ2QsR0FBRyxVQUFvQjtJQUV2QixLQUFLLE1BQU0sU0FBUyxJQUFJLFVBQVUsRUFBRTtRQUNsQyxNQUFNLEdBQUcsTUFBTSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLENBQUM7S0FDM0M7SUFFRCxPQUFPLE1BQU0sQ0FBQztBQUNoQixDQUFDO0FBRUQsZ0dBQWdHO0FBQ2hHLE1BQU0sVUFBVSxVQUFVLENBQUMsTUFBYyxFQUFFLE1BQWM7SUFDdkQsSUFBSSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsTUFBTSxDQUFDLEVBQUU7UUFDOUIsT0FBTyxNQUFNLENBQUM7S0FDZjtJQUVELE9BQU8sTUFBTSxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDckMsQ0FBQztBQUVELGdHQUFnRztBQUNoRyxNQUFNLFVBQVUsVUFBVSxDQUFDLE1BQWMsRUFBRSxNQUFjO0lBQ3ZELElBQUksQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQzVCLE9BQU8sTUFBTSxDQUFDO0tBQ2Y7SUFFRCxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUM7SUFDbkQsT0FBTyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztBQUN2QyxDQUFDIn0=
@@ -40,3 +40,5 @@ function ____exports.trimSuffix(self, ____string, prefix)
40
40
  return __TS__StringSlice(____string, 0, endCharacter)
41
41
  end
42
42
  return ____exports
43
+
44
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3N0cmluZy50cyJdLCJuYW1lcyI6WyJzdHJpbmciXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGlEQUFzQ0E7QUFDOUIsMkJBQWlCLFdBQUFBLFlBQWM7QUFDL0IsbUNBQXlCO0FBQ3pCLHlCQUFlLFdBQUFBLFlBQWE7QUFFbEMsV0FBVSwwQkFBeUI7QUFMckM7QUFRQSwrQ0FBb0NBLFlBQWdCO0FBQ2xELFdBQU8sdUJBQUFBLFlBQWtCLFdBQVc7QUFEdEM7Ozs7O0FBVUEsMkNBQ0VBO1VBQ0c7QUFFSCxjQUFXLG9CQUFhO0FBQ3RCLFFBQUFBLGFBQVMsdUJBQUFBLFlBQWtCLFdBQVc7O0FBR3hDLFdBQU9BO0FBUlQ7O0FBWUEsc0NBQTJCQSxZQUFnQjtXQUNwQyx1QkFBQUEsWUFBa0I7QUFDckIsZUFBT0E7O0FBR1QsV0FBTyxrQkFBQUEsWUFBYTtBQUx0Qjs7QUFTQSxzQ0FBMkJBLFlBQWdCO1dBQ3BDLHFCQUFBQSxZQUFnQjtBQUNuQixlQUFPQTs7QUFHSCx5QkFBZSxDQUFBQSxhQUFnQjtBQUNyQyxXQUFPLGtCQUFBQSxZQUFhLEdBQUc7QUFOekIiLCJmaWxlIjoic3RyaW5nLmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
@@ -0,0 +1,143 @@
1
+ import { isBoolean, isNumber, isString } from "./types";
2
+ /**
3
+ * In a Map, you can use the `clear` method to delete every element. However, in a LuaTable, the
4
+ * `clear` method does not exist. Use this helper function as a drop-in replacement for this.
5
+ */
6
+ export function clearTable(luaTable) {
7
+ for (const [key] of pairs(luaTable)) {
8
+ luaTable.delete(key);
9
+ }
10
+ }
11
+ /** Helper function to copy specific values from a object to a table. */
12
+ export function copyValuesToTable(object, keys, luaTable) {
13
+ const otherTable = object;
14
+ for (const key of keys) {
15
+ const value = otherTable.get(key);
16
+ luaTable.set(key, value);
17
+ }
18
+ }
19
+ /**
20
+ * Helper function to safely get boolean values from a Lua table. Will throw an error if the
21
+ * specific value does not exist on the table.
22
+ *
23
+ * This function is variadic, meaning that you can specify N arguments to get N values.
24
+ */
25
+ export function getBooleansFromTable(luaTable, objectName, ...keys) {
26
+ const booleans = [];
27
+ for (const key of keys) {
28
+ const value = luaTable.get(key);
29
+ if (value === undefined) {
30
+ error(`Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
31
+ }
32
+ if (isBoolean(value)) {
33
+ booleans.push(value);
34
+ }
35
+ else {
36
+ error(`Failed to get the boolean for the "${key}" value of a table representing a "${objectName}" object because the type was: ${typeof value}`);
37
+ }
38
+ }
39
+ return booleans;
40
+ }
41
+ /**
42
+ * Helper function to safely get number values from a Lua table. Will throw an error if the specific
43
+ * value does not exist on the table or if it cannot be converted to a number.
44
+ *
45
+ * This function is variadic, meaning that you can specify N arguments to get N values.
46
+ */
47
+ export function getNumbersFromTable(luaTable, objectName, ...keys) {
48
+ const numbers = [];
49
+ for (const key of keys) {
50
+ const value = luaTable.get(key);
51
+ if (value === undefined) {
52
+ error(`Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
53
+ }
54
+ if (isNumber(value)) {
55
+ numbers.push(value);
56
+ }
57
+ else if (isString(value)) {
58
+ const number = tonumber(value);
59
+ if (number === undefined) {
60
+ error(`Failed to convert the "${key}" value of a table representing a "${objectName}" object to a number: ${value}`);
61
+ }
62
+ numbers.push(number);
63
+ }
64
+ else {
65
+ error(`Failed to get the number for the "${key}" value of a table representing a "${objectName}" object because the type was: ${typeof value}`);
66
+ }
67
+ }
68
+ return numbers;
69
+ }
70
+ /**
71
+ * Helper function to safely get string values from a Lua table. Will throw an error if the specific
72
+ * value does not exist on the table.
73
+ *
74
+ * This function is variadic, meaning that you can specify N arguments to get N values.
75
+ */
76
+ export function getStringsFromTable(luaTable, objectName, ...keys) {
77
+ const strings = [];
78
+ for (const key of keys) {
79
+ const value = luaTable.get(key);
80
+ if (value === undefined) {
81
+ error(`Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
82
+ }
83
+ if (isString(value)) {
84
+ strings.push(value);
85
+ }
86
+ else {
87
+ const string = tostring(value);
88
+ strings.push(string);
89
+ }
90
+ }
91
+ return strings;
92
+ }
93
+ /**
94
+ * Helper function to iterate over a table deterministically. This is useful because by default, the
95
+ * `pairs` function will return the keys of a Lua table in a random order.
96
+ *
97
+ * This function will sort the table entries based on the value of the key.
98
+ *
99
+ * This function will only work on tables that have number keys or string keys. It will throw a
100
+ * runtime error if it encounters a key of another type.
101
+ *
102
+ * @param luaTable The table to iterate over.
103
+ * @param func The function to run for each iteration.
104
+ * @param inOrder Optional. Whether to iterate in order. True by default. You can dynamically set to
105
+ * false in situations where iterating randomly would not matter and you need the
106
+ * extra performance.
107
+ */
108
+ export function iterateTableInOrder(luaTable, func, inOrder = true) {
109
+ // First, handle the trivial case of a non-deterministic iteration.
110
+ if (!inOrder) {
111
+ for (const [key, value] of pairs(luaTable)) {
112
+ func(key, value);
113
+ }
114
+ return;
115
+ }
116
+ const keys = Object.keys(luaTable);
117
+ const hasAllNumberKeys = keys.every((key) => isNumber(key));
118
+ const hasAllStringKeys = keys.every((key) => isString(key));
119
+ if (!hasAllNumberKeys && !hasAllStringKeys) {
120
+ // Since the table has non-homogenous keys, we won't be able to sort it. Revert to
121
+ // non-deterministic iteration in this case.
122
+ for (const [key, value] of pairs(luaTable)) {
123
+ func(key, value);
124
+ }
125
+ return;
126
+ }
127
+ keys.sort();
128
+ for (const key of keys) {
129
+ const keyIndex = key;
130
+ const value = luaTable.get(keyIndex);
131
+ func(keyIndex, value);
132
+ }
133
+ }
134
+ /**
135
+ * Helper function to check if a Lua table has all of the provided keys.
136
+ *
137
+ * This function is variadic, meaning that you can specify as many arguments as you want to check
138
+ * for.
139
+ */
140
+ export function tableHasKeys(luaTable, ...keys) {
141
+ return keys.every((key) => luaTable.has(key));
142
+ }
143
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGFibGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy90YWJsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsU0FBUyxFQUFFLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEQ7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxRQUFrQjtJQUMzQyxLQUFLLE1BQU0sQ0FBQyxHQUFHLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDbkMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUN0QjtBQUNILENBQUM7QUFFRCx3RUFBd0U7QUFDeEUsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixNQUFlLEVBQ2YsSUFBYyxFQUNkLFFBQW1DO0lBRW5DLE1BQU0sVUFBVSxHQUFHLE1BQTJDLENBQUM7SUFFL0QsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDdEIsTUFBTSxLQUFLLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUNsQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUMxQjtBQUNILENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxvQkFBb0IsQ0FDbEMsUUFBbUMsRUFDbkMsVUFBa0IsRUFDbEIsR0FBRyxJQUFjO0lBRWpCLE1BQU0sUUFBUSxHQUFjLEVBQUUsQ0FBQztJQUMvQixLQUFLLE1BQU0sR0FBRyxJQUFJLElBQUksRUFBRTtRQUN0QixNQUFNLEtBQUssR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBQ2hDLElBQUksS0FBSyxLQUFLLFNBQVMsRUFBRTtZQUN2QixLQUFLLENBQ0gsK0JBQStCLEdBQUcsZ0NBQWdDLFVBQVUsV0FB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
@@ -147,3 +147,5 @@ function ____exports.tableHasKeys(self, luaTable, ...)
147
147
  )
148
148
  end
149
149
  return ____exports
150
+
151
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3RhYmxlLnRzIl0sIm5hbWVzIjpbInN0cmluZyJdLCJtYXBwaW5ncyI6Ijs7Ozs7O0FBQUEsa0JBQThDO0FBQXJDO0FBQVc7QUFBVTs7O0FBTTlCLHNDQUEyQjtBQUN6QixRQUFZLE9BQVEsTUFBTTtBQUN4QixpQkFBZ0I7O0FBRnBCOztBQU9BLDZDQUNFLFFBQ0EsTUFDQTtBQUVNLHVCQUFhO0FBRW5CLGNBQVcsY0FBTztBQUNWLHNCQUFRLFdBQWU7QUFDN0IsaUJBQWEsT0FBSzs7QUFUdEI7Ozs7O0FBbUJBLGdEQUNFLFVBQ0E7VUFDRztBQUVHLHFCQUFzQjtBQUM1QixjQUFXLGNBQU87QUFDVixzQkFBUSxTQUFhO1dBQ3ZCO1lBQ0YsU0FDRSxtQ0FBK0IsUUFBRyxzQ0FBZ0MsZUFBVTs7V0FJNUUsZUFBVTtBQUNaLHNDQUFjOztZQUVkLFVBQ0UsMENBQXNDLFFBQUcsNENBQXNDLGVBQVUsdUNBQWtDLGFBQU87OztBQUt4SSxXQUFPO0FBdkJUOzs7OztBQWdDQSwrQ0FDRSxVQUNBO1VBQ0c7QUFFRyxvQkFBb0I7QUFDMUIsY0FBVyxjQUFPO0FBQ1Ysc0JBQVEsU0FBYTtXQUN2QjtZQUNGLFNBQ0UsbUNBQStCLFFBQUcsc0NBQWdDLGVBQVU7O1dBSTVFLGNBQVM7QUFDWCxvQ0FBYTtlQUNKLGNBQVM7QUFDWiwyQkFBUyxTQUFTO2VBQ3BCO2dCQUNGLFVBQ0UsOEJBQTBCLFFBQUcsNENBQXNDLGVBQVUsOEJBQXlCOztBQUcxRyxvQ0FBYTs7WUFFYixVQUNFLHlDQUFxQyxRQUFHLDRDQUFzQyxlQUFVLHVDQUFrQyxhQUFPOzs7QUFLdkksV0FBTztBQS9CVDs7Ozs7QUF3Q0EsK0NBQ0UsVUFDQTtVQUNHO0FBRUcsb0JBQW9CO0FBQzFCLGNBQVcsY0FBTztBQUNWLHNCQUFRLFNBQWE7V0FDdkI7WUFDRixTQUNFLG1DQUErQixRQUFHLHNDQUFnQyxlQUFVOztXQUk1RSxjQUFTO0FBQ1gsb0NBQWE7O0FBRVAsa0JBQUFBLGFBQVMsU0FBUztBQUN4QixvQ0FBYUE7OztBQUlqQixXQUFPO0FBdEJUOzs7Ozs7Ozs7Ozs7OztBQXdDQSwrQ0FDRSxVQUNBLE1BQ0E7T0FBQTtRQUFBLFVBQVU7O1dBR0w7QUFDSCxZQUFZLEtBQUssU0FBVSxNQUFNO1lBQy9CLFVBQUssS0FBSzs7QUFFWjs7QUFHSSxpQkFBTyxpQkFBWTtBQUNuQiw2QkFBbUI7UUFBQTtRQUFXLGVBQUMsS0FBUSxxQkFBUyxJQUFsQjs7QUFDOUIsNkJBQW1CO1FBQUE7UUFBVyxlQUFDLEtBQVEscUJBQVMsSUFBbEI7O09BQ2hDLElBQUMseUJBQXFCO0FBR3hCLFlBQVksS0FBSyxTQUFVLE1BQU07WUFDL0IsVUFBSyxLQUFLOztBQUVaOztJQUVGO0FBRUEsY0FBVyxjQUFPO0FBQ1YseUJBQVc7QUFDWCxzQkFBUSxTQUFhO1FBQzNCLFVBQUssVUFBVTs7QUE3Qm5COzs7OztBQXVDQSx3Q0FDRTtVQUNHO0FBRUgsV0FBTztRQUFBO1FBQVcsZUFBQyxLQUFRLGdCQUFhLFdBQXRCOztBQUpwQiIsImZpbGUiOiJ0YWJsZS5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1,31 @@
1
+ /**
2
+ * - Converts the specified amount of tears stat into MaxFireDelay and adds it to the player.
3
+ * - This function should only be used inside the EvaluateCache callback.
4
+ * - In this context, the "tears stat" represents what is shown on the in-game stat UI.
5
+ */
6
+ export function addTearsStat(player, tearsStat) {
7
+ const existingTearsStat = getTearsStat(player.MaxFireDelay);
8
+ const newTearsStat = existingTearsStat + tearsStat;
9
+ const newMaxFireDelay = getFireDelay(newTearsStat);
10
+ player.MaxFireDelay = newMaxFireDelay;
11
+ }
12
+ /**
13
+ * - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` attribute. This is
14
+ * equivalent to how many tears the player can shoot per frame.
15
+ * - If you already have a "tears" stat and you want to convert it back to MaxFireDelay, then use
16
+ * this function.
17
+ * - In this context, the "tears stat" represents what is shown on the in-game stat UI.
18
+ */
19
+ export function getFireDelay(tearsStat) {
20
+ return math.max(30 / tearsStat - 1, -0.9999);
21
+ }
22
+ /**
23
+ * - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` attribute. This is
24
+ * equivalent to how many tears the player can shoot per frame.
25
+ * - If you want to convert this to the "tears" stat that is shown on the in-game stat UI, then use
26
+ * this function.
27
+ */
28
+ export function getTearsStat(fireDelay) {
29
+ return 30 / (fireDelay + 1);
30
+ }
31
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVhcnMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy90ZWFycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFvQixFQUFFLFNBQWdCO0lBQ2pFLE1BQU0saUJBQWlCLEdBQUcsWUFBWSxDQUFDLE1BQU0sQ0FBQyxZQUFZLENBQUMsQ0FBQztJQUM1RCxNQUFNLFlBQVksR0FBRyxpQkFBaUIsR0FBRyxTQUFTLENBQUM7SUFDbkQsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBQ25ELE1BQU0sQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDO0FBQ3hDLENBQUM7QUFFRDs7Ozs7O0dBTUc7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLFNBQWdCO0lBQzNDLE9BQU8sSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsU0FBUyxHQUFHLENBQUMsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQy9DLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQUMsU0FBZ0I7SUFDM0MsT0FBTyxFQUFFLEdBQUcsQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUIsQ0FBQyJ9
@@ -24,3 +24,5 @@ function ____exports.addTearsStat(self, player, tearsStat)
24
24
  player.MaxFireDelay = newMaxFireDelay
25
25
  end
26
26
  return ____exports
27
+
28
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3RlYXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQW1CQSx3Q0FBNkI7QUFDM0IsV0FBTyxTQUFTLEtBQUssWUFBWSxJQUFJO0FBRHZDOzs7OztBQVVBLHdDQUE2QjtBQUMzQixXQUFPLEtBQU0sYUFBWTtBQUQzQjs7OztBQXhCQSx3Q0FBNkIsUUFBc0I7QUFDM0MsOEJBQW9CLDhCQUFhO0FBQ2pDLHlCQUFlLG9CQUFvQjtBQUNuQyw0QkFBa0IsOEJBQWE7QUFDckMsMEJBQXNCO0FBSnhCIiwiZmlsZSI6InRlYXJzLmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
@@ -0,0 +1,101 @@
1
+ import { ItemConfigTag, PlayerForm, } from "isaac-typescript-definitions";
2
+ import { TRANSFORMATION_NAMES } from "../objects/transformationNames";
3
+ import { getCollectibleTags } from "./collectibles";
4
+ import { getCollectibleTypesWithTag } from "./collectibleTag";
5
+ import { getEnumValues } from "./enums";
6
+ import { hasFlag } from "./flag";
7
+ import { getPlayerCollectibleCount } from "./player";
8
+ const TRANSFORMATION_TO_TAG_MAP = new Map([
9
+ [PlayerForm.GUPPY, ItemConfigTag.GUPPY],
10
+ [PlayerForm.BEELZEBUB, ItemConfigTag.FLY],
11
+ [PlayerForm.FUN_GUY, ItemConfigTag.MUSHROOM],
12
+ [PlayerForm.SERAPHIM, ItemConfigTag.ANGEL],
13
+ [PlayerForm.BOB, ItemConfigTag.BOB],
14
+ [PlayerForm.SPUN, ItemConfigTag.SYRINGE],
15
+ [PlayerForm.YES_MOTHER, ItemConfigTag.MOM],
16
+ [PlayerForm.CONJOINED, ItemConfigTag.BABY],
17
+ [PlayerForm.LEVIATHAN, ItemConfigTag.DEVIL],
18
+ [PlayerForm.OH_CRAP, ItemConfigTag.POOP],
19
+ [PlayerForm.BOOKWORM, ItemConfigTag.BOOK],
20
+ // PlayerForm.ADULTHOOD (11) is based on pill usage.
21
+ [PlayerForm.SPIDER_BABY, ItemConfigTag.SPIDER], // 12
22
+ // PlayerForm.STOMPY (13) is based on size.
23
+ ]);
24
+ const TRANSFORMATIONS_THAT_GRANT_FLYING = new Set([
25
+ PlayerForm.GUPPY,
26
+ PlayerForm.BEELZEBUB,
27
+ PlayerForm.SERAPHIM,
28
+ PlayerForm.LEVIATHAN, // 8
29
+ ]);
30
+ /**
31
+ * Helper function to get all of the collectible types in the game that count towards a particular
32
+ * transformation.
33
+ *
34
+ * For example, to get all of the collectible types that count towards Guppy:
35
+ *
36
+ * ```ts
37
+ * const guppyCollectibleTypes = getCollectibleTypesForTransformation(PlayerForm.GUPPY);
38
+ * ```
39
+ */
40
+ export function getCollectibleTypesForTransformation(playerForm) {
41
+ const itemConfigTag = TRANSFORMATION_TO_TAG_MAP.get(playerForm);
42
+ if (itemConfigTag === undefined) {
43
+ error(`Failed to get the collectible types for the transformation of ${playerForm} because that transformation is not based on collectibles.`);
44
+ }
45
+ return getCollectibleTypesWithTag(itemConfigTag);
46
+ }
47
+ /** Returns the number of items that a player has towards a particular transformation. */
48
+ export function getPlayerNumCollectiblesForTransformation(player, playerForm) {
49
+ const collectibleTypes = getCollectibleTypesForTransformation(playerForm);
50
+ return getPlayerCollectibleCount(player, ...collectibleTypes.values());
51
+ }
52
+ /** Returns a set of the player's current transformations. */
53
+ export function getPlayerTransformations(player) {
54
+ const transformations = new Set();
55
+ for (const playerForm of getEnumValues(PlayerForm)) {
56
+ if (player.HasPlayerForm(playerForm)) {
57
+ transformations.add(playerForm);
58
+ }
59
+ }
60
+ return transformations;
61
+ }
62
+ /**
63
+ * Helper function to get a transformation name from a PlayerForm enum.
64
+ *
65
+ * For example:
66
+ *
67
+ * ```ts
68
+ * const transformationName = getTransformationName(PlayerForm.LORD_OF_THE_FLIES);
69
+ * // transformationName is "Beelzebub"
70
+ * ```
71
+ */
72
+ export function getTransformationName(playerForm) {
73
+ return TRANSFORMATION_NAMES[playerForm];
74
+ }
75
+ export function getTransformationsForCollectibleType(collectibleType) {
76
+ const itemConfigTags = getCollectibleTags(collectibleType);
77
+ const playerForms = getEnumValues(PlayerForm);
78
+ const transformationSet = new Set();
79
+ for (const playerForm of playerForms) {
80
+ const itemConfigTag = TRANSFORMATION_TO_TAG_MAP.get(playerForm);
81
+ if (itemConfigTag === undefined) {
82
+ continue;
83
+ }
84
+ if (hasFlag(itemConfigTags, itemConfigTag)) {
85
+ transformationSet.add(playerForm);
86
+ }
87
+ }
88
+ return transformationSet;
89
+ }
90
+ export function hasFlyingTransformation(player) {
91
+ for (const playerForm of TRANSFORMATIONS_THAT_GRANT_FLYING.values()) {
92
+ if (player.HasPlayerForm(playerForm)) {
93
+ return true;
94
+ }
95
+ }
96
+ return false;
97
+ }
98
+ export function isTransformationFlying(playerForm) {
99
+ return TRANSFORMATIONS_THAT_GRANT_FLYING.has(playerForm);
100
+ }
101
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNmb3JtYXRpb25zLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvdHJhbnNmb3JtYXRpb25zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFFTCxhQUFhLEVBQ2IsVUFBVSxHQUNYLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDdEUsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sZ0JBQWdCLENBQUM7QUFDcEQsT0FBTyxFQUFFLDBCQUEwQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDOUQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN4QyxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sUUFBUSxDQUFDO0FBQ2pDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVyRCxNQUFNLHlCQUF5QixHQUM3QixJQUFJLEdBQUcsQ0FBQztJQUNOLENBQUMsVUFBVSxDQUFDLEtBQUssRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQ3ZDLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO0lBQ3pDLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsUUFBUSxDQUFDO0lBQzVDLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDO0lBQzFDLENBQUMsVUFBVSxDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO0lBQ25DLENBQUMsVUFBVSxDQUFDLElBQUksRUFBRSxhQUFhLENBQUMsT0FBTyxDQUFDO0lBQ3hDLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsR0FBRyxDQUFDO0lBQzFDLENBQUMsVUFBVSxDQUFDLFNBQVMs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
@@ -110,3 +110,5 @@ function ____exports.isTransformationFlying(self, playerForm)
110
110
  return TRANSFORMATIONS_THAT_GRANT_FLYING:has(playerForm)
111
111
  end
112
112
  return ____exports
113
+
114
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3RyYW5zZm9ybWF0aW9ucy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7O0FBQUEsNkNBSU87QUFGTDtBQUNBO0FBRUYsZ0NBQXFDO0FBQTVCO0FBQ1QseUJBQW1DO0FBQTFCO0FBQ1QsMkJBQTJDO0FBQWxDO0FBQ1Qsa0JBQThCO0FBQXJCO0FBQ1QsaUJBQXdCO0FBQWY7QUFDVCxtQkFBMEM7QUFBakM7QUFFSCxrQ0FDSixVQUFJLEtBQUk7SUFDTixDQUFDLGtCQUFrQjtJQUNuQixDQUFDLHNCQUFzQjtJQUN2QixDQUFDLG9CQUFvQjtJQUNyQixDQUFDLHFCQUFxQjtJQUN0QixDQUFDLGdCQUFnQjtJQUNqQixDQUFDLGlCQUFpQjtJQUNsQixDQUFDLHVCQUF1QjtJQUN4QixDQUFDLHNCQUFzQjtJQUN2QixDQUFDLHNCQUFzQjtJQUN2QixDQUFDLG9CQUFvQjtJQUNyQixDQUFDLHFCQUFxQjtJQUV0QixDQUFDLHdCQUF3Qjs7QUFJdkIsMENBQTZELFVBQUksS0FBSSxDQUN6RSxrQkFDQSxzQkFDQSxxQkFDQTs7Ozs7Ozs7O0FBYUYsZ0VBQ0U7QUFFTSwwQkFBZ0IsMEJBQTBCLElBQUk7T0FDaEQ7UUFDRixPQUNFLDZFQUFpRSxnQkFBVTs7QUFJL0UsV0FBTyxnQ0FBMkI7QUFWcEM7O0FBY0EscUVBQ0UsUUFDQTtBQUVNLDZCQUFtQixzREFBcUM7QUFDOUQsV0FBTzs7UUFBMEI7UUFBUSxhQUFHLGlCQUFpQjs7QUFML0Q7O0FBU0Esb0RBQ0U7QUFFTSw0QkFBa0IsVUFBSTtBQUM1QixjQUFXLHFCQUFjLG1CQUFjO1dBQ2pDLE9BQU8sY0FBYztZQUN2QixnQkFBZ0IsSUFBSTs7O0FBSXhCLFdBQU87QUFWVDs7Ozs7Ozs7O0FBdUJBLGlEQUFzQztBQUNwQyxXQUFPLHFCQUFxQjtBQUQ5QjtBQUlBLGdFQUNFO0FBRU0sMkJBQWlCLHdCQUFtQjtBQUVwQyx3QkFBYyxtQkFBYztBQUM1Qiw4QkFBb0IsVUFBSTtBQUM5QixjQUFXLHFCQUFjOztBQUNqQixrQ0FBZ0IsMEJBQTBCLElBQUk7ZUFDaEQ7QUFDRjs7ZUFHRSxhQUFRLGdCQUFnQjtnQkFDMUIsa0JBQWtCLElBQUk7Ozs7O0FBSTFCLFdBQU87QUFsQlQ7QUFxQkEsbURBQXdDO0FBQ3RDLGNBQVcsY0FBYyxpREFBa0M7V0FDckQsT0FBTyxjQUFjO0FBQ3ZCLG1CQUFPOzs7QUFJWCxXQUFPO0FBUFQ7QUFVQSxrREFBdUM7QUFDckMsV0FBTyxrQ0FBa0MsSUFBSTtBQUQvQyIsImZpbGUiOiJ0cmFuc2Zvcm1hdGlvbnMubHVhIiwic291cmNlUm9vdCI6IiJ9
@@ -0,0 +1,46 @@
1
+ import { CacheFlag } from "isaac-typescript-definitions";
2
+ import { getEnumValues } from "./enums";
3
+ import { copySet } from "./set";
4
+ import { getTrinketTypes, trinketHasCacheFlag } from "./trinkets";
5
+ const CACHE_FLAG_TO_TRINKETS_MAP = new Map();
6
+ function initCacheFlagMap() {
7
+ for (const cacheFlag of getEnumValues(CacheFlag)) {
8
+ const trinketsSet = new Set();
9
+ for (const trinketType of getTrinketTypes()) {
10
+ if (trinketHasCacheFlag(trinketType, cacheFlag)) {
11
+ trinketsSet.add(trinketType);
12
+ }
13
+ }
14
+ CACHE_FLAG_TO_TRINKETS_MAP.set(cacheFlag, trinketsSet);
15
+ }
16
+ }
17
+ /**
18
+ * Returns a map containing every trinket type that the player has that matches the provided
19
+ * CacheFlag. The values of the map correspond to the multiplier for that trinket.
20
+ */
21
+ export function getPlayerTrinketsForCacheFlag(player, cacheFlag) {
22
+ const trinketsForCacheFlag = getTrinketsForCacheFlag(cacheFlag);
23
+ const playerTrinkets = new Map();
24
+ for (const trinketType of trinketsForCacheFlag.values()) {
25
+ const trinketMultiplier = player.GetTrinketMultiplier(trinketType);
26
+ if (trinketMultiplier > 0) {
27
+ playerTrinkets.set(trinketType, trinketMultiplier);
28
+ }
29
+ }
30
+ return playerTrinkets;
31
+ }
32
+ /**
33
+ * Returns a set containing every trinket type with the given cache flag, including modded trinkets.
34
+ */
35
+ export function getTrinketsForCacheFlag(cacheFlag) {
36
+ // Lazy initialize the map.
37
+ if (CACHE_FLAG_TO_TRINKETS_MAP.size === 0) {
38
+ initCacheFlagMap();
39
+ }
40
+ const trinketsSet = CACHE_FLAG_TO_TRINKETS_MAP.get(cacheFlag);
41
+ if (trinketsSet === undefined) {
42
+ return new Set();
43
+ }
44
+ return copySet(trinketsSet);
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJpbmtldENhY2hlRmxhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3RyaW5rZXRDYWNoZUZsYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBZSxNQUFNLDhCQUE4QixDQUFDO0FBQ3RFLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDeEMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUNoQyxPQUFPLEVBQUUsZUFBZSxFQUFFLG1CQUFtQixFQUFFLE1BQU0sWUFBWSxDQUFDO0FBRWxFLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLEVBQStCLENBQUM7QUFFMUUsU0FBUyxnQkFBZ0I7SUFDdkIsS0FBSyxNQUFNLFNBQVMsSUFBSSxhQUFhLENBQUMsU0FBUyxDQUFDLEVBQUU7UUFDaEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxHQUFHLEVBQWUsQ0FBQztRQUUzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLGVBQWUsRUFBRSxFQUFFO1lBQzNDLElBQUksbUJBQW1CLENBQUMsV0FBVyxFQUFFLFNBQVMsQ0FBQyxFQUFFO2dCQUMvQyxXQUFXLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxDQUFDO2FBQzlCO1NBQ0Y7UUFFRCwwQkFBMEIsQ0FBQyxHQUFHLENBQUMsU0FBUyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0tBQ3hEO0FBQ0gsQ0FBQztBQUVEOzs7R0FHRztBQUNILE1BQU0sVUFBVSw2QkFBNkIsQ0FDM0MsTUFBb0IsRUFDcEIsU0FBb0I7SUFFcEIsTUFBTSxvQkFBb0IsR0FBRyx1QkFBdUIsQ0FBQyxTQUFTLENBQUMsQ0FBQztJQUVoRSxNQUFNLGNBQWMsR0FBRyxJQUFJLEdBQUcsRUFBb0IsQ0FBQztJQUNuRCxLQUFLLE1BQU0sV0FBVyxJQUFJLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxFQUFFO1FBQ3ZELE1BQU0saUJBQWlCLEdBQUcsTUFBTSxDQUFDLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ25FLElBQUksaUJBQWlCLEdBQUcsQ0FBQyxFQUFFO1lBQ3pCLGNBQWMsQ0FBQyxHQUFHLENBQUMsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUM7U0FDcEQ7S0FDRjtJQUVELE9BQU8sY0FBYyxDQUFDO0FBQ3hCLENBQUM7QUFFRDs7R0FFRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsU0FBb0I7SUFFcEIsMkJBQTJCO0lBQzNCLElBQUksMEJBQTBCLENBQUMsSUFBSSxLQUFLLENBQUMsRUFBRTtRQUN6QyxnQkFBZ0IsRUFBRSxDQUFDO0tBQ3BCO0lBRUQsTUFBTSxXQUFXLEdBQUcsMEJBQTBCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBQzlELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtRQUM3QixPQUFPLElBQUksR0FBRyxFQUFFLENBQUM7S0FDbEI7SUFFRCxPQUFPLE9BQU8sQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5QixDQUFDIn0=
@@ -51,3 +51,5 @@ function ____exports.getPlayerTrinketsForCacheFlag(self, player, cacheFlag)
51
51
  return playerTrinkets
52
52
  end
53
53
  return ____exports
54
+
55
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3RyaW5rZXRDYWNoZUZsYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O01BT1Msa0JBRkg7QUFMTiw2Q0FBdUM7QUFBOUI7QUFDVCxrQkFBOEI7QUFBckI7QUFDVCxnQkFBd0I7QUFBZjtBQUNULHFCQUFxRDtBQUE1QztBQUFpQjtBQUkxQixTQUFTO0FBQ1AsY0FBVyxvQkFBYSxtQkFBYztBQUM5Qiw0QkFBYyxVQUFJO0FBRXhCLGtCQUFXLHNCQUFlO2VBQ3BCLHlCQUFvQixhQUFhO2dCQUNuQyxZQUFZLElBQUk7OztRQUlwQiwyQkFBMkIsSUFBSSxXQUFXOzs7O0FBNEI5QyxtREFDRTtPQUdJLG1DQUFvQztRQUN0Qzs7QUFHSSx3QkFBYywyQkFBMkIsSUFBSTtPQUMvQztBQUNGLGVBQU8sVUFBSTs7QUFHYixXQUFPLGFBQVE7QUFiakI7QUF4Q00sNkJBQTZCLFVBQUk7OztBQW9CdkMseURBQ0UsUUFDQTtBQUVNLGlDQUF1Qix5Q0FBd0I7QUFFL0MsMkJBQWlCLFVBQUk7QUFDM0IsY0FBVyxlQUFlLG9DQUFxQjtBQUN2QyxrQ0FBb0IsT0FBTyxxQkFBcUI7V0FDbEQsb0JBQW9CO1lBQ3RCLGVBQWUsSUFBSSxhQUFhOzs7QUFJcEMsV0FBTztBQWRUIiwiZmlsZSI6InRyaW5rZXRDYWNoZUZsYWcubHVhIiwic291cmNlUm9vdCI6IiJ9