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/rooms.js
CHANGED
|
@@ -1,106 +1,43 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
exports.inDevilsCrownTreasureRoom = inDevilsCrownTreasureRoom;
|
|
22
|
-
exports.inDogmaRoom = inDogmaRoom;
|
|
23
|
-
exports.inDoubleTrouble = inDoubleTrouble;
|
|
24
|
-
exports.inGenesisRoom = inGenesisRoom;
|
|
25
|
-
exports.inHomeCloset = inHomeCloset;
|
|
26
|
-
exports.inLRoom = inLRoom;
|
|
27
|
-
exports.inMegaSatanRoom = inMegaSatanRoom;
|
|
28
|
-
exports.inMineShaft = inMineShaft;
|
|
29
|
-
exports.inMinibossRoomOf = inMinibossRoomOf;
|
|
30
|
-
exports.inMirrorRoom = inMirrorRoom;
|
|
31
|
-
exports.inRoomShape = inRoomShape;
|
|
32
|
-
exports.inRoomType = inRoomType;
|
|
33
|
-
exports.inSecretExit = inSecretExit;
|
|
34
|
-
exports.inSecretShop = inSecretShop;
|
|
35
|
-
exports.inStartingRoom = inStartingRoom;
|
|
36
|
-
exports.is2x1Room = is2x1Room;
|
|
37
|
-
exports.isAllRoomsClear = isAllRoomsClear;
|
|
38
|
-
exports.isAngelShop = isAngelShop;
|
|
39
|
-
exports.isBeastRoom = isBeastRoom;
|
|
40
|
-
exports.isBigRoom = isBigRoom;
|
|
41
|
-
exports.isBossRoomOf = isBossRoomOf;
|
|
42
|
-
exports.isCrawlSpace = isCrawlSpace;
|
|
43
|
-
exports.isCrawlSpaceWithBlackMarketEntrance = isCrawlSpaceWithBlackMarketEntrance;
|
|
44
|
-
exports.isDeathCertificateArea = isDeathCertificateArea;
|
|
45
|
-
exports.isDevilsCrownTreasureRoom = isDevilsCrownTreasureRoom;
|
|
46
|
-
exports.isDogmaRoom = isDogmaRoom;
|
|
47
|
-
exports.isDoubleTrouble = isDoubleTrouble;
|
|
48
|
-
exports.isGenesisRoom = isGenesisRoom;
|
|
49
|
-
exports.isHomeCloset = isHomeCloset;
|
|
50
|
-
exports.isLRoom = isLRoom;
|
|
51
|
-
exports.isMegaSatanRoom = isMegaSatanRoom;
|
|
52
|
-
exports.isMineShaft = isMineShaft;
|
|
53
|
-
exports.isMinibossRoomOf = isMinibossRoomOf;
|
|
54
|
-
exports.isMirrorRoom = isMirrorRoom;
|
|
55
|
-
exports.isRoomShape = isRoomShape;
|
|
56
|
-
exports.isRoomType = isRoomType;
|
|
57
|
-
exports.isSecretExit = isSecretExit;
|
|
58
|
-
exports.isSecretRoomType = isSecretRoomType;
|
|
59
|
-
exports.isSecretShop = isSecretShop;
|
|
60
|
-
exports.roomUpdateSafe = roomUpdateSafe;
|
|
61
|
-
exports.setBackdrop = setBackdrop;
|
|
62
|
-
exports.setRoomCleared = setRoomCleared;
|
|
63
|
-
exports.setRoomUncleared = setRoomUncleared;
|
|
64
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
65
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
66
|
-
const constants_1 = require("../core/constants");
|
|
67
|
-
const roomTypeNames_1 = require("../objects/roomTypeNames");
|
|
68
|
-
const mineShaftRoomSubTypesSet_1 = require("../sets/mineShaftRoomSubTypesSet");
|
|
69
|
-
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
70
|
-
const dimensions_1 = require("./dimensions");
|
|
71
|
-
const doors_1 = require("./doors");
|
|
72
|
-
const entities_1 = require("./entities");
|
|
73
|
-
const flag_1 = require("./flag");
|
|
74
|
-
const positionVelocity_1 = require("./positionVelocity");
|
|
75
|
-
const roomData_1 = require("./roomData");
|
|
76
|
-
const roomShape_1 = require("./roomShape");
|
|
77
|
-
const roomTransition_1 = require("./roomTransition");
|
|
78
|
-
const stage_1 = require("./stage");
|
|
79
|
-
const utils_1 = require("./utils");
|
|
80
|
-
const SECRET_ROOM_TYPES = new ReadonlySet_1.ReadonlySet([
|
|
81
|
-
isaac_typescript_definitions_1.RoomType.SECRET,
|
|
82
|
-
isaac_typescript_definitions_1.RoomType.SUPER_SECRET,
|
|
83
|
-
isaac_typescript_definitions_1.RoomType.ULTRA_SECRET,
|
|
1
|
+
import { AngelRoomSubType, Dimension, DoorSlot, DoorSlotFlag, DownpourRoomSubType, DungeonSubType, GridRoom, HomeRoomSubType, ItemPoolType, RoomDescriptorFlag, RoomType, SoundEffect, StageID, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game, sfxManager } from "../core/cachedClasses";
|
|
3
|
+
import { DIMENSIONS, MAX_LEVEL_GRID_INDEX } from "../core/constants";
|
|
4
|
+
import { ROOM_TYPE_NAMES } from "../objects/roomTypeNames";
|
|
5
|
+
import { MINE_SHAFT_ROOM_SUB_TYPE_SET } from "../sets/mineShaftRoomSubTypesSet";
|
|
6
|
+
import { ReadonlySet } from "../types/ReadonlySet";
|
|
7
|
+
import { inDimension } from "./dimensions";
|
|
8
|
+
import { closeAllDoors, getDoors, isHiddenSecretRoomDoor, openDoorFast, } from "./doors";
|
|
9
|
+
import { getEntities } from "./entities";
|
|
10
|
+
import { hasFlag } from "./flag";
|
|
11
|
+
import { getEntityPositions, getEntityVelocities, setEntityPositions, setEntityVelocities, } from "./positionVelocity";
|
|
12
|
+
import { getRoomData, getRoomDescriptor, getRoomDescriptorReadOnly, getRoomGridIndex, } from "./roomData";
|
|
13
|
+
import { is2x1RoomShape, isBigRoomShape, isLRoomShape } from "./roomShape";
|
|
14
|
+
import { reloadRoom } from "./roomTransition";
|
|
15
|
+
import { getGotoCommand } from "./stage";
|
|
16
|
+
import { assertDefined, iRange } from "./utils";
|
|
17
|
+
const SECRET_ROOM_TYPES = new ReadonlySet([
|
|
18
|
+
RoomType.SECRET,
|
|
19
|
+
RoomType.SUPER_SECRET,
|
|
20
|
+
RoomType.ULTRA_SECRET,
|
|
84
21
|
]);
|
|
85
22
|
/**
|
|
86
23
|
* Helper function for quickly switching to a new room without playing a particular animation. Use
|
|
87
24
|
* this helper function over invoking the `Game.ChangeRoom` method directly to ensure that you do
|
|
88
25
|
* not forget to set the `LeaveDoor` field and to prevent crashing on invalid room grid indexes.
|
|
89
26
|
*/
|
|
90
|
-
function changeRoom(roomGridIndex) {
|
|
91
|
-
const level =
|
|
92
|
-
const roomData =
|
|
93
|
-
|
|
27
|
+
export function changeRoom(roomGridIndex) {
|
|
28
|
+
const level = game.GetLevel();
|
|
29
|
+
const roomData = getRoomData(roomGridIndex);
|
|
30
|
+
assertDefined(roomData, `Failed to change the room to grid index ${roomGridIndex} because that room does not exist.`);
|
|
94
31
|
// LeaveDoor must be set before every `Game.ChangeRoom` invocation or else the function can send
|
|
95
32
|
// you to the wrong room.
|
|
96
|
-
level.LeaveDoor =
|
|
97
|
-
|
|
33
|
+
level.LeaveDoor = DoorSlot.NO_DOOR_SLOT;
|
|
34
|
+
game.ChangeRoom(roomGridIndex);
|
|
98
35
|
}
|
|
99
36
|
/**
|
|
100
37
|
* Helper function to get the number of rooms that are currently on the floor layout. This does not
|
|
101
38
|
* include off-grid rooms, like the Devil Room.
|
|
102
39
|
*/
|
|
103
|
-
function getNumRooms() {
|
|
40
|
+
export function getNumRooms() {
|
|
104
41
|
const roomsInsideGrid = getRoomsInsideGrid();
|
|
105
42
|
return roomsInsideGrid.length;
|
|
106
43
|
}
|
|
@@ -115,8 +52,8 @@ function getNumRooms() {
|
|
|
115
52
|
* method. This is the best way to see if off-grid rooms have been initialized, since it is possible
|
|
116
53
|
* for mods to insert room data at non-official negative room grid indexes.
|
|
117
54
|
*/
|
|
118
|
-
function getReadOnlyRooms() {
|
|
119
|
-
const level =
|
|
55
|
+
export function getReadOnlyRooms() {
|
|
56
|
+
const level = game.GetLevel();
|
|
120
57
|
const roomList = level.GetRooms();
|
|
121
58
|
const readOnlyRoomDescriptors = [];
|
|
122
59
|
for (let i = 0; i < roomList.Size; i++) {
|
|
@@ -152,14 +89,14 @@ function getReadOnlyRooms() {
|
|
|
152
89
|
* the `goto` command (instead of `d`) if the room type is
|
|
153
90
|
* `RoomType.DEFAULT` (1). False by default.
|
|
154
91
|
*/
|
|
155
|
-
function getRoomDataForTypeVariant(roomType, roomVariant, cancelRoomTransition = true, useSpecialRoomsForRoomTypeDefault = false) {
|
|
156
|
-
const command =
|
|
92
|
+
export function getRoomDataForTypeVariant(roomType, roomVariant, cancelRoomTransition = true, useSpecialRoomsForRoomTypeDefault = false) {
|
|
93
|
+
const command = getGotoCommand(roomType, roomVariant, useSpecialRoomsForRoomTypeDefault);
|
|
157
94
|
// We do not want to log the command execution, because this function will potentially be called
|
|
158
95
|
// many times.
|
|
159
96
|
Isaac.ExecuteCommand(command);
|
|
160
|
-
const newRoomData =
|
|
97
|
+
const newRoomData = getRoomData(GridRoom.DEBUG);
|
|
161
98
|
if (cancelRoomTransition) {
|
|
162
|
-
|
|
99
|
+
reloadRoom();
|
|
163
100
|
}
|
|
164
101
|
return newRoomData;
|
|
165
102
|
}
|
|
@@ -175,14 +112,14 @@ function getRoomDataForTypeVariant(roomType, roomVariant, cancelRoomTransition =
|
|
|
175
112
|
* need to distinguish between real Treasure Rooms and default rooms, then use the
|
|
176
113
|
* `ItemPool.GetPoolForRoom` method directly.
|
|
177
114
|
*/
|
|
178
|
-
function getRoomItemPoolType() {
|
|
179
|
-
const itemPool =
|
|
180
|
-
const room =
|
|
115
|
+
export function getRoomItemPoolType() {
|
|
116
|
+
const itemPool = game.GetItemPool();
|
|
117
|
+
const room = game.GetRoom();
|
|
181
118
|
const roomType = room.GetType();
|
|
182
119
|
const roomSeed = room.GetSpawnSeed();
|
|
183
120
|
const itemPoolTypeOrNegativeOne = itemPool.GetPoolForRoom(roomType, roomSeed);
|
|
184
121
|
return itemPoolTypeOrNegativeOne === -1
|
|
185
|
-
?
|
|
122
|
+
? ItemPoolType.TREASURE
|
|
186
123
|
: itemPoolTypeOrNegativeOne;
|
|
187
124
|
}
|
|
188
125
|
/**
|
|
@@ -198,7 +135,7 @@ function getRoomItemPoolType() {
|
|
|
198
135
|
* extra-dimensional rooms are automatically generated. Default is
|
|
199
136
|
* false.
|
|
200
137
|
*/
|
|
201
|
-
function getRooms(includeExtraDimensionalRooms = false) {
|
|
138
|
+
export function getRooms(includeExtraDimensionalRooms = false) {
|
|
202
139
|
// The naive way to get all of the rooms would be to iterate over the `RoomList` from the
|
|
203
140
|
// `Level.GetRooms` method. However, this results in read-only data, and we want to return a
|
|
204
141
|
// writable object. Instead, we let the heavy lifting be handled by other functions.
|
|
@@ -215,15 +152,15 @@ function getRooms(includeExtraDimensionalRooms = false) {
|
|
|
215
152
|
* @param includeExtraDimensionalRooms Optional. On some floors (e.g. Downpour 2, Mines 2),
|
|
216
153
|
* extra-dimensional rooms will be generated. Default is false.
|
|
217
154
|
*/
|
|
218
|
-
function getRoomsInsideGrid(includeExtraDimensionalRooms = false) {
|
|
219
|
-
const level =
|
|
155
|
+
export function getRoomsInsideGrid(includeExtraDimensionalRooms = false) {
|
|
156
|
+
const level = game.GetLevel();
|
|
220
157
|
const dimensions = includeExtraDimensionalRooms
|
|
221
|
-
?
|
|
222
|
-
: [
|
|
158
|
+
? DIMENSIONS
|
|
159
|
+
: [Dimension.CURRENT];
|
|
223
160
|
/** We use a map instead of an array because room shapes occupy more than one room grid index. */
|
|
224
161
|
const roomDescriptorMap = new Map();
|
|
225
162
|
for (const dimension of dimensions) {
|
|
226
|
-
for (const roomGridIndex of
|
|
163
|
+
for (const roomGridIndex of iRange(MAX_LEVEL_GRID_INDEX)) {
|
|
227
164
|
const roomDescriptor = level.GetRoomByIdx(roomGridIndex, dimension);
|
|
228
165
|
if (roomDescriptor.Data !== undefined) {
|
|
229
166
|
const ptrHash = GetPtrHash(roomDescriptor);
|
|
@@ -239,11 +176,11 @@ function getRoomsInsideGrid(includeExtraDimensionalRooms = false) {
|
|
|
239
176
|
*
|
|
240
177
|
* Room descriptors without any data are assumed to be non-existent and are not included.
|
|
241
178
|
*/
|
|
242
|
-
function getRoomsOfDimension(dimension) {
|
|
243
|
-
const level =
|
|
179
|
+
export function getRoomsOfDimension(dimension) {
|
|
180
|
+
const level = game.GetLevel();
|
|
244
181
|
/** We use a map instead of an array because room shapes occupy more than one room grid index. */
|
|
245
182
|
const roomsMap = new Map();
|
|
246
|
-
for (const roomGridIndex of
|
|
183
|
+
for (const roomGridIndex of iRange(MAX_LEVEL_GRID_INDEX)) {
|
|
247
184
|
const roomDescriptor = level.GetRoomByIdx(roomGridIndex, dimension);
|
|
248
185
|
if (roomDescriptor.Data !== undefined) {
|
|
249
186
|
const ptrHash = GetPtrHash(roomDescriptor);
|
|
@@ -258,27 +195,27 @@ function getRoomsOfDimension(dimension) {
|
|
|
258
195
|
*
|
|
259
196
|
* Room descriptors without any data are assumed to be non-existent and are not included.
|
|
260
197
|
*/
|
|
261
|
-
function getRoomsOutsideGrid() {
|
|
198
|
+
export function getRoomsOutsideGrid() {
|
|
262
199
|
// We filter an array of all rooms instead of iterating over the `GridRoom` enum because it is
|
|
263
200
|
// possible for mods to insert data at arbitrary negative room grid indexes.
|
|
264
201
|
const readOnlyRooms = getReadOnlyRooms();
|
|
265
202
|
const readOnlyRoomsOffGrid = readOnlyRooms.filter((readOnlyRoomDescriptor) => readOnlyRoomDescriptor.SafeGridIndex < 0);
|
|
266
|
-
return readOnlyRoomsOffGrid.map((readOnlyRoomDescriptor) =>
|
|
203
|
+
return readOnlyRoomsOffGrid.map((readOnlyRoomDescriptor) => getRoomDescriptor(readOnlyRoomDescriptor.SafeGridIndex));
|
|
267
204
|
}
|
|
268
205
|
/**
|
|
269
206
|
* Helper function to get the proper name of a room type.
|
|
270
207
|
*
|
|
271
208
|
* For example, `RoomType.TREASURE` will return "Treasure Room".
|
|
272
209
|
*/
|
|
273
|
-
function getRoomTypeName(roomType) {
|
|
274
|
-
return
|
|
210
|
+
export function getRoomTypeName(roomType) {
|
|
211
|
+
return ROOM_TYPE_NAMES[roomType];
|
|
275
212
|
}
|
|
276
213
|
/**
|
|
277
214
|
* Helper function to determine if the current room shape is equal to `RoomShape.1x2` or
|
|
278
215
|
* `RoomShape.2x1`.
|
|
279
216
|
*/
|
|
280
|
-
function in2x1Room() {
|
|
281
|
-
const roomData =
|
|
217
|
+
export function in2x1Room() {
|
|
218
|
+
const roomData = getRoomData();
|
|
282
219
|
return is2x1Room(roomData);
|
|
283
220
|
}
|
|
284
221
|
/**
|
|
@@ -287,8 +224,8 @@ function in2x1Room() {
|
|
|
287
224
|
* Under the hood, this checks the room type being equal to `RoomType.ANGEL` (15) and the sub-type
|
|
288
225
|
* being equal to `AngelRoomSubType.SHOP` (1).
|
|
289
226
|
*/
|
|
290
|
-
function inAngelShop() {
|
|
291
|
-
const roomData =
|
|
227
|
+
export function inAngelShop() {
|
|
228
|
+
const roomData = getRoomData();
|
|
292
229
|
return isAngelShop(roomData);
|
|
293
230
|
}
|
|
294
231
|
/**
|
|
@@ -299,24 +236,24 @@ function inAngelShop() {
|
|
|
299
236
|
* Under the hood, this checks the room type being equal to `RoomType.DUNGEON` (16) and the sub-type
|
|
300
237
|
* being equal to `DungeonSubType.BEAST_ROOM` (4).
|
|
301
238
|
*/
|
|
302
|
-
function inBeastRoom() {
|
|
303
|
-
const roomData =
|
|
239
|
+
export function inBeastRoom() {
|
|
240
|
+
const roomData = getRoomData();
|
|
304
241
|
return isBeastRoom(roomData);
|
|
305
242
|
}
|
|
306
243
|
/**
|
|
307
244
|
* Helper function to detect if the current room is big. Specifically, this is all 1x2 rooms, 2x2
|
|
308
245
|
* rooms, and L rooms.
|
|
309
246
|
*/
|
|
310
|
-
function inBigRoom() {
|
|
311
|
-
const roomData =
|
|
247
|
+
export function inBigRoom() {
|
|
248
|
+
const roomData = getRoomData();
|
|
312
249
|
return isBigRoom(roomData);
|
|
313
250
|
}
|
|
314
251
|
/**
|
|
315
252
|
* Helper function to check if the current room is the Boss Room for a particular boss. This will
|
|
316
253
|
* only work for bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
|
|
317
254
|
*/
|
|
318
|
-
function inBossRoomOf(bossID) {
|
|
319
|
-
const roomData =
|
|
255
|
+
export function inBossRoomOf(bossID) {
|
|
256
|
+
const roomData = getRoomData();
|
|
320
257
|
return isBossRoomOf(roomData, bossID);
|
|
321
258
|
}
|
|
322
259
|
/**
|
|
@@ -324,23 +261,23 @@ function inBossRoomOf(bossID) {
|
|
|
324
261
|
* comparing to `RoomType.DUNGEON` or `GridRoom.DUNGEON_IDX` since there is a special case of the
|
|
325
262
|
* player being in a boss fight that takes place in a dungeon.
|
|
326
263
|
*/
|
|
327
|
-
function inCrawlSpace() {
|
|
328
|
-
const roomData =
|
|
264
|
+
export function inCrawlSpace() {
|
|
265
|
+
const roomData = getRoomData();
|
|
329
266
|
return isCrawlSpace(roomData);
|
|
330
267
|
}
|
|
331
268
|
/**
|
|
332
269
|
* Helper function for checking whether the current room is a crawl space with a door corresponding
|
|
333
270
|
* to `DoorSlotFlag.RIGHT_0` (1 << 2).
|
|
334
271
|
*/
|
|
335
|
-
function inCrawlSpaceWithBlackMarketEntrance() {
|
|
336
|
-
const roomData =
|
|
272
|
+
export function inCrawlSpaceWithBlackMarketEntrance() {
|
|
273
|
+
const roomData = getRoomData();
|
|
337
274
|
return isCrawlSpaceWithBlackMarketEntrance(roomData);
|
|
338
275
|
}
|
|
339
276
|
/**
|
|
340
277
|
* Helper function to detect if the current room is one of the rooms in the Death Certificate area.
|
|
341
278
|
*/
|
|
342
|
-
function inDeathCertificateArea() {
|
|
343
|
-
const roomData =
|
|
279
|
+
export function inDeathCertificateArea() {
|
|
280
|
+
const roomData = getRoomData();
|
|
344
281
|
return isDeathCertificateArea(roomData);
|
|
345
282
|
}
|
|
346
283
|
/**
|
|
@@ -349,8 +286,8 @@ function inDeathCertificateArea() {
|
|
|
349
286
|
*
|
|
350
287
|
* Under the hood, this checks for `RoomDescriptorFlag.DEVIL_TREASURE`.
|
|
351
288
|
*/
|
|
352
|
-
function inDevilsCrownTreasureRoom() {
|
|
353
|
-
const roomDescriptor =
|
|
289
|
+
export function inDevilsCrownTreasureRoom() {
|
|
290
|
+
const roomDescriptor = getRoomDescriptorReadOnly();
|
|
354
291
|
return isDevilsCrownTreasureRoom(roomDescriptor);
|
|
355
292
|
}
|
|
356
293
|
/**
|
|
@@ -366,8 +303,8 @@ function inDevilsCrownTreasureRoom() {
|
|
|
366
303
|
* Dogma Boss Room that exists in vanilla) and the sub-type being equal to
|
|
367
304
|
* `HomeRoomSubType.LIVING_ROOM` (3).
|
|
368
305
|
*/
|
|
369
|
-
function inDogmaRoom() {
|
|
370
|
-
const roomData =
|
|
306
|
+
export function inDogmaRoom() {
|
|
307
|
+
const roomData = getRoomData();
|
|
371
308
|
return isDogmaRoom(roomData);
|
|
372
309
|
}
|
|
373
310
|
/**
|
|
@@ -381,13 +318,13 @@ function inDogmaRoom() {
|
|
|
381
318
|
* range of 3700 through 3850. We intentionally do not use this method since it may not work as well
|
|
382
319
|
* with modded rooms.
|
|
383
320
|
*/
|
|
384
|
-
function inDoubleTrouble() {
|
|
385
|
-
const roomData =
|
|
321
|
+
export function inDoubleTrouble() {
|
|
322
|
+
const roomData = getRoomData();
|
|
386
323
|
return isDoubleTrouble(roomData);
|
|
387
324
|
}
|
|
388
325
|
/** Helper function to determine if the current room index is equal to `GridRoom.GENESIS`. */
|
|
389
|
-
function inGenesisRoom() {
|
|
390
|
-
const roomGridIndex =
|
|
326
|
+
export function inGenesisRoom() {
|
|
327
|
+
const roomGridIndex = getRoomGridIndex();
|
|
391
328
|
return isGenesisRoom(roomGridIndex);
|
|
392
329
|
}
|
|
393
330
|
/**
|
|
@@ -396,42 +333,42 @@ function inGenesisRoom() {
|
|
|
396
333
|
*
|
|
397
334
|
* Home closets have a unique shape that is different from any other room in the game.
|
|
398
335
|
*/
|
|
399
|
-
function inHomeCloset() {
|
|
400
|
-
const roomData =
|
|
336
|
+
export function inHomeCloset() {
|
|
337
|
+
const roomData = getRoomData();
|
|
401
338
|
return isHomeCloset(roomData);
|
|
402
339
|
}
|
|
403
340
|
/** Helper function to determine if the current room shape is one of the four L room shapes. */
|
|
404
|
-
function inLRoom() {
|
|
405
|
-
const roomData =
|
|
341
|
+
export function inLRoom() {
|
|
342
|
+
const roomData = getRoomData();
|
|
406
343
|
return isLRoom(roomData);
|
|
407
344
|
}
|
|
408
345
|
/** Helper function to determine if the current room index is equal to `GridRoom.MEGA_SATAN`. */
|
|
409
|
-
function inMegaSatanRoom() {
|
|
410
|
-
const roomGridIndex =
|
|
346
|
+
export function inMegaSatanRoom() {
|
|
347
|
+
const roomGridIndex = getRoomGridIndex();
|
|
411
348
|
return isMegaSatanRoom(roomGridIndex);
|
|
412
349
|
}
|
|
413
350
|
/**
|
|
414
351
|
* Helper function to determine if the current room is part of the Repentance "escape sequence" in
|
|
415
352
|
* the Mines/Ashpit.
|
|
416
353
|
*/
|
|
417
|
-
function inMineShaft() {
|
|
418
|
-
const roomData =
|
|
354
|
+
export function inMineShaft() {
|
|
355
|
+
const roomData = getRoomData();
|
|
419
356
|
return isMineShaft(roomData);
|
|
420
357
|
}
|
|
421
358
|
/**
|
|
422
359
|
* Helper function to check if the current room is a miniboss room for a particular miniboss. This
|
|
423
360
|
* will only work for mini-bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
|
|
424
361
|
*/
|
|
425
|
-
function inMinibossRoomOf(minibossID) {
|
|
426
|
-
const roomData =
|
|
362
|
+
export function inMinibossRoomOf(minibossID) {
|
|
363
|
+
const roomData = getRoomData();
|
|
427
364
|
return isMinibossRoomOf(roomData, minibossID);
|
|
428
365
|
}
|
|
429
366
|
/**
|
|
430
367
|
* Helper function to check if the current room is a "mirror room" in Downpour or Dross. (These
|
|
431
368
|
* rooms are marked with a specific sub-type.)
|
|
432
369
|
*/
|
|
433
|
-
function inMirrorRoom() {
|
|
434
|
-
const roomData =
|
|
370
|
+
export function inMirrorRoom() {
|
|
371
|
+
const roomData = getRoomData();
|
|
435
372
|
return isMirrorRoom(roomData);
|
|
436
373
|
}
|
|
437
374
|
/**
|
|
@@ -439,8 +376,8 @@ function inMirrorRoom() {
|
|
|
439
376
|
*
|
|
440
377
|
* This function is variadic, which means you can pass as many room shapes as you want to match for.
|
|
441
378
|
*/
|
|
442
|
-
function inRoomShape(...roomShapes) {
|
|
443
|
-
const roomData =
|
|
379
|
+
export function inRoomShape(...roomShapes) {
|
|
380
|
+
const roomData = getRoomData();
|
|
444
381
|
return isRoomShape(roomData, ...roomShapes);
|
|
445
382
|
}
|
|
446
383
|
/**
|
|
@@ -448,16 +385,16 @@ function inRoomShape(...roomShapes) {
|
|
|
448
385
|
*
|
|
449
386
|
* This function is variadic, which means you can pass as many room types as you want to match for.
|
|
450
387
|
*/
|
|
451
|
-
function inRoomType(...roomTypes) {
|
|
452
|
-
const roomData =
|
|
388
|
+
export function inRoomType(...roomTypes) {
|
|
389
|
+
const roomData = getRoomData();
|
|
453
390
|
return isRoomType(roomData, ...roomTypes);
|
|
454
391
|
}
|
|
455
392
|
/**
|
|
456
393
|
* Helper function for checking if the current room is a secret exit that leads to a Repentance
|
|
457
394
|
* floor.
|
|
458
395
|
*/
|
|
459
|
-
function inSecretExit() {
|
|
460
|
-
const roomGridIndex =
|
|
396
|
+
export function inSecretExit() {
|
|
397
|
+
const roomGridIndex = getRoomGridIndex();
|
|
461
398
|
return isSecretExit(roomGridIndex);
|
|
462
399
|
}
|
|
463
400
|
/**
|
|
@@ -468,8 +405,8 @@ function inSecretExit() {
|
|
|
468
405
|
* words, they will have the same room type, room variant, and room sub-type of a normal shop. Thus,
|
|
469
406
|
* the only way to detect them is by using the grid index.
|
|
470
407
|
*/
|
|
471
|
-
function inSecretShop() {
|
|
472
|
-
const roomGridIndex =
|
|
408
|
+
export function inSecretShop() {
|
|
409
|
+
const roomGridIndex = getRoomGridIndex();
|
|
473
410
|
return isSecretShop(roomGridIndex);
|
|
474
411
|
}
|
|
475
412
|
/**
|
|
@@ -477,17 +414,17 @@ function inSecretShop() {
|
|
|
477
414
|
* returns true for the starting room of the primary dimension (meaning that being in the starting
|
|
478
415
|
* room of the mirror world does not count).
|
|
479
416
|
*/
|
|
480
|
-
function inStartingRoom() {
|
|
481
|
-
const level =
|
|
417
|
+
export function inStartingRoom() {
|
|
418
|
+
const level = game.GetLevel();
|
|
482
419
|
const startingRoomGridIndex = level.GetStartingRoomIndex();
|
|
483
|
-
const roomGridIndex =
|
|
484
|
-
return roomGridIndex === startingRoomGridIndex &&
|
|
420
|
+
const roomGridIndex = getRoomGridIndex();
|
|
421
|
+
return roomGridIndex === startingRoomGridIndex && inDimension(Dimension.MAIN);
|
|
485
422
|
}
|
|
486
423
|
/**
|
|
487
424
|
* Helper function to determine if the provided room is equal to `RoomShape.1x2` or `RoomShape.2x1`.
|
|
488
425
|
*/
|
|
489
|
-
function is2x1Room(roomData) {
|
|
490
|
-
return
|
|
426
|
+
export function is2x1Room(roomData) {
|
|
427
|
+
return is2x1RoomShape(roomData.Shape);
|
|
491
428
|
}
|
|
492
429
|
/**
|
|
493
430
|
* Helper function to loop through every room on the floor and see if it has been cleared.
|
|
@@ -504,28 +441,28 @@ function is2x1Room(roomData) {
|
|
|
504
441
|
* false.
|
|
505
442
|
* @allowEmptyVariadic
|
|
506
443
|
*/
|
|
507
|
-
function isAllRoomsClear(onlyCheckRoomTypes, includeSecretRoom = false, includeSuperSecretRoom = false, includeUltraSecretRoom = false) {
|
|
444
|
+
export function isAllRoomsClear(onlyCheckRoomTypes, includeSecretRoom = false, includeSuperSecretRoom = false, includeUltraSecretRoom = false) {
|
|
508
445
|
const roomsInsideGrid = getRoomsInsideGrid();
|
|
509
446
|
let matchingRooms;
|
|
510
447
|
if (onlyCheckRoomTypes === undefined) {
|
|
511
448
|
matchingRooms = roomsInsideGrid;
|
|
512
449
|
}
|
|
513
450
|
else {
|
|
514
|
-
const roomTypeWhitelist = new
|
|
451
|
+
const roomTypeWhitelist = new ReadonlySet(onlyCheckRoomTypes);
|
|
515
452
|
matchingRooms = roomsInsideGrid.filter((roomDescriptor) => roomDescriptor.Data !== undefined
|
|
516
453
|
&& roomTypeWhitelist.has(roomDescriptor.Data.Type));
|
|
517
454
|
}
|
|
518
455
|
if (!includeSecretRoom) {
|
|
519
456
|
matchingRooms = matchingRooms.filter((roomDescriptor) => roomDescriptor.Data !== undefined
|
|
520
|
-
&& roomDescriptor.Data.Type !==
|
|
457
|
+
&& roomDescriptor.Data.Type !== RoomType.SECRET);
|
|
521
458
|
}
|
|
522
459
|
if (!includeSuperSecretRoom) {
|
|
523
460
|
matchingRooms = matchingRooms.filter((roomDescriptor) => roomDescriptor.Data !== undefined
|
|
524
|
-
&& roomDescriptor.Data.Type !==
|
|
461
|
+
&& roomDescriptor.Data.Type !== RoomType.SUPER_SECRET);
|
|
525
462
|
}
|
|
526
463
|
if (!includeUltraSecretRoom) {
|
|
527
464
|
matchingRooms = matchingRooms.filter((roomDescriptor) => roomDescriptor.Data !== undefined
|
|
528
|
-
&& roomDescriptor.Data.Type !==
|
|
465
|
+
&& roomDescriptor.Data.Type !== RoomType.ULTRA_SECRET);
|
|
529
466
|
}
|
|
530
467
|
return matchingRooms.every((roomDescriptor) => roomDescriptor.Clear);
|
|
531
468
|
}
|
|
@@ -535,10 +472,10 @@ function isAllRoomsClear(onlyCheckRoomTypes, includeSecretRoom = false, includeS
|
|
|
535
472
|
* Under the hood, this checks the room type being equal to `RoomType.ANGEL` (15) and the sub-type
|
|
536
473
|
* being equal to `AngelRoomSubType.SHOP` (1).
|
|
537
474
|
*/
|
|
538
|
-
function isAngelShop(roomData) {
|
|
539
|
-
return (roomData.Type ===
|
|
475
|
+
export function isAngelShop(roomData) {
|
|
476
|
+
return (roomData.Type === RoomType.ANGEL
|
|
540
477
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
541
|
-
&& roomData.Subtype ===
|
|
478
|
+
&& roomData.Subtype === AngelRoomSubType.SHOP);
|
|
542
479
|
}
|
|
543
480
|
/**
|
|
544
481
|
* Helper function to check to see if the provided room is the Boss Room for The Beast.
|
|
@@ -548,25 +485,25 @@ function isAngelShop(roomData) {
|
|
|
548
485
|
* Under the hood, this checks the room type being equal to `RoomType.DUNGEON` (16) and the sub-type
|
|
549
486
|
* being equal to `DungeonSubType.BEAST_ROOM` (4).
|
|
550
487
|
*/
|
|
551
|
-
function isBeastRoom(roomData) {
|
|
552
|
-
return (roomData.Type ===
|
|
488
|
+
export function isBeastRoom(roomData) {
|
|
489
|
+
return (roomData.Type === RoomType.DUNGEON
|
|
553
490
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
554
|
-
&& roomData.Subtype ===
|
|
491
|
+
&& roomData.Subtype === DungeonSubType.BEAST_ROOM);
|
|
555
492
|
}
|
|
556
493
|
/**
|
|
557
494
|
* Helper function to detect if the provided room is big. Specifically, this is all 1x2 rooms, 2x2
|
|
558
495
|
* rooms, and L rooms.
|
|
559
496
|
*/
|
|
560
|
-
function isBigRoom(roomData) {
|
|
561
|
-
return
|
|
497
|
+
export function isBigRoom(roomData) {
|
|
498
|
+
return isBigRoomShape(roomData.Shape);
|
|
562
499
|
}
|
|
563
500
|
/**
|
|
564
501
|
* Helper function to check if the provided room is the Boss Room for a particular boss. This will
|
|
565
502
|
* only work for bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
|
|
566
503
|
*/
|
|
567
|
-
function isBossRoomOf(roomData, bossID) {
|
|
568
|
-
return (roomData.Type ===
|
|
569
|
-
&& roomData.StageID ===
|
|
504
|
+
export function isBossRoomOf(roomData, bossID) {
|
|
505
|
+
return (roomData.Type === RoomType.BOSS
|
|
506
|
+
&& roomData.StageID === StageID.SPECIAL_ROOMS
|
|
570
507
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
571
508
|
&& roomData.Subtype === bossID);
|
|
572
509
|
}
|
|
@@ -575,27 +512,27 @@ function isBossRoomOf(roomData, bossID) {
|
|
|
575
512
|
* over comparing to `RoomType.DUNGEON` or `GridRoom.DUNGEON_IDX` since there is a special case of
|
|
576
513
|
* the player being in a boss fight that takes place in a dungeon.
|
|
577
514
|
*/
|
|
578
|
-
function isCrawlSpace(roomData) {
|
|
579
|
-
return (roomData.Type ===
|
|
515
|
+
export function isCrawlSpace(roomData) {
|
|
516
|
+
return (roomData.Type === RoomType.DUNGEON
|
|
580
517
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
581
|
-
&& roomData.Subtype ===
|
|
518
|
+
&& roomData.Subtype === DungeonSubType.NORMAL);
|
|
582
519
|
}
|
|
583
520
|
/**
|
|
584
521
|
* Helper function for checking whether the provided room is a crawl space with a door corresponding
|
|
585
522
|
* to `DoorSlotFlag.RIGHT_0` (1 << 2).
|
|
586
523
|
*/
|
|
587
|
-
function isCrawlSpaceWithBlackMarketEntrance(roomData) {
|
|
588
|
-
return (isCrawlSpace(roomData) &&
|
|
524
|
+
export function isCrawlSpaceWithBlackMarketEntrance(roomData) {
|
|
525
|
+
return (isCrawlSpace(roomData) && hasFlag(roomData.Doors, DoorSlotFlag.RIGHT_0));
|
|
589
526
|
}
|
|
590
527
|
/**
|
|
591
528
|
* Helper function to detect if the provided room is one of the rooms in the Death Certificate area.
|
|
592
529
|
*/
|
|
593
|
-
function isDeathCertificateArea(roomData) {
|
|
594
|
-
return (roomData.StageID ===
|
|
530
|
+
export function isDeathCertificateArea(roomData) {
|
|
531
|
+
return (roomData.StageID === StageID.HOME
|
|
595
532
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
596
|
-
&& (roomData.Subtype ===
|
|
533
|
+
&& (roomData.Subtype === HomeRoomSubType.DEATH_CERTIFICATE_ENTRANCE
|
|
597
534
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
598
|
-
|| roomData.Subtype ===
|
|
535
|
+
|| roomData.Subtype === HomeRoomSubType.DEATH_CERTIFICATE_ITEMS));
|
|
599
536
|
}
|
|
600
537
|
/**
|
|
601
538
|
* Helper function to detect if the provided room is a Treasure Room created when entering with a
|
|
@@ -603,8 +540,8 @@ function isDeathCertificateArea(roomData) {
|
|
|
603
540
|
*
|
|
604
541
|
* Under the hood, this checks for `RoomDescriptorFlag.DEVIL_TREASURE`.
|
|
605
542
|
*/
|
|
606
|
-
function isDevilsCrownTreasureRoom(roomDescriptor) {
|
|
607
|
-
return
|
|
543
|
+
export function isDevilsCrownTreasureRoom(roomDescriptor) {
|
|
544
|
+
return hasFlag(roomDescriptor.Flags, RoomDescriptorFlag.DEVIL_TREASURE);
|
|
608
545
|
}
|
|
609
546
|
/**
|
|
610
547
|
* Helper function to check to see if the provided room is the Boss Room for Dogma.
|
|
@@ -619,12 +556,12 @@ function isDevilsCrownTreasureRoom(roomDescriptor) {
|
|
|
619
556
|
* Dogma Boss Room that exists in vanilla) and the sub-type being equal to
|
|
620
557
|
* `HomeRoomSubType.LIVING_ROOM` (3).
|
|
621
558
|
*/
|
|
622
|
-
function isDogmaRoom(roomData) {
|
|
623
|
-
return (roomData.StageID ===
|
|
624
|
-
&& roomData.Type ===
|
|
559
|
+
export function isDogmaRoom(roomData) {
|
|
560
|
+
return (roomData.StageID === StageID.HOME
|
|
561
|
+
&& roomData.Type === RoomType.DEFAULT
|
|
625
562
|
&& roomData.Variant === 1000
|
|
626
563
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
627
|
-
&& roomData.Subtype ===
|
|
564
|
+
&& roomData.Subtype === HomeRoomSubType.LIVING_ROOM);
|
|
628
565
|
}
|
|
629
566
|
/**
|
|
630
567
|
* Helper function to detect if the provided room is a Double Trouble Boss Room.
|
|
@@ -637,15 +574,15 @@ function isDogmaRoom(roomData) {
|
|
|
637
574
|
* range of 3700 through 3850. We intentionally do not use this method since it may not work as well
|
|
638
575
|
* with modded rooms.
|
|
639
576
|
*/
|
|
640
|
-
function isDoubleTrouble(roomData) {
|
|
641
|
-
return (roomData.Type ===
|
|
577
|
+
export function isDoubleTrouble(roomData) {
|
|
578
|
+
return (roomData.Type === RoomType.BOSS && roomData.Name.includes("Double Trouble"));
|
|
642
579
|
}
|
|
643
580
|
/**
|
|
644
581
|
* Helper function to determine if the index of the provided room is equal to `GridRoom.GENESIS`.
|
|
645
582
|
*/
|
|
646
|
-
function isGenesisRoom(roomGridIndex) {
|
|
583
|
+
export function isGenesisRoom(roomGridIndex) {
|
|
647
584
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
648
|
-
return roomGridIndex ===
|
|
585
|
+
return roomGridIndex === GridRoom.GENESIS;
|
|
649
586
|
}
|
|
650
587
|
/**
|
|
651
588
|
* Helper function to check if the provided room is either the left Home closet (behind the red
|
|
@@ -653,40 +590,40 @@ function isGenesisRoom(roomGridIndex) {
|
|
|
653
590
|
*
|
|
654
591
|
* Home closets have a unique shape that is different from any other room in the game.
|
|
655
592
|
*/
|
|
656
|
-
function isHomeCloset(roomData) {
|
|
657
|
-
return (roomData.StageID ===
|
|
593
|
+
export function isHomeCloset(roomData) {
|
|
594
|
+
return (roomData.StageID === StageID.HOME
|
|
658
595
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
659
|
-
&& (roomData.Subtype ===
|
|
596
|
+
&& (roomData.Subtype === HomeRoomSubType.CLOSET_LEFT
|
|
660
597
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
661
|
-
|| roomData.Subtype ===
|
|
598
|
+
|| roomData.Subtype === HomeRoomSubType.CLOSET_RIGHT));
|
|
662
599
|
}
|
|
663
600
|
/** Helper function to determine if the provided room is one of the four L room shapes. */
|
|
664
|
-
function isLRoom(roomData) {
|
|
665
|
-
return
|
|
601
|
+
export function isLRoom(roomData) {
|
|
602
|
+
return isLRoomShape(roomData.Shape);
|
|
666
603
|
}
|
|
667
604
|
/**
|
|
668
605
|
* Helper function to determine if the index of the provided room is equal to `GridRoom.MEGA_SATAN`.
|
|
669
606
|
*/
|
|
670
|
-
function isMegaSatanRoom(roomGridIndex) {
|
|
607
|
+
export function isMegaSatanRoom(roomGridIndex) {
|
|
671
608
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
672
|
-
return roomGridIndex ===
|
|
609
|
+
return roomGridIndex === GridRoom.MEGA_SATAN;
|
|
673
610
|
}
|
|
674
611
|
/**
|
|
675
612
|
* Helper function to determine if the provided room is part of the Repentance "escape sequence" in
|
|
676
613
|
* the Mines/Ashpit.
|
|
677
614
|
*/
|
|
678
|
-
function isMineShaft(roomData) {
|
|
679
|
-
return ((roomData.StageID ===
|
|
615
|
+
export function isMineShaft(roomData) {
|
|
616
|
+
return ((roomData.StageID === StageID.MINES || roomData.StageID === StageID.ASHPIT)
|
|
680
617
|
// eslint-disable-next-line complete/strict-enums
|
|
681
|
-
&&
|
|
618
|
+
&& MINE_SHAFT_ROOM_SUB_TYPE_SET.has(roomData.Subtype));
|
|
682
619
|
}
|
|
683
620
|
/**
|
|
684
621
|
* Helper function to check if the provided room is a miniboss room for a particular miniboss. This
|
|
685
622
|
* will only work for mini-bosses that have dedicated boss rooms in the "00.special rooms.stb" file.
|
|
686
623
|
*/
|
|
687
|
-
function isMinibossRoomOf(roomData, minibossID) {
|
|
688
|
-
return (roomData.Type ===
|
|
689
|
-
&& roomData.StageID ===
|
|
624
|
+
export function isMinibossRoomOf(roomData, minibossID) {
|
|
625
|
+
return (roomData.Type === RoomType.MINI_BOSS
|
|
626
|
+
&& roomData.StageID === StageID.SPECIAL_ROOMS
|
|
690
627
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
691
628
|
&& roomData.Subtype === minibossID);
|
|
692
629
|
}
|
|
@@ -694,19 +631,19 @@ function isMinibossRoomOf(roomData, minibossID) {
|
|
|
694
631
|
* Helper function to check if the provided room is a "mirror room" in Downpour or Dross. (These
|
|
695
632
|
* rooms are marked with a specific sub-type.)
|
|
696
633
|
*/
|
|
697
|
-
function isMirrorRoom(roomData) {
|
|
698
|
-
return (roomData.Type ===
|
|
699
|
-
&& (roomData.StageID ===
|
|
700
|
-
|| roomData.StageID ===
|
|
634
|
+
export function isMirrorRoom(roomData) {
|
|
635
|
+
return (roomData.Type === RoomType.DEFAULT
|
|
636
|
+
&& (roomData.StageID === StageID.DOWNPOUR
|
|
637
|
+
|| roomData.StageID === StageID.DROSS)
|
|
701
638
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
702
|
-
&& roomData.Subtype ===
|
|
639
|
+
&& roomData.Subtype === DownpourRoomSubType.MIRROR);
|
|
703
640
|
}
|
|
704
641
|
/**
|
|
705
642
|
* Helper function to check if the provided room matches one of the given room shapes.
|
|
706
643
|
*
|
|
707
644
|
* This function is variadic, which means you can pass as many room shapes as you want to match for.
|
|
708
645
|
*/
|
|
709
|
-
function isRoomShape(roomData, ...roomShapes) {
|
|
646
|
+
export function isRoomShape(roomData, ...roomShapes) {
|
|
710
647
|
return roomShapes.includes(roomData.Shape);
|
|
711
648
|
}
|
|
712
649
|
/**
|
|
@@ -714,22 +651,22 @@ function isRoomShape(roomData, ...roomShapes) {
|
|
|
714
651
|
*
|
|
715
652
|
* This function is variadic, which means you can pass as many room types as you want to match for.
|
|
716
653
|
*/
|
|
717
|
-
function isRoomType(roomData, ...roomTypes) {
|
|
654
|
+
export function isRoomType(roomData, ...roomTypes) {
|
|
718
655
|
return roomTypes.includes(roomData.Type);
|
|
719
656
|
}
|
|
720
657
|
/**
|
|
721
658
|
* Helper function for checking if the provided room is a secret exit that leads to a Repentance
|
|
722
659
|
* floor.
|
|
723
660
|
*/
|
|
724
|
-
function isSecretExit(roomGridIndex) {
|
|
661
|
+
export function isSecretExit(roomGridIndex) {
|
|
725
662
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
726
|
-
return roomGridIndex ===
|
|
663
|
+
return roomGridIndex === GridRoom.SECRET_EXIT;
|
|
727
664
|
}
|
|
728
665
|
/**
|
|
729
666
|
* Helper function to detect if a room type is a Secret Room, a Super Secret Room, or an Ultra
|
|
730
667
|
* Secret Room.
|
|
731
668
|
*/
|
|
732
|
-
function isSecretRoomType(roomType) {
|
|
669
|
+
export function isSecretRoomType(roomType) {
|
|
733
670
|
return SECRET_ROOM_TYPES.has(roomType);
|
|
734
671
|
}
|
|
735
672
|
/**
|
|
@@ -740,9 +677,9 @@ function isSecretRoomType(roomType) {
|
|
|
740
677
|
* words, they will have the same room type, room variant, and room sub-type of a normal shop. Thus,
|
|
741
678
|
* the only way to detect them is by using the grid index.
|
|
742
679
|
*/
|
|
743
|
-
function isSecretShop(roomGridIndex) {
|
|
680
|
+
export function isSecretShop(roomGridIndex) {
|
|
744
681
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
745
|
-
return roomGridIndex ===
|
|
682
|
+
return roomGridIndex === GridRoom.SECRET_SHOP;
|
|
746
683
|
}
|
|
747
684
|
/**
|
|
748
685
|
* If the `Room.Update` method is called in a `POST_NEW_ROOM` callback, then some entities will
|
|
@@ -750,55 +687,55 @@ function isSecretShop(roomGridIndex) {
|
|
|
750
687
|
* them to zero will have no effect. Thus, a generic solution is to record all of the entity
|
|
751
688
|
* positions/velocities before updating the room, and then restore those positions/velocities.
|
|
752
689
|
*/
|
|
753
|
-
function roomUpdateSafe() {
|
|
754
|
-
const room =
|
|
755
|
-
const entities =
|
|
756
|
-
const entityPositions =
|
|
757
|
-
const entityVelocities =
|
|
690
|
+
export function roomUpdateSafe() {
|
|
691
|
+
const room = game.GetRoom();
|
|
692
|
+
const entities = getEntities();
|
|
693
|
+
const entityPositions = getEntityPositions(entities);
|
|
694
|
+
const entityVelocities = getEntityVelocities(entities);
|
|
758
695
|
room.Update();
|
|
759
|
-
|
|
760
|
-
|
|
696
|
+
setEntityPositions(entityPositions, entities);
|
|
697
|
+
setEntityVelocities(entityVelocities, entities);
|
|
761
698
|
}
|
|
762
699
|
/** Helper function to set the backdrop (i.e. background) of the current room. */
|
|
763
|
-
function setBackdrop(backdropType) {
|
|
764
|
-
|
|
765
|
-
|
|
700
|
+
export function setBackdrop(backdropType) {
|
|
701
|
+
game.ShowHallucination(0, backdropType);
|
|
702
|
+
sfxManager.Stop(SoundEffect.DEATH_CARD);
|
|
766
703
|
}
|
|
767
704
|
/**
|
|
768
705
|
* Helper function to convert an uncleared room to a cleared room in the `POST_NEW_ROOM` callback.
|
|
769
706
|
* This is useful because if enemies are removed in this callback, a room drop will be awarded and
|
|
770
707
|
* the doors will start closed and then open.
|
|
771
708
|
*/
|
|
772
|
-
function setRoomCleared() {
|
|
773
|
-
const room =
|
|
709
|
+
export function setRoomCleared() {
|
|
710
|
+
const room = game.GetRoom();
|
|
774
711
|
const roomClear = room.IsClear();
|
|
775
712
|
// If the room is already cleared, we don't have to do anything.
|
|
776
713
|
if (roomClear) {
|
|
777
714
|
return;
|
|
778
715
|
}
|
|
779
716
|
room.SetClear(true);
|
|
780
|
-
for (const door of
|
|
781
|
-
if (
|
|
717
|
+
for (const door of getDoors()) {
|
|
718
|
+
if (isHiddenSecretRoomDoor(door)) {
|
|
782
719
|
continue;
|
|
783
720
|
}
|
|
784
721
|
// We don't use the `EntityDoor.Open` method since that will cause the door to play an
|
|
785
722
|
// animation.
|
|
786
|
-
|
|
723
|
+
openDoorFast(door);
|
|
787
724
|
// If this is a mini-boss room, then the door would be barred in addition to being closed.
|
|
788
725
|
// Ensure that the bar is not visible.
|
|
789
726
|
door.ExtraVisible = false;
|
|
790
727
|
}
|
|
791
|
-
|
|
728
|
+
sfxManager.Stop(SoundEffect.DOOR_HEAVY_OPEN);
|
|
792
729
|
// If the room contained Mom's Hands, then a screen shake will be queued. Override it with a 0
|
|
793
730
|
// frame shake.
|
|
794
|
-
|
|
731
|
+
game.ShakeScreen(0);
|
|
795
732
|
}
|
|
796
733
|
/**
|
|
797
734
|
* Helper function to emulate what happens when you bomb an Angel Statue or push a Reward Plate that
|
|
798
735
|
* spawns an NPC.
|
|
799
736
|
*/
|
|
800
|
-
function setRoomUncleared() {
|
|
801
|
-
const room =
|
|
737
|
+
export function setRoomUncleared() {
|
|
738
|
+
const room = game.GetRoom();
|
|
802
739
|
room.SetClear(false);
|
|
803
|
-
|
|
740
|
+
closeAllDoors();
|
|
804
741
|
}
|