isaacscript-common 84.0.1 → 84.1.1

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 (569) 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 +2 -0
  383. package/dist/functions/utils.d.ts.map +1 -1
  384. package/dist/functions/utils.js +195 -0
  385. package/dist/functions/utils.lua +4 -1
  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 +2 -0
  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 +5 -2
  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 +4 -1
  569. package/src/lib/jsonLua.js +701 -0
@@ -0,0 +1,301 @@
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.DeployJSONRoom = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const cachedEnumValues_1 = require("../../../arrays/cachedEnumValues");
12
+ const cachedClasses_1 = require("../../../core/cachedClasses");
13
+ const decorators_1 = require("../../../decorators");
14
+ const ISCFeature_1 = require("../../../enums/ISCFeature");
15
+ const emptyRoom_1 = require("../../../functions/emptyRoom");
16
+ const entities_1 = require("../../../functions/entities");
17
+ const gridEntities_1 = require("../../../functions/gridEntities");
18
+ const jsonRoom_1 = require("../../../functions/jsonRoom");
19
+ const log_1 = require("../../../functions/log");
20
+ const rng_1 = require("../../../functions/rng");
21
+ const roomGrid_1 = require("../../../functions/roomGrid");
22
+ const rooms_1 = require("../../../functions/rooms");
23
+ const spawnCollectible_1 = require("../../../functions/spawnCollectible");
24
+ const types_1 = require("../../../functions/types");
25
+ const utils_1 = require("../../../functions/utils");
26
+ const ReadonlySet_1 = require("../../../types/ReadonlySet");
27
+ const Feature_1 = require("../../private/Feature");
28
+ const GRID_ENTITY_XML_TYPE_SET = new ReadonlySet_1.ReadonlySet(cachedEnumValues_1.GRID_ENTITY_XML_TYPE_VALUES);
29
+ class DeployJSONRoom extends Feature_1.Feature {
30
+ preventGridEntityRespawn;
31
+ /** @internal */
32
+ constructor(preventGridEntityRespawn) {
33
+ super();
34
+ this.featuresUsed = [ISCFeature_1.ISCFeature.PREVENT_GRID_ENTITY_RESPAWN];
35
+ this.preventGridEntityRespawn = preventGridEntityRespawn;
36
+ }
37
+ spawnAllEntities(jsonRoom, rng, verbose = false) {
38
+ let shouldUnclearRoom = false;
39
+ for (const jsonSpawn of jsonRoom.spawn) {
40
+ const xString = jsonSpawn.$.x;
41
+ const x = (0, types_1.parseIntSafe)(xString);
42
+ (0, utils_1.assertDefined)(x, `Failed to convert the following x coordinate to an integer (for a spawn): ${xString}`);
43
+ const yString = jsonSpawn.$.y;
44
+ const y = (0, types_1.parseIntSafe)(yString);
45
+ (0, utils_1.assertDefined)(y, `Failed to convert the following y coordinate to an integer (for a spawn): ${yString}`);
46
+ const jsonEntity = (0, jsonRoom_1.getRandomJSONEntity)(jsonSpawn.entity, rng);
47
+ const entityTypeString = jsonEntity.$.type;
48
+ const entityTypeNumber = (0, types_1.parseIntSafe)(entityTypeString);
49
+ (0, utils_1.assertDefined)(entityTypeNumber, `Failed to convert the entity type to an integer: ${entityTypeString}`);
50
+ const variantString = jsonEntity.$.variant;
51
+ const variant = (0, types_1.parseIntSafe)(variantString);
52
+ (0, utils_1.assertDefined)(variant, `Failed to convert the entity variant to an integer: ${variant}`);
53
+ const subTypeString = jsonEntity.$.subtype;
54
+ const subType = (0, types_1.parseIntSafe)(subTypeString);
55
+ (0, utils_1.assertDefined)(subType, `Failed to convert the entity sub-type to an integer: ${subType}`);
56
+ const isGridEntity = GRID_ENTITY_XML_TYPE_SET.has(entityTypeNumber);
57
+ if (isGridEntity) {
58
+ const gridEntityXMLType = entityTypeNumber;
59
+ if (verbose) {
60
+ (0, log_1.log)(`Spawning grid entity ${gridEntityXMLType}.${variant} at: (${x}, ${y})`);
61
+ }
62
+ spawnGridEntityForJSONRoom(gridEntityXMLType, variant, x, y);
63
+ }
64
+ else {
65
+ const entityType = entityTypeNumber;
66
+ if (verbose) {
67
+ const entityID = (0, entities_1.getEntityIDFromConstituents)(entityType, variant, subType);
68
+ (0, log_1.log)(`Spawning normal entity ${entityID} at: (${x}, ${y})`);
69
+ }
70
+ const entity = this.spawnNormalEntityForJSONRoom(entityType, variant, subType, x, y, rng);
71
+ const npc = entity.ToNPC();
72
+ if (npc !== undefined && npc.CanShutDoors) {
73
+ shouldUnclearRoom = true;
74
+ }
75
+ }
76
+ }
77
+ // After emptying the room, we manually cleared the room. However, if the room layout contains
78
+ // an battle NPC, then we need to reset the clear state and close the doors again.
79
+ if (shouldUnclearRoom) {
80
+ if (verbose) {
81
+ (0, log_1.log)("Setting the room to be uncleared since there were one or more battle NPCs spawned.");
82
+ }
83
+ (0, rooms_1.setRoomUncleared)();
84
+ }
85
+ else if (verbose) {
86
+ (0, log_1.log)("Leaving the room cleared since there were no battle NPCs spawned.");
87
+ }
88
+ }
89
+ spawnNormalEntityForJSONRoom(entityType, variant, subType, x, y, rng) {
90
+ const room = cachedClasses_1.game.GetRoom();
91
+ const roomType = room.GetType();
92
+ const position = (0, roomGrid_1.gridCoordinatesToWorldPosition)(x, y);
93
+ const seed = rng.Next();
94
+ let entity;
95
+ if (entityType === isaac_typescript_definitions_1.EntityType.PICKUP &&
96
+ variant === isaac_typescript_definitions_1.PickupVariant.COLLECTIBLE) {
97
+ const collectibleType = (0, types_1.asCollectibleType)(subType);
98
+ const options = roomType === isaac_typescript_definitions_1.RoomType.ANGEL;
99
+ entity = (0, spawnCollectible_1.spawnCollectible)(collectibleType, position, seed, options);
100
+ }
101
+ else {
102
+ entity = (0, entities_1.spawnWithSeed)(entityType, variant, subType, position, seed);
103
+ }
104
+ // For some reason, Pitfalls do not spawn with the correct collision classes.
105
+ if (entityType === isaac_typescript_definitions_1.EntityType.PITFALL &&
106
+ variant === isaac_typescript_definitions_1.PitfallVariant.PITFALL) {
107
+ entity.EntityCollisionClass = isaac_typescript_definitions_1.EntityCollisionClass.ENEMIES;
108
+ entity.GridCollisionClass = isaac_typescript_definitions_1.EntityGridCollisionClass.WALLS;
109
+ }
110
+ return entity;
111
+ }
112
+ /**
113
+ * Helper function to deconstruct a vanilla room and set up a custom room in its place.
114
+ * Specifically, this will clear the current room of all entities and grid entities, and then
115
+ * spawn all of the entries and grid entities in the provided JSON room. For this reason, you must
116
+ * be in the actual room in order to use this function.
117
+ *
118
+ * A JSON room is simply an XML file converted to JSON. You can create JSON rooms by using the
119
+ * Basement Renovator room editor to create an XML file, and then convert it to JSON using the
120
+ * `convert-xml-to-json` tool (e.g. `npx convert-xml-to-json my-rooms.xml`).
121
+ *
122
+ * This function is meant to be used in the `POST_NEW_ROOM` callback.
123
+ *
124
+ * For example:
125
+ *
126
+ * ```ts
127
+ *
128
+ * import customRooms from "./customRooms.json";
129
+ *
130
+ * export function postNewRoom(): void {
131
+ * const firstJSONRoom = customRooms.rooms.room[0];
132
+ * deployJSONRoom(firstJSONRoom);
133
+ * }
134
+ * ```
135
+ *
136
+ * If you want to deploy an unseeded room, you must explicitly pass `undefined` to the `seedOrRNG`
137
+ * parameter.
138
+ *
139
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DEPLOY_JSON_ROOM`.
140
+ *
141
+ * @param jsonRoom The JSON room to deploy.
142
+ * @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
143
+ * `RNG.Next` method will be called. If `undefined` is provided, it will default
144
+ * to a random seed.
145
+ * @param verbose Optional. If specified, will write entries to the "log.txt" file that describe
146
+ * what the function is doing. Default is false.
147
+ * @public
148
+ */
149
+ deployJSONRoom(jsonRoom, seedOrRNG, verbose = false) {
150
+ const rng = (0, rng_1.isRNG)(seedOrRNG) ? seedOrRNG : (0, rng_1.newRNG)(seedOrRNG);
151
+ if (verbose) {
152
+ (0, log_1.log)("Starting to empty the room of entities and grid entities.");
153
+ }
154
+ (0, emptyRoom_1.emptyRoom)();
155
+ if (verbose) {
156
+ (0, log_1.log)("Finished emptying the room of entities and grid entities.");
157
+ }
158
+ (0, rooms_1.setRoomCleared)();
159
+ if (verbose) {
160
+ (0, log_1.log)("Starting to spawn all of the new entities and grid entities.");
161
+ }
162
+ this.spawnAllEntities(jsonRoom, rng, verbose);
163
+ if (verbose) {
164
+ (0, log_1.log)("Finished spawning all of the new entities and grid entities.");
165
+ }
166
+ fixPitGraphics();
167
+ this.preventGridEntityRespawn.preventGridEntityRespawn();
168
+ }
169
+ }
170
+ exports.DeployJSONRoom = DeployJSONRoom;
171
+ __decorate([
172
+ decorators_1.Exported
173
+ ], DeployJSONRoom.prototype, "deployJSONRoom", null);
174
+ function spawnGridEntityForJSONRoom(gridEntityXMLType, gridEntityXMLVariant, x, y) {
175
+ const room = cachedClasses_1.game.GetRoom();
176
+ const gridEntityTuple = (0, gridEntities_1.convertXMLGridEntityType)(gridEntityXMLType, gridEntityXMLVariant);
177
+ if (gridEntityTuple === undefined) {
178
+ return undefined;
179
+ }
180
+ const [gridEntityType, variant] = gridEntityTuple;
181
+ const position = (0, roomGrid_1.gridCoordinatesToWorldPosition)(x, y);
182
+ const gridIndex = room.GetGridIndex(position);
183
+ const gridEntity = (0, gridEntities_1.spawnGridEntityWithVariant)(gridEntityType, variant, gridIndex);
184
+ if (gridEntity === undefined) {
185
+ return gridEntity;
186
+ }
187
+ // Prevent poops from playing an appear animation, since that is not supposed to normally happen
188
+ // when entering a new room.
189
+ if (gridEntityType === isaac_typescript_definitions_1.GridEntityType.POOP) {
190
+ const sprite = gridEntity.GetSprite();
191
+ sprite.Play("State1", true);
192
+ sprite.SetLastFrame();
193
+ }
194
+ return gridEntity;
195
+ }
196
+ /**
197
+ * By default, when spawning multiple pits next to each other, the graphics will not "meld"
198
+ * together. Thus, now that all of the entities in the room are spawned, we must iterate over the
199
+ * pits in the room and manually fix their sprites, if necessary.
200
+ */
201
+ function fixPitGraphics() {
202
+ const room = cachedClasses_1.game.GetRoom();
203
+ const gridWidth = room.GetGridWidth();
204
+ const pitMap = getPitMap();
205
+ for (const [gridIndex, gridEntity] of pitMap) {
206
+ const gridIndexLeft = gridIndex - 1;
207
+ const L = pitMap.has(gridIndexLeft);
208
+ const gridIndexRight = gridIndex + 1;
209
+ const R = pitMap.has(gridIndexRight);
210
+ const gridIndexUp = gridIndex - gridWidth;
211
+ const U = pitMap.has(gridIndexUp);
212
+ const gridIndexDown = gridIndex + gridWidth;
213
+ const D = pitMap.has(gridIndexDown);
214
+ const gridIndexUpLeft = gridIndex - gridWidth - 1;
215
+ const UL = pitMap.has(gridIndexUpLeft);
216
+ const gridIndexUpRight = gridIndex - gridWidth + 1;
217
+ const UR = pitMap.has(gridIndexUpRight);
218
+ const gridIndexDownLeft = gridIndex + gridWidth - 1;
219
+ const DL = pitMap.has(gridIndexDownLeft);
220
+ const gridIndexDownRight = gridIndex + gridWidth + 1;
221
+ const DR = pitMap.has(gridIndexDownRight);
222
+ const pitFrame = getPitFrame(L, R, U, D, UL, UR, DL, DR);
223
+ const sprite = gridEntity.GetSprite();
224
+ sprite.SetFrame(pitFrame);
225
+ }
226
+ }
227
+ function getPitMap() {
228
+ const pitMap = new Map();
229
+ for (const gridEntity of (0, gridEntities_1.getGridEntities)(isaac_typescript_definitions_1.GridEntityType.PIT)) {
230
+ const gridIndex = gridEntity.GetGridIndex();
231
+ pitMap.set(gridIndex, gridEntity);
232
+ }
233
+ return pitMap;
234
+ }
235
+ /** The logic in this function is copied from Basement Renovator. */
236
+ function getPitFrame(L, R, U, D, UL, UR, DL, DR) {
237
+ let F = 0;
238
+ // First, check for bitwise frames. (It works for all combinations of just left/up/right/down.)
239
+ if (L) {
240
+ F |= 1;
241
+ }
242
+ if (U) {
243
+ F |= 2;
244
+ }
245
+ if (R) {
246
+ F |= 4;
247
+ }
248
+ if (D) {
249
+ F |= 8;
250
+ }
251
+ // Then, check for other combinations.
252
+ if (U && L && !UL && !R && !D) {
253
+ F = 17;
254
+ }
255
+ if (U && R && !UR && !L && !D) {
256
+ F = 18;
257
+ }
258
+ if (L && D && !DL && !U && !R) {
259
+ F = 19;
260
+ }
261
+ if (R && D && !DR && !L && !U) {
262
+ F = 20;
263
+ }
264
+ if (L && U && R && D && !UL) {
265
+ F = 21;
266
+ }
267
+ if (L && U && R && D && !UR) {
268
+ F = 22;
269
+ }
270
+ if (U && R && D && !L && !UR) {
271
+ F = 25;
272
+ }
273
+ if (L && U && D && !R && !UL) {
274
+ F = 26;
275
+ }
276
+ if (L && U && R && D && !DL && !DR) {
277
+ F = 24;
278
+ }
279
+ if (L && U && R && D && !UR && !UL) {
280
+ F = 23;
281
+ }
282
+ if (L && U && R && UL && !UR && !D) {
283
+ F = 27;
284
+ }
285
+ if (L && U && R && UR && !UL && !D) {
286
+ F = 28;
287
+ }
288
+ if (L && U && R && !D && !UR && !UL) {
289
+ F = 29;
290
+ }
291
+ if (L && R && D && DL && !U && !DR) {
292
+ F = 30;
293
+ }
294
+ if (L && R && D && DR && !U && !DL) {
295
+ F = 31;
296
+ }
297
+ if (L && R && D && !U && !DL && !DR) {
298
+ F = 32;
299
+ }
300
+ return F;
301
+ }
@@ -0,0 +1,90 @@
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.DisableAllSound = 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 sound_1 = require("../../../functions/sound");
14
+ const Feature_1 = require("../../private/Feature");
15
+ const v = {
16
+ run: {
17
+ disableSoundSet: new Set(),
18
+ },
19
+ };
20
+ class DisableAllSound extends Feature_1.Feature {
21
+ /** @internal */
22
+ v = v;
23
+ musicWasEnabled = false;
24
+ /** @internal */
25
+ constructor() {
26
+ super();
27
+ this.callbacksUsed = [
28
+ // 2
29
+ [isaac_typescript_definitions_1.ModCallback.POST_RENDER, this.postRender],
30
+ ];
31
+ }
32
+ // ModCallback.POST_RENDER (2)
33
+ postRender = () => {
34
+ if (v.run.disableSoundSet.size === 0) {
35
+ return;
36
+ }
37
+ (0, sound_1.stopAllSoundEffects)();
38
+ };
39
+ /**
40
+ * Helper function to stop muting all sound effects and music.
41
+ *
42
+ * Use this function to set things back to normal after having used `disableAllSounds`.
43
+ *
44
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_ALL_SOUND`.
45
+ *
46
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
47
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
48
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
49
+ * work in tandem.
50
+ */
51
+ enableAllSound(key) {
52
+ if (!v.run.disableSoundSet.has(key)) {
53
+ return;
54
+ }
55
+ v.run.disableSoundSet.delete(key);
56
+ if (v.run.disableSoundSet.size === 0 && this.musicWasEnabled) {
57
+ cachedClasses_1.musicManager.Enable();
58
+ }
59
+ // Stop all sound effects that were initialized prior to enabling sounds (in case there was a
60
+ // sound played played previously on this render frame).
61
+ (0, sound_1.stopAllSoundEffects)();
62
+ }
63
+ /**
64
+ * Helper function to disable all sound effects and music (by constantly musting them).
65
+ *
66
+ * Use the `enableAllSounds` helper function to set things back to normal.
67
+ *
68
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_ALL_SOUND`.
69
+ *
70
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
71
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
72
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
73
+ * work in tandem.
74
+ */
75
+ disableAllSound(key) {
76
+ if (v.run.disableSoundSet.size === 0) {
77
+ this.musicWasEnabled = cachedClasses_1.musicManager.IsEnabled();
78
+ }
79
+ v.run.disableSoundSet.add(key);
80
+ // Stop all sound effects that were initialized prior to disabling sounds.
81
+ (0, sound_1.stopAllSoundEffects)();
82
+ }
83
+ }
84
+ exports.DisableAllSound = DisableAllSound;
85
+ __decorate([
86
+ decorators_1.Exported
87
+ ], DisableAllSound.prototype, "enableAllSound", null);
88
+ __decorate([
89
+ decorators_1.Exported
90
+ ], DisableAllSound.prototype, "disableAllSound", null);
@@ -0,0 +1,249 @@
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.DisableInputs = 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 ReadonlySet_1 = require("../../../types/ReadonlySet");
14
+ const Feature_1 = require("../../private/Feature");
15
+ const v = {
16
+ run: {
17
+ /**
18
+ * Glowing Hour Glass support is disabled by default since it can cause bugs with extra-gameplay
19
+ * features. (For example, whether the player should be able to move is not something that
20
+ * should be reset by the Glowing Hour Glass.)
21
+ */
22
+ __ignoreGlowingHourGlass: true,
23
+ /** Indexed by the requesting feature key. */
24
+ disableInputs: new Map(),
25
+ /** Indexed by the requesting feature key. */
26
+ enableAllInputsWithBlacklistMap: new Map(),
27
+ /** Indexed by the requesting feature key. */
28
+ disableAllInputsWithWhitelistMap: new Map(),
29
+ },
30
+ };
31
+ class DisableInputs extends Feature_1.Feature {
32
+ /** @internal */
33
+ v = v;
34
+ /** @internal */
35
+ constructor() {
36
+ super();
37
+ this.callbacksUsed = [
38
+ // 13
39
+ [
40
+ isaac_typescript_definitions_1.ModCallback.INPUT_ACTION,
41
+ this.isActionPressed,
42
+ [isaac_typescript_definitions_1.InputHook.IS_ACTION_PRESSED], // 0
43
+ ],
44
+ // 13
45
+ [
46
+ isaac_typescript_definitions_1.ModCallback.INPUT_ACTION,
47
+ this.isActionTriggered,
48
+ [isaac_typescript_definitions_1.InputHook.IS_ACTION_TRIGGERED], // 1
49
+ ],
50
+ // 13
51
+ [
52
+ isaac_typescript_definitions_1.ModCallback.INPUT_ACTION,
53
+ this.getActionValue,
54
+ [isaac_typescript_definitions_1.InputHook.GET_ACTION_VALUE], // 2
55
+ ],
56
+ ];
57
+ }
58
+ // InputHook.IS_ACTION_PRESSED (0)
59
+ isActionPressed = (_entity, _inputHook, buttonAction) => this.getReturnValue(buttonAction, true);
60
+ // InputHook.IS_ACTION_TRIGGERED (1)
61
+ isActionTriggered = (_entity, _inputHook, buttonAction) => this.getReturnValue(buttonAction, true);
62
+ // InputHook.GET_ACTION_VALUE (2)
63
+ getActionValue = (_entity, _inputHook, buttonAction) => this.getReturnValue(buttonAction, false);
64
+ getReturnValue(buttonAction, booleanCallback) {
65
+ const disableValue = booleanCallback ? false : 0;
66
+ for (const blacklist of v.run.disableInputs.values()) {
67
+ if (blacklist.has(buttonAction)) {
68
+ return disableValue;
69
+ }
70
+ }
71
+ for (const whitelist of v.run.disableAllInputsWithWhitelistMap.values()) {
72
+ if (!whitelist.has(buttonAction)) {
73
+ return disableValue;
74
+ }
75
+ }
76
+ for (const blacklist of v.run.enableAllInputsWithBlacklistMap.values()) {
77
+ if (blacklist.has(buttonAction)) {
78
+ return disableValue;
79
+ }
80
+ }
81
+ return undefined;
82
+ }
83
+ /**
84
+ * Helper function to check if the `ISCFeature.DISABLE_INPUTS` feature is turned on in some
85
+ * capacity.
86
+ *
87
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
88
+ *
89
+ * @public
90
+ */
91
+ areInputsEnabled() {
92
+ return (v.run.disableInputs.size === 0 &&
93
+ v.run.enableAllInputsWithBlacklistMap.size === 0 &&
94
+ v.run.disableAllInputsWithWhitelistMap.size === 0);
95
+ }
96
+ /**
97
+ * Helper function to enable all inputs. Use this function to set things back to normal after
98
+ * having used one of the other helper functions to disable inputs.
99
+ *
100
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
101
+ *
102
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
103
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
104
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
105
+ * work in tandem.
106
+ * @public
107
+ */
108
+ enableAllInputs(key) {
109
+ v.run.disableAllInputsWithWhitelistMap.delete(key);
110
+ v.run.enableAllInputsWithBlacklistMap.delete(key);
111
+ }
112
+ /**
113
+ * Helper function to disable specific inputs, like opening the console.
114
+ *
115
+ * This function is variadic, meaning that you can specify as many inputs as you want to disable.
116
+ * (To disable all inputs, see the `disableAllInputs` function.
117
+ *
118
+ * Use the `enableAllInputs` helper function to set things back to normal.
119
+ *
120
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
121
+ *
122
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
123
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
124
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
125
+ * work in tandem.
126
+ * @param buttonActions An array of the actions to action.
127
+ * @public
128
+ */
129
+ disableInputs(key, ...buttonActions) {
130
+ const buttonActionsSet = new ReadonlySet_1.ReadonlySet(buttonActions);
131
+ v.run.disableInputs.set(key, buttonActionsSet);
132
+ }
133
+ /**
134
+ * Helper function to disable all inputs. This is useful because `EntityPlayer.ControlsEnabled`
135
+ * can be changed by the game under certain conditions.
136
+ *
137
+ * Use the `enableAllInputs` helper function to set things back to normal.
138
+ *
139
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
140
+ *
141
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
142
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
143
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
144
+ * work in tandem.
145
+ * @public
146
+ */
147
+ disableAllInputs(key) {
148
+ v.run.disableAllInputsWithWhitelistMap.set(key, new ReadonlySet_1.ReadonlySet());
149
+ v.run.enableAllInputsWithBlacklistMap.delete(key);
150
+ }
151
+ /**
152
+ * Helper function to enable all inputs besides the ones provided. This is useful because
153
+ * `EntityPlayer.ControlsEnabled` can be changed by the game under certain conditions.
154
+ *
155
+ * Use the `enableAllInputs` helper function to set things back to normal.
156
+ *
157
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
158
+ *
159
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
160
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
161
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
162
+ * work in tandem.
163
+ * @param blacklist A set of ButtonActions to disallow.
164
+ * @public
165
+ */
166
+ enableAllInputsExceptFor(key, blacklist) {
167
+ v.run.disableAllInputsWithWhitelistMap.delete(key);
168
+ v.run.enableAllInputsWithBlacklistMap.set(key, blacklist);
169
+ }
170
+ /**
171
+ * Helper function to disable all inputs besides the ones provided. This is useful because
172
+ * `EntityPlayer.ControlsEnabled` can be changed by the game under certain conditions.
173
+ *
174
+ * Use the `enableAllInputs` helper function to set things back to normal.
175
+ *
176
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
177
+ *
178
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
179
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
180
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
181
+ * work in tandem.
182
+ * @param whitelist A set of ButtonActions to allow.
183
+ * @public
184
+ */
185
+ disableAllInputsExceptFor(key, whitelist) {
186
+ v.run.disableAllInputsWithWhitelistMap.set(key, whitelist);
187
+ v.run.enableAllInputsWithBlacklistMap.delete(key);
188
+ }
189
+ /**
190
+ * Helper function to disable only the inputs used for moving the character (or moving the cursor
191
+ * in the UI). This is useful because `EntityPlayer.ControlsEnabled` can be changed by the game
192
+ * under certain conditions.
193
+ *
194
+ * Use the `enableAllInputs` helper function to set things back to normal.
195
+ *
196
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
197
+ *
198
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
199
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
200
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
201
+ * work in tandem.
202
+ * @public
203
+ */
204
+ disableMovementInputs(key) {
205
+ this.enableAllInputsExceptFor(key, input_1.MOVEMENT_BUTTON_ACTIONS_SET);
206
+ }
207
+ /**
208
+ * Helper function to disable only the inputs used for shooting tears. This is useful because
209
+ * `EntityPlayer.ControlsEnabled` can be changed by the game under certain conditions.
210
+ *
211
+ * Use the `enableAllInputs` helper function to set things back to normal.
212
+ *
213
+ * In order to use this function, you must upgrade your mod with `ISCFeature.DISABLE_INPUTS`.
214
+ *
215
+ * @param key The name of the mod feature that is requesting the enable/disable. For example, if
216
+ * this was part of the code for a custom enemy called "Super Gaper", then you could
217
+ * use a key of "SuperGaper". The name is necessary so that multiple mod features can
218
+ * work in tandem.
219
+ * @public
220
+ */
221
+ disableShootingInputs(key) {
222
+ this.enableAllInputsExceptFor(key, input_1.SHOOTING_BUTTON_ACTIONS_SET);
223
+ }
224
+ }
225
+ exports.DisableInputs = DisableInputs;
226
+ __decorate([
227
+ decorators_1.Exported
228
+ ], DisableInputs.prototype, "areInputsEnabled", null);
229
+ __decorate([
230
+ decorators_1.Exported
231
+ ], DisableInputs.prototype, "enableAllInputs", null);
232
+ __decorate([
233
+ decorators_1.Exported
234
+ ], DisableInputs.prototype, "disableInputs", null);
235
+ __decorate([
236
+ decorators_1.Exported
237
+ ], DisableInputs.prototype, "disableAllInputs", null);
238
+ __decorate([
239
+ decorators_1.Exported
240
+ ], DisableInputs.prototype, "enableAllInputsExceptFor", null);
241
+ __decorate([
242
+ decorators_1.Exported
243
+ ], DisableInputs.prototype, "disableAllInputsExceptFor", null);
244
+ __decorate([
245
+ decorators_1.Exported
246
+ ], DisableInputs.prototype, "disableMovementInputs", null);
247
+ __decorate([
248
+ decorators_1.Exported
249
+ ], DisableInputs.prototype, "disableShootingInputs", null);