mirror of
https://github.com/KartKrewDev/RingRacers.git
synced 2025-10-30 08:01:28 +00:00
Fix replacing cups' map lists not properly reassigning the cachedlevels
This commit is contained in:
parent
cf6ffcf15d
commit
f926842b30
2 changed files with 35 additions and 31 deletions
|
|
@ -3070,10 +3070,12 @@ void readcupheader(MYFILE *f, cupheader_t *cup)
|
||||||
else if (fastcmp(word, "BONUSGAME"))
|
else if (fastcmp(word, "BONUSGAME"))
|
||||||
{
|
{
|
||||||
cup->levellist[CUPCACHE_BONUS] = Z_StrDup(word2);
|
cup->levellist[CUPCACHE_BONUS] = Z_StrDup(word2);
|
||||||
|
cup->cachedlevels[CUPCACHE_BONUS] = NEXTMAP_INVALID;
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "SPECIALSTAGE"))
|
else if (fastcmp(word, "SPECIALSTAGE"))
|
||||||
{
|
{
|
||||||
cup->levellist[CUPCACHE_SPECIAL] = Z_StrDup(word2);
|
cup->levellist[CUPCACHE_SPECIAL] = Z_StrDup(word2);
|
||||||
|
cup->cachedlevels[CUPCACHE_SPECIAL] = NEXTMAP_INVALID;
|
||||||
}
|
}
|
||||||
else if (fastcmp(word, "EMERALDNUM"))
|
else if (fastcmp(word, "EMERALDNUM"))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -4499,6 +4499,39 @@ UINT8 P_InitMapData(INT32 numexistingmapheaders)
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Always check for cup cache reassociations.
|
||||||
|
// (The core assumption is that cups < headers.)
|
||||||
|
{
|
||||||
|
cupheader_t *cup = kartcupheaders;
|
||||||
|
INT32 j;
|
||||||
|
|
||||||
|
mapheaderinfo[i]->cup = NULL;
|
||||||
|
|
||||||
|
while (cup)
|
||||||
|
{
|
||||||
|
for (j = 0; j < CUPCACHE_MAX; j++)
|
||||||
|
{
|
||||||
|
// Already discovered?
|
||||||
|
if (cup->cachedlevels[j] != NEXTMAP_INVALID)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
if (!cup->levellist[j] || strcasecmp(cup->levellist[j], name) != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
// Only panic about back-reference for non-bonus material.
|
||||||
|
if (j < MAXLEVELLIST)
|
||||||
|
{
|
||||||
|
if (mapheaderinfo[i]->cup)
|
||||||
|
I_Error("P_InitMapData: Map %s cannot appear in cups multiple times! (First in %s, now in %s)", name, mapheaderinfo[i]->cup->name, cup->name);
|
||||||
|
mapheaderinfo[i]->cup = cup;
|
||||||
|
}
|
||||||
|
|
||||||
|
cup->cachedlevels[j] = i;
|
||||||
|
}
|
||||||
|
cup = cup->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// No change?
|
// No change?
|
||||||
if (mapheaderinfo[i]->lumpnum == maplump)
|
if (mapheaderinfo[i]->lumpnum == maplump)
|
||||||
continue;
|
continue;
|
||||||
|
|
@ -4547,37 +4580,6 @@ UINT8 P_InitMapData(INT32 numexistingmapheaders)
|
||||||
}
|
}
|
||||||
|
|
||||||
vres_Free(virtmap);
|
vres_Free(virtmap);
|
||||||
|
|
||||||
// Now associate it with a cup cache.
|
|
||||||
// (The core assumption is that cups < headers.)
|
|
||||||
if (i >= numexistingmapheaders)
|
|
||||||
{
|
|
||||||
cupheader_t *cup = kartcupheaders;
|
|
||||||
INT32 j;
|
|
||||||
while (cup)
|
|
||||||
{
|
|
||||||
for (j = 0; j < CUPCACHE_MAX; j++)
|
|
||||||
{
|
|
||||||
// Already discovered?
|
|
||||||
if (cup->cachedlevels[j] != NEXTMAP_INVALID)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
if (!cup->levellist[j] || strcasecmp(cup->levellist[j], name) != 0)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
// Only panic about back-reference for non-bonus material.
|
|
||||||
if (j < MAXLEVELLIST || j == CUPCACHE_SPECIAL)
|
|
||||||
{
|
|
||||||
if (mapheaderinfo[i]->cup)
|
|
||||||
I_Error("P_InitMapData: Map %s cannot appear in cups multiple times! (First in %s, now in %s)", name, mapheaderinfo[i]->cup->name, cup->name);
|
|
||||||
mapheaderinfo[i]->cup = cup;
|
|
||||||
}
|
|
||||||
|
|
||||||
cup->cachedlevels[j] = i;
|
|
||||||
}
|
|
||||||
cup = cup->next;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue