forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   OpenVice, или садо-мазо реверс-инженеринг (http://forum.boolean.name/showthread.php?t=19656)

Кирпи4 22.01.2015 17:11

OpenVice, или садо-мазо реверс-инженеринг
 

Доброго времени суток, господа булчане.
Одним январским вечером, захотелось мне чего-то нового, нового и неизведанного для моей программистской сущности. Рыская по нЁдрам своего жёсткого, набрёл на Vice City... Устраивайтесь поудобнее и слушайте сказ дяди Миши, как скрестить OpenTK, C# и файлы игры, стараясь при всём этом заставить полученный гибрид работать с должной скоростью.

Вооружившись OpenTK и своим ненаглядным SharpDevelop'ом, началась писанина GL-каркаса. GL я юзаю 2.4, с вершинными буфферами, но не использую VAO, потому как смысла в нём не вижу. Второй GL потому, что использую Immediate для рисования интерфейса.

Хотелось бы сразу откреститься, что я никак не связан с Rockstar Games, все зарегистрированные торговые марки принадлежат их владельцам. Реверс-инжиниринг проводится только для саморазвития и ни в коем случае не для продажи, и вообще, при первой опасности, я гражданин Кубы и на все вопросы следователей буду отвечать "Que?"

Кирпи4 22.01.2015 17:30

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
IMG Archive, или самая большая игровая свалка данных.

Первым делом, конечно же, становится разбор игровых архивов. Сам по себе вайсовский архив (а так же сан андреасовский, вайс сити сториевский, и далее по списку) - это два файла:
  1. DIR - Заголовочный файл
  2. IMG - Один толстый кирпич из данных
Оговорочка. В описании структур я буду использовать блицевские типы данных, потому как других нам тут и не надо.

DIR состоит из незамысловатой повторяющейся структуры:
Код:

int offset - позиция файла в IMG
int size - размер файла
chr[24] name - название файла

То бишь получается, чтобы узнать количество файлов в архиве, нужно разделить размер DIR-файла на 32.
Самое интересное в том, что оффсеты и размеры файлов нужно умножать на 2кб - размер сектора диска.

Вайс имеет при себе следующие IMG-ахивы:
  • models/gta3.img - все объекты игрового мира, а так же их текстуры (об их форматах чуть попозже).
  • anim/cuts.img - анимации роликов между миссиями. Сами персонажи, а так же декорации лежат в gta3.img, озвучка лежит отдельно в папке audio в формате mp3.

impersonalis 22.01.2015 18:30

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
А вот было бы интересно узнать: информация где-то почерпнута или получена аналитическим путём (в принципе, довольно-таки ожидаемый формат).
деление на 32 - круто. Округление размеров файлов - не очень круто, в общем случае получается не только не архив, но и наоборот.

Кирпи4 22.01.2015 18:44

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Texture Dictionary

Текстуры в вайсе упакованы в формате движка игры - RenderWare. Формат сам по себе чанковый, и на первый взгляд немного неудобный.

Базовая структура каждого чанка:
Код:

int section - тип чанка
int size - размер чанка, включая все дочерние
int version - версия RenderWare

Корневой чанк файла - 0x0016. Первым в нём идёт чанк содержит в себе следующие данные:
Код:

chunk struct - чанк, содержащий базовую информацию об архиве текстур.
chunk[texCount] textures - чанки каждой текстуры. Описаны ниже.
chunk extension - пустой чанк, можно смело обрывать чтение файла на предыдущем пункте.

Struct-чанк, описанный выше, имеет ID 0x0001, внутри два инта:
Код:

int texCount - количество текстур.
int device - колдунственное число, обозначает DX8 или DX9, зачем - загадка.

Подчанки текстур имею заголовок 0x0015, являются контейнером для одной текстуры.
Код:

chunk struct - собственно одна текстура. Имеет самую толстую спеку из всех чанков.
chunk extension - опять же пустой чанк. В PS2-версии формата содержит какие-то данные, но в PC остаётся пустым.

Текстурный struct-чанк, так же имеет ID 0x0001, держит в себе данные и параметры текстуры:
Код:

int platform - для вайса должно быть равно 8, иначе алярм.
int addressing - оче хитро сжатая информация об сглаживании и адресации текстур. Как разжать описано ниже.
chr[32] name - имя текстуры. Null-terminated, неиспользованные байты заполнены "\0".
chr[32] mask - название маски текстуры. Я не использую, назначение сомнительное. Хранится так же, как и имя.
int raster - формат растра. Список ниже.
int alpha - аж целый инт для простого флажка, есть ли альфа или нет...
short width - ширина.
short height - высота.
byte depth - глубина цвета в битах.
byte mipcount - количество mip-уровней текстуры.
byte type - всегда равно 4.
byte compression - какое сжатие текстур использовано. 0 - никакого, 1 - DXT1, 3 - DXT3.

Дальше, если raster содержит битовый флаг 0x2000, дальше следует палитра:
Код:

int[256] palette - цвета палитры для каждого индекса в формате RGBA.
Следом, для каждого из mip-уровней повторяется следующее:
Цитата:

int size - размер в байтах. В зависимости от формата и фазы луны, может равняться нулю. Это необходимо проверять и пересчитывать вручную размер.
byte[size] data - данные картинки.
Как раскодировать сглаживание и адресацию.
Хранится всё в одном инте, но используются по сути два первых байта. Первый байт - это режим фильтрации, список режимов прилагается. Следующий байт надо разбить на два блока по 4 бита, первый блок - адресация по U, второй - по V. Типы адресации тоже прилагаются.

Типы растра:
Код:

FORMAT_DEFAULT        0x0000
FORMAT_1555            0x0100 (однобитная альфа, RGB 5 бит на канал; этот же формат используется для DXT1 с альфой)
FORMAT_565            0x0200 (5 бит красного, 6 бит зелёного, 5 бит синего; используется DXT1 без альфы)
FORMAT_4444            0x0300 (RGBA 4 бита на канал; также используется для DXT3)
FORMAT_LUM8            0x0400 (gray scale)
FORMAT_8888            0x0500 (RGBA 8 бит на канал)
FORMAT_888            0x0600 (RGB 8 бит на канал без альфы)
FORMAT_555            0x0A00 (RGB 5 бит на канал - очень редкий формат)

FORMAT_EXT_AUTO_MIPMAP 0x1000 (движок должен сгенерировать мипмапы)
FORMAT_EXT_PAL8        0x2000 (2^8 = 256 цветов в палитре)
FORMAT_EXT_PAL4        0x4000 (2^4 = 16 цветов в палитре)
FORMAT_EXT_MIPMAP      0x8000 (мипмапы прилагаются)

Типы фильтрации:
Код:

FILTER_NONE                0x00
FILTER_NEAREST            0x01
FILTER_LINEAR              0x02
FILTER_MIP_NEAREST        0x03
FILTER_MIP_LINEAR          0x04
FILTER_LINEAR_MIP_NEAREST  0x05
FILTER_LINEAR_MIP_LINEAR  0x06

Типы адресации текстурных координат:
Код:

WRAP_NONE    0x00
WRAP_WRAP    0x01
WRAP_MIRROR  0x02
WRAP_CLAMP    0x03

Как говорится, первый блин комом, поэтому первые попытки прочитать текстуры были, мягко говоря, неудачными:

Однако, спустя некоторое время я понял, что неправильно читал размер для каждого мип-уровня. Вместо int я читал short, два байта терялись и ломали остальные данные. После поправки, всё встало на свои места:

Кирпи4 22.01.2015 18:46

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от impersonalis (Сообщение 292203)
А вот было бы интересно узнать: информация где-то почерпнута или получена аналитическим путём (в принципе, довольно-таки ожидаемый формат).
деление на 32 - круто. Округление размеров файлов - не очень круто, в общем случае получается не только не архив, но и наоборот.

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

Кирпи4 23.01.2015 09:02

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
gta_vc.dat - грузим наш город

По сути, корневой DAT-файл является простым текстовиком, который указывает игре, какие IDE и IPL подключать и где они находятся, а так же ссылается на Generic-текстуры, типа дорог или пальм.

Существенными для нас будут следующие команды:
  • IDE <имя файла> - указывает на дефенишн-файл.
  • IPL <имя файла> - указывает на файл расстановки.
  • COLFILE <имя файла> - ссылается на пак с физданными

Item Definition
IDE-файлы - это тоже текстовики. В них прописаны уникальные ID для каждого объекта, будь то здание, кусок дороги, машина или педестриан. Также, там указаны модель, текстурный архив, дистанции прорисовки и флаги, влияющие на рендер объекта. На данный момент, нам хватит секций OBJS и TOBJ. (TOBJ - секция, почти идентичная OBJS. Разница в том, что TOBJ имеет ещё и игровые часы, показывающие, в какое время суток рендерить этот объект)

Item Placement
IPL-файлы так же открываются блокнотом. Эти файлы содержат параметры для размещения в игровом мире объектов, указанных в IDE-файлах: позицию, скейл в виде векторов и поворот в виде кватерниона (сколько боли он мне доставил). Как и IDE, из IPL нам понадобится только секция INST - секция расстановки.

Если просто прочитать расположение моделей из INST-секции и нарисовать их, уже можно разобрать родные просторы и пустить скупую слезу:

Кирпи4 23.01.2015 09:08

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Не вдаваясь в описание формата моделей, скажу - он потный, и уровень его разбора мной - где-то в районе 40%, так как я ещё не дошёл до костей. Но, базовой структуры с минимумом погружения в его сумасшедшую иерархию мне хватило, чтобы загрузить статические, городские меши:



Igor 23.01.2015 11:07

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Это офигенно. Если нужна будет помощь - пиши. Я бы с шейдерами поигрался или с алгоритмами для движения автомобилей (В самой игре они могут исчезнуть, если просто отвернуться, это не труЪ, я за более реалистичную симуляцию)

Nex 23.01.2015 11:43

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Надо запрогать возможность плавать.

Кирпи4 23.01.2015 14:11

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от Nex (Сообщение 292261)
Надо запрогать возможность плавать.

Оригинальные наборы анимаций для педов содержат только один вид плавания - топориком :crazy:

ABTOMAT 23.01.2015 14:36

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
По такому случаю можно из SA взять (ЕМНИП там формат моделей обратно совместим, так что в целом наверное можно заодно и его поддержку запилить).

Кирпи4 25.01.2015 19:25

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Затащил Git для проекта:
https://github.com/clashbyte/openvice

Mr_F_ 25.01.2015 21:17

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Молодец! Ностальгия, я когда-то так с мафией возился, тоже сначала вертексы вытягивал, потом уже нормальные модели, потом и скин, анимки... всё это у меня в виде допотопных тулз на блице/с++ и скриптов к максу, последние можно качать с фансайтов. Может тоже как-нибудь open проект замутить)...

