[r][i][color=gray][url=http://klimaleksus.narod2.ru/Other/realms/201.txt]#201[/url], 28.10.12[/color][/i][/r] Drui7 – таймаут, хоть на один коммент… [quote=nihonjin]Кажется, этим раньше занимался Спай…[/quote] …лась [quote=nihonjin]помечал в первом сообщении прогресс, но он уже давно не заходил на форум...[/quote] Спай – основательница spyro-realms. Но действительно, она давно не заходила на форум. Ну а шапку правит Serlutin. Который тоже давненько её не обновлял… [quote=nihonjin]Вообще TileMolester действительно замечательная прога. Там нет, например, ужасного искажения как в PVV и N-чисел пунктов переконвертации как в PGG(и я так и не въехал как там починить палитру).[/quote] Ни чё не понял. [quote=nihonjin]Не знаю обрабатывают ли их проги, но в моём SDK есть TMD модели.[/quote] Вот я туплю! Уже второй раз… Почему я не догадался поискать *.tmd в [i]своём[/i] SDK!? У меня тоже _оказывается_ их очень много. [quote=nihonjin]В принципе я просматривал различные форматы 3D в WinHex и не нашёл структуры схожей с тем, что у нас:[/quote] А я сегодня потратил абсолютно весь день, чтобы понять наш формат. И: Я взломал модели на 85%! Я разгадал всю структуру букв. Я долго копошился в WinHex, исследовал разные варианты. Рассматривал извлечённые через ModelFileUnPacker модели. Находил различия. Определял значение тех или иных частей. Оказалось, файл модели состоит из четырёх частей – заголовка, шапки, вершин, непонятной-фигни и полигонов. Причём непонятная-фигня равна «7F-7F-7F-00» у всех тех моделей букв, которые я смог обработать. Итак, формат: Заглавие: 1 байт – количество вершин (<128) 1 байт – количество полигонов. 1 байт – флаг непонятно чего (0F/0C) 1 байт – FF. Адреса: 4 байта – адрес начала описаний вершин. 4 байта – адрес начала какой-то ерунды. 4 байта – адрес начала описаний полигонов. Список вершин: (структуры по 3 байта) 1 байт – Z координата (от экрана вглубь). 1 байт – X координата (по экрану вправо). 1 байт – Y координата (по экрану вниз). {списки вершин занимают «3*(кол-во вершин)» раз + дополняются нулями до mod4} ~фигня «7F-7F-7F-00» сколько-то раз~ Список полигонов: (структуры по 8 байт) 4 байта разбиваются на 32 бита: >2 бита – флаги; >7 бит – номер первой вершины; >7 бит – номер второй вершины; >7 бит – номер третьей вершины; >7 бит – номер четвёртой вершины; >2 бита – холостые. 1 байт – холостой. 3 байта – координаты вектора нормали полигона. {списки полигонов занимают «8*(кол-во полигонов)» раз} 4 байта полигона выглядят так: 11111100-22222221=43333333-00444444 …Да, долго же мне пришлось находить эти семёрки бит. Зато всё работает! Кстати, адреса структур в самом файле считаются относительно начала файла (реальный offset), а в ОЗУ эмулятора уже являются абсолютными адресами с «80…». Дампить память было удобно… XYZ направления осей координат – когда на экране рисуется меню. То есть X идёт вправо (7F – крайний правый, 80 – крайний левый, 00 – центр, 10 – немного правее, F0 –немного левее, ну ясно же?); Y – вертикаль, растёт вниз (7F самый нижний, 80 – самый верхний, и.т.д); Z движется вглубь экрана (7F далеко, 80 близко). Координаты вектора нормали я не могу сформулировать, потому что полтора часа тыркал их методом подбора, пока не нашёл нужную комбинацию… И, наконец, я ведь сделал программу! Позволяющую увидеть все модели как они есть: [b] http://klimaleksus.narod2.ru/Files/1/SpyroFont.rar [/b] Скриншотики: http://klimaleksus.narod2.ru/Files/1/SpyroFont_01.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_02.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_03.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_04.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_05.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_06.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_07.png http://klimaleksus.narod2.ru/Files/1/SpyroFont_08.png Нет ничего лучше Game Maker для этой цели. Инструкция: [spoiler=SpyroFont v1.0] SpyroFont v1.0 (Тестовый просмотрщик некоторых типов моделей игры Spyro) Создатель – Клименко Алексей специально для spyro-realms.com. Управление: Только мышью! Движение по горизонтали – облёт вокруг; По вертикали: – без нажатий = облёт сверху/снизу; – с удерживанием левой – приближение/удаление; – с удерживанием правой – шары на вершинах увеличить/уменьшить; Нажатие колёсика: – само по себе = освобождение курсора; – с удержанной левой = сменить цвет модели; – с удержанной правой = сбросить настройки; Нажатие левой кнопки с удержанием правой – выбрать новый файл; Нажатие правой кнопки с удержанием левой – отображение граней вкл/выкл; Прокрутка колёсика: – само по себе = сдвиг освещения по горизонтали; – с удержанием левой = расхождение освещения по вертикали; – с удержанием правой = изменение количества осветителей. [s]Полноэкранный режим – F4;[/s] Снять скриншот – F9; Выход – Esc[/spoiler] Вершины нумеруются с нуля. Полигончики представляют собой четырёхугольники. Вершины нумеруются так: [font=Courier]1--3 | /| |/ | 2--4[/font] В двух треугольниках отрисовать можно так: 123 + 324 (вершины должны перечисляться против часовой стрелки) Однако не все модели открываются (как видно по скриншотам). Модель головы Спайро на самом деле сглаженная, и каждая вершина полигона (не вершина как таковая, а каждый угол каждого четырёхугольника) имеет свою нормаль, которая непонятно где указывается. Поэтому моя программа открывает только модели с полигонами, у которых одна нормаль на каждую грань. Вопрос: стоит ли мне разгадывать формат дальше, или же букв нам хватит? Интересно то, что модели камней гемов повторяются столько раз, сколько существует типов драгоценностей. И они независимы друг от друга! Их можно изменить, и сделать как в Spyro3 или даже круче! Вопрос: будем ли мы менять модели сокровищ? В этом случае нам придётся научиться расширять объём моделей и менять глобальные указатели, зато получим разного вида камешки. Оно того стоит? Чтобы что-то поменять, нужно сконвертировать модель в любой стандартный формат, например текстовый OBJ, чтобы редактировать в 3DsMax или где-нибудь ещё. Либо я могу написать свой 3D редактор на самом Game Maker. Вопрос: кто-нибудь будет создавать конвертор/редактор, или мне самому этим заняться? Если кому-то непонятно про вершины, нормали и полигоны, могу поподробнее про это написать. Биты флагов портят отображение модели. Не знаю, что они делают. Можно ещё поэкспериментировать… Зато я понял, почему некоторые полигоны у меня в прошлый раз тянулись к рогам – потому что я видимо поставил слишком высокий номер вершины, а вершина с таким номером есть только у другой модели. (Они, похоже, сбрасываются в массив, который, естественно, не очищается между.) Вопрос об анимации остаётся открытым, но ясно, что движение не «вшито» в модели, а накладывается поверх чем-то другим. brill, я рано или поздно всё равно бы нашёл и взломал модели. Но с вашим распаковщиком это произошло гораздо быстрее! По SpyroFont: Шарики отмечают вершины. Есть режим скелетных граней. При загрузке буквы показываются «лицом» к камере. Цвета выбираются случайным образом. Обратная сторона граней невидима (специально). + В архиве также все извлечённые модели.