# 随机范围整理 ## meta ```meta name: 随机范围整理 id: random-range artifact: 设计.随机范围整理 declaration: > 把已定的检定和抽签收成「变量.当前」里的隐藏行,行名用「名称.随机数」; 值是剩余数字,用掉一个就改这一行,只剩 1 个时补上。 when: | 机制、变量或生成规则已出现必须用随机数才能裁定的点时使用。 when_not: | 全程不靠随机推进 → 不使用。 公式本身还没钉死 → 先实现机制、生成规则或变量设计。 按合理度从池里选,而不是抽签 → 不列入。 boundary: | 不新建表,不发骰面。数字是普通隐藏变量,默认玩家看不见。 0 层玩法不依赖随机。普通楼层在第一次正式回复时由程序补齐随机行,开场不必写出具体数字。 feeds: gm ``` ## opening ```opening 本局哪些地方必须抽个数才能定?每项用哪一行保存剩余数字,以及怎么掷。 ``` ## task ```task 先扫实现机制、生成规则、变量设计、叙事与故事推进、美学,列出所有需要随机数才能裁定的点,再写入 `设计.随机范围整理`。每项是 `变量.当前` 的一行,行名写成「名称.随机数」,玩家默认不可见。值是剩余数字组成的数组,下一个可用的是第一个。 用掉第一个后,程序改写这一行,去掉那个数。改完后如果只剩 1 个,就按范围补到预备个数,不要等这一行空了。模型不自己编数字。 无随机需求则本步不排。公式还没在上游钉死时,把缺口交给 `self_score.gap`。产物正文不放评分和追问。 ``` ## principles ```principles 1. 只登记上游已经成立的掷法,不新写法则。 2. 一行一项,一项只管一类用途,行名是「名称.随机数」,例如 `敏捷.随机数`。不要把「战斗」糊成一行却含命中、伤害、闪避几种掷法,拆成 `命中.随机数`、`伤害.随机数`、`闪避.随机数`。 3. 范围写成人与程序都能读的形式,如 `1~100`、`力量*5~10`,并注明单位(整数、闭区间等);不写「中等偏高」这类散文。 4. 和别的隐藏变量一样存在现有表里:能改、有版本;不对玩家默认展示。 5. 预备个数够连用即可,少了靠「只剩 1 个就补」,不要一次放很多。 ``` ## probe ```probe 每轮 1~2 点。范围是否还能算、行名是否会撞、有没有漏掉已经声明的检定。 ``` ## output ```output { "schema": "context-fragment.v1", "技能": "随机范围整理", "brief": "登记了哪些隐藏随机行", "mount": ["world-simulator"], "稳变": "stable", "正文": { "项": [ { "行名": "敏捷.随机数", "用途": "敏捷检定", "范围": "1~100", "表达式": "无表达式时省略", "单位": "整数,闭区间", "依赖真值": [], "预备个数": 3, "来源": "上游短引用" } ] } } ``` 硬规则: 1. 合法 JSON;有项则每项有行名、用途、预备个数,以及范围或表达式。 2. 行名以 `.随机数` 结尾,彼此不重复。 3. 不输出具体骰面,不另建表,不写票 id。 4. 产物正文不含自评和追问。 5. `mount` 为 `["world-simulator"]`。 ## score ```score 覆盖度: - 5:该随机的点都有独立行。 - 3:漏了一项次要抽签。 - 1:明显漏项,或没有随机却硬凑。 可执行性: - 5:行名、范围或表达式、预备个数都能直接写成隐藏变量。 - 3:大体能写,有一处范围含糊。 - 1:只有用途,程序无法出数。 克制: - 5:就是现有表上的隐藏行,用一个改一行,只剩 1 个再补。 - 3:行名或隐藏方式略绕。 - 1:另建存储、票证或让模型自己编数。 ``` ## checklist ```checklist - [ ] 每项是「名称.随机数」,玩家默认不可见? - [ ] 范围或表达式能算出数? - [ ] 用掉一个就改这一行,只剩 1 个时补? - [ ] 没有新表、票 id 或具体骰面? ``` ## examples ```examples - `敏捷.随机数` 的值是 [47, 12, 83]。用了 47,这一行改成 [12, 83]。再使用一次后只剩 [83],随即补到 3 个。 - `攻击.随机数` 按力量算出区间,仍是同一张表里的另一行。 ```