Как я это делал

Как я это делал или создание квеста на Wintermute Engine от А до Я.

книга первая (первые 10 уроков.)

Как я это делал или создание квеста на Wintermute Engine от А до Я. Всё это можно найти на molier-artstudo.ucoz.ru

Содержание:

Вступление
Урок 1 Начало.
Урок 2 Работа со сценой.
Урок 3 Курсоры.
Урок 4 Работа со шрифтом.
Урок 5 Курсор реагирует на предметы.
Урок 6 Объекты.
Урок 7 Меню.
Урок 8 Инвентарь.
Урок 9 Используем предметы из инвентаря в сцене.
Урок 10 Диалоги.

Вступление

Данная книга представляет собой серию уроков на движке Wintermute Engine, с помочью его вы можете создавать интересные квесты. Эта книга разбита на десять уроков и позволит вам освоить основные принципы Wintermute Engine. На примерах Вы сможете сделать свой первый, маленький квест. Это пробный вариант книги, вернее первое моё издание, если Вы обнаружили какие-то опечатки или ошибки, а также, если у Вас какие-то вопросы к автору, просьба посетить форум на сайте molier-artstudo.ucoz.ru.

Вверх

Урок 1

Как я это делал. (может кому и пригодится)

Перед созданием игры необходимо потренироваться, создать небольшую сцену с использованием разных программ, предметов и прочего. Всё это пригодится при создании квеста.

Придумаем сценарий.

Сцена:
-большой забор;
-на заборе есть переговорное устройство со сторожем;
-калитка (закрыта);
-на стене крючок;
-на земле лежит шнурок.

Действия:
-при подходе к калитке герой говорит, что он не может пойти;
-при наведении на переговорное устройство «здесь нет с кем говорить»
-при наведении на крючок «за него нужно потянуть».

Решение:
-берём шнурок
-применяем к крючку
-тянем за шнурок, раздаётся звон
-переходим на сцену беседы со сторожем.

Сцена со сторожем:
- в переговорном устройстве слышен голос «кто»
варианты ответов:
1-я
2-не свои
3-гости
-при ответе 1 и 2 переходит беседа в начало
-при ответе 3 «добро пожаловать» и переходим на сцену2.

Конец.
Я так думаю, что идея понятна.
И так на этом пока всё.

Приступим к созданию сцены.

Открываем программу Google SketchUp 7 (проста и удобна) И начинаем творить:

1. Рисуем забор

примерно так.

2.Рисуем крючок с колокольчиком

крючок, разукрашиваем

получаем. Теперь колокольчик:

примерно так, и переговорное устройство

Теперь всё совмещаем и получаем:

Экспортируем в формат .jpg и получаем «сцену №1»

Теперь открываем WME Project Manager.

Вверх

Урок 2

Как я это делал. Часть 2
(может кому и пригодится)
Теперь открываем WME Project Manager.

Жмём New, назовём проект One, он же первый.

Открываем: scenes > Room, это и будет наша первая сцена.

Щелкаем Room.scenes

Для удобства хранения, доступа и редактирования картинок заходим в папку [data] и создаём там папку [images]

Копируем наш .jpg с забором в папку [images]

Возвращаемся в WME, в SceneEdit в окошке Sprite находим нашу сцену, должно быть так one\data\images\one.jpg и вот результат:

Однако что-то не то. Да, с такой проблемкой я столкнулся тоже. Размер, вот что главное. Заходим в папку one\data\images\ открываем one.jpg с помощью Adobe Photoshop и меняем размер только высоту.

Теперь открываем scenes > Room и видим:

меняем размер и сохраняем

и так наша сцена готова к работе, осталось совсем малость

Теперь меняем форму узла «floor», и получаем:

Выходим из SceneEdit. Загружаем игру, всё наш персонаж ходит, там где мы указали.

Теперь, сделаем чтобы персонаж при загрузки сцены находился в нижнем левом углу.
Для этого открываем нашу сцену в SceneEdit, вверху экрана берём Place actor, размещаем его на сцене, жмём Ctrl-C, выходим из SceneEdit.

