foxygit / doom Log in
commit d4d0f9945cefdb86241b5bd095e82ddbfca0e134
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Wed Oct 8 18:47:13 2008 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Wed Oct 8 18:47:13 2008 +0000

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

    Subversion-branch: /branches/raven-branch
    Subversion-revision: 1338
---
 src/hexen/ct_chat.c  |  13 ++-
 src/hexen/ct_chat.h  |   8 ++
 src/hexen/d_net.c    |   4 +-
 src/hexen/g_game.c   |  22 +---
 src/hexen/h2_main.c  |  41 ++++++-
 src/hexen/h2def.h    |  25 ++--
 src/hexen/m_misc.c   | 324 ---------------------------------------------------
 src/hexen/mn_menu.c  |   3 +-
 src/hexen/p_inter.c  |   4 -
 src/hexen/r_local.h  |   1 +
 src/hexen/r_main.c   |   2 +-
 src/hexen/s_sound.c  |   8 +-
 src/hexen/s_sound.h  |   1 +
 src/hexen/sb_bar.c   |   2 +-
 src/hexen/st_start.c |   1 +
 src/hexen/sv_save.c  |   4 +-
 src/i_sdlsound.c     |   5 +
 src/i_sound.c        |   1 +
 src/m_config.c       |  32 +++++
 src/m_controls.c     |  25 +++-
 src/m_controls.h     |   8 ++
 21 files changed, 153 insertions(+), 381 deletions(-)

diff --git a/src/hexen/ct_chat.c b/src/hexen/ct_chat.c
index 983f3715..10a8829b 100644
--- a/src/hexen/ct_chat.c
+++ b/src/hexen/ct_chat.c
@@ -102,7 +102,18 @@ char *CT_FromPlrText[MAXPLAYERS] = {
     "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;
diff --git a/src/hexen/ct_chat.h b/src/hexen/ct_chat.h
index 326f65cb..cdd26143 100644
--- 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
+
diff --git a/src/hexen/d_net.c b/src/hexen/d_net.c
index fec03c8d..d1a7c376 100644
--- a/src/hexen/d_net.c
+++ b/src/hexen/d_net.c
@@ -653,7 +653,7 @@ void D_ArbitrateNetStart(void)
                 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 @@ void D_ArbitrateNetStart(void)
                 if (respawnparm)
                     netbuffer->retransmitfrom |= 0x10;
                 netbuffer->starttic = startmap & 0x3f;
-                netbuffer->player = VERSION;
+                netbuffer->player = HEXEN_VERSION;
                 netbuffer->numtics = 0;
                 HSendPacket(i, NCMD_SETUP);
             }
diff --git a/src/hexen/g_game.c b/src/hexen/g_game.c
index e7ba9e48..564c1f27 100644
--- 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 @@ boolean precache = true;        // if true, load all graphics at start

 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;
diff --git a/src/hexen/h2_main.c b/src/hexen/h2_main.c
index e82f26e3..9d83a7da 100644
--- 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 @@ static execOpt_t ExecOptions[] = {

 // 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 @@ void D_DoomMain(void)

     // 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 @@ void D_DoomMain(void)
     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");
diff --git a/src/hexen/h2def.h b/src/hexen/h2def.h
index 621af01c..61ca87b9 100644
--- 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 @@ void G_ScreenShot(void);
 #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 @@ extern int prndindex;
 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);

 //------------------------------
@@ -1164,6 +1163,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"

 #endif // __H2DEF__
diff --git a/src/hexen/m_misc.c b/src/hexen/m_misc.c
index e8a6c91b..eb16b621 100644
--- a/src/hexen/m_misc.c
+++ b/src/hexen/m_misc.c
@@ -171,327 +171,3 @@ void M_ForceUppercase(char *text)
     }
 }

-/*
-==============================================================================
-
-							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
-}
-
diff --git a/src/hexen/mn_menu.c b/src/hexen/mn_menu.c
index 46c083a6..df14e4d4 100644
--- a/src/hexen/mn_menu.c
+++ b/src/hexen/mn_menu.c
@@ -126,7 +126,6 @@ void MN_LoadSlotText(void);
 // 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 @@ extern boolean gamekeydown[256];        // The NUMKEYS macro is local to g_game

 boolean MenuActive;
 int InfoType;
-boolean messageson;
+int messageson = true;
 boolean mn_SuicideConsole;

 // PRIVATE DATA DEFINITIONS ------------------------------------------------
diff --git a/src/hexen/p_inter.c b/src/hexen/p_inter.c
index bdc0f576..45ce3cd3 100644
--- a/src/hexen/p_inter.c
+++ b/src/hexen/p_inter.c
@@ -70,8 +70,6 @@ static void TryPickupWeaponPiece(player_t * player, pclass_t matchClass,

 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_SetMessage(player_t * player, char *message, boolean ultmsg)

 void P_SetYellowMessage(player_t * player, char *message, boolean ultmsg)
 {
-    extern boolean messageson;
-
     if ((player->ultimateMessage || !messageson) && !ultmsg)
     {
         return;
diff --git a/src/hexen/r_local.h b/src/hexen/r_local.h
index 187e709f..3c51d1af 100644
--- a/src/hexen/r_local.h
+++ b/src/hexen/r_local.h
@@ -333,6 +333,7 @@ extern angle_t rw_normalangle;
 //
 // R_main.c
 //
+extern int screenblocks;
 extern int viewwidth, viewheight, viewwindowx, viewwindowy;
 extern int centerx, centery;
 extern int flyheight;
diff --git a/src/hexen/r_main.c b/src/hexen/r_main.c
index 2427f5f4..05b5a0c7 100644
--- a/src/hexen/r_main.c
+++ b/src/hexen/r_main.c
@@ -663,7 +663,7 @@ void R_ExecuteSetViewSize(void)
 */

 int detailLevel;
