mirror of
https://github.com/ZDoom/raze-gles.git
synced 2025-01-28 18:00:40 +00:00
New OSD cmd: demo <demonum or demofile>, starting one instantly from the menu.
Also, correct some comments made in the demo source made earlier. Oops. git-svn-id: https://svn.eduke32.com/eduke32@3006 1a8010ca-5511-0410-912e-c29ae57300e0
This commit is contained in:
parent
8f8a3c6846
commit
8fba52a2bb
3 changed files with 62 additions and 12 deletions
|
@ -227,6 +227,12 @@ error_wopen_demo:
|
||||||
g_demo_cnt = 1;
|
g_demo_cnt = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t g_demo_playFirstFlag = 0;
|
||||||
|
void Demo_PlayFirst(void)
|
||||||
|
{
|
||||||
|
g_demo_playFirstFlag = 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static uint8_t g_demo_seedbuf[RECSYNCBUFSIZ];
|
static uint8_t g_demo_seedbuf[RECSYNCBUFSIZ];
|
||||||
|
|
||||||
|
@ -379,6 +385,8 @@ RECHECK:
|
||||||
|
|
||||||
if (foundemo == 0)
|
if (foundemo == 0)
|
||||||
{
|
{
|
||||||
|
ud.recstat = 0;
|
||||||
|
|
||||||
if (g_whichDemo > 1)
|
if (g_whichDemo > 1)
|
||||||
{
|
{
|
||||||
g_whichDemo = 1;
|
g_whichDemo = 1;
|
||||||
|
@ -397,6 +405,7 @@ RECHECK:
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
ud.recstat = 2;
|
ud.recstat = 2;
|
||||||
|
|
||||||
g_whichDemo++;
|
g_whichDemo++;
|
||||||
if (g_whichDemo == 1000)
|
if (g_whichDemo == 1000)
|
||||||
g_whichDemo = 1;
|
g_whichDemo = 1;
|
||||||
|
@ -433,17 +442,25 @@ RECHECK:
|
||||||
// so maybe a better name for this function would be
|
// so maybe a better name for this function would be
|
||||||
// G_MainLoopWhenNotInGame()?
|
// G_MainLoopWhenNotInGame()?
|
||||||
|
|
||||||
|
// Demo requested from the OSD, its name is in g_firstDemoFile[]
|
||||||
|
if (g_demo_playFirstFlag)
|
||||||
|
{
|
||||||
|
g_demo_playFirstFlag = 0;
|
||||||
|
g_whichDemo = 1; // force g_firstDemoFile[]
|
||||||
|
goto nextdemo_nomenu;
|
||||||
|
}
|
||||||
|
|
||||||
if (foundemo && (!g_demo_paused || g_demo_goalCnt))
|
if (foundemo && (!g_demo_paused || g_demo_goalCnt))
|
||||||
{
|
{
|
||||||
if (g_demo_goalCnt>0 && g_demo_goalCnt < g_demo_cnt)
|
if (g_demo_goalCnt>0 && g_demo_goalCnt < g_demo_cnt)
|
||||||
{
|
{
|
||||||
// initialize rewind or fast-forward
|
// initialize rewind
|
||||||
|
|
||||||
int32_t menu = g_player[myconnectindex].ps->gm&MODE_MENU;
|
int32_t menu = g_player[myconnectindex].ps->gm&MODE_MENU;
|
||||||
|
|
||||||
if (g_demo_goalCnt > lastsynctic)
|
if (g_demo_goalCnt > lastsynctic)
|
||||||
{
|
{
|
||||||
// fast-forward
|
// we can use a previous diff
|
||||||
if (Demo_UpdateState(0)==0)
|
if (Demo_UpdateState(0)==0)
|
||||||
{
|
{
|
||||||
g_demo_cnt = lastsynctic;
|
g_demo_cnt = lastsynctic;
|
||||||
|
@ -547,10 +564,11 @@ RECHECK:
|
||||||
corrupt:
|
corrupt:
|
||||||
OSD_Printf(OSD_ERROR "Demo %d is corrupt (code %d).\n", g_whichDemo-1, corruptcode);
|
OSD_Printf(OSD_ERROR "Demo %d is corrupt (code %d).\n", g_whichDemo-1, corruptcode);
|
||||||
nextdemo:
|
nextdemo:
|
||||||
|
g_player[myconnectindex].ps->gm |= MODE_MENU;
|
||||||
|
nextdemo_nomenu:
|
||||||
foundemo = 0;
|
foundemo = 0;
|
||||||
ud.reccnt = 0;
|
ud.reccnt = 0;
|
||||||
kclose(g_demo_recFilePtr); g_demo_recFilePtr = -1;
|
kclose(g_demo_recFilePtr); g_demo_recFilePtr = -1;
|
||||||
g_player[myconnectindex].ps->gm |= MODE_MENU;
|
|
||||||
|
|
||||||
if (g_demo_goalCnt>0)
|
if (g_demo_goalCnt>0)
|
||||||
{
|
{
|
||||||
|
@ -716,6 +734,7 @@ nextdemo:
|
||||||
if (g_player[myconnectindex].ps->gm&MODE_TYPE)
|
if (g_player[myconnectindex].ps->gm&MODE_TYPE)
|
||||||
{
|
{
|
||||||
Net_EnterMessage();
|
Net_EnterMessage();
|
||||||
|
|
||||||
if ((g_player[myconnectindex].ps->gm&MODE_TYPE) != MODE_TYPE)
|
if ((g_player[myconnectindex].ps->gm&MODE_TYPE) != MODE_TYPE)
|
||||||
g_player[myconnectindex].ps->gm = MODE_MENU;
|
g_player[myconnectindex].ps->gm = MODE_MENU;
|
||||||
}
|
}
|
||||||
|
@ -723,6 +742,7 @@ nextdemo:
|
||||||
{
|
{
|
||||||
if (ud.recstat != 2)
|
if (ud.recstat != 2)
|
||||||
M_DisplayMenus();
|
M_DisplayMenus();
|
||||||
|
|
||||||
if ((g_netServer || ud.multimode > 1) && g_currentMenu != 20003 && g_currentMenu != 20005 && g_currentMenu != 210)
|
if ((g_netServer || ud.multimode > 1) && g_currentMenu != 20003 && g_currentMenu != 20005 && g_currentMenu != 210)
|
||||||
{
|
{
|
||||||
ControlInfo noshareinfo;
|
ControlInfo noshareinfo;
|
||||||
|
@ -754,7 +774,7 @@ nextdemo:
|
||||||
|
|
||||||
G_HandleAsync();
|
G_HandleAsync();
|
||||||
|
|
||||||
if (!ud.recstat)
|
if (ud.recstat==0)
|
||||||
nextpage();
|
nextpage();
|
||||||
|
|
||||||
if (g_player[myconnectindex].ps->gm == MODE_GAME)
|
if (g_player[myconnectindex].ps->gm == MODE_GAME)
|
||||||
|
|
|
@ -48,6 +48,8 @@ void G_CloseDemoWrite(void);
|
||||||
void G_DemoRecord(void);
|
void G_DemoRecord(void);
|
||||||
void G_OpenDemoWrite(void);
|
void G_OpenDemoWrite(void);
|
||||||
|
|
||||||
|
void Demo_PlayFirst(void);
|
||||||
|
|
||||||
#if KRANDDEBUG
|
#if KRANDDEBUG
|
||||||
int32_t krd_print(const char *filename);
|
int32_t krd_print(const char *filename);
|
||||||
void krd_enable(int32_t which);
|
void krd_enable(int32_t which);
|
||||||
|
|
|
@ -31,6 +31,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
#include "osd.h"
|
#include "osd.h"
|
||||||
#include "osdfuncs.h"
|
#include "osdfuncs.h"
|
||||||
#include "gamedef.h"
|
#include "gamedef.h"
|
||||||
|
#include "demo.h" // g_firstDemoFile[]
|
||||||
#include "common.h"
|
#include "common.h"
|
||||||
|
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
@ -211,14 +212,6 @@ static int32_t osdcmd_map(const osdfuncparm_t *parm)
|
||||||
return OSDCMD_SHOWHELP;
|
return OSDCMD_SHOWHELP;
|
||||||
}
|
}
|
||||||
|
|
||||||
#if 0
|
|
||||||
if (numplayers > 1)
|
|
||||||
{
|
|
||||||
OSD_Printf("Command not allowed in multiplayer\n");
|
|
||||||
return OSDCMD_OK;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
maybe_append_ext(filename, sizeof(filename), parm->parms[0], ".map");
|
maybe_append_ext(filename, sizeof(filename), parm->parms[0], ".map");
|
||||||
|
|
||||||
if ((i = kopen4loadfrommod(filename,0)) < 0)
|
if ((i = kopen4loadfrommod(filename,0)) < 0)
|
||||||
|
@ -294,6 +287,39 @@ static int32_t osdcmd_map(const osdfuncparm_t *parm)
|
||||||
return OSDCMD_OK;
|
return OSDCMD_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int32_t osdcmd_demo(const osdfuncparm_t *parm)
|
||||||
|
{
|
||||||
|
if (numplayers > 1)
|
||||||
|
{
|
||||||
|
OSD_Printf("Command not allowed in multiplayer\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (g_player[myconnectindex].ps->gm & MODE_GAME)
|
||||||
|
{
|
||||||
|
OSD_Printf("demo: Must not be in a game.\n");
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (parm->numparms != 1)
|
||||||
|
return OSDCMD_SHOWHELP;
|
||||||
|
|
||||||
|
{
|
||||||
|
char *tailptr;
|
||||||
|
const char *demostr = parm->parms[0];
|
||||||
|
int32_t i = Bstrtol(demostr, &tailptr, 10);
|
||||||
|
|
||||||
|
if (tailptr!=demostr && i>=0 && i<=999) // demo number passed
|
||||||
|
Bsprintf(g_firstDemoFile, "edemo%03d.edm", i);
|
||||||
|
else // demo file name passed
|
||||||
|
maybe_append_ext(g_firstDemoFile, sizeof(g_firstDemoFile), parm->parms[0], ".edm");
|
||||||
|
|
||||||
|
Demo_PlayFirst();
|
||||||
|
}
|
||||||
|
|
||||||
|
return OSDCMD_OK;
|
||||||
|
}
|
||||||
|
|
||||||
static int32_t osdcmd_god(const osdfuncparm_t *parm)
|
static int32_t osdcmd_god(const osdfuncparm_t *parm)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(parm);
|
UNREFERENCED_PARAMETER(parm);
|
||||||
|
@ -308,6 +334,7 @@ static int32_t osdcmd_god(const osdfuncparm_t *parm)
|
||||||
static int32_t osdcmd_noclip(const osdfuncparm_t *parm)
|
static int32_t osdcmd_noclip(const osdfuncparm_t *parm)
|
||||||
{
|
{
|
||||||
UNREFERENCED_PARAMETER(parm);
|
UNREFERENCED_PARAMETER(parm);
|
||||||
|
|
||||||
if (numplayers == 1 && g_player[myconnectindex].ps->gm & MODE_GAME)
|
if (numplayers == 1 && g_player[myconnectindex].ps->gm & MODE_GAME)
|
||||||
{
|
{
|
||||||
osdcmd_cheatsinfo_stat.cheatnum = CHEAT_CLIP;
|
osdcmd_cheatsinfo_stat.cheatnum = CHEAT_CLIP;
|
||||||
|
@ -1474,6 +1501,7 @@ int32_t registerosdcommands(void)
|
||||||
{
|
{
|
||||||
OSD_RegisterFunction("changelevel","changelevel <volume> <level>: warps to the given level", osdcmd_changelevel);
|
OSD_RegisterFunction("changelevel","changelevel <volume> <level>: warps to the given level", osdcmd_changelevel);
|
||||||
OSD_RegisterFunction("map","map <mapfile>: loads the given user map", osdcmd_map);
|
OSD_RegisterFunction("map","map <mapfile>: loads the given user map", osdcmd_map);
|
||||||
|
OSD_RegisterFunction("demo","demo <demofile or demonum>: starts the given demo", osdcmd_demo);
|
||||||
}
|
}
|
||||||
|
|
||||||
OSD_RegisterFunction("addpath","addpath <path>: adds path to game filesystem", osdcmd_addpath);
|
OSD_RegisterFunction("addpath","addpath <path>: adds path to game filesystem", osdcmd_addpath);
|
||||||
|
|
Loading…
Reference in a new issue