This is the nml that makes for forest that is slope aware and snow aware.
Code: Select all
/*
* This file is part of FIRS industry set.
* FIRS industry set is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* FIRS industry set is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with FIRS industry set. If not, see <http://www.gnu.org/licenses/>.
*/
/* **************
* tile_trees
* *************/
spritelayout forest_tree_tile_layout { ground { sprite: GROUNDSPRITE_NORMAL + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; } childsprite { sprite: GROUNDSPRITE_DESERT + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; always_draw: 1; hide_sprite: (climate != CLIMATE_TROPIC) || (climate == CLIMATE_TROPIC) && (nearby_tile_terrain_type(0, 0) != TILETYPE_DESERT); } childsprite { sprite: 4512 + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; always_draw: 1; hide_sprite: (climate != CLIMATE_TROPIC) || (climate == CLIMATE_TROPIC) && (nearby_tile_terrain_type(0, 0) == TILETYPE_DESERT) || (climate == CLIMATE_TROPIC) && (nearby_tile_terrain_type(0, 0) == TILETYPE_NORMAL) && ((nearby_tile_terrain_type( 1, 0) != TILETYPE_DESERT) && (nearby_tile_terrain_type(-1, 0) != TILETYPE_DESERT) && (nearby_tile_terrain_type( 0, 1) != TILETYPE_DESERT) && (nearby_tile_terrain_type( 0,-1) != TILETYPE_DESERT)); } childsprite { sprite: GROUNDSPRITE_SNOW + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; always_draw: 1; hide_sprite: (climate != CLIMATE_ARCTIC) || (climate == CLIMATE_ARCTIC) && (nearby_tile_height(0, 0) < (snowline_height + 2)); } childsprite { sprite: 4531 + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; always_draw: 1; hide_sprite: (climate != CLIMATE_ARCTIC) || (climate == CLIMATE_ARCTIC) && ((nearby_tile_height(0, 0) < (snowline_height + 1)) || (nearby_tile_height(0, 0) >= (snowline_height + 2))); } childsprite { sprite: 4512 + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; always_draw: 1; hide_sprite: (climate != CLIMATE_ARCTIC) || (climate == CLIMATE_ARCTIC) && ((nearby_tile_height(0, 0) < (snowline_height + 0)) || (nearby_tile_height(0, 0) >= (snowline_height + 1))); } childsprite { sprite: 4493 + slope_to_sprite_offset(nearby_tile_slope(0, 0)); recolour_mode: RECOLOUR_REMAP; palette: PALETTE_USE_DEFAULT; always_draw: 1; hide_sprite: (climate != CLIMATE_ARCTIC) || (climate == CLIMATE_ARCTIC) && ((nearby_tile_height(0, 0) < (snowline_height - 1)) || (nearby_tile_height(0, 0) >= (snowline_height + 0))); }
building {
sprite: 1586;
xoffset: 2;
yoffset: 2;
xextent: 13;
yextent: 13;
hide_sprite: climate != CLIMATE_TEMPERATE;
}
building {
sprite: 1593;
xoffset: 8;
yoffset: 2;
xextent: 7;
yextent: 13;
hide_sprite: climate != CLIMATE_TEMPERATE;
}
building {
sprite: 1593;
yoffset: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_TEMPERATE;
}
building {
sprite: 1586;
xoffset: 8;
yoffset: 7;
xextent: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_TEMPERATE;
}
building {
sprite: 1817;
xoffset: 2;
yoffset: 2;
xextent: 13;
yextent: 13;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) < snowline_height;
}
building {
sprite: 1775;
xoffset: 8;
yoffset: 2;
xextent: 7;
yextent: 13;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) < snowline_height;
}
building {
sprite: 1817;
yoffset: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) < snowline_height;
}
building {
sprite: 1775;
xoffset: 8;
yoffset: 7;
xextent: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) < snowline_height;
}
building {
sprite: 1760;
xoffset: 2;
yoffset: 2;
xextent: 13;
yextent: 13;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) >= snowline_height;
}
building {
sprite: 1719;
xoffset: 8;
yoffset: 2;
xextent: 7;
yextent: 13;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) >= snowline_height;
}
building {
sprite: 1760;
yoffset: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) >= snowline_height;
}
building {
sprite: 1719;
xoffset: 8;
yoffset: 7;
xextent: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_ARCTIC || nearby_tile_height(0, 0) >= snowline_height;
}
building {
sprite: 1915;
xoffset: 2;
yoffset: 2;
xextent: 13;
yextent: 13;
hide_sprite: climate != CLIMATE_TROPICAL || nearby_tile_terrain_type(0, 0) != TILETYPE_DESERT;
}
building {
sprite: 1923;
xoffset: 8;
yoffset: 2;
xextent: 7;
yextent: 13;
hide_sprite: climate != CLIMATE_TROPICAL || nearby_tile_terrain_type(0, 0) != TILETYPE_DESERT;
}
building {
sprite: 1923;
yoffset: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_TROPICAL || nearby_tile_terrain_type(0, 0) != TILETYPE_DESERT;
}
building {
sprite: 1915;
xoffset: 8;
yoffset: 7;
xextent: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_TROPICAL || nearby_tile_terrain_type(0, 0) != TILETYPE_DESERT;
}
building {
sprite: 1845;
xoffset: 2;
yoffset: 2;
xextent: 13;
yextent: 13;
hide_sprite: climate != CLIMATE_TROPICAL || (climate == CLIMATE_TROPICAL && nearby_tile_terrain_type(0, 0) == TILETYPE_DESERT);
}
building {
sprite: 1866;
xoffset: 8;
yoffset: 2;
xextent: 7;
yextent: 13;
hide_sprite: climate != CLIMATE_TROPICAL || (climate == CLIMATE_TROPICAL && nearby_tile_terrain_type(0, 0) == TILETYPE_DESERT);
}
building {
sprite: 1845;
yoffset: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_TROPICAL || (climate == CLIMATE_TROPICAL && nearby_tile_terrain_type(0, 0) == TILETYPE_DESERT);
}
building {
sprite: 1866;
xoffset: 8;
yoffset: 7;
xextent: 7;
yextent: 8;
hide_sprite: climate != CLIMATE_TROPICAL || (climate == CLIMATE_TROPICAL && nearby_tile_terrain_type(0, 0) == TILETYPE_DESERT);
}
}
/* **************
* tile_equipment
* *************/
spriteset(spriteset_crane, "src/graphics/industries/forest_1.png") { tmpl_building_sprite(10, 10, 78, -45) }
spriteset(spriteset_bulldozer, "src/graphics/industries/forest_1.png") { tmpl_building_sprite(80, 10, 78, -45) }
spriteset(spriteset_tracks_snowtile, "src/graphics/industries/forest_1.png") { tmpl_building_sprite(220, 10, 78, -45) }
spritelayout forest_tile_equipment_nonsnow_spritelayout {
ground {
sprite: 2022;
}
building {
sprite: spriteset_crane;
recolour_mode: RECOLOUR_REMAP;
palette: 0;
xextent: 7;
yextent: 7;
zextent: 7;
always_draw: 1;
}
building {
sprite: spriteset_bulldozer;
recolour_mode: RECOLOUR_REMAP;
palette: 0;
xextent: 7;
yextent: 7;
zextent: 7;
always_draw: 1;
}
}
spritelayout forest_tile_equipment_snow_spritelayout {
ground {
sprite: spriteset_tracks_snowtile;
recolour_mode: RECOLOUR_REMAP;
palette: 0;
}
building {
sprite: spriteset_crane;
recolour_mode: RECOLOUR_REMAP;
palette: 0;
xextent: 7;
yextent: 7;
zextent: 7;
always_draw: 1;
}
building {
sprite: spriteset_bulldozer;
recolour_mode: RECOLOUR_REMAP;
palette: 0;
xextent: 7;
yextent: 7;
zextent: 7;
always_draw: 1;
}
}
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_equipment_height_check, UCMP(nearby_tile_height(0, 0) - 0, snowline_height - 0)) { 0..1: forest_tile_equipment_nonsnow_spritelayout; forest_tile_equipment_snow_spritelayout; }
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_equipment_spritelayout, climate) {
CLIMATE_ARCTIC: forest_tile_equipment_height_check;
forest_tile_equipment_nonsnow_spritelayout;
}
/* ****************************************************
* Definition of the industry tiles and their callbacks
* ***************************************************/
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_trees_nearby_industry, (nearby_tile_class( 1, 1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 1, 0) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 1, -1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 0, -1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class(-1, -1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class(-1, 0) == TILE_CLASS_INDUSTRY) | (nearby_tile_class(-1, 1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 0, 1) == TILE_CLASS_INDUSTRY)) { 1: return CB_RESULT_LOCATION_DISALLOW; return CB_RESULT_LOCATION_ALLOW; }
switch (FEAT_INDUSTRYTILES, PARENT, forest_tile_trees_player_check, ( (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_FUND) || (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_PROSPECT) ) ) { 1: return CB_RESULT_LOCATION_ALLOW; forest_tile_trees_nearby_industry; }
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_trees_water_check, nearby_tile_is_water(0, 0)) { 1: string(STR_ERR_LOCATION_NOT_ON_WATER); forest_tile_trees_player_check; }
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_trees_location_check, (nearby_tile_terrain_type( 1, -1) == TILETYPE_DESERT) && (nearby_tile_terrain_type( 1, 0) == TILETYPE_DESERT) && (nearby_tile_terrain_type( 1, 1) == TILETYPE_DESERT) && (nearby_tile_terrain_type( 0, -1) == TILETYPE_DESERT) && (nearby_tile_terrain_type( 0, 0) == TILETYPE_DESERT) && (nearby_tile_terrain_type( 0, 1) == TILETYPE_DESERT) && (nearby_tile_terrain_type(-1, -1) == TILETYPE_DESERT) && (nearby_tile_terrain_type(-1, 0) == TILETYPE_DESERT) && (nearby_tile_terrain_type(-1, 1) == TILETYPE_DESERT) ) { 1: return string(STR_ERR_LOCATION_NOT_IN_DESERT); forest_tile_trees_water_check; }
item(FEAT_INDUSTRYTILES, tile_trees, 205) {
property {
substitute: 0;
accepted_cargos: [[FMSP, 8]];
land_shape_flags: 0;
}
graphics {
foundations: return CB_RESULT_NO_FOUNDATIONS;
autoslope: return CB_RESULT_NO_AUTOSLOPE;
tile_check: forest_tile_trees_location_check;
forest_tree_tile_layout;
}
}
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_equipment_nearby_industry, (nearby_tile_class( 1, 1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 1, 0) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 1, -1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 0, -1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class(-1, -1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class(-1, 0) == TILE_CLASS_INDUSTRY) | (nearby_tile_class(-1, 1) == TILE_CLASS_INDUSTRY) | (nearby_tile_class( 0, 1) == TILE_CLASS_INDUSTRY)) { 1: return CB_RESULT_LOCATION_DISALLOW; return CB_RESULT_LOCATION_ALLOW; }
switch (FEAT_INDUSTRYTILES, PARENT, forest_tile_equipment_player_check, ( (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_FUND) || (((extra_callback_info2 & 0xFF00) >> 8) == IND_CREATION_PROSPECT) ) ) { 1: return CB_RESULT_LOCATION_ALLOW; forest_tile_equipment_nearby_industry; }
switch(FEAT_INDUSTRYTILES, SELF, forest_tile_equipment_location_check, nearby_tile_is_water(0, 0)) { 1: CB_RESULT_LOCATION_DISALLOW; forest_tile_equipment_player_check; }
item(FEAT_INDUSTRYTILES, tile_equipment, 206) {
property {
substitute: 0;
accepted_cargos: [[FMSP, 8]];
land_shape_flags: 0;
}
graphics {
tile_check: forest_tile_equipment_location_check;
forest_tile_equipment_spritelayout;
}
}
/* *************************************************
* Definition of the industry layouts
* *************************************************/
tilelayout tilelayout_forest_1 {
0, 0: tile_trees;
0, 1: tile_trees;
0, 2: tile_trees;
1, 0: tile_trees;
1, 1: tile_trees;
1, 2: tile_trees;
2, 1: tile_trees;
2, 2: tile_equipment;
}
tilelayout tilelayout_forest_2 {
0, 0: tile_trees;
0, 1: tile_trees;
0, 2: tile_trees;
1, 0: tile_trees;
1, 1: tile_trees;
1, 2: tile_trees;
3, 0: tile_trees;
3, 1: tile_trees;
3, 2: tile_equipment;
4, 0: tile_trees;
4, 1: tile_trees;
4, 2: tile_trees;
}
tilelayout tilelayout_forest_3 {
0, 1: tile_trees;
0, 2: tile_trees;
0, 3: tile_trees;
1, 0: tile_trees;
1, 1: tile_trees;
1, 2: tile_trees;
1, 3: tile_trees;
1, 4: tile_trees;
2, 0: tile_trees;
2, 1: tile_trees;
2, 2: tile_trees;
2, 3: tile_trees;
3, 0: tile_trees;
3, 1: tile_trees;
3, 2: tile_equipment;
4, 0: tile_trees;
4, 1: tile_trees;
5, 0: tile_trees;
5, 1: tile_trees;
5, 2: tile_trees;
}
/* *************************************************
* Definition of the industry
* *************************************************/
switch (FEAT_INDUSTRIES, SELF, forest_forest, industry_count(forest) * 3 / 4 / industry_clusters != 0 && ( industry_distance(forest) < 15 || industry_distance(forest) > 80) ) { 1: return CB_RESULT_LOCATION_DISALLOW; return CB_RESULT_LOCATION_ALLOW; }
switch (FEAT_INDUSTRIES, SELF, forest_sawmill, industry_distance(sawmill)) { 0 .. 16: return CB_RESULT_LOCATION_DISALLOW; forest_forest; }
switch (FEAT_INDUSTRIES, SELF, forest_paper_mill, industry_distance(paper_mill)) { 0 .. 16: return CB_RESULT_LOCATION_DISALLOW; forest_sawmill; }
switch (FEAT_INDUSTRIES, SELF, forest_check_location, ( (extra_callback_info2 == IND_CREATION_FUND) || (extra_callback_info2 == IND_CREATION_PROSPECT) ) ) { 1: return CB_RESULT_LOCATION_ALLOW; forest_paper_mill; }
switch(FEAT_INDUSTRIES, SELF, forest_colour, colour) { 0: return 0; 1: return 1; 2: return 2; 3: return 13; 4: return 2; 5: return 5; 6: return 1; 7: return 1; 8: return 0; 9: return 14; 10: return 10; 11: return 11; 12: return 13; 13: return 13; 14: return 14; 15: return 14; return 0; }
/*
* This file is part of FIRS industry set.
* FIRS industry set is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* FIRS industry set is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with FIRS industry set. If not, see <http://www.gnu.org/licenses/>.
*/
/* Template to handle defining supply requirements, and display of extra text for primary industries
*
* No debug texts. Show extra text about influence of supplies
*
*/
/* used by production template */
/* extra text */
switch(FEAT_INDUSTRIES, SELF, forest_extra_text, LOAD_PERM(3)) {
3: return string(STR_PRIMARY_PRODUCTION_4X, 56);
1: return string(STR_PRIMARY_PRODUCTION_2X, 14, 56);
return string(STR_PRIMARY_PRODUCTION_1X, 14, 56);
}
# 1 "generated/pnml/../../src/templates/produce_primary.pnml" 1
/*
* This file is part of FIRS industry set.
* FIRS industry set is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* FIRS industry set is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with FIRS industry set. If not, see <http://www.gnu.org/licenses/>.
*/
/* Primary production which is boosted by supplies */
produce(forest_production, 9999, 9999, 9999, 0, 0, 0);
switch(FEAT_INDUSTRIES, SELF, forest_produce, STORE_PERM(waiting_cargo_1 + waiting_cargo_2 + waiting_cargo_3 + LOAD_PERM(0), 0)) {
forest_production;
}
produce(forest_production_256, 0, 0, 0, LOAD_TEMP(9) * production_rate_1, LOAD_TEMP(9) * production_rate_2, 0);
switch(FEAT_INDUSTRIES, SELF, forest_produce_256_ticks,
[STORE_TEMP(
LOAD_PERM(0) +
LOAD_PERM(1) +
LOAD_PERM(2),
8),
STORE_TEMP((LOAD_TEMP(8) >= 56) ? 3 : ((LOAD_TEMP(8) >= 14) ? 1 : 0), 9),
STORE_PERM(LOAD_TEMP(9), 3)
]) {
forest_production_256;
}
# 368 "generated/pnml/forest.pnml" 2
# 1 "generated/pnml/../../src/templates/check_primary_production_level.pnml" 1
/*
* This file is part of FIRS industry set.
* FIRS industry set is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* FIRS industry set is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with FIRS industry set. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* This template is for use with primary industries which support supply usage
*
* Used permanent storage: var_num_supplies_delivered
*
* Usage in the industry's pnml:
* monthly callback: THIS_ID(check_production_level)
*
*/
/* =================================== */
/* Production change evaluated monthly */
/* =================================== */
switch(FEAT_INDUSTRIES, SELF, forest_monthly_update, [
STORE_PERM(LOAD_PERM(1), 2),
STORE_PERM(LOAD_PERM(0), 1),
STORE_PERM(0, 0)
]) {
return CB_RESULT_IND_PROD_NO_CHANGE;
}
# 369 "generated/pnml/forest.pnml" 2
# 1 "generated/pnml/../../src/templates/check_availability.pnml" 1
/*
* This file is part of FIRS industry set.
* FIRS industry set is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
* FIRS industry set is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
* See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with FIRS industry set. If not, see <http://www.gnu.org/licenses/>.
*/
/*
* Template which checks availability of an industry for building
* - Allow in THIS_MIN_YEAR ... THIS_MAX_YEAR
* - Always allow in SE
* - Never allow when NewGRF parameter forbids building
* - Always allow otherwise
*
* Optionally an industry may define in its pnml file
* THIS_MIN_YEAR first availability year
* THIS_MAX_YEAR last availability year
*/
# 29 "generated/pnml/../../src/templates/check_availability.pnml"
/* Check for restriction via parameter */
switch(FEAT_INDUSTRIES, SELF, forest_check_availability_param, restrict_open_during_gameplay) {
1..255: return CB_RESULT_IND_NO_CONSTRUCTION; // disallow when restrictions in place
return CB_RESULT_IND_PROBABILITY_FROM_PROPERTY; // we may build
}
/* Allow always during map gen */
switch (FEAT_INDUSTRIES, SELF, forest_check_map_gen, extra_callback_info2 == IND_CREATION_GENERATION) {
1: return CB_RESULT_IND_PROBABILITY_FROM_PROPERTY;
forest_check_availability_param;
}
/* Allow always in the scenario editor */
switch (FEAT_INDUSTRIES, SELF, forest_available_game_mode, game_mode == GAMEMODE_GAME) {
1: forest_check_map_gen;
return CB_RESULT_IND_PROBABILITY_FROM_PROPERTY;
}
/* Allow only within the availability years */
switch (FEAT_INDUSTRIES, SELF, forest_check_availability, current_date) {
date(0,1,1) .. date(5000000,12,31): forest_available_game_mode;
return CB_RESULT_IND_NO_CONSTRUCTION;
}
# 372 "generated/pnml/forest.pnml" 2
if (economy==0) {
item(FEAT_INDUSTRIES, forest, 11) {
property {
substitute: INDUSTRYTYPE_FOREST;
life_type: IND_LIFE_TYPE_ORGANIC;
closure_msg: TTD_STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS;
prod_increase_msg: TTD_STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL;
prod_decrease_msg: TTD_STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL;
new_ind_msg: TTD_STR_NEWS_INDUSTRY_CONSTRUCTION;
map_colour: 81;
spec_flags: 0;
layouts: [tilelayout_forest_1, tilelayout_forest_2, tilelayout_forest_3];
conflicting_ind_types: []; // set this prop empty, FIRS has it's own better checks for this
name: TTD_STR_INDUSTRY_NAME_FOREST;
prod_multiplier: [19];
prob_random: 8;
prob_in_game: 3;
prospect_chance: 0.75;
fund_cost_multiplier: 95;
accept_cargo_types: [FMSP];
prod_cargo_types: [WOOD];
}
}
}
if (economy==1) {
}
if (economy==2) {
item(FEAT_INDUSTRIES, forest, 11) {
property {
substitute: INDUSTRYTYPE_FOREST;
life_type: IND_LIFE_TYPE_ORGANIC;
closure_msg: TTD_STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS;
prod_increase_msg: TTD_STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL;
prod_decrease_msg: TTD_STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL;
new_ind_msg: TTD_STR_NEWS_INDUSTRY_CONSTRUCTION;
map_colour: 81;
spec_flags: 0;
layouts: [tilelayout_forest_1, tilelayout_forest_2, tilelayout_forest_3];
conflicting_ind_types: []; // set this prop empty, FIRS has it's own better checks for this
name: TTD_STR_INDUSTRY_NAME_FOREST;
prod_multiplier: [19];
prob_random: 8;
prob_in_game: 3;
prospect_chance: 0.75;
fund_cost_multiplier: 95;
accept_cargo_types: [FMSP];
prod_cargo_types: [WOOD];
}
}
}
if (economy==3) {
}
if (economy==4) {
item(FEAT_INDUSTRIES, forest, 11) {
property {
substitute: INDUSTRYTYPE_FOREST;
life_type: IND_LIFE_TYPE_ORGANIC;
closure_msg: TTD_STR_NEWS_INDUSTRY_CLOSURE_SUPPLY_PROBLEMS;
prod_increase_msg: TTD_STR_NEWS_INDUSTRY_PRODUCTION_INCREASE_GENERAL;
prod_decrease_msg: TTD_STR_NEWS_INDUSTRY_PRODUCTION_DECREASE_GENERAL;
new_ind_msg: TTD_STR_NEWS_INDUSTRY_CONSTRUCTION;
map_colour: 81;
spec_flags: 0;
layouts: [tilelayout_forest_1, tilelayout_forest_2, tilelayout_forest_3];
conflicting_ind_types: []; // set this prop empty, FIRS has it's own better checks for this
name: TTD_STR_INDUSTRY_NAME_FOREST;
prod_multiplier: [19];
prob_random: 8;
prob_in_game: 3;
prospect_chance: 0.75;
fund_cost_multiplier: 95;
accept_cargo_types: [FMSP];
prod_cargo_types: [WOOD];
}
}
}
item(FEAT_INDUSTRIES, forest, 11) {
graphics {
produce_cargo_arrival: forest_produce;
construction_probability:forest_check_availability;
location_check: forest_check_location;
produce_256_ticks: forest_produce_256_ticks;
monthly_prod_change: forest_monthly_update;
random_prod_change: return CB_RESULT_IND_PROD_NO_CHANGE;
build_prod_change: randomise_primary_production_on_build;
extra_text_fund: return string(STR_FUND_FOREST);
extra_text_industry: forest_extra_text;
colour: forest_colour;
}
}