SwampTech

SwampTech

Разрабатываю игры для ретроконсолей (Dendy, Sega и т.д.) Разрабатываю электронику (цифровую и аналоговую) Занимаюсь 3D-печатью (FDM и фотополимерная) Информация по проектам - https://t.me/Swamp_Tech Ютуб-канал - https://youtube.com/@R_n_P
Пикабушник
Дата рождения: 23 октября
3dfx
3dfx оставил первый донат
16К рейтинг 171 подписчик 17 подписок 84 поста 8 в горячем
Награды:
10 лет на ПикабуС Днем рождения, Пикабу!
18

Миссия Освобождение - Бронепехота - Технолог - Обзор

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Полный набор содержимого набора Миссия "Освобождение" от фирмы Технолог

Всем привет. Решил немного отвлечься от разработки игр для денди (в профиле есть посты про разработку) и, наконец-то, распаковать набор фигурок от Технолога из серии "Бронепехота" (купил себе на ДР , а открыл коробку только спустя 6+ месяцев). Миссия "Освобождение":

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Обложка коробки

Коробка оказалось очень плотно заполнена:

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Содержимое набора до распаковки

Из коробки нас встречает куча пластика и макулатуры:

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Литники

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Отряд Штурмовой спецназ

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Отряд Штурмовой спецназ

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Боевая машина "Бронеход" (Нормально этот литник не снял, так как забыл включить камеру)

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Боевая машина "Рэптор" (Этот литник тоже не получилось снять из-за выключенной камеры)

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Два литника миномета

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Снаряды и какие-о непонятные штуки

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Литник с подставками (тоже не записался нормальный кадр:()

Рассматриваем фигурки

После осмотра литников давайте рассмотрим фигурки более внимательно:

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Отряд "Штурмовой спецназ"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Отряд "Штурмовой спецназ"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Армлист - Отряд "Штурмовой спецназ"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Отряд "Тяжёлый Штурмовой Десант"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Отряд "Тяжёлый Штурмовой Десант"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Армлист - Отряд "Тяжёлый Штурмовой Десант"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Боевая машина "Бронеход"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Боевая машина "Бронеход"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Армлист - Боевая машина "Бронеход"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Боевая машина "Рэптор

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Армлист - Боевая машина "Рэптор"

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Пехотный миномет

Миссия Освобождение - Бронепехота - Технолог - Обзор Настольные игры, Wargame, Настольный варгейм, Технолог, Обзор, Фигурки, Миниатюра, Пластик, Видео, YouTube, Длиннопост

Армлист - Пехотный миномет

Лимит на медиа закончился, поэтому остальные фотографии с смотрите в комментариях.

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

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

Кроме фигурок и снарядов в набор положили 3 кубика (D6, D12 и D20), качество у них так себе, но играть пойдет.

Из макулатуры положили шесть армлистов (два отряда, два миномета и два на технику). Положили книгу правил Начального уровня (в виде небольшой книжечки в ЧБ на обычной бумаге). И две инструкции на глянцевой цветной бумаге по сборке и покраске фигурок.

*Фото макулатуры сморите в комментариях.

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

Как работает стрельба можно посмотреть в видео-версии обзора:

Правила и армлисты Бронепехоты можно скачать на офф сайте Технолога (У них довольно много варгеймов вышло) - http://www.tehnolog.ru/download/rules.php

Выводы

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

Есть еще мысли адаптировать отряды Бронепехоты под правила Вархаммера 40к, так как оригинальные правила от Технолога так себе, в Вархаммере они интереснее.

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

Всем спасибо за внимание.

Показать полностью 23 1
16

Survival horror для Dendy - Добавил нового врага

Dangerous Descent - это Survival horror для Dendy (NES/Famicom). Там присутствуют сбор предметов, решение загадок, секретные комнаты, расстрел врагов, шутки и это все доступно уже в актуальной демо-версии.

Что нового?

В очередном обновлении добавил новых врагов (мужчина и женщина зомби). А так же внес много других изменений:

  • Значительно оптимизировал загрузку комнаты

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

  • Исправил мелкие баги

  • Сделал систему триггеров при смерти врагов

Survival horror для Dendy - Добавил нового врага Gamedev, Разработка, Ретро-игры, Pixel Art, Dendy, NES, Survival Horror, Ужасы, Famicom, Видео, Без звука, Короткие видео, Длиннопост

Новые спрайты врагов

Жду ваши предложения и вопросы по разработке.

Всем спасибо за внимание :).

