Игры по Star Wars с древних времен до наших дней. Часть 40 (ZX81)

В новой части марафона я продолжаю и, надеюсь, заканчиваю рассматривать проекты с древненького компьютера ZX81, выпущенного в 1981 году. Самое интересное в материале, на мой взгляд — это переведенный рассказ программиста о тонкостях работы с данной машинкой. У ПК всего 1–2 Кб ОЗУ, что накладывает на игры серьезные ограничения. А еще в подборке встречается парочка необычных проектов про «Звезду Смерти». Как вам, например, текстовый экшен в почти реальном времени?

Проекты в подборке:

226. Trench Runner (1984) — Две игры по цене одной

Платформа: ZX81

Разработчик: Steven Reid

Геймплей версии 2

Перед нами очередная простенькая игра Стивена Рида для ZX81 по мотивам «Звездных войн». В этот раз аж в двух вариациях. Что это за проект и чем версия 1 отличается от версии 2, снова позволю рассказать самому автору.

«В начале 2019-го я отыскал небольшой проект под названием Trench Runner. К моему удивлению, в нем было сразу два листинга (кода компьютерной программы в текстовом виде — прим. перев.). Пользуясь случаем, представляю вам сразу пару игр.

Если попробуете первую программу, то обнаружите, что это простая графическая игра. В этом плане Trench Runner похожа на другие мои проекты для ZX81. Здесь есть траншея, истребитель и что-то, от чего надо увернуться. Управление тоже для меня типично — для перемещения корабля используются Z и точка (в англоязычной раскладке — прим. перев.). Всё просто.

Версия 1. Да, на экране много пустого места. Почему так, Стивен объяснит ниже
Версия 1. Да, на экране много пустого места. Почему так, Стивен объяснит ниже

Trench Runner может показаться бесконечной, но это не так. Продержитесь достаточно времени — получите победный экран. Чувствуете удовлетворение? В целом ничего сложного нет, и умереть здесь крайне трудно. Просто находитесь подальше от стен, и тогда избегать препятствия будет не проблема. Если всё-таки умрете, игра начислит вам очки и покажет, как долго вы продержались.

Код программы довольно короткий, что неудивительно, учитывая простоту Trench Runner. <…> В нем было несколько багов, которые я поправил, чтобы сделать проект если не приятным, то хотя бы играбельным.

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

Версия 2. Обратите внимание, что за «кругом» остается что-то вроде следа, чего не было в v1
Версия 2. Обратите внимание, что за «кругом» остается что-то вроде следа, чего не было в v1

Реальная же разница зарыта в коде. Если только вы не знакомы с программированием на BASIC для ZX81, далее читать вам будет непросто (а мне переводить — прим. перев.). Так вот, у ZX81 очень мало ОЗУ. Если вы когда-нибудь для него программировали, то наверняка узнаете некоторые методы экономии памяти. Если нет, то позвольте вас просветить.

Обычно ZX81 поставлялся с 1 или 2 КБ ОЗУ — в зависимости от модели и региона. У моего ZX81 было 2 КБ, как у TS1000. Это мало даже по меркам 1980 года, поэтому большинство пользователей вроде меня докупало расширение на 16 КБ. Без него вы довольно ограничены в экранном пространстве, а тем более в программном обеспечении.

TS1000 — это не модель терминатора, если что
TS1000 — это не модель терминатора, если что

Простое отображение картинки в полный экран занимает 793 байта, так что задействовать этот режим в версии на 1 КБ — крайне плохая идея. Чтобы уменьшить размер изображения, для систем с менее 4 КБ ОЗУ были определенные хитрости. Если интересно узнать, как это работает, ознакомьтесь со статьей.

Trench Runner занимает малую часть экрана, но поместится ли она в 1 КБ? Вряд ли. Одно только отображение сжирает 185 байтов. Так что, несмотря на небольшой размер программы, ее объем превышает 1 КБ. Тем не менее с помощью некоторых уловок с памятью мы можем ее немного уменьшить и заставить работать в системе с 2 КБ ОЗУ.

Именно это вторая версия и делает. В ZX81 числа занимают по 5 байтов каждое из-за их способности представлять действительные числа. Это отлично, если вы хотите использовать компьютер для сложных математических вычислений, но при такой малой памяти всё же жирновато. Чтобы уменьшить ограничение в 5 байтов, можно использовать переменные и другие приемы. Вся эта математика и использование CODE позволяют сэкономить несколько драгоценных байтов. Следует отметить, что исходная версия игры была еще меньше, так как не включала REM или код перезапуска и сохранения.

Победный экран в версии 2. Версия 1 показалась мне мучительно долгой, так что ее я не прошел
Победный экран в версии 2. Версия 1 показалась мне мучительно долгой, так что ее я не прошел