Кирпи4 26.01.2015 08:28

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от Mr_F_ (Сообщение 292334)
Молодец! Ностальгия, я когда-то так с мафией возился, тоже сначала вертексы вытягивал, потом уже нормальные модели, потом и скин, анимки... всё это у меня в виде допотопных тулз на блице/с++ и скриптов к максу, последние можно качать с фансайтов. Может тоже как-нибудь open проект замутить)...

Почему нет? Насколько я помню, там возможностей было в разы меньше чем в вайсе.

Mr_F_ 26.01.2015 12:06

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Насколько я помню, там возможностей было в разы меньше чем в вайсе.
мафия менее аркадная, физика и система повреждений там в разы лучше была, перезарядка честная, даже гильзы с пола не исчезали, к графену подходили более основательно - лайтмапы хорошие были, интерьеры выглядели на порядок лучше, можно даже было честные отражающие зеркала создавать (есть даже моды с тачками с рабочими зеркалами заднего вида), нормальные тени от челов падали, а не пятнышки... в общем гта меня никогда не цепляло, всегда казалось игрушечной аркадкой оно мне, а вот мафия была "с душой" и "фсё как в риале!!11", вообще она во многом меня сподвигла на геймдев.
Но не будем холиварить)

Кирпи4 26.01.2015 15:49

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от Mr_F_ (Сообщение 292359)
Но не будем холиварить)

