L4D地图制作注意事项

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)中文 (zh)Translate (Translate)

此页面包含与求生之路地图制作相关的大量笔记和不完整的文章。如果您在地图制作中发现并解决了一些问题,可以在这里补充一下,这样可以方便其他地图作者了解更多相关问题的内容。


本简体中文页面由 Gloria 汉化。

开场镜头

在第一个章节中,游戏使用了4个"info_survivor_position" 实体和4个"point_viewcontrol_survivor"实体来制造出“镜头拉近”的效果。尽管没有这8个实体也不会影响游戏正常运行,我们还是建议在发布地图之前,添加介绍镜头作为最后的完善。

  • logic_choreographed_scene
  • point_viewcontrol_multiplayer
  • point_viewcontrol_survivor
  • info_survivor_position
  • env_fade
  • Entity: logic_relay Name: relay_intro_start
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger director ForceSurvivourPosition   0.00 No
Io11.png OnTrigger director ReleaseSurvivourPosition   0.01 No

导演系统

求生之路使用“导演”,而不是固定的出生点,来放置敌人和物品。放置的位置和数量都是根据每名玩家当前的状态、数据、能力和位置决定的。

  • info_director
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnGameplayStart relay_intro_start Trigger   0.00 No

为感染者创建出生区域

导演会在玩家视线以外的区域生成感染者,因此一张高难度的地图往往有很多视线外的区域。有时候生成区域在玩家不可到达的地方,为了让感染者进入游戏区域,应该在障碍背面放置func_ladder(en)梯子,以便感染者翻越。

生成物品和武器

设置Flags标志让生成位置随机化。

  • weapon_molotov_spawn
  • weapon_pipe_bomb_spawn
  • weapon_pistol_spawn
  • weapon_pain_pills_spawn
  • weapon_ammo_spawn
  • weapon_smg_spawn
  • weapon_first_aid_kit_spawn
  • weapon_hunting_rifle_spawn
  • weapon_rifle_spawn
  • weapon_autoshotgun_spawn
  • weapon_pumpshotgun_spawn
  • prop_physics
    • 绿色氧气罐: models/props_equipment/oxygentank01.mdl
    • 红色汽油桶: models/props_junk/gascan001a.mdl
    • 白色丙烷罐: models/props_junk/propanecanister001a.mdl
    • 烟花: models/props_junk/explosive_box001.mdl

恐慌事件

触发 info_director 导演实体的事件来生成尸潮。

  • info_game_event_proxy
  • ambient_generic
  • logic_timer
  • 示例
    • 警报车
    • 开门警报
    • 火警
    • 烟雾报警器
    • 金属探测器
    • 爆炸

剧情事件(Crescendo events)

剧情中间的任务目标。剧情事件就像是缩小版的救援关战斗,通常出现在途径中有意思的地方。它的设置与恐慌事件极其相似,除了不能被跳过这一点之外。例如战役毫不留情(No Mercy)中的医院中,生还者必须抵御尸潮直到电梯抵达。

  • func_button
  • filter_activator_team
  • info_game_event_proxy
  • logic_relay
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger director PanicEvent   1.00 No

一种关卡切换的方法

在一关最后的安全屋中添加 trigger_changelevel ,并将它与房间的地板空间关联起来。触发器(trigger)笔刷并不需要与地板重叠,但是必须紧贴着地板,或者与nav网格生成的位置大部分重合。如果 trigger_changelevel 没有与地板空间关联起来,在地图加载时就会出现nav错误,需要抽动调整nav网格。

确保命名了 info_landmark 实体,以及确保名称与 trigger_changelevel 中设置的、以及下一关的landmark名称一致。 For the prop_door_rotating_checkpoint,至于安全门实体 prop_door_rotating_checkpoint,将模型设置成 models/props_doors/checkpoint_door_02.mdl,确保勾选了“Flags”选项卡中的“Starts Open”选项。

创建导航网格

首先必须编译并加载好地图,再在游戏中打开控制台,输入以下内容:

sv_cheats 1
nav_edit 1
nav_mark_walkable
nav_generate
nav_analyze
nav_edit 0
sv_cheats 0

在整个过程中地图会被重新加载两次,一次是在 nav_generate 之后,一次是在 nav_analyze 之后,但游戏应当始终处于nav编辑模式。

需要注意的是,上述控制台指令只能创建最基础的导航网格,它还远远不够,因此只能用于测试而不是发布。在发布地图之前应该仔细、全面地检查并编辑导航网格,取决于地图的结构,工作量也会有所不同。因此,建议你先完成地图的全部细节,最后再进行导航网格的调整。地图结构上的大变动会导致旧的nav渲染在错误的位置,需要进行重建。

Note.png注意:有关高级导航网格的创建与编辑,请点击导航网格(en)进行查看。

导航网格属性描述

导航网格图形用户界面

  • Fog:该区域是否关联了雾(fog)。
  • Incoming/Outgoing:(可能不仅限于求生之路)很可能是用于选择带有向内/向外路径标记的区域
  • Max Light / Min Light:(不限于求生之路)用于选择有特定级别光照的区域,(最大0.25/最小0 是黑暗区域,最大1/最小0.75是明亮区域)
  • Place:(可能不仅限于求生之路)“Place”标记用于给nav网格中的特定区域命名。很可能仅用于选择命名/未命名区域。

