Gameinfo.txt:zh-cn

From Valve Developer Community
Jump to: navigation, search
English Polski Русский 日本語

GameInfo.txt 文件用来向 SDK 工具 和 Source 引擎 传递 MOD 或游戏中要使用到的文件. 这就是在运行 MOD 的时候 SDK 和 Source 引擎查看要调用的是 Half-Life 2, Counter-Strike, 还是 Half-Life 2: Deathmatch 中的内容. 这也是 SDK 工具来找到您的 MOD 所在文件夹的一种途径.

Note:对于 Half-Life 1 (GoldSrc), 请看 liblist.gam 的文件结构.

仅仅当一个程序员刚刚建立起一个 MOD 时, 才需要修改这个文件了. 在大多时间里, 您不需要修改此文件, 但是如果您希望您的 MOD 能够调用除了 Half-Life 2 之外的其他内容, 您就需要修改它了. 只要您 MOD 中的这个文件设置好了, 它就应该和您的 MOD 内容放置在一起. 当所有开发者工作时, 必须使用同一个 gameinfo.txt.

UI 设定

许多的 UI 设定, 包括您的游戏标题, 都是由 gameinfo.txt 文件来控制的. 包含的关键字:

Note:布尔 (Boolean) 值是以整型 (int) 来表示.
//基本信息
game		"Game Title"		// 这里的文字就是 Steam 游戏菜单中显示的内容.
gamelogo	boolean			// 当打开这个选项的时候
					// 显示的就不是 title/title2 的文本了
					//而是显示 resource/GameLogo.res 文件里面的内容.
					// 设定将被读取到引擎的 VGUI
					// 以便使用 gamelogo 文件来修改.

title		"Game Title"		// 这是在游戏中的菜单上显示的实际内容.
title2		"..."			// 副标题 (非必需)
type		singleplayer_only	// 也可以是 multiplayer_only .  帮助 GameUI 了解
					// 在 选项 面板上哪些 UI 组件是要显示的.
					// 如果 MOD 结合了 多人模式单人模式 就可以忽略此项了.
					// 如果设置了 multiplayer_only, 那么 多人游戏 标签 					// 将显示在 选项 面板的最前面 					// 否则, 如果没有 singleplayer_only 它会被添加到最后.
nodifficulty	boolean			// 在 选项 面板上隐藏 困难度标签
hasportals	boolean			// 在 选项 面板上显示 Portal 标签

//选项 面板上的 多人游戏 标签
nocrosshair	boolean			// 隐藏 准心选择 面板
nohimodel	boolean			// Hides cvar toggles checkbox for cl_himodels
					// Only is displayed properly if cl_himodels is registered
nomodels	boolean			// 隐藏多人游戏中的 模型选择 标签

//Steam 游戏列表
developer	"Team name"		// 您的团队的名字 (或许只有您一人!)
developer_url	"Web address"		// 您团队的主页. 必须把 http:// 卸载最前面.

manual		"URL"			// 游戏手册的地址; 也可以是本地目录.
					// 安装文件可以修改这个值
					// 以便在安装时修正文件位置.

icon		"path/to/icon"		// 图标必须为未压缩的 16x16 像素的 TGA 格式文件.
					// 为了使透明度正常, TGA 文件必须以拥有 Alpha 通道的 32-bit 模式储存
					// 路径为 相对 MOD 安装目录的 相对路径
					// (就是 gameinfo.txt 文件)
					// 还应该不含有 .TGA 扩展名.

//创建服务器会话
hidden_maps				// 括号内的地图将不会显示
{					// 但是通过 自动完成 列表
		"mapname" 1		// 和 changelevel 命令
		"mapname" 1		// 可以打开.
}

nodegraph	boolean			// 告诉引擎是否要生成地图的 nodegraphs.

当您创建一个新 MOD 的时候, gameinfo.txt 文件内的 标题 (title) 和 游戏类型 (type) 都是空的, 别忘了自己写上.

Note:在您更改 resource/clientscheme.res文件中 标题 所用的字体之前, 标题可能无法正常显示. Half-Life 2 使用一个独特定制的字体 ("HalfLife2") 里面只包含有一堆的特殊图形; 这个字体无法正常显示大多数的文本. 改变 clientscheme.res 文件内的 ClientTitleFontto 项的字体列表 来修正这个问题.

SteamAppId

GameInfo.txt 文件内有用的还有 SteamAppId 的值. 如果您打开 GameInfo.txt, 您将看到这样的一块:

SteamAppId 215 //This will mount all the GCFs we need (240=CS:S, 220=HL2).

SteamAppId 的值制定了游戏要使用的内容 (就是 GCF 文件).

Note:所有的 MOD 应该都使用 215 AppId, 除非有特殊的需要, 比如 218 是读取 Orange Box Source 引擎.

Warning: 选择您的 MOD 所以依赖的游戏时, 注意 您将不能依赖于那些其他游戏没有共享的内容. Warning: 要让 VAC 反作弊系统保护您的多人游戏 MOD, 请确定 MOD 是基于一个多人游戏. HL2DM 是个不错的选择.

Source 引擎游戏的 SteamAppId 的值可以在 Steam Application IDs 找到. 共享 GCFs 将在文件名中包含 'shared' , 这些文件可以随时被调用; 剩下的一切就是个人的问题了.

文件系统

这一段详细描述了文件系统中的大量组件

ToolsAppId

所有 GameInfo.txt 文件都有这样的一行:

ToolsAppId 211	//Tools will load this (ie: source SDK caches) to get
		//things like materials\debug, materials\editor, etc.

这是一个特殊的设定, 这个值被工具读取, 用来看看那些内容要被工具使用, 这不被游戏使用.

SearchPaths

GameInfo.txt 文件中的 SearchPaths 片段描述了在哪里可以找到游戏内容, 在您的硬盘和 Steam 缓存文件内. 要理解这部分内容, 我们必须去看看程序员是怎样调用 Source 引擎来读取游戏文件的. 程序员要访问的所有文件中代码都必须拥有一个 path ID. path ID 表示了一个或多个您的硬盘或是虚拟的 Steam 文件系统的目录.

举个例子, 您的游戏中大多数像 脚本 (scripts), 音效 (sounds), 模型 (model) 文件, 和 材质 (materials) 这样的资源以 "Game" path ID 被访问. 一个程序员或许会说, "打开一个在 'Game' path ID 里面的 scripts\weapon_m4a1.txt 文件". 如果您的 MOD 位于 C:\MyMod\Blasters, 并且您使用了 SteamAppId 240 这将会读取 Counter-Strike: Source 的内容, 它将会在这几个地方搜寻文件:

  • C:\MyMod\Blasters\scripts\weapon_m4a1.txt
  • <Steam install directory>\Steam\SteamApps\username\Counter-Strike Source\cstrike\scripts\weapon_m4a1.txt
  • <inside the virtual Steam file system>\cstrike\scripts\weapon_m4a1.txt

使用 path IDs 来描述文件, 就可以让程序员和开发人员无需担心这些不懂的文件目录. 他们可以使用关联到游戏目录的名称 (比如 scripts\weapon_m4a1.txt 或者 materials\brick\brickwall001a.vmt) 引擎和工具会帮您搜寻这些文件的位置, 只要 GameInfo.txt 描述了 "Game" path ID 的意义.

GameInfo.txt 文件里面, 有一个 "SearchPaths" 字段, 描述了 path IDs. 大多数的 MOD 无须改动这个路径, 他在您从 SDK launcher 运行 Create a Mod 的时候就建立了.

每一行的第一部分是 path ID 的名称, 第二部分是当 path ID 使用时要搜索的路径. 一个简单的例子是这样的:

SearchPaths
{
	TestPathID	C:\TestMod1
	TestPathID	C:\TestMod2
	TestPathID	C:\TestMod3
}

如果一个程序员需要写代码到 scripts\weapon_m4a1.txt 并且使用了 "TestPathID" 作为代码中的 path ID , 引擎就会搜寻如下位置:

  • C:\TestMod1\scripts\weapon_m4a1.txt
  • C:\TestMod2\scripts\weapon_m4a1.txt
  • C:\TestMod3\scripts\weapon_m4a1.txt

Since the Source games access most of their content in the "Game" path ID, they do some things for you automatically if you have a path ID called "Game". For each entry with a path ID of "Game":

  1. It adds a "GameBin" path ID, in <dir>\bin
  2. It adds another "Game" path in front of it with _<language> at the end. For example: c:\hl2\cstrike would get a c:\hl2\cstrike_french path added to it if you were running on a French-localized machine.

For the first "Game" search path:

  1. It adds a search path called "MOD" under the same folder.
  2. It adds a search path called "DEFAULT_WRITE_PATH".

The default SearchPaths that would be used in most mods are like this:

SearchPaths
{
	Game        |gameinfo_path|.
	Game        hl2
}

Normally, a path specifier (the part on the right side) is relative to the base directory --The directory where hl2.exe is found. If |gameinfo_path| precedes the path, then it is relative to the directory where GameInfo.txt file instead. For example, if the GameInfo.txt file were in C:\MyMod\Blasters, and it had a path like |gameinfo_path|SomeTestDirectory, then the path ID you were creating would refer to:

C:\MyMod\Blasters\SomeTestDirectory

For Counter-Strike: Source, the GameInfo.txt file has a SearchPaths section that looks like the one above. If your Counter-Strike directory was:

C:\Program Files\Valve\Steam\SteamApps\username\Counter-Strike Source

then it would be saying to look in these two directories:

  • C:\Program Files\Valve\Steam\SteamApps\username\Counter-Strike Source\cstrike

because GameInfo.txt exists here.

  • C:\Program Files\Valve\Steam\SteamApps\username\Counter-Strike Source\hl2

which only exists inside a virtual Steam file system.