Помимо экономии памяти, Trench Runner v2 задействует немного другие логику и поток, поэтому изображение несколько отличается от версии 1. Также есть некоторые изменения в формулировках, но в целом обе игры одинаковые. В них используются одни и те же элементы, основная логика и геймплей.

Лично мне больше нравится логика первой версии. Ее проще читать, да и выглядит она лучше. Я подправил v2, чтобы сделать ее короче, но обе Trench Runner всё равно скучные. Лично мне было интереснее изучать, как я их писал и почему именно так, нежели играть.

На вечерней пробежке, еще до работы над этим текстом, я думал об игре. Так как обе версии Trench Runner короткие, я захотел переписать их с помощью MCoder. Это дало бы мне больше скорости и позволило их улучшить. Конечно же, главное — никаких больше 2 КБ, работать нужно только с системами с 16 КБ ОЗУ.

Стивен Рид на вечерней пробежке придумывает Trench Runner v3
Стивен Рид на вечерней пробежке придумывает Trench Runner v3

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

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

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

227. ZTSXXSTZ (1984) — Эскадрилья Вейдеров

Платформа: ZX81

Разработчик: Steven Reid

Геймплей

Если бы я участвовал в шоу «Угадай геймплей по скриншоту», то без труда бы дал правильный ответ — перед нами очередной «космический симулятор» с расстрелом СИД-истребителей от первого лица. И да, таких проектов я повидал уже немало, и рассказать мне о них больше нечего. Так что пусть за меня отдувается автор ZTSXXSTZ, уже знакомый нам Стивен Рид.

«С чего лучше всего начинать год? Конечно, с космического шутера. Верхняя часть распечатки была довольно блеклой, так что я не был уверен насчет ZTSXXSTZ, когда стал вводить код. Однако, как только у меня заработало несколько первых фрагментов, я понял, что тут есть чем поделиться.

Когда я придумывал проекту имя, то точно играл или в Zaxxon, или в другую игру со странным названием. Впрочем, название большой роли не играет, главное — сама ZTSXXSTZ выглядит достойно. Просматривая листинг, я увидел, что в ней есть звездолет. Похож на СИД-истребитель Дарта Вейдера, верно? И пусть код был не совсем ясен, я знал, что это какая-то космическая игра.

TIE усовершенствованный x1, истребитель Вейдера
TIE усовершенствованный x1, истребитель Вейдера

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

Управление инвертированное, как и положено космическому шутеру. Правда, кнопки не те, к которым я привык, так что пришлось немного освоиться. А потом случилось самое интересное — меня подстрелили! Экран затрясся, затем чернота с белой полоской — идеальная сцена смерти. Если бы только геймплей был получше…

Максимум на экране может быть четыре врага
Максимум на экране может быть четыре врага

Мне с трудом удалось попасть хотя бы в один истребитель. Управление какое-то кривое. Но даже когда я подумал, что подбил врага, он не исчез. А потом меня подстрелили.

Ну что ж, время доработок.

Не добившись результатов при первом запуске, я решил покопаться в коде. Для начала снизил вероятность смерти. Итак, теперь шанс вражеского выстрела равен 25%, и только в 5% случаев это вас убьет. Это должно дать достаточно времени, чтобы успеть расчистить экран. Кроме того, если уничтожить противника, шансы на выживание только возрастут.

Часть листинга ZTSXXSTZ
Часть листинга ZTSXXSTZ

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

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

Момент выстрела по врагу. Горизонтальные черные полосы «стирают» СИД-истребитель, если он находится в перекрестии
Момент выстрела по врагу. Горизонтальные черные полосы «стирают» СИД-истребитель, если он находится в перекрестии

Теперь, когда геймплейные элементы настроены, я могу вновь протестировать ZTSXXSTZ. Хоть она и немного медленная, но всё же интересная (нет — прим. перев.). Обычно получается расчистить несколько экранов, прежде чем тебя подстрелят. Хоть я и люблю анимацию смерти, но, когда она наступает, всё-таки немного да подгорает.

Еще чуть-чуть доработав код, я добавил счет после зачистки экрана. Программа теперь позволяет начать игру повторно и имеет автозапуск. Добавил еще немного незначительных правок, но в целом ZTSXXSTZ осталась прежней. Я был нетерпеливым подростком… Эх, если бы я только уделял тестированию побольше внимания.

Экран со счетом после зачистки экрана
Экран со счетом после зачистки экрана

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

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

Подозреваю, что при конвертации в MCODER я поломаю сцену смерти, поэтому нужно подыскать альтернативу. Я думал о полноэкранной графике, где вы дрейфуете в космосе с треснутым лобовым стеклом. Или игра просто заканчивается итоговым счетом и каким-то текстом. Чем-то расстраивающим. Но вообще было бы весело замутить что-то еще.

