wrote:
Any corrections/ validation welcome.
"Then resulting value is rounded down." - It's rounded down to the nearest even number. Because the speed value on the client's side is always an even number. So, for example level 25 with strong haste has 398 speed, not 399. This is important, because you may sometimes expect to already reach certain "breakpoint" with haste or strong haste, but it turns out that you end up missing that one point.
The creature speed calculations seem incorrect. It looks like you took values from the original .mon files and tried to relate them to the client's side speed by adding 150, right? E.g. 70 + 150 = 220 for human, 155 + 150 = 305 for black knight etc. Speaking from my memory now, the actual server->client speed relation is n * 2 + 80. Which means that black knight's speed would be 390. This is also why speed value on the client's side is always an even number.
"Using Pythagoras a diagonal step should take 1.41x longer than an orthogonal one, but instead it takes 3 times longer!" - My guessing is that it is because of what you said after this. When you move a step, you are immediately on that square but need to wait the step duraton before moving again. They probably considered that moving a diagonal step is like moving two steps at once immediately, which is always* better than moving two steps one after the other. Imagine that you want to move to north-west and one step is supposed to take 0.5 second. If you do it orthogonally (west and north), you end up on your target square in 0.5 second (and can't move for another 0.5), but if you do it diagonally you end up there in 0 seconds. That's why they allowed it for the cost of 3 steps, rather than just 2 or even 1.41. But again, that's just my guessing.
* - of course, unless you are trying to avoid SDs with your moves ;)