Dizzy для CD32

Описания, прохождение, секреты, и прочее про амижные игры.

Модераторы: striimii, Vinnny

Re: Dizzy для CD32

Сообщение aGGreSSor 01 июл 2021, 23:22

da-nie писал(а):Увы, не умею.

Если даунгрейдиться до Qt 4.7, в теории можно собрать для AmigaOS 4
Ну, если ещё каких-нибудь отмороженных фреймворков типа Allegro не нахватаете. :D
Jedem das Seine

A1230@50MHz/32M/80G, Mediator PCI (S3 ViRGE/DX 4M, RTL8139), GBS-8200;
A2000@7,14MHz without all ;)
Аватара пользователя
aGGreSSor
Надоедливый Амигодух
Надоедливый Амигодух
 
Сообщения: 365
Зарегистрирован: 10 фев 2004, 12:41
Откуда: Saint-Petersburg, Russia

Re: Dizzy для CD32

Сообщение da-nie 01 июл 2021, 23:25

Так это редактор под Qt. ;) Игра-то просто тупо в массив кидает данные тайлов, а потом средствами ОС отрисовывает этот массив. Потому-то игру и можно будет портировать хоть на калькулятор. Только написана она на С++ 11 и требует компилятора с этого языка, а потому, например, для моей A500 это точно не собрать. :)
Мой репозиторий: https://github.com/da-nie
Мои статьи: https://habr.com/ru/users/da-nie/posts/
Моё видео: https://www.youtube.com/channel/UCUroi3D5Kf1WxDzg3ON852g/videos
Аватара пользователя
da-nie
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 240
Зарегистрирован: 23 сен 2011, 17:25
Откуда: Ленинградская область

Re: Dizzy для CD32

Сообщение da-nie 09 июл 2021, 18:16

Обновил репозиторий. Сейчас можно даже сыграть немного. Есть предметы: ведро, колба с ядом, кольцо, бутылка. Причём, можно применять разные вещи в разных местах. Скажем, колбу с ядом можно попытаться вылить в колодец (а можно дать котёнку :) ). Бутылку с водой тоже можно вылить в колодец. Вообще, можно будет сделать нелинейный сюжет. Скажем, если взять воду в реке, то котёнок даст один предмет. А если из колодца, то другой. А если в колодец бросить, например, сахар, то третий. :) Сценария у меня как не было, так и нет. Графику пока набираю по инету. Движок почти готов - нужно сделать места восстановления Диззи после гибели (сейчас пока и погибнуть нельзя), ограничить число предметов в инвентаре, сделать скриптовый язык (я уже понял, каким он должен быть). И вот потом начинать разработку уже, собственно, игры. :) Благо у меня на работе есть один из авторов "Операция "Красный холодильник" (на ZX-Spectrum) - может он мне сценарий придумает. :)
Мой репозиторий: https://github.com/da-nie
Мои статьи: https://habr.com/ru/users/da-nie/posts/
Моё видео: https://www.youtube.com/channel/UCUroi3D5Kf1WxDzg3ON852g/videos
Аватара пользователя
da-nie
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 240
Зарегистрирован: 23 сен 2011, 17:25
Откуда: Ленинградская область

Re: Dizzy для CD32

Сообщение da-nie 14 июл 2021, 21:25

Сейчас программа выглядит уже так. И это уже практически полноценная игра (точнее, движок).

dizzy_1.png
dizzy_1.png (25.89 KiB) Просмотров: 3055


Диззи уже может погибнуть. :)

Принцип работы движка следующий. Весь мир разбит на тайлы 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

Ну вот, вроде бы и весь язык. :)
Мой репозиторий: https://github.com/da-nie
Мои статьи: https://habr.com/ru/users/da-nie/posts/
Моё видео: https://www.youtube.com/channel/UCUroi3D5Kf1WxDzg3ON852g/videos
Аватара пользователя
da-nie
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 240
Зарегистрирован: 23 сен 2011, 17:25
Откуда: Ленинградская область

Re: Dizzy для CD32

Сообщение aGGreSSor 16 июл 2021, 01:00

Это выглядит как Instead для Dizzy :)
А как же плейфилды? Копперная заливка фона? Без этого Диззи не такой Диззи.
Вообще, Dizzy зовут моего кота. Он породы "русская голубая", так что у него есть паспорт (который предъявляется кошачьим клиникам, гостиницам и неверящим). По БД "Веги" это единственный породистый кот с такой кличкой в Санкт-Петербурге!) Это я к тому, что давать яд котятам - жестоко. Хотя если кот Шрёдингера, то - можно. :)
Jedem das Seine

A1230@50MHz/32M/80G, Mediator PCI (S3 ViRGE/DX 4M, RTL8139), GBS-8200;
A2000@7,14MHz without all ;)
Аватара пользователя
aGGreSSor
Надоедливый Амигодух
Надоедливый Амигодух
 
Сообщения: 365
Зарегистрирован: 10 фев 2004, 12:41
Откуда: Saint-Petersburg, Russia

Re: Dizzy для CD32

Сообщение da-nie 19 июл 2021, 07:38

Это я к тому, что давать яд котятам - жестоко. Хотя если кот Шрёдингера, то - можно.


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

