shithub: choc

Download patch

ref: cffe694cd613ac7c1a738f50e883a904d2813047
parent: f1bde3d5212cab46aa9f40bec29e8a72013f8a41
author: Simon Howard <[email protected]>
date: Fri Apr 5 17:23:46 EDT 2013

Use two-stage netgame startup for Strife, and restore the previous
startup splash-screen behavior (before it was modified in r2435).

Subversion-branch: /branches/v2-branch
Subversion-revision: 2586

--- a/src/strife/d_main.c
+++ b/src/strife/d_main.c
@@ -84,11 +84,6 @@
 
 #include "d_main.h"
 
-// Size of startup splash screen window.
-
-#define INTRO_SCREEN_W 640
-#define INTRO_SCREEN_H 480
-
 //
 // D-DoomLoop()
 // Not a globally visible function,
@@ -164,7 +159,8 @@
 
 static char *nickname = NULL;
 
-void D_CheckNetGame (void);
+void D_ConnectNetGame(void);
+void D_CheckNetGame(void);
 
 
 //
@@ -496,8 +492,11 @@
 
     TryRunTics();
 
-    I_SetWindowTitle(gamedescription);
-    I_InitGraphics();
+    if (!showintro)
+    {
+        I_SetWindowTitle(gamedescription);
+        I_InitGraphics();
+    }
 
     I_EnableLoadingDisk();
     I_SetGrabMouseCallback(D_GrabMouseCallback);
@@ -1140,51 +1139,10 @@
 // haleyjd 20110206: Initialize the graphical introduction sequence
 //
 
-static int saved_screen_width, saved_screen_height;
-static int saved_fullscreen, saved_aspect_ratio_correct;
-
 static void D_InitIntroSequence(void)
 {
     if(showintro)
     {
-        // Intro splash screen runs in a window. We must save the actual
-        // display settings, and temporarily overwrite them with the
-        // windowed-mode settings. The real settings will be restored
-        // when the intro screen finishes.
-
-        // INTRO-FIXME:
-        // This is causing problems on Windows, including interruption of the 
-        // sound playing. I would like to see this changed back to how it worked
-        // before once the netcode can function along with it.
-        // -haleyjd
-
-        saved_screen_width = screen_width;
-        saved_screen_height = screen_height;
-        saved_aspect_ratio_correct = aspect_ratio_correct;
-        saved_fullscreen = fullscreen;
-
-        // If the game display settings are to run in a small window, it
-        // makes no sense to switch to a larger window for the splash
-        // screen, so use the configured settings.
-
-        // INTRO-FIXME: how does this make sense?
-        // If I have an 800x600 game window (in windowed mode), then I expect an 
-        // 800x600 intro too,
-        // and indeed the code below is capable of drawing at any resolution.
-        // Either the logic is off or I simply totally disagree with the original
-        // motivation that lead to limiting it to 640x480.
-        // -haleyjd
-
-        if (fullscreen
-         || screen_width > INTRO_SCREEN_W || screen_height > INTRO_SCREEN_H)
-        {
-            screen_width = INTRO_SCREEN_W;
-            screen_height = INTRO_SCREEN_H;
-            aspect_ratio_correct = 1;
-        }
-
-        fullscreen = 0;
-
         // In vanilla Strife, Mode 13h was initialized directly in D_DoomMain.
         // We have to be a little more courteous of the low-level code here.
         I_SetWindowTitle(gamedescription);
@@ -1221,23 +1179,6 @@
     */
 }
 
-// End of intro splash screen.
-
-static void D_FinishIntroSequence(void)
-{
-    if (showintro)
-    {
-        I_ShutdownGraphics();
-
-        // Restore display settings to the actual ones.
-
-        screen_width = saved_screen_width;
-        screen_height = saved_screen_height;
-        fullscreen = saved_fullscreen;
-        aspect_ratio_correct = saved_aspect_ratio_correct;
-    }
-}
-
 //
 // D_DrawIntroSequence
 //
@@ -1669,6 +1610,17 @@
     D_SetGameDescription();
     savegamedir = M_GetSaveGameDir("strife1.wad");
 
+    // fraggle 20130405: I_InitTimer is needed here for the netgame
+    // startup.
+    I_InitTimer();
+
+#ifdef FEATURE_MULTIPLAYER
+    if(devparm) // [STRIFE]
+        printf ("NET_Init: Init network subsystem.\n");
+    NET_Init();
+#endif
+    D_ConnectNetGame();
+
     // haleyjd 20110210: Create Strife hub save folders
     M_CreateSaveDirs(savegamedir);
 
@@ -1871,15 +1823,9 @@
     if(devparm) // [STRIFE]
         DEH_printf("I_Init: Setting up machine state.\n");
     I_CheckIsScreensaver();
-    I_InitTimer();
     I_InitJoystick();
     D_IntroTick(); // [STRIFE]
 
-#ifdef FEATURE_MULTIPLAYER
-    if(devparm) // [STRIFE]
-        printf ("NET_Init: Init network subsystem.\n");
-    NET_Init ();
-#endif
     D_IntroTick(); // [STRIFE]
 
     if(devparm) // [STRIFE]
@@ -1900,24 +1846,6 @@
     if(devparm)
         DEH_printf("  Play voices = %d\n", disable_voices == 0);
 
-    // [STRIFE]: This has been rearranged. These intro ticks occur
-    // further down in Vanilla Strife; however, we have to finish
-    // the intro sequence here so that netgame startup can begin.
-    // The original calls to D_IntroTick() are commented-out below.
-
-    // INTRO-FIXME: Great in theory but it makes the intro end too quickly.
-    // -haleyjd
-
-    D_IntroTick();
-    D_IntroTick();
-    D_IntroTick();
-    D_IntroTick();
-    D_IntroTick();
-    D_IntroTick();
-    D_IntroTick();
-
-    D_FinishIntroSequence();
-
     if(devparm) // [STRIFE]
         DEH_printf("D_CheckNetGame: Checking network game status.\n");
     D_CheckNetGame ();
@@ -1927,15 +1855,15 @@
     if(devparm)
         DEH_printf("HU_Init: Setting up heads up display.\n");
     HU_Init ();
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
     if(devparm)
         DEH_printf("ST_Init: Init status bar.\n");
     ST_Init ();
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
     // haleyjd [STRIFE] -statcopy used to be here...
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
     // If Doom II without a MAP01 lump, this is a store demo.  
     // Moved this here so that MAP01 isn't constantly looked up
@@ -1961,7 +1889,7 @@
         G_RecordDemo (myargv[p+1]);
         autostart = true;
     }
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
     p = M_CheckParmWithArgs("-playdemo", 1);
     if (p)