Блин, заинтриговал, надо поближе ознакомиться с игрой :-D

ABTOMAT 26.01.2015 16:09

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Что лучше: мафия или гта?
Что лучше: столы или стулья?

Randomize 26.01.2015 16:38

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от ABTOMAT (Сообщение 292368)
Что лучше: столы или стулья?

Стулья. Очевидно же.

SBJoker 26.01.2015 16:56

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Столы, они и заменят крышу над головой и кровать, а так же могут выполнять функции плота, защиты от ядерного взрыва.

impersonalis 26.01.2015 17:26

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от SBJoker (Сообщение 292370)
Столы, они и заменят крышу над головой и кровать, а так же могут выполнять функции плота, защиты от ядерного взрыва.

и в принципе стол можно использовать и как стул! (обратное, правда, тоже верно)

Samodelkin 26.01.2015 19:15

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Вообще можно найти много критериев и по каждому та или иная игра будет лучше.
Я же думаю что сравнивать их не надо -- они дополняют друг друга и создают определённый общий взгляд на игры того времени.
Мне посчастливилось играть в gta3, vice city и mafia в их время (2002-2003), я считаю что правильное время тоже влияет на полученное впечатления от игр.
Например играя сейчас в старые игры, если знакомишься с ними первый раз, уже не получишь таких ощущений, как игрок который поиграл в них "вовремя".
Также игроки игравшие "вовремя" могут вызывать прошлые впечатления даже если переигрывают старую игру в настоящем, и получают более глубоких опыт от игры.
Иногда правда бывает что старая игра осталась в памяти в более приятном виде, чем когда через много лет видишь её снова: особенно это касается графики, на контрасте с современными играми сразу вылезает много недостатков старой игры.
(кстати gta3 и vicecity мои любимые части, sa и gta4 уже как-то по нисходящей пошли).

