shithub: choc

Download patch

ref: d4d0f9945cefdb86241b5bd095e82ddbfca0e134
parent: dc7d72797f1d6810b8ba2f8472f6828f1f714df6
author: Simon Howard <[email protected]>
date: Wed Oct 8 14:47:13 EDT 2008

Switch configuration file code to common configuration file code, and
remove old code.

Subversion-branch: /branches/raven-branch
Subversion-revision: 1338

--- a/src/hexen/ct_chat.c
+++ b/src/hexen/ct_chat.c
@@ -102,7 +102,18 @@
     "PURPLE:  "
 };
 
-char *chat_macros[10];
+char *chat_macros[10] = {
+    HUSTR_CHATMACRO0,
+    HUSTR_CHATMACRO1,
+    HUSTR_CHATMACRO2,
+    HUSTR_CHATMACRO3,
+    HUSTR_CHATMACRO4,
+    HUSTR_CHATMACRO5,
+    HUSTR_CHATMACRO6,
+    HUSTR_CHATMACRO7,
+    HUSTR_CHATMACRO8,
+    HUSTR_CHATMACRO9,
+};
 
 boolean altdown;
 boolean shiftdown;
--- a/src/hexen/ct_chat.h
+++ b/src/hexen/ct_chat.h
@@ -24,6 +24,9 @@
 // Chat mode stuff
 //
 
+#ifndef HEXEN_CT_CHAT_H
+#define HEXEN_CT_CHAT_H
+
 #define CT_PLR_GREEN	1
 #define CT_PLR_YELLOW	2
 #define CT_PLR_RED		3
@@ -35,3 +38,8 @@
 #define CT_KEY_RED		'r'
 #define CT_KEY_BLUE		'b'
 #define CT_KEY_ALL		't'
+
+extern char *chat_macros[10];
+
+#endif
+
--- a/src/hexen/d_net.c
+++ b/src/hexen/d_net.c
@@ -653,7 +653,7 @@
                 continue;
             if (netbuffer->checksum & NCMD_SETUP && netbuffer->starttic < 64)
             {
-                if (netbuffer->player != VERSION)
+                if (netbuffer->player != HEXEN_VERSION)
                     I_Error
                         ("Different HEXEN versions cannot play a net game!");
                 startskill = netbuffer->retransmitfrom & 15;
@@ -682,7 +682,7 @@
                 if (respawnparm)
                     netbuffer->retransmitfrom |= 0x10;
                 netbuffer->starttic = startmap & 0x3f;
-                netbuffer->player = VERSION;
+                netbuffer->player = HEXEN_VERSION;
                 netbuffer->numtics = 0;
                 HSendPacket(i, NCMD_SETUP);
             }
--- a/src/hexen/g_game.c
+++ b/src/hexen/g_game.c
@@ -29,6 +29,7 @@
 #include "i_video.h"
 #include "i_system.h"
 #include "i_timer.h"
+#include "m_controls.h"
 #include "m_misc.h"
 #include "p_local.h"
 #include "v_video.h"
@@ -108,26 +109,7 @@
 
 short consistancy[MAXPLAYERS][BACKUPTICS];
 
-//
-// controls (have defaults)
-//
-int key_right, key_left, key_up, key_down;
-int key_strafeleft, key_straferight, key_jump;
-int key_fire, key_use, key_strafe, key_speed;
-int key_flyup, key_flydown, key_flycenter;
-int key_lookup, key_lookdown, key_lookcenter;
-int key_invleft, key_invright, key_useartifact;
-
-int mousebfire;
-int mousebstrafe;
-int mousebforward;
-int mousebjump;
-
-int joybfire;
-int joybstrafe;
-int joybuse;
-int joybspeed;
-int joybjump;
+int mouseSensitivity = 5;
 
 int LeaveMap;
 static int LeavePosition;
--- a/src/hexen/h2_main.c
+++ b/src/hexen/h2_main.c
@@ -32,16 +32,21 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <time.h>
+
+#include "config.h"
+
 #include "h2def.h"
+#include "ct_chat.h"
 #include "s_sound.h"
 #include "i_system.h"
 #include "m_argv.h"
+#include "m_config.h"
+#include "m_controls.h"
 #include "p_local.h"
 #include "v_video.h"
 
 // MACROS ------------------------------------------------------------------
 
