GXT (GTA 4)

Материал из GTAModding.ru
Версия от 01:03, 5 февраля 2009; AleX AciD (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

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

Формат .gxt файлов для GTA 4 идентичен формату файлов для GTA San Andreas. Основное отличие состоит в алгоритме вычисления хэша строки, а также в длине и наборе символов в идентификаторах.

Алгоритм вычисления хэша строки

Для вычисления хэша используется следующая разновидность алгоритма Jenkins One-at-a-time hash:

DWORD GetHash(char *szKeyName)
{
    DWORD hash = 0;
    BOOL bQuote = FALSE;
    char ch;
    if(*szKeyName == '"')
    {
        bQuote = TRUE;
        szKeyName++;
    }
    ch = *szKeyName;
    while(ch != '\0')
    {
        if(bQuote != FALSE)
        {
            if(ch == '"')
                break;
        }
        if((ch >= 'A') && (ch <= 'Z'))  // make lowercase
            ch += 0x20;
        else if(ch == '\\')
            ch = '/';
        hash = (hash + (ch)) * 1025;    // 0x0401
        hash = hash ^ (hash >> 6);
        szKeyName++;
        ch = *szKeyName;
    }
    hash *= 9;
    hash = ((hash >> 11) ^ hash) * 32769;   // 0x8001
    return hash;
}

Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы:

  • заглавные латинские буквы ( A-Z )
  • символ подчеркивания ( _ )

Перед вычислением хэша идентификатор приводится к нижнему регистру.

Примеры идентификаторов:

BLISTA
GERV4_AIDS_86
PB_MISC_02