isaacscript-common 3.17.0 → 4.0.2

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 (425) hide show
  1. package/cachedClasses.ts +39 -0
  2. package/callbacks/customRevive.lua +2 -1
  3. package/callbacks/customRevive.ts +215 -0
  4. package/callbacks/itemPickup.ts +101 -0
  5. package/callbacks/postAmbush.ts +73 -0
  6. package/callbacks/postBombExploded.ts +26 -0
  7. package/callbacks/postBombInitLate.ts +36 -0
  8. package/callbacks/postBoneSwing.ts +64 -0
  9. package/callbacks/postCollectibleInitFirst.ts +40 -0
  10. package/callbacks/postCursedTeleport.lua +2 -1
  11. package/callbacks/postCursedTeleport.ts +185 -0
  12. package/callbacks/postCustomDoorEnter.lua +0 -7
  13. package/callbacks/postCustomDoorEnter.ts +292 -0
  14. package/callbacks/postDiceRoomActivated.ts +60 -0
  15. package/callbacks/postDoorRender.ts +26 -0
  16. package/callbacks/postDoorUpdate.ts +26 -0
  17. package/callbacks/postEffectInitLate.ts +36 -0
  18. package/callbacks/postEffectStateChanged.ts +43 -0
  19. package/callbacks/postEsauJr.lua +2 -1
  20. package/callbacks/postEsauJr.ts +109 -0
  21. package/callbacks/postFamiliarInitLate.ts +36 -0
  22. package/callbacks/postFamiliarStateChanged.ts +43 -0
  23. package/callbacks/postFlip.lua +4 -3
  24. package/callbacks/postFlip.ts +90 -0
  25. package/callbacks/postGreedModeWave.ts +41 -0
  26. package/callbacks/postGridEntity.ts +164 -0
  27. package/callbacks/postGridEntityCollision.ts +69 -0
  28. package/callbacks/postGridEntityRender.ts +26 -0
  29. package/callbacks/postHolyMantleRemoved.ts +55 -0
  30. package/callbacks/postItemDischarged.lua +4 -3
  31. package/callbacks/postItemDischarged.ts +154 -0
  32. package/callbacks/postKnifeInitLate.ts +36 -0
  33. package/callbacks/postLaserInitLate.ts +36 -0
  34. package/callbacks/postNPCInitLate.ts +36 -0
  35. package/callbacks/postNPCStateChanged.ts +42 -0
  36. package/callbacks/postNewRoomEarly.lua +2 -1
  37. package/callbacks/postNewRoomEarly.ts +96 -0
  38. package/callbacks/postPickupCollect.ts +48 -0
  39. package/callbacks/postPickupInitFirst.ts +70 -0
  40. package/callbacks/postPickupInitLate.ts +36 -0
  41. package/callbacks/postPickupStateChanged.ts +43 -0
  42. package/callbacks/postPitRender.ts +26 -0
  43. package/callbacks/postPitUpdate.ts +26 -0
  44. package/callbacks/postPlayerChangeHealth.ts +62 -0
  45. package/callbacks/postPlayerChangeType.ts +56 -0
  46. package/callbacks/postPlayerCollectible.ts +113 -0
  47. package/callbacks/postPlayerFatalDamage.ts +141 -0
  48. package/callbacks/postPlayerInitLate.ts +37 -0
  49. package/callbacks/postPlayerReordered.ts +142 -0
  50. package/callbacks/postPoopRender.ts +26 -0
  51. package/callbacks/postPoopUpdate.ts +26 -0
  52. package/callbacks/postPressurePlateRender.ts +26 -0
  53. package/callbacks/postPressurePlateUpdate.ts +26 -0
  54. package/callbacks/postProjectileInitLate.ts +36 -0
  55. package/callbacks/postPurchase.ts +64 -0
  56. package/callbacks/postRockRender.ts +26 -0
  57. package/callbacks/postRockUpdate.ts +26 -0
  58. package/callbacks/postRoomClearChanged.ts +57 -0
  59. package/callbacks/postSacrifice.lua +3 -2
  60. package/callbacks/postSacrifice.ts +64 -0
  61. package/callbacks/postSlotDestroyed.ts +92 -0
  62. package/callbacks/postSlotInitUpdate.ts +68 -0
  63. package/callbacks/postSlotRender.ts +69 -0
  64. package/callbacks/postSpikesRender.ts +26 -0
  65. package/callbacks/postSpikesUpdate.ts +26 -0
  66. package/callbacks/postTNTRender.ts +26 -0
  67. package/callbacks/postTNTUpdate.ts +26 -0
  68. package/callbacks/postTearInitLate.ts +36 -0
  69. package/callbacks/postTearInitVeryLate.ts +41 -0
  70. package/callbacks/postTransformation.ts +59 -0
  71. package/callbacks/postTrinketBreak.lua +3 -2
  72. package/callbacks/postTrinketBreak.ts +112 -0
  73. package/callbacks/preBerserkDeath.ts +49 -0
  74. package/callbacks/preNewLevel.ts +55 -0
  75. package/callbacks/reorderedCallbacks.lua +1 -0
  76. package/callbacks/reorderedCallbacks.ts +168 -0
  77. package/callbacks/subscriptions/postAmbushFinished.ts +32 -0
  78. package/callbacks/subscriptions/postAmbushStarted.ts +32 -0
  79. package/callbacks/subscriptions/postBombInitLate.ts +32 -0
  80. package/callbacks/subscriptions/postBoneExploded.ts +32 -0
  81. package/callbacks/subscriptions/postBoneSwing.ts +24 -0
  82. package/callbacks/subscriptions/postCollectibleInitFirst.ts +37 -0
  83. package/callbacks/subscriptions/postCursedTeleport.ts +24 -0
  84. package/callbacks/subscriptions/postCustomDoorEnter.ts +45 -0
  85. package/callbacks/subscriptions/postCustomRevive.ts +36 -0
  86. package/callbacks/subscriptions/postDiceRoomActivated.ts +38 -0
  87. package/callbacks/subscriptions/postDoorRender.ts +35 -0
  88. package/callbacks/subscriptions/postDoorUpdate.ts +35 -0
  89. package/callbacks/subscriptions/postEffectInitLate.ts +32 -0
  90. package/callbacks/subscriptions/postEffectStateChanged.ts +40 -0
  91. package/callbacks/subscriptions/postEsauJr.ts +24 -0
  92. package/callbacks/subscriptions/postFamiliarInitLate.ts +32 -0
  93. package/callbacks/subscriptions/postFamiliarStateChanged.ts +40 -0
  94. package/callbacks/subscriptions/postFirstEsauJr.ts +24 -0
  95. package/callbacks/subscriptions/postFirstFlip.ts +24 -0
  96. package/callbacks/subscriptions/postFlip.ts +22 -0
  97. package/callbacks/subscriptions/postGameStartedReordered.ts +24 -0
  98. package/callbacks/subscriptions/postGreedModeWave.ts +24 -0
  99. package/callbacks/subscriptions/postGridEntityBroken.ts +51 -0
  100. package/callbacks/subscriptions/postGridEntityCollision.ts +54 -0
  101. package/callbacks/subscriptions/postGridEntityInit.ts +51 -0
  102. package/callbacks/subscriptions/postGridEntityRemove.ts +52 -0
  103. package/callbacks/subscriptions/postGridEntityRender.ts +51 -0
  104. package/callbacks/subscriptions/postGridEntityStateChanged.ts +55 -0
  105. package/callbacks/subscriptions/postGridEntityUpdate.ts +51 -0
  106. package/callbacks/subscriptions/postHolyMantleRemoved.ts +48 -0
  107. package/callbacks/subscriptions/postItemDischarged.ts +43 -0
  108. package/callbacks/subscriptions/postItemPickup.ts +64 -0
  109. package/callbacks/subscriptions/postKnifeInitLate.ts +32 -0
  110. package/callbacks/subscriptions/postLaserInitLate.ts +32 -0
  111. package/callbacks/subscriptions/postNPCInitLate.ts +32 -0
  112. package/callbacks/subscriptions/postNPCStateChanged.ts +42 -0
  113. package/callbacks/subscriptions/postNewLevelReordered.ts +22 -0
  114. package/callbacks/subscriptions/postNewRoomEarly.ts +22 -0
  115. package/callbacks/subscriptions/postNewRoomReordered.ts +22 -0
  116. package/callbacks/subscriptions/postPEffectUpdateReordered.ts +40 -0
  117. package/callbacks/subscriptions/postPickupCollect.ts +35 -0
  118. package/callbacks/subscriptions/postPickupInitFirst.ts +32 -0
  119. package/callbacks/subscriptions/postPickupInitLate.ts +32 -0
  120. package/callbacks/subscriptions/postPickupStateChanged.ts +40 -0
  121. package/callbacks/subscriptions/postPitRender.ts +35 -0
  122. package/callbacks/subscriptions/postPitUpdate.ts +35 -0
  123. package/callbacks/subscriptions/postPlayerChangeHealth.ts +49 -0
  124. package/callbacks/subscriptions/postPlayerChangeType.ts +40 -0
  125. package/callbacks/subscriptions/postPlayerCollectibleAdded.d.ts +2 -3
  126. package/callbacks/subscriptions/postPlayerCollectibleAdded.lua +2 -7
  127. package/callbacks/subscriptions/postPlayerCollectibleAdded.ts +38 -0
  128. package/callbacks/subscriptions/postPlayerCollectibleRemoved.d.ts +2 -3
  129. package/callbacks/subscriptions/postPlayerCollectibleRemoved.lua +2 -7
  130. package/callbacks/subscriptions/postPlayerCollectibleRemoved.ts +38 -0
  131. package/callbacks/subscriptions/postPlayerFatalDamage.d.ts +1 -1
  132. package/callbacks/subscriptions/postPlayerFatalDamage.ts +68 -0
  133. package/callbacks/subscriptions/postPlayerInitLate.ts +40 -0
  134. package/callbacks/subscriptions/postPlayerInitReordered.ts +40 -0
  135. package/callbacks/subscriptions/postPlayerRenderReordered.ts +40 -0
  136. package/callbacks/subscriptions/postPlayerUpdateReordered.ts +40 -0
  137. package/callbacks/subscriptions/postPoopRender.ts +35 -0
  138. package/callbacks/subscriptions/postPoopUpdate.ts +35 -0
  139. package/callbacks/subscriptions/postPressurePlateRender.ts +37 -0
  140. package/callbacks/subscriptions/postPressurePlateUpdate.ts +37 -0
  141. package/callbacks/subscriptions/postProjectileInitLate.ts +35 -0
  142. package/callbacks/subscriptions/postPurchase.ts +31 -0
  143. package/callbacks/subscriptions/postRockRender.ts +35 -0
  144. package/callbacks/subscriptions/postRockUpdate.ts +35 -0
  145. package/callbacks/subscriptions/postRoomClearChanged.ts +30 -0
  146. package/callbacks/subscriptions/postSacrifice.ts +43 -0
  147. package/callbacks/subscriptions/postSlotAnimationChanged.ts +40 -0
  148. package/callbacks/subscriptions/postSlotDestroyed.ts +55 -0
  149. package/callbacks/subscriptions/postSlotInit.ts +32 -0
  150. package/callbacks/subscriptions/postSlotRender.ts +32 -0
  151. package/callbacks/subscriptions/postSlotUpdate.ts +32 -0
  152. package/callbacks/subscriptions/postSpikesRender.ts +35 -0
  153. package/callbacks/subscriptions/postSpikesUpdate.ts +35 -0
  154. package/callbacks/subscriptions/postTNTRender.ts +35 -0
  155. package/callbacks/subscriptions/postTNTUpdate.ts +35 -0
  156. package/callbacks/subscriptions/postTearInitLate.ts +32 -0
  157. package/callbacks/subscriptions/postTearInitVeryLate.ts +32 -0
  158. package/callbacks/subscriptions/postTransformation.ts +40 -0
  159. package/callbacks/subscriptions/postTrinketBreak.ts +38 -0
  160. package/callbacks/subscriptions/preBerserkDeath.d.ts +1 -1
  161. package/callbacks/subscriptions/preBerserkDeath.ts +42 -0
  162. package/callbacks/subscriptions/preCustomRevive.d.ts +1 -1
  163. package/callbacks/subscriptions/preCustomRevive.ts +46 -0
  164. package/callbacks/subscriptions/preItemPickup.ts +64 -0
  165. package/callbacks/subscriptions/preNewLevel.ts +24 -0
  166. package/classes/DefaultMap.ts +174 -0
  167. package/classes/ModUpgraded.d.ts +8 -4
  168. package/classes/ModUpgraded.lua +5 -8
  169. package/classes/ModUpgraded.ts +84 -0
  170. package/constants.ts +162 -0
  171. package/constantsFirstLast.ts +217 -0
  172. package/enums/AmbushType.ts +4 -0
  173. package/enums/HealthType.ts +16 -0
  174. package/enums/ModCallbackCustom.d.ts +20 -18
  175. package/enums/ModCallbackCustom.ts +1278 -0
  176. package/enums/PocketItemType.ts +8 -0
  177. package/enums/SerializationType.ts +5 -0
  178. package/enums/SlotDestructionType.ts +4 -0
  179. package/enums/private/CopyableIsaacAPIClassType.ts +7 -0
  180. package/enums/private/SaveDataKey.ts +14 -0
  181. package/enums/private/SerializationBrand.ts +42 -0
  182. package/features/characterHealthConversion.lua +2 -9
  183. package/features/characterHealthConversion.ts +111 -0
  184. package/features/characterStats.ts +61 -0
  185. package/features/debugDisplay/debugDisplay.ts +221 -0
  186. package/features/debugDisplay/exports.ts +368 -0
  187. package/features/debugDisplay/v.ts +65 -0
  188. package/features/deployJSONRoom.ts +743 -0
  189. package/features/disableInputs.ts +193 -0
  190. package/features/disableSound.ts +77 -0
  191. package/features/extraConsoleCommands/commandsDisplay.ts +290 -0
  192. package/features/extraConsoleCommands/commandsSubroutines.lua +1 -1
  193. package/features/extraConsoleCommands/commandsSubroutines.ts +139 -0
  194. package/features/extraConsoleCommands/init.ts +334 -0
  195. package/features/extraConsoleCommands/listCommands.ts +1299 -0
  196. package/features/extraConsoleCommands/v.ts +14 -0
  197. package/features/fadeInRemover.ts +60 -0
  198. package/features/fastReset.ts +75 -0
  199. package/features/forgottenSwitch.ts +50 -0
  200. package/features/getCollectibleItemPoolType.ts +66 -0
  201. package/features/persistentEntities.ts +183 -0
  202. package/features/playerInventory.lua +1 -0
  203. package/features/playerInventory.ts +135 -0
  204. package/features/ponyDetection.ts +74 -0
  205. package/features/preventCollectibleRotation.ts +115 -0
  206. package/features/runInNFrames.ts +148 -0
  207. package/features/saveDataManager/constants.ts +4 -0
  208. package/features/saveDataManager/exports.ts +229 -0
  209. package/features/saveDataManager/load.ts +99 -0
  210. package/features/saveDataManager/main.ts +195 -0
  211. package/features/saveDataManager/maps.ts +13 -0
  212. package/features/saveDataManager/merge.ts +194 -0
  213. package/features/saveDataManager/save.ts +74 -0
  214. package/features/saveDataManager/serializationBrand.ts +16 -0
  215. package/features/sirenHelpers.ts +129 -0
  216. package/features/taintedLazarusPlayers.ts +113 -0
  217. package/featuresInitialized.ts +20 -0
  218. package/functions/ambush.ts +47 -0
  219. package/functions/array.ts +410 -0
  220. package/functions/benchmark.ts +36 -0
  221. package/functions/bitwise.ts +24 -0
  222. package/functions/bombs.ts +12 -0
  223. package/functions/boss.ts +227 -0
  224. package/functions/cacheFlag.ts +12 -0
  225. package/functions/cards.lua +1 -1
  226. package/functions/cards.ts +271 -0
  227. package/functions/challenges.ts +13 -0
  228. package/functions/character.ts +126 -0
  229. package/functions/charge.ts +237 -0
  230. package/functions/chargeBar.ts +67 -0
  231. package/functions/collectibleCacheFlag.ts +90 -0
  232. package/functions/collectibleSet.ts +56 -0
  233. package/functions/collectibleTag.ts +89 -0
  234. package/functions/collectibles.ts +659 -0
  235. package/functions/color.d.ts +1 -1
  236. package/functions/color.lua +0 -7
  237. package/functions/color.ts +128 -0
  238. package/functions/debug.lua +2 -2
  239. package/functions/debug.ts +68 -0
  240. package/functions/deepCopy.lua +46 -51
  241. package/functions/deepCopy.ts +535 -0
  242. package/functions/deepCopyTests.ts +386 -0
  243. package/functions/direction.ts +49 -0
  244. package/functions/doors.lua +1 -2
  245. package/functions/doors.ts +347 -0
  246. package/functions/easing.ts +182 -0
  247. package/functions/eden.ts +47 -0
  248. package/functions/effects.ts +20 -0
  249. package/functions/entity.ts +439 -0
  250. package/functions/entitySpecific.ts +889 -0
  251. package/functions/entityTypes.ts +6 -0
  252. package/functions/enums.ts +146 -0
  253. package/functions/familiars.ts +106 -0
  254. package/functions/flag.ts +165 -0
  255. package/functions/flying.ts +117 -0
  256. package/functions/globals.d.ts +3 -3
  257. package/functions/globals.lua +8 -2
  258. package/functions/globals.ts +242 -0
  259. package/functions/gridEntity.ts +511 -0
  260. package/functions/gridEntitySpecific.ts +112 -0
  261. package/functions/input.ts +139 -0
  262. package/functions/isaacAPIClass.ts +67 -0
  263. package/functions/jsonHelpers.ts +45 -0
  264. package/functions/jsonRoom.ts +100 -0
  265. package/functions/kColor.d.ts +1 -1
  266. package/functions/kColor.lua +0 -7
  267. package/functions/kColor.ts +129 -0
  268. package/functions/language.ts +13 -0
  269. package/functions/level.ts +31 -0
  270. package/functions/log.ts +720 -0
  271. package/functions/map.ts +56 -0
  272. package/functions/math.ts +149 -0
  273. package/functions/mergeTests.ts +288 -0
  274. package/functions/npc.ts +148 -0
  275. package/functions/pickupVariants.ts +60 -0
  276. package/functions/pickups.ts +499 -0
  277. package/functions/pills.lua +1 -1
  278. package/functions/pills.ts +205 -0
  279. package/functions/player.lua +9 -20
  280. package/functions/player.ts +1056 -0
  281. package/functions/playerDataStructures.ts +150 -0
  282. package/functions/playerHealth.lua +28 -39
  283. package/functions/playerHealth.ts +382 -0
  284. package/functions/playerIndex.ts +195 -0
  285. package/functions/pocketItems.ts +149 -0
  286. package/functions/positionVelocity.ts +188 -0
  287. package/functions/random.ts +77 -0
  288. package/functions/revive.ts +201 -0
  289. package/functions/rng.d.ts +1 -1
  290. package/functions/rng.lua +0 -7
  291. package/functions/rng.ts +172 -0
  292. package/functions/roomData.ts +199 -0
  293. package/functions/roomGrid.ts +109 -0
  294. package/functions/roomShape.ts +80 -0
  295. package/functions/rooms.lua +1 -3
  296. package/functions/rooms.ts +648 -0
  297. package/functions/run.ts +36 -0
  298. package/functions/saveFile.ts +128 -0
  299. package/functions/seeds.ts +19 -0
  300. package/functions/serialization.lua +0 -3
  301. package/functions/serialization.ts +91 -0
  302. package/functions/set.ts +95 -0
  303. package/functions/sound.ts +9 -0
  304. package/functions/spawnCollectible.ts +104 -0
  305. package/functions/sprite.ts +107 -0
  306. package/functions/stage.ts +125 -0
  307. package/functions/string.ts +47 -0
  308. package/functions/table.ts +189 -0
  309. package/functions/tears.ts +32 -0
  310. package/functions/transformations.lua +1 -3
  311. package/functions/transformations.ts +131 -0
  312. package/functions/trinketCacheFlag.ts +60 -0
  313. package/functions/trinketGive.ts +157 -0
  314. package/functions/trinkets.ts +215 -0
  315. package/functions/tstlClass.ts +157 -0
  316. package/functions/types.ts +36 -0
  317. package/functions/ui.ts +138 -0
  318. package/functions/utils.d.ts +0 -37
  319. package/functions/utils.lua +0 -35
  320. package/functions/utils.ts +189 -0
  321. package/functions/vector.d.ts +1 -1
  322. package/functions/vector.lua +0 -7
  323. package/functions/vector.ts +126 -0
  324. package/index.ts +172 -0
  325. package/initCustomCallbacks.ts +132 -0
  326. package/initFeatures.ts +39 -0
  327. package/interfaces/AddCallbackParameterCustom.ts +188 -0
  328. package/interfaces/ChargeBarSprites.ts +12 -0
  329. package/interfaces/JSONDoor.d.ts +4 -4
  330. package/interfaces/JSONDoor.ts +13 -0
  331. package/interfaces/JSONEntity.d.ts +5 -5
  332. package/interfaces/JSONEntity.ts +16 -0
  333. package/interfaces/JSONRoom.d.ts +9 -9
  334. package/interfaces/JSONRoom.ts +36 -0
  335. package/interfaces/JSONRooms.ts +12 -0
  336. package/interfaces/JSONSpawn.d.ts +3 -3
  337. package/interfaces/JSONSpawn.ts +14 -0
  338. package/interfaces/PlayerHealth.ts +16 -0
  339. package/interfaces/PocketItemDescription.ts +9 -0
  340. package/interfaces/SaveData.ts +29 -0
  341. package/interfaces/TrinketSituation.ts +9 -0
  342. package/interfaces/private/TSTLClassMetatable.ts +8 -0
  343. package/maps/PHDPillConversions.ts +21 -0
  344. package/maps/cardMap.ts +209 -0
  345. package/maps/characterMap.ts +87 -0
  346. package/maps/collectibleDescriptionMap.ts +732 -0
  347. package/maps/collectibleNameMap.ts +731 -0
  348. package/maps/defaultPlayerStatMap.ts +17 -0
  349. package/maps/falsePHDPillConversions.ts +35 -0
  350. package/maps/gridEntityTypeToBrokenStateMap.ts +50 -0
  351. package/maps/gridEntityXMLMap.ts +176 -0
  352. package/maps/pillEffectMap.ts +88 -0
  353. package/maps/roomShapeToTopLeftWallGridIndexMap.ts +18 -0
  354. package/maps/roomTypeMap.ts +40 -0
  355. package/maps/trinketDescriptionMap.ts +200 -0
  356. package/maps/trinketNameMap.ts +198 -0
  357. package/objects/LRoomShapeToRectangles.ts +44 -0
  358. package/objects/callbackRegisterFunctions.ts +187 -0
  359. package/objects/cardDescriptions.ts +105 -0
  360. package/objects/cardNames.ts +105 -0
  361. package/objects/cardTypes.ts +104 -0
  362. package/objects/challengeNames.ts +52 -0
  363. package/objects/characterNames.ts +48 -0
  364. package/objects/coinSubTypeToValue.ts +14 -0
  365. package/objects/colors.ts +16 -0
  366. package/objects/directionNames.ts +11 -0
  367. package/objects/directionToDegrees.ts +11 -0
  368. package/objects/directionToVector.ts +12 -0
  369. package/objects/doorSlotFlagToDoorSlot.ts +16 -0
  370. package/objects/doorSlotToDirection.ts +14 -0
  371. package/objects/isaacAPIClassTypeToBrand.ts +11 -0
  372. package/objects/isaacAPIClassTypeToCopyFunction.ts +18 -0
  373. package/objects/languageNames.ts +13 -0
  374. package/objects/oppositeDoorSlots.ts +15 -0
  375. package/objects/pillEffectClasses.ts +63 -0
  376. package/objects/pillEffectNames.ts +57 -0
  377. package/objects/pillEffectTypes.ts +62 -0
  378. package/objects/roomShapeBounds.ts +71 -0
  379. package/objects/roomShapeLayoutSizes.ts +45 -0
  380. package/objects/roomShapeToBottomRightPosition.ts +25 -0
  381. package/objects/roomShapeToDoorSlots.ts +83 -0
  382. package/objects/roomShapeToDoorSlotsToGridIndexDelta.ts +127 -0
  383. package/objects/roomShapeToGridWidth.ts +21 -0
  384. package/objects/roomShapeToTopLeftPosition.ts +26 -0
  385. package/objects/roomShapeVolumes.ts +38 -0
  386. package/objects/roomTypeNames.ts +36 -0
  387. package/objects/serializedIsaacAPIClassTypeToIdentityFunction.ts +14 -0
  388. package/objects/stageTypeToLetter.ts +15 -0
  389. package/objects/transformationNames.d.ts +0 -1
  390. package/objects/transformationNames.lua +0 -1
  391. package/objects/transformationNames.ts +18 -0
  392. package/package.json +2 -2
  393. package/patchErrorFunctions.ts +92 -0
  394. package/sets/LRoomShapesSet.ts +8 -0
  395. package/sets/bossSets.ts +470 -0
  396. package/sets/charactersThatStartWithAnActiveItemSet.ts +16 -0
  397. package/sets/charactersWithBlackHeartFromEternalHeartSet.ts +7 -0
  398. package/sets/charactersWithFreeDevilDealsSet.ts +4 -0
  399. package/sets/charactersWithNoRedHeartsSet.ts +17 -0
  400. package/sets/charactersWithNoSoulHeartsSet.ts +14 -0
  401. package/sets/chestPickupVariantsSet.ts +16 -0
  402. package/sets/familiarsThatShootPlayerTearsSet.ts +13 -0
  403. package/sets/lostStyleCharactersSet.ts +13 -0
  404. package/sets/mineShaftRoomSubTypesSet.ts +10 -0
  405. package/sets/redHeartSubTypesSet.ts +7 -0
  406. package/sets/sinEntityTypesSet.ts +11 -0
  407. package/sets/singleUseActiveCollectibleTypesSet.ts +13 -0
  408. package/sets/storyBossesSet.ts +17 -0
  409. package/types/AnyEntity.ts +12 -0
  410. package/types/AwaitingTextInput.d.ts +2 -0
  411. package/types/CollectibleIndex.d.ts +1 -1
  412. package/types/CollectibleIndex.ts +16 -0
  413. package/types/PickingUpItem.d.ts +3 -3
  414. package/types/PickingUpItem.ts +89 -0
  415. package/types/PlayerIndex.d.ts +1 -1
  416. package/types/PlayerIndex.ts +13 -0
  417. package/types/private/IsaacAPIClass.d.ts +1 -1
  418. package/types/private/IsaacAPIClass.ts +3 -0
  419. package/types/private/SerializedIsaacAPIClass.d.ts +1 -1
  420. package/types/private/SerializedIsaacAPIClass.ts +3 -0
  421. package/types/private/TSTLClass.d.ts +1 -1
  422. package/types/private/TSTLClass.ts +3 -0
  423. package/upgradeMod.d.ts +2 -2
  424. package/upgradeMod.lua +2 -2
  425. package/upgradeMod.ts +55 -0
