Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

Игры, выставленные на конкурс Yandex Retro Games Battle 2019, потихоньку подходят к концу — остались считанные единицы. Например, любопытный приключенческий шутер Robo-Stalker, созданный Андреем Ефимовым и занявший 14-е место в обоих голосованиях — как народном, так и жюри.

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

Поскольку игра написана не на ассемблере, то образцовой скоростью отрисовки экранов, плавностью передвижения объектов и прочими фишками современных профессиональных релизов она похвастаться не может — персонажи перемещаются по знакоместам, иногда мерцают, нажатие двух и более клавиш одновременно не поддерживается (поэтому чтобы прыгнуть вперёд, надо сначала нажать кнопку прыжка, а уже потом передвигаться вперёд), возможность присесть отсутствует как факт и так далее, и тому подобное.

Тем не менее, Robo-Stalker всё-таки чем-то увлекает — то ли наличием какого-никакого НФ-сюжета, то ли неплохой структурой уровней, то ли чем-то ещё. Проще говоря, если привыкнуть ко всем вышеописанным недостаткам, игру можно не без удовольствия пройти за минут за двадцать и ничуть об этом не пожалеть.

Более того — небезызвестный вам Verm-V (портировавший несколько игр про Диззи с PC на ZX Spectrum) взял у автора Robo-Stalker исходники, исправил проблемы с управлением, добавил поддержку Кемпстон-джойстика и, можно сказать, выпустил версию 1.02. Теперь играть стало заметно легче, с чем мы вас всех и поздравляем.

Так что теперь с нашего сайта можно скачать как оригинальную версию игры, так и доработанную.

Ну а мы по уже сложившейся традиции поговорили с разработчиком Robo-Stalker Андреем Ефимовым. Интервью получилось большое, приготовьтесь (и имейте в виду, что все подписи к картинкам — авторские).

• • •

Расскажи, пожалуйста, пару слов о себе.

«И жил он, жил, пока не помер» ©.

В своей прошлой жизни работал программистом, по большей части «1С» (не стыжусь). Был фрилансером на PHP и JS, писал программы на Delphi и совсем немного программировал станки с ЧПУ. На данный момент работаю в зоопарке обезьяной, то есть стримером на твиче в разделе «Наука и техника», веду канал могильного программирования. С определенного момента решил идти в геймдев, разработал свой движок на Lazarus (Object Pascal), написал несколько небольших игрушек, сейчас активно учу Unity, чтобы ворваться в какой-нибудь коллектив разработчиков.

Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

Все там будем.

Чем увлекаешься помимо разработки игр для ZX Spectrum?

Хороший вопрос. Всем, ибо, я не настоящий св... я не разрабатываю игры для «Спектрума». По большей части естественными науками, разработкой игр и приложений НЕ для «Спектрума», иногда стримлю запуски и приземления (обычно неудачные) космической техники.

Если брать игры (не просто же так я здесь оказался), то в последние годы тяготею к серии S.T.A.L.K.E.R., всё чаще удается поиграть в неё, не включая компьютер.

Как на разработку повлиял конкурс?

Один мой зритель постоянно присылает ссылки на «Хабр» в надежде, что я начну его читать и расти над собой. И вот одним солнечным утром я получил ссылку на новость о конкурсе ретро-игр от «Яндекса». «Хм», — подумал я. «Хмм, — подумал я ещё раз. — А почему бы, чёрт возьми, и нет?» До этого я уже участвовал в игровых конкурсах, например, Ludum Dare, а тут 5 месяцев, а не два дня, да и призы лишними не будут. Ну и, конечно, игра на старую технику — это вызов самому себе. В неблизком уже 1989 году у меня оказались книги «Осваиваем микрокомпьютер» английского издательства Usborne, выпущенных у нас издательством «Мир». В них было общее описание устройства тогдашних микро-ЭВМ, а также учебник по Бейсику с описанием базовых алгоритмов и с примерами игр. Рекомендую, если задумаете приобщать детей.

Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

