(svn r3208) Don't explicitly pass the engine type to look for to GetRearEngine(), because it's the engine type of the vehicle which gets passed as first parameter
--- a/train_cmd.c Wed Nov 16 13:45:42 2005 +0000
+++ b/train_cmd.c Wed Nov 16 14:07:34 2005 +0000
@@ -1080,13 +1080,13 @@
* engine is 'started', first 'close' that before 'closing' our
* searched engine
*/
-Vehicle *GetRearEngine(const Vehicle *v, EngineID engine)
+Vehicle* GetRearEngine(const Vehicle* v)
{
Vehicle *u;
int en_count = 1;
for (u = v->next; u != NULL; u = u->next) {
- if (u->engine_type == engine) { // find matching engine
+ if (u->engine_type == v->engine_type) { // find matching engine
en_count += (IS_FIRSTHEAD_SPRITE(u->spritenum)) ? +1 : -1;
if (en_count == 0) return (Vehicle *)u;
@@ -1142,7 +1142,7 @@
/* 1. Delete the engine, if it is dualheaded also delete the matching
* rear engine of the loco (from the point of deletion onwards) */
- Vehicle *rear = (RailVehInfo(v->engine_type)->flags & RVI_MULTIHEAD) ? GetRearEngine(v, v->engine_type) : NULL;
+ Vehicle* rear = (RailVehInfo(v->engine_type)->flags & RVI_MULTIHEAD) ? GetRearEngine(v) : NULL;
if (rear != NULL) {
cost -= v->value;
if (flags & DC_EXEC) {
--- a/vehicle.c Wed Nov 16 13:45:42 2005 +0000
+++ b/vehicle.c Wed Nov 16 14:07:34 2005 +0000
@@ -1491,7 +1491,7 @@
switch (v->type) {
case VEH_Train:
if (RailVehInfo(v->engine_type)->flags & RVI_MULTIHEAD) {
- return GetRearEngine(v, v->engine_type);
+ return GetRearEngine(v);
}
if (v->next != NULL && v->next->subtype == TS_Artic_Part) return v->next;
break;
--- a/vehicle.h Wed Nov 16 13:45:42 2005 +0000
+++ b/vehicle.h Wed Nov 16 14:07:34 2005 +0000
@@ -311,7 +311,7 @@
void CheckVehicleBreakdown(Vehicle *v);
void AgeVehicle(Vehicle *v);
void VehicleEnteredDepotThisTick(Vehicle *v);
-Vehicle *GetRearEngine(const Vehicle *v, EngineID engine);
+Vehicle* GetRearEngine(const Vehicle* v);
void BeginVehicleMove(Vehicle *v);
void EndVehicleMove(Vehicle *v);