@@ -1970,7 +1898,7 @@
         G_DeferedPlayDemo (demolumpname);
         D_DoomLoop ();  // never returns
     }
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
     p = M_CheckParmWithArgs("-timedemo", 1);
     if (p)
@@ -1978,7 +1906,7 @@
         G_TimeDemo (demolumpname);
         D_DoomLoop ();  // never returns
     }
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
     if (startloadgame >= 0)
     {
@@ -1985,7 +1913,7 @@
         // [STRIFE]: different, for hubs
         M_LoadSelect(startloadgame);
     }
-    //D_IntroTick(); // [STRIFE]
+    D_IntroTick(); // [STRIFE]
 
 
     if (gameaction != ga_loadgame )
--- a/src/strife/d_net.c
+++ b/src/strife/d_net.c
@@ -220,17 +220,10 @@
     connect_data->is_freedoom = 0;
 }
 
-//
-// D_CheckNetGame
-// Works out player numbers among the net participants
-//
-void D_CheckNetGame (void)
+void D_ConnectNetGame(void)
 {
     net_connect_data_t connect_data;
-    net_gamesettings_t settings;
 
-    D_RegisterLoopCallbacks(&strife_loop_interface);
-
     InitConnectData(&connect_data);
     netgame = D_InitNetGame(&connect_data);
 
@@ -246,6 +239,17 @@
     {
         netgame = true;
     }
+}
+
+//
+// D_CheckNetGame
+// Works out player numbers among the net participants
+//
+void D_CheckNetGame(void)
+{
+    net_gamesettings_t settings;
+
+    D_RegisterLoopCallbacks(&strife_loop_interface);
 
     if (netgame)
     {