Архив
Новости
Текущие
Архив
Общение
Форум
Библиотека
Статьи
Стихотворения
Fan-Works
Рисунки
Зарубежные рисунки
Аудио
Видео
Флэш
Игры
Fan-Миссии
Установка FM
Thief 1 FMs
Thief 2 FMs
Thief 3 FMs
TDM FMs
Переводы
Прохождения
Обзоры
Demo
В Разработке
Отмененные
Редакторы
DromEd
T3Ed
DarkRadiant
Сайт
Ссылки
Авторы
О сайте
Просмотр каталога:
Простой | Подробный

На главную » Файловый Архив » Редакторы » DromEd » Tutorials » spike14_dromed.pl

Курсы Повышения DromEd-квалификации под руководством Spike14.


"Spike14’s Complete DROMED Tutorial" by Spike14
Автор перевода Jerk


- Запуск
- Что это?
- Манипулирование
- Общая Техника
- Действительно Начало
- Расширение
- Кисти Потока (Flow Brushes)
- Инвентарь Гаррета и Оружие
- Инвентарь
- Мы Продолжаем
- Изменение Размера Объектов
- Звуки
- Сохранение
- Двери
- Рубильники и Кнопки
- Контейнеры
- Свет
- Искусственный Интеллект (AI)
- Фнорды (Fnords)
- Полезные Скрипты
- Полезные Связи
- Читабельные Объекты
- Фроббинг (Frobbing)
- Мета-Свойства
- Разговоры (Conversations)
- Фоновый Звук
- Комментарии Гаррета
- Звуко-Ловушки (SoundTraps)
- Реакции
- Связь AIWatchObj
- Лестницы
- Лифты
- Телепорт-Ловушки (SoundTraps)
- Ловушки Излучения (EmitTraps)
- Источники и Приемники (Sources and Receptrons)
- Замки
- Ключи
- Отмычки
- Уровни Сложности
- Тайминги Кистей
- Комнатные Кисти (Roombrushes)
- Геймсис (GameSys) и Вы
- Схемы (Schemas)
- Цели
- Цели: Переменные (QVars)
- Цели: Видимые/Невидимые
- Цели: Текстовое Описание
- Комнатные Кисти и Цели
- Создание Магазина Инвентаря (Store)
- DarkFate Loader
- Список Комментариев Гаррета
- Послесловие
- Юридическая Информация

ЗАПУСК


Перед тем, как вы сможете вытворять в DromEd все, чего пожелает душа и тело, вам наверняка придется скачать и установить сие чудо.

Пожалуйста, заметьте, что эта программа написана для DromEd 1.32, не для DromEd 2 или DromEd Deluxe, хотя большинство написанных приемов скорее всего работают и в выше упомянутых версиях.

Заметка: Эта обучающая программа покрывает ВСЕ аспекты DromEd 1.32. Однако вы должны понимать, что здесь описаны не все возможности, доступные в Thief 2.

DromEd можно скачать с нашего сайта.

Теперь, открываем ZIP-архив с DromEd и распаковываем все файлы в вашу папку с Thief. Вас спросят – переписывать файлы или нет – отвечайте – ‘Перезаписать Все’. Как только распаковка файлов завершится, найдите в папке с Thief появившийся ‘DromEd.exe’, нажмите на нем правой клавишей, и выберите ‘Создать Ярлык’. Вырежьте этот ярлык и разместите туда, куда вам быстрее добраться – стартовое меню или рабочий стол.

Отлично! Теперь, вам нужно скачать пару вещей с DromEd Central (http://www.thief-thecircle.com/dromed) из разделов ‘Tools’ или ‘Essentials’

Вот что нам потребуется:

Пользовательское меню для DromEd 1 (Автор - Gonchong) - здесь, (2Kb)
Thief Objective Wizard - здесь, (169Kb)
Thief Book Wizard - здесь, (130Kb)
Thief Text File Wizard - здесь, (22Kb) и
Thief Mission Zipper - здесь (278Kb).

Скачайте их и установите их так как указано в файлах readme.

OK, а теперь запускайте DromEd и приготовьтесь создать какие-либо миссии!

ЧТО ЭТО?


Хорошо-хорошо, БЕЗ ПАНИКИ! DromEd чрезвычайно простой редактор, хотя и выглядит угрожающе. Наверное, вас смущает эта черно-фиолетовая расцветка, но ничего.

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

Также вы можете видеть по середине четыре окна, названными ‘right’, ‘3D’, ‘Top’ и ‘Front’. Окно под названием ‘Top’ (Вид сверху) будет одно из наиболее используемых вами. В обществе дромедерсов оно также известно как ‘Plan view’ (План, Схема). Вы можете увидеть что на трех 2D окнах (Front, Top и Right) изображен куб размером 4х4х4. ОК. Пришло время сказать, что этот куб это… это ‘кисть’ (brush).

Кисть – это все созданное и манипулируемое в мире DromEd (или Thief)! Есть множество типов кистей, базовые следующие:

ЛАНДШАФТ (TERRAIN):

- Fill Air (Заполнить Воздухом) – Заполняет затронутое пространство воздухом.
- Fill Solid (Заполнить Твердым) – Заполняет затронутое пространство твердыней.
- Fill Water (Заполнить Водой) – Заполняет затронутое пространство водой.
- Flood (Наводнение) – Мусор на форуме… э-э-э… Заполняет затронутое воздушное пространство водой. :)
- Solid-Water (Твердое-Вода) – Заполняет затронутое твердое пространство водой.
- Evaporate (Испарение) – Заполняет затронутое твердое пространство воздухом.

ОБЪЕКТ (OBJECT):

- Physical (Физические) – Обычные объекты.
- Lights (Светящиеся) – Предметы, могущие светится.
- Fnords (Фнорды) – Невидимые предметы, создающие эффекты.
- SFX – Видимые эффекты-частицы.
- Sound (Звуки) –Звуки (не всегда создаются, но часто могут быть использованы через связи).

КОМНАТА (ROOM):

- Default (По умолчанию)– Обычная комнатная кисть (позволяющая звуку распространяться).
- Other (Другие)– Комнатные кисти, созданные вами для создания эффектов, таких как связи ControlDevice, или автокарты.

ОБЛАСТЬ (AREA):

- Area (Область) – Позволяет управлять индивидуальными областями, находящимися внутри кистей области. Чрезвычайно полезны на огромных ‘многоэтажных’ уровнях. Выделите кисть-область и нажмите ‘Me Only’, чтобы видеть только кисть, находящиеся внутри этой кисти-области.

ПОТОК (FLOW):

- Flow (Поток) – Позволяет манипулировать водой (например: скорость потока воды, направление потока, является ли вода лавой, цвет ее зеленый или синий). См. соответствующий раздел для подробной информации.

Эти кисти могут быть созданы при нажатии на кнопки по центру снизу экрана, названные в соответствии с типом. В случае с созданием различных типов кистей ЛАНДШАФТА (TERRAIN), после того, как вы кликнули по “Brush” (Ландшафтная), используйте стрелочки у окошка “OP” для изменения типа кисти… также это можно делать выбрав уже созданную кисть, а можно и до ее создания!

Тип ОБЪЕКТА (OBJECT), создаваемого объектной кистью, может быть изменен выбором меню ‘EDITORS’->’OBJECT HIERARCHY’, затем выбором типа объекта (архитектуры) и нажатием ‘Create’. Теперь вы можете создавать этот тип объекта!

МАНИПУЛИРОВАНИЕ


Окей, теперь вы понимаете, ЧЁ видите, но раз вы создали кисть, то как ее можно двигать? Поехали.

Кисти можно двигать множеством способов. Наиболее точный способ – использовать окошки X,Y,Z,W,D,H,H,P,B.

Их вы можете видеть в левом нижнем углу DromEd-экрана… рассматривать их будем справа налево, и сверху вниз.

X - Координата X выбранной кисти. (НИКОГДА НЕ ДОЛЖНО БЫТЬ НУЛЕМ! ЭТО ВАЖНО!)
Y - Координата Y выбранной кисти. (НИКОГДА НЕ ДОЛЖНО БЫТЬ НУЛЕМ! ЭТО ВАЖНО!)
Z - Координата Z выбранной кисти. (НИКОГДА НЕ ДОЛЖНО БЫТЬ НУЛЕМ! ЭТО ВАЖНО!)
H – Хеадинг (Heading) выбранной кисти в градусах. (поворот головы влево-вправо)
P – Питч (Pitch) выбранной кисти в градусах. (наклон головы вперед-назад)
B – Банк (Bank) выбранной кисти в градусах. (наклон головы влево-вправо)
W – Ширина (Width) выбранной кисти в футах. (НЕ ДОЛЖНО ПРЕВЫШАТЬ 250!)
D – Глубина (Depth) выбранной кисти в футах. (НЕ ДОЛЖНО ПРЕВЫШАТЬ 250!)
H – Высота (Height) выбранной кисти в футах. (НЕ ДОЛЖНО ПРЕВЫШАТЬ 250!)

(Jerk: Почему не должны быть равны нулю X,Y и Z я точно и не понял, как и на счет W,D,H. По видимому, последнее – ограничение Dark Engine, но поскольку и при такой длине запускалось (главное, чтобы не превысилось критическое количество полигонов), то… шут его знает…)

О па! А сейчас обратите внимание на индикатор, именующийся следующим образом: “Grid Sz: 16”. Окей, это размер сетки, которую можете лицезреть на окнах просмотра, который определяет размер фиксирования. Используйте значение в пределах 11-16.

Окей, вот ваши размеры Номер-Сетка-Фиксация. Номер – это номер размера кисти… например – 16. Сетка – размер видимых сеток, и Фиксация – самый маленький размер, который вы можете использовать с фиксацией размера. Предлагаю инфу для Номеров 11-16:

Номер
Сетка
Фиксация

16  4  8  
15  2  4  
14  1  2  
13  0.5  1  
12  0.25  0.5  
11  0.125  0.25  

Как вы можете видеть, вам редко нужно будет пользоваться сеткой меньше 11. И помните, что кисти типа Объект не фиксируются! И никогда не выключайте фиксацию (кнопка ‘Use’ под ‘Grid Sz’). Если вы все-таки рискнете, то по ужи увязните в дер… глюках, поскольку линии не фиксировались!

Окей, вы уже делали много кубов, да так много, что просто тошнит от них! И вам охота делать какие-то другие формы!

Давайте мутить больше форм! Идите в меню ‘Shape’ (Форма), выберите понравившуюся, и теперь вы можете создавать кисть этой формы!

Вот список форм, поддерживающийся движком вора DARK ENGINE:

Cube (Куб)
Cylinder (Цилиндр)
Wedge (Клин)
Decahedron (Декаэдр - десятигранник)
Pyramid (Пирамида)

Окей, итак вы пытаетесь создать цилиндр, но вместо него появляется какая-то призма с четырехугольником в основании. Эй, а я хочу в основании круг!!! Это не правильно! Помочь может следующее: выберите тип формы ‘цилиндр’ (Cylinder), далее в этом же меню (Shapes) выберите Sides in Shape (Строн в Форме) и введите “10” в появившемся меню. Теперь создайте форму! О ба на! Вот и вышел 10-сторонний цилиндр.

