isaacscript-common 84.0.1 → 84.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 (568) hide show
  1. package/dist/arrays/cachedEnumValues.js +33 -0
  2. package/dist/callbackClasses.js +289 -0
  3. package/dist/callbacks.js +181 -0
  4. package/dist/classes/DefaultMap.js +171 -0
  5. package/dist/classes/ModFeature.js +244 -0
  6. package/dist/classes/ModUpgraded.js +324 -0
  7. package/dist/classes/callbacks/EntityTakeDmgFilter.js +19 -0
  8. package/dist/classes/callbacks/EntityTakeDmgPlayer.js +29 -0
  9. package/dist/classes/callbacks/InputActionFilter.js +24 -0
  10. package/dist/classes/callbacks/InputActionPlayer.js +37 -0
  11. package/dist/classes/callbacks/PostAmbushFinished.js +40 -0
  12. package/dist/classes/callbacks/PostAmbushStarted.js +40 -0
  13. package/dist/classes/callbacks/PostBombExploded.js +24 -0
  14. package/dist/classes/callbacks/PostBombInitFilter.js +21 -0
  15. package/dist/classes/callbacks/PostBombInitLate.js +31 -0
  16. package/dist/classes/callbacks/PostBombRenderFilter.js +21 -0
  17. package/dist/classes/callbacks/PostBombUpdateFilter.js +21 -0
  18. package/dist/classes/callbacks/PostBoneSwing.js +53 -0
  19. package/dist/classes/callbacks/PostCollectibleEmpty.js +50 -0
  20. package/dist/classes/callbacks/PostCursedTeleport.js +119 -0
  21. package/dist/classes/callbacks/PostCustomRevive.js +17 -0
  22. package/dist/classes/callbacks/PostDiceRoomActivated.js +50 -0
  23. package/dist/classes/callbacks/PostDoorRender.js +24 -0
  24. package/dist/classes/callbacks/PostDoorUpdate.js +24 -0
  25. package/dist/classes/callbacks/PostEffectInitFilter.js +21 -0
  26. package/dist/classes/callbacks/PostEffectInitLate.js +31 -0
  27. package/dist/classes/callbacks/PostEffectRenderFilter.js +21 -0
  28. package/dist/classes/callbacks/PostEffectStateChanged.js +34 -0
  29. package/dist/classes/callbacks/PostEffectUpdateFilter.js +21 -0
  30. package/dist/classes/callbacks/PostEntityKillFilter.js +21 -0
  31. package/dist/classes/callbacks/PostEsauJr.js +12 -0
  32. package/dist/classes/callbacks/PostFamiliarInitFilter.js +21 -0
  33. package/dist/classes/callbacks/PostFamiliarInitLate.js +31 -0
  34. package/dist/classes/callbacks/PostFamiliarRenderFilter.js +21 -0
  35. package/dist/classes/callbacks/PostFamiliarStateChanged.js +34 -0
  36. package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +21 -0
  37. package/dist/classes/callbacks/PostFirstEsauJr.js +12 -0
  38. package/dist/classes/callbacks/PostFirstFlip.js +12 -0
  39. package/dist/classes/callbacks/PostFlip.js +12 -0
  40. package/dist/classes/callbacks/PostGameEndFilter.js +21 -0
  41. package/dist/classes/callbacks/PostGameStartedReordered.js +14 -0
  42. package/dist/classes/callbacks/PostGameStartedReorderedLast.js +14 -0
  43. package/dist/classes/callbacks/PostGreedModeWave.js +35 -0
  44. package/dist/classes/callbacks/PostGridEntityBroken.js +14 -0
  45. package/dist/classes/callbacks/PostGridEntityCollision.js +28 -0
  46. package/dist/classes/callbacks/PostGridEntityCustomBroken.js +14 -0
  47. package/dist/classes/callbacks/PostGridEntityCustomCollision.js +24 -0
  48. package/dist/classes/callbacks/PostGridEntityCustomInit.js +14 -0
  49. package/dist/classes/callbacks/PostGridEntityCustomRemove.js +18 -0
  50. package/dist/classes/callbacks/PostGridEntityCustomRender.js +14 -0
  51. package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +14 -0
  52. package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +14 -0
  53. package/dist/classes/callbacks/PostGridEntityInit.js +14 -0
  54. package/dist/classes/callbacks/PostGridEntityRemove.js +19 -0
  55. package/dist/classes/callbacks/PostGridEntityRender.js +14 -0
  56. package/dist/classes/callbacks/PostGridEntityStateChanged.js +14 -0
  57. package/dist/classes/callbacks/PostGridEntityUpdate.js +14 -0
  58. package/dist/classes/callbacks/PostHolyMantleRemoved.js +43 -0
  59. package/dist/classes/callbacks/PostItemDischarge.js +122 -0
  60. package/dist/classes/callbacks/PostItemPickup.js +14 -0
  61. package/dist/classes/callbacks/PostKeyboardChanged.js +46 -0
  62. package/dist/classes/callbacks/PostKnifeInitFilter.js +21 -0
  63. package/dist/classes/callbacks/PostKnifeInitLate.js +31 -0
  64. package/dist/classes/callbacks/PostKnifeRenderFilter.js +21 -0
  65. package/dist/classes/callbacks/PostKnifeUpdateFilter.js +21 -0
  66. package/dist/classes/callbacks/PostLaserInitFilter.js +21 -0
  67. package/dist/classes/callbacks/PostLaserInitLate.js +31 -0
  68. package/dist/classes/callbacks/PostLaserRenderFilter.js +21 -0
  69. package/dist/classes/callbacks/PostLaserUpdateFilter.js +21 -0
  70. package/dist/classes/callbacks/PostNPCDeathFilter.js +21 -0
  71. package/dist/classes/callbacks/PostNPCInitFilter.js +21 -0
  72. package/dist/classes/callbacks/PostNPCInitLate.js +31 -0
  73. package/dist/classes/callbacks/PostNPCRenderFilter.js +21 -0
  74. package/dist/classes/callbacks/PostNPCStateChanged.js +34 -0
  75. package/dist/classes/callbacks/PostNPCUpdateFilter.js +21 -0
  76. package/dist/classes/callbacks/PostNewLevelReordered.js +14 -0
  77. package/dist/classes/callbacks/PostNewRoomEarly.js +74 -0
  78. package/dist/classes/callbacks/PostNewRoomReordered.js +14 -0
  79. package/dist/classes/callbacks/PostPEffectUpdateReordered.js +14 -0
  80. package/dist/classes/callbacks/PostPickupChanged.js +14 -0
  81. package/dist/classes/callbacks/PostPickupCollect.js +38 -0
  82. package/dist/classes/callbacks/PostPickupInitFilter.js +21 -0
  83. package/dist/classes/callbacks/PostPickupInitFirst.js +33 -0
  84. package/dist/classes/callbacks/PostPickupInitLate.js +31 -0
  85. package/dist/classes/callbacks/PostPickupRenderFilter.js +21 -0
  86. package/dist/classes/callbacks/PostPickupSelectionFilter.js +29 -0
  87. package/dist/classes/callbacks/PostPickupStateChanged.js +34 -0
  88. package/dist/classes/callbacks/PostPickupUpdateFilter.js +21 -0
  89. package/dist/classes/callbacks/PostPitRender.js +24 -0
  90. package/dist/classes/callbacks/PostPitUpdate.js +24 -0
  91. package/dist/classes/callbacks/PostPlayerChangeHealth.js +47 -0
  92. package/dist/classes/callbacks/PostPlayerChangeStat.js +79 -0
  93. package/dist/classes/callbacks/PostPlayerChangeType.js +36 -0
  94. package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +14 -0
  95. package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +14 -0
  96. package/dist/classes/callbacks/PostPlayerFatalDamage.js +83 -0
  97. package/dist/classes/callbacks/PostPlayerInitFirst.js +41 -0
  98. package/dist/classes/callbacks/PostPlayerInitLate.js +33 -0
  99. package/dist/classes/callbacks/PostPlayerRenderReordered.js +14 -0
  100. package/dist/classes/callbacks/PostPlayerUpdateReordered.js +14 -0
  101. package/dist/classes/callbacks/PostPoopRender.js +24 -0
  102. package/dist/classes/callbacks/PostPoopUpdate.js +24 -0
  103. package/dist/classes/callbacks/PostPressurePlateRender.js +24 -0
  104. package/dist/classes/callbacks/PostPressurePlateUpdate.js +24 -0
  105. package/dist/classes/callbacks/PostProjectileInitFilter.js +21 -0
  106. package/dist/classes/callbacks/PostProjectileInitLate.js +31 -0
  107. package/dist/classes/callbacks/PostProjectileKill.js +52 -0
  108. package/dist/classes/callbacks/PostProjectileRenderFilter.js +21 -0
  109. package/dist/classes/callbacks/PostProjectileUpdateFilter.js +21 -0
  110. package/dist/classes/callbacks/PostPurchase.js +90 -0
  111. package/dist/classes/callbacks/PostRockRender.js +24 -0
  112. package/dist/classes/callbacks/PostRockUpdate.js +24 -0
  113. package/dist/classes/callbacks/PostRoomClearChanged.js +46 -0
  114. package/dist/classes/callbacks/PostSacrifice.js +36 -0
  115. package/dist/classes/callbacks/PostSlotAnimationChanged.js +14 -0
  116. package/dist/classes/callbacks/PostSlotCollision.js +25 -0
  117. package/dist/classes/callbacks/PostSlotDestroyed.js +14 -0
  118. package/dist/classes/callbacks/PostSlotInit.js +14 -0
  119. package/dist/classes/callbacks/PostSlotRender.js +14 -0
  120. package/dist/classes/callbacks/PostSlotUpdate.js +14 -0
  121. package/dist/classes/callbacks/PostSpikesRender.js +24 -0
  122. package/dist/classes/callbacks/PostSpikesUpdate.js +24 -0
  123. package/dist/classes/callbacks/PostTNTRender.js +24 -0
  124. package/dist/classes/callbacks/PostTNTUpdate.js +24 -0
  125. package/dist/classes/callbacks/PostTearInitFilter.js +21 -0
  126. package/dist/classes/callbacks/PostTearInitLate.js +31 -0
  127. package/dist/classes/callbacks/PostTearInitVeryLate.js +35 -0
  128. package/dist/classes/callbacks/PostTearKill.js +52 -0
  129. package/dist/classes/callbacks/PostTearRenderFilter.js +21 -0
  130. package/dist/classes/callbacks/PostTearUpdateFilter.js +21 -0
  131. package/dist/classes/callbacks/PostTransformation.js +47 -0
  132. package/dist/classes/callbacks/PostTrinketBreak.js +70 -0
  133. package/dist/classes/callbacks/PostUsePillFilter.js +76 -0
  134. package/dist/classes/callbacks/PreBerserkDeath.js +41 -0
  135. package/dist/classes/callbacks/PreBombCollisionFilter.js +19 -0
  136. package/dist/classes/callbacks/PreCustomRevive.js +14 -0
  137. package/dist/classes/callbacks/PreEntitySpawnFilter.js +24 -0
  138. package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +19 -0
  139. package/dist/classes/callbacks/PreGetPedestal.js +46 -0
  140. package/dist/classes/callbacks/PreItemPickup.js +14 -0
  141. package/dist/classes/callbacks/PreKnifeCollisionFilter.js +19 -0
  142. package/dist/classes/callbacks/PreNPCCollisionFilter.js +19 -0
  143. package/dist/classes/callbacks/PreNPCUpdateFilter.js +19 -0
  144. package/dist/classes/callbacks/PreNewLevel.js +51 -0
  145. package/dist/classes/callbacks/PreProjectileCollisionFilter.js +19 -0
  146. package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +26 -0
  147. package/dist/classes/callbacks/PreTearCollisionFilter.js +19 -0
  148. package/dist/classes/features/callbackLogic/CustomGridEntities.js +359 -0
  149. package/dist/classes/features/callbackLogic/CustomRevive.js +170 -0
  150. package/dist/classes/features/callbackLogic/EsauJrDetection.js +70 -0
  151. package/dist/classes/features/callbackLogic/FlipDetection.js +61 -0
  152. package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +220 -0
  153. package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +62 -0
  154. package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +35 -0
  155. package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +147 -0
  156. package/dist/classes/features/callbackLogic/ItemPickupDetection.js +68 -0
  157. package/dist/classes/features/callbackLogic/PickupChangeDetection.js +43 -0
  158. package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +193 -0
  159. package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +109 -0
  160. package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +95 -0
  161. package/dist/classes/features/callbackLogic/SlotRenderDetection.js +48 -0
  162. package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +52 -0
  163. package/dist/classes/features/other/CharacterHealthConversion.js +112 -0
  164. package/dist/classes/features/other/CharacterStats.js +68 -0
  165. package/dist/classes/features/other/CollectibleItemPoolType.js +75 -0
  166. package/dist/classes/features/other/CustomHotkeys.js +144 -0
  167. package/dist/classes/features/other/CustomItemPools.js +128 -0
  168. package/dist/classes/features/other/CustomPickups.js +118 -0
  169. package/dist/classes/features/other/CustomStages.js +471 -0
  170. package/dist/classes/features/other/CustomTrapdoors.js +596 -0
  171. package/dist/classes/features/other/DebugDisplay.js +699 -0
  172. package/dist/classes/features/other/DeployJSONRoom.js +301 -0
  173. package/dist/classes/features/other/DisableAllSound.js +90 -0
  174. package/dist/classes/features/other/DisableInputs.js +249 -0
  175. package/dist/classes/features/other/EdenStartingStatsHealth.js +197 -0
  176. package/dist/classes/features/other/ExtraConsoleCommands.js +292 -0
  177. package/dist/classes/features/other/FadeInRemover.js +67 -0
  178. package/dist/classes/features/other/FastReset.js +88 -0
  179. package/dist/classes/features/other/FlyingDetection.js +64 -0
  180. package/dist/classes/features/other/ForgottenSwitch.js +43 -0
  181. package/dist/classes/features/other/ItemPoolDetection.js +187 -0
  182. package/dist/classes/features/other/ModdedElementDetection.js +399 -0
  183. package/dist/classes/features/other/ModdedElementSets.js +1251 -0
  184. package/dist/classes/features/other/NoSirenSteal.js +88 -0
  185. package/dist/classes/features/other/Pause.js +197 -0
  186. package/dist/classes/features/other/PersistentEntities.js +168 -0
  187. package/dist/classes/features/other/PickupIndexCreation.js +229 -0
  188. package/dist/classes/features/other/PlayerCollectibleTracking.js +102 -0
  189. package/dist/classes/features/other/PonyDetection.js +86 -0
  190. package/dist/classes/features/other/PressInput.js +71 -0
  191. package/dist/classes/features/other/PreventChildEntities.js +60 -0
  192. package/dist/classes/features/other/PreventGridEntityRespawn.js +159 -0
  193. package/dist/classes/features/other/RerunDetection.js +69 -0
  194. package/dist/classes/features/other/RoomClearFrame.js +94 -0
  195. package/dist/classes/features/other/RoomHistory.js +196 -0
  196. package/dist/classes/features/other/RunInNFrames.js +323 -0
  197. package/dist/classes/features/other/RunNextRoom.js +53 -0
  198. package/dist/classes/features/other/RunNextRun.js +60 -0
  199. package/dist/classes/features/other/SaveDataManager.js +383 -0
  200. package/dist/classes/features/other/SpawnRockAltRewards.js +469 -0
  201. package/dist/classes/features/other/StageHistory.js +244 -0
  202. package/dist/classes/features/other/StartAmbush.js +62 -0
  203. package/dist/classes/features/other/TaintedLazarusPlayers.js +115 -0
  204. package/dist/classes/features/other/UnlockAchievementsDetection.js +60 -0
  205. package/dist/classes/features/other/customStages/backdrop.js +195 -0
  206. package/dist/classes/features/other/customStages/constants.js +19 -0
  207. package/dist/classes/features/other/customStages/gridEntities.js +177 -0
  208. package/dist/classes/features/other/customStages/shadows.js +67 -0
  209. package/dist/classes/features/other/customStages/streakText.js +222 -0
  210. package/dist/classes/features/other/customStages/utils.js +65 -0
  211. package/dist/classes/features/other/customStages/v.js +27 -0
  212. package/dist/classes/features/other/customStages/versusScreen.js +227 -0
  213. package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +23 -0
  214. package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +22 -0
  215. package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +23 -0
  216. package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +23 -0
  217. package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +23 -0
  218. package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +23 -0
  219. package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +23 -0
  220. package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +23 -0
  221. package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +22 -0
  222. package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +25 -0
  223. package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +22 -0
  224. package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +25 -0
  225. package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +23 -0
  226. package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +22 -0
  227. package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +22 -0
  228. package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +22 -0
  229. package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +22 -0
  230. package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +23 -0
  231. package/dist/classes/features/other/debugDisplay/utils.js +13 -0
  232. package/dist/classes/features/other/extraConsoleCommands/commands.js +1598 -0
  233. package/dist/classes/features/other/extraConsoleCommands/subroutines.js +135 -0
  234. package/dist/classes/features/other/extraConsoleCommands/v.js +30 -0
  235. package/dist/classes/features/other/saveDataManager/constants.js +4 -0
  236. package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +106 -0
  237. package/dist/classes/features/other/saveDataManager/loadFromDisk.js +69 -0
  238. package/dist/classes/features/other/saveDataManager/restoreDefaults.js +69 -0
  239. package/dist/classes/features/other/saveDataManager/saveToDisk.js +46 -0
  240. package/dist/classes/private/CustomCallback.js +59 -0
  241. package/dist/classes/private/Feature.js +39 -0
  242. package/dist/core/cachedClasses.js +61 -0
  243. package/dist/core/constants.js +289 -0
  244. package/dist/core/constantsFirstLast.js +98 -0
  245. package/dist/core/constantsVanilla.js +131 -0
  246. package/dist/core/upgradeMod.js +71 -0
  247. package/dist/customStageMetadata.json +1 -0
  248. package/dist/data/itempools.json +16625 -0
  249. package/dist/decorators.js +21 -0
  250. package/dist/enums/AmbushType.js +9 -0
  251. package/dist/enums/CornerType.js +11 -0
  252. package/dist/enums/HealthType.js +20 -0
  253. package/dist/enums/ISCFeature.js +65 -0
  254. package/dist/enums/LadderSubTypeCustom.js +20 -0
  255. package/dist/enums/ModCallbackCustom.js +2477 -0
  256. package/dist/enums/MysteriousPaperEffect.js +16 -0
  257. package/dist/enums/PlayerStat.js +37 -0
  258. package/dist/enums/PocketItemType.js +13 -0
  259. package/dist/enums/RockAltType.js +23 -0
  260. package/dist/enums/SaveDataKey.js +14 -0
  261. package/dist/enums/SerializationType.js +10 -0
  262. package/dist/enums/SlotDestructionType.js +22 -0
  263. package/dist/enums/private/GridEntityTypeCustom.js +10 -0
  264. package/dist/enums/private/SerializationBrand.js +42 -0
  265. package/dist/enums/private/StageTravelState.js +13 -0
  266. package/dist/enums/private/TrapdoorAnimation.js +9 -0
  267. package/dist/enums/private/UIStreakAnimation.js +10 -0
  268. package/dist/features.js +150 -0
  269. package/dist/functions/ambush.js +26 -0
  270. package/dist/functions/array.js +586 -0
  271. package/dist/functions/arrayLua.js +81 -0
  272. package/dist/functions/benchmark.js +36 -0
  273. package/dist/functions/bitSet128.js +64 -0
  274. package/dist/functions/bitwise.js +82 -0
  275. package/dist/functions/bombs.js +14 -0
  276. package/dist/functions/bosses.js +238 -0
  277. package/dist/functions/cards.js +164 -0
  278. package/dist/functions/challenges.js +117 -0
  279. package/dist/functions/characters.js +182 -0
  280. package/dist/functions/charge.js +251 -0
  281. package/dist/functions/chargeBar.js +54 -0
  282. package/dist/functions/collectibleTag.js +24 -0
  283. package/dist/functions/collectibles.js +581 -0
  284. package/dist/functions/color.js +88 -0
  285. package/dist/functions/console.js +18 -0
  286. package/dist/functions/curses.js +37 -0
  287. package/dist/functions/debugFunctions.js +108 -0
  288. package/dist/functions/decorators.js +113 -0
  289. package/dist/functions/deepCopy.js +406 -0
  290. package/dist/functions/deepCopyTests.js +361 -0
  291. package/dist/functions/dimensions.js +30 -0
  292. package/dist/functions/direction.js +78 -0
  293. package/dist/functions/doors.js +524 -0
  294. package/dist/functions/easing.js +327 -0
  295. package/dist/functions/effects.js +14 -0
  296. package/dist/functions/emptyRoom.js +79 -0
  297. package/dist/functions/entities.js +529 -0
  298. package/dist/functions/entitiesSpecific.js +582 -0
  299. package/dist/functions/entityTypes.js +9 -0
  300. package/dist/functions/enums.js +244 -0
  301. package/dist/functions/external.js +59 -0
  302. package/dist/functions/familiars.js +136 -0
  303. package/dist/functions/flag.js +146 -0
  304. package/dist/functions/frames.js +166 -0
  305. package/dist/functions/globals.js +291 -0
  306. package/dist/functions/gridEntities.js +990 -0
  307. package/dist/functions/gridEntitiesSpecific.js +456 -0
  308. package/dist/functions/gridIndex.js +35 -0
  309. package/dist/functions/hash.js +75 -0
  310. package/dist/functions/hex.js +57 -0
  311. package/dist/functions/input.js +185 -0
  312. package/dist/functions/isaacAPIClass.js +157 -0
  313. package/dist/functions/itemPool.js +118 -0
  314. package/dist/functions/jsonHelpers.js +73 -0
  315. package/dist/functions/jsonRoom.js +184 -0
  316. package/dist/functions/kColor.js +89 -0
  317. package/dist/functions/language.js +16 -0
  318. package/dist/functions/level.js +66 -0
  319. package/dist/functions/levelGrid.js +497 -0
  320. package/dist/functions/log.js +86 -0
  321. package/dist/functions/logEntities.js +308 -0
  322. package/dist/functions/logMisc.js +510 -0
  323. package/dist/functions/map.js +121 -0
  324. package/dist/functions/math.js +149 -0
  325. package/dist/functions/merge.js +159 -0
  326. package/dist/functions/mergeTests.js +313 -0
  327. package/dist/functions/minimap.js +204 -0
  328. package/dist/functions/modFeatures.js +39 -0
  329. package/dist/functions/newArray.js +30 -0
  330. package/dist/functions/nextStage.js +169 -0
  331. package/dist/functions/npcDataStructures.js +146 -0
  332. package/dist/functions/npcs.js +132 -0
  333. package/dist/functions/pickupVariants.js +63 -0
  334. package/dist/functions/pickups.js +168 -0
  335. package/dist/functions/pickupsSpecific.js +376 -0
  336. package/dist/functions/pills.js +200 -0
  337. package/dist/functions/playerCenter.js +53 -0
  338. package/dist/functions/playerCollectibles.js +300 -0
  339. package/dist/functions/playerDataStructures.js +145 -0
  340. package/dist/functions/playerEffects.js +63 -0
  341. package/dist/functions/playerHealth.js +604 -0
  342. package/dist/functions/playerIndex.js +186 -0
  343. package/dist/functions/playerTrinkets.js +149 -0
  344. package/dist/functions/players.js +471 -0
  345. package/dist/functions/pocketItems.js +165 -0
  346. package/dist/functions/positionVelocity.js +158 -0
  347. package/dist/functions/pressurePlate.js +26 -0
  348. package/dist/functions/projectiles.js +57 -0
  349. package/dist/functions/random.js +90 -0
  350. package/dist/functions/readOnly.js +33 -0
  351. package/dist/functions/render.js +36 -0
  352. package/dist/functions/revive.js +151 -0
  353. package/dist/functions/rng.js +140 -0
  354. package/dist/functions/rockAlt.js +50 -0
  355. package/dist/functions/roomData.js +155 -0
  356. package/dist/functions/roomGrid.js +97 -0
  357. package/dist/functions/roomShape.js +143 -0
  358. package/dist/functions/roomShapeWalls.js +187 -0
  359. package/dist/functions/roomTransition.js +43 -0
  360. package/dist/functions/rooms.js +782 -0
  361. package/dist/functions/run.js +121 -0
  362. package/dist/functions/seeds.js +22 -0
  363. package/dist/functions/serialization.js +98 -0
  364. package/dist/functions/set.js +215 -0
  365. package/dist/functions/slots.js +41 -0
  366. package/dist/functions/sort.js +158 -0
  367. package/dist/functions/sound.js +45 -0
  368. package/dist/functions/spawnCollectible.js +112 -0
  369. package/dist/functions/sprites.js +130 -0
  370. package/dist/functions/stage.js +540 -0
  371. package/dist/functions/stats.js +104 -0
  372. package/dist/functions/storyBosses.js +63 -0
  373. package/dist/functions/string.js +194 -0
  374. package/dist/functions/table.js +162 -0
  375. package/dist/functions/tears.js +128 -0
  376. package/dist/functions/transformations.js +89 -0
  377. package/dist/functions/trinketGive.js +145 -0
  378. package/dist/functions/trinkets.js +213 -0
  379. package/dist/functions/tstlClass.js +97 -0
  380. package/dist/functions/types.js +225 -0
  381. package/dist/functions/ui.js +148 -0
  382. package/dist/functions/utils.d.ts +2 -0
  383. package/dist/functions/utils.d.ts.map +1 -1
  384. package/dist/functions/utils.js +195 -0
  385. package/dist/functions/utils.lua +4 -1
  386. package/dist/functions/vector.js +150 -0
  387. package/dist/functions/versusScreen.js +58 -0
  388. package/dist/functions/weighted.js +57 -0
  389. package/dist/index.js +219 -0
  390. package/dist/index.rollup.d.ts +2 -0
  391. package/dist/indexLua.js +220 -0
  392. package/dist/interfaces/ChargeBarSprites.js +2 -0
  393. package/dist/interfaces/Corner.js +2 -0
  394. package/dist/interfaces/CustomStageTSConfig.js +2 -0
  395. package/dist/interfaces/GridEntityCustomData.js +2 -0
  396. package/dist/interfaces/JSONRoomsFile.js +2 -0
  397. package/dist/interfaces/PlayerHealth.js +2 -0
  398. package/dist/interfaces/PlayerStats.js +4 -0
  399. package/dist/interfaces/PocketItemDescription.js +2 -0
  400. package/dist/interfaces/RoomDescription.js +2 -0
  401. package/dist/interfaces/SaveData.js +98 -0
  402. package/dist/interfaces/StageHistoryEntry.js +2 -0
  403. package/dist/interfaces/TSTLClassMetatable.js +2 -0
  404. package/dist/interfaces/TrinketSituation.js +2 -0
  405. package/dist/interfaces/private/AddCallbackParametersCustom.js +4 -0
  406. package/dist/interfaces/private/CustomStage.js +2 -0
  407. package/dist/interfaces/private/CustomTrapdoorDescription.js +2 -0
  408. package/dist/interfaces/private/ModUpgradedInterface.js +2 -0
  409. package/dist/isaacscript-common.lua +5 -2
  410. package/dist/maps/PHDPillConversionsMap.js +23 -0
  411. package/dist/maps/cardNameToTypeMap.js +211 -0
  412. package/dist/maps/characterNameToTypeMap.js +91 -0
  413. package/dist/maps/collectibleNameToTypeMap.js +19 -0
  414. package/dist/maps/defaultPlayerStatMap.js +17 -0
  415. package/dist/maps/entityTypeVariantToBossIDMap.js +11 -0
  416. package/dist/maps/falsePHDPillConversionsMap.js +37 -0
  417. package/dist/maps/gridEntityTypeToBrokenStateMap.js +32 -0
  418. package/dist/maps/gridEntityXMLMap.js +133 -0
  419. package/dist/maps/itemPoolTypeToItemPoolName.js +38 -0
  420. package/dist/maps/keyboardToStringMap.js +71 -0
  421. package/dist/maps/pillNameToEffectMap.js +91 -0
  422. package/dist/maps/roomNameToTypeMap.js +43 -0
  423. package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +17 -0
  424. package/dist/maps/transformationNameToPlayerFormMap.js +35 -0
  425. package/dist/maps/trinketNameToTypeMap.js +19 -0
  426. package/dist/objects/LRoomShapeToRectangles.js +43 -0
  427. package/dist/objects/backdropTypeToRockAltType.js +68 -0
  428. package/dist/objects/batteryNames.js +13 -0
  429. package/dist/objects/bombNames.js +17 -0
  430. package/dist/objects/bossIDToEntityTypeVariant.js +228 -0
  431. package/dist/objects/bossNamePNGFileNames.js +120 -0
  432. package/dist/objects/bossNames.js +119 -0
  433. package/dist/objects/bossPortraitPNGFileNames.js +123 -0
  434. package/dist/objects/cardDescriptions.js +106 -0
  435. package/dist/objects/cardNames.js +106 -0
  436. package/dist/objects/challengeBosses.js +60 -0
  437. package/dist/objects/challengeCharacters.js +58 -0
  438. package/dist/objects/challengeCollectibleTypes.js +255 -0
  439. package/dist/objects/challengeNames.js +54 -0
  440. package/dist/objects/challengeTrinketType.js +58 -0
  441. package/dist/objects/characterDamageMultipliers.js +49 -0
  442. package/dist/objects/characterNames.js +48 -0
  443. package/dist/objects/characterSpritePNGFileNames.js +50 -0
  444. package/dist/objects/characterStartingCollectibleTypes.js +105 -0
  445. package/dist/objects/characterStartingTrinketTypes.js +90 -0
  446. package/dist/objects/chestNames.js +20 -0
  447. package/dist/objects/coinNames.js +16 -0
  448. package/dist/objects/coinSubTypeToValue.js +15 -0
  449. package/dist/objects/collectibleDescriptions.js +742 -0
  450. package/dist/objects/collectibleNames.js +745 -0
  451. package/dist/objects/colors.js +26 -0
  452. package/dist/objects/directionNames.js +11 -0
  453. package/dist/objects/directionToDegrees.js +11 -0
  454. package/dist/objects/directionToMoveAction.js +11 -0
  455. package/dist/objects/directionToShootAction.js +11 -0
  456. package/dist/objects/directionToVector.js +13 -0
  457. package/dist/objects/doorSlotFlagToDoorSlot.js +15 -0
  458. package/dist/objects/doorSlotToDirection.js +15 -0
  459. package/dist/objects/doorSlotToDoorSlotFlag.js +15 -0
  460. package/dist/objects/gridEntityTypeToANM2Name.js +37 -0
  461. package/dist/objects/heartNames.js +21 -0
  462. package/dist/objects/isaacAPIClassTypeToBrand.js +12 -0
  463. package/dist/objects/isaacAPIClassTypeToFunctions.js +46 -0
  464. package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +57 -0
  465. package/dist/objects/kColors.js +27 -0
  466. package/dist/objects/keyNames.js +13 -0
  467. package/dist/objects/languageNames.js +13 -0
  468. package/dist/objects/oppositeDoorSlots.js +15 -0
  469. package/dist/objects/pillEffectClasses.js +57 -0
  470. package/dist/objects/pillEffectNames.js +57 -0
  471. package/dist/objects/pillEffectTypeToPillEffects.js +23 -0
  472. package/dist/objects/pillEffectTypes.js +57 -0
  473. package/dist/objects/playerNamePNGFileNames.js +57 -0
  474. package/dist/objects/playerPortraitPNGFileNames.js +54 -0
  475. package/dist/objects/roomShapeBounds.js +48 -0
  476. package/dist/objects/roomShapeCorners.js +330 -0
  477. package/dist/objects/roomShapeLayoutSizes.js +41 -0
  478. package/dist/objects/roomShapeToBottomRightPosition.js +25 -0
  479. package/dist/objects/roomShapeToDoorSlotCoordinates.js +111 -0
  480. package/dist/objects/roomShapeToDoorSlots.js +72 -0
  481. package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +118 -0
  482. package/dist/objects/roomShapeToGridWidth.js +20 -0
  483. package/dist/objects/roomShapeToTopLeftPosition.js +26 -0
  484. package/dist/objects/roomShapeVolumes.js +32 -0
  485. package/dist/objects/roomTypeNames.js +35 -0
  486. package/dist/objects/roomTypeSpecialGotoPrefixes.js +35 -0
  487. package/dist/objects/sackNames.js +11 -0
  488. package/dist/objects/slotNames.js +26 -0
  489. package/dist/objects/stageIDNames.js +43 -0
  490. package/dist/objects/stageToMusic.js +91 -0
  491. package/dist/objects/stageToStageID.js +117 -0
  492. package/dist/objects/stageTypeSuffixes.js +14 -0
  493. package/dist/objects/transformationNames.js +20 -0
  494. package/dist/objects/trinketDescriptions.js +199 -0
  495. package/dist/objects/trinketNames.js +202 -0
  496. package/dist/objects/versusScreenBackgroundColors.js +46 -0
  497. package/dist/objects/versusScreenDirtSpotColors.js +46 -0
  498. package/dist/patchErrorFunctions.js +65 -0
  499. package/dist/serialization.js +21 -0
  500. package/dist/sets/LRoomShapesSet.js +11 -0
  501. package/dist/sets/bigRoomShapesSet.js +14 -0
  502. package/dist/sets/bossSets.js +465 -0
  503. package/dist/sets/charactersThatStartWithAnActiveItemSet.js +18 -0
  504. package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +9 -0
  505. package/dist/sets/charactersWithFreeDevilDealsSet.js +6 -0
  506. package/dist/sets/charactersWithNoRedHeartsSet.js +19 -0
  507. package/dist/sets/charactersWithNoSoulHeartsSet.js +16 -0
  508. package/dist/sets/consoleCommandsSet.js +64 -0
  509. package/dist/sets/entitiesWithArmorSet.js +59 -0
  510. package/dist/sets/familiarsThatShootPlayerTearsSet.js +15 -0
  511. package/dist/sets/itemConfigCardTypesForCards.js +14 -0
  512. package/dist/sets/lostStyleCharactersSet.js +16 -0
  513. package/dist/sets/mineShaftRoomSubTypesSet.js +12 -0
  514. package/dist/sets/narrowRoomShapesSet.js +11 -0
  515. package/dist/sets/poopGridEntityXMLTypesSet.js +16 -0
  516. package/dist/sets/redHeartSubTypesSet.js +10 -0
  517. package/dist/sets/repentanceBossIDsSet.js +30 -0
  518. package/dist/sets/sinEntityTypesSet.js +14 -0
  519. package/dist/sets/singleUseActiveCollectibleTypesSet.js +15 -0
  520. package/dist/shaderCrashFix.js +24 -0
  521. package/dist/shouldFire.js +226 -0
  522. package/dist/types/AddSubtract.js +2 -0
  523. package/dist/types/AllButFirst.js +2 -0
  524. package/dist/types/AllButLast.js +2 -0
  525. package/dist/types/AnyClass.js +2 -0
  526. package/dist/types/AnyEntity.js +2 -0
  527. package/dist/types/AnyFunction.js +2 -0
  528. package/dist/types/AnyGridEntity.js +2 -0
  529. package/dist/types/CompositionTypeSatisfiesEnum.js +11 -0
  530. package/dist/types/ConversionHeartSubType.js +2 -0
  531. package/dist/types/Decrement.js +2 -0
  532. package/dist/types/ERange.js +2 -0
  533. package/dist/types/EntityID.js +2 -0
  534. package/dist/types/FunctionTuple.js +2 -0
  535. package/dist/types/GridEntityID.js +2 -0
  536. package/dist/types/HasFunction.js +2 -0
  537. package/dist/types/IRange.js +2 -0
  538. package/dist/types/Immutable.js +2 -0
  539. package/dist/types/Increment.js +2 -0
  540. package/dist/types/LowercaseKeys.js +2 -0
  541. package/dist/types/NaturalNumbersLessThan.js +2 -0
  542. package/dist/types/NaturalNumbersLessThanOrEqualTo.js +2 -0
  543. package/dist/types/PickingUpItem.js +44 -0
  544. package/dist/types/PickupIndex.js +2 -0
  545. package/dist/types/PlayerIndex.js +2 -0
  546. package/dist/types/PossibleStatType.js +2 -0
  547. package/dist/types/PublicInterface.js +2 -0
  548. package/dist/types/ReadonlyMap.js +6 -0
  549. package/dist/types/ReadonlyRecord.js +2 -0
  550. package/dist/types/ReadonlySet.js +6 -0
  551. package/dist/types/StartsWithLowercase.js +2 -0
  552. package/dist/types/StartsWithUppercase.js +2 -0
  553. package/dist/types/TSTLClass.js +2 -0
  554. package/dist/types/Tuple.js +2 -0
  555. package/dist/types/TupleKeys.js +2 -0
  556. package/dist/types/TupleToIntersection.js +2 -0
  557. package/dist/types/TupleToUnion.js +2 -0
  558. package/dist/types/TupleWithLengthBetween.js +22 -0
  559. package/dist/types/TupleWithMaxLength.js +27 -0
  560. package/dist/types/UnionToIntersection.js +2 -0
  561. package/dist/types/UppercaseKeys.js +2 -0
  562. package/dist/types/WeightedArray.js +2 -0
  563. package/dist/types/WidenLiteral.js +2 -0
  564. package/dist/types/Writable.js +2 -0
  565. package/dist/types/private/CallbackTuple.js +2 -0
  566. package/dist/types/private/ModUpgradedWithFeatures.js +2 -0
  567. package/package.json +1 -1
  568. package/src/functions/utils.ts +4 -1
