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,53 @@
1
+ import { Challenge, PlayerType } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { FIRST_CHARACTER } from "../constantsFirstLast";
4
+ import { log } from "./log";
5
+ /**
6
+ * Whether or not the player is playing on a set seed (i.e. that they entered in a specific seed by
7
+ * pressing tab on the character selection screen). When the player resets the game on a set seed,
8
+ * the game will not switch to a different seed.
9
+ */
10
+ export function onSetSeed() {
11
+ const seeds = game.GetSeeds();
12
+ const customRun = seeds.IsCustomRun();
13
+ const challenge = Isaac.GetChallenge();
14
+ return challenge === Challenge.NULL && customRun;
15
+ }
16
+ /**
17
+ * Helper function to restart the run using the console command of "restart". If the player is
18
+ * playing a seeded run, then it will restart the game to the beginning of the seed. Otherwise, it
19
+ * will put the player on a run with an entirely new seed.
20
+ *
21
+ * You can optionally specify a `PlayerType` to restart the game as that character.
22
+ */
23
+ export function restart(character) {
24
+ if (character === undefined) {
25
+ const command = "restart";
26
+ log(`Restarting the run with a console command of: ${command}`);
27
+ Isaac.ExecuteCommand(command);
28
+ return;
29
+ }
30
+ if (character < FIRST_CHARACTER) {
31
+ error(`Restarting as a character of ${character} would crash the game.`);
32
+ }
33
+ const command = `restart ${character}`;
34
+ log(`Restarting the run as PlayerType.${PlayerType[character]} (${character}) with a console command of: ${command}`);
35
+ Isaac.ExecuteCommand(command);
36
+ }
37
+ /**
38
+ * Helper function to change the run status to that of an unseeded run with a new random seed.
39
+ *
40
+ * This is useful to revert the behavior where playing on a set and restarting the game will not
41
+ * take you to a new seed.
42
+ */
43
+ export function setUnseeded() {
44
+ const seeds = game.GetSeeds();
45
+ // Invoking the `Seeds.Reset` method will cause the start seed to be set to 0. Subsequently, the
46
+ // `Seeds.GetStartSeed` method will return 0, and can cause crashes (due to RNG objects not being
47
+ // able to handle a seed of 0). It also causes the log to be spammed with: "[ASSERT] - Error: Game
48
+ // Start Seed was not set." Thus, we must immediately re-initialize the game start seed by using
49
+ // the `Seeds.Restart` method.
50
+ seeds.Reset();
51
+ seeds.Restart(Challenge.NULL);
52
+ }
53
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVuLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvcnVuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsVUFBVSxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDckUsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUN4RCxPQUFPLEVBQUUsR0FBRyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTVCOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsU0FBUztJQUN2QixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsTUFBTSxTQUFTLEdBQUcsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3RDLE1BQU0sU0FBUyxHQUFHLEtBQUssQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUV2QyxPQUFPLFNBQVMsS0FBSyxTQUFTLENBQUMsSUFBSSxJQUFJLFNBQVMsQ0FBQztBQUNuRCxDQUFDO0FBRUQ7Ozs7OztHQU1HO0FBQ0gsTUFBTSxVQUFVLE9BQU8sQ0FBQyxTQUFzQjtJQUM1QyxJQUFJLFNBQVMsS0FBSyxTQUFTLEVBQUU7UUFDM0IsTUFBTSxPQUFPLEdBQUcsU0FBUyxDQUFDO1FBQzFCLEdBQUcsQ0FBQyxpREFBaUQsT0FBTyxFQUFFLENBQUMsQ0FBQztRQUNoRSxLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBQzlCLE9BQU87S0FDUjtJQUVELElBQUksU0FBUyxHQUFHLGVBQWUsRUFBRTtRQUMvQixLQUFLLENBQUMsZ0NBQWdDLFNBQVMsd0JBQXdCLENBQUMsQ0FBQztLQUMxRTtJQUVELE1BQU0sT0FBTyxHQUFHLFdBQVcsU0FBUyxFQUFFLENBQUM7SUFDdkMsR0FBRyxDQUNELG9DQUFvQyxVQUFVLENBQUMsU0FBUyxDQUFDLEtBQUssU0FBUyxnQ0FBZ0MsT0FBTyxFQUFFLENBQ2pILENBQUM7SUFDRixLQUFLLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ2hDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxXQUFXO0lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUU5QixnR0FBZ0c7SUFDaEcsaUdBQWlHO0lBQ2pHLGtHQUFrRztJQUNsRyxnR0FBZ0c7SUFDaEcsOEJBQThCO0lBQzlCLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUNkLEtBQUssQ0FBQyxPQUFPLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ2hDLENBQUMifQ==
package/functions/run.lua CHANGED
@@ -46,3 +46,5 @@ function ____exports.setUnseeded(self)
46
46
  seeds:Restart(Challenge.NULL)
47
47
  end
48
48
  return ____exports
