isaacscript-common 84.0.0 → 84.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/arrays/cachedEnumValues.js +33 -0
- package/dist/callbackClasses.js +289 -0
- package/dist/callbacks.js +181 -0
- package/dist/classes/DefaultMap.js +171 -0
- package/dist/classes/ModFeature.js +244 -0
- package/dist/classes/ModUpgraded.js +324 -0
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +19 -0
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +29 -0
- package/dist/classes/callbacks/InputActionFilter.js +24 -0
- package/dist/classes/callbacks/InputActionPlayer.js +37 -0
- package/dist/classes/callbacks/PostAmbushFinished.js +40 -0
- package/dist/classes/callbacks/PostAmbushStarted.js +40 -0
- package/dist/classes/callbacks/PostBombExploded.js +24 -0
- package/dist/classes/callbacks/PostBombInitFilter.js +21 -0
- package/dist/classes/callbacks/PostBombInitLate.js +31 -0
- package/dist/classes/callbacks/PostBombRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostBombUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostBoneSwing.js +53 -0
- package/dist/classes/callbacks/PostCollectibleEmpty.js +50 -0
- package/dist/classes/callbacks/PostCursedTeleport.js +119 -0
- package/dist/classes/callbacks/PostCustomRevive.js +17 -0
- package/dist/classes/callbacks/PostDiceRoomActivated.js +50 -0
- package/dist/classes/callbacks/PostDoorRender.js +24 -0
- package/dist/classes/callbacks/PostDoorUpdate.js +24 -0
- package/dist/classes/callbacks/PostEffectInitFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectInitLate.js +31 -0
- package/dist/classes/callbacks/PostEffectRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostEffectStateChanged.js +34 -0
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostEntityKillFilter.js +21 -0
- package/dist/classes/callbacks/PostEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarInitLate.js +31 -0
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +34 -0
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostFirstEsauJr.js +12 -0
- package/dist/classes/callbacks/PostFirstFlip.js +12 -0
- package/dist/classes/callbacks/PostFlip.js +12 -0
- package/dist/classes/callbacks/PostGameEndFilter.js +21 -0
- package/dist/classes/callbacks/PostGameStartedReordered.js +14 -0
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +14 -0
- package/dist/classes/callbacks/PostGreedModeWave.js +35 -0
- package/dist/classes/callbacks/PostGridEntityBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCollision.js +28 -0
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +24 -0
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +18 -0
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +14 -0
- package/dist/classes/callbacks/PostGridEntityInit.js +14 -0
- package/dist/classes/callbacks/PostGridEntityRemove.js +19 -0
- package/dist/classes/callbacks/PostGridEntityRender.js +14 -0
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +14 -0
- package/dist/classes/callbacks/PostGridEntityUpdate.js +14 -0
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +43 -0
- package/dist/classes/callbacks/PostItemDischarge.js +122 -0
- package/dist/classes/callbacks/PostItemPickup.js +14 -0
- package/dist/classes/callbacks/PostKeyboardChanged.js +46 -0
- package/dist/classes/callbacks/PostKnifeInitFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeInitLate.js +31 -0
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserInitLate.js +31 -0
- package/dist/classes/callbacks/PostLaserRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCDeathFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCInitLate.js +31 -0
- package/dist/classes/callbacks/PostNPCRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostNPCStateChanged.js +34 -0
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostNewLevelReordered.js +14 -0
- package/dist/classes/callbacks/PostNewRoomEarly.js +74 -0
- package/dist/classes/callbacks/PostNewRoomReordered.js +14 -0
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPickupChanged.js +14 -0
- package/dist/classes/callbacks/PostPickupCollect.js +38 -0
- package/dist/classes/callbacks/PostPickupInitFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupInitFirst.js +33 -0
- package/dist/classes/callbacks/PostPickupInitLate.js +31 -0
- package/dist/classes/callbacks/PostPickupRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +29 -0
- package/dist/classes/callbacks/PostPickupStateChanged.js +34 -0
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPitRender.js +24 -0
- package/dist/classes/callbacks/PostPitUpdate.js +24 -0
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +47 -0
- package/dist/classes/callbacks/PostPlayerChangeStat.js +79 -0
- package/dist/classes/callbacks/PostPlayerChangeType.js +36 -0
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +14 -0
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +14 -0
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +83 -0
- package/dist/classes/callbacks/PostPlayerInitFirst.js +41 -0
- package/dist/classes/callbacks/PostPlayerInitLate.js +33 -0
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +14 -0
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +14 -0
- package/dist/classes/callbacks/PostPoopRender.js +24 -0
- package/dist/classes/callbacks/PostPoopUpdate.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateRender.js +24 -0
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +24 -0
- package/dist/classes/callbacks/PostProjectileInitFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileInitLate.js +31 -0
- package/dist/classes/callbacks/PostProjectileKill.js +52 -0
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostPurchase.js +90 -0
- package/dist/classes/callbacks/PostRockRender.js +24 -0
- package/dist/classes/callbacks/PostRockUpdate.js +24 -0
- package/dist/classes/callbacks/PostRoomClearChanged.js +46 -0
- package/dist/classes/callbacks/PostSacrifice.js +36 -0
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +14 -0
- package/dist/classes/callbacks/PostSlotCollision.js +25 -0
- package/dist/classes/callbacks/PostSlotDestroyed.js +14 -0
- package/dist/classes/callbacks/PostSlotInit.js +14 -0
- package/dist/classes/callbacks/PostSlotRender.js +14 -0
- package/dist/classes/callbacks/PostSlotUpdate.js +14 -0
- package/dist/classes/callbacks/PostSpikesRender.js +24 -0
- package/dist/classes/callbacks/PostSpikesUpdate.js +24 -0
- package/dist/classes/callbacks/PostTNTRender.js +24 -0
- package/dist/classes/callbacks/PostTNTUpdate.js +24 -0
- package/dist/classes/callbacks/PostTearInitFilter.js +21 -0
- package/dist/classes/callbacks/PostTearInitLate.js +31 -0
- package/dist/classes/callbacks/PostTearInitVeryLate.js +35 -0
- package/dist/classes/callbacks/PostTearKill.js +52 -0
- package/dist/classes/callbacks/PostTearRenderFilter.js +21 -0
- package/dist/classes/callbacks/PostTearUpdateFilter.js +21 -0
- package/dist/classes/callbacks/PostTransformation.js +47 -0
- package/dist/classes/callbacks/PostTrinketBreak.js +70 -0
- package/dist/classes/callbacks/PostUsePillFilter.js +76 -0
- package/dist/classes/callbacks/PreBerserkDeath.js +41 -0
- package/dist/classes/callbacks/PreBombCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreCustomRevive.js +14 -0
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +24 -0
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreGetPedestal.js +46 -0
- package/dist/classes/callbacks/PreItemPickup.js +14 -0
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +19 -0
- package/dist/classes/callbacks/PreNewLevel.js +51 -0
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +19 -0
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +26 -0
- package/dist/classes/callbacks/PreTearCollisionFilter.js +19 -0
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +359 -0
- package/dist/classes/features/callbackLogic/CustomRevive.js +170 -0
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +70 -0
- package/dist/classes/features/callbackLogic/FlipDetection.js +61 -0
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +220 -0
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +62 -0
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +35 -0
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +147 -0
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +68 -0
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +43 -0
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +193 -0
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +109 -0
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +95 -0
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +48 -0
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +52 -0
- package/dist/classes/features/other/CharacterHealthConversion.js +112 -0
- package/dist/classes/features/other/CharacterStats.js +68 -0
- package/dist/classes/features/other/CollectibleItemPoolType.js +75 -0
- package/dist/classes/features/other/CustomHotkeys.js +144 -0
- package/dist/classes/features/other/CustomItemPools.js +128 -0
- package/dist/classes/features/other/CustomPickups.js +118 -0
- package/dist/classes/features/other/CustomStages.js +471 -0
- package/dist/classes/features/other/CustomTrapdoors.js +596 -0
- package/dist/classes/features/other/DebugDisplay.js +699 -0
- package/dist/classes/features/other/DeployJSONRoom.js +301 -0
- package/dist/classes/features/other/DisableAllSound.js +90 -0
- package/dist/classes/features/other/DisableInputs.js +249 -0
- package/dist/classes/features/other/EdenStartingStatsHealth.js +197 -0
- package/dist/classes/features/other/ExtraConsoleCommands.js +292 -0
- package/dist/classes/features/other/FadeInRemover.js +67 -0
- package/dist/classes/features/other/FastReset.js +88 -0
- package/dist/classes/features/other/FlyingDetection.js +64 -0
- package/dist/classes/features/other/ForgottenSwitch.js +43 -0
- package/dist/classes/features/other/ItemPoolDetection.js +187 -0
- package/dist/classes/features/other/ModdedElementDetection.js +399 -0
- package/dist/classes/features/other/ModdedElementSets.js +1251 -0
- package/dist/classes/features/other/NoSirenSteal.js +88 -0
- package/dist/classes/features/other/Pause.js +197 -0
- package/dist/classes/features/other/PersistentEntities.js +168 -0
- package/dist/classes/features/other/PickupIndexCreation.js +229 -0
- package/dist/classes/features/other/PlayerCollectibleTracking.js +102 -0
- package/dist/classes/features/other/PonyDetection.js +86 -0
- package/dist/classes/features/other/PressInput.js +71 -0
- package/dist/classes/features/other/PreventChildEntities.js +60 -0
- package/dist/classes/features/other/PreventGridEntityRespawn.js +159 -0
- package/dist/classes/features/other/RerunDetection.js +69 -0
- package/dist/classes/features/other/RoomClearFrame.js +94 -0
- package/dist/classes/features/other/RoomHistory.js +196 -0
- package/dist/classes/features/other/RunInNFrames.js +323 -0
- package/dist/classes/features/other/RunNextRoom.js +53 -0
- package/dist/classes/features/other/RunNextRun.js +60 -0
- package/dist/classes/features/other/SaveDataManager.js +383 -0
- package/dist/classes/features/other/SpawnRockAltRewards.js +469 -0
- package/dist/classes/features/other/StageHistory.js +244 -0
- package/dist/classes/features/other/StartAmbush.js +62 -0
- package/dist/classes/features/other/TaintedLazarusPlayers.js +115 -0
- package/dist/classes/features/other/UnlockAchievementsDetection.js +60 -0
- package/dist/classes/features/other/customStages/backdrop.js +195 -0
- package/dist/classes/features/other/customStages/constants.js +19 -0
- package/dist/classes/features/other/customStages/gridEntities.js +177 -0
- package/dist/classes/features/other/customStages/shadows.js +67 -0
- package/dist/classes/features/other/customStages/streakText.js +222 -0
- package/dist/classes/features/other/customStages/utils.js +65 -0
- package/dist/classes/features/other/customStages/v.js +27 -0
- package/dist/classes/features/other/customStages/versusScreen.js +227 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +25 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +23 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +22 -0
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +23 -0
- package/dist/classes/features/other/debugDisplay/utils.js +13 -0
- package/dist/classes/features/other/extraConsoleCommands/commands.js +1598 -0
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +135 -0
- package/dist/classes/features/other/extraConsoleCommands/v.js +30 -0
- package/dist/classes/features/other/saveDataManager/constants.js +4 -0
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +106 -0
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +69 -0
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +69 -0
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +46 -0
- package/dist/classes/private/CustomCallback.js +59 -0
- package/dist/classes/private/Feature.js +39 -0
- package/dist/core/cachedClasses.js +61 -0
- package/dist/core/constants.js +289 -0
- package/dist/core/constantsFirstLast.js +98 -0
- package/dist/core/constantsVanilla.js +131 -0
- package/dist/core/upgradeMod.js +71 -0
- package/dist/customStageMetadata.json +1 -0
- package/dist/data/itempools.json +16625 -0
- package/dist/decorators.js +21 -0
- package/dist/enums/AmbushType.js +9 -0
- package/dist/enums/CornerType.js +11 -0
- package/dist/enums/HealthType.js +20 -0
- package/dist/enums/ISCFeature.js +65 -0
- package/dist/enums/LadderSubTypeCustom.js +20 -0
- package/dist/enums/ModCallbackCustom.js +2477 -0
- package/dist/enums/MysteriousPaperEffect.js +16 -0
- package/dist/enums/PlayerStat.js +37 -0
- package/dist/enums/PocketItemType.js +13 -0
- package/dist/enums/RockAltType.js +23 -0
- package/dist/enums/SaveDataKey.js +14 -0
- package/dist/enums/SerializationType.js +10 -0
- package/dist/enums/SlotDestructionType.js +22 -0
- package/dist/enums/private/GridEntityTypeCustom.js +10 -0
- package/dist/enums/private/SerializationBrand.js +42 -0
- package/dist/enums/private/StageTravelState.js +13 -0
- package/dist/enums/private/TrapdoorAnimation.js +9 -0
- package/dist/enums/private/UIStreakAnimation.js +10 -0
- package/dist/features.js +150 -0
- package/dist/functions/ambush.js +26 -0
- package/dist/functions/array.js +586 -0
- package/dist/functions/arrayLua.js +81 -0
- package/dist/functions/benchmark.js +36 -0
- package/dist/functions/bitSet128.js +64 -0
- package/dist/functions/bitwise.js +82 -0
- package/dist/functions/bombs.js +14 -0
- package/dist/functions/bosses.js +238 -0
- package/dist/functions/cards.js +164 -0
- package/dist/functions/challenges.js +117 -0
- package/dist/functions/characters.js +182 -0
- package/dist/functions/charge.js +251 -0
- package/dist/functions/chargeBar.js +54 -0
- package/dist/functions/collectibleTag.js +24 -0
- package/dist/functions/collectibles.js +581 -0
- package/dist/functions/color.js +88 -0
- package/dist/functions/console.js +18 -0
- package/dist/functions/curses.js +37 -0
- package/dist/functions/debugFunctions.js +108 -0
- package/dist/functions/decorators.js +113 -0
- package/dist/functions/deepCopy.js +406 -0
- package/dist/functions/deepCopyTests.js +361 -0
- package/dist/functions/dimensions.js +30 -0
- package/dist/functions/direction.js +78 -0
- package/dist/functions/doors.js +524 -0
- package/dist/functions/easing.js +327 -0
- package/dist/functions/effects.js +14 -0
- package/dist/functions/emptyRoom.js +79 -0
- package/dist/functions/entities.js +529 -0
- package/dist/functions/entitiesSpecific.js +582 -0
- package/dist/functions/entityTypes.js +9 -0
- package/dist/functions/enums.js +244 -0
- package/dist/functions/external.js +59 -0
- package/dist/functions/familiars.js +136 -0
- package/dist/functions/flag.js +146 -0
- package/dist/functions/frames.js +166 -0
- package/dist/functions/globals.js +291 -0
- package/dist/functions/gridEntities.js +990 -0
- package/dist/functions/gridEntitiesSpecific.js +456 -0
- package/dist/functions/gridIndex.js +35 -0
- package/dist/functions/hash.js +75 -0
- package/dist/functions/hex.js +57 -0
- package/dist/functions/input.js +185 -0
- package/dist/functions/isaacAPIClass.js +157 -0
- package/dist/functions/itemPool.js +118 -0
- package/dist/functions/jsonHelpers.js +73 -0
- package/dist/functions/jsonRoom.js +184 -0
- package/dist/functions/kColor.js +89 -0
- package/dist/functions/language.js +16 -0
- package/dist/functions/level.js +66 -0
- package/dist/functions/levelGrid.js +497 -0
- package/dist/functions/log.js +86 -0
- package/dist/functions/logEntities.js +308 -0
- package/dist/functions/logMisc.js +510 -0
- package/dist/functions/map.js +121 -0
- package/dist/functions/math.js +149 -0
- package/dist/functions/merge.js +159 -0
- package/dist/functions/mergeTests.js +313 -0
- package/dist/functions/minimap.js +204 -0
- package/dist/functions/modFeatures.js +39 -0
- package/dist/functions/newArray.js +30 -0
- package/dist/functions/nextStage.js +169 -0
- package/dist/functions/npcDataStructures.js +146 -0
- package/dist/functions/npcs.js +132 -0
- package/dist/functions/pickupVariants.js +63 -0
- package/dist/functions/pickups.js +168 -0
- package/dist/functions/pickupsSpecific.js +376 -0
- package/dist/functions/pills.js +200 -0
- package/dist/functions/playerCenter.js +53 -0
- package/dist/functions/playerCollectibles.js +300 -0
- package/dist/functions/playerDataStructures.js +145 -0
- package/dist/functions/playerEffects.js +63 -0
- package/dist/functions/playerHealth.js +604 -0
- package/dist/functions/playerIndex.js +186 -0
- package/dist/functions/playerTrinkets.js +149 -0
- package/dist/functions/players.js +471 -0
- package/dist/functions/pocketItems.js +165 -0
- package/dist/functions/positionVelocity.js +158 -0
- package/dist/functions/pressurePlate.js +26 -0
- package/dist/functions/projectiles.js +57 -0
- package/dist/functions/random.js +90 -0
- package/dist/functions/readOnly.js +33 -0
- package/dist/functions/render.js +36 -0
- package/dist/functions/revive.js +151 -0
- package/dist/functions/rng.js +140 -0
- package/dist/functions/rockAlt.js +50 -0
- package/dist/functions/roomData.js +155 -0
- package/dist/functions/roomGrid.js +97 -0
- package/dist/functions/roomShape.js +143 -0
- package/dist/functions/roomShapeWalls.js +187 -0
- package/dist/functions/roomTransition.js +43 -0
- package/dist/functions/rooms.js +782 -0
- package/dist/functions/run.js +121 -0
- package/dist/functions/seeds.js +22 -0
- package/dist/functions/serialization.js +98 -0
- package/dist/functions/set.js +215 -0
- package/dist/functions/slots.js +41 -0
- package/dist/functions/sort.js +158 -0
- package/dist/functions/sound.js +45 -0
- package/dist/functions/spawnCollectible.js +112 -0
- package/dist/functions/sprites.js +130 -0
- package/dist/functions/stage.js +540 -0
- package/dist/functions/stats.js +104 -0
- package/dist/functions/storyBosses.js +63 -0
- package/dist/functions/string.js +194 -0
- package/dist/functions/table.js +162 -0
- package/dist/functions/tears.js +128 -0
- package/dist/functions/transformations.js +89 -0
- package/dist/functions/trinketGive.js +145 -0
- package/dist/functions/trinkets.js +213 -0
- package/dist/functions/tstlClass.js +97 -0
- package/dist/functions/types.js +225 -0
- package/dist/functions/ui.js +148 -0
- package/dist/functions/utils.d.ts +4 -1
- package/dist/functions/utils.d.ts.map +1 -1
- package/dist/functions/utils.js +195 -0
- package/dist/functions/utils.lua +6 -2
- package/dist/functions/vector.js +150 -0
- package/dist/functions/versusScreen.js +58 -0
- package/dist/functions/weighted.js +57 -0
- package/dist/index.js +219 -0
- package/dist/index.rollup.d.ts +4 -1
- package/dist/indexLua.js +220 -0
- package/dist/interfaces/ChargeBarSprites.js +2 -0
- package/dist/interfaces/Corner.js +2 -0
- package/dist/interfaces/CustomStageTSConfig.js +2 -0
- package/dist/interfaces/GridEntityCustomData.js +2 -0
- package/dist/interfaces/JSONRoomsFile.js +2 -0
- package/dist/interfaces/PlayerHealth.js +2 -0
- package/dist/interfaces/PlayerStats.js +4 -0
- package/dist/interfaces/PocketItemDescription.js +2 -0
- package/dist/interfaces/RoomDescription.js +2 -0
- package/dist/interfaces/SaveData.js +98 -0
- package/dist/interfaces/StageHistoryEntry.js +2 -0
- package/dist/interfaces/TSTLClassMetatable.js +2 -0
- package/dist/interfaces/TrinketSituation.js +2 -0
- package/dist/interfaces/private/AddCallbackParametersCustom.js +4 -0
- package/dist/interfaces/private/CustomStage.js +2 -0
- package/dist/interfaces/private/CustomTrapdoorDescription.js +2 -0
- package/dist/interfaces/private/ModUpgradedInterface.js +2 -0
- package/dist/isaacscript-common.lua +7 -3
- package/dist/maps/PHDPillConversionsMap.js +23 -0
- package/dist/maps/cardNameToTypeMap.js +211 -0
- package/dist/maps/characterNameToTypeMap.js +91 -0
- package/dist/maps/collectibleNameToTypeMap.js +19 -0
- package/dist/maps/defaultPlayerStatMap.js +17 -0
- package/dist/maps/entityTypeVariantToBossIDMap.js +11 -0
- package/dist/maps/falsePHDPillConversionsMap.js +37 -0
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +32 -0
- package/dist/maps/gridEntityXMLMap.js +133 -0
- package/dist/maps/itemPoolTypeToItemPoolName.js +38 -0
- package/dist/maps/keyboardToStringMap.js +71 -0
- package/dist/maps/pillNameToEffectMap.js +91 -0
- package/dist/maps/roomNameToTypeMap.js +43 -0
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +17 -0
- package/dist/maps/transformationNameToPlayerFormMap.js +35 -0
- package/dist/maps/trinketNameToTypeMap.js +19 -0
- package/dist/objects/LRoomShapeToRectangles.js +43 -0
- package/dist/objects/backdropTypeToRockAltType.js +68 -0
- package/dist/objects/batteryNames.js +13 -0
- package/dist/objects/bombNames.js +17 -0
- package/dist/objects/bossIDToEntityTypeVariant.js +228 -0
- package/dist/objects/bossNamePNGFileNames.js +120 -0
- package/dist/objects/bossNames.js +119 -0
- package/dist/objects/bossPortraitPNGFileNames.js +123 -0
- package/dist/objects/cardDescriptions.js +106 -0
- package/dist/objects/cardNames.js +106 -0
- package/dist/objects/challengeBosses.js +60 -0
- package/dist/objects/challengeCharacters.js +58 -0
- package/dist/objects/challengeCollectibleTypes.js +255 -0
- package/dist/objects/challengeNames.js +54 -0
- package/dist/objects/challengeTrinketType.js +58 -0
- package/dist/objects/characterDamageMultipliers.js +49 -0
- package/dist/objects/characterNames.js +48 -0
- package/dist/objects/characterSpritePNGFileNames.js +50 -0
- package/dist/objects/characterStartingCollectibleTypes.js +105 -0
- package/dist/objects/characterStartingTrinketTypes.js +90 -0
- package/dist/objects/chestNames.js +20 -0
- package/dist/objects/coinNames.js +16 -0
- package/dist/objects/coinSubTypeToValue.js +15 -0
- package/dist/objects/collectibleDescriptions.js +742 -0
- package/dist/objects/collectibleNames.js +745 -0
- package/dist/objects/colors.js +26 -0
- package/dist/objects/directionNames.js +11 -0
- package/dist/objects/directionToDegrees.js +11 -0
- package/dist/objects/directionToMoveAction.js +11 -0
- package/dist/objects/directionToShootAction.js +11 -0
- package/dist/objects/directionToVector.js +13 -0
- package/dist/objects/doorSlotFlagToDoorSlot.js +15 -0
- package/dist/objects/doorSlotToDirection.js +15 -0
- package/dist/objects/doorSlotToDoorSlotFlag.js +15 -0
- package/dist/objects/gridEntityTypeToANM2Name.js +37 -0
- package/dist/objects/heartNames.js +21 -0
- package/dist/objects/isaacAPIClassTypeToBrand.js +12 -0
- package/dist/objects/isaacAPIClassTypeToFunctions.js +46 -0
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +57 -0
- package/dist/objects/kColors.js +27 -0
- package/dist/objects/keyNames.js +13 -0
- package/dist/objects/languageNames.js +13 -0
- package/dist/objects/oppositeDoorSlots.js +15 -0
- package/dist/objects/pillEffectClasses.js +57 -0
- package/dist/objects/pillEffectNames.js +57 -0
- package/dist/objects/pillEffectTypeToPillEffects.js +23 -0
- package/dist/objects/pillEffectTypes.js +57 -0
- package/dist/objects/playerNamePNGFileNames.js +57 -0
- package/dist/objects/playerPortraitPNGFileNames.js +54 -0
- package/dist/objects/roomShapeBounds.js +48 -0
- package/dist/objects/roomShapeCorners.js +330 -0
- package/dist/objects/roomShapeLayoutSizes.js +41 -0
- package/dist/objects/roomShapeToBottomRightPosition.js +25 -0
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +111 -0
- package/dist/objects/roomShapeToDoorSlots.js +72 -0
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +118 -0
- package/dist/objects/roomShapeToGridWidth.js +20 -0
- package/dist/objects/roomShapeToTopLeftPosition.js +26 -0
- package/dist/objects/roomShapeVolumes.js +32 -0
- package/dist/objects/roomTypeNames.js +35 -0
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +35 -0
- package/dist/objects/sackNames.js +11 -0
- package/dist/objects/slotNames.js +26 -0
- package/dist/objects/stageIDNames.js +43 -0
- package/dist/objects/stageToMusic.js +91 -0
- package/dist/objects/stageToStageID.js +117 -0
- package/dist/objects/stageTypeSuffixes.js +14 -0
- package/dist/objects/transformationNames.js +20 -0
- package/dist/objects/trinketDescriptions.js +199 -0
- package/dist/objects/trinketNames.js +202 -0
- package/dist/objects/versusScreenBackgroundColors.js +46 -0
- package/dist/objects/versusScreenDirtSpotColors.js +46 -0
- package/dist/patchErrorFunctions.js +65 -0
- package/dist/serialization.js +21 -0
- package/dist/sets/LRoomShapesSet.js +11 -0
- package/dist/sets/bigRoomShapesSet.js +14 -0
- package/dist/sets/bossSets.js +465 -0
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +18 -0
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +9 -0
- package/dist/sets/charactersWithFreeDevilDealsSet.js +6 -0
- package/dist/sets/charactersWithNoRedHeartsSet.js +19 -0
- package/dist/sets/charactersWithNoSoulHeartsSet.js +16 -0
- package/dist/sets/consoleCommandsSet.js +64 -0
- package/dist/sets/entitiesWithArmorSet.js +59 -0
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +15 -0
- package/dist/sets/itemConfigCardTypesForCards.js +14 -0
- package/dist/sets/lostStyleCharactersSet.js +16 -0
- package/dist/sets/mineShaftRoomSubTypesSet.js +12 -0
- package/dist/sets/narrowRoomShapesSet.js +11 -0
- package/dist/sets/poopGridEntityXMLTypesSet.js +16 -0
- package/dist/sets/redHeartSubTypesSet.js +10 -0
- package/dist/sets/repentanceBossIDsSet.js +30 -0
- package/dist/sets/sinEntityTypesSet.js +14 -0
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +15 -0
- package/dist/shaderCrashFix.js +24 -0
- package/dist/shouldFire.js +226 -0
- package/dist/types/AddSubtract.js +2 -0
- package/dist/types/AllButFirst.js +2 -0
- package/dist/types/AllButLast.js +2 -0
- package/dist/types/AnyClass.js +2 -0
- package/dist/types/AnyEntity.js +2 -0
- package/dist/types/AnyFunction.js +2 -0
- package/dist/types/AnyGridEntity.js +2 -0
- package/dist/types/CompositionTypeSatisfiesEnum.js +11 -0
- package/dist/types/ConversionHeartSubType.js +2 -0
- package/dist/types/Decrement.js +2 -0
- package/dist/types/ERange.js +2 -0
- package/dist/types/EntityID.js +2 -0
- package/dist/types/FunctionTuple.js +2 -0
- package/dist/types/GridEntityID.js +2 -0
- package/dist/types/HasFunction.js +2 -0
- package/dist/types/IRange.js +2 -0
- package/dist/types/Immutable.js +2 -0
- package/dist/types/Increment.js +2 -0
- package/dist/types/LowercaseKeys.js +2 -0
- package/dist/types/NaturalNumbersLessThan.js +2 -0
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +2 -0
- package/dist/types/PickingUpItem.js +44 -0
- package/dist/types/PickupIndex.js +2 -0
- package/dist/types/PlayerIndex.js +2 -0
- package/dist/types/PossibleStatType.js +2 -0
- package/dist/types/PublicInterface.js +2 -0
- package/dist/types/ReadonlyMap.js +6 -0
- package/dist/types/ReadonlyRecord.js +2 -0
- package/dist/types/ReadonlySet.js +6 -0
- package/dist/types/StartsWithLowercase.js +2 -0
- package/dist/types/StartsWithUppercase.js +2 -0
- package/dist/types/TSTLClass.js +2 -0
- package/dist/types/Tuple.js +2 -0
- package/dist/types/TupleKeys.js +2 -0
- package/dist/types/TupleToIntersection.js +2 -0
- package/dist/types/TupleToUnion.js +2 -0
- package/dist/types/TupleWithLengthBetween.js +22 -0
- package/dist/types/TupleWithMaxLength.js +27 -0
- package/dist/types/UnionToIntersection.js +2 -0
- package/dist/types/UppercaseKeys.js +2 -0
- package/dist/types/WeightedArray.js +2 -0
- package/dist/types/WidenLiteral.js +2 -0
- package/dist/types/Writable.js +2 -0
- package/dist/types/private/CallbackTuple.js +2 -0
- package/dist/types/private/ModUpgradedWithFeatures.js +2 -0
- package/package.json +1 -1
- package/src/functions/utils.ts +6 -2
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isStoryBossID = exports.isStoryBoss = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
6
|
+
const STORY_BOSS_IDS = [
|
|
7
|
+
isaac_typescript_definitions_1.BossID.MOM,
|
|
8
|
+
isaac_typescript_definitions_1.BossID.MOMS_HEART,
|
|
9
|
+
isaac_typescript_definitions_1.BossID.SATAN,
|
|
10
|
+
isaac_typescript_definitions_1.BossID.IT_LIVES,
|
|
11
|
+
isaac_typescript_definitions_1.BossID.ISAAC,
|
|
12
|
+
isaac_typescript_definitions_1.BossID.BLUE_BABY,
|
|
13
|
+
isaac_typescript_definitions_1.BossID.LAMB,
|
|
14
|
+
isaac_typescript_definitions_1.BossID.MEGA_SATAN,
|
|
15
|
+
isaac_typescript_definitions_1.BossID.ULTRA_GREED,
|
|
16
|
+
isaac_typescript_definitions_1.BossID.HUSH,
|
|
17
|
+
isaac_typescript_definitions_1.BossID.DELIRIUM,
|
|
18
|
+
isaac_typescript_definitions_1.BossID.ULTRA_GREEDIER,
|
|
19
|
+
isaac_typescript_definitions_1.BossID.MOTHER,
|
|
20
|
+
isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOM,
|
|
21
|
+
isaac_typescript_definitions_1.BossID.MAUSOLEUM_MOMS_HEART,
|
|
22
|
+
isaac_typescript_definitions_1.BossID.DOGMA,
|
|
23
|
+
isaac_typescript_definitions_1.BossID.BEAST, // 100
|
|
24
|
+
];
|
|
25
|
+
const STORY_BOSS_ENTITY_TYPES_SET = new ReadonlySet_1.ReadonlySet([
|
|
26
|
+
isaac_typescript_definitions_1.EntityType.MOM,
|
|
27
|
+
isaac_typescript_definitions_1.EntityType.MOMS_HEART,
|
|
28
|
+
isaac_typescript_definitions_1.EntityType.SATAN,
|
|
29
|
+
// - It Lives is a variant of Mom's Heart.
|
|
30
|
+
isaac_typescript_definitions_1.EntityType.ISAAC,
|
|
31
|
+
// - Blue Baby is a variant of Isaac.
|
|
32
|
+
isaac_typescript_definitions_1.EntityType.LAMB,
|
|
33
|
+
isaac_typescript_definitions_1.EntityType.MEGA_SATAN,
|
|
34
|
+
isaac_typescript_definitions_1.EntityType.MEGA_SATAN_2,
|
|
35
|
+
isaac_typescript_definitions_1.EntityType.ULTRA_GREED,
|
|
36
|
+
isaac_typescript_definitions_1.EntityType.HUSH,
|
|
37
|
+
isaac_typescript_definitions_1.EntityType.DELIRIUM,
|
|
38
|
+
// - Ultra Greedier is a variant of Ultra Greed.
|
|
39
|
+
isaac_typescript_definitions_1.EntityType.MOTHER,
|
|
40
|
+
// - Mausoleum Mom is a sub-type of Mom.
|
|
41
|
+
// - Mausoleum Mom's Heart is a sub-type of Mom's Heart.
|
|
42
|
+
isaac_typescript_definitions_1.EntityType.DOGMA,
|
|
43
|
+
isaac_typescript_definitions_1.EntityType.BEAST, // 951
|
|
44
|
+
]);
|
|
45
|
+
const STORY_BOSS_IDS_SET = new ReadonlySet_1.ReadonlySet(STORY_BOSS_IDS);
|
|
46
|
+
/**
|
|
47
|
+
* Helper function to determine if the specified entity type is an end-game story boss, like Isaac,
|
|
48
|
+
* Blue Baby, Mega Satan, The Beast, and so on. This is useful because certain effects should only
|
|
49
|
+
* apply to non-story bosses, like Vanishing Twin.
|
|
50
|
+
*/
|
|
51
|
+
function isStoryBoss(entityType) {
|
|
52
|
+
return STORY_BOSS_ENTITY_TYPES_SET.has(entityType);
|
|
53
|
+
}
|
|
54
|
+
exports.isStoryBoss = isStoryBoss;
|
|
55
|
+
/**
|
|
56
|
+
* Helper function to determine if the specified boss ID is an end-game story boss, like Isaac, Blue
|
|
57
|
+
* Baby, Mega Satan, The Beast, and so on. This is useful because certain effects should only apply
|
|
58
|
+
* to non-story bosses, like Vanishing Twin.
|
|
59
|
+
*/
|
|
60
|
+
function isStoryBossID(bossID) {
|
|
61
|
+
return STORY_BOSS_IDS_SET.has(bossID);
|
|
62
|
+
}
|
|
63
|
+
exports.isStoryBossID = isStoryBossID;
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.uncapitalizeFirstLetter = exports.trimSuffix = exports.trimPrefix = exports.removeSubstring = exports.removeNonAlphanumericCharacters = exports.removeCharactersBefore = exports.removeAllCharacters = exports.parseSemanticVersion = exports.getPartialMatch = exports.getObjectPartialMatch = exports.getMapPartialMatch = exports.capitalizeFirstLetter = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
function capitalizeFirstLetter(string) {
|
|
7
|
+
if (string === "") {
|
|
8
|
+
return string;
|
|
9
|
+
}
|
|
10
|
+
const firstCharacter = string.charAt(0);
|
|
11
|
+
const capitalizedFirstLetter = firstCharacter.toUpperCase();
|
|
12
|
+
const restOfString = string.slice(1);
|
|
13
|
+
return `${capitalizedFirstLetter}${restOfString}`;
|
|
14
|
+
}
|
|
15
|
+
exports.capitalizeFirstLetter = capitalizeFirstLetter;
|
|
16
|
+
/**
|
|
17
|
+
* Helper function to get the closest key from a map based on partial search text. (It only searches
|
|
18
|
+
* through the keys, not the values.)
|
|
19
|
+
*
|
|
20
|
+
* Note that:
|
|
21
|
+
* - Spaces are automatically removed from the search text.
|
|
22
|
+
* - Both the search text and the strings to search through are converted to lowercase before
|
|
23
|
+
* attempting to find a match.
|
|
24
|
+
*
|
|
25
|
+
* For example:
|
|
26
|
+
*
|
|
27
|
+
* ```ts
|
|
28
|
+
* const map = new <string, number>Map([
|
|
29
|
+
* ["foo", 123],
|
|
30
|
+
* ["bar", 456],
|
|
31
|
+
* ]);
|
|
32
|
+
* const searchText = "f";
|
|
33
|
+
* const match = getMapPartialMatch(map, searchText); // match is now equal to ["foo", 123]
|
|
34
|
+
* ```
|
|
35
|
+
*
|
|
36
|
+
* @returns If a match was found, returns a tuple of the map key and value. If a match was not
|
|
37
|
+
* found, returns undefined.
|
|
38
|
+
*/
|
|
39
|
+
function getMapPartialMatch(searchText, map) {
|
|
40
|
+
const keys = [...map.keys()];
|
|
41
|
+
const matchingKey = getPartialMatch(searchText, keys);
|
|
42
|
+
if (matchingKey === undefined) {
|
|
43
|
+
return undefined;
|
|
44
|
+
}
|
|
45
|
+
const value = map.get(matchingKey);
|
|
46
|
+
(0, utils_1.assertDefined)(value, `Failed to get the map value corresponding to the partial match of: ${matchingKey}`);
|
|
47
|
+
return [matchingKey, value];
|
|
48
|
+
}
|
|
49
|
+
exports.getMapPartialMatch = getMapPartialMatch;
|
|
50
|
+
/**
|
|
51
|
+
* Helper function to get the closest key from an object based on partial search text. (It only
|
|
52
|
+
* searches through the keys, not the values.)
|
|
53
|
+
*
|
|
54
|
+
* Note that:
|
|
55
|
+
* - Spaces are automatically removed from the search text.
|
|
56
|
+
* - Both the search text and the strings to search through are converted to lowercase before
|
|
57
|
+
* attempting to find a match.
|
|
58
|
+
*
|
|
59
|
+
* For example:
|
|
60
|
+
*
|
|
61
|
+
* ```ts
|
|
62
|
+
* const object = {
|
|
63
|
+
* foo: 123,
|
|
64
|
+
* bar: 456,
|
|
65
|
+
* };
|
|
66
|
+
* const searchText = "f";
|
|
67
|
+
* const match = getObjectPartialMatch(object, searchText); // match is now equal to ["foo", 123]
|
|
68
|
+
* ```
|
|
69
|
+
*
|
|
70
|
+
* @returns If a match was found, returns a tuple of the map key and value. If a match was not
|
|
71
|
+
* found, returns undefined.
|
|
72
|
+
*/
|
|
73
|
+
function getObjectPartialMatch(searchText, object) {
|
|
74
|
+
const keys = Object.keys(object);
|
|
75
|
+
const matchingKey = getPartialMatch(searchText, keys);
|
|
76
|
+
if (matchingKey === undefined) {
|
|
77
|
+
return undefined;
|
|
78
|
+
}
|
|
79
|
+
const value = object[matchingKey];
|
|
80
|
+
(0, utils_1.assertDefined)(value, `Failed to get the object value corresponding to the partial match of: ${matchingKey}`);
|
|
81
|
+
return [matchingKey, value];
|
|
82
|
+
}
|
|
83
|
+
exports.getObjectPartialMatch = getObjectPartialMatch;
|
|
84
|
+
/**
|
|
85
|
+
* Helper function to get the closest value from an array of strings based on partial search text.
|
|
86
|
+
*
|
|
87
|
+
* Note that:
|
|
88
|
+
* - Spaces are automatically removed from the search text.
|
|
89
|
+
* - Both the search text and the strings to search through are converted to lowercase before
|
|
90
|
+
* attempting to find a match.
|
|
91
|
+
*
|
|
92
|
+
* For example:
|
|
93
|
+
*
|
|
94
|
+
* ```ts
|
|
95
|
+
* const array = ["foo", "bar"];
|
|
96
|
+
* const searchText = "f";
|
|
97
|
+
* const match = getPartialMatch(array, searchText); // match is now equal to "foo"
|
|
98
|
+
*
|
|
99
|
+
* @returns If a match was found, returns the array element. If a match was not
|
|
100
|
+
* found, returns undefined.
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
function getPartialMatch(searchText, array) {
|
|
104
|
+
const sortedArray = array.toSorted();
|
|
105
|
+
searchText = searchText.toLowerCase();
|
|
106
|
+
searchText = searchText.replaceAll(" ", "");
|
|
107
|
+
const matchingElements = sortedArray.filter((element) => element.toLowerCase().startsWith(searchText));
|
|
108
|
+
matchingElements.sort();
|
|
109
|
+
return matchingElements[0];
|
|
110
|
+
}
|
|
111
|
+
exports.getPartialMatch = getPartialMatch;
|
|
112
|
+
/**
|
|
113
|
+
* Helper function to parse a Semantic Versioning string into its individual constituents. Returns
|
|
114
|
+
* undefined if the submitted string was not a proper Semantic Version string.
|
|
115
|
+
*
|
|
116
|
+
* https://semver.org/
|
|
117
|
+
*/
|
|
118
|
+
function parseSemanticVersion(versionString) {
|
|
119
|
+
const [majorVersionString, minorVersionString, patchVersionString] = string.match(versionString, "(%d+).(%d+).(%d+)");
|
|
120
|
+
if (majorVersionString === undefined ||
|
|
121
|
+
minorVersionString === undefined ||
|
|
122
|
+
patchVersionString === undefined) {
|
|
123
|
+
return undefined;
|
|
124
|
+
}
|
|
125
|
+
const majorVersion = (0, types_1.parseIntSafe)(majorVersionString);
|
|
126
|
+
const minorVersion = (0, types_1.parseIntSafe)(minorVersionString);
|
|
127
|
+
const patchVersion = (0, types_1.parseIntSafe)(patchVersionString);
|
|
128
|
+
if (majorVersion === undefined ||
|
|
129
|
+
minorVersion === undefined ||
|
|
130
|
+
patchVersion === undefined) {
|
|
131
|
+
return undefined;
|
|
132
|
+
}
|
|
133
|
+
return { majorVersion, minorVersion, patchVersion };
|
|
134
|
+
}
|
|
135
|
+
exports.parseSemanticVersion = parseSemanticVersion;
|
|
136
|
+
function removeAllCharacters(string, character) {
|
|
137
|
+
return string.replaceAll(character, "");
|
|
138
|
+
}
|
|
139
|
+
exports.removeAllCharacters = removeAllCharacters;
|
|
140
|
+
/**
|
|
141
|
+
* Helper function to remove all of the characters in a string before a given substring. Returns the
|
|
142
|
+
* modified string.
|
|
143
|
+
*/
|
|
144
|
+
function removeCharactersBefore(string, substring) {
|
|
145
|
+
const index = string.indexOf(substring);
|
|
146
|
+
return string.slice(index);
|
|
147
|
+
}
|
|
148
|
+
exports.removeCharactersBefore = removeCharactersBefore;
|
|
149
|
+
/** Helper function to remove all characters from a string that are not letters or numbers. */
|
|
150
|
+
function removeNonAlphanumericCharacters(str) {
|
|
151
|
+
const [returnValue, _] = string.gsub(str, "%W", "");
|
|
152
|
+
return returnValue;
|
|
153
|
+
}
|
|
154
|
+
exports.removeNonAlphanumericCharacters = removeNonAlphanumericCharacters;
|
|
155
|
+
/**
|
|
156
|
+
* Helper function to remove one or more substrings from a string, if they exist. Returns the
|
|
157
|
+
* modified string.
|
|
158
|
+
*
|
|
159
|
+
* This function is variadic, meaning that you can pass as many substrings as you want to remove.
|
|
160
|
+
*/
|
|
161
|
+
function removeSubstring(string, ...substrings) {
|
|
162
|
+
for (const substring of substrings) {
|
|
163
|
+
string = string.replaceAll(substring, "");
|
|
164
|
+
}
|
|
165
|
+
return string;
|
|
166
|
+
}
|
|
167
|
+
exports.removeSubstring = removeSubstring;
|
|
168
|
+
/** Helper function to trim a prefix from a string, if it exists. Returns the trimmed string. */
|
|
169
|
+
function trimPrefix(string, prefix) {
|
|
170
|
+
if (!string.startsWith(prefix)) {
|
|
171
|
+
return string;
|
|
172
|
+
}
|
|
173
|
+
return string.slice(prefix.length);
|
|
174
|
+
}
|
|
175
|
+
exports.trimPrefix = trimPrefix;
|
|
176
|
+
/** Helper function to trim a suffix from a string, if it exists. Returns the trimmed string. */
|
|
177
|
+
function trimSuffix(string, prefix) {
|
|
178
|
+
if (!string.endsWith(prefix)) {
|
|
179
|
+
return string;
|
|
180
|
+
}
|
|
181
|
+
const endCharacter = string.length - prefix.length;
|
|
182
|
+
return string.slice(0, endCharacter);
|
|
183
|
+
}
|
|
184
|
+
exports.trimSuffix = trimSuffix;
|
|
185
|
+
function uncapitalizeFirstLetter(string) {
|
|
186
|
+
if (string === "") {
|
|
187
|
+
return string;
|
|
188
|
+
}
|
|
189
|
+
const firstCharacter = string.charAt(0);
|
|
190
|
+
const uncapitalizedFirstLetter = firstCharacter.toLowerCase();
|
|
191
|
+
const restOfString = string.slice(1);
|
|
192
|
+
return `${uncapitalizedFirstLetter}${restOfString}`;
|
|
193
|
+
}
|
|
194
|
+
exports.uncapitalizeFirstLetter = uncapitalizeFirstLetter;
|
|
@@ -0,0 +1,162 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.tableHasKeys = exports.iterateTableInOrder = exports.isTableEmpty = exports.getStringsFromTable = exports.getNumbersFromTable = exports.getBooleansFromTable = exports.copyUserdataValuesToTable = exports.clearTable = void 0;
|
|
4
|
+
const types_1 = require("./types");
|
|
5
|
+
const utils_1 = require("./utils");
|
|
6
|
+
/**
|
|
7
|
+
* In a `Map`, you can use the `clear` method to delete every element. However, in a `LuaMap`, the
|
|
8
|
+
* `clear` method does not exist. Use this helper function as a drop-in replacement for this.
|
|
9
|
+
*/
|
|
10
|
+
function clearTable(luaMap) {
|
|
11
|
+
for (const [key] of luaMap) {
|
|
12
|
+
luaMap.delete(key);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
exports.clearTable = clearTable;
|
|
16
|
+
/** Helper function to copy specific values from a userdata object (e.g. `Vector`) to a table. */
|
|
17
|
+
function copyUserdataValuesToTable(object, keys, luaMap) {
|
|
18
|
+
if (!(0, types_1.isUserdata)(object)) {
|
|
19
|
+
error(`Failed to copy an object values to a table, since the object was of type: ${type(object)}`);
|
|
20
|
+
}
|
|
21
|
+
// We can access values on userdata objects similar to a normal table.
|
|
22
|
+
const userdata = object;
|
|
23
|
+
for (const key of keys) {
|
|
24
|
+
const value = userdata.get(key);
|
|
25
|
+
luaMap.set(key, value);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.copyUserdataValuesToTable = copyUserdataValuesToTable;
|
|
29
|
+
/**
|
|
30
|
+
* Helper function to safely get boolean values from a Lua table. Will throw an error if the
|
|
31
|
+
* specific value does not exist on the table.
|
|
32
|
+
*
|
|
33
|
+
* This function is variadic, meaning that you can specify N arguments to get N values.
|
|
34
|
+
*/
|
|
35
|
+
function getBooleansFromTable(luaMap, objectName, ...keys) {
|
|
36
|
+
const booleans = [];
|
|
37
|
+
for (const key of keys) {
|
|
38
|
+
const value = luaMap.get(key);
|
|
39
|
+
(0, utils_1.assertDefined)(value, `Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
|
|
40
|
+
if ((0, types_1.isBoolean)(value)) {
|
|
41
|
+
booleans.push(value);
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
error(`Failed to get the boolean for the "${key}" value of a table representing a "${objectName}" object because the type was: ${typeof value}`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return booleans;
|
|
48
|
+
}
|
|
49
|
+
exports.getBooleansFromTable = getBooleansFromTable;
|
|
50
|
+
/**
|
|
51
|
+
* Helper function to safely get number values from specific keys on a Lua table. If the values are
|
|
52
|
+
* strings, they will be converted to numbers. Will throw an error if the specific value does not
|
|
53
|
+
* exist on the table or if it cannot be converted to a number.
|
|
54
|
+
*
|
|
55
|
+
* This function is variadic, meaning that you can specify N arguments to get N values.
|
|
56
|
+
*/
|
|
57
|
+
function getNumbersFromTable(luaMap, objectName, ...keys) {
|
|
58
|
+
const numbers = [];
|
|
59
|
+
for (const key of keys) {
|
|
60
|
+
const value = luaMap.get(key);
|
|
61
|
+
(0, utils_1.assertDefined)(value, `Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
|
|
62
|
+
if ((0, types_1.isNumber)(value)) {
|
|
63
|
+
numbers.push(value);
|
|
64
|
+
}
|
|
65
|
+
else if ((0, types_1.isString)(value)) {
|
|
66
|
+
const number = tonumber(value);
|
|
67
|
+
(0, utils_1.assertDefined)(number, `Failed to convert the "${key}" value of a table representing a "${objectName}" object to a number: ${value}`);
|
|
68
|
+
numbers.push(number);
|
|
69
|
+
}
|
|
70
|
+
else {
|
|
71
|
+
error(`Failed to get the number for the "${key}" value of a table representing a "${objectName}" object because the type was: ${typeof value}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return numbers;
|
|
75
|
+
}
|
|
76
|
+
exports.getNumbersFromTable = getNumbersFromTable;
|
|
77
|
+
/**
|
|
78
|
+
* Helper function to safely get string values from a Lua table. Will throw an error if the specific
|
|
79
|
+
* value does not exist on the table.
|
|
80
|
+
*
|
|
81
|
+
* This function is variadic, meaning that you can specify N arguments to get N values.
|
|
82
|
+
*/
|
|
83
|
+
function getStringsFromTable(luaMap, objectName, ...keys) {
|
|
84
|
+
const strings = [];
|
|
85
|
+
for (const key of keys) {
|
|
86
|
+
const value = luaMap.get(key);
|
|
87
|
+
(0, utils_1.assertDefined)(value, `Failed to find a value for "${key}" in a table representing a "${objectName}" object.`);
|
|
88
|
+
if ((0, types_1.isString)(value)) {
|
|
89
|
+
strings.push(value);
|
|
90
|
+
}
|
|
91
|
+
else {
|
|
92
|
+
const string = tostring(value);
|
|
93
|
+
strings.push(string);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
return strings;
|
|
97
|
+
}
|
|
98
|
+
exports.getStringsFromTable = getStringsFromTable;
|
|
99
|
+
/** Helper function to check if a Lua table has 0 keys. */
|
|
100
|
+
function isTableEmpty(luaMap) {
|
|
101
|
+
// Using `next` does not seem to work properly, so we use `pairs` instead.
|
|
102
|
+
// eslint-disable-next-line no-unreachable-loop
|
|
103
|
+
for (const [_key, _value] of luaMap) {
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
return true;
|
|
107
|
+
}
|
|
108
|
+
exports.isTableEmpty = isTableEmpty;
|
|
109
|
+
/**
|
|
110
|
+
* Helper function to iterate over a table deterministically. This is useful because by default, the
|
|
111
|
+
* `pairs` function will return the keys of a Lua table in a random order.
|
|
112
|
+
*
|
|
113
|
+
* This function will sort the table entries based on the value of the key.
|
|
114
|
+
*
|
|
115
|
+
* This function will only work on tables that have number keys or string keys. It will throw a
|
|
116
|
+
* run-time error if it encounters a key of another type.
|
|
117
|
+
*
|
|
118
|
+
* @param luaMap The table to iterate over.
|
|
119
|
+
* @param func The function to run for each iteration.
|
|
120
|
+
* @param inOrder Optional. Whether to iterate in order. True by default. You can dynamically set to
|
|
121
|
+
* false in situations where iterating randomly would not matter and you need the
|
|
122
|
+
* extra performance.
|
|
123
|
+
*/
|
|
124
|
+
function iterateTableInOrder(luaMap, func, inOrder = true) {
|
|
125
|
+
// First, handle the trivial case of a non-deterministic iteration.
|
|
126
|
+
if (!inOrder) {
|
|
127
|
+
for (const [key, value] of luaMap) {
|
|
128
|
+
func(key, value);
|
|
129
|
+
}
|
|
130
|
+
return;
|
|
131
|
+
}
|
|
132
|
+
const keys = Object.keys(luaMap);
|
|
133
|
+
const hasAllNumberKeys = keys.every((key) => (0, types_1.isNumber)(key));
|
|
134
|
+
const hasAllStringKeys = keys.every((key) => (0, types_1.isString)(key));
|
|
135
|
+
if (!hasAllNumberKeys && !hasAllStringKeys) {
|
|
136
|
+
// Since the table has non-homogenous keys, we won't be able to sort it. Revert to
|
|
137
|
+
// non-deterministic iteration in this case.
|
|
138
|
+
for (const [key, value] of luaMap) {
|
|
139
|
+
func(key, value);
|
|
140
|
+
}
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
keys.sort();
|
|
144
|
+
for (const key of keys) {
|
|
145
|
+
const keyIndex = key;
|
|
146
|
+
const value = luaMap.get(keyIndex);
|
|
147
|
+
if (value !== undefined) {
|
|
148
|
+
func(keyIndex, value);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
exports.iterateTableInOrder = iterateTableInOrder;
|
|
153
|
+
/**
|
|
154
|
+
* Helper function to check if a Lua table has all of the provided keys.
|
|
155
|
+
*
|
|
156
|
+
* This function is variadic, meaning that you can specify as many arguments as you want to check
|
|
157
|
+
* for.
|
|
158
|
+
*/
|
|
159
|
+
function tableHasKeys(luaMap, ...keys) {
|
|
160
|
+
return keys.every((key) => luaMap.has(key));
|
|
161
|
+
}
|
|
162
|
+
exports.tableHasKeys = tableHasKeys;
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTearFromPlayer = exports.isTearFromFamiliar = exports.isMissedTear = exports.getTearsStat = exports.getFireDelay = exports.addTearsStat = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* - Converts the specified amount of tears stat into the format of `EntityPlayer.MaxFireDelay` and
|
|
6
|
+
* adds it to the player.
|
|
7
|
+
* - This function should only be used inside the `EVALUATE_CACHE` callback.
|
|
8
|
+
* - In this context, the "tears stat" represents what is shown on the in-game stat UI.
|
|
9
|
+
*
|
|
10
|
+
* For example:
|
|
11
|
+
*
|
|
12
|
+
* ```ts
|
|
13
|
+
* function evaluateCacheTears(player: EntityPlayer) {
|
|
14
|
+
* const numFoo = player.GetNumCollectible(CollectibleTypeCustom.FOO);
|
|
15
|
+
* const tearsStat = numFoo * FOO_TEARS_STAT;
|
|
16
|
+
* addTearsStat(player, tearsStat);
|
|
17
|
+
* }
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
function addTearsStat(player, tearsStat) {
|
|
21
|
+
const existingTearsStat = getTearsStat(player.MaxFireDelay);
|
|
22
|
+
const newTearsStat = existingTearsStat + tearsStat;
|
|
23
|
+
const newMaxFireDelay = getFireDelay(newTearsStat);
|
|
24
|
+
player.MaxFireDelay = newMaxFireDelay;
|
|
25
|
+
}
|
|
26
|
+
exports.addTearsStat = addTearsStat;
|
|
27
|
+
/**
|
|
28
|
+
* - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` field. This is
|
|
29
|
+
* equivalent to how many tears the player can shoot per frame.
|
|
30
|
+
* - If you already have a "tears" stat and you want to convert it back to MaxFireDelay, then use
|
|
31
|
+
* this function.
|
|
32
|
+
* - In this context, the "tears stat" represents what is shown on the in-game stat UI.
|
|
33
|
+
*/
|
|
34
|
+
function getFireDelay(tearsStat) {
|
|
35
|
+
return Math.max(30 / tearsStat - 1, -0.9999);
|
|
36
|
+
}
|
|
37
|
+
exports.getFireDelay = getFireDelay;
|
|
38
|
+
/**
|
|
39
|
+
* - The `EntityPlayer` object stores a player's tear rate in the `MaxFireDelay` field. This is
|
|
40
|
+
* equivalent to how many tears the player can shoot per frame.
|
|
41
|
+
* - If you want to convert this to the "tears" stat that is shown on the in-game stat UI, then use
|
|
42
|
+
* this function.
|
|
43
|
+
*/
|
|
44
|
+
function getTearsStat(fireDelay) {
|
|
45
|
+
return 30 / (fireDelay + 1);
|
|
46
|
+
}
|
|
47
|
+
exports.getTearsStat = getTearsStat;
|
|
48
|
+
/**
|
|
49
|
+
* Helper function to check if a tear hit an enemy. A tear is considered to be missed if it hit the
|
|
50
|
+
* ground, a wall, or a grid entity.
|
|
51
|
+
*
|
|
52
|
+
* Note that tears are still considered to be missed if they hit a poop or fire, so you may want to
|
|
53
|
+
* handle those separately using the `POST_GRID_ENTITY_COLLISION` and `POST_ENTITY_COLLISION`
|
|
54
|
+
* callbacks, respectively.
|
|
55
|
+
*
|
|
56
|
+
* Under the hood, this function uses the `Entity.IsDead` method. (Tears will not die if they hit an
|
|
57
|
+
* enemy, but they will die if they hit a wall or object.)
|
|
58
|
+
*/
|
|
59
|
+
function isMissedTear(tear) {
|
|
60
|
+
return tear.IsDead();
|
|
61
|
+
}
|
|
62
|
+
exports.isMissedTear = isMissedTear;
|
|
63
|
+
/**
|
|
64
|
+
* Helper function to check if a given tear is from a familiar (as opposed to e.g. a player). This
|
|
65
|
+
* is determined by looking at the parent.
|
|
66
|
+
*
|
|
67
|
+
* For the special case of Incubus and Blood Babies, the parent of the tear is always the player,
|
|
68
|
+
* but the spawner entity of the tear changes. On frame 0, the spawner entity is equal to the
|
|
69
|
+
* player, and on frame 1, the spawner entity is equal to the familiar. For this reason, you can
|
|
70
|
+
* only use this function in the `POST_TEAR_INIT_VERY_LATE` callback or on frame 1+.
|
|
71
|
+
*
|
|
72
|
+
* If this function is called on frame 0, it will throw a run-time error.
|
|
73
|
+
*
|
|
74
|
+
* Note that this function does not work properly when the tear is from a Lead Pencil barrage. In
|
|
75
|
+
* this case, it will always appear as if the tear is coming from a player.
|
|
76
|
+
*
|
|
77
|
+
* @param tear The tear to inspect.
|
|
78
|
+
* @param familiarVariant Optional. Specify this to check if the tear came from a specific familiar
|
|
79
|
+
* variant. Default is undefined, which checks for any familiar.
|
|
80
|
+
* @param subType Optional. Specify this to check if the tear came from a specific familiar
|
|
81
|
+
* sub-type. Default is undefined, which checks for any familiar.
|
|
82
|
+
*/
|
|
83
|
+
function isTearFromFamiliar(tear, familiarVariant, subType) {
|
|
84
|
+
if (tear.FrameCount === 0) {
|
|
85
|
+
error('Failed to check if the given tear was from a player since the tear\'s frame count was equal to 0. (The "isTearFromFamiliar" function must only be used in the "POST_TEAR_INIT_VERY_LATE" callback or on frame 1 and onwards.)');
|
|
86
|
+
}
|
|
87
|
+
// Normally, all tears have a spawner entity, which is either the player or the familiar.
|
|
88
|
+
if (tear.SpawnerEntity === undefined) {
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
// We cannot use `tear.SpawnerType` to determine this, since it is baked in to be equal to
|
|
92
|
+
// `EntityType.PLAYER` regardless of whether the tear is from a player or familiar.
|
|
93
|
+
const familiar = tear.SpawnerEntity.ToFamiliar();
|
|
94
|
+
if (familiar === undefined) {
|
|
95
|
+
return false;
|
|
96
|
+
}
|
|
97
|
+
return ((familiarVariant === undefined || familiarVariant === familiar.Variant) &&
|
|
98
|
+
(subType === undefined || subType === familiar.SubType));
|
|
99
|
+
}
|
|
100
|
+
exports.isTearFromFamiliar = isTearFromFamiliar;
|
|
101
|
+
/**
|
|
102
|
+
* Helper function to check if a given tear is from a player (as opposed to e.g. a familiar). This
|
|
103
|
+
* is determined by looking at the `SpawnerEntity`.
|
|
104
|
+
*
|
|
105
|
+
* For the special case of Incubus and Blood Babies, the `SpawnerEntity` of the tear is always the
|
|
106
|
+
* player, but the spawner entity of the tear changes. On frame 0, the spawner entity is equal to
|
|
107
|
+
* the player, and on frame 1, the spawner entity is equal to the familiar. For this reason, you can
|
|
108
|
+
* only use this function in the `POST_TEAR_INIT_VERY_LATE` callback or on frame 1+.
|
|
109
|
+
*
|
|
110
|
+
* If this function is called on frame 0, it will throw a run-time error.
|
|
111
|
+
*
|
|
112
|
+
* Note that this function does not work properly when the tear is from a Lead Pencil barrage. In
|
|
113
|
+
* this case, it will always appear as if the tear is coming from a player.
|
|
114
|
+
*/
|
|
115
|
+
function isTearFromPlayer(tear) {
|
|
116
|
+
if (tear.FrameCount === 0) {
|
|
117
|
+
error('Failed to check if the given tear was from a player since the tear\'s frame count was equal to 0. (The "isTearFromPlayer" function must only be used in the "POST_TEAR_INIT_VERY_LATE" callback or on frame 1 and onwards.)');
|
|
118
|
+
}
|
|
119
|
+
// Normally, all tears have a spawner entity, which is either the player or the familiar.
|
|
120
|
+
if (tear.SpawnerEntity === undefined) {
|
|
121
|
+
return false;
|
|
122
|
+
}
|
|
123
|
+
// We cannot use `tear.SpawnerType` to determine this, since it is baked in to be equal to
|
|
124
|
+
// `EntityType.PLAYER` regardless of whether the tear is from a player or familiar.
|
|
125
|
+
const player = tear.SpawnerEntity.ToPlayer();
|
|
126
|
+
return player !== undefined;
|
|
127
|
+
}
|
|
128
|
+
exports.isTearFromPlayer = isTearFromPlayer;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.isTransformationFlying = exports.hasFlyingTransformation = exports.getTransformationsForCollectibleType = exports.getTransformationName = exports.getPlayerTransformations = void 0;
|
|
4
|
+
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
+
const cachedEnumValues_1 = require("../arrays/cachedEnumValues");
|
|
6
|
+
const transformationNames_1 = require("../objects/transformationNames");
|
|
7
|
+
const ReadonlyMap_1 = require("../types/ReadonlyMap");
|
|
8
|
+
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
9
|
+
const collectibles_1 = require("./collectibles");
|
|
10
|
+
const flag_1 = require("./flag");
|
|
11
|
+
const TRANSFORMATION_TO_TAG_MAP = new ReadonlyMap_1.ReadonlyMap([
|
|
12
|
+
[isaac_typescript_definitions_1.PlayerForm.GUPPY, isaac_typescript_definitions_1.ItemConfigTag.GUPPY],
|
|
13
|
+
[isaac_typescript_definitions_1.PlayerForm.BEELZEBUB, isaac_typescript_definitions_1.ItemConfigTag.FLY],
|
|
14
|
+
[isaac_typescript_definitions_1.PlayerForm.FUN_GUY, isaac_typescript_definitions_1.ItemConfigTag.MUSHROOM],
|
|
15
|
+
[isaac_typescript_definitions_1.PlayerForm.SERAPHIM, isaac_typescript_definitions_1.ItemConfigTag.ANGEL],
|
|
16
|
+
[isaac_typescript_definitions_1.PlayerForm.BOB, isaac_typescript_definitions_1.ItemConfigTag.BOB],
|
|
17
|
+
[isaac_typescript_definitions_1.PlayerForm.SPUN, isaac_typescript_definitions_1.ItemConfigTag.SYRINGE],
|
|
18
|
+
[isaac_typescript_definitions_1.PlayerForm.YES_MOTHER, isaac_typescript_definitions_1.ItemConfigTag.MOM],
|
|
19
|
+
[isaac_typescript_definitions_1.PlayerForm.CONJOINED, isaac_typescript_definitions_1.ItemConfigTag.BABY],
|
|
20
|
+
[isaac_typescript_definitions_1.PlayerForm.LEVIATHAN, isaac_typescript_definitions_1.ItemConfigTag.DEVIL],
|
|
21
|
+
[isaac_typescript_definitions_1.PlayerForm.OH_CRAP, isaac_typescript_definitions_1.ItemConfigTag.POOP],
|
|
22
|
+
[isaac_typescript_definitions_1.PlayerForm.BOOKWORM, isaac_typescript_definitions_1.ItemConfigTag.BOOK],
|
|
23
|
+
// PlayerForm.ADULTHOOD (11) is based on pill usage.
|
|
24
|
+
[isaac_typescript_definitions_1.PlayerForm.SPIDER_BABY, isaac_typescript_definitions_1.ItemConfigTag.SPIDER], // 12
|
|
25
|
+
// PlayerForm.STOMPY (13) is based on size.
|
|
26
|
+
]);
|
|
27
|
+
const TRANSFORMATIONS_THAT_GRANT_FLYING = new ReadonlySet_1.ReadonlySet([
|
|
28
|
+
isaac_typescript_definitions_1.PlayerForm.GUPPY,
|
|
29
|
+
isaac_typescript_definitions_1.PlayerForm.BEELZEBUB,
|
|
30
|
+
isaac_typescript_definitions_1.PlayerForm.SERAPHIM,
|
|
31
|
+
isaac_typescript_definitions_1.PlayerForm.LEVIATHAN, // 8
|
|
32
|
+
]);
|
|
33
|
+
/** Returns a set of the player's current transformations. */
|
|
34
|
+
function getPlayerTransformations(player) {
|
|
35
|
+
const transformations = new Set();
|
|
36
|
+
for (const playerForm of cachedEnumValues_1.PLAYER_FORM_VALUES) {
|
|
37
|
+
if (player.HasPlayerForm(playerForm)) {
|
|
38
|
+
transformations.add(playerForm);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return transformations;
|
|
42
|
+
}
|
|
43
|
+
exports.getPlayerTransformations = getPlayerTransformations;
|
|
44
|
+
/**
|
|
45
|
+
* Helper function to get a transformation name from a PlayerForm enum.
|
|
46
|
+
*
|
|
47
|
+
* For example:
|
|
48
|
+
*
|
|
49
|
+
* ```ts
|
|
50
|
+
* const transformationName = getTransformationName(PlayerForm.LORD_OF_THE_FLIES);
|
|
51
|
+
* // transformationName is "Beelzebub"
|
|
52
|
+
* ```
|
|
53
|
+
*/
|
|
54
|
+
function getTransformationName(playerForm) {
|
|
55
|
+
return transformationNames_1.TRANSFORMATION_NAMES[playerForm];
|
|
56
|
+
}
|
|
57
|
+
exports.getTransformationName = getTransformationName;
|
|
58
|
+
/**
|
|
59
|
+
* Returns a set containing all of the transformations that the given collectible types contribute
|
|
60
|
+
* towards.
|
|
61
|
+
*/
|
|
62
|
+
function getTransformationsForCollectibleType(collectibleType) {
|
|
63
|
+
const itemConfigTags = (0, collectibles_1.getCollectibleTags)(collectibleType);
|
|
64
|
+
const transformationSet = new Set();
|
|
65
|
+
for (const playerForm of cachedEnumValues_1.PLAYER_FORM_VALUES) {
|
|
66
|
+
const itemConfigTag = TRANSFORMATION_TO_TAG_MAP.get(playerForm);
|
|
67
|
+
if (itemConfigTag === undefined) {
|
|
68
|
+
continue;
|
|
69
|
+
}
|
|
70
|
+
if ((0, flag_1.hasFlag)(itemConfigTags, itemConfigTag)) {
|
|
71
|
+
transformationSet.add(playerForm);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
return transformationSet;
|
|
75
|
+
}
|
|
76
|
+
exports.getTransformationsForCollectibleType = getTransformationsForCollectibleType;
|
|
77
|
+
function hasFlyingTransformation(player) {
|
|
78
|
+
for (const playerForm of TRANSFORMATIONS_THAT_GRANT_FLYING) {
|
|
79
|
+
if (player.HasPlayerForm(playerForm)) {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
return false;
|
|
84
|
+
}
|
|
85
|
+
exports.hasFlyingTransformation = hasFlyingTransformation;
|
|
86
|
+
function isTransformationFlying(playerForm) {
|
|
87
|
+
return TRANSFORMATIONS_THAT_GRANT_FLYING.has(playerForm);
|
|
88
|
+
}
|
|
89
|
+
exports.isTransformationFlying = isTransformationFlying;
|