import type { RegionalName } from '$lib/regional-name'; import globalJSON from '../../../../global/conversation.json'; /** * Lobby conversation data. */ export interface Conversation { /** * Character who owns the conversation as a gallery entry. */ chara_id: number; /** * Number of the conversation within the character's conversation gallery. */ number: number; /** * Location ID of the conversation. */ location: 110 | 120 | 130 | 210 | 220 | 310 | 410 | 420 | 430 | 510 | 520 | 530; /** * English name of the location, for convenience. */ location_name: string; /** * First character in the conversation. * Not necessarily equal to chara_id. */ chara_1: number; /** * Second character, if present. */ chara_2?: number; /** * Third character, if present. */ chara_3?: number; /** * Some unknown number in the game's local database. */ condition_type: 0 | 1 | 2 | 3 | 4; } export const conversation = { global: globalJSON as Conversation[], }; export const byChara = { global: globalJSON.reduce( (m, c) => m.set(c.chara_id, (m.get(c.chara_id) ?? []).concat(c as Conversation)), new Map(), ), }; export const locations: Record = { 110: { name: { en: 'right side front' }, group: 1 }, 120: { name: { en: 'right side front' }, group: 1 }, 130: { name: { en: 'right side front' }, group: 1 }, 210: { name: { en: 'left side table' }, group: 2 }, 220: { name: { en: 'left side table' }, group: 2 }, 310: { name: { en: 'center back seat' }, group: 3 }, 410: { name: { en: 'center posters' }, group: 4 }, 420: { name: { en: 'center posters' }, group: 4 }, 430: { name: { en: 'center posters' }, group: 4 }, 510: { name: { en: 'left side school map' }, group: 5 }, 520: { name: { en: 'left side school map' }, group: 5 }, 530: { name: { en: 'left side school map' }, group: 5 }, }; function locCharas(convos: Conversation[], locGroup: 1 | 2 | 3 | 4 | 5) { const m = convos .filter((c) => locations[c.location].group === locGroup) .flatMap((c) => [c.chara_1, c.chara_2, c.chara_3].filter((x) => x != null)) .reduce((m, id) => m.set(id, 1 + (m.get(id) ?? 0)), new Map()); return [...m].toSorted((a, b) => b[1] - a[1]); // descending } export const groupPopulars = { global: { 1: locCharas(conversation.global, 1), 2: locCharas(conversation.global, 2), 3: locCharas(conversation.global, 3), 4: locCharas(conversation.global, 4), 5: locCharas(conversation.global, 5), }, };