Release Healer Man 0.1.45

This commit is contained in:
phenom committed 2026-09-15 14:43:15 -04:00
1 parent 756ee4f64a
commit f82daf1c13
242 files changed
+1440 -101

No files matched your search

+59 -5
View File
@@ -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";
}
/**