С этих книг я свернул на кривую дорожку.

Решил участвовать. Не скажу, что опыта со «Спектрумом» не было совсем, году так в 94-м я заходил на три часа в гости к однокласснику, у которого был «Спектрум», и даже потрогал этот компьютер. Из запомнившегося тогда — команды Бейсика одной кнопкой, необычно по сравнению с ДВК и «Микрошами», которые были в нашей школе.

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

Сколько времени заняла работа над игрой? Что стало источником вдохновения для игры? Какие-то другие игры для «Спектрума» или с других платформ?

Концепция игры была несколько раз пересмотрена. Первоначально я думал писать её на встроенном интерпретаторе Бейсика, игра должна была представлять собой серию комнат с препятствиями, мимо которых нужно пройти из точки A в точку Б. Играть предполагалось за робота-трансформера — с тремя режимами, как в Metal Mutant: Солдат (ходит и стреляет), Ниндзя (прыгает и ползает по стенам) и Паучок (ползает по потолку, подтягивается на паутинке и пролезает во всякие узкие места). Первые же опыты показали, что скоростью интерпретатор не блещет, но я не считал это минусом, думал, остальные возможные участники сделают что-то подобное, а то и просто крестики-нолики. Рассчитывал потратить пару недель на разработку, отправить и ждать оглушительной победы. Скачал эмулятор EightyOne и поехали. Озверев от набора команд через буквы, написал свой редактор Бейсика, расставляющий номера строк и высчитывающий переходы GO TO по именам меток, а для загрузки использовал найденный ZX-Blockeditor. Успел сделать меню, примерно похожее на то, что оказалось в конечном продукте.

По мере изучения вопроса и погружения в материалы наткнулся на сайт «КГ-Портал» с играми с прошлого конкурса. По спинному мозгу растеклась мысль: «Та-а-ак... А мы-то здесь надолго». Конкурсные игры на «Спектрум» внезапно оказались быстрыми и цветастыми, с интерпретатором ловить было просто нечего.

Я, конечно, мог отступить и просто не участвовать, но это значило потерять лицо — упустить звание лучшего в мире по всем дисциплинам. Плюс грела душу возможность нубу утереть нос зазнайкам от спектрумизма и гордиться этим.

Ассемблер учить не стал, боялся не успеть — к этому моменту оставалось три с половиной месяца, причём в первый я ничего не писал (так, почитывал литературу про «Спектрум») и приступил к практике лишь в августе. Стал искать компиляторы языков высокого уровня и нашел совершенно прекрасный Boriel's ZX-Basic от испанского пассажира. Отличный компилятор, поддерживает подпрограммы, функции (как обычные, так и inline), ассемблерные вставки, вывод во все 24 строки, несколько типов численных данных и ещё много чего. Топовый инструмент для желающих начать писать программы на «Спек».

Одновременно с изучением возможностей языка последовательно менял концепцию. Хотел написать изометрический диаблоид с выбором класса и квестами, но передумал: фэнтези — не ценимая мною стихия. И хорошо, я бы просто не впихнул всё это в память.

Понемногу начал вырисовываться сюжет «Робо-Сталкера»: несколько уровней и робот, преследующий человека в мире будущего. Увидев в жюри иностранцев, сделал игру на английском. Качество моего пёрфект инглиш оставим в стороне, основные мысли донёс.

Встал вопрос с графическим оформлением, стал шерстить YouTube-архивы игр для «Спектрума» вроде RZX Archive и Modern ZX-Retro Gaming, пытаясь выяснить, а что вообще пишут на этот агрегат. Глаз зацепился за отличную игру Laser Squad с графикой top-down, где все объекты занимают 2×2 знакоместа. Laser Squad очень понравилась единством концепции, дизайна и воплощения, предтечей пошаговой X-COM; несколько позже выяснил, что X-COM сделал тот же автор. Сюжет окончательно оформился и более не менялся до конца: пять уровней от тюрьмы до лунной базы, карточки, коммуникаторы, смена оружия — всё это было расписано за один заход. Частично был нарисован графон для первого уровня (местами свой, местами перерисованный с той же LS).

Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

