Keyarium

创作者文档

主题包制作指南

主题包把蚂蚁、昆虫、蚁巢、食物和文案整套换成另一个世界观,核心玩法闭环不变。目录镜像游戏内路径,不需要映射表——想换哪张图,就在同样的路径下放一张。

一、目录结构

主题包完整镜像游戏内的资源路径。想覆盖 res://assets/sprites/insects/fly.png,就在主题里放 assets/sprites/insects/fly.png

themes/<your-theme-id>/

manifest.json                      必需
preview.png                        建议,列表封面
assets/
  sprites/
    ant1.png ant2.png ant3.png     4 品级贴图
    goldant.png                    金色变异
    p.png                          搬运碎屑
    ant_head.png                   好友探头
    nest.png nest_path.png         蚁巢皮肤
    insects/<id>.png + .tpsheet    9 种昆虫
    foods/<id>.png + .tpsheet      食物阶段动画
  ui/icons/*.png                   卡片与资源栏图标
data/*.csv                         数值表,可选
translations/messages.csv          文案覆盖,可选

范围限制

只有 assets/data/translations/ 三个顶层目录会被读取。主题包无法覆盖脚本与场景,覆盖表由游戏遍历磁盘生成,不存在路径穿越风险。

二、manifest.json

{
  "id": "wolf_pack",
  "name": "Wolf Pack",
  "name_i18n": { "zh": "狼群", "ja": "狼の群れ" },
  "desc": "Replaces the ant colony with a wolf pack.",
  "desc_i18n": { "zh": "把蚁群换成狼群。" },
  "version": "1.0.0",
  "author": "your name",
  "theme_type": "beast",
  "requires": { "game_version": "0.8" },
  "tags": ["wolf", "beast"],
  "contents": ["data", "translations", "insects"]
}
  • id 必须与目录名完全一致,否则该主题被跳过。
  • name 必需,而且是纯文本不是翻译键。主题列表要显示所有已安装主题,未激活主题的译文并没有加载,翻译键在那里取不到值。多语言用 name_i18n / desc_i18n,按 zh_TWzhname 回退。
  • requires.game_version 会被真正检查:声明版本高于当前游戏版本时不会加载(列表仍可见,点了不生效并提示)。不声明即视为兼容。
  • theme_type / tags / contents 目前仅作元数据留存,供后续创意工坊筛选,当前版本不读取。

三、数值表

数值表是整表替换而非按行合并,所以必须从游戏的 data/ 复制一整份再改,缺列缺行会被校验拦下。

整包拒绝

启动时全部 CSV 走与基础表相同的校验(类型、范围、跨表引用)。任何一处错误都会整包拒绝并自动回到默认主题,游戏内会列出前几条错误。不做逐表回退——「主题的昆虫表 + 默认的食物表」这种混合态会让跨表引用指向不存在的 id,比拒绝加载更糟。

四、哪些改动会暂停成就同步

判定是字段级的:只有改了影响玩法的字段,该主题才会暂停 Steam 成就与统计上传。本地成就照常解锁可见,已解锁的不回滚,切回默认主题后自动恢复同步。

纯外观白名单:改这些不影响同步

可自由修改的列
skins.csv整表
ant_castes.csvname texture display_width*
insects.csvname sheet icon display_width*
foods.csvname tint_r tint_g tint_b icon
upgrades.csvname desc icon
achievements.csvname desc subject icon icon_locked
rare_elements.csvname icon source order icon_texture
resources.csvname icon order icon_texture
upgrade_categories.csvname order page_type icon
game_params.csv全部 shadow_* 与 lift_* 键

* display_width 允许在基础值的 1/3 ~ 3 倍之间调整(换个物种体型自然要变),超出这个范围判为影响玩法。

其余任何改动都会暂停同步,包括增删行、改 id、改表头,以及 hpspeed、各类成本与 target 等数值。官方狼群主题只改了上表内的列,所以它是纯外观主题、成就照常上传——照抄它的做法即可。

注意 insects.texture(静态贴图)不在白名单:昆虫的围咬半径由该图的不透明边缘扫描得出,换图会改变战斗几何。走 sheet 图集替换即可。

五、改资源类型与升级页

除了换数值和换皮,还能改两处结构——这也是「换个题材」与「换套皮肤」的区别。

自定义资源轴

淀粉/糖/蛋白不是写死的,整表替换 data/resources.csv 即可换成兽肉/皮毛/骨头。列为 id,name,icon,order,initial,icon_textureid 是存档键,只用 [a-z0-9_]initial 是开局存量(影响难度,会暂停成就同步)。资源数量不限于 3 个。

跨屏远征遇到跑别的主题的好友时,对方奖励里本主题不认识的资源会被忽略——不会崩,但也收不到。

自定义升级页

升级页的数量、名称与顺序由 data/upgrade_categories.csv 决定,列为 id,name,order,page_type,icon

upgrade_categories.csv

id,name,order,page_type,icon
den,ui.tab.nest_upgrade,0,generic,res://assets/ui/icons/yichao_1.png
wolf,ui.tab.ant_upgrade,1,generic,res://assets/ui/icons/mayi_1.png
food,ui.tab.food_upgrade,2,food,res://assets/ui/icons/shiwu_1.png
beast,ui.tab.beast_upgrade,3,generic,res://assets/ui/icons/mayi_2.png
  • upgrades.csvcategory 列必须引用本表的 id,写错会被校验拦下(不再静默消失)。
  • page_typegeneric 是通用升级页;food 指向食物专用页(含投喂选择与解锁区),只能有一个
  • 不在本表里列出的分类等于移除该页;分类下没有任何升级项时该页也不显示。
  • 新增分类要自带译文(如上面的 ui.tab.beast_upgrade)。成就 / 创意工坊 / 设置三页属于程序外壳,不受此表影响。

新增升级项的效果列

新增升级项必须填 upgrades.csv 的 6 个 effect_* 列,否则卡片上的效果说明是空白(空 effect_key 会被校验报错):

含义
effect_key效果文案的翻译键,内含 {0} 占位符
effect_unitabsolute 原值 / percent 小数转百分比 / multiplier 倍率 / minutes 秒转分钟 / unlock 无数值只判解锁
effect_base0 级时的基数。可写数字,也可写 ant_params / combat_params / game_params 里的键名
effect_per_level每级增量,同样支持键名
effect_max上限,留空即不限
effect_decimals显示小数位

显示值 = base + 等级 × per_level,再按 unit 换算。引用键名而非抄数字,可避免调平衡时同一个数在两处分叉;键名拼错会被校验报出。

六、文案覆盖

与数值表相反,文案是键级覆盖:只需列出想改的键,其余继续用基础译文。

表头必须是 keys,zh,en,ja,ko,fr,de,zh_TW,ar,it,es(列名即 locale 码)。含逗号的译文要用双引号包起来,文本内的双引号写成两个 ""

七、贴图规范

  • 尺寸自由:蚂蚁、昆虫、蚁巢都按「目标显示宽度 ÷ 贴图实际宽度」自动归一化,换素材不必改配置。但 p.png(搬运碎屑)按固定倍率缩放,请贴近原图尺寸
  • 图集(.tpsheet + .png)请整对替换,两个文件都要放进主题目录。.tpsheet 是 TexturePacker 导出的 JSON,帧布局不变时可直接沿用原文件只换图。
  • 主题贴图是外部文件、不经引擎导入,因此只支持 PNG,且显存占用高于打包内的压缩贴图。
  • 窗口按钮一类的界面外壳有意不做主题化:它属于程序外壳而非游戏世界。

八、安装位置

主题装在游戏根目录的 themes\ 下(keyarium.exe 同级),一个主题一个子目录。游戏内「创意工坊」标签页的「打开主题文件夹」按钮会直接打开实际生效的那个目录。

位置 用途 优先级
keyarium.exe 同级的 themes\<id>\ 玩家安装位置,随包发布的官方主题也在这里
%APPDATA%\Godot\app_userdata\Keyarium\themes\<id>\ 游戏目录不可写时(如装在 Program Files)的兜底位置
仓库内 themes/<id>/ 仅编辑器内可见,供开发调试

同 id 时兜底目录优先,方便在本地迭代官方主题而不动发布文件。切换主题需要重启游戏,点确认后游戏自动保存进度并重新拉起自己。主题选择存在 user://theme.json,与存档分离——清档不会重置主题,因为主题是显示偏好而非游戏进度。

九、本地校验

改完包不必反复进游戏试,用启动参数直接跑一遍与游戏内完全相同的校验:

keyarium.exe -- --validate-theme <your-theme-id>

它会打印:覆盖了几个文件、哪些数值表、是否影响 Steam 成就同步,以及逐条列出的错误(表名 + 条目 + 原因)。无错误退出码 0,有错误退出码 1,可直接接进自己的打包脚本。编辑器内用 godot --path . -- --validate-theme <id>

内置主题必须是 exe 旁边的散文件,不能打进 pck——外部贴图走文件系统读取,读不到 pck 内的资源。

十、已知边界

蚂蚁品级(生态位)硬性为 4 个,只能改名字、贴图与数值,不能增删。4 个位置分别是「弱 / 主力 / 强 / 远程」,狼群的幼狼/灰狼/头狼/黑狼正好对应。放宽它要同时改存档与跨屏网络协议,留待后续版本。

同理,主题不能新增成就的统计维度(统计由引擎产生),但可以复用现有维度改文案与目标值。

从模板开始

游戏内置两个包可以照抄:wolf_pack/ 是官方狼群主题,数值与文案已就绪,只改白名单内的列,所以不影响成就同步——推荐作为创作模板verify/ 是框架验证包,覆盖了孵化间隔、三条蚁巢文案和染色后的苍蝇图集,用于跑通「数值 + 文案 + 美术」全链路(它改了孵化间隔,属于影响玩法,会暂停同步)。