Forums Logo

Здравствуйте Гость ( Вход | Регистрация )

[ Каскадный ] · Стандартный · Линейный

> Опубликованы исходные коды Doom для SNES

aa-dav
post Четверг, 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-битной системы это очень впечатляет!

То что код другой заметно по тому что аватар легко может застрять на стыке разных сегментов стен там где в оригинале он точно бы был бы вытолкнут из стены и плавно проскользил бы дальше по касательной. Тут же скольжение сие явно имеет проблемы на стыке сегментов стен.
Во вторых рендер тоже не без проблем и текстурные координаты явно плывут почему то в зависимости от угла зрения.
Вот пример:
user posted image
Причём это работает для всех стен - максимально приближены текстуры к правильности если смотреть на них прямо. Но при повороте они начинают уплывать немного (на несколько текселей) от правильных позиций везде - на всех стенах, просто на больших стенах это заметно меньше.
Интересно конечно в чём тут хинт и трик заключался оптимизационный что вот так вот.

Интересно еще, что из-за того, что Рэнди брал готовые уже уровни и конвертировал их через утилиты его порт отличается от многих официальных портов на консоли тем, что его уровни не упрощены. А ведь даже на 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
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

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


Reply to this topicStart new topic
1 чел. читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
 

Упрощённая версия Сейчас: Чт., 04 июня 2026, 02:22
Skin Designed (c) by Rooq.net, All Rights Reserved.