Files @ r5427:5c600ac28c4a
Branch filter:

Location: cpp/openttd-patchpack/source/intro_gui.c - annotation

rubidium
(svn r7631) -Fix (r1): some pointer arithmetic gave the number of entries instead of the number of bytes to move when removing the animated state from a tile. This caused desyncs between Little and Big Endian machines. Thanks to pv2b for helping me in locating the bug and to Darkvater for figuring out that the arithmetic returned the number of entries instead of bytes.
r2186:5ee653b1b5e1
r2186:5ee653b1b5e1
r0:d63b455452f6
r1891:c5c5466afa35
r507:b1b0a0a3c313
r4937:3124578cbfd9
r2163:ae001e2aa5b0
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r543:efdb197f91ad
r2159:2c706fe6b0a7
r3888:aa900cebaacd
r4300:642b2431578b
r4300:642b2431578b
r4830:b1b68e7108e7
r5237:cc044906a066
r0:d63b455452f6
r0:d63b455452f6
r4344:bff007ae1fd1
r5237:cc044906a066
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r1711:a6b193ef1712
r4938:ccfdb2e58d04
r4938:ccfdb2e58d04
r4938:ccfdb2e58d04
r4938:ccfdb2e58d04
r1711:a6b193ef1712
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r4344:bff007ae1fd1
r5237:cc044906a066
r5237:cc044906a066
r5315:4a44be6f986a
r4938:ccfdb2e58d04
r0:d63b455452f6
r0:d63b455452f6
r543:efdb197f91ad
r543:efdb197f91ad
r1794:15e23047f8c1
r1794:15e23047f8c1
r1794:15e23047f8c1
r1794:15e23047f8c1
r1794:15e23047f8c1
r1794:15e23047f8c1
r1711:a6b193ef1712
r1711:a6b193ef1712
r1711:a6b193ef1712
r4719:e1d2222eb9fb
r4719:e1d2222eb9fb
r0:d63b455452f6
r4727:8181e87539cd
r4727:8181e87539cd
r4727:8181e87539cd
r4727:8181e87539cd
r1500:e5979abe9361
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r4634:c040de534aac
r4300:642b2431578b
r0:d63b455452f6
r4300:642b2431578b
r4300:642b2431578b
r4300:642b2431578b
r4300:642b2431578b
r105:9609297bc621
r2749:e781205c9f97
r4077:259c4c4aacad
r172:1c41a7220acb
r4077:259c4c4aacad
r0:d63b455452f6
r4300:642b2431578b
r4719:e1d2222eb9fb
r4634:c040de534aac
r4300:642b2431578b
r4300:642b2431578b
r4300:642b2431578b
r4300:642b2431578b
r5352:64720e7993a1
r5237:cc044906a066
r129:8ef2815ca423
r0:d63b455452f6
r4308:7752673085fa
r4308:7752673085fa
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r5237:cc044906a066
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r1093:18f56ef2d029
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r0:d63b455452f6
r5419:7d0beb86d3ca
r2639:e298192a7c03
r0:d63b455452f6
r534:46e9db8de483
r0:d63b455452f6
r534:46e9db8de483
r0:d63b455452f6
r534:46e9db8de483
r0:d63b455452f6
r534:46e9db8de483
r867:c270355a1b34
r587:5b588feaf051
r810:08bcb4bf8186
r810:08bcb4bf8186
r0:d63b455452f6
r534:46e9db8de483
r0:d63b455452f6
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r0:d63b455452f6
r0:d63b455452f6
r0:d63b455452f6
r5419:7d0beb86d3ca
r2639:e298192a7c03
r5419:7d0beb86d3ca
r0:d63b455452f6
r0:d63b455452f6
r1093:18f56ef2d029
r0:d63b455452f6
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r5419:7d0beb86d3ca
r0:d63b455452f6
/* $Id$ */

#include "stdafx.h"
#include "openttd.h"
#include "table/strings.h"
#include "table/sprites.h"
#include "functions.h"
#include "window.h"
#include "gui.h"
#include "gfx.h"
#include "player.h"
#include "network.h"
#include "variables.h"
#include "settings.h"
#include "heightmap.h"
#include "genworld.h"
#include "network_gui.h"
#include "newgrf.h"

static const Widget _select_game_widgets[] = {
{    WWT_CAPTION, RESIZE_NONE, 13,   0, 335,   0,  13, STR_0307_OPENTTD,         STR_NULL},
{      WWT_PANEL, RESIZE_NONE, 13,   0, 335,  14, 194, 0x0,                      STR_NULL},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12,  10, 167,  22,  33, STR_0140_NEW_GAME,        STR_02FB_START_A_NEW_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325,  22,  33, STR_0141_LOAD_GAME,       STR_02FC_LOAD_A_SAVED_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12,  10, 167,  40,  51, STR_029A_PLAY_SCENARIO,   STR_0303_START_A_NEW_GAME_USING},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325,  40,  51, STR_PLAY_HEIGHTMAP,       STR_PLAY_HEIGHTMAP_HINT},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12,  10, 167,  58,  69, STR_0220_CREATE_SCENARIO, STR_02FE_CREATE_A_CUSTOMIZED_GAME},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325,  58,  69, STR_MULTIPLAYER,          STR_0300_SELECT_MULTIPLAYER_GAME},

