isaacscript-common 6.6.1-dev.1 → 6.6.1-dev.2
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/cachedClasses.d.ts +1 -0
- package/cachedClasses.js +59 -0
- package/callbacks/customRevive.js +153 -0
- package/callbacks/itemPickup.js +64 -0
- package/callbacks/postAmbush.js +54 -0
- package/callbacks/postBombExploded.js +20 -0
- package/callbacks/postBombInitLate.js +28 -0
- package/callbacks/postBoneSwing.js +49 -0
- package/callbacks/postCollectibleEmpty.js +32 -0
- package/callbacks/postCollectibleInitFirst.js +27 -0
- package/callbacks/postCursedTeleport.js +120 -0
- package/callbacks/postCustomDoorEnter.js +205 -0
- package/callbacks/postDiceRoomActivated.js +39 -0
- package/callbacks/postDoorRender.js +20 -0
- package/callbacks/postDoorUpdate.js +20 -0
- package/callbacks/postEffectInitLate.js +28 -0
- package/callbacks/postEffectStateChanged.js +31 -0
- package/callbacks/postEsauJr.js +70 -0
- package/callbacks/postFamiliarInitLate.js +28 -0
- package/callbacks/postFamiliarStateChanged.js +31 -0
- package/callbacks/postFlip.js +59 -0
- package/callbacks/postGreedModeWave.js +31 -0
- package/callbacks/postGridEntity.js +107 -0
- package/callbacks/postGridEntityCollision.js +49 -0
- package/callbacks/postGridEntityRender.js +20 -0
- package/callbacks/postHolyMantleRemoved.js +33 -0
- package/callbacks/postItemDischarged.js +94 -0
- package/callbacks/postKnifeInitLate.js +28 -0
- package/callbacks/postLaserInitLate.js +28 -0
- package/callbacks/postNPCInitLate.js +28 -0
- package/callbacks/postNPCStateChanged.js +31 -0
- package/callbacks/postNewRoomEarly.js +69 -0
- package/callbacks/postPickupCollect.js +37 -0
- package/callbacks/postPickupInitFirst.js +52 -0
- package/callbacks/postPickupInitLate.js +28 -0
- package/callbacks/postPickupStateChanged.js +31 -0
- package/callbacks/postPitRender.js +20 -0
- package/callbacks/postPitUpdate.js +20 -0
- package/callbacks/postPlayerChangeHealth.js +43 -0
- package/callbacks/postPlayerChangeType.js +31 -0
- package/callbacks/postPlayerCollectible.js +74 -0
- package/callbacks/postPlayerFatalDamage.js +74 -0
- package/callbacks/postPlayerInitLate.js +28 -0
- package/callbacks/postPlayerReordered.js +109 -0
- package/callbacks/postPoopRender.js +20 -0
- package/callbacks/postPoopUpdate.js +20 -0
- package/callbacks/postPressurePlateRender.js +20 -0
- package/callbacks/postPressurePlateUpdate.js +20 -0
- package/callbacks/postProjectileInitLate.js +28 -0
- package/callbacks/postPurchase.js +39 -0
- package/callbacks/postRockRender.js +20 -0
- package/callbacks/postRockUpdate.js +20 -0
- package/callbacks/postRoomClearChanged.js +41 -0
- package/callbacks/postSacrifice.js +38 -0
- package/callbacks/postSlotDestroyed.js +64 -0
- package/callbacks/postSlotInitUpdate.js +49 -0
- package/callbacks/postSlotRender.js +48 -0
- package/callbacks/postSpikesRender.js +20 -0
- package/callbacks/postSpikesUpdate.js +20 -0
- package/callbacks/postTNTRender.js +20 -0
- package/callbacks/postTNTUpdate.js +20 -0
- package/callbacks/postTearInitLate.js +28 -0
- package/callbacks/postTearInitVeryLate.js +32 -0
- package/callbacks/postTransformation.js +37 -0
- package/callbacks/postTrinketBreak.js +64 -0
- package/callbacks/preBerserkDeath.js +35 -0
- package/callbacks/preNewLevel.js +45 -0
- package/callbacks/reorderedCallbacks.js +136 -0
- package/callbacks/subscriptions/postAmbushFinished.js +20 -0
- package/callbacks/subscriptions/postAmbushStarted.js +20 -0
- package/callbacks/subscriptions/postBombInitLate.js +20 -0
- package/callbacks/subscriptions/postBoneExploded.js +20 -0
- package/callbacks/subscriptions/postBoneSwing.js +16 -0
- package/callbacks/subscriptions/postCollectibleEmpty.js +21 -0
- package/callbacks/subscriptions/postCollectibleInitFirst.js +21 -0
- package/callbacks/subscriptions/postCursedTeleport.js +16 -0
- package/callbacks/subscriptions/postCustomDoorEnter.js +21 -0
- package/callbacks/subscriptions/postCustomRevive.js +21 -0
- package/callbacks/subscriptions/postDiceRoomActivated.js +21 -0
- package/callbacks/subscriptions/postDoorRender.js +22 -0
- package/callbacks/subscriptions/postDoorUpdate.js +22 -0
- package/callbacks/subscriptions/postEffectInitLate.js +20 -0
- package/callbacks/subscriptions/postEffectStateChanged.js +20 -0
- package/callbacks/subscriptions/postEsauJr.js +16 -0
- package/callbacks/subscriptions/postFamiliarInitLate.js +20 -0
- package/callbacks/subscriptions/postFamiliarStateChanged.js +20 -0
- package/callbacks/subscriptions/postFirstEsauJr.js +16 -0
- package/callbacks/subscriptions/postFirstFlip.js +16 -0
- package/callbacks/subscriptions/postFlip.js +16 -0
- package/callbacks/subscriptions/postGameStartedReordered.js +16 -0
- package/callbacks/subscriptions/postGreedModeWave.js +16 -0
- package/callbacks/subscriptions/postGridEntityBroken.js +28 -0
- package/callbacks/subscriptions/postGridEntityCollision.js +28 -0
- package/callbacks/subscriptions/postGridEntityInit.js +28 -0
- package/callbacks/subscriptions/postGridEntityRemove.js +26 -0
- package/callbacks/subscriptions/postGridEntityRender.js +28 -0
- package/callbacks/subscriptions/postGridEntityStateChanged.js +28 -0
- package/callbacks/subscriptions/postGridEntityUpdate.js +28 -0
- package/callbacks/subscriptions/postHolyMantleRemoved.js +25 -0
- package/callbacks/subscriptions/postItemDischarged.js +21 -0
- package/callbacks/subscriptions/postItemPickup.js +25 -0
- package/callbacks/subscriptions/postKnifeInitLate.js +20 -0
- package/callbacks/subscriptions/postLaserInitLate.js +20 -0
- package/callbacks/subscriptions/postNPCInitLate.js +20 -0
- package/callbacks/subscriptions/postNPCStateChanged.js +24 -0
- package/callbacks/subscriptions/postNewLevelReordered.js +16 -0
- package/callbacks/subscriptions/postNewRoomEarly.js +16 -0
- package/callbacks/subscriptions/postNewRoomReordered.js +16 -0
- package/callbacks/subscriptions/postPEffectUpdateReordered.js +25 -0
- package/callbacks/subscriptions/postPickupCollect.js +20 -0
- package/callbacks/subscriptions/postPickupInitFirst.js +20 -0
- package/callbacks/subscriptions/postPickupInitLate.js +20 -0
- package/callbacks/subscriptions/postPickupStateChanged.js +20 -0
- package/callbacks/subscriptions/postPitRender.js +22 -0
- package/callbacks/subscriptions/postPitUpdate.js +22 -0
- package/callbacks/subscriptions/postPlayerChangeHealth.js +25 -0
- package/callbacks/subscriptions/postPlayerChangeType.js +20 -0
- package/callbacks/subscriptions/postPlayerCollectibleAdded.js +21 -0
- package/callbacks/subscriptions/postPlayerCollectibleRemoved.js +21 -0
- package/callbacks/subscriptions/postPlayerFatalDamage.js +29 -0
- package/callbacks/subscriptions/postPlayerInitLate.js +25 -0
- package/callbacks/subscriptions/postPlayerInitReordered.js +25 -0
- package/callbacks/subscriptions/postPlayerRenderReordered.js +25 -0
- package/callbacks/subscriptions/postPlayerUpdateReordered.js +25 -0
- package/callbacks/subscriptions/postPoopRender.js +22 -0
- package/callbacks/subscriptions/postPoopUpdate.js +22 -0
- package/callbacks/subscriptions/postPressurePlateRender.js +22 -0
- package/callbacks/subscriptions/postPressurePlateUpdate.js +22 -0
- package/callbacks/subscriptions/postProjectileInitLate.js +21 -0
- package/callbacks/subscriptions/postPurchase.js +16 -0
- package/callbacks/subscriptions/postRockRender.js +22 -0
- package/callbacks/subscriptions/postRockUpdate.js +22 -0
- package/callbacks/subscriptions/postRoomClearChanged.js +20 -0
- package/callbacks/subscriptions/postSacrifice.js +25 -0
- package/callbacks/subscriptions/postSlotAnimationChanged.js +20 -0
- package/callbacks/subscriptions/postSlotDestroyed.js +26 -0
- package/callbacks/subscriptions/postSlotInit.js +20 -0
- package/callbacks/subscriptions/postSlotRender.js +20 -0
- package/callbacks/subscriptions/postSlotUpdate.js +20 -0
- package/callbacks/subscriptions/postSpikesRender.js +22 -0
- package/callbacks/subscriptions/postSpikesUpdate.js +22 -0
- package/callbacks/subscriptions/postTNTRender.js +22 -0
- package/callbacks/subscriptions/postTNTUpdate.js +22 -0
- package/callbacks/subscriptions/postTearInitLate.js +20 -0
- package/callbacks/subscriptions/postTearInitVeryLate.js +20 -0
- package/callbacks/subscriptions/postTransformation.js +20 -0
- package/callbacks/subscriptions/postTrinketBreak.js +21 -0
- package/callbacks/subscriptions/preBerserkDeath.js +26 -0
- package/callbacks/subscriptions/preCustomRevive.js +29 -0
- package/callbacks/subscriptions/preItemPickup.js +25 -0
- package/callbacks/subscriptions/preNewLevel.js +16 -0
- package/classes/DefaultMap.js +145 -0
- package/classes/ModUpgraded.js +57 -0
- package/constants.js +143 -0
- package/constantsFirstLast.js +156 -0
- package/enums/AmbushType.js +6 -0
- package/enums/CornerType.js +8 -0
- package/enums/DecorationVariant.js +11 -0
- package/enums/HealthType.js +18 -0
- package/enums/ModCallbackCustom.js +1213 -0
- package/enums/PocketItemType.js +10 -0
- package/enums/RockAltType.js +9 -0
- package/enums/SerializationType.js +7 -0
- package/enums/SlotDestructionType.js +6 -0
- package/enums/private/CopyableIsaacAPIClassType.js +9 -0
- package/enums/private/SaveDataKey.js +8 -0
- package/enums/private/SerializationBrand.js +41 -0
- package/features/characterHealthConversion.js +86 -0
- package/features/characterStats.js +52 -0
- package/features/collectibleItemPoolType.js +45 -0
- package/features/customGridEntity.js +148 -0
- package/features/customStage/backdrop.js +191 -0
- package/features/customStage/customStageConstants.js +2 -0
- package/features/customStage/exports.js +147 -0
- package/features/customStage/gridEntities.js +138 -0
- package/features/customStage/init.js +104 -0
- package/features/customStage/metadata.json +1 -0
- package/features/customStage/shadows.js +63 -0
- package/features/customStage/streakText.js +35 -0
- package/features/customStage/util.js +36 -0
- package/features/customStage/v.js +18 -0
- package/features/customStage/versusScreen.js +184 -0
- package/features/debugDisplay/debugDisplay.js +183 -0
- package/features/debugDisplay/exports.js +441 -0
- package/features/debugDisplay/v.d.ts +18 -0
- package/features/debugDisplay/v.js +61 -0
- package/features/deployJSONRoom.js +532 -0
- package/features/disableAllSound.js +63 -0
- package/features/disableInputs.js +130 -0
- package/features/extraConsoleCommands/commandsDisplay.js +236 -0
- package/features/extraConsoleCommands/commandsSubroutines.js +109 -0
- package/features/extraConsoleCommands/exports.js +53 -0
- package/features/extraConsoleCommands/init.js +239 -0
- package/features/extraConsoleCommands/listCommands.js +1081 -0
- package/features/extraConsoleCommands/v.js +25 -0
- package/features/fadeInRemover.js +51 -0
- package/features/fastReset.js +61 -0
- package/features/forgottenSwitch.js +33 -0
- package/features/pause.js +68 -0
- package/features/persistentEntities.js +120 -0
- package/features/playerInventory.js +89 -0
- package/features/ponyDetection.js +63 -0
- package/features/preventCollectibleRotation.js +81 -0
- package/features/registerHotkey.js +91 -0
- package/features/roomClearFrame.js +42 -0
- package/features/runInNFrames.js +189 -0
- package/features/runNextRoom.js +34 -0
- package/features/saveDataManager/exports.js +183 -0
- package/features/saveDataManager/load.js +69 -0
- package/features/saveDataManager/main.js +131 -0
- package/features/saveDataManager/maps.js +9 -0
- package/features/saveDataManager/merge.js +139 -0
- package/features/saveDataManager/save.js +43 -0
- package/features/saveDataManager/saveDataManagerConstants.js +4 -0
- package/features/saveDataManager/serializationBrand.js +12 -0
- package/features/sirenHelpers.js +90 -0
- package/features/stageHistory.js +43 -0
- package/features/taintedLazarusPlayers.js +92 -0
- package/featuresInitialized.js +16 -0
- package/functions/ambush.js +35 -0
- package/functions/array.js +423 -0
- package/functions/benchmark.js +28 -0
- package/functions/bitwise.js +74 -0
- package/functions/bombs.js +11 -0
- package/functions/boss.js +137 -0
- package/functions/cacheFlag.js +11 -0
- package/functions/cards.js +217 -0
- package/functions/challenges.js +9 -0
- package/functions/character.js +102 -0
- package/functions/charge.js +202 -0
- package/functions/chargeBar.js +44 -0
- package/functions/collectibleCacheFlag.js +68 -0
- package/functions/collectibleSet.js +108 -0
- package/functions/collectibleTag.js +65 -0
- package/functions/collectibles.js +469 -0
- package/functions/color.d.ts +1 -1
- package/functions/color.js +60 -0
- package/functions/debug.js +60 -0
- package/functions/deepCopy.js +361 -0
- package/functions/deepCopyTests.js +308 -0
- package/functions/direction.js +41 -0
- package/functions/doors.js +326 -0
- package/functions/easing.js +142 -0
- package/functions/eden.js +32 -0
- package/functions/effects.js +11 -0
- package/functions/entity.js +324 -0
- package/functions/entitySpecific.js +481 -0
- package/functions/entityTypes.js +6 -0
- package/functions/enums.js +151 -0
- package/functions/familiars.js +85 -0
- package/functions/flag.js +137 -0
- package/functions/flying.js +88 -0
- package/functions/globals.js +230 -0
- package/functions/gridEntity.js +488 -0
- package/functions/gridEntitySpecific.js +109 -0
- package/functions/input.js +95 -0
- package/functions/isaacAPIClass.js +48 -0
- package/functions/jsonHelpers.js +40 -0
- package/functions/jsonRoom.js +132 -0
- package/functions/kColor.d.ts +1 -1
- package/functions/kColor.js +63 -0
- package/functions/language.js +13 -0
- package/functions/level.js +20 -0
- package/functions/log.js +567 -0
- package/functions/map.js +45 -0
- package/functions/math.js +103 -0
- package/functions/mergeTests.js +213 -0
- package/functions/minimap.js +80 -0
- package/functions/nextStage.js +290 -0
- package/functions/npc.js +101 -0
- package/functions/pickupVariants.js +47 -0
- package/functions/pickups.js +219 -0
- package/functions/pills.js +160 -0
- package/functions/player.js +808 -0
- package/functions/playerCenter.js +50 -0
- package/functions/playerDataStructures.js +114 -0
- package/functions/playerHealth.js +321 -0
- package/functions/playerIndex.js +160 -0
- package/functions/pocketItems.js +124 -0
- package/functions/positionVelocity.js +136 -0
- package/functions/random.js +73 -0
- package/functions/revive.js +140 -0
- package/functions/rng.d.ts +1 -1
- package/functions/rng.js +117 -0
- package/functions/roomData.js +174 -0
- package/functions/roomGrid.js +81 -0
- package/functions/roomShape.js +99 -0
- package/functions/rooms.js +487 -0
- package/functions/run.js +53 -0
- package/functions/saveFile.js +104 -0
- package/functions/seeds.js +18 -0
- package/functions/serialization.js +52 -0
- package/functions/set.js +99 -0
- package/functions/sound.js +9 -0
- package/functions/spawnCollectible.js +66 -0
- package/functions/sprite.js +80 -0
- package/functions/stage.js +172 -0
- package/functions/string.js +37 -0
- package/functions/table.js +143 -0
- package/functions/tears.js +31 -0
- package/functions/transformations.js +101 -0
- package/functions/trinketCacheFlag.js +46 -0
- package/functions/trinketGive.js +121 -0
- package/functions/trinkets.js +169 -0
- package/functions/tstlClass.js +125 -0
- package/functions/types.js +27 -0
- package/functions/ui.js +124 -0
- package/functions/utils.js +172 -0
- package/functions/vector.js +68 -0
- package/index.js +140 -0
- package/initCustomCallbacks.js +133 -0
- package/initFeatures.js +51 -0
- package/interfaces/AddCallbackParameterCustom.js +2 -0
- package/interfaces/ChargeBarSprites.js +2 -0
- package/interfaces/Corner.js +2 -0
- package/interfaces/CustomGridEntityData.js +2 -0
- package/interfaces/CustomStage.js +2 -0
- package/interfaces/CustomStageLua.js +13 -0
- package/interfaces/JSONRoomsFile.js +2 -0
- package/interfaces/PlayerHealth.js +2 -0
- package/interfaces/PocketItemDescription.js +2 -0
- package/interfaces/SaveData.js +2 -0
- package/interfaces/TrinketSituation.js +2 -0
- package/interfaces/private/TSTLClassMetatable.js +2 -0
- package/maps/PHDPillConversions.js +20 -0
- package/maps/cardMap.js +208 -0
- package/maps/characterMap.js +86 -0
- package/maps/collectibleDescriptionMap.js +728 -0
- package/maps/collectibleNameMap.js +727 -0
- package/maps/defaultPlayerStatMap.js +14 -0
- package/maps/falsePHDPillConversions.js +34 -0
- package/maps/gridEntityTypeToBrokenStateMap.js +29 -0
- package/maps/gridEntityXMLMap.js +128 -0
- package/maps/pillEffectMap.js +88 -0
- package/maps/roomShapeToTopLeftWallGridIndexMap.js +14 -0
- package/maps/roomTypeMap.js +39 -0
- package/maps/trinketDescriptionMap.js +196 -0
- package/maps/trinketNameMap.js +195 -0
- package/objects/LRoomShapeToRectangles.js +33 -0
- package/objects/backdropTypeToRockAltType.js +66 -0
- package/objects/bossNamePNGFileNames.js +112 -0
- package/objects/bossPortraitPNGFileNames.js +115 -0
- package/objects/callbackRegisterFunctions.js +170 -0
- package/objects/cardDescriptions.js +104 -0
- package/objects/cardNames.js +104 -0
- package/objects/cardTypes.js +103 -0
- package/objects/challengeNames.js +51 -0
- package/objects/characterNames.js +46 -0
- package/objects/coinSubTypeToValue.js +13 -0
- package/objects/colors.d.ts +1 -0
- package/objects/colors.js +24 -0
- package/objects/directionNames.js +9 -0
- package/objects/directionToDegrees.js +9 -0
- package/objects/directionToVector.js +10 -0
- package/objects/doorSlotFlagToDoorSlot.js +13 -0
- package/objects/doorSlotToDirection.js +13 -0
- package/objects/doorSlotToDoorSlotFlag.js +13 -0
- package/objects/isaacAPIClassTypeToBrand.js +9 -0
- package/objects/isaacAPIClassTypeToCopyFunction.js +12 -0
- package/objects/languageNames.js +11 -0
- package/objects/oppositeDoorSlots.js +13 -0
- package/objects/pillEffectClasses.js +56 -0
- package/objects/pillEffectNames.js +55 -0
- package/objects/pillEffectTypes.js +55 -0
- package/objects/playerNamePNGFileNames.js +55 -0
- package/objects/playerPortraitPNGFileNames.js +52 -0
- package/objects/roomShapeBounds.js +46 -0
- package/objects/roomShapeCorners.js +268 -0
- package/objects/roomShapeLayoutSizes.js +39 -0
- package/objects/roomShapeToBottomRightPosition.js +22 -0
- package/objects/roomShapeToDoorSlotCoordinates.js +109 -0
- package/objects/roomShapeToDoorSlots.js +69 -0
- package/objects/roomShapeToDoorSlotsToGridIndexDelta.js +113 -0
- package/objects/roomShapeToGridWidth.js +18 -0
- package/objects/roomShapeToTopLeftPosition.js +23 -0
- package/objects/roomShapeVolumes.js +30 -0
- package/objects/roomTypeGotoPrefixes.js +33 -0
- package/objects/roomTypeNames.js +34 -0
- package/objects/serializedIsaacAPIClassTypeToIdentityFunction.js +12 -0
- package/objects/stageTypeSuffixes.js +10 -0
- package/objects/stageTypeToLetter.js +12 -0
- package/objects/transformationNames.js +18 -0
- package/objects/versusScreenBackgroundColors.js +36 -0
- package/objects/versusScreenDirtSpotColors.js +36 -0
- package/package.json +1 -1
- package/patchErrorFunctions.js +67 -0
- package/sets/LRoomShapesSet.js +8 -0
- package/sets/bossSets.js +374 -0
- package/sets/charactersThatStartWithAnActiveItemSet.js +15 -0
- package/sets/charactersWithBlackHeartFromEternalHeartSet.js +6 -0
- package/sets/charactersWithFreeDevilDealsSet.js +3 -0
- package/sets/charactersWithNoRedHeartsSet.js +16 -0
- package/sets/charactersWithNoSoulHeartsSet.js +13 -0
- package/sets/chestPickupVariantsSet.js +16 -0
- package/sets/consoleCommandsSet.js +61 -0
- package/sets/familiarsThatShootPlayerTearsSet.js +12 -0
- package/sets/lostStyleCharactersSet.js +13 -0
- package/sets/mineShaftRoomSubTypesSet.js +9 -0
- package/sets/narrowRoomShapesSet.js +8 -0
- package/sets/redHeartSubTypesSet.js +7 -0
- package/sets/sinEntityTypesSet.js +11 -0
- package/sets/singleUseActiveCollectibleTypesSet.js +12 -0
- package/sets/storyBossesSet.js +17 -0
- package/shaderCrashFix.js +17 -0
- package/types/AnyEntity.js +2 -0
- package/types/CollectibleIndex.js +2 -0
- package/types/PickingUpItem.js +38 -0
- package/types/PlayerIndex.js +2 -0
- package/types/private/IsaacAPIClass.js +2 -0
- package/types/private/SerializedIsaacAPIClass.js +2 -0
- package/types/private/TSTLClass.js +2 -0
- package/upgradeMod.js +47 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
import { GameStateFlag, GridRoom, LevelStage, StageType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../cachedClasses";
|
|
3
|
+
import { hasVisitedStage } from "../features/stageHistory";
|
|
4
|
+
import { areFeaturesInitialized } from "../featuresInitialized";
|
|
5
|
+
import { getRoomGridIndex } from "./roomData";
|
|
6
|
+
import { calculateStageType, calculateStageTypeRepentance, onRepentanceStage, } from "./stage";
|
|
7
|
+
/**
|
|
8
|
+
* Helper function to get the stage that a trapdoor or heaven door would take the player to, based
|
|
9
|
+
* on the current stage, room, and game state flags.
|
|
10
|
+
*
|
|
11
|
+
* Note that in non-upgraded mods, this function will not account for the player having visited
|
|
12
|
+
* Repentance floors in The Ascent. (Handling this requires stateful tracking as the player
|
|
13
|
+
* progresses through the run.)
|
|
14
|
+
*/
|
|
15
|
+
export function getNextStage() {
|
|
16
|
+
const level = game.GetLevel();
|
|
17
|
+
const backwardsPath = game.GetStateFlag(GameStateFlag.BACKWARDS_PATH);
|
|
18
|
+
const mausoleumHeartKilled = game.GetStateFlag(GameStateFlag.MAUSOLEUM_HEART_KILLED);
|
|
19
|
+
const stage = level.GetStage();
|
|
20
|
+
const repentanceStage = onRepentanceStage();
|
|
21
|
+
const roomGridIndex = getRoomGridIndex();
|
|
22
|
+
// First, handle the special case of being on the backwards path.
|
|
23
|
+
if (backwardsPath) {
|
|
24
|
+
return getNextStageBackwardsPath(stage, repentanceStage);
|
|
25
|
+
}
|
|
26
|
+
// Second, handle the special case of being in a specific off-grid room.
|
|
27
|
+
switch (roomGridIndex) {
|
|
28
|
+
// -8
|
|
29
|
+
case GridRoom.BLUE_WOMB: {
|
|
30
|
+
return LevelStage.BLUE_WOMB;
|
|
31
|
+
}
|
|
32
|
+
// -9
|
|
33
|
+
case GridRoom.THE_VOID: {
|
|
34
|
+
return LevelStage.THE_VOID;
|
|
35
|
+
}
|
|
36
|
+
// -10
|
|
37
|
+
case GridRoom.SECRET_EXIT: {
|
|
38
|
+
if (repentanceStage) {
|
|
39
|
+
// e.g. From Downpour 2 to Mines 1, etc.
|
|
40
|
+
return stage + 1;
|
|
41
|
+
}
|
|
42
|
+
if (stage === LevelStage.DEPTHS_2) {
|
|
43
|
+
// From Depths 2 to Mausoleum 2 through the strange door.
|
|
44
|
+
return LevelStage.DEPTHS_2;
|
|
45
|
+
}
|
|
46
|
+
// e.g. From Basement 1 to Downpour 1, from Basement 2 to Downpour 2, etc.
|
|
47
|
+
return stage;
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
// 2
|
|
51
|
+
if (repentanceStage && stage === LevelStage.BASEMENT_2) {
|
|
52
|
+
// From Downpour 2 to Caves 2.
|
|
53
|
+
return LevelStage.CAVES_2;
|
|
54
|
+
}
|
|
55
|
+
// 4
|
|
56
|
+
if (repentanceStage && stage === LevelStage.CAVES_2) {
|
|
57
|
+
// From Mines 2 to Depths 2.
|
|
58
|
+
return LevelStage.DEPTHS_2;
|
|
59
|
+
}
|
|
60
|
+
// 6
|
|
61
|
+
if (repentanceStage && stage === LevelStage.DEPTHS_2) {
|
|
62
|
+
if (mausoleumHeartKilled) {
|
|
63
|
+
// From Mausoleum 2 to Corpse 1.
|
|
64
|
+
return LevelStage.WOMB_1;
|
|
65
|
+
}
|
|
66
|
+
// From Mausoleum 2 to Womb 2.
|
|
67
|
+
return LevelStage.WOMB_2;
|
|
68
|
+
}
|
|
69
|
+
// 8
|
|
70
|
+
if (stage === LevelStage.WOMB_2) {
|
|
71
|
+
// From Womb 2 to Sheol or Cathedral.
|
|
72
|
+
return LevelStage.SHEOL_CATHEDRAL;
|
|
73
|
+
}
|
|
74
|
+
// 11
|
|
75
|
+
if (stage === LevelStage.DARK_ROOM_CHEST) {
|
|
76
|
+
// - The Chest goes to The Chest.
|
|
77
|
+
// - The Dark Room goes to the Dark Room.
|
|
78
|
+
return LevelStage.DARK_ROOM_CHEST;
|
|
79
|
+
}
|
|
80
|
+
// 12
|
|
81
|
+
if (stage === LevelStage.THE_VOID) {
|
|
82
|
+
// The Void goes to The Void.
|
|
83
|
+
return LevelStage.THE_VOID;
|
|
84
|
+
}
|
|
85
|
+
// By default, go to the next floor.
|
|
86
|
+
return stage + 1;
|
|
87
|
+
}
|
|
88
|
+
function getNextStageBackwardsPath(stage, repentanceStage) {
|
|
89
|
+
// If we have no stage history to work with, then default to the previous stage.
|
|
90
|
+
if (!areFeaturesInitialized()) {
|
|
91
|
+
return stage - 1;
|
|
92
|
+
}
|
|
93
|
+
const visitedDownpour1 = hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE);
|
|
94
|
+
const visitedDross1 = hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE_B);
|
|
95
|
+
const visitedDownpour2 = hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE);
|
|
96
|
+
const visitedDross2 = hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE_B);
|
|
97
|
+
const visitedMines1 = hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE);
|
|
98
|
+
const visitedAshpit1 = hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE_B);
|
|
99
|
+
const visitedMines2 = hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE);
|
|
100
|
+
const visitedAshpit2 = hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE_B);
|
|
101
|
+
if (stage === LevelStage.BASEMENT_1) {
|
|
102
|
+
if (repentanceStage) {
|
|
103
|
+
// From Downpour 1 to Basement 1.
|
|
104
|
+
return LevelStage.BASEMENT_1;
|
|
105
|
+
}
|
|
106
|
+
// From Basement 1 to Home.
|
|
107
|
+
return LevelStage.HOME;
|
|
108
|
+
}
|
|
109
|
+
if (stage === LevelStage.BASEMENT_2) {
|
|
110
|
+
if (repentanceStage) {
|
|
111
|
+
if (visitedDownpour1 || visitedDross1) {
|
|
112
|
+
// From Downpour 2 to Downpour 1.
|
|
113
|
+
return LevelStage.BASEMENT_1;
|
|
114
|
+
}
|
|
115
|
+
// From Downpour 2 to Basement 2.
|
|
116
|
+
return LevelStage.BASEMENT_2;
|
|
117
|
+
}
|
|
118
|
+
// From Basement 2 to Basement 1.
|
|
119
|
+
return LevelStage.BASEMENT_1;
|
|
120
|
+
}
|
|
121
|
+
if (stage === LevelStage.CAVES_1) {
|
|
122
|
+
if (repentanceStage) {
|
|
123
|
+
if (visitedDownpour2 || visitedDross2) {
|
|
124
|
+
// From Mines 1 to Downpour 1.
|
|
125
|
+
return LevelStage.BASEMENT_2;
|
|
126
|
+
}
|
|
127
|
+
// From Mines 1 to Caves 1.
|
|
128
|
+
return LevelStage.CAVES_1;
|
|
129
|
+
}
|
|
130
|
+
// From Caves 1 to Basement 2.
|
|
131
|
+
return LevelStage.BASEMENT_2;
|
|
132
|
+
}
|
|
133
|
+
if (stage === LevelStage.CAVES_2) {
|
|
134
|
+
if (repentanceStage) {
|
|
135
|
+
if (visitedMines1 || visitedAshpit1) {
|
|
136
|
+
// From Mines 2 to Mines 1.
|
|
137
|
+
return LevelStage.CAVES_1;
|
|
138
|
+
}
|
|
139
|
+
// From Mines 2 to Caves 2.
|
|
140
|
+
return LevelStage.CAVES_2;
|
|
141
|
+
}
|
|
142
|
+
// From Caves 2 to Caves 1.
|
|
143
|
+
return LevelStage.CAVES_1;
|
|
144
|
+
}
|
|
145
|
+
if (stage === LevelStage.DEPTHS_1) {
|
|
146
|
+
if (repentanceStage) {
|
|
147
|
+
if (visitedMines2 || visitedAshpit2) {
|
|
148
|
+
// From Mausoleum 1 to Mines 2.
|
|
149
|
+
return LevelStage.CAVES_2;
|
|
150
|
+
}
|
|
151
|
+
// From Mausoleum 1 to Depths 1.
|
|
152
|
+
return LevelStage.DEPTHS_1;
|
|
153
|
+
}
|
|
154
|
+
// From Depths 1 to Caves 2.
|
|
155
|
+
return LevelStage.CAVES_2;
|
|
156
|
+
}
|
|
157
|
+
if (stage === LevelStage.DEPTHS_2) {
|
|
158
|
+
if (repentanceStage) {
|
|
159
|
+
// From Mausoleum 2 to Depths 2.
|
|
160
|
+
return LevelStage.DEPTHS_2;
|
|
161
|
+
}
|
|
162
|
+
// From Depths 2 to Depths 1.
|
|
163
|
+
return LevelStage.DEPTHS_1;
|
|
164
|
+
}
|
|
165
|
+
return stage - 1;
|
|
166
|
+
}
|
|
167
|
+
/**
|
|
168
|
+
* Helper function to get the stage type that a trapdoor or heaven door would take the player to,
|
|
169
|
+
* based on the current stage, room, and game state flags.
|
|
170
|
+
*
|
|
171
|
+
* @param upwards Whether or not the player should go up to Cathedral in the case of being on Womb
|
|
172
|
+
* 2. Default is false.
|
|
173
|
+
*/
|
|
174
|
+
export function getNextStageType(upwards = false) {
|
|
175
|
+
const backwardsPath = game.GetStateFlag(GameStateFlag.BACKWARDS_PATH);
|
|
176
|
+
const mausoleumHeartKilled = game.GetStateFlag(GameStateFlag.MAUSOLEUM_HEART_KILLED);
|
|
177
|
+
const level = game.GetLevel();
|
|
178
|
+
const stage = level.GetStage();
|
|
179
|
+
const stageType = level.GetStageType();
|
|
180
|
+
const repentanceStage = onRepentanceStage();
|
|
181
|
+
const roomGridIndex = getRoomGridIndex();
|
|
182
|
+
const nextStage = getNextStage();
|
|
183
|
+
// First, handle the special case of being on the backwards path.
|
|
184
|
+
if (backwardsPath) {
|
|
185
|
+
return getStageTypeBackwardsPath(stage, nextStage, repentanceStage);
|
|
186
|
+
}
|
|
187
|
+
// Second, handle the special case of being in a specific off-grid room.
|
|
188
|
+
if (roomGridIndex === GridRoom.SECRET_EXIT) {
|
|
189
|
+
return calculateStageTypeRepentance(nextStage);
|
|
190
|
+
}
|
|
191
|
+
if (repentanceStage &&
|
|
192
|
+
(stage === LevelStage.BASEMENT_1 || // 1
|
|
193
|
+
stage === LevelStage.CAVES_1 || // 3
|
|
194
|
+
stage === LevelStage.DEPTHS_1 || // 5
|
|
195
|
+
stage === LevelStage.WOMB_1) // 7
|
|
196
|
+
) {
|
|
197
|
+
return calculateStageTypeRepentance(nextStage);
|
|
198
|
+
}
|
|
199
|
+
if (repentanceStage &&
|
|
200
|
+
stage === LevelStage.DEPTHS_2 &&
|
|
201
|
+
mausoleumHeartKilled) {
|
|
202
|
+
return calculateStageTypeRepentance(nextStage);
|
|
203
|
+
}
|
|
204
|
+
// 9
|
|
205
|
+
if (nextStage === LevelStage.BLUE_WOMB) {
|
|
206
|
+
// Blue Womb does not have any alternate floors.
|
|
207
|
+
return StageType.ORIGINAL;
|
|
208
|
+
}
|
|
209
|
+
// 10
|
|
210
|
+
if (nextStage === LevelStage.SHEOL_CATHEDRAL) {
|
|
211
|
+
if (upwards) {
|
|
212
|
+
// Go to Cathedral (10.1).
|
|
213
|
+
return StageType.WRATH_OF_THE_LAMB;
|
|
214
|
+
}
|
|
215
|
+
// Go to Sheol (10.0).
|
|
216
|
+
return StageType.ORIGINAL;
|
|
217
|
+
}
|
|
218
|
+
// 11
|
|
219
|
+
if (nextStage === LevelStage.DARK_ROOM_CHEST) {
|
|
220
|
+
if (stageType === StageType.ORIGINAL) {
|
|
221
|
+
// Sheol (10.0) goes to the Dark Room (11.0).
|
|
222
|
+
return StageType.ORIGINAL;
|
|
223
|
+
}
|
|
224
|
+
// Cathedral (10.1) goes to The Chest (11.1).
|
|
225
|
+
return StageType.WRATH_OF_THE_LAMB;
|
|
226
|
+
}
|
|
227
|
+
// 12
|
|
228
|
+
if (nextStage === LevelStage.THE_VOID) {
|
|
229
|
+
// The Void does not have any alternate floors.
|
|
230
|
+
return StageType.ORIGINAL;
|
|
231
|
+
}
|
|
232
|
+
// 13
|
|
233
|
+
if (nextStage === LevelStage.HOME) {
|
|
234
|
+
// Home does not have any alternate floors.
|
|
235
|
+
return StageType.ORIGINAL;
|
|
236
|
+
}
|
|
237
|
+
return calculateStageType(nextStage);
|
|
238
|
+
}
|
|
239
|
+
function getStageTypeBackwardsPath(stage, nextStage, repentanceStage) {
|
|
240
|
+
const visitedDownpour1 = hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE);
|
|
241
|
+
const visitedDross1 = hasVisitedStage(LevelStage.BASEMENT_1, StageType.REPENTANCE_B);
|
|
242
|
+
const visitedDownpour2 = hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE);
|
|
243
|
+
const visitedDross2 = hasVisitedStage(LevelStage.BASEMENT_2, StageType.REPENTANCE_B);
|
|
244
|
+
const visitedMines1 = hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE);
|
|
245
|
+
const visitedAshpit1 = hasVisitedStage(LevelStage.CAVES_1, StageType.REPENTANCE_B);
|
|
246
|
+
const visitedMines2 = hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE);
|
|
247
|
+
const visitedAshpit2 = hasVisitedStage(LevelStage.DEPTHS_2, StageType.REPENTANCE_B);
|
|
248
|
+
if (stage === LevelStage.BASEMENT_2 && repentanceStage) {
|
|
249
|
+
if (visitedDownpour1) {
|
|
250
|
+
return StageType.REPENTANCE;
|
|
251
|
+
}
|
|
252
|
+
if (visitedDross1) {
|
|
253
|
+
return StageType.REPENTANCE_B;
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
if (stage === LevelStage.CAVES_1 && repentanceStage) {
|
|
257
|
+
if (visitedDownpour2) {
|
|
258
|
+
return StageType.REPENTANCE;
|
|
259
|
+
}
|
|
260
|
+
if (visitedDross2) {
|
|
261
|
+
return StageType.REPENTANCE_B;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (stage === LevelStage.CAVES_2 && !repentanceStage) {
|
|
265
|
+
if (visitedDownpour2) {
|
|
266
|
+
return StageType.REPENTANCE;
|
|
267
|
+
}
|
|
268
|
+
if (visitedDross2) {
|
|
269
|
+
return StageType.REPENTANCE_B;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (stage === LevelStage.CAVES_2 && repentanceStage) {
|
|
273
|
+
if (visitedMines1) {
|
|
274
|
+
return StageType.REPENTANCE;
|
|
275
|
+
}
|
|
276
|
+
if (visitedAshpit1) {
|
|
277
|
+
return StageType.REPENTANCE_B;
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
if (stage === LevelStage.DEPTHS_2 && !repentanceStage) {
|
|
281
|
+
if (visitedAshpit2) {
|
|
282
|
+
return StageType.REPENTANCE_B;
|
|
283
|
+
}
|
|
284
|
+
if (visitedMines2) {
|
|
285
|
+
return StageType.REPENTANCE;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return calculateStageType(nextStage);
|
|
289
|
+
}
|
|
290
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmV4dFN0YWdlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvbmV4dFN0YWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxhQUFhLEVBQ2IsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEdBQ1YsTUFBTSw4QkFBOEIsQ0FBQztBQUN0QyxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBQzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLFlBQVksQ0FBQztBQUM5QyxPQUFPLEVBQ0wsa0JBQWtCLEVBQ2xCLDRCQUE0QixFQUM1QixpQkFBaUIsR0FDbEIsTUFBTSxTQUFTLENBQUM7QUFFakI7Ozs7Ozs7R0FPRztBQUNILE1BQU0sVUFBVSxZQUFZO0lBQzFCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUM5QixNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxjQUFjLENBQUMsQ0FBQztJQUN0RSxNQUFNLG9CQUFvQixHQUFHLElBQUksQ0FBQyxZQUFZLENBQzVDLGFBQWEsQ0FBQyxzQkFBc0IsQ0FDckMsQ0FBQztJQUNGLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxRQUFRLEVBQUUsQ0FBQztJQUMvQixNQUFNLGVBQWUsR0FBRyxpQkFBaUIsRUFBRSxDQUFDO0lBQzVDLE1BQU0sYUFBYSxHQUFHLGdCQUFnQixFQUFFLENBQUM7SUFFekMsaUVBQWlFO0lBQ2pFLElBQUksYUFBYSxFQUFFO1FBQ2pCLE9BQU8seUJBQXlCLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0tBQzFE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
|
package/functions/npc.js
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
import { BegottenVariant, BigHornVariant, ChargerSubType, ChargerVariant, DarkEsauVariant, DeathVariant, EntityType, MamaGurdyVariant, MotherSubType, MotherVariant, NpcState, PeepVariant, ProjectilesMode, RaglingVariant, VisVariant, } from "isaac-typescript-definitions";
|
|
2
|
+
import { EGGY_STATE_FRAME_OF_FINAL_SPIDER } from "../constants";
|
|
3
|
+
import { getFilteredNewEntities } from "./entity";
|
|
4
|
+
import { getNPCs, getProjectiles } from "./entitySpecific";
|
|
5
|
+
/**
|
|
6
|
+
* Used to filter out certain NPCs when determining of an NPC is "alive" and/or should keep the
|
|
7
|
+
* doors open.
|
|
8
|
+
*/
|
|
9
|
+
const NON_ALIVE_NPCS_TYPE_VARIANT = new Set([
|
|
10
|
+
`${EntityType.VIS}.${VisVariant.CHUBBER_PROJECTILE}`,
|
|
11
|
+
`${EntityType.DEATH}.${DeathVariant.DEATH_SCYTHE}`,
|
|
12
|
+
`${EntityType.PEEP}.${PeepVariant.PEEP_EYE}`,
|
|
13
|
+
`${EntityType.PEEP}.${PeepVariant.BLOAT_EYE}`,
|
|
14
|
+
`${EntityType.BEGOTTEN}.${BegottenVariant.BEGOTTEN_CHAIN}`,
|
|
15
|
+
`${EntityType.MAMA_GURDY}.${MamaGurdyVariant.LEFT_HAND}`,
|
|
16
|
+
`${EntityType.MAMA_GURDY}.${MamaGurdyVariant.RIGHT_HAND}`,
|
|
17
|
+
`${EntityType.BIG_HORN}.${BigHornVariant.SMALL_HOLE}`,
|
|
18
|
+
`${EntityType.BIG_HORN}.${BigHornVariant.BIG_HOLE}`,
|
|
19
|
+
`${EntityType.DARK_ESAU}.${DarkEsauVariant.DARK_ESAU}`,
|
|
20
|
+
`${EntityType.DARK_ESAU}.${DarkEsauVariant.PIT}`, // 866.1
|
|
21
|
+
]);
|
|
22
|
+
/**
|
|
23
|
+
* Used to filter out certain NPCs when determining of an NPC is "alive" and/or should keep the
|
|
24
|
+
* doors open.
|
|
25
|
+
*/
|
|
26
|
+
const NON_ALIVE_NPCS_TYPE_VARIANT_SUBTYPE = new Set([
|
|
27
|
+
`${EntityType.CHARGER}.${ChargerVariant.CHARGER}.${ChargerSubType.MY_SHADOW}`,
|
|
28
|
+
`${EntityType.MOTHER}.${MotherVariant.MOTHER_1}.${MotherSubType.PHASE_2}`, // 912
|
|
29
|
+
]);
|
|
30
|
+
/**
|
|
31
|
+
* Helper function to make an NPC fire a projectile. Returns the fired projectile. Use this function
|
|
32
|
+
* instead of the `EntityNPC.FireProjectiles` method, since that returns void.
|
|
33
|
+
*
|
|
34
|
+
* @param npc The NPC to fire the projectile from.
|
|
35
|
+
* @param position The staring position of the projectile.
|
|
36
|
+
* @param velocity The starting velocity of the projectile.
|
|
37
|
+
* @param projectilesMode The mode of the projectile. Optional. Default is
|
|
38
|
+
* `ProjectilesMode.ONE_PROJECTILE`.
|
|
39
|
+
* @param projectileParams The parameters of the projectile. Optional. Default is
|
|
40
|
+
* `ProjectileParams()`.
|
|
41
|
+
* @returns The fired projectile.
|
|
42
|
+
*/
|
|
43
|
+
export function fireProjectiles(npc, position, velocity, projectilesMode = ProjectilesMode.ONE_PROJECTILE, projectileParams = ProjectileParams()) {
|
|
44
|
+
const oldProjectiles = getProjectiles(projectileParams.Variant);
|
|
45
|
+
npc.FireProjectiles(position, velocity, projectilesMode, projectileParams);
|
|
46
|
+
const newProjectiles = getProjectiles(projectileParams.Variant);
|
|
47
|
+
return getFilteredNewEntities(oldProjectiles, newProjectiles);
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Helper function to get all of the non-dead NPCs in the room.
|
|
51
|
+
*
|
|
52
|
+
* This function will not include NPCs on an internal blacklist, such as Death's scythes or Big Horn
|
|
53
|
+
* holes.
|
|
54
|
+
*/
|
|
55
|
+
export function getAliveNPCs(matchingEntityType, matchingVariant, matchingSubType, ignoreFriendly = false) {
|
|
56
|
+
const npcs = getNPCs(matchingEntityType, matchingVariant, matchingSubType, ignoreFriendly);
|
|
57
|
+
return npcs.filter((npc) => !npc.IsDead() && !isAliveExceptionNPC(npc));
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Checks for specific NPCs that have "CanShutDoors" set to true naturally by the game, but should
|
|
61
|
+
* not actually keep the doors closed (like Death's scythes).
|
|
62
|
+
*/
|
|
63
|
+
export function isAliveExceptionNPC(npc) {
|
|
64
|
+
const entityTypeVariant = `${npc.Type}.${npc.Variant}`;
|
|
65
|
+
if (NON_ALIVE_NPCS_TYPE_VARIANT.has(entityTypeVariant)) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
const entityTypeVariantSubType = `${npc.Type}.${npc.Variant}.${npc.SubType}`;
|
|
69
|
+
if (NON_ALIVE_NPCS_TYPE_VARIANT_SUBTYPE.has(entityTypeVariantSubType)) {
|
|
70
|
+
return true;
|
|
71
|
+
}
|
|
72
|
+
if (isRaglingDeathPatch(npc)) {
|
|
73
|
+
return true;
|
|
74
|
+
}
|
|
75
|
+
if (isDyingEggyWithNoSpidersLeft(npc)) {
|
|
76
|
+
return true;
|
|
77
|
+
}
|
|
78
|
+
return false;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Helper function to detect the custom death state of an Eggy. Eggies are never actually marked
|
|
82
|
+
* dead by the game. Instead, when Eggies take fatal damage, they go into NpcState.STATE_SUICIDE and
|
|
83
|
+
* spawn 14 Swarm Spiders while their StateFrame ticks upwards.
|
|
84
|
+
*/
|
|
85
|
+
export function isDyingEggyWithNoSpidersLeft(npc) {
|
|
86
|
+
return (npc.State === NpcState.SUICIDE &&
|
|
87
|
+
npc.StateFrame >= EGGY_STATE_FRAME_OF_FINAL_SPIDER);
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Helper function to detect the custom death state of a Rag Man Ragling. When Rag Man Raglings die,
|
|
91
|
+
* they turn into a patch on the ground and can be revived by Rag Man at a later time. This causes
|
|
92
|
+
* them to show up as an "alive" enemy, so they should usually be filtered out of lists of alive
|
|
93
|
+
* enemies.
|
|
94
|
+
*/
|
|
95
|
+
export function isRaglingDeathPatch(npc) {
|
|
96
|
+
return (npc.Type === EntityType.RAGLING &&
|
|
97
|
+
npc.Variant === RaglingVariant.RAG_MANS_RAGLING &&
|
|
98
|
+
// They go to `STATE_SPECIAL` when they are patches on the ground.
|
|
99
|
+
npc.State === NpcState.SPECIAL);
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibnBjLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vcGFja2FnZXMvaXNhYWNzY3JpcHQtY29tbW9uL3NyYy9mdW5jdGlvbnMvbnBjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxlQUFlLEVBQ2YsY0FBYyxFQUNkLGNBQWMsRUFDZCxjQUFjLEVBQ2QsZUFBZSxFQUNmLFlBQVksRUFDWixVQUFVLEVBQ1YsZ0JBQWdCLEVBQ2hCLGFBQWEsRUFDYixhQUFhLEVBQ2IsUUFBUSxFQUNSLFdBQVcsRUFDWCxlQUFlLEVBQ2YsY0FBYyxFQUNkLFVBQVUsR0FDWCxNQUFNLDhCQUE4QixDQUFDO0FBQ3RDLE9BQU8sRUFBRSxnQ0FBZ0MsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUNoRSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFDbEQsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUUzRDs7O0dBR0c7QUFDSCxNQUFNLDJCQUEyQixHQUF3QixJQUFJLEdBQUcsQ0FBQztJQUMvRCxHQUFHLFVBQVUsQ0FBQyxHQUFHLElBQUksVUFBVSxDQUFDLGtCQUFrQixFQUFFO0lBQ3BELEdBQUcsVUFBVSxDQUFDLEtBQUssSUFBSSxZQUFZLENBQUMsWUFBWSxFQUFFO0lBQ2xELEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsUUFBUSxFQUFFO0lBQzVDLEdBQUcsVUFBVSxDQUFDLElBQUksSUFBSSxXQUFXLENBQUMsU0FBUyxFQUFFO0lBQzdDLEdBQUcsVUFBVSxDQUFDLFFBQVEsSUFBSSxlQUFlLENBQUMsY0FBYyxFQUFFO0lBQzFELEdBQUcsVUFBVSxDQUFDLFVBQVUsSUFBSSxnQkFBZ0IsQ0FBQyxTQUFTLEVBQUU7SUFDeEQsR0FBRyxVQUFVLENBQUMsVUFBVSxJQUFJLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtJQUN6RCxHQUFHLFVBQVUsQ0FB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
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
/* eslint-disable sort-exports/sort-exports */
|
|
2
|
+
import { PickupVariant } from "isaac-typescript-definitions";
|
|
3
|
+
/** For `PickupVariant.HEART` (10) */
|
|
4
|
+
export function isHeart(pickup) {
|
|
5
|
+
return pickup.Variant === PickupVariant.HEART;
|
|
6
|
+
}
|
|
7
|
+
/** For `PickupVariant.COIN` (20) */
|
|
8
|
+
export function isCoin(pickup) {
|
|
9
|
+
return pickup.Variant === PickupVariant.COIN;
|
|
10
|
+
}
|
|
11
|
+
/** For `PickupVariant.KEY` (30) */
|
|
12
|
+
export function isKey(pickup) {
|
|
13
|
+
return pickup.Variant === PickupVariant.KEY;
|
|
14
|
+
}
|
|
15
|
+
/** For `PickupVariant.BOMB` (40) */
|
|
16
|
+
export function isBomb(pickup) {
|
|
17
|
+
return pickup.Variant === PickupVariant.BOMB;
|
|
18
|
+
}
|
|
19
|
+
/** For `PickupVariant.POOP` (42) */
|
|
20
|
+
export function isPoop(pickup) {
|
|
21
|
+
return pickup.Variant === PickupVariant.POOP;
|
|
22
|
+
}
|
|
23
|
+
/** For `PickupVariant.SACK` (69) */
|
|
24
|
+
export function isSack(pickup) {
|
|
25
|
+
return pickup.Variant === PickupVariant.SACK;
|
|
26
|
+
}
|
|
27
|
+
/** For `PickupVariant.PILL` (70) */
|
|
28
|
+
export function isPill(pickup) {
|
|
29
|
+
return pickup.Variant === PickupVariant.PILL;
|
|
30
|
+
}
|
|
31
|
+
/** For `PickupVariant.LIL_BATTERY` (90) */
|
|
32
|
+
export function isBattery(pickup) {
|
|
33
|
+
return pickup.Variant === PickupVariant.LIL_BATTERY;
|
|
34
|
+
}
|
|
35
|
+
/** For `PickupVariant.COLLECTIBLE` (100) */
|
|
36
|
+
export function isCollectible(pickup) {
|
|
37
|
+
return pickup.Variant === PickupVariant.COLLECTIBLE;
|
|
38
|
+
}
|
|
39
|
+
/** For `PickupVariant.TAROT_CARD` (300) */
|
|
40
|
+
export function isCardPickup(pickup) {
|
|
41
|
+
return pickup.Variant === PickupVariant.TAROT_CARD;
|
|
42
|
+
}
|
|
43
|
+
/** For `PickupVariant.TRINKET` (350) */
|
|
44
|
+
export function isTrinket(pickup) {
|
|
45
|
+
return pickup.Variant === PickupVariant.TRINKET;
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGlja3VwVmFyaWFudHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9pc2FhY3NjcmlwdC1jb21tb24vc3JjL2Z1bmN0aW9ucy9waWNrdXBWYXJpYW50cy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSw4Q0FBOEM7QUFFOUMsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDhCQUE4QixDQUFDO0FBRTdELHFDQUFxQztBQUNyQyxNQUFNLFVBQVUsT0FBTyxDQUFDLE1BQW9CO0lBQzFDLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsS0FBSyxDQUFDO0FBQ2hELENBQUM7QUFFRCxvQ0FBb0M7QUFDcEMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFvQjtJQUN6QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDLElBQUksQ0FBQztBQUMvQyxDQUFDO0FBRUQsbUNBQW1DO0FBQ25DLE1BQU0sVUFBVSxLQUFLLENBQUMsTUFBb0I7SUFDeEMsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLGFBQWEsQ0FBQyxHQUFHLENBQUM7QUFDOUMsQ0FBQztBQUVELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQW9CO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQy9DLENBQUM7QUFFRCxvQ0FBb0M7QUFDcEMsTUFBTSxVQUFVLE1BQU0sQ0FBQyxNQUFvQjtJQUN6QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDLElBQUksQ0FBQztBQUMvQyxDQUFDO0FBRUQsb0NBQW9DO0FBQ3BDLE1BQU0sVUFBVSxNQUFNLENBQUMsTUFBb0I7SUFDekMsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLGFBQWEsQ0FBQyxJQUFJLENBQUM7QUFDL0MsQ0FBQztBQUVELG9DQUFvQztBQUNwQyxNQUFNLFVBQVUsTUFBTSxDQUFDLE1BQW9CO0lBQ3pDLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsSUFBSSxDQUFDO0FBQy9DLENBQUM7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBTSxVQUFVLFNBQVMsQ0FBQyxNQUFvQjtJQUM1QyxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDLFdBQVcsQ0FBQztBQUN0RCxDQUFDO0FBRUQsNENBQTRDO0FBQzVDLE1BQU0sVUFBVSxhQUFhLENBQzNCLE1BQW9CO0lBRXBCLE9BQU8sTUFBTSxDQUFDLE9BQU8sS0FBSyxhQUFhLENBQUMsV0FBVyxDQUFDO0FBQ3RELENBQUM7QUFFRCwyQ0FBMkM7QUFDM0MsTUFBTSxVQUFVLFlBQVksQ0FBQyxNQUFvQjtJQUMvQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLEtBQUssYUFBYSxDQUFDLFVBQVUsQ0FBQztBQUNyRCxDQUFDO0FBRUQsd0NBQXdDO0FBQ3hDLE1BQU0sVUFBVSxTQUFTLENBQUMsTUFBb0I7SUFDNUMsT0FBTyxNQUFNLENBQUMsT0FBTyxLQUFLLGFBQWEsQ0FBQyxPQUFPLENBQUM7QUFDbEQsQ0FBQyJ9
|