怎么用这套文档
改一个人只需要动一个文件
这套文档不是手写的 HTML,是构建出来的。目的是让「改一句台词」这件事的成本等于改一行文本,而不是在一个 490KB 的大页面里翻找。
chars-src/<key>.txt
竖线 DSL,一行一条记录。P| 人格 · C| 口头禅 · L| 台词 · Q| 任务 · K| 红线。语法表在 person.js 顶部注释里。
node gen.js <key>
不带参数 = 重建全部 39 页。版式在 _skeleton.html,改一次全站生效。生成的 <key>.html 永远不要手改,下次构建就没了。
node _qa/lint.js
校验字段数、本命口头禅一致性、富文本白名单、容器归属。再加 node _qa/render_test.js 跑一遍真实渲染断言。两个全绿才能提交。
people.js 加一行(key / file / name / alias / role / grp / color / catch),再建一个 chars-src/<key>.txt,跑一次 node gen.js。任何 HTML 里都不许硬编码人物清单——导航、上下页、卡片、索引全部读 HB_PEOPLE。台词设计规范
这八条是全项目文案的地基,违反即打回
短句优先,一句一个信息
手机屏幕上气泡只有两行。超过 22 个字的台词必须拆,或者把后半句变成演出注释而不是嘴上的话。潜台词写在第三段,不写在嘴里。
每句话都要能被利益解释
角色说这句话想换来什么?答不上来就是作者在替角色说话。哪怕是狗也要有价码——大黄的条件是「一根火腿肠,当场兑现」。
口头禅必须有三个不同语境
一句话只在一个场景出现叫标签,在喜、怒、诀别三种场景里都成立才叫人设。每条 C| 都必须写清「什么时候说」和「绝对不能怎么说」。
反例制度:❌ 比 ✅ 更重要
每个人物页固定两条 L|!self| 反例,写成看起来很像会对的话。反例的作用是防止别人接手时把人设写平。lint 会检查反例数量必须为 2。
判词要短到能当按钮
辣条妹的五档「夯 / 顶级 / 人上人 / NPC / 拉完了」、老周的「还行」、芳姨的「先吃」——评价系统一律使用单词级判词,不许写成整句评论。
打字机实机规格写死
逐字 28ms,每 2 字符一声方波 440Hz beep,标点处延迟 ×3。跳过键立即补全当前句。反例永不进 Demo(data-bad="1" 直接过滤)。
禁煽情清单写在页面上
每个人物的 §03 都有 D|-| 黑名单(他绝不说的话)。这是给协作者的护栏,不是建议。妈妈辈不哭、女主不卖惨、兄弟不道歉。
称呼表是人物关系的可执行代码
每条 R|对象|关系|他的称呼|对方称呼 都是双向的。写作时禁止出现表外的称呼——「老周突然叫毛雄小名」这类漂移是最常见的人设崩坏点。
网感词库 · 谁能说什么
梗是分配制,不是公共财产
本作要求网感,但网感不等于全员刷梗。下面每个词都指定了唯一持有者;红色条目是禁用区——在城南主线场景中一旦扩散,喜剧效果立刻归零。
#c63a17 / #ff6a2a / #ffe926 由 IP 法务锁定不可改;③ 傲楠、顾长根、赖律师三人几乎不用网络语——他们代表的是秩序,秩序不需要流行。全部人物
点卡片进单人页 · 顺序即 people.js 顺序
御膳房 · 全书唯一的店
城南所有人都吃它,包括反派
③B「辣条妹的御膳房」在本作里不是一个餐厅,是一座城市的生活坐标。全城外卖单量第一、午高峰出餐 200+、骑手取餐要喊号排队。招牌「御膳拌面 ¥48」是全作唯一吃完直接满血的食物,附带「辣到清醒」(怒气增速 +15%,持续 3 分钟)。形象、菜单、判词五档严格对齐参考站 latiaomei.infinityfly.xin。
¥48
一碗面 ≈ 跑一趟白单的净收入。男主在她价格牌前站三秒的全部戏都在这个差价里。
不打折 · 不赊账
「四十八,概不赊。」她不谈恋爱、不打架、不哭、❤ 不变。
夯 / 顶级 / 人上人 / NPC / 拉完了
全城南通用的评价语言,出自她的探店视频。
敌我双方共同排队
豹哥的马仔在排队,傲楠想包场被按原价收费,夜班保安靠它活着。