6. 搭建视觉小说舞台
使用第 5 课的完整 Pack。本课在保留状态和进度的基础上加入 VN 呈现,将协议改为 0.5、修订号改为 7。舞台需要兼容的 VN 阅读器才能显示;下载校验器不包含播放器。
把图片绑定到主体
Section titled “把图片绑定到主体”将 presentation.protocol 设为 storyorbit.vn/1。背景绑定把场景读者卡 greenhouse 连接到 greenhouse_art,时间为 dusk。立绘绑定把角色读者卡 rowan 分别连接到 rowan_neutral 与 rowan_smile,表情为 neutral 和 smile。
从完成稿复制新增的微笑 PNG 及准确的素材声明。透明立绘使用相同的 256×256 画布,身体位置保持一致。保留 neutral 基础表情;舞台和表演中的表情名称必须能找到该角色真实存在的绑定。背景是场景图,不是角色立绘。
编排第一个舞台
Section titled “编排第一个舞台”opening_stages[0] 通过索引与摘要锚定到开场段落 0,并声明地点、场景主体、时间和出场角色。本例让 Rowan 以 neutral 表情入场。舞台提示描述可见的构图,不修改故事状态,也不替读者选择行动。
opening_suggestions 提供开场时显示的三个作者选项。它与控制运行时建议的 suggestions 是不同字段。本例选项分别询问幼苗、提出帮忙、请求安静停留。只有后续观察到实际行动,才记录共同照料;显示一个选项本身不算完成照料。
为完整台词段落添加表演
Section titled “为完整台词段落添加表演”段落 1 的 Rowan 标注增加 performance: { "focus": true, "expression": "smile" },引文覆盖整个段落。兼容播放器会突出说话者并使用对应的微笑立绘。稳定的角色 ID、段落摘要、引文与出现次数仍然必须正确。
执行校验,再并排查看两张立绘。私有试玩的预期:黄昏温室、可见的 Rowan、三个作者开场选项,以及邀请时聚焦且微笑的 Rowan。立绘缺失时检查主体类型与 ID、角色卡、neutral 绑定、出场角色和已上传文件。提示被拒绝时,检查摘要和整段台词条件。JSON 校验通过不等于 VN 播放已经验证。
搭好开场舞台后,继续阅读让预制配图进入当前场景,加入每轮共享配图、状态资格条件和横竖版构图。
原创教学素材
以下是下载包中真实图片的静态预览。立绘帧分别展示便于对照,这里不是真实播放器。

greenhouse_art
rowan_neutral
seedling_reward
rowan_smile在本地检查作品
在解压目录中创建环境并安装一次固定版本的依赖,然后检查两份文件。修改之后再次检查起始稿。每课都可以使用相同命令。
macOS / Linux
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python check.py start/pack.json
.venv/bin/python check.py finished/pack.jsonWindows PowerShell
py -3 -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe check.py start/pack.json
.venv\Scripts\python.exe check.py finished/pack.json完成稿的预期输出: Structural check passed: Creator Pack 0.5 随后显示确切 Schema SHA-256。这是结构检查,不代表服务准入或真实试玩通过。
完成稿中的可用片段
此片段直接取自经过检查的下载文件,并非完整 Pack。请在 start/pack.json 中修改相应字段,或对照 finished/pack.json。
{
"presentation": {
"protocol": "storyorbit.vn/1",
"bindings": [
{
"role": "background",
"subject": {
"kind": "reader_card",
"id": "greenhouse"
},
"asset_id": "greenhouse_art",
"time_of_day": "dusk"
},
{
"role": "sprite",
"subject": {
"kind": "reader_card",
"id": "rowan"
},
"asset_id": "rowan_neutral",
"expression": "neutral"
},
{
"role": "sprite",
"subject": {
"kind": "reader_card",
"id": "rowan"
},
"asset_id": "rowan_smile",
"expression": "smile"
}
]
},
"opening_stages": [
{
"paragraph_index": 0,
"paragraph_digest": "4858bd538509c8c3f8d2d7b0f89309bdec855b357e95b7c31b2f81cf141870ba",
"location": "温室",
"subject": {
"kind": "reader_card",
"id": "greenhouse"
},
"time_of_day": "dusk",
"time_label": "闭馆之前",
"cast": [
{
"actor_id": "rowan",
"expression": "neutral"
}
]
}
],
"opening_suggestions": [
"问 Rowan 幼苗为什么低垂。",
"提出帮忙浇水。",
"问能否在这里安静坐一会儿。"
],
"performance": {
"focus": true,
"expression": "smile"
}
}查询相关字段: presentation · entries