Интервью с создателем Super Mario Bros. для ZX Spectrum

В ноябре у владельцев ZX Spectrum случился праздник — на этом компьютере наконец-то появилась нормальная и полностью играбельная версия знаменитого платформера Super Mario Bros. Попытки перенести классику от Nintendo на «Спектрум» предпринимались с середины 90-х, но полноценную игру никто до сих пор так и не осилил, хотя «конкурирующие» платформы типа Commodore 64 своими версиями уже обзавелись.

Однако в 2019-м всё изменилось — сначала стараниями Alone Coder на ZX Evolution и ATM Turbo 2 появился практически идеальный порт (с идентичными графикой и геймплеем), а теперь Сергей Смирнов выдал на гора версию для обычного ZX Spectrum. Это, правда, не полная копия оригинальной игры — немного отличаются уровни и управление, плюс по понятным причинам сильно поменялась графика. Зато имеется плавный попиксельный скроллинг и полное ощущение, что играешь в того самого «Супер Марио», а не в какую-то поделку.

Более того: в игре активно используется гигаскрин, за счёт чего на реальных компьютерах и в эмуляторах с поддержкой этого видеорежима цветов в спектрумовской Super Mario Bros. несколько больше, чем это позволяет стандартный экран. Правда, в обычных эмуляторах, да и на многих мониторах изображение будет отчаянно мерцать, но геймплею это почему-то практически не мешает. Плюс есть шанс, что Сергей когда-нибудь выпустит версию для стандартного видеорежима ZX Spectrum, но об этом — чуть ниже.

Собственно, скачать Super Mario Bros. можно с нашего сайта прямо сейчас. Обязательно сделайте это, дабы в очередной раз поразиться тому, на что способен старый-добрый ZX Spectrum, у которого отсутствует аппаратный скроллинг, аппаратные спрайты и прочие графические навороты, присущие NES со товарищи. Ну и испытать гордость за отечественных программистов, которые продолжают выжимать из этого компьютера все соки спустя 37 лет после его выхода.

Ну а мы пообщались с Сергеем Смирновым, автором игры, и поспрашивали его о процессе её создания, о планах на будущее и много о чём ещё. Приятного чтения!

• • •

Почему для портирования была выбрана именно Super Mario Bros.? Это одна из любимых игр или хотелось сделать то, что не получилось у кучи программистов до вас?

Тут несколько причин. Во-первых, в 2002 году я уже предпринимал попытку сделать «Марио» на «Спектруме». Сам концепт игры — что она должна работать со скоростью 50 кадров в секунду и использовать гигаскрин для «промежуточного» цвета — был придуман ещё тогда. В итоге я сделал демку из четырёх уровней, с монохромной графикой и с дополнительными спрайтами на переднем плане в турбо-режиме. Вышло весьма достойно, но проект так и не был закончен.

За прошедшие 15 лет никто ничего подобного не сделал на «Спектруме», и в 2016 году у меня появилось желание попробовать развить старые идеи. А также сделать новый движок — ещё лучше, быстрее и с цветной графикой. Поэтому выбор снова пал на «Марио».

В итоге появился вот этот «взрослый» проект, в котором применяются все современные техники программирования (микро-сервисная архитектура, DI, отдельные репозитории с ресурсами). Процесс сборки образа игры полностью автоматизирован. Все ресурсы конвертируются и компилируются на лету при каждой сборке. И, конечно, после многих лет коммерческой разработки сам подход к программированию уже другой.

Новый движок спроектирован по-новому, а из исходного кода 2002 года не использовалось ничего. Только сама идея: 50 fps + гигаскрин.

Интервью с создателем Super Mario Bros. для ZX SpectrumИнтервью с создателем Super Mario Bros. для ZX Spectrum

Планируется ли довести игру до ума, чтобы она представляла собой максимально точный порт как минимум по части геймплея?

По части геймплея — да, но по существу — нет. Конкретно — нет смысла особого в том, чтобы иметь точную копию игры с NES. Плюс это технически недостижимо на ZX Spectrum. Есть ещё мотивационный фактор: копировать игру один-в-один как-то не особо интересно.

Я склоняюсь к такому варианту: пара первых уровней останутся полностью идентичными оригинальной игре, а далее в каждый блок из четырёх уровней будет привнесено что-то своё: новая графика, новые враги, изменённая физика или другой геймплей.

А что потом — другие платформеры или игры иного жанра? Может быть, порт многострадальной Great Giana Sisters?

Сначала хочется текущий движок довести до ума: написать документацию к нему; возможно, сделать ещё одну игру-платформер. После этого пока планов нет, поживём — увидим. Про Giana Sisters говорят все, кому не лень. Может и имеет смысл.

Для чего в первую очередь в игре используется гигаскрин? И планируется ли версия без него (то бишь без мерцания спрайтов)?

Он используется для того, чтобы получить «промежуточный» третий цвет, хотя ZX Spectrum допускает только два цвета в знакоместе. Идея сделать трёхцветные спрайты существует давно, и я не первый, кто использует эту технику (см., например, Kolobok Zoom). У нас же в 90-х стояли CRT-мониторы, и за счёт быстрого переключения двух картинок и остаточного свечения люминофора действительно получался эффект третьего цвета. Другое дело, что я использовал эффект гигаскрина и шахматной заливки прям по-полной программе.

Версия без гигаскрина планировалась к релизу до определенного момента. По-сути, для того, чтобы её получить, программировать ничего не нужно, достаточно просто заменить всю графику. Но автоматическая конвертация спрайтов не подойдёт — каждый спрайт нужно ювелирно перерисовывать вручную. До недавнего времени этим занимался Dexus, автор трекера PSM. На текущий момент эта ветка разработки замаринована, но если найдётся художник, который адаптирует все спрайты под «Спектрум», то всё возможно.

Планируется ли выкладывание исходников или создание своего движка для платформеров скроллингом?

По-существу это уже и есть движок для подобных платформеров со скроллингом. Реализация именно Super Mario Bros. на нём — это, скорее, частный случай, всего лишь один из вариантов работы этого движка, плюс немного хардкода для реализации геймплея именно для «Марио». На текущий момент существует проект на C# — это одновременно и компилятор игры, и сборщик ресурсов. Он автоматически выполняет всю работу по созданию полного образа игры:

  • строит карту памяти;
  • компилирует исходники в sjasm;
  • анализирует цветовую палитру и автоматически конвертирует спрайты в гигаскрин;
  • компилирует все внутренние ресурсы (карты, различные таблицы и метаданные, описатели врагов и призов и так далее);
  • конвертирует всё это в формат, понятный движку;
  • приклеивает к этому загрузчик и собирает финальный tap- или trd-образ.

Файлы ресурсов для игры — это простые json-файлы, в которых описываются, соответственно, уровни игры, блоки, их свойства, поведение врагов и призов. Цветовая палитра, свойства мира, вся физика, и профили главного героя тоже задаются через json-файлы. Все картинки-спрайты и музыка лежат рядом, в папке с ресурсами.

Таким образом, если полностью заменить json-файлы ресурсов, заменить спрайты и музыку — мы получим другую игру. Специфические именно для «Марио» элементы геймплея — например, заходы в трубы или взятие гриба для роста, — программируются напрямую в движке. Для каждой игры эта часть движка будет своя.

Исходники буду выкладывать после релиза полной игры. А рассказать о том, как оно работает изнутри, могу без проблем в любое время.

Какие ещё есть планы на движок и игры, если не секрет?

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

Первоисточник: Идеальный пиксель

Комментарии

5 декабря 2019, 14:00

Очень круто, спасибо!

Оставлять комментарии могут только авторизованные пользователи.