March 28, 2024, 17:58
bigger smaller reset     1020px Wide width Full width Reset   * *

Gildor's Forums

  Homepage Facebook Read news on Twitter Youtube channel Github page
Welcome, Guest. Please login or register.
Did you miss your activation email?

« previous next »
Print
Author Topic: Двоичное представление чисел на платформе XBOX360  (Read 6315 times)
destrator
Newbie
*
Posts: 20


View Profile
« on: April 24, 2011, 17:26 »

Добрый день. Сегодня занялся изучением UE3 для XBOX360. Сейчас пишу распаковщик для конфигурационных пакетов GoW2 и заметил пару интересных деталей.
1) Величины числа файлов, секций и записей сохранены как DWORD Big Endian.
2) Величины длин имен файлов файлов, секций и записей сохранены как stored_value = 0xFFFFFFFF - real_value + 1; где real_value - реальное значение длины строки, + 1 - коррекция длины с учетом '\0', а stored_value - значение, сохраненное в файле. Форма двоичной записи опять же - Big Endian.

Собственно, вопросы:
- Для всех ли форматов данных UE3 для XBOX360 используется Big Endian представление?
- Знакома ли Вам форма хранения чисел, применяемая для записи длин строк, описанная выше в п.2?
« Last Edit: April 24, 2011, 17:28 by destrator » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #1 on: April 24, 2011, 18:09 »

Добрый день.
- Для всех ли форматов данных UE3 для XBOX360 используется Big Endian представление?
Скорее всего - да. Внутри пакетов порядок байтов полностью определяется идентификатором пакета: Unreal Engine читает первые 4 байта и по ним определяет - надо переставлять байты или нет. Unreal-у всё равно, какой порядок байтов - он справляется с обоими. Игра об этом вообще не знает - она просто просит прочитать INT, String и т.п. Перестановка байтов в cooked файлах делается только из-за того, что на консолях перестановка байтов сильно тормозит загрузку (из-за специфики процессора).
Quote
- Знакома ли Вам форма хранения чисел, применяемая для записи длин строк, описанная выше в п.2?
Конечно. Здесь не FFFFFFFF-чтото, здесь самое обыкновенное отрицательное число в дополнительном коде Wink Положительная длина указывает на ANSI-строку, отрицательное - на Unicode.
Logged
destrator
Newbie
*
Posts: 20


View Profile
« Reply #2 on: April 24, 2011, 18:46 »

Все ясно. Спасибо.
Logged
Skykila
Global Moderator
Sr. Member
*****
Posts: 266



View Profile
« Reply #3 on: April 24, 2011, 20:45 »

Вообще XBOX360 использует Big Endian.
Logged

I have the simplest tastes. I am always satisfied with the best.
Oscar Wilde
destrator
Newbie
*
Posts: 20


View Profile
« Reply #4 on: April 24, 2011, 20:59 »

Хех, конфиги распаковались Smiley Правда их оказалось гораздо меньше, чем я ожидал. Скажем, отсутствует файл "Engine\Config\Xenon\XenonEngine.ini", необходимый для запуска игры с XBOX360-контентом на PC Sad

И еще было бы неплохо найти игру, наиболее близкую по внутренним форматам к GoW2. Вам, кстати, не попадалась какая-нибудь игра на EU3 для PC, имеющая папку GearGame? Smiley
« Last Edit: April 24, 2011, 21:01 by destrator » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #5 on: April 24, 2011, 21:17 »

Quote
Скажем, отсутствует файл "Engine\Config\Xenon\XenonEngine.ini"
У меня есть подозрение, что все конфиги "слиты" в один.
Quote
И еще было бы неплохо найти игру, наиболее близкую по внутренним форматам к GoW2.
UDK Smiley Gears of War использует немодифицированный движок. Вернее, все модификации попадают в общий движок.
Quote
Вам, кстати, не попадалась какая-нибудь игра на EU3 для PC, имеющая папку GearGame?
От имени папки ничего не зависит.
Logged
destrator
Newbie
*
Posts: 20


View Profile
« Reply #6 on: April 24, 2011, 21:43 »

Quote
У меня есть подозрение, что все конфиги "слиты" в один.
Нет, их много Smiley Но их набор отличается от того, что на PC. Скажем в папку Engine распаковались только файлы "Localization\%LANG_ID%"\*.ini". И больше ничего Sad

