Всё о Готике
Работа с редактором мира Spacer


автор статьи - basilio58

Как уже было сказано выше, редактор находится в папке System (Spacer2.exe).
Для русификации (русификацию можно скачать у меня на сайте) программы распакуйте архив SpacerRus.rar в папку System.
Запустите «стартер» (GothicStarter_mod.exe). Вы увидите следующее окно:

Gothic Starter (mod)

В окне стартера отображены установленные Моды.
Нажимаем на кнопку «Editor Starten» запускаем редактор мира Spacer.
Программа zSpy, ведущая лог загрузки и ошибок, запускается автоматически.

Если нажимаем на кнопку «Spiel Starten», запускается выбранный в левом окне Мод, что удобно для проверки сделанных изменений. Можно сразу запустить Мод, и увидеть внесенные изменения.

Итак, запускаем Spacer:

Spacer main window

Открываем мир (файл, открыть ZEN…) и выбираем из каталога Готики какой-нибудь *.Zen файл (папка :\Gothic II\_work\data\Worlds), например Addon_Part_Canyon_01.zen, (тип файлов World compiled *.zen). Мы увидим следующее:

zen opened

Рассмотрим интерфейс программы. В главном окне программы находятся плавающие окна.
Окно «Objects», используемое для вставки и редактирования объектов. Окно «Vobs», в котором показаны все виртуальные объекты Вашего мира. Двойной щелчок по объекту в этом окне перенесёт камеру к объекту, и выделит его.
Окно «ObjectPages» используется для просмотра и редактирования специальных объектов, таких, как источники света, камеры, триггеры, и так далее.
В главном окне расположены также две маленькие панели со значками (горизонтальная и вертикальная) на которых расположены элементы управления. На горизонтальной панели:

  • sound properties button – Свойства звука. При включении этой кнопки в «объектные страницы» появляется окно, в котором можно прослушать существующие звуковые эффекты.
  • light properties button – Свойства света. При включении этой кнопки в «объектные страницы» появляется окно, в котором можно выбрать свойства источников света.
  • special vob properties button – Свойства специальных Vob.
  • camera properties button – Свойства камеры. При включении этой кнопки в «объектные страницы» появляется окно, в котором можно выбрать свойства и типы вставляемой камеры.

Теперь о перемещении по миру. Камера перемещается с помощью клавиш курсора, и клавиш над курсором (insert, home…). Для ускорения перемещения нужно одновременно нажать Shift.
Настроить скорость перемещения можно в меню «Установки, настройки основные, скорость перемещения». Чтобы мгновенно переместиться к определённому объекту, нужно дважды щёлкнуть по объекту в окне объектов, Вы переместитесь к выбранному объекту, и он будет выделен красными линиями.

Работа с объектами.

Все объекты в мире называются Vob (virtual object) или Mob (подкласс Vob). Выделение объектов производится щелчком мыши (можно нажать F3, при этом Вам будет удобнее выделить мелкий объект). Активный объект выделяется красными линиями. Здесь есть маленькая хитрость. Объект, например камень, обладает свойством «непроницаемости», ведь Ваш персонаж не должен проходить сквозь камни? Как же тогда перемещать непроницаемый объект? Для этого в свойствах объекта нужно опцию cdDyn поставить в FALSE, и обязательно применить изменение свойств, нажав кнопку «Apply».

Перемещать объект можно, нажав клавишу «М» на клавиатуре, или кнопку move button на вертикальной панели инструментов. Рассмотрим некоторые другие опции окна объектов.
  • VobName: имя объекта (в игре не отображается), необходимо и для ускорения поиска объекта, и, в некоторых случаях, например, для вызова функции триггера или камеры. Это мы рассмотрим позже.
  • visual: имя *.3ds файла, расположенного в директории \Gothic II\_work\data\Meshes.
  • showVisual: видим или не видим объект.
  • visualCamAlign: выравнивание камеры по отношению к объекту.
  • visualAniMode: функция «неподвижности» объекта. Если установлено в «Wind» то объект, например куст, дерево, не будет неподвижен. Например, колышущиеся на ветру кусты.
  • visualAniModeStrengh: амплитуда движения объекта.
  • vobFarClipZScale: «дальность видимости » объекта.
  • cdDyn: была рассмотрена выше («проницаемость»).
  • DynShadow: тень от объекта на земле.

Итак, мы рассмотрели свойства существующих объектов. Как создать новый объект? В этом же окне переходим на закладку «Создать». Если окно объектов не активно, нажмите кнопку «Activate»:

object create window

Попробуем вставить какой-нибудь предмет, например куст. Выделите строку oCMOB, кликните правой кнопкой мыши в окне Спейсера на свободном месте, и в контекстном меню выберите строку Insert [oCMOB]. Вот что у нас получилось:

