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)), ]);