Открываем scene_init.script (он находится scenes/Room/scr)

теперь, опускаем курсор в низ, жмём Ctrl-V, меняем координаты и положение, то, что в низу мы открыли удаляем.

Сохраняем, выходим, запускаем игру.

Вверх

Урок 3

Урок 3 Курсоры
Отложим не на долго Wintermute Engine и загрузим Adobe Photoshop CS3 ( в принципе любую версию ). Сейчас мы будем делать курсоры которые будем использовать в игре.

Для начала курсоры передвижения по сцене и перехода на следующую сцену. Будем использовать просто руку. Ищем в сети клипарт или какую не будь картинку с изображением руки, аккуратно вырезаем на Photoshop и сохраняем четыре руки вверх, вниз, лево и право в формате .png. У меня получилось так:
hand_verh.png
hand_niz.png
hand_left.png
hand_right.png

Теперь меню: смотреть, брать и разговаривать. Здесь всё не ваше усмотрение. От вашей фантазии будет зависеть, какого вида будет меню. И так ищем лупу, раскрытую ладонь и рот. Опять Photoshop, но в этот раз нам нужно сделать следующее: лупу, руку и рот, необходимо разместить на какой не буть подкладке, для красоты.
Menu.png

Теперь, эти же предметы сохранить по отдельности, с изменениями, так они будут выглядеть когда на них будет наведён курсор
look.png - лупа
take.png - рука
talk.png - рот

И ещё сохраняем эти же предметы, но меньшего размера, для использования в сценах.
Look_m.png - лупа
Take_m.png - рука
Talk_m.png - рот

И так, всё готово.

Сейчас будем менять интерфейс. Копируем наши картинки (Menu.png; look.png; take.png; talk.png.) в папку data\interface\menu. Bmp которые там находятся пока не трогаем, потом удалим.

Теперь открываем Wintermute Engine. Открываем data\interface\menu\menu.window

Теперь меняем меню. Щелкаем по иконкам вверху и меняем Image

Также меняем размеры, чтобы картинка реагировала на мышь

Всё готова, текст снизу пока оставим на английском, так как в следующем уроке мы будем работать по созданию русского текста в игре.

Вверх

Урок 4

Урок 4. Работа со шрифтом.
Теперь нам нужно создать русский шрифт или любой другой шрифт для нашей игры и для разных игровых ситуаций. Отрываем Wintermute Engine, заходим data\fonts\, щёлкаем правой кнопкой мыши, жмём Add font… в Template, выбираем truetype. Название изменим потом, жмем OK.

У нас появился новый шрифт verdana_red.font

Щелкаем по нему два раза

В учебнике по Wintermute Engine подробно описано о шрифтах, поэтому не будем заострять внимание на описании, а перейдём к делу:
1 - меняем название шрифта, возьмём Comic Sans MS
FACE = "Verdana" меняем на FACE = " Comic Sans MS"
Строка FILENAME = "fonts\verdana.ttf" нам в принципе не нужна, её можно удалить.
2 – жирный шрифт нам тоже не нужен
BOLD = TRUE меняем на BOLD = FALSE
3 – и самое главное
CHARSET = 1 , вместо 1 пишем 10

Проверяем:

------------------
TTFONT
{
SIZE = 13

FACE = "Comic Sans MS"

BOLD = FALSE
ITALIC = FALSE
UNDERLINE = FALSE
STRIKE = FALSE

CHARSET = 10

COLOR { 255, 0, 0 }
ALPHA = 255

LAYER
{
OFFSET_X = 1
OFFSET_Y = 1
COLOR { 0, 0, 0 }
ALPHA = 255
}

LAYER
{
OFFSET_X = -1
OFFSET_Y = -1
COLOR { 0, 0, 0 }
ALPHA = 255
}

LAYER
{
OFFSET_X = -1
OFFSET_Y = 1
COLOR { 0, 0, 0 }
ALPHA = 255
}

LAYER
{
OFFSET_X = 1
OFFSET_Y = -1
COLOR { 0, 0, 0 }
ALPHA = 255
}

LAYER
{
OFFSET_X = 0
OFFSET_Y = 0
COLOR { 255, 0, 0 }
ALPHA = 255
}
}