А по теме:
Насколько мне известно с Vice City вроде всё в порядке с работой на современном железе, может нужно раскапывать игры которые по каким то причинам стали глючить или неподдерживать большие разрешения и фиксить это?
И скилл прокачается и польза общественности будет.

Igor 26.01.2015 19:19

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Вспомнил: http://habrahabr.ru/post/188594/
Но там больше дизассемблирование, программирования и нет как такового.

ABTOMAT 26.01.2015 20:13

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от Samodelkin (Сообщение 292378)

А по теме:
Насколько мне известно с Vice City вроде всё в порядке с работой на современном железе, может нужно раскапывать игры которые по каким то причинам стали глючить или неподдерживать большие разрешения и фиксить это?
И скилл прокачается и польза общественности будет.

Ну в названии же темы написано: Садо-Мазо. Ну, хочет человек, ну, пускай. Всяко лучше, чем ничего не делать (чем бОльшая часть форумчан занята).

По поводу пользы общественности на поприще реверс-нижиниринга:
У меня была вот такая довольно интересная мыслишка: OpenWar. Как можно догадаться из названия, это открытый аналог WarCraft III.

Зачем всё это надо? Дело в том, что в самом WC3 всего 4 кампании в RoC, 4 кампании в TFT и пара десятков карт для мультиплеера "на развитие". Ну, ещё в TFT с десяток карт с оригинальным геймплеем, в которые, впрочем, никто не играет.

И ещё тысячи (если не десятки тысяч) карт, наделанных за время "жизни" Варика его сообществом. Из них сотни имеют потенциал отдельных игр (например, Дота уже таки выродилась в несколько отдельных игр). Т.е. во много раз больше, чем, собственно, оригинальная игра предлагает.

Беда в том, что чтобы в это великолепие поиграть надо (по идее) иметь лицензионную копию Варика, который, несмотря на все свои достоинства, проприетарен. Соответственно, вроде как, карты бесплатны, и Близзард к ним отношения не имеет, тем не менее, чтобы в них поиграть, нужно "отстёгивать" Близзарду. Чтобы пользоваться редактором карт, соответственно, тоже.

А также: устаревшая графика на устаревшем GAPI, практически полное отсутствие возможности модифицировать интерфейс, невозможность запустить игру кроме как на Windows/Mac (внезапно есть версия и для маков) и прочие беды старого проприетарного ПО.

Таким образом возникает идея разработать открытый скелет игры, который:

1. Воспроизводит механику оригинального WC3 RoC/TFT
2. Графику выводит через современное GAPI (ещё лучше чтобы GAPI "отстёгивалось"), даёт возможность её улучшить (вплоть до полного рефакторинга на современном уровне).
3. (самое главное!) Обеспечивает обратную совместимость с картами для оригинального WC3 со всеми фичами. Pudge Wars, DotA, Legion TD и пр.!
4. Даёт дополнительные возможности по модификации интерфейса, у WC3 большие сложности с этим. Вспомните, как в Доте предметы собираются, ага.

Собственно, это гипотетически возможно и ящитаю очень и очень нужно.
Одна беда: работы там на годы. И за это никто не заплатит :-D Могут зато Близзарды наехать с авторскими правами. На Доту 2 наезды были, по крайней мере. Хотя какого хера они вообще возомнили, что название "DotA" принадлежит им? Но вот ребята наглые. Короче, боюсь, такой проект никогда не будет не то что реализован, а даже начат.

