Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Регистрируясь, я даю согласие на обработку данных и условия почтовых рассылок.
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр Прокачивай своего викинга, срази всех врагов и доберись до Одина!

Викинги Вальхалла

Мидкорные, Приключения, Ролевые

Играть

Топ прошлой недели

  • solenakrivetka solenakrivetka 7 постов
  • Animalrescueed Animalrescueed 53 поста
  • ia.panorama ia.panorama 12 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая «Подписаться», я даю согласие на обработку данных и условия почтовых рассылок.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
0 просмотренных постов скрыто
1
Ev3658
Ev3658

RISC-1995⁠⁠

2 года назад
Перейти к видео
Risc Assembler Видео Вертикальное видео
4
107
SwampTech
SwampTech
Лига Разработчиков Видеоигр

Написал свою первую игру для Dendy (NES) - The Iron Steam⁠⁠

2 года назад

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

Логотип консоли Dendy

Логотип консоли Dendy

История создания игры

Идея создать свою собственную игру для денди появлялась у меня довольно давно, но плотно занялся я этим вопросом только в конце 2022го года.

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

Изначально была поставлена задача написать хотя бы "Hello, World", который я мог бы запустить на эмуляторе. Но, начав читать переводной курс по разработке игр для денди на языке Си на хабре, мне удалось написать простейшую программу всего лишь за полчаса. И этого мне показалось слишком мало.

Более-менее освоив курс статей с хабра за 2-3 недели, в конце января 2023го было принято решение разработать пошаговую стратегию про стимпанковых мехов для закрепления навыков. Думал, что ограничусь созданием минимального геймплея, но разработка зашла немного дальше.

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

В итоге с начала февраля 2023го началась активная разработка игры и продолжалась она до середины апреля (далее у меня появились более важные дела и игру пришлось отложить до лучших времен).

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

Скриншот боевого геймплея актуальной версии игры

Скриншот боевого геймплея актуальной версии игры

Особенности разработки игры для Денди

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

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

В итоге я выбрал компилятор CC65, который позволяет писать код для денди денди на языке си. Этот компилятор поддерживается до сих пор и регулярно выходят обновления.

В качестве среды для разработки я выбрал Visual Studio Code. Для удобной сборки и запуска проекта был написан батник и добавлены горячие клавиши (но это тоже тема для отдельного поста). Так я собираю проект и запускаю его в эмуляторе нажатием одной клавиши на клавиатуре.

Глубоко закапываться в технические особенности консоли и разработки под нее я не хочу, так как ресурс все-таки развлекательный. Хочу отметить только несколько основных особенностей.

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

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

Поэтому, если вы хотите вывести случайную картинку в формат NES, то ее нужно свести в формат 4 цветов и до нужно разрешения (256×240 пикселей). Вот пример преобразования картинки в формат, который уже можно вывести в вашу игру:

Реальное фото я преобразовал в денди формат (фото использовано с разрешения автора)

Реальное фото я преобразовал в денди формат (фото использовано с разрешения автора)

Подготовку изображения в почти автоматическом режиме легко сделать в фотошопе или гимпе (я использую гимп).

Но самая сложная часть разработки - это рисования пиксель арта в условиях очень низкого разрешения и ограниченности в количество цветов.

Для первых версий игры я использовал готовые спрайты из Front Mission без дополнительной подготовки. Они выглядели так себе, так как игра выходила на 16-битных консолях. Вот так это выглядело:

Спрайты меха в разных положениях

Спрайты меха в разных положениях

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

Но для тестов мне таких спрайтов хватало. И после рисования сетки поля я решил ее немного украсить травой, что в итоге породило вот такое кислотное чудо:

Скриншот режима битвы одной из ранних версий игры

Скриншот режима битвы одной из ранних версий игры

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

Помимо режима битвы в игру был добавлен режим открытого мира. Карту мира я набросал довольно быстро и больше ее особо не переделывал. Выглядит она на данных момент вот так:

Временная карта мира

Временная карта мира

На карте мира каждая локация обозначена постройкой и войти в нее можно с помощью нажатия кнопки "A" на геймпаде. Локация в верхнем-левом углу - это локация-хаб с магазином, а остальные запускают сценарий битвы при входе (в каждой локации разный набор врагов, они отличаются комплектацией мехов и их количеством).

