Содержание статьи
Я занимался разработкой игр последние шесть лет, но прошлой зимой открыл для себя кое-что удивительное — мир фэнтезийных ретроконсолей. Если ты не знаешь, что это такое, то представь эмулятор старой приставки или домашнего компьютера. Ну, например, Super Nintendo или ZX Spectrum. Теперь представь, что этой машины никогда не существовало и всё, что у нас есть, — это эмулятор. Добавь к нему встроенный редактор кода, спрайтов, карт, звуковых эффектов и музыкальный трекер. Готово! Это и есть рецепт фэнтезийной консоли.
Одна из первых (или даже первая) фэнтезийных приставок — это Voxatron. Но настоящую популярность обрела не она, а ее младший брат — Pico-8. Этот проект начинался как редактор кода для Voxatron, но оказался настолько удачным, что не просто обрел самостоятельность и затмил предшественника, а перерос в целый феномен. За Pico-8 последовали и другие фэнтезийные консоли. В их списке, кстати, есть и мой (пробный и ныне замороженный) проект — neko8.
При этом Pico-8 — это не «вещь в себе». Недавно появился замечательный пример популярной игры, созданной для фэнтезийной консоли и затем покорившей другие платформы. Эта игра называется Celeste. Ее первую версию двое разработчиков написали на Pico-8 всего за четыре дня. Позже полная версия будет выпущена в Steam, портирована на все современные консоли и соберет восторженные отзывы критиков.
Лимиты
Что делает Pico-8 такой особенной и чем, если говорить о разработке игр, она отличается от того же Unity? Как ни странно, лимитами. Консоль ставит очень жесткие рамки для разработки. По некоторым характеристикам Pico-8 можно сравнить с домашним компьютером восьмидесятых:
- дисплей 128 на 128 пикселей, поддерживает 16 цветов;
- 32 Кбайт памяти;
- четыре звуковых канала.
С другой стороны, отсутствие ограничений по производительности и поддержка Lua в качестве встроенного языка программирования делают Pico-8 монстром по сравнению с настоящими старыми машинами.
Но есть и другие лимиты. Один из самых сильных — максимальное количество токенов, которое составляет 8192. Токен — это термин, пришедший к нам от разработчиков языков программирования. Его буквальное значение — символ, обозначающий что-то. В каждом языке имеется свой набор токенов, но Pico-8 считает только числа, слова, круглые, квадратные и фигурные скобки (они считаются попарно, то есть строка ()
имеет в себе два токена), а также знаки препинания.
Почему же на нас накладывают такой жесткий лимит? Он тесно связан с другим ограничением: картридж не может содержать более 65 тысяч знаков. И если восемь тысяч токенов еще укладываются в этот лимит, то вот девять уже могут и не поместиться.
Но в этом же и огромный плюс, то, за что я так люблю эту маленькую консоль. Когда тебе приходится думать о том, как уместить свою программу в разрешенные размеры, ты учишься писать оптимальный код и креативно подходить к решению каждой задачи.
Возьмем для примера игру Dank tomB, созданную @krajzeg. Автор умудрился запихнуть в картридж не только динамическое освещение, но и кучу других механик, таких как невидимые блоки, двигающиеся платформы, выключатели, которые можно активировать на расстоянии...
Я думаю, стоит уточнить, что Pico-8 не дает тебе никакого стартового кода. Ты не можешь подключить никакие библиотеки и все делаешь сам.
Небольшое путешествие по Pico-8
Pico-8 очень проста в обращении — нужно выучить всего пару команд. Вряд ли тебя смутит необходимость использовать командную строку, а уж встроенные редакторы освоить и того проще. Но все же на всякий случай пройдемся по основным моментам.
Итак, предположим, что ты купил Pico-8 на официальном сайте, скачал и запустил. Тебя встречает мигающий курсор терминала. Можешь набрать help
, чтобы увидеть полный список команд.
Виртуальные картриджи
Каждый проект хранится на картридже — специальном файле. Консоль поддерживает два формата картриджей — текстовый (.p8) и PNG (.p8.png). Во втором случае при просмотре файла ты увидишь изображение картриджа и скриншот сохраненной игры, а ее код будет спрятан внутри.
То есть если ты возьмешь вот эту картинку (из версии статьи на сайте) и сохранишь к себе, то потом ты можешь загрузить ее в Pico-8 и запустить игру.
Вот такое вот волшебство стеганографии!
Давай установим несколько демок:
instal_demos
cd /demos
ls
INFO
Любую папку можно открыть в файловом менеджере за пределами Pico-8, если написать folder
.
В папке с картриджами появится подкаталог demos/
, в котором лежат несколько примеров картриджей. Давай загрузим картридж jelpi.p8
.
load jelpi.p8
run
Кстати, чтобы быстро запустить загруженный картридж, достаточно нажать Ctrl-R.
Pico-8 поддерживает до шести кнопок управления, назначение которым задает картридж. Обычно это стрелочки, X и Z/C. Чтобы прекратить выполнение программы на картридже, нужно нажать Escape.
Теперь начинается самое интересное! Давай заглянем «под капот» этого платформера. Из режима терминала жмем Escape и попадаем в режим редактирования загруженного картриджа (чтобы переключиться обратно, снова жми Escape).
Мы можем изменить здесь всё. Например, в начале есть пара переменных:
-- config: num_players 1 or 2
num_players = 1
corrupt_mode = false
max_actors = 128
Давай изменим значение corrupt_mode
на true
и запустим картридж опять! Ладно, может, не стоило менять эту переменную...
Этим наши возможности не ограничиваются. Помимо редактора кода, можно использовать и все остальные — переключай вкладку и увидишь спрайты игры, карты, музыку и звуки. Можешь менять всё, что пожелаешь!
PocketCHIP
Несмотря на то что у Pico-8 нет и не предполагалось физической формы, ее воплощением можно считать карманную приставку PocketCHIP. Этот одноплатный компьютер с экраном, контактной клавиатурой и батарейкой поставляется сразу с Pico-8, что позволяет кодить или играть в игры, лежа на даче в гамаке.
Увы, у создателей PocketCHIP, похоже, какие-то неурядицы: сначала они перестали принимать новые заказы, а теперь страница магазина и вовсе недоступна. Так что заиметь такую штуку сейчас можно разве что на вторичном рынке. Будем надеяться, что ситуация исправится!
Практика
Хорошо, на чужие картриджи мы посмотрели, теперь давай придумаем что-нибудь свое! Я часто делаю небольшие графические эксперименты, так что поделюсь примером разработки одного из них.
Вот что у меня получилось в итоге.
Продолжение доступно только участникам
Вариант 1. Присоединись к сообществу «Xakep.ru», чтобы читать все материалы на сайте
Членство в сообществе в течение указанного срока откроет тебе доступ ко ВСЕМ материалам «Хакера», позволит скачивать выпуски в PDF, отключит рекламу на сайте и увеличит личную накопительную скидку! Подробнее
Вариант 2. Открой один материал
Заинтересовала статья, но нет возможности стать членом клуба «Xakep.ru»? Тогда этот вариант для тебя! Обрати внимание: этот способ подходит только для статей, опубликованных более двух месяцев назад.
Я уже участник «Xakep.ru»