Совет: И не пытайтесь ввести больше число, чем 10. Во-первых, не получится, во-вторых, если вы переборщите с полигонами, то Dark Engine устроит вам веселую тормознутую жизнь, или еще чего похуже – вылетит в Винды как фанера над Парижем. Подумайте о бедных соотечественниках с дохлыми письками (PC).

Окей, теперь вы умеете двигать кисти, или вручную измерять из размер (ну нифига себе!!!). А теперь разучим горячие клавиши DromEd:

Shift – Зажмите и перемещайте мышу, чтобы двигать кисть
Ctrl – Зажмите и перемещайте мышу, чтобы изменять размер кисти
Alt – Зажмите и перемещайте мышу, чтобы вращать кисть

W/S – Двигать вашу камеру (маленькая пурпурная фигнюшка в окне) вперед
X – Вращать вашу камеру назад
A – Двигать вашу камеру влево (пурпурная линия, отходящая от кружка, указывает, куда вы смотрите)
D – Двигать вашу камеру вправо
R – Смотреть вверх
V – Смотреть вниз
F – Смотреть по центру
1 – Банк влево (наклон головы влево)
3 – Банк вправо (наклон головы вправо)
2 – Банк по центру (выравнивание наклона головы)
2 – Банк по центру (выравнивание наклона головы)
Z – Шаг влево
C – Шаг вправо
Q – Шаг вверх
E – Шаг вниз
, (запятая) – Выбрать следующую сторону кисти
. (точка) – Выбрать предыдущую сторону кисти
Правый Клик – Показать меню (когда мышь находится над одним из окно просмотра), позволяет вам телепортировать камеру, скрывать сетку и др.
Enter – Подтверждение введенной команды
+ - Увеличить масштаб в окнах просмотра (кроме 3D)
- - Уменьшить масштаб в окнах просмотра (кроме 3D) (Не используйте Shift для активирования этой команды)
Delete – Удалить выбранную кисть

Эти горячее клавиши вы будете использовать в повседневном дроэдиторстве.

ОБЩАЯ ТЕХНИКА


Окей, настало время разобраться с проблемами, связанными с использованием текстур!

Если вы посмотрите в низу по центру окна DromEd, то заметите картинку с этой прикольной текстуркой, названной “Jorge”. Сейчас, если вы нажмете Alt+T, то появится Палитра Текстур (Texture Palette), в которой хранятся все загруженные текстуры.

Когда палитра появится, там будет лишь одна текстура: “Jorge”, и кнопки: “Sky” (Небо), “Put on Brush” (Поместить на Кисть), “Remove from Level” (Удалить из Уровня), и “Done” (ОК). Давайте разберемся, что делает каждая кнопка.

Jorge – Выберите эту текстуру (кликните по ней) и нажмите на “Put on Brush” для того, чтобы эта текстура поместилась на выбранную сторону активной кисти.
Sky – Текстура неба.
Put on Brush – При помощи этой кнопки текстура налаживается на выбранную сторону активной кисти.
Remove from Level – Удаление выбранной текстуры из вашего уровня.
Done – Закрыть палитру.

Окей, сейчас нам нужно больше текстур! Кликните по командному окну (справа внизу) и введите: “add_family core” (без кавычек), и нажмите Enter. Теперь внизу экрана должно выдасться сообщение: “Family Loaded” (Семейство текстур загружено). Теперь нажмите Alt+T и увидите, что вам доступны уже горы текстур!

Теперь, хорошо было бы знать эту команду, необходимую для загрузки семейства текстур. Общий ее вид: “add_family XXX”, где XXX – имя семейства. Однако гораздо легче это сделать при помощи расширения меню DromEd от Gonchong’а, которое я вам советовал скачать в начале. Если оно у вас установлено, то выберите меню “Textures 1” и выберите “Rescore”. В палитру текстур загрузилось семейство текстур под названием Rescore. Если вам не нравится семейство текстур, то можете его удалить при помощи команды “remove_family XXX”.

Скажем, вы загрузили три семейства, но при этом использовали лишь по несколько текстур с каждой. Теперь у вас почти забитая палитра, а вам нужно больше текстур! О нет! Что же вам ДЕЛАТЬ!?

Просто введите следующую команду и нажмите Enter: “compress_family all”. Если вы сейчас откроете палитру, то увидите, что там остались только те текстуры, которые вы использовали в миссии. Так что можете спокойно подгружать самые разнообразные семейства текстур. (Jerk: Да, альтернативно (при наличии того же расширения меню от Gonchong’а) можете выбрать меню “Textures 1” и затем выбрать “Compress Textures”).

А теперь нужно сделать ОЧЕНЬ ВАЖНУЮ вещь перед тем, как идти далее. Наш уровень не будет работать должным образом, если мы не загрузим скрипты! Поэтому, введите (в командную строку) следующую команду и нажмите Enter: “script_load convict”. Внизу экрана появится сообщение: “Module Loaded” (Модуль Загружен). Только что мы загрузили все скрипты, которые Thief использует в вашем уровне. Теперь наша дорога вперед свободна!

Заметка: Пользовательские Скрипты от GayleSaver не рассматриваются в этой обучалке.

ДЕЙСТВИТЕЛЬНО НАЧАЛО


Окей, мы знаем горячие клавиши, узнали о текстурах и объектах, а также о кистях. Мы уже умеем их создавать и манипулировать ими, но как в сущности нам создавать уровень? Окей, поехали!

Для начала разучим команду, которую просто необходимо знать. До тех пор как вы создадите источники света, будет чертовски важно посмотреть, как выглядит ваше творение в абсолютной темноте. Для этого введите в командном окне следующую команду: “light_bright”.

А теперь нужно осмотреться вокруг себя. Кликните правой мышкой по 3D-окну и зажмите ее. Теперь в появившемся меню выберите команду “Solid World” и отпустите мышь.

Не кричите еще, если ничего не произошло. Нажмите “W” для того, чтобы сдвинуться в пространстве вперед (и за одно активировать режим light_bright). Сейчас еще ничего не должно произойти (по крайней мере, в 3D экране).

Теперь выбираем меню “Tools” -> “Portalize” для запуска портализации. При портализации просчитываются все кисти. Если вы создадите какую-либо кисть в мире или передвинете уже существующую, вам придется опять портализировать уровень. Вот мы это и делаем!

Заметка: При изменении положения объектов или изменения текстуры кисти портализировать не надо.

Запомните, чем больше у вас кистей, тем дольше портализация занимает времени! Поскольку у нас только одна кисть по умолчанию, размером 16х16х16 с текстурой Jorge, то сейчас все будет почти моментально.

Как только портализация завершена, ваше окно 3D-простора стало показывать картинку – пространство воздуха 16х16х16, текстуированное Jorge’ом. Вы можете поразглядывать вокруг, но много тут не увидишь.

Почему бы сейчас нам не своротить что-то крутое, дабы показать процесс текстуирования? Окей, смотрим вниз, на индикатор “Face” (Сторона), значение которого должно быть “Default” (По умолчанию). Это означает, что все стороны показывают текстуру, указанную по умолчанию. Если нет, то какая-то сторона имеет другую текстуру.

Если вы хотите, чтобы сторона кисти опять показывала текстуру по умолчанию, выберите ее и введите “-1” в окно ‘Texture’ (не забывайте, что писать нужно без кавычек). Отлично, так как мы загрузили семейство текстур “Core”, то можем выбрать оттуда пару текстур.

Нажмите Alt+T и выберите текстуру, выглядящую как на улице. Нажмите ‘Put on Brush’ и затем ‘Done’. Шайтан! Ваша комната магически трансформировалась!

Ну, как я раньше сказал, это будет улица. Поэтому нам нужно небо! Нажмите два раз запятую (aka ‘Б’ в русской клаве), пока в окне ‘Face’(Сторона) не будет выбрано ‘Top’(Верх). Опять нажмите Alt+T, выберите ‘Sky’(Небо), затем – ‘Put on Brush’(Поместить на Кисть), а затем – ‘Done’(ОК) или Alt+T для того, чтобы закрыть палитру!

Вуаля! Отличная улица… но уж больно маленькая!

Ну, а теперь, чтобы пойти дальше, нам нужно оттащить кисть от ужасных (Jerk: он параноик!) координат мира 0,0,0 (Я уверен, что упоминал об этом раньше). Нормальным будет 500,500,500 – сделайте это (если вы не знаете как, то пройдитесь по окошкам X,Y,Z И там выставьте по 500!)

Теперь, уменьшите масштаб так, чтобы увидеть вашу кисть (Шмите правую мышу на любом из 2D окон и выбирайте команду ‘Zoom Out All’), а затем телепортируйтесь к ней (то же самое, но команда – ‘Teleport Camera’). Сделайте двор огромным! Сделайте ксить размером 32х32х32. А теперь портализируйте!

Окей. Сейчас вы наверняка задаетесь вопросом – ‘Как Гаррет знает, где ему стартовать?’

Ответ в том, что он ни хрена НЕ ЗНАЕТ! Если у вас нет Стартовой Точки, то Гаррет автоматически будет стартовать в точке с координатами 0,0,0 и не будет физическим объектом! Он сможет ходить сквозь объекты, будет игнорирован искусственным интеллектом… Это будет Армагеддон!!! Ну че, давайте режим эту маленькую задачку!

Идем в Объектную Иерархию (Editors -> Object Hierarchy), и открываем (нажимаем плюсик возле строчки) ‘Fnord’. Теперь выбираем ‘Marker’ (другими словами – не нажимаем плюсик) и нажимаем кнопку ‘Create’ (Создать).

Теперь у нас следующий тип объектной кисти: Маркер!

На одном из 2D окон зажмите и перетащите мышку, затем отпустите ее – создался маркер. Теперь зажмите кнопку Shift на клавиатуре и передвиньте маркер при помощи мыши к центру вашей комнаты. Теперь, если вы посмотрите вниз, то увидите, что посередине-внизу появилась задпись: ‘A Marker (1)’ или любой другой номер, например ‘2’. Этот номер является НОМЕРОМ ОБЪЕКТА! Номера объекта очень важны для связи объектов и для вас. Рекомендуется, чтобы вы использовали не больше, чем 1800 объектов. Звучит как много, но на самом деле это не так.

И так, мы создали маркер, который у нас будет служить стартовой точкой. Давайте его соответствующим образом и назовем. Под именем объекта есть кнопка ‘Properties’ (Свойства), которую и нажмем. Появляется ужасное окно, которое мы будем укрощать!

О свойствах объекта в большем объеме мы узнаем позже, а сейчас выберите самую верхнюю строчку окна, в которой отображается имя объекта (‘A Marker (1)’) и нажмите кнопку ‘Edit’ (Редактировать). Введите ‘StartingPoint’(Стартовая Точка) в появившемся диалоге и нажмите Enter, затем покиньте окно настроек.

Отлично! Теперь наша стартовая точка/маркер действительно называется соответствующим образом!

Ниже кнопки ‘Properties’ находится кнопка ‘Links’ (Связи), которую и нажмите. Появится окно с пустым списком. Это потому, что наш маркер еще ни с чем не связан! Но мы должны привязать ее к Гаррету собственной персоной!

Нажимаем ‘Add’ (Добавить). Далее заполняем строки в появившемся окне следующим образом:


Flavour:  PlayerFactory  
From:  StartingPoint  
To:  Garrett  

А теперь нажмите ‘OK’.

