Ru/Gameinfo.txt: Difference between revisions

From Valve Developer Community
< Ru
Jump to navigation Jump to search
No edit summary
Line 1: Line 1:
Файл <code>GameInfo.txt</code> указывает SDK tools и движку Source какой контент нужен для данного мода или игры. Именно так утилиты SDK и движок узнают загружать ли им контент Half-Life 2, Counter-Strike, или Half-Life 2: Deathmatch когда они были запущены в директории мода. Это также маркер, по которому утилиты находят директорию мода.
Файл <code>GameInfo.txt</code> указывает SDK tools и движку Source какой контент нужен для данного мода или игры. Именно так утилиты SDK и движок узнают загружать ли им контент Half-Life 2, Counter-Strike, или Half-Life 2: Deathmatch когда они были запущены в директории мода. Это также маркер, по которому утилиты находят директорию мода.


{{note-ru|Для Half-Life 1 (GoldSrc), см. статью [[The liblist.gam File Structure|Структура файла liblist.gam]].}}
{{note-ru|Для Half-Life 1 (GoldSrc), см. статью [[The liblist.gam File Structure|Структура файла liblist.gam]].}}


Только программист, настраивающий проект мода в самом начале, когда-либо должен редактировать этот файл. В большинстве случаев, вам не придётся редактировать его, но если вы хотите сделать игру на контенте, отличном от контента Half-Life 2, тогда Вам потребуется изменить его. Однажды настроенный, этот файл должен распространяться вместе с контентом мода. Точно такой же <code>gameinfo.txt</code> должен лежать в папке мода всех его разработчиков.
В большинстве случаев Вам не придётся редактировать этот файл, но если вы хотите сделать игру на контенте, отличном от контента Half-Life 2, изменить пути поиска контента, иконки и другую информацию, тогда Вам потребуется редактировать его. Однажды настроенный, этот файл должен распространяться вместе с контентом мода. Точно такой же <code>gameinfo.txt</code> должен лежать в папке мода всех его разработчиков. Пользователи могут модифицировать gameinfo.txt на своё усмотрение. Однако следует учесть, если вы редактировали файл gameinfo.txt от какой-либо Source-игры, Steam при её запуске переизвлечёт оригинальный файл. Для исправления этой ошибки следует создать отдельный gameinfo.txt в другой папке и в параметрах запуска игры установить -game -"путь к папке с новым gameinfo.txt".


== Настройки пользовательского интерфейса (UI) ==
== Настройки пользовательского интерфейса (UI) ==
Line 12: Line 11:


  //Generic information (пер: "Общая информация")
  //Generic information (пер: "Общая информация")
  game "Game Title" // Это то, что отображается в игровом меню Steam.
  game "Название игры" //Это то, что отображается в названии запущенной игры в окне Windows и
  title "Game Title" // Это то, что отображается в игровом меню.
                                        //игровом меню Steam.
  title2 "..." //Можно пропустить.
  title "Заголовок игры" //Основной заголовок игры. Это то, что отображается в игровом меню.
  type singleplayer_only //Также может принимать значение "multiplayer_only".  Помогает игровому интерфейсу
  title2 "Дополн. заголовок"     //Дополнительный заголовок игры (может отсутствовать).
//узнать какие элементы UI необходимо создать в панели параметров. Пропустите для
  type singleplayer_only //Также может принимать значение "multiplayer_only".  Определяет какие
                                        //элементы UI необходимо создать в панели параметров. Пропустите для
  //модов, имеющих оба режима игры [[MP]] and [[SP]] (одиночная и сетевая).
  //модов, имеющих оба режима игры [[MP]] and [[SP]] (одиночная и сетевая).
  //Если установлено в "multiplayer_only", то вкладка "сетевая игра" в меню "параметры"
  //Если установлено в "multiplayer_only", то вкладка "сетевая игра" в меню "параметры"
Line 24: Line 24:
  //Новое в Portal:
  //Новое в Portal:
   nodifficulty boolean //Скрывает вкладку "Уровень сложности"
   nodifficulty boolean //Скрывает вкладку "Уровень сложности"
   hasportals boolean // Показывает вкладку "Порталы" на панели параметров
   hasportals boolean //Показывает вкладку "Порталы" на панели параметров
  //Multiplayer tab in the Options panel (пер: "Вкладка 'сетевая игра' в панели 'параметры' ")
  //Multiplayer tab in the Options panel (пер: "Вкладка 'сетевая игра' в панели 'параметры' ")
  nocrosshair boolean //Скрыть меню выбора прицела
  nocrosshair boolean //Скрыть меню выбора прицела
