mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Fix game crashing trying to load ghost brief
Replay code was not prepped for adding/removing RNG classes yet. Oops! G_CompatLevel was not put on the changes from the previous commit, as we are planning on breaking all the compat for the new TA changes anyways. Just preventing this being a problem in the future.
This commit is contained in:
parent
9c2144c340
commit
d99335d5a0
2 changed files with 95 additions and 17 deletions
|
|
@ -429,7 +429,18 @@ void G_ReadDemoExtraData(void)
|
||||||
switch (p)
|
switch (p)
|
||||||
{
|
{
|
||||||
case DW_RNG:
|
case DW_RNG:
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
{
|
||||||
|
UINT32 num_classes;
|
||||||
|
if (demo.version <= 0x000D)
|
||||||
|
{
|
||||||
|
num_classes = PROLDDEMO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_classes = READUINT32(demobuf.p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (signed)num_classes; i++)
|
||||||
{
|
{
|
||||||
rng = READUINT32(demobuf.p);
|
rng = READUINT32(demobuf.p);
|
||||||
|
|
||||||
|
|
@ -444,6 +455,7 @@ void G_ReadDemoExtraData(void)
|
||||||
}
|
}
|
||||||
demosynced = storesynced;
|
demosynced = storesynced;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
p = READUINT8(demobuf.p);
|
p = READUINT8(demobuf.p);
|
||||||
}
|
}
|
||||||
|
|
@ -560,6 +572,7 @@ void G_WriteDemoExtraData(void)
|
||||||
timeout = 16;
|
timeout = 16;
|
||||||
WRITEUINT8(demobuf.p, DW_RNG);
|
WRITEUINT8(demobuf.p, DW_RNG);
|
||||||
|
|
||||||
|
WRITEUINT32(demobuf.p, PRNUMSYNCED);
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
for (i = 0; i < PRNUMSYNCED; i++)
|
||||||
{
|
{
|
||||||
WRITEUINT32(demobuf.p, P_GetRandSeed(static_cast<pr_class_t>(i)));
|
WRITEUINT32(demobuf.p, P_GetRandSeed(static_cast<pr_class_t>(i)));
|
||||||
|
|
@ -1344,7 +1357,18 @@ readghosttic:
|
||||||
else if (ziptic == DW_RNG)
|
else if (ziptic == DW_RNG)
|
||||||
{
|
{
|
||||||
INT32 i;
|
INT32 i;
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
|
||||||
|
UINT32 num_classes = PROLDDEMO;
|
||||||
|
if (g->version <= 0x000D)
|
||||||
|
{
|
||||||
|
num_classes = PROLDDEMO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_classes = READUINT32(g->p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (signed)num_classes; i++)
|
||||||
{
|
{
|
||||||
g->p += 4; // RNG seed
|
g->p += 4; // RNG seed
|
||||||
}
|
}
|
||||||
|
|
@ -2262,6 +2286,7 @@ void G_BeginRecording(void)
|
||||||
demotime_p = NULL;
|
demotime_p = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WRITEUINT32(demobuf.p, PRNUMSYNCED);
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
for (i = 0; i < PRNUMSYNCED; i++)
|
||||||
{
|
{
|
||||||
WRITEUINT32(demobuf.p, P_GetInitSeed(static_cast<pr_class_t>(i)));
|
WRITEUINT32(demobuf.p, P_GetInitSeed(static_cast<pr_class_t>(i)));
|
||||||
|
|
@ -2764,7 +2789,17 @@ void G_LoadDemoInfo(menudemo_t *pdemo, boolean allownonmultiplayer)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
UINT32 num_classes;
|
||||||
|
if (pdemoversion <= 0x000D)
|
||||||
|
{
|
||||||
|
num_classes = PROLDDEMO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_classes = READUINT32(info.p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (signed)num_classes; i++)
|
||||||
{
|
{
|
||||||
info.p += 4; // RNG seed
|
info.p += 4; // RNG seed
|
||||||
}
|
}
|
||||||
|
|
@ -3249,10 +3284,31 @@ void G_DoPlayDemoEx(const char *defdemoname, lumpnum_t deflumpnum)
|
||||||
hu_demolap = READUINT32(demobuf.p);
|
hu_demolap = READUINT32(demobuf.p);
|
||||||
|
|
||||||
// Random seed
|
// Random seed
|
||||||
|
UINT32 num_classes;
|
||||||
|
if (demo.version <= 0x000D)
|
||||||
|
{
|
||||||
|
num_classes = PROLDDEMO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_classes = READUINT32(demobuf.p);
|
||||||
|
}
|
||||||
|
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
for (i = 0; i < PRNUMSYNCED; i++)
|
||||||
{
|
{
|
||||||
|
if (i < (signed)num_classes)
|
||||||
|
{
|
||||||
|
// Seed exists
|
||||||
randseed[i] = READUINT32(demobuf.p);
|
randseed[i] = READUINT32(demobuf.p);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// This is better than having undefined behavior,
|
||||||
|
// but RNG classes from the future should be
|
||||||
|
// behind a G_CompatLevel check.
|
||||||
|
randseed[i] = P_GetInitSeed(static_cast<pr_class_t>(i));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
demobuf.p += 4; // Extrainfo location
|
demobuf.p += 4; // Extrainfo location
|
||||||
|
|
||||||
|
|
@ -3646,7 +3702,17 @@ void G_AddGhost(savebuffer_t *buffer, const char *defdemoname)
|
||||||
if (flags & ATTACKING_LAP)
|
if (flags & ATTACKING_LAP)
|
||||||
p += 4;
|
p += 4;
|
||||||
|
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
UINT32 num_classes;
|
||||||
|
if (demo.version <= 0x000D)
|
||||||
|
{
|
||||||
|
num_classes = PROLDDEMO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_classes = READUINT32(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (signed)num_classes; i++)
|
||||||
{
|
{
|
||||||
p += 4; // random seed
|
p += 4; // random seed
|
||||||
}
|
}
|
||||||
|
|
@ -3876,7 +3942,17 @@ staffbrief_t *G_GetStaffGhostBrief(UINT8 *buffer)
|
||||||
if (flags & ATTACKING_LAP)
|
if (flags & ATTACKING_LAP)
|
||||||
temp.lap = READUINT32(p);
|
temp.lap = READUINT32(p);
|
||||||
|
|
||||||
for (i = 0; i < PRNUMSYNCED; i++)
|
UINT32 num_classes;
|
||||||
|
if (demo.version <= 0x000D)
|
||||||
|
{
|
||||||
|
num_classes = PROLDDEMO;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
num_classes = READUINT32(p);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < (signed)num_classes; i++)
|
||||||
{
|
{
|
||||||
p += 4; // random seed
|
p += 4; // random seed
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -87,7 +87,9 @@ typedef enum
|
||||||
|
|
||||||
PR_FROSTTHROWERS,
|
PR_FROSTTHROWERS,
|
||||||
|
|
||||||
PR_ITEM_SPAWNER, // Battle mode item spawners
|
PROLDDEMO, // The number of RNG classes in versions that didn't write down how many RNG classes they had in their replays.
|
||||||
|
|
||||||
|
PR_ITEM_SPAWNER = PROLDDEMO, // Battle mode item spawners
|
||||||
|
|
||||||
PRNUMSYNCED,
|
PRNUMSYNCED,
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue