isaacscript-common 87.9.7 → 87.9.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cachedEnumValues.js +29 -32
- package/dist/callbackClasses.js +142 -289
- package/dist/callbacks.js +147 -183
- package/dist/classes/DefaultMap.js +4 -8
- package/dist/classes/ModFeature.js +21 -25
- package/dist/classes/ModUpgraded.js +43 -47
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +6 -10
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +7 -11
- package/dist/classes/callbacks/InputActionFilter.js +4 -8
- package/dist/classes/callbacks/InputActionPlayer.js +4 -8
- package/dist/classes/callbacks/PostAmbushFinished.js +10 -14
- package/dist/classes/callbacks/PostAmbushStarted.js +10 -14
- package/dist/classes/callbacks/PostBombExploded.js +8 -12
- package/dist/classes/callbacks/PostBombInitFilter.js +6 -10
- package/dist/classes/callbacks/PostBombInitLate.js +6 -10
- package/dist/classes/callbacks/PostBombRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostBombUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostBoneSwing.js +7 -11
- package/dist/classes/callbacks/PostCollectibleEmpty.js +6 -10
- package/dist/classes/callbacks/PostCursedTeleport.js +30 -34
- package/dist/classes/callbacks/PostCustomRevive.js +4 -8
- package/dist/classes/callbacks/PostDiceRoomActivated.js +9 -13
- package/dist/classes/callbacks/PostDoorRender.js +8 -12
- package/dist/classes/callbacks/PostDoorUpdate.js +8 -12
- package/dist/classes/callbacks/PostEffectInitFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectInitLate.js +6 -10
- package/dist/classes/callbacks/PostEffectRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectStateChanged.js +8 -12
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityKillFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityRemoveFilter.js +6 -10
- package/dist/classes/callbacks/PostEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarInitLate.js +6 -10
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +8 -12
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostFirstEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFirstFlip.js +4 -8
- package/dist/classes/callbacks/PostFlip.js +4 -8
- package/dist/classes/callbacks/PostGameEndFilter.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReordered.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +6 -10
- package/dist/classes/callbacks/PostGreedModeWave.js +7 -11
- package/dist/classes/callbacks/PostGridEntityBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +6 -10
- package/dist/classes/callbacks/PostGridEntityInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityUpdate.js +6 -10
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +15 -19
- package/dist/classes/callbacks/PostItemDischarge.js +23 -27
- package/dist/classes/callbacks/PostItemPickup.js +6 -10
- package/dist/classes/callbacks/PostKeyboardChanged.js +9 -13
- package/dist/classes/callbacks/PostKnifeInitFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeInitLate.js +6 -10
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitLate.js +6 -10
- package/dist/classes/callbacks/PostLaserRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCDeathFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitLate.js +6 -10
- package/dist/classes/callbacks/PostNPCRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCStateChanged.js +8 -12
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNewLevelReordered.js +6 -10
- package/dist/classes/callbacks/PostNewRoomEarly.js +17 -21
- package/dist/classes/callbacks/PostNewRoomReordered.js +6 -10
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPickupChanged.js +6 -10
- package/dist/classes/callbacks/PostPickupCollect.js +8 -12
- package/dist/classes/callbacks/PostPickupInitFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupInitFirst.js +10 -14
- package/dist/classes/callbacks/PostPickupInitLate.js +6 -10
- package/dist/classes/callbacks/PostPickupRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +4 -8
- package/dist/classes/callbacks/PostPickupStateChanged.js +8 -12
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPitRender.js +8 -12
- package/dist/classes/callbacks/PostPitUpdate.js +8 -12
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +14 -18
- package/dist/classes/callbacks/PostPlayerChangeStat.js +26 -30
- package/dist/classes/callbacks/PostPlayerChangeType.js +11 -15
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +6 -10
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +6 -10
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +24 -28
- package/dist/classes/callbacks/PostPlayerInitFirst.js +12 -16
- package/dist/classes/callbacks/PostPlayerInitLate.js +9 -13
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +6 -10
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPoopRender.js +8 -12
- package/dist/classes/callbacks/PostPoopUpdate.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateRender.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +8 -12
- package/dist/classes/callbacks/PostProjectileInitFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileInitLate.js +6 -10
- package/dist/classes/callbacks/PostProjectileKill.js +8 -12
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPurchase.js +21 -25
- package/dist/classes/callbacks/PostRockRender.js +8 -12
- package/dist/classes/callbacks/PostRockUpdate.js +8 -12
- package/dist/classes/callbacks/PostRoomClearChanged.js +9 -13
- package/dist/classes/callbacks/PostSacrifice.js +12 -16
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +6 -10
- package/dist/classes/callbacks/PostSlotCollision.js +8 -12
- package/dist/classes/callbacks/PostSlotDestroyed.js +6 -10
- package/dist/classes/callbacks/PostSlotInit.js +6 -10
- package/dist/classes/callbacks/PostSlotRender.js +6 -10
- package/dist/classes/callbacks/PostSlotUpdate.js +6 -10
- package/dist/classes/callbacks/PostSpikesRender.js +8 -12
- package/dist/classes/callbacks/PostSpikesUpdate.js +8 -12
- package/dist/classes/callbacks/PostTNTRender.js +8 -12
- package/dist/classes/callbacks/PostTNTUpdate.js +8 -12
- package/dist/classes/callbacks/PostTearInitFilter.js +6 -10
- package/dist/classes/callbacks/PostTearInitLate.js +6 -10
- package/dist/classes/callbacks/PostTearInitVeryLate.js +6 -10
- package/dist/classes/callbacks/PostTearKill.js +8 -12
- package/dist/classes/callbacks/PostTearRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostTearUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostTransformation.js +10 -14
- package/dist/classes/callbacks/PostTrinketBreak.js +16 -20
- package/dist/classes/callbacks/PostUsePillFilter.js +18 -22
- package/dist/classes/callbacks/PreBerserkDeath.js +14 -18
- package/dist/classes/callbacks/PreBombCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreCustomRevive.js +6 -10
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreGetPedestal.js +8 -12
- package/dist/classes/callbacks/PreItemPickup.js +6 -10
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PreNewLevel.js +10 -14
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreTearCollisionFilter.js +6 -10
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +46 -50
- package/dist/classes/features/callbackLogic/CustomRevive.js +28 -32
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +11 -15
- package/dist/classes/features/callbackLogic/FlipDetection.js +11 -15
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +26 -30
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +10 -14
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +6 -10
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +12 -16
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +17 -21
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +6 -10
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +39 -43
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +18 -22
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +17 -21
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +8 -12
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +9 -13
- package/dist/classes/features/other/CharacterHealthConversion.js +13 -17
- package/dist/classes/features/other/CharacterStats.js +9 -13
- package/dist/classes/features/other/CollectibleItemPoolType.js +17 -21
- package/dist/classes/features/other/CustomHotkeys.js +15 -19
- package/dist/classes/features/other/CustomItemPools.js +20 -24
- package/dist/classes/features/other/CustomPickups.js +15 -19
- package/dist/classes/features/other/CustomStages.js +116 -153
- package/dist/classes/features/other/CustomTrapdoors.js +119 -123
- package/dist/classes/features/other/DebugDisplay.js +77 -81
- package/dist/classes/features/other/DeployJSONRoom.js +65 -69
- package/dist/classes/features/other/DisableAllSound.js +14 -18
- package/dist/classes/features/other/DisableInputs.js +24 -28
- package/dist/classes/features/other/EdenStartingStatsHealth.js +36 -40
- package/dist/classes/features/other/ExtraConsoleCommands.js +65 -102
- package/dist/classes/features/other/FadeInRemover.js +9 -13
- package/dist/classes/features/other/FastReset.js +18 -22
- package/dist/classes/features/other/FlyingDetection.js +10 -14
- package/dist/classes/features/other/ForgottenSwitch.js +8 -12
- package/dist/classes/features/other/ItemPoolDetection.js +35 -39
- package/dist/classes/features/other/ModdedElementDetection.js +43 -47
- package/dist/classes/features/other/ModdedElementSets.js +135 -139
- package/dist/classes/features/other/NoSirenSteal.js +7 -11
- package/dist/classes/features/other/Pause.js +48 -52
- package/dist/classes/features/other/PersistentEntities.js +16 -20
- package/dist/classes/features/other/PickupIndexCreation.js +31 -35
- package/dist/classes/features/other/PlayerCollectibleTracking.js +18 -22
- package/dist/classes/features/other/PonyDetection.js +22 -26
- package/dist/classes/features/other/PressInput.js +10 -14
- package/dist/classes/features/other/PreventChildEntities.js +6 -10
- package/dist/classes/features/other/PreventGridEntityRespawn.js +34 -38
- package/dist/classes/features/other/RerunDetection.js +11 -15
- package/dist/classes/features/other/RoomClearFrame.js +11 -15
- package/dist/classes/features/other/RoomHistory.js +30 -34
- package/dist/classes/features/other/RunInNFrames.js +24 -28
- package/dist/classes/features/other/RunNextRoom.js +8 -12
- package/dist/classes/features/other/RunNextRun.js +8 -12
- package/dist/classes/features/other/SaveDataManager.js +61 -65
- package/dist/classes/features/other/SpawnRockAltRewards.js +115 -119
- package/dist/classes/features/other/StageHistory.js +76 -80
- package/dist/classes/features/other/StartAmbush.js +12 -16
- package/dist/classes/features/other/TaintedLazarusPlayers.js +10 -14
- package/dist/classes/features/other/UnlockAchievementsDetection.js +10 -14
- package/dist/classes/features/other/customStages/backdrop.js +68 -71
- package/dist/classes/features/other/customStages/constants.js +7 -10
- package/dist/classes/features/other/customStages/gridEntities.js +23 -30
- package/dist/classes/features/other/customStages/shadows.js +27 -30
- package/dist/classes/features/other/customStages/streakText.js +55 -60
- package/dist/classes/features/other/customStages/utils.js +13 -17
- package/dist/classes/features/other/customStages/v.js +4 -7
- package/dist/classes/features/other/customStages/versusScreen.js +46 -50
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +8 -12
- package/dist/classes/features/other/debugDisplay/utils.js +6 -10
- package/dist/classes/features/other/extraConsoleCommands/commands.js +411 -557
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +47 -57
- package/dist/classes/features/other/extraConsoleCommands/v.js +1 -4
- package/dist/classes/features/other/saveDataManager/constants.js +1 -4
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +17 -21
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +19 -22
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +20 -25
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +13 -16
- package/dist/classes/private/CustomCallback.js +4 -8
- package/dist/classes/private/Feature.js +1 -5
- package/dist/core/cachedClasses.js +12 -15
- package/dist/core/constants.js +126 -130
- package/dist/core/constantsFirstLast.js +22 -25
- package/dist/core/constantsVanilla.js +25 -28
- package/dist/core/upgradeMod.js +7 -10
- package/dist/decorators.js +6 -10
- package/dist/enums/AmbushType.js +2 -5
- package/dist/enums/CornerType.js +2 -5
- package/dist/enums/HealthType.js +2 -5
- package/dist/enums/ISCFeature.js +2 -5
- package/dist/enums/LadderSubTypeCustom.js +2 -5
- package/dist/enums/ModCallbackCustom.js +2 -5
- package/dist/enums/MysteriousPaperEffect.js +2 -5
- package/dist/enums/PlayerStat.js +2 -5
- package/dist/enums/PocketItemType.js +2 -5
- package/dist/enums/RockAltType.js +2 -5
- package/dist/enums/SaveDataKey.js +2 -5
- package/dist/enums/SerializationType.js +2 -5
- package/dist/enums/SlotDestructionType.js +2 -5
- package/dist/enums/private/GridEntityTypeCustom.js +1 -4
- package/dist/enums/private/SerializationBrand.js +2 -5
- package/dist/enums/private/StageTravelState.js +2 -5
- package/dist/enums/private/TrapdoorAnimation.js +2 -5
- package/dist/enums/private/UIStreakAnimation.js +2 -5
- package/dist/features.js +138 -141
- package/dist/functions/ambush.js +9 -12
- package/dist/functions/array.js +45 -76
- package/dist/functions/arrayLua.js +7 -16
- package/dist/functions/benchmark.js +4 -7
- package/dist/functions/bitSet128.js +19 -26
- package/dist/functions/bitwise.js +14 -23
- package/dist/functions/bombs.js +1 -4
- package/dist/functions/bosses.js +68 -85
- package/dist/functions/cards.js +44 -62
- package/dist/functions/challenges.js +28 -39
- package/dist/functions/characters.js +68 -87
- package/dist/functions/charge.js +41 -52
- package/dist/functions/chargeBar.js +2 -6
- package/dist/functions/collectibleTag.js +9 -13
- package/dist/functions/collectibles.js +133 -172
- package/dist/functions/color.js +29 -38
- package/dist/functions/console.js +4 -8
- package/dist/functions/curses.js +6 -10
- package/dist/functions/debugFunctions.js +7 -14
- package/dist/functions/decorators.js +13 -19
- package/dist/functions/deepCopy.js +96 -99
- package/dist/functions/deepCopyTests.js +56 -59
- package/dist/functions/dimensions.js +10 -14
- package/dist/functions/direction.js +22 -30
- package/dist/functions/doors.js +104 -154
- package/dist/functions/easing.js +30 -62
- package/dist/functions/effects.js +6 -10
- package/dist/functions/emptyRoom.js +30 -34
- package/dist/functions/entities.js +88 -115
- package/dist/functions/entitiesSpecific.js +83 -125
- package/dist/functions/entityTypes.js +3 -6
- package/dist/functions/enums.js +27 -41
- package/dist/functions/external.js +4 -8
- package/dist/functions/familiars.js +17 -25
- package/dist/functions/flag.js +10 -19
- package/dist/functions/frames.js +31 -51
- package/dist/functions/globals.js +26 -66
- package/dist/functions/gridEntities.js +231 -269
- package/dist/functions/gridEntitiesSpecific.js +86 -126
- package/dist/functions/gridIndex.js +8 -11
- package/dist/functions/hash.js +1 -4
- package/dist/functions/hex.js +7 -11
- package/dist/functions/input.js +65 -88
- package/dist/functions/isaacAPIClass.js +28 -53
- package/dist/functions/itemPool.js +39 -48
- package/dist/functions/jsonHelpers.js +5 -42
- package/dist/functions/jsonRoom.js +39 -46
- package/dist/functions/kColor.js +30 -39
- package/dist/functions/language.js +3 -6
- package/dist/functions/level.js +20 -26
- package/dist/functions/levelGrid.js +81 -108
- package/dist/functions/log.js +6 -12
- package/dist/functions/logEntities.js +49 -59
- package/dist/functions/logMisc.js +183 -214
- package/dist/functions/map.js +10 -20
- package/dist/functions/math.js +16 -31
- package/dist/functions/merge.js +48 -51
- package/dist/functions/mergeTests.js +34 -37
- package/dist/functions/minimap.js +34 -46
- package/dist/functions/modFeatures.js +1 -4
- package/dist/functions/newArray.js +5 -8
- package/dist/functions/nextStage.js +63 -67
- package/dist/functions/npcDataStructures.js +9 -20
- package/dist/functions/npcs.js +37 -45
- package/dist/functions/pickupVariants.js +26 -39
- package/dist/functions/pickups.js +43 -59
- package/dist/functions/pickupsSpecific.js +76 -118
- package/dist/functions/pills.js +52 -72
- package/dist/functions/playerCenter.js +13 -16
- package/dist/functions/playerCollectibles.js +59 -79
- package/dist/functions/playerDataStructures.js +18 -29
- package/dist/functions/playerEffects.js +12 -19
- package/dist/functions/playerHealth.js +91 -113
- package/dist/functions/playerIndex.js +22 -33
- package/dist/functions/playerTrinkets.js +31 -43
- package/dist/functions/players.js +87 -126
- package/dist/functions/pocketItems.js +33 -43
- package/dist/functions/positionVelocity.js +23 -32
- package/dist/functions/pressurePlate.js +7 -10
- package/dist/functions/projectiles.js +11 -15
- package/dist/functions/random.js +8 -13
- package/dist/functions/readOnly.js +3 -8
- package/dist/functions/render.js +7 -12
- package/dist/functions/revive.js +38 -45
- package/dist/functions/rng.js +31 -44
- package/dist/functions/rockAlt.js +18 -22
- package/dist/functions/roomData.js +24 -40
- package/dist/functions/roomGrid.js +17 -25
- package/dist/functions/roomShape.js +39 -55
- package/dist/functions/roomShapeWalls.js +67 -71
- package/dist/functions/roomTransition.js +13 -17
- package/dist/functions/rooms.js +181 -244
- package/dist/functions/run.js +29 -39
- package/dist/functions/seeds.js +6 -10
- package/dist/functions/serialization.js +27 -34
- package/dist/functions/set.js +24 -40
- package/dist/functions/slots.js +18 -22
- package/dist/functions/sort.js +9 -15
- package/dist/functions/sound.js +12 -16
- package/dist/functions/spawnCollectible.js +21 -26
- package/dist/functions/sprites.js +16 -24
- package/dist/functions/stage.js +122 -164
- package/dist/functions/stats.js +37 -43
- package/dist/functions/storyBosses.js +36 -40
- package/dist/functions/string.js +19 -33
- package/dist/functions/table.js +21 -31
- package/dist/functions/tears.js +6 -14
- package/dist/functions/transformations.js +35 -42
- package/dist/functions/trinketGive.js +29 -36
- package/dist/functions/trinkets.js +45 -60
- package/dist/functions/tstlClass.js +11 -20
- package/dist/functions/types.js +22 -46
- package/dist/functions/ui.js +25 -40
- package/dist/functions/utils.js +22 -36
- package/dist/functions/vector.js +33 -46
- package/dist/functions/versusScreen.js +12 -18
- package/dist/functions/weighted.js +8 -12
- package/dist/index.js +150 -166
- package/dist/indexLua.js +151 -167
- package/dist/interfaces/ChargeBarSprites.js +1 -2
- package/dist/interfaces/Corner.js +1 -2
- package/dist/interfaces/CustomStageTSConfig.js +1 -2
- package/dist/interfaces/GridEntityCustomData.js +1 -2
- package/dist/interfaces/JSONRoomsFile.js +1 -2
- package/dist/interfaces/PlayerHealth.js +1 -2
- package/dist/interfaces/PlayerStats.js +2 -4
- package/dist/interfaces/PocketItemDescription.js +1 -2
- package/dist/interfaces/RoomDescription.js +1 -2
- package/dist/interfaces/SaveData.js +1 -2
- package/dist/interfaces/StageHistoryEntry.js +1 -2
- package/dist/interfaces/TSTLClassMetatable.js +1 -2
- package/dist/interfaces/TrinketSituation.js +1 -2
- package/dist/interfaces/private/AddCallbackParametersCustom.js +2 -4
- package/dist/interfaces/private/CustomStage.js +1 -2
- package/dist/interfaces/private/CustomTrapdoorDescription.js +1 -2
- package/dist/interfaces/private/ModUpgradedInterface.js +1 -2
- package/dist/isaacscript-common.lua +1 -1
- package/dist/maps/PHDPillConversionsMap.js +19 -22
- package/dist/maps/cardNameToTypeMap.js +205 -208
- package/dist/maps/characterNameToTypeMap.js +85 -88
- package/dist/maps/collectibleNameToTypeMap.js +5 -8
- package/dist/maps/defaultPlayerStatMap.js +10 -13
- package/dist/maps/entityTypeVariantToBossIDMap.js +3 -6
- package/dist/maps/falsePHDPillConversionsMap.js +33 -36
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +15 -18
- package/dist/maps/gridEntityXMLMap.js +52 -55
- package/dist/maps/itemPoolTypeToItemPoolName.js +33 -36
- package/dist/maps/keyboardToStringMap.js +66 -69
- package/dist/maps/pillNameToEffectMap.js +83 -86
- package/dist/maps/roomNameToTypeMap.js +38 -41
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +9 -12
- package/dist/maps/transformationNameToPlayerFormMap.js +30 -33
- package/dist/maps/trinketNameToTypeMap.js +5 -8
- package/dist/objects/LRoomShapeToRectangles.js +22 -25
- package/dist/objects/backdropTypeToRockAltType.js +65 -68
- package/dist/objects/batteryNames.js +8 -11
- package/dist/objects/bombNames.js +11 -14
- package/dist/objects/bossIDToEntityTypeVariant.js +116 -119
- package/dist/objects/bossNamePNGFileNames.js +104 -107
- package/dist/objects/bossNames.js +105 -108
- package/dist/objects/bossPortraitPNGFileNames.js +104 -107
- package/dist/objects/cardDescriptions.js +101 -104
- package/dist/objects/cardNames.js +101 -104
- package/dist/objects/challengeBosses.js +49 -52
- package/dist/objects/challengeCharacters.js +49 -52
- package/dist/objects/challengeCollectibleTypes.js +160 -163
- package/dist/objects/challengeNames.js +49 -52
- package/dist/objects/challengeTrinketType.js +48 -51
- package/dist/objects/characterDamageMultipliers.js +44 -47
- package/dist/objects/characterNames.js +44 -47
- package/dist/objects/characterSpritePNGFileNames.js +44 -47
- package/dist/objects/characterStartingCollectibleTypes.js +49 -52
- package/dist/objects/characterStartingTrinketTypes.js +44 -47
- package/dist/objects/chestNames.js +15 -18
- package/dist/objects/coinNames.js +11 -14
- package/dist/objects/coinSubTypeToValue.js +11 -14
- package/dist/objects/collectibleDescriptions.js +725 -728
- package/dist/objects/collectibleNames.js +725 -728
- package/dist/objects/colors.js +1 -4
- package/dist/objects/directionNames.js +7 -10
- package/dist/objects/directionToDegrees.js +7 -10
- package/dist/objects/directionToMoveAction.js +7 -10
- package/dist/objects/directionToShootAction.js +7 -10
- package/dist/objects/directionToVector.js +9 -12
- package/dist/objects/doorSlotFlagToDoorSlot.js +11 -14
- package/dist/objects/doorSlotToDirection.js +11 -14
- package/dist/objects/doorSlotToDoorSlotFlag.js +11 -14
- package/dist/objects/gridEntityTypeToANM2Name.js +30 -33
- package/dist/objects/heartNames.js +16 -19
- package/dist/objects/isaacAPIClassTypeToBrand.js +8 -11
- package/dist/objects/isaacAPIClassTypeToFunctions.js +37 -40
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +9 -45
- package/dist/objects/kColors.js +1 -4
- package/dist/objects/keyNames.js +8 -11
- package/dist/objects/languageNames.js +9 -12
- package/dist/objects/oppositeDoorSlots.js +11 -14
- package/dist/objects/pillEffectClasses.js +53 -56
- package/dist/objects/pillEffectNames.js +53 -56
- package/dist/objects/pillEffectTypeToPillEffects.js +11 -14
- package/dist/objects/pillEffectTypes.js +53 -56
- package/dist/objects/playerNamePNGFileNames.js +44 -47
- package/dist/objects/playerPortraitPNGFileNames.js +44 -47
- package/dist/objects/roomShapeBounds.js +23 -26
- package/dist/objects/roomShapeCorners.js +128 -131
- package/dist/objects/roomShapeLayoutSizes.js +23 -26
- package/dist/objects/roomShapeToBottomRightPosition.js +17 -20
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +78 -81
- package/dist/objects/roomShapeToDoorSlots.js +48 -51
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +82 -85
- package/dist/objects/roomShapeToGridWidth.js +14 -17
- package/dist/objects/roomShapeToTopLeftPosition.js +18 -21
- package/dist/objects/roomShapeVolumes.js +21 -24
- package/dist/objects/roomTypeNames.js +32 -35
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +32 -35
- package/dist/objects/sackNames.js +6 -9
- package/dist/objects/slotNames.js +21 -24
- package/dist/objects/stageIDNames.js +33 -36
- package/dist/objects/stageToMusic.js +69 -72
- package/dist/objects/stageToStageID.js +90 -93
- package/dist/objects/stageTypeSuffixes.js +8 -11
- package/dist/objects/transformationNames.js +16 -19
- package/dist/objects/trinketDescriptions.js +192 -195
- package/dist/objects/trinketNames.js +192 -195
- package/dist/objects/versusScreenBackgroundColors.js +39 -42
- package/dist/objects/versusScreenDirtSpotColors.js +39 -42
- package/dist/patchErrorFunctions.js +4 -7
- package/dist/serialization.js +6 -9
- package/dist/sets/LRoomShapesSet.js +7 -10
- package/dist/sets/bigRoomShapesSet.js +10 -13
- package/dist/sets/bossSets.js +261 -264
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +14 -17
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +5 -8
- package/dist/sets/charactersWithFreeDevilDealsSet.js +3 -6
- package/dist/sets/charactersWithNoRedHeartsSet.js +11 -14
- package/dist/sets/charactersWithNoSoulHeartsSet.js +8 -11
- package/dist/sets/consoleCommandsSet.js +2 -5
- package/dist/sets/entitiesWithArmorSet.js +44 -47
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +11 -14
- package/dist/sets/itemConfigCardTypesForCards.js +7 -10
- package/dist/sets/lostStyleCharactersSet.js +8 -11
- package/dist/sets/mineShaftRoomSubTypesSet.js +8 -11
- package/dist/sets/narrowRoomShapesSet.js +7 -10
- package/dist/sets/poopGridEntityXMLTypesSet.js +12 -15
- package/dist/sets/redHeartSubTypesSet.js +6 -9
- package/dist/sets/repentanceBossIDsSet.js +26 -29
- package/dist/sets/sinEntityTypesSet.js +10 -13
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +11 -14
- package/dist/shaderCrashFix.js +4 -7
- package/dist/shouldFire.js +28 -58
- package/dist/types/AddSubtract.js +1 -2
- package/dist/types/AllButFirst.js +1 -2
- package/dist/types/AllButLast.js +1 -2
- package/dist/types/AnyClass.js +1 -2
- package/dist/types/AnyEntity.js +1 -2
- package/dist/types/AnyFunction.js +1 -2
- package/dist/types/AnyGridEntity.js +1 -2
- package/dist/types/CompositionTypeSatisfiesEnum.js +1 -2
- package/dist/types/ConversionHeartSubType.js +1 -2
- package/dist/types/Decrement.js +1 -2
- package/dist/types/ERange.js +1 -2
- package/dist/types/EntityID.js +1 -2
- package/dist/types/FunctionTuple.js +1 -2
- package/dist/types/GridEntityID.js +1 -2
- package/dist/types/HasFunction.js +1 -2
- package/dist/types/IRange.js +1 -2
- package/dist/types/Immutable.js +1 -2
- package/dist/types/Increment.js +1 -2
- package/dist/types/LowercaseKeys.js +1 -2
- package/dist/types/NaturalNumbersLessThan.js +1 -2
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +1 -2
- package/dist/types/ObjectValues.js +1 -2
- package/dist/types/PickingUpItem.js +15 -22
- package/dist/types/PickupIndex.js +1 -2
- package/dist/types/PlayerIndex.js +1 -2
- package/dist/types/PossibleStatType.js +1 -2
- package/dist/types/PublicInterface.js +1 -2
- package/dist/types/ReadonlyMap.js +1 -4
- package/dist/types/ReadonlyRecord.js +1 -2
- package/dist/types/ReadonlySet.js +1 -4
- package/dist/types/StartsWithLowercase.js +1 -2
- package/dist/types/StartsWithUppercase.js +1 -2
- package/dist/types/TSTLClass.js +1 -2
- package/dist/types/Tuple.js +1 -2
- package/dist/types/TupleKeys.js +1 -2
- package/dist/types/TupleToIntersection.js +1 -2
- package/dist/types/TupleToUnion.js +1 -2
- package/dist/types/TupleWithLengthBetween.js +1 -2
- package/dist/types/TupleWithMaxLength.js +1 -2
- package/dist/types/UnionToIntersection.js +1 -2
- package/dist/types/UppercaseKeys.js +1 -2
- package/dist/types/WeightedArray.js +1 -2
- package/dist/types/WidenLiteral.js +1 -2
- package/dist/types/Writable.js +1 -2
- package/dist/types/private/CallbackTuple.js +1 -2
- package/dist/types/private/ModUpgradedWithFeatures.js +1 -2
- package/package.json +3 -3
package/dist/functions/map.js
CHANGED
|
@@ -1,23 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.copyMap = copyMap;
|
|
4
|
-
exports.defaultMapGetHash = defaultMapGetHash;
|
|
5
|
-
exports.defaultMapSetHash = defaultMapSetHash;
|
|
6
|
-
exports.getReversedMap = getReversedMap;
|
|
7
|
-
exports.mapSetHash = mapSetHash;
|
|
8
|
-
exports.objectToMap = objectToMap;
|
|
9
|
-
exports.objectToReadonlyMap = objectToReadonlyMap;
|
|
10
|
-
exports.sumMap = sumMap;
|
|
11
|
-
const array_1 = require("./array");
|
|
1
|
+
import { sumArray } from "./array";
|
|
12
2
|
/** Helper function to copy a map. (You can also use a Map constructor to accomplish this task.) */
|
|
13
|
-
function copyMap(oldMap) {
|
|
3
|
+
export function copyMap(oldMap) {
|
|
14
4
|
return new Map(oldMap);
|
|
15
5
|
}
|
|
16
6
|
/**
|
|
17
7
|
* Helper function to get the value from a `DefaultMap` that corresponds to an entity, assuming that
|
|
18
8
|
* the map uses `PtrHash` as an index.
|
|
19
9
|
*/
|
|
20
|
-
function defaultMapGetHash(map, entity, ...extraArgs) {
|
|
10
|
+
export function defaultMapGetHash(map, entity, ...extraArgs) {
|
|
21
11
|
const ptrHash = GetPtrHash(entity);
|
|
22
12
|
return map.getAndSetDefault(ptrHash, ...extraArgs);
|
|
23
13
|
}
|
|
@@ -28,7 +18,7 @@ function defaultMapGetHash(map, entity, ...extraArgs) {
|
|
|
28
18
|
* Since `Map` and `DefaultMap` set values in the same way, this function is simply an alias for the
|
|
29
19
|
* `mapSetHash` helper function.
|
|
30
20
|
*/
|
|
31
|
-
function defaultMapSetHash(
|
|
21
|
+
export function defaultMapSetHash(
|
|
32
22
|
// eslint-disable-next-line complete/prefer-readonly-parameter-types
|
|
33
23
|
map, entity, value) {
|
|
34
24
|
mapSetHash(map, entity, value);
|
|
@@ -54,7 +44,7 @@ map, entity, value) {
|
|
|
54
44
|
* ]);
|
|
55
45
|
* ```
|
|
56
46
|
*/
|
|
57
|
-
function getReversedMap(map) {
|
|
47
|
+
export function getReversedMap(map) {
|
|
58
48
|
const reverseMap = new Map();
|
|
59
49
|
for (const [key, value] of map) {
|
|
60
50
|
reverseMap.set(value, key);
|
|
@@ -65,7 +55,7 @@ function getReversedMap(map) {
|
|
|
65
55
|
* Helper function to set a value for a `DefaultMap` that corresponds to an entity, assuming that
|
|
66
56
|
* the map uses `PtrHash` as an index.
|
|
67
57
|
*/
|
|
68
|
-
function mapSetHash(
|
|
58
|
+
export function mapSetHash(
|
|
69
59
|
// eslint-disable-next-line complete/prefer-readonly-parameter-types
|
|
70
60
|
map, entity, value) {
|
|
71
61
|
const hash = GetPtrHash(entity);
|
|
@@ -84,7 +74,7 @@ map, entity, value) {
|
|
|
84
74
|
*
|
|
85
75
|
* Also see the `objectToReadonlyMap` function.
|
|
86
76
|
*/
|
|
87
|
-
function objectToMap(object) {
|
|
77
|
+
export function objectToMap(object) {
|
|
88
78
|
const map = new Map();
|
|
89
79
|
for (const [key, value] of Object.entries(object)) {
|
|
90
80
|
map.set(key, value);
|
|
@@ -104,11 +94,11 @@ function objectToMap(object) {
|
|
|
104
94
|
*
|
|
105
95
|
* Also see the `objectToMap` function.
|
|
106
96
|
*/
|
|
107
|
-
function objectToReadonlyMap(object) {
|
|
97
|
+
export function objectToReadonlyMap(object) {
|
|
108
98
|
return objectToMap(object);
|
|
109
99
|
}
|
|
110
100
|
/** Helper function to sum every value in a map together. */
|
|
111
|
-
function sumMap(map) {
|
|
101
|
+
export function sumMap(map) {
|
|
112
102
|
const values = [...map.values()];
|
|
113
|
-
return
|
|
103
|
+
return sumArray(values);
|
|
114
104
|
}
|
package/dist/functions/math.js
CHANGED
|
@@ -1,30 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.clamp = clamp;
|
|
4
|
-
exports.getAngleDifference = getAngleDifference;
|
|
5
|
-
exports.getCircleDiscretizedPoints = getCircleDiscretizedPoints;
|
|
6
|
-
exports.inRectangle = inRectangle;
|
|
7
|
-
exports.isCircleIntersectingRectangle = isCircleIntersectingRectangle;
|
|
8
|
-
exports.isEven = isEven;
|
|
9
|
-
exports.isOdd = isOdd;
|
|
10
|
-
exports.lerp = lerp;
|
|
11
|
-
exports.lerpAngleDegrees = lerpAngleDegrees;
|
|
12
|
-
exports.round = round;
|
|
13
|
-
exports.sign = sign;
|
|
14
|
-
exports.splitNumber = splitNumber;
|
|
15
|
-
exports.tanh = tanh;
|
|
16
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
17
|
-
const direction_1 = require("./direction");
|
|
1
|
+
import { Direction } from "isaac-typescript-definitions";
|
|
2
|
+
import { directionToVector } from "./direction";
|
|
18
3
|
/**
|
|
19
4
|
* Helper function to normalize a number, ensuring that it is within a certain range.
|
|
20
5
|
*
|
|
21
6
|
* - If `num` is less than `min`, then it will be clamped to `min`.
|
|
22
7
|
* - If `num` is greater than `max`, then it will be clamped to `max`.
|
|
23
8
|
*/
|
|
24
|
-
function clamp(num, min, max) {
|
|
9
|
+
export function clamp(num, min, max) {
|
|
25
10
|
return Math.max(min, Math.min(num, max));
|
|
26
11
|
}
|
|
27
|
-
function getAngleDifference(angle1, angle2) {
|
|
12
|
+
export function getAngleDifference(angle1, angle2) {
|
|
28
13
|
const subtractedAngle = angle1 - angle2;
|
|
29
14
|
return ((subtractedAngle + 180) % 360) - 180;
|
|
30
15
|
}
|
|
@@ -40,8 +25,8 @@ function getAngleDifference(angle1, angle2) {
|
|
|
40
25
|
* @param initialDirection By default, the first point on the circle will be on the top center, but
|
|
41
26
|
* this can be optionally changed by specifying this argument.
|
|
42
27
|
*/
|
|
43
|
-
function getCircleDiscretizedPoints(centerPos, radius, numPoints, xMultiplier = 1, yMultiplier = 1, initialDirection =
|
|
44
|
-
const vector =
|
|
28
|
+
export function getCircleDiscretizedPoints(centerPos, radius, numPoints, xMultiplier = 1, yMultiplier = 1, initialDirection = Direction.UP) {
|
|
29
|
+
const vector = directionToVector(initialDirection);
|
|
45
30
|
const initialPosition = vector.mul(radius);
|
|
46
31
|
const positions = [];
|
|
47
32
|
for (let i = 0; i < numPoints; i++) {
|
|
@@ -59,7 +44,7 @@ function getCircleDiscretizedPoints(centerPos, radius, numPoints, xMultiplier =
|
|
|
59
44
|
* This is an inclusive check, meaning that it will return true if the position is on the border of
|
|
60
45
|
* the rectangle.
|
|
61
46
|
*/
|
|
62
|
-
function inRectangle(position, topLeft, bottomRight) {
|
|
47
|
+
export function inRectangle(position, topLeft, bottomRight) {
|
|
63
48
|
return (position.X >= topLeft.X
|
|
64
49
|
&& position.X <= bottomRight.X
|
|
65
50
|
&& position.Y >= topLeft.Y
|
|
@@ -68,25 +53,25 @@ function inRectangle(position, topLeft, bottomRight) {
|
|
|
68
53
|
/**
|
|
69
54
|
* From: https://www.geeksforgeeks.org/check-if-any-point-overlaps-the-given-circle-and-rectangle/
|
|
70
55
|
*/
|
|
71
|
-
function isCircleIntersectingRectangle(circleCenter, circleRadius, rectangleTopLeft, rectangleBottomRight) {
|
|
56
|
+
export function isCircleIntersectingRectangle(circleCenter, circleRadius, rectangleTopLeft, rectangleBottomRight) {
|
|
72
57
|
const nearestX = Math.max(rectangleTopLeft.X, Math.min(circleCenter.X, rectangleBottomRight.X));
|
|
73
58
|
const nearestY = Math.max(rectangleTopLeft.Y, Math.min(circleCenter.Y, rectangleBottomRight.Y));
|
|
74
59
|
const nearestPointToCircleOnRectangle = Vector(nearestX, nearestY);
|
|
75
60
|
const distanceToCenterOfCircle = nearestPointToCircleOnRectangle.Distance(circleCenter);
|
|
76
61
|
return distanceToCenterOfCircle <= circleRadius;
|
|
77
62
|
}
|
|
78
|
-
function isEven(num) {
|
|
63
|
+
export function isEven(num) {
|
|
79
64
|
// This is benchmarked to be faster than using the modulus operator by 3%.
|
|
80
65
|
return (num & 1) === 0;
|
|
81
66
|
}
|
|
82
|
-
function isOdd(num) {
|
|
67
|
+
export function isOdd(num) {
|
|
83
68
|
// This is benchmarked to be faster than using the modulus operator by 3%.
|
|
84
69
|
return (num & 1) === 1;
|
|
85
70
|
}
|
|
86
|
-
function lerp(a, b, pos) {
|
|
71
|
+
export function lerp(a, b, pos) {
|
|
87
72
|
return a + (b - a) * pos;
|
|
88
73
|
}
|
|
89
|
-
function lerpAngleDegrees(aStart, aEnd, percent) {
|
|
74
|
+
export function lerpAngleDegrees(aStart, aEnd, percent) {
|
|
90
75
|
return aStart + getAngleDifference(aStart, aEnd) * percent;
|
|
91
76
|
}
|
|
92
77
|
/**
|
|
@@ -97,13 +82,13 @@ function lerpAngleDegrees(aStart, aEnd, percent) {
|
|
|
97
82
|
* @param num The number to round.
|
|
98
83
|
* @param numDecimalPlaces Optional. Default is 0.
|
|
99
84
|
*/
|
|
100
|
-
function round(num, numDecimalPlaces = 0) {
|
|
85
|
+
export function round(num, numDecimalPlaces = 0) {
|
|
101
86
|
const roundedString = string.format(`%.${numDecimalPlaces}f`, num);
|
|
102
87
|
const roundedNum = tonumber(roundedString);
|
|
103
88
|
return roundedNum ?? 0;
|
|
104
89
|
}
|
|
105
90
|
/** @returns 1 if n is positive, -1 if n is negative, or 0 if n is 0. */
|
|
106
|
-
function sign(n) {
|
|
91
|
+
export function sign(n) {
|
|
107
92
|
if (n > 0) {
|
|
108
93
|
return 1;
|
|
109
94
|
}
|
|
@@ -128,7 +113,7 @@ function sign(n) {
|
|
|
128
113
|
* @param startAtZero Whether to start at 0. Defaults to false. If true, the chunks will start at 0
|
|
129
114
|
* instead of 1.
|
|
130
115
|
*/
|
|
131
|
-
function splitNumber(num, size, startAtZero = false) {
|
|
116
|
+
export function splitNumber(num, size, startAtZero = false) {
|
|
132
117
|
if (num <= 0) {
|
|
133
118
|
error(`The number to split needs to be a positive number and is instead: ${num}`);
|
|
134
119
|
}
|
|
@@ -144,6 +129,6 @@ function splitNumber(num, size, startAtZero = false) {
|
|
|
144
129
|
}
|
|
145
130
|
return chunks;
|
|
146
131
|
}
|
|
147
|
-
function tanh(x) {
|
|
132
|
+
export function tanh(x) {
|
|
148
133
|
return (Math.exp(x) - Math.exp(-x)) / (Math.exp(x) + Math.exp(-x));
|
|
149
134
|
}
|
package/dist/functions/merge.js
CHANGED
|
@@ -1,18 +1,15 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
const tstlClass_1 = require("./tstlClass");
|
|
14
|
-
const types_1 = require("./types");
|
|
15
|
-
const utils_1 = require("./utils");
|
|
1
|
+
import { SAVE_DATA_MANAGER_DEBUG } from "../classes/features/other/saveDataManager/constants";
|
|
2
|
+
import { SerializationBrand } from "../enums/private/SerializationBrand";
|
|
3
|
+
import { SerializationType } from "../enums/SerializationType";
|
|
4
|
+
import { isSerializationBrand } from "../serialization";
|
|
5
|
+
import { isArray } from "./array";
|
|
6
|
+
import { deepCopy } from "./deepCopy";
|
|
7
|
+
import { log } from "./log";
|
|
8
|
+
import { deserializeIsaacAPIClass, isSerializedIsaacAPIClass, } from "./serialization";
|
|
9
|
+
import { clearTable, iterateTableInOrder } from "./table";
|
|
10
|
+
import { isDefaultMap, isTSTLMap, isTSTLSet } from "./tstlClass";
|
|
11
|
+
import { isTable } from "./types";
|
|
12
|
+
import { getTraversalDescription } from "./utils";
|
|
16
13
|
/**
|
|
17
14
|
* `merge` takes the values from a new table and recursively merges them into an old object (while
|
|
18
15
|
* performing appropriate deserialization).
|
|
@@ -49,24 +46,24 @@ const utils_1 = require("./utils");
|
|
|
49
46
|
* object, it will use this map to instantiate a new class. Default is an
|
|
50
47
|
* empty Lua table.
|
|
51
48
|
*/
|
|
52
|
-
function merge(oldObject, newTable, traversalDescription, classConstructors = new LuaMap()) {
|
|
53
|
-
if (
|
|
54
|
-
|
|
49
|
+
export function merge(oldObject, newTable, traversalDescription, classConstructors = new LuaMap()) {
|
|
50
|
+
if (SAVE_DATA_MANAGER_DEBUG) {
|
|
51
|
+
log(`merge is traversing: ${traversalDescription}`);
|
|
55
52
|
}
|
|
56
|
-
if (!
|
|
53
|
+
if (!isTable(oldObject)) {
|
|
57
54
|
error("The first argument given to the merge function is not a table.");
|
|
58
55
|
}
|
|
59
|
-
if (!
|
|
56
|
+
if (!isTable(newTable)) {
|
|
60
57
|
error("The second argument given to the merge function is not a table.");
|
|
61
58
|
}
|
|
62
59
|
// First, handle the special case of an array with a shallow copy.
|
|
63
|
-
if (
|
|
60
|
+
if (isArray(oldObject) && isArray(newTable)) {
|
|
64
61
|
mergeSerializedArray(oldObject, newTable, traversalDescription, classConstructors);
|
|
65
62
|
return;
|
|
66
63
|
}
|
|
67
64
|
// Depending on whether we are working on a Lua table or a TypeScriptToLua object, we need to
|
|
68
65
|
// iterate in a specific way.
|
|
69
|
-
if (
|
|
66
|
+
if (isTSTLMap(oldObject) || isTSTLSet(oldObject) || isDefaultMap(oldObject)) {
|
|
70
67
|
mergeSerializedTSTLObject(oldObject, newTable, traversalDescription, classConstructors);
|
|
71
68
|
}
|
|
72
69
|
else {
|
|
@@ -74,69 +71,69 @@ function merge(oldObject, newTable, traversalDescription, classConstructors = ne
|
|
|
74
71
|
}
|
|
75
72
|
}
|
|
76
73
|
function mergeSerializedArray(oldArray, newArray, traversalDescription, classConstructors) {
|
|
77
|
-
if (
|
|
78
|
-
|
|
74
|
+
if (SAVE_DATA_MANAGER_DEBUG) {
|
|
75
|
+
log(`merge encountered an array: ${traversalDescription}`);
|
|
79
76
|
}
|
|
80
77
|
// Assume that we should blow away all array values with whatever is present in the incoming
|
|
81
78
|
// array.
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
const deserializedValue =
|
|
79
|
+
clearTable(oldArray);
|
|
80
|
+
iterateTableInOrder(newArray, (key, value) => {
|
|
81
|
+
const deserializedValue = deepCopy(value, SerializationType.DESERIALIZE, traversalDescription, classConstructors);
|
|
85
82
|
oldArray.set(key, deserializedValue);
|
|
86
|
-
},
|
|
83
|
+
}, SAVE_DATA_MANAGER_DEBUG);
|
|
87
84
|
}
|
|
88
85
|
function mergeSerializedTable(oldTable, newTable, traversalDescription, classConstructors) {
|
|
89
|
-
if (
|
|
90
|
-
|
|
86
|
+
if (SAVE_DATA_MANAGER_DEBUG) {
|
|
87
|
+
log(`merge encountered a Lua table: ${traversalDescription}`);
|
|
91
88
|
}
|
|
92
|
-
|
|
93
|
-
if (
|
|
89
|
+
iterateTableInOrder(newTable, (key, value) => {
|
|
90
|
+
if (SAVE_DATA_MANAGER_DEBUG) {
|
|
94
91
|
const valueToPrint = value === "" ? "(empty string)" : String(value);
|
|
95
|
-
|
|
92
|
+
log(`merge is merging: ${traversalDescription} --> ${valueToPrint}`);
|
|
96
93
|
}
|
|
97
|
-
if (
|
|
94
|
+
if (isSerializationBrand(key)) {
|
|
98
95
|
return;
|
|
99
96
|
}
|
|
100
97
|
// Handle the special case of serialized Isaac API classes.
|
|
101
|
-
if (
|
|
102
|
-
if (
|
|
103
|
-
|
|
98
|
+
if (isSerializedIsaacAPIClass(value)) {
|
|
99
|
+
if (SAVE_DATA_MANAGER_DEBUG) {
|
|
100
|
+
log("merge found a serialized Isaac API class.");
|
|
104
101
|
}
|
|
105
|
-
const deserializedObject =
|
|
102
|
+
const deserializedObject = deserializeIsaacAPIClass(value);
|
|
106
103
|
oldTable.set(key, deserializedObject);
|
|
107
104
|
return;
|
|
108
105
|
}
|
|
109
|
-
if (
|
|
106
|
+
if (isTable(value)) {
|
|
110
107
|
let oldValue = oldTable.get(key);
|
|
111
|
-
if (!
|
|
108
|
+
if (!isTable(oldValue)) {
|
|
112
109
|
// The child table does not exist on the old table. However, we still need to copy over
|
|
113
110
|
// the new table, because we need to handle data types like `Foo | null`. Thus, set up a
|
|
114
111
|
// blank sub-table on the old table, and continue to recursively merge.
|
|
115
112
|
oldValue = new LuaMap();
|
|
116
113
|
oldTable.set(key, oldValue);
|
|
117
114
|
}
|
|
118
|
-
traversalDescription =
|
|
115
|
+
traversalDescription = getTraversalDescription(key, traversalDescription);
|
|
119
116
|
merge(oldValue, value, traversalDescription, classConstructors);
|
|
120
117
|
}
|
|
121
118
|
else {
|
|
122
119
|
// Base case: copy the value
|
|
123
120
|
oldTable.set(key, value);
|
|
124
121
|
}
|
|
125
|
-
},
|
|
122
|
+
}, SAVE_DATA_MANAGER_DEBUG);
|
|
126
123
|
}
|
|
127
124
|
function mergeSerializedTSTLObject(
|
|
128
125
|
// eslint-disable-next-line complete/prefer-readonly-parameter-types
|
|
129
126
|
oldObject, newTable, traversalDescription, classConstructors) {
|
|
130
|
-
if (
|
|
131
|
-
|
|
127
|
+
if (SAVE_DATA_MANAGER_DEBUG) {
|
|
128
|
+
log(`merge encountered a TSTL object: ${traversalDescription}`);
|
|
132
129
|
}
|
|
133
130
|
// We blow away the old object and recursively copy over all of the incoming values.
|
|
134
131
|
oldObject.clear();
|
|
135
132
|
// During serialization, we brand some Lua tables with a special identifier to signify that it has
|
|
136
133
|
// keys that should be deserialized to numbers.
|
|
137
|
-
const convertStringKeysToNumbers = newTable.has(
|
|
138
|
-
|
|
139
|
-
if (
|
|
134
|
+
const convertStringKeysToNumbers = newTable.has(SerializationBrand.OBJECT_WITH_NUMBER_KEYS);
|
|
135
|
+
iterateTableInOrder(newTable, (key, value) => {
|
|
136
|
+
if (isSerializationBrand(key)) {
|
|
140
137
|
return;
|
|
141
138
|
}
|
|
142
139
|
let keyToUse = key;
|
|
@@ -147,12 +144,12 @@ oldObject, newTable, traversalDescription, classConstructors) {
|
|
|
147
144
|
}
|
|
148
145
|
keyToUse = numberKey;
|
|
149
146
|
}
|
|
150
|
-
if (
|
|
151
|
-
const deserializedValue =
|
|
147
|
+
if (isTSTLMap(oldObject) || isDefaultMap(oldObject)) {
|
|
148
|
+
const deserializedValue = deepCopy(value, SerializationType.DESERIALIZE, traversalDescription, classConstructors);
|
|
152
149
|
oldObject.set(keyToUse, deserializedValue);
|
|
153
150
|
}
|
|
154
|
-
else if (
|
|
151
|
+
else if (isTSTLSet(oldObject)) {
|
|
155
152
|
oldObject.add(keyToUse);
|
|
156
153
|
}
|
|
157
|
-
},
|
|
154
|
+
}, SAVE_DATA_MANAGER_DEBUG);
|
|
158
155
|
}
|
|
@@ -1,20 +1,17 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const rng_1 = require("./rng");
|
|
10
|
-
const serialization_1 = require("./serialization");
|
|
11
|
-
const vector_1 = require("./vector");
|
|
1
|
+
import { DefaultMap } from "../classes/DefaultMap";
|
|
2
|
+
import { SerializationType } from "../enums/SerializationType";
|
|
3
|
+
import { deepCopy } from "./deepCopy";
|
|
4
|
+
import { logAndPrint } from "./log";
|
|
5
|
+
import { merge } from "./merge";
|
|
6
|
+
import { isRNG, newRNG } from "./rng";
|
|
7
|
+
import { isSerializedIsaacAPIClass } from "./serialization";
|
|
8
|
+
import { isVector, serializeVector } from "./vector";
|
|
12
9
|
/**
|
|
13
10
|
* Run the suite of tests that prove that the "merge" function works properly.
|
|
14
11
|
*
|
|
15
12
|
* This function is only useful if you are troubleshooting the save data manager.
|
|
16
13
|
*/
|
|
17
|
-
function runMergeTests() {
|
|
14
|
+
export function runMergeTests() {
|
|
18
15
|
oldTableHasUpdatedValue();
|
|
19
16
|
newTableHasSameValue();
|
|
20
17
|
oldTableHasUpdatedValueFromNull();
|
|
@@ -27,7 +24,7 @@ function runMergeTests() {
|
|
|
27
24
|
oldTableHasRNG();
|
|
28
25
|
oldTableHasRNGSerialized();
|
|
29
26
|
const successText = "All merge tests passed!";
|
|
30
|
-
|
|
27
|
+
logAndPrint(successText);
|
|
31
28
|
}
|
|
32
29
|
function newTableHasSameValue() {
|
|
33
30
|
const key = "foo";
|
|
@@ -35,7 +32,7 @@ function newTableHasSameValue() {
|
|
|
35
32
|
const newValue = "baz";
|
|
36
33
|
const oldTable = { foo: oldValue };
|
|
37
34
|
const newTable = { foo: newValue };
|
|
38
|
-
|
|
35
|
+
merge(oldTable, newTable, "newTableHasSameValue");
|
|
39
36
|
const newTableValue = newTable.get(key);
|
|
40
37
|
if (newTableValue !== newValue) {
|
|
41
38
|
error(`The new table does not have a value of: ${newValue}`);
|
|
@@ -47,7 +44,7 @@ function oldTableHasFilledChildTable() {
|
|
|
47
44
|
const oldTable = { foo: null };
|
|
48
45
|
const foo = { bar: newValue };
|
|
49
46
|
const newTable = { foo };
|
|
50
|
-
|
|
47
|
+
merge(oldTable, newTable, "oldTableHasFilledChildTable");
|
|
51
48
|
const oldTableValue = oldTable.get(key);
|
|
52
49
|
if (oldTableValue === undefined) {
|
|
53
50
|
error(`The old table's key of "${key}" was not filled.`);
|
|
@@ -59,20 +56,20 @@ function oldTableHasFilledChildTable() {
|
|
|
59
56
|
function oldTableHasFilledDefaultMap() {
|
|
60
57
|
const fakeV = {
|
|
61
58
|
run: {
|
|
62
|
-
myDefaultMap: new
|
|
59
|
+
myDefaultMap: new DefaultMap("default"),
|
|
63
60
|
},
|
|
64
61
|
};
|
|
65
62
|
const saveData = {
|
|
66
63
|
run: {
|
|
67
|
-
myDefaultMap: new
|
|
64
|
+
myDefaultMap: new DefaultMap("default", [
|
|
68
65
|
["foo1", "bar1"],
|
|
69
66
|
["foo2", "bar2"],
|
|
70
67
|
["foo3", "bar3"],
|
|
71
68
|
]),
|
|
72
69
|
},
|
|
73
70
|
};
|
|
74
|
-
const serializedSaveData =
|
|
75
|
-
|
|
71
|
+
const serializedSaveData = deepCopy(saveData, SerializationType.SERIALIZE);
|
|
72
|
+
merge(fakeV, serializedSaveData, "oldTableHasFilledDefaultMap");
|
|
76
73
|
const expectedSize = 3;
|
|
77
74
|
if (fakeV.run.myDefaultMap.size !== expectedSize) {
|
|
78
75
|
error(`The size of the merged default map was equal to ${fakeV.run.myDefaultMap.size}, but it should be equal to: ${expectedSize}`);
|
|
@@ -117,8 +114,8 @@ function oldTableHasFilledMap() {
|
|
|
117
114
|
]),
|
|
118
115
|
},
|
|
119
116
|
};
|
|
120
|
-
const serializedSaveData =
|
|
121
|
-
|
|
117
|
+
const serializedSaveData = deepCopy(saveData, SerializationType.SERIALIZE);
|
|
118
|
+
merge(fakeV, serializedSaveData, "oldTableHasFilledMap");
|
|
122
119
|
const expectedSize = 3;
|
|
123
120
|
if (fakeV.run.myMap.size !== expectedSize) {
|
|
124
121
|
error(`The size of the merged map was equal to ${fakeV.run.myMap.size}, but it should be equal to: ${expectedSize}`);
|
|
@@ -151,16 +148,16 @@ function oldTableHasFilledMap() {
|
|
|
151
148
|
function oldTableHasRNG() {
|
|
152
149
|
const key = "foo";
|
|
153
150
|
const seed = 50;
|
|
154
|
-
const newValue =
|
|
151
|
+
const newValue = newRNG(seed);
|
|
155
152
|
const oldTable = { foo: null };
|
|
156
153
|
const foo = { bar: newValue };
|
|
157
154
|
const newTable = { foo };
|
|
158
|
-
|
|
155
|
+
merge(oldTable, newTable, "oldTableHasRNG");
|
|
159
156
|
const oldTableValue = oldTable.get(key);
|
|
160
157
|
if (oldTableValue === undefined) {
|
|
161
158
|
error(`The old table's key of "${key}" was not filled.`);
|
|
162
159
|
}
|
|
163
|
-
if (!
|
|
160
|
+
if (!isRNG(oldTableValue.bar)) {
|
|
164
161
|
error("The old table's value is not an RNG object.");
|
|
165
162
|
}
|
|
166
163
|
const newSeed = oldTableValue.bar.GetSeed();
|
|
@@ -171,17 +168,17 @@ function oldTableHasRNG() {
|
|
|
171
168
|
function oldTableHasRNGSerialized() {
|
|
172
169
|
const key = "foo";
|
|
173
170
|
const seed = 50;
|
|
174
|
-
const newValue =
|
|
171
|
+
const newValue = newRNG(seed);
|
|
175
172
|
const oldTable = { foo: null };
|
|
176
173
|
const foo = { bar: newValue };
|
|
177
174
|
const newTable = { foo };
|
|
178
|
-
const newTableSerialized =
|
|
179
|
-
|
|
175
|
+
const newTableSerialized = deepCopy(newTable, SerializationType.SERIALIZE, "oldTableHasRNGSerialized");
|
|
176
|
+
merge(oldTable, newTableSerialized, "oldTableHasRNGSerialized");
|
|
180
177
|
const oldTableValue = oldTable.get(key);
|
|
181
178
|
if (oldTableValue === undefined) {
|
|
182
179
|
error(`The old table's key of "${key}" was not filled.`);
|
|
183
180
|
}
|
|
184
|
-
if (!
|
|
181
|
+
if (!isRNG(oldTableValue.bar)) {
|
|
185
182
|
error("The old table's value is not an RNG object (during the serialized test).");
|
|
186
183
|
}
|
|
187
184
|
const newSeed = oldTableValue.bar.GetSeed();
|
|
@@ -193,8 +190,8 @@ function oldTableHasSerializedIsaacAPIClass() {
|
|
|
193
190
|
const x = 50;
|
|
194
191
|
const y = 60;
|
|
195
192
|
const vector = Vector(x, y);
|
|
196
|
-
const vectorSerialized =
|
|
197
|
-
if (!
|
|
193
|
+
const vectorSerialized = serializeVector(vector);
|
|
194
|
+
if (!isSerializedIsaacAPIClass(vectorSerialized)) {
|
|
198
195
|
error('The "isSerializedIsaacAPIClass" function says that a serialized vector is not serialized.');
|
|
199
196
|
}
|
|
200
197
|
}
|
|
@@ -204,7 +201,7 @@ function oldTableHasUpdatedValue() {
|
|
|
204
201
|
const newValue = "baz";
|
|
205
202
|
const oldTable = { foo: oldValue };
|
|
206
203
|
const newTable = { foo: newValue };
|
|
207
|
-
|
|
204
|
+
merge(oldTable, newTable, "oldTableHasUpdatedValue");
|
|
208
205
|
const oldTableValue = oldTable.get(key);
|
|
209
206
|
if (oldTableValue !== newValue) {
|
|
210
207
|
error(`The old table does not have a value of: ${newValue}`);
|
|
@@ -215,7 +212,7 @@ function oldTableHasUpdatedValueFromNull() {
|
|
|
215
212
|
const newValue = "baz";
|
|
216
213
|
const oldTable = { foo: null };
|
|
217
214
|
const newTable = { foo: newValue };
|
|
218
|
-
|
|
215
|
+
merge(oldTable, newTable, "oldTableHasUpdatedValueFromNull");
|
|
219
216
|
const oldTableValue = oldTable.get(key);
|
|
220
217
|
if (oldTableValue !== newValue) {
|
|
221
218
|
error(`The old table does not have a value of: ${newValue}`);
|
|
@@ -229,7 +226,7 @@ function oldTableHasVector() {
|
|
|
229
226
|
const oldTable = { foo: null };
|
|
230
227
|
const foo = { bar: newValue };
|
|
231
228
|
const newTable = { foo };
|
|
232
|
-
|
|
229
|
+
merge(oldTable, newTable, "oldTableHasVector");
|
|
233
230
|
const oldTableValue = oldTable.get(key);
|
|
234
231
|
if (oldTableValue === undefined) {
|
|
235
232
|
error(`The old table's key of "${key}" was not filled.`);
|
|
@@ -240,7 +237,7 @@ function oldTableHasVector() {
|
|
|
240
237
|
if (oldTableValue.bar.Y !== y) {
|
|
241
238
|
error(`The old table's value for "y" does not match: ${y}`);
|
|
242
239
|
}
|
|
243
|
-
if (!
|
|
240
|
+
if (!isVector(oldTableValue.bar)) {
|
|
244
241
|
error("The old table's value is not a Vector object.");
|
|
245
242
|
}
|
|
246
243
|
}
|
|
@@ -252,8 +249,8 @@ function oldTableHasVectorSerialized() {
|
|
|
252
249
|
const oldTable = { foo: null };
|
|
253
250
|
const foo = { bar: newValue };
|
|
254
251
|
const newTable = { foo };
|
|
255
|
-
const newTableSerialized =
|
|
256
|
-
|
|
252
|
+
const newTableSerialized = deepCopy(newTable, SerializationType.SERIALIZE, "oldTableHasVectorSerialized");
|
|
253
|
+
merge(oldTable, newTableSerialized, "oldTableHasVectorSerialized");
|
|
257
254
|
const oldTableValue = oldTable.get(key);
|
|
258
255
|
if (oldTableValue === undefined) {
|
|
259
256
|
error(`The old table's key of "${key}" was not filled.`);
|
|
@@ -264,7 +261,7 @@ function oldTableHasVectorSerialized() {
|
|
|
264
261
|
if (oldTableValue.bar.Y !== y) {
|
|
265
262
|
error(`The old table's value for "y" does not match: ${y}`);
|
|
266
263
|
}
|
|
267
|
-
if (!
|
|
264
|
+
if (!isVector(oldTableValue.bar)) {
|
|
268
265
|
error("The old table's value is not a Vector object (during the serialized test).");
|
|
269
266
|
}
|
|
270
267
|
}
|