Sidebar

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

  • Наступило лето и у нас стартовал конкурс с призовым фондом в $120!
    "De-Make It!" Summer Contest.

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
24
18
Награды
0
Дядя Миша сказал(а):
А эти сидят всё вручную делают и на куси написали переключатель кадров angled-фреймов.
После описанных тобой приключений призадумаешься, а не лучше ли вручную на куси.
 
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
2 nemyax: ну кто на што учился. Я привык решать задачи на самом фундаментальном уровне. В вольфе-то ладно, там три-четыре монстрика и всё.
А в дууме всякие снаряды есть, они тоже направление взгляда учитывают. И вот так чем дальше тем больше всякого.
 

nemyax

тндайпц тра
Команда форума
Модератор
30.07.2015
643
24
18
Награды
0
Дядя Миша сказал(а):
кто на што учился
Именно. Много ли народу пишет движки? В том смысле, что не просто пишут, а таки дописывают.
И сколько народу лячкает куси.
 
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Ну што же, wolf3d теперь полноценно поддерживается кувраппером :drink:
Можно вернуться к декомпилятору.

[ADDED=Дядя Миша]1544037713[/ADDED]
И к слову, там прямо в моде приложили оригинальный вольф, он до сих пор прекрасно работает. Ну я попробовал его запустить - у меня чуть глаза не вытекли и голова заболела. Каша пикселей, всё дергается, двигается, ужас. Как народ в это играл. В дууме уже нет такого эффекта, к слову.

[ADDED=Дядя Миша]1544043818[/ADDED]
Текущий результат декомпиляции выглядит так. Это уже со стенами.
 

Вложения

  • 40.5 КБ Просмотров: 20
Последнее редактирование:
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Я отказался от оригинального метода d2q и сделал нечто близкое тому, что вы можете наблюдать в qdm. Подробности распишу завтра, а пока можете оценить результат и сравнить с верхним. Обратите внимание что стен пока нет, стены можно по желанию выключать из процесса декомпиляции.
 

Вложения

  • 25.5 КБ Просмотров: 11
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Итак, что было и, чего я хотел и что в итоге получилось. Как вам известно, декомпиляторов карт первого дуума существует немного, а относительно рабочих - и того меньшы. Я помнится даже делал на них обзор в своё время. QuakeDM (qdm11) - наилучший результат и совершенно дебильное имя для проекта, из-за которого его постоянно путаешь с дефматчем при поиске. Дальше идёт d2q, который я и взял за основу. В отличие от QDM, который использует дерево для построения брашей, эта утилита пытается просто найти все полигоны (линии в терминологии дуума), принадлежащие одному сектору. В этом славном начинании ей препятствует тот факт, что во первых далеко не все эти линии являются частью геометрии, некоторые из них могут быть триггерами или секущими плоскостями BSP, некоторые могут быть развернутыми на 180 градусов, итак далее. Но в целом она довольно неплохо их находит. А дальше начинается самое интересное. Вот у нас есть каша из полигонов. Из этой каши надо построить конвексные брашы. Задача несколько упрощается осознанием того факта, что обсалютно все эти полигоны имеют в normal.z == 0. Видимо на базе этого и построен алгоритм. Вычисляется угол полигона, соседнего и так далее по кругу, пока общий угол не превысит 360 градусов :)

[обзатс по просьбам трудящихся]
Как вы наверное догадались, вот этот угол в 360 градусов нам во первых никоим образом не гарантирует, что браш будет замкнутый, и что он будет выпуклый, причём первое логично вытекает из второго. Но поскольку браши строятся из плоскостей, которые бесконечно, вероятность того, что выпуклое тело всё же будет создано - неплохая. А чтобы уж наверняка - автор каждый такой набор разбивает на треугольники, которые всегда выпуклые. Тем не менее, несмотря на все предосторожности, в карте постоянно наличествуют битые полигоны, а треугольные брашы мерзко выглядят. К тому же там присутствует какой-то объеденитель похожих сторон, который периодически продуцирует пересекающиеся брашы. Я его отключил, браши перестали пересекаться и... озеро с кислотой на E1M1 спряталось под землю :) Я понял что этот алгоритм мне совершенно не подходит, хотя я поначалу и пытался работать именно с ним и первые результаты декомпила, которые я выкладывал относились именно к нему. Там я просто склеивал конвексные брашы друг с другом, пока из треугольников не вырастали более сложные, но по прежнему конвексные формы. Впрочем это далеко не везде помогало.