mob created

Как Вы можете заметить, это ещё не куст! Что делать?
Необходимо назначить объекту oCMOB визуализацию.
В закладке «Модифицировать» выделите строку «Visual:», нажмите кнопку «файл» и укажите директорию объектов \Gothic II\_work\data\Meshes.
В нашем случае Mobs\Nature. Выберите какой-нибудь файл визуализации, например OW_BUSHES_01.3DS, нажмите кнопку «Apply».

Вот что мы получим:

mob - visual applied

Теперь перемещаем объект на его место, применяем (если это необходимо) опции «непроницаемости» и «движения на ветру». Всё очень просто, не так ли?
Всё, за исключением того, что объектов Готике больше тысячи…. Что же делать? Искать?
Не беспокойтесь, разработчики предусмотрели этот вариант! Для этого можно использовать «контейнер Vob».
Как с ним работать? Открываем какую-нибудь локацию, где, по вашему мнению, есть необходимые объекты, например NewWorld_Part_Forest_01.zen.

Вызываем контейнер Vob, нажав клавиши Ctrl+F2, появится окно контейнера. Как поместить объект в контейнер? Выделите нужный объект мышкой, и нажмите Alt+F2.
В контейнере появился выделенный объект. Ну, и так далее, помещаете в контейнер необходимые Вам объекты, и нажимаете кнопку «Действия», сохранить список Vob. Всё, теперь можно сбросить Спейсер, и открыть нужную Вам локацию.
Опять откройте по Ctrl+F2 контейнер, и приступайте к «построению нового мира».
НО! Обратите внимание! Вставлять нужно следующим образом:

  1. Выделить в контейнере объект, кликнув по нему мышкой.
  2. Поместить его в буфер обмена, нажав Ctrl+C.
  3. ОБЯЗАТЕЛЬНО кликнуть по пустому месту в окне Спейсера! (иначе возможен «вылет» программы, и Вы потеряете с таким трудом созданное!)
  4. Нажать Ctrl+V. Объект вставлен! Мои поздравления!

Далее вставляете все необходимые Вам объекты. Когда Вы закончите с объектами, можно очистить список Vob, «Действия» «Очистить все».

Мы разобрались с объектами, так сказать «не берущимися» в инвентарь главного героя. А как вставить, например меч, который можно подобрать с земли? Это объекты класса oCItem (scripted).
C этими объектами дело обстоит немного по-другому. Точно так же, в закладке «Создать», выделяем объект oCItem (scripted), кликаем в свободном месте рабочего окна Спейсера, в контекстном меню выбираем Insert [oCItem], появляется окно «Script-Instances».

item-instance insert window

Выделяем необходимый нам меч, например ITMW_2H_SWORD_M_01, и нажимаем кнопку «Вставить». Меч вставлен:

item inserted

Для того, чтобы опустить меч на землю, можно использовать кнопку на вертикальной панели инструментов «Применить физику». Меч упадёт на землю.

С объектами разобрались? Тогда пойдём далее.

Как вставлять персонажи?
Персонажи (Npc и монстры) вставляются скриптами функцией Wld_InsertNpc, на объекты класса «zCVobWaypoint» и «zCvobSpot».
Причём люди – на «zCVobWaypoint» (маленький флажок), а монстры на «zCvobSpot» (большой флажок).

waypoint and freepoint

Объекты класса «zCVobWaypoint» объединяются в путевые сети (WayNet), по которым запускаются поисковые алгоритмы путей. Чтобы посмотреть, что это такое «WayNet», откройте любую локацию, и нажмите клавишу «W»- вот, как это выглядит:

waynet

Как создать свою путевую сеть? Для начала нам необходимы минимум два вэйпойнта. Выделяем первый вэйпойнт, затем, удерживая Shift, кликаем по второму вэйпойнту (здесь лучше нажать F3). Около него должен появиться мигающий указатель.
Теперь объединяем наши вэйпойнты. На вертикальной панели инструментов есть значок: waynet - create button нажимаем, наши вэйпойнты объединились в сеть:

waynet created

Для добавления следующих вэйпойнтов, поступаем так же.

Теперь перейдём к более сложным объектам, например, мувер.
Пещеру на острове помните? И шипы, из земли выскакивающие? Давайте попробуем сделать нечто подобное.
В окне объектов находим объект класса «zCTriiger», «zCMover», применяем к нему визуализацию «EVT_TPL_METALTHORNS_2X2X05M.3DS» (как было описано выше), называем его «MOVER», и получаем:

mover - metalthorns

Но у нас получился обычный неподвижный объект!
Теперь нужно заставить его двигаться, сделать из него мувер.

В Спейсере есть окно «Объектные страницы»:

mover - edit page

