Files
Dune/game/leader-art.ts
T
2026-09-08 07:37:52 +10:00

381 lines
8.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/** Original portrait assets. This registry grants no access to an identity. */
export type LeaderArt = Readonly<{
id: string;
name: string;
src: string;
objectPosition: string;
}>;
export const LEADER_ART: Readonly<Record<string, LeaderArt>> = Object.freeze({
'atreides-0': {
id: 'atreides-0',
name: 'Thufir Hawat',
src: '/art/leaders/atreides-0-v1.png',
objectPosition: '50% 50%',
},
'atreides-1': {
id: 'atreides-1',
name: 'Lady Jessica',
src: '/art/leaders/atreides-1-v1.png',
objectPosition: '50% 50%',
},
'atreides-2': {
id: 'atreides-2',
name: 'Gurney Halleck',
src: '/art/leaders/atreides-2-v1.png',
objectPosition: '50% 50%',
},
'atreides-3': {
id: 'atreides-3',
name: 'Duncan Idaho',
src: '/art/leaders/atreides-3-v1.png',
objectPosition: '50% 50%',
},
'atreides-4': {
id: 'atreides-4',
name: 'Dr. Yueh',
src: '/art/leaders/atreides-4-v1.png',
objectPosition: '50% 50%',
},
'harkonnen-0': {
id: 'harkonnen-0',
name: 'Feyd-Rautha',
src: '/art/leaders/harkonnen-0-v1.png',
objectPosition: '50% 50%',
},
'harkonnen-1': {
id: 'harkonnen-1',
name: 'Beast Rabban',
src: '/art/leaders/harkonnen-1-v1.png',
objectPosition: '50% 50%',
},
'harkonnen-2': {
id: 'harkonnen-2',
name: 'Piter de Vries',
src: '/art/leaders/harkonnen-2-v1.png',
objectPosition: '50% 50%',
},
'harkonnen-3': {
id: 'harkonnen-3',
name: 'Captain Iakin Nefud',
src: '/art/leaders/harkonnen-3-v1.png',
objectPosition: '50% 50%',
},
'harkonnen-4': {
id: 'harkonnen-4',
name: 'Umman Kudu',
src: '/art/leaders/harkonnen-4-v1.png',
objectPosition: '50% 50%',
},
'emperor-0': {
id: 'emperor-0',
name: 'Hasimir Fenring',
src: '/art/leaders/emperor-0-v1.png',
objectPosition: '50% 50%',
},
'emperor-1': {
id: 'emperor-1',
name: 'Captain Aramsham',
src: '/art/leaders/emperor-1-v1.png',
objectPosition: '50% 50%',
},
'emperor-2': {
id: 'emperor-2',
name: 'Caid',
src: '/art/leaders/emperor-2-v1.png',
objectPosition: '50% 50%',
},
'emperor-3': {
id: 'emperor-3',
name: 'Burseg',
src: '/art/leaders/emperor-3-v1.png',
objectPosition: '50% 50%',
},
'emperor-4': {
id: 'emperor-4',
name: 'Bashar',
src: '/art/leaders/emperor-4-v1.png',
objectPosition: '50% 50%',
},
'fremen-0': {
id: 'fremen-0',
name: 'Stilgar',
src: '/art/leaders/fremen-0-v2.png',
objectPosition: '50% 50%',
},
'fremen-1': {
id: 'fremen-1',
name: 'Chani',
src: '/art/leaders/fremen-1-v2.png',
objectPosition: '50% 50%',
},
'fremen-2': {
id: 'fremen-2',
name: 'Otheym',
src: '/art/leaders/fremen-2-v2.png',
objectPosition: '50% 50%',
},
'fremen-3': {
id: 'fremen-3',
name: 'Shadout Mapes',
src: '/art/leaders/fremen-3-v2.png',
objectPosition: '50% 50%',
},
'fremen-4': {
id: 'fremen-4',
name: 'Jamis',
src: '/art/leaders/fremen-4-v2.png',
objectPosition: '50% 50%',
},
'guild-0': {
id: 'guild-0',
name: 'Staban Tuek',
src: '/art/leaders/guild-0-v1.png',
objectPosition: '50% 50%',
},
'guild-1': {
id: 'guild-1',
name: 'Master Bewt',
src: '/art/leaders/guild-1-v1.png',
objectPosition: '50% 50%',
},
'guild-2': {
id: 'guild-2',
name: 'Esmar Tuek',
src: '/art/leaders/guild-2-v1.png',
objectPosition: '50% 50%',
},
'guild-3': {
id: 'guild-3',
name: 'Soo-Soo Sook',
src: '/art/leaders/guild-3-v1.png',
objectPosition: '50% 50%',
},
'guild-4': {
id: 'guild-4',
name: 'Guild Representative',
src: '/art/leaders/guild-4-v1.png',
objectPosition: '50% 50%',
},
'beneGesserit-0': {
id: 'beneGesserit-0',
name: 'Alia',
src: '/art/leaders/beneGesserit-0-v1.png',
objectPosition: '50% 50%',
},
'beneGesserit-1': {
id: 'beneGesserit-1',
name: 'Wanna Marcus',
src: '/art/leaders/beneGesserit-1-v1.png',
objectPosition: '50% 50%',
},
'beneGesserit-2': {
id: 'beneGesserit-2',
name: 'Princess Irulan',
src: '/art/leaders/beneGesserit-2-v1.png',
objectPosition: '50% 50%',
},
'beneGesserit-3': {
id: 'beneGesserit-3',
name: 'Reverend Mother Ramallo',
src: '/art/leaders/beneGesserit-3-v1.png',
objectPosition: '50% 50%',
},
'beneGesserit-4': {
id: 'beneGesserit-4',
name: 'Margot Lady Fenring',
src: '/art/leaders/beneGesserit-4-v1.png',
objectPosition: '50% 50%',
},
'ixians-0': {
id: 'ixians-0',
name: 'Dominic Vernius',
src: '/art/leaders/ixians-0-v1.png',
objectPosition: '50% 50%',
},
'ixians-1': {
id: 'ixians-1',
name: 'C’tair Pilru',
src: '/art/leaders/ixians-1-v1.png',
objectPosition: '50% 50%',
},
'ixians-2': {
id: 'ixians-2',
name: 'Tessia Vernius',
src: '/art/leaders/ixians-2-v1.png',
objectPosition: '50% 50%',
},
'ixians-3': {
id: 'ixians-3',
name: 'Kailea Vernius',
src: '/art/leaders/ixians-3-v1.png',
objectPosition: '50% 50%',
},
'ixians-4': {
id: 'ixians-4',
name: 'Cammar Pilru',
src: '/art/leaders/ixians-4-v1.png',
objectPosition: '50% 50%',
},
'tleilaxu-0': {
id: 'tleilaxu-0',
name: 'Zoal',
src: '/art/leaders/tleilaxu-0-v1.png',
objectPosition: '50% 50%',
},
'tleilaxu-1': {
id: 'tleilaxu-1',
name: 'Hidar Fen Ajidica',
src: '/art/leaders/tleilaxu-1-v1.png',
objectPosition: '50% 50%',
},
'tleilaxu-2': {
id: 'tleilaxu-2',
name: 'Master Zaaf',
src: '/art/leaders/tleilaxu-2-v1.png',
objectPosition: '50% 50%',
},
'tleilaxu-3': {
id: 'tleilaxu-3',
name: 'Wykk',
src: '/art/leaders/tleilaxu-3-v1.png',
objectPosition: '50% 50%',
},
'tleilaxu-4': {
id: 'tleilaxu-4',
name: 'Blin',
src: '/art/leaders/tleilaxu-4-v1.png',
objectPosition: '50% 50%',
},
'choam-0': {
id: 'choam-0',
name: 'Frankos Aru',
src: '/art/leaders/choam-0-v1.png',
objectPosition: '50% 50%',
},
'choam-1': {
id: 'choam-1',
name: 'Lady Jalma',
src: '/art/leaders/choam-1-v1.png',
objectPosition: '50% 50%',
},
'choam-2': {
id: 'choam-2',
name: 'Rajiv Londine',
src: '/art/leaders/choam-2-v1.png',
objectPosition: '50% 50%',
},
'choam-3': {
id: 'choam-3',
name: 'Duke Verdun',
src: '/art/leaders/choam-3-v1.png',
objectPosition: '50% 50%',
},
'choam-4': {
id: 'choam-4',
name: 'Viscount Tull',
src: '/art/leaders/choam-4-v1.png',
objectPosition: '50% 50%',
},
'richese-0': {
id: 'richese-0',
name: 'Ein Calimar',
src: '/art/leaders/richese-0-v1.png',
objectPosition: '50% 50%',
},
'richese-1': {
id: 'richese-1',
name: 'Lady Helena',
src: '/art/leaders/richese-1-v1.png',
objectPosition: '50% 50%',
},
'richese-2': {
id: 'richese-2',
name: 'Flinto Kinnis',
src: '/art/leaders/richese-2-v1.png',
objectPosition: '50% 50%',
},
'richese-3': {
id: 'richese-3',
name: 'Haloa Rund',
src: '/art/leaders/richese-3-v1.png',
objectPosition: '50% 50%',
},
'richese-4': {
id: 'richese-4',
name: 'Talis Balt',
src: '/art/leaders/richese-4-v1.png',
objectPosition: '50% 50%',
},
'ecaz-0': {
id: 'ecaz-0',
name: 'Sanya Ecaz',
src: '/art/leaders/ecaz-0-v1.png',
objectPosition: '50% 50%',
},
'ecaz-1': {
id: 'ecaz-1',
name: 'Whitmore Bludd',
src: '/art/leaders/ecaz-1-v1.png',
objectPosition: '50% 50%',
},
'ecaz-2': {
id: 'ecaz-2',
name: 'Ilesa Ecaz',
src: '/art/leaders/ecaz-2-v1.png',
objectPosition: '50% 50%',
},
'ecaz-3': {
id: 'ecaz-3',
name: 'Rivvy Dinari',
src: '/art/leaders/ecaz-3-v1.png',
objectPosition: '50% 50%',
},
'ecaz-4': {
id: 'ecaz-4',
name: 'Bindikk Narvi',
src: '/art/leaders/ecaz-4-v1.png',
objectPosition: '50% 50%',
},
'moritani-0': {
id: 'moritani-0',
name: 'Lupino Ord',
src: '/art/leaders/moritani-0-v1.png',
objectPosition: '50% 50%',
},
'moritani-1': {
id: 'moritani-1',
name: 'Grieu Kronos',
src: '/art/leaders/moritani-1-v1.png',
objectPosition: '50% 50%',
},
'moritani-2': {
id: 'moritani-2',
name: 'Hiih Resser',
src: '/art/leaders/moritani-2-v1.png',
objectPosition: '50% 50%',
},
'moritani-3': {
id: 'moritani-3',
name: 'Trin Kronos',
src: '/art/leaders/moritani-3-v1.png',
objectPosition: '50% 50%',
},
'moritani-4': {
id: 'moritani-4',
name: 'Vando Terboli',
src: '/art/leaders/moritani-4-v1.png',
objectPosition: '50% 50%',
},
});
/** Require an exact supplied identity; never guess from a faction or hidden index. */
export function leaderArt(
id: string | undefined,
name: string,
): LeaderArt | undefined {
if (!id || !Object.hasOwn(LEADER_ART, id)) return undefined;
const art = LEADER_ART[id];
return art.name === name ? art : undefined;
}