[обзатс по просьбам трудящихся]
Третья утилита для декомпиляции карт дуума это wad2map (есть еще doom2brush, но она не заслуживается внимания, я не буду её здесь рассматривать), с исходниками. Собственно в рамках этих трёх утилит и производился выбор. QuakeDm даёт отличную геометрию, но сорцев от нее нет. Про d2q написал абзацем выше (по просьбам трудящихся). wad2map несёт в себе грамотный подход, который превращается в полный кошмар. Автор действует на манер маппинга в унреале - создаёт гигантский браш размером с карту и начинает выгрызать в ём дыры секущими плоскостями нод. А потом догрызает оставшимися плоскостями из субсекторов. При таком подходе он даже не заморачивается над тем, чтобы текстурировать геометрию. Ну и кол-во брашей тоже зашкаливает, сами понимаете. Это самый дебильный способ декомпиляции на мой взгляд. Кстати под халфу декомпиляторы тоже такое проктикуют.

[обзатс по просьбам трудящихся]
Очевидно я стал перед выбором - как сделать нормальную декомпиляцию и при этом не превратить уровень в то, что что её превращает wad2map. Но как это сделать? Напомню от QDM я сорцы так и не нашёл (но мне уже и не надо). Мои собственные попытки найти все принадлежащие сектору стороны и построить из них конвексную геометрию оказались даже хуже того шаманства которым занимались в d2q. Я понял, что это вообще не выход. Но проблема была еще и в том, что я не хотел вникать задачу по максимуму, люди они же вообще ленивые. Ну ок, думал я вот тут секторы какие-та, вот сабсекторы, вот сегменты, вот линии, да фиг с ними, берём это и это, ага, ну вроде получилось чёт. Но когда вариантов не осталось, я решил разобраться в этом как следует. Естественно путём штудирования исходников Doom. Ну не Фабиена же читать в самом деле =)
Впрочем от него тоже была польза - он где-то нашёл сорцы doombsp, которые мне очень помогли. Теперь, внимательно изучив исходники я понял следующее:

[обзатс по просьбам трудящихся]
Оригинальные части карты сохраняются в линиях и сторонах. Я хрен знает как с ними управляется дуум эдитор, но мне это и не важно. Важно другое. Линии и стороны образуют сектора. Сектор может быть вогнутым или выпуклым, это никак не контролируется. Он может быть размером с полкарты, а может и единственным брашем (после конвертации конечно). Главная и отличительная черта сектора - высота. При этом допускаются вложенные секторы (ну я их так называю). На e1m1 помните зал со свисающими с потолка колоннами с текстурами компов? Надеюсь все помнят, хотя колонны и не витые. А под колоннами - пятна света. Каждая колонна - это отдельный сектор. В дууме посекторное освещение, поэтому они дают типо пятна света. В связи с этим вспоминается как наш Бумка делал брашевые тени. Так что порой у самого идиотского занятия есть реальный прототип, в те далёкие времена, когда людям было не до смеха.

