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,69 +1,47 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
exports.getPlayerHearts = getPlayerHearts;
|
|
12
|
-
exports.getPlayerLastHeart = getPlayerLastHeart;
|
|
13
|
-
exports.getPlayerMaxHeartContainers = getPlayerMaxHeartContainers;
|
|
14
|
-
exports.getPlayerSoulHearts = getPlayerSoulHearts;
|
|
15
|
-
exports.getTaintedMagdaleneNonTemporaryMaxHearts = getTaintedMagdaleneNonTemporaryMaxHearts;
|
|
16
|
-
exports.newPlayerHealth = newPlayerHealth;
|
|
17
|
-
exports.playerConvertBlackHeartsToSoulHearts = playerConvertBlackHeartsToSoulHearts;
|
|
18
|
-
exports.playerConvertSoulHeartsToBlackHearts = playerConvertSoulHeartsToBlackHearts;
|
|
19
|
-
exports.playerHasHealthLeft = playerHasHealthLeft;
|
|
20
|
-
exports.removeAllPlayerHealth = removeAllPlayerHealth;
|
|
21
|
-
exports.setPlayerHealth = setPlayerHealth;
|
|
22
|
-
exports.wouldDamageTaintedMagdaleneNonTemporaryHeartContainers = wouldDamageTaintedMagdaleneNonTemporaryHeartContainers;
|
|
23
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
24
|
-
const constants_1 = require("../core/constants");
|
|
25
|
-
const HealthType_1 = require("../enums/HealthType");
|
|
26
|
-
const bitwise_1 = require("./bitwise");
|
|
27
|
-
const characters_1 = require("./characters");
|
|
28
|
-
const charge_1 = require("./charge");
|
|
29
|
-
const playerCollectibles_1 = require("./playerCollectibles");
|
|
30
|
-
const players_1 = require("./players");
|
|
31
|
-
const utils_1 = require("./utils");
|
|
32
|
-
function addPlayerHealthType(player, healthType, numHearts) {
|
|
1
|
+
import { CollectibleType, HeartSubType, PlayerType, TrinketType, } from "isaac-typescript-definitions";
|
|
2
|
+
import { MAX_PLAYER_HEART_CONTAINERS } from "../core/constants";
|
|
3
|
+
import { HealthType } from "../enums/HealthType";
|
|
4
|
+
import { countSetBits, getKBitOfN, getNumBitsOfN } from "./bitwise";
|
|
5
|
+
import { getCharacterMaxHeartContainers } from "./characters";
|
|
6
|
+
import { getTotalCharge } from "./charge";
|
|
7
|
+
import { getActiveItemSlots, setActiveItem } from "./playerCollectibles";
|
|
8
|
+
import { isCharacter, isKeeper } from "./players";
|
|
9
|
+
import { repeat } from "./utils";
|
|
10
|
+
export function addPlayerHealthType(player, healthType, numHearts) {
|
|
33
11
|
switch (healthType) {
|
|
34
|
-
case
|
|
12
|
+
case HealthType.RED: {
|
|
35
13
|
player.AddHearts(numHearts);
|
|
36
14
|
break;
|
|
37
15
|
}
|
|
38
|
-
case
|
|
16
|
+
case HealthType.SOUL: {
|
|
39
17
|
player.AddSoulHearts(numHearts);
|
|
40
18
|
break;
|
|
41
19
|
}
|
|
42
|
-
case
|
|
20
|
+
case HealthType.ETERNAL: {
|
|
43
21
|
player.AddEternalHearts(numHearts);
|
|
44
22
|
break;
|
|
45
23
|
}
|
|
46
|
-
case
|
|
24
|
+
case HealthType.BLACK: {
|
|
47
25
|
player.AddBlackHearts(numHearts);
|
|
48
26
|
break;
|
|
49
27
|
}
|
|
50
|
-
case
|
|
28
|
+
case HealthType.GOLDEN: {
|
|
51
29
|
player.AddGoldenHearts(numHearts);
|
|
52
30
|
break;
|
|
53
31
|
}
|
|
54
|
-
case
|
|
32
|
+
case HealthType.BONE: {
|
|
55
33
|
player.AddBoneHearts(numHearts);
|
|
56
34
|
break;
|
|
57
35
|
}
|
|
58
|
-
case
|
|
36
|
+
case HealthType.ROTTEN: {
|
|
59
37
|
player.AddRottenHearts(numHearts);
|
|
60
38
|
break;
|
|
61
39
|
}
|
|
62
|
-
case
|
|
40
|
+
case HealthType.BROKEN: {
|
|
63
41
|
player.AddBrokenHearts(numHearts);
|
|
64
42
|
break;
|
|
65
43
|
}
|
|
66
|
-
case
|
|
44
|
+
case HealthType.MAX_HEARTS: {
|
|
67
45
|
player.AddMaxHearts(numHearts, false);
|
|
68
46
|
break;
|
|
69
47
|
}
|
|
@@ -76,7 +54,7 @@ function addPlayerHealthType(player, healthType, numHearts) {
|
|
|
76
54
|
*
|
|
77
55
|
* This function's name matches the existing `EntityPlayer` methods.
|
|
78
56
|
*/
|
|
79
|
-
function canPickEternalHearts(player) {
|
|
57
|
+
export function canPickEternalHearts(player) {
|
|
80
58
|
const eternalHearts = player.GetEternalHearts();
|
|
81
59
|
const maxHearts = player.GetMaxHearts();
|
|
82
60
|
const heartLimit = player.GetHeartLimit();
|
|
@@ -95,7 +73,7 @@ function canPickEternalHearts(player) {
|
|
|
95
73
|
* - If the player has one red heart container and three black hearts, this function would return
|
|
96
74
|
* true.
|
|
97
75
|
*/
|
|
98
|
-
function doesPlayerHaveAllBlackHearts(player) {
|
|
76
|
+
export function doesPlayerHaveAllBlackHearts(player) {
|
|
99
77
|
const soulHearts = getPlayerSoulHearts(player);
|
|
100
78
|
const blackHearts = getPlayerBlackHearts(player);
|
|
101
79
|
return blackHearts > 0 && soulHearts === 0;
|
|
@@ -112,7 +90,7 @@ function doesPlayerHaveAllBlackHearts(player) {
|
|
|
112
90
|
* - If the player has one red heart container and three soul hearts, this function would return
|
|
113
91
|
* true.
|
|
114
92
|
*/
|
|
115
|
-
function doesPlayerHaveAllSoulHearts(player) {
|
|
93
|
+
export function doesPlayerHaveAllSoulHearts(player) {
|
|
116
94
|
const soulHearts = getPlayerSoulHearts(player);
|
|
117
95
|
const blackHearts = getPlayerBlackHearts(player);
|
|
118
96
|
return soulHearts > 0 && blackHearts === 0;
|
|
@@ -122,7 +100,7 @@ function doesPlayerHaveAllSoulHearts(player) {
|
|
|
122
100
|
* for broken hearts. For example, if the player is Judas and has 1 red heart containers and 2 full
|
|
123
101
|
* soul hearts and 3 broken hearts, then this function would return 6 (i.e. 12 - 1 - 2 - 3).
|
|
124
102
|
*/
|
|
125
|
-
function getPlayerAvailableHeartSlots(player) {
|
|
103
|
+
export function getPlayerAvailableHeartSlots(player) {
|
|
126
104
|
const maxHeartContainers = getPlayerMaxHeartContainers(player);
|
|
127
105
|
const effectiveMaxHearts = player.GetEffectiveMaxHearts();
|
|
128
106
|
const normalAndBoneHeartContainers = effectiveMaxHearts / 2;
|
|
@@ -140,9 +118,9 @@ function getPlayerAvailableHeartSlots(player) {
|
|
|
140
118
|
*
|
|
141
119
|
* This is different from the `EntityPlayer.GetBlackHearts` method, since that returns a bitmask.
|
|
142
120
|
*/
|
|
143
|
-
function getPlayerBlackHearts(player) {
|
|
121
|
+
export function getPlayerBlackHearts(player) {
|
|
144
122
|
const blackHeartsBitmask = player.GetBlackHearts();
|
|
145
|
-
const blackHeartBits =
|
|
123
|
+
const blackHeartBits = countSetBits(blackHeartsBitmask);
|
|
146
124
|
return blackHeartBits * 2;
|
|
147
125
|
}
|
|
148
126
|
/**
|
|
@@ -152,7 +130,7 @@ function getPlayerBlackHearts(player) {
|
|
|
152
130
|
*
|
|
153
131
|
* This is based on the `REVEL.StoreHealth` function in the Revelations mod.
|
|
154
132
|
*/
|
|
155
|
-
function getPlayerHealth(player) {
|
|
133
|
+
export function getPlayerHealth(player) {
|
|
156
134
|
const character = player.GetPlayerType();
|
|
157
135
|
let maxHearts = player.GetMaxHearts();
|
|
158
136
|
let hearts = getPlayerHearts(player); // We use the helper function to remove rotten hearts
|
|
@@ -166,7 +144,7 @@ function getPlayerHealth(player) {
|
|
|
166
144
|
const soulCharges = player.GetEffectiveSoulCharge();
|
|
167
145
|
const bloodCharges = player.GetEffectiveBloodCharge();
|
|
168
146
|
// The Forgotten and The Soul has special health, so we need to account for this.
|
|
169
|
-
if (subPlayer !== undefined && character ===
|
|
147
|
+
if (subPlayer !== undefined && character === PlayerType.FORGOTTEN) {
|
|
170
148
|
// The Forgotten does not have red heart containers.
|
|
171
149
|
maxHearts = boneHearts * 2;
|
|
172
150
|
boneHearts = 0;
|
|
@@ -174,7 +152,7 @@ function getPlayerHealth(player) {
|
|
|
174
152
|
// sub player.
|
|
175
153
|
soulHearts = subPlayer.GetSoulHearts();
|
|
176
154
|
}
|
|
177
|
-
else if (subPlayer !== undefined && character ===
|
|
155
|
+
else if (subPlayer !== undefined && character === PlayerType.SOUL) {
|
|
178
156
|
// The Soul will always have 0 bone hearts; we need to get the bone heart amount from the sub
|
|
179
157
|
// player. We need to store it as "maxHearts" instead of "boneHearts".
|
|
180
158
|
maxHearts = subPlayer.GetBoneHearts() * 2;
|
|
@@ -188,23 +166,23 @@ function getPlayerHealth(player) {
|
|
|
188
166
|
const soulHeartTypes = [];
|
|
189
167
|
for (let i = 0; i < extraHearts; i++) {
|
|
190
168
|
let isBoneHeart = player.IsBoneHeart(i);
|
|
191
|
-
if (subPlayer !== undefined && character ===
|
|
169
|
+
if (subPlayer !== undefined && character === PlayerType.FORGOTTEN) {
|
|
192
170
|
isBoneHeart = subPlayer.IsBoneHeart(i);
|
|
193
171
|
}
|
|
194
172
|
if (isBoneHeart) {
|
|
195
|
-
soulHeartTypes.push(
|
|
173
|
+
soulHeartTypes.push(HeartSubType.BONE);
|
|
196
174
|
}
|
|
197
175
|
else {
|
|
198
176
|
// We need to add 1 here because only the second half of a black heart is considered black.
|
|
199
177
|
let isBlackHeart = player.IsBlackHeart(currentSoulHeart + 1);
|
|
200
|
-
if (subPlayer !== undefined && character ===
|
|
178
|
+
if (subPlayer !== undefined && character === PlayerType.FORGOTTEN) {
|
|
201
179
|
isBlackHeart = subPlayer.IsBlackHeart(currentSoulHeart + 1);
|
|
202
180
|
}
|
|
203
181
|
if (isBlackHeart) {
|
|
204
|
-
soulHeartTypes.push(
|
|
182
|
+
soulHeartTypes.push(HeartSubType.BLACK);
|
|
205
183
|
}
|
|
206
184
|
else {
|
|
207
|
-
soulHeartTypes.push(
|
|
185
|
+
soulHeartTypes.push(HeartSubType.SOUL);
|
|
208
186
|
}
|
|
209
187
|
// Move to the next heart.
|
|
210
188
|
currentSoulHeart += 2;
|
|
@@ -224,46 +202,46 @@ function getPlayerHealth(player) {
|
|
|
224
202
|
soulHeartTypes,
|
|
225
203
|
};
|
|
226
204
|
}
|
|
227
|
-
function getPlayerHealthType(player, healthType) {
|
|
205
|
+
export function getPlayerHealthType(player, healthType) {
|
|
228
206
|
switch (healthType) {
|
|
229
207
|
// 5.10.1
|
|
230
|
-
case
|
|
208
|
+
case HealthType.RED: {
|
|
231
209
|
// We use the standard library helper function since the `EntityPlayer.GetHearts` method
|
|
232
210
|
// returns a value that includes rotten hearts.
|
|
233
211
|
return getPlayerHearts(player);
|
|
234
212
|
}
|
|
235
213
|
// 5.10.3
|
|
236
|
-
case
|
|
214
|
+
case HealthType.SOUL: {
|
|
237
215
|
// We use the standard library helper function since the `EntityPlayer.GetSoulHearts` method
|
|
238
216
|
// returns a value that includes black hearts.
|
|
239
217
|
return getPlayerSoulHearts(player);
|
|
240
218
|
}
|
|
241
219
|
// 5.10.4
|
|
242
|
-
case
|
|
220
|
+
case HealthType.ETERNAL: {
|
|
243
221
|
return player.GetEternalHearts();
|
|
244
222
|
}
|
|
245
223
|
// 5.10.6
|
|
246
|
-
case
|
|
224
|
+
case HealthType.BLACK: {
|
|
247
225
|
// We use the standard library helper function since the `EntityPlayer.GetBlackHearts` method
|
|
248
226
|
// returns a bit mask.
|
|
249
227
|
return getPlayerBlackHearts(player);
|
|
250
228
|
}
|
|
251
229
|
// 5.10.7
|
|
252
|
-
case
|
|
230
|
+
case HealthType.GOLDEN: {
|
|
253
231
|
return player.GetGoldenHearts();
|
|
254
232
|
}
|
|
255
233
|
// 5.10.11
|
|
256
|
-
case
|
|
234
|
+
case HealthType.BONE: {
|
|
257
235
|
return player.GetBoneHearts();
|
|
258
236
|
}
|
|
259
237
|
// 5.10.12
|
|
260
|
-
case
|
|
238
|
+
case HealthType.ROTTEN: {
|
|
261
239
|
return player.GetRottenHearts();
|
|
262
240
|
}
|
|
263
|
-
case
|
|
241
|
+
case HealthType.BROKEN: {
|
|
264
242
|
return player.GetBrokenHearts();
|
|
265
243
|
}
|
|
266
|
-
case
|
|
244
|
+
case HealthType.MAX_HEARTS: {
|
|
267
245
|
return player.GetMaxHearts();
|
|
268
246
|
}
|
|
269
247
|
}
|
|
@@ -276,7 +254,7 @@ function getPlayerHealthType(player, healthType) {
|
|
|
276
254
|
* This is different from the `EntityPlayer.GetHearts` method, since that returns a value that
|
|
277
255
|
* includes rotten hearts.
|
|
278
256
|
*/
|
|
279
|
-
function getPlayerHearts(player) {
|
|
257
|
+
export function getPlayerHearts(player) {
|
|
280
258
|
const rottenHearts = player.GetRottenHearts();
|
|
281
259
|
const hearts = player.GetHearts();
|
|
282
260
|
return hearts - rottenHearts * 2;
|
|
@@ -285,7 +263,7 @@ function getPlayerHearts(player) {
|
|
|
285
263
|
* Helper function that returns the type of the rightmost heart. This does not including golden
|
|
286
264
|
* hearts or broken hearts, since they cannot be damaged directly.
|
|
287
265
|
*/
|
|
288
|
-
function getPlayerLastHeart(player) {
|
|
266
|
+
export function getPlayerLastHeart(player) {
|
|
289
267
|
const hearts = player.GetHearts();
|
|
290
268
|
const effectiveMaxHearts = player.GetEffectiveMaxHearts();
|
|
291
269
|
const soulHearts = player.GetSoulHearts();
|
|
@@ -299,33 +277,33 @@ function getPlayerLastHeart(player) {
|
|
|
299
277
|
if (isLastHeartBone) {
|
|
300
278
|
const isLastContainerEmpty = hearts <= effectiveMaxHearts - 2;
|
|
301
279
|
if (isLastContainerEmpty) {
|
|
302
|
-
return
|
|
280
|
+
return HealthType.BONE;
|
|
303
281
|
}
|
|
304
282
|
if (rottenHearts > 0) {
|
|
305
|
-
return
|
|
283
|
+
return HealthType.ROTTEN;
|
|
306
284
|
}
|
|
307
285
|
if (eternalHearts > 0) {
|
|
308
|
-
return
|
|
286
|
+
return HealthType.ETERNAL;
|
|
309
287
|
}
|
|
310
|
-
return
|
|
288
|
+
return HealthType.RED;
|
|
311
289
|
}
|
|
312
290
|
if (soulHearts > 0) {
|
|
313
|
-
const numBits =
|
|
314
|
-
const finalBit =
|
|
291
|
+
const numBits = getNumBitsOfN(blackHearts);
|
|
292
|
+
const finalBit = getKBitOfN(numBits - 1, blackHearts);
|
|
315
293
|
const isBlack = finalBit === 1;
|
|
316
294
|
if (isBlack) {
|
|
317
|
-
return
|
|
295
|
+
return HealthType.BLACK;
|
|
318
296
|
}
|
|
319
297
|
// If it is not a black heart, it must be a soul heart.
|
|
320
|
-
return
|
|
298
|
+
return HealthType.SOUL;
|
|
321
299
|
}
|
|
322
300
|
if (eternalHearts > 0) {
|
|
323
|
-
return
|
|
301
|
+
return HealthType.ETERNAL;
|
|
324
302
|
}
|
|
325
303
|
if (rottenHearts > 0) {
|
|
326
|
-
return
|
|
304
|
+
return HealthType.ROTTEN;
|
|
327
305
|
}
|
|
328
|
-
return
|
|
306
|
+
return HealthType.RED;
|
|
329
307
|
}
|
|
330
308
|
/**
|
|
331
309
|
* Returns the maximum heart containers that the provided player can have. Normally, this is 12, but
|
|
@@ -333,22 +311,22 @@ function getPlayerLastHeart(player) {
|
|
|
333
311
|
* This function does not account for Broken Hearts; use the `getPlayerAvailableHeartSlots` helper
|
|
334
312
|
* function for that.
|
|
335
313
|
*/
|
|
336
|
-
function getPlayerMaxHeartContainers(player) {
|
|
314
|
+
export function getPlayerMaxHeartContainers(player) {
|
|
337
315
|
const character = player.GetPlayerType();
|
|
338
|
-
const characterMaxHeartContainers =
|
|
316
|
+
const characterMaxHeartContainers = getCharacterMaxHeartContainers(character);
|
|
339
317
|
// 1
|
|
340
318
|
// Magdalene can increase her maximum heart containers with Birthright.
|
|
341
|
-
if (character ===
|
|
342
|
-
&& player.HasCollectible(
|
|
319
|
+
if (character === PlayerType.MAGDALENE
|
|
320
|
+
&& player.HasCollectible(CollectibleType.BIRTHRIGHT)) {
|
|
343
321
|
const extraMaxHeartContainersFromBirthright = 6;
|
|
344
322
|
return characterMaxHeartContainers + extraMaxHeartContainersFromBirthright;
|
|
345
323
|
}
|
|
346
324
|
// 14, 33
|
|
347
325
|
// Keeper and Tainted Keeper can increase their coin containers with Mother's Kiss and Greed's
|
|
348
326
|
// Gullet.
|
|
349
|
-
if (
|
|
350
|
-
const numMothersKisses = player.GetTrinketMultiplier(
|
|
351
|
-
const hasGreedsGullet = player.HasCollectible(
|
|
327
|
+
if (isKeeper(player)) {
|
|
328
|
+
const numMothersKisses = player.GetTrinketMultiplier(TrinketType.MOTHERS_KISS);
|
|
329
|
+
const hasGreedsGullet = player.HasCollectible(CollectibleType.GREEDS_GULLET);
|
|
352
330
|
const coins = player.GetNumCoins();
|
|
353
331
|
const greedsGulletCoinContainers = hasGreedsGullet
|
|
354
332
|
? Math.floor(coins / 25)
|
|
@@ -367,7 +345,7 @@ function getPlayerMaxHeartContainers(player) {
|
|
|
367
345
|
* This is different from the `EntityPlayer.GetSoulHearts` method, since that returns the combined
|
|
368
346
|
* number of soul hearts and black hearts.
|
|
369
347
|
*/
|
|
370
|
-
function getPlayerSoulHearts(player) {
|
|
348
|
+
export function getPlayerSoulHearts(player) {
|
|
371
349
|
const soulHearts = player.GetSoulHearts();
|
|
372
350
|
const blackHearts = getPlayerBlackHearts(player);
|
|
373
351
|
return soulHearts - blackHearts;
|
|
@@ -382,14 +360,14 @@ function getPlayerSoulHearts(player) {
|
|
|
382
360
|
* This function does not validate whether the provided player is Tainted Magdalene; that should be
|
|
383
361
|
* accomplished before invoking this function.
|
|
384
362
|
*/
|
|
385
|
-
function getTaintedMagdaleneNonTemporaryMaxHearts(player) {
|
|
363
|
+
export function getTaintedMagdaleneNonTemporaryMaxHearts(player) {
|
|
386
364
|
const maxHearts = player.GetMaxHearts();
|
|
387
|
-
const hasBirthright = player.HasCollectible(
|
|
365
|
+
const hasBirthright = player.HasCollectible(CollectibleType.BIRTHRIGHT);
|
|
388
366
|
const maxNonTemporaryMaxHearts = hasBirthright ? 6 : 4;
|
|
389
367
|
return Math.min(maxHearts, maxNonTemporaryMaxHearts);
|
|
390
368
|
}
|
|
391
369
|
/** Returns a `PlayerHealth` object with all zeros. */
|
|
392
|
-
function newPlayerHealth() {
|
|
370
|
+
export function newPlayerHealth() {
|
|
393
371
|
return {
|
|
394
372
|
maxHearts: 0,
|
|
395
373
|
hearts: 0,
|
|
@@ -408,10 +386,10 @@ function newPlayerHealth() {
|
|
|
408
386
|
* Helper function to remove all of a player's black hearts and add the corresponding amount of soul
|
|
409
387
|
* hearts.
|
|
410
388
|
*/
|
|
411
|
-
function playerConvertBlackHeartsToSoulHearts(player) {
|
|
389
|
+
export function playerConvertBlackHeartsToSoulHearts(player) {
|
|
412
390
|
const playerHealth = getPlayerHealth(player);
|
|
413
391
|
removeAllPlayerHealth(player);
|
|
414
|
-
const newSoulHeartTypes = playerHealth.soulHeartTypes.map((soulHeartType) => soulHeartType ===
|
|
392
|
+
const newSoulHeartTypes = playerHealth.soulHeartTypes.map((soulHeartType) => soulHeartType === HeartSubType.BLACK ? HeartSubType.SOUL : soulHeartType);
|
|
415
393
|
const playerHealthWithSoulHearts = {
|
|
416
394
|
...playerHealth,
|
|
417
395
|
soulHeartTypes: newSoulHeartTypes,
|
|
@@ -422,10 +400,10 @@ function playerConvertBlackHeartsToSoulHearts(player) {
|
|
|
422
400
|
* Helper function to remove all of a player's soul hearts and add the corresponding amount of black
|
|
423
401
|
* hearts.
|
|
424
402
|
*/
|
|
425
|
-
function playerConvertSoulHeartsToBlackHearts(player) {
|
|
403
|
+
export function playerConvertSoulHeartsToBlackHearts(player) {
|
|
426
404
|
const playerHealth = getPlayerHealth(player);
|
|
427
405
|
removeAllPlayerHealth(player);
|
|
428
|
-
const newSoulHeartTypes = playerHealth.soulHeartTypes.map((soulHeartType) => soulHeartType ===
|
|
406
|
+
const newSoulHeartTypes = playerHealth.soulHeartTypes.map((soulHeartType) => soulHeartType === HeartSubType.SOUL ? HeartSubType.BLACK : soulHeartType);
|
|
429
407
|
const playerHealthWithBlackHearts = {
|
|
430
408
|
...playerHealth,
|
|
431
409
|
soulHeartTypes: newSoulHeartTypes,
|
|
@@ -438,13 +416,13 @@ function playerConvertSoulHeartsToBlackHearts(player) {
|
|
|
438
416
|
* Specifically, this function will return false if the player has 0 red hearts, 0 soul/black
|
|
439
417
|
* hearts, and 0 bone hearts.
|
|
440
418
|
*/
|
|
441
|
-
function playerHasHealthLeft(player) {
|
|
419
|
+
export function playerHasHealthLeft(player) {
|
|
442
420
|
const hearts = player.GetHearts();
|
|
443
421
|
const soulHearts = player.GetSoulHearts();
|
|
444
422
|
const boneHearts = player.GetBoneHearts();
|
|
445
423
|
return hearts > 0 || soulHearts > 0 || boneHearts > 0;
|
|
446
424
|
}
|
|
447
|
-
function removeAllPlayerHealth(player) {
|
|
425
|
+
export function removeAllPlayerHealth(player) {
|
|
448
426
|
const goldenHearts = player.GetGoldenHearts();
|
|
449
427
|
const eternalHearts = player.GetEternalHearts();
|
|
450
428
|
const boneHearts = player.GetBoneHearts();
|
|
@@ -455,11 +433,11 @@ function removeAllPlayerHealth(player) {
|
|
|
455
433
|
player.AddEternalHearts(-eternalHearts);
|
|
456
434
|
player.AddBoneHearts(-boneHearts);
|
|
457
435
|
player.AddBrokenHearts(-brokenHearts);
|
|
458
|
-
player.AddMaxHearts(
|
|
459
|
-
player.AddSoulHearts(
|
|
436
|
+
player.AddMaxHearts(MAX_PLAYER_HEART_CONTAINERS * -2, true);
|
|
437
|
+
player.AddSoulHearts(MAX_PLAYER_HEART_CONTAINERS * -2);
|
|
460
438
|
// If we are The Soul, the `EntityPlayer.AddBoneHearts` method will not remove Forgotten's bone
|
|
461
439
|
// hearts, so we need to explicitly handle this.
|
|
462
|
-
if (
|
|
440
|
+
if (isCharacter(player, PlayerType.SOUL)) {
|
|
463
441
|
const forgotten = player.GetSubPlayer();
|
|
464
442
|
if (forgotten !== undefined) {
|
|
465
443
|
const forgottenBoneHearts = forgotten.GetBoneHearts();
|
|
@@ -474,16 +452,16 @@ function removeAllPlayerHealth(player) {
|
|
|
474
452
|
*
|
|
475
453
|
* Based on the `REVEL.LoadHealth` function in the Revelations mod.
|
|
476
454
|
*/
|
|
477
|
-
function setPlayerHealth(player, playerHealth) {
|
|
455
|
+
export function setPlayerHealth(player, playerHealth) {
|
|
478
456
|
const character = player.GetPlayerType();
|
|
479
457
|
const subPlayer = player.GetSubPlayer();
|
|
480
458
|
// Before we add or remove any health, we have to take away Alabaster Box, if present. (Removing
|
|
481
459
|
// soul hearts from the player will remove Alabaster Box charges.)
|
|
482
460
|
const alabasterBoxDescriptions = [];
|
|
483
|
-
const alabasterBoxActiveSlots =
|
|
461
|
+
const alabasterBoxActiveSlots = getActiveItemSlots(player, CollectibleType.ALABASTER_BOX);
|
|
484
462
|
for (const activeSlot of alabasterBoxActiveSlots) {
|
|
485
|
-
const totalCharge =
|
|
486
|
-
|
|
463
|
+
const totalCharge = getTotalCharge(player, activeSlot);
|
|
464
|
+
setActiveItem(player, CollectibleType.NULL, activeSlot);
|
|
487
465
|
alabasterBoxDescriptions.push({
|
|
488
466
|
activeSlot,
|
|
489
467
|
totalCharge,
|
|
@@ -491,7 +469,7 @@ function setPlayerHealth(player, playerHealth) {
|
|
|
491
469
|
}
|
|
492
470
|
removeAllPlayerHealth(player);
|
|
493
471
|
// Add the red heart containers.
|
|
494
|
-
if (subPlayer !== undefined && character ===
|
|
472
|
+
if (subPlayer !== undefined && character === PlayerType.SOUL) {
|
|
495
473
|
// Adding health to The Soul is a special case.
|
|
496
474
|
subPlayer.AddMaxHearts(playerHealth.maxHearts, false);
|
|
497
475
|
}
|
|
@@ -508,20 +486,20 @@ function setPlayerHealth(player, playerHealth) {
|
|
|
508
486
|
* Fix the bug where a half soul heart to the left of a bone heart will be treated as a full
|
|
509
487
|
* soul heart.
|
|
510
488
|
*/
|
|
511
|
-
const shouldAddOneSoulHeart = isHalf || soulHeartType ===
|
|
489
|
+
const shouldAddOneSoulHeart = isHalf || soulHeartType === HeartSubType.BONE || soulHeartsRemaining < 2;
|
|
512
490
|
const numSoulHearts = shouldAddOneSoulHeart ? 1 : 2;
|
|
513
491
|
switch (soulHeartType) {
|
|
514
|
-
case
|
|
492
|
+
case HeartSubType.SOUL: {
|
|
515
493
|
player.AddSoulHearts(numSoulHearts);
|
|
516
494
|
soulHeartsRemaining -= numSoulHearts;
|
|
517
495
|
break;
|
|
518
496
|
}
|
|
519
|
-
case
|
|
497
|
+
case HeartSubType.BLACK: {
|
|
520
498
|
player.AddBlackHearts(numSoulHearts);
|
|
521
499
|
soulHeartsRemaining -= numSoulHearts;
|
|
522
500
|
break;
|
|
523
501
|
}
|
|
524
|
-
case
|
|
502
|
+
case HeartSubType.BONE: {
|
|
525
503
|
player.AddBoneHearts(numSoulHearts);
|
|
526
504
|
break;
|
|
527
505
|
}
|
|
@@ -538,9 +516,9 @@ function setPlayerHealth(player, playerHealth) {
|
|
|
538
516
|
* functions in that a value of 1 is equivalent to a half-heart.
|
|
539
517
|
*/
|
|
540
518
|
player.AddRottenHearts(playerHealth.rottenHearts * 2);
|
|
541
|
-
if (character ===
|
|
519
|
+
if (character === PlayerType.MAGDALENE_B) {
|
|
542
520
|
// Adding 1 heart to Tainted Magdalene will actually add two hearts.
|
|
543
|
-
|
|
521
|
+
repeat(playerHealth.hearts, () => {
|
|
544
522
|
if (player.HasFullHearts()) {
|
|
545
523
|
return;
|
|
546
524
|
}
|
|
@@ -560,15 +538,15 @@ function setPlayerHealth(player, playerHealth) {
|
|
|
560
538
|
player.AddGoldenHearts(playerHealth.goldenHearts);
|
|
561
539
|
player.AddBrokenHearts(playerHealth.brokenHearts);
|
|
562
540
|
// Set the Bethany / Tainted Bethany charges.
|
|
563
|
-
if (character ===
|
|
541
|
+
if (character === PlayerType.BETHANY) {
|
|
564
542
|
player.SetSoulCharge(playerHealth.soulCharges);
|
|
565
543
|
}
|
|
566
|
-
else if (character ===
|
|
544
|
+
else if (character === PlayerType.BETHANY_B) {
|
|
567
545
|
player.SetBloodCharge(playerHealth.bloodCharges);
|
|
568
546
|
}
|
|
569
547
|
// Re-add the Alabaster Box, if present.
|
|
570
548
|
for (const { activeSlot, totalCharge } of alabasterBoxDescriptions) {
|
|
571
|
-
|
|
549
|
+
setActiveItem(player, CollectibleType.ALABASTER_BOX, activeSlot, totalCharge);
|
|
572
550
|
}
|
|
573
551
|
}
|
|
574
552
|
/**
|
|
@@ -581,7 +559,7 @@ function setPlayerHealth(player, playerHealth) {
|
|
|
581
559
|
* Before using this function, it is expected that you check to see if the player is Tainted
|
|
582
560
|
* Magdalene first, or else it will give a nonsensical result.
|
|
583
561
|
*/
|
|
584
|
-
function wouldDamageTaintedMagdaleneNonTemporaryHeartContainers(player, damageAmount) {
|
|
562
|
+
export function wouldDamageTaintedMagdaleneNonTemporaryHeartContainers(player, damageAmount) {
|
|
585
563
|
// Regardless of the damage amount, damage to a player cannot remove a soul heart and a red heart
|
|
586
564
|
// at the same time.
|
|
587
565
|
const soulHearts = player.GetSoulHearts();
|
|
@@ -1,21 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
exports.getPlayers = getPlayers;
|
|
9
|
-
exports.getSubPlayerParent = getSubPlayerParent;
|
|
10
|
-
exports.isChildPlayer = isChildPlayer;
|
|
11
|
-
exports.isFoundSoul = isFoundSoul;
|
|
12
|
-
const isaac_typescript_definitions_1 = require("isaac-typescript-definitions");
|
|
13
|
-
const cachedClasses_1 = require("../core/cachedClasses");
|
|
14
|
-
const ReadonlySet_1 = require("../types/ReadonlySet");
|
|
15
|
-
const DEFAULT_COLLECTIBLE_TYPE = isaac_typescript_definitions_1.CollectibleType.SAD_ONION;
|
|
16
|
-
const EXCLUDED_CHARACTERS = new ReadonlySet_1.ReadonlySet([
|
|
17
|
-
isaac_typescript_definitions_1.PlayerType.ESAU, // 20
|
|
18
|
-
isaac_typescript_definitions_1.PlayerType.SOUL_B, // 40
|
|
1
|
+
import { BabySubType, CollectibleType, PlayerType, PlayerVariant, } from "isaac-typescript-definitions";
|
|
2
|
+
import { game } from "../core/cachedClasses";
|
|
3
|
+
import { ReadonlySet } from "../types/ReadonlySet";
|
|
4
|
+
const DEFAULT_COLLECTIBLE_TYPE = CollectibleType.SAD_ONION;
|
|
5
|
+
const EXCLUDED_CHARACTERS = new ReadonlySet([
|
|
6
|
+
PlayerType.ESAU, // 20
|
|
7
|
+
PlayerType.SOUL_B, // 40
|
|
19
8
|
]);
|
|
20
9
|
/**
|
|
21
10
|
* Helper function to get every player with no restrictions, by using `Game.GetNumPlayers` and
|
|
@@ -24,8 +13,8 @@ const EXCLUDED_CHARACTERS = new ReadonlySet_1.ReadonlySet([
|
|
|
24
13
|
* This function is almost never what you want to use. For most purposes, use the `getPlayers`
|
|
25
14
|
* helper function instead to get a filtered list of players.
|
|
26
15
|
*/
|
|
27
|
-
function getAllPlayers() {
|
|
28
|
-
const numPlayers =
|
|
16
|
+
export function getAllPlayers() {
|
|
17
|
+
const numPlayers = game.GetNumPlayers();
|
|
29
18
|
const players = [];
|
|
30
19
|
for (let i = 0; i < numPlayers; i++) {
|
|
31
20
|
const player = Isaac.GetPlayer(i);
|
|
@@ -37,7 +26,7 @@ function getAllPlayers() {
|
|
|
37
26
|
* Helper function to get all of the other players in the room besides the one provided. (This
|
|
38
27
|
* includes "child" players.)
|
|
39
28
|
*/
|
|
40
|
-
function getOtherPlayers(player) {
|
|
29
|
+
export function getOtherPlayers(player) {
|
|
41
30
|
const playerPtrHash = GetPtrHash(player);
|
|
42
31
|
const players = getAllPlayers();
|
|
43
32
|
return players.filter((otherPlayer) => GetPtrHash(otherPlayer) !== playerPtrHash);
|
|
@@ -46,7 +35,7 @@ function getOtherPlayers(player) {
|
|
|
46
35
|
* Helper function to get the corresponding `EntityPlayer` object that corresponds to a
|
|
47
36
|
* `PlayerIndex`.
|
|
48
37
|
*/
|
|
49
|
-
function getPlayerFromIndex(playerIndex) {
|
|
38
|
+
export function getPlayerFromIndex(playerIndex) {
|
|
50
39
|
const players = getAllPlayers();
|
|
51
40
|
return players.find((player) => getPlayerIndex(player) === playerIndex);
|
|
52
41
|
}
|
|
@@ -80,7 +69,7 @@ function getPlayerFromIndex(playerIndex) {
|
|
|
80
69
|
* 4. With that said, in almost all cases, you should be lazy-initializing your data structures in
|
|
81
70
|
* other callbacks, so this should not be an issue.
|
|
82
71
|
*/
|
|
83
|
-
function getPlayerIndex(player, differentiateForgottenAndSoul = false) {
|
|
72
|
+
export function getPlayerIndex(player, differentiateForgottenAndSoul = false) {
|
|
84
73
|
// Sub-players use separate RNG values for some reason, so we need to always use the main player:
|
|
85
74
|
// https://github.com/Meowlala/RepentanceAPIIssueTracker/issues/443
|
|
86
75
|
// We can safely ignore the player's character because regardless of whether the main player ends
|
|
@@ -111,8 +100,8 @@ function getPlayerIndex(player, differentiateForgottenAndSoul = false) {
|
|
|
111
100
|
* Note that if you storing information about a player in a data structure, you never want to use
|
|
112
101
|
* this index; use the `getPlayerIndex` function instead.
|
|
113
102
|
*/
|
|
114
|
-
function getPlayerIndexVanilla(playerToFind) {
|
|
115
|
-
const numPlayers =
|
|
103
|
+
export function getPlayerIndexVanilla(playerToFind) {
|
|
104
|
+
const numPlayers = game.GetNumPlayers();
|
|
116
105
|
const playerToFindHash = GetPtrHash(playerToFind);
|
|
117
106
|
for (let i = 0; i < numPlayers; i++) {
|
|
118
107
|
const player = Isaac.GetPlayer(i);
|
|
@@ -132,7 +121,7 @@ function getPlayerIndexVanilla(playerToFind) {
|
|
|
132
121
|
* @param performCharacterExclusions Whether to exclude characters that are not directly controlled
|
|
133
122
|
* by the player (i.e. Esau & Tainted Soul). Default is false.
|
|
134
123
|
*/
|
|
135
|
-
function getPlayers(performCharacterExclusions = false) {
|
|
124
|
+
export function getPlayers(performCharacterExclusions = false) {
|
|
136
125
|
const players = getAllPlayers();
|
|
137
126
|
const nonChildPlayers = players.filter((player) => !isChildPlayer(player));
|
|
138
127
|
const nonChildPlayersFiltered = nonChildPlayers.filter((player) => {
|
|
@@ -146,7 +135,7 @@ function getPlayers(performCharacterExclusions = false) {
|
|
|
146
135
|
* is useful because calling the `EntityPlayer.GetSubPlayer` method on a sub-player object will
|
|
147
136
|
* return undefined.
|
|
148
137
|
*/
|
|
149
|
-
function getSubPlayerParent(subPlayer) {
|
|
138
|
+
export function getSubPlayerParent(subPlayer) {
|
|
150
139
|
const subPlayerPtrHash = GetPtrHash(subPlayer);
|
|
151
140
|
const players = getPlayers();
|
|
152
141
|
return players.find((player) => {
|
|
@@ -162,23 +151,23 @@ function getSubPlayerParent(subPlayer) {
|
|
|
162
151
|
* Helper function to detect if a particular player is a "child" player, meaning that they have a
|
|
163
152
|
* non-undefined `EntityPlayer.Parent` field. (For example, the Strawman Keeper.)
|
|
164
153
|
*/
|
|
165
|
-
function isChildPlayer(player) {
|
|
154
|
+
export function isChildPlayer(player) {
|
|
166
155
|
return player.Parent !== undefined;
|
|
167
156
|
}
|
|
168
157
|
/**
|
|
169
158
|
* Helper function to detect if a particular player is the Found Soul player provided by the
|
|
170
159
|
* trinket.
|
|
171
160
|
*/
|
|
172
|
-
function isFoundSoul(player) {
|
|
161
|
+
export function isFoundSoul(player) {
|
|
173
162
|
return (isChildPlayer(player)
|
|
174
|
-
&& player.Variant ===
|
|
175
|
-
&& player.SubType ===
|
|
163
|
+
&& player.Variant === PlayerVariant.COOP_BABY
|
|
164
|
+
&& player.SubType === BabySubType.FOUND_SOUL);
|
|
176
165
|
}
|
|
177
166
|
function getPlayerIndexCollectibleType(player, differentiateForgottenAndSoul) {
|
|
178
167
|
const character = player.GetPlayerType();
|
|
179
|
-
if (character ===
|
|
168
|
+
if (character === PlayerType.SOUL) {
|
|
180
169
|
return differentiateForgottenAndSoul
|
|
181
|
-
?
|
|
170
|
+
? CollectibleType.INNER_EYE
|
|
182
171
|
: DEFAULT_COLLECTIBLE_TYPE;
|
|
183
172
|
}
|
|
184
173
|
return DEFAULT_COLLECTIBLE_TYPE;
|