SavПо поводу рейтинга: система периодически менялась, но в последних обновлениях HD-мода неочевидные элементы были практически исключены.
Рейтинг в лобби сейчас — просто ЭЛО-рейтинг с коэффициентом, зависящим от размера карты.
Правило изменения рейтинга в результате игры сейчас таково:
R1 += K*(RES - 1/(1 + 10^((R2 - R1)/400)))
R2 -= K*(RES - 1/(1 + 10^((R2 - R1)/400)))
Здесь R1 — рейтинг первого игрока, R2 — рейтинг второго игрока. RES — 1, если победил первый; 0.5, если ничья; 0, если победил второй.
Коэффициент K зависит от размера играемой карты:
K = 60 * ([ширина карты в клетках] * (1.5, если с подземельем) / (144 * 1.5)).
Например:
XL+U: K = 60
L+U: K = 45
XL-U: K = 40
L-U: K = 30
M-U: K = 20
На ХВ, кстати, немного другая формула. Есть ли разница?
Пусть R1 и R2 - начальные рейтинги игроков.
Коэффициенты разницы игроков в рейтинге вычисляются так:
f1=max(-1, min((R1-R2)/400, 1));
f2=max(-1, min((R2-R1)/400, 1));
где min и max - функции, возвращающие минимальное и максимальное из двух чисел.
Очки, даваемые за победу (WP) и поражение (LP), вычисляются так:
WP1=max(1, 16*(1+f1));
WP2=max(1, 16*(1+f2));
LP1=min(-1, 16*(-1+f1));
LP2=min(-1, 16*(-1+f2));
Если побеждает первый игрок, то
R1->R1+(int)WP2;
R2->R2+(int)LP1;
если побеждает второй игрок, то
R1->R1+(int)LP2;
R2->R2+(int)WP1;
если игра заканчивается вничью, то
R1->R1+(int)((WP2-WP1)/2+0.5);
R2->R2+(int)((WP1-WP2)/2+0.5);
где (int) - функция, возвращающая целую часть числа.