[ADDED=Дядя Миша]1544352927[/ADDED]
[обзатс по просьбам трудящихся]
Но мы немного отвлеклись. И так у нас есть эти сектора, но они не конвексные. Точнее говоря они не только лишь конвексные. То есть можно начать конвертировать на той же e1m1 первые сектора и это будут маленькие прямоугольные брашы. А потом хренак - 58-й сектор, это весь вышеупомянутый зал. Ну то есть как в школу ходишь, а потом бац и вторая смена. Штожы делать? Еще немного поизучав исходники, я понял что сабсекторы - это секторы нарезанные бсп на конвексные секторы. Такое мне подходило гораздо лучше и я возрадовался. Значит эти секторы, думал я, это практически наши лифы. Лифы-то конвексные. Щас я с этих секторов просто возьму все сегменты, построю с них конвексные брашы и вася, так сказать, кот.

[обзатс по просьбам трудящихся]
Правда тут меня посетили сомнения. Беглый анализ сабсекторов показал, что кол-во плоскостей в них далеко не всегда равно даже трём. Встречаются с двумя и даже с одной плоскостью. Я подумал, что одна плоскость это наверное эти решётки, решил проверить, но нет - ничего подобного. Тогда я решил на них пока забить и попытаться сконвертить те сабсектора, в которых было три и более полигона. Но здесь, увы и ах, получилось ровно тоже самое, что и безо всяких сабсекторов (ну может чуть получше). Простые маленькие сектора конвертировались наотличненько, а здоровые, в лучшем случае оставляли 3-4 браша из 26. Я до последнего не хотел связываться с BSP деревом, еще и потому, что у Кармака там всё тоже как-то повернуто на 90 градусов и мне казалось, что дерево работает как-то неправильно.

[обзатс по просьбам трудящихся]
К тому же, бинарное деление пространства предназначено для эффективного поиска геометрии по заданным координатам в мировом пространстве, а какие могут быть координаты у сабсектора из одной-двух линий? Я даже его ббокс не смогу посчитать вот по этой причине. Для сектора посчитать оригин несложно, этим же занимается и сам Doom (типо звуковой оригин, я хз что это). Но когда я вводил на вход дерева эти координаты, оно мне далеко не всегда выдавало поиском именно нужный сектор. Может это происходило по вышеописанным причинам, когда внутри невыпуклого сектора претоился еще один и как раз по его условному центру. А может потому что я неправильно по нему бегал или плоскости неправильно трансформировал. Корочи я не стал разбираться со всем этим дерьмом, да и если честно оно бы мне ну никак не помогло.

[обзатс по просьбам трудящихся]
Штожы делать? Я рассудил, што мы можем в линейном поиске перебрать всё дерево и найти номер нужного сабсектора. Это тем более легко сделать, что Кармак сохранил дерево "наоборот" - т.е. узлы с лифами в начале массива, а корневая нода - в самом конце. Далее, когда мы нашли ноду, один из детей которой ведёт на наш лиф, мы её сохраняем в специальный стёк для нод, перезапускаем поиск и ищем теперь уже ноду, номер одной из детей которой ведет на только что найденную. И так, пока не упрёмся в корневую. Найденные ноды (и што немаловажно - стороны), набиваются в вышеупомянутый стек и потом используются при построении браша. Сами ноды не нужны, нужны только их секущие и сторона, чтобы развернуть плоскость правильно. Там где сабсектора самодостаточные - секущие ноды ничего не затрагивают. А там, где они состоят из одной-двух-трёх линий, эти секущие становятся частями браша. Подобный подход даёт самые оптимальные результаты, брашы "как в оригинале", тупой реверсивный поиск по дереву практически не тормозит. т.к. нодов весьма немного (шутк 200-300), но можно конечно им родителей сделать и будет еще быстрее. Одна только проблема - поскольку у секущих ноды нет текстуры, я вполне естественно назначил им NULL. И вот они посекли так, что почти у всех брашей стали текстуры "NULL" :) Но это конечно небольшая проблема - найти соответствующую сторону, можно сравнивая планесы и дистанции сабсекторов. Поскольку в сабсекторе их ограниченное кол-во (1-12 штук), то поиск весьма быстр.

