LINUX.ORG.RU

Немного исправленный квейк 2

 


3

3

У меня вейленд без xwayland, и мне захотелось поиграть в quake2. Для начала нашел единственный работающий порт (games/quake2lnx) — тот вариант, что лежит на сайте icculus.org.

Вывод графики там через кучу либ, плюс есть софтовый и opengl рендереры (opengl аж в 2 вариантах, один по графону похож на оригинал, второй улучшенный, типа с партиклами).

Я взял и выпилил все лишнее, а часть работающую на sdl 1.2 перевел на sdl2. В итоге на вейланде игра заработала. Олсо, теперь она компиляется более-менее без варнингов на clang и gcc.

Код q2 — просто ад, куча выходов за пределы массива, куча глобал стейта, размазанного по коду итд. Обнаружил сдедующие проблемы:

1) В софтварном рендерере падение при отрисовке прозрачных поверхностей (не пофиксил, просто выключил).

2) Там же баги при отрисовке, когда камера под водой (пофиксил).

3) Там же иногда баги, связанные, что кординаты спроецированного на экран объекта выходят за пределы экрана (не пофиксил).

4) Падение при выводе звука, если вывод графона притормаживает (пробовал запускать через remmina).

А тут на тебе, поменял работу, так что комплюктеры больше видеть не могу))) Поэтому выкладываю как есть и жду пул реквестов. Игра играбельна при использовании OpenGL рендерера (который по графену сильно уступает софтварному, на мой взгляд).

https://github.com/shamazmazum/quake2sdl

Устанавливаете, а потом ставите оригинальный pak0.pak в /usr/local/share/quake2/baseq2 (или /usr/share/quake2/baseq2, смотря куда ставили игру) При компиляции с -DRETEX=ON ставите другие паки отсюда http://icculus.org/quake2/files/. При компиляции с -DQMAX=ON ставите maxpak.pak в /usr/local/lib/quake2sdl/baseq2

Для FreeBSD есть порт https://github.com/shamazmazum/freebsd-ports/tree/master/games/quake2sdl (скопируйте в /usr/ports/games)

Код q2 — просто ад

С разморозкой, бро :-D

Это ты ещё не видел кода кью4 и кусков из win2k :-D

Deleted
()

который по графену сильно уступает софтварному, на мой взгляд

А вот тут я полностью с тобой соглашусь.

http://fabiensanglard.net/fd_proxy/quake2/renderer.gif

https://media.indiedb.com/images/articles/1/223/222366/auto/quake2.jpg

Но можно сделать следующий трюк, ввести gl_texturemode GL_NEAREST и получить графоний аналогичный Software, хотя, увы и с блевотным цветным освещением:

https://i.imgur.com/Ka4pP74.png
(может есть способ сделать его цвет как при программном рендеринге, белым?)

Код q2 — просто ад, куча выходов за пределы массива, куча глобал стейта, размазанного по коду итд.

Читал, кстати? http://fabiensanglard.net/quake2/index.php (русский перевод где-то на просторах Хабра).

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от deadplace

Да, попробовал, классная штука! Блин, жаль, зря проделал работу)

Почему зря? Присоединись, мож твои наработки пригодятся.

anonymous
()

Начиная читать пост думал ты хотел линка на yq2. В итоге удивился, что ты и в код полез.

Да, Кармак конечно хороший программист, код его читать относительно несложно(попробуй какой-нибудь движок на плюсах), но он действительно не задумывался об UB и чистоте кода в те дни, а просто делал и много. В ку2 софтрендерер вообще для галочки.

a1batross ★★★★★
()
Ответ на: комментарий от Deleted

и кусков из win2k :-D

Наверное вся вот эта прикладная прослойка по типу COM, WinAPI – такая же помойка до сих пор. А вот сам NTOS Kernel, который писали серьёзные дядьки из команды VMS/VAX от DEC выглядит довольно серьёзно.

Но вообще самый ынтерпрайзно причёсанный код (в хорошем смысле слова) что я видел – был у Motorola.

EXL ★★★★★
()
Ответ на: комментарий от a1batross

В ку2 софтрендерер вообще для галочки.

Я бы сказал, напротив, GL-рендер. Мало того, что он сделан на отвались с угрёбищными пластмассовыми руками, игрушечно выглядящими пушками и мылом, так там ещё и эффектов которые были в Software-режиме нету, например, искажения-волны при полном погружении в воду.

Да и кодовая база ref_soft на 50% больше чем ref_gl. Так что к программному рендеру в Quake II Кармак со товарищи подошли достаточно серьёзно, в 1997 не у всех ещё были 3D ускорители даже в USA. Насколько я помню мейнстримовая Voodoo2 выйдет только в 1998, со всеми её заморочками вроде «кроме самой Voodoo2 вы должны иметь ещё и обычную 2D-карту».

