下载 App
开发者日志2
1 小时前
开发日志 · GameJam:把"策略"从数值里搬出来
这篇讲我们这个项目的核心设计:地形与元素反应怎么挂钩,为什么这样设计能产生涌现,以及第一关现在的完成度。


一、我们想做的不是"最优解计算器"
常规塔防本质是一个最优化问题:给定预算和地形,算出柱子插在哪收益最大。玩家的操作和战斗结果之间是脱钩的——你不需要理解战场,只需要计算战场。
我们想做的是反过来的东西:让玩家的一个决定,在几秒后变成一个他自己也没预料到的局面。
要做到这件事,光加随机性没用,光堆系统也没用。它需要一种具体的性质。
二、涌现:我们的设计验收标准
涌现(emergence)是个借来的词——整体的行为无法从任何单条规则里预测出来,它只在规则相互作用时才出现。
我们把它当成了验收标准:不去设计"涌现的结果",而是只写局部规则,然后看会不会自己长出东西。
关键决策:把元素劈成两半
我们做的第一件、也是最重要的一个决定是:
塔本身没有任何元素。元素的唯一来源是地形。
塔只是一枚"催化器"——它本身是无色的,攻击时读取自己挂的符文,把这个元素打出去。而怪物从地形上走过时,会挂上脚下的元素。
于是反应的唯一触发条件是:异色相遇。
这个设计立刻带来一个反直觉的结果:
玩家真正在布置的不是塔,是地表。
塔是杠杆,地形是场地。同一座雷塔,放在水边是"高压电鱼",放在草边是"召草兵自爆",放在火边是"超载"。塔没变,行为完全变了。
而这个差异不需要任何专用代码——它是从"地形有元素、塔有元素、相遇则反应"这三条规则里自己长出来的。
三、六种反应 = 六种不同的"场"
4 种元素两两组合 = 6 种反应。我们刻意让它们在功能上互不重叠,因为组合的价值来自于差异:
| 组合 | 反应 | 它做的事 |
| 火 + 水 | 蒸发 | 零伤害,换 10 秒内所有伤害 ×1.5 —— 增伤不是输出 |
| 火 + 草 | 点燃 | 持续伤害,且在草地上蔓延、留下火坑 |
| 火 + 雷 | 超载 | 直接砍掉最大生命的 8% —— 无视一切防御 |
| 水 + 草 | 缠绕 | 减速 → 定身 → 完全锁死,三段递进 |
| 水 + 雷 | 导电 | 劈向最近的 3 只,伤害递减 —— 怪越挤越强 |
| 草 + 雷 | 腐化 | 召唤草兵,死亡爆炸且不区分敌我 |
注意每一行的动词都不一样:有的是增伤,有的是持续伤害,有的是斩杀,有的是控制,有的是扩散,有的是召唤。
这不是六个伤害数字,是六种不同的因果。
四、涌现的三层来源
当"地形 + 塔"这个结构立起来之后,涌现有了三个可以叠加的来源:
层一 · 乘算 —— 多块地形串成路径
路径被切成 6 块,每块可以独立标注元素。所以你可以让一只怪走一趟吃三种反应:
水块(触发蒸发易伤)→ 草块(易伤期间被点燃)→ 雷块(超载砍血)
伤害不是相加的,是乘算的。玩家在设计的是一条"效果流水线"。
层二 · 时序 —— 顺序本身就是策略
因为反应是消耗品(触发后怪身上的元素就没了),所以先后顺序有意义:
先用蒸发挂易伤 → 再用点燃持续掉血 → 最后超载收尾
同样两个元素,顺序不同结果完全不同。这不是数值差异,是结构差异。
层三 · 密度 —— 地形决定谁扎堆
导电链只劈最近的 3 只,腐化每命中一只怪就多召一个草兵。这两种反应的强度取决于怪群的密度。
而密度不是随机的——怪在哪个位置停留、往哪涌,是由地形和塔决定的。
于是地形布置变成了"我在设计什么样的怪群形态"。













