Skip to content

Commit 6da3c55

Browse files
committed
added D-PAD Slider Progression Speed
1 parent b4fae59 commit 6da3c55

2 files changed

Lines changed: 42 additions & 11 deletions

File tree

src/game/menu.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4980,9 +4980,15 @@ void menuProcessInput(void)
49804980
xhelddir = menu->xrepeatdir;
49814981
}
49824982

4983-
// If held for 1 second, repeat faster
4984-
if (menu->xrepeattimer60 > TICKS(60)) {
4985-
menu->xrepeatmode = MENUREPEATMODE_FAST;
4983+
// If held long enough, repeat faster - 2 seconds for SLIDER_SLOW items, 1 second otherwise
4984+
{
4985+
struct menuitem *item = dialog ? dialog->focuseditem : NULL;
4986+
bool isSlowSlider = item && (item->type == MENUITEMTYPE_SLIDER || item->type == MENUITEMTYPE_10) && (item->flags & MENUITEMFLAG_SLIDER_SLOW);
4987+
s32 fastRepeatThreshold = isSlowSlider ? TICKS(120) : TICKS(60);
4988+
4989+
if (menu->xrepeattimer60 > fastRepeatThreshold) {
4990+
menu->xrepeatmode = MENUREPEATMODE_FAST;
4991+
}
49864992
}
49874993

49884994
// Calculate the old and new repeat slots.

src/game/menuitem.c

Lines changed: 33 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)