summaryrefslogtreecommitdiff
path: root/src/newgrf.cpp
diff options
context:
space:
mode:
authormaedhros <maedhros@openttd.org>2007-03-06 19:33:28 +0000
committermaedhros <maedhros@openttd.org>2007-03-06 19:33:28 +0000
commit1c7df202c649b4dad5fe5e5f53fb33191a440724 (patch)
treedd3c567c0980606c17509a28df3ceea5975adb03 /src/newgrf.cpp
parent429c41ea51d142a7e99d20beba7bcd2ce99d747c (diff)
downloadopenttd-1c7df202c649b4dad5fe5e5f53fb33191a440724.tar.xz
(svn r9031) -Codechange: Introduce grfconfig->status, and use it for states that are
mutually exclusive. At the same time, add an INITIALISED state which makes it possible to check if a grf is not yet active but will be later on during the GLS_ACTIVATION loading stage.
Diffstat (limited to 'src/newgrf.cpp')
-rw-r--r--src/newgrf.cpp32
1 files changed, 13 insertions, 19 deletions
diff --git a/src/newgrf.cpp b/src/newgrf.cpp
index 07c51791f..fa217f476 100644
--- a/src/newgrf.cpp
+++ b/src/newgrf.cpp
@@ -2535,24 +2535,24 @@ static void SkipIf(byte *buf, int len)
switch (condtype) {
/* Tests 6 to 10 are only for param 0x88, GRFID checks */
case 6: /* Is GRFID active? */
- result = HASBIT(c->flags, GCF_ACTIVATED);
+ result = c->status == GCS_ACTIVATED;
break;
case 7: /* Is GRFID non-active? */
- result = !HASBIT(c->flags, GCF_ACTIVATED);
+ result = c->status != GCS_ACTIVATED;
break;
case 8: /* GRFID is not but will be active? */
- result = !HASBIT(c->flags, GCF_ACTIVATED) && !HASBIT(c->flags, GCF_DISABLED);
+ result = c->status == GCS_INITIALISED;
break;
case 9: /* GRFID is or will be active? */
- result = !HASBIT(c->flags, GCF_NOT_FOUND) && !HASBIT(c->flags, GCF_DISABLED);
+ result = c->status == GCS_ACTIVATED || c->status == GCS_INITIALISED;
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);
+ result = c == NULL || c->flags == GCS_DISABLED || c->status == GCS_NOT_FOUND;
break;
default: grfmsg(1, "Unsupported GRF test %d. Ignoring", condtype); return;
@@ -2616,7 +2616,7 @@ static void SkipIf(byte *buf, int len)
_skip_sprites = -1;
/* If an action 8 hasn't been encountered yet, disable the grf. */
- if (!HASBIT(_cur_grfconfig->flags, GCF_ACTIVATED)) SETBIT(_cur_grfconfig->flags, GCF_DISABLED);
+ if (_cur_grfconfig->status != GCS_ACTIVATED) _cur_grfconfig->status = GCS_DISABLED;
}
}
@@ -2673,7 +2673,7 @@ static void GRFInfo(byte *buf, int len)
_cur_grffile->grfid = grfid;
_cur_grffile->grf_version = version;
- SETBIT(_cur_grfconfig->flags, GCF_ACTIVATED);
+ _cur_grfconfig->status = _cur_stage < GLS_ACTIVATION ? GCS_INITIALISED : GCS_ACTIVATED;
/* Do swap the GRFID for displaying purposes since people expect that */
DEBUG(grf, 1, "Loaded GRFv%d set %08lX - %s", version, BSWAP32(grfid), name);
@@ -2779,8 +2779,7 @@ static void GRFLoadError(byte *buf, int len)
} else if (severity == 3) {
/* This is a fatal error, so make sure the GRF is deactivated and no
* more of it gets loaded. */
- SETBIT(_cur_grfconfig->flags, GCF_DISABLED);
- CLRBIT(_cur_grfconfig->flags, GCF_ACTIVATED);
+ _cur_grfconfig->status = GCS_DISABLED;
_skip_sprites = -1;
}
@@ -2981,8 +2980,7 @@ static void ParamSet(byte *buf, int len)
if (op != 4 && op != 5) {
/* Deactivate GRF */
grfmsg(0, "GRM: Unable to allocate %d vehicles, deactivating", count);
- SETBIT(_cur_grfconfig->flags, GCF_DISABLED);
- CLRBIT(_cur_grfconfig->flags, GCF_ACTIVATED);
+ _cur_grfconfig->status = GCS_DISABLED;
_skip_sprites = -1;
return;
@@ -3000,8 +2998,7 @@ static void ParamSet(byte *buf, int len)
/* Check if the allocated sprites will fit below the original sprite limit */
if (_cur_spriteid + count >= 16384) {
grfmsg(0, "GRM: Unable to allocate %d sprites; try changing NewGRF order", count);
- SETBIT(_cur_grfconfig->flags, GCF_DISABLED);
- CLRBIT(_cur_grfconfig->flags, GCF_ACTIVATED);
+ _cur_grfconfig->status = GCS_DISABLED;
_skip_sprites = -1;
return;
@@ -3218,8 +3215,7 @@ static void GRFInhibit(byte *buf, int len)
/* Unset activation flag */
if (file != NULL && file != _cur_grfconfig) {
grfmsg(2, "GRFInhibit: Deactivating file '%s'", file->filename);
- SETBIT(file->flags, GCF_DISABLED);
- CLRBIT(file->flags, GCF_ACTIVATED);
+ file->status = GCS_DISABLED;
}
}
}
@@ -3950,11 +3946,9 @@ void LoadNewGRFFile(GRFConfig *config, uint file_index, GrfLoadingStage stage)
if (stage != GLS_FILESCAN && stage != GLS_SAFETYSCAN && stage != GLS_LABELSCAN) {
_cur_grffile = GetFileByFilename(filename);
if (_cur_grffile == NULL) error("File '%s' lost in cache.\n", filename);
- if (stage == GLS_ACTIVATION && !HASBIT(config->flags, GCF_ACTIVATED)) return;
+ if (stage == GLS_ACTIVATION && config->status != GCS_INITIALISED) return;
}
- if (stage == GLS_ACTIVATION) CLRBIT(config->flags, GCF_ACTIVATED);
-
FioOpenFile(file_index, filename);
_file_index = file_index; // XXX
@@ -4037,7 +4031,7 @@ void LoadNewGRF(uint load_index, uint file_index)
_cur_stage = stage;
_cur_spriteid = load_index;
for (c = _grfconfig; c != NULL; c = c->next) {
- if (HASBIT(c->flags, GCF_DISABLED) || HASBIT(c->flags, GCF_NOT_FOUND)) continue;
+ if (c->status == GCS_DISABLED || c->status == GCS_NOT_FOUND) continue;
// TODO usererror()
if (!FioCheckFileExists(c->filename)) error("NewGRF file is missing '%s'", c->filename);