summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/engine.cpp2
-rw-r--r--src/newgrf.cpp8
-rw-r--r--src/table/engines.h2
-rw-r--r--src/vehicle.cpp2
-rw-r--r--src/vehicle_base.h2
5 files changed, 13 insertions, 3 deletions
diff --git a/src/engine.cpp b/src/engine.cpp
index b95c61e27..16f6363fe 100644
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -85,6 +85,8 @@ Engine::Engine(VehicleType type, EngineID base)
this->info.base_life = 0xFF;
/* Set road vehicle tractive effort to the default value */
if (type == VEH_ROAD) this->u.road.tractive_effort = 0x4C;
+ /* Set visual effect to the default value */
+ if (type == VEH_TRAIN) this->u.rail.visual_effect = VE_DEFAULT;
return;
}
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index d4b74045a..12696b6dc 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -48,6 +48,7 @@
#include "gui.h"
#include "vehicle_func.h"
#include "language.h"
+#include "vehicle_base.h"
#include "table/strings.h"
#include "table/build_industry.h"
@@ -710,8 +711,13 @@ static ChangeInfoResult RailVehicleChangeInfo(uint engine, int numinfo, int prop
break;
case 0x22: // Visual effect
- /** @see note in engine.h about rvi->visual_effect */
rvi->visual_effect = buf->ReadByte();
+ /* Avoid accidentally setting visual_effect to the default value
+ * Since bit 6 (disable effects) is set anyways, we can safely erase some bits. */
+ if (rvi->visual_effect == VE_DEFAULT) {
+ assert(HasBit(rvi->visual_effect, VE_DISABLE_EFFECT));
+ SB(rvi->visual_effect, VE_TYPE_START, VE_TYPE_COUNT, 0);
+ }
break;
case 0x23: // Powered wagons weight bonus
diff --git a/src/table/engines.h b/src/table/engines.h
index 6ff3ecfb7..821a249ac 100644
--- a/src/table/engines.h
+++ b/src/table/engines.h
@@ -364,7 +364,7 @@ static const EngineInfo _orig_engine_info[] = {
* Tractive effort coefficient by default is the same as TTDPatch, 0.30*256=76
* Air drag value depends on the top speed of the vehicle.
*/
-#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, {j}, d, e, f, g, h, k, i, 0, 0, 0, 0, 0, 76, 0, 0 }
+#define RVI(a, b, c, d, e, f, g, h, i, j, k) { a, b, c, {j}, d, e, f, g, h, k, i, 0, 0, 0, VE_DEFAULT, 0, 76, 0, 0 }
#define M RAILVEH_MULTIHEAD
#define W RAILVEH_WAGON
#define G RAILVEH_SINGLEHEAD
diff --git a/src/vehicle.cpp b/src/vehicle.cpp
index e7dc7c2d0..ce32dcc5f 100644
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1864,7 +1864,7 @@ void Vehicle::UpdateVisualEffect(bool allow_power_change)
const Engine *e = Engine::Get(this->engine_type);
if (this->type == VEH_TRAIN) {
- if (e->u.rail.visual_effect != 0) {
+ if (e->u.rail.visual_effect != VE_DEFAULT) {
this->vcache.cached_vis_effect = e->u.rail.visual_effect;
} else {
Train *t = Train::From(this);
diff --git a/src/vehicle_base.h b/src/vehicle_base.h
index 070413ab9..149b3d6a3 100644
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -79,6 +79,8 @@ enum VisualEffect {
VE_DISABLE_EFFECT = 6, ///< Flag to disable visual effect
VE_DISABLE_WAGON_POWER = 7, ///< Flag to disable wagon power
+
+ VE_DEFAULT = 0xFF, ///< Default value to indicate that visual effect should be based on engine class
};
/** Cached often queried values common to all vehicles. */