用法与排版
September 12, 2026 · View on GitHub
README.md 的补充材料:安装、基本操作、设定面板见主文档。
对话框的三张内容页
同一时刻只显示一张:
| 内容页 | 什么时候出现 | 显示什么 |
|---|---|---|
| 语音台词 | 点击立绘 / 自动播放 | 台词,打字机逐字显示、居中;此时底栏整条移除 |
| 本轮收据 | 一轮对话结束 | 消耗 128.5K token、花费 ¥0.28,两行都是黑色,整块居中,停留 5 秒 |
| 余额页 | 点击对话框;或点击立绘而这条语音没有台词 | 余额 ¥XX、今日已用 ¥XX,整块居中 |
- 点对话框不播放音效(设定按钮的音效不受影响)。
- 语音包没放内容表时,点击立绘不显示台词,改为显示余额页;语音照常播放、立绘照常随机更换。
- 点对话框会把消失倒计时重新计为
dialogHoldSeconds(默认 3 秒),从这次点击算起。
什么时候消失
- 台词显示完后停留 3 秒再淡出:打字机放完且语音播完,两个条件都满足才开始计时。
- 秒数由
dialogHoldSeconds控制(默认 3,范围 0.5–120,超出会被夹回边界)。 - 本轮收据固定停 5 秒,不跟随该配置;要改就改
lib/client.js顶部的COST_HOLD_SECONDS。 - 打开设定面板期间对话框常驻,关掉面板恢复自动消失。
- 对话框消失后,立绘切回该立绘包的默认立绘(
spriteRevertOnHide: false可关闭)。
内部排版
- 素材字节都走 fetch + blob:DSH 网页端的连接很紧张时,浏览器会把优先级最低的请求排在队尾 ——
媒体元素自己的下载和
<img>的下载都实测卡过十几秒(一发消息才一起放行)。 所以语音、立绘、对话框底图、设定图标都由挂件自己把字节取回来,再交给blob:播放 / 渲染; 取不到就退回原来的直连方式。这也是"点了立绘语音响了、立绘却没换"这类问题的根治办法。 - 全部居中:台词、收据、余额都是水平居中的。
- 语音顺序默认洗牌池:整个语音包洗成一轮,逐条不放回,放完自动重洗,一轮之内不重复
(实测 400 次点击里任何一句最多出现 1 次)。想改回每次独立随机,设定面板切「语音顺序 → 纯随机」;
想让某几句多放少放,见 customize.md 的
weights.json。 - token 用 K / M 计数:
128.5K token、1.23M token;一千以内照原样显示。金额始终精确到分。 - 打字机:逐字显示,句尾有闪烁光标;整句约 1–2.2 秒。
- 字号自适应:按完整台词算出能放下的最大字号,长句自动缩小、短句放大,打字过程中不跳动。
- 短句上限 28px(
lib/client.js顶部的MAX_LINE_FONT)。 - 数字不换错行:
余额 ¥12.39、今日已用 ¥0.59各自是不可拆分的整体,窄框时只在两组之间换行。 - 避开 logo:收据与余额页只使用对话框上方的一段高度。用哪一段由底图说了算——
自带底图右下角有 logo,用上方 72%;自带的空白底图(或自己换的无 logo 底图,
logoShare: 1) 用满整块,实测能到画面的 93%。
各档位的实测结果
最长台词 64 字(含 2 个硬换行)、最短 1 个字:
| 内容页 | 完整显示 | 截断(带淡出提示) |
|---|---|---|
| 语音台词 | 3 档及以上 | 1–2 档 |
| 极短台词(1 个字) | 全部 10 档 | — |
| 本轮收据 | 全部 10 档 | — |
| 余额页 | 全部 10 档 | — |
对话框位置的自适应规则
选「立绘下方」时:
| 情况 | 行为 |
|---|---|
| 下方空间足够 | 显示在立绘下面 |
| 立绘贴着屏幕底边 | 与立绘底部对齐、相互重叠 |
| 下方有缝隙但不够放 | 把立绘往上推,腾出完整空间 |
选「立绘上方」时:
| 情况 | 行为 |
|---|---|
| 上方空间足够 | 显示在立绘上面 |
| 立绘贴着屏幕顶边 | 翻到立绘下方 |
| 上方有缝隙但不够放 | 把立绘往下推,腾出完整空间 |
自动推移只是布局偏移,不会改写拖拽保存的位置;对话框始终被拉回屏幕内。