49
+
50
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3J1bi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsNkNBQXNDO0FBQTdCO0FBQVc7QUFDcEIsMEJBQXFCO0FBQVo7QUFDVCwrQkFBZ0M7QUFBdkI7QUFDVCxnQkFBb0I7QUFBWDs7OztBQU9UO0FBQ1Esa0JBQVEsS0FBSztBQUNiLHNCQUFZLE1BQU07QUFDbEIsc0JBQVk7QUFFbEIsV0FBTyxhQUFjLG1CQUFrQjtBQUx6Qzs7Ozs7O0FBZUEsbUNBQXdCO09BQ2xCO0FBQ0ksd0JBQVU7UUFDaEIsSUFBSSxvREFBaUQ7UUFDckQscUJBQXFCO0FBQ3JCOztPQUdFLFlBQVk7UUFDZCxPQUFNLDRDQUFnQyxlQUFTOztBQUczQyxvQkFBVSx1QkFBVztJQUMzQixRQUNFLGdEQUFvQyxXQUFXLGdCQUFVLGtCQUFLLGVBQVMsb0NBQWdDO0lBRXpHLHFCQUFxQjtBQWhCdkI7Ozs7O0FBeUJBO0FBQ1Esa0JBQVEsS0FBSztJQU9uQixNQUFNO0lBQ04sTUFBTSxRQUFRO0FBVGhCIiwiZmlsZSI6InJ1bi5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1,104 @@
1
+ import { CollectibleType, PlayerType, TrinketType, } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { getCollectibleSet } from "./collectibleSet";
4
+ import { anyPlayerHasCollectible, getPlayersOfType } from "./player";
5
+ import { mapGetPlayer, mapSetPlayer } from "./playerDataStructures";
6
+ import { getPlayers } from "./playerIndex";
7
+ import { repeat } from "./utils";
8
+ const COLLECTIBLES_THAT_AFFECT_ITEM_POOLS = [
9
+ CollectibleType.CHAOS,
10
+ CollectibleType.SACRED_ORB,
11
+ CollectibleType.TMTRAINER, // 721
12
+ ];
13
+ const TRINKETS_THAT_AFFECT_ITEM_POOLS = [
14
+ TrinketType.NO,
15
+ ];
16
+ /**
17
+ * Helper function to see if the given collectible is unlocked on the player's save file. This
18
+ * requires providing the corresponding item pool that the collectible is located in.
19
+ *
20
+ * - If any player currently has the item, then it is assumed to be unlocked. (This is because Eden
21
+ * may have randomly started with the provided collectible, and it will be subsequently removed
22
+ * from all pools.)
23
+ * - If the collectible is located in more than one item pool, then any item pool can be provided.
24
+ * - If the collectible is not located in any item pools, then this function will always return
25
+ * false.
26
+ * - If any player is Tainted Lost, they will be temporarily changed to Isaac and then temporarily
27
+ * changed back (because Tainted Lost is not able to retrieve some collectibles from item pools).
28
+ */
29
+ export function isCollectibleUnlocked(collectibleTypeToCheckFor, itemPoolToCheckFor) {
30
+ // If Eden is holding this collectible, then it is obviously unlocked (and it will also be removed
31
+ // from pools, so the below check won't work).
32
+ if (anyPlayerHasCollectible(collectibleTypeToCheckFor)) {
33
+ return true;
34
+ }
35
+ // On Tainted Lost, it is impossible to retrieve non-offensive collectibles from pools, so we
36
+ // temporarily change the character to Isaac.
37
+ const taintedLosts = getPlayersOfType(PlayerType.THE_LOST_B);
38
+ for (const player of taintedLosts) {
39
+ player.ChangePlayerType(PlayerType.ISAAC);
40
+ }
41
+ // Before checking the item pools, remove any collectibles or trinkets that affect retrieved
42
+ // collectible types.
43
+ const removedItemsMap = new Map();
44
+ const removedTrinketsMap = new Map();
45
+ for (const player of getPlayers()) {
46
+ const removedItems = [];
47
+ for (const itemToRemove of COLLECTIBLES_THAT_AFFECT_ITEM_POOLS) {
48
+ if (player.HasCollectible(itemToRemove)) {
49
+ const numCollectibles = player.GetCollectibleNum(itemToRemove);
50
+ repeat(numCollectibles, () => {
51
+ player.RemoveCollectible(itemToRemove);
52
+ removedItems.push(itemToRemove);
53
+ });
54
+ }
55
+ }
56
+ mapSetPlayer(removedItemsMap, player, removedItems);
57
+ const removedTrinkets = [];
58
+ for (const trinketToRemove of TRINKETS_THAT_AFFECT_ITEM_POOLS) {
59
+ if (player.HasTrinket(trinketToRemove)) {
60
+ const numTrinkets = player.GetTrinketMultiplier(trinketToRemove);
61
+ repeat(numTrinkets, () => {
62
+ player.TryRemoveTrinket(trinketToRemove);
63
+ removedTrinkets.push(trinketToRemove);
64
+ });
65
+ }
66
+ }
67
+ mapSetPlayer(removedTrinketsMap, player, removedTrinkets);
68
+ }
69
+ // Blacklist every collectible in the game except for the provided collectible.
70
+ const itemPool = game.GetItemPool();
71
+ const collectibleSet = getCollectibleSet();
72
+ for (const collectibleType of collectibleSet.values()) {
73
+ if (collectibleType !== collectibleTypeToCheckFor) {
74
+ itemPool.AddRoomBlacklist(collectibleType);
75
+ }
76
+ }
77
+ // Get a collectible from the pool and see if it is the intended collectible. (We can use any
78
+ // arbitrary value as the seed since it should not influence the result.)
79
+ const retrievedCollectibleType = itemPool.GetCollectible(itemPoolToCheckFor, false, 1);
80
+ const collectibleUnlocked = retrievedCollectibleType === collectibleTypeToCheckFor;
81
+ // Reset the blacklist
82
+ itemPool.ResetRoomBlacklist();
83
+ // Give back items/trinkets, if necessary.
84
+ for (const player of getPlayers()) {
85
+ const removedItems = mapGetPlayer(removedItemsMap, player);
86
+ if (removedItems !== undefined) {
87
+ for (const collectibleType of removedItems) {
88
+ player.AddCollectible(collectibleType, 0, false); // Prevent Chaos from spawning pickups
89
+ }
90
+ }
91
+ const removedTrinkets = mapGetPlayer(removedTrinketsMap, player);
92
+ if (removedTrinkets !== undefined) {
93
+ for (const trinketType of removedTrinkets) {
94
+ player.AddTrinket(trinketType, false);
95
+ }
96
+ }
97
+ }
98
+ // Change any players back to Tainted Lost, if necessary.
99
+ for (const player of taintedLosts) {
100
+ player.ChangePlayerType(PlayerType.THE_LOST_B);
101
+ }
102
+ return collectibleUnlocked;
103
+ }
104
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2F2ZUZpbGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zYXZlRmlsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsZUFBZSxFQUVmLFVBQVUsRUFDVixXQUFXLEdBQ1osTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFeEMsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDckQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLGdCQUFnQixFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3JFLE9BQU8sRUFBRSxZQUFZLEVBQUUsWUFBWSxFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFDcEUsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sU0FBUyxDQUFDO0FBRWpDLE1BQU0sbUNBQW1DLEdBQStCO0lBQ3RFLGVBQWUsQ0FBQyxLQUFLO0lBQ3JCLGVBQWUsQ0FBQyxVQUFVO0lBQzFCLGVBQWUsQ0FBQyxTQUFTLEVBQUUsTUFBTTtDQUNsQyxDQUFDO0FBRUYsTUFBTSwrQkFBK0IsR0FBMkI7SUFDOUQsV0FBVyxDQUFDLEVBQUU7Q0FDZixDQUFDO0FBRUY7Ozs7Ozs7Ozs7OztHQVlHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyx5QkFBMEMsRUFDMUMsa0JBQWdDO0lBRWhDLGtHQUFrRztJQUNsRyw4Q0FBOEM7SUFDOUMsSUFBSSx1QkFBdUIsQ0FBQyx5QkFBeUIsQ0FBQyxFQUFFO1FBQ3RELE9BQU8sSUFBSSxDQUFDO0tBQ2I7SUFFRCw2RkFBNkY7SUFDN0YsNkNBQTZDO0lBQzdDLE1BQU0sWUFBWSxHQUFHLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztJQUM3RCxLQUFLLE1BQU0sTUFBTSxJQUFJLFlBQVksRUFBRTtRQUNqQyxNQUFNLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDO0tBQzNDO0lBRUQsNEZBQTRGO0lBQzVGLHFCQUFxQjtJQUNyQixNQUFNLGVBQWUsR0FBRyxJQUFJLEdBQUcsRUFBa0MsQ0FBQztJQUNsRSxNQUFNLGtCQUFrQixHQUFHLElBQUksR0FBRyxFQUE4QixDQUFDO0lBQ2pFLEtBQUssTUFBTSxNQUFNLElBQUksVUFBVSxFQUFFLEVBQUU7UUFDakMsTUFBTSxZQUFZLEdBQXNCLEVBQUUsQ0FBQztRQUMzQyxLQUFLLE1BQU0sWUFBWSxJQUFJLG1DQUFtQyxFQUFFO1lBQzlELElBQUksTUFBTSxDQUFDLGNBQWMsQ0FBQyxZQUFZLENBQUMsRUFBRTtnQkFDdkMsTUFBTSxlQUFlLEdBQUcsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUMvRCxNQUFNLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtvQkFDM0IsTUFBTSxDQUFDLGlCQUFpQixDQUFDLFlBQVksQ0FBQyxDQUFDO29CQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO2dCQUNsQyxDQUFDLENBQUMsQ0FBQzthQUNKO1NBQ0Y7UUFFRCxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUMsQ0FBQztRQUVwRCxNQUFNLGVBQWUsR0FBa0IsRUFBRSxDQUFDO1FBQzFDLEtBQUssTUFBTSxlQUFlLElBQUksK0JBQStCLEVBQUU7WUFDN0QsSUFBSSxNQUFNLENBQUMsVUFBVSxDQUFDLGVBQWUsQ0FBQyxFQUFFO2dCQUN0QyxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsb0JBQW9CLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ2pFLE1BQU0sQ0FBQyxXQUFXLEVBQUUsR0FBRyxFQUFFO29CQUN2QixNQUFNLENBQUMsZ0JBQWdCLENBQUMsZUFBZSxDQUFDLENBQUM7b0JBQ3pDLGVBQWUsQ0FBQyxJQUFJLENBQUMsZUFBZSxDQUFDLENBQUM7Z0JBQ3hDLENBQUMsQ0FBQyxDQUFDO2FBQ0o7U0FDRjtRQUVELFlBQVksQ0FBQyxrQkFBa0IsRUFBRSxNQUFNLEVBQUUsZUFBZSxDQUFDLENBQUM7S0FDM0Q7SUFFRCwrRUFBK0U7SUFDL0UsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO0lBQ3BDLE1BQU0sY0FBYyxHQUFHLGlCQUFpQixFQUFFLENBQUM7SUFDM0MsS0FBSyxNQUFNLGVBQWUsSUFBSSxjQUFjLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDckQsSUFBSSxlQUFlLEtBQUsseUJBQXlCLEVBQUU7WUFDakQsUUFBUSxDQUFDLGdCQUFnQixDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQzVDO0tBQ0Y7SUFFRCw2RkFBNkY7SUFDN0YseUVBQXlFO0lBQ3pFLE1BQU0sd0JBQXdCLEdBQUcsUUFBUSxDQUFDLGNBQWMsQ0FDdEQsa0JBQWtCLEVBQ2xCLEtBQUssRUFDTCxDQUFTLENBQ1YsQ0FBQztJQUVGLE1BQU0sbUJBQW1CLEdBQ3ZCLHdCQUF3QixLQUFLLHlCQUF5QixDQUFDO0lBRXpELHNCQUFzQjtJQUN0QixRQUFRLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztJQUU5QiwwQ0FBMEM7SUFDMUMsS0FBSyxNQUFNLE1BQU0sSUFBSSxVQUFVLEVBQUUsRUFBRTtRQUNqQyxNQUFNLFlBQVksR0FBRyxZQUFZLENBQUMsZUFBZSxFQUFFLE1BQU0sQ0FBQyxDQUFDO1FBQzNELElBQUksWUFBWSxLQUFLLFNBQVMsRUFBRTtZQUM5QixLQUFLLE1BQU0sZUFBZSxJQUFJLFlBQVksRUFBRTtnQkFDMUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsc0NBQXNDO2FBQ3pGO1NBQ0Y7UUFFRCxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDakUsSUFBSSxlQUFlLEtBQUssU0FBUyxFQUFFO1lBQ2pDLEtBQUssTUFBTSxXQUFXLElBQUksZUFBZSxFQUFFO2dCQUN6QyxNQUFNLENBQUMsVUFBVSxDQUFDLFdBQVcsRUFBRSxLQUFLLENBQUMsQ0FBQzthQUN2QztTQUNGO0tBQ0Y7SUFFRCx5REFBeUQ7SUFDekQsS0FBSyxNQUFNLE1BQU0sSUFBSSxZQUFZLEVBQUU7UUFDakMsTUFBTSxDQUFDLGdCQUFnQixDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQztLQUNoRDtJQUVELE9BQU8sbUJBQW1CLENBQUM7QUFDN0IsQ0FBQyJ9
@@ -106,3 +106,5 @@ function ____exports.isCollectibleUnlocked(self, collectibleTypeToCheckFor, item
106
106
  return collectibleUnlocked
107
107
  end
108
108
  return ____exports
109
+
110
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NhdmVGaWxlLnRzIl0sIm5hbWVzIjpbInJlcGVhdCJdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSw2Q0FLTztBQUpMO0FBRUE7QUFDQTtBQUVGLDBCQUFxQjtBQUFaO0FBRVQsMkJBQWtDO0FBQXpCO0FBQ1QsbUJBQTBEO0FBQWpEO0FBQXlCO0FBQ2xDLGlDQUEyQztBQUFsQztBQUFjO0FBQ3ZCLHdCQUEyQjtBQUFsQjtBQUNULGtCQUF1QjtBQUFkLE1BQUFBO0FBRUgsNENBQWtFLENBQ3RFLHVCQUNBLDRCQUNBO0FBR0ksd0NBQTBELENBQzlEOzs7Ozs7Ozs7Ozs7QUFnQkYsaURBQ0UsMkJBQ0E7T0FJSSw2QkFBd0I7QUFDMUIsZUFBTzs7QUFLSCx5QkFBZSxzQkFBaUI7QUFDdEMsY0FBVyxpQkFBVTtRQUNuQixPQUFPLGlCQUFpQjs7QUFLcEIsNEJBQWtCLFVBQUk7QUFDdEIsK0JBQXFCLFVBQUk7QUFDL0IsY0FBVyxpQkFBVTtBQUNiLDZCQUFrQztBQUN4QyxrQkFBVyx1QkFBZ0I7ZUFDckIsT0FBTyxlQUFlO0FBQ2xCLHdDQUFrQixPQUFPLGtCQUFrQjtnQkFDakQsQUFBQUE7O29CQUFPO29CQUFpQjt3QkFDdEIsT0FBTyxrQkFBa0I7QUFDekIsMERBQWtCO29CQUZJOzs7O1FBTzVCLGtCQUFhLGlCQUFpQixRQUFRO0FBRWhDLGdDQUFpQztBQUN2QyxrQkFBVywwQkFBbUI7ZUFDeEIsT0FBTyxXQUFXO0FBQ2Qsb0NBQWMsT0FBTyxxQkFBcUI7Z0JBQ2hELEFBQUFBOztvQkFBTztvQkFBYTt3QkFDbEIsT0FBTyxpQkFBaUI7QUFDeEIsZ0VBQXFCO29CQUZIOzs7O1FBT3hCLGtCQUFhLG9CQUFvQixRQUFROztBQUlyQyxxQkFBVyxLQUFLO0FBQ2hCLDJCQUFpQjtBQUN2QixjQUFXLG1CQUFtQiw4QkFBZTtXQUN2QyxtQkFBb0I7WUFDdEIsU0FBUyxpQkFBaUI7OztBQU14QixxQ0FBMkIsU0FBUyxlQUN4QyxvQkFDQSxPQUNBO0FBR0ksZ0NBQ0osNEJBQTZCO0lBRy9CLFNBQVM7QUFHVCxjQUFXLGlCQUFVO0FBQ2IsNkJBQWUsa0JBQWEsaUJBQWlCO1dBQy9DO0FBQ0Ysc0JBQVcsMEJBQW1CO2dCQUM1QixPQUFPLGVBQWUsaUJBQWlCLEdBQUc7OztBQUl4QyxnQ0FBa0Isa0JBQWEsb0JBQW9CO1dBQ3JEO0FBQ0Ysc0JBQVcsc0JBQWU7Z0JBQ3hCLE9BQU8sV0FBVyxhQUFhOzs7O0FBTXJDLGNBQVcsaUJBQVU7UUFDbkIsT0FBTyxpQkFBaUI7O0FBRzFCLFdBQU87QUE5RlQiLCJmaWxlIjoic2F2ZUZpbGUubHVhIiwic291cmNlUm9vdCI6IiJ9
@@ -0,0 +1,18 @@
1
+ import { game } from "../cachedClasses";
2
+ import { newRNG } from "./rng";
3
+ /** Alias for the `Seeds.GetStartSeedString` method. */
4
+ export function getStartSeedString() {
5
+ const seeds = game.GetSeeds();
6
+ return seeds.GetStartSeedString();
7
+ }
8
+ /**
9
+ * Helper function to get the next seed value.
10
+ *
11
+ * This function is useful when you are working with seed values directly over RNG objects.
12
+ */
13
+ export function nextSeed(seed) {
14
+ const rng = newRNG(seed);
15
+ rng.Next();
16
+ return rng.GetSeed();
17
+ }
18
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VlZHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zZWVkcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUUvQix1REFBdUQ7QUFDdkQsTUFBTSxVQUFVLGtCQUFrQjtJQUNoQyxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsT0FBTyxLQUFLLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNwQyxDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsSUFBVTtJQUNqQyxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDekIsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQ1gsT0FBTyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDdkIsQ0FBQyJ9
@@ -17,3 +17,5 @@ function ____exports.nextSeed(self, seed)
17
17
  return rng:GetSeed()
18
18
  end
19
19
  return ____exports
20
+
21
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NlZWRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSwwQkFBcUI7QUFBWjtBQUNULGdCQUF1QjtBQUFkOztBQUdUO0FBQ1Esa0JBQVEsS0FBSztBQUNuQixXQUFPLE1BQU07QUFGZjs7OztBQVVBLG9DQUF5QjtBQUNqQixnQkFBTSxZQUFPO0lBQ25CLElBQUk7QUFDSixXQUFPLElBQUk7QUFIYiIsImZpbGUiOiJzZWVkcy5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1,52 @@
1
+ import { SerializationType } from "../enums/SerializationType";
2
+ import { ISAAC_API_CLASS_TYPE_TO_BRAND } from "../objects/isaacAPIClassTypeToBrand";
3
+ import { ISAAC_API_CLASS_TYPE_TO_COPY_FUNCTION } from "../objects/isaacAPIClassTypeToCopyFunction";
4
+ import { SERIALIZED_ISAAC_API_CLASS_TYPE_TO_IDENTITY_FUNCTION } from "../objects/serializedIsaacAPIClassTypeToIdentityFunction";
5
+ import { getIsaacAPIClassName } from "./isaacAPIClass";
6
+ import { isTable, isUserdata } from "./types";
7
+ export function copyIsaacAPIClass(isaacAPIClass, serializationType) {
8
+ if (!isUserdata(isaacAPIClass)) {
9
+ error(`Failed to copy an Isaac API class since the provided object was of type: ${typeof isaacAPIClass}`);
10
+ }
11
+ const isaacAPIClassType = getIsaacAPIClassName(isaacAPIClass);
12
+ if (isaacAPIClassType === undefined) {
13
+ error("Failed to copy an Isaac API class since it does not have a class type.");
14
+ }
15
+ const copyableIsaacAPIClassType = isaacAPIClassType;
16
+ const copyFunction = ISAAC_API_CLASS_TYPE_TO_COPY_FUNCTION[copyableIsaacAPIClassType];
17
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
18
+ if (copyFunction === undefined) {
19
+ error(`Failed to copy Isaac API class "${copyableIsaacAPIClassType}" since there is not a defined copy function for this class type.`);
20
+ }
21
+ return copyFunction(isaacAPIClass, serializationType);
22
+ }
23
+ /**
24
+ * Deserialization is a special case, so we make a dedicated function for this.
25
+ *
26
+ * There is no need for a corresponding "serializeIsaacAPIClass" function because the
27
+ * "copyIsaacAPIClass" function can handle all serialization types.
28
+ */
29
+ export function deserializeIsaacAPIClass(serializedIsaacAPIClass) {
30
+ if (!isTable(serializedIsaacAPIClass)) {
31
+ error(`Failed to deserialize an Isaac API class since the provided object was of type: ${typeof serializedIsaacAPIClass}`);
32
+ }
33
+ const copyableIsaacAPIClassType = getSerializedTableType(serializedIsaacAPIClass);
34
+ if (copyableIsaacAPIClassType === undefined) {
35
+ error("Failed to deserialize an API class since a valid class type brand was not found.");
36
+ }
37
+ const copyFunction = ISAAC_API_CLASS_TYPE_TO_COPY_FUNCTION[copyableIsaacAPIClassType];
38
+ return copyFunction(serializedIsaacAPIClass, SerializationType.DESERIALIZE);
39
+ }
40
+ function getSerializedTableType(serializedIsaacAPIClass) {
41
+ for (const [copyableIsaacAPIClassType, serializationBrand] of Object.entries(ISAAC_API_CLASS_TYPE_TO_BRAND)) {
42
+ if (serializedIsaacAPIClass.has(serializationBrand)) {
43
+ return copyableIsaacAPIClassType;
44
+ }
45
+ }
46
+ return undefined;
47
+ }
48
+ export function isSerializedIsaacAPIClass(object) {
49
+ const identityFunctions = Object.values(SERIALIZED_ISAAC_API_CLASS_TYPE_TO_IDENTITY_FUNCTION);
50
+ return identityFunctions.some((identityFunction) => identityFunction(object));
51
+ }
52
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VyaWFsaXphdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDL0QsT0FBTyxFQUFFLDZCQUE2QixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDcEYsT0FBTyxFQUFFLHFDQUFxQyxFQUFFLE1BQU0sNENBQTRDLENBQUM7QUFDbkcsT0FBTyxFQUFFLG9EQUFvRCxFQUFFLE1BQU0sMERBQTBELENBQUM7QUFFaEksT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0saUJBQWlCLENBQUM7QUFDdkQsT0FBTyxFQUFFLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFOUMsTUFBTSxVQUFVLGlCQUFpQixDQUMvQixhQUFzQixFQUN0QixpQkFBb0M7SUFFcEMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsRUFBRTtRQUM5QixLQUFLLENBQ0gsNEVBQTRFLE9BQU8sYUFBYSxFQUFFLENBQ25HLENBQUM7S0FDSDtJQUVELE1BQU0saUJBQWlCLEdBQUcsb0JBQW9CLENBQUMsYUFBYSxDQUFDLENBQUM7SUFDOUQsSUFBSSxpQkFBaUIsS0FBSyxTQUFTLEVBQUU7UUFDbkMsS0FBSyxDQUNILHdFQUF3RSxDQUN6RSxDQUFDO0tBQ0g7SUFFRCxNQUFNLHlCQUF5QixHQUM3QixpQkFBOEMsQ0FBQztJQUNqRCxNQUFNLFlBQVksR0FDaEIscUNBQXFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSx1RUFBdUU7SUFDdkUsSUFBSSxZQUFZLEtBQUssU0FBUyxFQUFFO1FBQzlCLEtBQUssQ0FDSCxtQ0FBbUMseUJBQXlCLG1FQUFtRSxDQUNoSSxDQUFDO0tBQ0g7SUFFRCxPQUFPLFlBQVksQ0FBQyxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUN4RCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsd0JBQXdCLENBQ3RDLHVCQUFnRDtJQUVoRCxJQUFJLENBQUMsT0FBTyxDQUFDLHVCQUF1QixDQUFDLEVBQUU7UUFDckMsS0FBSyxDQUNILG1GQUFtRixPQUFPLHVCQUF1QixFQUFFLENBQ3BILENBQUM7S0FDSDtJQUVELE1BQU0seUJBQXlCLEdBQUcsc0JBQXNCLENBQ3RELHVCQUF1QixDQUN4QixDQUFDO0lBQ0YsSUFBSSx5QkFBeUIsS0FBSyxTQUFTLEVBQUU7UUFDM0MsS0FBSyxDQUNILGtGQUFrRixDQUNuRixDQUFDO0tBQ0g7SUFFRCxNQUFNLFlBQVksR0FDaEIscUNBQXFDLENBQUMseUJBQXlCLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FBQyx1QkFBdUIsRUFBRSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUM5RSxDQUFDO0FBRUQsU0FBUyxzQkFBc0IsQ0FDN0IsdUJBQWdEO0lBRWhELEtBQUssTUFBTSxDQUFDLHlCQUF5QixFQUFFLGtCQUFrQixDQUFDLElBQUksTUFBTSxDQUFDLE9BQU8sQ0FDMUUsNkJBQTZCLENBQzlCLEVBQUU7UUFDRCxJQUFJLHVCQUF1QixDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFO1lBQ25ELE9BQU8seUJBQXNELENBQUM7U0FDL0Q7S0FDRjtJQUVELE9BQU8sU0FBUyxDQUFDO0FBQ25CLENBQUM7QUFFRCxNQUFNLFVBQVUseUJBQXlCLENBQ3ZDLE1BQWU7SUFFZixNQUFNLGlCQUFpQixHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQ3JDLG9EQUFvRCxDQUNyRCxDQUFDO0lBQ0YsT0FBTyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxFQUFFLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUNoRixDQUFDIn0=
@@ -66,3 +66,5 @@ function ____exports.isSerializedIsaacAPIClass(self, object)
66
66
  )
