gamecontrol has another index for player num, instead of being duplicated for players 2-4

This commit is contained in:
Sally Coolatta 2020-08-10 20:08:32 -04:00
parent a6b2bc99de
commit 7ac6723e46
9 changed files with 142 additions and 174 deletions

View file

@ -911,7 +911,7 @@ boolean CON_Responder(event_t *ev)
// let go keyup events, don't eat them // let go keyup events, don't eat them
if (ev->type != ev_keydown && ev->type != ev_console) if (ev->type != ev_keydown && ev->type != ev_console)
{ {
if (ev->data1 == gamecontrol[gc_console][0] || ev->data1 == gamecontrol[gc_console][1]) if (ev->data1 == gamecontrol[0][gc_console][0] || ev->data1 == gamecontrol[0][gc_console][1])
consdown = false; consdown = false;
return false; return false;
} }
@ -929,7 +929,7 @@ boolean CON_Responder(event_t *ev)
INT32 i; INT32 i;
for (i = 0; i < num_gamecontrols; i++) for (i = 0; i < num_gamecontrols; i++)
{ {
if (gamecontrol[i][0] == ev->data1 || gamecontrol[i][1] == ev->data1) if (gamecontrol[0][i][0] == ev->data1 || gamecontrol[0][i][1] == ev->data1)
break; break;
} }
@ -937,7 +937,7 @@ boolean CON_Responder(event_t *ev)
return false; return false;
} }
if (key == gamecontrol[gc_console][0] || key == gamecontrol[gc_console][1]) if (key == gamecontrol[0][gc_console][0] || key == gamecontrol[0][gc_console][1])
{ {
if (consdown) // ignore repeat if (consdown) // ignore repeat
return true; return true;

View file

@ -1023,12 +1023,8 @@ void D_StartTitle(void)
// The title screen is obviously not a tutorial! (Unless I'm mistaken) // The title screen is obviously not a tutorial! (Unless I'm mistaken)
if (tutorialmode && tutorialgcs) if (tutorialmode && tutorialgcs)
{ {
G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gcl_tutorial_full, num_gcl_tutorial_full); // using gcs_custom as temp storage G_CopyControls(gamecontrol[0], gamecontroldefault[0][gcs_custom], gcl_full, num_gcl_full); // using gcs_custom as temp storage
CV_SetValue(&cv_usemouse, tutorialusemouse); M_StartMessage("Do you want to \x82save the recommended \x82controls?\x80\n\nPress 'Y' or 'Enter' to confirm\nPress 'N' or any key to keep \nyour current controls",
CV_SetValue(&cv_alwaysfreelook, tutorialfreelook);
CV_SetValue(&cv_mousemove, tutorialmousemove);
CV_SetValue(&cv_analog[0], tutorialanalog);
M_StartMessage("Do you want to \x82save the recommended \x82movement controls?\x80\n\nPress 'Y' or 'Enter' to confirm\nPress 'N' or any key to keep \nyour current controls",
M_TutorialSaveControlResponse, MM_YESNO); M_TutorialSaveControlResponse, MM_YESNO);
} }

View file

@ -3168,11 +3168,7 @@ static void Command_Map_f(void)
if (tutorialmode && tutorialgcs) if (tutorialmode && tutorialgcs)
{ {
G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gcl_tutorial_full, num_gcl_tutorial_full); // using gcs_custom as temp storage G_CopyControls(gamecontrol[0], gamecontroldefault[0][gcs_custom], gcl_full, num_gcl_full); // using gcs_custom as temp storage
CV_SetValue(&cv_usemouse, tutorialusemouse);
CV_SetValue(&cv_alwaysfreelook, tutorialfreelook);
CV_SetValue(&cv_mousemove, tutorialmousemove);
CV_SetValue(&cv_analog[0], tutorialanalog);
} }
tutorialmode = false; // warping takes us out of tutorial mode tutorialmode = false; // warping takes us out of tutorial mode

View file

