isaacscript-common 87.9.7 → 87.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cachedEnumValues.js +29 -32
- package/dist/callbackClasses.js +142 -289
- package/dist/callbacks.js +147 -183
- package/dist/classes/DefaultMap.js +4 -8
- package/dist/classes/ModFeature.js +21 -25
- package/dist/classes/ModUpgraded.js +43 -47
- package/dist/classes/callbacks/EntityTakeDmgFilter.js +6 -10
- package/dist/classes/callbacks/EntityTakeDmgPlayer.js +7 -11
- package/dist/classes/callbacks/InputActionFilter.js +4 -8
- package/dist/classes/callbacks/InputActionPlayer.js +4 -8
- package/dist/classes/callbacks/PostAmbushFinished.js +10 -14
- package/dist/classes/callbacks/PostAmbushStarted.js +10 -14
- package/dist/classes/callbacks/PostBombExploded.js +8 -12
- package/dist/classes/callbacks/PostBombInitFilter.js +6 -10
- package/dist/classes/callbacks/PostBombInitLate.js +6 -10
- package/dist/classes/callbacks/PostBombRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostBombUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostBoneSwing.js +7 -11
- package/dist/classes/callbacks/PostCollectibleEmpty.js +6 -10
- package/dist/classes/callbacks/PostCursedTeleport.js +30 -34
- package/dist/classes/callbacks/PostCustomRevive.js +4 -8
- package/dist/classes/callbacks/PostDiceRoomActivated.js +9 -13
- package/dist/classes/callbacks/PostDoorRender.js +8 -12
- package/dist/classes/callbacks/PostDoorUpdate.js +8 -12
- package/dist/classes/callbacks/PostEffectInitFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectInitLate.js +6 -10
- package/dist/classes/callbacks/PostEffectRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostEffectStateChanged.js +8 -12
- package/dist/classes/callbacks/PostEffectUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityKillFilter.js +6 -10
- package/dist/classes/callbacks/PostEntityRemoveFilter.js +6 -10
- package/dist/classes/callbacks/PostEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFamiliarInitFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarInitLate.js +6 -10
- package/dist/classes/callbacks/PostFamiliarRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostFamiliarStateChanged.js +8 -12
- package/dist/classes/callbacks/PostFamiliarUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostFirstEsauJr.js +4 -8
- package/dist/classes/callbacks/PostFirstFlip.js +4 -8
- package/dist/classes/callbacks/PostFlip.js +4 -8
- package/dist/classes/callbacks/PostGameEndFilter.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReordered.js +6 -10
- package/dist/classes/callbacks/PostGameStartedReorderedLast.js +6 -10
- package/dist/classes/callbacks/PostGreedModeWave.js +7 -11
- package/dist/classes/callbacks/PostGridEntityBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomBroken.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomCollision.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityCustomRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityCustomUpdate.js +6 -10
- package/dist/classes/callbacks/PostGridEntityInit.js +6 -10
- package/dist/classes/callbacks/PostGridEntityRemove.js +4 -8
- package/dist/classes/callbacks/PostGridEntityRender.js +6 -10
- package/dist/classes/callbacks/PostGridEntityStateChanged.js +6 -10
- package/dist/classes/callbacks/PostGridEntityUpdate.js +6 -10
- package/dist/classes/callbacks/PostHolyMantleRemoved.js +15 -19
- package/dist/classes/callbacks/PostItemDischarge.js +23 -27
- package/dist/classes/callbacks/PostItemPickup.js +6 -10
- package/dist/classes/callbacks/PostKeyboardChanged.js +9 -13
- package/dist/classes/callbacks/PostKnifeInitFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeInitLate.js +6 -10
- package/dist/classes/callbacks/PostKnifeRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostKnifeUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserInitLate.js +6 -10
- package/dist/classes/callbacks/PostLaserRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostLaserUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCDeathFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCInitLate.js +6 -10
- package/dist/classes/callbacks/PostNPCRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostNPCStateChanged.js +8 -12
- package/dist/classes/callbacks/PostNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostNewLevelReordered.js +6 -10
- package/dist/classes/callbacks/PostNewRoomEarly.js +17 -21
- package/dist/classes/callbacks/PostNewRoomReordered.js +6 -10
- package/dist/classes/callbacks/PostPEffectUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPickupChanged.js +6 -10
- package/dist/classes/callbacks/PostPickupCollect.js +8 -12
- package/dist/classes/callbacks/PostPickupInitFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupInitFirst.js +10 -14
- package/dist/classes/callbacks/PostPickupInitLate.js +6 -10
- package/dist/classes/callbacks/PostPickupRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostPickupSelectionFilter.js +4 -8
- package/dist/classes/callbacks/PostPickupStateChanged.js +8 -12
- package/dist/classes/callbacks/PostPickupUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPitRender.js +8 -12
- package/dist/classes/callbacks/PostPitUpdate.js +8 -12
- package/dist/classes/callbacks/PostPlayerChangeHealth.js +14 -18
- package/dist/classes/callbacks/PostPlayerChangeStat.js +26 -30
- package/dist/classes/callbacks/PostPlayerChangeType.js +11 -15
- package/dist/classes/callbacks/PostPlayerCollectibleAdded.js +6 -10
- package/dist/classes/callbacks/PostPlayerCollectibleRemoved.js +6 -10
- package/dist/classes/callbacks/PostPlayerFatalDamage.js +24 -28
- package/dist/classes/callbacks/PostPlayerInitFirst.js +12 -16
- package/dist/classes/callbacks/PostPlayerInitLate.js +9 -13
- package/dist/classes/callbacks/PostPlayerRenderReordered.js +6 -10
- package/dist/classes/callbacks/PostPlayerUpdateReordered.js +6 -10
- package/dist/classes/callbacks/PostPoopRender.js +8 -12
- package/dist/classes/callbacks/PostPoopUpdate.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateRender.js +8 -12
- package/dist/classes/callbacks/PostPressurePlateUpdate.js +8 -12
- package/dist/classes/callbacks/PostProjectileInitFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileInitLate.js +6 -10
- package/dist/classes/callbacks/PostProjectileKill.js +8 -12
- package/dist/classes/callbacks/PostProjectileRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostProjectileUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostPurchase.js +21 -25
- package/dist/classes/callbacks/PostRockRender.js +8 -12
- package/dist/classes/callbacks/PostRockUpdate.js +8 -12
- package/dist/classes/callbacks/PostRoomClearChanged.js +9 -13
- package/dist/classes/callbacks/PostSacrifice.js +12 -16
- package/dist/classes/callbacks/PostSlotAnimationChanged.js +6 -10
- package/dist/classes/callbacks/PostSlotCollision.js +8 -12
- package/dist/classes/callbacks/PostSlotDestroyed.js +6 -10
- package/dist/classes/callbacks/PostSlotInit.js +6 -10
- package/dist/classes/callbacks/PostSlotRender.js +6 -10
- package/dist/classes/callbacks/PostSlotUpdate.js +6 -10
- package/dist/classes/callbacks/PostSpikesRender.js +8 -12
- package/dist/classes/callbacks/PostSpikesUpdate.js +8 -12
- package/dist/classes/callbacks/PostTNTRender.js +8 -12
- package/dist/classes/callbacks/PostTNTUpdate.js +8 -12
- package/dist/classes/callbacks/PostTearInitFilter.js +6 -10
- package/dist/classes/callbacks/PostTearInitLate.js +6 -10
- package/dist/classes/callbacks/PostTearInitVeryLate.js +6 -10
- package/dist/classes/callbacks/PostTearKill.js +8 -12
- package/dist/classes/callbacks/PostTearRenderFilter.js +6 -10
- package/dist/classes/callbacks/PostTearUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PostTransformation.js +10 -14
- package/dist/classes/callbacks/PostTrinketBreak.js +16 -20
- package/dist/classes/callbacks/PostUsePillFilter.js +18 -22
- package/dist/classes/callbacks/PreBerserkDeath.js +14 -18
- package/dist/classes/callbacks/PreBombCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreCustomRevive.js +6 -10
- package/dist/classes/callbacks/PreEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreFamiliarCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreGetPedestal.js +8 -12
- package/dist/classes/callbacks/PreItemPickup.js +6 -10
- package/dist/classes/callbacks/PreKnifeCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreNPCUpdateFilter.js +6 -10
- package/dist/classes/callbacks/PreNewLevel.js +10 -14
- package/dist/classes/callbacks/PreProjectileCollisionFilter.js +6 -10
- package/dist/classes/callbacks/PreRoomEntitySpawnFilter.js +4 -8
- package/dist/classes/callbacks/PreTearCollisionFilter.js +6 -10
- package/dist/classes/features/callbackLogic/CustomGridEntities.js +46 -50
- package/dist/classes/features/callbackLogic/CustomRevive.js +28 -32
- package/dist/classes/features/callbackLogic/EsauJrDetection.js +11 -15
- package/dist/classes/features/callbackLogic/FlipDetection.js +11 -15
- package/dist/classes/features/callbackLogic/GameReorderedCallbacks.js +26 -30
- package/dist/classes/features/callbackLogic/GridEntityCollisionDetection.js +10 -14
- package/dist/classes/features/callbackLogic/GridEntityRenderDetection.js +6 -10
- package/dist/classes/features/callbackLogic/GridEntityUpdateDetection.js +12 -16
- package/dist/classes/features/callbackLogic/ItemPickupDetection.js +17 -21
- package/dist/classes/features/callbackLogic/PickupChangeDetection.js +6 -10
- package/dist/classes/features/callbackLogic/PlayerCollectibleDetection.js +39 -43
- package/dist/classes/features/callbackLogic/PlayerReorderedCallbacks.js +18 -22
- package/dist/classes/features/callbackLogic/SlotDestroyedDetection.js +17 -21
- package/dist/classes/features/callbackLogic/SlotRenderDetection.js +8 -12
- package/dist/classes/features/callbackLogic/SlotUpdateDetection.js +9 -13
- package/dist/classes/features/other/CharacterHealthConversion.js +13 -17
- package/dist/classes/features/other/CharacterStats.js +9 -13
- package/dist/classes/features/other/CollectibleItemPoolType.js +17 -21
- package/dist/classes/features/other/CustomHotkeys.js +15 -19
- package/dist/classes/features/other/CustomItemPools.js +20 -24
- package/dist/classes/features/other/CustomPickups.js +15 -19
- package/dist/classes/features/other/CustomStages.js +116 -153
- package/dist/classes/features/other/CustomTrapdoors.js +119 -123
- package/dist/classes/features/other/DebugDisplay.js +77 -81
- package/dist/classes/features/other/DeployJSONRoom.js +65 -69
- package/dist/classes/features/other/DisableAllSound.js +14 -18
- package/dist/classes/features/other/DisableInputs.js +24 -28
- package/dist/classes/features/other/EdenStartingStatsHealth.js +36 -40
- package/dist/classes/features/other/ExtraConsoleCommands.js +65 -102
- package/dist/classes/features/other/FadeInRemover.js +9 -13
- package/dist/classes/features/other/FastReset.js +18 -22
- package/dist/classes/features/other/FlyingDetection.js +10 -14
- package/dist/classes/features/other/ForgottenSwitch.js +8 -12
- package/dist/classes/features/other/ItemPoolDetection.js +35 -39
- package/dist/classes/features/other/ModdedElementDetection.js +43 -47
- package/dist/classes/features/other/ModdedElementSets.js +135 -139
- package/dist/classes/features/other/NoSirenSteal.js +7 -11
- package/dist/classes/features/other/Pause.js +48 -52
- package/dist/classes/features/other/PersistentEntities.js +16 -20
- package/dist/classes/features/other/PickupIndexCreation.js +31 -35
- package/dist/classes/features/other/PlayerCollectibleTracking.js +18 -22
- package/dist/classes/features/other/PonyDetection.js +22 -26
- package/dist/classes/features/other/PressInput.js +10 -14
- package/dist/classes/features/other/PreventChildEntities.js +6 -10
- package/dist/classes/features/other/PreventGridEntityRespawn.js +34 -38
- package/dist/classes/features/other/RerunDetection.js +11 -15
- package/dist/classes/features/other/RoomClearFrame.js +11 -15
- package/dist/classes/features/other/RoomHistory.js +30 -34
- package/dist/classes/features/other/RunInNFrames.js +24 -28
- package/dist/classes/features/other/RunNextRoom.js +8 -12
- package/dist/classes/features/other/RunNextRun.js +8 -12
- package/dist/classes/features/other/SaveDataManager.js +61 -65
- package/dist/classes/features/other/SpawnRockAltRewards.js +115 -119
- package/dist/classes/features/other/StageHistory.js +76 -80
- package/dist/classes/features/other/StartAmbush.js +12 -16
- package/dist/classes/features/other/TaintedLazarusPlayers.js +10 -14
- package/dist/classes/features/other/UnlockAchievementsDetection.js +10 -14
- package/dist/classes/features/other/customStages/backdrop.js +68 -71
- package/dist/classes/features/other/customStages/constants.js +7 -10
- package/dist/classes/features/other/customStages/gridEntities.js +23 -30
- package/dist/classes/features/other/customStages/shadows.js +27 -30
- package/dist/classes/features/other/customStages/streakText.js +55 -60
- package/dist/classes/features/other/customStages/utils.js +13 -17
- package/dist/classes/features/other/customStages/v.js +4 -7
- package/dist/classes/features/other/customStages/versusScreen.js +46 -50
- package/dist/classes/features/other/debugDisplay/DebugDisplayBomb.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayDoor.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayEffect.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayFamiliar.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayKnife.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayLaser.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayNPC.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPickup.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPit.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPlayer.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPoop.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayPressurePlate.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayProjectile.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayRock.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySlot.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplaySpikes.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTNT.js +8 -12
- package/dist/classes/features/other/debugDisplay/DebugDisplayTear.js +8 -12
- package/dist/classes/features/other/debugDisplay/utils.js +6 -10
- package/dist/classes/features/other/extraConsoleCommands/commands.js +411 -557
- package/dist/classes/features/other/extraConsoleCommands/subroutines.js +47 -57
- package/dist/classes/features/other/extraConsoleCommands/v.js +1 -4
- package/dist/classes/features/other/saveDataManager/constants.js +1 -4
- package/dist/classes/features/other/saveDataManager/glowingHourGlass.js +17 -21
- package/dist/classes/features/other/saveDataManager/loadFromDisk.js +19 -22
- package/dist/classes/features/other/saveDataManager/restoreDefaults.js +20 -25
- package/dist/classes/features/other/saveDataManager/saveToDisk.js +13 -16
- package/dist/classes/private/CustomCallback.js +4 -8
- package/dist/classes/private/Feature.js +1 -5
- package/dist/core/cachedClasses.js +12 -15
- package/dist/core/constants.js +126 -130
- package/dist/core/constantsFirstLast.js +22 -25
- package/dist/core/constantsVanilla.js +25 -28
- package/dist/core/upgradeMod.js +7 -10
- package/dist/decorators.js +6 -10
- package/dist/enums/AmbushType.js +2 -5
- package/dist/enums/CornerType.js +2 -5
- package/dist/enums/HealthType.js +2 -5
- package/dist/enums/ISCFeature.js +2 -5
- package/dist/enums/LadderSubTypeCustom.js +2 -5
- package/dist/enums/ModCallbackCustom.js +2 -5
- package/dist/enums/MysteriousPaperEffect.js +2 -5
- package/dist/enums/PlayerStat.js +2 -5
- package/dist/enums/PocketItemType.js +2 -5
- package/dist/enums/RockAltType.js +2 -5
- package/dist/enums/SaveDataKey.js +2 -5
- package/dist/enums/SerializationType.js +2 -5
- package/dist/enums/SlotDestructionType.js +2 -5
- package/dist/enums/private/GridEntityTypeCustom.js +1 -4
- package/dist/enums/private/SerializationBrand.js +2 -5
- package/dist/enums/private/StageTravelState.js +2 -5
- package/dist/enums/private/TrapdoorAnimation.js +2 -5
- package/dist/enums/private/UIStreakAnimation.js +2 -5
- package/dist/features.js +138 -141
- package/dist/functions/ambush.js +9 -12
- package/dist/functions/array.js +45 -76
- package/dist/functions/arrayLua.js +7 -16
- package/dist/functions/benchmark.js +4 -7
- package/dist/functions/bitSet128.js +19 -26
- package/dist/functions/bitwise.js +14 -23
- package/dist/functions/bombs.js +1 -4
- package/dist/functions/bosses.js +68 -85
- package/dist/functions/cards.js +44 -62
- package/dist/functions/challenges.js +28 -39
- package/dist/functions/characters.js +68 -87
- package/dist/functions/charge.js +41 -52
- package/dist/functions/chargeBar.js +2 -6
- package/dist/functions/collectibleTag.js +9 -13
- package/dist/functions/collectibles.js +133 -172
- package/dist/functions/color.js +29 -38
- package/dist/functions/console.js +4 -8
- package/dist/functions/curses.js +6 -10
- package/dist/functions/debugFunctions.js +7 -14
- package/dist/functions/decorators.js +13 -19
- package/dist/functions/deepCopy.js +96 -99
- package/dist/functions/deepCopyTests.js +56 -59
- package/dist/functions/dimensions.js +10 -14
- package/dist/functions/direction.js +22 -30
- package/dist/functions/doors.js +104 -154
- package/dist/functions/easing.js +30 -62
- package/dist/functions/effects.js +6 -10
- package/dist/functions/emptyRoom.js +30 -34
- package/dist/functions/entities.js +88 -115
- package/dist/functions/entitiesSpecific.js +83 -125
- package/dist/functions/entityTypes.js +3 -6
- package/dist/functions/enums.js +27 -41
- package/dist/functions/external.js +4 -8
- package/dist/functions/familiars.js +17 -25
- package/dist/functions/flag.js +10 -19
- package/dist/functions/frames.js +31 -51
- package/dist/functions/globals.js +26 -66
- package/dist/functions/gridEntities.js +231 -269
- package/dist/functions/gridEntitiesSpecific.js +86 -126
- package/dist/functions/gridIndex.js +8 -11
- package/dist/functions/hash.js +1 -4
- package/dist/functions/hex.js +7 -11
- package/dist/functions/input.js +65 -88
- package/dist/functions/isaacAPIClass.js +28 -53
- package/dist/functions/itemPool.js +39 -48
- package/dist/functions/jsonHelpers.js +5 -42
- package/dist/functions/jsonRoom.js +39 -46
- package/dist/functions/kColor.js +30 -39
- package/dist/functions/language.js +3 -6
- package/dist/functions/level.js +20 -26
- package/dist/functions/levelGrid.js +81 -108
- package/dist/functions/log.js +6 -12
- package/dist/functions/logEntities.js +49 -59
- package/dist/functions/logMisc.js +183 -214
- package/dist/functions/map.js +10 -20
- package/dist/functions/math.js +16 -31
- package/dist/functions/merge.js +48 -51
- package/dist/functions/mergeTests.js +34 -37
- package/dist/functions/minimap.js +34 -46
- package/dist/functions/modFeatures.js +1 -4
- package/dist/functions/newArray.js +5 -8
- package/dist/functions/nextStage.js +63 -67
- package/dist/functions/npcDataStructures.js +9 -20
- package/dist/functions/npcs.js +37 -45
- package/dist/functions/pickupVariants.js +26 -39
- package/dist/functions/pickups.js +43 -59
- package/dist/functions/pickupsSpecific.js +76 -118
- package/dist/functions/pills.js +52 -72
- package/dist/functions/playerCenter.js +13 -16
- package/dist/functions/playerCollectibles.js +59 -79
- package/dist/functions/playerDataStructures.js +18 -29
- package/dist/functions/playerEffects.js +12 -19
- package/dist/functions/playerHealth.js +91 -113
- package/dist/functions/playerIndex.js +22 -33
- package/dist/functions/playerTrinkets.js +31 -43
- package/dist/functions/players.js +87 -126
- package/dist/functions/pocketItems.js +33 -43
- package/dist/functions/positionVelocity.js +23 -32
- package/dist/functions/pressurePlate.js +7 -10
- package/dist/functions/projectiles.js +11 -15
- package/dist/functions/random.js +8 -13
- package/dist/functions/readOnly.js +3 -8
- package/dist/functions/render.js +7 -12
- package/dist/functions/revive.js +38 -45
- package/dist/functions/rng.js +31 -44
- package/dist/functions/rockAlt.js +18 -22
- package/dist/functions/roomData.js +24 -40
- package/dist/functions/roomGrid.js +17 -25
- package/dist/functions/roomShape.js +39 -55
- package/dist/functions/roomShapeWalls.js +67 -71
- package/dist/functions/roomTransition.js +13 -17
- package/dist/functions/rooms.js +181 -244
- package/dist/functions/run.js +29 -39
- package/dist/functions/seeds.js +6 -10
- package/dist/functions/serialization.js +27 -34
- package/dist/functions/set.js +24 -40
- package/dist/functions/slots.js +18 -22
- package/dist/functions/sort.js +9 -15
- package/dist/functions/sound.js +12 -16
- package/dist/functions/spawnCollectible.js +21 -26
- package/dist/functions/sprites.js +16 -24
- package/dist/functions/stage.js +122 -164
- package/dist/functions/stats.js +37 -43
- package/dist/functions/storyBosses.js +36 -40
- package/dist/functions/string.js +19 -33
- package/dist/functions/table.js +21 -31
- package/dist/functions/tears.js +6 -14
- package/dist/functions/transformations.js +35 -42
- package/dist/functions/trinketGive.js +29 -36
- package/dist/functions/trinkets.js +45 -60
- package/dist/functions/tstlClass.js +11 -20
- package/dist/functions/types.js +22 -46
- package/dist/functions/ui.js +25 -40
- package/dist/functions/utils.js +22 -36
- package/dist/functions/vector.js +33 -46
- package/dist/functions/versusScreen.js +12 -18
- package/dist/functions/weighted.js +8 -12
- package/dist/index.js +150 -166
- package/dist/index.rollup.d.ts +11 -11
- package/dist/indexLua.js +151 -167
- package/dist/interfaces/ChargeBarSprites.js +1 -2
- package/dist/interfaces/Corner.js +1 -2
- package/dist/interfaces/CustomStageTSConfig.js +1 -2
- package/dist/interfaces/GridEntityCustomData.js +1 -2
- package/dist/interfaces/JSONRoomsFile.js +1 -2
- package/dist/interfaces/PlayerHealth.d.ts +11 -11
- package/dist/interfaces/PlayerHealth.d.ts.map +1 -1
- package/dist/interfaces/PlayerHealth.js +1 -2
- package/dist/interfaces/PlayerStats.js +2 -4
- package/dist/interfaces/PocketItemDescription.js +1 -2
- package/dist/interfaces/RoomDescription.js +1 -2
- package/dist/interfaces/SaveData.js +1 -2
- package/dist/interfaces/StageHistoryEntry.js +1 -2
- package/dist/interfaces/TSTLClassMetatable.js +1 -2
- package/dist/interfaces/TrinketSituation.js +1 -2
- package/dist/interfaces/private/AddCallbackParametersCustom.js +2 -4
- package/dist/interfaces/private/CustomStage.js +1 -2
- package/dist/interfaces/private/CustomTrapdoorDescription.js +1 -2
- package/dist/interfaces/private/ModUpgradedInterface.js +1 -2
- package/dist/isaacscript-common.lua +1 -1
- package/dist/maps/PHDPillConversionsMap.js +19 -22
- package/dist/maps/cardNameToTypeMap.js +205 -208
- package/dist/maps/characterNameToTypeMap.js +85 -88
- package/dist/maps/collectibleNameToTypeMap.js +5 -8
- package/dist/maps/defaultPlayerStatMap.js +10 -13
- package/dist/maps/entityTypeVariantToBossIDMap.js +3 -6
- package/dist/maps/falsePHDPillConversionsMap.js +33 -36
- package/dist/maps/gridEntityTypeToBrokenStateMap.js +15 -18
- package/dist/maps/gridEntityXMLMap.js +52 -55
- package/dist/maps/itemPoolTypeToItemPoolName.js +33 -36
- package/dist/maps/keyboardToStringMap.js +66 -69
- package/dist/maps/pillNameToEffectMap.js +83 -86
- package/dist/maps/roomNameToTypeMap.js +38 -41
- package/dist/maps/roomShapeToTopLeftWallGridIndexMap.js +9 -12
- package/dist/maps/transformationNameToPlayerFormMap.js +30 -33
- package/dist/maps/trinketNameToTypeMap.js +5 -8
- package/dist/objects/LRoomShapeToRectangles.js +22 -25
- package/dist/objects/backdropTypeToRockAltType.js +65 -68
- package/dist/objects/batteryNames.js +8 -11
- package/dist/objects/bombNames.js +11 -14
- package/dist/objects/bossIDToEntityTypeVariant.js +116 -119
- package/dist/objects/bossNamePNGFileNames.js +104 -107
- package/dist/objects/bossNames.js +105 -108
- package/dist/objects/bossPortraitPNGFileNames.js +104 -107
- package/dist/objects/cardDescriptions.js +101 -104
- package/dist/objects/cardNames.js +101 -104
- package/dist/objects/challengeBosses.js +49 -52
- package/dist/objects/challengeCharacters.js +49 -52
- package/dist/objects/challengeCollectibleTypes.js +160 -163
- package/dist/objects/challengeNames.js +49 -52
- package/dist/objects/challengeTrinketType.js +48 -51
- package/dist/objects/characterDamageMultipliers.js +44 -47
- package/dist/objects/characterNames.js +44 -47
- package/dist/objects/characterSpritePNGFileNames.js +44 -47
- package/dist/objects/characterStartingCollectibleTypes.js +49 -52
- package/dist/objects/characterStartingTrinketTypes.js +44 -47
- package/dist/objects/chestNames.js +15 -18
- package/dist/objects/coinNames.js +11 -14
- package/dist/objects/coinSubTypeToValue.js +11 -14
- package/dist/objects/collectibleDescriptions.js +725 -728
- package/dist/objects/collectibleNames.js +725 -728
- package/dist/objects/colors.js +1 -4
- package/dist/objects/directionNames.js +7 -10
- package/dist/objects/directionToDegrees.js +7 -10
- package/dist/objects/directionToMoveAction.js +7 -10
- package/dist/objects/directionToShootAction.js +7 -10
- package/dist/objects/directionToVector.js +9 -12
- package/dist/objects/doorSlotFlagToDoorSlot.js +11 -14
- package/dist/objects/doorSlotToDirection.js +11 -14
- package/dist/objects/doorSlotToDoorSlotFlag.js +11 -14
- package/dist/objects/gridEntityTypeToANM2Name.js +30 -33
- package/dist/objects/heartNames.js +16 -19
- package/dist/objects/isaacAPIClassTypeToBrand.js +8 -11
- package/dist/objects/isaacAPIClassTypeToFunctions.js +37 -40
- package/dist/objects/itemPoolTypeToCollectibleTypesSet.js +9 -45
- package/dist/objects/kColors.js +1 -4
- package/dist/objects/keyNames.js +8 -11
- package/dist/objects/languageNames.js +9 -12
- package/dist/objects/oppositeDoorSlots.js +11 -14
- package/dist/objects/pillEffectClasses.js +53 -56
- package/dist/objects/pillEffectNames.js +53 -56
- package/dist/objects/pillEffectTypeToPillEffects.js +11 -14
- package/dist/objects/pillEffectTypes.js +53 -56
- package/dist/objects/playerNamePNGFileNames.js +44 -47
- package/dist/objects/playerPortraitPNGFileNames.js +44 -47
- package/dist/objects/roomShapeBounds.js +23 -26
- package/dist/objects/roomShapeCorners.js +128 -131
- package/dist/objects/roomShapeLayoutSizes.js +23 -26
- package/dist/objects/roomShapeToBottomRightPosition.js +17 -20
- package/dist/objects/roomShapeToDoorSlotCoordinates.js +78 -81
- package/dist/objects/roomShapeToDoorSlots.js +48 -51
- package/dist/objects/roomShapeToDoorSlotsToGridIndexDelta.js +82 -85
- package/dist/objects/roomShapeToGridWidth.js +14 -17
- package/dist/objects/roomShapeToTopLeftPosition.js +18 -21
- package/dist/objects/roomShapeVolumes.js +21 -24
- package/dist/objects/roomTypeNames.js +32 -35
- package/dist/objects/roomTypeSpecialGotoPrefixes.js +32 -35
- package/dist/objects/sackNames.js +6 -9
- package/dist/objects/slotNames.js +21 -24
- package/dist/objects/stageIDNames.js +33 -36
- package/dist/objects/stageToMusic.js +69 -72
- package/dist/objects/stageToStageID.js +90 -93
- package/dist/objects/stageTypeSuffixes.js +8 -11
- package/dist/objects/transformationNames.js +16 -19
- package/dist/objects/trinketDescriptions.js +192 -195
- package/dist/objects/trinketNames.js +192 -195
- package/dist/objects/versusScreenBackgroundColors.js +39 -42
- package/dist/objects/versusScreenDirtSpotColors.js +39 -42
- package/dist/patchErrorFunctions.js +4 -7
- package/dist/serialization.js +6 -9
- package/dist/sets/LRoomShapesSet.js +7 -10
- package/dist/sets/bigRoomShapesSet.js +10 -13
- package/dist/sets/bossSets.js +261 -264
- package/dist/sets/charactersThatStartWithAnActiveItemSet.js +14 -17
- package/dist/sets/charactersWithBlackHeartFromEternalHeartSet.js +5 -8
- package/dist/sets/charactersWithFreeDevilDealsSet.js +3 -6
- package/dist/sets/charactersWithNoRedHeartsSet.js +11 -14
- package/dist/sets/charactersWithNoSoulHeartsSet.js +8 -11
- package/dist/sets/consoleCommandsSet.js +2 -5
- package/dist/sets/entitiesWithArmorSet.js +44 -47
- package/dist/sets/familiarsThatShootPlayerTearsSet.js +11 -14
- package/dist/sets/itemConfigCardTypesForCards.js +7 -10
- package/dist/sets/lostStyleCharactersSet.js +8 -11
- package/dist/sets/mineShaftRoomSubTypesSet.js +8 -11
- package/dist/sets/narrowRoomShapesSet.js +7 -10
- package/dist/sets/poopGridEntityXMLTypesSet.js +12 -15
- package/dist/sets/redHeartSubTypesSet.js +6 -9
- package/dist/sets/repentanceBossIDsSet.js +26 -29
- package/dist/sets/sinEntityTypesSet.js +10 -13
- package/dist/sets/singleUseActiveCollectibleTypesSet.js +11 -14
- package/dist/shaderCrashFix.js +4 -7
- package/dist/shouldFire.js +28 -58
- package/dist/types/AddSubtract.js +1 -2
- package/dist/types/AllButFirst.js +1 -2
- package/dist/types/AllButLast.js +1 -2
- package/dist/types/AnyClass.js +1 -2
- package/dist/types/AnyEntity.js +1 -2
- package/dist/types/AnyFunction.js +1 -2
- package/dist/types/AnyGridEntity.js +1 -2
- package/dist/types/CompositionTypeSatisfiesEnum.js +1 -2
- package/dist/types/ConversionHeartSubType.js +1 -2
- package/dist/types/Decrement.js +1 -2
- package/dist/types/ERange.js +1 -2
- package/dist/types/EntityID.js +1 -2
- package/dist/types/FunctionTuple.js +1 -2
- package/dist/types/GridEntityID.js +1 -2
- package/dist/types/HasFunction.js +1 -2
- package/dist/types/IRange.js +1 -2
- package/dist/types/Immutable.js +1 -2
- package/dist/types/Increment.js +1 -2
- package/dist/types/LowercaseKeys.js +1 -2
- package/dist/types/NaturalNumbersLessThan.js +1 -2
- package/dist/types/NaturalNumbersLessThanOrEqualTo.js +1 -2
- package/dist/types/ObjectValues.js +1 -2
- package/dist/types/PickingUpItem.js +15 -22
- package/dist/types/PickupIndex.js +1 -2
- package/dist/types/PlayerIndex.js +1 -2
- package/dist/types/PossibleStatType.js +1 -2
- package/dist/types/PublicInterface.js +1 -2
- package/dist/types/ReadonlyMap.js +1 -4
- package/dist/types/ReadonlyRecord.js +1 -2
- package/dist/types/ReadonlySet.js +1 -4
- package/dist/types/StartsWithLowercase.js +1 -2
- package/dist/types/StartsWithUppercase.js +1 -2
- package/dist/types/TSTLClass.js +1 -2
- package/dist/types/Tuple.js +1 -2
- package/dist/types/TupleKeys.js +1 -2
- package/dist/types/TupleToIntersection.js +1 -2
- package/dist/types/TupleToUnion.js +1 -2
- package/dist/types/TupleWithLengthBetween.js +1 -2
- package/dist/types/TupleWithMaxLength.js +1 -2
- package/dist/types/UnionToIntersection.js +1 -2
- package/dist/types/UppercaseKeys.js +1 -2
- package/dist/types/WeightedArray.js +1 -2
- package/dist/types/WidenLiteral.js +1 -2
- package/dist/types/Writable.js +1 -2
- package/dist/types/private/CallbackTuple.js +1 -2
- package/dist/types/private/ModUpgradedWithFeatures.js +1 -2
- package/package.json +3 -3
- package/src/interfaces/PlayerHealth.ts +12 -11
|
@@ -1,47 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
exports.getFirstCardOrPill = getFirstCardOrPill;
|
|
6
|
-
exports.getFirstPill = getFirstPill;
|
|
7
|
-
exports.getPocketItems = getPocketItems;
|
|
8
|
-
exports.hasOpenPocketItemSlot = hasOpenPocketItemSlot;
|
|
9
|
-
exports.isFirstSlotPocketActiveItem = isFirstSlotPocketActiveItem;
|
|
10
|
-
exports.pocketItemsEquals = pocketItemsEquals;
|
|
11
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
12
|
-
const cachedEnumValues_1 = require("../cachedEnumValues");
|
|
13
|
-
const PocketItemType_1 = require("../enums/PocketItemType");
|
|
14
|
-
const players_1 = require("./players");
|
|
1
|
+
import { ActiveSlot, CardType, CollectibleType, PillColor, PlayerType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { POCKET_ITEM_SLOT_VALUES } from "../cachedEnumValues";
|
|
3
|
+
import { PocketItemType } from "../enums/PocketItemType";
|
|
4
|
+
import { isCharacter } from "./players";
|
|
15
5
|
/**
|
|
16
6
|
* Helper function to get the `PocketItemSlot` that the player's pocket active collectible item is
|
|
17
7
|
* in, if any. Returns undefined if the player does not have a pocket active item.
|
|
18
8
|
*/
|
|
19
|
-
function getActivePocketItemSlot(player) {
|
|
9
|
+
export function getActivePocketItemSlot(player) {
|
|
20
10
|
const pocketItems = getPocketItems(player);
|
|
21
11
|
for (const pocketItem of pocketItems) {
|
|
22
|
-
if (pocketItem.type ===
|
|
12
|
+
if (pocketItem.type === PocketItemType.ACTIVE_ITEM) {
|
|
23
13
|
return pocketItem.slot;
|
|
24
14
|
}
|
|
25
15
|
}
|
|
26
16
|
return undefined;
|
|
27
17
|
}
|
|
28
18
|
/** Helper item to get the first card that a player is holding in their pocket item slots. */
|
|
29
|
-
function getFirstCard(player) {
|
|
19
|
+
export function getFirstCard(player) {
|
|
30
20
|
const pocketItems = getPocketItems(player);
|
|
31
|
-
return pocketItems.find((pocketItem) => pocketItem.type ===
|
|
21
|
+
return pocketItems.find((pocketItem) => pocketItem.type === PocketItemType.CARD);
|
|
32
22
|
}
|
|
33
23
|
/**
|
|
34
24
|
* Helper item to get the first card or pill that a player is holding in their pocket item slots.
|
|
35
25
|
*/
|
|
36
|
-
function getFirstCardOrPill(player) {
|
|
26
|
+
export function getFirstCardOrPill(player) {
|
|
37
27
|
const pocketItems = getPocketItems(player);
|
|
38
|
-
return pocketItems.find((pocketItem) => pocketItem.type ===
|
|
39
|
-
|| pocketItem.type ===
|
|
28
|
+
return pocketItems.find((pocketItem) => pocketItem.type === PocketItemType.CARD
|
|
29
|
+
|| pocketItem.type === PocketItemType.PILL);
|
|
40
30
|
}
|
|
41
31
|
/** Helper item to get the first pill that a player is holding in their pocket item slots. */
|
|
42
|
-
function getFirstPill(player) {
|
|
32
|
+
export function getFirstPill(player) {
|
|
43
33
|
const pocketItems = getPocketItems(player);
|
|
44
|
-
return pocketItems.find((pocketItem) => pocketItem.type ===
|
|
34
|
+
return pocketItems.find((pocketItem) => pocketItem.type === PocketItemType.PILL);
|
|
45
35
|
}
|
|
46
36
|
/**
|
|
47
37
|
* Use this helper function as a workaround for the `EntityPlayer.GetPocketItem` method not working
|
|
@@ -53,29 +43,29 @@ function getFirstPill(player) {
|
|
|
53
43
|
* cannot determine the identity of a particular slot, it will mark the type of the slot as
|
|
54
44
|
* `PocketItemType.UNDETERMINABLE`.
|
|
55
45
|
*/
|
|
56
|
-
function getPocketItems(player) {
|
|
57
|
-
const pocketItem = player.GetActiveItem(
|
|
58
|
-
const hasPocketItem = pocketItem !==
|
|
59
|
-
const pocketItem2 = player.GetActiveItem(
|
|
60
|
-
const hasPocketItem2 = pocketItem2 !==
|
|
46
|
+
export function getPocketItems(player) {
|
|
47
|
+
const pocketItem = player.GetActiveItem(ActiveSlot.POCKET);
|
|
48
|
+
const hasPocketItem = pocketItem !== CollectibleType.NULL;
|
|
49
|
+
const pocketItem2 = player.GetActiveItem(ActiveSlot.POCKET_SINGLE_USE);
|
|
50
|
+
const hasPocketItem2 = pocketItem2 !== CollectibleType.NULL;
|
|
61
51
|
const maxPocketItems = player.GetMaxPocketItems();
|
|
62
52
|
const pocketItems = [];
|
|
63
53
|
let pocketItemIdentified = false;
|
|
64
54
|
let pocketItem2Identified = false;
|
|
65
|
-
for (const slot of
|
|
55
|
+
for (const slot of POCKET_ITEM_SLOT_VALUES) {
|
|
66
56
|
const cardType = player.GetCard(slot);
|
|
67
57
|
const pillColor = player.GetPill(slot);
|
|
68
|
-
if (cardType !==
|
|
58
|
+
if (cardType !== CardType.NULL) {
|
|
69
59
|
pocketItems.push({
|
|
70
60
|
slot,
|
|
71
|
-
type:
|
|
61
|
+
type: PocketItemType.CARD,
|
|
72
62
|
subType: cardType,
|
|
73
63
|
});
|
|
74
64
|
}
|
|
75
|
-
else if (pillColor !==
|
|
65
|
+
else if (pillColor !== PillColor.NULL) {
|
|
76
66
|
pocketItems.push({
|
|
77
67
|
slot,
|
|
78
|
-
type:
|
|
68
|
+
type: PocketItemType.PILL,
|
|
79
69
|
subType: pillColor,
|
|
80
70
|
});
|
|
81
71
|
}
|
|
@@ -83,7 +73,7 @@ function getPocketItems(player) {
|
|
|
83
73
|
pocketItemIdentified = true;
|
|
84
74
|
pocketItems.push({
|
|
85
75
|
slot,
|
|
86
|
-
type:
|
|
76
|
+
type: PocketItemType.ACTIVE_ITEM,
|
|
87
77
|
subType: pocketItem,
|
|
88
78
|
});
|
|
89
79
|
}
|
|
@@ -91,21 +81,21 @@ function getPocketItems(player) {
|
|
|
91
81
|
pocketItem2Identified = true;
|
|
92
82
|
pocketItems.push({
|
|
93
83
|
slot,
|
|
94
|
-
type:
|
|
84
|
+
type: PocketItemType.DICE_BAG_DICE,
|
|
95
85
|
subType: pocketItem2,
|
|
96
86
|
});
|
|
97
87
|
}
|
|
98
88
|
else if (hasPocketItem && hasPocketItem2) {
|
|
99
89
|
pocketItems.push({
|
|
100
90
|
slot,
|
|
101
|
-
type:
|
|
91
|
+
type: PocketItemType.UNDETERMINABLE,
|
|
102
92
|
subType: 0,
|
|
103
93
|
});
|
|
104
94
|
}
|
|
105
95
|
else {
|
|
106
96
|
pocketItems.push({
|
|
107
97
|
slot,
|
|
108
|
-
type:
|
|
98
|
+
type: PocketItemType.EMPTY,
|
|
109
99
|
subType: 0,
|
|
110
100
|
});
|
|
111
101
|
}
|
|
@@ -123,27 +113,27 @@ function getPocketItems(player) {
|
|
|
123
113
|
* If the player is the Tainted Soul, this always returns false, since that character cannot pick up
|
|
124
114
|
* items. (Only Tainted Forgotten can pick up items.)
|
|
125
115
|
*/
|
|
126
|
-
function hasOpenPocketItemSlot(player) {
|
|
127
|
-
if (
|
|
116
|
+
export function hasOpenPocketItemSlot(player) {
|
|
117
|
+
if (isCharacter(player, PlayerType.SOUL_B)) {
|
|
128
118
|
return false;
|
|
129
119
|
}
|
|
130
120
|
const pocketItems = getPocketItems(player);
|
|
131
|
-
return pocketItems.some((pocketItem) => pocketItem.type ===
|
|
121
|
+
return pocketItems.some((pocketItem) => pocketItem.type === PocketItemType.EMPTY);
|
|
132
122
|
}
|
|
133
123
|
/**
|
|
134
124
|
* Helper function to determine whether the player's "active" pocket item slot is set to their
|
|
135
125
|
* pocket active item.
|
|
136
126
|
*/
|
|
137
|
-
function isFirstSlotPocketActiveItem(player) {
|
|
127
|
+
export function isFirstSlotPocketActiveItem(player) {
|
|
138
128
|
const pocketItems = getPocketItems(player);
|
|
139
129
|
const firstPocketItem = pocketItems[0];
|
|
140
130
|
if (firstPocketItem === undefined) {
|
|
141
131
|
return false;
|
|
142
132
|
}
|
|
143
|
-
return firstPocketItem.type ===
|
|
133
|
+
return firstPocketItem.type === PocketItemType.ACTIVE_ITEM;
|
|
144
134
|
}
|
|
145
135
|
/** Helper function to see if two sets of pocket item descriptions are identical. */
|
|
146
|
-
function pocketItemsEquals(pocketItems1, pocketItems2) {
|
|
136
|
+
export function pocketItemsEquals(pocketItems1, pocketItems2) {
|
|
147
137
|
if (pocketItems1.length !== pocketItems2.length) {
|
|
148
138
|
return false;
|
|
149
139
|
}
|
|
@@ -1,21 +1,12 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports.setEntityPositions = setEntityPositions;
|
|
9
|
-
exports.setEntityVelocities = setEntityVelocities;
|
|
10
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
11
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
12
|
-
const constants_1 = require("../core/constants");
|
|
13
|
-
const entities_1 = require("./entities");
|
|
14
|
-
const entitiesSpecific_1 = require("./entitiesSpecific");
|
|
15
|
-
const playerIndex_1 = require("./playerIndex");
|
|
16
|
-
const players_1 = require("./players");
|
|
1
|
+
import { EffectVariant, HeavenLightDoorSubType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../core/cachedClasses";
|
|
3
|
+
import { DISTANCE_OF_GRID_TILE } from "../core/constants";
|
|
4
|
+
import { getEntities } from "./entities";
|
|
5
|
+
import { getEffects } from "./entitiesSpecific";
|
|
6
|
+
import { getPlayers } from "./playerIndex";
|
|
7
|
+
import { getPlayerCloserThan } from "./players";
|
|
17
8
|
const MAX_FIND_FREE_POSITION_ATTEMPTS = 100;
|
|
18
|
-
function anyEntityCloserThan(entities, position, distance) {
|
|
9
|
+
export function anyEntityCloserThan(entities, position, distance) {
|
|
19
10
|
return entities.some((entity) => position.Distance(entity.Position) <= distance);
|
|
20
11
|
}
|
|
21
12
|
/**
|
|
@@ -24,8 +15,8 @@ function anyEntityCloserThan(entities, position, distance) {
|
|
|
24
15
|
* Note that this function does not consider players with a non-undefined parent, since they are not
|
|
25
16
|
* real players (e.g. the Strawman Keeper).
|
|
26
17
|
*/
|
|
27
|
-
function anyPlayerCloserThan(position, distance) {
|
|
28
|
-
const players =
|
|
18
|
+
export function anyPlayerCloserThan(position, distance) {
|
|
19
|
+
const players = getPlayers();
|
|
29
20
|
return players.some((player) => player.Position.Distance(position) <= distance);
|
|
30
21
|
}
|
|
31
22
|
/**
|
|
@@ -41,16 +32,16 @@ function anyPlayerCloserThan(position, distance) {
|
|
|
41
32
|
* @param minimumDistance Optional. If specified, will ensure that the randomly generated position
|
|
42
33
|
* is equal to or greater than the distance provided.
|
|
43
34
|
*/
|
|
44
|
-
function findFreePosition(startingPosition, avoidActiveEntities = false, minimumDistance) {
|
|
45
|
-
const room =
|
|
46
|
-
const heavenDoors =
|
|
35
|
+
export function findFreePosition(startingPosition, avoidActiveEntities = false, minimumDistance) {
|
|
36
|
+
const room = game.GetRoom();
|
|
37
|
+
const heavenDoors = getEffects(EffectVariant.HEAVEN_LIGHT_DOOR, HeavenLightDoorSubType.HEAVEN_DOOR);
|
|
47
38
|
for (let initialStep = 0; initialStep < MAX_FIND_FREE_POSITION_ATTEMPTS; initialStep++) {
|
|
48
39
|
const position = room.FindFreePickupSpawnPosition(startingPosition, initialStep, avoidActiveEntities);
|
|
49
|
-
const closePlayer =
|
|
40
|
+
const closePlayer = getPlayerCloserThan(position, DISTANCE_OF_GRID_TILE);
|
|
50
41
|
if (closePlayer !== undefined) {
|
|
51
42
|
continue;
|
|
52
43
|
}
|
|
53
|
-
const isCloseHeavenDoor = anyEntityCloserThan(heavenDoors, position,
|
|
44
|
+
const isCloseHeavenDoor = anyEntityCloserThan(heavenDoors, position, DISTANCE_OF_GRID_TILE);
|
|
54
45
|
if (isCloseHeavenDoor) {
|
|
55
46
|
continue;
|
|
56
47
|
}
|
|
@@ -74,8 +65,8 @@ function findFreePosition(startingPosition, avoidActiveEntities = false, minimum
|
|
|
74
65
|
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
75
66
|
* multiple times.
|
|
76
67
|
*/
|
|
77
|
-
function getEntityPositions(entities) {
|
|
78
|
-
entities ??=
|
|
68
|
+
export function getEntityPositions(entities) {
|
|
69
|
+
entities ??= getEntities();
|
|
79
70
|
const entityPositions = new Map();
|
|
80
71
|
for (const entity of entities) {
|
|
81
72
|
const ptrHash = GetPtrHash(entity);
|
|
@@ -92,8 +83,8 @@ function getEntityPositions(entities) {
|
|
|
92
83
|
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
93
84
|
* multiple times.
|
|
94
85
|
*/
|
|
95
|
-
function getEntityVelocities(entities) {
|
|
96
|
-
entities ??=
|
|
86
|
+
export function getEntityVelocities(entities) {
|
|
87
|
+
entities ??= getEntities();
|
|
97
88
|
const entityVelocities = new Map();
|
|
98
89
|
for (const entity of entities) {
|
|
99
90
|
const ptrHash = GetPtrHash(entity);
|
|
@@ -114,8 +105,8 @@ function getEntityVelocities(entities) {
|
|
|
114
105
|
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
115
106
|
* multiple times.
|
|
116
107
|
*/
|
|
117
|
-
function setEntityPositions(entityPositions, entities) {
|
|
118
|
-
entities ??=
|
|
108
|
+
export function setEntityPositions(entityPositions, entities) {
|
|
109
|
+
entities ??= getEntities();
|
|
119
110
|
for (const entity of entities) {
|
|
120
111
|
const ptrHash = GetPtrHash(entity);
|
|
121
112
|
const entityPosition = entityPositions.get(ptrHash);
|
|
@@ -137,8 +128,8 @@ function setEntityPositions(entityPositions, entities) {
|
|
|
137
128
|
* this with cached entities to avoid invoking the `Isaac.GetRoomEntities` method
|
|
138
129
|
* multiple times.
|
|
139
130
|
*/
|
|
140
|
-
function setEntityVelocities(entityVelocities, entities) {
|
|
141
|
-
entities ??=
|
|
131
|
+
export function setEntityVelocities(entityVelocities, entities) {
|
|
132
|
+
entities ??= getEntities();
|
|
142
133
|
for (const entity of entities) {
|
|
143
134
|
const ptrHash = GetPtrHash(entity);
|
|
144
135
|
const entityVelocity = entityVelocities.get(ptrHash);
|
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
5
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
6
|
-
const gridEntitiesSpecific_1 = require("./gridEntitiesSpecific");
|
|
1
|
+
import { PressurePlateState, PressurePlateVariant, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../core/cachedClasses";
|
|
3
|
+
import { getPressurePlates } from "./gridEntitiesSpecific";
|
|
7
4
|
/**
|
|
8
5
|
* Helper function to check if all of the pressure plates in the room are pushed.
|
|
9
6
|
*
|
|
@@ -14,12 +11,12 @@ const gridEntitiesSpecific_1 = require("./gridEntitiesSpecific");
|
|
|
14
11
|
*
|
|
15
12
|
* Returns true if there are no pressure plates in the room.
|
|
16
13
|
*/
|
|
17
|
-
function isAllPressurePlatesPushed() {
|
|
18
|
-
const room =
|
|
14
|
+
export function isAllPressurePlatesPushed() {
|
|
15
|
+
const room = game.GetRoom();
|
|
19
16
|
const hasPressurePlates = room.HasTriggerPressurePlates();
|
|
20
17
|
if (!hasPressurePlates) {
|
|
21
18
|
return true;
|
|
22
19
|
}
|
|
23
|
-
const pressurePlates =
|
|
24
|
-
return pressurePlates.every((pressurePlate) => pressurePlate.State ===
|
|
20
|
+
const pressurePlates = getPressurePlates(PressurePlateVariant.PRESSURE_PLATE);
|
|
21
|
+
return pressurePlates.every((pressurePlate) => pressurePlate.State === PressurePlateState.PRESSURE_PLATE_PRESSED);
|
|
25
22
|
}
|
|
@@ -1,10 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
exports.fireProjectilesInCircle = fireProjectilesInCircle;
|
|
5
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
6
|
-
const entities_1 = require("./entities");
|
|
7
|
-
const entitiesSpecific_1 = require("./entitiesSpecific");
|
|
1
|
+
import { EntityFlag, EntityType, ProjectilesMode, } from "isaac-typescript-definitions";
|
|
2
|
+
import { getFilteredNewEntities } from "./entities";
|
|
3
|
+
import { getProjectiles, spawnNPC } from "./entitiesSpecific";
|
|
8
4
|
/**
|
|
9
5
|
* Helper function to make an NPC fire one or more projectiles. Returns the fired projectile(s).
|
|
10
6
|
*
|
|
@@ -22,22 +18,22 @@ const entitiesSpecific_1 = require("./entitiesSpecific");
|
|
|
22
18
|
* `ProjectileParams()`.
|
|
23
19
|
* @returns The fired projectile(s).
|
|
24
20
|
*/
|
|
25
|
-
function fireProjectiles(npc, position, velocity, projectilesMode =
|
|
26
|
-
const oldProjectiles =
|
|
21
|
+
export function fireProjectiles(npc, position, velocity, projectilesMode = ProjectilesMode.ONE_PROJECTILE, projectileParams = ProjectileParams()) {
|
|
22
|
+
const oldProjectiles = getProjectiles(projectileParams.Variant);
|
|
27
23
|
let spawnedFly = false;
|
|
28
24
|
if (npc === undefined) {
|
|
29
25
|
// Since the `EntityNPC.FireProjectiles` method is not static, we arbitrarily spawn a fly.
|
|
30
26
|
spawnedFly = true;
|
|
31
|
-
npc =
|
|
27
|
+
npc = spawnNPC(EntityType.FLY, 0, 0, position);
|
|
32
28
|
npc.Visible = false;
|
|
33
|
-
npc.ClearEntityFlags(
|
|
29
|
+
npc.ClearEntityFlags(EntityFlag.APPEAR);
|
|
34
30
|
}
|
|
35
31
|
npc.FireProjectiles(position, velocity, projectilesMode, projectileParams);
|
|
36
|
-
const newProjectiles =
|
|
32
|
+
const newProjectiles = getProjectiles(projectileParams.Variant);
|
|
37
33
|
if (spawnedFly) {
|
|
38
34
|
npc.Remove();
|
|
39
35
|
}
|
|
40
|
-
return
|
|
36
|
+
return getFilteredNewEntities(oldProjectiles, newProjectiles);
|
|
41
37
|
}
|
|
42
38
|
/**
|
|
43
39
|
* Helper function to spawn projectiles in a circle around a position. Under the hood, this
|
|
@@ -50,7 +46,7 @@ function fireProjectiles(npc, position, velocity, projectilesMode = isaac_typesc
|
|
|
50
46
|
* @param numProjectiles The amount of projectiles to spawn.
|
|
51
47
|
* @returns The fired projectile(s).
|
|
52
48
|
*/
|
|
53
|
-
function fireProjectilesInCircle(npc, position, speed, numProjectiles) {
|
|
49
|
+
export function fireProjectilesInCircle(npc, position, speed, numProjectiles) {
|
|
54
50
|
const velocity = Vector(speed, numProjectiles);
|
|
55
|
-
return fireProjectiles(npc, position, velocity,
|
|
51
|
+
return fireProjectiles(npc, position, velocity, ProjectilesMode.N_PROJECTILES_IN_CIRCLE);
|
|
56
52
|
}
|
package/dist/functions/random.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.getRandom = getRandom;
|
|
4
|
-
exports.getRandomFloat = getRandomFloat;
|
|
5
|
-
exports.getRandomInt = getRandomInt;
|
|
6
|
-
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
7
|
-
const rng_1 = require("./rng");
|
|
1
|
+
import { ReadonlySet } from "../types/ReadonlySet";
|
|
2
|
+
import { isRNG, newRNG } from "./rng";
|
|
8
3
|
/**
|
|
9
4
|
* Returns a random float between 0 and 1. It is inclusive on the low end, but exclusive on the high
|
|
10
5
|
* end. (This is because the `RNG.RandomFloat` method will never return a value of exactly 1.)
|
|
@@ -16,8 +11,8 @@ const rng_1 = require("./rng");
|
|
|
16
11
|
* `RNG.Next` method will be called. If `undefined` is provided, it will default to
|
|
17
12
|
* a random seed.
|
|
18
13
|
*/
|
|
19
|
-
function getRandom(seedOrRNG) {
|
|
20
|
-
const rng =
|
|
14
|
+
export function getRandom(seedOrRNG) {
|
|
15
|
+
const rng = isRNG(seedOrRNG) ? seedOrRNG : newRNG(seedOrRNG);
|
|
21
16
|
return rng.RandomFloat();
|
|
22
17
|
}
|
|
23
18
|
/**
|
|
@@ -38,7 +33,7 @@ function getRandom(seedOrRNG) {
|
|
|
38
33
|
* `RNG.Next` method will be called. If `undefined` is provided, it will default to
|
|
39
34
|
* a random seed.
|
|
40
35
|
*/
|
|
41
|
-
function getRandomFloat(min, max, seedOrRNG) {
|
|
36
|
+
export function getRandomFloat(min, max, seedOrRNG) {
|
|
42
37
|
if (min > max) {
|
|
43
38
|
const oldMin = min;
|
|
44
39
|
const oldMax = max;
|
|
@@ -70,8 +65,8 @@ function getRandomFloat(min, max, seedOrRNG) {
|
|
|
70
65
|
* `[2]` would cause the function to return either 1, 3, or 4. Default is an empty
|
|
71
66
|
* array.
|
|
72
67
|
*/
|
|
73
|
-
function getRandomInt(min, max, seedOrRNG, exceptions = []) {
|
|
74
|
-
const rng =
|
|
68
|
+
export function getRandomInt(min, max, seedOrRNG, exceptions = []) {
|
|
69
|
+
const rng = isRNG(seedOrRNG) ? seedOrRNG : newRNG(seedOrRNG);
|
|
75
70
|
min = Math.ceil(min);
|
|
76
71
|
max = Math.floor(max);
|
|
77
72
|
if (min > max) {
|
|
@@ -80,7 +75,7 @@ function getRandomInt(min, max, seedOrRNG, exceptions = []) {
|
|
|
80
75
|
min = oldMax;
|
|
81
76
|
max = oldMin;
|
|
82
77
|
}
|
|
83
|
-
const exceptionsSet = new
|
|
78
|
+
const exceptionsSet = new ReadonlySet(exceptions);
|
|
84
79
|
let randomInt;
|
|
85
80
|
do {
|
|
86
81
|
randomInt = rng.RandomInt(max - min + 1) + min;
|
|
@@ -1,15 +1,10 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.newReadonlyColor = newReadonlyColor;
|
|
4
|
-
exports.newReadonlyKColor = newReadonlyKColor;
|
|
5
|
-
exports.newReadonlyVector = newReadonlyVector;
|
|
6
1
|
/**
|
|
7
2
|
* Helper function to create a read-only `Color` object. (Otherwise, you would have to manually
|
|
8
3
|
* specify both the type and the constructor.)
|
|
9
4
|
*
|
|
10
5
|
* Note that read-only colors will be writable at run-time.
|
|
11
6
|
*/
|
|
12
|
-
function newReadonlyColor(r, g, b, a, ro, go, bo) {
|
|
7
|
+
export function newReadonlyColor(r, g, b, a, ro, go, bo) {
|
|
13
8
|
return Color(r, g, b, a, ro, go, bo);
|
|
14
9
|
}
|
|
15
10
|
/**
|
|
@@ -18,7 +13,7 @@ function newReadonlyColor(r, g, b, a, ro, go, bo) {
|
|
|
18
13
|
*
|
|
19
14
|
* Note that read-only colors will be writable at run-time.
|
|
20
15
|
*/
|
|
21
|
-
function newReadonlyKColor(r, g, b, a) {
|
|
16
|
+
export function newReadonlyKColor(r, g, b, a) {
|
|
22
17
|
return KColor(r, g, b, a);
|
|
23
18
|
}
|
|
24
19
|
/**
|
|
@@ -27,6 +22,6 @@ function newReadonlyKColor(r, g, b, a) {
|
|
|
27
22
|
*
|
|
28
23
|
* Note that read-only vectors will be writable at run-time.
|
|
29
24
|
*/
|
|
30
|
-
function newReadonlyVector(x, y) {
|
|
25
|
+
export function newReadonlyVector(x, y) {
|
|
31
26
|
return Vector(x, y);
|
|
32
27
|
}
|
package/dist/functions/render.js
CHANGED
|
@@ -1,10 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.isReflectionRender = isReflectionRender;
|
|
4
|
-
exports.renderScaledTextOnEntity = renderScaledTextOnEntity;
|
|
5
|
-
exports.renderTextOnEntity = renderTextOnEntity;
|
|
6
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
7
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
1
|
+
import { RenderMode } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../core/cachedClasses";
|
|
8
3
|
/**
|
|
9
4
|
* Helper function to see if the current render callback is rendering a water reflection.
|
|
10
5
|
*
|
|
@@ -14,19 +9,19 @@ const cachedClasses_1 = require("../core/cachedClasses");
|
|
|
14
9
|
*
|
|
15
10
|
* This function is typically used to early return from a render function if it returns true.
|
|
16
11
|
*/
|
|
17
|
-
function isReflectionRender() {
|
|
18
|
-
const room =
|
|
12
|
+
export function isReflectionRender() {
|
|
13
|
+
const room = game.GetRoom();
|
|
19
14
|
const renderMode = room.GetRenderMode();
|
|
20
|
-
return renderMode ===
|
|
15
|
+
return renderMode === RenderMode.WATER_REFLECT;
|
|
21
16
|
}
|
|
22
|
-
function renderScaledTextOnEntity(entity, text, scaleX, scaleY) {
|
|
17
|
+
export function renderScaledTextOnEntity(entity, text, scaleX, scaleY) {
|
|
23
18
|
if (isReflectionRender()) {
|
|
24
19
|
return;
|
|
25
20
|
}
|
|
26
21
|
const position = Isaac.WorldToScreen(entity.Position);
|
|
27
22
|
Isaac.RenderScaledText(text, position.X, position.Y, scaleX, scaleY, 1, 1, 1, 1);
|
|
28
23
|
}
|
|
29
|
-
function renderTextOnEntity(entity, text) {
|
|
24
|
+
export function renderTextOnEntity(entity, text) {
|
|
30
25
|
if (isReflectionRender()) {
|
|
31
26
|
return;
|
|
32
27
|
}
|
package/dist/functions/revive.js
CHANGED
|
@@ -1,34 +1,27 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
const characters_1 = require("./characters");
|
|
12
|
-
const frames_1 = require("./frames");
|
|
13
|
-
const playerHealth_1 = require("./playerHealth");
|
|
14
|
-
const players_1 = require("./players");
|
|
15
|
-
const sprites_1 = require("./sprites");
|
|
16
|
-
const trinketGive_1 = require("./trinketGive");
|
|
17
|
-
const trinkets_1 = require("./trinkets");
|
|
1
|
+
import { CollectibleType, EntityType, NullItemID, PlayerType, TrinketType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { MAX_TAINTED_SAMSON_BERSERK_CHARGE, TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE, } from "../core/constants";
|
|
3
|
+
import { MysteriousPaperEffect } from "../enums/MysteriousPaperEffect";
|
|
4
|
+
import { getCharacterDeathAnimationName } from "./characters";
|
|
5
|
+
import { onGameFrame } from "./frames";
|
|
6
|
+
import { getPlayerMaxHeartContainers } from "./playerHealth";
|
|
7
|
+
import { getPlayerNumHitsRemaining, hasLostCurse, isKeeper } from "./players";
|
|
8
|
+
import { getLastFrameOfAnimation } from "./sprites";
|
|
9
|
+
import { giveTrinketsBack, temporarilyRemoveTrinket } from "./trinketGive";
|
|
10
|
+
import { getMysteriousPaperEffectForFrame } from "./trinkets";
|
|
18
11
|
/**
|
|
19
12
|
* Uses the player's current health and other miscellaneous things to determine if incoming damage
|
|
20
13
|
* will be fatal.
|
|
21
14
|
*/
|
|
22
|
-
function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
15
|
+
export function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
23
16
|
const character = player.GetPlayerType();
|
|
24
17
|
// If we are Tainted Jacob and the damage source is Dark Esau, this will not be fatal damage
|
|
25
18
|
// (because we will transform into Tainted Jacob's lost form).
|
|
26
|
-
if (character ===
|
|
27
|
-
&& source.Type ===
|
|
19
|
+
if (character === PlayerType.JACOB_B
|
|
20
|
+
&& source.Type === EntityType.DARK_ESAU) {
|
|
28
21
|
return false;
|
|
29
22
|
}
|
|
30
23
|
const effects = player.GetEffects();
|
|
31
|
-
const isBerserk = effects.HasCollectibleEffect(
|
|
24
|
+
const isBerserk = effects.HasCollectibleEffect(CollectibleType.BERSERK);
|
|
32
25
|
// If we are berserk, no damage is fatal. (The death is deferred until the end of the berserk
|
|
33
26
|
// effect.)
|
|
34
27
|
if (isBerserk) {
|
|
@@ -37,9 +30,9 @@ function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
|
37
30
|
// If we are playing Tainted Samson and the incoming hit will cause us to become Berserk, then
|
|
38
31
|
// this will not be fatal damage.
|
|
39
32
|
const berserkChargeAfterHit = player.SamsonBerserkCharge
|
|
40
|
-
+
|
|
41
|
-
if (character ===
|
|
42
|
-
&& berserkChargeAfterHit >=
|
|
33
|
+
+ TAINTED_SAMSON_BERSERK_CHARGE_FROM_TAKING_DAMAGE;
|
|
34
|
+
if (character === PlayerType.SAMSON_B
|
|
35
|
+
&& berserkChargeAfterHit >= MAX_TAINTED_SAMSON_BERSERK_CHARGE) {
|
|
43
36
|
return false;
|
|
44
37
|
}
|
|
45
38
|
// If Spirit Shackles is activated, no damage is fatal.
|
|
@@ -48,14 +41,14 @@ function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
|
48
41
|
}
|
|
49
42
|
// If we are Tainted Jacob in the Lost Form, we may have plenty of health left, but we will still
|
|
50
43
|
// die in one hit to anything.
|
|
51
|
-
if (character ===
|
|
44
|
+
if (character === PlayerType.JACOB_2_B) {
|
|
52
45
|
return true;
|
|
53
46
|
}
|
|
54
47
|
// If we are in the "Lost Curse" form from touching a white fire, all damage will be fatal.
|
|
55
|
-
if (
|
|
48
|
+
if (hasLostCurse(player)) {
|
|
56
49
|
return true;
|
|
57
50
|
}
|
|
58
|
-
const playerNumAllHearts =
|
|
51
|
+
const playerNumAllHearts = getPlayerNumHitsRemaining(player);
|
|
59
52
|
if (amount < playerNumAllHearts) {
|
|
60
53
|
return false;
|
|
61
54
|
}
|
|
@@ -66,8 +59,8 @@ function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
|
66
59
|
}
|
|
67
60
|
// This will not be fatal damage if we have Glass Cannon and this is the second time we are taking
|
|
68
61
|
// damage on the same frame.
|
|
69
|
-
if (player.HasCollectible(
|
|
70
|
-
&&
|
|
62
|
+
if (player.HasCollectible(CollectibleType.BROKEN_GLASS_CANNON)
|
|
63
|
+
&& onGameFrame(lastDamageGameFrame)) {
|
|
71
64
|
return false;
|
|
72
65
|
}
|
|
73
66
|
// This will not be fatal damage if we have two different kinds of hearts. For example, a bomb
|
|
@@ -92,29 +85,29 @@ function isDamageToPlayerFatal(player, amount, source, lastDamageGameFrame) {
|
|
|
92
85
|
* Mysterious Paper rotates between the 4 items on every frame, in order. The formula for whether
|
|
93
86
|
* Mysterious Paper be Missing Power is: `gameFrameCount % 4 === 3`
|
|
94
87
|
*/
|
|
95
|
-
function willMysteriousPaperRevive(player) {
|
|
88
|
+
export function willMysteriousPaperRevive(player) {
|
|
96
89
|
const sprite = player.GetSprite();
|
|
97
90
|
// We want to explicitly check the length of the death animation because we might be playing on a
|
|
98
91
|
// modded character that has a custom death animation.
|
|
99
92
|
const character = player.GetPlayerType();
|
|
100
|
-
const animation =
|
|
101
|
-
const deathAnimationFrames =
|
|
93
|
+
const animation = getCharacterDeathAnimationName(character);
|
|
94
|
+
const deathAnimationFrames = getLastFrameOfAnimation(sprite, animation);
|
|
102
95
|
const frameOfDeath = player.FrameCount + deathAnimationFrames;
|
|
103
|
-
const mysteriousPaperEffect =
|
|
96
|
+
const mysteriousPaperEffect = getMysteriousPaperEffectForFrame(player, frameOfDeath);
|
|
104
97
|
if (mysteriousPaperEffect === undefined) {
|
|
105
98
|
return false;
|
|
106
99
|
}
|
|
107
|
-
return mysteriousPaperEffect ===
|
|
100
|
+
return mysteriousPaperEffect === MysteriousPaperEffect.MISSING_POSTER;
|
|
108
101
|
}
|
|
109
102
|
/**
|
|
110
103
|
* The `EntityPlayer.WillPlayerRevive` method does not properly account for Mysterious Paper, so use
|
|
111
104
|
* this helper function instead for more robust revival detection.
|
|
112
105
|
*/
|
|
113
|
-
function willPlayerRevive(player) {
|
|
114
|
-
const trinketSituation =
|
|
106
|
+
export function willPlayerRevive(player) {
|
|
107
|
+
const trinketSituation = temporarilyRemoveTrinket(player, TrinketType.MYSTERIOUS_PAPER);
|
|
115
108
|
const willRevive = player.WillPlayerRevive()
|
|
116
109
|
|| (trinketSituation !== undefined && willMysteriousPaperRevive(player));
|
|
117
|
-
|
|
110
|
+
giveTrinketsBack(player, trinketSituation);
|
|
118
111
|
return willRevive;
|
|
119
112
|
}
|
|
120
113
|
/**
|
|
@@ -122,12 +115,12 @@ function willPlayerRevive(player) {
|
|
|
122
115
|
* take fatal damage. This is contingent on the character that they are playing as and the amount of
|
|
123
116
|
* broken hearts that they already have.
|
|
124
117
|
*/
|
|
125
|
-
function willReviveFromHeartbreak(player) {
|
|
126
|
-
if (!player.HasCollectible(
|
|
118
|
+
export function willReviveFromHeartbreak(player) {
|
|
119
|
+
if (!player.HasCollectible(CollectibleType.HEARTBREAK)) {
|
|
127
120
|
return false;
|
|
128
121
|
}
|
|
129
|
-
const maxHeartContainers =
|
|
130
|
-
const numBrokenHeartsThatWillBeAdded =
|
|
122
|
+
const maxHeartContainers = getPlayerMaxHeartContainers(player);
|
|
123
|
+
const numBrokenHeartsThatWillBeAdded = isKeeper(player) ? 1 : 2;
|
|
131
124
|
const brokenHearts = player.GetBrokenHearts();
|
|
132
125
|
const numBrokenHeartsAfterRevival = numBrokenHeartsThatWillBeAdded + brokenHearts;
|
|
133
126
|
return maxHeartContainers > numBrokenHeartsAfterRevival;
|
|
@@ -136,12 +129,12 @@ function willReviveFromHeartbreak(player) {
|
|
|
136
129
|
* Helper function to determine if the Spirit Shackles item is in an enabled state. (It can be
|
|
137
130
|
* either enabled or disabled.)
|
|
138
131
|
*/
|
|
139
|
-
function willReviveFromSpiritShackles(player) {
|
|
140
|
-
if (!player.HasCollectible(
|
|
132
|
+
export function willReviveFromSpiritShackles(player) {
|
|
133
|
+
if (!player.HasCollectible(CollectibleType.SPIRIT_SHACKLES)) {
|
|
141
134
|
return false;
|
|
142
135
|
}
|
|
143
136
|
const effects = player.GetEffects();
|
|
144
|
-
const spiritShacklesEnabled = !effects.HasNullEffect(
|
|
145
|
-
const playerInSoulForm = effects.HasNullEffect(
|
|
137
|
+
const spiritShacklesEnabled = !effects.HasNullEffect(NullItemID.SPIRIT_SHACKLES_DISABLED);
|
|
138
|
+
const playerInSoulForm = effects.HasNullEffect(NullItemID.SPIRIT_SHACKLES_SOUL);
|
|
146
139
|
return spiritShacklesEnabled && !playerInSoulForm;
|
|
147
140
|
}
|