Как сделать игру 8 bit
Как писали игры для приставок: чудеса оптимизации и жёсткий кодинг
В 1980-х годах, когда приставки только появлялись, вышла NES — Nintendo Entertainment System. В Россию она попала в виде китайского клона «Денди», «Кенги» и прочих, поэтому если у вас была восьмибитная приставка, то это была NES.
У NES было очень мало памяти и очень медленный по нынешним меркам процессор. Эта статья о том, как сделать крутую игру в очень ограниченных условиях.
Для разбора мы взяли видео из канала Morphcat Games — How we fit an NES game into 40 Kilobytes. Там разработчики повторяют опыт геймдизайнеров прошлого и пишут игру для старого железа. Как обычно, если знаете английский, то лучше посмотрите видео целиком, а если нет — держите наш текстовый вариант.
Почему именно 40 килобайт
В 1980-х объём памяти на цифровых устройствах измеряли в килобайтах, потому что ещё не было таких продвинутых её технологий. В большинстве картриджей для восьмибитных приставок было по 40 килобайт памяти. Для сравнения, это в сто тысяч раз меньше, чем на флешке в 4 гигабайта. Даже эта статья весит больше, чем 40 килобайт, так что по современным меркам этого действительно мало.
Чтобы использовать больше памяти, нужно было идти на всякие ухищрения — ставить расширители памяти или отдельные блоки для работы с несколькими картриджами одновременно. Так как почти ни у кого из геймеров такой роскоши не было, то разработчики использовали только 40 доступных килобайт.
Когда у тебя мало памяти, у тебя мало возможностей: уровни однообразные, враги однообразные, геймплей одинаковый. Но иногда разработчики шли на безумные ухищрения, и в игру получалось запихнуть много «миров», секретов и вариантов геймплея.
Одна из игр, которая взорвала мозг всем в своё время, была та самая «Супер Марио»: в ней было огромное количество разнообразных уровней разной сложности, боссы, секретные уровни и непростой, очень насыщенный геймплей. Были уровни на земле, под землёй, под водой и даже на небе; у героя было несколько режимов — низкий, высокий, в белом комбинезоне. А как вам идея разрушаемого мира? А как вам атаки с воздуха? Короче, «Марио» была безумной, невероятной игрой для своего времени, а всё благодаря оптимизациям.
В видеоролике разработчики поставили себе похожую цель: сделать насыщенную, разнообразную игру с большим количеством уровней, миров и настроений. И они показали, как этого добиться с помощью жёстких оптимизаций.
Логика игры
Чтобы в игру было интереснее играть дольше пяти минут, разработчики поставили такие требования:
Так как у нас ограничения по памяти, всю игру пишут на Ассемблере — это язык, который работает напрямую с процессором. С одной стороны, код Ассемблера исполняется очень быстро; с другой — в нём работа идёт тупо с перекладыванием данных из одной ячейки процессора в другую. Это примерно как готовить суши, работая с индивидуальными рисинками.
Память распределили так:
Персонажи
В игре есть два вида графики: статичный фон и движущиеся предметы — игроки, противники, боссы и выстрелы. Всё, что движется, называется спрайтами. Разработчики делят всю графическую память на две части — одну под спрайты, вторую под фон:
Большой босс и оптимизация памяти
Если с персонажем всё стало проще, когда его уменьшили, то с боссом всё немного сложнее. Он большой, занимает много места и у него много анимации. Задача — сделать так, чтобы боссы занимали как можно меньше места в памяти.
Карта
Для карт у нас столько же памяти, сколько и на спрайты (то есть мало), поэтому разработчики будут действовать так же:
Главная задача на этом этапе — максимальная экономия видеопамяти. Для этого каждый экран с уровнем игры разбивается не на метаплитки 2 × 2, как в примере выше, с персонажем, а на метаметаплитки или суперплитки — 4 × 4 ячейки. Вот для чего это нужно:
Рисуем карты (и оптимизируем их)
Даже 60 байт на экран, которые у нас получились, — это всё равно очень много, ведь нужно сделать много разных карт, написать логику поведения персонажей и сделать меню, заставки и титры. Каждый байт на счету.
Первый вариант — уменьшить количество памяти для отрисовки карты: сделать их симметричными, что даст нам 30 байт вместо 60. Мы рисуем одну половинку карты, а потом просто отзеркаливаем её. Сравним с картой, которую мы бы хотели получить:
И вот тут разработчики делают очередной хитрый ход, который даст им немного дополнительной памяти для графики. Смотрите:
Если вы не знаете, что такое двоичная система счисления, — почитайте нашу статью об этом, а потом вернитесь сюда.
Действуя таким образом, разработчики могут менять уровни до неузнаваемости, не затрачивая при этом вообще лишней памяти. Помним, что наш экран — это ещё не весь уровень, сверху нужно нарисовать ещё много раз по столько же.
Добавляем в игру сложный режим
Когда игрок прошёл все уровни, ему можно дать возможность поиграть на повышенной сложности: он уже знает всю игру и может пройти более сложные ловушки и боссов. Например, сложный режим может отличаться дизайном уровней и поведением противников.
Чтобы и этот режим поместился в оставшуюся память, снова используют трюки с памятью и графикой.
Как я создавал «WildMAN» — пародию на множество 8-битных игр и недавно ее портировал на Android
Я думаю каждого фаната приставочных игр интересовала тема создания игр и была мечта создать свою игру, в студенческие годы я увлёкся программированием.
Научившись программировать на Delphi я задался идеей создать игру собственными силами, на тот момент были популярны игры для мобильных телефонов на платформе Java micro edition, на просторах интернета появилась очень полезная для меня среда разработки Midlet Pascal, позволявшая создавать игры на эту платформу, без знания языка Java, который я на тот момент вообще не знал.
Первые игры под j2me, которые мне удалось создать, были одноэкранные наподобии арканоида, затем огромными усилиями я написал РПГ движок, на котором можно было создавать также квесты, этот двиг был очень несовершенен, не оптимизирован и состоял из огромного количества строк исходного кода, компилировались они три минуты, на этом RPG движке я сделал экспериментальную РПГ с туповатой темой (Симулятор бомжа)
Это была пробная тема, сделанная исключительно для демонстрации возможностей движка параллельно с java игрой, разрабатывался конструктор РПГ, который я надеялся заинтересует любителей создавать игры.
Как-то я на этом двиге начал делать квест на тему на тот момент любимого шоу с Гариком Харламовым «Бульдог ШОУ», а конкретно «Человек Синяк», и для задуманной игры я придумал название: Человек Синяк «НАЧАЛО». Первый вариант игры я забросил, так как она была однообразна, и нудна, на форуме по программированию на Midlet Pascal один программист дал кусок кода, интерпретатор скриптов на подобии BASIC, сказал, что игра может выполняться на основе этих скриптов, и в эту игру можно будет вставлять миниигры и даже боссов с простым AI. Я поначалу отнесся к этой идее скептически, так как java игры на телефонах того времени и без интерпретаторов выполнялись медленно и с жуткими тормозами, он скинул мне даже заставку моей игры, написанную на этом интерпретаторе, я ее запустил на своем NOKIA N70 и убедился в том, что скорость вполне приемлемая.
Воодушевившись скриптовым языком, я задумал создать игровой движок с нуля. Я так увлекся этим процессом, что имея постоянную работу, я уделял программированию долгие вечера. Через два месяца кропотливой работы у меня был игровой движок, в котором было три режима выполнения игры: диалог, игровая карта, которую можно было рисовать в специальном редакторе, также программировать каждый объект в игре третий режим — это режим игры, в нем можно было создавать не сложные головоломки заставки и миниигры.
На переделку игры ЧС у меня ушло около месяца, но разница была видна сразу, в игре появились скриптовые сцены, головоломки, и игровой процесс стал разнообразным:
После создания этой игры интерес к этому игровому движку у меня не утих, несмотря на вагон отрицательных отзывов и критики, я решил создать нечто затягивающее как BattleToads или Черный Плащ, где каждый уровень — это отдельный режим игры, удивляющий своим разнообразием геймплея, где сложность игры наоборот добавляет азарт к прохождению.
Название для игры я придумал очень простое: «WildMan».
У меня был игровой движок, эмулятор этого движка, мощный редактор, с неограниченными возможностями:
И скудные навыки по созданию анимации и компьютерной графики, поэтому игра не блещет графикой, и вызывает отвращение у любого современного геймера.
В игре часто встречаются элементы из старых добрых 8-ми битных игр таких как: Super Mario Brothers, Adventure island, Lode Runner, Baloon Fight каждые миры состоят из 3-х уровней и босса, а их 6: пляж, подводный уровень, лес, пирамида, ледяной уровень и финальная пещера.
Игру WildMan я опубликовал в 2011 году, она получила как отрицательные отзывы, так и небольшое количество положительных, про эту самопальную игру даже писали в журналах MTOG и Mobitree, у меня от этой игры остались только теплые воспоминания, конкретно о процессе создания самой игры, а так же о написании музыки к ней, в 2019 году я набрался навыков в программировании на JAVA и портировал ее на Android, главной целью этого было приобретение навыков в создании приложений на Android, а также сохранить в Google Play этот кропотливый труд и просто память о прекрасном студенческом периоде моей жизни.
Создание игры для NES / Famicom / Dendy (8-bit)
Давайте в этой теме соберём всю информацию по программированию для всем нам любимой 8-ми битной приставки NES / Famicom / Dendy.
Хочу сказать сразу следующее, что ещё пару лет назад информации по поводу создание новых игр для Nintendo Entertainment System в Интернете было очень мало, и вся она была очень скудной и не позволяла с нуля без каких-либо знаний сделать хотя бы маленькую демонстрационную программу.
Сейчас же погуглив всего несколько секунд, я удивился тому огромному кладезю знаний, который имеется в сети. (Конечно, было бы неплохо собрать всё это в одном месте, так что бы не пропало, на память потомкам).
Тут нам и подробная архитектура консоли и учебники и документация по программированию процессора.
В общем, оказывается, что сейчас сделать игру для NES куда проще, чем написать её для SMD или PSX и это даже на смотря на все её технически ограничения (о которых так же стоит вести разговор в данной теме).
На чём же можно сейчас написать игру на NES (Dendy)?
— Да практически на чём угодно, тут вам и ASM, C, Basic и даже подобие Pascal.
Традиционно расскажу то, о чем узнал.
Famicom BASIC
Конечно же наверное самый простой способ создания игры для НЕС это написать её на языке программирования Бейсик. Сделать это позволяет Family BASIC он же Famicom BASIC. Это специальный девайс для игровой приставки Nintendo Famicom представляющий собой клавиатуру и специальный картридж. Весь этот комплект позволял программировать на Nintendo’s Family Computer как это можно было делать в китайских клонах – CЮБОР (Subor) и им подобным. Для более подробного описания этого устройство нужно посвятить отдельную статью.
Насколько мне помниться был ещё компилятор BASIC для NES для PC. Но сейчас я о нём информацию не искал.
сс65
Если же вы хотите написать игру для Денди используя минимм команд Ассемблера тогда вы может воспользоваться компилятор на C и макроассемблер для процессора 6502 под названием сс65 и ca65 соответственно. У Shiru (он сделал порт игры Alter Ego на C для NES) есть отличная статья по программированию игры для NES на Си, правда на английском языке.
Я прикладываю примеры cc65 и ca65 с готовым окружением.
cc65-nesdev.7z 560,09К 72 Количество загрузок:
Описание от автора:
Моё окружение для компиляции примеров на C от Shiru и на ASM от blargg (извлеките всё содержимое в любой каталог без пробелов в пути, запускайте make.bat для компиляции).
Существует ещё много чего интересного, о чем расскажу пару слов:
pyNES – Компилятор кода на Python в 6502 ASM.
Nesicide (NES Integrated Development Environment)
Nesicide – это полноценная среда разработки для NES (IDE / Integrated Development Environment) как раз то, что вам нужно если вы не хотите возится с блокнотом и компиляторов ASM to 6502.
Nesicide – интегрированная среда разработки для 8-ми битной NES. С его помощью вы сможете создать NES игры без особых усилий и стороннего софта. Так сказать, всё что вам нужно для разработки тут уже есть: графический редактор, редактор для создания звука и музыки, редактор кода и эмулятор с дебаггером для тестирования и отладки.
Работает на Windows, Mac OS X и Linux.
3 способа поиграть в старые 8-битные игры
В 90-х никому не нужно было объяснять что такое Dendy. Это знали и дети и их родители. Но мало кто тогда знал, что это не оригинальный продукт, а всего лишь клон другой популярной игровой консоли NES или Famicom, как ее называли у себя на родине в Японии. Многие, кто далек от видеоигр даже сейчас помнят эту консоль или, как тогда говорили, приставку только под названием Dendy.
Эмуляторы
Пожалуй, это самый простой способ запустить практически любую старую игру. Это бесплатно, нужен лишь компьютер или даже недорогой смартфон. Конечно, при этом желательно иметь хоть какой-то геймпад, потому что на клавиатуре или тем более на сенсорном экране играть неудобно.
Эмуляторов, способных запустить игры NES, довольно много и зачастую они универсальны. То есть могут запускать игры и от других консолей. Один из самых популярных — RetroArch. Это мультиплатформенная оболочка, которая объединяет множество эмуляторов. Если нужна отдельная программа, то можно попробовать FCEUX.
Кроме того, в старые игры можно поиграть прямо в браузере.
Игровые консоли
Никто не отменял и такой способ поиграть в старые игры. Можно купить оригинальную консоль или так называемый новодел. Под оригинальной консолью мы в первую очередь подразумеваем NES или Famicom. Если не гнаться за идеальным состоянием, то на зарубежных ресурсах вполне можно найти рабочую консоль за пару тысяч рублей. Примерно за те же деньги сейчас продают и новодел, который по качеству сильно уступает не только оригиналу, но и даже приставкам из 90-х. Стоит отметить, что новодельные приставки и картриджи не ценятся коллекционерами и увлеченными геймерами.
Такие консоли желательно подключать к старым телевизорам с ЭЛТ, так как подключение к современным ЖК-панелям через композитный кабель выдает ужасную картинку. В таком случае гораздо лучше приобрести современную классическую мини-консоль от Nintendo. Это официальный продукт с соответствующим качеством исполнения. У консоли есть HDMI, поэтому изображение будет наилучшим. Кроме того, вы получите и преимущества эмуляторов: возможность сохранения в любом месте и настройки вывода картинки.
Цифровые копии
Кроме эмуляторов и оригинального железа, поиграть в старые игры можно и на современных консолях или компьютерах. В цифровых магазинах вроде Steam или PSN можно найти переиздания или просто сборники ретроигр. Цена на некоторые из них может показаться слишком высокой, особенно на фоне того, что по сути это тот же эмулятор, только со своей оболочкой. Например, The Disney Afternoon Collection для PS4 стоит 1199 рублей. Впрочем, можно дождаться скидок. Отдельным плюсом переизданий можно считать достижения и коллекционные карточки.
Приставки 8 и 16-бит против титанов рынка консолей
Содержание
Содержание
На рынке игровых консолей можно заметить интересную тенденцию: пока титаны рынка (Sony, Microsoft и отчасти Nintendo) ведут упорную борьбу за продажи консолей нового поколения, добавляя полигоны, гигабайты и релизы игр с открытыми мирами, рынок 8- и 16-битных консолей благополучно существует и не думает сдаваться. Страшно сказать, но некоторые представители этого сегмента, например, NES, выпустили свои первые консоли более 30 лет назад.
Почему они до сих пор пользуются спросом? Что это, ностальгия? Усталость от графических наворотов и всех этих полигонов и трехмерностей, за которыми не видно души? Или просто желание сэкономить, купив консоль «с 500 играми», чтобы наиграться досыта и недорого? На самом деле, все вместе. Ведь недаром Nintendo, а затем и Sony выпустили NES Classic Mini, SNES Classic Mini и PlayStation Classic. Приставки разошлись миллионными тиражами.
Давайте подробнее поговорим о причинах популярности 8- и 16-битных консолей в наши дни.
Без сомнения, цена играет важную роль, часто она становится определяющей. Тем более, что такая покупка порой делается по принципу: «ребенок просит, пусть наиграется. И на игры тратить деньги не надо: вон, сразу 500 в комплекте».
Подход не совсем правильный, но порой 8- и 16-битные приставки покупают именно по финансовым соображениям: консоли нового поколения стоят в районе 20-30 тысяч рублей. Самые дорогие олдскульные приставки оценивают в пределах 5-6 тысяч рублей. Наиграется ли ребенок или потом все равно выпросит «нормальную консоль» — большой вопрос. Обычно ситуация все же заканчивается покупкой еще одной, более продвинутой приставки.
Ностальгия
В XXI веке впервые появился новый культурный феномен, который можно назвать «цифровой ностальгией». Именно он поддерживает и будет поддерживать рынок ретроконсолей на плаву.
Если говорить о 8- и 16-битных консолях, то в Россию они пришли с некоторым отставанием от мирового рынка. Позднее это отставание сгладилось: 32-битные консоли попали в наши магазины одновременно с появлением на рынках Японии, США и прочих стран. Но в 90-е годы все играли на «Денди», «Сеге», 3DO, первом Playstation или Sega Saturn. Менее популярна была SNES, что особенно удивительно, так как качество игр для этой консоли было, пожалуй, повыше, чем у Sega MegaDrive и уж тем более, чем у NES. Но в России SNES и особенно игры для нее продавались значительно реже, чем картриджи для конкурентов. Играть было банально не во что.
В те годы наличие приставки и картриджей с популярными играми стало своеобразным мерилом престижа. Картриджами обменивались, выпрашивали их на время, чтобы поиграть. С тем, у кого было много популярных игр, дружили все дети из окрестных домов.
Дети, которые играли в 90-е годы, давно выросли. Теперь у них появилась та самая «цифровая ностальгия» — желание вспомнить славные времена и наконец наиграться «до посинения». Потому что взрослому человеку никто не будет говорить о том, что «долго играть на приставке — вредно, от этого телевизор портится». Теперь уже он сам рассказывает своим детям, что от планшета, смартфона и компьютера портится зрение. Но при этом предложи ему вспомнить былое и пройти три-четыре уровня BattleToads & Double Dragon или перестрелять всех в Contra — и он с удовольствием согласится.
Тем более, что современные 8- и 16-битные консоли поддерживают автоматическое сохранение в играх. А в старые добрые времена на рынке покупали картриджи без батарейки, потому что других просто не было. И чтобы пройти, например, Shining Force 2 приходилось не выключать консоль несколько суток напролет. Не всякая приставка такое выдерживала. И уж тем более не каждый родитель.
Для тех, кому не понаслышке знакома «цифровая ностальгия», производители перевыпустили старые добрые консоли: Sega, Dendy, Nintendo NES, SNES Classic Mini, а также Playstation Classic. Конечно, современные приставки только отдаленно напоминают оригиналы: внутри находится совсем другое «железо», на котором работает программная оболочка (эмулятор старой консоли). Да и подключаются новые консоли к телевизору уже не через антенный вход или AV-разъем, а по-современному — через HDMI.
Считается, что эмулятор, написанный разработчиками для NES Classic Mini, наиболее точно повторяет работу знаменитой консоли, позволяя вспомнить, как все было раньше, и провести, наконец, Марио через все уровни к принцессе благодаря возможности сохраниться в любом месте уровня. В оригинале сохранений не было вообще.
Ностальгия оказалась отличным двигателем рынка: ретроконсоли, переработанные на новый лад, распродаются миллионными тиражами. Консоли разных производителей в стандартном и карманном исполнении часто можно увидеть на полках магазинов электроники.
Осознанный выбор игр с олдскульной графикой
Еще одна важная причина, по которой покупатели идут в магазин за 8- и 16-битными приставками — осознанный выбор именно этих консолей и игр с, казалось бы, несовременной и даже примитивной пиксельной графикой.
Тут, в свою очередь, есть несколько причин. Во-первых, если посмотреть статистику покупок игр в магазинах контента, окажется, что наряду с современными тайтлами, для запуска которых требуются мощные компьютеры, популярны и такие игры, как Terraria или Minecraft — нарочито пиксельные или нарисованные в олдскульном стиле.
На рынок вышло много ролевых и приключенческих игр, графика которых выполнена в стилистике 16-битного поколения. Поэтому стоит купить приставку только для того, чтобы опробовать огромное количество игр, вышедших за все время существования консолей. Библиотека насчитывает несколько тысяч проектов. Сотни из них можно и нужно причислить к хитам, в которые интересно поиграть и сейчас.
Во-вторых, все та же ностальгия тянет пройти игры, до которых в свое время «не дошли руки». Или наоборот, игра была пройдена вдоль и поперек, а теперь хочется повторить те самые виртуальные приключения. Можно, конечно, запустить эмулятор на компьютере, но это совсем другие ощущения. Вот и покупается 8- или 16-битная консоль, чтобы пройти, например, знаменитый Chrono Trigger, про который в свое время столько раз слышал, но так и не смог сыграть. Или, наконец, собрать 100 % бананов в Donkey Kong Country.
В-третьих, старые игры хороши тем, что в них можно просто играть. Не надо разбираться со сложным открытым миром или головоломным управлением и интерфейсом. Просто берешь в руки джойстик, на котором для управления имеется крестовина и максимум шесть кнопок — и вперед, в путешествие по уровням, от одного босса к другому.
Обычно сюжет игры прост и интуитивно понятен даже ребенку, но всегда интересно, что же будет после того, как удастся победить очередного босса. Хотя на 8- и 16-ти битных консолях тоже были зубодробительные проекты вроде Final Mission для NES, в которой далеко не всем покорился даже первый уровень.
Коллекционирование
Еще одна причина, по которой покупают 8- и 16-битные консоли — коллекционирование. Так же, как кто-то собирает марки и открытки, люди собирают видеоигры. Одним просто интересно поиграть в первые проекты. Другие пополняют коллекцию, которую начали собирать еще в детстве. Третьи разыскивают старые картриджи и консоли на барахолках и онлайн-аукционах из спортивного интереса. Надо сказать, что редкие картриджи, особенно в упаковке (то есть так и не проданные в магазинах в свое время), могут стоить достаточно дорого. Просто потому, что в наше время нераспечатанные оригинальные картриджи от 8- и 16-битных консолей стали раритетом.
Так победят ли ретроконсоли современных титанов рынка?
Конечно же, олдскульные консоли, бывшие лидерами рынка 25-30 лет назад, уже не обгонят титанов игрового сегмента и уж тем более не вытеснят их с рынка. Но они занимают свою нишу, которая достаточно велика, чтобы консоли продолжили выпускать и успешно продавать, хотя новые игры для них давно не выходят.
На сегодняшний, да и, скорее всего, на завтрашний день, консоли 90-х годов прошлого века — нишевый, но интересный продукт для геймеров любого возраста — коллекционеров, детей и просто любителей цифровых развлечений.