@ -3982,41 +3982,28 @@ static boolean F_GetTextPromptTutorialTag(char *tag, INT32 length)
if (!tag || !tag[0] || !tutorialmode) if (!tag || !tag[0] || !tutorialmode)
return false; return false;
if (!strncmp(tag, "TAM", 3)) // Movement if (!strncmp(tag, "TAA", 3)) // Accelerate
gcs = G_GetControlScheme(gamecontrol, gcl_movement, num_gcl_movement); gcs = G_GetControlScheme(gamecontrol[0], gcl_accelerate, num_gcl_accelerate);
else if (!strncmp(tag, "TAC", 3)) // Camera else if (!strncmp(tag, "TAB", 3)) // Brake
{ gcs = G_GetControlScheme(gamecontrol[0], gcl_brake, num_gcl_brake);
// Check for gcl_movement so we can differentiate between FPS and Platform schemes. else if (!strncmp(tag, "TAD", 3)) // Drift
gcs = G_GetControlScheme(gamecontrol, gcl_movement, num_gcl_movement); gcs = G_GetControlScheme(gamecontrol[0], gcl_drift, num_gcl_drift);
if (gcs == gcs_custom) // try again, maybe we'll get a match else if (!strncmp(tag, "TAS", 3)) // Spindash
gcs = G_GetControlScheme(gamecontrol, gcl_camera, num_gcl_camera); gcs = G_GetControlScheme(gamecontrol[0], gcl_spindash, num_gcl_spindash);
if (gcs == gcs_fps && !cv_usemouse.value) else if (!strncmp(tag, "TAM", 3)) // Movement
gcs = gcs_platform; // Platform (arrow) scheme is stand-in for no mouse gcs = G_GetControlScheme(gamecontrol[0], gcl_movement, num_gcl_movement);
} else if (!strncmp(tag, "TAI", 3)) // Item usage
else if (!strncmp(tag, "TAD", 3)) // Movement and Camera gcs = G_GetControlScheme(gamecontrol[0], gcl_item, num_gcl_item);
gcs = G_GetControlScheme(gamecontrol, gcl_movement_camera, num_gcl_movement_camera);
else if (!strncmp(tag, "TAJ", 3)) // Jump
gcs = G_GetControlScheme(gamecontrol, gcl_jump, num_gcl_jump);
else if (!strncmp(tag, "TAS", 3)) // Spin
gcs = G_GetControlScheme(gamecontrol, gcl_use, num_gcl_use);
else if (!strncmp(tag, "TAA", 3)) // Char ability
gcs = G_GetControlScheme(gamecontrol, gcl_jump, num_gcl_jump);
else if (!strncmp(tag, "TAW", 3)) // Shield ability
gcs = G_GetControlScheme(gamecontrol, gcl_jump_use, num_gcl_jump_use);
else else
gcs = G_GetControlScheme(gamecontrol, gcl_tutorial_used, num_gcl_tutorial_used); gcs = G_GetControlScheme(gamecontrol[0], gcl_full, num_gcl_full);
switch (gcs) switch (gcs)
{ {
case gcs_fps: case gcs_kart:
// strncat(tag, "FPS", length); // strncat(tag, "KART", length);
suffixed = false; suffixed = false;
break; break;
case gcs_platform:
strncat(tag, "PLATFORM", length);
break;
default: default:
strncat(tag, "CUSTOM", length); strncat(tag, "CUSTOM", length);
break; break;

View file

@ -1467,7 +1467,7 @@ boolean G_Responder(event_t *ev)
// allow spy mode changes even during the demo // allow spy mode changes even during the demo
if (gamestate == GS_LEVEL && ev->type == ev_keydown if (gamestate == GS_LEVEL && ev->type == ev_keydown
&& (ev->data1 == KEY_F12 || ev->data1 == gamecontrol[gc_viewpoint][0] || ev->data1 == gamecontrol[gc_viewpoint][1])) && (ev->data1 == KEY_F12 || ev->data1 == gamecontrol[0][gc_viewpoint][0] || ev->data1 == gamecontrol[0][gc_viewpoint][1]))
{ {
if (!demo.playback && (r_splitscreen || !netgame)) if (!demo.playback && (r_splitscreen || !netgame))
g_localplayers[0] = consoleplayer; g_localplayers[0] = consoleplayer;
@ -1485,27 +1485,26 @@ boolean G_Responder(event_t *ev)
if (gamestate == GS_LEVEL && ev->type == ev_keydown && multiplayer && demo.playback && !demo.freecam) if (gamestate == GS_LEVEL && ev->type == ev_keydown && multiplayer && demo.playback && !demo.freecam)
{ {
if (ev->data1 == gamecontrolbis[gc_viewpoint][0] || ev->data1 == gamecontrolbis[gc_viewpoint][1]) if (ev->data1 == gamecontrol[1][gc_viewpoint][0] || ev->data1 == gamecontrol[1][gc_viewpoint][1])
{ {
G_AdjustView(2, 1, true); G_AdjustView(2, 1, true);
return true; return true;
} }
else if (ev->data1 == gamecontrol3[gc_viewpoint][0] || ev->data1 == gamecontrol3[gc_viewpoint][1]) else if (ev->data1 == gamecontrol[2][gc_viewpoint][0] || ev->data1 == gamecontrol[2][gc_viewpoint][1])
{ {
G_AdjustView(3, 1, true); G_AdjustView(3, 1, true);
return true; return true;
} }
else if (ev->data1 == gamecontrol4[gc_viewpoint][0] || ev->data1 == gamecontrol4[gc_viewpoint][1]) else if (ev->data1 == gamecontrol[3][gc_viewpoint][0] || ev->data1 == gamecontrol[3][gc_viewpoint][1])
{ {
G_AdjustView(4, 1, true); G_AdjustView(4, 1, true);
return true; return true;
} }
// Allow pausing // Allow pausing
if ( if (
ev->data1 == gamecontrol[gc_pause][0] ev->data1 == gamecontrol[0][gc_pause][0]
|| ev->data1 == gamecontrol[gc_pause][1] || ev->data1 == gamecontrol[0][gc_pause][1]
|| ev->data1 == KEY_PAUSE || ev->data1 == KEY_PAUSE
) )
{ {
@ -1540,8 +1539,8 @@ boolean G_Responder(event_t *ev)
switch (ev->type) switch (ev->type)
{ {
case ev_keydown: case ev_keydown:
if (ev->data1 == gamecontrol[gc_pause][0] if (ev->data1 == gamecontrol[0][gc_pause][0]
|| ev->data1 == gamecontrol[gc_pause][1] || ev->data1 == gamecontrol[0][gc_pause][1]
|| ev->data1 == KEY_PAUSE) || ev->data1 == KEY_PAUSE)
{ {
if (modeattacking && !demoplayback && (gamestate == GS_LEVEL)) if (modeattacking && !demoplayback && (gamestate == GS_LEVEL))

View file

@ -819,13 +819,11 @@ void G_ClearControlKeys(INT32 (*setupcontrols)[2], INT32 control)
void G_ClearAllControlKeys(void) void G_ClearAllControlKeys(void)
{ {
INT32 i; INT32 i, j;
for (i = 0; i < num_gamecontrols; i++) for (i = 0; i < num_gamecontrols; i++)
{ {
G_ClearControlKeys(gamecontrol, i); for (j = 0; j < MAXSPLITSCREENPLAYERS; j++)
G_ClearControlKeys(gamecontrolbis, i); G_ClearControlKeys(gamecontrol[j], i);
G_ClearControlKeys(gamecontrol3, i);
G_ClearControlKeys(gamecontrol4, i);
} }
} }
@ -885,63 +883,63 @@ void G_DefineDefaultControls(void)
INT32 i, j; INT32 i, j;
// Keyboard controls // Keyboard controls
gamecontrol[0][gcs_kart][gc_aimforward ][0] = KEY_UPARROW; gamecontroldefault[0][gcs_kart][gc_aimforward ][0] = KEY_UPARROW;
gamecontrol[0][gcs_kart][gc_aimbackward][0] = KEY_DOWNARROW; gamecontroldefault[0][gcs_kart][gc_aimbackward][0] = KEY_DOWNARROW;
gamecontrol[0][gcs_kart][gc_turnleft ][0] = KEY_LEFTARROW; gamecontroldefault[0][gcs_kart][gc_turnleft ][0] = KEY_LEFTARROW;
gamecontrol[0][gcs_kart][gc_turnright ][0] = KEY_RIGHTARROW; gamecontroldefault[0][gcs_kart][gc_turnright ][0] = KEY_RIGHTARROW;
gamecontrol[0][gcs_kart][gc_accelerate ][0] = 'a'; gamecontroldefault[0][gcs_kart][gc_accelerate ][0] = 'a';
gamecontrol[0][gcs_kart][gc_drift ][0] = 's'; gamecontroldefault[0][gcs_kart][gc_drift ][0] = 's';
gamecontrol[0][gcs_kart][gc_brake ][0] = 'd'; gamecontroldefault[0][gcs_kart][gc_brake ][0] = 'd';
gamecontrol[0][gcs_kart][gc_fire ][0] = KEY_SPACE; gamecontroldefault[0][gcs_kart][gc_fire ][0] = KEY_SPACE;
gamecontrol[0][gcs_kart][gc_lookback ][0] = KEY_LSHIFT; gamecontroldefault[0][gcs_kart][gc_lookback ][0] = KEY_LSHIFT;
gamecontrol[0][gcs_kart][gc_pause ][0] = KEY_PAUSE; gamecontroldefault[0][gcs_kart][gc_pause ][0] = KEY_PAUSE;
gamecontrol[0][gcs_kart][gc_console ][0] = KEY_CONSOLE; gamecontroldefault[0][gcs_kart][gc_console ][0] = KEY_CONSOLE;
gamecontrol[0][gcs_kart][gc_screenshot ][0] = KEY_F8; gamecontroldefault[0][gcs_kart][gc_screenshot ][0] = KEY_F8;
gamecontrol[0][gcs_kart][gc_recordgif ][0] = KEY_F9; gamecontroldefault[0][gcs_kart][gc_recordgif ][0] = KEY_F9;
gamecontrol[0][gcs_kart][gc_viewpoint ][0] = KEY_F12; gamecontroldefault[0][gcs_kart][gc_viewpoint ][0] = KEY_F12;
gamecontrol[0][gcs_kart][gc_talkkey ][0] = 't'; gamecontroldefault[0][gcs_kart][gc_talkkey ][0] = 't';
//gamecontrol[0][gcs_kart][gc_teamkey ][0] = 'y'; //gamecontroldefault[0][gcs_kart][gc_teamkey ][0] = 'y';
gamecontrol[0][gcs_kart][gc_scores ][0] = KEY_TAB; gamecontroldefault[0][gcs_kart][gc_scores ][0] = KEY_TAB;
gamecontrol[0][gcs_kart][gc_spectate ][0] = '\''; gamecontroldefault[0][gcs_kart][gc_spectate ][0] = '\'';
gamecontrol[0][gcs_kart][gc_lookup ][0] = KEY_PGUP; gamecontroldefault[0][gcs_kart][gc_lookup ][0] = KEY_PGUP;
gamecontrol[0][gcs_kart][gc_lookdown ][0] = KEY_PGDN; gamecontroldefault[0][gcs_kart][gc_lookdown ][0] = KEY_PGDN;
gamecontrol[0][gcs_kart][gc_centerview ][0] = KEY_END; gamecontroldefault[0][gcs_kart][gc_centerview ][0] = KEY_END;
gamecontrol[0][gcs_kart][gc_camreset ][0] = KEY_HOME; gamecontroldefault[0][gcs_kart][gc_camreset ][0] = KEY_HOME;
gamecontrol[0][gcs_kart][gc_camtoggle ][0] = KEY_BACKSPACE; gamecontroldefault[0][gcs_kart][gc_camtoggle ][0] = KEY_BACKSPACE;
for (i = gcs_custom+1; i < num_gamecontrolschemes; i++) // skip gcs_custom for (i = gcs_custom+1; i < num_gamecontrolschemes; i++) // skip gcs_custom
{ {
// Gamepad controls -- same for all schemes // Gamepad controls -- same for all schemes
gamecontrol[0][j][gc_accelerate ][1] = KEY_JOY1+0; // A gamecontroldefault[0][j][gc_accelerate ][1] = KEY_JOY1+0; // A
gamecontrol[0][j][gc_lookback ][1] = KEY_JOY1+2; // X gamecontroldefault[0][j][gc_lookback ][1] = KEY_JOY1+2; // X
gamecontrol[0][j][gc_brake ][1] = KEY_JOY1+1; // B gamecontroldefault[0][j][gc_brake ][1] = KEY_JOY1+1; // B
gamecontrol[0][j][gc_fire ][1] = KEY_JOY1+4; // LB gamecontroldefault[0][j][gc_fire ][1] = KEY_JOY1+4; // LB
gamecontrol[0][j][gc_drift ][1] = KEY_JOY1+5; // RB gamecontroldefault[0][j][gc_drift ][1] = KEY_JOY1+5; // RB
gamecontrol[0][j][gc_viewpoint ][1] = KEY_JOY1+3; // Y gamecontroldefault[0][j][gc_viewpoint ][1] = KEY_JOY1+3; // Y
gamecontrol[0][j][gc_pause ][1] = KEY_JOY1+6; // Back gamecontroldefault[0][j][gc_pause ][1] = KEY_JOY1+6; // Back
gamecontrol[0][j][gc_systemmenu ][0] = KEY_JOY1+7; // Start gamecontroldefault[0][j][gc_systemmenu ][0] = KEY_JOY1+7; // Start
gamecontrol[0][j][gc_talkkey ][1] = KEY_HAT1+1; // D-Pad Down gamecontroldefault[0][j][gc_talkkey ][1] = KEY_HAT1+1; // D-Pad Down
gamecontrol[0][j][gc_scores ][1] = KEY_HAT1+0; // D-Pad Up gamecontroldefault[0][j][gc_scores ][1] = KEY_HAT1+0; // D-Pad Up
gamecontrol[1][i][gc_accelerate ][0] = KEY_2JOY1+0; // A gamecontroldefault[1][i][gc_accelerate ][0] = KEY_2JOY1+0; // A
gamecontrol[1][i][gc_lookback ][0] = KEY_2JOY1+2; // X gamecontroldefault[1][i][gc_lookback ][0] = KEY_2JOY1+2; // X
gamecontrol[1][i][gc_brake ][0] = KEY_2JOY1+1; // B gamecontroldefault[1][i][gc_brake ][0] = KEY_2JOY1+1; // B
gamecontrol[1][i][gc_fire ][0] = KEY_2JOY1+4; // LB gamecontroldefault[1][i][gc_fire ][0] = KEY_2JOY1+4; // LB
gamecontrol[1][i][gc_drift ][0] = KEY_2JOY1+5; // RB gamecontroldefault[1][i][gc_drift ][0] = KEY_2JOY1+5; // RB
gamecontrol[2][i][gc_accelerate ][0] = KEY_3JOY1+0; // A gamecontroldefault[2][i][gc_accelerate ][0] = KEY_3JOY1+0; // A
gamecontrol[2][i][gc_lookback ][0] = KEY_3JOY1+2; // X gamecontroldefault[2][i][gc_lookback ][0] = KEY_3JOY1+2; // X
gamecontrol[2][i][gc_brake ][0] = KEY_3JOY1+1; // B gamecontroldefault[2][i][gc_brake ][0] = KEY_3JOY1+1; // B
gamecontrol[2][i][gc_fire ][0] = KEY_3JOY1+4; // LB gamecontroldefault[2][i][gc_fire ][0] = KEY_3JOY1+4; // LB
gamecontrol[2][i][gc_drift ][0] = KEY_3JOY1+5; // RB gamecontroldefault[2][i][gc_drift ][0] = KEY_3JOY1+5; // RB
gamecontrol[3][i][gc_accelerate ][0] = KEY_3JOY1+0; // A gamecontroldefault[3][i][gc_accelerate ][0] = KEY_3JOY1+0; // A
gamecontrol[3][i][gc_lookback ][0] = KEY_3JOY1+2; // X gamecontroldefault[3][i][gc_lookback ][0] = KEY_3JOY1+2; // X
gamecontrol[3][i][gc_brake ][0] = KEY_3JOY1+1; // B gamecontroldefault[3][i][gc_brake ][0] = KEY_3JOY1+1; // B
gamecontrol[3][i][gc_fire ][0] = KEY_3JOY1+4; // LB gamecontroldefault[3][i][gc_fire ][0] = KEY_3JOY1+4; // LB
gamecontrol[3][i][gc_drift ][0] = KEY_3JOY1+5; // RB gamecontroldefault[3][i][gc_drift ][0] = KEY_3JOY1+5; // RB
} }
} }
@ -956,10 +954,10 @@ INT32 G_GetControlScheme(INT32 (*fromcontrols)[2], const INT32 *gclist, INT32 gc
for (j = 0; j < (gclist && gclen ? gclen : num_gamecontrols); j++) for (j = 0; j < (gclist && gclen ? gclen : num_gamecontrols); j++)
{ {
gc = (gclist && gclen) ? gclist[j] : j; gc = (gclist && gclen) ? gclist[j] : j;
if (((fromcontrols[gc][0] && gamecontroldefault[i][gc][0]) ? fromcontrols[gc][0] != gamecontroldefault[i][gc][0] : true) && if (((fromcontrols[gc][0] && gamecontroldefault[0][i][gc][0]) ? fromcontrols[gc][0] != gamecontroldefault[0][i][gc][0] : true) &&
((fromcontrols[gc][0] && gamecontroldefault[i][gc][1]) ? fromcontrols[gc][0] != gamecontroldefault[i][gc][1] : true) && ((fromcontrols[gc][0] && gamecontroldefault[0][i][gc][1]) ? fromcontrols[gc][0] != gamecontroldefault[0][i][gc][1] : true) &&
((fromcontrols[gc][1] && gamecontroldefault[i][gc][0]) ? fromcontrols[gc][1] != gamecontroldefault[i][gc][0] : true) && ((fromcontrols[gc][1] && gamecontroldefault[0][i][gc][0]) ? fromcontrols[gc][1] != gamecontroldefault[0][i][gc][0] : true) &&
((fromcontrols[gc][1] && gamecontroldefault[i][gc][1]) ? fromcontrols[gc][1] != gamecontroldefault[i][gc][1] : true)) ((fromcontrols[gc][1] && gamecontroldefault[0][i][gc][1]) ? fromcontrols[gc][1] != gamecontroldefault[0][i][gc][1] : true))
{ {
skipscheme = true; skipscheme = true;
break; break;
@ -984,17 +982,17 @@ void G_CopyControls(INT32 (*setupcontrols)[2], INT32 (*fromcontrols)[2], const I
} }
} }
void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2], INT32 (*fromcontrolsbis)[2]) void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2])
{ {
INT32 i; INT32 i;
for (i = 1; i < num_gamecontrols; i++) for (i = 1; i < num_gamecontrols; i++)
{ {
fprintf(f, "setcontrol \"%s\" \"%s\"", gamecontrolname[i], fprintf(f, "setcontrol \"%s\" \"%s\"", gamecontrolname[i],
G_KeynumToString(fromcontrols[i][0])); G_KeynumToString(fromcontrols[0][i][0]));
if (fromcontrols[i][1]) if (fromcontrols[0][i][1])
fprintf(f, " \"%s\"\n", G_KeynumToString(fromcontrols[i][1])); fprintf(f, " \"%s\"\n", G_KeynumToString(fromcontrols[0][i][1]));
else else
fprintf(f, "\n"); fprintf(f, "\n");
} }
@ -1002,10 +1000,10 @@ void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2], INT32 (*fromcontrolsbis
for (i = 1; i < num_gamecontrols; i++) for (i = 1; i < num_gamecontrols; i++)
{ {
fprintf(f, "setcontrol2 \"%s\" \"%s\"", gamecontrolname[i], fprintf(f, "setcontrol2 \"%s\" \"%s\"", gamecontrolname[i],
G_KeynumToString(fromcontrolsbis[i][0])); G_KeynumToString(fromcontrols[1][i][0]));
if (fromcontrolsbis[i][1]) if (fromcontrols[1][i][1])
fprintf(f, " \"%s\"\n", G_KeynumToString(fromcontrolsbis[i][1])); fprintf(f, " \"%s\"\n", G_KeynumToString(fromcontrols[1][i][1]));
else else
fprintf(f, "\n"); fprintf(f, "\n");
} }
@ -1013,10 +1011,10 @@ void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2], INT32 (*fromcontrolsbis
for (i = 1; i < num_gamecontrols; i++) for (i = 1; i < num_gamecontrols; i++)
{ {
fprintf(f, "setcontrol3 \"%s\" \"%s\"", gamecontrolname[i], fprintf(f, "setcontrol3 \"%s\" \"%s\"", gamecontrolname[i],
G_KeynumToString(gamecontrol3[i][0])); G_KeynumToString(fromcontrols[2][i][0]));
if (gamecontrol3[i][1]) if (fromcontrols[2][i][1])
fprintf(f, " \"%s\"\n", G_KeynumToString(gamecontrol3[i][1])); fprintf(f, " \"%s\"\n", G_KeynumToString(fromcontrols[2][i][1]));
else else
fprintf(f, "\n"); fprintf(f, "\n");
} }
@ -1024,10 +1022,10 @@ void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2], INT32 (*fromcontrolsbis
for (i = 1; i < num_gamecontrols; i++) for (i = 1; i < num_gamecontrols; i++)
{ {
fprintf(f, "setcontrol4 \"%s\" \"%s\"", gamecontrolname[i], fprintf(f, "setcontrol4 \"%s\" \"%s\"", gamecontrolname[i],
G_KeynumToString(gamecontrol4[i][0])); G_KeynumToString(fromcontrols[3][i][0]));
if (gamecontrol4[i][1]) if (fromcontrols[3][i][1])
fprintf(f, " \"%s\"\n", G_KeynumToString(gamecontrol4[i][1])); fprintf(f, " \"%s\"\n", G_KeynumToString(fromcontrols[3][i][1]));
else else
fprintf(f, "\n"); fprintf(f, "\n");
} }
@ -1094,13 +1092,10 @@ static INT32 G_FilterKeyByVersion(INT32 numctrl, INT32 keyidx, INT32 player, INT
boolean defaultoverride = false; boolean defaultoverride = false;
// get the default gamecontrol // get the default gamecontrol
if (player == 0 && numctrl == gc_systemmenu) defaultkey = gamecontrol[player][numctrl][0];
defaultkey = gamecontrol[numctrl][0];
else
defaultkey = (player == 1 ? gamecontrolbis[numctrl][0] : gamecontrol[numctrl][1]);
// Assign joypad button defaults if there is an open slot. // Assign joypad button defaults if there is an open slot.
// At this point, gamecontrol/bis should have the default controls // At this point, gamecontrol should have the default controls
// (unless LOADCONFIG is being run) // (unless LOADCONFIG is being run)
// //
// If the player runs SETCONTROL in-game, this block should not be reached // If the player runs SETCONTROL in-game, this block should not be reached
@ -1190,11 +1185,11 @@ static void setcontrol(INT32 (*gc)[2])
INT32 player; INT32 player;
boolean nestedoverride = false; boolean nestedoverride = false;
if ((void*)gc == (void*)&gamecontrol4) if ((void*)gc == (void*)&gamecontrol[3])
player = 3; player = 3;
else if ((void*)gc == (void*)&gamecontrol3) else if ((void*)gc == (void*)&gamecontrol[2])
player = 2; player = 2;
else if ((void*)gc == (void*)&gamecontrolbis) else if ((void*)gc == (void*)&gamecontrol[1])
player = 1; player = 1;
else else
player = 0; player = 0;
@ -1257,7 +1252,7 @@ void Command_Setcontrol_f(void)
return; return;
} }
setcontrol(gamecontrol); setcontrol(gamecontrol[0]);
} }
void Command_Setcontrol2_f(void) void Command_Setcontrol2_f(void)
@ -1272,7 +1267,7 @@ void Command_Setcontrol2_f(void)
return; return;
} }
setcontrol(gamecontrolbis); setcontrol(gamecontrol[1]);
} }
void Command_Setcontrol3_f(void) void Command_Setcontrol3_f(void)
@ -1287,7 +1282,7 @@ void Command_Setcontrol3_f(void)
return; return;
} }
setcontrol(gamecontrol3); setcontrol(gamecontrol[2]);
} }
void Command_Setcontrol4_f(void) void Command_Setcontrol4_f(void)
@ -1302,5 +1297,5 @@ void Command_Setcontrol4_f(void)
return; return;
} }
setcontrol(gamecontrol4); setcontrol(gamecontrol[3]);
} }

