Точно помню, что в Q1 и Q2 стены лабиринта никогда не искажались, а вот динамические объекты — монстры/аптечки плыли текстурами только в путь. Даже в OpenGL-рендере зачем то отключали на них коррекцию текстур.
«по своей сути чисто двумерный, и не умел выполнять попиксельную коррекцию перспективы»
Технически можно сказать, что до появления T&L в домашних видеокартах они тоже работали чисто с плоскостью и принимая на входе уже вычисленную в screen-space глубину Z для целей коррекции перспективы и z-test-ов являлись чисто растеризаторами.
Ну, кто-кто, а Apple дешевыми не были и до сих пор ими не являются. :) Это такая же давняя традиция.
Тут, имхо, просто попытка что-то сделать собственными руками еще до всяких коммерциализаций.
А вот вышедший уже через год Apple II обладал уже не только графическим, но и сразу цветным дисплеем.
Собственно 8 каналов DMA там именно для этого, для обычного DMA в видеопамять в начале кадра достаточно одного канала.
Согласен, если взять другую их консоль, которую я лучше всего изучил — GBA, то там всего 4 DMA-канала, при том что два предназначены для запитки каналов PCM-звука, а еще один полезен, например, для автоматического копирования данных с опциональной камеры на экран, то под хоз-нужды оставался по большому счёту только один канал. Хотя там даже его польза наверное сомнительна — или он создавал бы щелчки в звуке или DMA-каналы звука тормозили бы процессор, поэтому там только с хитрым расчётом можно было им пользоваться.
P.S.
Прочитал. Да, прикольно. В целом понятно — любой из 8-ми DMA-каналов можно перевести в режим автоматической записи в порты видеочипа по HBlank. Надо будет дополнить статью про видеочип SNES этим прежде чем сюда постить.
Ох ты, не знал про эту фичу, хотя делал обзор на видеосистему SNES и его собирался сюда тоже запостить. Хотя понятно — это видимо надо читать раздел про DMA. Хм, надо тогда почитать.
Ну да — опять же первые видеотерминалы просто копировали поведение принтеров «без траты бумаги». Забавная инерция мышления как раз при переходе на новые технологии. Уж большие ЭВМ могли себе позволить шкаф со сложным видеоконтроллером.
Звёзды — да, спрайтами. Для коллизий можно считать, что поле неподвижно и ортогонально осям, а меняется лишь ориентация и направление движение в нём корабля. Физическая модель гораздо проще получается, а то как она связана с визуальным рядом дело тех же формул.
Эффект трубы проще и не требует Mode 7 — это просто HBlank-отсечение на каждой строке по формуле так что расстояние между «выборками текстуры» сохраняется. Эффекта перспективы же нет — вертикальные линии остаются вертикальными по всей длине трубы.
Есть где-то отменная статья про то как боролись в играх на денди за красивую экранную заставку — где и как спрайтами подрисовывали статику и так далее, чтобы получался сложный рисунок из как бы неповторяющихся тайлов. Концептуально нечто наподобие как на спектрумах воюют с ограничениями цветности знакомест, но со своей тайловой колокольни. Если не ошибаюсь в какой то будущей статье у меня будет на неё ссылка.
О, до замка я и не досмотрел. Весьма любопытный должен быть выкрутас, ибо больше 8 спрайтов в строке денди не может вывести и всего спрайтов на экране может быть не более 64. Поэтому большие массивы спрайтов исключены.
Можно подметить, что голова ниндзи предусмотрительно уводится ниже уровня замка — скорее всего как раз для непересечения спрайтов.
Однако замок слишком велик для спрайтов и толст сам по себе. Было бы любопытно взглянуть на эмуляторе в этот момент что там происходит в видеопамяти конечно. Сразу можно сказать, что нижняя часть замка на чёрном фоне и верхняя часть на оранжевом фоне — это обычные фоны с hblank-отсечением. Крохотный шпиль задевающий облака — спрайт. Так же можно идентифицировать в узком слое зелено-жёлтых и часто повторяющихся гор как раз технику скролла тайлов из Sword Master.
И вот далее уже на грани возможного — если толстые части замка на фоне гор укладываются по ширине в 8 тайлов 8x8, то значит это спрайты и всё просто. Если нет — тут должны быть какие то части динамического характера тайлов, возможно даже горы на фоне. Так или иначе тут явно идёт изощрённая работа на грани возможного.
по поводу фрагмента с Ninja Gaided там тоже всё просто — фигурка самого ниндзи изображена через механизм спрайтов, а всё остальное (фон) делается техникой HBlank-отсечения. Спрайты это отдельный независимый от фона слой изображения и ими нередко затыкаются такие «дырки». В какой то заставке мегамена тоже есть интересное такое применение, когда он на небоскрёбе явобы вертикально вниз скроллящемся возникает — окна небоскрёба на самом деле спрайты.
В NES спрайты имели бит приоритета — или они рисовались над фоном или под ним. Соответственно, если спрайт не предполагалось налагать поверх фона, как в случае объекта не проникающего в стены, то ему можно было ставить бит приоритета в «под фоном» и это и давало нужный результат.
P.S.
Единственное еще что вызывает вопрос — под GBA есть новый и сравнительно модный GCC, который и использую, с поддержкой C++14. А такое есть под Z80? Потому что некоторые фичи последнего действительно используются.
«или переделать использование особенностей их vdp»
Немного подумал над этой идеей. Вернее решил сформулировать что там за VDP.
В целом — классика тайловых консолей. У тех режимов что я использую в GBA в этом проекте — до 4-х независимо прокручиваемых задних слоёв. Я сейчас использую два — один для «фона неба», другой для карты. Классическое «проворачивание» с обновлением краевых полосок для иллюзии бесконечного скроллинга делает PPU. Но работа по обновлению этих фонов происходит в строго локализованном месте и конечно может быть полностью переписана. В крайнем случае можно фон неба вообще вписать в фон карты оставив один скроллящийся фон как это было собственно в денди — там не было параллакса, это собственно моё нововведение в порте.
Второе — спрайты. Тоже классические. Работа с ними тоже строго локализована и каждый кадр строится заново список спрайтов через beginSpriteDraw/drawSprite/endSpriteDraw. То есть можно тоже переделать легко под блиттинговый принцип.
Палитр две 8-битных для фонов и спрайтов отдельно, то есть цвет пикселя задаётся байтом. Но в режиме оригинальной цветности можно свести в одну 8-битную палитру. Всего же у денди меньше чем 64 вообще возможных цветов.
Только везде где есть такой «частичный» вертикальный скроллинг используются другие техники. Про это будет следующий пост. :)
Как раз вертикальный скроллинг в hblank не укладывается и там используют еще более изощрённые вещи о которых пока не хочу рассказывать раньше статьи. :)
Да, поэтому ретрогеймеры все знают, что у американской версии Castlevania 3 отвратный звук по сравнению с японкой, вот на ютубе можно убедиться в сравнении: www.youtube.com/watch?v=Rh-vkpjyMTw
Вот насчёт переноса с одной платформы на другую — тут ты несомненно круче всех моих начинаний. :)
Они реально очень разные и тут ты крут без сомнений. :)
:) Я это затеял как практикум для вышеупомянутых уроков по программированию под GBA и всё доступно для скачивания от ресурсов до исходного кода: gamedev.ru/flame/forum/?id=227447
Как раз с того же самого gamedev.ru :)
Ссылки в той же статье тоже есть. Поэтому можно самому компилировать и пробовать. Карты те же попробовать делать, ибо в этой роли используется свободный TileEd.
Главное чтобы Konami не выдвинуло правовых претензий. xD
Технически можно сказать, что до появления T&L в домашних видеокартах они тоже работали чисто с плоскостью и принимая на входе уже вычисленную в screen-space глубину Z для целей коррекции перспективы и z-test-ов являлись чисто растеризаторами.
Тут, имхо, просто попытка что-то сделать собственными руками еще до всяких коммерциализаций.
А вот вышедший уже через год Apple II обладал уже не только графическим, но и сразу цветным дисплеем.
Прочитал. Да, прикольно. В целом понятно — любой из 8-ми DMA-каналов можно перевести в режим автоматической записи в порты видеочипа по HBlank. Надо будет дополнить статью про видеочип SNES этим прежде чем сюда постить.
Эффект трубы проще и не требует Mode 7 — это просто HBlank-отсечение на каждой строке по формуле так что расстояние между «выборками текстуры» сохраняется. Эффекта перспективы же нет — вертикальные линии остаются вертикальными по всей длине трубы.
Можно подметить, что голова ниндзи предусмотрительно уводится ниже уровня замка — скорее всего как раз для непересечения спрайтов.
Однако замок слишком велик для спрайтов и толст сам по себе. Было бы любопытно взглянуть на эмуляторе в этот момент что там происходит в видеопамяти конечно. Сразу можно сказать, что нижняя часть замка на чёрном фоне и верхняя часть на оранжевом фоне — это обычные фоны с hblank-отсечением. Крохотный шпиль задевающий облака — спрайт. Так же можно идентифицировать в узком слое зелено-жёлтых и часто повторяющихся гор как раз технику скролла тайлов из Sword Master.
И вот далее уже на грани возможного — если толстые части замка на фоне гор укладываются по ширине в 8 тайлов 8x8, то значит это спрайты и всё просто. Если нет — тут должны быть какие то части динамического характера тайлов, возможно даже горы на фоне. Так или иначе тут явно идёт изощрённая работа на грани возможного.
Единственное еще что вызывает вопрос — под GBA есть новый и сравнительно модный GCC, который и использую, с поддержкой C++14. А такое есть под Z80? Потому что некоторые фичи последнего действительно используются.
Немного подумал над этой идеей. Вернее решил сформулировать что там за VDP.
В целом — классика тайловых консолей. У тех режимов что я использую в GBA в этом проекте — до 4-х независимо прокручиваемых задних слоёв. Я сейчас использую два — один для «фона неба», другой для карты. Классическое «проворачивание» с обновлением краевых полосок для иллюзии бесконечного скроллинга делает PPU. Но работа по обновлению этих фонов происходит в строго локализованном месте и конечно может быть полностью переписана. В крайнем случае можно фон неба вообще вписать в фон карты оставив один скроллящийся фон как это было собственно в денди — там не было параллакса, это собственно моё нововведение в порте.
Второе — спрайты. Тоже классические. Работа с ними тоже строго локализована и каждый кадр строится заново список спрайтов через beginSpriteDraw/drawSprite/endSpriteDraw. То есть можно тоже переделать легко под блиттинговый принцип.
Палитр две 8-битных для фонов и спрайтов отдельно, то есть цвет пикселя задаётся байтом. Но в режиме оригинальной цветности можно свести в одну 8-битную палитру. Всего же у денди меньше чем 64 вообще возможных цветов.
Как раз вертикальный скроллинг в hblank не укладывается и там используют еще более изощрённые вещи о которых пока не хочу рассказывать раньше статьи. :)
Они реально очень разные и тут ты крут без сомнений. :)
Как раз с того же самого gamedev.ru :)
Ссылки в той же статье тоже есть. Поэтому можно самому компилировать и пробовать. Карты те же попробовать делать, ибо в этой роли используется свободный TileEd.
Главное чтобы Konami не выдвинуло правовых претензий. xD