После того, как основные механики были реализованы, был начат процесс перерисовки мехов.

Как я уже говорил, одновременно можно использовать 3 цвета и один прозрачный цвет, который использует цвет фона. 3 цвета на при разрешении 16х24 пикселя на одно меха - это очень мало.

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

Спрайты мехов с использования прозрачных пикселей с черным фоном

Спрайты мехов с использования прозрачных пикселей с черным фоном

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

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

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

Механики и ЛОР игры

Игра представляет собой классическую пошаговую стратегию, основанную на механике использования очков действия (AP). Каждое действие тратит очки действия, примерно как в лучшей в мире игре Fallout 2 (только у меня клетки квадратные). Система с фазами (как в X-COM) мне нравится меньше.

Панель, которая отображает состояние деталей меха и количество очков действия.

Панель, которая отображает состояние деталей меха и количество очков действия.

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

Все оружие в игре делится на 4 типа:

  • Рукопашное оружие (может атаковать на одну клетку и есть возможность выбора точки атаки)

  • Пушки (наносят урон по случайной части меха с расстояния)

  • Снайперское оружие (наносят урон с расстояния и имеют возможность выбрать деталь вражеского меха для атаки)

  • Дробовики/картечницы (наносят урон по нескольким случайным частям меха)

  • Возможно будут еще какие-то типы оружия.

Вот пример меню выбора части меха для атаки:

Меню выбора части меха для нанесения по ней урона

Меню выбора части меха для нанесения по ней урона

Еще есть режим осмотра мехов (отображает имя, состояние частей меха и вооружение):

Режим осмотра меха, очки действия не тратит (Но может должно тратить?)

Режим осмотра меха, очки действия не тратит (Но может должно тратить?)

В режиме перемещения вы перемещаете меха курсором (каждый шаг тратит одно очко AP). Кнопка 'A' подтверждает перемещение, а кнопка 'B' возвращает меха на начальную точку (отменяет перемещение).

Механика использования экипировки пока не реализована.

Следующей важной частью игры является прокачка меха.

Вот так выглядит список доступных мест в локации-хабе:

Выбор места для посещения в хабе

Выбор места для посещения в хабе

А вот для примера магазин оружия:

Магазин оружия

Магазин оружия

Кнопка А покупает оружие в правую руку, В в левую, а Select возвращает вас на карту мира.

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

Планы по развитию игры

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

  • Создание нормальной карты мира и проработка локаций на ней

  • Динамические анимации движения мехов в режиме битвы

  • Создание возможности ходить персонажем по хаб-локации и общаться там с людьми (но это сильно упирается в 32 килобайта памяти)

  • Написание лора с сюжетом и добавление его в игру

  • Создание диалоговой системы

  • Добавление звуков и музыки в игру (музыка на денди особенно специфическая штука)

  • Добавление новых спрайтов для мехов

  • Добавление различных построек и препятствий в режиме битвы (для оживления поля битвы)

  • Улучшение ИИ и добавление новых механик в битву

  • Расширение количества доступных частей и оружия для мехов

  • Режим игры для двоих игроков (PvP и PvE)

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

Поэтому жду вас в комментариях, готов ответить на все ваши вопросы. Спасибо за внимание.

Список основных ресурсов, которые я использовал при разработке:

  • Цикл статей по разработке игры для денди - https://habr.com/ru/articles/348022/

  • Википедия по разработке для NES (там все оч подробно описано и с примерами кода, но английским) - https://www.nesdev.org/wiki/NES_reference_guide

  • Живой форум по разработке ретро-игр (и не только) - emu-land.net

  • Сайт компилятор СС65 - https://www.cc65.org/

  • Еще несколько хороших статей про устройство консоли (на русском) - http://dendy.migera.ru/nes/g00.html

  • Эмулятор который я использую для отладки игры - fceux.com

  • Страница проекта. Там можно скачать ROM-файл для эмулятора (Нужно ли делать отдельный паблик для игры?) - http://73-it.ru/the-iron-steam.html

Видео-версия статьи с геймплеем и моими комментариям

