X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=c8bcf368cc70cfa75970449d2bbab67f280764f0;hb=cdc3c940197937b0508a1eb7dcf44874951908b7;hp=8d4fa2826875c6f1a0b6c967d56636b344f6fbe6;hpb=983b7bc7f3493b1522d08d8e7bdecb3bd8e462eb;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 8d4fa282..c8bcf368 100644 --- a/src/screens.c +++ b/src/screens.c @@ -97,12 +97,13 @@ static struct GadgetInfo *screen_gadget[NUM_SCREEN_GADGETS]; static int setup_mode = SETUP_MODE_MAIN; static int info_mode = INFO_MODE_MAIN; -#define mSX (SX + (game_status >= GAME_MODE_MAIN && \ - game_status <= GAME_MODE_SETUP ? \ - menu.draw_xoffset[game_status] : menu.draw_xoffset_default)) -#define mSY (SY + (game_status >= GAME_MODE_MAIN && \ - game_status <= GAME_MODE_SETUP ? \ - menu.draw_yoffset[game_status] : menu.draw_yoffset_default)) +#define DRAW_OFFSET_MODE(x) (x >= GAME_MODE_MAIN && \ + x <= GAME_MODE_SETUP ? x : \ + x == GAME_MODE_PSEUDO_TYPENAME ? \ + GAME_MODE_MAIN : GAME_MODE_DEFAULT) + +#define mSX (SX + menu.draw_xoffset[DRAW_OFFSET_MODE(game_status)]) +#define mSY (SY + menu.draw_yoffset[DRAW_OFFSET_MODE(game_status)]) #define NUM_MENU_ENTRIES_ON_SCREEN (menu.list_size[game_status] > 2 ? \ menu.list_size[game_status] : \ @@ -510,6 +511,9 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) } else if (y == 5) { +#if 1 + StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE); +#else if (setup.autorecord) TapeStartRecording(); @@ -523,6 +527,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) StopAnimation(); InitGame(); } +#endif } else if (y == 6) { @@ -3081,6 +3086,9 @@ void HandleGameActions() } else { + if (game.restart_level) + StartGameActions(options.network, setup.autorecord, NEW_RANDOMIZE); + if (local_player->LevelSolved) GameWon(); @@ -3095,6 +3103,30 @@ void HandleGameActions() } } +void StartGameActions(boolean init_network_game, boolean record_tape, + long random_seed) +{ + if (record_tape) + TapeStartRecording(random_seed); + +#if defined(NETWORK_AVALIABLE) + if (init_network_game) + { + SendToServer_StartPlaying(); + + return; + } +#endif + + StopAnimation(); + + game_status = GAME_MODE_PLAYING; + + InitRND(random_seed); + + InitGame(); +} + /* ---------- new screen button stuff -------------------------------------- */ /* graphic position and size values for buttons and scrollbars */