/* ============================================================
mascots2.jsx — 仲間(協力者)4キャラ
① ウニ(まっくろくろすけ風) ② モグラ ③ ヤギ ④ 梅干し(男梅風)
ピコ・パンダと同じ16ドット幅・同じ仕組み(window.PixelCreature を利用)
pose: "stand" | "wave" | "sleep"
============================================================ */
/* ============================================================
① ウニ — まっくろくろすけ風(黒い毛玉・大きな白目・トゲ)
============================================================ */
const UNI_PAL = {
o: "var(--ink)", a: "var(--ink)",
d: "#ffffff", dbase: "var(--ink)", "-": "var(--ink)",
p: "var(--blush)", m: "oklch(0.66 0.17 22)",
};
const UNI_STAND = [
"....o.o.o....",
".o.ooooooo.o.",
"..ooooooooo..",
".ooooooooooo.",
"ooooooooooooo",
".oodooooodoo.",
"ooooooooooooo",
".opooooooopo.",
"ooooommmooooo",
".ooooooooooo.",
"..ooooooooo..",
".o.ooooooo.o.",
"....o.o.o....",
];
const UNI_WAVE = [
"....o.o.o....",
".o.ooooooo.o.",
"..ooooooooo..",
".ooooooooooo.",
"ooooooooooooo",
".oodooooodoo.",
"ooooooooooooo",
".opooooooopo.",
"ooooommmooooo",
".ooooooooooo.",
"..ooooooooo..",
".o.ooooooo.o.",
"....o.o.o....",
];
const UNI_SLEEP = [
"....o.o.o....",
".o.ooooooo.o.",
"..ooooooooo..",
".ooooooooooo.",
"ooooooooooooo",
".oo-ooooo-oo.",
"ooooooooooooo",
".opooooooopo.",
"ooooommmooooo",
".ooooooooooo.",
"..ooooooooo..",
".o.ooooooo.o.",
"....o.o.o....",
];
function PixelUni({ pose = "stand" }) {
return (
);
}
/* ============================================================
② モグラ — ずんぐり茶色・大きなピンクの鼻・小さな目・爪
============================================================ */
const MOLE_O = "oklch(0.52 0.055 60)";
const MOLE_PAL = {
o: MOLE_O, a: MOLE_O,
d: "var(--ink)", dbase: MOLE_O, "-": "var(--ink)",
n: "oklch(0.74 0.11 18)", p: "oklch(0.70 0.09 20)", m: "var(--ink)",
c: "oklch(0.92 0.02 70)", s: "oklch(0.92 0.02 70)",
};
const MOLE_STAND = [
"...oooooooooo...",
"..oooooooooooo..",
"..oooooooooooo..",
"..oooodoodoooo..",
"..ooooonnooooo..",
".aopooommooopoa.",
"a.oooooooooooo.a",
"..oooooooooooo..",
"...oo......oo...",
"...cc......cc...",
];
const MOLE_WAVE = [
"...oooooooooo...",
"..oooooooooooo..",
"..oooooooooooo..",
"..oooodoodoooo..",
"..ooooonnooooo..",
".aopooommooopo..",
"a.oooooooooooo..",
"..oooooooooooo..",
"...oo......oo...",
"...cc......cc...",
];
const MOLE_SLEEP = [
"...oooooooooo...",
"..oooooooooooo..",
"..oooooooooooo..",
"..oooo-oo-oooo..",
"..ooooonnooooo..",
".aopooommooopoa.",
"a.oooooooooooo.a",
"..oooooooooooo..",
"...oo......oo...",
"...cc......cc...",
];
function PixelMole({ pose = "stand" }) {
return (
);
}
/* ============================================================
③ ヤギ — 参考画像どおり(クリーム・オリーブのツノ・ピンク耳/ほっぺ/口・あごひげ・茶の蹄)
16幅 / 目=黒(d) / dbase=クリーム
============================================================ */
const GOAT_O = "oklch(0.93 0.012 85)";
const GOAT_PAL = {
o: GOAT_O,
h: "oklch(0.53 0.06 95)", // ツノ(オリーブ #807344)
p: "oklch(0.80 0.16 340)", // ピンク(ほっぺ・口)
e: "oklch(0.90 0.06 340)", // 耳(薄いピンク)
l: "oklch(0.83 0.018 300)", // あごひげ(ラベンダー)
b: "oklch(0.43 0.06 55)", // 蹄・脚(茶 #6d4822)
d: "var(--ink)", dbase: GOAT_O, // 目(黒)
"-": "var(--ink)",
};
// 0123456789012345
const GOAT_STAND = [
"...hh......hh...",
"....hh....hh....",
"...oooooooooo...",
"oooooooooooooooo",
".eooooooooooooe.",
"..oodoooooodoo..",
".oopoooooooopoo.",
"b.ooooppppoooo.b",
"..oooooooooooo..",
"...oo.llll.oo...",
"...bb..ll..bb...",
"................",
];
const GOAT_WAVE = [
"...hh......hh...",
"....hh....hh....",
"...oooooooooo...",
"oooooooooooooooo",
".eooooooooooooe.",
"..oodoooooodoo..",
".oopoooooooopo..",
"b.ooooppppoooo..",
"..oooooooooooo..",
"...oo.llll.oo...",
"...bb..ll..bb...",
"................",
];
const GOAT_SLEEP = [
"...hh......hh...",
"....hh....hh....",
"...oooooooooo...",
"oooooooooooooooo",
".eooooooooooooe.",
"..oo-oooooo-oo..",
".oopoooooooopoo.",
"b.ooooppppoooo.b",
"..oooooooooooo..",
"...oo.llll.oo...",
"...bb..ll..bb...",
"................",
];
function PixelGoat({ pose = "stand" }) {
return (
);
}
/* ============================================================
/* ============================================================
④ 梅干し — ウニのフォルム参考(赤い丸・しわ・へた跡)/ 緑なし
13幅 / 目=白(d) / dbase=梅の赤
============================================================ */
const UME_O = "oklch(0.54 0.17 27)";
const UME_PAL = {
o: UME_O,
w: "oklch(0.43 0.15 27)", // しわ・へた跡(濃い赤)
d: "oklch(0.97 0.012 60)", dbase: UME_O, // 目(白)
p: "oklch(0.72 0.13 18)", // ほっぺ
m: "oklch(0.33 0.12 27)", "-": "var(--ink)", // 口(すっぱい)
};
const UME_STAND = [
"...............",
".....oowoo.....",
"...ooooooooo...",
"..ooooooooooo..",
"..oowooooowoo..",
".ooooooooooooo.",
".oooodooodoooo.",
".oopooooooopoo.",
".ooooommmooooo.",
".ooooooooooooo.",
"..ooowooowooo..",
"..ooooowooooo..",
"...ooooooooo...",
".....ooooo.....",
"...............",
];
const UME_WAVE = [
"...............",
".....oowoo.....",
"...ooooooooo...",
"..ooooooooooo..",
"..oowooooowoo..",
".ooooooooooooo.",
".oooodooodoooo.",
".oopooooooopoo.",
".ooooommmooooo.",
".ooooooooooooo.",
"..ooowooowooo..",
"..ooooowooooo..",
"...ooooooooo...",
".....ooooo.....",
"...............",
];
const UME_SLEEP = [
"...............",
".....oowoo.....",
"...ooooooooo...",
"..ooooooooooo..",
"..oowooooowoo..",
".ooooooooooooo.",
".oooo-ooo-oooo.",
".oopooooooopoo.",
".ooooommmooooo.",
".ooooooooooooo.",
"..ooowooowooo..",
"..ooooowooooo..",
"...ooooooooo...",
".....ooooo.....",
"...............",
];
function PixelUme({ pose = "stand" }) {
return (
);
}
/* ---------- レジストリ ---------- */
const MASCOTS2 = [
{ id: "uni", no: "03", name: "ウニ", Comp: PixelUni },
{ id: "mole", no: "04", name: "モグラ", Comp: PixelMole },
{ id: "goat", no: "05", name: "ヤギ", Comp: PixelGoat },
{ id: "ume", no: "06", name: "梅干し", Comp: PixelUme },
];
Object.assign(window, { PixelUni, PixelMole, PixelGoat, PixelUme, MASCOTS2 });