File diff r2624:1fa34b183518 → r2625:27ad3b929a5b
newgrf.c
Show inline comments
 
@@ -800,22 +800,7 @@ static bool StationChangeInfo(uint stid,
 
				classid |= *(buf++) << 8;
 
				classid |= *(buf++);
 

	
 
				switch (classid) {
 
					case 'DFLT':
 
						stat->sclass = STAT_CLASS_DFLT;
 
						break;
 
					case 'WAYP':
 
						stat->sclass = STAT_CLASS_WAYP;
 
						break;
 
					default:
 
						/* TODO: No support for custom
 
						 * classes for now, so stuff
 
						 * everything to the single
 
						 * default one. --pasky */
 
						stat->sclass = STAT_CLASS_DFLT;
 
						//stat->sclass = STAT_CLASS_CUSTOM;
 
						break;
 
				}
 
				stat->sclass = AllocateStationClass(classid);
 
			}
 
			break;
 
		}
 
@@ -825,24 +810,28 @@ static bool StationChangeInfo(uint stid,
 
				StationSpec *stat = &_cur_grffile->stations[stid + i];
 
				int t;
 

	
 
				stat->tiles = grf_load_byte(&buf);
 
				stat->tiles = grf_load_extended(&buf);
 
				stat->renderdata = calloc(stat->tiles, sizeof(*stat->renderdata));
 
				for (t = 0; t < stat->tiles; t++) {
 
					DrawTileSprites *dts = &stat->renderdata[t];
 
					int seq_count = 0;
 

	
 
					if (t >= 8) {
 
						grfmsg(GMS_WARN, "StationChangeInfo: Sprite %d>=8, skipping.", t);
 
						grf_load_dword(&buf); // at least something
 
						continue;
 
					}
 

	
 
					dts->ground_sprite = grf_load_dword(&buf);
 
					if (!dts->ground_sprite) {
 
					PalSpriteID ground_sprite;
 

	
 
					ground_sprite = grf_load_dword(&buf);
 
					if (ground_sprite == 0) {
 
						static const DrawTileSeqStruct empty = {0x80, 0, 0, 0, 0, 0, 0};
 
						dts->seq = &empty;
 
						continue;
 
					}
 

	
 
					if (HASBIT(ground_sprite, 31)) {
 
						// Bit 31 indicates that we should use a custom sprite.
 
						dts->ground_sprite = GB(ground_sprite, 0, 15) - 0x42D;
 
						dts->ground_sprite += _cur_grffile->first_spriteset;
 
					} else {
 
						dts->ground_sprite = ground_sprite;
 
					}
 

	
 
					dts->seq = NULL;
 
					while (buf < *bufp + len) {
 
						DrawTileSeqStruct *dtss;
 
@@ -873,6 +862,7 @@ static bool StationChangeInfo(uint stid,
 
				int t;
 

	
 
				stat->tiles = srcstat->tiles;
 
				stat->renderdata = calloc(stat->tiles, sizeof(*stat->renderdata));
 
				for (t = 0; t < stat->tiles; t++) {
 
					DrawTileSprites *dts = &stat->renderdata[t];
 
					const DrawTileSprites *sdts = &srcstat->renderdata[t];
 
@@ -1548,6 +1538,9 @@ static void NewSpriteGroup(byte *buf, in
 
	loaded_ptr = buf;
 
	loading_ptr = buf + 2 * numloaded;
 

	
 
	if (_cur_grffile->first_spriteset == 0)
 
		_cur_grffile->first_spriteset = _cur_grffile->spriteset_start;
 

	
 
	if (numloaded > 16) {
 
		grfmsg(GMS_WARN, "NewSpriteGroup: More than 16 sprites in group %x, skipping the rest.", setid);
 
		numloaded = 16;
 
@@ -1688,8 +1681,8 @@ static void NewVehicle_SpriteGroupMappin
 
				stat->spritegroup[0] = _cur_grffile->spritegroups[groupid];
 
				stat->spritegroup[0]->ref_count++;
 
				stat->grfid = _cur_grffile->grfid;
 
				SetCustomStation(stid, stat);
 
				stat->sclass = STAT_CLASS_NONE;
 
				stat->localidx = stid;
 
				SetCustomStation(stat);
 
			}
 
		}
 
		return;
 
@@ -2396,6 +2389,28 @@ static void ReleaseSpriteGroups(GRFFile 
 
	file->spritegroups_count = 0;
 
}
 

	
 
static void ResetCustomStations(void)
 
{
 
	GRFFile *file;
 
	int i;
 
	CargoID c;
 

	
 
	for (file = _first_grffile; file != NULL; file = file->next) {
 
		for (i = 0; i < 256; i++) {
 
			if (file->stations[i].grfid != file->grfid)
 
				continue;
 

	
 
			// TODO: Release renderdata, platforms and layouts
 

	
 
			// Release this stations sprite groups.
 
			for (c = 0; c < NUM_GLOBAL_CID; c++) {
 
				if (file->stations[i].spritegroup[c] != NULL)
 
					UnloadSpriteGroup(&file->stations[i].spritegroup[c]);
 
			}
 
		}
 
	}
 
}
 

	
 
/**
 
 * Reset all NewGRF loaded data
 
 * TODO
 
@@ -2433,6 +2448,10 @@ static void ResetNewGRFData(void)
 

	
 
	// Reset price base data
 
	ResetPriceBaseMultipliers();
 

	
 
	// Reset station classes
 
	ResetStationClasses();
 
	ResetCustomStations();
 
}
 

	
 
static void InitNewGRFFile(const char* filename, int sprite_offset)