@@ -0,0 +1,40 @@
1
+ import { PlayerForm } from "isaac-typescript-definitions";
2
+
3
+ export type PostTransformationRegisterParameters = [
4
+ callback: (
5
+ player: EntityPlayer,
6
+ playerForm: PlayerForm,
7
+ hasForm: boolean,
8
+ ) => void,
9
+ playerForm?: PlayerForm,
10
+ ];
11
+
12
+ const subscriptions: PostTransformationRegisterParameters[] = [];
13
+
14
+ /** @internal */
15
+ export function postTransformationHasSubscriptions(): boolean {
16
+ return subscriptions.length > 0;
17
+ }
18
+
19
+ /** @internal */
20
+ export function postTransformationRegister(
21
+ ...args: PostTransformationRegisterParameters
22
+ ): void {
23
+ subscriptions.push(args);
24
+ }
25
+
26
+ /** @internal */
27
+ export function postTransformationFire(
28
+ player: EntityPlayer,
29
+ playerForm: PlayerForm,
30
+ hasForm: boolean,
31
+ ): void {
32
+ for (const [callback, callbackPlayerForm] of subscriptions) {
33
+ // Handle the optional 2nd callback argument.
34
+ if (callbackPlayerForm !== undefined && callbackPlayerForm !== playerForm) {
35
+ continue;
36
+ }
37
+
38
+ callback(player, playerForm, hasForm);
39
+ }
40
+ }
@@ -0,0 +1,38 @@
1
+ import { TrinketType } from "isaac-typescript-definitions";
2
+
3
+ export type PostTrinketBreakRegisterParameters = [
4
+ callback: (player: EntityPlayer, trinketType: TrinketType) => void,
5
+ trinketType?: TrinketType,
6
+ ];
7
+
8
+ const subscriptions: PostTrinketBreakRegisterParameters[] = [];
9
+
10
+ /** @internal */
11
+ export function postTrinketBreakHasSubscriptions(): boolean {
12
+ return subscriptions.length > 0;
13
+ }
14
+
15
+ /** @internal */
16
+ export function postTrinketBreakRegister(
17
+ ...args: PostTrinketBreakRegisterParameters
18
+ ): void {
19
+ subscriptions.push(args);
20
+ }
21
+
22
+ /** @internal */
23
+ export function postTrinketBreakFire(
24
+ player: EntityPlayer,
25
+ trinketType: TrinketType,
26
+ ): void {
27
+ for (const [callback, callbackTrinketType] of subscriptions) {
28
+ // Handle the optional 2nd callback argument.
29
+ if (
30
+ callbackTrinketType !== undefined &&
31
+ callbackTrinketType !== trinketType
32
+ ) {
33
+ continue;
34
+ }
35
+
36
+ callback(player, trinketType);
37
+ }
38
+ }
@@ -1,6 +1,6 @@
1
1
  import { PlayerType, PlayerVariant } from "isaac-typescript-definitions";
