doom2gold в разработке

 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
2 KorteZZ: может ты не в курсе но изначально дуум именно таким и планировался, но потом кто-то их отговорил.
 
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
А я продолжаю разбираться с конвертацией карт. Особо выбора у меня нет. Есть сорцы только от d2q и wad2map, но последний строит карту на манер унреала - заполняет всё доступное пространство гигантским брашем и выгрызает там дыры. Понятное дело, я такое не рассматриваю, следовательно остается d2q. Эксперименты показали что не такой уж он и убогий. Есть карты, которые он конвертит без единого битого полигона, тогда как QuakeDM наоборот их продуцирует, еще и небо отрезает. Насчёт неба я вот честно говоря вообще не понял юмора. Несомненным плюсом QuakeDM является то, что он умеет создавать брашевые энтити и расставлять лампочки. в d2q этого нет и мне только предстоит сделать. И с тем и с другим есть определенные проблемы. Я пока не могу точно понять как устроены эти двери и подъемники. По всему выходит что это реальная часть карты, у которой меняется только Z. Но тут я вспомнил что во втором дууме были секретные уровни из первого вольфенштейна, где двери открывались вбок. Значит это тоже работает. Далее. Могу ошибаться, но на том же e1m9 кажется был такой подъемник, на котором стояли подсвечники и вся конструкция ездила вместе. Но может я и ошибаюсь конечно, надо будет перепроверить. Так же пока не очень понятно, как эти двери линкуются к "вещам" - энтитям. Со светом еще печальнее. Свет в дууме посекторный. Там есть стандартный набор лайтстилей, который потом перекочевал в квейк, а оттуда - вообще повезде. Корочи эти лайтстили пошли из первого дуума %) Но освещение, повторюсь посекторное. Это значит, что каждому сектору прописана некая яркость освещения, на которую и умножается текстура. Свет можно включать и выклачать, но простой расстановкой лампочек добиться посекторного освещения не получится. Правда тут вообще под вопросом, надо ли оно, такое освещение.
Как я понимаю в центр сектора ставится лампочка, с радиусом равным размеру сектора. Но для секторов более сложной формы это может давать лишние тени.

[ADDED=Дядя Миша]1543507285[/ADDED]
Приложу ссылку на исходную тему, с которой всё начиналось. Вот. Штобы не думали, что мне мочя в голову на ровном месте ударила. У каждой истории должно быть своё начало.
 
Последнее редактирование:
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
Докопировал код создания карт из d2q. Ну што сказать? Оно пытается строить все браши треугольниками. Т.е. прямоугольная дверь будет состоять из двух таких брашей. То ли по этой причине, то ли еще по какой, но кол-во битых брашей просто зашкаливает. Второй момент касается и QuakeDM тоже - на полигоны неба почему-то постоянно норовит лечь какая-то левая текстура. Вполне вероятно, что это не левая текстура, а какой-нибудь специальный триггер, для ловли ракет и иммитации их полёта в бесконечность, но тут я пока не уверен. К тому же QuakeDM как выяснилось не ставит лампочки в секторах, а вместо этого расставляет их вдоль полигонов неба, иммитируя его подсветку. Ну для халфы, это, понятно не нужно. Еще момент - QuakeDM каждый браш заводит за каждый, видимо в рамках борьбы с ликами, причём это никак не отключить.
Предварительные выводы:
1. там где геометрия параллельна и перпендикуляра девяноста градусам QuakeDM отрабатывает практически идеально. (например e1m1). Там где геометрия более сложной формы, наоборот d2q справляется лучше (например e1m8).
2. Основная проблема d2q почему-то в расстановке стен. Ну я уже говорил, что для дуума стены это один тип объекта, а пол с потолком - другой. Так вот пол и потолок расставляются отлично, а со стенами какие-то проблемы.
3. ни та ни другая тулза не может нормально натянуть текстуры. Пока непонятно с чем это связано, но лажи хватает в обоих случаях. Причём, что любопытно, QuakeDM пытается чота там оффсетить в настройках текстуры, а d2q этого не делает. Ну я подозреваю речь о банальном развороте текстуры "по квейковски" на 270 градусов. Но вообще - странно. Особенно если учесть, что в самом дууме, насколько я понимаю, текстуру наложить с каким-то оффсетом не получится, как легла так и легла. Не говоря уже о каких-то там её поворотах, скейлах и прочем.
Если я не прав, поправьте. Кто-то делал карты под первый дуум?
4. триггеры и двери. У меня есть ужасное подозрение, что дуум принципиально не поддерживает сдвигающиеся двери, там есть какой-то закоменченный код про sliding doors, но он используется только в секретных уровнях вольфенштейна, как я понял. Двери и кнопки собираются в цепочку по полю tag. Там где он одинаковый, там у нас и связь между кнопокй и дверью. Цепочки возможны только простые, где в связке два объекта. активатор - цель. Триггеры тоже имеются, но почему-то называются линиями. Игрок пересекает особую линию с тэгом и идёт сигнал. QuakeDM умеет восстанавливать как двери, так и триггеры. d2q игнорирует и то и другое.
Будем думать. Ну сперва надо мир нормально сохранить.

