这篇条目有关 Source引擎。如需详情,点击这里。

gameinfo.txt

From Valve Developer Community
< Zh
Jump to navigation Jump to search
English (en)Deutsch (de)Español (es)Français (fr)日本語 (ja)한국어 (ko)Polski (pl)Русский (ru)中文 (zh)Translate (Translate)
Info content.png
This translated page needs to be updated.
You can help by updating the translation.
Also, please make sure the article complies with the alternate languages guide.(en)
This notice is put here by LanguageBar template and if you want to remove it after updating the translation you can do so on this page.


游戏定义文件
Edit Tabs

GameInfo.txt 是一个 KeyValues 配置文件,用于描述一个 Source 模组。除了包含模组名称或开发者网站链接等元数据外,它还定义了模组依赖哪些游戏,以及引擎用于查找资源的 SearchPaths(搜索路径)。它存放在模组的根目录中。Source、SDK 工具和 Steam 都依赖它。

Note.png注意: 布尔值用 0 或 1 表示。
Note.png注意: 如果字符串中包含空格或制表符,必须用"引号"将它括起来。
Note.png注意: 在 Xbox 360 Xbox 360 上,由于 Xbox TCR 的要求,此文件以 gameinfo.xtx 的形式存储。详情请参阅 XTX。

基本设置

名称

影响菜单和窗口标题的键。

Game <字符串(en)>
模组名称,使用 ASCII 编码。显示在 Steam 中,并用作窗口标题。只有在未指定 Title 时才会显示在主菜单中。
Title <字符串(en)>
显示在模组主菜单中的 Unicode 字符串。
Title2 <字符串(en)>
显示在 Title 下方的次级字符串。
GameLogo <布尔值(en)> (存在于自 起源2007 以来)
不在主菜单上显示 Title 文本,而是显示 …\resource\GameLogo.res 中的内容。请参阅 Adding Your Logo to the Menu。

选项

影响选项面板中显示哪些标签页和选项的键。另请参阅 Customizing Options: Keyboard。

Type <字符串(en)>
影响选项面板中显示哪些标签页及其顺序,取值为 Singleplayer_Only 或 Multiplayer_Only。如果你的模组同时具有单人(SP)和多人(MP)模式,请省略此键。
Bots <布尔值(en)>
在创建服务器页面上显示"CPU 玩家选项"标签页,用于 反恐精英:起源 反恐精英:起源。
Note.png注意: 该标签页是专为配置 Counter-Strike: Source 机器人而制作的。
NoDifficulty <布尔值(en)>
隐藏难度标签页(如果你的模组为 Multiplayer_Only,此操作会自动生效。)
HasHDContent <布尔值(en)>
显示"如果可用则加载高清内容"视频选项按钮,用于 半衰期:起源 半衰期:起源。
Note.png注意: 高清内容将从 game_hd 加载,在 Half-Life: Source 的情况下即为 hl1_hd。
HasPortals <布尔值(en)> (存在于自 起源2007 以来)
显示 Portal 选项标签页。
NoCrosshair <布尔值(en)>
隐藏多人准星选择菜单。
AdvCrosshair <布尔值(en)>
启用特殊的高级准星选项。
  • 1 和 2 对应 TF2/DOD:s 的准星选项。(基于纹理)
  • 3 对应 CS:s 的准星选项。
待完善: 如何实现。
.
NoModels <布尔值(en)>
隐藏多人模型选择菜单。
NoHIModel <布尔值(en)>
隐藏 cl_himodels 的切换复选框,该选项在 GoldSrc GoldSrc 中用于多人模型。只有在 cl_himodels 本身存在时才能正常显示。
证实:它在 半衰期死亡竞赛:起源 中有效吗?
Hidden_Maps <subkey(en)>
子键中的地图不会出现在"创建服务器"对话框中。不过这并不能阻止用户通过控制台加载它们。语法为 mapname 1,每行一项。不要包含 .bsp。记得用 { 和 } 打开和关闭子键。
CommandLine <subkey(en)> (仅存在于 Mapbase 之中)
启动模组时要使用的启动选项列表。语法为 -launchoption "value",每行一项。记得用 { 和 } 打开和关闭子键。
player_default_legs <布尔值(en)> (仅存在于 Mapbase 之中)
启用/禁用第一人称双腿显示。

Steam 游戏列表