Вот некоторый обзор того, что вышло

Странно, сейчас сюда и ещё на ряд сайтов могу зайти только через VPN. Хм.
Мой репозиторий: https://github.com/da-nie
Мои статьи: https://habr.com/ru/users/da-nie/posts/
Моё видео: https://www.youtube.com/channel/UCUroi3D5Kf1WxDzg3ON852g/videos
Аватара пользователя
da-nie
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 240
Зарегистрирован: 23 сен 2011, 17:25
Откуда: Ленинградская область

Re: Dizzy для CD32

Сообщение aGGreSSor 19 июл 2021, 13:00

Супер, спасибо за демонстрацию, выглядит как полноценный движок, который можно использовать.
Из риквестов, помимо копперных плейфилдов (как в Spellbound Dizzy на Амиге https://youtu.be/olhm_w5k6_4?t=2614 ).

Есть проблемы с плавностью движения экрана. В том же Spellbound и на спектруме, и на амигах, зубы сводило от плавности когда мы улетали с катапульты в небо и гуляли там по облакам. Движение экрана при подпрыгивании с платформы происходит не в тот же момент что прыжок (судя по ролику), т.е. есть проблема с коллизей, ну и даже при прокрутке экрана влево-вправо экран тоже дёргается (хотя это всё может быть артефактами записи экрана). Плавность - преимущество. Был движок Dizzy на AMOS, так вот он с плейфилдами и суперплавный.

Ещё на облаках Dizzy тонул.
В каких-то частях он за них еле держался, в каких-то долго тонул, но ходить по облакам аки посуху ни в одной не получалось. :)
Ещё была классическая возможность в Dizzy - лазание по сучкам деревьев, в т.ч. невидимых сучкам.
Ещё не увидел чтение свитков.
Это важный момент: записки от автора типа: "Налево пойдёшь - лицо разобьёшь, направо пойдёшь - яйцо разобьёшь".
Ещё в продвинутых частях Dizzy его внешность могла меняться.
Ещё была тема: когда умирает - садится на попу, оживает - встаёт, отряхивается.

По музыке. Думаю, CJ Splinter не обиделся бы если бы ты взял его World of Dizzy (Ring of Zaks).
Тем более что это по сути ремикс "Комбайнёров" Растеряева. :bash:

Кстати, подумай о поп-фильтре для микрофона.
Jedem das Seine

A1230@50MHz/32M/80G, Mediator PCI (S3 ViRGE/DX 4M, RTL8139), GBS-8200;
A2000@7,14MHz without all ;)
Аватара пользователя
aGGreSSor
Надоедливый Амигодух
Надоедливый Амигодух
 
Сообщения: 365
Зарегистрирован: 10 фев 2004, 12:41
Откуда: Saint-Petersburg, Russia

Re: Dizzy для CD32

Сообщение da-nie 20 июл 2021, 07:26

Есть проблемы с плавностью движения экрана.


В основном, только на видео. Оно 30 FPS и программа идёт в 30 FPS. Впрочем, в программе есть моменты - надо убрать работу по таймеру и перейти на такты процессора. Так стабильнее работает.

Движение экрана при подпрыгивании с платформы происходит не в тот же момент


А вот это есть. Там просто надо при изменении координаты при вытеснении Диззи карту двигать, а я забыл. :)

Ещё на облаках Dizzy тонул.


В 3 части (на ZX) ходил, как у меня. И я ГОРАЗДО БОЛЬШЕ люблю, когда не тонет. :) А когда тонет, это бесит. :)

Ещё была классическая возможность в Dizzy - лазание по сучкам деревьев, в т.ч. невидимых сучкам.


Это есть, но я не запрыгивал на дерево. :)

Ещё не увидел чтение свитков.


Свитки были в Dizzy-2. В 3 и 4 не было. Да и смысл в них? Долго разворачиваются, неудобно.

Ещё в продвинутых частях Dizzy его внешность могла меняться.


Это в каких? :roll: Я играл только на ZX (1,2,3,4,6) и 6 на Амиге.

Ещё была тема: когда умирает - садится на попу, оживает - встаёт, отряхивается.


А в воде как? :) Кстати, не видел такого. Это в какой части?

По музыке. Думаю, CJ Splinter не обиделся бы если бы ты взял его


Забавно. Но вот эта писклявость звуков, боюсь, будет раздражать людей. :) Это ж фоновая музыка, её слушать постоянно...

Кстати, подумай о поп-фильтре для микрофона.


Выбросить его надо, этот микрофон. Бубнит. Он электродинамический от караоке. С самопальным усилителем - иначе хрен чего слышно. Есть у меня нормальный, но в другом городе.
Мой репозиторий: https://github.com/da-nie
Мои статьи: https://habr.com/ru/users/da-nie/posts/
Моё видео: https://www.youtube.com/channel/UCUroi3D5Kf1WxDzg3ON852g/videos
Аватара пользователя
da-nie
Престарелый Амигодум
Престарелый Амигодум
 
Сообщения: 240
Зарегистрирован: 23 сен 2011, 17:25
Откуда: Ленинградская область

Пред.

Вернуться в Игры

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 4

cron