[ADDED=Дядя Миша]1544354269[/ADDED]
[обзатс по просьбам трудящихся]
Результаты такого подхода я выложил постом выше. Эти брашы еще можно пропустить через оптимизатор, но КМК он мало что сможет сделать. Следующий этап - это создание стен. Тут надо сделать лирическое отступление. В дууме каждый сектор имеет две текстуры. Одна для пола, а другая для потолка. Ну это вы все знаете. На одной высоте возможна только одна текстура. Поменялась высота (а значит и сектор), можно наложить другую. Так же по высоте сектора состоят из трёх частей. Верхушка, серединка и пол. У каждого сектора задана высота потолка и высота пола. На первый взгляд может показаться что это изыбточная информация, но тут не всё так просто. Дело в том, что нижние части секторов могут выступать, по отношению к остальным. Ну например на E1M1 так лестница сделана. По бокам её текстуры - вот как раз нижние. Верхние части секторов ступенек надёжно упрятаны в потолок из-за чего создаётся впечатление по настоящему трехмерного пространства. Но на самом деле каждая ступенька - это просто сектор со своей высотой. В случае с уже упомянутыми колоннами, свисающими с потолка - там наоборот затекстурирована верхняя часть сектора, а нижняя - утоплена в пол и её не видно игроку. Некоторые сектора могут иметь совпадающую высоту потолка и пола, тогда они смыкаются и образуют непрерывную конструкцию. По идее так устроены двери или всяческие лифты-подъемники, но тут боюсь соврать. Скажу позже, когда займусь энтитями.
Средняя текстура, накладывается, как вы уже догадались - на видимые стены. Правда в этом моменте я пока что тоже не очень разобрался. Я предположил, что на секторах которые проходимы насквозь нет никакой средней текстуры (в дууме вместо имени текстуры там чёрточка). Но когда я решил это проверить, у меня вся карта оказалась заполнена брашами. Т.е. этот метод не работает. К тому жы чёрточка вместо имени текстуры на верхней или нижней части сектора, обозначает всего лишь то, что текстуру надо взять с потолка или пола этого сектора. А для средней части всё иначе. У меня конечно есть генерация стен от d2q, которая тожы там чота ищет, путём нахождения тотального угла в 360 градусов :) Но уже будем всё своё писать, с грамотным подходом.

[ADDED=Дядя Миша]1544361068[/ADDED]
А я продолжаю разбираться со стенами. Я рассудил, что раз уж стены вертикальные, то BSP их необрабатывает в принципе - они и так всегда на ноде. Следовательно попасть в конвексные сабсектора стены не могут - ведь в редакторе карт никаких сабсекторов нет, они появляются только после компиляции. Значит стены могут быть только по краям секторов. Плоскости, напоминаю, общие для средних, нижних и верхних граней. Но для средних наличие прохода или стены определяется именем текстуры. Но и не только. Прежде чем начать строить стены, я решил сдампить всю информацию по линиям из секторов в лог и почитать. Привожу наиболее интересные куски.
sector 0
line #0, side BROWN144, backside -
line #1, side BROWN144, backside -
line #2, side -, backside -
line #3, side -, backside - backsector 19
Стена, стена, пустота, линк к сектору 19. Обращаю ваше внимание, что у меня doom.wad какой-то очень древний и на нём нет дополнительного секрета в зале с импом. А там как вы помните, можно было вывалиться из иллюзорной стены. Полагаю, если бы секретка была, то один из проходов в баксектор был бы текстурированным. Т.е. одновременно и проход и иллюзорная стена. Но это пока просто моё предположение. Но в моей карты все стены ведущие в другой сектор помечены именно как "-". Бывает ли так, чтобы бэксайд был валидным? Да, бывает, это у нас решётки (которые сцука ни один из вышеописанных декомпиляторов не дампит в карту).
line #7, side BROWNGRN, backside -
line #8, side {BRNBIGL, backside {BRNBIGL
line #9, side {BRNBIGC, backside {BRNBIGC
line #10, side {BRNBIGR, backside {BRNBIGR
line #11, side {BRNBIGR, backside {BRNBIGR
line #12, side {BRNBIGL, backside {BRNBIGL
line #13, side {BRNBIGC, backside {BRNBIGC
line #14, side -, backside - special 36, tag 1 backsector 21
line #15, side -, backside - backsector 10
line #16, side -, backside - backsector 10
line #17, side -, backside - backsector 10
как видите, у нас тут решётка с обоих сторон, а вот баксектора нет. Т.е. пройти невозможно. Обратите внимание на линюю без текстур, но с номером special 36. Это триггер, который опускает платформу, на которой стоял имп. Чтобы можно было вернуться за драбавиком и открыть секрет. Да, в дууме триггеры - это такие же BSP-плоскости.
вот еще
line #2, side STARTAN1, backside -
line #3, side STARTAN1, backside -
line #4, side +0SWSTRTN, backside - special 11, tag 0
line #5, side STARTAN1, backside -
line #6, side STARTAN1, backside -
Ну вы уже догадались, что это кнопка подмечена как special 11 :)
Ну вот в принципе и всё. У стен (если это не решётки), нет ни боковушек ни задней стороны. Но, как вы понимаете это элементарно достроить, зная лишь одну плоскость и выбрав подходящюю толщину стен :)
Думаю их генерация не займет много времени.
 
