isaacscript-common 4.0.0 → 4.0.1-dev.0

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 (387) 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.ts +183 -0
  11. package/callbacks/postCustomDoorEnter.lua +0 -7
  12. package/callbacks/postCustomDoorEnter.ts +292 -0
  13. package/callbacks/postDiceRoomActivated.ts +60 -0
  14. package/callbacks/postDoorRender.ts +26 -0
  15. package/callbacks/postDoorUpdate.ts +26 -0
  16. package/callbacks/postEffectInitLate.ts +36 -0
  17. package/callbacks/postEffectStateChanged.ts +43 -0
  18. package/callbacks/postEsauJr.ts +107 -0
  19. package/callbacks/postFamiliarInitLate.ts +36 -0
  20. package/callbacks/postFamiliarStateChanged.ts +43 -0
  21. package/callbacks/postFlip.ts +88 -0
  22. package/callbacks/postGreedModeWave.ts +41 -0
  23. package/callbacks/postGridEntity.ts +164 -0
  24. package/callbacks/postGridEntityCollision.ts +69 -0
  25. package/callbacks/postGridEntityRender.ts +26 -0
  26. package/callbacks/postHolyMantleRemoved.ts +55 -0
  27. package/callbacks/postItemDischarged.ts +149 -0
  28. package/callbacks/postKnifeInitLate.ts +36 -0
  29. package/callbacks/postLaserInitLate.ts +36 -0
  30. package/callbacks/postNPCInitLate.ts +36 -0
  31. package/callbacks/postNPCStateChanged.ts +42 -0
  32. package/callbacks/postNewRoomEarly.ts +90 -0
  33. package/callbacks/postPickupCollect.ts +48 -0
  34. package/callbacks/postPickupInitFirst.ts +70 -0
  35. package/callbacks/postPickupInitLate.ts +36 -0
  36. package/callbacks/postPickupStateChanged.ts +43 -0
  37. package/callbacks/postPitRender.ts +26 -0
  38. package/callbacks/postPitUpdate.ts +26 -0
  39. package/callbacks/postPlayerChangeHealth.ts +62 -0
  40. package/callbacks/postPlayerChangeType.ts +56 -0
  41. package/callbacks/postPlayerCollectible.ts +113 -0
  42. package/callbacks/postPlayerFatalDamage.ts +141 -0
  43. package/callbacks/postPlayerInitLate.ts +37 -0
  44. package/callbacks/postPlayerReordered.ts +142 -0
  45. package/callbacks/postPoopRender.ts +26 -0
  46. package/callbacks/postPoopUpdate.ts +26 -0
  47. package/callbacks/postPressurePlateRender.ts +26 -0
  48. package/callbacks/postPressurePlateUpdate.ts +26 -0
  49. package/callbacks/postProjectileInitLate.ts +36 -0
  50. package/callbacks/postPurchase.ts +64 -0
  51. package/callbacks/postRockRender.ts +26 -0
  52. package/callbacks/postRockUpdate.ts +26 -0
  53. package/callbacks/postRoomClearChanged.ts +57 -0
  54. package/callbacks/postSacrifice.ts +62 -0
  55. package/callbacks/postSlotDestroyed.ts +92 -0
  56. package/callbacks/postSlotInitUpdate.ts +68 -0
  57. package/callbacks/postSlotRender.ts +69 -0
  58. package/callbacks/postSpikesRender.ts +26 -0
  59. package/callbacks/postSpikesUpdate.ts +26 -0
  60. package/callbacks/postTNTRender.ts +26 -0
  61. package/callbacks/postTNTUpdate.ts +26 -0
  62. package/callbacks/postTearInitLate.ts +36 -0
  63. package/callbacks/postTearInitVeryLate.ts +41 -0
  64. package/callbacks/postTransformation.ts +59 -0
  65. package/callbacks/postTrinketBreak.ts +110 -0
  66. package/callbacks/preBerserkDeath.ts +49 -0
  67. package/callbacks/preNewLevel.ts +55 -0
  68. package/callbacks/reorderedCallbacks.ts +166 -0
  69. package/callbacks/subscriptions/postAmbushFinished.ts +32 -0
  70. package/callbacks/subscriptions/postAmbushStarted.ts +32 -0
  71. package/callbacks/subscriptions/postBombInitLate.ts +32 -0
  72. package/callbacks/subscriptions/postBoneExploded.ts +32 -0
  73. package/callbacks/subscriptions/postBoneSwing.ts +24 -0
  74. package/callbacks/subscriptions/postCollectibleInitFirst.ts +37 -0
  75. package/callbacks/subscriptions/postCursedTeleport.ts +24 -0
  76. package/callbacks/subscriptions/postCustomDoorEnter.ts +45 -0
  77. package/callbacks/subscriptions/postCustomRevive.ts +36 -0
  78. package/callbacks/subscriptions/postDiceRoomActivated.ts +38 -0
  79. package/callbacks/subscriptions/postDoorRender.ts +35 -0
  80. package/callbacks/subscriptions/postDoorUpdate.ts +35 -0
  81. package/callbacks/subscriptions/postEffectInitLate.ts +32 -0
  82. package/callbacks/subscriptions/postEffectStateChanged.ts +40 -0
  83. package/callbacks/subscriptions/postEsauJr.ts +24 -0
  84. package/callbacks/subscriptions/postFamiliarInitLate.ts +32 -0
  85. package/callbacks/subscriptions/postFamiliarStateChanged.ts +40 -0
  86. package/callbacks/subscriptions/postFirstEsauJr.ts +24 -0
  87. package/callbacks/subscriptions/postFirstFlip.ts +24 -0
  88. package/callbacks/subscriptions/postFlip.ts +22 -0
  89. package/callbacks/subscriptions/postGameStartedReordered.ts +24 -0
  90. package/callbacks/subscriptions/postGreedModeWave.ts +24 -0
  91. package/callbacks/subscriptions/postGridEntityBroken.ts +51 -0
  92. package/callbacks/subscriptions/postGridEntityCollision.ts +54 -0
  93. package/callbacks/subscriptions/postGridEntityInit.ts +51 -0
  94. package/callbacks/subscriptions/postGridEntityRemove.ts +52 -0
  95. package/callbacks/subscriptions/postGridEntityRender.ts +51 -0
  96. package/callbacks/subscriptions/postGridEntityStateChanged.ts +55 -0
  97. package/callbacks/subscriptions/postGridEntityUpdate.ts +51 -0
  98. package/callbacks/subscriptions/postHolyMantleRemoved.ts +48 -0
  99. package/callbacks/subscriptions/postItemDischarged.ts +43 -0
  100. package/callbacks/subscriptions/postItemPickup.ts +64 -0
  101. package/callbacks/subscriptions/postKnifeInitLate.ts +32 -0
  102. package/callbacks/subscriptions/postLaserInitLate.ts +32 -0
  103. package/callbacks/subscriptions/postNPCInitLate.ts +32 -0
  104. package/callbacks/subscriptions/postNPCStateChanged.ts +42 -0
  105. package/callbacks/subscriptions/postNewLevelReordered.ts +22 -0
  106. package/callbacks/subscriptions/postNewRoomEarly.ts +22 -0
  107. package/callbacks/subscriptions/postNewRoomReordered.ts +22 -0
  108. package/callbacks/subscriptions/postPEffectUpdateReordered.ts +40 -0
  109. package/callbacks/subscriptions/postPickupCollect.ts +35 -0
  110. package/callbacks/subscriptions/postPickupInitFirst.ts +32 -0
  111. package/callbacks/subscriptions/postPickupInitLate.ts +32 -0
  112. package/callbacks/subscriptions/postPickupStateChanged.ts +40 -0
  113. package/callbacks/subscriptions/postPitRender.ts +35 -0
  114. package/callbacks/subscriptions/postPitUpdate.ts +35 -0
  115. package/callbacks/subscriptions/postPlayerChangeHealth.ts +49 -0
  116. package/callbacks/subscriptions/postPlayerChangeType.ts +40 -0
  117. package/callbacks/subscriptions/postPlayerCollectibleAdded.ts +38 -0
  118. package/callbacks/subscriptions/postPlayerCollectibleRemoved.ts +38 -0
  119. package/callbacks/subscriptions/postPlayerFatalDamage.d.ts +1 -1
  120. package/callbacks/subscriptions/postPlayerFatalDamage.ts +68 -0
  121. package/callbacks/subscriptions/postPlayerInitLate.ts +40 -0
  122. package/callbacks/subscriptions/postPlayerInitReordered.ts +40 -0
  123. package/callbacks/subscriptions/postPlayerRenderReordered.ts +40 -0
  124. package/callbacks/subscriptions/postPlayerUpdateReordered.ts +40 -0
  125. package/callbacks/subscriptions/postPoopRender.ts +35 -0
  126. package/callbacks/subscriptions/postPoopUpdate.ts +35 -0
  127. package/callbacks/subscriptions/postPressurePlateRender.ts +37 -0
  128. package/callbacks/subscriptions/postPressurePlateUpdate.ts +37 -0
  129. package/callbacks/subscriptions/postProjectileInitLate.ts +35 -0
  130. package/callbacks/subscriptions/postPurchase.ts +31 -0
  131. package/callbacks/subscriptions/postRockRender.ts +35 -0
  132. package/callbacks/subscriptions/postRockUpdate.ts +35 -0
  133. package/callbacks/subscriptions/postRoomClearChanged.ts +30 -0
  134. package/callbacks/subscriptions/postSacrifice.ts +43 -0
  135. package/callbacks/subscriptions/postSlotAnimationChanged.ts +40 -0
  136. package/callbacks/subscriptions/postSlotDestroyed.ts +55 -0
  137. package/callbacks/subscriptions/postSlotInit.ts +32 -0
  138. package/callbacks/subscriptions/postSlotRender.ts +32 -0
  139. package/callbacks/subscriptions/postSlotUpdate.ts +32 -0
  140. package/callbacks/subscriptions/postSpikesRender.ts +35 -0
  141. package/callbacks/subscriptions/postSpikesUpdate.ts +35 -0
  142. package/callbacks/subscriptions/postTNTRender.ts +35 -0
  143. package/callbacks/subscriptions/postTNTUpdate.ts +35 -0
  144. package/callbacks/subscriptions/postTearInitLate.ts +32 -0
  145. package/callbacks/subscriptions/postTearInitVeryLate.ts +32 -0
  146. package/callbacks/subscriptions/postTransformation.ts +40 -0
  147. package/callbacks/subscriptions/postTrinketBreak.ts +38 -0
  148. package/callbacks/subscriptions/preBerserkDeath.ts +42 -0
  149. package/callbacks/subscriptions/preCustomRevive.d.ts +1 -1
  150. package/callbacks/subscriptions/preCustomRevive.ts +46 -0
  151. package/callbacks/subscriptions/preItemPickup.ts +64 -0
  152. package/callbacks/subscriptions/preNewLevel.ts +24 -0
  153. package/classes/DefaultMap.ts +174 -0
  154. package/classes/ModUpgraded.ts +77 -0
  155. package/constants.ts +162 -0
  156. package/constantsFirstLast.ts +217 -0
  157. package/enums/AmbushType.ts +4 -0
  158. package/enums/HealthType.ts +16 -0
  159. package/enums/ModCallbackCustom.d.ts +2 -2
  160. package/enums/ModCallbackCustom.ts +1278 -0
  161. package/enums/PocketItemType.ts +8 -0
  162. package/enums/SerializationType.ts +5 -0
  163. package/enums/SlotDestructionType.ts +4 -0
  164. package/enums/private/CopyableIsaacAPIClassType.ts +7 -0
  165. package/enums/private/SaveDataKey.ts +14 -0
  166. package/enums/private/SerializationBrand.ts +42 -0
  167. package/features/characterHealthConversion.lua +2 -9
  168. package/features/characterHealthConversion.ts +111 -0
  169. package/features/characterStats.ts +61 -0
  170. package/features/debugDisplay/debugDisplay.ts +221 -0
  171. package/features/debugDisplay/exports.ts +368 -0
  172. package/features/debugDisplay/v.ts +65 -0
  173. package/features/deployJSONRoom.ts +743 -0
  174. package/features/disableInputs.ts +193 -0
  175. package/features/disableSound.ts +77 -0
  176. package/features/extraConsoleCommands/commandsDisplay.ts +290 -0
  177. package/features/extraConsoleCommands/commandsSubroutines.ts +139 -0
  178. package/features/extraConsoleCommands/init.ts +334 -0
  179. package/features/extraConsoleCommands/listCommands.ts +1299 -0
  180. package/features/extraConsoleCommands/v.ts +14 -0
  181. package/features/fadeInRemover.ts +60 -0
  182. package/features/fastReset.ts +75 -0
  183. package/features/forgottenSwitch.ts +50 -0
  184. package/features/getCollectibleItemPoolType.ts +66 -0
  185. package/features/persistentEntities.ts +183 -0
  186. package/features/playerInventory.ts +133 -0
  187. package/features/ponyDetection.ts +74 -0
  188. package/features/preventCollectibleRotation.ts +115 -0
  189. package/features/runInNFrames.ts +148 -0
  190. package/features/saveDataManager/constants.ts +4 -0
  191. package/features/saveDataManager/exports.ts +229 -0
  192. package/features/saveDataManager/load.ts +99 -0
  193. package/features/saveDataManager/main.ts +195 -0
  194. package/features/saveDataManager/maps.ts +13 -0
  195. package/features/saveDataManager/merge.ts +194 -0
  196. package/features/saveDataManager/save.ts +74 -0
  197. package/features/saveDataManager/serializationBrand.ts +16 -0
  198. package/features/sirenHelpers.ts +129 -0
  199. package/features/taintedLazarusPlayers.ts +113 -0
  200. package/featuresInitialized.ts +20 -0
  201. package/functions/ambush.ts +47 -0
  202. package/functions/array.ts +410 -0
  203. package/functions/benchmark.ts +36 -0
  204. package/functions/bitwise.ts +24 -0
  205. package/functions/bombs.ts +12 -0
  206. package/functions/boss.ts +227 -0
  207. package/functions/cacheFlag.ts +12 -0
  208. package/functions/cards.ts +271 -0
  209. package/functions/challenges.ts +13 -0
  210. package/functions/character.ts +126 -0
  211. package/functions/charge.ts +237 -0
  212. package/functions/chargeBar.ts +67 -0
  213. package/functions/collectibleCacheFlag.ts +90 -0
  214. package/functions/collectibleSet.ts +56 -0
  215. package/functions/collectibleTag.ts +89 -0
  216. package/functions/collectibles.ts +659 -0
  217. package/functions/color.lua +0 -7
  218. package/functions/color.ts +128 -0
  219. package/functions/debug.ts +68 -0
  220. package/functions/deepCopy.lua +46 -51
  221. package/functions/deepCopy.ts +535 -0
  222. package/functions/deepCopyTests.ts +386 -0
  223. package/functions/direction.ts +49 -0
  224. package/functions/doors.ts +347 -0
  225. package/functions/easing.ts +182 -0
  226. package/functions/eden.ts +47 -0
  227. package/functions/effects.ts +20 -0
  228. package/functions/entity.ts +439 -0
  229. package/functions/entitySpecific.ts +889 -0
  230. package/functions/entityTypes.ts +6 -0
  231. package/functions/enums.ts +146 -0
  232. package/functions/familiars.ts +106 -0
  233. package/functions/flag.ts +165 -0
  234. package/functions/flying.ts +117 -0
  235. package/functions/globals.ts +242 -0
  236. package/functions/gridEntity.ts +511 -0
  237. package/functions/gridEntitySpecific.ts +112 -0
  238. package/functions/input.ts +139 -0
  239. package/functions/isaacAPIClass.ts +67 -0
  240. package/functions/jsonHelpers.ts +45 -0
  241. package/functions/jsonRoom.ts +100 -0
  242. package/functions/kColor.lua +0 -7
  243. package/functions/kColor.ts +129 -0
  244. package/functions/language.ts +13 -0
  245. package/functions/level.ts +31 -0
  246. package/functions/log.ts +720 -0
  247. package/functions/map.ts +56 -0
  248. package/functions/math.ts +149 -0
  249. package/functions/mergeTests.ts +288 -0
  250. package/functions/npc.ts +148 -0
  251. package/functions/pickupVariants.ts +60 -0
  252. package/functions/pickups.ts +499 -0
  253. package/functions/pills.ts +205 -0
  254. package/functions/player.lua +0 -6
  255. package/functions/player.ts +1060 -0
  256. package/functions/playerDataStructures.ts +150 -0
  257. package/functions/playerHealth.lua +28 -39
  258. package/functions/playerHealth.ts +382 -0
  259. package/functions/playerIndex.ts +195 -0
  260. package/functions/pocketItems.ts +149 -0
  261. package/functions/positionVelocity.ts +188 -0
  262. package/functions/random.ts +77 -0
  263. package/functions/revive.ts +201 -0
  264. package/functions/rng.lua +0 -7
  265. package/functions/rng.ts +172 -0
  266. package/functions/roomData.ts +199 -0
  267. package/functions/roomGrid.ts +109 -0
  268. package/functions/roomShape.ts +80 -0
  269. package/functions/rooms.ts +648 -0
  270. package/functions/run.ts +36 -0
  271. package/functions/saveFile.ts +128 -0
  272. package/functions/seeds.ts +19 -0
  273. package/functions/serialization.ts +91 -0
  274. package/functions/set.ts +95 -0
  275. package/functions/sound.ts +9 -0
  276. package/functions/spawnCollectible.ts +104 -0
  277. package/functions/sprite.ts +107 -0
  278. package/functions/stage.ts +125 -0
  279. package/functions/string.ts +47 -0
  280. package/functions/table.ts +189 -0
  281. package/functions/tears.ts +32 -0
  282. package/functions/transformations.ts +131 -0
  283. package/functions/trinketCacheFlag.ts +60 -0
  284. package/functions/trinketGive.ts +157 -0
  285. package/functions/trinkets.ts +215 -0
  286. package/functions/tstlClass.ts +157 -0
  287. package/functions/types.ts +36 -0
  288. package/functions/ui.ts +138 -0
  289. package/functions/utils.d.ts +0 -37
  290. package/functions/utils.lua +0 -35
  291. package/functions/utils.ts +189 -0
  292. package/functions/vector.lua +0 -7
  293. package/functions/vector.ts +126 -0
  294. package/index.ts +172 -0
  295. package/initCustomCallbacks.ts +132 -0
  296. package/initFeatures.ts +39 -0
  297. package/interfaces/AddCallbackParameterCustom.ts +188 -0
  298. package/interfaces/ChargeBarSprites.ts +12 -0
  299. package/interfaces/JSONDoor.d.ts +3 -3
  300. package/interfaces/JSONDoor.ts +13 -0
  301. package/interfaces/JSONEntity.d.ts +4 -4
  302. package/interfaces/JSONEntity.ts +16 -0
  303. package/interfaces/JSONRoom.d.ts +8 -8
  304. package/interfaces/JSONRoom.ts +36 -0
  305. package/interfaces/JSONRooms.ts +12 -0
  306. package/interfaces/JSONSpawn.d.ts +2 -2
  307. package/interfaces/JSONSpawn.ts +14 -0
  308. package/interfaces/PlayerHealth.ts +16 -0
  309. package/interfaces/PocketItemDescription.ts +9 -0
  310. package/interfaces/SaveData.ts +29 -0
  311. package/interfaces/TrinketSituation.ts +9 -0
  312. package/interfaces/private/TSTLClassMetatable.ts +8 -0
  313. package/maps/PHDPillConversions.ts +21 -0
  314. package/maps/cardMap.ts +209 -0
  315. package/maps/characterMap.ts +87 -0
  316. package/maps/collectibleDescriptionMap.ts +732 -0
  317. package/maps/collectibleNameMap.ts +731 -0
  318. package/maps/defaultPlayerStatMap.ts +17 -0
  319. package/maps/falsePHDPillConversions.ts +35 -0
  320. package/maps/gridEntityTypeToBrokenStateMap.ts +50 -0
  321. package/maps/gridEntityXMLMap.ts +176 -0
  322. package/maps/pillEffectMap.ts +88 -0
  323. package/maps/roomShapeToTopLeftWallGridIndexMap.ts +18 -0
  324. package/maps/roomTypeMap.ts +40 -0
  325. package/maps/trinketDescriptionMap.ts +200 -0
  326. package/maps/trinketNameMap.ts +198 -0
  327. package/objects/LRoomShapeToRectangles.ts +44 -0
  328. package/objects/callbackRegisterFunctions.ts +187 -0
  329. package/objects/cardDescriptions.ts +105 -0
  330. package/objects/cardNames.ts +105 -0
  331. package/objects/cardTypes.ts +104 -0
  332. package/objects/challengeNames.ts +52 -0
  333. package/objects/characterNames.ts +48 -0
  334. package/objects/coinSubTypeToValue.ts +14 -0
  335. package/objects/colors.ts +16 -0
  336. package/objects/directionNames.ts +11 -0
  337. package/objects/directionToDegrees.ts +11 -0
  338. package/objects/directionToVector.ts +12 -0
  339. package/objects/doorSlotFlagToDoorSlot.ts +16 -0
  340. package/objects/doorSlotToDirection.ts +14 -0
  341. package/objects/isaacAPIClassTypeToBrand.ts +11 -0
  342. package/objects/isaacAPIClassTypeToCopyFunction.ts +18 -0
  343. package/objects/languageNames.ts +13 -0
  344. package/objects/oppositeDoorSlots.ts +15 -0
  345. package/objects/pillEffectClasses.ts +63 -0
  346. package/objects/pillEffectNames.ts +57 -0
  347. package/objects/pillEffectTypes.ts +62 -0
  348. package/objects/roomShapeBounds.ts +71 -0
  349. package/objects/roomShapeLayoutSizes.ts +45 -0
  350. package/objects/roomShapeToBottomRightPosition.ts +25 -0
  351. package/objects/roomShapeToDoorSlots.ts +83 -0
  352. package/objects/roomShapeToDoorSlotsToGridIndexDelta.ts +127 -0
  353. package/objects/roomShapeToGridWidth.ts +21 -0
  354. package/objects/roomShapeToTopLeftPosition.ts +26 -0
  355. package/objects/roomShapeVolumes.ts +38 -0
  356. package/objects/roomTypeNames.ts +36 -0
  357. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.ts +14 -0
  358. package/objects/stageTypeToLetter.ts +15 -0
  359. package/objects/transformationNames.d.ts +0 -1
  360. package/objects/transformationNames.lua +0 -1
  361. package/objects/transformationNames.ts +18 -0
  362. package/package.json +1 -1
  363. package/patchErrorFunctions.ts +92 -0
  364. package/sets/LRoomShapesSet.ts +8 -0
  365. package/sets/bossSets.ts +470 -0
  366. package/sets/charactersThatStartWithAnActiveItemSet.ts +16 -0
  367. package/sets/charactersWithBlackHeartFromEternalHeartSet.ts +7 -0
  368. package/sets/charactersWithFreeDevilDealsSet.ts +4 -0
  369. package/sets/charactersWithNoRedHeartsSet.ts +17 -0
  370. package/sets/charactersWithNoSoulHeartsSet.ts +14 -0
  371. package/sets/chestPickupVariantsSet.ts +16 -0
  372. package/sets/familiarsThatShootPlayerTearsSet.ts +13 -0
  373. package/sets/lostStyleCharactersSet.ts +13 -0
  374. package/sets/mineShaftRoomSubTypesSet.ts +10 -0
  375. package/sets/redHeartSubTypesSet.ts +7 -0
  376. package/sets/sinEntityTypesSet.ts +11 -0
  377. package/sets/singleUseActiveCollectibleTypesSet.ts +13 -0
  378. package/sets/storyBossesSet.ts +17 -0
  379. package/types/AnyEntity.ts +12 -0
  380. package/types/AwaitingTextInput.d.ts +2 -0
  381. package/types/CollectibleIndex.ts +16 -0
  382. package/types/PickingUpItem.ts +89 -0
  383. package/types/PlayerIndex.ts +13 -0
  384. package/types/private/IsaacAPIClass.ts +3 -0
  385. package/types/private/SerializedIsaacAPIClass.ts +3 -0
  386. package/types/private/TSTLClass.ts +3 -0
  387. package/upgradeMod.ts +55 -0