Randomize 26.01.2015 20:53

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от ABTOMAT (Сообщение 292380)
Н
У меня была вот такая довольно интересная мыслишка: OpenWar. Как можно догадаться из названия, это открытый аналог WarCraft III.

Зачем всё это надо? Дело в том, что в самом WC3 всего 4 кампании в RoC, 4 кампании в TFT и пара десятков карт для мультиплеера "на развитие". Ну, ещё в TFT с десяток карт с оригинальным геймплеем, в которые, впрочем, никто не играет.

И ещё тысячи (если не десятки тысяч) карт, наделанных за время "жизни" Варика его сообществом. Из них сотни имеют потенциал отдельных игр (например, Дота уже таки выродилась в несколько отдельных игр). Т.е. во много раз больше, чем, собственно, оригинальная игра предлагает.

Беда в том, что чтобы в это великолепие поиграть надо (по идее) иметь лицензионную копию Варика, который, несмотря на все свои достоинства, проприетарен. Соответственно, вроде как, карты бесплатны, и Близзард к ним отношения не имеет, тем не менее, чтобы в них поиграть, нужно "отстёгивать" Близзарду. Чтобы пользоваться редактором карт, соответственно, тоже.

А также: устаревшая графика на устаревшем GAPI, практически полное отсутствие возможности модифицировать интерфейс, невозможность запустить игру кроме как на Windows/Mac (внезапно есть версия и для маков) и прочие беды старого проприетарного ПО.

Таким образом возникает идея разработать открытый скелет игры, который:

1. Воспроизводит механику оригинального WC3 RoC/TFT
2. Графику выводит через современное GAPI (ещё лучше чтобы GAPI "отстёгивалось"), даёт возможность её улучшить (вплоть до полного рефакторинга на современном уровне).
3. (самое главное!) Обеспечивает обратную совместимость с картами для оригинального WC3 со всеми фичами. Pudge Wars, DotA, Legion TD и пр.!
4. Даёт дополнительные возможности по модификации интерфейса, у WC3 большие сложности с этим. Вспомните, как в Доте предметы собираются, ага.

Собственно, это гипотетически возможно и ящитаю очень и очень нужно.
Одна беда: работы там на годы. И за это никто не заплатит :-D Могут зато Близзарды наехать с авторскими правами. На Доту 2 наезды были, по крайней мере. Хотя какого хера они вообще возомнили, что название "DotA" принадлежит им? Но вот ребята наглые. Короче, боюсь, такой проект никогда не будет не то что реализован, а даже начат.

Однако есть такие вещи как OpenTTD OpenRA и наш любимый КAM Remake. Как примеры подобного. Народ делает, да, пускай годами, и пускай порой на Delphi (кам ага).
Так что не унывай так сильно.

Samodelkin 26.01.2015 21:20

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от ABTOMAT (Сообщение 292380)
У меня была вот такая довольно интересная мыслишка: OpenWar. Как можно догадаться из названия, это открытый аналог WarCraft III.

Зачем всё это надо? Дело в том, что в самом WC3 всего 4 кампании в RoC, 4 кампании в TFT и пара десятков карт для мультиплеера "на развитие". Ну, ещё в TFT с десяток карт с оригинальным геймплеем, в которые, впрочем, никто не играет.

И ещё тысячи (если не десятки тысяч) карт, наделанных за время "жизни" Варика его сообществом. Из них сотни имеют потенциал отдельных игр (например, Дота уже таки выродилась в несколько отдельных игр). Т.е. во много раз больше, чем, собственно, оригинальная игра предлагает.

Беда в том, что чтобы в это великолепие поиграть надо (по идее) иметь лицензионную копию Варика, который, несмотря на все свои достоинства, проприетарен. Соответственно, вроде как, карты бесплатны, и Близзард к ним отношения не имеет, тем не менее, чтобы в них поиграть, нужно "отстёгивать" Близзарду. Чтобы пользоваться редактором карт, соответственно, тоже.

А также: устаревшая графика на устаревшем GAPI, практически полное отсутствие возможности модифицировать интерфейс, невозможность запустить игру кроме как на Windows/Mac (внезапно есть версия и для маков) и прочие беды старого проприетарного ПО.

Таким образом возникает идея разработать открытый скелет игры, который:

