Спрайты "переключения банка" на старых приложениях NES
в настоящее время я пишу на C#, что в основном можно назвать моей собственной интерпретацией оборудования NES для старой школы, которую я разрабатываю. Я запустил FCE и наблюдал, как NES отображал и визуализировал графику.
в двух словах, NES может содержать два растровых изображения графической информации, каждый с размерами 128x128. Они называются таблицами PPU. Один был для плиток BG, а другой-для спрайтов. Данные должны быть в этом память для того, чтобы он был нарисован на экране. Если бы в игре было больше графических данных, чем в этих двух банках, она могла бы записать в эти банки часть новой информации-перезаписать то, что там было, - в конце каждого кадра и использовать ее со следующего кадра.
Итак, в старых играх, как программисты "банк переключаются"? Я имею в виду, в рамках дизайна уровня, как они узнали, какой графический набор для загрузки? Я заметил, что Mega Man 2 bankswitches, когда экран программно прокручивается из от одной части сцены к другой. Но как они хранили эту информацию на уровне-какие спрайты копировать в таблицы PPU и где их записывать?
другой пример-о паузе в мм2. Плитки BG переписываются во время паузы, а затем восстанавливаются, когда игрок отключается. Как они запомнили, какие плитки они заменили и как их восстановить?
Если бы я был ленив, я мог бы просто сделать одно огромное статическое растровое изображение и просто захватить значения, которые путь. Но я заставляю себя ограничить эти ценности, чтобы создать более аутентичный опыт. Я прочитал удивительное руководство о том, как были сделаны дети M. C., И я пытаюсь быть голым о том, как я программирую эту игру. Меня до сих пор поражает, как эти программисты делают то, что они сделали с тем, что у них было.
EDIT: единственное решение, которое я могу придумать, - это провести отдельные таблицы, в которых указано, какие плитки должны быть в PPU в какое время, но я думаю, что это будет огромная память ресурс, с которым NES не сможет справиться.
1 ответов
wSo после ночи размышлений и перечитывания документов, я думаю, что я придумал идеальное решение. Матрица!
учитывая следующие данные:
3, -1, -1, -1, -1
-1, 0, 1, 2, -1
-1, -1, -1, 3, -1
-1, -1, 5, 4, -1
-1, -1, -1, -1, -1
Я могу использовать эту информацию для доступа к информации в таблицах поиска, чтобы определить, какая информация мне нужна. Первая запись (0,0) определяет всю карту, где, как и другие значения, определяют, что необходимо на этом конкретном экране.
MAP ARRAY PALETTE MUSIC TILESET STARTINGSCR
0 0 0 1 4
1 4 3 2 2
2 etc.
3
Итак, При загрузке карты, я смотрю на пункт (0,0). Он скажем, мне нужно загрузить X плиток в PPU, использовать y color pallete, Z tileset и музыку. Он также скажет, что экран 0 является начальным экраном и что уровень начинается там-расположите символ соответственно.
SCREEN PALETTE TILESET MUSIC TILEDATA SCROLLL SCROLLR SCROLLU SCROLLD
0 0 1 2 4 true true true true
1 etc
2 2 1 2 3 false false false true
Теперь скажем, мне нужно перейти на экраны. Я могу посмотреть на текущий экран против целевого экрана. Если новому экрану нужна информация не в PPU, я могу инициировать переход, который будет загружать данные во время него. Я также могу посмотреть, могу ли я прокрутить это направление; например, если целевой экран равен -1, Я не могу прокрутить это направление. Я также могу сохранить флаг где-нибудь, чтобы определить, что если прокрутить на этот экран, я не могу прокрутить назад. Например, я могу перейти прямо на экран №2, но не могу прокрутить влево на экран 1.