diff options
-rw-r--r-- | src/industry.h | 4 | ||||
-rw-r--r-- | src/newgrf_industries.cpp | 4 |
2 files changed, 7 insertions, 1 deletions
diff --git a/src/industry.h b/src/industry.h index e8d5596c9..bf60975a7 100644 --- a/src/industry.h +++ b/src/industry.h @@ -82,6 +82,10 @@ enum IndustyBehaviour { INDUSTRYBEH_AIRPLANE_ATTACKS = 1 << 11, ///< can be exploded by a military airplane (oil refinery) INDUSTRYBEH_CHOPPER_ATTACKS = 1 << 12, ///< can be exploded by a military helicopter (factory) INDUSTRYBEH_CAN_SUBSIDENCE = 1 << 13, ///< can cause a subsidence (coal mine, shaft that collapses) + /* The following flags are only used for newindustries and do no represent any normal behaviour */ + INDUSTRYBEH_PROD_MULTI_HNDLING = 1 << 14, ///< Automatic production multiplier handling + INDUSTRYBEH_PRODCALLBACK_RANDOM = 1 << 15, ///< Production callback needs random bits in var 10 + INDUSTRYBEH_NOBUILT_MAPCREATION = 1 << 16, ///< Do not force one instance of this type to appear on map generation INDUSTRYBEH_CANCLOSE_LASTINSTANCE = 1 << 17, ///< Allow closing down the last instance of this type }; diff --git a/src/newgrf_industries.cpp b/src/newgrf_industries.cpp index 5574673a6..811f76a6d 100644 --- a/src/newgrf_industries.cpp +++ b/src/newgrf_industries.cpp @@ -462,13 +462,15 @@ static int32 DerefIndProd(uint field, bool use_register) */ void IndustryProductionCallback(Industry *ind, int reason) { + const IndustrySpec *spec = GetIndustrySpec(ind->type); ResolverObject object; NewIndustryResolver(&object, ind->xy, ind); + if ((spec->behaviour & INDUSTRYBEH_PRODCALLBACK_RANDOM) != 0) object.callback_param1 = Random(); object.callback_param2 = reason; for (uint loop = 0;; loop++) { SB(object.callback_param2, 8, 16, loop); - const SpriteGroup *group = Resolve(GetIndustrySpec(ind->type)->grf_prop.spritegroup, &object); + const SpriteGroup *group = Resolve(spec->grf_prop.spritegroup, &object); if (group == NULL || group->type != SGT_INDUSTRY_PRODUCTION) break; bool deref = (group->g.indprod.version == 1); |