File diff r17274:cb8beb8dd070 → r17275:7317122af570
src/saveload/afterload.cpp
Show inline comments
 
@@ -782,11 +782,18 @@ bool AfterLoadGame()
 
					case STATION_TRUCK:
 
					case STATION_BUS:
 
						if (IsSavegameVersionBefore(6)) {
 
							/* Before version 5 you could not have more than 250 stations.
 
							 * Version 6 adds large maps, so you could only place 253*253
 
							 * road stops on a map (no freeform edges) = 64009. So, yes
 
							 * someone could in theory create such a full map to trigger
 
							 * this assertion, it's safe to assume that's only something
 
							 * theoretical and does not happen in normal games. */
 
							assert(RoadStop::CanAllocateItem());
 

	
 
							/* From this version on there can be multiple road stops of the
 
							 * same type per station. Convert the existing stops to the new
 
							 * internal data structure. */
 
							RoadStop *rs = new RoadStop(t);
 
							if (rs == NULL) error("Too many road stops in savegame");
 

	
 
							RoadStop **head =
 
								IsTruckStop(t) ? &st->truck_stops : &st->bus_stops;
 
@@ -1928,6 +1935,12 @@ bool AfterLoadGame()
 
					ObjectType type = GetObjectType(t);
 
					int size = type == OBJECT_HQ ? 2 : 1;
 

	
 
					if (!Object::CanAllocateItem()) {
 
						/* Nice... you managed to place 64k lighthouses and
 
						 * antennae on the map... boohoo. */
 
						SlError(STR_ERROR_TOO_MANY_OBJECTS);
 
					}
 

	
 
					Object *o = new Object();
 
					o->location.tile = t;
 
					o->location.w    = size;
 
@@ -2024,6 +2037,10 @@ bool AfterLoadGame()
 
		FOR_ALL_STATIONS(st) {
 
			std::list<Vehicle *>::iterator iter;
 
			for (iter = st->loading_vehicles.begin(); iter != st->loading_vehicles.end(); ++iter) {
 
				/* There are always as many CargoPayments as Vehicles. We need to make the
 
				 * assert() in Pool::GetNew() happy by calling CanAllocateItem(). */
 
				assert_compile(CargoPaymentPool::MAX_SIZE == VehiclePool::MAX_SIZE);
 
				assert(CargoPayment::CanAllocateItem());
 
				Vehicle *v = *iter;
 
				if (v->cargo_payment == NULL) v->cargo_payment = new CargoPayment(v);
 
			}