isaacscript-common 13.3.4 → 14.0.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 (235) hide show
  1. package/dist/index.d.ts +576 -401
  2. package/dist/isaacscript-common.lua +14654 -13908
  3. package/dist/src/callbacks/postAmbush.d.ts.map +1 -1
  4. package/dist/src/callbacks/postAmbush.lua +7 -12
  5. package/dist/src/callbacks/postBombExploded.lua +3 -3
  6. package/dist/src/callbacks/postRoomClearChanged.d.ts.map +1 -1
  7. package/dist/src/callbacks/postRoomClearChanged.lua +3 -5
  8. package/dist/src/callbacks/subscriptions/{postBoneExploded.d.ts → postBombExploded.d.ts} +1 -1
  9. package/dist/src/callbacks/subscriptions/{postBoneExploded.d.ts.map → postBombExploded.d.ts.map} +1 -1
  10. package/dist/src/callbacks/subscriptions/{postBoneExploded.lua → postBombExploded.lua} +0 -0
  11. package/dist/src/callbacks/subscriptions/postCollectibleEmpty.d.ts +1 -1
  12. package/dist/src/callbacks/subscriptions/postCollectibleEmpty.d.ts.map +1 -1
  13. package/dist/src/callbacks/subscriptions/postCollectibleInitFirst.d.ts +1 -1
  14. package/dist/src/callbacks/subscriptions/postCollectibleInitFirst.d.ts.map +1 -1
  15. package/dist/src/callbacks/subscriptions/postCursedTeleport.d.ts +4 -2
  16. package/dist/src/callbacks/subscriptions/postCursedTeleport.d.ts.map +1 -1
  17. package/dist/src/callbacks/subscriptions/postCursedTeleport.lua +13 -1
  18. package/dist/src/callbacks/subscriptions/postHolyMantleRemoved.d.ts.map +1 -1
  19. package/dist/src/callbacks/subscriptions/postHolyMantleRemoved.lua +2 -2
  20. package/dist/src/callbacks/subscriptions/postPEffectUpdateReordered.d.ts.map +1 -1
  21. package/dist/src/callbacks/subscriptions/postPEffectUpdateReordered.lua +2 -2
  22. package/dist/src/classes/ModUpgraded.d.ts +9 -5
  23. package/dist/src/classes/ModUpgraded.d.ts.map +1 -1
  24. package/dist/src/classes/ModUpgraded.lua +101 -14
  25. package/dist/src/classes/callbacks/PostAmbushFinished.d.ts +12 -0
  26. package/dist/src/classes/callbacks/PostAmbushFinished.d.ts.map +1 -0
  27. package/dist/src/classes/callbacks/PostAmbushFinished.lua +37 -0
  28. package/dist/src/classes/callbacks/PostAmbushStarted.d.ts +12 -0
  29. package/dist/src/classes/callbacks/PostAmbushStarted.d.ts.map +1 -0
  30. package/dist/src/classes/callbacks/PostAmbushStarted.lua +37 -0
  31. package/dist/src/classes/callbacks/PostBombExploded.d.ts +7 -0
  32. package/dist/src/classes/callbacks/PostBombExploded.d.ts.map +1 -0
  33. package/dist/src/classes/callbacks/PostBombExploded.lua +24 -0
  34. package/dist/src/classes/callbacks/PostBombInitLate.d.ts +12 -0
  35. package/dist/src/classes/callbacks/PostBombInitLate.d.ts.map +1 -0
  36. package/dist/src/classes/callbacks/PostBombInitLate.lua +27 -0
  37. package/dist/src/classes/callbacks/PostBoneSwing.d.ts +15 -0
  38. package/dist/src/classes/callbacks/PostBoneSwing.d.ts.map +1 -0
  39. package/dist/src/classes/callbacks/PostBoneSwing.lua +43 -0
  40. package/dist/src/classes/callbacks/PostCollectibleEmpty.d.ts +17 -0
  41. package/dist/src/classes/callbacks/PostCollectibleEmpty.d.ts.map +1 -0
  42. package/dist/src/classes/callbacks/PostCollectibleEmpty.lua +47 -0
  43. package/dist/src/classes/callbacks/PostCollectibleInitFirst.d.ts +13 -0
  44. package/dist/src/classes/callbacks/PostCollectibleInitFirst.d.ts.map +1 -0
  45. package/dist/src/classes/callbacks/PostCollectibleInitFirst.lua +32 -0
  46. package/dist/src/classes/callbacks/PostCursedTeleport.d.ts +21 -0
  47. package/dist/src/classes/callbacks/PostCursedTeleport.d.ts.map +1 -0
  48. package/dist/src/classes/callbacks/PostCursedTeleport.lua +113 -0
  49. package/dist/src/classes/callbacks/PostKnifeInitLate.d.ts +12 -0
  50. package/dist/src/classes/callbacks/PostKnifeInitLate.d.ts.map +1 -0
  51. package/dist/src/classes/callbacks/PostKnifeInitLate.lua +27 -0
  52. package/dist/src/classes/callbacks/PostNewRoomEarly.d.ts +14 -0
  53. package/dist/src/classes/callbacks/PostNewRoomEarly.d.ts.map +1 -0
  54. package/dist/src/classes/callbacks/PostNewRoomEarly.lua +65 -0
  55. package/dist/src/classes/callbacks/PostPitRender.d.ts +7 -0
  56. package/dist/src/classes/callbacks/PostPitRender.d.ts.map +1 -0
  57. package/dist/src/classes/callbacks/PostPitRender.lua +24 -0
  58. package/dist/src/classes/callbacks/PostRoomClearChanged.d.ts +13 -0
  59. package/dist/src/classes/callbacks/PostRoomClearChanged.d.ts.map +1 -0
  60. package/dist/src/classes/callbacks/PostRoomClearChanged.lua +33 -0
  61. package/dist/src/classes/callbacks/PostSpikesRender.d.ts +7 -0
  62. package/dist/src/classes/callbacks/PostSpikesRender.d.ts.map +1 -0
  63. package/dist/src/classes/callbacks/PostSpikesRender.lua +24 -0
  64. package/dist/src/classes/callbacks/validation/CustomCallbackAmbush.d.ts +10 -0
  65. package/dist/src/classes/callbacks/validation/CustomCallbackAmbush.d.ts.map +1 -0
  66. package/dist/src/classes/callbacks/validation/CustomCallbackAmbush.lua +19 -0
  67. package/dist/src/classes/callbacks/validation/CustomCallbackBomb.d.ts +10 -0
  68. package/dist/src/classes/callbacks/validation/CustomCallbackBomb.d.ts.map +1 -0
  69. package/dist/src/classes/callbacks/validation/CustomCallbackBomb.lua +19 -0
  70. package/dist/src/classes/callbacks/validation/CustomCallbackCollectible.d.ts +10 -0
  71. package/dist/src/classes/callbacks/validation/CustomCallbackCollectible.d.ts.map +1 -0
  72. package/dist/src/classes/callbacks/validation/CustomCallbackCollectible.lua +19 -0
  73. package/dist/src/classes/callbacks/validation/CustomCallbackKnife.d.ts +10 -0
  74. package/dist/src/classes/callbacks/validation/CustomCallbackKnife.d.ts.map +1 -0
  75. package/dist/src/classes/callbacks/validation/CustomCallbackKnife.lua +19 -0
  76. package/dist/src/classes/callbacks/validation/CustomCallbackPit.d.ts +10 -0
  77. package/dist/src/classes/callbacks/validation/CustomCallbackPit.d.ts.map +1 -0
  78. package/dist/src/classes/callbacks/validation/CustomCallbackPit.lua +20 -0
  79. package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.d.ts +10 -0
  80. package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.d.ts.map +1 -0
  81. package/dist/src/classes/callbacks/validation/CustomCallbackPlayer.lua +23 -0
  82. package/dist/src/classes/callbacks/validation/CustomCallbackSpikes.d.ts +10 -0
  83. package/dist/src/classes/callbacks/validation/CustomCallbackSpikes.d.ts.map +1 -0
  84. package/dist/src/classes/callbacks/validation/CustomCallbackSpikes.lua +20 -0
  85. package/dist/src/classes/private/CustomCallback.d.ts +32 -0
  86. package/dist/src/classes/private/CustomCallback.d.ts.map +1 -0
  87. package/dist/src/classes/private/CustomCallback.lua +53 -0
  88. package/dist/src/core/upgradeMod.d.ts.map +1 -1
  89. package/dist/src/core/upgradeMod.lua +16 -0
  90. package/dist/src/enums/IsaacScriptCommonFeature.d.ts +35 -0
  91. package/dist/src/enums/IsaacScriptCommonFeature.d.ts.map +1 -0
  92. package/dist/src/enums/IsaacScriptCommonFeature.lua +35 -0
  93. package/dist/src/enums/LadderSubTypeCustom.d.ts +17 -0
  94. package/dist/src/enums/LadderSubTypeCustom.d.ts.map +1 -0
  95. package/dist/src/enums/LadderSubTypeCustom.lua +19 -0
  96. package/dist/src/enums/ModCallbackCustom.d.ts +399 -327
  97. package/dist/src/enums/ModCallbackCustom.d.ts.map +1 -1
  98. package/dist/src/enums/ModCallbackCustom.lua +85 -87
  99. package/dist/src/enums/ModCallbackCustom2.d.ts +17 -0
  100. package/dist/src/enums/ModCallbackCustom2.d.ts.map +1 -0
  101. package/dist/src/enums/ModCallbackCustom2.lua +30 -0
  102. package/dist/src/features/{setHotkey.d.ts → customHotkeys.d.ts} +1 -1
  103. package/dist/src/features/customHotkeys.d.ts.map +1 -0
  104. package/dist/src/features/{setHotkey.lua → customHotkeys.lua} +2 -2
  105. package/dist/src/features/customPickup.d.ts.map +1 -1
  106. package/dist/src/features/customPickup.lua +6 -2
  107. package/dist/src/features/customStage/backdrop.d.ts.map +1 -1
  108. package/dist/src/features/customStage/backdrop.lua +3 -1
  109. package/dist/src/features/customStage/shadows.d.ts.map +1 -1
  110. package/dist/src/features/customStage/shadows.lua +3 -1
  111. package/dist/src/features/customTrapdoor/init.lua +1 -7
  112. package/dist/src/features/firstLast.d.ts.map +1 -1
  113. package/dist/src/features/firstLast.lua +3 -3
  114. package/dist/src/features/saveDataManager/main.d.ts +5 -2
  115. package/dist/src/features/saveDataManager/main.d.ts.map +1 -1
  116. package/dist/src/features/saveDataManager/main.lua +3 -5
  117. package/dist/src/functions/ambush.d.ts +6 -0
  118. package/dist/src/functions/ambush.d.ts.map +1 -1
  119. package/dist/src/functions/ambush.lua +31 -0
  120. package/dist/src/functions/minimap.d.ts +4 -0
  121. package/dist/src/functions/minimap.d.ts.map +1 -1
  122. package/dist/src/functions/minimap.lua +4 -0
  123. package/dist/src/functions/roomTransition.d.ts +3 -4
  124. package/dist/src/functions/roomTransition.d.ts.map +1 -1
  125. package/dist/src/functions/roomTransition.lua +4 -32
  126. package/dist/src/functions/spawnCollectible.d.ts +24 -5
  127. package/dist/src/functions/spawnCollectible.d.ts.map +1 -1
  128. package/dist/src/functions/spawnCollectible.lua +44 -4
  129. package/dist/src/functions/utils.d.ts +7 -2
  130. package/dist/src/functions/utils.d.ts.map +1 -1
  131. package/dist/src/functions/utils.lua +7 -2
  132. package/dist/src/index.d.ts +4 -2
  133. package/dist/src/index.d.ts.map +1 -1
  134. package/dist/src/index.lua +26 -10
  135. package/dist/src/initCustomCallbacks.d.ts.map +1 -1
  136. package/dist/src/initCustomCallbacks.lua +0 -3
  137. package/dist/src/initFeatures.lua +3 -3
  138. package/dist/src/interfaces/private/{AddCallbackParameterCustom.d.ts → AddCallbackParametersCustom.d.ts} +3 -5
  139. package/dist/src/interfaces/private/AddCallbackParametersCustom.d.ts.map +1 -0
  140. package/dist/src/interfaces/private/{AddCallbackParameterCustom.lua → AddCallbackParametersCustom.lua} +0 -0
  141. package/dist/src/interfaces/private/AddCallbackParametersCustom2.d.ts +55 -0
  142. package/dist/src/interfaces/private/AddCallbackParametersCustom2.d.ts.map +1 -0
  143. package/dist/src/interfaces/private/AddCallbackParametersCustom2.lua +4 -0
  144. package/dist/src/objects/callbackRegisterFunctions.d.ts +1 -1
  145. package/dist/src/objects/callbackRegisterFunctions.d.ts.map +1 -1
  146. package/dist/src/objects/callbackRegisterFunctions.lua +2 -5
  147. package/dist/src/types/private/AllButFirst.d.ts +5 -0
  148. package/dist/src/types/private/AllButFirst.d.ts.map +1 -0
  149. package/dist/src/types/private/AllButFirst.lua +2 -0
  150. package/dist/src/types/private/CallbackTuple.d.ts +20 -0
  151. package/dist/src/types/private/CallbackTuple.d.ts.map +1 -0
  152. package/dist/src/types/private/CallbackTuple.lua +2 -0
  153. package/dist/src/types/private/MatchingCallbackCustom.d.ts +14 -0
  154. package/dist/src/types/private/MatchingCallbackCustom.d.ts.map +1 -0
  155. package/dist/src/types/private/MatchingCallbackCustom.lua +2 -0
  156. package/package.json +2 -2
  157. package/src/callbacks/postAmbush.ts +7 -14
  158. package/src/callbacks/postBombExploded.ts +1 -1
  159. package/src/callbacks/postBoneSwing.ts +2 -1
  160. package/src/callbacks/postCollectibleEmpty.ts +2 -0
  161. package/src/callbacks/postCollectibleInitFirst.ts +2 -0
  162. package/src/callbacks/postNewRoomEarly.ts +1 -1
  163. package/src/callbacks/postRoomClearChanged.ts +3 -7
  164. package/src/callbacks/subscriptions/{postBoneExploded.ts → postBombExploded.ts} +0 -0
  165. package/src/callbacks/subscriptions/postCollectibleEmpty.ts +1 -1
  166. package/src/callbacks/subscriptions/postCollectibleInitFirst.ts +1 -1
  167. package/src/callbacks/subscriptions/postCursedTeleport.ts +24 -1
  168. package/src/callbacks/subscriptions/postHolyMantleRemoved.ts +9 -2
  169. package/src/callbacks/subscriptions/postPEffectUpdateReordered.ts +9 -2
  170. package/src/classes/ModUpgraded.ts +118 -27
  171. package/src/classes/callbacks/PostAmbushFinished.ts +39 -0
  172. package/src/classes/callbacks/PostAmbushStarted.ts +39 -0
  173. package/src/classes/callbacks/PostBombExploded.ts +21 -0
  174. package/src/classes/callbacks/PostBombInitLate.ts +28 -0
  175. package/src/classes/callbacks/PostBoneSwing.ts +58 -0
  176. package/src/classes/callbacks/PostCollectibleEmpty.ts +72 -0
  177. package/src/classes/callbacks/PostCollectibleInitFirst.ts +37 -0
  178. package/src/classes/callbacks/PostCursedTeleport.ts +183 -0
  179. package/src/classes/callbacks/PostKnifeInitLate.ts +28 -0
  180. package/src/classes/callbacks/PostNewRoomEarly.ts +93 -0
  181. package/src/classes/callbacks/PostPitRender.ts +21 -0
  182. package/src/classes/callbacks/PostRoomClearChanged.ts +40 -0
  183. package/src/classes/callbacks/PostSpikesRender.ts +21 -0
  184. package/src/classes/callbacks/validation/CustomCallbackAmbush.ts +28 -0
  185. package/src/classes/callbacks/validation/CustomCallbackBomb.ts +27 -0
  186. package/src/classes/callbacks/validation/CustomCallbackCollectible.ts +30 -0
  187. package/src/classes/callbacks/validation/CustomCallbackKnife.ts +27 -0
  188. package/src/classes/callbacks/validation/CustomCallbackPit.ts +28 -0
  189. package/src/classes/callbacks/validation/CustomCallbackPlayer.ts +37 -0
  190. package/src/classes/callbacks/validation/CustomCallbackSpikes.ts +28 -0
  191. package/src/classes/private/CustomCallback.ts +79 -0
  192. package/src/core/upgradeMod.ts +16 -2
  193. package/src/enums/IsaacScriptCommonFeature.ts +34 -0
  194. package/src/enums/LadderSubTypeCustom.ts +17 -0
  195. package/src/enums/ModCallbackCustom.ts +314 -243
  196. package/src/enums/ModCallbackCustom2.ts +17 -0
  197. package/src/features/{setHotkey.ts → customHotkeys.ts} +2 -2
  198. package/src/features/customPickup.ts +4 -2
  199. package/src/features/customStage/backdrop.ts +2 -1
  200. package/src/features/customStage/shadows.ts +2 -1
  201. package/src/features/customTrapdoor/init.ts +0 -1
  202. package/src/features/firstLast.ts +3 -7
  203. package/src/features/saveDataManager/main.ts +32 -21
  204. package/src/functions/ambush.ts +26 -1
  205. package/src/functions/minimap.ts +4 -0
  206. package/src/functions/roomTransition.ts +3 -27
  207. package/src/functions/spawnCollectible.ts +44 -4
  208. package/src/functions/utils.ts +7 -2
  209. package/src/index.ts +4 -2
  210. package/src/initCustomCallbacks.ts +1 -2
  211. package/src/initFeatures.ts +2 -2
  212. package/src/interfaces/private/{AddCallbackParameterCustom.ts → AddCallbackParametersCustom.ts} +2 -24
  213. package/src/interfaces/private/AddCallbackParametersCustom2.ts +79 -0
  214. package/src/objects/callbackRegisterFunctions.ts +2 -4
  215. package/src/types/private/AllButFirst.ts +6 -0
  216. package/src/types/private/CallbackTuple.ts +21 -0
  217. package/src/types/private/MatchingCallbackCustom.ts +26 -0
  218. package/dist/src/callbacks/postCustomDoorEnter.d.ts +0 -6
  219. package/dist/src/callbacks/postCustomDoorEnter.d.ts.map +0 -1
  220. package/dist/src/callbacks/postCustomDoorEnter.lua +0 -199
  221. package/dist/src/callbacks/subscriptions/postCustomDoorEnter.d.ts +0 -9
  222. package/dist/src/callbacks/subscriptions/postCustomDoorEnter.d.ts.map +0 -1
  223. package/dist/src/callbacks/subscriptions/postCustomDoorEnter.lua +0 -29
  224. package/dist/src/classes/CustomCallback.d.ts +0 -8
  225. package/dist/src/classes/CustomCallback.d.ts.map +0 -1
  226. package/dist/src/classes/CustomCallback.lua +0 -28
  227. package/dist/src/features/customDoor.d.ts +0 -51
  228. package/dist/src/features/customDoor.d.ts.map +0 -1
  229. package/dist/src/features/customDoor.lua +0 -53
  230. package/dist/src/features/setHotkey.d.ts.map +0 -1
  231. package/dist/src/interfaces/private/AddCallbackParameterCustom.d.ts.map +0 -1
  232. package/src/callbacks/postCustomDoorEnter.ts +0 -250
  233. package/src/callbacks/subscriptions/postCustomDoorEnter.ts +0 -42
  234. package/src/classes/CustomCallback.ts +0 -23
  235. package/src/features/customDoor.ts +0 -66