Line 32: Line 32:
   
   
  //Steam Games List (пер: Список игр Steam)
  //Steam Games List (пер: Список игр Steam)
  developer "Team name" //Название вашей команды (Или просто Ваше имя!)
  developer "Имя разработчика" //Имя или название команды разработчика, отображаемое в Steam
  developer_url "Web address" //Домашняя страница Вашей команды. Должно начинаться с <nowiki>http://</nowiki>.
  developer_url "Сайт разработчика" //Домашняя страница разработчика. Должно начинаться с <nowiki>http://</nowiki>.
  //--------------------------------------------------------------------------------------
  //--------------------------------------------------------------------------------------
  manual "Address" //Путь к руководству пользователя
  manual   "Адрес веб-страницы"         //Путь к руководству пользователя
  //Это может быть локальный путь. Программа-установщик  
  //Это может быть локальный путь. Программа-установщик  
  //может быть разработана так, что установит этот параметр равным  
  //может быть разработана так, что установит этот параметр равным  
  //установочному пути.
  //установочному пути.
  //--------------------------------------------------------------------------------------
  //--------------------------------------------------------------------------------------
  icon "path/to/icon" //Иконка должна быть несжатым TGA 16x16 пикселей.
  icon "путь к иконке" //Иконка, отображаемая в окне игры в Windows и меню Steam
                                        //Иконка должна быть несжатым TGA 16x16 пикселей.
  //Что бы работала прозрачность, TGA должен быть сохранён в 32-битном
  //Что бы работала прозрачность, TGA должен быть сохранён в 32-битном
  //режиме с активным альфа-каналом.
  //режиме с активным альфа-каналом.
Line 60: Line 61:
{{note-ru|Возможно, ваш заголовок (title) не будет отображаться правильно до тех пор, пока вы не отредактируете файл <code>resource/clientscheme.res</code> , и измените в нём шрифт заголовка. [[Half-Life 2]] использует специально разработанный шрифт, который имеет специфический набор символов; этот шрифт будет неправильно отображать большинство текстов.}}
{{note-ru|Возможно, ваш заголовок (title) не будет отображаться правильно до тех пор, пока вы не отредактируете файл <code>resource/clientscheme.res</code> , и измените в нём шрифт заголовка. [[Half-Life 2]] использует специально разработанный шрифт, который имеет специфический набор символов; этот шрифт будет неправильно отображать большинство текстов.}}


== SteamAppId ==
== Файловая система ==
За описанием информации о моде идёт описание файловой системы мода - здесь указывается какой контент следует просматривать и в каких папках искать ресурсы. Ниже приведена структура описания файловой системы:
           
FileSystem 
{
        SteamAppId     "номер AppId игры"      // указывает AppId игры в качестве основы для мода
        ToolsAppId     "номер AppId утилит"    // указывает AppId утилит для мода
        AdditionalContentId  "номер дополн. AppId"  // указывает дополнительный подключаемый контент AppId   
               
        SearchPaths  // в этой секции задаются пути для загрузки игрой ресурсов
        {
                Game "путь поиска №1"
                                //  и так далее ...
                Game "путь поиска №n"
                GameBin "путь к дополнительным бинарным файлам (DLL) №1"
                                //  и так далее ...
                GameBin "путь к дополнительным бинарным файлам (DLL) №m"
        }                     
}                                                           
 
Ниже каждый параметр будет рассмотрен более подробно.
 
=== SteamAppId ===
Ещё одна важная вещь в файле <code>GameInfo.txt</code> - это переменная <code>SteamAppId</code>. Если Вы загляните внутрь GameInfo.txt, вы увидите кусок, который выглядит примерно так:
Ещё одна важная вещь в файле <code>GameInfo.txt</code> - это переменная <code>SteamAppId</code>. Если Вы загляните внутрь GameInfo.txt, вы увидите кусок, который выглядит примерно так:


  SteamAppId 215 //This will mount all the GCFs we need (240=CS:S, 220=HL2).  
  SteamAppId "номер AppId игры" //This will mount all the GCFs we need (240=CS:S, 220=HL2).  
                // Пер: Это смонтирует все GCF, которые нам нужны (240=CS:S, 220=HL2)
                              // Пер: Это смонтирует все GCF, которые нам нужны (240=CS:S, 220=HL2)


Значение <code>SteamAppId</code> определяет, контент какой игры (т.е. [[GCF]] файлы) доступен этой игре/модификации.  
Значение <code>SteamAppId</code> определяет, контент какой игры (т.е. [[GCF]] файлы) доступен этой игре/модификации. Например SteamAppId 220 будет использовать как базу игру Half-Life 2, а SteamAppId 240 - Counter-Strike Source.