Графика под Laser Squad — стены, статические объекты, главный герой и противники.

Однако довольно быстро я нашёл игру, аналогичную той, что я делаю, с похожей графикой и геймплеем — итальянскую Apulija-13. К тому же в ней присутствовал крутой игровой режим скролл-шутера в конце, фактически две игры в одной. Вот, блин, незадача. И чем дальше искал, тем больше игр, основанных на Laser Squad, находил — удачное решение приметил не только я, но и другие разработчики. Концепцию нужно было менять, и я вернулся к идее платформера, от которой сперва отказался. От Laser Squad осталась рамка вокруг игрового экрана с названием уровня.

Систему связанных между собой комнат, по которым можно свободно ходить, запрыгивать на платформы, падать в нижнюю комнату, взял в польской DOS-игре Electrobody. Оттуда же планировал взять алгоритм движения и стрельбы противников: какое-то время движется → остановился, постоял → выстрел → ещё постоял → пошёл дальше. Я его даже реализовал, но пришлось убрать по причинам, которые укажу ниже. Из этой же игры переехали сдвоенные пушечки и система декалей на стенах для красоты. А вот телепорты между комнатами внутри уровня были заменены на двери.

Внешний вид и анимации главного героя с противниками вполоборота я подсмотрел в 2D-платформере MiniDOOM. Из него же — платформы в последних двух уровнях и дизайн дверей в последнем.

Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

Минидумовский полуоборот, чтобы было видно оружие.

Коды уровней, чтобы не перепроходить всё заново, видел в играх Prehistoric, впрочем, это распространенная фишка. Таким образом, влияние на Robo-Stalker оказывали не спектрумовские, а досовские игры, доступ к которым был у меня в детстве.

Из «Спектрума» возникла одна отсылка-пасхалка к игре Aliens: Neoplasma. Коммуникатор в моей игре — это их коммуникатор, который я перерисовал с ролика в ютубе, отзеркалил слева направо и нарисовал на экране символ зловещей корпорации, попадающийся в игре на дверях и ящиках (какой-то артишок получился или шишка, но очень зловещая).

Роль главного героя досталась разработчику мобильных игр на Unity Вове: взял его фото, нацепил маску взрослого Шино Абураме (персонаж Наруто/Борутл), киборг получился на 100 из 10.

Оператором, с которой мы общаемся через коммуникаторы, сперва стала Terran Assistant из StarCraft: Remastered. Тут я забоялся — а вдруг игра станет известной, мегапопулярной и как начнёт мне в дверь «Близзард» стучать да отступные требовать! Придётся скрываться. Так оператором стала Таня — художник, дизайнер и разработчик игр.

На первом скриншоте — коммуникатор со зловещей шишкой. На втором — ассистент Таня.

В случае попадания на призовые места готов был поделиться гонораром с моими актёрами. Пронесло. Роль главного злодея оставил себе.

Разобравшись с сюжетом и ролями, уселся за рисование графики и, разойдясь не по-детски, нарисовал графона на 20 килобайт в сжатом виде. Там были и анимированные декали, и анимации дверей, 9 видов противников, анимированная рамка, анимации приседа главного персонажа с разным оружием и ещё много всякого. Плюс силуэтная маска для красивого выделения ГГ, врагов и летящих снарядов на фоне. Меня предупредили, что всё впихнуть не удастся, но я понадеялся как-нибудь затолкать/сжать алгоритмы или ещё как-нибудь выкрутиться. В крайнем случае, думал, перейду на ZX Spectrum 128K. Эта мысль была такой очевидной, даже обдумывать не стал. А следовало бы.

