isaac-typescript-definitions
Version:
TypeScript definitions for The Binding of Isaac: Repentance.
1,291 lines (1,089 loc) • 45.6 kB
TypeScript
import type { ActiveSlot } from "../../enums/ActiveSlot";
import type { CollectibleAnimation } from "../../enums/CollectibleAnimation";
import type {
BabySubType,
CardType,
CollectibleType,
DipFamiliarSubType,
PillColor,
PlayerType,
TrinketType,
} from "../../enums/collections/subTypes";
import type {
BombVariant,
FamiliarVariant,
PlayerVariant,
} from "../../enums/collections/variants";
import type { ControllerIndex } from "../../enums/ControllerIndex";
import type { Direction } from "../../enums/Direction";
import type { CacheFlag } from "../../enums/flags/CacheFlag";
import type { DamageFlag } from "../../enums/flags/DamageFlag";
import type { TearFlag } from "../../enums/flags/TearFlag";
import type { UseFlag } from "../../enums/flags/UseFlag";
import type { LaserOffset } from "../../enums/LaserOffset";
import type { NullItemID } from "../../enums/NullItemID";
import type { PillEffect } from "../../enums/PillEffect";
import type { PlayerForm } from "../../enums/PlayerForm";
import type { PlayerItemAnimation } from "../../enums/PlayerItemAnimation";
import type { PocketItemSlot } from "../../enums/PocketItemSlot";
import type { PoopSpellType } from "../../enums/PoopSpellType";
import type { SkinColor } from "../../enums/SkinColor";
import type { TrinketSlot } from "../../enums/TrinketSlot";
import type { WeaponType } from "../../enums/WeaponType";
declare global {
interface EntityPlayer extends Entity {
/** 1 unit is half a heart. Remove them with negative numbers. */
AddBlackHearts: (blackHearts: int) => void;
/** Adds Tainted Bethany's blood charges. Only works on Tainted Bethany. */
AddBloodCharge: (num: int) => void;
/**
* @param amount
* @param position
* @param target This argument is not optional. If you want to spawn a fly without a target,
* then you must explicitly pass undefined.
*/
AddBlueFlies: (
amount: int,
position: Vector,
target: Entity | undefined,
) => Entity;
AddBlueSpider: (position: Vector) => Entity;
/** Remove them with negative numbers. */
AddBombs: (amount: int) => void;
/** Remove them with negative numbers. */
AddBoneHearts: (hearts: int) => void;
/** Remove them with negative numbers. */
AddBrokenHearts: (hearts: int) => void;
/**
* Used to specify the kinds of stats that should be evaluated the next time the
* `EntityPlayer.EvaluateCache` method is run.
*/
AddCacheFlags: (cacheFlags: CacheFlag | BitFlags<CacheFlag>) => void;
AddCard: (cardType: CardType) => void;
/** Remove them with negative numbers. */
AddCoins: (amount: int) => void;
/**
* Note that adding a collectible to `ActiveSlot.POCKET` or `ActiveSlot.POCKET_SINGLE_USE` will
* not work properly. For those cases, use `EntityPlayer.SetPocketActiveItem` instead.
*
* @param collectibleType
* @param charge Default is 0.
* @param firstTimePickingUp Setting this to false will not spawn or add consumables for the
* item and will not cause it to count towards transformations.
* Default is true.
* @param activeSlot Sets the active slot this collectible should be added to. Default is
* `ActiveSlot.SLOT_PRIMARY`.
* @param varData Sets the variable data for this collectible (this is used to store extra data
* for some active items like the number of uses for Jar of Wisps). Default is 0.
*/
AddCollectible: (
collectibleType: CollectibleType,
charge?: int,
firstTimePickingUp?: boolean,
activeSlot?: ActiveSlot.PRIMARY | ActiveSlot.SECONDARY,
varData?: int,
) => void;
AddControlsCooldown: (cooldown: int) => void;
AddCostume: (
itemConfigItem: ItemConfigItem,
itemStateOnly: boolean,
) => void;
/**
* Disables all item effects, similar to what happens in the abandoned mineshaft in Mines II.
* This also temporarily removes consumables and pocket items.
*/
AddCurseMistEffect: () => void;
AddDeadEyeCharge: () => void;
AddDollarBillEffect: () => void;
/** Remove them with negative numbers. */
AddEternalHearts: (eternalHearts: int) => void;
/** Spawns a friendly dip from Dirty Mind. */
AddFriendlyDip: (
subType: DipFamiliarSubType,
position: Vector,
) => EntityFamiliar;
/**
* Turns the given number of bombs into giga bombs.
*
* This does not actually increase the number of bombs held. To actually add bombs, the
* `EntityPlayer.AddBombs` method should be called first.
*
* @param num
*/
AddGigaBombs: (num: int) => void;
/** Remove them with negative numbers. */
AddGoldenBomb: () => void;
AddGoldenHearts: (hearts: int) => void;
AddGoldenKey: () => void;
/**
* Adds red hearts to the player if there are any empty heart containers. 1 unit is half a
* heart. Remove health with negative numbers.
*/
AddHearts: (hearts: int) => void;
/**
* Spawns a Lemegeton wisp.
*
* @param subType The ID of the passive item to mimic.
* @param position
* @param adjustOrbitLayer Default is false.
*/
AddItemWisp: (
subType: int,
position: Vector,
adjustOrbitLayer?: boolean,
) => EntityFamiliar;
AddJarFlies: (flies: int) => void;
AddJarHearts: (hearts: int) => void;
/** Remove them with negative numbers. */
AddKeys: (amount: int) => void;
/**
* Adds heart containers to the player. 2 units is a full heart container.
*
* Remove them with negative numbers.
*/
AddMaxHearts: (maxHearts: int, ignoreKeeper: boolean) => void;
/**
* Spawns a mini Isaac from Giant Cell.
*
* @param position
* @param playAnim If false, skips the appear animation for the familiars.
*/
AddMinisaac: (position: Vector, playAnim?: boolean) => EntityFamiliar;
AddNullCostume: (nullItemID: NullItemID) => void;
AddPill: (pillColor: PillColor) => void;
AddPlayerFormCostume: (playerForm: PlayerForm) => void;
/** Adds (or removes) poop consumables from the player. */
AddPoopMana: (num: int) => void;
AddPrettyFly: () => void;
/**
* Remove them with negative numbers.
*
* Note that this method is not actually equivalent to picking up a rotten heart, since it will
* only grant one rotten heart to Tainted Magdalene (whereas picking up a rotten heart would
* grant two).
*
* @param hearts Rotten hearts must be specified in a multiple of 2. For example,
* `AddRottenHearts(4)` will add 2 rotten hearts.
*/
AddRottenHearts: (hearts: int) => void;
/** Adds Bethany's soul heart charges. Only works on Bethany. */
AddSoulCharge: (num: int) => void;
/** 1 unit is half a heart. Remove them with negative numbers. */
AddSoulHearts: (soulHearts: int) => void;
/** Spawns a defensive fly from The Swarm. */
AddSwarmFlyOrbital: (position: Vector) => EntityFamiliar;
/**
* - If the player does not have any open trinket slots, this function will do nothing.
* - If the player has an open trinket slot but already has a trinket, the new trinket will go
* to the first slot and the existing trinket will get pushed back to the second slot.
* - If you provide an argument of 0 or an otherwise invalid trinket ID, the game will crash.
*
* @param trinketType
* @param firstTimePickingUp Setting this to false will not spawn or add pickups for the item
* and will not cause it to count towards transformations. Default is
* true.
*/
AddTrinket: (
trinketType: TrinketType,
firstTimePickingUp?: boolean,
) => void;
/**
* Spawns a Book of Virtues wisp.
*
* @param subType The ID of the active item to spawn a wisp from. Wisps with a special ID (for
* example "s0" in wisps.xml) can be spawned with the subtype 65536 + X where X
* is the number after the "s".
* @param position
* @param adjustOrbitLayer If true, allows wisps to spawn outside of their usual orbit if their
* assigned orbit is full. Default is false.
* @param dontUpdate If true, the spawned wisp will not update immediately. This allows certain
* properties to be set on the first frame before the wisp is fully
* initialized. Default is false.
*/
AddWisp: (
subType: int,
position: Vector,
adjustOrbitLayer?: boolean,
dontUpdate?: boolean,
) => EntityFamiliar;
/**
* Play the animation that is normally played at the beginning of a stage (where Isaac is laying
* down).
*/
AnimateAppear: () => void;
/**
* @param cardType
* @param playerItemAnimation Default is "Pickup".
*/
AnimateCard: (
cardType: CardType,
playerItemAnimation?: PlayerItemAnimation,
) => void;
/**
* @param collectibleType
* @param playerItemAnimation Default is "Pickup".
* @param collectibleAnimation Default is "PlayerPickupSparkle".
*/
AnimateCollectible: (
collectibleType: CollectibleType,
playerItemAnimation?: PlayerItemAnimation,
collectibleAnimation?: CollectibleAnimation,
) => void;
/** Plays the "thumbs up" animation. Also plays `SoundEffect.THUMBS_UP`. */
AnimateHappy: () => void;
/** Play the animation where Isaac steps into a beam of light (e.g. at the end of Womb 2). */
AnimateLightTravel: () => void;
/**
* Plays a pickup animation using any supplied Sprite object.
*
* @param sprite
* @param hideShadow Default is false. This should be usually set to true when rendering a
* sprite with a custom shadow layer.
* @param animation Default is "Pickup".
*/
AnimatePickup: (
sprite: Sprite,
hideShadow?: boolean,
animation?: string,
) => void;
/**
* @param pillColor
* @param playerItemAnimation Default is "Pickup".
*/
AnimatePill: (
pillColor: PillColor,
playerItemAnimation?: PlayerItemAnimation,
) => void;
AnimatePitfallIn: () => void;
AnimatePitfallOut: () => void;
/**
* Play the animation where Isaac holds his head in his hands. Also plays
* `SoundEffect.SOUND_THUMBS_DOWN`.
*/
AnimateSad: () => void;
AnimateTeleport: (up: boolean) => void;
AnimateTrapdoor: () => void;
/**
* @param trinketType
* @param playerItemAnimation Default is "Pickup".
* @param spriteAnimation Default is "PlayerPickupSparkle".
*/
AnimateTrinket: (
trinketType: TrinketType,
playerItemAnimation?: PlayerItemAnimation,
spriteAnimation?: string,
) => void;
AreControlsEnabled: () => boolean;
AreOpposingShootDirectionsPressed: () => boolean;
/** @param collectibleType Default is `CollectibleType.NULL`. */
CanAddCollectible: (collectibleType?: CollectibleType) => boolean;
/** Returns true if the player can pick up black hearts, false otherwise. */
CanPickBlackHearts: () => boolean;
/** Returns true if the player can pick up bone hearts, false otherwise. */
CanPickBoneHearts: () => boolean;
/** Returns true if the player can pick up golden hearts, false otherwise. */
CanPickGoldenHearts: () => boolean;
/** Returns true if the player can pick up red hearts, false otherwise. */
CanPickRedHearts: () => boolean;
/** Returns true if the player can pick up rotten hearts, false otherwise. */
CanPickRottenHearts: () => boolean;
/** Returns true if the player can pick up soul hearts, false otherwise. */
CanPickSoulHearts: () => boolean;
CanPickupItem: () => boolean;
CanShoot: () => boolean;
/**
* When the player presses the different shoot buttons, Isaac will normally turn his head to
* face the direction that he is supposed to shoot in. This returns true if head will react to
* shooting, false otherwise.
*/
CanTurnHead: () => boolean;
/**
* Changes the current character of the player. This will attempt to merge forms when called on
* characters like Jacob and Esau. This does not work correctly when changing from/to certain
* characters (i.e. Tainted Isaac).
*
* If you attempt to change to an invalid character, the game will crash.
*/
ChangePlayerType: (character: PlayerType) => void;
/**
* Spawns the appropriate amount of familiars associated with a custom collectible.
*
* - If the target count specified is less than the current amount of familiars, it will spawn
* more until the target count is met.
* - If the target count specified is than the current amount of familiars, it will despawn
* familiars until the target count is met.
*
* Note that this function is bugged in that it will not increment the provided RNG. This is bad
* because if you provide the player's collectible RNG as the argument for `rng`, all of the
* resulting spawned familiars will have the same `InitSeed`. Since `InitSeed` is the main way
* to identify unique familiars, it is important that each familiar has a unique `InitSeed`.
* Thus, a brand new RNG object should always be passed to the `EntityPlayer.CheckFamiliar`
* method so that each new spawned familiar will have a new, random `InitSeed`. Subsequently,
* you should handle random familiar events not with an RNG object based on the familiar's
* `InitSeed`, but with a data structure that maps familiar `InitSeed` to RNG objects that are
* initialized based on the seed from the `EntityPlayer.GetCollectibleRNG` method.
*
* It is recommended to avoid using this method directly and use the `checkFamiliar` or
* `checkFamiliarFromCollectible` helper functions from the IsaacScript standard library
* instead.
*
* @param familiarVariant In most cases, use the familiar variant for your custom familiar.
* @param targetCount The expected amount of this `FamiliarVariant` that this `EntityPlayer`
* should have. This argument can simply be how many of an item that the
* current EntityPlayer owns. However, if you want your familiar to synergize
* with Monster Manual and Box of Friends, then this argument should be
* `EntityPlayer.GetCollectibleNum(collectibleType) +
* EntityPlayer.GetEffects().GetCollectibleEffectNum(collectibleType)`.
* @param rng Always use a brand new RNG object. (See the previous explanation on why you should
* not use the RNG from the `EntityPlayer.GetCollectibleRNG` method.)
* @param sourceItemConfigItem The `ItemConfigItem` that this familiar was created by. Default
* is undefined. This should always be specified so that Sacrificial
* Altar will work properly. (It informs the game which collectible
* should be removed if the familiar is tagged with the
* "cansacrifice" entity tag.) This can be obtained with:
* `Isaac.GetItemConfig().GetCollectible(collectibleType)`
* @param familiarSubType The subtype of the familiar to check. Default is -1, which matches
* every sub-type.
*/
CheckFamiliar: (
familiarVariant: FamiliarVariant,
targetCount: int,
rng: RNG,
sourceItemConfigItem?: ItemConfigItem,
familiarSubType?: int,
) => void;
ClearCostumes: () => void;
ClearDeadEyeCharge: () => void;
/** Called automatically by the game when the player exits a room. */
ClearTemporaryEffects: () => void;
/**
* Sets the charge of the active item to 0 without triggering the active item effect.
*
* @param activeSlot Default is `ActiveSlot.SLOT_PRIMARY`.
*/
DischargeActiveItem: (activeSlot?: ActiveSlot) => void;
DoZitEffect: (direction: Vector) => void;
DonateLuck: (luck: int) => void;
DropPocketItem: (pocketItemSlot: PocketItemSlot, position: Vector) => void;
/** If the player does not currently have a trinket, this function will be a no-op. */
DropTrinket: (dropPos: Vector, replaceTick: boolean) => void;
/**
* Triggers the `EVALUATE_CACHE` callback. Before calling this function, you need to set the
* appropriate cache flags by using the `EntityPlayer.AddCacheFlag` method.
*/
EvaluateItems: () => void;
/**
* @param position
* @param velocity
* @param source Default is undefined.
*/
FireBomb: (
position: Vector,
velocity: Vector,
source?: Entity,
) => EntityBomb;
/**
* @param direction
* @param source Default is undefined.
* @param damageMultiplier Default is 1.
*/
FireBrimstone: (
direction: Vector,
source?: Entity,
damageMultiplier?: float,
) => EntityLaser;
FireDelayedBrimstone: (angle: float, parent: Entity) => EntityLaser;
/**
* @param parent
* @param rotationOffset Default is 0.
* @param cantOverwrite Default is false.
* @param subType Default is 0.
* @param variant Default is 0.
*/
FireKnife: (
parent: Entity,
rotationOffset?: float,
cantOverwrite?: boolean,
subType?: int,
variant?: int,
) => EntityKnife;
/**
* @param position
* @param velocity
* @param canBeEye Default is true.
* @param noTractorBeam Default is false.
* @param canTriggerStreakEnd Default is true.
* @param source Default is undefined.
* @param damageMultiplier Default is 1.
*/
FireTear: (
position: Vector,
velocity: Vector,
canBeEye?: boolean,
noTractorBeam?: boolean,
canTriggerStreakEnd?: boolean,
source?: Entity,
damageMultiplier?: float,
) => EntityTear;
/**
* @param position
* @param laserOffset
* @param direction
* @param leftEye
* @param oneHit Default is false.
* @param source Default is undefined.
* @param damageMultiplier Default is 1.
*/
FireTechLaser: (
position: Vector,
laserOffset: LaserOffset,
direction: Vector,
leftEye: boolean,
oneHit?: boolean,
source?: Entity,
damageMultiplier?: float,
) => EntityLaser;
/**
* @param position
* @param direction
* @param radius
* @param source Default is undefined.
* @param damageMultiplier Default is 1.
*/
FireTechXLaser: (
position: Vector,
direction: Vector,
radius: float,
source?: Entity,
damageMultiplier?: float,
) => EntityLaser;
FlushQueueItem: () => boolean;
/**
* @param activeSlot Default is `ActiveSlot.SLOT_PRIMARY`.
* @param force If set, items will always be charged even if they normally cannot be recharged
* by batteries.
*/
FullCharge: (activeSlot?: ActiveSlot, force?: boolean) => boolean;
/** @param activeSlot Default is `ActiveSlot.SLOT_PRIMARY`. */
GetActiveCharge: (activeSlot?: ActiveSlot) => int;
/**
* Returns `CollectibleType.NULL` (0) if no item is held.
*
* @param activeSlot Default is `ActiveSlot.SLOT_PRIMARY`.
*/
GetActiveItem: (activeSlot?: ActiveSlot) => CollectibleType;
/**
* Returns 0 if there is no active item in the specified slot.
*
* @param activeSlot Default is ActiveSlot.SLOT_PRIMARY.
*/
GetActiveSubCharge: (activeSlot?: ActiveSlot) => int;
GetActiveWeaponEntity: () => Entity;
GetAimDirection: () => Readonly<Vector>;
GetBabySkin: () => BabySubType;
/** @param activeSlot Default is ActiveSlot.SLOT_PRIMARY. */
GetBatteryCharge: (activeSlot?: ActiveSlot) => int;
/** Returns the bit mask for which soul hearts are black hearts. */
GetBlackHearts: () => int;
/**
* Gets Tainted Bethany's blood charges. Returns 0 on characters other than Tainted Bethany. (It
* is unknown how this method is different from `EntityPlayer.GetEffectiveBloodCharge`.)
*/
GetBloodCharge: () => int;
GetBodyColor: () => SkinColor;
/** There is no separate `BombFlag` enum, so bombs use `TearFlag`. */
GetBombFlags: () => BitFlags<TearFlag>;
GetBombVariant: (
tearFlags: TearFlag | BitFlags<TearFlag>,
forceSmallBomb: boolean,
) => BombVariant;
/**
* Returns the amount of bone hearts that the player has. This is not doubled like the
* `EntityPlayer.GetMaxHearts` method is, so if e.g. the player has 3 bone hearts, this will
* return 3.
*/
GetBoneHearts: () => int;
/**
* Returns the amount of broken hearts that the player has. This is not doubled like the
* `EntityPlayer.GetMaxHearts` method is, so if e.g. the player has 3 broken hearts, this will
* return 3.
*/
GetBrokenHearts: () => int;
/** Returns `CardType.NULL` (0) if there is no card. */
GetCard: (pocketItemSlot: PocketItemSlot) => CardType;
GetCardRNG: (cardType: CardType) => RNG;
/**
* Returns the total amount of collectibles that the player has. For example, if the player has
* 1 Sad Onion and 2 Inner Eyes, then this function will return 3.
*/
GetCollectibleCount: () => int;
/**
* @param collectibleType
* @param onlyCountTrueItems If set to true, the function only counts collectibles that the
* player actually owns and ignores things like Lilith's Incubus,
* items granted by 3 Dollar Bill, and so forth.
*/
GetCollectibleNum: (
collectibleType: CollectibleType,
onlyCountTrueItems?: boolean,
) => int;
GetCollectibleRNG: (collectibleType: CollectibleType) => RNG;
GetCostumeNullPos: (
nullFrameName: string,
headScale: boolean,
direction: Vector,
) => Vector;
/**
* When the player is hit, they will flash a different color and receive invulnerability frames.
* This method returns the amount of invulnerability frames. Normally, the player will receive
* 60 invulnerability frames when dealt a half-heart of damage or 120 invulnerability frames
* when dealt a full heart of damage. Additionally, the Blind Rage trinket can affect how
* invulnerability frames are granted.
*
* Note that the frames returned by this function are render frames, not game frames.
*/
GetDamageCooldown: () => int;
/**
* Gets Tainted Bethany's blood charges. Returns 0 on characters other than Tainted Bethany. (It
* is unknown how this method is different from `EntityPlayer.GetBloodCharge`.)
*/
GetEffectiveBloodCharge: () => int;
/**
* Returns the amount of red hearts the player can have in their normal heart containers and
* bone heart containers. 1 unit is half a red heart. For example, if you have 3 red heart
* containers and 1 bone heart container, then this function would return 8 (i.e. 6 + 2).
*/
GetEffectiveMaxHearts: () => int;
/**
* Gets Bethany's soul heart charges. Returns 0 on characters other than Bethany. (It is unknown
* how this function is different from `EntityPlayer.GetSoulCharge`.)
*/
GetEffectiveSoulCharge: () => int;
GetEffects: () => TemporaryEffects;
GetEternalHearts: () => int;
GetExtraLives: () => int;
GetFireDirection: () => Direction;
GetFlyingOffset: () => Vector;
GetGoldenHearts: () => int;
GetGreedDonationBreakChance: () => float;
GetHeadColor: () => SkinColor;
GetHeadDirection: () => Direction;
/**
* Returns the maximum heart containers that the provided player can have. Normally, this is 12,
* but it can change depending on the character (e.g. Keeper) and other things (e.g. Mother's
* Kiss).
*
* This function automatically accounts for Broken Hearts. For example, if Isaac has one broken
* heart, this function will return 22 instead of 24.
*/
GetHeartLimit: () => int;
/**
* Returns the amount of red hearts the player has inside their heart containers and bone
* hearts. 1 unit is half a heart.
*/
GetHearts: () => int;
GetItemState: () => int;
GetJarFlies: () => int;
GetJarHearts: () => int;
GetLaserOffset: (laserOffset: LaserOffset, direction: Vector) => Vector;
GetLastActionTriggers: () => int;
GetLastDamageFlags: () => BitFlags<DamageFlag>;
GetLastDamageSource: () => Readonly<EntityRef>;
GetLastDirection: () => Readonly<Vector>;
/**
* - When called on Jacob or Esau, returns Jacob.
* - When called on Tainted Forgotten or Tainted Forgotten's Soul, returns Tainted Forgotten.
* - When called on any other character, returns that character.
*/
GetMainTwin: () => EntityPlayer;
/**
* Returns the amount of heart containers that the player has. 1 unit is half a heart container.
*/
GetMaxHearts: () => int;
/**
* Returns the maximum number of pocket items + pocket actives that the player can currently
* hold.
*
* - Usually, this will return 1.
* - If the player has Polydactyly, Starter Deck, or Little Baggy, it will increment the number
* by 1.
* - If the player has a pocket active item, it will increment the number by 1.
* - If the player has a dice from the Dice Bag trinket, it will increment the number by 1.
* - The maximum number this can return is 4.
*/
GetMaxPocketItems: () => int;
/** Returns the max amount of poop consumables that can be held by the player. */
GetMaxPoopMana: () => int;
/**
* Returns the maximum number of trinkets that the player can currently hold. Usually, this will
* return 1, but the player can hold up to 2 trinkets under certain conditions (e.g. having
* Mom's Purse).
*/
GetMaxTrinkets: () => int;
/**
* Returns the current passive item mimicked by Modeling Clay or CollectibleType.NULL if no
* effect is being mimicked.
*/
GetModelingClayEffect: () => CollectibleType;
GetMovementDirection: () => Direction;
GetMovementInput: () => Vector;
GetMovementJoystick: () => Vector;
GetMovementVector: () => Readonly<Vector>;
// `GetMultiShotParams` used to be used for the `GetMultiShotPositionVelocity` method, but since
// that method is now removed, `GetMultiShotParams` has no purpose.
/**
* Normally, this function returns the player. However, in some cases, NPCs can be redirected to
* attack another target, in which case this function will return the alternate target (e.g.
* after using Best Friend).
*/
GetNPCTarget: () => Entity;
/**
* Returns the character name, like "Isaac" or "Cain". Note that this will return the localized
* version of the character's name, e.g. "Magdalena" for Magdalene in Spanish.
*/
GetName: () => string;
GetNumBlueFlies: () => int;
GetNumBlueSpiders: () => int;
GetNumBombs: () => int;
GetNumCoins: () => int;
/** Returns the number of giga bombs held. */
GetNumGigaBombs: () => int;
GetNumKeys: () => int;
/**
* - When called on Jacob, returns Esau.
* - When called on Esau, returns Jacob.
* - When called on Tainted Forgotten, returns Tainted Forgotten's Soul.
* - When called on Tainted Forgotten's Soul, returns Tainted Forgotten.
* - When called on any other character, returns undefined.
*/
GetOtherTwin: () => EntityPlayer | undefined;
/** Returns `PillColor.NULL` (0) if there is no pill. */
GetPill: (pocketItemSlot: PocketItemSlot) => PillColor;
GetPillRNG: (pillEffect: PillEffect) => RNG;
/** The player type is the sub-type of the player. This is equal to what character they are. */
GetPlayerType: () => PlayerType;
// GetPocketItem is not implemented.
/** Returns how many poop consumables the player is currently holding. */
GetPoopMana: () => int;
/** Returns the poop spell at the given position in the player's spell queue. */
GetPoopSpell: (position: int) => PoopSpellType;
/**
* Returns the joystick direction that drives player movement, taking into account certain
* modifiers like disabled controls and seed effects.
*/
GetRecentMovementVector: () => Readonly<Vector>;
/**
* This returns the number of rotten hearts.
*
* Unlike other heart functions, it returns the actual number of rotten hearts. For example,
* this returns 2 if the player has 2 rotten hearts.
*/
GetRottenHearts: () => int;
GetShootingInput: () => Vector;
GetShootingJoystick: () => Vector;
GetSmoothBodyRotation: () => float;
/**
* Gets Bethany's soul heart charges. Returns 0 on characters other than Bethany. (It is unknown
* how this function is different from `EntityPlayer.GetEffectiveSoulCharge`.)
*/
GetSoulCharge: () => int;
/**
* 1 unit is half a heart. Black hearts count toward this total.
*
* Remove them with negative numbers.
*/
GetSoulHearts: () => int;
/**
* - When on The Forgotten, returns the sub-player object for The Soul.
* - When on The Soul, returns the sub-player object for The Forgotten.
* - Otherwise, returns undefined.
* - This will always return undefined if you call it on a sub-player. To get the "parent"
* player, use the `getSubPlayerParent` helper function.
*/
GetSubPlayer: () => EntitySubPlayer | undefined;
/**
* Used for tear parameters that are calculated on hit (e.g. Tough Love, Common Cold).
*
* @param weaponType
* @param damageScale Default is 1.
* @param tearDisplacement Default is 1.
* @param source Default is undefined.
*/
GetTearHitParams: (
weaponType: WeaponType,
damageScale?: float,
tearDisplacement?: int,
source?: Entity,
) => TearParams;
GetTearMovementInheritance: (shotDirection: Vector) => Vector;
GetTearPoisonDamage: () => float;
GetTearRangeModifier: () => int;
GetTotalDamageTaken: () => int;
GetTractorBeam: () => Entity;
/** Returns `TrinketType.NULL` (0) if there is no trinket. */
GetTrinket: (trinketSlot: TrinketSlot) => TrinketType;
/**
* This is the number of times that the trinket effect is applied.
*
* Returns 0 if the player does not have the particular trinket.
*/
GetTrinketMultiplier: (trinketType: TrinketType) => int;
GetTrinketRNG: (trinketType: TrinketType) => RNG;
GetVelocityBeforeUpdate: () => Readonly<Vector>;
GetZodiacEffect: () => ZodiacCollectibleType;
/**
* @param collectibleType
* @param ignoreModifiers If set to true, only counts collectibles the player actually owns and
* ignores effects granted by items like Zodiac, 3 Dollar Bill and
* Lemegeton. Default is false.
*/
HasCollectible: (
collectibleType: CollectibleType,
ignoreModifiers?: boolean,
) => boolean;
/** Returns true if the player's item effects are currently being disabled. */
HasCurseMistEffect: () => boolean;
/** Returns true if all of the player's red heart containers are filled. */
HasFullHearts: () => boolean;
/**
* Returns true if the combined value of the player's red hearts and soul hearts is equal to or
* greater than the value of the player's max hearts.
*/
HasFullHeartsAndSoulHearts: () => boolean;
HasGoldenBomb: () => boolean;
HasGoldenKey: () => boolean;
/** @param damageFlag Default is 0. */
HasInvincibility: (
damageFlag?: DamageFlag | BitFlags<DamageFlag>,
) => boolean;
HasPlayerForm: (playerForm: PlayerForm) => boolean;
HasTimedItem: () => boolean;
/**
* @param trinketType
* @param ignoreModifiers If set to true, only counts trinkets the player actually holds and
* ignores effects granted by other items. Default is false.
*/
HasTrinket: (
trinketType: TrinketType,
ignoreModifiers?: boolean,
) => boolean;
HasWeaponType: (weaponType: WeaponType) => boolean;
InitBabySkin: () => void;
IsBlackHeart: (heart: int) => boolean;
IsBoneHeart: (heartSlot: int) => boolean;
/**
* In a multiplayer game, if a player dies, they will return as a tiny ghost. This method
* returns true if the player is a co-op ghost.
*/
IsCoopGhost: () => boolean;
IsExtraAnimationFinished: () => boolean;
IsFullSpriteRendering: () => boolean;
IsHeldItemVisible: () => boolean;
/** Is the player holding up an item (card/collectible/etc.)? */
IsHoldingItem: () => boolean;
IsItemQueueEmpty: () => boolean;
IsP2Appearing: () => boolean;
IsPosInSpotLight: (position: Vector) => boolean;
/**
* Returns true for The Soul. Otherwise, returns false.
*
* Additionally, this also returns true for the player object representing Dead Tainted Lazarus
* that fires at the beginning of the run in the `POST_PLAYER_INIT` callback. (The
* `POST_PLAYER_INIT` callback fires first for Dead Tainted Lazarus before firing for the normal
* Tainted Lazarus.)
*/
IsSubPlayer: () => boolean;
/**
* This will always return false for active items that have `chargetype="special"` set in the
* `items.xml` file, even if they are not fully charged.
*
* @param activeSlot Default is `ActiveSlot.SLOT_PRIMARY`.
*/
NeedsCharge: (activeSlot?: ActiveSlot) => boolean;
PlayExtraAnimation: (animation: string) => void;
QueueExtraAnimation: (animation: string) => void;
/**
* When the player touches a collectible item, they are not granted it immediately. Instead, the
* item is a queue for the duration of the animation where the player holds the item above their
* head. When the animation is finished, the item(s) in the queue will be granted. This method
* adds a new item to the item queue. If the player is not currently playing an animation, then
* the queued item will simply be awarded instantly.
*
* @param itemConfigItem
* @param charge Default is 0.
* @param touched Default is false.
* @param golden Default is false.
* @param varData Default is false.
*/
QueueItem: (
itemConfigItem: ItemConfigItem,
charge?: int,
touched?: boolean,
golden?: boolean,
varData?: int,
) => void;
RemoveBlackHeart: (blackHeart: int) => void;
RemoveBlueFly: () => void;
RemoveBlueSpider: () => void;
/**
* @param collectibleType
* @param ignoreModifiers Ignores collectible effects granted by other items (i.e. Void).
* Default is false.
* @param activeSlot Sets the active slot this collectible should be removed from. Default is
* `ActiveSlot.SLOT_PRIMARY`.
* @param removeFromPlayerForm If successfully removed and part of a transformation, decrease
* that transformation's counter by 1. Default is true.
*/
RemoveCollectible: (
collectibleType: CollectibleType,
ignoreModifiers?: boolean,
activeSlot?: ActiveSlot,
removeFromPlayerForm?: boolean,
) => void;
RemoveCostume: (itemConfigItem: ItemConfigItem) => void;
/**
* Re-enables item effects, consumables, and pocket items removed by
* `EntityPlayer.AddCurseMistEffect`.
*/
RemoveCurseMistEffect: () => void;
RemoveGoldenBomb: () => void;
RemoveGoldenKey: () => void;
/** Removes player-specific costumes like Magdalene's hair or Cain's eyepatch. */
RemoveSkinCostume: () => void;
RenderBody: (position: Vector) => void;
RenderGlow: (position: Vector) => void;
RenderHead: (position: Vector) => void;
RenderTop: (position: Vector) => void;
ReplaceCostumeSprite: (
itemConfigItem: ItemConfigItem,
spritePath: string,
spriteID: int,
) => void;
ResetDamageCooldown: () => void;
ResetItemState: () => void;
RespawnFamiliars: () => void;
Revive: () => void;
/**
* @param charge
* @param activeSlot Default is `ActiveSlot.SLOT_PRIMARY`.
*/
SetActiveCharge: (charge: int, activeSlot?: ActiveSlot) => void;
/** This sets Tainted Bethany's blood charges. Only works on Tainted Bethany. */
SetBloodCharge: (num: int) => void;
SetCard: (pocketItemSlot: PocketItemSlot, cardType: CardType) => void;
SetFullHearts: () => void;
SetMinDamageCooldown: (damageCooldown: int) => void;
SetPill: (pocketItemSlot: PocketItemSlot, pillColor: PillColor) => void;
/**
* Sets the player's pocket active item to the given collectible.
*
* Items added to `ActiveSlot.POCKET_SINGLE_USE` will always be removed upon being used.
*
* Note that unlike the `EntityPlayer.AddCollectible` method, this function will remove the
* collectible from pools by default.
*
* @param collectibleType
* @param slot Can be either ActiveSlot.SLOT_POCKET or ActiveSlot.SLOT_POCKET2. Default is
* `ActiveSlot.SLOT_POCKET`.
* @param keepInPools If true, the item will not be removed from the item pools. Default is
* false.
*/
SetPocketActiveItem: (
collectibleType: CollectibleType,
slot?: ActiveSlot.POCKET | ActiveSlot.POCKET_SINGLE_USE,
keepInPools?: boolean,
) => void;
SetShootingCooldown: (cooldown: int) => void;
/**
* This sets Bethany's soul heart charges.
*
* @param num
*/
SetSoulCharge: (num: int) => void;
SetTargetTrapDoor: (trapDoor: GridEntity) => void;
ShootRedCandle: (direction: Vector) => void;
SpawnMawOfVoid: (durationGameFrames: int) => EntityLaser;
StopExtraAnimation: () => void;
/** This will do nothing if the player does not have a Schoolbag. */
SwapActiveItems: () => void;
ThrowBlueSpider: (position: Vector, target: Vector) => Entity;
/**
* Spawns a friendly dip (from Dirty Mind) and throws it towards the specified target.
*
* @param subType
* @param position
* @param target If Vector.Zero, throws the spawned dip in a random direction.
*/
ThrowFriendlyDip: (
subType: DipFamiliarSubType,
position: Vector,
target: Vector,
) => EntityFamiliar;
/**
* If holding an entity, throws it in the specified direction and returns it. Otherwise, returns
* undefined.
*
* @param velocity
*/
ThrowHeldEntity: (velocity: Vector) => Entity;
/**
* Triggers the extra effect granted by Book of Virtues for the given active item.
*
* @param collectibleType Default is `CollectibleType.NULL`.
* @param charge Default is 0.
*/
TriggerBookOfVirtues: (
collectibleType?: CollectibleType,
charge?: int,
) => void;
/**
* Attempts to pick up the given entity, returns true on success.
*
* Currently only works with some entity types (mainly bombs and enemies).
*/
TryHoldEntity: (entity: Entity) => boolean;
TryHoldTrinket: (trinketType: TrinketType) => boolean;
/**
* This method will crash the game if you provide it an invalid collectible type, such as -1 or
* 43. (Using 0 will not cause a crash.) Thus, it is safer to use the `RemoveCostume` method
* instead.
*
* @param collectibleType
* @param keepPersistent If set to false, this method will only remove temporary costumes.
*/
TryRemoveCollectibleCostume: (
collectibleType: CollectibleType,
keepPersistent: boolean,
) => void;
TryRemoveNullCostume: (nullItemID: NullItemID) => void;
/**
* Will remove the specified trinket, if it exists. This will also remove The Tick and smelted
* trinkets.
*
* @param trinketType If you provide an argument of 0 or an otherwise invalid trinket ID, the
* game will crash.
* @returns Whether the specified trinket was removed successfully.
*/
TryRemoveTrinket: (trinketType: TrinketType) => boolean;
/**
* This method will crash the game if you provide it an invalid trinket type, such as -1, 0, or
* 500. Thus, it is safer to use the `RemoveCostume` method instead.
*/
TryRemoveTrinketCostume: (trinketType: TrinketType) => void;
TryUseKey: () => boolean;
UpdateCanShoot: () => void;
/**
* @param collectibleType
* @param useFlag Default is 0.
* @param activeSlot The active slot this item was used from. (Set to -1 if this item was not
* triggered by any active slot.) Default is `ActiveSlot.SLOT_PRIMARY`.
* @param customVarData Default is 0.
*/
UseActiveItem: ((
collectibleType: CollectibleType,
useFlag?: UseFlag | BitFlags<UseFlag>,
activeSlot?: ActiveSlot | -1,
customVarData?: int,
) => void) &
((
collectibleType: CollectibleType,
showAnim: boolean,
keepActiveItem: boolean,
allowNonMainPlayer: boolean,
toAddCostume: boolean,
activeSlot?: ActiveSlot | -1,
customVarData?: int,
) => void);
/**
* @param cardType
* @param useFlag Default is 0.
*/
UseCard: (
cardType: CardType,
useFlag?: UseFlag | BitFlags<UseFlag>,
) => void;
/**
* @param pillEffect
* @param pillColor
* @param useFlag Default is 0.
*/
UsePill: (
pillEffect: PillEffect,
pillColor: PillColor,
useFlag?: UseFlag | BitFlags<UseFlag>,
) => void;
/** Triggers one of Tainted Blue Baby's poop spells. */
UsePoopSpell: (poopSpellType: PoopSpellType) => void;
/**
* This function will return true if the player has one or more extra lives or if a conditional
* revival item will work on the next death.
*
* Right now, there are 3 items that grant conditional extra lives:
*
* - Guppy's Collar - This function will successfully predict whether the next revive from
* Guppy's Collar will work (50% chance).
* - Broken Ankh - This function will successfully predict whether the next revive from Broken
* Ankh will work (22.22% chance).
* - Mysterious Paper - This function will only successfully predict the revive from Missing
* Poster every 4 frames, because it evaluates only one of its 4 possible item effects each
* frame.
*/
WillPlayerRevive: () => boolean;
BabySkin: BabySubType;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.FLYING`. */
CanFly: boolean;
readonly ControllerIndex: ControllerIndex;
ControlsCooldown: int;
ControlsEnabled: boolean;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.DAMAGE`. */
Damage: float;
FireDelay: int;
// FriendBallEnemy is not implemented.
HeadFrameDelay: int;
/** Internally used by IBS. Increases based on damage dealt. Range is from 0-1. */
IBSCharge: float;
ItemHoldCooldown: int;
LaserColor: Color;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.LUCK`. */
Luck: float;
/**
* Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.FIRE_DELAY`.
*/
MaxFireDelay: int;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.SPEED`. */
MoveSpeed: float;
QueuedItem: QueueItemData;
/**
* Internally used by Tainted Samson. Increases based on damage dealt. Range is from 0-100000.
*/
SamsonBerserkCharge: int;
/**
* Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.SHOT_SPEED`.
*/
ShotSpeed: float;
/**
* Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.TEAR_COLOR`.
*/
TearColor: Color;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.RANGE`. */
TearFallingAcceleration: float;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.RANGE`. */
TearFallingSpeed: float;
/** Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.TEAR_FLAG`. */
TearFlags: BitFlags<TearFlag>;
/**
* This is equal to the range stat multiplied by -1.
*
* Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.RANGE`.
*/
TearHeight: float;
/**
* This is equal to the range stat multiplied by 40.
*
* Only change this in the `EVALUATE_CACHE` callback corresponding to `CacheFlag.RANGE`.
*/
TearRange: float;
TearsOffset: Readonly<Vector>;
Variant: PlayerVariant;
}
}