影响你的游戏或模组在 Steam 库页面中如何显示的键。

Developer <字符串(en)> Obsolete
已弃用。
模组的开发者。通常是模组团队的名称,或是某个人的名字。在当前版本的 Steam 中已不再显示。
Note.png注意: 严格来说,有一个地方它出人意料地仍然会出现:大屏幕模式下的 Steam 输入默认布局界面。考虑到 Steam 输入在 sourcemods 中本来就已经严重损坏,这实际上毫无用处。
Developer_URL <字符串(en)> Obsolete
已弃用。
你自己或模组的 URL。必须以 http:// 开头。在当前版本的 Steam 中已不再显示。
Manual <字符串(en)> Obsolete
已弃用。
指向模组手册的 URL;也可以是本地文件。在当前版本的 Steam 中已不再显示。
Icon <字符串(en)>
相对于 gameinfo.txt 的本地路径,指向一个未经压缩的 16x16 TGA 文件,它将作为模组图标显示在 Steam 中。不要包含文件扩展名。不支持图标文件格式(参见:Icon Creation)出现在 Steam 详细视图中更大的 32 像素图标应与 16 像素图标放在一起,并命名为 <icon>_big.tga。
Note.png注意: 要使透明度生效,TGA 必须以 32 位模式保存并启用 alpha 通道。
待完善: 这在新的 军团要塞2分支 军团要塞2分支 中是否已废弃?既然新 SDK 似乎使用你现在可以嵌入 exe 本身的图标,这是否意味着该设置仍然有效?

引擎与工具

影响引擎/工具如何运行以及工具本身某些选项的键。

Nodegraph <布尔值(en)> (存在于自 起源2007 以来)
是否为地图启用构建 nodegraph(.ain 文件)。
GameData <字符串(en)> (存在于自 求生之路 引擎分支 and 起源2009 以来)
指向 FGD 文件的路径,相对于 Hammer 的位置。这是将 instances 编译进地图所必需的。Hammer 本身不使用它。
InstancePath <字符串(en)> (存在于自 起源2013 以来)
查找 Instance VMF 的默认位置。
SupportsDX8 <布尔值(en)> (存在于自 求生之路 引擎分支 以来) (也存在于 黑山 之中)
当为 false 时,阻止游戏在较旧的 DirectX 版本(如 DX8 及更低版本)中运行,因为它们不支持完整的图形效果范围,同时也会阻止 Studiomdl 为模型生成 .sw.vtx 和 .dx80.vtx 文件,因为这些文件并非必需。
Note.png注意: 在 求生之路 之前,隐含始终为 true。
SupportsVR <布尔值(en)> (存在于自 起源2013 以来)
游戏是否支持在 VR 模式下运行。自 Steam Deck 更新起,在 半衰期2 和 传送门 中已废弃。
SupportsXbox360 <布尔值(en)> (存在于自 求生之路 引擎分支[证实] 以来)
游戏是否支持 Xbox 360。供 StudioMDL 和 Vtex 等工具使用,以控制是否创建文件的大端序版本。
Note.png注意: 在 求生之路 之前,隐含始终为 false。

TF2 分支键

在 军团要塞2分支 军团要塞2分支 中引入的新键。

DependsOnAppID <字符串(en)>
如果将其设置为任意 AppID(例如:军团要塞2 为 440),那么你需要先安装此游戏,才能游玩依赖它的模组。
ReplayRequired <布尔值(en)>
启用 TF2 的 Replay 功能。[证实]
AdditionalLocalization <字符串(en)>
添加额外的本地化文件[证实]
待完善: 这个键可以多次调用以添加多个新的本地化文件吗?或者有没有一个键可以将它们分隔开,例如 ;

FileSystem

位于子键 FileSystem 内的键。