----------------
Закрываем, сохраняем, открываем Total, находим наш шрифт и меняем название для удобства, например «comic_red».
Теперь, давайте изменим текст в меню интерфейса (3 урок)
Отрываем Wintermute Engine, открываем menu.window, в Appearance меняем Text и Font. Проверяем

Да, чуть не забыл. Заходим data\interface\system\caption.window и Appearance меняем Font на наш русский «comic_red».

Вверх

Урок 5

Урок 5. Курсор реагирует на предметы.

Сейчас нам необходимо разобраться и сделать так чтобы при наведении курсора на разные предметы он менял вид, чтобы появлялась надпись, что это за предмет. Включаем своё воображение и представляем, как же это будет выглядеть. Предлагаю свой вариант:
-при неведении курсора на предмет, который можно взять, появляется рука с широко раздвинутыми пальцами (можно усложнить работу, и рука будет двигать пальцами);
-на предмет, который нельзя взять, но можно использовать или применять к нему другие предметы, появляется рука с лупой;
-а если нужно с кем то поговорить, появляется рот;
-так же можно заменить основной курсор игры.

Начнём с поиска подходящих нам картинок, ищем в сети или качаем здесь.
Нам нужна: рука, глаз, рот, курсор на ваше усмотрение.

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

И так:
-рука, сохраняем два варианта (пригодится) назовём hend_take1 и hend_take2:

-рука с лупой, hend_look:

-теперь рот (так же два варианта), talk1 и talk2:

-курсор, любая, на ваш взгляд красивая стрелочка назовём cursor (варианты можно посмотреть здесь)

можно выбрать и другой.

Теперь у нас все курсоры готовы. Приступим к их реализации. Копируем их все в data\sprites\system. Так же туда можно скопировать наши hand_left.png, hand_right.png, hand_niz.png и hand_verh.png, которые мы делали в третьем уроке.
Корректируем то, что получилось:
1.Рука, назовём hend_take. Отрываем Wintermute Engine, далее data\sprites\system щёлкаем правой кнопкой выбираем Add sprite в окошке Name пишем Take

Теперь открываем: hend_talk1 и hend_talk2, в окошке Delay пишем 500 ms, в окошке keyframe ставим птичку. Жмём Play и смотрим

точно также делаем talk, можно анимировать и look.

Вверх

Урок 6

Урок 5. Работаем со сценой. Объекты.

В этом уроке мы будем работать со сценой. Загружаем Wintermute Engine, открываем data\scenes\Room\Room.scene

Теперь нам необходимо создать объекты, на которые будет реагировать наш курсор.
Определимся с объектами, в нашем варианте это:
1. Переговорное устройство «ПУ»;
2. Колокольчик за забором;
3. Крючок на стене.

Начинаем работу в Scene Edit. Щелкаем Add entity, выбираем Add region entity, появляется новый объект new entity зелёного цвета и квадрат с красными линиями, размещаем его на ПУ, передвигая как во втором уроке, получаем:

Сейчас будем работать с меню “Entity properties”

-Name (название объекта), все названия, имена используемые движком пишем на английском, проще нам и машине. Назовём наш ПУ console (от англ. пульт оператора).
-Caption (надпись которую мы будем видеть на экране) пишем “ПУ”, что то в этом роде, это не важно.
-Сursor (как будет выглядеть наш курсор, когда мы наведём его на наш объект) ищем курсор look-смотреть, в нашем варианте путь sprites\system\Look.sprite
-Font (шрифт самой надписи) пускай, надписи будут зелёные, путь fonts\comic_green.font, вы можете использовать любой другой шрифт.

Сохраняем. Чуть не забыл, меняем курсор в меню Game sttings в строке Cursor.

Запускаем игру, при наведении курсора на ПУ появляется рука с лупой.

