Комментарии 29
Теплый ламповый Dizzy. Помниться русские «клоны» X и Y мне достались уже под TR-DOS…
«ладно, давай сюда свои крэкеры иностранные» — алкаш про сухой корм для собак
«ладно, давай сюда свои крэкеры иностранные» — алкаш про сухой корм для собак
+1
О, эта игра у меня в ТОПчиках ходила на кассетах, действительно очень играбельно было, я потом ещё младшую сестру подсадил на прохожение квестов.
+3
О, времена… Еще лежит у меня такая кассета
+5
Надо оцифровать :)
+1
Оцифровал — там не было ничего специфического, чего не было уже оцифровано энтузиастами группы vk.com/tapeversion
+1
Традиционно спрошу, нет ли у кого алгоритма движения/прыжков Dizzy? Как в оригинальной игре изменялись координаты?
+1
я думаю там были таблички с координатами движения, обычно так делали для всяких скроллингов, т.к. считать sin&cos на 8-битном процессоре в реальном времени как то не комильфо.
+1
Всё может быть. Но довольно много народу сделали Dizzy в РФ. Вот бы кто-нибудь из них и рассказал, как перемешается персонаж. Мне там всё интересно. Как он поднимается, как отскакивает от стенок и препятствий (помните, шажок не угадали, откуда прыгнуть, и Dizzy скачет мячиком куда не надо), как кувыркается на месте.
+1
Это уже механика игры, думаю сейчас ничего не изменилось, обычно если фона не было, то проверяли на границы экрана и присутствие пикселей, если фоны есть, то уже можно сверяться с картой уровня, например для простоты сделанной как карта знакомест(то что отвечает за цвета на zx spectrum), а кувыркается на месте, это по сути спрайты, заранее рисовали, а потом уже делали анимацию, сменой спрайтов, на спектруме изображение формировалось в памяти, не было никаких сопроцессоров, как например на денди.
Обычно когда хотелось посмотреть что и как работает, брался STS и изучался код :), так и учились.
Обычно когда хотелось посмотреть что и как работает, брался STS и изучался код :), так и учились.
+1
По ступенькам он поднимается следующим методом. Диззи делает шаг вбок (если высота стенки не больше чем N пикселей). Внезапно внутри него оказывается ступенька, движок выдавливает его наверх.
Разумеется мы собирались делать свой Диззи, поэтому я понемногу начал разбираться в этом. Правда потом всё затихло.
На самом деле, не особо сложно сейчас взять какой-нибудь Диззи 3.5 и разобраться в движке. Он не очень большой по размеру, там мало графики, зато есть полный набор движений, прыжков и всего такого.
Разумеется мы собирались делать свой Диззи, поэтому я понемногу начал разбираться в этом. Правда потом всё затихло.
На самом деле, не особо сложно сейчас взять какой-нибудь Диззи 3.5 и разобраться в движке. Он не очень большой по размеру, там мало графики, зато есть полный набор движений, прыжков и всего такого.
+1
так код доступен же. на прерывании по таймеру он висел, насколько я помню. не такой уж он мудреный был, я чет копался в нем в детстве
+1
Я в начале 90-х на денди видел игры с целым порядковым числом. Например: боевые жабы 1, боевые жабы 2. Но как-то пришел к товарищу и там его кореш через кассету заливает в какой-то спектрум dizzy 1.2. Мой мир был сломан — я и понятия не имел — как это версия игры может быть не целым числом))
А потом dizzy досталась мне на денди — вот я тетрадку исписал как мне эти квесты проходить. Так и не победил. А в нашем поселке буклеты типа: секреты 1000 игр денди — не достать. Интернета не было. Выживали как могли))
Тёплое ламповое детство.
А потом dizzy досталась мне на денди — вот я тетрадку исписал как мне эти квесты проходить. Так и не победил. А в нашем поселке буклеты типа: секреты 1000 игр денди — не достать. Интернета не было. Выживали как могли))
Тёплое ламповое детство.
+1
Dizzy 1.2? Впервые слышу. :) Я только Dizzy 3.5 знаю.
+1
Причём это была не полноценная игра, а короткая интермедия в пару экранов.
+1
Ну версию я образно назвал. Всё таки почти 30 лет назад дело было. Просто школьник о версионности знал что есть версия игры 1 и вторая часть. А тут дробная. Молодой мозг тогда сопротивлялся — «как такое может быть?»))
+1
А они случайно не рассказывали как им пришла мысль сделать этот чортов мост в Диззи 1? Уверен много клавиатур было сломано от злости, когда до конца прохождения оставалось пара действий, но ты ошибся с прыжком.
+2
Недавно мне о Dizzy напомнил этот демейк на pico-8: https://www.lexaloffle.com/bbs/?tid=29388
+1
Ссылка на оригинал не открывается.
0
Оригинала в сети нет — там ссылка на сайт издательства. Журнал можно скачать из архивов.
+1
одна из интереснейших игр детства. в жанре "принеси-подай" так точно! :) очень нравилась неочевидность но логичность заданий.
+2
Списывался с братьями года 3 назад, обменялись подарками. Прислали мне вот такой интересный артефакт
Еще есть некоторое количество сканов их рабочих записей. А вообще можно купить отличную книгу The Story of The Oliver Twins
Еще есть некоторое количество сканов их рабочих записей. А вообще можно купить отличную книгу The Story of The Oliver Twins
+3
Официальный Dizzy 8 прямо очень крутой по графике. Вроде железо то же самое, но арт дизайн продвинулся за эти годы.
+1
Ностальгия! Как сейчас помню, как проходил яйцо на спектруме. Fantasy World которая.
Были потом попытки играть в Dizzy на ПК (были версии) или на эмуляторе — но это все не то уже
+1
Я начал делать свою игру про Диззи.
Если кому интересно, проект будет развиваться тут:
Редактор карт (под Qt 5.7).
Сама игра про Диззи (MFC).
В репозиториях исходники, графика, карты и исполняемые файлы.
В данный момент реализована анимация (пока в редакторе в режиме вставки тайла можно нажать Insert и откроется окно анимаций; из других клавиш работает delete в режиме выбора и escape при вставке блока тайлов). В самойже игре сделана прокрутка экранов, добавлены кувырки (если Диззи падает на голову, он продолжает движение с перекатыванием), а анимацию игра и так поддерживала изначально (только редактор её не мог сделать).
Разработка продолжается и, возможно, когда-нибудь я доделаю игру. :)
Если кому интересно, проект будет развиваться тут:
Редактор карт (под Qt 5.7).
Сама игра про Диззи (MFC).
В репозиториях исходники, графика, карты и исполняемые файлы.
В данный момент реализована анимация (пока в редакторе в режиме вставки тайла можно нажать Insert и откроется окно анимаций; из других клавиш работает delete в режиме выбора и escape при вставке блока тайлов). В самойже игре сделана прокрутка экранов, добавлены кувырки (если Диззи падает на голову, он продолжает движение с перекатыванием), а анимацию игра и так поддерживала изначально (только редактор её не мог сделать).
Разработка продолжается и, возможно, когда-нибудь я доделаю игру. :)
+1
А сейчас всё это выглядит уже так. И это уже практически полноценная игра (точнее, движок).
Диззи уже может погибнуть. :)
Принцип работы движка следующий. Весь мир разбит на тайлы 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
Ну вот, вроде бы и весь язык. :)
Диззи уже может погибнуть. :)
Принцип работы движка следующий. Весь мир разбит на тайлы 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
Ну вот, вроде бы и весь язык. :)
+1
Олег Ориджин
Таинственный разработчик, которого так хотел увидеть ведущий канала SincLair, что провёл расследование, результатом которого было недоумение. :)
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
История Dizzy