feat: add the-ballad-of-chalk campaign

Cloud Empress campaign for 弗莱格, a sellsword obsessed with chalk.
Ships the brief, PC sheet, state files, a starting location, and the
session 0001 log. The opening hook and hidden truth live in gm/.
This commit is contained in:
2026-09-13 17:12:49 +08:00
parent 52e08d25e4
commit 9048437942
17 changed files with 378 additions and 0 deletions
+39
View File
@@ -0,0 +1,39 @@
---
name: the-ballad-of-chalk
game: cloud-empress
created: 2026-09-13
---
# 白垩之歌 The Ballad of Chalk
## 前提 Premise
弗莱格(绰号「酸的」)是个靠悬赏吃饭的佣兵,怀里始终揣着一根白垩。他痴迷白垩——
骨皮工艺留下的那种白,能改写现实的那种白——想真正精通它,好让父母终于肯正眼看他
一眼。可他的心灵迟钝得可怜,偏偏施法靠的就是心灵。在这个巨蝉苏醒、云城朽坏的余世
里,他要用一根粉笔和一把左轮,写一首证明自己的歌。
## 基调与主题 Tone & themes
- 生态科学奇幻 + 生存恐怖。世界很美,但致命的毒素看不见。
- 暴力又快又丑,能避则避;活下来靠谨慎、运气和同伴,不靠英雄主义。
- 个人执念对一个无动于衷的世界:一个人的执念究竟值不值,又究竟需不需要被看见。
- 主题问题:你想向谁证明?如果那个人永远不会承认,你还练吗?
## 边界 Boundaries
- 采用游戏自带的内容警告:巨型昆虫、精神疾病、流血、截肢、军事占领、枪支暴力。
- 对儿童的直接伤害默认留在幕后(只做侧面描写),除非玩家明确要求搬到台前。
- 玩家可随时喊停、快进或要求跳过任何内容;新出现的限制会追加到这里。
- 这一节由玩家随时修改。
## 开场 Starting situation
低地边缘,盐碱荒原。天上是滑界涟漪——周围的现实正在扭曲。弗莱格独自走在干涸的盐
脊道上,行囊里那根白垩被他的拇指摩过一遍又一遍。就在这时,一个浑身涂满湿泥的孩子
从荒地里走出来,站在路当中,说自己是村庄唯一的幸存者。
## 备注
- 游戏:`cloud-empress`,调用时用 `--campaign the-ballad-of-chalk`。
- 本战役的规则覆盖写在 `house-rules.md`(暂为空,即按游戏原样运行)。
@@ -0,0 +1,18 @@
---
name:
game:
stats: {}
tracks: {}
conditions: []
inventory: []
---
#
## Description
## Background
## Relationships
## Notes
@@ -0,0 +1,70 @@
---
name: 弗莱格(酸的)
game: cloud-empress
stats:
心智: 31
心灵: 18
力量: 33
速度: 58
saves:
现实: 26
恐惧: 23
躯体: 54
age: 成年
background: 佣兵
stress: 0
tracks:
harm: { value: 0, max: 10 }
wounds: { value: 0, max: 3 }
conditions: []
inventory:
- 帆布披风(0 护甲值)
- 布满灰尘的战斗护甲(5 护甲值)
- 左轮手枪(1d10 伤害,近处,3 发弹药)
- 肩套
- 粘土烟斗与一袋玉米烟叶
- 悬赏令宾果卡
- 一根白垩
- 熏驼鸽肉干(2 人份)
- 法术残篇:隐形
---
# 弗莱格(酸的)
## 描述
一个沉默、瘦削、手指被白垩磨得发白的中年佣兵。走路时左手总在腰侧,右手则时不时
探进夹克,摸一摸那根白垩。别人以为他在数子弹。
## 背景
之前在沙漠里替人追捕逃犯——循着悬赏令和脚印跑,开枪,领赏,再往北。那段日子给了
他一双好眼、一把左轮、一张喝过太多茶的胃,以及一个从死人身上捡来的习惯:收集白垩。
## 执念:白垩
他要精通白垩。骨皮工艺的残片能把一个人的意志按进现实里,那是他见过最像「被认可」
的东西。可他的心灵(18)是全卡最弱的一项——施法、纹章、感受异界,全都要过心灵。
他比谁都刻苦,也比谁都容易当众出丑。他把这当作一场必须打赢的仗,因为输给白垩,就
等于向父母承认:他们当初看轻他是对的。
## 技能
- 火器(职业赋予;他身上是那把左轮)
- 街头智慧(职业赋予)
- 施法(自选 1,为契合白垩执念)
- 白垩收集(自选 2,为契合白垩执念)
> 自选的两项技能按「白垩执念」挑选;想换随时说。
## 随身物
- 一只疲惫的老驴蟹(随身物,不占格)。它又踢又咬,还不断地乞讨食物。
## 关系
- 父母:弗莱格口中反复出现的两个人。他们的样子、住处、是否还活着,都还没定。
## 职业状态
当你附近的盟友看到你恐慌时,他们必须进行恐惧豁免,否则也会恐慌。
@@ -0,0 +1,24 @@
# GM only
Truth the PC has not learned: hidden motives, unrevealed identities, off-screen
events, and what is really going on.
**Not player-facing.** The player may read anything else in the campaign, so a
secret must never be written outside `gm/`. Nothing here may appear in a session
log or in chat until the PC observes it or is told.
Keep `../state/knowledge.md` as the PC's counterpart: what they know, believe,
and suspect. When the two disagree, `knowledge.md` is what the PC currently
thinks — narrate from it, not from here.
## Retconning
You may change a fact here after the fact, but only in the layer the PC has not
perceived. The test is perception: if every session-log entry and everything in
`state/knowledge.md` still reads exactly as before, the retcon is invisible and
allowed. What the PC saw, heard, or was told stays fixed; the cause behind it
may change.
Use it to repair a plot that cannot otherwise be made to work. Do not use it
liberally, and never to dodge a consequence the fiction already earned. Record
each one in `retcons.md`.
+26
View File
@@ -0,0 +1,26 @@
# 幕后真相(GM only)
**不可出现在会话日志或对话中**,直到弗莱格亲眼看见或被人告知。
## 泥巴孩子
- 神谕:`Q: 孩子的村庄是被巨蝉毁灭的吗? d6=3 → No, but…`
村庄**不是**毁于巨蝉。真实原因**尚未确立**——留给神谕在合适时机决定。
- 同一次神谕的转折:`某个同行者一直在撒谎,你此刻才看见破绽。`
有人在撒谎,而破绽此刻已经在场。
- 已确定的破绽:孩子浑身是**湿泥**,但这一带是盐碱荒原,最近的水源是灰喉井,
方向也对不上。孩子自称从荒地深处走来——说不通。
- 「我是村庄唯一的幸存者」这句话可能为假。
- 撒谎者未必要是孩子本人;也可能是弗莱格随后遇到的某个同行者。但破绽现在就在场。
## 白垩
- 弗莱格对白垩的执念是他自己的事,**不是**世界秘密。
- 他的父母是否真的需要「被证明」、他们现在何处、是否还活着——**尚未确立**。
用 `journal oracle` 决定,不要凭空编。
## 待定(用神谕或火花表确立,别硬编)
- 村庄真正的遭遇。
- 孩子是否知道真相,以及她在隐瞒什么。
- 白垩坡这个地名是否真实存在。
@@ -0,0 +1,12 @@
# Retcons
A log of facts changed after the fact. Each entry records what changed and why,
so the change is not quietly contradicted later.
A retcon is only allowed in the layer the PC has not perceived: every session
log entry and every line of `../state/knowledge.md` must still read exactly as
before. See `README.md`.
| Session | What changed | Why |
|---------|--------------|-----|
| | | |
@@ -0,0 +1,5 @@
# House rules
This campaign's overrides and additions to the game's rules. The game package
is authoritative; anything written here takes precedence for this campaign
only. Leave it empty if the game runs as written.
@@ -0,0 +1,15 @@
# Session 0001 — 泥巴孩子
- **Campaign:** the-ballad-of-chalk
- **Game:** cloud-empress
- **Date:** 2026-09-13
- **PC:** 弗莱格(酸的)
## Scene 1 — 盐脊道上
`spark roll 20 → "一个浑身涂满泥巴的孩子,说自己是村庄唯一的幸存者。" [npc, child]`
`weather roll 7 → "滑界涟漪——周围的现实被扭曲。" [slip]`
**Scene:** 低地边缘,盐碱荒原。天是滑界涟漪,云层像被谁用手指抹开,现实的边缘在弗莱格
眼角余光里微微走样。风里全是盐味。他一个人走在干涸的盐脊道上,行囊里那根白垩又被
拇指摩过一遍。就在前面路当中,站着一个浑身涂满湿泥的孩子,一动不动地看着他。
@@ -0,0 +1,4 @@
# Sessions
One file per session, named `NNNN-slug.md` (zero-padded, e.g. `0001-the-ash-gate.md`).
Session logs are append-only; see `AGENTS.md` for the format.
@@ -0,0 +1,8 @@
# Clocks
Ticking pressures. Fill a segment whenever the fiction advances the clock.
| Clock | Segments | Filled | Notes |
|-------|----------|--------|-------|
| 巨蝉苏醒 | 6 | 0 | 夏天一到,巨蝉便从地下醒来。每过一段时日填一格。 |
| 村庄的真相 | 4 | 0 | 每当弗莱格逼近孩子谎言的破绽,填一格;填满则真相浮出。 |
@@ -0,0 +1,32 @@
# What the PC knows
The PC's working picture of the world — not the world itself. Narration may draw
on these entries and on what the PC perceives now; anything the PC has not
learned belongs in `../gm/`.
Update this file whenever a scene reveals something, confirms a suspicion, or
overturns a belief. A mistaken belief stays here under Suspected until the PC
learns better, even after the GM knows the truth.
## Known
| Fact | Learned |
|------|---------|
| 巨蝉在夏天苏醒,吞噬死者与白垩。 | 常识 |
| 第 29 次远征军涌进低地,寻找失踪的云之女帝。 | 常识 |
| 白垩能驱动纹章与法术;要用它,得先付代价。 | 常识 |
| 低地边缘最近的水源是灰喉井。 | 走这条道的人都知道 |
## Suspected
| Belief | Basis |
|--------|-------|
| 父母从来没有真正看得起他。 | 他离开家时他们说的话 |
| 只要精通白垩,他们就会承认他。 | 他自己的推断,未经检验 |
| 心灵迟钝可以靠苦功弥补。 | 他不肯承认的另一半可能是错的 |
## Open questions
- 我到底能不能学会白垩魔法?
- 我的父母现在在哪里?他们要我拿出什么才肯正眼看我?
- 那个满身泥的孩子说的是真的吗?
@@ -0,0 +1,9 @@
# Threads
Open questions and unresolved goals. Status is one of: open, resolved, abandoned.
| Thread | Status | Notes |
|--------|--------|-------|
| 精通白垩,向父母证明自己 | open | 弗莱格的执念;心灵 18 是他最大的障碍。 |
| 那个泥巴孩子是不是唯一幸存者 | open | 她自称村庄唯一的幸存者。 |
| 白垩从何而来、父母身在何处 | open | 出身与执念的源头,尚未打捞。 |
@@ -0,0 +1,13 @@
# Campaign tables
Tables placed here belong to this campaign and override the game's tables when
names collide. The lookup order for `journal roll <name>` is:
1. `campaigns/<name>/tables/<name>.csv`
2. `games/<game>/tables/<name>.csv`
Use this directory for tables specific to this campaign's setting or cast. The
game's own tables do not need to be copied here.
Format: a CSV with a `min,max,text` header and an optional `tags` column. See
`docs/oracle.md`.
@@ -0,0 +1,24 @@
# Factions
One file per faction, named `kebab-case.md`.
These files are player-facing: record what the PC has observed or been told. A
hidden agenda or an off-screen plan belongs in `../../gm/`.
```markdown
---
name:
goal:
disposition: friendly | neutral | hostile | unknown
---
# <name>
## Description
## Members
## Resources
## History
```
@@ -0,0 +1,26 @@
# Locations
One file per location, named `kebab-case.md`. Keep the frontmatter stable so
the agent can update it in place.
These files are player-facing: record what the PC has observed or could observe.
A hidden truth the PC has not yet learned belongs in `../../gm/`.
```markdown
---
name:
type:
region:
status: visited | known | rumored
---
# <name>
## Description
## Notable features
## Inhabitants
## History
```
@@ -0,0 +1,27 @@
---
name: 灰喉井
type: 水站 / 驿站
region: 低地边缘,盐碱荒原
status: known
---
# 灰喉井
## Description
盐脊道上唯一还出水的井。井水发苦,烧开后有白霜浮在表面,据说那就是被冲淡的白垩。
几间土坯房挤在井边,一面褪色的远征军旗子钉在最高的那间屋顶上,风一吹就哗啦响。
## Notable features
- 一口深井,水苦,但方圆几十里内没有第二处水源。
- 来往的悬赏猎人、驮鸽商队和云裔的信使在此歇脚。
- 墙上钉满悬赏令,很多已经褪成空白。
## Inhabitants
守井的老两口,姓什么没人记得。还有几只不肯离开的驮鸽。
## History
据说是第 29 次远征军东进时打下的第一口井。远征军走了,井留下了。
@@ -0,0 +1,26 @@
# NPCs
One file per NPC, named `kebab-case.md`.
These files are player-facing: record what the PC has observed or been told. A
hidden motive or an unrevealed identity belongs in `../../gm/`.
```markdown
---
name:
role:
location:
status: alive | dead | missing | unknown
disposition: friendly | neutral | hostile | unknown
---
# <name>
## Description
## Wants
## Relationships
## History
```