Последнее редактирование:

Gaia

Чёрный вертолёт
Спонсор
04.08.2008
4 598
101
63
Награды
0
31
Мамочки... :shock:

2 Дядя Миша:
Хз конечно, может уже видел этот проект, но возможно поможет в дальнейшем развитии. https://github.com/m-x-d/GZDoom-Builder однако сишарп
 
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
2 Gaia: ну чо мамочки, я жы спецом на обзатсы разбил

[ADDED=Дядя Миша]1544367365[/ADDED]
Кстате. В связи с последними событиями я сообразил как сделать декомпилятор карт для халфы, чтобы он восстанавливал геометрию и текстуринг, ну если не 1 в 1, то весьма близко к тому. Но мне такое неинтересно.
 
Последнее редактирование:

crystallize

Active member
06.06.2014
1 504
21
38
Награды
0
До недавнего времени самым лучшим декомпилятором был как раз winbspc который выгрызает пустое место из цельного браша, подобно Анрилу.
Сколько там тебе донатить на декомпилятор для голда, ещё и с поддержкой BSP31/32 ?
 

Ku2zoff

Member
12.08.2010
315
6
18
Награды
0
28
Дядя Миша сказал(а):
Кстате. В связи с последними событиями я сообразил как сделать декомпилятор карт для халфы, чтобы он восстанавливал геометрию и текстуринг, ну если не 1 в 1, то весьма близко к тому. Но мне такое неинтересно.
Нда. Хоть в 2018 году кто-то сможет сделать норм декомпилятор для голдсорса. Если задонатят. Где мапперы?
 
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Хым. Текстуринг могу обещать 100% что ничего не не поедет. Брашы восстановятся не оригинальные, но без мусора и весьма похожие на созданные вручную. Т.е. результат такой декомпиляции скорее всего можно будет сразу скомпилить обратно.
Если вас эта тема волнует, то создадим опрос попозже.

[ADDED=Дядя Миша]1544376610[/ADDED]
Создал стены, в том числе и решотки. Проблем не возникло. Но надо подогнать боковинки стен, чёб они не просвечивали друг сквозь друга.

[ADDED=Дядя Миша]1544381010[/ADDED]
Боковинки подогнал, можете заценить результат.
Похоже на ручную работу?
 

Вложения

  • 19 КБ Просмотров: 13
Последнее редактирование:
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Вадник. Тут оказывается я неправильно с этими секторами действовал.
Главным определителем является вот именно что наличие имени текстуры или "-" как отсутствие. Это меня d2q запутал.

