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,109 @@
1
+ // This provides the logic for:
2
+ // - POST_ESAU_JR
3
+ // - POST_FIRST_ESAU_JR
4
+
5
+ import {
6
+ CollectibleType,
7
+ ControllerIndex,
8
+ ModCallback,
9
+ UseFlag,
10
+ } from "isaac-typescript-definitions";
11
+ import { game } from "../cachedClasses";
12
+ import { saveDataManager } from "../features/saveDataManager/exports";
13
+ import { getPlayers } from "../functions/playerIndex";
14
+ import {
15
+ postEsauJrFire,
16
+ postEsauJrHasSubscriptions,
17
+ } from "./subscriptions/postEsauJr";
18
+ import {
19
+ postFirstEsauJrFire,
20
+ postFirstEsauJrHasSubscriptions,
21
+ } from "./subscriptions/postFirstEsauJr";
22
+
23
+ const v = {
24
+ run: {
25
+ usedEsauJrFrame: null as int | null,
26
+ usedEsauJrControllerIndex: null as ControllerIndex | null,
27
+ usedEsauJrAtLeastOnce: false,
28
+ },
29
+ };
30
+
31
+ /** @internal */
32
+ export function postEsauJrCallbacksInit(mod: Mod): void {
33
+ saveDataManager("postEsauJr", v, hasSubscriptions);
34
+
35
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
36
+ mod.AddCallback(
37
+ ModCallback.POST_USE_ITEM,
38
+ useItemEsauJr,
39
+ CollectibleType.ESAU_JR,
40
+ ); // 3
41
+ }
42
+
43
+ function hasSubscriptions() {
44
+ return postEsauJrHasSubscriptions() || postFirstEsauJrHasSubscriptions();
45
+ }
46
+
47
+ // ModCallback.POST_UPDATE (1)
48
+ function postUpdate() {
49
+ if (!hasSubscriptions()) {
50
+ return;
51
+ }
52
+
53
+ const gameFrameCount = game.GetFrameCount();
54
+
55
+ // Check to see if it is the frame after the player has used Esau Jr.
56
+ if (
57
+ v.run.usedEsauJrFrame === null ||
58
+ gameFrameCount < v.run.usedEsauJrFrame + 1
59
+ ) {
60
+ return;
61
+ }
62
+ v.run.usedEsauJrFrame = null;
63
+
64
+ // Find the player corresponding to the player who used Esau Jr. a frame ago (via matching the
65
+ // ControllerIndex).
66
+ if (v.run.usedEsauJrControllerIndex === null) {
67
+ return;
68
+ }
69
+ const player = getPlayerWithControllerIndex(v.run.usedEsauJrControllerIndex);
70
+ v.run.usedEsauJrControllerIndex = null;
71
+ if (player === undefined) {
72
+ return;
73
+ }
74
+
75
+ if (!v.run.usedEsauJrAtLeastOnce) {
76
+ v.run.usedEsauJrAtLeastOnce = true;
77
+ postFirstEsauJrFire(player);
78
+ }
79
+
80
+ postEsauJrFire(player);
81
+ }
82
+
83
+ function getPlayerWithControllerIndex(controllerIndex: ControllerIndex) {
84
+ const players = getPlayers();
85
+ return players.find((player) => player.ControllerIndex === controllerIndex);
86
+ }
87
+
88
+ // ModCallback.POST_USE_ITEM (3)
89
+ // CollectibleType.ESAU_JR (703)
90
+ function useItemEsauJr(
91
+ _collectibleType: CollectibleType,
92
+ _rng: RNG,
93
+ player: EntityPlayer,
94
+ _useFlags: BitFlags<UseFlag>,
95
+ _activeSlot: int,
96
+ _customVarData: int,
97
+ ): boolean | undefined {
98
+ if (!hasSubscriptions()) {
99
+ return undefined;
100
+ }
101
+
102
+ const gameFrameCount = game.GetFrameCount();
103
+
104
+ // The player only changes to Esau Jr. on the frame after the item is used.
105
+ v.run.usedEsauJrFrame = gameFrameCount + 1;
106
+ v.run.usedEsauJrControllerIndex = player.ControllerIndex;
107
+
108
+ return undefined;
109
+ }
@@ -0,0 +1,36 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { saveDataManager } from "../features/saveDataManager/exports";
3
+ import {
4
+ postFamiliarInitLateFire,
5
+ postFamiliarInitLateHasSubscriptions,
6
+ } from "./subscriptions/postFamiliarInitLate";
7
+
8
+ const v = {
9
+ run: {
10
+ firedSet: new Set<PtrHash>(),
11
+ },
12
+ };
13
+
14
+ /** @internal */
15
+ export function postFamiliarInitLateInit(mod: Mod): void {
16
+ saveDataManager("postFamiliarInitLate", v, hasSubscriptions);
17
+
18
+ mod.AddCallback(ModCallback.POST_FAMILIAR_UPDATE, postFamiliarUpdate); // 6
19
+ }
20
+
21
+ function hasSubscriptions() {
22
+ return postFamiliarInitLateHasSubscriptions();
23
+ }
24
+
25
+ // ModCallback.POST_FAMILIAR_UPDATE (6)
26
+ function postFamiliarUpdate(familiar: EntityFamiliar) {
27
+ if (!hasSubscriptions()) {
28
+ return;
29
+ }
30
+
31
+ const index = GetPtrHash(familiar);
32
+ if (!v.run.firedSet.has(index)) {
33
+ v.run.firedSet.add(index);
34
+ postFamiliarInitLateFire(familiar);
35
+ }
36
+ }
@@ -0,0 +1,43 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { DefaultMap } from "../classes/DefaultMap";
3
+ import { saveDataManager } from "../features/saveDataManager/exports";
4
+ import {
5
+ postFamiliarStateChangedFire,
6
+ postFamiliarStateChangedHasSubscriptions,
7
+ } from "./subscriptions/postFamiliarStateChanged";
8
+
9
+ const v = {
10
+ run: {
11
+ familiarStateMap: new DefaultMap<PtrHash, int, [int]>((state) => state),
12
+ },
13
+ };
14
+
15
+ /** @internal */
16
+ export function postFamiliarStateChangedInit(mod: Mod): void {
17
+ saveDataManager("postFamiliarStateChanged", v, hasSubscriptions);
18
+
19
+ mod.AddCallback(ModCallback.POST_FAMILIAR_UPDATE, postFamiliarUpdate); // 6
20
+ }
21
+
22
+ function hasSubscriptions() {
23
+ return postFamiliarStateChangedHasSubscriptions();
24
+ }
25
+
26
+ // ModCallback.POST_FAMILIAR_UPDATE (6)
27
+ function postFamiliarUpdate(familiar: EntityFamiliar) {
28
+ if (!hasSubscriptions()) {
29
+ return;
30
+ }
31
+
32
+ const ptrHash = GetPtrHash(familiar);
33
+ const previousState = v.run.familiarStateMap.getAndSetDefault(
34
+ ptrHash,
35
+ familiar.State,
36
+ );
37
+ const currentState = familiar.State;
38
+ v.run.familiarStateMap.set(ptrHash, currentState);
39
+
40
+ if (previousState !== currentState) {
41
+ postFamiliarStateChangedFire(familiar, previousState, currentState);
42
+ }
43
+ }
@@ -22,20 +22,21 @@ function hasSubscriptions(self)
22
22
  end
