Files
@ r5427:5c600ac28c4a
Branch filter:
Location: cpp/openttd-patchpack/source/intro_gui.c - annotation
r5427:5c600ac28c4a
5.1 KiB
text/x-c
(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.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 | 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
);
}
|