Извините, ничего не найдено.

Не расстраивайся! Лучше выпей чайку!
Регистрация
Справка
Календарь

Вернуться   www.boolean.name > Программирование игр для компьютеров > С#

С# Средство разработки на платформе .Net

Ответ
 
Опции темы
Старый 22.01.2015, 17:11   #1
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
OpenVice, или садо-мазо реверс-инженеринг


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

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

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


(Offline)
 
Ответить с цитированием
Эти 10 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
ABTOMAT (22.01.2015), Arton (22.01.2015), DStalk (22.01.2015), Gector (22.01.2015), impersonalis (22.01.2015), mauNgerS (25.01.2015), Nerd (22.01.2015), pax (23.01.2015), Randomize (22.01.2015), St_AnGer (23.01.2015)
Старый 22.01.2015, 17:30   #2
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: 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.
__________________


(Offline)
 
Ответить с цитированием
Эти 3 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
Arton (22.01.2015), Gector (22.01.2015), St_AnGer (23.01.2015)
Старый 22.01.2015, 18:30   #3
impersonalis
Зануда с интернетом
 
Аватар для impersonalis
 
Регистрация: 04.09.2005
Сообщений: 14,014
Написано 6,798 полезных сообщений
(для 20,932 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

А вот было бы интересно узнать: информация где-то почерпнута или получена аналитическим путём (в принципе, довольно-таки ожидаемый формат).
деление на 32 - круто. Округление размеров файлов - не очень круто, в общем случае получается не только не архив, но и наоборот.
__________________
http://nabatchikov.com
Мир нужно делать лучше и чище. Иначе, зачем мы живем? tormoz
А я растила сына на преданьях
о принцах, троллях, потайных свиданьях,
погонях, похищениях невест.
Да кто же знал, что сказка душу съест?
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Кирпи4 (22.01.2015)
Старый 22.01.2015, 18:44   #4
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: 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, два байта терялись и ломали остальные данные. После поправки, всё встало на свои места:
__________________


(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
Arton (22.01.2015), Gector (22.01.2015), Igor (23.01.2015), St_AnGer (23.01.2015)
Старый 22.01.2015, 18:46   #5
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

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


(Offline)
 
Ответить с цитированием
Эти 2 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
Gector (22.01.2015), St_AnGer (23.01.2015)
Старый 23.01.2015, 09:02   #6
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: 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-секции и нарисовать их, уже можно разобрать родные просторы и пустить скупую слезу:
__________________


(Offline)
 
Ответить с цитированием
Эти 6 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
ABTOMAT (23.01.2015), ARA (23.01.2015), Arton (23.01.2015), Gector (23.01.2015), impersonalis (23.01.2015), St_AnGer (23.01.2015)
Старый 23.01.2015, 09:08   #7
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

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


__________________


(Offline)
 
Ответить с цитированием
Эти 13 пользователя(ей) сказали Спасибо Кирпи4 за это полезное сообщение:
ABTOMAT (23.01.2015), Артем Валерьевич (18.01.2016), Android (25.01.2015), ARA (23.01.2015), Gector (23.01.2015), Igor (23.01.2015), impersonalis (23.01.2015), Mr_F_ (23.01.2015), pax (23.01.2015), Randomize (23.01.2015), SBJoker (23.01.2015), St_AnGer (23.01.2015), Жека (23.01.2015)
Старый 23.01.2015, 11:07   #8
Igor
Мастер
 
Аватар для Igor
 
Регистрация: 03.05.2010
Адрес: Подмосковье
Сообщений: 1,217
Написано 436 полезных сообщений
(для 784 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

Это офигенно. Если нужна будет помощь - пиши. Я бы с шейдерами поигрался или с алгоритмами для движения автомобилей (В самой игре они могут исчезнуть, если просто отвернуться, это не труЪ, я за более реалистичную симуляцию)
__________________
О¯О ¡¡¡ʁɔvʎнdǝʚǝdǝu dиW
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Кирпи4 (23.01.2015)
Старый 23.01.2015, 11:43   #9
Nex
Гигант индустрии
 
Аватар для Nex
 
Регистрация: 13.09.2008
Сообщений: 2,892
Написано 1,185 полезных сообщений
(для 3,298 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

Надо запрогать возможность плавать.
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Кирпи4 (23.01.2015)
Старый 23.01.2015, 14:11   #10
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

Сообщение от Nex Посмотреть сообщение
Надо запрогать возможность плавать.
Оригинальные наборы анимаций для педов содержат только один вид плавания - топориком
__________________


(Offline)
 
Ответить с цитированием
Старый 23.01.2015, 14:36   #11
ABTOMAT
Ференька
 
Аватар для ABTOMAT
 
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,726
Написано 5,448 полезных сообщений
(для 15,644 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

По такому случаю можно из SA взять (ЕМНИП там формат моделей обратно совместим, так что в целом наверное можно заодно и его поддержку запилить).
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**

* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена

(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Кирпи4 (23.01.2015)
Старый 25.01.2015, 19:25   #12
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

Затащил Git для проекта:
https://github.com/clashbyte/openvice
__________________


(Offline)
 
Ответить с цитированием
Старый 25.01.2015, 21:17   #13
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,050 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

Молодец! Ностальгия, я когда-то так с мафией возился, тоже сначала вертексы вытягивал, потом уже нормальные модели, потом и скин, анимки... всё это у меня в виде допотопных тулз на блице/с++ и скриптов к максу, последние можно качать с фансайтов. Может тоже как-нибудь open проект замутить)...
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Сообщение было полезно следующим пользователям:
Кирпи4 (25.01.2015)
Старый 26.01.2015, 08:28   #14
Кирпи4
Социал-сычевист
 
Аватар для Кирпи4
 
Регистрация: 24.06.2011
Сообщений: 611
Написано 342 полезных сообщений
(для 1,357 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

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


(Offline)
 
Ответить с цитированием
Старый 26.01.2015, 12:06   #15
Mr_F_
Терабайт исходников
 
Аватар для Mr_F_
 
Регистрация: 13.09.2008
Сообщений: 3,947
Написано 2,189 полезных сообщений
(для 6,050 пользователей)
Ответ: OpenVice, или садо-мазо реверс-инженеринг

Насколько я помню, там возможностей было в разы меньше чем в вайсе.
мафия менее аркадная, физика и система повреждений там в разы лучше была, перезарядка честная, даже гильзы с пола не исчезали, к графену подходили более основательно - лайтмапы хорошие были, интерьеры выглядели на порядок лучше, можно даже было честные отражающие зеркала создавать (есть даже моды с тачками с рабочими зеркалами заднего вида), нормальные тени от челов падали, а не пятнышки... в общем гта меня никогда не цепляло, всегда казалось игрушечной аркадкой оно мне, а вот мафия была "с душой" и "фсё как в риале!!11", вообще она во многом меня сподвигла на геймдев.
Но не будем холиварить)
__________________
бложик | geom.io | твиттер | faded | демо 1 2 | роботы | лайтмаппер
(Offline)
 
Ответить с цитированием
Эти 4 пользователя(ей) сказали Спасибо Mr_F_ за это полезное сообщение:
ABTOMAT (26.01.2015), Кирпи4 (26.01.2015), Igor (26.01.2015), Nex (26.01.2015)
Ответ


Опции темы

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


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


vBulletin® Version 3.6.5.
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
Перевод: zCarot
Style crйe par Allan - vBulletin-Ressources.com