Ну а теперь нужно разобраться – что же мы наделали, да? В поле ‘Flavour’ мы указываем тип связи. Хугу – там СОТНИ связей! Связи заставляют объектов реагировать друг на друга. Ну, например, связь заставляет кнопку в особняке Рамиреза поднимать тревогу! В поле ‘From’ мы указываем объект, от которого связь исходит, а в поле ‘To’ – объект, к которому связь подключается!

Ну а теперь закройте окно связей. Нам оно пока не нужно!

Осталась еще одна вещь, которую мы не сделали. Выберите стартовую точку и нажмите кнопку ‘Properties’. Теперь нажмите кнопку ‘Add’ (Добавить), в открывшемся списке выбираем ‘S-Scripts’. Появится окошко, в котором мы можем указать скрипты (сценарии) для объекта. Введите в первую строку VictoryCheck, и затем нажмите ‘OK’ и выйдите из окна свойств.

Окей. Теперь мы можем пропутешествовать в мир игры! Это значит, что сейчас мы проверим наш уровень на деле. Пожалуйста, заметьте, что для того, чтобы выйти из режима игры вам понадобится нажать комбинацию клавиш Alt+E. Также не забудьте отметить, что у вас не будет ОРУЖИЯ И ИНВЕНТАРЯ. А также и ЗВУКА.

Ладно, хорошо, пора в игру. Жмите Alt+G!

Ну что, интересно? Держу пари, что вам хочется еще немного поковыряться в DromEd, не так ли?

РАСШИРЕНИЕ


Окей, чего бы нам не создать побольше комнат? Вы знаете как! Скорректируйте размер сетки, и убедитесь, что оставили небольшой просвет между комнатами. Если нет, то в уровне не будет стен, и это будет выглядеть очень странно.

Окей, у вас есть несколько комнат. Поздравляю! Но… если вы войдете игру, то вы не сможете попасть в другие комнаты… жутко!

Займемся дверьми. Для начала нам нужны дверные проемы. Поэтому, установите размер сетки “15” (‘Grid Sz’) и создайте кисть размером 4х4х8. Конечно, здесь учитывается, что ваши стены толщиной в 4 фута. Если они меньше/больше, то соответственно скорректируйте глубину/ширину/высоту вашего дверного проема!

Теперь разместите кисть на уровне пола, между двумя комнатами. Теперь раскрасть их в текстуры и портализируйте! Какой прекрасный дверной проем… без двери?

Так давайте создадим дверь!

Заходим в Объектную Иерархию (Editors->Object Hierarchy), далее идем по адресу Physical -> TerrainLike -> Doors -> Spinny_Door -> 4x8door -> MetalDoor21, нажимаем на кнопку ‘Create’ (Создать) и затем ‘OK’.

Теперь создайте дверь и разместите ее так, чтобы она полностью заслоняла дверной проем. И не забудьте – если дверь открывается не в ту сторону, ее всегда можно развернуть на 180 градусов (H).

Ок, пошли в игру. Дверь работает, не так ли? (Если нет, то убедитесь, что загрузили модуль ConVict – в командном окне наберите ‘script_load convict’) Если дверь исчезает в стене, то в редакторе при помощи Shift подправьте положение двери – разместите ее чуть подальше от стены, в которой она исчезает. Если вы увеличите масштаб (правая клавиша мыши на 2D-окне команда ‘Zoom In All’/‘Zoom Out All’), то можете подправлять положение с большей точностью.

Отлично, теперь у вас есть дверь! А чего бы вам не попробовать другие типы дверей? Валяйте, я могу подождать!

Окей, вы уже наигрались, и вам хочется узнать больше? А я знаю много чего интересненького!

А почему бы нам не закрыть дверь? Хммм? Ключи от двери Гаррету мы дадим попозже, а сейчас сделаем дверь закрытой И невозможной к открытию… да, правда, вы можете сделать дверь, которую нельзя открыть… но не храните за этими дверьми сокровища, а то люди обидятся! Такое может потребуется в городских картах, чтобы придать им реализма!

ОК, заходим в свойства двери (Properties), и добавляем свойство Engine Features -> Locked. Ставим галочку и нажимаем Enter.

Отлично, теперь ваша дверь заперта, и ее невозможно открыть… это было легко, не так ли?

А давайте добавим свойство, привязывающее ключ к двери! Добавляем к двери свойство Engine Features -> KeyDst. Галочку у ‘MasterBit’ не ставим… никто не знает, что этот пункту делает, в поле ‘RegionMask’ пишем “1”, ну а в поле ‘LockID’ пишите любое число, которое вам понравится.

Помните, что ‘RegionMask’ всегда должно быть “1”, а ‘MasterBit’ – без галочки, иначе вы рискуете столкнуться с тем, что DromEd вылетит в винды и никогда не вернет назад вашу не сохраненную миссию!

(Jerk: А строка ‘LockID’ означает группу ключей, которые смогут эту дверь. Эти ключи должны иметь в этой строке тоже значение, что и дверь.)

КИСТИ ПОТОКА (FLOW BRUSHES)


Обычно, если вы создаете водяную кисть, все что вы видите – это Jorge. Это не смешно, не правда ли?

Итак, давайте узнаем о КИСТЯХ ПОТОКА (flow brush)!

Для начала создайте небольшой бассейн с водой.

Отлично, теперь охватите воду кистью потока (Для ее создания в группе ‘Create’ внизу посередине выберите кнопку ‘Flow’)

Важное примечание: Flow brush и solid brush не могут быть использовать одну и туже центральную точку.

Вода в кистях потока может быть двух цветов: синяя или зеленая!

Выбираем кисть потока и нажимаем кнопку ‘Edit Group’(Редактировать Группу). В поле ‘Texture Name’(Имя Текстуры) вводим ‘bl’. Теперь вода синяя! (Jerk: также можете использовать ‘gr’ – вода будет зеленой.)

Давайте посмотрим, чего еще можно тут наворотить! Посмотрим на строчки

X change/sec (изменение по координате X в сек.)
Y change/sec (изменение по координате Y в сек.)
Z change/sec (изменение по координате Z в сек.)

Вот оно родимое – скорость потока воды в секунду в векторных состовляющих! Z – вверх и вниз, вниз – отрицательное число. X – север и юг, север – отрицательное число (Север – ‘вверху’ экрана). И Y – восток и запад, запад - отрицательно.

Jerk: После выхода из меню настроек кисти потока для того, чтобы обновить информацию в уровне, следует нажать кнопку ‘Update in World’ (либо альтернативно - портализировать). Также вы должны заменить, что в данном случае вы настраивали кисть потока группы 1 (‘Groupe’). Если вы потом создадите еще одну кисть потока, то можете использовать уже настроенную группу 1, либо новую – 2, 3 и т.д.

ИНВЕНТАРЬ ГАРРЕТА И ОРУЖИЕ


Окей, давайте создадим оружие и дадим его Гаррету. Найдите их в иерархии и создайте около вашего маркера – стартовой точки. (Jerk: Автор совсем обленился, ссылки придется давать самому… Правда мне тоже в лом давать полные ссылки… Меч: в командной строке наберите ‘find_obj sword’ – найденный предмет и создавайте. Дубина: ‘find_obj blackjack’. Острые стрелы: ‘find_obj broadhead’. Там же найдете и остальные типы стрел.)

Сделали? Теперь свяжите стартовую точку со всем оружием с типом связи ‘Contains’(Содержать). (Jerk: блин, не буду же я все за него писать. Это и так называется ‘Курсы повышения квалификации’, а не ‘Курсы для чайников’. Вы уже должны знать, как работать со связями!)

Теперь, если вы дали Гаррету оружие или инвентарь, вы должны понимать, что лучше Гаррету указать, что он имеет 45 стрел вместо одной, чем создавать отдельно все 45 стрел и привязывать их по отдельности к стартовой точке!

Итак, выбираем стрелу, заходим в свойства, добавляем ‘Engine Features -> Stack Count’. В появившемся окне вводим желаемое число стрел и нажимаем Enter и покидаем окно свойств. Помните, это можно делать со ВСЕМ. Морковка, сокровища, стрелы, бомбы… со всем.

Важная заметка: на счет стрел-кристаллов. Если вы хотите оснастить Гаррета, например, моховой стрелой (moss arrow), создайте объект EarthArrow. А если вы хотите разместить эту стрелу на уровне с расчетом на то, что Гаррет возьмет ее в течение игры, создайте EarthCrystal, находящийся в Physical -> Tulz -> Crystals. Это просто – Гаррет должен получать в начале миссии стрелы, а в игре собирать кристаллы. Если вы сделаете наоборот, то это может вызвать… вы догадались! Thief попрощается с вами. Будьте бдительны!

Не сложно, так ведь?

ИНВЕНТАРЬ


Итак, вы же не хотите, чтобы в вашем инвентаре ключ появлялись под названием просто “Key”(Ключ). Вот солюшен. Но вам сначала нужно определится: ‘Нужно ли вам включить мульти-язычную поддержку?’


Если вы ответите ‘Да’, то…

Открываем любим архиватором, поддерживающим ZIP-компрессию файл strings.crf в папке с Thief (или в папке Thief/Crfs, если вы используете DarkLoader/DarkFate Loader). Распаковываем файл objnames.str так, чтобы он оказался в “Thief\Strings\English\” (Или в “Thief\Crfs\Strings\English\”).

Теперь открываем objnames.str при помощи блокнота. При этом откроется целый список с именами объектов. Перейдите в самый низ и введите:

Name_ForceKey:”Ключ от квартиры, где трупы лежат”

Итак, Name_ForceKey в нашем случае – имя ключа для Thief, а то, что в кавычках – его описание, которое мы обычно видим в игре.

Сохраняем файл и возвращаемся в уровень и открываем свойства нашего объекта, которому мы хотим дать имя. В нашем случае – это Ключ Force’а. Введите в командное окно ‘find_obj key’ и создайте найденный ключ. Добавьте ему свойство Inventory -> Inventory Name и в появившемся поле введите Name_ForceKey .


Если вы ответили ‘Нет’ (Jerk: за это я убью вас!!!)

То откройте свойства объекта, добавьте Inventory -> Inventory Name и введите : Name:”НЕ ДЕЛАТЬ ТАК!!!”. Указанное в кавычках и будет Thief выводить в игре.

Jerk: из-за любителей так делать приходится патчить файлы миссий – специальными программами вскрывать файл миссии и заменять нужные байты… Не делайте так… Не будете же вы выпускать релизы отдельно – русская версия, английская версия ???

Скажем, вы создали свиток (Смотри раздел ‘Читабельные Объекты’), и если вы хотите, чтобы игро смог купить его… за 1000 золотом (наверняка там будет просто афигеная информация!) Если вы не сделаете то, что я предложу ниже, то он купит сие драгоценное творение… НА ШАРУ!!! Нееееее, воры на шару не получают информацию… Гы-гы, добавляем свойство Inventory -> Purchase Price и вводим цену!

Ну, получили вы это свиток, с именем и ценой… но без описания в магазинчике товаров! Опять открываем наш любимый strings.crf и распаковываем objdescs.str в “Thief\Strings\English\”.

В самом низу вставляем новый комментарий о том, что Force купил новенький 80Гб винчестер и что дарит свой старый первому, кто прочитает это место. Да, к сожалению узнал, что эта дискета c установленными Thief1 и Thief2 ухала в качестве талисмана Torch’у на службу…

Ну а потом добавляем объекту свойство Inventory -> Long Description, в котором указываем имя, которое использовалось в strings.crf.

