summaryrefslogtreecommitdiff
path: root/src/setup/mode.c
diff options
context:
space:
mode:
authorSimon Howard2008-11-27 19:45:58 +0000
committerSimon Howard2008-11-27 19:45:58 +0000
commita33d23591953d7fbb0041544f4bbe7b807654bb8 (patch)
tree62b537081481a4129ce92455246ea71046cad1d7 /src/setup/mode.c
parent2b5de0bafc1ebe347e08617de7595c1ea507c0b9 (diff)
downloadchocolate-doom-a33d23591953d7fbb0041544f4bbe7b807654bb8.tar.gz
chocolate-doom-a33d23591953d7fbb0041544f4bbe7b807654bb8.tar.bz2
chocolate-doom-a33d23591953d7fbb0041544f4bbe7b807654bb8.zip
Add -game command-line parameter to control what game to configure
settings for. Subversion-branch: /branches/raven-branch Subversion-revision: 1389
Diffstat (limited to 'src/setup/mode.c')
-rw-r--r--src/setup/mode.c168
1 files changed, 168 insertions, 0 deletions
diff --git a/src/setup/mode.c b/src/setup/mode.c
new file mode 100644
index 00000000..d0d82580
--- /dev/null
+++ b/src/setup/mode.c
@@ -0,0 +1,168 @@
+// Emacs style mode select -*- C++ -*-
+//-----------------------------------------------------------------------------
+//
+// Copyright(C) 2006 Simon Howard
+//
+// This program is free software; you can redistribute it and/or
+// modify it under the terms of the GNU General Public License
+// as published by the Free Software Foundation; either version 2
+// of the License, or (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program; if not, write to the Free Software
+// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+// 02111-1307, USA.
+//
+
+#include <string.h>
+
+#include "doomtype.h"
+#include "d_mode.h"
+#include "i_system.h"
+#include "m_argv.h"
+#include "m_config.h"
+#include "m_controls.h"
+
+#include "compatibility.h"
+#include "display.h"
+#include "joystick.h"
+#include "keyboard.h"
+#include "mouse.h"
+#include "multiplayer.h"
+#include "sound.h"
+
+#include "mode.h"
+
+GameMission_t gamemission;
+
+typedef struct
+{
+ GameMission_t mission;
+ char *name;
+ char *config_file;
+ char *extra_config_file;
+} mission_config_t;
+
+static mission_config_t config_files[] =
+{
+ { doom, "doom", "default.cfg", "chocolate-doom.cfg" },
+ { heretic, "heretic", "heretic.cfg", "chocolate-heretic.cfg" },
+ { hexen, "hexen", "hexen.cfg", "chocolate-hexen.cfg" },
+};
+
+// Miscellaneous variables that aren't used in setup.
+
+static int showMessages = 1;
+static int screenblocks = 9;
+static int detailLevel = 0;
+static char *savedir = NULL;
+
+static void BindMiscVariables(void)
+{
+ M_BindVariable("screenblocks", &screenblocks);
+
+ if (gamemission == doom)
+ {
+ M_BindVariable("detaillevel", &detailLevel);
+ M_BindVariable("show_messages", &showMessages);
+ }
+
+ if (gamemission == hexen)
+ {
+ M_BindVariable("savedir", &savedir);
+ M_BindVariable("messageson", &showMessages);
+ }
+}
+
+//
+// Initialise all configuration file bindings.
+//
+
+void InitBindings(void)
+{
+ // Keyboard, mouse, joystick controls
+
+ M_BindBaseControls();
+
+ if (gamemission == heretic || gamemission == hexen)
+ {
+ M_BindHereticControls();
+ }
+
+ if (gamemission == hexen)
+ {
+ M_BindHexenControls();
+ }
+
+ // All other variables
+
+ BindCompatibilityVariables();
+ BindDisplayVariables();
+ BindJoystickVariables();
+ BindKeyboardVariables();
+ BindMouseVariables();
+ BindSoundVariables();
+ BindMiscVariables();
+ BindMultiplayerVariables();
+}
+
+static void SetMission(mission_config_t *config)
+{
+ gamemission = config->mission;
+ M_SetConfigFilenames(config->config_file, config->extra_config_file);
+}
+
+static mission_config_t *GetMissionForName(char *name)
+{
+ int i;
+
+ for (i=0; i<arrlen(config_files); ++i)
+ {
+ if (!strcmp(config_files[i].name, name))
+ {
+ return &config_files[i];
+ }
+ }
+
+ return NULL;
+}
+
+void SetupMission(void)
+{
+ mission_config_t *config;
+ char *mission_name;
+ int p;
+
+ //!
+ // @arg <game>
+ //
+ // Specify the game to configure the settings for. Valid
+ // values are 'doom', 'heretic' and 'hexen'.
+ //
+
+ p = M_CheckParm("-game");
+
+ if (p > 0)
+ {
+ mission_name = myargv[p + 1];
+ }
+ else
+ {
+ mission_name = "doom";
+ }
+
+ config = GetMissionForName(mission_name);
+
+ if (config == NULL)
+ {
+ I_Error("Invalid parameter - '%s'", mission_name);
+ }
+
+ SetMission(config);
+}
+