То же самое, проделываем с колокольчиком и крючком.
Колокольчик name-tinkler
Крючок- hook

Вверх

Урок 7

Урок 7. Работаем со сценой. Меню.

Продолжаем работу со сценой. Теперь наш Актёр должен правильно реагировать на наши действия при использовании Меню, то есть если мы наводим курсор на стену и даём задание Актёру “говорить”, то он ответит “Здесь нет с кем разговаривать”.
В самом начале меняем шрифт нашего Актёра data\actors\molly\molly.actor
----------------------------------------------------------------------------

; $EDITOR_PROJECT_ROOT_DIR$ ..\..\..\

ACTOR
{
NAME = "molly"
CAPTION=""
SCALABLE = TRUE
INTERACTIVE = FALSE
X = 400
Y = 460
SCRIPT="actors\molly\molly.script"

FONT = "fonts\comic_red.font" --путь нашего шрифта---

ANIMATION
{
NAME = "idle"

LEFT = "actors\molly\ll\stand.sprite"
RIGHT = "actors\molly\rr\stand.sprite"
UP = "actors\molly\uu\stand.sprite"
DOWN = "actors\molly\dd\stand.sprite"

UP_LEFT = "actors\molly\ul\stand.sprite"
UP_RIGHT = "actors\molly\ur\stand.sprite"
DOWN_LEFT = "actors\molly\dl\stand.sprite"
DOWN_RIGHT = "actors\molly\dr\stand.sprite"
}

ANIMATION
{
NAME = "walk"

LEFT = "actors\molly\ll\walk.sprite"
RIGHT = "actors\molly\rr\walk.sprite"
UP = "actors\molly\uu\walk.sprite"
DOWN = "actors\molly\dd\walk.sprite"

UP_LEFT = "actors\molly\ul\walk.sprite"
UP_RIGHT = "actors\molly\ur\walk.sprite"
DOWN_LEFT = "actors\molly\dl\walk.sprite"
DOWN_RIGHT = "actors\molly\dr\walk.sprite"
}

ANIMATION
{
NAME = "talk"

LEFT = "actors\molly\ll\talk.sprite"
RIGHT = "actors\molly\rr\talk.sprite"
UP = "actors\molly\uu\talk.sprite"
DOWN = "actors\molly\dd\talk.sprite"

UP_LEFT = "actors\molly\ul\talk.sprite"
UP_RIGHT = "actors\molly\ur\talk.sprite"
DOWN_LEFT = "actors\molly\dl\talk.sprite"
DOWN_RIGHT = "actors\molly\dr\talk.sprite"
}

ANIMATION
{
NAME = "turnleft"

LEFT = "actors\molly\ll\turn.sprite"
RIGHT = "actors\molly\rr\turn.sprite"
UP = "actors\molly\uu\turn.sprite"
DOWN = "actors\molly\dd\turn.sprite"

UP_LEFT = "actors\molly\ul\turn.sprite"
UP_RIGHT = "actors\molly\ur\turn.sprite"
DOWN_LEFT = "actors\molly\dl\turn.sprite"
DOWN_RIGHT = "actors\molly\dr\turn.sprite"
}

ANIMATION
{
NAME = "turnright"

LEFT = "actors\molly\ll\turn.sprite"
RIGHT = "actors\molly\rr\turn.sprite"
UP = "actors\molly\uu\turn.sprite"
DOWN = "actors\molly\dd\turn.sprite"

UP_LEFT = "actors\molly\ul\turn.sprite"
UP_RIGHT = "actors\molly\ur\turn.sprite"
DOWN_LEFT = "actors\molly\dl\turn.sprite"
DOWN_RIGHT = "actors\molly\dr\turn.sprite"
}
}
----------------------------------------------------------------------------------------

В нашей сцене три объекта:
-console (ПУ)
-tinkler (колокольчик)
-hook (крючок)
Рассмотрим каждый объект отдельно и подробно.

-console (ПУ)
Опять обращаемся к меню “Entity properties” (урок №6)

