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,135 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.warpNextToRoomType = exports.warpToRoomType = exports.spawnTrapdoorOrCrawlSpace = exports.movePlayer = exports.listGridEntities = exports.listEntities = exports.devilAngel = exports.addHeart = void 0;
4
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
5
+ const cachedClasses_1 = require("../../../../core/cachedClasses");
6
+ const HealthType_1 = require("../../../../enums/HealthType");
7
+ const direction_1 = require("../../../../functions/direction");
8
+ const gridEntities_1 = require("../../../../functions/gridEntities");
9
+ const levelGrid_1 = require("../../../../functions/levelGrid");
10
+ const logEntities_1 = require("../../../../functions/logEntities");
11
+ const playerHealth_1 = require("../../../../functions/playerHealth");
12
+ const roomData_1 = require("../../../../functions/roomData");
13
+ const rooms_1 = require("../../../../functions/rooms");
14
+ const types_1 = require("../../../../functions/types");
15
+ const roomTypeNames_1 = require("../../../../objects/roomTypeNames");
16
+ const DEFAULT_MOVE_UNITS = 0.5;
17
+ function addHeart(params, healthType) {
18
+ let numHearts = healthType === HealthType_1.HealthType.MAX_HEARTS ? 2 : 1;
19
+ if (params !== "") {
20
+ const num = (0, types_1.parseIntSafe)(params);
21
+ if (num === undefined) {
22
+ print("That is an invalid amount of hearts to add.");
23
+ return;
24
+ }
25
+ numHearts = num;
26
+ }
27
+ const player = Isaac.GetPlayer();
28
+ (0, playerHealth_1.addPlayerHealthType)(player, healthType, numHearts);
29
+ }
30
+ exports.addHeart = addHeart;
31
+ function devilAngel(useDevil) {
32
+ const level = cachedClasses_1.game.GetLevel();
33
+ const devilAngelRoomData = (0, roomData_1.getRoomData)(isaac_typescript_definitions_1.GridRoom.DEVIL);
34
+ if (devilAngelRoomData !== undefined) {
35
+ const roomType = devilAngelRoomData.Type;
36
+ const conflictingType = useDevil ? isaac_typescript_definitions_1.RoomType.ANGEL : isaac_typescript_definitions_1.RoomType.DEVIL;
37
+ if (roomType === conflictingType) {
38
+ // Delete the room data, which will allow the `Level.InitializeDevilAngelRoom` method to work.
39
+ const roomDescriptor = (0, roomData_1.getRoomDescriptor)(isaac_typescript_definitions_1.GridRoom.DEVIL);
40
+ roomDescriptor.Data = undefined;
41
+ }
42
+ }
43
+ if (useDevil) {
44
+ level.InitializeDevilAngelRoom(false, true);
45
+ }
46
+ else {
47
+ level.InitializeDevilAngelRoom(true, false);
48
+ }
49
+ (0, rooms_1.changeRoom)(isaac_typescript_definitions_1.GridRoom.DEVIL);
50
+ }
51
+ exports.devilAngel = devilAngel;
52
+ function listEntities(params, includeBackgroundEffects) {
53
+ let entityTypeFilter;
54
+ if (params !== "") {
55
+ entityTypeFilter = (0, types_1.parseIntSafe)(params);
56
+ if (entityTypeFilter === undefined) {
57
+ print("That is an invalid entity type to filter by.");
58
+ return;
59
+ }
60
+ }
61
+ (0, logEntities_1.logAllEntities)(includeBackgroundEffects, entityTypeFilter);
62
+ print('Logged the entities in the room to the "log.txt" file.');
63
+ }
64
+ exports.listEntities = listEntities;
65
+ function listGridEntities(params, includeWalls) {
66
+ let gridEntityTypeFilter;
67
+ if (params !== "") {
68
+ gridEntityTypeFilter = (0, types_1.parseIntSafe)(params);
69
+ if (gridEntityTypeFilter === undefined) {
70
+ print("That is an invalid grid entity type to filter by.");
71
+ return;
72
+ }
73
+ }
74
+ (0, logEntities_1.logAllGridEntities)(includeWalls, gridEntityTypeFilter);
75
+ print('Logged the grid entities in the room to the "log.txt" file.');
76
+ }
77
+ exports.listGridEntities = listGridEntities;
78
+ function movePlayer(params, direction) {
79
+ let amount = DEFAULT_MOVE_UNITS;
80
+ if (params !== "") {
81
+ const num = (0, types_1.parseIntSafe)(params);
82
+ if (num === undefined) {
83
+ print("That is an invalid amount of units to move.");
84
+ return;
85
+ }
86
+ amount = num;
87
+ }
88
+ const player = Isaac.GetPlayer();
89
+ const vector = (0, direction_1.directionToVector)(direction);
90
+ const modifiedVector = vector.mul(amount);
91
+ player.Position = player.Position.add(modifiedVector);
92
+ }
93
+ exports.movePlayer = movePlayer;
94
+ function spawnTrapdoorOrCrawlSpace(trapdoor) {
95
+ const room = cachedClasses_1.game.GetRoom();
96
+ const player = Isaac.GetPlayer();
97
+ const position = room.FindFreeTilePosition(player.Position, 0);
98
+ const gridEntityType = trapdoor
99
+ ? isaac_typescript_definitions_1.GridEntityType.TRAPDOOR
100
+ : isaac_typescript_definitions_1.GridEntityType.CRAWL_SPACE;
101
+ (0, gridEntities_1.spawnGridEntity)(gridEntityType, position);
102
+ }
103
+ exports.spawnTrapdoorOrCrawlSpace = spawnTrapdoorOrCrawlSpace;
104
+ function warpToRoomType(roomType) {
105
+ const roomTypeName = roomTypeNames_1.ROOM_TYPE_NAMES[roomType];
106
+ const gridIndexes = (0, levelGrid_1.getRoomGridIndexesForType)(roomType);
107
+ const firstGridIndex = gridIndexes[0];
108
+ if (firstGridIndex === undefined) {
109
+ print(`There are no ${roomTypeName}s on this floor.`);
110
+ return;
111
+ }
112
+ (0, rooms_1.changeRoom)(firstGridIndex);
113
+ print(`Warped to room type: ${roomTypeName} (${roomType})`);
114
+ }
115
+ exports.warpToRoomType = warpToRoomType;
116
+ function warpNextToRoomType(roomType) {
117
+ const roomTypeName = roomTypeNames_1.ROOM_TYPE_NAMES[roomType];
118
+ const gridIndexes = (0, levelGrid_1.getRoomGridIndexesForType)(roomType);
119
+ const firstGridIndex = gridIndexes[0];
120
+ if (firstGridIndex === undefined) {
121
+ print(`There are no ${roomTypeName}s on this floor.`);
122
+ return;
123
+ }
124
+ const adjacentRoomGridIndexes = (0, levelGrid_1.getRoomAdjacentGridIndexes)(firstGridIndex);
125
+ for (const [_doorSlot, roomGridIndex] of adjacentRoomGridIndexes) {
126
+ const roomData = (0, roomData_1.getRoomData)(roomGridIndex);
127
+ if (roomData !== undefined && roomData.Type === isaac_typescript_definitions_1.RoomType.DEFAULT) {
128
+ (0, rooms_1.changeRoom)(roomGridIndex);
129
+ print(`Warped next to room type: ${roomTypeName} (${roomType})`);
130
+ return;
131
+ }
132
+ }
133
+ print(`Failed to find the room next to room type: ${roomTypeName} (${roomType})`);
134
+ }
135
+ exports.warpNextToRoomType = warpNextToRoomType;
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.v = void 0;
4
+ // This is registered in "ExtraConsoleCommands.ts".
5
+ // eslint-disable-next-line isaacscript/require-v-registration
6
+ exports.v = {
7
+ persistent: {
8
+ // Curses
9
+ darkness: false,
10
+ labyrinth: false,
11
+ lost: false,
12
+ unknown: false,
13
+ cursed: false,
14
+ maze: false,
15
+ blind: false,
16
+ giant: false,
17
+ disableCurses: false,
18
+ // Stats
19
+ damage: false,
20
+ damageAmount: 500,
21
+ speed: false,
22
+ speedAmount: 2,
23
+ tears: false,
24
+ tearsAmount: 1,
25
+ flight: false,
26
+ // Other
27
+ chaosCardTears: false,
28
+ spamBloodRights: false,
29
+ },
30
+ };
@@ -0,0 +1,4 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SAVE_DATA_MANAGER_DEBUG = void 0;
4
+ exports.SAVE_DATA_MANAGER_DEBUG = false;
@@ -0,0 +1,106 @@
1
+ "use strict";
2
+ // The save data manager has a feature where certain variables will automatically be rolled back
3
+ // when the Glowing Hourglass is used.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.restoreGlowingHourGlassBackup = exports.makeGlowingHourGlassBackup = void 0;
6
+ const SaveDataKey_1 = require("../../../../enums/SaveDataKey");
7
+ const SerializationType_1 = require("../../../../enums/SerializationType");
8
+ const deepCopy_1 = require("../../../../functions/deepCopy");
9
+ const merge_1 = require("../../../../functions/merge");
10
+ const table_1 = require("../../../../functions/table");
11
+ const constants_1 = require("./constants");
12
+ /**
13
+ * When the Glowing Hourglass is used, certain save data keys will automatically be restored to a
14
+ * backup.
15
+ */
16
+ const GLOWING_HOUR_GLASS_BACKUP_KEYS = [
17
+ SaveDataKey_1.SaveDataKey.RUN,
18
+ SaveDataKey_1.SaveDataKey.LEVEL,
19
+ ];
20
+ const IGNORE_GLOWING_HOUR_GLASS_KEY = "__ignoreGlowingHourGlass";
21
+ const REWIND_WITH_GLOWING_HOUR_GLASS_KEY = "__rewindWithGlowingHourGlass";
22
+ function makeGlowingHourGlassBackup(saveDataMap, saveDataConditionalFuncMap, saveDataGlowingHourGlassMap) {
23
+ (0, table_1.iterateTableInOrder)(saveDataMap, (subscriberName, saveData) => {
24
+ // We make the Glowing Hourglass backup using `SerializationType.SERIALIZE`, which means that
25
+ // we cannot operate on unserializable data, such as functions. Save data that utilizes
26
+ // unserializable data will typically be marked using a conditional function that evaluates to
27
+ // false, so we skip all save data that matches this criteria.
28
+ const conditionalFunc = saveDataConditionalFuncMap.get(subscriberName);
29
+ if (conditionalFunc !== undefined) {
30
+ const shouldSave = conditionalFunc();
31
+ if (!shouldSave) {
32
+ return;
33
+ }
34
+ }
35
+ for (const saveDataKey of getKeysToBackup(saveData)) {
36
+ const childTable = saveData[saveDataKey];
37
+ if (childTable === undefined) {
38
+ // This feature does not happen to store any variables on this particular child table.
39
+ continue;
40
+ }
41
+ // Ignore child tables that the end-user has explicitly annotated.
42
+ const childTableLuaMap = childTable;
43
+ if (childTableLuaMap.has(IGNORE_GLOWING_HOUR_GLASS_KEY)) {
44
+ continue;
45
+ }
46
+ let saveDataGlowingHourGlass = saveDataGlowingHourGlassMap.get(subscriberName);
47
+ if (saveDataGlowingHourGlass === undefined) {
48
+ saveDataGlowingHourGlass = new LuaMap();
49
+ saveDataGlowingHourGlassMap.set(subscriberName, saveDataGlowingHourGlass);
50
+ }
51
+ // We serialize the table so that we can use the `merge` function later on with no other
52
+ // modifications.
53
+ const copiedChildTable = (0, deepCopy_1.deepCopy)(childTable, SerializationType_1.SerializationType.SERIALIZE);
54
+ saveDataGlowingHourGlass[saveDataKey] = copiedChildTable;
55
+ }
56
+ }, constants_1.SAVE_DATA_MANAGER_DEBUG);
57
+ }
58
+ exports.makeGlowingHourGlassBackup = makeGlowingHourGlassBackup;
59
+ function restoreGlowingHourGlassBackup(saveDataMap, saveDataConditionalFuncMap, saveDataGlowingHourGlassMap, classConstructors) {
60
+ (0, table_1.iterateTableInOrder)(saveDataMap, (subscriberName, saveData) => {
61
+ // We make the Glowing Hourglass backup using `SerializationType.SERIALIZE`, which means that
62
+ // we cannot operate on unserializable data, such as functions. Save data that utilizes
63
+ // unserializable data will typically be marked using a conditional function that evaluates to
64
+ // false, so we skip all save data that matches this criteria.
65
+ const conditionalFunc = saveDataConditionalFuncMap.get(subscriberName);
66
+ if (conditionalFunc !== undefined) {
67
+ const shouldSave = conditionalFunc();
68
+ if (!shouldSave) {
69
+ return;
70
+ }
71
+ }
72
+ for (const saveDataKey of getKeysToBackup(saveData)) {
73
+ const childTable = saveData[saveDataKey];
74
+ if (childTable === undefined) {
75
+ // This feature does not happen to store any variables on this particular child table.
76
+ continue;
77
+ }
78
+ // Ignore child tables that the end-user has explicitly annotated.
79
+ const childTableLuaMap = childTable;
80
+ if (childTableLuaMap.has(IGNORE_GLOWING_HOUR_GLASS_KEY)) {
81
+ continue;
82
+ }
83
+ const saveDataGlowingHourGlass = saveDataGlowingHourGlassMap.get(subscriberName);
84
+ if (saveDataGlowingHourGlass === undefined) {
85
+ // This should never happen.
86
+ continue;
87
+ }
88
+ const childTableBackup = saveDataGlowingHourGlass[saveDataKey];
89
+ if (childTableBackup === undefined) {
90
+ // This should never happen.
91
+ continue;
92
+ }
93
+ (0, merge_1.merge)(childTable, childTableBackup,
94
+ // Append an arbitrary suffix for better error messages.
95
+ `${subscriberName}__glowingHourGlass`, classConstructors);
96
+ }
97
+ }, constants_1.SAVE_DATA_MANAGER_DEBUG);
98
+ }
99
+ exports.restoreGlowingHourGlassBackup = restoreGlowingHourGlassBackup;
100
+ function getKeysToBackup(saveData) {
101
+ const shouldBackupPersistentObject = saveData.persistent !== undefined &&
102
+ saveData.persistent.has(REWIND_WITH_GLOWING_HOUR_GLASS_KEY);
103
+ return shouldBackupPersistentObject
104
+ ? [...GLOWING_HOUR_GLASS_BACKUP_KEYS, SaveDataKey_1.SaveDataKey.PERSISTENT]
105
+ : GLOWING_HOUR_GLASS_BACKUP_KEYS;
106
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.loadFromDisk = void 0;
4
+ const jsonHelpers_1 = require("../../../../functions/jsonHelpers");
5
+ const log_1 = require("../../../../functions/log");
6
+ const merge_1 = require("../../../../functions/merge");
7
+ const table_1 = require("../../../../functions/table");
8
+ const types_1 = require("../../../../functions/types");
9
+ const constants_1 = require("./constants");
10
+ const DEFAULT_MOD_DATA = "{}";
11
+ function loadFromDisk(mod, oldSaveData, classConstructors) {
12
+ if (!mod.HasData()) {
13
+ // There is no "save#.dat" file for this save slot.
14
+ return;
15
+ }
16
+ // First, read the "save#.dat" file into a Lua table.
17
+ const jsonString = readSaveDatFile(mod);
18
+ const newSaveData = (0, jsonHelpers_1.jsonDecode)(jsonString);
19
+ if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
20
+ (0, log_1.log)('Converted data from the "save#.dat" to a Lua table.');
21
+ }
22
+ // Second, iterate over all the fields of the new table.)
23
+ (0, table_1.iterateTableInOrder)(newSaveData, (subscriberName, saveData) => {
24
+ // All elements of loaded save data should have keys that are strings equal to the name of the
25
+ // subscriber/feature. Ignore elements with other types of keys.
26
+ if (!(0, types_1.isString)(subscriberName)) {
27
+ return;
28
+ }
29
+ // All elements of loaded save data should be tables that contain fields corresponding to the
30
+ // `SaveData` interface. Ignore elements that are not tables.
31
+ if (!(0, types_1.isTable)(saveData)) {
32
+ return;
33
+ }
34
+ // Ignore elements that represent subscriptions that no longer exist in the current save data.
35
+ const oldSaveDataForSubscriber = oldSaveData.get(subscriberName);
36
+ if (oldSaveDataForSubscriber === undefined) {
37
+ return;
38
+ }
39
+ if (constants_1.SAVE_DATA_MANAGER_DEBUG) {
40
+ (0, log_1.log)(`Merging in stored data for feature: ${subscriberName}`);
41
+ }
42
+ // We do not want to blow away the child tables of the existing map, because save data could
43
+ // contain out-of-date fields. Instead, merge it one field at a time in a recursive way (and
44
+ // convert Lua tables back to TypeScriptToLua Maps, if necessary).
45
+ (0, merge_1.merge)(oldSaveDataForSubscriber, saveData, subscriberName, classConstructors);
46
+ }, constants_1.SAVE_DATA_MANAGER_DEBUG);
47
+ (0, log_1.log)(`The save data manager loaded data from the "save#.dat" file for mod: ${mod.Name}`);
48
+ }
49
+ exports.loadFromDisk = loadFromDisk;
50
+ function readSaveDatFile(mod) {
51
+ const renderFrameCount = Isaac.GetFrameCount();
52
+ const [ok, jsonStringOrErrMsg] = pcall(tryLoadModData, mod);
53
+ if (!ok) {
54
+ (0, log_1.logError)(`Failed to read from the "save#.dat" file on render frame ${renderFrameCount}: ${jsonStringOrErrMsg}`);
55
+ return DEFAULT_MOD_DATA;
56
+ }
57
+ // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition
58
+ if (jsonStringOrErrMsg === undefined) {
59
+ return DEFAULT_MOD_DATA;
60
+ }
61
+ const jsonStringTrimmed = jsonStringOrErrMsg.trim();
62
+ if (jsonStringTrimmed === "") {
63
+ return DEFAULT_MOD_DATA;
64
+ }
65
+ return jsonStringTrimmed;
66
+ }
67
+ function tryLoadModData(mod) {
68
+ return mod.LoadData();
69
+ }
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ // The save data manager has a feature where certain variables are automatically restored to default
3
+ // values at certain times.
4
+ Object.defineProperty(exports, "__esModule", { value: true });
5
+ exports.restoreDefaultForFeatureKey = exports.restoreDefaultsForAllFeaturesKey = exports.restoreDefaultsForAllFeaturesAndKeys = void 0;
6
+ const SaveDataKey_1 = require("../../../../enums/SaveDataKey");
7
+ const SerializationType_1 = require("../../../../enums/SerializationType");
8
+ const deepCopy_1 = require("../../../../functions/deepCopy");
9
+ const log_1 = require("../../../../functions/log");
10
+ const table_1 = require("../../../../functions/table");
11
+ const ReadonlySet_1 = require("../../../../types/ReadonlySet");
12
+ const constants_1 = require("./constants");
13
+ const RESETTABLE_SAVE_DATA_KEYS = new ReadonlySet_1.ReadonlySet([
14
+ SaveDataKey_1.SaveDataKey.RUN,
15
+ SaveDataKey_1.SaveDataKey.LEVEL,
16
+ SaveDataKey_1.SaveDataKey.ROOM,
17
+ ]);
18
+ function restoreDefaultsForAllFeaturesAndKeys(saveDataMap, saveDataDefaultsMap) {
19
+ for (const saveDataKey of RESETTABLE_SAVE_DATA_KEYS) {
20
+ restoreDefaultsForAllFeaturesKey(saveDataMap, saveDataDefaultsMap, saveDataKey);
21
+ }
22
+ }
23
+ exports.restoreDefaultsForAllFeaturesAndKeys = restoreDefaultsForAllFeaturesAndKeys;
24
+ function restoreDefaultsForAllFeaturesKey(saveDataMap, saveDataDefaultsMap, saveDataKey) {
25
+ (0, table_1.iterateTableInOrder)(saveDataMap, (subscriberName, saveData) => {
26
+ restoreDefaultForFeatureKey(saveDataDefaultsMap, subscriberName, saveData, saveDataKey);
27
+ }, constants_1.SAVE_DATA_MANAGER_DEBUG);
28
+ }
29
+ exports.restoreDefaultsForAllFeaturesKey = restoreDefaultsForAllFeaturesKey;
30
+ function restoreDefaultForFeatureKey(saveDataDefaultsMap, subscriberName, saveData, saveDataKey) {
31
+ // Only allow certain save data keys to be reset.
32
+ if (!RESETTABLE_SAVE_DATA_KEYS.has(saveDataKey)) {
33
+ error(`Failed to restore default values for a save data key of "${saveDataKey}", since it is not on the allowed list of resettable save data keys.`);
34
+ }
35
+ const childTable = saveData[saveDataKey];
36
+ if (childTable === undefined) {
37
+ // This feature does not happen to store any variables on this particular child table.
38
+ return;
39
+ }
40
+ // Get the default values for this feature.
41
+ const saveDataDefaults = saveDataDefaultsMap.get(subscriberName);
42
+ if (saveDataDefaults === undefined) {
43
+ (0, log_1.logError)(`Failed to find the default copy of the save data for subscriber: ${subscriberName}`);
44
+ return;
45
+ }
46
+ // Get the default values for the specific sub-table of this feature.
47
+ const childTableDefaults = saveDataDefaults[saveDataKey];
48
+ if (childTableDefaults === undefined) {
49
+ (0, log_1.logError)(`Failed to find the default copy of the child table "${saveDataKey}" for subscriber "${subscriberName}". This error usually means that your mod-specific save data is out of date. You can try purging all of your mod-specific save data by deleting the following directory: C:\\Program Files (x86)\\Steam\\steamapps\\common\\The Binding of Isaac Rebirth\\data`);
50
+ return;
51
+ }
52
+ // Make a new copy of the default child table.
53
+ const childTableDefaultsCopy = (0, deepCopy_1.deepCopy)(childTableDefaults, SerializationType_1.SerializationType.NONE, `${subscriberName} --> ${saveDataKey}`);
54
+ // We do not want to blow away the existing child table because we do not want to break any
55
+ // existing references. Instead, empty the table and copy all of the elements from the copy of the
56
+ // defaults table.
57
+ clearAndCopyAllElements(childTable, childTableDefaultsCopy);
58
+ }
59
+ exports.restoreDefaultForFeatureKey = restoreDefaultForFeatureKey;
60
+ /**
61
+ * Will empty the old table of all elements, and then shallow copy all the elements from the new
62
+ * table to the old table.
63
+ */
64
+ function clearAndCopyAllElements(oldTable, newTable) {
65
+ (0, table_1.clearTable)(oldTable);
66
+ for (const [key, value] of newTable) {
67
+ oldTable.set(key, value);
68
+ }
69
+ }
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.saveToDisk = void 0;
4
+ const SerializationType_1 = require("../../../../enums/SerializationType");
5
+ const deepCopy_1 = require("../../../../functions/deepCopy");
6
+ const jsonHelpers_1 = require("../../../../functions/jsonHelpers");
7
+ const log_1 = require("../../../../functions/log");
8
+ const table_1 = require("../../../../functions/table");
9
+ const constants_1 = require("./constants");
10
+ function saveToDisk(mod, saveDataMap, saveDataConditionalFuncMap) {
11
+ const allSaveData = getAllSaveDataToWriteToDisk(saveDataMap, saveDataConditionalFuncMap);
12
+ const jsonString = (0, jsonHelpers_1.jsonEncode)(allSaveData);
13
+ mod.SaveData(jsonString);
14
+ (0, log_1.log)(`The save data manager wrote data to the "save#.dat" file for mod: ${mod.Name}`);
15
+ }
16
+ exports.saveToDisk = saveToDisk;
17
+ function getAllSaveDataToWriteToDisk(saveDataMap, saveDataConditionalFuncMap) {
18
+ const allSaveData = new LuaMap();
19
+ (0, table_1.iterateTableInOrder)(saveDataMap, (subscriberName, saveData) => {
20
+ // Handle the feature of the save data manager where certain mod features can conditionally
21
+ // write their data to disk.
22
+ const conditionalFunc = saveDataConditionalFuncMap.get(subscriberName);
23
+ if (conditionalFunc !== undefined) {
24
+ const shouldSave = conditionalFunc();
25
+ if (!shouldSave) {
26
+ return;
27
+ }
28
+ }
29
+ // Strip out the room part of the save data (and any other arbitrary fields that they might
30
+ // have added).
31
+ const saveDataWithoutRoom = {
32
+ persistent: saveData.persistent,
33
+ run: saveData.run,
34
+ level: saveData.level,
35
+ };
36
+ // If there is no data, then we can move on to the next feature.
37
+ if ((0, table_1.isTableEmpty)(saveDataWithoutRoom)) {
38
+ return;
39
+ }
40
+ // We need to serialize TypeScriptToLua maps and Isaac API objects such as `Color`.
41
+ // Recursively convert all such objects to Lua tables.
42
+ const saveDataCopy = (0, deepCopy_1.deepCopy)(saveDataWithoutRoom, SerializationType_1.SerializationType.SERIALIZE, subscriberName);
43
+ allSaveData.set(subscriberName, saveDataCopy);
44
+ }, constants_1.SAVE_DATA_MANAGER_DEBUG);
45
+ return allSaveData;
46
+ }
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.CustomCallback = void 0;
4
+ const sort_1 = require("../../functions/sort");
5
+ const Feature_1 = require("./Feature");
6
+ /**
7
+ * The base class for a custom callback. Individual custom callbacks (and validation callbacks) will
8
+ * extend from this class.
9
+ */
10
+ class CustomCallback extends Feature_1.Feature {
11
+ subscriptions = [];
12
+ addSubscriber(priority, callbackFunc, ...optionalArgs) {
13
+ const subscription = {
14
+ priority,
15
+ callbackFunc,
16
+ optionalArgs,
17
+ };
18
+ this.subscriptions.push(subscription);
19
+ // Sort the subscriptions by priority so that the callbacks with the lowest priority are first.
20
+ // By default, the `Array.sort` method is transpiled to using Lua's sort, which is not stable.
21
+ // We need to do a stable sort so that we preserve the subscription order.
22
+ this.subscriptions = (0, sort_1.stableSort)(this.subscriptions, (0, sort_1.sortObjectArrayByKey)("priority"));
23
+ }
24
+ /**
25
+ * If the submitted function does not match any of the existing subscriptions, this method will do
26
+ * nothing.
27
+ */
28
+ removeSubscriber(callback) {
29
+ const subscriptionIndexMatchingCallback = this.subscriptions.findIndex((subscription) => {
30
+ const subscriptionCallback = subscription.callbackFunc;
31
+ return callback === subscriptionCallback;
32
+ });
33
+ if (subscriptionIndexMatchingCallback !== -1) {
34
+ this.subscriptions.splice(subscriptionIndexMatchingCallback, 1);
35
+ }
36
+ }
37
+ fire = (...fireArgs) => {
38
+ for (const subscription of this.subscriptions) {
39
+ const { callbackFunc, optionalArgs } = subscription;
40
+ if (this.shouldFire(fireArgs, optionalArgs)) {
41
+ // - TypeScript is not smart enough to know that the arguments match the function, so we
42
+ // must cast it to `AnyFunction`.
43
+ // - We cannot use `...fireArgs` here because it would fail to pass any arguments that exist
44
+ // beyond `nil` elements.
45
+ const value = callbackFunc(fireArgs[0], fireArgs[1], fireArgs[2], fireArgs[3], fireArgs[4], fireArgs[5], fireArgs[6]);
46
+ if (value !== undefined) {
47
+ return value;
48
+ }
49
+ }
50
+ }
51
+ return undefined;
52
+ };
53
+ /**
54
+ * This method needs to be overwritten for any callback that has optional filtration arguments.
55
+ * See "shouldFire.ts" for methods tailored to specific kinds of callbacks.
56
+ */
57
+ shouldFire = () => true;
58
+ }
59
+ exports.CustomCallback = CustomCallback;
@@ -0,0 +1,39 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.Feature = void 0;
4
+ /**
5
+ * The IsaacScript standard library contains many optional features, such as the ability to create
6
+ * custom pickups. All features are optional and are only initialized when needed. This class
7
+ * contains elements to facilitate that.
8
+ *
9
+ * Additionally, all custom callbacks extend from this class.
10
+ */
11
+ class Feature {
12
+ /**
13
+ * All features should only be instantiated once and are passed around to other features using
14
+ * dependency injection. We provide a run-time check in order to prevent the bug of any feature
15
+ * accidentally being instantiated twice.
16
+ */
17
+ static constructedClassNames = new Set();
18
+ /** @internal */
19
+ initialized = false;
20
+ /** @internal */
21
+ numConsumers = 0;
22
+ /** @internal */
23
+ v;
24
+ /** @internal */
25
+ vConditionalFunc;
26
+ /** @internal */
27
+ featuresUsed;
28
+ /** @internal */
29
+ callbacksUsed;
30
+ /** @internal */
31
+ customCallbacksUsed;
32
+ constructor() {
33
+ if (Feature.constructedClassNames.has(this.constructor.name)) {
34
+ error(`Failed to instantiate feature class "${this.constructor.name}" because it has already been instantiated once.`);
35
+ }
36
+ Feature.constructedClassNames.add(this.constructor.name);
37
+ }
38
+ }
39
+ exports.Feature = Feature;
@@ -0,0 +1,61 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.fonts = exports.sfxManager = exports.musicManager = exports.itemConfig = exports.game = void 0;
4
+ /**
5
+ * A cached version of the class returned from the `Game()` constructor.
6
+ *
7
+ * Use this instead of invoking the constructor again for a miniscule performance increase.
8
+ *
9
+ * Caching the results of this constructor is safe, but caching other classes (like `Level` or
10
+ * `Room`) is not safe and can lead to the game crashing in certain situations.
11
+ */
12
+ exports.game = Game();
13
+ /**
14
+ * A cached version of the class returned from the `Isaac.GetItemConfig()` constructor.
15
+ *
16
+ * Use this instead of invoking the constructor again for a miniscule performance increase.
17
+ *
18
+ * Caching the results of this constructor is safe, but caching other classes (like `Level` or
19
+ * `Room`) is not safe and can lead to the game crashing in certain situations.
20
+ */
21
+ exports.itemConfig = Isaac.GetItemConfig();
22
+ /**
23
+ * A cached version of the class returned from the `MusicManager()` constructor.
24
+ *
25
+ * Use this instead of invoking the constructor again for a miniscule performance increase.
26
+ *
27
+ * Caching the results of this constructor is safe, but caching other classes (like `Level` or
28
+ * `Room`) is not safe and can lead to the game crashing in certain situations.
29
+ */
30
+ exports.musicManager = MusicManager();
31
+ /**
32
+ * A cached version of the class returned from the `SFXManager()` constructor.
33
+ *
34
+ * Use this instead of invoking the constructor again for a miniscule performance increase.
35
+ *
36
+ * Caching the results of this constructor is safe, but caching other classes (like `Level` or
37
+ * `Room`) is not safe and can lead to the game crashing in certain situations.
38
+ */
39
+ exports.sfxManager = SFXManager();
40
+ /**
41
+ * An object containing all 7 vanilla fonts that are pre-loaded and ready to use.
42
+ *
43
+ * For more information on the vanilla fonts and to see what they look like, see:
44
+ * https://wofsauge.github.io/IsaacDocs/rep/tutorials/Tutorial-Rendertext.html
45
+ */
46
+ exports.fonts = {
47
+ droid: Font(),
48
+ pfTempestaSevenCondensed: Font(),
49
+ teamMeatFont10: Font(),
50
+ teamMeatFont12: Font(),
51
+ teamMeatFont16Bold: Font(),
52
+ terminus: Font(),
53
+ upheaval: Font(),
54
+ };
55
+ exports.fonts.droid.Load("font/droid.fnt");
56
+ exports.fonts.pfTempestaSevenCondensed.Load("font/pftempestasevencondensed.fnt");
57
+ exports.fonts.teamMeatFont10.Load("font/teammeatfont10.fnt");
58
+ exports.fonts.teamMeatFont12.Load("font/teammeatfont12.fnt");
59
+ exports.fonts.teamMeatFont16Bold.Load("font/teammeatfont16bold.fnt");
60
+ exports.fonts.terminus.Load("font/terminus.fnt");
61
+ exports.fonts.upheaval.Load("font/upheaval.fnt");