UPD:

Актуальную версию игры можно скачать здесь:

ТГ проекта - t.me/Swamp_Tech

Страница проекта - swamptech.itch.io/dangerous-descent

Показать полностью 1
17

Survival horror для Dendy - Добавил изометрическую камеру

Dangerous Descent - это Survival horror для Dendy. Там присутствуют сбор предметов, решение загадок, секретные комнаты, расстрел врагов, шутки и это все доступно уже даже в актуальной демо-версии.

Что нового?

В очередном обновлении добавил тестовую комнату с изометрической камерой и подвижные фоновые объекты (на видео крыса бегает).

Кроме новой камеры исправлены некоторые баги и проведена оптимизация вывода спрайтов.

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

Добавил систему переключения типов боеприпасов.

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

Жду ваши предложения и вопросы по разработке.

Всем спасибо за внимание :).

UPD:

Актуальную версию игры можно скачать здесь:

ТГ проекта - t.me/Swamp_Tech

Страница проекта - swamptech.itch.io/dangerous-descent

Показать полностью
18

Survival horror для Dendy - Добавил новые спрайты главного героя

Survival horror для Dendy - Добавил новые спрайты главного героя Gamedev, Разработка, Ретро-игры, Pixel Art, Dendy, Dangerous Dave, Инди, 2D, Survival Horror, Survival, Шутер, NES, Famicom, Видео, YouTube, Короткие видео

Всем привет. Из моих прошлых постов вы, возможно, знаете, что я делаю порт Dangerous Dave для Dendy, но разработка порта плавно перетекла в самостоятельный проект - Dangerous Descent (но порт тоже остается в разработке).

Dangerous Descent - это Survival horror для Dendy. Там присутствуют сбор предметов, решение загадок, секретные комнаты, расстрел врагов, шутки и это все доступно уже даже в актуальной демо-версии (ссылка на нее будет в конце поста).

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

На видео можно рассмотреть главного героя в динамикe:

Спрайты ГГ полностью уникальные и созданы специально для Dangerous Descent.

Как вам новая анимация главного героя?

Вот ссылки для скачивания актуальной версии игры (там можно скачать ROM-файл игры для эмулятора):

ТГ проекта - t.me/Swamp_Tech

Страница проекта - swamptech.itch.io/dangerous-descent

Всем спасибо за внимание :)

Показать полностью 1 1
85

Разрабатываю 3D-движок для Dendy

Разрабатываю 3D-движок для Dendy Pixel Art, Dendy, Разработка, Gamedev, Ретро-игры, 3D, Игры на Денди, NES, Famicom, Программирование, Длиннопост

Вывел в скелетном виде 3D-модель из блендера

Всем привет. Я уже года полтора зимаюсь разработкой игр для консоли денди/NES/Famicom. Все мои игры имеют классическую спрайтовую 2D-графику, но периодически меня посещали мысли реализовать 2.5D и честную 3D графику для денди.

Это задача не совсем тривиальная, но я решил побороться за возможность работать с полигональными моделями на денди. И за несколько недель набросал простой 3Д-движок.

Основной сложностью было то, что денди не дает возможность редактировать отдельные пиксели, можно редактировать только целые тайлы (тайлы - это плитки 8х8 пикселей). Поэтому, чтоб нарисовать пиксель в случайном месте экрана, нужно подготовить тайл, который содержит пиксель в нужном месте. А потом этот сгенерированный тайл нужно вывести в правильное место экрана. Довольно сложный механизм.

На данном этапе я почти закончил 2D-движок (осталось доделать вывод залитых треугольников любого вида, задача не совсем очевидная, если стараться все оптимзировать и использовать 8-битные переменные).

Кроме 2д-графики реализовал алгоритм определения угла наклона полигона относительно луча от камеры. Определение угла нужно для расчета теней и видимости полигона (на превью невидимые полигоны не выводятся).

В остальном вывод 3д-модели - это просто рисование треугольников на плоском холсте. Ничего сверхъестественного.

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

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