Для более полной информации о создании объектов на продажу смотри раздел ‘Создание Магазина Инвентаря’

МЫ ПРОДОЛЖАЕМ


Ну а теперь давайте создадим тот ключ, который я вам обещал. Он находится по адресу Physical -> Key -> Key1. Запомните, что только нумерованные ключи являются действительно ключами. Сейчас разберемся.

Итак, созданный ключ свяжите со стартовой точкой. Теперь нам нужно, чтобы ключ открывал дверь, которую мы закрыли. Откройте свойства ключа и добавьте Engine Features -> KeySrc. Заполните это свойство ТАКЖЕ, как и заполнили свойство KeyDst для двери. Если вы поставите LockID не такой как у созданной двери, то ключ просто не будет открывать эту дверь. Он будет подходить к той двери, которая будет иметь с ним одинаковое LockID.

Валяйте! Идите в игру и откройте дверь!

ИЗМЕНЕНИЕ РАЗМЕРА ОБЪЕКТОВ


Вы наверняка уже пытались изменять свойства объекта… и обламывались. Если вы измените размеры стола Physical -> Furniture -> Tables -> Table на, скажем, 60х20х3, то вы сожжете ходить сквозь почти всего стола! Ррррр!

Не паникуем… как и для многих вещей, решение коротко!

Открываем свойства стола, находим свойство (оно уже создано) Physical -> Model -> Dimensions и устанавливаем нужные нам размеры!

Заметьте, что DromEd обрабатывает все объекты как квадраты… что часто заметно в игре!

Jerk: Размеры ‘квадрата’ выставляются в строке ‘Size’ в окошках X, Y, Z. В строке ‘Offset’ выставляется смещение от центра (чтобы куб ‘рос’ не от центра). Вам могут помочь режимы View -> Physics Model и View -> Physics BBoxes.

ЗВУКИ


Хм, сейчас вы наверняка ОБОЗЛЕНЫ на меня, потому что уровень БЕЗ ЗВУКА. Это легко сделать! Выберите каждую из созданных кистей в вашем уровне и нажмите Shift+Insert. При этом каждую из кистей охватит так называемая комнатная кисть (room brush) фиолетового цвета. Теперь следует выбрать каждую из созданных комнатных кистей и нажать внизу-посередине кнопку ‘Compile’.

А теперь займемся поддержкой EAX-звука. В DromEd доступны следующие варианты комнат:

Ctrl-F1
Small Dead
Нежилая маленькая комната

Ctrl-F2
Small Normal
Обычная маленькая комната

Ctrl-F3
Small Live
Жилая маленькая комната

Ctrl-F4
Large Dead
Нежилая большая комната

Ctrl-F5
Large Normal
Обычная большая комната

Ctrl-F6
Large Live
Обычная жилая комната

Ctrl-F7
Dead Hallway
Нежилая прихожая

Ctrl-F8
Normal Hallway
Обычная прихожая

Ctrl-F9
Live Hallway
Жилая прихожая

Ctrl-F10
Tunnels
Туннели

Ctrl-F11
Caverns
Пещеры

Ctrl-F12
Sewers
Коллекторы

Например, мы хотим сделать маленькую нежилую комнату. Для этого выбираем нужную нам комнатную кисть, (не забыв откомпилировать ее, нажав кнопку ‘Compile’) и нажимаем Ctrl+F1.

Вот и все! Теперь ваш уровень имеет поддержку EAX!

Теперь перед тем, как зайти в игру нужно создать базу данных комнаты и AI! Для этого последовательно выберите в меню пункты Tools –> Build Room Database, и Tools -> Build AI Room Database. А теперь в игру!

Ну разве звук не прекрасен?

И помните – каждый раз, как вы создали новую комнату, то нужно обновлять базы данных комнат и AI.

СОХРАНЕНИЕ


Сохраняйтесь по чаще! Создайте папку в вашей Thief-директории, где буде храниться ваша миссия. Каждый раз, когда вы сохраняете ее, используйте новый номер. Скажем, ваша миссия называется “BaffTaff” (а так и называется моя миссия), сохраняйтесь вроде “BaffTaff_1.mis”, “BaffTaff_2.mis”, и т.д.

ДВЕРИ


Задумывались ли вы – как какой-то объект заставить стать дверью? Ну, для этого нужно использовать соответствующий скрипт, а за тем – и свойство.

Давайте поясним это!

Создадим BaffBanner. Это с понтом декоративная вещица. Заделаем так, чтобы этот баннер был супер-мега-скрытой дверью!

Открываем его свойства, добавляем S -> Scripts. Вводим в первую строку “StdDoor” и нажимаем Enter.

Этот скрипт добавляет банеру свойства двери – теперь банер можно открыть. Если вы хотите, чтобы дверь была закрыта, и при попытке ее открыть раздавался звук закрытой двери, то нужно добавить еще один скрипт: “LockSounds”. Ну, это совсем не сложно!

А теперь свойство! Добавляем Door -> Rotating.

Появившееся окно может смутить вас, но нам не нужны все его свойства! Нам нужны Base Speed (Скорость открытия двери), Open Angle (Угол открытия двери), Closed Angle (Угол закрытия двери), Clockwise? (По часовой стрелке?) и Axis (Ось).

По умолчанию в списке Axis выбрана ось Z. Если вам нужно, чтобы дверь открывалась по другой оси, то можете выбрать любую другую. Если в Clockwise? установлена галочка, то дверь будет открываться по часовой стрелке, в противном случае – против.

Теперь разберемся с углами. Углы указываются относительно угла положения двери. Напимер, если дверь повернута под 70 градусов (H: 70), то угол открытия будет 70+величина Open Angle. Если дверь открывается по часовой стрелке, то Open Angle обычно равен 270, если нет – то 90. Угол закрытия (Closed Angle) обычно равен 0.

Введите необходимые значения и нажмите Enter.

Однако мы еще не добавили все необходимые свойства. Если вы сейчас зайдете в игру, то заметите, что дверь невозможно открыть – он просто не подсвечивается.

Действие, которое происходит когда игрок использует/активирует предмет, называется фроббингом (frobbing).

Итак, нам необходимо сообщить DromEd, что если делаем фроббинг, то DromEd должен выполнить скрипт StdDoor. Поэтому добавляем следующее свойство банеру: Engine Features -> FrobInfo. Все его пункты являются отключенными – [None]. Нам нужно в пункте WorldAction выбрать “Script”. Теперь в при действии в игре будет выполняться скрипт, указанный в свойстве S -> Scripts.

Теперь запустите игру и попробуйте открыть банер-дверь… работает, не так ли?

Продолжим наши извращения. Создадим постель (bed). Даже не пробуйте использовать архитектуру “Bed” – ее элементы вызовут вылет DromEd. Вместо этого используйте “BedParts” – это сработает!

Теперь добавьте к ней скрипт “StdDoor”, если потребуется - “LockSounds”, а затем добавьте свойство FrobInfo и выберите в нем Scripts в пункте WorldAction. Сделаем так, чтобы постель отъезжала!

Добавляем свойство Door-Translating. Диалог похож на предыдущий, но имеет свои отличия. Во-первых, здесь отсутствует “Clockwise?”. Во-вторых, позиция открытия (Open Position) показывает, как долго дверь будет отъезжать в сторону, прежде чем остановится. Если вы хотите, чтобы дверь двигалась в обратную сторону, установите отрицательное значение. Позиция закрытия (Close Position) обычно равна 0.

Ну а теперь проверьте! Впечатляет, не так ли?

РУБИЛЬНИКИ И КНОПКИ


Рубильники (Switch) и кнопки (Button) – специальные объекты, которые используются во многих случаях создания эффектов. Они порождают сигналы ControlDevice.

Кнопки порождают однотипный сигнал ControlDevice, полезный для активирования ‘односторонних’ эффектов, таких как сигнализация, или DestroyTraps (Ловушка-Уничтожение).

Рубильники используют двусторонние сигналы ControlDevice (вкл/выкл), которые полезны для вещей, которые могут быть включены И отключены. Например, двери или свет.

ControlDevice – это сложная тема, но я попытаюсь рассказать вам все, что смогу об этом.

Я знаю следующие скрипты, порождающие сигналы ControlDevice

StdLever  Вкл/Выкл – Двустороннее действие (по умолчанию для рубильников)  
StdButton  Вкл - Одностороннее Действие (по умолчанию для кнопок)  
TrigSlain  Вызывает одностороннее действие, когда кого-то убили.  
TrigUnlock  Вызывает вкл/выкл, основанное на состоянии замка (открыт/закрыт)  
TrigDoorOpen  Вызывает вкл/выкл, когда дверь открыта/закрыта  
TrigRoomPlayer  Срабатывает, когда игрок входит в комнату  
TrigRoomCreature  Срабатывает, когда кто-то входит в комнату

Также вы можете использовать реакции тревоги (alert responses) и разговоров (сonversations), чтобы заставить сработать ControlDevice, но это будет обсуждаться позже! И помните, вкл/выкл ControlDevice также может, в теории, обрабатывать односторонние объекты. Например, рычаг может вызвать DestroyTrap (Уничтожение объекта) при первом использовании, а дальше будет бесполезен.

Совет: если вам нужно фроббировать (использовать) объект дважды, прежде чем он сработает, попробуйте связать рычаг с инвертером (inverter), а инвертер – с целевым (конечным) объектом(ами). Инвертер меняет смысл связи в обратную сторону.
(Jerk: Предлагаю более легкий и интересный вариант. Выберите рычаг, зайдите в его свойства, выберите Tweq->JointsState, нажмите “Edit”, и измените AnimS с “[None]” на “Reverse”. Теперь для того, чтобы дверь, связанная с рубильником, открылась, вам нужно дважды дернуть за рубильник.)

Помните, если вы используете рычаг для того, чтобы открыть/закрыть дверь, и при этом хотите, чтобы игрок не мог открыть ее обычным способом, сделайте следующее: в свойствах двери добавьте FrobInfo, в котором в пункте WorldAction выберите “Script, Ignore”. Теперь в игре дверь можно будет открыть только при помощи рычага.

Также помните, что состояние рычага может быть изменено при помощи связанного с ним ControlDevice. Например, если вы хотите, чтобы один рычаг был в том же положении, что и другой, свяжите их между собой (один управляет вторым, а второй – первым), любой из них свяжите с управляемым объектом. Можете использовать несколько рычагов, если хотите!

Вы можете обратить рычаг так, чтобы он во включенном состоянии посылал ‘выключено’ по умолчанию. Для этого откройте свойства рычага, выберите Tweq->JointsState, нажмите “Edit”, и измените AnimS с “[None]” на “On”.

Jerk: Поскольку автор полностью опустил практическую часть, то придется писать самому…

Начнем с самого простого – свяжем рубильник с дверью. Рубильники находятся в Gizmo->Switches->Levers. Допустим, Up/Down Switch. Связываем его с дверью. Добавляем связь: Flavor: ControlDevice; From: НомерРубильника; To: НомерДвери. Запускаем DromEd и убеждаемся, что дверь открывается и закрывается.

О том, как сделать, чтобы дверь нельзя было непосредственно открыть, а использовать для этого рычаг, инвертировать рычаг (чтобы дверь была по умолчанию открыта) – читай выше.

