isaacscript-common 84.0.0 → 84.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (568) hide show
  1. package/dist/arrays/cachedEnumValues.js +33 -0
  2. package/dist/callbackClasses.js +289 -0
  3. package/dist/callbacks.js +181 -0
  4. package/dist/classes/DefaultMap.js +171 -0
  5. package/dist/classes/ModFeature.js +244 -0
  6. package/dist/classes/ModUpgraded.js +324 -0
  7. package/dist/classes/callbacks/EntityTakeDmgFilter.js +19 -0
  8. package/dist/classes/callbacks/EntityTakeDmgPlayer.js +29 -0
  9. package/dist/classes/callbacks/InputActionFilter.js +24 -0
  10. package/dist/classes/callbacks/InputActionPlayer.js +37 -0
  11. package/dist/classes/callbacks/PostAmbushFinished.js +40 -0
  12. package/dist/classes/callbacks/PostAmbushStarted.js +40 -0
  13. package/dist/classes/callbacks/PostBombExploded.js +24 -0
  14. package/dist/classes/callbacks/PostBombInitFilter.js +21 -0
  15. package/dist/classes/callbacks/PostBombInitLate.js +31 -0
  16. package/dist/classes/callbacks/PostBombRenderFilter.js +21 -0
  17. package/dist/classes/callbacks/PostBombUpdateFilter.js +21 -0
  18. package/dist/classes/callbacks/PostBoneSwing.js +53 -0
  19. package/dist/classes/callbacks/PostCollectibleEmpty.js +50 -0
  20. package/dist/classes/callbacks/PostCursedTeleport.js +119 -0
  21. package/dist/classes/callbacks/PostCustomRevive.js +17 -0
  22. package/dist/classes/callbacks/PostDiceRoomActivated.js +50 -0
  23. package/dist/classes/callbacks/PostDoorRender.js +24 -0
  24. package/dist/classes/callbacks/PostDoorUpdate.js +24 -0
  25. package/dist/classes/callbacks/PostEffectInitFilter.js +21 -0
  26. package/dist/classes/callbacks/PostEffectInitLate.js +31 -0
  27. package/dist/classes/callbacks/PostEffectRenderFilter.js +21 -0
  28. package/dist/classes/callbacks/PostEffectStateChanged.js +34 -0
  29. package/dist/classes/callbacks/PostEffectUpdateFilter.js +21 -0
  30. package/dist/classes/callbacks/PostEntityKillFilter.js +21 -0
  31. package/dist/classes/callbacks/PostEsauJr.js +12 -0
  32. package/dist/classes/callbacks/PostFamiliarInitFilter.js +21 -0
  33. package/dist/classes/callbacks/PostFamiliarInitLate.js +31 -0
  34. package/dist/classes/callbacks/PostFamiliarRenderFilter.js +21 -0
  35. package/dist/classes/callbacks/PostFamiliarStateChanged.js +34 -0
  36. package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +21 -0
  37. package/dist/classes/callbacks/PostFirstEsauJr.js +12 -0
  38. package/dist/classes/callbacks/PostFirstFlip.js +12 -0
  39. package/dist/classes/callbacks/PostFlip.js +12 -0
  40. package/dist/classes/callbacks/PostGameEndFilter.js +21 -0
  41. package/dist/classes/callbacks/PostGameStartedReordered.js +14 -0
  42. package/dist/classes/callbacks/PostGameStartedReorderedLast.js +14 -0
  43. package/dist/classes/callbacks/PostGreedModeWave.js +35 -0
  44. package/dist/classes/callbacks/PostGridEntityBroken.js +14 -0
  45. package/dist/classes/callbacks/PostGridEntityCollision.js +28 -0
  46. package/dist/classes/callbacks/PostGridEntityCustomBroken.js +14 -0
  47. package/dist/classes/callbacks/PostGridEntityCustomCollision.js +24 -0
  48. package/dist/classes/callbacks/PostGridEntityCustomInit.js +14 -0
  49. package/dist/classes/callbacks/PostGridEntityCustomRemove.js +18 -0
  50. package/dist/classes/callbacks/PostGridEntityCustomRender.js +14 -0
  51. package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +14 -0
  52. package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +14 -0
  53. package/dist/classes/callbacks/PostGridEntityInit.js +14 -0
  54. package/dist/classes/callbacks/PostGridEntityRemove.js +19 -0
  55. package/dist/classes/callbacks/PostGridEntityRender.js +14 -0
  56. package/dist/classes/callbacks/PostGridEntityStateChanged.js +14 -0
  57. package/dist/classes/callbacks/PostGridEntityUpdate.js +14 -0
  58. package/dist/classes/callbacks/PostHolyMantleRemoved.js +43 -0
  59. package/dist/classes/callbacks/PostItemDischarge.js +122 -0
  60. package/dist/classes/callbacks/PostItemPickup.js +14 -0
  61. package/dist/classes/callbacks/PostKeyboardChanged.js +46 -0
  62. package/dist/classes/callbacks/PostKnifeInitFilter.js +21 -0
  63. package/dist/classes/callbacks/PostKnifeInitLate.js +31 -0
  64. package/dist/classes/callbacks/PostKnifeRenderFilter.js +21 -0
  65. package/dist/classes/callbacks/PostKnifeUpdateFilter.js +21 -0
  66. package/dist/classes/callbacks/PostLaserInitFilter.js +21 -0
  67. package/dist/classes/callbacks/PostLaserInitLate.js +31 -0
  68. package/dist/classes/callbacks/PostLaserRenderFilter.js +21 -0
  69. package/dist/classes/callbacks/PostLaserUpdateFilter.js +21 -0
  70. package/dist/classes/callbacks/PostNPCDeathFilter.js +21 -0
  71. package/dist/classes/callbacks/PostNPCInitFilter.js +21 -0
  72. package/dist/classes/callbacks/PostNPCInitLate.js +31 -0
  73. package/dist/classes/callbacks/PostNPCRenderFilter.js +21 -0
  74. package/dist/classes/callbacks/PostNPCStateChanged.js +34 -0
  75. package/dist/classes/callbacks/PostNPCUpdateFilter.js +21 -0
  76. package/dist/classes/callbacks/PostNewLevelReordered.js +14 -0
  77. package/dist/classes/callbacks/PostNewRoomEarly.js +74 -0
  78. package/dist/classes/callbacks/PostNewRoomReordered.js +14 -0
  79. package/dist/classes/callbacks/PostPEffectUpdateReordered.js +14 -0
  80. package/dist/classes/callbacks/PostPickupChanged.js +14 -0
  81. package/dist/classes/callbacks/PostPickupCollect.js +38 -0
  82. package/dist/classes/callbacks/PostPickupInitFilter.js +21 -0
  83. package/dist/classes/callbacks/PostPickupInitFirst.js +33 -0
  84. package/dist/classes/callbacks/PostPickupInitLate.js +31 -0
  85. package/dist/classes/callbacks/PostPickupRenderFilter.js +21 -0
  86. package/dist/classes/callbacks/PostPickupSelectionFilter.js +29 -0
  87. package/dist/classes/callbacks/PostPickupStateChanged.js +34 -0
  88. package/dist/classes/callbacks/PostPickupUpdateFilter.js +21 -0
  89. package/dist/classes/callbacks/PostPitRender.js +24 -0
  90. package/dist/classes/callbacks/PostPitUpdate.js +24 -0
  91. package/dist/classes/callbacks/PostPlayerChangeHealth.js +47 -0
  92. package/dist/classes/callbacks/PostPlayerChangeStat.js +79 -0
  93. package/dist/classes/callbacks/PostPlayerChangeType.js +36 -0
  94. package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +14 -0
  95. package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +14 -0
  96. package/dist/classes/callbacks/PostPlayerFatalDamage.js +83 -0
  97. package/dist/classes/callbacks/PostPlayerInitFirst.js +41 -0
  98. package/dist/classes/callbacks/PostPlayerInitLate.js +33 -0
  99. package/dist/classes/callbacks/PostPlayerRenderReordered.js +14 -0
  100. package/dist/classes/callbacks/PostPlayerUpdateReordered.js +14 -0
  101. package/dist/classes/callbacks/PostPoopRender.js +24 -0
  102. package/dist/classes/callbacks/PostPoopUpdate.js +24 -0
  103. package/dist/classes/callbacks/PostPressurePlateRender.js +24 -0
  104. package/dist/classes/callbacks/PostPressurePlateUpdate.js +24 -0
  105. package/dist/classes/callbacks/PostProjectileInitFilter.js +21 -0
  106. package/dist/classes/callbacks/PostProjectileInitLate.js +31 -0
  107. package/dist/classes/callbacks/PostProjectileKill.js +52 -0
  108. package/dist/classes/callbacks/PostProjectileRenderFilter.js +21 -0
  109. package/dist/classes/callbacks/PostProjectileUpdateFilter.js +21 -0
  110. package/dist/classes/callbacks/PostPurchase.js +90 -0
  111. package/dist/classes/callbacks/PostRockRender.js +24 -0
  112. package/dist/classes/callbacks/PostRockUpdate.js +24 -0
  113. package/dist/classes/callbacks/PostRoomClearChanged.js +46 -0
  114. package/dist/classes/callbacks/PostSacrifice.js +36 -0
  115. package/dist/classes/callbacks/PostSlotAnimationChanged.js +14 -0
  116. package/dist/classes/callbacks/PostSlotCollision.js +25 -0
  117. package/dist/classes/callbacks/PostSlotDestroyed.js +14 -0
  118. package/dist/classes/callbacks/PostSlotInit.js +14 -0
  119. package/dist/classes/callbacks/PostSlotRender.js +14 -0
  120. package/dist/classes/callbacks/PostSlotUpdate.js +14 -0
  121. package/dist/classes/callbacks/PostSpikesRender.js +24 -0
  122. package/dist/classes/callbacks/PostSpikesUpdate.js +24 -0
  123. package/dist/classes/callbacks/PostTNTRender.js +24 -0
  124. package/dist/classes/callbacks/PostTNTUpdate.js +24 -0
  125. package/dist/classes/callbacks/PostTearInitFilter.js +21 -0
  126. package/dist/classes/callbacks/PostTearInitLate.js +31 -0
  127. package/dist/classes/callbacks/PostTearInitVeryLate.js +35 -0
  128. package/dist/classes/callbacks/PostTearKill.js +52 -0
  129. package/dist/classes/callbacks/PostTearRenderFilter.js +21 -0
  130. package/dist/classes/callbacks/PostTearUpdateFilter.js +21 -0
  131. package/dist/classes/callbacks/PostTransformation.js +47 -0
  132. package/dist/classes/callbacks/PostTrinketBreak.js +70 -0
  133. package/dist/classes/callbacks/PostUsePillFilter.js +76 -0
  134. package/dist/classes/callbacks/PreBerserkDeath.js +41 -0
  135. package/dist/classes/callbacks/PreBombCollisionFilter.js +19 -0
  136. package/dist/classes/callbacks/PreCustomRevive.js +14 -0
  137. package/dist/classes/callbacks/PreEntitySpawnFilter.js +24 -0
  138. package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +19 -0
  139. package/dist/classes/callbacks/PreGetPedestal.js +46 -0
  140. package/dist/classes/callbacks/PreItemPickup.js +14 -0
  141. package/dist/classes/callbacks/PreKnifeCollisionFilter.js +19 -0
  142. package/dist/classes/callbacks/PreNPCCollisionFilter.js +19 -0
  143. package/dist/classes/callbacks/PreNPCUpdateFilter.js +19 -0
  144. package/dist/classes/callbacks/PreNewLevel.js +51 -0
  145. package/dist/classes/callbacks/PreProjectileCollisionFilter.js +19 -0
  146. package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +26 -0
  147. package/dist/classes/callbacks/PreTearCollisionFilter.js +19 -0
  148. package/dist/classes/features/callbackLogic/CustomGridEntities.js +359 -0
  149. package/dist/classes/features/callbackLogic/CustomRevive.js +170 -0
  150. package/dist/classes/features/callbackLogic/EsauJrDetection.js +70 -0
  151. package/dist/classes/features/callbackLogic/FlipDetection.js +61 -0
  152. package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +220 -0
  153. package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +62 -0
  154. package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +35 -0
  155. package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +147 -0
  156. package/dist/classes/features/callbackLogic/ItemPickupDetection.js +68 -0
  157. package/dist/classes/features/callbackLogic/PickupChangeDetection.js +43 -0
  158. package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +193 -0
  159. package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +109 -0
  160. package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +95 -0
  161. package/dist/classes/features/callbackLogic/SlotRenderDetection.js +48 -0
  162. package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +52 -0
  163. package/dist/classes/features/other/CharacterHealthConversion.js +112 -0
  164. package/dist/classes/features/other/CharacterStats.js +68 -0
  165. package/dist/classes/features/other/CollectibleItemPoolType.js +75 -0
  166. package/dist/classes/features/other/CustomHotkeys.js +144 -0
  167. package/dist/classes/features/other/CustomItemPools.js +128 -0
  168. package/dist/classes/features/other/CustomPickups.js +118 -0
  169. package/dist/classes/features/other/CustomStages.js +471 -0
  170. package/dist/classes/features/other/CustomTrapdoors.js +596 -0
  171. package/dist/classes/features/other/DebugDisplay.js +699 -0
  172. package/dist/classes/features/other/DeployJSONRoom.js +301 -0
  173. package/dist/classes/features/other/DisableAllSound.js +90 -0
  174. package/dist/classes/features/other/DisableInputs.js +249 -0
  175. package/dist/classes/features/other/EdenStartingStatsHealth.js +197 -0
  176. package/dist/classes/features/other/ExtraConsoleCommands.js +292 -0
  177. package/dist/classes/features/other/FadeInRemover.js +67 -0
  178. package/dist/classes/features/other/FastReset.js +88 -0
  179. package/dist/classes/features/other/FlyingDetection.js +64 -0
  180. package/dist/classes/features/other/ForgottenSwitch.js +43 -0
  181. package/dist/classes/features/other/ItemPoolDetection.js +187 -0
  182. package/dist/classes/features/other/ModdedElementDetection.js +399 -0
  183. package/dist/classes/features/other/ModdedElementSets.js +1251 -0
  184. package/dist/classes/features/other/NoSirenSteal.js +88 -0
  185. package/dist/classes/features/other/Pause.js +197 -0
  186. package/dist/classes/features/other/PersistentEntities.js +168 -0
  187. package/dist/classes/features/other/PickupIndexCreation.js +229 -0
  188. package/dist/classes/features/other/PlayerCollectibleTracking.js +102 -0
  189. package/dist/classes/features/other/PonyDetection.js +86 -0
  190. package/dist/classes/features/other/PressInput.js +71 -0
  191. package/dist/classes/features/other/PreventChildEntities.js +60 -0
  192. package/dist/classes/features/other/PreventGridEntityRespawn.js +159 -0
  193. package/dist/classes/features/other/RerunDetection.js +69 -0
  194. package/dist/classes/features/other/RoomClearFrame.js +94 -0
  195. package/dist/classes/features/other/RoomHistory.js +196 -0
  196. package/dist/classes/features/other/RunInNFrames.js +323 -0
  197. package/dist/classes/features/other/RunNextRoom.js +53 -0
  198. package/dist/classes/features/other/RunNextRun.js +60 -0
  199. package/dist/classes/features/other/SaveDataManager.js +383 -0
  200. package/dist/classes/features/other/SpawnRockAltRewards.js +469 -0
  201. package/dist/classes/features/other/StageHistory.js +244 -0
  202. package/dist/classes/features/other/StartAmbush.js +62 -0
  203. package/dist/classes/features/other/TaintedLazarusPlayers.js +115 -0
  204. package/dist/classes/features/other/UnlockAchievementsDetection.js +60 -0
  205. package/dist/classes/features/other/customStages/backdrop.js +195 -0
  206. package/dist/classes/features/other/customStages/constants.js +19 -0
  207. package/dist/classes/features/other/customStages/gridEntities.js +177 -0
  208. package/dist/classes/features/other/customStages/shadows.js +67 -0
  209. package/dist/classes/features/other/customStages/streakText.js +222 -0
  210. package/dist/classes/features/other/customStages/utils.js +65 -0
  211. package/dist/classes/features/other/customStages/v.js +27 -0
  212. package/dist/classes/features/other/customStages/versusScreen.js +227 -0
  213. package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +23 -0
  214. package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +22 -0
  215. package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +23 -0
  216. package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +23 -0
  217. package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +23 -0
  218. package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +23 -0
  219. package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +23 -0
  220. package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +23 -0
  221. package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +22 -0
  222. package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +25 -0
  223. package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +22 -0
  224. package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +25 -0
  225. package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +23 -0
  226. package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +22 -0
  227. package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +22 -0
  228. package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +22 -0
  229. package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +22 -0
  230. package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +23 -0
  231. package/dist/classes/features/other/debugDisplay/utils.js +13 -0
  232. package/dist/classes/features/other/extraConsoleCommands/commands.js +1598 -0
  233. package/dist/classes/features/other/extraConsoleCommands/subroutines.js +135 -0
  234. package/dist/classes/features/other/extraConsoleCommands/v.js +30 -0
  235. package/dist/classes/features/other/saveDataManager/constants.js +4 -0
  236. package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +106 -0
  237. package/dist/classes/features/other/saveDataManager/loadFromDisk.js +69 -0
  238. package/dist/classes/features/other/saveDataManager/restoreDefaults.js +69 -0
  239. package/dist/classes/features/other/saveDataManager/saveToDisk.js +46 -0
  240. package/dist/classes/private/CustomCallback.js +59 -0
  241. package/dist/classes/private/Feature.js +39 -0
  242. package/dist/core/cachedClasses.js +61 -0
  243. package/dist/core/constants.js +289 -0
  244. package/dist/core/constantsFirstLast.js +98 -0
  245. package/dist/core/constantsVanilla.js +131 -0
  246. package/dist/core/upgradeMod.js +71 -0
  247. package/dist/customStageMetadata.json +1 -0
  248. package/dist/data/itempools.json +16625 -0
  249. package/dist/decorators.js +21 -0
  250. package/dist/enums/AmbushType.js +9 -0
  251. package/dist/enums/CornerType.js +11 -0
  252. package/dist/enums/HealthType.js +20 -0
  253. package/dist/enums/ISCFeature.js +65 -0
  254. package/dist/enums/LadderSubTypeCustom.js +20 -0
  255. package/dist/enums/ModCallbackCustom.js +2477 -0
  256. package/dist/enums/MysteriousPaperEffect.js +16 -0
  257. package/dist/enums/PlayerStat.js +37 -0
  258. package/dist/enums/PocketItemType.js +13 -0
  259. package/dist/enums/RockAltType.js +23 -0
  260. package/dist/enums/SaveDataKey.js +14 -0
  261. package/dist/enums/SerializationType.js +10 -0
  262. package/dist/enums/SlotDestructionType.js +22 -0
  263. package/dist/enums/private/GridEntityTypeCustom.js +10 -0
  264. package/dist/enums/private/SerializationBrand.js +42 -0
  265. package/dist/enums/private/StageTravelState.js +13 -0
  266. package/dist/enums/private/TrapdoorAnimation.js +9 -0
  267. package/dist/enums/private/UIStreakAnimation.js +10 -0
  268. package/dist/features.js +150 -0
  269. package/dist/functions/ambush.js +26 -0
  270. package/dist/functions/array.js +586 -0
  271. package/dist/functions/arrayLua.js +81 -0
  272. package/dist/functions/benchmark.js +36 -0
  273. package/dist/functions/bitSet128.js +64 -0
  274. package/dist/functions/bitwise.js +82 -0
  275. package/dist/functions/bombs.js +14 -0
  276. package/dist/functions/bosses.js +238 -0
  277. package/dist/functions/cards.js +164 -0
  278. package/dist/functions/challenges.js +117 -0
  279. package/dist/functions/characters.js +182 -0
  280. package/dist/functions/charge.js +251 -0
  281. package/dist/functions/chargeBar.js +54 -0
  282. package/dist/functions/collectibleTag.js +24 -0
  283. package/dist/functions/collectibles.js +581 -0
  284. package/dist/functions/color.js +88 -0
  285. package/dist/functions/console.js +18 -0
  286. package/dist/functions/curses.js +37 -0
  287. package/dist/functions/debugFunctions.js +108 -0
  288. package/dist/functions/decorators.js +113 -0
  289. package/dist/functions/deepCopy.js +406 -0
  290. package/dist/functions/deepCopyTests.js +361 -0
  291. package/dist/functions/dimensions.js +30 -0
  292. package/dist/functions/direction.js +78 -0
  293. package/dist/functions/doors.js +524 -0
  294. package/dist/functions/easing.js +327 -0
  295. package/dist/functions/effects.js +14 -0
  296. package/dist/functions/emptyRoom.js +79 -0
  297. package/dist/functions/entities.js +529 -0
  298. package/dist/functions/entitiesSpecific.js +582 -0
  299. package/dist/functions/entityTypes.js +9 -0
  300. package/dist/functions/enums.js +244 -0
  301. package/dist/functions/external.js +59 -0
  302. package/dist/functions/familiars.js +136 -0
  303. package/dist/functions/flag.js +146 -0
  304. package/dist/functions/frames.js +166 -0
  305. package/dist/functions/globals.js +291 -0
  306. package/dist/functions/gridEntities.js +990 -0
  307. package/dist/functions/gridEntitiesSpecific.js +456 -0
  308. package/dist/functions/gridIndex.js +35 -0
  309. package/dist/functions/hash.js +75 -0
  310. package/dist/functions/hex.js +57 -0
  311. package/dist/functions/input.js +185 -0
  312. package/dist/functions/isaacAPIClass.js +157 -0
  313. package/dist/functions/itemPool.js +118 -0
  314. package/dist/functions/jsonHelpers.js +73 -0
  315. package/dist/functions/jsonRoom.js +184 -0
  316. package/dist/functions/kColor.js +89 -0
  317. package/dist/functions/language.js +16 -0
  318. package/dist/functions/level.js +66 -0
  319. package/dist/functions/levelGrid.js +497 -0
  320. package/dist/functions/log.js +86 -0
  321. package/dist/functions/logEntities.js +308 -0
  322. package/dist/functions/logMisc.js +510 -0
  323. package/dist/functions/map.js +121 -0
  324. package/dist/functions/math.js +149 -0
  325. package/dist/functions/merge.js +159 -0
  326. package/dist/functions/mergeTests.js +313 -0
  327. package/dist/functions/minimap.js +204 -0
  328. package/dist/functions/modFeatures.js +39 -0
  329. package/dist/functions/newArray.js +30 -0
  330. package/dist/functions/nextStage.js +169 -0
  331. package/dist/functions/npcDataStructures.js +146 -0
  332. package/dist/functions/npcs.js +132 -0
  333. package/dist/functions/pickupVariants.js +63 -0
  334. package/dist/functions/pickups.js +168 -0
  335. package/dist/functions/pickupsSpecific.js +376 -0
  336. package/dist/functions/pills.js +200 -0
  337. package/dist/functions/playerCenter.js +53 -0
  338. package/dist/functions/playerCollectibles.js +300 -0
  339. package/dist/functions/playerDataStructures.js +145 -0
  340. package/dist/functions/playerEffects.js +63 -0
  341. package/dist/functions/playerHealth.js +604 -0
  342. package/dist/functions/playerIndex.js +186 -0
  343. package/dist/functions/playerTrinkets.js +149 -0
  344. package/dist/functions/players.js +471 -0
  345. package/dist/functions/pocketItems.js +165 -0
  346. package/dist/functions/positionVelocity.js +158 -0
  347. package/dist/functions/pressurePlate.js +26 -0
  348. package/dist/functions/projectiles.js +57 -0
  349. package/dist/functions/random.js +90 -0
  350. package/dist/functions/readOnly.js +33 -0
  351. package/dist/functions/render.js +36 -0
  352. package/dist/functions/revive.js +151 -0
  353. package/dist/functions/rng.js +140 -0
  354. package/dist/functions/rockAlt.js +50 -0
  355. package/dist/functions/roomData.js +155 -0
  356. package/dist/functions/roomGrid.js +97 -0
  357. package/dist/functions/roomShape.js +143 -0
  358. package/dist/functions/roomShapeWalls.js +187 -0
  359. package/dist/functions/roomTransition.js +43 -0
  360. package/dist/functions/rooms.js +782 -0
  361. package/dist/functions/run.js +121 -0
  362. package/dist/functions/seeds.js +22 -0
  363. package/dist/functions/serialization.js +98 -0
  364. package/dist/functions/set.js +215 -0
  365. package/dist/functions/slots.js +41 -0
  366. package/dist/functions/sort.js +158 -0
  367. package/dist/functions/sound.js +45 -0
  368. package/dist/functions/spawnCollectible.js +112 -0
  369. package/dist/functions/sprites.js +130 -0
  370. package/dist/functions/stage.js +540 -0
  371. package/dist/functions/stats.js +104 -0
  372. package/dist/functions/storyBosses.js +63 -0
  373. package/dist/functions/string.js +194 -0
  374. package/dist/functions/table.js +162 -0
  375. package/dist/functions/tears.js +128 -0
  376. package/dist/functions/transformations.js +89 -0
  377. package/dist/functions/trinketGive.js +145 -0
  378. package/dist/functions/trinkets.js +213 -0
  379. package/dist/functions/tstlClass.js +97 -0
  380. package/dist/functions/types.js +225 -0
  381. package/dist/functions/ui.js +148 -0
  382. package/dist/functions/utils.d.ts +4 -1
  383. package/dist/functions/utils.d.ts.map +1 -1
  384. package/dist/functions/utils.js +195 -0
  385. package/dist/functions/utils.lua +6 -2
  386. package/dist/functions/vector.js +150 -0
  387. package/dist/functions/versusScreen.js +58 -0
  388. package/dist/functions/weighted.js +57 -0
  389. package/dist/index.js +219 -0
  390. package/dist/index.rollup.d.ts +4 -1
  391. package/dist/indexLua.js +220 -0
  392. package/dist/interfaces/ChargeBarSprites.js +2 -0
  393. package/dist/interfaces/Corner.js +2 -0
  394. package/dist/interfaces/CustomStageTSConfig.js +2 -0
  395. package/dist/interfaces/GridEntityCustomData.js +2 -0
  396. package/dist/interfaces/JSONRoomsFile.js +2 -0
  397. package/dist/interfaces/PlayerHealth.js +2 -0
  398. package/dist/interfaces/PlayerStats.js +4 -0
  399. package/dist/interfaces/PocketItemDescription.js +2 -0
  400. package/dist/interfaces/RoomDescription.js +2 -0
  401. package/dist/interfaces/SaveData.js +98 -0
  402. package/dist/interfaces/StageHistoryEntry.js +2 -0
  403. package/dist/interfaces/TSTLClassMetatable.js +2 -0
  404. package/dist/interfaces/TrinketSituation.js +2 -0
  405. package/dist/interfaces/private/AddCallbackParametersCustom.js +4 -0
  406. package/dist/interfaces/private/CustomStage.js +2 -0
  407. package/dist/interfaces/private/CustomTrapdoorDescription.js +2 -0
  408. package/dist/interfaces/private/ModUpgradedInterface.js +2 -0
  409. package/dist/isaacscript-common.lua +7 -3
  410. package/dist/maps/PHDPillConversionsMap.js +23 -0
  411. package/dist/maps/cardNameToTypeMap.js +211 -0
  412. package/dist/maps/characterNameToTypeMap.js +91 -0
  413. package/dist/maps/collectibleNameToTypeMap.js +19 -0
  414. package/dist/maps/defaultPlayerStatMap.js +17 -0
  415. package/dist/maps/entityTypeVariantToBossIDMap.js +11 -0
  416. package/dist/maps/falsePHDPillConversionsMap.js +37 -0
  417. package/dist/maps/gridEntityTypeToBrokenStateMap.js +32 -0
  418. package/dist/maps/gridEntityXMLMap.js +133 -0
  419. package/dist/maps/itemPoolTypeToItemPoolName.js +38 -0
  420. package/dist/maps/keyboardToStringMap.js +71 -0
  421. package/dist/maps/pillNameToEffectMap.js +91 -0
  422. package/dist/maps/roomNameToTypeMap.js +43 -0
  423. package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +17 -0
  424. package/dist/maps/transformationNameToPlayerFormMap.js +35 -0
  425. package/dist/maps/trinketNameToTypeMap.js +19 -0
  426. package/dist/objects/LRoomShapeToRectangles.js +43 -0
  427. package/dist/objects/backdropTypeToRockAltType.js +68 -0
  428. package/dist/objects/batteryNames.js +13 -0
  429. package/dist/objects/bombNames.js +17 -0
  430. package/dist/objects/bossIDToEntityTypeVariant.js +228 -0
  431. package/dist/objects/bossNamePNGFileNames.js +120 -0
  432. package/dist/objects/bossNames.js +119 -0
  433. package/dist/objects/bossPortraitPNGFileNames.js +123 -0
  434. package/dist/objects/cardDescriptions.js +106 -0
  435. package/dist/objects/cardNames.js +106 -0
  436. package/dist/objects/challengeBosses.js +60 -0
  437. package/dist/objects/challengeCharacters.js +58 -0
  438. package/dist/objects/challengeCollectibleTypes.js +255 -0
  439. package/dist/objects/challengeNames.js +54 -0
  440. package/dist/objects/challengeTrinketType.js +58 -0
  441. package/dist/objects/characterDamageMultipliers.js +49 -0
  442. package/dist/objects/characterNames.js +48 -0
  443. package/dist/objects/characterSpritePNGFileNames.js +50 -0
  444. package/dist/objects/characterStartingCollectibleTypes.js +105 -0
  445. package/dist/objects/characterStartingTrinketTypes.js +90 -0
  446. package/dist/objects/chestNames.js +20 -0
  447. package/dist/objects/coinNames.js +16 -0
  448. package/dist/objects/coinSubTypeToValue.js +15 -0
  449. package/dist/objects/collectibleDescriptions.js +742 -0
  450. package/dist/objects/collectibleNames.js +745 -0
  451. package/dist/objects/colors.js +26 -0
  452. package/dist/objects/directionNames.js +11 -0
  453. package/dist/objects/directionToDegrees.js +11 -0
  454. package/dist/objects/directionToMoveAction.js +11 -0
  455. package/dist/objects/directionToShootAction.js +11 -0
  456. package/dist/objects/directionToVector.js +13 -0
  457. package/dist/objects/doorSlotFlagToDoorSlot.js +15 -0
  458. package/dist/objects/doorSlotToDirection.js +15 -0
  459. package/dist/objects/doorSlotToDoorSlotFlag.js +15 -0
  460. package/dist/objects/gridEntityTypeToANM2Name.js +37 -0
  461. package/dist/objects/heartNames.js +21 -0
  462. package/dist/objects/isaacAPIClassTypeToBrand.js +12 -0
  463. package/dist/objects/isaacAPIClassTypeToFunctions.js +46 -0
  464. package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +57 -0
  465. package/dist/objects/kColors.js +27 -0
  466. package/dist/objects/keyNames.js +13 -0
  467. package/dist/objects/languageNames.js +13 -0
  468. package/dist/objects/oppositeDoorSlots.js +15 -0
  469. package/dist/objects/pillEffectClasses.js +57 -0
  470. package/dist/objects/pillEffectNames.js +57 -0
  471. package/dist/objects/pillEffectTypeToPillEffects.js +23 -0
  472. package/dist/objects/pillEffectTypes.js +57 -0
  473. package/dist/objects/playerNamePNGFileNames.js +57 -0
  474. package/dist/objects/playerPortraitPNGFileNames.js +54 -0
  475. package/dist/objects/roomShapeBounds.js +48 -0
  476. package/dist/objects/roomShapeCorners.js +330 -0
  477. package/dist/objects/roomShapeLayoutSizes.js +41 -0
  478. package/dist/objects/roomShapeToBottomRightPosition.js +25 -0
  479. package/dist/objects/roomShapeToDoorSlotCoordinates.js +111 -0
  480. package/dist/objects/roomShapeToDoorSlots.js +72 -0
  481. package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +118 -0
  482. package/dist/objects/roomShapeToGridWidth.js +20 -0
  483. package/dist/objects/roomShapeToTopLeftPosition.js +26 -0
  484. package/dist/objects/roomShapeVolumes.js +32 -0
  485. package/dist/objects/roomTypeNames.js +35 -0
  486. package/dist/objects/roomTypeSpecialGotoPrefixes.js +35 -0
  487. package/dist/objects/sackNames.js +11 -0
  488. package/dist/objects/slotNames.js +26 -0
  489. package/dist/objects/stageIDNames.js +43 -0
  490. package/dist/objects/stageToMusic.js +91 -0
  491. package/dist/objects/stageToStageID.js +117 -0
  492. package/dist/objects/stageTypeSuffixes.js +14 -0
  493. package/dist/objects/transformationNames.js +20 -0
  494. package/dist/objects/trinketDescriptions.js +199 -0
  495. package/dist/objects/trinketNames.js +202 -0
  496. package/dist/objects/versusScreenBackgroundColors.js +46 -0
  497. package/dist/objects/versusScreenDirtSpotColors.js +46 -0
  498. package/dist/patchErrorFunctions.js +65 -0
  499. package/dist/serialization.js +21 -0
  500. package/dist/sets/LRoomShapesSet.js +11 -0
  501. package/dist/sets/bigRoomShapesSet.js +14 -0
  502. package/dist/sets/bossSets.js +465 -0
  503. package/dist/sets/charactersThatStartWithAnActiveItemSet.js +18 -0
  504. package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +9 -0
  505. package/dist/sets/charactersWithFreeDevilDealsSet.js +6 -0
  506. package/dist/sets/charactersWithNoRedHeartsSet.js +19 -0
  507. package/dist/sets/charactersWithNoSoulHeartsSet.js +16 -0
  508. package/dist/sets/consoleCommandsSet.js +64 -0
  509. package/dist/sets/entitiesWithArmorSet.js +59 -0
  510. package/dist/sets/familiarsThatShootPlayerTearsSet.js +15 -0
  511. package/dist/sets/itemConfigCardTypesForCards.js +14 -0
  512. package/dist/sets/lostStyleCharactersSet.js +16 -0
  513. package/dist/sets/mineShaftRoomSubTypesSet.js +12 -0
  514. package/dist/sets/narrowRoomShapesSet.js +11 -0
  515. package/dist/sets/poopGridEntityXMLTypesSet.js +16 -0
  516. package/dist/sets/redHeartSubTypesSet.js +10 -0
  517. package/dist/sets/repentanceBossIDsSet.js +30 -0
  518. package/dist/sets/sinEntityTypesSet.js +14 -0
  519. package/dist/sets/singleUseActiveCollectibleTypesSet.js +15 -0
  520. package/dist/shaderCrashFix.js +24 -0
  521. package/dist/shouldFire.js +226 -0
  522. package/dist/types/AddSubtract.js +2 -0
  523. package/dist/types/AllButFirst.js +2 -0
  524. package/dist/types/AllButLast.js +2 -0
  525. package/dist/types/AnyClass.js +2 -0
  526. package/dist/types/AnyEntity.js +2 -0
  527. package/dist/types/AnyFunction.js +2 -0
  528. package/dist/types/AnyGridEntity.js +2 -0
  529. package/dist/types/CompositionTypeSatisfiesEnum.js +11 -0
  530. package/dist/types/ConversionHeartSubType.js +2 -0
  531. package/dist/types/Decrement.js +2 -0
  532. package/dist/types/ERange.js +2 -0
  533. package/dist/types/EntityID.js +2 -0
  534. package/dist/types/FunctionTuple.js +2 -0
  535. package/dist/types/GridEntityID.js +2 -0
  536. package/dist/types/HasFunction.js +2 -0
  537. package/dist/types/IRange.js +2 -0
  538. package/dist/types/Immutable.js +2 -0
  539. package/dist/types/Increment.js +2 -0
  540. package/dist/types/LowercaseKeys.js +2 -0
  541. package/dist/types/NaturalNumbersLessThan.js +2 -0
  542. package/dist/types/NaturalNumbersLessThanOrEqualTo.js +2 -0
  543. package/dist/types/PickingUpItem.js +44 -0
  544. package/dist/types/PickupIndex.js +2 -0
  545. package/dist/types/PlayerIndex.js +2 -0
  546. package/dist/types/PossibleStatType.js +2 -0
  547. package/dist/types/PublicInterface.js +2 -0
  548. package/dist/types/ReadonlyMap.js +6 -0
  549. package/dist/types/ReadonlyRecord.js +2 -0
  550. package/dist/types/ReadonlySet.js +6 -0
  551. package/dist/types/StartsWithLowercase.js +2 -0
  552. package/dist/types/StartsWithUppercase.js +2 -0
  553. package/dist/types/TSTLClass.js +2 -0
  554. package/dist/types/Tuple.js +2 -0
  555. package/dist/types/TupleKeys.js +2 -0
  556. package/dist/types/TupleToIntersection.js +2 -0
  557. package/dist/types/TupleToUnion.js +2 -0
  558. package/dist/types/TupleWithLengthBetween.js +22 -0
  559. package/dist/types/TupleWithMaxLength.js +27 -0
  560. package/dist/types/UnionToIntersection.js +2 -0
  561. package/dist/types/UppercaseKeys.js +2 -0
  562. package/dist/types/WeightedArray.js +2 -0
  563. package/dist/types/WidenLiteral.js +2 -0
  564. package/dist/types/Writable.js +2 -0
  565. package/dist/types/private/CallbackTuple.js +2 -0
  566. package/dist/types/private/ModUpgradedWithFeatures.js +2 -0
  567. package/package.json +1 -1
  568. package/src/functions/utils.ts +6 -2
