To give you all an idea, here is the email I sent regarding stunned movement:
Hello! I'm sure you all are aware of the issue where stunned movement is higher than intended when moving diagonally (when forwardmove > 0 && sidemove > 0), as there was a reverted patch which targeted this issue.
I'm not exactly sure what you all tried, but I know that it was reverted due to it causing all stuns to be much slower than intended even in the previously non-broken case, unless I misunderstood the issue. So apologies if the following suggestion is redundant.
I have found that this bug stems from when CheckParameters() is called. CheckParameters() scales diagonal movement down, such that the hypotenuse of forward move and side move does not exceed max speed. However, within ProcessMovement, this is done AFTER StunMove(), in PlayerMove(). So, the stunned hypotenuse of forward move and side move is already lower than max speed, so the extent is not clamped, and thus the player has the "room" to increase their max speed by moving along a hypotenuse (c > a, c > b, c = sqrt(a^2 + b^2)).
So, essentially, the root of the change is to call CheckParameters() within CTFGameMovement::ProcessMovement(), before StunMove() and after ChargeMove(), and add a if !defined guard to CGameMovement::PlayerMove() around for TF_DLL and TF_CLIENT_DLL around CheckParameters() to skip calling it again. I personally didn't see issues calling it before ChargeMove() either, since ChargeMove() forces forward speed to tf_max_charge_speed, it doesn't really matter.
While testing this, I found another bug with the baby face's blaster. Because of how HighMaxSpeedMove() works, it boosts the forward move and side move to be high enough to drive movement at the intended velocity. However, when under stunned movement, forward move and side move change, so HighMaxSpeedMove() never boosts the speed.
To resolve this, you need to call HighMaxSpeedMove() before CheckParameters() and StunMove(), so that the base forward move and side move value can be boosted for further changes by CheckParameters() (to limit the hypotenuse) and StunMove() (to scale down forward move and side move).
With these changes, a 0.6 slow (as applied by the Natascha at close range), slows down a full charge BFB Scout from 520 to 208 in all directions (40% of 520), as intended and proper! And of course, normal Scout speed is slowed from 400 to 160 in all directions (40% of 400). You can still temporarily boost your speed very slightly by circle strafing, but fixing that would require changing max speed and I think that would change the meaning of stunned movement (or else max speed would have probably been changed in the first place). This was also a problem in the previous iteration, so even if unintentional, these changes are an improvement over the previous state as far as I can see.
If you are wondering, the GrapplingHookMove() code does not get affected by this order change, since it sets max speed tf_grapplinghook_move_speed to and forward and side move to 0.
Please let me know if you have any further questions and comments about the fix.