[ADDED=Дядя Миша]1544390786[/ADDED]
Решил затестить новый алгоритм на разных картах. Прикладываю выхлоп.
Что еще надо будет сделать:
1. правильно определить высоту каждого сектора. Для этого надо учитывать соседей.
2. текстурирование по высоте (завязано на высоту секторов кстати). Если всё сделать правильно, то все текстуры лягут как в игре.
3. затычки над и под муверами, в зависимости от того, куда они движутся.
4. щели и битые полигоны (тут уже виноваты наши любимые эпсилоны). Наверное надо планесы перевести в даблы.
5. Найти все брашые энтити и корректно настроить связи между ними
6. сдампить точечные энтити и дать им класснеймы.
7. сохранить посекторное освещение (у меня есть оригинальная идея, как его замутить, не трогая движок, но подробностей пока не раскрываю :) ).
 

Вложения

Последнее редактирование:

Ku2zoff

Member
12.08.2010
315
6
18
Награды
0
28
Дядя Миша сказал(а):
Если вас эта тема волнует, то создадим опрос попозже.
Конечно волнует. Представь, сколько времени смогут экономить мапперы, работая над римейками карт, для которых нет исходников. И префабы не надо будет искать по всему интернету. В конце концов, тем, кто делает моды будет проще вставить в свой мод кусок чужой карты или даже целую карту в качестве отсылки к другому проекту или в качестве пересечения сюжетов. Откровенное присваивание чужих работ я не одобряю, но с удовольствием позаимствовал бы множество префабов и примеров геометрии. И да, на хорошем декомпиле проще разобраться в устройстве той или иной скриптовой конструкции.
 

DrTressi

Хрустик
06.03.2010
6 388
80
48
Награды
1
25
На белом свете
  • Журналист
2 Ku2zoff: А что там сильно сложно что-ли? По сути проанализировать соседние патчи, посмотреть, чтобы у них был одинаковый материал и координаты развёртки. И если эти оба условия выполняются, то объединить их в один.
 

Qwertyus

Well-known member
13.08.2009
1 363
26
48
Награды
1
  • Xash медаль
2 Дядя Миша:
Те огрызки брашей, которые получаются после декомпиляции.
 
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Да там не огрызки, там вполне себе конвексные брашы остаются в карте. Если браш огрызок - он уже не конвексный, а если он неконвексный - то какой же это браш :)

[ADDED=Дядя Миша]1544448599[/ADDED]
Што хотелось бы отметить. На начальных этапах разработки я больше сверялся с уже существующими декомпиляторами карт - wad2map, d2q. На текущем этапе для меня остался единственный источник информации - сорцы самого дуума :)
Там весьма дебильная система энтить - по номерам. Каждый номер соответствует какой-нибудь энтите. Причём в этот номер еще и включены её настройки.
Ну скажем номера 1, 26, 27, 28 - это изначально закрытые двери, причём 26 - это красный ключ, 27 - синий ключ, 28 - жолтый ключ. Ну типа такого. А вот 31, 32, 33 и 34 - тоже самое, но двери изначально открытые. Дико неудобно.
Причём сам дуум активно меняет информацию в карте во время игры. То есть он технически может превратить дверь в неподвижную стену, но с текущими параметрами высоты. И все эти двери и кнопки - часть карты, это не отдельные брашевые энтити. Это больше всего доставляет проблем, когда я начну их отделять - они заликуют. Придётся ставить затычки.
 
Последнее редактирование:
Команда форума
VIP
28.03.2010
15 328
252
83
Награды
4
Кубань
  • Золотая медаль 215
  • Серебряная медаль 214
  • Золотая медаль 221
  • Cat
Doom весьма вольно обращается с данными уровня - постоянно там что-то меняет, ставит флаги, убирает. Я заинтерисовался, а как же это сохраняется в сейв? Ну корочи сектора и линии пишутся в сейв. Брутальный подход.
 

Донат - Операционные расходы

Итого
1 120.00 $
Цель
1 300.00 $
Донат завершается:

Доноры Красавчики

Новые сообщения

Пользователи онлайн

Нет пользователей онлайн.