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.
- package/dist/arrays/cachedEnumValues.js +33 -0
- package/dist/callbackClasses.js +289 -0
- package/dist/callbacks.js +181 -0
- package/dist/classes/DefaultMap.js +171 -0
- package/dist/classes/ModFeature.js +244 -0
- package/dist/classes/ModUpgraded.js +324 -0
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +19 -0
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +29 -0
- package/dist/classes/callbacks/InputActionFilter.js +24 -0
- package/dist/classes/callbacks/InputActionPlayer.js +37 -0
- package/dist/classes/callbacks/PostAmbushFinished.js +40 -0
- package/dist/classes/callbacks/PostAmbushStarted.js +40 -0
- package/dist/classes/callbacks/PostBombExploded.js +24 -0
- package/dist/classes/callbacks/PostBombInitFilter.js +21 -0
- package/dist/classes/callbacks/PostBombInitLate.js +31 -0
- package/dist/classes/callbacks/PostBombRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostBombUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostBoneSwing.js +53 -0
- package/dist/classes/callbacks/PostCollectibleEmpty.js +50 -0
- package/dist/classes/callbacks/PostCursedTeleport.js +119 -0
- package/dist/classes/callbacks/PostCustomRevive.js +17 -0
- package/dist/classes/callbacks/PostDiceRoomActivated.js +50 -0
- package/dist/classes/callbacks/PostDoorRender.js +24 -0
- package/dist/classes/callbacks/PostDoorUpdate.js +24 -0
- package/dist/classes/callbacks/PostEffectInitFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectInitLate.js +31 -0
- package/dist/classes/callbacks/PostEffectRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectStateChanged.js +34 -0
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostEntityKillFilter.js +21 -0
- package/dist/classes/callbacks/PostEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarInitLate.js +31 -0
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +34 -0
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostFirstEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFirstFlip.js +12 -0
- package/dist/classes/callbacks/PostFlip.js +12 -0
- package/dist/classes/callbacks/PostGameEndFilter.js +21 -0
- package/dist/classes/callbacks/PostGameStartedReordered.js +14 -0
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +14 -0
- package/dist/classes/callbacks/PostGreedModeWave.js +35 -0
- package/dist/classes/callbacks/PostGridEntityBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCollision.js +28 -0
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +24 -0
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +18 -0
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +14 -0
- package/dist/classes/callbacks/PostGridEntityInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityRemove.js +19 -0
- package/dist/classes/callbacks/PostGridEntityRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityUpdate.js +14 -0
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +43 -0
- package/dist/classes/callbacks/PostItemDischarge.js +122 -0
- package/dist/classes/callbacks/PostItemPickup.js +14 -0
- package/dist/classes/callbacks/PostKeyboardChanged.js +46 -0
- package/dist/classes/callbacks/PostKnifeInitFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeInitLate.js +31 -0
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitLate.js +31 -0
- package/dist/classes/callbacks/PostLaserRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCDeathFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitLate.js +31 -0
- package/dist/classes/callbacks/PostNPCRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCStateChanged.js +34 -0
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNewLevelReordered.js +14 -0
- package/dist/classes/callbacks/PostNewRoomEarly.js +74 -0
- package/dist/classes/callbacks/PostNewRoomReordered.js +14 -0
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPickupChanged.js +14 -0
- package/dist/classes/callbacks/PostPickupCollect.js +38 -0
- package/dist/classes/callbacks/PostPickupInitFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupInitFirst.js +33 -0
- package/dist/classes/callbacks/PostPickupInitLate.js +31 -0
- package/dist/classes/callbacks/PostPickupRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +29 -0
- package/dist/classes/callbacks/PostPickupStateChanged.js +34 -0
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPitRender.js +24 -0
- package/dist/classes/callbacks/PostPitUpdate.js +24 -0
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +47 -0
- package/dist/classes/callbacks/PostPlayerChangeStat.js +79 -0
- package/dist/classes/callbacks/PostPlayerChangeType.js +36 -0
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +14 -0
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +14 -0
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +83 -0
- package/dist/classes/callbacks/PostPlayerInitFirst.js +41 -0
- package/dist/classes/callbacks/PostPlayerInitLate.js +33 -0
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +14 -0
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPoopRender.js +24 -0
- package/dist/classes/callbacks/PostPoopUpdate.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateRender.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +24 -0
- package/dist/classes/callbacks/PostProjectileInitFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileInitLate.js +31 -0
- package/dist/classes/callbacks/PostProjectileKill.js +52 -0
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPurchase.js +90 -0
- package/dist/classes/callbacks/PostRockRender.js +24 -0
- package/dist/classes/callbacks/PostRockUpdate.js +24 -0
- package/dist/classes/callbacks/PostRoomClearChanged.js +46 -0
- package/dist/classes/callbacks/PostSacrifice.js +36 -0
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +14 -0
- package/dist/classes/callbacks/PostSlotCollision.js +25 -0
- package/dist/classes/callbacks/PostSlotDestroyed.js +14 -0
- package/dist/classes/callbacks/PostSlotInit.js +14 -0
- package/dist/classes/callbacks/PostSlotRender.js +14 -0
- package/dist/classes/callbacks/PostSlotUpdate.js +14 -0
- package/dist/classes/callbacks/PostSpikesRender.js +24 -0
- package/dist/classes/callbacks/PostSpikesUpdate.js +24 -0
- package/dist/classes/callbacks/PostTNTRender.js +24 -0
- package/dist/classes/callbacks/PostTNTUpdate.js +24 -0
- package/dist/classes/callbacks/PostTearInitFilter.js +21 -0
- package/dist/classes/callbacks/PostTearInitLate.js +31 -0
- package/dist/classes/callbacks/PostTearInitVeryLate.js +35 -0
- package/dist/classes/callbacks/PostTearKill.js +52 -0
- package/dist/classes/callbacks/PostTearRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostTearUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostTransformation.js +47 -0
- package/dist/classes/callbacks/PostTrinketBreak.js +70 -0
- package/dist/classes/callbacks/PostUsePillFilter.js +76 -0
- package/dist/classes/callbacks/PreBerserkDeath.js +41 -0
- package/dist/classes/callbacks/PreBombCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreCustomRevive.js +14 -0
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +24 -0
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreGetPedestal.js +46 -0
- package/dist/classes/callbacks/PreItemPickup.js +14 -0
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +19 -0
- package/dist/classes/callbacks/PreNewLevel.js +51 -0
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +26 -0
- package/dist/classes/callbacks/PreTearCollisionFilter.js +19 -0
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +359 -0
- package/dist/classes/features/callbackLogic/CustomRevive.js +170 -0
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +70 -0
- package/dist/classes/features/callbackLogic/FlipDetection.js +61 -0
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +220 -0
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +62 -0
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +35 -0
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +147 -0
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +68 -0
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +43 -0
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +193 -0
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +109 -0
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +95 -0
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +48 -0
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +52 -0
- package/dist/classes/features/other/CharacterHealthConversion.js +112 -0
- package/dist/classes/features/other/CharacterStats.js +68 -0
- package/dist/classes/features/other/CollectibleItemPoolType.js +75 -0
- package/dist/classes/features/other/CustomHotkeys.js +144 -0
- package/dist/classes/features/other/CustomItemPools.js +128 -0
- package/dist/classes/features/other/CustomPickups.js +118 -0
- package/dist/classes/features/other/CustomStages.js +471 -0
- package/dist/classes/features/other/CustomTrapdoors.js +596 -0
- package/dist/classes/features/other/DebugDisplay.js +699 -0
- package/dist/classes/features/other/DeployJSONRoom.js +301 -0
- package/dist/classes/features/other/DisableAllSound.js +90 -0
- package/dist/classes/features/other/DisableInputs.js +249 -0
- package/dist/classes/features/other/EdenStartingStatsHealth.js +197 -0
- package/dist/classes/features/other/ExtraConsoleCommands.js +292 -0
- package/dist/classes/features/other/FadeInRemover.js +67 -0
- package/dist/classes/features/other/FastReset.js +88 -0
- package/dist/classes/features/other/FlyingDetection.js +64 -0
- package/dist/classes/features/other/ForgottenSwitch.js +43 -0
- package/dist/classes/features/other/ItemPoolDetection.js +187 -0
- package/dist/classes/features/other/ModdedElementDetection.js +399 -0
- package/dist/classes/features/other/ModdedElementSets.js +1251 -0
- package/dist/classes/features/other/NoSirenSteal.js +88 -0
- package/dist/classes/features/other/Pause.js +197 -0
- package/dist/classes/features/other/PersistentEntities.js +168 -0
- package/dist/classes/features/other/PickupIndexCreation.js +229 -0
- package/dist/classes/features/other/PlayerCollectibleTracking.js +102 -0
- package/dist/classes/features/other/PonyDetection.js +86 -0
- package/dist/classes/features/other/PressInput.js +71 -0
- package/dist/classes/features/other/PreventChildEntities.js +60 -0
- package/dist/classes/features/other/PreventGridEntityRespawn.js +159 -0
- package/dist/classes/features/other/RerunDetection.js +69 -0
- package/dist/classes/features/other/RoomClearFrame.js +94 -0
- package/dist/classes/features/other/RoomHistory.js +196 -0
- package/dist/classes/features/other/RunInNFrames.js +323 -0
- package/dist/classes/features/other/RunNextRoom.js +53 -0
- package/dist/classes/features/other/RunNextRun.js +60 -0
- package/dist/classes/features/other/SaveDataManager.js +383 -0
- package/dist/classes/features/other/SpawnRockAltRewards.js +469 -0
- package/dist/classes/features/other/StageHistory.js +244 -0
- package/dist/classes/features/other/StartAmbush.js +62 -0
- package/dist/classes/features/other/TaintedLazarusPlayers.js +115 -0
- package/dist/classes/features/other/UnlockAchievementsDetection.js +60 -0
- package/dist/classes/features/other/customStages/backdrop.js +195 -0
- package/dist/classes/features/other/customStages/constants.js +19 -0
- package/dist/classes/features/other/customStages/gridEntities.js +177 -0
- package/dist/classes/features/other/customStages/shadows.js +67 -0
- package/dist/classes/features/other/customStages/streakText.js +222 -0
- package/dist/classes/features/other/customStages/utils.js +65 -0
- package/dist/classes/features/other/customStages/v.js +27 -0
- package/dist/classes/features/other/customStages/versusScreen.js +227 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +23 -0
- package/dist/classes/features/other/debugDisplay/utils.js +13 -0
- package/dist/classes/features/other/extraConsoleCommands/commands.js +1598 -0
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +135 -0
- package/dist/classes/features/other/extraConsoleCommands/v.js +30 -0
- package/dist/classes/features/other/saveDataManager/constants.js +4 -0
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +106 -0
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +69 -0
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +69 -0
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +46 -0
- package/dist/classes/private/CustomCallback.js +59 -0
- package/dist/classes/private/Feature.js +39 -0
- package/dist/core/cachedClasses.js +61 -0
- package/dist/core/constants.js +289 -0
- package/dist/core/constantsFirstLast.js +98 -0
- package/dist/core/constantsVanilla.js +131 -0
- package/dist/core/upgradeMod.js +71 -0
- package/dist/customStageMetadata.json +1 -0
- package/dist/data/itempools.json +16625 -0
- package/dist/decorators.js +21 -0
- package/dist/enums/AmbushType.js +9 -0
- package/dist/enums/CornerType.js +11 -0
- package/dist/enums/HealthType.js +20 -0
- package/dist/enums/ISCFeature.js +65 -0
- package/dist/enums/LadderSubTypeCustom.js +20 -0
- package/dist/enums/ModCallbackCustom.js +2477 -0
- package/dist/enums/MysteriousPaperEffect.js +16 -0
- package/dist/enums/PlayerStat.js +37 -0
- package/dist/enums/PocketItemType.js +13 -0
- package/dist/enums/RockAltType.js +23 -0
- package/dist/enums/SaveDataKey.js +14 -0
- package/dist/enums/SerializationType.js +10 -0
- package/dist/enums/SlotDestructionType.js +22 -0
- package/dist/enums/private/GridEntityTypeCustom.js +10 -0
- package/dist/enums/private/SerializationBrand.js +42 -0
- package/dist/enums/private/StageTravelState.js +13 -0
- package/dist/enums/private/TrapdoorAnimation.js +9 -0
- package/dist/enums/private/UIStreakAnimation.js +10 -0
- package/dist/features.js +150 -0
- package/dist/functions/ambush.js +26 -0
- package/dist/functions/array.js +586 -0
- package/dist/functions/arrayLua.js +81 -0
- package/dist/functions/benchmark.js +36 -0
- package/dist/functions/bitSet128.js +64 -0
- package/dist/functions/bitwise.js +82 -0
- package/dist/functions/bombs.js +14 -0
- package/dist/functions/bosses.js +238 -0
- package/dist/functions/cards.js +164 -0
- package/dist/functions/challenges.js +117 -0
- package/dist/functions/characters.js +182 -0
- package/dist/functions/charge.js +251 -0
- package/dist/functions/chargeBar.js +54 -0
- package/dist/functions/collectibleTag.js +24 -0
- package/dist/functions/collectibles.js +581 -0
- package/dist/functions/color.js +88 -0
- package/dist/functions/console.js +18 -0
- package/dist/functions/curses.js +37 -0
- package/dist/functions/debugFunctions.js +108 -0
- package/dist/functions/decorators.js +113 -0
- package/dist/functions/deepCopy.js +406 -0
- package/dist/functions/deepCopyTests.js +361 -0
- package/dist/functions/dimensions.js +30 -0
- package/dist/functions/direction.js +78 -0
- package/dist/functions/doors.js +524 -0
- package/dist/functions/easing.js +327 -0
- package/dist/functions/effects.js +14 -0
- package/dist/functions/emptyRoom.js +79 -0
- package/dist/functions/entities.js +529 -0
- package/dist/functions/entitiesSpecific.js +582 -0
- package/dist/functions/entityTypes.js +9 -0
- package/dist/functions/enums.js +244 -0
- package/dist/functions/external.js +59 -0
- package/dist/functions/familiars.js +136 -0
- package/dist/functions/flag.js +146 -0
- package/dist/functions/frames.js +166 -0
- package/dist/functions/globals.js +291 -0
- package/dist/functions/gridEntities.js +990 -0
- package/dist/functions/gridEntitiesSpecific.js +456 -0
- package/dist/functions/gridIndex.js +35 -0
- package/dist/functions/hash.js +75 -0
- package/dist/functions/hex.js +57 -0
- package/dist/functions/input.js +185 -0
- package/dist/functions/isaacAPIClass.js +157 -0
- package/dist/functions/itemPool.js +118 -0
- package/dist/functions/jsonHelpers.js +73 -0
- package/dist/functions/jsonRoom.js +184 -0
- package/dist/functions/kColor.js +89 -0
- package/dist/functions/language.js +16 -0
- package/dist/functions/level.js +66 -0
- package/dist/functions/levelGrid.js +497 -0
- package/dist/functions/log.js +86 -0
- package/dist/functions/logEntities.js +308 -0
- package/dist/functions/logMisc.js +510 -0
- package/dist/functions/map.js +121 -0
- package/dist/functions/math.js +149 -0
- package/dist/functions/merge.js +159 -0
- package/dist/functions/mergeTests.js +313 -0
- package/dist/functions/minimap.js +204 -0
- package/dist/functions/modFeatures.js +39 -0
- package/dist/functions/newArray.js +30 -0
- package/dist/functions/nextStage.js +169 -0
- package/dist/functions/npcDataStructures.js +146 -0
- package/dist/functions/npcs.js +132 -0
- package/dist/functions/pickupVariants.js +63 -0
- package/dist/functions/pickups.js +168 -0
- package/dist/functions/pickupsSpecific.js +376 -0
- package/dist/functions/pills.js +200 -0
- package/dist/functions/playerCenter.js +53 -0
- package/dist/functions/playerCollectibles.js +300 -0
- package/dist/functions/playerDataStructures.js +145 -0
- package/dist/functions/playerEffects.js +63 -0
- package/dist/functions/playerHealth.js +604 -0
- package/dist/functions/playerIndex.js +186 -0
- package/dist/functions/playerTrinkets.js +149 -0
- package/dist/functions/players.js +471 -0
- package/dist/functions/pocketItems.js +165 -0
- package/dist/functions/positionVelocity.js +158 -0
- package/dist/functions/pressurePlate.js +26 -0
- package/dist/functions/projectiles.js +57 -0
- package/dist/functions/random.js +90 -0
- package/dist/functions/readOnly.js +33 -0
- package/dist/functions/render.js +36 -0
- package/dist/functions/revive.js +151 -0
- package/dist/functions/rng.js +140 -0
- package/dist/functions/rockAlt.js +50 -0
- package/dist/functions/roomData.js +155 -0
- package/dist/functions/roomGrid.js +97 -0
- package/dist/functions/roomShape.js +143 -0
- package/dist/functions/roomShapeWalls.js +187 -0
- package/dist/functions/roomTransition.js +43 -0
- package/dist/functions/rooms.js +782 -0
- package/dist/functions/run.js +121 -0
- package/dist/functions/seeds.js +22 -0
- package/dist/functions/serialization.js +98 -0
- package/dist/functions/set.js +215 -0
- package/dist/functions/slots.js +41 -0
- package/dist/functions/sort.js +158 -0
- package/dist/functions/sound.js +45 -0
- package/dist/functions/spawnCollectible.js +112 -0
- package/dist/functions/sprites.js +130 -0
- package/dist/functions/stage.js +540 -0
- package/dist/functions/stats.js +104 -0
- package/dist/functions/storyBosses.js +63 -0
- package/dist/functions/string.js +194 -0
- package/dist/functions/table.js +162 -0
- package/dist/functions/tears.js +128 -0
- package/dist/functions/transformations.js +89 -0
- package/dist/functions/trinketGive.js +145 -0
- package/dist/functions/trinkets.js +213 -0
- package/dist/functions/tstlClass.js +97 -0
- package/dist/functions/types.js +225 -0
- package/dist/functions/ui.js +148 -0
- package/dist/functions/utils.d.ts +4 -1
- package/dist/functions/utils.d.ts.map +1 -1
- package/dist/functions/utils.js +195 -0
- package/dist/functions/utils.lua +6 -2
- package/dist/functions/vector.js +150 -0
- package/dist/functions/versusScreen.js +58 -0
- package/dist/functions/weighted.js +57 -0
- package/dist/index.js +219 -0
- package/dist/index.rollup.d.ts +4 -1
- package/dist/indexLua.js +220 -0
- package/dist/interfaces/ChargeBarSprites.js +2 -0
- package/dist/interfaces/Corner.js +2 -0
- package/dist/interfaces/CustomStageTSConfig.js +2 -0
- package/dist/interfaces/GridEntityCustomData.js +2 -0
- package/dist/interfaces/JSONRoomsFile.js +2 -0
- package/dist/interfaces/PlayerHealth.js +2 -0
- package/dist/interfaces/PlayerStats.js +4 -0
- package/dist/interfaces/PocketItemDescription.js +2 -0
- package/dist/interfaces/RoomDescription.js +2 -0
- package/dist/interfaces/SaveData.js +98 -0
- package/dist/interfaces/StageHistoryEntry.js +2 -0
- package/dist/interfaces/TSTLClassMetatable.js +2 -0
- package/dist/interfaces/TrinketSituation.js +2 -0
- package/dist/interfaces/private/AddCallbackParametersCustom.js +4 -0
- package/dist/interfaces/private/CustomStage.js +2 -0
- package/dist/interfaces/private/CustomTrapdoorDescription.js +2 -0
- package/dist/interfaces/private/ModUpgradedInterface.js +2 -0
- package/dist/isaacscript-common.lua +7 -3
- package/dist/maps/PHDPillConversionsMap.js +23 -0
- package/dist/maps/cardNameToTypeMap.js +211 -0
- package/dist/maps/characterNameToTypeMap.js +91 -0
- package/dist/maps/collectibleNameToTypeMap.js +19 -0
- package/dist/maps/defaultPlayerStatMap.js +17 -0
- package/dist/maps/entityTypeVariantToBossIDMap.js +11 -0
- package/dist/maps/falsePHDPillConversionsMap.js +37 -0
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +32 -0
- package/dist/maps/gridEntityXMLMap.js +133 -0
- package/dist/maps/itemPoolTypeToItemPoolName.js +38 -0
- package/dist/maps/keyboardToStringMap.js +71 -0
- package/dist/maps/pillNameToEffectMap.js +91 -0
- package/dist/maps/roomNameToTypeMap.js +43 -0
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +17 -0
- package/dist/maps/transformationNameToPlayerFormMap.js +35 -0
- package/dist/maps/trinketNameToTypeMap.js +19 -0
- package/dist/objects/LRoomShapeToRectangles.js +43 -0
- package/dist/objects/backdropTypeToRockAltType.js +68 -0
- package/dist/objects/batteryNames.js +13 -0
- package/dist/objects/bombNames.js +17 -0
- package/dist/objects/bossIDToEntityTypeVariant.js +228 -0
- package/dist/objects/bossNamePNGFileNames.js +120 -0
- package/dist/objects/bossNames.js +119 -0
- package/dist/objects/bossPortraitPNGFileNames.js +123 -0
- package/dist/objects/cardDescriptions.js +106 -0
- package/dist/objects/cardNames.js +106 -0
- package/dist/objects/challengeBosses.js +60 -0
- package/dist/objects/challengeCharacters.js +58 -0
- package/dist/objects/challengeCollectibleTypes.js +255 -0
- package/dist/objects/challengeNames.js +54 -0
- package/dist/objects/challengeTrinketType.js +58 -0
- package/dist/objects/characterDamageMultipliers.js +49 -0
- package/dist/objects/characterNames.js +48 -0
- package/dist/objects/characterSpritePNGFileNames.js +50 -0
- package/dist/objects/characterStartingCollectibleTypes.js +105 -0
- package/dist/objects/characterStartingTrinketTypes.js +90 -0
- package/dist/objects/chestNames.js +20 -0
- package/dist/objects/coinNames.js +16 -0
- package/dist/objects/coinSubTypeToValue.js +15 -0
- package/dist/objects/collectibleDescriptions.js +742 -0
- package/dist/objects/collectibleNames.js +745 -0
- package/dist/objects/colors.js +26 -0
- package/dist/objects/directionNames.js +11 -0
- package/dist/objects/directionToDegrees.js +11 -0
- package/dist/objects/directionToMoveAction.js +11 -0
- package/dist/objects/directionToShootAction.js +11 -0
- package/dist/objects/directionToVector.js +13 -0
- package/dist/objects/doorSlotFlagToDoorSlot.js +15 -0
- package/dist/objects/doorSlotToDirection.js +15 -0
- package/dist/objects/doorSlotToDoorSlotFlag.js +15 -0
- package/dist/objects/gridEntityTypeToANM2Name.js +37 -0
- package/dist/objects/heartNames.js +21 -0
- package/dist/objects/isaacAPIClassTypeToBrand.js +12 -0
- package/dist/objects/isaacAPIClassTypeToFunctions.js +46 -0
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +57 -0
- package/dist/objects/kColors.js +27 -0
- package/dist/objects/keyNames.js +13 -0
- package/dist/objects/languageNames.js +13 -0
- package/dist/objects/oppositeDoorSlots.js +15 -0
- package/dist/objects/pillEffectClasses.js +57 -0
- package/dist/objects/pillEffectNames.js +57 -0
- package/dist/objects/pillEffectTypeToPillEffects.js +23 -0
- package/dist/objects/pillEffectTypes.js +57 -0
- package/dist/objects/playerNamePNGFileNames.js +57 -0
- package/dist/objects/playerPortraitPNGFileNames.js +54 -0
- package/dist/objects/roomShapeBounds.js +48 -0
- package/dist/objects/roomShapeCorners.js +330 -0
- package/dist/objects/roomShapeLayoutSizes.js +41 -0
- package/dist/objects/roomShapeToBottomRightPosition.js +25 -0
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +111 -0
- package/dist/objects/roomShapeToDoorSlots.js +72 -0
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +118 -0
- package/dist/objects/roomShapeToGridWidth.js +20 -0
- package/dist/objects/roomShapeToTopLeftPosition.js +26 -0
- package/dist/objects/roomShapeVolumes.js +32 -0
- package/dist/objects/roomTypeNames.js +35 -0
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +35 -0
- package/dist/objects/sackNames.js +11 -0
- package/dist/objects/slotNames.js +26 -0
- package/dist/objects/stageIDNames.js +43 -0
- package/dist/objects/stageToMusic.js +91 -0
- package/dist/objects/stageToStageID.js +117 -0
- package/dist/objects/stageTypeSuffixes.js +14 -0
- package/dist/objects/transformationNames.js +20 -0
- package/dist/objects/trinketDescriptions.js +199 -0
- package/dist/objects/trinketNames.js +202 -0
- package/dist/objects/versusScreenBackgroundColors.js +46 -0
- package/dist/objects/versusScreenDirtSpotColors.js +46 -0
- package/dist/patchErrorFunctions.js +65 -0
- package/dist/serialization.js +21 -0
- package/dist/sets/LRoomShapesSet.js +11 -0
- package/dist/sets/bigRoomShapesSet.js +14 -0
- package/dist/sets/bossSets.js +465 -0
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +18 -0
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +9 -0
- package/dist/sets/charactersWithFreeDevilDealsSet.js +6 -0
- package/dist/sets/charactersWithNoRedHeartsSet.js +19 -0
- package/dist/sets/charactersWithNoSoulHeartsSet.js +16 -0
- package/dist/sets/consoleCommandsSet.js +64 -0
- package/dist/sets/entitiesWithArmorSet.js +59 -0
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +15 -0
- package/dist/sets/itemConfigCardTypesForCards.js +14 -0
- package/dist/sets/lostStyleCharactersSet.js +16 -0
- package/dist/sets/mineShaftRoomSubTypesSet.js +12 -0
- package/dist/sets/narrowRoomShapesSet.js +11 -0
- package/dist/sets/poopGridEntityXMLTypesSet.js +16 -0
- package/dist/sets/redHeartSubTypesSet.js +10 -0
- package/dist/sets/repentanceBossIDsSet.js +30 -0
- package/dist/sets/sinEntityTypesSet.js +14 -0
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +15 -0
- package/dist/shaderCrashFix.js +24 -0
- package/dist/shouldFire.js +226 -0
- package/dist/types/AddSubtract.js +2 -0
- package/dist/types/AllButFirst.js +2 -0
- package/dist/types/AllButLast.js +2 -0
- package/dist/types/AnyClass.js +2 -0
- package/dist/types/AnyEntity.js +2 -0
- package/dist/types/AnyFunction.js +2 -0
- package/dist/types/AnyGridEntity.js +2 -0
- package/dist/types/CompositionTypeSatisfiesEnum.js +11 -0
- package/dist/types/ConversionHeartSubType.js +2 -0
- package/dist/types/Decrement.js +2 -0
- package/dist/types/ERange.js +2 -0
- package/dist/types/EntityID.js +2 -0
- package/dist/types/FunctionTuple.js +2 -0
- package/dist/types/GridEntityID.js +2 -0
- package/dist/types/HasFunction.js +2 -0
- package/dist/types/IRange.js +2 -0
- package/dist/types/Immutable.js +2 -0
- package/dist/types/Increment.js +2 -0
- package/dist/types/LowercaseKeys.js +2 -0
- package/dist/types/NaturalNumbersLessThan.js +2 -0
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +2 -0
- package/dist/types/PickingUpItem.js +44 -0
- package/dist/types/PickupIndex.js +2 -0
- package/dist/types/PlayerIndex.js +2 -0
- package/dist/types/PossibleStatType.js +2 -0
- package/dist/types/PublicInterface.js +2 -0
- package/dist/types/ReadonlyMap.js +6 -0
- package/dist/types/ReadonlyRecord.js +2 -0
- package/dist/types/ReadonlySet.js +6 -0
- package/dist/types/StartsWithLowercase.js +2 -0
- package/dist/types/StartsWithUppercase.js +2 -0
- package/dist/types/TSTLClass.js +2 -0
- package/dist/types/Tuple.js +2 -0
- package/dist/types/TupleKeys.js +2 -0
- package/dist/types/TupleToIntersection.js +2 -0
- package/dist/types/TupleToUnion.js +2 -0
- package/dist/types/TupleWithLengthBetween.js +22 -0
- package/dist/types/TupleWithMaxLength.js +27 -0
- package/dist/types/UnionToIntersection.js +2 -0
- package/dist/types/UppercaseKeys.js +2 -0
- package/dist/types/WeightedArray.js +2 -0
- package/dist/types/WidenLiteral.js +2 -0
- package/dist/types/Writable.js +2 -0
- package/dist/types/private/CallbackTuple.js +2 -0
- package/dist/types/private/ModUpgradedWithFeatures.js +2 -0
- package/package.json +1 -1
- 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);
|