Pull to refresh

Comments 14

Интересно, спасибо!
Всегда интересовало, как могли реализовать на NES некоторые достаточно сложные вещи. Если можно, объясните, как реализовали эффект «волн», например как в черепашках-ниндзя 3, в момент появления стартового меню. Там ещё голосом что-то выкрикивают, не знаю как написать. Ну и как реализуется логика 3D в этой игре, ведь большинство уровней в трёх измерениях сделано.
Если можно, объясните, как реализовали эффект «волн»


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


Ну и как реализуется логика 3D в этой игре, ведь большинство уровней в трёх измерениях сделано.

Ну, это называется 2,5D — для полноценного третьего измерения не хватает изменения размеров при удалении объектов от наблюдателя. Хотя там море во втором уровне сделано с симуляцией этого эффекта. Для 2,5D особенно делать ничего и не нужно, достаточно при рендере объектов сортировать в порядке от самых дальних к зрителю к самым ближним, см. Алгоритм художника
Продолжайте в том же духе!
Хотелось бы только понять как храниться палитра в памяти, везде написано как то муторно, киньте плз ссыль на нормальное описание палитры (или в статье осветите), а то: храниться по 8 байт каждые из которых формируют младший и старший бит палитры… такое ощущение что везде одно и тоже, либо перевод, либо копипаст…
С гифками вроде всё ок, не много и не мало. Спс за статью!
Дык привёл же вроде…
habrahabr.ru/post/348212
dendy.migera.ru/nes/g02.html

Парой предложений понятнее целой статьи не распишешь. Если относительно NES сходу непонятно, сначала попробуйте разобраться с определениями индексированных цветов и палитровой графики.
Не мигере и англоязычных сайтах смотрел всё равно не понимал, но нашёл старый журнал (в сети в djvu) «Игровые Приставки — Ремонт и Обслуживание», вот там всё нормально расписано с примерами, всё стало ясно, теперь уже когда мигеру читаешь, всё тоже ясно сразу становиться :)
Только остался один непонятный момент, но это я тут почитаю ещё (по ссылке выше habrahabr.ru/post/348212) + поэсперементирую сам: фон закрашиваешся палитрой для первого спрайта (0x3F10), почему так хз, ведь везде пишут что должен закрашивать первым цветом из 0x3F00?
Мой тесткейс:
Я вывожу 960 пустых тайлов (16 байт, все 0), + в область атрибутов страницы пишу 64 нуля, в файле палитры (который гружу в 3F00 состоит из 32 байт) когда меняю первый байт — результата нуль, когда меняю байт 0x10 — то меняется фон (но это палитра спрайта!?)… Можете не отвечать сам дойду как нибудь, а так заранее спасибо! :)
wiki.nesdev.com/w/index.php/PPU_palettes
Addresses $3F10/$3F14/$3F18/$3F1C are mirrors of $3F00/$3F04/$3F08/$3F0C. Note that this goes for writing as well as reading


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

Так что при записи палитры спрайтов нужно отдельные байты записывать, пропуская адреса, которые зеркалируются.
Во точно! читал же про зеркало, совсем из головы вылетело…
Спасибо большое!, теперь всё стало окончательно ясно :)
Не то, чтобы она прям таки где-то хранится. Записывается она в PPU по адресам $3F00-$3F1F: первые 16 байт — палитра фона, затем 16 — палитра спрайтов.
Здесь можете почитать подробно. Вообще, там много интересного по денди можно найти, но в некоторых статьях на ресурсе присутствуют довольно обидные ошибки (скорее опечатки).
Ага, на dendy.migera.ru отличный справочник для начинающих программировать под Dendy. Я как раз им (наряду с wiki.nesdev.com) пользовался когда делал Unchained Nostalgia.


Надеялся, что меня отпустит после этого, но нет, тянет иногда поковыряться. Есть что-то в низкоуровневом программировании под такие старые архитектуры что-то манящее =)
Большое спасибо за статью. Приятно видеть статьи по такой исключительно гиковской тематике. Это вам не блокчейн, о котором и так везде говорят!
Анимация сменой палитры
Я так анимацию сделал на дисплее 1602. Символы остаются те же, но сам символ перерисовывается. (Вращение колеса и движение груза) Хотя там по-другому в большинстве случаев и не сделаешь (всего 8 кастомных символов).
Вот это мясо! Отдельное спасибо за скрипты.
Похоже, в те времена суметь со всем этим разобраться и умудриться саму игру сделать интересной — это был подвиг.
Не согласен. Трюки и хитрости программисты графики использовали всегда, просто тогда это были трюки для того, чтобы сделать что-то, не умеет процессор. Позже — трюки, чтобы сделать то, что умеет последняя версия DirectX/OpenGL, а сейчас, чаще — трюки для обхода косяков Unity3D.

Разница в том, что тогда они всё-таки были намного ближе к железу, и у них было меньше возможностей написать код, который работает, но они не знают почему. Ну и тогда разработчик графики мог быть иногда ещё и художником, вот это сейчас уже действительно редкость.
Sign up to leave a comment.

Articles

Change theme settings