src/genworld.cpp
author rubidium
Thu, 19 Jun 2008 11:45:52 +0000
changeset 11023 583f32658248
parent 10866 242436c016b8
permissions -rw-r--r--
(svn r13579) -Fix [FS#2088]: process the order coming after a conditional order, otherwise the vehicle would already leaving the station before it knows where the next destination is, making it leave in the wrong way. However, after processing as many conditional orders as there are in the order list it will stop processing them in order to not create an infinite loop.
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
     1
/* $Id$ */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
     2
10429
1b99254f9607 (svn r12971) -Documentation: add @file in files that missed them and add something more than whitespace as description of files that don't have a description.
rubidium
parents: 10223
diff changeset
     3
/** @file genworld.cpp Functions to generate a map. */
6505
abcb0580d976 (svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6144
diff changeset
     4
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
     5
#include "stdafx.h"
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
     6
#include "openttd.h"
6949
72d11a1e1e60 (svn r9609) -Codechange: Move some function prototypes out of functions.h and into landscape.h, and add a few where they didn't exist.
maedhros
parents: 6573
diff changeset
     7
#include "landscape.h"
8750
fdd6054e7bae (svn r11818) -Codechange: split player.h into smaller pieces.
rubidium
parents: 8721
diff changeset
     8
#include "player_func.h"
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
     9
#include "variables.h"
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    10
#include "thread.h"
8612
6414fc21c2f3 (svn r11677) -Codechange: move price and command related types/functions to their respective places.
rubidium
parents: 8603
diff changeset
    11
#include "command_func.h"
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    12
#include "genworld.h"
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    13
#include "gfxinit.h"
8603
88c5ce6a5215 (svn r11668) -Codechange: more refactoring aimed at reducing compile time and making it more logic where function definitions can be found.
rubidium
parents: 8385
diff changeset
    14
#include "window_func.h"
5720
cc0ceeafaa55 (svn r7751) -Codechange: move network_* to a new network map. Furthermore move the low level network functions to network/core, so they can be reused by the masterserver and website-serverlist-updater.
rubidium
parents: 5568
diff changeset
    15
#include "network/network.h"
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    16
#include "debug.h"
8704
2857ec554839 (svn r11771) -Codechange: split settings.h into better separated headers.
rubidium
parents: 8638
diff changeset
    17
#include "settings_func.h"
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    18
#include "heightmap.h"
8721
b7971ad9bdd9 (svn r11788) -Fix (11787): makedepend doesn't mark delete files as changed...
rubidium
parents: 8704
diff changeset
    19
#include "viewport_func.h"
b7971ad9bdd9 (svn r11788) -Fix (11787): makedepend doesn't mark delete files as changed...
rubidium
parents: 8704
diff changeset
    20
#include "gfx_func.h"
8635
3bbb6f87fced (svn r11701) -Codechange: removal unnecessary inclusions of map.h (and split map.h).
rubidium
parents: 8634
diff changeset
    21
#include "map_func.h"
8636
2b158acb649c (svn r11702) -Codechange: move all date related stuff to date*.
rubidium
parents: 8635
diff changeset
    22
#include "date_func.h"
8638
d997e3a75b36 (svn r11704) -Codechange: remove another bunch of useless includes.
rubidium
parents: 8636
diff changeset
    23
#include "core/random_func.hpp"
9282
2bb9703aeb39 (svn r12490) -Codechange: rename engine.h to engine_func.h and remove unneeded inclusions of engine.h and/or replace them with engine_type.h.
rubidium
parents: 8930
diff changeset
    24
#include "engine_func.h"
8766
c86cfa3a7580 (svn r11834) -Codechange: only include settings_type.h if needed.
rubidium
parents: 8760
diff changeset
    25
#include "settings_type.h"
8799
e0867e763d41 (svn r11867) -Fix: do not reset changes to persistent storages during world generation.
rubidium
parents: 8766
diff changeset
    26
#include "newgrf_storage.h"
8876
a0b7938c6082 (svn r11947) -Feature: Make use of new sprites added by Action5 type 0D.
frosch
parents: 8799
diff changeset
    27
#include "water.h"
10445
2dd7d9d0a957 (svn r12987) -Codechange: split viewport and tile selection.
rubidium
parents: 10429
diff changeset
    28
#include "tilehighlight_func.h"
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    29
8760
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    30
#include "table/sprites.h"
ce0891c412ce (svn r11828) -Codechange: include table/* as the last includes and remove an unneeded include from openttd.h.
rubidium
parents: 8750
diff changeset
    31
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    32
void GenerateClearTile();
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    33
void GenerateIndustries();
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    34
void GenerateUnmovables();
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    35
bool GenerateTowns();
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    36
void GenerateTrees();
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    37
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    38
void StartupEconomy();
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    39
void StartupPlayers();
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    40
void StartupDisasters();
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    41
10770
c1e1fb4bd561 (svn r13320) -Codechange: move some enums from openttd.h to more logical locations.
rubidium
parents: 10703
diff changeset
    42
void InitializeGame(uint size_x, uint size_y, bool reset_date);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    43
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    44
/* Please only use this variable in genworld.h and genworld.c and
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    45
 *  nowhere else. For speed improvements we need it to be global, but
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    46
 *  in no way the meaning of it is to use it anywhere else besides
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    47
 *  in the genworld.h and genworld.c! -- TrueLight */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    48
gw_info _gw;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    49
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    50
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    51
 * Set the status of the Paint flag.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    52
 *  If it is true, the thread will hold with any futher generating till
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    53
 *  the drawing of the screen is done. This is handled by
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    54
 *  SetGeneratingWorldProgress(), so calling that function will stall
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    55
 *  from time to time.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    56
 */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    57
void SetGeneratingWorldPaintStatus(bool status)
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    58
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    59
	_gw.wait_for_draw = status;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    60
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    61
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    62
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    63
 * Returns true if the thread wants the main program to do a (full) paint.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    64
 *  If this returns false, please do not update the screen. Because we are
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    65
 *  writing in a thread, it can cause damaged data (reading and writing the
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    66
 *  same tile at the same time).
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    67
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    68
bool IsGeneratingWorldReadyForPaint()
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    69
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    70
	/* If we are in quit_thread mode, ignore this and always return false. This
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    71
	 *  forces the screen to not be drawn, and the GUI not to wait for a draw. */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    72
	if (!_gw.active || _gw.quit_thread || !_gw.threaded) return false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    73
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    74
	return _gw.wait_for_draw;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    75
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    76
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    77
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    78
 * Tells if the world generation is done in a thread or not.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    79
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
    80
bool IsGenerateWorldThreaded()
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    81
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    82
	return _gw.threaded && !_gw.quit_thread;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    83
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    84
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    85
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    86
 * The internal, real, generate function.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    87
 */
10860
ae89867701fe (svn r13411) -Codechange: remove the return value from the thread procs because it is never used.
rubidium
parents: 10775
diff changeset
    88
static void _GenerateWorld(void *arg)
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
    89
{
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    90
	try {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    91
		_generating_world = true;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    92
		if (_network_dedicated) DEBUG(net, 0, "Generating map, please wait...");
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    93
		/* Set the Random() seed to generation_seed so we produce the same map with the same seed */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10770
diff changeset
    94
		if (_settings_game.game_creation.generation_seed == GENERATE_NEW_SEED) _settings_game.game_creation.generation_seed = _settings_newgame.game_creation.generation_seed = InteractiveRandom();
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10770
diff changeset
    95
		_random.SetSeed(_settings_game.game_creation.generation_seed);
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    96
		SetGeneratingWorldProgress(GWP_MAP_INIT, 2);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    97
		SetObjectToPlace(SPR_CURSOR_ZZZ, PAL_NONE, VHM_NONE, WC_MAIN_WINDOW, 0);
8799
e0867e763d41 (svn r11867) -Fix: do not reset changes to persistent storages during world generation.
rubidium
parents: 8766
diff changeset
    98
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
    99
		IncreaseGeneratingWorldProgress(GWP_MAP_INIT);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   100
		/* Must start economy early because of the costs. */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   101
		StartupEconomy();
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   102
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   103
		/* Don't generate landscape items when in the scenario editor. */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   104
		if (_gw.mode == GW_EMPTY) {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   105
			SetGeneratingWorldProgress(GWP_UNMOVABLE, 1);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   106
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   107
			/* Make the map the height of the patch setting */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10770
diff changeset
   108
			if (_game_mode != GM_MENU) FlatEmptyWorld(_settings_game.game_creation.se_flat_world_height);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   109
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   110
			ConvertGroundTilesIntoWaterTiles();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   111
			IncreaseGeneratingWorldProgress(GWP_UNMOVABLE);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   112
		} else {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   113
			GenerateLandscape(_gw.mode);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   114
			GenerateClearTile();
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   115
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   116
			/* only generate towns, tree and industries in newgame mode. */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   117
			if (_game_mode != GM_EDITOR) {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   118
				GenerateTowns();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   119
				GenerateIndustries();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   120
				GenerateUnmovables();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   121
				GenerateTrees();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   122
			}
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   123
		}
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   124
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   125
		ClearStorageChanges(true);
7039
a20ddaf4dc97 (svn r9734) -Feature: Add an option to automatically pause when starting a new game.
maedhros
parents: 6949
diff changeset
   126
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   127
		/* These are probably pointless when inside the scenario editor. */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   128
		SetGeneratingWorldProgress(GWP_GAME_INIT, 3);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   129
		StartupPlayers();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   130
		IncreaseGeneratingWorldProgress(GWP_GAME_INIT);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   131
		StartupEngines();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   132
		IncreaseGeneratingWorldProgress(GWP_GAME_INIT);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   133
		StartupDisasters();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   134
		_generating_world = false;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   135
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   136
		/* No need to run the tile loop in the scenario editor. */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   137
		if (_gw.mode != GW_EMPTY) {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   138
			uint i;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   139
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   140
			SetGeneratingWorldProgress(GWP_RUNTILELOOP, 0x500);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   141
			for (i = 0; i < 0x500; i++) {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   142
				RunTileLoop();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   143
				IncreaseGeneratingWorldProgress(GWP_RUNTILELOOP);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   144
			}
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   145
		}
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   146
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   147
		ResetObjectToPlace();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   148
		SetLocalPlayer(_gw.lp);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   149
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   150
		SetGeneratingWorldProgress(GWP_GAME_START, 1);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   151
		/* Call any callback */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   152
		if (_gw.proc != NULL) _gw.proc();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   153
		IncreaseGeneratingWorldProgress(GWP_GAME_START);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   154
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   155
		if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   156
		/* Show all vital windows again, because we have hidden them */
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   157
		if (_gw.threaded && _game_mode != GM_MENU) ShowVitalWindows();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   158
		_gw.active   = false;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   159
		_gw.proc     = NULL;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   160
		_gw.threaded = false;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   161
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   162
		DeleteWindowById(WC_GENERATE_PROGRESS_WINDOW, 0);
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   163
		MarkWholeScreenDirty();
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   164
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   165
		if (_network_dedicated) DEBUG(net, 0, "Map generated, starting game");
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   166
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10770
diff changeset
   167
		if (_settings_client.gui.pause_on_newgame && _game_mode == GM_NORMAL) DoCommandP(0, 1, 0, NULL, CMD_PAUSE);
10223
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   168
	} catch (...) {
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   169
		_generating_world = false;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   170
		throw;
eba00e1551eb (svn r12755) -Fix (r12706): aborting map generation was not properly handled
glx
parents: 10175
diff changeset
   171
	}
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   172
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   173
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   174
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   175
 * Set here the function, if any, that you want to be called when landscape
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   176
 *  generation is done.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   177
 */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   178
void GenerateWorldSetCallback(gw_done_proc *proc)
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   179
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   180
	_gw.proc = proc;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   181
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   182
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   183
/**
5145
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   184
 * Set here the function, if any, that you want to be called when landscape
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   185
 *  generation is aborted.
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   186
 */
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   187
void GenerateWorldSetAbortCallback(gw_abort_proc *proc)
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   188
{
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   189
	_gw.abortp = proc;
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   190
}
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   191
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   192
/**
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   193
 * This will wait for the thread to finish up his work. It will not continue
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   194
 *  till the work is done.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   195
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
   196
void WaitTillGeneratedWorld()
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   197
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   198
	if (_gw.thread == NULL) return;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   199
	_gw.quit_thread = true;
10175
1119f6640ee6 (svn r12706) -Merge: the thread rewrite from NoAI. The rewrite makes the threading we have better extendable.
rubidium
parents: 9282
diff changeset
   200
	_gw.thread->Join();
10866
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   201
	delete _gw.thread;
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   202
	_gw.thread   = NULL;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   203
	_gw.threaded = false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   204
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   205
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   206
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   207
 * Initializes the abortion process
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   208
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
   209
void AbortGeneratingWorld()
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   210
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   211
	_gw.abort = true;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   212
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   213
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   214
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   215
 * Is the generation being aborted?
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   216
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
   217
bool IsGeneratingWorldAborted()
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   218
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   219
	return _gw.abort;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   220
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   221
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   222
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   223
 * Really handle the abortion, i.e. clean up some of the mess
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   224
 */
6573
7624f942237f (svn r9050) -Codechange: Foo(void) -> Foo()
rubidium
parents: 6505
diff changeset
   225
void HandleGeneratingWorldAbortion()
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   226
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   227
	/* Clean up - in SE create an empty map, otherwise, go to intro menu */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   228
	_switch_mode = (_game_mode == GM_EDITOR) ? SM_EDITOR : SM_MENU;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   229
5145
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   230
	if (_gw.abortp != NULL) _gw.abortp();
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   231
5919
2b58160d667d (svn r8128) -Codechange: Split sprite and palette remap into separate 32 bit values.
peter1138
parents: 5838
diff changeset
   232
	if (_cursor.sprite == SPR_CURSOR_ZZZ) SetMouseCursor(SPR_CURSOR_MOUSE, PAL_NONE);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   233
	/* Show all vital windows again, because we have hidden them */
4303
491076cb1ce6 (svn r5950) -Fix: don't show Vital Windows EVER if you go to GM_MENU (tnx Darkvater)
truelight
parents: 4300
diff changeset
   234
	if (_gw.threaded && _game_mode != GM_MENU) ShowVitalWindows();
10175
1119f6640ee6 (svn r12706) -Merge: the thread rewrite from NoAI. The rewrite makes the threading we have better extendable.
rubidium
parents: 9282
diff changeset
   235
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   236
	_gw.active   = false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   237
	_gw.proc     = NULL;
5145
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   238
	_gw.abortp   = NULL;
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   239
	_gw.threaded = false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   240
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   241
	DeleteWindowById(WC_GENERATE_PROGRESS_WINDOW, 0);
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   242
	MarkWholeScreenDirty();
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   243
10866
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   244
	_gw.thread->Exit();
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   245
}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   246
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   247
/**
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   248
 * Generate a world.
6505
abcb0580d976 (svn r8950) -Cleanup: doxygen changes. Mostly @files missing tags and a few comments style.
belugas
parents: 6144
diff changeset
   249
 * @param mode The mode of world generation (see GenerateWorldModes).
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   250
 * @param size_x The X-size of the map.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   251
 * @param size_y The Y-size of the map.
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   252
 */
10770
c1e1fb4bd561 (svn r13320) -Codechange: move some enums from openttd.h to more logical locations.
rubidium
parents: 10703
diff changeset
   253
void GenerateWorld(GenerateWorldMode mode, uint size_x, uint size_y)
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   254
{
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   255
	if (_gw.active) return;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   256
	_gw.mode   = mode;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   257
	_gw.size_x = size_x;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   258
	_gw.size_y = size_y;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   259
	_gw.active = true;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   260
	_gw.abort  = false;
5145
4c5761bb0176 (svn r7237) -Fix: TGP landscape generation could leak memory if aborted during the generation of the heightmap.
rubidium
parents: 5048
diff changeset
   261
	_gw.abortp = NULL;
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   262
	_gw.lp     = _local_player;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   263
	_gw.wait_for_draw = false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   264
	_gw.quit_thread   = false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   265
	_gw.threaded      = true;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   266
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   267
	/* This disables some commands and stuff */
5564
6e1b3ea1ba7f (svn r7561) -Fix (FS#431): core and (patches) GUI were not in-sync with respect to autorenew settings. This is only a temporary fix, as the definite fix needs to move the autorenew settings to a per-company settings window.
rubidium
parents: 5340
diff changeset
   268
	SetLocalPlayer(PLAYER_SPECTATOR);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   269
	/* Make sure everything is done via OWNER_NONE */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   270
	_current_player = OWNER_NONE;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   271
5340
82c981816fcb (svn r7506) -Codechange: [NewGRF] Add action 7/9/D variable 0x81 (current year)
glx
parents: 5155
diff changeset
   272
	/* Set the date before loading sprites as some newgrfs check it */
10775
7061477bfbcf (svn r13325) -Codechange: split the client-side only settings from the settings stored in the savegame so there is no need to have a duplicate copy of it for new games.
rubidium
parents: 10770
diff changeset
   273
	SetDate(ConvertYMDToDate(_settings_game.game_creation.starting_year, 0, 1));
5340
82c981816fcb (svn r7506) -Codechange: [NewGRF] Add action 7/9/D variable 0x81 (current year)
glx
parents: 5155
diff changeset
   274
5155
64f930853bea (svn r7250) -Codechange: Shuffle sprite loading and character width caching around a bit. This reduces the number of times the sprites are loaded from 5 to 2, just for the intro game.
peter1138
parents: 5145
diff changeset
   275
	/* Load the right landscape stuff */
64f930853bea (svn r7250) -Codechange: Shuffle sprite loading and character width caching around a bit. This reduces the number of times the sprites are loaded from 5 to 2, just for the intro game.
peter1138
parents: 5145
diff changeset
   276
	GfxLoadSprites();
64f930853bea (svn r7250) -Codechange: Shuffle sprite loading and character width caching around a bit. This reduces the number of times the sprites are loaded from 5 to 2, just for the intro game.
peter1138
parents: 5145
diff changeset
   277
	LoadStringWidthTable();
64f930853bea (svn r7250) -Codechange: Shuffle sprite loading and character width caching around a bit. This reduces the number of times the sprites are loaded from 5 to 2, just for the intro game.
peter1138
parents: 5145
diff changeset
   278
10770
c1e1fb4bd561 (svn r13320) -Codechange: move some enums from openttd.h to more logical locations.
rubidium
parents: 10703
diff changeset
   279
	InitializeGame(_gw.size_x, _gw.size_y, false);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   280
	PrepareGenerateWorldProgress();
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   281
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   282
	/* Re-init the windowing system */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   283
	ResetWindowSystem();
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   284
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   285
	/* Create toolbars */
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   286
	SetupColorsAndInitialWindow();
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   287
10866
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   288
	if (_gw.thread != NULL) {
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   289
		_gw.thread->Join();
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   290
		delete _gw.thread;
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   291
		_gw.thread = NULL;
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   292
	}
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   293
5048
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   294
	if (_network_dedicated ||
10866
242436c016b8 (svn r13417) -Fix (r12945, r13413): freeing the ThreadObjects in a manner that hopefully doesn't cause crashes.
rubidium
parents: 10861
diff changeset
   295
	    (_gw.thread = ThreadObject::New(&_GenerateWorld, NULL)) == NULL) {
5568
75f13d7bfaed (svn r7565) -Codechange: Rework DEBUG functionality. Look for appropiate debugging levels to
Darkvater
parents: 5564
diff changeset
   296
		DEBUG(misc, 1, "Cannot create genworld thread, reverting to single-threaded mode");
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   297
		_gw.threaded = false;
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   298
		_GenerateWorld(NULL);
5048
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   299
		return;
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   300
	}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   301
5048
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   302
	/* Remove any open window */
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   303
	DeleteAllNonVitalWindows();
5045
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 4848
diff changeset
   304
	/* Hide vital windows, because we don't allow to use them */
5048
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   305
	HideVitalWindows();
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   306
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   307
	/* Don't show the dialog if we don't have a thread */
0223e3641590 (svn r7098) -Regression (r7094): Zoom buttons were not properly updated with a new/loaded game. The
Darkvater
parents: 5045
diff changeset
   308
	ShowGenerateWorldProgress();
5045
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 4848
diff changeset
   309
3e734e178dae (svn r7094) -Codechange: Get rid of the window-specific code in DoZoomInOutWindow (enable, disable
Darkvater
parents: 4848
diff changeset
   310
	/* Centre the view on the map */
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   311
	if (FindWindowById(WC_MAIN_WINDOW, 0) != NULL) {
7256
ec4124cf48d3 (svn r9995) -Fix (r9962): Don't scroll the map at the start of a new game
peter1138
parents: 7074
diff changeset
   312
		ScrollMainWindowToTile(TileXY(MapSizeX() / 2, MapSizeY() / 2), true);
4300
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   313
	}
687a17c9c557 (svn r5946) -Add: merged the TGP branch to mainline. TGP adds:
truelight
parents:
diff changeset
   314
}