Если у Вас его почему-то нет, нажмите кнопку на горизонтальной панели инструментов trigger properties button , «свойства Trigger». Далее, создаём первое положение мувера.

Перемещаем шипы в нужное исходное положение, и нажимаем кнопку «new key». Затем перемещаем шипы во второе положение и опять нажимаем «new key».
Теперь у нас есть два кейфрейма (положения) мувера. Можно проверить движение мувера, нажав кнопку «послать». Работает? Отлично!

Но нашим мувером что-то должно управлять? Для этого создадим объект класса «zCtrigger», получаем следующее:

trigger created

Теперь необходимо связать мувер и триггер.
В свойствах триггера «Trigger Target» нужно указать название нашего мувера, в нашем случае «MOVER».

В свойствах триггера есть следующие установки: ActivationFilter:
  • reactToOnTrigger:TRUE // Триггер реагирует на OnTrigger сообщение (Wld_SendTrigger)
  • reactToOnTouch:TRUE // Trigger реагирует на OnTouch сообщение (прикосновение).
  • reactToOnDamage:TRUE // Trigger реагирует на OnDamage сообщение (повреждение).
  • respondToObject:TRUE // Trigger реагирует на сообщения неодушевленных объектов.
  • respondToPC:TRUE // Trigger реагирует на сообщения игрока (на ГГ).
  • respondToNPC:TRUE // Trigger реагирует на сообщения “не ГГ”
  • startEnabled:TRUE // Разрешает работу триггера при старте.
  • respondToVobName: // Реагирует на сообщения Vob с этим названием.
  • numCanBeActivated:-1 // Как часто может включаться Trigger. (-1 = бесконечно)
  • retriggerWaitSec:0 // Время, необходимое для следующей активации.
  • damageThreshold:0 // Величина повреждения, необходимая для активации.
  • FireBehavior:
    • fireDelaySec:0 // Задержка включения, Сек.
    • sendUntrigger:TRUE // Посылка OnUntrigger сообщения.

Вот что получилось:

trigger modify

Но наш мувер не будет наносить повреждение персонажу. Необходимо добавить ещё один объект, «oCTouchDamage», наносящий повреждение. Но добавить, как потомок к нашему муверу. Как это сделать?
Выделяем наш мувер, в окне объектов «Создать» находим объект «oCTouchDamage», и кликаем правой кнопкой по муверу (при этом следите, чтобы выделение объекта не пропало). В контекстном меню выбираем строку «Insert [oCTouchDamage] as child of “MOVER”». В свойствах объекта выбираем тип повреждения «Damage Type», на Ваше усмотрение. Теперь необходимо задать размеры объекта «oCTouchDamage» следующим образом. Нажимаете кнопку «Edit the Bbox», появляется окно свойств. Нажимаете «Определить» и задаёте размеры объекта в сантиметрах. Затем «ОК» и «Stop». К сожалению размер объекта не всегда изменяет размер с первого раза, поэтому необходимо найти наш «oCTouchDamage» и проверить его размеры:

oCTouchDamage object

И, заодно, переместить объект в зону наших шипов. Теперь можно сохранить сделанное, и проверить мувер в работе, запустив игру.
Подобным же образом делаются и другие муверы, задвижки, лифты, и т. д., только без объекта «oCTouchDamage».А управлять мувером можно, например, рычагом, кнопкой, и так далее. Тут всё зависит от Вашей фантазии.

Пойдём далее.
Давайте попробуем создать картину, при сдвиге которой поднимается каменная плита. Создаем объект мувер, даем ему визуализацию «NM_KARTINA.3DS» и нажимаем “Apply”

mover - picture

Теперь перемещаем картину к стене в исходное положение (если не забыли, перемещать объект нужно, предварительно нажав клавишу «М» на клавиатуре, или кнопку move button), где она должна висеть, и в «объектных страницах» нажимаем кнопку «new key». Слева в «KeyFrames» нажимаем кнопку «new key», тем самым назначаем первый кейфрейм (первое положение) – «0» нашей картины.

Далее, перемещаем картину во второе положение («М» на клавиатуре, или кнопка move button ) и опять нажимаем кнопку «new key». Мы получили второе (кейфрейм) положение «1» нашей картины. Проверим работу мувера. В «объектных страницах» выделяем строку «TRIGGER» и нажимаем кнопку «Послать >>». Работает?

Параметры перемещения можно настроить в окне «Objects», в разделе “Mover”. Там же можно выбрать звук, сопровождающий перемещение мувера (в разделе “Sound”).
Но ведь картина сама по себе перемещаться не будет? Здесь есть несколько путей, все зависит от Вашей фантазии.
Можно просто вставить рычаг, объект oCMobSwitch (визуализация LEVER_1_OC.MDS) и в его свойствах указать цель «Trigger Target:KARTINA».
«KARTINA», это название нашей картины-мувера. Вот что у Вас должно получится (Рис. ниже).
Синяя линия указывает на то, что рычаг управляет картиной.

