isaacscript-common 14.0.0 → 14.1.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 (556) hide show
  1. package/dist/index.d.ts +1111 -83
  2. package/dist/isaacscript-common.lua +9948 -7327
  3. package/dist/src/callbacks/customRevive.lua +10 -1
  4. package/dist/src/callbacks/postDoorRender.lua +2 -2
  5. package/dist/src/callbacks/postEffectStateChanged.lua +3 -3
  6. package/dist/src/callbacks/postFamiliarStateChanged.lua +3 -3
  7. package/dist/src/callbacks/postFlip.lua +1 -1
  8. package/dist/src/callbacks/postGridEntity.lua +2 -2
  9. package/dist/src/callbacks/postNPCStateChanged.lua +3 -3
  10. package/dist/src/callbacks/postPickupStateChanged.lua +3 -3
  11. package/dist/src/callbacks/postPlayerCollectible.d.ts.map +1 -1
  12. package/dist/src/callbacks/postPlayerCollectible.lua +5 -9
  13. package/dist/src/callbacks/reorderedCallbacks.lua +7 -7
  14. package/dist/src/callbacks/subscriptions/postGridEntityBroken.d.ts +1 -1
  15. package/dist/src/callbacks/subscriptions/postGridEntityBroken.d.ts.map +1 -1
  16. package/dist/src/callbacks/subscriptions/postGridEntityBroken.lua +3 -3
  17. package/dist/src/callbacks/subscriptions/postGridEntityInit.d.ts +1 -1
  18. package/dist/src/callbacks/subscriptions/postGridEntityInit.d.ts.map +1 -1
  19. package/dist/src/callbacks/subscriptions/postGridEntityInit.lua +3 -3
  20. package/dist/src/callbacks/subscriptions/postGridEntityRemove.d.ts +3 -3
  21. package/dist/src/callbacks/subscriptions/postGridEntityRemove.d.ts.map +1 -1
  22. package/dist/src/callbacks/subscriptions/postGridEntityRemove.lua +4 -4
  23. package/dist/src/callbacks/subscriptions/postGridEntityRender.d.ts +1 -1
  24. package/dist/src/callbacks/subscriptions/postGridEntityRender.d.ts.map +1 -1
  25. package/dist/src/callbacks/subscriptions/postGridEntityRender.lua +3 -3
  26. package/dist/src/callbacks/subscriptions/postGridEntityStateChanged.d.ts +1 -1
  27. package/dist/src/callbacks/subscriptions/postGridEntityStateChanged.d.ts.map +1 -1
  28. package/dist/src/callbacks/subscriptions/postGridEntityStateChanged.lua +3 -3
  29. package/dist/src/callbacks/subscriptions/postGridEntityUpdate.d.ts +1 -1
  30. package/dist/src/callbacks/subscriptions/postGridEntityUpdate.d.ts.map +1 -1
  31. package/dist/src/callbacks/subscriptions/postGridEntityUpdate.lua +3 -3
  32. package/dist/src/callbacks/subscriptions/postRockRender.d.ts +1 -1
  33. package/dist/src/callbacks/subscriptions/postRockRender.d.ts.map +1 -1
  34. package/dist/src/callbacks/subscriptions/postRockRender.lua +3 -3
  35. package/dist/src/callbacks/subscriptions/postRockUpdate.d.ts +1 -1
  36. package/dist/src/callbacks/subscriptions/postRockUpdate.d.ts.map +1 -1
  37. package/dist/src/callbacks/subscriptions/postRockUpdate.lua +3 -3
  38. package/dist/src/callbacks/subscriptions/postSpikesRender.d.ts +1 -1
  39. package/dist/src/callbacks/subscriptions/postSpikesRender.d.ts.map +1 -1
  40. package/dist/src/callbacks/subscriptions/postSpikesRender.lua +3 -3
  41. package/dist/src/callbacks/subscriptions/postSpikesUpdate.d.ts +1 -1
  42. package/dist/src/callbacks/subscriptions/postSpikesUpdate.d.ts.map +1 -1
  43. package/dist/src/callbacks/subscriptions/postSpikesUpdate.lua +3 -3
  44. package/dist/src/callbacks/subscriptions/postTNTRender.d.ts +1 -1
  45. package/dist/src/callbacks/subscriptions/postTNTRender.d.ts.map +1 -1
  46. package/dist/src/callbacks/subscriptions/postTNTRender.lua +3 -3
  47. package/dist/src/callbacks/subscriptions/postTNTUpdate.d.ts +1 -1
  48. package/dist/src/callbacks/subscriptions/postTNTUpdate.d.ts.map +1 -1
  49. package/dist/src/callbacks/subscriptions/postTNTUpdate.lua +3 -3
  50. package/dist/src/callbacks.d.ts +106 -0
  51. package/dist/src/callbacks.d.ts.map +1 -0
  52. package/dist/src/callbacks.lua +176 -0
  53. package/dist/src/classes/DefaultMap.d.ts.map +1 -1
  54. package/dist/src/classes/ModFeature.d.ts +11 -0
  55. package/dist/src/classes/ModFeature.d.ts.map +1 -0
  56. package/dist/src/classes/ModFeature.lua +13 -0
  57. package/dist/src/classes/ModUpgraded.d.ts +41 -7
  58. package/dist/src/classes/ModUpgraded.d.ts.map +1 -1
  59. package/dist/src/classes/ModUpgraded.lua +75 -60
  60. package/dist/src/classes/callbacks/PostAmbushFinished.d.ts +1 -1
  61. package/dist/src/classes/callbacks/PostAmbushFinished.d.ts.map +1 -1
  62. package/dist/src/classes/callbacks/PostAmbushFinished.lua +1 -1
  63. package/dist/src/classes/callbacks/PostAmbushStarted.d.ts +1 -1
  64. package/dist/src/classes/callbacks/PostAmbushStarted.d.ts.map +1 -1
  65. package/dist/src/classes/callbacks/PostAmbushStarted.lua +1 -1
  66. package/dist/src/classes/callbacks/PostBombExploded.d.ts +1 -1
  67. package/dist/src/classes/callbacks/PostBombExploded.d.ts.map +1 -1
  68. package/dist/src/classes/callbacks/PostBombExploded.lua +1 -1
  69. package/dist/src/classes/callbacks/PostBombInitLate.d.ts +1 -1
  70. package/dist/src/classes/callbacks/PostBombInitLate.d.ts.map +1 -1
  71. package/dist/src/classes/callbacks/PostBombInitLate.lua +1 -1
  72. package/dist/src/classes/callbacks/PostBoneSwing.d.ts +3 -4
  73. package/dist/src/classes/callbacks/PostBoneSwing.d.ts.map +1 -1
  74. package/dist/src/classes/callbacks/PostBoneSwing.lua +1 -1
  75. package/dist/src/classes/callbacks/PostCollectibleEmpty.d.ts +3 -3
  76. package/dist/src/classes/callbacks/PostCollectibleEmpty.d.ts.map +1 -1
  77. package/dist/src/classes/callbacks/PostCollectibleEmpty.lua +1 -1
  78. package/dist/src/classes/callbacks/PostCollectibleInitFirst.d.ts +1 -1
  79. package/dist/src/classes/callbacks/PostCollectibleInitFirst.d.ts.map +1 -1
  80. package/dist/src/classes/callbacks/PostCollectibleInitFirst.lua +1 -1
  81. package/dist/src/classes/callbacks/PostCursedTeleport.d.ts +5 -6
  82. package/dist/src/classes/callbacks/PostCursedTeleport.d.ts.map +1 -1
  83. package/dist/src/classes/callbacks/PostCursedTeleport.lua +1 -1
  84. package/dist/src/classes/callbacks/PostCustomRevive.d.ts +6 -0
  85. package/dist/src/classes/callbacks/PostCustomRevive.d.ts.map +1 -0
  86. package/dist/src/classes/callbacks/PostCustomRevive.lua +17 -0
  87. package/dist/src/classes/callbacks/PostDiceRoomActivated.d.ts +15 -0
  88. package/dist/src/classes/callbacks/PostDiceRoomActivated.d.ts.map +1 -0
  89. package/dist/src/classes/callbacks/PostDiceRoomActivated.lua +44 -0
  90. package/dist/src/classes/callbacks/PostDoorRender.d.ts +7 -0
  91. package/dist/src/classes/callbacks/PostDoorRender.d.ts.map +1 -0
  92. package/dist/src/classes/callbacks/PostDoorRender.lua +24 -0
  93. package/dist/src/classes/callbacks/PostDoorUpdate.d.ts +7 -0
  94. package/dist/src/classes/callbacks/PostDoorUpdate.d.ts.map +1 -0
  95. package/dist/src/classes/callbacks/PostDoorUpdate.lua +24 -0
  96. package/dist/src/classes/callbacks/PostEffectInitLate.d.ts +12 -0
  97. package/dist/src/classes/callbacks/PostEffectInitLate.d.ts.map +1 -0
  98. package/dist/src/classes/callbacks/PostEffectInitLate.lua +27 -0
  99. package/dist/src/classes/callbacks/PostEffectStateChanged.d.ts +13 -0
  100. package/dist/src/classes/callbacks/PostEffectStateChanged.d.ts.map +1 -0
  101. package/dist/src/classes/callbacks/PostEffectStateChanged.lua +33 -0
  102. package/dist/src/classes/callbacks/PostEsauJr.d.ts +6 -0
  103. package/dist/src/classes/callbacks/PostEsauJr.d.ts.map +1 -0
  104. package/dist/src/classes/callbacks/PostEsauJr.lua +17 -0
  105. package/dist/src/classes/callbacks/PostFamiliarInitLate.d.ts +12 -0
  106. package/dist/src/classes/callbacks/PostFamiliarInitLate.d.ts.map +1 -0
  107. package/dist/src/classes/callbacks/PostFamiliarInitLate.lua +27 -0
  108. package/dist/src/classes/callbacks/PostFamiliarStateChanged.d.ts +13 -0
  109. package/dist/src/classes/callbacks/PostFamiliarStateChanged.d.ts.map +1 -0
  110. package/dist/src/classes/callbacks/PostFamiliarStateChanged.lua +33 -0
  111. package/dist/src/classes/callbacks/PostFirstEsauJr.d.ts +6 -0
  112. package/dist/src/classes/callbacks/PostFirstEsauJr.d.ts.map +1 -0
  113. package/dist/src/classes/callbacks/PostFirstEsauJr.lua +17 -0
  114. package/dist/src/classes/callbacks/PostFirstFlip.d.ts +6 -0
  115. package/dist/src/classes/callbacks/PostFirstFlip.d.ts.map +1 -0
  116. package/dist/src/classes/callbacks/PostFirstFlip.lua +17 -0
  117. package/dist/src/classes/callbacks/PostFlip.d.ts +6 -0
  118. package/dist/src/classes/callbacks/PostFlip.d.ts.map +1 -0
  119. package/dist/src/classes/callbacks/PostFlip.lua +17 -0
  120. package/dist/src/classes/callbacks/PostGameStartedReordered.d.ts +6 -0
  121. package/dist/src/classes/callbacks/PostGameStartedReordered.d.ts.map +1 -0
  122. package/dist/src/classes/callbacks/PostGameStartedReordered.lua +17 -0
  123. package/dist/src/classes/callbacks/PostGameStartedReorderedLast.d.ts +6 -0
  124. package/dist/src/classes/callbacks/PostGameStartedReorderedLast.d.ts.map +1 -0
  125. package/dist/src/classes/callbacks/PostGameStartedReorderedLast.lua +17 -0
  126. package/dist/src/classes/callbacks/PostGreedModeWave.d.ts +12 -0
  127. package/dist/src/classes/callbacks/PostGreedModeWave.d.ts.map +1 -0
  128. package/dist/src/classes/callbacks/PostGreedModeWave.lua +34 -0
  129. package/dist/src/classes/callbacks/PostGridEntityBroken.d.ts +6 -0
  130. package/dist/src/classes/callbacks/PostGridEntityBroken.d.ts.map +1 -0
  131. package/dist/src/classes/callbacks/PostGridEntityBroken.lua +17 -0
  132. package/dist/src/classes/callbacks/PostGridEntityCollision.d.ts +9 -0
  133. package/dist/src/classes/callbacks/PostGridEntityCollision.d.ts.map +1 -0
  134. package/dist/src/classes/callbacks/PostGridEntityCollision.lua +36 -0
  135. package/dist/src/classes/callbacks/PostGridEntityCustomBroken.d.ts +6 -0
  136. package/dist/src/classes/callbacks/PostGridEntityCustomBroken.d.ts.map +1 -0
  137. package/dist/src/classes/callbacks/PostGridEntityCustomBroken.lua +17 -0
  138. package/dist/src/classes/callbacks/PostGridEntityCustomCollision.d.ts +9 -0
  139. package/dist/src/classes/callbacks/PostGridEntityCustomCollision.d.ts.map +1 -0
  140. package/dist/src/classes/callbacks/PostGridEntityCustomCollision.lua +31 -0
  141. package/dist/src/classes/callbacks/PostGridEntityCustomInit.d.ts +6 -0
  142. package/dist/src/classes/callbacks/PostGridEntityCustomInit.d.ts.map +1 -0
  143. package/dist/src/classes/callbacks/PostGridEntityCustomInit.lua +17 -0
  144. package/dist/src/classes/callbacks/PostGridEntityCustomRemove.d.ts +9 -0
  145. package/dist/src/classes/callbacks/PostGridEntityCustomRemove.d.ts.map +1 -0
  146. package/dist/src/classes/callbacks/PostGridEntityCustomRemove.lua +25 -0
  147. package/dist/src/classes/callbacks/PostGridEntityCustomStateChanged.d.ts +6 -0
  148. package/dist/src/classes/callbacks/PostGridEntityCustomStateChanged.d.ts.map +1 -0
  149. package/dist/src/classes/callbacks/PostGridEntityCustomStateChanged.lua +17 -0
  150. package/dist/src/classes/callbacks/PostGridEntityCustomUpdate.d.ts +6 -0
  151. package/dist/src/classes/callbacks/PostGridEntityCustomUpdate.d.ts.map +1 -0
  152. package/dist/src/classes/callbacks/PostGridEntityCustomUpdate.lua +17 -0
  153. package/dist/src/classes/callbacks/PostGridEntityInit.d.ts +6 -0
  154. package/dist/src/classes/callbacks/PostGridEntityInit.d.ts.map +1 -0
  155. package/dist/src/classes/callbacks/PostGridEntityInit.lua +17 -0
  156. package/dist/src/classes/callbacks/PostGridEntityRemove.d.ts +9 -0
  157. package/dist/src/classes/callbacks/PostGridEntityRemove.d.ts.map +1 -0
  158. package/dist/src/classes/callbacks/PostGridEntityRemove.lua +28 -0
  159. package/dist/src/classes/callbacks/PostGridEntityStateChanged.d.ts +6 -0
  160. package/dist/src/classes/callbacks/PostGridEntityStateChanged.d.ts.map +1 -0
  161. package/dist/src/classes/callbacks/PostGridEntityStateChanged.lua +17 -0
  162. package/dist/src/classes/callbacks/PostGridEntityUpdate.d.ts +6 -0
  163. package/dist/src/classes/callbacks/PostGridEntityUpdate.d.ts.map +1 -0
  164. package/dist/src/classes/callbacks/PostGridEntityUpdate.lua +17 -0
  165. package/dist/src/classes/callbacks/PostHolyMantleRemoved.d.ts +14 -0
  166. package/dist/src/classes/callbacks/PostHolyMantleRemoved.d.ts.map +1 -0
  167. package/dist/src/classes/callbacks/PostHolyMantleRemoved.lua +35 -0
  168. package/dist/src/classes/callbacks/PostKnifeInitLate.d.ts +1 -1
  169. package/dist/src/classes/callbacks/PostKnifeInitLate.d.ts.map +1 -1
  170. package/dist/src/classes/callbacks/PostKnifeInitLate.lua +1 -1
  171. package/dist/src/classes/callbacks/PostNewLevelReordered.d.ts +6 -0
  172. package/dist/src/classes/callbacks/PostNewLevelReordered.d.ts.map +1 -0
  173. package/dist/src/classes/callbacks/PostNewLevelReordered.lua +17 -0
  174. package/dist/src/classes/callbacks/PostNewRoomEarly.d.ts +6 -7
  175. package/dist/src/classes/callbacks/PostNewRoomEarly.d.ts.map +1 -1
  176. package/dist/src/classes/callbacks/PostNewRoomEarly.lua +1 -1
  177. package/dist/src/classes/callbacks/PostNewRoomReordered.d.ts +6 -0
  178. package/dist/src/classes/callbacks/PostNewRoomReordered.d.ts.map +1 -0
  179. package/dist/src/classes/callbacks/PostNewRoomReordered.lua +17 -0
  180. package/dist/src/classes/callbacks/PostPEffectUpdateReordered.d.ts +6 -0
  181. package/dist/src/classes/callbacks/PostPEffectUpdateReordered.d.ts.map +1 -0
  182. package/dist/src/classes/callbacks/PostPEffectUpdateReordered.lua +17 -0
  183. package/dist/src/classes/callbacks/PostPitRender.d.ts +1 -1
  184. package/dist/src/classes/callbacks/PostPitRender.d.ts.map +1 -1
  185. package/dist/src/classes/callbacks/PostPitRender.lua +1 -1
  186. package/dist/src/classes/callbacks/PostPlayerFatalDamage.d.ts +15 -0
  187. package/dist/src/classes/callbacks/PostPlayerFatalDamage.d.ts.map +1 -0
  188. package/dist/src/classes/callbacks/PostPlayerFatalDamage.lua +87 -0
  189. package/dist/src/classes/callbacks/PostPlayerRenderReordered.d.ts +6 -0
  190. package/dist/src/classes/callbacks/PostPlayerRenderReordered.d.ts.map +1 -0
  191. package/dist/src/classes/callbacks/PostPlayerRenderReordered.lua +17 -0
  192. package/dist/src/classes/callbacks/PostPlayerUpdateReordered.d.ts +6 -0
  193. package/dist/src/classes/callbacks/PostPlayerUpdateReordered.d.ts.map +1 -0
  194. package/dist/src/classes/callbacks/PostPlayerUpdateReordered.lua +17 -0
  195. package/dist/src/classes/callbacks/PostRoomClearChanged.d.ts +2 -2
  196. package/dist/src/classes/callbacks/PostRoomClearChanged.d.ts.map +1 -1
  197. package/dist/src/classes/callbacks/PostRoomClearChanged.lua +1 -1
  198. package/dist/src/classes/callbacks/PostSpikesRender.d.ts +1 -1
  199. package/dist/src/classes/callbacks/PostSpikesRender.d.ts.map +1 -1
  200. package/dist/src/classes/callbacks/PostSpikesRender.lua +1 -1
  201. package/dist/src/classes/callbacks/PreBerserkDeath.d.ts +7 -0
  202. package/dist/src/classes/callbacks/PreBerserkDeath.d.ts.map +1 -0
  203. package/dist/src/classes/callbacks/PreBerserkDeath.lua +36 -0
  204. package/dist/src/classes/callbacks/PreCustomRevive.d.ts +6 -0
  205. package/dist/src/classes/callbacks/PreCustomRevive.d.ts.map +1 -0
  206. package/dist/src/classes/callbacks/PreCustomRevive.lua +17 -0
  207. package/dist/src/classes/callbacks/validation/CustomCallbackAmbush.d.ts +3 -3
  208. package/dist/src/classes/callbacks/validation/CustomCallbackAmbush.d.ts.map +1 -1
  209. package/dist/src/classes/callbacks/validation/CustomCallbackBomb.d.ts +2 -2
  210. package/dist/src/classes/callbacks/validation/CustomCallbackBomb.d.ts.map +1 -1
  211. package/dist/src/classes/callbacks/validation/CustomCallbackCollectible.d.ts +2 -2
  212. package/dist/src/classes/callbacks/validation/CustomCallbackCollectible.d.ts.map +1 -1
  213. package/dist/src/classes/callbacks/validation/CustomCallbackDoor.d.ts +10 -0
  214. package/dist/src/classes/callbacks/validation/CustomCallbackDoor.d.ts.map +1 -0
  215. package/dist/src/classes/callbacks/validation/CustomCallbackDoor.lua +20 -0
  216. package/dist/src/classes/callbacks/validation/CustomCallbackEffect.d.ts +11 -0
  217. package/dist/src/classes/callbacks/validation/CustomCallbackEffect.d.ts.map +1 -0
  218. package/dist/src/classes/callbacks/validation/CustomCallbackEffect.lua +19 -0
  219. package/dist/src/classes/callbacks/validation/CustomCallbackFamiliar.d.ts +11 -0
  220. package/dist/src/classes/callbacks/validation/CustomCallbackFamiliar.d.ts.map +1 -0
  221. package/dist/src/classes/callbacks/validation/CustomCallbackFamiliar.lua +19 -0
  222. package/dist/src/classes/callbacks/validation/CustomCallbackGridEntity.d.ts +11 -0
  223. package/dist/src/classes/callbacks/validation/CustomCallbackGridEntity.d.ts.map +1 -0
  224. package/dist/src/classes/callbacks/validation/CustomCallbackGridEntity.lua +24 -0
  225. package/dist/src/classes/callbacks/validation/CustomCallbackGridEntityCustom.d.ts +10 -0
  226. package/dist/src/classes/callbacks/validation/CustomCallbackGridEntityCustom.d.ts.map +1 -0
  227. package/dist/src/classes/callbacks/validation/CustomCallbackGridEntityCustom.lua +19 -0
  228. package/dist/src/classes/callbacks/validation/CustomCallbackKnife.d.ts +2 -2
  229. package/dist/src/classes/callbacks/validation/CustomCallbackKnife.d.ts.map +1 -1
  230. package/dist/src/classes/callbacks/validation/CustomCallbackPit.d.ts +2 -2
  231. package/dist/src/classes/callbacks/validation/CustomCallbackPit.d.ts.map +1 -1
  232. package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.d.ts +4 -4
  233. package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.d.ts.map +1 -1
  234. package/dist/src/classes/callbacks/validation/CustomCallbackRevive.d.ts +11 -0
  235. package/dist/src/classes/callbacks/validation/CustomCallbackRevive.d.ts.map +1 -0
  236. package/dist/src/classes/callbacks/validation/CustomCallbackRevive.lua +19 -0
  237. package/dist/src/classes/callbacks/validation/CustomCallbackSpikes.d.ts +2 -2
  238. package/dist/src/classes/callbacks/validation/CustomCallbackSpikes.d.ts.map +1 -1
  239. package/dist/src/classes/features/callbackLogic/CustomGridEntities.d.ts +134 -0
  240. package/dist/src/classes/features/callbackLogic/CustomGridEntities.d.ts.map +1 -0
  241. package/dist/src/classes/features/callbackLogic/CustomGridEntities.lua +220 -0
  242. package/dist/src/classes/features/callbackLogic/CustomRevive.d.ts +39 -0
  243. package/dist/src/classes/features/callbackLogic/CustomRevive.d.ts.map +1 -0
  244. package/dist/src/classes/features/callbackLogic/CustomRevive.lua +140 -0
  245. package/dist/src/classes/features/callbackLogic/EsauJrDetection.d.ts +19 -0
  246. package/dist/src/classes/features/callbackLogic/EsauJrDetection.d.ts.map +1 -0
  247. package/dist/src/classes/features/callbackLogic/EsauJrDetection.lua +52 -0
  248. package/dist/src/classes/features/callbackLogic/FlipDetection.d.ts +16 -0
  249. package/dist/src/classes/features/callbackLogic/FlipDetection.d.ts.map +1 -0
  250. package/dist/src/classes/features/callbackLogic/FlipDetection.lua +58 -0
  251. package/dist/src/classes/features/callbackLogic/GameReorderedCallbacks.d.ts +27 -0
  252. package/dist/src/classes/features/callbackLogic/GameReorderedCallbacks.d.ts.map +1 -0
  253. package/dist/src/classes/features/callbackLogic/GameReorderedCallbacks.lua +108 -0
  254. package/dist/src/classes/features/callbackLogic/GridEntityCollisionDetection.d.ts +19 -0
  255. package/dist/src/classes/features/callbackLogic/GridEntityCollisionDetection.d.ts.map +1 -0
  256. package/dist/src/classes/features/callbackLogic/GridEntityCollisionDetection.lua +69 -0
  257. package/dist/src/classes/features/callbackLogic/GridEntityDetection.d.ts +46 -0
  258. package/dist/src/classes/features/callbackLogic/GridEntityDetection.d.ts.map +1 -0
  259. package/dist/src/classes/features/callbackLogic/GridEntityDetection.lua +126 -0
  260. package/dist/src/classes/features/callbackLogic/PlayerReorderedCallbacks.d.ts +24 -0
  261. package/dist/src/classes/features/callbackLogic/PlayerReorderedCallbacks.d.ts.map +1 -0
  262. package/dist/src/classes/features/callbackLogic/PlayerReorderedCallbacks.lua +72 -0
  263. package/dist/src/classes/features/other/RunInNFrames.d.ts +123 -0
  264. package/dist/src/classes/features/other/RunInNFrames.d.ts.map +1 -0
  265. package/dist/src/classes/features/other/RunInNFrames.lua +109 -0
  266. package/dist/src/classes/private/CustomCallback.d.ts +5 -11
  267. package/dist/src/classes/private/CustomCallback.d.ts.map +1 -1
  268. package/dist/src/classes/private/CustomCallback.lua +27 -17
  269. package/dist/src/classes/private/Feature.d.ts +19 -0
  270. package/dist/src/classes/private/Feature.d.ts.map +1 -0
  271. package/dist/src/classes/private/Feature.lua +16 -0
  272. package/dist/src/core/upgradeMod.d.ts +18 -1
  273. package/dist/src/core/upgradeMod.d.ts.map +1 -1
  274. package/dist/src/core/upgradeMod.lua +41 -22
  275. package/dist/src/decorators.d.ts +9 -0
  276. package/dist/src/decorators.d.ts.map +1 -0
  277. package/dist/src/decorators.lua +12 -0
  278. package/dist/src/enums/ISCFeature.d.ts +12 -0
  279. package/dist/src/enums/ISCFeature.d.ts.map +1 -0
  280. package/dist/src/enums/ISCFeature.lua +12 -0
  281. package/dist/src/enums/ModCallbackCustom2.d.ts +41 -5
  282. package/dist/src/enums/ModCallbackCustom2.d.ts.map +1 -1
  283. package/dist/src/enums/ModCallbackCustom2.lua +77 -5
  284. package/dist/src/features/customGridEntity.d.ts.map +1 -1
  285. package/dist/src/features/customGridEntity.lua +6 -8
  286. package/dist/src/features/customTrapdoor/touched.lua +1 -1
  287. package/dist/src/features/deployJSONRoom.d.ts.map +1 -1
  288. package/dist/src/features/deployJSONRoom.lua +6 -8
  289. package/dist/src/features/saveDataManager/constants.d.ts +1 -1
  290. package/dist/src/features/saveDataManager/constants.d.ts.map +1 -1
  291. package/dist/src/features/saveDataManager/exports.d.ts +5 -0
  292. package/dist/src/features/saveDataManager/exports.d.ts.map +1 -1
  293. package/dist/src/features/saveDataManager/exports.lua +16 -0
  294. package/dist/src/features/saveDataManager/main.d.ts +5 -2
  295. package/dist/src/features/saveDataManager/main.d.ts.map +1 -1
  296. package/dist/src/features/saveDataManager/save.lua +2 -3
  297. package/dist/src/features.d.ts +34 -0
  298. package/dist/src/features.d.ts.map +1 -0
  299. package/dist/src/features.lua +68 -0
  300. package/dist/src/functions/characters.lua +3 -3
  301. package/dist/src/functions/charge.d.ts +30 -8
  302. package/dist/src/functions/charge.d.ts.map +1 -1
  303. package/dist/src/functions/charge.lua +38 -2
  304. package/dist/src/functions/chargeBar.d.ts +6 -0
  305. package/dist/src/functions/chargeBar.d.ts.map +1 -1
  306. package/dist/src/functions/chargeBar.lua +6 -0
  307. package/dist/src/functions/decorators.d.ts +19 -0
  308. package/dist/src/functions/decorators.d.ts.map +1 -0
  309. package/dist/src/functions/decorators.lua +32 -0
  310. package/dist/src/functions/flying.lua +4 -4
  311. package/dist/src/functions/gridEntities.lua +5 -5
  312. package/dist/src/functions/gridEntitiesSpecific.lua +12 -12
  313. package/dist/src/functions/itemPool.lua +2 -2
  314. package/dist/src/functions/playerHealth.lua +6 -6
  315. package/dist/src/functions/playerIndex.lua +2 -2
  316. package/dist/src/functions/players.d.ts +14 -3
  317. package/dist/src/functions/players.d.ts.map +1 -1
  318. package/dist/src/functions/players.lua +35 -16
  319. package/dist/src/functions/pocketItems.lua +1 -1
  320. package/dist/src/functions/rooms.d.ts +1 -1
  321. package/dist/src/functions/rooms.d.ts.map +1 -1
  322. package/dist/src/functions/rooms.lua +1 -1
  323. package/dist/src/functions/run.d.ts +5 -0
  324. package/dist/src/functions/run.d.ts.map +1 -1
  325. package/dist/src/functions/run.lua +6 -0
  326. package/dist/src/functions/table.d.ts +2 -0
  327. package/dist/src/functions/table.d.ts.map +1 -1
  328. package/dist/src/functions/table.lua +7 -0
  329. package/dist/src/functions/trinkets.lua +1 -1
  330. package/dist/src/functions/tstlClass.d.ts +21 -9
  331. package/dist/src/functions/tstlClass.d.ts.map +1 -1
  332. package/dist/src/functions/tstlClass.lua +49 -24
  333. package/dist/src/functions/utils.d.ts +37 -0
  334. package/dist/src/functions/utils.d.ts.map +1 -1
  335. package/dist/src/functions/utils.lua +36 -0
  336. package/dist/src/index.d.ts +12 -1
  337. package/dist/src/index.d.ts.map +1 -1
  338. package/dist/src/index.lua +17 -1
  339. package/dist/src/interfaces/SaveData.d.ts.map +1 -1
  340. package/dist/src/interfaces/{private/TSTLClassMetatable.d.ts → TSTLClassMetatable.d.ts} +0 -0
  341. package/dist/src/interfaces/TSTLClassMetatable.d.ts.map +1 -0
  342. package/dist/src/interfaces/{private/TSTLClassMetatable.lua → TSTLClassMetatable.lua} +0 -0
  343. package/dist/src/interfaces/private/AddCallbackParametersCustom.d.ts.map +1 -1
  344. package/dist/src/interfaces/private/AddCallbackParametersCustom.lua +3 -0
  345. package/dist/src/interfaces/private/AddCallbackParametersCustom2.d.ts +148 -2
  346. package/dist/src/interfaces/private/AddCallbackParametersCustom2.d.ts.map +1 -1
  347. package/dist/src/interfaces/private/AddCallbackParametersCustom2.lua +3 -0
  348. package/dist/src/maps/characterNameToTypeMap.lua +12 -12
  349. package/dist/src/objects/characterDamageMultipliers.lua +6 -6
  350. package/dist/src/objects/characterNames.lua +6 -6
  351. package/dist/src/objects/playerNamePNGFileNames.lua +6 -6
  352. package/dist/src/objects/playerPortraitPNGFileNames.lua +6 -6
  353. package/dist/src/sets/charactersThatStartWithAnActiveItemSet.lua +1 -1
  354. package/dist/src/sets/charactersWithFreeDevilDealsSet.d.ts.map +1 -1
  355. package/dist/src/sets/charactersWithFreeDevilDealsSet.lua +1 -1
  356. package/dist/src/sets/charactersWithNoRedHeartsSet.lua +3 -3
  357. package/dist/src/sets/charactersWithNoSoulHeartsSet.lua +2 -2
  358. package/dist/src/sets/lostStyleCharactersSet.lua +4 -4
  359. package/dist/src/types/AllButFirst.d.ts +5 -0
  360. package/dist/src/types/AllButFirst.d.ts.map +1 -0
  361. package/dist/src/types/AllButFirst.lua +2 -0
  362. package/dist/src/types/AllButLast.d.ts +2 -0
  363. package/dist/src/types/AllButLast.d.ts.map +1 -0
  364. package/dist/src/types/AllButLast.lua +2 -0
  365. package/dist/src/types/Constructor.d.ts +2 -0
  366. package/dist/src/types/Constructor.d.ts.map +1 -0
  367. package/dist/src/types/Constructor.lua +2 -0
  368. package/dist/src/types/FunctionTuple.d.ts +5 -0
  369. package/dist/src/types/FunctionTuple.d.ts.map +1 -0
  370. package/dist/src/types/FunctionTuple.lua +2 -0
  371. package/dist/src/types/HasAllEnumKeys.d.ts +26 -0
  372. package/dist/src/types/HasAllEnumKeys.d.ts.map +1 -0
  373. package/dist/src/types/HasAllEnumKeys.lua +2 -0
  374. package/dist/src/types/LowercaseKeys.d.ts +3 -0
  375. package/dist/src/types/LowercaseKeys.d.ts.map +1 -0
  376. package/dist/src/types/LowercaseKeys.lua +2 -0
  377. package/dist/src/types/StartsWithLowercase.d.ts +2 -0
  378. package/dist/src/types/StartsWithLowercase.d.ts.map +1 -0
  379. package/dist/src/types/StartsWithLowercase.lua +2 -0
  380. package/dist/src/types/StartsWithUppercase.d.ts +2 -0
  381. package/dist/src/types/StartsWithUppercase.d.ts.map +1 -0
  382. package/dist/src/types/StartsWithUppercase.lua +2 -0
  383. package/dist/src/types/UnionToIntersection.d.ts +3 -0
  384. package/dist/src/types/UnionToIntersection.d.ts.map +1 -0
  385. package/dist/src/types/UnionToIntersection.lua +2 -0
  386. package/dist/src/types/UppercaseKeys.d.ts +3 -0
  387. package/dist/src/types/UppercaseKeys.d.ts.map +1 -0
  388. package/dist/src/types/UppercaseKeys.lua +2 -0
  389. package/dist/src/types/private/CallbackTuple.d.ts +4 -4
  390. package/dist/src/types/private/CallbackTuple.d.ts.map +1 -1
  391. package/dist/src/types/private/MatchingCallbackCustom.d.ts +3 -1
  392. package/dist/src/types/private/MatchingCallbackCustom.d.ts.map +1 -1
  393. package/package.json +2 -2
  394. package/src/callbacks/customRevive.ts +13 -1
  395. package/src/callbacks/postDoorRender.ts +2 -2
  396. package/src/callbacks/postEffectStateChanged.ts +3 -6
  397. package/src/callbacks/postFamiliarStateChanged.ts +3 -3
  398. package/src/callbacks/postFlip.ts +2 -2
  399. package/src/callbacks/postGridEntity.ts +3 -7
  400. package/src/callbacks/postNPCStateChanged.ts +3 -3
  401. package/src/callbacks/postPickupStateChanged.ts +3 -6
  402. package/src/callbacks/postPlayerCollectible.ts +8 -12
  403. package/src/callbacks/reorderedCallbacks.ts +6 -6
  404. package/src/callbacks/subscriptions/postGridEntityBroken.ts +4 -7
  405. package/src/callbacks/subscriptions/postGridEntityCollision.ts +4 -4
  406. package/src/callbacks/subscriptions/postGridEntityInit.ts +4 -7
  407. package/src/callbacks/subscriptions/postGridEntityRemove.ts +10 -9
  408. package/src/callbacks/subscriptions/postGridEntityRender.ts +4 -7
  409. package/src/callbacks/subscriptions/postGridEntityStateChanged.ts +4 -7
  410. package/src/callbacks/subscriptions/postGridEntityUpdate.ts +4 -7
  411. package/src/callbacks/subscriptions/postRockRender.ts +6 -7
  412. package/src/callbacks/subscriptions/postRockUpdate.ts +6 -7
  413. package/src/callbacks/subscriptions/postSpikesRender.ts +4 -7
  414. package/src/callbacks/subscriptions/postSpikesUpdate.ts +4 -7
  415. package/src/callbacks/subscriptions/postTNTRender.ts +4 -7
  416. package/src/callbacks/subscriptions/postTNTUpdate.ts +4 -7
  417. package/src/callbacks.ts +134 -0
  418. package/src/classes/DefaultMap.ts +3 -3
  419. package/src/classes/ModFeature.ts +14 -0
  420. package/src/classes/ModUpgraded.ts +150 -81
  421. package/src/classes/callbacks/PostAmbushFinished.ts +3 -3
  422. package/src/classes/callbacks/PostAmbushStarted.ts +3 -3
  423. package/src/classes/callbacks/PostBombExploded.ts +2 -2
  424. package/src/classes/callbacks/PostBombInitLate.ts +3 -3
  425. package/src/classes/callbacks/PostBoneSwing.ts +8 -5
  426. package/src/classes/callbacks/PostCollectibleEmpty.ts +5 -5
  427. package/src/classes/callbacks/PostCollectibleInitFirst.ts +3 -3
  428. package/src/classes/callbacks/PostCursedTeleport.ts +10 -7
  429. package/src/classes/callbacks/PostCustomRevive.ts +11 -0
  430. package/src/classes/callbacks/PostDiceRoomActivated.ts +68 -0
  431. package/src/classes/callbacks/PostDoorRender.ts +19 -0
  432. package/src/classes/callbacks/PostDoorUpdate.ts +19 -0
  433. package/src/classes/callbacks/PostEffectInitLate.ts +28 -0
  434. package/src/classes/callbacks/PostEffectStateChanged.ts +35 -0
  435. package/src/classes/callbacks/PostEsauJr.ts +11 -0
  436. package/src/classes/callbacks/PostFamiliarInitLate.ts +28 -0
  437. package/src/classes/callbacks/PostFamiliarStateChanged.ts +35 -0
  438. package/src/classes/callbacks/PostFirstEsauJr.ts +11 -0
  439. package/src/classes/callbacks/PostFirstFlip.ts +11 -0
  440. package/src/classes/callbacks/PostFlip.ts +11 -0
  441. package/src/classes/callbacks/PostGameStartedReordered.ts +11 -0
  442. package/src/classes/callbacks/PostGameStartedReorderedLast.ts +11 -0
  443. package/src/classes/callbacks/PostGreedModeWave.ts +37 -0
  444. package/src/classes/callbacks/PostGridEntityBroken.ts +11 -0
  445. package/src/classes/callbacks/PostGridEntityCollision.ts +65 -0
  446. package/src/classes/callbacks/PostGridEntityCustomBroken.ts +11 -0
  447. package/src/classes/callbacks/PostGridEntityCustomCollision.ts +53 -0
  448. package/src/classes/callbacks/PostGridEntityCustomInit.ts +11 -0
  449. package/src/classes/callbacks/PostGridEntityCustomRemove.ts +32 -0
  450. package/src/classes/callbacks/PostGridEntityCustomStateChanged.ts +11 -0
  451. package/src/classes/callbacks/PostGridEntityCustomUpdate.ts +11 -0
  452. package/src/classes/callbacks/PostGridEntityInit.ts +11 -0
  453. package/src/classes/callbacks/PostGridEntityRemove.ts +39 -0
  454. package/src/classes/callbacks/PostGridEntityStateChanged.ts +11 -0
  455. package/src/classes/callbacks/PostGridEntityUpdate.ts +11 -0
  456. package/src/classes/callbacks/PostHolyMantleRemoved.ts +45 -0
  457. package/src/classes/callbacks/PostKnifeInitLate.ts +3 -3
  458. package/src/classes/callbacks/PostNewLevelReordered.ts +11 -0
  459. package/src/classes/callbacks/PostNewRoomEarly.ts +7 -7
  460. package/src/classes/callbacks/PostNewRoomReordered.ts +11 -0
  461. package/src/classes/callbacks/PostPEffectUpdateReordered.ts +11 -0
  462. package/src/classes/callbacks/PostPitRender.ts +2 -2
  463. package/src/classes/callbacks/PostPlayerFatalDamage.ts +127 -0
  464. package/src/classes/callbacks/PostPlayerRenderReordered.ts +11 -0
  465. package/src/classes/callbacks/PostPlayerUpdateReordered.ts +11 -0
  466. package/src/classes/callbacks/PostRoomClearChanged.ts +4 -4
  467. package/src/classes/callbacks/PostSpikesRender.ts +2 -2
  468. package/src/classes/callbacks/PreBerserkDeath.ts +42 -0
  469. package/src/classes/callbacks/PreCustomRevive.ts +11 -0
  470. package/src/classes/callbacks/validation/CustomCallbackAmbush.ts +3 -3
  471. package/src/classes/callbacks/validation/CustomCallbackBomb.ts +2 -2
  472. package/src/classes/callbacks/validation/CustomCallbackCollectible.ts +2 -2
  473. package/src/classes/callbacks/validation/CustomCallbackDoor.ts +28 -0
  474. package/src/classes/callbacks/validation/CustomCallbackEffect.ts +29 -0
  475. package/src/classes/callbacks/validation/CustomCallbackFamiliar.ts +30 -0
  476. package/src/classes/callbacks/validation/CustomCallbackGridEntity.ts +42 -0
  477. package/src/classes/callbacks/validation/CustomCallbackGridEntityCustom.ts +36 -0
  478. package/src/classes/callbacks/validation/CustomCallbackKnife.ts +2 -2
  479. package/src/classes/callbacks/validation/CustomCallbackPit.ts +2 -2
  480. package/src/classes/callbacks/validation/CustomCallbackPlayer.ts +13 -3
  481. package/src/classes/callbacks/validation/CustomCallbackRevive.ts +27 -0
  482. package/src/classes/callbacks/validation/CustomCallbackSpikes.ts +2 -2
  483. package/src/classes/features/callbackLogic/CustomGridEntities.ts +398 -0
  484. package/src/classes/features/callbackLogic/CustomRevive.ts +214 -0
  485. package/src/classes/features/callbackLogic/EsauJrDetection.ts +98 -0
  486. package/src/classes/features/callbackLogic/FlipDetection.ts +82 -0
  487. package/src/classes/features/callbackLogic/GameReorderedCallbacks.ts +160 -0
  488. package/src/classes/features/callbackLogic/GridEntityCollisionDetection.ts +90 -0
  489. package/src/classes/features/callbackLogic/GridEntityDetection.ts +231 -0
  490. package/src/classes/features/callbackLogic/PlayerReorderedCallbacks.ts +126 -0
  491. package/src/classes/features/other/RunInNFrames.ts +256 -0
  492. package/src/classes/private/CustomCallback.ts +29 -26
  493. package/src/classes/private/Feature.ts +24 -0
  494. package/src/core/upgradeMod.ts +71 -25
  495. package/src/decorators.ts +13 -0
  496. package/src/enums/ISCFeature.ts +47 -0
  497. package/src/enums/ModCallbackCustom2.ts +40 -0
  498. package/src/features/customGridEntity.ts +3 -7
  499. package/src/features/customTrapdoor/touched.ts +1 -1
  500. package/src/features/deployJSONRoom.ts +3 -7
  501. package/src/features/extraConsoleCommands/listCommands.ts +1 -1
  502. package/src/features/saveDataManager/constants.ts +1 -1
  503. package/src/features/saveDataManager/exports.ts +27 -0
  504. package/src/features/saveDataManager/main.ts +4 -6
  505. package/src/features/saveDataManager/save.ts +2 -2
  506. package/src/features.ts +90 -0
  507. package/src/functions/characters.ts +3 -3
  508. package/src/functions/charge.ts +30 -8
  509. package/src/functions/chargeBar.ts +6 -0
  510. package/src/functions/decorators.ts +45 -0
  511. package/src/functions/flying.ts +4 -4
  512. package/src/functions/gridEntities.ts +5 -5
  513. package/src/functions/gridEntitiesSpecific.ts +12 -12
  514. package/src/functions/itemPool.ts +2 -2
  515. package/src/functions/playerHealth.ts +6 -6
  516. package/src/functions/playerIndex.ts +2 -2
  517. package/src/functions/players.ts +26 -7
  518. package/src/functions/pocketItems.ts +1 -1
  519. package/src/functions/rooms.ts +1 -1
  520. package/src/functions/run.ts +12 -0
  521. package/src/functions/table.ts +11 -0
  522. package/src/functions/trinkets.ts +1 -1
  523. package/src/functions/tstlClass.ts +48 -24
  524. package/src/functions/utils.ts +49 -0
  525. package/src/index.ts +12 -1
  526. package/src/interfaces/SaveData.ts +4 -2
  527. package/src/interfaces/{private/TSTLClassMetatable.ts → TSTLClassMetatable.ts} +0 -0
  528. package/src/interfaces/private/AddCallbackParametersCustom.ts +3 -0
  529. package/src/interfaces/private/AddCallbackParametersCustom2.ts +265 -1
  530. package/src/maps/characterNameToTypeMap.ts +12 -12
  531. package/src/objects/characterDamageMultipliers.ts +6 -6
  532. package/src/objects/characterNames.ts +6 -6
  533. package/src/objects/playerNamePNGFileNames.ts +6 -6
  534. package/src/objects/playerPortraitPNGFileNames.ts +6 -6
  535. package/src/sets/charactersThatStartWithAnActiveItemSet.ts +1 -1
  536. package/src/sets/charactersWithFreeDevilDealsSet.ts +1 -1
  537. package/src/sets/charactersWithNoRedHeartsSet.ts +3 -3
  538. package/src/sets/charactersWithNoSoulHeartsSet.ts +2 -2
  539. package/src/sets/lostStyleCharactersSet.ts +4 -4
  540. package/src/types/AllButFirst.ts +6 -0
  541. package/src/types/AllButLast.ts +3 -0
  542. package/src/types/Constructor.ts +2 -0
  543. package/src/types/FunctionTuple.ts +4 -0
  544. package/src/types/HasAllEnumKeys.ts +25 -0
  545. package/src/types/LowercaseKeys.ts +3 -0
  546. package/src/types/StartsWithLowercase.ts +3 -0
  547. package/src/types/StartsWithUppercase.ts +3 -0
  548. package/src/types/UnionToIntersection.ts +6 -0
  549. package/src/types/UppercaseKeys.ts +3 -0
  550. package/src/types/private/CallbackTuple.ts +4 -4
  551. package/src/types/private/MatchingCallbackCustom.ts +7 -1
  552. package/dist/src/enums/IsaacScriptCommonFeature.d.ts +0 -35
  553. package/dist/src/enums/IsaacScriptCommonFeature.d.ts.map +0 -1
  554. package/dist/src/enums/IsaacScriptCommonFeature.lua +0 -35
  555. package/dist/src/interfaces/private/TSTLClassMetatable.d.ts.map +0 -1
  556. package/src/enums/IsaacScriptCommonFeature.ts +0 -34
