public/lib/wardrobe.js
分割 6 / 7 · 元ファイル 784〜952行付近
{ id: 'helmet', nm: 'ヘルメット', price: 150, draw: function (g, x, yHead, r) {
dome(g, x, yHead - r * 0.40, r * 1.28, r * 1.10, '#e0b24a');
brim(g, x, yHead - r * 0.44, r * 1.40, r * 0.16, '#c9982f');
g.fillStyle = '#c9982f';
g.fillRect(x - r * 0.10, yHead - r * 1.48, r * 0.20, r * 1.04);
g.strokeStyle = '#8d7327'; g.lineWidth = 1;
g.beginPath(); g.ellipse(x, yHead - r * 0.48, r * 1.24, r * 0.30, 0, Math.PI, Math.PI * 2); g.stroke();
} },
{ id: 'bucket', nm: 'バケットハット', price: 120, draw: function (g, x, yHead, r) {
dome(g, x, yHead - r * 0.40, r * 1.18, r * 1.04, '#8a8256');
g.fillStyle = '#77704a';
g.beginPath();
g.moveTo(x - r * 1.18, yHead - r * 0.44); g.lineTo(x + r * 1.18, yHead - r * 0.44);
g.lineTo(x + r * 1.42, yHead - r * 0.06); g.lineTo(x - r * 1.42, yHead - r * 0.06);
g.closePath(); g.fill();
g.strokeStyle = '#5f5a3a'; g.lineWidth = 1;
g.beginPath(); g.moveTo(x - r * 1.00, yHead - r * 0.66); g.lineTo(x + r * 1.00, yHead - r * 0.66); g.stroke();
} },
{ id: 'cowboy', nm: 'つば広帽', price: 190, draw: function (g, x, yHead, r) {
g.fillStyle = '#7a5a3c';
g.beginPath();
g.moveTo(x - r * 1.52, yHead - r * 0.54);
g.quadraticCurveTo(x, yHead - r * 0.22, x + r * 1.52, yHead - r * 0.54);
g.quadraticCurveTo(x, yHead - r * 0.86, x - r * 1.52, yHead - r * 0.54);
g.closePath(); g.fill();
dome(g, x, yHead - r * 0.56, r * 0.94, r * 1.14, '#8f6b47');
g.fillStyle = '#5d4630';
g.fillRect(x - r * 0.94, yHead - r * 0.84, r * 1.88, r * 0.22);
g.strokeStyle = '#6d5136'; g.lineWidth = 1.4;
g.beginPath(); g.moveTo(x, yHead - r * 1.70); g.lineTo(x, yHead - r * 1.30); g.stroke();
} },
{ id: 'witch', nm: 'とんがり帽子', price: 200, draw: function (g, x, yHead, r, dir) {
brim(g, x, yHead - r * 0.52, r * 1.50, r * 0.28, '#3a3450');
g.fillStyle = '#4a4368';
g.beginPath(); g.moveTo(x - r * 0.90, yHead - r * 0.56);
g.lineTo(x + r * 0.90, yHead - r * 0.56);
g.lineTo(x + dir * r * 0.34, yHead - r * 2.16); g.closePath(); g.fill();
g.fillStyle = GD;
g.fillRect(x - r * 0.84, yHead - r * 0.80, r * 1.68, r * 0.20);
g.beginPath(); g.arc(x + dir * r * 0.34, yHead - r * 2.10, r * 0.10, 0, 7); g.fill();
} },
{ id: 'nightcap', nm: 'ナイトキャップ', price: 100, draw: function (g, x, yHead, r, dir) {
dome(g, x, yHead - r * 0.32, r * 1.24, r * 1.06, '#cfd6e2');
/* てっぺんから後ろへ垂れる先っぽ */
g.fillStyle = '#cfd6e2';
g.beginPath();
g.moveTo(x - dir * r * 0.10, yHead - r * 1.36);
g.quadraticCurveTo(x - dir * r * 1.10, yHead - r * 1.52, x - dir * r * 1.34, yHead - r * 0.94);
g.quadraticCurveTo(x - dir * r * 0.90, yHead - r * 1.02, x - dir * r * 0.66, yHead - r * 1.14);
g.closePath(); g.fill();
g.fillStyle = WH;
g.beginPath(); g.arc(x - dir * r * 1.34, yHead - r * 0.92, r * 0.22, 0, 7); g.fill();
g.fillStyle = '#b6bfd0';
g.fillRect(x - r * 1.24, yHead - r * 0.48, r * 2.48, r * 0.16);
} },
{ id: 'hachimaki', nm: 'はちまき', price: 70, draw: function (g, x, yHead, r, dir) {
dome(g, x, yHead - r * 0.36, r * 1.22, r * 1.02, '#e8e3d6');
g.fillStyle = WH;
g.fillRect(x - r * 1.24, yHead - r * 0.58, r * 2.48, r * 0.26);
g.fillStyle = RD;
g.beginPath(); g.arc(x + dir * r * 0.30, yHead - r * 0.45, r * 0.13, 0, 7); g.fill();
g.strokeStyle = WH; g.lineWidth = r * 0.12;
g.beginPath(); g.moveTo(x - dir * r * 1.08, yHead - r * 0.50);
g.lineTo(x - dir * r * 1.46, yHead - r * 0.02); g.stroke();
} },
{ id: 'bandana', nm: 'バンダナ', price: 80, draw: function (g, x, yHead, r, dir) {
dome(g, x, yHead - r * 0.34, r * 1.24, r * 1.04, '#c4443a');
g.fillStyle = WH;
for (var i = -2; i <= 2; i++) {
g.beginPath(); g.arc(x + i * r * 0.42, yHead - r * (0.72 + (i % 2 ? 0.22 : 0)), r * 0.08, 0, 7); g.fill();
}
g.fillStyle = '#a3362e';
g.beginPath(); g.moveTo(x - dir * r * 1.00, yHead - r * 0.52);
g.lineTo(x - dir * r * 1.50, yHead - r * 0.18); g.lineTo(x - dir * r * 1.00, yHead - r * 0.10);
g.closePath(); g.fill();
} },
{ id: 'mobcap', nm: 'ふんわり帽', price: 140, draw: function (g, x, yHead, r) {
dome(g, x, yHead - r * 0.26, r * 1.22, r * 1.16, WH);
frill(g, x, yHead - r * 0.34, r * 1.24, r * 0.19, CR, 6);
dome(g, x, yHead - r * 0.44, r * 1.14, r * 0.98, WH);
g.fillStyle = PK;
g.beginPath(); g.arc(x, yHead - r * 1.26, r * 0.12, 0, 7); g.fill();
} },
{ id: 'usagi', nm: 'うさ耳風', price: 170, draw: function (g, x, yHead, r) {
dome(g, x, yHead - r * 0.34, r * 1.24, r * 1.02, '#f0ece2');
var ear = function (sx) {
g.fillStyle = '#f0ece2';
g.beginPath(); g.ellipse(x + sx * r * 0.48, yHead - r * 1.42, r * 0.32, r * 0.72, sx * 0.16, 0, 7); g.fill();
g.strokeStyle = '#d6cfbe'; g.lineWidth = 1;
g.beginPath(); g.ellipse(x + sx * r * 0.48, yHead - r * 1.42, r * 0.32, r * 0.72, sx * 0.16, 0, 7); g.stroke();
g.fillStyle = PK;
g.beginPath(); g.ellipse(x + sx * r * 0.48, yHead - r * 1.44, r * 0.13, r * 0.42, sx * 0.16, 0, 7); g.fill();
};
ear(-1); ear(1);
} },
{ id: 'casquette', nm: 'ハンチング', price: 120, draw: function (g, x, yHead, r, dir) {
peak(g, x + dir * r * 0.40, yHead - r * 0.44, r, dir, '#6a6350', 0.50);
g.fillStyle = '#7d7560';
g.beginPath(); g.ellipse(x - dir * r * 0.08, yHead - r * 0.56, r * 1.12, r * 0.80, -dir * 0.10, Math.PI, Math.PI * 2); g.closePath(); g.fill();
g.fillRect(x - r * 1.04, yHead - r * 0.60, r * 2.08, r * 0.24);
g.strokeStyle = '#5e5849'; g.lineWidth = 1;
g.beginPath(); g.moveTo(x - r * 0.58, yHead - r * 1.24); g.lineTo(x + r * 0.68, yHead - r * 0.86); g.stroke();
} },
{ id: 'chefhat', nm: 'コック帽', price: 130, draw: function (g, x, yHead, r) {
g.fillStyle = WH;
g.fillRect(x - r * 1.00, yHead - r * 1.20, r * 2.00, r * 0.86);
g.beginPath(); g.ellipse(x, yHead - r * 1.52, r * 1.12, r * 0.60, 0, 0, 7); g.fill();
g.beginPath(); g.ellipse(x - r * 0.54, yHead - r * 1.72, r * 0.50, r * 0.44, 0, 0, 7); g.fill();
g.beginPath(); g.ellipse(x + r * 0.54, yHead - r * 1.72, r * 0.50, r * 0.44, 0, 0, 7); g.fill();
g.fillStyle = '#dcd6c6';
g.fillRect(x - r * 1.00, yHead - r * 0.60, r * 2.00, r * 0.26);
} },
{ id: 'hood', nm: 'フード', price: 110, draw: function (g, x, yHead, r, dir) {
g.fillStyle = '#4f5a68';
g.beginPath(); g.ellipse(x - dir * r * 0.10, yHead - r * 0.06, r * 1.32, r * 1.34, 0, Math.PI, Math.PI * 2); g.closePath(); g.fill();
g.fillStyle = '#5d6a7a';
g.beginPath(); g.ellipse(x + dir * r * 0.14, yHead - r * 0.34, r * 1.02, r * 1.06, 0, Math.PI, Math.PI * 2); g.closePath(); g.fill();
g.fillStyle = '#3f4854';
g.beginPath(); g.ellipse(x - dir * r * 0.78, yHead - r * 0.34, r * 0.40, r * 0.60, 0, 0, 7); g.fill();
} }
];
/* ================= 石の見た目 10種 ================= */
/* でこぼこの多角形(今の石と同じ作り) */
function chunk(g, r, n, lo, hi, col) {
g.fillStyle = col;
g.beginPath();
for (var i = 0; i < n; i++) {
var a = i / n * Math.PI * 2, rr = r * (lo + ((i * 5) % 3) * hi);
if (i === 0) g.moveTo(Math.cos(a) * rr, Math.sin(a) * rr); else g.lineTo(Math.cos(a) * rr, Math.sin(a) * rr);
}
g.closePath(); g.fill();
}
/* 左上の照り返し */
function gloss(g, r, col, sz) {
g.fillStyle = col;
g.beginPath(); g.arc(-r * 0.28, -r * 0.30, r * (sz || 0.34), 0, 7); g.fill();
}
var STONES = [
/* 今の石そのまま(本編の drawStoneAt と同じ形・同じ色) */
{ id: 'plain', nm: 'ふつうの石', price: 0, draw: function (g, r) {
chunk(g, r, 7, 0.82, 0.13, '#8d8e86');
gloss(g, r, 'rgba(255,255,240,.30)');
} },
{ id: 'blue', nm: '青い石', price: 30, draw: function (g, r) {
chunk(g, r, 7, 0.82, 0.13, '#5f7f9e');
gloss(g, r, 'rgba(230,245,255,.40)');
} },
{ id: 'heart', nm: 'ハートの石', price: 120, draw: function (g, r) {
g.fillStyle = '#d4607e';
g.beginPath();
g.moveTo(0, r * 1.05);
g.bezierCurveTo(-r * 1.30, r * 0.10, -r * 0.62, -r * 1.10, 0, -r * 0.34);
g.bezierCurveTo(r * 0.62, -r * 1.10, r * 1.30, r * 0.10, 0, r * 1.05);
g.closePath(); g.fill();
gloss(g, r, 'rgba(255,255,255,.35)', 0.24);
} },
{ id: 'shiny', nm: '光る石', price: 150, draw: function (g, r) {
g.fillStyle = 'rgba(255,240,170,.28)';
g.beginPath(); g.arc(0, 0, r * 1.28, 0, 7); g.fill();
chunk(g, r, 7, 0.80, 0.14, '#c8b465');
gloss(g, r, 'rgba(255,255,220,.70)', 0.30);
g.strokeStyle = 'rgba(255,250,200,.85)'; g.lineWidth = Math.max(0.6, r * 0.10);
g.beginPath(); g.moveTo(-r * 0.9, -r * 0.9); g.lineTo(-r * 0.5, -r * 0.5); g.stroke();
} },
{ id: 'round', nm: 'つるつるの丸石', price: 60, draw: function (g, r) {
g.fillStyle = '#9a958c';
g.beginPath(); g.arc(0, 0, r * 1.00, 0, 7); g.fill();