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,182 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isVanillaCharacter = exports.isModdedCharacter = exports.isMainCharacter = exports.isFlyingCharacter = exports.getCharacterStartingTrinketType = exports.getCharacterStartingCollectibleTypes = exports.getCharacterSpritePNGFilePath = exports.getCharacterName = exports.getCharacterMaxHeartContainers = exports.getCharacterDeathAnimationName = exports.getCharacterDamageMultiplier = exports.characterStartsWithActiveItem = exports.characterGetsBlackHeartFromEternalHeart = exports.characterCanTakeFreeDevilDeals = exports.characterCanHaveSoulHearts = exports.characterCanHaveRedHearts = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const constants_1 = require("../core/constants");
6
+ const constantsFirstLast_1 = require("../core/constantsFirstLast");
7
+ const characterDamageMultipliers_1 = require("../objects/characterDamageMultipliers");
8
+ const characterNames_1 = require("../objects/characterNames");
9
+ const characterSpritePNGFileNames_1 = require("../objects/characterSpritePNGFileNames");
10
+ const characterStartingCollectibleTypes_1 = require("../objects/characterStartingCollectibleTypes");
11
+ const characterStartingTrinketTypes_1 = require("../objects/characterStartingTrinketTypes");
12
+ const charactersThatStartWithAnActiveItemSet_1 = require("../sets/charactersThatStartWithAnActiveItemSet");
13
+ const charactersWithBlackHeartFromEternalHeartSet_1 = require("../sets/charactersWithBlackHeartFromEternalHeartSet");
14
+ const charactersWithFreeDevilDealsSet_1 = require("../sets/charactersWithFreeDevilDealsSet");
15
+ const charactersWithNoRedHeartsSet_1 = require("../sets/charactersWithNoRedHeartsSet");
16
+ const charactersWithNoSoulHeartsSet_1 = require("../sets/charactersWithNoSoulHeartsSet");
17
+ const lostStyleCharactersSet_1 = require("../sets/lostStyleCharactersSet");
18
+ const ReadonlySet_1 = require("../types/ReadonlySet");
19
+ const FLYING_CHARACTERS_SET = new ReadonlySet_1.ReadonlySet(constants_1.FLYING_CHARACTERS);
20
+ const MAIN_CHARACTERS_SET = new ReadonlySet_1.ReadonlySet(constants_1.MAIN_CHARACTERS);
21
+ const PNG_PATH_PREFIX = "characters/costumes";
22
+ /**
23
+ * Helper function to determine if the given character can have red heart containers. Returns true
24
+ * for characters like Isaac, Magdalene, or Cain. Returns true for Keeper and Tainted Keeper, even
25
+ * though coin containers are not technically the same as red heart containers. Returns false for
26
+ * characters like Blue Baby. Returns false for The Lost and Tainted Lost.
27
+ */
28
+ function characterCanHaveRedHearts(character) {
29
+ return !charactersWithNoRedHeartsSet_1.CHARACTERS_WITH_NO_RED_HEARTS_SET.has(character);
30
+ }
31
+ exports.characterCanHaveRedHearts = characterCanHaveRedHearts;
32
+ /**
33
+ * Helper function to determine if the given character can have soul hearts. Returns true for
34
+ * characters like Isaac, Magdalene, or Cain. Returns false for characters like Bethany. Returns
35
+ * false for The Lost and Tainted Lost.
36
+ */
37
+ function characterCanHaveSoulHearts(character) {
38
+ return !charactersWithNoSoulHeartsSet_1.CHARACTERS_WITH_NO_SOUL_HEARTS_SET.has(character);
39
+ }
40
+ exports.characterCanHaveSoulHearts = characterCanHaveSoulHearts;
41
+ /**
42
+ * Helper function for determining whether the given character can take free Devil Deals. (e.g. The
43
+ * Lost, Tainted Lost, etc.)
44
+ */
45
+ function characterCanTakeFreeDevilDeals(character) {
46
+ return charactersWithFreeDevilDealsSet_1.CHARACTERS_WITH_FREE_DEVIL_DEALS_SET.has(character);
47
+ }
48
+ exports.characterCanTakeFreeDevilDeals = characterCanTakeFreeDevilDeals;
49
+ /**
50
+ * Normally, characters get a red heart container upon reaching a new floor with an eternal heart,
51
+ * but some characters grant a black heart instead. Returns true for Dark Judas and Tainted Judas.
52
+ * Otherwise, returns false.
53
+ */
54
+ function characterGetsBlackHeartFromEternalHeart(character) {
55
+ return charactersWithBlackHeartFromEternalHeartSet_1.CHARACTERS_WITH_BLACK_HEART_FROM_ETERNAL_HEART_SET.has(character);
56
+ }
57
+ exports.characterGetsBlackHeartFromEternalHeart = characterGetsBlackHeartFromEternalHeart;
58
+ /**
59
+ * Helper function to determine if the specified character starts with an active item.
60
+ *
61
+ * For the purposes of this function, the save file is considered to be fully unlocked (e.g. Isaac
62
+ * is considered to starts with the D6, but this is not the case on a brand new save file).
63
+ */
64
+ function characterStartsWithActiveItem(character) {
65
+ return charactersThatStartWithAnActiveItemSet_1.CHARACTERS_THAT_START_WITH_AN_ACTIVE_ITEM_SET.has(character);
66
+ }
67
+ exports.characterStartsWithActiveItem = characterStartsWithActiveItem;
68
+ /**
69
+ * Helper function to get the numerical damage multiplier for a character.
70
+ *
71
+ * @param character The character to get.
72
+ * @param hasWhoreOfBabylon Optional. Whether the character has the Whore of Babylon effect
73
+ * currently active. Defaults to false. This is necessary because Eve's
74
+ * damage multiplier changes from 0.75 to 1 when she has Whore of Babylon
75
+ * active.
76
+ */
77
+ function getCharacterDamageMultiplier(character, hasWhoreOfBabylon = false) {
78
+ if (character === isaac_typescript_definitions_1.PlayerType.EVE && hasWhoreOfBabylon) {
79
+ return 1;
80
+ }
81
+ return characterDamageMultipliers_1.CHARACTER_DAMAGE_MULTIPLIERS[character];
82
+ }
83
+ exports.getCharacterDamageMultiplier = getCharacterDamageMultiplier;
84
+ /**
85
+ * - Most characters have a 56 frame death animation (i.e. the "Death" animation).
86
+ * - The Lost and Tainted Lost have a 38 frame death animation (i.e. the "LostDeath" animation).
87
+ * - Tainted Forgotten have a 20 frame death animation (i.e. the "ForgottenDeath" animation).
88
+ */
89
+ function getCharacterDeathAnimationName(character) {
90
+ if (lostStyleCharactersSet_1.LOST_STYLE_CHARACTERS_SET.has(character)) {
91
+ return "LostDeath";
92
+ }
93
+ if (character === isaac_typescript_definitions_1.PlayerType.FORGOTTEN_B) {
94
+ return "ForgottenDeath";
95
+ }
96
+ return "Death";
97
+ }
98
+ exports.getCharacterDeathAnimationName = getCharacterDeathAnimationName;
99
+ /**
100
+ * Returns the maximum heart containers that the provided character can have. Normally, this is 12,
101
+ * but with Keeper it is 3, and with Tainted Keeper it is 2. This does not account for Birthright or
102
+ * Mother's Kiss; use the `getPlayerMaxHeartContainers` helper function for that.
103
+ */
104
+ function getCharacterMaxHeartContainers(character) {
105
+ // 14
106
+ if (character === isaac_typescript_definitions_1.PlayerType.KEEPER) {
107
+ return 3;
108
+ }
109
+ // 16
110
+ if (character === isaac_typescript_definitions_1.PlayerType.FORGOTTEN) {
111
+ return 6;
112
+ }
113
+ // 17
114
+ if (character === isaac_typescript_definitions_1.PlayerType.SOUL) {
115
+ return 6;
116
+ }
117
+ // 33
118
+ if (character === isaac_typescript_definitions_1.PlayerType.KEEPER_B) {
119
+ return 2;
120
+ }
121
+ return 12;
122
+ }
123
+ exports.getCharacterMaxHeartContainers = getCharacterMaxHeartContainers;
124
+ /** Helper function to get the name of a character. Returns "Unknown" for modded characters. */
125
+ function getCharacterName(character) {
126
+ if (isModdedCharacter(character)) {
127
+ return "Unknown";
128
+ }
129
+ return characterNames_1.CHARACTER_NAMES[character];
130
+ }
131
+ exports.getCharacterName = getCharacterName;
132
+ /**
133
+ * Helper function to get the path to the sprite for a particular character.
134
+ *
135
+ * For example, the file path for `PlayerType.ISAAC` is
136
+ * "characters/costumes/character_001_isaac.png".
137
+ */
138
+ function getCharacterSpritePNGFilePath(character) {
139
+ const fileName = characterSpritePNGFileNames_1.CHARACTER_SPRITE_PNG_FILE_NAMES[character];
140
+ return `${PNG_PATH_PREFIX}/${fileName}`;
141
+ }
142
+ exports.getCharacterSpritePNGFilePath = getCharacterSpritePNGFilePath;
143
+ /**
144
+ * Helper function to get the collectibles that are granted to a particular character at the
145
+ * beginning of a run.
146
+ *
147
+ * Note that this will return an empty array for Eden and Tainted Eden.
148
+ */
149
+ function getCharacterStartingCollectibleTypes(character) {
150
+ return characterStartingCollectibleTypes_1.CHARACTER_STARTING_COLLECTIBLE_TYPES[character];
151
+ }
152
+ exports.getCharacterStartingCollectibleTypes = getCharacterStartingCollectibleTypes;
153
+ /**
154
+ * Helper function to get the trinket that is granted to a particular character at the beginning of
155
+ * a run. Returns undefined if the character does not start with a trinket.
156
+ *
157
+ * Note that this will return undefined for Eden and Tainted Eden.
158
+ */
159
+ function getCharacterStartingTrinketType(character) {
160
+ return characterStartingTrinketTypes_1.CHARACTER_STARTING_TRINKET_TYPE[character];
161
+ }
162
+ exports.getCharacterStartingTrinketType = getCharacterStartingTrinketType;
163
+ function isFlyingCharacter(character) {
164
+ return FLYING_CHARACTERS_SET.has(character);
165
+ }
166
+ exports.isFlyingCharacter = isFlyingCharacter;
167
+ /**
168
+ * Helper function to check if the provided character is one of the characters that are selectable
169
+ * from the main menu (and have achievements related to completing the various bosses and so on).
170
+ */
171
+ function isMainCharacter(character) {
172
+ return MAIN_CHARACTERS_SET.has(character);
173
+ }
174
+ exports.isMainCharacter = isMainCharacter;
175
+ function isModdedCharacter(character) {
176
+ return !isVanillaCharacter(character);
177
+ }
178
+ exports.isModdedCharacter = isModdedCharacter;
179
+ function isVanillaCharacter(character) {
180
+ return character <= constantsFirstLast_1.LAST_VANILLA_CHARACTER;
181
+ }
182
+ exports.isVanillaCharacter = isVanillaCharacter;
@@ -0,0 +1,251 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.playChargeSoundEffect = exports.isActiveSlotDoubleCharged = exports.getUsableActiveItemSlots = exports.getTotalCharge = exports.getChargesAwayFromMax = exports.addRoomClearCharges = exports.addRoomClearChargeToSlot = exports.addRoomClearCharge = exports.addCharge = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const cachedClasses_1 = require("../core/cachedClasses");
6
+ const collectibles_1 = require("./collectibles");
7
+ const playerCollectibles_1 = require("./playerCollectibles");
8
+ const playerIndex_1 = require("./playerIndex");
9
+ const roomShape_1 = require("./roomShape");
10
+ /**
11
+ * Helper function to add a charge to the player's active item. Will flash the HUD and play the
12
+ * appropriate sound effect, depending on whether the charge is partially full or completely full.
13
+ *
14
+ * If the player's active item is already fully charged, then this function will return 0 and not
15
+ * flash the HUD or play a sound effect.
16
+ *
17
+ * This function will take the following things into account:
18
+ * - The Battery
19
+ * - AAA Battery
20
+ *
21
+ * @param player The player to grant the charges to.
22
+ * @param activeSlot Optional. The slot to grant the charges to. Default is `ActiveSlot.PRIMARY`.
23
+ * @param numCharges Optional. The amount of charges to grant. Default is 1.
24
+ * @param playSoundEffect Optional. Whether to play a charge-related sound effect. Default is true.
25
+ * @returns The amount of charges that were actually granted. For example, if the active item was
26
+ * only one away from a full charge, but the `numCharges` provided to this function was 2,
27
+ * then this function would return 1.
28
+ */
29
+ function addCharge(player, activeSlot = isaac_typescript_definitions_1.ActiveSlot.PRIMARY, numCharges = 1, playSoundEffect = true) {
30
+ const hud = cachedClasses_1.game.GetHUD();
31
+ // Ensure that there is enough space on the active item to store these amount of charges. (If we
32
+ // add too many charges, it will grant orange "battery" charges, even if the player does not have
33
+ // The Battery.)
34
+ const chargesAwayFromMax = getChargesAwayFromMax(player, activeSlot);
35
+ const chargesToAdd = numCharges > chargesAwayFromMax ? chargesAwayFromMax : numCharges;
36
+ // The AAA Battery trinket might grant an additional charge.
37
+ const modifiedChargesToAdd = getChargesToAddWithAAAModifier(player, activeSlot, chargesToAdd);
38
+ const totalCharge = getTotalCharge(player, activeSlot);
39
+ const newCharge = totalCharge + modifiedChargesToAdd;
40
+ if (newCharge === totalCharge) {
41
+ return 0;
42
+ }
43
+ player.SetActiveCharge(newCharge, activeSlot);
44
+ hud.FlashChargeBar(player, activeSlot);
45
+ if (playSoundEffect) {
46
+ playChargeSoundEffect(player, activeSlot);
47
+ }
48
+ return modifiedChargesToAdd;
49
+ }
50
+ exports.addCharge = addCharge;
51
+ /**
52
+ * Helper function to add a charge to a player's active item(s), emulating what happens when a room
53
+ * is cleared.
54
+ *
55
+ * This function will take the following things into account:
56
+ * - 2x2 rooms and L rooms granting a double charge
57
+ * - The Battery
58
+ * - AAA Battery
59
+ * - Not charging active items with `chargetype="special"`
60
+ *
61
+ * @param player The player to grant the charges to.
62
+ * @param bigRoomDoubleCharge Optional. If set to false, it will treat the current room as a 1x1
63
+ * room for the purposes of calculating how much charge to grant. Default
64
+ * is true.
65
+ * @param playSoundEffect Optional. Whether to play a charge-related sound effect. Default is true.
66
+ */
67
+ function addRoomClearCharge(player, bigRoomDoubleCharge = true, playSoundEffect = true) {
68
+ for (const activeSlot of [
69
+ isaac_typescript_definitions_1.ActiveSlot.PRIMARY,
70
+ isaac_typescript_definitions_1.ActiveSlot.SECONDARY,
71
+ isaac_typescript_definitions_1.ActiveSlot.POCKET,
72
+ ]) {
73
+ addRoomClearChargeToSlot(player, activeSlot, bigRoomDoubleCharge, playSoundEffect);
74
+ }
75
+ }
76
+ exports.addRoomClearCharge = addRoomClearCharge;
77
+ /**
78
+ * Helper function to add a charge to one of a player's active items, emulating what happens when a
79
+ * room is cleared.
80
+ *
81
+ * This function will take the following things into account:
82
+ * - L rooms and 2x2 rooms granting a double charge
83
+ * - The Battery
84
+ * - AAA Battery
85
+ * - Not charging active items with `chargetype="special"`
86
+ *
87
+ * @param player The player to grant the charges to.
88
+ * @param activeSlot Optional. The active item slot to grant the charges to. Default is
89
+ * `ActiveSlot.PRIMARY`.
90
+ * @param bigRoomDoubleCharge Optional. If set to false, it will treat the current room as a 1x1
91
+ * room for the purposes of calculating how much charge to grant. Default
92
+ * is true.
93
+ * @param playSoundEffect Optional. Whether to play a charge-related sound effect. Default is true.
94
+ */
95
+ function addRoomClearChargeToSlot(player, activeSlot = isaac_typescript_definitions_1.ActiveSlot.PRIMARY, bigRoomDoubleCharge = true, playSoundEffect = true) {
96
+ const activeItem = player.GetActiveItem(activeSlot);
97
+ if (activeItem === isaac_typescript_definitions_1.CollectibleType.NULL) {
98
+ return;
99
+ }
100
+ // Certain collectibles have special charge mechanisms and are not charged upon a room being
101
+ // cleared.
102
+ const chargeType = (0, collectibles_1.getCollectibleChargeType)(activeItem);
103
+ if (chargeType === isaac_typescript_definitions_1.ItemConfigChargeType.SPECIAL) {
104
+ return;
105
+ }
106
+ const room = cachedClasses_1.game.GetRoom();
107
+ const roomShape = room.GetRoomShape();
108
+ // Big rooms grant two charges and normal rooms grant one charge.
109
+ let numCharges = bigRoomDoubleCharge ? (0, roomShape_1.getRoomShapeCharges)(roomShape) : 1;
110
+ // Handle the special case of a timed item. When clearing a room with a timed item, it should
111
+ // become fully charged.
112
+ if (chargeType === isaac_typescript_definitions_1.ItemConfigChargeType.TIMED) {
113
+ // The charges will become clamped to the proper amount in the `addCharge` function. (If the
114
+ // item is at 50% charge and the player has The Battery, it should go to 150% charged.)
115
+ numCharges = (0, collectibles_1.getCollectibleMaxCharges)(activeItem);
116
+ }
117
+ addCharge(player, activeSlot, numCharges, playSoundEffect);
118
+ }
119
+ exports.addRoomClearChargeToSlot = addRoomClearChargeToSlot;
120
+ /**
121
+ * The AAA Battery should grant an extra charge when the active item is one away from being fully
122
+ * charged.
123
+ */
124
+ function getChargesToAddWithAAAModifier(player, activeSlot, chargesToAdd) {
125
+ const hasAAABattery = player.HasTrinket(isaac_typescript_definitions_1.TrinketType.AAA_BATTERY);
126
+ if (!hasAAABattery) {
127
+ return chargesToAdd;
128
+ }
129
+ const chargesAwayFromMax = getChargesAwayFromMax(player, activeSlot);
130
+ const AAABatteryShouldApply = chargesToAdd === chargesAwayFromMax - 1;
131
+ return AAABatteryShouldApply ? chargesToAdd + 1 : chargesToAdd;
132
+ }
133
+ /**
134
+ * Helper function to add a charge to every player's active item, emulating what happens when a room
135
+ * is cleared.
136
+ *
137
+ * This function will take the following things into account:
138
+ * - L rooms and 2x2 rooms granting a double charge
139
+ * - The Battery
140
+ * - AAA Battery
141
+ *
142
+ * @param bigRoomDoubleCharge Optional. If set to false, it will treat the current room as a 1x1
143
+ * room for the purposes of calculating how much charge to grant. Default
144
+ * is true.
145
+ */
146
+ function addRoomClearCharges(bigRoomDoubleCharge = true) {
147
+ for (const player of (0, playerIndex_1.getPlayers)()) {
148
+ addRoomClearCharge(player, bigRoomDoubleCharge);
149
+ }
150
+ }
151
+ exports.addRoomClearCharges = addRoomClearCharges;
152
+ /**
153
+ * Helper function to get the amount of charges away from the maximum charge that a particular
154
+ * player is.
155
+ *
156
+ * This function accounts for The Battery. For example, if the player has 2/6 charges on a D6, this
157
+ * function will return 10 (because there are 4 charges remaining on the base charge and 6 charges
158
+ * remaining on The Battery charge).
159
+ *
160
+ * @param player The player to get the charges from.
161
+ * @param activeSlot Optional. The slot to get the charges from. Default is `ActiveSlot.PRIMARY`.
162
+ */
163
+ function getChargesAwayFromMax(player, activeSlot = isaac_typescript_definitions_1.ActiveSlot.PRIMARY) {
164
+ const totalCharge = getTotalCharge(player, activeSlot);
165
+ const activeItem = player.GetActiveItem(activeSlot);
166
+ const hasBattery = player.HasCollectible(isaac_typescript_definitions_1.CollectibleType.BATTERY);
167
+ const maxCharges = (0, collectibles_1.getCollectibleMaxCharges)(activeItem);
168
+ const effectiveMaxCharges = hasBattery ? maxCharges * 2 : maxCharges;
169
+ return effectiveMaxCharges - totalCharge;
170
+ }
171
+ exports.getChargesAwayFromMax = getChargesAwayFromMax;
172
+ /**
173
+ * Helper function to get the combined normal charge and the battery charge for the player's active
174
+ * item. This is useful because you have to add these two values together when setting the active
175
+ * charge.
176
+ *
177
+ * @param player The player to get the charges from.
178
+ * @param activeSlot Optional. The slot to get the charges from. Default is `ActiveSlot.PRIMARY`.
179
+ */
180
+ function getTotalCharge(player, activeSlot = isaac_typescript_definitions_1.ActiveSlot.PRIMARY) {
181
+ const activeCharge = player.GetActiveCharge(activeSlot);
182
+ const batteryCharge = player.GetBatteryCharge(activeSlot);
183
+ return activeCharge + batteryCharge;
184
+ }
185
+ exports.getTotalCharge = getTotalCharge;
186
+ /**
187
+ * Helper function to find the active slots that the player has the corresponding collectible type
188
+ * in and have enough charge to be used. Returns an empty array if the player does not have the
189
+ * collectible in any active slot or does not have enough charges.
190
+ */
191
+ function getUsableActiveItemSlots(player, collectibleType) {
192
+ const maxCharges = (0, collectibles_1.getCollectibleMaxCharges)(collectibleType);
193
+ const activeSlots = (0, playerCollectibles_1.getActiveItemSlots)(player, collectibleType);
194
+ return activeSlots.filter((activeSlot) => {
195
+ const totalCharge = getTotalCharge(player, activeSlot);
196
+ return totalCharge >= maxCharges;
197
+ });
198
+ }
199
+ exports.getUsableActiveItemSlots = getUsableActiveItemSlots;
200
+ /**
201
+ * Helper function to check if a player's active item is "double charged", meaning that it has both
202
+ * a full normal charge and a full charge from The Battery.
203
+ *
204
+ * @param player The player to check.
205
+ * @param activeSlot Optional. The slot to check. Default is `ActiveSlot.PRIMARY`.
206
+ */
207
+ function isActiveSlotDoubleCharged(player, activeSlot = isaac_typescript_definitions_1.ActiveSlot.PRIMARY) {
208
+ const collectibleType = player.GetActiveItem(activeSlot);
209
+ const batteryCharge = player.GetBatteryCharge(activeSlot);
210
+ const maxCharges = (0, collectibles_1.getCollectibleMaxCharges)(collectibleType);
211
+ return batteryCharge >= maxCharges;
212
+ }
213
+ exports.isActiveSlotDoubleCharged = isActiveSlotDoubleCharged;
214
+ /**
215
+ * Helper function to play the appropriate sound effect for a player after getting one or more
216
+ * charges on their active item. (There is a different sound depending on whether the item is fully
217
+ * charged.)
218
+ *
219
+ * @param player The player to play the sound effect for.
220
+ * @param activeSlot Optional. The slot that was just charged. Default is `ActiveSlot.PRIMARY`.
221
+ */
222
+ function playChargeSoundEffect(player, activeSlot = isaac_typescript_definitions_1.ActiveSlot.PRIMARY) {
223
+ for (const soundEffect of [
224
+ isaac_typescript_definitions_1.SoundEffect.BATTERY_CHARGE,
225
+ isaac_typescript_definitions_1.SoundEffect.BEEP, // 171
226
+ ]) {
227
+ cachedClasses_1.sfxManager.Stop(soundEffect);
228
+ }
229
+ const chargeSoundEffect = shouldPlayFullRechargeSound(player, activeSlot)
230
+ ? isaac_typescript_definitions_1.SoundEffect.BATTERY_CHARGE
231
+ : isaac_typescript_definitions_1.SoundEffect.BEEP;
232
+ cachedClasses_1.sfxManager.Play(chargeSoundEffect);
233
+ }
234
+ exports.playChargeSoundEffect = playChargeSoundEffect;
235
+ function shouldPlayFullRechargeSound(player, activeSlot) {
236
+ const activeItem = player.GetActiveItem(activeSlot);
237
+ const activeCharge = player.GetActiveCharge(activeSlot);
238
+ const batteryCharge = player.GetBatteryCharge(activeSlot);
239
+ const hasBattery = player.HasCollectible(isaac_typescript_definitions_1.CollectibleType.BATTERY);
240
+ const maxCharges = (0, collectibles_1.getCollectibleMaxCharges)(activeItem);
241
+ // If we do not have The Battery, play the full recharge sound if we are now fully charged.
242
+ if (!hasBattery) {
243
+ // We cannot use the `EntityPlayer.NeedsCharge` method because it does not work properly for
244
+ // items with `chargetype="special"`.
245
+ return activeCharge === maxCharges;
246
+ }
247
+ // If we do have The Battery, play the full recharge sound if we are exactly double charged or
248
+ // exactly single charged.
249
+ return (batteryCharge === maxCharges ||
250
+ (activeCharge === maxCharges && batteryCharge === 0));
251
+ }
@@ -0,0 +1,54 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.renderChargeBar = exports.newChargeBarSprites = void 0;
4
+ const CHARGE_BAR_ANM2 = "gfx/ui/ui_chargebar.anm2";
5
+ /**
6
+ * Constructor for a `ChargeBarSprites` object. For more information, see the `renderChargeBar`
7
+ * helper function.
8
+ *
9
+ * Note that this is for the vertical charge bar that represents the number of charges that an
10
+ * active item has, not the circular charge bar that shows e.g. the charge rate of Brimstone.
11
+ */
12
+ function newChargeBarSprites(maxCharges) {
13
+ const back = Sprite();
14
+ back.Load(CHARGE_BAR_ANM2, true);
15
+ back.Play("BarEmpty", true);
16
+ const meter = Sprite();
17
+ meter.Load(CHARGE_BAR_ANM2, true);
18
+ meter.Play("BarFull", true);
19
+ const meterBattery = Sprite();
20
+ meterBattery.Load(CHARGE_BAR_ANM2, true);
21
+ meterBattery.Play("BarFull", true);
22
+ const lines = Sprite();
23
+ lines.Load(CHARGE_BAR_ANM2, true);
24
+ lines.Play(`BarOverlay${maxCharges}`, true);
25
+ return {
26
+ back,
27
+ meter,
28
+ meterBattery,
29
+ lines,
30
+ maxCharges,
31
+ };
32
+ }
33
+ exports.newChargeBarSprites = newChargeBarSprites;
34
+ /**
35
+ * Helper function to render a charge bar on the screen. First, call the `newChargeBarSprites`
36
+ * function to initialize the sprites, and then call this function on every render frame.
37
+ *
38
+ * Note that this is for the vertical charge bar that represents the number of charges that an
39
+ * active item has, not the circular charge bar that shows e.g. the charge rate of Brimstone.
40
+ */
41
+ function renderChargeBar(sprites, position, normalCharges, batteryCharges) {
42
+ sprites.back.Render(position);
43
+ const normalChargesClamp = getChargeBarClamp(normalCharges, sprites.maxCharges);
44
+ sprites.meter.Render(position, normalChargesClamp);
45
+ const batteryChargesClamp = getChargeBarClamp(batteryCharges, sprites.maxCharges);
46
+ sprites.meterBattery.Render(position, batteryChargesClamp);
47
+ sprites.lines.Render(position);
48
+ }
49
+ exports.renderChargeBar = renderChargeBar;
50
+ function getChargeBarClamp(charges, maxCharges) {
51
+ const meterMultiplier = 24 / maxCharges;
52
+ const meterClip = 26 - charges * meterMultiplier;
53
+ return Vector(0, meterClip);
54
+ }
@@ -0,0 +1,24 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.isQuestCollectible = exports.collectibleHasTag = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const cachedClasses_1 = require("../core/cachedClasses");
6
+ const types_1 = require("./types");
7
+ function collectibleHasTag(collectibleOrCollectibleType, tag) {
8
+ const collectibleType = (0, types_1.isInteger)(collectibleOrCollectibleType)
9
+ ? collectibleOrCollectibleType
10
+ : collectibleOrCollectibleType.SubType;
11
+ const itemConfigItem = cachedClasses_1.itemConfig.GetCollectible(collectibleType);
12
+ if (itemConfigItem === undefined) {
13
+ return false;
14
+ }
15
+ return itemConfigItem.HasTags(tag);
16
+ }
17
+ exports.collectibleHasTag = collectibleHasTag;
18
+ function isQuestCollectible(collectibleOrCollectibleType) {
19
+ const collectibleType = (0, types_1.isInteger)(collectibleOrCollectibleType)
20
+ ? collectibleOrCollectibleType
21
+ : collectibleOrCollectibleType.SubType;
22
+ return collectibleHasTag(collectibleType, isaac_typescript_definitions_1.ItemConfigTag.QUEST);
23
+ }
24
+ exports.isQuestCollectible = isQuestCollectible;