[ADDED=Дядя Миша]1543527018[/ADDED]
Заглянул в readme d2q. Ну там автор сам во всём сознается
Each sector is grouped with all upper and lower linedefs facing out from the
sector and they are then broken up into convex pieces in a very stupid way.
This code has several fail cases, resulting in pieces of floor/ceiling
missing. You will often see warnings ('Unable to divide into convex
subspaces!'), and some brushes will be invalid. I suggest using Quest
to weld all brushes in the map (where possible). This will usually reduce
the number of brushes to half of what it was before, and makes editing
easier.
Хорошо хоть не incredible stupid, а всего лишь very...
 
Последнее редактирование:
 

GNU/Hurt

Maïté
05.03.2014
1 097
23
38
Награды
0
>наложить с каким-то оффсетом не получится, как легла так и легла
для лайндефов оффсеты есть
 
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
2 xDShot: ну я запамятовал этот момент. Корочи это фундаментальное ограничение дуума. Все двери, все подъемники могут двигаться только по оси Z. Сейчас объясню почему. В той же кваке каждая бмодель имеет своё маленькое персональное дерево, а для трассирования, начало и конец трассы трансформируются в локальное пространство бмодели. В дууме же все двери и подъемники встроены в общее BSP-дерево. Но как мы можем манипулировать частью карты, ведь это поломает дерево? А очень просто. Дерево построено в 2D, оно учитывает лишь X и Y. А подъемник-сектор движется по Z. Таким образом, куда бы он ни уехал, в XY его координаты не поменяются. Вот так всё это и работает.

[ADDED=Дядя Миша]1543579817[/ADDED]
Я пока што пытаюсь понять с чем же мы всё-таки имеем дело. Если бы это было нормальное трёхмерное пространство, я бы уже давно сообразил. Вот скажем linedefs. Што это за линии такие? А это плоскости, но в двухмерном пространстве. Далее - у каждой стенки может быть три текстуры, верхняя, нижняя и средняя. Я это понял, почитав разбор Фабиена, в переводе хабровчан. Но изначально, когда я видел описание этих структур, как вы думаете что мне пришло в голову? Что верхняя текстура это потолок, средняя - стена, а нижняя - пол. Логично жеж? А тут - вона как оно. Так же я скачал Doom Builder, модный какой-то на сишарпе. А у Фабиена скачал исходники idbsp на ObjectiveC. Там в комплекте прилагается e1m1.dwd. Очевидно это формат исходника карты для старого досовского билдера. Но новому он, представьте себе не нужен. Ему подавай сразу готовый вад, и он оттуда грузит карту и показывает её сверху. В лумпах готовой карты (ну точнее в названиях этих лумпах в коде самого дуума), есть комментарии, для чего эти лумпы и откуда они приходят. Так вот там написано, что LINEDEFS и SIDEDEFS приходят из редактора. Я открыл .dwd-файл в блокноте, но обнаружил там только лайндефсы и вещи-энтити. А редактор умеет показывать карту только сверху. Што меня дополнительно напрягло. Для Wolf3D это еще некритично, но для дуума с его перепадами высот уже помоему очень неудобно. А как же текстурировать стены?
Вообщем вот какие мои соображения, по поводу этого всего. Не знаю как действует QuakeDM, но d2q оперирует исключительно в двухмерном пространстве, подбирая три вертекса для описания плоскости уже в самый последний момент - перед записью в map. Мне кажется это неправильный подход.
Во первых надо всю эту загадочную херомантию привести в привычный вид - и плоскостей построить конвексные брашы, по возможности пропустить их через CSG для слияния и только потом уже дампить в карту. Далее определиться какой набор информации выгоднее использовать - просто лайндефсы или дерево тоже. Ну и разобраться с потолком, конечно жы. Если стены, описанные лайндефсами я уже понял, то потолк с визпланесами пока не очень. Там всё очень сильно завязано на скорость отрисовки, оттого и такие замуты. В 1993-м году было актуально.
 
Последнее редактирование:
 

crystallize

Active member
06.06.2014
1 491
20
38
Награды
0
Оффтоп
 
Последнее редактирование:
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
Поковырял немного код idbsp. В принципе - тот же самый алгоритм что и в кваке, но более примитивный, с поправкой на 2д, рассчёты максимально упрощенные и дружелюбные к целочисленной математике. Очень много условий. Забавно что выбор секущей плоскостилинии, осуществляется не из всего набора, а с каким-то интересным условием
Код:
step = (c/40)+1;		// set this to 1 for an exhaustive search
где c = это общее кол-во линий. а step, это шаг, с которым мы их перебираем. Для e1m1 шаг равен 12 линиям. Т.е. сплиттер проверяет каждую 12-ю линию и общего списка. Я сперва предположил, что это сделано ну просто для того, чтобы уменьшить размер дерева, а когда деление прекратится - сделать там лифсектор, однако нет. Тут дальше встречается вот такая забавная штука
Код:
	if (bestv == MAXINT)
	{
		if (step > 1)
		{	// possible to get here with non convex area if BSPSLIDE specials
			// caused rejections
			step = 1;
			goto research;
		}
		node_p->lines_i = lines_i;
		return node_p;
	}
делается дополнительная проверка на оставшемся малом кол-ве линий, чтобы убедиться что наши сектора конвексные.
 
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
Меня дико заломало писать новый алгоритм с нуля, поэтому я решил просто починить оригинальный, чтобы не городить огород. Первичный анализ показал, что автор делает тоже самое, что в сущности сделал бы я - ищет все стороны, принадлежащие сектору, а затем пытается смержить одинаковые вертексы. Дальше он записывает два браша - крышу сектора и пол сектора. Собственно в этой функции и начинается параноя. Там идут какие-то бредовые проверки на конвексность, которые переодически оканчиваются фейлом, хотя, если их проигнорировать и записать эти "неконвексные" брашы в map, то кварк их воспринимает как нормальные. То есть проверка некорректна, какая-то отсебятина. Второй момент еще более интересный - как вам все известно, абсолютно любое неконвексное тело можно разбить на конвексные треугольники. Так вот, спрашивается, за каким же, собственно хреном делать проверки на конвексность, если ты один хрен всё разбиваешь на треугольники (треугольные брашы). Это есть великая загадка для меня на самом деле.

[ADDED=Дядя Миша]1543602172[/ADDED]
К тому же я полагаю, что после обработки BSP, абсолютно все сектора - конвексные. Но это мы еще проверим.

[ADDED=Дядя Миша]1543611153[/ADDED]
Нет, я ошибался. Не все сектора конвексные, бывают сектора сложной формы.
Функция поиска игнорирует разбиение дерева, поэтому возможны сектора любой формы. Например, в виде буквы П.
 
Последнее редактирование:
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
Я рассудил, что вертеть набор планесов, пытаясь сконструировать из них конвексный хулл достаточно нетривиальное занятие, к тому же у меня нет чёткой уверенности что поставленная задача удовлетворяет всем требованиям. Поэтому я решил просто склеить вместе те треугольные брашы, который плодит оригинальный d2q. Это гораздо проще и удобнее, т.к. браши изначально устроены таким образом, чтобы их склейка проходила легко и приятно. Пока что склейка осуществляется на уровне секторов, но результат мне уже очень нравится.
Прикладываю результаты для сравнения (брашы-треугольники vs частично смерженные). Главное отличие от оригинального d2q, то что теперь в уровне не остаётся дыр и нет битых полигонов, как видите. Ну и да, стены из процесса декомпиляции я пока выключил.
 

Вложения

  • 67.3 КБ Просмотров: 22
 

Cybermax

Супер Модератор
Команда форума
11.03.2008
2 746
28
48
Награды
0
Выглядит интересно. Название текстур осталось, это очень важно. Разве что стены не до пола, но я так понимаю, если растянуть, нормально получается.
 
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
Я пошти управился с миром. С новой системой проверки на валидность брашей, в карту теперь мусор не попадает в принципе. Никаких загадочных битых полигонов. Текстуры тоже боле-мене правильно наложил. Осталось разобраться с энтитями и што особенно немаловажно - с брашевыми энтитями.

[ADDED=Дядя Миша]1543925638[/ADDED]
Смотрите какую прикольную штуку я нашол: https://www.moddb.com/mods/bondos-superduper-quake/downloads/quake-presents-wolfenstein-3d
вольфенштейн на базе кваки, который можно запустить под моим враппером кваки :bigsmile:
На самом деле я еще не пробывал, а просто предполагаю што можно.

[ADDED=Дядя Миша]1543925728[/ADDED]
Дело в том, что он рассчитан на запуск под FitzQuake 0.85, который в свою очередь не имеет каких-то там наворотов, свойственных даркплейсу и FTE. Ну раз там работает, знчит и под враппером должен.

[ADDED=Дядя Миша]1543926195[/ADDED]
И вот хотелось бы отметить принципиальную разницу в подходах. Тут внедряешь поддержку этих angled-спрайтов на уровне движка, пишешь компилятор спрайтов, который понимает новый тип, в doom2gold создаёшь специальные скрипты, которые анализируют имена кадров, чтобы расставить их нужном порядке в qc для компиляции этих спрайтов, плюс там часть кадров отражена зеркально. вводишь для этой ситуации ресемплеры, корочи чтобы была вообще полная автоматизация.
Чтобы doom2gold декомпильнул, а потом spritegen пакетно скомпилировал - и вот у нас же полный готовый набор монстриков из дуума. А эти сидят всё вручную делают и на куси написали переключатель кадров angled-фреймов. Я когда всё это вижу, я с ужасом понимаю, что на Unity народ работает примерно в таком же стиле.
 
Последнее редактирование:
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
Меня дико приколол этот Wolf3d под кваку. Но проблема в том, что не сработал как надо. Я запустил его под ксашем и тут же словил Host_InitError. Демки были записаны по протоколу Даркплейса и приводили к остановке. Но остановка на старте игры провоцировала фатальную ошибку. Мелочь, а неприятно. Исправил, запустил снова и увидел что палитру полностью перекорёжило. В этом конечно была моя вина - я ни разу не видел, чтобы квейковские игры использовали кастомную палитру и просто не сделал её подгрузку. Ну не беда, это тоже заняло немного времени. Теперь палитра стала правильной, и я наконец-то смог загрузить стартовую карту. Увы - часть цветов осталась неправильной. Кастомная палитра, а тем более от первого волфа не предполагает светящихся пикселей, это перрогатива исключительно Quake. Я отключил светящиеся пиксели для кастомной палитры и текстуры пришли в норму. Новая напасть - почти на весь экран фиолетовый квадрат. Что это такое? А это наша пушка, сделанная в виде этого самого квадрата, на которую натянута текстура с изображением пушки из вольфа, но есть маленькая проблема - квака официально не поддерживает альфа-пиксели ни на моделях, ни на брашах. Поэтому поверх нее натянули тга-текстуру. На каждую пушку приходится 5-6 таких моделей, по числу кадров. Скины для v_модели квака аналогично не даёт переключать и в QC нет инструментов. Поэтому вот таким "элегантным" способом. Подключил внешнюю tga текстуру, настроил альфа-тест, теперь у нас на экране нормальное оружие. Заходишь в дверь - начинается ругань в консоль про "couldn't delete world. Народ частенько в QC пытается удалить нулевой указатель, а поскольку указатели в QC оперируют только энтитями-объектами, то нулевой указатель это мир. Сделал защиту. Дальше у нас предметы интерьера - светятся. Ну неудивительно, спрайты не испытывают освещения. А тут я гляжу - испытывают, причём выборочно. Конечно в ксаше есть эти механизмы для освещения спрайтов, но как оно узнает? Немного покопался в коде даркплейса - выяснилось что восклицательный знак в имени спрайта даёт такой эффект. Очуметь можно! Ну ладно добавил освещение предметов, стало совсем хорошо. И тут мне голову пришла интересная мысль. Римейк дуума надо делать на базе кувраппера!
То есть мы берём кувраппер, переписываем там меню, переделываем худ, а виртуальную машинку - оставляем. И уже в ней создаём наши различные энтити типо монстриков и дверей. Это гораздо проще и удобнее, чем в крестах писать новые энтити. Да и сам процесс разработки будет вестись путём упрощения уже существующего кода. Таким образом, например вьювер моделей от первокваки несложно переделать во вьювер спрайтов - просто отрезая всё лишнее.

[ADDED=Дядя Миша]1544011316[/ADDED]
И я еще думаю, это будет неплохим примером, как заточить кувраппер под свои нужды.
 
Последнее редактирование:
 

Cybermax

Супер Модератор
Команда форума
11.03.2008
2 746
28
48
Награды
0
Интересное повествование, в очередной раз убеждаюсь, что разработка игр увлекательное занятие с нетривиальными задачами.
И про дум ремейк на куврапере теперь кажется вполне логичным.
 
 

Ku2zoff

Member
12.08.2010
314
6
18
Награды
0
28
А что, ябпоиграл в вольф и спир оф дестини под ксашем. Вольф проходил полностью на самом харде. А вот спир не проходил.
 
 
Команда форума
28.03.2010
15 384
242
63
Награды
0
Кубань
2 crystallize: ну да, я потом уже это понял. Но привязка не оч. сильная.