@@ -2639,10 +2639,34 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
26392639 f0 = data -> slider .multiplier / 1000.0f ;
26402640 f0 = f0 * 100.0f / item -> param3 ;
26412641#if VERSION >= VERSION_PAL_BETA
2642- f32 inputHeld = (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) ? inputs -> leftrightheld * 0.2f : inputs -> leftrightheld ;
2642+ f32 inputHeld ;
2643+ if (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) {
2644+ s32 holdTime = g_Menus [g_MpPlayerNum ].xrepeattimer60 ;
2645+ if (holdTime > TICKS (840 )) {
2646+ inputHeld = inputs -> leftrightheld * 0.1f ; // After 14 seconds: faster
2647+ } else if (holdTime > TICKS (300 )) {
2648+ inputHeld = inputs -> leftrightheld * 0.8f ; // 5-14 seconds: medium
2649+ } else {
2650+ inputHeld = inputs -> leftrightheld * 0.05f ; // 0-5 seconds: slow
2651+ }
2652+ } else {
2653+ inputHeld = inputs -> leftrightheld ;
2654+ }
26432655 f0 = f0 + inputHeld * g_Vars .diffframe60freal ;
26442656#else
2645- f32 inputHeld = (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) ? inputs -> leftrightheld * 0.2f : inputs -> leftrightheld ;
2657+ f32 inputHeld ;
2658+ if (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) {
2659+ s32 holdTime = g_Menus [g_MpPlayerNum ].xrepeattimer60 ;
2660+ if (holdTime > TICKS (840 )) {
2661+ inputHeld = inputs -> leftrightheld * 0.1f ; // After 14 seconds: faster
2662+ } else if (holdTime > TICKS (300 )) {
2663+ inputHeld = inputs -> leftrightheld * 0.8f ; // 5-14 seconds: medium
2664+ } else {
2665+ inputHeld = inputs -> leftrightheld * 0.05f ; // 0-5 seconds: slow
2666+ }
2667+ } else {
2668+ inputHeld = inputs -> leftrightheld ;
2669+ }
26462670 f0 = f0 + inputHeld * g_Vars .diffframe60 ;
26472671#endif
26482672 f0 = item -> param3 * f0 / 100.0f ;
@@ -2662,7 +2686,10 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
26622686 f2 = f14 ;
26632687 }
26642688
2665- if ((item -> flags & MENUITEMFLAG_SLIDER_FAST ) == 0 && f2 < 40 ) {
2689+ // Threshold for ramping: 40 for normal, 82 for SLIDER_SLOW
2690+ s32 threshold = (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) ? 82 : 40 ;
2691+
2692+ if ((item -> flags & MENUITEMFLAG_SLIDER_FAST ) == 0 && f2 < threshold ) {
26662693 if (g_Menus [g_MpPlayerNum ].xrepeatmode != MENUREPEATMODE_SLOW ) {
26672694 index = index + inputs -> leftright ;
26682695 }
@@ -2676,16 +2703,14 @@ bool menuitemSliderTick(struct menuitem *item, struct menudialog *dialog, struct
26762703 f2 = f14 ;
26772704 }
26782705
2679- if (f2 > 20 ) {
2680- f2 = (f2 - 20 ) / 16.0f ;
2706+ if (f2 > threshold ) {
2707+ f32 divisor = (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) ? 40.0f : 16.0f ;
2708+ f2 = (f2 - threshold ) / divisor ;
26812709#if VERSION >= VERSION_PAL_BETA
26822710 f2 *= g_Vars .diffframe60freal ;
26832711#else
26842712 f2 *= g_Vars .diffframe60f ;
26852713#endif
2686- if (item -> flags & MENUITEMFLAG_SLIDER_SLOW ) {
2687- f2 *= 0.2f ;
2688- }
26892714
26902715 if (inputs -> xaxis < 0 ) {
26912716 f0 -= f2 ;
0 commit comments