changeset 17842:10f4aab26eba draft

(svn r22633) -Fix: Implement variables 25 and 7F for railtypes.
author frosch <frosch@openttd.org>
date Mon, 04 Jul 2011 20:25:17 +0000
parents d3171d03781c
children 2d62fee43556
files src/newgrf.cpp src/newgrf_railtype.cpp src/rail.h src/table/railtypes.h
diffstat 4 files changed, 17 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -4599,6 +4599,7 @@
 			if (railtypes[i] != INVALID_RAILTYPE) {
 				RailtypeInfo *rti = &_railtypes[railtypes[i]];
 
+				rti->grffile[ctype] = _cur_grffile;
 				rti->group[ctype] = _cur_grffile->spritegroups[groupid];
 			}
 		}
--- a/src/newgrf_railtype.cpp
+++ b/src/newgrf_railtype.cpp
@@ -67,7 +67,7 @@
 	return NULL;
 }
 
-static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile, TileContext context)
+static inline void NewRailTypeResolver(ResolverObject *res, TileIndex tile, TileContext context, const GRFFile *grffile)
 {
 	res->GetRandomBits = &RailTypeGetRandomBits;
 	res->GetTriggers   = &RailTypeGetTriggers;
@@ -85,6 +85,8 @@
 	res->trigger         = 0;
 	res->reseed          = 0;
 	res->count           = 0;
+
+	res->grffile         = grffile;
 }
 
 /**
@@ -104,7 +106,7 @@
 	const SpriteGroup *group;
 	ResolverObject object;
 
-	NewRailTypeResolver(&object, tile, context);
+	NewRailTypeResolver(&object, tile, context, rti->grffile[rtsg]);
 
 	group = SpriteGroup::Resolve(rti->group[rtsg], &object);
 	if (group == NULL || group->GetNumResults() == 0) return 0;
@@ -140,5 +142,7 @@
  */
 void GetRailTypeResolver(ResolverObject *ro, uint index)
 {
-	NewRailTypeResolver(ro, index, TCX_NORMAL);
+	/* There is no unique GRFFile for the tile. Multiple GRFs can define different parts of the railtype.
+	 * However, currently the NewGRF Debug GUI does not display variables depending on the GRF (like 0x7F) anyway. */
+	NewRailTypeResolver(ro, index, TCX_NORMAL, NULL);
 }
--- a/src/rail.h
+++ b/src/rail.h
@@ -233,6 +233,11 @@
 	byte sorting_order;
 
 	/**
+	 * NewGRF providing the Action3 for the railtype. NULL if not available.
+	 */
+	const GRFFile *grffile[RTSG_END];
+
+	/**
 	 * Sprite groups for resolving sprites
 	 */
 	const SpriteGroup *group[RTSG_END];
--- a/src/table/railtypes.h
+++ b/src/table/railtypes.h
@@ -105,6 +105,7 @@
 		0 << 4 | 7,
 
 		{ NULL },
+		{ NULL },
 	},
 
 	/** Electrified railway */
@@ -197,6 +198,7 @@
 		1 << 4 | 7,
 
 		{ NULL },
+		{ NULL },
 	},
 
 	/** Monorail */
@@ -285,6 +287,7 @@
 		2 << 4 | 7,
 
 		{ NULL },
+		{ NULL },
 	},
 
 	/** Maglev */
@@ -373,6 +376,7 @@
 		3 << 4 | 7,
 
 		{ NULL },
+		{ NULL },
 	},
 };