IPB

Добро пожаловать, гость ( Вход | Регистрация )

 
Reply to this topicStart new topic
> Scorcher, Извлечение и распаковка всего-всего, наконец-то
hidefromkgb
Nov 22 2020, 01:40
Сообщение #1


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



Доброго времени всем!

После чёрт знает скольки лет простоя снова вернулся к форматам ресурсов из Scorcher.

Стараниями -=CHE@TER=- и меня любимого, текстуры (всех трёх разных форматов) и звуки уже на сайте есть.
Остался единственный формат: 3D-модели в .WL3 — но явно не в том .WL3 что «Wolfenstein 3D Registration Data», который отгугливается, т.к. это вообще не 3D формат.

В общем, пишу здесь потому что .WL3 в кои веки начал поддаваться разборке.
То ли опыта в 3D я за эти годы накопил, то ли просто надо мной уже не висит диплом и поиск работы.

Представляю вашему вниманию загрузчик .WL3 файлов, wcn (чтоб не ломать традицию из rcn, fcn, 0cn и bcn).

Пока что работает корректно только на Linux (хотя для винды и мака там есть весь код кроме непосредственно взятия имени файла из аргументов запуска, т.ч. правка займёт строк десять от силы), и загружать умеет только многоугольники.
С текстурами пока что разобрался лишь частично — знаю где лежат текстурные координаты, но где сами идентификаторы текстур, я ещё не в курсе.

Запускать так: wcn-gtk /путь/до/файла.wl3
При этом откроется OpenGL окно, в котором можно побродить по модельке.

На скриншоте под спойлером, например, самая сложная из трасс в игре, шестая
.

Консольная выдача при запуске — это цветовая разметка для шестнадцатиричного редактора wxHexEditor
, которым пользуюсь для анализа.


Спасибо сказали:
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 22 2020, 09:32
Сообщение #2


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,293
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 300 раз(а)



Ура-а-а! Столько лет спустя ты наконец-то решил на форуме написать. (*улыбается*)

QUOTE(hidefromkgb @ Nov 22 2020, 01:40) *
В общем, пишу здесь потому что .WL3 в кои веки начал поддаваться разборке.
То ли опыта в 3D я за эти годы накопил, то ли просто надо мной уже не висит диплом и поиск работы.
Рад, что у тебя всё наладилось и даже время на хобби появилось!

QUOTE(hidefromkgb @ Nov 22 2020, 01:40) *
Пока что работает корректно только на Linux (хотя для винды и мака там есть весь код кроме непосредственно взятия имени файла из аргументов запуска, т.ч. правка займёт строк десять от силы), и загружать умеет только многоугольники.
Я честно попытался собрать под Windows, но ты забыл выложить исходные коды к:
core/ogl_load/
core/vec_math/
Эти каталоги на GitHub пустые из-за чего ничего не собирается.

QUOTE(hidefromkgb @ Nov 22 2020, 01:40) *
С текстурами пока что разобрался лишь частично — знаю где лежат текстурные координаты, но где сами идентификаторы текстур, я ещё не в курсе.
Ты в IDA код смотришь? Дебажные символы от Watcom с именами функций, классов, методов и глобальных переменных подключал?

По поводу имени файла:
CODE
#include <windows.h>

BOOL MyGetOpenFileName(HWND wnd, TCHAR *mask, TCHAR *name, DWORD size) {
OPENFILENAME ofn;
  ZeroMemory(name, size * sizeof(name[0]));
  ZeroMemory(&ofn, sizeof(ofn));
  ofn.lStructSize = sizeof(ofn);
  ofn.hwndOwner = wnd;
  ofn.nMaxFile = size;
  ofn.lpstrFile = name;
  ofn.lpstrFilter = mask;
  ofn.lpstrInitialDir = TEXT(".");
  ofn.Flags = OFN_HIDEREADONLY | OFN_PATHMUSTEXIST | OFN_PATHMUSTEXIST;
  return(GetOpenFileName(&ofn));
}

int main(void) {
TCHAR name[MAX_PATH];
  if (MyGetOpenFileName(0, TEXT("Sorcher world layout 3 (*.wl3)\0*.wl3\0All files\0*.*\0\0"), name, MAX_PATH)) {
    MessageBox(0, name, NULL, MB_OK);
  }
  return(0);
}
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
hidefromkgb
Nov 22 2020, 10:01
Сообщение #3


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



