From ffed9f4d20eaf77e75bef5588fd2ecc4b10f3126 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sat, 10 Nov 2018 01:31:30 -0500 Subject: [PATCH 01/10] Force camera defaults during tutorialmode (doesn't work in all cases) --- src/p_user.c | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/src/p_user.c b/src/p_user.c index dd2ddbc82..75712ff3a 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8848,7 +8848,18 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (P_CameraThinker(player, thiscam, resetcalled)) return true; - if (thiscam == &camera) + if (tutorialmode) + { + // force defaults because we have a camera look section + // \todo would be nice to use cv_cam_*.defaultvalue directly, but string parsing + // is not separated from cv setting (see command.c Setvalue, CV_SetCVar) + camspeed = 0.3; + camstill = false; + camrotate = 0; + camdist = 160; + camheight = 25; + } + else if (thiscam == &camera) { camspeed = cv_cam_speed.value; camstill = cv_cam_still.value; From 8f7c1e7f716fc97484a1ba2dafcaf669569a15db Mon Sep 17 00:00:00 2001 From: mazmazz Date: Sun, 11 Nov 2018 23:42:02 -0500 Subject: [PATCH 02/10] Fix CopyControls not firing when starting tutorial while keeping current controls --- src/m_menu.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index c88a18afa..1cc588046 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6147,17 +6147,21 @@ void M_TutorialSaveControlResponse(INT32 ch) static void M_TutorialControlResponse(INT32 ch) { - if (ch == 'y' || ch == KEY_ENTER) + if (ch != KEY_ESCAPE) { G_CopyControls(gamecontroldefault[gcs_custom], gamecontrol, NULL, 0); - G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gclist_tutorial, num_gclist_tutorial); - //S_StartSound(NULL, sfx_itemup); + if (ch == 'y' || ch == KEY_ENTER) + { + G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gclist_tutorial, num_gclist_tutorial); + //S_StartSound(NULL, sfx_itemup); + } + else + S_StartSound(NULL, sfx_menu1); + + M_StartTutorial(INT32_MAX); } else S_StartSound(NULL, sfx_menu1); - - if (ch != KEY_ESCAPE) - M_StartTutorial(INT32_MAX); } // Starts up the tutorial immediately (tbh I wasn't sure where else to put this) From ab084f1bc94eb8a1c371d83472b3b7e31bdcdea1 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 16:50:03 -0500 Subject: [PATCH 03/10] Add tutorialgcs variable for optional control scheme loading --- src/g_game.c | 1 + src/m_misc.c | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/g_game.c b/src/g_game.c index 38289bcb2..891a17d13 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -129,6 +129,7 @@ INT16 bootmap; //bootmap for loading a map on startup INT16 tutorialmap = 0; // map to load for tutorial boolean tutorialmode = false; // are we in a tutorial right now? +boolean tutorialgcs = gcs_custom; // which control scheme is loaded? boolean looptitle = false; diff --git a/src/m_misc.c b/src/m_misc.c index cc9ae2999..7bc2d75cb 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -542,7 +542,7 @@ void M_SaveConfig(const char *filename) CV_SaveVariables(f); if (!dedicated) { - if (tutorialmode) + if (tutorialmode && tutorialgcs) G_SaveKeySetting(f, gamecontroldefault[gcs_custom], gamecontrolbis); // using gcs_custom as temp storage else G_SaveKeySetting(f, gamecontrol, gamecontrolbis); From 31c1145cf3e6e3a8d2d67f1f662e3c84900c71bd Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 16:51:43 -0500 Subject: [PATCH 04/10] Uncomment gcs_platform defaults --- src/doomstat.h | 1 + src/g_game.c | 2 +- src/g_input.c | 28 ++++++++++++++-------------- 3 files changed, 16 insertions(+), 15 deletions(-) diff --git a/src/doomstat.h b/src/doomstat.h index 421b6579f..c4fda93ae 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -131,6 +131,7 @@ extern INT16 bootmap; //bootmap for loading a map on startup extern INT16 tutorialmap; // map to load for tutorial extern boolean tutorialmode; // are we in a tutorial right now? +extern INT32 tutorialgcs; // which control scheme is loaded? extern boolean looptitle; diff --git a/src/g_game.c b/src/g_game.c index 891a17d13..28a8a8d0a 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -129,7 +129,7 @@ INT16 bootmap; //bootmap for loading a map on startup INT16 tutorialmap = 0; // map to load for tutorial boolean tutorialmode = false; // are we in a tutorial right now? -boolean tutorialgcs = gcs_custom; // which control scheme is loaded? +INT32 tutorialgcs = gcs_custom; // which control scheme is loaded? boolean looptitle = false; diff --git a/src/g_input.c b/src/g_input.c index d8a99c97d..35a0b82cf 100644 --- a/src/g_input.c +++ b/src/g_input.c @@ -659,20 +659,20 @@ void G_DefineDefaultControls(void) gamecontroldefault[gcs_fps][gc_firenormal ][0] = 'c'; // Platform game controls (arrow keys) - // gamecontroldefault[gcs_platform][gc_forward ][0] = KEY_UPARROW; - // gamecontroldefault[gcs_platform][gc_backward ][0] = KEY_DOWNARROW; - // gamecontroldefault[gcs_platform][gc_strafeleft ][0] = 'a'; - // gamecontroldefault[gcs_platform][gc_straferight][0] = 'd'; - // gamecontroldefault[gcs_platform][gc_lookup ][0] = KEY_PGUP; - // gamecontroldefault[gcs_platform][gc_lookdown ][0] = KEY_PGDN; - // gamecontroldefault[gcs_platform][gc_turnleft ][0] = KEY_LEFTARROW; - // gamecontroldefault[gcs_platform][gc_turnright ][0] = KEY_RIGHTARROW; - // gamecontroldefault[gcs_platform][gc_centerview ][0] = KEY_END; - // gamecontroldefault[gcs_platform][gc_jump ][0] = KEY_SPACE; - // gamecontroldefault[gcs_platform][gc_use ][0] = KEY_LSHIFT; - // gamecontroldefault[gcs_platform][gc_fire ][0] = 's'; - // gamecontroldefault[gcs_platform][gc_fire ][1] = KEY_MOUSE1+0; - // gamecontroldefault[gcs_platform][gc_firenormal ][0] = 'w'; + gamecontroldefault[gcs_platform][gc_forward ][0] = KEY_UPARROW; + gamecontroldefault[gcs_platform][gc_backward ][0] = KEY_DOWNARROW; + gamecontroldefault[gcs_platform][gc_strafeleft ][0] = 'a'; + gamecontroldefault[gcs_platform][gc_straferight][0] = 'd'; + gamecontroldefault[gcs_platform][gc_lookup ][0] = KEY_PGUP; + gamecontroldefault[gcs_platform][gc_lookdown ][0] = KEY_PGDN; + gamecontroldefault[gcs_platform][gc_turnleft ][0] = KEY_LEFTARROW; + gamecontroldefault[gcs_platform][gc_turnright ][0] = KEY_RIGHTARROW; + gamecontroldefault[gcs_platform][gc_centerview ][0] = KEY_END; + gamecontroldefault[gcs_platform][gc_jump ][0] = KEY_SPACE; + gamecontroldefault[gcs_platform][gc_use ][0] = KEY_LSHIFT; + gamecontroldefault[gcs_platform][gc_fire ][0] = 's'; + gamecontroldefault[gcs_platform][gc_fire ][1] = KEY_MOUSE1+0; + gamecontroldefault[gcs_platform][gc_firenormal ][0] = 'w'; for (i = 1; i < num_gamecontrolschemes; i++) // skip gcs_custom (0) { From 4986d5945bd5806144bec0d26cc022ed2cb4813e Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 16:56:06 -0500 Subject: [PATCH 05/10] Restrict control changes if tutorialgcs is active --- src/d_main.c | 20 +++++++------------- src/d_netcmd.c | 2 +- src/m_menu.c | 31 +++++++++++++++++++++++-------- 3 files changed, 31 insertions(+), 22 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 7ffa7da7e..7e4ad0799 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -668,7 +668,6 @@ void D_AdvanceDemo(void) void D_StartTitle(void) { INT32 i; - boolean tutorialpostprompt = false; S_StopMusic(); @@ -713,16 +712,6 @@ void D_StartTitle(void) // reset modeattacking modeattacking = ATTACKING_NONE; - // The title screen is obviously not a tutorial! (Unless I'm mistaken) - if (tutorialmode) - { - // check if retained controls are custom - 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; - // empty maptol so mario/etc sounds don't play in sound test when they shouldn't maptol = 0; @@ -746,9 +735,14 @@ void D_StartTitle(void) if (rendermode != render_none) V_SetPaletteLump("PLAYPAL"); - if (tutorialpostprompt) - M_StartMessage("Do you want to \x82save the recommended \x82movement controls?\x80\n\nPress 'Y' or 'Enter' to confirm, \nor any key to keep \nyour current controls.", + // The title screen is obviously not a tutorial! (Unless I'm mistaken) + if (tutorialmode && tutorialgcs) + { + G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gclist_tutorial, num_gclist_tutorial); // using gcs_custom as temp storage + 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); + } + tutorialmode = false; } // diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 37b725c89..a9d539ea6 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1808,7 +1808,7 @@ static void Command_Map_f(void) else fromlevelselect = ((netgame || multiplayer) && ((gametype == newgametype) && (newgametype == GT_COOP))); - if (tutorialmode) + if (tutorialmode && tutorialgcs) 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 diff --git a/src/m_menu.c b/src/m_menu.c index 1cc588046..7505e04bd 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], gclist_tutorial, num_gclist_tutorial); + G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); S_StartSound(NULL, sfx_itemup); } else @@ -6149,14 +6149,18 @@ static void M_TutorialControlResponse(INT32 ch) { if (ch != KEY_ESCAPE) { - G_CopyControls(gamecontroldefault[gcs_custom], gamecontrol, NULL, 0); + G_CopyControls(gamecontroldefault[gcs_custom], gamecontrol, NULL, 0); // using gcs_custom as temp storage for old controls if (ch == 'y' || ch == KEY_ENTER) { - G_CopyControls(gamecontrol, gamecontroldefault[gcs_fps], gclist_tutorial, num_gclist_tutorial); + tutorialgcs = gcs_fps; + G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); //S_StartSound(NULL, sfx_itemup); } else + { + tutorialgcs = gcs_custom; S_StartSound(NULL, sfx_menu1); + } M_StartTutorial(INT32_MAX); } @@ -6172,11 +6176,11 @@ static void M_StartTutorial(INT32 choice) if (choice != INT32_MAX && G_GetControlScheme(gamecontrol, gclist_tutorial_check, num_gclist_tutorial_check) == gcs_custom) { - M_StartMessage("Do you want to try the \202recommended \202movement controls\x80?\n\nWe will set them just for this tutorial.\n\nPress 'Y' or 'Enter' to confirm, \nor any key to keep \nyour current controls.\n",M_TutorialControlResponse,MM_YESNO); + M_StartMessage("Do you want to try the \202recommended \202movement controls\x80?\n\nWe will set them just for this tutorial.\n\nPress 'Y' or 'Enter' to confirm\nPress 'N' or any key to keep \nyour current controls.\n",M_TutorialControlResponse,MM_YESNO); return; } else if (choice != INT32_MAX) - G_CopyControls(gamecontroldefault[gcs_custom], gamecontrol, NULL, 0); + tutorialgcs = gcs_custom; tutorialmode = true; // turn on tutorial mode @@ -9267,9 +9271,17 @@ static void M_DrawControl(void) // draw title (or big pic) M_DrawMenuTitle(); - M_CentreText(30, - (setupcontrols_secondaryplayer ? "SET CONTROLS FOR SECONDARY PLAYER" : - "PRESS ENTER TO CHANGE, BACKSPACE TO CLEAR")); + if (tutorialmode && tutorialgcs) + { + if ((gametic / TICRATE) % 2) + M_CentreText(30, "\202EXIT THE TUTORIAL TO CHANGE THE CONTROLS"); + else + M_CentreText(30, "EXIT THE TUTORIAL TO CHANGE THE CONTROLS"); + } + else + M_CentreText(30, + (setupcontrols_secondaryplayer ? "SET CONTROLS FOR SECONDARY PLAYER" : + "PRESS ENTER TO CHANGE, BACKSPACE TO CLEAR")); if (i) V_DrawString(currentMenu->x - 16, y-(skullAnimCounter/5), V_YELLOWMAP, "\x1A"); // up arrow @@ -9404,6 +9416,9 @@ static void M_ChangeControl(INT32 choice) { static char tmp[55]; + if (tutorialmode && tutorialgcs) // don't allow control changes if temp control override is active + return; + controltochange = currentMenu->menuitems[choice].alphaKey; sprintf(tmp, M_GetText("Hit the new key for\n%s\nESC for Cancel"), currentMenu->menuitems[choice].text); From 1a5ccb27811613c67c1f0e1202426f1b715b34ef Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 17:16:54 -0500 Subject: [PATCH 06/10] Uncomment gcs_platform --- src/g_input.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/g_input.h b/src/g_input.h index 01acf3ae0..ed347705a 100644 --- a/src/g_input.h +++ b/src/g_input.h @@ -103,7 +103,7 @@ typedef enum { gcs_custom, gcs_fps, - //gcs_platform, + gcs_platform, num_gamecontrolschemes } gamecontrolschemes_e; From acd922886a37eefb0254edbd826cdc4fa52e821a Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 17:24:46 -0500 Subject: [PATCH 07/10] Change mouse cv vars temporarily alongside control scheme --- src/d_main.c | 3 +++ src/d_netcmd.c | 5 +++++ src/doomstat.h | 3 +++ src/g_game.c | 3 +++ src/m_menu.c | 11 +++++++++++ src/m_misc.c | 14 +++++++++++++- 6 files changed, 38 insertions(+), 1 deletion(-) diff --git a/src/d_main.c b/src/d_main.c index 7e4ad0799..36377049d 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -739,6 +739,9 @@ void D_StartTitle(void) if (tutorialmode && tutorialgcs) { G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gclist_tutorial, num_gclist_tutorial); // using gcs_custom as temp storage + CV_SetValue(&cv_usemouse, tutorialusemouse); + CV_SetValue(&cv_alwaysfreelook, tutorialfreelook); + CV_SetValue(&cv_mousemove, tutorialmousemove); 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); } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index a9d539ea6..0aaace49f 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1809,7 +1809,12 @@ static void Command_Map_f(void) fromlevelselect = ((netgame || multiplayer) && ((gametype == newgametype) && (newgametype == GT_COOP))); if (tutorialmode && tutorialgcs) + { G_CopyControls(gamecontrol, gamecontroldefault[gcs_custom], gclist_tutorial, num_gclist_tutorial); // using gcs_custom as temp storage + CV_SetValue(&cv_usemouse, tutorialusemouse); + CV_SetValue(&cv_alwaysfreelook, tutorialfreelook); + CV_SetValue(&cv_mousemove, tutorialmousemove); + } tutorialmode = false; // warping takes us out of tutorial mode D_MapChange(newmapnum, newgametype, false, newresetplayers, 0, false, fromlevelselect); diff --git a/src/doomstat.h b/src/doomstat.h index c4fda93ae..94ccf111a 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -132,6 +132,9 @@ extern INT16 bootmap; //bootmap for loading a map on startup extern INT16 tutorialmap; // map to load for tutorial extern boolean tutorialmode; // are we in a tutorial right now? extern INT32 tutorialgcs; // which control scheme is loaded? +extern INT32 tutorialusemouse; // store cv_usemouse user value +extern INT32 tutorialfreelook; // store cv_alwaysfreelook user value +extern INT32 tutorialmousemove; // store cv_mousemove user value extern boolean looptitle; diff --git a/src/g_game.c b/src/g_game.c index 28a8a8d0a..0112ec104 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -130,6 +130,9 @@ INT16 bootmap; //bootmap for loading a map on startup INT16 tutorialmap = 0; // map to load for tutorial boolean tutorialmode = false; // are we in a tutorial right now? INT32 tutorialgcs = gcs_custom; // which control scheme is loaded? +INT32 tutorialusemouse = 0; // store cv_usemouse user value +INT32 tutorialfreelook = 0; // store cv_alwaysfreelook user value +INT32 tutorialmousemove = 0; // store cv_mousemove user value boolean looptitle = false; diff --git a/src/m_menu.c b/src/m_menu.c index 7505e04bd..b51d07fd2 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6139,6 +6139,9 @@ void M_TutorialSaveControlResponse(INT32 ch) if (ch == 'y' || ch == KEY_ENTER) { G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); + CV_SetValue(&cv_usemouse, 1); + CV_SetValue(&cv_alwaysfreelook, 0); + CV_SetValue(&cv_mousemove, 0); S_StartSound(NULL, sfx_itemup); } else @@ -6153,7 +6156,15 @@ static void M_TutorialControlResponse(INT32 ch) if (ch == 'y' || ch == KEY_ENTER) { tutorialgcs = gcs_fps; + tutorialusemouse = cv_usemouse.value; + tutorialfreelook = cv_alwaysfreelook.value; + tutorialmousemove = cv_mousemove.value; + G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); + CV_Set(&cv_usemouse, cv_usemouse->defaultvalue); + CV_Set(&cv_alwaysfreelook, cv_alwaysfreelook->defaultvalue); + CV_Set(&cv_mousemove, cv_mousemove->defaultvalue); + //S_StartSound(NULL, sfx_itemup); } else diff --git a/src/m_misc.c b/src/m_misc.c index 7bc2d75cb..622d65776 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -539,7 +539,19 @@ void M_SaveConfig(const char *filename) // FIXME: save key aliases if ever implemented.. - CV_SaveVariables(f); + if (tutorialmode && tutorialgcs) + { + CV_SetValue(&cv_usemouse, tutorialusemouse); + CV_SetValue(&cv_alwaysfreelook, tutorialfreelook); + CV_SetValue(&cv_mousemove, tutorialmousemove); + CV_SaveVariables(f); + CV_Set(&cv_usemouse, cv_usemouse->defaultvalue); + CV_Set(&cv_alwaysfreelook, cv_alwaysfreelook->defaultvalue); + CV_Set(&cv_mousemove, cv_mousemove->defaultvalue); + } + else + CV_SaveVariables(f); + if (!dedicated) { if (tutorialmode && tutorialgcs) From 40e5a2104bf9f76b6e15e972bbd86659f6f4e991 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 17:34:56 -0500 Subject: [PATCH 08/10] Also set cv_analog for tutorialgcs * M_TutorialSaveControlResponse CV_Set adjustment --- src/d_main.c | 1 + src/d_netcmd.c | 1 + src/doomstat.h | 1 + src/g_game.c | 1 + src/m_menu.c | 9 ++++++--- src/m_misc.c | 2 ++ 6 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/d_main.c b/src/d_main.c index 36377049d..bbc5f5321 100644 --- a/src/d_main.c +++ b/src/d_main.c @@ -742,6 +742,7 @@ void D_StartTitle(void) CV_SetValue(&cv_usemouse, tutorialusemouse); CV_SetValue(&cv_alwaysfreelook, tutorialfreelook); CV_SetValue(&cv_mousemove, tutorialmousemove); + CV_SetValue(&cv_analog, 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); } diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 0aaace49f..526c1d736 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -1814,6 +1814,7 @@ static void Command_Map_f(void) CV_SetValue(&cv_usemouse, tutorialusemouse); CV_SetValue(&cv_alwaysfreelook, tutorialfreelook); CV_SetValue(&cv_mousemove, tutorialmousemove); + CV_SetValue(&cv_analog, tutorialanalog); } tutorialmode = false; // warping takes us out of tutorial mode diff --git a/src/doomstat.h b/src/doomstat.h index 94ccf111a..766054768 100644 --- a/src/doomstat.h +++ b/src/doomstat.h @@ -135,6 +135,7 @@ extern INT32 tutorialgcs; // which control scheme is loaded? extern INT32 tutorialusemouse; // store cv_usemouse user value extern INT32 tutorialfreelook; // store cv_alwaysfreelook user value extern INT32 tutorialmousemove; // store cv_mousemove user value +extern INT32 tutorialanalog; // store cv_analog user value extern boolean looptitle; diff --git a/src/g_game.c b/src/g_game.c index 0112ec104..4fb56abaf 100644 --- a/src/g_game.c +++ b/src/g_game.c @@ -133,6 +133,7 @@ INT32 tutorialgcs = gcs_custom; // which control scheme is loaded? INT32 tutorialusemouse = 0; // store cv_usemouse user value INT32 tutorialfreelook = 0; // store cv_alwaysfreelook user value INT32 tutorialmousemove = 0; // store cv_mousemove user value +INT32 tutorialanalog = 0; // store cv_analog user value boolean looptitle = false; diff --git a/src/m_menu.c b/src/m_menu.c index b51d07fd2..ada9ffb7a 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6139,9 +6139,10 @@ void M_TutorialSaveControlResponse(INT32 ch) if (ch == 'y' || ch == KEY_ENTER) { G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); - CV_SetValue(&cv_usemouse, 1); - CV_SetValue(&cv_alwaysfreelook, 0); - CV_SetValue(&cv_mousemove, 0); + 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, cv_analog->defaultvalue); S_StartSound(NULL, sfx_itemup); } else @@ -6159,11 +6160,13 @@ static void M_TutorialControlResponse(INT32 ch) tutorialusemouse = cv_usemouse.value; tutorialfreelook = cv_alwaysfreelook.value; tutorialmousemove = cv_mousemove.value; + tutorialanalog = cv_analog.value; G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); 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, cv_analog->defaultvalue); //S_StartSound(NULL, sfx_itemup); } diff --git a/src/m_misc.c b/src/m_misc.c index 622d65776..353443df0 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -544,10 +544,12 @@ void M_SaveConfig(const char *filename) CV_SetValue(&cv_usemouse, tutorialusemouse); CV_SetValue(&cv_alwaysfreelook, tutorialfreelook); CV_SetValue(&cv_mousemove, tutorialmousemove); + CV_SetValue(&cv_analog, 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, cv_analog->default); } else CV_SaveVariables(f); From 80c613561c2a0d6a48b9d4da5f8816586abad45c Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 17:37:54 -0500 Subject: [PATCH 09/10] ->defalutvalue -- .defaultvalue adjustment --- src/m_menu.c | 16 ++++++++-------- src/m_misc.c | 8 ++++---- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/src/m_menu.c b/src/m_menu.c index ada9ffb7a..c76cc0f80 100644 --- a/src/m_menu.c +++ b/src/m_menu.c @@ -6139,10 +6139,10 @@ void M_TutorialSaveControlResponse(INT32 ch) if (ch == 'y' || ch == KEY_ENTER) { G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); - 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, cv_analog->defaultvalue); + 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, cv_analog.defaultvalue); S_StartSound(NULL, sfx_itemup); } else @@ -6163,10 +6163,10 @@ static void M_TutorialControlResponse(INT32 ch) tutorialanalog = cv_analog.value; G_CopyControls(gamecontrol, gamecontroldefault[tutorialgcs], gclist_tutorial, num_gclist_tutorial); - 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, cv_analog->defaultvalue); + 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, cv_analog.defaultvalue); //S_StartSound(NULL, sfx_itemup); } diff --git a/src/m_misc.c b/src/m_misc.c index 353443df0..92c2aeea9 100644 --- a/src/m_misc.c +++ b/src/m_misc.c @@ -546,10 +546,10 @@ void M_SaveConfig(const char *filename) CV_SetValue(&cv_mousemove, tutorialmousemove); CV_SetValue(&cv_analog, 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, cv_analog->default); + 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, cv_analog.defaultvalue); } else CV_SaveVariables(f); From 118da60615ec79031b7a930b08521af134e13015 Mon Sep 17 00:00:00 2001 From: mazmazz Date: Mon, 12 Nov 2018 18:08:24 -0500 Subject: [PATCH 10/10] Freeze camera values in tutorialmode with proper defaults --- src/p_user.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/src/p_user.c b/src/p_user.c index f7f2a577a..e0534395a 100644 --- a/src/p_user.c +++ b/src/p_user.c @@ -8851,13 +8851,11 @@ boolean P_MoveChaseCamera(player_t *player, camera_t *thiscam, boolean resetcall if (tutorialmode) { // force defaults because we have a camera look section - // \todo would be nice to use cv_cam_*.defaultvalue directly, but string parsing - // is not separated from cv setting (see command.c Setvalue, CV_SetCVar) - camspeed = 0.3; - camstill = false; - camrotate = 0; - camdist = 160; - camheight = 25; + camspeed = (INT32)(atof(cv_cam_speed.defaultvalue) * FRACUNIT); + camstill = (!stricmp(cv_cam_still.defaultvalue, "off")) ? false : true; + camrotate = atoi(cv_cam_rotate.defaultvalue); + camdist = FixedMul((INT32)(atof(cv_cam_dist.defaultvalue) * FRACUNIT), mo->scale); + camheight = FixedMul((INT32)(atof(cv_cam_height.defaultvalue) * FRACUNIT), FixedMul(player->camerascale, mo->scale)); } else if (thiscam == &camera) {