Жмем кнопку Scripts... . В меню Template выбираем scene object.script, жмём OK,

В появившемся окошке Scripts for the “console” object жмём кнопку Edit script, вот что мы видим:

-------------------------------
#include "scripts\base.inc"

//////////////////
on "LookAt"
{
actor.GoToObject(this);
actor.Talk("Blah");
}
///////////////////
on "Take"
{
actor.GoToObject(this);
actor.Talk("Blah");
}
////////////////////
on "Talk"
{
actor.GoToObject(this);
actor.Talk("Blah");
}
////////////////////
on "LeftClick"
{
actor.GoToObject(this);
}
------------------------------

Осталось только заменить (“Blah”) на нужные нам выражения:
on "LookAt" - Похоже на переговорное устройство.
on "Take" – Я не могу это взять.
on "Talk" – Говорить нет с кем.

Тоже, самое проделываем с остальными объектами:
-tinkler (колокольчик)
on "LookAt" - Колокольчик за забором.
on "Take" – Есть наверное какой то другой способ.
on "Talk" – Говорить нет с кем.

-hook (крючок)
on "LookAt" - Сломанный крючок.
on "Take" – За него можно чем то зацепиться.
on "Talk" – Говорить нет с кем.

Сохраняем, и смотрим результат.

Вверх

Урок 8

Урок 8. Работаем со сценой. Инвентарь.

В этом уроке мы будем разбираться с инвентарём. Чтобы, позвонить в колокольчик нам необходимо чем-то зацепиться за крючок и потянуть, чтобы раздался звон.
Ищем картинку верёвки или что-то похожее,

Теперь нам нужно сделать три такие картинки разного размера, дело в том, что предмет на сцене может быть маленьким, а в инвентаре большим:
-верёвка на сцене “ verevoch _scen”, так как она будет выглядеть в игре на сцене и когда мы будем брать её из инвентаря,
-верёвка в инвентаре “ verevoch _invent”, будет появляться вверху экрана, в инвентаре,
-и верёвка когда наводим курсор “ verevoch _cursor”, будет появляться при наведении на предметы (можно обвести по контуру каким не будь цветом или сделать темней, светлей).
В процессе работы, размер будем подбирать и корректировать.
Должно получиться примерно так:

Получившееся «verevoch» копируем в папку \items. Открываем items.items
теперь пишем:

-------------------------
ITEM
{
CURSOR_COMBINED = TRUE
CAPTION = "Верёвка"
NAME = "verevoch"
IMAGE = "items\verevoch_invent.png"
CURSOR = "items\verevoch_scen.png"
CURSOR_HOVER = "items\verevoch_cursor.png"
SCRIPT = "items\verevoch.script"
}
----------------------------

Открываем WME.
Выбираем items жмём правую кнопку, далее Add script..., создаем verevoch.script, пушем:
------------------------------
#include "scripts\base.inc"

//////////////////////////////
on "LookAt"
{
actor.Talk("Верёвка с крючками, можно зацепить");
}
//////////////////////////////
on "Talk"
{
actor.Talk("C верёвками не разговариваю");
}
////////////////////////////
on "Take"
{
Game.SelectedItem = "verevoch";
}
-----------------------------

Теперь открываем нашу Room.scene, создаём новый объект Add sprite entity и называем его «verevoch». В Entity properties в окошке Sprite находим нашу «verevoch_scen.png» которая находится в папке \items и размещаем на нашей сцене.

Теперь в Entity properties делаем следующие действия

Жмем Scripts... создаем новый verevoch.script (scenes\Room\scr\ verevoch.script)

В verevoch.script пишем следующее:

-------------------------------
#include "scripts\base.inc"

