add mouse acceleration to the menu, Crispy settings by default (#1020)

* a few tweaks to mini-thermo

* don't translate entire mini-thermo
This commit is contained in:
Roman Fomin 2023-04-27 13:47:44 +07:00 committed by GitHub
parent 8a0bb50eca
commit 913530ced9
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 50 additions and 17 deletions

View File

@ -760,17 +760,21 @@ void I_GetEvent(void)
// This is to combine all mouse movement for a tic into one mouse // This is to combine all mouse movement for a tic into one mouse
// motion event. // motion event.
// The mouse input values are input directly to the game, but when
// the values exceed the value of mouse_threshold, they are multiplied
// by mouse_acceleration to increase the speed.
int mouse_acceleration; int mouse_acceleration;
int mouse_threshold; // 10; int mouse_acceleration_threshold;
static int AccelerateMouse(int val) static int AccelerateMouse(int val)
{ {
if (val < 0) if (val < 0)
return -AccelerateMouse(-val); return -AccelerateMouse(-val);
if (val > mouse_threshold) if (val > mouse_acceleration_threshold)
{ {
return (val - mouse_threshold) * mouse_acceleration / 100 + mouse_threshold; return (val - mouse_acceleration_threshold) * (mouse_acceleration + 10) / 10 + mouse_acceleration_threshold;
} }
else else
{ {

View File

@ -138,7 +138,7 @@ background_t menu_background;
#define M_X_NEXT (310) #define M_X_NEXT (310)
#define M_Y_PREVNEXT (29 + 18 * M_SPC) #define M_Y_PREVNEXT (29 + 18 * M_SPC)
#define M_Y_WARN (M_Y_PREVNEXT - M_SPC) #define M_Y_WARN (M_Y_PREVNEXT - M_SPC)
#define M_THRM_SIZE 13 #define M_THRM_SIZE 10
#define M_THRM_STEP 8 #define M_THRM_STEP 8
#define M_THRM_WIDTH (M_THRM_STEP * (M_THRM_SIZE + 2)) #define M_THRM_WIDTH (M_THRM_STEP * (M_THRM_SIZE + 2))
#define M_X_THRM (M_X - M_THRM_WIDTH) #define M_X_THRM (M_X - M_THRM_WIDTH)
@ -2210,23 +2210,23 @@ static void M_DrawMiniThermo(int x, int y, int size, int dot, char *color)
{ {
int xx; int xx;
int i; int i;
const int step = M_THRM_STEP * M_THRM_SIZE / size; const int step = M_THRM_STEP * M_THRM_SIZE * FRACUNIT / size;
xx = x; xx = x;
V_DrawPatchTranslated(xx, y, 0, W_CacheLumpName("M_MTHRML", PU_CACHE), color); V_DrawPatch(xx, y, 0, W_CacheLumpName("M_MTHRML", PU_CACHE));
xx += M_THRM_STEP; xx += M_THRM_STEP;
for (i = 0; i < M_THRM_SIZE; i++) for (i = 0; i < M_THRM_SIZE; i++)
{ {
V_DrawPatchTranslated(xx, y, 0, W_CacheLumpName("M_MTHRMM", PU_CACHE), color); V_DrawPatch(xx, y, 0, W_CacheLumpName("M_MTHRMM", PU_CACHE));
xx += M_THRM_STEP; xx += M_THRM_STEP;
} }
V_DrawPatchTranslated(xx, y, 0, W_CacheLumpName("M_MTHRMR", PU_CACHE), color); V_DrawPatch(xx, y, 0, W_CacheLumpName("M_MTHRMR", PU_CACHE));
// [FG] do not crash anymore if value exceeds thermometer range // [FG] do not crash anymore if value exceeds thermometer range
if (dot > size) if (dot > size)
dot = size; dot = size;
V_DrawPatchTranslated(x + M_THRM_STEP / 2 + dot * step, y, 0, V_DrawPatchTranslated(x + M_THRM_STEP / 2 + dot * step / FRACUNIT, y, 0,
W_CacheLumpName("M_MTHRMO", PU_CACHE), color); W_CacheLumpName("M_MTHRMO", PU_CACHE), color);
} }
@ -2481,7 +2481,7 @@ void M_DrawSetting(setup_menu_t* s)
const int max = s->var.def->limit.max; const int max = s->var.def->limit.max;
const int offsetx = SHORT(hu_font[0]->width); const int offsetx = SHORT(hu_font[0]->width);
const int offsety = (M_SPC - SHORT(hu_font[0]->height)) / 2; const int offsety = (M_SPC - SHORT(hu_font[0]->height)) / 2;
const int size = (max == UL ? M_THRM_SIZE : max); const int size = (max == UL ? M_THRM_SIZE * 2 : max);
M_DrawMiniThermo(x - offsetx, y - offsety, size, value, M_DrawMiniThermo(x - offsetx, y - offsety, size, value,
ItemDisabled(flags) ? cr_dark : colrngs[color]); ItemDisabled(flags) ? cr_dark : colrngs[color]);
@ -4073,6 +4073,8 @@ enum {
gen4_mouse1, gen4_mouse1,
gen4_mouse2, gen4_mouse2,
gen4_mouse3, gen4_mouse3,
gen4_mouse_accel,
gen4_mouse_accel_threshold,
gen4_end1, gen4_end1,
gen4_title2, gen4_title2,
@ -4083,6 +4085,25 @@ enum {
gen4_end2, gen4_end2,
}; };
#define MOUSE_ACCEL_STRINGS_SIZE (40 + 2)
static const char *mouse_accel_strings[MOUSE_ACCEL_STRINGS_SIZE];
static void M_InitMouseAccel(void)
{
int i;
char buf[8];
for (i = 0; i < MOUSE_ACCEL_STRINGS_SIZE - 1; ++i)
{
int val = i + 10;
M_snprintf(buf, sizeof(buf), "%1d.%1d", val / 10, val % 10);
mouse_accel_strings[i] = M_StringDuplicate(buf);
}
mouse_accel_strings[i] = NULL;
}
void M_ResetTimeScale(void) void M_ResetTimeScale(void)
{ {
if (strictmode || D_CheckNetConnect()) if (strictmode || D_CheckNetConnect())
@ -4258,6 +4279,12 @@ setup_menu_t gen_settings4[] = { // General Settings screen4
{"Invert vertical axis", S_YESNO, m_null, M_X, {"Invert vertical axis", S_YESNO, m_null, M_X,
M_Y+ gen4_mouse3*M_SPC, {"mouse_y_invert"}}, M_Y+ gen4_mouse3*M_SPC, {"mouse_y_invert"}},
{"Mouse acceleration", S_THERMO, m_null, M_X_THRM,
M_Y + gen4_mouse_accel * M_SPC, {"mouse_acceleration"}, 0, NULL, mouse_accel_strings},
{"Mouse threshold", S_NUM, m_null, M_X,
M_Y + gen4_mouse_accel_threshold * M_SPC, {"mouse_acceleration_threshold"}},
{"", S_SKIP, m_null, M_X, M_Y + gen4_end1*M_SPC}, {"", S_SKIP, m_null, M_X, M_Y + gen4_end1*M_SPC},
{"Miscellaneous" ,S_SKIP|S_TITLE, m_null, M_X, M_Y + gen4_title2*M_SPC}, {"Miscellaneous" ,S_SKIP|S_TITLE, m_null, M_X, M_Y + gen4_title2*M_SPC},
@ -7085,6 +7112,8 @@ void M_Init(void)
break; break;
} }
M_InitMouseAccel();
M_ResetMenu(); // killough 10/98 M_ResetMenu(); // killough 10/98
M_ResetSetupMenu(); M_ResetSetupMenu();
M_InitHelpScreen(); // init the help screen // phares 4/08/98 M_InitHelpScreen(); // init the help screen // phares 4/08/98

View File

@ -83,7 +83,7 @@ extern int grabmouse;
extern boolean flipcorpses; // [crispy] randomly flip corpse, blood and death animation sprites extern boolean flipcorpses; // [crispy] randomly flip corpse, blood and death animation sprites
extern boolean ghost_monsters; // [crispy] resurrected pools of gore ("ghost monsters") are translucent extern boolean ghost_monsters; // [crispy] resurrected pools of gore ("ghost monsters") are translucent
extern int mouse_acceleration; extern int mouse_acceleration;
extern int mouse_threshold; extern int mouse_acceleration_threshold;
extern int show_endoom; extern int show_endoom;
#if defined(HAVE_FLUIDSYNTH) #if defined(HAVE_FLUIDSYNTH)
extern char *soundfont_path; extern char *soundfont_path;
@ -2058,16 +2058,16 @@ default_t defaults[] = {
}, },
{ {
"cfg_mouse_acceleration", "mouse_acceleration",
(config_t *) &mouse_acceleration, NULL, (config_t *) &mouse_acceleration, NULL,
{100}, {100,UL}, number, ss_none, wad_no, {10}, {0,40}, number, ss_none, wad_no,
"adjust mouse acceleration (100 = no acceleration)" "adjust mouse acceleration (0 = 1.0, 40 = 5.0)"
}, },
{ {
"mouse_threshold", "mouse_acceleration_threshold",
(config_t *) &mouse_threshold, NULL, (config_t *) &mouse_acceleration_threshold, NULL,
{0}, {0,UL}, number, ss_none, wad_no, {10}, {0,32}, number, ss_none, wad_no,
"adjust mouse acceleration threshold" "adjust mouse acceleration threshold"
}, },