@@ -0,0 +1,107 @@
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.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
+ ) {
98
+ if (!hasSubscriptions()) {
99
+ return;
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
+ }
@@ -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
+ }
@@ -0,0 +1,88 @@
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.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
+ ) {
49
+ if (!hasSubscriptions()) {
50
+ return;
51
+ }
52
+
53
+ if (!isTaintedLazarus(player)) {
54
+ return;
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;
62
+ }
63
+
64
+ if (!v.run.usedFlipAtLeastOnce) {
65
+ v.run.usedFlipAtLeastOnce = true;
66
+ postFirstFlipFire(newLazarus);
67
+ }
68
+
69
+ postFlipFire(newLazarus);
70
+ }
71
+
72
+ function getNewLazarus(oldLazarus: EntityPlayer) {
73
+ const oldCharacter = oldLazarus.GetPlayerType();
74
+
75
+ let newCharacter: PlayerType;
76
+ if (oldCharacter === PlayerType.LAZARUS_B) {
77
+ newCharacter = PlayerType.LAZARUS_2_B;
78
+ } else if (oldCharacter === PlayerType.LAZARUS_2_B) {
79
+ newCharacter = PlayerType.LAZARUS_B;
80
+ } else {
81
+ error("Failed to determine the character in the postFlip callback.");
82
+ }
83
+
84
+ const playersOfType = getPlayersOfType(newCharacter);
85
+ return playersOfType.find(
86
+ (player) => player.FrameCount === oldLazarus.FrameCount,
87
+ );
88
+ }
@@ -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
+ }