Привет всем! Как и обещал - как только разобрался с сессией, выкладываю статью по вскрытию игровых ресурсов. Начнем мы ковыряться в отечественной игрушке - YouAreEmpty.
Статья размещена на моем домашнем сайте, т.к. формат ее вышел за рамки блога. Вот ссылка на нее - Вскрытие игровых ресурсов на примере игры You Are Empty. Приятного чтения.

 

К сожалению мне пришлось остановить свои работы по раскапыванию форматов ассетов Need For Speed: Hot Pursuit. Сейчас я полностью занят подготовкой к весенней сессии и написанием магистерской работы. Так как времени из-за работы у меня и так мало, то его не хватает даже на подготовку к летней защите, не говоря уже о сторонних проектах.

Поэтому я выкладываю исходники своей утилиты. Возможно кому-то они пригодятся, может быть кто-то возьмется ее доделать, незнаю. Моя миссия выполнена - я расковырял бандлы и основные ресурсы (текстуры и модели). По моей документации Олег (автор ZModeller'а) написал фильтр для импорта моделей NFS:HP в свою утилиту.

В ближайшем будущем постараюсь выполнить свое обещание и написать статью о реверсе игровых ресурсов.

А вот и ссылка на репозиторий с исходниками - NFS:HP Explorer SVN

 

Нашел на просторах "интернетов" интересный файлик frsqrt.hh в котором собраны большинство способов вычисления обратного корня квадратного.
Вот цитата из комментария которая перечисляет присутствующие техники:

Optimisations for/by
    Altivec   : USE_RSQRT_ALTIVEC
    SSE/SSE2  : USE_RSQRT_SSE / USE_RSQRT_SSE2
    Lookup    : Lookup table approach by Ken Turkowski
                USE_RSQRT_LOOKUP
    Magic No. : Magic numbers for initial guess
                USE_RSQRT_MAGIC
    Fallback  : standard implementation via libm
                USE_RSQRT_LIBM

Соббсно ссылочка - http://www.hlnum.org/english/doc/frsqrt/frsqrt.hh

PS. Реализация из исходников Quake 3 здесь тоже присутствует ;)

Сборник pre-defined макросов

 C#, macros  Комментарии отключены
Авг 172009
 

Давно искал подобную штуку, и недавно таки наткнулся.
Классный обширный сборник всяческих pre-defined макросов.

Всем интересующимся - ссылка Pre-defined C/C++ Compiler Macros

Cпец-возможности GCC

 C#, GCC, IBM, Linux  Комментарии отключены
Апр 102009
 

На сайте IBM для разработчиков есть много полезного ( http://www.ibm.com/developerworks/ru/ ) :)
Вот и вчера тоже попалась очень занимательная статейка "Применение специальных возможностей GCC в ядре Linux" повествующая о некоторых особо интересных "финтах" компилятора GCC для языка C. Каждый такой "финт" сопровождается примером кода прямиком из ядра Linux, иллюстрируя полезность оных.
Даные "фичи" можно разделить условно на два типа: расширяющие функциональность языка; и помогающие компилятору в оптимизации кода.
После прочтения захотелось некоторые такие "фишки" и к нам в Visual Studio :)
Вобщем как всегда - приятного чтения!
Ссылка на статью - http://www.ibm.com/developerworks/ru/library/l-gcc-hacks/index.html

Фев 222009
 

Наверное у каждого программиста есть такие маленькие функции, которые не делают ничего сверхъестественного, однако сильно упрощают жизнь.
Вот и у меня есть. И решил я что по мере появления новых буду публиковать их у себя на блоге, авось кому пригодится.
Начну с сегодняшней маленькой функции. В моем движке fEngine есть конечно же класс строки, однако когда пишешь маленькие демонстрашки или просто тесты, не всегда удобно его целиком подключать. Вот и сегодня мне было лень его подключать к моей новой демке OpenGL 3.0, а нужно было всего-навсего заменить в строке все пробелы на символы перевода каретки. Таким образом родилась такая малютка:

template<int what, int to>
int change_char( int c ) { if ( what == c ) return to; return c; }

И с помощью нее задача была решена просто и елегантно:

