Feature: Allow separate liveries for steam, diesel and sailing ships. diff -r d1916f0729c0 src/company_gui.cpp --- a/src/company_gui.cpp Tue Sep 14 20:04:50 2010 +0200 +++ b/src/company_gui.cpp Tue Sep 14 20:09:24 2010 +0200 @@ -521,7 +521,7 @@ LC_OTHER, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_RAIL, LC_ROAD, LC_ROAD, - LC_SHIP, LC_SHIP, + LC_SHIP, LC_SHIP, LC_SHIP, LC_SHIP, LC_SHIP, LC_SHIP, LC_AIRCRAFT, LC_AIRCRAFT, LC_AIRCRAFT, LC_ROAD, LC_ROAD, }; @@ -622,7 +622,7 @@ 1, 13, 4, - 2, + 6, 3, }; diff -r d1916f0729c0 src/lang/english.txt --- a/src/lang/english.txt Tue Sep 14 20:04:50 2010 +0200 +++ b/src/lang/english.txt Tue Sep 14 20:09:24 2010 +0200 @@ -1456,8 +1456,12 @@ STR_LIVERY_FREIGHT_WAGON :Freight Wagon STR_LIVERY_BUS :Bus STR_LIVERY_TRUCK :Lorry -STR_LIVERY_PASSENGER_SHIP :Passenger Ferry -STR_LIVERY_FREIGHT_SHIP :Freight Ship +STR_LIVERY_PASSENGER_SHIP_STEAM :Passenger Ferry (Steam) +STR_LIVERY_PASSENGER_SHIP_DIESEL :Passenger Ferry (Diesel) +STR_LIVERY_PASSENGER_SHIP_SAIL :Passenger Ferry (Sail) +STR_LIVERY_FREIGHT_SHIP_STEAM :Freight Ship (Steam) +STR_LIVERY_FREIGHT_SHIP_DIESEL :Freight Ship (Diesel) +STR_LIVERY_FREIGHT_SHIP_SAIL :Freight Ship (Sail) STR_LIVERY_HELICOPTER :Helicopter STR_LIVERY_SMALL_PLANE :Small Aeroplane STR_LIVERY_LARGE_PLANE :Large Aeroplane diff -r d1916f0729c0 src/livery.h --- a/src/livery.h Tue Sep 14 20:04:50 2010 +0200 +++ b/src/livery.h Tue Sep 14 20:09:24 2010 +0200 @@ -43,8 +43,12 @@ LS_TRUCK, /* Ships */ - LS_PASSENGER_SHIP, - LS_FREIGHT_SHIP, + LS_PASSENGER_SHIP_STEAM, + LS_PASSENGER_SHIP_DIESEL, + LS_PASSENGER_SHIP_SAIL, + LS_FREIGHT_SHIP_STEAM, + LS_FREIGHT_SHIP_DIESEL, + LS_FREIGHT_SHIP_SAIL, /* Aircraft */ LS_HELICOPTER, diff -r d1916f0729c0 src/saveload/company_sl.cpp --- a/src/saveload/company_sl.cpp Tue Sep 14 20:04:50 2010 +0200 +++ b/src/saveload/company_sl.cpp Tue Sep 14 20:09:24 2010 +0200 @@ -285,20 +285,33 @@ } /* Write each livery entry. */ - int num_liveries = CheckSavegameVersion(63) ? LS_END - 4 : (CheckSavegameVersion(85) ? LS_END - 2: LS_END); + int num_liveries = LS_END; + if (CheckSavegameVersion(63)) num_liveries -= 2; // trams + if (CheckSavegameVersion(85)) num_liveries -= 2; // monorail / maglev pax wagons + if (CheckSavegameVersion(149)) num_liveries -= 4; // separate ship liveries + if (c != NULL) { for (i = 0; i < num_liveries; i++) { SlObject(&c->livery[i], _company_livery_desc); } - if (num_liveries < LS_END) { + if (num_liveries <= (LS_END - 6)) { //pre version 85 /* We want to insert some liveries somewhere in between. This means some have to be moved. */ memmove(&c->livery[LS_FREIGHT_WAGON], &c->livery[LS_PASSENGER_WAGON_MONORAIL], (LS_END - LS_FREIGHT_WAGON) * sizeof(c->livery[0])); c->livery[LS_PASSENGER_WAGON_MONORAIL] = c->livery[LS_MONORAIL]; c->livery[LS_PASSENGER_WAGON_MAGLEV] = c->livery[LS_MAGLEV]; } + if (num_liveries < LS_END) { //pre version 149 + /* Amount of ship liveries increases from 2 to 6. This requires some moving */ + memmove(&c->livery[LS_HELICOPTER], &c->livery[LS_PASSENGER_SHIP_SAIL], (LS_END - LS_HELICOPTER) * sizeof(c->livery[0])); + /* Copy old passenger/freight liveries to the new slots */ + for (LiveryScheme ls = LS_FREIGHT_SHIP_STEAM; ls <= LS_FREIGHT_SHIP_SAIL; ls++) { + c->livery[ls] = c->livery[LS_PASSENGER_SHIP_DIESEL]; //freight livery is now in pax-diesel slot + } + c->livery[LS_PASSENGER_SHIP_DIESEL] = c->livery[LS_PASSENGER_SHIP_SAIL] = c->livery[LS_PASSENGER_SHIP_STEAM]; + } - if (num_liveries == LS_END - 4) { + if (num_liveries == LS_END - 8) { //pre version 63 /* Copy bus/truck liveries over to trams */ c->livery[LS_PASSENGER_TRAM] = c->livery[LS_BUS]; c->livery[LS_FREIGHT_TRAM] = c->livery[LS_TRUCK]; diff -r d1916f0729c0 src/saveload/saveload.cpp --- a/src/saveload/saveload.cpp Tue Sep 14 20:04:50 2010 +0200 +++ b/src/saveload/saveload.cpp Tue Sep 14 20:09:24 2010 +0200 @@ -211,8 +211,9 @@ * 146 20446 * 147 20621 * 148 20659 + * 149 patch_rev */ -extern const uint16 SAVEGAME_VERSION = 148; ///< current savegame version of OpenTTD +extern const uint16 SAVEGAME_VERSION = 149; ///< current savegame version of OpenTTD SavegameType _savegame_type; ///< type of savegame we are loading diff -r d1916f0729c0 src/vehicle.cpp --- a/src/vehicle.cpp Tue Sep 14 20:04:50 2010 +0200 +++ b/src/vehicle.cpp Tue Sep 14 20:09:24 2010 +0200 @@ -1542,7 +1542,18 @@ case VEH_SHIP: { if (cargo_type == CT_INVALID) cargo_type = e->GetDefaultCargoType(); if (cargo_type == CT_INVALID) cargo_type = CT_GOODS; // The vehicle does not carry anything, let's pick some freight cargo - scheme = IsCargoInClass(cargo_type, CC_PASSENGERS) ? LS_PASSENGER_SHIP : LS_FREIGHT_SHIP; + switch (e->u.ship.shipclass) { + case SCL_STEAM: + scheme = IsCargoInClass(cargo_type, CC_PASSENGERS) ? LS_PASSENGER_SHIP_STEAM : LS_FREIGHT_SHIP_STEAM; + break; + case SCL_DIESEL: + scheme = IsCargoInClass(cargo_type, CC_PASSENGERS) ? LS_PASSENGER_SHIP_DIESEL : LS_FREIGHT_SHIP_DIESEL; + break; + case SCL_SAIL: + scheme = IsCargoInClass(cargo_type, CC_PASSENGERS) ? LS_PASSENGER_SHIP_SAIL : LS_FREIGHT_SHIP_SAIL; + break; + default: NOT_REACHED(); + } break; }