Codechange: Make Train::UpdateVisualEffect work for all vehicle types. diff -r 66019f1a47b4 src/train_cmd.cpp --- a/src/train_cmd.cpp Wed Nov 10 16:49:04 2010 +0100 +++ b/src/train_cmd.cpp Wed Nov 10 18:19:52 2010 +0100 @@ -148,19 +148,25 @@ this->vcache.cached_vis_effect = 0; const Engine *e = Engine::Get(this->engine_type); - if (e->u.rail.visual_effect != 0) { - this->vcache.cached_vis_effect = e->u.rail.visual_effect; + if (this->type == VEH_TRAIN) { + if (e->u.rail.visual_effect != 0) { + this->vcache.cached_vis_effect = e->u.rail.visual_effect; + } else { + Train *t = Train::From(this); + if (t->IsWagon() || t->IsArticulatedPart()) { + /* Wagons and articulated parts have no effect by default */ + SetBit(this->vcache.cached_vis_effect, VE_DISABLE_EFFECT); + } else if (e->u.rail.engclass == 0) { + /* Steam is offset by -4 units */ + SB(this->vcache.cached_vis_effect, VE_OFFSET_START, VE_OFFSET_COUNT, VE_OFFSET_CENTRE - 4); + } else { + /* Diesel fumes and sparks come from the centre */ + SB(this->vcache.cached_vis_effect, VE_OFFSET_START, VE_OFFSET_COUNT, VE_OFFSET_CENTRE); + } + } } else { - if (this->IsWagon() || this->IsArticulatedPart()) { - /* Wagons and articulated parts have no effect by default */ - SetBit(this->vcache.cached_vis_effect, VE_DISABLE_EFFECT); - } else if (e->u.rail.engclass == 0) { - /* Steam is offset by -4 units */ - SB(this->vcache.cached_vis_effect, VE_OFFSET_START, VE_OFFSET_COUNT, VE_OFFSET_CENTRE - 4); - } else { - /* Diesel fumes and sparks come from the centre */ - SB(this->vcache.cached_vis_effect, VE_OFFSET_START, VE_OFFSET_COUNT, VE_OFFSET_CENTRE); - } + /* Non-trains do not have a visual effect by default. */ + SetBit(this->vcache.cached_vis_effect, VE_DISABLE_EFFECT); } /* Check powered wagon / visual effect callback */