QUOTE(-=CHE@TER=- @ Nov 22 2020, 10:32) *
Я честно попытался собрать под Windows, но ты забыл выложить исходные коды к:
core/ogl_load/
core/vec_math/
Эти каталоги на GitHub пустые из-за чего ничего не собирается.
Не, всё верно. Это подмодули, чтобы они инициализировались следует выкачивать проект с помощью git clone --recursive — а скачать с гитхаба архивом не получится вообще; уже сто раз им заводили багрепорт на этот счёт, но никто даже не чешется.
В самом крайнем случае можно подложить их вручную вот отсюда.

QUOTE(-=CHE@TER=- @ Nov 22 2020, 10:32) *
Ты в IDA код смотришь? Дебажные символы от Watcom с именами функций, классов, методов и глобальных переменных подключал?
Нет, код я смотрю в X64DBG, и для него за пару часов настропалил самопальный импортёр ваткомовских символов.
В Ольге я бы так не смог, а тут просто изумительный в своей простоте и мощности скриптовый движок.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 22 2020, 14:13
Сообщение #4


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,293
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 300 раз(а)



QUOTE(hidefromkgb @ Nov 22 2020, 10:01) *
Не, всё верно. Это подмодули, чтобы они инициализировались следует выкачивать проект с помощью git clone --recursive — а скачать с гитхаба архивом не получится вообще; уже сто раз им заводили багрепорт на этот счёт, но никто даже не чешется.
Ого! Не знал, что там всё так основательно поломали.

Всё, за что Microsoft берётся, то превращается в оно.
А если за оно берётся, то просто тратит меньше сил.


QUOTE(hidefromkgb @ Nov 22 2020, 10:01) *
Нет, код я смотрю в X64DBG, и для него за пару часов настропалил самопальный импортёр ваткомовских символов.
В Ольге я бы так не смог, а тут просто изумительный в своей простоте и мощности скриптовый движок.
У нас, кстати, тут как раз тема по работе с отладчиками есть, где я про x64dbg писал.

