changeset 8090:181517a7e8d4 draft

(svn r11651) -Codechange [FS#1555]: implement GRF parameter querying for industries and fix a 'bug' as side effect.
author rubidium <rubidium@openttd.org>
date Sun, 16 Dec 2007 23:10:30 +0000
parents 353987b7661f
children c632f5a65d88
files src/newgrf_industries.cpp src/newgrf_industrytiles.cpp
diffstat 2 files changed, 24 insertions(+), 0 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf_industries.cpp
+++ b/src/newgrf_industries.cpp
@@ -36,6 +36,15 @@
 	return _industry_mngr.GetID(GB(grf_type, 0, 6), grf_id);
 }
 
+static uint32 GetGRFParameter(IndustryType ind_id, byte parameter)
+{
+	const IndustrySpec *indspec = GetIndustrySpec(ind_id);
+	const GRFFile *file = indspec->grf_prop.grffile;
+
+	if (parameter >= file->param_end) return 0;
+	return file->param[parameter];
+}
+
 /**
  * Finds the distance for the closest tile with water/land given a tile
  * @param tile  the tile to find the distance too
@@ -269,6 +278,9 @@
 		/* Get a variable from the persistent storage */
 		case 0x7C: return industry->psa.Get(parameter);
 
+		/* Read GRF parameter */
+		case 0x7F: return GetGRFParameter(industry->type, parameter);
+
 		/* Industry structure access*/
 		case 0x80: return industry->xy;
 		case 0x81: return GB(industry->xy, 8, 8);
--- a/src/newgrf_industrytiles.cpp
+++ b/src/newgrf_industrytiles.cpp
@@ -24,6 +24,15 @@
 #include "sprite.h"
 #include "transparency.h"
 
+static uint32 GetGRFParameter(IndustryGfx indtile_id, byte parameter)
+{
+	const IndustryTileSpec *indtspec = GetIndustryTileSpec(indtile_id);
+	const GRFFile *file = indtspec->grf_prop.grffile;
+
+	if (parameter >= file->param_end) return 0;
+	return file->param[parameter];
+}
+
 /**
  * Based on newhouses equivalent, but adapted for newindustries
  * @param parameter from callback.  It's in fact a pair of coordinates
@@ -101,6 +110,9 @@
 
 		/* Get industry tile ID at offset */
 		case 0x62 : return GetIndustryIDAtOffset(GetNearbyTile(parameter, tile), inds);
+
+		/* Read GRF parameter */
+		case 0x7F: return GetGRFParameter(GetIndustryGfx(tile), parameter);
 	}
 
 	DEBUG(grf, 1, "Unhandled industry tile property 0x%X", variable);