View file

@ -1164,7 +1164,7 @@ boolean HU_Responder(event_t *ev)
INT32 i; INT32 i;
for (i = 0; i < num_gamecontrols; i++) for (i = 0; i < num_gamecontrols; i++)
{ {
if (gamecontrol[i][0] == ev->data1 || gamecontrol[i][1] == ev->data1) if (gamecontrol[0][i][0] == ev->data1 || gamecontrol[0][i][1] == ev->data1)
break; break;
} }
@ -1176,7 +1176,7 @@ boolean HU_Responder(event_t *ev)
if (!chat_on) if (!chat_on)
{ {
// enter chat mode // enter chat mode
if ((ev->data1 == gamecontrol[gc_talkkey][0] || ev->data1 == gamecontrol[gc_talkkey][1]) if ((ev->data1 == gamecontrol[0][gc_talkkey][0] || ev->data1 == gamecontrol[0][gc_talkkey][1])
&& netgame && !OLD_MUTE) // check for old chat mute, still let the players open the chat incase they want to scroll otherwise. && netgame && !OLD_MUTE) // check for old chat mute, still let the players open the chat incase they want to scroll otherwise.
{ {
chat_on = true; chat_on = true;
@ -1186,7 +1186,7 @@ boolean HU_Responder(event_t *ev)
typelines = 1; typelines = 1;
return true; return true;
} }
if ((ev->data1 == gamecontrol[gc_teamkey][0] || ev->data1 == gamecontrol[gc_teamkey][1]) if ((ev->data1 == gamecontrol[0][gc_teamkey][0] || ev->data1 == gamecontrol[0][gc_teamkey][1])
&& netgame && !OLD_MUTE) && netgame && !OLD_MUTE)
{ {
chat_on = true; chat_on = true;
@ -1211,8 +1211,8 @@ boolean HU_Responder(event_t *ev)
// Ignore non-keyboard keys, except when the talk key is bound // Ignore non-keyboard keys, except when the talk key is bound
if (ev->data1 >= KEY_MOUSE1 if (ev->data1 >= KEY_MOUSE1
&& (ev->data1 != gamecontrol[gc_talkkey][0] && (ev->data1 != gamecontrol[0][gc_talkkey][0]
&& ev->data1 != gamecontrol[gc_talkkey][1])) && ev->data1 != gamecontrol[0][gc_talkkey][1]))
return false; return false;
c = CON_ShiftChar(c); c = CON_ShiftChar(c);
@ -1274,8 +1274,8 @@ boolean HU_Responder(event_t *ev)
I_UpdateMouseGrab(); I_UpdateMouseGrab();
} }
else if (c == KEY_ESCAPE else if (c == KEY_ESCAPE
|| ((c == gamecontrol[gc_talkkey][0] || c == gamecontrol[gc_talkkey][1] || ((c == gamecontrol[0][gc_talkkey][0] || c == gamecontrol[0][gc_talkkey][1]
|| c == gamecontrol[gc_teamkey][0] || c == gamecontrol[gc_teamkey][1]) || c == gamecontrol[0][gc_teamkey][0] || c == gamecontrol[0][gc_teamkey][1])
&& c >= KEY_MOUSE1)) // If it's not a keyboard key, then the chat button is used as a toggle. && c >= KEY_MOUSE1)) // If it's not a keyboard key, then the chat button is used as a toggle.
{ {
chat_on = false; chat_on = false;

View file

@ -2588,9 +2588,9 @@ boolean M_Responder(event_t *ev)
if (ch == -1) if (ch == -1)
return false; return false;
else if (ch == gamecontrol[gc_systemmenu][0] || ch == gamecontrol[gc_systemmenu][1]) // allow remappable ESC key else if (ch == gamecontrol[0][gc_systemmenu][0] || ch == gamecontrol[0][gc_systemmenu][1]) // allow remappable ESC key
ch = KEY_ESCAPE; ch = KEY_ESCAPE;
else if ((ch == gamecontrol[gc_accelerate][0] || ch == gamecontrol[gc_accelerate][1]) && ch >= KEY_MOUSE1) else if ((ch == gamecontrol[0][gc_accelerate][0] || ch == gamecontrol[0][gc_accelerate][1]) && ch >= KEY_MOUSE1)
ch = KEY_ENTER; ch = KEY_ENTER;
// F-Keys // F-Keys
@ -2668,7 +2668,7 @@ boolean M_Responder(event_t *ev)
return false; return false;
} }
if ((ch == gamecontrol[gc_brake][0] || ch == gamecontrol[gc_brake][1]) && ch >= KEY_MOUSE1) // do this here, otherwise brake opens the menu mid-game if ((ch == gamecontrol[0][gc_brake][0] || ch == gamecontrol[0][gc_brake][1]) && ch >= KEY_MOUSE1) // do this here, otherwise brake opens the menu mid-game
ch = KEY_ESCAPE; ch = KEY_ESCAPE;
routine = currentMenu->menuitems[itemOn].itemaction; routine = currentMenu->menuitems[itemOn].itemaction;
@ -9670,7 +9670,7 @@ static void M_HandleSetupMultiPlayer(INT32 choice)
size_t l; size_t l;
boolean exitmenu = false; // exit to previous menu and send name change boolean exitmenu = false; // exit to previous menu and send name change
if ((choice == gamecontrol[gc_fire][0] || choice == gamecontrol[gc_fire][1]) && itemOn == 2) if ((choice == gamecontrol[0][gc_fire][0] || choice == gamecontrol[0][gc_fire][1]) && itemOn == 2)
choice = KEY_BACKSPACE; // Hack to allow resetting prefcolor on controllers choice = KEY_BACKSPACE; // Hack to allow resetting prefcolor on controllers
switch (choice) switch (choice)
@ -10311,7 +10311,7 @@ static void M_Setup1PControlsMenu(INT32 choice)
{ {
(void)choice; (void)choice;
setupcontrolplayer = 1; setupcontrolplayer = 1;
setupcontrols = gamecontrol; // was called from main Options (for console player, then) setupcontrols = gamecontrol[0]; // was called from main Options (for console player, then)
currentMenu->lastOn = itemOn; currentMenu->lastOn = itemOn;
// Set proper gamepad options // Set proper gamepad options
@ -10343,7 +10343,7 @@ static void M_Setup2PControlsMenu(INT32 choice)
{ {
(void)choice; (void)choice;
setupcontrolplayer = 2; setupcontrolplayer = 2;
setupcontrols = gamecontrolbis; setupcontrols = gamecontrol[1];
currentMenu->lastOn = itemOn; currentMenu->lastOn = itemOn;
// Set proper gamepad options // Set proper gamepad options
@ -10375,7 +10375,7 @@ static void M_Setup3PControlsMenu(INT32 choice)
{ {
(void)choice; (void)choice;
setupcontrolplayer = 3; setupcontrolplayer = 3;
setupcontrols = gamecontrol3; setupcontrols = gamecontrol[2];
currentMenu->lastOn = itemOn; currentMenu->lastOn = itemOn;
// Set proper gamepad options // Set proper gamepad options
@ -10407,7 +10407,7 @@ static void M_Setup4PControlsMenu(INT32 choice)
{ {
(void)choice; (void)choice;
setupcontrolplayer = 4; setupcontrolplayer = 4;
setupcontrols = gamecontrol4; setupcontrols = gamecontrol[3];
currentMenu->lastOn = itemOn; currentMenu->lastOn = itemOn;
// Set proper gamepad options // Set proper gamepad options
@ -10680,17 +10680,17 @@ static void M_ResetControlsResponse(INT32 ch)
switch (setupcontrolplayer) switch (setupcontrolplayer)
{ {
case 4: case 4:
G_ClearControlKeys(gamecontrol4, i); G_ClearControlKeys(gamecontrol[3], i);
break; break;
case 3: case 3:
G_ClearControlKeys(gamecontrol3, i); G_ClearControlKeys(gamecontrol[2], i);
break; break;
case 2: case 2:
G_ClearControlKeys(gamecontrolbis, i); G_ClearControlKeys(gamecontrol[1], i);
break; break;
case 1: case 1:
default: default:
G_ClearControlKeys(gamecontrol, i); G_ClearControlKeys(gamecontrol[0], i);
break; break;
} }
} }

View file

@ -479,6 +479,8 @@ void Command_SaveConfig_f(void)
*/ */
void Command_LoadConfig_f(void) void Command_LoadConfig_f(void)
{ {
UINT8 i;
if (COM_Argc() != 2) if (COM_Argc() != 2)
{ {
CONS_Printf(M_GetText("loadconfig <filename[.cfg]> : load config from a file\n")); CONS_Printf(M_GetText("loadconfig <filename[.cfg]> : load config from a file\n"));
@ -490,8 +492,11 @@ void Command_LoadConfig_f(void)
// load default control // load default control
G_ClearAllControlKeys(); G_ClearAllControlKeys();
G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], NULL, 0);
G_CopyControls(gamecontrolbis, gamecontrolbisdefault[gcs_fps], NULL, 0); for (i = 0; i < MAXSPLITSCREENPLAYERS; i++)
{
G_CopyControls(gamecontrol[i], gamecontroldefault[i][gcs_kart], NULL, 0);
}
// temporarily reset execversion to default // temporarily reset execversion to default
CV_ToggleExecVersion(true); CV_ToggleExecVersion(true);
@ -539,8 +544,11 @@ void M_FirstLoadConfig(void)
// load default control // load default control
G_DefineDefaultControls(); G_DefineDefaultControls();
G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], NULL, 0);
G_CopyControls(gamecontrolbis, gamecontrolbisdefault[gcs_fps], NULL, 0); for (i = 0; i < MAXSPLITSCREENPLAYERS; i++)
{
G_CopyControls(gamecontrol[i], gamecontroldefault[i][gcs_kart], NULL, 0);
}
// register execversion here before we load any configs // register execversion here before we load any configs
CV_RegisterVar(&cv_execversion); CV_RegisterVar(&cv_execversion);
@ -634,27 +642,14 @@ void M_SaveConfig(const char *filename)
// FIXME: save key aliases if ever implemented.. // FIXME: save key aliases if ever implemented..
if (tutorialmode && tutorialgcs) CV_SaveVariables(f);
{
CV_SetValue(&cv_usemouse, tutorialusemouse);
CV_SetValue(&cv_alwaysfreelook, tutorialfreelook);
CV_SetValue(&cv_mousemove, tutorialmousemove);
CV_SetValue(&cv_analog[0], tutorialanalog);
CV_SaveVariables(f);
CV_Set(&cv_usemouse, cv_usemouse.defaultvalue);
CV_Set(&cv_alwaysfreelook, cv_alwaysfreelook.defaultvalue);
CV_Set(&cv_mousemove, cv_mousemove.defaultvalue);
CV_Set(&cv_analog[0], cv_analog[0].defaultvalue);
}
else
CV_SaveVariables(f);
if (!dedicated) if (!dedicated)
{ {
if (tutorialmode && tutorialgcs) if (tutorialmode && tutorialgcs)
G_SaveKeySetting(f, gamecontroldefault[gcs_custom], gamecontrolbis); // using gcs_custom as temp storage G_SaveKeySetting(f, gamecontroldefault[0][gcs_custom], gamecontrol[1]); // using gcs_custom as temp storage
else else
G_SaveKeySetting(f, gamecontrol, gamecontrolbis); G_SaveKeySetting(f, gamecontrol[0], gamecontrol[1]);
} }
fclose(f); fclose(f);
@ -1617,9 +1612,9 @@ boolean M_ScreenshotResponder(event_t *ev)
if (ch >= KEY_MOUSE1 && menuactive) // If it's not a keyboard key, then don't allow it in the menus! if (ch >= KEY_MOUSE1 && menuactive) // If it's not a keyboard key, then don't allow it in the menus!
return false; return false;
if (ch == KEY_F8 || ch == gamecontrol[gc_screenshot][0] || ch == gamecontrol[gc_screenshot][1]) // remappable F8 if (ch == KEY_F8 || ch == gamecontrol[0][gc_screenshot][0] || ch == gamecontrol[0][gc_screenshot][1]) // remappable F8
M_ScreenShot(); M_ScreenShot();
else if (ch == KEY_F9 || ch == gamecontrol[gc_recordgif][0] || ch == gamecontrol[gc_recordgif][1]) // remappable F9 else if (ch == KEY_F9 || ch == gamecontrol[0][gc_recordgif][0] || ch == gamecontrol[0][gc_recordgif][1]) // remappable F9
((moviemode) ? M_StopMovie : M_StartMovie)(); ((moviemode) ? M_StopMovie : M_StartMovie)();
else else
return false; return false;