{{note-ru|Все модификации должны использовать специально выделенный для модификаций <code>215</code> AppId , до тех пор, пока не понадобится другой для чего-то специфического (например, для использования движка '''Orange Box''' используется код 218).}}
{{note-ru|Все модификации при создании утилитой Create a Mod по умолчанию используют специально выделенный для них <code>215</code> AppId (движок Source Engine 7) или <code>218</code> AppId (движок Source Engine 14), до тех пор, пока не понадобится другой для конкретной игры (например, для Half-Life 2 или Counter-Strike: Source.}}
{{warning-ru|Будьте осторожны при выборе игры, на которой будет основываться Ваш мод. '''Вы не можете копировать не-общедоступный (unshared) контент из других игр.'''}}
{{warning-ru|Будьте осторожны при выборе игры, на которой будет основываться мод. '''Вы не имеете права копировать не-общедоступный (unshared) контент из других игр, если собираетесь распространять мод. Если вы используете мод в личных целях, вы можете извлечь необщедоступный контент'''}}
{{warning-ru|'''Для защиты Вашей сетевой игры с помощью VAC, будьте уверены, что Ваш мод основан на сетевой игре'''. [[HL2DM]] обычно хороший выбор.}}
{{warning-ru|'''Для защиты Вашей сетевой игры с помощью VAC, будьте уверены, что Ваш мод основан на сетевой игре'''. [[HL2DM]] обычно хороший выбор.}}


Значения <code>SteamAppId</code> для основных игр Source можно найти в [[Steam Application IDs]]. Общедоступные GCF имеют слово 'shared' в своём имени файла и всегда могут быть использованы; всё остальное - собственность данной игры.
Значения <code>SteamAppId</code> для основных игр Source можно найти в [[Steam Application IDs]]. Общедоступные GCF имеют слово 'shared' в своём имени файла и всегда могут быть использованы; всё остальное - собственность данной игры.


== Часть о файловых системах ==
=== Раздел AdditionalContentId (только для игр и модов на Source Engine 14 и выше) ===
Эта часть описывает некоторые компоненты файловой системы в деталях
 
AdditionalContentId "номер дополнительного AppId" // подключение дополнительного контента
 
<code>AdditionalContentId</code> поддерживается только на движке Orange Box (Source Engine 14 и 15) и используется для подключения контента из игр, имеющих другой номер AppId в порядке указания. Данная функция позволит игре использовать контент из виртуальной файловой системы с указанным AppId. Например если вы задали основным SteamAppId 420 (Episode Two) и прописали AdditionalContentId (Portal), это значит, что вы сможете использовать модели, текстуры, звуки и карты из Portal в моде, при условии что папка Portal задана в разделе SearchPatchs (об этом разделе рассказано ниже). Учтите, что функция работает в игре, но НЕ работает в редакторе карт Hammer, поэтому при маппинге с использованием контента из нескольких игр необходимо распаковать содержимое GCF от игр с дополнительными AppId. В дальнейшем при завершении маппинга распакованные файлы можно удалить.


=== Раздел ToolsAppId ===
=== Раздел ToolsAppId ===
Line 83: Line 109:
  //такие вещи как materials\debug, materials\editor, и т.п..
  //такие вещи как materials\debug, materials\editor, и т.п..


Это специальный случай, который используется только утилитами, которым нужно загрузить особый контент. И он используется только утилитами и не используется игрой.
Это специальный случай, который используется только утилитами, которым нужно загрузить особый контент. Он используется только утилитами и не используется игрой. Для всех Source-игр используется только одна утилита - Source SDK, имеющая AppId 211.


=== Раздел SearchPaths ===
=== Раздел SearchPaths ===
Раздел <code>SearchPaths</code> файла <code>GameInfo.txt</code> описывает, где может быть найден игровой контент, на жестком диске или внутри файлов кэша Steam. Что бы понять эту часть, мы сделаем отступление о том, как программисты используют движок Source для доступа к файлам игры. Все файлы, к которым обращается программист в коде, должны иметь существующий <i>path ID</i> (Идентификатор пути). Path ID описывает одно или более местоположений на Вашем жестком диске или внутри виртуальных файловых систем Steam.
Раздел <code>SearchPaths</code> файла <code>GameInfo.txt</code> описывает, где может быть найден игровой контент, на жестком диске или внутри файлов кэша Steam. Пути могут быть как относительными (относительно hl2.exe), так и абсолютными. Все файлы, к которым обращается игра, должны иметь существующий <i>path ID</i> (Идентификатор пути). Path ID описывает одно или более местоположений на Вашем жестком диске или внутри виртуальных файловых систем Steam.


Например, большинство ресурсов Вашей игры, таких как скрипты (scripts), звуки (sounds), файлы моделей и материалы доступны через path ID равный <code>"Game"</code>. Программист может сказать "открой файл, называемый <code>scripts\weapon_m4a1.txt</code> внутри path ID с именем <code>'Game'</code>". Если вы запускаете мод в <code>C:\MyMod\Blasters</code>, и используете <code>SteamAppId 240</code> , который загрузил бы контент Counter-Strike: Source, тогда бы он искал файл в следующих местах:
Например, большинство ресурсов Вашей игры, таких как скрипты (scripts), звуки (sounds), файлы моделей и материалы доступны через path ID равный <code>"Game"</code>. Пользователь может сказать "открой файл, называемый <code>scripts\weapon_m4a1.txt</code> внутри path ID с именем <code>'Game'</code>". Если вы запускаете мод в <code>C:\MyMod\Blasters</code>, и используете <code>SteamAppId 240</code> , который загрузил бы контент Counter-Strike: Source, тогда бы он искал файл в следующих местах:


* <code>C:\MyMod\Blasters\scripts\weapon_m4a1.txt</code>
* <code>C:\MyMod\Blasters\scripts\weapon_m4a1.txt</code>
Line 94: Line 120:
* <code><Внутри виртуальной файловой системы Steam>\cstrike\scripts\weapon_m4a1.txt</code>
* <code><Внутри виртуальной файловой системы Steam>\cstrike\scripts\weapon_m4a1.txt</code>


Использование path ID для описания места хранения файла избавляет программиста и художника от опасений, что они работают с разными папками. Они могут использовать относительные к игровой папке имена (такие как <code>scripts\weapon_m4a1.txt</code> или <code>materials\brick\brickwall001a.vmt</code>) и движок, и утилиты найдут полный путь к файлу, независимо от того, где он находится,  только если <code>GameInfo.txt</code> описывает что значит path ID с именем <code>"Game"</code>.
Использование path ID для описания места хранения файла избавляет игрока, программиста и художника от опасений, что они работают с разными папками. Они могут использовать относительные к игровой папке имена (такие как <code>scripts\weapon_m4a1.txt</code> или <code>materials\brick\brickwall001a.vmt</code>) и движок, и утилиты найдут полный путь к файлу, независимо от того, где он находится,  только если <code>GameInfo.txt</code> описывает что значит path ID с именем <code>"Game"</code>.


В файле <code>GameInfo.txt</code> , этот раздел называется <code>"SearchPaths"</code>, в нём описываются path ID. Для большинства модификаций не требуется менять пути, после того, как вы создали мод, нажав '''Create a Mod''' из SDK launcher.
В файле <code>GameInfo.txt</code> , этот раздел называется <code>"SearchPaths"</code>, в нём описываются path ID. Если модификация не использует каких-либо ресурсов из игр, отличных от Half-Life 2 (кроме её карт), то менять пути, после того, как вы создали мод, нажав '''Create a Mod''' из SDK launcher, не требуется.


Первая часть каждой строки - это имя path ID, а вторая часть - это где искать файлы, когда используется этот path ID. Вот простой пример для иллюстрации, который бы Вы никогда не использовали, потому что там применяются абсолютные пути, включая буквы дисков, которых может и не быть на компьютере игрока:
Первая часть каждой строки - это имя path ID, а вторая часть - это где искать файлы, когда используется этот path ID. Вот простой пример для иллюстрации, который бы Вы никогда не использовали, потому что там применяются абсолютные пути, включая буквы дисков, которых может и не быть на компьютере игрока:
Line 107: Line 133:
  }
  }


