diff --git a/src/d_main.c b/src/d_main.c index 49e686ef1..be0dd67a0 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -717,9 +717,9 @@ void D_StartTitle(void) if (tutorialmode) { // check if retained controls are custom - tutorialpostprompt = (G_GetControlScheme(gamecontroldefault[gcs_custom], gcmovement, num_gcmovement) == gcs_custom - && G_GetControlScheme(gamecontrol, gcmovement, num_gcmovement) != gcs_custom); - G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gcmovement, num_gcmovement); // using gcs_custom as temp storage + tutorialpostprompt = (G_GetControlScheme(gamecontroldefault[gcs_custom], gclist_tutorial, num_gclist_tutorial) == gcs_custom + && G_GetControlScheme(gamecontrol, gclist_tutorial, num_gclist_tutorial) != gcs_custom); + G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gclist_tutorial, num_gclist_tutorial); // using gcs_custom as temp storage } tutorialmode = false; diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 6213fac94..37b725c89 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1809,7 +1809,7 @@ static void Command_Map_f(void) fromlevelselect = ((netgame || multiplayer) && ((gametype == newgametype) && (newgametype == GT_COOP))); if (tutorialmode) - G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gcmovement, num_gcmovement); // using gcs_custom as temp storage + G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gclist_tutorial, num_gclist_tutorial); // using gcs_custom as temp storage tutorialmode = false; // warping takes us out of tutorial mode D_MapChange(newmapnum, newgametype, false, newresetplayers, 0, false, fromlevelselect); diff --git a/src/g_input.c b/src/g_input.c index 77239621c..1e3b83b56 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -48,13 +48,25 @@ INT32 gamecontrolbis[num_gamecontrols][2]; // secondary splitscreen player INT32 gamecontroldefault[num_gamecontrolschemes][num_gamecontrols][2]; // default control storage, use 0 (gcs_custom) for memory retention // lists of GC codes for selective operation -INT32 gcmovement[num_gcmovement] = { +const INT32 gclist_tutorial[num_gclist_tutorial] = { gc_forward, gc_backward, gc_strafeleft, gc_straferight, - gc_lookup, gc_lookdown, gc_turnleft, gc_turnright, gc_centerview, - gc_jump, gc_use - // , gc_fire, gc_firenormal + gc_lookup, gc_lookdown, gc_turnleft, gc_turnright//, gc_centerview, + //gc_jump, gc_use, + //gc_fire, gc_firenormal }; +const INT32 gclist_movement[num_gclist_movement] = { + gc_forward, gc_backward, gc_strafeleft, gc_straferight +}; + +const INT32 gclist_camera[num_gclist_camera] = { + gc_lookup, gc_lookdown, gc_turnleft, gc_turnright +}; + +const INT32 gclist_jump[num_gclist_jump] = { gc_jump }; + +const INT32 gclist_use[num_gclist_use] = { gc_use }; + typedef struct { UINT8 time; @@ -681,7 +693,7 @@ void G_DefineDefaultControls(void) } } -INT32 G_GetControlScheme(INT32 (*fromcontrols)[2], INT32 gclist[], INT32 gclen) +INT32 G_GetControlScheme(INT32 (*fromcontrols)[2], const INT32 *gclist, INT32 gclen) { INT32 i, j, gc; boolean skipscheme; @@ -708,7 +720,7 @@ INT32 G_GetControlScheme(INT32 (*fromcontrols)[2], INT32 gclist[], INT32 gclen) return gcs_custom; } -void G_CopyControls(INT32 (*setupcontrols)[2], INT32 (*fromcontrols)[2], INT32 gclist[], INT32 gclen) +void G_CopyControls(INT32 (*setupcontrols)[2], INT32 (*fromcontrols)[2], const INT32 *gclist, INT32 gclen) { INT32 i, gc; diff --git a/src/g_input.h b/src/g_input.h index f8989fc6c..a70ff9104 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -128,8 +128,17 @@ extern INT32 gamecontroldefault[num_gamecontrolschemes][num_gamecontrols][2]; // #define PLAYER1INPUTDOWN(gc) (gamekeydown[gamecontrol[gc][0]] || gamekeydown[gamecontrol[gc][1]]) #define PLAYER2INPUTDOWN(gc) (gamekeydown[gamecontrolbis[gc][0]] || gamekeydown[gamecontrolbis[gc][1]]) -#define num_gcmovement 11 // 13 -extern INT32 gcmovement[num_gcmovement]; +#define num_gclist_tutorial 8 // 13 +#define num_gclist_movement 4 +#define num_gclist_camera 4 +#define num_gclist_jump 1 +#define num_gclist_use 1 + +extern const INT32 gclist_tutorial[num_gclist_tutorial]; +extern const INT32 gclist_movement[num_gclist_movement]; +extern const INT32 gclist_camera[num_gclist_camera]; +extern const INT32 gclist_jump[num_gclist_jump]; +extern const INT32 gclist_use[num_gclist_use]; // peace to my little coder fingers! // check a gamecontrol being active or not @@ -146,8 +155,8 @@ void G_ClearControlKeys(INT32 (*setupcontrols)[2], INT32 control); void Command_Setcontrol_f(void); void Command_Setcontrol2_f(void); void G_DefineDefaultControls(void); -INT32 G_GetControlScheme(INT32 (*fromcontrols)[2], INT32 gclist[], INT32 gclen); -void G_CopyControls(INT32 (*setupcontrols)[2], INT32 (*fromcontrols)[2], INT32 gclist[], INT32 gclen); +INT32 G_GetControlScheme(INT32 (*fromcontrols)[2], const INT32 *gclist, INT32 gclen); +void G_CopyControls(INT32 (*setupcontrols)[2], INT32 (*fromcontrols)[2], const INT32 *gclist, INT32 gclen); void G_SaveKeySetting(FILE *f, INT32 (*fromcontrols)[2], INT32 (*fromcontrolsbis)[2]); void G_CheckDoubleUsage(INT32 keynum); diff --git a/src/m_menu.c b/src/m_menu.c index b35ab76f0..00b6d61a3 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6138,7 +6138,7 @@ void M_TutorialSaveControlResponse(INT32 ch) { if (ch == 'y' || ch == KEY_ENTER) { - G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gcmovement, num_gcmovement); + G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gclist_tutorial, num_gclist_tutorial); S_StartSound(NULL, sfx_strpst); } else @@ -6150,7 +6150,7 @@ static void M_TutorialControlResponse(INT32 ch) if (ch == 'y' || ch == KEY_ENTER) { G_CopyControls(gamecontroldefault[gcs_custom], gamecontrol, NULL, 0); - G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gcmovement, num_gcmovement); + G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gclist_tutorial, num_gclist_tutorial); } M_StartTutorial(INT32_MAX); } @@ -6161,7 +6161,7 @@ static void M_StartTutorial(INT32 choice) if (!tutorialmap) return; // no map to go to, don't bother - if (choice != INT32_MAX && G_GetControlScheme(gamecontrol, gcmovement, num_gcmovement) == gcs_custom) + if (choice != INT32_MAX && G_GetControlScheme(gamecontrol, gclist_tutorial, num_gclist_tutorial) == gcs_custom) { M_StartMessage("Do you want to try the \202recommended \202controls\x80?\n\nWe will set them just for this tutorial.\n\n(Press 'Y' to confirm,\nor any key to keep \nyour current controls.)\n",M_TutorialControlResponse,MM_YESNO); return;