Займемся наиболее сложной темой – скриптами. StdLever и StdButton я пропускаю по тем причинам, что это наиболее известные скрипты, и применять их надо по принципу и подобию – рассмотрите любую кнопку/рычаг.

TrigSlain
Этот скрипт необходимо установить на жертву :). Создаем любое создание. В свойствах добавляем ему скрипт (S->Scripts) и в любую пустую строку прописываем “TrigSlain”. Теперь мы должны связать эту ходячую бомбу с чем-то ControlDevice-связью. Например, с рычагом – это наименее болезненный вариант. В свою очередь рычаг связывайте с тем, что нужно. Например, можете телепортировать страже подмогу, натравить на Гаррета пару бомб, провалить задание игры и т.д.

TrigUnlock
Этот скрипт пригодится, когда вы вскрываете дверь отмычками и, наконец, достигли своей цели – открыли замок (или закрыли ключом). Как и DromEd, он немного баговый, но работает. Создаете дверь, делаете так, чтобы ее можно было открыть ключом/отмычками. Добавляете ей скрипт TrigUnlock и даете ей связь ControlDevice с рычагом. Теперь если вы в игре будете открывать/закрывать дверь ключом, то рычаг будет на это реагировать. Недостаток: дверь не удается открыть вручную (когда она уже открыта).

TrigDoorOpen
Этот скрипт похож на предыдущий, но еще более баговый :). Срабатывает тогда, когда игрок открывает дверь. Создаете дверь, добавляете ей скрипт TrigDoorOpen и даете ей связь ControlDevice с рычагом. Теперь если вы в игре будете открывать/закрывать дверь ключом, то рычаг будет на это реагировать. Недостатки: как и в предыдущем случае дверь частенько не удается открыть ручками, а только при помощи ключика. А частенько удается, но дверь ‘уезжает’ в сторону. Spike14 сказал по этому поводу, чтобы я не мучался – такие проблемы у всех.

TrigRoomPlayer
Этот скрипт действует, когда Гаррет входит в комнату. Выбираем любую комнатную кисть (room brush). По умолчанию они являются копиями друг друга. Нам нужно выделить ту самую, где будет отслеживаться появление игрока. Выбираем ее, нажимаем ‘Create’(Создать) посреди экрана внизу. В появившемся окне “Room Hierarchy” (Иерархия Комнат) нажимаем ‘Add’(Добавить). В появившемся окне вводим имя комнаты. Что-то типа ‘Taget’. Жмем ОК и нажимаем ‘Create’ в окне “Room Hierarchy”. Все, наша комната оригинальна. Выбираем ее и нажимаем ‘Edit’(Редактировать). В ее свойства добавляем скрипты (S->Scripts) и вводим там “TrigRoomPlayer”. На последок жмем кнопку 'Compile' (что в главном окне DromEd). Теперь известным способом создаем ControlDevice связь с рычагом.
Да! Не забывайте, что для этих вещей необходимо загрузить convict!

TrigRoomCreature
В отличие от TrigRoomPlayer этот скрипт срабатывает, когда любое существо находится в комнате. Используется аналогично.

КОНТЕЙНЕРЫ


ОК, теперь вы можете делать двери и закрывать их, создать Гаррета, сделать звук. Но вы не можете создать эти сундучки с добром внутри!

Один из них находится в Physical->Containers->FootLocker. Создайте его и создайте объект, который будет внутри. Чтобы не обидеть Гаррета, создайте что-то драгоценное. Например, диадему - Physical->Treasure->Swag->Jewelry->Tiara.

Теперь свяжите сундук с диадемой связью “Contains”(Содержит). О па! Работает!

Вы можете превратить любой предмет в контейнер, добавив скрипт “Container”, и изменив в свойстве EngineFeatures->FrobInfo пункт WorldAction на “Script”.

СВЕТ


Свет – это все, что светит в Thief. Заметьте, что Thief TDP и Thief Gold НЕ ПОДДЕРЖИВАЮТ динамическое освещение, или перемещающиеся источники света. Это лучше знать. А Thief2 TMA поддерживает.

Есть много различных типов света. Это – факелы (physical->Lights->torch), электрическое освещение, светящиеся грибы (physical->Lights->litemush). Факелы являются самым распространенным источником света, далее следует электрический свет. Факелы интересны тем, что их можно затушить и зажечь, электрические лампы - тем, что они имеют способность к включению и выключению, а также тем, что они дают НАМНОГО больше света, чем факелы.

Пожалуйста не забывайте размещать источники света, потому что light_bright только лишь освещает кисти и делает геймплей очень сомнительным. Ведь Thief и славится своей игрой света и теней, подкрадываниями. Убедитесь в том, что всегда есть подобная возможность у игрока!

Есть два общих типа света: физические источники света, и подсветка (hacklights). Подсветка – это невидимый источник света, полезный для освещения ‘заполненных’ комнат, где размещение факела не подходит. Подсветка может быть найдена в категории fnord->hacklight. В то время как физические источники находятся в разделе physical Объектной Иерархии.

Существует два различных ВИДА света: Направленный свет (Spotlights), и обычный свет. Направленный свет представляет собой фокусированный луч света, полезный для создания освещения кусочка комнаты, с затененными стенами! Обычный свет распространяет свет во всех направлениях, и полезен для обычных комнат. (Jerk: Направленный свет находится в fnord->hacklight->SpotLightPoint.)

Хорошо, давайте сделаем так, чтобы свет можно было включать и выключать! Создайте свой электрический свет (Например, physical->Lights->lanterns->MineLight) и откройте его свойства (заметьте, что так можно сделать с любым светом, но факелы, которые можно включить и выключить, смотрятся паршиво). Посмотрите на свойство AnimLight (если его ДЕЙСТВИТЕЛЬНО нет, то добавьте Render->AnimLight).

Сейчас неплохо бы поговорить об окошке AnimLight. Здесь вы можете выбрать режим освещения. Если вы хотите, чтобы фонарь был первоначально отключен, установить режим (Mode) в “Minimum Brightness” (Минимальная Яркость) и установить минимальную яркость (min brightness) равной нулю. Установите подходящую максимальную яркость (max brightness) (подойдет около 100), и установите радиус света (radius) (15-20). Вот и все!

Jerk: Я немного изменю дальнейшее изложение, так автор делает левой ногой через правое ухо.

Теперь добавьте к фонарю скрипт “AnimLight” (S->Scripts). Теперь обратите внимание на то, что фонарь имеет свойство Render->Light. Это означает, что он будет в любом случае светится на заданной в этом свойстве величине. Заходим в это свойство и устанавливаем ноль в строку ‘brightness’. Портализируем уровень.

Теперь настало время связать рычаг с фонарем. Здесь необходим индивидуальный подход, ибо все источники света отличаются друг от друга.

Основной – следующий: связываем рычаг с фонарем (ControlDevice, естественно) и смотрим, что получилось. В нашем случае все ОК. По умолчанию фонарь выключен и при первом же нажатии рычага срабатывает.

Если вы хотите, чтобы фонарь был включен, то зайдите в свойства рычага и найдите свойство Tweq->JointsState: измените AnimS с “[None]” на “On”. Теперь рычаг будет по умолчанию нажат, а свет – включен.

В данный момент, если рычаг внизу, то свет включен. Spike14 настоятельно рекомендует, чтобы свет был включен, когда рычаг находится вверху. Объяснено это ‘реальностью’, но черт с ним. Между рычагом и фонарем размещается инвертер (fnord->TrapTrig->Inverter). Он будет служить для реверсирования сигнала. Теперь связываем рычаг с инвертером ControlDevice связью, а инвертер – с фонарем (не забываем удалить старую связь между рычагом и фонарем). Теперь если вы зайдете в игру, то заметите, что рычаг действительно находится в других положениях.

Не забывайте портализировать уровень (если вы меняли только настройки света, то можете выбрать Tools->Light)

Совет: Если вы узнали, что не можете устроить тени в области, потому что физические источники света сильно освещают округу, то попытайтесь сделать следующее: создайте источник направленного света (fnord->hacklight->SpotLightPoint), разместите его в области, которую вы хотите затенить, и установите в его свойстве ‘Light’(Свет) отрицательное значение! (Jerk: аж ничего не получилось.)

Теперь мы сделаем лампу типа тех, что были в Потерянном Городе. Это те, которые загораются, когда вы (или другое существо) входите в комнату, и выключаются – когда выходят. Создайте physical->Lights->LCLite. Он уже настроен по умолчанию как нужно, нам нужно только добавить скрипт “AnimLight”.

Создайте конкретизированную комнатную кисть (читайте об этом разделе ‘Комнатная Кисть’ либо ранее, в ‘Рубильники и Кнопки’ в описании скрипта TrigRoomPlayer).

Добавьте к комнатной кисти скрипт “TrigRoomCreature”. Он будет срабатывать, когда кто-то (включая Гаррета) входит в комнату. Теперь свяжите (ControlDevice) комнату к лампе. Все!

Помните, что для каждой при появлении игрока включающейся/выключающейся лампы вы ДОЛЖНЫ создать новую конкретизированную комнатную кисть! Если вы будете для двух разных комнатных кистей конкретизировать одну и ту же архитектуру… то они будут наследовать одинаковые скрипты и связи!

Для создания фонаря, который включает сам себя (точнее, Гаррет его может включить непосредственно), сделайте его способным к включению/выключению (как описывалось в первом примере), и затем добавьте свойство EngineFeatures->FrobInfo и установить в WorldAction значение “Script”.

ИСКУССТВЕННЫЙ ИНТЕЛЛЕКТ (AI)


ОК, вот мы и добрались до Искусственного Интеллекта (AI), самой сложной теме на пути к званию мастера DromEd. Для правильной работы AI необходимо выполнить две операции. Это:


Build Pathfinding Database (Построение базы данных поиска пути)
Сообщает AI – куда можно идти и как туда добраться
Build AI Room Database (Построение базы данных комнаты AI)
Расчет ‘слуха’ AI, позволяет им ‘слышать’
Запустите их по очереди (находятся в меню Tools).

Считайте, что AI – самые обычные объекты, имеющие специфические возможности: они двигаются и думают!

Сейчас хорошая возможность познакомиться с безумно полезной командой: “aiawareofplayer” (AI Aware Of Player – AI знает об игроке). Введите ее в командное окно и нажмите Enter. AI перестанет вас видеть и слышать! Однако они заметят, если вы ударите что-то своим мечом или дубиной (например, факел), и будут на стороже, если вы попытаетесь атаковать их!

Сейчас AI как любые другие объекты - вы можете размещать их, удалять… они появляются без портализации.




Создайте любой AI (Они находятся в physics->Creature). Например, слугу - physics->Creature->Animal->Human->bystander->servant->MaleServ1. Только не пугайтесь тому, что увидите. Они находятся в такой позе, потому что она является для них позой по умолчанию. В игре они примут нормальное положение.

Если вы создали слугу, то зайдите в игру и проверьте следующее: испугайте его. Самое интересное, что он не будет убегать – он станет, и будет искать вас (и никогда не найдет). Это не делает нам чести!

Создайте маркера (fnord->marker) в подходящих точках бега (flee points) в вашем уровне и назовите их типа “FleePointX”, где X – номер точки бега. К каждому маркеру нужно добавить свойство AI->Utility->Flee Point и установить уровень предпочтения. 0 означает минимальное предпочтение, и 100 – максимальное предпочтение. Если вы разместите несколько точек бега с одним и тем же значением, то AI будет бежать к ближайшей точке, или бежать дальше. (Вы можете наблюдать подобный эффект, если напугаете разговаривающих слуг Лорда Баффорда в подвале в спальне, они убегут, а потом будут бегать по кругу в залах).