EXL ★★★★★
()
Ответ на: комментарий от EXL

Однако при первой же возможности в 99-ом Кармак не стал делать программный рендерер в ку3, несмотря на то, что рендерер все ещё является модулем к движку.

А разница в эффектах это нормально. Когда в программном рендере можно сделать что угодно, но дорого, на GPU наоборот ты ограничен, зато быстро. Цветного освещения в ref_soft не было, чтобы не заморачиваться с палитрами и блендингом, зато в GL такой проблемы нет как класс.

a1batross ★★★★★
()
Ответ на: комментарий от EXL

русский перевод где-то на просторах Хабра

Я так и знал, что не оригинал)) Хз, переводчик об этом упомянуть забыл, или я слепой. По сути там ничего такого, кроме восхищений.

Блин, я уже снес тот yq2, но я хз, есть там водные шейдеры и вот это всё. Тут это главное, имхо. Софтварный рендерер дает классные эффекты от воды

deadplace
() автор топика
Ответ на: комментарий от a1batross

А вообще там первый рендерер не на glide был?

В ку2 софтрендерер вообще для галочки.

OpenGL в те дни был настолько УГ, что Unreal с софтовым рендерером ещё долго обходил все эти поделия

deadplace
() автор топика
Ответ на: комментарий от EXL

ХЗ, может я с чем путаю, но вроде q2 сделали специально с аппаратным ускорением, чтобы люди раскупали 3dfx карточки. А потом, когда поняли, что графен УГ, запилили софтварный рендерер.

deadplace
() автор топика
Ответ на: комментарий от a1batross

Однако при первой же возможности в 99-ом Кармак не стал делать программный рендерер в ку3, несмотря на то, что рендерер все ещё является модулем к движку.

Потому что к времени разработки q3 сложность отрисовки такого графона на CPU уже была слишком большой, а возможности аппаратных ускорителей выросли

Забыл добавить «ятакщетаю». Но скорее всего так и есть

deadplace
() автор топика
Последнее исправление: deadplace (всего исправлений: 1)
Ответ на: комментарий от deadplace

Понятия не имею. Но сорцов glide рендереров я не видел, ровно как и хотя бы одной игры на нём.

В том-то и дело. С софтварным рендерером приходится балансировать между производительностью и воображением. Кто ж виноват что 3д ускорители тогда были вроде и очевидно лучше(аппаратно же!), но на CPU можно было сделать красивее?

a1batross ★★★★★
()

Код q2 — просто ад, куча выходов за пределы массива, куча глобал стейта, размазанного по коду итд

Обычно во всякой айти прессе или видосиках когда упоминают ИдСофтвер и их движки обязательно вспоминают Кармака и рассказывают какой он талантливый инженер, а некоторые алгоритмические решения вроде бы даже назвали потом в честь его имени (впрочем саму математику алгоритма не он придумал, но он придумал скажем так совместить несколько таких математик для свой цели и вуаля) - короче обычно такое можно найти про это.

А по факту код получается так себе. Интересно почему. Или Кармак был лишь архитектором и разрабатывал продукт на уровне идей и не видел что в коде, или делал только что-то свое а остальное кодировали макаки?

bonta ★★★★★
()
Ответ на: комментарий от deadplace

Как это опровергает мои слова? Галочка — это состояние рынка 3д ускорителей на тот момент. Просто другого выхода нет.

a1batross ★★★★★
()
Ответ на: комментарий от bonta

Кармака любят не сколько за код, а за идею и архитектуру движка, которая до сих пор актуальна. Но это моё скромное мнение. :)

a1batross ★★★★★
()
Ответ на: комментарий от a1batross

В 99-ом уже появились 3D ускорители по приемлемым ценам, id Software могли позволить себе дропнуть совсем уж нищуков.

P.S. У того же Fabien’а такой вывод:

The difference is striking when comparing to the software renderer: 50% less code, NO assembly optimization for a result that is 30% faster and features colored lighting and bilinear filtering. It is easy to understand why id Software did not bother shipping an software renderer in Quake3.

Я в целом разделяю его мнение. Его выкинули потому что он был переусложнён, имел большую кодовую базу и это как раз и опровергает то, что ref_soft был сделан только для галочки в Quake II.

EXL ★★★★★
()
Ответ на: комментарий от deadplace

Блин, я уже снес тот yq2, но я хз, есть там водные шейдеры и вот это всё. Тут это главное, имхо. Софтварный рендерер дает классные эффекты от воды

В Yamagi Q2 имеется и софтварный ренедер с современными расширениями экрана.

EXL ★★★★★
()
Ответ на: комментарий от deadplace

А вообще там первый рендерер не на glide был?

