Release Healer Man 0.1.45
This commit is contained in:
1 parent
756ee4f64a
commit
f82daf1c13
242 files changed
+1440
-101
No files matched your search
@@ -20,7 +20,28 @@ export type EnemyDamageSchool =
|
||||
| "shadow"
|
||||
| "holy";
|
||||
|
||||
export type EnemyControlMechanic = "confuse" | "fear" | "sleep" | "root" | "stun" | "silence";
|
||||
export type EnemyControlMechanic = "confuse" | "fear" | "sleep" | "root" | "slow" | "stun" | "silence";
|
||||
|
||||
/** Frost-style slows preserve actions while reducing authored movement speed. */
|
||||
export const ENEMY_SLOW_MOVEMENT_MULTIPLIER = 0.6;
|
||||
|
||||
export function enemyControlPreventsActions(
|
||||
mechanic: EnemyControlMechanic | null,
|
||||
): boolean {
|
||||
return mechanic !== null && mechanic !== "root" && mechanic !== "slow";
|
||||
}
|
||||
|
||||
export function enemyControlPreventsMovement(
|
||||
mechanic: EnemyControlMechanic | null,
|
||||
): boolean {
|
||||
return mechanic !== null && mechanic !== "slow";
|
||||
}
|
||||
|
||||
export function enemyControlMovementMultiplier(
|
||||
mechanic: EnemyControlMechanic | null,
|
||||
): number {
|
||||
return mechanic === "slow" ? ENEMY_SLOW_MOVEMENT_MULTIPLIER : 1;
|
||||
}
|
||||
|
||||
/**
|
||||
* A persistent enemy aura that procs a short-lived, charged critical-strike
|
||||
@@ -49,20 +70,35 @@ export interface EnemyAttackTelegraph {
|
||||
readonly angleDegrees?: number;
|
||||
}
|
||||
|
||||
export type EnemyAbilityEffect =
|
||||
export type EnemyAtomicAbilityEffect =
|
||||
| { readonly kind: "damage"; readonly multiplier: number }
|
||||
| { readonly kind: "heal"; readonly multiplier: number }
|
||||
| {
|
||||
readonly kind: "leech";
|
||||
readonly damageMultiplier: number;
|
||||
readonly healMultiplier: number;
|
||||
}
|
||||
| {
|
||||
readonly kind: "aura";
|
||||
readonly aura: string;
|
||||
readonly durationMs: number;
|
||||
readonly magnitude?: number;
|
||||
/** Multiplier applied to damage received while this aura is active. */
|
||||
readonly damageTakenMultiplier?: number;
|
||||
readonly damageSchool?: EnemyDamageSchool;
|
||||
/** Absorb capacity expressed in multiples of the caster's attack power. */
|
||||
readonly absorbMultiplier?: number;
|
||||
readonly reflectSpellChance?: number;
|
||||
/** Portion of subsequent outgoing attack power returned as healing. */
|
||||
readonly lifeStealPercent?: number;
|
||||
readonly meleeAutoCriticalProc?: EnemyMeleeAutoCriticalProc;
|
||||
}
|
||||
| {
|
||||
readonly kind: "target-aura";
|
||||
readonly aura: string;
|
||||
readonly durationMs: number;
|
||||
readonly damageTakenMultiplier?: number;
|
||||
readonly damageSchool?: EnemyDamageSchool;
|
||||
}
|
||||
| {
|
||||
readonly kind: "control";
|
||||
@@ -72,6 +108,7 @@ export type EnemyAbilityEffect =
|
||||
readonly damageMultiplier?: number;
|
||||
}
|
||||
| { readonly kind: "transform"; readonly form: string }
|
||||
| { readonly kind: "pull"; readonly destination: "source" }
|
||||
| {
|
||||
readonly kind: "summon";
|
||||
readonly creatureEntry: number;
|
||||
@@ -84,6 +121,12 @@ export type EnemyAbilityEffect =
|
||||
| { readonly kind: "call-for-help"; readonly radius: number }
|
||||
| { readonly kind: "encounter-event"; readonly eventId: string };
|
||||
|
||||
export type EnemyAbilityEffect = EnemyAtomicAbilityEffect | {
|
||||
/** A single source spell that resolves more than one supported mechanic. */
|
||||
readonly kind: "composite";
|
||||
readonly effects: readonly EnemyAtomicAbilityEffect[];
|
||||
};
|
||||
|
||||
export type EnemyAbilityCondition =
|
||||
| { readonly kind: "in-combat" }
|
||||
| {
|
||||
@@ -179,10 +222,21 @@ function normalizeCooldownRange(
|
||||
}
|
||||
|
||||
function harmfulEnemyAttack(value: EnemyAttackDefinition): boolean {
|
||||
return !value.effect
|
||||
|| value.effect.kind === "damage"
|
||||
if (!value.effect) return true;
|
||||
if (value.effect.kind === "composite") {
|
||||
return value.effect.effects.some((effect) => (
|
||||
effect.kind === "damage"
|
||||
|| effect.kind === "leech"
|
||||
|| effect.kind === "control"
|
||||
|| effect.kind === "target-aura"
|
||||
|| effect.kind === "pull"
|
||||
));
|
||||
}
|
||||
return value.effect.kind === "damage"
|
||||
|| value.effect.kind === "leech"
|
||||
|| value.effect.kind === "control"
|
||||
|| value.effect.kind === "target-aura";
|
||||
|| value.effect.kind === "target-aura"
|
||||
|| value.effect.kind === "pull";
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in new issue
Block a user