isaacscript-common 87.9.7 → 87.9.8
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/cachedEnumValues.js +29 -32
- package/dist/callbackClasses.js +142 -289
- package/dist/callbacks.js +147 -183
- package/dist/classes/DefaultMap.js +4 -8
- package/dist/classes/ModFeature.js +21 -25
- package/dist/classes/ModUpgraded.js +43 -47
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +6 -10
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +7 -11
- package/dist/classes/callbacks/InputActionFilter.js +4 -8
- package/dist/classes/callbacks/InputActionPlayer.js +4 -8
- package/dist/classes/callbacks/PostAmbushFinished.js +10 -14
- package/dist/classes/callbacks/PostAmbushStarted.js +10 -14
- package/dist/classes/callbacks/PostBombExploded.js +8 -12
- package/dist/classes/callbacks/PostBombInitFilter.js +6 -10
- package/dist/classes/callbacks/PostBombInitLate.js +6 -10
- package/dist/classes/callbacks/PostBombRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostBombUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostBoneSwing.js +7 -11
- package/dist/classes/callbacks/PostCollectibleEmpty.js +6 -10
- package/dist/classes/callbacks/PostCursedTeleport.js +30 -34
- package/dist/classes/callbacks/PostCustomRevive.js +4 -8
- package/dist/classes/callbacks/PostDiceRoomActivated.js +9 -13
- package/dist/classes/callbacks/PostDoorRender.js +8 -12
- package/dist/classes/callbacks/PostDoorUpdate.js +8 -12
- package/dist/classes/callbacks/PostEffectInitFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectInitLate.js +6 -10
- package/dist/classes/callbacks/PostEffectRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectStateChanged.js +8 -12
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityKillFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityRemoveFilter.js +6 -10
- package/dist/classes/callbacks/PostEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarInitLate.js +6 -10
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +8 -12
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostFirstEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFirstFlip.js +4 -8
- package/dist/classes/callbacks/PostFlip.js +4 -8
- package/dist/classes/callbacks/PostGameEndFilter.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReordered.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +6 -10
- package/dist/classes/callbacks/PostGreedModeWave.js +7 -11
- package/dist/classes/callbacks/PostGridEntityBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +6 -10
- package/dist/classes/callbacks/PostGridEntityInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityUpdate.js +6 -10
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +15 -19
- package/dist/classes/callbacks/PostItemDischarge.js +23 -27
- package/dist/classes/callbacks/PostItemPickup.js +6 -10
- package/dist/classes/callbacks/PostKeyboardChanged.js +9 -13
- package/dist/classes/callbacks/PostKnifeInitFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeInitLate.js +6 -10
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitLate.js +6 -10
- package/dist/classes/callbacks/PostLaserRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCDeathFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitLate.js +6 -10
- package/dist/classes/callbacks/PostNPCRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCStateChanged.js +8 -12
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNewLevelReordered.js +6 -10
- package/dist/classes/callbacks/PostNewRoomEarly.js +17 -21
- package/dist/classes/callbacks/PostNewRoomReordered.js +6 -10
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPickupChanged.js +6 -10
- package/dist/classes/callbacks/PostPickupCollect.js +8 -12
- package/dist/classes/callbacks/PostPickupInitFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupInitFirst.js +10 -14
- package/dist/classes/callbacks/PostPickupInitLate.js +6 -10
- package/dist/classes/callbacks/PostPickupRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +4 -8
- package/dist/classes/callbacks/PostPickupStateChanged.js +8 -12
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPitRender.js +8 -12
- package/dist/classes/callbacks/PostPitUpdate.js +8 -12
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +14 -18
- package/dist/classes/callbacks/PostPlayerChangeStat.js +26 -30
- package/dist/classes/callbacks/PostPlayerChangeType.js +11 -15
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +6 -10
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +6 -10
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +24 -28
- package/dist/classes/callbacks/PostPlayerInitFirst.js +12 -16
- package/dist/classes/callbacks/PostPlayerInitLate.js +9 -13
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +6 -10
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPoopRender.js +8 -12
- package/dist/classes/callbacks/PostPoopUpdate.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateRender.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +8 -12
- package/dist/classes/callbacks/PostProjectileInitFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileInitLate.js +6 -10
- package/dist/classes/callbacks/PostProjectileKill.js +8 -12
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPurchase.js +21 -25
- package/dist/classes/callbacks/PostRockRender.js +8 -12
- package/dist/classes/callbacks/PostRockUpdate.js +8 -12
- package/dist/classes/callbacks/PostRoomClearChanged.js +9 -13
- package/dist/classes/callbacks/PostSacrifice.js +12 -16
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +6 -10
- package/dist/classes/callbacks/PostSlotCollision.js +8 -12
- package/dist/classes/callbacks/PostSlotDestroyed.js +6 -10
- package/dist/classes/callbacks/PostSlotInit.js +6 -10
- package/dist/classes/callbacks/PostSlotRender.js +6 -10
- package/dist/classes/callbacks/PostSlotUpdate.js +6 -10
- package/dist/classes/callbacks/PostSpikesRender.js +8 -12
- package/dist/classes/callbacks/PostSpikesUpdate.js +8 -12
- package/dist/classes/callbacks/PostTNTRender.js +8 -12
- package/dist/classes/callbacks/PostTNTUpdate.js +8 -12
- package/dist/classes/callbacks/PostTearInitFilter.js +6 -10
- package/dist/classes/callbacks/PostTearInitLate.js +6 -10
- package/dist/classes/callbacks/PostTearInitVeryLate.js +6 -10
- package/dist/classes/callbacks/PostTearKill.js +8 -12
- package/dist/classes/callbacks/PostTearRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostTearUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostTransformation.js +10 -14
- package/dist/classes/callbacks/PostTrinketBreak.js +16 -20
- package/dist/classes/callbacks/PostUsePillFilter.js +18 -22
- package/dist/classes/callbacks/PreBerserkDeath.js +14 -18
- package/dist/classes/callbacks/PreBombCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreCustomRevive.js +6 -10
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreGetPedestal.js +8 -12
- package/dist/classes/callbacks/PreItemPickup.js +6 -10
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PreNewLevel.js +10 -14
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreTearCollisionFilter.js +6 -10
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +46 -50
- package/dist/classes/features/callbackLogic/CustomRevive.js +28 -32
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +11 -15
- package/dist/classes/features/callbackLogic/FlipDetection.js +11 -15
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +26 -30
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +10 -14
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +6 -10
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +12 -16
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +17 -21
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +6 -10
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +39 -43
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +18 -22
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +17 -21
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +8 -12
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +9 -13
- package/dist/classes/features/other/CharacterHealthConversion.js +13 -17
- package/dist/classes/features/other/CharacterStats.js +9 -13
- package/dist/classes/features/other/CollectibleItemPoolType.js +17 -21
- package/dist/classes/features/other/CustomHotkeys.js +15 -19
- package/dist/classes/features/other/CustomItemPools.js +20 -24
- package/dist/classes/features/other/CustomPickups.js +15 -19
- package/dist/classes/features/other/CustomStages.js +116 -153
- package/dist/classes/features/other/CustomTrapdoors.js +119 -123
- package/dist/classes/features/other/DebugDisplay.js +77 -81
- package/dist/classes/features/other/DeployJSONRoom.js +65 -69
- package/dist/classes/features/other/DisableAllSound.js +14 -18
- package/dist/classes/features/other/DisableInputs.js +24 -28
- package/dist/classes/features/other/EdenStartingStatsHealth.js +36 -40
- package/dist/classes/features/other/ExtraConsoleCommands.js +65 -102
- package/dist/classes/features/other/FadeInRemover.js +9 -13
- package/dist/classes/features/other/FastReset.js +18 -22
- package/dist/classes/features/other/FlyingDetection.js +10 -14
- package/dist/classes/features/other/ForgottenSwitch.js +8 -12
- package/dist/classes/features/other/ItemPoolDetection.js +35 -39
- package/dist/classes/features/other/ModdedElementDetection.js +43 -47
- package/dist/classes/features/other/ModdedElementSets.js +135 -139
- package/dist/classes/features/other/NoSirenSteal.js +7 -11
- package/dist/classes/features/other/Pause.js +48 -52
- package/dist/classes/features/other/PersistentEntities.js +16 -20
- package/dist/classes/features/other/PickupIndexCreation.js +31 -35
- package/dist/classes/features/other/PlayerCollectibleTracking.js +18 -22
- package/dist/classes/features/other/PonyDetection.js +22 -26
- package/dist/classes/features/other/PressInput.js +10 -14
- package/dist/classes/features/other/PreventChildEntities.js +6 -10
- package/dist/classes/features/other/PreventGridEntityRespawn.js +34 -38
- package/dist/classes/features/other/RerunDetection.js +11 -15
- package/dist/classes/features/other/RoomClearFrame.js +11 -15
- package/dist/classes/features/other/RoomHistory.js +30 -34
- package/dist/classes/features/other/RunInNFrames.js +24 -28
- package/dist/classes/features/other/RunNextRoom.js +8 -12
- package/dist/classes/features/other/RunNextRun.js +8 -12
- package/dist/classes/features/other/SaveDataManager.js +61 -65
- package/dist/classes/features/other/SpawnRockAltRewards.js +115 -119
- package/dist/classes/features/other/StageHistory.js +76 -80
- package/dist/classes/features/other/StartAmbush.js +12 -16
- package/dist/classes/features/other/TaintedLazarusPlayers.js +10 -14
- package/dist/classes/features/other/UnlockAchievementsDetection.js +10 -14
- package/dist/classes/features/other/customStages/backdrop.js +68 -71
- package/dist/classes/features/other/customStages/constants.js +7 -10
- package/dist/classes/features/other/customStages/gridEntities.js +23 -30
- package/dist/classes/features/other/customStages/shadows.js +27 -30
- package/dist/classes/features/other/customStages/streakText.js +55 -60
- package/dist/classes/features/other/customStages/utils.js +13 -17
- package/dist/classes/features/other/customStages/v.js +4 -7
- package/dist/classes/features/other/customStages/versusScreen.js +46 -50
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +8 -12
- package/dist/classes/features/other/debugDisplay/utils.js +6 -10
- package/dist/classes/features/other/extraConsoleCommands/commands.js +411 -557
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +47 -57
- package/dist/classes/features/other/extraConsoleCommands/v.js +1 -4
- package/dist/classes/features/other/saveDataManager/constants.js +1 -4
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +17 -21
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +19 -22
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +20 -25
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +13 -16
- package/dist/classes/private/CustomCallback.js +4 -8
- package/dist/classes/private/Feature.js +1 -5
- package/dist/core/cachedClasses.js +12 -15
- package/dist/core/constants.js +126 -130
- package/dist/core/constantsFirstLast.js +22 -25
- package/dist/core/constantsVanilla.js +25 -28
- package/dist/core/upgradeMod.js +7 -10
- package/dist/decorators.js +6 -10
- package/dist/enums/AmbushType.js +2 -5
- package/dist/enums/CornerType.js +2 -5
- package/dist/enums/HealthType.js +2 -5
- package/dist/enums/ISCFeature.js +2 -5
- package/dist/enums/LadderSubTypeCustom.js +2 -5
- package/dist/enums/ModCallbackCustom.js +2 -5
- package/dist/enums/MysteriousPaperEffect.js +2 -5
- package/dist/enums/PlayerStat.js +2 -5
- package/dist/enums/PocketItemType.js +2 -5
- package/dist/enums/RockAltType.js +2 -5
- package/dist/enums/SaveDataKey.js +2 -5
- package/dist/enums/SerializationType.js +2 -5
- package/dist/enums/SlotDestructionType.js +2 -5
- package/dist/enums/private/GridEntityTypeCustom.js +1 -4
- package/dist/enums/private/SerializationBrand.js +2 -5
- package/dist/enums/private/StageTravelState.js +2 -5
- package/dist/enums/private/TrapdoorAnimation.js +2 -5
- package/dist/enums/private/UIStreakAnimation.js +2 -5
- package/dist/features.js +138 -141
- package/dist/functions/ambush.js +9 -12
- package/dist/functions/array.js +45 -76
- package/dist/functions/arrayLua.js +7 -16
- package/dist/functions/benchmark.js +4 -7
- package/dist/functions/bitSet128.js +19 -26
- package/dist/functions/bitwise.js +14 -23
- package/dist/functions/bombs.js +1 -4
- package/dist/functions/bosses.js +68 -85
- package/dist/functions/cards.js +44 -62
- package/dist/functions/challenges.js +28 -39
- package/dist/functions/characters.js +68 -87
- package/dist/functions/charge.js +41 -52
- package/dist/functions/chargeBar.js +2 -6
- package/dist/functions/collectibleTag.js +9 -13
- package/dist/functions/collectibles.js +133 -172
- package/dist/functions/color.js +29 -38
- package/dist/functions/console.js +4 -8
- package/dist/functions/curses.js +6 -10
- package/dist/functions/debugFunctions.js +7 -14
- package/dist/functions/decorators.js +13 -19
- package/dist/functions/deepCopy.js +96 -99
- package/dist/functions/deepCopyTests.js +56 -59
- package/dist/functions/dimensions.js +10 -14
- package/dist/functions/direction.js +22 -30
- package/dist/functions/doors.js +104 -154
- package/dist/functions/easing.js +30 -62
- package/dist/functions/effects.js +6 -10
- package/dist/functions/emptyRoom.js +30 -34
- package/dist/functions/entities.js +88 -115
- package/dist/functions/entitiesSpecific.js +83 -125
- package/dist/functions/entityTypes.js +3 -6
- package/dist/functions/enums.js +27 -41
- package/dist/functions/external.js +4 -8
- package/dist/functions/familiars.js +17 -25
- package/dist/functions/flag.js +10 -19
- package/dist/functions/frames.js +31 -51
- package/dist/functions/globals.js +26 -66
- package/dist/functions/gridEntities.js +231 -269
- package/dist/functions/gridEntitiesSpecific.js +86 -126
- package/dist/functions/gridIndex.js +8 -11
- package/dist/functions/hash.js +1 -4
- package/dist/functions/hex.js +7 -11
- package/dist/functions/input.js +65 -88
- package/dist/functions/isaacAPIClass.js +28 -53
- package/dist/functions/itemPool.js +39 -48
- package/dist/functions/jsonHelpers.js +5 -42
- package/dist/functions/jsonRoom.js +39 -46
- package/dist/functions/kColor.js +30 -39
- package/dist/functions/language.js +3 -6
- package/dist/functions/level.js +20 -26
- package/dist/functions/levelGrid.js +81 -108
- package/dist/functions/log.js +6 -12
- package/dist/functions/logEntities.js +49 -59
- package/dist/functions/logMisc.js +183 -214
- package/dist/functions/map.js +10 -20
- package/dist/functions/math.js +16 -31
- package/dist/functions/merge.js +48 -51
- package/dist/functions/mergeTests.js +34 -37
- package/dist/functions/minimap.js +34 -46
- package/dist/functions/modFeatures.js +1 -4
- package/dist/functions/newArray.js +5 -8
- package/dist/functions/nextStage.js +63 -67
- package/dist/functions/npcDataStructures.js +9 -20
- package/dist/functions/npcs.js +37 -45
- package/dist/functions/pickupVariants.js +26 -39
- package/dist/functions/pickups.js +43 -59
- package/dist/functions/pickupsSpecific.js +76 -118
- package/dist/functions/pills.js +52 -72
- package/dist/functions/playerCenter.js +13 -16
- package/dist/functions/playerCollectibles.js +59 -79
- package/dist/functions/playerDataStructures.js +18 -29
- package/dist/functions/playerEffects.js +12 -19
- package/dist/functions/playerHealth.js +91 -113
- package/dist/functions/playerIndex.js +22 -33
- package/dist/functions/playerTrinkets.js +31 -43
- package/dist/functions/players.js +87 -126
- package/dist/functions/pocketItems.js +33 -43
- package/dist/functions/positionVelocity.js +23 -32
- package/dist/functions/pressurePlate.js +7 -10
- package/dist/functions/projectiles.js +11 -15
- package/dist/functions/random.js +8 -13
- package/dist/functions/readOnly.js +3 -8
- package/dist/functions/render.js +7 -12
- package/dist/functions/revive.js +38 -45
- package/dist/functions/rng.js +31 -44
- package/dist/functions/rockAlt.js +18 -22
- package/dist/functions/roomData.js +24 -40
- package/dist/functions/roomGrid.js +17 -25
- package/dist/functions/roomShape.js +39 -55
- package/dist/functions/roomShapeWalls.js +67 -71
- package/dist/functions/roomTransition.js +13 -17
- package/dist/functions/rooms.js +181 -244
- package/dist/functions/run.js +29 -39
- package/dist/functions/seeds.js +6 -10
- package/dist/functions/serialization.js +27 -34
- package/dist/functions/set.js +24 -40
- package/dist/functions/slots.js +18 -22
- package/dist/functions/sort.js +9 -15
- package/dist/functions/sound.js +12 -16
- package/dist/functions/spawnCollectible.js +21 -26
- package/dist/functions/sprites.js +16 -24
- package/dist/functions/stage.js +122 -164
- package/dist/functions/stats.js +37 -43
- package/dist/functions/storyBosses.js +36 -40
- package/dist/functions/string.js +19 -33
- package/dist/functions/table.js +21 -31
- package/dist/functions/tears.js +6 -14
- package/dist/functions/transformations.js +35 -42
- package/dist/functions/trinketGive.js +29 -36
- package/dist/functions/trinkets.js +45 -60
- package/dist/functions/tstlClass.js +11 -20
- package/dist/functions/types.js +22 -46
- package/dist/functions/ui.js +25 -40
- package/dist/functions/utils.js +22 -36
- package/dist/functions/vector.js +33 -46
- package/dist/functions/versusScreen.js +12 -18
- package/dist/functions/weighted.js +8 -12
- package/dist/index.js +150 -166
- package/dist/indexLua.js +151 -167
- package/dist/interfaces/ChargeBarSprites.js +1 -2
- package/dist/interfaces/Corner.js +1 -2
- package/dist/interfaces/CustomStageTSConfig.js +1 -2
- package/dist/interfaces/GridEntityCustomData.js +1 -2
- package/dist/interfaces/JSONRoomsFile.js +1 -2
- package/dist/interfaces/PlayerHealth.js +1 -2
- package/dist/interfaces/PlayerStats.js +2 -4
- package/dist/interfaces/PocketItemDescription.js +1 -2
- package/dist/interfaces/RoomDescription.js +1 -2
- package/dist/interfaces/SaveData.js +1 -2
- package/dist/interfaces/StageHistoryEntry.js +1 -2
- package/dist/interfaces/TSTLClassMetatable.js +1 -2
- package/dist/interfaces/TrinketSituation.js +1 -2
- package/dist/interfaces/private/AddCallbackParametersCustom.js +2 -4
- package/dist/interfaces/private/CustomStage.js +1 -2
- package/dist/interfaces/private/CustomTrapdoorDescription.js +1 -2
- package/dist/interfaces/private/ModUpgradedInterface.js +1 -2
- package/dist/isaacscript-common.lua +1 -1
- package/dist/maps/PHDPillConversionsMap.js +19 -22
- package/dist/maps/cardNameToTypeMap.js +205 -208
- package/dist/maps/characterNameToTypeMap.js +85 -88
- package/dist/maps/collectibleNameToTypeMap.js +5 -8
- package/dist/maps/defaultPlayerStatMap.js +10 -13
- package/dist/maps/entityTypeVariantToBossIDMap.js +3 -6
- package/dist/maps/falsePHDPillConversionsMap.js +33 -36
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +15 -18
- package/dist/maps/gridEntityXMLMap.js +52 -55
- package/dist/maps/itemPoolTypeToItemPoolName.js +33 -36
- package/dist/maps/keyboardToStringMap.js +66 -69
- package/dist/maps/pillNameToEffectMap.js +83 -86
- package/dist/maps/roomNameToTypeMap.js +38 -41
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +9 -12
- package/dist/maps/transformationNameToPlayerFormMap.js +30 -33
- package/dist/maps/trinketNameToTypeMap.js +5 -8
- package/dist/objects/LRoomShapeToRectangles.js +22 -25
- package/dist/objects/backdropTypeToRockAltType.js +65 -68
- package/dist/objects/batteryNames.js +8 -11
- package/dist/objects/bombNames.js +11 -14
- package/dist/objects/bossIDToEntityTypeVariant.js +116 -119
- package/dist/objects/bossNamePNGFileNames.js +104 -107
- package/dist/objects/bossNames.js +105 -108
- package/dist/objects/bossPortraitPNGFileNames.js +104 -107
- package/dist/objects/cardDescriptions.js +101 -104
- package/dist/objects/cardNames.js +101 -104
- package/dist/objects/challengeBosses.js +49 -52
- package/dist/objects/challengeCharacters.js +49 -52
- package/dist/objects/challengeCollectibleTypes.js +160 -163
- package/dist/objects/challengeNames.js +49 -52
- package/dist/objects/challengeTrinketType.js +48 -51
- package/dist/objects/characterDamageMultipliers.js +44 -47
- package/dist/objects/characterNames.js +44 -47
- package/dist/objects/characterSpritePNGFileNames.js +44 -47
- package/dist/objects/characterStartingCollectibleTypes.js +49 -52
- package/dist/objects/characterStartingTrinketTypes.js +44 -47
- package/dist/objects/chestNames.js +15 -18
- package/dist/objects/coinNames.js +11 -14
- package/dist/objects/coinSubTypeToValue.js +11 -14
- package/dist/objects/collectibleDescriptions.js +725 -728
- package/dist/objects/collectibleNames.js +725 -728
- package/dist/objects/colors.js +1 -4
- package/dist/objects/directionNames.js +7 -10
- package/dist/objects/directionToDegrees.js +7 -10
- package/dist/objects/directionToMoveAction.js +7 -10
- package/dist/objects/directionToShootAction.js +7 -10
- package/dist/objects/directionToVector.js +9 -12
- package/dist/objects/doorSlotFlagToDoorSlot.js +11 -14
- package/dist/objects/doorSlotToDirection.js +11 -14
- package/dist/objects/doorSlotToDoorSlotFlag.js +11 -14
- package/dist/objects/gridEntityTypeToANM2Name.js +30 -33
- package/dist/objects/heartNames.js +16 -19
- package/dist/objects/isaacAPIClassTypeToBrand.js +8 -11
- package/dist/objects/isaacAPIClassTypeToFunctions.js +37 -40
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +9 -45
- package/dist/objects/kColors.js +1 -4
- package/dist/objects/keyNames.js +8 -11
- package/dist/objects/languageNames.js +9 -12
- package/dist/objects/oppositeDoorSlots.js +11 -14
- package/dist/objects/pillEffectClasses.js +53 -56
- package/dist/objects/pillEffectNames.js +53 -56
- package/dist/objects/pillEffectTypeToPillEffects.js +11 -14
- package/dist/objects/pillEffectTypes.js +53 -56
- package/dist/objects/playerNamePNGFileNames.js +44 -47
- package/dist/objects/playerPortraitPNGFileNames.js +44 -47
- package/dist/objects/roomShapeBounds.js +23 -26
- package/dist/objects/roomShapeCorners.js +128 -131
- package/dist/objects/roomShapeLayoutSizes.js +23 -26
- package/dist/objects/roomShapeToBottomRightPosition.js +17 -20
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +78 -81
- package/dist/objects/roomShapeToDoorSlots.js +48 -51
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +82 -85
- package/dist/objects/roomShapeToGridWidth.js +14 -17
- package/dist/objects/roomShapeToTopLeftPosition.js +18 -21
- package/dist/objects/roomShapeVolumes.js +21 -24
- package/dist/objects/roomTypeNames.js +32 -35
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +32 -35
- package/dist/objects/sackNames.js +6 -9
- package/dist/objects/slotNames.js +21 -24
- package/dist/objects/stageIDNames.js +33 -36
- package/dist/objects/stageToMusic.js +69 -72
- package/dist/objects/stageToStageID.js +90 -93
- package/dist/objects/stageTypeSuffixes.js +8 -11
- package/dist/objects/transformationNames.js +16 -19
- package/dist/objects/trinketDescriptions.js +192 -195
- package/dist/objects/trinketNames.js +192 -195
- package/dist/objects/versusScreenBackgroundColors.js +39 -42
- package/dist/objects/versusScreenDirtSpotColors.js +39 -42
- package/dist/patchErrorFunctions.js +4 -7
- package/dist/serialization.js +6 -9
- package/dist/sets/LRoomShapesSet.js +7 -10
- package/dist/sets/bigRoomShapesSet.js +10 -13
- package/dist/sets/bossSets.js +261 -264
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +14 -17
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +5 -8
- package/dist/sets/charactersWithFreeDevilDealsSet.js +3 -6
- package/dist/sets/charactersWithNoRedHeartsSet.js +11 -14
- package/dist/sets/charactersWithNoSoulHeartsSet.js +8 -11
- package/dist/sets/consoleCommandsSet.js +2 -5
- package/dist/sets/entitiesWithArmorSet.js +44 -47
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +11 -14
- package/dist/sets/itemConfigCardTypesForCards.js +7 -10
- package/dist/sets/lostStyleCharactersSet.js +8 -11
- package/dist/sets/mineShaftRoomSubTypesSet.js +8 -11
- package/dist/sets/narrowRoomShapesSet.js +7 -10
- package/dist/sets/poopGridEntityXMLTypesSet.js +12 -15
- package/dist/sets/redHeartSubTypesSet.js +6 -9
- package/dist/sets/repentanceBossIDsSet.js +26 -29
- package/dist/sets/sinEntityTypesSet.js +10 -13
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +11 -14
- package/dist/shaderCrashFix.js +4 -7
- package/dist/shouldFire.js +28 -58
- package/dist/types/AddSubtract.js +1 -2
- package/dist/types/AllButFirst.js +1 -2
- package/dist/types/AllButLast.js +1 -2
- package/dist/types/AnyClass.js +1 -2
- package/dist/types/AnyEntity.js +1 -2
- package/dist/types/AnyFunction.js +1 -2
- package/dist/types/AnyGridEntity.js +1 -2
- package/dist/types/CompositionTypeSatisfiesEnum.js +1 -2
- package/dist/types/ConversionHeartSubType.js +1 -2
- package/dist/types/Decrement.js +1 -2
- package/dist/types/ERange.js +1 -2
- package/dist/types/EntityID.js +1 -2
- package/dist/types/FunctionTuple.js +1 -2
- package/dist/types/GridEntityID.js +1 -2
- package/dist/types/HasFunction.js +1 -2
- package/dist/types/IRange.js +1 -2
- package/dist/types/Immutable.js +1 -2
- package/dist/types/Increment.js +1 -2
- package/dist/types/LowercaseKeys.js +1 -2
- package/dist/types/NaturalNumbersLessThan.js +1 -2
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +1 -2
- package/dist/types/ObjectValues.js +1 -2
- package/dist/types/PickingUpItem.js +15 -22
- package/dist/types/PickupIndex.js +1 -2
- package/dist/types/PlayerIndex.js +1 -2
- package/dist/types/PossibleStatType.js +1 -2
- package/dist/types/PublicInterface.js +1 -2
- package/dist/types/ReadonlyMap.js +1 -4
- package/dist/types/ReadonlyRecord.js +1 -2
- package/dist/types/ReadonlySet.js +1 -4
- package/dist/types/StartsWithLowercase.js +1 -2
- package/dist/types/StartsWithUppercase.js +1 -2
- package/dist/types/TSTLClass.js +1 -2
- package/dist/types/Tuple.js +1 -2
- package/dist/types/TupleKeys.js +1 -2
- package/dist/types/TupleToIntersection.js +1 -2
- package/dist/types/TupleToUnion.js +1 -2
- package/dist/types/TupleWithLengthBetween.js +1 -2
- package/dist/types/TupleWithMaxLength.js +1 -2
- package/dist/types/UnionToIntersection.js +1 -2
- package/dist/types/UppercaseKeys.js +1 -2
- package/dist/types/WeightedArray.js +1 -2
- package/dist/types/WidenLiteral.js +1 -2
- package/dist/types/Writable.js +1 -2
- package/dist/types/private/CallbackTuple.js +1 -2
- package/dist/types/private/ModUpgradedWithFeatures.js +1 -2
- package/package.json +3 -3
package/dist/functions/doors.js
CHANGED
|
@@ -1,71 +1,21 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
exports.getDoorSlotsForRoomShape = getDoorSlotsForRoomShape;
|
|
20
|
-
exports.getDoorsToRoomIndex = getDoorsToRoomIndex;
|
|
21
|
-
exports.getMegaSatanDoor = getMegaSatanDoor;
|
|
22
|
-
exports.getOppositeDoorSlot = getOppositeDoorSlot;
|
|
23
|
-
exports.getRepentanceDoor = getRepentanceDoor;
|
|
24
|
-
exports.getRoomShapeDoorSlot = getRoomShapeDoorSlot;
|
|
25
|
-
exports.getRoomShapeDoorSlotCoordinates = getRoomShapeDoorSlotCoordinates;
|
|
26
|
-
exports.getUnusedDoorSlots = getUnusedDoorSlots;
|
|
27
|
-
exports.getVoidDoor = getVoidDoor;
|
|
28
|
-
exports.hasDoorType = hasDoorType;
|
|
29
|
-
exports.hasUnusedDoorSlot = hasUnusedDoorSlot;
|
|
30
|
-
exports.isAngelRoomDoor = isAngelRoomDoor;
|
|
31
|
-
exports.isBlueWombDoor = isBlueWombDoor;
|
|
32
|
-
exports.isBossRushDoor = isBossRushDoor;
|
|
33
|
-
exports.isDevilRoomDoor = isDevilRoomDoor;
|
|
34
|
-
exports.isDoorSlotInRoomShape = isDoorSlotInRoomShape;
|
|
35
|
-
exports.isDoorToDownpour = isDoorToDownpour;
|
|
36
|
-
exports.isDoorToMausoleum = isDoorToMausoleum;
|
|
37
|
-
exports.isDoorToMausoleumAscent = isDoorToMausoleumAscent;
|
|
38
|
-
exports.isDoorToMines = isDoorToMines;
|
|
39
|
-
exports.isDoorToMomsHeart = isDoorToMomsHeart;
|
|
40
|
-
exports.isHiddenSecretRoomDoor = isHiddenSecretRoomDoor;
|
|
41
|
-
exports.isMegaSatanDoor = isMegaSatanDoor;
|
|
42
|
-
exports.isRepentanceDoor = isRepentanceDoor;
|
|
43
|
-
exports.isSecretRoomDoor = isSecretRoomDoor;
|
|
44
|
-
exports.isVoidDoor = isVoidDoor;
|
|
45
|
-
exports.lockDoor = lockDoor;
|
|
46
|
-
exports.openAllDoors = openAllDoors;
|
|
47
|
-
exports.openDoorFast = openDoorFast;
|
|
48
|
-
exports.removeAllDoors = removeAllDoors;
|
|
49
|
-
exports.removeDoor = removeDoor;
|
|
50
|
-
exports.removeDoors = removeDoors;
|
|
51
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
52
|
-
const cachedEnumValues_1 = require("../cachedEnumValues");
|
|
53
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
54
|
-
const constants_1 = require("../core/constants");
|
|
55
|
-
const doorSlotFlagToDoorSlot_1 = require("../objects/doorSlotFlagToDoorSlot");
|
|
56
|
-
const doorSlotToDirection_1 = require("../objects/doorSlotToDirection");
|
|
57
|
-
const doorSlotToDoorSlotFlag_1 = require("../objects/doorSlotToDoorSlotFlag");
|
|
58
|
-
const oppositeDoorSlots_1 = require("../objects/oppositeDoorSlots");
|
|
59
|
-
const roomShapeToDoorSlotCoordinates_1 = require("../objects/roomShapeToDoorSlotCoordinates");
|
|
60
|
-
const roomShapeToDoorSlots_1 = require("../objects/roomShapeToDoorSlots");
|
|
61
|
-
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
62
|
-
const bitwise_1 = require("./bitwise");
|
|
63
|
-
const direction_1 = require("./direction");
|
|
64
|
-
const enums_1 = require("./enums");
|
|
65
|
-
const flag_1 = require("./flag");
|
|
66
|
-
const tstlClass_1 = require("./tstlClass");
|
|
67
|
-
const types_1 = require("./types");
|
|
68
|
-
function closeAllDoors() {
|
|
1
|
+
import { DoorSlot, DoorState, DoorVariant, GridEntityType, GridRoom, RoomType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { DOOR_SLOT_FLAG_VALUES, DOOR_SLOT_VALUES } from "../cachedEnumValues";
|
|
3
|
+
import { game } from "../core/cachedClasses";
|
|
4
|
+
import { DISTANCE_OF_GRID_TILE } from "../core/constants";
|
|
5
|
+
import { DEFAULT_DOOR_SLOT, DOOR_SLOT_FLAG_TO_DOOR_SLOT, } from "../objects/doorSlotFlagToDoorSlot";
|
|
6
|
+
import { DOOR_SLOT_TO_DIRECTION } from "../objects/doorSlotToDirection";
|
|
7
|
+
import { DOOR_SLOT_TO_DOOR_SLOT_FLAG } from "../objects/doorSlotToDoorSlotFlag";
|
|
8
|
+
import { OPPOSITE_DOOR_SLOTS } from "../objects/oppositeDoorSlots";
|
|
9
|
+
import { ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES } from "../objects/roomShapeToDoorSlotCoordinates";
|
|
10
|
+
import { ROOM_SHAPE_TO_DOOR_SLOTS } from "../objects/roomShapeToDoorSlots";
|
|
11
|
+
import { ReadonlySet } from "../types/ReadonlySet";
|
|
12
|
+
import { arrayToBitFlags } from "./bitwise";
|
|
13
|
+
import { directionToVector } from "./direction";
|
|
14
|
+
import { isEnumValue } from "./enums";
|
|
15
|
+
import { hasFlag } from "./flag";
|
|
16
|
+
import { isTSTLSet } from "./tstlClass";
|
|
17
|
+
import { parseIntSafe } from "./types";
|
|
18
|
+
export function closeAllDoors() {
|
|
69
19
|
for (const door of getDoors()) {
|
|
70
20
|
door.Close(true);
|
|
71
21
|
}
|
|
@@ -74,15 +24,15 @@ function closeAllDoors() {
|
|
|
74
24
|
* Use this instead of the `GridEntityDoor.Close` method if you want the door to immediately close
|
|
75
25
|
* without an animation.
|
|
76
26
|
*/
|
|
77
|
-
function closeDoorFast(door) {
|
|
78
|
-
door.State =
|
|
27
|
+
export function closeDoorFast(door) {
|
|
28
|
+
door.State = DoorState.CLOSED;
|
|
79
29
|
const sprite = door.GetSprite();
|
|
80
30
|
sprite.Play("Closed", true);
|
|
81
31
|
}
|
|
82
|
-
function doorSlotFlagsToDoorSlots(doorSlotFlags) {
|
|
32
|
+
export function doorSlotFlagsToDoorSlots(doorSlotFlags) {
|
|
83
33
|
const doorSlots = [];
|
|
84
|
-
for (const doorSlotFlag of
|
|
85
|
-
if (!
|
|
34
|
+
for (const doorSlotFlag of DOOR_SLOT_FLAG_VALUES) {
|
|
35
|
+
if (!hasFlag(doorSlotFlags, doorSlotFlag)) {
|
|
86
36
|
continue;
|
|
87
37
|
}
|
|
88
38
|
const doorSlot = doorSlotFlagToDoorSlot(doorSlotFlag);
|
|
@@ -90,30 +40,30 @@ function doorSlotFlagsToDoorSlots(doorSlotFlags) {
|
|
|
90
40
|
}
|
|
91
41
|
return doorSlots;
|
|
92
42
|
}
|
|
93
|
-
function doorSlotFlagToDoorSlot(doorSlotFlag) {
|
|
94
|
-
const doorSlot =
|
|
95
|
-
return doorSlot ??
|
|
43
|
+
export function doorSlotFlagToDoorSlot(doorSlotFlag) {
|
|
44
|
+
const doorSlot = DOOR_SLOT_FLAG_TO_DOOR_SLOT[doorSlotFlag];
|
|
45
|
+
return doorSlot ?? DEFAULT_DOOR_SLOT;
|
|
96
46
|
}
|
|
97
47
|
/**
|
|
98
48
|
* Helper function to convert an array of door slots or a set of door slots to the resulting bit
|
|
99
49
|
* flag number.
|
|
100
50
|
*/
|
|
101
|
-
function doorSlotsToDoorSlotFlags(doorSlots) {
|
|
51
|
+
export function doorSlotsToDoorSlotFlags(doorSlots) {
|
|
102
52
|
const doorSlotsMutable = doorSlots;
|
|
103
|
-
const doorSlotArray =
|
|
53
|
+
const doorSlotArray = isTSTLSet(doorSlotsMutable)
|
|
104
54
|
? [...doorSlotsMutable]
|
|
105
55
|
: doorSlotsMutable;
|
|
106
56
|
const doorSlotFlagArray = doorSlotArray.map((doorSlot) => doorSlotToDoorSlotFlag(doorSlot));
|
|
107
|
-
return
|
|
57
|
+
return arrayToBitFlags(doorSlotFlagArray);
|
|
108
58
|
}
|
|
109
|
-
function doorSlotToDirection(doorSlot) {
|
|
110
|
-
return
|
|
59
|
+
export function doorSlotToDirection(doorSlot) {
|
|
60
|
+
return DOOR_SLOT_TO_DIRECTION[doorSlot];
|
|
111
61
|
}
|
|
112
|
-
function doorSlotToDoorSlotFlag(doorSlot) {
|
|
113
|
-
return
|
|
62
|
+
export function doorSlotToDoorSlotFlag(doorSlot) {
|
|
63
|
+
return DOOR_SLOT_TO_DOOR_SLOT_FLAG[doorSlot];
|
|
114
64
|
}
|
|
115
|
-
function getAngelRoomDoor() {
|
|
116
|
-
const angelRoomDoors = getDoors(
|
|
65
|
+
export function getAngelRoomDoor() {
|
|
66
|
+
const angelRoomDoors = getDoors(RoomType.ANGEL);
|
|
117
67
|
return angelRoomDoors.length === 0 ? undefined : angelRoomDoors[0];
|
|
118
68
|
}
|
|
119
69
|
/**
|
|
@@ -122,7 +72,7 @@ function getAngelRoomDoor() {
|
|
|
122
72
|
*
|
|
123
73
|
* Returns undefined if the room has no Blue Womb doors.
|
|
124
74
|
*/
|
|
125
|
-
function getBlueWombDoor() {
|
|
75
|
+
export function getBlueWombDoor() {
|
|
126
76
|
const doors = getDoors();
|
|
127
77
|
return doors.find((door) => isBlueWombDoor(door));
|
|
128
78
|
}
|
|
@@ -132,20 +82,20 @@ function getBlueWombDoor() {
|
|
|
132
82
|
*
|
|
133
83
|
* Returns undefined if the room has no Boss Rush doors.
|
|
134
84
|
*/
|
|
135
|
-
function getBossRushDoor() {
|
|
85
|
+
export function getBossRushDoor() {
|
|
136
86
|
const doors = getDoors();
|
|
137
87
|
return doors.find((door) => isBossRushDoor(door));
|
|
138
88
|
}
|
|
139
|
-
function getDevilRoomDoor() {
|
|
140
|
-
const devilRoomDoors = getDoors(
|
|
89
|
+
export function getDevilRoomDoor() {
|
|
90
|
+
const devilRoomDoors = getDoors(RoomType.DEVIL);
|
|
141
91
|
return devilRoomDoors.length === 0 ? undefined : devilRoomDoors[0];
|
|
142
92
|
}
|
|
143
93
|
/**
|
|
144
94
|
* If there is both a Devil Room and an Angel Room door, this function will return door with the
|
|
145
95
|
* lowest slot number.
|
|
146
96
|
*/
|
|
147
|
-
function getDevilRoomOrAngelRoomDoor() {
|
|
148
|
-
const devilRoomOrAngelRoomDoors = getDoors(
|
|
97
|
+
export function getDevilRoomOrAngelRoomDoor() {
|
|
98
|
+
const devilRoomOrAngelRoomDoors = getDoors(RoomType.DEVIL, RoomType.ANGEL);
|
|
149
99
|
return devilRoomOrAngelRoomDoors.length === 0
|
|
150
100
|
? undefined
|
|
151
101
|
: devilRoomOrAngelRoomDoors[0];
|
|
@@ -157,7 +107,7 @@ function getDevilRoomOrAngelRoomDoor() {
|
|
|
157
107
|
* they would immediately collide with the loading zone. Instead, they appear on the grid tile next
|
|
158
108
|
* to the door.
|
|
159
109
|
*/
|
|
160
|
-
function getDoorEnterPosition(door) {
|
|
110
|
+
export function getDoorEnterPosition(door) {
|
|
161
111
|
const offset = getDoorSlotEnterPositionOffset(door.Slot);
|
|
162
112
|
return door.Position.add(offset);
|
|
163
113
|
}
|
|
@@ -169,10 +119,10 @@ function getDoorEnterPosition(door) {
|
|
|
169
119
|
*
|
|
170
120
|
* @allowEmptyVariadic
|
|
171
121
|
*/
|
|
172
|
-
function getDoors(...roomTypes) {
|
|
173
|
-
const room =
|
|
122
|
+
export function getDoors(...roomTypes) {
|
|
123
|
+
const room = game.GetRoom();
|
|
174
124
|
const roomShape = room.GetRoomShape();
|
|
175
|
-
const roomTypesSet = new
|
|
125
|
+
const roomTypesSet = new ReadonlySet(roomTypes);
|
|
176
126
|
// We iterate over the possible door slots for this room shape instead of all door slots in order
|
|
177
127
|
// to prevent crashes from accessing invalid memory.
|
|
178
128
|
const possibleDoorSlots = getDoorSlotsForRoomShape(roomShape);
|
|
@@ -184,7 +134,7 @@ function getDoors(...roomTypes) {
|
|
|
184
134
|
}
|
|
185
135
|
// In Repentance, sometimes doors won't be doors for some reason.
|
|
186
136
|
const gridEntityType = door.GetType();
|
|
187
|
-
if (gridEntityType !==
|
|
137
|
+
if (gridEntityType !== GridEntityType.DOOR) {
|
|
188
138
|
continue;
|
|
189
139
|
}
|
|
190
140
|
if (roomTypesSet.size === 0 || roomTypesSet.has(door.TargetRoomType)) {
|
|
@@ -201,8 +151,8 @@ function getDoors(...roomTypes) {
|
|
|
201
151
|
* they would immediately collide with the loading zone. Instead, they appear on the grid tile next
|
|
202
152
|
* to the door.
|
|
203
153
|
*/
|
|
204
|
-
function getDoorSlotEnterPosition(doorSlot) {
|
|
205
|
-
const room =
|
|
154
|
+
export function getDoorSlotEnterPosition(doorSlot) {
|
|
155
|
+
const room = game.GetRoom();
|
|
206
156
|
const position = room.GetDoorSlotPosition(doorSlot);
|
|
207
157
|
const offset = getDoorSlotEnterPositionOffset(doorSlot);
|
|
208
158
|
return position.add(offset);
|
|
@@ -214,16 +164,16 @@ function getDoorSlotEnterPosition(doorSlot) {
|
|
|
214
164
|
* they would immediately collide with the loading zone. Instead, they appear on the grid tile next
|
|
215
165
|
* to the door.
|
|
216
166
|
*/
|
|
217
|
-
function getDoorSlotEnterPositionOffset(doorSlot) {
|
|
167
|
+
export function getDoorSlotEnterPositionOffset(doorSlot) {
|
|
218
168
|
const direction = doorSlotToDirection(doorSlot);
|
|
219
|
-
const vector =
|
|
169
|
+
const vector = directionToVector(direction);
|
|
220
170
|
// The player appears in the opposite direction of the way that the door is oriented in the room.
|
|
221
171
|
const oppositeVector = vector.mul(-1);
|
|
222
|
-
return oppositeVector.mul(
|
|
172
|
+
return oppositeVector.mul(DISTANCE_OF_GRID_TILE);
|
|
223
173
|
}
|
|
224
174
|
/** Helper function to get the possible door slots that can exist for a given room shape. */
|
|
225
|
-
function getDoorSlotsForRoomShape(roomShape) {
|
|
226
|
-
return
|
|
175
|
+
export function getDoorSlotsForRoomShape(roomShape) {
|
|
176
|
+
return ROOM_SHAPE_TO_DOOR_SLOTS[roomShape];
|
|
227
177
|
}
|
|
228
178
|
/**
|
|
229
179
|
* Helper function to get all of the doors in the room that lead to the provided room index.
|
|
@@ -231,8 +181,8 @@ function getDoorSlotsForRoomShape(roomShape) {
|
|
|
231
181
|
* This function is variadic, meaning that you can specify N arguments to return all of the doors
|
|
232
182
|
* that match any of the N room grid indexes.
|
|
233
183
|
*/
|
|
234
|
-
function getDoorsToRoomIndex(...roomGridIndex) {
|
|
235
|
-
const roomGridIndexesSet = new
|
|
184
|
+
export function getDoorsToRoomIndex(...roomGridIndex) {
|
|
185
|
+
const roomGridIndexesSet = new ReadonlySet(roomGridIndex);
|
|
236
186
|
const doors = getDoors();
|
|
237
187
|
return doors.filter((door) => roomGridIndexesSet.has(door.TargetRoomIndex));
|
|
238
188
|
}
|
|
@@ -242,12 +192,12 @@ function getDoorsToRoomIndex(...roomGridIndex) {
|
|
|
242
192
|
*
|
|
243
193
|
* Returns undefined if the room has no Mega Satan doors.
|
|
244
194
|
*/
|
|
245
|
-
function getMegaSatanDoor() {
|
|
195
|
+
export function getMegaSatanDoor() {
|
|
246
196
|
const doors = getDoors();
|
|
247
197
|
return doors.find((door) => isMegaSatanDoor(door));
|
|
248
198
|
}
|
|
249
|
-
function getOppositeDoorSlot(doorSlot) {
|
|
250
|
-
return
|
|
199
|
+
export function getOppositeDoorSlot(doorSlot) {
|
|
200
|
+
return OPPOSITE_DOOR_SLOTS[doorSlot];
|
|
251
201
|
}
|
|
252
202
|
/**
|
|
253
203
|
* Helper function to get the door that leads to the "secret exit" off-grid room that takes you to
|
|
@@ -255,18 +205,18 @@ function getOppositeDoorSlot(doorSlot) {
|
|
|
255
205
|
*
|
|
256
206
|
* Returns undefined if the room has no Repentance doors.
|
|
257
207
|
*/
|
|
258
|
-
function getRepentanceDoor() {
|
|
208
|
+
export function getRepentanceDoor() {
|
|
259
209
|
const doors = getDoors();
|
|
260
210
|
return doors.find((door) => isRepentanceDoor(door));
|
|
261
211
|
}
|
|
262
212
|
/**
|
|
263
213
|
* Helper function to get the corresponding door slot for a given room shape and grid coordinates.
|
|
264
214
|
*/
|
|
265
|
-
function getRoomShapeDoorSlot(roomShape, x, y) {
|
|
266
|
-
const doorSlotCoordinates =
|
|
215
|
+
export function getRoomShapeDoorSlot(roomShape, x, y) {
|
|
216
|
+
const doorSlotCoordinates = ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES[roomShape];
|
|
267
217
|
for (const [doorSlotString, coordinates] of Object.entries(doorSlotCoordinates)) {
|
|
268
|
-
const doorSlot =
|
|
269
|
-
if (doorSlot === undefined || !
|
|
218
|
+
const doorSlot = parseIntSafe(doorSlotString);
|
|
219
|
+
if (doorSlot === undefined || !isEnumValue(doorSlot, DoorSlot)) {
|
|
270
220
|
continue;
|
|
271
221
|
}
|
|
272
222
|
const [doorX, doorY] = coordinates;
|
|
@@ -280,19 +230,19 @@ function getRoomShapeDoorSlot(roomShape, x, y) {
|
|
|
280
230
|
* Helper function to get the room grid coordinates for a specific room shape and door slot
|
|
281
231
|
* combination.
|
|
282
232
|
*/
|
|
283
|
-
function getRoomShapeDoorSlotCoordinates(roomShape, doorSlot) {
|
|
284
|
-
const doorSlotCoordinates =
|
|
233
|
+
export function getRoomShapeDoorSlotCoordinates(roomShape, doorSlot) {
|
|
234
|
+
const doorSlotCoordinates = ROOM_SHAPE_TO_DOOR_SLOT_COORDINATES[roomShape];
|
|
285
235
|
return doorSlotCoordinates[doorSlot];
|
|
286
236
|
}
|
|
287
237
|
/**
|
|
288
238
|
* Helper function to find unused door slots in the current room that can be used to make custom
|
|
289
239
|
* doors.
|
|
290
240
|
*/
|
|
291
|
-
function getUnusedDoorSlots() {
|
|
292
|
-
const room =
|
|
293
|
-
return
|
|
241
|
+
export function getUnusedDoorSlots() {
|
|
242
|
+
const room = game.GetRoom();
|
|
243
|
+
return DOOR_SLOT_VALUES.filter((doorSlot) =>
|
|
294
244
|
// We need to filter out the -1 value to prevent crashes.
|
|
295
|
-
doorSlot !==
|
|
245
|
+
doorSlot !== DoorSlot.NO_DOOR_SLOT
|
|
296
246
|
&& room.IsDoorSlotAllowed(doorSlot)
|
|
297
247
|
&& room.GetDoor(doorSlot) === undefined);
|
|
298
248
|
}
|
|
@@ -302,7 +252,7 @@ function getUnusedDoorSlots() {
|
|
|
302
252
|
*
|
|
303
253
|
* Returns undefined if the room has no Void doors.
|
|
304
254
|
*/
|
|
305
|
-
function getVoidDoor() {
|
|
255
|
+
export function getVoidDoor() {
|
|
306
256
|
const doors = getDoors();
|
|
307
257
|
return doors.find((door) => isVoidDoor(door));
|
|
308
258
|
}
|
|
@@ -313,7 +263,7 @@ function getVoidDoor() {
|
|
|
313
263
|
* This function is variadic, meaning that you can supply as many door types as you want to check
|
|
314
264
|
* for. This function will return true if one or more room types match.
|
|
315
265
|
*/
|
|
316
|
-
function hasDoorType(...roomTypes) {
|
|
266
|
+
export function hasDoorType(...roomTypes) {
|
|
317
267
|
const doors = getDoors();
|
|
318
268
|
const doorsOfThisRoomType = doors.filter((door) => roomTypes.some((roomType) => door.IsRoomType(roomType)));
|
|
319
269
|
return doorsOfThisRoomType.length > 0;
|
|
@@ -322,35 +272,35 @@ function hasDoorType(...roomTypes) {
|
|
|
322
272
|
* Helper function to check if the current room has one or more open door slots that can be used to
|
|
323
273
|
* make custom doors.
|
|
324
274
|
*/
|
|
325
|
-
function hasUnusedDoorSlot() {
|
|
275
|
+
export function hasUnusedDoorSlot() {
|
|
326
276
|
const unusedDoorSlots = getUnusedDoorSlots();
|
|
327
277
|
return unusedDoorSlots.length > 0;
|
|
328
278
|
}
|
|
329
|
-
function isAngelRoomDoor(door) {
|
|
330
|
-
return door.TargetRoomType ===
|
|
279
|
+
export function isAngelRoomDoor(door) {
|
|
280
|
+
return door.TargetRoomType === RoomType.ANGEL;
|
|
331
281
|
}
|
|
332
282
|
/**
|
|
333
283
|
* Helper function to check if the provided door is the one that leads to the off-grid room that
|
|
334
284
|
* contains the hole to the Blue Womb. (In vanilla, the door will only appear in the It Lives Boss
|
|
335
285
|
* Room.)
|
|
336
286
|
*/
|
|
337
|
-
function isBlueWombDoor(door) {
|
|
287
|
+
export function isBlueWombDoor(door) {
|
|
338
288
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
339
|
-
return door.TargetRoomIndex ===
|
|
289
|
+
return door.TargetRoomIndex === GridRoom.BLUE_WOMB;
|
|
340
290
|
}
|
|
341
291
|
/**
|
|
342
292
|
* Helper function to check if the provided door is the one that leads to the Boss Rush room. (In
|
|
343
293
|
* vanilla, the door will only appear in the Boss Room of the sixth floor.)
|
|
344
294
|
*/
|
|
345
|
-
function isBossRushDoor(door) {
|
|
295
|
+
export function isBossRushDoor(door) {
|
|
346
296
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
347
|
-
return door.TargetRoomIndex ===
|
|
297
|
+
return door.TargetRoomIndex === GridRoom.BOSS_RUSH;
|
|
348
298
|
}
|
|
349
|
-
function isDevilRoomDoor(door) {
|
|
350
|
-
return door.TargetRoomType ===
|
|
299
|
+
export function isDevilRoomDoor(door) {
|
|
300
|
+
return door.TargetRoomType === RoomType.DEVIL;
|
|
351
301
|
}
|
|
352
302
|
/** Helper function to see if a door slot could exist for a given room shape. */
|
|
353
|
-
function isDoorSlotInRoomShape(doorSlot, roomShape) {
|
|
303
|
+
export function isDoorSlotInRoomShape(doorSlot, roomShape) {
|
|
354
304
|
const doorSlots = getDoorSlotsForRoomShape(roomShape);
|
|
355
305
|
return doorSlots.has(doorSlot);
|
|
356
306
|
}
|
|
@@ -358,7 +308,7 @@ function isDoorSlotInRoomShape(doorSlot, roomShape) {
|
|
|
358
308
|
* This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
|
|
359
309
|
* to spend one key to open it. It has a sprite filename of "gfx/grid/door_downpour.anm2".
|
|
360
310
|
*/
|
|
361
|
-
function isDoorToDownpour(door) {
|
|
311
|
+
export function isDoorToDownpour(door) {
|
|
362
312
|
if (!isRepentanceDoor(door)) {
|
|
363
313
|
return false;
|
|
364
314
|
}
|
|
@@ -371,7 +321,7 @@ function isDoorToDownpour(door) {
|
|
|
371
321
|
* This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
|
|
372
322
|
* to spend two hearts to open it. It has a sprite filename of "gfx/grid/door_mausoleum.anm2".
|
|
373
323
|
*/
|
|
374
|
-
function isDoorToMausoleum(door) {
|
|
324
|
+
export function isDoorToMausoleum(door) {
|
|
375
325
|
if (!isRepentanceDoor(door)) {
|
|
376
326
|
return false;
|
|
377
327
|
}
|
|
@@ -384,7 +334,7 @@ function isDoorToMausoleum(door) {
|
|
|
384
334
|
* This refers to the "strange door" located on the first room of Depths 2. You open it with either
|
|
385
335
|
* a Polaroid or a Negative. It has a sprite filename of "gfx/grid/door_mausoleum_alt.anm2".
|
|
386
336
|
*/
|
|
387
|
-
function isDoorToMausoleumAscent(door) {
|
|
337
|
+
export function isDoorToMausoleumAscent(door) {
|
|
388
338
|
if (!isRepentanceDoor(door)) {
|
|
389
339
|
return false;
|
|
390
340
|
}
|
|
@@ -397,7 +347,7 @@ function isDoorToMausoleumAscent(door) {
|
|
|
397
347
|
* This refers to the Repentance door that spawns in a boss room after defeating the boss. You have
|
|
398
348
|
* to spend two bombs to open it. It has a sprite filename of "gfx/grid/door_mines.anm2".
|
|
399
349
|
*/
|
|
400
|
-
function isDoorToMines(door) {
|
|
350
|
+
export function isDoorToMines(door) {
|
|
401
351
|
if (!isRepentanceDoor(door)) {
|
|
402
352
|
return false;
|
|
403
353
|
}
|
|
@@ -410,7 +360,7 @@ function isDoorToMines(door) {
|
|
|
410
360
|
* This refers to the Repentance door that spawns after defeating Mom. You open it with the
|
|
411
361
|
* completed knife. It has a sprite filename of "gfx/grid/door_momsheart.anm2".
|
|
412
362
|
*/
|
|
413
|
-
function isDoorToMomsHeart(door) {
|
|
363
|
+
export function isDoorToMomsHeart(door) {
|
|
414
364
|
if (!isRepentanceDoor(door)) {
|
|
415
365
|
return false;
|
|
416
366
|
}
|
|
@@ -419,7 +369,7 @@ function isDoorToMomsHeart(door) {
|
|
|
419
369
|
// On Windows, this is: "gfx/grid/Door_MomsHeart.anm2"
|
|
420
370
|
return fileName.toLowerCase() === "gfx/grid/door_momsheart.anm2"; // cspell:ignore momsheart
|
|
421
371
|
}
|
|
422
|
-
function isHiddenSecretRoomDoor(door) {
|
|
372
|
+
export function isHiddenSecretRoomDoor(door) {
|
|
423
373
|
const sprite = door.GetSprite();
|
|
424
374
|
const animation = sprite.GetAnimation();
|
|
425
375
|
return isSecretRoomDoor(door) && animation === "Hidden";
|
|
@@ -428,17 +378,17 @@ function isHiddenSecretRoomDoor(door) {
|
|
|
428
378
|
* Helper function to check if the provided door is the one that leads to the Mega Satan Boss Room.
|
|
429
379
|
* (In vanilla, the door will only appear in the starting room of The Chest / Dark Room.)
|
|
430
380
|
*/
|
|
431
|
-
function isMegaSatanDoor(door) {
|
|
381
|
+
export function isMegaSatanDoor(door) {
|
|
432
382
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
433
|
-
return door.TargetRoomIndex ===
|
|
383
|
+
return door.TargetRoomIndex === GridRoom.MEGA_SATAN;
|
|
434
384
|
}
|
|
435
385
|
/**
|
|
436
386
|
* Helper function to check if the provided door leads to the "secret exit" off-grid room that takes
|
|
437
387
|
* you to the Repentance floor.
|
|
438
388
|
*/
|
|
439
|
-
function isRepentanceDoor(door) {
|
|
389
|
+
export function isRepentanceDoor(door) {
|
|
440
390
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
441
|
-
return door.TargetRoomIndex ===
|
|
391
|
+
return door.TargetRoomIndex === GridRoom.SECRET_EXIT;
|
|
442
392
|
}
|
|
443
393
|
/**
|
|
444
394
|
* This refers to the hole in the wall that appears after bombing the entrance to a secret room.
|
|
@@ -448,7 +398,7 @@ function isRepentanceDoor(door) {
|
|
|
448
398
|
* Note that since Ultra Secret Rooms do not use holes, this function will not detect an Ultra
|
|
449
399
|
* Secret Room door.
|
|
450
400
|
*/
|
|
451
|
-
function isSecretRoomDoor(door) {
|
|
401
|
+
export function isSecretRoomDoor(door) {
|
|
452
402
|
const sprite = door.GetSprite();
|
|
453
403
|
const fileName = sprite.GetFilename();
|
|
454
404
|
// On Windows, this is: "gfx/grid/Door_08_HoleInWall.anm2"
|
|
@@ -458,9 +408,9 @@ function isSecretRoomDoor(door) {
|
|
|
458
408
|
* Helper function to check if the provided door is the one that leads to the off-grid room that
|
|
459
409
|
* contains the portal to The Void. (In vanilla, the door will only appear in the Hush Boss Room.)
|
|
460
410
|
*/
|
|
461
|
-
function isVoidDoor(door) {
|
|
411
|
+
export function isVoidDoor(door) {
|
|
462
412
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
463
|
-
return door.TargetRoomIndex ===
|
|
413
|
+
return door.TargetRoomIndex === GridRoom.VOID;
|
|
464
414
|
}
|
|
465
415
|
/**
|
|
466
416
|
* Helper function to reset an unlocked door back to a locked state. Doing this is non-trivial
|
|
@@ -470,12 +420,12 @@ function isVoidDoor(door) {
|
|
|
470
420
|
* - Set the variant to `DoorVariant.DOOR_LOCKED`.
|
|
471
421
|
* - Close the door.
|
|
472
422
|
*/
|
|
473
|
-
function lockDoor(door) {
|
|
474
|
-
const level =
|
|
423
|
+
export function lockDoor(door) {
|
|
424
|
+
const level = game.GetLevel();
|
|
475
425
|
// We can't use the "getRoomDescriptor" function since it will cause a dependency cycle.
|
|
476
426
|
const roomDescriptor = level.GetRoomByIdx(door.TargetRoomIndex);
|
|
477
427
|
roomDescriptor.VisitedCount = 0;
|
|
478
|
-
door.SetVariant(
|
|
428
|
+
door.SetVariant(DoorVariant.LOCKED);
|
|
479
429
|
door.SetLocked(true);
|
|
480
430
|
door.Close(true);
|
|
481
431
|
}
|
|
@@ -483,7 +433,7 @@ function lockDoor(door) {
|
|
|
483
433
|
* For the purposes of this function, doors to Secret Rooms or Super Secret Rooms that have not been
|
|
484
434
|
* discovered yet will not be opened.
|
|
485
435
|
*/
|
|
486
|
-
function openAllDoors() {
|
|
436
|
+
export function openAllDoors() {
|
|
487
437
|
for (const door of getDoors()) {
|
|
488
438
|
// If we try to open a hidden Secret Room door (or Super Secret Room door), then nothing will
|
|
489
439
|
// happen.
|
|
@@ -494,8 +444,8 @@ function openAllDoors() {
|
|
|
494
444
|
* Use this instead of the `GridEntityDoor.Open` method if you want the door to immediately open
|
|
495
445
|
* without an animation.
|
|
496
446
|
*/
|
|
497
|
-
function openDoorFast(door) {
|
|
498
|
-
door.State =
|
|
447
|
+
export function openDoorFast(door) {
|
|
448
|
+
door.State = DoorState.OPEN;
|
|
499
449
|
const sprite = door.GetSprite();
|
|
500
450
|
sprite.Play("Opened", true);
|
|
501
451
|
}
|
|
@@ -507,14 +457,14 @@ function openDoorFast(door) {
|
|
|
507
457
|
* @returns The number of doors removed.
|
|
508
458
|
* @allowEmptyVariadic
|
|
509
459
|
*/
|
|
510
|
-
function removeAllDoors(...roomTypes) {
|
|
460
|
+
export function removeAllDoors(...roomTypes) {
|
|
511
461
|
const doors = getDoors(...roomTypes);
|
|
512
462
|
removeDoors(...doors);
|
|
513
463
|
return doors.length;
|
|
514
464
|
}
|
|
515
465
|
/** Helper function to remove a single door. */
|
|
516
|
-
function removeDoor(door) {
|
|
517
|
-
const room =
|
|
466
|
+
export function removeDoor(door) {
|
|
467
|
+
const room = game.GetRoom();
|
|
518
468
|
room.RemoveDoor(door.Slot);
|
|
519
469
|
}
|
|
520
470
|
/**
|
|
@@ -522,7 +472,7 @@ function removeDoor(door) {
|
|
|
522
472
|
*
|
|
523
473
|
* This function is variadic, meaning that you can specify as many doors as you want to remove.
|
|
524
474
|
*/
|
|
525
|
-
function removeDoors(...doors) {
|
|
475
|
+
export function removeDoors(...doors) {
|
|
526
476
|
for (const door of doors) {
|
|
527
477
|
removeDoor(door);
|
|
528
478
|
}
|