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,38 +1,35 @@
|
|
|
1
|
-
"use strict";
|
|
2
1
|
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
3
2
|
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
4
3
|
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
5
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;
|
|
6
5
|
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
7
6
|
};
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
const Feature_1 = require("../../private/Feature");
|
|
35
|
-
const constants_2 = require("./customStages/constants");
|
|
7
|
+
import { ButtonAction, Direction, EntityCollisionClass, EntityGridCollisionClass, EntityPartition, GridCollisionClass, LevelStage, ModCallback, PlayerType, RoomTransitionAnim, RoomType, StageType, } from "isaac-typescript-definitions";
|
|
8
|
+
import { game } from "../../../core/cachedClasses";
|
|
9
|
+
import { VectorZero } from "../../../core/constants";
|
|
10
|
+
import { Exported } from "../../../decorators";
|
|
11
|
+
import { ISCFeature } from "../../../enums/ISCFeature";
|
|
12
|
+
import { ModCallbackCustom } from "../../../enums/ModCallbackCustom";
|
|
13
|
+
import { GridEntityTypeCustom } from "../../../enums/private/GridEntityTypeCustom";
|
|
14
|
+
import { StageTravelState } from "../../../enums/private/StageTravelState";
|
|
15
|
+
import { TrapdoorAnimation } from "../../../enums/private/TrapdoorAnimation";
|
|
16
|
+
import { easeOutSine } from "../../../functions/easing";
|
|
17
|
+
import { isAfterRoomFrame, isBeforeRenderFrame, onOrAfterRenderFrame, } from "../../../functions/frames";
|
|
18
|
+
import { log } from "../../../functions/log";
|
|
19
|
+
import { movePlayersToCenter } from "../../../functions/playerCenter";
|
|
20
|
+
import { getAllPlayers, getOtherPlayers, isChildPlayer, } from "../../../functions/playerIndex";
|
|
21
|
+
import { isCharacter } from "../../../functions/players";
|
|
22
|
+
import { anyPlayerCloserThan } from "../../../functions/positionVelocity";
|
|
23
|
+
import { getRoomGridIndex, getRoomListIndex, } from "../../../functions/roomData";
|
|
24
|
+
import { teleport } from "../../../functions/roomTransition";
|
|
25
|
+
import { setStage } from "../../../functions/stage";
|
|
26
|
+
import { getTSTLClassName } from "../../../functions/tstlClass";
|
|
27
|
+
import { assertDefined, isRepentancePlus } from "../../../functions/utils";
|
|
28
|
+
import { isVector } from "../../../functions/vector";
|
|
29
|
+
import { ReadonlySet } from "../../../types/ReadonlySet";
|
|
30
|
+
import { DefaultMap } from "../../DefaultMap";
|
|
31
|
+
import { Feature } from "../../private/Feature";
|
|
32
|
+
import { CUSTOM_FLOOR_STAGE } from "./customStages/constants";
|
|
36
33
|
const DEBUG = false;
|
|
37
34
|
/**
|
|
38
35
|
* This also applies to crawl spaces. The value was determined through trial and error to match
|
|
@@ -42,7 +39,7 @@ const TRAPDOOR_OPEN_DISTANCE = 60;
|
|
|
42
39
|
const TRAPDOOR_OPEN_DISTANCE_AFTER_BOSS = TRAPDOOR_OPEN_DISTANCE * 2.5;
|
|
43
40
|
const TRAPDOOR_BOSS_REACTION_FRAMES = 30;
|
|
44
41
|
const TRAPDOOR_TOUCH_DISTANCE = 16.5;
|
|
45
|
-
const ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL = new
|
|
42
|
+
const ANIMATIONS_THAT_PREVENT_STAGE_TRAVEL = new ReadonlySet([
|
|
46
43
|
"Death",
|
|
47
44
|
"Happy",
|
|
48
45
|
"Sad",
|
|
@@ -53,17 +50,17 @@ const OTHER_PLAYER_TRAPDOOR_JUMP_DELAY_GAME_FRAMES = 6;
|
|
|
53
50
|
const OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES = 5;
|
|
54
51
|
const v = {
|
|
55
52
|
run: {
|
|
56
|
-
state:
|
|
53
|
+
state: StageTravelState.NONE,
|
|
57
54
|
/** The render frame that this state was reached. */
|
|
58
55
|
stateRenderFrame: null,
|
|
59
56
|
customTrapdoorActivated: null,
|
|
60
57
|
},
|
|
61
58
|
level: {
|
|
62
59
|
/** Indexed by room list index and grid index. */
|
|
63
|
-
trapdoors: new
|
|
60
|
+
trapdoors: new DefaultMap(() => new Map()),
|
|
64
61
|
},
|
|
65
62
|
};
|
|
66
|
-
class CustomTrapdoors extends
|
|
63
|
+
export class CustomTrapdoors extends Feature {
|
|
67
64
|
/** Indexed by custom trapdoor ID. */
|
|
68
65
|
destinationFuncMap = new Map();
|
|
69
66
|
/**
|
|
@@ -91,7 +88,7 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
91
88
|
// ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE
|
|
92
89
|
// GridEntityTypeCustom.TRAPDOOR_CUSTOM
|
|
93
90
|
postGridEntityCustomUpdateTrapdoor = (gridEntity) => {
|
|
94
|
-
const roomListIndex =
|
|
91
|
+
const roomListIndex = getRoomListIndex();
|
|
95
92
|
const gridIndex = gridEntity.GetGridIndex();
|
|
96
93
|
const roomTrapdoorMap = v.level.trapdoors.getAndSetDefault(roomListIndex);
|
|
97
94
|
const trapdoorDescription = roomTrapdoorMap.get(gridIndex);
|
|
@@ -111,26 +108,26 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
111
108
|
constructor(customGridEntities, disableInputs, ponyDetection, roomClearFrame, runInNFrames, runNextRoom, stageHistory) {
|
|
112
109
|
super();
|
|
113
110
|
this.featuresUsed = [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
111
|
+
ISCFeature.CUSTOM_GRID_ENTITIES,
|
|
112
|
+
ISCFeature.DISABLE_INPUTS,
|
|
113
|
+
ISCFeature.PONY_DETECTION,
|
|
114
|
+
ISCFeature.ROOM_CLEAR_FRAME,
|
|
115
|
+
ISCFeature.RUN_IN_N_FRAMES,
|
|
116
|
+
ISCFeature.RUN_NEXT_ROOM,
|
|
117
|
+
ISCFeature.STAGE_HISTORY,
|
|
121
118
|
];
|
|
122
119
|
this.callbacksUsed = [
|
|
123
120
|
// 2
|
|
124
|
-
[
|
|
121
|
+
[ModCallback.POST_RENDER, this.postRender],
|
|
125
122
|
];
|
|
126
123
|
this.customCallbacksUsed = [
|
|
127
124
|
[
|
|
128
|
-
|
|
125
|
+
ModCallbackCustom.POST_GRID_ENTITY_CUSTOM_UPDATE,
|
|
129
126
|
this.postGridEntityCustomUpdateTrapdoor,
|
|
130
|
-
[
|
|
127
|
+
[GridEntityTypeCustom.TRAPDOOR_CUSTOM],
|
|
131
128
|
],
|
|
132
129
|
[
|
|
133
|
-
|
|
130
|
+
ModCallbackCustom.POST_PEFFECT_UPDATE_REORDERED,
|
|
134
131
|
this.postPEffectUpdateReordered,
|
|
135
132
|
],
|
|
136
133
|
];
|
|
@@ -143,15 +140,15 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
143
140
|
this.stageHistory = stageHistory;
|
|
144
141
|
}
|
|
145
142
|
checkAllPlayersJumpComplete() {
|
|
146
|
-
if (v.run.state !==
|
|
143
|
+
if (v.run.state !== StageTravelState.PLAYERS_JUMPING_DOWN) {
|
|
147
144
|
return;
|
|
148
145
|
}
|
|
149
146
|
if (anyPlayerPlayingExtraAnimation()) {
|
|
150
147
|
return;
|
|
151
148
|
}
|
|
152
149
|
const renderFrameCount = Isaac.GetFrameCount();
|
|
153
|
-
const roomGridIndex =
|
|
154
|
-
v.run.state =
|
|
150
|
+
const roomGridIndex = getRoomGridIndex();
|
|
151
|
+
v.run.state = StageTravelState.PIXELATION_TO_BLACK;
|
|
155
152
|
v.run.stateRenderFrame = renderFrameCount;
|
|
156
153
|
this.logStateChanged();
|
|
157
154
|
// In order to display the pixelation effect that should happen when we go to a new floor, we
|
|
@@ -159,24 +156,24 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
159
156
|
// do not have to worry about Curse of the Maze here, because even if we are taken to a
|
|
160
157
|
// different room, it will not matter, since we will be traveling to a new floor after the
|
|
161
158
|
// screen fades to black.)
|
|
162
|
-
|
|
159
|
+
teleport(roomGridIndex, Direction.NO_DIRECTION, RoomTransitionAnim.PIXELATION);
|
|
163
160
|
// Next, we wait a certain amount of render frames for the pixelation to fade the screen to
|
|
164
161
|
// black.
|
|
165
162
|
}
|
|
166
163
|
checkPixelationToBlackComplete() {
|
|
167
|
-
if (v.run.state !==
|
|
164
|
+
if (v.run.state !== StageTravelState.PIXELATION_TO_BLACK
|
|
168
165
|
|| v.run.stateRenderFrame === null) {
|
|
169
166
|
return;
|
|
170
167
|
}
|
|
171
168
|
const renderFrameScreenBlack = v.run.stateRenderFrame + PIXELATION_TO_BLACK_FRAMES;
|
|
172
|
-
if (
|
|
169
|
+
if (isBeforeRenderFrame(renderFrameScreenBlack)) {
|
|
173
170
|
return;
|
|
174
171
|
}
|
|
175
|
-
v.run.state =
|
|
172
|
+
v.run.state = StageTravelState.WAITING_FOR_FIRST_PIXELATION_TO_END;
|
|
176
173
|
this.logStateChanged();
|
|
177
174
|
// Now, we display a black sprite on top of the pixelation effect, to prevent showing the rest
|
|
178
175
|
// of the animation.
|
|
179
|
-
const hud =
|
|
176
|
+
const hud = game.GetHUD();
|
|
180
177
|
hud.SetVisible(false);
|
|
181
178
|
// If the pixelation effect is not fully allowed to complete, the game's internal buffer will
|
|
182
179
|
// not be flushed. The consequence of this is that after 11 custom stage transitions, the
|
|
@@ -184,24 +181,24 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
184
181
|
// In order to work around this, we fully let the animation complete by only continuing the
|
|
185
182
|
// stage transition on the next game frame.
|
|
186
183
|
this.runInNFrames.runNextGameFrame(() => {
|
|
187
|
-
const level =
|
|
184
|
+
const level = game.GetLevel();
|
|
188
185
|
const startingRoomIndex = level.GetStartingRoomIndex();
|
|
189
186
|
const futureRenderFrameCount = Isaac.GetFrameCount();
|
|
190
187
|
v.run.state =
|
|
191
|
-
|
|
188
|
+
StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY;
|
|
192
189
|
v.run.stateRenderFrame = futureRenderFrameCount;
|
|
193
190
|
this.goToCustomTrapdoorDestination();
|
|
194
191
|
// Start another pixelation effect. This time, we will keep the screen black with the sprite,
|
|
195
192
|
// and then remove the black sprite once the pixelation effect is halfway complete.
|
|
196
|
-
|
|
193
|
+
teleport(startingRoomIndex, Direction.NO_DIRECTION, RoomTransitionAnim.PIXELATION);
|
|
197
194
|
});
|
|
198
195
|
}
|
|
199
196
|
goToCustomTrapdoorDestination() {
|
|
200
197
|
// This should never be null. Regardless, we provide some sane default values.
|
|
201
198
|
v.run.customTrapdoorActivated ??= {
|
|
202
199
|
destinationName: undefined,
|
|
203
|
-
destinationStage:
|
|
204
|
-
destinationStageType:
|
|
200
|
+
destinationStage: LevelStage.BASEMENT_1,
|
|
201
|
+
destinationStageType: StageType.ORIGINAL,
|
|
205
202
|
open: true,
|
|
206
203
|
firstSpawn: true,
|
|
207
204
|
};
|
|
@@ -220,33 +217,33 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
220
217
|
}
|
|
221
218
|
checkSecondPixelationHalfWay() {
|
|
222
219
|
if (v.run.state
|
|
223
|
-
!==
|
|
220
|
+
!== StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY
|
|
224
221
|
|| v.run.stateRenderFrame === null) {
|
|
225
222
|
return;
|
|
226
223
|
}
|
|
227
224
|
const renderFrameScreenBlack = v.run.stateRenderFrame + PIXELATION_TO_BLACK_FRAMES;
|
|
228
|
-
if (
|
|
225
|
+
if (isBeforeRenderFrame(renderFrameScreenBlack)) {
|
|
229
226
|
return;
|
|
230
227
|
}
|
|
231
|
-
v.run.state =
|
|
228
|
+
v.run.state = StageTravelState.PIXELATION_TO_ROOM;
|
|
232
229
|
this.logStateChanged();
|
|
233
|
-
const hud =
|
|
230
|
+
const hud = game.GetHUD();
|
|
234
231
|
hud.SetVisible(true);
|
|
235
232
|
this.runNextRoom.runNextRoom(() => {
|
|
236
|
-
v.run.state =
|
|
233
|
+
v.run.state = StageTravelState.PLAYERS_LAYING_DOWN;
|
|
237
234
|
this.logStateChanged();
|
|
238
235
|
// After the room transition, the players will be placed next to a door, but they should be in
|
|
239
236
|
// the center of the room to emulate what happens on a vanilla stage.
|
|
240
|
-
|
|
241
|
-
for (const player of
|
|
237
|
+
movePlayersToCenter();
|
|
238
|
+
for (const player of getAllPlayers()) {
|
|
242
239
|
player.AnimateAppear();
|
|
243
240
|
// We need to restore the original collision classes.
|
|
244
|
-
player.EntityCollisionClass =
|
|
245
|
-
player.GridCollisionClass =
|
|
241
|
+
player.EntityCollisionClass = EntityCollisionClass.ALL;
|
|
242
|
+
player.GridCollisionClass = EntityGridCollisionClass.GROUND;
|
|
246
243
|
}
|
|
247
|
-
const level =
|
|
244
|
+
const level = game.GetLevel();
|
|
248
245
|
const stage = level.GetStage();
|
|
249
|
-
if (stage !==
|
|
246
|
+
if (stage !== CUSTOM_FLOOR_STAGE) {
|
|
250
247
|
// The vanilla streak text shows just before the player stands up, which is a few frames
|
|
251
248
|
// from now. We arbitrarily play it now instead of waiting to avoid the extra complexity.
|
|
252
249
|
level.ShowName(false);
|
|
@@ -254,22 +251,22 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
254
251
|
});
|
|
255
252
|
}
|
|
256
253
|
checkAllPlayersLayingDownComplete() {
|
|
257
|
-
if (v.run.state !==
|
|
254
|
+
if (v.run.state !== StageTravelState.PLAYERS_LAYING_DOWN) {
|
|
258
255
|
return;
|
|
259
256
|
}
|
|
260
257
|
if (anyPlayerPlayingExtraAnimation()) {
|
|
261
258
|
return;
|
|
262
259
|
}
|
|
263
|
-
v.run.state =
|
|
260
|
+
v.run.state = StageTravelState.NONE;
|
|
264
261
|
this.logStateChanged();
|
|
265
|
-
const tstlClassName =
|
|
266
|
-
|
|
262
|
+
const tstlClassName = getTSTLClassName(this);
|
|
263
|
+
assertDefined(tstlClassName, "Failed to find get the class name for the custom trapdoor feature.");
|
|
267
264
|
this.disableInputs.enableAllInputs(tstlClassName);
|
|
268
265
|
}
|
|
269
266
|
drawBlackSprite() {
|
|
270
|
-
if (v.run.state !==
|
|
267
|
+
if (v.run.state !== StageTravelState.WAITING_FOR_FIRST_PIXELATION_TO_END
|
|
271
268
|
&& v.run.state
|
|
272
|
-
!==
|
|
269
|
+
!== StageTravelState.WAITING_FOR_SECOND_PIXELATION_TO_GET_HALF_WAY) {
|
|
273
270
|
return;
|
|
274
271
|
}
|
|
275
272
|
if (!this.blackSprite.IsLoaded()) {
|
|
@@ -277,7 +274,7 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
277
274
|
this.blackSprite.SetFrame("Scene", 0);
|
|
278
275
|
this.blackSprite.Scale = Vector(100, 100);
|
|
279
276
|
}
|
|
280
|
-
this.blackSprite.RenderLayer(0,
|
|
277
|
+
this.blackSprite.RenderLayer(0, VectorZero);
|
|
281
278
|
}
|
|
282
279
|
checkCustomTrapdoorOpenClose(gridEntity, trapdoorDescription) {
|
|
283
280
|
/** By default, trapdoors will never close if they are already open. */
|
|
@@ -287,9 +284,9 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
287
284
|
const sprite = gridEntity.GetSprite();
|
|
288
285
|
const animation = sprite.GetAnimation();
|
|
289
286
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-enum-comparison
|
|
290
|
-
if (animation ===
|
|
287
|
+
if (animation === TrapdoorAnimation.CLOSED) {
|
|
291
288
|
// Try it again.
|
|
292
|
-
sprite.Play(
|
|
289
|
+
sprite.Play(TrapdoorAnimation.OPEN_ANIMATION, true);
|
|
293
290
|
}
|
|
294
291
|
return;
|
|
295
292
|
}
|
|
@@ -298,33 +295,33 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
298
295
|
}
|
|
299
296
|
}
|
|
300
297
|
shouldTrapdoorOpen(gridEntity, firstSpawn) {
|
|
301
|
-
const room =
|
|
298
|
+
const room = game.GetRoom();
|
|
302
299
|
const roomClear = room.IsClear();
|
|
303
|
-
return (!
|
|
300
|
+
return (!anyPlayerCloserThan(gridEntity.Position, TRAPDOOR_OPEN_DISTANCE)
|
|
304
301
|
&& !this.isPlayerCloseAfterBoss(gridEntity.Position)
|
|
305
302
|
&& !shouldBeClosedFromStartingInRoomWithEnemies(firstSpawn, roomClear));
|
|
306
303
|
}
|
|
307
304
|
isPlayerCloseAfterBoss(position) {
|
|
308
|
-
const room =
|
|
305
|
+
const room = game.GetRoom();
|
|
309
306
|
const roomType = room.GetType();
|
|
310
307
|
const roomClearGameFrame = this.roomClearFrame.getRoomClearGameFrame();
|
|
311
308
|
// In order to prevent a player from accidentally entering a freshly-spawned trapdoor after
|
|
312
309
|
// killing the boss of the floor, we use a wider open distance for a short amount of frames.
|
|
313
310
|
if (roomClearGameFrame === undefined
|
|
314
|
-
|| roomType !==
|
|
315
|
-
||
|
|
311
|
+
|| roomType !== RoomType.BOSS
|
|
312
|
+
|| onOrAfterRenderFrame(roomClearGameFrame + TRAPDOOR_BOSS_REACTION_FRAMES)) {
|
|
316
313
|
return false;
|
|
317
314
|
}
|
|
318
|
-
return
|
|
315
|
+
return anyPlayerCloserThan(position, TRAPDOOR_OPEN_DISTANCE_AFTER_BOSS);
|
|
319
316
|
}
|
|
320
317
|
checkCustomTrapdoorPlayerTouched(gridEntity, trapdoorDescription) {
|
|
321
|
-
if (v.run.state !==
|
|
318
|
+
if (v.run.state !== StageTravelState.NONE) {
|
|
322
319
|
return;
|
|
323
320
|
}
|
|
324
321
|
if (!trapdoorDescription.open) {
|
|
325
322
|
return;
|
|
326
323
|
}
|
|
327
|
-
const playersTouching = Isaac.FindInRadius(gridEntity.Position, TRAPDOOR_TOUCH_DISTANCE,
|
|
324
|
+
const playersTouching = Isaac.FindInRadius(gridEntity.Position, TRAPDOOR_TOUCH_DISTANCE, EntityPartition.PLAYER);
|
|
328
325
|
for (const playerEntity of playersTouching) {
|
|
329
326
|
const player = playerEntity.ToPlayer();
|
|
330
327
|
if (player === undefined) {
|
|
@@ -333,7 +330,7 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
333
330
|
if (
|
|
334
331
|
// We don't want a Pony dash to transition to a new floor or a crawl space.
|
|
335
332
|
!this.ponyDetection.isPlayerUsingPony(player)
|
|
336
|
-
&& !
|
|
333
|
+
&& !isChildPlayer(player)
|
|
337
334
|
&& canPlayerInteractWithTrapdoor(player)) {
|
|
338
335
|
this.playerTouchedCustomTrapdoor(gridEntity, trapdoorDescription, player);
|
|
339
336
|
return; // Prevent two players from touching the same entity.
|
|
@@ -341,23 +338,23 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
341
338
|
}
|
|
342
339
|
}
|
|
343
340
|
playerTouchedCustomTrapdoor(gridEntity, trapdoorDescription, player) {
|
|
344
|
-
v.run.state =
|
|
341
|
+
v.run.state = StageTravelState.PLAYERS_JUMPING_DOWN;
|
|
345
342
|
v.run.customTrapdoorActivated = trapdoorDescription;
|
|
346
343
|
this.logStateChanged();
|
|
347
|
-
const tstlClassName =
|
|
348
|
-
|
|
344
|
+
const tstlClassName = getTSTLClassName(this);
|
|
345
|
+
assertDefined(tstlClassName, "Failed to find get the class name for the custom trapdoor feature.");
|
|
349
346
|
// We don't want to allow pausing, since that will allow render frames to pass without advancing
|
|
350
347
|
// the stage traveling logic. (We track how many render frames have passed to know when to move
|
|
351
348
|
// to the next step.)
|
|
352
|
-
const buttonActionConsole =
|
|
353
|
-
?
|
|
354
|
-
:
|
|
355
|
-
const whitelist = new
|
|
349
|
+
const buttonActionConsole = isRepentancePlus()
|
|
350
|
+
? ButtonAction.CONSOLE_REPENTANCE_PLUS
|
|
351
|
+
: ButtonAction.CONSOLE_REPENTANCE;
|
|
352
|
+
const whitelist = new ReadonlySet([buttonActionConsole]);
|
|
356
353
|
this.disableInputs.disableAllInputsExceptFor(tstlClassName, whitelist);
|
|
357
354
|
setPlayerAttributes(player, gridEntity.Position);
|
|
358
355
|
dropTaintedForgotten(player);
|
|
359
356
|
player.PlayExtraAnimation("Trapdoor");
|
|
360
|
-
const otherPlayers =
|
|
357
|
+
const otherPlayers = getOtherPlayers(player);
|
|
361
358
|
for (const [i, otherPlayer] of otherPlayers.entries()) {
|
|
362
359
|
const gameFramesToWaitBeforeJumping = OTHER_PLAYER_TRAPDOOR_JUMP_DELAY_GAME_FRAMES * (i + 1);
|
|
363
360
|
const otherPlayerPtr = EntityPtr(otherPlayer);
|
|
@@ -379,7 +376,7 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
379
376
|
this.adjustPlayerPositionToTrapdoor(entityPtr, player.Position, trapdoorPosition);
|
|
380
377
|
}
|
|
381
378
|
adjustPlayerPositionToTrapdoor(entityPtr, startPos, endPos) {
|
|
382
|
-
if (v.run.state !==
|
|
379
|
+
if (v.run.state !== StageTravelState.PLAYERS_JUMPING_DOWN) {
|
|
383
380
|
return;
|
|
384
381
|
}
|
|
385
382
|
const entity = entityPtr.Ref;
|
|
@@ -396,28 +393,28 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
396
393
|
const sprite = player.GetSprite();
|
|
397
394
|
if (sprite.IsFinished("Trapdoor")) {
|
|
398
395
|
player.Position = endPos;
|
|
399
|
-
player.Velocity =
|
|
396
|
+
player.Velocity = VectorZero;
|
|
400
397
|
return;
|
|
401
398
|
}
|
|
402
399
|
const frame = sprite.GetFrame();
|
|
403
400
|
if (frame >= OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES) {
|
|
404
401
|
// We have already arrived at the trapdoor.
|
|
405
402
|
player.Position = endPos;
|
|
406
|
-
player.Velocity =
|
|
403
|
+
player.Velocity = VectorZero;
|
|
407
404
|
return;
|
|
408
405
|
}
|
|
409
406
|
// Make the player jump towards the trapdoor. We use an easing function so that the distance
|
|
410
407
|
// traveled is not linear, emulating what the game does.
|
|
411
408
|
const totalDifference = endPos.sub(startPos);
|
|
412
409
|
const progress = frame / OTHER_PLAYER_TRAPDOOR_JUMP_DURATION_GAME_FRAMES;
|
|
413
|
-
const easeProgress =
|
|
410
|
+
const easeProgress = easeOutSine(progress);
|
|
414
411
|
const differenceForThisFrame = totalDifference.mul(easeProgress);
|
|
415
412
|
const targetPosition = startPos.add(differenceForThisFrame);
|
|
416
413
|
player.Position = targetPosition;
|
|
417
|
-
player.Velocity =
|
|
414
|
+
player.Velocity = VectorZero;
|
|
418
415
|
}
|
|
419
416
|
checkJumpComplete(player) {
|
|
420
|
-
if (v.run.state !==
|
|
417
|
+
if (v.run.state !== StageTravelState.PLAYERS_JUMPING_DOWN) {
|
|
421
418
|
return;
|
|
422
419
|
}
|
|
423
420
|
// In this state, the players are jumping down the hole (i.e. playing the "Trapdoor" animation).
|
|
@@ -435,10 +432,10 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
435
432
|
// into them.
|
|
436
433
|
// - Trapdoors created by We Need to Go Deeper should spawn closed because the player will be
|
|
437
434
|
// standing on top of them.
|
|
438
|
-
if (
|
|
435
|
+
if (isAfterRoomFrame(0)) {
|
|
439
436
|
return false;
|
|
440
437
|
}
|
|
441
|
-
const room =
|
|
438
|
+
const room = game.GetRoom();
|
|
442
439
|
const roomClear = room.IsClear();
|
|
443
440
|
// If we just entered a new room with enemies in it, spawn the trapdoor closed so that the
|
|
444
441
|
// player has to defeat the enemies first before using the trapdoor.
|
|
@@ -451,7 +448,7 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
451
448
|
}
|
|
452
449
|
logStateChanged() {
|
|
453
450
|
if (DEBUG) {
|
|
454
|
-
|
|
451
|
+
log(`Custom trapdoors state changed: ${StageTravelState[v.run.state]} (${v.run.state})`);
|
|
455
452
|
}
|
|
456
453
|
}
|
|
457
454
|
/**
|
|
@@ -524,13 +521,13 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
524
521
|
}
|
|
525
522
|
destinationStage ??= this.stageHistory.getNextStageWithHistory();
|
|
526
523
|
destinationStageType ??= this.stageHistory.getNextStageTypeWithHistory();
|
|
527
|
-
const room =
|
|
528
|
-
const roomListIndex =
|
|
529
|
-
const gridIndex =
|
|
524
|
+
const room = game.GetRoom();
|
|
525
|
+
const roomListIndex = getRoomListIndex();
|
|
526
|
+
const gridIndex = isVector(gridIndexOrPosition)
|
|
530
527
|
? room.GetGridIndex(gridIndexOrPosition)
|
|
531
528
|
: gridIndexOrPosition;
|
|
532
|
-
const gridEntity = this.customGridEntities.spawnCustomGridEntity(
|
|
533
|
-
const firstSpawn =
|
|
529
|
+
const gridEntity = this.customGridEntities.spawnCustomGridEntity(GridEntityTypeCustom.TRAPDOOR_CUSTOM, gridIndexOrPosition, GridCollisionClass.NONE, anm2Path, TrapdoorAnimation.OPENED);
|
|
530
|
+
const firstSpawn = isAfterRoomFrame(0);
|
|
534
531
|
const open = spawnOpen ?? this.shouldTrapdoorSpawnOpen(gridEntity, firstSpawn);
|
|
535
532
|
const roomTrapdoorMap = v.level.trapdoors.getAndSetDefault(roomListIndex);
|
|
536
533
|
const customTrapdoorDescription = {
|
|
@@ -543,21 +540,20 @@ class CustomTrapdoors extends Feature_1.Feature {
|
|
|
543
540
|
roomTrapdoorMap.set(gridIndex, customTrapdoorDescription);
|
|
544
541
|
const sprite = gridEntity.GetSprite();
|
|
545
542
|
const animation = open
|
|
546
|
-
?
|
|
547
|
-
:
|
|
543
|
+
? TrapdoorAnimation.OPENED
|
|
544
|
+
: TrapdoorAnimation.CLOSED;
|
|
548
545
|
sprite.Play(animation, true);
|
|
549
546
|
return gridEntity;
|
|
550
547
|
}
|
|
551
548
|
}
|
|
552
|
-
exports.CustomTrapdoors = CustomTrapdoors;
|
|
553
549
|
__decorate([
|
|
554
|
-
|
|
550
|
+
Exported
|
|
555
551
|
], CustomTrapdoors.prototype, "registerCustomTrapdoorDestination", null);
|
|
556
552
|
__decorate([
|
|
557
|
-
|
|
553
|
+
Exported
|
|
558
554
|
], CustomTrapdoors.prototype, "spawnCustomTrapdoor", null);
|
|
559
555
|
function anyPlayerPlayingExtraAnimation() {
|
|
560
|
-
const players =
|
|
556
|
+
const players = getAllPlayers();
|
|
561
557
|
return players.some((player) => !player.IsExtraAnimationFinished());
|
|
562
558
|
}
|
|
563
559
|
function shouldBeClosedFromStartingInRoomWithEnemies(firstSpawn, roomClear) {
|
|
@@ -566,7 +562,7 @@ function shouldBeClosedFromStartingInRoomWithEnemies(firstSpawn, roomClear) {
|
|
|
566
562
|
function openCustomTrapdoor(gridEntity, trapdoorDescription) {
|
|
567
563
|
trapdoorDescription.open = true;
|
|
568
564
|
const sprite = gridEntity.GetSprite();
|
|
569
|
-
sprite.Play(
|
|
565
|
+
sprite.Play(TrapdoorAnimation.OPEN_ANIMATION, true);
|
|
570
566
|
}
|
|
571
567
|
function canPlayerInteractWithTrapdoor(player) {
|
|
572
568
|
// Players cannot interact with stage travel entities when items are queued or while playing
|
|
@@ -579,28 +575,28 @@ function canPlayerInteractWithTrapdoor(player) {
|
|
|
579
575
|
function setPlayerAttributes(trapdoorPlayer, position) {
|
|
580
576
|
// Snap the player to the exact position of the trapdoor so that they cleanly jump down the hole.
|
|
581
577
|
trapdoorPlayer.Position = position;
|
|
582
|
-
for (const player of
|
|
578
|
+
for (const player of getAllPlayers()) {
|
|
583
579
|
// Disable the controls to prevent the player from moving, shooting, and so on. (We also disable
|
|
584
580
|
// the inputs in the `INPUT_ACTION` callback, but that does not prevent mouse inputs.)
|
|
585
581
|
player.ControlsEnabled = false;
|
|
586
582
|
// Freeze all players.
|
|
587
|
-
player.Velocity =
|
|
583
|
+
player.Velocity = VectorZero;
|
|
588
584
|
// We don't want enemy attacks to move the players.
|
|
589
|
-
player.EntityCollisionClass =
|
|
590
|
-
player.GridCollisionClass =
|
|
585
|
+
player.EntityCollisionClass = EntityCollisionClass.NONE;
|
|
586
|
+
player.GridCollisionClass = EntityGridCollisionClass.NONE;
|
|
591
587
|
player.StopExtraAnimation();
|
|
592
588
|
}
|
|
593
589
|
}
|
|
594
590
|
function dropTaintedForgotten(player) {
|
|
595
|
-
if (!
|
|
591
|
+
if (!isCharacter(player, PlayerType.FORGOTTEN_B)) {
|
|
596
592
|
return;
|
|
597
593
|
}
|
|
598
594
|
const taintedSoul = player.GetOtherTwin();
|
|
599
595
|
if (taintedSoul !== undefined) {
|
|
600
|
-
taintedSoul.ThrowHeldEntity(
|
|
596
|
+
taintedSoul.ThrowHeldEntity(VectorZero);
|
|
601
597
|
}
|
|
602
598
|
}
|
|
603
599
|
/** The default `destinationFunc` for a custom trapdoor. */
|
|
604
600
|
function goToVanillaStage(_destinationName, destinationStage, destinationStageType) {
|
|
605
|
-
|
|
601
|
+
setStage(destinationStage, destinationStageType);
|
|
606
602
|
}
|