summaryrefslogtreecommitdiff
path: root/src/net_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/net_common.c')
-rw-r--r--src/net_common.c69
1 files changed, 68 insertions, 1 deletions
diff --git a/src/net_common.c b/src/net_common.c
index 35bc67e1..ba8d24bf 100644
--- a/src/net_common.c
+++ b/src/net_common.c
@@ -1,7 +1,7 @@
// Emacs style mode select -*- C++ -*-
//-----------------------------------------------------------------------------
//
-// $Id: net_common.c 456 2006-03-30 19:13:20Z fraggle $
+// $Id: net_common.c 461 2006-04-06 17:53:43Z fraggle $
//
// Copyright(C) 2005 Simon Howard
//
@@ -557,4 +557,71 @@ void NET_SafePuts(char *s)
putchar('\n');
}
+// Check that a gamemode+gamemission received over the network is valid.
+
+boolean NET_ValidGameMode(GameMode_t mode, GameMission_t mission)
+{
+ if (mode == shareware || mode == registered || mode == retail)
+ {
+ return true;
+ }
+ else if (mode == commercial)
+ {
+ return mission == doom2 || mission == pack_tnt || mission == pack_plut;
+ }
+ else
+ {
+ return false;
+ }
+}
+
+// Check that game settings are valid
+
+boolean NET_ValidGameSettings(GameMode_t mode, GameMission_t mission,
+ net_gamesettings_t *settings)
+{
+ if (settings->ticdup <= 0)
+ return false;
+
+ if (settings->extratics < 0)
+ return false;
+
+ if (settings->deathmatch < 0 || settings->deathmatch > 2)
+ return false;
+
+ if (settings->skill < sk_noitems || settings->skill > sk_nightmare)
+ return false;
+
+ if (settings->gameversion < exe_doom_1_9 || settings->gameversion > exe_final)
+ return false;
+
+ if (mode == shareware || mode == retail || mode == registered)
+ {
+ if (settings->map < 1 || settings->map > 9)
+ return false;
+ }
+ else
+ {
+ if (settings->map < 1 || settings->map > 32)
+ return false;
+ }
+
+ if (mode == shareware)
+ {
+ if (settings->episode != 1)
+ return false;
+ }
+ else if (mode == registered)
+ {
+ if (settings->episode < 1 || settings->episode > 3)
+ return false;
+ }
+ else if (mode == retail)
+ {
+ if (settings->episode < 1 || settings->episode > 4)
+ return false;
+ }
+
+ return true;
+}