-#define CONFIG_FILE_NAME "hexen.cfg"
 #define MAXWADFILES 20
 
 // TYPES -------------------------------------------------------------------
@@ -141,6 +146,34 @@
 
 // CODE --------------------------------------------------------------------
 
+void D_BindVariables(void)
+{
+    int i;
+
+    I_BindVariables();
+    M_BindBaseControls();
+    M_BindHereticControls();
+    M_BindHexenControls();
+
+    M_BindVariable("mouse_sensitivity",      &mouseSensitivity);
+    M_BindVariable("sfx_volume",             &snd_MaxVolume);
+    M_BindVariable("music_volume",           &snd_MusicVolume);
+    M_BindVariable("messageson",             &messageson);
+    M_BindVariable("screenblocks",           &screenblocks);
+    M_BindVariable("snd_channels",           &snd_Channels);
+    M_BindVariable("savedir",                &SavePath);
+
+    // Multiplayer chat macros
+
+    for (i=0; i<10; ++i)
+    {
+        char buf[12];
+
+        sprintf(buf, "chatmacro%i", i);
+        M_BindVariable(buf, &chat_macros[i]);
+    }
+}
+
 //==========================================================================
 //
 // H2_Main
@@ -169,7 +202,9 @@
 
     // Load defaults before initing other systems
     ST_Message("M_LoadDefaults: Load system defaults.\n");
-    M_LoadDefaults(CONFIG_FILE_NAME);
+    D_BindVariables();
+    M_SetConfigFilenames("hexen.cfg", PROGRAM_PREFIX "hexen.cfg");
+    M_LoadDefaults();
 
     // Now that the savedir is loaded from .CFG, make sure it exists
     CreateSavePath();
@@ -217,8 +252,6 @@
     S_StartSongName("orb", true);
 
     // Show version message now, so it's visible during R_Init()
-    ST_Message("Executable: " VERSIONTEXT ".\n");
-
     ST_Message("R_Init: Init Hexen refresh daemon");
     R_Init();
     ST_Message("\n");
--- a/src/hexen/h2def.h
+++ b/src/hexen/h2def.h
@@ -52,8 +52,8 @@
 
 #include "tables.h"
 
-#define VERSION 110
-#define VERSION_TEXT "v1.1"
+#define HEXEN_VERSION 110
+#define HEXEN_VERSION_TEXT "v1.1"
 
 // Uncomment, to enable all timebomb stuff
 //#define TIMEBOMB
@@ -71,15 +71,15 @@
 #ifndef VER_ID
 #define VER_ID "DVL"
 #endif
-//#define VERSIONTEXT "ID V1.2"
-//#define VERSIONTEXT "RETAIL STORE BETA"               // 9/26/95
-//#define VERSIONTEXT "DVL BETA 10 05 95" // Used for GT for testing
-//#define VERSIONTEXT "DVL BETA 10 07 95" // Just an update for Romero
-//#define VERSIONTEXT "FINAL 1.0 (10 13 95)" // Just an update for Romero
+//#define HEXEN_VERSIONTEXT "ID V1.2"
+//#define HEXEN_VERSIONTEXT "RETAIL STORE BETA"               // 9/26/95
+//#define HEXEN_VERSIONTEXT "DVL BETA 10 05 95" // Used for GT for testing
+//#define HEXEN_VERSIONTEXT "DVL BETA 10 07 95" // Just an update for Romero
+//#define HEXEN_VERSIONTEXT "FINAL 1.0 (10 13 95)" // Just an update for Romero
 #ifdef RANGECHECK
-#define VERSIONTEXT "Version 1.1 +R "__DATE__" ("VER_ID")"
+#define HEXEN_VERSIONTEXT "Version 1.1 +R "__DATE__" ("VER_ID")"
 #else
-#define VERSIONTEXT "Version 1.1 "__DATE__" ("VER_ID")"
+#define HEXEN_VERSIONTEXT "Version 1.1 "__DATE__" ("VER_ID")"
 #endif
 
 // all exterior data is defined here
@@ -886,6 +886,8 @@
 #define HXS_VERSION_TEXT_LENGTH 16
 #define HXS_DESCRIPTION_LENGTH 24
 
+extern char *SavePath;
+
 void SV_SaveGame(int slot, char *description);
 void SV_SaveMap(boolean savePlayers);
 void SV_LoadGame(int slot);
@@ -993,9 +995,6 @@
 void M_ClearRandom(void);
 // fix randoms for demos
 
-void M_LoadDefaults(char *fileName);
-void M_SaveDefaults(void);
-
 int M_DrawText(int x, int y, boolean direct, char *string);
 
 //------------------------------
@@ -1163,6 +1162,8 @@
 int MN_TextAWidth(char *text);
 void MN_DrTextB(char *text, int x, int y);
 int MN_TextBWidth(char *text);
+
+extern int messageson;
 
 #include "sounds.h"
 
--- a/src/hexen/m_misc.c
+++ b/src/hexen/m_misc.c
@@ -171,327 +171,3 @@
     }
 }
 
-/*
-==============================================================================
-
-							DEFAULTS
-
-==============================================================================
-*/
-
-int usemouse;
-int usejoystick;
-
-extern int key_right, key_left, key_up, key_down;
-extern int key_strafeleft, key_straferight, key_jump;
-extern int key_fire, key_use, key_strafe, key_speed;
-extern int key_flyup, key_flydown, key_flycenter;
-extern int key_lookup, key_lookdown, key_lookcenter;
-extern int key_invleft, key_invright, key_useartifact;
-
-extern int mousebfire;
-extern int mousebstrafe;
-extern int mousebforward;
-extern int mousebjump;
-
-extern int joybfire;
-extern int joybstrafe;
-extern int joybuse;
-extern int joybspeed;
-extern int joybjump;
-
-extern boolean messageson;
-
-extern int viewwidth, viewheight;
-
-int mouseSensitivity;
-
-extern int screenblocks;
-
-extern char *chat_macros[10];
-
-typedef struct
-{
-    char *name;
-    int *location;
-    int defaultvalue;
-    int scantranslate;          // PC scan code hack
-    int untranslated;           // lousy hack
-} default_t;
-
-#ifndef __NeXT__
-extern int snd_Channels;
-extern int snd_DesiredMusicDevice, snd_DesiredSfxDevice;
-extern int snd_MusicDevice,     // current music card # (index to dmxCodes)
-  snd_SfxDevice;                // current sfx card # (index to dmxCodes)
-
-extern int snd_SBport, snd_SBirq, snd_SBdma;    // sound blaster variables
-extern int snd_Mport;           // midi variables
-#endif
-
-default_t defaults[] = {
-    {"mouse_sensitivity", &mouseSensitivity, 5},
-
-#ifndef __NeXT__
-    {"sfx_volume", &snd_MaxVolume, 10},
-    {"music_volume", &snd_MusicVolume, 10},
-#endif
-
-#ifdef __WATCOMC__
-#define SC_UPARROW              0x48
-#define SC_DOWNARROW            0x50
-#define SC_LEFTARROW            0x4b
-#define SC_RIGHTARROW           0x4d
-#define SC_RCTRL                0x1d
-#define SC_RALT                 0x38
-#define SC_RSHIFT               0x36
-#define SC_SPACE                0x39
-#define SC_COMMA                0x33
-#define SC_PERIOD               0x34
-#define SC_PAGEUP				0x49
-#define SC_INSERT				0x52
-#define SC_HOME					0x47
-#define SC_PAGEDOWN				0x51
-#define SC_DELETE				0x53
-#define SC_END					0x4f
-#define SC_ENTER				0x1c
-#define SC_SLASH				0X35
-
-    {"key_right", &key_right, SC_RIGHTARROW, 1},
-    {"key_left", &key_left, SC_LEFTARROW, 1},
-    {"key_up", &key_up, SC_UPARROW, 1},
-    {"key_down", &key_down, SC_DOWNARROW, 1},
-    {"key_strafeleft", &key_strafeleft, SC_COMMA, 1},
-    {"key_straferight", &key_straferight, SC_PERIOD, 1},
-    {"key_jump", &key_jump, SC_SLASH, 1},
-    {"key_flyup", &key_flyup, SC_PAGEUP, 1},
-    {"key_flydown", &key_flydown, SC_INSERT, 1},
-    {"key_flycenter", &key_flycenter, SC_HOME, 1},
-    {"key_lookup", &key_lookup, SC_PAGEDOWN, 1},
-    {"key_lookdown", &key_lookdown, SC_DELETE, 1},
-    {"key_lookcenter", &key_lookcenter, SC_END, 1},
-    {"key_invleft", &key_invleft, 0x1a, 1},
-    {"key_invright", &key_invright, 0x1b, 1},
-    {"key_useartifact", &key_useartifact, SC_ENTER, 1},
-
-    {"key_fire", &key_fire, SC_RCTRL, 1},
-    {"key_use", &key_use, SC_SPACE, 1},
-    {"key_strafe", &key_strafe, SC_RALT, 1},
-    {"key_speed", &key_speed, SC_RSHIFT, 1},
-#endif
-
-#ifdef __NeXT__
-    {"key_right", &key_right, KEY_RIGHTARROW},
-    {"key_left", &key_left, KEY_LEFTARROW},
-    {"key_up", &key_up, KEY_UPARROW},
-    {"key_down", &key_down, KEY_DOWNARROW},
-    {"key_strafeleft", &key_strafeleft, ','},
-    {"key_straferight", &key_straferight, '.'},
-    {"key_jump", &key_jump, '/'},
-    {"key_flyup", &key_flyup, 'u'},
-    {"key_flydown", &key_flydown, 'j'},
-    {"key_flycenter", &key_flycenter, 'k'},
-    {"key_lookup", &key_lookup, 'm'},
-    {"key_lookdown", &key_lookdown, 'b'},
-    {"key_lookcenter", &key_lookcenter, 'n'},
-    {"key_invleft", &key_invleft, '['},
-    {"key_invright", &key_invright, ']'},
-    {"key_useartifact", &key_useartifact, 13},
-
-    {"key_fire", &key_fire, ' ', 1},
-    {"key_use", &key_use, 'x', 1},
-    {"key_strafe", &key_strafe, 'c', 1},
-    {"key_speed", &key_speed, 'z', 1},
-#endif
-
-    {"use_mouse", &usemouse, 1},
-    {"mouseb_fire", &mousebfire, 0},
-    {"mouseb_strafe", &mousebstrafe, 1},
-    {"mouseb_forward", &mousebforward, 2},
-    {"mouseb_jump", &mousebjump, -1},
-
-    {"use_joystick", &usejoystick, 0},
-    {"joyb_fire", &joybfire, 0},
-    {"joyb_strafe", &joybstrafe, 1},
-    {"joyb_use", &joybuse, 3},
-    {"joyb_speed", &joybspeed, 2},
-    {"joyb_jump", &joybjump, -1},
-
-    {"screenblocks", &screenblocks, 10},
-
-#ifndef __NeXT__
-    {"snd_channels", &snd_Channels, 3},
-    {"snd_musicdevice", &snd_DesiredMusicDevice, 0},
-    {"snd_sfxdevice", &snd_DesiredSfxDevice, 0},
-    {"snd_sbport", &snd_SBport, 544},
-    {"snd_sbirq", &snd_SBirq, -1},
-    {"snd_sbdma", &snd_SBdma, -1},
-    {"snd_mport", &snd_Mport, -1},
-#endif
-
-    {"usegamma", &usegamma, 0},
-
-#define DEFAULT_SAVEPATH		"hexndata/"
-
-    {"savedir", (int *) &SavePath, (int) DEFAULT_SAVEPATH},
-
-    {"messageson", (int *) &messageson, 1},
-
-    {"chatmacro0", (int *) &chat_macros[0], (int) HUSTR_CHATMACRO0},
-    {"chatmacro1", (int *) &chat_macros[1], (int) HUSTR_CHATMACRO1},
-    {"chatmacro2", (int *) &chat_macros[2], (int) HUSTR_CHATMACRO2},
-    {"chatmacro3", (int *) &chat_macros[3], (int) HUSTR_CHATMACRO3},
-    {"chatmacro4", (int *) &chat_macros[4], (int) HUSTR_CHATMACRO4},
-    {"chatmacro5", (int *) &chat_macros[5], (int) HUSTR_CHATMACRO5},
-    {"chatmacro6", (int *) &chat_macros[6], (int) HUSTR_CHATMACRO6},
-    {"chatmacro7", (int *) &chat_macros[7], (int) HUSTR_CHATMACRO7},
-    {"chatmacro8", (int *) &chat_macros[8], (int) HUSTR_CHATMACRO8},
-    {"chatmacro9", (int *) &chat_macros[9], (int) HUSTR_CHATMACRO9}
-};
-
-int numdefaults;
-char defaultfile[128];
-
-/*
-==============
-=
-= M_SaveDefaults
-=
-==============
-*/
-
-void M_SaveDefaults(void)
-{
-    int i, v;
-    FILE *f;
-
-    f = fopen(defaultfile, "w");
-    if (!f)
-        return;                 // can't write the file, but don't complain
-
-    for (i = 0; i < numdefaults; i++)
-    {
-#ifdef __WATCOMC__
-        if (defaults[i].scantranslate)
-            defaults[i].location = &defaults[i].untranslated;
-#endif
-        if (defaults[i].defaultvalue > -0xfff
-            && defaults[i].defaultvalue < 0xfff)
-        {
-            v = *defaults[i].location;
-            fprintf(f, "%s\t\t%i\n", defaults[i].name, v);
-        }
-        else
-        {
-            fprintf(f, "%s\t\t\"%s\"\n", defaults[i].name,
-                    *(char **) (defaults[i].location));
-        }
-    }
-
-    fclose(f);
-}
-
-//==========================================================================
-//
-// M_LoadDefaults
-//
-//==========================================================================
-
-extern byte scantokey[128];
-
-void M_LoadDefaults(char *fileName)
-{
-    int i;
-    int len;
-    FILE *f;
-    char def[80];
-    char strparm[100];
-    char *newstring;
-    int parm;
-    boolean isstring;
-
-    // Set everything to base values
-    numdefaults = sizeof(defaults) / sizeof(defaults[0]);
-    for (i = 0; i < numdefaults; i++)
-    {
-        *defaults[i].location = defaults[i].defaultvalue;
-    }
-
-    // Check for a custom config file
-    i = M_CheckParm("-config");
-    if (i && i < myargc - 1)
-    {
-        strcpy(defaultfile, myargv[i + 1]);
-        ST_Message("config file: %s\n", defaultfile);
-    }
-    else if (cdrom)
-    {
-        sprintf(defaultfile, "c:\\hexndata\\%s", fileName);
-    }
-    else
-    {
-        strcpy(defaultfile, fileName);
-    }
-
-    // Scan the config file
-    f = fopen(defaultfile, "r");
-    if (f)
-    {
-        while (!feof(f))
-        {
-            isstring = false;
-            if (fscanf(f, "%79s %[^\n]\n", def, strparm) == 2)
-            {
-                if (strparm[0] == '"')
-                {
-                    // Get a string default
-                    isstring = true;
-                    len = strlen(strparm);
-                    newstring = (char *) malloc(len);
-                    if (newstring == NULL)
-                        I_Error("can't malloc newstring");
-                    strparm[len - 1] = 0;
-                    strcpy(newstring, strparm + 1);
-                }
-                else if (strparm[0] == '0' && strparm[1] == 'x')
-                {
-                    sscanf(strparm + 2, "%x", &parm);
-                }
-                else
-                {
-                    sscanf(strparm, "%i", &parm);
-                }
-                for (i = 0; i < numdefaults; i++)
-                {
-                    if (!strcmp(def, defaults[i].name))
-                    {
-                        if (!isstring)
-                        {
-                            *defaults[i].location = parm;
-                        }
-                        else
-                        {
-                            *defaults[i].location = (int) newstring;
-                        }
-                        break;
-                    }
-                }
-            }
-        }
-        fclose(f);
-    }
-
-#ifdef __WATCOMC__
-    // Translate the key scancodes
-    for (i = 0; i < numdefaults; i++)
-    {
-        if (defaults[i].scantranslate)
-        {
-            parm = *defaults[i].location;
-            defaults[i].untranslated = parm;
-            *defaults[i].location = scantokey[parm];
-        }
-    }
-#endif
-}
-
--- a/src/hexen/mn_menu.c
+++ b/src/hexen/mn_menu.c
@@ -126,7 +126,6 @@
 // EXTERNAL DATA DECLARATIONS ----------------------------------------------
 
 extern int detailLevel;
