isaac-typescript-definitions
Version:
TypeScript definitions for The Binding of Isaac: Repentance.
401 lines (348 loc) • 14.6 kB
TypeScript
import type { BossID } from "../../enums/collections/roomSubTypes";
import type { SlotVariant } from "../../enums/collections/variants";
import type { EntityCollisionClass } from "../../enums/EntityCollisionClass";
import type { EntityGridCollisionClass } from "../../enums/EntityGridCollisionClass";
import type { EntityType } from "../../enums/EntityType";
import type { DamageFlag } from "../../enums/flags/DamageFlag";
import type { EntityFlag } from "../../enums/flags/EntityFlag";
import type { SortingLayer } from "../../enums/SortingLayer";
declare global {
interface Entity extends IsaacAPIClass {
/**
* Adds a burn effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. The minimum is 2
* frames.
* @param damage The damage taken per tick. Each damage tick is 20 frames apart.
*/
AddBurn: (source: EntityRef, duration: int, damage: float) => void;
/**
* Adds a charmed effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. If set to -1, the
* effect will be permanent and the entity will follow you to different rooms.
*/
AddCharmed: (source: EntityRef, duration: int) => void;
/**
* Adds a confusion effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. The maximum is 150.
* @param ignoreBosses
*/
AddConfusion: (
source: EntityRef,
duration: int,
ignoreBosses: boolean,
) => void;
/**
* Adds one or more `EntityFlag` to the entity. Flags are used to add specific effects like
* being friendly or being shrunk.
*/
AddEntityFlags: (entityFlags: EntityFlag | BitFlags<EntityFlag>) => void;
/**
* Adds a fear effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. The maximum is 150.
*/
AddFear: (source: EntityRef, duration: int) => void;
/**
* Adds a freeze effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. The maximum is 150.
*/
AddFreeze: (source: EntityRef, duration: int) => void;
/** Heals the entity. */
AddHealth: (hitPoints: float) => void;
/**
* Turns the entity into a gold statue. Effectively, this means that they cannot move, cannot
* attack, and drop coins when killed.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. The maximum is 150.
* (However, if a value higher than 150 is passed, the freeze will be reduced to
* 150 frames, but the gold color will persist for the full duration.)
*/
AddMidasFreeze: (source: EntityRef, duration: int) => void;
/**
* Adds a poison effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for. The minimum is 2
* frames. The maximum is 150.
* @param damage The damage taken per tick. Each damage tick is 20 frames apart.
*/
AddPoison: (source: EntityRef, duration: int, damage: float) => void;
/**
* Adds a shrink effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for.
*/
AddShrink: (source: EntityRef, duration: int) => void;
/**
* Adds a slowing effect to the entity.
*
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param duration The number of frames that the effect should apply for.
* @param slowValue This is the multiplier applied to the entity's movement speed. For example,
* a value of 0.5 would slow down the entity by 50%.
* @param slowColor
*/
AddSlowing: (
source: EntityRef,
duration: int,
slowValue: float,
slowColor: Color,
) => void;
AddVelocity: (velocity: Vector) => void;
BloodExplode: () => void;
// `CanShutDoors` is deliberately not implemented here because it conflicts with
// `EntityNPC.CanShutDoors`.
/** Removes one or more `EntityFlag` from the entity. */
ClearEntityFlags: (entityFlags: EntityFlag | BitFlags<EntityFlag>) => void;
/**
* Returns true if the entity is currently colliding with a valid `GridEntity`, as dictated by
* its `Entity.GridCollisionClass`.
*/
CollidesWithGrid: () => boolean;
Die: () => void;
/**
* Checks whether the entity is still spawned in the current room.
*
* This is mostly useful in situations where you are unwrapping an `EntityPtr` and the
* corresponding entity may or may not have been killed in the interim period.
*/
Exists: () => boolean;
/**
* Note that `BossID` is not equal to `EntityType`; see the `BossID` enum.
*
* Returns 0 if the entity is not a boss. It will also return 0 if this a custom boss without a
* "bossID" attribute set in the "entities2.xml" file.
*/
GetBossID: () => BossID | 0;
GetColor: () => Readonly<Color>;
/**
* Returns a Lua table that contains mod-related data associated with the entity. Initially,
* this will always be an empty table. Any values stored in the table by mods will persist until
* the entity is despawned.
*
* Since this table can contain anything, the type is annotated as `Record<string, unknown>`. In
* order to get type safety, you will want to probably want to use a type assertion on the data
* to convert it to a more specific interface that represents your specific data.
*
* For more information, see the tutorial on the IsaacScript website:
* https://isaacscript.github.io/main/using-get-data/
*/
GetData: () => Record<string, unknown>;
GetDropRNG: () => RNG;
GetEntityFlags: () => EntityFlag | BitFlags<EntityFlag>;
/**
* Returns the last child of this entity. This is useful for certain segmented enemies so you
* can go all the way to the bottom "tail" entity in one method call.
*/
GetLastChild: () => Entity;
/**
* Returns the last parent of this entity. This is useful for certain segmented enemies so you
* can go all the way to the top "head" entity in one method call.
*/
GetLastParent: () => Entity;
GetSprite: () => Sprite;
HasCommonParentWithEntity: (other: Entity) => boolean;
HasEntityFlags: (entityFlags: EntityFlag | BitFlags<EntityFlag>) => boolean;
HasFullHealth: () => boolean;
HasMortalDamage: () => boolean;
/**
* @deprecated Consider using the `isActiveEnemy` helper function from `isaacscript-common`
* instead, since it will correctly handle friendly entities, Grimaces, Ultra Greed,
* and Mother.
*/
IsActiveEnemy: (includeDead: boolean) => boolean;
IsBoss: () => boolean;
IsDead: () => boolean;
IsEnemy: () => boolean;
IsFlying: () => boolean;
IsFrame: (frame: int, offset: int) => boolean;
IsInvincible: () => boolean;
IsVisible: () => boolean;
/** Returns true for enemies that can be damaged. */
IsVulnerableEnemy: () => boolean;
Kill: () => void;
MultiplyFriction: (value: float) => void;
PostRender: () => void;
Remove: () => void;
RemoveStatusEffects: () => void;
Render: (offset: Vector) => void;
RenderShadowLayer: (offset: Vector) => boolean;
/**
* @param color
* @param duration
* @param priority
* @param fadeout Default value is false.
* @param share Default value is false.
*/
SetColor: (
color: Color,
duration: int,
priority: int,
fadeout?: boolean,
share?: boolean,
) => void;
SetSize: (
size: float,
sizeMulti: Vector,
numGridCollisionPoints: int,
) => void;
SetSpriteFrame: (animation: string, frameNum: int) => void;
SetSpriteOverlayFrame: (animation: string, frameNum: int) => void;
/**
* The game adds taken damage to a damage buffer, which gets applied in the next frame.
* Therefore, this method will not decrement the entity's HP immediately. Rather, it is only
* updated on the next frame (even if `countdownFrames` is equal to 0).
*
* @param amount
* @param damageFlags
* @param source Required. If you do not want the effect to have a source, pass
* `EntityRef(undefined)`.
* @param countdownFrames
*/
TakeDamage: (
amount: float,
damageFlags: DamageFlag | BitFlags<DamageFlag>,
source: EntityRef,
countdownFrames: int,
) => boolean;
/**
* Casts an `Entity` into an `EntityBomb`, which has bomb-specific methods and properties. If
* the associated entity is not a bomb, then this method will return undefined.
*/
ToBomb: () => EntityBomb | undefined;
/**
* Casts an `Entity` into an `EntityEffect`, which has effect-specific methods and properties.
* If the associated entity is not a effect, then this method will return undefined.
*/
ToEffect: () => EntityEffect | undefined;
/**
* Casts an `Entity` into an `EntityFamiliar`, which has familiar-specific methods and
* properties. If the associated entity is not a familiar, then this method will return
* undefined.
*/
ToFamiliar: () => EntityFamiliar | undefined;
/**
* Casts an `Entity` into an `EntityKnife`, which has knife-specific methods and properties. If
* the associated entity is not a knife, then this method will return undefined.
*/
ToKnife: () => EntityKnife | undefined;
/**
* Casts an `Entity` into an `EntityLaser`, which has laser-specific methods and properties. If
* the associated entity is not a laser, then this method will return undefined.
*/
ToLaser: () => EntityLaser | undefined;
/**
* Casts an `Entity` into an `EntityNPC`, which has NPC-specific methods and properties. If the
* associated entity is not an NPC, then this method will return undefined.
*/
ToNPC: () => EntityNPC | undefined;
/**
* Casts an `Entity` into an `EntityPickup`, which has pickup-specific methods and properties.
* If the associated entity is not a pickup, then this method will return undefined.
*/
ToPickup: () => EntityPickup | undefined;
/**
* Casts an `Entity` into an `EntityPlayer`, which has player-specific methods and properties.
* If the associated entity is not a player, then this method will return undefined.
*/
ToPlayer: () => EntityPlayer | undefined;
/**
* Casts an `Entity` into an `EntityProjectile`, which has projectile-specific methods and
* properties. If the associated entity is not a projectile, then this method will return
* undefined.
*/
ToProjectile: () => EntityProjectile | undefined;
/**
* Casts an `Entity` into an `EntityTear`, which has tear-specific methods and properties. If
* the associated entity is not a tear, then this method will return undefined.
*/
ToTear: () => EntityTear | undefined;
/**
* Runs the post-update logic for the entity for a single frame, which will cause the associated
* callback to fire. Mods usually never need to call this function, as it can cause bugs when
* post-update logic is ran more than once a frame.
*/
Update: () => void;
Child?: Entity;
CollisionDamage: float;
// `Color` is deliberately not implemented in favor of `GetColor` and `SetColor`.
DepthOffset: float;
readonly DropSeed: Seed;
EntityCollisionClass: EntityCollisionClass;
FlipX: boolean;
readonly FrameCount: int;
Friction: float;
GridCollisionClass: EntityGridCollisionClass;
HitPoints: float;
readonly Index: int;
readonly InitSeed: Seed;
Mass: float;
MaxHitPoints: float;
Parent?: Entity;
Position: Vector;
PositionOffset: Readonly<Vector>;
RenderZOffset: int;
Size: float;
SizeMulti: Vector;
SortingLayer: SortingLayer;
/**
* The room grid index where the entity spawned upon first entering the room.
*
* Entities that are spawned after the initial room generation will have a `SpawnGridIndex` of
* -1.
*/
readonly SpawnGridIndex: int;
SpawnerEntity?: Entity;
SpawnerType: EntityType;
SpawnerVariant: int;
/**
* The color of the gibs when the entity dies.
*
* This field is read-only, so if you want to change it, you have to replace the entire thing
* with a new `Color` object.
*/
SplatColor: Readonly<Color>;
SpriteOffset: Vector;
SpriteRotation: float;
/**
* The multiplier for the size of the entity's sprite. This can be used to also scale the shadow
* of the entity.
*
* For `EntityPlayer` specifically, this is a player "size" stat. Only change this in the
* `EVALUATE_CACHE` callback corresponding to `CacheFlag.SIZE`.
*/
SpriteScale: Vector;
SubType: int;
Target?: Entity;
TargetPosition: Readonly<Vector>;
readonly Type: EntityType;
Variant: int;
Velocity: Vector;
Visible: boolean;
}
/** For `EntityType.SLOT` (6). */
interface EntitySlot extends Entity {
Type: EntityType.SLOT;
Variant: SlotVariant;
}
}