Page about Rage of Mages

[ru] [en]  
[0] [1] [2]

 
  

Calculation of tile passing time

Author: Vladimir Chebotarev aka ex-lend
Categories: RoM 2, Technical

Использовано сокращение: 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):
CostLand0x08
CostGrass0x08
CostFlowers0x09
CostSand0x0E
CostCracked0x06
CostStones0x0C
CostSavanna0x0B
CostMountain0x10
CostWater0x08
CostRoad0x06

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

Discussion (0)