Не забывайте строить базу данных поиска пути после создания точек бега.




ОК, у вас есть бегающий AI, который стоит себе и ждет, пока вы придете. А что, если вы хотите иметь патрулирующего AI? Читайте!

ОК, вы хотите патрули? Ну, создайте AI, затем откройте иерархию и создайте точки патрулирования (patrol point): Fnord->Marker->TrolPt.

Создайте их там, где хотите, чтобы AI патрулировал. Запомните, что AI приступит к патрулированию с ближайшей точки патрулирования, поэтому убедитесь, что AI не пойдет в богом заброшенный угол карты – создайте точку патрулирования внутри него!

А теперь последовательно свяжите (AIPatrol) между собой все точки патрулирования – TrolPt. Делайте следующим образом: первую точку связывайте со второй, вторую с третьей и т.д. до тех пор, пока не свяжете последнюю с первой. Ошибки на этом этапе очень распространены!

Пришло время сказать мистеру AI, что ему нужно патрулировать. Итак, заходим в его свойства и добавляем AI->AI Ability Settings->Patrol: Does Patrol. Ставим галочку и нажимаем ОК.

Сейчас рассчитываем базу данных поиска пути и в игру! Вот ваш патруль!




ОК, теперь давайте займемся AI, который спит. Вы должны знать, что в Thief встроено метасвойство (MetaProperty), названное “M-Sleeping Servant”, которое используется для создания спящего слуги. Но не охраны. (Jerk: ага… не надо хвататься за название. Кого хочешь уложит спать!) Но с появлением фан миссий в 1999 мы видели, что спали самые разнообразные твари!

Ладно, наплюем на то, что это только для слуг. Есть в этом метасвойстве дефект – то, что спящий никогда не встает. В фан миссиях обычно используют связи AIWatchObj для того, чтобы заставить AI встать… (Jerk: в оригинальных миссиях тоже). Ого, это еще более уродливый способ, чем у меня на уме! И так, мы собираемся изменить ваш Gamesys. (Jerk: О нет…). Страшно звучит? Не беспокойтесь, все будет ОК.

Jerk: ни в коем случае не делайте то, что говорит Spike14 :). Он вообще дальше порекомендует сохранить изменения в dark.gam без создания резервной копии (!!!). Поэтому смело пропускайте все, где нет моих комментариев :)

Ну что, давайте погрузимся в это. Чем же является ваш Dark Gamesys? Это файл (dark.gam), содержащий информацию о том, как идет игра. Если вы сделаете изменения в вашей объектной иерархии, то должны сохранить изменения в gamesys, иначе изменения будут потеряны.

Итак, сначала мы изменим свойство “M-Sleeping Servant”, а затем сохраним изменения.

Откройте Объектную Иерархию, посмотрите на самый верх, на пункт ‘Show Tree’ (Показать Дерево). В данный момент там выбрано “Archetypes” (Образцы). Измените на “MetaProperties” (МетаСвойства). А теперь найдите “M-Sleeping Servant”. Оно должно быть в AI_Behaviors->AI_B_m2->M-Sleeping Servant. Выберите это свойство и нажмите ‘Edit’.

Сейчас я должен сказать вам, что такое МетаСвойство. Это совокупность свойств, призванных для создания нужного эффекта. Например, метасвойство M-FrobInert делает объект неспособным к фроббингу (его нельзя использовать), или неспособным к созданию эффектов.

Удобство метасвойств в том, что они могу быть добавлены или удалены Реакциями (Response) или Разговорами (Conversation), что будет обсуждено далее.

Jerk: А теперь просто добавьте следующее свойство в нужный вам AI, а не в МетаСвойство M-Sleeping Servant!

Теперь добавьте AI->Responses->Alert Response. Установите уровень тревоги (Alert level) на 3, и приоритет (priority) на “Very High”.

Далее измените первое действие (Response: Step 1) на “Add/Remove MetaProperty” (Добавить/Удалить МетаСвойство). Аргументы укажите следующим образом:

Argument 1  Remove (Удалить)  
Argument 2  M-Sleeping Servant  
Argument 3  


OK, это означает, что когда AI встревожится, он/она удалит в себе МетаСвойство. Если я хочу удалить МетаСвойство в другом объекте, я должен буду ввести уникальное имя того объекта (не должно быть числом) в строке “Argument 3”. Но поскольку мы хотим разбудить сам AI, то в этом нет необходимости!

Jerk: Да, но мы не создали это метасвойство в самом AI! Выберите его, и добавьте MetaProperty-> AI_Behaviors->AI_B_m2->M-Sleeping Servant. И это еще не все. Если вы запустите игру, но ничего не произойдет – стражник будет лежать как мертвый. Что же делать? Если поискать по свойствам в метасвойстве M-Sleeping Servant, то можно заметить, что там отключена ‘тревога’ AI. Добавьте AI следующее свойство: AI->AI Core->Alertness Cap и установите максимальный уровень (Max level): (3) High. Теперь AI действительно встанет, если вы начнете прыгать вокруг него :).

Теперь испытайте это в деле. Если все же изменяли gamesys, то сохраните его через File->Save Gamesys…




ОК, следующий вопрос. Как я могу поместить кошелек или ключ на пояс AI? Это просто! Для начала создайте кошелек (Physical->Treasure->Swag->Lucre->Purse) или ключ (Physical->Key) и по необходимости отредактируйте их свойства. Далее свяжите охранника с объектом через связь Contains (Содержит).

Но еще не закрывайте окно связей! Посмотрите на связь Contains. Обратите внимание на колонку “Data”(Данные). В ней на линии связи Contains написано “Generic Contents” (Универсальное содержание). Если вы оставите все как есть, то AI сможет проходить через запертые этим ключом двери, но, к сожалению, игрок не сможет украсть его. Итак, в колонке ID (Идентификационный Номер) выберите строку со связью Contains и нажмите на кнопку ‘Data’.

В появившемся меню вы можете выбрать один из трех пунктов: Hand (Рука), Belt (Пояс), и Generic Contents. “Hand”, кажется, не работает, но нас в данный момент интересует пояс, поэтому выбираем “Belt” и жмем ОК. Все! В игру воровать!




ОК, а теперь сливки – САМЫЙ ЛУЧШЫЙ AI (нет, не мертвый) – ПЬЯНЫЙ!

Создаем охранника, которого превратим в пьяницу. Отредактируем его свойства (вы можете создать МетаСвойство, если вы собираетесь сие часто использовать). Для начала добавляем MetaProperties->AI_Behaviors->AI_B_m10->M-AlertCapZero.

Jerk: Если вы покопаетесь в свойствах добавленного метасвойства, то узнаете, что AI к вам дружественен до тех пор, пока вы не начнете с кем то драться (AI->Responses->Sense combat response), не обнажите оружие (AI->Responses->Threat response, выбранное Raised weapon), пока не начнется тревога (AI->Responses->Signal response, выбранное alarm). Как только что-то из этого произойдет, то удалится все эти свойства, включая AI->AI Core->Alertness Cap, в котором указано, что у AI уровень тревоги нулевой – ему все пофигу.

Теперь сделаем ему пьяный голос. Добавьте свойство Speech->Voice и измените значение по умолчанию на “drunk1” и нажмите Enter.

Сейчась немного подправим ему действия. Добавьте AI->Responses->Threat response, измените свойства следующим образом:

Threat (Угроза)  Raised weapon (Обнаженное оружие)  
Response: Step 1  Add/Remove Meta-Properties (Добавить/Удалить Мета-свойство)  
Argument 1  Remove (Удалить)  
Argument 2  M-AlertCapZero  
Argument 3  
Response: Step 2  Play Sound/Motion (Проиграть Звук/Движение)  
Argument 1  tolevelthree (Поднять уровень тревоги до трех)  
Argument 2  
Argument 3  


А теперь о том, что здесь происходит. Когда охранник видит обнаженное оружие, включая лук, он удаляет у себя метасвойство M-AlertCapZero и проигрывает звук, который свидетельствует, что он в “тревоге”. (Jerk: по-моему, тут немножко не так. В следствие экспериментов выяснилось, что это подымает уровень “тревога” (alert) у всех в округе. Так “tolevelone” ни на кого не подействовало, “toleveltwo” подействовал на стоящего неподалеку слугу, “tolevelthree” дополнительно поднял на ноги спящего охранника.)

ОКей, теперь добавьте AI->AI Core->Awareness Capacitor (Ядро AI->Конденсатор Понимания) и измените значения всех полей на 10. Я думаю, что затормаживает их желание перейти в режим тревоги… но я не уверен в этом. Я только скопировал эти настройки с охранника колодца в миссии про Баффорда.

Теперь добавляем Motions->ActorTagList, (Движения->Список Тегов Актера) и вводим: “WithSword 0, Drunk 0”(С мечом, Пьяный). Теперь охранник будет делать соответствующие пьяные движения (за это отвечает “Drunk 0”). Если вы уберете “WithSword 0”, то заметите, что охранник не сможет вас атаковать… Мечом он уже не умеет пользоваться :).

Теперь добавляем AI->AI Core-AI и устанавливаем значение “Default” (По умолчанию). Это указывает AI, что он должен вести себя ‘по умолчанию’. (Jerk: абсолютно не вижу пользы в этом свойстве в данном случае).

Да, все работает, но как-то дохло. У нас есть пьяный охранник, который непонятно почему пьяный. Почему бы нам вокруг него не по разбрасывать пару бутылок (physical->Household->Dish->Bottle->) и кубков, хм? А как на счет кубка в его руке… нет, серьезно!

Для начала создайте кубок (physical->Household->Dish->Goblet->) и запомните его номер. Откройте окно связей пьяного охранника и добавьте новую связь CreatureAttachement (Привязка к созданию) от него к кубку.

Теперь измените данные связи (Data) на “Left Fingers” (Пальцы левой руки). Теперь кубок будет привязан к пальцам руки охранника! Все отлично работает. (Jerk: кубок можно выхватить из рук охранника и выбросить. При этом кубок вернется в руки охране. Чтобы игрок не мог взять кубок, добавьте кубку свойство Engine Fetaures->FromInfo и уберите ‘Move’ из WorldAction.)




ОК, теперь вы можете делать пьяную охрану, патрульных, помещать вещи в инвентарь охраны. Но что если вы хотите сделать лучника, стреляющего огненными стрелами? Или хотите чтобы AI был в команде Гаррета? А супер-болтливого охранника? Не беспокойтесь, я не собираюсь бросать вас на самостоятельно разбивание этой темы!

ОК, начнем с супер-болтливого охранника. Это легко! Добавьте охране свойство AI->Attributes->Verbosity (AI->Атрибуты->Многословие). Выберите любое желаемое значение и нажмите ОК (Null – охранник молчит, Well Above Average – охранник мычит :)

Пожалуйста, обратите внимание, что игра с атрибутами AI очень полезная штука. С этим вы можете заставить охрану вести себя так, как желаете. Например, охранник с высоким показателем лени будет летаргиком, охранник с высокой эффективностью не пропустит ни одной тени, когда будет вас искать!

Jerk: можете использовать следующие атрибуты (находятся в AI->Attributes).

Aggression – агрессия
Aptitude – способность (эффективность)
Defensive – оборона
Dodginess – изворотливость
Hearing – слух
Sloth – лень
Verbosity – многословие
Vision - зрение




А теперь легко сделаем AI в команде Гаррета. Добавляем AI->AI Core->Team и изменяем на любое значение, подходящее вам:

Good  Хорошие  В команде Гаррета, против всех BadX  
Neutral  Нейтральные  Невраждебны ко всем  
Bad1 – Bad 6  Плохие 1 - 6  Враждебны к Хорошим и ко всем остальным BadX  


Отлично! Вы также можете сделать невраждебных AI, если добавите им свойство AI->Ability Settings->Combat: Non-Hostile (Бой: Невраждебность). Там много различных значений и они соответствуют названиям.

Jerk: хорошо им, англичанам… Надо сказать, что это свойство работает несколько коряво. Если охраннику дать это свойство и значение Always, то он засечет, что игрок появился и начнет его искать, но атаковать не будет – будет по прежнему искать.

Never – AI всегда враждебен
Always to player – AI всегда невраждебен к игроку
To player until damaged - AI невраждебен к игроку до тех пор, пока он его не ударит
To player until threatened - AI невраждебен к игроку до тех пор, пока он не обнажит оружие
Until damaged – AI не враждебен до тех пор, пока его не атакуют
Until threatened – AI не враждебен до тех пор, пока перед ним не обнажат оружие
Always – AI всегда невраждебен




А теперь займемся лучниками. Хочу заметить, что описанное действительно ДЛЯ ВСЕХ AI, например вы можете заставить священника стрелять не молотами, а стрелами, если желаете.

Создайте любого лучника отсюда: Physical->Creature->Animal->Humans->Guards->Bowman.

Откройте его связи. По умолчанию там уж будет несколько связей. Первая (Contains) сообщает о том, что лучник имеет стрелу. Вторая (Culpable For) говорит о том, что он может носить стрелы (Jerk: поскольку все прекрасно работает и без этой связи, то я не уверен в том, что правильно понял: “…that he CAN carry broadheads”. Впрочем, без первой связи тоже все работает. Самая важная – третья:.) Третья (AIProjectile) указывает на то, что если лучник стреляет, то он стреляет острыми стрелами (broadheads).

Итак, создайте огненную стрелу (firearrow), но НЕ кристалл огня (firecrystal)! Она здесь: physical->Projectile->firearr. Удалите все связи стрелка и воссоздайте из заново, связывая лучника с огненной стрелой. (Jerk: можете только сделать связь AIProjectile.)

Заметка: Все связи CulpableFor автоматически создает DromEd.

Jerk: можно (нужно) настроить данные связи AIProjectile. Дважды кликните по связи в разделе 'ID' (либо выберите ее и нажмите кнопку 'Data').

Наиболее интересными (и понятными) являются следующие:
-> Targeting Metod - способ прицеливания: Straight-Line - линейный, Arcing - дуговой. Остальные не хотят работать. Может для лучников не доступны, а для других, например для магов - да. Не проверял.
-> Firing Delay - с какой задержкой лучник будет стрелять (в секундах)
-> Ammo - количество стрел (яблок :). Если 0 - то бесконечно.
-> Burst Count - примерно: мощность выпущенной стрелы. Если 0 - то по умолчанию. Если больше - то ховайся. Если Burst Count = 2 и стрела - огненная, то Гаррета выносит с первого раза :). Лучше использовать этот параметр с обычными стрелами.
-> Accuracy - точность. Ставьте Very High и не раздумывайте - хороший противник - находка для Гаррета :)
-> Leads Target - этот параметр делает противника не просто серьезным, а очень серьезным. Если вы уходите в сторону, то он рассчитает под каким углом стрельнуть так, что бы все равно попасть в вас. Единственное спасение - поменять направление движения.
-> Launch Joint - откуда вылетает стрела:


* N/A - по умолчанию
* Head - голова
* Nech - шея
* Abdomen - живот
* Butt - пах
* Left Shoulder - левое плечо
* Right Shoulder - правое плечо
* Left Elbow - левый локоть
* Right Elbow - правый локоть
* Left Wrist - левое запястье
* Right Wrist - правое запястье
* Left Fingers - левые пальцы
* Right Fingers - правые пальцы
* Left Hip - левое бедро
* Right Hip - правое бедро
* Left Knee - левое колено
* Right Knee - правое колено
* Left Ankle - левая лодыжка
* Right Ankle - правая лодыжка
* Left Toe - левые пальцы ноги
* Right Toe - правые пальцы ноги
* Tail - хвост (обычные лучники при этом не работают :)




Как сделать так, чтобы AI был уже мертвым!

Добавьте метасвойство MetaProperties->AI_Behaviors->AI_B_Gen->M-PosedCorpse.

Если хотите создать зомби, который лежит до тех пор, пока вы не пройдете по нем, то добавьте метасвойство MetaProperties->AI_Behaviors->AI_B_Gen->M-ZombieBehaviors->M-ZombiePossum.




Вы когда либо удивлялись тому, что в Thief нет молота-лучника ?

Вы ошибаетесь! В Thief ЕСТЬ молот-лучник! Сейчас покажу вам, как его активировать!

Создайте лучника. Теперь откройте его свойства и добавьте Shape->Model Name. В качестве модели введите “HamBow” и нажмите Enter.

И так, у нас уже есть лучник молот! Подкорректируем его голос. Добавьте Speech->Voice и введите “hammrs”.

Все ОК!




А теперь пришло время сделать пукающего буррика ! О да! (Jerk: вуху! Правда, это было уже реализовано в miss18.mis, ‘баговой’ миссии.)

Во первых, создадим его. Physical->Creature->Animal->Burrick.

Ну, вы уже знаете, что связь AIProjectile отвечает за стрельбу, включая и газовую атаку буррика. Заходим в связи и изменяем данные AIProjectile. Изменяет точку запуска (Launch Joint) на пах (Butt). А теперь заходим в миссию и любуемся!

ФНОРДЫ (FNORDS)


Markerfnord-> MarkerМаркер - универсальный фнорд, используемый для различных меток (например, точки бега - fleepoint), разговоров (conversations) и Стартовых Точек (StartingPoint)
Inverterfnord->TrapTrig-> InverterИнвертер – инвертирует связи ControlDevice вкл/выкл и не только (см. главу Свет )
RequireAllTrapfnord->TrapTrig-> RequireAllTrapТребуетВсеЛовушки – требует, чтобы все связи были в одном и том же состоянии перед тем как послать сообщение об этом состоянии. Применяется, например, тогда, когда нужно дернуть за несколько рычагов перед тем как дверь откроется.
RequireAnyTrapfnord->TrapTrig-> RequireAnyTrapТребуетЛюбуюЛовушку – Посылает сигнал “вкл”, если один из ControlDevice подает “вкл” и наоборот.
RelayTrapfnord->TrapTrig-> RelayTrapЛовушкаПередачи – Просто передает поступившее ControlDevice.
DestroyTrapfnord->TrapTrig-> DestroyTrapЛовушкаУничтожения – Уничтожает все, что связано с ним по ControlDevice связи тогда, когда на него подан сигнал ControlDevice.
ReleaseTrapfnord->TrapTrig-> ReleaseTrapЛовушкаОсвобождения – ‘освобождает’, показывает объект, связанный Contains, когда подается ControlDevice ‘вкл’. Скрывает объект, когда ControlDevice ‘выкл’.
TrolPtfnord->Marker->TrolPtТочкаПатруля – применяется для создания маршрута (см. главу Искусственный Интеллект)
LookBackPtfnord->Marker->TrolPt->LookBackPtТочкаВзораНазад – В этой точке патрульный оборачивается и смотрит назад. Используется как TrolPt.
TerrPtfnord->Marker->TerrPtТочкаЛандшафта – применяется для создания лифтов. См “Лифты”.
QuestVarTrapfnord->TrapTrig->QuestVarTrapЛовушкаПерменныхМиссии - изменяет цели миссии, см. “Цели”.
SoundTrapfnord->TrapTrig->SoundTrapЗвукоЛовушка – проигрывание звука, см. “ЗвукоЛовушки”.
VOTrapfnord->TrapTrig->SoundTrap->VOTrapГолосоЛовушка – проигрывает комментарии Гаррет, см. “Комментарии Гаррета”.
EmitTrapfnord->TrapTrig->EmitTrapЛовушка Излучения – испускает магические заряды (синие слезы) – как в Bonehoard. См раздел “Ловушки Излучения”
EmitStreamTrapfnord->TrapTrig->EmitStreamTrapЛовушка Потока Излучения – испускает множество магических зарядов. См раздел “Ловушки Излучения”
BoundsTriggerfnord->TrapTrig-> BoundsTriggerТриггер Границы – ‘вкл’ когда игрок (или создание) находится ‘в нем’ и ‘выкл’, когда – нет. Применяется, например, если игрок зашел в комнату – прошел через BoundsTrigger, который активизировал некий эффект (например, звук)


Теперь вы и это знаете!

ПОЛЕЗНЫЕ СКРИПТЫ


ОК, а теперь список полезных скриптов. Некоторые из них требуют специальные свойства, большинство из которых можно получить из объектов, откуда эти скрипты взяты (например, StdBook требует свойство Book->Text, что можно узнать, открыв свойства обычной книги)

StdDoorДелает объект дверью, необходимо свойство ‘Door’
StdElevatorДелает объект лифтом, требует свойство “Moving Terrain”
StdLeverОбъект передает ‘вкл/выкл’ сигналы ControlDevices, требует “FrobInfo” and “JointsState”
StdKeyСоздает ключ, см. секцию “Ключи” для большей информации
LootSoundsЕсли объект взять, то будет проигран звук драгоценностей
LockSoundsЕсли объект закрыт, то при попытке его использовать будет проигран звук закрытого замка
StdButtonОбъект передает сигнал одного состояния (‘вкл’) ControlDevice, нужно свойство ‘FrobInfo’
TrapDestroyПревращает объект в DestroyTrap
TrapInverterПревращает объект в Inverter
TrapRequireAllПревращает объект в RequireAllTrap
TrapRequireAnyПревращает объект RequireAnyTrap
TrapQVarПревращает объект в QvarTrap
TrapReleaseПревращает объект в ReleaseTrap
TrapTeleporterПревращает объект в TeleportTrap
TrigUnlockПосылает ‘вкл’ когда объект открыт, ‘выкл’ – когда закрыт
TrigSlainПосылает ‘вкл’ когда объект уничтожен/убит
TrigDoorOpenПосылает ‘вкл’ когда открыто, ‘выкл’ – когда закрыто
TrigRoomPlayerУстанавливается в скрипты конкретной комнаты. Посылает ‘вкл’ когда заходит игрок, ‘выкл’ – когда выходит
TrigRoomCreatureУстанавливается в скрипты конкретной комнаты. Посылает ‘вкл’ когда кто-то заходит, ‘выкл’ – когда выходит
TrigAIAlertСрабатывает, когда AI встревожен
TrigWorldFocusСрабатывает, когда объект сфокусирован, подсвечен игроком
TrapRelayПревращает объект в RelayTrap
TrapTweqEmitПревращает объект в EmitTrap
EatFoodДелает объект возможным к съеданию
StdScrollДелает объект свитком, см. “Читабельные Объекты”
StdBookДелает объект книгой, см. “Читабельные Объекты”
SecureDoorОхрана поднимет тревогу, если заметит, что дверь не в том положении, что была (Jerk: вот это круто!)
CollisionStickОбъект прикрепляется (sticks - ?) к деревянным поверхностям
AnimLightДля включения/выключения света. См. ‘Свет’
OnOffSoundsОбъект производит звуки, когда включается/выключается
TrapConverseПревращает объект в разговор (conversation). См. ‘Разговоры’
VictoryCheckНеобходимо помещать в Стартовую Точку, иначе уровень невозможно будет завершить
ExtinguishableСвет объекта может быть потушен и заново зажжен, см. ‘Источники и Приемники’
LockPickЭто скрипт отмычек. См. ‘Отмычки’
WelcomeRoomСм. ‘Цели’
ContainerПревращает объект в контейнер. См. ‘Контейнеры’
LoadoutCacheДля создания объектов на закупку. См. ‘Создание Магазина Инвентаря’


