isaacscript-common 4.0.0 → 4.0.3

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 (398) hide show
  1. package/cachedClasses.ts +39 -0
  2. package/callbacks/customRevive.lua +2 -1
  3. package/callbacks/customRevive.ts +215 -0
  4. package/callbacks/itemPickup.ts +101 -0
  5. package/callbacks/postAmbush.ts +73 -0
  6. package/callbacks/postBombExploded.ts +26 -0
  7. package/callbacks/postBombInitLate.ts +36 -0
  8. package/callbacks/postBoneSwing.ts +64 -0
  9. package/callbacks/postCollectibleInitFirst.ts +40 -0
  10. package/callbacks/postCursedTeleport.lua +2 -1
  11. package/callbacks/postCursedTeleport.ts +185 -0
  12. package/callbacks/postCustomDoorEnter.lua +0 -7
  13. package/callbacks/postCustomDoorEnter.ts +292 -0
  14. package/callbacks/postDiceRoomActivated.ts +60 -0
  15. package/callbacks/postDoorRender.ts +26 -0
  16. package/callbacks/postDoorUpdate.ts +26 -0
  17. package/callbacks/postEffectInitLate.ts +36 -0
  18. package/callbacks/postEffectStateChanged.ts +43 -0
  19. package/callbacks/postEsauJr.lua +2 -1
  20. package/callbacks/postEsauJr.ts +109 -0
  21. package/callbacks/postFamiliarInitLate.ts +36 -0
  22. package/callbacks/postFamiliarStateChanged.ts +43 -0
  23. package/callbacks/postFlip.lua +4 -3
  24. package/callbacks/postFlip.ts +90 -0
  25. package/callbacks/postGreedModeWave.ts +41 -0
  26. package/callbacks/postGridEntity.ts +164 -0
  27. package/callbacks/postGridEntityCollision.ts +69 -0
  28. package/callbacks/postGridEntityRender.ts +26 -0
  29. package/callbacks/postHolyMantleRemoved.ts +55 -0
  30. package/callbacks/postItemDischarged.lua +4 -3
  31. package/callbacks/postItemDischarged.ts +154 -0
  32. package/callbacks/postKnifeInitLate.ts +36 -0
  33. package/callbacks/postLaserInitLate.ts +36 -0
  34. package/callbacks/postNPCInitLate.ts +36 -0
  35. package/callbacks/postNPCStateChanged.ts +42 -0
  36. package/callbacks/postNewRoomEarly.lua +2 -1
  37. package/callbacks/postNewRoomEarly.ts +96 -0
  38. package/callbacks/postPickupCollect.ts +48 -0
  39. package/callbacks/postPickupInitFirst.ts +70 -0
  40. package/callbacks/postPickupInitLate.ts +36 -0
  41. package/callbacks/postPickupStateChanged.ts +43 -0
  42. package/callbacks/postPitRender.ts +26 -0
  43. package/callbacks/postPitUpdate.ts +26 -0
  44. package/callbacks/postPlayerChangeHealth.ts +62 -0
  45. package/callbacks/postPlayerChangeType.ts +56 -0
  46. package/callbacks/postPlayerCollectible.ts +113 -0
  47. package/callbacks/postPlayerFatalDamage.ts +141 -0
  48. package/callbacks/postPlayerInitLate.ts +37 -0
  49. package/callbacks/postPlayerReordered.ts +142 -0
  50. package/callbacks/postPoopRender.ts +26 -0
  51. package/callbacks/postPoopUpdate.ts +26 -0
  52. package/callbacks/postPressurePlateRender.ts +26 -0
  53. package/callbacks/postPressurePlateUpdate.ts +26 -0
  54. package/callbacks/postProjectileInitLate.ts +36 -0
  55. package/callbacks/postPurchase.ts +64 -0
  56. package/callbacks/postRockRender.ts +26 -0
  57. package/callbacks/postRockUpdate.ts +26 -0
  58. package/callbacks/postRoomClearChanged.ts +57 -0
  59. package/callbacks/postSacrifice.lua +3 -2
  60. package/callbacks/postSacrifice.ts +64 -0
  61. package/callbacks/postSlotDestroyed.ts +92 -0
  62. package/callbacks/postSlotInitUpdate.ts +68 -0
  63. package/callbacks/postSlotRender.ts +69 -0
  64. package/callbacks/postSpikesRender.ts +26 -0
  65. package/callbacks/postSpikesUpdate.ts +26 -0
  66. package/callbacks/postTNTRender.ts +26 -0
  67. package/callbacks/postTNTUpdate.ts +26 -0
  68. package/callbacks/postTearInitLate.ts +36 -0
  69. package/callbacks/postTearInitVeryLate.ts +41 -0
  70. package/callbacks/postTransformation.ts +59 -0
  71. package/callbacks/postTrinketBreak.lua +3 -2
  72. package/callbacks/postTrinketBreak.ts +112 -0
  73. package/callbacks/preBerserkDeath.ts +49 -0
  74. package/callbacks/preNewLevel.ts +55 -0
  75. package/callbacks/reorderedCallbacks.lua +1 -0
  76. package/callbacks/reorderedCallbacks.ts +168 -0
  77. package/callbacks/subscriptions/postAmbushFinished.ts +32 -0
  78. package/callbacks/subscriptions/postAmbushStarted.ts +32 -0
  79. package/callbacks/subscriptions/postBombInitLate.ts +32 -0
  80. package/callbacks/subscriptions/postBoneExploded.ts +32 -0
  81. package/callbacks/subscriptions/postBoneSwing.ts +24 -0
  82. package/callbacks/subscriptions/postCollectibleInitFirst.ts +37 -0
  83. package/callbacks/subscriptions/postCursedTeleport.ts +24 -0
  84. package/callbacks/subscriptions/postCustomDoorEnter.ts +45 -0
  85. package/callbacks/subscriptions/postCustomRevive.ts +36 -0
  86. package/callbacks/subscriptions/postDiceRoomActivated.ts +38 -0
  87. package/callbacks/subscriptions/postDoorRender.ts +35 -0
  88. package/callbacks/subscriptions/postDoorUpdate.ts +35 -0
  89. package/callbacks/subscriptions/postEffectInitLate.ts +32 -0
  90. package/callbacks/subscriptions/postEffectStateChanged.ts +40 -0
  91. package/callbacks/subscriptions/postEsauJr.ts +24 -0
  92. package/callbacks/subscriptions/postFamiliarInitLate.ts +32 -0
  93. package/callbacks/subscriptions/postFamiliarStateChanged.ts +40 -0
  94. package/callbacks/subscriptions/postFirstEsauJr.ts +24 -0
  95. package/callbacks/subscriptions/postFirstFlip.ts +24 -0
  96. package/callbacks/subscriptions/postFlip.ts +22 -0
  97. package/callbacks/subscriptions/postGameStartedReordered.ts +24 -0
  98. package/callbacks/subscriptions/postGreedModeWave.ts +24 -0
  99. package/callbacks/subscriptions/postGridEntityBroken.ts +51 -0
  100. package/callbacks/subscriptions/postGridEntityCollision.ts +54 -0
  101. package/callbacks/subscriptions/postGridEntityInit.ts +51 -0
  102. package/callbacks/subscriptions/postGridEntityRemove.ts +52 -0
  103. package/callbacks/subscriptions/postGridEntityRender.ts +51 -0
  104. package/callbacks/subscriptions/postGridEntityStateChanged.ts +55 -0
  105. package/callbacks/subscriptions/postGridEntityUpdate.ts +51 -0
  106. package/callbacks/subscriptions/postHolyMantleRemoved.ts +48 -0
  107. package/callbacks/subscriptions/postItemDischarged.ts +43 -0
  108. package/callbacks/subscriptions/postItemPickup.ts +64 -0
  109. package/callbacks/subscriptions/postKnifeInitLate.ts +32 -0
  110. package/callbacks/subscriptions/postLaserInitLate.ts +32 -0
  111. package/callbacks/subscriptions/postNPCInitLate.ts +32 -0
  112. package/callbacks/subscriptions/postNPCStateChanged.ts +42 -0
  113. package/callbacks/subscriptions/postNewLevelReordered.ts +22 -0
  114. package/callbacks/subscriptions/postNewRoomEarly.ts +22 -0
  115. package/callbacks/subscriptions/postNewRoomReordered.ts +22 -0
  116. package/callbacks/subscriptions/postPEffectUpdateReordered.ts +40 -0
  117. package/callbacks/subscriptions/postPickupCollect.ts +35 -0
  118. package/callbacks/subscriptions/postPickupInitFirst.ts +32 -0
  119. package/callbacks/subscriptions/postPickupInitLate.ts +32 -0
  120. package/callbacks/subscriptions/postPickupStateChanged.ts +40 -0
  121. package/callbacks/subscriptions/postPitRender.ts +35 -0
  122. package/callbacks/subscriptions/postPitUpdate.ts +35 -0
  123. package/callbacks/subscriptions/postPlayerChangeHealth.ts +49 -0
  124. package/callbacks/subscriptions/postPlayerChangeType.ts +40 -0
  125. package/callbacks/subscriptions/postPlayerCollectibleAdded.ts +38 -0
  126. package/callbacks/subscriptions/postPlayerCollectibleRemoved.ts +38 -0
  127. package/callbacks/subscriptions/postPlayerFatalDamage.d.ts +1 -1
  128. package/callbacks/subscriptions/postPlayerFatalDamage.ts +68 -0
  129. package/callbacks/subscriptions/postPlayerInitLate.ts +40 -0
  130. package/callbacks/subscriptions/postPlayerInitReordered.ts +40 -0
  131. package/callbacks/subscriptions/postPlayerRenderReordered.ts +40 -0
  132. package/callbacks/subscriptions/postPlayerUpdateReordered.ts +40 -0
  133. package/callbacks/subscriptions/postPoopRender.ts +35 -0
  134. package/callbacks/subscriptions/postPoopUpdate.ts +35 -0
  135. package/callbacks/subscriptions/postPressurePlateRender.ts +37 -0
  136. package/callbacks/subscriptions/postPressurePlateUpdate.ts +37 -0
  137. package/callbacks/subscriptions/postProjectileInitLate.ts +35 -0
  138. package/callbacks/subscriptions/postPurchase.ts +31 -0
  139. package/callbacks/subscriptions/postRockRender.ts +35 -0
  140. package/callbacks/subscriptions/postRockUpdate.ts +35 -0
  141. package/callbacks/subscriptions/postRoomClearChanged.ts +30 -0
  142. package/callbacks/subscriptions/postSacrifice.ts +43 -0
  143. package/callbacks/subscriptions/postSlotAnimationChanged.ts +40 -0
  144. package/callbacks/subscriptions/postSlotDestroyed.ts +55 -0
  145. package/callbacks/subscriptions/postSlotInit.ts +32 -0
  146. package/callbacks/subscriptions/postSlotRender.ts +32 -0
  147. package/callbacks/subscriptions/postSlotUpdate.ts +32 -0
  148. package/callbacks/subscriptions/postSpikesRender.ts +35 -0
  149. package/callbacks/subscriptions/postSpikesUpdate.ts +35 -0
  150. package/callbacks/subscriptions/postTNTRender.ts +35 -0
  151. package/callbacks/subscriptions/postTNTUpdate.ts +35 -0
  152. package/callbacks/subscriptions/postTearInitLate.ts +32 -0
  153. package/callbacks/subscriptions/postTearInitVeryLate.ts +32 -0
  154. package/callbacks/subscriptions/postTransformation.ts +40 -0
  155. package/callbacks/subscriptions/postTrinketBreak.ts +38 -0
  156. package/callbacks/subscriptions/preBerserkDeath.ts +42 -0
  157. package/callbacks/subscriptions/preCustomRevive.d.ts +1 -1
  158. package/callbacks/subscriptions/preCustomRevive.ts +46 -0
  159. package/callbacks/subscriptions/preItemPickup.ts +64 -0
  160. package/callbacks/subscriptions/preNewLevel.ts +24 -0
  161. package/classes/DefaultMap.ts +174 -0
  162. package/classes/ModUpgraded.d.ts +5 -1
  163. package/classes/ModUpgraded.lua +2 -2
  164. package/classes/ModUpgraded.ts +84 -0
  165. package/constants.ts +162 -0
  166. package/constantsFirstLast.ts +217 -0
  167. package/enums/AmbushType.ts +4 -0
  168. package/enums/HealthType.ts +16 -0
  169. package/enums/ModCallbackCustom.d.ts +2 -2
  170. package/enums/ModCallbackCustom.ts +1278 -0
  171. package/enums/PocketItemType.ts +8 -0
  172. package/enums/SerializationType.ts +5 -0
  173. package/enums/SlotDestructionType.ts +4 -0
  174. package/enums/private/CopyableIsaacAPIClassType.ts +7 -0
  175. package/enums/private/SaveDataKey.ts +14 -0
  176. package/enums/private/SerializationBrand.ts +42 -0
  177. package/features/characterHealthConversion.lua +2 -9
  178. package/features/characterHealthConversion.ts +111 -0
  179. package/features/characterStats.ts +61 -0
  180. package/features/debugDisplay/debugDisplay.ts +221 -0
  181. package/features/debugDisplay/exports.ts +368 -0
  182. package/features/debugDisplay/v.ts +65 -0
  183. package/features/deployJSONRoom.ts +743 -0
  184. package/features/disableInputs.ts +193 -0
  185. package/features/disableSound.ts +77 -0
  186. package/features/extraConsoleCommands/commandsDisplay.ts +290 -0
  187. package/features/extraConsoleCommands/commandsSubroutines.ts +139 -0
  188. package/features/extraConsoleCommands/init.ts +334 -0
  189. package/features/extraConsoleCommands/listCommands.ts +1299 -0
  190. package/features/extraConsoleCommands/v.ts +14 -0
  191. package/features/fadeInRemover.ts +60 -0
  192. package/features/fastReset.ts +75 -0
  193. package/features/forgottenSwitch.ts +50 -0
  194. package/features/getCollectibleItemPoolType.ts +66 -0
  195. package/features/persistentEntities.ts +183 -0
  196. package/features/playerInventory.lua +1 -0
  197. package/features/playerInventory.ts +135 -0
  198. package/features/ponyDetection.ts +74 -0
  199. package/features/preventCollectibleRotation.ts +115 -0
  200. package/features/runInNFrames.ts +148 -0
  201. package/features/saveDataManager/constants.ts +4 -0
  202. package/features/saveDataManager/exports.ts +229 -0
  203. package/features/saveDataManager/load.ts +99 -0
  204. package/features/saveDataManager/main.ts +195 -0
  205. package/features/saveDataManager/maps.ts +13 -0
  206. package/features/saveDataManager/merge.ts +194 -0
  207. package/features/saveDataManager/save.ts +74 -0
  208. package/features/saveDataManager/serializationBrand.ts +16 -0
  209. package/features/sirenHelpers.ts +129 -0
  210. package/features/taintedLazarusPlayers.ts +113 -0
  211. package/featuresInitialized.ts +20 -0
  212. package/functions/ambush.ts +47 -0
  213. package/functions/array.ts +410 -0
  214. package/functions/benchmark.ts +36 -0
  215. package/functions/bitwise.ts +24 -0
  216. package/functions/bombs.ts +12 -0
  217. package/functions/boss.ts +227 -0
  218. package/functions/cacheFlag.ts +12 -0
  219. package/functions/cards.ts +271 -0
  220. package/functions/challenges.ts +13 -0
  221. package/functions/character.ts +126 -0
  222. package/functions/charge.ts +237 -0
  223. package/functions/chargeBar.ts +67 -0
  224. package/functions/collectibleCacheFlag.ts +90 -0
  225. package/functions/collectibleSet.ts +56 -0
  226. package/functions/collectibleTag.ts +89 -0
  227. package/functions/collectibles.ts +659 -0
  228. package/functions/color.lua +0 -7
  229. package/functions/color.ts +128 -0
  230. package/functions/debug.ts +68 -0
  231. package/functions/deepCopy.lua +46 -51
  232. package/functions/deepCopy.ts +535 -0
  233. package/functions/deepCopyTests.ts +386 -0
  234. package/functions/direction.ts +49 -0
  235. package/functions/doors.ts +347 -0
  236. package/functions/easing.ts +182 -0
  237. package/functions/eden.ts +47 -0
  238. package/functions/effects.ts +20 -0
  239. package/functions/entity.ts +439 -0
  240. package/functions/entitySpecific.ts +889 -0
  241. package/functions/entityTypes.ts +6 -0
  242. package/functions/enums.ts +146 -0
  243. package/functions/familiars.ts +106 -0
  244. package/functions/flag.ts +165 -0
  245. package/functions/flying.ts +117 -0
  246. package/functions/globals.ts +242 -0
  247. package/functions/gridEntity.ts +511 -0
  248. package/functions/gridEntitySpecific.ts +112 -0
  249. package/functions/input.ts +139 -0
  250. package/functions/isaacAPIClass.ts +67 -0
  251. package/functions/jsonHelpers.ts +45 -0
  252. package/functions/jsonRoom.ts +100 -0
  253. package/functions/kColor.lua +0 -7
  254. package/functions/kColor.ts +129 -0
  255. package/functions/language.ts +13 -0
  256. package/functions/level.ts +31 -0
  257. package/functions/log.ts +720 -0
  258. package/functions/map.ts +56 -0
  259. package/functions/math.ts +149 -0
  260. package/functions/mergeTests.ts +288 -0
  261. package/functions/npc.ts +148 -0
  262. package/functions/pickupVariants.ts +60 -0
  263. package/functions/pickups.ts +499 -0
  264. package/functions/pills.ts +205 -0
  265. package/functions/player.lua +9 -20
  266. package/functions/player.ts +1056 -0
  267. package/functions/playerDataStructures.ts +150 -0
  268. package/functions/playerHealth.lua +28 -39
  269. package/functions/playerHealth.ts +382 -0
  270. package/functions/playerIndex.ts +195 -0
  271. package/functions/pocketItems.ts +149 -0
  272. package/functions/positionVelocity.ts +188 -0
  273. package/functions/random.ts +77 -0
  274. package/functions/revive.ts +201 -0
  275. package/functions/rng.lua +0 -7
  276. package/functions/rng.ts +172 -0
  277. package/functions/roomData.ts +199 -0
  278. package/functions/roomGrid.ts +109 -0
  279. package/functions/roomShape.ts +80 -0
  280. package/functions/rooms.ts +648 -0
  281. package/functions/run.ts +36 -0
  282. package/functions/saveFile.ts +128 -0
  283. package/functions/seeds.ts +19 -0
  284. package/functions/serialization.ts +91 -0
  285. package/functions/set.ts +95 -0
  286. package/functions/sound.ts +9 -0
  287. package/functions/spawnCollectible.ts +104 -0
  288. package/functions/sprite.ts +107 -0
  289. package/functions/stage.ts +125 -0
  290. package/functions/string.ts +47 -0
  291. package/functions/table.ts +189 -0
  292. package/functions/tears.ts +32 -0
  293. package/functions/transformations.ts +131 -0
  294. package/functions/trinketCacheFlag.ts +60 -0
  295. package/functions/trinketGive.ts +157 -0
  296. package/functions/trinkets.ts +215 -0
  297. package/functions/tstlClass.ts +157 -0
  298. package/functions/types.ts +36 -0
  299. package/functions/ui.ts +138 -0
  300. package/functions/utils.d.ts +0 -37
  301. package/functions/utils.lua +0 -35
  302. package/functions/utils.ts +189 -0
  303. package/functions/vector.lua +0 -7
  304. package/functions/vector.ts +126 -0
  305. package/index.ts +172 -0
  306. package/initCustomCallbacks.ts +132 -0
  307. package/initFeatures.ts +39 -0
  308. package/interfaces/AddCallbackParameterCustom.ts +188 -0
  309. package/interfaces/ChargeBarSprites.ts +12 -0
  310. package/interfaces/JSONDoor.d.ts +3 -3
  311. package/interfaces/JSONDoor.ts +13 -0
  312. package/interfaces/JSONEntity.d.ts +4 -4
  313. package/interfaces/JSONEntity.ts +16 -0
  314. package/interfaces/JSONRoom.d.ts +8 -8
  315. package/interfaces/JSONRoom.ts +36 -0
  316. package/interfaces/JSONRooms.ts +12 -0
  317. package/interfaces/JSONSpawn.d.ts +2 -2
  318. package/interfaces/JSONSpawn.ts +14 -0
  319. package/interfaces/PlayerHealth.ts +16 -0
  320. package/interfaces/PocketItemDescription.ts +9 -0
  321. package/interfaces/SaveData.ts +29 -0
  322. package/interfaces/TrinketSituation.ts +9 -0
  323. package/interfaces/private/TSTLClassMetatable.ts +8 -0
  324. package/maps/PHDPillConversions.ts +21 -0
  325. package/maps/cardMap.ts +209 -0
  326. package/maps/characterMap.ts +87 -0
  327. package/maps/collectibleDescriptionMap.ts +732 -0
  328. package/maps/collectibleNameMap.ts +731 -0
  329. package/maps/defaultPlayerStatMap.ts +17 -0
  330. package/maps/falsePHDPillConversions.ts +35 -0
  331. package/maps/gridEntityTypeToBrokenStateMap.ts +50 -0
  332. package/maps/gridEntityXMLMap.ts +176 -0
  333. package/maps/pillEffectMap.ts +88 -0
  334. package/maps/roomShapeToTopLeftWallGridIndexMap.ts +18 -0
  335. package/maps/roomTypeMap.ts +40 -0
  336. package/maps/trinketDescriptionMap.ts +200 -0
  337. package/maps/trinketNameMap.ts +198 -0
  338. package/objects/LRoomShapeToRectangles.ts +44 -0
  339. package/objects/callbackRegisterFunctions.ts +187 -0
  340. package/objects/cardDescriptions.ts +105 -0
  341. package/objects/cardNames.ts +105 -0
  342. package/objects/cardTypes.ts +104 -0
  343. package/objects/challengeNames.ts +52 -0
  344. package/objects/characterNames.ts +48 -0
  345. package/objects/coinSubTypeToValue.ts +14 -0
  346. package/objects/colors.ts +16 -0
  347. package/objects/directionNames.ts +11 -0
  348. package/objects/directionToDegrees.ts +11 -0
  349. package/objects/directionToVector.ts +12 -0
  350. package/objects/doorSlotFlagToDoorSlot.ts +16 -0
  351. package/objects/doorSlotToDirection.ts +14 -0
  352. package/objects/isaacAPIClassTypeToBrand.ts +11 -0
  353. package/objects/isaacAPIClassTypeToCopyFunction.ts +18 -0
  354. package/objects/languageNames.ts +13 -0
  355. package/objects/oppositeDoorSlots.ts +15 -0
  356. package/objects/pillEffectClasses.ts +63 -0
  357. package/objects/pillEffectNames.ts +57 -0
  358. package/objects/pillEffectTypes.ts +62 -0
  359. package/objects/roomShapeBounds.ts +71 -0
  360. package/objects/roomShapeLayoutSizes.ts +45 -0
  361. package/objects/roomShapeToBottomRightPosition.ts +25 -0
  362. package/objects/roomShapeToDoorSlots.ts +83 -0
  363. package/objects/roomShapeToDoorSlotsToGridIndexDelta.ts +127 -0
  364. package/objects/roomShapeToGridWidth.ts +21 -0
  365. package/objects/roomShapeToTopLeftPosition.ts +26 -0
  366. package/objects/roomShapeVolumes.ts +38 -0
  367. package/objects/roomTypeNames.ts +36 -0
  368. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.ts +14 -0
  369. package/objects/stageTypeToLetter.ts +15 -0
  370. package/objects/transformationNames.d.ts +0 -1
  371. package/objects/transformationNames.lua +0 -1
  372. package/objects/transformationNames.ts +18 -0
  373. package/package.json +2 -2
  374. package/patchErrorFunctions.ts +92 -0
  375. package/sets/LRoomShapesSet.ts +8 -0
  376. package/sets/bossSets.ts +470 -0
  377. package/sets/charactersThatStartWithAnActiveItemSet.ts +16 -0
  378. package/sets/charactersWithBlackHeartFromEternalHeartSet.ts +7 -0
  379. package/sets/charactersWithFreeDevilDealsSet.ts +4 -0
  380. package/sets/charactersWithNoRedHeartsSet.ts +17 -0
  381. package/sets/charactersWithNoSoulHeartsSet.ts +14 -0
  382. package/sets/chestPickupVariantsSet.ts +16 -0
  383. package/sets/familiarsThatShootPlayerTearsSet.ts +13 -0
  384. package/sets/lostStyleCharactersSet.ts +13 -0
  385. package/sets/mineShaftRoomSubTypesSet.ts +10 -0
  386. package/sets/redHeartSubTypesSet.ts +7 -0
  387. package/sets/sinEntityTypesSet.ts +11 -0
  388. package/sets/singleUseActiveCollectibleTypesSet.ts +13 -0
  389. package/sets/storyBossesSet.ts +17 -0
  390. package/types/AnyEntity.ts +12 -0
  391. package/types/AwaitingTextInput.d.ts +2 -0
  392. package/types/CollectibleIndex.ts +16 -0
  393. package/types/PickingUpItem.ts +89 -0
  394. package/types/PlayerIndex.ts +13 -0
  395. package/types/private/IsaacAPIClass.ts +3 -0
  396. package/types/private/SerializedIsaacAPIClass.ts +3 -0
  397. package/types/private/TSTLClass.ts +3 -0
  398. package/upgradeMod.ts +55 -0
