Files
healer-man/src/game/coaFirstPartyRoster.ts
T
2026-10-04 13:13:35 -04:00

57 lines
1.7 KiB
TypeScript

import type { CoaClassId } from "../app/characterCatalog";
import type { PartyRole } from "./partyRoles";
export type CoaFirstPartySeatRole = "tank" | "healer" | "melee" | "ranged" | "caster";
export interface CoaFirstPartyMemberDefinition {
readonly classId: CoaClassId;
readonly specializationId: string;
readonly specialization: string;
/** Seat label; melee, ranged, and caster all use the shared damage role in combat. */
readonly role: CoaFirstPartySeatRole;
readonly partyRole: PartyRole;
}
/** Fixed targeted diagnostic roster. This does not affect readiness or party pools. */
export const COA_FIRST_PARTY_MEMBERS: readonly CoaFirstPartyMemberDefinition[] = Object.freeze([
Object.freeze({
classId: "guardian",
specializationId: "guardian:vanguard",
specialization: "Vanguard",
role: "tank",
partyRole: "tank",
}),
Object.freeze({
classId: "witch-doctor",
specializationId: "witch-doctor:brewing",
specialization: "Brewing",
role: "healer",
partyRole: "healer",
}),
Object.freeze({
classId: "barbarian",
specializationId: "barbarian:brutality",
specialization: "Brutality",
role: "melee",
partyRole: "damage",
}),
Object.freeze({
classId: "ranger",
specializationId: "ranger:archery",
specialization: "Archery",
role: "ranged",
partyRole: "damage",
}),
Object.freeze({
classId: "pyromancer",
specializationId: "pyromancer:incineration",
specialization: "Incineration",
role: "caster",
partyRole: "damage",
}),
]);
export const COA_FIRST_PARTY_CLASS_IDS: readonly CoaClassId[] = Object.freeze([
...new Set(COA_FIRST_PARTY_MEMBERS.map((member) => member.classId)),
]);