OpenTTD Source: src/genworld.cpp File Reference

OpenTTD Source 15.0-beta1

Data Structures | Functions | Variables
genworld.cpp File Reference

Functions to generate a map. More...

`#include "stdafx.h"`
`#include "landscape.h"`
`#include "company_func.h"`
`#include "town_cmd.h"`
`#include "signs_cmd.h"`
`#include "3rdparty/nlohmann/json.hpp"`
`#include "strings_func.h"`
`#include "genworld.h"`
`#include "gfxinit.h"`
`#include "window_func.h"`
`#include "network/network.h"`
`#include "heightmap.h"`
`#include "viewport_func.h"`
`#include "timer/timer_game_calendar.h"`
`#include "timer/timer_game_tick.h"`
`#include "engine_func.h"`
`#include "water.h"`
`#include "video/video_driver.hpp"`
`#include "tilehighlight_func.h"`
`#include "saveload/saveload.h"`
`#include "void_map.h"`
`#include "town.h"`
`#include "newgrf.h"`
`#include "newgrf_house.h"`
`#include "core/random_func.hpp"`
`#include "core/backup_type.hpp"`
`#include "progress.h"`
`#include "error.h"`
`#include "game/game.hpp"`
`#include "game/game_instance.hpp"`
`#include "string_func.h"`
`#include "thread.h"`
`#include "tgp.h"`
`#include "safeguards.h"`

Go to the source code of this file.

## Data Structures
class | AbortGenerateWorldSignal
struct | ExternalTownData
| Town data imported from JSON files and used to place towns. More...

## Functions
void | GenerateClearTile ()
void | GenerateIndustries ()
| This function will create random industries during game creation.
void | GenerateObjects ()
void | GenerateTrees ()
| Place new trees.
void | StartupEconomy ()
void | StartupCompanies ()
| Start of a new game.
void | StartupDisasters ()
void | InitializeGame (uint size_x, uint size_y, bool reset_date, bool reset_settings)
static void | CleanupGeneration ()
| Generation is done; show windows again and delete the progress window.
static void | _GenerateWorld ()
| The internal, real, generate function.
void | GenerateWorldSetCallback (GWDoneProc *proc)
| Set here the function, if any, that you want to be called when landscape generation is done.
void | GenerateWorldSetAbortCallback (GWAbortProc *proc)
| Set here the function, if any, that you want to be called when landscape generation is aborted.
void | AbortGeneratingWorld ()
| Initializes the abortion process.
bool | IsGeneratingWorldAborted ()
| Is the generation being aborted?
void | HandleGeneratingWorldAbortion ()
| Really handle the abortion, i.e.
void | GenerateWorld (GenWorldMode mode, uint size_x, uint size_y, bool reset_settings)
| Generate a world.
static bool | TryFoundTownNearby (TileIndex tile, void *user_data)
| Helper for CircularTileSearch to found a town on or near a given tile.
void | LoadTownData ()
| Load town data from _file_to_saveload, place towns at the appropriate locations, and expand them to their target populations.

## Variables
GenWorldInfo | _gw
| Please only use this variable in genworld.h and genworld.cpp and nowhere else.
bool | _generating_world
| Whether we are generating the map or not.

## Detailed Description

Functions to generate a map.

Definition in file genworld.cpp.

## Function Documentation

## ◆ _GenerateWorld()

static void _GenerateWorld | ( |  | ) |
| static

The internal, real, generate function.

Definition at line 91 of file genworld.cpp.

References _current_company, _generating_world, _gw, _local_company, _network_dedicated, _random, _settings_game, _switch_mode, AUTOSAVE_DIR, CheckTownRoadTypes(), CleanupGeneration(), GameSettings::construction, TimerGameTick::counter, TimerGameEconomy::date, Debug, DEF_SNOWLINE_HEIGHT, DFT_GAME_FILE, GameSettings::economy, FlatEmptyWorld(), ConstructionSettings::freeform_edges, GameSettings::game_creation, Game::GameLoop(), GenerateIndustries(), GenerateLandscape(), GenerateTowns(), GenerateTrees(), GameCreationSettings::generation_seed, Game::GetInstance(), GWM_EMPTY, GWP_GAME_INIT, GWP_GAME_START, GWP_MAP_INIT, GWP_OBJECT, GWP_RUNSCRIPT, GWP_RUNTILELOOP, HandleGeneratingWorldAbortion(), HT_NONE, IncreaseGeneratingWorldProgress(), Backup< T >::IsValid(), GenWorldInfo::lc, MakeVoid(), GenWorldInfo::mode, OWNER_NONE, GenWorldInfo::proc, PSM_ENTER_GAMELOOP, PSM_LEAVE_GAMELOOP, ResetObjectToPlace(), Backup< T >::Restore(), RunTileLoop(), SaveOrLoad(), GameCreationSettings::se_flat_world_height, SetGeneratingWorldProgress(), SetObjectToPlace(), Randomizer::SetSeed(), ShowNewGRFError(), ShowVitalWindows(), Map::SizeX(), Map::SizeY(), SLO_SAVE, GameCreationSettings::snow_line_height, Game::StartNew(), StartupCompanies(), StartupEngines(), BasePersistentStorageArray::SwitchMode(), TileXY(), EconomySettings::town_layout, Backup< T >::Trash(), and WC_MAIN_WINDOW.

Referenced by GenerateWorld().

## ◆ AbortGeneratingWorld()

void AbortGeneratingWorld | ( |  | ) |

Initializes the abortion process.

Definition at line 252 of file genworld.cpp.

References _gw, and GenWorldInfo::abort.

## ◆ CleanupGeneration()

static void CleanupGeneration | ( |  | ) |
| static

Generation is done; show windows again and delete the progress window.

Definition at line 74 of file genworld.cpp.

References _generating_world, _gw, GenWorldInfo::abortp, CloseWindowByClass(), MarkWholeScreenDirty(), GenWorldInfo::proc, SetModalProgress(), SetMouseCursorBusy(), ShowFirstError(), and WC_MODAL_PROGRESS.

Referenced by _GenerateWorld().

## ◆ GenerateClearTile()

void GenerateClearTile | ( |  | ) |

Definition at line 284 of file clear_cmd.cpp.

## ◆ GenerateIndustries()

void GenerateIndustries | ( |  | ) |

This function will create random industries during game creation.

It will scale the amount of industries by mapsize and difficulty level.

Definition at line 2445 of file industry_cmd.cpp.

References _industry_builder, _settings_game, GameSettings::difficulty, GetNumberOfIndustries(), GetScaledIndustryGenerationProbability(), GWP_INDUSTRY, ID_FUND_ONLY, DifficultySettings::industry_density, NUM_INDUSTRYTYPES, PlaceInitialIndustry(), RandomRange(), IndustryBuildData::Reset(), and SetGeneratingWorldProgress().

Referenced by _GenerateWorld().

## ◆ GenerateObjects()

void GenerateObjects | ( |  | ) |

Definition at line 816 of file object_cmd.cpp.

## ◆ GenerateTrees()

void GenerateTrees | ( |  | ) |

Place new trees.

This function takes care of the selected tree placer algorithm and place randomly the trees for a new game.

Definition at line 354 of file tree_cmd.cpp.

References _settings_game, DEFAULT_RAINFOREST_TREE_STEPS, DEFAULT_TREE_STEPS, GameSettings::game_creation, GB(), GWP_TREE, GameCreationSettings::landscape, PlaceTreeGroups(), PlaceTreesRandomly(), Map::ScaleBySize(), SetGeneratingWorldProgress(), TP_IMPROVED, TP_NONE, TP_ORIGINAL, and GameCreationSettings::tree_placer.

Referenced by _GenerateWorld().

