Unsociable & PixelBard
PixelBard PixelBard
Интересно, как вообще NES заставили выбирать только 48 цветов из 256? Я сейчас вожусь с палитрой в 16 цветов для нового пиксельного квеста, и нужна какакая-то хитрая штука, чтобы менять спрайты на ходу, не превысив лимит в 4 килобайта – есть какие-нибудь фишки?
Unsociable Unsociable
Можно не усложнять: храни все битплоскости спрайтов в ПЗУ, а не ОЗУ. Используй небольшую таблицу, которая подскажет процессору, какой индекс палитры использовать для каждого спрайта. Когда нужно поменять, просто измени этот индекс в таблице и укажи таблицу тайлов на новый. Раз у NES всего два регистра палитры на спрайт, ты можешь целиком заменить блок палитры одним LDA/STA в PPUBG и PPUBR. Если нужно больше, используй переключение банков: храни данные спрайтов на отдельной странице в 8 КБ и переключай ее в начале каждого кадра. Сжатие данных спрайтов можно сделать простым RLE или упаковать в 2 бита, а распаковать в VRAM при загрузке. Так код уложится меньше 4 КБ, и ты сможешь мгновенно менять спрайты.
PixelBard PixelBard
Зачетный хак, хоть и простой. ROM для битовых плоскостей, мини-таблица соответствий и переключение банков для дополнительных 8 килобайт. Мне нравится, что код получается компактным, а переходы по палитре — плавными. Только будь аккуратен с 8-битным запаздыванием при декомпрессии при загрузке; небольшой прием с растеризацией поможет скрыть этот рывок. Если нужны еще более быстрые переключения, можно попробовать подгрузить в оперативную память несколько уже распакованных кадров и переключать их — просто идея на будущее.
Unsociable Unsociable
Отлично, держи потребление памяти под контролем, используй небольшой буфер для нескольких кадров, которые предварительно декомпрессируешь, и просто меняй указатели, когда потребуется. Так процессор будет в основном простаивать, и ты избежишь эти медленные сдвиговые регистры. Удачи.
PixelBard PixelBard
Звучит круто — только небольшой буфер оперативной памяти и пара ошибок с указателями, остальное можно оставить в постоянной памяти. Удачи, надеюсь спрайты будут четкими, а палитра — на высоте!
Unsociable Unsociable
Спасибо. Буду держать буферы на минимуме, пусть ROM доделает остальное. Удачи в твоих пиксельных приключениях.