Просмотр сообщений

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


Сообщения - Денди разработчик

Страницы: [1]
1
Я сделал еще одну игру а точнее порт знаменитой игры с динозавриком из Google Chrome для Dendy, Famicom и NES. Проект написан с нуля на ассемблере 6502 и собирается в обычный ROM-файл формата .nes.



Я постарался сохранить оригинальную механику игры:

  • физику прыжка и управление его высотой;
  • постепенное увеличение скорости;
  • кактусы разных размеров и их комбинации;
  • птеродактилей на разных высотах;
  • подсчёт очков и сохранение рекорда;
  • смену дня и ночи;
  • паузу, экран Game Over и перезапуск;
  • музыку и звуковые эффекты через четыре звуковых канала NES.

Как это сделано

Внутри игровая логика работает в координатах оригинальной браузерной версии. Дробные значения, скорость и физика реализованы через fixed-point арифметику 8.8, поскольку у процессора 6502 нет чисел с плавающей точкой.

Кактусы выводятся не спрайтами, а тайлами фона и постепенно записываются в nametable во время прокрутки. Это помогает экономить спрайты и избегать мерцания.

Для независимой прокрутки игрового поля и неподвижной строки очков используется sprite-zero hit.

ROM имеет простой формат NROM-256, mapper 0:

  • 32 КБ PRG-ROM;
  • 8 КБ CHR-ROM;
  • вертикальный mirroring.

Он подходит для эмуляторов и флеш-карт для NES, Famicom и Dendy. Игра рассчитана прежде всего на NTSC 60 Гц. На 50-герцовых клонах Dendy игровой процесс и темп музыки могут быть немного медленнее.

Сборка

Для сборки нужны только make и пакет cc65, в который входят ассемблер ca65 и линкер ld65.

git clone https://github.com/atonamy/nes-t-rex-game.git
cd nes-t-rex-game
make

Графика build/trex.chr уже включена в репозиторий, поэтому дополнительные инструменты для её генерации не нужны.

Лицензия

Проект бесплатный и с открытым исходным кодом. Код NES-порта распространяется по лицензии MIT. Элементы, основанные на Chromium, сохраняют условия BSD-лицензии.

Ссылки

Готовый ROM и последняя версия:
Скачать T-Rex Runner для NES

Исходный код и инструкция по сборке:
GitHub — atonamy/nes-t-rex-game

Для разработки и отладки использовался Mesen и инструмент:
atonamy/mesen-agent

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

2
Т.е. невидимок больше нет?
Это про спрайты не про фантомы, геймплей без именений

Добавлено позже:
Вот еще для сравнения кстати
https://aspie01.itch.io/bytecraft

графика не лучше моей, игра больше по размеру и цена выше, так что вполне честно все выходит

3
Денди разработчик, Сколько времени ушло на разработку?

музыка из меню походу клодом была сделана. Он мне подобную мелодию сочинял)

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

Попробуй сам написать что-то подобное, да ещё и запихнуть это в 40 КБ с более качественным артом — тогда поймёшь, что это кровь и пот. Это не JavaScript, где всё пишется в пару промптов.

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

Кстати, Werton привёл в пример Former Dawn. Вы вообще ROM этой игры видели? Там несколько мегабайт и отдельный маппер с Hyper-Fast Bank Switching. На мой взгляд, сравнивать её с простой и дешёвой игрой не совсем адекватно.

Пожалуй, более адекватным сравнением будет Micro Mages. Там действительно те же 40 КБ. Но, блин, чтобы сотворить нечто подобное, нужно минимум месяц полной занятости — по 8–10 часов в день. Над такой игрой придётся пыхтеть, просчитывая каждую команду на ассемблере и вылизывая каждую мелочь. И это даже с помощью ИИ!

Саму же Micro Mages два разработчика создавали около двух лет, причём ещё до эпохи современного генеративного ИИ.

И сравните цену: Micro Mages стоит 10 долларов, а свою игру я продаю более чем в пять раз дешевле.

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

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


Добавлено позже:
В Battle City лучше сделано перемешивание спрайтов, там при достижение предела в 8 спрайтов на scanline они мигают через кадр и выглядят прозрачными, но здесь один спрайт не отображается по 2-3 кадра и выглядит ужасно. Это заметно, если позволить расплодиться танкам наверху.

Я улучши и сделал похожий прием что в Battle City: направление заполнения OAM переключается каждый кадр (шаг +4/−4), поэтому порядок приоритетов инвертируется — кого «съел» лимит в одном кадре, тот рисуется первым в следующем. Сверх этого — ротация восьми групп отрисовки (6 слотов врагов, взрывы, пули), стартующая с разного элемента каждый кадр.

Почему не выходит точно как в Battle City

У меня больше спрайтов на экране. В Battle City одновременно 4 вражеских танка, у нас 5 (max_act = 5), плюс экипаж-танкисты, мины и больше типов бонусов. На одной строке набегает 14+ спрайтов против 8, которые вытягивает PPU.

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