Показать полностью 12 1
[моё] Dendy NES Разработка Си Ретро-игры Консоли Pixel Art Игры на Денди Инди Инди игра Gamedev Famicom Assembler Видео YouTube Длиннопост
29
28
Alemorf
Alemorf

Искра 1080 Тарту. Прокачка! Разработка платы расширения⁠⁠

2 года назад
[моё] Сделано в СССР Детство в СССР СССР Электроника Осциллограф Assembler Прошлое Фоторезист ЧПУ Кривые руки Видео YouTube
3
12
Alemorf
Alemorf

Искра 1080 Тарту. Впаиваем UART и терминал Linux⁠⁠

2 года назад
Сделано в СССР Детство в СССР СССР Электроника Осциллограф Linux Прошлое Assembler Кривые руки Видео YouTube
2
13
Alemorf
Alemorf

Искра 1080 Тарту. Подключение принтера. Без ассемблера не обойтись⁠⁠

2 года назад
[моё] Детство в СССР Assembler Электроника Принтер Компьютер Осциллограф СССР Матричный принтер Тарту Прошлое Техника Сделано в СССР Видео YouTube
0
39
DELETED
Типичный программист

Вытесняющая многозадачность. Кухнонный пример на ассемблере x86⁠⁠

2 года назад

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

Хорошим выходом оказалась бесплатная программа DOSBox, представляющая собой полноценную эмуляцию MS DOS.

DOSBox эмулирует низкоуровневые особенности процессора 8086, включая стандартную аппаратуру IBM PC, и предоставляет доступ к таким ресурсам, как вектор прерывания таймера. Этого вполне достаточно для нашего примера.

Программа написана на Turbo Assembler для микропроцессора 8086.

Исходник: https://github.com/galilov/PreemptiveMultitasking

Показать полностью
[моё] Разработка Инди игра Assembler Программирование Видео YouTube
5
1069
DELETED

Ответ на пост «Программисты, ну как так-то? :(»⁠⁠2

4 года назад

Для тех кто разочаровался в современных программистах - ловите ссылку на демку 2004го года:

https://drive.google.com/file/d/1Shaq1UjpvXj7quWFKEf_89e4u32yLPuc/

Пароль от архива 123456


Небольшой отрезок демки записал на видео

Перейти к видео

Для пользователей Win 10 перед запуском, нажать правой кнопкой мышки, зайти в свойство файла, далее во вкладку с СОВМЕСТИМОСТЬ, кликнуть ИЗМЕНИТЬ ПАРАМЕТРЫ ВЫСОКОГО DPI.

Внизу выбрать ПЕРЕОПРЕДЕЛИТЬ РЕЖИМ МАСШТАБИРОВАНИЯ ВЫСОКОГО РАЗРЕШЕНИЯ..., из ниспадающего разрешения выбрать ПРИЛОЖЕНИЕ.

Далее ОК, ПРИМЕНИТЬ, ОК.


Потом запустить сам файл и выбрать самое высокое разрешение. Погнали!


И если вы думаете, что это ВИРУС, то нет ребята, это один файл помещающий в себя клип с музыкой и крутым визуалом, написанный на асме. Старики помнят, молодым будет интересно.

И этот шедевр весит всего 47 килоБайт.

Да-да, КАРЛ, 47 КИЛОбайт!


К примеру файл скриншота этой темы весит 123 килобайта, то есть почти в три раза больше файла демки.

Ответ на пост «Программисты, ну как так-то? :(»

Так и хочется добавить - "умели же раньше!"

Показать полностью 1
[моё] Программирование Программист Приложение Скриншот Демо Запись Assembler Олдскул Видео Ответ на пост
220
272
herrausberg

Делаю игрушку под ZX Spectrum⁠⁠

5 лет назад

Решил на самоизоляции осуществить детскую мечту, научиться кодить на Ассемблере под ZX Speсtrum )

Пока простенький движок с анимацией спрайтов и поддержкой Kempston mouse . Спрайты рисую в Gimp 2 и конвертирую их прямо в код при помощи простенькой тулзы на Delphi.

Перейти к видео
[моё] Zx Spectrum Gamedev Z80 Assembler GIMP Delphi Самоизоляция Видео
67
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Маркет Промокоды Пятерочка Промокоды Aroma Butik Промокоды Яндекс Путешествия Промокоды Яндекс Еда Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии