ELITE
Скоро Хэллоуин, решил сделать несколько сезонных пасхалок.
Играть в браузере: https://scf37.ru/tools/games/elite
Скоро Хэллоуин, решил сделать несколько сезонных пасхалок.
Играть в браузере: https://scf37.ru/tools/games/elite
Эта публикация вдогонку к прошлому посту, где я описывал свои ощущения от первого просмотра фильма "Звездные войны: Эпизод 4 - Новая надежда" в детстве.
Естественно очень хотелось самому оказаться участником кинокартины и в этом могла помочь компьютерная игра, но, к сожалению, технологии того времени были ещё на очень низком уровне, чтобы воплотить все пожелания игроков. Поэтому часто приходилось звать на помощь воображение.
В конце 80х годов самым распространенным домашним компьютером у нас стал ZX Spectrum. Он состоял из клавиатуры со встроенным примитивным 8-разрядным процессором и выдавал всего 15 цветов на экране. Причем многие игроки были лишены и этого, так как часто "Спектрум" подключался к черно-белым телевизорам. Мониторы дома тогда использовались очень редко. Игры загружались с помощью магнитной аудиокассеты, на которую в то время также, если кто-то забыл, ещё можно было записывать и слушать музыку. Очень часто возникали проблемы с загрузкой игр из-за размагничивания ленты или из-за низкого качества кассетного магнитофона.
Я помню, как с огромным интересом играл в игру под названием "Death Star Interceptor" (1985). Она состояла всего из трех уровней и теоретически проходилась за несколько минут, но учитывая запредельный по сложности уровень геймплея, прохождение могло растягиваться на часы.
Первый уровень состоял из взлета космического истребителя с планеты Явин для перехвата "Звезды смерти". Нужно было попасть фигуркой истребителя в узенький прямоугольник вверху экрана и поверьте мне - это было очень-очень сложно!))) А вот этот момент из фильма.
Второй уровень состоял из боя в космосе с имперскими перехватчиками. От них нужно было уворачиваться, либо пытаться их сбить. На это давалось три жизни и если их потерять, то происходил "Game over" и всю игру приходилось начинать сначала.
Обыгрывалась сцена схваток истребителей над "Звездой смерти", но сама космическая станция висела, как бы на заднем плане, но всё время увеличивалась, создавая иллюзию, что мы к ней приближаемся.
На последнем уровне нужно было пролететь через тоннель и сбросить бомбы в шахту. На экране - это малюсенький кружок, в который нужно было попасть и это почти никогда не получалось сделать с первого раза. Кроме того из стен палили пушки.
И нужно отдать должное, что на тот момент игра очень хорошо передавала атмосферу фильма. После точного попадания, экран начинал мигать, имитируя взрыв "Звезды смерти". В современных играх это выглядело бы уже, как в фильме или даже эффектнее. Уже в современное время заново прошёл "Death Star Interceptor" на эмуляторе "Спектрума" и хотя прохождение у меня сейчас заняло максимум 15 минут, ощущения от геймплея до сих пор отличные.
Позже в 90е годы была ещё одна игра, которая произвела на меня неизгладимое впечатление - "Star Wars: Rebel Assault II: The Hidden Empire (1995)." Это уже было время начала распространения персональных компьютеров. Игра была записана на нескольких лазерных дисках. И, как почти у всех компьютерных игр того времени, у неё не было перевода на русский. "Rebel Assault 2" - это по сути отдельная полноценная серия "Звездных войн". Кино, которым можно управлять.
Уровни состояли из полетов на таком же космическом корабле, как "Тысячелетний сокол" и перестрелок с имперскими штурмовиками. Управление осуществлялось либо мышью, либо джойстиком, либо с клавиатуры. Уровень сложности по современным меркам - "хардкорный". Если играть сегодня, то это оптимальнее всего делать с использованием "чит-кодов", которые дают бесконечное здоровье игроку. А ещё лучше просто посмотреть прохождение по видеороликам в интернете.
Между всеми уровнями были кино-вставки с Дартом Вейдером и другими настоящими актерами. В общем, было непередаваемо круто и в конце даже присутствовал романтический финал. Но об этом я узнал намного позже, так как в 90е годы смог пройти игру только до половины.
Более современные игры уже не произвели на меня такого же сильного впечатления, как эти две из детства.
По материалам Дзен-канала "Сергей Джей Фокс: фильмы", публикация от 18 ноября 2023 г.
Уверен, в предсталении не нуждается. Каждый, кто играет в любых потомков этого жанра, от серии X от Egosoft до Elite Dangerous, знают родоначальника этого жанра, а, кто постарше, провели в ней огромное количество часов, пытаясь получить заветный ранг ELITE.
К сожалению, старые игры плохоиграбельны по современным стандартам, но опять же современные технологии способны решить даже эту проблему.
Современный AI способен разобрать старую игру по байтикам и собрать заново, на современных языках, для современных платформ. Конечно, с помощью человека, который знает, что ему надо, как это получить и как проверить результат.
Прошу, Elite для ZX Spectrum 48K, в браузере, 60 fps, отзывчивое управление, полностью рабочая, с пофикшенными багами 40-летней давности.
Тому кто досмотрел до конца: посты в телеге опережают Пикабу на 5 недель t.me/joevondayl
В свои 12-13 лет я с друзьями с удовольствием гонял на Спектруме в игры по фильмам «Рэмбо», «Чужие», «Бэтмэн».
Тогда мы не представляли себе, что это (разработка игр вообще) целая индустрия и бизнес. Диссонанса от того, что на Синклере были доступны сотни игр, а на БК пара десятков, почему-то не возникало. Я думал, что делали игрушки фанаты и производители компьютеров, как для советских ПК.
При чем тут деньги, если все можно скопировать с кассеты на кассету?
Тем временем, один только «Робокоп» для Commodore 64, ZX Spectrum, Apple II, Amstrad CPC, MSX и других платформ разошелся тиражом более 1 000 000 экземпляров (источник). А в Британии его признали лучшим релизом 1989 года для Спектрума.
Поговорим об успехах и провалах, порассуждаем о причинах бума разработки игр по мотивам кино, и вспомним хиты того времени.
Написано специально для ▶️Timeweb Cloud и читателей Pikabu.
После роста 1970-х прибыль от проката фильмов в начале 1980-х начала падать, в то время как бюджеты на производство, гонорары актеров и маркетинг заметно выросли.
Кризис затронул всю отрасль (источник):
Около 60% работников отрасли остались без работы. Были и перекосы в большую сторону. Например, у электриков 90%, а у костюмеров 75%.
За первые четыре месяца 1982 года количество фильмов в производстве сократилось на 33% по сравнению с 1981 годом.
Убытки студий были огромными. По словам Роберта Корта (в начале 1980-х годов работал вице-президентом по рекламе, а затем старшим вице-президентом по производству на киностудии 20th Century Fox), если не считать кассовый успех «Полицейского из Беверли-Хиллз», за шесть месяцев 1984 года студии потеряли около 160 миллионов долларов.
Отмечу, что в 1990-м игра Beverly Hills Cop вышла на Commodore 64, ZX Spectrum, BBC Micro, Amstrad CPC, Amiga, Atari ST и PC.
Источник: https://zxart.ee/prod/94506
Источник: https://zxart.ee/prod/94506
В этой ситуации компании активно искали новые источники дохода. Пока я собирал информацию для статьи, мне случайно попалась любопытная книга Фрэнка Хоффмана и Вильяма Бейли (Frank W. Hoffmann, William G. Bailey) «BookFashion & Merchandising Fad» 1994 года.
Собственно, интересовала только одна глава - «Лицензирование известных медиаперсонажей». В ней есть такие данные:
Индустрия лицензирования к 1983 году превратилась в гигантский рынок объемом 20,6 миллиардов долларов в год (по сравнению с 6,6 миллиарда в 1978 году). И видеоигры стали его важнейшей частью.
Студии поняли, что могут не просто продавать билеты, а монетизировать интерес к фильму с помощью товаров. Например, Джордж Лукас изначально представлял себе «Звездные войны» с товарными производными. Т.е. уже тогда делал больше, чем просто фильм.
Для киностудий лицензирование было почти беспроигрышным вариантом. Они получали гарантированный крупный аванс и роялти (обычно 7-10% от оптовой цены продукта) , почти ничем не рискуя. Вся ответственность за создание игр и ее коммерческий успех ложилась на издателя.
Например, к моменту выхода сиквела «Империя наносит ответный удар» бренд Star Wars принес компании 75 миллионов долларов лицензионных отчислений при розничных продажах на сумму 1,5 миллиарда долларов (5%).
Это был стабильный приток средств, независимый от кассовых сборов.
Здесь я снова вернусь к одному из главных хитов Ocean - RoboCop.
Компания приобрела лицензию на еще не вышедший фильм неизвестного режиссера всего за 10 000 долларов (версии разнятся, в источнике указана еще одна сумма - 2 000 долларов).
Кроме того, что игра разошлась по всему миру тиражом около миллиона копий, она стала одной из самых продаваемых игр для домашних компьютеров десятилетия (есть альтернативные данные, что Ghostbusters сделала два миллиона продаж).
В британских чартах RoboCop продержался рекордные 36 недель.
Да, издатели платили авансы и роялти. А взамен получали гарантированное внимание. Игра по мотивам нового блокбастера давала мгновенную узнаваемость и огромную аудиторию.
Здесь тоже есть нюанс: некоторые издатели для экономии выкупали только часть «фирмы»: логотип, название, образы героев. Поэтому в некоторых играх не было, например, оригинальной музыки из фильма.
За права на использование названий, героев и музыки хитов разворачивалась настоящая война. И как раз здесь кроется причина многих провалов.
Гонка за лицензиями на еще не вышедший фильм превращалась в бизнес-модель «успеть к премьере». Дата выхода известна. Сделки для покупки лицензий требовали времени. Сроки горели. Получив сценарий и фото, компании должны были немедленно приступать к делу, т.к. на разработку часто оставалось 2-3 месяца.
Программисты, как правило, узнавали обо всем последними, а студии зачастую не раскрывали деталей. Разработчики впахивали вслепую, придумывая свои адаптации сценариев к играм, сюжеты упрощались, а дедлайны были нереальными.
Игра по фильму «Инопланетянин» (E.T. the Extra-Terrestrial, 1982). Переговоры о лицензии завершились к концу июля 1982 года, и у разработчика Говарда Скотта Уоршоу было всего шесть недель, чтобы создать игру для Atari 2600 к рождественским продажам.
В среднем на игру для Atari уходило как минимум 24 недели. Концепцию придумали за пару дней. Результат был плачевным: игра была полна багов, дизайн были убогим, и Atari, осознавая низкое качество продукта, даже приложила к картриджу специальное руководство с советами по игре.
В результате перепроизводство и возвраты привели к тому, что миллионы картриджей были захоронены на свалке под слоем бетона.
Перенасыщенный мусором рынок привел к краху индустрии видеоигр в США в 1983 году, после чего Голливуд на время сбавил обороты.
Другой пример. Оригинальная версия Total Recall для Spectrum так и не вышла к намеченному сроку (Рождество). Разработку игры с нуля поручили новой команде, которую они сделали всего за две недели. Оригинал, к сожалению, потерян.
Ghostbusters (1984). Columbia Pictures предложила Activision лицензию на игру с единственным условием: сделать как можно быстрее, пока ожидание премьеры находится на самом пике. Разработчики уложились в шесть недель. Интересно, что игра вышла до того, как фильм добрался до кинотеатров.
Игра на C64. Источник: https://www.c64-wiki.com/wiki/Ghostbusters
Ghostbusters стала хитом, но пример отлично показывает, как маркетинговые дедлайны диктовали условия.
Зефирка. Источник: https://www.c64-wiki.com/wiki/Ghostbusters
Порой и сами разработчики страдали от провальных фильмов. Например, Howard the Duck получила в основном, негативные отзывы, как и кино (номинировано на премию «Золотая малина» в семи категориях, выиграло в четырех).
Источник: https://idpixel.ru/games/howardtheduck/
Голливуд хотел независимого источника денег, разработчики и издатели - готовую аудиторию и узнаваемость. И те, и другие получили урок, который работает и сейчас: любовь зрителя к фильму и наличие лицензии не заменят качество и достаточное количество времени, необходимого на разработку.
Тем удивительнее, что в таких жестких условиях рождались настоящие шедевры той эпохи.
Кассетный вкладыш. Источник: https://worldofspectrum.org/archive/software/games/aliens-electric-dreams-software
Часто игры покупали, только увидев обложку и знакомые образы. Кому не хочется попробовать себя в роли Бэтмэна или Рипли, и стать главным героем любимого фильма самому или на пару с другом?
Вспомним легендарные игры того времени?
Aliens (Software Studios, издатель Electric Dreams Software, 1987)
Источник: https://worldofspectrum.org
Источник: https://worldofspectrum.org
Рипли (игрок) управляет шестью персонажами с удаленного терминала, проводя их по комплексу из 255 комнат в поисках Королевы Чужих. У каждого персонажа есть камера на шлеме и оружие.
К сожалению, я так ее и не прошел. Она была страшноватой и сложной. Без инструкций нам оставалось только бродить по комнатам и расстреливать все, что уничтожается.
Здесь есть и датчики приближения, и растущая биомасса Чужих, откуда появляются «лицехваты», и смертельная кислота после расстрела вражин, которая не позволяет пройти через двери.
Сюжет приближен к фильму. Например, Чужой может захватить члена команды и будет охранять его, пока происходит процесс заражения «лицехватом». На это указывает изменение цвета индикатора биомонитора на желтый.
Можно отправить другого перса в ту же комнату. Если ему удастся убить стоящего на страже Чужого, пленник будет освобожден. Однако, если заражение завершено, вся связь этого члена экипажа с Рипли будет потеряна, а портрет изменится на морду Чужого.
Здесь даже есть Ньют. Насколько помню, когда вы ее видите, вы получаете дополнительные очки.
Batman: The Movie (Ocean Software, 1989)
Источник: https://worldofspectrum.org
Источник: https://worldofspectrum.org
Игра стала динамичным игровым блокбастером, который позволял игроку «прожить» ключевые моменты фильма. Это была формула успеха, которая принесла Ocean миллионы и статус короля лицензионных игр той эпохи.
5 уровней. Лучше это увидеть в динамике.
Химический завод. Бэтмен охотится на Джокера. Можно использовать веревку для перемещения и бросать бэтаранги во врагов.
Источник: https://zxart.ee/prod/94222
Погоня на Бэтмобиле. Нужно уйти от преследования Джокера, уворачиваясь от полицейских машин и других препятствий.
Источник: https://zxart.ee/prod/94222
Бэт-пещера: Головоломка. Бэтмен должен идентифицировать различные компоненты смертельного газа «Смайлекс», который выпустил на рынок Джокер.
Источник: https://zxart.ee/prod/94222
Бэт-винг. Игрок управляет самолетом и должен перерезать веревки воздушных шаров, наполненных ядовитым газом, не задевая при этом сами шары.
Источник: https://zxart.ee/prod/94222
Готэмский собор. Финальный уровень, стилизованный под первую часть. Бэтмен пробивается на вершину собора, чтобы дать финальный бой Джокеру.
Источник: https://zxart.ee/prod/94222
Оригинальная фишка игры - шкала здоровья, где лицо Бэтмена постепенно превращается в лицо Джокера по мере потери энергии.
Back to the Future (Electric Dreams Software, 1985)
Источник: https://worldofspectrum.org
Источник: https://worldofspectrum.org
Вторая и третья части были сделаны в псевдо 3D.
Источник: https://worldofspectrum.org
Источник: https://worldofspectrum.org
Итак, про первую часть.
Марти Макфлай попадает в 1955 год и должен обеспечить встречу своих будущих родителей, чтобы не исчезнуть в будущем.
Персонаж перемещается между пятью локациями (главная улица города, школа, лаборатория Дока, танцзал, кафе). Нужно собрать пять вещей из фильма, чтобы влиять на поведение персонажей и в конце концов привести Джорджа и Лоррейн к танцу, где они должны поцеловаться.
Было бы неправильно не рассказать об этом:
Любовные стихи находятся в школе. Их нужно отдать Джорджу, чтобы он начал следовать за Лоррейн.
Чашка кофе находится в кафе. Ускоряет самого Марти и поможет временно оглушить хулигана Бифа.
Костюм пришельца находится в доме Дока Брауна. С его помощью Марти пугает Джорджа, чтобы он следовал за Лоррейн.
Гитара находится в танцевальном зале. Когда Джордж и Лоррейн оказываются рядом на танцполе, Марти играет на гитаре, они замирают, и уровень их любви начинает расти.
Скейтборд не влияет на персонажей, но позволяет Марти быстрее передвигаться и защищает его от ударов Бифа.
Количество оставшегося времени, за которое герои должны сблизиться, указывается при помощи исчезающей семейной фотографии в нижнем правом углу.
Первая часть показалась мне скучной. Видно, что делали ее в очень жесткие сроки. Но изучая описания и прохождения, я понимаю, что разработчики вложили в нее довольно много интересных фишек и механик.
У персонажей есть свои роли и линии поведения. Например, Лоррейн преследует Марти (в фильме она влюблена в него), Джордж избегает хулигана Бифа, а Биф нокаутирует Марти при столкновении.
Rambo: First Blood Part II (Ocean Software, 1985)
Источник: https://worldofspectrum.org
Источник: https://worldofspectrum.org
Для Ocean Software разработка первой крупной лицензионной игрой и важнейшим шагом на пути к лидерству в этой нише. Эта игра прочно ассоциируется с Ocean и заложила основу для их будущих кино-адаптаций.
Я все еще помню музыку и шум вертолета…
Игрок управляет Рэмбо. Нужно найти пропавшее снаряжение, отыскать лагерь военнопленных, освободить их и добраться до точки эвакуации. Наверное, эта игра для меня даже лучше Commando, но не дотягивает до Ikari Warriors. Игра относительно короткая. Если хотите вспомнить молодость, запустите в эмуляторе. Не пожалеете.
Predator (Activision, 1987)
Источник: https://worldofspectrum.org
Источник: https://worldofspectrum.org
Одна из самых неоднозначных киноадаптаций на Spectrum. Игра получила и восторженные рецензии от Sinclair User, и смешанные отзывы, и даже попала в немецкий список запрещенной для несовершеннолетних продукции. Но ее главная особенность даже не в этом. Ее сделали на основе другой игры.
Исходная игра изначально разрабатывалась компанией System 3 под названием Gung-Ho! еще до того, как кто-либо вообще услышал о «Хищнике».
Activision увидела раскадровку вскоре после приобретения лицензии на создание игры по фильму, и обратилась к System 3 с просьбой разработать ее.
Разработчик Тим Бест внес необходимые изменения в свой дизайн, а Хью Райли (Last Ninja) обеспечил превосходную графику.
В игре отряд уже уничтожен, т.к. разработчики решили упростить сценарий. Остальные ушли вперед, но их всех убил пришелец.
Штука весьма играбельная и атмосферная, в основном благодаря превосходным декорациям и убедительной прорисовке Арни (сходство поразительное).
Серия Renegade
Не могу не упомянуть про нее. До сих пор иногда запускаю в эмуляторе.
Есть даже мод, где врагов для режима одного игрока в два раза больше, а локации перерисованы (хуже, чем в оригинале, на мой взгляд).
Ее не издавали специально к фильму, но сделана она по мотивам «The Warriors» (1979). Атмосфера очень похожа на то, что видишь в Renegade и Target: Renegade. Даже локации и враги, включая женскую банду, совпадают.
Оригинальная игра Ёсихисы Кисимото Nekketsu Kōha Kunio-kun (Technos Japan Corporation, 1986) появилась на автоматах Taito и круто отличалась от «коллег» по жанру. Она не была плоской. Передвигаться можно по вертикали и горизонтали, наносить удары ногой, кулаками, в прыжке, делать броски через спину и добивать врагов.
Почитать про серию игр можно здесь.
Конечно, были еще The Running Man (Grandslam Entertainments / Virgin Mastertronic, 1989) и Terminator 2: Judgment Day (Ocean Software, 1991) и многие другие.
Поделитесь в комментариях своими любимыми играми по мотивам кино. Я точно что-то забыл упомянуть.
Больше интересных статей и новостей в нашем блоге на Хабре и телеграм-канале.
Идея заняться этим возникла после участия в качестве члена жюри последнего Технотекста. Поначалу для меня было удивительно, зачем тратить столько времени на (казалось бы) странные вещи? Газоразрядная Хабралампа, радиотелескоп в сарае, разработка радиоуправляемой машинки с нуля.
А потом как понял…И сделал игру для дочки. Она несколько раз играла в Lode Runner в эмуляторе, и попросила меня сделать что‑нибудь для нее.
Написано специально для ▶️Timeweb Cloud и читателей Pikabu.
С 1987 года у меня перебывало много компьютеров: «Сура», «БК», «Спектрум», какие‑то древние приставки «Атари» и что‑то еще. ZX Spectrum мне нравился больше всего. Много игр, отличная графика, звук. Даже на бипере!
Его собрал для меня отец, когда мне было лет 11–12. Комплектация была суперской: TR‑DOS, ч/б монитор Корвет, корпус от «Суры» с прекрасной герконовой клавиатурой (это вам не «дубовая» «Дубна»!), два дисковода (тоже от «Суры», емкость дисков 640 КБ, насколько помню).
Естественно, я очень хотел делать игры, но литературу, кроме сборников «500 игр» и книжек по Бейсику, купить или достать было негде. Готовые движки и всякие Wham The Music Box и Laser Basic были уже тогда, но не было знаний, как с ними дружить.
Поэтому, кроме бейсиковских игроподелок с псевдо‑ или «проволочной» графикой, я ничего не успел сделать. Лет в 14 лет мой «Спектрум» сгорел, и мне пришлось пересаживаться на 286 с MS DOS. Я не хотел, честно.
Лет в 15 писал для PC игрушки на Microsoft Quick Basic (порт Defender of the Crown — я тогда не знал, что эта игра написана для персоналок еще в 80-е). У него были классные библиотеки для работы с графикой. Для спрайтов я использовал коды ассемблера. Позже на С++ создал что‑то типа Tapper и прочее очень простое.
Но все же игра появилась 30 лет спустя после того, как я что‑то делал на живом «Спектруме».
Пару недель я изучал движки, редакторы спрайтов и графики, музыкальные программы. О них есть на Хабре статья Михаила Судакова @mikhailsudakov (Яндекс.Музей).
Из всего, что попробовал, выбрал движок Dizzy SE Валерия Сурженко, графический редактор ZX‑Paintbrush и музыкальный редактор Vortex Tracker II Сергея Бульбы. На сайте автора последняя игра датируется 2020 годом.
Авторы DizzyAge (редактор карт в Dizzy SE): Alexandru Simion и Cristina Simion.
Авторы оригинальных игр и владельцы прав на вселенную Диззи: Oliver Twins и Codemasters.
Скриншот сайта dizzy‑se.ru
Мне удалось связаться с автором. Прилагаю его историю целиком.
Обо мне.
Сурженко Валерий Витальевич. В спектрумовских кругах известен как Hippiman. Живу в южном городе Ростове‑на‑Дону. Сейчас работаю Java‑программистом, занимаюсь разработкой высоконагруженных распределённых бэкенд‑приложений.
Spectrum‑ом и программированием вообще заболел ещё в детстве, когда родители подарили мне на день рождения отечественный 48-килобайтный клон. Какой модели он был, к сожалению, не знаю, так как был он самостоятельно собран одним из знакомых отца.
Клон этот до наших дней не дожил, зато рабочей машинкой у меня сейчас выступает ZX Evolution rev.b. Зверь‑машина, для Baseconf которой мной было разработано несколько игр.
О Dizzy SE
Что вообще такое Dizzy? Это неофициальный маскот ZX Spectrum в странах СНГ. Об огромной популярности этого персонажа можно судить по одному только количеству фанатских игр, выпущенных в 90-е — 2000-е. Было даже несколько попыток сделать редакторы для Dizzy‑игр.
Чтобы ответить на вопрос, зачем был сделан Dizzy SE, нужно копнуть немного в историю и в устройство игровых движков.
Разработка каждой новой игры про Dizzy под ZX Spectrum всегда таила в себе целый ряд сложностей. Исторически движки Dizzy оперировали в качестве игровых объектов таким понятием, как «спрайты». Это не то же самое, что спрайты в современном понимании этого слова. Это понятие ближе к современному термину «префаб». В смысле, это заранее описанный объект со всеми характеристиками и единожды заданной графикой.
Этот подход хорош большой экономией памяти, ведь на карте располагаются просто координаты готовых объектов плюс пара параметров, вроде отзеркаливания. И плох тем, что нужно ещё до начала разработки игры чётко знать, какие объекты тебе понадобятся. Это всё‑таки старый 8-битный компьютер, а не современный движок.
Другая сложность — это логика. Всё взаимодействие с объектами, будь то диалог с Дензилом или набор воды в ведро, писалось на ассемблере точно так же, как и весь остальной код. Это позволяло вытворять с игрой что угодно — вплоть до переворачивания мира кверху ногами, как в Dizzy 3, но ассемблерный код есть ассемблерный код.
Ну и третья сложность, самая главная: вся игра от и до писалась на ассемблере, а это влекло за собой обязательное глубокое понимание внутреннего устройства машины, умение работать с памятью, экраном и так далее. Там очень много нюансов. Соответственно, абы кто просто так не мог взять и написать свою игру про Dizzy.
С другой стороны, есть открытый движок DizzyAge для создания игр под Windows. Он использует совершенно другой подход — современный. Вся игра разделяется на две части. Движок — единожды скомпилированный, который нельзя и не нужно изменять, и который берёт на себя всю низкоуровневую работу. И саму игру — графику, карты, скрипты и прочее.
Для построения игрового мира DizzyAge использует систему «брашей». Это некая область тайловой карты с уникальными параметрами, то есть тут нет заранее подготовленных объектов. Если нам нужно использовать для какой‑то области карты половинку камня, а не целый, то мы создаём браш из половинки камня. Либо дублировать одно изображение множество раз.
Грубо говоря, каменистая земля в старом подходе — это множество отдельных камней, в новом — это один браш с изображением множества камней. Это даёт очень большую гибкость, позволяет переиспользовать одну и ту же графику разными способами, но увеличивает размер самой карты, так как каждый браш на ней — это уже не условные координаты и номер объекта, а объёмный набор параметров.
Dizzy SE — это перенос идеологии DizzyAge с IBM PC на ZX Spectrum со всеми вытекающими: подход к построению мира на основе брашей, логика на основе скриптов и полная изоляция от аппаратной начинки компьютера ценой потери некоторой гибкости и быстродействия.
Зато вся игра от и до создаётся на ПК в графических интерфейсах, без необходимости вручную что‑то программировать на ассемблере, собирать образы и прочее. Чтобы создать хорошую игру, конечно, всё равно придётся напрячь голову и разобраться, но уже не в архитектуре компьютера и тонкостях вывода графики, а в скриптовании логики и работе с редакторами, что, согласитесь, намного проще.
Отдельно отмечу, что движок обрастает новыми дополнениями, а Валерий подробно отвечает на вопросы пользователей. Все контакты есть на сайте проекта.
Кстати, на движке можно делать не только игры про Диззи, но и, например, гонки или все, на что способен скриптовый язык.
Источник: интервью с Валерием Сурженко на idpixel.ru
Продолжим? На сайте автора кроме движка есть дополнительные наборы тайлов и спрайтов, игры и многое другое. Советую заглянуть.
Почему движок и именно этот, а не с нуля:
Я вполне понимал на старте объем работы — музыка, загрузочные экраны, спрайты, программная часть. Начал изучать инструменты в январе с большими перерывами, а закончил игру только во второй половине июля.
Создать что‑то играбельное на Си или ассемблере с нуля — я бы и за год не справился. Я преклоняюсь перед ребятами, которые это делают. Можно посмотреть, например, работы с конкурса ретро‑игр YRGB
У «Спектрума», в отличие от того же Commodore, не было встроенных спрайтов, и уровень программирования для него должен быть действительно высоким. Даже с учетом того, что в Dizzy SE скриптовый язык, для меня это тоже программирование (последние лет 15 я ковыряю только чужие PHP‑коды и это не основная специальность).
Мне хотелось сделать несложную игру, которую можно пройти за несколько минут.
Dizzy — беспроигрышный вариант. Здесь и подумать, и попрыгать и в диалогах поучаствовать можно.
Я определил такие критерии:
Всего один экран.
Максимум характерных черт из игр про Диззи.
Красивая графика и анимация.
Понятный порядок действий без инструкций.
В итоге появилась Snow Trap Dizzy: нужно помочь дедушке Grand Dizzy расчистить огромный сугроб, который завалил входную дверь.
Героев проще представить картинкой (я намеренно взял изображения героев из первых игр):
Шаблонный экран движка такой:
Собственно, до загрузочного экрана не было до конца продуманной идеи. А начинать всегда сложно. Я сделал наброски главного героя, который чистит снег. Несколько раз перерисовывал картинку полностью. В итоге вокруг Диззи начал формироваться загрузочный экран, второстепенные герои и сюжет.
Скриншот программы графического редактора:
В итоге в игру вошли не только члены семьи Диззи, а еще летучая мышь и белка.
Я знаю, что белка зимой меняет цвет, но сделать хотя бы серую белку на белом фоне не получится. Думаю, многим читателям известна основная проблема графики в «Спектруме»: 2 цвета на знакоместо 8×8 пикселей при разрешении экрана 256×192 и атрибуты яркости и мигания.
Шаблонный экран с меню такой:
Я решил переделать его и показать сочетания клавиш, так как непонятно, что такое «классика», и какой синклер — I или II. В итоговый экран меню добавил имя дочки, чтобы ей было приятно.
Исходный файл с тайлами выглядит примерно так (на момент написания статьи я успел его испортить немножко):
А вот то, что получилось у меня:
Я оставил элементы для камина — камни (перекрасил в серый цвет), огонь, плюс дверь, стену, яйцо‑жизнь.
Перерисовал Дейзи (в исходном изображении у нее длинные ноги и каблуки, для зимы не подойдет), дерево для белки с дуплом, нарисовал портрет Дейзи (как в первых сериях Диззи), добавил к люстре анимацию — свечи.
Нарисовал анимацию ночного неба, два тайла для кучи снега и пару вариантов анимации белки с желудями.
Позже выяснилось, что двигаться могут только спрайты. О них позже.
Самым непростым оказалась анимация дедушки Диззи, которого я решил посадить в кресло‑качалку.
Кстати, есть несколько особенностей работы с тайлами, кроме анимации. Файл с тайлами сделан в формате BMP. Если попробовать работать с ним в ZX‑Paintbrush, слетает таблица цветов, и вы получаете что‑то такое (желтая белка с синим носом):
Поэтому я промучался день, а потом перерисовал исходные тайтлы в Photoshop. Пользоваться им для тайлов и спрайтов в разы удобнее, чем ZX‑Paintbrush.
Здесь есть жесткое ограничение: размеры и последовательность спрайтов изменить нельзя. Цветной фон — прозрачный.
Для плавной анимации летучей мыши я использовал спрайты паука, а вместо капли нарисовал домового Доззи. Он ходит и вздыхает, так как в доме непорядок.
Для Диззи тоже есть свой набор спрайтов. При желании можно вместо Диззи нарисовать что угодно. В дополнительном наборе есть Диззи с маской для ныряния.
Наверное, это один из самых сложных этапов, так как в процессе создания карты нужно учитывать физику игры и персонажа, последовательность действий и синхронизацию событий. Подбирать скорость и типы движения спрайтов, и снова перерисовывать тайлы, чтобы все сходилось до пикселя.
Один из вариантов карты. Ключ находится под белкой, которая кидает желуди. Но при касании ключа желудь исчезает. Поэтому пришлось переместить его в другое место.
Последний вариант (цвет ключа другой, хочется использовать всю палитру):
Самое неприятное, что в случае любой ошибки игра виснет.
Так:
Или даже так:
Пару дней я потерял из‑за глюка со слоями в картах Dizzyage. Я спрятал в дупле монетку, но для того, чтобы ее скрыть, нужно поместить ее в нижний слой. В свойствах объекта он меняется, но не присваивается.
Пришлось делать массу экспериментов и в итоге дупло стало тоже предметом, который можно взять. После этого появится монетка.
На этом скриншоте показаны свойства объекта «дупло». Это динамический объект с id=200, материал «воздух» (прозрачный) и свойство — предмет.
В других вкладках находятся технические параметры (в том числе неработающий признак слоя):
Пользовательские данные (номер диалога или скрипт действия):
В данном случае при подборе «дупла» игроком показывается диалог 21:
Наверное, это самая долгая часть процесса. Описание движка несколько куцевато, несмотря на примеры. Поэтому до многих мелочей (например, я путал поначалу перерисовку спрайтов и перерисовку объектов) приходилось додумываться самому.
Скриншот интерфейса движка (журнал сборки проекта, редактор диалогов и редактор скриптов):
Всего у меня получилось 23 диалога и 9 скриптов.
Скрипт инициализации игры создается автоматически — в нем я дописал обработчики событий.
По ходу дела я столкнулся с еще одной проблемой: после смерти Диззи возникает ровно там, где умер. Поэтому желудь или летучая мышь убивают его несколько раз, и игра заканчивается.
Дописал скрипт перемещения в начальную точку:
На этом скриншоте показан скрипт проверки окончания игры:
Рассмотрим его подробнее. В нем мы проверяем первое ли это касание, и если да, выводим диалог и отключаем дедушку, чтобы диалог не повторялся.
// ========================================================
// СКРИПТ ПОКАЗА СООБЩЕНИЯ ПРИ ПОПЫТКЕ ДИАЛОГА С ДЕДУШКОЙ
// ========================================================
// Проверяем, был уже диалог или нет
objget(this, O_STATUS) // Забираем статус объекта "Дедушка"
eq(ret, 1, already_activated) // Если диалог был, переходим на метку already_activated
// Первый диалог
redraw_sprites() // В движке спрайты во время диалогов не перерисовываются, видимо, для экономии ресурсов Спекки.
showmessage(2, 8, 14, CL_YELLOW, CL_WHITE, 1) // Показываем сообщение "Дедушка спит, не буди его, пока все дела не переделаешь"
objset(this, O_STATUS, 1) // Отключаем дедушку
set(ret, NO_INVENTORY) // Инвентарь не показываем
redraw_screen() // Перерисовываем экран
goto(exit) // Выход
// ==============================================================
// ПРОВЕРКА УСЛОВИЙ ОКОНЧАНИЯ ИГРЫ - ДВЕРЬ ОТКРЫТА, СНЕГ ПОЧИЩЕН
// ==============================================================
already_activated:
set(j, ret)
// Проверяем дверь
objroomfind(5, 0, 0) // id двери = 5
set(a, ret) // Записываем статус в переменную
objget(a, O_STATUS) // Проверяем статус
ne(ret, 1, door_not_open) // Если дверь не открыта, выходим
// Проверяем снег
objroomfind(99, 0, 0) // id снега = 99
set(a, ret) // Записываем статус в переменную
objget(a, O_STATUS) // Проверяем статус
ne(ret, 1, snow_not_cleared) // Если снего не расчищен, выходим
// Если все условия выполнены
// Дедушку перерисовываем без кресла-качалки
// Спрайты можно позиционировать по пикселям, а вот тайлы - кратно 8
objset(this, O_MAP_X, 0) // 0
objset(this, O_MAP_Y, 29) // 232:8
// Перемещаем Дейзи в дом
objroomfind(150, 0, 0) // ID=150 в комнате (0,0)
set(d, ret)
// Меняем координаты (делим на 8! пиксели)
objset(d, O_X, 18) // Новая X позиция
objset(d, O_Y, 13) // Новая Y позиция
redraw_object(d) // Перерисовываем Дейзи
redraw_screen() // Перерисовываем экран
// Получаем текущее количество монет
gameget(PL_COINS)
set(a, ret) // Сохраняем в переменную A
// Проверяем
eq(a, 0, show_coin_not_found) // 0 монет
gt(a, 0, coin_found) // Больше 0 монет
// Монета не найдена
goto(show_coin_not_found) // Показываем диалог, когда игра завершена, но монета не найдена
coin_found:
redraw_sprites()
showmessage(1, 8, 22, CL_GREEN, CL_WHITE, 1) // "Победа и монета найдена!"
goto(after_coin)
show_coin_not_found:
redraw_sprites()
showmessage(1, 8, 23, CL_YELLOW, CL_WHITE, 1) // "Победа, но монета не найдена"
after_coin:
redraw_screen()
redraw_sprites()
// Задержка 10 секунд
//wait(500)
// Возврат в меню
gameset(PL_GAME_OVER, true)
redraw_screen()
set(ret, NO_INVENTORY)
goto(exit)
// На всякий случай оставлю под ошибки.
door_not_open:
//showmessage(2, 8, 8, CL_YELLOW, CL_WHITE, 1)
goto(exit)
snow_not_cleared:
//showmessage(2, 8, 2, CL_YELLOW, CL_WHITE, 1)
goto(exit)
door_not_found:
showmessage(2, 8, 0, CL_YELLOW, CL_WHITE, 1)
goto(exit)
snow_not_found:
showmessage(2, 8, 1, CL_YELLOW, CL_WHITE, 1)
goto(exit)
coin_not_found:
goto(exit)
Про работу с музыкой нужна отдельная статья с обзорами редакторов. Не буду раздувать этот пост и рекомендую почитать Александра Семенова @shiru8bit про ретро‑музыку.
Я сделал простенькую мелодию в размере 5/4 на своей блокфлейте, после чего добавил бас и стандартную «бренчалку» в Vortex Tracker II. Пришлось немного помучаться с орнаментами. В итоге получилось трехголосое фолк‑вступление для игры.
Задержусь только на одном моменте. Я потратил пару дней на изучение того, как работать с музыкой. У процессора AY-3-89XX есть возможность «скользящих» нот. Чем я и воспользовался в самом начале мелодии.
На скриншоте показа команда, которая реализует скольжение от ноты «ре» шестой октавы до «ля» пятой.
Несмотря на то, что все затянулось на полгода, это был очень крутой опыт. Не жалею ни капельки!
Игра немного тормозит из‑за большого количества анимации. Но уменьшать число движущихся объектов мне не хочется. Тем более, всего один экран.
Теперь я понимаю, почему над играми работало минимум 3 человека. Один отвечал за графику, другой за музыку, третий за код. А что творили мастера, которые делали музыку под бипер...Это космос.
Игру можно пройти за минуту. Хотя я и показал вам, где монетка, попробуйте догадаться, какая роль у домового?
Рекомендую эмулятор Unreal Speccy. А файл с игрой лежит здесь.
Больше интересных статей и новостей в нашем блоге на Хабре и телеграм-канале.