isaacscript-common 84.0.0 → 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 +4 -1
  383. package/dist/functions/utils.d.ts.map +1 -1
  384. package/dist/functions/utils.js +195 -0
  385. package/dist/functions/utils.lua +6 -2
  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 +4 -1
  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 +7 -3
  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 +6 -2
@@ -0,0 +1,244 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.validateInterfaceMatchesEnum = exports.validateEnumContiguous = exports.validateCustomEnum = exports.isEnumValue = exports.getRandomEnumValue = exports.getLowestEnumValue = exports.getHighestEnumValue = exports.getEnumValues = exports.getEnumNames = exports.getEnumLength = exports.getEnumKeys = exports.getEnumEntries = void 0;
4
+ const ReadonlySet_1 = require("../types/ReadonlySet");
5
+ const array_1 = require("./array");
6
+ const types_1 = require("./types");
7
+ const utils_1 = require("./utils");
8
+ /**
9
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
10
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
11
+ * enums, in a random order. Use this helper function to get the entries of the enum with the
12
+ * reverse mappings filtered out.
13
+ *
14
+ * This function will return the enum values in a sorted order, which may not necessarily be the
15
+ * same order as which they were declared in. (It is impossible to get the declaration order at
16
+ * run-time.)
17
+ *
18
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
19
+ * not created for string enums.)
20
+ *
21
+ * Also see the `getEnumKeys` and `getEnumValues` helper functions.
22
+ *
23
+ * For a more in depth explanation, see:
24
+ * https://isaacscript.github.io/main/gotchas#iterating-over-enums
25
+ */
26
+ function getEnumEntries(transpiledEnum) {
27
+ // The values cannot simply be type `T` due to the special construction of bit flag enums.
28
+ const enumEntries = [];
29
+ for (const [key, value] of pairs(transpiledEnum)) {
30
+ // Ignore the reverse mappings created by TypeScriptToLua. Note that reverse mappings are not
31
+ // created for string enums.
32
+ if ((0, types_1.isString)(key)) {
33
+ enumEntries.push([key, value]);
34
+ }
35
+ }
36
+ // The enums will be in a random order (because of "pairs"), so sort them based on the values.
37
+ // https://stackoverflow.com/questions/5199901/how-to-sort-an-associative-array-by-its-values-in-javascript
38
+ enumEntries.sort(([_key1, value1], [_key2, value2]) => value1 < value2 ? -1 : value1 > value2 ? 1 : 0);
39
+ return enumEntries;
40
+ }
41
+ exports.getEnumEntries = getEnumEntries;
42
+ /**
43
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
44
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
45
+ * enums, in a random order. If all you need are the keys of an enum, use this helper function.
46
+ *
47
+ * This function will return the enum keys in a sorted order, which may not necessarily be the same
48
+ * order as which they were declared in. (It is impossible to get the declaration order at
49
+ * run-time.)
50
+ *
51
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
52
+ * not created for string enums.)
53
+ *
54
+ * Also see the `getEnumEntries` and `getEnumValues` helper functions.
55
+ *
56
+ * For a more in depth explanation, see:
57
+ * https://isaacscript.github.io/main/gotchas#iterating-over-enums
58
+ */
59
+ function getEnumKeys(transpiledEnum) {
60
+ const enumEntries = getEnumEntries(transpiledEnum);
61
+ return enumEntries.map(([key, _value]) => key);
62
+ }
63
+ exports.getEnumKeys = getEnumKeys;
64
+ /** Helper function to get the amount of entries inside of an enum. */
65
+ function getEnumLength(transpiledEnum) {
66
+ const enumEntries = getEnumEntries(transpiledEnum);
67
+ return enumEntries.length;
68
+ }
69
+ exports.getEnumLength = getEnumLength;
70
+ /**
71
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
72
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
73
+ * enums, in a random order. If all you need are the names of an enum from the reverse mapping, use
74
+ * this helper function.
75
+ *
76
+ * This function will return the enum names in a sorted order, which may not necessarily be the same
77
+ * order as which they were declared in. (It is impossible to get the declaration order at
78
+ * run-time.)
79
+ *
80
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
81
+ * not created for string enums, so their names would be equivalent to what would be returned by the
82
+ * `getEnumKeys` function.)
83
+ *
84
+ * For a more in depth explanation, see:
85
+ * https://isaacscript.github.io/main/gotchas#iterating-over-enums
86
+ */
87
+ function getEnumNames(transpiledEnum) {
88
+ const enumNames = [];
89
+ for (const [key, _value] of pairs(transpiledEnum)) {
90
+ if ((0, types_1.isString)(key)) {
91
+ enumNames.push(key);
92
+ }
93
+ }
94
+ // The enum names will be in a random order (because of "pairs"), so sort them.
95
+ enumNames.sort();
96
+ return enumNames;
97
+ }
98
+ exports.getEnumNames = getEnumNames;
99
+ /**
100
+ * TypeScriptToLua will transpile TypeScript number enums to Lua tables that have a double mapping.
101
+ * Thus, when you iterate over them, you will get both the names of the enums and the values of the
102
+ * enums, in a random order. If all you need are the values of an enum, use this helper function.
103
+ *
104
+ * This function will return the enum values in a sorted order, which may not necessarily be the
105
+ * same order as which they were declared in. (It is impossible to get the declaration order at
106
+ * run-time.)
107
+ *
108
+ * This function will work properly for both number enums and string enums. (Reverse mappings are
109
+ * not created for string enums.)
110
+ *
111
+ * Also see the `getEnumEntries` and `getEnumKeys` helper functions.
112
+ *
113
+ * For a more in depth explanation, see:
114
+ * https://isaacscript.github.io/main/gotchas#iterating-over-enums
115
+ */
116
+ function getEnumValues(transpiledEnum) {
117
+ const enumEntries = getEnumEntries(transpiledEnum);
118
+ return enumEntries.map(([_key, value]) => value);
119
+ }
120
+ exports.getEnumValues = getEnumValues;
121
+ /**
122
+ * Helper function to get the enum value with the highest value.
123
+ *
124
+ * Note that this is not necessarily the enum value that is declared last in the code, since there
125
+ * is no way to infer that at run-time.
126
+ *
127
+ * Throws an error if the provided enum is empty.
128
+ */
129
+ function getHighestEnumValue(transpiledEnum) {
130
+ const enumValues = getEnumValues(transpiledEnum);
131
+ const lastElement = enumValues.at(-1);
132
+ (0, utils_1.assertDefined)(lastElement, "Failed to get the last value from an enum since the enum was empty.");
133
+ return lastElement;
134
+ }
135
+ exports.getHighestEnumValue = getHighestEnumValue;
136
+ /**
137
+ * Helper function to get the enum value with the lowest value.
138
+ *
139
+ * Note that this is not necessarily the enum value that is declared first in the code, since there
140
+ * is no way to infer that at run-time.
141
+ *
142
+ * Throws an error if the provided enum is empty.
143
+ */
144
+ function getLowestEnumValue(transpiledEnum) {
145
+ const enumValues = getEnumValues(transpiledEnum);
146
+ const firstElement = enumValues[0];
147
+ (0, utils_1.assertDefined)(firstElement, "Failed to get the first value from an enum since the enum was empty.");
148
+ return firstElement;
149
+ }
150
+ exports.getLowestEnumValue = getLowestEnumValue;
151
+ /**
152
+ * Helper function to get a random value from the provided enum.
153
+ *
154
+ * If you want an unseeded value, you must explicitly pass `undefined` to the `seedOrRNG` parameter.
155
+ *
156
+ * @param transpiledEnum The enum to get the value from.
157
+ * @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
158
+ * `RNG.Next` method will be called. If `undefined` is provided, it will default to
159
+ * a random seed.
160
+ * @param exceptions Optional. An array of elements to skip over if selected.
161
+ */
162
+ function getRandomEnumValue(transpiledEnum, seedOrRNG, exceptions = []) {
163
+ const enumValues = getEnumValues(transpiledEnum);
164
+ return (0, array_1.getRandomArrayElement)(enumValues, seedOrRNG, exceptions);
165
+ }
166
+ exports.getRandomEnumValue = getRandomEnumValue;
167
+ /** Helper function to validate that a particular value exists inside of an enum. */
168
+ function isEnumValue(value, transpiledEnum) {
169
+ const enumValues = getEnumValues(transpiledEnum);
170
+ return enumValues.includes(value);
171
+ }
172
+ exports.isEnumValue = isEnumValue;
173
+ /**
174
+ * Helper function to check every value of a custom enum for -1. Will throw an run-time error if any
175
+ * -1 values are found. This is helpful because many methods of the Isaac class return -1 if they
176
+ * fail.
177
+ *
178
+ * For example:
179
+ *
180
+ * ```ts
181
+ * enum EntityTypeCustom {
182
+ * FOO = Isaac.GetEntityTypeByName("Foo"),
183
+ * }
184
+ *
185
+ * validateCustomEnum("EntityTypeCustom", EntityTypeCustom);
186
+ * ```
187
+ */
188
+ function validateCustomEnum(transpiledEnumName, transpiledEnum) {
189
+ for (const [key, value] of getEnumEntries(transpiledEnum)) {
190
+ if (value === -1) {
191
+ error(`Failed to find the custom enum value: ${transpiledEnumName}.${key}`);
192
+ }
193
+ }
194
+ }
195
+ exports.validateCustomEnum = validateCustomEnum;
196
+ /**
197
+ * Helper function to validate if every value in a number enum is contiguous, starting at 0.
198
+ *
199
+ * This is useful to automate checking large enums for typos.
200
+ */
201
+ function validateEnumContiguous(transpiledEnumName, transpiledEnum) {
202
+ const values = getEnumValues(transpiledEnum);
203
+ const lastValue = values.at(-1);
204
+ (0, utils_1.assertDefined)(lastValue, "Failed to validate that an enum was contiguous, since the last value was undefined.");
205
+ if (!(0, types_1.isNumber)(lastValue)) {
206
+ error("Failed to validate that an enum was contiguous, since the last value was not a number.");
207
+ }
208
+ const valuesSet = new ReadonlySet_1.ReadonlySet(values);
209
+ for (const value of (0, utils_1.iRange)(lastValue)) {
210
+ if (!valuesSet.has(value)) {
211
+ error(`Failed to find a custom enum value of ${value} for: ${transpiledEnumName}`);
212
+ }
213
+ }
214
+ }
215
+ exports.validateEnumContiguous = validateEnumContiguous;
216
+ /**
217
+ * Helper function to validate that an interface contains all of the keys of an enum. You must
218
+ * specify both generic parameters in order for this to work properly (i.e. the interface and then
219
+ * the enum).
220
+ *
221
+ * For example:
222
+ *
223
+ * ```ts
224
+ * enum MyEnum {
225
+ * Value1,
226
+ * Value2,
227
+ * Value3,
228
+ * }
229
+ *
230
+ * interface MyEnumToType {
231
+ * [MyEnum.Value1]: boolean;
232
+ * [MyEnum.Value2]: number;
233
+ * [MyEnum.Value3]: string;
234
+ * }
235
+ *
236
+ * validateInterfaceMatchesEnum<MyEnumToType, MyEnum>();
237
+ * ```
238
+ *
239
+ * This function is only meant to be used with interfaces (i.e. types that will not exist at
240
+ * run-time). If you are generating an object that will contain all of the keys of an enum, use the
241
+ * `satisfies` operator with the `Record` type instead.
242
+ */
243
+ function validateInterfaceMatchesEnum() { } // eslint-disable-line @typescript-eslint/no-empty-function
244
+ exports.validateInterfaceMatchesEnum = validateInterfaceMatchesEnum;
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * Helper functions that have to do with external programs.
4
+ *
5
+ * @module
6
+ */
7
+ Object.defineProperty(exports, "__esModule", { value: true });
8
+ exports.rebirthItemTrackerWriteToFile = exports.rebirthItemTrackerRemoveCollectible = void 0;
9
+ const collectibles_1 = require("./collectibles");
10
+ const REBIRTH_ITEM_TRACKER_REMOVE_COLLECTIBLE_COMMAND = "REBIRTH_ITEM_TRACKER_REMOVE_COLLECTIBLE";
11
+ const REBIRTH_ITEM_TRACKER_WRITE_TO_FILE_COMMAND = "REBIRTH_ITEM_TRACKER_WRITE_TO_FILE";
12
+ /**
13
+ * Helper function to let the Rebirth Item Tracker know that it should remove a collectible from its
14
+ * list.
15
+ *
16
+ * The "item tracker" in this function does not refer to the in-game item tracker, but rather to the
17
+ * external Python program.
18
+ *
19
+ * This function is variadic, meaning that you can pass as many collectible types as you want to
20
+ * remove.
21
+ *
22
+ * Note that calling this function is not normally necessary when removing collectibles from
23
+ * players. For example, when you remove a collectible with the `EntityPlayer.RemoveCollectible`
24
+ * method, a message is sent to the log file by the game and the item tracker will automatically
25
+ * remove it. However, in some cases, manually removing collectibles can be useful:
26
+ *
27
+ * - We may be giving the player a "fake" collectible (e.g. 1-Up for the purposes of an extra life)
28
+ * and do not want the fake collectible to show up on the tracker.
29
+ * - We may be removing a starting active item. Since active items are never removed from the
30
+ * tracker, we want to tell the item tracker that the player never had a particular active item to
31
+ * begin with.
32
+ *
33
+ * @see https://github.com/Rchardon/RebirthItemTracker
34
+ */
35
+ function rebirthItemTrackerRemoveCollectible(...collectibleTypes) {
36
+ for (const collectibleType of collectibleTypes) {
37
+ // This cannot use the "log" function since the prefix will prevent the Rebirth Item Tracker
38
+ // from recognizing the message.
39
+ const collectibleName = (0, collectibles_1.getCollectibleName)(collectibleType);
40
+ Isaac.DebugString(`${REBIRTH_ITEM_TRACKER_REMOVE_COLLECTIBLE_COMMAND} Removing collectible ${collectibleType} (${collectibleName}) on player 0 (Player)`);
41
+ }
42
+ }
43
+ exports.rebirthItemTrackerRemoveCollectible = rebirthItemTrackerRemoveCollectible;
44
+ /**
45
+ * Helper function to let the Rebirth Item Tracker know that it should write the submitted text
46
+ * string to a file. This is useful for capturing text in programs like Open Broadcaster Software
47
+ * (OBS).
48
+ *
49
+ * The "item tracker" in this function does not refer to the in-game item tracker, but rather to the
50
+ * external Python program.
51
+ *
52
+ * @see https://github.com/Rchardon/RebirthItemTracker
53
+ */
54
+ function rebirthItemTrackerWriteToFile(msg) {
55
+ // This cannot use the "log" function since the prefix will prevent the Rebirth Item Tracker from
56
+ // recognizing the message.
57
+ Isaac.DebugString(`${REBIRTH_ITEM_TRACKER_WRITE_TO_FILE_COMMAND} ${msg}`);
58
+ }
59
+ exports.rebirthItemTrackerWriteToFile = rebirthItemTrackerWriteToFile;
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isFamiliarThatShootsPlayerTears = exports.isFamiliarStolenBySiren = exports.getSirenHelper = exports.getPlayerFamiliars = exports.checkFamiliarFromCollectibles = exports.checkFamiliar = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const cachedClasses_1 = require("../core/cachedClasses");
6
+ const familiarsThatShootPlayerTearsSet_1 = require("../sets/familiarsThatShootPlayerTearsSet");
7
+ const entities_1 = require("./entities");
8
+ const entitiesSpecific_1 = require("./entitiesSpecific");
9
+ const rng_1 = require("./rng");
10
+ /**
11
+ * Instead of generating a new RNG object every time we need to spawn a new familiar, we instead
12
+ * re-use the same RNG object. This makes it less likely that the `InitSeed` of the familiar will
13
+ * overlap, since we are "nexting" instead of doing a fresh reroll.
14
+ */
15
+ const familiarGenerationRNG = (0, rng_1.newRNG)();
16
+ /**
17
+ * Helper function to add and remove familiars based on a target amount that you specify.
18
+ *
19
+ * This is a convenience wrapper around the `EntityPlayer.CheckFamiliar` method. Use this helper
20
+ * function instead so that you do not have to retrieve the `ItemConfigItem` and so that you do not
21
+ * specify an incorrect RNG object. (The vanilla method is bugged in that it does not increment the
22
+ * RNG object; see the documentation of the method for more details.)
23
+ *
24
+ * This function is meant to be called in the `EVALUATE_CACHE` callback (when the cache flag is
25
+ * equal to `CacheFlag.FAMILIARS`).
26
+ *
27
+ * Note that this function is only meant to be used in special circumstances where the familiar
28
+ * count is completely custom and does not correspond to the amount of collectibles. For the general
29
+ * case, use the `checkFamiliarFromCollectibles` helper function instead.
30
+ *
31
+ * Note that this will spawn familiars with a completely random `InitSeed`. When calculating random
32
+ * events for this familiar, you should use a data structure that maps familiar `InitSeed` to RNG
33
+ * objects that are initialized based on the seed from
34
+ * `EntityPlayer.GetCollectibleRNG(collectibleType)`.
35
+ *
36
+ * @param player The player that owns the familiars.
37
+ * @param collectibleType The collectible type of the collectible associated with this familiar.
38
+ * @param targetCount The number of familiars that should exist. This function will add or remove
39
+ * familiars until it matches the target count.
40
+ * @param familiarVariant The variant of the familiar to spawn or remove.
41
+ * @param familiarSubType Optional. The sub-type of the familiar to spawn or remove. If not
42
+ * specified, it will search for existing familiars of all sub-types, and
43
+ * spawn new familiars with a sub-type of 0.
44
+ */
45
+ function checkFamiliar(player, collectibleType, targetCount, familiarVariant, familiarSubType) {
46
+ familiarGenerationRNG.Next();
47
+ const itemConfigItem = cachedClasses_1.itemConfig.GetCollectible(collectibleType);
48
+ player.CheckFamiliar(familiarVariant, targetCount, familiarGenerationRNG, itemConfigItem, familiarSubType);
49
+ }
50
+ exports.checkFamiliar = checkFamiliar;
51
+ /**
52
+ * Helper function to add and remove familiars based on the amount of associated collectibles that a
53
+ * player has.
54
+ *
55
+ * Use this helper function instead of invoking the `EntityPlayer.CheckFamiliar` method directly so
56
+ * that the target count is handled automatically.
57
+ *
58
+ * This function is meant to be called in the `EVALUATE_CACHE` callback (when the cache flag is
59
+ * equal to `CacheFlag.FAMILIARS`).
60
+ *
61
+ * Use this function when the amount of familiars should be equal to the amount of associated
62
+ * collectibles that the player has (plus any extras from having used Box of Friends or Monster
63
+ * Manual). If you instead need to have a custom amount of familiars, use the `checkFamiliars`
64
+ * function instead.
65
+ *
66
+ * Note that this will spawn familiars with a completely random `InitSeed`. When calculating random
67
+ * events for this familiar, you should use a data structure that maps familiar `InitSeed` to RNG
68
+ * objects that are initialized based on the seed from
69
+ * `EntityPlayer.GetCollectibleRNG(collectibleType)`.
70
+ *
71
+ * @param player The player that owns the familiars and collectibles.
72
+ * @param collectibleType The collectible type of the collectible associated with this familiar.
73
+ * @param familiarVariant The variant of the familiar to spawn or remove.
74
+ * @param familiarSubType Optional. The sub-type of the familiar to spawn or remove. If not
75
+ * specified, it will search for existing familiars of all sub-types, and
76
+ * spawn new familiars with a sub-type of 0.
77
+ */
78
+ function checkFamiliarFromCollectibles(player, collectibleType, familiarVariant, familiarSubType) {
79
+ // We need to include non-real collectibles (like Lilith's Incubus), so we omit the second
80
+ // argument.
81
+ const numCollectibles = player.GetCollectibleNum(collectibleType);
82
+ const effects = player.GetEffects();
83
+ // Whenever Box of Friends or Monster Manual is used, it will automatically increment the number
84
+ // of collectible effects for this familiar.
85
+ const numCollectibleEffects = effects.GetCollectibleEffectNum(collectibleType);
86
+ const targetCount = numCollectibles + numCollectibleEffects;
87
+ checkFamiliar(player, collectibleType, targetCount, familiarVariant, familiarSubType);
88
+ }
89
+ exports.checkFamiliarFromCollectibles = checkFamiliarFromCollectibles;
90
+ /** Helper function to get only the familiars that belong to a specific player. */
91
+ function getPlayerFamiliars(player) {
92
+ const playerPtrHash = GetPtrHash(player);
93
+ const familiars = (0, entitiesSpecific_1.getFamiliars)();
94
+ return familiars.filter((familiar) => {
95
+ const familiarPlayerPtrHash = GetPtrHash(familiar.Player);
96
+ return familiarPlayerPtrHash === playerPtrHash;
97
+ });
98
+ }
99
+ exports.getPlayerFamiliars = getPlayerFamiliars;
100
+ /**
101
+ * Helper function to get the corresponding "Siren Helper" entity for a stolen familiar.
102
+ *
103
+ * When The Siren boss "steals" your familiars, a hidden "Siren Helper" entity is spawned to control
104
+ * each familiar stolen. (Checking for the presence of this entity seems to be the only way to
105
+ * detect when the Siren steals a familiar.)
106
+ *
107
+ * @param familiar The familiar to be checked.
108
+ * @returns Returns the hidden "Siren Helper" entity corresponding to the given familiar, if it
109
+ * exists. Returns undefined otherwise.
110
+ */
111
+ function getSirenHelper(familiar) {
112
+ const familiarPtrHash = GetPtrHash(familiar);
113
+ const sirenHelpers = (0, entities_1.getEntities)(isaac_typescript_definitions_1.EntityType.SIREN_HELPER);
114
+ return sirenHelpers.find((sirenHelper) => sirenHelper.Target !== undefined &&
115
+ GetPtrHash(sirenHelper.Target) === familiarPtrHash);
116
+ }
117
+ exports.getSirenHelper = getSirenHelper;
118
+ /**
119
+ * Helper function to detect if the given familiar is "stolen" by The Siren boss.
120
+ *
121
+ * This function is useful because some familiars may need to behave differently when under The
122
+ * Siren's control (e.g. if they auto-target enemies).
123
+ */
124
+ function isFamiliarStolenBySiren(familiar) {
125
+ const sirenHelper = getSirenHelper(familiar);
126
+ return sirenHelper !== undefined;
127
+ }
128
+ exports.isFamiliarStolenBySiren = isFamiliarStolenBySiren;
129
+ /**
130
+ * Helper function to check if a familiar is the type that shoots tears that mimic the players
131
+ * tears, like Incubus, Fate's Reward, Sprinkler, and so on.
132
+ */
133
+ function isFamiliarThatShootsPlayerTears(familiar) {
134
+ return familiarsThatShootPlayerTearsSet_1.FAMILIARS_THAT_SHOOT_PLAYER_TEARS_SET.has(familiar.Variant);
135
+ }
136
+ exports.isFamiliarThatShootsPlayerTears = isFamiliarThatShootsPlayerTears;
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.removeFlag = exports.isSelfDamage = exports.isEmptyFlag = exports.hasFlag = exports.getFlagName = exports.bitFlags = exports.addFlag = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ /**
6
+ * Helper function to add a bit flag to an existing set of bit flags.
7
+ *
8
+ * This is a variadic function, so pass as many flags as you want to add.
9
+ *
10
+ * Example 1:
11
+ *
12
+ * ```ts
13
+ * // Give the player spectral tears
14
+ * const player = Isaac.GetPlayer();
15
+ * player.TearFlags = addFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL);
16
+ * ```
17
+ *
18
+ * Example 2:
19
+ *
20
+ * ```ts
21
+ * // Give the player spectral and homing tears
22
+ * const player = Isaac.GetPlayer();
23
+ * player.TearFlags = addFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL, TearFlags.TEAR_HOMING);
24
+ * ```
25
+ *
26
+ * @param flags The existing set of bit flags.
27
+ * @param flagsToAdd One or more bit flags to add, each as a separate argument.
28
+ * @returns The combined bit flags.
29
+ */
30
+ function addFlag(flags, ...flagsToAdd) {
31
+ let flagsAsInt = flags;
32
+ for (const flagToAdd of flagsToAdd) {
33
+ flagsAsInt |= flagToAdd;
34
+ }
35
+ return flagsAsInt;
36
+ }
37
+ exports.addFlag = addFlag;
38
+ /**
39
+ * Helper function for casting a flag enum value to a `BitFlags` object.
40
+ *
41
+ * This is useful because the compiler will prevent you from assigning a specific flag to a
42
+ * `BitFlags` field. (It does this to ensure type safety, since `BitFlags` can represent a zero
43
+ * value or a composition of N flags.)
44
+ *
45
+ * For example:
46
+ *
47
+ * ```ts
48
+ * player.TearFlags = bitFlags(TearFlag.SPECTRAL);
49
+ * ```
50
+ */
51
+ function bitFlags(flag) {
52
+ return flag;
53
+ }
54
+ exports.bitFlags = bitFlags;
55
+ /**
56
+ * Helper function to get the key associated with a particular flag.
57
+ *
58
+ * (Since bit flags are represented by custom objects instead of normal TypeScript enums, you cannot
59
+ * use the reverse mapping to find the associated key of a given enum value. Use this helper
60
+ * function instead of indexing the enum directly.)
61
+ */
62
+ function getFlagName(flag, flagEnum) {
63
+ for (const [key, value] of Object.entries(flagEnum)) {
64
+ if (value === flag) {
65
+ return key;
66
+ }
67
+ }
68
+ return undefined;
69
+ }
70
+ exports.getFlagName = getFlagName;
71
+ /**
72
+ * Helper function to determine if a particular bit flag is set to true.
73
+ *
74
+ * This is a variadic function, so pass as many flags as you want to check for. If passed multiple
75
+ * flags, it will only return true if all of the flags are set.
76
+ *
77
+ * For example:
78
+ *
79
+ * ```ts
80
+ * const player = Isaac.GetPlayer();
81
+ * if (hasFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL) {
82
+ * // The player currently has spectral tears
83
+ * }
84
+ * ```
85
+ *
86
+ * @param flags The existing set of bit flags.
87
+ * @param flagsToCheck One or more bit flags to check for, each as a separate argument.
88
+ */
89
+ function hasFlag(flags, ...flagsToCheck) {
90
+ const flagsAsInt = flags;
91
+ for (const flagToCheck of flagsToCheck) {
92
+ if (!((flagsAsInt & flagToCheck) === flagToCheck)) {
93
+ return false;
94
+ }
95
+ }
96
+ return true;
97
+ }
98
+ exports.hasFlag = hasFlag;
99
+ /**
100
+ * Helper function to check if every bit in the flag is turned off.
101
+ *
102
+ * (This is equivalent to checking if the flag is equal to 0, but this is not possible without
103
+ * casting the flag to a number.)
104
+ */
105
+ function isEmptyFlag(flag) {
106
+ return flag === 0;
107
+ }
108
+ exports.isEmptyFlag = isEmptyFlag;
109
+ /**
110
+ * Helper function to determine whether damage to a player in the `ENTITY_TAKE_DMG` callback was
111
+ * self-inflicted. For example, damage from a Curse Room door, a Razor, or a Blood Donation Machine
112
+ * would count as self-inflicted damage.
113
+ */
114
+ function isSelfDamage(damageFlags) {
115
+ return (
116
+ // Exclude self-damage from e.g. Curse Room door spikes.
117
+ hasFlag(damageFlags, isaac_typescript_definitions_1.DamageFlag.NO_PENALTIES) ||
118
+ // Exclude self-damage from e.g. Razor.
119
+ hasFlag(damageFlags, isaac_typescript_definitions_1.DamageFlag.RED_HEARTS));
120
+ }
121
+ exports.isSelfDamage = isSelfDamage;
122
+ /**
123
+ * Helper function to remove a bit flag from an existing set of bit flags.
124
+ *
125
+ * This is a variadic function, so pass as many flags as you want to remove.
126
+ *
127
+ * For example:
128
+ *
129
+ * ```ts
130
+ * // Remove spectral tears from the player, if present
131
+ * const player = Isaac.GetPlayer();
132
+ * player.TearFlags = removeFlag(player.TearFlags, TearFlags.TEAR_SPECTRAL);
133
+ * ```
134
+ *
135
+ * @param flags The existing set of bit flags.
136
+ * @param flagsToRemove One or more bit flags to remove, each as a separate argument.
137
+ * @returns The combined bit flags.
138
+ */
139
+ function removeFlag(flags, ...flagsToRemove) {
140
+ let flagsAsInt = flags;
141
+ for (const flagToRemove of flagsToRemove) {
142
+ flagsAsInt &= ~flagToRemove;
143
+ }
144
+ return flagsAsInt;
145
+ }
146
+ exports.removeFlag = removeFlag;