Разрабатываю 3D-движок для Dendy Pixel Art, Dendy, Разработка, Gamedev, Ретро-игры, 3D, Игры на Денди, NES, Famicom, Программирование, Длиннопост

Разноцветный контурный треугольник на Денди

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

На выгрузку буфера в видеопамять требуется примерно 4-5 кадров (при 60 фпс). А для вывода 10 полигонов требуется примерно 5-10 кадров. Значит должно получиться сделать какую-то динамичную 3д-сцену или простенькую аркаду (пишите ваши идеи простой 3д-игры).

Из оставшихся задач для 3Д нужно реализовать матрицу трансформации или хотя бы просто механизм вращения. Если будет механизм вращения, уже можно будет заняться 3Д-демкой полноценной.

И вот еще несколько экспериментов с 3д-моделями:

Разрабатываю 3D-движок для Dendy Pixel Art, Dendy, Разработка, Gamedev, Ретро-игры, 3D, Игры на Денди, NES, Famicom, Программирование, Длиннопост
Разрабатываю 3D-движок для Dendy Pixel Art, Dendy, Разработка, Gamedev, Ретро-игры, 3D, Игры на Денди, NES, Famicom, Программирование, Длиннопост

Свежие версии моих игр выкладываю на странице на итч.ио - https://swamptech.itch.io/

Информацию по проектам и обсуждение изменений с подписчиками веду в ТГ - https://t.me/Swamp_Tech

Через 2-3 недели на хабре выпущу большую статью техническую про разработку 3д-движка (на пикабу такие статьи не заходят, к сожалению) - https://habr.com/ru/users/Swamp_Dok/

Всем спасибо за внимание.

Показать полностью 3
23

Разрабатываю Survival horror для Dendy - Dangerous Descent

Разрабатываю Survival horror для Dendy - Dangerous Descent Gamedev, Dendy, Ретро-игры, Разработка, Инди игра, NES, Famicom, Pixel Art, Пиксельные игры, Выживание, Survival Horror, Ужасы, Хоррор игра, Квест, 8 бит, Шутер, Длиннопост

Всем привет.

В прошлых постах я рассказывал о разработке порта Dangerous Dave для денди, который называется Fami Dave.

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

Dangerous Descent - это ужастик-выживалка-платформер вдохновенный Dangerous Dave, Resident Evil и Silent Hill. В ней надо собирать предметы, решать загадки, искать секреты и бороться с монстрами. Все как в классических хоррорах, но в пиксельном формате.

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

Разрабатываю Survival horror для Dendy - Dangerous Descent Gamedev, Dendy, Ретро-игры, Разработка, Инди игра, NES, Famicom, Pixel Art, Пиксельные игры, Выживание, Survival Horror, Ужасы, Хоррор игра, Квест, 8 бит, Шутер, Длиннопост

Кадр из анимации смерти ГГ от зомби

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

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

Разрабатываю Survival horror для Dendy - Dangerous Descent Gamedev, Dendy, Ретро-игры, Разработка, Инди игра, NES, Famicom, Pixel Art, Пиксельные игры, Выживание, Survival Horror, Ужасы, Хоррор игра, Квест, 8 бит, Шутер, Длиннопост

Одна из комнат особняка из игры Dangerous Descent

Актуальную версию игры можно скачать здесь - https://swamptech.itch.io/

Или в ТГ канале - https://t.me/Swamp_Tech (В тг можно оставить комментарии под постами с актуальной версией игры).

PS: Кроме обычных платформеров-шутеров, я пишу 3D-движок для денди. Уже есть некоторые наработки. Не уверен, что сделаю потом полноценную игру с 3D, но модельку покрутить точно получится. Пока что-то такое есть (вывел низкополигональную модельку конуса):

Разрабатываю Survival horror для Dendy - Dangerous Descent Gamedev, Dendy, Ретро-игры, Разработка, Инди игра, NES, Famicom, Pixel Art, Пиксельные игры, Выживание, Survival Horror, Ужасы, Хоррор игра, Квест, 8 бит, Шутер, Длиннопост

Нужно доделать заливку полигонов и сделать матрицу трансформации для для вращения и перемещения модели в пространстве. Еще добавлю простую систему освещения.

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

Жду ваших отзывов и идей по развитию проектов. Спасибо за внимание.

Показать полностью 4
24

