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