SteamAppID <整数(en)>
模组所基于游戏的 AppID。模组将可以访问该游戏的全部内容,并且在未安装该游戏时无法游玩,模组还会使用该游戏的可执行文件来运行。如果你要将自己的 Source 游戏上传到 Steam,这将是你游戏的 AppID。否则,起源2013 多人分支 SDK Base 2013 - MP 为 243750,起源2013 单人分支 Source SDK Base 2013 - SP 为 243730,Alien Swarm Alien Swarm 为 630,或者如果你不使用源代码,则为你所基于游戏的 AppID。
Note.png注意: 大多数较旧的 Source 模组会使用 AppID 215(Source 2006)和 218(Source 2007)。如果你要制作新模组,不应该使用这些 ID,因为它们属于一个显然已废弃的 Source 引擎分支,该分支已被 Source 2013 和 Alien Swarm 取代。仅在向后兼容时使用它们。
Note.png注意: 起源2013 多人分支 SDK Base 2013 - MP 目前基于 军团要塞2分支 军团要塞2分支。如果你想游玩较旧的模组(在旧版 SDK Base 2013 - MP 上制作的),你必须切换到 previous2021 测试分支。

任何仍在托管需要 Source 2013 多人的 SDK Base 2013 MP 模组的模组作者,都应在模组页面或 README.txt 中添加有关如何将 Source SDK Base 2013 MP 降级到 TF2 分支之前版本的说明。

Note.png注意: 如果你的模组基于单人游戏,它将不会受到 VAC VAC 保护。
AdditionalContentId <整数(en)> Obsolete
已弃用。
模组可以访问的另一个 AppID。此功能被添加到 SDK 源代码中,但不知何故从未出现在 Valve 的其他游戏中;你必须自己构建二进制文件才能使用它。如果你需要用它在多个应用之间挂载,请进行这些修改。
Icon-Bug.png错误:引擎能理解此命令,但遗憾的是 SDK 工具不能。目前最好的解决方案是将游戏内容复制到硬盘上的某个位置,并向其添加一个绝对路径的 SearchPath。记得在发布前删除该 SearchPath。
待完善: 与其将内容复制到一个会占用额外空间的位置,不如使用 "..\Half-Life 2\hl2"、"..\Counter-Strike: Source\cstrike" 等路径回到上一级目录,从指定游戏挂载资源,或者使用符号链接以节省磁盘空间(在可行的情况下)。
Note.png注意: 新的 军团要塞2分支 军团要塞2分支 挂载方法,即 gameinfo.txt 示例中(用于创建基于 TF2 的模组)所示的 |appid_<int>|,可以作为现代替代方案使用,但仍然不适用于 SDK 工具。
ToolsAppId <整数(en)> Obsolete
已弃用。
这是当前所用 SDK 的 AppID。

ToolsEnvironment

(仅存在于 军团要塞2分支 之中) 位于子键 ToolsEnvironment 内的键。

Engine <字符串(en)>
游戏使用的是哪个游戏引擎。此值始终设置为 "Source"。
UseVPLATFORM <布尔值(en)>
未知。
待完善: 确认它的作用。
PythonVersion <整数(en)>
游戏使用的是哪个版本的 Python。目前设置为 "2.7"。
PythonHomeDisable <布尔值(en)>
未知。
待完善: 确认它的作用。

SearchPaths(搜索路径)

SearchPaths 是 FileSystem 内的一个子键。它为每个搜索路径包含一个键。当引擎需要某个文件时,它会遍历搜索路径,找到所需文件后便停止,因此搜索路径的顺序很重要。

起源2013 单人分支 起源2013 单人 和 起源2013 多人分支 起源2013 多人 的加载顺序

Note.png注意: 本节是根据逆向工程测试(存在于 起源2013 单人分支之中)记录的。

