GXT (GTA 4) — различия между версиями
Материал из GTAModding.ru
VcSaJen (обсуждение | вклад) |
Sergeanur (обсуждение | вклад) м (→Алгоритм вычисления хэша строки) |
||
(не показаны 3 промежуточные версии 3 участников) | |||
Строка 7: | Строка 7: | ||
Для вычисления хэша используется следующая разновидность алгоритма [http://en.wikipedia.org/wiki/Hash_table#Choosing_a_good_hash_function Jenkins One-at-a-time hash]: | Для вычисления хэша используется следующая разновидность алгоритма [http://en.wikipedia.org/wiki/Hash_table#Choosing_a_good_hash_function Jenkins One-at-a-time hash]: | ||
<source lang="cpp"> | <source lang="cpp"> | ||
− | + | DWORD GetHash(char *szKeyName) | |
− | + | { | |
− | + | DWORD hash = 0; | |
− | + | BOOL bQuote = FALSE; | |
− | + | char ch; | |
− | + | if(*szKeyName == '"') | |
− | + | { | |
− | + | bQuote = TRUE; | |
− | + | szKeyName++; | |
− | + | } | |
− | + | ch = *szKeyName; | |
− | + | while(ch) | |
− | + | { | |
− | + | if(bQuote && (ch == '"')) break; | |
− | + | ch = tolower(ch); | |
− | + | if(ch == '\\') ch = '/'; | |
− | + | hash = (hash + (ch)) * 1025; // 0x0401 | |
− | + | hash = hash ^ (hash >> 6); | |
− | + | ch = *++szKeyName; | |
− | + | } | |
− | + | hash *= 9; | |
− | + | hash = ((hash >> 11) ^ hash) * 32769; // 0x8001 | |
− | + | return hash; | |
− | + | } | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
</source> | </source> | ||
Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы: | Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы: | ||
Строка 53: | Строка 46: | ||
В текст GXT можно вставлять различные теги, которые изменяют цвет последующего текста или вставляют различные объекты в текст. Теги отгораживаются с двух сторон знаками ~ (тильда), например: ~INPUT_JUMP~ и состоят из знаков латинского алфавита, цифр и знака подчёркивания. | В текст GXT можно вставлять различные теги, которые изменяют цвет последующего текста или вставляют различные объекты в текст. Теги отгораживаются с двух сторон знаками ~ (тильда), например: ~INPUT_JUMP~ и состоят из знаков латинского алфавита, цифр и знака подчёркивания. | ||
===Теги вставки скриптовых значений=== | ===Теги вставки скриптовых значений=== | ||
− | {| {{Таблица}} | + | {| {{Таблица}} class="collapsible collapsed" |
!Тег | !Тег | ||
!Что вставляет | !Что вставляет | ||
Строка 67: | Строка 60: | ||
|} | |} | ||
===Теги изменения цвета=== | ===Теги изменения цвета=== | ||
− | {| {{Таблица}} | + | {| {{Таблица}} class="collapsible collapsed" |
!Цвет | !Цвет | ||
!Тег | !Тег | ||
Строка 184: | Строка 177: | ||
===Теги кнопок геймпада=== | ===Теги кнопок геймпада=== | ||
В ПК-версии осталась возможность вставлять в текст значки кнопок геймпада Xbox360: | В ПК-версии осталась возможность вставлять в текст значки кнопок геймпада Xbox360: | ||
− | {| {{Таблица}} | + | {| {{Таблица}} class="collapsible collapsed" |
!Рисунок | !Рисунок | ||
!Тег | !Тег | ||
Строка 352: | Строка 345: | ||
|[[Изображение:lb_butt.png]] | |[[Изображение:lb_butt.png]] | ||
|~PAD_LB~ | |~PAD_LB~ | ||
− | |Левый | + | |Левый курок |
|Заменяется на кл. E | |Заменяется на кл. E | ||
|- | |- | ||
Строка 362: | Строка 355: | ||
|[[Изображение:rb_butt.png]] | |[[Изображение:rb_butt.png]] | ||
|~PAD_RB~ | |~PAD_RB~ | ||
− | |Правый | + | |Правый курок |
|Заменяется на кл. Q | |Заменяется на кл. Q | ||
|- | |- | ||
Строка 385: | Строка 378: | ||
|Да? | |Да? | ||
|} | |} | ||
+ | |||
===Теги игровых клавиш=== | ===Теги игровых клавиш=== | ||
{{Шаблон:Заготовка}} | {{Шаблон:Заготовка}} | ||
− | {| {{Таблица}} | + | {| {{Таблица}} class="collapsible collapsed" |
!Тег | !Тег | ||
!Функция | !Функция |
Текущая версия на 16:48, 5 октября 2013
Бинарные файлы с расширением .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) { if(bQuote && (ch == '"')) break; ch = tolower(ch); if(ch == '\\') ch = '/'; hash = (hash + (ch)) * 1025; // 0x0401 hash = hash ^ (hash >> 6); ch = *++szKeyName; } hash *= 9; hash = ((hash >> 11) ^ hash) * 32769; // 0x8001 return hash; }
Хэш строки вычисляется из идентификатора, представляющего собой ASCIIZ строку переменной длины (предположительно до 32 байт). В идентификаторе допускаются следующие символы:
- заглавные латинские буквы ( A-Z )
- символ подчеркивания ( _ )
Перед вычислением хэша идентификатор приводится к нижнему регистру.
Примеры идентификаторов:
BLISTA GERV4_AIDS_86 PB_MISC_02
Теги
В текст GXT можно вставлять различные теги, которые изменяют цвет последующего текста или вставляют различные объекты в текст. Теги отгораживаются с двух сторон знаками ~ (тильда), например: ~INPUT_JUMP~ и состоят из знаков латинского алфавита, цифр и знака подчёркивания.
Теги вставки скриптовых значений
Тег | Что вставляет |
---|---|
~1~ | Вставляет целое число (Скриптовые функции PRINT_HELP_FOREVER_WITH_NUMBER, PRINT_HELP_WITH_NUMBER, PRINT_WITH_2_NUMBERS, PRINT_WITH_2_NUMBERS_NOW, PRINT_WITH_NUMBER, PRINT_WITH_NUMBER_BIG, PRINT_WITH_NUMBER_NOW и др.) |
~a~ | Вставляет GXT-строку (Скриптовые функции PRINT_HELP_FOREVER_WITH_STRING, PRINT_HELP_FOREVER_WITH_STRING_NO_SOUND, PRINT_HELP_WITH_STRING, PRINT_HELP_WITH_STRING_NO_SOUND, PRINT_STRING_IN_STRING, PRINT_STRING_IN_STRING_NOW и др.) |
~e~ | Вставляет литеральную строку (Скриптовые функции PRINT_STRING_WITH_LITERAL_STRING_NOW и др.) |
Теги изменения цвета
Цвет | Тег | Примечание |
---|---|---|
~b~ | Имя друга или машина | |
~c~ | На другом языке | |
~g~ | Предмет | |
~h~ | Выделение слов | |
~l~ | ||
~m~ | ||
~p~ | ||
~r~ | Враг | |
~s~ | Обычный цвет | |
~w~ | Обычный цвет | |
~y~ | Название места | |
~COL_NET_1~ | ||
~COL_NET_2~ | ||
~COL_NET_3~ | ||
~COL_NET_4~ | ||
~COL_NET_5~ | ||
~COL_NET_6~ | ||
~COL_NET_7~ | ||
~COL_NET_8~ | ||
~COL_NET_9~ | ||
~COL_NET_10~ | ||
~COL_NET_11~ | ||
~COL_NET_12~ | ||
~COL_NET_13~ | ||
~COL_NET_14~ | ||
~COL_NET_15~ | ||
~COL_NET_16~ |
Теги вставки изображений
В GTA4 в текст можно вставить значки радара тегом ~BLIP_НомерЗначка~, например тег ~BLIP_74~ вставит в текст значок радара . Номера значков можно узнать из статьи Иконки радара.
Теги кнопок геймпада
В ПК-версии осталась возможность вставлять в текст значки кнопок геймпада Xbox360:
Теги игровых клавиш
Другие теги
- ~z~ - Применяется, если текст - реплика диалога
- ~x~ - Неизвестно. Применяется всегда вместе с ~z~