Setup Menu can now control assignment of players to control templates

git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@2310 8092fc87-c524-0410-9efc-e669fe64eaf9
This commit is contained in:
mcmartin
2006-04-15 23:12:03 +00:00
parent 8c32f418c3
commit e75157a35b
11 changed files with 181 additions and 43 deletions
+2
View File
@@ -1,4 +1,6 @@
Changes towards version 0.6: Changes towards version 0.6:
- Phase 2 of online keyconfig - Setup Menu can configure assignment of
templates to players - Michael
- Control scheme shifted to Menus + Control Templates in preparation for - Control scheme shifted to Menus + Control Templates in preparation for
the online keyconfig - Michael the online keyconfig - Michael
- Fixes to logic in the Utwig conversations (Bugs 327, 647), from Nic - Fixes to logic in the Utwig conversations (Bugs 327, 647), from Nic
+86 -1
View File
@@ -29,6 +29,8 @@ Positional Audio
Sound Driver Sound Driver
Sound Quality Sound Quality
Slave Shields Slave Shields
Player One
Player Two
#(CAT_0_OPTS) #(CAT_0_OPTS)
320x240 320x240
@@ -301,6 +303,82 @@ This mimics the PC version.
Slave shields pulsate. Slave shields pulsate.
This mimics the 3do verion. This mimics the 3do verion.
#(CAT_18_OPTS)
Keyboard #1
Keyboard #2
Keyboard #3
Joystick #1
Joystick #2
Joystick #3
#(CAT_18_OPT_0_DESC)
Player 1 uses the Keyboard 1 template.
Player 1 controls the bottom player in
Super Melee, and the entire Full Game.
#(CAT_18_OPT_1_DESC)
Player 1 uses the Keyboard 2 template.
Player 1 controls the bottom player in
Super Melee, and the entire Full Game.
#(CAT_18_OPT_2_DESC)
Player 1 uses the Keyboard 3 template.
Player 1 controls the bottom player in
Super Melee, and the entire Full Game.
#(CAT_18_OPT_3_DESC)
Player 1 uses the Joystick 1 template.
Player 1 controls the bottom player in
Super Melee, and the entire Full Game.
#(CAT_18_OPT_4_DESC)
Player 1 uses the Joystick 2 template.
Player 1 controls the bottom player in
Super Melee, and the entire Full Game.
#(CAT_18_OPT_5_DESC)
Player 1 uses the Joystick 3 template.
Player 1 controls the bottom player in
Super Melee, and the entire Full Game.
#(CAT_19_OPTS)
Keyboard #1
Keyboard #2
Keyboard #3
Joystick #1
Joystick #2
Joystick #3
#(CAT_19_OPT_0_DESC)
Player 2 uses the Keyboard 1 template.
Player 2 controls the top player
in Super Melee.
#(CAT_19_OPT_1_DESC)
Player 2 uses the Keyboard 2 template.
Player 2 controls the top player
in Super Melee.
#(CAT_19_OPT_2_DESC)
Player 2 uses the Keyboard 3 template.
Player 2 controls the top player
in Super Melee.
#(CAT_19_OPT_3_DESC)
Player 2 uses the Joystick 1 template.
Player 2 controls the top player
in Super Melee.
#(CAT_19_OPT_4_DESC)
Player 2 uses the Joystick 2 template.
Player 2 controls the top player
in Super Melee.
#(CAT_19_OPT_5_DESC)
Player 2 uses the Joystick 3 template.
Player 2 controls the top player
in Super Melee.
#(SLIDERS) #(SLIDERS)
Music Volume Music Volume
SFX Volume SFX Volume
@@ -352,7 +430,7 @@ Currently unimplemented.
#(BUTTON_6_DESC) #(BUTTON_6_DESC)
Set up keyboard and joystick controls. Set up keyboard and joystick controls.
Currently unimplemented. Currently partially implemented.
#(BUTTON_7_DESC) #(BUTTON_7_DESC)
Select underlying drivers or other Select underlying drivers or other
@@ -360,9 +438,16 @@ hardware-dependent options.
#(LABELS) #(LABELS)
Incomplete Incomplete
Keyconfig incomplete
#(LABEL_0) #(LABEL_0)
This part of the configuration This part of the configuration
has not yet been implemented. has not yet been implemented.
Expect it in a future version. Expect it in a future version.
#(LABEL_1)
Control templates are currently defined
in the KEYS.CFG file stored near your
save games. A future UQM version will
offer in-game key configuration.
+3 -2
View File
@@ -61,7 +61,7 @@ enum {
NUM_MENU_KEYS NUM_MENU_KEYS
}; };
enum { typedef enum {
CONTROL_TEMPLATE_KB_1, CONTROL_TEMPLATE_KB_1,
CONTROL_TEMPLATE_KB_2, CONTROL_TEMPLATE_KB_2,
CONTROL_TEMPLATE_KB_3, CONTROL_TEMPLATE_KB_3,
@@ -69,7 +69,7 @@ enum {
CONTROL_TEMPLATE_JOY_2, CONTROL_TEMPLATE_JOY_2,
CONTROL_TEMPLATE_JOY_3, CONTROL_TEMPLATE_JOY_3,
NUM_TEMPLATES NUM_TEMPLATES
}; } CONTROL_TEMPLATE;
typedef struct _controller_input_state { typedef struct _controller_input_state {
int key[NUM_TEMPLATES][NUM_KEYS]; int key[NUM_TEMPLATES][NUM_KEYS];
@@ -91,6 +91,7 @@ extern battle_summary_func PlayerInput[];
extern CONTROLLER_INPUT_STATE CurrentInputState, PulsedInputState; extern CONTROLLER_INPUT_STATE CurrentInputState, PulsedInputState;
extern volatile CONTROLLER_INPUT_STATE ImmediateInputState; extern volatile CONTROLLER_INPUT_STATE ImmediateInputState;
extern CONTROL_TEMPLATE PlayerOne, PlayerTwo;
void UpdateInputState (void); void UpdateInputState (void);
void FlushInputState (void); void FlushInputState (void);
+3 -3
View File
@@ -652,10 +652,10 @@ UninitEncounter (void)
while (!(AnyButtonPress (TRUE)) && GetTimeCounter () < Time) while (!(AnyButtonPress (TRUE)) && GetTimeCounter () < Time)
TaskSwitch (); TaskSwitch ();
LockMutex (GraphicsLock); LockMutex (GraphicsLock);
if (!CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_ESCAPE]) if (!CurrentInputState.key[PlayerOne][KEY_ESCAPE])
{ {
DrawFadeText (str1, str2, FALSE, &scavenge_r); DrawFadeText (str1, str2, FALSE, &scavenge_r);
if (!CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_ESCAPE]) if (!CurrentInputState.key[PlayerOne][KEY_ESCAPE])
{ {
SetContextForeGroundColor (BLACK_COLOR); SetContextForeGroundColor (BLACK_COLOR);
r.corner.x = scavenge_r.corner.x + 10; r.corner.x = scavenge_r.corner.x + 10;
@@ -681,7 +681,7 @@ UninitEncounter (void)
&& GetTimeCounter () < Time) && GetTimeCounter () < Time)
TaskSwitch (); TaskSwitch ();
LockMutex (GraphicsLock); LockMutex (GraphicsLock);
if (!CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_ESCAPE]) if (!CurrentInputState.key[PlayerOne][KEY_ESCAPE])
DrawFadeText (str1, str2, FALSE, &scavenge_r); DrawFadeText (str1, str2, FALSE, &scavenge_r);
} }
} }
+14 -13
View File
@@ -49,6 +49,7 @@ typedef struct
} MENU_ANNOTATIONS; } MENU_ANNOTATIONS;
CONTROL_TEMPLATE PlayerOne, PlayerTwo;
CONTROLLER_INPUT_STATE CurrentInputState, PulsedInputState; CONTROLLER_INPUT_STATE CurrentInputState, PulsedInputState;
static CONTROLLER_INPUT_STATE CachedInputState, OldInputState; static CONTROLLER_INPUT_STATE CachedInputState, OldInputState;
static MENU_ANNOTATIONS RepeatDelays, Times; static MENU_ANNOTATIONS RepeatDelays, Times;
@@ -381,19 +382,19 @@ BATTLE_INPUT_STATE
p1_combat_summary (void) p1_combat_summary (void)
{ {
BATTLE_INPUT_STATE InputState = 0; BATTLE_INPUT_STATE InputState = 0;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_UP]) if (CurrentInputState.key[PlayerOne][KEY_UP])
InputState |= BATTLE_THRUST; InputState |= BATTLE_THRUST;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_LEFT]) if (CurrentInputState.key[PlayerOne][KEY_LEFT])
InputState |= BATTLE_LEFT; InputState |= BATTLE_LEFT;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_RIGHT]) if (CurrentInputState.key[PlayerOne][KEY_RIGHT])
InputState |= BATTLE_RIGHT; InputState |= BATTLE_RIGHT;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_WEAPON]) if (CurrentInputState.key[PlayerOne][KEY_WEAPON])
InputState |= BATTLE_WEAPON; InputState |= BATTLE_WEAPON;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_SPECIAL]) if (CurrentInputState.key[PlayerOne][KEY_SPECIAL])
InputState |= BATTLE_SPECIAL; InputState |= BATTLE_SPECIAL;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_ESCAPE]) if (CurrentInputState.key[PlayerOne][KEY_ESCAPE])
InputState |= BATTLE_ESCAPE; InputState |= BATTLE_ESCAPE;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_DOWN]) if (CurrentInputState.key[PlayerOne][KEY_DOWN])
InputState |= BATTLE_DOWN; InputState |= BATTLE_DOWN;
return InputState; return InputState;
} }
@@ -402,17 +403,17 @@ BATTLE_INPUT_STATE
p2_combat_summary (void) p2_combat_summary (void)
{ {
BATTLE_INPUT_STATE InputState = 0; BATTLE_INPUT_STATE InputState = 0;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_2][KEY_UP]) if (CurrentInputState.key[PlayerTwo][KEY_UP])
InputState |= BATTLE_THRUST; InputState |= BATTLE_THRUST;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_2][KEY_LEFT]) if (CurrentInputState.key[PlayerTwo][KEY_LEFT])
InputState |= BATTLE_LEFT; InputState |= BATTLE_LEFT;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_2][KEY_RIGHT]) if (CurrentInputState.key[PlayerTwo][KEY_RIGHT])
InputState |= BATTLE_RIGHT; InputState |= BATTLE_RIGHT;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_2][KEY_WEAPON]) if (CurrentInputState.key[PlayerTwo][KEY_WEAPON])
InputState |= BATTLE_WEAPON; InputState |= BATTLE_WEAPON;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_2][KEY_SPECIAL]) if (CurrentInputState.key[PlayerTwo][KEY_SPECIAL])
InputState |= BATTLE_SPECIAL; InputState |= BATTLE_SPECIAL;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_2][KEY_DOWN]) if (CurrentInputState.key[PlayerTwo][KEY_DOWN])
InputState |= BATTLE_DOWN; InputState |= BATTLE_DOWN;
return InputState; return InputState;
} }
+10 -10
View File
@@ -76,28 +76,28 @@ DoGetMelee (GETMELEE_STATE *gms)
} }
else if (which_player == 0) else if (which_player == 0)
{ {
left = PulsedInputState.key[CONTROL_TEMPLATE_KB_1][KEY_LEFT] || left = PulsedInputState.key[PlayerOne][KEY_LEFT] ||
PulsedInputState.menu[KEY_MENU_LEFT]; PulsedInputState.menu[KEY_MENU_LEFT];
right = PulsedInputState.key[CONTROL_TEMPLATE_KB_1][KEY_RIGHT] || right = PulsedInputState.key[PlayerOne][KEY_RIGHT] ||
PulsedInputState.menu[KEY_MENU_RIGHT]; PulsedInputState.menu[KEY_MENU_RIGHT];
up = PulsedInputState.key[CONTROL_TEMPLATE_KB_1][KEY_UP] || up = PulsedInputState.key[PlayerOne][KEY_UP] ||
PulsedInputState.menu[KEY_MENU_UP]; PulsedInputState.menu[KEY_MENU_UP];
down = PulsedInputState.key[CONTROL_TEMPLATE_KB_1][KEY_DOWN] || down = PulsedInputState.key[PlayerOne][KEY_DOWN] ||
PulsedInputState.menu[KEY_MENU_DOWN]; PulsedInputState.menu[KEY_MENU_DOWN];
select = PulsedInputState.key[CONTROL_TEMPLATE_KB_1][KEY_WEAPON] || select = PulsedInputState.key[PlayerOne][KEY_WEAPON] ||
PulsedInputState.menu[KEY_MENU_SELECT]; PulsedInputState.menu[KEY_MENU_SELECT];
} }
else else
{ {
left = PulsedInputState.key[CONTROL_TEMPLATE_KB_2][KEY_LEFT] || left = PulsedInputState.key[PlayerTwo][KEY_LEFT] ||
PulsedInputState.menu[KEY_MENU_LEFT]; PulsedInputState.menu[KEY_MENU_LEFT];
right = PulsedInputState.key[CONTROL_TEMPLATE_KB_2][KEY_RIGHT] || right = PulsedInputState.key[PlayerTwo][KEY_RIGHT] ||
PulsedInputState.menu[KEY_MENU_RIGHT]; PulsedInputState.menu[KEY_MENU_RIGHT];
up = PulsedInputState.key[CONTROL_TEMPLATE_KB_2][KEY_UP] || up = PulsedInputState.key[PlayerTwo][KEY_UP] ||
PulsedInputState.menu[KEY_MENU_UP]; PulsedInputState.menu[KEY_MENU_UP];
down = PulsedInputState.key[CONTROL_TEMPLATE_KB_2][KEY_DOWN] || down = PulsedInputState.key[PlayerTwo][KEY_DOWN] ||
PulsedInputState.menu[KEY_MENU_DOWN]; PulsedInputState.menu[KEY_MENU_DOWN];
select = PulsedInputState.key[CONTROL_TEMPLATE_KB_2][KEY_WEAPON] || select = PulsedInputState.key[PlayerTwo][KEY_WEAPON] ||
PulsedInputState.menu[KEY_MENU_SELECT]; PulsedInputState.menu[KEY_MENU_SELECT];
} }
+6 -6
View File
@@ -1625,7 +1625,7 @@ SetVelocityComponents (
} }
else if (pMS->delta_item == 0 else if (pMS->delta_item == 0
|| (HIBYTE (pMS->delta_item) || (HIBYTE (pMS->delta_item)
&& (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_ESCAPE] && (CurrentInputState.key[PlayerOne][KEY_ESCAPE]
|| ((PPLANETSIDE_DESC)pMenuState->ModuleFrame)->InTransit))) || ((PPLANETSIDE_DESC)pMenuState->ModuleFrame)->InTransit)))
{ {
if (pMS->delta_item || pMS->CurState > EXPLOSION_LIFE + 60) if (pMS->delta_item || pMS->CurState > EXPLOSION_LIFE + 60)
@@ -1686,9 +1686,9 @@ SetVelocityComponents (
index = GetFrameIndex (LanderFrame[0]); index = GetFrameIndex (LanderFrame[0]);
if (LONIBBLE (pMS->CurState)) if (LONIBBLE (pMS->CurState))
pMS->CurState -= MAKE_BYTE (1, 0); pMS->CurState -= MAKE_BYTE (1, 0);
else if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_LEFT] || CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_RIGHT]) else if (CurrentInputState.key[PlayerOne][KEY_LEFT] || CurrentInputState.key[PlayerOne][KEY_RIGHT])
{ {
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_LEFT]) if (CurrentInputState.key[PlayerOne][KEY_LEFT])
{ {
dx = -1; dx = -1;
--index; --index;
@@ -1728,7 +1728,7 @@ SetVelocityComponents (
); );
} }
if (!CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_UP]) if (!CurrentInputState.key[PlayerOne][KEY_UP])
dx = dy = 0; dx = dy = 0;
else else
GetNextVelocityComponents ( GetNextVelocityComponents (
@@ -1737,7 +1737,7 @@ SetVelocityComponents (
if (HINIBBLE (pMS->CurState)) if (HINIBBLE (pMS->CurState))
pMS->CurState -= MAKE_BYTE (0, 1); pMS->CurState -= MAKE_BYTE (0, 1);
else if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_WEAPON]) else if (CurrentInputState.key[PlayerOne][KEY_WEAPON])
{ {
HELEMENT hWeaponElement; HELEMENT hWeaponElement;
@@ -1766,7 +1766,7 @@ SetVelocityComponents (
index + ANGLE_TO_FACING (FULL_CIRCLE) index + ANGLE_TO_FACING (FULL_CIRCLE)
); );
if (!CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_UP]) if (!CurrentInputState.key[PlayerOne][KEY_UP])
wdx = wdy = 0; wdx = wdy = 0;
else else
GetCurrentVelocityComponents ( GetCurrentVelocityComponents (
+3 -3
View File
@@ -810,15 +810,15 @@ ProcessShipControls (void)
ClockTick (); ClockTick ();
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_UP]) if (CurrentInputState.key[PlayerOne][KEY_UP])
delta_y = -1; delta_y = -1;
else else
delta_y = 0; delta_y = 0;
delta_x = 0; delta_x = 0;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_LEFT]) if (CurrentInputState.key[PlayerOne][KEY_LEFT])
delta_x -= 1; delta_x -= 1;
if (CurrentInputState.key[CONTROL_TEMPLATE_KB_1][KEY_RIGHT]) if (CurrentInputState.key[PlayerOne][KEY_RIGHT])
delta_x += 1; delta_x += 1;
if (delta_x || delta_y < 0) if (delta_x || delta_y < 0)
+24 -5
View File
@@ -65,10 +65,10 @@ static int do_advanced (WIDGET *self, int event);
#endif #endif
#define MENU_COUNT 7 #define MENU_COUNT 7
#define CHOICE_COUNT 18 #define CHOICE_COUNT 20
#define SLIDER_COUNT 3 #define SLIDER_COUNT 3
#define BUTTON_COUNT 8 #define BUTTON_COUNT 8
#define LABEL_COUNT 1 #define LABEL_COUNT 2
/* The space for our widgets */ /* The space for our widgets */
static WIDGET_MENU_SCREEN menus[MENU_COUNT]; static WIDGET_MENU_SCREEN menus[MENU_COUNT];
@@ -83,14 +83,15 @@ typedef int (*HANDLER)(WIDGET *, int);
static int choice_widths[CHOICE_COUNT] = { static int choice_widths[CHOICE_COUNT] = {
3, 2, 3, 3, 2, 2, 2, 2, 2, 3, 2, 3, 3, 2, 2, 2, 2, 2,
2, 2, 2, 3, 2, 2, 3, 3, 2 }; 2, 2, 2, 3, 2, 2, 3, 3, 2,
3, 3 };
static HANDLER button_handlers[BUTTON_COUNT] = { static HANDLER button_handlers[BUTTON_COUNT] = {
quit_main_menu, quit_sub_menu, do_graphics, do_engine, quit_main_menu, quit_sub_menu, do_graphics, do_engine,
do_audio, do_resources, do_keyconfig, do_advanced }; do_audio, do_resources, do_keyconfig, do_advanced };
static int menu_sizes[MENU_COUNT] = { static int menu_sizes[MENU_COUNT] = {
7, 5, 6, 9, 2, 2, 7, 5, 6, 9, 2, 4,
#ifdef HAVE_OPENGL #ifdef HAVE_OPENGL
5 }; 5 };
#else #else
@@ -145,13 +146,19 @@ static WIDGET *advanced_widgets[] = {
(WIDGET *)(&choices[16]), (WIDGET *)(&choices[16]),
(WIDGET *)(&buttons[1]) }; (WIDGET *)(&buttons[1]) };
static WIDGET *keyconfig_widgets[] = {
(WIDGET *)(&choices[18]),
(WIDGET *)(&choices[19]),
(WIDGET *)(&labels[1]),
(WIDGET *)(&buttons[1]) };
static WIDGET *incomplete_widgets[] = { static WIDGET *incomplete_widgets[] = {
(WIDGET *)(&labels[0]), (WIDGET *)(&labels[0]),
(WIDGET *)(&buttons[1]) }; (WIDGET *)(&buttons[1]) };
static WIDGET **menu_widgets[MENU_COUNT] = { static WIDGET **menu_widgets[MENU_COUNT] = {
main_widgets, graphics_widgets, audio_widgets, engine_widgets, main_widgets, graphics_widgets, audio_widgets, engine_widgets,
incomplete_widgets, incomplete_widgets, advanced_widgets }; incomplete_widgets, keyconfig_widgets, advanced_widgets };
static int static int
quit_main_menu (WIDGET *self, int event) quit_main_menu (WIDGET *self, int event)
@@ -293,6 +300,8 @@ SetDefaults (void)
choices[15].selected = opts.adriver; choices[15].selected = opts.adriver;
choices[16].selected = opts.aquality; choices[16].selected = opts.aquality;
choices[17].selected = opts.shield; choices[17].selected = opts.shield;
choices[18].selected = opts.player1;
choices[19].selected = opts.player2;
sliders[0].value = opts.musicvol; sliders[0].value = opts.musicvol;
sliders[1].value = opts.sfxvol; sliders[1].value = opts.sfxvol;
@@ -321,6 +330,8 @@ PropagateResults (void)
opts.adriver = choices[15].selected; opts.adriver = choices[15].selected;
opts.aquality = choices[16].selected; opts.aquality = choices[16].selected;
opts.shield = choices[17].selected; opts.shield = choices[17].selected;
opts.player1 = choices[18].selected;
opts.player2 = choices[19].selected;
opts.musicvol = sliders[0].value; opts.musicvol = sliders[0].value;
opts.sfxvol = sliders[1].value; opts.sfxvol = sliders[1].value;
@@ -887,9 +898,13 @@ GetGlobalOptions (GLOBALOPTS *opts)
} }
} }
opts->player1 = PlayerOne;
opts->player2 = PlayerTwo;
opts->musicvol = (((int)(musicVolumeScale * 100.0f) + 2) / 5) * 5; opts->musicvol = (((int)(musicVolumeScale * 100.0f) + 2) / 5) * 5;
opts->sfxvol = (((int)(sfxVolumeScale * 100.0f) + 2) / 5) * 5; opts->sfxvol = (((int)(sfxVolumeScale * 100.0f) + 2) / 5) * 5;
opts->speechvol = (((int)(speechVolumeScale * 100.0f) + 2) / 5) * 5; opts->speechvol = (((int)(speechVolumeScale * 100.0f) + 2) / 5) * 5;
} }
void void
@@ -999,6 +1014,8 @@ SetGlobalOptions (GLOBALOPTS *opts)
optWhichShield = (opts->shield == OPTVAL_3DO) ? OPT_3DO : OPT_PC; optWhichShield = (opts->shield == OPTVAL_3DO) ? OPT_3DO : OPT_PC;
optMeleeScale = (opts->meleezoom == OPTVAL_3DO) ? TFB_SCALE_TRILINEAR : TFB_SCALE_STEP; optMeleeScale = (opts->meleezoom == OPTVAL_3DO) ? TFB_SCALE_TRILINEAR : TFB_SCALE_STEP;
optWhichIntro = (opts->intro == OPTVAL_3DO) ? OPT_3DO : OPT_PC; optWhichIntro = (opts->intro == OPTVAL_3DO) ? OPT_3DO : OPT_PC;
PlayerOne = opts->player1;
PlayerTwo = opts->player2;
res_PutBoolean ("config.subtitles", opts->subtitles == OPTVAL_ENABLED); res_PutBoolean ("config.subtitles", opts->subtitles == OPTVAL_ENABLED);
res_PutBoolean ("config.textmenu", opts->menu == OPTVAL_PC); res_PutBoolean ("config.textmenu", opts->menu == OPTVAL_PC);
@@ -1012,6 +1029,8 @@ SetGlobalOptions (GLOBALOPTS *opts)
res_PutBoolean ("config.smoothmelee", opts->meleezoom == OPTVAL_3DO); res_PutBoolean ("config.smoothmelee", opts->meleezoom == OPTVAL_3DO);
res_PutBoolean ("config.positionalsfx", opts->stereo == OPTVAL_ENABLED); res_PutBoolean ("config.positionalsfx", opts->stereo == OPTVAL_ENABLED);
res_PutBoolean ("config.pulseshield", opts->shield == OPTVAL_3DO); res_PutBoolean ("config.pulseshield", opts->shield == OPTVAL_3DO);
res_PutInteger ("config.player1control", opts->player1);
res_PutInteger ("config.player2control", opts->player2);
switch (opts->adriver) { switch (opts->adriver) {
case OPTVAL_SILENCE: case OPTVAL_SILENCE:
+6
View File
@@ -19,6 +19,8 @@
#ifndef _SETUPMENU_H #ifndef _SETUPMENU_H
#define _SETUPMENU_H #define _SETUPMENU_H
#include "controls.h"
typedef enum { typedef enum {
OPTVAL_DISABLED, OPTVAL_DISABLED,
OPTVAL_ENABLED OPTVAL_ENABLED
@@ -63,6 +65,9 @@ typedef enum {
OPTVAL_HIGH OPTVAL_HIGH
} OPT_AQUALITYTYPE; } OPT_AQUALITYTYPE;
/* At the moment, CONTROL_TEMPLATE is directly in this structure. If
* CONTROL_TEMPLATE and the options available diverge, this will need
* to change */
typedef struct globalopts_struct { typedef struct globalopts_struct {
OPT_SCALETYPE scaler; OPT_SCALETYPE scaler;
OPT_RESTYPE res; OPT_RESTYPE res;
@@ -71,6 +76,7 @@ typedef struct globalopts_struct {
OPT_AQUALITYTYPE aquality; OPT_AQUALITYTYPE aquality;
OPT_ENABLABLE fullscreen, subtitles, scanlines, fps, stereo; OPT_ENABLABLE fullscreen, subtitles, scanlines, fps, stereo;
OPT_CONSOLETYPE music, menu, text, cscan, scroll, intro, meleezoom, shield; OPT_CONSOLETYPE music, menu, text, cscan, scroll, intro, meleezoom, shield;
CONTROL_TEMPLATE player1, player2;
int speechvol, musicvol, sfxvol; int speechvol, musicvol, sfxvol;
} GLOBALOPTS; } GLOBALOPTS;
+24
View File
@@ -30,6 +30,7 @@
#include "libs/sound/sound.h" #include "libs/sound/sound.h"
#include "libs/input/input_common.h" #include "libs/input/input_common.h"
#include "libs/tasklib.h" #include "libs/tasklib.h"
#include "controls.h"
#include "file.h" #include "file.h"
#include "port.h" #include "port.h"
#include "libs/platform.h" #include "libs/platform.h"
@@ -173,6 +174,9 @@ main (int argc, char *argv[])
initIO (); initIO ();
prepareConfigDir (options.configDir); prepareConfigDir (options.configDir);
PlayerOne = CONTROL_TEMPLATE_KB_1;
PlayerTwo = CONTROL_TEMPLATE_KB_2;
// Fill in the options struct based on uqm.cfg // Fill in the options struct based on uqm.cfg
res_LoadFilename (configDir, "uqm.cfg"); res_LoadFilename (configDir, "uqm.cfg");
if (res_HasKey ("config.reswidth")) if (res_HasKey ("config.reswidth"))
@@ -309,6 +313,26 @@ main (int argc, char *argv[])
{ {
options.whichShield = res_GetBoolean ("config.pulseshield") ? OPT_3DO : OPT_PC; options.whichShield = res_GetBoolean ("config.pulseshield") ? OPT_3DO : OPT_PC;
} }
if (res_HasKey ("config.player1control"))
{
PlayerOne = res_GetInteger ("config.player1control");
/* This is an unsigned, so no < 0 check is necessary */
if (PlayerOne >= NUM_TEMPLATES)
{
fprintf (stderr, "Illegal control template '%d' for Player One.\n", PlayerOne);
PlayerOne = CONTROL_TEMPLATE_KB_1;
}
}
if (res_HasKey ("config.player2control"))
{
/* This is an unsigned, so no < 0 check is necessary */
PlayerTwo = res_GetInteger ("config.player2control");
if (PlayerOne >= NUM_TEMPLATES)
{
fprintf (stderr, "Illegal control template '%d' for Player Two.\n", PlayerOne);
PlayerTwo = CONTROL_TEMPLATE_KB_2;
}
}
if (res_HasKey ("config.musicvol")) if (res_HasKey ("config.musicvol"))
{ {
parseVolume(res_GetString ("config.musicvol"), parseVolume(res_GetString ("config.musicvol"),