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
Ответов
dimm0505
post Пятница, 14 августа 2020, 19:07
Отправлено #2


Console Addict
Group Icon

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





QUOTE (serguyan @ Сегодня, 18:46)

Zero Tolerance тоже был на 16 бит приставке. И выглядит куда лучше doom.
*


Я не знаю, может она жутко играбельная была эта ZT, режим на двоих, история и все дела (я сам не играл в нее), но хоумбрюшный Wolf3D выглядит лучше ее на голову:




И вот порт DOOM на SNES (видео с реальной приставки, не эмулятор):



По сравнению с ZT она выглядит некстгеном, и по графиту, и по музону с эффектами.

Чтобы сравнить SNES версию с MD/Gen вот версия Дума для SEGA 32x (без игры она одна стоила $200), карик DOOM для SNES стоил тогда $80:


Безусловно, графически и в отношении производительности, 32x побеждала (в SNES версии нет текстур на полу и потолке):


Но! В SNES версии было больше уровней (22 из PC версии) против 16 в 32x (из версии для Jaguar), в СНЕС версии была лучше музыка. Ну и разница в цене.

Ну и моя любимая - GBA версия. Без чипов, второй приставки и тп. Пол и потолок на месте, производительность хорошая, только разрешение меньше, но на маленьком экране реальной портативки этого не видно:



Вот DOOM II:


Версии для GBA захвачены с помощью Gameboy Player для Gamecube (не эмулятор).

Сообщение отредактировал dimm0505 - Пятница, 14 августа 2020, 22:52


--------------------
Switch/Xbox Series X/Steam Deck LE White/Quest 2/Retroid Pocket 4 Pro/Anbernic 35xx+/Beelink S12 Pro
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
shitter
post Вторник, 15 сентября 2020, 18:05
Отправлено #3


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

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





QUOTE (dimm0505 @ Пятница, 14 августа 2020, 21:07)
Безусловно, графически и в отношении производительности, 32x побеждала (в SNES версии нет текстур на полу и потолке):


Но! В SNES версии было больше уровней (22 из PC версии) против 16 в 32x (из версии для Jaguar), в СНЕС версии была лучше музыка. Ну и разница в цене.
*

в версию на 32x можно спокойно играть и получать удовольствие от этого. версия же на снес не играбельна в принципе. зато музон чуть получше, да ))

в тоже время на 3do была отличная версия, снес тихо плачет в сторонке

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


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


Маньяк
****

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





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

в версию на 32x можно спокойно играть и получать удовольствие от этого. версия же на снес не играбельна в принципе. зато музон чуть получше, да ))

в тоже время на 3do была отличная версия, снес тихо плачет в сторонке
*

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

Сообщение отредактировал rainstorm - Вторник, 15 сентября 2020, 18:46
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
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
rainstorm   Кстати, немного не по теме, может есть какие верси...   Среда, 16 сентября 2020, 12:12
Pressstart   [img]https://freepngimg.com/download/doom/9-2-doom...   Четверг, 17 апреля 2025, 17:01
daxter.   Ничего страшного, больше половины игр на N64 испо...   Четверг, 17 апреля 2025, 17:50
Ol_   Ну да, негоже совершенной игровой системе Дум прои...   Четверг, 17 апреля 2025, 17:34


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

Упрощённая версия Сейчас: Вс., 22 июня 2025, 19:17
Skin Designed (c) by Rooq.net, All Rights Reserved.