diff options
author | Antoine Cellerier <dionoea@videolan.org> | 2009-05-26 19:14:26 +0000 |
---|---|---|
committer | Antoine Cellerier <dionoea@videolan.org> | 2009-05-26 19:14:26 +0000 |
commit | c4ed88f59302882749023268ac456c415a4b1243 (patch) | |
tree | 4dbabcef1f9f1538feaca077633ea71fe76c6b68 | |
parent | 7d0fef7c2eca4683373033755a63806065ed0ed4 (diff) | |
download | rockbox-c4ed88f59302882749023268ac456c415a4b1243.tar.gz rockbox-c4ed88f59302882749023268ac456c415a4b1243.zip |
FS #10233 by Johannes Schwarz: "The following patch allows the user to resume his xobox game. The user has got the possibility to change the speed or the difficulty during the game and the option to select for example next track."
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21090 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r-- | apps/plugins/xobox.c | 134 |
1 files changed, 85 insertions, 49 deletions
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c index f0b1553aa9..7038ee0bb6 100644 --- a/apps/plugins/xobox.c +++ b/apps/plugins/xobox.c | |||
@@ -909,37 +909,6 @@ static inline void move_board (void) | |||
909 | } | 909 | } |
910 | } | 910 | } |
911 | 911 | ||
912 | /* the main menu */ | ||
913 | static int game_menu (void) | ||
914 | { | ||
915 | MENUITEM_STRINGLIST(menu, "XOBOX Menu", NULL, "Start New Game", | ||
916 | "Speed","Difficulty","Playback Control","Quit"); | ||
917 | int selection = 0; | ||
918 | #ifdef HAVE_LCD_COLOR | ||
919 | rb->lcd_set_foreground (rb->global_settings->fg_color); | ||
920 | rb->lcd_set_background (rb->global_settings->bg_color); | ||
921 | #elif LCD_DEPTH>=2 | ||
922 | rb->lcd_set_foreground(LCD_BLACK); | ||
923 | rb->lcd_set_background(LCD_WHITE); | ||
924 | #endif | ||
925 | for (;;) { | ||
926 | rb->do_menu(&menu,&selection, NULL, false); | ||
927 | if (selection==1) | ||
928 | rb->set_int ("Speed", "", UNIT_INT, &speed, NULL, 1, 1, 10, NULL); | ||
929 | else if (selection==2) | ||
930 | rb->set_int ("Difficulty", "", UNIT_INT, &difficulty, NULL, | ||
931 | 5, 50, 95, NULL); | ||
932 | else if (selection==3) | ||
933 | playback_control (NULL); | ||
934 | else | ||
935 | break; | ||
936 | } | ||
937 | if (selection != MENU_START) { | ||
938 | selection = MENU_QUIT; | ||
939 | } | ||
940 | return selection; | ||
941 | } | ||
942 | |||
943 | /* init game's variables */ | 912 | /* init game's variables */ |
944 | static void init_game (void) | 913 | static void init_game (void) |
945 | { | 914 | { |
@@ -948,19 +917,98 @@ static void init_game (void) | |||
948 | player.lives = 3; | 917 | player.lives = 3; |
949 | player.gameover = false; | 918 | player.gameover = false; |
950 | player.drawing = false; | 919 | player.drawing = false; |
951 | rb->lcd_setfont(FONT_SYSFIXED); | ||
952 | init_board (); | 920 | init_board (); |
953 | refresh_board (); | 921 | refresh_board (); |
954 | rb->splash (HZ * 2, "Ready?"); | 922 | rb->splash (HZ * 2, "Ready?"); |
955 | } | 923 | } |
956 | 924 | ||
925 | /* the main menu */ | ||
926 | static int xobox_menu(bool ingame) | ||
927 | { | ||
928 | rb->button_clear_queue(); | ||
929 | int choice = 0; | ||
930 | if (ingame) { | ||
931 | MENUITEM_STRINGLIST (main_menu, "Xobox Menu", NULL, | ||
932 | "Resume Game", | ||
933 | "Restart Level", | ||
934 | "Speed", | ||
935 | "Difficult", | ||
936 | "Playback Control", | ||
937 | "Quit"); | ||
938 | |||
939 | while (true) { | ||
940 | choice = rb->do_menu(&main_menu, &choice, NULL, false); | ||
941 | switch (choice) { | ||
942 | case 0: | ||
943 | return 0; | ||
944 | case 1: | ||
945 | init_game (); | ||
946 | return 0; | ||
947 | case 2: | ||
948 | rb->set_int ("Speed", "", UNIT_INT, &speed, NULL, 1, 1, 10, NULL); | ||
949 | break; | ||
950 | case 3: | ||
951 | rb->set_int ("Difficulty", "", UNIT_INT, &difficulty, NULL, | ||
952 | 5, 50, 95, NULL); | ||
953 | break; | ||
954 | case 4: | ||
955 | playback_control(NULL); | ||
956 | break; | ||
957 | case 5: | ||
958 | return 1; | ||
959 | case MENU_ATTACHED_USB: | ||
960 | return 1; | ||
961 | default: | ||
962 | break; | ||
963 | } | ||
964 | } | ||
965 | } | ||
966 | else { | ||
967 | MENUITEM_STRINGLIST (main_menu, "Xobox Menu", NULL, | ||
968 | "Start Game", | ||
969 | "Speed", | ||
970 | "Difficult", | ||
971 | "Playback Control", | ||
972 | "Quit"); | ||
973 | |||
974 | while (true) { | ||
975 | choice = rb->do_menu(&main_menu, &choice, NULL, false); | ||
976 | switch (choice) { | ||
977 | case 0: | ||
978 | init_game (); | ||
979 | return 0; | ||
980 | case 1: | ||
981 | rb->set_int ("Speed", "", UNIT_INT, &speed, NULL, 1, 1, 10, NULL); | ||
982 | break; | ||
983 | case 2: | ||
984 | rb->set_int ("Difficulty", "", UNIT_INT, &difficulty, NULL, | ||
985 | 5, 50, 95, NULL); | ||
986 | break; | ||
987 | case 3: | ||
988 | playback_control(NULL); | ||
989 | break; | ||
990 | case 4: | ||
991 | return 1; | ||
992 | case MENU_ATTACHED_USB: | ||
993 | return 1; | ||
994 | default: | ||
995 | break; | ||
996 | } | ||
997 | } | ||
998 | } | ||
999 | } | ||
1000 | |||
957 | /* general keypad handler loop */ | 1001 | /* general keypad handler loop */ |
958 | static int xobox_loop (void) | 1002 | static int xobox_loop (void) |
959 | { | 1003 | { |
960 | int button = 0, ret; | 1004 | int button = 0; |
961 | bool pause = false; | 1005 | bool pause = false; |
962 | int end; | 1006 | int end; |
963 | 1007 | ||
1008 | if (xobox_menu(false)==1) { | ||
1009 | return PLUGIN_OK; | ||
1010 | } | ||
1011 | |||
964 | while (!quit) { | 1012 | while (!quit) { |
965 | end = *rb->current_tick + ((11-speed)*HZ)/100; | 1013 | end = *rb->current_tick + ((11-speed)*HZ)/100; |
966 | 1014 | ||
@@ -995,13 +1043,8 @@ static int xobox_loop (void) | |||
995 | rb->splash (HZ, "Paused"); | 1043 | rb->splash (HZ, "Paused"); |
996 | break; | 1044 | break; |
997 | case QUIT: | 1045 | case QUIT: |
998 | ret = game_menu (); | 1046 | if (xobox_menu(true)==1) { |
999 | if (ret == MENU_START) | ||
1000 | init_game (); | ||
1001 | else | ||
1002 | { | ||
1003 | quit = true; | 1047 | quit = true; |
1004 | continue; | ||
1005 | } | 1048 | } |
1006 | break; | 1049 | break; |
1007 | default: | 1050 | default: |
@@ -1015,11 +1058,9 @@ static int xobox_loop (void) | |||
1015 | } | 1058 | } |
1016 | if (player.gameover) { | 1059 | if (player.gameover) { |
1017 | rb->splash (HZ, "Game Over!"); | 1060 | rb->splash (HZ, "Game Over!"); |
1018 | ret = game_menu (); | 1061 | if (xobox_menu(false)==1) { |
1019 | if (ret == MENU_START) | ||
1020 | init_game (); | ||
1021 | else | ||
1022 | quit = true; | 1062 | quit = true; |
1063 | } | ||
1023 | } | 1064 | } |
1024 | 1065 | ||
1025 | if (end > *rb->current_tick) | 1066 | if (end > *rb->current_tick) |
@@ -1046,13 +1087,8 @@ enum plugin_status plugin_start (const void *parameter) | |||
1046 | /* Turn off backlight timeout */ | 1087 | /* Turn off backlight timeout */ |
1047 | backlight_force_on(); /* backlight control in lib/helper.c */ | 1088 | backlight_force_on(); /* backlight control in lib/helper.c */ |
1048 | 1089 | ||
1049 | quit = false; | ||
1050 | |||
1051 | randomize (); | 1090 | randomize (); |
1052 | if (game_menu () == MENU_START) { | 1091 | ret = xobox_loop (); |
1053 | init_game (); | ||
1054 | ret = xobox_loop (); | ||
1055 | } | ||
1056 | 1092 | ||
1057 | /* Turn on backlight timeout (revert to settings) */ | 1093 | /* Turn on backlight timeout (revert to settings) */ |
1058 | backlight_use_settings(); /* backlight control in lib/helper.c */ | 1094 | backlight_use_settings(); /* backlight control in lib/helper.c */ |