Нет. Рендер для Voodoo2 и прочих Glide’овских был кастрированной прослойкой OpenGL => Glide, которая поддерживала только подмножество тех функций, которые использовались в ref_gl у Quake II.

Учитывая модульность движка Quake II, странно что нативный рендер не был запилен. Для какого-то там Solaris вон даже запилили позже XIL Rendering через ref_xil.so, а для Glide что-то никто не занялся.

EXL ★★★★★
()
Ответ на: комментарий от deadplace

ХЗ, может я с чем путаю, но вроде q2 сделали специально с аппаратным ускорением, чтобы люди раскупали 3dfx карточки. А потом, когда поняли, что графен УГ, запилили софтварный рендерер.

Путаешь. Что графон через OpenGL – УГ, это мы сейчас с тобой тут рассуждаем. А тогда это было совсем по другому. Пользователи видели HiRes (800x600), 60fps, взрывы в начале игры и у них отвисала челюсть, а пластиковые руки и мыло отходили на другой план.

Плавности картинки в HiRes (относительном, хех) тогда было просто не добиться на тех CPU.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

А вот сам NTOS Kernel, который писали серьёзные дядьки из команды VMS/VAX от DEC выглядит довольно серьёзно.

Стояла задача сделать красиво, и делали красиво. Сейчас стоит задача делать гламурно, делают гламурно.

вся вот эта прикладная прослойка по типу COM, WinAPI – такая же помойка до сих пор

Наверное.

Вообще, те, кто проектировал и делал NT, в MS больше не работают. Всё как обычно, короче.

Накатил как-то safari на XP, скорость старта впечатлила. Древний Core2Duo, WinXP-64. Этот же safari на 8.1 работал заметно медленнее. Я к тому, что походу ядро тоже, но количество свистелок выросло кратно. Плюс «облака».

Deleted
()
Ответ на: комментарий от deadplace

OpenGL в те дни был настолько УГ, что Unreal

О кстати сейчас иногда играю в эту игру :) И могу сказать что на OpenGL в 2019 она выглядит круче и больше фпс выдает чем на DirectX (она с этимт двумя рендерами).

Вообще нравится эта игруха, как там детали проработаны - например убиваешь монстра он падает и у него открывается огромная челюсть. и это 1998 год. Даже в намного более поздних игр головы монстров это какие-то статические фигуры без анимаций, могут только моргать разе что.

А еще там каждый монстр и игроки дышат грудной клеткой. Все это очень так детально проработано.

В общем классная игруха, прикольно что по сети много людей играют в неё до сих пор, и иногда карты делают новые для неё.

bonta ★★★★★
()
Ответ на: комментарий от deadplace

Нет, q2 не был заточен именно под 3dfx, хотя на Voodoo игра смотрелась по-взрослому.

Deleted
()
Ответ на: комментарий от bonta

А по факту код получается так себе.

Тогда не думали про безопасность и не дрочили на стандарты и UB. Движки были отлажены, работали, делали революции в игровой индустрии, приносили кучу бабла, лицензировались, имели в довесок кучу различных инструментов и редакторов.

Да и не стоит несколько личных мнений на ЛОРе принимать за чистую монету. Например, обзоры кодовой базы Doom 3 от Кармака кричали:

Исключительная красота исходного кода Doom 3.
http://fabiensanglard.net/doom3/interviews.php

А сама игра получилась, мягко говоря, не слишком-то и успешной.

EXL ★★★★★
()
Ответ на: комментарий от a1batross

Извини, значит я тебя неправильно понял. Я посчитал что «для галочки» == «на отвались, и так сойдёт», а там была проделана кропотливая работа, даже в Asm залезли.

EXL ★★★★★
()
Ответ на: комментарий от Deleted

Сейчас стоит задача делать гламурно, делают гламурно.

сейчас редко когда стоит задача кроме как «сделать быстро» и парадигма проектирования «ничего не разрабатывай, ведь все уже написано, просто бери и делай только бизнеслогику»

веллкам в середину 21 века, где какая-нить апа чтобы уровня вордпада вместо 12 мегабайт будет тратить 600, чтобы запусить урезанный браузер, вм, джаваскрипт и т.п.

А еще я недавно гуглил какой-нить прикольный визуальный редактор для mark down.

до 2013 много проектов для десктопа - от питона до Qt, после одни сплошные веб редакторы - аж стошнило. Они конечно норм, но это очень медленно, и нужен интернет.

Сорри, что-то расфлудился :)

bonta ★★★★★
()
Ответ на: комментарий от EXL

Нет, это я сам виноват. :)

Надо будет на досуге сравнить рендереры ку1 и ку2. Вот в ку1 лапши куда больше, мне кажется. Притом в принципе по всему движку.

a1batross ★★★★★
()
Ответ на: комментарий от bonta

И могу сказать что на OpenGL в 2019 она выглядит круче и больше фпс выдает чем на DirectX (она с этимт двумя рендерами).