Подкинул файлы и собрал проект. По щеке пробежала скупая мужская слеза, ибо собралось без ошибок и предупреждений даже на моём старом компиляторе. Эх, не умеют сейчас так писать. Респект за это! Про всякие отсутствующие в моих заголовочных файлах функции типа SendInput() я ничего писать не буду, потому что у меня компилятор и заголовочные файлы старые, так что я это "за кадром" победил и описывать не буду.
Запустил, оно сказало что не смогло загрузить файл и вышло. Не понял в чём прикол, стал отлаживаться и, опа:
CODE
if ((file = open(name, O_RDONLY)) > 0) {

Ты забыл O_BINARY флаг добавить - не на всех системах по умолчанию бинарный режим. На некоторых (как в Windows) он по умолчанию текстовый. Из-за чего файл, понятное дело, читается как попало. Хорошая практика - это явно указывать режим открытия файла.

Короче, поправил это и ещё раз перекомпилял.
Запустил, оно долго плевало в консоль .XML, затем выдало:
QUOTE
ERROR: can`t load 'glCreateProgram*'!
ERROR: can`t load 'glCreateShader*'!
Shader error!
Shader allocation failed

ERROR: can`t load 'glDeleteProgram*'!
ERROR: can`t load 'glUseProgram*'!
ERROR: can`t load 'glDeleteProgram*'!
ERROR: can`t load 'glGenerateMipmap*'!
Ибо, шейдеров у меня нет, а ты там что-то уж очень навороченное использовал, чего на моей старой видеокарте нет (хотя Quake III в OpenGL вполне себе спокойно чувствует). Так что, увы, окно было чёрным и ничего на нём не рисовалось.

Если надо, я могу тебе простенький OpenGL проект дать с генерацией 3D карты с текстурами - уже не помню откуда когда-то качал. Смысл в том, что он у меня собирается из исходных кодов и работает.
Ладно, выложил исходники OpenGL, которые у меня точно работают, в соседней теме.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
hidefromkgb
Nov 22 2020, 23:28
Сообщение #5


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



QUOTE(-=CHE@TER=- @ Nov 22 2020, 15:13) *
Ты забыл O_BINARY флаг добавить - не на всех системах по умолчанию бинарный режим. На некоторых (как в Windows) он по умолчанию текстовый. Из-за чего файл, понятное дело, читается как попало. Хорошая практика - это явно указывать режим открытия файла.
Аргх. Винда…
И вот ведь была же у меня проверенная функция чтения файла, но тогда бы пришлось их по фронтендам раскидывать, а мне было лень =(
В релизной версии поправлю конечно.

QUOTE(-=CHE@TER=- @ Nov 22 2020, 15:13) *
Ибо, шейдеров у меня нет, а ты там что-то уж очень навороченное использовал, чего на моей старой видеокарте нет (хотя Quake III в OpenGL вполне себе спокойно чувствует). Так что, увы, окно было чёрным и ничего на нём не рисовалось.
Ох, а вот тут ты меня врасплох застал. Как-то я не предполагал, что сейчас есть машины на которых нет OpenGL 2.0, когда даже мобильники уже начали поддерживать GL 3.x… Ну хорошо, а хотя бы вот это работает ли?
В принципе да, шейдеры здесь особо не нужны, в конце концов модельки загружаются из игры 1995 года, просто у меня была готовая болванка для кроссплатформенной GL программы, с неё и делал.
И теперь мне безумно интересно, что там у тебя за зверь-машина =) Потому как чуйка мне усиленно подсказывает, что там явно не GeForce MX440, а что-то более современное, просто без необходимых драйверов.

…И то, на MX440 шейдеры всё-таки были, просто заточены были сугубо под DirectX, писались на ассемблере схожем с ARBVP1.0 / ARBFP1.0, и назывались Direct3D Hardware Transform & Light.
OpenGL дрова с поддержкой этой всей красоты для MX440 появились дай боже в 2006 году. Я почему знаю — у меня до 2008 года домашняя машина работала на ней родимой.

В принципе, могу использовать и ARB[VF]P1.0, у NVidia есть даже утилиты для трансляции в него шейдеров на GLSL. Но опять же, мне для этого важно знать модель видяхи.
Если там у тебя какая-нибудь настоящая (старше MX440) древность, то только фиксированный конвейер — хотя возвращаться к нему и вручную натыкивать трансформации через glPushMatrix() / glPopMatrix() очень бы не хотелось.

P.S.: как-то плотность ссылок на квадратный сантиметр комментария потихоньку начинает зашкаливать. Я не спамер, просто подкрепляю слова пруфлинками.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 23 2020, 13:09
Сообщение #6


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,293
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 300 раз(а)



QUOTE(hidefromkgb @ Nov 22 2020, 23:28) *
Ну хорошо, а хотя бы вот это работает ли?
Работает, правда выдаёт 0 или 1 FPS, но я вижу горы где-то вдали в тумане и какой-то прямоугольник сверху с красной вертикальной фигнёй.
Кстати, ты исходные коды OpenGL, ссылку на которые я дал в прошлом сообщении, не смотрел?

QUOTE(hidefromkgb @ Nov 22 2020, 23:28) *
И теперь мне безумно интересно, что там у тебя за зверь-машина =) Потому как чуйка мне усиленно подсказывает, что там явно не GeForce MX440, а что-то более современное, просто без необходимых драйверов.
Драйвера, может не последние, но я долго подбирал, чтобы как можно большая часть старых игр более или менее сносно работали.
nVIDIA Riva TNT2 Model 64 (32 Mb)
Мой рабочий компьютер покупался в 2002 году, с тех пор я только жёсткие диски увеличил, монитор (старый приказал долго жить) и добавил 256 Mb памяти (в материнке всего два слота под память) - теперь у меня 386 Mb. А, ну и ещё, два года назад транзисторы на материнке полопались, так что перепаивать пришлось. В остальном - всё работает без нареканий.

QUOTE(hidefromkgb @ Nov 22 2020, 23:28) *
Если там у тебя какая-нибудь настоящая (старше MX440) древность, то только фиксированный конвейер — хотя возвращаться к нему и вручную натыкивать трансформации через glPushMatrix() / glPopMatrix() очень бы не хотелось.
Ну, таких как я, думаю, не очень много, так что можешь не париться, наверное.

QUOTE(hidefromkgb @ Nov 22 2020, 23:28) *
P.S.: как-то плотность ссылок на квадратный сантиметр комментария потихоньку начинает зашкаливать. Я не спамер, просто подкрепляю слова пруфлинками.
Нормально всё, это же не спам.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
hidefromkgb
Nov 24 2020, 07:31
Сообщение #7


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



QUOTE(-=CHE@TER=- @ Nov 23 2020, 14:09) *
Работает, правда выдаёт 0 или 1 FPS, но я вижу горы где-то вдали в тумане и какой-то прямоугольник сверху с красной вертикальной фигнёй
Красная фигня — это позиция камеры на карте (белые квадраты внизу), а её высота — это собственно высота над уровнем моря.
Что до 1 FPS — да, увы но у TNT2 (блин, TNT2!!) нет аппаратной поддержки вершинных массивов, поэтому похоже что проц каждый кадр гоняет через шину весь буфер.

QUOTE(-=CHE@TER=- @ Nov 23 2020, 14:09) *
Кстати, ты исходные коды OpenGL, ссылку на которые я дал в прошлом сообщении, не смотрел?
Смотрел, и всё знаю про такой стиль написания GL программ, я именно ему в детстве учился по замечательной книжке Краснова.
Как доразберу формат до конца, сделаю всё-таки для виндовой версии возможность сброса на фиксированный конвейер.

