isaacscript-common 87.9.7 → 87.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/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/index.rollup.d.ts +11 -11
- 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.d.ts +11 -11
- package/dist/interfaces/PlayerHealth.d.ts.map +1 -1
- 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/src/interfaces/PlayerHealth.ts +12 -11
|
@@ -1,76 +1,40 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
-
if (k2 === undefined) k2 = k;
|
|
4
|
-
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
-
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
-
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
-
}
|
|
8
|
-
Object.defineProperty(o, k2, desc);
|
|
9
|
-
}) : (function(o, m, k, k2) {
|
|
10
|
-
if (k2 === undefined) k2 = k;
|
|
11
|
-
o[k2] = m[k];
|
|
12
|
-
}));
|
|
13
|
-
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
-
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
-
}) : function(o, v) {
|
|
16
|
-
o["default"] = v;
|
|
17
|
-
});
|
|
18
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
19
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
20
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
21
4
|
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
22
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
23
6
|
};
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
const array_1 = require("../../../functions/array");
|
|
50
|
-
const doors_1 = require("../../../functions/doors");
|
|
51
|
-
const flag_1 = require("../../../functions/flag");
|
|
52
|
-
const log_1 = require("../../../functions/log");
|
|
53
|
-
const rng_1 = require("../../../functions/rng");
|
|
54
|
-
const rockAlt_1 = require("../../../functions/rockAlt");
|
|
55
|
-
const rooms_1 = require("../../../functions/rooms");
|
|
56
|
-
const sound_1 = require("../../../functions/sound");
|
|
57
|
-
const stage_1 = require("../../../functions/stage");
|
|
58
|
-
const utils_1 = require("../../../functions/utils");
|
|
59
|
-
const Feature_1 = require("../../private/Feature");
|
|
60
|
-
const backdrop_1 = require("./customStages/backdrop");
|
|
61
|
-
const constants_1 = require("./customStages/constants");
|
|
62
|
-
const gridEntities_1 = require("./customStages/gridEntities");
|
|
63
|
-
const shadows_1 = require("./customStages/shadows");
|
|
64
|
-
const streakText_1 = require("./customStages/streakText");
|
|
65
|
-
const utils_2 = require("./customStages/utils");
|
|
66
|
-
const v_1 = require("./customStages/v");
|
|
67
|
-
const versusScreen_1 = require("./customStages/versusScreen");
|
|
7
|
+
import { CollectibleType, GridEntityType, LevelCurse, LevelStage, ModCallback, RoomShape, RoomType, StageType, } from "isaac-typescript-definitions";
|
|
8
|
+
import { game, musicManager } from "../../../core/cachedClasses";
|
|
9
|
+
import * as metadataJSON from "../../../customStageMetadata.json"; // This will correspond to "customStageMetadata.lua" at run-time.
|
|
10
|
+
import { Exported } from "../../../decorators";
|
|
11
|
+
import { ISCFeature } from "../../../enums/ISCFeature";
|
|
12
|
+
import { ModCallbackCustom } from "../../../enums/ModCallbackCustom";
|
|
13
|
+
import { isArray } from "../../../functions/array";
|
|
14
|
+
import { doorSlotsToDoorSlotFlags, getDoorSlotsForRoomShape, } from "../../../functions/doors";
|
|
15
|
+
import { hasFlag, removeFlag } from "../../../functions/flag";
|
|
16
|
+
import { logError } from "../../../functions/log";
|
|
17
|
+
import { newRNG } from "../../../functions/rng";
|
|
18
|
+
import { removeUrnRewards } from "../../../functions/rockAlt";
|
|
19
|
+
import { getRoomDataForTypeVariant, getRoomsInsideGrid, inRoomType, } from "../../../functions/rooms";
|
|
20
|
+
import { getMusicForStage } from "../../../functions/sound";
|
|
21
|
+
import { setStage } from "../../../functions/stage";
|
|
22
|
+
import { assertDefined } from "../../../functions/utils";
|
|
23
|
+
import { Feature } from "../../private/Feature";
|
|
24
|
+
import { setCustomStageBackdrop } from "./customStages/backdrop";
|
|
25
|
+
import { CUSTOM_FLOOR_STAGE, CUSTOM_FLOOR_STAGE_TYPE, DEFAULT_BASE_STAGE, DEFAULT_BASE_STAGE_TYPE, } from "./customStages/constants";
|
|
26
|
+
import { convertVanillaTrapdoors, setCustomDecorationGraphics, setCustomDoorGraphics, setCustomPitGraphics, setCustomRockGraphics, } from "./customStages/gridEntities";
|
|
27
|
+
import { setShadows } from "./customStages/shadows";
|
|
28
|
+
import { streakTextGetShaderParams, streakTextPostRender, topStreakTextStart, } from "./customStages/streakText";
|
|
29
|
+
import { getRandomBossRoomFromPool, getRandomCustomStageRoom, } from "./customStages/utils";
|
|
30
|
+
import { v } from "./customStages/v";
|
|
31
|
+
import { playVersusScreenAnimation, versusScreenPostRender, } from "./customStages/versusScreen";
|
|
68
32
|
/**
|
|
69
33
|
* 60 does not work correctly (the music kicking in from stage -1 will mute it), so we use 70 to be
|
|
70
34
|
* safe.
|
|
71
35
|
*/
|
|
72
36
|
const MUSIC_DELAY_RENDER_FRAMES = 70;
|
|
73
|
-
class CustomStages extends
|
|
37
|
+
export class CustomStages extends Feature {
|
|
74
38
|
/** Indexed by custom stage name. */
|
|
75
39
|
customStagesMap = new Map();
|
|
76
40
|
/** Indexed by room variant. */
|
|
@@ -83,26 +47,26 @@ class CustomStages extends Feature_1.Feature {
|
|
|
83
47
|
pause;
|
|
84
48
|
runInNFrames;
|
|
85
49
|
goToCustomStage = (destinationName, destinationStage, _destinationStageType) => {
|
|
86
|
-
|
|
87
|
-
const firstFloor = destinationStage ===
|
|
50
|
+
assertDefined(destinationName, "Failed to go to a custom stage since the custom trapdoors feature did not pass a destination name to the logic function.");
|
|
51
|
+
const firstFloor = destinationStage === LevelStage.BASEMENT_1;
|
|
88
52
|
this.setCustomStage(destinationName, firstFloor);
|
|
89
53
|
};
|
|
90
54
|
// ModCallback.POST_RENDER (2)
|
|
91
55
|
postRender = () => {
|
|
92
|
-
const customStage =
|
|
56
|
+
const customStage = v.run.currentCustomStage;
|
|
93
57
|
if (customStage === null) {
|
|
94
58
|
return;
|
|
95
59
|
}
|
|
96
|
-
|
|
97
|
-
|
|
60
|
+
streakTextPostRender();
|
|
61
|
+
versusScreenPostRender(this.pause, this.disableAllSound);
|
|
98
62
|
// Fix the bug where the music will stop after loading a new room. (This does not work if placed
|
|
99
63
|
// in the `POST_NEW_ROOM_REORDERED` callback or the `POST_UPDATE` callback.)
|
|
100
64
|
if (customStage.music !== undefined) {
|
|
101
|
-
const currentMusic =
|
|
65
|
+
const currentMusic = musicManager.GetCurrentMusicID();
|
|
102
66
|
const music = Isaac.GetMusicIdByName(customStage.music);
|
|
103
67
|
if (currentMusic === music) {
|
|
104
|
-
|
|
105
|
-
|
|
68
|
+
musicManager.Resume();
|
|
69
|
+
musicManager.UpdateVolume();
|
|
106
70
|
}
|
|
107
71
|
}
|
|
108
72
|
};
|
|
@@ -112,7 +76,7 @@ class CustomStages extends Feature_1.Feature {
|
|
|
112
76
|
*/
|
|
113
77
|
// ModCallback.POST_USE_ITEM (3)
|
|
114
78
|
postUseItemRedKey = () => {
|
|
115
|
-
const customStage =
|
|
79
|
+
const customStage = v.run.currentCustomStage;
|
|
116
80
|
if (customStage === null) {
|
|
117
81
|
return undefined;
|
|
118
82
|
}
|
|
@@ -120,29 +84,29 @@ class CustomStages extends Feature_1.Feature {
|
|
|
120
84
|
return undefined;
|
|
121
85
|
}
|
|
122
86
|
this.usingRedKey = false;
|
|
123
|
-
const level =
|
|
124
|
-
level.SetStage(
|
|
87
|
+
const level = game.GetLevel();
|
|
88
|
+
level.SetStage(CUSTOM_FLOOR_STAGE, CUSTOM_FLOOR_STAGE_TYPE);
|
|
125
89
|
return undefined;
|
|
126
90
|
};
|
|
127
91
|
// ModCallback.POST_CURSE_EVAL (12)
|
|
128
92
|
postCurseEval = (curses) => {
|
|
129
|
-
const customStage =
|
|
93
|
+
const customStage = v.run.currentCustomStage;
|
|
130
94
|
if (customStage === null) {
|
|
131
95
|
return undefined;
|
|
132
96
|
}
|
|
133
97
|
// Prevent XL floors on custom stages, since the streak text will not work properly.
|
|
134
|
-
if (
|
|
135
|
-
return
|
|
98
|
+
if (hasFlag(curses, LevelCurse.LABYRINTH)) {
|
|
99
|
+
return removeFlag(curses, LevelCurse.LABYRINTH);
|
|
136
100
|
}
|
|
137
101
|
return undefined;
|
|
138
102
|
};
|
|
139
103
|
// ModCallback.GET_SHADER_PARAMS (22)
|
|
140
104
|
getShaderParams = (shaderName) => {
|
|
141
|
-
const customStage =
|
|
105
|
+
const customStage = v.run.currentCustomStage;
|
|
142
106
|
if (customStage === null) {
|
|
143
107
|
return undefined;
|
|
144
108
|
}
|
|
145
|
-
|
|
109
|
+
streakTextGetShaderParams(customStage, shaderName);
|
|
146
110
|
return undefined;
|
|
147
111
|
};
|
|
148
112
|
/**
|
|
@@ -151,21 +115,21 @@ class CustomStages extends Feature_1.Feature {
|
|
|
151
115
|
*/
|
|
152
116
|
// ModCallback.PRE_USE_ITEM (23)
|
|
153
117
|
preUseItemRedKey = () => {
|
|
154
|
-
const customStage =
|
|
118
|
+
const customStage = v.run.currentCustomStage;
|
|
155
119
|
if (customStage === null) {
|
|
156
120
|
return undefined;
|
|
157
121
|
}
|
|
158
122
|
this.usingRedKey = true;
|
|
159
|
-
const level =
|
|
160
|
-
const stage = customStage.baseStage ??
|
|
161
|
-
const stageType = customStage.baseStageType ??
|
|
123
|
+
const level = game.GetLevel();
|
|
124
|
+
const stage = customStage.baseStage ?? DEFAULT_BASE_STAGE;
|
|
125
|
+
const stageType = customStage.baseStageType ?? DEFAULT_BASE_STAGE_TYPE;
|
|
162
126
|
level.SetStage(stage, stageType); // eslint-disable-line complete/strict-enums
|
|
163
127
|
return undefined;
|
|
164
128
|
};
|
|
165
129
|
// ModCallbackCustom.POST_GRID_ENTITY_BROKEN
|
|
166
130
|
// GridEntityType.ROCK_ALT
|
|
167
131
|
postGridEntityBrokenRockAlt = (gridEntity) => {
|
|
168
|
-
const customStage =
|
|
132
|
+
const customStage = v.run.currentCustomStage;
|
|
169
133
|
if (customStage === null) {
|
|
170
134
|
return;
|
|
171
135
|
}
|
|
@@ -176,11 +140,11 @@ class CustomStages extends Feature_1.Feature {
|
|
|
176
140
|
}
|
|
177
141
|
// On the bugged stage of -1, only urns will spawn, so we do not have to handle the case of
|
|
178
142
|
// mushroom rewards, skull rewards, and so on.
|
|
179
|
-
|
|
143
|
+
removeUrnRewards(gridEntity);
|
|
180
144
|
};
|
|
181
145
|
// ModCallbackCustom.POST_GRID_ENTITY_INIT
|
|
182
146
|
postGridEntityInit = (gridEntity) => {
|
|
183
|
-
const customStage =
|
|
147
|
+
const customStage = v.run.currentCustomStage;
|
|
184
148
|
if (customStage === null) {
|
|
185
149
|
return;
|
|
186
150
|
}
|
|
@@ -188,72 +152,72 @@ class CustomStages extends Feature_1.Feature {
|
|
|
188
152
|
if (this.customGridEntities.isCustomGridEntity(gridEntity)) {
|
|
189
153
|
return;
|
|
190
154
|
}
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
155
|
+
setCustomDecorationGraphics(customStage, gridEntity);
|
|
156
|
+
setCustomRockGraphics(customStage, gridEntity);
|
|
157
|
+
setCustomPitGraphics(customStage, gridEntity);
|
|
158
|
+
setCustomDoorGraphics(customStage, gridEntity);
|
|
159
|
+
convertVanillaTrapdoors(customStage, gridEntity, v.run.firstFloor, this.customTrapdoors);
|
|
196
160
|
};
|
|
197
161
|
// ModCallbackCustom.POST_NEW_ROOM_REORDERED
|
|
198
162
|
postNewRoomReordered = () => {
|
|
199
|
-
const customStage =
|
|
163
|
+
const customStage = v.run.currentCustomStage;
|
|
200
164
|
if (customStage === null) {
|
|
201
165
|
return;
|
|
202
166
|
}
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
167
|
+
setCustomStageBackdrop(customStage);
|
|
168
|
+
setShadows(customStage);
|
|
169
|
+
playVersusScreenAnimation(customStage, this.disableAllSound, this.pause, this.runInNFrames);
|
|
206
170
|
// Fix the bug where music from special rooms (like the "Boss Over" music) will persist for the
|
|
207
171
|
// rest of the floor.
|
|
208
|
-
if (customStage.music !== undefined &&
|
|
172
|
+
if (customStage.music !== undefined && inRoomType(RoomType.DEFAULT)) {
|
|
209
173
|
const music = Isaac.GetMusicIdByName(customStage.music);
|
|
210
|
-
const currentMusic =
|
|
174
|
+
const currentMusic = musicManager.GetCurrentMusicID();
|
|
211
175
|
if (currentMusic !== music) {
|
|
212
|
-
|
|
176
|
+
musicManager.Fadein(music);
|
|
213
177
|
}
|
|
214
178
|
}
|
|
215
179
|
};
|
|
216
180
|
/** @internal */
|
|
217
|
-
v =
|
|
181
|
+
v = v;
|
|
218
182
|
/** @internal */
|
|
219
183
|
constructor(customGridEntities, customTrapdoors, disableAllSound, gameReorderedCallbacks, pause, runInNFrames) {
|
|
220
184
|
super();
|
|
221
185
|
this.featuresUsed = [
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
186
|
+
ISCFeature.CUSTOM_GRID_ENTITIES,
|
|
187
|
+
ISCFeature.CUSTOM_TRAPDOORS,
|
|
188
|
+
ISCFeature.DISABLE_ALL_SOUND,
|
|
189
|
+
ISCFeature.GAME_REORDERED_CALLBACKS,
|
|
190
|
+
ISCFeature.PAUSE,
|
|
191
|
+
ISCFeature.RUN_IN_N_FRAMES,
|
|
228
192
|
];
|
|
229
193
|
this.callbacksUsed = [
|
|
230
194
|
// 2
|
|
231
|
-
[
|
|
195
|
+
[ModCallback.POST_RENDER, this.postRender],
|
|
232
196
|
// 3
|
|
233
197
|
[
|
|
234
|
-
|
|
198
|
+
ModCallback.POST_USE_ITEM,
|
|
235
199
|
this.postUseItemRedKey,
|
|
236
|
-
[
|
|
200
|
+
[CollectibleType.RED_KEY],
|
|
237
201
|
],
|
|
238
202
|
// 12
|
|
239
|
-
[
|
|
203
|
+
[ModCallback.POST_CURSE_EVAL, this.postCurseEval],
|
|
240
204
|
// 21
|
|
241
|
-
[
|
|
205
|
+
[ModCallback.GET_SHADER_PARAMS, this.getShaderParams],
|
|
242
206
|
// 23
|
|
243
207
|
[
|
|
244
|
-
|
|
208
|
+
ModCallback.PRE_USE_ITEM,
|
|
245
209
|
this.preUseItemRedKey,
|
|
246
|
-
[
|
|
210
|
+
[CollectibleType.RED_KEY],
|
|
247
211
|
],
|
|
248
212
|
];
|
|
249
213
|
this.customCallbacksUsed = [
|
|
250
214
|
[
|
|
251
|
-
|
|
215
|
+
ModCallbackCustom.POST_GRID_ENTITY_BROKEN,
|
|
252
216
|
this.postGridEntityBrokenRockAlt,
|
|
253
|
-
[
|
|
217
|
+
[GridEntityType.ROCK_ALT],
|
|
254
218
|
],
|
|
255
|
-
[
|
|
256
|
-
[
|
|
219
|
+
[ModCallbackCustom.POST_GRID_ENTITY_INIT, this.postGridEntityInit],
|
|
220
|
+
[ModCallbackCustom.POST_NEW_ROOM_REORDERED, this.postNewRoomReordered],
|
|
257
221
|
];
|
|
258
222
|
this.customGridEntities = customGridEntities;
|
|
259
223
|
this.customTrapdoors = customTrapdoors;
|
|
@@ -264,7 +228,7 @@ class CustomStages extends Feature_1.Feature {
|
|
|
264
228
|
this.initCustomStageMetadata();
|
|
265
229
|
}
|
|
266
230
|
initCustomStageMetadata() {
|
|
267
|
-
if (!
|
|
231
|
+
if (!isArray(metadataJSON)) {
|
|
268
232
|
error('The IsaacScript standard library attempted to read the custom stage metadata from the "customStageMetadata.lua" file, but it was not an array.');
|
|
269
233
|
}
|
|
270
234
|
const customStagesLua = metadataJSON;
|
|
@@ -286,9 +250,9 @@ class CustomStages extends Feature_1.Feature {
|
|
|
286
250
|
}
|
|
287
251
|
/** Pick a custom room for each vanilla room. */
|
|
288
252
|
setStageRoomsData(customStage, rng, verbose) {
|
|
289
|
-
const level =
|
|
253
|
+
const level = game.GetLevel();
|
|
290
254
|
const startingRoomGridIndex = level.GetStartingRoomIndex();
|
|
291
|
-
for (const room of
|
|
255
|
+
for (const room of getRoomsInsideGrid()) {
|
|
292
256
|
// The starting floor of each room should stay empty.
|
|
293
257
|
if (room.SafeGridIndex === startingRoomGridIndex) {
|
|
294
258
|
continue;
|
|
@@ -301,15 +265,15 @@ class CustomStages extends Feature_1.Feature {
|
|
|
301
265
|
if (roomShapeMap === undefined) {
|
|
302
266
|
// Only show errors for non-default room types. (We do not require that end-users provide
|
|
303
267
|
// custom rooms for shops and other special rooms inside of their XML file.)
|
|
304
|
-
if (roomType ===
|
|
305
|
-
|
|
268
|
+
if (roomType === RoomType.DEFAULT) {
|
|
269
|
+
logError(`Failed to find any custom rooms for RoomType.${RoomType[roomType]} (${roomType}) for custom stage: ${customStage.name}`);
|
|
306
270
|
}
|
|
307
271
|
continue;
|
|
308
272
|
}
|
|
309
273
|
const roomShape = room.Data.Shape;
|
|
310
274
|
const roomDoorSlotFlagMap = roomShapeMap.get(roomShape);
|
|
311
275
|
if (roomDoorSlotFlagMap === undefined) {
|
|
312
|
-
|
|
276
|
+
logError(`Failed to find any custom rooms for RoomType.${RoomType[roomType]} (${roomType}) + RoomShape.${RoomShape[roomShape]} (${roomShape}) for custom stage: ${customStage.name}`);
|
|
313
277
|
continue;
|
|
314
278
|
}
|
|
315
279
|
const doorSlotFlags = room.Data.Doors;
|
|
@@ -318,31 +282,31 @@ class CustomStages extends Feature_1.Feature {
|
|
|
318
282
|
// The custom stage does not have any rooms for the specific room type + room shape + door
|
|
319
283
|
// slot combination. As a fallback, check to see if the custom stage has one or more rooms
|
|
320
284
|
// for this specific room type + room shape + all doors.
|
|
321
|
-
const allDoorSlots =
|
|
322
|
-
const allDoorSlotFlags =
|
|
285
|
+
const allDoorSlots = getDoorSlotsForRoomShape(roomShape);
|
|
286
|
+
const allDoorSlotFlags = doorSlotsToDoorSlotFlags(allDoorSlots);
|
|
323
287
|
roomsMetadata = roomDoorSlotFlagMap.get(allDoorSlotFlags);
|
|
324
288
|
if (roomsMetadata === undefined) {
|
|
325
|
-
|
|
289
|
+
logError(`Failed to find any custom rooms for RoomType.${RoomType[roomType]} (${roomType}) + RoomShape.${RoomShape[roomShape]} (${roomShape}) + all doors enabled for custom stage: ${customStage.name}`);
|
|
326
290
|
continue;
|
|
327
291
|
}
|
|
328
292
|
}
|
|
329
293
|
let randomRoom;
|
|
330
|
-
if (roomType ===
|
|
294
|
+
if (roomType === RoomType.BOSS) {
|
|
331
295
|
if (customStage.bossPool === undefined) {
|
|
332
296
|
continue;
|
|
333
297
|
}
|
|
334
|
-
randomRoom =
|
|
298
|
+
randomRoom = getRandomBossRoomFromPool(roomsMetadata, customStage.bossPool, rng, verbose);
|
|
335
299
|
}
|
|
336
300
|
else {
|
|
337
|
-
randomRoom =
|
|
301
|
+
randomRoom = getRandomCustomStageRoom(roomsMetadata, rng, verbose);
|
|
338
302
|
}
|
|
339
303
|
let newRoomData = this.customStageCachedRoomData.get(randomRoom.variant);
|
|
340
304
|
if (newRoomData === undefined) {
|
|
341
305
|
// We do not already have the room data for this room cached.
|
|
342
|
-
newRoomData =
|
|
306
|
+
newRoomData = getRoomDataForTypeVariant(roomType, randomRoom.variant, false, // Since we are going to multiple rooms, we cancel the transition.
|
|
343
307
|
true);
|
|
344
308
|
if (newRoomData === undefined) {
|
|
345
|
-
|
|
309
|
+
logError(`Failed to get the room data for room variant ${randomRoom.variant} for custom stage: ${customStage.name}`);
|
|
346
310
|
continue;
|
|
347
311
|
}
|
|
348
312
|
this.customStageCachedRoomData.set(randomRoom.variant, newRoomData);
|
|
@@ -370,39 +334,39 @@ class CustomStages extends Feature_1.Feature {
|
|
|
370
334
|
*/
|
|
371
335
|
setCustomStage(name, firstFloor = true, streakText = true, verbose = false) {
|
|
372
336
|
const customStage = this.customStagesMap.get(name);
|
|
373
|
-
|
|
374
|
-
const level =
|
|
337
|
+
assertDefined(customStage, `Failed to set the custom stage of "${name}" because it was not found in the custom stages map. (Try restarting IsaacScript / recompiling the mod / restarting the game, and try again. If that does not work, you probably forgot to define it in your "tsconfig.json" file.) See the website for more details on how to set up custom stages.`);
|
|
338
|
+
const level = game.GetLevel();
|
|
375
339
|
const stage = level.GetStage();
|
|
376
|
-
const seeds =
|
|
340
|
+
const seeds = game.GetSeeds();
|
|
377
341
|
const startSeed = seeds.GetStartSeed();
|
|
378
|
-
const rng =
|
|
379
|
-
|
|
380
|
-
|
|
342
|
+
const rng = newRNG(startSeed);
|
|
343
|
+
v.run.currentCustomStage = customStage;
|
|
344
|
+
v.run.firstFloor = firstFloor;
|
|
381
345
|
// Before changing the stage, we have to revert the bugged stage, if necessary. This prevents
|
|
382
346
|
// the bug where the backdrop will not spawn.
|
|
383
|
-
if (stage ===
|
|
384
|
-
level.SetStage(
|
|
347
|
+
if (stage === CUSTOM_FLOOR_STAGE) {
|
|
348
|
+
level.SetStage(LevelStage.BASEMENT_1, StageType.ORIGINAL);
|
|
385
349
|
}
|
|
386
350
|
let baseStage = customStage.baseStage === undefined
|
|
387
|
-
?
|
|
351
|
+
? DEFAULT_BASE_STAGE
|
|
388
352
|
: // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
389
353
|
customStage.baseStage;
|
|
390
354
|
if (!firstFloor) {
|
|
391
355
|
baseStage++; // eslint-disable-line complete/strict-enums
|
|
392
356
|
}
|
|
393
357
|
const baseStageType = customStage.baseStageType === undefined
|
|
394
|
-
?
|
|
358
|
+
? DEFAULT_BASE_STAGE_TYPE
|
|
395
359
|
: // eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
396
360
|
customStage.baseStageType;
|
|
397
361
|
const reseed = stage >= baseStage;
|
|
398
|
-
|
|
362
|
+
setStage(baseStage, baseStageType, reseed);
|
|
399
363
|
// As soon as we warp to the base stage, the base stage music will begin to play. Thus, we
|
|
400
364
|
// temporarily mute all music.
|
|
401
|
-
|
|
365
|
+
musicManager.Disable();
|
|
402
366
|
this.setStageRoomsData(customStage, rng, verbose);
|
|
403
367
|
// Set the stage to an invalid value, which will prevent the walls and floors from loading.
|
|
404
|
-
const targetStage =
|
|
405
|
-
const targetStageType =
|
|
368
|
+
const targetStage = CUSTOM_FLOOR_STAGE;
|
|
369
|
+
const targetStageType = CUSTOM_FLOOR_STAGE_TYPE;
|
|
406
370
|
level.SetStage(targetStage, targetStageType);
|
|
407
371
|
this.gameReorderedCallbacks.reorderedCallbacksSetStage(targetStage, targetStageType);
|
|
408
372
|
// In vanilla, the streak text appears about when the pixelation has faded and while Isaac is
|
|
@@ -411,7 +375,7 @@ class CustomStages extends Feature_1.Feature {
|
|
|
411
375
|
// `POST_RENDER` callback. Thus, we run it on the next game frame as a workaround.
|
|
412
376
|
if (streakText) {
|
|
413
377
|
this.runInNFrames.runNextGameFrame(() => {
|
|
414
|
-
|
|
378
|
+
topStreakTextStart();
|
|
415
379
|
});
|
|
416
380
|
}
|
|
417
381
|
// The bugged stage will not have any music associated with it, so we must manually start to
|
|
@@ -421,16 +385,16 @@ class CustomStages extends Feature_1.Feature {
|
|
|
421
385
|
// eslint-disable-next-line @typescript-eslint/no-unnecessary-type-assertion
|
|
422
386
|
customStageMusic = Isaac.GetMusicIdByName(customStage.music);
|
|
423
387
|
if (customStageMusic === -1) {
|
|
424
|
-
|
|
388
|
+
logError(`Failed to get the music ID associated with the name of: ${customStage.music}`);
|
|
425
389
|
}
|
|
426
390
|
}
|
|
427
391
|
const music = customStageMusic === undefined || customStageMusic === -1
|
|
428
|
-
?
|
|
392
|
+
? getMusicForStage(baseStage, baseStageType)
|
|
429
393
|
: customStageMusic;
|
|
430
394
|
this.runInNFrames.runInNRenderFrames(() => {
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
395
|
+
musicManager.Enable();
|
|
396
|
+
musicManager.Play(music);
|
|
397
|
+
musicManager.UpdateVolume();
|
|
434
398
|
}, MUSIC_DELAY_RENDER_FRAMES);
|
|
435
399
|
// We must reload the current room in order for the `Level.SetStage` method to take effect.
|
|
436
400
|
// Furthermore, we need to cancel the queued warp to the `GridRoom.DEBUG` room. We can
|
|
@@ -447,15 +411,14 @@ class CustomStages extends Feature_1.Feature {
|
|
|
447
411
|
* @public
|
|
448
412
|
*/
|
|
449
413
|
disableCustomStage() {
|
|
450
|
-
|
|
414
|
+
v.run.currentCustomStage = null;
|
|
451
415
|
}
|
|
452
416
|
}
|
|
453
|
-
exports.CustomStages = CustomStages;
|
|
454
417
|
__decorate([
|
|
455
|
-
|
|
418
|
+
Exported
|
|
456
419
|
], CustomStages.prototype, "setCustomStage", null);
|
|
457
420
|
__decorate([
|
|
458
|
-
|
|
421
|
+
Exported
|
|
459
422
|
], CustomStages.prototype, "disableCustomStage", null);
|
|
460
423
|
function getRoomTypeMap(customStageLua) {
|
|
461
424
|
const roomTypeMap = new Map();
|