@@ -1,9 +1,27 @@
1
1
  import { ModCallback } from "isaac-typescript-definitions";
2
2
  import { ModCallbackCustom } from "../enums/ModCallbackCustom";
3
+ import { ModCallbackCustom2 } from "../enums/ModCallbackCustom2";
4
+ import { saveDataManager } from "../features/saveDataManager/exports";
3
5
  import { getTime } from "../functions/debugFunctions";
4
6
  import { getParentFunctionDescription } from "../functions/log";
5
- import { AddCallbackParametersCustom } from "../interfaces/private/AddCallbackParameterCustom";
7
+ import { getTSTLClassName } from "../functions/tstlClass";
8
+ import { AddCallbackParametersCustom } from "../interfaces/private/AddCallbackParametersCustom";
9
+ import { AddCallbackParametersCustom2 } from "../interfaces/private/AddCallbackParametersCustom2";
6
10
  import { CALLBACK_REGISTER_FUNCTIONS } from "../objects/callbackRegisterFunctions";
11
+ import { PostAmbushFinished } from "./callbacks/PostAmbushFinished";
12
+ import { PostAmbushStarted } from "./callbacks/PostAmbushStarted";
13
+ import { PostBombExploded } from "./callbacks/PostBombExploded";
14
+ import { PostBombInitLate } from "./callbacks/PostBombInitLate";
15
+ import { PostBoneSwing } from "./callbacks/PostBoneSwing";
16
+ import { PostCollectibleEmpty } from "./callbacks/PostCollectibleEmpty";
17
+ import { PostCollectibleInitFirst } from "./callbacks/PostCollectibleInitFirst";
18
+ import { PostCursedTeleport } from "./callbacks/PostCursedTeleport";
19
+ import { PostKnifeInitLate } from "./callbacks/PostKnifeInitLate";
20
+ import { PostNewRoomEarly } from "./callbacks/PostNewRoomEarly";
21
+ import { PostPitRender } from "./callbacks/PostPitRender";
22
+ import { PostRoomClearChanged } from "./callbacks/PostRoomClearChanged";
23
+ import { PostSpikesRender } from "./callbacks/PostSpikesRender";
24
+ import { CustomCallback } from "./private/CustomCallback";
7
25
 
