summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/train_cmd.cpp28
1 files changed, 17 insertions, 11 deletions
diff --git a/src/train_cmd.cpp b/src/train_cmd.cpp
index e1e0738d6..aeeb3c4eb 100644
--- a/src/train_cmd.cpp
+++ b/src/train_cmd.cpp
@@ -148,19 +148,25 @@ void Train::UpdateVisualEffect(bool allow_power_change)
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;
- } 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);
+ if (this->type == VEH_TRAIN) {
+ if (e->u.rail.visual_effect != 0) {
+ this->vcache.cached_vis_effect = e->u.rail.visual_effect;
} else {
- /* Diesel fumes and sparks come from the centre */
- SB(this->vcache.cached_vis_effect, VE_OFFSET_START, VE_OFFSET_COUNT, VE_OFFSET_CENTRE);
+ 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 {
+ /* 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 */