From 9deb6762ef5794b340943e2d2845da79c437dce5 Mon Sep 17 00:00:00 2001 From: Yasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com> Date: Fri, 9 Oct 2026 08:33:42 +0900 Subject: bluebey-studio: 準拠版(フキダシ・眉毛・髪・ひげ・ほっぺ・体の色を削除) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ぶるべーはしゃべらない・姿を変えない方針に合わせた準拠版。セリフ/ナレーション/吹き出し・口パク・眉毛(ゴルゴ等)・髪(頭の模様)・ひげ・ほっぺ・体の色/テーマを削除。目・口・眼鏡・帽子・鼻ちょうちん・ポーズ・背景・小物・光・書き出しは維持。caption.js / mouthFlap.js は削除。 --- bluebey-studio/src/presets.js | 238 ++---------------------------------------- 1 file changed, 7 insertions(+), 231 deletions(-) (limited to 'bluebey-studio/src/presets.js') diff --git a/bluebey-studio/src/presets.js b/bluebey-studio/src/presets.js index e4fe49f..a31c952 100644 --- a/bluebey-studio/src/presets.js +++ b/bluebey-studio/src/presets.js @@ -10,85 +10,6 @@ * the screen. */ -/** - * One speech bubble's defaults. - * - * A factory rather than a constant, because there are two bubbles (see - * `caption2`) and they must not share one object - editing one would edit both. - */ -function captionDefaults() { - return { - enabled: false, - text: 'こんにちは、ぶるべーです。', - // Anchor of the bubble's box, as a fraction of the image (0..1). - x: 0.58, - y: 0.16, - maxWidth: 0.36, // fraction of the image width for the text column - bubble: 'round', // round | rect | shout | none - tail: 'left', // left | right | top | bottom | topLeft | topRight | bottomLeft | bottomRight | none - fontSize: 34, // pixels at 1x; scales with the export - lineHeight: 1.42, - padding: 18, - radius: 24, - textColor: '#3f2b52', - bubbleColor: '#ffffff', - borderColor: '#55386e', - borderWidth: 4, - bold: false, - align: 'left', // left | center | right - vertical: false, // 縦書き (columns run right to left) - font: 'rounded', // rounded (vendored) | system - }; -} - -/** - * ナレーション (a narration box): a plain rectangular panel of vertical text, the - * manga narration style. Same shape as a bubble, with a rect box, no tail, and - * 縦書き on by default. - */ -function narrationDefaults() { - return { - enabled: false, - text: 'ここで、ぶるべーは考えた。', - x: 0.06, - y: 0.08, - maxWidth: 0.5, - bubble: 'rect', - tail: 'none', - fontSize: 30, - lineHeight: 1.35, - padding: 16, - radius: 8, - textColor: '#2b2433', - bubbleColor: '#ffffff', - borderColor: '#2b2433', - borderWidth: 3, - bold: false, - align: 'left', - vertical: true, - font: 'rounded', - }; -} - -/** - * Per-kind starting size and height for ひげ, applied when a kind is picked. The - * textured kinds are drawings, so they are drawn at a different scale from the - * built-in strokes; a kind with no entry resets to the neutral values. - */ -export const BEARD_KIND_DEFAULTS = { - scotch: { size: 0.46, offsetY: 74 }, - kaiser: { size: 1, offsetY: 80, spacing: -10 }, -}; - -/** - * Per-shape starting values for 髪 (headMark), applied when a shape is picked. - * `teeth` only matters for ぎざぎざ, so its default is set here rather than on - * the shared `size`/`teeth` fields. - */ -export const HEAD_MARK_KIND_DEFAULTS = { - fringe: { size: 0.83, teeth: 0.06 }, -}; - /** * 見えない壁 (the invisible wall) settings. The studio offers two, so a corner (or * two opposite cuts) can be made. A wall's position is kept *relative to the @@ -168,9 +89,9 @@ export function defaultState() { lightColor: '#ffffff', ambientColor: '#ffffff', exposure: 1, - // Body colours. A theme fills these in; the colour pickers then adjust - // them one part at a time, so a theme is a starting point, not a mode. - theme: 'original', + // The fixed body palette. ぶるべー keeps its colours, so there is no theme + // picker and no per-part editor; the parts live here so the styles and the + // model have one place to read them from. colors: { body: '#c8b0f0', accent: '#8a4fe0', @@ -262,31 +183,6 @@ export function defaultState() { // The tears live on each eye (see `eyes.left.tear`), so one eye can cry // on its own; only the colour is shared. tearColor: '#8fd8ff', - // ほっぺ (a manga blush) and 頭の模様 (a hair-like head covering) are drawn - // into the same plate as the eyes and brows. Both are generic devices, - // not a copy of any one character, and both start off. The blush is always - // four horizontal strokes, so there is no line-count field. - cheeks: { - enabled: false, - size: 1, - spacing: 0, // extra gap outwards from the eyes - offsetY: 0, // extra drop below the eyes - color: '#f6a6b8', - }, - // The hair covering's `shape` is one of `off`, `cap`, `fringe`, - // `fringe-up` or `curve`. `overEyes` puts the hair in front of the eyes - // (bangs over the face); off leaves the eyes on top. - headMark: { - shape: 'off', - size: 1, - // ぎざぎざ only: how far the saw teeth reach down. - teeth: 0.12, - offsetX: 0, - offsetY: 0, - overEyes: true, - color: '#8a4fe0', - color2: '#ffffff', - }, // 鼻ちょうちん: the snot bubble someone sleeps with. Drawn into the same // plate as the eyes, out to the side of the nose. Starts off. snot: { @@ -297,42 +193,9 @@ export function defaultState() { offsetZ: 16, color: '#e3ecff', }, - // ひげ: a mustache or beard worn under the nose. `shape` is one of `off`, - // `scotch`, `kaiser`, `apron` or `cat`. `spacing` widens the gap between - // the cat's left and right whiskers. Starts off. - beard: { - shape: 'off', - size: 1, - offsetY: 0, - spacing: 0, - // ねこ only: how far each whisker reaches (`length`) and how far apart the - // three lines of one side sit (`lineGap`). Neither changes the thickness. - length: 1, - lineGap: 1, - color: '#1c1624', - }, - // Eyebrows are drawn into the eye texture. Off by default, because the - // original character has no eyebrows. - brow: { - enabled: false, - // When true and a drawing (assets/brows/gol-right.png) was loaded, the - // brow is painted from that file (mirrored) instead of the strokes. - image: false, - angle: 0, - height: 0, - length: 1, - thickness: 1, - curve: 0.14, - // How wide the nose-side end is: 1 = a plain stroke, 0 = a wedge that - // comes to a point (the ゴル風 look). `spacing` widens the gap between - // the two brows. - taper: 1, - spacing: 0, - color: '#55386e', - }, - // 眼鏡 / サングラス are drawn into the same texture as the eyes and brows, - // so they travel with the head instead of being a separate 3D mesh. Off - // by default. `kind` only picks which lens defaults the panel offers; the + // 眼鏡 / サングラス are drawn into the same texture as the eyes, so they + // travel with the head instead of being a separate 3D mesh. Off by + // default. `kind` only picks which lens defaults the panel offers; the // drawing itself reads the colours and opacities below. glasses: { enabled: false, @@ -371,24 +234,6 @@ export function defaultState() { line: '#55386e', }, }, - // ---------------------------------------------------------------- caption - // The speech bubbles drawn next to the character when exporting. They live in - // the state so they are saved, shared and undone like everything else. There - // are two of them, so a line and a reply (or a narrator and a speaker) fit. - caption: captionDefaults(), - // The second bubble starts on the other side, so the two do not overlap. - caption2: { ...captionDefaults(), text: '', x: 0.08, y: 0.44 }, - // A ナレーション box (vertical text, rect, no tail). - narration: narrationDefaults(), - // -------------------------------------------------------- 口パク (mouth flap) - // The mouth moves as if talking, with no sound at all: the device's own - // speech voices belong to the device, so a recording of them is not ours to - // hand out. Only the *length* of the text matters here. - mouthFlap: { - text: 'こんにちは。小平市のぶるべーです。', - rate: 1, // how fast the syllables come - mouthGain: 1, // how wide the mouth opens - }, // ----------------------------------------------------------------- look at // Where the character should look (world units). lookAt: { @@ -418,7 +263,7 @@ export function defaultState() { items: [], }, // ------------------------------------------------------------------- story - // 4コマ / 紙芝居. Each panel is a small state patch (pose, face, caption). + // 4コマ / 紙芝居. Each panel is a small state patch (pose, face). story: { columns: 1, gap: 12, @@ -529,7 +374,6 @@ export const FACE_PRESETS = [ // Blushing, eyes half shut and looking away. left: { open: 0.72, lookX: -0.4, lookY: 0.08, closed: 'line' }, right: { open: 0.72, lookX: -0.4, lookY: 0.08, closed: 'line' }, - cheeks: { enabled: true }, irisScale: 1, highlight: true, }, @@ -822,71 +666,3 @@ export function applyPatch(target, patch) { export function cloneState(state) { return JSON.parse(JSON.stringify(state)); } - -/** - * Body colour themes (C-1). Each is a full set of part colours, so picking one - * is a single assignment; the individual pickers in the panel then let you drift - * away from it without losing the rest. - * - * ぶるべー is a leaf-sprout mascot, so the themes are named after plants and - * weather rather than after colours. - */ -export const THEMES = [ - { - id: 'original', - label: 'オリジナル', - colors: { body: '#c8b0f0', accent: '#8a4fe0', nose: '#7a4fb0', leaf: '#a6dd6a', vein: '#7fbf3f', feet: '#7a4fb0' }, - }, - { - id: 'sakura', - label: 'さくら', - colors: { body: '#f7c6d9', accent: '#e0709b', nose: '#c25b7e', leaf: '#b8e08a', vein: '#8dbb54', feet: '#c25b7e' }, - }, - { - id: 'matcha', - label: 'まっちゃ', - colors: { body: '#cfe3ac', accent: '#6f9c3a', nose: '#5c8030', leaf: '#9fd463', vein: '#79ab3c', feet: '#5c8030' }, - }, - { - id: 'sora', - label: 'そら', - colors: { body: '#bcd9f7', accent: '#4a7fd4', nose: '#3f6cae', leaf: '#a8e08a', vein: '#7cbb58', feet: '#3f6cae' }, - }, - { - id: 'lemon', - label: 'レモン', - colors: { body: '#f8e9a6', accent: '#d8a520', nose: '#b3871a', leaf: '#b9de74', vein: '#8fbb45', feet: '#b3871a' }, - }, - { - id: 'momo', - label: 'もも', - colors: { body: '#f9cbae', accent: '#e07a4a', nose: '#bd6238', leaf: '#aede7c', vein: '#84b84e', feet: '#bd6238' }, - }, - { - id: 'sumi', - label: 'すみ', - colors: { body: '#9aa2b8', accent: '#4b5468', nose: '#3c4356', leaf: '#8fbf7a', vein: '#6d9a58', feet: '#3c4356' }, - }, - { - id: 'yozora', - label: 'よぞら', - colors: { body: '#8f8fd0', accent: '#403f8f', nose: '#34336f', leaf: '#7fc7b0', vein: '#5aa08c', feet: '#34336f' }, - }, -]; - -/** Bubble shapes offered for captions. */ -export const BUBBLE_STYLES = [ - { value: 'round', label: 'まる' }, - { value: 'rect', label: 'しかく' }, - { value: 'shout', label: 'さけぶ' }, - { value: 'whisper', label: 'ささやき' }, - { value: 'think', label: '思考' }, - { value: 'none', label: 'なし' }, -]; - -/** A couple of ready-made captions, so the feature is discoverable. */ -export const CAPTION_PRESETS = [ - { id: 'greeting', label: 'あいさつ', caption: { enabled: true, text: 'こんにちは、ぶるべーです。' } }, - { id: 'explain', label: '説明', caption: { enabled: true, text: 'ここがポイントです。', bubble: 'rect', tail: 'left' } }, - { id: 'surprise', label: 'びっくり', caption: { enabled: true, text: 'えっ!?', bubble: 'shout', tail: 'left', fontSize: 40, bold: true } }, -]; -- cgit v1.3.1