///////////////////////////////
on "Take"
{
actor.GoTo(735, 375);
actor.TurnTo(DI_UPRIGHT);

Game.Interactive = false;
actor.Talk("Верёвочка");

actor.PlayAnim("actors\molly\ul\take1.sprite");

Game.TakeItem("verevoch");
var EntBook = Scene.GetNode("verevoch");
EntBook.Active = false;

actor.PlayAnim("actors\molly\ul\take2.sprite");

Game.Interactive = true;
}
////////////////////////////////
on "LookAt"
{
actor.GoToObject(this);
actor.Talk("Верёвка с крючками");
actor.TurnTo(DI_DOWN);
actor.Talk("Можно, что не будь зацепить.");
actor.TurnTo(DI_DOWN);
}
///////////////////////////////
on "Talk"
{
actor.GoToObject(this);
actor.Talk("Бездушный предмет.");
actor.TurnTo(DI_DOWN);
actor.Talk("Глупо с ним разгованивать.");
actor.TurnTo(DI_DOWN);
}
////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
}
----------------------------------

Сохраняем, запускаем игру и проверяем результат: курсор при наведении на «верёвку» меняется на «руку», когда пробуем смотреть или говорить актёр на это реагирует своими ответами и наконец мы берём «верёвку», она пропадает и появляется в инвентаре. В инвентаре, мы так же проверяем, пробуем посмотреть, поговорить и брать нашу «веревку». Всё должно получиться.

Урок закончен, в следующем, попробуем применить наш предмет из инвентаря, на чём не будь.

Вверх

Урок 9

Урок 9. Используем предметы из инвентаря в сцене.

Теперь нам нужно сделать следующее: взять из инвентаря верёвку с крючками, использовать её на крючок, при этом должен раздаться звон, и мы переходим на следующую сцену.

Для начала подготовим:
1. Сцену №2 (нам нужна только та часть, где переговорное устройство)
2. Звук колокола

Открываем нашу картинку one.jpg (из папки images) Adobe Photoshop, здесь её немного обрезаем так, чтобы было видно переговорное устройство (не забываем о размерах), сохраняем как one2.jpg в папке images.

Теперь нам нужно создать папку для наших звуков, музыки. В \data создаём папку \sounds и туда копируем наш звон колокола TowerClock.wav.

Открываем WME.
В scenes создаём новую сцену Room2. Подробней ниже. Пока работаем с первой сценой.
Заходим в нашу \Room.scene, выбираем hook и жмём Scripts...

В наш script добавляем следующее (выделено красным):

-------------------------------------------------
#include "scripts\base.inc"
///////////////////////////////
on "LookAt"
{
actor.GoToObject(this);
actor.Talk("Сломанный крючок.");
}
///////////////////////////////
on "Take"
{
actor.GoToObject(this);
actor.Talk("За него можно чем то зацепиться.");
}
///////////////////////////////
on "Talk"
{
actor.GoToObject(this);
actor.Talk("Говорить нет с кем. ");
}
///////////////////////////////
on "verevoch"
{
actor.GoToObject(this);
Game.PlaySound("sounds\TowerClock.wav");
Game.ChangeScene("scenes\Room2\Room2.scene");
}
////////////////////////////////
on "LeftClick"
{
actor.GoToObject(this);
}
-------------------------------------------------
Сохраняем, проверяем. Теперь, когда мы берём “верёвку”, она появляется в инвентаре, берём из инвентаря, наводим на крючок, жмем левую кнопку мыши, раздаётся звон и мы переходим на следующую сцену (Room2).
Если всё получилось, хорошо. Но, есть одно “но”:
-наш актёр появился по центру,
-верёвка осталась в инвентаре.
Исправляем наши ошибки, открываем \Room2.scene, рисуем территорию по которой может передвигаться наш актёр, ставим актёра с лева от переговорного устройства, сохраняем его координаты (Ctrl+C).

Выбираем background и жмём Scripts...
В наш script пишем:
---------------------
#include "scripts\base.inc"

actor.SkipTo(770, 470);
actor.Direction = DI_LEFT;

actor.Talk("Может меня кто-то услышит?.","1000");
actor.Active = true;
;
/////////////////////
global StateRoom2;

if(StateRoom2==null)
{
StateRoom2.Visited = false;
}
////////////////////
{
Game.DeleteItem("verevoch");
}
/////////////////////
if(!StateRoom2.Visited)
{
StateRoom2.Visited = true;
}
-----------------------