@@ -0,0 +1,64 @@
1
+ import { DefaultMap } from "../classes/DefaultMap";
2
+ import { ModUpgraded } from "../classes/ModUpgraded";
3
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
4
+ import { saveDataManager } from "../features/saveDataManager/exports";
5
+ import { getPickups } from "../functions/entitySpecific";
6
+ import {
7
+ defaultMapGetPlayer,
8
+ mapSetPlayer,
9
+ } from "../functions/playerDataStructures";
10
+ import { PlayerIndex } from "../types/PlayerIndex";
11
+ import {
12
+ postPurchaseFire,
13
+ postPurchaseHasSubscriptions,
14
+ } from "./subscriptions/postPurchase";
15
+
16
+ const v = {
17
+ room: {
18
+ playersHoldingItemOnLastFrameMap: new DefaultMap<PlayerIndex, boolean>(
19
+ false,
20
+ ),
21
+ },
22
+ };
23
+
24
+ /** @internal */
25
+ export function postPurchaseInit(mod: ModUpgraded): void {
26
+ saveDataManager("postPurchase", v, hasSubscriptions);
27
+
28
+ mod.AddCallbackCustom(
29
+ ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED,
30
+ postPEffectUpdateReordered,
31
+ );
32
+ }
33
+
34
+ function hasSubscriptions() {
35
+ return postPurchaseHasSubscriptions();
36
+ }
37
+
38
+ // ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED
39
+ function postPEffectUpdateReordered(player: EntityPlayer) {
40
+ if (!hasSubscriptions()) {
41
+ return;
42
+ }
43
+
44
+ const isHoldingItem = player.IsHoldingItem();
45
+ const wasHoldingItemOnLastFrame = defaultMapGetPlayer(
46
+ v.room.playersHoldingItemOnLastFrameMap,
47
+ player,
48
+ );
49
+ mapSetPlayer(v.room.playersHoldingItemOnLastFrameMap, player, isHoldingItem);
50
+
51
+ if (!wasHoldingItemOnLastFrame && isHoldingItem) {
52
+ playerPickedUpNewItem(player);
53
+ }
54
+ }
55
+
56
+ function playerPickedUpNewItem(player: EntityPlayer) {
57
+ const pickups = getPickups();
58
+ const disappearingPickup = pickups.find(
59
+ (pickup) => !pickup.Exists() && pickup.Price !== 0,
60
+ );
61
+ if (disappearingPickup !== undefined) {
62
+ postPurchaseFire(player, disappearingPickup);
63
+ }
64
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getRocks } from "../functions/gridEntitySpecific";
3
+ import {
4
+ postRockRenderFire,
5
+ postRockRenderHasSubscriptions,
6
+ } from "./subscriptions/postRockRender";
7
+
8
+ /** @internal */
9
+ export function postRockRenderInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_RENDER, postRender); // 2
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postRockRenderHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_RENDER (2)
18
+ function postRender() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const rock of getRocks()) {
24
+ postRockRenderFire(rock);
25
+ }
26
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getRocks } from "../functions/gridEntitySpecific";
3
+ import {
4
+ postRockUpdateFire,
5
+ postRockUpdateHasSubscriptions,
6
+ } from "./subscriptions/postRockUpdate";
7
+
8
+ /** @internal */
9
+ export function postRockUpdateInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postRockUpdateHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_UPDATE (1)
18
+ function postUpdate() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const rock of getRocks()) {
24
+ postRockUpdateFire(rock);
25
+ }
26
+ }
@@ -0,0 +1,57 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { ModUpgraded } from "../classes/ModUpgraded";
4
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
5
+ import { saveDataManager } from "../features/saveDataManager/exports";
6
+ import {
7
+ postRoomClearChangedFire,
8
+ postRoomClearChangedHasSubscriptions,
9
+ } from "./subscriptions/postRoomClearChanged";
10
+
11
+ const v = {
12
+ room: {
13
+ cleared: false,
14
+ },
15
+ };
16
+
17
+ /** @internal */
18
+ export function postRoomClearChangedInit(mod: ModUpgraded): void {
19
+ saveDataManager("postRoomClearChanged", v, hasSubscriptions);
20
+
21
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
22
+ mod.AddCallbackCustom(
23
+ ModCallbackCustom.POST_NEW_ROOM_REORDERED,
24
+ postNewRoomReordered,
25
+ );
26
+ }
27
+
28
+ function hasSubscriptions() {
29
+ return postRoomClearChangedHasSubscriptions();
30
+ }
31
+
32
+ // ModCallback.POST_UPDATE (1)
33
+ function postUpdate() {
34
+ if (!hasSubscriptions()) {
35
+ return;
36
+ }
37
+
38
+ const room = game.GetRoom();
39
+ const roomClear = room.IsClear();
40
+
41
+ if (roomClear !== v.room.cleared) {
42
+ v.room.cleared = roomClear;
43
+ postRoomClearChangedFire(roomClear);
44
+ }
45
+ }
46
+
47
+ // ModCallbackCustom.POST_NEW_ROOM_REORDERED
48
+ function postNewRoomReordered() {
49
+ if (!hasSubscriptions()) {
50
+ return;
51
+ }
52
+
53
+ const room = game.GetRoom();
54
+ const roomClear = room.IsClear();
55
+
56
+ v.room.cleared = roomClear;
57
+ }
@@ -19,11 +19,11 @@ function hasSubscriptions(self)
19
19
  end
