changeset 16513:37ad611b8ce7 draft

(svn r21239) -Codechange/Fix: [NewGRF] Use 0xFF instead of 0 as default value for visual effect. This makes setting train prop 22 to 0 actually work (Hirundo)
author rubidium <rubidium@openttd.org>
date Thu, 18 Nov 2010 14:20:03 +0000
parents 419c2d6ebc51
children 0f4c60894d9b
files src/engine.cpp src/newgrf.cpp src/table/engines.h src/vehicle.cpp src/vehicle_base.h
diffstat 5 files changed, 13 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/engine.cpp
+++ b/src/engine.cpp
@@ -85,6 +85,8 @@
 		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;
 	}
 
--- 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 @@
 				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
--- a/src/table/engines.h
+++ b/src/table/engines.h
@@ -364,7 +364,7 @@
  * 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
--- a/src/vehicle.cpp
+++ b/src/vehicle.cpp
@@ -1864,7 +1864,7 @@
 
 	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);
--- a/src/vehicle_base.h
+++ b/src/vehicle_base.h
@@ -79,6 +79,8 @@
 
 	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. */