tanis90/coc-cardwright · Archived

coc-480buy-card

生成《?

First seen Jun 22, 2026

Installation

$ npx skills add tanis90/coc-cardwright --skill coc-480buy-card

Summary

生成《克苏鲁的呼唤》7 版中文调查员角色卡,使用 480 购点制,并输出合法 JSON 或可打印 HTML;HTML 可按需求渲染为彩色模式、纯黑白打印模式,或留空幸运方便现场掷点。用户提到 COC/CoC/克苏鲁的呼唤/跑团/调查员/车卡/角色卡/480buy/480购点/7版/可打印…

Stronger alternatives

This repository is archived — consider an actively maintained alternative.

More details

Agent compatibility

Declared targets from SKILL.md / docs. Unmarked agents are not listed — the skill may still install via the CLI.

Claude Code Not declared
Cursor Not declared
Codex Not declared
GitHub Copilot Not declared
Windsurf Not declared
Gemini CLI Not declared
Cline Not declared
OpenCode Not declared

Repository health

License MIT
Default branch main
Open issues 0
Status Archived

Package contents

Files included with this skill beyond the listing page.

  • skill md SKILL.md 19,821 B
  • docs README.md 1,325 B
  • docs SUMMARY.md 878 B

History

  1. First seen on skills.sh
  2. First recorded snapshot · 2 installs

SKILL.md

COC 480 购点角色卡

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

引擎仓库

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

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

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

安装或复用 CLI

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

推荐放在当前工作区的工具目录,例如:

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

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

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

Windows 也可以使用:

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

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

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,而不是猜参数:

coc --help
coc verify --help
coc render --help
coc job --help

如果 coc 不可用,就在 Python 仓库目录下调用:

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

常用例子:

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 结构

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

{
  "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 提供可用钩子。
  • 人物有可以在模组中发生变化的问题,而不是已经完成的静态人设。