8
26
  /**
9
27
  * `isaacscript-common` has many custom callbacks that you can use in your mods. Instead of
@@ -19,7 +37,7 @@ export class ModUpgraded implements Mod {
19
37
 
20
38
  /**
21
39
  * The vanilla mod object stores the name of the mod for some reason. (It is never used or
22
- * referenced.
40
+ * referenced. (We match the casing of the vanilla variable.)
23
41
  */
24
42
  Name: string;
25
43
 
@@ -28,16 +46,40 @@ export class ModUpgraded implements Mod {
28
46
  // ----------------
29
47
 
30
48
  /** We store a copy of the original mod object so that we can re-implement its functions. */
31
- Mod: Mod;
32
-
33
- Debug: boolean;
34
- TimeThreshold: float | undefined;
49
+ private mod: Mod;
50
+
51
+ private debug: boolean;
52
+ private timeThreshold: float | undefined;
53
+
54
+ private callbacks: {
55
+ readonly [key in ModCallbackCustom2]: CustomCallback<key>;
56
+ } = {
57
+ [ModCallbackCustom2.POST_AMBUSH_FINISHED]: new PostAmbushFinished(),
58
+ [ModCallbackCustom2.POST_AMBUSH_STARTED]: new PostAmbushStarted(),
59
+ [ModCallbackCustom2.POST_BOMB_EXPLODED]: new PostBombExploded(),
60
+ [ModCallbackCustom2.POST_BOMB_INIT_LATE]: new PostBombInitLate(),
61
+ [ModCallbackCustom2.POST_BONE_SWING]: new PostBoneSwing(),
62
+ [ModCallbackCustom2.POST_COLLECTIBLE_EMPTY]: new PostCollectibleEmpty(),
63
+ [ModCallbackCustom2.POST_COLLECTIBLE_INIT_FIRST]:
64
+ new PostCollectibleInitFirst(),
65
+ [ModCallbackCustom2.POST_CURSED_TELEPORT]: new PostCursedTeleport(),
66
+
67
+ [ModCallbackCustom2.POST_KNIFE_INIT_LATE]: new PostKnifeInitLate(),
68
+ [ModCallbackCustom2.POST_NEW_ROOM_EARLY]: new PostNewRoomEarly(),
69
+ [ModCallbackCustom2.POST_PIT_RENDER]: new PostPitRender(),
70
+ [ModCallbackCustom2.POST_ROOM_CLEAR_CHANGED]: new PostRoomClearChanged(),
71
+ [ModCallbackCustom2.POST_SPIKES_RENDER]: new PostSpikesRender(),
72
+ };
73
+
74
+ // -----------
75
+ // Constructor
76
+ // -----------
35
77
 
36
78
  constructor(mod: Mod, debug: boolean, timeThreshold?: float) {
37
79
  this.Name = mod.Name;
38
- this.Mod = mod;
39
- this.Debug = debug;
40
- this.TimeThreshold = timeThreshold;
80
+ this.mod = mod;
81
+ this.debug = debug;
82
+ this.timeThreshold = timeThreshold;
41
83
  }
42
84
 
43
85
  // ---------------
@@ -48,7 +90,7 @@ export class ModUpgraded implements Mod {
48
90
  modCallback: T,
49
91
  ...args: AddCallbackParameters[T]
50
92
  ): void {
51
- if (this.Debug) {
93
+ if (this.debug) {
52
94
  const callback = args[0];
53
95
  const optionalArg = args[1];
54
96
 
@@ -60,42 +102,49 @@ export class ModUpgraded implements Mod {
60
102
  : `${parentFunctionDescription} - ${callbackName}`;
61
103
 
62
104
  /**
63
- * We don't use the "log" helper function since it will always show the same "unknown" prefix.
105
+ * We don't use the "log" helper function here since it will always show the same "unknown"
106
+ * prefix.
64
107
  */
65
- const callbackWithLogger = (...callbackArgs: unknown[]) => {
108
+ const callbackWithLogger: typeof callback = (
109
+ ...callbackArgs: Parameters<typeof callback>
110
+ ) => {
66
111
  const startTime = getTime();
67
112
  Isaac.DebugString(`${signature} - START`);
68
113
 
69
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
70
- // @ts-expect-error
71
- callback(...callbackArgs);
114
+ // @ts-expect-error The compiler is not smart enough to know that the callback args should
115
+ // match the callback.
116
+ const returnValue = callback(...callbackArgs);
72
117
 
73
118
  const endTime = getTime();
74
119
  const elapsedTime = endTime - startTime;
75
120
  if (
76
- this.TimeThreshold === undefined ||
77
- this.TimeThreshold <= elapsedTime
121
+ this.timeThreshold === undefined ||
122
+ this.timeThreshold <= elapsedTime
78
123
  ) {
79
124
  Isaac.DebugString(`${signature} - END - time: ${elapsedTime}`);
80
125
  } else {
81
126
  Isaac.DebugString(`${signature} - END`);
82
127
  }
128
+
129
+ return returnValue;
83
130
  };
84
131
 
85
- // eslint-disable-next-line @typescript-eslint/ban-ts-comment
86
- // @ts-expect-error
87
- this.Mod.AddCallback(modCallback, callbackWithLogger, optionalArg);
132
+ const newArgs = [
133
+ callbackWithLogger,
134
+ optionalArg,
135
+ ] as unknown as AddCallbackParameters[T];
136
+ this.mod.AddCallback(modCallback, ...newArgs);
88
137
  } else {
89
- this.Mod.AddCallback(modCallback, ...args);
138
+ this.mod.AddCallback(modCallback, ...args);
90
139
  }
91
140
  }
92
141
 
93
142
  HasData(): boolean {
94
- return this.Mod.HasData();
143
+ return this.mod.HasData();
95
144
  }
96
145
 
97
146
  LoadData(): string {
98
- return this.Mod.LoadData();
147
+ return this.mod.LoadData();
99
148
  }
100
149
 
101
150
  /**
@@ -106,15 +155,15 @@ export class ModUpgraded implements Mod {
106
155
  modCallback: T,
107
156
  callback: AddCallbackParameters[T][0],
108
157
  ): void {
109
- this.Mod.RemoveCallback(modCallback, callback);
158
+ this.mod.RemoveCallback(modCallback, callback);
110
159
  }
111
160
 
112
161
  RemoveData(): void {
113
- this.Mod.RemoveData();
162
+ this.mod.RemoveData();
114
163
  }
115
164
 
116
165
  SaveData(data: string): void {
117
- this.Mod.SaveData(data);
166
+ this.mod.SaveData(data);
118
167
  }
119
168
 
120
169
  // --------------
@@ -131,6 +180,47 @@ export class ModUpgraded implements Mod {
131
180
  callbackRegisterFunction(...args);
132
181
  }
133
182
 
183
+ AddCallbackCustom2<T extends ModCallbackCustom2>(
184
+ modCallbackCustom: T,
185
+ ...args: AddCallbackParametersCustom2[T]
186
+ ): void {
187
+ const callback = this.callbacks[modCallbackCustom];
188
+ callback.add(...args);
189
+
190
+ if (callback.initialized) {
191
+ return;
192
+ }
193
+ callback.initialized = true;
194
+
195
+ if (callback.otherCallbacksUsed !== undefined) {
196
+ for (const callbackTuple of callback.otherCallbacksUsed) {
197
+ const [modCallback, callbackArgs] = callbackTuple;
198
+ this.AddCallback(modCallback, ...callbackArgs);
199
+ }
200
+ }
201
+
202
+ if (callback.otherCustomCallbacksUsed !== undefined) {
203
+ for (const callbackTuple of callback.otherCustomCallbacksUsed) {
204
+ const [modCallback, callbackArgs] = callbackTuple;
205
+ this.AddCallbackCustom(modCallback, ...callbackArgs);
206
+ }
207
+ }
208
+
209
+ if (callback.v !== undefined) {
210
+ const callbackName = getTSTLClassName(callback);
211
+ if (callbackName === undefined) {
212
+ error(
213
+ `Failed to get the name of the callback: ModCallbackCustom.${ModCallbackCustom2[modCallbackCustom]} (${modCallbackCustom})`,
214
+ );
215
+ }
216
+ saveDataManager(callbackName, callback.v);
217
+ }
218
+
219
+ /*
220
+ if (callback.feature !== undefined) {}
221
+ */
222
+ }
223
+
134
224
  /**
135
225
  * This method does not care about the tertiary argument. Regardless of the conditions of how you
136
226
  * registered the callback, it will be removed.
@@ -139,6 +229,7 @@ export class ModUpgraded implements Mod {
139
229
  modCallback: T,
140
230
  callback: AddCallbackParametersCustom[T][0],
141
231
  ): void {
142
- print(this, modCallback, callback); // TODO
232
+ // TODO
233
+ print(this, modCallback, callback);
143
234
  }
144
235
  }
@@ -0,0 +1,39 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { game } from "../../core/cachedClasses";
3
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
4
+ import { getAmbushType } from "../../functions/ambush";
5
+ import { CustomCallbackAmbush } from "./validation/CustomCallbackAmbush";
6
+
7
+ export class PostAmbushFinished extends CustomCallbackAmbush<ModCallbackCustom2.POST_AMBUSH_FINISHED> {
8
+ override v = {
9
+ room: {
10
+ ambushDone: false,
11
+ },
12
+ };
13
+
14
+ constructor() {
15
+ super();
16
+
17
+ this.otherCallbacksUsed = [
18
+ [ModCallback.POST_UPDATE, [this.postUpdate]], // 1
19
+ ];
20
+ }
21
+
22
+ postUpdate = (): void => {
23
+ if (this.v.room.ambushDone) {
24
+ return;
25
+ }
26
+
27
+ const room = game.GetRoom();
28
+ const ambushDone = room.IsAmbushDone();
29
+ if (!ambushDone) {
30
+ return;
31
+ }
32
+ this.v.room.ambushDone = true;
33
+
34
+ const ambushType = getAmbushType();
35
+ if (ambushType !== undefined) {
36
+ this.fire(ambushType);
37
+ }
38
+ };
39
+ }
@@ -0,0 +1,39 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { game } from "../../core/cachedClasses";
3
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
4
+ import { getAmbushType } from "../../functions/ambush";
5
+ import { CustomCallbackAmbush } from "./validation/CustomCallbackAmbush";
6
+
7
+ export class PostAmbushStarted extends CustomCallbackAmbush<ModCallbackCustom2.POST_AMBUSH_STARTED> {
8
+ override v = {
9
+ room: {
10
+ ambushActive: false,
11
+ },
12
+ };
13
+
14
+ constructor() {
15
+ super();
16
+
17
+ this.otherCallbacksUsed = [
18
+ [ModCallback.POST_UPDATE, [this.postUpdate]], // 1
19
+ ];
20
+ }
21
+
22
+ postUpdate = (): void => {
23
+ if (this.v.room.ambushActive) {
24
+ return;
25
+ }
26
+
27
+ const room = game.GetRoom();
28
+ const ambushActive = room.IsAmbushActive();
29
+ if (!ambushActive) {
30
+ return;
31
+ }
32
+ this.v.room.ambushActive = true;
33
+
34
+ const ambushType = getAmbushType();
35
+ if (ambushType !== undefined) {
36
+ this.fire(ambushType);
37
+ }
38
+ };
39
+ }
@@ -0,0 +1,21 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { BOMB_EXPLODE_FRAME } from "../../core/constants";
3
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
4
+ import { CustomCallbackBomb } from "./validation/CustomCallbackBomb";
5
+
6
+ export class PostBombExploded extends CustomCallbackBomb<ModCallbackCustom2.POST_BOMB_EXPLODED> {
7
+ constructor() {
8
+ super();
9
+
10
+ this.otherCallbacksUsed = [
11
+ [ModCallback.POST_BOMB_UPDATE, [this.postBombUpdate]], // 58
12
+ ];
13
+ }
14
+
15
+ // ModCallback.POST_BOMB_UPDATE (58)
16
+ postBombUpdate = (bomb: EntityBomb): void => {
17
+ if (bomb.FrameCount === BOMB_EXPLODE_FRAME) {
18
+ this.fire(bomb);
19
+ }
20
+ };
21
+ }
@@ -0,0 +1,28 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
3
+ import { CustomCallbackBomb } from "./validation/CustomCallbackBomb";
4
+
5
+ export class PostBombInitLate extends CustomCallbackBomb<ModCallbackCustom2.POST_BOMB_INIT_LATE> {
6
+ override v = {
7
+ room: {
8
+ firedSet: new Set<PtrHash>(),
9
+ },
10
+ };
11
+
12
+ constructor() {
13
+ super();
14
+
15
+ this.otherCallbacksUsed = [
16
+ [ModCallback.POST_BOMB_UPDATE, [this.postBombUpdate]], // 58
17
+ ];
18
+ }
19
+
20
+ // ModCallback.POST_BOMB_UPDATE (58)
21
+ postBombUpdate = (bomb: EntityBomb): void => {
22
+ const ptrHash = GetPtrHash(bomb);
23
+ if (!this.v.room.firedSet.has(ptrHash)) {
24
+ this.v.room.firedSet.add(ptrHash);
25
+ this.fire(bomb);
26
+ }
27
+ };
28
+ }
@@ -0,0 +1,58 @@
1
+ import { KnifeVariant, ModCallback } from "isaac-typescript-definitions";
2
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
3
+ import { CustomCallback } from "../private/CustomCallback";
4
+
5
+ const BONE_SWING_ANIMATIONS: ReadonlySet<string> = new Set([
6
+ "Swing",
7
+ "Swing2",
8
+ "Spin",
9
+ ]);
10
+
11
+ export class PostBoneSwing extends CustomCallback<ModCallbackCustom2.POST_BONE_SWING> {
12
+ override v = {
13
+ room: {
14
+ boneClubAnimations: new Map<PtrHash, string>(),
15
+ },
16
+ };
17
+
18
+ constructor() {
19
+ super();
20
+
21
+ this.otherCallbacksUsed = [
22
+ [ModCallback.POST_KNIFE_RENDER, [this.postKnifeRender]], // 52
23
+ ];
24
+ }
25
+
26
+ // ModCallback.POST_KNIFE_RENDER (52)
27
+ postKnifeRender = (knife: EntityKnife): void => {
28
+ // The tertiary argument of the `POST_KNIFE_RENDER` callback takes sub-types instead of knife
29
+ // variants.
30
+ if (knife.Variant === KnifeVariant.BONE_CLUB) {
31
+ this.postKnifeRenderBoneClub(knife);
32
+ }
33
+ };
34
+
35
+ // ModCallback.POST_KNIFE_RENDER (52)
36
+ // KnifeVariant.BONE_CLUB (1)
37
+ postKnifeRenderBoneClub(knife: EntityKnife): void {
38
+ const sprite = knife.GetSprite();
39
+ const animation = sprite.GetAnimation();
40
+ const ptrHash = GetPtrHash(knife);
41
+
42
+ const animationOnLastFrame = this.v.room.boneClubAnimations.get(ptrHash);
43
+ this.v.room.boneClubAnimations.set(ptrHash, animation);
44
+
45
+ if (
46
+ animationOnLastFrame !== undefined &&
47
+ animation !== animationOnLastFrame
48
+ ) {
49
+ this.boneClubAnimationChanged(knife, animation);
50
+ }
51
+ }
52
+
53
+ boneClubAnimationChanged(knife: EntityKnife, animation: string): void {
54
+ if (BONE_SWING_ANIMATIONS.has(animation)) {
55
+ this.fire(knife);
56
+ }
57
+ }
58
+ }
@@ -0,0 +1,72 @@
1
+ import {
2
+ CollectibleType,
3
+ ModCallback,
4
+ PickupVariant,
5
+ } from "isaac-typescript-definitions";
6
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
7
+ import {
8
+ CustomCallback,
9
+ FireArgs,
10
+ OptionalArgs,
11
+ } from "../private/CustomCallback";
12
+
13
+ type T = ModCallbackCustom2.POST_COLLECTIBLE_EMPTY;
14
+
15
+ export class PostCollectibleEmpty extends CustomCallback<T> {
16
+ override v = {
17
+ room: {
18
+ collectibleTypeMap: new Map<PtrHash, CollectibleType>(),
19
+ },
20
+ };
21
+
22
+ constructor() {
23
+ super();
24
+
25
+ this.otherCallbacksUsed = [
26
+ [
27
+ ModCallback.POST_PICKUP_UPDATE,
28
+ [this.postPickupUpdateCollectible, PickupVariant.COLLECTIBLE],
29
+ ], // 35
30
+ ];
31
+ }
32
+
33
+ // eslint-disable-next-line class-methods-use-this
34
+ override shouldFire(
35
+ fireArgs: FireArgs<T>,
36
+ optionalArgs: OptionalArgs<T>,
37
+ ): boolean {
38
+ const [callbackCollectibleType] = optionalArgs;
39
+ if (callbackCollectibleType === undefined) {
40
+ return true;
41
+ }
42
+
43
+ const [_collectible, oldCollectibleType] = fireArgs;
44
+ return oldCollectibleType === callbackCollectibleType;
45
+ }
46
+
47
+ // ModCallback.POST_PICKUP_UPDATE (35)
48
+ // PickupVariant.COLLECTIBLE (100)
49
+ postPickupUpdateCollectible = (pickup: EntityPickup): void => {
50
+ const collectible = pickup as EntityPickupCollectible;
51
+
52
+ const ptrHash = GetPtrHash(collectible);
53
+ let oldCollectibleType = this.v.room.collectibleTypeMap.get(ptrHash);
54
+ if (oldCollectibleType === undefined) {
55
+ oldCollectibleType = collectible.SubType;
56
+ }
57
+ this.v.room.collectibleTypeMap.set(ptrHash, collectible.SubType);
58
+
59
+ if (oldCollectibleType !== collectible.SubType) {
60
+ this.collectibleTypeChanged(collectible, oldCollectibleType);
61
+ }
62
+ };
63
+
64
+ collectibleTypeChanged(
65
+ collectible: EntityPickupCollectible,
66
+ oldCollectibleType: CollectibleType,
67
+ ): void {
68
+ if (collectible.SubType === CollectibleType.NULL) {
69
+ this.fire(collectible, oldCollectibleType);
70
+ }
71
+ }
72
+ }
@@ -0,0 +1,37 @@
1
+ import { ModCallback, PickupVariant } from "isaac-typescript-definitions";
2
+ import { ModCallbackCustom2 } from "../../enums/ModCallbackCustom2";
3
+ import { getCollectibleIndex } from "../../functions/collectibles";
4
+ import { CollectibleIndex } from "../../types/CollectibleIndex";
5
+ import { CustomCallbackCollectible } from "./validation/CustomCallbackCollectible";
6
+
7
+ export class PostCollectibleInitFirst extends CustomCallbackCollectible<ModCallbackCustom2.POST_COLLECTIBLE_INIT_FIRST> {
8
+ override v = {
9
+ run: {
10
+ seenCollectibles: new Set<CollectibleIndex>(),
11
+ },
12
+ };
13
+
14
+ constructor() {
15
+ super();
16
+
17
+ this.otherCallbacksUsed = [
18
+ [
19
+ ModCallback.POST_PICKUP_INIT,
20
+ [this.postPickupInitCollectible, PickupVariant.COLLECTIBLE],
21
+ ], // 34
22
+ ];
23
+ }
24
+
25
+ // ModCallback.POST_PICKUP_INIT (34)
26
+ // PickupVariant.COLLECTIBLE (100)
27
+ postPickupInitCollectible = (pickup: EntityPickup): void => {
28
+ const collectible = pickup as EntityPickupCollectible;
29
+ const collectibleIndex = getCollectibleIndex(collectible);
30
+ if (this.v.run.seenCollectibles.has(collectibleIndex)) {
31
+ return;
32
+ }
33
+
34
+ this.v.run.seenCollectibles.add(collectibleIndex);
35
+ this.fire(collectible);
36
+ };
37
+ }