92 lines
2.4 KiB
Diff
92 lines
2.4 KiB
Diff
|
diff --git a/src/doom/d_main.c b/src/doom/d_main.c
|
||
|
index 65a39a10..3f799b0f 100644
|
||
|
--- a/src/doom/d_main.c
|
||
|
+++ b/src/doom/d_main.c
|
||
|
@@ -483,6 +483,8 @@ void D_DoomLoop (void)
|
||
|
// DEMO LOOP
|
||
|
//
|
||
|
int demosequence;
|
||
|
+int demoloopi;
|
||
|
+char demoloopname[9];
|
||
|
int pagetic;
|
||
|
char *pagename;
|
||
|
|
||
|
@@ -524,6 +526,8 @@ void D_AdvanceDemo (void)
|
||
|
//
|
||
|
void D_DoAdvanceDemo (void)
|
||
|
{
|
||
|
+ int havedemo4;
|
||
|
+
|
||
|
players[consoleplayer].playerstate = PST_LIVE; // not reborn
|
||
|
advancedemo = false;
|
||
|
usergame = false; // no save / end game here
|
||
|
@@ -539,10 +543,14 @@ void D_DoAdvanceDemo (void)
|
||
|
// However! There is an alternate version of Final Doom that
|
||
|
// includes a fixed executable.
|
||
|
|
||
|
- if (gameversion == exe_ultimate || gameversion == exe_final)
|
||
|
+ havedemo4 = gameversion == exe_ultimate || gameversion == exe_final;
|
||
|
+ if (havedemo4)
|
||
|
demosequence = (demosequence+1)%7;
|
||
|
else
|
||
|
demosequence = (demosequence+1)%6;
|
||
|
+
|
||
|
+ if (demoloopi < 0 || demoloopi > (havedemo4 ? 3 : 2))
|
||
|
+ I_Error("Invalid demo loop start %d", demoloopi);
|
||
|
|
||
|
switch (demosequence)
|
||
|
{
|
||
|
@@ -558,17 +566,11 @@ void D_DoAdvanceDemo (void)
|
||
|
else
|
||
|
S_StartMusic (mus_intro);
|
||
|
break;
|
||
|
- case 1:
|
||
|
- G_DeferedPlayDemo(DEH_String("demo1"));
|
||
|
- break;
|
||
|
case 2:
|
||
|
pagetic = 200;
|
||
|
gamestate = GS_DEMOSCREEN;
|
||
|
pagename = DEH_String("CREDIT");
|
||
|
break;
|
||
|
- case 3:
|
||
|
- G_DeferedPlayDemo(DEH_String("demo2"));
|
||
|
- break;
|
||
|
case 4:
|
||
|
gamestate = GS_DEMOSCREEN;
|
||
|
if ( gamemode == commercial)
|
||
|
@@ -587,12 +589,14 @@ void D_DoAdvanceDemo (void)
|
||
|
pagename = DEH_String("HELP2");
|
||
|
}
|
||
|
break;
|
||
|
+ case 1:
|
||
|
+ case 3:
|
||
|
case 5:
|
||
|
- G_DeferedPlayDemo(DEH_String("demo3"));
|
||
|
- break;
|
||
|
// THE DEFINITIVE DOOM Special Edition demo
|
||
|
case 6:
|
||
|
- G_DeferedPlayDemo(DEH_String("demo4"));
|
||
|
+ DEH_snprintf(demoloopname, 9, "demo%d", demoloopi + 1);
|
||
|
+ G_DeferedPlayDemo(demoloopname);
|
||
|
+ demoloopi = (demoloopi+1) % (havedemo4 ? 4 : 3);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
@@ -1891,7 +1895,15 @@ void D_DoomMain (void)
|
||
|
G_TimeDemo (demolumpname);
|
||
|
D_DoomLoop (); // never returns
|
||
|
}
|
||
|
-
|
||
|
+
|
||
|
+ p = M_CheckParmWithArgs("-demoloopi", 1);
|
||
|
+ if (p)
|
||
|
+ {
|
||
|
+ demoloopi = atoi(myargv[p+1]);
|
||
|
+ } else {
|
||
|
+ demoloopi = 0;
|
||
|
+ }
|
||
|
+
|
||
|
if (startloadgame >= 0)
|
||
|
{
|
||
|
M_StringCopy(file, P_SaveGameFile(startloadgame), sizeof(file));
|