switch for picture mover

Проверим работу рычага. В «объектных страницах» выделяем строку «TRIGGER» и нажимаем кнопку «Послать >>». Все просто?

picture mover - modify window

Вместо рычага можно вставить, например, статую Инноса, и сделать её невидимой…(строка «show Visual: FALSE»).Тогда, подойдя к определённому месту, герой встанет на колени, и картина сдвинется, естественно!

Если в строке «useWithItem: » Вы укажете какую-либо инстанцию предмета, например ключ (ItKe_MyKey), то без ключа ничего работать не будет.

Таким же образом создаёте второй мувер – каменную плиту, а у картины в «Trigger Target:» укажите название Вашей стены (например “STENA”).

Можно вместо стены создать мувер с визуализацией «Pfx», дым, туман, и т.д., присоединив к нему потомком объект повреждения «oCTouchDamage». В общем, творите!

Немного об освещении Вашего мира. Свет бывает статический и динамический. Объекты освещения можно просто копировать из готовой локации (используя контейнер Vob), или создавать свои, вставляя объект zCVobLight, и изменяя его свойства в «Объектных страницах».

Разработчики предусмотрели разнообразные триггеры, которые Вы можете использовать в своём Моде. Например, Триггер-Лист выполняет не одно действие, а несколько. Причём порядок выполнения задач можно задавать в свойствах триггера.

Можно в качестве цели триггера использовать анимационную модель. Плавающих рыб помните? Это тоже триггер, но у него несколько целей. Это объект zCTriggerWorldStart. Вот как его реализовать.

Создаём объект zCTriggerWorldStart. В TriggerTarget указываем «NW_FISHMOVER_01» (обратите внимание, что ВСЕ Ваши муверы должны иметь одно и то же название). Это будут муверы, которые перемещаются в воде по определённой Вами траектории (по фреймам). То есть вы должны задать несколько положений, кейфреймов для движения Ваших рыб.

Этих муверов создаём столько, сколько необходимо вставить рыб. А к муверам вставляем потомками объекты zCVobAnimate:

Сделать это можно следующим образом.
Создаём объект «zCMover» и называем его, например «NW_FISHMOVER_01». Далее создаём объект zCVobAnimate, и применяем к нему визуализацию NW_MORPH_FISH_01.MMS. Копируем этот анимационный объект в буфер обмена (Ctrl + C), удаляем созданный объект.

«NW_MORPH_FISH_01.MMS» – это плавающая рыба, «NW_MORPH_SKATE_01.MMS» плавающий скат.

Далее находим в окне объектов вставленный ранее объект «NW_FISHMOVER_01» (он помечен зелёной точкойи дважды кликаем по нему Объект выделен. Теперь вставляем наш анимационный объект из буфера обмена (Ctrl + V). Готово! У Вас должно получиться так, как на левом рисунке

fish movers - objects window

Теперь, при запуске Вашего мира, рыбы будут перемещаться по заданным траекториям.

fish movers

Рассмотрим ещё один интересный объект, камеру. На горизонтальной панели инструментов нажмите кнопку , появится окно объектных страниц, выберем камеру, например «GRAVEYARD_01», и нажмём кнопку «Вставить», у Вас получится нечто похожее:

camera splines

Если у Вас не видны зеленые и белые линии, зайдите в меню «Вид правка, показывать невидимые линии, сплайны камеры». Нажав кнопку «Play», можно посмотреть движение камеры. «Stop», соответственно, остановить камеру.
По зелёной линии камера движется, а на белую направлен её объектив. Можно изменить траекторию движения камеры, выделяя точки (кейфремы), и перемещая их так, как нужно.
Однако это работа очень кропотливая и требует терпения. В свойствах камеры можно регулировать различные параметры движения камеры. Забегая вперёд, камера запускается скриптово, функцией:

//********************************************
Wld_SendTrigger("GRAVEYARD_01"); //поскольку наша камера называется«GRAVEYARD_01».
//********************************************

Для того, чтобы камера реагировала на функцию Wld_SendTrigger, в Спейсере (в свойствах камеры) необходимо поставить “reactToOnTrigger: TRUE”

Есть некоторые «баги» в работе Спейсера. Например, главное окно Спейсера не открывается! Для устранения этой неприятности нужно запустить редактор реестра (выполнить, regedit).

В редакторе реестра найти раздел «PIRANHA-BYTES Software GmbH, Settings». Необходимо удалить параметр «winMain». Иногда помогает такой способ. Открыть диспетчер задач Windows, и в закладке «Приложения» нажать кнопку «Переключиться».

 
 
Copyright © 2008 GotomanRambler's Top100

 
Hosted by uCoz