@@ -1862,25 +1862,25 @@ void Vehicle::UpdateVisualEffect(bool al
bool powered_before = HasBit(this->vcache.cached_vis_effect, VE_DISABLE_WAGON_POWER);
this->vcache.cached_vis_effect = 0;
const Engine *e = Engine::Get(this->engine_type);
byte default_effect = VE_DEFAULT;
switch (this->type) {
case VEH_TRAIN: default_effect = e->u.rail.visual_effect; break;
case VEH_ROAD: default_effect = e->u.road.visual_effect; break;
case VEH_SHIP: default_effect = e->u.ship.visual_effect; break;
default: break;
}
if (default_effect == VE_DEFAULT) {
if (this->type == VEH_TRAIN && Train::From(this)->IsEngine()) {
if (this->type == VEH_TRAIN && !(Train::From(this)->IsWagon() || Train::From(this)->IsArticulatedPart())) {
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-train engines do not have a visual effect by default. */
SetBit(this->vcache.cached_vis_effect, VE_DISABLE_EFFECT);
@@ -1946,25 +1946,25 @@ void Vehicle::ShowVisualEffect() const
* - The vehicle is on a tunnel tile
* - The vehicle is a train engine that is currently unpowered */
if (disable_effect ||
v->vehstatus & VS_HIDDEN ||
IsDepotTile(v->tile) ||
IsTunnelTile(v->tile) ||
(v->type == VEH_TRAIN &&
!HasPowerOnRail(Train::From(v)->railtype, GetTileRailType(v->tile)))) {
continue;
if (effect_type == VE_TYPE_DEFAULT) {
if (v->type == VEH_TRAIN && Train::From(v)->IsEngine()) {
if (v->type == VEH_TRAIN) {
/* Use default effect type for engine class. */
effect_type = RailVehInfo(v->engine_type)->engclass + 1;
/* No default effect exists, so continue */
int x = _vehicle_smoke_pos[v->direction] * effect_offset;
int y = _vehicle_smoke_pos[(v->direction + 2) % 8] * effect_offset;
if (v->type == VEH_TRAIN && HasBit(Train::From(v)->flags, VRF_REVERSE_DIRECTION)) {
Status change: