mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-28 05:11:34 +00:00
Fix record attack not recording + staff names load for all replay types
This commit is contained in:
parent
ac3b1516cd
commit
45390f2c35
1 changed files with 53 additions and 20 deletions
73
src/g_game.c
73
src/g_game.c
|
@ -3890,7 +3890,7 @@ void G_AfterIntermission(void)
|
||||||
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
else if (demo.recording && demo.savemode != DSM_NOTSAVING)
|
else if (demo.recording && (modeattacking || demo.savemode != DSM_NOTSAVING))
|
||||||
G_SaveDemo();
|
G_SaveDemo();
|
||||||
|
|
||||||
if (modeattacking) // End the run.
|
if (modeattacking) // End the run.
|
||||||
|
@ -4037,7 +4037,7 @@ static void G_DoContinued(void)
|
||||||
// when something new is added.
|
// when something new is added.
|
||||||
void G_EndGame(void)
|
void G_EndGame(void)
|
||||||
{
|
{
|
||||||
if (demo.recording && demo.savemode != DSM_NOTSAVING)
|
if (demo.recording && (modeattacking || demo.savemode != DSM_NOTSAVING))
|
||||||
G_SaveDemo();
|
G_SaveDemo();
|
||||||
|
|
||||||
// Only do evaluation and credits in coop games.
|
// Only do evaluation and credits in coop games.
|
||||||
|
@ -7411,7 +7411,6 @@ void G_DoPlayDemo(char *defdemoname)
|
||||||
}
|
}
|
||||||
slots[numslots] = p; numslots++;
|
slots[numslots] = p; numslots++;
|
||||||
|
|
||||||
|
|
||||||
if (modeattacking && numslots > 1)
|
if (modeattacking && numslots > 1)
|
||||||
{
|
{
|
||||||
snprintf(msg, 1024, M_GetText("%s is a record attack replay with multiple players, and is thus invalid.\n"), pdemoname);
|
snprintf(msg, 1024, M_GetText("%s is a record attack replay with multiple players, and is thus invalid.\n"), pdemoname);
|
||||||
|
@ -7752,53 +7751,62 @@ void G_UpdateStaffGhostName(lumpnum_t l)
|
||||||
UINT16 ghostversion;
|
UINT16 ghostversion;
|
||||||
UINT8 flags;
|
UINT8 flags;
|
||||||
|
|
||||||
UINT8 totalfiles;
|
|
||||||
UINT8 md5sum[16];
|
|
||||||
|
|
||||||
buffer = p = W_CacheLumpNum(l, PU_CACHE);
|
buffer = p = W_CacheLumpNum(l, PU_CACHE);
|
||||||
|
|
||||||
// read demo header
|
// read demo header
|
||||||
if (memcmp(p, DEMOHEADER, 12))
|
if (memcmp(p, DEMOHEADER, 12))
|
||||||
{
|
{
|
||||||
goto fail;
|
goto fail;
|
||||||
} p += 12; // DEMOHEADER
|
}
|
||||||
|
|
||||||
|
p += 12; // DEMOHEADER
|
||||||
p++; // VERSION
|
p++; // VERSION
|
||||||
p++; // SUBVERSION
|
p++; // SUBVERSION
|
||||||
|
|
||||||
ghostversion = READUINT16(p);
|
ghostversion = READUINT16(p);
|
||||||
switch(ghostversion)
|
switch(ghostversion)
|
||||||
{
|
{
|
||||||
case DEMOVERSION: // latest always supported
|
case DEMOVERSION: // latest always supported
|
||||||
p += 64; // full demo title
|
p += 64; // full demo title
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef DEMO_COMPAT_100
|
#ifdef DEMO_COMPAT_100
|
||||||
case 0x0001:
|
case 0x0001:
|
||||||
CONS_Printf("You need to implement demo compat here, doofus! %s:%d\n", __FILE__, __LINE__);
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
// too old, cannot support.
|
// too old, cannot support.
|
||||||
default:
|
default:
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 16; // demo checksum
|
p += 16; // demo checksum
|
||||||
|
|
||||||
if (memcmp(p, "PLAY", 4))
|
if (memcmp(p, "PLAY", 4))
|
||||||
{
|
{
|
||||||
goto fail;
|
goto fail;
|
||||||
} p += 4; // "PLAY"
|
}
|
||||||
|
|
||||||
|
p += 4; // "PLAY"
|
||||||
p += 2; // gamemap
|
p += 2; // gamemap
|
||||||
p += 16; // mapmd5 (possibly check for consistency?)
|
p += 16; // mapmd5 (possibly check for consistency?)
|
||||||
|
|
||||||
flags = READUINT8(p);
|
flags = READUINT8(p);
|
||||||
if (flags & DF_FILELIST) // file list
|
|
||||||
{
|
|
||||||
totalfiles = READUINT8(p);
|
|
||||||
for (; totalfiles > 0; --totalfiles)
|
|
||||||
{
|
|
||||||
SKIPSTRING(p)
|
|
||||||
READMEM(p, md5sum, 16)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (!(flags & DF_GHOST))
|
if (!(flags & DF_GHOST))
|
||||||
{
|
{
|
||||||
goto fail; // we don't NEED to do it here, but whatever
|
goto fail; // we don't NEED to do it here, but whatever
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef DEMO_COMPAT_100
|
||||||
|
if (ghostversion != 0x0001)
|
||||||
|
#endif
|
||||||
|
p++; // Gametype
|
||||||
|
|
||||||
|
#ifdef DEMO_COMPAT_100
|
||||||
|
if (ghostversion != 0x0001)
|
||||||
|
#endif
|
||||||
|
G_SkipDemoExtraFiles(&p);
|
||||||
|
|
||||||
switch ((flags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
switch ((flags & DF_ATTACKMASK)>>DF_ATTACKSHIFT)
|
||||||
{
|
{
|
||||||
case ATTACKING_NONE: // 0
|
case ATTACKING_NONE: // 0
|
||||||
|
@ -7812,9 +7820,34 @@ void G_UpdateStaffGhostName(lumpnum_t l)
|
||||||
default: // 3
|
default: // 3
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
p += 4; // random seed
|
p += 4; // random seed
|
||||||
|
|
||||||
// Player name
|
|
||||||
|
#ifdef DEMO_COMPAT_100
|
||||||
|
if (ghostversion == 0x0001)
|
||||||
|
{
|
||||||
|
// Player name
|
||||||
|
M_Memcpy(dummystaffname, p,16);
|
||||||
|
dummystaffname[16] = '\0';
|
||||||
|
goto fail; // Not really a failure but whatever
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
p += 4; // Extrainfo location marker
|
||||||
|
|
||||||
|
// Ehhhh don't need ghostversion here (?) so I'll reuse the var here
|
||||||
|
ghostversion = READUINT16(p);
|
||||||
|
while (ghostversion--)
|
||||||
|
{
|
||||||
|
p += 2;
|
||||||
|
SKIPSTRING(p);
|
||||||
|
p++; // stealth
|
||||||
|
}
|
||||||
|
|
||||||
|
// Assert first player is in and then read name
|
||||||
|
if (READUINT8(p) != 0)
|
||||||
|
goto fail;
|
||||||
M_Memcpy(dummystaffname, p,16);
|
M_Memcpy(dummystaffname, p,16);
|
||||||
dummystaffname[16] = '\0';
|
dummystaffname[16] = '\0';
|
||||||
|
|
||||||
|
@ -8044,7 +8077,7 @@ boolean G_CheckDemoStatus(void)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (demo.recording && demo.savemode != DSM_NOTSAVING)
|
if (demo.recording && (modeattacking || demo.savemode != DSM_NOTSAVING))
|
||||||
{
|
{
|
||||||
G_SaveDemo();
|
G_SaveDemo();
|
||||||
return true;
|
return true;
|
||||||
|
|
Loading…
Reference in a new issue