搜索路径按照以下标准挂载。

  • VPK 必须在搜索路径中声明才会被加载。只有在使用 /* 通配符时,它们才会被隐式加载。
  • 使用 /* 关键字将挂载该目录中找到的所有子目录和 VPK。

标准 1:搜索路径列表顺序

位置靠上的搜索路径优先级高于位置靠下的搜索路径。

在两个搜索路径之间,位于上方的那一个会先被挂载。

PlacementTip.png示例: SearchPaths
Game dir1 // 较高优先级 Game dir2 // 较低优先级
Note.png注意: VPK 本身并不比目录具有优先级。

标准 2:字母顺序

在应用标准 1 之后,同一 VPK 内的 VPK 和目录将按文件名(不含扩展名)或目录名的字母顺序排序。

PlacementTip.png示例: SearchPaths
Game dirs/*

dirs/

dir1/ // 最高优先级 dir2.vpk // 较高优先级 dir3/ // 较低优先级 dir4.vpk // 最低优先级
Warning.png警告: 如果同一搜索路径中同时存在 [filename]_dir.vpk 和 [filename].vpk,则 [filename].vpk 不会被加载。
Warning.png警告: 如果同一搜索路径中同时存在 [filename]_dir.vpk 和 [filename]/,则 [filename]/ 不会被加载。
Note.png注意: 如果同一搜索路径中同时存在 [filename]/ 和 [filename].vpk,则 [filename] 的优先级高于 [filename].vpk。

求生之路 引擎分支 求生之路 引擎分支、异形丛生 引擎分支 AS branch 和 传送门 2 引擎分支 Portal 2 branch 的加载顺序

搜索路径按照以下标准挂载。

  • VPK 必须命名为 pak01_dir 且位于搜索路径文件夹内。你无法手动挂载 VPK。
PlacementTip.png示例: SearchPaths
Game test1

.[[<game_path>/test1/|<game_path>/test1/]]

pak01_dir.vpk pak01_001.vpk pak01_002.vpk
Note.png注意: VPK 仍然可以是单个文件,但必须命名为 pak01_dir.vpk

标准 1:先 VPK,后目录

所有 VPK 先被挂载,然后是所有目录。

PlacementTip.png示例: SearchPaths
Game dir_with_loose_files // 较低优先级 Game dir_with_a_pak01_dir // 较高优先级

标准 2:搜索路径列表顺序

在应用标准 1 之后,位置靠上的搜索路径优先级高于位置靠下的搜索路径。

在两个搜索路径之间,位于上方的那一个会先被挂载。

PlacementTip.png示例: SearchPaths
Game dir1 // 较高优先级 Game dir2 // 较低优先级

附加内容(Addons)

像 求生之路2 这样的某些游戏有一个 "Addons" 文件夹,它不在 gameinfo.txt 中。这些文件夹仅在运行时由游戏本身加载,而不会被 Hammer、HLMV 或其他工具加载。

如果你想为 Hammer 挂载附加内容,你需要解包该附加内容,并将其作为一个 pak01_dir.vpk 挂载到一个优先级高于一切的全新文件夹中。

目录

目录(即键的值)既可以是相对于 SteamAppID 根目录(即游戏可执行文件所在位置)的相对路径,也可以是相对于 GameInfo.txt 的相对路径,还可以是绝对路径。三者的示例如下:

PlacementTip.png示例: SearchPaths
Game |All_Source_Engine_Paths|HL2 // 转到可执行文件目录,并在其中挂载一个名为 HL2 的文件夹。 Game HL2 // 同样转到可执行文件目录,并在其中挂载一个名为 HL2 的文件夹。 Game |GameInfo_Path|. // 转到 GameInfo.txt 所在目录,并挂载它所在的文件夹。 Game |appid_440|tf // 转到 Team Fortress 2(AppID 440)目录,并在其中挂载一个名为 TF 的文件夹。(已在 TF2 分支上确认) Game "C:\MyFolderOfContent\content" // 挂载此绝对目录,用于临时挂载内容很有用。
Note.png注意: 为了挂载 VPK 文件,你需要在该目录末尾添加 VPK 的名称及 .vpk 扩展名。如果该 VPK 是多分块 VPK,则填入 VPK 的名称时不要带末尾的 "_dir" 或 "_###"。

上面这两个变量将从某个目录开始搜索,|All_Source_Engine_Paths| 会从根文件夹开始,而 |GameInfo_Path| 会从 GameInfo.txt 所在的文件夹开始。这两个变量都可以附加任意数量的文件夹。除了文件夹和变量之外,还有一些可以附加的特殊命令,已知的有:

  • ../
    返回上一级文件夹,这有助于挂载其他游戏的内容(如 传送门 传送门),因为 AdditionalContentID 已废弃。如果你想挂载 Portal,而你的游戏位于(举例来说)"<SteamFolder>\SteamApps\Common\MyGame\FolderWhereGameInfoIs",你可以像这样创建一个搜索路径来挂载它的内容:
PlacementTip.png示例: SearchPaths
// 从可执行文件目录开始,然后返回上一级文件夹,这样我们就位于 Common 中,然后进入 Portal/portal 并挂载 portal_pak.vpk Game |All_Source_Engine_Paths|../Portal/portal/portal_pak.vpk

这里还有一个如何挂载 SourceMod 的示例:

PlacementTip.png示例: SearchPaths
// 从可执行文件目录开始,然后返回两级文件夹,这样我们就位于 SteamApps 中,然后进入 SourceMods 并挂载 MySourceMod 文件夹。 Game |All_Source_Engine_Paths|../../SourceMods/MySourceMod
  • .
    这会停止在当前目录中搜索,只有当你想要直接挂载 |All_Source_Engine_Paths| 或 |GameInfo_Path| 所在位置时才应使用它。两者的示例如下:
PlacementTip.png示例: SearchPaths
// 同时挂载 |All_Source_Engine_Paths| 和 |GameInfo_Path| 变量的路径。 Game |All_Source_Engine_Paths|. Game |GameInfo_Path|.
  • /*
    挂载当前目录中的每个子文件夹和 VPK,按文件名(不含扩展名)或目录名的字母顺序排列。该命令正是让自定义文件夹在大多数最新版 Source 游戏中生效的原因。其用法示例如下:
PlacementTip.png示例: SearchPaths
// 挂载 custom 文件夹的子文件夹和 VPK。 Game |GameInfo_Path|custom/*

键

在大多数较旧的 Source 游戏中,搜索路径唯一可用的键是 Game 和 Platform,虽然这些键足以应付大多数搜索路径需求,但在 Source 2013 中引入了一些新键,提供了更多控制。

Tip.png提示: Insurgency Insurgency 和 Day of Infamy Day of Infamy 使用与 Source 2013 相同的搜索路径系统,因此在 Source 2013 中可用的命令和键对它们同样适用!

目前已知的键有:

  • Game
    将该路径添加为简单搜索路径。会添加它找到的所有内容。还会在每个 Game 目录中写入 sound.cache 文件。
  • Game_Write (存在于自 起源2013以来)
    将该搜索路径标记为 Game 写入路径。它将该目录标记为此游戏的默认写入目录(写入什么?)。
    证实:这有什么用吗?
  • GameBin (存在于自 起源2013以来)
    一个特殊的键,要求该路径必须指向游戏的二进制文件(Server.dll 和 Client.dll 所在位置),并且会使用它找到的任何其他 DLL 文件。这应指向你自己模组的 Bin 文件夹,或者如果你不构建自己的 DLL,则指向你所基于游戏的 Bin 文件夹。
  • Game_LV (仅存在于 军团要塞2分支之中)
    将该目录标记为指向低暴力(Low Violence)文件。
  • Platform
    向包含核心引擎文件的文件夹添加一个特殊搜索路径,这通常指向游戏的 Platform 文件夹。
  • Mod (存在于自 起源2013以来)
    将该搜索路径标记为 Mod 路径。这通常是游戏可执行文件所在位置。其搜索路径挂载优先级高于 Game。对于在"新游戏"菜单中显示章节列表至关重要,可能还有其他用途。
  • Mod_Write (存在于自 起源2013以来)
    将该搜索路径标记为 Mod 写入路径。这通常是 GameInfo.txt 所在位置。它将该目录标记为此模组写入存档文件和下载列表的默认目录。
  • Default_Write_Path
    将该搜索路径标记为默认写入路径。这通常是 GameInfo.txt 所在位置。它将该目录标记为此模组写入 config.cfg、节点图、截图及其他一些文件的默认目录。当未指定 Mod_Write 或 Game_Write 时,它也可作为回退。
  • VGUI (仅存在于 军团要塞2分支之中)
    将该搜索路径标记为包含 .res 文件。
  • Download
    将该搜索路径标记为下载写入路径。从服务器下载的随机文件会放到这里。
  • Custom_Mod (仅存在于 军团要塞2分支之中)
    将该搜索路径标记为 Custom_Mod 搜索路径,用于自定义 HUD 版本管理,并用于 custom 文件夹。如果目录中没有 info.vdf 文件,.res 文件可能无法加载。
  • VPK (存在于自 Contagion以来)
    用于按名称挂载 VPK。不要在末尾添加 .vpk、"_dir" 或 "_###"。路径相对于 <base directory>/vpks/。
待完善: 测试此键在 Contagion Contagion 以外游戏中的行为


在 Source 2013 中,你还可以通过用 + 号分隔每个键名来将键相互附加,这样如果你需要将一个目录用于多个键,就不必这样写:

Game |GameInfo_Path|MyFolder Mod |GameInfo_Path|MyFolder

而可以像这样简写:

Game+Mod |GameInfo_Path|MyFolder

这样你就不必再重新输入一次目录了。

自动本地化

Source 会自动创建本地化的搜索路径。如果你挂载了文件夹 HL2,那么当你的模组以法语运行时,HL2_French 会自动挂载在它上方,覆盖 HL2 中的任何内容。

待完善: 这也适用于模组文件夹吗?

起源2013 起源2013 示例

一份可为 起源2013 起源2013 游戏使用的完整可用 GameInfo.txt。

"GameInfo" { game "HALF-LIFE 2" title "HALF-LIFE'" type singleplayer_only supportsvr 1 GameData "halflife2.fgd" FileSystem { SteamAppId 220 // 向 Steam 指明此模组是基于哪个游戏的 // // 设置引擎搜索路径。 // // 如果某个搜索路径包含 "_english",而当前语言不是英语,那么 // 会通过将 "_english" 替换为相应语言,在英语路径上方插入另一个搜索路径。 // // 要调试引擎如何解析此文件,请在控制台中输入 "path"。 // // 搜索路径相对于基础目录,即 hl2.exe 所在的位置。 // // |gameinfo_path| 指向 gameinfo.txt 所在的目录。 // |all_source_engine_paths| 指向包含 HL2 共享内容的目录。 SearchPaths { // 首先,挂载所有用户自定义内容。这将搜索 VPK 和子文件夹 // 并按字母顺序挂载它们。分发模组最简单的方法就是 // 将自定义内容打包成 VPK。要"安装"模组,只需将它放入此 // 文件夹即可。 // // 注意,此文件夹仅在游戏启动时被扫描。 game+mod hl2/custom/* // 我们优先搜索 VPK 文件而不是普通文件夹,因为大多数文件都能在 // VPK 中找到,这样可以避免进行数千次文件系统调用来尝试打开 // 文件夹中并不存在的文件。(搜索 VPK 比进行操作系统 // 调用快得多。) game_lv hl2/hl2_lv.vpk game+mod hl2/hl2_sound_vo_english.vpk game+mod hl2/hl2_pak.vpk game |all_source_engine_paths|hl2/hl2_textures.vpk game |all_source_engine_paths|hl2/hl2_sound_misc.vpk game |all_source_engine_paths|hl2/hl2_misc.vpk platform |all_source_engine_paths|platform/platform_misc.vpk // 现在搜索松散文件。我们将包含 gameinfo.txt 文件的目录 // 设置为第一个 "mod" 搜索路径(在任何用户自定义内容之后)。这也是 // 写入 "mod" 路径时所用的路径。 mod+mod_write+default_write_path |gameinfo_path|. // 将 HL2 目录添加为 game 搜索路径。这也是写入 // "game" 路径时的目标位置。 game+game_write hl2 // 游戏的二进制文件所在位置 gamebin hl2/bin // 最后,挂载共享的 HL2 松散文件 game |all_source_engine_paths|hl2 platform |all_source_engine_paths|platform } } }

军团要塞2分支 示例

一份可为 起源2013 多人分支 Source SDK Base 2013 - Multiplayer 游戏(军团要塞2分支 军团要塞2分支 版本)使用的完整可用 GameInfo.txt。

"GameInfo" { game "Frog Fortress 2" type multiplayer_only nomodels 1 nohimodel 1 nocrosshair 0 hidden_maps { "test_speakers" 1 "test_hardware" 1 } nodegraph 0 GameData "tf.fgd" AdditionalLocalization "tf" InstancePath "maps/instances/" advcrosshair 1 supportsvr 0 ReplayRequired 1 DependsOnAppID 440 FileSystem { SteamAppId 243750 SearchPaths { // 首先,挂载所有用户自定义内容。这将搜索 VPK 和子文件夹 // 并按字母顺序挂载它们。分发模组最简单的方法就是 // 将自定义内容打包成 VPK。要"安装"模组,只需将它放入此 // 文件夹即可。 // // 注意,此文件夹仅在游戏启动时被扫描。 game+mod mod_tf/custom/* // 如果你想加载自己的 TF 自定义内容,请启用此项。 //game+mod |appid_440|tf/custom/* // 现在搜索松散文件。我们将包含 gameinfo.txt 文件的目录 // 设置为第一个 "mod" 搜索路径(在任何用户自定义内容之后)。这也是 // 写入 "mod" 路径时所用的路径。 mod+mod_write |gameinfo_path|. game+game_write |gameinfo_path|. default_write_path |gameinfo_path|. gamebin |gameinfo_path|bin // 我们优先搜索 VPK 文件而不是普通文件夹,因为大多数文件都能在 // VPK 中找到,这样可以避免进行数千次文件系统调用来尝试打开 // 文件夹中并不存在的文件。(搜索 VPK 比进行操作系统 // 调用快得多。) game_lv |appid_440|tf/tf2_lv.vpk game+mod |appid_440|tf/tf2_textures.vpk game+mod |appid_440|tf/tf2_sound_vo_english.vpk game+mod |appid_440|tf/tf2_sound_misc.vpk game+mod+vgui |appid_440|tf/tf2_misc.vpk game |appid_243750|hl2/hl2_textures.vpk game |appid_243750|hl2/hl2_sound_vo_english.vpk game |appid_243750|hl2/hl2_sound_misc.vpk game+vgui |appid_243750|hl2/hl2_misc.vpk platform+vgui |appid_243750|platform/platform_misc.vpk // 最后,挂载共享的 HL2 和 TF2 松散文件 game |appid_440|tf game |appid_243750|hl2 platform |appid_243750|platform // 从游戏服务器下载的随机文件会放到一个单独的目录中, // 这样便于将这些文件与官方游戏文件 // 或用户有意安装的自定义内容区分开来。 // // 此目录最后被搜索。如果你访问某个服务器并下载了 // 一个自定义模型等,我们不希望该文件无限期地覆盖默认 // 游戏文件(在你离开服务器之后)。服务器可以有 // 覆盖默认游戏文件的自定义内容,它只需要被打包进 // .bsp 文件中,以便作为地图搜索包被挂载。 // 地图搜索包被挂载在搜索路径列表的顶部, // 但仅在你连接到该服务器并处于该地图时有效。 game+download mod_tf/download } } }

CS:GO、Alien Swarm、Portal 2 与 Left 4 Dead 示例

CS:GO、Alien Swarm、Portal 2 与 Left 4 Dead 引擎分支的 gameinfo.txt,只有当你使用这些引擎分支进行模组开发时才会用到。

"GameInfo" { game "YourModGame" title "YourModTitle" title2 "YourModTitle" type multiplayer_only nomodels 1 nohimodel 1 nocrosshair 0 bots 1 hidden_maps { "test_speakers" 1 "test_hardware" 1 } nodegraph 0 SupportsXbox360 1 SupportsDX8 0 GameData "mod.fgd" FileSystem { SteamAppId 730 // 这将挂载我们需要的所有 GCF(240=CS:S,220=HL2)。 ToolsAppId 211 // 工具将加载它(即:source SDK 缓存)以获取 materials\debug、materials\editor 等内容。 // // 加载此文件的代码会自动在这里做一些事情: // // 1. 对于每个 "Game" 搜索路径,它会在 <dir>\bin 中添加一个 "GameBin" 路径 // 2. 对于每个 "Game" 搜索路径,它会在其前面添加另一个 "Game" 路径,末尾带 _<语言>。 // 例如:在法语机器上,c:\hl2\cstrike 会得到一个添加的 c:\hl2\cstrike_french 路径。 // 3. 对于第一个 "Game" 搜索路径,它会添加一个名为 "MOD" 的搜索路径。 // 4. 对于第一个 "Game" 搜索路径,它会添加一个名为 "DEFAULT_WRITE_PATH" 的搜索路径。 // // // 搜索路径相对于基础目录,即 hl2.exe 所在的位置。 // // |gameinfo_path| 指向 gameinfo.txt 所在的目录。 // 我们总是希望相对于 gameinfo.txt 来挂载该目录,这样 // 人们就可以在 c:\mymod 中挂载东西,而主游戏资源位于 // 像 c:\program files\valve\steam\steamapps\<username>\half-life 2 这样的位置。 // SearchPaths { Game |gameinfo_path|. Game Mod_Directory // 将 "Mod_Directory" 替换为你模组的文件夹,例如:csgo、swarm 等。 } } }

实用工具

XBLAH's Modding Tool XBLAH's Modding Tool

  • 模组信息可以通过 XBLAH's Modding Tool 通过一个功能全面的 UI 进行编辑,而无需模组作者去摆弄文本文件。