diff options
-rw-r--r-- | src/economy.cpp | 43 | ||||
-rw-r--r-- | src/industry.h | 1 | ||||
-rw-r--r-- | src/table/build_industry.h | 81 |
3 files changed, 71 insertions, 54 deletions
diff --git a/src/economy.cpp b/src/economy.cpp index 55136c28d..25b99892b 100644 --- a/src/economy.cpp +++ b/src/economy.cpp @@ -1178,34 +1178,47 @@ int32 GetTransportedGoodsIncome(uint num_pieces, uint dist, byte transit_days, C static void DeliverGoodsToIndustry(TileIndex xy, CargoID cargo_type, int num_pieces) { - Industry* best = NULL; - Industry* ind; - uint u; + Industry *best = NULL; + Industry *ind; + const IndustrySpec *indspec; + uint best_dist; + uint accepted_cargo_index; /* Check if there's an industry close to the station that accepts the cargo * XXX - Think of something better to * 1) Only deliver to industries which are withing the catchment radius * 2) Distribute between industries if more then one is present */ - u = (_patches.station_spread + 8) * 2; + best_dist = (_patches.station_spread + 8) * 2; FOR_ALL_INDUSTRIES(ind) { - uint t; - - if (( cargo_type == ind->accepts_cargo[0] || - cargo_type == ind->accepts_cargo[1] || - cargo_type == ind->accepts_cargo[2] - ) && - ind->produced_cargo[0] != CT_INVALID && - ind->produced_cargo[0] != cargo_type && - (t = DistanceManhattan(ind->xy, xy)) < u) { - u = t; + indspec = GetIndustrySpec(ind->type); + + if (indspec->produced_cargo[0] == CT_INVALID) continue; + + uint i; + for (i = 0; i < lengthof(indspec->accepts_cargo); i++) { + if (cargo_type == indspec->accepts_cargo[i] && + (indspec->input_cargo_multiplier[i][0] != 0 || indspec->input_cargo_multiplier[i][1] != 0)) { + break; + } + } + + if (i == lengthof(indspec->accepts_cargo)) continue; + + uint dist = DistanceManhattan(ind->xy, xy); + + if (dist < best_dist) { best = ind; + best_dist = dist; + accepted_cargo_index = i; } } /* Found one? */ if (best != NULL) { + indspec = GetIndustrySpec(best->type); best->was_cargo_delivered = true; - best->cargo_waiting[0] = min(best->cargo_waiting[0] + num_pieces, 0xFFFF); + best->cargo_waiting[0] = min(best->cargo_waiting[0] + (num_pieces * indspec->input_cargo_multiplier[accepted_cargo_index][0] / 256), 0xFFFF); + best->cargo_waiting[1] = min(best->cargo_waiting[1] + (num_pieces * indspec->input_cargo_multiplier[accepted_cargo_index][1] / 256), 0xFFFF); } } diff --git a/src/industry.h b/src/industry.h index aa6321fbb..ab3081d71 100644 --- a/src/industry.h +++ b/src/industry.h @@ -107,6 +107,7 @@ struct IndustrySpec { byte minimal_cargo; ///< minimum amount of cargo transported to the stations ///< If the waiting cargo is less than this number, no cargo is moved to it CargoID accepts_cargo[3]; ///< 3 accepted cargos + uint16 input_cargo_multiplier[3][2]; ///< Input cargo multipliers (multiply amount of incoming cargo for the produced cargos) IndustryLifeType life_type; ///< This is also known as Industry production flag, in newgrf specs byte climate_availability; ///< Bitmask, giving landscape enums as bit position IndustyBehaviour behaviour; ///< How this industry will behave, and how others entities can use it diff --git a/src/table/build_industry.h b/src/table/build_industry.h index 8ec84895d..cdb58a2e2 100644 --- a/src/table/build_industry.h +++ b/src/table/build_industry.h @@ -1102,8 +1102,11 @@ static const IndustryTileTable * const _tile_table_sugar_mine[] = { * @param r2 rate of production 1 * @param m minimum cargo moved to station * @param a1 accepted cargo 1 + * @param im1 input multiplier for cargo 1 * @param a2 accepted cargo 2 + * @param im2 input multiplier for cargo 2 * @param a3 accepted cargo 3 + * @param im3 input multiplier for cargo 3 * @param pr industry life (actually, the same as extractive, organic, processing in ttdpatch's specs) * @param clim climate availaility * @param bev industry behaviour @@ -1115,9 +1118,9 @@ static const IndustryTileTable * const _tile_table_sugar_mine[] = { */ #define MI(tbl, d, ai1, ai2, ai3, ai4, ag1, ag2, ag3, ag4, col, \ - c1, c2, c3, proc, p1, r1, p2, r2, m, a1, a2, a3, pr, clim, bev, in, intx, s1, s2, s3) \ + c1, c2, c3, proc, p1, r1, p2, r2, m, a1, im1, a2, im2, a3, im3, pr, clim, bev, in, intx, s1, s2, s3) \ {tbl, lengthof(tbl), d, {c1, c2, c3}, proc, {p1, p2}, {r1, r2}, m, \ - {a1, a2, a3}, pr, clim, bev, col, in, intx, s1, s2, s3, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, 0, 0, 0, 0} + {a1, a2, a3}, {{im1, 0}, {im2, 0}, {im3, 0}}, pr, clim, bev, col, in, intx, s1, s2, s3, {ai1, ai2, ai3, ai4}, {ag1, ag2, ag3, ag4}, 0, 0, 0, 0} static const IndustrySpec _industry_specs[] = { /* Format: @@ -1132,7 +1135,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_coal_mine, 210, 2, 3, 0, 0, 8, 8, 0, 0, 215, IT_POWER_STATION, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COAL, 15, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TEMPERATE | 1 << LT_ARCTIC, INDUSTRYBEH_CAN_SUBSIDENCE, STR_4802_COAL_MINE, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1141,7 +1144,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_power_station, 30, 2, 2, 0, 0, 5, 5, 0, 0, 184, IT_COAL_MINE, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, - CT_COAL, CT_INVALID, CT_INVALID, + CT_COAL, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_TEMPERATE | 1 << LT_ARCTIC, INDUSTRYBEH_NONE, STR_4803_POWER_STATION, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1150,7 +1153,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_sawmill, 28, 2, 0, 0, 0, 5, 0, 0, 0, 194, IT_FOREST, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_GOODS, 0, CT_INVALID, 0, 5, - CT_WOOD, CT_INVALID, CT_INVALID, + CT_WOOD, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_TEMPERATE, INDUSTRYBEH_NONE, STR_4804_SAWMILL, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1159,7 +1162,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_forest, 200, 3, 4, 0, 0, 5, 5, 0, 0, 86, IT_SAWMILL, IT_PAPER_MILL, IT_INVALID, CHECK_FOREST, CT_WOOD, 13, CT_INVALID, 0, 30, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TEMPERATE | 1 << LT_ARCTIC, INDUSTRYBEH_NONE, STR_4805_FOREST, STR_482E_NEW_BEING_PLANTED_NEAR, @@ -1168,7 +1171,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_oil_refinery, 31, 2, 2, 2, 0, 4, 4, 4, 0, 191, IT_OIL_RIG, IT_INVALID, IT_INVALID, CHECK_REFINERY, CT_GOODS, 0, CT_INVALID, 0, 5, - CT_OIL, CT_INVALID, CT_INVALID, + CT_OIL, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC, INDUSTRYBEH_AIRPLANE_ATTACKS, STR_4806_OIL_REFINERY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1177,7 +1180,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_oil_rig, 240, 6, 0, 0, 0, 0, 0, 0, 0, 152, IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_OIL_RIG, CT_OIL, 15, CT_PASSENGERS, 2, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TEMPERATE, INDUSTRYBEH_BUILT_ONWATER | INDUSTRYBEH_AFTER_1960 | INDUSTRYBEH_AI_AIRSHIP_ROUTES, STR_4807_OIL_RIG, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1186,7 +1189,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_factory, 26, 2, 0, 0, 0, 5, 0, 0, 0, 174, IT_FARM, IT_STEEL_MILL, IT_INVALID, CHECK_NOTHING, CT_GOODS, 0, CT_INVALID, 0, 5, - CT_LIVESTOCK, CT_GRAIN, CT_STEEL, + CT_LIVESTOCK, 256, CT_GRAIN , 256, CT_STEEL, 256, INDUSTRYLIFE_CLOSABLE, 1 << LT_TEMPERATE, INDUSTRYBEH_CHOPPER_ATTACKS, STR_4808_FACTORY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1195,7 +1198,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_printing_works, 26, 0, 2, 0, 0, 0, 5, 0, 0, 174, IT_PAPER_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_GOODS, 0, CT_INVALID, 0, 5, - CT_PAPER, CT_INVALID, CT_INVALID, + CT_PAPER, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_ARCTIC, INDUSTRYBEH_NONE, STR_4809_PRINTING_WORKS, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1204,7 +1207,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_steel_mill, 27, 2, 0, 0, 0, 5, 0, 0, 0, 10, IT_IRON_MINE, IT_FACTORY, IT_INVALID, CHECK_NOTHING, CT_STEEL, 0, CT_INVALID, 0, 5, - CT_IRON_ORE, CT_INVALID, CT_INVALID, + CT_IRON_ORE, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_TEMPERATE, INDUSTRYBEH_NONE, STR_480A_STEEL_MILL, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1213,7 +1216,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_farm, 250, 2, 4, 0, 0, 9, 9, 0, 0, 48, IT_FACTORY, IT_FOOD_PROCESS, IT_INVALID, CHECK_FARM, CT_GRAIN, 10, CT_LIVESTOCK, 10, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TEMPERATE | 1 << LT_ARCTIC, INDUSTRYBEH_PLANT_FIELDS | INDUSTRYBEH_PLANT_ON_BUILT, STR_480B_FARM, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1222,7 +1225,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_copper_mine, 205, 0, 0, 3, 0, 0, 0, 4, 0, 10, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COPPER_ORE, 10, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_480C_COPPER_ORE_MINE, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1231,7 +1234,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_oil_well, 220, 0, 5, 3, 0, 4, 5, 5, 0, 152, IT_OIL_REFINERY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_OIL, 12, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TEMPERATE | 1 << LT_ARCTIC | 1 << LT_TROPIC, INDUSTRYBEH_DONT_INCR_PROD | INDUSTRYBEH_BEFORE_1950, STR_480D_OIL_WELLS, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1240,7 +1243,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_bank, 193, 7, 0, 0, 0, 0, 0, 0, 0, 15, IT_BANK_TEMP, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_VALUABLES, 6, CT_INVALID, 0, 5, - CT_VALUABLES, CT_INVALID, CT_INVALID, + CT_VALUABLES, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_TEMPERATE, INDUSTRYBEH_TOWN1200_MORE | INDUSTRYBEH_ONLY_INTOWN, STR_480E_BANK, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1249,7 +1252,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_food_process, 26, 0, 2, 2, 0, 0, 3, 4, 0, 55, IT_FRUIT_PLANTATION, IT_FARM, IT_FARM_2, CHECK_NOTHING, CT_FOOD, 0, CT_INVALID, 0, 5, - CT_FRUIT, CT_MAIZE, CT_INVALID, + CT_FRUIT, 256, CT_MAIZE, 256, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_ARCTIC | 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_480F_FOOD_PROCESSING_PLANT, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1258,7 +1261,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_paper_mill, 28, 0, 2, 0, 0, 0, 5, 0, 0, 10, IT_FOREST, IT_PRINTING_WORKS, IT_INVALID, CHECK_NOTHING, CT_PAPER, 0, CT_INVALID, 0, 5, - CT_WOOD, CT_INVALID, CT_INVALID, + CT_WOOD, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_ARCTIC, INDUSTRYBEH_NONE, STR_4810_PAPER_MILL, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1267,7 +1270,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_gold_mine, 208, 0, 3, 0, 0, 0, 4, 0, 0, 194, IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_GOLD, 7, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_ARCTIC, INDUSTRYBEH_NONE, STR_4811_GOLD_MINE, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1276,7 +1279,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_bank2, 19, 0, 3, 3, 0, 0, 6, 5, 0, 15, IT_GOLD_MINE, IT_DIAMOND_MINE, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, - CT_GOLD, CT_INVALID, CT_INVALID, + CT_GOLD, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_ARCTIC | 1 << LT_TROPIC, INDUSTRYBEH_ONLY_INTOWN, STR_4812_BANK, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1285,7 +1288,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_diamond_mine, 213, 0, 0, 3, 0, 0, 0, 4, 0, 184, IT_BANK_TROPIC_ARCTIC, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_DIAMONDS, 7, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_4813_DIAMOND_MINE, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1294,7 +1297,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_iron_mine, 220, 2, 0, 0, 0, 5, 0, 0, 0, 55, IT_STEEL_MILL, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_IRON_ORE, 10, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TEMPERATE, INDUSTRYBEH_NONE, STR_4814_IRON_ORE_MINE, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1303,7 +1306,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_fruit_plantation, 225, 0, 0, 2, 0, 0, 0, 4, 0, 86, IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_FRUIT, 10, CT_INVALID, 0, 15, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_4815_FRUIT_PLANTATION, STR_482E_NEW_BEING_PLANTED_NEAR, @@ -1312,7 +1315,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_rubber_plantation, 218, 0, 0, 3, 0, 0, 0, 4, 0, 39, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_RUBBER, 10, CT_INVALID, 0, 15, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_4816_RUBBER_PLANTATION, STR_482E_NEW_BEING_PLANTED_NEAR, @@ -1321,7 +1324,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_water_supply, 199, 0, 0, 3, 0, 0, 0, 4, 0, 37, IT_WATER_TOWER, IT_INVALID, IT_INVALID, CHECK_WATER, CT_WATER, 12, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_4817_WATER_SUPPLY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1330,7 +1333,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_water_tower, 14, 0, 0, 4, 0, 0, 0, 8, 0, 208, IT_WATER_SUPPLY, IT_INVALID, IT_INVALID, CHECK_WATER, CT_INVALID, 0, CT_INVALID, 0, 5, - CT_WATER, CT_INVALID, CT_INVALID, + CT_WATER, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_TROPIC, INDUSTRYBEH_ONLY_INTOWN, STR_4818_WATER_TOWER, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1339,7 +1342,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_factory2, 26, 0, 0, 2, 0, 0, 0, 4, 0, 174, IT_RUBBER_PLANTATION, IT_COPPER_MINE, IT_LUMBER_MILL, CHECK_PLANTATION, CT_GOODS, 0, CT_INVALID, 0, 5, - CT_RUBBER, CT_COPPER_ORE, CT_WOOD, + CT_RUBBER, 256, CT_COPPER_ORE, 256, CT_WOOD, 256, INDUSTRYLIFE_CLOSABLE, 1 << LT_TROPIC, INDUSTRYBEH_NONE, STR_4819_FACTORY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1348,7 +1351,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_farm2, 250, 0, 0, 1, 0, 0, 0, 2, 0, 48, IT_FOOD_PROCESS, IT_INVALID, IT_INVALID, CHECK_PLANTATION, CT_MAIZE, 11, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TROPIC, INDUSTRYBEH_PLANT_FIELDS | INDUSTRYBEH_PLANT_ON_BUILT, STR_481A_FARM, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1357,7 +1360,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_lumber_mill, 17, 0, 0, 0, 0, 0, 0, 0, 0, 194, IT_FACTORY_2, IT_INVALID, IT_INVALID, CHECK_LUMBERMILL, CT_WOOD, 0, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_TROPIC, INDUSTRYBEH_CUT_TREES, STR_481B_LUMBER_MILL, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1366,7 +1369,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_cotton_candy, 195, 0, 0, 0, 3, 0, 0, 0, 5, 48, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COTTON_CANDY, 13, CT_INVALID, 0, 30, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_481C_COTTON_CANDY_FOREST, STR_482E_NEW_BEING_PLANTED_NEAR, @@ -1375,7 +1378,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_candy_factory, 26, 0, 0, 0, 3, 0, 0, 0, 5, 174, IT_COTTON_CANDY, IT_TOFFEE_QUARRY, IT_SUGAR_MINE, CHECK_NOTHING, CT_CANDY, 0, CT_INVALID, 0, 5, - CT_SUGAR, CT_TOFFEE, CT_COTTON_CANDY, + CT_SUGAR, 256, CT_TOFFEE, 256, CT_COTTON_CANDY, 256, INDUSTRYLIFE_CLOSABLE, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_481D_CANDY_FACTORY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1384,7 +1387,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_battery_farm, 187, 0, 0, 0, 3, 0, 0, 0, 4, 39, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_BATTERIES, 11, CT_INVALID, 0, 30, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_481E_BATTERY_FARM, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1393,7 +1396,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_cola_wells, 193, 0, 0, 0, 3, 0, 0, 0, 5, 55, IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_COLA, 12, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_481F_COLA_WELLS, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1402,7 +1405,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_toy_shop, 17, 0, 0, 0, 3, 0, 0, 0, 4, 208, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_INVALID, 0, CT_INVALID, 0, 5, - CT_TOYS, CT_INVALID, CT_INVALID, + CT_TOYS, 256, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_NOT_CLOSABLE, 1 << LT_TOYLAND, INDUSTRYBEH_ONLY_NEARTOWN, STR_4820_TOY_SHOP, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1411,7 +1414,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_toy_factory, 20, 0, 0, 0, 3, 0, 0, 0, 5, 10, IT_PLASTIC_FOUNTAINS, IT_BATTERY_FARM, IT_TOY_SHOP, CHECK_NOTHING, CT_TOYS, 0, CT_INVALID, 0, 5, - CT_PLASTIC, CT_BATTERIES, CT_INVALID, + CT_PLASTIC, 256, CT_BATTERIES, 256, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_4821_TOY_FACTORY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1420,7 +1423,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_plastic_fountain, 192, 0, 0, 0, 3, 0, 0, 0, 5, 37, IT_TOY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_PLASTIC, 14, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_4822_PLASTIC_FOUNTAINS, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1429,7 +1432,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_fizzy_drink, 22, 0, 0, 0, 3, 0, 0, 0, 4, 184, IT_COLA_WELLS, IT_BUBBLE_GENERATOR, IT_INVALID, CHECK_NOTHING, CT_FIZZY_DRINKS, 0, CT_INVALID, 0, 5, - CT_COLA, CT_BUBBLES, CT_INVALID, + CT_COLA, 256, CT_BUBBLES, 256, CT_INVALID, 0, INDUSTRYLIFE_CLOSABLE, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_4823_FIZZY_DRINK_FACTORY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1438,7 +1441,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_bubble_generator, 203, 0, 0, 0, 3, 0, 0, 0, 5, 152, IT_FIZZY_DRINK_FACTORY, IT_INVALID, IT_INVALID, CHECK_BUBBLEGEN, CT_BUBBLES, 13, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_4824_BUBBLE_GENERATOR, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1447,7 +1450,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_toffee_quarry, 213, 0, 0, 0, 3, 0, 0, 0, 5, 194, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_TOFFEE, 10, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_4825_TOFFEE_QUARRY, STR_482D_NEW_UNDER_CONSTRUCTION, @@ -1456,7 +1459,7 @@ static const IndustrySpec _industry_specs[] = { MI(_tile_table_sugar_mine, 210, 0, 0, 0, 2, 0, 0, 0, 4, 15, IT_CANDY_FACTORY, IT_INVALID, IT_INVALID, CHECK_NOTHING, CT_SUGAR, 11, CT_INVALID, 0, 5, - CT_INVALID, CT_INVALID, CT_INVALID, + CT_INVALID, 0, CT_INVALID, 0, CT_INVALID, 0, INDUSTRYLIFE_PRODUCTION, 1 << LT_TOYLAND, INDUSTRYBEH_NONE, STR_4826_SUGAR_MINE, STR_482D_NEW_UNDER_CONSTRUCTION, |