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,75 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CollectibleItemPoolType = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const cachedClasses_1 = require("../../../core/cachedClasses");
12
+ const decorators_1 = require("../../../decorators");
13
+ const ISCFeature_1 = require("../../../enums/ISCFeature");
14
+ const entities_1 = require("../../../functions/entities");
15
+ const pickupVariants_1 = require("../../../functions/pickupVariants");
16
+ const rooms_1 = require("../../../functions/rooms");
17
+ const Feature_1 = require("../../private/Feature");
18
+ const v = {
19
+ run: {
20
+ collectibleItemPoolTypeMap: new Map(),
21
+ },
22
+ };
23
+ class CollectibleItemPoolType extends Feature_1.Feature {
24
+ /** @internal */
25
+ v = v;
26
+ pickupIndexCreation;
27
+ /** @internal */
28
+ constructor(pickupIndexCreation) {
29
+ super();
30
+ this.featuresUsed = [ISCFeature_1.ISCFeature.PICKUP_INDEX_CREATION];
31
+ this.callbacksUsed = [
32
+ // 34
33
+ [
34
+ isaac_typescript_definitions_1.ModCallback.POST_PICKUP_INIT,
35
+ this.postPickupInitCollectible,
36
+ [isaac_typescript_definitions_1.PickupVariant.COLLECTIBLE],
37
+ ],
38
+ ];
39
+ this.pickupIndexCreation = pickupIndexCreation;
40
+ }
41
+ // ModCallback.POST_PICKUP_INIT (34)
42
+ // PickupVariant.COLLECTIBLE (100)
43
+ postPickupInitCollectible = (collectible) => {
44
+ const pickupIndex = this.pickupIndexCreation.getPickupIndex(collectible);
45
+ if (!v.run.collectibleItemPoolTypeMap.has(pickupIndex)) {
46
+ const itemPool = cachedClasses_1.game.GetItemPool();
47
+ const lastItemPoolType = itemPool.GetLastPool();
48
+ v.run.collectibleItemPoolTypeMap.set(pickupIndex, lastItemPoolType);
49
+ }
50
+ };
51
+ /**
52
+ * Helper function to get the item pool type that a given collectible came from. Since there is no
53
+ * native method in the API to get this, we listen in the `POST_PICKUP_INIT` callback for
54
+ * collectibles, use the `ItemPool.GetLastPool` method, and then assume that the collectible
55
+ * matches.
56
+ *
57
+ * In order to use this function, you must upgrade your mod with
58
+ * `ISCFeature.COLLECTIBLE_ITEM_POOL_TYPE`.
59
+ *
60
+ * @public
61
+ */
62
+ getCollectibleItemPoolType(collectible) {
63
+ if (!(0, pickupVariants_1.isCollectible)(collectible)) {
64
+ const entityID = (0, entities_1.getEntityID)(collectible);
65
+ error(`The "getCollectibleItemPoolType" function was given a non-collectible: ${entityID}`);
66
+ }
67
+ const pickupIndex = this.pickupIndexCreation.getPickupIndex(collectible);
68
+ const itemPoolType = v.run.collectibleItemPoolTypeMap.get(pickupIndex);
69
+ return itemPoolType ?? (0, rooms_1.getRoomItemPoolType)();
70
+ }
71
+ }
72
+ exports.CollectibleItemPoolType = CollectibleItemPoolType;
73
+ __decorate([
74
+ decorators_1.Exported
75
+ ], CollectibleItemPoolType.prototype, "getCollectibleItemPoolType", null);
@@ -0,0 +1,144 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CustomHotkeys = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const decorators_1 = require("../../../decorators");
12
+ const input_1 = require("../../../functions/input");
13
+ const DefaultMap_1 = require("../../DefaultMap");
14
+ const Feature_1 = require("../../private/Feature");
15
+ class CustomHotkeys extends Feature_1.Feature {
16
+ /**
17
+ * The keys are the keyboard keys that trigger the hotkey. The values are the functions that
18
+ * contain the arbitrary code to run.
19
+ */
20
+ staticHotkeyFunctionMap = new Map();
21
+ /**
22
+ * The keys are the functions that determine what the hotkey key is. The values are the functions
23
+ * that contain the arbitrary code to run.
24
+ */
25
+ dynamicHotkeyFunctionMap = new Map();
26
+ keyPressedMap = new DefaultMap_1.DefaultMap(false);
27
+ /** @internal */
28
+ constructor() {
29
+ super();
30
+ this.callbacksUsed = [
31
+ // 2
32
+ [isaac_typescript_definitions_1.ModCallback.POST_RENDER, this.postRender],
33
+ ];
34
+ }
35
+ // ModCallback.POST_RENDER (2)
36
+ postRender = () => {
37
+ for (const [keyboard, triggerFunc] of this.staticHotkeyFunctionMap) {
38
+ this.checkIfTriggered(keyboard, triggerFunc);
39
+ }
40
+ for (const [keyboardFunc, triggerFunc] of this.dynamicHotkeyFunctionMap) {
41
+ const keyboard = keyboardFunc();
42
+ if (keyboard !== undefined) {
43
+ this.checkIfTriggered(keyboard, triggerFunc);
44
+ }
45
+ }
46
+ };
47
+ checkIfTriggered(keyboard, triggerFunc) {
48
+ const isPressed = (0, input_1.isKeyboardPressed)(keyboard);
49
+ const wasPreviouslyPressed = this.keyPressedMap.getAndSetDefault(keyboard);
50
+ this.keyPressedMap.set(keyboard, isPressed);
51
+ if (isPressed && !wasPreviouslyPressed) {
52
+ triggerFunc();
53
+ }
54
+ }
55
+ /**
56
+ * Helper function to run arbitrary code when you press and release a specific keyboard key.
57
+ *
58
+ * This can be used to easily set up custom hotkeys to facilitate custom game features or to
59
+ * assist in debugging.
60
+ *
61
+ * Inputs are checked for in the `POST_RENDER` callback.
62
+ *
63
+ * This is different from the `setHotkey` function in that the keyboard activation key is not
64
+ * hardcoded and is instead the return value of a provided function. This is useful for situations
65
+ * where the key can change (like if end-users can specify a custom hotkey using Mod Config Menu).
66
+ *
67
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_HOTKEYS`.
68
+ *
69
+ * @param getKeyFunc The function that returns the key that will trigger the hotkey.
70
+ * @param triggerFunc A function containing the arbitrary code that you want to execute when the
71
+ * hotkey is triggered.
72
+ * @public
73
+ */
74
+ setConditionalHotkey(getKeyFunc, triggerFunc) {
75
+ if (this.dynamicHotkeyFunctionMap.has(getKeyFunc)) {
76
+ error("Failed to register a hotkey due to a custom hotkey already being defined for the submitted function.");
77
+ }
78
+ this.dynamicHotkeyFunctionMap.set(getKeyFunc, triggerFunc);
79
+ }
80
+ /**
81
+ * Helper function to run arbitrary code when you press and release a specific keyboard key.
82
+ *
83
+ * This can be used to easily set up custom hotkeys to facilitate custom game features or to
84
+ * assist in debugging.
85
+ *
86
+ * Inputs are checked for in the `POST_RENDER` callback.
87
+ *
88
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_HOTKEYS`.
89
+ *
90
+ * @param keyboard The key that you want to trigger the hotkey.
91
+ * @param triggerFunc A function containing the arbitrary code that you want to execute when the
92
+ * hotkey is triggered.
93
+ * @public
94
+ */
95
+ setHotkey(keyboard, triggerFunc) {
96
+ if (this.staticHotkeyFunctionMap.has(keyboard)) {
97
+ error(`Failed to register a hotkey due to a hotkey already being defined for: Keyboard.${isaac_typescript_definitions_1.Keyboard[keyboard]} (${keyboard})`);
98
+ }
99
+ this.staticHotkeyFunctionMap.set(keyboard, triggerFunc);
100
+ }
101
+ /**
102
+ * Helper function to remove a hotkey created with the `setConditionalHotkey` function.
103
+ *
104
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_HOTKEYS`.
105
+ *
106
+ * @param getKeyFunc Equal to the `getKeyFunc` that you passed when initially registering the
107
+ * hotkey.
108
+ * @public
109
+ */
110
+ unsetConditionalHotkey(getKeyFunc) {
111
+ if (!this.dynamicHotkeyFunctionMap.has(getKeyFunc)) {
112
+ error("Failed to unregister a hotkey since there is no existing hotkey defined for the submitted function.");
113
+ }
114
+ this.dynamicHotkeyFunctionMap.delete(getKeyFunc);
115
+ }
116
+ /**
117
+ * Helper function to remove a hotkey created with the `setHotkey` function.
118
+ *
119
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_HOTKEYS`.
120
+ *
121
+ * @param keyboard Equal to the keyboard value that you passed when initially registering the
122
+ * hotkey.
123
+ * @public
124
+ */
125
+ unsetHotkey(keyboard) {
126
+ if (!this.staticHotkeyFunctionMap.has(keyboard)) {
127
+ error(`Failed to unregister a hotkey since there is no existing hotkey defined for: Keyboard.${isaac_typescript_definitions_1.Keyboard[keyboard]} (${keyboard})`);
128
+ }
129
+ this.staticHotkeyFunctionMap.delete(keyboard);
130
+ }
131
+ }
132
+ exports.CustomHotkeys = CustomHotkeys;
133
+ __decorate([
134
+ decorators_1.Exported
135
+ ], CustomHotkeys.prototype, "setConditionalHotkey", null);
136
+ __decorate([
137
+ decorators_1.Exported
138
+ ], CustomHotkeys.prototype, "setHotkey", null);
139
+ __decorate([
140
+ decorators_1.Exported
141
+ ], CustomHotkeys.prototype, "unsetConditionalHotkey", null);
142
+ __decorate([
143
+ decorators_1.Exported
144
+ ], CustomHotkeys.prototype, "unsetHotkey", null);
@@ -0,0 +1,128 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CustomItemPools = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const decorators_1 = require("../../../decorators");
12
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
13
+ const array_1 = require("../../../functions/array");
14
+ const map_1 = require("../../../functions/map");
15
+ const utils_1 = require("../../../functions/utils");
16
+ const weighted_1 = require("../../../functions/weighted");
17
+ const ReadonlyMap_1 = require("../../../types/ReadonlyMap");
18
+ const Feature_1 = require("../../private/Feature");
19
+ const v = {
20
+ run: {
21
+ customItemPools: new ReadonlyMap_1.ReadonlyMap(),
22
+ },
23
+ };
24
+ const customItemPoolMap = new Map();
25
+ class CustomItemPools extends Feature_1.Feature {
26
+ /** @internal */
27
+ v = v;
28
+ /** @internal */
29
+ constructor() {
30
+ super();
31
+ this.customCallbacksUsed = [
32
+ [
33
+ ModCallbackCustom_1.ModCallbackCustom.POST_GAME_STARTED_REORDERED,
34
+ this.postGameStartedReorderedFalse,
35
+ [false],
36
+ ],
37
+ ];
38
+ }
39
+ // ModCallbackCustom.POST_GAME_STARTED_REORDERED
40
+ // false
41
+ postGameStartedReorderedFalse = () => {
42
+ v.run.customItemPools = (0, map_1.copyMap)(customItemPoolMap);
43
+ };
44
+ /**
45
+ * Helper function to register a custom item pool. Use this function once when your mod first
46
+ * loads to declare the items that you want to be in the item pools. Then, in the middle of a run,
47
+ * you can use `getCustomItemPoolCollectible`.
48
+ *
49
+ * For example:
50
+ *
51
+ * ```ts
52
+ * const ItemPoolTypeCustom = {
53
+ * FOO = 0 as ItemPoolType,
54
+ * } as const;
55
+ *
56
+ * const FOO_ITEM_POOL = [
57
+ * [CollectibleType.SAD_ONION, 1],
58
+ * [CollectibleType.INNER_EYE, 0.5],
59
+ * ];
60
+ *
61
+ * registerCustomItemPool(ItemPoolTypeCustom.FOO, FOO_ITEM_POOL);
62
+ * ```
63
+ *
64
+ * Note that custom item pools do not currently support partial weight decrementation on sight.
65
+ *
66
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_ITEM_POOLS`.
67
+ *
68
+ * @param itemPoolTypeCustom An integer that identifies what kind of item pool you are creating.
69
+ * It should correspond to a local `ItemPoolTypeCustom` enum in your
70
+ * mod. The integer can be any unique value and can safely overlap with
71
+ * the vanilla item pool type values (or values chosen by other mods).
72
+ * @param collectibles An array of weighted collectible tuples that represent the item pool that
73
+ * you are creating. The first element in he tuple is the `CollectibleType`,
74
+ * and the second element in the tuple is the float that represents the weight
75
+ * of the collectible.
76
+ * @public
77
+ */
78
+ registerCustomItemPool(itemPoolTypeCustom, collectibles) {
79
+ if (customItemPoolMap.has(itemPoolTypeCustom)) {
80
+ error(`Failed to register a custom item pool since the provided type of ${itemPoolTypeCustom} was already registered.`);
81
+ }
82
+ customItemPoolMap.set(itemPoolTypeCustom, collectibles);
83
+ }
84
+ /**
85
+ * Helper function to get a new collectible from a custom item pool created with the
86
+ * `registerCustomItemPool` function. This function has the same format as the
87
+ * `ItemPool.GetCollectible` method.
88
+ *
89
+ * By default, a collectible will not be removed from the pool once it is selected, unless the
90
+ * `decrease` argument is set to true (similar to how a vanilla item pool works).
91
+ *
92
+ * If you want to get an unseeded collectible type, you must explicitly pass `undefined` to the
93
+ * `seedOrRNG` parameter.
94
+ *
95
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_ITEM_POOLS`.
96
+ *
97
+ * @param itemPoolTypeCustom An integer representing the custom item pool to use.
98
+ * @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
99
+ * `RNG.Next` method will be called. If `undefined` is provided, it will default
100
+ * to a random seed.
101
+ * @param decrease Optional. Whether to remove the selected collectible from the item pool.
102
+ * Default is true.
103
+ * @param defaultItem Optional. The collectible to return if the item pool is depleted. Default is
104
+ * `CollectibleType.NULL`.
105
+ * @public
106
+ */
107
+ getCustomItemPoolCollectible(itemPoolTypeCustom, seedOrRNG, decrease = false, defaultItem = isaac_typescript_definitions_1.CollectibleType.NULL) {
108
+ const customItemPool = v.run.customItemPools.get(itemPoolTypeCustom);
109
+ (0, utils_1.assertDefined)(customItemPool, `Failed to find the custom item pool of: ${itemPoolTypeCustom}`);
110
+ if (customItemPool.length === 0) {
111
+ return defaultItem;
112
+ }
113
+ const randomIndex = (0, weighted_1.getRandomIndexFromWeightedArray)(customItemPool, seedOrRNG);
114
+ const tuple = customItemPool[randomIndex];
115
+ (0, utils_1.assertDefined)(tuple, `Failed to get an element from a custom item pool using a random index of: ${randomIndex}`);
116
+ if (decrease) {
117
+ (0, array_1.arrayRemoveIndexInPlace)(customItemPool, randomIndex);
118
+ }
119
+ return tuple[0];
120
+ }
121
+ }
122
+ exports.CustomItemPools = CustomItemPools;
123
+ __decorate([
124
+ decorators_1.Exported
125
+ ], CustomItemPools.prototype, "registerCustomItemPool", null);
126
+ __decorate([
127
+ decorators_1.Exported
128
+ ], CustomItemPools.prototype, "getCustomItemPoolCollectible", null);
@@ -0,0 +1,118 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.CustomPickups = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const decorators_1 = require("../../../decorators");
12
+ const LadderSubTypeCustom_1 = require("../../../enums/LadderSubTypeCustom");
13
+ const entities_1 = require("../../../functions/entities");
14
+ const entitiesSpecific_1 = require("../../../functions/entitiesSpecific");
15
+ const Feature_1 = require("../../private/Feature");
16
+ /**
17
+ * Normally, we would make a custom entity to represent a fading-away pickup, but we don't want to
18
+ * interfere with the "entities2.xml" file in end-user mods. Thus, we must select a vanilla effect
19
+ * to masquerade as a backdrop effect.
20
+ *
21
+ * We arbitrarily choose a ladder for this purpose because it will not automatically despawn after
22
+ * time passes, like most other effects.
23
+ */
24
+ const PICKUP_EFFECT_VARIANT = isaac_typescript_definitions_1.EffectVariant.LADDER;
25
+ const PICKUP_EFFECT_SUB_TYPE = LadderSubTypeCustom_1.LadderSubTypeCustom.CUSTOM_PICKUP;
26
+ class CustomPickups extends Feature_1.Feature {
27
+ /** Indexed by entity ID. */
28
+ customPickupFunctionsMap = new Map();
29
+ /** @internal */
30
+ constructor() {
31
+ super();
32
+ this.callbacksUsed = [
33
+ // 38
34
+ [isaac_typescript_definitions_1.ModCallback.PRE_PICKUP_COLLISION, this.prePickupCollision],
35
+ // 56
36
+ [
37
+ isaac_typescript_definitions_1.ModCallback.POST_EFFECT_RENDER,
38
+ this.postEffectRenderPickupEffect,
39
+ [PICKUP_EFFECT_VARIANT],
40
+ ],
41
+ ];
42
+ }
43
+ // ModCallback.PRE_PICKUP_COLLISION (38)
44
+ prePickupCollision = (pickup, collider) => {
45
+ const entityID = (0, entities_1.getEntityID)(pickup);
46
+ const customPickupFunctions = this.customPickupFunctionsMap.get(entityID);
47
+ if (customPickupFunctions === undefined) {
48
+ return undefined;
49
+ }
50
+ const player = collider.ToPlayer();
51
+ if (player === undefined) {
52
+ return undefined;
53
+ }
54
+ const shouldPickup = customPickupFunctions.collisionFunc(player);
55
+ if (!shouldPickup) {
56
+ return undefined;
57
+ }
58
+ pickup.Remove();
59
+ const pickupSprite = pickup.GetSprite();
60
+ const fileName = pickupSprite.GetFilename();
61
+ const effect = (0, entitiesSpecific_1.spawnEffect)(PICKUP_EFFECT_VARIANT, PICKUP_EFFECT_SUB_TYPE, pickup.Position);
62
+ const effectSprite = effect.GetSprite();
63
+ effectSprite.Load(fileName, true);
64
+ effectSprite.Play("Collect", true);
65
+ customPickupFunctions.collectFunc(player);
66
+ return undefined;
67
+ };
68
+ // ModCallback.POST_EFFECT_RENDER (56)
69
+ // PICKUP_EFFECT_VARIANT
70
+ postEffectRenderPickupEffect = (effect) => {
71
+ if (effect.SubType !== PICKUP_EFFECT_SUB_TYPE) {
72
+ return;
73
+ }
74
+ const sprite = effect.GetSprite();
75
+ if (sprite.IsFinished("Collect")) {
76
+ effect.Remove();
77
+ }
78
+ };
79
+ /**
80
+ * Helper function to register a custom pickup with the IsaacScript standard library. Use this
81
+ * feature for custom pickups that are intended to be picked up by the player, like bombs and
82
+ * keys.
83
+ *
84
+ * When IsaacScript detects that a player should be collecting the custom pickup, then the pickup
85
+ * will be immediately removed, and an effect showing the pickup's respective `Collect` animation
86
+ * will be spawned. (This emulates how a normal vanilla pickup would work.) After that, the
87
+ * provided `collectFunc` will be fired. In this function, you will probably want to play a sound
88
+ * corresponding to what kind of pickup it is (e.g. `SoundEffect.KEY_PICKUP_GAUNTLET`), as well as
89
+ * do things like adding something to the player's inventory.
90
+ *
91
+ * Note that when you specify your custom pickup in the "entities2.xml" file, it should have a
92
+ * type of "5" and be associated with an anm2 file that has a "Collect" animation.
93
+ *
94
+ * In order to use this function, you must upgrade your mod with `ISCFeature.CUSTOM_PICKUPS`.
95
+ *
96
+ * @param pickupVariantCustom The variant for the corresponding custom pickup.
97
+ * @param subType The sub-type for the corresponding custom pickup.
98
+ * @param collectFunc The function to run when the player collects this pickup.
99
+ * @param collisionFunc Optional. The function to run when a player collides with the pickup.
100
+ * Default is a function that always returns true, meaning that the player
101
+ * will always immediately collect the pickup when they collide with it.
102
+ * Specify this function if your pickup should only be able to be collected
103
+ * under certain conditions.
104
+ * @public
105
+ */
106
+ registerCustomPickup(pickupVariantCustom, subType, collectFunc, collisionFunc = () => true) {
107
+ const entityID = (0, entities_1.getEntityIDFromConstituents)(isaac_typescript_definitions_1.EntityType.PICKUP, pickupVariantCustom, subType);
108
+ const customPickupFunctions = {
109
+ collectFunc,
110
+ collisionFunc,
111
+ };
112
+ this.customPickupFunctionsMap.set(entityID, customPickupFunctions);
113
+ }
114
+ }
115
+ exports.CustomPickups = CustomPickups;
116
+ __decorate([
117
+ decorators_1.Exported
118
+ ], CustomPickups.prototype, "registerCustomPickup", null);