Рисование под «Спектрум» — достаточно сложная штука. Рисуешь фактически монохромные картинки, которые в игре окажутся цветными, да ещё и по знакоместам. Непросто предугадать, как всё это будет выглядеть на экране. Приступил к коду. Первым открытием было, что ZX Spectrum 48K — это рекламное название, реально у тебя есть только 40 с копейками Кбайт для размещения программы (на самом деле ещё почти 7К отводится под экран, так что название всё-таки точное — прим. ред.). Ну да ладно, и так хватает. 20К данных, 20К кода — живём пока.

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

Параллельно меня посетила мысль: а как вообще может быть 128К памяти, если адрес занимает 16 бит? Почитал про банки памяти, понял, как их переключать, но вот загрузчик, который разнесёт данные по разным банкам, так и не научился делать. Такие вещи желательно тестировать на реальном компьютере — в общем, этот мост был для меня сожжён.

С этого момента началась трёхмесячная ежедневная борьба с двумя проблемами — размером игры и быстродействием. Пришлось выкинуть огромное количество графики, заменить динамическое интро с эффектами на статическое, убрать анимацию дверей, анимированные декали, две трети обычных декалей, приседания главного героя, обводящую маску (слишком долго выводилась) и прочее, и прочее.

Избавился от PRINT, вместо него написал подпрограммы записи в видеопамять, все циклы превратились в IF ... GO TO, чтобы не использовать стек, все процедуры и функции потеряли аргументы и общались только через глобальные переменные... И тому подобные оптимизационные изменения.

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

Пришлось также забыть про музыку. Планировалось пять биперных мелодий для создания соответствующей атмосферы на каждом уровне, потом одна на всю игру, в итоге махнул рукой и убрал музыку вообще.

В целом код игры полностью переписывался с нуля три или четыре раза. Наконец, изменив алгоритм упаковки данных геометрии комнат, мне удалось впихнуть невпихуемое практически впритык; до конца памяти с учётом места под «кучу» осталось около 200 байт.

Получилось то, что получилось.

Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

Финальная графика игры. Остатки былой роскоши.

Тебе кто-нибудь помогал при создании Robo-Stalker или всё сам?

Именно писать-рисовать — нет. Были люди, а именно сыгравшая ассистентку Таня, предложившая помочь протестировать игру на реальной машине. Физически такое провернуть было совершенно нереально: я делаю правки → отсылаю → она грузит → сообщает результат → если есть ошибки, я должен догадаться, что и где исправить → снова отослать и так далее. Взвесив за и против, от помощи отказался.

Какие вообще игры для «Спектрума» тебе нравятся?

Не испытываю ностальгии к «Спектруму», у меня его не было. Играл в несколько игр в компьютерных залах, как это тогда называлось. Пожалуй, наиболее удачной из того времени назову Target: Renegade. Еще запомнилась Star Raiders II, играл в неё ровно один раз, но в душу так запала, что на первом курсе института сделал похожую на Турбо Паскале.

За последние полгода в рамках подготовки к конкурсу пересмотрел, наверное, тысячу игр — есть хорошие, есть не очень. Однозначно назову резко не нравящиеся — текстовые квесты, особенно в стиле «угадай, о чём думал автор».

Мне сам компьютер больше понравился, чем игры, которых и на других аппаратах полно. Простой и понятный — отличное учебное пособие для начинающих схемотехников и программистов.

Движок у Robo-Stalker свой или сторонний? Какие средства разработки использовались?

Всё самописное. Я бы не стал называть это движком, просто разовая работа для конкретной игры. Правда, по схеме остальных моих игр, то есть бесконечный цикл: получаем время между кадрами → производим вычисления → вывод на экран и система состояний игры для определения, что мы делаем в текущий момент: 0 — инициализация, 1 — меню, 2 — расчёт комнаты, 3 — прорисовка комнаты и так далее. Подобную схему я применяю практически везде.

