Newer
Older
rpg / tools / pixelart / palette.mjs
/**
 * Палитра из docs/art-style.md — единственный источник цветов арта.
 */

export const PALETTE = {
    // Пепел
    P0: '#17171d',
    P1: '#23232b',
    P2: '#2f2f38',
    P3: '#3e3e48',
    P4: '#52525c',
    P5: '#6a6a74',
    P6: '#86868f',
    P5H: '#a3a3ac',
    // Мёртвая трава
    G0: '#2b3026',
    G1: '#3d4436',
    G2: '#525b44',
    G2H: '#687053',
    // Ржавчина и металл
    R0: '#3a2822',
    R1: '#5c3b2e',
    R2: '#82503a',
    M0: '#26262e',
    M1: '#44454e',
    M2: '#61626c',
    // Вода
    W0: '#22343c',
    W1: '#32505c',
    W2: '#4a737f',
    // Тепло — только жизнь
    B0: '#8a6a2e',
    B1: '#d99a32',
    B2: '#f2cd68',
    F0: '#d97f2b',
    F1: '#f2b45a',
    // Люди и ткань
    C0: '#3a4356',
    C1: '#4d5a72',
    W3: '#8a8f7d',
    S0: '#8a6d55',
    S1: '#c9a689',
    T0: '#5a4a3c',
    T1: '#77634f'
};

/** Прозрачный пиксель. */
export const TRANSPARENT = [0, 0, 0, 0];

export function hexToRgba(hex) {
    const n = parseInt(hex.slice(1), 16);
    return [(n >> 16) & 0xff, (n >> 8) & 0xff, n & 0xff, 255];
}

/** Ключи палитры -> RGBA-значения (кэш). */
export const RGBA = Object.fromEntries(
    Object.entries(PALETTE).map(([k, v]) => [k, hexToRgba(v)])
);