Dangerous Dave на Dendy - Мясо врагов и летающие ножи бабок

Всем привет. Продолжаю делать порт игры Dangerous Dave для денди. И мой порт называется Fami Dave (от Famicom Dave).

В этот раз я добавил анимацию разлетающегося мяса врагов и дал возможность бабкам бросать ножи как в оригинале. Вот видео с демонстрацией:

Есть еще довольно много мелких изменений (исправление багов, доработка механик и т.д.). Их можно увидеть в актуальной Демо-версии игры Fami Dave.

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

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

Ресурсы проекта с актуальным версиями игры:

https://t.me/Swamp_Tech (ТГ канал Swamp_Tech, если не работает itch.io)

https://swamptech.itch.io/fami-dave (основная страница проекта)

Показать полностью
23

Портирование Dangerous Dave для NES/Dendy

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Тема игр из детства до сих пор тревожит умы очень многих людей, а возможность реализовать свои фантазии в виде игры для любимой консоли вообще взрывает мозг (особенно в контексте игры, которую вы увидели на картинке ☺). И в этой статье я расскажу вам о своём опыте портирования Dangerous Dave in the Haunted Mansion для NES/Famicom/Dendy.

Предисловие

Большинство читателей наверняка узнали первый экран известного шутер-платформера Dangerous Dave in the Haunted Mansion, который вышел в 1991-м году для DOS. Игра была очень популярна в 90-х в странах СНГ. Да и сейчас она отлично играется. Всем кто не пробовал, очень советую ознакомиться с классикой (в неё можно поиграть онлайн, но намного приятнее раскопать старый компьютер из актуальной игре эпохи и запустить на нём).

Официально Dangerous Dave портировался только на мобильные телефоны. Для консолей существуют лишь фанатские порты. Вот пример для консоли Sega Mega Drive. Я же решил пойти дальше и начал портирование Dangerous Dave 2 для консоли NES (в СНГ был популярен её клон Dendy). Назвал проект Fami Dave (Famicom Dangerous Dave). Началось всё с попытки вывести на экран Дейва (главного героя игры) в рамках ограничений графики NES, но в итоге вылилось в создание полноценной игры (демки на данном этапе).

Мой проект можно назвать портом только условно, так как весь код написан с нуля, а графика и геймплей заметно изменены. Эту разработку корректнее называть ремейком или ремастером, или вообще игрой, вдохновлённой Dangerous Dave 2 и другими классическими survival horror (Resident Evil, Silent Hill и т. д.). Графику пришлось упрощать, так как графические возможности NES не позволяют полностью повторить оригинальную картинку (например, в NES для спрайтов доступно всего четыре палитры по три цвета). А элементы survival horror добавил в игру, так как они хорошо вписываются в тематику и делают геймплей разнообразнее.

Постановка задач

Dangerous Dave in the Haunted Mansion представляет собой 2D- платформер с плавным скроллингом по двум осям (это была основная фича игры, ради неё Кармак всё и затеял). Из этого я выделил следующие задачи:

  • графика, максимально близкая к оригиналу;

  • плавный горизонтальный скроллинг;

  • анимации смертей как в оригинале;

  • стрельба с перезарядкой;

  • возможность обыскивать и осматривать предметы;

  • отзывчивое управление и управляемые прыжки;

  • наличие инвентаря и меню записок;

  • полноценный сюжет с нелинейностью;

  • загадки;

  • наличие саундтрека и звуков окружения (стрельба, щелчки механизмов, шаги, шум врагов и т. д.);

  • использование дешёвого и простого в производстве маппера;

  • выпуск игры на физических носителях.

Графика

Основной задачей было реализовать графику, максимально близкую к оригиналу. Вот раскадровка оригинала для наглядности

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

А вот пример раскадровки анимаций врагов:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Тут уже кадров поменьше, но всё ещё много.

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

Из-за ограниченного количества видеопамяти NES решил сократить количество кадров на врага до двух, а на Дейва — до семи кадров. Поставил задачу использовать такие цвета, чтобы Дейв был максимально похож на оригинал. В итоге получился следующий адаптированный набор спрайтов:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Как вам адаптированная бабка? В динамике она ещё круче!

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