Проверяем.

Вверх

Урок 10

Урок 10 (заключительный). Диалоги.

Теперь научим нашего актёра общаться. Наша цель: ответить на пару вопросов и при ответе на правильный вопрос перейти на заключительную сцену (назовём её Room3) и на этом урок будет завершён.

Итак, для начала нам нужно будет следующее:
1. Сделать три анимированных картинок нашего переговорного устройства;
2. Написать диалог;
3. Нарисовать заключительную сцену Room3.

Открываем data\images\one2.jpg с помощью Photoshop, вырезаем наше переговорное устройство, при этом размер не изменяем. Теперь на синем фоне рисуем чёрные линии, сохраняем таких три картинки (сохраните в отдельной папке), так чтобы в Gif у нас получилось примерно так (у вас может быть и по другому):

Теперь открываем нашу игру. В папке entities создаём новый Add entity... назовём его peregovor. Копируем наши три картинки в папку \sprites , где в SpriteEdit совмещаем наши картинки и получаем спрайт default.sprite:

Сейчас нам необходимо разместить этот спрайт на нашей сцене Room2. Открываем scenes\Room2\scr\scene_init.script и добавляем следующее (в тексте красным):
---------------------------
#include "scripts\base.inc"

actor.SkipTo(400, 400);
actor.Direction = DI_DOWN;
actor.Active = true;

/////////////////////////////
global StateRoom2;

if(StateRoom2==null)
{
StateRoom2.Visited = false;
}
////////////////////////////
global OldGuy = Scene.LoadEntity("entities\peregovor\peregovor.entity");
OldGuy.SkipTo(516, 187);
///////////////////////////
if(!StateRoom2.Visited)
{
StateRoom2.Visited = true;
}
-----------------------------
Подгоняем координаты OldGuy.SkipTo так, чтобы наше переговорное устройство точно разместилось на сцене. Запускаем, проверяем.

Приступим к диалогу, который позволит нам при правильном ответе перейти на другую сцену.
Про алгоритм диалогов (если можно так назвать) подробнее, я напишу отдельную статью-урок. А, пока вкратце, для начала я придумал небольшие условные обозначения для удобства работы с диалогами (хотел разместить пару картинок, но проблема со сканером, решу проблему, выложу в блоге на сайте). Примерно, это выглядит так:
(а), (пу) – чей диалог ( (а)актёр, (пу) переговорное устройство);
==> 0 - выход из диалога;
==> 1, 2, 3…. - переход не следующую часть диалогов 1, 2, 3….;
==> +Room_n - переход на сцену Room_n (n- номер сцены или другое имя);
==>X - конец диалога.
На первое время, этого достаточно.

Теперь сам алгоритм диалога (мой вариант, Вы можете попробовать другой, не получится подскажу):
-----------------------------------------------------
При наведении курсора на “переговорное устройство” и используя “Talk”, наш актёр говорит:
-Есть кто, живой?
При повторном вопросе:
-Есть вопрос!!!
Ответ, и переход на диалог:
-Вам чего?

Диалог № 1 (или часть1)

0 – Вы кто? => (пу) Я тот кто Тебе поможет освоить Wintermute Engine ==> (а)Спасибо ==>Х
1 – Я могу вас увидеть? ==> (пу) Заходи по адресу http://molier-artstudo.ucoz.ru/ ==>Х
2 – Могу я с Вами поболтать? ==> (пу) Ответь на вопрос ==> (пу) Какой формат не поддерживает Wintermute Engine? ==>2
3 – Пропустите, меня. ==>(пу) До встречи ==> Room3

Диалог № 2

0 – BMP ==> (пу) Подумай ==>Х
1 – GIF ==> (пу)Хорошо. ==>Х
2 – TGA ==> (пу) Подумай ==>Х
3 – Хочу немного подумать ==>1

Примерно так.

------------------------------------

А сейчас реализуем наши идеи.
Для начала изменим шрифт. Открываем interface\responses.def и меняем шрифт диалога и диалога под курсором (в Response box):