Из сторонних средств использовал пачку эмуляторов, ZX-Paintbrush для переделки фотографий — заставки и портретов, ZX-Blockeditor для окончательной склейки частей игры в один TAP-файл, была еще Beepola для музыки, да не пригодилась.

В дополнение к чужим утилитам написал на Lazarus свой конвертер+упаковщик для графики и текстов в игре.

Интервью с Андреем Ефимовым — разработчиком приключенческого экшена Robo-Stalker

Конвертация графония из файла PNG в последовательности для игры.

У игры, несмотря на её увлекательность (лично я прошёл полностью), есть очевидные недостатки, преимущественно по части управления — например, не обрабатывается нажатие двух и более клавиш, а избегать вражеских выстрелов приходится лишь путём прыжков (которые сейчас не очень удобны). Эти моменты ты просто не успел пофиксить или так задумано?

Когда я тестировал игру, управление особо не мешало, даже спидранил, полностью пробегая за 7-8 минут. Решил, что уж любителям ретро-хардкора однокнопочное управление не доставит проблем, не стал заморачиваться с опросом портов и оставил стандартную бейсиковскую INKEY$.

И, как сразу стало понятно по отзывам, крепко просчитался, не справились игроки с последовательным нажатием кнопок, балованные стали от современных игр. Что ж, наука на будущее — управление прорабатывать в первую очередь, а не по остаточному принципу.

Планируешь выпустить обновление с какими-то фиксами?

Лично я — крайне маловероятно. Понемногу учу ассемблер, но если когда-нибудь соберусь родить ещё одну игру для ретро-компьютера, она точно будет новой, а не переделкой «Робо-Сталкера».

Нашелся, однако, человек под ником Verm-V, который, по его словам, на основании моих исходников переработал управление и даже прикрутил кемпстон-джойстик. Будет интересно поглазеть-пощупать.

Игра, несмотря на принадлежность к экшен-жанру (пусть и с элементами исследования), не чурается сюжета. Любишь фантастику? Какую именно?

При отправке конкурсной формы жанр игры я указал как 2D Action Adventure. Но организаторы присвоили игре жанр из стандартного выпадающего списка. Полагаю, это случилось не только с моей игрой.

Из книг больше предпочитаю научную или научно-популярную литературу, чем художественную. Художественную последнюю читал «Сестру Керри» Драйзера — чуть ли не года три назад. Не думаю, что я что-то теряю, все сюжеты избиты, все ходы известны. Достаточно прочёл уже, время создавать свое, ваять сюжеты для новых игр.

Насколько по 10-балльной шкале ты доволен результатами конкурса? И своим местом, и в целом подборкой игр.

Посмотрев конкурсные игры 2014 года, я вполне рассчитывал на высокое место. Там было четыре относительно сильных игры, после чего качество резко падало вплоть до каких-то поделок на коленке.

Новый конкурс встретил целой пачкой высококачественных игр, в первую очередь графически. Себя обманывать ни к чему, шансов на пьедестал было ноль в любых единицах. Возможно, с хорошим управлением я бы поднялся выше, например, попал бы в десятку, но для призовых мест это должен был быть совершенно другой уровень графики.

Тащемта свой дебют на ретро-сцене расцениваю как более-менее успешный. Пересмотрев тонны игр для «Спектрума», скажу просто: моя — далеко не последняя.

Попробую оценить и сам конкурс. Сначала плюсы.

Конкурс произошёл. Отлично! Хорошее соревнование, возможность поностальгировать, окунуться в детство, написать игру для любимого компьютера. Времени достаточно, чтобы даже такой далёкий от темы человек, как я, успел ознакомиться и поучаствовать. Не исключено, что конкурс этот — не последний, и число ретро-платформ для игр будет расти. С удовольствием написал бы что-то для «Микроши», вспомнил бы школьные годы чудесные.

