Changeset - r8724:ae47d961ae91
[Not reviewed]
master
0 1 0
rubidium - 16 years ago 2008-03-23 21:31:43
rubidium@openttd.org
(svn r12399) -Fix: some old DOS savegame didn't load properly due to 'garbage' that was sprinkled in some places.
1 file changed with 18 insertions and 1 deletions:
0 comments (0 inline, 0 general)
src/oldloader.cpp
Show inline comments
 
@@ -339,6 +339,18 @@ static void FixOldVehicles()
 
			ClrBit(v->u.road.state, RVS_IS_STOPPING);
 
		}
 

	
 
		/* The subtype should be 0, but it sometimes isn't :( */
 
		if (v->type == VEH_ROAD) v->subtype = 0;
 

	
 
		/* Sometimes primary vehicles would have a nothing (invalid) order
 
		 * or vehicles that could not have an order would still have a
 
		 * (loading) order which causes assertions and the like later on.
 
		 */
 
		if (!IsPlayerBuildableVehicleType(v) ||
 
				(v->IsPrimaryVehicle() && v->current_order.type == OT_NOTHING)) {
 
			v->current_order.type = OT_DUMMY;
 
		}
 

	
 
		FOR_ALL_VEHICLES_FROM(u, v->index + 1) {
 
			/* If a vehicle has the same orders, add the link to eachother
 
			 * in both vehicles */
 
@@ -1223,7 +1235,12 @@ bool LoadOldVehicle(LoadgameState *ls, i
 
		}
 

	
 
		if (_old_order_ptr != 0 && _old_order_ptr != 0xFFFFFFFF) {
 
			v->orders = GetOrder(REMAP_ORDER_IDX(_old_order_ptr));
 
			uint old_id = REMAP_ORDER_IDX(_old_order_ptr);
 
			/* There is a maximum of 5000 orders in old savegames, so *if*
 
			 * we go over that limit something is very wrong. In that case
 
			 * we just assume there are no orders for the vehicle.
 
			 */
 
			if (old_id < 5000) v->orders = GetOrder(old_id);
 
		}
 
		AssignOrder(&v->current_order, UnpackOldOrder(_old_order));
 

	
0 comments (0 inline, 0 general)