Для рисования спрайтов и фонов используется программа YY-CHR. Она очень хороша для создания графики для старых консолей (NES, SNES, SEGA и т. д.), позволяет делать все операции, которые могут прийти в голову. Очень мощная вещь. Основной недостаток программы в том, что интерфейс устаревший и его нельзя масштабировать. На больших экранах окно мелкое, неудобно работать. В остальном претензий у меня к нет, можно даже импортировать подготовленные BMP-файлы (диапазон цветов нужно ограничить до четырёх и выставить разрешение не более 128х128 пикселей).

Теперь обсудим особенности спрайтов в играх для NES, чтобы понять, почему у меня Дейв получился именно таким. Как я писал выше, видеопамять консоли составляет всего 8 килобайта: по 4 на спрайты и фоны. Вся графика состоит из тайлов 8х8 пикселей (и фоны, и спрайты), это нужно было для реализации аппаратного скроллинга (Карман в оригинальном Дейве тоже использовал систему готовых тайлов). Каждый бит тайла кодируется двумя битами, то есть может иметь четыре цвета. Вот так выглядит общая палитра NES:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Набор цветов не слишком радует разнообразием, но, кроме этого, каждый тайл или спрайт метаспрайта (изображения, собранного из отдельных тайлов) может использовать только 4 цвета. Такой набор цветов называется палитрой. Одновременно можно использовать всего 4 палитры, при этом первый цвет палитры обозначает дырку (прозрачный пиксель, через него виден фон). Итого, мы на метаспрайт имеем всего 12 цветов (и не забывайте, что в рамках одного блока 8х8 пикселей можно использовать только 3 цвета + прозрачные пиксели). Это ограничение можно частично обойти с помощью переключения палитр прямо во время отрисовки кадра (во время возврата луча ЭЛТ к началу следующей строки), но такой финт требует использования маппера, поддерживающего прерывания по событию «конец строки» (например, MMC3). Вот пример метаспрайта:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Структура метаспрайта Марио из игры Super Mario Bros.

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

Ещё нужно учитывать, что одновременно на экран можно вывести всего 64 спрайта (есть также режим вывода тайлов размером 8х16, тогда максимальное количество спрайтов на экране удваивается), при этом на одной строке может быть всего 8 спрайтов, следующие просто не будут отображаться. Это значит, что если вы хотите вывести 3 врага шириной 3 спрайта каждый, то у последнего врага крайний справа ряд спрайтов исчезнет (эти тайлы будут девятыми на строку). Вот пример такого исчезновения (у парня в чёрной майке пропал верх торса):

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Скриншот из игры Double Dragon III

Эту проблему можно обойти с помощью эффекта стробоскопа. В той же Double Dragon III, когда спрайтов на строку становится больше 8, некоторые тайлы метаспрайтов начинают отображаться поочерёдно (мерцать), что создает некоторый эффект прозрачности, но позволяет выводить больше 8 спрайтов на строку.

Подробнее о структуре видеопамяти и работе со спрайтами можно ознакомиться здесь (хороший цикл переводных статей про разработку игр для NES на языке Си).

Теперь поговорим о фонах. Разрешение экрана в NES составляет 256×224 (32 х 28 тайлов) для NTSC-версий консоли и 256×240 (32 х 30 тайлов) для PAL-консолей. Кроме разрешения, NTSC- и PAL-консоли отличаются частотой кадров: NTSC обеспечивают 60 кадров в секунду, а PAL — всего 50. Поэтому на NTSC играть приятнее, так как картинка более плавная, но геймплей и музыка немного быстрее. Наши Dendy были в основном PAL-консолями (но процессор работал на частоте NTSC-версий для совместимости с играми NTSC-региона). Хотя были и уникальные примеры SECAM-консолей, которых среди официальных моделей вообще не существовало.

Далее мы будем ориентироваться на NTSC-формат. Это значит, что фон у нас представлен таблицей размером 32х28 тайлов. То есть один экран представляет собой таблицу, каждая ячейка которой хранит номер тайла (от 0 до 255), записанного в видеопамять. Такая таблица называется таблицей имён, всего их четыре. Каждая таблица хранит информацию о фонах на одном экране. Такое решение позволяет реализовать плавный скроллинг с помощью плавного перемещения объектива игровой камеры с одной таблицы на другую. Если представить таблицы имён расположенными на координатной плоскости, то первая таблица будет располагаться в левой верхней четверти, вторая — в правой верхней, и т. д. При этом объектив игровой камеры представляет собой рамку 32х28 тайла, которая выводит на экран те тайлы, которые расположены под ней.

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

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Пример реализации скроллинга в игре Super Mario Bros.

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

