Cataclysm-DDA 自定义 ASCII 美术制作指南:从 REXPaint 绘制到 JSON 集成全流程 📅 发布时间:2026/9/15 21:30:29 👁 浏览次数: Cataclysm-DDA 自定义 ASCII 美术制作指南从 REXPaint 绘制到 JSON 集成全流程【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA导读本指南面向希望在 Cataclysm-DDACDDA中为物品描述、身体状态界面等位置加入自定义 ASCII 美术的玩家与模组作者。文章以仓库文档 doc/ASCII_ART.md 为核心骨架结合 data/json/ascii_art、data/json/bodypart_graphs 下的真实数据文件与 src/ascii_art.cpp、src/bodygraph.cpp 的源码实现系统讲解编辑器选型、REXPaint 安装配置、绘制与导出规范以及将成品接入游戏 JSON 数据层的完整流程。读完本文你将掌握制作符合 CDDA 宽高与配色规范的 ASCII 美术并正确挂载为物品配图或交互式身体图形的全部技术要点。一、ASCII 美术在 CDDA 中的角色Cataclysm-DDA 是一款基于终端字符渲染的回合制生存游戏物品、界面与图形都建立在字符与颜色标签之上。游戏中存在两类由 ASCII 美术驱动的资源ascii_art物品 ASCII 配图存放在 data/json/ascii_art 目录下例如generic_ascii.json内含现金卡、MP3 等物品图案、battery.json各类电池、gun_ascii.json、graveyard.json。物品可通过picture_id字段见 doc/JSON/JSON_INFO.md引用这些图案在物品信息界面中展示。body_graph身体图形存放在 data/json/bodypart_graphs 目录下如head.json、torso.json、arms.json、full_body.json等。这些是交互式图形在玩家 界面按s打开的身体状态菜单中显示可高亮并点选不同身体部位详见 doc/JSON/JSON_INFO.md。理解这一背景后下面进入正题如何用 REXPaint 高效制作并导出这两类美术资源。二、ASCII 美术编辑器的选型原则上任何文本编辑器例如系统自带的记事本都能“画”出 ASCII 美术因为图案本质上就是一行行文本。但对于复杂的几何图形、配色与排版普通文本编辑器效率极低。CDDA 官方指南推荐使用REXPaint理由有二它内置大量实用绘图工具椭圆、矩形、直线及其他形状的绘制大幅提升创作效率在已知的 ASCII 美术编辑器中它是唯一支持将图片导出为 CDDA 可直接读取格式的编辑器。需要说明的是本文并非 REXPaint 的完整使用手册——REXPaint 自带完整手册位于其安装目录内建议绘制前通读以了解全部工具用法。三、安装与配置 REXPaint3.1 下载与解压从 REXPaint 官方下载页获取最新版本并解压到本地目录。需要注意版本差异版本警示REXPaint 1.50 版本存在黄色yellow与粉色pink颜色导出错误的问题该问题在 1.60 版本中已修复。建议直接使用 1.60 及以上版本。3.2 安装 CDDA 专属调色板CDDA 使用自己的一套终端配色为保证导出颜色与游戏内表现一致需要安装官方提供的 CDDA 调色板在 REXPaint 资源页的 Palettes 区域下载 CDDA 调色板文件将调色板文件放入 REXPaint 的palettes文件夹启动 REXPaint 后使用[和]按键切换到 CDDA 调色板可按Ctrl-Shift-o对调色板中的颜色进行排序方便挑选。配色铁律绘制时必须严格使用 CDDA 调色板内的颜色。如果使用了调色板之外的任意颜色导出时这些颜色会被统一转为白色导致图案丢失原有色彩层次。3.3 安装 unifont 字体CDDA 默认使用 unifont 字体为确保所见即所得REXPaint 也应配置该字体在 REXPaint 资源页的 Fonts 区域下载 unifont 字体文件将字体文件放入 REXPaint 的data/fonts文件夹在_config.xt配置文件末尾追加以下一行注意_config.xt为 REXPaint 的配置文件原文档如此命名unifont 8x16 unifont_8x16 16 16 unifont_8x16 16 16 _utf8 _mirror 1 // 640x960在 REXPaint 中可通过Ctrl-滚轮快捷切换字体选择 unifont 即可。四、绘制规范宽度上限与颜色纪律完成环境配置后即可开始创作。绘制阶段有两个关键约束4.1 宽度硬限制41 字符CDDA 的 ASCII 美术宽度不能超过 41 个字符。这一限制不仅是文档建议更有源码层面的强制校验在 src/ascii_art.cpp 中定义了常量ascii_art_width 41加载 JSON 时src/ascii_art.cpp每一行会先剥离颜色标签再计算 UTF-8 宽度若超过 41 字符会被截断并触发debugmsg调试警告static const int ascii_art_width 41; // ... for( std::string line : picture ) { if( utf8_width( remove_color_tags( line ) ) ascii_art_width ) { line trim_by_length( line, ascii_art_width ); debugmsg( picture in %s contains a line too long to be displayed (%i char)., id.c_str(), ascii_art_width ); } }因此建议在 REXPaint 的REXPaint.cfg配置文件中将defaultImageWidth设为41从画布层面杜绝超宽。4.2 高度没有硬限制原文档仅规定宽度上限。但从仓库实际数据看物品配图通常控制在十余行内例如 data/json/ascii_art/battery.json 中电池图案多为 34 行data/json/ascii_art/generic_ascii.json 中 MP3 图案约 40 行请结合物品信息界面的实际显示空间合理控制高度。4.3 颜色纪律再次强调只用 CDDA 调色板中的颜色。导出时非调色板颜色一律退化为白色。五、导出一键生成可直接粘贴的 JSON 文本绘制完成后按Ctrl-j即可导出。导出产物是一个纯文本文件特点是已包含 CDDA 颜色标签形如color_white、color_yellow可直接粘贴进游戏 JSON文本内容与游戏内渲染结果一一对应。导出前请再次确认画布宽度物品 ASCII 美术宽度不得超过41 字符身体图形body graph宽度不得超过40 字符原因见下文第六节。5.1 粘贴目标导出文本应粘贴到对应 JSON 文件的picture字段中美术类型目标目录典型文件名物品配图data/json/ascii_art[ITEM_CATEGORY]_ascii.json如gun_ascii.json身体图形data/json/bodypart_graphs[BODY_PART]_graph.json如head.json注意仓库根目录下还维护着一份 Android 资源副本位于 android/app/src/main/assets/data/json/ascii_art 与 android/app/src/main/assets/data/json/bodypart_graphs桌面端开发以根目录data/json/下的文件为准。关于各类 JSON 文件的字段定义可进一步阅读 doc/JSON/JSON_INFO.md。六、接入游戏ascii_art 与 body_graph 的 JSON 结构6.1ascii_art类型根据 doc/JSON/JSON_INFO.mdascii_art仅有两个字段字段说明id唯一 ID必须是一个连续单词必要时使用下划线连接picture字符串数组每个元素为图案的一行每行最多 41 列\需转义为\\才能正常显示仓库中的真实示例——现金卡图案data/json/ascii_art/generic_ascii.json{ type: ascii_art, id: cashcard, picture: [ , , , color_white╔═══════════════════╗, color_white║ ║, color_white║/color color_yellow╔═ ╔═╔═╗╔═║ ║/color color_white║, color_white║/color color_yellow║═ ┼ ║ ║═║╚╗║═║/color color_white║, color_white║/color color_yellow╚═ ╚═║ ║═╝║ ║/color color_white║, color_white║ ║, color_white║ VISA ║, color_white║ ║, color_white║ ║, color_white║ 555 993 55221 066 ║, color_white╚═══════════════════╝ ] }观察该示例可以掌握颜色标签的两种用法整行着色行首写color_white后跟整行内容如 color_white╔═══════════════════╗此行其余部分全部为白色局部着色用color_yellow…/color包裹片段如color_yellow╔═ ╔═╔═╗╔═║ ║/color在行内切换颜色。更精简的例子是 data/json/ascii_art/battery.json 中的电池图案例如三行的轻电池{ type: ascii_art, id: light_battery_cell, picture: [ color_yellow┌color_light_gray▬/color┐, ├color_whiteL/color┤, color_light_gray└─┘ ] }可以看到图案混合了框线字符┌ ┐ ┤ └ ┘、方块字符▬与字母L、M、T并通过嵌套颜色标签实现逐字符着色。6.2body_graph类型身体图形是比静态配图更复杂的交互式资源。官方文档doc/JSON/JSON_INFO.md给出其完整字段字段说明type固定为body_graphid唯一标识该图形的字符串parent_bodypart可选该图形所属的父身体部位 ID仅用于在窗口副标题中显示当前部位fill_sym可选游戏内查看时用于填充图形所有区块的字符fill_color可选游戏内查看时未选中区块使用的颜色rows组成图形的字符串数组各字符可对应parts中的条目以构成图形区块空格会被忽略不参与填充mirror可选可替代rows。填写另一个 body_graph 的 ID将其水平翻转后作为本图的行例如hand_l镜像hand_rparts图形中符号与身体部位或子部位的映射列表其中parts的每个条目支持以下字段字段说明body_parts由该图形区块代表的body_partID 数组sub_body_parts由该图形区块代表的sub_body_partID 数组sym可选覆盖该区块片段的符号select_color可选选中该区块时使用的颜色nested_graph可选另一个 body_graph 的 ID玩家选中并确认该区块时界面切换到指定的嵌套图形分辨率硬限制40x20rows字段的分辨率上限为 40×20这是为了兼容 80×24 的终端显示。该限制同样有源码支撑src/bodygraph.cpp 中定义了BPGRAPH_MAXROWS 20与BPGRAPH_MAXCOLS 40界面布局也按这两个常量计算窗口尺寸src/bodygraph.cpp。这就是为什么身体图形的导出宽度上限是 40 而非 41。仓库中的真实示例——头部图形data/json/bodypart_graphs/head.json{ type: body_graph, id: head, parent_bodypart: head, fill_sym: #, fill_color: white, rows: [ 7777777777777 , 7777777777777777777 , // ... 共 20 行每行 40 列 ... b888888888888888b ], parts: { 1: { sub_body_parts: [ eyes_right ], select_color: red }, 2: { sub_body_parts: [ eyes_left ], select_color: red }, 3: { sub_body_parts: [ mouth_lips ], select_color: red }, // ... b: { sub_body_parts: [ head_nape ], select_color: red } } }绘制要点用不同的数字、字母等字符在rows中勾勒出不同区块如7代表头顶、1/2代表双眼、9/0代表双耳再在parts中将每个符号映射到对应的子身体部位。加载时若各行宽度不一致或fill_rows数量与rows不符游戏会通过debugmsg输出警告见 src/bodygraph.cpp。七、常见问题与避坑清单结合原文档与仓库源码将高频踩坑点汇总如下问题说明与对策导出颜色全部变白使用了 CDDA 调色板之外的颜色导出时统一转为白色请用[/]确认当前为 CDDA 调色板物品图案超宽被截断每行去标签后超过 41 字符即被截断并产生debugmsg将defaultImageWidth设为 41 从源头规避身体图形无法正常显示rows分辨率必须 ≤ 40×20且各行宽度应一致fill_rows若使用行数必须与rows一致导出文本无法粘贴Ctrl-j导出的是文本文件检查画布尺寸后再导出并确认粘贴到正确目录的 JSON 文件使用 1.50 及更早版本 REXPaint黄色与粉色导出异常请升级到 1.60 及以上图形符号与部位对不上确保parts中的键与rows中使用的字符一一对应符号只能是单个字符源码要求 UTF-8 宽度为 1见 src/bodygraph.cpp八、工作流总结完整的自定义 ASCII 美术接入流程如下准备环境下载 REXPaint ≥ 1.60安装 CDDA 调色板与 unifont 字体配置_config.xt配置画布物品配图将defaultImageWidth设为 41身体图形按 40×20 规划绘制仅使用 CDDA 调色板颜色善用椭圆、矩形、直线等工具必要时查阅 REXPaint 自带手册导出按Ctrl-j导出带颜色标签的文本文件接入 JSON物品配图粘贴到data/json/ascii_art/下对应文件的picture字段type: ascii_art配置id并在物品定义中通过picture_id引用见 doc/JSON/JSON_INFO.md身体图形粘贴到data/json/bodypart_graphs/下对应文件的rows字段并在parts中完成符号到身体部位的映射验证运行游戏确认图案尺寸、颜色与交互区块均符合预期检查日志中是否有debugmsg警告。本指南仅介绍了美术制作与数据接入环节如需深入了解 JSON 数据文件整体结构、物品定义字段或模组打包方式可继续阅读 doc/JSON/JSON_INFO.md、doc/JSON/ITEM.md 与 doc/MODDING.md。【免费下载链接】Cataclysm-DDACataclysm - Dark Days Ahead. A turn-based survival game set in a post-apocalyptic world.项目地址: https://gitcode.com/GitHub_Trending/ca/Cataclysm-DDA创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考