mirror of
https://github.com/fabiangreffrath/woof.git
synced 2025-09-22 11:22:18 -04:00
Add secondary menus (#1895)
* Support secondary menus * Move gyro to secondary menu * Add sfx to gyro calibration popup * Move EQ to secondary menu
This commit is contained in:
parent
45dcc36258
commit
47e59972c4
@ -197,6 +197,8 @@ typedef enum {
|
||||
ss_enem,
|
||||
ss_gen, // killough 10/98
|
||||
ss_comp, // killough 10/98
|
||||
ss_eq,
|
||||
ss_gyro,
|
||||
ss_max
|
||||
} ss_types;
|
||||
|
||||
|
22
src/i_gyro.c
22
src/i_gyro.c
@ -790,32 +790,38 @@ void I_RefreshGyroSettings(void)
|
||||
motion.tightening = gyro_tightening / 10.0f * PI_F / 180.0f;
|
||||
}
|
||||
|
||||
#define BIND_NUM_GYRO(name, v, a, b, help) \
|
||||
M_BindNum(#name, &name, NULL, (v), (a), (b), ss_gyro, wad_no, help)
|
||||
|
||||
#define BIND_BOOL_GYRO(name, v, help) \
|
||||
M_BindBool(#name, &name, NULL, (v), ss_gyro, wad_no, help)
|
||||
|
||||
void I_BindGyroVaribales(void)
|
||||
{
|
||||
BIND_BOOL_GENERAL(gyro_enable, false,
|
||||
BIND_BOOL_GYRO(gyro_enable, false,
|
||||
"Enable gamepad gyro aiming");
|
||||
BIND_NUM_GENERAL(gyro_space,
|
||||
BIND_NUM_GYRO(gyro_space,
|
||||
SPACE_PLAYER_TURN, SPACE_LOCAL_TURN, SPACE_PLAYER_LEAN,
|
||||
"Gyro space (0 = Local Turn; 1 = Local Lean; 2 = Player Turn; "
|
||||
"3 = Player Lean)");
|
||||
BIND_NUM_GENERAL(gyro_button_action,
|
||||
BIND_NUM_GYRO(gyro_button_action,
|
||||
ACTION_ENABLE, ACTION_NONE, ACTION_INVERT,
|
||||
"Gyro button action (0 = None; 1 = Disable Gyro; 2 = Enable Gyro; "
|
||||
"3 = Invert)");
|
||||
BIND_NUM_GENERAL(gyro_stick_action,
|
||||
BIND_NUM_GYRO(gyro_stick_action,
|
||||
ACTION_NONE, ACTION_NONE, ACTION_ENABLE,
|
||||
"Camera stick action (0 = None; 1 = Disable Gyro; 2 = Enable Gyro)");
|
||||
BIND_NUM_GENERAL(gyro_turn_speed, 10, 0, 100,
|
||||
BIND_NUM_GYRO(gyro_turn_speed, 10, 0, 100,
|
||||
"Gyro turn speed (0 = 0.0x; 100 = 10.0x)");
|
||||
BIND_NUM_GENERAL(gyro_look_speed, 10, 0, 100,
|
||||
BIND_NUM_GYRO(gyro_look_speed, 10, 0, 100,
|
||||
"Gyro look speed (0 = 0.0x; 100 = 10.0x)");
|
||||
BIND_NUM_GENERAL(gyro_acceleration, 20, 10, 40,
|
||||
BIND_NUM_GYRO(gyro_acceleration, 20, 10, 40,
|
||||
"Gyro acceleration multiplier (10 = 1.0x; 40 = 4.0x)");
|
||||
BIND_NUM(gyro_accel_min_threshold, 0, 0, 200,
|
||||
"Lower threshold for applying gyro acceleration [degrees/second]");
|
||||
BIND_NUM(gyro_accel_max_threshold, 75, 0, 200,
|
||||
"Upper threshold for applying gyro acceleration [degrees/second]");
|
||||
BIND_NUM_GENERAL(gyro_smooth_threshold, 30, 0, 100,
|
||||
BIND_NUM_GYRO(gyro_smooth_threshold, 30, 0, 100,
|
||||
"Gyro steadying: smoothing threshold "
|
||||
"(0 = Off; 100 = 10.0 degrees/second)");
|
||||
BIND_NUM(gyro_smooth_time, 125, 0, 500,
|
||||
|
@ -25,19 +25,39 @@
|
||||
#include "i_oalcommon.h"
|
||||
#include "i_oalequalizer.h"
|
||||
#include "i_sound.h"
|
||||
#include "m_config.h"
|
||||
#include "mn_menu.h"
|
||||
|
||||
eq_preset_t snd_equalizer;
|
||||
int snd_eq_preamp;
|
||||
int snd_eq_low_gain;
|
||||
int snd_eq_low_cutoff;
|
||||
int snd_eq_mid1_gain;
|
||||
int snd_eq_mid1_center;
|
||||
int snd_eq_mid1_width;
|
||||
int snd_eq_mid2_gain;
|
||||
int snd_eq_mid2_center;
|
||||
int snd_eq_mid2_width;
|
||||
int snd_eq_high_gain;
|
||||
int snd_eq_high_cutoff;
|
||||
#define EQF(T, ptr) ((ALFUNC(T, ptr)) != NULL)
|
||||
|
||||
typedef enum
|
||||
{
|
||||
EQ_PRESET_OFF,
|
||||
EQ_PRESET_CLASSICAL,
|
||||
EQ_PRESET_ROCK,
|
||||
EQ_PRESET_VOCAL,
|
||||
EQ_PRESET_CUSTOM,
|
||||
NUM_EQ_PRESETS
|
||||
} eq_preset_t;
|
||||
|
||||
static eq_preset_t snd_equalizer, default_equalizer;
|
||||
static int snd_eq_preamp, default_preamp;
|
||||
static int snd_eq_low_gain, default_low_gain;
|
||||
static int snd_eq_low_cutoff, default_low_cutoff;
|
||||
static int snd_eq_mid1_gain, default_mid1_gain;
|
||||
static int snd_eq_mid1_center, default_mid1_center;
|
||||
static int snd_eq_mid1_width, default_mid1_width;
|
||||
static int snd_eq_mid2_gain, default_mid2_gain;
|
||||
static int snd_eq_mid2_center, default_mid2_center;
|
||||
static int snd_eq_mid2_width, default_mid2_width;
|
||||
static int snd_eq_high_gain, default_high_gain;
|
||||
static int snd_eq_high_cutoff, default_high_cutoff;
|
||||
|
||||
static boolean initialized;
|
||||
|
||||
static ALuint uiEffectSlot;
|
||||
static ALuint uiEffect;
|
||||
static ALuint uiFilter;
|
||||
|
||||
static LPALGENAUXILIARYEFFECTSLOTS alGenAuxiliaryEffectSlots;
|
||||
static LPALDELETEAUXILIARYEFFECTSLOTS alDeleteAuxiliaryEffectSlots;
|
||||
@ -54,66 +74,46 @@ static LPALISFILTER alIsFilter;
|
||||
static LPALFILTERI alFilteri;
|
||||
static LPALFILTERF alFilterf;
|
||||
|
||||
void I_OAL_InitEqualizer(void)
|
||||
static void BackupCustomPreset(void)
|
||||
{
|
||||
ALCint iSends = 0;
|
||||
|
||||
if (!oal || !oal->EXT_EFX)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Check the actual number of Auxiliary Sends available on each Source.
|
||||
|
||||
alcGetIntegerv(oal->device, ALC_MAX_AUXILIARY_SENDS, 1, &iSends);
|
||||
|
||||
if (iSends < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
ALFUNC(LPALGENAUXILIARYEFFECTSLOTS, alGenAuxiliaryEffectSlots);
|
||||
ALFUNC(LPALDELETEAUXILIARYEFFECTSLOTS, alDeleteAuxiliaryEffectSlots);
|
||||
ALFUNC(LPALISAUXILIARYEFFECTSLOT, alIsAuxiliaryEffectSlot);
|
||||
ALFUNC(LPALGENEFFECTS, alGenEffects);
|
||||
ALFUNC(LPALDELETEEFFECTS, alDeleteEffects);
|
||||
ALFUNC(LPALISEFFECT, alIsEffect);
|
||||
ALFUNC(LPALEFFECTI, alEffecti);
|
||||
ALFUNC(LPALEFFECTF, alEffectf);
|
||||
ALFUNC(LPALAUXILIARYEFFECTSLOTI, alAuxiliaryEffectSloti);
|
||||
ALFUNC(LPALGENFILTERS, alGenFilters);
|
||||
ALFUNC(LPALDELETEFILTERS, alDeleteFilters);
|
||||
ALFUNC(LPALISFILTER, alIsFilter);
|
||||
ALFUNC(LPALFILTERI, alFilteri);
|
||||
ALFUNC(LPALFILTERF, alFilterf);
|
||||
snd_eq_preamp = default_preamp;
|
||||
snd_eq_low_gain = default_low_gain;
|
||||
snd_eq_low_cutoff = default_low_cutoff;
|
||||
snd_eq_mid1_gain = default_mid1_gain;
|
||||
snd_eq_mid1_center = default_mid1_center;
|
||||
snd_eq_mid1_width = default_mid1_width;
|
||||
snd_eq_mid2_gain = default_mid2_gain;
|
||||
snd_eq_mid2_center = default_mid2_center;
|
||||
snd_eq_mid2_width = default_mid2_width;
|
||||
snd_eq_high_gain = default_high_gain;
|
||||
snd_eq_high_cutoff = default_high_cutoff;
|
||||
}
|
||||
|
||||
void I_OAL_SetEqualizer(void)
|
||||
static void RestoreCustomPreset(void)
|
||||
{
|
||||
static ALuint uiEffectSlot = AL_INVALID;
|
||||
static ALuint uiEffect = AL_INVALID;
|
||||
static ALuint uiFilter = AL_INVALID;
|
||||
default_preamp = snd_eq_preamp;
|
||||
default_low_gain = snd_eq_low_gain;
|
||||
default_low_cutoff = snd_eq_low_cutoff;
|
||||
default_mid1_gain = snd_eq_mid1_gain;
|
||||
default_mid1_center = snd_eq_mid1_center;
|
||||
default_mid1_width = snd_eq_mid1_width;
|
||||
default_mid2_gain = snd_eq_mid2_gain;
|
||||
default_mid2_center = snd_eq_mid2_center;
|
||||
default_mid2_width = snd_eq_mid2_width;
|
||||
default_high_gain = snd_eq_high_gain;
|
||||
default_high_cutoff = snd_eq_high_cutoff;
|
||||
}
|
||||
|
||||
if (!alGenAuxiliaryEffectSlots ||
|
||||
!alDeleteAuxiliaryEffectSlots ||
|
||||
!alIsAuxiliaryEffectSlot ||
|
||||
!alGenEffects ||
|
||||
!alDeleteEffects ||
|
||||
!alIsEffect ||
|
||||
!alEffecti ||
|
||||
!alEffectf ||
|
||||
!alAuxiliaryEffectSloti ||
|
||||
!alGenFilters ||
|
||||
!alDeleteFilters ||
|
||||
!alIsFilter ||
|
||||
!alFilteri ||
|
||||
!alFilterf)
|
||||
static void StopEffects(void)
|
||||
{
|
||||
for (int i = 0; i < MAX_CHANNELS; i++)
|
||||
{
|
||||
return;
|
||||
alSourceStop(oal->sources[i]);
|
||||
}
|
||||
}
|
||||
|
||||
// Unload all effects first.
|
||||
|
||||
static void UnloadEffects(void)
|
||||
{
|
||||
if (alIsAuxiliaryEffectSlot(uiEffectSlot))
|
||||
{
|
||||
for (int i = 0; i < MAX_CHANNELS; i++)
|
||||
@ -135,8 +135,85 @@ void I_OAL_SetEqualizer(void)
|
||||
{
|
||||
alDeleteFilters(1, &uiFilter);
|
||||
}
|
||||
}
|
||||
|
||||
if (snd_equalizer == EQ_PRESET_OFF)
|
||||
void I_OAL_ShutdownEqualizer(void)
|
||||
{
|
||||
RestoreCustomPreset();
|
||||
|
||||
if (initialized)
|
||||
{
|
||||
UnloadEffects();
|
||||
initialized = false;
|
||||
}
|
||||
}
|
||||
|
||||
boolean I_OAL_EqualizerInitialized(void)
|
||||
{
|
||||
return initialized;
|
||||
}
|
||||
|
||||
boolean I_OAL_CustomEqualizer(void)
|
||||
{
|
||||
return (initialized && default_equalizer == EQ_PRESET_CUSTOM);
|
||||
}
|
||||
|
||||
void I_OAL_InitEqualizer(void)
|
||||
{
|
||||
BackupCustomPreset();
|
||||
snd_equalizer = default_equalizer;
|
||||
|
||||
if (!oal || !oal->EXT_EFX || !oal->device || !oal->sources)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Check the actual number of Auxiliary Sends available on each Source.
|
||||
|
||||
ALCint iSends = 0;
|
||||
alcGetIntegerv(oal->device, ALC_MAX_AUXILIARY_SENDS, 1, &iSends);
|
||||
|
||||
if (iSends < 1)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
initialized = (
|
||||
EQF(LPALGENAUXILIARYEFFECTSLOTS, alGenAuxiliaryEffectSlots)
|
||||
&& EQF(LPALDELETEAUXILIARYEFFECTSLOTS, alDeleteAuxiliaryEffectSlots)
|
||||
&& EQF(LPALISAUXILIARYEFFECTSLOT, alIsAuxiliaryEffectSlot)
|
||||
&& EQF(LPALGENEFFECTS, alGenEffects)
|
||||
&& EQF(LPALDELETEEFFECTS, alDeleteEffects)
|
||||
&& EQF(LPALISEFFECT, alIsEffect)
|
||||
&& EQF(LPALEFFECTI, alEffecti)
|
||||
&& EQF(LPALEFFECTF, alEffectf)
|
||||
&& EQF(LPALAUXILIARYEFFECTSLOTI, alAuxiliaryEffectSloti)
|
||||
&& EQF(LPALGENFILTERS, alGenFilters)
|
||||
&& EQF(LPALDELETEFILTERS, alDeleteFilters)
|
||||
&& EQF(LPALISFILTER, alIsFilter)
|
||||
&& EQF(LPALFILTERI, alFilteri)
|
||||
&& EQF(LPALFILTERF, alFilterf)
|
||||
);
|
||||
|
||||
if (initialized)
|
||||
{
|
||||
I_OAL_EqualizerPreset();
|
||||
}
|
||||
}
|
||||
|
||||
void I_OAL_SetEqualizer(void)
|
||||
{
|
||||
if (!initialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// Unload all effects first.
|
||||
|
||||
StopEffects();
|
||||
UnloadEffects();
|
||||
|
||||
if (default_equalizer == EQ_PRESET_OFF)
|
||||
{
|
||||
return;
|
||||
}
|
||||
@ -162,22 +239,22 @@ void I_OAL_SetEqualizer(void)
|
||||
#define OCTAVE(x) ((ALfloat)BETWEEN(0.01f, 1.0f, (x) / 100.0f))
|
||||
|
||||
// Low
|
||||
alEffectf(uiEffect, AL_EQUALIZER_LOW_GAIN, EQ_GAIN(snd_eq_low_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_LOW_CUTOFF, (ALfloat)snd_eq_low_cutoff);
|
||||
alEffectf(uiEffect, AL_EQUALIZER_LOW_GAIN, EQ_GAIN(default_low_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_LOW_CUTOFF, (ALfloat)default_low_cutoff);
|
||||
|
||||
// Mid 1
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID1_GAIN, EQ_GAIN(snd_eq_mid1_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID1_CENTER, (ALfloat)snd_eq_mid1_center);
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID1_WIDTH, OCTAVE(snd_eq_mid1_width));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID1_GAIN, EQ_GAIN(default_mid1_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID1_CENTER, (ALfloat)default_mid1_center);
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID1_WIDTH, OCTAVE(default_mid1_width));
|
||||
|
||||
// Mid 2
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID2_GAIN, EQ_GAIN(snd_eq_mid2_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID2_CENTER, (ALfloat)snd_eq_mid2_center);
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID2_WIDTH, OCTAVE(snd_eq_mid2_width));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID2_GAIN, EQ_GAIN(default_mid2_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID2_CENTER, (ALfloat)default_mid2_center);
|
||||
alEffectf(uiEffect, AL_EQUALIZER_MID2_WIDTH, OCTAVE(default_mid2_width));
|
||||
|
||||
// High
|
||||
alEffectf(uiEffect, AL_EQUALIZER_HIGH_GAIN, EQ_GAIN(snd_eq_high_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_HIGH_CUTOFF, (ALfloat)snd_eq_high_cutoff);
|
||||
alEffectf(uiEffect, AL_EQUALIZER_HIGH_GAIN, EQ_GAIN(default_high_gain));
|
||||
alEffectf(uiEffect, AL_EQUALIZER_HIGH_CUTOFF, (ALfloat)default_high_cutoff);
|
||||
|
||||
alAuxiliaryEffectSloti(uiEffectSlot, AL_EFFECTSLOT_EFFECT, uiEffect);
|
||||
|
||||
@ -188,7 +265,7 @@ void I_OAL_SetEqualizer(void)
|
||||
alSourcei(oal->sources[i], AL_DIRECT_FILTER, uiFilter);
|
||||
|
||||
// Keep the wet path.
|
||||
alFilterf(uiFilter, AL_LOWPASS_GAIN, LP_GAIN(snd_eq_preamp));
|
||||
alFilterf(uiFilter, AL_LOWPASS_GAIN, LP_GAIN(default_preamp));
|
||||
alSource3i(oal->sources[i], AL_AUXILIARY_SEND_FILTER, uiEffectSlot, 0,
|
||||
uiFilter);
|
||||
}
|
||||
@ -196,38 +273,100 @@ void I_OAL_SetEqualizer(void)
|
||||
|
||||
void I_OAL_EqualizerPreset(void)
|
||||
{
|
||||
if (!initialized)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
struct
|
||||
{
|
||||
int *var;
|
||||
int val[NUM_EQ_PRESETS];
|
||||
int val[NUM_EQ_PRESETS - 1];
|
||||
} eq_presets[] =
|
||||
{ // Preamp Off, Classical, Rock, Vocal
|
||||
{&snd_eq_preamp, { 0, -4, -5, -4}}, // -24 to 0
|
||||
{&default_preamp, { 0, -4, -5, -4}}, // -24 to 0
|
||||
|
||||
// Low
|
||||
{&snd_eq_low_gain, { 0, 4, 0, -2}}, // -12 to 12
|
||||
{&snd_eq_low_cutoff, { 200, 125, 200, 125}}, // 50 to 800
|
||||
{&default_low_gain, { 0, 4, 0, -2}}, // -12 to 12
|
||||
{&default_low_cutoff, { 200, 125, 200, 125}}, // 50 to 800
|
||||
|
||||
// Mid 1
|
||||
{&snd_eq_mid1_gain, { 0, 1, 3, 3}}, // -12 to 12
|
||||
{&snd_eq_mid1_center, { 500, 200, 250, 650}}, // 200 to 3000
|
||||
{&snd_eq_mid1_width, { 100, 100, 100, 100}}, // 1 to 100
|
||||
{&default_mid1_gain, { 0, 1, 3, 3}}, // -12 to 12
|
||||
{&default_mid1_center, { 500, 200, 250, 650}}, // 200 to 3000
|
||||
{&default_mid1_width, { 100, 100, 100, 100}}, // 1 to 100
|
||||
|
||||
// Mid 2
|
||||
{&snd_eq_mid2_gain, { 0, 0, 1, 3}}, // -12 to 12
|
||||
{&snd_eq_mid2_center, { 3000, 3000, 3000, 1550}}, // 1000 to 8000
|
||||
{&snd_eq_mid2_width, { 100, 100, 100, 100}}, // 1 to 100
|
||||
{&default_mid2_gain, { 0, 0, 1, 3}}, // -12 to 12
|
||||
{&default_mid2_center, { 3000, 3000, 3000, 1550}}, // 1000 to 8000
|
||||
{&default_mid2_width, { 100, 100, 100, 100}}, // 1 to 100
|
||||
|
||||
// High
|
||||
{&snd_eq_high_gain, { 0, 2, 5, 1}}, // -12 to 12
|
||||
{&snd_eq_high_cutoff, { 6000, 8000, 6000, 10000}}, // 4000 to 16000
|
||||
{&default_high_gain, { 0, 2, 5, 1}}, // -12 to 12
|
||||
{&default_high_cutoff, { 6000, 8000, 6000, 10000}}, // 4000 to 16000
|
||||
};
|
||||
|
||||
for (int i = 0; i < arrlen(eq_presets); i++)
|
||||
if (default_equalizer == EQ_PRESET_CUSTOM
|
||||
&& snd_equalizer != EQ_PRESET_CUSTOM)
|
||||
{
|
||||
*eq_presets[i].var = eq_presets[i].val[snd_equalizer];
|
||||
RestoreCustomPreset();
|
||||
}
|
||||
else if (snd_equalizer == EQ_PRESET_CUSTOM)
|
||||
{
|
||||
BackupCustomPreset();
|
||||
}
|
||||
|
||||
if (default_equalizer < NUM_EQ_PRESETS - 1)
|
||||
{
|
||||
for (int i = 0; i < arrlen(eq_presets); i++)
|
||||
{
|
||||
*eq_presets[i].var = eq_presets[i].val[default_equalizer];
|
||||
}
|
||||
}
|
||||
|
||||
snd_equalizer = default_equalizer;
|
||||
I_OAL_SetEqualizer();
|
||||
MN_UpdateEqualizerItems();
|
||||
}
|
||||
|
||||
#define BIND_NUM_EQ(name, default_name, v, a, b, help) \
|
||||
M_BindNum(#name, &default_name, &name, (v), (a), (b), ss_eq, wad_no, help)
|
||||
|
||||
void I_BindEqualizerVariables(void)
|
||||
{
|
||||
BIND_NUM_EQ(snd_equalizer, default_equalizer,
|
||||
EQ_PRESET_OFF, EQ_PRESET_OFF, EQ_PRESET_CUSTOM,
|
||||
"Equalizer preset (0 = Off; 1 = Classical; 2 = Rock; 3 = Vocal; "
|
||||
"4 = Custom)");
|
||||
|
||||
// Preamp
|
||||
BIND_NUM_EQ(snd_eq_preamp, default_preamp, 0, -24, 0,
|
||||
"Equalizer preamp gain [dB]");
|
||||
|
||||
// Low
|
||||
BIND_NUM_EQ(snd_eq_low_gain, default_low_gain, 0, -12, 12,
|
||||
"Equalizer low frequency range gain [dB]");
|
||||
BIND_NUM_EQ(snd_eq_low_cutoff, default_low_cutoff, 200, 50, 800,
|
||||
"Equalizer low cut-off frequency [Hz]");
|
||||
|
||||
// Mid 1
|
||||
BIND_NUM_EQ(snd_eq_mid1_gain, default_mid1_gain, 0, -12, 12,
|
||||
"Equalizer mid1 frequency range gain [dB]");
|
||||
BIND_NUM_EQ(snd_eq_mid1_center, default_mid1_center, 500, 200, 3000,
|
||||
"Equalizer mid1 center frequency [Hz]");
|
||||
BIND_NUM_EQ(snd_eq_mid1_width, default_mid1_width, 100, 1, 100,
|
||||
"Equalizer mid1 bandwidth [octave] (1 = 0.01; 100 = 1.0)");
|
||||
|
||||
// Mid 2
|
||||
BIND_NUM_EQ(snd_eq_mid2_gain, default_mid2_gain, 0, -12, 12,
|
||||
"Equalizer mid2 frequency range gain [dB]");
|
||||
BIND_NUM_EQ(snd_eq_mid2_center, default_mid2_center, 3000, 1000, 8000,
|
||||
"Equalizer mid2 center frequency [Hz]");
|
||||
BIND_NUM_EQ(snd_eq_mid2_width, default_mid2_width, 100, 1, 100,
|
||||
"Equalizer mid2 bandwidth [octave] (1 = 0.01; 100 = 1.0)");
|
||||
|
||||
// High
|
||||
BIND_NUM_EQ(snd_eq_high_gain, default_high_gain, 0, -12, 12,
|
||||
"Equalizer high frequency range gain [dB]");
|
||||
BIND_NUM_EQ(snd_eq_high_cutoff, default_high_cutoff, 6000, 4000, 16000,
|
||||
"Equalizer high cut-off frequency [Hz]");
|
||||
}
|
||||
|
@ -19,31 +19,15 @@
|
||||
#ifndef __I_OALEQUALIZER__
|
||||
#define __I_OALEQUALIZER__
|
||||
|
||||
typedef enum {
|
||||
EQ_PRESET_OFF,
|
||||
EQ_PRESET_CLASSICAL,
|
||||
EQ_PRESET_ROCK,
|
||||
EQ_PRESET_VOCAL,
|
||||
NUM_EQ_PRESETS
|
||||
} eq_preset_t;
|
||||
|
||||
extern eq_preset_t snd_equalizer;
|
||||
extern int snd_eq_preamp;
|
||||
extern int snd_eq_low_gain;
|
||||
extern int snd_eq_low_cutoff;
|
||||
extern int snd_eq_mid1_gain;
|
||||
extern int snd_eq_mid1_center;
|
||||
extern int snd_eq_mid1_width;
|
||||
extern int snd_eq_mid2_gain;
|
||||
extern int snd_eq_mid2_center;
|
||||
extern int snd_eq_mid2_width;
|
||||
extern int snd_eq_high_gain;
|
||||
extern int snd_eq_high_cutoff;
|
||||
#include "doomtype.h"
|
||||
|
||||
boolean I_OAL_EqualizerInitialized(void);
|
||||
boolean I_OAL_CustomEqualizer(void);
|
||||
void I_OAL_ShutdownEqualizer(void);
|
||||
void I_OAL_InitEqualizer(void);
|
||||
|
||||
void I_OAL_SetEqualizer(void);
|
||||
|
||||
void I_OAL_EqualizerPreset(void);
|
||||
|
||||
void I_BindEqualizerVariables(void);
|
||||
|
||||
#endif
|
||||
|
@ -143,9 +143,9 @@ void I_OAL_ShutdownModule(void)
|
||||
|
||||
void I_OAL_ShutdownSound(void)
|
||||
{
|
||||
int i;
|
||||
I_OAL_ShutdownEqualizer();
|
||||
|
||||
for (i = 0; i < MAX_CHANNELS; ++i)
|
||||
for (int i = 0; i < MAX_CHANNELS; ++i)
|
||||
{
|
||||
I_OAL_StopSound(i);
|
||||
}
|
||||
@ -448,39 +448,6 @@ void I_OAL_BindSoundVariables(void)
|
||||
BIND_NUM(snd_doppler, 0, 0, 10,
|
||||
"[OpenAL 3D] Doppler effect (0 = Off; 10 = Max)");
|
||||
BIND_BOOL(snd_limiter, false, "Use sound output limiter");
|
||||
|
||||
BIND_NUM(snd_equalizer, EQ_PRESET_OFF, EQ_PRESET_OFF, EQ_PRESET_VOCAL,
|
||||
"Equalizer preset (0 = Off; 1 = Classical; 2 = Rock; 3 = Vocal");
|
||||
BIND_NUM(snd_eq_preamp, 0, -24, 0,
|
||||
"Equalizer preamp gain [dB]");
|
||||
|
||||
// Low
|
||||
BIND_NUM(snd_eq_low_gain, 0, -12, 12,
|
||||
"Equalizer low frequency range gain [dB]");
|
||||
BIND_NUM(snd_eq_low_cutoff, 200, 50, 800,
|
||||
"Equalizer low cut-off frequency [Hz]");
|
||||
|
||||
// Mid 1
|
||||
BIND_NUM(snd_eq_mid1_gain, 0, -12, 12,
|
||||
"Equalizer mid1 frequency range gain [dB]");
|
||||
BIND_NUM(snd_eq_mid1_center, 500, 200, 3000,
|
||||
"Equalizer mid1 center frequency [Hz]");
|
||||
BIND_NUM(snd_eq_mid1_width, 100, 1, 100,
|
||||
"Equalizer mid1 bandwidth [octave] (1 = 0.01; 100 = 1.0)");
|
||||
|
||||
// Mid 2
|
||||
BIND_NUM(snd_eq_mid2_gain, 0, -12, 12,
|
||||
"Equalizer mid2 frequency range gain [dB]");
|
||||
BIND_NUM(snd_eq_mid2_center, 3000, 1000, 8000,
|
||||
"Equalizer mid2 center frequency [Hz]");
|
||||
BIND_NUM(snd_eq_mid2_width, 100, 1, 100,
|
||||
"Equalizer mid2 bandwidth [octave] (1 = 0.01; 100 = 1.0)");
|
||||
|
||||
// High
|
||||
BIND_NUM(snd_eq_high_gain, 0, -12, 12,
|
||||
"Equalizer high frequency range gain [dB]");
|
||||
BIND_NUM(snd_eq_high_cutoff, 6000, 4000, 16000,
|
||||
"Equalizer high cut-off frequency [Hz]");
|
||||
}
|
||||
|
||||
boolean I_OAL_InitSound(int snd_module)
|
||||
|
@ -38,6 +38,7 @@
|
||||
#include "i_flickstick.h"
|
||||
#include "i_gamepad.h"
|
||||
#include "i_gyro.h"
|
||||
#include "i_oalequalizer.h"
|
||||
#include "i_printf.h"
|
||||
#include "i_rumble.h"
|
||||
#include "i_sound.h"
|
||||
@ -113,6 +114,7 @@ void M_InitConfig(void)
|
||||
R_BindRenderVariables();
|
||||
|
||||
I_BindSoundVariables();
|
||||
I_BindEqualizerVariables();
|
||||
|
||||
MN_BindMenuVariables();
|
||||
D_BindMiscVariables();
|
||||
|
@ -70,6 +70,7 @@ void MN_SetNextMenuAlt(ss_types type);
|
||||
boolean MN_PointInsideRect(mrect_t *rect, int x, int y);
|
||||
void MN_ClearMenus(void);
|
||||
void MN_Back(void);
|
||||
void MN_BackSecondary(void);
|
||||
|
||||
#define M_X_CENTER (-1)
|
||||
|
||||
@ -94,6 +95,8 @@ void MN_DrawStatusHUD(void);
|
||||
void MN_DrawAutoMap(void);
|
||||
void MN_DrawWeapons(void);
|
||||
void MN_DrawEnemy(void);
|
||||
void MN_DrawGyro(void);
|
||||
void MN_DrawEqualizer(void);
|
||||
|
||||
/////////////////////////////
|
||||
//
|
||||
|
@ -1781,7 +1781,7 @@ static menuitem_t Generic_Setup[] = {
|
||||
// with the main Setup screen.
|
||||
|
||||
static menu_t SetupDef = {
|
||||
ss_max, // number of Setup Menu items (Key Bindings, etc.)
|
||||
ss_comp + 1, // number of Setup Menu items (Key Bindings, etc.)
|
||||
&MainDef, // menu to return to when BACKSPACE is hit on this menu
|
||||
SetupMenu, // definition of items to show on the Setup Screen
|
||||
M_DrawSetup, // program that draws the Setup Screen
|
||||
@ -1867,11 +1867,27 @@ static menu_t CompatDef = // killough 10/98
|
||||
0
|
||||
};
|
||||
|
||||
static menu_t EqualizerDef = {
|
||||
generic_setup_end, // numitems
|
||||
&SetupDef, // prevMenu
|
||||
Generic_Setup, // menuitems
|
||||
MN_DrawEqualizer, // routine
|
||||
34, 5, // x, y (skull drawn here)
|
||||
};
|
||||
|
||||
static menu_t GyroDef = {
|
||||
generic_setup_end, // numitems
|
||||
&SetupDef, // prevMenu
|
||||
Generic_Setup, // menuitems
|
||||
MN_DrawGyro, // routine
|
||||
34, 5, // x, y (skull drawn here)
|
||||
};
|
||||
|
||||
void MN_SetNextMenuAlt(ss_types type)
|
||||
{
|
||||
static menu_t *setup_defs[] = {
|
||||
&KeybndDef, &WeaponDef, &StatusHUDDef, &AutoMapDef,
|
||||
&EnemyDef, &GeneralDef, &CompatDef,
|
||||
&KeybndDef, &WeaponDef, &StatusHUDDef, &AutoMapDef, &EnemyDef,
|
||||
&GeneralDef, &CompatDef, &EqualizerDef, &GyroDef,
|
||||
};
|
||||
|
||||
SetNextMenu(setup_defs[type]);
|
||||
@ -1920,17 +1936,35 @@ void MN_ClearMenus(void)
|
||||
G_ClearInput();
|
||||
}
|
||||
|
||||
void MN_Back(void)
|
||||
static boolean MenuBack(void)
|
||||
{
|
||||
if (!currentMenu->prevMenu)
|
||||
{
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
|
||||
currentMenu = currentMenu->prevMenu;
|
||||
itemOn = currentMenu->lastOn;
|
||||
highlight_item = 0;
|
||||
M_StartSound(sfx_swtchn);
|
||||
return true;
|
||||
}
|
||||
|
||||
void MN_Back(void)
|
||||
{
|
||||
MenuBack();
|
||||
}
|
||||
|
||||
void MN_BackSecondary(void)
|
||||
{
|
||||
if (MenuBack())
|
||||
{
|
||||
if (currentMenu->menuitems && currentMenu->numitems > itemOn
|
||||
&& currentMenu->menuitems[itemOn].routine)
|
||||
{
|
||||
currentMenu->menuitems[itemOn].routine(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -62,6 +62,7 @@ void MN_UpdateFreeLook(boolean condition);
|
||||
void MN_UpdateMouseLook(void);
|
||||
void MN_UpdatePadLook(void);
|
||||
void MN_UpdateAllGamepadItems(void);
|
||||
void MN_UpdateEqualizerItems(void);
|
||||
void MN_UpdateAdvancedSoundItems(boolean toggle);
|
||||
void MN_ResetTimeScale(void);
|
||||
void MN_SetHUFontKerning(void);
|
||||
|
305
src/mn_setup.c
305
src/mn_setup.c
@ -175,6 +175,7 @@ static boolean setup_select = false; // changing an item
|
||||
static boolean setup_gather = false; // gathering keys for value
|
||||
boolean default_verify = false; // verify reset defaults decision
|
||||
static boolean block_input;
|
||||
boolean setup_active_secondary;
|
||||
|
||||
/////////////////////////////
|
||||
//
|
||||
@ -1094,11 +1095,19 @@ static void DrawGyroCalibration(void)
|
||||
block_input = true;
|
||||
DrawNotification("Starting calibration...", CR_GRAY, false);
|
||||
I_UpdateGyroCalibrationState();
|
||||
if (I_GetGyroCalibrationState() == GYRO_CALIBRATION_ACTIVE)
|
||||
{
|
||||
M_StartSound(sfx_pstop);
|
||||
}
|
||||
break;
|
||||
|
||||
case GYRO_CALIBRATION_ACTIVE:
|
||||
DrawNotification("Calibrating, please wait...", CR_GRAY, false);
|
||||
I_UpdateGyroCalibrationState();
|
||||
if (I_GetGyroCalibrationState() == GYRO_CALIBRATION_COMPLETE)
|
||||
{
|
||||
M_StartSound(sfx_pstop);
|
||||
}
|
||||
break;
|
||||
|
||||
case GYRO_CALIBRATION_COMPLETE:
|
||||
@ -1106,6 +1115,7 @@ static void DrawGyroCalibration(void)
|
||||
I_UpdateGyroCalibrationState();
|
||||
if (I_GetGyroCalibrationState() == GYRO_CALIBRATION_INACTIVE)
|
||||
{
|
||||
M_StartSound(sfx_swtchx);
|
||||
block_input = false;
|
||||
}
|
||||
break;
|
||||
@ -1293,6 +1303,12 @@ static void SetupMenu(void)
|
||||
current_menu[--set_item_on].m_flags |= S_HILITE;
|
||||
}
|
||||
|
||||
static void SetupMenuSecondary(void)
|
||||
{
|
||||
setup_active_secondary = true;
|
||||
SetupMenu();
|
||||
}
|
||||
|
||||
/////////////////////////////
|
||||
//
|
||||
// The Key Binding Screen tables.
|
||||
@ -2085,8 +2101,7 @@ static setup_tab_t gen_tabs[] = {
|
||||
{"video"},
|
||||
{"audio"},
|
||||
{"mouse"},
|
||||
{"pad"},
|
||||
{"gyro"},
|
||||
{"gamepad"},
|
||||
{"display"},
|
||||
{"misc"},
|
||||
{NULL}
|
||||
@ -2312,7 +2327,7 @@ static void SetMidiPlayer(void)
|
||||
S_RestartMusic();
|
||||
}
|
||||
|
||||
static const char *equalizer_preset_strings[] = {"Off", "Classical", "Rock", "Vocal"};
|
||||
static void MN_Equalizer(void);
|
||||
|
||||
static setup_menu_t gen_settings2[] = {
|
||||
|
||||
@ -2335,12 +2350,11 @@ static setup_menu_t gen_settings2[] = {
|
||||
// [FG] play sounds in full length
|
||||
{"Disable Cutoffs", S_ONOFF, CNTR_X, M_SPC, {"full_sounds"}},
|
||||
|
||||
{"Equalizer Preset", S_CHOICE, CNTR_X, M_SPC, {"snd_equalizer"},
|
||||
.strings_id = str_equalizer_preset, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"Resampler", S_CHOICE, CNTR_X, M_SPC, {"snd_resampler"},
|
||||
.strings_id = str_resampler, .action = I_OAL_SetResampler},
|
||||
|
||||
{"Equalizer Options", S_FUNC, CNTR_X, M_SPC, .action = MN_Equalizer},
|
||||
|
||||
MI_GAP,
|
||||
|
||||
// [FG] music backend
|
||||
@ -2351,47 +2365,6 @@ static setup_menu_t gen_settings2[] = {
|
||||
MI_END
|
||||
};
|
||||
|
||||
/*
|
||||
static setup_menu_t gen_settings_eq[] = {
|
||||
{"Preamp dB", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_preamp"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"Low Gain dB", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_low_gain"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"Mid 1 Gain dB", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_mid1_gain"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"Mid 2 Gain dB", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_mid2_gain"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"High Gain dB", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_high_gain"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
|
||||
{"Low Cutoff Hz", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_low_cutoff"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"Mid 1 Center Hz", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_mid1_center"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"Mid 2 Center Hz", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_mid2_center"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"High Cutoff Hz", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_high_cutoff"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
|
||||
{"Mid 1 Width Oct", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_mid1_width"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
{"Mid 2 Width Oct", S_THERMO | S_THRM_SIZE11, M_X_THRM11, M_THRM_SPC,
|
||||
{"snd_eq_mid2_width"}, m_null, input_null, str_empty, I_OAL_SetEqualizer},
|
||||
|
||||
MI_END
|
||||
};
|
||||
*/
|
||||
|
||||
static const char **GetResamplerStrings(void)
|
||||
{
|
||||
const char **strings = I_OAL_GetResamplerStrings();
|
||||
@ -2399,6 +2372,99 @@ static const char **GetResamplerStrings(void)
|
||||
return strings;
|
||||
}
|
||||
|
||||
static const char *equalizer_preset_strings[] = {
|
||||
"Off", "Classical", "Rock", "Vocal", "Custom"
|
||||
};
|
||||
|
||||
#define M_THRM_SPC_EQ (M_THRM_HEIGHT - 1)
|
||||
#define M_SPC_EQ 8
|
||||
#define MI_GAP_EQ {NULL, S_SKIP, 0, 4}
|
||||
|
||||
static setup_menu_t eq_settings1[] = {
|
||||
{"Preset", S_CHOICE, CNTR_X, M_SPC_EQ, {"snd_equalizer"},
|
||||
.strings_id = str_equalizer_preset, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
MI_GAP_EQ,
|
||||
|
||||
{"Preamp dB", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_preamp"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
MI_GAP_EQ,
|
||||
|
||||
{"Low Gain dB", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_low_gain"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"Mid 1 Gain dB", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_mid1_gain"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"Mid 2 Gain dB", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_mid2_gain"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"High Gain dB", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_high_gain"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
MI_GAP_EQ,
|
||||
|
||||
{"Low Cutoff Hz", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_low_cutoff"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"Mid 1 Center Hz", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_mid1_center"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"Mid 2 Center Hz", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_mid2_center"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
{"High Cutoff Hz", S_THERMO, CNTR_X, M_THRM_SPC_EQ,
|
||||
{"snd_eq_high_cutoff"}, .action = I_OAL_EqualizerPreset},
|
||||
|
||||
MI_END
|
||||
};
|
||||
|
||||
static setup_menu_t *eq_settings[] = {eq_settings1, NULL};
|
||||
|
||||
void MN_UpdateEqualizerItems(void)
|
||||
{
|
||||
const boolean condition = !I_OAL_CustomEqualizer();
|
||||
|
||||
DisableItem(!I_OAL_EqualizerInitialized(), gen_settings2, "Equalizer Options");
|
||||
DisableItem(!I_OAL_EqualizerInitialized(), eq_settings1, "snd_equalizer");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_preamp");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_low_gain");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_low_cutoff");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_mid1_gain");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_mid1_center");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_mid2_gain");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_mid2_center");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_high_gain");
|
||||
DisableItem(condition, eq_settings1, "snd_eq_high_cutoff");
|
||||
}
|
||||
|
||||
static setup_tab_t equalizer_tabs[] = {{"Equalizer"}, {NULL}};
|
||||
|
||||
static void MN_Equalizer(void)
|
||||
{
|
||||
SetItemOn(set_item_on);
|
||||
SetPageIndex(current_page);
|
||||
|
||||
MN_SetNextMenuAlt(ss_eq);
|
||||
setup_screen = ss_eq;
|
||||
current_page = GetPageIndex(eq_settings);
|
||||
current_menu = eq_settings[current_page];
|
||||
current_tabs = equalizer_tabs;
|
||||
SetupMenuSecondary();
|
||||
}
|
||||
|
||||
void MN_DrawEqualizer(void)
|
||||
{
|
||||
inhelpscreens = true;
|
||||
|
||||
DrawBackground("FLOOR4_6");
|
||||
MN_DrawTitle(M_X_CENTER, M_Y_TITLE, "M_GENERL", "General");
|
||||
DrawTabs();
|
||||
DrawInstructions();
|
||||
DrawScreenItems(current_menu);
|
||||
}
|
||||
|
||||
void MN_UpdateFreeLook(boolean condition)
|
||||
{
|
||||
P_UpdateDirectVerticalAiming();
|
||||
@ -2512,8 +2578,12 @@ static const char *curve_strings[] = {
|
||||
"2.4", "2.5", "2.6", "2.7", "2.8", "2.9", "Cubed"
|
||||
};
|
||||
|
||||
static void MN_Gyro(void);
|
||||
|
||||
static setup_menu_t gen_settings4[] = {
|
||||
|
||||
{"Gyro Options", S_FUNC, CNTR_X, M_SPC, .action = MN_Gyro},
|
||||
|
||||
{"Stick Layout", S_CHOICE, CNTR_X, M_SPC, {"joy_stick_layout"},
|
||||
.strings_id = str_layout, .action = UpdateStickLayout},
|
||||
|
||||
@ -2550,20 +2620,15 @@ static setup_menu_t gen_settings4[] = {
|
||||
|
||||
static void UpdateGamepadItems(void)
|
||||
{
|
||||
boolean condition =
|
||||
(!I_UseGamepad() || !I_GamepadEnabled() || !I_RumbleSupported());
|
||||
const boolean gamepad = (I_UseGamepad() && I_GamepadEnabled());
|
||||
const boolean gyro = (I_GyroEnabled() && I_GyroSupported());
|
||||
const boolean sticks = I_UseStickLayout();
|
||||
const boolean condition = (!gamepad || !sticks);
|
||||
|
||||
DisableItem(condition, gen_settings4, "joy_rumble");
|
||||
|
||||
// Allow padlook toggle when the gamepad is using gyro, even if the
|
||||
// stick layout is set to off.
|
||||
condition =
|
||||
(!I_UseGamepad() || !I_GamepadEnabled()
|
||||
|| (!I_UseStickLayout() && (!I_GyroEnabled() || !I_GyroSupported())));
|
||||
|
||||
DisableItem(condition, gen_settings4, "padlook");
|
||||
|
||||
condition = (!I_UseGamepad() || !I_GamepadEnabled() || !I_UseStickLayout());
|
||||
DisableItem(!gamepad || !I_GyroSupported(), gen_settings4, "Gyro Options");
|
||||
DisableItem(!gamepad || !I_RumbleSupported(), gen_settings4, "joy_rumble");
|
||||
DisableItem(!gamepad || (!sticks && !gyro), gen_settings4, "padlook");
|
||||
DisableItem(!gamepad, gen_settings4, "joy_stick_layout");
|
||||
DisableItem(condition, gen_settings4, "joy_invert_look");
|
||||
DisableItem(condition, gen_settings4, "joy_movement_inner_deadzone");
|
||||
DisableItem(condition, gen_settings4, "joy_camera_inner_deadzone");
|
||||
@ -2576,7 +2641,7 @@ static void UpdateGyroItems(void);
|
||||
|
||||
static void UpdateGyroAiming(void)
|
||||
{
|
||||
UpdateGamepadItems(); // Update padlook.
|
||||
UpdateGamepadItems(); // Update "Gyro Options" and padlook.
|
||||
UpdateGyroItems();
|
||||
I_SetSensorsEnabled(I_GyroEnabled());
|
||||
I_ResetGamepad();
|
||||
@ -2648,7 +2713,7 @@ static void UpdateGyroSteadying(void)
|
||||
I_ResetGamepad();
|
||||
}
|
||||
|
||||
static setup_menu_t gen_gyro[] = {
|
||||
static setup_menu_t gyro_settings1[] = {
|
||||
|
||||
{"Gyro Aiming", S_ONOFF, CNTR_X, M_SPC, {"gyro_enable"},
|
||||
.action = UpdateGyroAiming},
|
||||
@ -2685,32 +2750,68 @@ static setup_menu_t gen_gyro[] = {
|
||||
MI_END
|
||||
};
|
||||
|
||||
static setup_menu_t *gyro_settings[] = {gyro_settings1, NULL};
|
||||
|
||||
static void UpdateGyroItems(void)
|
||||
{
|
||||
const boolean condition = (!I_UseGamepad() || !I_GamepadEnabled()
|
||||
|| !I_GyroEnabled() || !I_GyroSupported());
|
||||
const boolean gamepad = (I_UseGamepad() && I_GamepadEnabled());
|
||||
const boolean gyro = (I_GyroEnabled() && I_GyroSupported());
|
||||
const boolean condition = (!gamepad || !gyro);
|
||||
|
||||
DisableItem(condition, gen_gyro, "gyro_space");
|
||||
DisableItem(condition, gen_gyro, "gyro_button_action");
|
||||
DisableItem(condition, gen_gyro, "gyro_stick_action");
|
||||
DisableItem(condition, gen_gyro, "gyro_turn_speed");
|
||||
DisableItem(condition, gen_gyro, "gyro_look_speed");
|
||||
DisableItem(condition, gen_gyro, "gyro_acceleration");
|
||||
DisableItem(condition, gen_gyro, "gyro_smooth_threshold");
|
||||
DisableItem(condition, gen_gyro, "Calibrate");
|
||||
DisableItem(!gamepad || !I_GyroSupported(), gyro_settings1, "gyro_enable");
|
||||
DisableItem(condition, gyro_settings1, "gyro_space");
|
||||
DisableItem(condition, gyro_settings1, "gyro_button_action");
|
||||
DisableItem(condition, gyro_settings1, "gyro_stick_action");
|
||||
DisableItem(condition, gyro_settings1, "gyro_turn_speed");
|
||||
DisableItem(condition, gyro_settings1, "gyro_look_speed");
|
||||
DisableItem(condition, gyro_settings1, "gyro_acceleration");
|
||||
DisableItem(condition, gyro_settings1, "gyro_smooth_threshold");
|
||||
DisableItem(condition, gyro_settings1, "Calibrate");
|
||||
}
|
||||
|
||||
void MN_UpdateAllGamepadItems(void)
|
||||
{
|
||||
const boolean condition = (!I_UseGamepad() || !I_GamepadEnabled());
|
||||
|
||||
DisableItem(condition, gen_settings4, "joy_stick_layout");
|
||||
UpdateGamepadItems();
|
||||
|
||||
DisableItem(condition || !I_GyroSupported(), gen_gyro, "gyro_enable");
|
||||
UpdateGyroItems();
|
||||
}
|
||||
|
||||
static setup_tab_t gyro_tabs[] = {{"Gyro"}, {NULL}};
|
||||
|
||||
static void MN_Gyro(void)
|
||||
{
|
||||
SetItemOn(set_item_on);
|
||||
SetPageIndex(current_page);
|
||||
|
||||
MN_SetNextMenuAlt(ss_gyro);
|
||||
setup_screen = ss_gyro;
|
||||
current_page = GetPageIndex(gyro_settings);
|
||||
current_menu = gyro_settings[current_page];
|
||||
current_tabs = gyro_tabs;
|
||||
SetupMenuSecondary();
|
||||
}
|
||||
|
||||
void MN_DrawGyro(void)
|
||||
{
|
||||
inhelpscreens = true;
|
||||
|
||||
DrawBackground("FLOOR4_6");
|
||||
MN_DrawTitle(M_X_CENTER, M_Y_TITLE, "M_GENERL", "General");
|
||||
DrawTabs();
|
||||
DrawInstructions();
|
||||
|
||||
if (I_UseGamepad() && I_GyroEnabled())
|
||||
{
|
||||
DrawIndicator = DrawIndicator_Meter;
|
||||
}
|
||||
else
|
||||
{
|
||||
DrawIndicator = NULL;
|
||||
}
|
||||
|
||||
DrawScreenItems(current_menu);
|
||||
DrawGyroCalibration();
|
||||
}
|
||||
|
||||
static void SmoothLight(void)
|
||||
{
|
||||
setsmoothlight = true;
|
||||
@ -2838,7 +2939,7 @@ static setup_menu_t gen_settings6[] = {
|
||||
};
|
||||
|
||||
static setup_menu_t *gen_settings[] = {
|
||||
gen_settings1, gen_settings2, gen_settings3, gen_settings4, gen_gyro,
|
||||
gen_settings1, gen_settings2, gen_settings3, gen_settings4,
|
||||
gen_settings5, gen_settings6, NULL
|
||||
};
|
||||
|
||||
@ -2896,9 +2997,7 @@ void MN_DrawGeneral(void)
|
||||
DrawTabs();
|
||||
DrawInstructions();
|
||||
|
||||
if (I_UseGamepad()
|
||||
&& ((current_menu == gen_settings4 && I_UseStickLayout())
|
||||
|| (current_menu == gen_gyro && I_GyroEnabled())))
|
||||
if (I_UseGamepad() && current_menu == gen_settings4 && I_UseStickLayout())
|
||||
{
|
||||
DrawIndicator = DrawIndicator_Meter;
|
||||
}
|
||||
@ -2909,11 +3008,6 @@ void MN_DrawGeneral(void)
|
||||
|
||||
DrawScreenItems(current_menu);
|
||||
|
||||
if (current_menu == gen_gyro)
|
||||
{
|
||||
DrawGyroCalibration();
|
||||
}
|
||||
|
||||
// If the Reset Button has been selected, an "Are you sure?" message
|
||||
// is overlayed across everything else.
|
||||
|
||||
@ -2955,6 +3049,8 @@ static setup_menu_t **setup_screens[] = {
|
||||
enem_settings,
|
||||
gen_settings, // killough 10/98
|
||||
comp_settings,
|
||||
eq_settings,
|
||||
gyro_settings,
|
||||
};
|
||||
|
||||
// [FG] save the index of the current screen in the first page's S_END element's
|
||||
@ -2997,7 +3093,7 @@ static void SetPageIndex(const int y)
|
||||
//
|
||||
// killough 10/98: rewritten to fix bugs and warn about pending changes
|
||||
|
||||
static void ResetDefaults()
|
||||
static void ResetDefaults(ss_types reset_screen)
|
||||
{
|
||||
default_t *dp;
|
||||
int warn = 0;
|
||||
@ -3013,12 +3109,12 @@ static void ResetDefaults()
|
||||
|
||||
for (dp = defaults; dp->name; dp++)
|
||||
{
|
||||
if (dp->setupscreen != setup_screen)
|
||||
if (dp->setupscreen != reset_screen)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
setup_menu_t **screens = setup_screens[setup_screen];
|
||||
setup_menu_t **screens = setup_screens[reset_screen];
|
||||
|
||||
for (; *screens; screens++)
|
||||
{
|
||||
@ -3077,6 +3173,15 @@ static void ResetDefaults()
|
||||
}
|
||||
}
|
||||
|
||||
static void ResetDefaultsSecondary(void)
|
||||
{
|
||||
if (setup_screen == ss_gen)
|
||||
{
|
||||
ResetDefaults(ss_eq);
|
||||
ResetDefaults(ss_gyro);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// M_InitDefaults()
|
||||
//
|
||||
@ -3760,7 +3865,7 @@ boolean MN_SetupResponder(menu_action_t action, int ch)
|
||||
current_item->action();
|
||||
}
|
||||
|
||||
M_StartSound(sfx_itemup);
|
||||
M_StartSound(sfx_pistol);
|
||||
return true;
|
||||
}
|
||||
|
||||
@ -3772,7 +3877,8 @@ boolean MN_SetupResponder(menu_action_t action, int ch)
|
||||
{
|
||||
if (M_ToUpper(ch) == 'Y' || action == MENU_ENTER)
|
||||
{
|
||||
ResetDefaults();
|
||||
ResetDefaults(setup_screen);
|
||||
ResetDefaultsSecondary();
|
||||
default_verify = false;
|
||||
SelectDone(current_item);
|
||||
}
|
||||
@ -3946,14 +4052,24 @@ boolean MN_SetupResponder(menu_action_t action, int ch)
|
||||
if (action == MENU_ESCAPE) // Clear all menus
|
||||
{
|
||||
MN_ClearMenus();
|
||||
setup_active = false;
|
||||
setup_active_secondary = false;
|
||||
}
|
||||
else if (action == MENU_BACKSPACE)
|
||||
else
|
||||
{
|
||||
MN_Back();
|
||||
if (setup_active_secondary)
|
||||
{
|
||||
MN_BackSecondary();
|
||||
setup_active_secondary = false;
|
||||
}
|
||||
else
|
||||
{
|
||||
MN_Back();
|
||||
setup_active = false;
|
||||
}
|
||||
}
|
||||
|
||||
current_item->m_flags &= ~(S_HILITE | S_SELECT); // phares 4/19/98
|
||||
setup_active = false;
|
||||
set_keybnd_active = false;
|
||||
set_weapon_active = false;
|
||||
default_verify = false; // phares 4/19/98
|
||||
@ -4341,6 +4457,7 @@ void MN_SetupResetMenu(void)
|
||||
UpdateCrosshairItems();
|
||||
UpdateCenteredWeaponItem();
|
||||
MN_UpdateAllGamepadItems();
|
||||
MN_UpdateEqualizerItems();
|
||||
}
|
||||
|
||||
void MN_BindMenuVariables(void)
|
||||
|
Loading…
x
Reference in New Issue
Block a user