@@ -0,0 +1,256 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { game } from "../../../core/cachedClasses";
3
+ import { arrayRemoveInPlace } from "../../../functions/array";
4
+ import { Feature } from "../../private/Feature";
5
+
6
+ /** Used for `runInNFrames` functions. */
7
+ type QueuedFunctionTuple = [frameCountToFire: int, func: () => void];
8
+
9
+ /**
10
+ * Used for `setInterval` functions.
11
+ *
12
+ * The return value is whether or not to continue the function from firing.
13
+ */
14
+ type IntervalFunctionTuple = [
15
+ frameCountToFire: int,
16
+ func: () => boolean,
17
+ numIntervalFrames: int,
18
+ ];
19
+
20
+ export class RunInNFrames extends Feature {
21
+ public override v = {
22
+ run: {
23
+ queuedGameFunctionTuples: [] as QueuedFunctionTuple[],
24
+ queuedRenderFunctionTuples: [] as QueuedFunctionTuple[],
25
+
26
+ intervalGameFunctionTuples: [] as IntervalFunctionTuple[],
27
+ intervalRenderFunctionTuples: [] as IntervalFunctionTuple[],
28
+ },
29
+ };
30
+
31
+ constructor() {
32
+ super();
33
+
34
+ this.callbacksUsed = [
35
+ [ModCallback.POST_UPDATE, [this.postUpdate]], // 1
36
+ [ModCallback.POST_RENDER, [this.postRender]], // 2
37
+ ];
38
+ }
39
+
40
+ // ModCallback.POST_UPDATE (1)
41
+ private postUpdate = (): void => {
42
+ const gameFrameCount = game.GetFrameCount();
43
+
44
+ checkExecuteQueuedFunctions(
45
+ gameFrameCount,
46
+ this.v.run.queuedGameFunctionTuples,
47
+ );
48
+ checkExecuteIntervalFunctions(
49
+ gameFrameCount,
50
+ this.v.run.intervalGameFunctionTuples,
51
+ );
52
+ };
53
+
54
+ // ModCallback.POST_RENDER (2)
55
+ private postRender = (): void => {
56
+ const renderFrameCount = Isaac.GetFrameCount();
57
+
58
+ checkExecuteQueuedFunctions(
59
+ renderFrameCount,
60
+ this.v.run.queuedRenderFunctionTuples,
61
+ );
62
+ checkExecuteIntervalFunctions(
63
+ renderFrameCount,
64
+ this.v.run.intervalRenderFunctionTuples,
65
+ );
66
+ };
67
+
68
+ // --------------
69
+ // Public methods
70
+ // --------------
71
+
72
+ /**
73
+ * Supply a function to run N game frames from now in the `POST_UPDATE` callback.
74
+ *
75
+ * For a usage example, see the documentation for the `runNextGameFrame`, which is used in a
76
+ * similar way.
77
+ *
78
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
79
+ * before the deferred function fires would cause a bug in your mod, then you should handle
80
+ * deferred functions manually using serializable data.
81
+ */
82
+ public runInNGameFrames(func: () => void, gameFrames: int): void {
83
+ const gameFrameCount = game.GetFrameCount();
84
+ const functionFireFrame = gameFrameCount + gameFrames;
85
+ const tuple: QueuedFunctionTuple = [functionFireFrame, func];
86
+ this.v.run.queuedGameFunctionTuples.push(tuple);
87
+ }
88
+
89
+ /**
90
+ * Supply a function to run N render frames from now in the `POST_RENDER` callback.
91
+ *
92
+ * For a usage example, see the documentation for the `runNextGameFrame`, which is used in a
93
+ * similar way.
94
+ *
95
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
96
+ * before the deferred function fires would cause a bug in your mod, then you should handle
97
+ * deferred functions manually using serializable data.
98
+ */
99
+ public runInNRenderFrames(func: () => void, renderFrames: int): void {
100
+ const renderFrameCount = Isaac.GetFrameCount();
101
+ const functionFireFrame = renderFrameCount + renderFrames;
102
+ const tuple: QueuedFunctionTuple = [functionFireFrame, func];
103
+ this.v.run.queuedRenderFunctionTuples.push(tuple);
104
+ }
105
+
106
+ /**
107
+ * Supply a function to run on the next `POST_UPDATE` callback.
108
+ *
109
+ * For example:
110
+ *
111
+ * ```ts
112
+ * const NUM_EXPLODER_EXPLOSIONS = 5;
113
+ *
114
+ * function useItemExploder(player: EntityPlayer) {
115
+ * playSound("exploderBegin");
116
+ * explode(player, NUM_EXPLODER_EXPLOSIONS);
117
+ * }
118
+ *
119
+ * function explode(player: EntityPlayer, numFramesLeft: int) {
120
+ * Isaac.Explode(player, undefined, 1);
121
+ * numFramesLeft -= 1;
122
+ * if (numFramesLeft === 0) {
123
+ * runNextFrame(() => {
124
+ * explode(player, numFramesLeft);
125
+ * });
126
+ * }
127
+ * }
128
+ * ```
129
+ *
130
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
131
+ * before the deferred function fires would cause a bug in your mod, then you should handle
132
+ * deferred functions manually using serializable data.
133
+ */
134
+ public runNextGameFrame(func: () => void): void {
135
+ this.runInNGameFrames(func, 1);
136
+ }
137
+
138
+ /**
139
+ * Supply a function to run on the next `POST_RENDER` callback.
140
+ *
141
+ * For a usage example, see the documentation for the `runNextGameFrame`, which is used in a
142
+ * similar way.
143
+ *
144
+ * Note that this function will not handle saving and quitting.
145
+ */
146
+ public runNextRenderFrame(func: () => void): void {
147
+ this.runInNRenderFrames(func, 1);
148
+ }
149
+
150
+ /**
151
+ * Supply a function to be repeatedly run on an interval of N game frames in the `POST_UPDATE`
152
+ * callback. The function will continue to be fired until `false` is returned from the function.
153
+ *
154
+ * This is similar to the `setInterval` vanilla JavaScript function, except there is no
155
+ * corresponding `clearInterval` function. (Instead, the return value from the supplied function
156
+ * is used to stop the interval.)
157
+ *
158
+ * Note that this function will not handle saving and quitting. You must manually restart any
159
+ * intervals if the player saves and quits in the middle of a run.
160
+ *
161
+ * @param func The function to repeatedly run on an interval.
162
+ * @param gameFrames The amount of game frames to wait between each run.
163
+ * @param runImmediately Whether or not to execute the function right now before waiting for the
164
+ * interval.
165
+ */
166
+ public setIntervalGameFrames(
167
+ func: () => boolean,
168
+ gameFrames: int,
169
+ runImmediately: boolean,
170
+ ): void {
171
+ const gameFrameCount = game.GetFrameCount();
172
+ const functionFireFrame = gameFrameCount + gameFrames;
173
+ const tuple: IntervalFunctionTuple = [functionFireFrame, func, gameFrames];
174
+ this.v.run.intervalGameFunctionTuples.push(tuple);
175
+
176
+ if (runImmediately) {
177
+ func();
178
+ }
179
+ }
180
+
181
+ /**
182
+ * Supply a function to be repeatedly run on an interval of N render frames in the `POST_RENDER`
183
+ * callback. The function will continue to be fired until `false` is returned from the function.
184
+ *
185
+ * This is similar to the `setInterval` vanilla JavaScript function, except there is no
186
+ * corresponding `clearInterval` function. (Instead, the return value from the supplied function
187
+ * is used to stop the interval.)
188
+ *
189
+ * Note that this function will not handle saving and quitting. You must manually restart any
190
+ * intervals if the player saves and quits in the middle of a run.
191
+ *
192
+ * @param func The function to repeatedly run on an interval.
193
+ * @param renderFrames The amount of game frames to wait between each run.
194
+ * @param runImmediately Whether or not to execute the function right now before waiting for the
195
+ * interval.
196
+ */
197
+ public setIntervalRenderFrames(
198
+ func: () => boolean,
199
+ renderFrames: int,
200
+ runImmediately: boolean,
201
+ ): void {
202
+ const renderFrameCount = Isaac.GetFrameCount();
203
+ const functionFireFrame = renderFrameCount + renderFrames;
204
+ const tuple: IntervalFunctionTuple = [
205
+ functionFireFrame,
206
+ func,
207
+ renderFrames,
208
+ ];
209
+ this.v.run.intervalGameFunctionTuples.push(tuple);
210
+
211
+ if (runImmediately) {
212
+ func();
213
+ }
214
+ }
215
+ }
216
+
217
+ function checkExecuteQueuedFunctions(
218
+ frameCount: int,
219
+ functionTuples: QueuedFunctionTuple[],
220
+ ) {
221
+ const firingFunctions = functionTuples.filter(
222
+ ([frameCountToFire]) => frameCount >= frameCountToFire,
223
+ );
224
+
225
+ for (const tuple of firingFunctions) {
226
+ const [_frameCountToFire, func] = tuple;
227
+ func();
228
+ arrayRemoveInPlace(functionTuples, tuple);
229
+ }
230
+ }
231
+
232
+ function checkExecuteIntervalFunctions(
233
+ frameCount: int,
234
+ functionTuples: IntervalFunctionTuple[],
235
+ ) {
236
+ const firingFunctions = functionTuples.filter(
237
+ ([frameCountToFire]) => frameCount >= frameCountToFire,
238
+ );
239
+
240
+ for (const tuple of firingFunctions) {
241
+ const [_frameCountToFire, func, numIntervalFrames] = tuple;
242
+ const returnValue = func();
243
+ arrayRemoveInPlace(functionTuples, tuple);
244
+
245
+ // Queue the next interval (as long as the function did not return false).
246
+ if (returnValue) {
247
+ const nextFireFrame = frameCount + numIntervalFrames;
248
+ const newTuple: IntervalFunctionTuple = [
249
+ nextFireFrame,
250
+ func,
251
+ numIntervalFrames,
252
+ ];
253
+ functionTuples.push(newTuple);
254
+ }
255
+ }
256
+ }
@@ -1,11 +1,7 @@
1
1
  import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