Но были и минусы — достаточно крупные. Основной уже достаточно обмусолен и разобран, например, в известном видео Евгения Сухомлина. Хотелось бы в следующий раз увидеть правила с чёткими и однозначными определениями и фиксированный штраф за их нарушение.

Уже работаешь над новой игрой? В каком жанре, если не секрет?

Для работы в геймдеве нужно портфолио. Больше всего вакансий на мобильные казуалки, больше всего мобильных казуалок — это игры жанра три в ряд. Всё это говорит о глубокой деградации человечества, но выбора нет, буквально сейчас делаю такую с сюжетной историей по мотивам «S.T.A.L.K.E.R: Тень Чернобыля». Планирую закончить и выложить в течение пары недель. Надеюсь, люди меня когда-нибудь простят.

А для души продолжаю разработку magnum opus «Сталкеры Колбасы и Водки», пошаговой стратегии с механикой «Героев Меча и Магии», но в сеттинге игр серии S.T.A.L.K.E.R. Изначально разрабатывалась на моем «Раковом движке» ©, но ввиду ограничений по работе с графикой в Windows игра будет перенесена на Unity. Если всё сложится хорошо (не сложится), то игра ожидается в течение 2020 года.

2 февраля 2020, 13:13

Прохождению также мешают стационарные пушки, которые, к сожалению, уничтожить нельзя

Вообще-то можно, это обычный враг, 7 хп. Они в отдельном массиве, меньше параметров, меньше вес. Но для игрока - это такие же убиваемые противники, как и роботы.

2 февраля 2020, 14:11

Отличная игра, в детстве была бы просто хитом, да и сейчас с удовольствием поиграл.

2 февраля 2020, 17:45

№1. Неделя Агентов

Вообще-то можно, это обычный враг, 7 хп. Они в отдельном массиве, меньше параметров, меньше вес. Но для игрока - это такие же убиваемые противники, как и роботы.

Спасибо, пофиксил. Их я уничтожать даже как-то не думал, они очень уж неудобно расположены.

3 февраля 2020, 10:48

Андрей, было бы интересно с тобой пообщаться на тему средств разработки ретро-игр, в т.ч. и для "Микроши") Мы вместо компилятора Boriel's ZX Basic применились использовать паскалеподобный язык Оберон (среда разработки ZXDev). А для ретро-платформ на К580 можно писать на языке PL/M. Найди в сети игру Двигалка от Kakos Nonos, погляди)

3 февраля 2020, 16:18

№4. Олег Чередниченко

Я ретро игры профессионально не разрабатываю.

Если будет новый конкурс, то, может быть, приму участие. Но пока я занят другими вещами.

На Микрошу был какой-то эмулятор, emu80, кажется, назывался.

3 февраля 2020, 16:24

№4. Олег Чередниченко

И если буду разрабатывать, то только на ассемблере. Языки высокого уровня на таких машинах уж очень тормозят.

7 февраля 2020, 21:01

Я прошу прощения у Андрея Ефимова за этот срач. Дело давнее. Меня самого интересует разработка для ретро-платформ на ЯВУ. А сейчас собираюсь плотно погрузиться в Dart/Flutter :-) Но вообще конечно для ретро без асма никак, просто можно библиотеки на асме, а логику на ЯВУ. Если памяти и скорости хватает.

8 февраля 2020, 19:09

Ветку подчистил от срача. Дмитрий, вам последнее предупреждение — прекратите по поводу и без набрасываться на людей, пожалуйста.

8 февраля 2020, 19:40

да предупреждай сколько хочешь. Сколько тут мудаков оскорбляло всех подряд и для тебя это норма.

8 февраля 2020, 23:26

№9. Дмитрий Крапивин

Ну, вы всегда в первых рядах по части набросов и оскорблений. Но я вас понял, всего хорошего. У меня не zx-pk.ru, я баню один раз и с концами.

Apenas utilizadores registados poderão deixar comentários