Cataclysm-DDA 自定义 ASCII 美术制作指南:从 REXPaint 绘制到 JSON 集成全流程
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),仅供参考

相关新闻

Mako 模板引擎语法完全指南:表达式、控制结构与标签体系(Lynx 仓库视角)

Mako 模板引擎语法完全指南:表达式、控制结构与标签体系(Lynx 仓库视角)

Mako 模板引擎语法完全指南:表达式、控制结构与标签体系(Lynx 仓库视角) 【免费下载链接】lynx Empower the Web community and invite more to build across platforms. 项目地址: https://gitcode.com/GitHub_Trending/lynx10/lynx …

2026/11/1 3:33:08 阅读更多 →
二手车租赁系统毕设实战:Java+Vue+SpringBoot全栈开发指南

二手车租赁系统毕设实战:Java+Vue+SpringBoot全栈开发指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/1 3:33:08 阅读更多 →
用macOS兼容补丁让老Mac装上新系统

用macOS兼容补丁让老Mac装上新系统

用macOS兼容补丁让老Mac装上新系统 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher OpenCore Legacy Patcher(下文简称 OCLP)是一个开源…

2026/11/1 5:33:42 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/8 1:19:03 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/7 12:08:40 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/6 22:01:11 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/6 22:01:11 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/7 12:08:40 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/8 1:23:14 阅读更多 →

日新闻

周新闻

月新闻