{   WWT_IMGBTN_2, RESIZE_NONE, 12,  10,  86,  77, 131, SPR_SELECT_TEMPERATE,     STR_030E_SELECT_TEMPERATE_LANDSCAPE},
{   WWT_IMGBTN_2, RESIZE_NONE, 12,  90, 166,  77, 131, SPR_SELECT_SUB_ARCTIC,    STR_030F_SELECT_SUB_ARCTIC_LANDSCAPE},
{   WWT_IMGBTN_2, RESIZE_NONE, 12, 170, 246,  77, 131, SPR_SELECT_SUB_TROPICAL,  STR_0310_SELECT_SUB_TROPICAL_LANDSCAPE},
{   WWT_IMGBTN_2, RESIZE_NONE, 12, 250, 326,  77, 131, SPR_SELECT_TOYLAND,       STR_0311_SELECT_TOYLAND_LANDSCAPE},

{ WWT_PUSHTXTBTN, RESIZE_NONE, 12,  10, 167, 139, 150, STR_0148_GAME_OPTIONS,    STR_0301_DISPLAY_GAME_OPTIONS},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 139, 150, STR_01FE_DIFFICULTY,      STR_0302_DISPLAY_DIFFICULTY_OPTIONS},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12,  10, 167, 157, 168, STR_CONFIG_PATCHES,       STR_CONFIG_PATCHES_TIP},
{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 168, 325, 157, 168, STR_NEWGRF_SETTINGS_BUTTON, STR_NULL},

{ WWT_PUSHTXTBTN, RESIZE_NONE, 12, 104, 231, 175, 186, STR_0304_QUIT,            STR_0305_QUIT_OPENTTD},
{   WIDGETS_END},
};

extern void HandleOnEditText(WindowEvent *e);

static inline void SetNewLandscapeType(byte landscape)
{
	_opt_newgame.landscape = landscape;
	InvalidateWindowClasses(WC_SELECT_GAME);
}

static void SelectGameWndProc(Window *w, WindowEvent *e)
{
	switch (e->event) {
	case WE_CREATE: LowerWindowWidget(w, _opt_newgame.landscape + 8); break;

	case WE_PAINT:
		SetWindowWidgetLoweredState(w, 8,  _opt_newgame.landscape == LT_NORMAL);
		SetWindowWidgetLoweredState(w, 9,  _opt_newgame.landscape == LT_HILLY);
		SetWindowWidgetLoweredState(w, 10, _opt_newgame.landscape == LT_DESERT);
		SetWindowWidgetLoweredState(w, 11, _opt_newgame.landscape == LT_CANDY);
		SetDParam(0, STR_6801_EASY + _opt_newgame.diff_level);
		DrawWindowWidgets(w);
		break;

	case WE_CLICK:
		switch (e->we.click.widget) {
		case 2: ShowGenerateLandscape(); break;
		case 3: ShowSaveLoadDialog(SLD_LOAD_GAME); break;
		case 4: ShowSaveLoadDialog(SLD_LOAD_SCENARIO); break;
		case 5: ShowSaveLoadDialog(SLD_LOAD_HEIGHTMAP); break;
		case 6: ShowCreateScenario(); break;
		case 7:
			if (!_network_available) {
				ShowErrorMessage(INVALID_STRING_ID, STR_NETWORK_ERR_NOTAVAILABLE, 0, 0);
			} else {
				ShowNetworkGameWindow();
			}
			break;
		case 8: case 9: case 10: case 11:
			RaiseWindowWidget(w, _opt_newgame.landscape + 8);
			SetNewLandscapeType(e->we.click.widget - 8);
			break;
		case 12: ShowGameOptions(); break;
		case 13: ShowGameDifficulty(); break;
		case 14: ShowPatchesSelection(); break;
		case 15: ShowNewGRFSettings(true, true, false, &_grfconfig_newgame); break;
		case 16: HandleExitGameRequest(); break;
		}
		break;

		case WE_ON_EDIT_TEXT: HandleOnEditText(e); break;
	}
}

static const WindowDesc _select_game_desc = {
	WDP_CENTER, WDP_CENTER, 336, 195,
	WC_SELECT_GAME,0,
	WDF_STD_TOOLTIPS | WDF_DEF_WIDGET | WDF_UNCLICK_BUTTONS,
	_select_game_widgets,
	SelectGameWndProc
};

void ShowSelectGameWindow(void)
{
	AllocateWindowDesc(&_select_game_desc);
}

static void AskExitGameCallback(Window *w, bool confirmed)
{
	if (confirmed) _exit_game = true;
}

void AskExitGame(void)
{
#if defined(_WIN32)
		SetDParam(0, STR_0133_WINDOWS);
#elif defined(__APPLE__)
		SetDParam(0, STR_0135_OSX);
#elif defined(__BEOS__)
		SetDParam(0, STR_OSNAME_BEOS);
#elif defined(__MORPHOS__)
		SetDParam(0, STR_OSNAME_MORPHOS);
#elif defined(__AMIGA__)
		SetDParam(0, STR_OSNAME_AMIGAOS);
#elif defined(__OS2__)
		SetDParam(0, STR_OSNAME_OS2);
#else
		SetDParam(0, STR_0134_UNIX);
#endif
	ShowQuery(
		STR_00C7_QUIT,
		STR_00CA_ARE_YOU_SURE_YOU_WANT_TO,
		NULL,
		AskExitGameCallback
	);
}


static void AskExitToGameMenuCallback(Window *w, bool confirmed)
{
	if (confirmed) _switch_mode = SM_MENU;
}

void AskExitToGameMenu(void)
{
	ShowQuery(
		STR_0161_QUIT_GAME,
		(_game_mode != GM_EDITOR) ? STR_ABANDON_GAME_QUERY : STR_QUIT_SCENARIO_QUERY,
		NULL,
		AskExitToGameMenuCallback
	);
}