Author: Vladimir Chebotarev aka ex-lend
Calculation of tile passing time
Использовано сокращение: tile_id === tid
Если tile_id от 0x1C0 до 0x2FF, то клетка не проходима вообще. В этом случае дальше можно не читать
Используются два вспомогательных массива:
char a540A6[0x40] = { 2, 3, 2, 4, 3, 4, 2, 2, 2, 2, 4, 4, 4, 4, ?, ?, 3, 5, 3, 3, 1, 3, 2, 4, 2, 2, 4, 2, 4, 4, ?, ?, 2, 3, 2, 4, 3, 4, 2, 4, 2, 2, 4, 2, 4, 4, ?, ?, 5, 5, 5, 5, 5, 5, 2, 2, 2, 2, 4, 4, 4, 4, ?, ? }; char a54126[0x10][2] = { {2, 1}, {5, 1}, {4, 1}, {7, 1}, {6, 1}, {5, 6}, {3, 7}, {8, 6}, {?, ?}, {?, ?}, {?, ?}, {?, ?}, {A, 1}, {?, ?}, {?, ?}, {?, ?} }; |
Значение a54126[][]
означает тип ландшафта:
1: land 2: grass 3: flowers 4: sand 5: cracked 6: stones 7: savanna 8: mountain 9: water A: road |
Для определения стоимости прохождения см. параметры Cost в файле map.reg
Стоимости по умолчанию (если не задана в map.reg):
CostLand | 0x08 |
CostGrass | 0x08 |
CostFlowers | 0x09 |
CostSand | 0x0E |
CostCracked | 0x06 |
CostStones | 0x0C |
CostSavanna | 0x0B |
CostMountain | 0x10 |
CostWater | 0x08 |
CostRoad | 0x06 |
Значение a540A6[tid & 0x3F]
означает соотношение разных типов ландшафта в одной клетке:
1: только a54126[(tid & 0x3C0) >> 6][1] 2: 3/4 a54126[(tid & 0x3C0) >> 6][1] и 1/4 a54126[(tid & 0x3C0) >> 6][0] 3: 1/2 a54126[(tid & 0x3C0) >> 6][1] и 1/2 a54126[(tid & 0x3C0) >> 6][0] 4: 1/4 a54126[(tid & 0x3C0) >> 6][1] и 3/4 a54126[(tid & 0x3C0) >> 6][0] 5: только a54126[(tid & 0x3C0) >> 6][0] |
Соответственно, стоимость прохождения формируется из стоимости прохождения соответствующих типов ландшафта с соответствующими весовыми коэффициентами.
Использована информация из:
allods.exe:0055E93D(tile_id, addr) - подпрограмма вычисления стоимости прохождения allods.exe:0055DF24 - заполнение вспомогательных массивов allods.exe:0055E616 - инициализация alm - проставление карты стоимостей, высот и т.д. |