|
Здравствуйте Гость ( Вход | Регистрация ) Доступ из РоссииДля сохранения достпа из России к сайту и форуму GBX
|
||||||||||
| aa-dav |
Четверг, 30 июля 2020, 18:04
Отправлено
#1
|
|
Фанат ![]() ![]() ![]() Группа: Пользователи Сообщений: 180 Регистрация: 20 апр. 2017 Пользователь №: 58 717 ![]() ![]() |
Для начала вспомним, что SNES это 16-битная игровая приставка с сегментацией памяти и порт Doom на ней изначально выглядел идеей гиблой и id Software даже и не помышляла о таком ранее сделав порт Wolf3D и ощутив на что способно это железо не по наслышке.
Однако на горизонте возник некто Рэнди Линден - когда энтузиасты уже расковыряли форматы данных игры Doom и начали экспериментировать с модами Рэнди будучи уже опытным разработчиком на железе Nintendo начал сам делать порт Doom на SNES. Некоторое время назад он дал интервью (англ.) в котором в том числе пообещал выложить исходные коды к этому своего подвигу: Однако мощностей консоли на самом деле было точно недостаточно. Но выход нашёлся - чип Super FX который можно было встроить в картридж с игрой. А это было уже что-то, ведь Super FX был 16-битным RISC-процессором с тактовой частотой 21 МГц + картридж содержал еще 512Кб RAM что было в четыре раза больше чем консоль содержала сама по себе (128Кб) и с этим уже можно было жить, хотя и в это верилось с трудом. Так вот Рэнди сам написал демо где были только стены из оригинальной игры между которыми можно было бродить и пошёл к издателю который уже начал связываться с id Software и Nintendo чтобы навести мосты и выпустить порт. В общем код совсем не такой какой он был в оригинальном Doom и весь он был написан целиком на ассемблере. Пару недель назад Рэндал выложил исходные коды и их можно посмотреть тут: https://github.com/RandalLinden/DOOM-FX Несмотря на RISC-процессор в картридже частот и 16-битности всё-равно решительно не хватало чтобы воспроизвести всё качество оригинала. Порт заметно отличается тем что пол и потолок не текстурируются (залиты монотонно с затенением по расстоянию). В общем со всеми ухищрениями оно шевелится со вполне приемлемой скоростью и ужасным конечно качеством: Но для 16-битной системы это очень впечатляет! То что код другой заметно по тому что аватар легко может застрять на стыке разных сегментов стен там где в оригинале он точно бы был бы вытолкнут из стены и плавно проскользил бы дальше по касательной. Тут же скольжение сие явно имеет проблемы на стыке сегментов стен. Во вторых рендер тоже не без проблем и текстурные координаты явно плывут почему то в зависимости от угла зрения. Вот пример: ![]() Причём это работает для всех стен - максимально приближены текстуры к правильности если смотреть на них прямо. Но при повороте они начинают уплывать немного (на несколько текселей) от правильных позиций везде - на всех стенах, просто на больших стенах это заметно меньше. Интересно конечно в чём тут хинт и трик заключался оптимизационный что вот так вот. Интересно еще, что из-за того, что Рэнди брал готовые уже уровни и конвертировал их через утилиты его порт отличается от многих официальных портов на консоли тем, что его уровни не упрощены. А ведь даже на 32-битных консолях многие уровни резались в деталях чтобы приемлемо шевелиться! Столкнулся Рэнди с чипом SuperFX когда помогал кому то с игрой Dirt Trax FX для Sculptured Software и то ли сам другую игру делал, то ли что, но в общем им пришлось заказать у третьей фирмы соображающей в железе раскурочить картридж со Starfox чтобы вынуть оттуда SuperFX-1 и распаять всё на плату с ППЗУ и прочими схемами и её прошивать с ПК Amiga через параллельный порт воткнутый в порт геймпада SNES. Линделу пришлось самому и ассемблер даже написать и весь тулчейн, так что когда много позже когда уже проект порта Doom ожил и зашевелился в полную силу и Nintendo прислало официальный девкит, то ему пришлось немного его отреверсить чтобы продолжать работать со своими утилитами и тулчейном, но уже в финале образ заливать в официальный девкит. Причём т.к. первый SupefFX был именно FX-1 из Starfox, то он работает на половинной частоте чипа FX-2 который уже будет в порте Doom и это сразу было известно что надо будет в конце переходить на повышенную частоту, но за неимением девкита просто расковыряли картридж самого первого что появилось с SuperFX на рынке - Starfox. Интересно еще, что Рэнди утверждает, что основной проблемой было запихать весь контент в картридж и именно поэтому у пола и потолка нет текстурирования. Он говорит, что текстуры стен "сжаты по вертикали". А вот с полом сжать аналогично не получилось, т.к. его видно под разными углами. Это забавный момент - похоже что т.к. стены рендерятся вертикальными полосками всегда он применил RLE-кодирование вдоль вертикальных полосок пикселей и это позволило ему сильно ужать текстуры стен, т.к. алгоритм идёт вдоль последовательности сжатых байт всегда в одном направлении (например сверху-вниз). Но с полом это не сработало, т.к. он виден под разными углами. Вот это он и назвал причиной почему в Doom для SNES пол и потолок залиты одноцветно. Похвалил он способность SuperFX применять к пикселю затенение автоматически. Еще говорит, что ЦП в основном простаивал, а 95% работы делалось SuperFX, скорее всего ЦП использовался только для всякой подгрузки в музыкальный чип да опрос периферии и в основном простаивал ожидая когда SuperFX выполняет программу из ROM картриджа (этот вариант как раз блокирует работу ЦП из-за конкуренции за шины). Про чип SuperFX еще почитал в добавок и довольно забавный процессор. Действительно 16-битный и сильно заточенный под то чтобы рисовать произвольную графику на SNES (фреймбуфер), но хотя многое напоминает по своей работе RISC, но с другой стороны так много префиксов/суффиксов/непосредственных данных разной длины/специализированных регистров и асимметрий в операциях, что лично у меня язык едва ли повернётся назвать эту архитектуру RISC. Скорее это была мода того времени называть всё новое модное и немного непохожее на мейнстрим как "RISC" при паре совпадений только. Интересно так же было взглянуть и на исходные коды. Подавляющая их часть написана на трёх сильно разных ассемблерах. Во первых, конечно же ЦП SNES - WDC 65816. Но эти исходные коды перемежаются с ассемблером для чипа SuperFX. Тут важно заметить, что программировал Рэнди Линден тогда на компьютере Amiga и для написания тех же утилит по перегонке карт из оригинального Doom в свой порт писал код и для Амиги - и тоже на ассемблере! Попадается там и код на Си, но когда я смотрел (неделю назад) его совсем мало в основной ветке игры и он в основном применялся для создания предзаготовленных таблиц с математическими функциями - видимо потому что в Си были встроенные тригонометрические функции, т.е. язык который сейчас считается системным ну или низкоуровневым тогда у Рэнди играл роль скриптов на каком нибудь питоне в нынешних реалиях. Воистину забавно! Сообщение отредактировал aa-dav - Четверг, 30 июля 2020, 18:06 |
Posts in this topic
aa-dav Опубликованы исходные коды Doom для SNES Четверг, 30 июля 2020, 18:04
dimm0505
Да там где и текстуры используются, такое ощущени... Пятница, 15 августа 2025, 01:18
Kito1984
Но разве там не были безбожно порезаны ещё и звук... Пятница, 15 августа 2025, 01:53
daxter.
Я играл с картриджа оригинального в NTSC версию: ... Пятница, 15 августа 2025, 11:58
dimm0505
Сильно наверное пожато. Я сам не играл, но чтобы ... Пятница, 15 августа 2025, 07:58
Ol_
Крестовина там нафиг не нужна. Пятница, 15 августа 2025, 12:27
daxter.
В классических резиках? Там скорее аналог не нуже... Пятница, 15 августа 2025, 13:06
Ol_
Это твоя проблема.
Просто играть можно и на стика... Пятница, 15 августа 2025, 13:24
daxter.
Тут никакой проблемы нет. В таких играх D-Pad дае... Пятница, 15 августа 2025, 14:36
Ol_ Слушай, ты наверное и RE4 на клавиатуре проходил? ... Пятница, 15 августа 2025, 14:53
daxter.
Больше всего проходил 2 часть: Jp на S ранг: сцен... Пятница, 15 августа 2025, 16:35![]() ![]() |
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
| Упрощённая версия | Сейчас: Пт., 23 окт. 2026, 17:47 |

Четверг, 30 июля 2020, 18:04