Quote
Gears of War использует немодифицированный движок. Вернее, все модификации попадают в общий движок.
Что же, будем ковырять его Smiley
Quote
От имени папки ничего не зависит.
Ну почему же? Сразу после запуска модуль GoW потребовал файл WarGame\Config\DefaultEngine.ini. А для GoW2 используется папка GearGame. Это, конечно, можно поправить, скормив ему самописный DefaultEngine.ini с переадресацией на GearGame\Config\Xe-GearEngine.ini. Но мне хотелось бы обойтись минимальными манипуляциями с конфигами Smiley Мало ли, какие там еще есть зависимости, пока у меня модуль падает, не успев написать ни одного диагностического сообщения. Что-то я делаю не так Sad

P.S. У Вас случайно PDB от какой-нибудь версии GoW не завалялся? Smiley

Еще возник ворос: upk и xxx - это одно и то же с разными расширениями или, все же, они чем-то отличаются?
« Last Edit: April 24, 2011, 21:52 by destrator » Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #7 on: April 24, 2011, 21:52 »

P.S. У Вас случайно PDB от какой-нибудь версии GoW не завалялся? Smiley
У меня нет ни одного pdb ни от одной игры. И ни у кого кроме разработчиков нет. Сам бы не против раздобыть Smiley

Советую почитать:
http://udn.epicgames.com/Three/ContentCooking.html
« Last Edit: April 24, 2011, 21:55 by gildor » Logged
destrator
Newbie
*
Posts: 20


View Profile
« Reply #8 on: April 24, 2011, 22:18 »

Quote
У меня нет ни одного pdb ни от одной игры. И ни у кого кроме разработчиков нет. Сам бы не против раздобыть Smiley
Жаль Sad Иногда разработчики по оплошности включают pdb в дистрибутив, как это было с Tomb Raider Universary и  Legend. Правда сами .exe они запаковали (Securom, если не ошибаюсь). Также pdp поставляется с Unity (engine) для отладочных целей. Причем не кастрированные, а со всеми именами (включая аргументов функций и локальных переменных). Если иметь хороший дизассемблер и кучу времени, то исходный код Unity можно восстановить 1:1.

Вот я и подумал, что, быть может, эпики случайно положили wargame.pdb в один из своих дистрибутивов Smiley

Quote
Большое спасибо за ссылку. Весьма познавательно. Особенно заинтересовало это:
Quote
By default only packages that have a newer date than the cooked package's date will be recooked, unless overridden by commandline options.
Выходит, что пакеты с контентом можно пересобирать (recook). Надо будет с этим разобраться...
[/quote]
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #9 on: April 24, 2011, 23:33 »

Жаль Sad Иногда разработчики по оплошности включают pdb в дистрибутив, как это было с Tomb Raider Universary и  Legend. Правда сами .exe они запаковали (Securom, если не ошибаюсь). Также pdp поставляется с Unity (engine) для отладочных целей. Причем не кастрированные, а со всеми именами (включая аргументов функций и локальных переменных). Если иметь хороший дизассемблер и кучу времени, то исходный код Unity можно восстановить 1:1.
Ну, Unity меня абсолютно не интересует. Волей злой судьбы я сейчас на ней работаю - удовольствие ниже среднего. Ну да это так ... личное мнение.
Quote
Вот я и подумал, что, быть может, эпики случайно положили wargame.pdb в один из своих дистрибутивов Smiley
В Epic Games балбесов нет Smiley
Logged
destrator
Newbie
*
Posts: 20


View Profile
« Reply #10 on: May 07, 2011, 13:42 »

Итак, продолжая исследование UE3, я натолкнулся на одну интересную деталь. В исходном коде сценариев наличествуют блоки cpptext, содержащие код на C++. Означает ли это, что после компиляции сценария этот код будет скомпилирован в нативные инструкции целевой платформы?

Если да, то получается, что сборки сценариев для xbox 360 содержат код для PowerPC, т.е. для процессора Xenon, и не могут быть использованы для движка, собранного для PC. Печально Sad
Logged
Gildor
Administrator
Hero Member
*****
Posts: 7978



View Profile WWW
« Reply #11 on: May 07, 2011, 16:26 »

Нет, это неверно.
Из uc-файлов движок генерит u-файлы со скомпилированными скриптами и h-файлы с объявлением структур данных для возможного использования этих классов из C++. cpptext и structcpptext попадают в эти h-файлы.
Logged
destrator
Newbie
*
Posts: 20


View Profile
« Reply #12 on: May 07, 2011, 17:07 »

Ясно, выходит, что все не так уж страшно  Smiley
Logged
Print 
« previous next »
Jump to:  

Powered by SMF | SMF © 2006-2009, Simple Machines LLC
Leviathan design by Bloc | XHTML | CSS