--- a/vehicle.c Sun Apr 03 06:26:31 2005 +0000
+++ b/vehicle.c Sun Apr 03 09:38:13 2005 +0000
@@ -1307,7 +1307,7 @@
the last 8 bit is the engine. The 8 bits in front of the engine is free so it have room for 16 bit engine entries */
uint16 new_engine_type = (uint16)(p2 & 0xFFFF);
uint32 autorefit_money = (p2 >> 16) * 100000;
- Vehicle *v, *u;
+ Vehicle *v, *u, *first;
int cost, build_cost, rear_engine_cost = 0;
byte old_engine_type;
@@ -1349,6 +1349,7 @@
return CMD_ERROR;
if ( v->type == VEH_Train ) {
+ first = GetFirstVehicleInChain(v);
u = GetLastVehicleInChain(v);
if ( RailVehInfo(new_engine_type)->flags & RVI_MULTIHEAD )
build_cost = build_cost >> 1; //multiheaded engines have EstimateTrainCost() for both engines
@@ -1357,7 +1358,6 @@
// prevent that the rear engine can get replaced to something else than the front engine
if ( v->u.rail.first_engine != 0xffff && RailVehInfo(old_engine_type)->flags & RVI_MULTIHEAD && RailVehInfo(old_engine_type)->flags ) {
- Vehicle *first = GetFirstVehicleInChain(v);
if ( first->engine_type != new_engine_type ) return CMD_ERROR;
}
@@ -1415,8 +1415,6 @@
v->value = build_cost;
- InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
-
if (v->engine_type != new_engine_type) {
byte sprite = v->spritenum;
@@ -1493,6 +1491,7 @@
} while ( (veh=veh->next) != NULL );
}
InvalidateWindowClasses(WC_TRAINS_LIST);
+ UpdateTrainAcceleration(first);
break;
}
case VEH_Road:
@@ -1555,6 +1554,7 @@
}
InvalidateWindow(WC_REPLACE_VEHICLE, v->type);
ResortVehicleLists();
+ InvalidateWindow(WC_VEHICLE_DETAILS, v->index);
}
//needs to be down here because refitting will change SET_EXPENSES_TYPE if called
SET_EXPENSES_TYPE(EXPENSES_NEW_VEHICLES);