Основы работы с объектами в GtkRadiant (NetRadiant)
Введение
В данной статье будет рассказано, как работать с entity в редакторе уровней типа GtkRadiant на примере версии 1.5.0.
Map-файл, который как раз редактируется с помощью Radiant'a, описывает следущие составляющие уровня:
- worldspawn - множество всех брашей и патчей уровня, не задействованных в trigger'ах и func'ах;
- entity - энтити (к примеру, target_give, item_haste и др.);
- trigger - триггер, который можно определить как симбиоз множества из брашей и/или патчей с entity;
- func - особая группа брашей или патчей;
- model - модель.
Создание и выделение объектов
Для помещения на уровень entity, trigger'а, модели'и или func'а (далее - объект) кликнуть правой кнопкой мыши на рабочее пространство редактора (неважно, в какой проекции) и выбрать нужный пункт. Следует помнить, что при создании trigger'a или func'a должен быть выделен как минимум один браш или патч, иначе создастся «пустой» trigger или func, и откомпилированный с такой «пустышкой» уровень не запустится в q3. При помещении же entity и модели'и наоборот все выделения в редакторе необходимо снять, иначе то, что было выделено, исчезнет (впрочем, иногда так и надо).
Entity list (список сущностей)
Для управления установленными объектами редактор содержит мощные инструменты: entity list и entity inspector.
Entity list - удобный список всех entity на уровне, в котором легко находить нужные из них для последующего вызова entity inspector или других целей (например, копирования). Для вызова entity list нужно выбрать соответствующую строчку меню view, либо использовать горячую клавишу L.
Примечание: горячие клавиши (в WinXP для GtkRadiant 1.5.0) можно посмотреть/поменять с помощью файла
SYSTEM_SECTION:\Documents and Settings\USER_NAME\Application Data\RadiantSettings\1.5.0\q3.game\shortcuts.ini
В появившемся окне можно искать нужный объект, а затем копировать его (клавиша SPACE), перемещать с помощью мыши, либо вызывать для ее редактирования entity inspector. Единственным недостатком этого инструмента является то, что в нем отображаются абсолютно все источники света, которых может быть не одна тысяча (да, бывают и такие чудовища), что очень мешает навигации в entity list.
Entity inspector
Логически следующий за entity list, но хронологически вызываемый раньше инструмент entity inspector вызывается горячей клавишей N при условии выделенного в редакторе объекта. Если объект создан только что и больше действий с выделением произведено не было, то можно вызывать entity inspector сразу, т.к. после создания любого объекта (в том числе браша или патча) выделение автоматически переходит на него. Если же надо выделить объект уже после, нужно выделить его с помощью левой кнопки мыши и клавиши SHIFT.
Для этого находим на рабочем пространстве нужный объект (пользуясь, если нужно, правой кнопкой мыши для промотки и колесом мыши для масштабирования), зажимаем SHIFT и кликаем на объект. Если зажать левую кнопку мыши, то можно выделить несколько объектов.
Так как описанный способ в точности повторяет алгоритм выделения брашей и патчей, для выделить так же trigger или func не выйдет. Для этого надо вместе с SHIFT зажимать CRTL (entity и модели тоже можно выделять с CTRL).
Итак, после выделения нужного объекта нажатие горячей клавиши N приведет к открытию entity inspector.
Две верхних области инструмента представляют собой мощную справочную систему по всем доступным объектам. Выбирая в верхнем окошке нужный (по умолчанию выбран тот, который был выделен при запуске inspector'а, а если не было выделено ничего - то последний использованный) можно найти все (практически) ключи для его настройки. Собственно говоря entity или модель в map-файле представляет собой список параметров, среди которых:
- Главный (свойственен всем entity)
- classname - определяет, чем собственно выделенная entity является;
- Второстепенные (могут быть определены для всех entity)
- origin - местоположение entity в формате «X Y Z»;
- target - метка, указывающая entity, следующую после данной в связи (connection);
- targetname - метка данной entity для ссылания на нее другой;
- Специфические (могут быть определены для некоторых классов entity)
- spawnflags - десятичное число, в котором кодируются булевые (да/нет) параметры entity (флаги);
- wait - время в секундах, через которое entity может быть использована снова («перезарядка»);
- другие…
Trigger'ам, func'ам свойственно все вышесказанное, только в их состав также входят браши или патчи.
Итак, вводя в поле Key любой параметр, описанный здесь или другой, найденный в справка Radiant'a или где-то еще, в поле Value его значение, и нажав ENTER (нажимать, находясь на поле Value) создастся параметр с заданным значение. Кнопками delete key и clear all можно соответственно удалить выделенную строчку с параметром или удалить все парамерты (кроме classname).
Так и происходит управление объектами (кстати, менять можно даже classname, но после этого с объекта спадет выделение)
Быстрое соединение target и targetname объектов
Правда, в случае target и targetname существует «быстрый механизм», минующий entity inspector (если в друх словах, то надо выделить два объекта в том порядке, в котором они соединяются и нажать CTRL+K), но использовать такой метод лично автор статьи настоятельно не рекомендует. Кроме того, что таким способом не сделать многих возможных в entity inspector вещей (например, соединение одного объекта с несколькими), но и теряется понимание сути маппинга, его красота и логичность (немного помпезно, но зато правда).
Свойства объектов
При обычном копировании или импортировании объектов из других map-файлов параметры target и targetname снабжаются индексами. К примеру, при копировании объекта (trigger'а, к примеру) с параметром target равным give_rocket, создастся такой же объект с параметром target равным give_rocket1, а если значение равно give_rocket1, то получим значение give_rocket2 и т.д.
Важная особенность: при копировании объекта выделение не переходит на новый объект.
Не имеет значение, каково значение параметра origin у entity, за исключением:
- entity пересекается с твердым брашем ;
- entity находится в «открытом пространстве»;
- В обоих случаях уровень при компиляции (BSP -meta) выдаст «утечку» (leak).
Некоторые "фишки" в работе с entity inspector
- При выделении некоторой строчки Key:Value в соответствующих полях появятся соответствующие значения; при этом если выделить другой объект и зайти в entity inspector, то поля будут содержать те же значения, которые там были во время закрытия. Таким образом можно удобно и быстро копировать строчки с параметрами из одного места в другое (к примеру, _remap от модели к модели).
- Если нужно для тестирования уровня передвинуть на некоторое время info_player_start (или аналог), но двигать обратно его потом будет лень, а наличие двух таких entity мешает стабильно спауниться, то можно установить в первом info_player_start параметр classname равным, к примеру, info_player_start2. Тогда он не будет никак отображаться на уровне и даст спокойно спауниться другому info_player_start'у.
Nt-kop4ik 26.08.2009