Поэтому добавлена вторая ротация с периодом 8 кадров — она гарантирует, что никто не исчезает навсегда. Но именно она и даёт пропуски по 2–3 кадра вместо честного «через кадр». Замер на специально перегруженной строке (8 танков = 16 спрайтов, PPU оставляет 8): игроки видны 99% кадров, враги — от 24% до 43%, вместо ровных 50%.

Аппаратные лимиты NES обойти нельзя: 8 спрайтов на строку, 64 в OAM.
Сейчас у меня свободно 105 байт PRG и 0 байт RAM — места под более умный планировщик уже нет (если только опять код не переписывать и то что то нужно менять, убирать что бы помогло).




4
Хочу обсудить идею новой игры для настоящей NES/Famicom — платформера про слонёнка Денди.

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

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

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

Одна из технических идей — использовать специальный картридж с дополнительным сопроцессором для графического ускорения. Что-то вроде собственного **NES FX Chip**. Он мог бы помогать основной консоли выполнять более сложные вычисления, подготавливать графику и создавать эффекты, которые редко встречаются в обычных играх для NES.

Например:

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

Конечно, всё должно работать на настоящей консоли Фактически это был бы новый тип игрового картриджа с собственной дополнительной электроникой.

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

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

Интересно узнать мнение сообщества:

Думали вы об игре **«Приключения слонёнка Денди»** для самой приставки?

Какой сюжет, миры, способности или врагов вы бы предложили для такой игры?

Стоит ли делать именно платформер или лучше выбрать другой жанр?

Было бы вам интересно иметь такую игру в коллекции и купить её в виде настоящего физического картриджа со своим fx ускорителем внутри для NES/Famicom/Денди?

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

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

5
По демонстрации как-то грустно всё... Хочется как-то обновления графики, а не устарения.

Обновил страницу там демка теперь есть
https://slonenok.itch.io/tanker

Добавлено позже:
По демонстрации как-то грустно всё... Хочется как-то обновления графики, а не устарения.

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

6
Что-то я не понял, зачем это покупать? Это же кусок фекалий. Очень плохо что школьники добрались до ИИ и пытаются это монетизировать... Мир обречён)

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

7
Немного технической части кому итересно


Игра работает на Mapper 0 без переключения банков: 32 КБ PRG ROM, 8 КБ CHR ROM и 2 КБ RAM. Основная логика написана на C через cc65, а наиболее нагруженные функции перенесены на 6502 Assembly.

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

Игровое поле 26×26 упаковано по два тайла в байт и занимает 338 байт RAM. Чтение тайлов, движение, проверка пересечения танков, контроллеры и формирование OAM реализованы на Assembly. Аргументы горячих функций передаются через zero page, чтобы избежать медленного программного стека cc65.

Изменения экрана записываются в VRAM-очередь и выгружаются во время VBlank. За один кадр обрабатывается ограниченное количество записей, поэтому PPU не получает данные за пределами безопасного периода. Состояние тайла меняется только после успешного добавления его графического обновления в очередь — изображение и collision map не расходятся.

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

Тяжёлые вычисления распределены между кадрами. Например, проверяется только часть активных объектов, а сложный поиск направления выполняется максимум для одного противника за кадр. Производительность измерялась через Mesen по CPU-циклам, а после каждой оптимизации Lua-тесты сравнивали состояние игры и содержимое OAM, чтобы ускорение не меняло поведение.

В результате производительность около 59–60 FPS. Главные ограничения сейчас — практически полностью занятые RAM и PRG ROM, большой монолитный C-файл и редкие пики нагрузки во время расчёта маршрута.

8
Наверное, многие из нас в детстве часами играли в TANK 1990 (хак Battle City) — те самые «Танчики» на Денди. Защищали штаб, разбивали кирпичные стены, спорили, кто случайно подстрелил орла, и мечтали: а что было бы, если добавить в игру новые бонусы, врагов и возможности?

В TANKER я постарался воплотить именно такие детские мечты.

Это полностью новая игра для NES и Famicom, написанная с нуля (но с помощью ИИ очень аккуратно с ручной проверкой кода и арта). Она не является хаком или модификацией оригинального ROM Battle City, хотя, конечно, вдохновлена классическими «Танчиками».

В игре есть:

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

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

Игра работает на настоящих NES/Famicom (и в теории должна работать на приставке Денди) через EverDrive и другие совместимые флеш-картриджи, а также в эмуляторах. Используется Mapper 0 — NROM-256.

Важно: игра платная. Стоимость цифровой версии — $1.75.

Посмотреть скриншоты, видео и приобрести игру можно здесь:

https://slonenok.itch.io/tanker

Буду рад отзывам, особенно от тех, кто в детстве любил Tank 1990 и сможет оценить игру на оригинальном железе.

Страницы: [1]