diff options
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/superdom.c | 594 |
1 files changed, 268 insertions, 326 deletions
diff --git a/apps/plugins/superdom.c b/apps/plugins/superdom.c index 3e1e23785a..6673810e29 100644 --- a/apps/plugins/superdom.c +++ b/apps/plugins/superdom.c @@ -165,16 +165,18 @@ char buf[255]; #endif #endif -#define SUPERDOM_QUIT 23 +enum { + RET_VAL_OK, + RET_VAL_USB, + RET_VAL_QUIT_ERR, /* quit or error */ +}; void gen_interest(void); -int production_menu(void); void init_resources(void); int select_square(void); void update_score(void); void gen_resources(void); void draw_cursor(void); -int calc_strength(int colour, int x, int y); void draw_board(void); struct tile{ @@ -352,7 +354,7 @@ void draw_board(void) { ICON_WIDTH, ICON_HEIGHT); } #if LCD_DEPTH != 16 - rb->lcd_set_drawmode(DRMODE_SOLID); + rb->lcd_set_drawmode(DRMODE_SOLID); #endif } } @@ -483,17 +485,16 @@ void update_score(void) { rb->lcd_setfont(FONT_UI); } -int settings_menu_function(void) { +int settings_menu(void) { int selection = 0; - MENUITEM_STRINGLIST(settings_menu,"Super Domination Settings",NULL, - "Computer starting farms","Computer starting factories", - "Human starting farms","Human starting factories", - "Starting cash","Starting food","Moves per turn"); + MENUITEM_STRINGLIST(menu, "Super Domination Settings", NULL, + "Computer starting farms", "Computer starting factories", + "Human starting farms", "Human starting factories", + "Starting cash", "Starting food", "Moves per turn"); while(1) { - selection=rb->do_menu(&settings_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: rb->set_int("Computer starting farms", "", UNIT_INT, &superdom_settings.compstartfarms, NULL, @@ -511,8 +512,8 @@ int settings_menu_function(void) { break; case 3: rb->set_int("Human starting factories", "", UNIT_INT, - &superdom_settings.humanstartinds, NULL, - 1, 0, 5, NULL); + &superdom_settings.humanstartinds, NULL, + 1, 0, 5, NULL); break; case 4: rb->set_int("Starting cash", "", UNIT_INT, @@ -530,17 +531,17 @@ int settings_menu_function(void) { 1, 1, 5, NULL); break; case MENU_ATTACHED_USB: - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; break; case GO_TO_PREVIOUS: - return 0; + return RET_VAL_OK; break; } } - return 0; + return RET_VAL_OK; } -static int do_help(void) { +static int superdom_help(void) { int button; #define WORDS (sizeof help_text / sizeof (char*)) static char* help_text[] = { @@ -557,44 +558,47 @@ static int do_help(void) { }; if (display_text(WORDS, help_text, NULL, NULL)) - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; do { button = rb->button_get(true); if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED ) - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; } while( ( button == BUTTON_NONE ) || ( button & (BUTTON_REL|BUTTON_REPEAT) ) ); - return PLUGIN_OK; + return RET_VAL_OK; } -int menu(void) { +int start_menu(void) { int selection = 0; - - MENUITEM_STRINGLIST(main_menu,"Super Domination Menu",NULL, - "Play Super Domination","Settings","Help","Quit"); + + MENUITEM_STRINGLIST(menu, "Super Domination Menu", NULL, + "Play Super Domination", "Settings", + "Help", "Playback Control", "Quit"); while(1) { - selection=rb->do_menu(&main_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: - return 0; /* start playing */ + return RET_VAL_OK; /* start playing */ break; case 1: - if(settings_menu_function()==PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(settings_menu()==RET_VAL_USB) + return RET_VAL_USB; break; case 2: - if(do_help()==PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(superdom_help()==RET_VAL_USB) + return RET_VAL_USB; + break; + case 3: + if(playback_control(NULL)) + return RET_VAL_USB; break; default: - return 2; /* quit program */ + return RET_VAL_QUIT_ERR; break; } } - - return 3; + return RET_VAL_QUIT_ERR; } int save_game(void) { @@ -613,7 +617,7 @@ int save_game(void) { DEBUGF("Couldn't create/open file\n"); return -1; } - + rb->write(fd, "SSGv3", 5); rb->write(fd, &gamestate, sizeof(gamestate)); rb->write(fd, &humanres.cash, sizeof(humanres.cash)); @@ -649,15 +653,13 @@ int save_game(void) { } int ingame_menu(void) { - int selection = 0; - - MENUITEM_STRINGLIST(ingame_menu,"Super Domination Menu",NULL, - "Return to game","Save Game","Playback Control", "Quit"); + MENUITEM_STRINGLIST(menu, "Super Domination Menu", NULL, + "Return to game", "Save Game", + "Playback Control", "Quit"); - selection=rb->do_menu(&ingame_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, NULL, NULL, false)) { case 0: - return 0; + return RET_VAL_OK; break; case 1: if(!save_game()) @@ -666,37 +668,36 @@ int ingame_menu(void) { rb->splash(HZ, "Error in save"); break; case 2: - playback_control(NULL); + if(playback_control(NULL)) + return RET_VAL_USB; break; case 3: - return SUPERDOM_QUIT; + return RET_VAL_QUIT_ERR; break; case MENU_ATTACHED_USB: - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; break; case GO_TO_PREVIOUS: - return 0; + return RET_VAL_OK; break; } - return 0; + return RET_VAL_OK; } int get_number(char* param, int* value) { - //int numbers[3][3] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; - int numbers[3][3]; + static const char *button_labels[4][3] = { + { "1", "2", "3" }, + { "4", "5", "6" }, + { "7", "8", "9" }, + { "CLR", "0", "OK" } + }; int i,j,x=0,y=0; int height, width; int button = 0; - numbers[0][0] = 1; - numbers[0][1] = 2; - numbers[0][2] = 3; - numbers[1][0] = 4; - numbers[1][1] = 5; - numbers[1][2] = 6; - numbers[2][0] = 7; - numbers[2][1] = 8; - numbers[2][2] = 9; rb->lcd_clear_display(); + rb->lcd_getstringsize("CLR", &width, &height); + if(width > NUM_BOX_WIDTH || height > NUM_BOX_HEIGHT) + rb->lcd_setfont(FONT_SYSFIXED); /* Draw a 3x4 grid */ for(i=0;i<=3;i++) { /* Vertical lines */ rb->lcd_vline(NUM_MARGIN_X+(NUM_BOX_WIDTH*i), NUM_MARGIN_Y, @@ -706,41 +707,47 @@ int get_number(char* param, int* value) { rb->lcd_hline(NUM_MARGIN_X, NUM_MARGIN_X+(3*NUM_BOX_WIDTH), NUM_MARGIN_Y+(NUM_BOX_HEIGHT*i)); } - for(i=0;i<3;i++) { + for(i=0;i<4;i++) { for(j=0;j<3;j++) { - rb->snprintf(buf, sizeof(buf), "%d", numbers[i][j]); - rb->lcd_putsxy(NUM_MARGIN_X+(j*NUM_BOX_WIDTH)+10, - NUM_MARGIN_Y+(i*NUM_BOX_HEIGHT)+8, buf); + rb->lcd_getstringsize(button_labels[i][j], &width, &height); + rb->lcd_putsxy( + NUM_MARGIN_X+(j*NUM_BOX_WIDTH)+NUM_BOX_WIDTH/2-width/2, + NUM_MARGIN_Y+(i*NUM_BOX_HEIGHT)+NUM_BOX_HEIGHT/2-height/2, + button_labels[i][j]); } } - rb->lcd_putsxy(NUM_MARGIN_X+5, NUM_MARGIN_Y+(3*NUM_BOX_HEIGHT)+8, "CLR"); - rb->lcd_putsxy(NUM_MARGIN_X+NUM_BOX_WIDTH+10, - NUM_MARGIN_Y+(3*NUM_BOX_HEIGHT)+8, "0"); - rb->lcd_putsxy(NUM_MARGIN_X+2*NUM_BOX_WIDTH+8, - NUM_MARGIN_Y+(3*NUM_BOX_HEIGHT)+8, "OK"); rb->snprintf(buf,sizeof(buf), "%d", *value); rb->lcd_putsxy(NUM_MARGIN_X+10, NUM_MARGIN_Y+4*NUM_BOX_HEIGHT+10, buf); rb->lcd_getstringsize(param, &width, &height); - rb->lcd_putsxy((LCD_WIDTH-width)/2, (NUM_MARGIN_Y-height)/2, param); + if(width < LCD_WIDTH) + rb->lcd_putsxy((LCD_WIDTH-width)/2, (NUM_MARGIN_Y-height)/2, param); + else + rb->lcd_puts_scroll(0, (NUM_MARGIN_Y/height-1)/2, param); rb->lcd_set_drawmode(DRMODE_COMPLEMENT); rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), NUM_BOX_WIDTH+1, - NUM_BOX_HEIGHT+1); + NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), + NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); rb->lcd_set_drawmode(DRMODE_SOLID); rb->lcd_update(); while(1) { button = rb->button_get(true); + rb->lcd_set_drawmode(DRMODE_COMPLEMENT); + rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), + NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), + NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); + rb->lcd_set_drawmode(DRMODE_SOLID); switch(button) { case SUPERDOM_OK: if(y!=3) { *value *= 10; - *value += numbers[y][x]; + *value += button_labels[y][x][0] - '0'; } else if(x==0) { *value /= 10; } else if(x==1) { *value *= 10; } else if(x==2) { - return 0; + rb->lcd_setfont(FONT_UI); + return RET_VAL_OK; } rb->lcd_set_drawmode(DRMODE_BG|DRMODE_INVERSEVID); rb->lcd_fillrect(0, NUM_MARGIN_Y+4*NUM_BOX_HEIGHT+10, @@ -752,16 +759,12 @@ int get_number(char* param, int* value) { break; case SUPERDOM_CANCEL: *value = 0; + rb->lcd_setfont(FONT_UI); rb->splash(HZ, "Cancelled"); - return 2; + return RET_VAL_QUIT_ERR; break; #if CONFIG_KEYPAD != IRIVER_H10_PAD case SUPERDOM_LEFT: - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); if(x==0) { #ifdef IPOD_STYLE if(y>0) @@ -773,18 +776,8 @@ int get_number(char* param, int* value) { } else { x--; } - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); break; case SUPERDOM_RIGHT: - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); if(x==2) { #ifdef IPOD_STYLE if(y==3) @@ -796,20 +789,10 @@ int get_number(char* param, int* value) { } else { x++; } - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); break; #endif #ifndef IPOD_STYLE case SUPERDOM_UP: - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); if(y==0) { #if CONFIG_KEYPAD == IRIVER_H10_PAD if(x > 0) @@ -821,18 +804,8 @@ int get_number(char* param, int* value) { } else { y--; } - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); break; case SUPERDOM_DOWN: - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); if(y==3) { #if CONFIG_KEYPAD == IRIVER_H10_PAD if(x < 2) @@ -844,23 +817,25 @@ int get_number(char* param, int* value) { } else { y++; } - rb->lcd_set_drawmode(DRMODE_COMPLEMENT); - rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), - NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), - NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); - rb->lcd_set_drawmode(DRMODE_SOLID); break; #endif default: if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { - return PLUGIN_USB_CONNECTED; + rb->lcd_setfont(FONT_UI); + return RET_VAL_USB; } break; } + rb->lcd_set_drawmode(DRMODE_COMPLEMENT); + rb->lcd_fillrect(NUM_MARGIN_X+(NUM_BOX_WIDTH*x), + NUM_MARGIN_Y+(NUM_BOX_HEIGHT*y), + NUM_BOX_WIDTH+1, NUM_BOX_HEIGHT+1); + rb->lcd_set_drawmode(DRMODE_SOLID); rb->lcd_update(); } - return 0; + rb->lcd_setfont(FONT_UI); + return RET_VAL_OK; } bool tile_has_item(int type, int x, int y) { @@ -915,6 +890,7 @@ int buy_resources(int colour, int type, int x, int y, int nummen) { bool human = (colour == COLOUR_LIGHT); int price = 0; + int temp; struct resources *res; if(human) { @@ -945,30 +921,24 @@ int buy_resources(int colour, int type, int x, int y, int nummen) { if(res->cash < price) { if(human) rb->splash(HZ, "Not enough money!"); - return 2; + return RET_VAL_QUIT_ERR; } if(human) { rb->splashf(HZ, "Where do you want to place %s?", itemnames[0][type]); - switch(select_square()) { - case 2: - return 2; - break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - } + if((temp = select_square()) != RET_VAL_OK) + return temp; x = cursor.x; y = cursor.y; } if(board[x][y].colour != colour) { if(human) rb->splashf(HZ, "Can't %s on enemy territory", itemnames[1][type]); - return 2; + return RET_VAL_QUIT_ERR; } if(type != 0 && tile_has_item(type, x, y)) { if(human) rb->splashf(HZ, "There is already %s there", itemnames[2][type]); - return 2; + return RET_VAL_QUIT_ERR; } switch(type) { case 0: @@ -1001,25 +971,25 @@ int buy_resources(int colour, int type, int x, int y, int nummen) { draw_board(); rb->sleep(HZ); - return 0; + return RET_VAL_OK; } int buy_resources_menu(void) { - int selection,nummen; + int selection = 0,nummen; - MENUITEM_STRINGLIST(res_menu, "Buy Resources", NULL, "Buy men ($1)", - "Buy tank ($300)", "Buy plane ($600)", "Buy Farm ($1150)", - "Buy Factory ($1300)", "Buy Nuke ($2000)", + MENUITEM_STRINGLIST(menu, "Buy Resources", NULL, + "Buy men ($1)", "Buy tank ($300)", "Buy plane ($600)", + "Buy Farm ($1150)", "Buy Factory ($1300)", + "Buy Nuke ($2000)", "Finish buying"); while(1) { - selection=rb->do_menu(&res_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: nummen = 0; if(get_number("How many men would you like?", &nummen) - == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + == RET_VAL_USB) + return RET_VAL_USB; if(!nummen) break; /* fall through */ @@ -1029,21 +999,21 @@ int buy_resources_menu(void) { case 4: case 5: if(buy_resources(COLOUR_LIGHT, selection, 0, 0, nummen) - == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + == RET_VAL_USB) + return RET_VAL_USB; break; case 6: - return 0; + return RET_VAL_OK; break; case MENU_ATTACHED_USB: - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; break; case GO_TO_PREVIOUS: - return 0; + return RET_VAL_OK; break; } } - return 0; + return RET_VAL_OK; } int move_unit(int colour, int type, int fromx, int fromy, @@ -1064,60 +1034,44 @@ int move_unit(int colour, int type, int fromx, int fromy, } }; bool human = (colour == COLOUR_LIGHT); + int temp; if(human) { rb->splashf(HZ, "Select where you want to move %s from", itemnames[0][type]); - switch(select_square()) { - case 2: - return 2; - break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - } + if((temp = select_square()) != RET_VAL_OK) + return temp; fromx = cursor.x; fromy = cursor.y; } if(board[fromx][fromy].colour != colour) { if(human) rb->splash(HZ, "That isn't your territory"); - return 2; + return RET_VAL_QUIT_ERR; } if(!tile_has_item(type, fromx, fromy)) { if(human) rb->splashf(HZ, "You don't have %s there", itemnames[1][type]); - return 2; + return RET_VAL_QUIT_ERR; } if(type == 0) { if(human) { nummen = board[fromx][fromy].men; - switch(get_number("How many men do you want to move?", &nummen)) { - case 2: - return 2; - break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - } + if((temp = get_number("How many men do you want to move?", &nummen)) + != RET_VAL_OK) + return temp; } if(nummen > board[fromx][fromy].men) { if(human) rb->splash(HZ, "You don't have that many troops."); - return 2; + return RET_VAL_QUIT_ERR; } } if(human) { rb->splashf(HZ, "Select where you want to move %s to", itemnames[2][type]); - switch(select_square()) { - case 2: - return 2; - break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - } + if((temp = select_square()) != RET_VAL_OK) + return temp; tox = cursor.x; toy = cursor.y; } @@ -1126,12 +1080,12 @@ int move_unit(int colour, int type, int fromx, int fromy, (type != 2 && (abs(tox - fromx) > 1 || abs(toy - fromy) > 1))) { if(human) rb->splash(HZ, "Invalid move"); - return 2; + return RET_VAL_QUIT_ERR; } if(type != 0 && tile_has_item(type, tox, toy)) { if(human) rb->splashf(HZ, "There is already %s there", itemnames[1][type]); - return 2; + return RET_VAL_QUIT_ERR; } switch(type) { case 0: @@ -1147,58 +1101,52 @@ int move_unit(int colour, int type, int fromx, int fromy, board[tox][toy].plane = true; break; } - return 0; + return RET_VAL_OK; } int move_unit_menu(void) { - int selection; + int selection = 0; - MENUITEM_STRINGLIST(move_unit_menu, "Move unit", NULL, "Move men", - "Move tank", "Move plane"); - selection=rb->do_menu(&move_unit_menu,&selection, NULL, false); - switch(selection) { + MENUITEM_STRINGLIST(menu, "Move unit", NULL, + "Move men", "Move tank", "Move plane"); + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: case 1: case 2: switch(move_unit(COLOUR_LIGHT, selection, 0, 0, 0, 0, 0)) { - case 0: + case RET_VAL_OK: humanres.moves--; break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; + case RET_VAL_USB: + return RET_VAL_USB; break; } break; case MENU_ATTACHED_USB: - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; } - return 0; + return RET_VAL_OK; } int launch_nuke(int colour, int nukex, int nukey, int targetx, int targety) { bool human = (colour == COLOUR_LIGHT); + int temp; struct resources *res; if(board[nukex][nukey].colour != colour) { if(human) rb->splash(HZ, "That isn't your territory"); - return 2; + return RET_VAL_QUIT_ERR; } if(! board[nukex][nukey].nuke) { if(human) rb->splashf(HZ, "You don't have %s there", "a nuke"); - return 2; + return RET_VAL_QUIT_ERR; } if(human) { rb->splash(HZ, "Select place to target with nuke"); - switch(select_square()) { - case 2: - return 2; - break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - } + if((temp = select_square()) != RET_VAL_OK) + return temp; targetx = cursor.x; targety = cursor.y; } @@ -1228,23 +1176,23 @@ int launch_nuke(int colour, int nukex, int nukey, int targetx, int targety) { board[targetx][targety].farm = false; /* TODO: Fallout carried by wind */ - return 0; + return RET_VAL_OK; } int movement_menu(void) { - int selection, tempmenu; + int selection = 0, temp; - MENUITEM_STRINGLIST(move_menu, "Movement", NULL, "Move unit", - "Buy additional moves ($100)", "Launch nuclear missile", - "Check map", "Finish moving", "Game menu"); + MENUITEM_STRINGLIST(menu, "Movement", NULL, + "Move unit", "Buy additional moves ($100)", + "Launch nuclear missile", "Check map", + "Finish moving", "Game menu"); while(1) { - selection=rb->do_menu(&move_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: if(humanres.moves) { - if(move_unit_menu()==PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(move_unit_menu()==RET_VAL_USB) + return RET_VAL_USB; } else { rb->splash(HZ, "You have no more moves left." " You can buy more for $100 each."); @@ -1265,140 +1213,144 @@ int movement_menu(void) { } else { rb->splash(HZ, "Select place to launch nuke from"); switch(select_square()) { - case 0: + case RET_VAL_OK: if(launch_nuke(COLOUR_LIGHT, cursor.x, cursor.y, - 0, 0) == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + 0, 0) == RET_VAL_USB) + return RET_VAL_USB; break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; + case RET_VAL_USB: + return RET_VAL_USB; break; } } break; case 3: - if(select_square() == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(select_square() == RET_VAL_USB) + return RET_VAL_USB; break; case 4: - return 0; + return RET_VAL_OK; break; case 5: - tempmenu = ingame_menu(); - switch(tempmenu) { - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - case SUPERDOM_QUIT: - return SUPERDOM_QUIT; - break; - } + if((temp = ingame_menu()) != RET_VAL_OK) + return temp; break; case MENU_ATTACHED_USB: - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; break; } } - return 0; + return RET_VAL_OK; +} + +static char * inventory_data(int selected_item, void * data, + char * buffer, size_t buffer_len) { + (void)data; + switch(selected_item) { + case 0: + rb->snprintf(buffer,buffer_len,"Men: %d", humanres.men); + break; + case 1: + rb->snprintf(buffer,buffer_len,"Tanks: %d", humanres.tanks); + break; + case 2: + rb->snprintf(buffer,buffer_len,"Planes: %d", humanres.planes); + break; + case 3: + rb->snprintf(buffer,buffer_len,"Factories: %d", humanres.inds); + break; + case 4: + rb->snprintf(buffer,buffer_len,"Farms: %d", humanres.farms); + break; + case 5: + rb->snprintf(buffer,buffer_len,"Nukes: %d", humanres.nukes); + break; + case 6: + rb->snprintf(buffer,buffer_len,"Cash: %d", humanres.cash); + break; + case 7: + rb->snprintf(buffer,buffer_len,"Food: %d", humanres.food); + break; + case 8: + rb->snprintf(buffer,buffer_len,"Bank: %d", humanres.bank); + break; + default: + return NULL; + } + return buffer; } int show_inventory(void) { - char men[20], tanks[20], planes[20], inds[20], farms[20], nukes[20], - cash[20], food[20], bank[20]; - rb->snprintf(men, sizeof(men), "Men: %d", humanres.men); - rb->snprintf(tanks, sizeof(tanks), "Tanks: %d", humanres.tanks); - rb->snprintf(planes, sizeof(planes), "Planes: %d", humanres.planes); - rb->snprintf(inds, sizeof(inds), "Factories: %d", humanres.inds); - rb->snprintf(farms, sizeof(farms), "Farms: %d", humanres.farms); - rb->snprintf(nukes, sizeof(nukes), "Nukes: %d", humanres.nukes); - rb->snprintf(cash, sizeof(cash), "Cash: %d", humanres.cash); - rb->snprintf(food, sizeof(food), "Food: %d", humanres.food); - rb->snprintf(bank, sizeof(bank), "Bank: %d", humanres.bank); - rb->lcd_clear_display(); - rb->lcd_puts(1, 0, "Inventory"); - rb->lcd_puts(2, 1, men); - rb->lcd_puts(2, 2, tanks); - rb->lcd_puts(2, 3, planes); - rb->lcd_puts(2, 4, inds); - rb->lcd_puts(2, 5, farms); - rb->lcd_puts(2, 6, nukes); - rb->lcd_puts(2, 7, cash); - rb->lcd_puts(2, 8, food); - rb->lcd_puts(2, 9, bank); - rb->lcd_update(); - if(rb->default_event_handler(rb->button_get(true)) == SYS_USB_CONNECTED) { - return PLUGIN_USB_CONNECTED; + struct simplelist_info info; + rb->simplelist_info_init(&info, "Inventory", 9, NULL); + info.hide_selection = true; + info.get_name = inventory_data; + if(rb->simplelist_show_list(&info)) { + return RET_VAL_USB; } else { - return 0; + return RET_VAL_OK; } } int production_menu(void) { - int selection, tempbank, tempmenu; + int selection = 0, temp; - MENUITEM_STRINGLIST(prod_menu, "Production", NULL, "Buy resources", - "Show inventory", "Check map", "Invest money", - "Withdraw money", "Finish turn", "Game menu"); + MENUITEM_STRINGLIST(menu, "Production", NULL, + "Buy resources", "Show inventory", "Check map", + "Invest money", "Withdraw money", + "Finish turn", "Game menu"); while(1) { - selection=rb->do_menu(&prod_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: - if(buy_resources_menu() == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(buy_resources_menu() == RET_VAL_USB) + return RET_VAL_USB; break; case 1: - if(show_inventory() == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(show_inventory() == RET_VAL_USB) + return RET_VAL_USB; break; case 2: - if(select_square() == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; + if(select_square() == RET_VAL_USB) + return RET_VAL_USB; break; case 3: - tempbank = humanres.cash; - if(get_number("How much do you want to invest?", &tempbank) - == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; - if(tempbank>humanres.cash) { + temp = humanres.cash; + if(get_number("How much do you want to invest?", &temp) + == RET_VAL_USB) + return RET_VAL_USB; + if(temp > humanres.cash) { rb->splash(HZ, "You don't have that much cash to invest"); } else { - humanres.cash -= tempbank; - humanres.bank += tempbank; + humanres.cash -= temp; + humanres.bank += temp; } break; case 4: - tempbank = 0; - if(get_number("How much do you want to withdraw?", &tempbank) - == PLUGIN_USB_CONNECTED) - return PLUGIN_USB_CONNECTED; - if(tempbank>humanres.bank) { + temp = humanres.bank; + if(get_number("How much do you want to withdraw?", &temp) + == RET_VAL_USB) + return RET_VAL_USB; + if(temp > humanres.bank) { rb->splash(HZ, "You don't have that much cash to withdraw"); } else { - humanres.cash += tempbank; - humanres.bank -= tempbank; + humanres.cash += temp; + humanres.bank -= temp; } break; case 5: - return 0; + return RET_VAL_OK; break; case 6: - tempmenu = ingame_menu(); - switch(tempmenu) { - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - case SUPERDOM_QUIT: - return SUPERDOM_QUIT; - break; - } + if((temp = ingame_menu()) != RET_VAL_OK) + return temp; break; case MENU_ATTACHED_USB: - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; break; } } - return 0; + return RET_VAL_OK; } void init_resources(void) { @@ -1443,10 +1395,10 @@ int select_square(void) { switch(button) { case SUPERDOM_CANCEL: rb->splash(HZ, "Cancelled"); - return 2; + return RET_VAL_QUIT_ERR; break; case SUPERDOM_OK: - return 0; + return RET_VAL_OK; break; #if CONFIG_KEYPAD != IRIVER_H10_PAD case SUPERDOM_LEFT: @@ -1523,7 +1475,7 @@ int select_square(void) { default: if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { - return PLUGIN_USB_CONNECTED; + return RET_VAL_USB; } } } @@ -1616,43 +1568,36 @@ int attack_territory(int colour, int x, int y) { } int war_menu(void) { - int selection, tempmenu; + int selection = 0, temp; - MENUITEM_STRINGLIST(wartime_menu, "War!", NULL, - "Select territory to attack", "Finish turn", "Game menu"); + MENUITEM_STRINGLIST(menu, "War!", NULL, + "Select territory to attack", + "Finish turn", "Game menu"); while(humanres.moves) { - selection=rb->do_menu(&wartime_menu,&selection, NULL, false); - switch(selection) { + switch(rb->do_menu(&menu, &selection, NULL, false)) { case 0: switch(select_square()) { - case 0: + case RET_VAL_OK: if(attack_territory(COLOUR_LIGHT, cursor.x, cursor.y) - >= 0) + >= 0) humanres.moves--; break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; + case RET_VAL_USB: + return RET_VAL_USB; break; } break; case 1: - return 0; + return RET_VAL_OK; break; case 2: - tempmenu = ingame_menu(); - switch(tempmenu) { - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - case SUPERDOM_QUIT: - return SUPERDOM_QUIT; - break; - } + if((temp = ingame_menu()) != RET_VAL_OK) + return temp; break; } } - return 0; + return RET_VAL_OK; } struct threat { @@ -1908,7 +1853,7 @@ void computer_war(void) { int i, j; bool found_target = true; struct cursor adj; - + while(found_target) { found_target = false; for(i=1;i<11;i++) { @@ -2073,20 +2018,17 @@ enum plugin_status plugin_start(const void* parameter) } } - bool play = false; - while(!play) { - switch(menu()) { - case 0: - play = true; - break; - case 2: - return PLUGIN_OK; - break; - case PLUGIN_USB_CONNECTED: - return PLUGIN_USB_CONNECTED; - break; - } + switch(start_menu()) { + case RET_VAL_OK: /* start playing */ + break; + case RET_VAL_QUIT_ERR: /* quit */ + return PLUGIN_OK; + break; + case RET_VAL_USB: + return PLUGIN_USB_CONNECTED; + break; } + init_resources(); init_board(); gen_resources(); @@ -2108,10 +2050,10 @@ startyear: startprod: gamestate = GS_PROD; switch(production_menu()) { - case PLUGIN_USB_CONNECTED: + case RET_VAL_USB: return PLUGIN_USB_CONNECTED; break; - case SUPERDOM_QUIT: + case RET_VAL_QUIT_ERR: return PLUGIN_OK; break; } @@ -2122,10 +2064,10 @@ startprod: startmove: gamestate = GS_MOVE; switch(movement_menu()) { - case PLUGIN_USB_CONNECTED: + case RET_VAL_USB: return PLUGIN_USB_CONNECTED; break; - case SUPERDOM_QUIT: + case RET_VAL_QUIT_ERR: return PLUGIN_OK; break; } @@ -2157,10 +2099,10 @@ startmove: startwar: gamestate = GS_WAR; switch(war_menu()) { - case PLUGIN_USB_CONNECTED: + case RET_VAL_USB: return PLUGIN_USB_CONNECTED; break; - case SUPERDOM_QUIT: + case RET_VAL_QUIT_ERR: return PLUGIN_OK; break; } |