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
 
Reply to this topicStart new topicStart Poll
Ответов
rainstorm
post Среда, 16 сентября 2020, 12:12
Отправлено #2


Маньяк
****

Группа: Пользователи
Сообщений: 491
Регистрация: 17 нояб. 2016
Пользователь №: 56 998





Кстати, немного не по теме, может есть какие версии коопа этой игры с челленджем? На пс 1 по линк кабелю был просто бесконечный респавн после смерти. Мы конечно договаривались с товарищем, 3 убийства = перезапуск уровня, но это все не то. Вроде как во всех версиях так?
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
Kislorod   Интересное чтиво. Ещё вроде говорилось, что вместо...   Четверг, 30 июля 2020, 20:54
AtH   Кстати, это стандартный подход на Форте. Изначал...   Четверг, 13 августа 2020, 03:59
rainstorm   Интересная статья. Дум, один из самых великих порт...   Четверг, 30 июля 2020, 21:26
dimm0505   Этот Рэнди оказывается еще и bleem! с bleemca...   Воскресенье, 09 августа 2020, 00:00
F1ReB4LL   В одной GBAшной игре этот косяк возвели в абсолю...   Воскресенье, 09 августа 2020, 00:29
aa-dav   xD У дума оно почти незаметно на далёких стенах, ...   Понедельник, 10 августа 2020, 08:41
aa-dav   Это в целом типично для времени когда сопроцессо...   Четверг, 13 августа 2020, 04:29
dimm0505   Хороший у тебя цикл статей, тем более на русском....   Четверг, 13 августа 2020, 22:50
aa-dav   Спасибо за оценку. В предыдущей статье, кстати, ...   Пятница, 14 августа 2020, 06:58
serguyan   DOOM на снес - неиграбельное нечто. Про что там в...   Пятница, 14 августа 2020, 12:33
Nhisti   Всё оно было играбельное и выглядело тогда на ...   Понедельник, 14 сентября 2020, 13:40
daxter.   Можно было подумать, что на тех ПК дум летал. :lo...   Понедельник, 14 сентября 2020, 13:45
dimm0505   Ну я так и понял, чтобы для удобства и быстроты ...   Пятница, 14 августа 2020, 13:39
serguyan   Zero Tolerance тоже был на 16 бит приставке. И в...   Пятница, 14 августа 2020, 18:46
aa-dav   Не соглашусь. Играл в эмуляторах и Zero Toleranc...   Суббота, 15 августа 2020, 05:09
dimm0505   Я не знаю, может она жутко играбельная была эта ...   Пятница, 14 августа 2020, 19:07
shitter   в версию на 32x можно спокойно играть и получать...   Вторник, 15 сентября 2020, 18:05
rainstorm   На 3до играл на оригинальном железе, к сожалению ...   Вторник, 15 сентября 2020, 18:45
daxter.   Там 60 FPS в режиме на одного игрока. Надо было ...   Вторник, 15 сентября 2020, 22:17
Docuro-chan   Чёт я сильно сомневаюсь что в игре по "лану...   Вторник, 15 сентября 2020, 23:49
dimm0505   Есть же оказывается два форка на гитхабе, с полной...   Суббота, 15 августа 2020, 14:57
SCP-1471a   Ну наконец-то хентай дум портируют на снес!   Суббота, 15 августа 2020, 20:26
dimm0505   На SNES? :woot: На GBA же?   Суббота, 15 августа 2020, 21:55
Docuro-chan   Играл в версию для 3ДО в 1996 и был в шоке ибо ки...   Понедельник, 14 сентября 2020, 22:20
Axel089   Как вас тролль легко развел на говно :D   Вторник, 15 сентября 2020, 01:15
dimm0505   Не играл, но читал интервью женщины ее разработч...   Вторник, 15 сентября 2020, 19:19
shitter   на полный экран она подтормаживала иногда, если с...   Вторник, 15 сентября 2020, 19:22
dimm0505   Ты как будто не читаешь что тебе пишут :/   Вторник, 15 сентября 2020, 19:23
shitter   что не так? ну вот, если верить разрабу могло бы...   Вторник, 15 сентября 2020, 19:24
dimm0505   Я тока в Final DOOM на PS1 играл, но тормоза там...   Вторник, 15 сентября 2020, 23:14
dimm0505   Щас на свиче хорошо играется в классические думы, ...   Среда, 16 сентября 2020, 00:06


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

Упрощённая версия Сейчас: Пт., 03 мая. 2024, 17:32
Skin Designed (c) by Rooq.net, All Rights Reserved.