Та самая сцена смерти, которую так любит Стивен
Та самая сцена смерти, которую так любит Стивен

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

Впрочем, если отбросить все эти задумки, игра и так работает довольно хорошо. Это определенно именно то, что вы видели или во что играли в начале 80-х. Пока вы наслаждаетесь, я, возможно, попробую реализовать некоторые из идей. Хм».

228. Blaster (1985) — Прощание с ZX81

Платформа: ZX81

Разработчик: Steven Reid

Геймплей

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

«…Представляю вам Blaster — шутер с изюминкой. Используйте Z и точку [в английской раскладке], чтобы двигаться влево и вправо, и M — чтобы стрелять. Не самая захватывающая на свете игра, но продержаться в ней хотя бы несколько минут будет непросто.

Интересно, * — это и есть та самая изюминка?
Интересно, * — это и есть та самая изюминка?

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

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

Так как ваш корабль меньше, вы двигаетесь немного быстрее бомбардировщиков. Это даст еще несколько попыток, если они вам понадобятся. Но вы потеряете импульс, если промахнетесь. Правильно подобранный момент решает всё. Чем больше ждете, тем больше очков получите. Только от вас зависит, на какой риск идти.

Это настолько крутая игра, что запустить ее на ZX81 с 1 КБ ОЗУ невозможно — требуется хотя бы 2 КБ
Это настолько крутая игра, что запустить ее на ZX81 с 1 КБ ОЗУ невозможно — требуется хотя бы 2 КБ

Это забавный маленький проект с хорошими скоростью и эстетикой. Неплохая попытка создать игру на закате моих дней программирования на ZX81».

И небольшая хитрость уже от меня: достаточно зажать кнопку M, и тогда почти в 100% случаев бомбардировщик не сможет пролететь мимо вас. По крайней мере, это работает на низких уровнях, а дальше я не доходил. Стивен был прав, продержаться в Blaster хотя бы несколько минут действительно непросто — по непонятной причине почти сразу начинает клонить в сон.

229. Star Wars (1982) — Рандом, траншея, два СИДа

Платформа: ZX81

Разработчик: David Brudenall

Геймплей

Только я обрадовался, что наконец покончил с ZX81, даже начал уже пробовать запускать что-то на эмуляторе «Спектрума», как вдруг пишет мне Sightsaber. Ему удалось отыскать еще одну игру для восемьдесят первого, ROM’а которой нигде нет. «Но не беда, — говорит он, — в журнале есть листинг, код программы я тебе наберу». И ведь набрал!

Несмотря на то, что в этой Star Wars снова воспроизводится сцена с пролетом по «Звезде Смерти», геймплей здесь реализован оригинально. Не в том плане, что здорово и круто, а в том, что раньше я такого не видел.

Здесь хотя бы нет сомнений, что игра именно по Star Wars
Здесь хотя бы нет сомнений, что игра именно по Star Wars

С левого края экрана есть таймер, который по логике отсчитывает время, но по факту — ходы. Да, я бы рассматривал Star Wars именно как пошаговую игру, пусть и с нотками «риалтайма». Например, чтобы переместить крестокрыл (Х), нужно зажать кнопку направления и ждать, пока не сменится ход.

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

Знакомьтесь — СИД-положительный и СИД-отрицательный
Знакомьтесь — СИД-положительный и СИД-отрицательный

Основная проблема игры — полное отсутствие баланса и геймплей, завязанный на чистом рандоме. Когда делается ход, СИДы телепортируются в случайную точку траншеи. Попадут на тебя — пиши пропало. Например, был ты сверху, а враги кружили снизу. Следующий ход — ты труп. Просто не повезло. Бывало, что меня таранили чуть ли не сразу после запуска уровня.

Вторая проблема рандома — выпускное отверстие тоже появляется в случайном месте. С одной стороны, это должно повышать реиграбельность. С другой, опять ломается баланс. Окажись «дырка» в самом низу, выбраться из траншеи после выстрела ты уже вряд ли успеешь (а ведь перед этим до отверстия надо еще долететь).

Выиграть при таком раскладе невозможно — не хватит ходов
Выиграть при таком раскладе невозможно — не хватит ходов

Но есть и третья проблема рандома, не такая очевидная. О ней я вообще узнал, когда прочитал описание игры в журнале 80-х годов. Оказывается, что у попаданий тоже есть вероятности. Как было в большинстве других игр? Прицелился, выстрелил, молодец! В фильме было примерно то же самое, там у Люка вообще только одна торпеда была, насколько помню. Здесь же их три и желательно вышмалять весь боезапас — и то это не гарантирует победы. Кстати, из того же описания я узнал, что надо находиться НАД выпускным отверстием во время стрельбы. А я-то всё время наводился четко на него (занимал его клеточку).

