File diff r6582:0b46f6cf62fa → r6583:63b4cb964287
src/newgrf.cpp
Show inline comments
 
@@ -39,6 +39,7 @@
 
#include "table/town_land.h"
 
#include "cargotype.h"
 
#include "industry.h"
 
#include "newgrf_canal.h"
 

	
 
/* TTDPatch extended GRF format codec
 
 * (c) Petr Baudis 2004 (GPL'd)
 
@@ -2244,6 +2245,7 @@ static void NewSpriteGroup(byte *buf, in
 
				case GSF_SHIP:
 
				case GSF_AIRCRAFT:
 
				case GSF_STATION:
 
				case GSF_CANAL:
 
				case GSF_CARGOS:
 
				{
 
					byte sprites     = _cur_grffile->spriteset_numents;
 
@@ -2513,6 +2515,30 @@ static void VehicleMapSpriteGroup(byte *
 
}
 

	
 

	
 
static void CanalMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
 
{
 
	byte *bp = &buf[4 + idcount + cidcount * 3];
 
	uint16 groupid = grf_load_word(&bp);
 

	
 
	if (groupid >= _cur_grffile->spritegroups_count || _cur_grffile->spritegroups[groupid] == NULL) {
 
		grfmsg(1, "CanalMapSpriteGroup: Spriteset 0x%04X out of range 0x%X or empty, skipping.",
 
		       groupid, _cur_grffile->spritegroups_count);
 
		return;
 
	}
 

	
 
	for (uint i = 0; i < idcount; i++) {
 
		CanalFeature cf = (CanalFeature)buf[3 + i];
 

	
 
		if (cf >= CF_END) {
 
			grfmsg(1, "CanalMapSpriteGroup: Canal subset %d out of range, skipping", cf);
 
			continue;
 
		}
 

	
 
		_canal_sg[cf] = _cur_grffile->spritegroups[groupid];
 
	}
 
}
 

	
 

	
 
static void StationMapSpriteGroup(byte *buf, uint8 idcount, uint8 cidcount)
 
{
 
	for (uint i = 0; i < idcount; i++) {
 
@@ -2661,6 +2687,10 @@ static void FeatureMapSpriteGroup(byte *
 
			VehicleMapSpriteGroup(buf, feature, idcount, cidcount, wagover);
 
			return;
 

	
 
		case GSF_CANAL:
 
			CanalMapSpriteGroup(buf, idcount, cidcount);
 
			return;
 

	
 
		case GSF_STATION:
 
			StationMapSpriteGroup(buf, idcount, cidcount);
 
			return;
 
@@ -4315,6 +4345,9 @@ static void ResetNewGRFData()
 
	ResetStationClasses();
 
	ResetCustomStations();
 

	
 
	/* Reset canal sprite groups */
 
	memset(_canal_sg, 0, sizeof(_canal_sg));
 

	
 
	/* Reset the snowline table. */
 
	ClearSnowLine();