Release Healer Man 0.1.21

This commit is contained in:
phenom committed 2026-09-08 10:40:26 -04:00
1 parent 699fc858c9
commit f6f2375145
210 files changed
+976039 -6247

No files matched your search

+18 -1
View File
@@ -1,3 +1,8 @@
import {
normalizeRunewakerDamageFormula,
type RunewakerDamageFormulaSource,
} from "./runewakerCombatFormula";
export type EnemyAttackAnimation = "attack" | "cast";
export type EnemyAttackDelivery = "melee" | "projectile" | "area";
export type EnemyAttackTarget =
@@ -52,7 +57,15 @@ export type EnemyAbilityEffect =
readonly durationMs: number;
}
| { readonly kind: "transform"; readonly form: string }
| { readonly kind: "summon"; readonly creatureEntry: number; readonly count: number }
| {
readonly kind: "summon";
readonly creatureEntry: number;
readonly count: number;
/** Optional stable namespace for content-authored summoned entities. */
readonly entityId?: string;
/** Optional owner group used by encounter counters and reset cleanup. */
readonly spawnGroupId?: string;
}
| { readonly kind: "call-for-help"; readonly radius: number }
| { readonly kind: "encounter-event"; readonly eventId: string };
@@ -102,6 +115,8 @@ export interface EnemyAttackDefinition {
readonly repeatCooldownMs?: readonly [minimum: number, maximum: number];
readonly maximumCasts?: number;
readonly damageMultiplier: number;
/** Source-shaped RuneWaker formula evidence for imported damage mechanics. */
readonly runewakerFormula?: RunewakerDamageFormulaSource;
readonly radius?: number;
readonly telegraph?: EnemyAttackTelegraph;
readonly effect?: EnemyAbilityEffect;
@@ -236,6 +251,7 @@ export function normalizeEnemyAttack(
Math.round(finiteAtLeast(value.castTimeMs, inferredCastTimeMs, 0)),
telegraph?.warningMs ?? 0,
);
const runewakerFormula = normalizeRunewakerDamageFormula(value.runewakerFormula);
return Object.freeze({
id: value.id.trim() || fallback.id,
name: value.name.trim() || fallback.name,
@@ -260,6 +276,7 @@ export function normalizeEnemyAttack(
? { maximumCasts: value.maximumCasts }
: {}),
damageMultiplier: finiteAtLeast(value.damageMultiplier, fallback.damageMultiplier, 0),
...(runewakerFormula ? { runewakerFormula } : {}),
...(value.radius !== undefined
? { radius: finiteAtLeast(value.radius, 0, 0) }
: {}),