Cataclysm-DDA 模组实战解析:Backrooms 全室内世界生成转换模组
2026/9/15 13:40:00 网站建设 项目流程

Cataclysm-DDA 模组实战解析:Backrooms 全室内世界生成转换模组

【免费下载链接】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: Dark Days Ahead(以下简称 CDDA)官方仓库内置的 Backrooms 模组展开,系统讲解其"全室内世界生成(indoor-only worldgen conversion)"的设计思路、安装启动流程、背后的 JSON 数据实现原理以及前期的生存策略。读者读完可以掌握如何启用并体验该模组、理解 CDDA 总转换(total_conversion)类模组通过区域配置、场景黑名单与地图额外事件(map extra)改造整个世界的完整链路,并能直接对照仓库源码验证每一步实现。

模组是什么:一个无限延伸的室内世界

Backrooms("后室")是一类源自网络都市传说的恐怖场景设定:无限蔓延的褪色黄地毯、嗡嗡作响的荧光灯与单调乏味的室内装潢。这个模组把整套设定搬进了 CDDA,将游戏默认的开放世界彻底替换为"无限蜿蜒的后室":

没有城市、没有农场、没有森林、没有荒野。只有永无止境的昏暗室内空间、空荡荡的会议室与荒凉的休息室。

从 data/mods/Backrooms/README.md 的定位来看,这是一次完整的地图/世界生成总转换:原版世界里你熟悉的每一个要素(河流、森林、道路、城市)都被移除,取而代之的是由程序化生成的室内房间迷宫。

启动前必读:必须选择 "Backrooms" 场景

模组 README 开篇即给出最关键的警告:

创建角色时必须选择 "Backrooms" 场景!

原因很直接:后室已是整个世界的唯一区域,任何尝试从其他地点开始游戏的角色都将无法生成(spawn 失败)。这一约束不仅在 README 中强调,也在数据层被强制实现——见 data/mods/Backrooms/scenarios.json:

{ "type": "SCENARIO_BLACKLIST", "subtype": "whitelist", "scenarios": [ "backroom_dweller", "backroom_dweller_starternpc" ] }

这是一个"白名单式"场景黑名单:除backroom_dweller(Backrooms)与backroom_dweller_starternpc(Backrooms NPC EDITION)之外的所有场景都被禁用。两个场景的points均为 0,allowed_locs都指向唯一的出生点sloc_backrooms,其terrainbackfloorchamber(后室大厅)。

同时,模组的modinfo.json也明确标注"Play Now! (Default Scenario) is not supported",进一步提示玩家默认快速开局方式不可用,必须手动选择场景。

模组元信息与兼容性

在 data/mods/Backrooms/modinfo.json 中可以看到模组的完整元数据:

{ "type": "MOD_INFO", "id": "backrooms", "name": "The Backrooms", "authors": [ "TGW" ], "maintainers": [ "onura46" ], "category": "total_conversion", "conflicts": [ "aftershock_exoplanet", "desertpack", "tropicata", "classic_zombies", "innawood", "Isolation_Protocol", "no_hope" ], "dependencies": [ "dda" ], "version": "0.1" }

值得关注的信息点:

  • 分类total_conversion(总转换),与其它同样替换世界生成的模组天然冲突,因此声明了一组conflicts,包括废土化开局模组 Innawood、经典僵尸 Classic Zombies 等;
  • 依赖:仅依赖原版dda,不引入任何第三方依赖;
  • 外部选项:模组通过EXTERNAL_OPTIONDEFAULT_REGION指向default_backrooms,从启动层面强制将默认区域切换为后室区域。

关于兼容性,README 的回答是"应该没问题":除要求访问世界生成并依赖 "Backrooms" 场景外,它可与大多数模组共存。例如开启 Magiclysm 魔法模组后,后室的书架上甚至能刷出魔法书。

世界生成原理:区域配置如何"抹掉"整个世界

作为总转换模组,Backrooms 的核心改造落在区域配置上,集中在 data/mods/Backrooms/region_settings/region_settings/regional_map_settings.json。这份文件是理解"室内世界"如何形成的钥匙。

1. 移除一切自然地貌

区域主体配置default_backrooms"copy-from": "default"继承原版区域,然后把所有外部地貌字段置空:

"rivers": null, "lakes": null, "ocean": null, "forests": null, "ravines": null, "forest_trails": null, "highways": null, "cities": "no_cities", "neighbor_connections": false, "place_roads": false

