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,158 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.setEntityVelocities = exports.setEntityPositions = exports.getEntityVelocities = exports.getEntityPositions = exports.findFreePosition = exports.anyPlayerCloserThan = exports.anyEntityCloserThan = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const cachedClasses_1 = require("../core/cachedClasses");
|
|
6
|
+
const constants_1 = require("../core/constants");
|
|
7
|
+
const entities_1 = require("./entities");
|
|
8
|
+
const entitiesSpecific_1 = require("./entitiesSpecific");
|
|
9
|
+
const playerIndex_1 = require("./playerIndex");
|
|
10
|
+
const players_1 = require("./players");
|
|
11
|
+
const MAX_FIND_FREE_POSITION_ATTEMPTS = 100;
|
|
12
|
+
function anyEntityCloserThan(entities, position, distance) {
|
|
13
|
+
return entities.some((entity) => position.Distance(entity.Position) <= distance);
|
|
14
|
+
}
|
|
15
|
+
exports.anyEntityCloserThan = anyEntityCloserThan;
|
|
16
|
+
/**
|
|
17
|
+
* Iterates over all players and checks if any player is close enough to the specified position.
|
|
18
|
+
*
|
|
19
|
+
* Note that this function does not consider players with a non-undefined parent, since they are not
|
|
20
|
+
* real players (e.g. the Strawman Keeper).
|
|
21
|
+
*/
|
|
22
|
+
function anyPlayerCloserThan(position, distance) {
|
|
23
|
+
const players = (0, playerIndex_1.getPlayers)();
|
|
24
|
+
return players.some((player) => player.Position.Distance(position) <= distance);
|
|
25
|
+
}
|
|
26
|
+
exports.anyPlayerCloserThan = anyPlayerCloserThan;
|
|
27
|
+
/**
|
|
28
|
+
* Helper function to get a room position that is not overlapping with a grid entity, a heaven door,
|
|
29
|
+
* or a player. The `Room.FindFreePickupSpawnPosition` method will return locations that overlap
|
|
30
|
+
* with heaven doors and partially overlap with players, if the thing being spawned is bigger than a
|
|
31
|
+
* tile (like a Blood Donation Machine). Use this function instead if you want to account for those
|
|
32
|
+
* specific situations.
|
|
33
|
+
*
|
|
34
|
+
* @param startingPosition The position to start searching from. If this position is not overlapping
|
|
35
|
+
* with anything, then it will be returned.
|
|
36
|
+
* @param avoidActiveEntities Optional. Default is false.
|
|
37
|
+
* @param minimumDistance Optional. If specified, will ensure that the randomly generated position
|
|
38
|
+
* is equal to or greater than the distance provided.
|
|
39
|
+
*/
|
|
40
|
+
function findFreePosition(startingPosition, avoidActiveEntities = false, minimumDistance) {
|
|
41
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
42
|
+
const heavenDoors = (0, entitiesSpecific_1.getEffects)(isaac_typescript_definitions_1.EffectVariant.HEAVEN_LIGHT_DOOR, isaac_typescript_definitions_1.HeavenLightDoorSubType.HEAVEN_DOOR);
|
|
43
|
+
for (let initialStep = 0; initialStep < MAX_FIND_FREE_POSITION_ATTEMPTS; initialStep++) {
|
|
44
|
+
const position = room.FindFreePickupSpawnPosition(startingPosition, initialStep, avoidActiveEntities);
|
|
45
|
+
const closePlayer = (0, players_1.getPlayerCloserThan)(position, constants_1.DISTANCE_OF_GRID_TILE);
|
|
46
|
+
if (closePlayer !== undefined) {
|
|
47
|
+
continue;
|
|
48
|
+
}
|
|
49
|
+
const isCloseHeavenDoor = anyEntityCloserThan(heavenDoors, position, constants_1.DISTANCE_OF_GRID_TILE);
|
|
50
|
+
if (isCloseHeavenDoor) {
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (minimumDistance !== undefined) {
|
|
54
|
+
const distance = startingPosition.Distance(position);
|
|
55
|
+
if (distance < minimumDistance) {
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
return position;
|
|
60
|
+
}
|
|
61
|
+
// We failed to find a free position in N iterations.
|
|
62
|
+
return room.FindFreePickupSpawnPosition(startingPosition);
|
|
63
|
+
}
|
|
64
|
+
exports.findFreePosition = findFreePosition;
|
|
65
|
+
/**
|
|
66
|
+
* Helper function to get a map containing the positions of every entity in the current room.
|
|
67
|
+
*
|
|
68
|
+
* This is useful for rewinding entity positions at a later time. Also see `setEntityPositions`.
|
|
69
|
+
*
|
|
70
|
+
* @param entities Optional. If provided, will only get the positions of the provided entities. Use
|
|
71
|
+
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
72
|
+
* multiple times.
|
|
73
|
+
*/
|
|
74
|
+
function getEntityPositions(entities) {
|
|
75
|
+
if (entities === undefined) {
|
|
76
|
+
entities = (0, entities_1.getEntities)();
|
|
77
|
+
}
|
|
78
|
+
const entityPositions = new Map();
|
|
79
|
+
for (const entity of entities) {
|
|
80
|
+
const ptrHash = GetPtrHash(entity);
|
|
81
|
+
entityPositions.set(ptrHash, entity.Position);
|
|
82
|
+
}
|
|
83
|
+
return entityPositions;
|
|
84
|
+
}
|
|
85
|
+
exports.getEntityPositions = getEntityPositions;
|
|
86
|
+
/**
|
|
87
|
+
* Helper function to get a map containing the velocities of every entity in the current room.
|
|
88
|
+
*
|
|
89
|
+
* This is useful for rewinding entity velocities at a later time. Also see `setEntityVelocities`.
|
|
90
|
+
*
|
|
91
|
+
* @param entities Optional. If provided, will only get the velocities of the provided entities. Use
|
|
92
|
+
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
93
|
+
* multiple times.
|
|
94
|
+
*/
|
|
95
|
+
function getEntityVelocities(entities) {
|
|
96
|
+
if (entities === undefined) {
|
|
97
|
+
entities = (0, entities_1.getEntities)();
|
|
98
|
+
}
|
|
99
|
+
const entityVelocities = new Map();
|
|
100
|
+
for (const entity of entities) {
|
|
101
|
+
const ptrHash = GetPtrHash(entity);
|
|
102
|
+
entityVelocities.set(ptrHash, entity.Velocity);
|
|
103
|
+
}
|
|
104
|
+
return entityVelocities;
|
|
105
|
+
}
|
|
106
|
+
exports.getEntityVelocities = getEntityVelocities;
|
|
107
|
+
/**
|
|
108
|
+
* Helper function to set the position of every entity in the room based on a map of positions. If
|
|
109
|
+
* an entity is found that does not have matching element in the provided map, then that entity will
|
|
110
|
+
* be skipped.
|
|
111
|
+
*
|
|
112
|
+
* This function is useful for rewinding entity positions at a later time. Also see
|
|
113
|
+
* `getEntityPositions`.
|
|
114
|
+
*
|
|
115
|
+
* @param entityPositions The map providing the positions for every entity.
|
|
116
|
+
* @param entities Optional. If provided, will only set the positions of the provided entities. Use
|
|
117
|
+
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
118
|
+
* multiple times.
|
|
119
|
+
*/
|
|
120
|
+
function setEntityPositions(entityPositions, entities) {
|
|
121
|
+
if (entities === undefined) {
|
|
122
|
+
entities = (0, entities_1.getEntities)();
|
|
123
|
+
}
|
|
124
|
+
for (const entity of entities) {
|
|
125
|
+
const ptrHash = GetPtrHash(entity);
|
|
126
|
+
const entityPosition = entityPositions.get(ptrHash);
|
|
127
|
+
if (entityPosition !== undefined) {
|
|
128
|
+
entity.Position = entityPosition;
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
exports.setEntityPositions = setEntityPositions;
|
|
133
|
+
/**
|
|
134
|
+
* Helper function to set the velocity of every entity in the room based on a map of velocities. If
|
|
135
|
+
* an entity is found that does not have matching element in the provided map, then that entity will
|
|
136
|
+
* be skipped.
|
|
137
|
+
*
|
|
138
|
+
* This function is useful for rewinding entity velocities at a later time. Also see
|
|
139
|
+
* `getEntityVelocities`.
|
|
140
|
+
*
|
|
141
|
+
* @param entityVelocities The map providing the velocities for every entity.
|
|
142
|
+
* @param entities Optional. If provided, will only set the velocities of the provided entities. Use
|
|
143
|
+
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
144
|
+
* multiple times.
|
|
145
|
+
*/
|
|
146
|
+
function setEntityVelocities(entityVelocities, entities) {
|
|
147
|
+
if (entities === undefined) {
|
|
148
|
+
entities = (0, entities_1.getEntities)();
|
|
149
|
+
}
|
|
150
|
+
for (const entity of entities) {
|
|
151
|
+
const ptrHash = GetPtrHash(entity);
|
|
152
|
+
const entityVelocity = entityVelocities.get(ptrHash);
|
|
153
|
+
if (entityVelocity !== undefined) {
|
|
154
|
+
entity.Velocity = entityVelocity;
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
exports.setEntityVelocities = setEntityVelocities;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isAllPressurePlatesPushed = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const cachedClasses_1 = require("../core/cachedClasses");
|
|
6
|
+
const gridEntitiesSpecific_1 = require("./gridEntitiesSpecific");
|
|
7
|
+
/**
|
|
8
|
+
* Helper function to check if all of the pressure plates in the room are pushed.
|
|
9
|
+
*
|
|
10
|
+
* In this context, "pressure plates" refers to the grid entities that you have to press down in
|
|
11
|
+
* order for the room to be cleared. This function ignores other types of pressure plates, such as
|
|
12
|
+
* the ones that you press to get a reward, the ones that you press to start a Greed Mode wave, and
|
|
13
|
+
* so on.
|
|
14
|
+
*
|
|
15
|
+
* Returns true if there are no pressure plates in the room.
|
|
16
|
+
*/
|
|
17
|
+
function isAllPressurePlatesPushed() {
|
|
18
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
19
|
+
const hasPressurePlates = room.HasTriggerPressurePlates();
|
|
20
|
+
if (!hasPressurePlates) {
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
const pressurePlates = (0, gridEntitiesSpecific_1.getPressurePlates)(isaac_typescript_definitions_1.PressurePlateVariant.PRESSURE_PLATE);
|
|
24
|
+
return pressurePlates.every((pressurePlate) => pressurePlate.State === isaac_typescript_definitions_1.PressurePlateState.PRESSURE_PLATE_PRESSED);
|
|
25
|
+
}
|
|
26
|
+
exports.isAllPressurePlatesPushed = isAllPressurePlatesPushed;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.fireProjectilesInCircle = exports.fireProjectiles = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const entities_1 = require("./entities");
|
|
6
|
+
const entitiesSpecific_1 = require("./entitiesSpecific");
|
|
7
|
+
/**
|
|
8
|
+
* Helper function to make an NPC fire one or more projectiles. Returns the fired projectile(s).
|
|
9
|
+
*
|
|
10
|
+
* Use this function instead of the `EntityNPC.FireProjectiles` method if you need to modify or
|
|
11
|
+
* access the `EntityProjectile` objects after they are fired, since this function returns the
|
|
12
|
+
* objects in an array.
|
|
13
|
+
*
|
|
14
|
+
* @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
|
|
15
|
+
* the projectile(s) to come from anything in particular.
|
|
16
|
+
* @param position The staring position of the projectile(s).
|
|
17
|
+
* @param velocity The starting velocity of the projectile(s).
|
|
18
|
+
* @param projectilesMode Optional. The mode of the projectile(s). Default is
|
|
19
|
+
* `ProjectilesMode.ONE_PROJECTILE`.
|
|
20
|
+
* @param projectileParams Optional. The parameters of the projectile(s). Default is
|
|
21
|
+
* `ProjectileParams()`.
|
|
22
|
+
* @returns The fired projectile(s).
|
|
23
|
+
*/
|
|
24
|
+
function fireProjectiles(npc, position, velocity, projectilesMode = isaac_typescript_definitions_1.ProjectilesMode.ONE_PROJECTILE, projectileParams = ProjectileParams()) {
|
|
25
|
+
const oldProjectiles = (0, entitiesSpecific_1.getProjectiles)(projectileParams.Variant);
|
|
26
|
+
let spawnedFly = false;
|
|
27
|
+
if (npc === undefined) {
|
|
28
|
+
// Since the `EntityNPC.FireProjectiles` method is not static, we arbitrarily spawn a fly.
|
|
29
|
+
spawnedFly = true;
|
|
30
|
+
npc = (0, entitiesSpecific_1.spawnNPC)(isaac_typescript_definitions_1.EntityType.FLY, 0, 0, position);
|
|
31
|
+
npc.Visible = false;
|
|
32
|
+
npc.ClearEntityFlags(isaac_typescript_definitions_1.EntityFlag.APPEAR);
|
|
33
|
+
}
|
|
34
|
+
npc.FireProjectiles(position, velocity, projectilesMode, projectileParams);
|
|
35
|
+
const newProjectiles = (0, entitiesSpecific_1.getProjectiles)(projectileParams.Variant);
|
|
36
|
+
if (spawnedFly) {
|
|
37
|
+
npc.Remove();
|
|
38
|
+
}
|
|
39
|
+
return (0, entities_1.getFilteredNewEntities)(oldProjectiles, newProjectiles);
|
|
40
|
+
}
|
|
41
|
+
exports.fireProjectiles = fireProjectiles;
|
|
42
|
+
/**
|
|
43
|
+
* Helper function to spawn projectiles in a circle around a position. Under the hood, this
|
|
44
|
+
* leverages `ProjectileMode.N_PROJECTILES_IN_CIRCLE`.
|
|
45
|
+
*
|
|
46
|
+
* @param npc The NPC to fire the projectile(s) from. You can also pass undefined if you do not want
|
|
47
|
+
* the projectile(s) to come from anything in particular.
|
|
48
|
+
* @param position The staring position of the projectile(s).
|
|
49
|
+
* @param speed The speed of the projectile(s).
|
|
50
|
+
* @param numProjectiles The amount of projectiles to spawn.
|
|
51
|
+
* @returns The fired projectile(s).
|
|
52
|
+
*/
|
|
53
|
+
function fireProjectilesInCircle(npc, position, speed, numProjectiles) {
|
|
54
|
+
const velocity = Vector(speed, numProjectiles);
|
|
55
|
+
return fireProjectiles(npc, position, velocity, isaac_typescript_definitions_1.ProjectilesMode.N_PROJECTILES_IN_CIRCLE);
|
|
56
|
+
}
|
|
57
|
+
exports.fireProjectilesInCircle = fireProjectilesInCircle;
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getRandomInt = exports.getRandomFloat = exports.getRandom = void 0;
|
|
4
|
+
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
5
|
+
const rng_1 = require("./rng");
|
|
6
|
+
/**
|
|
7
|
+
* Returns a random float between 0 and 1. It is inclusive on the low end, but exclusive on the high
|
|
8
|
+
* end. (This is because the `RNG.RandomFloat` method will never return a value of exactly 1.)
|
|
9
|
+
*
|
|
10
|
+
* If you want to generate an unseeded number, you must explicitly pass `undefined` to the
|
|
11
|
+
* `seedOrRNG` parameter.
|
|
12
|
+
*
|
|
13
|
+
* @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
14
|
+
* `RNG.Next` method will be called. If `undefined` is provided, it will default to
|
|
15
|
+
* a random seed.
|
|
16
|
+
*/
|
|
17
|
+
function getRandom(seedOrRNG) {
|
|
18
|
+
const rng = (0, rng_1.isRNG)(seedOrRNG) ? seedOrRNG : (0, rng_1.newRNG)(seedOrRNG);
|
|
19
|
+
return rng.RandomFloat();
|
|
20
|
+
}
|
|
21
|
+
exports.getRandom = getRandom;
|
|
22
|
+
/**
|
|
23
|
+
* Returns a random float between min and max.
|
|
24
|
+
*
|
|
25
|
+
* For example:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const realNumberBetweenOneAndThree = getRandomFloat(1, 3, undefined);
|
|
29
|
+
* ```
|
|
30
|
+
*
|
|
31
|
+
* If you want to generate an unseeded number, you must explicitly pass `undefined` to the
|
|
32
|
+
* `seedOrRNG` parameter.
|
|
33
|
+
*
|
|
34
|
+
* @param min The lower bound for the random number (inclusive).
|
|
35
|
+
* @param max The upper bound for the random number (exclusive).
|
|
36
|
+
* @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
37
|
+
* `RNG.Next` method will be called. If `undefined` is provided, it will default to
|
|
38
|
+
* a random seed.
|
|
39
|
+
*/
|
|
40
|
+
function getRandomFloat(min, max, seedOrRNG) {
|
|
41
|
+
if (min > max) {
|
|
42
|
+
const oldMin = min;
|
|
43
|
+
const oldMax = max;
|
|
44
|
+
min = oldMax;
|
|
45
|
+
max = oldMin;
|
|
46
|
+
}
|
|
47
|
+
// From: https://stackoverflow.com/questions/40431966
|
|
48
|
+
return min + getRandom(seedOrRNG) * (max - min);
|
|
49
|
+
}
|
|
50
|
+
exports.getRandomFloat = getRandomFloat;
|
|
51
|
+
/**
|
|
52
|
+
* Returns a random integer between min and max. It is inclusive on both ends.
|
|
53
|
+
*
|
|
54
|
+
* For example:
|
|
55
|
+
*
|
|
56
|
+
* ```ts
|
|
57
|
+
* const oneTwoOrThree = getRandomInt(1, 3);
|
|
58
|
+
* ```
|
|
59
|
+
*
|
|
60
|
+
* If you want to generate an unseeded number, you must explicitly pass `undefined` to the
|
|
61
|
+
* `seedOrRNG` parameter.
|
|
62
|
+
*
|
|
63
|
+
* @param min The lower bound for the random number (inclusive).
|
|
64
|
+
* @param max The upper bound for the random number (inclusive).
|
|
65
|
+
* @param seedOrRNG The `Seed` or `RNG` object to use. If an `RNG` object is provided, the
|
|
66
|
+
* `RNG.Next` method will be called. If `undefined` is provided, it will default to
|
|
67
|
+
* a random seed.
|
|
68
|
+
* @param exceptions Optional. An array of elements that will be skipped over when getting the
|
|
69
|
+
* random integer. For example, a min of 1, a max of 4, and an exceptions array of
|
|
70
|
+
* `[2]` would cause the function to return either 1, 3, or 4. Default is an empty
|
|
71
|
+
* array.
|
|
72
|
+
*/
|
|
73
|
+
function getRandomInt(min, max, seedOrRNG, exceptions = []) {
|
|
74
|
+
const rng = (0, rng_1.isRNG)(seedOrRNG) ? seedOrRNG : (0, rng_1.newRNG)(seedOrRNG);
|
|
75
|
+
min = Math.ceil(min);
|
|
76
|
+
max = Math.floor(max);
|
|
77
|
+
if (min > max) {
|
|
78
|
+
const oldMin = min;
|
|
79
|
+
const oldMax = max;
|
|
80
|
+
min = oldMax;
|
|
81
|
+
max = oldMin;
|
|
82
|
+
}
|
|
83
|
+
const exceptionsSet = new ReadonlySet_1.ReadonlySet(exceptions);
|
|
84
|
+
let randomInt;
|
|
85
|
+
do {
|
|
86
|
+
randomInt = rng.RandomInt(max - min + 1) + min;
|
|
87
|
+
} while (exceptionsSet.has(randomInt));
|
|
88
|
+
return randomInt;
|
|
89
|
+
}
|
|
90
|
+
exports.getRandomInt = getRandomInt;
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.newReadonlyVector = exports.newReadonlyKColor = exports.newReadonlyColor = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Helper function to create a read-only `Color` object. (Otherwise, you would have to manually
|
|
6
|
+
* specify both the type and the constructor.)
|
|
7
|
+
*
|
|
8
|
+
* Note that read-only colors will be writable at run-time.
|
|
9
|
+
*/
|
|
10
|
+
function newReadonlyColor(r, g, b, a, ro, go, bo) {
|
|
11
|
+
return Color(r, g, b, a, ro, go, bo);
|
|
12
|
+
}
|
|
13
|
+
exports.newReadonlyColor = newReadonlyColor;
|
|
14
|
+
/**
|
|
15
|
+
* Helper function to create a read-only `KColor` object. (Otherwise, you would have to manually
|
|
16
|
+
* specify both the type and the constructor.)
|
|
17
|
+
*
|
|
18
|
+
* Note that read-only colors will be writable at run-time.
|
|
19
|
+
*/
|
|
20
|
+
function newReadonlyKColor(r, g, b, a) {
|
|
21
|
+
return KColor(r, g, b, a);
|
|
22
|
+
}
|
|
23
|
+
exports.newReadonlyKColor = newReadonlyKColor;
|
|
24
|
+
/**
|
|
25
|
+
* Helper function to create a read-only `Vector` object. (Otherwise, you would have to manually
|
|
26
|
+
* specify both the type and the constructor.)
|
|
27
|
+
*
|
|
28
|
+
* Note that read-only vectors will be writable at run-time.
|
|
29
|
+
*/
|
|
30
|
+
function newReadonlyVector(x, y) {
|
|
31
|
+
return Vector(x, y);
|
|
32
|
+
}
|
|
33
|
+
exports.newReadonlyVector = newReadonlyVector;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.renderTextOnEntity = exports.renderScaledTextOnEntity = exports.isReflectionRender = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const cachedClasses_1 = require("../core/cachedClasses");
|
|
6
|
+
/**
|
|
7
|
+
* Helper function to see if the current render callback is rendering a water reflection.
|
|
8
|
+
*
|
|
9
|
+
* When the player is in a room with water, things will be rendered twice: once for the normal
|
|
10
|
+
* rendering, and once for the reflecting rendering. Thus, any mod code in a render callback will
|
|
11
|
+
* run twice per frame in these situations, which may be unexpected or cause bugs.
|
|
12
|
+
*
|
|
13
|
+
* This function is typically used to early return from a render function if it returns true.
|
|
14
|
+
*/
|
|
15
|
+
function isReflectionRender() {
|
|
16
|
+
const room = cachedClasses_1.game.GetRoom();
|
|
17
|
+
const renderMode = room.GetRenderMode();
|
|
18
|
+
return renderMode === isaac_typescript_definitions_1.RenderMode.WATER_REFLECT;
|
|
19
|
+
}
|
|
20
|
+
exports.isReflectionRender = isReflectionRender;
|
|
21
|
+
function renderScaledTextOnEntity(entity, text, scaleX, scaleY) {
|
|
22
|
+
if (isReflectionRender()) {
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const position = Isaac.WorldToScreen(entity.Position);
|
|
26
|
+
Isaac.RenderScaledText(text, position.X, position.Y, scaleX, scaleY, 1, 1, 1, 1);
|
|
27
|
+
}
|
|
28
|
+
exports.renderScaledTextOnEntity = renderScaledTextOnEntity;
|
|
29
|
+
function renderTextOnEntity(entity, text) {
|
|
30
|
+
if (isReflectionRender()) {
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const position = Isaac.WorldToScreen(entity.Position);
|
|
34
|
+
Isaac.RenderText(text, position.X, position.Y, 1, 1, 1, 1);
|
|
35
|
+
}
|
|
36
|
+
exports.renderTextOnEntity = renderTextOnEntity;
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.willReviveFromSpiritShackles = exports.willReviveFromHeartbreak = exports.willPlayerRevive = exports.willMysteriousPaperRevive = exports.isDamageToPlayerFatal = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const constants_1 = require("../core/constants");
|
|
6
|
+
const MysteriousPaperEffect_1 = require("../enums/MysteriousPaperEffect");
|
|
7
|
+
const characters_1 = require("./characters");
|
|
8
|
+
const frames_1 = require("./frames");
|
|
9
|
+
const playerHealth_1 = require("./playerHealth");
|
|
10
|
+
const players_1 = require("./players");
|
|
11
|
+
const sprites_1 = require("./sprites");
|
|
12
|
+
const trinketGive_1 = require("./trinketGive");
|
|
13
|
+
const trinkets_1 = require("./trinkets");
|
|
14
|
+
/**
|
|
15
|
+
* Uses the player's current health and other miscellaneous things to determine if incoming damage
|
|
16
|
+
* will be fatal.
|
|
17
|
+
*/
|
|
18
|
+
function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
19
|
+
const character = player.GetPlayerType();
|
|
20
|
+
const effects = player.GetEffects();
|
|
21
|
+
const isBerserk = effects.HasCollectibleEffect(isaac_typescript_definitions_1.CollectibleType.BERSERK);
|
|
22
|
+
// If we are Tainted Jacob and the damage source is Dark Esau, this will not be fatal damage
|
|
23
|
+
// (because we will transform into Tainted Jacob's lost form).
|
|
24
|
+
if (character === isaac_typescript_definitions_1.PlayerType.JACOB_B &&
|
|
25
|
+
source.Type === isaac_typescript_definitions_1.EntityType.DARK_ESAU) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
// If we are berserk, no damage is fatal. (The death is deferred until the end of the berserk
|
|
29
|
+
// effect.)
|
|
30
|
+
if (isBerserk) {
|
|
31
|
+
return false;
|
|
32
|
+
}
|
|
33
|
+
// If we are playing Tainted Samson and the incoming hit will cause us to become Berserk, then
|
|
34
|
+
// this will not be fatal damage.
|
|
35
|
+
const berserkChargeAfterHit = player.SamsonBerserkCharge +
|
|
36
|
+
constants_1.TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE;
|
|
37
|
+
if (character === isaac_typescript_definitions_1.PlayerType.SAMSON_B &&
|
|
38
|
+
berserkChargeAfterHit >= constants_1.MAX_TAINTED_SAMSON_BERSERK_CHARGE) {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
// If Spirit Shackles is activated, no damage is fatal.
|
|
42
|
+
if (willReviveFromSpiritShackles(player)) {
|
|
43
|
+
return false;
|
|
44
|
+
}
|
|
45
|
+
// If we are Tainted Jacob in the Lost Form, we may have plenty of health left, but we will still
|
|
46
|
+
// die in one hit to anything.
|
|
47
|
+
if (character === isaac_typescript_definitions_1.PlayerType.JACOB_2_B) {
|
|
48
|
+
return true;
|
|
49
|
+
}
|
|
50
|
+
// If we are in the "Lost Curse" form from touching a white fire, all damage will be fatal.
|
|
51
|
+
if ((0, players_1.hasLostCurse)(player)) {
|
|
52
|
+
return true;
|
|
53
|
+
}
|
|
54
|
+
const playerNumAllHearts = (0, players_1.getPlayerNumHitsRemaining)(player);
|
|
55
|
+
if (amount < playerNumAllHearts) {
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
// This will not be fatal damage if the player has Heartbreak and two slots open for broken
|
|
59
|
+
// hearts.
|
|
60
|
+
if (willReviveFromHeartbreak(player)) {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
// This will not be fatal damage if we have Glass Cannon and this is the second time we are taking
|
|
64
|
+
// damage on the same frame.
|
|
65
|
+
if (player.HasCollectible(isaac_typescript_definitions_1.CollectibleType.BROKEN_GLASS_CANNON) &&
|
|
66
|
+
(0, frames_1.onGameFrame)(lastDamageGameFrame)) {
|
|
67
|
+
return false;
|
|
68
|
+
}
|
|
69
|
+
// This will not be fatal damage if we have two different kinds of hearts. For example, a bomb
|
|
70
|
+
// explosion deals 2 damage, but if the player has one half soul heart and one half red heart, the
|
|
71
|
+
// game will only remove the soul heart.
|
|
72
|
+
const hearts = player.GetHearts();
|
|
73
|
+
const eternalHearts = player.GetEternalHearts();
|
|
74
|
+
const soulHearts = player.GetSoulHearts();
|
|
75
|
+
const boneHearts = player.GetBoneHearts();
|
|
76
|
+
if ((hearts > 0 && soulHearts > 0) ||
|
|
77
|
+
(hearts > 0 && boneHearts > 0) ||
|
|
78
|
+
(soulHearts > 0 && boneHearts > 0) ||
|
|
79
|
+
(soulHearts > 0 && eternalHearts > 0) ||
|
|
80
|
+
boneHearts >= 2 // Two bone hearts and nothing else should not result in a death
|
|
81
|
+
) {
|
|
82
|
+
return false;
|
|
83
|
+
}
|
|
84
|
+
return true;
|
|
85
|
+
}
|
|
86
|
+
exports.isDamageToPlayerFatal = isDamageToPlayerFatal;
|
|
87
|
+
/**
|
|
88
|
+
* Assuming that we are on the frame of fatal damage, this function returns whether Mysterious Paper
|
|
89
|
+
* would rotate to Missing Poster on the frame that the "Game Over" screen would appear (which would
|
|
90
|
+
* subsequently save the player from fatal damage).
|
|
91
|
+
*
|
|
92
|
+
* Mysterious Paper rotates between the 4 items on every frame, in order. The formula for whether
|
|
93
|
+
* Mysterious Paper be Missing Power is: `gameFrameCount % 4 === 3`
|
|
94
|
+
*/
|
|
95
|
+
function willMysteriousPaperRevive(player) {
|
|
96
|
+
const sprite = player.GetSprite();
|
|
97
|
+
// We want to explicitly check the length of the death animation because we might be playing on a
|
|
98
|
+
// modded character that has a custom death animation.
|
|
99
|
+
const character = player.GetPlayerType();
|
|
100
|
+
const animation = (0, characters_1.getCharacterDeathAnimationName)(character);
|
|
101
|
+
const deathAnimationFrames = (0, sprites_1.getLastFrameOfAnimation)(sprite, animation);
|
|
102
|
+
const frameOfDeath = player.FrameCount + deathAnimationFrames;
|
|
103
|
+
const mysteriousPaperEffect = (0, trinkets_1.getMysteriousPaperEffectForFrame)(player, frameOfDeath);
|
|
104
|
+
if (mysteriousPaperEffect === undefined) {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
return mysteriousPaperEffect === MysteriousPaperEffect_1.MysteriousPaperEffect.MISSING_POSTER;
|
|
108
|
+
}
|
|
109
|
+
exports.willMysteriousPaperRevive = willMysteriousPaperRevive;
|
|
110
|
+
/**
|
|
111
|
+
* The `EntityPlayer.WillPlayerRevive` method does not properly account for Mysterious Paper, so use
|
|
112
|
+
* this helper function instead for more robust revival detection.
|
|
113
|
+
*/
|
|
114
|
+
function willPlayerRevive(player) {
|
|
115
|
+
const trinketSituation = (0, trinketGive_1.temporarilyRemoveTrinket)(player, isaac_typescript_definitions_1.TrinketType.MYSTERIOUS_PAPER);
|
|
116
|
+
const willRevive = player.WillPlayerRevive() ||
|
|
117
|
+
(trinketSituation !== undefined && willMysteriousPaperRevive(player));
|
|
118
|
+
(0, trinketGive_1.giveTrinketsBack)(player, trinketSituation);
|
|
119
|
+
return willRevive;
|
|
120
|
+
}
|
|
121
|
+
exports.willPlayerRevive = willPlayerRevive;
|
|
122
|
+
/**
|
|
123
|
+
* Helper function to determine if the player will be revived by the Heartbreak collectible if they
|
|
124
|
+
* take fatal damage. This is contingent on the character that they are playing as and the amount of
|
|
125
|
+
* broken hearts that they already have.
|
|
126
|
+
*/
|
|
127
|
+
function willReviveFromHeartbreak(player) {
|
|
128
|
+
if (!player.HasCollectible(isaac_typescript_definitions_1.CollectibleType.HEARTBREAK)) {
|
|
129
|
+
return false;
|
|
130
|
+
}
|
|
131
|
+
const maxHeartContainers = (0, playerHealth_1.getPlayerMaxHeartContainers)(player);
|
|
132
|
+
const numBrokenHeartsThatWillBeAdded = (0, players_1.isKeeper)(player) ? 1 : 2;
|
|
133
|
+
const brokenHearts = player.GetBrokenHearts();
|
|
134
|
+
const numBrokenHeartsAfterRevival = numBrokenHeartsThatWillBeAdded + brokenHearts;
|
|
135
|
+
return maxHeartContainers > numBrokenHeartsAfterRevival;
|
|
136
|
+
}
|
|
137
|
+
exports.willReviveFromHeartbreak = willReviveFromHeartbreak;
|
|
138
|
+
/**
|
|
139
|
+
* Helper function to determine if the Spirit Shackles item is in an enabled state. (It can be
|
|
140
|
+
* either enabled or disabled.)
|
|
141
|
+
*/
|
|
142
|
+
function willReviveFromSpiritShackles(player) {
|
|
143
|
+
if (!player.HasCollectible(isaac_typescript_definitions_1.CollectibleType.SPIRIT_SHACKLES)) {
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
const effects = player.GetEffects();
|
|
147
|
+
const spiritShacklesEnabled = !effects.HasNullEffect(isaac_typescript_definitions_1.NullItemID.SPIRIT_SHACKLES_DISABLED);
|
|
148
|
+
const playerInSoulForm = effects.HasNullEffect(isaac_typescript_definitions_1.NullItemID.SPIRIT_SHACKLES_SOUL);
|
|
149
|
+
return spiritShacklesEnabled && !playerInSoulForm;
|
|
150
|
+
}
|
|
151
|
+
exports.willReviveFromSpiritShackles = willReviveFromSpiritShackles;
|