2
2
  export declare type PreBerserkDeathRegisterParameters = [
3
- callback: (player: EntityPlayer) => boolean | void,
3
+ callback: (player: EntityPlayer) => void,
4
4
  playerVariant?: PlayerVariant,
5
5
  character?: PlayerType
6
6
  ];
@@ -0,0 +1,42 @@
1
+ import { PlayerType, PlayerVariant } from "isaac-typescript-definitions";
2
+
3
+ export type PreBerserkDeathRegisterParameters = [
4
+ callback: (player: EntityPlayer) => void,
5
+ playerVariant?: PlayerVariant,
6
+ character?: PlayerType,
7
+ ];
8
+
9
+ const subscriptions: PreBerserkDeathRegisterParameters[] = [];
10
+
11
+ /** @internal */
12
+ export function preBerserkDeathHasSubscriptions(): boolean {
13
+ return subscriptions.length > 0;
14
+ }
15
+
16
+ /** @internal */
17
+ export function preBerserkDeathRegister(
18
+ ...args: PreBerserkDeathRegisterParameters
19
+ ): void {
20
+ subscriptions.push(args);
21
+ }
22
+
23
+ /** @internal */
24
+ export function preBerserkDeathFire(player: EntityPlayer): void {
25
+ const character = player.GetPlayerType();
26
+
27
+ for (const [callback, playerVariant, callbackCharacter] of subscriptions) {
28
+ // Handle the optional 2nd callback argument.
29
+ if (playerVariant !== undefined && playerVariant !== player.Variant) {
30
+ continue;
31
+ }
32
+
33
+ // Handle the optional 3rd callback argument.
34
+ if (callbackCharacter !== undefined && callbackCharacter !== character) {
35
+ continue;
36
+ }
37
+
38
+ callback(player);
39
+ }
40
+
41
+ return undefined;
42
+ }
@@ -1,6 +1,6 @@
1
1
  import { PlayerType, PlayerVariant } from "isaac-typescript-definitions";
