А сейчас всё это выглядит уже так. И это уже практически полноценная игра (точнее, движок).
Диззи уже может погибнуть.
Принцип работы движка следующий. Весь мир разбит на тайлы 16x16. Тайлы могут иметь имена. Всё взаимодействие описывается через эти самые имена тайлов. Сценарии игры лежат в папке ScreenPlay в обычном текстовом виде. При запуске игра сканирует этот каталог и все сценарии (они могут называться как угодно) добавляет в условия игры.
Возможны сейчас следующие условия:
1) Пересечение тайла с Диззи: IfDizzyIntersection("CAT") - данное условие сработает при столкновении с тайлом с именем "CAT".
2) Пересечение тайлов между собой. IfIntersection("FIRE_LEFT","FIRE_LEFT_BORDER") - данное условие сработает при столкновении тайла "FIRE_LEFT" с тайлом с именем "FIRE_LEFT_BORDER" (это движущийся влево огонь и граница его перемещения).
3) Взятие тайлов в инвентарь (да, Диззи нужно отдельно разрешать что-то брать - могут быть неберущиеся предметы, как это было с мечом в камне из Диззи-4 - взять его можно только используя "липкие руки"): IfPickUp("RING") данное условие сработает при попытке взять тайл "RING".
4) Срабатывание таймера: IfTimer("WAIT CAT") - данное условие сработает для тайла "WAIT CAT "при срабатывании таймера.
5) Использование тайлов между собой: IfUse("BOTTLE WATER","CAT") - данное условие сработает при взаимодействии тайла с именем "BOTTLE WATER" на тайле "CAT".
На данный момент это все возможные условия. Потом, может быть, появятся новые.
Когда условие сработало, выполняются какие-то действия (Action). Для некоторых условий действия только для одного тайла, а для других нужно описывать действие для двух тайлов ( скажем, при столкновении нужно задать каждому столкнувшемуся, что произойдёт с ним)
Этих действий много. Сейчас они такие:
1) ActionMessage(20,100,"СООБЩЕНИЕ") - будет выведено сообщение в заданнх координатах. Да, экран в Диззи 320x240, растянутый до 640x480 для PC.
2) ActionChangeName("BOTTLE OF WATER") - поменять тайлу имя на заданное. Зачем нужно? Бежал у вас огонь до границы влево и теперь должен бежать в право. Как это сделать? Поменять ему имя. И для другого имени сделать уже условие контроля правой границы и условие таймера с событием изменения координаты в другую сторону.
3) ActionChangeDescription("БУТЫЛКА ВОДЫ") - заменяет описание предмета, которое выводится в инвентаре. Была у вас бутылка пустая, а стала с водой. Имя вы поменяли. А теперь надо описание для инвентаря поменять.
4) ActionChangeGlobalName("BOTTLE OF WATER") - поменять имя для ВСЕХ тайлов с таким же именем на карте. Зачем нужно? Если картинка состоит из ряда тайлов (скажем, фигура Волшебника), то изменяет его состояние все его тайлы, а не только та часть, с которой вы взаимодействовали.
5) ActionChangeGlobalDescription("БУТЫЛКА ВОДЫ") - так же меняет глобально все описания.
6) ActionChangePosition(100,100) - задать тайлу позицию в числах. Неудобно для использования. Не гибко.
7) ActionCopyPosition("RING","RING_POS") - перенести позицию первого тайла на место второго. Например, когда кот вам даёт кольцо, он переносит кольцо из некой области карты (вам не видимой - вы там не будете гулять) в заданную позицию.
8) ActionPickUp() - добавляет тайл в список возможных для взятия в инвентарь.
9) ActionSingle() - однократное действие. Зачем нужно? Диззи коснулся тайла воды. Должен терять энергию. Но вот беда, коснулся он нескольких тайлов воды. Совершенно незачем для каждого тайла отнимать у Диззи энергию. Вот это действие и выполнит для данного события действия стоящие следом ровно один раз.
10) ActionSetAnimationStep(1) - устанавливает шаг анимации (анимация обычно в этом случае есть, но остановлена в редакторе). Позволяет менять картинку одного тайла на другой. Была бутылка без воды, стала с водой.
11) ActionMove(1,0) - изменяет координату тайла на заданные приращения по X и по Y. Именно с помощью этого действия и движется, например, тайл огня.
12) ActionSetEnabled(true) - задаёт разрешён тайл или нет. Если нет, он удаляется с игрового поля. Так можно избавляться от ненужных предметов и персонажей.
13) ActionEnergyUpdate(-1) - изменяет энергию Диззи.
14) ActionAddScore(100) - изменяет очки Диззи. Кстати, можно и уменьшать.
15) ActionAddLife() - добавляет Диззи жизнь.
16) ActionAddItem() - увеличивает счётчик найденных предметов на 1 (в Диззи-6 Диззи собирал вишенки, например).
Начало и конец блоков действий описывают:
ActionBegin
ActionEnd
и
ActionFirstBegin
ActionFirstEnd
ActionSecondBegin
ActionSecondEnd.
Есть ещё команды, выполняемые до начала игры и к действиям и условиям не относящиеся:
1) SetDescription("BOTTLE WATER","БУТЫЛКА ВОДЫ")- задать описание.
2) CopyPosition("FIRE","FIRE_POS") - перенести тайл в позицию другого тайла.
3) SetDizzyPosition("DIZZY_START_POSITION") - перенести Диззи в позицию тайла. Позволяет задать место старта.
Особый тайл имеет имя "RESPAWN" - его нужно ставить там, где Диззи может погибнуть. Тогда Диззи возродится у ближайшего такого тайла.
Пример сценария:
IfUse("BOTTLE WATER","WAIT CAT")
ActionFirstBegin
ActionChangeGlobalDescription("ПУСТАЯ БУТЫЛКА")
ActionChangeGlobalName("BOTTLE")
ActionSetAnimationStep(0)
ActionFirstEnd
ActionSecondBegin
ActionSingle()
ActionChangeGlobalName("LUCKY CAT")
ActionCopyPosition("RING","RING_POS")
ActionMessage(30,100,"ДИЗЗИ ДАЛ БУТЫЛКУ ВОДЫ КОТЁНКУ...")
ActionMessage(40,80,"БУЛЬК-БУЛЬК!\СПАСИБО! ЗА ЭТО Я ДАМ ТЕБЕ\КОЛЬЦО. Я ЕГО ГДЕ-ТО СПЁР.")
ActionAddScore(100)
ActionSecondEnd
Или вот:
IfDizzyIntersection("FIRE_LEFT")
ActionBegin
ActionEnergyUpdate(-1)
ActionEnd
Ну вот, вроде бы и весь язык.