Я тоже играю в Unreal ’99 и у меня обратная ситуация, поскольку OpenGL в Windows работает отвратно.

Мультиплеер в Unreal классный, но сингл мне вообще не зашёл в то время. Скучно, уныло, коридорно. Единственное что выглядело просто круто – графон, открытые пространства, освещение. В общем, этакий Crysis того времени.

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от EXL

пасяб за ссылки. эх вот бы время со всем этим ознакомиться. интересно.

Например, обзоры кодовой базы Doom 3 от Кармака кричали:
Исключительная красота исходного кода Doom 3
А сама игра получилась, мягко говоря, не слишком-то и успешной.

Мне кажется качество продукта как инженерного изделия и успешность продукта как игры на рынке, особенно в современном мире, могут быть не синхронизированы между собой :)

А мне кстати Doom3 очень прям зашел (Quake 3 по геймплею а Doom по графике, на тот момент у меня 7800GTX была, кайфовал). А вообще я больше фанатею от продуктов от Epic & Unreal Engines

bonta ★★★★★
()
Ответ на: комментарий от EXL

а я как раз на винде и и граю, на 8ке, и вот на моем примере у меня ДиректИкс вообще прям картинка хуже, не знаю как описать - но текстуры какие-то жирные в ней и плавность игры похуже.

Возможно дело в версиях и карточках, у меня не игровая NVidia GeForce210. С анриалом не плохо справляется :)

А под каким ником? Я там ilyalesnoi

bonta ★★★★★
()
Ответ на: комментарий от a1batross

Вот в ку1 лапши куда больше, мне кажется. Притом в принципе по всему движку.

Да, там лапши точно будет больше и всяких MindFuck’ов. Идея Кармака (или не его это была идея?) с разделяемыми либами под разные рендереры в Quake II – топовая. Именно потому сегодня и появляются всякие там порты Quake II под Vulkan, да с RTX’ами. Ведь нужно всего-то написать либу, не прикасаясь к логике.

Но вообще люди тоже хачили рендеринг в Quake, были даже интересные проекты по типу NPRQuake: https://youtu.be/PMpx3pupMKg?t=39

EXL ★★★★★
()
Последнее исправление: EXL (всего исправлений: 1)
Ответ на: комментарий от bonta

Или так, да.

Некогда вёл архивную базу годного софта, потом забросил. А когда (внезапно!) стала нужна лёгккая смотрелка, обнружил, что её больше нет в онлайне. Вместо неё нечто «облачное» с обязательным интернетом.

Не за что извиняться.

Deleted
()
Ответ на: комментарий от EXL

На движке Unreal сделали ещё кучу игр. Вспомнить тот же Undying. Во там эффекты были)

deadplace
() автор топика
Ответ на: комментарий от deadplace

На движке Unreal сделали ещё кучу игр.

Я тебя удивлю, vkquake тоже есть)) И ещё darkplaces.

Я знаю про всё это. Цимес в том, что поддержку новых графических API в Quake II теоретически можно завезти написанием лишь одной dll-ки/so-шки.

EXL ★★★★★
()
Ответ на: комментарий от deadplace

Я когда-то ставил такой эксперимент: брал ванильный исходный код Quake II 3.20 (или 21?) прямо с ftp.idsoftware.com, открывал его в MS Visual Studio (на то время это кажется была 2013), компилировал и на удивление оно компилировалось и Quake запускался. А вот с софтварным рендерером действительно был баг при погружении в воду – крашилось. Уже не помню что тогда помогло, кажется запуск игры в оконном режиме вместо полноэкранного.

EXL ★★★★★
()
Ответ на: комментарий от EXL

Не теоретически, а так и есть. q2rtx — это слегка модифицированный клиент под модифицированную под мультиплеер кваку и свой собственный ref_vkrtx.

a1batross ★★★★★
()
Ответ на: комментарий от EXL

самый ынтерпрайзно причёсанный код (в хорошем смысле слова) что я видел – был у Motorola

В каком проекте? Не могли бы ссылочкой на исходники или просто названием проекта поделиться?

the_real_kinik ★★
()
Ответ на: комментарий от a1batross

Сорцы первого unreal гуляют по сети, со всеми его компонентами. Найдется всё.

xDShot ★★★★★
()
Ответ на: комментарий от EXL

Спасибо, скачал исходные коды для E680. Удивило, что в 2005 году они уже использовали процессоры ARM и ядро Linux. Всегда считал, что до появления первых Android телефонов производители делали каждый свои несовместимые с другими процессоры.

the_real_kinik ★★
()
Ответ на: комментарий от EXL

а я там больше прикалываюсь по режиму «monster hunt», когда сообща на огромной карте нужно бить монстров :)

bonta ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.