Приступим к диалогу

Открываем \entities\peregovor\peregovor.script и пишем следующее:
------------------

global StateRoom;
///////////////////////////
on "Talk"
{
GoToObject();
Game.Interactive = false;

if(!StateRoom.TalkedToOldGuy) actor.Talk("Есть, кто живой?");
else actor.Talk("Есть вопрос.");
this.Talk("Вам чего?");

StateRoom.TalkedToOldGuy = true;

OldGuyDialogue();

Game.Interactive = true;
}
////////////////////////////
function OldGuyDialogue()
{
var Responses;
var Selected;

var Loop = true;

while(Loop)
{

Responses[0] = "Вы кто?";
Responses[1] = "Можно мне, Вас увидеть?";
Responses[2] = "Могу я с Вами поболтать?";
Responses[3] = "Пропустите, меня.";

Game.AddResponse(0, Responses[0]);
Game.AddResponse(1, Responses[1]);
Game.AddResponse(2, Responses[2]);
Game.AddResponse(3, Responses[3]);

Selected = Game.GetResponse();

actor.Talk(Responses[Selected]);

if(Selected==0)
{
this.Talk("тот кто Тебе поможет освоить Wintermute Engine.");
actor.Talk("Спасибо.");
}
else if(Selected==1) this.Talk("Заходи по адресу http://molier-artstudo.ucoz.ru/");
else if(Selected==2)
{
this.Talk("Ответь на вопрос:");
this.Talk("Какой формат не поддерживает Wintermute Engine?");

OldGuyDialogue2();
}
else if(Selected==3)
{
this.Talk("До встречи.");
Game.ChangeScene("scenes\Room3\Room3.scene");

Loop = false;
}
}
}
/////////////////////////////
function OldGuyDialogue2()
{
var Responses;
var Selected;
var Loop = true;

while(Loop)
{

Responses[0] = "BMP";
Responses[1] = "GIF";
Responses[2] = "TGA";
Responses[3] = "Хочу немного подумать.";

Game.AddResponse(0, Responses[0]);
Game.AddResponse(1, Responses[1]);
Game.AddResponse(2, Responses[2]);
Game.AddResponse(3, Responses[3]);

Selected = Game.GetResponse();

actor.Talk(Responses[Selected]);

if(Selected==0)
{
this.Talk("Подумай.");

}
else if(Selected==1)
{
this.Talk("Хорошо ");

}
else if(Selected==2)
{
this.Talk("Подумай.");
}
else if(Selected==3) Loop = false;

}
}
////////////////////////
on "LookAt"
{
GoToObject();
if(!StateRoom.TalkedToOldGuy) actor.Talk("Переговорное устройство.");
else actor.Talk("Я всё ещё не понимаю, что оно делает здесь.");
}
/////////////////////////
on "Take"
{
GoToObject();
actor.Talk("Я немогу это взять.");
}
//////////////////////////
on "LeftClick"
{
GoToObject();
}
//////////////////////////
function GoToObject()
{
actor.GoTo(356, 398);
actor.TurnTo(DI_UPRIGHT);
}
------------------------------------

Так же открываем \peregovor.entity и пишем
-------------------
ENTITY
{
NAME="peregovor"
CAPTION="Переоворное устройство"
ACTIVE=TRUE
X=200
Y=200
SCALABLE=TRUE
INTERACTIVE=TRUE
COLORABLE=TRUE
SPRITE="entities\peregovor\sprites\default.sprite"
TALK="entities\peregovor\sprites\default.sprite"

SCRIPT="entities\peregovor\peregovor.script"
FONT = "fonts\comic_blue.font"
}
-------------------

Создаем новую сцену, называем её Room3, запускаем игру, проверяем.

Всё должно получиться.

Вверх

Книгу написал Molier, дата выпуска 7.10.2009г

Спасибо всем тем, кто посещает мой сайти и комментирует мои статьи.

Эта книга и другие на molier-artstudo.ucoz.ru