起源引擎漏洞与技巧
起源引擎已存在十多年。《半条命》甚至诞生于上个千年。毫无疑问,存在这么久的游戏通常会有大量已知漏洞、技巧和玩法,任何速通视频都能展示玩家如何利用它们(不过大多数速通玩家使用游戏旧版本,因为Valve已修复许多漏洞)。如果你是循规蹈矩的模组制作者/地图作者,不妨了解下聪明(或愚蠢)的玩家可能用来破坏你的地图、逃脱/被困或跳过游戏内容的各种方法。所有地图作者都可能对此感兴趣,因为某些漏洞能让玩家从新视角观察地图,这可能意味着你需要做更多视觉优化工作。

引擎通用问题
- 通过快速连按跳跃和使用键,可以利用物理物体攀爬墙壁,甚至在空中飞行
演示视频 《传送门2 》通过增加+use 指令的输入间隔时间并使玩家持有的物体变为非固体修复了此问题。
- 水能消除坠落伤害
如果无法修改代码,可能的解决方案是使用trigger_hurt 。具体伤害值取决于坠落高度和水深。除非坠落高度会立即致命,否则使用OnHurt
输出在伤害玩家一次后禁用触发器,并添加必要逻辑在玩家通过安全路线接近水域时禁用触发器,当玩家到达危险高度时重新启用。如你所想,当涉及多个高度层级或水域时,这会很快变得复杂。
支持VScript 的起源引擎版本可以直接根据玩家Z轴速度控制触发器伤害。
对于编码者,可以打开gamemovement.cpp找到CheckFalling()
定义处:
if ( player->GetWaterLevel() > 0 ) { // 他们落入了水中 }
完全删除这段代码,同时移除下面的else语句(只移除else{}
,保留其中的代码)。
- 在许多起源引擎游戏中,启用作弊后禁用,再保存加载游戏仍可获得成就
如果在启用sv_cheats后保存游戏(可选使用任何作弊命令/cvar),然后禁用sv_cheats再保存加载游戏,仍可获得成就。
半条命2
载具

- 用重力枪 以特定方式击打,越野车和气垫船能将玩家弹到极高位置,有时超过蚁狮最大跳跃高度,极少数情况下能从Lost Coast 海平面直接弹到地图顶部的升降机处。
当地图设计为垂直结构时,这可能成为严重问题,也可能让玩家跳过某些障碍。从这种高度坠落会造成严重伤害,但上文提到水能消除伤害。通过坠落前进入载具或以特定角度落在斜坡上也能减轻伤害。解决方案包括设计地图时考虑此因素,或通过修改scripts\vehicles\
中的质量值降低载具弹性(这也会影响加速和跳跃能力,不要增加过多)。

- 气垫船 的形状使其成为快速有效的斜坡
最佳解决方案是设计地图时考虑这个高度(约200单位,包括跳跃和蹲伏)。也可以使用玩家碰撞体积,但要注意这可能影响真实感。
- 气垫船重量较轻。很容易用重力枪推到无法触及的位置
载具无法触及会导致玩家必须从之前存档重新开始,或可能重玩整个章节。在scripts\vehicles\
中增加气垫船质量。也可以使用碰撞刷,但要注意真实感。聪明的玩家还可能在击打气垫船后立即按使用键进入,这会给他们带来巨大优势。
- 站在大型载具上可以智取某些NPCs ,特别是那些不能使用子弹或其他抛射物的NPC
NPC不会将载具视为可站立的地面,意味着玩家处于它们无法触及的位置。

- 当玩家进入载具时,他们实际上不是像看起来那样滑入载具。他们是从进入前的位置传送到驾驶座/最终摄像机目的地。这允许跳过位置不当的触发器,也称为进入剪辑。
除非你的触发器需要非常特定的尺寸,否则只需将其放大或让它也能检测载具。只有在绝对必要时才修改代码。
武器
- 武器产生的爆炸力可以推动玩家。(类似《军团要塞2 》中的火箭跳)
爆炸力主要是水平方向而非垂直方向。此外,足以显著推动玩家的爆炸也会对玩家造成很大伤害,因此无法重复使用。设计地图时要考虑可能的距离。也可以使用玩家碰撞体积,但要注意真实感。
- 玩家可以站在物理物体上,用重力枪 向下击打它们,从而被向上推动
可能可以通过让移动物体在玩家站立时忽略重力枪来防止。如果无法修改代码,仔细的地图设计是次优选择。
另一个变体,使用AR2 次要火力发射玩家站立的物体。也可以水平实现。
并非所有道具都同样可利用。以下是已知特别适合助推的道具:
- props_c17\furniturecouch001a
- props_c17\furnitureshelf001a
- props_c17\furniturewashingmachine001a
- props_c17\trappropeller_blade
- props_c17\tv_monitor01
- props_interiors\radiator01a
- props_junk\pushcart01a
- props_lab\citizenradio
- props_lab\filecabinet02
- props_wasteland\prison_bedframe001a
- props_wasteland\prison_bedframe001b
- props_vehicles\tire001a_tractor
- 可以通过QPhysics NPC(能用重力枪移动的)来跨越中小型间隙,如果玩家站在上面并在击打NPC的同时跳跃。
这只涉及头蟹和蚁狮。可能可以通过类似上个问题的方法修复,让NPC在玩家站立时忽略重力枪。如果无法修改代码,仔细的地图设计是次优选择。更好的解决方案可能是简单地让玩家不从站立的NPC获得惯性。

- 三脚机甲、直升机和炮艇等NPC不仅会被火箭伤害。玩家在不合时宜的时间地点杀死它们可能导致意外后果。
这其实不是漏洞,Valve有意为之。以下都可以用来伤害大型敌人:
《半条命2》中通常不会遇到此问题,因为Valve尽可能考虑到了,但想象这可能如何影响d3_c17_12b 和d3_c17_13 的游戏性,其中进程严重依赖三脚机甲NPC死亡和使用脚本炮弹。如果Valve没考虑玩家在到达预定位置前杀死三脚机甲的可能性,玩家可能会被困。
避免此问题的最佳方法是确保玩家没有这些机制(可能通过稀缺性),或简单地考虑这种可能性。
水体
- 某些海岸地图的水中有甜区,蚁狮会溺水而无法到达,但水蛭还在更远的水中。
这是17号公路 和沙阱 中多次出现的问题。这让玩家可以轻松不使用载具旅行且几乎不受伤害。要防止这点,保持所有水深小于32单位(蚁狮能移动的最大水深),并将trigger_waterydeath 延伸到比这更深的所有区域。
此解决方案并非100%有效。蚁狮通常不会直接冲向玩家,也不会为移动或蹲伏目标改变轨迹。32单位对水蛭来说也是异常浅的水。
- 位置不当的trigger_waterydeath 可以被游过。
这是半条命2:消失的海岸 中的问题。在此地图中,触发器略低于水面。如果玩家在水面跳跃和蹲伏,可以在受到伤害前不断进出触发器,使玩家能进入不应进入的地图区域。
任何半条命2地图中都没有此问题,因为这些地图中的触发器实际上延伸至水面以上很远。
传送门系列
传送门
- 当传送门射击到当前已有其他传送门的位置时,第一个传送门通常会放置在那个传送门旁边。这甚至能穿过玻璃等屏障发生。
在屏障上放置func_portal_bumper 防止传送门弹跳。也可以尝试使用func_noportal_volume 和sv_portal_placement_never_bump 1。
- 在《传送门1》中,传送门射击需要时间飞行。在这段时间内,玩家可以在射击到达另一面墙前穿过传送门。
演示视频 《传送门2》通过使传送门在枪发射时立即放置修复了此问题。传送门2有类似问题,但需要更精确的计时,且穿过传送门时摄像机方向必须改变。
凝胶
另见:凝胶移动性
除了使方块变为非固体外,没有太多方法阻止这点。不过更好的谜题设计是推荐方案。无法简单地设置最大弹跳高度。
- 当玩家在加速凝胶 上蹲伏前进然后站起时,会立即加速到最大凝胶速度。
这种情况很少成为问题。尝试以下方案:
- 控制台命令
sv_speed_paint_max
。不过也会影响正常方式达到的最大凝胶速度。Requires restart to take effect. - 重新设计地图使速度不成问题。
- 当玩家在加速凝胶上奔跑时投掷方块,方块的初速度会大幅增加,包括垂直方向。
这意味着他们可以把方块扔得非常高。如果这成为问题,仔细的地图设计是解决方案。
牵引光束
- 由于某些蹲伏状态问题,牵引光束 可被用来欺骗游戏给予玩家类似穿墙的状态。
这个错误状态可以跨地图加载保留。更多信息见此页面。