summaryrefslogtreecommitdiff
path: root/newgrf.c
diff options
context:
space:
mode:
authorpeter1138 <peter1138@openttd.org>2007-01-01 01:40:56 +0000
committerpeter1138 <peter1138@openttd.org>2007-01-01 01:40:56 +0000
commit3ba932e30f2fbe3fcaed0ebabff2f65ba8d54db4 (patch)
treea7223c177ce167b73be29347fcdf530741046d40 /newgrf.c
parent71c89cf8eef973b8b9e0740e4d9043531ac41fe9 (diff)
downloadopenttd-3ba932e30f2fbe3fcaed0ebabff2f65ba8d54db4.tar.xz
(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.
Diffstat (limited to 'newgrf.c')
-rw-r--r--newgrf.c94
1 files changed, 46 insertions, 48 deletions
diff --git a/newgrf.c b/newgrf.c
index d82ab294e..c2b4e464b 100644
--- a/newgrf.c
+++ b/newgrf.c
@@ -2351,65 +2351,63 @@ static void SkipIf(byte *buf, int len)
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 */
- case 7: { /* Is GRFID non-active? */
- const GRFConfig *c = GetGRFConfig(cond_val);
- if (c == NULL) return;
- result = !HASBIT(c->flags, GCF_ACTIVATED);
- break;
- }
+ const GRFConfig *c = GetGRFConfig(cond_val);
- 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;
+ if (condtype != 10 && c == NULL) {
+ grfmsg(7, "GRFID 0x%08X unknown, skipping test", BSWAP32(cond_val));
+ 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;
- }
+ 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 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;
+ 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;
}
+ } 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;
+ default: grfmsg(1, "Unsupported test %d. Ignoring", condtype); return;
+ }
}
if (!result) {