diff options
-rw-r--r-- | src/industry_cmd.cpp | 26 | ||||
-rw-r--r-- | src/newgrf_callbacks.h | 2 |
2 files changed, 18 insertions, 10 deletions
diff --git a/src/industry_cmd.cpp b/src/industry_cmd.cpp index eab7aee83..0ba2c0750 100644 --- a/src/industry_cmd.cpp +++ b/src/industry_cmd.cpp @@ -929,11 +929,6 @@ void PlantRandomFarmField(const Industry *i) if (tile != INVALID_TILE) PlantFarmField(tile, i->index); } -static void MaybePlantFarmField(const Industry *i) -{ - if (CHANCE16(1, 8)) PlantRandomFarmField(i); -} - /** * Search callback function for ChopLumberMillTrees * @param tile to test @@ -998,10 +993,23 @@ static void ProduceIndustryGoods(Industry *i) i->produced_cargo_waiting[0] = min(0xffff, i->produced_cargo_waiting[0] + i->production_rate[0]); i->produced_cargo_waiting[1] = min(0xffff, i->produced_cargo_waiting[1] + i->production_rate[1]); - if (indbehav & INDUSTRYBEH_PLANT_FIELDS) { - MaybePlantFarmField(i); - } else if ((indbehav & INDUSTRYBEH_CUT_TREES) && (i->counter & 0x1FF) == 0) { - ChopLumberMillTrees(i); + if ((indbehav & INDUSTRYBEH_PLANT_FIELDS) != 0) { + bool plant; + if (HASBIT(indsp->callback_flags, CBM_IND_SPECIAL_EFFECT)) { + plant = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, Random(), 0, i, i->type, i->xy) != 0); + } else { + plant = CHANCE16(1, 8); + } + + if (plant) PlantRandomFarmField(i); + } + if ((indbehav & INDUSTRYBEH_CUT_TREES) != 0) { + bool cut = ((i->counter & 0x1FF) == 0); + if (HASBIT(indsp->callback_flags, CBM_IND_SPECIAL_EFFECT)) { + cut = (GetIndustryCallback(CBID_INDUSTRY_SPECIAL_EFFECT, 0, 1, i, i->type, i->xy) != 0); + } + + if (cut) ChopLumberMillTrees(i); } } } diff --git a/src/newgrf_callbacks.h b/src/newgrf_callbacks.h index 29bb174a5..a7ed3e658 100644 --- a/src/newgrf_callbacks.h +++ b/src/newgrf_callbacks.h @@ -153,7 +153,7 @@ enum CallbackID { CBID_INDUSTRY_WINDOW_MORE_TEXT = 0x3A, /* Called to determine industry special effects */ - CBID_INDUSTRY_SPECIAL_EFFECT = 0x3B, // not yet implemented + CBID_INDUSTRY_SPECIAL_EFFECT = 0x3B, /* Called to determine if industry can alter the ground below industry tile */ CBID_INDUSTRY_AUTOSLOPE = 0x3C, // not yet implemented |