changeset 8372:2628bf7d5b77 draft

(svn r11938) -Codechange: support loading of canal/river properties (though still ignored)
author peter1138 <peter1138@openttd.org>
date Mon, 21 Jan 2008 20:41:04 +0000
parents dc34ed2f4803
children a6209668c216
files src/newgrf.cpp src/newgrf_canal.cpp src/newgrf_canal.h
diffstat 3 files changed, 46 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -1134,6 +1134,38 @@
 	return ret;
 }
 
+static bool CanalChangeInfo(uint id, int numinfo, int prop, byte **bufp, int len)
+{
+	byte *buf = *bufp;
+	bool ret = false;
+
+	if (id + numinfo > CF_END) {
+		grfmsg(1, "CanalChangeInfo: Canal feature %u is invalid, max %u, ignoreing", id + numinfo, CF_END);
+		return false;
+	}
+
+	for (int i = 0; i < numinfo; i++) {
+		WaterFeature *wf = &_water_feature[id + i];
+
+		switch (prop) {
+			case 0x08:
+				wf->callbackmask = grf_load_byte(&buf);
+				break;
+
+			case 0x09:
+				wf->flags = grf_load_byte(&buf);
+				break;
+
+			default:
+				ret = true;
+				break;
+		}
+	}
+
+	*bufp = buf;
+	return ret;
+}
+
 static bool BridgeChangeInfo(uint brid, int numinfo, int prop, byte **bufp, int len)
 {
 	byte *buf = *bufp;
@@ -2128,7 +2160,7 @@
 		/* GSF_SHIP */         ShipVehicleChangeInfo,
 		/* GSF_AIRCRAFT */     AircraftVehicleChangeInfo,
 		/* GSF_STATION */      StationChangeInfo,
-		/* GSF_CANAL */        NULL,
+		/* GSF_CANAL */        CanalChangeInfo,
 		/* GSF_BRIDGE */       BridgeChangeInfo,
 		/* GSF_TOWNHOUSE */    TownHouseChangeInfo,
 		/* GSF_GLOBALVAR */    NULL, /* Global variables are handled during reservation */
@@ -2876,7 +2908,7 @@
 			continue;
 		}
 
-		_canal_sg[cf] = _cur_grffile->spritegroups[groupid];
+		_water_feature[cf].group = _cur_grffile->spritegroups[groupid];
 	}
 }
 
@@ -5037,8 +5069,8 @@
 	ResetStationClasses();
 	ResetCustomStations();
 
-	/* Reset canal sprite groups */
-	memset(_canal_sg, 0, sizeof(_canal_sg));
+	/* Reset canal sprite groups and flags */
+	memset(_water_feature, 0, sizeof(_water_feature));
 
 	/* Reset the snowline table. */
 	ClearSnowLine();
--- a/src/newgrf_canal.cpp
+++ b/src/newgrf_canal.cpp
@@ -15,7 +15,7 @@
 
 
 /** Table of canal 'feature' sprite groups */
-const SpriteGroup *_canal_sg[CF_END];
+WaterFeature _water_feature[CF_END];
 
 
 /* Random bits and triggers are not supported for canals, so the following
@@ -94,7 +94,7 @@
 
 	NewCanalResolver(&object, tile);
 
-	group = Resolve(_canal_sg[feature], &object);
+	group = Resolve(_water_feature[feature].group, &object);
 	if (group == NULL || group->type != SGT_RESULT) return 0;
 
 	return group->g.result.sprite;
--- a/src/newgrf_canal.h
+++ b/src/newgrf_canal.h
@@ -17,8 +17,15 @@
 };
 
 
+struct WaterFeature {
+	const SpriteGroup *group;
+	uint8 callbackmask;
+	uint8 flags;
+};
+
+
 /** Table of canal 'feature' sprite groups */
-extern const SpriteGroup *_canal_sg[CF_END];
+extern WaterFeature _water_feature[CF_END];
 
 
 /** Lookup the base sprite to use for a canal.