Если программист напишет код, который запрашивает scripts\weapon_m4a1.txt и укажет "TestPathID" как path ID в коде, тогда движок будет искать файл в следующих местах:
Если программист или пользователь напишет код, который запрашивает scripts\weapon_m4a1.txt и укажет "TestPathID" как path ID в коде, тогда движок будет искать файл в следующих местах:


* <code>C:\TestMod1\scripts\weapon_m4a1.txt</code>
* <code>C:\TestMod1\scripts\weapon_m4a1.txt</code>
Line 116: Line 142:


# Добавляется path ID с именем <code>"GameBin"</code> , и путём <code><dir>\bin</code>
# Добавляется path ID с именем <code>"GameBin"</code> , и путём <code><dir>\bin</code>
# Добавляется другой путь с <code>"Game"</code> в начале, и заканчивающийся на <code>_<язык></code>. Например: <code>c:\hl2\cstrike</code> даст дополнительный путь <code>c:\hl2\cstrike_french</code>, если вы запускаете мод на компьютере с Французской локализацией.
# Добавляется другой путь с <code>"Game"</code> в начале, и заканчивающийся на <code>_<язык></code>. Например: <code>c:\hl2\cstrike</code> даст дополнительный путь <code>c:\hl2\cstrike_russian</code>, если вы запускаете мод на компьютере с русской локализацией.


Для первого пути поиска <code>"Game"</code>:
Для первого пути поиска <code>"Game"</code>:
Line 122: Line 148:
# Добавляется путь поиска с именем <code>"MOD"</code> в той же папке.
# Добавляется путь поиска с именем <code>"MOD"</code> в той же папке.
# Добавляется путь поиска с именем <code>"DEFAULT_WRITE_PATH"</code>.
# Добавляется путь поиска с именем <code>"DEFAULT_WRITE_PATH"</code>.
В абсолютных и относительных путях также могут присутствовать два специальных префикса-вставки:
* 1. |all_source_engine_paths| - просматривает содержимое в указанной после данного префикса директории во всех задействованных AppId, включая SteamAppID и все AdditionalContentId. Например |all_source_engine_paths|hl2 будет просматривать содержимое папки hl2 во всех подключенных файлах с разными AppId.
* 2. |gameinfo_path| - указывает игре ту папку в которой находится сам gameinfo.txt.


По умолчанию <code>SearchPaths</code> который может использоваться в большинстве игр выглядит примерно так:
По умолчанию <code>SearchPaths</code> который может использоваться в большинстве игр выглядит примерно так:
Line 144: Line 174:
потому что GameInfo.txt существует здесь.
потому что GameInfo.txt существует здесь.
* <code>C:\Program Files\Valve\Steam\SteamApps\username\Counter-Strike Source\hl2</code>
* <code>C:\Program Files\Valve\Steam\SteamApps\username\Counter-Strike Source\hl2</code>
который существует только в виртуальной файловой системе Steam.
потому что папка hl2 (как в реальной, так и в виртуальной файловой системе) расположена в той же директории, что и hl2.exe.
 
Если Вы хотите подключить в мод контент другого мода, то Вам будет необходимо прописать относительный или абсолютный путь к папке этого мода. Поскольку все Source-моды по-умолчанию находятся в одной папке SourceMods, то для подключения его контента нужно прописать строку <code>Game |gameinfo_path|.\..\имя папки с модом</code>. В данном случае игра сначала обратится к папке нашего мода поскольку в ней лежит gameinfo.txt, затем перейдёт на уровень выше (в данном случае папка SourceMods), после чего - в директорию нужного мода.
 
Помимо path ID <code>"Game"</code> существует также специальный path ID равный <code>"GameBin"</code>, используемый для поиска и загрузки игрой отдельных бинарных файлов. Создавать GameBin для игр нет необходимости - при создании path ID <code>Game "директория"</code> автоматически создаётся path ID <code>GameBin "директория"/bin</code>. Однако в тех случаях, когда нам надо использовать только бинарные DLL-файлы, например серверные плагины, нужно использовать GameBin. Например <code>GameBin "|gameinfo_path|addons/addon1"</code> подключит библиотеки аддона addon1, расположенного в <code>папке мода\addons</code>.
 
===  Пример ===
 
Ниже приведён пример, демонстрирующий принцип работы файловой системы.
 
FileSystem
{
  SteamAppId 420  // определение AppId базовой игры для мода - Half-Life 2: Episode 2
  ToolsAppId 211  // определение AppId утилит для мода
  AdditionalContentId 400 // подключение контента Portal
  AdditionalContentId 380 // подключение контента Half-Life 2: Episode 1
  AdditionalContentId 220 // подключение контента Half-Life 2
 
  SearchPaths
    {
Game |gameinfo_path|.           // загрузка контента данного мода
Game |gameinfo_path|.\..\Mod1   // загрузка контента мода Mod1 (лежит в той же папке
                                                  // что и данный мод (по умолчанию SourceMods))
Game |all_source_engine_paths|ep2      // загрузка контента Hl2:Ep2
Game |all_source_engine_paths|episodic // загрузка контента Hl2:Ep1
Game |all_source_engine_paths|portal  // загрузка контента Portal
Game |all_source_engine_paths|hl2   // загрузка контента Half-Life 2
GameBin "..\source dedicated server\hl2\addons\plugin1"   // загрузка бинарных файлов плагина
                                                                  // plugin1, установленного в папку
                                                                  // Source Dedicated Server\addons
    }
}
 
В данном случае наивысший приоритет имеют файлы нашего мода, затем файлы мода Mod1, затем игр - Episode 2, Episode 1, Portal, Half-Life 2 и наконец дополнительный плагин. Контент будет загружаться как из реальной файловой системы относительно hl2.exe в папке steamapps\username\half-life 2 episode two, так и из виртуальной. Но при этом будет задействован код только первых найденных DLL. Например если моды не имеют своих DLL, то будет загружен код Episode Two - соответственно нельзя будет например использовать код из Portal и как следствие портальную пушку, поскольку папка ep2 имеет больший приоритет, чем папка portal. Но в то же время можно будет использовать модели из этой игры, и например, создать сражение заскриптованной GlaDOS против охотников из Episode Two. Чтобы использовать физику из Portal, папка portal должна быть указана выше чем ep2.


{{otherlang:ru}}
{{otherlang:ru}}

Revision as of 15:06, 30 August 2009

Файл GameInfo.txt указывает SDK tools и движку Source какой контент нужен для данного мода или игры. Именно так утилиты SDK и движок узнают загружать ли им контент Half-Life 2, Counter-Strike, или Half-Life 2: Deathmatch когда они были запущены в директории мода. Это также маркер, по которому утилиты находят директорию мода.

Template:Note-ru

В большинстве случаев Вам не придётся редактировать этот файл, но если вы хотите сделать игру на контенте, отличном от контента Half-Life 2, изменить пути поиска контента, иконки и другую информацию, тогда Вам потребуется редактировать его. Однажды настроенный, этот файл должен распространяться вместе с контентом мода. Точно такой же gameinfo.txt должен лежать в папке мода всех его разработчиков. Пользователи могут модифицировать gameinfo.txt на своё усмотрение. Однако следует учесть, если вы редактировали файл gameinfo.txt от какой-либо Source-игры, Steam при её запуске переизвлечёт оригинальный файл. Для исправления этой ошибки следует создать отдельный gameinfo.txt в другой папке и в параметрах запуска игры установить -game -"путь к папке с новым gameinfo.txt".

Настройки пользовательского интерфейса (UI)

Много настроек UI, включая заголовок Вашей игры (game's title), обрабатываются gameinfo.txt. Ключи:

Template:Note-ru

//Generic information (пер: "Общая информация")
game		"Название игры"		//Это то, что отображается в названии запущенной игры в окне Windows и 
                                        //игровом меню Steam.
title		"Заголовок игры"	//Основной заголовок игры. Это то, что отображается в игровом меню.
title2		"Дополн. заголовок"     //Дополнительный заголовок игры (может отсутствовать).
type		singleplayer_only	//Также может принимать значение "multiplayer_only".  Определяет какие
                                        //элементы UI необходимо создать в панели параметров. Пропустите для
					//модов, имеющих оба режима игры MP and SP (одиночная и сетевая).
					//Если установлено в "multiplayer_only", то вкладка "сетевая игра" в меню "параметры"
					//будет добавлена первой, иначе - последней, если не задан "singleplayer_only".
fallback_dir	"Dir"			//Непроверенная функция (Работает в Goldsource)

//Новое в Portal:
 nodifficulty	boolean			//Скрывает вкладку "Уровень сложности"
 hasportals	boolean			//Показывает вкладку "Порталы" на панели параметров
//Multiplayer tab in the Options panel (пер: "Вкладка 'сетевая игра' в панели 'параметры' ")
nocrosshair	boolean			//Скрыть меню выбора прицела
nohimodel	boolean			//Hides cvar toggles checkbox for cl_himodels
					//Отображается правильно только, если cl_himodels установлено
nomodels	boolean			//Скрыть меню выбора модели во вкладке сетевой игры на панели параметров

//Steam Games List (пер: Список игр Steam)
developer	"Имя разработчика"	//Имя или название команды разработчика, отображаемое в Steam
developer_url	"Сайт разработчика"	//Домашняя страница разработчика. Должно начинаться с http://.
//--------------------------------------------------------------------------------------
manual	   "Адрес веб-страницы"	        //Путь к руководству пользователя
					//Это может быть локальный путь. Программа-установщик 
					//может быть разработана так, что установит этот параметр равным 
					//установочному пути.
//--------------------------------------------------------------------------------------
icon		"путь к иконке"		//Иконка, отображаемая в окне игры в Windows и меню Steam
                                        //Иконка должна быть несжатым TGA 16x16 пикселей.
					//Что бы работала прозрачность, TGA должен быть сохранён в 32-битном
					//режиме с активным альфа-каналом.
					//Этот путь относителен к установочному пути мода
					//(т.е. к тому, месту где GameInfo.txt) и не должен включать
					//расширение TGA файла.

//Create games dialog (пер: Диалог создания игры)
hidden_maps				//Карты, заданные между скобками, не будут появляться в интерфейсе
{					//но останутся доступными
	"mapname" 1			//(то есть появятся в автоматических списках)
	"mapname" 1			//для команд "map" и "changelevel".
}

 nodegraph	boolean			// Информация для движка: генерировать Node Graph или нет

Когда вы только создайте новый мод, gameinfo.txt не содержит ключей "title" и "type", так что не забудьте их добавить.

Template:Note-ru

Файловая система

За описанием информации о моде идёт описание файловой системы мода - здесь указывается какой контент следует просматривать и в каких папках искать ресурсы. Ниже приведена структура описания файловой системы:

FileSystem  
{
       SteamAppId	     "номер AppId игры"       // указывает AppId игры в качестве основы для мода
       ToolsAppId	     "номер AppId утилит"    // указывает AppId утилит для мода
       AdditionalContentId   "номер дополн. AppId"   // указывает дополнительный подключаемый контент AppId     
               
       SearchPaths   // в этой секции задаются пути для загрузки игрой ресурсов
       {
               Game	"путь поиска №1"	
                               //  и так далее ...
               Game	"путь поиска №n"	
               GameBin	"путь к дополнительным бинарным файлам (DLL) №1"
                               //  и так далее ...
               GameBin	"путь к дополнительным бинарным файлам (DLL) №m"
       }                      
}                                                             

Ниже каждый параметр будет рассмотрен более подробно.

SteamAppId

Ещё одна важная вещь в файле GameInfo.txt - это переменная SteamAppId. Если Вы загляните внутрь GameInfo.txt, вы увидите кусок, который выглядит примерно так:

SteamAppId "номер AppId игры" //This will mount all the GCFs we need (240=CS:S, 220=HL2). 
                              // Пер: Это смонтирует все GCF, которые нам нужны (240=CS:S, 220=HL2)

Значение SteamAppId определяет, контент какой игры (т.е. GCF файлы) доступен этой игре/модификации. Например SteamAppId 220 будет использовать как базу игру Half-Life 2, а SteamAppId 240 - Counter-Strike Source.

Template:Note-ru Template:Warning-ru Template:Warning-ru

Значения SteamAppId для основных игр Source можно найти в Steam Application IDs. Общедоступные GCF имеют слово 'shared' в своём имени файла и всегда могут быть использованы; всё остальное - собственность данной игры.

Раздел AdditionalContentId (только для игр и модов на Source Engine 14 и выше)

AdditionalContentId "номер дополнительного AppId" // подключение дополнительного контента

AdditionalContentId поддерживается только на движке Orange Box (Source Engine 14 и 15) и используется для подключения контента из игр, имеющих другой номер AppId в порядке указания. Данная функция позволит игре использовать контент из виртуальной файловой системы с указанным AppId. Например если вы задали основным SteamAppId 420 (Episode Two) и прописали AdditionalContentId (Portal), это значит, что вы сможете использовать модели, текстуры, звуки и карты из Portal в моде, при условии что папка Portal задана в разделе SearchPatchs (об этом разделе рассказано ниже). Учтите, что функция работает в игре, но НЕ работает в редакторе карт Hammer, поэтому при маппинге с использованием контента из нескольких игр необходимо распаковать содержимое GCF от игр с дополнительными AppId. В дальнейшем при завершении маппинга распакованные файлы можно удалить.

Раздел ToolsAppId

Все файлы GameInfo.txt будут содержать строку типа этой:

ToolsAppId 211	//Утилиты используют это (в том числе: source SDK), чтобы взять 
		//такие вещи как materials\debug, materials\editor, и т.п..

Это специальный случай, который используется только утилитами, которым нужно загрузить особый контент. Он используется только утилитами и не используется игрой. Для всех Source-игр используется только одна утилита - Source SDK, имеющая AppId 211.

Раздел SearchPaths

Раздел SearchPaths файла GameInfo.txt описывает, где может быть найден игровой контент, на жестком диске или внутри файлов кэша Steam. Пути могут быть как относительными (относительно hl2.exe), так и абсолютными. Все файлы, к которым обращается игра, должны иметь существующий path ID (Идентификатор пути). Path ID описывает одно или более местоположений на Вашем жестком диске или внутри виртуальных файловых систем Steam.

Например, большинство ресурсов Вашей игры, таких как скрипты (scripts), звуки (sounds), файлы моделей и материалы доступны через path ID равный "Game". Пользователь может сказать "открой файл, называемый scripts\weapon_m4a1.txt внутри path ID с именем 'Game'". Если вы запускаете мод в C:\MyMod\Blasters, и используете SteamAppId 240 , который загрузил бы контент Counter-Strike: Source, тогда бы он искал файл в следующих местах:

  • C:\MyMod\Blasters\scripts\weapon_m4a1.txt
  • <установочная папка Steam>\Steam\SteamApps\username\Counter-Strike Source\cstrike\scripts\weapon_m4a1.txt
  • <Внутри виртуальной файловой системы Steam>\cstrike\scripts\weapon_m4a1.txt

Использование path ID для описания места хранения файла избавляет игрока, программиста и художника от опасений, что они работают с разными папками. Они могут использовать относительные к игровой папке имена (такие как scripts\weapon_m4a1.txt или materials\brick\brickwall001a.vmt) и движок, и утилиты найдут полный путь к файлу, независимо от того, где он находится, только если GameInfo.txt описывает что значит path ID с именем "Game".

В файле GameInfo.txt , этот раздел называется "SearchPaths", в нём описываются path ID. Если модификация не использует каких-либо ресурсов из игр, отличных от Half-Life 2 (кроме её карт), то менять пути, после того, как вы создали мод, нажав Create a Mod из SDK launcher, не требуется.

Первая часть каждой строки - это имя 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

С тех пор как Source-игра получает свой контент используя path ID с именем "Game", она делает некоторые вещи для Вас автоматически, если у Вас есть path ID с именем "Game". Для каждой записи с path ID равным "Game":

  1. Добавляется path ID с именем "GameBin" , и путём <dir>\bin
  2. Добавляется другой путь с "Game" в начале, и заканчивающийся на _<язык>. Например: c:\hl2\cstrike даст дополнительный путь c:\hl2\cstrike_russian, если вы запускаете мод на компьютере с русской локализацией.

Для первого пути поиска "Game":

  1. Добавляется путь поиска с именем "MOD" в той же папке.
  2. Добавляется путь поиска с именем "DEFAULT_WRITE_PATH".

В абсолютных и относительных путях также могут присутствовать два специальных префикса-вставки:

  • 1. |all_source_engine_paths| - просматривает содержимое в указанной после данного префикса директории во всех задействованных AppId, включая SteamAppID и все AdditionalContentId. Например |all_source_engine_paths|hl2 будет просматривать содержимое папки hl2 во всех подключенных файлах с разными AppId.
  • 2. |gameinfo_path| - указывает игре ту папку в которой находится сам gameinfo.txt.

По умолчанию SearchPaths который может использоваться в большинстве игр выглядит примерно так:

SearchPaths
{
	Game        |gameinfo_path|.
	Game        hl2
}

В норме, путь (правая часть) - относителен к базовой директории - директории, где находится hl2.exe. Если |gameinfo_path| выше базовой директории, тогда пути относительны того места, где находится GameInfo.txt . Например, если файл GameInfo.txt находится в C:\MyMod\Blasters, и есть путь типа |gameinfo_path|SomeTestDirectory, тогда path ID , который вы создали, указывает на:

C:\MyMod\Blasters\SomeTestDirectory

Если для Counter-Strike: Source, файл GameInfo.txt имеет часть SearchPaths , которая выглядит как вышепредставленная. И если ваша папка с Counter-Strike:

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

тогда поиск файла будет производится в следующих двух папках:

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

потому что GameInfo.txt существует здесь.

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

потому что папка hl2 (как в реальной, так и в виртуальной файловой системе) расположена в той же директории, что и hl2.exe.

Если Вы хотите подключить в мод контент другого мода, то Вам будет необходимо прописать относительный или абсолютный путь к папке этого мода. Поскольку все Source-моды по-умолчанию находятся в одной папке SourceMods, то для подключения его контента нужно прописать строку Game |gameinfo_path|.\..\имя папки с модом. В данном случае игра сначала обратится к папке нашего мода поскольку в ней лежит gameinfo.txt, затем перейдёт на уровень выше (в данном случае папка SourceMods), после чего - в директорию нужного мода.

Помимо path ID "Game" существует также специальный path ID равный "GameBin", используемый для поиска и загрузки игрой отдельных бинарных файлов. Создавать GameBin для игр нет необходимости - при создании path ID Game "директория" автоматически создаётся path ID GameBin "директория"/bin. Однако в тех случаях, когда нам надо использовать только бинарные DLL-файлы, например серверные плагины, нужно использовать GameBin. Например GameBin "|gameinfo_path|addons/addon1" подключит библиотеки аддона addon1, расположенного в папке мода\addons.

Пример

Ниже приведён пример, демонстрирующий принцип работы файловой системы.

FileSystem
{
  SteamAppId	420   // определение AppId базовой игры для мода - Half-Life 2: Episode 2
  ToolsAppId	211   // определение AppId утилит для мода
  AdditionalContentId	400	// подключение контента Portal
  AdditionalContentId	380	// подключение контента Half-Life 2: Episode 1
  AdditionalContentId	220	// подключение контента Half-Life 2
 
  SearchPaths
   {

Game |gameinfo_path|. // загрузка контента данного мода Game |gameinfo_path|.\..\Mod1 // загрузка контента мода Mod1 (лежит в той же папке

                                                 // что и данный мод (по умолчанию SourceMods))

Game |all_source_engine_paths|ep2 // загрузка контента Hl2:Ep2 Game |all_source_engine_paths|episodic // загрузка контента Hl2:Ep1 Game |all_source_engine_paths|portal // загрузка контента Portal Game |all_source_engine_paths|hl2 // загрузка контента Half-Life 2 GameBin "..\source dedicated server\hl2\addons\plugin1" // загрузка бинарных файлов плагина

                                                                  // plugin1, установленного в папку
                                                                  // Source Dedicated Server\addons
   }
}

В данном случае наивысший приоритет имеют файлы нашего мода, затем файлы мода Mod1, затем игр - Episode 2, Episode 1, Portal, Half-Life 2 и наконец дополнительный плагин. Контент будет загружаться как из реальной файловой системы относительно hl2.exe в папке steamapps\username\half-life 2 episode two, так и из виртуальной. Но при этом будет задействован код только первых найденных DLL. Например если моды не имеют своих DLL, то будет загружен код Episode Two - соответственно нельзя будет например использовать код из Portal и как следствие портальную пушку, поскольку папка ep2 имеет больший приоритет, чем папка portal. Но в то же время можно будет использовать модели из этой игры, и например, создать сражение заскриптованной GlaDOS против охотников из Episode Two. Чтобы использовать физику из Portal, папка portal должна быть указана выше чем ep2.

Template:Otherlang:ru Template:Otherlang:ru:en, Template:Otherlang:ru:jp, Template:Otherlang:ru:pl