Добавлен , опубликован
Раздел:
Триггеры и объекты

Равкоды

Их можно увидеть в редакторе, нажав Ctrl+D, но что значат эти буковки и почему их обязательно четыре? Всё просто - равкоды это байтовое представление числа. Парсер встретив в положенном месте 0x27, который как в UTF-8, так и в ASCII обозначает одинарную кавычку, начинает читать байты, пока не встретит следующий 0x27.
Эти байты он впоследствии интерпретирует как беззнаковые целые, тобишь uint32.

Бинарные файлы

Большинство значений игра хранит в Little Endian, но для равкодов используется Big Endian.

Код

В JASS под равкоды выделены одинарные кавычки, что упрощает работу с ними.
// Все записи равнозначны:
call CreateUnit(Player(0), 'Hfoo', 0,0,0)
call CreateUnit(Player(0), 0x48666f6f, 0,0,0)
call CreateUnit(Player(0), $48666f6f, 0,0,0)
call CreateUnit(Player(0), 1214672751, 0,0,0)
В lua одинарные и двойные кавычки равноправны и поэтому придумали функцию FourCC, которая конвертирует строковое представление числа собственно в число.
-- Все записи равнозначны:
CreateUnit(Player(0), FourCC('Hfoo'), 0,0,0)
CreateUnit(Player(0), 0x48666f6f, 0,0,0)
CreateUnit(Player(0), 1214672751, 0,0,0)
Как и в C++ разрешён равкод с одним символом, тобишь такое выражение вполне валидно:
integer i = 'a' + 'b'

Геройские равкоды

В игре очень гениальная проверка равкода на принадлежность к герою:
BOOL cdecl jIsHeroUnitId(unsigned int a)
{
return (a1 >> 24) <= 'Z';
}
Это значит, что если первый символ равкода, находится в таблице символов выше Z, то игра воспримет его как героя. Что может привести к неожиданным последствиям, например к фаталам от функций GetUnit*Cost.
Таблица геройских символов
0x20 Space
0x21 ! Exclamation mark
0x22 " Quotation mark
0x23 # Number sign
0x24 $ Dollar sign
0x25 % Percent sign
0x26 & Ampersand
0x27 ' Apostrophe
0x28 ( Left parenthesis
0x29 ) Right parenthesis
0x2A * Asterisk
0x2B + Plus sign
0x2C , Comma
0x2D - Hyphen-minus
0x2E . Full stop or period
0x2F / Solidus or Slash
0x30 0 Digit Zero
0x31 1 Digit One
0x32 2 Digit Two
0x33 3 Digit Three
0x34 4 Digit Four
0x35 5 Digit Five
0x36 6 Digit Six
0x37 7 Digit Seven
0x38 8 Digit Eight
0x39 9 Digit Nine
0x3A : Colon
0x3B ; Semicolon
0x3C < Less-than sign
0x3D = Equal sign
0x3E > Greater-than sign
0x3F ? Question mark
0x40 @ At sign or Commercial at
0x41 A Latin Capital letter A
0x42 B Latin Capital letter B
0x43 C Latin Capital letter C
0x44 D Latin Capital letter D
0x45 E Latin Capital letter E
0x46 F Latin Capital letter F
0x47 G Latin Capital letter G
0x48 H Latin Capital letter H
0x49 I Latin Capital letter I
0x4A J Latin Capital letter J
0x4B K Latin Capital letter K
0x4C L Latin Capital letter L
0x4D M Latin Capital letter M
0x4E N Latin Capital letter N
0x4F O Latin Capital letter O
0x50 P Latin Capital letter P
0x51 Q Latin Capital letter Q
0x52 R Latin Capital letter R
0x53 S Latin Capital letter S
0x54 T Latin Capital letter T
0x55 U Latin Capital letter U
0x56 V Latin Capital letter V
0x57 W Latin Capital letter W
0x58 X Latin Capital letter X
0x59 Y Latin Capital letter Y
0x5A Z Latin Capital letter Z

Оптимизаторы

Особо хитрые оптимизаторы придумали защиту от глобального поиска по равкодам - разбить его на два числа. Но из-за особенностей кодировок, неподдерживаемые символы превращаются в 0x3F, тобишь в знак вопроса. Если пересохранить такой файл в большинстве программ, то изначальные значения перепишутся и всё сломается.
Помочь с этим может IntelliJASS. Если проблема для вас актуальна, то пишите в комментариях. Тогда я напишу статью, в какой последовательности переключать кодировки.

Конвертер

Собственно, ради чего всё и затевалось. Для удобного конвертирования равкодов был написан конвертер, который поможет легко и не принуждённо узнать любое представление числа и узнать, используется ли равкод игрой.

Полезные ссылки

`
ОЖИДАНИЕ РЕКЛАМЫ...
0
29
1 год назад
0
clojurmagictime, я б с удовольствием посмотрел, но на MacOS не запускается. Да и 0x нотации нет.
Загруженные файлы
0
18
1 год назад
0
Для андроида есть приложение HexDec, хорошо конвертит числа в равкоды и обратно. Проверял, конвертит корректно. Минус: нельзя скопировать/вставить результат/данные
0
29
1 год назад
0
clojurmagictime, добавил [Tool] ID Converter в полезные ссылки.
2
29
1 год назад
Отредактирован nazarpunk
2
Вышла новая версия!
Добавилась база из .slk, позволяющая узнать, использует ли игра равкод.
Загруженные файлы
0
23
1 год назад
0
Очень полезная штука

Лайкос заслуживает)
0
19
9 месяцев назад
0
Я так понял равкоды ускоряют твой код?
0
29
9 месяцев назад
0
Я так понял равкоды ускоряют твой код?
Нет, это просто разный формат записи чисел. Правда на чтение равкода в формате $aabbcc нужно меньше операций.
1
29
9 месяцев назад
1
Последние новости!
2
29
1 месяц назад
Отредактирован nazarpunk
2
Вышла новая версия!
Более подробно расписано чтение и добавлена графа про оптимизаторы.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.