-int screenblocks;
+int screenblocks = 10;

 void R_Init(void)
 {
diff --git a/src/hexen/s_sound.c b/src/hexen/s_sound.c
index f8601e1a..a0f044e7 100644
--- a/src/hexen/s_sound.c
+++ b/src/hexen/s_sound.c
@@ -71,11 +71,9 @@ static byte *SoundCurve;

 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;
diff --git a/src/hexen/s_sound.h b/src/hexen/s_sound.h
index 98ef48ea..88e946bf 100644
--- a/src/hexen/s_sound.h
+++ b/src/hexen/s_sound.h
@@ -77,6 +77,7 @@ typedef struct

 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);
diff --git a/src/hexen/sb_bar.c b/src/hexen/sb_bar.c
index 34f4e4fe..f567ce11 100644
--- a/src/hexen/sb_bar.c
+++ b/src/hexen/sb_bar.c
@@ -2099,7 +2099,7 @@ static void CheatClassFunc2(player_t * player, Cheat_t * cheat)

 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)
diff --git a/src/hexen/st_start.c b/src/hexen/st_start.c
index 317bf7bd..7eadb845 100644
--- 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"


diff --git a/src/hexen/sv_save.c b/src/hexen/sv_save.c
index a69cdd71..ded8f4b0 100644
--- a/src/hexen/sv_save.c
+++ b/src/hexen/sv_save.c
@@ -150,7 +150,9 @@ extern acsInfo_t *ACSInfo;

 // PUBLIC DATA DEFINITIONS -------------------------------------------------

-char *SavePath;
+#define DEFAULT_SAVEPATH                "hexndata/"
+
+char *SavePath = DEFAULT_SAVEPATH;

 // PRIVATE DATA DEFINITIONS ------------------------------------------------

diff --git a/src/i_sdlsound.c b/src/i_sdlsound.c
index b26fb1b2..c4261751 100644
--- a/src/i_sdlsound.c
+++ b/src/i_sdlsound.c
@@ -561,6 +561,11 @@ static void I_SDL_UpdateSoundParams(int handle, int vol, int sep)
     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);
 }

diff --git a/src/i_sound.c b/src/i_sound.c
index 439f8689..bcdac459 100644
--- a/src/i_sound.c
+++ b/src/i_sound.c
@@ -251,6 +251,7 @@ void I_UpdateSound(void)

 static void CheckVolumeSeparation(int *sep, int *vol)
 {
+return;
     if (*sep < 0)
     {
         *sep = 0;
diff --git a/src/m_config.c b/src/m_config.c
index b036121c..69cd3b16 100644
--- a/src/m_config.c
+++ b/src/m_config.c
@@ -178,6 +178,12 @@ static default_t	doom_defaults_list[] =

     CONFIG_VARIABLE_KEY(key_straferight),

+    //!
+    // Keyboard key to jump.
+    //
+
+    CONFIG_VARIABLE_KEY(key_jump),
+
     //!
     // Keyboard key to fly upward.
     //
@@ -284,6 +290,12 @@ static default_t	doom_defaults_list[] =

     CONFIG_VARIABLE_INT(mouseb_forward),

+    //!
+    // Mouse button to jump.
+    //
+
+    CONFIG_VARIABLE_INT(mouseb_jump),
+
     //!
     // If non-zero, joystick input is enabled.
     //
@@ -316,6 +328,12 @@ static default_t	doom_defaults_list[] =

     CONFIG_VARIABLE_INT(joyb_speed),

+    //!
+    // Joystick button to jump.
+    //
+
+    CONFIG_VARIABLE_INT(joyb_jump),
+
     //!
     // Screen size, range 3-11.
     //
@@ -387,6 +405,20 @@ static default_t	doom_defaults_list[] =

     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.
     //
diff --git a/src/m_controls.c b/src/m_controls.c
index 62cad830..f24f6dda 100644
--- a/src/m_controls.c
+++ b/src/m_controls.c
@@ -25,10 +25,10 @@
 #include "doomkeys.h"

 #include "m_config.h"
-
-//
-// Keyboard controls
-//
+
+//
+// Keyboard controls
+//

 int key_right = KEY_RIGHTARROW;
 int key_left = KEY_LEFTARROW;
@@ -58,6 +58,12 @@ int key_invleft = '[';
 int key_invright = ']';
 int key_useartifact = KEY_ENTER;

+//
+// Hexen key controls
+//
+
+int key_jump = '/';
+
 //
 // Mouse controls
 //
@@ -66,6 +72,8 @@ int mousebfire = 0;
 int mousebstrafe = 1;
 int mousebforward = 2;

+int mousebjump = -1;
+
 int mousebstrafeleft = -1;
 int mousebstraferight = -1;
 int mousebbackward = -1;
@@ -83,6 +91,8 @@ int joybspeed = 2;
 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

@@ -140,3 +150,10 @@ void M_BindHereticControls(void)
     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);
+}
+
diff --git a/src/m_controls.h b/src/m_controls.h
index a4f19685..eb752ea2 100644
--- a/src/m_controls.h
+++ b/src/m_controls.h
@@ -45,11 +45,15 @@ extern int key_lookcenter;
 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 joybfire;
 extern int joybstrafe;
 extern int joybuse;
 extern int joybspeed;
+
+extern int joybjump;
+
 extern int joybstrafeleft;
 extern int joybstraferight;

@@ -66,6 +73,7 @@ extern int dclick_use;

 void M_BindBaseControls(void);
 void M_BindHereticControls(void);
+void M_BindHexenControls(void);

 #endif /* #ifndef __M_CONTROLS_H__ */