@@ -0,0 +1,196 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RoomHistory = void 0;
10
+ const cachedClasses_1 = require("../../../core/cachedClasses");
11
+ const decorators_1 = require("../../../decorators");
12
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
13
+ const dimensions_1 = require("../../../functions/dimensions");
14
+ const roomData_1 = require("../../../functions/roomData");
15
+ const Feature_1 = require("../../private/Feature");
16
+ const v = {
17
+ run: {
18
+ roomHistory: [],
19
+ },
20
+ };
21
+ class RoomHistory extends Feature_1.Feature {
22
+ /** @internal */
23
+ v = v;
24
+ /** @internal */
25
+ constructor() {
26
+ super();
27
+ this.customCallbacksUsed = [
28
+ [ModCallbackCustom_1.ModCallbackCustom.POST_NEW_ROOM_EARLY, this.postNewRoomEarly],
29
+ ];
30
+ }
31
+ // ModCallbackCustom.POST_NEW_ROOM_EARLY
32
+ postNewRoomEarly = () => {
33
+ const level = cachedClasses_1.game.GetLevel();
34
+ const stage = level.GetStage();
35
+ const stageType = level.GetStageType();
36
+ const room = cachedClasses_1.game.GetRoom();
37
+ const roomType = room.GetType();
38
+ const seeds = cachedClasses_1.game.GetSeeds();
39
+ const startSeedString = seeds.GetStartSeedString();
40
+ const stageID = (0, roomData_1.getRoomStageID)();
41
+ const dimension = (0, dimensions_1.getDimension)();
42
+ const roomVariant = (0, roomData_1.getRoomVariant)();
43
+ const roomSubType = (0, roomData_1.getRoomSubType)();
44
+ const roomName = (0, roomData_1.getRoomName)();
45
+ const roomGridIndex = (0, roomData_1.getRoomGridIndex)();
46
+ const roomListIndex = (0, roomData_1.getRoomListIndex)();
47
+ const roomVisitedCount = (0, roomData_1.getRoomVisitedCount)();
48
+ const roomDescription = {
49
+ startSeedString,
50
+ stage,
51
+ stageType,
52
+ stageID,
53
+ dimension,
54
+ roomType,
55
+ roomVariant,
56
+ roomSubType,
57
+ roomName,
58
+ roomGridIndex,
59
+ roomListIndex,
60
+ roomVisitedCount,
61
+ };
62
+ v.run.roomHistory.push(roomDescription);
63
+ };
64
+ /**
65
+ * Helper function to manually delete the last room description from the internal array. This is
66
+ * useful if a mod needs to send the player to a room temporarily and the room should not count as
67
+ * the player having traveled to that room.
68
+ *
69
+ * @public
70
+ */
71
+ deleteLastRoomDescription() {
72
+ v.run.roomHistory.pop();
73
+ }
74
+ /**
75
+ * Helper function to get the total number of rooms that the player has entered thus far on the
76
+ * run. (Re-entering the same room will increment the number returned.)
77
+ *
78
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_HISTORY`.
79
+ *
80
+ * @public
81
+ */
82
+ getNumRoomsEntered() {
83
+ return v.run.roomHistory.length;
84
+ }
85
+ /**
86
+ * Helper function to get information about all of the rooms that a player has visited thus far on
87
+ * this run.
88
+ *
89
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_HISTORY`.
90
+ *
91
+ * @public
92
+ */
93
+ getRoomHistory() {
94
+ return v.run.roomHistory;
95
+ }
96
+ /**
97
+ * Helper function to get information about the room that was previously visited.
98
+ *
99
+ * In the special case of only one room having been visited thus far (i.e. the starting room of
100
+ * the run), the starting room will be returned.
101
+ *
102
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_HISTORY`.
103
+ *
104
+ * @public
105
+ */
106
+ getPreviousRoomDescription() {
107
+ const previousRoomDescription = v.run.roomHistory.at(-2);
108
+ if (previousRoomDescription !== undefined) {
109
+ return previousRoomDescription;
110
+ }
111
+ const startingRoomDescription = v.run.roomHistory[0];
112
+ if (startingRoomDescription !== undefined) {
113
+ return startingRoomDescription;
114
+ }
115
+ error("Failed to find a room description for any rooms thus far on this run.");
116
+ }
117
+ /**
118
+ * Helper function to get information about the most recent room that is stored in the room
119
+ * history array.
120
+ *
121
+ * This is useful in the `POST_ENTITY_REMOVE` callback; see the `isLeavingRoom` function.
122
+ *
123
+ * Note that this function can return undefined in the case where it is called on the first room
124
+ * of the run.
125
+ *
126
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_HISTORY`.
127
+ *
128
+ * @public
129
+ */
130
+ getLatestRoomDescription() {
131
+ return v.run.roomHistory.at(-1);
132
+ }
133
+ /**
134
+ * Helper function to detect if the player is on the first room of the room.
135
+ *
136
+ * @public
137
+ */
138
+ inFirstRoom() {
139
+ return v.run.roomHistory.length === 1;
140
+ }
141
+ /**
142
+ * Helper function to detect if the game is in the state where the room index has changed to a new
143
+ * room, but the entities from the previous room are currently in the process of despawning. (At
144
+ * this point, the `POST_NEW_ROOM` callback and the `POST_NEW_ROOM_EARLY` callback will not have
145
+ * fired yet, and there will not be an entry in the room history array for the current room.)
146
+ *
147
+ * This function is intended to be used in the `POST_ENTITY_REMOVE` callback to detect when an
148
+ * entity is despawning.
149
+ *
150
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_HISTORY`.
151
+ *
152
+ * @public
153
+ */
154
+ isLeavingRoom() {
155
+ const level = cachedClasses_1.game.GetLevel();
156
+ const stage = level.GetStage();
157
+ const stageType = level.GetStageType();
158
+ const seeds = cachedClasses_1.game.GetSeeds();
159
+ const startSeedString = seeds.GetStartSeedString();
160
+ const roomListIndex = (0, roomData_1.getRoomListIndex)();
161
+ const roomVisitedCount = (0, roomData_1.getRoomVisitedCount)();
162
+ const latestRoomDescription = this.getLatestRoomDescription();
163
+ // Sometimes, this function can be called in situations where entities from the previous run are
164
+ // being despawned. If this is the case, then the room history will currently be empty.
165
+ if (latestRoomDescription === undefined) {
166
+ return false;
167
+ }
168
+ return (startSeedString !== latestRoomDescription.startSeedString ||
169
+ stage !== latestRoomDescription.stage ||
170
+ stageType !== latestRoomDescription.stageType ||
171
+ roomListIndex !== latestRoomDescription.roomListIndex ||
172
+ roomVisitedCount !== latestRoomDescription.roomVisitedCount);
173
+ }
174
+ }
175
+ exports.RoomHistory = RoomHistory;
176
+ __decorate([
177
+ decorators_1.Exported
178
+ ], RoomHistory.prototype, "deleteLastRoomDescription", null);
179
+ __decorate([
180
+ decorators_1.Exported
181
+ ], RoomHistory.prototype, "getNumRoomsEntered", null);
182
+ __decorate([
183
+ decorators_1.Exported
184
+ ], RoomHistory.prototype, "getRoomHistory", null);
185
+ __decorate([
186
+ decorators_1.Exported
187
+ ], RoomHistory.prototype, "getPreviousRoomDescription", null);
188
+ __decorate([
189
+ decorators_1.Exported
190
+ ], RoomHistory.prototype, "getLatestRoomDescription", null);
191
+ __decorate([
192
+ decorators_1.Exported
193
+ ], RoomHistory.prototype, "inFirstRoom", null);
194
+ __decorate([
195
+ decorators_1.Exported
196
+ ], RoomHistory.prototype, "isLeavingRoom", null);
@@ -0,0 +1,323 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RunInNFrames = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const cachedClasses_1 = require("../../../core/cachedClasses");
12
+ const decorators_1 = require("../../../decorators");
13
+ const ISCFeature_1 = require("../../../enums/ISCFeature");
14
+ const array_1 = require("../../../functions/array");
15
+ const run_1 = require("../../../functions/run");
16
+ const Feature_1 = require("../../private/Feature");
17
+ const v = {
18
+ run: {
19
+ queuedGameFunctions: [],
20
+ queuedRenderFunctions: [],
21
+ intervalGameFunctions: [],
22
+ intervalRenderFunctions: [],
23
+ },
24
+ };
25
+ class RunInNFrames extends Feature_1.Feature {
26
+ /** @internal */
27
+ v = v;
28
+ vConditionalFunc = () => false;
29
+ roomHistory;
30
+ /** @internal */
31
+ constructor(roomHistory) {
32
+ super();
33
+ this.featuresUsed = [ISCFeature_1.ISCFeature.ROOM_HISTORY];
34
+ this.callbacksUsed = [
35
+ // 1
36
+ [isaac_typescript_definitions_1.ModCallback.POST_UPDATE, this.postUpdate],
37
+ // 2
38
+ [isaac_typescript_definitions_1.ModCallback.POST_RENDER, this.postRender],
39
+ ];
40
+ this.roomHistory = roomHistory;
41
+ }
42
+ // ModCallback.POST_UPDATE (1)
43
+ postUpdate = () => {
44
+ const gameFrameCount = cachedClasses_1.game.GetFrameCount();
45
+ const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
46
+ checkExecuteQueuedFunctions(v.run.queuedGameFunctions, gameFrameCount, numRoomsEntered);
47
+ checkExecuteIntervalFunctions(v.run.intervalGameFunctions, gameFrameCount, numRoomsEntered);
48
+ };
49
+ // ModCallback.POST_RENDER (2)
50
+ postRender = () => {
51
+ const renderFrameCount = Isaac.GetFrameCount();
52
+ const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
53
+ checkExecuteQueuedFunctions(v.run.queuedRenderFunctions, renderFrameCount, numRoomsEntered);
54
+ checkExecuteIntervalFunctions(v.run.intervalRenderFunctions, renderFrameCount, numRoomsEntered);
55
+ };
56
+ /**
57
+ * Helper function to restart on the next render frame. Useful because it is impossible to restart
58
+ * the game inside of the `POST_NEW_ROOM`, `POST_NEW_LEVEL`, or `POST_GAME_STARTED` callbacks when
59
+ * a run is first starting.
60
+ *
61
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
62
+ *
63
+ * @param character Optional. If specified, will restart the game as the specified character.
64
+ * @public
65
+ */
66
+ restartNextRenderFrame(character) {
67
+ this.runNextRenderFrame(() => {
68
+ (0, run_1.restart)(character);
69
+ });
70
+ }
71
+ /**
72
+ * Supply a function to run N game frames from now in the `POST_UPDATE` callback.
73
+ *
74
+ * For a usage example, see the documentation for the `runNextGameFrame`, which is used in a
75
+ * similar way.
76
+ *
77
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
78
+ * before the deferred function fires would cause a bug in your mod, then you should handle
79
+ * deferred functions manually using serializable data.
80
+ *
81
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
82
+ *
83
+ * @param func The function to run.
84
+ * @param numGameFrames The amount of game frames to wait before running the function.
85
+ * @param cancelIfRoomChanges Optional. Whether to cancel running the function if a new room is
86
+ * loaded in the interim. Default is false.
87
+ * @public
88
+ */
89
+ runInNGameFrames(func, numGameFrames, cancelIfRoomChanges = false) {
90
+ const gameFrameCount = cachedClasses_1.game.GetFrameCount();
91
+ const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
92
+ const frameCountToFire = gameFrameCount + numGameFrames;
93
+ const queuedFunction = {
94
+ func,
95
+ frameCountToFire,
96
+ numRoomsEntered,
97
+ cancelIfRoomChanges,
98
+ };
99
+ v.run.queuedGameFunctions.push(queuedFunction);
100
+ }
101
+ /**
102
+ * Supply a function to run N render frames from now in the `POST_RENDER` callback.
103
+ *
104
+ * For a usage example, see the documentation for the `runNextGameFrame`, which is used in a
105
+ * similar way.
106
+ *
107
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
108
+ * before the deferred function fires would cause a bug in your mod, then you should handle
109
+ * deferred functions manually using serializable data.
110
+ *
111
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
112
+ *
113
+ * @param func The function to run.
114
+ * @param numRenderFrames The amount of render frames to wait before running the function.
115
+ * @param cancelIfRoomChanges Optional. Whether to cancel running the function if a new room is
116
+ * loaded in the interim. Default is false.
117
+ * @public
118
+ */
119
+ runInNRenderFrames(func, numRenderFrames, cancelIfRoomChanges = false) {
120
+ const renderFrameCount = Isaac.GetFrameCount();
121
+ const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
122
+ const frameCountToFire = renderFrameCount + numRenderFrames;
123
+ const queuedFunction = {
124
+ func,
125
+ frameCountToFire,
126
+ numRoomsEntered,
127
+ cancelIfRoomChanges,
128
+ };
129
+ v.run.queuedRenderFunctions.push(queuedFunction);
130
+ }
131
+ /**
132
+ * Supply a function to run on the next `POST_UPDATE` callback.
133
+ *
134
+ * For example:
135
+ *
136
+ * ```ts
137
+ * const NUM_EXPLODER_EXPLOSIONS = 5;
138
+ *
139
+ * function useItemExploder(player: EntityPlayer) {
140
+ * playSound("exploderBegin");
141
+ * explode(player, NUM_EXPLODER_EXPLOSIONS);
142
+ * }
143
+ *
144
+ * function explode(player: EntityPlayer, numFramesLeft: int) {
145
+ * Isaac.Explode(player, undefined, 1);
146
+ * numFramesLeft -= 1;
147
+ * if (numFramesLeft === 0) {
148
+ * runNextFrame(() => {
149
+ * explode(player, numFramesLeft);
150
+ * });
151
+ * }
152
+ * }
153
+ * ```
154
+ *
155
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
156
+ * before the deferred function fires would cause a bug in your mod, then you should handle
157
+ * deferred functions manually using serializable data.
158
+ *
159
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
160
+ *
161
+ * @param func The function to run.
162
+ * @param cancelIfRoomChanges Optional. Whether to cancel running the function if a new room is
163
+ * loaded in the interim. Default is false.
164
+ * @public
165
+ */
166
+ runNextGameFrame(func, cancelIfRoomChanges = false) {
167
+ this.runInNGameFrames(func, 1, cancelIfRoomChanges);
168
+ }
169
+ /**
170
+ * Supply a function to run on the next `POST_RENDER` callback.
171
+ *
172
+ * For a usage example, see the documentation for the `runNextGameFrame`, which is used in a
173
+ * similar way.
174
+ *
175
+ * Note that this function will not handle saving and quitting.
176
+ *
177
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
178
+ *
179
+ * @param func The function to run.
180
+ * @param cancelIfRoomChanges Optional. Whether to cancel running the function if a new room is
181
+ * loaded in the interim. Default is false.
182
+ * @public
183
+ */
184
+ runNextRenderFrame(func, cancelIfRoomChanges = false) {
185
+ this.runInNRenderFrames(func, 1, cancelIfRoomChanges);
186
+ }
187
+ /**
188
+ * Supply a function to be repeatedly run on an interval of N game frames in the `POST_UPDATE`
189
+ * callback. The function will continue to be fired until `false` is returned from the function.
190
+ *
191
+ * This is similar to the `setInterval` vanilla JavaScript function, except there is no
192
+ * corresponding `clearInterval` function. (Instead, the return value from the supplied function
193
+ * is used to stop the interval.)
194
+ *
195
+ * Note that this function will not handle saving and quitting. You must manually restart any
196
+ * intervals if the player saves and quits in the middle of a run.
197
+ *
198
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
199
+ *
200
+ * @param func The function to repeatedly run on an interval.
201
+ * @param numGameFrames The amount of game frames to wait between each run.
202
+ * @param runImmediately Whether to execute the function right now before waiting for the
203
+ * interval.
204
+ * @param cancelIfRoomChanges Optional. Whether to cancel running the function if a new room is
205
+ * loaded in the interim. Default is false.
206
+ * @public
207
+ */
208
+ setIntervalGameFrames(func, numGameFrames, runImmediately, cancelIfRoomChanges = false) {
209
+ if (runImmediately) {
210
+ const returnValue = func();
211
+ if (!returnValue) {
212
+ return;
213
+ }
214
+ }
215
+ const gameFrameCount = cachedClasses_1.game.GetFrameCount();
216
+ const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
217
+ const intervalFunction = {
218
+ func,
219
+ frameCountToFire: gameFrameCount + numGameFrames,
220
+ numRoomsEntered,
221
+ cancelIfRoomChanges,
222
+ numIntervalFrames: numGameFrames,
223
+ };
224
+ v.run.intervalGameFunctions.push(intervalFunction);
225
+ }
226
+ /**
227
+ * Supply a function to be repeatedly run on an interval of N render frames in the `POST_RENDER`
228
+ * callback. The function will continue to be fired until `false` is returned from the function.
229
+ *
230
+ * This is similar to the `setInterval` vanilla JavaScript function, except there is no
231
+ * corresponding `clearInterval` function. (Instead, the return value from the supplied function
232
+ * is used to stop the interval.)
233
+ *
234
+ * Note that this function will not handle saving and quitting. You must manually restart any
235
+ * intervals if the player saves and quits in the middle of a run.
236
+ *
237
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_IN_N_FRAMES`.
238
+ *
239
+ * @param func The function to repeatedly run on an interval.
240
+ * @param numRenderFrames The amount of game frames to wait between each run.
241
+ * @param runImmediately Whether to execute the function right now before waiting for the
242
+ * interval.
243
+ * @param cancelIfRoomChanges Optional. Whether to cancel running the function if a new room is
244
+ * loaded in the interim. Default is false.
245
+ * @public
246
+ */
247
+ setIntervalRenderFrames(func, numRenderFrames, runImmediately, cancelIfRoomChanges = false) {
248
+ if (runImmediately) {
249
+ const returnValue = func();
250
+ if (!returnValue) {
251
+ return;
252
+ }
253
+ }
254
+ const renderFrameCount = Isaac.GetFrameCount();
255
+ const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
256
+ const intervalFunction = {
257
+ func,
258
+ frameCountToFire: renderFrameCount + numRenderFrames,
259
+ numRoomsEntered,
260
+ cancelIfRoomChanges,
261
+ numIntervalFrames: numRenderFrames,
262
+ };
263
+ v.run.intervalRenderFunctions.push(intervalFunction);
264
+ }
265
+ }
266
+ exports.RunInNFrames = RunInNFrames;
267
+ __decorate([
268
+ decorators_1.Exported
269
+ ], RunInNFrames.prototype, "restartNextRenderFrame", null);
270
+ __decorate([
271
+ decorators_1.Exported
272
+ ], RunInNFrames.prototype, "runInNGameFrames", null);
273
+ __decorate([
274
+ decorators_1.Exported
275
+ ], RunInNFrames.prototype, "runInNRenderFrames", null);
276
+ __decorate([
277
+ decorators_1.Exported
278
+ ], RunInNFrames.prototype, "runNextGameFrame", null);
279
+ __decorate([
280
+ decorators_1.Exported
281
+ ], RunInNFrames.prototype, "runNextRenderFrame", null);
282
+ __decorate([
283
+ decorators_1.Exported
284
+ ], RunInNFrames.prototype, "setIntervalGameFrames", null);
285
+ __decorate([
286
+ decorators_1.Exported
287
+ ], RunInNFrames.prototype, "setIntervalRenderFrames", null);
288
+ function checkExecuteQueuedFunctions(
289
+ // eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
290
+ queuedFunctions, frameCount, newNumRoomsEntered) {
291
+ const firingFunctions = queuedFunctions.filter(({ frameCountToFire }) => frameCount >= frameCountToFire);
292
+ for (const firingFunction of firingFunctions) {
293
+ const { func, cancelIfRoomChanges, numRoomsEntered } = firingFunction;
294
+ if (!cancelIfRoomChanges || numRoomsEntered === newNumRoomsEntered) {
295
+ func();
296
+ }
297
+ (0, array_1.arrayRemoveInPlace)(queuedFunctions, firingFunction);
298
+ }
299
+ }
300
+ function checkExecuteIntervalFunctions(
301
+ // eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
302
+ intervalFunctions, frameCount, newNumRoomsEntered) {
303
+ const firingFunctions = intervalFunctions.filter(({ frameCountToFire }) => frameCount >= frameCountToFire);
304
+ for (const firingFunction of firingFunctions) {
305
+ const { func, cancelIfRoomChanges, numRoomsEntered, numIntervalFrames } = firingFunction;
306
+ let returnValue = false;
307
+ if (!cancelIfRoomChanges || numRoomsEntered === newNumRoomsEntered) {
308
+ returnValue = func();
309
+ }
310
+ (0, array_1.arrayRemoveInPlace)(intervalFunctions, firingFunction);
311
+ // Queue the next interval (as long as the function did not return false).
312
+ if (returnValue) {
313
+ const newIntervalFunction = {
314
+ func,
315
+ frameCountToFire: frameCount + numIntervalFrames,
316
+ numRoomsEntered,
317
+ cancelIfRoomChanges,
318
+ numIntervalFrames,
319
+ };
320
+ intervalFunctions.push(newIntervalFunction);
321
+ }
322
+ }
323
+ }
@@ -0,0 +1,53 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RunNextRoom = void 0;
10
+ const decorators_1 = require("../../../decorators");
11
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
12
+ const array_1 = require("../../../functions/array");
13
+ const Feature_1 = require("../../private/Feature");
14
+ const v = {
15
+ run: {
16
+ queuedFunctions: [],
17
+ },
18
+ };
19
+ class RunNextRoom extends Feature_1.Feature {
20
+ /** @internal */
21
+ v = v;
22
+ vConditionalFunc = () => false;
23
+ /** @internal */
24
+ constructor() {
25
+ super();
26
+ this.customCallbacksUsed = [
27
+ [ModCallbackCustom_1.ModCallbackCustom.POST_NEW_ROOM_REORDERED, this.postNewRoomReordered],
28
+ ];
29
+ }
30
+ // ModCallbackCustom.POST_NEW_ROOM_REORDERED
31
+ postNewRoomReordered = () => {
32
+ for (const func of v.run.queuedFunctions) {
33
+ func();
34
+ }
35
+ (0, array_1.emptyArray)(v.run.queuedFunctions);
36
+ };
37
+ /**
38
+ * Supply a function to run on the next `POST_NEW_ROOM` callback.
39
+ *
40
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
41
+ * before the deferred function fires would cause a bug in your mod, then you should handle
42
+ * deferred functions manually using serializable data.
43
+ *
44
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_NEXT_ROOM`.
45
+ */
46
+ runNextRoom(func) {
47
+ v.run.queuedFunctions.push(func);
48
+ }
49
+ }
50
+ exports.RunNextRoom = RunNextRoom;
51
+ __decorate([
52
+ decorators_1.Exported
53
+ ], RunNextRoom.prototype, "runNextRoom", null);
@@ -0,0 +1,60 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.RunNextRun = void 0;
10
+ const decorators_1 = require("../../../decorators");
11
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
12
+ const array_1 = require("../../../functions/array");
13
+ const Feature_1 = require("../../private/Feature");
14
+ const v = {
15
+ persistent: {
16
+ queuedFunctions: [],
17
+ },
18
+ };
19
+ class RunNextRun extends Feature_1.Feature {
20
+ /** @internal */
21
+ v = v;
22
+ vConditionalFunc = () => false;
23
+ /** @internal */
24
+ constructor() {
25
+ super();
26
+ this.customCallbacksUsed = [
27
+ [
28
+ ModCallbackCustom_1.ModCallbackCustom.POST_GAME_STARTED_REORDERED,
29
+ this.postGameStartedReorderedFalse,
30
+ [false],
31
+ ],
32
+ ];
33
+ }
34
+ // ModCallbackCustom.POST_GAME_STARTED_REORDERED
35
+ // false
36
+ postGameStartedReorderedFalse = () => {
37
+ for (const func of v.persistent.queuedFunctions) {
38
+ func();
39
+ }
40
+ (0, array_1.emptyArray)(v.persistent.queuedFunctions);
41
+ };
42
+ /**
43
+ * Supply a function to run on the next `POST_GAME_STARTED` callback.
44
+ *
45
+ * Note that this function will not handle saving and quitting. If a player saving and quitting
46
+ * before the deferred function fires would cause a bug in your mod, then you should handle
47
+ * deferred functions manually using serializable data.
48
+ *
49
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RUN_NEXT_ROOM`.
50
+ *
51
+ * @public
52
+ */
53
+ runNextRun(func) {
54
+ v.persistent.queuedFunctions.push(func);
55
+ }
56
+ }
57
+ exports.RunNextRun = RunNextRun;
58
+ __decorate([
59
+ decorators_1.Exported
60
+ ], RunNextRun.prototype, "runNextRun", null);