diff --git a/data/lib/index.ts b/data/lib/index.ts index 24774c5d..6f5f6e93 100644 --- a/data/lib/index.ts +++ b/data/lib/index.ts @@ -4,8 +4,8 @@ // // kind s specie, i item, x literal (Egg, Substitute, ...) // name the encoded name, [a-z0-9_]+ -// flags -o forme -b back -s shiny -a asymmetrical -f female -// -g gmax or -g -v -c +// flags -o forme -k cosmetic -b back -s shiny -a asymmetrical +// -f female -g gmax or -g -v -c // // A name is encoded rather than spelled, because the two places these sprites // are published disagree about what a word boundary is: smogon writes @@ -48,12 +48,23 @@ export function psid(e: string): string { // A published name: the name and its forme joined with a dash, then the // variant flags, which both sides spell the same way. +// +// A cosmetic is its own component rather than part of the forme, because the +// two readings disagree about where a forme's words divide but not about the +// boundary in front of the cosmetic. Alcremie's cream is `caramel-swirl` for +// smogon and `caramelswirl` for PS, while its sweet is `-berry` for both; fold +// the sweet into the forme and whichever reading you spell it for, the other +// one comes out wrong. export function publishedName(sn: SpriteFilename, part: (e: string) => string): string { let name = part(sn.name); let forme = sn.extra.get('o'); if (forme) { name += `-${part(forme)}`; } + let cosmetic = sn.extra.get('k'); + if (cosmetic) { + name += `-${part(cosmetic)}`; + } if (sn.extra.has('f')) { name += '-f'; } @@ -119,19 +130,25 @@ export function parseFilename(s: string): SpriteFilename { return {kind, name: first.slice(1), extra}; } +// The flags publishedName() spells into the name, in the order it spells them. +const NAME_PARTS = ['o', 'k']; + export function formatFilename(si: InputSpriteFilename): string { let s = `${si.kind}${si.name}`; - // The forme leads, so a forme's whole set of sprites sorts together - // instead of interleaving with the base forme's by flag letter. - let forme = si.extra?.get('o'); - if (forme !== undefined) { - s += `-o${forme}`; + // The parts of the name lead, in the order they are published, so a + // forme's whole set of sprites sorts together instead of interleaving with + // the base forme's by flag letter. + for (let k of NAME_PARTS) { + let v = si.extra?.get(k); + if (v !== undefined) { + s += `-${k}${v}`; + } } let extra = []; for (let [k, v] of si.extra?.entries() ?? []) { - if (k !== 'o') { + if (!NAME_PARTS.includes(k)) { extra.push(`-${k}${v}`); } } diff --git a/src/models/salcremie-ocaramel_swirl-kberry.gif b/src/models/salcremie-ocaramel_swirl-kberry.gif new file mode 100644 index 00000000..4c783adf Binary files /dev/null and b/src/models/salcremie-ocaramel_swirl-kberry.gif differ diff --git a/src/models/salcremie-ocaramel_swirl-kclover.gif b/src/models/salcremie-ocaramel_swirl-kclover.gif new file mode 100644 index 00000000..5451a174 Binary files /dev/null and b/src/models/salcremie-ocaramel_swirl-kclover.gif differ diff --git a/src/models/salcremie-ocaramel_swirl-kflower.gif b/src/models/salcremie-ocaramel_swirl-kflower.gif new file mode 100644 index 00000000..19581813 Binary files /dev/null and b/src/models/salcremie-ocaramel_swirl-kflower.gif differ diff --git a/src/models/salcremie-ocaramel_swirl-klove.gif b/src/models/salcremie-ocaramel_swirl-klove.gif new file mode 100644 index 00000000..3f985171 Binary files /dev/null and b/src/models/salcremie-ocaramel_swirl-klove.gif differ diff --git a/src/models/salcremie-ocaramel_swirl-kribbon.gif b/src/models/salcremie-ocaramel_swirl-kribbon.gif new file mode 100644 index 00000000..6068d529 Binary files /dev/null and b/src/models/salcremie-ocaramel_swirl-kribbon.gif differ diff --git a/src/models/salcremie-ocaramel_swirl-kstar.gif b/src/models/salcremie-ocaramel_swirl-kstar.gif new file mode 100644 index 00000000..0ec95532 Binary files /dev/null and b/src/models/salcremie-ocaramel_swirl-kstar.gif differ diff --git a/src/models/salcremie-olemon_cream-kberry.gif b/src/models/salcremie-olemon_cream-kberry.gif new file mode 100644 index 00000000..e296d4b0 Binary files /dev/null and b/src/models/salcremie-olemon_cream-kberry.gif differ diff --git a/src/models/salcremie-olemon_cream-kclover.gif b/src/models/salcremie-olemon_cream-kclover.gif new file mode 100644 index 00000000..a8358668 Binary files /dev/null and b/src/models/salcremie-olemon_cream-kclover.gif differ diff --git a/src/models/salcremie-olemon_cream-kflower.gif b/src/models/salcremie-olemon_cream-kflower.gif new file mode 100644 index 00000000..62f54c66 Binary files /dev/null and b/src/models/salcremie-olemon_cream-kflower.gif differ diff --git a/src/models/salcremie-olemon_cream-klove.gif b/src/models/salcremie-olemon_cream-klove.gif new file mode 100644 index 00000000..af68dfc2 Binary files /dev/null and b/src/models/salcremie-olemon_cream-klove.gif differ diff --git a/src/models/salcremie-olemon_cream-kribbon.gif b/src/models/salcremie-olemon_cream-kribbon.gif new file mode 100644 index 00000000..72185508 Binary files /dev/null and b/src/models/salcremie-olemon_cream-kribbon.gif differ diff --git a/src/models/salcremie-olemon_cream-kstar.gif b/src/models/salcremie-olemon_cream-kstar.gif new file mode 100644 index 00000000..809bd81f Binary files /dev/null and b/src/models/salcremie-olemon_cream-kstar.gif differ diff --git a/src/models/salcremie-omatcha_cream-kberry.gif b/src/models/salcremie-omatcha_cream-kberry.gif new file mode 100644 index 00000000..c35c401e Binary files /dev/null and b/src/models/salcremie-omatcha_cream-kberry.gif differ diff --git a/src/models/salcremie-omatcha_cream-kclover.gif b/src/models/salcremie-omatcha_cream-kclover.gif new file mode 100644 index 00000000..04e1999b Binary files /dev/null and b/src/models/salcremie-omatcha_cream-kclover.gif differ diff --git a/src/models/salcremie-omatcha_cream-kflower.gif b/src/models/salcremie-omatcha_cream-kflower.gif new file mode 100644 index 00000000..633d2d93 Binary files /dev/null and b/src/models/salcremie-omatcha_cream-kflower.gif differ diff --git a/src/models/salcremie-omatcha_cream-klove.gif b/src/models/salcremie-omatcha_cream-klove.gif new file mode 100644 index 00000000..cde68bbc Binary files /dev/null and b/src/models/salcremie-omatcha_cream-klove.gif differ diff --git a/src/models/salcremie-omatcha_cream-kribbon.gif b/src/models/salcremie-omatcha_cream-kribbon.gif new file mode 100644 index 00000000..e8430c0b Binary files /dev/null and b/src/models/salcremie-omatcha_cream-kribbon.gif differ diff --git a/src/models/salcremie-omatcha_cream-kstar.gif b/src/models/salcremie-omatcha_cream-kstar.gif new file mode 100644 index 00000000..71ffec1a Binary files /dev/null and b/src/models/salcremie-omatcha_cream-kstar.gif differ diff --git a/src/models/salcremie-omint_cream-kberry.gif b/src/models/salcremie-omint_cream-kberry.gif new file mode 100644 index 00000000..788a9f2d Binary files /dev/null and b/src/models/salcremie-omint_cream-kberry.gif differ diff --git a/src/models/salcremie-omint_cream-kclover.gif b/src/models/salcremie-omint_cream-kclover.gif new file mode 100644 index 00000000..dab4a058 Binary files /dev/null and b/src/models/salcremie-omint_cream-kclover.gif differ diff --git a/src/models/salcremie-omint_cream-kflower.gif b/src/models/salcremie-omint_cream-kflower.gif new file mode 100644 index 00000000..6f0232a2 Binary files /dev/null and b/src/models/salcremie-omint_cream-kflower.gif differ diff --git a/src/models/salcremie-omint_cream-klove.gif b/src/models/salcremie-omint_cream-klove.gif new file mode 100644 index 00000000..3be322b9 Binary files /dev/null and b/src/models/salcremie-omint_cream-klove.gif differ diff --git a/src/models/salcremie-omint_cream-kribbon.gif b/src/models/salcremie-omint_cream-kribbon.gif new file mode 100644 index 00000000..72c23952 Binary files /dev/null and b/src/models/salcremie-omint_cream-kribbon.gif differ diff --git a/src/models/salcremie-omint_cream-kstar.gif b/src/models/salcremie-omint_cream-kstar.gif new file mode 100644 index 00000000..b8b287c8 Binary files /dev/null and b/src/models/salcremie-omint_cream-kstar.gif differ diff --git a/src/models/salcremie-orainbow_swirl-kberry.gif b/src/models/salcremie-orainbow_swirl-kberry.gif new file mode 100644 index 00000000..fdca5866 Binary files /dev/null and b/src/models/salcremie-orainbow_swirl-kberry.gif differ diff --git a/src/models/salcremie-orainbow_swirl-kclover.gif b/src/models/salcremie-orainbow_swirl-kclover.gif new file mode 100644 index 00000000..356d4240 Binary files /dev/null and b/src/models/salcremie-orainbow_swirl-kclover.gif differ diff --git a/src/models/salcremie-orainbow_swirl-kflower.gif b/src/models/salcremie-orainbow_swirl-kflower.gif new file mode 100644 index 00000000..7ad06875 Binary files /dev/null and b/src/models/salcremie-orainbow_swirl-kflower.gif differ diff --git a/src/models/salcremie-orainbow_swirl-klove.gif b/src/models/salcremie-orainbow_swirl-klove.gif new file mode 100644 index 00000000..e6faaa8e Binary files /dev/null and b/src/models/salcremie-orainbow_swirl-klove.gif differ diff --git a/src/models/salcremie-orainbow_swirl-kribbon.gif b/src/models/salcremie-orainbow_swirl-kribbon.gif new file mode 100644 index 00000000..acfaafd2 Binary files /dev/null and b/src/models/salcremie-orainbow_swirl-kribbon.gif differ diff --git a/src/models/salcremie-orainbow_swirl-kstar.gif b/src/models/salcremie-orainbow_swirl-kstar.gif new file mode 100644 index 00000000..369c3dfa Binary files /dev/null and b/src/models/salcremie-orainbow_swirl-kstar.gif differ diff --git a/src/models/salcremie-oruby_cream-kberry.gif b/src/models/salcremie-oruby_cream-kberry.gif new file mode 100644 index 00000000..78d81203 Binary files /dev/null and b/src/models/salcremie-oruby_cream-kberry.gif differ diff --git a/src/models/salcremie-oruby_cream-kclover.gif b/src/models/salcremie-oruby_cream-kclover.gif new file mode 100644 index 00000000..ae967821 Binary files /dev/null and b/src/models/salcremie-oruby_cream-kclover.gif differ diff --git a/src/models/salcremie-oruby_cream-kflower.gif b/src/models/salcremie-oruby_cream-kflower.gif new file mode 100644 index 00000000..02813688 Binary files /dev/null and b/src/models/salcremie-oruby_cream-kflower.gif differ diff --git a/src/models/salcremie-oruby_cream-klove.gif b/src/models/salcremie-oruby_cream-klove.gif new file mode 100644 index 00000000..e2cf09e5 Binary files /dev/null and b/src/models/salcremie-oruby_cream-klove.gif differ diff --git a/src/models/salcremie-oruby_cream-kribbon.gif b/src/models/salcremie-oruby_cream-kribbon.gif new file mode 100644 index 00000000..54493db7 Binary files /dev/null and b/src/models/salcremie-oruby_cream-kribbon.gif differ diff --git a/src/models/salcremie-oruby_cream-kstar.gif b/src/models/salcremie-oruby_cream-kstar.gif new file mode 100644 index 00000000..d898315e Binary files /dev/null and b/src/models/salcremie-oruby_cream-kstar.gif differ diff --git a/src/models/salcremie-oruby_swirl-kberry.gif b/src/models/salcremie-oruby_swirl-kberry.gif new file mode 100644 index 00000000..e88fd73f Binary files /dev/null and b/src/models/salcremie-oruby_swirl-kberry.gif differ diff --git a/src/models/salcremie-oruby_swirl-kclover.gif b/src/models/salcremie-oruby_swirl-kclover.gif new file mode 100644 index 00000000..bcecb518 Binary files /dev/null and b/src/models/salcremie-oruby_swirl-kclover.gif differ diff --git a/src/models/salcremie-oruby_swirl-kflower.gif b/src/models/salcremie-oruby_swirl-kflower.gif new file mode 100644 index 00000000..adba8c04 Binary files /dev/null and b/src/models/salcremie-oruby_swirl-kflower.gif differ diff --git a/src/models/salcremie-oruby_swirl-klove.gif b/src/models/salcremie-oruby_swirl-klove.gif new file mode 100644 index 00000000..c77eaa54 Binary files /dev/null and b/src/models/salcremie-oruby_swirl-klove.gif differ diff --git a/src/models/salcremie-oruby_swirl-kribbon.gif b/src/models/salcremie-oruby_swirl-kribbon.gif new file mode 100644 index 00000000..d8dd1872 Binary files /dev/null and b/src/models/salcremie-oruby_swirl-kribbon.gif differ diff --git a/src/models/salcremie-oruby_swirl-kstar.gif b/src/models/salcremie-oruby_swirl-kstar.gif new file mode 100644 index 00000000..72713ce6 Binary files /dev/null and b/src/models/salcremie-oruby_swirl-kstar.gif differ diff --git a/src/models/salcremie-osalted_cream-kberry.gif b/src/models/salcremie-osalted_cream-kberry.gif new file mode 100644 index 00000000..7522c533 Binary files /dev/null and b/src/models/salcremie-osalted_cream-kberry.gif differ diff --git a/src/models/salcremie-osalted_cream-kclover.gif b/src/models/salcremie-osalted_cream-kclover.gif new file mode 100644 index 00000000..99bb7f39 Binary files /dev/null and b/src/models/salcremie-osalted_cream-kclover.gif differ diff --git a/src/models/salcremie-osalted_cream-kflower.gif b/src/models/salcremie-osalted_cream-kflower.gif new file mode 100644 index 00000000..37df0776 Binary files /dev/null and b/src/models/salcremie-osalted_cream-kflower.gif differ diff --git a/src/models/salcremie-osalted_cream-klove.gif b/src/models/salcremie-osalted_cream-klove.gif new file mode 100644 index 00000000..4c9c91a3 Binary files /dev/null and b/src/models/salcremie-osalted_cream-klove.gif differ diff --git a/src/models/salcremie-osalted_cream-kribbon.gif b/src/models/salcremie-osalted_cream-kribbon.gif new file mode 100644 index 00000000..0ad75421 Binary files /dev/null and b/src/models/salcremie-osalted_cream-kribbon.gif differ diff --git a/src/models/salcremie-osalted_cream-kstar.gif b/src/models/salcremie-osalted_cream-kstar.gif new file mode 100644 index 00000000..6c343cd2 Binary files /dev/null and b/src/models/salcremie-osalted_cream-kstar.gif differ diff --git a/src/models/salcremie-ovanilla_cream-kberry.gif b/src/models/salcremie-ovanilla_cream-kberry.gif new file mode 100644 index 00000000..785bbfa7 Binary files /dev/null and b/src/models/salcremie-ovanilla_cream-kberry.gif differ diff --git a/src/models/salcremie-ovanilla_cream-kclover.gif b/src/models/salcremie-ovanilla_cream-kclover.gif new file mode 100644 index 00000000..1bb3faea Binary files /dev/null and b/src/models/salcremie-ovanilla_cream-kclover.gif differ diff --git a/src/models/salcremie-ovanilla_cream-kflower.gif b/src/models/salcremie-ovanilla_cream-kflower.gif new file mode 100644 index 00000000..d25cce2a Binary files /dev/null and b/src/models/salcremie-ovanilla_cream-kflower.gif differ diff --git a/src/models/salcremie-ovanilla_cream-klove.gif b/src/models/salcremie-ovanilla_cream-klove.gif new file mode 100644 index 00000000..6c1a99d5 Binary files /dev/null and b/src/models/salcremie-ovanilla_cream-klove.gif differ diff --git a/src/models/salcremie-ovanilla_cream-kribbon.gif b/src/models/salcremie-ovanilla_cream-kribbon.gif new file mode 100644 index 00000000..528a9e3d Binary files /dev/null and b/src/models/salcremie-ovanilla_cream-kribbon.gif differ diff --git a/src/models/salcremie-ovanilla_cream-kstar.gif b/src/models/salcremie-ovanilla_cream-kstar.gif new file mode 100644 index 00000000..54fb5abf Binary files /dev/null and b/src/models/salcremie-ovanilla_cream-kstar.gif differ