diff --git a/src/.vuepress/sidebar/zh.ts b/src/.vuepress/sidebar/zh.ts index 990b22632..01cd42386 100644 --- a/src/.vuepress/sidebar/zh.ts +++ b/src/.vuepress/sidebar/zh.ts @@ -1,108 +1,109 @@ -import { sidebar } from "vuepress-theme-hope"; - -export const zhSidebar = sidebar({ - "/": [ - { - text: "游戏开发指引", - // prefix: "/", - children: [ - "getting-started", - "resources", - "config", - { - text: "部署或发布我的视觉小说?", - link: "publish/", - collapsible: true, // 是否可折叠 - prefix: "publish/", - children: [ - "web", - "desktop", - "android", - ] - }, - "faq", - "live2D", - "migration", - "derivative", - ], - }, - { - text: "WebGAL 脚本教程", - prefix: "webgal-script/", - children: [ - "base", - "dialogue", - "bg-and-figure", - "audio", - "video", - "scenes", - "variable", - "animation", - "special-effect", - ] - }, - { - text: "开发信息", - children: [ - "developers", - "tech", - "info", - "sponsor", - "developers/joinus", - "developers/terre", - ] - }, - { - text: "脚本参考", - prefix: "script-reference/", - children: [ - { - text: "命令", - prefix: "commands/", - children:[ - "global", - "say", - "changeBg", - "changeFigure", - "bgm", - "playVideo", - "pixiPerform", - "pixiInit", - "intro", - "miniAvatar", - "changeScene", - "choose", - "end", - "setComplexAnimation", - "label", - "jumpLabel", - "setVar", - "callScene", - "showVars", - "unlockCg", - "unlockBgm", - "filmMode", - "setTextbox", - "setAnimation", - "playEffect", - "setTempAnimation", - "comment", - "setTransform", - "setTransition", - "getUserInput", - "applyStyle", - "wait", - ] - }, - { - text: "其他", - prefix: "others/", - children:[ - "transform-reference", - "animation-reference", - ] - }, - ], - }, - ], -}); +import { sidebar } from "vuepress-theme-hope"; + +export const zhSidebar = sidebar({ + "/": [ + { + text: "游戏开发指引", + // prefix: "/", + children: [ + "getting-started", + "resources", + "config", + { + text: "部署或发布我的视觉小说?", + link: "publish/", + collapsible: true, // 是否可折叠 + prefix: "publish/", + children: [ + "web", + "desktop", + "android", + ] + }, + "faq", + "live2D", + "migration", + "derivative", + ], + }, + { + text: "WebGAL 脚本教程", + prefix: "webgal-script/", + children: [ + "base", + "dialogue", + "bg-and-figure", + "audio", + "video", + "scenes", + "variable", + "animation", + "special-effect", + ] + }, + { + text: "开发信息", + children: [ + "developers", + "tech", + "info", + "sponsor", + "developers/joinus", + "developers/terre", + ] + }, + { + text: "脚本参考", + prefix: "script-reference/", + children: [ + { + text: "命令", + prefix: "commands/", + children:[ + "global", + "say", + "changeBg", + "changeFigure", + "bgm", + "playVideo", + "pixiPerform", + "pixiInit", + "intro", + "miniAvatar", + "changeScene", + "choose", + "end", + "setComplexAnimation", + "label", + "jumpLabel", + "setVar", + "callScene", + "showVars", + "unlockCg", + "unlockBgm", + "filmMode", + "setTextbox", + "setAnimation", + "playEffect", + "setTempAnimation", + "comment", + "setTransform", + "setTransition", + "getUserInput", + "applyStyle", + "wait", + "callSteam", + ] + }, + { + text: "其他", + prefix: "others/", + children:[ + "transform-reference", + "animation-reference", + ] + }, + ], + }, + ], +}); diff --git a/src/config.md b/src/config.md index 8afc335cc..38c1ea6e1 100644 --- a/src/config.md +++ b/src/config.md @@ -15,6 +15,7 @@ | Legacy_Expression_Blend_Mode | 是否启用 Live2D 的旧表情混合模式,设置为 true 或 false | | Max_line | 文本框的最大显示行数 | | Line_height | 文本框的行高(单位:em) | +| Steam_AppID | Steam 应用 ID,用于初始化 Steam 集成,仅在 Electron 构建环境下有效 | 以下是配置文件示例: diff --git a/src/script-reference/commands/applyStyle.md b/src/script-reference/commands/applyStyle.md index 39a7fa696..bcc0a9acb 100644 --- a/src/script-reference/commands/applyStyle.md +++ b/src/script-reference/commands/applyStyle.md @@ -1,25 +1,41 @@ -# applyStyle +# applyStyle + +更换 UI 样式。 + +## 语句内容 + +首先需要在 UI 模板中新写一个样式,然后可以用 `applyStyle` 命令,将新样式替换原样式。 +原样式名与新样式名之间用 `->` 连接,您可以同时替换多个样式,每个替换之间用英文逗号 `,` 分隔。 +格式如:原样式名->新样式名,原样式名2->新样式名2,... + +```webgal +; 将角色名背景替换为红色,前提是在 UI 模板里写了新样式 +applyStyle:TextBox_ShowName_Background->TextBox_ShowName_Background_Red; +角色名:这是一句话; +; 同时替换多个样式 +applyStyle:TextBox_ShowName_Background->TextBox_ShowName_Background_Green,TextBox_main->TextBox_main_Black; +``` + +无论原样式被替换为什么新样式,替换样式依旧是原样式名在前; + +```webgal +applyStyle:原样式名->新样式名1; +applyStyle:新样式名1->新样式名2; 错误 +applyStyle:原样式名->新样式名2; +``` -更换 UI 样式。 +## 常用可替换样式 -## 语句内容 +选择枝使用以下样式名: -首先需要在 UI 模板中新写一个样式,然后可以用 `applyStyle` 命令,将新样式替换原样式。 -原样式名与新样式名之间用 `->` 连接,您可以同时替换多个样式,每个替换之间用英文逗号 `,` 分隔。 -格式如:原样式名->新样式名,原样式名2->新样式名2,... +| 样式名 | 作用 | +| :--- | :--- | +| `Choose_Main` | 选项列表容器 | +| `Choose_item_outer` | 单个选项的外层容器 | +| `Choose_item` | 可点击选项 | +| `Choose_item_disabled` | 条件未满足、不可点击的选项 | ```webgal -; 将角色名背景替换为红色,前提是在 UI 模板里写了新样式 -applyStyle:TextBox_ShowName_Background->TextBox_ShowName_Background_Red; -角色名:这是一句话; -; 同时替换多个样式 -applyStyle:TextBox_ShowName_Background->TextBox_ShowName_Background_Green,TextBox_main->TextBox_main_Black; -``` - -无论原样式被替换为什么新样式,替换样式依旧是原样式名在前; - -```webgal -applyStyle:原样式名->新样式名1; -applyStyle:新样式名1->新样式名2; 错误 -applyStyle:原样式名->新样式名2; +; 将可点击选项替换成模板中定义的 Choose_item_Red +applyStyle:Choose_item->Choose_item_Red; ``` diff --git a/src/script-reference/commands/callSteam.md b/src/script-reference/commands/callSteam.md new file mode 100644 index 000000000..1c0df1930 --- /dev/null +++ b/src/script-reference/commands/callSteam.md @@ -0,0 +1,39 @@ +# callSteam + +通过 Electron / Steam 桥接解锁 Steam 成就。 + +:::warning 平台限制 +此命令仅在具备 Steam / Electron 桥接能力的构建环境下有效。普通网页部署(浏览器直接访问)无法使用此命令,引擎会跳过调用并返回失败结果。 +::: + +## 前置配置 + +在 `game/config.txt` 中填写 `Steam_AppID`,WebGAL 会在启动时初始化 Steam 集成。 + +```text +Steam_AppID:480; +``` + +详情请见[编辑游戏配置](../../config.md)。 + +## 语句内容 + +无语句内容,所有参数通过参数名传入。 + +## 参数 + +### achievementId +- 字符串 + +填写要解锁的 Steam 成就 ID,与 Steam 后台配置的成就 API 名称一致。 + +```webgal +callSteam: -achievementId=ACH_WIN_ONE_GAME; +``` + +## 示例 + +```webgal +; 解锁成就 +callSteam: -achievementId=ACH_WIN_ONE_GAME; +``` diff --git a/src/script-reference/commands/changeBg.md b/src/script-reference/commands/changeBg.md index 7e1867f4b..1cc9bf2b5 100644 --- a/src/script-reference/commands/changeBg.md +++ b/src/script-reference/commands/changeBg.md @@ -1,63 +1,85 @@ -# changeBg - -背景入场, 替换背景, 背景退场的三合一命令。 - -## 语句内容 - -填写背景图片的路径。当文件路径为空或为 `none` 时,表示背景退场。 -详情请见[背景与立绘](../../webgal-script/bg-and-figure.md)。 - -```webgal -; 如果没有背景存在,则此句表示背景入场。 -changeBg:bg.png; -; 如果已有背景存在,则此句表示替换背景。 -changeBg:WebGAL_New_Enter_Image.png; -; 如果填写 none 或者不填,则此句表示背景退场。 -changeBg:none; -``` - -如果背景图片的路径与 `id` 保持不变,则不会触发入场或退场动画。 - -## 参数 - - -```webgal -changeBg:bg.png -transform={"position":{"x":-50,"y":-20},"rotation":0.1,"scale":{"x":1.2,"y":1.2},"brightness":0.5,"blur":10}; -``` - - -```webgal -changeBg:bg.png -enter=enter-from-left; -``` - - -```webgal -changeBg:bg.png -exit=exit-to-right; -``` - - -作用于默认入场退场动画,默认值为 1000。 -```webgal -changeBg:bg.png -duration=200; -``` - - -作用于默认入场退场动画。 -```webgal -changeBg:bg.png -ease=easeOut; -``` - +# changeBg + +背景入场, 替换背景, 背景退场的三合一命令。 + +## 语句内容 + +填写背景图片的路径。当文件路径为空或为 `none` 时,表示背景退场。 +详情请见[背景与立绘](../../webgal-script/bg-and-figure.md)。 + +```webgal +; 如果没有背景存在,则此句表示背景入场。 +changeBg:bg.png; +; 如果已有背景存在,则此句表示替换背景。 +changeBg:WebGAL_New_Enter_Image.png; +; 如果填写 none 或者不填,则此句表示背景退场。 +changeBg:none; +``` + +如果背景图片的路径与 `id` 保持不变,则不会触发入场或退场动画。 + +## 参数 + + +```webgal +changeBg:bg.png -transform={"position":{"x":-50,"y":-20},"rotation":0.1,"scale":{"x":1.2,"y":1.2},"brightness":0.5,"blur":10}; +``` + + +```webgal +changeBg:bg.png -enter=enter-from-left; +``` + + +```webgal +changeBg:bg.png -exit=exit-to-right; +``` + + +作用于默认入场退场动画,默认值为 1000。 +```webgal +changeBg:bg.png -duration=200; +``` + + +作用于默认入场退场动画。 +```webgal +changeBg:bg.png -ease=easeOut; +``` + ### unlockname 如果不填写该参数,或名称为空,则不会收录此图片。 ```webgal changeBg:bg.png -unlockname=MyCg01; ``` - -### series - -单独填写 `series` 不会进行收录,请确保同时填写了 `unlockname`。 - -```webgal -changeBg:bg.png -unlockname=MyCg01 -series=MySeries01; -``` + +### series + +单独填写 `series` 不会进行收录,请确保同时填写了 `unlockname`。 + +```webgal +changeBg:bg.png -unlockname=MyCg01 -series=MySeries01; +``` + +### enterDuration +- 数字 +- 单位:毫秒 +- 范围:0 到正无穷 + +入场动画时长。若未填写,默认取 `duration` 的值。 + +```webgal +changeBg:bg.png -enterDuration=500; +``` + +### exitDuration +- 数字 +- 单位:毫秒 +- 范围:0 到正无穷 + +退场动画时长。若未填写,默认值为 1500。 + +```webgal +changeBg:bg.png -exitDuration=800; +``` diff --git a/src/script-reference/commands/changeFigure.md b/src/script-reference/commands/changeFigure.md index 74cbec6e0..b74966ad5 100644 --- a/src/script-reference/commands/changeFigure.md +++ b/src/script-reference/commands/changeFigure.md @@ -93,6 +93,28 @@ changeFigure:1/open_eyes.png -duration=200; changeFigure:1/open_eyes.png -ease=easeOut; ``` +### enterDuration +- 数字 +- 单位:毫秒 +- 范围:0 到正无穷 + +入场动画时长。若未填写,默认取 `duration` 的值(默认 300)。 + +```webgal +changeFigure:1/open_eyes.png -enterDuration=200; +``` + +### exitDuration +- 数字 +- 单位:毫秒 +- 范围:0 到正无穷 + +退场动画时长。若未填写,默认值为 450。 + +```webgal +changeFigure:1/open_eyes.png -exitDuration=300; +``` + ### left - 布尔值 @@ -152,6 +174,16 @@ changeFigure:1/open_eyes.png -id=aaa -zIndex=2; changeFigure:2/open_eyes.png -id=bbb -zIndex=1; ``` +### blendMode +- 字符串 +- 默认值:`normal` + +设置立绘的混合模式。仅在立绘出场或替换立绘时生效。 + +```webgal +changeFigure:1/open_eyes.png -id=aaa -blendMode=add; +``` + ### clear - 布尔值 @@ -173,7 +205,7 @@ changeFigure:1/open_eyes.png -none; ### animationFlag - 字符串 -动画标志,暂无实际作用。 +图片立绘差分动画标志。当前云端引擎会将此值写入 `figureAssociatedAnimation`,但嘴型同步和眨眼动画实际按目标立绘 id 读取 `mouthOpen`、`mouthHalfOpen`、`mouthClose`、`eyesOpen`、`eyesClose` 等差分资源;`animationFlag` 本身暂未被后续逻辑读取。 ### mouthOpen - 字符串 diff --git a/src/script-reference/commands/choose.md b/src/script-reference/commands/choose.md index 19e62f7bc..c22ed0902 100644 --- a/src/script-reference/commands/choose.md +++ b/src/script-reference/commands/choose.md @@ -1,16 +1,16 @@ -# choose - -显示选项。 - -## 语句内容 - -填写多个选项。每个选项包括 __选项文本__ 和 __跳转目标__ 两个部分,用英文冒号 `:` 分割;每个选项之间用 `|` 分隔。 -详情请见[分支选择](../../webgal-script/scenes.md#分支选择)。 - -目前可以跳转至 -- 场景文件 -- 本场景的某个标签 - +# choose + +显示选项。 + +## 语句内容 + +填写多个选项。每个选项包括 __选项文本__ 和 __跳转目标__ 两个部分,用英文冒号 `:` 分割;每个选项之间用 `|` 分隔。 +详情请见[分支选择](../../webgal-script/scenes.md#分支选择)。 + +目前可以跳转至 +- 场景文件 +- 本场景的某个标签 + ```webgal 角色A:今天去哪儿呢?; choose:去商店:chapter_01/shop.txt|某人家里:chapter_01/house_b.txt|待在家里:home; @@ -19,5 +19,46 @@ label:home; 角色A:还是待在家里吧。; ``` +在玩家选择一个选项前,`choose` 会暂停后续剧情和自动播放。玩家点击选项后,选项会消失,剧情会跳转到对应的场景文件或标签。 + 如果选择了跳转至「场景文件」的选项,当前场景的后续命令将不会被执行。 如果选择了无效的选项(如跳转目标不存在),WebGAL 会继续执行当前场景的后续命令。 + +### 条件展示和条件启用 + +每个选项可以在选项文本前添加条件前缀: + +- `(条件表达式)`:控制选项是否显示。 +- `[条件表达式]`:控制选项是否可点击。 +- `->`:分隔条件前缀和实际选项内容。 + +```webgal +setVar:hasTicket=true; +setVar:doorPower=1; +choose:(hasTicket==true)->出示门票:ticket|(doorPower>0)[doorPower>1]->强行开门:force|回家:home; +; +label:ticket; +角色A:有票就能进去了。; +jumpLabel:end; +; +label:force; +角色A:力量足够时才能选择这里。; +jumpLabel:end; +; +label:home; +角色A:还是先回家吧。; +; +label:end; +``` + +在上面的例子中: + +- `出示门票` 只有在 `hasTicket==true` 时显示。 +- `强行开门` 只有在 `doorPower>0` 时显示,且只有在 `doorPower>1` 时可点击。 +- 没有条件前缀的选项始终显示且可点击。 + +条件表达式的写法与通用参数 `-when` 相同,详情请见 [(global)](global.md#when)。 + +::: warning +`()` 和 `[]` 必须写在 `->` 左侧。若选项文本中需要显示冒号、分号或竖线等特殊符号,请使用转义写法,详情请见[特殊符号转义](../../webgal-script/base.md#特殊符号转义)。 +::: diff --git a/src/script-reference/commands/getUserInput.md b/src/script-reference/commands/getUserInput.md index 24ec943ba..b2a4f56ab 100644 --- a/src/script-reference/commands/getUserInput.md +++ b/src/script-reference/commands/getUserInput.md @@ -12,6 +12,8 @@ getUserInput:player_name -title=您的名字 -buttonText=确认 -defaultValue=Bo 角色B:{player_name},我记住了。; ``` +玩家确认输入后,引擎会写入变量、关闭输入框,并继续执行下一句。若设置了输入校验且校验失败,则会停留在输入框,不会写入变量。 + ## 参数 ### title @@ -41,6 +43,8 @@ getUserInput:player_name -buttonText=确认; getUserInput:player_name -defaultValue=Bob; ``` +如果玩家没有输入内容就确认,引擎会把 `defaultValue` 写入变量;如果没有设置 `defaultValue`,则写入一个空格。 + ### rule - 字符串 diff --git a/src/script-reference/commands/intro.md b/src/script-reference/commands/intro.md index 8f4691de3..5aec8778d 100644 --- a/src/script-reference/commands/intro.md +++ b/src/script-reference/commands/intro.md @@ -11,6 +11,8 @@ intro:这是第一行文字|这是第二行文字|这是第三行文字; ``` +全屏文字演出结束后会自动关闭,不会遮挡后续对话。连续执行多条 `intro` 时,只会显示当前这一次的全屏文字。 + ## 参数 ### fontSize @@ -90,12 +92,12 @@ intro:这是第一行文字|这是第二行文字|这是第三行文字 -delayTi intro:这是一段话 -hold; ``` -### useForward +### userForward - 布尔值 当值为 `true` 时,需要用户手动点击屏幕,才会显示下一行文字,并设置 `hold` 为 `true`,忽略 `delayTime`。 当值为 `false` 时,自动显示下一行文字。 ```webgal -intro:这是一段话 -useForward; +intro:这是一段话 -userForward; ``` diff --git a/src/script-reference/commands/jumpLabel.md b/src/script-reference/commands/jumpLabel.md index 542f4d9f4..94e17f6a7 100644 --- a/src/script-reference/commands/jumpLabel.md +++ b/src/script-reference/commands/jumpLabel.md @@ -1,22 +1,40 @@ -# jumpLabel - -跳转到指定标签。 -详情请见[标签跳转](../../webgal-script/scenes.md#标签跳转)。 +# jumpLabel + +跳转到指定标签。 +详情请见[标签跳转](../../webgal-script/scenes.md#标签跳转)。 + +## 语句内容 + +填写要跳转的目标标签名称。 + +```webgal +label:think; +; +角色A:我记得她好像喜欢......; +choose:小熊玩偶:wrong|兔子玩偶:correct; +; +label:wrong; +角色A:好像不太对,再想想。; +jumpLabel:think; +; +label:correct; +角色A:对,是兔子玩偶。; +``` -## 语句内容 +### 条件跳转 -填写要跳转的目标标签名称。 +`jumpLabel` 可以配合通用参数 `-when` 使用。条件不满足时,本句会被跳过,剧情继续执行下一句。 ```webgal -label:think; +setVar:score=2; +jumpLabel:scoreHigh -when=score>1; +角色A:分数不足时会看到这里。; +jumpLabel:scoreEnd; ; -角色A:我记得她好像喜欢......; -choose:小熊玩偶:wrong|兔子玩偶:correct; +label:scoreHigh; +角色A:分数大于 1,跳转成功。; ; -label:wrong; -角色A:好像不太对,再想想。; -jumpLabel:think; -; -label:correct; -角色A:对,是兔子玩偶。; +label:scoreEnd; ``` + +条件表达式的写法请见 [(global)](global.md#when)。 diff --git a/src/script-reference/commands/playEffect.md b/src/script-reference/commands/playEffect.md index 41c161bd4..dfa068804 100644 --- a/src/script-reference/commands/playEffect.md +++ b/src/script-reference/commands/playEffect.md @@ -1,34 +1,45 @@ -# playEffect - -播放音效、替换音效、停止音效的三合一命令。 - -## 语句内容 - -填写音效文件的路径。当文件路径为空或为 `none` 时,表示停止播放音效。 -详情请见[播放效果音](../../webgal-script/audio.md#播放效果音)。 - -```webgal -; 如果没有音效存在,则此句表示播放音效。 -playEffect:rain.wav; -; 如果已有音效存在,则此句表示替换音效。 -playEffect:heavy_rain.wav; -; 如果填写 none 或者不填,则此句表示停止播放音效。 -playEffect:none; -``` - -## 参数 - -### id -- 字符串 - -为音效设置 id 后,音效可以循环播放。 -不同 id 的音效与无 id 的音效可以叠加播放。 - -```webgal -; 循环播放脚步声 -playEffect:footsteps.wav -id=footsteps; -; 循环播放雨声 -playEffect:rain.wav -id=rain; -; 播放一次雷声 -playEffect:thunder.wav; -``` +# playEffect + +播放音效、替换音效、停止音效的三合一命令。 + +## 语句内容 + +填写音效文件的路径。当文件路径为空或为 `none` 时,表示停止播放音效。 +详情请见[播放效果音](../../webgal-script/audio.md#播放效果音)。 + +```webgal +; 如果没有音效存在,则此句表示播放音效。 +playEffect:rain.wav; +; 如果已有音效存在,则此句表示替换音效。 +playEffect:heavy_rain.wav; +; 如果填写 none 或者不填,则此句表示停止播放音效。 +playEffect:none; +``` + +## 参数 + +### id +- 字符串 + +为音效设置 id 后,音效可以循环播放。 +不同 id 的音效与无 id 的音效可以叠加播放。 + +```webgal +; 循环播放脚步声 +playEffect:footsteps.wav -id=footsteps; +; 循环播放雨声 +playEffect:rain.wav -id=rain; +; 播放一次雷声 +playEffect:thunder.wav; +``` + +### volume +- 数字 +- 范围:0 到 100 +- 默认值:100 + +设置音效的音量百分比,0 为静音,100 为最大音量。 + +```webgal +playEffect:rain.wav -id=rain -volume=60; +``` diff --git a/src/script-reference/commands/say.md b/src/script-reference/commands/say.md index e21276ad4..8e651187e 100644 --- a/src/script-reference/commands/say.md +++ b/src/script-reference/commands/say.md @@ -1,153 +1,159 @@ -# say - -对话命令。任何识别不了的命令,都将尝试作为对话命令执行。 - -## 语句内容 - -填写一句话,这句话将出现在对话框中。可以使用 `|` 来分割多行文字。 -详情请见[基础](../../webgal-script/base.md)与[对话](../../webgal-script/dialogue)。 - -```webgal -说话人:你好,世界!; -``` - -以下情况对话框不会出现: -- 语句内容与角色名均为空 -- 用 `setTextbox` 命令隐藏了对话框 -- 开启了 __隐藏所有 UI__ - -## 参数 - -### notend -- 布尔值 - -当值为 `true` 时,显示完所有文字后,立刻执行下一条命令,即使玩家未开启自动播放。 - -```webgal -changeFigure:1/open_eyes.png -next; -角色A:这到底是在干什么啊...... -notend; -changeFigure:1/closed_eyes.png -next; -没眼看了! -concat; -``` - -### concat -- 布尔值 - -当值为 `true` 时,不会清空对话框内已有的文字,而是在此基础上,让新文字接续在后面。 - -```webgal -changeFigure:1/open_eyes.png -next; -角色A:这到底是在干什么啊...... -notend; -changeFigure:1/closed_eyes.png -next; -没眼看了! -concat; -``` - -### speaker -- 字符串 - -填写说话者的名称,该名称将出现在对话框的说话者栏中。 -若未填写此参数,则对话框将继续使用上一次的说话者名称。 - -```webgal -say:你好,世界! -speaker=角色A; -; 若没有 speaker 参数,角色名继续使用上一次的值 -say:世界,你好!; -``` - -WebGAL 支持说话者的简化写法。 -若句首到第一个英文冒号之间的字符不是命令,那么将其作为说话者名称。 -若整句没有英文冒号,即找不到说话者名称,则继续使用上一次的说话者名称。 - -```webgal -角色A:你好,世界!; -; 说话者仍然为角色A -世界,你好!; -``` - -### clear -- 布尔值 - -当值为 `true` 时,将清除说话者,此时对话框的说话者栏不会显示,通常可用于旁白。 - -```webgal -say:这是一句话。 -speaker=角色A; -say:这是一个旁白。 -clear; -say:这是一句话。 -speaker=角色B; -``` - -WebGAL 支持旁白的简化写法。当句首到第一个英文冒号之间没有一个字符,那么将这句话作为旁白。 - -```webgal -角色A:这是一句话。; -:这是一句旁白。; -角色B:这是一句话。; -``` - -### vocal -- 字符串 - -填写声音文件的路径,说话时将播放该声音文件。 - -```webgal -角色A:你好,世界! -vocal=hello_world.wav; -``` - -WebGAL 支持声音文件的简化写法。 - -```webgal -角色A:你好,世界! -hello_world.wav; -``` - -### fontSize -- 字符串 - -设置字体大小,可用值有: -- `small` - 小号字体 -- `medium` - 中号字体 -- `large` - 大号字体 -- `default` - 默认字体大小,即设置里指定的字体大小 - -当此值被设置后,会传递到之后的对话,直至被再次设置。 - -```webgal -角色A:你好,世界! -fontSize=small; -角色A:你好,世界!; 依然是小字体 -角色A:你好,世界! -fontSize=large; -角色A:你好,世界! -fontSize=default; -``` - -### left -- 布尔值 - -当值为 `true` 时,WebGAL 将尝试驱动左侧立绘张嘴说话。 - -```webgal -角色A:你好,世界! -left; -``` - -### right -- 布尔值 - -当值为 `true` 时,WebGAL 将尝试驱动右侧立绘张嘴说话。 - -```webgal -角色A:你好,世界! -right; -``` - -### center -- 布尔值 - -当值为 `true` 时,WebGAL 将尝试驱动中间立绘张嘴说话。 - -```webgal -角色A:你好,世界! -center; -``` - -### figureId -- 字符串 - -填写立绘的 id,WebGAL 将尝试驱动对应 id 的立绘张嘴说话。 - -```webgal -角色A:你好,世界! -figureId=aaa; -``` +# say + +对话命令。任何识别不了的命令,都将尝试作为对话命令执行。 + +## 语句内容 + +填写一句话,这句话将出现在对话框中。可以使用 `|` 来分割多行文字。 +详情请见[基础](../../webgal-script/base.md)与[对话](../../webgal-script/dialogue)。 + +```webgal +说话人:你好,世界!; +``` + +以下情况对话框不会出现: +- 语句内容与角色名均为空 +- 用 `setTextbox` 命令隐藏了对话框 +- 开启了 __隐藏所有 UI__ + +## 参数 + +### notend +- 布尔值 + +当值为 `true` 时,显示完所有文字后,立刻执行下一条命令,即使玩家未开启自动播放。 + +```webgal +changeFigure:1/open_eyes.png -next; +角色A:这到底是在干什么啊...... -notend; +changeFigure:1/closed_eyes.png -next; +没眼看了! -concat; +``` + +### concat +- 布尔值 + +当值为 `true` 时,不会清空对话框内已有的文字,而是在此基础上,让新文字接续在后面。 + +```webgal +changeFigure:1/open_eyes.png -next; +角色A:这到底是在干什么啊...... -notend; +changeFigure:1/closed_eyes.png -next; +没眼看了! -concat; +``` + +### speaker +- 字符串 + +填写说话者的名称,该名称将出现在对话框的说话者栏中。 +若未填写此参数,则对话框将继续使用上一次的说话者名称。 + +```webgal +say:你好,世界! -speaker=角色A; +; 若没有 speaker 参数,角色名继续使用上一次的值 +say:世界,你好!; +``` + +WebGAL 支持说话者的简化写法。 +若句首到第一个英文冒号之间的字符不是命令,那么将其作为说话者名称。 +若整句没有英文冒号,即找不到说话者名称,则继续使用上一次的说话者名称。 + +```webgal +角色A:你好,世界!; +; 说话者仍然为角色A +世界,你好!; +``` + +### clear +- 布尔值 + +当值为 `true` 时,将清除说话者,此时对话框的说话者栏不会显示,通常可用于旁白。 + +```webgal +say:这是一句话。 -speaker=角色A; +say:这是一个旁白。 -clear; +say:这是一句话。 -speaker=角色B; +``` + +WebGAL 支持旁白的简化写法。当句首到第一个英文冒号之间没有一个字符,那么将这句话作为旁白。 + +```webgal +角色A:这是一句话。; +:这是一句旁白。; +角色B:这是一句话。; +``` + +### vocal +- 字符串 + +填写声音文件的路径,说话时将播放该声音文件。 + +```webgal +角色A:你好,世界! -vocal=hello_world.wav; +``` + +WebGAL 支持声音文件的简化写法。 + +```webgal +角色A:你好,世界! -hello_world.wav; +``` + +### fontSize +- 字符串 + +设置字体大小,可用值有: +- `small` - 小号字体 +- `medium` - 中号字体 +- `large` - 大号字体 +- `default` - 默认字体大小,即设置里指定的字体大小 + +当此值被设置后,会传递到之后的对话,直至被再次设置。 + +```webgal +角色A:你好,世界! -fontSize=small; +角色A:你好,世界!; 依然是小字体 +角色A:你好,世界! -fontSize=large; +角色A:你好,世界! -fontSize=default; +``` + +### left +- 布尔值 + +当值为 `true` 时,WebGAL 将尝试驱动左侧立绘张嘴说话。 + +```webgal +角色A:你好,世界! -left; +``` + +### right +- 布尔值 + +当值为 `true` 时,WebGAL 将尝试驱动右侧立绘张嘴说话。 + +```webgal +角色A:你好,世界! -right; +``` + +### center +- 布尔值 + +当值为 `true` 时,WebGAL 将尝试驱动中间立绘张嘴说话。 + +```webgal +角色A:你好,世界! -center; +``` + +### figureId +- 字符串 + +填写立绘的 id,WebGAL 将尝试驱动对应 id 的立绘张嘴说话。 + +```webgal +角色A:你好,世界! -figureId=aaa; +``` + +## 嘴型同步工作流 + +`vocal`、`left`、`right`、`center`、`figureId` 参数共同构成图片立绘嘴型同步的驱动端。使用前需先通过 `changeFigure` 注册差分图片。 + +完整工作流请参见[动画效果 - 图片立绘嘴型同步](../../webgal-script/animation.md#图片立绘嘴型同步)。 diff --git a/src/script-reference/commands/setTextbox.md b/src/script-reference/commands/setTextbox.md index 2dd976665..407cd6307 100644 --- a/src/script-reference/commands/setTextbox.md +++ b/src/script-reference/commands/setTextbox.md @@ -1,23 +1,24 @@ -# setTextbox - -显示和隐藏文本框的二合一命令。 - +# setTextbox + +显示和隐藏文本框的二合一命令。 + ## 语句内容 填写 `hide` 时,隐藏对话框,其他任何字符串均表示显示对话框。 +常用写法是 `setTextbox:hide;` 隐藏文本框,`setTextbox:on;` 或 `setTextbox:show;` 恢复显示。 ::: info 用 `setTextbox` 隐藏对话框后,若后续没有其他 `setTextbox` 命令显示对话框,则对话框将一直保持隐藏状态。 -::: - -如果用 `setTextbox` 显示对话框,但是对话框仍然没有出现,可能是因为以下情况: -- 说话内容与角色名均为空 -- 开启了 __隐藏所有 UI__ - -```webgal +::: + +如果用 `setTextbox` 显示对话框,但是对话框仍然没有出现,可能是因为以下情况: +- 说话内容与角色名均为空 +- 开启了 __隐藏所有 UI__ + +```webgal 角色A:带你去一个地方。; setTextbox:hide; changeBg:shop.png; -setTextbox:show; +setTextbox:on; 角色A:我们到了。; ``` diff --git a/src/script-reference/commands/setTransform.md b/src/script-reference/commands/setTransform.md index 5611ea31e..eb30711d1 100644 --- a/src/script-reference/commands/setTransform.md +++ b/src/script-reference/commands/setTransform.md @@ -1,51 +1,51 @@ -# setTransform - -设置变换与效果。 - -## 语句内容 - -填写[变换与效果](../others/transform-reference.md)的单行 JSON 字符串。 - -:::info -此命令只生成一段动画,如果您需要设置多段动画,请使用 [setAnimation](setAnimation.md) 或 [setTempAnimation](setTempAnimation.md) 命令。 -::: - -```webgal -changeFigure:character_a/normal.png -id=aaa; -; 向左移动 -setTransform:{"position":{"x":-500},"saturation":0.8} -target=aaa -duration=500; -; 降低亮度 -setTransform:{"brightness":0.5,"contrast":1.2} -target=aaa -duration=500; -``` - -## 参数 - - -```webgal -changeFigure:1/open_eyes.png -id=aaa; -setTransform:{"brightness":0.5} -target=aaa -duration=500; -``` - - -```webgal -changeFigure:1/open_eyes.png -id=aaa; -setTransform:{"brightness":0.5} -target=aaa -duration=500; -``` - +# setTransform + +设置变换与效果。 + +## 语句内容 + +填写[变换与效果](../others/transform-reference.md)的单行 JSON 字符串。 + +:::info +此命令只生成一段动画,如果您需要设置多段动画,请使用 [setAnimation](setAnimation.md) 或 [setTempAnimation](setTempAnimation.md) 命令。 +::: + +```webgal +changeFigure:character_a/normal.png -id=aaa; +; 向左移动 +setTransform:{"position":{"x":-500},"saturation":0.8} -target=aaa -duration=500; +; 降低亮度 +setTransform:{"brightness":0.5,"contrast":1.2} -target=aaa -duration=500; +``` + +## 参数 + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTransform:{"brightness":0.5} -target=aaa -duration=500; +``` + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTransform:{"brightness":0.5} -target=aaa -duration=500; +``` + ```webgal changeFigure:1/open_eyes.png -id=aaa; setTransform:{"brightness":0.5} -target=aaa -duration=500 -ease=linear; ``` - - -```webgal -changeFigure:1/open_eyes.png -id=aaa; -setTransform:{"brightness":0.5} -target=aaa -duration=500 -writeDefault; -``` - - -```webgal + + +```webgal +changeFigure:1/open_eyes.png -id=aaa; +setTransform:{"brightness":0.5} -target=aaa -duration=500 -writeDefault; +``` + + +```webgal ; 假设这是一个特别长的动画 setTransform:{"scale":{"x":2,"y":2}} -target=aaa -duration=10000 -keep -next; 角色A: 第一句话; diff --git a/src/webgal-script/animation.md b/src/webgal-script/animation.md index c680e2f3e..79a9ae47f 100644 --- a/src/webgal-script/animation.md +++ b/src/webgal-script/animation.md @@ -1,173 +1,232 @@ -# 动画效果 - -## 为背景或立绘设置动画 - -使用语句 `setAnimation:动画名 -target=作用目标;` - -**示例:** - -``` ws -; // 为中间立绘设置一个从下方进入的动画,并转到下一句 -setAnimation:enter-from-bottom -target=fig-center -next; -``` - +# 动画效果 + +## 为背景或立绘设置动画 + +使用语句 `setAnimation:动画名 -target=作用目标;` + +**示例:** + +``` ws +; // 为中间立绘设置一个从下方进入的动画,并转到下一句 +setAnimation:enter-from-bottom -target=fig-center -next; +``` + 目前,预制的动画有: -| 动画效果 | 动画名 | 持续时间(毫秒)| -| :------------ | :----------------- | :------------- | -| 渐入 | enter | 300 | -| 渐出 | exit | 300 | -| 左右摇晃一次 | shake | 1000 | -| 从下侧进入 | enter-from-bottom | 500 | -| 从左侧进入 | enter-from-left | 500 | -| 从右侧进入 | enter-from-right | 500 | -| 前后移动一次 | move-front-and-back | 1000 | - -目前,动画的作用目标有: - -| target | 实际目标 | -| :--------- | :------------ | -| fig-left | 左立绘 | -| fig-center | 中间立绘 | -| fig-right | 右侧立绘 | -| bg-main | 背景 | -| id | 某个有id的立绘 | - -## 自定义动画 - -### 创建动画 - -动画文件在 `game/animation`,你可以创建自己的自定义动画。 - -动画文件使用 JSON 描述,你可以在 [参考文档](https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON) 参考JSON语法。 - -每一个动画文件都代表一个**动画序列**,使用一个 JSON 数组来描述。下面是一个示例,描述了一个从左侧进入的动画: - -**示例: `enter-from-left.json`** - -``` json -[ - { - "alpha": 0, - "scale": { - "x": 1, - "y": 1 - }, - "position": { - "x": -50, - "y": 0 - }, - "rotation": 0, - "blur": 5, - "duration": 0 - }, - { - "alpha": 1, - "scale": { - "x": 1, - "y": 1 - }, - "position": { - "x": 0, - "y": 0 - }, - "rotation": 0, - "blur": 0, - "duration": 500 - } -] - -``` - -其中各个属性代表的释义为: - -| 属性名 | 释义 | -| :------- | :--------------------------------- | -| alpha | 透明度,范围0-1 | -| scale | 缩放 | -| position | 位置偏移 | -| rotation | 旋转角度,单位为弧度 | -| blur | 高斯模糊半径 | -| brightness | 调节亮度 | -| contrast | 调节对比度 | -| saturation | 调节饱和度 | -| gamma | 调节伽马值 | -| colorRed | 颜色分量:红色, 范围0-255 | -| colorGreen | 颜色分量:绿色, 范围0-255 | -| colorBlue | 颜色分量:蓝色, 范围0-255 | -| duration | 这个时间片的持续时间,单位为毫秒(ms) | -| oldFilm | 老电影效果,0代表关闭,1代表开启 | -| dotFilm | 点状电影效果,0代表关闭,1代表开启 | -| reflectionFilm | 反射电影效果,0代表关闭,1代表开启 | -| glitchFilm | 故障电影效果,0代表关闭,1代表开启 | -| rgbFilm | RGB电影效果,0代表关闭,1代表开启 | -| godrayFilm | 光辉效果,0代表关闭,1代表开启 | - -然后,你需要在 `animationTable`中加上你的自定义动画的文件名(不需要后缀名) - -在文件 `animationTable.json`: - -``` json -["enter-from-left","enter-from-bottom","enter-from-right"] -``` - -然后,你就可以在脚本中调用: - -``` ws -setAnimation:enter-from-left -target=fig-left -next; -``` - -### 省略部分属性 - -如果你的动画只需要操作部分属性,你可以将其他不参与动画的属性留空,使它们保持默认。 - -**示例:`enter.json`** - -``` json -[ - { - "alpha": 0, - "duration": 0 - }, - { - "alpha": 1, - "duration": 300 - } -] - -``` - -### 使用变换 - -一个持续时间为0毫秒,且只有一个时间片的动画就是变换。 - -**示例:** - -``` json -[ - { - "alpha": 0, - "duration": 0 - } -] -``` - -## 设置进出场效果 - -你还可以覆盖 WebGAL 默认的渐变进出场效果,替换为自己的动画效果,例如: - -``` -setTransition: -target=fig-center -enter=enter-from-bottom -exit=exit; -``` - -注意:只有当立绘或背景被设置后,你才能为其设置进出场效果。设置进出场效果的代码写在立绘或背景的设置代码**后**。并且,设置进出场效果的语句必须紧随设置立绘或背景的语句**连续执行**,否则无法被正确应用。 - -::: tip -为什么要这样做? - -在设置立绘或背景时,会为立绘或背景默认设置一个进出场动画。在设置了立绘或背景后,立绘和背景不会立即展示在舞台上,而是会等待进出场效果的设置。 - -如果在立绘或背景设置后,立即执行设置进出场效果的语句,就可以覆盖掉默认的进出场动画,进而实现进出场效果的自定义。如果没有设置,则在进出场时执行默认动画。 - -如果不在立绘或背景设置后立即执行进出场效果的设置,等到图像已经进场了,再覆盖进场动画就没有意义了。但如果此时图像还没有出场,设置的出场动画仍有意义。其会在立绘或背景出场时正确地被应用。 -::: +| 动画效果 | 动画名 | 持续时间(毫秒) | +| :--- | :--- | :--- | +| 渐入 | enter | 300 | +| 渐出 | exit | 300 | +| 左右摇晃一次 | shake | 1000 | +| 从下侧进入 | enter-from-bottom | 500 | +| 从左侧进入 | enter-from-left | 500 | +| 从右侧进入 | enter-from-right | 500 | +| 前后移动一次 | move-front-and-back | 1000 | +| 模糊进入 | blur | 300 | +| 老电影滤镜 | oldFilm | 0 | +| 点状滤镜 | dotFilm | 0 | +| 反射滤镜 | reflectionFilm | 0 | +| 故障滤镜 | glitchFilm | 0 | +| RGB 分离滤镜 | rgbFilm | 0 | +| 光辉滤镜 | godrayFilm | 0 | +| 移除电影类滤镜 | removeFilm | 0 | +| 冲击波入场 | shockwaveIn | 2000 | +| 冲击波退场 | shockwaveOut | 2000 | + +这些名称来自 `game/animation/animationTable.json`。持续时间为 0 的预设通常用于立刻设置或清除滤镜状态。 + +目前,动画的作用目标有: + +| target | 实际目标 | +| :--------- | :------------ | +| fig-left | 左立绘 | +| fig-center | 中间立绘 | +| fig-right | 右侧立绘 | +| bg-main | 背景 | +| id | 某个有id的立绘 | + +## 自定义动画 + +### 创建动画 + +动画文件在 `game/animation`,你可以创建自己的自定义动画。 + +动画文件使用 JSON 描述,你可以在 [参考文档](https://developer.mozilla.org/zh-CN/docs/Learn/JavaScript/Objects/JSON) 参考JSON语法。 + +每一个动画文件都代表一个**动画序列**,使用一个 JSON 数组来描述。下面是一个示例,描述了一个从左侧进入的动画: + +**示例: `enter-from-left.json`** + +``` json +[ + { + "alpha": 0, + "scale": { + "x": 1, + "y": 1 + }, + "position": { + "x": -50, + "y": 0 + }, + "rotation": 0, + "blur": 5, + "duration": 0 + }, + { + "alpha": 1, + "scale": { + "x": 1, + "y": 1 + }, + "position": { + "x": 0, + "y": 0 + }, + "rotation": 0, + "blur": 0, + "duration": 500 + } +] + +``` + +其中各个属性代表的释义为: + +| 属性名 | 释义 | +| :------- | :--------------------------------- | +| alpha | 透明度,范围0-1 | +| scale | 缩放 | +| position | 位置偏移 | +| rotation | 旋转角度,单位为弧度 | +| blur | 高斯模糊半径 | +| brightness | 调节亮度 | +| contrast | 调节对比度 | +| saturation | 调节饱和度 | +| gamma | 调节伽马值 | +| colorRed | 颜色分量:红色, 范围0-255 | +| colorGreen | 颜色分量:绿色, 范围0-255 | +| colorBlue | 颜色分量:蓝色, 范围0-255 | +| duration | 这个时间片的持续时间,单位为毫秒(ms) | +| oldFilm | 老电影效果,0代表关闭,1代表开启 | +| dotFilm | 点状电影效果,0代表关闭,1代表开启 | +| reflectionFilm | 反射电影效果,0代表关闭,1代表开启 | +| glitchFilm | 故障电影效果,0代表关闭,1代表开启 | +| rgbFilm | RGB电影效果,0代表关闭,1代表开启 | +| godrayFilm | 光辉效果,0代表关闭,1代表开启 | + +然后,你需要在 `animationTable`中加上你的自定义动画的文件名(不需要后缀名) + +在文件 `animationTable.json`: + +``` json +["enter-from-left","enter-from-bottom","enter-from-right"] +``` + +然后,你就可以在脚本中调用: + +``` ws +setAnimation:enter-from-left -target=fig-left -next; +``` + +### 省略部分属性 + +如果你的动画只需要操作部分属性,你可以将其他不参与动画的属性留空,使它们保持默认。 + +**示例:`enter.json`** + +``` json +[ + { + "alpha": 0, + "duration": 0 + }, + { + "alpha": 1, + "duration": 300 + } +] + +``` + +### 使用变换 + +一个持续时间为0毫秒,且只有一个时间片的动画就是变换。 + +**示例:** + +``` json +[ + { + "alpha": 0, + "duration": 0 + } +] +``` + +## 设置进出场效果 + +你还可以覆盖 WebGAL 默认的渐变进出场效果,替换为自己的动画效果,例如: + +``` +setTransition: -target=fig-center -enter=enter-from-bottom -exit=exit; +``` + +注意:只有当立绘或背景被设置后,你才能为其设置进出场效果。设置进出场效果的代码写在立绘或背景的设置代码**后**。并且,设置进出场效果的语句必须紧随设置立绘或背景的语句**连续执行**,否则无法被正确应用。 + +::: tip +为什么要这样做? + +在设置立绘或背景时,会为立绘或背景默认设置一个进出场动画。在设置了立绘或背景后,立绘和背景不会立即展示在舞台上,而是会等待进出场效果的设置。 + +如果在立绘或背景设置后,立即执行设置进出场效果的语句,就可以覆盖掉默认的进出场动画,进而实现进出场效果的自定义。如果没有设置,则在进出场时执行默认动画。 + +如果不在立绘或背景设置后立即执行进出场效果的设置,等到图像已经进场了,再覆盖进场动画就没有意义了。但如果此时图像还没有出场,设置的出场动画仍有意义。其会在立绘或背景出场时正确地被应用。 +::: + +## 图片立绘嘴型同步 + +WebGAL 支持通过差分图片实现图片立绘的嘴型同步动画。 + +### 准备差分图片 + +为角色准备以下差分立绘: + +- 默认图(通常为闭嘴状态) +- 张嘴差分 +- 半张嘴差分 +- 闭嘴差分(可与默认图相同) +- 可选:睁眼差分、闭眼差分 + +### 最小示例 + +**1. 注册差分并上场立绘** + +```webgal +changeFigure:1/normal.png -id=charA -mouthOpen=1/mouth_open.png -mouthHalfOpen=1/mouth_half.png -mouthClose=1/normal.png; +``` + +**2. 播放语音并驱动嘴型** + +```webgal +; 通过 id 驱动自由立绘 +角色A:你好,世界! -vocal=charA_hello.wav -figureId=charA; +``` + +引擎会根据语音的实时音量,在 `mouthOpen`、`mouthHalfOpen`、`mouthClose` 三个差分之间切换,模拟嘴型动画。 + +### 位置立绘示例 + +```webgal +; 上场中间立绘并注册差分 +changeFigure:1/normal.png -mouthOpen=1/mouth_open.png -mouthHalfOpen=1/mouth_half.png -mouthClose=1/normal.png; + +; 驱动中间立绘嘴型 +角色A:你好,世界! -vocal=charA_hello.wav -center; +``` + +### 限制 + +- 使用 `vocal` 时,引擎会根据语音音量驱动嘴型;未提供 `vocal` 但指定了 `figureId`、`left`、`right` 或 `center` 时,引擎会用模拟音量驱动目标立绘的嘴型差分。 +- 此功能仅适用于图片立绘。Live2D 立绘有独立的嘴型参数体系,不使用此差分方式。 +- 眨眼差分(`eyesOpen`、`eyesClose`)可选,注册后引擎会自动触发随机眨眼动画。 diff --git a/src/webgal-script/base.md b/src/webgal-script/base.md index e8c7d2822..99da25aa6 100644 --- a/src/webgal-script/base.md +++ b/src/webgal-script/base.md @@ -1,54 +1,76 @@ -# 基础 - -首先,程序启动时会从 **初始脚本** `start.txt` 开始运行,请不要重命名或者删除。 - -后面的教程中将会教你如何使用 WebGAL 脚本。 - +# 基础 + +首先,程序启动时会从 **初始脚本** `start.txt` 开始运行,请不要重命名或者删除。 + +后面的教程中将会教你如何使用 WebGAL 脚本。 + ## 注释 WebGAL 脚本只会解析每一行的分号前的内容,因此分号后的内容会被视作注释。 - -``` ws -WebGAL:你好!; 分号后的内容会被视作注释 + +``` ws +WebGAL:你好!; 分号后的内容会被视作注释 ; 可以直接输入一个分号,然后写一条单行注释 ``` -## `none` 关键词 - -在设置立绘、BGM、背景等 **资源** 时,通过设置为 `none`,可以关闭这个对象。 +## 特殊符号转义 -## `-next` 参数 +WebGAL 脚本使用英文冒号 `:` 分隔命令和内容,使用英文分号 `;` 结束语句并开始行内注释,部分命令还会使用 `|`、`,`、`.` 等符号作为内容语法的一部分。如果你希望这些符号作为普通文本显示,可以在符号前加反斜杠 `\`。 -你可以在任意语句后加上参数 `-next`,这样做可以在执行完本条语句后立刻跳转到下一条语句。这对需要在同一时间内执行多步操作非常有用。 +常见需要转义的符号: -示例: +| 原符号 | 写法 | +| :--- | :--- | +| `:` | `\:` | +| `,` | `\,` | +| `.` | `\.` | +| `;` | `\;` | +| `|` | `\|` | -``` ws -changeBg:testBG03.jpg -next; // 会立刻执行下一条语句 +```ws +intro:我会显示出来:\:\,\.\;不信你看看 -hold; +WebGAL:我会显示出来:\:\,\.\;不信你看看; +choose:我会显示出来:\:\,\.\;不信你看看:nextLabel; ``` -## `-notend` 和 `-concat` 参数 - -有时候,可能你希望在某一句对话执行到某个阶段时加入演出效果,比如切换表情等。 -这时候,你可以使用 `-notend` `-concat` 参数来实现在对话中插入任意语句。 +在文本拓展语法中写 CSS 时,分号同样需要写成 `\;`,否则会被当作 WebGAL 语句注释的开始。 -`-concat` 代表本句对话连接在上一句对话之后 - -`-notend` 代表本句对话没有结束,在后面可能连接演出或对话。 - -示例如下:这是一个在对话进行中切换立绘的演示。 - -``` ws -WebGAL:测试语句插演出!马上切换立绘...... -notend; -changeFigure:k1.png -next; -切换立绘!马上切换表情...... -notend -concat; -changeFigure:k2.png -next; -切换表情! -concat; -``` - -你也可以只使用 `-concat` 参数,将下一句连接在上一句对话之后,因为 `-notend` 参数会在对话渐显完成后转到下一句。 +## `none` 关键词 -``` ws -这是第一句......; -用户点击鼠标后才会转到第二句 -concat; -``` +在设置立绘、BGM、背景等 **资源** 时,通过设置为 `none`,可以关闭这个对象。 + +## `-next` 参数 + +你可以在任意语句后加上参数 `-next`,这样做可以在执行完本条语句后立刻跳转到下一条语句。这对需要在同一时间内执行多步操作非常有用。 + +示例: + +``` ws +changeBg:testBG03.jpg -next; // 会立刻执行下一条语句 +``` + +## `-notend` 和 `-concat` 参数 + +有时候,可能你希望在某一句对话执行到某个阶段时加入演出效果,比如切换表情等。 +这时候,你可以使用 `-notend` `-concat` 参数来实现在对话中插入任意语句。 + +`-concat` 代表本句对话连接在上一句对话之后 + +`-notend` 代表本句对话没有结束,在后面可能连接演出或对话。 + +示例如下:这是一个在对话进行中切换立绘的演示。 + +``` ws +WebGAL:测试语句插演出!马上切换立绘...... -notend; +changeFigure:k1.png -next; +切换立绘!马上切换表情...... -notend -concat; +changeFigure:k2.png -next; +切换表情! -concat; +``` + +你也可以只使用 `-concat` 参数,将下一句连接在上一句对话之后,因为 `-notend` 参数会在对话渐显完成后转到下一句。 + +``` ws +这是第一句......; +用户点击鼠标后才会转到第二句 -concat; +```