Вот пример заполнения таблицы имён в моей игре

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

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

Реализация скроллинга с изменением таблицы имён в реальном времени намного сложнее, особенно, если реализовать перемещение объектива камеры и влево, и вправо (в играх NES часто нельзя вернуться назад, если вы проскроллили экран). А так выглядит плавный скроллинг в в моей игре:

Игрок идёт через всю комнату, и камера перемещается за ним. Вся комната занимает ровно две таблицы имён.

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

Кроме скроллинга и заполнения таблицы имён требуется раскрашивать фон, то есть устанавливать палитры для тайлов фона. Для этого существует специальная таблица атрибутов для каждой таблицы имён. Основная проблема в установке палитр фонов заключается в том, что палитру можно установить только для блока 2х2 тайла (16х16 пикселей), отдельному тайлу задать свою палитру нельзя. Это ещё сильнее усложняет рисование фонов, при том, что для фонов можно использовать всего 4 палитры по 3 цвета (в фонах нулевой цвет — это тоже прозрачный пиксель, который заполняется цветом заливки фона, а цвет заливки фона для всего экран один).

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Причём таблица атрибутов таблицы имен имеет неочевидную структуру: один байт кодирует цвета сразу четырёх блоков (далее блоком будем называть блок тайлов 2х2), то есть участок фона 32х32 пикселя. Кодирование происходит следующим образом:

Младшие два бита кодируют номер палитры для блока в верхнем правом углу, следующие два бита кодируют правый верхний блок, и т. д. В итоге имеем 64 байта атрибутов для каждой таблицы имён.

Ориентируясь на все ограничения, которые приведены выше, я нарисовал все ( на самом деле художник) фоны для игры Fami Dave. Пример фонов начального уровня:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

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

Это ограничение обходится с помощью повторного использования тайлов (в рамках одного экрана) или динамического переключения банков видеопамяти (так ещё часто делают анимации фонов). Динамическое переключение банков видеопамяти достигается за счет того, что видеопамять представляет собой отдельную микросхему памяти на картридже ёмкостью в 8 килобайтов. Если установить микросхему видеопамяти емкостью от 16 килобайтов, то, переключая старшие адреса, можно в реальном времени переключать доступное для процессора адресное пространство. Такое переключение банков видеопамяти достигается с помощью мапперов. О них мы поговорим ниже.

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

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

Анимации

Ещё одной важной фишкой оригинальной Dangerous Dave in the Haunted Mansion было наличие красочных анимаций, которые выводились при смерти игрока. Мне идея таких анимаций очень нравится, так как позволяет добавить мелкие детали в игру, в которой все персонажи нарисованы очень условно, а анимации позволяют выводить события крупным планом и в динамике. Вот раскадровки оригинальных анимаций:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Один кадр оригинальной анимации имеет разрешение 40х42 пикселей. Немного, но за счёт большого количества доступных цветов они выглядят красиво и читаемо.

В условиях графических ограничений NES проблематично нарисовать что-то внятное в таком небольшом разрешении, поэтому я решил сделать один кадр анимации размером 8х8 тайлов, то есть 64х64 пикселя. 4 кадра анимации как раз занимали одну полную страницу видеопамяти спрайтов. Анимации рисовал спрайтами для достижения большей детализации (в спрайтах можно задать палитру каждому отдельному тайлу, а не блоку). В играх эпохи NES такие решения практически не применяли, так как полноценные многокадровые анимации потребляют очень много памяти (1 килобайт на кадр в моём случае). Реализация красивых и крупных анимаций была бы непозволительной роскошью, а картриджи старались сделать максимально дешёвыми, поэтому экономили каждый байт.

Вот так выглядит одна анимация в памяти картриджа:

Портирование Dangerous Dave для NES/Dendy Gamedev, Разработка, Dendy, Ретро-игры, NES, Famicom, Dangerous Dave, Pixel Art, Видео, YouTube, Длиннопост

