shithub: choc

Download patch

ref: 9d32e513a5cfa0b75a349f628cf5f89d4384fd26
parent: 79bd9a77c532183fcb38f63e99eb85a2a22a8096
author: Simon Howard <fraggle@gmail.com>
date: Fri Mar 24 15:40:08 EST 2006

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

--- 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 @@
 
 boolean		advancedemo;
 
+// Store demo, do not accept any inputs
 
+boolean         storedemo;
 
 
 char		wadfile[1024];		// primary wad file
@@ -361,9 +363,8 @@
     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 @@
 	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();
@@ -1656,6 +1661,13 @@
 
     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");
--- 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 @@
     char		identification[4];		
     int			numlumps;
     int			infotableofs;
-    
 } wadinfo_t;
 
 
@@ -53,13 +52,15 @@
     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;
@@ -66,9 +67,13 @@
     int		position;
     int		size;
     void       *cache;
-} lumpinfo_t;
 
+    // Used for hash table lookups
 
+    lumpinfo_t *next;
+};
+
+
 extern	void**		lumpcache;
 extern	lumpinfo_t*	lumpinfo;
 extern	int		numlumps;
@@ -85,7 +90,7 @@
 void*	W_CacheLumpNum (int lump, int tag);
 void*	W_CacheLumpName (char* name, int tag);
 
-
+void    W_GenerateHashTable(void);
 
 
 #endif