import type { OutfitSlot } from './types'; // Outfit vocabulary. Types/colours the generator draws from and dress-code rules // predicate on. Slot taxonomy cross-checked against the 90sDJsim wardrobe catalog // (docs/ASSETS.md ยง1) so a future art pass maps 1:1. export interface OutfitTypeDef { type: string; weight: number; colours: readonly string[]; canLogo?: boolean; canVintage?: boolean; } export const PALETTE: Record = { white: 0xf2f2f2, black: 0x14141c, grey: 0x8a8a94, navy: 0x1e2a52, red: 0xc03434, green: 0x2e7d46, blue: 0x3465c0, pink: 0xe06fa4, purple: 0x7a4fc0, yellow: 0xd8c23a, orange: 0xd07c2e, brown: 0x6e4a2e, cream: 0xe8ddc0, denim: 0x4a6a95, }; export const OUTFIT_VOCAB: Record = { shoes: [ { type: 'sneaker', weight: 5, colours: ['white', 'black', 'red', 'grey'], canLogo: true, canVintage: true }, { type: 'boot', weight: 2, colours: ['black', 'brown'] }, { type: 'dress', weight: 2, colours: ['black', 'brown'] }, { type: 'heel', weight: 2, colours: ['black', 'red', 'pink', 'white'] }, { type: 'thong', weight: 1, colours: ['black', 'blue', 'yellow'] }, // the footwear, obviously { type: 'loafer', weight: 1, colours: ['brown', 'black', 'cream'] }, { type: 'platform', weight: 1, colours: ['black', 'purple', 'pink'], canVintage: true }, ], legs: [ { type: 'jeans', weight: 5, colours: ['denim', 'black', 'grey'] }, { type: 'chinos', weight: 3, colours: ['cream', 'navy', 'brown'] }, { type: 'skirt', weight: 3, colours: ['black', 'red', 'denim', 'pink'] }, { type: 'trackies', weight: 2, colours: ['grey', 'black', 'navy'], canLogo: true }, { type: 'shorts', weight: 2, colours: ['denim', 'cream', 'black'] }, { type: 'slacks', weight: 2, colours: ['black', 'grey', 'navy'] }, { type: 'cargo', weight: 1, colours: ['green', 'grey', 'brown'] }, ], top: [ { type: 'tee', weight: 5, colours: ['white', 'black', 'grey', 'red', 'green', 'navy'], canLogo: true, canVintage: true }, { type: 'shirt', weight: 4, colours: ['white', 'blue', 'pink', 'cream'] }, { type: 'singlet', weight: 2, colours: ['white', 'black', 'grey'], canLogo: true }, { type: 'polo', weight: 2, colours: ['navy', 'white', 'green', 'red'], canLogo: true }, { type: 'crop', weight: 2, colours: ['white', 'black', 'pink', 'purple'] }, { type: 'dressShirt', weight: 2, colours: ['white', 'black'] }, { type: 'jersey', weight: 1, colours: ['red', 'blue', 'yellow'], canLogo: true, canVintage: true }, ], outer: [ { type: 'none', weight: 6, colours: ['black'] }, { type: 'blazer', weight: 1, colours: ['black', 'navy', 'grey'] }, { type: 'bomber', weight: 2, colours: ['black', 'green', 'navy'], canLogo: true, canVintage: true }, { type: 'hoodie', weight: 2, colours: ['black', 'grey', 'red'], canLogo: true }, { type: 'leather', weight: 1, colours: ['black', 'brown'], canVintage: true }, { type: 'puffer', weight: 1, colours: ['black', 'orange', 'purple'], canLogo: true }, ], hair: [ { type: 'short', weight: 5, colours: ['black', 'brown', 'yellow', 'grey'] }, { type: 'long', weight: 3, colours: ['black', 'brown', 'yellow', 'red'] }, { type: 'bun', weight: 2, colours: ['black', 'brown', 'yellow'] }, { type: 'mullet', weight: 2, colours: ['brown', 'yellow', 'black'], canVintage: true }, { type: 'shaved', weight: 2, colours: ['black', 'brown'] }, { type: 'dyed', weight: 1, colours: ['pink', 'green', 'purple', 'blue'] }, ], accessory: [ { type: 'none', weight: 6, colours: ['black'] }, { type: 'bucketHat', weight: 1, colours: ['cream', 'black', 'green'], canLogo: true, canVintage: true }, { type: 'cap', weight: 2, colours: ['black', 'red', 'navy'], canLogo: true }, { type: 'sunnies', weight: 1, colours: ['black'] }, // sunglasses. at night. a tell in itself { type: 'bumbag', weight: 1, colours: ['black', 'purple', 'yellow'], canLogo: true, canVintage: true }, { type: 'chain', weight: 1, colours: ['yellow', 'grey'] }, ], };