这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
8.1 好感度随路径的变化
好感度不是一局战斗里的数值,而是沿玩家路径推进的整数序列。本节沿一条确定性路径把 4 个变量 yan/hui/shen/mu 的曲线画出来:起点值、增量点、峰值、终点值,再采样 2000 条路径给出终点值分布。实测确定性路径上 yan 从 20 升到 65、升了 5 次,shen 全程停在 50;终点均值显示单条路径只是分布里的一个样本。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
好感度不是一局战斗里的数值,而是沿玩家路径推进的整数序列。本节沿一条确定性路径把 4 个变量 yan/hui/shen/mu 的曲线画出来:起点值、增量点、峰值、终点值,再采样 2000 条路径给出终点值分布。实测确定性路径上 yan 从 20 升到 65、升了 5 次,shen 全程停在 50;终点均值显示单条路径只是分布里的一个样本。
节奏冲突是密度与张力的错配:张力峰值处信息却极稀。本节用两条判据在 500 条路径上检出 4310 次节拍命中——峰值节拍处平均密度 373 千分、谷值处 502 千分、基线 406 千分;绝对错配仅 3 次,方向错配 2810 次(651 千分),全程整数千分并显式声明为 proxy。
密度是单位节点上新增了多少信息:新场景、新 flag、新物品、有意义选择各算一件。本节用滑窗 W=5 把 500 条路径切成 10680 个窗口,实测全局密度 409 千分、窗口区间 200~600 千分、偏疏窗口 62 个(5 千分)、偏密 0 个,可读区间 [250,750] 是设计参数,全程整数并声明 proxy。
节奏是叙事推进的快慢:沿路径每单位节点推进了多少剧情量。本节给 16 个节拍量出三幕分布 5/6/5,用 500 条采样路径算出节奏 384 千分、首次进入场景的间隔均值 3.080 步、命中节拍的三幕占比 345/297/357,全程整数千分位并显式声明为 proxy。
张力曲线 MAE 是 proxy:它度量的是作者标注与设计目标的偏离,不是玩家实际感受到的情绪。本节把这条边界写成一份可机器检查的声明 config/nm_06_3_proxy_declaration.json,用 lint 钉死字段、口径类型、单位与禁声称清单,再把实测的 0 毫填进报告,落 out/nm_06_3_proxy.json。
把 6.1 的曲线与真源 metrics.target_tension_curve 逐项比,按千分位整数地板除算 MAE(毫),阈值 1000 毫。真源里两条曲线当前逐项相同,故路径口径与全量口径的 MAE 都是 0;本节用反事实探针把目标挪动 1 得到 62 毫,证明这个 0 是自洽证据而非指标失效。
情感曲线不是凭感觉画的,它由一条路径唯一决定:路径经过的节点落到场景,场景命中作者标注的 beats[].tension(整数 1–5),序列即成曲线。本节把确定性路径的 26 个节点构造成 11 槽场景序列与 11 点张力曲线 1 2 3 2 3 4 4 3 4 4 2,全程整数、不出现浮点。
本章的张力来自叙事节拍结构,不是机制动力学。本节把这条边界跑成可核对的数:递归展开真源,叙事侧词元命中 143 次,机制侧词元 hp、damage、resource、turn 等命中 0 次——机制张力在这份规格上根本无法计算。分工不是一句口号,而是输入清单的差集。
把节拍张力沿一条真实路径串成曲线:走确定性首选项策略,取出路径经过场景上的 11 个节拍,得到张力曲线 1 2 3 2 3 4 4 3 4 4 2,再切出上升段、平台段与回落段,定位峰值与谷值,并算它与目标曲线的 MAE。本节如实说明:当前规格下 MAE 恒为 0,因为标注与目标逐项相同。
张力在本卷里不是从机制里长出来的,而是作者在规格里标注的:真源的 beats 是 16 个节拍,每个带一个整数 1 到 5 的 tension。本节只读这份标注,不跑任何仿真,就把它按幕切开、算出分布直方图与峰值位置,并给出 beats 字段表与三条整数不变量,全部数字来自本机实跑。
选择密度量的是:一条路径上每隔多少节点出现一次有分量的选择。采样 500 条路径实测——选择密度 962 千分,有分量选择占 917 千分,相邻有分量选择的间隔均值 1.094 步、最大 3 步;三幕占比 433 / 296 / 270,第一夜最密。全程定点整数,与第 7 章的节奏度量共用同一套口径。
两个不同选项在同一状态下推进出的状态逐字段相等,就是一对假选择。本节用完整 BFS 精确枚举 9895423 个可达 (节点,状态) 对,检出 3 对静态假与 10 对状态级假;其中 d_fg_3 的一对在全部 1036900 个可用状态下都相等,静态判据会漏掉它。再用三个合成规格证明检测器会开火。
后果可见性量的是:一个选项写下的状态差量,要隔几步才被下游的条件读到。本节把 115 个选项逐个算成整数距离——34 个立即可见、37 个延迟、28 个写进状态却永不被读到,另有 16 个根本没有差量;平均 2.42 步、最远 12 步。全程结构 BFS,不出现浮点,也不预测玩家感受。
回归的精确含义是「基线可达、改动后不可达」。本节用 BFS 精确口径枚举基线可达的 5 个结局,掐断真相的唯一入边后静态死条件分析报出回归;再把灯守的阈值门从 0 扫到 101,用 Y*=100 定位它由可达变不可达的临界点,软告警恒 exit 0。
20000 条路径逐边计数,把「分支被走得均不均匀」变成整数:分支覆盖率 1000‰、进入次数中位 4173、偏斜度 gini 373‰、头部集中度 29‰。再用偏置强度 b 从 0 扫到 1000 看相变——覆盖先掉、偏斜先抬、稀有结局先消失,软告警恒 exit 0。
结局熵有四个数,混在一起就错。本节把上界 2321 毫比特、单路径 0 毫比特、路径采样 1714 毫比特、状态枚举 1888 毫比特分开报,并讲清「上界不是实测值」——一条路径只到一个结局,它的熵恒为 0。全部整数、毫比特取整,seed=20261016 可复现。
覆盖率给一个总数,缺口给一张名单。本节对随机采样 N=100 条路径逐边计数,定位那条从未被走过的边——门条件为 bell_rung 的真相结局入口,源节点访问了 100 次却没选中它;再用采样规模与种子的参数扰动给出软告警口径,低于 850‰ 只记 WARN、恒 exit 0。
分支覆盖率是一个整数千分比:走过的对话边 × 1000 整除全部对话边。本节先声明两层分母口径(去重边 56 与选项 115),再把单条确定性路径、采样 N 条、BFS 穷举三个来源放进同一张表,量出边、节点、场景三层覆盖,并给出 446‰ 与 1000‰ 的口径来源。
一张 48 节点、115 个选项的故事图,一条确定性路径只走 25 条边(446‰),远低于 850‰ 的目标。本节把随机、贪心、穷举三种采样策略放进同一路径预算对照,量出各自覆盖多少条对话边、到达几个结局,并解释为什么穷举是覆盖率的基准而不是一种采样。
本卷交付四类东西:真源与内核、度量工具链(S/P/W/B 共九件脚本)、可复算产物、六项代理指标口径。给出接手五步与「本套不做」清单——真人玩家测试、真实配音成本等需真实业务环境,命令行不可复现,逐处标 X,并列出后续可做的三个方向(多规格回归 / 度量反演 / 真人数据接入)。