Чёрт возьми, TNT2… И это ещё я думал, что это я тут олдскульщик, со всеми своими усилиями по совместимости гитхабного кода с Win98SE =)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 24 2020, 10:41
Сообщение #8


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,293
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 300 раз(а)



QUOTE(hidefromkgb @ Nov 24 2020, 07:31) *
Как доразберу формат до конца, сделаю всё-таки для виндовой версии возможность сброса на фиксированный конвейер.
Смотри как тебе удобнее. Повторюсь, таких как я, наверное, не слишком много.

QUOTE(hidefromkgb @ Nov 24 2020, 07:31) *
Чёрт возьми, TNT2… И это ещё я думал, что это я тут олдскульщик, со всеми своими усилиями по совместимости гитхабного кода с Win98SE =)
(*улыбается*) На самом деле ты молодец. Я, вон, тоже все программы для сайта собираю так, чтобы они тоже даже на Win98SE работали. Я просто в 2002 году компьютер купил (по тем временам он считался достаточно мощным) и с тех пор только память слегка увеличил (128 + 256 = 384 Мб), жёсткие диски большего объёма поставил и монитор заменил когда тот скончался. А, ещё пару лет назад на материнке полопались конденсаторы, так что пришлось их перепаивать. Для работы и не сильно навороченных игр с 2002 года пользуюсь этим компьютером и мне его без проблем хватает. Особенно хорошо отлаживать и писать всякие программы с тяжёлыми вычислениями - на небольших данных современные компьютера просто мигом программу исполняют, а здесь уже видно что скорость так себе, надо бы подумать как можно оптимизировать и сократить время работы.
Кстати, о программах и Win98SE. Когда ты современным погром-мистам говоришь что твои программы работают на Windows XP, то всегда забавно смотреть, как они начинают пеной исходить, что, мол, система больше не поддерживается, там вирусы, трояны, гроб, кладбище, сидр. А если ты упоминаешь о том что твои программы и под Windows 98 работают, то им, горемычным, вообще, скорую вызывать приходится, ибо в своих выделениях они просто захлёбываются. (*улыбается*) Меня это всегда так безумно веселит. Ну не можешь ты в WinXP или Win98 - да и фиг бы с ним. Не-е-ет, надо всем и каждому доказать что это не ты такой, а система плохая. До этого была хорошая, проблем с ней не было, а тут бац! и плохая.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
hidefromkgb
Nov 25 2020, 05:14
Сообщение #9


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



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

Теперь осталось понять, как вся эта радость текстурируется.
Не то чтобы это было сильно важно, текстурки один хрен с почтовую марку размером и придётся их менять так или иначе, однако я уже закусил удила.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
hidefromkgb
Nov 27 2020, 18:32
Сообщение #10


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



Добавлен импорт нормалей.

Теперь верхняя точка шестой трассы выглядит так
.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
-=CHE@TER=-
Nov 28 2020, 13:02
Сообщение #11


Walter Sullivan
***

Группа: Root Admin
Сообщений: 1,293
Регистрация: 4-February 08
Пользователь №: 3
Спасибо сказали: 300 раз(а)



О-о-о! Классно! Это уже с освещением?
Выглядит здорово - будешь ремейк делать? (*улыбается*)
User is offlineProfile CardPM
Go to the top of the page
+Quote Post
hidefromkgb
Nov 28 2020, 13:25
Сообщение #12


Newbie
*

Группа: Delegated
Сообщений: 8
Регистрация: 8-March 19
Пользователь №: 18,032
Спасибо сказали: 1 раз(а)



Нет, как такового освещения я в этих моделях не нашёл. На снимке источником освещения служит «налобный фонарь» на камере.
А насчёт переделки — я ж ещё в универе хотел, да всё никак времени не было.

К слову, есть прогресс по текстурированию. Судя по всему, текстурных координат в ныне общепринятом смысле слова здесь вообще нет, а каждому примитиву просто приписывается отдельное изображение из .0 или .1 файла — притом для треугольников половина изображения, лежащая выше главной диагонали матрицы пикселей, отбрасывается. И разумеется текстура после этого повторяет все искажения, которые вносит примитив.

Более того: я был неправ, предполагая что информация о соответствии текстур примитивам хранится в .WL3 — напротив, всё это я нашёл в .0 / .1 файле, когда задолбался так и эдак перебирать нерасшифрованные поля .WL3 моделей.
User is offlineProfile CardPM
Go to the top of the page
+Quote Post

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

 



Упрощённая версия Сейчас: 21st January 2021 - 07:28