summaryrefslogtreecommitdiff
path: root/newgrf.c
diff options
context:
space:
mode:
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) {