@@ -0,0 +1,102 @@
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.PlayerCollectibleTracking = void 0;
10
+ const decorators_1 = require("../../../decorators");
11
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
12
+ const array_1 = require("../../../functions/array");
13
+ const collectibles_1 = require("../../../functions/collectibles");
14
+ const playerDataStructures_1 = require("../../../functions/playerDataStructures");
15
+ const DefaultMap_1 = require("../../DefaultMap");
16
+ const Feature_1 = require("../../private/Feature");
17
+ const v = {
18
+ run: {
19
+ playersCollectibleTypes: new DefaultMap_1.DefaultMap(() => []),
20
+ },
21
+ };
22
+ class PlayerCollectibleTracking extends Feature_1.Feature {
23
+ /** @internal */
24
+ v = v;
25
+ /** @internal */
26
+ constructor() {
27
+ super();
28
+ this.customCallbacksUsed = [
29
+ [
30
+ ModCallbackCustom_1.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED,
31
+ this.postPlayerCollectibleAdded,
32
+ ],
33
+ [
34
+ ModCallbackCustom_1.ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED,
35
+ this.postPlayerCollectibleRemoved,
36
+ ],
37
+ ];
38
+ }
39
+ // ModCallbackCustom.POST_PLAYER_COLLECTIBLE_ADDED
40
+ postPlayerCollectibleAdded = (player, collectibleType) => {
41
+ const collectibleTypes = (0, playerDataStructures_1.defaultMapGetPlayer)(v.run.playersCollectibleTypes, player, player);
42
+ collectibleTypes.push(collectibleType);
43
+ };
44
+ // ModCallbackCustom.POST_PLAYER_COLLECTIBLE_REMOVED
45
+ postPlayerCollectibleRemoved = (player, collectibleType) => {
46
+ const collectibleTypes = (0, playerDataStructures_1.defaultMapGetPlayer)(v.run.playersCollectibleTypes, player, player);
47
+ (0, array_1.arrayRemoveInPlace)(collectibleTypes, collectibleType);
48
+ };
49
+ /**
50
+ * Helper function to get all of the collectible types that the player has gotten so far on this
51
+ * run, in order.
52
+ *
53
+ * In the case of items given on the first frame of the run or the case where the player rerolls
54
+ * their build in the middle of the run (e.g. with D4), the order of the collectible types will
55
+ * not correspond to the order that the items were actually given to the player. In this case, the
56
+ * order will be from the lowest `CollectibleType` to the highest.
57
+ *
58
+ * Under the hood, this feature works by tracking the number of collectibles that a player has on
59
+ * every frame. Thus, in a situation where a collectible was both added and removed to the player
60
+ * on the same frame, the amount of total collectibles would stay the same, and the collectible
61
+ * types would not be updated. In vanilla, this situation would never happen, but another mod
62
+ * might do this for some reason. (With that said, the next time that a collectible is normally
63
+ * added or removed, it would trigger a re-scan, and the previous changes would be picked up.)
64
+ *
65
+ * In order to use this function, you must upgrade your mod with
66
+ * `ISCFeature.PLAYER_COLLECTIBLE_TRACKING`.
67
+ *
68
+ * @param player The player to get the collectible types for.
69
+ * @param includeActiveCollectibles Optional. If true, will include all active collectibles.
70
+ * Default is true.
71
+ * @public
72
+ */
73
+ getPlayerCollectibleTypes(player, includeActiveCollectibles = true) {
74
+ const collectibleTypes = (0, playerDataStructures_1.defaultMapGetPlayer)(v.run.playersCollectibleTypes, player, player);
75
+ if (includeActiveCollectibles) {
76
+ return collectibleTypes;
77
+ }
78
+ return collectibleTypes.filter((collectibleType) => !(0, collectibles_1.isActiveCollectible)(collectibleType));
79
+ }
80
+ /**
81
+ * Helper function to get the last passive collectible type that the player picked up. In most
82
+ * cases, this will be the passive that would be removed if the player used Clicker.
83
+ *
84
+ * Returns undefined if the player does not have any passive collectibles.
85
+ *
86
+ * In order to use this function, you must upgrade your mod with
87
+ * `ISCFeature.PLAYER_COLLECTIBLE_TRACKING`.
88
+ *
89
+ * @public
90
+ */
91
+ getPlayerLastPassiveCollectibleType(player) {
92
+ const collectibleTypes = this.getPlayerCollectibleTypes(player, false);
93
+ return collectibleTypes.at(-1);
94
+ }
95
+ }
96
+ exports.PlayerCollectibleTracking = PlayerCollectibleTracking;
97
+ __decorate([
98
+ decorators_1.Exported
99
+ ], PlayerCollectibleTracking.prototype, "getPlayerCollectibleTypes", null);
100
+ __decorate([
101
+ decorators_1.Exported
102
+ ], PlayerCollectibleTracking.prototype, "getPlayerLastPassiveCollectibleType", null);
@@ -0,0 +1,86 @@
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.PonyDetection = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const decorators_1 = require("../../../decorators");
12
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
13
+ const flag_1 = require("../../../functions/flag");
14
+ const playerDataStructures_1 = require("../../../functions/playerDataStructures");
15
+ const playerIndex_1 = require("../../../functions/playerIndex");
16
+ const Feature_1 = require("../../private/Feature");
17
+ const FLAGS_WHEN_PONY_IS_ACTIVE = [
18
+ isaac_typescript_definitions_1.EntityFlag.NO_KNOCKBACK,
19
+ isaac_typescript_definitions_1.EntityFlag.NO_PHYSICS_KNOCKBACK,
20
+ isaac_typescript_definitions_1.EntityFlag.NO_DAMAGE_BLINK, // 1 << 36
21
+ ];
22
+ const v = {
23
+ run: {
24
+ playersIsPonyActive: new Set(),
25
+ },
26
+ };
27
+ class PonyDetection extends Feature_1.Feature {
28
+ /** @internal */
29
+ v = v;
30
+ /** @internal */
31
+ constructor() {
32
+ super();
33
+ this.customCallbacksUsed = [
34
+ [
35
+ ModCallbackCustom_1.ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED,
36
+ this.postPEffectUpdateReordered,
37
+ ],
38
+ ];
39
+ }
40
+ // ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED
41
+ postPEffectUpdateReordered = (player) => {
42
+ const effects = player.GetEffects();
43
+ const entityFlags = player.GetEntityFlags();
44
+ const hasPonyCollectibleEffect = effects.HasCollectibleEffect(isaac_typescript_definitions_1.CollectibleType.PONY) ||
45
+ effects.HasCollectibleEffect(isaac_typescript_definitions_1.CollectibleType.WHITE_PONY);
46
+ const isPonyActiveOnPreviousFrame = (0, playerDataStructures_1.setHasPlayer)(v.run.playersIsPonyActive, player);
47
+ const hasPonyFlags = (0, flag_1.hasFlag)(entityFlags, ...FLAGS_WHEN_PONY_IS_ACTIVE);
48
+ const isPonyActiveNow = hasPonyCollectibleEffect || (isPonyActiveOnPreviousFrame && hasPonyFlags);
49
+ if (isPonyActiveNow) {
50
+ (0, playerDataStructures_1.setAddPlayer)(v.run.playersIsPonyActive, player);
51
+ }
52
+ else {
53
+ (0, playerDataStructures_1.setDeletePlayer)(v.run.playersIsPonyActive, player);
54
+ }
55
+ };
56
+ /**
57
+ * Helper function to see if the player is under the effects of A Pony or White Pony charge.
58
+ * Detecting this is difficult, as the temporary effect will disappear upon entering a new room.
59
+ *
60
+ * In order to use this function, you must upgrade your mod with `ISCFeature.PONY_DETECTION`.
61
+ *
62
+ * @public
63
+ */
64
+ isPlayerUsingPony(player) {
65
+ return (0, playerDataStructures_1.setHasPlayer)(v.run.playersIsPonyActive, player);
66
+ }
67
+ /**
68
+ * Helper function to see if any player is under the effects of A Pony or White Pony charge.
69
+ * Detecting this is difficult, as the temporary effect will disappear upon entering a new room.
70
+ *
71
+ * In order to use this function, you must upgrade your mod with `ISCFeature.PONY_DETECTION`.
72
+ *
73
+ * @public
74
+ */
75
+ anyPlayerUsingPony() {
76
+ const players = (0, playerIndex_1.getPlayers)();
77
+ return players.some((player) => this.isPlayerUsingPony(player));
78
+ }
79
+ }
80
+ exports.PonyDetection = PonyDetection;
81
+ __decorate([
82
+ decorators_1.Exported
83
+ ], PonyDetection.prototype, "isPlayerUsingPony", null);
84
+ __decorate([
85
+ decorators_1.Exported
86
+ ], PonyDetection.prototype, "anyPlayerUsingPony", null);
@@ -0,0 +1,71 @@
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.PressInput = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const decorators_1 = require("../../../decorators");
12
+ const playerIndex_1 = require("../../../functions/playerIndex");
13
+ const Feature_1 = require("../../private/Feature");
14
+ const v = {
15
+ run: {
16
+ buttonActionPairs: [],
17
+ },
18
+ };
19
+ class PressInput extends Feature_1.Feature {
20
+ /** @internal */
21
+ v = v;
22
+ /** @internal */
23
+ constructor() {
24
+ super();
25
+ this.callbacksUsed = [
26
+ // 13
27
+ [
28
+ isaac_typescript_definitions_1.ModCallback.INPUT_ACTION,
29
+ this.isActionTriggered,
30
+ [isaac_typescript_definitions_1.InputHook.IS_ACTION_TRIGGERED],
31
+ ],
32
+ ];
33
+ }
34
+ // ModCallback.INPUT_ACTION (13)
35
+ // InputHook.IS_ACTION_TRIGGERED (1)
36
+ isActionTriggered = (entity, _inputHook, buttonAction) => {
37
+ if (entity === undefined) {
38
+ return undefined;
39
+ }
40
+ const player = entity.ToPlayer();
41
+ if (player === undefined) {
42
+ return undefined;
43
+ }
44
+ const playerIndex = (0, playerIndex_1.getPlayerIndex)(player);
45
+ for (let i = v.run.buttonActionPairs.length - 1; i >= 0; i--) {
46
+ // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
47
+ const pair = v.run.buttonActionPairs[i];
48
+ if (pair.playerIndex === playerIndex &&
49
+ pair.buttonAction === buttonAction) {
50
+ v.run.buttonActionPairs.splice(i);
51
+ return true;
52
+ }
53
+ }
54
+ return undefined;
55
+ };
56
+ /**
57
+ * Helper function to press an arbitrary `ButtonAction` on the next possible input poll. In most
58
+ * cases, this will be equivalent to if the first player pressed the corresponding input. It
59
+ * usually takes 1 frame for the input to take effect.
60
+ *
61
+ * In order to use this function, you must upgrade your mod with `ISCFeature.PRESS_INPUT`.
62
+ */
63
+ pressInput(player, buttonAction) {
64
+ const playerIndex = (0, playerIndex_1.getPlayerIndex)(player);
65
+ v.run.buttonActionPairs.push({ playerIndex, buttonAction });
66
+ }
67
+ }
68
+ exports.PressInput = PressInput;
69
+ __decorate([
70
+ decorators_1.Exported
71
+ ], PressInput.prototype, "pressInput", null);
@@ -0,0 +1,60 @@
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.PreventChildEntities = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const decorators_1 = require("../../../decorators");
12
+ const Feature_1 = require("../../private/Feature");
13
+ const v = {
14
+ room: {
15
+ preventingEntities: new Set(),
16
+ },
17
+ };
18
+ class PreventChildEntities extends Feature_1.Feature {
19
+ /** @internal */
20
+ v = v;
21
+ /** @internal */
22
+ constructor() {
23
+ super();
24
+ this.callbacksUsed = [
25
+ // 27
26
+ [isaac_typescript_definitions_1.ModCallback.POST_NPC_INIT, this.postNPCInit],
27
+ ];
28
+ }
29
+ // ModCallback.POST_NPC_INIT (27)
30
+ postNPCInit = (npc) => {
31
+ const spawnerEntityMatch = npc.SpawnerEntity !== undefined &&
32
+ v.room.preventingEntities.has(GetPtrHash(npc.SpawnerEntity));
33
+ const parentMatch = npc.Parent !== undefined &&
34
+ v.room.preventingEntities.has(GetPtrHash(npc.Parent));
35
+ if (spawnerEntityMatch || parentMatch) {
36
+ npc.Remove();
37
+ }
38
+ };
39
+ /**
40
+ * Helper function to prevent an entity from spawning any other entities. Meant to be used on NPCs
41
+ * like Squirts. This behavior will only last for the current room.
42
+ *
43
+ * Under the hood, this function will remove any new NPCs spawned that have a
44
+ * `Entity.SpawnerEntity` or `Entity.Parent` value that matches the provided entity. (They are
45
+ * removed during the `POST_NPC_INIT` callback specifically.)
46
+ *
47
+ * In order to use this function, you must upgrade your mod with
48
+ * `ISCFeature.PREVENT_CHILD_ENTITIES`.
49
+ *
50
+ * @public
51
+ */
52
+ preventChildEntities(entity) {
53
+ const ptrHash = GetPtrHash(entity);
54
+ v.room.preventingEntities.add(ptrHash);
55
+ }
56
+ }
57
+ exports.PreventChildEntities = PreventChildEntities;
58
+ __decorate([
59
+ decorators_1.Exported
60
+ ], PreventChildEntities.prototype, "preventChildEntities", null);
@@ -0,0 +1,159 @@
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.PreventGridEntityRespawn = void 0;
10
+ const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
11
+ const cachedClasses_1 = require("../../../core/cachedClasses");
12
+ const decorators_1 = require("../../../decorators");
13
+ const ISCFeature_1 = require("../../../enums/ISCFeature");
14
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
15
+ const array_1 = require("../../../functions/array");
16
+ const gridEntities_1 = require("../../../functions/gridEntities");
17
+ const players_1 = require("../../../functions/players");
18
+ const roomData_1 = require("../../../functions/roomData");
19
+ const DefaultMap_1 = require("../../DefaultMap");
20
+ const Feature_1 = require("../../private/Feature");
21
+ const v = {
22
+ level: {
23
+ roomListIndexToDecorationGridIndexes: new DefaultMap_1.DefaultMap(() => []),
24
+ },
25
+ room: {
26
+ manuallyUsingShovel: false,
27
+ },
28
+ };
29
+ class PreventGridEntityRespawn extends Feature_1.Feature {
30
+ /** @internal */
31
+ v = v;
32
+ runInNFrames;
33
+ /** @internal */
34
+ constructor(runInNFrames) {
35
+ super();
36
+ this.featuresUsed = [ISCFeature_1.ISCFeature.RUN_IN_N_FRAMES];
37
+ this.callbacksUsed = [
38
+ // 23
39
+ [
40
+ isaac_typescript_definitions_1.ModCallback.PRE_USE_ITEM,
41
+ this.preUseItemWeNeedToGoDeeper,
42
+ [isaac_typescript_definitions_1.CollectibleType.WE_NEED_TO_GO_DEEPER],
43
+ ],
44
+ ];
45
+ this.customCallbacksUsed = [
46
+ [ModCallbackCustom_1.ModCallbackCustom.POST_NEW_ROOM_REORDERED, this.postNewRoomReordered],
47
+ ];
48
+ this.runInNFrames = runInNFrames;
49
+ }
50
+ // ModCallback.PRE_USE_ITEM (23)
51
+ // CollectibleType.WE_NEED_TO_GO_DEEPER (84)
52
+ preUseItemWeNeedToGoDeeper = (_collectibleType, _rng, player, _useFlags, _activeSlot, _customVarData) => {
53
+ if (v.room.manuallyUsingShovel) {
54
+ return undefined;
55
+ }
56
+ const roomListIndex = (0, roomData_1.getRoomListIndex)();
57
+ if (!v.level.roomListIndexToDecorationGridIndexes.has(roomListIndex)) {
58
+ return undefined;
59
+ }
60
+ // Since the room was filled with decorations to prevent any grid entities from respawning, if
61
+ // the player uses a shovel, it will always reveal a crawl space. In order to restore the normal
62
+ // shovel functionality, we cancel the shovel use, remove all the decorations, wait a frame,
63
+ // manually use the shovel again, and then respawn the decorations. (We can't do it all on this
64
+ // frame because updating the room causes two invocations of the shovel to happen.)
65
+ const decorations = (0, gridEntities_1.getGridEntities)(isaac_typescript_definitions_1.GridEntityType.DECORATION);
66
+ for (const decoration of decorations) {
67
+ (0, gridEntities_1.removeGridEntity)(decoration, false);
68
+ }
69
+ const entityPtr = EntityPtr(player);
70
+ this.runInNFrames.runNextGameFrame(() => {
71
+ const futurePlayer = (0, players_1.getPlayerFromPtr)(entityPtr);
72
+ if (futurePlayer === undefined) {
73
+ return;
74
+ }
75
+ const futureRoomListIndex = (0, roomData_1.getRoomListIndex)();
76
+ if (futureRoomListIndex !== roomListIndex) {
77
+ return;
78
+ }
79
+ v.room.manuallyUsingShovel = true;
80
+ futurePlayer.UseActiveItem(isaac_typescript_definitions_1.CollectibleType.WE_NEED_TO_GO_DEEPER);
81
+ v.room.manuallyUsingShovel = false;
82
+ const decorationGridIndexes = v.level.roomListIndexToDecorationGridIndexes.getAndSetDefault(roomListIndex);
83
+ (0, array_1.emptyArray)(decorationGridIndexes);
84
+ this.preventGridEntityRespawn();
85
+ });
86
+ // Cancel the original effect.
87
+ return true;
88
+ };
89
+ // ModCallbackCustom.POST_NEW_ROOM_REORDERED
90
+ postNewRoomReordered = () => {
91
+ this.setDecorationsInvisible();
92
+ };
93
+ /**
94
+ * Every time we re-enter the room, the sprites for all of the decorations will come back, so we
95
+ * have to remove them again.
96
+ */
97
+ setDecorationsInvisible() {
98
+ const room = cachedClasses_1.game.GetRoom();
99
+ const roomListIndex = (0, roomData_1.getRoomListIndex)();
100
+ const decorationGridIndexes = v.level.roomListIndexToDecorationGridIndexes.get(roomListIndex);
101
+ if (decorationGridIndexes === undefined) {
102
+ return;
103
+ }
104
+ for (const gridIndex of decorationGridIndexes) {
105
+ const gridEntity = room.GetGridEntity(gridIndex);
106
+ if (gridEntity !== undefined) {
107
+ // Other grid entities may have spawned, like trapdoors or crawl spaces. Thus, only make
108
+ // decorations invisible.
109
+ const gridEntityType = gridEntity.GetType();
110
+ if (gridEntityType === isaac_typescript_definitions_1.GridEntityType.DECORATION) {
111
+ (0, gridEntities_1.setGridEntityInvisible)(gridEntity);
112
+ }
113
+ }
114
+ }
115
+ }
116
+ /**
117
+ * Helper function to prevent any removed grid entities from respawning if the player re-enters
118
+ * the current room.
119
+ *
120
+ * This is accomplished by spawning a new grid entity on every tile that does not already have a
121
+ * grid entity. This will force the game to spawn the new grid entity instead of the old one. The
122
+ * natural grid entity to choose for this purpose is a decoration, since it is non-interacting.
123
+ * Then, the decorations are made invisible and any shovel uses are intercepted to avoid creating
124
+ * a crawl space (instead of a trapdoor).
125
+ *
126
+ * Another option besides decorations would be to use a pressure plates with a state of 1, which
127
+ * is a state that is normally unused by the game and makes it invisible & persistent. However,
128
+ * pickups will not be able to spawn on pressure plates, which lead to various bugs (e.g. pickups
129
+ * spawning on top of pits). Thus, using a decoration is preferable.
130
+ *
131
+ * Yet another option to accomplish this would be to replace the room data with that of an empty
132
+ * room. However, the room data must exactly match the room type, the room shape, and the doors,
133
+ * so this is not possible to do in a robust way without adding empty rooms to the mod's `content`
134
+ * folder to draw the data from.
135
+ *
136
+ * In order to use this function, you must upgrade your mod with
137
+ * `ISCFeature.PREVENT_GRID_ENTITY_RESPAWN`.
138
+ */
139
+ preventGridEntityRespawn() {
140
+ const room = cachedClasses_1.game.GetRoom();
141
+ const roomListIndex = (0, roomData_1.getRoomListIndex)();
142
+ const decorationGridIndexes = v.level.roomListIndexToDecorationGridIndexes.getAndSetDefault(roomListIndex);
143
+ for (const gridIndex of (0, gridEntities_1.getAllGridIndexes)()) {
144
+ const existingGridEntity = room.GetGridEntity(gridIndex);
145
+ if (existingGridEntity !== undefined) {
146
+ continue;
147
+ }
148
+ const decoration = (0, gridEntities_1.spawnGridEntity)(isaac_typescript_definitions_1.GridEntityType.DECORATION, gridIndex);
149
+ if (decoration !== undefined) {
150
+ (0, gridEntities_1.setGridEntityInvisible)(decoration);
151
+ }
152
+ decorationGridIndexes.push(gridIndex);
153
+ }
154
+ }
155
+ }
156
+ exports.PreventGridEntityRespawn = PreventGridEntityRespawn;
157
+ __decorate([
158
+ decorators_1.Exported
159
+ ], PreventGridEntityRespawn.prototype, "preventGridEntityRespawn", null);
@@ -0,0 +1,69 @@
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.RerunDetection = void 0;
10
+ const decorators_1 = require("../../../decorators");
11
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
12
+ const rooms_1 = require("../../../functions/rooms");
13
+ const stage_1 = require("../../../functions/stage");
14
+ const Feature_1 = require("../../private/Feature");
15
+ const v = {
16
+ // We cannot use a "run" object since the variables would be reset when a rerun starts.
17
+ persistent: {
18
+ pastFirstFloor: false,
19
+ onRerun: false,
20
+ },
21
+ };
22
+ class RerunDetection extends Feature_1.Feature {
23
+ /** @internal */
24
+ v = v;
25
+ /** @internal */
26
+ constructor() {
27
+ super();
28
+ this.customCallbacksUsed = [
29
+ [
30
+ ModCallbackCustom_1.ModCallbackCustom.POST_GAME_STARTED_REORDERED,
31
+ this.postGameStartedReordered,
32
+ ],
33
+ [ModCallbackCustom_1.ModCallbackCustom.POST_NEW_LEVEL_REORDERED, this.postNewLevelReordered],
34
+ ];
35
+ }
36
+ // ModCallbackCustom.POST_GAME_STARTED_REORDERED
37
+ postGameStartedReordered = (isContinued) => {
38
+ if (isContinued) {
39
+ if ((0, stage_1.onFirstFloor)() && (0, rooms_1.inStartingRoom)() && v.persistent.pastFirstFloor) {
40
+ v.persistent.onRerun = true;
41
+ }
42
+ }
43
+ else {
44
+ v.persistent.onRerun = false;
45
+ }
46
+ };
47
+ // ModCallbackCustom.POST_NEW_LEVEL_REORDERED
48
+ postNewLevelReordered = () => {
49
+ v.persistent.pastFirstFloor = !(0, stage_1.onFirstFloor)();
50
+ };
51
+ /**
52
+ * Helper function to detect if the current run was starting using the "Rerun" option from the
53
+ * main menu.
54
+ *
55
+ * Under the hood, this assumes that any run that is past the first floor and continues in the
56
+ * starting room of the run is a rerun.
57
+ *
58
+ * In order to use this function, you must upgrade your mod with `ISCFeature.RERUN_DETECTION`.
59
+ *
60
+ * @public
61
+ */
62
+ onRerun() {
63
+ return v.persistent.onRerun;
64
+ }
65
+ }
66
+ exports.RerunDetection = RerunDetection;
67
+ __decorate([
68
+ decorators_1.Exported
69
+ ], RerunDetection.prototype, "onRerun", null);
@@ -0,0 +1,94 @@
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.RoomClearFrame = void 0;
10
+ const cachedClasses_1 = require("../../../core/cachedClasses");
11
+ const decorators_1 = require("../../../decorators");
12
+ const ModCallbackCustom_1 = require("../../../enums/ModCallbackCustom");
13
+ const Feature_1 = require("../../private/Feature");
14
+ const v = {
15
+ room: {
16
+ roomClearGameFrame: undefined,
17
+ roomClearRenderFrame: undefined,
18
+ roomClearRoomFrame: undefined,
19
+ },
20
+ };
21
+ class RoomClearFrame extends Feature_1.Feature {
22
+ /** @internal */
23
+ v = v;
24
+ /** @internal */
25
+ constructor() {
26
+ super();
27
+ this.customCallbacksUsed = [
28
+ [
29
+ ModCallbackCustom_1.ModCallbackCustom.POST_ROOM_CLEAR_CHANGED,
30
+ this.postRoomClearChangedTrue,
31
+ ],
32
+ ];
33
+ }
34
+ // ModCallbackCustom.POST_ROOM_CLEAR_CHANGED
35
+ // true
36
+ postRoomClearChangedTrue = () => {
37
+ const gameFrameCount = cachedClasses_1.game.GetFrameCount();
38
+ const room = cachedClasses_1.game.GetRoom();
39
+ const roomFrameCount = room.GetFrameCount();
40
+ const renderFrameCount = Isaac.GetFrameCount();
41
+ v.room.roomClearGameFrame = gameFrameCount;
42
+ v.room.roomClearRenderFrame = renderFrameCount;
43
+ v.room.roomClearRoomFrame = roomFrameCount;
44
+ };
45
+ /**
46
+ * Helper function to get the game frame (i.e. `Game.GetFrameCount`) of the last time that this
47
+ * room was cleared. Returns undefined if the room has never been cleared.
48
+ *
49
+ * Note that if the room is left, all room clear tracking for it will be discarded.
50
+ *
51
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_CLEAR_FRAME`.
52
+ *
53
+ * @public
54
+ */
55
+ getRoomClearGameFrame() {
56
+ return v.room.roomClearGameFrame;
57
+ }
58
+ /**
59
+ * Helper function to get the render frame (i.e. `Isaac.GetFrameCount`) of the last time that this
60
+ * room was cleared. Returns undefined if the room has never been cleared.
61
+ *
62
+ * Note that if the room is left, all room clear tracking for it will be discarded.
63
+ *
64
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_CLEAR_FRAME`.
65
+ *
66
+ * @public
67
+ */
68
+ getRoomClearRenderFrame() {
69
+ return v.room.roomClearRenderFrame;
70
+ }
71
+ /**
72
+ * Helper function to get the room frame (i.e. `Room.GetFrameCount`) of the last time that this
73
+ * room was cleared. Returns undefined if the room has never been cleared.
74
+ *
75
+ * Note that if the room is left, all room clear tracking for it will be discarded.
76
+ *
77
+ * In order to use this function, you must upgrade your mod with `ISCFeature.ROOM_CLEAR_FRAME`.
78
+ *
79
+ * @public
80
+ */
81
+ getRoomClearRoomFrame() {
82
+ return v.room.roomClearRoomFrame;
83
+ }
84
+ }
85
+ exports.RoomClearFrame = RoomClearFrame;
86
+ __decorate([
87
+ decorators_1.Exported
88
+ ], RoomClearFrame.prototype, "getRoomClearGameFrame", null);
89
+ __decorate([
90
+ decorators_1.Exported
91
+ ], RoomClearFrame.prototype, "getRoomClearRenderFrame", null);
92
+ __decorate([
93
+ decorators_1.Exported
94
+ ], RoomClearFrame.prototype, "getRoomClearRoomFrame", null);