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 - проставление карты стоимостей, высот и т.д. |