动态背景
动态背景 (Background maps) 是在进入游戏时出现的会动的 3D 背景画面. 这是已编译的 BSP 格式的文件, 就和标准的游戏关卡地图一样. 虽然所有的 MOD 都可以使用 动态背景, 但是它一般被用于像 Half-Life 2 这样的单人游戏. 根据作者的意愿, 动态背景 可以根据玩家的游戏进度 (以章节为单位) 作出相应的改变, 玩过 HL2 的应该都理解吧.
构造 动态背景
动态背景应该以立体模型 (dioramas) 来构建. 地图中要展现的东西应该被限制于摄像机镜头之内, 超出摄像机镜头的任何东西除了耗费资源外无任何意义. 应该尽可能的构造最少的几何体与使用最少的材质贴图, 这样才能让地图更小, 读取更快.
开始创建一个 动态背景 地图:
- 创建一个基本的几何体容纳您想要包含在动态背景中的所有东西. 不能有任何的裂痕 (leaks), 必须像其他标准的关卡地图一样是密闭的. 光照与材质都是必需的. 您也可以修改一个已有的关卡地图, 只需删除或隐藏在动态背景中不需要的部分. 所有不需要的成分 (elements) 都删了吧.
- 添加 info_player_logo (多人游戏) 或是 info_player_start (单人游戏) 到地图中. 这个实体放在哪无关紧要, 只要包含在几何体的内部, 并且离地面不是太高, 玩家出生时不会摔死就可以了.
- 添加一个 point_viewcontrol 实体到地图中您想要摆放摄像机的地方. 命名 point_viewcontrol 以方便使用, (例如
"viewcontrol_background1"
). - 打开 point_viewcontrol 实体的属性 (ALT+ENTER), 切换到 flags 标签下, 去掉 Start at Player / Follow Player / Interruptable by Player 前面的勾, 打上 Freeze Player / Infinite Hold Time / Snap to goal angles / Make player non-solid 前的勾, 点 apply
- 添加一个 info_target 实体. 它的位置决定了 point_viewcontrol 摄像机将会指向的地方. 以与 point_viewcontrol 相似的方式命名 ( 例:
"target_background1"
). - 选择 point_viewcontrol. 找到 Entity to look at 关键字, 将他的值指向您刚刚创建的 info_target 实体.
- point_viewcontrol 应该在 动态背景 地图载入的时候被激活. 最简单的方法是使用 logic_auto 实体. 在属性页的 Outputs 标签栏下面选择 add..., 在 My output 选择 OnMapSpawn, Targets entities named处指向 point_viewcontrol 实体, Via this input 选择 Enable, 点 apply.
- 您也可以在 logic_auto 实体的 outputs 里面添加您想要在地图中展现的事件, 比如灯光闪烁, NPC 匆匆走过, 或是播放声音 等等. 但是注意别弄得太复杂了, 不管怎么说, 动态背景应更多的考虑性能, 读取速度, 而不是把玩家的注意力从菜单转移到背景上去.
- 保存, 编译您的地图. 如果您要替换已有的 Half-Life 2 地图, 请看看下面的 替换 Half-Life 2 的动态背景 以保证名称正确.
测试 动态背景
测试动态背景地图, 请不要在运行游戏时直接加载这张地图. 应该在进入游戏之后, 调出 开发者控制台 , 接着输入:
map_background <地图名称>
这里的 <地图名称>
就是您的动态背景的名称. 这样,您的地图就会被作为背景画面读取到游戏中.
测试完之后, 您可以回到编辑器完善它. 您也许也想要添加更多的细节, 改变摄相机的位置或摄相机的方向. 制需要重新编译, 再使用 map_background
命令来看看所做的改变. 一旦摄像机的位置确定下来, 尽最大努力来优化地图是一个不错的选择, 比如为那些摄像机看不到的表面涂上 toolsnodraw
材质. 再次重申, 我们的目的是让动态背景尽可能的小, 使其具有更佳的性能表现.
建议看看 maps\sdk_background.vmf
文件, 这是一个动态背景示例文件.
菜单背景图像
我们还需要为 动态背景 .BSP 制作一个背景图像. 这就是在您运行游戏之后, 动态背景加载中的时候显示的图像. 在 Half-Life 2 里, 这是一张模糊化的动态背景的截图 (制作的时候, 1280x 的图像 使用 30像素 的高斯模糊滤镜). 当 动态背景 .BSP 加载完成时, 屏幕将会从静态的图像渐变到实际的 3D 动态背景.
下面的两个文件是必需的:
<game directory>\materials\console\<map name>.vmt
<game directory>\materials\console\<map name>_widescreen.vmt
例如, 您制作了一个名称为 sdk_background.bsp 的动态背景, 您需要以下的文件:
hl2\materials\console\sdk_background.vmt
hl2\materials\console\sdk_background_widescreen.vmt
背景图像常常使用 1024x1024 分辨率的截图, 用图象编辑软件使其模糊化.
您可以在游戏中的 选项 -> 键盘 设置截图按键. 默认的按键为 F5
, 并且以 .JPG 格式保存到 <游戏文件夹>\screenshots
目录下. 您也可以绑定一个按键到控制台的命令 screenshot
, 这样将会以 .TGA 格式保存.
菜单背景图像的 .vmt 文件应该是这样的格式:
"UnlitGeneric" { "$basetexture" "console/sdk_background" "$vertexcolor" 1 "$vertexalpha" 1 "$ignorez" 1 "$no_fullbright" "1" "$nolod" "1" }
至于怎样创建, 请看 材质的创建 文档.
sdk_background 示例文件的默认材质位于:
\sourcesdk_content\hl2\materialsrc\console
(for the source .TGAs)
\half-life 2\hl2\materials\console
(for the .VMT and .VTF files).
MOD 中动态背景 与 章节的脚本操作
创建了一个修改过的动态背景之后, 为了能够正常被游戏读取, 并在适当的章节处展示, 它应当被插入到适当的脚本文件中.
这段描述了几个用来控制动态背景展现的文件.
hl2\scripts\ChapterBackgrounds.txt
文件将动态背景与游戏章节相关联. 它列出了游戏中所有的章节, 和当玩家进行到某章节后哪一个 BSP 文件应该被读取.
这里是 Half-life 2 的 ChapterBackgrounds.txt
文件:
"chapters" { 1 "background01" 2 "background01" 3 "background02" 4 "background02" 5 "background03" 6 "background03" 7 "background04" 8 "background04" 9 "background05" 9a "background05" 10 "background06" 11 "background06" 12 "background07" 13 "background07" }
hl2\scripts\titles.txt
包含有章节的键值. 每一个章节都有自己的键值. 这些值被记录到 Hammer 编辑器 中 Map 菜单项下的 Map Properties 里面的 “Chapter Title Message” 的值里. 实际游戏中显示的文本是记录在各种语言的文件中, 就是这些文件:
hl2\resource\hl2_english.txt hl2\resource\hl2_french.txt hl2\resource\hl2_german.txt ... hl2\resource\hl2_schinese.txt ...
这些文件用各种语言的文本记录了各个章节的名称. 在游戏中出现章节名称的时候就会显示这些文件里对应的文本.
测试 chapterbackgrounds.txt
当您把您的做的改变写入 chapterbackgrounds.txt
文件中的时候, 你可以使用控制台变量 sv_unlockchapters
测试您的动态背景. 这个变量控制着您已经玩穿了哪个章节, 只要把它的值设置为您想要查看章节序号, 您就可以看到对应的动态背景了.
选择查看哪一个 动态背景:
- 保存
chapterbackgrounds.txt
文件到<MOD 文件夹>\scripts
目录. - 运行游戏.
- 打开开发者控制台.
- 输入 "sv_unlockchapters n" 这里的 n 就是位于
chapterbackgrounds.txt
的动态背景的序号. - 输入
quit
退出游戏. - 重新运行游戏, 这样您选择的动态背景就会显示出来啦.
sv_unlockchapters
的值保存在 config.cfg
游戏设置文件内, 如果需要, 您可以直接修改此文件. 对于 Half-Life 2, 这个文件可以在 \half-life 2\hl2\cfg\config.cfg
找到, 可以被任何文本编辑器打开.
替换 Half-Life 2 动态背景
如果您想用自己的作品替换 Half-Life 2 的默认动态背景, 只需用上面提到的方法创建 .BSP 与 .VTF 和 .VMT 文件, 把文件名改成您想要替换的章节的名称就可以了. 在 chapterbackgrounds.txt
文件内记录着 Half-Life 2 动态背景的名称:
"chapters" { 1 "background01" 2 "background01" 3 "background02" 4 "background02" 5 "background03" 6 "background03" 7 "background04" 8 "background04" 9 "background05" 9a "background05" 10 "background06" 11 "background06" 12 "background07" 13 "background07" }
例如, 如果您想要替换第一个章节的动态背景, 只需把相关文件命名为 background01
. 如果要替换第十个章节的动态背景, 只需把相关文件命名为 background06
.
屏蔽 动态背景
如果您指想要使用 vmt 来当作背景 (不使用 动态背景), 只需修改 \cfg\valve.rc
加入如下内容:
// load the base configuration //exec default.cfg // Setup custom controller exec joystick.cfg // run a user script file if present exec autoexec.cfg // // stuff command line statements // stuffcmds
如果您要再次启用 动态背景, 只需在 valve.rc 文件中新建一行, 写入 startupmenu
.