Ресурсы Episodes From Liberty City
#61
Отправлено 01 September 2009 - 09:05
#62
Отправлено 03 September 2009 - 21:13
#63
Отправлено 10 September 2009 - 08:35
#64
Отправлено 11 September 2009 - 10:24
#65
Отправлено 11 September 2009 - 15:26
Сообщение отредактировал Deep: 11 September 2009 - 16:00
#66
Отправлено 11 September 2009 - 16:15
Да, это я, кстати таки ещё 3-4 миссии достал, скоро продолжу перевод. Покамисть Rockstar перстали закрывать видео с прохождением, может быть и будет полное)Если я не ошибаюсь, это вы планировали сделать видеопрохождение с русским переводом? (видел раздачу на torrents.ru)
Хорошая идея, только вот желающих не особо много записать геймплей.
#67
Отправлено 12 September 2009 - 11:37
#68
Отправлено 28 September 2009 - 15:03
#69
Отправлено 28 September 2009 - 18:31
#70
Отправлено 29 September 2009 - 10:47
Есть pgBase с загрузкой *.wrd, но этого недостаточно чтобы понять как сделать то же самое, скажем, для моделей.лично я очень ждал (и жду дальше) обещанных нам тобой примеров на си++ по работе с ресурсами (чтение/запись и т.п.), ибо с си++ лично я не особо "на ты", и чтобы мне все полностью разобрать, как это все правильно делается, нужно много времени
Последним чем я занимался был WTD Builder, могу его выложить. Структура ресурса строится нормально, но вот флаги - столь старая и трудоемкая задача. Корректно их рассчитать можно только на С++, но можно взять и другой вариант рассчета с более большим расходом памяти (но отображением хоть нормальным). Для чтения моделей (именно не геометрии, а самой структуры CPU) все равно придется использовать C++.Большинство ресурсов разобрано до уровня полей. Где конверторы? (или все собираются ждать милостей от R* ? )
Фуф, вот это конечно получилось не хорошо. Все бы ладно, но я так и не смог нормально скомпилировать его Delphi-классы в совокупности с просмотрщиком карт (все апдейты ключевых юнитов стоят). В любом случае если надумаешь продолжать что-либо делать в этом направлении то я стану тоже.Good возлагал на нас с Dageron'oм большие надежды..
#71
Отправлено 29 September 2009 - 12:30
#72
Отправлено 29 September 2009 - 15:49
Все точно также, только надо добавить вместо grcTexturePC описание соответствующего класса.Есть pgBase с загрузкой *.wrd, но этого недостаточно чтобы понять как сделать то же самое, скажем, для моделей.
Впрочем, в свежих исходниках у меня слегка поправлены классы указателей, и там дополнительного кода вообще не нужно (вернее, он может понадобиться только в том случае, когда есть циклические указатели).
Проблемы две: во-первых, я с этим кодом провозился столько, что сейчас на него уже глаза не смотрят. во-вторых, образовалась большая куча исходников, которые нужно собрать вместе во что-то законченное (ресурсные либы, компилятор и т.д.), но нет ни времени, ни сил (все это найдется через какое-то время, но точные сроки пока не ясны).
Вообще, честно говоря, есть у меня проблема - когда один и тот же код приходится переписывать пять раз - это напрягает так, что начинает сказываться на всем. На следующей неделе по работе придется брать переписанный четыре раза код, и вставлять его в новый проект (переписывая по ходу). Хочется чего-то нового, чтобы посмотреть на него, воодушевиться и замучить-таки вещи, которые давно обещал.
В -дцатый раз: нормальное построение структуры ресурса включает в себя и генерацию флагов. Если из структуры ресурса однозначно не следуют значения флагов - говорить о корректном построении структуры ресурса - это, мягко говоря, преувеличение. (Структура ресурса - это не только сами объекты, но и их расположение в памяти)Последним чем я занимался был WTD Builder, могу его выложить. Структура ресурса строится нормально, но вот флаги - столь старая и трудоемкая задача. Корректно их рассчитать можно только на С++, но можно взять и другой вариант рассчета с более большим расходом памяти (но отображением хоть нормальным). Для чтения моделей (именно не геометрии, а самой структуры CPU) все равно придется использовать C++.
Т.е., из этого следует, что ресурсная библиотека должна не только заниматься чтением/записью ресурса, но и менеджментом его внутренней структуры. В простейшем варианте: вызвали функцию чтения ресурса - получили объект (всю структуру) и дальше работаем с ним как с read-only (иначе начнутся проблемы с памятью). В функцию записи скармливается собранная полная структура, а дальше она копируется и в ней делаются необходимые перестановки. Минус варианта - в коде, работающем с такой библиотекой придется учитывать все структуры (типы полей, выравнивания и т.д.)
В более сложном варианте, должен быть API для работы не только с ресурсом в целом, но и с отдельными его компонентами. Здесь нужно подумать, как это все уложить на набор вызовов, которые можно использовать из любого языка (не закладываясь на объекты, шаблоны и прочий syntax sugar). Завтра выложу свежую баз - в ней я пометил еще несколько десятков автоматически сгенерированных функций - можно посмотреть и ужаснуться тому, сколько всего делает компилятор по своей инициативе.
Что касается коллизий и объектов - все просто: никто не мешает хранить отдельно коллизии на объекты и собирать их в общий wbn при сборке карты. В большинстве случаев, кол объекта можно тупо добавить в общий композит, не трогая внутренней структуры (при необходимости, пересчитывая AABB композита).
Ладно, это была лирика. А теперь несколько советов по общему подходу к делу.
Задач, на текущий момент много и даже слишком много. Если не получается одна - можно взяться за следующую. С одной стороны, не получается сидеть без дела, с другой стороны - рано или поздно, что-то получится. А дальше, на ощущении победы можно браться за следующую.
На эту тему, была хорошая статья у Джоэла Спольски: http://russian.joelo...eAndMotion.html
И еще, к слову. Если что-то делается - не скромничайте, отписывайтесь. А то у меня возникает ощущение, что кроме меня никто ничего не делает, а это очень вредно сказывается на моральном духе (а у меня и так с ним сейчас проблемы - отходняк от последнего проекта)
#73
Отправлено 02 October 2009 - 02:11
[MEM] memory manager initalized FILE: 'C:/Users/.../Documents/Visual Studio 2008/Projects/openLibertyCity/Debug/loadingscreens.xtd' => dwMagick = 0x52534305, dwVersion = 7, dwFlags = 0xe04c0010 TRACE: [BlockMap::allocate] virtSize = 0x1000, physSize = 0x980000 TRACE: Processing Xenon resource ... TRACE: [pgStreamable::pgStreamable] (Xenon) in = 1746231, out = 9965568, status = 0 TRACE: 000: hash = 0x416b2526 (1024 x 1024) 'pack:/5_1.dds' TRACE: 001: hash = 0xd40f6f38 (1024 x 1024) 'pack:/5_2.dds' TRACE: 002: hash = 0xcf79f540 (1024 x 1024) 'pack:/7_2.dds' TRACE: 003: hash = 0x5b8aba5d (1024 x 1024) 'pack:/2_1.dds' TRACE: 004: hash = 0xe42eff6f (1024 x 1024) 'pack:/2_2.dds' TRACE: 005: hash = 0x4a69577a (1024 x 1024) 'pack:/3_1.dds' TRACE: 006: hash = 0x6eaa4599 (1024 x 1024) 'pack:/7_1.dds' TRACE: 007: hash = 0x10afbc9a (1024 x 1024) 'pack:/4_2.dds' TRACE: 008: hash = 0xb6c28fa4 (1024 x 1024) 'pack:/4_1.dds' TRACE: 009: hash = 0x9130f5c8 (1024 x 1024) 'pack:/8_1.dds' TRACE: 010: hash = 0x155d37df (1024 x 1024) 'pack:/8_2.dds' TRACE: 011: hash = 0x21cdc4ef (1024 x 1024) 'pack:/1_1.dds' TRACE: 012: hash = 0x4456d3f0 (1024 x 1024) 'pack:/3_2.dds' [MEM] memory manager terminated
Код который это выводит (загрузка xtd и вывод параметров текстур):
pgStreamable ps (pszFilename);
g_pStreamedResource = &ps;
x_pgDictionary<x_grcTexture> * xtd = new (ps.getData()) x_pgDictionary<x_grcTexture> (&ps);
DWORD dwTextureCount = xtd->m_data.m_wCount;
g_pStreamedResource = NULL;
for (DWORD i = 0; i < dwTextureCount; i++) {
DWORD h = *xtd->m_hashes.getElement(i);
printf ("TRACE: %03d: hash = 0x%08x (%04d x %04d) '%s'\n", i, h, xtd->m_data[i]->m_wWidth, xtd->m_data[i]->m_wHeight, xtd->m_data[i]->m_pszName);
}
Как уже говорилось, все обрабатывается автоматически, нужно только описывать структуры.
Для примера, grcTextureXenon (это весь код объекта, в нем отсутствует только swizzling (впрочем, он все равно будет в D3DTextureBase):
struct x_grcTexture : public x_pgBase {
x_grcTexture () {}
x_grcTexture (pgStreamable * pStreamable) : x_pgBase (pStreamable), m_pszName (pStreamable), m_d3dResource (pStreamable) {}
BYTE _f8;
BYTE _f9;
x_WORD _fA;
x_DWORD _fC;
x_DWORD _f10;
// >> grcTextureXenonProxy ends here
x_pgPtr<char> m_pszName;
x_pgPtr<x_D3DTextureBase> m_d3dResource;
x_WORD m_wWidth;
x_WORD m_wHeight;
x_DWORD _f20;
x_float _f24[6];
};
Все действительно страшные вещи находятся в pgPtr/pgObjectPtr/pgArray/pgObjectArray (вместе с pgStreamable - порядка 600 строк на обе платформы). Впрочем, реальная развлекуха начнется не на чтении, а на записи ресурса - я этот код еще не переносил в новую версию. К счастью, там тоже все будет в pgStreamable; в самих объектах будет по одной строке на каждый внутренний объект.
Собственно, к чему я так многословен: у кого-нибудь будут какие-нибудь мысли на предмет внешнего API к этому делу?
В каком виде это все отдавать во внешние программы и, что более важно, в каком виде принимать обратно.
PS. Порадовало, что код генерится в точности такой, как в игре. Это значит, что соответствующие классы воссозданы 1-в-1.
В связи с этим, есть идея-подозрение, что в R* вообще не заморачивались с бинарными форматами, а импортировали все из текста (как это выглядело в общем виде - можно посмотреть любой файл .tune). Возможно, что это будет оптимальный вариант?
Сообщение отредактировал listener: 02 October 2009 - 02:25
#74
Отправлено 02 October 2009 - 14:35
#75
Отправлено 02 October 2009 - 15:19
#76
Отправлено 04 October 2009 - 09:38
#77
Отправлено 11 October 2009 - 21:04
#78
Отправлено 12 October 2009 - 08:54
Ну, на буржуев в этом плане я бы надеяться не стал.
Здесь же - в данном конкретном вопросе тубе могут помочь три человека. Как минимум два из них - заняты. А характер вопроса такой, что ответить на него - создать повод для следующих вопросов.
OpenIV и SparkIV были написаны практически без использования XDK. По крайней мере, упаковка и распаковка ресурсов была сделана самостоятельно, без использования xcompress32. Я например, для распаковки используюю libmspack.
Не для того, чтобы обидеть, а для константации факта - отвечать человеку, который признается что не смог понять документацию на компилятор - это взвалить на себя дополнительный геморрой (чего совершенно не хочется делать).
Задача-то предельно проста: есть библиотека (с документацией на нее). Из нее нужно сделать dll. Все, что нужно сделать - это написать однострочные обертки к нужным функциям и объявить их экспортируемыми. В хелпах по MSVC это подробно описано (искать по слову dllexport). В хелпах по Delphi - тоже должно быть. (Если быть совсем честным, я не чувствую себя сейчас в адекватном настроянии для того, чтобы объяснять, как правильно читать хелпы).
------
Что касается текущего статуса, дела обстоят так.
Прошлую неделю, у меня был еще один небольшой проект, так что докода я практически не добирался. В выходные нормально отладил раскладку блоков. Убил сутки на то, чтобы разобраться с ошибкой раскладки, пока не выяснил, что в раскладке ошибок нет, а просто не получится на лету конвертировать структуры, если размер изменяется большую сторону. Это чуточку усложнит конвертер, но не сильно.
С записью ресурсов получается чуть больше возни, чем с чтением, но также достаточно красиво (5-6 строк на структуру + две-три строки на каждый указатель). Рабочая версия будет выложена, как только будет отлажена.
У кого-нибудь есть еще какие успехи?
Сообщение отредактировал listener: 12 October 2009 - 08:54
#79
Отправлено 12 October 2009 - 15:59
#80
Отправлено 13 October 2009 - 07:27
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 анонимных


Тема закрыта