河流、湖泊、海洋、森林、峡谷、林间小径、公路全部被清空,城市使用no_cities,相邻区域连接与道路铺设一并关闭。世界从此只剩一种"地形"。

2. 默认地图块(default_oter)铺满大厅

紧接着,default_oter用 21 格数组定义了每一块大地图(overmap tile)的默认类型,其中 14 格是backfloorchamber_north(后室大厅),其余为backroom_border(边界墙)。从源码结构可以推断:这相当于把整个世界网格全部填成"后室大厅"这种 overmap terrain,配合 7 格宽的backroom_border形成边界墙,杜绝任何越界"空地图"。

3. 地形/家具替换表:把荒野变成地毯

region_settings_terrain_furniture通过一组region_terrain_furniture条目,把原版世界生成时会放置的野外地形全部替换为后室室内元素:

原版地形替换结果权重
t_region_groundcovert_carpet_backrooms(褪色地毯)500
同上t_carpet_backrooms_light(带顶灯地毯)1
t_region_shrubt_backroom_wall/ 亮地毯1:1
t_region_treet_wall_b1
t_region_groundcover_barrent_carpet_red(红地毯,红房间用)1
f_region_flowerf_rack_coat/f_sign_warning/f_sign1:1:1

甚至连"森林"区域都被替换成墙与地毯——forest_composition指向空的default_backrooms"biomes": []),意味着原本的森林生物群系直接不存在。

4. 室内化天气与禁令

weather_generator"copy-from": "default"为基础做了室内化调整:base_temperature6.5℃、base_humidity70%、base_wind3.4,且base_wind_season_variation为 0(无季节风变化),并把early_portal_stormportal_storm加入天气黑名单。最后通过feature_flag_settings的白名单BACKROOMS"whitelist": [ "BACKROOMS" ]配合,确保只有带BACKROOMS标记的内容(楼梯、地图额外事件等)能在该区域生成。

场景与出生点:两种开局

data/mods/Backrooms/scenarios.json 提供了两种开局:

  • Backroomsbackroom_dweller):单人开局,0 点数,带LONE_START标记;
  • Backrooms (NPC EDITION)backroom_dweller_starternpc):同样 0 点数,但额外获得一名起始 NPC 同伴——README 未展开,但场景描述暗示这位同伴既能成为互相扶持的伙伴,也能在极端情况下成为"备用口粮"或帮你植入 CBM 义体的人选。

两者都从sloc_backrooms出生,起点地形为backfloorchamber。由于场景白名单的存在,创建角色界面只会列出这两个选项。

房间生成体系:从地图块到嵌套房间

大厅地图块的生成管线

data/mods/Backrooms/overmap_terrain.json 定义了backfloorchamber的 mapgen 逻辑,这是整个后室的"地基":

{ "type": "mapgen", "om_terrain": [ "backfloorchamber" ], "object": { "fill_ter": "t_carpet_backrooms", "place_nested": [ { "chunks": [ [ "mx_backrooms_whole", 100 ] ], "x": 0, "y": 0 }, { "chunks": [ [ "null", 250 ], [ "mx_backroom_big_empty", 50 ], [ "mx_backroom_big_generic", 50 ], [ "mx_backroom_big_common", 100 ], [ "mx_backroom_big_storage", 25 ], [ "mx_backroom_big_breakroom", 25 ], [ "mx_backroom_big_bathroom", 20 ] ], "x": [ 0, 13 ], "y": [ 0, 13 ], "repeat": [ 0, 2 ] }, { "chunks": [ [ "null", 250 ], [ "mx_backroom_small_empty", 50 ], [ "mx_backroom_small_generic", 50 ], [ "mx_backroom_small_common", 100 ], [ "mx_backroom_small_storage", 25 ], [ "mx_backroom_small_breakroom", 25 ], [ "mx_backroom_small_bathroom", 20 ] ], "x": [ 0, 18 ], "y": [ 0, 18 ], "repeat": [ 0, 3 ] } ] } }

生成时先以t_carpet_backrooms填底,然后必定嵌入一块 24×24 的"整体房间"(mx_backrooms_whole),再随机铺入若干大房间(mx_backroom_big_*,权重最高的是 common 100)与小房间(mx_backroom_small_*)。"null"的高权重(250)意味着大量格子留空,交由其他机制填充。backroom_border的 mapgen 则简单地把整个地图块填成t_backroom_wall_border

字符画式调色板

data/mods/Backrooms/palettes.json 中的backrooms_palette是理解房间布局的核心——地图块用 ASCII 字符描述结构,调色板把这些字符翻译成具体地形/家具/物品。几个关键映射:

  • " "(空格):95% 概率为普通地毯t_carpet_backrooms,5% 为带顶灯的亮地毯(light_emitted: 120,后室的"灯"由此而来);
  • -t_backroom_wall(可砸穿的褪色墙);=:灰色墙;
  • D:75% 关着的门 / 25% 开着的门;d?在门与墙之间按概率摇摆;
  • Q/q:墙与地毯的混合(墙角/墙面残影);
  • 家具符号:a椅子、c/e桌子、f办公桌、t书架、m衣帽架、n垃圾桶、A纸板箱等;
  • </>:楼梯;
  • 空格格子在物品表中以极低概率(1/20000)刷出"后室神器"(backrooms_artifacts)。

此外,data/mods/Backrooms/rooms/rooms_whole.json 提供了 6 套不同的 24×24 整体房间 ASCII 布局变体,均带ERASE_ALL_BEFORE_PLACING_TERRAIN标记,保证整块区域先被清空再绘制。

房间类型与补给分布

rooms/目录下按功能拆分出rooms_common.jsonrooms_bathroom.jsonrooms_breakroom.jsonrooms_storage.jsonrooms_special.jsonrooms_empty.jsonrooms_generic.json以及微缩版(rooms_micro_*)系列,对应 README 中提到的"供应室、卫生间、休息室柜台、板条箱"等房间类别。

补给的具体构成由 data/mods/Backrooms/itemgroups.json 控制。例如普通板条箱backrooms_cratedistribution分发:mischw(杂物)概率 100、home_hw(家用五金)150、hardware_plumbing/mechanics/tools_home各 75、electronics25、weapons仅 10、robots10、ammo_parts10;而稀有板条箱backrooms_crate_rare则大幅提高军事价值:ammo_common_boxed300、mags_common130、vault/weapons各 50、cop_armory20、bionics_common25,还包含grenadesmutagen_kits(诱变剂套件)与各种枪械组。物品分布差异正是 README 所说"平衡性仍需大量试玩调整"的对象。

红房间与快速旅行:waycircle / waystone 传送网

README 明确指出:后室里基本没有交通工具的用武之地,红房间(Red Rooms)就是快速旅行系统。其实现横跨 data/mods/Backrooms/teleport.json、data/mods/Backrooms/rooms/rooms_teleporter.json 与 data/mods/Backrooms/map_extras.json。

使用流程

  1. 在红房间中央找到waycircle(仪式传送环)——furniture_terrain.json 中同名家具带TRANSLOCATORMOUNTABLE标记,examine_actiontranslocator(传送定位器);
  2. 检查(examine)waycircle 并给它命名,完成"链接";
  3. 激活旁边的waystone(传送石)——README 特别强调"不需要捡起来,而且真的不应该捡";
  4. 即可传送到任何其他已激活的红房间。

为什么"不应该捡"waystone

waystone 的物品定义解释了原因:"weight": "2000000 g""volume": "1000000 ml"——重达 2 吨、体积 100 万毫升,物理上就"比看起来重得多",且没有ALLOWS_REMOTE_USE之外的可携带支持,根本无法装进任何容器或正常搬运。README 原文也戏谑地写道"最好在打算放置它的地方制作它"。它通过use_action施放prim_warp法术:effecttranslocate(传送)、base_casting_time9000(约 9 秒施法)、能量源为STAMINA(体力)、valid_targets覆盖自身/友军/敌人。

红房间的地图生成

mx_teleporter_nodeupdate_mapgen形式在 data/mods/Backrooms/rooms/rooms_teleporter.json 中实现:中心X处放置f_waycirclex处 100% 生成a_waystone物品组(内含 waystone),周围一圈t_carpet_red红地毯与t_wall_r墙体,构成显眼的红色传送室。而backrooms地图额外事件集合中mx_teleporter_node权重高达 5000,是所有地图额外事件里最容易出现的,保证了后室中红房间的相对常见性。

地图额外事件:后室里的"惊喜"

README 专门解释了一个反直觉的设计:地图额外事件在后室中依然存在,这是作者有意为之的"多样性"考量。你可能会遇到蜘蛛、黄蜂、狗、弹坑、传送门,甚至坠毁的直升机与天坑湖泊。

实现位于 data/mods/Backrooms/map_extras.json,并与区域配置中的map_extra_collection联动。区域级集合backroomschance为 30(即每块地图有 30% 概率触发一次额外事件),事件权重如下:

事件权重说明
mx_teleporter_node5000红房间
mx_casings/mx_corpses2500弹壳 / 尸体
mx_autodoc_room1250自动手术台房间
mx_collegekids1250大学生(尸体/痕迹)
mx_spider/mx_nest_dermatik_backrooms1000蜘蛛 / 虫巢
mx_science1000实验室痕迹
mx_crater/mx_nest_wasp_backrooms/mx_house_wasp/mx_pond/mx_military/mx_drugdeal/mx_supplydrop500弹坑 / 黄蜂巢 / 池塘 / 军事痕迹 / 毒品交易 / 空投
mx_portal/mx_portal_in150传送门
mx_helicopter50坠毁直升机
mx_jabberwock1Jabberwock 怪(极稀有)

多数事件通过"copy-from"复用原版事件并"extend"追加BACKROOMS标记、将min_max_zlevel限制在 [-3, 3](后室最深地下三层、最高地上三层),确保这些事件只在本模组区域内生效。

生存攻略:从 README 到源码验证

README 给出的前几分钟生存建议,几乎都能在源码中找到对应依据:

  1. 利用拐角卡视野(line of sight)t_backroom_wall等墙体带NO_SCENT(阻断气味)与WALL标记,且see_costfull_high,狭窄的室内走廊非常适合反复卡视野脱离战斗。

  2. 找一间带门的房间喘息:调色板中大量D/d门与高权重空房间(null250)保证了安全屋的存在。

  3. 拆椅子做武器:调色板把a/b映射为f_chairf_camp_chair等可拆家具——拆解出木板(plank),既可当钝器,也可在有刀具时削成 cudgel(短棍),是早期性价比最高的武器路线。

  4. 砸墙抄近路:后室墙壁就是薄石膏板!data/mods/Backrooms/furniture_terrain.json 中t_backroom_wallt_backroom_wall_graybash数据为str_min: 15, str_max: 45,砸穿后变为t_carpet_backrooms。与常规混凝土墙(通常需要 40+ 力量)相比,15~45 的力量需求意味着多数角色拿块木板或趁手钝器就能打通墙壁,用于破入封闭房间、制造捷径或绝境逃生。注意t_backroom_wall_border(边界墙)没有bash字段,从源码结构可以推断它是不可摧毁的——防止玩家从世界边界"凿墙逃出后室"。

  5. 善用红房间传送网:找到红房间后尽快命名 waycircle,把已探索区域串成传送网络,减少在迷宫中的长途跋涉。

现状与定位:可完整游玩的"整活"模组

README 的 FAQ 坦诚地回答了模组的定位与状态:

  • 功能状态:作者自述"应该是功能完整的形态——没有 bug、世界生成正常、大体按预期运作"。真正需要继续打磨的是物品与房间生成的平衡:供应室出现频率、卫生间是否过密、休息室柜台是否太慷慨、板条箱是否太抠门、枪支手雷是否过多、食物饮水是否不足——这些都需要大量试玩来校准。
  • 是否噱头模组:作者直言"是的,绝对是"。多数玩家可能很快就会腻——这与"纯荒野生存"挑战有相似的通病:缺乏中后期成长线、缺少高难度地点、区域间差异小、兴趣点远少于标准游戏。但如果你吃这一套,那就请尽情享受。
  • 创作动机:作者只是"被这个点子迷住了,又看到没人做过这种地图/世界生成的完全转换",于是动手实现。

垂直探索方面,data/mods/Backrooms/overmap_specials.json 定义了从 z=-3 到 z=3 六组楼梯特殊地点(backroom_stairs_z*),每组occurrences为 [15, 40] 且带BACKROOMS标记,让后室有了向更深楼层(更危险、更怪异)探索的空间层次。

结语:一份可对照源码学习的"最小总转换"范本

Backrooms 模组虽然定位为"整活",但它恰好是研究 CDDA 模组系统的最佳样本之一:从EXTERNAL_OPTION切换默认区域、region_settings清空自然地貌、default_oter铺满室内地图块、region_terrain_furniture做地形替换、SCENARIO_BLACKLIST白名单锁死开局,到嵌套 mapgen、字符调色板、地图额外事件权重表与传送法术联动——一条完整的总转换开发链路全部浓缩在这份模组里。对照 data/mods/Backrooms 目录下的 JSON 文件逐一阅读,可以快速建立起"CDDA 世界生成如何被模组重写"的完整认知。

【免费下载链接】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),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询