67
67
  end
68
68
  return ____exports
69
+
70
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NlcmlhbGl6YXRpb24udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7O01BcUVTO0FBcEVULDhCQUFrQztBQUF6QjtBQUNULHFDQUE4QztBQUFyQztBQUNULDRDQUFzRDtBQUE3QztBQUNULDBEQUFxRTtBQUE1RDtBQUVULDBCQUFxQztBQUE1QjtBQUNULGtCQUFvQztBQUEzQjtBQUFTO0FBOERsQixTQUFTLDZCQUNQO0FBRUEsa0NBQThELG9CQUM1RDtjQURVO2NBQTJCO1dBR2pDLHdCQUE0QjtBQUM5QixtQkFBTzs7O0FBSVg7O0FBdkVGLDZDQUNFLGVBQ0E7V0FFSyxnQkFBVztRQUNkLE1BQ0UsK0VBQTRFLGFBQU87O0FBSWpGLDhCQUFvQiwwQkFBcUI7T0FDM0M7UUFDRixNQUNFOztBQUlFLHNDQUNKO0FBQ0kseUJBQ0osc0NBQXNDO09BRXBDO1FBQ0YsT0FDRSx1Q0FBbUMsOEJBQXlCOztBQUloRSxXQUFPLGtCQUFhLGVBQWU7QUE1QnJDOzs7OztBQXFDQSxvREFDRTtXQUVLLGFBQVE7UUFDWCxNQUNFLHNGQUFtRixhQUFPOztBQUl4RixzQ0FBNEIsNEJBQ2hDO09BRUU7UUFDRixNQUNFOztBQUlFLHlCQUNKLHNDQUFzQztBQUN4QyxXQUFPLGtCQUFhLHlCQUF5QjtBQXBCL0M7QUFxQ0EscURBQ0U7QUFFTSw4QkFBb0IsbUJBQ3hCO0FBRUYsV0FBTztRQUFBO1FBQXVCLGVBQUMsa0JBQXFCLDZCQUFpQixPQUF2Qzs7QUFOaEMiLCJmaWxlIjoic2VyaWFsaXphdGlvbi5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1,99 @@
1
+ import { getArrayCombinations, getRandomArrayElement } from "./array";
2
+ import { getRandomSeed } from "./rng";
3
+ /**
4
+ * Helper function to add all of the values in one set to another set. The first set passed will be
5
+ * modified in place.
6
+ *
7
+ * This function is variadic, meaning that you can specify N sets to add to the first set.
8
+ */
9
+ export function addSetsToSet(mainSet, ...setsToAdd) {
10
+ for (const set of setsToAdd) {
11
+ for (const value of set.values()) {
12
+ mainSet.add(value);
13
+ }
14
+ }
15
+ }
16
+ /**
17
+ * Helper function to create a new set that is the composition of two or more sets.
18
+ *
19
+ * This function is variadic, meaning that you can specify N sets.
20
+ */
21
+ export function combineSets(...sets) {
22
+ const newSet = new Set();
23
+ for (const set of sets) {
24
+ for (const value of set.values()) {
25
+ newSet.add(value);
26
+ }
27
+ }
28
+ return newSet;
29
+ }
30
+ /** Helper function to copy a set. (You can also use a Set constructor to accomplish this task.) */
31
+ export function copySet(oldSet) {
32
+ const newSet = new Set();
33
+ for (const value of oldSet.values()) {
34
+ newSet.add(value);
35
+ }
36
+ return newSet;
37
+ }
38
+ /**
39
+ * Helper function to delete all of the values in one set from another set. The first set passed
40
+ * will be modified in place.
41
+ *
42
+ * This function is variadic, meaning that you can specify N sets to remove from the first set.
43
+ */
44
+ export function deleteSetsFromSet(mainSet, ...setsToRemove) {
45
+ for (const set of setsToRemove) {
46
+ for (const value of set.values()) {
47
+ mainSet.delete(value);
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Helper function to get a random element from the provided set.
53
+ *
54
+ * @param set The set to get an element from.
55
+ * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
56
+ * `RNG.Next` method will be called. Default is `getRandomSeed()`.
57
+ * @param exceptions Optional. An array of elements to skip over if selected.
58
+ */
59
+ export function getRandomSetElement(set, seedOrRNG = getRandomSeed(), exceptions = []) {
60
+ const array = getSortedSetValues(set);
61
+ return getRandomArrayElement(array, seedOrRNG, exceptions);
62
+ }
63
+ /**
64
+ * Helper function to get all possible combinations of the given set. This includes the combination
65
+ * of an empty set.
66
+ *
67
+ * For example, if this function is provided a set containing 1, 2, and 3, then it will return an
68
+ * array containing the following sets:
69
+ *
70
+ * - [] (if `includeEmptyArray` is set to true)
71
+ * - [1]
72
+ * - [2]
73
+ * - [3]
74
+ * - [1, 2]
75
+ * - [1, 3]
76
+ * - [2, 3]
77
+ * - [1, 2, 3]
78
+ *
79
+ * @param set The set to get the combinations of.
80
+ * @param includeEmptyArray Whether or not to include an empty array in the combinations.
81
+ */
82
+ export function getSetCombinations(set, includeEmptyArray) {
83
+ const values = getSortedSetValues(set);
84
+ const combinations = getArrayCombinations(values, includeEmptyArray);
85
+ return combinations.map((array) => new Set(array));
86
+ }
87
+ /**
88
+ * Helper function to get a sorted array based on the contents of a set.
89
+ *
90
+ * Normally, set values are returned in a random order, so use this function when the ordering of
91
+ * the contents is important.
92
+ */
93
+ export function getSortedSetValues(set) {
94
+ const values = set.values();
95
+ const array = [...values];
96
+ array.sort();
97
+ return array;
98
+ }
99
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvc2V0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxxQkFBcUIsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUN0RSxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRXRDOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FDMUIsT0FBZSxFQUNmLEdBQUcsU0FBeUM7SUFFNUMsS0FBSyxNQUFNLEdBQUcsSUFBSSxTQUFTLEVBQUU7UUFDM0IsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNwQjtLQUNGO0FBQ0gsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsV0FBVyxDQUN6QixHQUFHLElBQW9DO0lBRXZDLE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFLLENBQUM7SUFDNUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLEVBQUU7UUFDdEIsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUNuQjtLQUNGO0lBRUQsT0FBTyxNQUFNLENBQUM7QUFDaEIsQ0FBQztBQUVELG1HQUFtRztBQUNuRyxNQUFNLFVBQVUsT0FBTyxDQUFJLE1BQStCO0lBQ3hELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFLLENBQUM7SUFDNUIsS0FBSyxNQUFNLEtBQUssSUFBSSxNQUFNLENBQUMsTUFBTSxFQUFFLEVBQUU7UUFDbkMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztLQUNuQjtJQUVELE9BQU8sTUFBTSxDQUFDO0FBQ2hCLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxpQkFBaUIsQ0FDL0IsT0FBZSxFQUNmLEdBQUcsWUFBNEM7SUFFL0MsS0FBSyxNQUFNLEdBQUcsSUFBSSxZQUFZLEVBQUU7UUFDOUIsS0FBSyxNQUFNLEtBQUssSUFBSSxHQUFHLENBQUMsTUFBTSxFQUFFLEVBQUU7WUFDaEMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztTQUN2QjtLQUNGO0FBQ0gsQ0FBQztBQUVEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLFVBQVUsbUJBQW1CLENBQ2pDLEdBQTRCLEVBQzVCLFlBQXdCLGFBQWEsRUFBRSxFQUN2QyxhQUFpQyxFQUFFO0lBRW5DLE1BQU0sS0FBSyxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RDLE9BQU8scUJBQXFCLENBQUMsS0FBSyxFQUFFLFNBQVMsRUFBRSxVQUFVLENBQUMsQ0FBQztBQUM3RCxDQUFDO0FBRUQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtCRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FDaEMsR0FBNEIsRUFDNUIsaUJBQTBCO0lBRTFCLE1BQU0sTUFBTSxHQUFHLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sWUFBWSxHQUFHLG9CQUFvQixDQUFDLE1BQU0sRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0lBRXJFLE9BQU8sWUFBWSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNyRCxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsa0JBQWtCLENBQUksR0FBNEI7SUFDaEUsTUFBTSxNQUFNLEdBQUcsR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBQzVCLE1BQU0sS0FBSyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQztJQUMxQixLQUFLLENBQUMsSUFBSSxFQUFFLENBQUM7SUFFYixPQUFPLEtBQUssQ0FBQztBQUNmLENBQUMifQ==
package/functions/set.lua CHANGED
@@ -108,3 +108,5 @@ function ____exports.getSetCombinations(self, set, includeEmptyArray)
108
108
  )
109
109
  end
110
110
  return ____exports
111
+
112
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NldC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQUFBLGtCQUE0RDtBQUFuRDtBQUFzQjtBQUMvQixnQkFBOEI7QUFBckI7Ozs7O0FBb0hULDhDQUFzQztBQUM5QixtQkFBUyxJQUFJO0FBQ2Isa0JBQVEsQ0FBQyxhQUFHO0lBQ2xCO0FBRUEsV0FBTztBQUxUOzs7OztBQTVHQSx3Q0FDRTtVQUNHO0FBRUgsY0FBVyxjQUFPO0FBQ2hCLGtCQUFXLFNBQVMsbUJBQUk7WUFDdEIsUUFBUSxJQUFJOzs7QUFObEI7Ozs7QUFnQkE7VUFDSztBQUVHLG1CQUFTLFVBQUk7QUFDbkIsY0FBVyxjQUFPO0FBQ2hCLGtCQUFXLFNBQVMsbUJBQUk7WUFDdEIsT0FBTyxJQUFJOzs7QUFJZixXQUFPO0FBVlQ7O0FBY0EsbUNBQTJCO0FBQ25CLG1CQUFTLFVBQUk7QUFDbkIsY0FBVyxTQUFTLHNCQUFPO1FBQ3pCLE9BQU8sSUFBSTs7QUFHYixXQUFPO0FBTlQ7Ozs7O0FBZUEsNkNBQ0U7VUFDRztBQUVILGNBQVcsY0FBTztBQUNoQixrQkFBVyxTQUFTLG1CQUFJO1lBQ3RCLFFBQVEsT0FBTzs7O0FBTnJCOzs7Ozs7O0FBbUJBLCtDQUNFLEtBQ0EsV0FDQTtPQURBO1FBQUEsWUFBd0I7O09BQ3hCO1FBQUEsYUFBaUM7O0FBRTNCLGtCQUFRLG9DQUFtQjtBQUNqQyxXQUFPLDJCQUFzQixPQUFPLFdBQVc7QUFOakQ7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQTRCQSw4Q0FDRSxLQUNBO0FBRU0sbUJBQVMsb0NBQW1CO0FBQzVCLHlCQUFlLDBCQUFxQixRQUFRO0FBRWxELFdBQU87UUFBQTtRQUFpQixlQUFDLE9BQVUsaUJBQUksS0FBSSxNQUFuQjs7QUFQMUIiLCJmaWxlIjoic2V0Lmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
@@ -0,0 +1,9 @@
1
+ import { SoundEffect } from "isaac-typescript-definitions";
2
+ import { sfxManager } from "../cachedClasses";
3
+ import { getEnumValues } from "./enums";
4
+ export function stopAllSoundEffects() {
5
+ for (const soundEffect of getEnumValues(SoundEffect)) {
6
+ sfxManager.Stop(soundEffect);
7
+ }
8
+ }
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic291bmQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9zb3VuZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sOEJBQThCLENBQUM7QUFDM0QsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBQzlDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFFeEMsTUFBTSxVQUFVLG1CQUFtQjtJQUNqQyxLQUFLLE1BQU0sV0FBVyxJQUFJLGFBQWEsQ0FBQyxXQUFXLENBQUMsRUFBRTtRQUNwRCxVQUFVLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0tBQzlCO0FBQ0gsQ0FBQyJ9
@@ -11,3 +11,5 @@ function ____exports.stopAllSoundEffects(self)
11
11
  end
12
12
  end
13
13
  return ____exports
14
+
15
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NvdW5kLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSw2Q0FBNEI7QUFBbkI7QUFDVCwwQkFBMkI7QUFBbEI7QUFDVCxrQkFBOEI7QUFBckI7QUFFVDtBQUNFLGNBQVcsc0JBQWUsbUJBQWM7UUFDdEMsV0FBVyxLQUFLOztBQUZwQiIsImZpbGUiOiJzb3VuZC5sdWEiLCJzb3VyY2VSb290IjoiIn0=
@@ -0,0 +1,66 @@
1
+ import { CollectibleType, PickupVariant, PlayerType, } from "isaac-typescript-definitions";
2
+ import { VectorZero } from "../constants";
3
+ import { preventCollectibleRotation } from "../features/preventCollectibleRotation";
4
+ import { areFeaturesInitialized } from "../featuresInitialized";
5
+ import { setCollectibleEmpty } from "./collectibles";
6
+ import { isQuestCollectible } from "./collectibleTag";
7
+ import { spawnPickupWithSeed } from "./entitySpecific";
8
+ import { anyPlayerIs } from "./player";
9
+ import { getRandomSeed, isRNG } from "./rng";
10
+ /**
11
+ * Helper function to spawn a collectible. Use this instead of the `Game.Spawn` method because it
12
+ * handles the cases of Tainted Keeper collectibles costing coins and preventing quest items from
13
+ * being rotated by Tainted Isaac's rotation mechanic. (Rotation prevention will only occur in
14
+ * upgraded mods.)
15
+ *
16
+ * @param collectibleType The collectible type to spawn.
17
+ * @param position The position to spawn the collectible at.
18
+ * @param seedOrRNG Optional. The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
19
+ * `RNG.Next` method will be called. Default is `getRandomSeed()`.
20
+ * @param options Optional. Set to true to make the collectible a "There's Options" style
21
+ * collectible. Default is false.
22
+ * @param forceFreeItem Optional. Set to true to disable the logic that gives the item a price for
23
+ * Tainted Keeper. Default is false.
24
+ * @param spawner Optional.
25
+ */
26
+ export function spawnCollectible(collectibleType, position, seedOrRNG = getRandomSeed(), options = false, forceFreeItem = false, spawner) {
27
+ const seed = isRNG(seedOrRNG) ? seedOrRNG.Next() : seedOrRNG;
28
+ const collectible = spawnPickupWithSeed(PickupVariant.COLLECTIBLE, collectibleType, position, seed, VectorZero, spawner);
29
+ if (options) {
30
+ collectible.OptionsPickupIndex = 1;
31
+ }
32
+ if (anyPlayerIs(PlayerType.KEEPER_B) &&
33
+ !isQuestCollectible(collectibleType) &&
34
+ !forceFreeItem) {
35
+ // When playing Tainted Keeper, collectibles are supposed to have a price, and manually spawned
36
+ // items will not have a price, so we have to set it manually.
37
+ // Setting the shop item ID in this way prevents the bug where the item will sometimes change to
38
+ // 99 cents.
39
+ collectible.ShopItemId = -1;
40
+ // We can set the price to any arbitrary value; it will auto-update to the true price on the
41
+ // next frame.
42
+ collectible.Price = 15;
43
+ }
44
+ if (isQuestCollectible(collectibleType) && areFeaturesInitialized()) {
45
+ preventCollectibleRotation(collectible, collectibleType);
46
+ }
47
+ return collectible;
48
+ }
49
+ /**
50
+ * Helper function to spawn an empty collectible. Doing this is tricky since spawning a collectible
51
+ * with `CollectibleType.NULL` will result in spawning a collectible with a random type from the
52
+ * current room's item pool.
53
+ *
54
+ * Instead, this function arbitrarily spawns a collectible with `CollectibleType.SAD_ONION`, and
55
+ * then converts it to an empty pedestal afterward.
56
+ *
57
+ * @param position The position to spawn the empty collectible at.
58
+ * @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
59
+ * `RNG.Next` method will be called. Default is `getRandomSeed()`.
60
+ */
61
+ export function spawnEmptyCollectible(position, seedOrRNG = getRandomSeed()) {
62
+ const collectible = spawnCollectible(CollectibleType.SAD_ONION, position, seedOrRNG, false, true);
63
+ setCollectibleEmpty(collectible);
64
+ return collectible;
65
+ }
66
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3Bhd25Db2xsZWN0aWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NwYXduQ29sbGVjdGlibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFFZixhQUFhLEVBQ2IsVUFBVSxHQUNYLE1BQU0sOEJBQThCLENBQUM7QUFDdEMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUMxQyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUNwRixPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSx3QkFBd0IsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN2RCxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQ3ZDLE9BQU8sRUFBRSxhQUFhLEVBQUUsS0FBSyxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRTdDOzs7Ozs7Ozs7Ozs7Ozs7R0FlRztBQUNILE1BQU0sVUFBVSxnQkFBZ0IsQ0FDOUIsZUFBZ0MsRUFDaEMsUUFBZ0IsRUFDaEIsWUFBd0IsYUFBYSxFQUFFLEVBQ3ZDLE9BQU8sR0FBRyxLQUFLLEVBQ2YsYUFBYSxHQUFHLEtBQUssRUFDckIsT0FBZ0I7SUFFaEIsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQztJQUM3RCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FDckMsYUFBYSxDQUFDLFdBQVcsRUFDekIsZUFBZSxFQUNmLFFBQVEsRUFDUixJQUFJLEVBQ0osVUFBVSxFQUNWLE9BQU8sQ0FDbUIsQ0FBQztJQUU3QixJQUFJLE9BQU8sRUFBRTtRQUNYLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxDQUFDLENBQUM7S0FDcEM7SUFFRCxJQUNFLFdBQVcsQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDO1FBQ2hDLENBQUMsa0JBQWtCLENBQUMsZUFBZSxDQUFDO1FBQ3BDLENBQUMsYUFBYSxFQUNkO1FBQ0EsK0ZBQStGO1FBQy9GLDhEQUE4RDtRQUU5RCxnR0FBZ0c7UUFDaEcsWUFBWTtRQUNaLFdBQVcsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFFNUIsNEZBQTRGO1FBQzVGLGNBQWM7UUFDZCxXQUFXLENBQUMsS0FBSyxHQUFHLEVBQWlCLENBQUM7S0FDdkM7SUFFRCxJQUFJLGtCQUFrQixDQUFDLGVBQWUsQ0FBQyxJQUFJLHNCQUFzQixFQUFFLEVBQUU7UUFDbkUsMEJBQTBCLENBQUMsV0FBVyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzFEO0lBRUQsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQztBQUVEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBTSxVQUFVLHFCQUFxQixDQUNuQyxRQUFnQixFQUNoQixZQUF3QixhQUFhLEVBQUU7SUFFdkMsTUFBTSxXQUFXLEdBQUcsZ0JBQWdCLENBQ2xDLGVBQWUsQ0FBQyxTQUFTLEVBQ3pCLFFBQVEsRUFDUixTQUFTLEVBQ1QsS0FBSyxFQUNMLElBQUksQ0FDTCxDQUFDO0lBQ0YsbUJBQW1CLENBQUMsV0FBVyxDQUFDLENBQUM7SUFFakMsT0FBTyxXQUFXLENBQUM7QUFDckIsQ0FBQyJ9
@@ -92,3 +92,5 @@ function ____exports.spawnEmptyCollectible(self, position, seedOrRNG)
92
92
  return collectible
93
93
  end
94
94
  return ____exports
95
+
96
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3NwYXduQ29sbGVjdGlibGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLDZDQUtPO0FBSkw7QUFFQTtBQUNBO0FBRUYsc0JBQTJCO0FBQWxCO0FBQ1QsdUNBQTJDO0FBQWxDO0FBQ1QsZ0NBQXVDO0FBQTlCO0FBQ1QseUJBQW9DO0FBQTNCO0FBQ1QsMkJBQW1DO0FBQTFCO0FBQ1QsMkJBQW9DO0FBQTNCO0FBQ1QsbUJBQTRCO0FBQW5CO0FBQ1QsZ0JBQXFDO0FBQTVCO0FBQWU7Ozs7Ozs7Ozs7Ozs7OztBQWtCeEIsNENBQ0UsaUJBQ0EsVUFDQSxXQUNBLFNBQ0EsZUFDQTtPQUhBO1FBQUEsWUFBd0I7O09BQ3hCO1FBQUEsVUFBVTs7T0FDVjtRQUFBLGdCQUFnQjs7QUFHVixpQkFBTyxXQUFNLGVBQWEsVUFBVSxVQUFTO0FBQzdDLHdCQUFjOztRQUNsQjtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O09BR0U7QUFDRix5Q0FBaUM7O09BSWpDLGlCQUFZLDZCQUNYLHdCQUFtQix5QkFDbkI7QUFPRCxrQ0FBMEI7QUFJMUIsNEJBQW9COztPQUdsQix3QkFBbUIscUJBQW9CO1FBQ3pDLGdDQUEyQixhQUFhOztBQUcxQyxXQUFPO0FBM0NUOzs7Ozs7Ozs7OztBQTBEQSxpREFDRSxVQUNBO09BQUE7UUFBQSxZQUF3Qjs7QUFFbEIsd0JBQWM7O1FBQ2xCO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O0lBRUYseUJBQW9CO0FBRXBCLFdBQU87QUFiVCIsImZpbGUiOiJzcGF3bkNvbGxlY3RpYmxlLmx1YSIsInNvdXJjZVJvb3QiOiIifQ==
@@ -0,0 +1,80 @@
1
+ import { EMPTY_PNG_PATH, VectorZero } from "../constants";
2
+ import { kColorEquals } from "./kColor";
3
+ import { erange } from "./utils";
4
+ /**
5
+ * Helper function to clear all layers or specific layers from a sprite.
6
+ *
7
+ * This function is variadic, so pass as many layer IDs as you want to clear. If no specific layers
8
+ * are passed, it will clear every layer.
9
+ *
10
+ * Since there is no official API method to "clear" a sprite, we can work around it by setting the
11
+ * spritesheet to a non-existent or completely transparent file. If the path to the spritesheet does
12
+ * not exist, then this function might cause spurious errors to appear in the "log.txt file". To
13
+ * silence these errors, create a transparent 1 pixel PNG file in your mod's resources folder at the
14
+ * path corresponding to the "EMPTY_PNG_PATH" constant.
15
+ */
16
+ export function clearSprite(sprite, ...layerIDs) {
17
+ if (layerIDs.length === 0) {
18
+ const numLayers = sprite.GetLayerCount();
19
+ layerIDs = erange(numLayers);
20
+ }
21
+ for (const layerID of layerIDs) {
22
+ sprite.ReplaceSpritesheet(layerID, EMPTY_PNG_PATH);
23
+ }
24
+ sprite.LoadGraphics();
25
+ }
26
+ /**
27
+ * Helper function that returns the number of the final frame in a particular animation for a
28
+ * sprite. By default, it will use the currently playing animation, but you can also specify a
29
+ * specific animation to check.
30
+ *
31
+ * Note that this function is bugged with the Stop Watch or the Broken Watch, since using the
32
+ * `Sprite.SetFrame` method will reset the internal accumulator used to slow down the playback speed
33
+ * of the animation. (The `PlaybackSpeed` property of the sprite is not used.) Thus, it is only safe
34
+ * to use this function on animations that are not slowed down by Stop Watch or Broken Watch, such
35
+ * as player animations.
36
+ */
37
+ export function getLastFrameOfAnimation(sprite, animation) {
38
+ // Record the current sprite status.
39
+ const currentAnimation = sprite.GetAnimation();
40
+ const currentFrame = sprite.GetFrame();
41
+ // Get the final frame.
42
+ if (animation !== undefined && animation !== currentAnimation) {
43
+ sprite.SetAnimation(animation);
44
+ }
45
+ sprite.SetLastFrame();
46
+ const finalFrame = sprite.GetFrame();
47
+ // Set the sprite back to the way it was.
48
+ if (animation !== undefined && animation !== currentAnimation) {
49
+ sprite.Play(currentAnimation, true);
50
+ }
51
+ sprite.SetFrame(currentFrame);
52
+ return finalFrame;
53
+ }
54
+ /**
55
+ * Helper function to check if two sprite layers have the same sprite sheet by using the
56
+ * `Sprite.GetTexel` method.
57
+ *
58
+ * Since checking every single texel in the entire sprite is very expensive, this function requires
59
+ * that you provide a range of specific texels to check.
60
+ */
61
+ export function spriteEquals(sprite1, sprite2, layerID, xStart, xFinish, xIncrement, yStart, yFinish, yIncrement) {
62
+ // Iterate over N texels, checking for equality at each step. The center of the sprite is equal to
63
+ // the "pivot" point in the anm2 file.
64
+ for (let x = xStart; x <= xFinish; x += xIncrement) {
65
+ for (let y = yStart; y <= yFinish; y += yIncrement) {
66
+ const position = Vector(x, y);
67
+ if (!texelEquals(sprite1, sprite2, position, layerID)) {
68
+ return false;
69
+ }
70
+ }
71
+ }
72
+ return true;
73
+ }
74
+ /** Helper function to check if two texels on a sprite are equivalent to each other. */
75
+ export function texelEquals(sprite1, sprite2, position, layerID) {
76
+ const kColor1 = sprite1.GetTexel(position, VectorZero, 1, layerID);
77
+ const kColor2 = sprite2.GetTexel(position, VectorZero, 1, layerID);
78
+ return kColorEquals(kColor1, kColor2);
79
+ }
80
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ByaXRlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvc3ByaXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxjQUFjLEVBQUUsVUFBVSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBQzFELE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDeEMsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVqQzs7Ozs7Ozs7Ozs7R0FXRztBQUNILE1BQU0sVUFBVSxXQUFXLENBQUMsTUFBYyxFQUFFLEdBQUcsUUFBZTtJQUM1RCxJQUFJLFFBQVEsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFO1FBQ3pCLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUN6QyxRQUFRLEdBQUcsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQzlCO0lBRUQsS0FBSyxNQUFNLE9BQU8sSUFBSSxRQUFRLEVBQUU7UUFDOUIsTUFBTSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxjQUFjLENBQUMsQ0FBQztLQUNwRDtJQUVELE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztBQUN4QixDQUFDO0FBRUQ7Ozs7Ozs7Ozs7R0FVRztBQUNILE1BQU0sVUFBVSx1QkFBdUIsQ0FDckMsTUFBYyxFQUNkLFNBQWtCO0lBRWxCLG9DQUFvQztJQUNwQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUMvQyxNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFdkMsdUJBQXVCO0lBQ3ZCLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssZ0JBQWdCLEVBQUU7UUFDN0QsTUFBTSxDQUFDLFlBQVksQ0FBQyxTQUFTLENBQUMsQ0FBQztLQUNoQztJQUNELE1BQU0sQ0FBQyxZQUFZLEVBQUUsQ0FBQztJQUN0QixNQUFNLFVBQVUsR0FBRyxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7SUFFckMseUNBQXlDO0lBQ3pDLElBQUksU0FBUyxLQUFLLFNBQVMsSUFBSSxTQUFTLEtBQUssZ0JBQWdCLEVBQUU7UUFDN0QsTUFBTSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUNyQztJQUNELE1BQU0sQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLENBQUM7SUFFOUIsT0FBTyxVQUFVLENBQUM7QUFDcEIsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxZQUFZLENBQzFCLE9BQWUsRUFDZixPQUFlLEVBQ2YsT0FBWSxFQUNaLE1BQVcsRUFDWCxPQUFZLEVBQ1osVUFBZSxFQUNmLE1BQVcsRUFDWCxPQUFZLEVBQ1osVUFBZTtJQUVmLGtHQUFrRztJQUNsRyxzQ0FBc0M7SUFDdEMsS0FBSyxJQUFJLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxJQUFJLE9BQU8sRUFBRSxDQUFDLElBQUksVUFBVSxFQUFFO1FBQ2xELEtBQUssSUFBSSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxJQUFJLFVBQVUsRUFBRTtZQUNsRCxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLEVBQUU7Z0JBQ3JELE9BQU8sS0FBSyxDQUFDO2FBQ2Q7U0FDRjtLQUNGO0lBRUQsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDO0FBRUQsdUZBQXVGO0FBQ3ZGLE1BQU0sVUFBVSxXQUFXLENBQ3pCLE9BQWUsRUFDZixPQUFlLEVBQ2YsUUFBZ0IsRUFDaEIsT0FBWTtJQUVaLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsUUFBUSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDbkUsTUFBTSxPQUFPLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsVUFBVSxFQUFFLENBQUMsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUNuRSxPQUFPLFlBQVksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDeEMsQ0FBQyJ9
@@ -87,3 +87,5 @@ function ____exports.spriteEquals(self, sprite1, sprite2, layerID, xStart, xFini
87
87
  return true
88
88
  end
89
89
  return ____exports
90
+
91
+ --# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2lzYWFjc2NyaXB0LWNvbW1vbi9zcmMvZnVuY3Rpb25zL3Nwcml0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUEsc0JBQTJDO0FBQWxDO0FBQWdCO0FBQ3pCLG1CQUE2QjtBQUFwQjtBQUNULGtCQUF1QjtBQUFkOztBQStGVCx1Q0FDRSxTQUNBLFNBQ0EsVUFDQTtBQUVNLG9CQUFVLFFBQVEsU0FBUyxVQUFVLFlBQVksR0FBRztBQUNwRCxvQkFBVSxRQUFRLFNBQVMsVUFBVSxZQUFZLEdBQUc7QUFDMUQsV0FBTyxrQkFBYSxTQUFTO0FBUi9COzs7Ozs7Ozs7OztBQWpGQSx1Q0FBNEI7VUFBbUI7T0FDekMsYUFBb0I7QUFDaEIsMEJBQVksT0FBTztBQUN6QixtQkFBVyxZQUFPOztBQUdwQixjQUFXLGtCQUFXO1FBQ3BCLE9BQU8sbUJBQW1CLFNBQVM7O0lBR3JDLE9BQU87QUFWVDs7Ozs7Ozs7OztBQXdCQSxtREFDRSxRQUNBO0FBR00sNkJBQW1CLE9BQU87QUFDMUIseUJBQWUsT0FBTztPQUd4QixxQkFBMkIsYUFBYztRQUMzQyxPQUFPLGFBQWE7O0lBRXRCLE9BQU87QUFDRCx1QkFBYSxPQUFPO09BR3RCLHFCQUEyQixhQUFjO1FBQzNDLE9BQU8sS0FBSyxrQkFBa0I7O0lBRWhDLE9BQU8sU0FBUztBQUVoQixXQUFPO0FBckJUOzs7Ozs7QUErQkEsd0NBQ0UsU0FDQSxTQUNBLFNBQ0EsUUFDQSxTQUNBLFlBQ0EsUUFDQSxTQUNBOztBQUlTLGtCQUFJO2NBQVEsS0FBSzs7QUFDZiwwQkFBSTtzQkFBUSxLQUFLO0FBQ2xCLHFDQUFXLE9BQU8sR0FBRzsyQkFDdEI7O3dCQUFZO3dCQUFTO3dCQUFTO3dCQUFVOztBQUMzQywrQkFBTzs7QUFId0IsNEJBQUs7OztBQURQLG9CQUFLOzs7QUFTeEMsV0FBTztBQXRCVCIsImZpbGUiOiJzcHJpdGUubHVhIiwic291cmNlUm9vdCI6IiJ9