diff --git a/campaigns/the-ballad-of-chalk/campaign.md b/campaigns/the-ballad-of-chalk/campaign.md new file mode 100644 index 0000000..36f5c86 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/campaign.md @@ -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`(暂为空,即按游戏原样运行)。 diff --git a/campaigns/the-ballad-of-chalk/characters/_template.md b/campaigns/the-ballad-of-chalk/characters/_template.md new file mode 100644 index 0000000..b30cf1f --- /dev/null +++ b/campaigns/the-ballad-of-chalk/characters/_template.md @@ -0,0 +1,18 @@ +--- +name: +game: +stats: {} +tracks: {} +conditions: [] +inventory: [] +--- + +# + +## Description + +## Background + +## Relationships + +## Notes diff --git a/campaigns/the-ballad-of-chalk/characters/flag.md b/campaigns/the-ballad-of-chalk/characters/flag.md new file mode 100644 index 0000000..c76bd86 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/characters/flag.md @@ -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,为契合白垩执念) + +> 自选的两项技能按「白垩执念」挑选;想换随时说。 + +## 随身物 + +- 一只疲惫的老驴蟹(随身物,不占格)。它又踢又咬,还不断地乞讨食物。 + +## 关系 + +- 父母:弗莱格口中反复出现的两个人。他们的样子、住处、是否还活着,都还没定。 + +## 职业状态 + +当你附近的盟友看到你恐慌时,他们必须进行恐惧豁免,否则也会恐慌。 diff --git a/campaigns/the-ballad-of-chalk/gm/README.md b/campaigns/the-ballad-of-chalk/gm/README.md new file mode 100644 index 0000000..cf40723 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/gm/README.md @@ -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`. diff --git a/campaigns/the-ballad-of-chalk/gm/notes.md b/campaigns/the-ballad-of-chalk/gm/notes.md new file mode 100644 index 0000000..a82f557 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/gm/notes.md @@ -0,0 +1,26 @@ +# 幕后真相(GM only) + +**不可出现在会话日志或对话中**,直到弗莱格亲眼看见或被人告知。 + +## 泥巴孩子 + +- 神谕:`Q: 孩子的村庄是被巨蝉毁灭的吗? d6=3 → No, but…` + 村庄**不是**毁于巨蝉。真实原因**尚未确立**——留给神谕在合适时机决定。 +- 同一次神谕的转折:`某个同行者一直在撒谎,你此刻才看见破绽。` + 有人在撒谎,而破绽此刻已经在场。 +- 已确定的破绽:孩子浑身是**湿泥**,但这一带是盐碱荒原,最近的水源是灰喉井, + 方向也对不上。孩子自称从荒地深处走来——说不通。 +- 「我是村庄唯一的幸存者」这句话可能为假。 +- 撒谎者未必要是孩子本人;也可能是弗莱格随后遇到的某个同行者。但破绽现在就在场。 + +## 白垩 + +- 弗莱格对白垩的执念是他自己的事,**不是**世界秘密。 +- 他的父母是否真的需要「被证明」、他们现在何处、是否还活着——**尚未确立**。 + 用 `journal oracle` 决定,不要凭空编。 + +## 待定(用神谕或火花表确立,别硬编) + +- 村庄真正的遭遇。 +- 孩子是否知道真相,以及她在隐瞒什么。 +- 白垩坡这个地名是否真实存在。 diff --git a/campaigns/the-ballad-of-chalk/gm/retcons.md b/campaigns/the-ballad-of-chalk/gm/retcons.md new file mode 100644 index 0000000..1310188 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/gm/retcons.md @@ -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 | +|---------|--------------|-----| +| | | | diff --git a/campaigns/the-ballad-of-chalk/house-rules.md b/campaigns/the-ballad-of-chalk/house-rules.md new file mode 100644 index 0000000..2f095e1 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/house-rules.md @@ -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. diff --git a/campaigns/the-ballad-of-chalk/sessions/0001-the-mud-child.md b/campaigns/the-ballad-of-chalk/sessions/0001-the-mud-child.md new file mode 100644 index 0000000..28ab49f --- /dev/null +++ b/campaigns/the-ballad-of-chalk/sessions/0001-the-mud-child.md @@ -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:** 低地边缘,盐碱荒原。天是滑界涟漪,云层像被谁用手指抹开,现实的边缘在弗莱格 +眼角余光里微微走样。风里全是盐味。他一个人走在干涸的盐脊道上,行囊里那根白垩又被 +拇指摩过一遍。就在前面路当中,站着一个浑身涂满湿泥的孩子,一动不动地看着他。 diff --git a/campaigns/the-ballad-of-chalk/sessions/README.md b/campaigns/the-ballad-of-chalk/sessions/README.md new file mode 100644 index 0000000..6610ac0 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/sessions/README.md @@ -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. diff --git a/campaigns/the-ballad-of-chalk/state/clocks.md b/campaigns/the-ballad-of-chalk/state/clocks.md new file mode 100644 index 0000000..7673d82 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/state/clocks.md @@ -0,0 +1,8 @@ +# Clocks + +Ticking pressures. Fill a segment whenever the fiction advances the clock. + +| Clock | Segments | Filled | Notes | +|-------|----------|--------|-------| +| 巨蝉苏醒 | 6 | 0 | 夏天一到,巨蝉便从地下醒来。每过一段时日填一格。 | +| 村庄的真相 | 4 | 0 | 每当弗莱格逼近孩子谎言的破绽,填一格;填满则真相浮出。 | diff --git a/campaigns/the-ballad-of-chalk/state/knowledge.md b/campaigns/the-ballad-of-chalk/state/knowledge.md new file mode 100644 index 0000000..1326568 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/state/knowledge.md @@ -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 + +- 我到底能不能学会白垩魔法? +- 我的父母现在在哪里?他们要我拿出什么才肯正眼看我? +- 那个满身泥的孩子说的是真的吗? diff --git a/campaigns/the-ballad-of-chalk/state/threads.md b/campaigns/the-ballad-of-chalk/state/threads.md new file mode 100644 index 0000000..7214889 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/state/threads.md @@ -0,0 +1,9 @@ +# Threads + +Open questions and unresolved goals. Status is one of: open, resolved, abandoned. + +| Thread | Status | Notes | +|--------|--------|-------| +| 精通白垩,向父母证明自己 | open | 弗莱格的执念;心灵 18 是他最大的障碍。 | +| 那个泥巴孩子是不是唯一幸存者 | open | 她自称村庄唯一的幸存者。 | +| 白垩从何而来、父母身在何处 | open | 出身与执念的源头,尚未打捞。 | diff --git a/campaigns/the-ballad-of-chalk/tables/README.md b/campaigns/the-ballad-of-chalk/tables/README.md new file mode 100644 index 0000000..973e7ea --- /dev/null +++ b/campaigns/the-ballad-of-chalk/tables/README.md @@ -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 ` is: + +1. `campaigns//tables/.csv` +2. `games//tables/.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`. diff --git a/campaigns/the-ballad-of-chalk/world/factions/README.md b/campaigns/the-ballad-of-chalk/world/factions/README.md new file mode 100644 index 0000000..db756e3 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/world/factions/README.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 +--- + +# + +## Description + +## Members + +## Resources + +## History +``` diff --git a/campaigns/the-ballad-of-chalk/world/locations/README.md b/campaigns/the-ballad-of-chalk/world/locations/README.md new file mode 100644 index 0000000..eee0fa6 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/world/locations/README.md @@ -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 +--- + +# + +## Description + +## Notable features + +## Inhabitants + +## History +``` diff --git a/campaigns/the-ballad-of-chalk/world/locations/ash-throat-well.md b/campaigns/the-ballad-of-chalk/world/locations/ash-throat-well.md new file mode 100644 index 0000000..26706f1 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/world/locations/ash-throat-well.md @@ -0,0 +1,27 @@ +--- +name: 灰喉井 +type: 水站 / 驿站 +region: 低地边缘,盐碱荒原 +status: known +--- + +# 灰喉井 + +## Description + +盐脊道上唯一还出水的井。井水发苦,烧开后有白霜浮在表面,据说那就是被冲淡的白垩。 +几间土坯房挤在井边,一面褪色的远征军旗子钉在最高的那间屋顶上,风一吹就哗啦响。 + +## Notable features + +- 一口深井,水苦,但方圆几十里内没有第二处水源。 +- 来往的悬赏猎人、驮鸽商队和云裔的信使在此歇脚。 +- 墙上钉满悬赏令,很多已经褪成空白。 + +## Inhabitants + +守井的老两口,姓什么没人记得。还有几只不肯离开的驮鸽。 + +## History + +据说是第 29 次远征军东进时打下的第一口井。远征军走了,井留下了。 diff --git a/campaigns/the-ballad-of-chalk/world/npcs/README.md b/campaigns/the-ballad-of-chalk/world/npcs/README.md new file mode 100644 index 0000000..dd4e860 --- /dev/null +++ b/campaigns/the-ballad-of-chalk/world/npcs/README.md @@ -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 +--- + +# + +## Description + +## Wants + +## Relationships + +## History +```