2
2
  export declare type PreCustomReviveRegisterParameters = [
3
- callback: (player: EntityPlayer) => int | void,
3
+ callback: (player: EntityPlayer) => int | undefined,
4
4
  playerVariant?: PlayerVariant,
5
5
  character?: PlayerType
6
6
  ];
@@ -0,0 +1,46 @@
1
+ import { PlayerType, PlayerVariant } from "isaac-typescript-definitions";
2
+
3
+ export type PreCustomReviveRegisterParameters = [
4
+ callback: (player: EntityPlayer) => int | undefined,
5
+ playerVariant?: PlayerVariant,
6
+ character?: PlayerType,
7
+ ];
8
+
9
+ const subscriptions: PreCustomReviveRegisterParameters[] = [];
10
+
11
+ /** @internal */
12
+ export function preCustomReviveHasSubscriptions(): boolean {
13
+ return subscriptions.length > 0;
14
+ }
15
+
16
+ /** @internal */
17
+ export function preCustomReviveRegister(
18
+ ...args: PreCustomReviveRegisterParameters
19
+ ): void {
20
+ subscriptions.push(args);
21
+ }
22
+
23
+ /** @internal */
24
+ export function preCustomReviveFire(player: EntityPlayer): int | undefined {
25
+ const character = player.GetPlayerType();
26
+
27
+ for (const [callback, playerVariant, callbackCharacter] of subscriptions) {
28
+ // Handle the optional 2nd callback argument.
29
+ if (playerVariant !== undefined && playerVariant !== player.Variant) {
30
+ continue;
31
+ }
32
+
33
+ // Handle the optional 3rd callback argument.
34
+ if (callbackCharacter !== undefined && callbackCharacter !== character) {
35
+ continue;
36
+ }
37
+
38
+ const revivalType = callback(player);
39
+
40
+ if (revivalType !== undefined) {
41
+ return revivalType;
42
+ }
43
+ }
44
+
45
+ return undefined;
46
+ }
@@ -0,0 +1,64 @@
1
+ import {
2
+ CollectibleType,
3
+ ItemType,
4
+ TrinketType,
5
+ } from "isaac-typescript-definitions";
6
+ import {
7
+ PickingUpItem,
8
+ PickingUpItemCollectible,
9
+ PickingUpItemTrinket,
10
+ } from "../../types/PickingUpItem";
11
+
12
+ export type PreItemPickupRegisterParameters =
13
+ | [callback: (player: EntityPlayer, pickingUpItem: PickingUpItem) => void]
14
+ | [
15
+ callback: (
16
+ player: EntityPlayer,
17
+ pickingUpItem: PickingUpItemCollectible,
18
+ ) => void,
19
+ itemType: ItemType.PASSIVE | ItemType.ACTIVE | ItemType.FAMILIAR,
20
+ collectibleType?: CollectibleType,
21
+ ]
22
+ | [
23
+ callback: (
24
+ player: EntityPlayer,
25
+ pickingUpItem: PickingUpItemTrinket,
26
+ ) => void,
27
+ itemType: ItemType.TRINKET,
28
+ trinketType?: TrinketType,
29
+ ];
30
+
31
+ const subscriptions: PreItemPickupRegisterParameters[] = [];
32
+
33
+ /** @internal */
34
+ export function preItemPickupHasSubscriptions(): boolean {
35
+ return subscriptions.length > 0;
36
+ }
37
+
38
+ /** @internal */
39
+ export function preItemPickupRegister(
40
+ ...args: PreItemPickupRegisterParameters
41
+ ): void {
42
+ subscriptions.push(args);
43
+ }
44
+
45
+ /** @internal */
46
+ export function preItemPickupFire(
47
+ player: EntityPlayer,
48
+ pickingUpItem: PickingUpItem,
49
+ ): void {
50
+ for (const [callback, itemType, subType] of subscriptions) {
51
+ // Handle the optional 2nd callback argument.
52
+ if (itemType !== undefined && itemType !== pickingUpItem.itemType) {
53
+ continue;
54
+ }
55
+
56
+ // Handle the optional 3rd callback argument.
57
+ if (subType !== undefined && subType !== pickingUpItem.subType) {
58
+ continue;
59
+ }
60
+
61
+ // @ts-expect-error TypeScript isn't smart enough to treat the above checks as type narrowing.
62
+ callback(player, pickingUpItem);
63
+ }
64
+ }
@@ -0,0 +1,24 @@
1
+ export type PreNewLevelRegisterParameters = [
2
+ callback: (player: EntityPlayer) => void,
3
+ ];
4
+
5
+ const subscriptions: PreNewLevelRegisterParameters[] = [];
6
+
7
+ /** @internal */
8
+ export function preNewLevelHasSubscriptions(): boolean {
9
+ return subscriptions.length > 0;
10
+ }
11
+
12
+ /** @internal */
13
+ export function preNewLevelRegister(
14
+ ...args: PreNewLevelRegisterParameters
15
+ ): void {
16
+ subscriptions.push(args);
17
+ }
18
+
19
+ /** @internal */
20
+ export function preNewLevelFire(player: EntityPlayer): void {
21
+ for (const [callback] of subscriptions) {
22
+ callback(player);
23
+ }
24
+ }
@@ -0,0 +1,174 @@
1
+ /* eslint-disable sort-exports/sort-exports */
2
+
3
+ import { isFunction, isPrimitive } from "../functions/types";
4
+
5
+ // eslint-disable-next-line isaacscript/complete-sentences-jsdoc
6
+ /**
7
+ * A function that creates the default value for your `DefaultMap`. For example, if it was a
8
+ * `DefaultMap` containing maps, the factory function would be: `() => new Map()`
9
+ */
10
+ export type FactoryFunction<V, Args extends unknown[]> = (
11
+ ...extraArgs: Args
12
+ ) => V;
13
+
14
+ /**
15
+ * `DefaultMap` is a data structure that makes working with default values easier.
16
+ *
17
+ * It is a common pattern to look up a value in a `Map`, and then, if the value does not exist, set
18
+ * a default value for the key, and then return the default value. `DefaultMap` abstracts this
19
+ * operation away by providing the `getAndSetDefault` method.
20
+ *
21
+ * Using a `DefaultMap` is nice because it makes code more declarative, since you specify what the
22
+ * default value is alongside the types of the keys/values.
23
+ *
24
+ * When instantiating a new `DefaultMap`, you must specify default value as the first argument. (The
25
+ * default value is the initial value that will be assigned to every new entry in the
26
+ * `getAndSetDefault` method.) For example:
27
+ *
28
+ * ```ts
29
+ * // Initializes a new empty DefaultMap with a default value of "foo".
30
+ * const defaultMapWithString = new DefaultMap<string, string>("foo");
31
+ *
32
+ * const value = defaultMapWithString.getAndSetDefault("bar");
33
+ * // value is now "foo" and an entry for "bar" is now set.
34
+ * ```
35
+ *
36
+ * Sometimes, instead of having a static initial value for every entry in the map, you will want a
37
+ * dynamic initial value that is contingent upon the key or some other variable. In these cases, you
38
+ * can instead specify that the `DefaultMap` should run a function that will return the initial
39
+ * value. (This is referred to as a "factory function".) For example:
40
+ *
41
+ * ```ts
42
+ * // Initializes a new empty DefaultMap with a default value based on "someGlobalVariable".
43
+ * const factoryFunction = () => someGlobalVariable ? 0 : 1;
44
+ * const defaultMapWithFactoryFunction = new DefaultMap<string, string>(factoryFunction);
45
+ * ```
46
+ *
47
+ * Note that in TypeScript and Lua, booleans, numbers, and strings are "passed by value". This means
48
+ * that when the `DefaultMap` creates a new entry, if the default value is one of these 3 types, the
49
+ * values will be copied. On the other hand, arrays and maps and other complex data structures are
50
+ * "passed by reference". This means that when the `DefaultMap` creates a new entry, if the default
51
+ * value is an array, then it would not be copied. Instead, the same shared array would be assigned
52
+ * to every entry. Thus, to solve this problem, any variable that is passed by reference must be
53
+ * created using a factory function to ensure that each copy is unique. For example:
54
+ *
55
+ * ```ts
56
+ * // Initializes a new empty DefaultMap with a default value of a new empty array.
57
+ * const factoryFunction = () => [];
58
+ * const defaultMapWithArray = new DefaultMap<string, string[]>(factoryFunction);
59
+ * ```
60
+ *
61
+ * In the previous two examples, the factory functions did not have any arguments. But you can also
62
+ * specify a factory function that takes one or more arguments:
63
+ *
64
+ * ```ts
65
+ * const factoryFunction = (arg: boolean) => arg ? 0 : 1;
66
+ * const defaultMapWithArg = new DefaultMap<string, string, [arg: boolean]>(factoryFunction);
67
+ * ```
68
+ *
69
+ * Similar to a normal `Map`, you can also include an initializer list in the constructor as the
70
+ * second argument:
71
+ *
72
+ * ```ts
73
+ * // Initializes a DefaultMap with a default value of "foo" and some initial values.
74
+ * const defaultMapWithInitialValues = new DefaultMap<string, string>("foo", [
75
+ * ["a1", "a2"],
76
+ * ["b1", "b2"],
77
+ * ], );
78
+ * ```
79
+ *
80
+ * Finally, note that `DefaultMap` has the following additional utility methods:
81
+ *
82
+ * - `getAndSetDefault` - The method that is called inside the overridden `get` method. In most
83
+ * cases, you can use the overridden `get` method instead of calling this function directly.
84
+ * However, if a factory function was provided during instantiation, and the factory function has
85
+ * one or more arguments, then you must call this method instead (and provide the corresponding
86
+ * arguments).
87
+ * - `getWithoutDefault` - Calls the original `Map.get` function (without setting the default
88
+ * value).
89
+ * - `getDefaultValue` - Returns the default value to be used for a new key. (If a factory function
90
+ * was provided during instantiation, this will execute the factory function.)
91
+ * - `getConstructorArg` - Helper method for cloning the map. Returns either the default value or
92
+ * the reference to the factory function.
93
+ */
94
+ export class DefaultMap<Key, Value, Args extends unknown[] = []> extends Map<
95
+ Key,
96
+ Value
97
+ > {
98
+ private defaultValue: Value | undefined;
99
+ private defaultValueFactory: FactoryFunction<Value, Args> | undefined;
100
+
101
+ /**
102
+ * See the main `DefaultMap` documentation:
103
+ * https://isaacscript.github.io/isaacscript-common/classes/classes_DefaultMap.DefaultMap
104
+ */
105
+ constructor(
106
+ defaultValueOrFactoryFunction: Value | FactoryFunction<Value, Args>,
107
+ initializerArray?: Iterable<[Key, Value]>,
108
+ ) {
109
+ const argIsPrimitive = isPrimitive(defaultValueOrFactoryFunction);
110
+ const argIsFunction = isFunction(defaultValueOrFactoryFunction);
111
+ if (!argIsPrimitive && !argIsFunction) {
112
+ error(
113
+ `Failed to instantiate a DefaultMap since the provided default value was of type "${typeof defaultValueOrFactoryFunction}". This error usually means that you are trying to use an array (or some other non-primitive data structure that is passed by reference) as the default value. Instead, return the data structure in a factory function, like "() => []". See the DefaultMap documentation for more details.`,
114
+ );
115
+ }
116
+
117
+ super(initializerArray);
118
+
119
+ if (argIsFunction) {
120
+ this.defaultValue = undefined;
121
+ this.defaultValueFactory = defaultValueOrFactoryFunction;
122
+ } else {
123
+ this.defaultValue = defaultValueOrFactoryFunction as Value;
124
+ this.defaultValueFactory = undefined;
125
+ }
126
+ }
127
+
128
+ /**
129
+ * If the key exists, this will return the same thing as the normal `Map.get` method. Otherwise,
130
+ * it will set a default value for the provided key, and then return the default value.
131
+ */
132
+ getAndSetDefault(key: Key, ...extraArgs: Args): Value {
133
+ const value = super.get(key);
134
+ if (value !== undefined) {
135
+ return value;
136
+ }
137
+
138
+ const defaultValue = this.getDefaultValue(...extraArgs);
139
+ this.set(key, defaultValue);
140
+ return defaultValue;
141
+ }
142
+
143
+ /**
144
+ * Returns the default value to be used for a new key. (If a factory function was provided during
145
+ * instantiation, this will execute the factory function.)
146
+ */
147
+ getDefaultValue(...extraArgs: Args): Value {
148
+ if (this.defaultValue !== undefined) {
149
+ return this.defaultValue;
150
+ }
151
+
152
+ if (this.defaultValueFactory !== undefined) {
153
+ return this.defaultValueFactory(...extraArgs);
154
+ }
155
+
156
+ return error("A DefaultMap was incorrectly instantiated.");
157
+ }
158
+
159
+ /**
160
+ * Helper method for cloning the map. Returns either the default value or a reference to the
161
+ * factory function.
162
+ */
163
+ getConstructorArg(): Value | FactoryFunction<Value, Args> {
164
+ if (this.defaultValue !== undefined) {
165
+ return this.defaultValue;
166
+ }
167
+
168
+ if (this.defaultValueFactory !== undefined) {
169
+ return this.defaultValueFactory;
170
+ }
171
+
172
+ return error("A DefaultMap was incorrectly instantiated.");
173
+ }
174
+ }
@@ -2,9 +2,9 @@ import { ModCallback } from "isaac-typescript-definitions";
2
2
  import { ModCallbackCustom } from "../enums/ModCallbackCustom";
