(svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
authorpeter1138
Mon, 01 Jan 2007 01:40:56 +0000
changeset 5703 3f848403a814
parent 5702 b33ea3bc2e1c
child 5704 c34aac40c3fb
(svn r7711) -Fix (r7354): NewGRF Action 7, GRF check condition 10 didn't ignore unknown GRF IDs. Also separate GRF ID conditions
from parameter conditions to remove code duplication in GRF checking code.
newgrf.c
--- a/newgrf.c	Sun Dec 31 21:02:44 2006 +0000
+++ b/newgrf.c	Mon Jan 01 01:40:56 2007 +0000
@@ -2351,65 +2351,63 @@
 		return;
 	}
 
-	if (param == 0x88 && GetFileByGRFID(cond_val) == NULL) {
-		grfmsg(7, "GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val));
-		return;
-	}
-
 	param_val = GetParamVal(param, &cond_val);
 
 	grfmsg(7, "Test condtype %d, param 0x%08X, condval 0x%08X", condtype, param_val, cond_val);
-	switch (condtype) {
-		case 0: result = !!(param_val & (1 << cond_val));
-			break;
-		case 1: result = !(param_val & (1 << cond_val));
-			break;
-		case 2: result = (param_val & mask) == cond_val;
-			break;
-		case 3: result = (param_val & mask) != cond_val;
-			break;
-		case 4: result = (param_val & mask) < cond_val;
-			break;
-		case 5: result = (param_val & mask) > cond_val;
-			break;
-
-		/* Tests 6 to 10 are only for param 0x88, GRFID checks */
-		case 6: { /* Is GRFID active? */
-			const GRFConfig *c = GetGRFConfig(cond_val);
-			if (c == NULL) return;
-			result = HASBIT(c->flags, GCF_ACTIVATED);
-			break;
+
+	if (param == 0x88) {
+		/* GRF ID checks */
+
+		const GRFConfig *c = GetGRFConfig(cond_val);
+
+		if (condtype != 10 && c == NULL) {
+			grfmsg(7, "GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val));
+			return;
 		}
 
-		case 7: { /* Is GRFID non-active? */
-			const GRFConfig *c = GetGRFConfig(cond_val);
-			if (c == NULL) return;
-			result = !HASBIT(c->flags, GCF_ACTIVATED);
-			break;
-		}
-
-		case 8: { /* GRFID is not but will be active? */
-			const GRFConfig *c = GetGRFConfig(cond_val);
-			if (c == NULL) return;
-			result = !HASBIT(c->flags, GCF_ACTIVATED) && !HASBIT(c->flags, GCF_DISABLED);
-			break;
+		switch (condtype) {
+			/* Tests 6 to 10 are only for param 0x88, GRFID checks */
+			case 6: /* Is GRFID active? */
+				result = HASBIT(c->flags, GCF_ACTIVATED);
+				break;
+
+			case 7: /* Is GRFID non-active? */
+				result = !HASBIT(c->flags, GCF_ACTIVATED);
+				break;
+
+			case 8: /* GRFID is not but will be active? */
+				result = !HASBIT(c->flags, GCF_ACTIVATED) && !HASBIT(c->flags, GCF_DISABLED);
+				break;
+
+			case 9: /* GRFID is or will be active? */
+				result = !HASBIT(c->flags, GCF_NOT_FOUND) && !HASBIT(c->flags, GCF_DISABLED);
+				break;
+
+			case 10: /* GRFID is not nor will be active */
+				/* This is the only condtype that doesn't get ignored if the GRFID is not found */
+				result = c == NULL || HASBIT(c->flags, GCF_DISABLED) || HASBIT(c->flags, GCF_NOT_FOUND);
+				break;
+
+			default: grfmsg(1, "Unsupported GRF test %d. Ignoring", condtype); return;
 		}
-
-		case 9: { /* GRFID is or will be active? */
-			const GRFConfig *c = GetGRFConfig(cond_val);
-			if (c == NULL) return;
-			result = !HASBIT(c->flags, GCF_NOT_FOUND) && !HASBIT(c->flags, GCF_DISABLED);
-			break;
+	} else {
+		/* Parameter or variable tests */
+		switch (condtype) {
+			case 0: result = !!(param_val & (1 << cond_val));
+				break;
+			case 1: result = !(param_val & (1 << cond_val));
+				break;
+			case 2: result = (param_val & mask) == cond_val;
+				break;
+			case 3: result = (param_val & mask) != cond_val;
+				break;
+			case 4: result = (param_val & mask) < cond_val;
+				break;
+			case 5: result = (param_val & mask) > cond_val;
+				break;
+
+			default: grfmsg(1, "Unsupported test %d. Ignoring", condtype); return;
 		}
-
-		case 10: { /* GRFID is not nor will be active */
-			const GRFConfig *c = GetGRFConfig(cond_val);
-			/* This is the only condtype that doesn't get ignored if the GRFID is not found */
-			result = c == NULL || HASBIT(c->flags, GCF_DISABLED) || HASBIT(c->flags, GCF_NOT_FOUND);
-			break;
-		}
-
-		default: grfmsg(1, "Unsupported test %d. Ignoring", condtype); return;
 	}
 
 	if (!result) {