From 808e450ed34f3f082efd7b5bd31e331f151fe683 Mon Sep 17 00:00:00 2001 From: Lephenixnoir Date: Mon, 13 Sep 2021 20:17:57 +0200 Subject: [PATCH] Enable demos (but they don't match the version) --- cgdoom/d_main.c | 9 +++++--- cgdoom/doomdef.h | 2 +- cgdoom/doomstat.h | 6 +++--- cgdoom/g_game.c | 52 ++++++++++++++++++++++++++++++++++++++++++----- cgdoom/st_stuff.c | 4 ++-- 5 files changed, 59 insertions(+), 14 deletions(-) diff --git a/cgdoom/d_main.c b/cgdoom/d_main.c index 5616c8a..6d84c6a 100644 --- a/cgdoom/d_main.c +++ b/cgdoom/d_main.c @@ -343,9 +343,9 @@ void D_DoAdvanceDemo (void) gameaction = ga_nothing; if ( gamemode == retail ) - demosequence = (demosequence+1)%3; + demosequence = (demosequence+1)%4; else - demosequence = (demosequence+1)%2; + demosequence = (demosequence+1)%3; switch (demosequence) { @@ -358,11 +358,14 @@ void D_DoAdvanceDemo (void) pagename = "TITLEPIC"; break; case 1: + G_DeferedPlayDemo ("demo1"); + break; + case 2: pagetic = 200; gamestate = GS_DEMOSCREEN; pagename = "CREDIT"; break; - case 2: + case 3: gamestate = GS_DEMOSCREEN; if ( gamemode == commercial) { diff --git a/cgdoom/doomdef.h b/cgdoom/doomdef.h index 1967f0f..adb37f6 100644 --- a/cgdoom/doomdef.h +++ b/cgdoom/doomdef.h @@ -31,7 +31,7 @@ // Global parameters/defines. // // DOOM version -#define VERSION 110; +#define VERSION 110 // Game mode handling - identify IWAD version diff --git a/cgdoom/doomstat.h b/cgdoom/doomstat.h index f2a520e..eaf214f 100644 --- a/cgdoom/doomstat.h +++ b/cgdoom/doomstat.h @@ -81,7 +81,7 @@ extern int gamemap; extern boolean respawnmonsters; // Netgame? Only true if >1 player. -extern const boolean netgame; +extern boolean netgame; // Flag: true only if started as net deathmatch. // An enum might handle altdeath/cooperative better. @@ -147,7 +147,7 @@ extern int scaledviewwidth; extern int viewangleoffset; // Player taking events, and displaying. -extern const int consoleplayer; +extern int consoleplayer; extern int displayplayer; @@ -234,7 +234,7 @@ extern const int maxammo[NUMAMMO]; //extern FILE* debugfile; // if true, load all graphics at level load -extern const boolean precache; +extern boolean precache; // wipegamestate can be set to -1 diff --git a/cgdoom/g_game.c b/cgdoom/g_game.c index dd4fff9..ed3b253 100644 --- a/cgdoom/g_game.c +++ b/cgdoom/g_game.c @@ -82,6 +82,7 @@ void G_DoReborn (void); void G_DoLoadLevel (void); void G_DoNewGame (void); void G_DoLoadGame (void); +void G_DoPlayDemo (void); void G_DoCompleted (void); void G_DoVictory (void); void G_DoWorldDone (void); @@ -108,24 +109,25 @@ int starttime; // for comparative timing purposes boolean viewactive; boolean deathmatch; // only if started as net death -const boolean netgame = 0; // only true if packets are broadcast +boolean netgame = 0; // only true if packets are broadcast boolean playeringame[MAXPLAYERS]; player_t players[MAXPLAYERS]; -const int consoleplayer = 0; // player taking events and displaying +int consoleplayer = 0; // player taking events and displaying int displayplayer; // view being displayed int gametic; int levelstarttic; // gametic at level start int totalkills, totalitems, totalsecret; // for intermission //char demoname[32]; -const boolean netdemo = 0; +boolean demoplayback; +boolean netdemo = 0; byte* demobuffer; byte* demo_p; byte* demoend; boolean singledemo; // quit after playing a demo from cmdline -const boolean precache = false; // if true, load all graphics at start +boolean precache = false; // if true, load all graphics at start wbstartstruct_t wminfo; // parms for world map / intermission @@ -459,7 +461,7 @@ void G_Ticker (void) G_DoSaveGame (); break; case ga_playdemo: - /* CGDoom: Main menu demo is disabled (code removed) */ + G_DoPlayDemo (); break; case ga_completed: G_DoCompleted (); @@ -1127,6 +1129,46 @@ void G_DeferedPlayDemo (char* name) gameaction = ga_playdemo; } +void G_DoPlayDemo (void) +{ + skill_t skill; + int i, episode, map; + + gameaction = ga_nothing; + demobuffer = demo_p = (byte *)W_CacheLumpNameConst (defdemoname, PU_STATIC); + if ( *demo_p++ != VERSION) + { + // fprintf( stderr, "Demo is from a different game version!\n"); + gameaction = ga_nothing; + return; + } + + skill = *demo_p++; + episode = *demo_p++; + map = *demo_p++; + deathmatch = *demo_p++; + respawnparm = *demo_p++; + fastparm = *demo_p++; + nomonsters = *demo_p++; + consoleplayer = *demo_p++; + + for (i=0 ; ipowers[pw_strength]>>6); - if (bzc > cnt) - cnt = bzc; + if (bzc > cnt) + cnt = bzc; } if (cnt)