ПОЛЕЗНЫЕ СВЯЗИ


О господи… фнорды, скрипты… еще и связи?

ControlDeviceСоздание эффектов… достаточно! О чем о чем, так об этой связи говорили столько, что мало не покажется! См. другие главы!
ContainsЗаставляет один объект содержать другой
CulpableForДелает AI способным содержать что-то (создается автоматически)
AIProjectileЗаставляет стрелять AI тем, что связано с ним этой связью. Это что-то должно быть у него в инвентории
AIPatrolСвязывайте TrolPt между собой для создания маршрута AI
AIWatchObjСм. соответствующую секцию
LockСвязывается что-то с lockbox для того, чтобы закрыть это что-то
AIConversationActorСвяжите разговор (conversation) с актером. См. ‘Разговоры’
SoundDescriptionСвяжите VOTrap с звуковой архитектурой, затем VOTrap проиграет этот звук
WeaponДелает выбранный объект оружием AI
CorpseДелает связанное с объектом оружием объекта
FrobProxyСверхъестественная связь… см раздел ‘Фроббинг’
TerrPathСм. ‘Лифты’
TerrPathInitСм. ‘Лифты’
CreatureAttachementПолезно для привязки одного существа к другому созданию/объекту
ParticleAttachementПривязывает объекты и эффекты из частиц (particle effects)


Заметка: Связи с тильдами (~) Dromed создает автоматически, они являются обратными. Например, если вы связали стартовую точку с мечом, то ввели примерно следующую информацию для стартовой точки:

Flavour: Contains
From: StartingPoint
To: A Sword
DromEd автоматически для меча создает следующую, обратную связь:
Flavour: ~Contains
From: A Sword
To: StartingPoint

ЧИТАБЕЛЬНЫЕ ОБЪЕКТЫ


Сделать объект читабельным очень легко. Нужно проделать эти пункты:

- Добавить скрипт StdBook или StdScroll
- Добавить свойство FrobInfo (чтобы можно было активизировать в игре)
- Добавить свойство Text (какой текст книга должна отображать)
- Добавить свойство Art (Задний фон книги при прочтении)
Перед тем как вы начнете создавать книги, откройте вашу папку ‘Thief’ и создайте новую папку под названием ‘books’, в ней папку ‘English’. Теперь вы готовы начать!

Теперь поясним, как работает книга. DromEd, когда требуется получить текст книги, ищет нужный файл в папке ‘books’, а за тем – в ‘books.ctf’. Желательно не называть книгу таким же именем, что и одна из книг оригинальных миссий Thief.

Создайте в папке “Thief\books\English” файл с расширением *.str при помощи Блокнота или любой другой программы. Например – “yourbook.str”.

Страницы в книге нумеруются с нуля, их количество не ограничивается. Однако не забывайте, что скучный длинный материал мало кто дочитывает до конца!

Пример книги из трех страниц приведен ниже:

page_0:”Это первая страница…”
page_1:”А это - вторая …”
page_2:”Ну, и так далее…”  
Далее сохраните изменения в файле и перезапустите DromEd (так каждый раз придется делать, когда вы измените текст…). Дело в том, что DromEd первый раз считывает файл и в следующие разы уже нет, поэтому нужно перезагружаться… И не забывайте – если DromEd не сможет найти книгу, он вылетит в Windows!
Jerk: немного меняю форму изложения, т.к. у Spike14 неправильная точка зрения (с моей точки зрения :). Единственное отличие между скриптами StdBook и StdScroll в том, что только первый может быть в табличках (plaque) – чтобы текст отображался на экране.

Существует три типа читабельных объектов, причем они не зависят от скрипта. Все зависит от наличия свойство Books->Art и настройки Engine Features->FrobInfo.

Книги (Books). Находятся по адресу physical->Household->Book. Их нельзя взять в инвентарь, можно только прочитать на месте.
Создаются следующим способом (из любого объекта):

- В созданный объект добавляется скрипт (s->Scripts) “StdBook”
- Добавляется Engine Features->FrobInfo: WorldAction: Script (при активизации - прочтение)
- Добавляется Book->Text, куда вводится имя файла с текстом книги (в нашем случае – ‘yourbook’. Помните, что расширение (*.str) включать не надо)
- Добавляется Book->Art, куда вводится “parch” или “pbook”. Так определяется задний фон книги при прочтении. Для того, чтобы узнать все возможные значения этого параметра – смотри на книги в books.crf

Таблички (Plaque). Находятся по адресу physical->Decorative->Plaque. Они являются теми же книгами за исключением того, что их текст появляется прямо на экране.
Создаются такими же образом способом, что и книги за исключением того, что не создается свойство Book->Art. Учтите, что отображаться будет только первая страница!


Свитки (Scrolls) Находятся по адресу physical->Household->Scroll. Их можно взять в инвентарь, а оттуда прочитать.
Создаются следующим способом (из любого объекта):

- В созданный объект добавляется скрипт (s->Scripts) “StdScroll”
- Добавляется Engine Features->FrobInfo: WorldAction: Move; InvAction: Script (при активизации – взять книгу в инвентарь, при активизации в инвентаре - прочтение)
- Добавляется Book->Text, куда вводится имя файла с текстом книги
- Добавляется Book->Art, куда вводится “parch” или “pbook” или любое другое из доступных.
Все, объект можно читать!

ФРОББИНГ (FROBBING)


Хе-хе, я столько раз уже говорил о ‘фроббинге’… Вы наверняка уже полезли в словарь и были удивлены, что не смогли найти его там (Jerk: я тоже :.) Да, фроббинг – слово, в некотором смысле даже искусство!

Фроббинг – это активация объекта. Но технически активация подразумевает действие мира (world action.). Обычно для того, чтобы активизировать что-то, вы должны быть у этого ‘что-то’ близко!

Но это лишь частный случай фроббинга. И в этом его красота! Фроббинг полностью встроен! Нет действия по умолчанию, когда AI ‘фроббирует’, вы можете вручную предписать это. Вы можете делать все, что захотите с фроббингом, даже активировать кнопку, скрытую в СИНЕЙ КОМНАТЕ (BLUEROOM)! (Jerk: Под синей комнатой все Dromed-эры подразумевают скрытую комнату с текстурой Jorge (оттого и синюю), в которой находятся скрытие рубильники, кнопки…)

Есть одна связь, касающаяся фроббинга… FrobProxy. Связывается объект с объектом, который он должен фроббировать.

Фроббинг будет обсужден более глубже в следующих секциях: ‘Разговоры’, ‘Связь AIWatchObj’ и ‘Реакции’.


Jerk: придется опять самому напрягаться… Слушайте.

Самое основное свойство, отвечающее за фроббинг находится здесь: Engine Features->FrobInfo.

Оно состоит из трех пунктов: World Action, Inv Action, Tool Action. Рассмотрим их по порядку.

World Action – Действие в мире, обрабатывает реакцию на действие игрока на объект в мире.

Inv Action – Действие в инвентаре, обрабатывает реакцию на действие игрока на объект в инвентаре (как яблоки или зелья).

Tool Action – Действие инструмента, обрабатывает реакцию на попытку игрока использовать/применить объект-инструмент (как отмычки или ключи)

Ух, это тяжело объяснить… Давайте разберемся на примерах. Создайте яблоко (physical->Household->Food->Apple). Добавьте свойство FronInfo. В оно должно быть следующего вида:

World Action: Move
Inv Action: Script, Use Ammo
Tool Action: -
Move в World Action означает, что игрок может взять яблоко в руки. Script в Inv Action говорит DromEd о том, что это действие описывает скрипт (в данном случае - EatFood). Use Ammo – после того как срабатывает Script объект нужно "удалить", "использовать".

Если вы удалите Use Ammo, то выяснится, что яблоко можно есть бесконечно. Если Script (Use Ammo останется), то яблоко исчезнет без эффекта ‘съедания’.

Удалив все значения Inv Action, оставив Move в World Action вы узнаете, что объект можно взять… и все этим закончится. Его выбросить можно будет только кнопкой выбрасывания. Заметьте, что в этом случае яблоко НЕ ПОПАДАЕТ в инвентарь, а становится в позицию ‘aka’ камень.

Если вы удалите и Move из World Action, то объект вообще нельзя будет даже подсветить в игре. А сейчас верните Move в World Action, а также установите Move в Inv Action. Что произойдет с объектом в игре? Да, его можно будет взять в инвентарь, а потом выкинуть (так ведут себя четки).

Ну хватит играться с яблоком. Теперь создайте ключ (physical->Key). Добавьте FrobInfo. Он настроен следующим образом: быть следующего вида:

World Action: Move
Inv Action: -
Tool Action: Script, Deselect
Как видно, здесь используется другая секция, Tool Action. Это значит, что объект перемещается на середину экрана, когда его пытаются использовать. Script имеет тот же смысл, что и раньше, а новичок Deselect – убирает ключ обратно в инвентарь, если дверь открыта (вы наверняка помните это).

Уберите Deselect и попытайтесь проверить ключ. Теперь в случае успешного открытия двери ключ не исчезнет в инвентарь, а останется выбранным.

Помимо Move, Script, Use Ammo и Deselect вы можете использовать Delete (удаляет объект при использовании) и Ignore (объект игнорируется). Предназначение или использование других для меня пока остается загадкой (FocusScript – выполнение скрипта при фокусировании/подсвечивании/?, Tool Cursor – курсор-инструмент?, Default – по умолчанию, но что делает?). Если кто узнает, поделитесь соображениями…
Описание
Прохождение
FAQ - игровой
FAQ - технический
Скриншоты
Зарисовки
Обои
Видео
Аудио
Патчи
Переводы
Описание
Прохождение
FAQ - игровой
FAQ - технический
Скриншоты
Зарисовки
Обои
Патчи
Переводы
Описание
Прохождение
FAQ - игровой
FAQ - технический
Скриншоты
Зарисовки
Обои
Патчи
Переводы
Описание
Прохождение
FAQ - игровой
FAQ - технический
Скриншоты
Зарисовки
Обои
Патчи
Переводы
New Dark
The Dark Mod
Thief 2 Gold
Прочие

Night Blade
Thievery
Страница сгенерирована за 0.265 секунд.
© 2001-2024 - Thief: the Dark Fate
Использование материалов сайта разрешается только при согласии их авторов и администрации Dark Fate,
при этом ссылка на Dark Fate обязательна.