programming-game
Version:
The client for programming game, an mmorpg that you interact with entirely through code.
170 lines (169 loc) • 4.17 kB
TypeScript
import { BaseIntent, IntentType, StatusEffectName, UnitStats } from "./types";
export declare enum CastType {
channel = 0,
instant = 1,
castTime = 2
}
export interface CastIntent extends BaseIntent {
type: IntentType.cast;
spell: Spells;
target?: string;
}
type SpellDefinition<T> = ChannelSpell<T> | InstantSpell<T> | CastTimeSpell<T>;
type BaseSpell<T> = {
calories?: number;
cost: number;
damage?: number;
heal?: number;
id: T;
target: SpellTarget;
castType: CastType;
range: number;
statusEffect?: {
name: StatusEffectName;
stackable: boolean;
duration: number;
effects: {
[StatusEffectMechanics: string]: number;
};
stats?: Partial<UnitStats>;
};
};
interface ChannelSpell<T> extends BaseSpell<T> {
castType: CastType.channel;
}
interface InstantSpell<T> extends BaseSpell<T> {
castType: CastType.instant;
}
interface CastTimeSpell<T> extends BaseSpell<T> {
castType: CastType.castTime;
minCastTime: number;
}
export type Spells = "aid_digestion" | "heal" | "regen" | "fireball" | "ballOfIce" | "chill" | "icicle" | "flashFreeze" | "iceArmor";
export type SpellMap = Record<Spells, SpellDefinition<Spells>>;
export type SpellTarget = "self" | "hostile" | "ally" | "player" | "any";
export declare const spellMap: {
aid_digestion: {
id: "aid_digestion";
castType: CastType.channel;
target: "any";
cost: number;
range: number;
damage: number;
heal: number;
calories: number;
};
heal: {
id: "heal";
castType: CastType.castTime;
target: "any";
cost: number;
minCastTime: number;
range: number;
heal: number;
};
regen: {
id: "regen";
castType: CastType.instant;
target: "any";
cost: number;
range: number;
statusEffect: {
name: "regen";
duration: number;
stackable: false;
effects: {
hot: number;
};
};
damage: number;
};
chill: {
id: "chill";
castType: CastType.instant;
target: "any";
cost: number;
range: number;
statusEffect: {
name: "chill";
duration: number;
stackable: false;
effects: {
slow: number;
};
stats: {
movementSpeed: number;
};
};
damage: number;
};
ballOfIce: {
id: "ballOfIce";
castType: CastType.castTime;
target: "any";
cost: number;
minCastTime: number;
range: number;
damage: number;
};
flashFreeze: {
id: "flashFreeze";
castType: CastType.instant;
target: "any";
cost: number;
range: number;
damage: number;
statusEffect: {
name: "freeze";
duration: number;
stackable: false;
effects: {
stun: number;
};
};
};
icicle: {
id: "icicle";
castType: CastType.castTime;
target: "any";
cost: number;
minCastTime: number;
range: number;
damage: number;
};
iceArmor: {
id: "iceArmor";
castType: CastType.castTime;
target: "self";
cost: number;
minCastTime: number;
range: number;
damage: number;
statusEffect: {
name: "iceArmor";
duration: number;
stackable: false;
effects: {
shield: number;
};
};
};
fireball: {
id: "fireball";
castType: CastType.castTime;
target: "any";
cost: number;
damage: number;
statusEffect: {
name: "burn";
duration: number;
stackable: false;
effects: {
dot: number;
};
};
minCastTime: number;
range: number;
};
};
export {};