isaacscript-common 87.9.7 → 87.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cachedEnumValues.js +29 -32
- package/dist/callbackClasses.js +142 -289
- package/dist/callbacks.js +147 -183
- package/dist/classes/DefaultMap.js +4 -8
- package/dist/classes/ModFeature.js +21 -25
- package/dist/classes/ModUpgraded.js +43 -47
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +6 -10
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +7 -11
- package/dist/classes/callbacks/InputActionFilter.js +4 -8
- package/dist/classes/callbacks/InputActionPlayer.js +4 -8
- package/dist/classes/callbacks/PostAmbushFinished.js +10 -14
- package/dist/classes/callbacks/PostAmbushStarted.js +10 -14
- package/dist/classes/callbacks/PostBombExploded.js +8 -12
- package/dist/classes/callbacks/PostBombInitFilter.js +6 -10
- package/dist/classes/callbacks/PostBombInitLate.js +6 -10
- package/dist/classes/callbacks/PostBombRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostBombUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostBoneSwing.js +7 -11
- package/dist/classes/callbacks/PostCollectibleEmpty.js +6 -10
- package/dist/classes/callbacks/PostCursedTeleport.js +30 -34
- package/dist/classes/callbacks/PostCustomRevive.js +4 -8
- package/dist/classes/callbacks/PostDiceRoomActivated.js +9 -13
- package/dist/classes/callbacks/PostDoorRender.js +8 -12
- package/dist/classes/callbacks/PostDoorUpdate.js +8 -12
- package/dist/classes/callbacks/PostEffectInitFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectInitLate.js +6 -10
- package/dist/classes/callbacks/PostEffectRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectStateChanged.js +8 -12
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityKillFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityRemoveFilter.js +6 -10
- package/dist/classes/callbacks/PostEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarInitLate.js +6 -10
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +8 -12
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostFirstEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFirstFlip.js +4 -8
- package/dist/classes/callbacks/PostFlip.js +4 -8
- package/dist/classes/callbacks/PostGameEndFilter.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReordered.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +6 -10
- package/dist/classes/callbacks/PostGreedModeWave.js +7 -11
- package/dist/classes/callbacks/PostGridEntityBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +6 -10
- package/dist/classes/callbacks/PostGridEntityInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityUpdate.js +6 -10
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +15 -19
- package/dist/classes/callbacks/PostItemDischarge.js +23 -27
- package/dist/classes/callbacks/PostItemPickup.js +6 -10
- package/dist/classes/callbacks/PostKeyboardChanged.js +9 -13
- package/dist/classes/callbacks/PostKnifeInitFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeInitLate.js +6 -10
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitLate.js +6 -10
- package/dist/classes/callbacks/PostLaserRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCDeathFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitLate.js +6 -10
- package/dist/classes/callbacks/PostNPCRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCStateChanged.js +8 -12
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNewLevelReordered.js +6 -10
- package/dist/classes/callbacks/PostNewRoomEarly.js +17 -21
- package/dist/classes/callbacks/PostNewRoomReordered.js +6 -10
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPickupChanged.js +6 -10
- package/dist/classes/callbacks/PostPickupCollect.js +8 -12
- package/dist/classes/callbacks/PostPickupInitFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupInitFirst.js +10 -14
- package/dist/classes/callbacks/PostPickupInitLate.js +6 -10
- package/dist/classes/callbacks/PostPickupRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +4 -8
- package/dist/classes/callbacks/PostPickupStateChanged.js +8 -12
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPitRender.js +8 -12
- package/dist/classes/callbacks/PostPitUpdate.js +8 -12
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +14 -18
- package/dist/classes/callbacks/PostPlayerChangeStat.js +26 -30
- package/dist/classes/callbacks/PostPlayerChangeType.js +11 -15
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +6 -10
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +6 -10
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +24 -28
- package/dist/classes/callbacks/PostPlayerInitFirst.js +12 -16
- package/dist/classes/callbacks/PostPlayerInitLate.js +9 -13
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +6 -10
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPoopRender.js +8 -12
- package/dist/classes/callbacks/PostPoopUpdate.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateRender.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +8 -12
- package/dist/classes/callbacks/PostProjectileInitFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileInitLate.js +6 -10
- package/dist/classes/callbacks/PostProjectileKill.js +8 -12
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPurchase.js +21 -25
- package/dist/classes/callbacks/PostRockRender.js +8 -12
- package/dist/classes/callbacks/PostRockUpdate.js +8 -12
- package/dist/classes/callbacks/PostRoomClearChanged.js +9 -13
- package/dist/classes/callbacks/PostSacrifice.js +12 -16
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +6 -10
- package/dist/classes/callbacks/PostSlotCollision.js +8 -12
- package/dist/classes/callbacks/PostSlotDestroyed.js +6 -10
- package/dist/classes/callbacks/PostSlotInit.js +6 -10
- package/dist/classes/callbacks/PostSlotRender.js +6 -10
- package/dist/classes/callbacks/PostSlotUpdate.js +6 -10
- package/dist/classes/callbacks/PostSpikesRender.js +8 -12
- package/dist/classes/callbacks/PostSpikesUpdate.js +8 -12
- package/dist/classes/callbacks/PostTNTRender.js +8 -12
- package/dist/classes/callbacks/PostTNTUpdate.js +8 -12
- package/dist/classes/callbacks/PostTearInitFilter.js +6 -10
- package/dist/classes/callbacks/PostTearInitLate.js +6 -10
- package/dist/classes/callbacks/PostTearInitVeryLate.js +6 -10
- package/dist/classes/callbacks/PostTearKill.js +8 -12
- package/dist/classes/callbacks/PostTearRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostTearUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostTransformation.js +10 -14
- package/dist/classes/callbacks/PostTrinketBreak.js +16 -20
- package/dist/classes/callbacks/PostUsePillFilter.js +18 -22
- package/dist/classes/callbacks/PreBerserkDeath.js +14 -18
- package/dist/classes/callbacks/PreBombCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreCustomRevive.js +6 -10
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreGetPedestal.js +8 -12
- package/dist/classes/callbacks/PreItemPickup.js +6 -10
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PreNewLevel.js +10 -14
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreTearCollisionFilter.js +6 -10
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +46 -50
- package/dist/classes/features/callbackLogic/CustomRevive.js +28 -32
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +11 -15
- package/dist/classes/features/callbackLogic/FlipDetection.js +11 -15
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +26 -30
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +10 -14
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +6 -10
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +12 -16
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +17 -21
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +6 -10
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +39 -43
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +18 -22
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +17 -21
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +8 -12
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +9 -13
- package/dist/classes/features/other/CharacterHealthConversion.js +13 -17
- package/dist/classes/features/other/CharacterStats.js +9 -13
- package/dist/classes/features/other/CollectibleItemPoolType.js +17 -21
- package/dist/classes/features/other/CustomHotkeys.js +15 -19
- package/dist/classes/features/other/CustomItemPools.js +20 -24
- package/dist/classes/features/other/CustomPickups.js +15 -19
- package/dist/classes/features/other/CustomStages.js +116 -153
- package/dist/classes/features/other/CustomTrapdoors.js +119 -123
- package/dist/classes/features/other/DebugDisplay.js +77 -81
- package/dist/classes/features/other/DeployJSONRoom.js +65 -69
- package/dist/classes/features/other/DisableAllSound.js +14 -18
- package/dist/classes/features/other/DisableInputs.js +24 -28
- package/dist/classes/features/other/EdenStartingStatsHealth.js +36 -40
- package/dist/classes/features/other/ExtraConsoleCommands.js +65 -102
- package/dist/classes/features/other/FadeInRemover.js +9 -13
- package/dist/classes/features/other/FastReset.js +18 -22
- package/dist/classes/features/other/FlyingDetection.js +10 -14
- package/dist/classes/features/other/ForgottenSwitch.js +8 -12
- package/dist/classes/features/other/ItemPoolDetection.js +35 -39
- package/dist/classes/features/other/ModdedElementDetection.js +43 -47
- package/dist/classes/features/other/ModdedElementSets.js +135 -139
- package/dist/classes/features/other/NoSirenSteal.js +7 -11
- package/dist/classes/features/other/Pause.js +48 -52
- package/dist/classes/features/other/PersistentEntities.js +16 -20
- package/dist/classes/features/other/PickupIndexCreation.js +31 -35
- package/dist/classes/features/other/PlayerCollectibleTracking.js +18 -22
- package/dist/classes/features/other/PonyDetection.js +22 -26
- package/dist/classes/features/other/PressInput.js +10 -14
- package/dist/classes/features/other/PreventChildEntities.js +6 -10
- package/dist/classes/features/other/PreventGridEntityRespawn.js +34 -38
- package/dist/classes/features/other/RerunDetection.js +11 -15
- package/dist/classes/features/other/RoomClearFrame.js +11 -15
- package/dist/classes/features/other/RoomHistory.js +30 -34
- package/dist/classes/features/other/RunInNFrames.js +24 -28
- package/dist/classes/features/other/RunNextRoom.js +8 -12
- package/dist/classes/features/other/RunNextRun.js +8 -12
- package/dist/classes/features/other/SaveDataManager.js +61 -65
- package/dist/classes/features/other/SpawnRockAltRewards.js +115 -119
- package/dist/classes/features/other/StageHistory.js +76 -80
- package/dist/classes/features/other/StartAmbush.js +12 -16
- package/dist/classes/features/other/TaintedLazarusPlayers.js +10 -14
- package/dist/classes/features/other/UnlockAchievementsDetection.js +10 -14
- package/dist/classes/features/other/customStages/backdrop.js +68 -71
- package/dist/classes/features/other/customStages/constants.js +7 -10
- package/dist/classes/features/other/customStages/gridEntities.js +23 -30
- package/dist/classes/features/other/customStages/shadows.js +27 -30
- package/dist/classes/features/other/customStages/streakText.js +55 -60
- package/dist/classes/features/other/customStages/utils.js +13 -17
- package/dist/classes/features/other/customStages/v.js +4 -7
- package/dist/classes/features/other/customStages/versusScreen.js +46 -50
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +8 -12
- package/dist/classes/features/other/debugDisplay/utils.js +6 -10
- package/dist/classes/features/other/extraConsoleCommands/commands.js +411 -557
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +47 -57
- package/dist/classes/features/other/extraConsoleCommands/v.js +1 -4
- package/dist/classes/features/other/saveDataManager/constants.js +1 -4
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +17 -21
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +19 -22
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +20 -25
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +13 -16
- package/dist/classes/private/CustomCallback.js +4 -8
- package/dist/classes/private/Feature.js +1 -5
- package/dist/core/cachedClasses.js +12 -15
- package/dist/core/constants.js +126 -130
- package/dist/core/constantsFirstLast.js +22 -25
- package/dist/core/constantsVanilla.js +25 -28
- package/dist/core/upgradeMod.js +7 -10
- package/dist/decorators.js +6 -10
- package/dist/enums/AmbushType.js +2 -5
- package/dist/enums/CornerType.js +2 -5
- package/dist/enums/HealthType.js +2 -5
- package/dist/enums/ISCFeature.js +2 -5
- package/dist/enums/LadderSubTypeCustom.js +2 -5
- package/dist/enums/ModCallbackCustom.js +2 -5
- package/dist/enums/MysteriousPaperEffect.js +2 -5
- package/dist/enums/PlayerStat.js +2 -5
- package/dist/enums/PocketItemType.js +2 -5
- package/dist/enums/RockAltType.js +2 -5
- package/dist/enums/SaveDataKey.js +2 -5
- package/dist/enums/SerializationType.js +2 -5
- package/dist/enums/SlotDestructionType.js +2 -5
- package/dist/enums/private/GridEntityTypeCustom.js +1 -4
- package/dist/enums/private/SerializationBrand.js +2 -5
- package/dist/enums/private/StageTravelState.js +2 -5
- package/dist/enums/private/TrapdoorAnimation.js +2 -5
- package/dist/enums/private/UIStreakAnimation.js +2 -5
- package/dist/features.js +138 -141
- package/dist/functions/ambush.js +9 -12
- package/dist/functions/array.js +45 -76
- package/dist/functions/arrayLua.js +7 -16
- package/dist/functions/benchmark.js +4 -7
- package/dist/functions/bitSet128.js +19 -26
- package/dist/functions/bitwise.js +14 -23
- package/dist/functions/bombs.js +1 -4
- package/dist/functions/bosses.js +68 -85
- package/dist/functions/cards.js +44 -62
- package/dist/functions/challenges.js +28 -39
- package/dist/functions/characters.js +68 -87
- package/dist/functions/charge.js +41 -52
- package/dist/functions/chargeBar.js +2 -6
- package/dist/functions/collectibleTag.js +9 -13
- package/dist/functions/collectibles.js +133 -172
- package/dist/functions/color.js +29 -38
- package/dist/functions/console.js +4 -8
- package/dist/functions/curses.js +6 -10
- package/dist/functions/debugFunctions.js +7 -14
- package/dist/functions/decorators.js +13 -19
- package/dist/functions/deepCopy.js +96 -99
- package/dist/functions/deepCopyTests.js +56 -59
- package/dist/functions/dimensions.js +10 -14
- package/dist/functions/direction.js +22 -30
- package/dist/functions/doors.js +104 -154
- package/dist/functions/easing.js +30 -62
- package/dist/functions/effects.js +6 -10
- package/dist/functions/emptyRoom.js +30 -34
- package/dist/functions/entities.js +88 -115
- package/dist/functions/entitiesSpecific.js +83 -125
- package/dist/functions/entityTypes.js +3 -6
- package/dist/functions/enums.js +27 -41
- package/dist/functions/external.js +4 -8
- package/dist/functions/familiars.js +17 -25
- package/dist/functions/flag.js +10 -19
- package/dist/functions/frames.js +31 -51
- package/dist/functions/globals.js +26 -66
- package/dist/functions/gridEntities.js +231 -269
- package/dist/functions/gridEntitiesSpecific.js +86 -126
- package/dist/functions/gridIndex.js +8 -11
- package/dist/functions/hash.js +1 -4
- package/dist/functions/hex.js +7 -11
- package/dist/functions/input.js +65 -88
- package/dist/functions/isaacAPIClass.js +28 -53
- package/dist/functions/itemPool.js +39 -48
- package/dist/functions/jsonHelpers.js +5 -42
- package/dist/functions/jsonRoom.js +39 -46
- package/dist/functions/kColor.js +30 -39
- package/dist/functions/language.js +3 -6
- package/dist/functions/level.js +20 -26
- package/dist/functions/levelGrid.js +81 -108
- package/dist/functions/log.js +6 -12
- package/dist/functions/logEntities.js +49 -59
- package/dist/functions/logMisc.js +183 -214
- package/dist/functions/map.js +10 -20
- package/dist/functions/math.js +16 -31
- package/dist/functions/merge.js +48 -51
- package/dist/functions/mergeTests.js +34 -37
- package/dist/functions/minimap.js +34 -46
- package/dist/functions/modFeatures.js +1 -4
- package/dist/functions/newArray.js +5 -8
- package/dist/functions/nextStage.js +63 -67
- package/dist/functions/npcDataStructures.js +9 -20
- package/dist/functions/npcs.js +37 -45
- package/dist/functions/pickupVariants.js +26 -39
- package/dist/functions/pickups.js +43 -59
- package/dist/functions/pickupsSpecific.js +76 -118
- package/dist/functions/pills.js +52 -72
- package/dist/functions/playerCenter.js +13 -16
- package/dist/functions/playerCollectibles.js +59 -79
- package/dist/functions/playerDataStructures.js +18 -29
- package/dist/functions/playerEffects.js +12 -19
- package/dist/functions/playerHealth.js +91 -113
- package/dist/functions/playerIndex.js +22 -33
- package/dist/functions/playerTrinkets.js +31 -43
- package/dist/functions/players.js +87 -126
- package/dist/functions/pocketItems.js +33 -43
- package/dist/functions/positionVelocity.js +23 -32
- package/dist/functions/pressurePlate.js +7 -10
- package/dist/functions/projectiles.js +11 -15
- package/dist/functions/random.js +8 -13
- package/dist/functions/readOnly.js +3 -8
- package/dist/functions/render.js +7 -12
- package/dist/functions/revive.js +38 -45
- package/dist/functions/rng.js +31 -44
- package/dist/functions/rockAlt.js +18 -22
- package/dist/functions/roomData.js +24 -40
- package/dist/functions/roomGrid.js +17 -25
- package/dist/functions/roomShape.js +39 -55
- package/dist/functions/roomShapeWalls.js +67 -71
- package/dist/functions/roomTransition.js +13 -17
- package/dist/functions/rooms.js +181 -244
- package/dist/functions/run.js +29 -39
- package/dist/functions/seeds.js +6 -10
- package/dist/functions/serialization.js +27 -34
- package/dist/functions/set.js +24 -40
- package/dist/functions/slots.js +18 -22
- package/dist/functions/sort.js +9 -15
- package/dist/functions/sound.js +12 -16
- package/dist/functions/spawnCollectible.js +21 -26
- package/dist/functions/sprites.js +16 -24
- package/dist/functions/stage.js +122 -164
- package/dist/functions/stats.js +37 -43
- package/dist/functions/storyBosses.js +36 -40
- package/dist/functions/string.js +19 -33
- package/dist/functions/table.js +21 -31
- package/dist/functions/tears.js +6 -14
- package/dist/functions/transformations.js +35 -42
- package/dist/functions/trinketGive.js +29 -36
- package/dist/functions/trinkets.js +45 -60
- package/dist/functions/tstlClass.js +11 -20
- package/dist/functions/types.js +22 -46
- package/dist/functions/ui.js +25 -40
- package/dist/functions/utils.js +22 -36
- package/dist/functions/vector.js +33 -46
- package/dist/functions/versusScreen.js +12 -18
- package/dist/functions/weighted.js +8 -12
- package/dist/index.js +150 -166
- package/dist/indexLua.js +151 -167
- package/dist/interfaces/ChargeBarSprites.js +1 -2
- package/dist/interfaces/Corner.js +1 -2
- package/dist/interfaces/CustomStageTSConfig.js +1 -2
- package/dist/interfaces/GridEntityCustomData.js +1 -2
- package/dist/interfaces/JSONRoomsFile.js +1 -2
- package/dist/interfaces/PlayerHealth.js +1 -2
- package/dist/interfaces/PlayerStats.js +2 -4
- package/dist/interfaces/PocketItemDescription.js +1 -2
- package/dist/interfaces/RoomDescription.js +1 -2
- package/dist/interfaces/SaveData.js +1 -2
- package/dist/interfaces/StageHistoryEntry.js +1 -2
- package/dist/interfaces/TSTLClassMetatable.js +1 -2
- package/dist/interfaces/TrinketSituation.js +1 -2
- package/dist/interfaces/private/AddCallbackParametersCustom.js +2 -4
- package/dist/interfaces/private/CustomStage.js +1 -2
- package/dist/interfaces/private/CustomTrapdoorDescription.js +1 -2
- package/dist/interfaces/private/ModUpgradedInterface.js +1 -2
- package/dist/isaacscript-common.lua +1 -1
- package/dist/maps/PHDPillConversionsMap.js +19 -22
- package/dist/maps/cardNameToTypeMap.js +205 -208
- package/dist/maps/characterNameToTypeMap.js +85 -88
- package/dist/maps/collectibleNameToTypeMap.js +5 -8
- package/dist/maps/defaultPlayerStatMap.js +10 -13
- package/dist/maps/entityTypeVariantToBossIDMap.js +3 -6
- package/dist/maps/falsePHDPillConversionsMap.js +33 -36
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +15 -18
- package/dist/maps/gridEntityXMLMap.js +52 -55
- package/dist/maps/itemPoolTypeToItemPoolName.js +33 -36
- package/dist/maps/keyboardToStringMap.js +66 -69
- package/dist/maps/pillNameToEffectMap.js +83 -86
- package/dist/maps/roomNameToTypeMap.js +38 -41
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +9 -12
- package/dist/maps/transformationNameToPlayerFormMap.js +30 -33
- package/dist/maps/trinketNameToTypeMap.js +5 -8
- package/dist/objects/LRoomShapeToRectangles.js +22 -25
- package/dist/objects/backdropTypeToRockAltType.js +65 -68
- package/dist/objects/batteryNames.js +8 -11
- package/dist/objects/bombNames.js +11 -14
- package/dist/objects/bossIDToEntityTypeVariant.js +116 -119
- package/dist/objects/bossNamePNGFileNames.js +104 -107
- package/dist/objects/bossNames.js +105 -108
- package/dist/objects/bossPortraitPNGFileNames.js +104 -107
- package/dist/objects/cardDescriptions.js +101 -104
- package/dist/objects/cardNames.js +101 -104
- package/dist/objects/challengeBosses.js +49 -52
- package/dist/objects/challengeCharacters.js +49 -52
- package/dist/objects/challengeCollectibleTypes.js +160 -163
- package/dist/objects/challengeNames.js +49 -52
- package/dist/objects/challengeTrinketType.js +48 -51
- package/dist/objects/characterDamageMultipliers.js +44 -47
- package/dist/objects/characterNames.js +44 -47
- package/dist/objects/characterSpritePNGFileNames.js +44 -47
- package/dist/objects/characterStartingCollectibleTypes.js +49 -52
- package/dist/objects/characterStartingTrinketTypes.js +44 -47
- package/dist/objects/chestNames.js +15 -18
- package/dist/objects/coinNames.js +11 -14
- package/dist/objects/coinSubTypeToValue.js +11 -14
- package/dist/objects/collectibleDescriptions.js +725 -728
- package/dist/objects/collectibleNames.js +725 -728
- package/dist/objects/colors.js +1 -4
- package/dist/objects/directionNames.js +7 -10
- package/dist/objects/directionToDegrees.js +7 -10
- package/dist/objects/directionToMoveAction.js +7 -10
- package/dist/objects/directionToShootAction.js +7 -10
- package/dist/objects/directionToVector.js +9 -12
- package/dist/objects/doorSlotFlagToDoorSlot.js +11 -14
- package/dist/objects/doorSlotToDirection.js +11 -14
- package/dist/objects/doorSlotToDoorSlotFlag.js +11 -14
- package/dist/objects/gridEntityTypeToANM2Name.js +30 -33
- package/dist/objects/heartNames.js +16 -19
- package/dist/objects/isaacAPIClassTypeToBrand.js +8 -11
- package/dist/objects/isaacAPIClassTypeToFunctions.js +37 -40
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +9 -45
- package/dist/objects/kColors.js +1 -4
- package/dist/objects/keyNames.js +8 -11
- package/dist/objects/languageNames.js +9 -12
- package/dist/objects/oppositeDoorSlots.js +11 -14
- package/dist/objects/pillEffectClasses.js +53 -56
- package/dist/objects/pillEffectNames.js +53 -56
- package/dist/objects/pillEffectTypeToPillEffects.js +11 -14
- package/dist/objects/pillEffectTypes.js +53 -56
- package/dist/objects/playerNamePNGFileNames.js +44 -47
- package/dist/objects/playerPortraitPNGFileNames.js +44 -47
- package/dist/objects/roomShapeBounds.js +23 -26
- package/dist/objects/roomShapeCorners.js +128 -131
- package/dist/objects/roomShapeLayoutSizes.js +23 -26
- package/dist/objects/roomShapeToBottomRightPosition.js +17 -20
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +78 -81
- package/dist/objects/roomShapeToDoorSlots.js +48 -51
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +82 -85
- package/dist/objects/roomShapeToGridWidth.js +14 -17
- package/dist/objects/roomShapeToTopLeftPosition.js +18 -21
- package/dist/objects/roomShapeVolumes.js +21 -24
- package/dist/objects/roomTypeNames.js +32 -35
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +32 -35
- package/dist/objects/sackNames.js +6 -9
- package/dist/objects/slotNames.js +21 -24
- package/dist/objects/stageIDNames.js +33 -36
- package/dist/objects/stageToMusic.js +69 -72
- package/dist/objects/stageToStageID.js +90 -93
- package/dist/objects/stageTypeSuffixes.js +8 -11
- package/dist/objects/transformationNames.js +16 -19
- package/dist/objects/trinketDescriptions.js +192 -195
- package/dist/objects/trinketNames.js +192 -195
- package/dist/objects/versusScreenBackgroundColors.js +39 -42
- package/dist/objects/versusScreenDirtSpotColors.js +39 -42
- package/dist/patchErrorFunctions.js +4 -7
- package/dist/serialization.js +6 -9
- package/dist/sets/LRoomShapesSet.js +7 -10
- package/dist/sets/bigRoomShapesSet.js +10 -13
- package/dist/sets/bossSets.js +261 -264
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +14 -17
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +5 -8
- package/dist/sets/charactersWithFreeDevilDealsSet.js +3 -6
- package/dist/sets/charactersWithNoRedHeartsSet.js +11 -14
- package/dist/sets/charactersWithNoSoulHeartsSet.js +8 -11
- package/dist/sets/consoleCommandsSet.js +2 -5
- package/dist/sets/entitiesWithArmorSet.js +44 -47
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +11 -14
- package/dist/sets/itemConfigCardTypesForCards.js +7 -10
- package/dist/sets/lostStyleCharactersSet.js +8 -11
- package/dist/sets/mineShaftRoomSubTypesSet.js +8 -11
- package/dist/sets/narrowRoomShapesSet.js +7 -10
- package/dist/sets/poopGridEntityXMLTypesSet.js +12 -15
- package/dist/sets/redHeartSubTypesSet.js +6 -9
- package/dist/sets/repentanceBossIDsSet.js +26 -29
- package/dist/sets/sinEntityTypesSet.js +10 -13
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +11 -14
- package/dist/shaderCrashFix.js +4 -7
- package/dist/shouldFire.js +28 -58
- package/dist/types/AddSubtract.js +1 -2
- package/dist/types/AllButFirst.js +1 -2
- package/dist/types/AllButLast.js +1 -2
- package/dist/types/AnyClass.js +1 -2
- package/dist/types/AnyEntity.js +1 -2
- package/dist/types/AnyFunction.js +1 -2
- package/dist/types/AnyGridEntity.js +1 -2
- package/dist/types/CompositionTypeSatisfiesEnum.js +1 -2
- package/dist/types/ConversionHeartSubType.js +1 -2
- package/dist/types/Decrement.js +1 -2
- package/dist/types/ERange.js +1 -2
- package/dist/types/EntityID.js +1 -2
- package/dist/types/FunctionTuple.js +1 -2
- package/dist/types/GridEntityID.js +1 -2
- package/dist/types/HasFunction.js +1 -2
- package/dist/types/IRange.js +1 -2
- package/dist/types/Immutable.js +1 -2
- package/dist/types/Increment.js +1 -2
- package/dist/types/LowercaseKeys.js +1 -2
- package/dist/types/NaturalNumbersLessThan.js +1 -2
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +1 -2
- package/dist/types/ObjectValues.js +1 -2
- package/dist/types/PickingUpItem.js +15 -22
- package/dist/types/PickupIndex.js +1 -2
- package/dist/types/PlayerIndex.js +1 -2
- package/dist/types/PossibleStatType.js +1 -2
- package/dist/types/PublicInterface.js +1 -2
- package/dist/types/ReadonlyMap.js +1 -4
- package/dist/types/ReadonlyRecord.js +1 -2
- package/dist/types/ReadonlySet.js +1 -4
- package/dist/types/StartsWithLowercase.js +1 -2
- package/dist/types/StartsWithUppercase.js +1 -2
- package/dist/types/TSTLClass.js +1 -2
- package/dist/types/Tuple.js +1 -2
- package/dist/types/TupleKeys.js +1 -2
- package/dist/types/TupleToIntersection.js +1 -2
- package/dist/types/TupleToUnion.js +1 -2
- package/dist/types/TupleWithLengthBetween.js +1 -2
- package/dist/types/TupleWithMaxLength.js +1 -2
- package/dist/types/UnionToIntersection.js +1 -2
- package/dist/types/UppercaseKeys.js +1 -2
- package/dist/types/WeightedArray.js +1 -2
- package/dist/types/WidenLiteral.js +1 -2
- package/dist/types/Writable.js +1 -2
- package/dist/types/private/CallbackTuple.js +1 -2
- package/dist/types/private/ModUpgradedWithFeatures.js +1 -2
- package/package.json +3 -3
|
@@ -1,19 +1,16 @@
|
|
|
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
|
-
const run_1 = require("../../../functions/run");
|
|
16
|
-
const Feature_1 = require("../../private/Feature");
|
|
7
|
+
import { ModCallback } from "isaac-typescript-definitions";
|
|
8
|
+
import { game } from "../../../core/cachedClasses";
|
|
9
|
+
import { Exported } from "../../../decorators";
|
|
10
|
+
import { ISCFeature } from "../../../enums/ISCFeature";
|
|
11
|
+
import { arrayRemoveInPlace } from "../../../functions/array";
|
|
12
|
+
import { restart } from "../../../functions/run";
|
|
13
|
+
import { Feature } from "../../private/Feature";
|
|
17
14
|
const v = {
|
|
18
15
|
run: {
|
|
19
16
|
queuedGameFunctions: [],
|
|
@@ -22,11 +19,11 @@ const v = {
|
|
|
22
19
|
intervalRenderFunctions: [],
|
|
23
20
|
},
|
|
24
21
|
};
|
|
25
|
-
class RunInNFrames extends
|
|
22
|
+
export class RunInNFrames extends Feature {
|
|
26
23
|
roomHistory;
|
|
27
24
|
// ModCallback.POST_UPDATE (1)
|
|
28
25
|
postUpdate = () => {
|
|
29
|
-
const gameFrameCount =
|
|
26
|
+
const gameFrameCount = game.GetFrameCount();
|
|
30
27
|
const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
|
|
31
28
|
checkExecuteQueuedFunctions(v.run.queuedGameFunctions, gameFrameCount, numRoomsEntered);
|
|
32
29
|
checkExecuteIntervalFunctions(v.run.intervalGameFunctions, gameFrameCount, numRoomsEntered);
|
|
@@ -44,12 +41,12 @@ class RunInNFrames extends Feature_1.Feature {
|
|
|
44
41
|
/** @internal */
|
|
45
42
|
constructor(roomHistory) {
|
|
46
43
|
super();
|
|
47
|
-
this.featuresUsed = [
|
|
44
|
+
this.featuresUsed = [ISCFeature.ROOM_HISTORY];
|
|
48
45
|
this.callbacksUsed = [
|
|
49
46
|
// 1
|
|
50
|
-
[
|
|
47
|
+
[ModCallback.POST_UPDATE, this.postUpdate],
|
|
51
48
|
// 2
|
|
52
|
-
[
|
|
49
|
+
[ModCallback.POST_RENDER, this.postRender],
|
|
53
50
|
];
|
|
54
51
|
this.roomHistory = roomHistory;
|
|
55
52
|
}
|
|
@@ -65,7 +62,7 @@ class RunInNFrames extends Feature_1.Feature {
|
|
|
65
62
|
*/
|
|
66
63
|
restartNextRenderFrame(character) {
|
|
67
64
|
this.runNextRenderFrame(() => {
|
|
68
|
-
|
|
65
|
+
restart(character);
|
|
69
66
|
});
|
|
70
67
|
}
|
|
71
68
|
/**
|
|
@@ -87,7 +84,7 @@ class RunInNFrames extends Feature_1.Feature {
|
|
|
87
84
|
* @public
|
|
88
85
|
*/
|
|
89
86
|
runInNGameFrames(func, numGameFrames, cancelIfRoomChanges = false) {
|
|
90
|
-
const gameFrameCount =
|
|
87
|
+
const gameFrameCount = game.GetFrameCount();
|
|
91
88
|
const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
|
|
92
89
|
const frameCountToFire = gameFrameCount + numGameFrames;
|
|
93
90
|
const queuedFunction = {
|
|
@@ -212,7 +209,7 @@ class RunInNFrames extends Feature_1.Feature {
|
|
|
212
209
|
return;
|
|
213
210
|
}
|
|
214
211
|
}
|
|
215
|
-
const gameFrameCount =
|
|
212
|
+
const gameFrameCount = game.GetFrameCount();
|
|
216
213
|
const numRoomsEntered = this.roomHistory.getNumRoomsEntered();
|
|
217
214
|
const intervalFunction = {
|
|
218
215
|
func,
|
|
@@ -263,27 +260,26 @@ class RunInNFrames extends Feature_1.Feature {
|
|
|
263
260
|
v.run.intervalRenderFunctions.push(intervalFunction);
|
|
264
261
|
}
|
|
265
262
|
}
|
|
266
|
-
exports.RunInNFrames = RunInNFrames;
|
|
267
263
|
__decorate([
|
|
268
|
-
|
|
264
|
+
Exported
|
|
269
265
|
], RunInNFrames.prototype, "restartNextRenderFrame", null);
|
|
270
266
|
__decorate([
|
|
271
|
-
|
|
267
|
+
Exported
|
|
272
268
|
], RunInNFrames.prototype, "runInNGameFrames", null);
|
|
273
269
|
__decorate([
|
|
274
|
-
|
|
270
|
+
Exported
|
|
275
271
|
], RunInNFrames.prototype, "runInNRenderFrames", null);
|
|
276
272
|
__decorate([
|
|
277
|
-
|
|
273
|
+
Exported
|
|
278
274
|
], RunInNFrames.prototype, "runNextGameFrame", null);
|
|
279
275
|
__decorate([
|
|
280
|
-
|
|
276
|
+
Exported
|
|
281
277
|
], RunInNFrames.prototype, "runNextRenderFrame", null);
|
|
282
278
|
__decorate([
|
|
283
|
-
|
|
279
|
+
Exported
|
|
284
280
|
], RunInNFrames.prototype, "setIntervalGameFrames", null);
|
|
285
281
|
__decorate([
|
|
286
|
-
|
|
282
|
+
Exported
|
|
287
283
|
], RunInNFrames.prototype, "setIntervalRenderFrames", null);
|
|
288
284
|
function checkExecuteQueuedFunctions(
|
|
289
285
|
// eslint-disable-next-line complete/prefer-readonly-parameter-types
|
|
@@ -294,7 +290,7 @@ queuedFunctions, frameCount, newNumRoomsEntered) {
|
|
|
294
290
|
if (!cancelIfRoomChanges || numRoomsEntered === newNumRoomsEntered) {
|
|
295
291
|
func();
|
|
296
292
|
}
|
|
297
|
-
|
|
293
|
+
arrayRemoveInPlace(queuedFunctions, firingFunction);
|
|
298
294
|
}
|
|
299
295
|
}
|
|
300
296
|
function checkExecuteIntervalFunctions(
|
|
@@ -306,7 +302,7 @@ intervalFunctions, frameCount, newNumRoomsEntered) {
|
|
|
306
302
|
const returnValue = !cancelIfRoomChanges || numRoomsEntered === newNumRoomsEntered
|
|
307
303
|
? func()
|
|
308
304
|
: false;
|
|
309
|
-
|
|
305
|
+
arrayRemoveInPlace(intervalFunctions, firingFunction);
|
|
310
306
|
// Queue the next interval (as long as the function did not return false).
|
|
311
307
|
if (returnValue) {
|
|
312
308
|
const newIntervalFunction = {
|
|
@@ -1,28 +1,25 @@
|
|
|
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
|
-
const array_1 = require("../../../functions/array");
|
|
13
|
-
const Feature_1 = require("../../private/Feature");
|
|
7
|
+
import { Exported } from "../../../decorators";
|
|
8
|
+
import { ModCallbackCustom } from "../../../enums/ModCallbackCustom";
|
|
9
|
+
import { emptyArray } from "../../../functions/array";
|
|
10
|
+
import { Feature } from "../../private/Feature";
|
|
14
11
|
const v = {
|
|
15
12
|
run: {
|
|
16
13
|
queuedFunctions: [],
|
|
17
14
|
},
|
|
18
15
|
};
|
|
19
|
-
class RunNextRoom extends
|
|
16
|
+
export class RunNextRoom extends Feature {
|
|
20
17
|
// ModCallbackCustom.POST_NEW_ROOM_REORDERED
|
|
21
18
|
postNewRoomReordered = () => {
|
|
22
19
|
for (const func of v.run.queuedFunctions) {
|
|
23
20
|
func();
|
|
24
21
|
}
|
|
25
|
-
|
|
22
|
+
emptyArray(v.run.queuedFunctions);
|
|
26
23
|
};
|
|
27
24
|
/** @internal */
|
|
28
25
|
v = v;
|
|
@@ -31,7 +28,7 @@ class RunNextRoom extends Feature_1.Feature {
|
|
|
31
28
|
constructor() {
|
|
32
29
|
super();
|
|
33
30
|
this.customCallbacksUsed = [
|
|
34
|
-
[
|
|
31
|
+
[ModCallbackCustom.POST_NEW_ROOM_REORDERED, this.postNewRoomReordered],
|
|
35
32
|
];
|
|
36
33
|
}
|
|
37
34
|
/**
|
|
@@ -47,7 +44,6 @@ class RunNextRoom extends Feature_1.Feature {
|
|
|
47
44
|
v.run.queuedFunctions.push(func);
|
|
48
45
|
}
|
|
49
46
|
}
|
|
50
|
-
exports.RunNextRoom = RunNextRoom;
|
|
51
47
|
__decorate([
|
|
52
|
-
|
|
48
|
+
Exported
|
|
53
49
|
], RunNextRoom.prototype, "runNextRoom", null);
|
|
@@ -1,29 +1,26 @@
|
|
|
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
|
-
const array_1 = require("../../../functions/array");
|
|
13
|
-
const Feature_1 = require("../../private/Feature");
|
|
7
|
+
import { Exported } from "../../../decorators";
|
|
8
|
+
import { ModCallbackCustom } from "../../../enums/ModCallbackCustom";
|
|
9
|
+
import { emptyArray } from "../../../functions/array";
|
|
10
|
+
import { Feature } from "../../private/Feature";
|
|
14
11
|
const v = {
|
|
15
12
|
persistent: {
|
|
16
13
|
queuedFunctions: [],
|
|
17
14
|
},
|
|
18
15
|
};
|
|
19
|
-
class RunNextRun extends
|
|
16
|
+
export class RunNextRun extends Feature {
|
|
20
17
|
// ModCallbackCustom.POST_GAME_STARTED_REORDERED
|
|
21
18
|
// false
|
|
22
19
|
postGameStartedReorderedFalse = () => {
|
|
23
20
|
for (const func of v.persistent.queuedFunctions) {
|
|
24
21
|
func();
|
|
25
22
|
}
|
|
26
|
-
|
|
23
|
+
emptyArray(v.persistent.queuedFunctions);
|
|
27
24
|
};
|
|
28
25
|
/** @internal */
|
|
29
26
|
v = v;
|
|
@@ -33,7 +30,7 @@ class RunNextRun extends Feature_1.Feature {
|
|
|
33
30
|
super();
|
|
34
31
|
this.customCallbacksUsed = [
|
|
35
32
|
[
|
|
36
|
-
|
|
33
|
+
ModCallbackCustom.POST_GAME_STARTED_REORDERED,
|
|
37
34
|
this.postGameStartedReorderedFalse,
|
|
38
35
|
[false],
|
|
39
36
|
],
|
|
@@ -54,7 +51,6 @@ class RunNextRun extends Feature_1.Feature {
|
|
|
54
51
|
v.persistent.queuedFunctions.push(func);
|
|
55
52
|
}
|
|
56
53
|
}
|
|
57
|
-
exports.RunNextRun = RunNextRun;
|
|
58
54
|
__decorate([
|
|
59
|
-
|
|
55
|
+
Exported
|
|
60
56
|
], RunNextRun.prototype, "runNextRun", null);
|
|
@@ -1,36 +1,33 @@
|
|
|
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
|
-
const
|
|
27
|
-
const saveToDisk_1 = require("./saveDataManager/saveToDisk");
|
|
28
|
-
const NON_USER_DEFINED_CLASS_NAMES = new ReadonlySet_1.ReadonlySet([
|
|
7
|
+
import { CollectibleType, ModCallback } from "isaac-typescript-definitions";
|
|
8
|
+
import { Exported } from "../../../decorators";
|
|
9
|
+
import { ModCallbackCustom } from "../../../enums/ModCallbackCustom";
|
|
10
|
+
import { SaveDataKey } from "../../../enums/SaveDataKey";
|
|
11
|
+
import { SerializationType } from "../../../enums/SerializationType";
|
|
12
|
+
import { deepCopy } from "../../../functions/deepCopy";
|
|
13
|
+
import { isAfterGameFrame } from "../../../functions/frames";
|
|
14
|
+
import { log } from "../../../functions/log";
|
|
15
|
+
import { onFirstFloor } from "../../../functions/stage";
|
|
16
|
+
import { getTSTLClassName, isTSTLClass } from "../../../functions/tstlClass";
|
|
17
|
+
import { isString, isTable } from "../../../functions/types";
|
|
18
|
+
import { assertDefined } from "../../../functions/utils";
|
|
19
|
+
import { ReadonlySet } from "../../../types/ReadonlySet";
|
|
20
|
+
import { Feature } from "../../private/Feature";
|
|
21
|
+
import { makeGlowingHourGlassBackup, restoreGlowingHourGlassBackup, } from "./saveDataManager/glowingHourGlass";
|
|
22
|
+
import { loadFromDisk } from "./saveDataManager/loadFromDisk";
|
|
23
|
+
import { restoreDefaultForFeatureKey, restoreDefaultsForAllFeaturesAndKeys, restoreDefaultsForAllFeaturesKey, } from "./saveDataManager/restoreDefaults";
|
|
24
|
+
import { saveToDisk } from "./saveDataManager/saveToDisk";
|
|
25
|
+
const NON_USER_DEFINED_CLASS_NAMES = new ReadonlySet([
|
|
29
26
|
"Map",
|
|
30
27
|
"Set",
|
|
31
28
|
"DefaultMap",
|
|
32
29
|
]);
|
|
33
|
-
class SaveDataManager extends
|
|
30
|
+
export class SaveDataManager extends Feature {
|
|
34
31
|
/**
|
|
35
32
|
* We store a local reference to the mod object so that we can access the corresponding methods
|
|
36
33
|
* that read and write to the "save#.dat" file.
|
|
@@ -86,10 +83,10 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
86
83
|
this.restoreGlowingHourGlassDataOnNextRoom = false;
|
|
87
84
|
// We want to unconditionally load save data on every new run since there might be persistent
|
|
88
85
|
// data that is not tied to an individual run.
|
|
89
|
-
|
|
90
|
-
const isContinued =
|
|
86
|
+
loadFromDisk(this.mod, this.saveDataMap, this.classConstructors);
|
|
87
|
+
const isContinued = isAfterGameFrame(0);
|
|
91
88
|
if (!isContinued) {
|
|
92
|
-
|
|
89
|
+
restoreDefaultsForAllFeaturesAndKeys(this.saveDataMap, this.saveDataDefaultsMap);
|
|
93
90
|
}
|
|
94
91
|
// On continued runs, the `POST_NEW_LEVEL` callback will not fire, so we do not have to worry
|
|
95
92
|
// about saved data based on level getting overwritten.
|
|
@@ -98,7 +95,7 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
98
95
|
preGameExit = () => {
|
|
99
96
|
// We unconditionally save variables to disk (because regardless of a save & quit or a death,
|
|
100
97
|
// persistent variables should be recorded).
|
|
101
|
-
|
|
98
|
+
saveToDisk(this.mod, this.saveDataMap, this.saveDataConditionalFuncMap);
|
|
102
99
|
// Mark that we are going to the menu. (Technically, the `POST_ENTITY_REMOVE` callback may fire
|
|
103
100
|
// before actually going to the menu, but that must be explicitly handled.)
|
|
104
101
|
this.inARun = false;
|
|
@@ -109,23 +106,23 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
109
106
|
};
|
|
110
107
|
// ModCallback.POST_NEW_LEVEL (18)
|
|
111
108
|
postNewLevel = () => {
|
|
112
|
-
|
|
109
|
+
restoreDefaultsForAllFeaturesKey(this.saveDataMap, this.saveDataDefaultsMap, SaveDataKey.LEVEL);
|
|
113
110
|
// We save data to disk at the beginning of every floor (for the 2nd floor and beyond) to
|
|
114
111
|
// emulate what the game does internally. (This mitigates data loss in the event of a crash).
|
|
115
|
-
if (!
|
|
116
|
-
|
|
112
|
+
if (!onFirstFloor()) {
|
|
113
|
+
saveToDisk(this.mod, this.saveDataMap, this.saveDataConditionalFuncMap);
|
|
117
114
|
}
|
|
118
115
|
};
|
|
119
116
|
// ModCallbackCustom.POST_NEW_ROOM_EARLY
|
|
120
117
|
postNewRoomEarly = () => {
|
|
121
|
-
|
|
118
|
+
restoreDefaultsForAllFeaturesKey(this.saveDataMap, this.saveDataDefaultsMap, SaveDataKey.ROOM);
|
|
122
119
|
// Handle the Glowing Hourglass.
|
|
123
120
|
if (this.restoreGlowingHourGlassDataOnNextRoom) {
|
|
124
121
|
this.restoreGlowingHourGlassDataOnNextRoom = false;
|
|
125
|
-
|
|
122
|
+
restoreGlowingHourGlassBackup(this.saveDataMap, this.saveDataConditionalFuncMap, this.saveDataGlowingHourGlassMap, this.classConstructors);
|
|
126
123
|
}
|
|
127
124
|
else {
|
|
128
|
-
|
|
125
|
+
makeGlowingHourGlassBackup(this.saveDataMap, this.saveDataConditionalFuncMap, this.saveDataGlowingHourGlassMap);
|
|
129
126
|
}
|
|
130
127
|
};
|
|
131
128
|
/** @internal */
|
|
@@ -134,21 +131,21 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
134
131
|
this.callbacksUsed = [
|
|
135
132
|
// 3
|
|
136
133
|
[
|
|
137
|
-
|
|
134
|
+
ModCallback.POST_USE_ITEM,
|
|
138
135
|
this.postUseItemGlowingHourGlass,
|
|
139
|
-
[
|
|
136
|
+
[CollectibleType.GLOWING_HOUR_GLASS],
|
|
140
137
|
],
|
|
141
138
|
// 9
|
|
142
|
-
[
|
|
139
|
+
[ModCallback.POST_PLAYER_INIT, this.postPlayerInit],
|
|
143
140
|
// 17
|
|
144
|
-
[
|
|
141
|
+
[ModCallback.PRE_GAME_EXIT, this.preGameExit],
|
|
145
142
|
// 18
|
|
146
143
|
// We want to avoid a needless dependency on the `GameReorderedCallbacks` feature.
|
|
147
144
|
// eslint-disable-next-line @typescript-eslint/no-deprecated
|
|
148
|
-
[
|
|
145
|
+
[ModCallback.POST_NEW_LEVEL, this.postNewLevel],
|
|
149
146
|
];
|
|
150
147
|
this.customCallbacksUsed = [
|
|
151
|
-
[
|
|
148
|
+
[ModCallbackCustom.POST_NEW_ROOM_EARLY, this.postNewRoomEarly],
|
|
152
149
|
];
|
|
153
150
|
this.mod = mod;
|
|
154
151
|
}
|
|
@@ -156,24 +153,24 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
156
153
|
* Recursively traverses an object, collecting all of the class constructors that it encounters.
|
|
157
154
|
*/
|
|
158
155
|
storeClassConstructorsFromObject(luaMap) {
|
|
159
|
-
const tstlClassName =
|
|
156
|
+
const tstlClassName = getTSTLClassName(luaMap);
|
|
160
157
|
if (tstlClassName !== undefined
|
|
161
158
|
&& !NON_USER_DEFINED_CLASS_NAMES.has(tstlClassName)) {
|
|
162
159
|
this.classConstructors.set(tstlClassName, luaMap);
|
|
163
160
|
}
|
|
164
161
|
for (const [_key, value] of luaMap) {
|
|
165
|
-
if (
|
|
162
|
+
if (isTable(value)) {
|
|
166
163
|
this.storeClassConstructorsFromObject(value);
|
|
167
164
|
}
|
|
168
165
|
}
|
|
169
166
|
}
|
|
170
167
|
saveDataManager(key, v, conditionalFunc) {
|
|
171
|
-
if (
|
|
172
|
-
const className =
|
|
173
|
-
|
|
168
|
+
if (isTSTLClass(key)) {
|
|
169
|
+
const className = getTSTLClassName(key);
|
|
170
|
+
assertDefined(className, 'Failed to get the class name for the submitted class (as part of the "key" parameter) when registering new data with the save data manager.');
|
|
174
171
|
key = className;
|
|
175
172
|
}
|
|
176
|
-
if (!
|
|
173
|
+
if (!isString(key)) {
|
|
177
174
|
error(`The save data manager requires that keys are strings or TSTL classes. You tried to use a key of type: ${typeof key}`);
|
|
178
175
|
}
|
|
179
176
|
if (this.saveDataMap.has(key)) {
|
|
@@ -197,7 +194,7 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
197
194
|
}
|
|
198
195
|
// Make a copy of the initial save data so that we can use it to restore the default values
|
|
199
196
|
// later on.
|
|
200
|
-
const saveDataCopy =
|
|
197
|
+
const saveDataCopy = deepCopy(v, SerializationType.NONE, key);
|
|
201
198
|
this.saveDataDefaultsMap.set(key, saveDataCopy);
|
|
202
199
|
// Store the conditional function for later, if present.
|
|
203
200
|
if (conditionalFunc !== undefined) {
|
|
@@ -217,7 +214,7 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
217
214
|
* @public
|
|
218
215
|
*/
|
|
219
216
|
saveDataManagerLoad() {
|
|
220
|
-
|
|
217
|
+
loadFromDisk(this.mod, this.saveDataMap, this.classConstructors);
|
|
221
218
|
}
|
|
222
219
|
/**
|
|
223
220
|
* The save data manager will automatically save variables to disk at the appropriate times (i.e.
|
|
@@ -229,7 +226,7 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
229
226
|
* @public
|
|
230
227
|
*/
|
|
231
228
|
saveDataManagerSave() {
|
|
232
|
-
|
|
229
|
+
saveToDisk(this.mod, this.saveDataMap, this.saveDataConditionalFuncMap);
|
|
233
230
|
}
|
|
234
231
|
/**
|
|
235
232
|
* Sets the global variable of "g" equal to all of the save data variables for this mod.
|
|
@@ -262,7 +259,7 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
262
259
|
saveDataManagerRegisterClass(...tstlClasses) {
|
|
263
260
|
for (const tstlClass of tstlClasses) {
|
|
264
261
|
const { name } = tstlClass;
|
|
265
|
-
|
|
262
|
+
assertDefined(
|
|
266
263
|
// Since we are accepting untrusted user input, this might not be a real TSTL class.
|
|
267
264
|
name, "Failed to register a class with the save data manager due to not being able to derive the name of the class.");
|
|
268
265
|
this.classConstructors.set(name, tstlClass);
|
|
@@ -277,7 +274,7 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
277
274
|
* @public
|
|
278
275
|
*/
|
|
279
276
|
saveDataManagerRemove(key) {
|
|
280
|
-
if (!
|
|
277
|
+
if (!isString(key)) {
|
|
281
278
|
error(`The save data manager requires that keys are strings. You tried to use a key of type: ${typeof key}`);
|
|
282
279
|
}
|
|
283
280
|
if (!this.saveDataMap.has(key)) {
|
|
@@ -314,12 +311,12 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
314
311
|
* @public
|
|
315
312
|
*/
|
|
316
313
|
saveDataManagerReset(key, childObjectKey) {
|
|
317
|
-
if (!
|
|
314
|
+
if (!isString(key)) {
|
|
318
315
|
error(`The save data manager requires that keys are strings. You tried to use a key of type: ${typeof key}`);
|
|
319
316
|
}
|
|
320
317
|
const saveData = this.saveDataMap.get(key);
|
|
321
|
-
|
|
322
|
-
|
|
318
|
+
assertDefined(saveData, `The save data manager is not managing save data for a key of: ${key}`);
|
|
319
|
+
restoreDefaultForFeatureKey(this.saveDataDefaultsMap, key, saveData, childObjectKey);
|
|
323
320
|
}
|
|
324
321
|
/**
|
|
325
322
|
* Helper function to check to see if the game is in the menu, as far as the save data manager is
|
|
@@ -346,39 +343,38 @@ class SaveDataManager extends Feature_1.Feature {
|
|
|
346
343
|
* @public
|
|
347
344
|
*/
|
|
348
345
|
saveDataManagerLogSubscribers() {
|
|
349
|
-
|
|
346
|
+
log("List of save data manager subscribers:");
|
|
350
347
|
const keys = Object.keys(this.saveDataMap);
|
|
351
348
|
keys.sort();
|
|
352
349
|
for (const key of keys) {
|
|
353
|
-
|
|
350
|
+
log(`- ${key}`);
|
|
354
351
|
}
|
|
355
352
|
}
|
|
356
353
|
}
|
|
357
|
-
exports.SaveDataManager = SaveDataManager;
|
|
358
354
|
__decorate([
|
|
359
|
-
|
|
355
|
+
Exported
|
|
360
356
|
], SaveDataManager.prototype, "saveDataManager", null);
|
|
361
357
|
__decorate([
|
|
362
|
-
|
|
358
|
+
Exported
|
|
363
359
|
], SaveDataManager.prototype, "saveDataManagerLoad", null);
|
|
364
360
|
__decorate([
|
|
365
|
-
|
|
361
|
+
Exported
|
|
366
362
|
], SaveDataManager.prototype, "saveDataManagerSave", null);
|
|
367
363
|
__decorate([
|
|
368
|
-
|
|
364
|
+
Exported
|
|
369
365
|
], SaveDataManager.prototype, "saveDataManagerSetGlobal", null);
|
|
370
366
|
__decorate([
|
|
371
|
-
|
|
367
|
+
Exported
|
|
372
368
|
], SaveDataManager.prototype, "saveDataManagerRegisterClass", null);
|
|
373
369
|
__decorate([
|
|
374
|
-
|
|
370
|
+
Exported
|
|
375
371
|
], SaveDataManager.prototype, "saveDataManagerRemove", null);
|
|
376
372
|
__decorate([
|
|
377
|
-
|
|
373
|
+
Exported
|
|
378
374
|
], SaveDataManager.prototype, "saveDataManagerReset", null);
|
|
379
375
|
__decorate([
|
|
380
|
-
|
|
376
|
+
Exported
|
|
381
377
|
], SaveDataManager.prototype, "saveDataManagerInMenu", null);
|
|
382
378
|
__decorate([
|
|
383
|
-
|
|
379
|
+
Exported
|
|
384
380
|
], SaveDataManager.prototype, "saveDataManagerLogSubscribers", null);
|