summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTeruaki Kawashima <teru@rockbox.org>2009-08-02 14:30:09 +0000
committerTeruaki Kawashima <teru@rockbox.org>2009-08-02 14:30:09 +0000
commitece0b227a4d5dbb3d6d71aca647d9f4236136392 (patch)
tree83d785b41949c2b6c347713beca931c38baaffed
parente3f7184e608c15e2af7d73e6d18f38a9a3c2cf9c (diff)
downloadrockbox-ece0b227a4d5dbb3d6d71aca647d9f4236136392.tar.gz
rockbox-ece0b227a4d5dbb3d6d71aca647d9f4236136392.zip
Superdom: introduce new enum for value to be returned in many places instead of mix of PLUGIN_USB_CONNECTED and numbers.
improve number input screen. check size of labels and use sysfont if they are too large. put them at center of each box. use simplelist to show inventory(part of FS #7593). git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22113 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/superdom.c594
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;
}