foxygit / doom Log in
commit 9d32e513a5cfa0b75a349f628cf5f89d4384fd26
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Fri Mar 24 20:40:08 2006 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Fri Mar 24 20:40:08 2006 +0000

    Call W_GenerateHashTable to generate the lumpname hashtable.  Do
    not constantly look up MAP01 to see if this is a store demo.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 438
---
 src/d_main.c | 22 +++++++++++++++++-----
 src/w_wad.h  | 17 +++++++++++------
 2 files changed, 28 insertions(+), 11 deletions(-)

diff --git a/src/d_main.c b/src/d_main.c
index c0f50a3d..353dcbd4 100644
--- a/src/d_main.c
+++ b/src/d_main.c
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: d_main.c 429 2006-03-23 17:43:15Z fraggle $
+// $Id: d_main.c 438 2006-03-24 20:40:08Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -184,7 +184,7 @@
 //-----------------------------------------------------------------------------


-static const char rcsid[] = "$Id: d_main.c 429 2006-03-23 17:43:15Z fraggle $";
+static const char rcsid[] = "$Id: d_main.c 438 2006-03-24 20:40:08Z fraggle $";

 #define	BGCOLOR		7
 #define	FGCOLOR		8
@@ -292,7 +292,9 @@ FILE*		debugfile;

 boolean		advancedemo;

+// Store demo, do not accept any inputs

+boolean         storedemo;


 char		wadfile[1024];		// primary wad file
@@ -361,9 +363,8 @@ void D_ProcessEvents (void)
     event_t*	ev;

     // IF STORE DEMO, DO NOT ACCEPT INPUT
-    if ( ( gamemode == commercial )
-	 && (W_CheckNumForName("map01")<0) )
-      return;
+    if (storedemo)
+        return;

     while ((ev = D_PopEvent()) != NULL)
     {
@@ -1516,6 +1517,10 @@ void D_DoomMain (void)
 	D_AddFile (file);
 	printf(DEH_String("Playing demo %s.lmp.\n"),myargv[p+1]);
     }
+
+    // Generate the WAD hash table.  Speed things up a bit.
+
+    W_GenerateHashTable();

     IdentifyVersion();
     InitGameVersion();
@@ -1657,6 +1662,13 @@ void D_DoomMain (void)
     printf (DEH_String("ST_Init: Init status bar.\n"));
     ST_Init ();

+    // If Doom II without a MAP01 lump, this is a store demo.
+    // Moved this here so that MAP01 isn't constantly looked up
+    // in the main loop.
+
+    if (gamemode == commercial && W_CheckNumForName("map01") < 0)
+        storedemo = true;
+
     // start the apropriate game based on parms
     p = M_CheckParm ("-record");

diff --git a/src/w_wad.h b/src/w_wad.h
index 548c2a54..659c0b40 100644
--- a/src/w_wad.h
+++ b/src/w_wad.h
@@ -1,7 +1,7 @@
 // Emacs style mode select   -*- C++ -*-
 //-----------------------------------------------------------------------------
 //
-// $Id: w_wad.h 362 2006-02-03 18:41:26Z fraggle $
+// $Id: w_wad.h 438 2006-03-24 20:40:08Z fraggle $
 //
 // Copyright(C) 1993-1996 Id Software, Inc.
 // Copyright(C) 2005 Simon Howard
@@ -44,7 +44,6 @@ typedef struct
     char		identification[4];
     int			numlumps;
     int			infotableofs;
-
 } wadinfo_t;


@@ -53,20 +52,26 @@ typedef struct
     int			filepos;
     int			size;
     char		name[8];
-
 } filelump_t;

 //
 // WADFILE I/O related stuff.
 //
-typedef struct
+
+typedef struct lumpinfo_s lumpinfo_t;
+
+struct lumpinfo_s
 {
     char	name[8];
     FILE       *handle;
     int		position;
     int		size;
     void       *cache;
-} lumpinfo_t;
+
+    // Used for hash table lookups
+
+    lumpinfo_t *next;
+};


 extern	void**		lumpcache;
@@ -85,7 +90,7 @@ void    W_ReadLump (int lump, void *dest);
 void*	W_CacheLumpNum (int lump, int tag);
 void*	W_CacheLumpName (char* name, int tag);

-
+void    W_GenerateHashTable(void);


 #endif