Пример раскадровки анимации из игры Fami Dave

А вот так выглядит эта анимация в динамике в Fami Dave:

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

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

Каждая анимация хранится в выделенных для них банках памяти. В моём случае под анимации выделено 2 банка по 16 килобайтов. В 32 килобайта поместится 8 анимаций. Это не слишком рационально, но анимации того стоят (или нет?). Их можно было бы попробовать сжать, но картинки плохо сжимаются, поэтому я не стал заморачиваться с этим.

Файлы анимаций формируются с помощью программы YY-CHR. Каждый файл содержит по 2 анимации, то есть 8 килобайтов, что равняется стандартному размеру видеопамяти.

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

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

Мапперы

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

Самый распространённый маппер, и при этом достаточно навороченный, — это MMC3 (умеет вызывать прерывания на любой строке при отрисовке кадра, реализует скроллинг по двум осям и многое другое). Этот маппер всем хорош, кроме того, что он реализован на специальной ASIC-микросхеме от компании Nintendo. Её проблематично купить сейчас, так как производство прекращено (можно реализовать маппер на FPGA, но это требует дополнительного этапа разработки и сделает картридж значительно дороже). А так как планируется выпустить игру на физических носителях, для меня важна итоговая цена и сложность сборки одного картриджа с игрой. Изучив все простые мапперы, я остановился на UNROM, который позволяет использовать переключение банков памяти программ (фиксированный банк памяти 16 килобайтов и до 15 переключаемых банков) и установить ОЗУ вместо ПЗУ в качестве видеопамяти. А реализуется маппер всего на паре микросхем логики. Подробно о маппере UNROM я рассказывал здесь. Вот так выглядит его схема:

Прочая информация о проекте

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

Теперь стоит немного сказать о геймплее, структуре проекта и процессе разработки.

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

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

Оригинальная игра ограничивала действия игрока стрельбой и платформингом, я же пошёл дальше. В Fami Dave игрок может не только прыгать и стрелять, но и взаимодействовать со всеми объектами окружения: осматривать предметы, обыскивать ящики, нажимать на рычаги, собирать предметы и так далее.

Ещё одним нововведением является инвентарь. Он позволяет использовать предметы, менять тип патронов (будет реализовано позже), читать собственный дневник и записки. Я также постарался добавить полноценный нелинейный сюжет в игру (записки и дневник в игре не просто так). Найденные записки будут помогать решать загадки, принимать сюжетные решения и погружать игрока в сюжет. В игре даже есть простенький стелс-режим и секретные комнаты ☺.

Теперь об инструментах разработки. Инструментарий для разработки используется небольшой:

  • fceux.com — эмулятор для отладки игры;

  • YY-CHR — программа для рисования пиксельной графики в формате NES;

  • NEXXT — программа для сборки уровней из готовых тайлов (тайлы в программу загружаются в виде .chr файла, который создается в YY-CHR);

  • Tiled — программа для построения карты коллизий фонов уровня (готовых решений для NES я не нашёл, поэтому пришлось адаптировать Tiled);

  • GIMP — все задачи по обработке изображений;

  • СС65 — компилятор языка С для консоли NES;

  • Visual Studio Code — редактирование кода.

Примеры использования представленного инструментария я давал в прошлой статье. А вот запуск игры на реальной Dendy из 90-х:

Заключение

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

Разработка игры началась в декабре 2023, а полноценная демо-версия появилась только в конце июля 2024. Проект развивается не слишком быстро, так как сейчас за студией SwampTech скрывается всего лишь два разработчика (я, как программист, и художник). Бюджета у игры нет, всё на чистом энтузиазме и любви к старым играм.

Вот планы по развитию проекта:

  • реализовать прокачку ружья (разные патроны, размер магазина и т. д.);

  • новые уровни;

  • новые звуки (шаги Дейва, щелчки механизмов, крики монстров и т. д.);

  • полноценный саундтрек;

  • новые типы загадок;

  • проработка ЛОРа игры (основным вдохновителем является Лавкрафт);

  • расширение бестиария игры;

  • выпуск игры на физических носителях с коробкой и красивым мануалом.

А теперь немного геймплея для тех, кто дочитал до конца ☺.

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

Полезные ссылки

Показать полностью 12 4
Отличная работа, все прочитано!