@@ -269,6 +269,15 @@ namespace TriangleDrawing
269269 }
270270 right_was_pressed = right_pressed;
271271
272+ float adjustment_speed = 1 ;
273+
274+ // Like in HwDLL::FreeCamTick().
275+ auto buttons = cl.last_buttons ;
276+ if (buttons & IN_ALT1 )
277+ adjustment_speed *= 20 ;
278+ if (buttons & IN_DUCK )
279+ adjustment_speed /= 20 ;
280+
272281 auto view = cl.last_vieworg ;
273282 Vector forward, right, up;
274283 cl.pEngfuncs ->pfnAngleVectors (cl.last_viewangles , forward, right, up);
@@ -617,15 +626,15 @@ namespace TriangleDrawing
617626 if (left_pressed) {
618627 auto mouse_diff = mouse - left_pressed_at;
619628
620- auto amount = DotProduct (mouse_diff, saved_lmb_diff) * 0 .1f ;
629+ auto amount = DotProduct (mouse_diff, saved_lmb_diff) * 0 .1f * adjustment_speed ;
621630 auto new_repeats = static_cast <unsigned >(std::max (1 , saved_repeats + static_cast <int >(amount)));
622631 input.set_repeats (closest_edge_prev_frame_bulk_index, new_repeats);
623632 }
624633
625634 if (middle_pressed) {
626635 auto mouse_diff = mouse - middle_pressed_at;
627636
628- auto amount = DotProduct (mouse_diff, saved_mmb_diff) * 0 .1f ;
637+ auto amount = DotProduct (mouse_diff, saved_mmb_diff) * 0 .1f * adjustment_speed ;
629638 auto new_repeats = std::max (1 , saved_repeats + static_cast <int >(amount));
630639
631640 if (closest_edge_prev_frame_bulk_index + 1 < input.frame_bulks .size ()) {
@@ -643,7 +652,7 @@ namespace TriangleDrawing
643652 if (right_pressed && frame_bulk.GetYawPresent ()) {
644653 auto mouse_diff = mouse - right_pressed_at;
645654
646- auto amount = DotProduct (mouse_diff, saved_rmb_diff) * 0 .1f ;
655+ auto amount = DotProduct (mouse_diff, saved_rmb_diff) * 0 .1f * adjustment_speed ;
647656 auto new_yaw = saved_yaw + amount;
648657 if (frame_bulk.GetYaw () != new_yaw) {
649658 stale_index = closest_edge_prev_frame_bulk_index;
0 commit comments