跳转到内容

6. 搭建视觉小说舞台

使用第 5 课的完整 Pack。本课在保留状态和进度的基础上加入 VN 呈现,将协议改为 0.5、修订号改为 7。舞台需要兼容的 VN 阅读器才能显示;下载校验器不包含播放器。

将 presentation.protocol 设为 storyorbit.vn/1。背景绑定把场景读者卡 greenhouse 连接到 greenhouse_art,时间为 dusk。立绘绑定把角色读者卡 rowan 分别连接到 rowan_neutral 与 rowan_smile,表情为 neutral 和 smile。

从完成稿复制新增的微笑 PNG 及准确的素材声明。透明立绘使用相同的 256×256 画布,身体位置保持一致。保留 neutral 基础表情;舞台和表演中的表情名称必须能找到该角色真实存在的绑定。背景是场景图,不是角色立绘。

opening_stages[0] 通过索引与摘要锚定到开场段落 0,并声明地点、场景主体、时间和出场角色。本例让 Rowan 以 neutral 表情入场。舞台提示描述可见的构图,不修改故事状态,也不替读者选择行动。

opening_suggestions 提供开场时显示的三个作者选项。它与控制运行时建议的 suggestions 是不同字段。本例选项分别询问幼苗、提出帮忙、请求安静停留。只有后续观察到实际行动,才记录共同照料;显示一个选项本身不算完成照料。

段落 1 的 Rowan 标注增加 performance: { "focus": true, "expression": "smile" },引文覆盖整个段落。兼容播放器会突出说话者并使用对应的微笑立绘。稳定的角色 ID、段落摘要、引文与出现次数仍然必须正确。

执行校验,再并排查看两张立绘。私有试玩的预期:黄昏温室、可见的 Rowan、三个作者开场选项,以及邀请时聚焦且微笑的 Rowan。立绘缺失时检查主体类型与 ID、角色卡、neutral 绑定、出场角色和已上传文件。提示被拒绝时,检查摘要和整段台词条件。JSON 校验通过不等于 VN 播放已经验证。

搭好开场舞台后,继续阅读让预制配图进入当前场景,加入每轮共享配图、状态资格条件和横竖版构图。

原创教学素材

以下是下载包中真实图片的静态预览。立绘帧分别展示便于对照,这里不是真实播放器。

原创几何教学图:温室玻璃、夕阳与幼苗。
greenhouse_art
透明画布上的原创 Rowan 几何教学肖像。
rowan_neutral
原创几何幼苗纪念物教学图。
seedling_reward
原创且对齐的 Rowan 微笑教学立绘。
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.json

Windows 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

下一课