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"))
 | 
			
		||||
			{
 | 
			
		||||
				cup->levellist[CUPCACHE_BONUS] = Z_StrDup(word2);
 | 
			
		||||
				cup->cachedlevels[CUPCACHE_BONUS] = NEXTMAP_INVALID;
 | 
			
		||||
			}
 | 
			
		||||
			else if (fastcmp(word, "SPECIALSTAGE"))
 | 
			
		||||
			{
 | 
			
		||||
				cup->levellist[CUPCACHE_SPECIAL] = Z_StrDup(word2);
 | 
			
		||||
				cup->cachedlevels[CUPCACHE_SPECIAL] = NEXTMAP_INVALID;
 | 
			
		||||
			}
 | 
			
		||||
			else if (fastcmp(word, "EMERALDNUM"))
 | 
			
		||||
			{
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4499,6 +4499,39 @@ UINT8 P_InitMapData(INT32 numexistingmapheaders)
 | 
			
		|||
			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?
 | 
			
		||||
		if (mapheaderinfo[i]->lumpnum == maplump)
 | 
			
		||||
			continue;
 | 
			
		||||
| 
						 | 
				
			
			@ -4547,37 +4580,6 @@ UINT8 P_InitMapData(INT32 numexistingmapheaders)
 | 
			
		|||
			}
 | 
			
		||||
 | 
			
		||||
			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