aboutsummaryrefslogtreecommitdiffhomepage
path: root/bluebey-studio/src/presets.js
diff options
context:
space:
mode:
authorYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-10-09 08:33:42 +0900
committerYasutake Yohei <61961825+yasutakeyohei@users.noreply.github.com>2026-10-09 08:33:42 +0900
commit9deb6762ef5794b340943e2d2845da79c437dce5 (patch)
tree817a24ae56d7b06f5964f68682432ccb9febff02 /bluebey-studio/src/presets.js
parent1b883a70b9d3427e7cb65eaf99d2aa7ca5a1cb1c (diff)
bluebey-studio: 準拠版(フキダシ・眉毛・髪・ひげ・ほっぺ・体の色を削除)
ぶるべーはしゃべらない・姿を変えない方針に合わせた準拠版。セリフ/ナレーション/吹き出し・口パク・眉毛(ゴルゴ等)・髪(頭の模様)・ひげ・ほっぺ・体の色/テーマを削除。目・口・眼鏡・帽子・鼻ちょうちん・ポーズ・背景・小物・光・書き出しは維持。caption.js / mouthFlap.js は削除。
Diffstat (limited to 'bluebey-studio/src/presets.js')
-rw-r--r--bluebey-studio/src/presets.js238
1 files changed, 7 insertions, 231 deletions
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
@@ -11,85 +11,6 @@
*/
/**
- * 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
* character*, so moving ぶるべー carries its walls along (see src/clip.js).
@@ -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 } },
-];