std::transform( extensions.begin(), extensions.end(), extensions.begin(), change_char<' ','\n'> );

В будущем постараюсь выкладывать наиболее интересные такие "помогашки", и возможно, соберу свои бывшие и новые в один файл и выложу здесь.

Платформа 2009

 C#, Microsoft  Комментарии отключены
Фев 212009
 

4–5 Декабря в Москве прошла очередная, десятая ежегодная конференция от Micro$oft - "Платформа 2009. Определяя будущее". Лично на конференциия не присутствовал, но был заинтересован. Очень сильно интриговал тот факт, что на конференцию приедет выступить с докладами сам великий и могучий Марк Руссинович (профиль докладчика).
Особый интерес для меня как для программиста представлял доклад "C#. Взгляд в будущее", рассказывающий историю развития языка C# его зарождения в 1998-м году и появления в 2002-м году первой его версии 1.0, до версии 4.0 которая будет доступна в VisualStudio 2010.
Итак, чтоже такого интересного нас ждет в C# 4.0?
1)
Динамическая типизация объектов.
смысл в том, что мы можем напрямую сообщить компилятору что мы не знаем точного типа объекта, и что привязка к его методам должна быть выполнена в Run-Time. для этого введено новое ключевое слово dynamic :
То что раньше приходилось делать так:

object calc = GetCalculator();
Type calcType = calc.GetType();
object res = calcType.InvokeMember("Add",
BindingFlags.InvokeMethod, null,
new object[] { 10, 20 });
int sum = Convert.ToInt32(res);

Теперь можно сделать так:

dynamic calc = GetCalculator();
int sum = calc.Add(10, 20);

Сразу хочу заметить, что тем кто, в связи с Dynamic Dispatch, переживает за производительность, Micro$oft обещает реализовать эффективный Call Site Caching.

2) Параметры по умолчанию и именованные аргументы.
Некоторым это должно быть знакомо. Да! Такое есть в языке Objective-C, так что кто писал под MacOS удивлены не будут. Однако для C# это очень крутое нововведение. Смысл его в том, что можно пропускать дефолтные параметры, а также менять порядок передачи параметров. Вот простейший пример:

можем написать такую функцию

public void M(int x, int y = 5, int z = 7);

и она будет иметь такие варианты вызовов:

M(1, 2, 3); // обычным образом
M(1, 2); // опущен последний параметр z – тоже самое, что вызвать M(1, 2, 7)
M(1); // опущены 2 последних параметра - y и z – тоже самое, что вызвать M(1, 5, 7)

M(1, z: 3); // передача фактического значения по имени формального параметра - z
M(x: 1, z: 3); // передача двух значений по именам параметров - x и z
M(z: 3, x: 1); // аналогично предыдущему

3) Упрощенная работа с COM.
То чего всем так не хватало! Наконец у Micro$oft дошли руки. Встречайте - теперь вместо такой колбасни

object fileName = "Test.docx";
object missing = System.Reflection.Missing.Value;

doc.SaveAs(ref fileName,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing,
ref missing, ref missing, ref missing);

можем просто написать

doc.SaveAs("Test.docx");

Ура товарищи.

4) Ко-вариантность и контра-вариантность.
Обещают безопасную ко-вариантность. Предлагается статически проверяемая вариантность по месту определения, а также типы значений теперь всегда инвариантны

IEnumerable<int> != IEnumerable<object>

5) Компилятор как сервис.
Еще одна очень интересная штуковина в C#4.0 - это Evaluator - класс для компиляции и исполнения кода в Run-Time! Да здравствует скриптование! Программа во время выполнения может в зависимости от ситуации и параметров генерировать код, компилировать и выполнять его.

CSharpEvaluator ev = new CSharpEvaluator();
ev.Usings.Add("System");
ev.Eval("for (int i = 0; i < 10; ++i) Console.WriteLine(i * i);");

Было много еще всего вкусного. Рекомендую сходить на сайт http://platforma2009.ru и узнать больше.

© 2011 3D-Orange.com.ua
e-mail me

3D-Orange.com.ua is proudly powered by WordPress.
Suffusion theme by Sayontan Sinha