救援关

一个战役的终点。在每个战役的最后一章,玩家必须在感染者的疯狂进攻中守住一片区域,直到救援载具到达。

设置呼叫电台

Entity: trigger_finale
Name: FinaleRadio
World Model: models/props/terror/hamradio.mdl
Start Disabled: No
First Use Delay: 2
Use Delay: 2
Description: 这个实体的作用是在被触发两次之后,启动救援流程。
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png FinaleEscapeStarted EscapeRelay Trigger   5.00 No
FinaleEscapeStarted - 事件说明:它的含义是“当救援关完成之后,触发这个事件”。通常用于触发一个中继器(logic_relay),进而召唤救援载具。
Note.png注意:官图中使用了两个独立的按钮(func_button)来触发这个实体。这很可能是他们发现,由于 trigger_finale 实体在设置了模型后,本身就能接受“use”(使用键)输入,导致参与测试的玩家会“无意中”触发救援事件,因此做出的临时的修复。


添加救援载具

Entity: logic_relay
Name: EscapeRelay
Description: 当救援关流程完成时触发一次。用于启动救援载具的动画,并使其移动到标记了 RESCUE_VEHICLE 导航网格的位置。当载具到达之后,用于承载 RESCUE_VEHICLE 标记的导航网格的 func_brush 固实体就会生效。
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger RescueBrush Open   0.10 No
Io11.png OnTrigger FinaleRadio FinaleEscapeVehicleReadyForSurvivors   3.50 No
FinaleEscapeVehicleReadyForSurvivors - 这个事件能够“解锁”RESCUE_VEHICLE 导航网格,有了它后电脑AI就会冲向载具。建议给这一事件添加延迟,来让载具有足够的时间进入位置。
Note.png注意:官方地图中有时候还会加入 trigger_hurt 与 trigger_push 实体,来模拟出载具一路碾过去的效果。


Entity: func_door, Name: RescueBrush
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnOpen TriggerEscape Enable   3.10 No
Io11.png OnOpen RescueBrushRamp Enable   3.10 No
Io11.png OnOpen RescueBrushGate Close   3.20 No


Entity: func_door, Name: RescueBrushDr1
Starts Open: Yes
Parent: RescueBrush


Entity: func_door, Name: RescueBrushDr2
Starts Open: Yes
Parent: RescueBrush


Entity: func_brush, Name: RescueBrushRamp
Start Disabled: Yes
Solidity: Toggle


Entity: trigger_multiple, Name: TriggerEscape
Description: Set to be enabled after the rescue vehicle animation finishes. When activated, triggers the VehicleLeaveRelay.
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnEntireTeamStartTouch VehicleLeaveRelay Trigger   0.00 No


Entity: logic_relay, Name: VehicleLeaveRelay
Description: Used for controlling the rescue vehicle exit animations and firing the OutroRelay
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger RescueBrushDr1 Close   0.00 No
Io11.png OnTrigger RescueBrushDr2 Close   0.00 No
Io11.png OnTrigger RescueGate Open   0.00 No
Io11.png OnTrigger RescueBrushRamp Kill   0.00 No
Io11.png OnTrigger TriggerEscape Kill   0.00 No
Io11.png OnTrigger OutroRelay Trigger   0.00 No


Note.png注意:生还者AI似乎在检测导航网格上有一定困难。因此,建议使用斜坡、下降、楼梯、梯子来连接 RESCUE_VEHICLE 区域和其它区域,而“向上跳”的连接方式似乎存在着问题。


滚动致谢画面(Credits)

Entity: logic_relay, Name: OutroRelay
Description: Ends the map and starts up the credits screen.结束一张地图,并显示致谢画面(Credits)
  My Output Target Entity Target Input Parameter Delay Only Once
Io11.png OnTrigger InstructorFinale GenerateGameEvent   0.00 No
Io11.png OnTrigger FinaleRadio FinaleEscapeFinished   4.00 No
Io11.png OnTrigger FadeOutro Fade   5.00 No
Io11.png OnTrigger OutroStats RollStatsCrawl   6.00 No
Io11.png OnTrigger FinaleRadio FinaleEscapeForceSurvivorPositions   7.00 No
Io11.png OnTrigger EndCamera Enable   8.00 No
FinaleEscapeForceSurvivorPositions - 这个事件能够使 "info_survivor_position" 实体生效,并将玩家从战场移出。


Entity: env_fade Name: FadeOutro
Entity: env_outtro_stats Name: OutroStats
Entity: info_game_event_proxy Name: InstructorFinale
Entity: info_survivor_position Name: survivor_pos1
Entity: info_survivor_position Name: survivor_pos2
Entity: info_survivor_position Name: survivor_pos3
Entity: info_survivor_position Name: survivor_pos4
Entity: point_viewcontrol_multiplayer Name: EndCamera

注意事项

门的模型和皮肤有很多种。这张图片只是用作参考。
Type: prop_door_rotating
Frame Dimensions: width: 56, height: 104
World Model: models/props_doors/doormainmetal01.mdl
Note.png注意:如果 prop_door_rotating_checkpoint 实体设置在了安全屋区域8个单位以外的位置,感染者可能会试图翻越过去。