1. Воспроизводит механику оригинального WC3 RoC/TFT
2. Графику выводит через современное GAPI (ещё лучше чтобы GAPI "отстёгивалось"), даёт возможность её улучшить (вплоть до полного рефакторинга на современном уровне).
3. (самое главное!) Обеспечивает обратную совместимость с картами для оригинального WC3 со всеми фичами. Pudge Wars, DotA, Legion TD и пр.!
4. Даёт дополнительные возможности по модификации интерфейса, у WC3 большие сложности с этим. Вспомните, как в Доте предметы собираются, ага.

Собственно, это гипотетически возможно и ящитаю очень и очень нужно.
Одна беда: работы там на годы. И за это никто не заплатит :-D Могут зато Близзарды наехать с авторскими правами. На Доту 2 наезды были, по крайней мере. Хотя какого хера они вообще возомнили, что название "DotA" принадлежит им? Но вот ребята наглые. Короче, боюсь, такой проект никогда не будет не то что реализован, а даже начат.


Нужно посмотреть как записано в их лицензии.
По сути нужна только механика игры.
Если у них в лицензии оговорено что можно делать с отдельными частями игры то из этого и надо исходить.
Вообще как они докажут что одинаковая механика это не совпадение? Код то другой можно написать.
Или даже изменить пару-тройку параметров механики, которые не сильно влияют на результат.
Контент можно другой сделать, без оригинальных героев Варика.

Насчёт карт.
Вот например формат mp3 вроде тоже как комерческий но его используют вроде, не?
Можно воспользоваться конвертером, который конвертирует карты в формат не имеющий никакого отношения к Близзарду.

Кирпи4 17.01.2016 22:47

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Курлык, очистил репозиторий и переписал двигло совсем-совсем по новой. Попутно, кто то меня укусил и я стал писать очень много комментариев, аж на двух языках =3
Репозиторий на гитхабчике

Кирпи4 20.01.2016 05:48

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

Randomize 21.01.2016 01:33

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Скрины давай!

Кирпи4 25.01.2016 02:22

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от Randomize (Сообщение 303445)
Скрины давай!

Партия сказала "надо", комсомол ответил "есть" =D

Наконец раздуплился с физдвигом (кошмарный жонгляж одними и теми же данными, только из-за того, что когда-то какая то обезьяна придумала, что в GL z-ось должна быть направлена назад). До конца разобрал файлы коллизий и запилил статичные коллайдеры:

Кирпи4 29.01.2016 04:16

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Дело шло к костной анимации - но тут засада. Оказалось, что матрица поворота кости хранится в некорректном формате. Бился несколько часов, так и не смог понять, какие из координат перепутаны Т_Т


ABTOMAT 29.01.2016 06:06

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
А трансформации остальных объектов на карте нормально хранятся?
Т-поза тоже не норм (на скрине она)?

Кирпи4 29.01.2016 12:36

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Цитата:

Сообщение от ABTOMAT (Сообщение 303674)
А трансформации остальных объектов на карте нормально хранятся?
Т-поза тоже не норм (на скрине она)?

У объектов карты все прекрасно, у них трансформация единичная, у автомобилей например поворот тоже единичный, используются только перемещения. А на скрине да, биндпоза.

ABTOMAT 29.01.2016 18:54

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Такое чувство, что надо где-то на минус один умножить, но, думаю, ты и так уже кучу раз пытался это сунуть во все места :-D

Кирпи4 30.01.2016 02:14

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Задача решилась в лоб - сделал кватернион как есть, и уже в нём поменял значения.
Код:

Angles = Quaternion.FromMatrix(
        new Matrix3(
                f.Rotation[0], f.Rotation[1], f.Rotation[2],
                f.Rotation[3], f.Rotation[4], f.Rotation[5],
                f.Rotation[6], f.Rotation[7], f.Rotation[8]
        )
);
Angles = new Quaternion(-Angles.X, -Angles.Z, -Angles.Y, -Angles.W);

Скелет выстроился, теперь нужно разобрать до конца как хранится иерархия для анимации. А пока, вот вам господин полицмейстер, крайне недовольный тем, что мы над ним проводим опыты (нет, реально, я даже не знал что у них выражение лица такое нагруженное =D )

Кирпи4 28.08.2020 20:48

Ответ: OpenVice, или садо-мазо реверс-инженеринг
 
Не прошло и четыре года - у меня есть смешивание анимаций + относительно рабочий контроллер персонажа



Часовой пояс GMT +4, время: 13:45.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot