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,151 @@
1
+ import { getRandomArrayElement } from "./array";
2
+ import { getRandomSeed } from "./rng";
3
+ import { isString } from "./types";
4
+ import { irange } from "./utils";
5
+ /**
6
+ * TypeScriptToLua will transpile TypeScript enums to Lua tables that have a double mapping. Thus,
7
+ * when you iterate over them, you will get both the names of the enums and the values of the enums,
8
+ * in a random order. Use this helper function to get the entries of the enum with the reverse
9
+ * mappings filtered out.
10
+ *
11
+ * This function will return the enum values in a sorted order, which may not necessarily be the
12
+ * same order as which they were declared in.
13
+ *
14
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
15
+ * not created for string enums.)
16
+ *
17
+ * Also see the `getEnumKeys` and `getEnumValues` helper functions.
18
+ *
19
+ * For a more in depth explanation, see:
20
+ * https://isaacscript.github.io/gotchas#iterating-over-enums
21
+ */
22
+ export function getEnumEntries(transpiledEnum) {
23
+ // The values cannot simply be type `T` due to the special construction of bit flag enums.
24
+ const enumEntries = [];
25
+ for (const [key, value] of pairs(transpiledEnum)) {
26
+ // Ignore the reverse mappings created by TypeScriptToLua. Note that reverse mappings are not
27
+ // created for string enums.
28
+ if (isString(key)) {
29
+ enumEntries.push([key, value]);
30
+ }
31
+ }
32
+ // The enums will be in a random order (because of "pairs"), so sort them based on the values.
33
+ // https://stackoverflow.com/questions/5199901/how-to-sort-an-associative-array-by-its-values-in-javascript
34
+ enumEntries.sort(([_key1, value1], [_key2, value2]) => value1 < value2 ? -1 : value1 > value2 ? 1 : 0);
35
+ return enumEntries;
36
+ }
37
+ /**
38
+ * TypeScriptToLua will transpile TypeScript enums to Lua tables that have a double mapping. Thus,
39
+ * when you iterate over them, you will get both the names of the enums and the values of the enums,
40
+ * in a random order. If all you need are the keys of an enum, use this helper function.
41
+ *
42
+ * This function will return the enum keys in a sorted order, which may not necessarily be the same
43
+ * order as which they were declared in.
44
+ *
45
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
46
+ * not created for string enums.)
47
+ *
48
+ * Also see the `getEnumEntries` and `getEnumValues` helper functions.
49
+ *
50
+ * For a more in depth explanation, see:
51
+ * https://isaacscript.github.io/gotchas#iterating-over-enums
52
+ */
53
+ export function getEnumKeys(transpiledEnum) {
54
+ const enumEntries = getEnumEntries(transpiledEnum);
55
+ return enumEntries.map(([key, _value]) => key);
56
+ }
57
+ /** Helper function to get the amount of entries inside of an enum. */
58
+ export function getEnumLength(transpiledEnum) {
59
+ const enumEntries = getEnumEntries(transpiledEnum);
60
+ return enumEntries.length;
61
+ }
62
+ /**
63
+ * TypeScriptToLua will transpile TypeScript enums to Lua tables that have a double mapping. Thus,
64
+ * when you iterate over them, you will get both the names of the enums and the values of the enums,
65
+ * in a random order. If all you need are the values of an enum, use this helper function.
66
+ *
67
+ * This function will return the enum values in a sorted order, which may not necessarily be the
68
+ * same order as which they were declared in.
69
+ *
70
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
71
+ * not created for string enums.)
72
+ *
73
+ * Also see the `getEnumEntries` and `getEnumKeys` helper functions.
74
+ *
75
+ * For a more in depth explanation, see:
76
+ * https://isaacscript.github.io/gotchas#iterating-over-enums
77
+ */
78
+ export function getEnumValues(transpiledEnum) {
79
+ const enumEntries = getEnumEntries(transpiledEnum);
80
+ return enumEntries.map(([_key, value]) => value);
81
+ }
82
+ /**
83
+ * Helper function to get the enum value with the highest value.
84
+ *
85
+ * Note that this is not necessarily the enum value that is declared last, since there is no way to
86
+ * infer that at run-time.
87
+ */
88
+ export function getLastEnumValue(transpiledEnum) {
89
+ const enumValues = getEnumValues(transpiledEnum);
90
+ const lastElement = enumValues[enumValues.length - 1];
91
+ if (lastElement === undefined) {
92
+ error("Failed to get the last value from an enum since the enum was empty.");
93
+ }
94
+ return lastElement;
95
+ }
96
+ /**
97
+ * Helper function to get a random value from the provided enum.
98
+ *
99
+ * @param transpiledEnum The enum to get the value from.
100
+ * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
101
+ * `RNG.Next` method will be called. Default is `getRandomSeed()`.
102
+ * @param exceptions Optional. An array of elements to skip over if selected.
103
+ */
104
+ export function getRandomEnumValue(transpiledEnum, seedOrRNG = getRandomSeed(), exceptions = []) {
105
+ const enumValues = getEnumValues(transpiledEnum);
106
+ return getRandomArrayElement(enumValues, seedOrRNG, exceptions);
107
+ }
108
+ /**
109
+ * Helper function to check every value of a custom enum for -1. Will throw an run-time error if any
110
+ * -1 values are found. This is helpful because many methods of the Isaac class return -1 if they
111
+ * fail.
112
+ *
113
+ * For example:
114
+ *
115
+ * ```ts
116
+ * enum EntityTypeCustom {
117
+ * FOO = Isaac.GetEntityTypeByName("Foo"),
118
+ * }
119
+ *
120
+ * validateCustomEnum("EntityTypeCustom", EntityTypeCustom);
121
+ * ```
122
+ */
123
+ export function validateCustomEnum(transpiledEnumName, transpiledEnum) {
124
+ for (const [key, value] of getEnumEntries(transpiledEnum)) {
125
+ if (value === -1) {
126
+ error(`Failed to find the custom enum value: ${transpiledEnumName}.${key}`);
127
+ }
128
+ }
129
+ }
130
+ /**
131
+ * Helper function to validate if every value in an enum is contiguous, starting at 0.
132
+ *
133
+ * This is useful to automate checking large enums for typos.
134
+ */
135
+ export function validateEnumContiguous(transpiledEnumName, transpiledEnum) {
136
+ const values = getEnumValues(transpiledEnum);
137
+ const valuesSet = new Set(values);
138
+ const lastValue = values[values.length - 1];
139
+ if (lastValue === undefined) {
140
+ error("Failed to validate that an enum was contiguous, since the last value was undefined.");
141
+ }
142
+ if (typeof lastValue !== "number") {
143
+ error("Failed to validate that an enum was contiguous, since the last value was not a number.");
144
+ }
145
+ for (const value of irange(lastValue)) {
146
+ if (!valuesSet.has(value)) {
147
+ error(`Failed to find a custom enum value of ${value} for: ${transpiledEnumName}`);
148
+ }
149
+ }
150
+ }
151
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9lbnVtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUN0QyxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBQ25DLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFakM7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnQkc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUM1QixjQUFpQjtJQUVqQiwwRkFBMEY7SUFDMUYsTUFBTSxXQUFXLEdBQTRDLEVBQUUsQ0FBQztJQUNoRSxLQUFLLE1BQU0sQ0FBQyxHQUFHLEVBQUUsS0FBSyxDQUFDLElBQUksS0FBSyxDQUFDLGNBQWMsQ0FBQyxFQUFFO1FBQ2hELDZGQUE2RjtRQUM3Riw0QkFBNEI7UUFDNUIsSUFBSSxRQUFRLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDakIsV0FBVyxDQUFDLElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDO1NBQ2hDO0tBQ0Y7SUFFRCw4RkFBOEY7SUFDOUYsMkdBQTJHO0lBQzNHLFdBQVcsQ0FBQyxJQUFJLENBQ2QsQ0FBQyxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxDQUFDLEtBQUssRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQ25DLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FDakQsQ0FBQztJQUVGLE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFJLGNBQWlCO0lBQzlDLE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRCxPQUFPLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxNQUFNLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakQsQ0FBQztBQUVELHNFQUFzRTtBQUN0RSxNQUFNLFVBQVUsYUFBYSxDQUFJLGNBQWlCO0lBQ2hELE1BQU0sV0FBVyxHQUFHLGNBQWMsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUNuRCxPQUFPLFdBQVcsQ0FBQyxNQUFNLENBQUM7QUFDNUIsQ0FBQztBQUVEOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUksY0FBaUI7SUFDaEQsTUFBTSxXQUFXLEdBQUcsY0FBYyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBQ25ELE9BQU8sV0FBVyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsZ0JBQWdCLENBQUksY0FBaUI7SUFDbkQsTUFBTSxVQUFVLEdBQUcsYUFBYSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0lBRWpELE1BQU0sV0FBVyxHQUFHLFVBQVUsQ0FBQyxVQUFVLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0lBQ3RELElBQUksV0FBVyxLQUFLLFNBQVMsRUFBRTtRQUM3QixLQUFLLENBQ0gscUVBQXFFLENBQ3RFLENBQUM7S0FDSDtJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRDs7Ozs7OztHQU9HO0FBQ0gsTUFBTSxVQUFVLGtCQUFrQixDQUNoQyxjQUFpQixFQUNqQixZQUF3QixhQUFhLEVBQUUsRUFDdkMsYUFBNEQsRUFBRTtJQUU5RCxNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsY0FBYyxDQUFDLENBQUM7SUFDakQsT0FBTyxxQkFBcUIsQ0FBQyxVQUFVLEVBQUUsU0FBUyxFQUFFLFVBQVUsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsa0JBQTBCLEVBQzFCLGNBQXVCO0lBRXZCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxjQUFjLENBQUMsY0FBYyxDQUFDLEVBQUU7UUFDekQsSUFBSSxLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7WUFDaEIsS0FBSyxDQUNILHlDQUF5QyxrQkFBa0IsSUFBSSxHQUFHLEVBQUUsQ0FDckUsQ0FBQztTQUNIO0tBQ0Y7QUFDSCxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxzQkFBc0IsQ0FDcEMsa0JBQTBCLEVBQzFCLGNBQWlCO0lBRWpCLE1BQU0sTUFBTSxHQUFHLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUM3QyxNQUFNLFNBQVMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNsQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztJQUM1QyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7UUFDM0IsS0FBSyxDQUNILHFGQUFxRixDQUN0RixDQUFDO0tBQ0g7SUFDRCxJQUFJLE9BQU8sU0FBUyxLQUFLLFFBQVEsRUFBRTtRQUNqQyxLQUFLLENBQ0gsd0ZBQXdGLENBQ3pGLENBQUM7S0FDSDtJQUNELEtBQUssTUFBTSxLQUFLLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFO1FBQ3JDLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLEtBQThCLENBQUMsRUFBRTtZQUNsRCxLQUFLLENBQ0gseUNBQXlDLEtBQUssU0FBUyxrQkFBa0IsRUFBRSxDQUM1RSxDQUFDO1NBQ0g7S0FDRjtBQUNILENBQUMifQ==
@@ -175,3 +175,5 @@ function ____exports.validateEnumContiguous(self, transpiledEnumName, transpiled
175
175
  end
176
176
  end
177
177
  return ____exports
178
+
179
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL2VudW1zLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLGtCQUFzQztBQUE3QjtBQUNULGdCQUE4QjtBQUFyQjtBQUNULGtCQUF5QjtBQUFoQjtBQUNULGtCQUF1QjtBQUFkOzs7Ozs7Ozs7Ozs7Ozs7O0FBbUJULDBDQUNFO0FBR00sd0JBQXVEO0FBQzdELFFBQVksS0FBSyxTQUFVLE1BQU07V0FHM0IsY0FBUztBQUNYLDRDQUFpQixDQUFDLEtBQUs7OztJQU0zQjtRQUFBO1FBQ0U7a0JBQVM7a0JBQVA7WUFBTztrQkFBaUI7a0JBQVA7WUFBTztBQUN4Qiw0QkFBUyxZQUFVLEtBQUksVUFBUyxXQUFTLEtBQUk7UUFEL0M7O0FBSUYsV0FBTztBQXBCVDs7Ozs7Ozs7Ozs7Ozs7O0FBdUNBLHVDQUErQjtBQUN2Qix3QkFBYyxnQ0FBZTtBQUNuQyxXQUFPO1FBQUE7UUFBZ0I7a0JBQUU7WUFBQTtrQkFBSztBQUFZO1FBQW5COztBQUZ6Qjs7QUFNQSx5Q0FBaUM7QUFDekIsd0JBQWMsZ0NBQWU7QUFDbkMsV0FBTztBQUZUOzs7Ozs7Ozs7Ozs7Ozs7QUFxQkEseUNBQWlDO0FBQ3pCLHdCQUFjLGdDQUFlO0FBQ25DLFdBQU87UUFBQTtRQUFnQjtrQkFBUTtrQkFBTjtZQUFNO0FBQVc7UUFBbkI7O0FBRnpCOzs7OztBQVdBLDRDQUFvQztBQUM1Qix1QkFBYSwrQkFBYztBQUUzQix3QkFBYyxXQUFXO09BQzNCO1FBQ0YsTUFDRTs7QUFJSixXQUFPO0FBVlQ7Ozs7Ozs7QUFxQkEsOENBQ0UsZ0JBQ0EsV0FDQTtPQURBO1FBQUEsWUFBd0I7O09BQ3hCO1FBQUEsYUFBNEQ7O0FBRXRELHVCQUFhLCtCQUFjO0FBQ2pDLFdBQU8sMkJBQXNCLFlBQVksV0FBVztBQU50RDs7Ozs7Ozs7Ozs7Ozs7QUF3QkEsOENBQ0Usb0JBQ0E7QUFFQSxrQ0FBMkIsZ0NBQWU7Y0FBOUI7Y0FBSztXQUNYLFVBQVc7WUFDYixRQUNFLDRDQUF5Qyx1QkFBa0IsUUFBSTs7O0FBUHZFOzs7O0FBa0JBLGtEQUNFLG9CQUNBO0FBRU0sbUJBQVMsK0JBQWM7QUFDdkIsc0JBQVksVUFBSSxLQUFJO0FBQ3BCLHNCQUFZLE9BQU87T0FDckI7UUFDRixNQUNFOztPQUdBLEtBQU8sY0FBYztRQUN2QixNQUNFOztBQUdKLGNBQVcsZ0JBQVMsWUFBTztlQUNwQixVQUFVLElBQUk7WUFDakIsUUFDRSxxREFBeUMsV0FBSyxhQUFTOzs7QUFwQi9EIiwiZmlsZSI6ImVudW1zLmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
@@ -0,0 +1,85 @@
1
+ import { itemConfig } from "../cachedClasses";
2
+ import { FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET } from "../sets/familiarsThatShootPlayerTearsSet";
3
+ import { getFamiliars } from "./entitySpecific";
4
+ /**
5
+ * Helper function to add and remove familiars based on a target amount that you specify.
6
+ *
7
+ * This is a convenience wrapper around the `EntityPlayer.CheckFamiliar` method. Use this helper
8
+ * function instead so that you do not have to retrieve the `ItemConfigItem` and so that you do not
9
+ * specify an incorrect RNG object. (The vanilla method is bugged in that it does not increment the
10
+ * RNG object; see the documentation of the method for more details.)
11
+ *
12
+ * This function is meant to be called in the EvaluateCache callback (when the cache flag is equal
13
+ * to `CacheFlag.FAMILIARS`).
14
+ *
15
+ * Note that this function is only meant to be used in special circumstances where the familiar
16
+ * count is completely custom and does not correspond to the amount of collectibles. For the general
17
+ * case, use the `checkFamiliarFromCollectibles` helper function instead.
18
+ *
19
+ * Note that this will spawn familiars with a completely random `InitSeed`. When calculating random
20
+ * events for this familiar, you should use a data structure that maps familiar `InitSeed` to RNG
21
+ * objects that are initialized based on the seed from
22
+ * `EntityPlayer.GetCollectibleRNG(collectibleType)`.
23
+ *
24
+ * @param player The player that owns the familiars.
25
+ * @param collectibleType The collectible type of the collectible associated with this familiar.
26
+ * @param targetCount The number of familiars that should exist. This function will add or remove
27
+ * familiars until it matches the target count.
28
+ * @param familiarVariant The variant of the familiar to spawn or remove.
29
+ * @param familiarSubType Optional. The sub-type of the familiar to spawn or remove. If not
30
+ * specified, it will search for existing familiars of all sub-types, and
31
+ * spawn new familiars with a sub-type of 0.
32
+ */
33
+ export function checkFamiliar(player, collectibleType, targetCount, familiarVariant, familiarSubType) {
34
+ const itemConfigItem = itemConfig.GetCollectible(collectibleType);
35
+ player.CheckFamiliar(familiarVariant, targetCount, RNG(), itemConfigItem, familiarSubType);
36
+ }
37
+ /**
38
+ * Helper function to add and remove familiars based on the amount of associated collectibles that a
39
+ * player has.
40
+ *
41
+ * Use this helper function instead of invoking the `EntityPlayer.CheckFamiliar` method directly so
42
+ * that the target count is handled automatically.
43
+ *
44
+ * This function is meant to be called in the EvaluateCache callback (when the cache flag is equal
45
+ * to `CacheFlag.FAMILIARS`).
46
+ *
47
+ * Use this function when the amount of familiars should be equal to the amount of associated
48
+ * collectibles that the player has (plus any extras from having used Box of Friends or Monster
49
+ * Manual). If you instead need to have a custom amount of familiars, use the `checkFamiliars`
50
+ * function instead.
51
+ *
52
+ * Note that this will spawn familiars with a completely random `InitSeed`. When calculating random
53
+ * events for this familiar, you should use a data structure that maps familiar `InitSeed` to RNG
54
+ * objects that are initialized based on the seed from
55
+ * `EntityPlayer.GetCollectibleRNG(collectibleType)`.
56
+ *
57
+ * @param player The player that owns the familiars and collectibles.
58
+ * @param collectibleType The collectible type of the collectible associated with this familiar.
59
+ * @param familiarVariant The variant of the familiar to spawn or remove.
60
+ * @param familiarSubType Optional. The sub-type of the familiar to spawn or remove. If not
61
+ * specified, it will search for existing familiars of all sub-types, and
62
+ * spawn new familiars with a sub-type of 0.
63
+ */
64
+ export function checkFamiliarFromCollectibles(player, collectibleType, familiarVariant, familiarSubType) {
65
+ const numCollectibles = player.GetCollectibleNum(collectibleType);
66
+ const effects = player.GetEffects();
67
+ // Whenever Box of Friends or Monster Manual is used, it will automatically increment the number
68
+ // of collectible effects for this familiar.
69
+ const numCollectibleEffects = effects.GetCollectibleEffectNum(collectibleType);
70
+ const targetCount = numCollectibles + numCollectibleEffects;
71
+ checkFamiliar(player, collectibleType, targetCount, familiarVariant, familiarSubType);
72
+ }
73
+ /** Helper function to get only the familiars that belong to a specific player. */
74
+ export function getPlayerFamiliars(player) {
75
+ const playerPtrHash = GetPtrHash(player);
76
+ const familiars = getFamiliars();
77
+ return familiars.filter((familiar) => {
78
+ const familiarPlayerPtrHash = GetPtrHash(familiar.Player);
79
+ return familiarPlayerPtrHash === playerPtrHash;
80
+ });
81
+ }
82
+ export function isFamiliarThatShootsPlayerTears(familiar) {
83
+ return FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET.has(familiar.Variant);
84
+ }
85
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmFtaWxpYXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvZmFtaWxpYXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUM5QyxPQUFPLEVBQUUscUNBQXFDLEVBQUUsTUFBTSwwQ0FBMEMsQ0FBQztBQUNqRyxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFaEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0Qkc7QUFDSCxNQUFNLFVBQVUsYUFBYSxDQUMzQixNQUFvQixFQUNwQixlQUFnQyxFQUNoQyxXQUFnQixFQUNoQixlQUFnQyxFQUNoQyxlQUFxQjtJQUVyQixNQUFNLGNBQWMsR0FBRyxVQUFVLENBQUMsY0FBYyxDQUFDLGVBQWUsQ0FBQyxDQUFDO0lBQ2xFLE1BQU0sQ0FBQyxhQUFhLENBQ2xCLGVBQWUsRUFDZixXQUFXLEVBQ1gsR0FBRyxFQUFFLEVBQ0wsY0FBYyxFQUNkLGVBQWUsQ0FDaEIsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EwQkc7QUFDSCxNQUFNLFVBQVUsNkJBQTZCLENBQzNDLE1BQW9CLEVBQ3BCLGVBQWdDLEVBQ2hDLGVBQWdDLEVBQ2hDLGVBQXFCO0lBRXJCLE1BQU0sZUFBZSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxlQUFlLENBQUMsQ0FBQztJQUNsRSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFcEMsZ0dBQWdHO0lBQ2hHLDRDQUE0QztJQUM1QyxNQUFNLHFCQUFxQixHQUN6QixPQUFPLENBQUMsdUJBQXVCLENBQUMsZUFBZSxDQUFDLENBQUM7SUFDbkQsTUFBTSxXQUFXLEdBQUcsZUFBZSxHQUFHLHFCQUFxQixDQUFDO0lBRTVELGFBQWEsQ0FDWCxNQUFNLEVBQ04sZUFBZSxFQUNmLFdBQVcsRUFDWCxlQUFlLEVBQ2YsZUFBZSxDQUNoQixDQUFDO0FBQ0osQ0FBQztBQUVELGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsa0JBQWtCLENBQUMsTUFBb0I7SUFDckQsTUFBTSxhQUFhLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pDLE1BQU0sU0FBUyxHQUFHLFlBQVksRUFBRSxDQUFDO0lBQ2pDLE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQyxDQUFDLFFBQVEsRUFBRSxFQUFFO1FBQ25DLE1BQU0scUJBQXFCLEdBQUcsVUFBVSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMxRCxPQUFPLHFCQUFxQixLQUFLLGFBQWEsQ0FBQztJQUNqRCxDQUFDLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsK0JBQStCLENBQzdDLFFBQXdCO0lBRXhCLE9BQU8scUNBQXFDLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNyRSxDQUFDIn0=
@@ -99,3 +99,5 @@ function ____exports.isFamiliarThatShootsPlayerTears(self, familiar)
99
99
  return FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET:has(familiar.Variant)
100
100
  end
101
101
  return ____exports
102
+
103
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL2ZhbWlsaWFycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSwwQkFBMkI7QUFBbEI7QUFDVCw2Q0FBc0Q7QUFBN0M7QUFDVCwyQkFBNkI7QUFBcEI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQlQseUNBQ0UsUUFDQSxpQkFDQSxhQUNBLGlCQUNBO0FBRU0sMkJBQWlCLFdBQVcsZUFBZTtJQUNqRCxPQUFPO1FBQ0w7UUFDQTtRQUNBO1FBQ0E7UUFDQTs7QUFiSjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0Q0EseURBQ0UsUUFDQSxpQkFDQSxpQkFDQTtBQUVNLDRCQUFrQixPQUFPLGtCQUFrQjtBQUMzQyxvQkFBVSxPQUFPO0FBSWpCLGtDQUNKLFFBQVEsd0JBQXdCO0FBQzVCLHdCQUFjLGtCQUFrQjtJQUV0Qzs7UUFDRTtRQUNBO1FBQ0E7UUFDQTtRQUNBOztBQXBCSjs7QUF5QkEsOENBQW1DO0FBQzNCLDBCQUFnQixXQUFXO0FBQzNCLHNCQUFZO0FBQ2xCLFdBQU87UUFBQTtRQUFpQixlQUFDO0FBQ2pCLDBDQUF3QixXQUFXO0FBQ3pDLG1CQUFPLHlCQUEwQjtRQUZYOztBQUgxQjtBQVNBLDJEQUNFO0FBRUEsV0FBTyxzQ0FBc0MsSUFBSTtBQUhuRCIsImZpbGUiOiJmYW1pbGlhcnMubHVhIiwic291cmNlUm9vdCI6IiJ9
@@ -0,0 +1,137 @@
1
+ import { DamageFlag } from "isaac-typescript-definitions";
2
+ /**
3
+ * Helper function to add a bit flag to an existing set of bit flags.
4
+ *
5
+ * This is a variadic function, so pass as many flags as you want to add.
6
+ *
7
+ * Example 1:
8
+ *
9
+ * ```ts
10
+ * // Give the player spectral tears
11
+ * const player = Isaac.GetPlayer();
12
+ * player.TearFlags = addFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL);
13
+ * ```
14
+ *
15
+ * Example 2:
16
+ *
17
+ * ```ts
18
+ * // Give the player spectral and homing tears
19
+ * const player = Isaac.GetPlayer();
20
+ * player.TearFlags = addFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL, TearFlags.TEAR_HOMING);
21
+ * ```
22
+ *
23
+ * @param flags The existing set of bit flags.
24
+ * @param flagsToAdd One or more bit flags to add, each as a separate argument.
25
+ * @returns The combined bit flags.
26
+ */
27
+ export function addFlag(flags, ...flagsToAdd) {
28
+ let flagsAsInt = flags;
29
+ for (const flagToAdd of flagsToAdd) {
30
+ flagsAsInt |= flagToAdd;
31
+ }
32
+ return flagsAsInt;
33
+ }
34
+ /**
35
+ * Helper function for casting a flag enum value to a `BitFlags` object.
36
+ *
37
+ * This is useful because the compiler will prevent you from assigning a specific flag to a
38
+ * `BitFlags` property. (It does this to ensure type safety, since `BitFlags` can represent a zero
39
+ * value or a composition of N flags.)
40
+ *
41
+ * For example:
42
+ *
43
+ * ```ts
44
+ * player.TearFlags = bitFlags(TearFlag.SPECTRAL);
45
+ * ```
46
+ */
47
+ export function bitFlags(flag) {
48
+ return flag;
49
+ }
50
+ /**
51
+ * Helper function to get the key associated with a particular flag.
52
+ *
53
+ * (Since bit flags are represented by custom objects instead of normal TypeScript enums, you cannot
54
+ * use the reverse mapping to find the associated key of a given enum value. Use this helper
55
+ * function instead of indexing the enum directly.)
56
+ */
57
+ export function getFlagName(flag, flagEnum) {
58
+ for (const [key, value] of pairs(flagEnum)) {
59
+ if (value === flag) {
60
+ return key;
61
+ }
62
+ }
63
+ return undefined;
64
+ }
65
+ /**
66
+ * Helper function to determine if a particular bit flag is set to true.
67
+ *
68
+ * This is a variadic function, so pass as many flags as you want to check for. If passed multiple
69
+ * flags, it will only return true if all of the flags are set.
70
+ *
71
+ * For example:
72
+ *
73
+ * ```ts
74
+ * const player = Isaac.GetPlayer();
75
+ * if (hasFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL) {
76
+ * // The player currently has spectral tears
77
+ * }
78
+ * ```
79
+ *
80
+ * @param flags The existing set of bit flags.
81
+ * @param flagsToCheck One or more bit flags to check for, each as a separate argument.
82
+ */
83
+ export function hasFlag(flags, ...flagsToCheck) {
84
+ const flagsAsInt = flags;
85
+ for (const flagToCheck of flagsToCheck) {
86
+ if (!((flagsAsInt & flagToCheck) === flagToCheck)) {
87
+ return false;
88
+ }
89
+ }
90
+ return true;
91
+ }
92
+ /**
93
+ * Helper function to check if every bit in the flag is turned off.
94
+ *
95
+ * (This is equivalent to checking if the flag is equal to 0, but this is not possible without
96
+ * casting the flag to a number.)
97
+ */
98
+ export function isEmptyFlag(flag) {
99
+ return flag === 0;
100
+ }
101
+ /**
102
+ * Helper function to determine whether damage to a player in the EntityTakeDmg callback was
103
+ * self-inflicted. For example, damage from a Curse Room door, a Razor, or a Blood Donation Machine
104
+ * would count as self-inflicted damage.
105
+ */
106
+ export function isSelfDamage(damageFlags) {
107
+ return (
108
+ // Exclude self-damage from e.g. Curse Room door spikes.
109
+ hasFlag(damageFlags, DamageFlag.NO_PENALTIES) ||
110
+ // Exclude self-damage from e.g. Razor.
111
+ hasFlag(damageFlags, DamageFlag.RED_HEARTS));
112
+ }
113
+ /**
114
+ * Helper function to remove a bit flag from an existing set of bit flags.
115
+ *
116
+ * This is a variadic function, so pass as many flags as you want to remove.
117
+ *
118
+ * For example:
119
+ *
120
+ * ```ts
121
+ * // Remove spectral tears from the player, if present
122
+ * const player = Isaac.GetPlayer();
123
+ * player.TearFlags = removeFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL);
124
+ * ```
125
+ *
126
+ * @param flags The existing set of bit flags.
127
+ * @param flagsToRemove One or more bit flags to remove, each as a separate argument.
128
+ * @returns The combined bit flags.
129
+ */
130
+ export function removeFlag(flags, ...flagsToRemove) {
131
+ let flagsAsInt = flags;
132
+ for (const flagToRemove of flagsToRemove) {
133
+ flagsAsInt &= ~flagToRemove;
134
+ }
135
+ return flagsAsInt;
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL2ZsYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTFEOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0F3Qkc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUNyQixLQUFzQixFQUN0QixHQUFHLFVBQWU7SUFFbEIsSUFBSSxVQUFVLEdBQUcsS0FBWSxDQUFDO0lBRTlCLEtBQUssTUFBTSxTQUFTLElBQUksVUFBVSxFQUFFO1FBQ2xDLFVBQVUsSUFBSSxTQUFnQixDQUFDO0tBQ2hDO0lBRUQsT0FBTyxVQUF5QixDQUFDO0FBQ25DLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFpQyxJQUFPO0lBQzlELE9BQU8sSUFBbUIsQ0FBQztBQUM3QixDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLFdBQVcsQ0FDekIsSUFBYSxFQUNiLFFBQTJCO0lBRTNCLEtBQUssTUFBTSxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsSUFBSSxLQUFLLENBQUMsUUFBUSxDQUFDLEVBQUU7UUFDMUMsSUFBSSxLQUFLLEtBQUssSUFBSSxFQUFFO1lBQ2xCLE9BQU8sR0FBRyxDQUFDO1NBQ1o7S0FDRjtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FpQkc7QUFDSCxNQUFNLFVBQVUsT0FBTyxDQUNyQixLQUFzQixFQUN0QixHQUFHLFlBQWlCO0lBRXBCLE1BQU0sVUFBVSxHQUFHLEtBQVksQ0FBQztJQUVoQyxLQUFLLE1BQU0sV0FBVyxJQUFJLFlBQVksRUFBRTtRQUN0QyxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBSSxXQUFtQixDQUFDLEtBQUssV0FBVyxDQUFDLEVBQUU7WUFDMUQsT0FBTyxLQUFLLENBQUM7U0FDZDtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUFpQyxJQUFPO0lBQ2pFLE9BQU8sSUFBSSxLQUFLLENBQUMsQ0FBQztBQUNwQixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLFdBQThDO0lBRTlDLE9BQU87SUFDTCx3REFBd0Q7SUFDeEQsT0FBTyxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsWUFBWSxDQUFDO1FBQzdDLHVDQUF1QztRQUN2QyxPQUFPLENBQUMsV0FBVyxFQUFFLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FDNUMsQ0FBQztBQUNKLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7OztHQWdCRztBQUNILE1BQU0sVUFBVSxVQUFVLENBQ3hCLEtBQXNCLEVBQ3RCLEdBQUcsYUFBa0I7SUFFckIsSUFBSSxVQUFVLEdBQUcsS0FBWSxDQUFDO0lBRTlCLEtBQUssTUFBTSxZQUFZLElBQUksYUFBYSxFQUFFO1FBQ3hDLFVBQVUsSUFBSSxDQUFDLFlBQVksQ0FBQztLQUM3QjtJQUVELE9BQU8sVUFBeUIsQ0FBQztBQUNuQyxDQUFDIn0=
@@ -122,3 +122,5 @@ function ____exports.removeFlag(self, flags, ...)
122
122
  return flagsAsInt
123
123
  end
124
124
  return ____exports
125
+
126
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL2ZsYWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZDQUEyQjtBQUFsQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBMkJULG1DQUNFO1VBQ0c7QUFFQyx1QkFBYTtBQUVqQixjQUFXLG9CQUFhO0FBQ3RCLGtDQUFjOztBQUdoQixXQUFPO0FBVlQ7Ozs7Ozs7Ozs7OztBQTBCQSxvQ0FBeUQ7QUFDdkQsV0FBTztBQURUOzs7Ozs7QUFXQSx1Q0FDRSxNQUNBO0FBRUEsUUFBWSxLQUFLLFNBQVUsTUFBTTtXQUMzQixTQUFVO0FBQ1osbUJBQU87OztBQUlYO0FBVkY7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBK0JBLG1DQUNFO1VBQ0c7QUFFRyx1QkFBYTtBQUVuQixjQUFXLHNCQUFlO2VBQ2xCLENBQUMsYUFBYyxlQUF5QjtBQUM1QyxtQkFBTzs7O0FBSVgsV0FBTztBQVpUOzs7OztBQXFCQSx1Q0FBNEQ7QUFDMUQsV0FBTyxRQUFTO0FBRGxCOzs7O0FBU0Esd0NBQ0U7QUFFQSxXQUVFLHlCQUFRLGFBQWEsNEJBRXJCLHlCQUFRLGFBQWE7QUFQekI7Ozs7Ozs7Ozs7Ozs7Ozs7QUE0QkEsc0NBQ0U7VUFDRztBQUVDLHVCQUFhO0FBRWpCLGNBQVcsdUJBQWdCO0FBQ3pCLGtDQUFjLENBQUM7O0FBR2pCLFdBQU87QUFWVCIsImZpbGUiOiJmbGFnLmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
@@ -0,0 +1,88 @@
1
+ import { CacheFlag, CollectibleType, NullItemID, PlayerType, TrinketType, } from "isaac-typescript-definitions";
2
+ import { getCollectiblesForCacheFlag } from "./collectibleCacheFlag";
3
+ import { copySet, deleteSetsFromSet } from "./set";
4
+ const FLYING_CHARACTERS = new Set([
5
+ PlayerType.AZAZEL,
6
+ PlayerType.THE_LOST,
7
+ PlayerType.THE_SOUL,
8
+ PlayerType.THE_LOST_B,
9
+ PlayerType.JACOB_2_B,
10
+ PlayerType.THE_SOUL_B, // 40
11
+ ]);
12
+ const FLYING_TRINKETS = new Set([
13
+ TrinketType.BAT_WING,
14
+ TrinketType.AZAZELS_STUMP, // 162
15
+ ]);
16
+ const FLYING_NULL_ITEMS = [
17
+ NullItemID.REVERSE_SUN,
18
+ NullItemID.SPIRIT_SHACKLES_SOUL,
19
+ NullItemID.LOST_CURSE, // 112
20
+ ];
21
+ const CONDITIONAL_FLYING_COLLECTIBLE_TYPES = [
22
+ CollectibleType.BIBLE,
23
+ CollectibleType.EMPTY_VESSEL,
24
+ CollectibleType.ASTRAL_PROJECTION,
25
+ CollectibleType.RECALL,
26
+ ];
27
+ /**
28
+ * Returns a set of all of the collectibles that grant flight. This is derived from collectibles
29
+ * that have `CacheFlag.FLYING` set in the "items.xml" file.
30
+ *
31
+ * Collectibles that only grant flight conditionally are manually pruned. Collectibles such as Empty
32
+ * Vessel should be checked for via the `hasFlyingTemporaryEffect` function.
33
+ *
34
+ * @param pruneConditionalItems Whether or not collectibles that only grant flight conditionally
35
+ * should be included in the set (like Empty Vessel).
36
+ */
37
+ export function getFlyingCollectibles(pruneConditionalItems) {
38
+ // Instead of manually compiling a list of collectibles that grant flying, we can instead
39
+ // dynamically look for collectibles that have `CacheFlag.FLYING`.
40
+ const collectiblesWithFlyingCacheFlag = getCollectiblesForCacheFlag(CacheFlag.FLYING);
41
+ // None of the collectibles with a cache of "all" grant flying, so we can safely remove them from
42
+ // the list.
43
+ const collectiblesWithAllCacheFlag = getCollectiblesForCacheFlag(CacheFlag.ALL);
44
+ deleteSetsFromSet(collectiblesWithFlyingCacheFlag, collectiblesWithAllCacheFlag);
45
+ if (pruneConditionalItems) {
46
+ for (const collectibleType of CONDITIONAL_FLYING_COLLECTIBLE_TYPES) {
47
+ collectiblesWithFlyingCacheFlag.delete(collectibleType);
48
+ }
49
+ }
50
+ return collectiblesWithFlyingCacheFlag;
51
+ }
52
+ /**
53
+ * Returns a set of all of the trinkets that grant flight. (All trinkets that grant flight do so
54
+ * conditionally, like Bat Wing.)
55
+ */
56
+ export function getFlyingTrinkets() {
57
+ // We use a different algorithm than the "getFlyingCollectibles" function because Azazel's Stump
58
+ // has a cache of "all".
59
+ return copySet(FLYING_TRINKETS);
60
+ }
61
+ export function hasFlyingTemporaryEffect(player) {
62
+ const effects = player.GetEffects();
63
+ // - Hanged Man card gives a Transcendence temporary effect.
64
+ // - Pinking Shears gives a Transcendence temporary effect.
65
+ const flyingCollectibles = getFlyingCollectibles(false);
66
+ for (const collectibleType of flyingCollectibles.values()) {
67
+ if (effects.HasCollectibleEffect(collectibleType)) {
68
+ return true;
69
+ }
70
+ }
71
+ const flyingTrinkets = getFlyingTrinkets();
72
+ for (const trinketType of flyingTrinkets.values()) {
73
+ if (effects.HasTrinketEffect(trinketType)) {
74
+ return true;
75
+ }
76
+ }
77
+ for (const nullItemID of FLYING_NULL_ITEMS) {
78
+ if (effects.HasNullEffect(nullItemID)) {
79
+ return true;
80
+ }
81
+ }
82
+ return false;
83
+ }
84
+ export function isFlyingCharacter(player) {
85
+ const character = player.GetPlayerType();
86
+ return FLYING_CHARACTERS.has(character);
87
+ }
88
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmx5aW5nLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvZmx5aW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxTQUFTLEVBQ1QsZUFBZSxFQUNmLFVBQVUsRUFDVixVQUFVLEVBQ1YsV0FBVyxHQUNaLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLDJCQUEyQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDckUsT0FBTyxFQUFFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVuRCxNQUFNLGlCQUFpQixHQUE0QixJQUFJLEdBQUcsQ0FBQztJQUN6RCxVQUFVLENBQUMsTUFBTTtJQUNqQixVQUFVLENBQUMsUUFBUTtJQUNuQixVQUFVLENBQUMsUUFBUTtJQUNuQixVQUFVLENBQUMsVUFBVTtJQUNyQixVQUFVLENBQUMsU0FBUztJQUNwQixVQUFVLENBQUMsVUFBVSxFQUFFLEtBQUs7Q0FDN0IsQ0FBQyxDQUFDO0FBRUgsTUFBTSxlQUFlLEdBQTZCLElBQUksR0FBRyxDQUFDO0lBQ3hELFdBQVcsQ0FBQyxRQUFRO0lBQ3BCLFdBQVcsQ0FBQyxhQUFhLEVBQUUsTUFBTTtDQUNsQyxDQUFDLENBQUM7QUFFSCxNQUFNLGlCQUFpQixHQUEwQjtJQUMvQyxVQUFVLENBQUMsV0FBVztJQUN0QixVQUFVLENBQUMsb0JBQW9CO0lBQy9CLFVBQVUsQ0FBQyxVQUFVLEVBQUUsTUFBTTtDQUM5QixDQUFDO0FBRUYsTUFBTSxvQ0FBb0MsR0FBK0I7SUFDdkUsZUFBZSxDQUFDLEtBQUs7SUFDckIsZUFBZSxDQUFDLFlBQVk7SUFDNUIsZUFBZSxDQUFDLGlCQUFpQjtJQUNqQyxlQUFlLENBQUMsTUFBTTtDQUN2QixDQUFDO0FBRUY7Ozs7Ozs7OztHQVNHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxxQkFBOEI7SUFFOUIseUZBQXlGO0lBQ3pGLGtFQUFrRTtJQUNsRSxNQUFNLCtCQUErQixHQUFHLDJCQUEyQixDQUNqRSxTQUFTLENBQUMsTUFBTSxDQUNqQixDQUFDO0lBRUYsaUdBQWlHO0lBQ2pHLFlBQVk7SUFDWixNQUFNLDRCQUE0QixHQUFHLDJCQUEyQixDQUM5RCxTQUFTLENBQUMsR0FBRyxDQUNkLENBQUM7SUFDRixpQkFBaUIsQ0FDZiwrQkFBK0IsRUFDL0IsNEJBQTRCLENBQzdCLENBQUM7SUFFRixJQUFJLHFCQUFxQixFQUFFO1FBQ3pCLEtBQUssTUFBTSxlQUFlLElBQUksb0NBQW9DLEVBQUU7WUFDbEUsK0JBQStCLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ3pEO0tBQ0Y7SUFFRCxPQUFPLCtCQUErQixDQUFDO0FBQ3pDLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCO0lBQy9CLGdHQUFnRztJQUNoRyx3QkFBd0I7SUFDeEIsT0FBTyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELE1BQU0sVUFBVSx3QkFBd0IsQ0FBQyxNQUFvQjtJQUMzRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUM7SUFFcEMsNERBQTREO0lBQzVELDJEQUEyRDtJQUMzRCxNQUFNLGtCQUFrQixHQUFHLHFCQUFxQixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ3hELEtBQUssTUFBTSxlQUFlLElBQUksa0JBQWtCLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDekQsSUFBSSxPQUFPLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLEVBQUU7WUFDakQsT0FBTyxJQUFJLENBQUM7U0FDYjtLQUNGO0lBRUQsTUFBTSxjQUFjLEdBQUcsaUJBQWlCLEVBQUUsQ0FBQztJQUMzQyxLQUFLLE1BQU0sV0FBVyxJQUFJLGNBQWMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtRQUNqRCxJQUFJLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsRUFBRTtZQUN6QyxPQUFPLElBQUksQ0FBQztTQUNiO0tBQ0Y7SUFFRCxLQUFLLE1BQU0sVUFBVSxJQUFJLGlCQUFpQixFQUFFO1FBQzFDLElBQUksT0FBTyxDQUFDLGFBQWEsQ0FBQyxVQUFVLENBQUMsRUFBRTtZQUNyQyxPQUFPLElBQUksQ0FBQztTQUNiO0tBQ0Y7SUFFRCxPQUFPLEtBQUssQ0FBQztBQUNmLENBQUM7QUFFRCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsTUFBb0I7SUFDcEQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLGFBQWEsRUFBRSxDQUFDO0lBQ3pDLE9BQU8saUJBQWlCLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQzFDLENBQUMifQ==
@@ -75,3 +75,5 @@ function ____exports.isFlyingCharacter(self, player)
75
75
  return FLYING_CHARACTERS:has(character)
76
76
  end
77
77
  return ____exports
78
+
79
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL2ZseWluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLDZDQU1PO0FBTEw7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUVGLGlDQUE0QztBQUFuQztBQUNULGdCQUEyQztBQUFsQztBQUFTO0FBRVosMEJBQTZDLFVBQUksS0FBSTtJQUN6RDtJQUNBO0lBQ0E7SUFDQTtJQUNBO0lBQ0E7O0FBR0ksd0JBQTRDLFVBQUksS0FBSSxDQUN4RCxzQkFDQTtBQUdJLDBCQUEyQyxDQUMvQyx3QkFDQSxpQ0FDQTtBQUdJLDZDQUFtRSxDQUN2RSx1QkFDQSw4QkFDQSxtQ0FDQTs7Ozs7Ozs7O0FBYUYsaURBQ0U7QUFJTSw0Q0FBa0MsaUNBQ3RDO0FBS0kseUNBQStCLGlDQUNuQztJQUVGLHVCQUNFLGlDQUNBO09BR0U7QUFDRixrQkFBVywwQkFBbUI7WUFDNUIsZ0NBQWdDLE9BQU87OztBQUkzQyxXQUFPO0FBekJUOzs7QUFnQ0E7QUFHRSxXQUFPLGFBQVE7QUFIakI7QUFNQSxvREFBeUM7QUFDakMsb0JBQVUsT0FBTztBQUlqQiwrQkFBcUIsdUNBQXNCO0FBQ2pELGNBQVcsbUJBQW1CLGtDQUFtQjtXQUMzQyxRQUFRLHFCQUFxQjtBQUMvQixtQkFBTzs7O0FBSUwsMkJBQWlCO0FBQ3ZCLGNBQVcsZUFBZSw4QkFBZTtXQUNuQyxRQUFRLGlCQUFpQjtBQUMzQixtQkFBTzs7O0FBSVgsY0FBVyxxQkFBYztXQUNuQixRQUFRLGNBQWM7QUFDeEIsbUJBQU87OztBQUlYLFdBQU87QUF6QlQ7QUE0QkEsNkNBQWtDO0FBQzFCLHNCQUFZLE9BQU87QUFDekIsV0FBTyxrQkFBa0IsSUFBSTtBQUYvQiIsImZpbGUiOiJmbHlpbmcubHVhIiwic291cmNlUm9vdCI6IiJ9