673 } |
673 } |
674 |
674 |
675 bool SafeSaveOrLoad(const char *filename, int mode, int newgm) |
675 bool SafeSaveOrLoad(const char *filename, int mode, int newgm) |
676 { |
676 { |
677 byte ogm = _game_mode; |
677 byte ogm = _game_mode; |
678 int r; |
|
679 |
678 |
680 _game_mode = newgm; |
679 _game_mode = newgm; |
681 r = SaveOrLoad(filename, mode); |
680 switch (SaveOrLoad(filename, mode)) { |
682 if (r == SL_REINIT) { |
681 case SL_OK: return true; |
683 switch (ogm) { |
682 |
684 case GM_MENU: LoadIntroGame(); break; |
683 case SL_REINIT: |
685 case GM_EDITOR: MakeNewEditorWorld(); break; |
684 switch (ogm) { |
686 default: MakeNewGame(); break; |
685 case GM_MENU: LoadIntroGame(); break; |
687 } |
686 case GM_EDITOR: MakeNewEditorWorld(); break; |
688 return false; |
687 default: MakeNewGame(); break; |
689 } else if (r != SL_OK) { |
688 } |
690 _game_mode = ogm; |
689 return false; |
691 return false; |
690 |
692 } else { |
691 default: |
693 return true; |
692 _game_mode = ogm; |
|
693 return false; |
694 } |
694 } |
695 } |
695 } |
696 |
696 |
697 void SwitchMode(int new_mode) |
697 void SwitchMode(int new_mode) |
698 { |
698 { |
930 |
929 |
931 // handle scrolling of the main window |
930 // handle scrolling of the main window |
932 if (_dirkeys) HandleKeyScrolling(); |
931 if (_dirkeys) HandleKeyScrolling(); |
933 |
932 |
934 // make a screenshot? |
933 // make a screenshot? |
935 if ((m=_make_screenshot) != 0) { |
934 if (_make_screenshot != 0) { |
|
935 switch (_make_screenshot) { |
|
936 case 1: // make small screenshot |
|
937 UndrawMouseCursor(); |
|
938 ShowScreenshotResult(MakeScreenshot()); |
|
939 break; |
|
940 |
|
941 case 2: // make large screenshot |
|
942 ShowScreenshotResult(MakeWorldScreenshot(-(int)MapMaxX() * TILE_PIXELS, 0, (MapMaxX() + MapMaxY()) * TILE_PIXELS, (MapMaxX() + MapMaxY()) * TILE_PIXELS >> 1, 0)); |
|
943 break; |
|
944 } |
936 _make_screenshot = 0; |
945 _make_screenshot = 0; |
937 switch(m) { |
|
938 case 1: // make small screenshot |
|
939 UndrawMouseCursor(); |
|
940 ShowScreenshotResult(MakeScreenshot()); |
|
941 break; |
|
942 case 2: // make large screenshot |
|
943 ShowScreenshotResult(MakeWorldScreenshot(-(int)MapMaxX() * TILE_PIXELS, 0, (MapMaxX() + MapMaxY()) * TILE_PIXELS, (MapMaxX() + MapMaxY()) * TILE_PIXELS >> 1, 0)); |
|
944 break; |
|
945 } |
|
946 } |
946 } |
947 |
947 |
948 // switch game mode? |
948 // switch game mode? |
949 if ((m=_switch_mode) != SM_NONE) { |
949 if (_switch_mode != SM_NONE) { |
|
950 SwitchMode(_switch_mode); |
950 _switch_mode = SM_NONE; |
951 _switch_mode = SM_NONE; |
951 SwitchMode(m); |
|
952 } |
952 } |
953 |
953 |
954 IncreaseSpriteLRU(); |
954 IncreaseSpriteLRU(); |
955 InteractiveRandom(); |
955 InteractiveRandom(); |
956 |
956 |