@@ -5147,48 +5147,53 @@ static void NewSpriteGroup(ByteReader *b
switch (feature) {
case GSF_TRAINS:
case GSF_ROADVEHICLES:
case GSF_SHIPS:
case GSF_AIRCRAFT:
case GSF_STATIONS:
case GSF_CANALS:
case GSF_CARGOES:
case GSF_AIRPORTS:
case GSF_RAILTYPES:
case GSF_ROADTYPES:
case GSF_TRAMTYPES:
{
byte num_loaded = type;
byte num_loading = buf->ReadByte();
if (!_cur.HasValidSpriteSets(feature)) {
grfmsg(0, "NewSpriteGroup: No sprite set to work on! Skipping");
return;
}
grfmsg(6, "NewSpriteGroup: New SpriteGroup 0x%02X, %u loaded, %u loading",
setid, num_loaded, num_loading);
if (num_loaded + num_loading == 0) {
grfmsg(1, "NewSpriteGroup: no result, skipping invalid RealSpriteGroup");
break;
if (num_loaded + num_loading == 1) {
/* Avoid creating 'Real' sprite group if only one option. */
uint16 spriteid = buf->ReadWord();
act_group = CreateGroupFromGroupID(feature, setid, type, spriteid);
grfmsg(8, "NewSpriteGroup: one result, skipping RealSpriteGroup = subset %u", spriteid);
std::vector<uint16> loaded;
std::vector<uint16> loading;
for (uint i = 0; i < num_loaded; i++) {
loaded.push_back(buf->ReadWord());
grfmsg(8, "NewSpriteGroup: + rg->loaded[%i] = subset %u", i, loaded[i]);
for (uint i = 0; i < num_loading; i++) {
loading.push_back(buf->ReadWord());
grfmsg(8, "NewSpriteGroup: + rg->loading[%i] = subset %u", i, loading[i]);
if (std::adjacent_find(loaded.begin(), loaded.end(), std::not_equal_to<>()) == loaded.end() &&
std::adjacent_find(loading.begin(), loading.end(), std::not_equal_to<>()) == loading.end() &&
loaded[0] == loading[0])
Status change: