18 KiB
地形变异
一句话:格子的非雾变异(荆棘丛/藤蔓缠绕/岩浆/烬覆/落石/矿尘)与 Boss 图整图变异(贫矿脉),挖掘中可遭遇的地貌偏离 状态:已定稿;现行为 v1.3
设计目的
地形变异是一个定义层的框架:它允许给棋盘上的格子挂上"变异"标记,让某片格子在基础扫雷规则之外多一层玩家在挖掘中可遭遇的偏离。没有这个框架,关卡之间的差异只能靠雷的数量单调缩放,"每关解锁新元素"的推进感和越深越险的地貌变化都无处安放。
变异带来的行为改变发生在数据侧:格子只是多携带一条数据,读取到它的系统按数据行动,规则本体一个分支都不加。变异类型按各关地形背景定稿(第一关平原/密林基线:荆棘丛 + 藤蔓缠绕;第二关幽暗地域:岩浆 + 烬覆;第三关灰矮人矿城:落石 + 矿尘——幽暗地域最深层),机制全部经由「效果 / 触发 / 布置约束」三枚举声明——新增类型 = 清单加行 + 必要时扩充枚举词表,不改读取方。
系统范围
边界这样划:地形变异只管"变异是什么、以什么形式存在、遵守什么纪律"。变异怎么随战斗初始化布置归战斗结算的编排序;挖格、封印、连锁展开怎么执行归排雷玩法。
负责:
| 负责 | 说明 |
|---|---|
| 变异框架本体 | 变异类型清单的登记结构:要加一类变异,就在清单里加一行声明,不改代码 |
| 数据侧行为约定 | 变异是格子的只读数据,随图生灭;读取方按数据行动 |
| 零特判原则 | 禁止任何系统为变异改写扫雷规则本体——框架的承重约束(见核心规则) |
| 枚举抽象 | 每类变异以「效果(effect)/ 触发(trigger)/ 布置约束(placement)」三枚举声明机制;读取方按枚举路由,不按类型名分支 |
| 反制道具配套义务 | 已作废(2026-10-03 用户终裁)——反制道具本体归秘宝:同调位反制件=冒险周期常驻资源对抗关卡周期局部威胁,层级错配,设计废弃(详见下文 §反制道具配套义务 节注记) |
不负责:
| 不负责 | 归谁 |
|---|---|
| 布置的编排时点与算法执行(变异格赋予在棋盘设置顺序第 4 步) | 战斗结算(编排段执行面);布置参数数值归难度曲线与Boss |
| 挖格、封印、连锁展开的规则本体 | 排雷玩法 |
| 反制道具的效果、时效与定价 | 秘宝 |
| 数值表本体与读取机制 | 数据配置 |
| 界面呈现(数字遮蔽的渲染执行) | HUD 框架 |
| 教学口径 | 教学引导 |
在核心循环中的位置
棋盘生成 ──▶ 打开状态初始化(初始展开)──▶ 地图战斗资源格设置 ──▶ 变异格设置 ──▶ 挖掘阶段:读取方按数据行动
棋盘设置顺序(2026-09-19 用户拍板):生成棋盘 → 棋盘打开状态的初始化 → 战斗资源格的设置 → 变异格的设置。变异格赋予在最后一步,天然不落初始展开已开区——伤害型「只出现在未打开的格子」的布置约束由该顺序结构保障,不靠生成器回溯排除。变异自己不下达任何指令——挖格、封印、连锁展开仍按排雷玩法的规则执行,变异的全部影响都经由格子数据产生。
核心规则
变异框架与类型清单
每种变异是配置表里的一行具名声明。框架自身不含任何运行时逻辑——变异带来的行为改变,发生在"读取方读到什么数据、按什么约定行动"的交集里。要加一类变异,就在清单里加一行声明,而不是改代码;读取方(战斗结算 / 呈现层)按三枚举路由,不按类型名分支。
变异的生命周期是随图生灭:变异是棋盘格的只读属性,在战斗初始化末段布置、随棋盘实例存在;清图换图或战斗结束时随图消亡。布置之后生效期没有任何运行时写入,也没有跨图存续——新图重新布置。
清单现行登记七个类型,两轴 × 三关(region 六行)+ 首个整图型(global 一行):
| 类型名 | 作用域 | 效果 | 触发 | 布置约束 | 解锁 | 地形 | 伤害量 |
|---|---|---|---|---|---|---|---|
| 荆棘丛 | region | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 1 关 | dungeon | 1 |
| 藤蔓缠绕 | region | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 1 关 | dungeon | — |
| 岩浆 | region | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 2 关 | underdark | 2 |
| 烬覆 | region | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 2 关 | underdark | — |
| 落石 | region | 直伤(flat_damage) | 被打开即触发(on_open) | 只落未开格(closed_only) | 第 3 关 | deep_underdark | 3 |
| 矿尘 | region | 数字遮蔽(hide_number) | 打开且显示数字时(on_number_shown) | 任意格(any) | 第 3 关 | deep_underdark | — |
| 贫矿脉 | global | 资源面偏斜(resource_face) | 整图恒在(always) | 任意格(any,无格子布置域) | 第 2 关 | 通配(∅) | — |
机制口径:
- 伤害型:挖开变异格(含连锁揭示,chain 通道同口径)在轮末结算逐行兑现扣生命——地形后果同挖雷口径,非奖励、封印格直挖不作废;危险格恒不吃变异(双层叠罚污染逐行归因,首版排除)。
- 信息型:已开且显示数字时该格真实数字不呈现(呈现层读取遮蔽;挖掘规划被迫降级为盲区推理)。呈现层读取不回灌规则本体——模拟试玩走查询面、不经遮蔽,读数口径不受影响。
- 直伤量为加法核小整数(effect_value ∈ [1,9],行值 provisional 归难度曲线与Boss);每格携带单类型单 id。
- 变异格未开时无预告呈现(遭遇式;视觉标识归表现层升级批)。
候选池门控(框架级现行机制):一种变异要进入本关的布置候选,须同时满足三个条件——它的解锁关号不大于当前关卡序号(直接整数比较)、它声明的地形(board_types)与本地形有交集(声明为空集等于通配)、且节点身份匹配(scope=global 行仅 Boss/精英节点入池,普通战斗节点静默跳过;elite 系前向词位,现行零表行)。候选池为空是合法状态:静默布置一张无变异的普通图,不返回错误、不警告。门控谓词与取值域见本文候选池门控节与变异表字段定义。
全局作用域型(scope=global——Boss 图整图变异)
region 型变异是「格子级」的:布置段往候选格域写格子快照。global 型变异是「整图」的:整图一个类型生效,不落任何格子(棋盘持有整图变异记录,逐格变异记录恒空)。每图一型的整图推广(2026-10-04 用户裁决):普通图带 region 片,Boss/精英图带 global 型——两类图各自至多一型。
替换制:Boss/精英图命中全局型时,布置段跳过 region 布置(该图既无 region 片、也无格子级变异标记)——L2 完美 Boss 承伤已越 ≤50% 带,region 叠全局的叠加制火上浇油,不采纳。兜底回落:Boss/精英图的全局候选池为空时(含第 1 关 Boss 解锁门控未达=免疫,第 1 关是过滤器不是墙的教学保护)回落 region 布置(保守向后兼容,防配置缺行静默裸奔——provisional)。
恒定制:第 2/3 关 Boss 图 100% 带一型(非掷定结果——配置事实;全局取用确定性,不消费布置随机流=零取号合法态)。首发型=贫矿脉(skewed_veins):资源面偏斜(resource_face)——整图修正资源摇号分布,不动任何格子数据、不动生成端:进攻族(增伤/爆裂/穿刺/奥术)权重等比上浮,生存族(回血/护甲)权重按 effect_value% 下调,白名单三行(削弱/GP/行动点)恒不动,下调量按进攻族原权重比例重分配、正向池合计恒 77。玩家体验=回复与护甲类资源出现频率下降、攻击类资源出现频率上升(生存资源变薄、进攻资源变肥),玩家转向用进攻续命的主动策略——不是纯挨打。第 2/3 关两关同型(关间台阶由第 3 关既有新内容满足)。清图槽(clear_default/clear_blast)是独立池,不受偏斜影响。资源投影的执行面(摇号前权重合成、合成序=图级先件级后)归地图战斗资源。
三层预告(整图语义=规则级偏离,藏着等于暗改规则——区别于 region 遭遇式口径):①开战横幅一行(整图变异非空时显示)②HUD 常驻角标(战斗全程可见防中局遗忘,空态隐藏)③帮助手册一行(零交互教学)。呈现承载归 HUD 框架。
零特判原则(承重约束)
变异禁止改写扫雷规则本体:挖格、封印、连锁展开的判定与执行不增加任何变异分支,代码里不允许出现"这格带某变异所以就……"。这是框架的承重约束——它保证每加一类变异都不需要回头修改规则本体,玩家面对的也始终是同一套扫雷规则,而不是一套到处开洞的例外。
交互全部走数据侧:规则本体只读取格子数据并按数据行动,变异的全部影响经由数据与读取方之间的约定产生(伤害型由战斗结算兑付、信息型由呈现层遮蔽)。若未来某类变异的机制确实需要规则本体做出区分,那是一次同时修订排雷玩法与本文的正式变更,不是框架默认允许的能力。
布置段(战斗初始化第 4 步)
变异在战斗初始化末段布置:初始展开完成、地图战斗资源格设置之后,由战斗结算的编排段执行。候选池非空时从池内均匀选一类型,按布置参数生长连通片写入格子快照:
- 数量 = round(候选池格数 × percent_of_cells / 100) + (关卡序号 − 1) × per_level_bonus(两参数现行值读变异表——百分比的基数是候选池格数而非总格数:初始展开通常占全板过半,按总格数取数会使变异在剩余可挖格中的实际密度远超配置值(2026-09-21 用户拍板基数修正);percent 承载"占可挖格比例",关卡递增由 per_level_bonus 绝对格数承载"越深越险";provisional 归难度曲线与Boss)。
- 形状 = 全连通生长(8 邻),单片格数落在 [pack_min, pack_max] 内(两端读变异表;2026-09-19 用户拍板形状约束)。
- 候选格域 = 安全格 − 初始展开区,且排除危险格。
- 布置取数走专用随机流(variant_place,一板恰一 scope),换图/轮内刷新图各取号一次,确定性可复放。
- 生成器管线不布置变异(产物恒零变异格)——布置域的"未开"语义由设置顺序保障。
- 全局作用域型决议:Boss/精英图的全局型在装板序内前置于资源格设置之前决议(图级偏斜旋钮须在资源摇号前定型;全局门控与板无关,确定性取用不消费 variant_place 流)——命中即写整图字段并跳过本步的 region 布置(替换制);未命中则本步按上列规则原样执行(含兜底回落)。普通图路径零改动。
反制道具配套义务
【已作废——2026-10-03 用户终裁】 反制道具不再作为变异的配套义务:"反制"作为道具的一个维度,由秘宝的五维度框架承接,效果、时效与定价归秘宝定稿;类型行 counter_items 字段位已预留。
终裁理由(2026-10-03):同调目录(局外装配、伴随整局、稀缺槽位)对抗按关绑定的局部威胁(unlock_level 关绑定)属层级错配——「拿冒险循环的东西对抗关卡循环」,等同做一个只对第三关生效的道具,其余关卡全部用不上;且关卡序列与变异分布固定,装配时信息完备,反制选牌退化为查表必带清单,坍缩随机构筑多样性。
处置:①counter_items 字段保留恒空(合法态),承载形态待双层 BD 调研仲裁后重定——变异应对若做,只挂局内、贴近威胁出现的决策点;②变异=受控纯税现状维持,不再以反制道具为唯一兑现路径。
依赖与输出
依赖面很窄:上游只有数据承载与布置执行位,下游是对读取方与配套道具的义务声明。这张表同时是删除概念时的影响面清单。
| 方向 | 系统 | 接口要点 |
|---|---|---|
| 上游 | 数据配置 | 变异类型清单的表结构承载与统一读取;本系统是清单内容的回填责任方 |
| 上游 | 战斗结算 | 布置段的编排执行位(棋盘设置顺序第 4 步)+ 伤害型兑付面(轮末结算逐行兑现) |
| 下游 | 排雷玩法 | 零特判义务的承接方:执行逻辑不按变异分支,只按格子数据行动 |
| 下游 | 秘宝 | 五维度框架"反制"维度的承接方——配套义务已作废(2026-10-03 终裁),维度承载待双层 BD 调研重定 |
| 相邻 | 行动经济 | "地形成本修饰"价目钩子(不同格子不同价)暂缓启用,待变异类型扩展(见该文档 P1/P2 后置) |
P0 最小闭环
首批类型已定稿,P0 空清单口径降为候选池空白的合法态描述:
- 候选池为空是合法状态(如门控双闸都筛空):配置加载零错误、零警告,该图行为与不存在本系统时完全一致。
- 框架就位指清单的登记结构与读取通道可用,向清单加入一行类型即应生效、不需要改动代码(枚举词表内)。
P1 / P2 后置
| 优先级 | 内容 | 后置原因 |
|---|---|---|
| 调研前置 | 反制路径重定(counter_items 回填义务已作废) | 2026-10-03 用户终裁:同调位反制件=层级错配失败设计,义务作废;变异应对是否以局内形态补入,待双层 BD 调研仲裁后重新立项 |
| 全局作用域变异(精英/Boss 图整图生效的变异形态) | 现行型=贫矿脉(资源面·微贫向偏斜,替换制/恒定制/L1 Boss 免疫/三层预告);裁决全录见 git 提交史;带 A 杠杆注册全局难度批(Beta 阶段,未排期)读数只测不判;精英图留词表前向位(现行零表行) | |
| P2 | "地形成本修饰"价目钩子启用 | 由行动经济持有;启用须随变异类型扩展,与行动经济重议按格定价的接口 |
| P2 | 变异解锁节奏复核 | "每关至少引入一个新元素"的推进节奏,随难度曲线与Boss定稿复核 |
| P2 | 变异格视觉标识与预告呈现 | 首批为遭遇式(未开无预告);标识位随表现层升级批 |
调参表
| 参数 | 取值域 | 归属 |
|---|---|---|
| 布置数量基数 percent_of_cells | percent [0, 50](候选池格数百分比,2026-09-21 基数修正);现行值读 variation.tres 表头 |
难度曲线与Boss(provisional) |
| 关卡递增 per_level_bonus | int [0, 9] 格/关;现行值读 variation.tres 表头 |
难度曲线与Boss(provisional) |
| 连通片下限 pack_min | int [1, pack_max];现行值读 variation.tres 表头 |
形状约束:单片至少几格连通成片,与 pack_max 合为成包尺寸域 |
| 连通片上限 pack_max | int [pack_min, 9];现行值读 variation.tres 表头 |
定稿值(2026-09-19 用户拍板形状约束) |
| 直伤量 effect_value | 荆棘丛 1 / 岩浆 2 / 落石 3 | 难度曲线与Boss(provisional,加法核 [1,9]) |
| 资源面偏斜 effect_value | 贫矿脉 30(生存族下调百分比;0=中性 off 锚;总期望微降 3-5% 为 provisional 设计目标——精确方向与幅度归读数批判读只测不判) | 难度曲线与Boss(provisional,域 [0,50]) |
变异表字段集的现行口径(字段定义归变异表,条目归属即表行):标识 / 玩家可见名 / 解锁关号 / 作用域 / 效果 / 效果量 / 触发 / 布置约束 / 地形(board_types)/ 反制道具绑定(counter_items,恒空保留——承载形态待双层 BD 调研重定)。
验收标准
- 候选池空合法:门控筛空(池空或候选域碎片化不足)时静默零布置,配置加载零错误、零警告。
- 零特判(负验收):排雷玩法的挖格、封印、连锁展开执行路径中不存在任何按变异类型分支的代码;读取方按 effect/trigger/placement 枚举路由。
- 数据生命周期:格子携带的变异是只读数据——战斗初始化末段布置、随图消亡,布置后零运行时写入,无跨图存续;生成器产物恒零变异格。
- 布置域:变异格全在初始展开区外(伤害型 closed_only 由设置顺序结构保障)且不吃危险格;每图至多一种类型;连通片格数落在 [pack_min, pack_max] 内。
- 配套义务闭环(已作废,2026-10-03 终裁):反制兑现不作为验收条目;counter_items 恒空为合法态。
- 全局作用域型:替换制生效——Boss 图恰一行整图变异+零格子级变异标记;普通图 region 路径逐位不变;off 态零扰动(effect_value=0 资源摇号与无偏斜逐位相同,白名单三行任何状态逐位不动);L1 Boss 零全局变异;Boss 图全局池空回落 region;全局取用零取号(确定性,不消费布置随机流);资源面偏斜正向池合计恒 77。