# Coc 480buy Card

> 生成《克苏鲁的呼唤》7 版中文调查员角色卡，使用 480 购点制，并输出合法 JSON 或可打印 HTML；HTML 可按需求渲染为彩色模式、纯黑白打印模式，或留空幸运方便现场掷点。用户提到 COC/CoC/克苏鲁的呼唤/跑团/调查员/车卡/角色卡/480buy/480购点/7版/可打印 HTML/黑白打印/彩色角色卡/现场摇幸运，或想要有弧光、有背景、有性格的调查员时应使用本 skill。角色卡模板、职业名、技能名和校验信息都以中文为主，因此不要自行翻译成英文职业或英文技能名；必须通过 GitHub 上的 coc-cardwright Python CLI 校验。不要只生成数值合法的空壳卡，角色卡里可写的部分都要完整、有质量，并且人物弧光要能从属性、技能、信用评级、物品和背景条目中互相印证。

- Skill: `tanis90/coc-480buy-card` (Agent Skill, multi-file: 3 files)
- Install (CLI): `npx skillmds@latest add tanis90/coc-480buy-card`
- Raw SKILL.md: https://api.skillmd.com/api/skills/tanis90/coc-480buy-card/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Web & Frontend
- Author: tanis90 (https://skillmd.com/u/tanis90)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/tanis90/coc-480buy-card

---


# COC 480 购点角色卡

本 skill 是一个轻量操作指南：它不内置 Python 源码，而是指导 code agent 从 GitHub 获取并调用 `coc-cardwright` Python CLI。模型负责人物编辑、角色弧光、数值取向和背景写作；点数预算、本职技能、上限、衍生值和渲染必须交给 CLI 校验。

## 引擎仓库

先读取本目录的 `ENGINE_REPO.txt` 获取 Python CLI 仓库地址。默认是：

```text
https://github.com/tanis90/coc-cardwright.git
```

如果 `ENGINE_REPO.txt` 不存在或仓库地址不可用，向用户确认仓库地址；不要猜一个新的 GitHub URL。

## 安装或复用 CLI

优先复用当前工作区已有的 `coc-cardwright` / `coc_generator` 项目。如果没有，就从 `ENGINE_REPO.txt` 指向的仓库 clone。

推荐放在当前工作区的工具目录，例如：

```bash
git clone <ENGINE_REPO> .coc-cardwright
python -m pip install -e .coc-cardwright
```

如果用户不希望全局安装，创建项目内虚拟环境再安装：

```bash
python -m venv .coc-cardwright-venv
.coc-cardwright-venv/Scripts/python -m pip install -e .coc-cardwright
```

Windows 也可以使用：

```bash
py -3 -m pip install -e .coc-cardwright
```

安装后优先调用 `coc` 命令；如果 PATH 没刷新或找不到 `coc`，进入仓库后用 Python 模块方式调用：

```bash
python -m coc_generator --help
```

## CLI 能做什么

CLI 是本 skill 的规则入口。它能做四类事情：

- `jobs`：列出所有可用中文职业名，返回 JSON 数组。
- `job "<职业名>"`：查看某个职业的职业点公式、信用评级范围、本职技能和技能说明。
- `verify <json>`：校验角色 JSON，返回 `valid/errors/warnings/derived`。这是生成角色卡前必须通过的步骤。
- `render <json> -o <html>`：在 JSON 校验通过后渲染双面 A4 可打印 HTML 角色卡，默认彩色模式。
- `render <json> --style mono -o <html>`：渲染纯黑白打印模式，适合低墨量或不需要彩色的打印场景。
- `render <json> --blank-luck -o <html>`：渲染时留空卡面幸运值，适合玩家现场掷幸运；JSON 仍然必须包含合法 `luck` 并通过校验。

不确定命令或参数时，先调用 CLI 自带 help，而不是猜参数：

```bash
coc --help
coc verify --help
coc render --help
coc job --help
```

如果 `coc` 不可用，就在 Python 仓库目录下调用：

```bash
python -m coc_generator --help
python -m coc_generator verify --help
python -m coc_generator render --help
python -m coc_generator job --help
```

常用例子：

```bash
coc jobs
coc job "私家侦探"
coc verify character.json
coc render character.json -o character_card.html
coc render character.json --style mono -o character_card_mono.html
coc render character.json --blank-luck -o character_card_blank_luck.html
```

## 角色编辑目标

一张好卡不是“职业 + 点数 + 背景段落”的拼接，而是一个可被玩家立刻拿去扮演的人。生成时先建立人物的内在张力，再把张力翻译成数值和卡面字段。

每张卡至少要有下面四层：

- 表层身份：他现在看起来是谁，靠什么谋生，别人如何称呼他。
- 欲望：他主动想得到什么，例如名誉、赎罪、真相、自由、家人的安全。
- 伤口或恐惧：他为什么会卡在原地，例如羞耻、亏欠、阶级焦虑、幸存者内疚、对失控的恐惧。
- 弧光问题：模组里最可能逼他回答的问题，例如“他会为了真相牺牲无辜者吗？”或“他能不能承认自己并不总是正确？”

写作要具体，避免泛泛的“冷静理性但内心善良”“背负神秘过去”“命运让他卷入事件”。每个重要设定都尽量落到可见物、具体人、具体地点、可扮演习惯或可检验的选择上。

## 苏格拉底式角色访谈

当用户只给出宽泛概念，或说“你来发挥”时，不要立刻写完整角色。先用苏格拉底式追问帮用户发现角色核心。每轮问 3 到 5 个短问题，问题要迫使用户做选择，而不是填写设定表。

提问顺序按编剧逻辑推进：

1. 外在目标：角色现在想要什么？
2. 内在缺口：他为什么非要这个不可？
3. 错误信念：他一直相信什么，导致自己被困住？
4. 关系压力：谁最能逼他暴露真实自我？
5. 代价选择：他为了目标愿意牺牲什么，又绝不愿牺牲什么？
6. 弧光问题：故事会逼他改变哪一个判断？

### 第一轮：抓住角色种子

用户概念很模糊时，优先问这些：

- 他现在最想保住、得到或证明的东西是什么？
- 他最害怕别人发现自己哪一点？
- 如果这张卡只服务一个调查风格，是偏向侦查、社交、战斗、学术、医疗、技术，还是生存？
- 你希望他在故事开始时更像“主动追索真相的人”，还是“被过去拖进事件的人”？

### 第二轮：制造内在矛盾

有了身份和目标后，追问矛盾：

- 他嘴上相信什么，但行动里经常背叛这个信念？
- 他最擅长的能力，曾经害过谁或让他失去过什么？
- 他会为了重要之人隐瞒真相吗？如果会，他会对自己怎么解释？
- 他最看不起哪类人？他自己身上是否也有一点这种特质？

### 第三轮：建立背面字段

背面字段比数值更影响扮演，要用问题把它们问出来：

- `important_person`：谁的一句话最容易让他失去冷静？这个人对他有什么索取权？
- `important_place`：哪里一旦被毁、被卖掉或被污染，他会做出不理性的事？
- `important_item`：他身上哪件东西不是最贵的，却最不能丢？它证明了什么，也掩盖了什么？
- `belief`：他在危险时会用哪句话说服自己继续前进？
- `trait`：桌上玩家能反复演出来的小动作或习惯是什么？
- `scar`：哪次失败或伤害让他现在仍然付账？
- `madness`：压力到来时，他是控制、逃避、讨好、攻击、麻木，还是反复确认某件事？

### 第四轮：把弧光压成选择

在写卡前，用一个选择题确认弧光：

- 如果真相会伤害重要之人，他会公开真相、修改真相，还是毁掉证据？
- 如果宝贵之物被证明来自谎言，他会保留它、归还它，还是亲手毁掉它？
- 如果意义非凡之地藏着神话污染，他会保护地点、保护人、还是保护自己的名声？
- 如果他的强项失效，他会向队友求助，还是加倍使用旧方法？

### 提问方式

- 不要一次问超过 5 个问题。
- 用户回答少时，主动给 2 到 3 个可选方向，但保留用户自定义空间。
- 用户不想互动时，可以自问自答，但要在最终摘要中说明“我采用的角色核心是……”
- 每个问题都要能影响至少一个字段或数值；如果一个问题不会改变卡，就不要问。

## 数值与叙事对齐

先决定人物弧光，再决定数值，而不是先堆强项。属性和技能要成为人物的证据。

- 高 EDU/INT：说明他如何获得知识，以及知识带来的盲点。高智力不等于永远正确，可以表现为过度解释、无法信任直觉、习惯把人当问题处理。
- 高 POW：说明他靠什么信念撑住自己。信念越强，越要设计会动摇它的东西。
- 高 APP/信用评级：说明他在社会中如何被看见，也说明他害怕失去哪种体面。
- 高 DEX/STR/CON/SIZ：把身体优势写进职业、伤痕、习惯或战斗风格，不要让体能数值悬空。
- 低属性同样要有戏：低 STR 可能让他依赖工具和谈判；低 APP 可能让他习惯被低估；低 POW 可能让他在恐惧中发展出一套精密的回避策略。
- 职业技能体现“他靠什么吃饭”；兴趣技能体现“他真正把时间花在哪里”。两者之间的差异通常就是人物张力。
- 信用评级不是纯点数税。它要反映阶层、可支配资源、社交门槛和他面对权威时的底气。
- 武器、随身物品和资产要服务人物，不要只列通用装备。一个物件最好能同时说明职业、关系或心理防线。

如果数值和叙事冲突，优先修改其一，让它们对上。例如背景写“笨拙的书斋学者”，就不应给出毫无解释的高 DEX 和大量近战技能；如果确实需要高 DEX，就写清楚它来自装订、制图、外科、魔术或别的具体训练。

## 字段写作要求

角色卡里可写的部分默认都要填，不要留下空字符串、空数组或只有占位语的字段，除非用户明确要求空白卡。

必须完整写入：

- `basic`：姓名、玩家、职业、年龄、性别、故乡、时代。玩家未知时用用户给出的称呼；仍未知可用“玩家”。
- `weapons`：至少给出与人物相符的一种攻击或自卫手段。非战斗角色也可以是手杖、小刀、拳击、随身工具；不要强塞不合身份的枪。
- `items`：写 5 到 8 件随身物品，每件都要像这个人会带的东西。
- `assets`：现金、消费水平、总资产、资产详情都要填，并与信用评级一致。
- `friends`：写 2 到 4 个联系人，最好包含至少一种可被 KP 使用的关系张力。
- `experienced_modules`：新角色可写“尚未经历正式模组”；老角色则写具体经历。
- `background` 的 9 个字段全部要写：形象描述、思想与信念、重要之人、意义非凡之地、宝贵之物、特质、伤口与疤痕、精神症状、个人介绍。

## 背面字段是扮演引擎

背面的背景字段不是装饰文本，它们是玩家在桌上做选择的按钮。写这些字段时，优先考虑“玩家看见这一项后会怎么演”，而不是“这段话是否好看”。

每个关键背景项都要承担一个桌面功能：

- `belief` 思想与信念：给玩家一个做决定的原则。它必须能在危机中被挑战，例如“证词比血缘可靠”会在亲人撒谎时变成冲突。
- `important_person` 重要之人：给 KP 一个可施压的关系。写清爱、亏欠、竞争、误解或控制，避免只写“很重要的朋友”。
- `important_place` 意义非凡之地：给角色一个归属或软肋。地点应该能被污染、夺走、烧毁、出售或揭开秘密。
- `important_item` 宝贵之物：给玩家一个可触摸的心理锚点。物件最好能在场景中被拿出、隐藏、交换、损坏或误认。
- `trait` 特质：给玩家一个可重复表演的小动作、说话方式或决策偏好。它要能影响调查方式，而不只是形容词。
- `scar` 伤口与疤痕：给角色一个过去仍在索债的痕迹。它可以是身体伤痕、职业污点、家庭裂痕、公开羞辱或失败案件。
- `madness` 精神症状：给恐惧状态一个可演的表现。新角色不必已经疯狂，但要写出压力下的反应模式，例如失眠、洁癖式整理、反复确认门锁、听到某类声音时僵住。
- `appearance` 形象描述：给其他玩家第一眼能抓住的表演线索，包括姿态、衣物磨损、说话停顿、随身气味、手部习惯。
- `description` 个人介绍：把上述项目串成一个可跑团的人，而不是另写一份简历。

设计背面字段时先做“关系压力测试”：

- 如果重要之人出事、背叛或求助，角色会牺牲什么？
- 如果重要地点暴露神话痕迹，角色会保护它、毁掉它，还是逃避？
- 如果宝贵之物被证明来自谎言，角色会承认真相还是维护自我叙事？
- 如果信念与求生冲突，角色会坚持到什么程度？
- 如果特质在调查中制造麻烦，它会让队友怎么看他？

至少让 3 个背面字段彼此牵连，形成可玩的三角关系。例如：重要之人送的宝贵之物来自意义非凡之地，而伤疤正是为了保护那个人留下的。这样玩家每次触碰物件、回到地点或见到联系人，都会重新面对同一个弧光问题。

背面字段要反向约束数值：

- 重要之人是上流赞助人，信用评级、取悦/说服/心理学或资产应有所体现。
- 重要地点是图书馆、报社、诊所、码头、剧院、教堂或警局，职业和核心技能应能解释他为什么属于那里。
- 宝贵之物是武器、工具、病例、底片、账本、护符或旧钥匙时，对应技能、物品或调查钩子要出现。
- 伤疤来自暴力，就解释战斗技能、低 POW、谨慎特质或特定武器；伤疤来自失败案件，就解释法律、心理学、侦查、信用变化或联系人。
- 精神症状不能只写氛围，它要影响玩家如何调查、社交、逃跑、战斗或独处。

如果背面字段和数值冲突，不要只改文字糊过去。要么调整数值，要么写出冲突的合理来源，并把它变成弧光的一部分。

背景字段的质量标准：

- `appearance`：写可被画出来的外观、姿态、衣着或小动作。
- `belief`：写能指导选择的信念，不写抽象口号。
- `important_person`：写清关系、亏欠或冲突。
- `important_place`：写为什么这个地方不能失去。
- `important_item`：写物件的来历和情感功能。
- `trait`：写可扮演的习惯或缺陷。
- `scar`：可以是身体伤疤，也可以是社会性伤口，但要具体。
- `madness`：新角色也要填，可写潜在压力反应或“尚无明确症状，但在……时会……”，不要空着。
- `description`：用一段 120 到 220 字的中文概述人物，交代身份、欲望、伤口、弧光问题和进入调查的钩子。

写作风格要克制、可扮演、带细节。不要把每个字段都写成小说独白；角色卡需要的是能被玩家和 KP 快速抓住的线索。

## 工作流程

1. 收集或合理补全调查员概念：姓名、时代、职业、年龄、性格、背景和玩法定位。
2. 信息不足时先做苏格拉底式角色访谈，每轮问 3 到 5 个能产生选择压力的问题；用户不想互动时才自问自答。
3. 写一份简短的编辑提案：表层身份、欲望、伤口或恐惧、错误信念、弧光问题、背面字段三角关系、数值取向。除非用户只要机械生成，否则不要跳过这一步。
4. 安装或定位 `coc-cardwright` CLI，然后先跑 `coc --help` 确认命令可用。
5. 选择职业时运行 `coc jobs`；分配职业点前运行 `coc job "<职业名>"` 查询职业公式、信用评级范围和本职技能。
6. 把编辑提案翻译成属性、信用评级、职业技能、兴趣技能、武器、物品和资产。职业名和技能名必须使用 CLI 返回的中文名称，避免英文名或自造译名。
7. 按下方结构起草 JSON 角色文件。所有可写字段都要填完整，并检查每个背景条目是否能回扣人物弧光。
8. 运行 `coc verify <json>`。如果 `valid` 不是 `true`，根据错误信息修改 JSON 后再次校验；修正数值时不要破坏已经建立的人物逻辑。
9. 只有校验通过后才运行 `coc render <json> -o <html>`，生成双面 A4 可打印 HTML。默认用彩色模式；用户要求黑白、纯黑白、低墨量或适合普通打印机时，使用 `coc render <json> --style mono -o <html>`；用户要求现场摇幸运、幸运留空或开局再掷幸运时，使用 `--blank-luck`。用户明确要求两套时分别输出彩色和黑白两个 HTML。
10. 回复用户时给出 JSON 路径、HTML 路径、渲染样式、人物弧光摘要、数值如何支撑人物，以及点数使用情况。

## 规则提醒

- 八项属性总和必须严格等于 480。
- 每项属性必须是 20 到 80 之间的整数。
- 幸运不计入 480 购点，范围为 15 到 90。
- 职业点只能投入该职业的本职技能，并且信用评级也计入职业点消耗。
- 兴趣点可以投入任意技能，但不能投入克苏鲁神话。
- 职业技能最终值不能超过 80。
- 兴趣技能最终值不能超过 60。
- 信用评级必须落在职业允许范围内。
- 克苏鲁神话不能通过正常分配点数提升。

这些提醒只是辅助记忆；最终规则以 `coc verify` 的结果为准。

## JSON 结构

使用下面结构作为文件契约：

```json
{
  "basic": {
    "name": "角色姓名",
    "player": "玩家名",
    "job": "职业名",
    "age": 32,
    "gender": "男",
    "hometown": "故乡",
    "era": "1920s"
  },
  "attributes": {
    "str": 50,
    "con": 50,
    "dex": 60,
    "app": 55,
    "pow": 50,
    "siz": 65,
    "edu": 70,
    "int": 80
  },
  "luck": 60,
  "credit_rating": 25,
  "skill_allocations": {
    "pro": {},
    "interest": {}
  },
  "weapons": [],
  "items": [],
  "assets": {
    "cash": "",
    "consumption": "",
    "assets": "",
    "items": ""
  },
  "mythos": 0,
  "friends": "",
  "experienced_modules": "",
  "background": {
    "appearance": "",
    "belief": "",
    "important_person": "",
    "important_place": "",
    "important_item": "",
    "trait": "",
    "scar": "",
    "madness": "",
    "description": ""
  }
}
```

## 输出要求

用户要求生成角色卡时，默认在当前工作区创建文件；如果用户指定目录，则写入指定目录。文件名应清晰可读，例如 `investigator.json` 和 `investigator_card.html`。

如果用户只要角色数据，生成并校验 JSON 后即可停止；如果用户要求可打印角色卡，还要渲染 HTML。未指定样式时输出默认彩色 HTML；用户提到黑白打印、纯黑白、省墨、复印友好或普通激光打印机时，输出 `--style mono` 黑白 HTML；用户提到现场摇幸运、幸运留空、幸运开局再定时，渲染时加 `--blank-luck`，但 JSON 里的 `luck` 仍需合法以通过校验；用户要求“彩色和黑白都要”时，同一份 JSON 渲染两份 HTML。

## 验收清单

完成前逐项检查：

- `coc verify` 返回 `valid: true`。
- 可打印 HTML 的渲染样式符合用户要求：默认彩色，黑白需求使用 `--style mono`，双版本需求输出两份。
- 用户要求现场掷幸运时，HTML 使用 `--blank-luck` 留空幸运；校验规则仍要求 JSON 中有合法 `luck`。
- 角色卡中所有可写字段都已填充，没有无意义空白、模板占位或泛泛套话。
- `description` 能在一段内说明身份、欲望、伤口和弧光问题。
- 至少 3 个数值选择能从背景中找到证据，例如高 EDU、低 POW、信用评级、核心技能或武器选择。
- 至少 3 个背景条目能从数值或物品中得到反证，例如宝贵之物、重要之人、伤疤、兴趣技能、资产详情。
- 职业技能像谋生方式，兴趣技能像私人执念，两者不要完全同质化。
- 物品、资产、联系人能给 KP 提供可用钩子。
- 人物有可以在模组中发生变化的问题，而不是已经完成的静态人设。