## ◆ GenerateWorld()

void GenerateWorld | ( | GenWorldMode | mode,
|  | uint | size_x,
|  | uint | size_y,
|  | bool | reset_settings
| ) |  |

Generate a world.

Parameters

  mode | The mode of world generation (see GenWorldMode).
  size_x | The X-size of the map.
  size_y | The Y-size of the map.
  reset_settings | Whether to reset the game configuration (used for restart)

Definition at line 286 of file genworld.cpp.

References _GenerateWorld(), _gw, _local_company, _settings_game, GenWorldInfo::abort, GenWorldInfo::abortp, CloseAllNonVitalWindows(), COMPANY_SPECTATOR, GameSettings::construction, GameSettings::game_creation, GENERATE_NEW_SEED, GameCreationSettings::generation_seed, GetEstimationTGPMapHeight(), GfxLoadSprites(), GWM_EMPTY, GWM_HEIGHTMAP, HasModalProgress(), GameCreationSettings::heightmap_height, HideVitalWindows(), HT_NONE, InitializeBuildingCounts(), GameCreationSettings::land_generator, GenWorldInfo::lc, LG_TERRAGENESIS, LoadStringWidthTable(), ConstructionSettings::map_height_limit, MAP_HEIGHT_LIMIT_AUTO_CEILING_ROOM, MAP_HEIGHT_LIMIT_AUTO_MINIMUM, MAX_MAP_HEIGHT_LIMIT, GenWorldInfo::mode, PrepareGenerateWorldProgress(), ResetWindowSystem(), ScrollMainWindowToTile(), GameCreationSettings::se_flat_world_height, SetLocalCompany(), SetModalProgress(), SetObjectToPlace(), SetupColoursAndInitialWindow(), ShowGenerateWorldProgress(), GenWorldInfo::size_x, GenWorldInfo::size_y, Map::SizeX(), Map::SizeY(), TileXY(), UnshowCriticalError(), and WC_MAIN_WINDOW.

Referenced by LoadIntroGame(), and openttd_main().

## ◆ GenerateWorldSetAbortCallback()

void GenerateWorldSetAbortCallback | ( | GWAbortProc * | proc | ) |

Set here the function, if any, that you want to be called when landscape generation is aborted.

Parameters

  proc | callback procedure

Definition at line 244 of file genworld.cpp.

References _gw, and GenWorldInfo::abortp.

Referenced by GenerateTerrainPerlin().

## ◆ GenerateWorldSetCallback()

void GenerateWorldSetCallback | ( | GWDoneProc * | proc | ) |

Set here the function, if any, that you want to be called when landscape generation is done.

Parameters

  proc | callback procedure

Definition at line 234 of file genworld.cpp.

References _gw, and GenWorldInfo::proc.

## ◆ HandleGeneratingWorldAbortion()

void HandleGeneratingWorldAbortion | ( |  | ) |

Really handle the abortion, i.e.

clean up some of the mess

Definition at line 269 of file genworld.cpp.

References _gw, _switch_mode, GenWorldInfo::abortp, SM_EDITOR, and SM_MENU.

Referenced by _GenerateWorld().

## ◆ InitializeGame()

void InitializeGame | ( | uint | size_x,
|  | uint | size_y,
|  | bool | reset_date,
|  | bool | reset_settings
| ) |  |

Definition at line 92 of file misc.cpp.

## ◆ IsGeneratingWorldAborted()

bool IsGeneratingWorldAborted | ( |  | ) |

Is the generation being aborted?

Returns
  the 'aborted' status

Definition at line 261 of file genworld.cpp.

References _gw, and GenWorldInfo::abort.

## ◆ LoadTownData()

void LoadTownData | ( |  | ) |

Load town data from _file_to_saveload, place towns at the appropriate locations, and expand them to their target populations.

Definition at line 379 of file genworld.cpp.