23
23
  function useItemFlip(self, _collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData)
24
24
  if not hasSubscriptions(nil) then
25
- return
25
+ return nil
26
26
  end
27
27
  if not isTaintedLazarus(nil, player) then
28
- return
28
+ return nil
29
29
  end
30
30
  local newLazarus = getNewLazarus(nil, player)
31
31
  if newLazarus == nil then
32
- return
32
+ return nil
33
33
  end
34
34
  if not v.run.usedFlipAtLeastOnce then
35
35
  v.run.usedFlipAtLeastOnce = true
36
36
  postFirstFlipFire(nil, newLazarus)
37
37
  end
38
38
  postFlipFire(nil, newLazarus)
39
+ return nil
39
40
  end
40
41
  function getNewLazarus(self, oldLazarus)
41
42
  local oldCharacter = oldLazarus:GetPlayerType()
@@ -0,0 +1,90 @@
1
+ // This provides the logic for:
2
+ // - POST_FLIP
3
+ // - POST_FIRST_FLIP
4
+
5
+ import {
6
+ CollectibleType,
7
+ ModCallback,
8
+ PlayerType,
9
+ UseFlag,
10
+ } from "isaac-typescript-definitions";
11
+ import { saveDataManager } from "../features/saveDataManager/exports";
12
+ import { getPlayersOfType, isTaintedLazarus } from "../functions/player";
13
+ import {
14
+ postFirstFlipFire,
15
+ postFirstFlipHasSubscriptions,
16
+ } from "./subscriptions/postFirstFlip";
17
+ import {
18
+ postFlipFire,
19
+ postFlipHasSubscriptions,
20
+ } from "./subscriptions/postFlip";
21
+
22
+ const v = {
23
+ run: {
24
+ usedFlipAtLeastOnce: false,
25
+ },
26
+ };
27
+
28
+ /** @internal */
29
+ export function postFlipCallbacksInit(mod: Mod): void {
30
+ saveDataManager("postFlip", v, hasSubscriptions);
31
+
32
+ mod.AddCallback(ModCallback.POST_USE_ITEM, useItemFlip, CollectibleType.FLIP); // 3
33
+ }
34
+
35
+ function hasSubscriptions() {
36
+ return postFlipHasSubscriptions() || postFirstFlipHasSubscriptions();
37
+ }
38
+
39
+ // ModCallback.POST_USE_ITEM (3)
40
+ // CollectibleType.FLIP (711)
41
+ function useItemFlip(
42
+ _collectibleType: CollectibleType,
43
+ _rng: RNG,
44
+ player: EntityPlayer,
45
+ _useFlags: BitFlags<UseFlag>,
46
+ _activeSlot: int,
47
+ _customVarData: int,
48
+ ): boolean | undefined {
49
+ if (!hasSubscriptions()) {
50
+ return undefined;
51
+ }
52
+
53
+ if (!isTaintedLazarus(player)) {
54
+ return undefined;
55
+ }
56
+
57
+ // The player passed as part of the callback will be the old Lazarus that used the Flip item. We
58
+ // pass the new Lazarus to the callback subscribers.
59
+ const newLazarus = getNewLazarus(player);
60
+ if (newLazarus === undefined) {
61
+ return undefined;
62
+ }
63
+
64
+ if (!v.run.usedFlipAtLeastOnce) {
65
+ v.run.usedFlipAtLeastOnce = true;
66
+ postFirstFlipFire(newLazarus);
67
+ }
68
+
69
+ postFlipFire(newLazarus);
70
+
71
+ return undefined;
72
+ }
73
+
74
+ function getNewLazarus(oldLazarus: EntityPlayer) {
75
+ const oldCharacter = oldLazarus.GetPlayerType();
76
+
77
+ let newCharacter: PlayerType;
78
+ if (oldCharacter === PlayerType.LAZARUS_B) {
79
+ newCharacter = PlayerType.LAZARUS_2_B;
80
+ } else if (oldCharacter === PlayerType.LAZARUS_2_B) {
81
+ newCharacter = PlayerType.LAZARUS_B;
82
+ } else {
83
+ error("Failed to determine the character in the postFlip callback.");
84
+ }
85
+
86
+ const playersOfType = getPlayersOfType(newCharacter);
87
+ return playersOfType.find(
88
+ (player) => player.FrameCount === oldLazarus.FrameCount,
89
+ );
90
+ }
@@ -0,0 +1,41 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { game } from "../cachedClasses";
3
+ import { ModUpgraded } from "../classes/ModUpgraded";
4
+ import { saveDataManager } from "../features/saveDataManager/exports";
5
+ import {
6
+ postGreedModeWaveFire,
7
+ postGreedModeWaveHasSubscriptions,
8
+ } from "./subscriptions/postGreedModeWave";
9
+
10
+ const v = {
11
+ run: {
12
+ currentGreedWave: 0,
13
+ },
14
+ };
15
+
16
+ /** @internal */
17
+ export function postGreedModeWaveInit(mod: ModUpgraded): void {
18
+ saveDataManager("postModeGreedWave", v, hasSubscriptions);
19
+
20
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
21
+ }
22
+
23
+ function hasSubscriptions() {
24
+ return postGreedModeWaveHasSubscriptions();
25
+ }
26
+
27
+ // ModCallback.POST_UPDATE (1)
28
+ function postUpdate() {
29
+ if (!hasSubscriptions()) {
30
+ return;
31
+ }
32
+
33
+ const level = game.GetLevel();
34
+ const newWave = level.GreedModeWave;
35
+ const oldWave = v.run.currentGreedWave;
36
+ v.run.currentGreedWave = newWave;
37
+
38
+ if (newWave > oldWave) {
39
+ postGreedModeWaveFire(oldWave, newWave);
40
+ }
41
+ }
@@ -0,0 +1,164 @@
1
+ // This provides the logic for the following callbacks:
2
+ // - PostGridEntityInit
3
+ // - PostGridEntityUpdate
4
+ // - PostGridEntityRemove
5
+ // - PostGridEntityStateChanged
6
+ // - PostGridEntityBroken
7
+
8
+ import { GridEntityType, ModCallback } from "isaac-typescript-definitions";
9
+ import { ModUpgraded } from "../classes/ModUpgraded";
10
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
11
+ import { saveDataManager } from "../features/saveDataManager/exports";
12
+ import {
13
+ getGridEntitiesMap,
14
+ isGridEntityBroken,
15
+ } from "../functions/gridEntity";
16
+ import {
17
+ postGridEntityBrokenFire,
18
+ postGridEntityBrokenHasSubscriptions,
19
+ } from "./subscriptions/postGridEntityBroken";
20
+ import {
21
+ postGridEntityInitFire,
22
+ postGridEntityInitHasSubscriptions,
23
+ } from "./subscriptions/postGridEntityInit";
24
+ import {
25
+ postGridEntityRemoveFire,
26
+ postGridEntityRemoveHasSubscriptions,
27
+ } from "./subscriptions/postGridEntityRemove";
28
+ import {
29
+ postGridEntityStateChangedFire,
30
+ postGridEntityStateChangedHasSubscriptions,
31
+ } from "./subscriptions/postGridEntityStateChanged";
32
+ import {
33
+ postGridEntityUpdateFire,
34
+ postGridEntityUpdateHasSubscriptions,
35
+ } from "./subscriptions/postGridEntityUpdate";
36
+
37
+ type GridEntityTuple = [
38
+ gridEntityType: GridEntityType,
39
+ gridEntityVariant: int,
40
+ state: int,
41
+ ];
42
+
43
+ const v = {
44
+ room: {
45
+ /** Indexed by grid index. */
46
+ initializedGridEntities: new Map<int, GridEntityTuple>(),
47
+ },
48
+ };
49
+
50
+ /** @internal */
51
+ export function postGridEntityCallbacksInit(mod: ModUpgraded): void {
52
+ saveDataManager("postGridEntity", v, hasSubscriptions);
53
+
54
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
55
+ mod.AddCallbackCustom(
56
+ ModCallbackCustom.POST_NEW_ROOM_REORDERED,
57
+ postNewRoomReordered,
58
+ );
59
+ }
60
+
61
+ function hasSubscriptions() {
62
+ return (
63
+ postGridEntityInitHasSubscriptions() ||
64
+ postGridEntityUpdateHasSubscriptions() ||
65
+ postGridEntityRemoveHasSubscriptions() ||
66
+ postGridEntityStateChangedHasSubscriptions() ||
67
+ postGridEntityBrokenHasSubscriptions()
68
+ );
69
+ }
70
+
71
+ // ModCallback.POST_UPDATE (1)
72
+ function postUpdate() {
73
+ if (!hasSubscriptions()) {
74
+ return;
75
+ }
76
+
77
+ const gridEntitiesMap = getGridEntitiesMap();
78
+
79
+ // We check for removed grid entities first so that grid entities that change type will count as
80
+ // being removed and fire the PostGridEntityRemoved callback.
81
+ checkGridEntitiesRemoved(gridEntitiesMap);
82
+
83
+ for (const [gridIndex, gridEntity] of gridEntitiesMap.entries()) {
84
+ checkGridEntityStateChanged(gridIndex, gridEntity);
85
+ checkNewGridEntity(gridIndex, gridEntity);
86
+ postGridEntityUpdateFire(gridEntity);
87
+ }
88
+ }
89
+
90
+ function checkGridEntitiesRemoved(gridEntitiesMap: Map<int, GridEntity>) {
91
+ for (const [
92
+ gridIndex,
93
+ gridEntityTuple,
94
+ ] of v.room.initializedGridEntities.entries()) {
95
+ const [storedGridEntityType, storedGridEntityVariant] = gridEntityTuple;
96
+ const gridEntity = gridEntitiesMap.get(gridIndex);
97
+ if (
98
+ gridEntity === undefined ||
99
+ gridEntity.GetType() !== storedGridEntityType
100
+ ) {
101
+ v.room.initializedGridEntities.delete(gridIndex);
102
+ postGridEntityRemoveFire(
103
+ gridIndex,
104
+ storedGridEntityType,
105
+ storedGridEntityVariant,
106
+ );
107
+ }
108
+ }
109
+ }
110
+
111
+ function checkGridEntityStateChanged(gridIndex: int, gridEntity: GridEntity) {
112
+ const gridEntityTuple = v.room.initializedGridEntities.get(gridIndex);
113
+ if (gridEntityTuple === undefined) {
114
+ // This grid entity did not exist a frame ago; we don't want to fire the state changed callback
115
+ // on the first frame that it exists.
116
+ return;
117
+ }
118
+
119
+ const [_gridEntityType, _gridEntityVariant, oldState] = gridEntityTuple;
120
+ const newState = gridEntity.State;
121
+ if (oldState !== newState) {
122
+ updateTupleInMap(gridEntity);
123
+ postGridEntityStateChangedFire(gridEntity, oldState, newState);
124
+
125
+ if (isGridEntityBroken(gridEntity)) {
126
+ postGridEntityBrokenFire(gridEntity);
127
+ }
128
+ }
129
+ }
130
+
131
+ function checkNewGridEntity(gridIndex: int, gridEntity: GridEntity) {
132
+ const gridEntityType = gridEntity.GetType();
133
+ const gridEntityTuple = v.room.initializedGridEntities.get(gridIndex);
134
+
135
+ if (gridEntityTuple === undefined || gridEntityTuple[0] !== gridEntityType) {
136
+ updateTupleInMap(gridEntity);
137
+ postGridEntityInitFire(gridEntity);
138
+ }
139
+ }
140
+
141
+ function updateTupleInMap(gridEntity: GridEntity) {
142
+ const gridEntityType = gridEntity.GetType();
143
+ const gridEntityVariant = gridEntity.GetVariant();
144
+ const gridIndex = gridEntity.GetGridIndex();
145
+ const newTuple: GridEntityTuple = [
146
+ gridEntityType,
147
+ gridEntityVariant,
148
+ gridEntity.State,
149
+ ];
150
+ v.room.initializedGridEntities.set(gridIndex, newTuple);
151
+ }
152
+
153
+ // ModCallbackCustom.POST_NEW_ROOM_REORDERED
154
+ function postNewRoomReordered() {
155
+ if (!hasSubscriptions()) {
156
+ return;
157
+ }
158
+
159
+ const gridEntitiesMap = getGridEntitiesMap();
160
+
161
+ for (const [gridIndex, gridEntity] of gridEntitiesMap.entries()) {
162
+ checkNewGridEntity(gridIndex, gridEntity);
163
+ }
164
+ }
@@ -0,0 +1,69 @@
1
+ import { GridCollisionClass, ModCallback } from "isaac-typescript-definitions";
2
+ import { DefaultMap } from "../classes/DefaultMap";
3
+ import { saveDataManager } from "../features/saveDataManager/exports";
4
+ import {
5
+ getCollidingEntitiesWithGridEntity,
6
+ getGridEntities,
7
+ } from "../functions/gridEntity";
8
+ import {
9
+ postGridEntityCollisionFire,
10
+ postGridEntityCollisionHasSubscriptions,
11
+ } from "./subscriptions/postGridEntityCollision";
12
+
13
+ const v = {
14
+ room: {
15
+ /** Indexed by grid entity pointer hash. */
16
+ collidingEntitiesMap: new DefaultMap<PtrHash, Set<PtrHash>>(
17
+ () => new Set(),
18
+ ),
19
+ },
20
+ };
21
+
22
+ /** @internal */
23
+ export function postGridEntityCollisionInit(mod: Mod): void {
24
+ saveDataManager("postGridEntityCollision", v, hasSubscriptions);
25
+
26
+ mod.AddCallback(ModCallback.POST_UPDATE, postUpdate); // 1
27
+ }
28
+
29
+ function hasSubscriptions() {
30
+ return postGridEntityCollisionHasSubscriptions();
31
+ }
32
+
33
+ // ModCallback.POST_UPDATE (1)
34
+ function postUpdate() {
35
+ if (!hasSubscriptions()) {
36
+ return;
37
+ }
38
+
39
+ const gridEntities = getGridEntities();
40
+ const gridEntitiesWithCollision = gridEntities.filter(
41
+ (gridEntity) => gridEntity.CollisionClass !== GridCollisionClass.NONE,
42
+ );
43
+ for (const gridEntity of gridEntitiesWithCollision) {
44
+ const gridEntityPtrHash = GetPtrHash(gridEntity);
45
+ const oldCollidingEntities =
46
+ v.room.collidingEntitiesMap.getAndSetDefault(gridEntityPtrHash);
47
+
48
+ // Check for new colliding entities.
49
+ const collidingEntities = getCollidingEntitiesWithGridEntity(gridEntity);
50
+ for (const entity of collidingEntities) {
51
+ const entityPtrHash = GetPtrHash(entity);
52
+ if (!oldCollidingEntities.has(entityPtrHash)) {
53
+ oldCollidingEntities.add(entityPtrHash);
54
+ postGridEntityCollisionFire(gridEntity, entity);
55
+ }
56
+ }
57
+
58
+ // Remove old colliding entities.
59
+ const collidingEntitiesPtrHashes = collidingEntities.map((entity) =>
60
+ GetPtrHash(entity),
61
+ );
62
+ const collidingEntitiesPtrHashSet = new Set(collidingEntitiesPtrHashes);
63
+ for (const oldCollidingEntityPtrHash of oldCollidingEntities.values()) {
64
+ if (!collidingEntitiesPtrHashSet.has(oldCollidingEntityPtrHash)) {
65
+ oldCollidingEntities.delete(oldCollidingEntityPtrHash);
66
+ }
67
+ }
68
+ }
69
+ }
@@ -0,0 +1,26 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { getGridEntities } from "../functions/gridEntity";
3
+ import {
4
+ postGridEntityRenderFire,
5
+ postGridEntityRenderHasSubscriptions,
6
+ } from "./subscriptions/postGridEntityRender";
7
+
8
+ /** @internal */
9
+ export function postGridEntityRenderInit(mod: Mod): void {
10
+ mod.AddCallback(ModCallback.POST_RENDER, postRender); // 2
11
+ }
12
+
13
+ function hasSubscriptions() {
14
+ return postGridEntityRenderHasSubscriptions();
15
+ }
16
+
17
+ // ModCallback.POST_RENDER (2)
18
+ function postRender() {
19
+ if (!hasSubscriptions()) {
20
+ return;
21
+ }
22
+
23
+ for (const gridEntity of getGridEntities()) {
24
+ postGridEntityRenderFire(gridEntity);
25
+ }
26
+ }
@@ -0,0 +1,55 @@
1
+ import { CollectibleType } from "isaac-typescript-definitions";
2
+ import { DefaultMap } from "../classes/DefaultMap";
3
+ import { ModUpgraded } from "../classes/ModUpgraded";
4
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
5
+ import { saveDataManager } from "../features/saveDataManager/exports";
6
+ import {
7
+ defaultMapGetPlayer,
8
+ mapSetPlayer,
9
+ } from "../functions/playerDataStructures";
10
+ import { PlayerIndex } from "../types/PlayerIndex";
11
+ import {
12
+ postHolyMantleRemovedFire,
13
+ postHolyMantleRemovedHasSubscriptions,
14
+ } from "./subscriptions/postHolyMantleRemoved";
15
+
16
+ const v = {
17
+ run: {
18
+ playersHolyMantleMap: new DefaultMap<PlayerIndex, int>(0),
19
+ },
20
+ };
21
+
22
+ /** @internal */
23
+ export function postHolyMantleRemovedInit(mod: ModUpgraded): void {
24
+ saveDataManager("postHolyMantleRemoved", v, hasSubscriptions);
25
+
26
+ mod.AddCallbackCustom(
27
+ ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED,
28
+ postPEffectUpdateReordered,
29
+ );
30
+ }
31
+
32
+ function hasSubscriptions() {
33
+ return postHolyMantleRemovedHasSubscriptions();
34
+ }
35
+
36
+ // ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED
37
+ function postPEffectUpdateReordered(player: EntityPlayer) {
38
+ if (!hasSubscriptions()) {
39
+ return;
40
+ }
41
+
42
+ const effects = player.GetEffects();
43
+ const newNumHolyMantles = effects.GetCollectibleEffectNum(
44
+ CollectibleType.HOLY_MANTLE,
45
+ );
46
+ const oldNumHolyMantles = defaultMapGetPlayer(
47
+ v.run.playersHolyMantleMap,
48
+ player,
49
+ );
50
+ mapSetPlayer(v.run.playersHolyMantleMap, player, newNumHolyMantles);
51
+
52
+ if (newNumHolyMantles < oldNumHolyMantles) {
53
+ postHolyMantleRemovedFire(player, oldNumHolyMantles, newNumHolyMantles);
54
+ }
55
+ }
@@ -65,17 +65,18 @@ function playerRecentlyCollidedWithBulb(self, player)
65
65
  end
66
66
  function preNPCCollisionSucker(self, npc, collider)
67
67
  if not hasSubscriptions(nil) then
68
- return
68
+ return nil
69
69
  end
70
70
  if npc.Variant ~= SuckerVariant.BULB then
71
- return
71
+ return nil
72
72
  end
73
73
  local player = collider:ToPlayer()
74
74
  if player == nil then
75
- return
75
+ return nil
76
76
  end
77
77
  local gameFrameCount = game:GetFrameCount()
78
78
  mapSetPlayer(nil, v.room.playersBulbLastCollisionFrame, player, gameFrameCount)
79
+ return nil
79
80
  end
80
81
  v = {
81
82
  run = {