Эту надпись я видел часто… Очень часто
Эту надпись я видел часто… Очень часто

Пройти игру я так и не смог. Потратил минут 20–30, но всегда заканчивал смертью от столкновения с появившимся из ниоткуда СИДом. Как же это раздражает…

230. Death Star (1983) — Бодрый текстовый экшОн

Платформа: ZX80

Разработчик: Jon Barnett

Прохождение

Наконец я закончил с ZX81 и могу двигаться дальше… к ZX80! Но не пугайтесь, для «дедушки Спектрума» Sightsaber нашел пока только одну игру, и я молюсь всем богам далекой-далекой галактики, чтобы ею всё и ограничилось :D При этом моему «коллеге-археологу» пришлось вновь набирать программу вручную, а после еще и объяснять мне управление. Да, без этого я совсем не понимал, что требуется делать, так как внутриигровая инструкция не содержит полезной информации. Вообще.

В Death Star, как можно догадаться по названию, мы снова должны лететь по траншее «Звезды Смерти» и стрелять торпедами по выпускному отверстию. Вот только игровой процесс тут даже более оригинален и необычен, чем в предыдущей Star Wars. Сейчас я напишу то, что непросто осознать с первого раза, но вы попробуйте — перед нами текстовый экшен в почти реальном времени. Не поняли? Попробую объяснить.

Уничтожая вражеские сооружения и истребители, мы зарабатываем очки. А еще в Death Star ограниченное количество торпед и топлива
Уничтожая вражеские сооружения и истребители, мы зарабатываем очки. А еще в Death Star ограниченное количество торпед и топлива

Графики в игре нет вообще. Как и в других текстовых проектах, все события здесь описываются словами. Причем описываются довольно коротко: «СИД сзади», «Башня связи снизу», «Ангар истребителей снизу», «СИД спереди» и, наконец, «Выпускное отверстие снизу». Такая лаконичность в случае Death Star вполне оправдана, ведь здесь, словно в хардкорном скролл-шутере, действовать и стрелять надо чуть ли не молниеносно. Времени на длительное чтение нет из-за скрытого внутреннего таймера — не отдашь команду быстро, твой крестокрыл собьют.

Вот как Sightsaber объясняет программную реализацию этой фишки: «Там очень интересно сделано, с использованием двух ячеек памяти компьютера, ведущих отсчёт кадров на мониторе. Сначала их значения обнуляются командой POKE, а в момент нажатия клавиши оттуда считывается значение и простой формулой преобразуется в приращение очков (или время до выстрела врага)». Я всё равно мало что понял, но за пояснение искреннее спасибо!

Для управления задействуется всего несколько команд:

  • F — выстрел по врагу спереди, сооружению или отверстию;
  • E — уклонение от засевшего на хвосте противника;
  • D — спуск в траншею или к имперским сооружениям.
Победный экран. Я — герой!
Победный экран. Я — герой!

И вот как это играется. Видишь надпись, скажем, «Враг сзади» — быстро жмешь E+Enter. Сразу же появляется другое предупреждение: «Башня связи/ангар внизу» — D+Enter и тут же F+Enter. И весь геймплей в таком духе — ты словно не в текстовой игре, а в бодром экшене, где нужно принимать решения за считанные секунды. В случае с выпускным отверстием скорость особенно важна, ведь попасть в него, что логично, труднее всего.

Конец сороковой части. Продолжение следует...

3838
14 комментариев

40 частей, пиздец

3
Ответить

Я примерно того же мнения)

Ответить

Интересно читать как разраб придумал и реализовывал свои игры. Заметь как я и говорил. Только @Sightsaber уже в реальном времени пишет для тебя игры. Спасибо за чтиво надеюсь до конца года со спектрумом закончишь

2
Ответить

И вам спасибо, что читаете и комментируете - это здорово мотивирует!

И рад, что идея перевести мысли самого разраба насчет его творений оказалась интересной :)

Ответить

Кстати, да, "Спектрум" добить успел)

Ответить

Хардкор, конечно - это читать-то трудно, не говоря уже о том, чтобы проходить) автору, безусловно, спасибо за труды :-) я сам начинал карьеру задрота ещё с клона спектрума, поэтому минимализма не боюсь, но эти игры - я даже не знаю, интереснее, мне кажется, из газеты нарезать фигурки и настолку придумать, чем в такое играть. Может, конечно, я не прав, и люди в те древние времена и такое ценили

1
Ответить

Спасибо, что прочитали ^_^

1
Ответить