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,63 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isStoryBossID = exports.isStoryBoss = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const ReadonlySet_1 = require("../types/ReadonlySet");
6
+ const STORY_BOSS_IDS = [
7
+ isaac_typescript_definitions_1.BossID.MOM,
8
+ isaac_typescript_definitions_1.BossID.MOMS_HEART,
9
+ isaac_typescript_definitions_1.BossID.SATAN,
10
+ isaac_typescript_definitions_1.BossID.IT_LIVES,
11
+ isaac_typescript_definitions_1.BossID.ISAAC,
12
+ isaac_typescript_definitions_1.BossID.BLUE_BABY,
13
+ isaac_typescript_definitions_1.BossID.LAMB,
14
+ isaac_typescript_definitions_1.BossID.MEGA_SATAN,
15
+ isaac_typescript_definitions_1.BossID.ULTRA_GREED,
16
+ isaac_typescript_definitions_1.BossID.HUSH,
17
+ isaac_typescript_definitions_1.BossID.DELIRIUM,
18
+ isaac_typescript_definitions_1.BossID.ULTRA_GREEDIER,
19
+ isaac_typescript_definitions_1.BossID.MOTHER,
20
+ isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOM,
21
+ isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOMS_HEART,
22
+ isaac_typescript_definitions_1.BossID.DOGMA,
23
+ isaac_typescript_definitions_1.BossID.BEAST, // 100
24
+ ];
25
+ const STORY_BOSS_ENTITY_TYPES_SET = new ReadonlySet_1.ReadonlySet([
26
+ isaac_typescript_definitions_1.EntityType.MOM,
27
+ isaac_typescript_definitions_1.EntityType.MOMS_HEART,
28
+ isaac_typescript_definitions_1.EntityType.SATAN,
29
+ // - It Lives is a variant of Mom's Heart.
30
+ isaac_typescript_definitions_1.EntityType.ISAAC,
31
+ // - Blue Baby is a variant of Isaac.
32
+ isaac_typescript_definitions_1.EntityType.LAMB,
33
+ isaac_typescript_definitions_1.EntityType.MEGA_SATAN,
34
+ isaac_typescript_definitions_1.EntityType.MEGA_SATAN_2,
35
+ isaac_typescript_definitions_1.EntityType.ULTRA_GREED,
36
+ isaac_typescript_definitions_1.EntityType.HUSH,
37
+ isaac_typescript_definitions_1.EntityType.DELIRIUM,
38
+ // - Ultra Greedier is a variant of Ultra Greed.
39
+ isaac_typescript_definitions_1.EntityType.MOTHER,
40
+ // - Mausoleum Mom is a sub-type of Mom.
41
+ // - Mausoleum Mom's Heart is a sub-type of Mom's Heart.
42
+ isaac_typescript_definitions_1.EntityType.DOGMA,
43
+ isaac_typescript_definitions_1.EntityType.BEAST, // 951
44
+ ]);
45
+ const STORY_BOSS_IDS_SET = new ReadonlySet_1.ReadonlySet(STORY_BOSS_IDS);
46
+ /**
47
+ * Helper function to determine if the specified entity type is an end-game story boss, like Isaac,
48
+ * Blue Baby, Mega Satan, The Beast, and so on. This is useful because certain effects should only
49
+ * apply to non-story bosses, like Vanishing Twin.
50
+ */
51
+ function isStoryBoss(entityType) {
52
+ return STORY_BOSS_ENTITY_TYPES_SET.has(entityType);
53
+ }
54
+ exports.isStoryBoss = isStoryBoss;
55
+ /**
56
+ * Helper function to determine if the specified boss ID is an end-game story boss, like Isaac, Blue
57
+ * Baby, Mega Satan, The Beast, and so on. This is useful because certain effects should only apply
58
+ * to non-story bosses, like Vanishing Twin.
59
+ */
60
+ function isStoryBossID(bossID) {
61
+ return STORY_BOSS_IDS_SET.has(bossID);
62
+ }
63
+ exports.isStoryBossID = isStoryBossID;
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.uncapitalizeFirstLetter = exports.trimSuffix = exports.trimPrefix = exports.removeSubstring = exports.removeNonAlphanumericCharacters = exports.removeCharactersBefore = exports.removeAllCharacters = exports.parseSemanticVersion = exports.getPartialMatch = exports.getObjectPartialMatch = exports.getMapPartialMatch = exports.capitalizeFirstLetter = void 0;
4
+ const types_1 = require("./types");
5
+ const utils_1 = require("./utils");
6
+ function capitalizeFirstLetter(string) {
7
+ if (string === "") {
8
+ return string;
9
+ }
10
+ const firstCharacter = string.charAt(0);
11
+ const capitalizedFirstLetter = firstCharacter.toUpperCase();
12
+ const restOfString = string.slice(1);
13
+ return `${capitalizedFirstLetter}${restOfString}`;
14
+ }
15
+ exports.capitalizeFirstLetter = capitalizeFirstLetter;
16
+ /**
17
+ * Helper function to get the closest key from a map based on partial search text. (It only searches
18
+ * through the keys, not the values.)
19
+ *
20
+ * Note that:
21
+ * - Spaces are automatically removed from the search text.
22
+ * - Both the search text and the strings to search through are converted to lowercase before
23
+ * attempting to find a match.
24
+ *
25
+ * For example:
26
+ *
27
+ * ```ts
28
+ * const map = new <string, number>Map([
29
+ * ["foo", 123],
30
+ * ["bar", 456],
31
+ * ]);
32
+ * const searchText = "f";
33
+ * const match = getMapPartialMatch(map, searchText); // match is now equal to ["foo", 123]
34
+ * ```
35
+ *
36
+ * @returns If a match was found, returns a tuple of the map key and value. If a match was not
37
+ * found, returns undefined.
38
+ */
39
+ function getMapPartialMatch(searchText, map) {
40
+ const keys = [...map.keys()];
41
+ const matchingKey = getPartialMatch(searchText, keys);
42
+ if (matchingKey === undefined) {
43
+ return undefined;
44
+ }
45
+ const value = map.get(matchingKey);
46
+ (0, utils_1.assertDefined)(value, `Failed to get the map value corresponding to the partial match of: ${matchingKey}`);
47
+ return [matchingKey, value];
48
+ }
49
+ exports.getMapPartialMatch = getMapPartialMatch;
50
+ /**
51
+ * Helper function to get the closest key from an object based on partial search text. (It only
52
+ * searches through the keys, not the values.)
53
+ *
54
+ * Note that:
55
+ * - Spaces are automatically removed from the search text.
56
+ * - Both the search text and the strings to search through are converted to lowercase before
57
+ * attempting to find a match.
58
+ *
59
+ * For example:
60
+ *
61
+ * ```ts
62
+ * const object = {
63
+ * foo: 123,
64
+ * bar: 456,
65
+ * };
66
+ * const searchText = "f";
67
+ * const match = getObjectPartialMatch(object, searchText); // match is now equal to ["foo", 123]
68
+ * ```
69
+ *
70
+ * @returns If a match was found, returns a tuple of the map key and value. If a match was not
71
+ * found, returns undefined.
72
+ */
73
+ function getObjectPartialMatch(searchText, object) {
74
+ const keys = Object.keys(object);
75
+ const matchingKey = getPartialMatch(searchText, keys);
76
+ if (matchingKey === undefined) {
77
+ return undefined;
78
+ }
79
+ const value = object[matchingKey];
80
+ (0, utils_1.assertDefined)(value, `Failed to get the object value corresponding to the partial match of: ${matchingKey}`);
81
+ return [matchingKey, value];
82
+ }
83
+ exports.getObjectPartialMatch = getObjectPartialMatch;
84
+ /**
85
+ * Helper function to get the closest value from an array of strings based on partial search text.
86
+ *
87
+ * Note that:
88
+ * - Spaces are automatically removed from the search text.
89
+ * - Both the search text and the strings to search through are converted to lowercase before
90
+ * attempting to find a match.
91
+ *
92
+ * For example:
93
+ *
94
+ * ```ts
95
+ * const array = ["foo", "bar"];
96
+ * const searchText = "f";
97
+ * const match = getPartialMatch(array, searchText); // match is now equal to "foo"
98
+ *
99
+ * @returns If a match was found, returns the array element. If a match was not
100
+ * found, returns undefined.
101
+ * ```
102
+ */
103
+ function getPartialMatch(searchText, array) {
104
+ const sortedArray = array.toSorted();
105
+ searchText = searchText.toLowerCase();
106
+ searchText = searchText.replaceAll(" ", "");
107
+ const matchingElements = sortedArray.filter((element) => element.toLowerCase().startsWith(searchText));
108
+ matchingElements.sort();
109
+ return matchingElements[0];
110
+ }
111
+ exports.getPartialMatch = getPartialMatch;
112
+ /**
113
+ * Helper function to parse a Semantic Versioning string into its individual constituents. Returns
114
+ * undefined if the submitted string was not a proper Semantic Version string.
115
+ *
116
+ * https://semver.org/
117
+ */
118
+ function parseSemanticVersion(versionString) {
119
+ const [majorVersionString, minorVersionString, patchVersionString] = string.match(versionString, "(%d+).(%d+).(%d+)");
120
+ if (majorVersionString === undefined ||
121
+ minorVersionString === undefined ||
122
+ patchVersionString === undefined) {
123
+ return undefined;
124
+ }
125
+ const majorVersion = (0, types_1.parseIntSafe)(majorVersionString);
126
+ const minorVersion = (0, types_1.parseIntSafe)(minorVersionString);
127
+ const patchVersion = (0, types_1.parseIntSafe)(patchVersionString);
128
+ if (majorVersion === undefined ||
129
+ minorVersion === undefined ||
130
+ patchVersion === undefined) {
131
+ return undefined;
132
+ }
133
+ return { majorVersion, minorVersion, patchVersion };
134
+ }
135
+ exports.parseSemanticVersion = parseSemanticVersion;
136
+ function removeAllCharacters(string, character) {
137
+ return string.replaceAll(character, "");
138
+ }
139
+ exports.removeAllCharacters = removeAllCharacters;
140
+ /**
141
+ * Helper function to remove all of the characters in a string before a given substring. Returns the
142
+ * modified string.
143
+ */
144
+ function removeCharactersBefore(string, substring) {
145
+ const index = string.indexOf(substring);
146
+ return string.slice(index);
147
+ }
148
+ exports.removeCharactersBefore = removeCharactersBefore;
149
+ /** Helper function to remove all characters from a string that are not letters or numbers. */
150
+ function removeNonAlphanumericCharacters(str) {
151
+ const [returnValue, _] = string.gsub(str, "%W", "");
152
+ return returnValue;
153
+ }
154
+ exports.removeNonAlphanumericCharacters = removeNonAlphanumericCharacters;
155
+ /**
156
+ * Helper function to remove one or more substrings from a string, if they exist. Returns the
157
+ * modified string.
158
+ *
159
+ * This function is variadic, meaning that you can pass as many substrings as you want to remove.
160
+ */
161
+ function removeSubstring(string, ...substrings) {
162
+ for (const substring of substrings) {
163
+ string = string.replaceAll(substring, "");
164
+ }
165
+ return string;
166
+ }
167
+ exports.removeSubstring = removeSubstring;
168
+ /** Helper function to trim a prefix from a string, if it exists. Returns the trimmed string. */
169
+ function trimPrefix(string, prefix) {
170
+ if (!string.startsWith(prefix)) {
171
+ return string;
172
+ }
173
+ return string.slice(prefix.length);
174
+ }
175
+ exports.trimPrefix = trimPrefix;
176
+ /** Helper function to trim a suffix from a string, if it exists. Returns the trimmed string. */
177
+ function trimSuffix(string, prefix) {
178
+ if (!string.endsWith(prefix)) {
179
+ return string;
180
+ }
181
+ const endCharacter = string.length - prefix.length;
182
+ return string.slice(0, endCharacter);
183
+ }
184
+ exports.trimSuffix = trimSuffix;
185
+ function uncapitalizeFirstLetter(string) {
186
+ if (string === "") {
187
+ return string;
188
+ }
189
+ const firstCharacter = string.charAt(0);
190
+ const uncapitalizedFirstLetter = firstCharacter.toLowerCase();
191
+ const restOfString = string.slice(1);
192
+ return `${uncapitalizedFirstLetter}${restOfString}`;
193
+ }
194
+ exports.uncapitalizeFirstLetter = uncapitalizeFirstLetter;
@@ -0,0 +1,162 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.tableHasKeys = exports.iterateTableInOrder = exports.isTableEmpty = exports.getStringsFromTable = exports.getNumbersFromTable = exports.getBooleansFromTable = exports.copyUserdataValuesToTable = exports.clearTable = void 0;
4
+ const types_1 = require("./types");
5
+ const utils_1 = require("./utils");
6
+ /**
7
+ * In a `Map`, you can use the `clear` method to delete every element. However, in a `LuaMap`, the
8
+ * `clear` method does not exist. Use this helper function as a drop-in replacement for this.
9
+ */
10
+ function clearTable(luaMap) {
11
+ for (const [key] of luaMap) {
12
+ luaMap.delete(key);
13
+ }
14
+ }
15
+ exports.clearTable = clearTable;
16
+ /** Helper function to copy specific values from a userdata object (e.g. `Vector`) to a table. */
17
+ function copyUserdataValuesToTable(object, keys, luaMap) {
18
+ if (!(0, types_1.isUserdata)(object)) {
19
+ error(`Failed to copy an object values to a table, since the object was of type: ${type(object)}`);
20
+ }
21
+ // We can access values on userdata objects similar to a normal table.
22
+ const userdata = object;
23
+ for (const key of keys) {
24
+ const value = userdata.get(key);
25
+ luaMap.set(key, value);
26
+ }
27
+ }
28
+ exports.copyUserdataValuesToTable = copyUserdataValuesToTable;
29
+ /**
30
+ * Helper function to safely get boolean values from a Lua table. Will throw an error if the
31
+ * specific value does not exist on the table.
32
+ *
33
+ * This function is variadic, meaning that you can specify N arguments to get N values.
34
+ */
35
+ function getBooleansFromTable(luaMap, objectName, ...keys) {
36
+ const booleans = [];
37
+ for (const key of keys) {
38
+ const value = luaMap.get(key);
39
+ (0, utils_1.assertDefined)(value, `Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
40
+ if ((0, types_1.isBoolean)(value)) {
41
+ booleans.push(value);
42
+ }
43
+ else {
44
+ error(`Failed to get the boolean for the "${key}" value of a table representing a "${objectName}" object because the type was: ${typeof value}`);
45
+ }
46
+ }
47
+ return booleans;
48
+ }
49
+ exports.getBooleansFromTable = getBooleansFromTable;
50
+ /**
51
+ * Helper function to safely get number values from specific keys on a Lua table. If the values are
52
+ * strings, they will be converted to numbers. Will throw an error if the specific value does not
53
+ * exist on the table or if it cannot be converted to a number.
54
+ *
55
+ * This function is variadic, meaning that you can specify N arguments to get N values.
56
+ */
57
+ function getNumbersFromTable(luaMap, objectName, ...keys) {
58
+ const numbers = [];
59
+ for (const key of keys) {
60
+ const value = luaMap.get(key);
61
+ (0, utils_1.assertDefined)(value, `Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
62
+ if ((0, types_1.isNumber)(value)) {
63
+ numbers.push(value);
64
+ }
65
+ else if ((0, types_1.isString)(value)) {
66
+ const number = tonumber(value);
67
+ (0, utils_1.assertDefined)(number, `Failed to convert the "${key}" value of a table representing a "${objectName}" object to a number: ${value}`);
68
+ numbers.push(number);
69
+ }
70
+ else {
71
+ error(`Failed to get the number for the "${key}" value of a table representing a "${objectName}" object because the type was: ${typeof value}`);
72
+ }
73
+ }
74
+ return numbers;
75
+ }
76
+ exports.getNumbersFromTable = getNumbersFromTable;
77
+ /**
78
+ * Helper function to safely get string values from a Lua table. Will throw an error if the specific
79
+ * value does not exist on the table.
80
+ *
81
+ * This function is variadic, meaning that you can specify N arguments to get N values.
82
+ */
83
+ function getStringsFromTable(luaMap, objectName, ...keys) {
84
+ const strings = [];
85
+ for (const key of keys) {
86
+ const value = luaMap.get(key);
87
+ (0, utils_1.assertDefined)(value, `Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
88
+ if ((0, types_1.isString)(value)) {
89
+ strings.push(value);
90
+ }
91
+ else {
92
+ const string = tostring(value);
93
+ strings.push(string);
94
+ }
95
+ }
96
+ return strings;
97
+ }
98
+ exports.getStringsFromTable = getStringsFromTable;
99
+ /** Helper function to check if a Lua table has 0 keys. */
100
+ function isTableEmpty(luaMap) {
101
+ // Using `next` does not seem to work properly, so we use `pairs` instead.
102
+ // eslint-disable-next-line no-unreachable-loop
103
+ for (const [_key, _value] of luaMap) {
104
+ return false;
105
+ }
106
+ return true;
107
+ }
108
+ exports.isTableEmpty = isTableEmpty;
109
+ /**
110
+ * Helper function to iterate over a table deterministically. This is useful because by default, the
111
+ * `pairs` function will return the keys of a Lua table in a random order.
112
+ *
113
+ * This function will sort the table entries based on the value of the key.
114
+ *
115
+ * This function will only work on tables that have number keys or string keys. It will throw a
116
+ * run-time error if it encounters a key of another type.
117
+ *
118
+ * @param luaMap The table to iterate over.
119
+ * @param func The function to run for each iteration.
120
+ * @param inOrder Optional. Whether to iterate in order. True by default. You can dynamically set to
121
+ * false in situations where iterating randomly would not matter and you need the
122
+ * extra performance.
123
+ */
124
+ function iterateTableInOrder(luaMap, func, inOrder = true) {
125
+ // First, handle the trivial case of a non-deterministic iteration.
126
+ if (!inOrder) {
127
+ for (const [key, value] of luaMap) {
128
+ func(key, value);
129
+ }
130
+ return;
131
+ }
132
+ const keys = Object.keys(luaMap);
133
+ const hasAllNumberKeys = keys.every((key) => (0, types_1.isNumber)(key));
134
+ const hasAllStringKeys = keys.every((key) => (0, types_1.isString)(key));
135
+ if (!hasAllNumberKeys && !hasAllStringKeys) {
136
+ // Since the table has non-homogenous keys, we won't be able to sort it. Revert to
137
+ // non-deterministic iteration in this case.
138
+ for (const [key, value] of luaMap) {
139
+ func(key, value);
140
+ }
141
+ return;
142
+ }
143
+ keys.sort();
144
+ for (const key of keys) {
145
+ const keyIndex = key;
146
+ const value = luaMap.get(keyIndex);
147
+ if (value !== undefined) {
148
+ func(keyIndex, value);
149
+ }
150
+ }
151
+ }
152
+ exports.iterateTableInOrder = iterateTableInOrder;
153
+ /**
154
+ * Helper function to check if a Lua table has all of the provided keys.
155
+ *
156
+ * This function is variadic, meaning that you can specify as many arguments as you want to check
157
+ * for.
158
+ */
159
+ function tableHasKeys(luaMap, ...keys) {
160
+ return keys.every((key) => luaMap.has(key));
161
+ }
162
+ exports.tableHasKeys = tableHasKeys;
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTearFromPlayer = exports.isTearFromFamiliar = exports.isMissedTear = exports.getTearsStat = exports.getFireDelay = exports.addTearsStat = void 0;
4
+ /**
5
+ * - Converts the specified amount of tears stat into the format of `EntityPlayer.MaxFireDelay` and
6
+ * adds it to the player.
7
+ * - This function should only be used inside the `EVALUATE_CACHE` callback.
8
+ * - In this context, the "tears stat" represents what is shown on the in-game stat UI.
9
+ *
10
+ * For example:
11
+ *
12
+ * ```ts
13
+ * function evaluateCacheTears(player: EntityPlayer) {
14
+ * const numFoo = player.GetNumCollectible(CollectibleTypeCustom.FOO);
15
+ * const tearsStat = numFoo * FOO_TEARS_STAT;
16
+ * addTearsStat(player, tearsStat);
17
+ * }
18
+ * ```
19
+ */
20
+ function addTearsStat(player, tearsStat) {
21
+ const existingTearsStat = getTearsStat(player.MaxFireDelay);
22
+ const newTearsStat = existingTearsStat + tearsStat;
23
+ const newMaxFireDelay = getFireDelay(newTearsStat);
24
+ player.MaxFireDelay = newMaxFireDelay;
25
+ }
26
+ exports.addTearsStat = addTearsStat;
27
+ /**
28
+ * - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` field. This is
29
+ * equivalent to how many tears the player can shoot per frame.
30
+ * - If you already have a "tears" stat and you want to convert it back to MaxFireDelay, then use
31
+ * this function.
32
+ * - In this context, the "tears stat" represents what is shown on the in-game stat UI.
33
+ */
34
+ function getFireDelay(tearsStat) {
35
+ return Math.max(30 / tearsStat - 1, -0.9999);
36
+ }
37
+ exports.getFireDelay = getFireDelay;
38
+ /**
39
+ * - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` field. This is
40
+ * equivalent to how many tears the player can shoot per frame.
41
+ * - If you want to convert this to the "tears" stat that is shown on the in-game stat UI, then use
42
+ * this function.
43
+ */
44
+ function getTearsStat(fireDelay) {
45
+ return 30 / (fireDelay + 1);
46
+ }
47
+ exports.getTearsStat = getTearsStat;
48
+ /**
49
+ * Helper function to check if a tear hit an enemy. A tear is considered to be missed if it hit the
50
+ * ground, a wall, or a grid entity.
51
+ *
52
+ * Note that tears are still considered to be missed if they hit a poop or fire, so you may want to
53
+ * handle those separately using the `POST_GRID_ENTITY_COLLISION` and `POST_ENTITY_COLLISION`
54
+ * callbacks, respectively.
55
+ *
56
+ * Under the hood, this function uses the `Entity.IsDead` method. (Tears will not die if they hit an
57
+ * enemy, but they will die if they hit a wall or object.)
58
+ */
59
+ function isMissedTear(tear) {
60
+ return tear.IsDead();
61
+ }
62
+ exports.isMissedTear = isMissedTear;
63
+ /**
64
+ * Helper function to check if a given tear is from a familiar (as opposed to e.g. a player). This
65
+ * is determined by looking at the parent.
66
+ *
67
+ * For the special case of Incubus and Blood Babies, the parent of the tear is always the player,
68
+ * but the spawner entity of the tear changes. On frame 0, the spawner entity is equal to the
69
+ * player, and on frame 1, the spawner entity is equal to the familiar. For this reason, you can
70
+ * only use this function in the `POST_TEAR_INIT_VERY_LATE` callback or on frame 1+.
71
+ *
72
+ * If this function is called on frame 0, it will throw a run-time error.
73
+ *
74
+ * Note that this function does not work properly when the tear is from a Lead Pencil barrage. In
75
+ * this case, it will always appear as if the tear is coming from a player.
76
+ *
77
+ * @param tear The tear to inspect.
78
+ * @param familiarVariant Optional. Specify this to check if the tear came from a specific familiar
79
+ * variant. Default is undefined, which checks for any familiar.
80
+ * @param subType Optional. Specify this to check if the tear came from a specific familiar
81
+ * sub-type. Default is undefined, which checks for any familiar.
82
+ */
83
+ function isTearFromFamiliar(tear, familiarVariant, subType) {
84
+ if (tear.FrameCount === 0) {
85
+ error('Failed to check if the given tear was from a player since the tear\'s frame count was equal to 0. (The "isTearFromFamiliar" function must only be used in the "POST_TEAR_INIT_VERY_LATE" callback or on frame 1 and onwards.)');
86
+ }
87
+ // Normally, all tears have a spawner entity, which is either the player or the familiar.
88
+ if (tear.SpawnerEntity === undefined) {
89
+ return false;
90
+ }
91
+ // We cannot use `tear.SpawnerType` to determine this, since it is baked in to be equal to
92
+ // `EntityType.PLAYER` regardless of whether the tear is from a player or familiar.
93
+ const familiar = tear.SpawnerEntity.ToFamiliar();
94
+ if (familiar === undefined) {
95
+ return false;
96
+ }
97
+ return ((familiarVariant === undefined || familiarVariant === familiar.Variant) &&
98
+ (subType === undefined || subType === familiar.SubType));
99
+ }
100
+ exports.isTearFromFamiliar = isTearFromFamiliar;
101
+ /**
102
+ * Helper function to check if a given tear is from a player (as opposed to e.g. a familiar). This
103
+ * is determined by looking at the `SpawnerEntity`.
104
+ *
105
+ * For the special case of Incubus and Blood Babies, the `SpawnerEntity` of the tear is always the
106
+ * player, but the spawner entity of the tear changes. On frame 0, the spawner entity is equal to
107
+ * the player, and on frame 1, the spawner entity is equal to the familiar. For this reason, you can
108
+ * only use this function in the `POST_TEAR_INIT_VERY_LATE` callback or on frame 1+.
109
+ *
110
+ * If this function is called on frame 0, it will throw a run-time error.
111
+ *
112
+ * Note that this function does not work properly when the tear is from a Lead Pencil barrage. In
113
+ * this case, it will always appear as if the tear is coming from a player.
114
+ */
115
+ function isTearFromPlayer(tear) {
116
+ if (tear.FrameCount === 0) {
117
+ error('Failed to check if the given tear was from a player since the tear\'s frame count was equal to 0. (The "isTearFromPlayer" function must only be used in the "POST_TEAR_INIT_VERY_LATE" callback or on frame 1 and onwards.)');
118
+ }
119
+ // Normally, all tears have a spawner entity, which is either the player or the familiar.
120
+ if (tear.SpawnerEntity === undefined) {
121
+ return false;
122
+ }
123
+ // We cannot use `tear.SpawnerType` to determine this, since it is baked in to be equal to
124
+ // `EntityType.PLAYER` regardless of whether the tear is from a player or familiar.
125
+ const player = tear.SpawnerEntity.ToPlayer();
126
+ return player !== undefined;
127
+ }
128
+ exports.isTearFromPlayer = isTearFromPlayer;
@@ -0,0 +1,89 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isTransformationFlying = exports.hasFlyingTransformation = exports.getTransformationsForCollectibleType = exports.getTransformationName = exports.getPlayerTransformations = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const cachedEnumValues_1 = require("../arrays/cachedEnumValues");
6
+ const transformationNames_1 = require("../objects/transformationNames");
7
+ const ReadonlyMap_1 = require("../types/ReadonlyMap");
8
+ const ReadonlySet_1 = require("../types/ReadonlySet");
9
+ const collectibles_1 = require("./collectibles");
10
+ const flag_1 = require("./flag");
11
+ const TRANSFORMATION_TO_TAG_MAP = new ReadonlyMap_1.ReadonlyMap([
12
+ [isaac_typescript_definitions_1.PlayerForm.GUPPY, isaac_typescript_definitions_1.ItemConfigTag.GUPPY],
13
+ [isaac_typescript_definitions_1.PlayerForm.BEELZEBUB, isaac_typescript_definitions_1.ItemConfigTag.FLY],
14
+ [isaac_typescript_definitions_1.PlayerForm.FUN_GUY, isaac_typescript_definitions_1.ItemConfigTag.MUSHROOM],
15
+ [isaac_typescript_definitions_1.PlayerForm.SERAPHIM, isaac_typescript_definitions_1.ItemConfigTag.ANGEL],
16
+ [isaac_typescript_definitions_1.PlayerForm.BOB, isaac_typescript_definitions_1.ItemConfigTag.BOB],
17
+ [isaac_typescript_definitions_1.PlayerForm.SPUN, isaac_typescript_definitions_1.ItemConfigTag.SYRINGE],
18
+ [isaac_typescript_definitions_1.PlayerForm.YES_MOTHER, isaac_typescript_definitions_1.ItemConfigTag.MOM],
19
+ [isaac_typescript_definitions_1.PlayerForm.CONJOINED, isaac_typescript_definitions_1.ItemConfigTag.BABY],
20
+ [isaac_typescript_definitions_1.PlayerForm.LEVIATHAN, isaac_typescript_definitions_1.ItemConfigTag.DEVIL],
21
+ [isaac_typescript_definitions_1.PlayerForm.OH_CRAP, isaac_typescript_definitions_1.ItemConfigTag.POOP],
22
+ [isaac_typescript_definitions_1.PlayerForm.BOOKWORM, isaac_typescript_definitions_1.ItemConfigTag.BOOK],
23
+ // PlayerForm.ADULTHOOD (11) is based on pill usage.
24
+ [isaac_typescript_definitions_1.PlayerForm.SPIDER_BABY, isaac_typescript_definitions_1.ItemConfigTag.SPIDER], // 12
25
+ // PlayerForm.STOMPY (13) is based on size.
26
+ ]);
27
+ const TRANSFORMATIONS_THAT_GRANT_FLYING = new ReadonlySet_1.ReadonlySet([
28
+ isaac_typescript_definitions_1.PlayerForm.GUPPY,
29
+ isaac_typescript_definitions_1.PlayerForm.BEELZEBUB,
30
+ isaac_typescript_definitions_1.PlayerForm.SERAPHIM,
31
+ isaac_typescript_definitions_1.PlayerForm.LEVIATHAN, // 8
32
+ ]);
33
+ /** Returns a set of the player's current transformations. */
34
+ function getPlayerTransformations(player) {
35
+ const transformations = new Set();
36
+ for (const playerForm of cachedEnumValues_1.PLAYER_FORM_VALUES) {
37
+ if (player.HasPlayerForm(playerForm)) {
38
+ transformations.add(playerForm);
39
+ }
40
+ }
41
+ return transformations;
42
+ }
43
+ exports.getPlayerTransformations = getPlayerTransformations;
44
+ /**
45
+ * Helper function to get a transformation name from a PlayerForm enum.
46
+ *
47
+ * For example:
48
+ *
49
+ * ```ts
50
+ * const transformationName = getTransformationName(PlayerForm.LORD_OF_THE_FLIES);
51
+ * // transformationName is "Beelzebub"
52
+ * ```
53
+ */
54
+ function getTransformationName(playerForm) {
55
+ return transformationNames_1.TRANSFORMATION_NAMES[playerForm];
56
+ }
57
+ exports.getTransformationName = getTransformationName;
58
+ /**
59
+ * Returns a set containing all of the transformations that the given collectible types contribute
60
+ * towards.
61
+ */
62
+ function getTransformationsForCollectibleType(collectibleType) {
63
+ const itemConfigTags = (0, collectibles_1.getCollectibleTags)(collectibleType);
64
+ const transformationSet = new Set();
65
+ for (const playerForm of cachedEnumValues_1.PLAYER_FORM_VALUES) {
66
+ const itemConfigTag = TRANSFORMATION_TO_TAG_MAP.get(playerForm);
67
+ if (itemConfigTag === undefined) {
68
+ continue;
69
+ }
70
+ if ((0, flag_1.hasFlag)(itemConfigTags, itemConfigTag)) {
71
+ transformationSet.add(playerForm);
72
+ }
73
+ }
74
+ return transformationSet;
75
+ }
76
+ exports.getTransformationsForCollectibleType = getTransformationsForCollectibleType;
77
+ function hasFlyingTransformation(player) {
78
+ for (const playerForm of TRANSFORMATIONS_THAT_GRANT_FLYING) {
79
+ if (player.HasPlayerForm(playerForm)) {
80
+ return true;
81
+ }
82
+ }
83
+ return false;
84
+ }
85
+ exports.hasFlyingTransformation = hasFlyingTransformation;
86
+ function isTransformationFlying(playerForm) {
87
+ return TRANSFORMATIONS_THAT_GRANT_FLYING.has(playerForm);
88
+ }
89
+ exports.isTransformationFlying = isTransformationFlying;