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,121 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.setUnseeded = exports.setRunSeed = exports.restart = exports.onVictoryLap = exports.onSetSeed = exports.getSeedEffects = exports.anySeedEffectEnabled = exports.anyEasterEggEnabled = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const cachedEnumValues_1 = require("../arrays/cachedEnumValues");
6
+ const cachedClasses_1 = require("../core/cachedClasses");
7
+ const characters_1 = require("./characters");
8
+ const log_1 = require("./log");
9
+ const types_1 = require("./types");
10
+ /** Alias for the `anySeedEffectEnabled` function. */
11
+ function anyEasterEggEnabled(exceptions) {
12
+ return anySeedEffectEnabled(exceptions);
13
+ }
14
+ exports.anyEasterEggEnabled = anyEasterEggEnabled;
15
+ /**
16
+ * Helper function to see if any seed effects (i.e. Easter Eggs) are enabled for the current run.
17
+ *
18
+ * @param exceptions Optional. An array of seed effects to ignore.
19
+ */
20
+ function anySeedEffectEnabled(exceptions) {
21
+ const seeds = cachedClasses_1.game.GetSeeds();
22
+ if (exceptions === undefined) {
23
+ const numSeedEffects = seeds.CountSeedEffects();
24
+ return numSeedEffects > 0;
25
+ }
26
+ const exceptionsSet = new Set(exceptions);
27
+ return cachedEnumValues_1.SEED_EFFECTS.some((seedEffect) => seeds.HasSeedEffect(seedEffect) && !exceptionsSet.has(seedEffect));
28
+ }
29
+ exports.anySeedEffectEnabled = anySeedEffectEnabled;
30
+ /**
31
+ * Helper function to get the seed effects (i.e. Easter Eggs) that are enabled for the current run.
32
+ */
33
+ function getSeedEffects() {
34
+ const seeds = cachedClasses_1.game.GetSeeds();
35
+ return cachedEnumValues_1.SEED_EFFECTS.filter((seedEffect) => seedEffect !== isaac_typescript_definitions_1.SeedEffect.NORMAL && seeds.HasSeedEffect(seedEffect));
36
+ }
37
+ exports.getSeedEffects = getSeedEffects;
38
+ /**
39
+ * Helper function to check whether the player is playing on a set seed (i.e. that they entered in a
40
+ * specific seed by pressing tab on the character selection screen). When the player resets the game
41
+ * on a set seed, the game will not switch to a different seed.
42
+ *
43
+ * Under the hood, this checks if the current challenge is `Challenge.NULL` and the
44
+ * `Seeds.IsCustomRun` method.
45
+ */
46
+ function onSetSeed() {
47
+ const seeds = cachedClasses_1.game.GetSeeds();
48
+ const customRun = seeds.IsCustomRun();
49
+ const challenge = Isaac.GetChallenge();
50
+ return challenge === isaac_typescript_definitions_1.Challenge.NULL && customRun;
51
+ }
52
+ exports.onSetSeed = onSetSeed;
53
+ /**
54
+ * Helper function to check whether the player is on a Victory Lap (i.e. they answered "yes" to the
55
+ * popup that happens after defeating The Lamb).
56
+ */
57
+ function onVictoryLap() {
58
+ const numVictoryLaps = cachedClasses_1.game.GetVictoryLap();
59
+ return numVictoryLaps > 0;
60
+ }
61
+ exports.onVictoryLap = onVictoryLap;
62
+ /**
63
+ * Helper function to restart the run using the console command of "restart". If the player is
64
+ * playing a seeded run, then it will restart the game to the beginning of the seed. Otherwise, it
65
+ * will put the player on a run with an entirely new seed.
66
+ *
67
+ * You can optionally specify a `PlayerType` to restart the game as that character.
68
+ */
69
+ function restart(character) {
70
+ if (character === undefined) {
71
+ const command = "restart";
72
+ (0, log_1.log)(`Restarting the run with a console command of: ${command}`);
73
+ Isaac.ExecuteCommand(command);
74
+ return;
75
+ }
76
+ if (character < isaac_typescript_definitions_1.PlayerType.ISAAC) {
77
+ error(`Restarting as a character of ${character} would crash the game.`);
78
+ }
79
+ const command = `restart ${character}`;
80
+ const characterName = (0, characters_1.getCharacterName)(character);
81
+ (0, log_1.log)(`Restarting the run as ${characterName} (${character}) with a console command of: ${command}`);
82
+ Isaac.ExecuteCommand(command);
83
+ }
84
+ exports.restart = restart;
85
+ /**
86
+ * Helper function to restart the run on a particular starting seed.
87
+ *
88
+ * Under the hood, this function executes the `seed` console command.
89
+ *
90
+ * @param startSeedOrStartSeedString Either the numerical start seed (e.g. 268365970) or the start
91
+ * seed string (e.g. "AAJ2 8V9C").
92
+ */
93
+ function setRunSeed(startSeedOrStartSeedString) {
94
+ const startSeedString = (0, types_1.isString)(startSeedOrStartSeedString)
95
+ ? startSeedOrStartSeedString
96
+ : Seeds.Seed2String(startSeedOrStartSeedString);
97
+ const command = `seed ${startSeedString}`;
98
+ (0, log_1.log)(`Restarting the run to set a seed with a console command of: ${command}`);
99
+ Isaac.ExecuteCommand(command);
100
+ }
101
+ exports.setRunSeed = setRunSeed;
102
+ /**
103
+ * Helper function to change the run status to that of an unseeded run with a new random seed.
104
+ *
105
+ * This is useful to revert the behavior where playing on a set seed and restarting the game will
106
+ * not take you to a new seed.
107
+ *
108
+ * Under the hood, this function calls the `Seeds.Reset` method and the
109
+ * `Seeds.Restart(Challenge.NULL)` method.
110
+ */
111
+ function setUnseeded() {
112
+ const seeds = cachedClasses_1.game.GetSeeds();
113
+ // Invoking the `Seeds.Reset` method will cause the start seed to be set to 0. Subsequently, the
114
+ // `Seeds.GetStartSeed` method will return 0, and can cause crashes (due to RNG objects not being
115
+ // able to handle a seed of 0). It also causes the log to be spammed with: "[ASSERT] - Error: Game
116
+ // Start Seed was not set." Thus, we must immediately re-initialize the game start seed by using
117
+ // the `Seeds.Restart` method.
118
+ seeds.Reset();
119
+ seeds.Restart(isaac_typescript_definitions_1.Challenge.NULL);
120
+ }
121
+ exports.setUnseeded = setUnseeded;
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.nextSeed = exports.getStartSeedString = void 0;
4
+ const cachedClasses_1 = require("../core/cachedClasses");
5
+ const rng_1 = require("./rng");
6
+ /** Alias for the `Seeds.GetStartSeedString` method. */
7
+ function getStartSeedString() {
8
+ const seeds = cachedClasses_1.game.GetSeeds();
9
+ return seeds.GetStartSeedString();
10
+ }
11
+ exports.getStartSeedString = getStartSeedString;
12
+ /**
13
+ * Helper function to get the next seed value.
14
+ *
15
+ * This function is useful when you are working with seed values directly over RNG objects.
16
+ */
17
+ function nextSeed(seed) {
18
+ const rng = (0, rng_1.newRNG)(seed);
19
+ rng.Next();
20
+ return rng.GetSeed();
21
+ }
22
+ exports.nextSeed = nextSeed;
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.serializeIsaacAPIClass = exports.isSerializedIsaacAPIClass = exports.isCopyableIsaacAPIClass = exports.deserializeIsaacAPIClass = exports.copyIsaacAPIClass = void 0;
4
+ const isaacAPIClassTypeToBrand_1 = require("../objects/isaacAPIClassTypeToBrand");
5
+ const isaacAPIClassTypeToFunctions_1 = require("../objects/isaacAPIClassTypeToFunctions");
6
+ const isaacAPIClass_1 = require("./isaacAPIClass");
7
+ const types_1 = require("./types");
8
+ const utils_1 = require("./utils");
9
+ /**
10
+ * Helper function to generically copy an Isaac API class without knowing what specific type of
11
+ * class it is. (This is used by the save data manager.)
12
+ *
13
+ * For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
14
+ */
15
+ function copyIsaacAPIClass(isaacAPIClass) {
16
+ if (!(0, types_1.isUserdata)(isaacAPIClass)) {
17
+ error(`Failed to copy an Isaac API class since the provided object was of type: ${typeof isaacAPIClass}`);
18
+ }
19
+ const isaacAPIClassType = (0, isaacAPIClass_1.getIsaacAPIClassName)(isaacAPIClass);
20
+ (0, utils_1.assertDefined)(isaacAPIClassType, "Failed to copy an Isaac API class since it does not have a class type.");
21
+ const copyableIsaacAPIClassType = isaacAPIClassType;
22
+ const functions = isaacAPIClassTypeToFunctions_1.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS[copyableIsaacAPIClassType];
23
+ (0, utils_1.assertDefined)(functions, `Failed to copy an Isaac API class since the associated functions were not found for Isaac API class type: ${copyableIsaacAPIClassType}`);
24
+ return functions.copy(isaacAPIClass);
25
+ }
26
+ exports.copyIsaacAPIClass = copyIsaacAPIClass;
27
+ /**
28
+ * Helper function to generically deserialize an Isaac API class without knowing what specific type
29
+ * of class it is. (This is used by the save data manager when reading data from the "save#.dat"
30
+ * file.)
31
+ *
32
+ * For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
33
+ */
34
+ function deserializeIsaacAPIClass(serializedIsaacAPIClass) {
35
+ if (!(0, types_1.isTable)(serializedIsaacAPIClass)) {
36
+ error(`Failed to deserialize an Isaac API class since the provided object was of type: ${typeof serializedIsaacAPIClass}`);
37
+ }
38
+ const copyableIsaacAPIClassType = getSerializedTableType(serializedIsaacAPIClass);
39
+ (0, utils_1.assertDefined)(copyableIsaacAPIClassType, "Failed to deserialize an Isaac API class since a valid class type brand was not found.");
40
+ const functions = isaacAPIClassTypeToFunctions_1.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS[copyableIsaacAPIClassType];
41
+ (0, utils_1.assertDefined)(functions, `Failed to deserialize an Isaac API class since the associated functions were not found for class type: ${copyableIsaacAPIClassType}`);
42
+ return functions.deserialize(serializedIsaacAPIClass);
43
+ }
44
+ exports.deserializeIsaacAPIClass = deserializeIsaacAPIClass;
45
+ /**
46
+ * In order to find out what type of serialized Isaac API class this is, we search through the
47
+ * serialized table for brands.
48
+ */
49
+ function getSerializedTableType(serializedIsaacAPIClass) {
50
+ for (const [copyableIsaacAPIClassType, serializationBrand] of Object.entries(isaacAPIClassTypeToBrand_1.ISAAC_API_CLASS_TYPE_TO_BRAND)) {
51
+ if (serializedIsaacAPIClass.has(serializationBrand)) {
52
+ return copyableIsaacAPIClassType;
53
+ }
54
+ }
55
+ return undefined;
56
+ }
57
+ /**
58
+ * Helper function to generically check if a given object is a copyable Isaac API class. (This is
59
+ * used by the save data manager when determining what is safe to copy.)
60
+ *
61
+ * For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
62
+ */
63
+ function isCopyableIsaacAPIClass(object) {
64
+ const allFunctions = Object.values(isaacAPIClassTypeToFunctions_1.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS);
65
+ const isFunctions = allFunctions.map((functions) => functions.is);
66
+ return isFunctions.some((identityFunction) => identityFunction(object));
67
+ }
68
+ exports.isCopyableIsaacAPIClass = isCopyableIsaacAPIClass;
69
+ /**
70
+ * Helper function to generically check if a given Lua table is a serialized Isaac API class. (This
71
+ * is used by the save data manager when reading data from the "save#.dat" file.)
72
+ *
73
+ * For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
74
+ */
75
+ function isSerializedIsaacAPIClass(object) {
76
+ const allFunctions = Object.values(isaacAPIClassTypeToFunctions_1.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS);
77
+ const isSerializedFunctions = allFunctions.map((functions) => functions.isSerialized);
78
+ return isSerializedFunctions.some((identityFunction) => identityFunction(object));
79
+ }
80
+ exports.isSerializedIsaacAPIClass = isSerializedIsaacAPIClass;
81
+ /**
82
+ * Helper function to generically serialize an Isaac API class without knowing what specific type of
83
+ * class it is. (This is used by the save data manager when writing data to the "save#.dat" file.)
84
+ *
85
+ * For the list of supported classes, see the `CopyableIsaacAPIClassType` enum.
86
+ */
87
+ function serializeIsaacAPIClass(isaacAPIClass) {
88
+ if (!(0, types_1.isUserdata)(isaacAPIClass)) {
89
+ error(`Failed to serialize an Isaac API class since the provided object was of type: ${typeof isaacAPIClass}`);
90
+ }
91
+ const isaacAPIClassType = (0, isaacAPIClass_1.getIsaacAPIClassName)(isaacAPIClass);
92
+ (0, utils_1.assertDefined)(isaacAPIClassType, "Failed to serialize an Isaac API class since it does not have a class name.");
93
+ const copyableIsaacAPIClassType = isaacAPIClassType;
94
+ const functions = isaacAPIClassTypeToFunctions_1.ISAAC_API_CLASS_TYPE_TO_FUNCTIONS[copyableIsaacAPIClassType];
95
+ (0, utils_1.assertDefined)(functions, `Failed to serialize an Isaac API class since the associated functions were not found for class type: ${copyableIsaacAPIClassType}`);
96
+ return functions.serialize(isaacAPIClass);
97
+ }
98
+ exports.serializeIsaacAPIClass = serializeIsaacAPIClass;
@@ -0,0 +1,215 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.sumSet = exports.setHas = exports.setAdd = exports.objectValuesToSet = exports.objectValuesToReadonlySet = exports.objectKeysToSet = exports.objectKeysToReadonlySet = exports.getSortedSetValues = exports.getSetCombinations = exports.getRandomSetElement = exports.deleteSetsFromSet = exports.copySet = exports.combineSets = exports.addSetsToSet = void 0;
4
+ const ReadonlySet_1 = require("../types/ReadonlySet");
5
+ const array_1 = require("./array");
6
+ const types_1 = require("./types");
7
+ /**
8
+ * Helper function to add all of the values in one set to another set. The first set passed will be
9
+ * modified in place.
10
+ *
11
+ * This function is variadic, meaning that you can specify N sets to add to the first set.
12
+ */
13
+ function addSetsToSet(
14
+ // eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
15
+ mainSet, ...setsToAdd) {
16
+ for (const set of setsToAdd) {
17
+ for (const value of set) {
18
+ mainSet.add(value);
19
+ }
20
+ }
21
+ }
22
+ exports.addSetsToSet = addSetsToSet;
23
+ /**
24
+ * Helper function to create a new set that is the composition of two or more sets.
25
+ *
26
+ * This function is variadic, meaning that you can specify N sets.
27
+ */
28
+ // eslint-disable-next-line isaacscript/no-mutable-return
29
+ function combineSets(...sets) {
30
+ const newSet = new Set();
31
+ for (const set of sets) {
32
+ for (const value of set) {
33
+ newSet.add(value);
34
+ }
35
+ }
36
+ return newSet;
37
+ }
38
+ exports.combineSets = combineSets;
39
+ /** Helper function to copy a set. (You can also use a Set constructor to accomplish this task.) */
40
+ // eslint-disable-next-line isaacscript/no-mutable-return
41
+ function copySet(oldSet) {
42
+ const newSet = new Set();
43
+ for (const value of oldSet) {
44
+ newSet.add(value);
45
+ }
46
+ return newSet;
47
+ }
48
+ exports.copySet = copySet;
49
+ /**
50
+ * Helper function to delete all of the values in one set from another set. The first set passed
51
+ * will be modified in place.
52
+ *
53
+ * This function is variadic, meaning that you can specify N sets to remove from the first set.
54
+ */
55
+ function deleteSetsFromSet(
56
+ // eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
57
+ mainSet, ...setsToRemove) {
58
+ for (const set of setsToRemove) {
59
+ for (const value of set) {
60
+ mainSet.delete(value);
61
+ }
62
+ }
63
+ }
64
+ exports.deleteSetsFromSet = deleteSetsFromSet;
65
+ /**
66
+ * Helper function to get a random element from the provided set.
67
+ *
68
+ * If you want to get an unseeded element, you must explicitly pass `undefined` to the `seedOrRNG`
69
+ * parameter.
70
+ *
71
+ * @param set The set to get an element from.
72
+ * @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
73
+ * `RNG.Next` method will be called. If `undefined` is provided, it will default to
74
+ * a random seed.
75
+ * @param exceptions Optional. An array of elements to skip over if selected.
76
+ */
77
+ function getRandomSetElement(set, seedOrRNG, exceptions = []) {
78
+ const array = getSortedSetValues(set);
79
+ return (0, array_1.getRandomArrayElement)(array, seedOrRNG, exceptions);
80
+ }
81
+ exports.getRandomSetElement = getRandomSetElement;
82
+ /**
83
+ * Helper function to get all possible combinations of the given set. This includes the combination
84
+ * of an empty set.
85
+ *
86
+ * For example, if this function is provided a set containing 1, 2, and 3, then it will return an
87
+ * array containing the following sets:
88
+ *
89
+ * - [] (if `includeEmptyArray` is set to true)
90
+ * - [1]
91
+ * - [2]
92
+ * - [3]
93
+ * - [1, 2]
94
+ * - [1, 3]
95
+ * - [2, 3]
96
+ * - [1, 2, 3]
97
+ *
98
+ * @param set The set to get the combinations of.
99
+ * @param includeEmptyArray Whether to include an empty array in the combinations.
100
+ */
101
+ function getSetCombinations(set, includeEmptyArray) {
102
+ const values = getSortedSetValues(set);
103
+ const combinations = (0, array_1.getArrayCombinations)(values, includeEmptyArray);
104
+ return combinations.map((array) => new ReadonlySet_1.ReadonlySet(array));
105
+ }
106
+ exports.getSetCombinations = getSetCombinations;
107
+ /**
108
+ * Helper function to get a sorted array based on the contents of a set.
109
+ *
110
+ * Normally, set values are returned in insertion order, so use this function when the ordering of
111
+ * the contents is important.
112
+ */
113
+ // eslint-disable-next-line isaacscript/no-mutable-return
114
+ function getSortedSetValues(set) {
115
+ const values = [...set];
116
+ // Check for problematic types in order to throw a helpful error message.
117
+ const firstElement = values[0];
118
+ if (firstElement !== undefined) {
119
+ const arrayType = type(firstElement);
120
+ if (!(0, types_1.isPrimitive)(arrayType)) {
121
+ error(`Failed to get the sorted set values because the provided set was of type "${arrayType}". Having sets with non-primitive types doesn't make much sense in general, so you might need to rethink what you are doing.`);
122
+ }
123
+ }
124
+ values.sort();
125
+ return values;
126
+ }
127
+ exports.getSortedSetValues = getSortedSetValues;
128
+ /**
129
+ * Helper function to convert the keys of an object to a read-only set.
130
+ *
131
+ * Note that the set values will be inserted in a random order, due to how `pairs` works under the
132
+ * hood.
133
+ *
134
+ * Also see the `objectKeysToSet` function.
135
+ */
136
+ function objectKeysToReadonlySet(object) {
137
+ return objectKeysToSet(object);
138
+ }
139
+ exports.objectKeysToReadonlySet = objectKeysToReadonlySet;
140
+ /**
141
+ * Helper function to convert the keys of an object to a set.
142
+ *
143
+ * Note that the set values will be inserted in a random order, due to how `pairs` works under the
144
+ * hood.
145
+ *
146
+ * Also see the `objectKeysToReadonlySet` function.
147
+ */
148
+ // eslint-disable-next-line isaacscript/no-mutable-return
149
+ function objectKeysToSet(object) {
150
+ const set = new Set();
151
+ for (const key of Object.keys(object)) {
152
+ set.add(key);
153
+ }
154
+ return set;
155
+ }
156
+ exports.objectKeysToSet = objectKeysToSet;
157
+ /**
158
+ * Helper function to convert the values of an object to a read-only set.
159
+ *
160
+ * Note that the set values will be inserted in a random order, due to how `pairs` works under the
161
+ * hood.
162
+ *
163
+ * Also see the `objectValuesToSet` function.
164
+ */
165
+ function objectValuesToReadonlySet(object) {
166
+ return objectValuesToSet(object);
167
+ }
168
+ exports.objectValuesToReadonlySet = objectValuesToReadonlySet;
169
+ /**
170
+ * Helper function to convert the values of an object to a set.
171
+ *
172
+ * Note that the set values will be inserted in a random order, due to how `pairs` works under the
173
+ * hood.
174
+ *
175
+ * Also see the `objectValuesToReadonlySet` function.
176
+ */
177
+ // eslint-disable-next-line isaacscript/no-mutable-return
178
+ function objectValuesToSet(object) {
179
+ const set = new Set();
180
+ for (const key of Object.values(object)) {
181
+ set.add(key);
182
+ }
183
+ return set;
184
+ }
185
+ exports.objectValuesToSet = objectValuesToSet;
186
+ /**
187
+ * Helper function to add one or more elements to a set at once without having to repeatedly call
188
+ * the `Set.add` method.
189
+ *
190
+ * This function is variadic, meaning that you can pass as many things as you want to add.
191
+ */
192
+ // eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
193
+ function setAdd(set, ...elements) {
194
+ for (const element of elements) {
195
+ set.add(element);
196
+ }
197
+ }
198
+ exports.setAdd = setAdd;
199
+ /**
200
+ * Helper function to check for one or more elements in a set at once without having to repeatedly
201
+ * call the `Set.has` method.
202
+ *
203
+ * This function is variadic, meaning that you can pass as many things as you want to check for. It
204
+ * will return true if one or more elements are found.
205
+ */
206
+ function setHas(set, ...elements) {
207
+ return elements.some((element) => set.has(element));
208
+ }
209
+ exports.setHas = setHas;
210
+ /** Helper function to sum every value in a set together. */
211
+ function sumSet(set) {
212
+ const values = [...set];
213
+ return (0, array_1.sumArray)(values);
214
+ }
215
+ exports.sumSet = sumSet;
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isSlotMachine = exports.getSlotName = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const slotNames_1 = require("../objects/slotNames");
6
+ const ReadonlySet_1 = require("../types/ReadonlySet");
7
+ const entityTypes_1 = require("./entityTypes");
8
+ const SLOT_MACHINE_VARIANTS = new ReadonlySet_1.ReadonlySet([
9
+ isaac_typescript_definitions_1.SlotVariant.SLOT_MACHINE,
10
+ isaac_typescript_definitions_1.SlotVariant.BLOOD_DONATION_MACHINE,
11
+ isaac_typescript_definitions_1.SlotVariant.FORTUNE_TELLING_MACHINE,
12
+ isaac_typescript_definitions_1.SlotVariant.DONATION_MACHINE,
13
+ isaac_typescript_definitions_1.SlotVariant.SHOP_RESTOCK_MACHINE,
14
+ isaac_typescript_definitions_1.SlotVariant.GREED_DONATION_MACHINE,
15
+ isaac_typescript_definitions_1.SlotVariant.MOMS_DRESSING_TABLE,
16
+ isaac_typescript_definitions_1.SlotVariant.CRANE_GAME,
17
+ isaac_typescript_definitions_1.SlotVariant.CONFESSIONAL, // 17
18
+ ]);
19
+ /**
20
+ * Helper function to get the name of a slot, as listed in the "entities2.xml" file. Returns
21
+ * "Unknown" if the provided slot variant is not valid.
22
+ *
23
+ * This function only works for vanilla slot variants.
24
+ *
25
+ * For example, `getSlotName(SlotVariant.BLOOD_DONATION_MACHINE)` would return "Blood Donation
26
+ * Machine".
27
+ */
28
+ function getSlotName(slotVariant) {
29
+ // Handle modded slots.
30
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
31
+ return slotNames_1.SLOT_NAMES[slotVariant] ?? slotNames_1.DEFAULT_SLOT_NAME;
32
+ }
33
+ exports.getSlotName = getSlotName;
34
+ /** Returns true for the specific variants of `EntityType.SLOT` that are machines. */
35
+ function isSlotMachine(entity) {
36
+ if (!(0, entityTypes_1.isSlot)(entity)) {
37
+ return false;
38
+ }
39
+ return SLOT_MACHINE_VARIANTS.has(entity.Variant);
40
+ }
41
+ exports.isSlotMachine = isSlotMachine;
@@ -0,0 +1,158 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.stableSort = exports.sortTwoDimensionalArray = exports.sortObjectArrayByKey = void 0;
4
+ const types_1 = require("./types");
5
+ function sortNormal(a, b) {
6
+ if (!(0, types_1.isNumber)(a) && !(0, types_1.isString)(a)) {
7
+ error(`Failed to normal sort since the first value was not a number or string and was instead: ${type(a)}`);
8
+ }
9
+ if (!(0, types_1.isNumber)(b) && !(0, types_1.isString)(b)) {
10
+ error(`Failed to normal sort since the second value was not a number or string and was instead: ${type(b)}`);
11
+ }
12
+ if (a < b) {
13
+ return -1;
14
+ }
15
+ if (a > b) {
16
+ return 1;
17
+ }
18
+ return 0;
19
+ }
20
+ /**
21
+ * Helper function to sort an array of objects by one of the object keys.
22
+ *
23
+ * For example:
24
+ *
25
+ * ```ts
26
+ * const myArray = [
27
+ * {
28
+ * name: "alice",
29
+ * age: 30,
30
+ * },
31
+ * {
32
+ * name: "bob",
33
+ * age: 20,
34
+ * },
35
+ * ];
36
+ * myArray.sort(sortObjectArrayByKey("age"));
37
+ * ```
38
+ */
39
+ function sortObjectArrayByKey(key) {
40
+ return (a, b) => {
41
+ if (!(0, types_1.isTable)(a)) {
42
+ error(`Failed to sort an object array by the key of "${key}" since the first element was not a table and was instead: ${type(a)}`);
43
+ }
44
+ if (!(0, types_1.isTable)(b)) {
45
+ error(`Failed to sort an object array by the key of "${key}" since the second element was not a table and was instead: ${type(b)}.`);
46
+ }
47
+ const aValue = a.get(key);
48
+ const bValue = b.get(key);
49
+ return sortNormal(aValue, bValue);
50
+ };
51
+ }
52
+ exports.sortObjectArrayByKey = sortObjectArrayByKey;
53
+ /**
54
+ * Helper function to sort a two-dimensional array by the first element.
55
+ *
56
+ * For example:
57
+ *
58
+ * ```ts
59
+ * const myArray = [[1, 2], [2, 3], [3, 4]];
60
+ * myArray.sort(twoDimensionalSort);
61
+ * ```
62
+ *
63
+ * This function also properly handles when the array elements are strings or numbers (instead of
64
+ * another array).
65
+ *
66
+ * From:
67
+ * https://stackoverflow.com/questions/16096872/how-to-sort-2-dimensional-array-by-column-value
68
+ */
69
+ function sortTwoDimensionalArray(a, b) {
70
+ const aType = type(a);
71
+ const bType = type(b);
72
+ if (aType !== bType) {
73
+ error(`Failed to two-dimensional sort since the two elements were disparate types: ${a} & ${b} (${aType} & ${bType})`);
74
+ }
75
+ if (aType === "string" || aType === "number") {
76
+ return sortNormal(a, b);
77
+ }
78
+ if (aType !== "table") {
79
+ error("Failed to two-dimensional sort since the first element was not a string, number, or table.");
80
+ }
81
+ if (bType !== "table") {
82
+ error("Failed to two-dimensional sort since the second element was not a string, number, or table.");
83
+ }
84
+ const firstElement1 = a[0];
85
+ const firstElement2 = b[0];
86
+ if (firstElement1 === undefined || firstElement1 === null) {
87
+ error("Failed to two-dimensional sort since the first element of the first array was undefined.");
88
+ }
89
+ if (firstElement2 === undefined || firstElement2 === null) {
90
+ error("Failed to two-dimensional sort since the first element of the second array was undefined.");
91
+ }
92
+ const elementType1 = type(firstElement1);
93
+ const elementType2 = type(firstElement2);
94
+ if (elementType1 !== elementType2) {
95
+ error(`Failed to two-dimensional sort since the first element of each array were disparate types: ${firstElement1} & ${firstElement2} (${elementType1} & ${elementType2})`);
96
+ }
97
+ return sortNormal(firstElement1, firstElement2);
98
+ }
99
+ exports.sortTwoDimensionalArray = sortTwoDimensionalArray;
100
+ /**
101
+ * Helper function to sort an array in a stable way.
102
+ *
103
+ * This is useful because by default, the transpiled `Array.sort` method from TSTL is not stable.
104
+ *
105
+ * Under the hood, this uses the merge sort algorithm.
106
+ */
107
+ // eslint-disable-next-line isaacscript/no-mutable-return
108
+ function stableSort(
109
+ // eslint-disable-next-line isaacscript/prefer-readonly-parameter-types
110
+ array, sortFunc = sortNormal) {
111
+ // Base case: an array of zero or one elements is already sorted
112
+ if (array.length <= 1) {
113
+ return array;
114
+ }
115
+ // Split the array into two halves.
116
+ const middleIndex = Math.floor(array.length / 2);
117
+ const leftArray = array.slice(0, middleIndex);
118
+ const rightArray = array.slice(middleIndex);
119
+ // Recursively sort each half.
120
+ const sortedLeftArray = stableSort(leftArray, sortFunc);
121
+ const sortedRightArray = stableSort(rightArray, sortFunc);
122
+ // Merge the two sorted halves.
123
+ const mergedArray = [];
124
+ let leftIndex = 0;
125
+ let rightIndex = 0;
126
+ while (leftIndex < sortedLeftArray.length &&
127
+ rightIndex < sortedRightArray.length) {
128
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
129
+ const left = sortedLeftArray[leftIndex];
130
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
131
+ const right = sortedRightArray[rightIndex];
132
+ const sortResult = sortFunc(left, right);
133
+ if (sortResult === -1 || sortResult === 0) {
134
+ mergedArray.push(left);
135
+ leftIndex++;
136
+ }
137
+ else {
138
+ mergedArray.push(right);
139
+ rightIndex++;
140
+ }
141
+ }
142
+ // Add any remaining elements from the left array.
143
+ while (leftIndex < sortedLeftArray.length) {
144
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
145
+ const left = sortedLeftArray[leftIndex];
146
+ mergedArray.push(left);
147
+ leftIndex++;
148
+ }
149
+ // Add any remaining elements from the right array.
150
+ while (rightIndex < sortedRightArray.length) {
151
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
152
+ const right = sortedRightArray[rightIndex];
153
+ mergedArray.push(right);
154
+ rightIndex++;
155
+ }
156
+ return mergedArray;
157
+ }
158
+ exports.stableSort = stableSort;