20
20
  function entityTakeDmgPlayer(self, tookDamage, _damageAmount, damageFlags, _damageSource, _damageCountdownFrames)
21
21
  if not hasSubscriptions(nil) then
22
- return
22
+ return nil
23
23
  end
24
24
  local player = tookDamage:ToPlayer()
25
25
  if player == nil then
26
- return
26
+ return nil
27
27
  end
28
28
  local room = game:GetRoom()
29
29
  local roomType = room:GetType()
@@ -33,6 +33,7 @@ function entityTakeDmgPlayer(self, tookDamage, _damageAmount, damageFlags, _dama
33
33
  ____v_level_0[____numSacrifices_1] = ____v_level_0[____numSacrifices_1] + 1
34
34
  postSacrificeFire(nil, player, v.level.numSacrifices)
35
35
  end
36
+ return nil
36
37
  end
37
38
  v = {level = {numSacrifices = 0}}
38
39
  ---
@@ -0,0 +1,64 @@
1
+ import {
2
+ DamageFlag,
3
+ EntityType,
4
+ ModCallback,
5
+ RoomType,
6
+ } from "isaac-typescript-definitions";
7
+ import { game } from "../cachedClasses";
8
+ import { saveDataManager } from "../features/saveDataManager/exports";
9
+ import { hasFlag } from "../functions/flag";
10
+ import {
11
+ postSacrificeFire,
12
+ postSacrificeHasSubscriptions,
13
+ } from "./subscriptions/postSacrifice";
14
+
15
+ const v = {
16
+ level: {
17
+ numSacrifices: 0,
18
+ },
19
+ };
20
+
21
+ /** @internal */
22
+ export function postSacrificeInit(mod: Mod): void {
23
+ saveDataManager("postSacrifice", v, hasSubscriptions);
24
+
25
+ mod.AddCallback(
26
+ ModCallback.ENTITY_TAKE_DMG,
27
+ entityTakeDmgPlayer,
28
+ EntityType.PLAYER,
29
+ ); // 11
30
+ }
31
+
32
+ function hasSubscriptions() {
33
+ return postSacrificeHasSubscriptions();
34
+ }
35
+
36
+ // ModCallback.ENTITY_TAKE_DMG (11)
37
+ // EntityType.PLAYER (1)
38
+ function entityTakeDmgPlayer(
39
+ tookDamage: Entity,
40
+ _damageAmount: float,
41
+ damageFlags: BitFlags<DamageFlag>,
42
+ _damageSource: EntityRef,
43
+ _damageCountdownFrames: int,
44
+ ): boolean | undefined {
45
+ if (!hasSubscriptions()) {
46
+ return undefined;
47
+ }
48
+
49
+ const player = tookDamage.ToPlayer();
50
+ if (player === undefined) {
51
+ return undefined;
52
+ }
53
+
54
+ const room = game.GetRoom();
55
+ const roomType = room.GetType();
56
+ const isSpikeDamage = hasFlag(damageFlags, DamageFlag.SPIKES);
57
+
58
+ if (roomType === RoomType.SACRIFICE && isSpikeDamage) {
59
+ v.level.numSacrifices += 1;
60
+ postSacrificeFire(player, v.level.numSacrifices);
61
+ }
62
+
63
+ return undefined;
64
+ }
@@ -0,0 +1,92 @@
1
+ // Normally, when a slot is destroyed, the grid collision class changes to
2
+ // `EntityGridCollisionClass.GROUND` and sticks around in the room. Thus, checking for this case is
3
+ // simple.
4
+
5
+ // The special case is when a slot pays out with a collectible item. In this case, it will not stay
6
+ // in the room. Instead, it will play the "Prize" animation for 3 game frames, and then despawn (to
7
+ // be replaced by a collectible entity). Subsequently, we handle this case by assuming that if the
8
+ // slot disappeared 3 frames after it changed to a prize animation, it was a destruction pay-out.
9
+
10
+ import {
11
+ EntityGridCollisionClass,
12
+ EntityType,
13
+ ModCallback,
14
+ } from "isaac-typescript-definitions";
15
+ import { game } from "../cachedClasses";
16
+ import { ModUpgraded } from "../classes/ModUpgraded";
17
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
18
+ import { SlotDestructionType } from "../enums/SlotDestructionType";
19
+ import { saveDataManager } from "../features/saveDataManager/exports";
20
+ import {
21
+ postSlotDestroyedFire,
22
+ postSlotDestroyedHasSubscriptions,
23
+ } from "./subscriptions/postSlotDestroyed";
24
+
25
+ const PRIZE_GAME_FRAME_DELAY_UNTIL_REMOVAL = 3;
26
+
27
+ const v = {
28
+ room: {
29
+ brokenSlots: new Set<PtrHash>(),
30
+ slotPrizeAnimationGameFrame: new Map<PtrHash, int>(),
31
+ },
32
+ };
33
+
34
+ /** @internal */
35
+ export function postSlotDestroyedInit(mod: ModUpgraded): void {
36
+ saveDataManager("postSlotDestroyed", v, hasSubscriptions);
37
+
38
+ mod.AddCallback(
39
+ ModCallback.POST_ENTITY_REMOVE,
40
+ postEntityRemove,
41
+ EntityType.SLOT,
42
+ ); // 67
43
+
44
+ mod.AddCallbackCustom(
45
+ ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED,
46
+ postSlotAnimationChanged,
47
+ );
48
+ }
49
+
50
+ function hasSubscriptions() {
51
+ return postSlotDestroyedHasSubscriptions();
52
+ }
53
+
54
+ // ModCallback.POST_ENTITY_REMOVE (67)
55
+ function postEntityRemove(entity: Entity) {
56
+ const slot = entity as EntitySlot;
57
+ const ptrHash = GetPtrHash(slot);
58
+ const gameFrameCount = game.GetFrameCount();
59
+
60
+ const prizeFrame = v.room.slotPrizeAnimationGameFrame.get(ptrHash);
61
+ if (prizeFrame === undefined) {
62
+ return;
63
+ }
64
+
65
+ if (prizeFrame + PRIZE_GAME_FRAME_DELAY_UNTIL_REMOVAL === gameFrameCount) {
66
+ postSlotDestroyedFire(slot, SlotDestructionType.COLLECTIBLE_PAYOUT);
67
+ }
68
+ }
69
+
70
+ // ModCallbackCustom.POST_SLOT_ANIMATION_CHANGED
71
+ function postSlotAnimationChanged(slot: EntitySlot) {
72
+ const ptrHash = GetPtrHash(slot);
73
+ const gameFrameCount = game.GetFrameCount();
74
+
75
+ const alreadyBroken = v.room.brokenSlots.has(ptrHash);
76
+ if (alreadyBroken) {
77
+ return;
78
+ }
79
+
80
+ if (slot.GridCollisionClass === EntityGridCollisionClass.GROUND) {
81
+ v.room.brokenSlots.add(ptrHash);
82
+ postSlotDestroyedFire(slot, SlotDestructionType.NORMAL);
83
+ }
84
+
85
+ const sprite = slot.GetSprite();
86
+ const animation = sprite.GetAnimation();
87
+ if (animation === "Prize") {
88
+ v.room.slotPrizeAnimationGameFrame.set(ptrHash, gameFrameCount);
89
+ } else {
90
+ v.room.slotPrizeAnimationGameFrame.delete(ptrHash);
91
+ }
92
+ }
@@ -0,0 +1,68 @@
1
+ // This provides the logic for the PostSlotInit and PostSlotUpdate callbacks. (The other slot
2
+ // callbacks are handled in a different file.)
3
+
4
+ import { ModCallback } from "isaac-typescript-definitions";
5
+ import { ModUpgraded } from "../classes/ModUpgraded";
6
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
7
+ import { saveDataManager } from "../features/saveDataManager/exports";
8
+ import { getSlots } from "../functions/entitySpecific";
9
+ import {
10
+ postSlotInitFire,
11
+ postSlotInitHasSubscriptions,
12
+ } from "./subscriptions/postSlotInit";
13
+ import {
14
+ postSlotUpdateFire,
15
+ postSlotUpdateHasSubscriptions,
16
+ } from "./subscriptions/postSlotUpdate";
17
+
18
+ const v = {
19
+ room: {
20
+ initializedSlots: new Set<PtrHash>(),
21
+ },
22
+ };
23
+
24
+ /** @internal */
25
+ export function postSlotInitUpdateCallbacksInit(mod: ModUpgraded): void {
26
+ saveDataManager("postSlotInitUpdate", v, hasSubscriptions);
27
+
28
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
29
+ mod.AddCallbackCustom(
30
+ ModCallbackCustom.POST_NEW_ROOM_REORDERED,
31
+ postNewRoomReordered,
32
+ );
33
+ }
34
+
35
+ function hasSubscriptions() {
36
+ return postSlotInitHasSubscriptions() || postSlotUpdateHasSubscriptions();
37
+ }
38
+
39
+ // ModCallback.POST_UPDATE (1)
40
+ function postUpdate() {
41
+ if (!hasSubscriptions()) {
42
+ return;
43
+ }
44
+
45
+ for (const slot of getSlots()) {
46
+ checkNewEntity(slot);
47
+ postSlotUpdateFire(slot);
48
+ }
49
+ }
50
+
51
+ // ModCallbackCustom.POST_NEW_ROOM_REORDERED
52
+ function postNewRoomReordered() {
53
+ if (!hasSubscriptions()) {
54
+ return;
55
+ }
56
+
57
+ for (const slot of getSlots()) {
58
+ checkNewEntity(slot);
59
+ }
60
+ }
61
+
62
+ function checkNewEntity(slot: EntitySlot) {
63
+ const ptrHash = GetPtrHash(slot);
64
+ if (!v.room.initializedSlots.has(ptrHash)) {
65
+ v.room.initializedSlots.add(ptrHash);
66
+ postSlotInitFire(slot);
67
+ }
68
+ }
@@ -0,0 +1,69 @@
1
+ // This provides the logic for the following callbacks:
2
+ // - PostSlotRender
3
+ // - PostSlotAnimationChanged
4
+
5
+ import { ModCallback } from "isaac-typescript-definitions";
6
+ import { DefaultMap } from "../classes/DefaultMap";
7
+ import { saveDataManager } from "../features/saveDataManager/exports";
8
+ import { getSlots } from "../functions/entitySpecific";
9
+ import {
10
+ postSlotAnimationChangedFire,
11
+ postSlotAnimationChangedHasSubscriptions,
12
+ } from "./subscriptions/postSlotAnimationChanged";
13
+ import {
14
+ postSlotRenderFire,
15
+ postSlotRenderHasSubscriptions,
16
+ } from "./subscriptions/postSlotRender";
17
+
18
+ const v = {
19
+ room: {
20
+ slotAnimations: new DefaultMap<PtrHash, string, [slot: Entity]>(
21
+ (slot: Entity) => {
22
+ const sprite = slot.GetSprite();
23
+ return sprite.GetAnimation();
24
+ },
25
+ ),
26
+ brokenSlots: new Set<PtrHash>(),
27
+ },
28
+ };
29
+
30
+ /** @internal */
31
+ export function postSlotRenderCallbacksInit(mod: Mod): void {
32
+ saveDataManager("postSlotRender", v, hasSubscriptions);
33
+
34
+ mod.AddCallback(ModCallback.POST_RENDER, postRender); // 2
35
+ }
36
+
37
+ function hasSubscriptions() {
38
+ return (
39
+ postSlotRenderHasSubscriptions() ||
40
+ postSlotAnimationChangedHasSubscriptions()
41
+ );
42
+ }
43
+
44
+ // ModCallback.POST_UPDATE (1)
45
+ function postRender() {
46
+ if (!hasSubscriptions()) {
47
+ return;
48
+ }
49
+
50
+ for (const slot of getSlots()) {
51
+ postSlotRenderFire(slot);
52
+ checkSlotAnimationChanged(slot);
53
+ }
54
+ }
55
+
56
+ function checkSlotAnimationChanged(slot: EntitySlot) {
57
+ const sprite = slot.GetSprite();
58
+ const currentAnimation = sprite.GetAnimation();
59
+ const ptrHash = GetPtrHash(slot);
60
+ const previousAnimation = v.room.slotAnimations.getAndSetDefault(
61
+ ptrHash,
62
+ slot,
63
+ );
64
+ v.room.slotAnimations.set(ptrHash, currentAnimation);
65
+
66
+ if (currentAnimation !== previousAnimation) {
67
+ postSlotAnimationChangedFire(slot, previousAnimation, currentAnimation);
68
+ }
69
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getSpikes } from "../functions/gridEntitySpecific";
3
+ import {
4
+ postSpikesRenderFire,
5
+ postSpikesRenderHasSubscriptions,
6
+ } from "./subscriptions/postSpikesRender";
7
+
8
+ /** @internal */
9
+ export function postSpikesRenderInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_RENDER, postRender); // 2
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postSpikesRenderHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_RENDER (2)
18
+ function postRender() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const spikes of getSpikes()) {
24
+ postSpikesRenderFire(spikes);
25
+ }
26
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getSpikes } from "../functions/gridEntitySpecific";
3
+ import {
4
+ postSpikesUpdateFire,
5
+ postSpikesUpdateHasSubscriptions,
6
+ } from "./subscriptions/postSpikesUpdate";
7
+
8
+ /** @internal */
9
+ export function postSpikesUpdateInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postSpikesUpdateHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_UPDATE (1)
18
+ function postUpdate() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const spikes of getSpikes()) {
24
+ postSpikesUpdateFire(spikes);
25
+ }
26
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getTNT } from "../functions/gridEntitySpecific";
3
+ import {
4
+ postTNTRenderFire,
5
+ postTNTRenderHasSubscriptions,
6
+ } from "./subscriptions/postTNTRender";
7
+
8
+ /** @internal */
9
+ export function postTNTRenderInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_RENDER, postRender); // 2
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postTNTRenderHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_RENDER (2)
18
+ function postRender() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const tnt of getTNT()) {
24
+ postTNTRenderFire(tnt);
25
+ }
26
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getTNT } from "../functions/gridEntitySpecific";
3
+ import {
4
+ postTNTUpdateFire,
5
+ postTNTUpdateHasSubscriptions,
6
+ } from "./subscriptions/postTNTUpdate";
7
+
8
+ /** @internal */
9
+ export function postTNTUpdateInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postTNTUpdateHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_UPDATE (1)
18
+ function postUpdate() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const tnt of getTNT()) {
24
+ postTNTUpdateFire(tnt);
25
+ }
26
+ }
@@ -0,0 +1,36 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { saveDataManager } from "../features/saveDataManager/exports";
3
+ import {
4
+ postTearInitLateFire,
5
+ postTearInitLateHasSubscriptions,
6
+ } from "./subscriptions/postTearInitLate";
7
+
8
+ const v = {
9
+ room: {
10
+ firedSet: new Set<PtrHash>(),
11
+ },
12
+ };
13
+
14
+ /** @internal */
15
+ export function postTearInitLateInit(mod: Mod): void {
16
+ saveDataManager("postTearInitLate", v, hasSubscriptions);
17
+
18
+ mod.AddCallback(ModCallback.POST_TEAR_UPDATE, postTearUpdate); // 40
19
+ }
20
+
21
+ function hasSubscriptions() {
22
+ return postTearInitLateHasSubscriptions();
23
+ }
24
+
25
+ // ModCallback.POST_TEAR_UPDATE (40)
26
+ function postTearUpdate(tear: EntityTear) {
27
+ if (!hasSubscriptions()) {
28
+ return;
29
+ }
30
+
31
+ const index = GetPtrHash(tear);
32
+ if (!v.room.firedSet.has(index)) {
33
+ v.room.firedSet.add(index);
34
+ postTearInitLateFire(tear);
35
+ }
36
+ }
@@ -0,0 +1,41 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { saveDataManager } from "../features/saveDataManager/exports";
3
+ import {
4
+ postTearInitVeryLateFire,
5
+ postTearInitVeryLateHasSubscriptions,
6
+ } from "./subscriptions/postTearInitVeryLate";
7
+
8
+ const v = {
9
+ room: {
10
+ firedSet: new Set<PtrHash>(),
11
+ },
12
+ };
13
+
14
+ /** @internal */
15
+ export function postTearInitVeryLateInit(mod: Mod): void {
16
+ saveDataManager("postTearInitVeryLate", v, hasSubscriptions);
17
+
18
+ mod.AddCallback(ModCallback.POST_TEAR_UPDATE, postTearUpdate); // 40
19
+ }
20
+
21
+ function hasSubscriptions() {
22
+ return postTearInitVeryLateHasSubscriptions();
23
+ }
24
+
25
+ // ModCallback.POST_TEAR_UPDATE (40)
26
+ function postTearUpdate(tear: EntityTear) {
27
+ if (!hasSubscriptions()) {
28
+ return;
29
+ }
30
+
31
+ // This callback fires on frame 1.
32
+ if (tear.FrameCount === 0) {
33
+ return;
34
+ }
35
+
36
+ const index = GetPtrHash(tear);
37
+ if (!v.room.firedSet.has(index)) {
38
+ v.room.firedSet.add(index);
39
+ postTearInitVeryLateFire(tear);
40
+ }
41
+ }