-extern int screenblocks;
 extern char *SavePath;
 extern int key_speed, key_strafe;
 extern boolean gamekeydown[256];        // The NUMKEYS macro is local to g_game
@@ -135,7 +134,7 @@
 
 boolean MenuActive;
 int InfoType;
-boolean messageson;
+int messageson = true;
 boolean mn_SuicideConsole;
 
 // PRIVATE DATA DEFINITIONS ------------------------------------------------
--- a/src/hexen/p_inter.c
+++ b/src/hexen/p_inter.c
@@ -70,8 +70,6 @@
 
 void P_SetMessage(player_t * player, char *message, boolean ultmsg)
 {
-    extern boolean messageson;
-
     if ((player->ultimateMessage || !messageson) && !ultmsg)
     {
         return;
@@ -106,8 +104,6 @@
 
 void P_SetYellowMessage(player_t * player, char *message, boolean ultmsg)
 {
-    extern boolean messageson;
-
     if ((player->ultimateMessage || !messageson) && !ultmsg)
     {
         return;
--- a/src/hexen/r_local.h
+++ b/src/hexen/r_local.h
@@ -333,6 +333,7 @@
 //
 // R_main.c
 //
+extern int screenblocks;
 extern int viewwidth, viewheight, viewwindowx, viewwindowy;
 extern int centerx, centery;
 extern int flyheight;
--- a/src/hexen/r_main.c
+++ b/src/hexen/r_main.c
@@ -663,7 +663,7 @@
 */
 
 int detailLevel;
-int screenblocks;
+int screenblocks = 10;
 
 void R_Init(void)
 {
--- a/src/hexen/s_sound.c
+++ b/src/hexen/s_sound.c
@@ -71,11 +71,9 @@
 
 static char ArchivePath[128];
 
-extern int snd_MusicDevice;
-extern int snd_SfxDevice;
-extern int snd_MaxVolume;
-extern int snd_MusicVolume;
-extern int snd_Channels;
+int snd_MaxVolume;                // maximum volume for sound
+int snd_MusicVolume;              // maximum volume for music
+int snd_Channels = 3;
 
 extern int startepisode;
 extern int startmap;
--- a/src/hexen/s_sound.h
+++ b/src/hexen/s_sound.h
@@ -77,6 +77,7 @@
 
 extern int snd_MaxVolume;
 extern int snd_MusicVolume;
+extern int snd_Channels;
 
 void S_Start(void);
 void S_StartSound(mobj_t * origin, int sound_id);
--- a/src/hexen/sb_bar.c
+++ b/src/hexen/sb_bar.c
@@ -2099,7 +2099,7 @@
 
 static void CheatVersionFunc(player_t * player, Cheat_t * cheat)
 {
-    P_SetMessage(player, VERSIONTEXT, true);
+    P_SetMessage(player, HEXEN_VERSIONTEXT, true);
 }
 
 static void CheatDebugFunc(player_t * player, Cheat_t * cheat)
--- a/src/hexen/st_start.c
+++ b/src/hexen/st_start.c
@@ -34,6 +34,7 @@
 
 #include "h2def.h"
 #include "i_system.h"
+#include "s_sound.h"
 #include "st_start.h"
 
 
--- a/src/hexen/sv_save.c
+++ b/src/hexen/sv_save.c
@@ -150,7 +150,9 @@
 
 // PUBLIC DATA DEFINITIONS -------------------------------------------------
 
-char *SavePath;
+#define DEFAULT_SAVEPATH                "hexndata/"
+
+char *SavePath = DEFAULT_SAVEPATH;
 
 // PRIVATE DATA DEFINITIONS ------------------------------------------------
 
--- a/src/i_sdlsound.c
+++ b/src/i_sdlsound.c
@@ -561,6 +561,11 @@
     left = ((254 - sep) * vol) / 127;
     right = ((sep) * vol) / 127;
 
+    if (left < 0) left = 0;
+    else if ( left > 255) left = 255;
+    if (right < 0) right = 0;
+    else if (right > 255) right = 255;
+
     Mix_SetPanning(handle, left, right);
 }
 
--- a/src/i_sound.c
+++ b/src/i_sound.c
@@ -251,6 +251,7 @@
 
 static void CheckVolumeSeparation(int *sep, int *vol)
 {
+return;
     if (*sep < 0)
     {
         *sep = 0;
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -179,6 +179,12 @@
     CONFIG_VARIABLE_KEY(key_straferight),
 
     //!
+    // Keyboard key to jump.
+    //
+
+    CONFIG_VARIABLE_KEY(key_jump),
+
+    //!
     // Keyboard key to fly upward.
     //
 
@@ -285,6 +291,12 @@
     CONFIG_VARIABLE_INT(mouseb_forward),
 
     //!
+    // Mouse button to jump.
+    //
+
+    CONFIG_VARIABLE_INT(mouseb_jump),
+
+    //!
     // If non-zero, joystick input is enabled.
     //
 
@@ -317,6 +329,12 @@
     CONFIG_VARIABLE_INT(joyb_speed),
 
     //!
+    // Joystick button to jump.
+    //
+
+    CONFIG_VARIABLE_INT(joyb_jump),
+
+    //!
     // Screen size, range 3-11.
     //
     // A value of 11 gives a full-screen view with the status bar not 
@@ -386,6 +404,20 @@
     //
 
     CONFIG_VARIABLE_INT(usegamma),
+
+    //!
+    // Directory in which to store savegames.
+    //
+
+    CONFIG_VARIABLE_STRING(savedir),
+
+    //!
+    // Controls whether messages are displayed in the heads-up display.
+    // If this has a non-zero value, messages are displayed.
+    //
+
+    CONFIG_VARIABLE_INT(messageson),
+
 
     //!
     // Multiplayer chat macro: message to send when alt+0 is pressed.
--- a/src/m_controls.c
+++ b/src/m_controls.c
@@ -25,11 +25,11 @@
 #include "doomkeys.h"
 
 #include "m_config.h"
- 
-// 
-// Keyboard controls 
-// 
 
+//
+// Keyboard controls
+//
+
 int key_right = KEY_RIGHTARROW;
 int key_left = KEY_LEFTARROW;
 
@@ -59,6 +59,12 @@
 int key_useartifact = KEY_ENTER;
 
 //
+// Hexen key controls
+//
+
+int key_jump = '/';
+
+//
 // Mouse controls
 //
 
@@ -66,6 +72,8 @@
 int mousebstrafe = 1;
 int mousebforward = 2;
 
+int mousebjump = -1;
+
 int mousebstrafeleft = -1;
 int mousebstraferight = -1;
 int mousebbackward = -1;
@@ -83,6 +91,8 @@
 int joybstrafeleft = -1;
 int joybstraferight = -1;
 
+int joybjump = -1;
+
 // Control whether if a mouse button is double clicked, it acts like 
 // "use" has been pressed
 
@@ -138,5 +148,12 @@
     M_BindVariable("key_invleft",        &key_invleft);
     M_BindVariable("key_invright",       &key_invright);
     M_BindVariable("key_useartifact",    &key_useartifact);
+}
+
+void M_BindHexenControls(void)
+{
+    M_BindVariable("key_jump",           &key_jump);
+    M_BindVariable("mouseb_jump",        &mousebjump);
+    M_BindVariable("joyb_jump",          &joybjump);
 }
 
--- a/src/m_controls.h
+++ b/src/m_controls.h
@@ -45,11 +45,15 @@
 extern int key_invleft;
 extern int key_invright;
 extern int key_useartifact;
+
+extern int key_jump;
  
 extern int mousebfire;
 extern int mousebstrafe;
 extern int mousebforward;
 
+extern int mousebjump;
+
 extern int mousebstrafeleft;
 extern int mousebstraferight;
 extern int mousebbackward;
@@ -59,6 +63,9 @@
 extern int joybstrafe;
 extern int joybuse;
 extern int joybspeed;
+
+extern int joybjump;
+
 extern int joybstrafeleft;
 extern int joybstraferight;
 
@@ -66,6 +73,7 @@
  
 void M_BindBaseControls(void);
 void M_BindHereticControls(void);
+void M_BindHexenControls(void);
 
 #endif /* #ifndef __M_CONTROLS_H__ */