References _file_to_saveload, _settings_game, Town::cache, CircularTileSearch(), FioFOpenFile(), GameSettings::game_creation, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem<&_town_pool >::Get(), HEIGHTMAP_DIR, GameCreationSettings::heightmap_rotation, HM_CLOCKWISE, HM_COUNTER_CLOCKWISE, Pool< Titem, Tindex, Tgrowth_step, Tmax_size, Tpool_type, Tcache, Tzero >::PoolItem< Tpool >::index, INVALID_STRING_ID, ExternalTownData::is_city, Map::MaxX(), Map::MaxY(), ExternalTownData::name, FileToSaveLoad::name, TownCache::num_houses, ExternalTownData::population, TownCache::population, SetDParam(), SetDParamStr(), ShowErrorMessage(), TileXY(), ExternalTownData::town_id, TryFoundTownNearby(), WL_ERROR, WL_WARNING, ExternalTownData::x_proportion, and ExternalTownData::y_proportion.

Referenced by SaveLoadWindow::OnClick().

## ◆ StartupCompanies()

void StartupCompanies | ( |  | ) |

Start of a new game.

Definition at line 659 of file company_cmd.cpp.

References _new_competitor_timeout, and TimeoutTimer< TTimerType >::Abort().

Referenced by _GenerateWorld().

## ◆ StartupDisasters()

void StartupDisasters | ( |  | ) |

Definition at line 956 of file disaster_vehicle.cpp.

## ◆ StartupEconomy()

void StartupEconomy | ( |  | ) |

Definition at line 926 of file economy.cpp.

## ◆ TryFoundTownNearby()

static bool TryFoundTownNearby | ( | TileIndex | tile,
|  | void * | user_data
| ) |  |
| static

Helper for CircularTileSearch to found a town on or near a given tile.

Parameters

  tile | The tile to try founding the town upon.
  user_data | The ExternalTownData to attempt to found.

Returns
  True if the town was founded successfully.

Definition at line 361 of file genworld.cpp.

References _settings_game, DC_EXEC, GameSettings::economy, ExternalTownData::is_city, ExternalTownData::name, ExternalTownData::town_id, EconomySettings::town_layout, and TSZ_SMALL.

Referenced by LoadTownData().

## Variable Documentation

## ◆ _generating_world

bool _generating_world

Whether we are generating the map or not.

Definition at line 67 of file genworld.cpp.

Referenced by _GenerateWorld(), BuildTownHouse(), CheckIfIndustryTileSlopes(), CleanupGeneration(), ClosestTownFromTile(), CmdBuildObject(), CmdDeleteTown(), CmdFoundTown(), CmdTerraformLand(), CreateNewIndustryHelper(), CreateRandomTown(), DoCreateNewIndustry(), GenerateDesertArea(), GetTerrainType(), HouseScopeResolver::GetVariable(), HasRoadTypeAvail(), InitializeGRFSpecial(), CommandHelperBase::InternalExecuteValidateTestAndPrepExec(), CommandHelperBase::InternalPostBefore(), ObjectSpec::IsEverAvailable(), IsRoadAllowedHere(), FoundTownWindow::OnClick(), BuildIndustryWindow::OnPlaceObject(), ResetLandscapeConfirmationCallback(), TownAllowedToBuildRoads(), TryBuildTownHouse(), and UpdateNearestTownForRoadTiles().

## ◆ _gw

GenWorldInfo _gw

Please only use this variable in genworld.h and genworld.cpp and nowhere else.

For speed improvements we need it to be global, but in no way the meaning of it is to use it anywhere else besides in the genworld.h and genworld.cpp!

Definition at line 64 of file genworld.cpp.

Referenced by _GenerateWorld(), AbortGeneratingWorld(), CleanupGeneration(), GenerateWorld(), GenerateWorldSetAbortCallback(), GenerateWorldSetCallback(), HandleGeneratingWorldAbortion(), and IsGeneratingWorldAborted().