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
Ответов
shitter
post Вторник, 15 сентября 2020, 19:22
Отправлено #2


THAT A FU..
*******

Группа: Пользователи
Сообщений: 8 467
Регистрация: 27 апр. 2007
Из: Озерск. Челябинская обл.
Пользователь №: 22 018





QUOTE (rainstorm @ Вторник, 15 сентября 2020, 20:45)

На 3до играл на оригинальном железе, к сожалению просадки фпс иногда превращают игру в пошаговую стратегию. Но в целом играбельно, да. Графон хороший. 32х не играл. Снес пытался на эмуляторе - вообще ничего не видно, увы, фильтры никакие не помогают. Есть надежда что на пузатом телике будет лучше выглядеть, но варианта проверить сейчас нет.
Так же много играл на железе пс1(по линк кабелю проходили с другом) играбельно, но в дополнительных эпизодах фпс периодически уезжает на дно к СНЕС версии. И все бы ничего, но там много мест с прыжками, вот там вообще неиграбельно.
*

на полный экран она подтормаживала иногда, если сделать небольшое уменьшение окна, буквально на один шаг, шла уже нормально

Сообщение отредактировал shitter - Вторник, 15 сентября 2020, 19:23


--------------------
user posted image
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
dimm0505
post Вторник, 15 сентября 2020, 19:23
Отправлено #3


Console Addict
Group Icon

Группа: Супермодераторы
Сообщений: 28 808
Регистрация: 21 янв. 2007
Из: СПб
Пользователь №: 20 637





QUOTE (shitter @ Вторник, 15 сентября 2020, 19:22)

на полный экран она слегка подтормаживала, если сделать небольшое уменьшение окна шла уже нормально
*

Ты как будто не читаешь что тебе пишут hmm.gif


--------------------
GBA SP/GB Micro/Switch/PS2/XB360/XBO/NESC/SNESC/PSC/Quest 2
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
dimm0505   Ты как будто не читаешь что тебе пишут :/   Вторник, 15 сентября 2020, 19:23
shitter   что не так? ну вот, если верить разрабу могло бы...   Вторник, 15 сентября 2020, 19:24
dimm0505   Я тока в Final DOOM на PS1 играл, но тормоза там...   Вторник, 15 сентября 2020, 23:14
dimm0505   Щас на свиче хорошо играется в классические думы, ...   Среда, 16 сентября 2020, 00:06
rainstorm   Кстати, немного не по теме, может есть какие верси...   Среда, 16 сентября 2020, 12:12


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

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