3
3
  import { AddCallbackParameterCustom } from "../interfaces/AddCallbackParameterCustom";
4
4
  /**
5
- * `isaacscript-common` has many {@link ModCallbackCustom custom callbacks} that you can use in your
6
- * mods. Instead of hijacking the vanilla `Mod` object, we provide a `ModUpgraded` object for you to
7
- * use, which extends the base class and adds a new method of `AddCallbackCustom`.
5
+ * `isaacscript-common` has many custom callbacks that you can use in your mods. Instead of
6
+ * hijacking the vanilla `Mod` object, we provide a `ModUpgraded` object for you to use, which
7
+ * extends the base class and adds a new method of `AddCallbackCustom`.
8
8
  *
9
9
  * To upgrade your mod, use the `upgradeMod` helper function.
10
10
  */
@@ -16,7 +16,11 @@ export declare class ModUpgraded implements Mod {
16
16
  AddCallback<T extends ModCallback>(modCallback: T, ...args: AddCallbackParameter[T]): void;
17
17
  HasData(): boolean;
18
18
  LoadData(): string;
19
- RemoveCallback(callbackID: ModCallback, callback: () => void): void;
19
+ /**
20
+ * This method does not care about the tertiary argument. Regardless of the conditions of how you
21
+ * registered the callback, it will be removed.
22
+ */
23
+ RemoveCallback<T extends ModCallback>(modCallback: T, callback: AddCallbackParameter[T][0]): void;
20
24
  RemoveData(): void;
21
25
  SaveData(data: string): void;
22
26
  AddCallbackCustom<T extends ModCallbackCustom>(modCallbackCustom: T, ...args: AddCallbackParameterCustom[T]): void;
@@ -3,9 +3,9 @@ local __TS__Class = ____lualib.__TS__Class
3
3
  local ____exports = {}
4
4
  local ____callbackRegisterFunctions = require("objects.callbackRegisterFunctions")
5
5
  local CALLBACK_REGISTER_FUNCTIONS = ____callbackRegisterFunctions.CALLBACK_REGISTER_FUNCTIONS
6
- --- `isaacscript-common` has many {@link ModCallbackCustomcustom callbacks} that you can use in your
7
- -- mods. Instead of hijacking the vanilla `Mod` object, we provide a `ModUpgraded` object for you to
8
- -- use, which extends the base class and adds a new method of `AddCallbackCustom`.
6
+ --- `isaacscript-common` has many custom callbacks that you can use in your mods. Instead of
7
+ -- hijacking the vanilla `Mod` object, we provide a `ModUpgraded` object for you to use, which
8
+ -- extends the base class and adds a new method of `AddCallbackCustom`.
9
9
  --
10
10
  -- To upgrade your mod, use the `upgradeMod` helper function.
11
11
  ____exports.ModUpgraded = __TS__Class()
@@ -24,8 +24,8 @@ end
24
24
  function ModUpgraded.prototype.LoadData(self)
25
25
  return self.Mod:LoadData()
26
26
  end
27
- function ModUpgraded.prototype.RemoveCallback(self, callbackID, callback)
28
- self.Mod:RemoveCallback(callbackID, callback)
27
+ function ModUpgraded.prototype.RemoveCallback(self, modCallback, callback)
28
+ self.Mod:RemoveCallback(modCallback, callback)
29
29
  end
30
30
  function ModUpgraded.prototype.RemoveData(self)
31
31
  self.Mod:RemoveData()
@@ -35,9 +35,6 @@ function ModUpgraded.prototype.SaveData(self, data)
35
35
  end
36
36
  function ModUpgraded.prototype.AddCallbackCustom(self, modCallbackCustom, ...)
37
37
  local callbackRegisterFunction = CALLBACK_REGISTER_FUNCTIONS[modCallbackCustom]
38
- if callbackRegisterFunction == nil then
39
- error("Failed to find a callback registration function for custom callback: " .. tostring(modCallbackCustom))
40
- end
41
38
  callbackRegisterFunction(nil, ...)
42
39
  end
43
40
  return ____exports
@@ -0,0 +1,84 @@
1
+ import { ModCallback } from "isaac-typescript-definitions";
2
+ import { ModCallbackCustom } from "../enums/ModCallbackCustom";
3
+ import { AddCallbackParameterCustom } from "../interfaces/AddCallbackParameterCustom";
4
+ import { CALLBACK_REGISTER_FUNCTIONS } from "../objects/callbackRegisterFunctions";
5
+
6
+ /**
7
+ * `isaacscript-common` has many custom callbacks that you can use in your mods. Instead of
8
+ * hijacking the vanilla `Mod` object, we provide a `ModUpgraded` object for you to use, which
9
+ * extends the base class and adds a new method of `AddCallbackCustom`.
10
+ *
11
+ * To upgrade your mod, use the `upgradeMod` helper function.
12
+ */
13
+ export class ModUpgraded implements Mod {
14
+ // -----------------
15
+ // Vanilla variables
16
+ // -----------------
17
+
18
+ Name: string; // The vanilla mod object stores this for some reason
19
+
20
+ // ----------------
21
+ // Custom variables
22
+ // ----------------
23
+
24
+ /** We store a copy of the original mod object so that we can re-implement its functions. */
25
+ Mod: Mod;
26
+
27
+ constructor(mod: Mod) {
28
+ this.Name = mod.Name;
29
+
30
+ this.Mod = mod;
31
+ }
32
+
33
+ // ---------------
34
+ // Vanilla methods
35
+ // ---------------
36
+
37
+ AddCallback<T extends ModCallback>(
38
+ modCallback: T,
39
+ ...args: AddCallbackParameter[T]
40
+ ): void {
41
+ this.Mod.AddCallback(modCallback, ...args);
42
+ }
43
+
44
+ HasData(): boolean {
45
+ return this.Mod.HasData();
46
+ }
47
+
48
+ LoadData(): string {
49
+ return this.Mod.LoadData();
50
+ }
51
+
52
+ /**
53
+ * This method does not care about the tertiary argument. Regardless of the conditions of how you
54
+ * registered the callback, it will be removed.
55
+ */
56
+ RemoveCallback<T extends ModCallback>(
57
+ modCallback: T,
58
+ callback: AddCallbackParameter[T][0],
59
+ ): void {
60
+ this.Mod.RemoveCallback(modCallback, callback);
61
+ }
62
+
63
+ RemoveData(): void {
64
+ this.Mod.RemoveData();
65
+ }
66
+
67
+ SaveData(data: string): void {
68
+ this.Mod.SaveData(data);
69
+ }
70
+
71
+ // --------------
72
+ // Custom methods
73
+ // --------------
74
+
75
+ // eslint-disable-next-line class-methods-use-this
76
+ AddCallbackCustom<T extends ModCallbackCustom>(
77
+ modCallbackCustom: T,
78
+ ...args: AddCallbackParameterCustom[T]
79
+ ): void {
80
+ const callbackRegisterFunction =
81
+ CALLBACK_REGISTER_FUNCTIONS[modCallbackCustom];
82
+ callbackRegisterFunction(...args);
83
+ }
84
+ }