2
2
  import { AddCallbackParametersCustom2 } from "../../interfaces/private/AddCallbackParametersCustom2";
3
- import { SaveData } from "../../interfaces/SaveData";
4
3
  import { AllButFirst } from "../../types/private/AllButFirst";
5
- import {
6
- CallbackTuple,
7
- CustomCallbackTuple,
8
- } from "../../types/private/CallbackTuple";
4
+ import { Feature } from "./Feature";
9
5
 
10
6
  export type FireArgs<T extends ModCallbackCustom2> = Parameters<
11
7
  AddCallbackParametersCustom2[T][0]
@@ -18,21 +14,16 @@ export type OptionalArgs<T extends ModCallbackCustom2> = AllButFirst<
18
14
  * The base class for a custom callback. Individual custom callbacks (and validation callbacks) will
19
15
  * extend from this class.
20
16
  */
21
- export abstract class CustomCallback<T extends ModCallbackCustom2> {
22
- /** This is manually managed by the `ModUpgraded` class. */
23
- initialized = false;
17
+ export abstract class CustomCallback<
18
+ T extends ModCallbackCustom2,
19
+ > extends Feature {
20
+ private subscriptions: Array<AddCallbackParametersCustom2[T]> = [];
24
21
 
25
- subscriptions: Array<AddCallbackParametersCustom2[T]> = [];
26
-
27
- otherCallbacksUsed?: CallbackTuple[];
28
- otherCustomCallbacksUsed?: CustomCallbackTuple[];
29
- v?: SaveData;
30
-
31
- hasSubscriptions(): boolean {
22
+ public hasSubscriptions(): boolean {
32
23
  return this.subscriptions.length > 0;
33
24
  }
34
25
 
35
- add(...args: AddCallbackParametersCustom2[T]): void {
26
+ public add(...args: AddCallbackParametersCustom2[T]): void {
36
27
  this.subscriptions.push(args);
37
28
  }
38
29
 
@@ -40,7 +31,7 @@ export abstract class CustomCallback<T extends ModCallbackCustom2> {
40
31
  * If the submitted function does not match any of the existing subscriptions, this method will do
41
32
  * nothing.
42
33
  */
43
- remove(callback: AddCallbackParametersCustom2[T][0]): void {
34
+ public remove(callback: AddCallbackParametersCustom2[T][0]): void {
44
35
  const subscriptionIndexMatchingCallback = this.subscriptions.findIndex(
45
36
  (subscription) => {
46
37
  const subscriptionCallback = subscription[0];
@@ -52,23 +43,35 @@ export abstract class CustomCallback<T extends ModCallbackCustom2> {
52
43
  }
53
44
  }
54
45
 
55
- fire(...fireArgs: FireArgs<T>): void {
56
- for (const [callback, ...optionalArgs] of this.subscriptions) {
57
- // @ts-expect-error The compiler is not smart enough to know that the arguments should match
58
- // the method.
46
+ public fire = (
47
+ ...fireArgs: FireArgs<T>
48
+ ): ReturnType<AddCallbackParametersCustom2[T][0]> => {
49
+ for (const [callback, ...optionalArgsArray] of this.subscriptions) {
50
+ // The TypeScript compiler is bugged with the spread operator here, as it converts the
51
+ // optional arguments to an array instead of a tuple.
52
+ const optionalArgs = optionalArgsArray as OptionalArgs<T>;
53
+
59
54
  if (this.shouldFire(fireArgs, optionalArgs)) {
60
- // @ts-expect-error The compiler is not smart enough to know that the arguments should match
61
- // the callback.
62
- callback(...fireArgs);
55
+ // The TypeScript compiler is not smart enough to know that the fire args match the callback
56
+ // signature.
57
+ const callbackCasted = callback as (
58
+ ...args: FireArgs<T>
59
+ ) => ReturnType<AddCallbackParametersCustom2[T][0]>;
60
+ const value = callbackCasted(...fireArgs);
61
+ if (value !== undefined) {
62
+ return value;
63
+ }
63
64
  }
64
65
  }
65
- }
66
+
67
+ return undefined as ReturnType<AddCallbackParametersCustom2[T][0]>;
68
+ };
66
69
 
67
70
  /**
68
71
  * This method needs to be overwritten for any callback that has optional filtration arguments.
69
72
  */
70
73
  // eslint-disable-next-line class-methods-use-this
71
- shouldFire(
74
+ protected shouldFire(
72
75
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
73
76
  fireArgs: FireArgs<T>,
74
77
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
@@ -0,0 +1,24 @@
1
+ import { ISCFeature } from "../../enums/ISCFeature";
2
+ import { SaveData } from "../../interfaces/SaveData";
3
+ import {
4
+ CallbackTuple,
5
+ CustomCallbackTuple,
6
+ } from "../../types/private/CallbackTuple";
7
+
8
+ /**
9
+ * The IsaacScript standard library contains many optional features, such as the ability to create
10
+ * custom pickups. All features are optional and are only initialized when needed. This class
11
+ * contains elements to facilitate that.
12
+ *
13
+ * Additionally, all custom callbacks extend from this class.
14
+ */
15
+ export class Feature {
16
+ public initialized = false;
17
+
18
+ public v?: SaveData;
19
+ public featuresUsed?: ISCFeature[];
20
+ public callbacksUsed?: CallbackTuple[];
21
+ public customCallbacksUsed?: CustomCallbackTuple[];
22
+
23
+ public exportedMethods: string[] = [];
24
+ }
@@ -1,5 +1,8 @@
1
1
  import { postNewRoomEarlyCallbackInit } from "../callbacks/postNewRoomEarly";
2
2
  import { ModUpgraded } from "../classes/ModUpgraded";
3
+ import { Feature } from "../classes/private/Feature";
4
+ import { ISCFeature } from "../enums/ISCFeature";
5
+ import { ISCFeatureToClass } from "../features";
3
6
  import {
4
7
  saveDataManagerInit,
5
8
  SAVE_DATA_MANAGER_CALLBACKS,
@@ -13,6 +16,24 @@ import { initCustomCallbacks } from "../initCustomCallbacks";
13
16
  import { initFeatures } from "../initFeatures";
14
17
  import { patchErrorFunction } from "../patchErrorFunctions";
15
18
  import { loadShaderCrashFix } from "../shaderCrashFix";
19
+ import { LowercaseKeys } from "../types/LowercaseKeys";
20
+ import { UnionToIntersection } from "../types/UnionToIntersection";
21
+
22
+ /**
23
+ * By specifying one or more optional features, end-users will get a version of `ModUpgraded` that
24
+ * has extra methods corresponding to the features.
25
+ *
26
+ * We have to explicitly account for the empty array case, since `never` will cause mess up the
27
+ * union.
28
+ */
29
+ type ModUpgradedWithFeatures<T extends ISCFeature> = [T] extends [never]
30
+ ? ModUpgraded
31
+ : Omit<
32
+ ModUpgraded & UnionToIntersection<ISCFeatureToClass[T]>,
33
+ KeysToScrubFromModClass
34
+ >;
35
+
36
+ type KeysToScrubFromModClass = keyof Feature | LowercaseKeys<ModUpgraded>;
16
37
 
17
38
  /**
18
39
  * Use this function to enable the custom callbacks and other optional features provided by
@@ -32,6 +53,8 @@ import { loadShaderCrashFix } from "../shaderCrashFix";
32
53
  * ```
33
54
  *
34
55
  * @param modVanilla The mod object returned by the `RegisterMod` function.
56
+ * @param features Optional. An array containing the optional standard library features that you
57
+ * want to enable, if any. Default is an empty array.
35
58
  * @param debug Optional. Whether to log additional output when a callback is fired. Default is
36
59
  * false.
37
60
  * @param timeThreshold Optional. If provided, will only log callbacks that take longer than the
@@ -39,42 +62,65 @@ import { loadShaderCrashFix } from "../shaderCrashFix";
39
62
  * or milliseconds (if the "--luadebug" launch flag is turned off).
40
63
  * @returns The upgraded mod object.
41
64
  */
42
- export function upgradeMod(
65
+ export function upgradeMod<T extends ISCFeature = never>(
43
66
  modVanilla: Mod,
67
+ features: T[] = [],
44
68
  debug = false,
45
69
  timeThreshold?: float,
46
- ): ModUpgraded {
70
+ ): ModUpgradedWithFeatures<T> {
47
71
  const mod = new ModUpgraded(modVanilla, debug, timeThreshold);
48
72
 
49
- if (!areFeaturesInitialized()) {
50
- setFeaturesInitialized();
73
+ if (areFeaturesInitialized()) {
74
+ error(
75
+ "Failed to upgrade the mod since a mod has already been initialized. (You can only upgrade one mod per IsaacScript project.)",
76
+ );
77
+ }
78
+ setFeaturesInitialized();
51
79
 
52
- patchErrorFunction();
53
- loadShaderCrashFix(modVanilla);
80
+ patchErrorFunction();
81
+ loadShaderCrashFix(modVanilla);
54
82
 
55
- // We initialize the `POST_NEW_ROOM_EARLY` callback first since it is used by the save data
56
- // manager.
57
- postNewRoomEarlyCallbackInit(mod);
83
+ legacyInit(mod); // TODO: remove
58
84
 
59
- // We initialized the save data manager second since it is used by the other custom callbacks
60
- // and features. We can't pass the instantiated `ModUpgraded` class to the "saveDataManagerInit"
61
- // function since it causes a circular dependency. Thus, we emulate the initialization process
62
- // that the `ModUpgraded.AddCallbackCustom` method uses.
63
- saveDataManagerInit(mod);
64
- for (const callbackTuple of SAVE_DATA_MANAGER_CALLBACKS) {
65
- const [modCallback, callbackArgs] = callbackTuple;
66
- mod.AddCallback(modCallback, ...callbackArgs);
67
- }
68
- for (const callbackTuple of SAVE_DATA_MANAGER_CUSTOM_CALLBACKS) {
69
- const [modCallback, callbackArgs] = callbackTuple;
70
- mod.AddCallbackCustom(modCallback, ...callbackArgs);
85
+ for (const feature of features) {
86
+ const tstlClassMethods = mod.initOptionalFeature(feature);
87
+
88
+ // If the optional feature provides helper functions, attach them to the base mod object. (This
89
+ // provides a convenient API for end-users.)
90
+ const modRecord = mod as unknown as Record<
91
+ string,
92
+ (...args: unknown[]) => unknown
93
+ >;
94
+ for (const [funcName, func] of tstlClassMethods) {
95
+ modRecord[funcName] = func;
71
96
  }
97
+ }
98
+
99
+ return mod as ModUpgradedWithFeatures<T>;
100
+ }
72
101
 
73
- // We initialize custom callbacks next since some features use custom callbacks.
74
- initCustomCallbacks(mod);
102
+ /** Initialize features in the old way. */
103
+ function legacyInit(mod: ModUpgraded) {
104
+ // We initialize the `POST_NEW_ROOM_EARLY` callback first since it is used by the save data
105
+ // manager.
106
+ postNewRoomEarlyCallbackInit(mod);
75
107
 
76
- initFeatures(mod);
108
+ // We initialized the save data manager second since it is used by the other custom callbacks and
109
+ // features. We can't pass the instantiated `ModUpgraded` class to the "saveDataManagerInit"
110
+ // function since it causes a circular dependency. Thus, we emulate the initialization process
111
+ // that the `ModUpgraded.AddCallbackCustom` method uses.
112
+ saveDataManagerInit(mod);
113
+ for (const callbackTuple of SAVE_DATA_MANAGER_CALLBACKS) {
114
+ const [modCallback, callbackArgs] = callbackTuple;
115
+ mod.AddCallback(modCallback, ...callbackArgs);
116
+ }
117
+ for (const callbackTuple of SAVE_DATA_MANAGER_CUSTOM_CALLBACKS) {
118
+ const [modCallback, callbackArgs] = callbackTuple;
119
+ mod.AddCallbackCustom(modCallback, ...callbackArgs);
77
120
  }
78
121
 
79
- return mod;
122
+ // We initialize custom callbacks next since some features use custom callbacks.
123
+ initCustomCallbacks(mod);
124
+
125
+ initFeatures(mod);
80
126
  }
@@ -0,0 +1,13 @@
1
+ import { Feature } from "./classes/private/Feature";
2
+
3
+ /**
4
+ * A decorator function that signifies that the decorated class method should be added to the
5
+ * `ModUpgraded` object.
6
+ *
7
+ * This is only meant to be used internally.
8
+ */
9
+ export function Exported() {
10
+ return <T extends Feature>(target: T, propertyKey: keyof T): void => {
11
+ target.exportedMethods.push(propertyKey as string);
12
+ };
13
+ }
@@ -0,0 +1,47 @@
1
+ /* eslint-disable isaacscript/format-line-comments */
2
+ /* eslint-disable isaacscript/complete-sentences-line-comments */
3
+
4
+ export enum ISCFeature {
5
+ // Callback logic
6
+ CUSTOM_REVIVE = "CustomRevive",
7
+ ESAU_JR_DETECTION = "EsauJrDetection",
8
+ FLIP_DETECTION = "FlipDetection",
9
+ GRID_ENTITY_COLLISION_DETECTION = "GridEntityCollisionDetection",
10
+ GRID_ENTITY_DETECTION = "GridEntityDetection",
11
+ GAME_REORDERED_CALLBACKS = "GameReorderedCallbacks",
12
+ PLAYER_REORDERED_CALLBACKS = "PlayerReorderedCallbacks",
13
+
14
+ // Extra features
15
+ // CHARACTER_HEALTH_CONVERSION = "characterHealthConversion",
16
+ // CHARACTER_STATS = "characterStats",
17
+ // COLLECTIBLE_ITEM_POOL_TYPE = "collectibleItemPoolType",
18
+ CUSTOM_GRID_ENTITIES = "CustomGridEntities",
19
+ // CUSTOM_HOTKEYS = "customHotkeys",
20
+ // CUSTOM_PICKUP = "customPickup",
21
+ // CUSTOM_STAGE = "customStage",
22
+ // CUSTOM_TRAPDOOR = "customTrapdoor",
23
+ // DEBUG_DISPLAY = "debugDisplay",
24
+ // DEPLOY_JSON_ROOM = "deployJSONRoom",
25
+ // DISABLE_ALL_SOUND = "displayAllSound",
26
+ // DISABLE_INPUTS = "disableInputs",
27
+ // FADE_IN_REMOVER = "fadeInRemover",
28
+ // FAST_RESET = "fastReset",
29
+ // FIRST_LAST = "firstLast",
30
+ // FORGOTTEN_SWITCH = "forgottenSwitch",
31
+ // EXTRA_CONSOLE_COMMANDS = "extraConsoleCommands",
32
+ // PAUSE = "pause",
33
+ // PERSISTENT_ENTITIES = "persistentEntities",
34
+ // PICKUP_INDEX = "pickupIndex",
35
+ // PLAYER_INVENTORY = "playerInventory",
36
+ // PONY_DETECTION = "ponyDetection",
37
+ // PREVENT_CHILD_ENTITIES = "preventChildEntities",
38
+ // PREVENT_COLLECTIBLE_ROTATION = "preventCollectibleRotation",
39
+ // ROOM_CLEAR_FRAME = "roomClearFrame",
40
+ // ROOM_HISTORY = "roomHistory",
41
+ RUN_IN_N_FRAMES = "runInNFrames",
42
+ // RUN_NEXT_ROOM = "runNextRoom",
43
+ // SAVE_DATA_MANAGER = "saveDataManager",
44
+ // SIREN_HELPERS = "sirenHelpers",
45
+ // STAGE_HISTORY = "stageHistory",
46
+ // TAINTED_LAZARUS_PLAYERS = "taintedLazarusPlayers",
47
+ }
@@ -8,10 +8,50 @@ export enum ModCallbackCustom2 {
8
8
  POST_COLLECTIBLE_EMPTY,
9
9
  POST_COLLECTIBLE_INIT_FIRST,
10
10
  POST_CURSED_TELEPORT,
11
+ POST_CUSTOM_REVIVE,
12
+ POST_DICE_ROOM_ACTIVATED,
13
+ POST_DOOR_RENDER,
14
+ POST_DOOR_UPDATE,
15
+ POST_EFFECT_INIT_LATE,
16
+ POST_EFFECT_STATE_CHANGED,
17
+ POST_ESAU_JR,
18
+ POST_FAMILIAR_INIT_LATE,
19
+ POST_FAMILIAR_STATE_CHANGED,
20
+ POST_FIRST_ESAU_JR,
21
+ POST_FIRST_FLIP,
22
+ POST_FLIP,
23
+ POST_GAME_STARTED_REORDERED,
24
+ POST_GAME_STARTED_REORDERED_LAST,
25
+ POST_GREED_MODE_WAVE,
26
+ POST_GRID_ENTITY_BROKEN,
27
+ POST_GRID_ENTITY_COLLISION,
28
+ POST_GRID_ENTITY_CUSTOM_BROKEN,
29
+ POST_GRID_ENTITY_CUSTOM_COLLISION,
30
+ POST_GRID_ENTITY_CUSTOM_INIT,
31
+ POST_GRID_ENTITY_CUSTOM_REMOVE,
32
+ // POST_GRID_ENTITY_CUSTOM_RENDER,
33
+ POST_GRID_ENTITY_CUSTOM_STATE_CHANGED,
34
+ POST_GRID_ENTITY_CUSTOM_UPDATE,
35
+ POST_GRID_ENTITY_INIT,
36
+ POST_GRID_ENTITY_REMOVE,
37
+ // POST_GRID_ENTITY_RENDER,
38
+ POST_GRID_ENTITY_STATE_CHANGED,
39
+ POST_GRID_ENTITY_UPDATE,
40
+ POST_HOLY_MANTLE_REMOVED,
41
+
42
+ // ---------------------
11
43
 
12
44
  POST_KNIFE_INIT_LATE,
45
+ POST_NEW_LEVEL_REORDERED,
13
46
  POST_NEW_ROOM_EARLY,
47
+ POST_NEW_ROOM_REORDERED,
48
+ POST_PEFFECT_UPDATE_REORDERED,
14
49
  POST_PIT_RENDER,
50
+ POST_PLAYER_FATAL_DAMAGE,
51
+ POST_PLAYER_RENDER_REORDERED,
52
+ POST_PLAYER_UPDATE_REORDERED,
15
53
  POST_ROOM_CLEAR_CHANGED,
16
54
  POST_SPIKES_RENDER,
55
+ PRE_BERSERK_DEATH,
56
+ PRE_CUSTOM_REVIVE,
17
57
  }
@@ -18,6 +18,7 @@ import {
18
18
  removeGridEntity,
19
19
  spawnGridEntityWithVariant,
20
20
  } from "../functions/gridEntities";
21
+ import { getPlayerFromPtr } from "../functions/players";
21
22
  import { getRoomListIndex } from "../functions/roomData";
22
23
  import { isNumber } from "../functions/types";
23
24
  import { isVector } from "../functions/vector";
@@ -91,14 +92,9 @@ function preUseItemWeNeedToGoDeeper(
91
92
 
92
93
  removeGridEntity(customGridEntity.gridIndex, false);
93
94
 
94
- const playerPtr = EntityPtr(player);
95
+ const entityPtr = EntityPtr(player);
95
96
  runNextGameFrame(() => {
96
- const futureEntity = playerPtr.Ref;
97
- if (futureEntity === undefined) {
98
- return;
99
- }
100
-
101
- const futurePlayer = futureEntity.ToPlayer();
97
+ const futurePlayer = getPlayerFromPtr(entityPtr);
102
98
  if (futurePlayer === undefined) {
103
99
  return;
104
100
  }
@@ -123,7 +123,7 @@ function setPlayerAttributes(trapdoorPlayer: EntityPlayer, position: Vector) {
123
123
  }
124
124
 
125
125
  function dropTaintedForgotten(player: EntityPlayer) {
126
- if (isCharacter(player, PlayerType.THE_FORGOTTEN_B)) {
126
+ if (isCharacter(player, PlayerType.FORGOTTEN_B)) {
127
127
  const taintedSoul = player.GetOtherTwin();
128
128
  if (taintedSoul !== undefined) {
129
129
  taintedSoul.ThrowHeldEntity(VectorZero);
@@ -41,6 +41,7 @@ import {
41
41
  } from "../functions/gridEntities";
42
42
  import { getRandomJSONEntity, getRandomJSONRoom } from "../functions/jsonRoom";
43
43
  import { log } from "../functions/log";
44
+ import { getPlayerFromPtr } from "../functions/players";
44
45
  import { getRandomSeed, isRNG, newRNG } from "../functions/rng";
45
46
  import { getRoomListIndex } from "../functions/roomData";
46
47
  import { gridCoordinatesToWorldPosition } from "../functions/roomGrid";
@@ -134,14 +135,9 @@ function preUseItemWeNeedToGoDeeper(
134
135
  removeGridEntity(decoration, false);
135
136
  }
136
137
 
137
- const playerPtr = EntityPtr(player);
138
+ const entityPtr = EntityPtr(player);
138
139
  runNextGameFrame(() => {
139
- const futureEntity = playerPtr.Ref;
140
- if (futureEntity === undefined) {
141
- return;
142
- }
143
-
144
- const futurePlayer = futureEntity.ToPlayer();
140
+ const futurePlayer = getPlayerFromPtr(entityPtr);
145
141
  if (futurePlayer === undefined) {
146
142
  return;
147
143
  }