From 2357ec4178de417c69d1ce0001ceac747e0512a3 Mon Sep 17 00:00:00 2001 From: Teruaki Kawashima Date: Mon, 3 Aug 2009 16:30:08 +0000 Subject: calendar: fix bug when add new event text longer than last entry. blackjack: fix bug that bet becomes 10 when resume saved game. bubbles: save high level to sparate file. clix, spacerocks, jewels, bubbles: correct text of menu item. wormlet: clean up code: removed unused defines and functions. pluginlib display_text: insert sleep so that the screen doesn't quit immediately. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22143 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/blackjack.c | 280 ++++++++++---------- apps/plugins/bubbles.c | 130 ++++++---- apps/plugins/calendar.c | 138 ++++------ apps/plugins/clix.c | 2 +- apps/plugins/jewels.c | 2 +- apps/plugins/lib/highscore.c | 3 +- apps/plugins/rocklife.c | 2 +- apps/plugins/spacerocks.c | 2 +- apps/plugins/wormlet.c | 594 ++++++++++--------------------------------- 9 files changed, 410 insertions(+), 743 deletions(-) diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c index e1a856967f..97b44b3d3c 100644 --- a/apps/plugins/blackjack.c +++ b/apps/plugins/blackjack.c @@ -406,7 +406,7 @@ struct highscore highest[NUM_SCORES]; #endif #ifdef HAVE_TOUCHSCREEN -#ifndef BJACK_DOUBLEDOWN +#ifndef BJACK_DOUBLEDOWN #define BJACK_DOUBLEDOWN BUTTON_MIDLEFT #define BJACK_DOUBLE_NAME "BUTTON_MIDLEFT" #endif @@ -475,27 +475,26 @@ typedef struct card { typedef struct game_context { struct card player_cards[2][22]; /* 22 Cards means the deal was all aces */ struct card dealer_cards[22]; /* That is the worst-case scenario */ - unsigned int player_total; - unsigned int dealer_total; - signed int player_money; - unsigned int num_player_cards[2]; - unsigned int num_dealer_cards; - unsigned int current_bet; + unsigned int player_total; + unsigned int dealer_total; + signed int player_money; + unsigned int num_player_cards[2]; + unsigned int num_dealer_cards; + unsigned int current_bet; unsigned int split_status; /* 0 = split hasn't been asked, * * 1 = split did not occur * * 2 = split occurred * * 3 = split occurred and 1st hand done */ - bool is_blackjack; - bool end_hand; + bool is_blackjack; + bool end_hand; bool asked_insurance; bool resume; - bool dirty; } game_context; /***************************************************************************** * blackjack_init() initializes blackjack data structures. ******************************************************************************/ -static void blackjack_init(struct game_context* bj) { +static void blackjack_init(struct game_context* bj) { /* seed the rand generator */ rb->srand(*rb->current_tick); @@ -504,7 +503,7 @@ static void blackjack_init(struct game_context* bj) { dealer_y = LCD_HEIGHT/4 - CARD_HEIGHT/2; player_x = 4; player_y = LCD_HEIGHT - LCD_HEIGHT/4 - CARD_HEIGHT/2; - + /* check for resumed game */ if(bj->resume) return; @@ -517,7 +516,7 @@ static void blackjack_init(struct game_context* bj) { bj->end_hand = false; bj->split_status = 0; bj->is_blackjack = false; - bj->asked_insurance = false; + bj->asked_insurance = false; } /***************************************************************************** @@ -526,7 +525,7 @@ static void blackjack_init(struct game_context* bj) { static void blackjack_drawtable(struct game_context* bj) { unsigned int w, h, y_loc; char str[10]; - + #if LCD_HEIGHT <= 64 rb->lcd_getstringsize("Bet", &w, &h); rb->lcd_putsxy(LCD_WIDTH - w, 2*h + 1, "Bet"); @@ -577,19 +576,19 @@ static unsigned int find_value(unsigned int number) { /***************************************************************************** * draw_card() draws a card to the screen. ******************************************************************************/ -static void draw_card(struct card temp_card, bool shown, unsigned int x, - unsigned int y) { +static void draw_card(struct card temp_card, bool shown, + unsigned int x, unsigned int y) { if(shown) - rb->lcd_bitmap_part(card_deck, CARD_WIDTH*temp_card.num, + rb->lcd_bitmap_part(card_deck, CARD_WIDTH*temp_card.num, CARD_HEIGHT*temp_card.suit, BMPWIDTH_card_deck, x+1, y+1, CARD_WIDTH, CARD_HEIGHT); else - rb->lcd_bitmap(card_back, x+1, y+1,CARD_WIDTH, CARD_HEIGHT); + rb->lcd_bitmap(card_back, x+1, y+1,CARD_WIDTH, CARD_HEIGHT); #if LCD_DEPTH > 1 rb->lcd_set_foreground(LCD_BLACK); #endif - /* Print outlines */ + /* Print outlines */ #if CARD_WIDTH >= 26 rb->lcd_hline(x+2, x+CARD_WIDTH-1, y); rb->lcd_hline(x+2, x+CARD_WIDTH-1, y+CARD_HEIGHT+1); @@ -618,7 +617,7 @@ static struct card new_card(void) { struct card new_card; new_card.suit = rb->rand()%4; /* Random number 0-3 */ new_card.num = rb->rand()%13; /* Random number 0-12 */ - new_card.value = find_value(new_card.num); + new_card.value = find_value(new_card.num); new_card.is_soft_ace = new_card.num == 0 ? true : false; return new_card; } @@ -645,7 +644,7 @@ static void deal_init_cards(struct game_context* bj) { bj->player_cards[0][1] = new_card(); bj->player_total += bj->player_cards[0][1].value; draw_card(bj->player_cards[0][1], true, player_x, player_y); - player_x += CARD_WIDTH + 4; + player_x += CARD_WIDTH + 4; } /***************************************************************************** @@ -669,7 +668,7 @@ static void redraw_board(struct game_context* bj) { dealer_x += CARD_WIDTH + 4; } draw_card(bj->dealer_cards[i], true, dealer_x, dealer_y); - + if (bj->num_dealer_cards > MAX_CARDS-1) dealer_x += 10; else @@ -682,7 +681,7 @@ static void redraw_board(struct game_context* bj) { if (bj->split_status>1 || bj->num_player_cards[n]>MAX_CARDS) player_x += 10; else - player_x += CARD_WIDTH + 4; + player_x += CARD_WIDTH + 4; } if (bj->split_status > 1) player_x = LCD_WIDTH/2 + 4; @@ -709,12 +708,11 @@ static void update_total(struct game_context* bj) { * check_for_aces() is passed an array of cards and returns where an ace is * located. Otherwise, returns -1. ******************************************************************************/ -static signed int check_for_aces(struct card temp_cards[], - unsigned int size) { +static signed int check_for_aces(struct card temp_cards[], unsigned int size) { unsigned int i; for(i = 0; i < size; i++) { if (temp_cards[i].is_soft_ace == true) - return i; + return i; } return -1; } @@ -723,26 +721,26 @@ static signed int check_for_aces(struct card temp_cards[], * check_totals() compares player and dealer totals. * 0: bust 1: loss, 2: push, 3: win, 4: blackjack, 5: something's not right... ******************************************************************************/ -static unsigned int check_totals(struct game_context* bj) -{ +static unsigned int check_totals(struct game_context* bj) { unsigned int temp; if (bj->player_total > 21) - temp = 0; - else if (bj->player_total == 21 && bj->is_blackjack) - if (bj->dealer_total == 21 && bj->num_dealer_cards == 2) - temp = 2; - else - temp = 4; + temp = 0; + else if (bj->player_total == 21 && bj->is_blackjack) { + if (bj->dealer_total == 21 && bj->num_dealer_cards == 2) + temp = 2; + else + temp = 4; + } else if (bj->player_total == bj->dealer_total) - temp = 2; + temp = 2; else if (bj->dealer_total > 21 && bj->player_total < 22) - temp = 3; + temp = 3; else if (bj->dealer_total > bj->player_total) - temp = 1; + temp = 1; else if (bj->player_total > bj->dealer_total) - temp = 3; + temp = 3; else - temp = 5; + temp = 5; return temp; } @@ -752,24 +750,24 @@ static unsigned int check_totals(struct game_context* bj) ******************************************************************************/ static void finish_dealer(struct game_context* bj) { signed int temp = 0; - + if (bj->dealer_total > 16 && bj->dealer_total < 22) return; - + while (bj->dealer_total < 17) { - bj->dealer_cards[bj->num_dealer_cards] = new_card(); - bj->dealer_total += bj->dealer_cards[bj->num_dealer_cards].value; - bj->num_dealer_cards++; + bj->dealer_cards[bj->num_dealer_cards] = new_card(); + bj->dealer_total += bj->dealer_cards[bj->num_dealer_cards].value; + bj->num_dealer_cards++; } - + while (bj->dealer_total > 21) { - temp = check_for_aces(bj->dealer_cards, bj->num_dealer_cards); - if(temp != -1) { - bj->dealer_cards[temp].is_soft_ace = false; - bj->dealer_total -= 10; - } - else - return; + temp = check_for_aces(bj->dealer_cards, bj->num_dealer_cards); + if(temp != -1) { + bj->dealer_cards[temp].is_soft_ace = false; + bj->dealer_total -= 10; + } + else + return; } } @@ -783,31 +781,31 @@ static void finish_game(struct game_context* bj) { do { finish_dealer(bj); } while (bj->dealer_total < 17); - + redraw_board(bj); rValue = check_totals(bj); if (rValue == 0) { - rb->snprintf(str, sizeof(str), " Bust! "); - bj->player_money -= bj->current_bet; + rb->snprintf(str, sizeof(str), " Bust! "); + bj->player_money -= bj->current_bet; } else if (rValue == 1) { - rb->snprintf(str, sizeof(str), " Sorry, you lost. "); - bj->player_money -= bj->current_bet; + rb->snprintf(str, sizeof(str), " Sorry, you lost. "); + bj->player_money -= bj->current_bet; } else if (rValue == 2) { - rb->snprintf(str, sizeof(str), " Push "); + rb->snprintf(str, sizeof(str), " Push "); } else if (rValue == 3) { - rb->snprintf(str, sizeof(str), " You won! "); - bj->player_money+= bj->current_bet; + rb->snprintf(str, sizeof(str), " You won! "); + bj->player_money+= bj->current_bet; } else { - rb->snprintf(str, sizeof(str), " Blackjack! "); - bj->player_money += bj->current_bet * 3 / 2; + rb->snprintf(str, sizeof(str), " Blackjack! "); + bj->player_money += bj->current_bet * 3 / 2; } rb->lcd_getstringsize(str, &w, &h); - + #if LCD_HEIGHT <= 64 rb->lcd_set_drawmode(DRMODE_BG+DRMODE_INVERSEVID); rb->lcd_fillrect(0, LCD_HEIGHT/2, LCD_WIDTH, LCD_HEIGHT/2); @@ -835,7 +833,7 @@ static bool blackjack_loadgame(struct game_context* bj) { /* read in saved game */ while(true) { - if(rb->read(fd, &bj->player_money, sizeof(bj->player_money)) <= 0) + if(rb->read(fd, &bj->player_money, sizeof(bj->player_money)) <= 0) break; if(rb->read(fd, &bj->player_total, sizeof(bj->player_total)) <= 0) break; @@ -845,19 +843,19 @@ static bool blackjack_loadgame(struct game_context* bj) { break; if(rb->read(fd, &bj->num_dealer_cards, sizeof(bj->num_dealer_cards))<=0) break; - if(rb->read(fd, &bj->current_bet, sizeof(bj->current_bet)) <= 0) + if(rb->read(fd, &bj->current_bet, sizeof(bj->current_bet)) <= 0) break; - if(rb->read(fd, &bj->is_blackjack, sizeof(bj->is_blackjack)) <= 0) + if(rb->read(fd, &bj->is_blackjack, sizeof(bj->is_blackjack)) <= 0) break; - if(rb->read(fd, &bj->split_status, sizeof(bj->split_status)) <= 0) + if(rb->read(fd, &bj->split_status, sizeof(bj->split_status)) <= 0) break; if(rb->read(fd, &bj->asked_insurance, sizeof(bj->asked_insurance)) <= 0) break; - if(rb->read(fd, &bj->end_hand, sizeof(bj->end_hand)) <= 0) + if(rb->read(fd, &bj->end_hand, sizeof(bj->end_hand)) <= 0) break; - if(rb->read(fd, &bj->player_cards, sizeof(bj->player_cards)) <= 0) + if(rb->read(fd, &bj->player_cards, sizeof(bj->player_cards)) <= 0) break; - if(rb->read(fd, &bj->dealer_cards, sizeof(bj->dealer_cards)) <= 0) + if(rb->read(fd, &bj->dealer_cards, sizeof(bj->dealer_cards)) <= 0) break; bj->resume = true; loaded = true; @@ -911,7 +909,7 @@ static unsigned int blackjack_get_yes_no(char message[20]) { rb->strcat(message_no, " No"); rb->lcd_getstringsize(message_yes, &w, &h); const char *stg[] = {message_yes, message_no}; - + #if LCD_HEIGHT <= 64 b = 2*h+1; #else @@ -928,10 +926,10 @@ static unsigned int blackjack_get_yes_no(char message[20]) { rb->lcd_set_drawmode(DRMODE_SOLID); #endif rb->lcd_drawrect(LCD_WIDTH/2 - w/2 - 1, LCD_HEIGHT/2 + b - 1, w+3, h+4); - + while(!breakout) { rb->lcd_putsxy(LCD_WIDTH/2 - w/2, LCD_HEIGHT/2 + b +1, stg[choice]); - rb->lcd_update_rect(LCD_WIDTH/2 - w/2 - 1, LCD_HEIGHT/2 + b -1, + rb->lcd_update_rect(LCD_WIDTH/2 - w/2 - 1, LCD_HEIGHT/2 + b -1, w+3, h+4); button = rb->button_get(true); @@ -949,7 +947,7 @@ static unsigned int blackjack_get_yes_no(char message[20]) { break; } } - + #if LCD_DEPTH > 1 rb->lcd_set_foreground(FG_COLOR); rb->lcd_set_background(BG_COLOR); @@ -961,16 +959,16 @@ static unsigned int blackjack_get_yes_no(char message[20]) { * blackjack_get_amount() gets an amount from the player to be used ******************************************************************************/ static signed int blackjack_get_amount(char message[20], signed int lower_limit, - signed int upper_limit, + signed int upper_limit, signed int start) { int button; - char str[6]; + char str[9]; bool changed = false; unsigned int w, h; signed int amount; - + rb->lcd_getstringsize("A", &w, &h); /* find the size of one character */ - + if (start > upper_limit) amount = upper_limit; else if (start < lower_limit) @@ -995,11 +993,11 @@ static signed int blackjack_get_amount(char message[20], signed int lower_limit, rb->lcd_update(); #else rb->lcd_set_drawmode(DRMODE_BG+DRMODE_INVERSEVID); - rb->lcd_fillrect(LCD_WIDTH/2 - 9*w - 1, LCD_HEIGHT/2 - 4*h - 3, 37*w / 2, - 8*h -3); + rb->lcd_fillrect(LCD_WIDTH/2 - 9*w - 1, LCD_HEIGHT/2 - 4*h - 3, + 37*w / 2, 8*h -3); rb->lcd_set_drawmode(DRMODE_SOLID); - rb->lcd_drawrect(LCD_WIDTH/2 - 9*w - 1, LCD_HEIGHT/2 - 4*h - 3, 37*w / 2, - 8*h -3); + rb->lcd_drawrect(LCD_WIDTH/2 - 9*w - 1, LCD_HEIGHT/2 - 4*h - 3, + 37*w / 2, 8*h -3); rb->lcd_putsxy(LCD_WIDTH/2 - 9*w, LCD_HEIGHT/2 - 4*h - 1, message); rb->snprintf(str, 9, "$%d", amount); rb->lcd_putsxy(LCD_WIDTH/2 - 9*w, LCD_HEIGHT/2 - 3*h, str); @@ -1021,21 +1019,21 @@ static signed int blackjack_get_amount(char message[20], signed int lower_limit, rb->lcd_putsxy(LCD_WIDTH/2 - 9*w, LCD_HEIGHT/2 + h, "UP: +10"); rb->lcd_putsxy(LCD_WIDTH/2 - 9*w, LCD_HEIGHT/2 + 2*h + 1, "DOWN: -10"); #endif - rb->lcd_update_rect(LCD_WIDTH/2 - 9*w - 2, LCD_HEIGHT/2 - 9*h/2, 37*w/2 + 1, - 8*h-2); + rb->lcd_update_rect(LCD_WIDTH/2 - 9*w - 1, LCD_HEIGHT/2 - 4*h - 3, + 37*w / 2, 8*h -3); #endif - + while(true) { button = rb->button_get(true); switch(button) { case BJACK_UP: case (BJACK_UP|BUTTON_REPEAT): - if (amount + 10 < upper_limit + 1) { + if (amount + 10 < upper_limit + 1) { amount += 10; changed = true; - } - break; + } + break; case BJACK_DOWN: case (BJACK_DOWN|BUTTON_REPEAT): if (amount - 10 > lower_limit - 1) { @@ -1074,9 +1072,9 @@ static signed int blackjack_get_amount(char message[20], signed int lower_limit, #endif rb->lcd_clear_display(); return amount; - } + } - if(changed) { + if(changed) { rb->snprintf(str, 9, "$%d", amount); #if LCD_HEIGHT <= 64 rb->lcd_puts(0, 2, str); @@ -1097,7 +1095,7 @@ static signed int blackjack_get_amount(char message[20], signed int lower_limit, * blackjack_get_bet() gets the player's bet. ******************************************************************************/ static void blackjack_get_bet(struct game_context* bj) { - bj->current_bet = blackjack_get_amount("Please enter a bet", 10, + bj->current_bet = blackjack_get_amount("Please enter a bet", 10, bj->player_money, bj->current_bet); } @@ -1133,11 +1131,11 @@ static void split(struct game_context* bj) { * insurance() see if the player wants to buy insurance and how much. ******************************************************************************/ static unsigned int insurance(struct game_context* bj) { - unsigned int insurance, max_amount; - + unsigned int insurance, max_amount; + insurance = blackjack_get_yes_no("Buy Insurance?"); bj->asked_insurance = true; - max_amount = bj->current_bet < (unsigned int)bj->player_money ? + max_amount = bj->current_bet < (unsigned int)bj->player_money ? bj->current_bet/2 : (unsigned int)bj->player_money; if (insurance == 1) return 0; @@ -1153,7 +1151,10 @@ static unsigned int play_again(void) { return blackjack_get_yes_no("Play Again?"); } -void showhelp(void) { +/***************************************************************************** +* blackjack_help() displays help text. +******************************************************************************/ +static bool blackjack_help(void) { #define WORDS (sizeof help_text / sizeof (char*)) static char *help_text[] = { "Blackjack", "", @@ -1184,16 +1185,16 @@ void showhelp(void) { #endif if (display_text(WORDS, help_text, formation, NULL)) - return; + return true; do { button = rb->button_get(true); if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { - return; + return true; } } while( ( button == BUTTON_NONE ) || ( button & (BUTTON_REL|BUTTON_REPEAT) ) ); rb->lcd_setfont(FONT_SYSFIXED); - return; + return false; } /***************************************************************************** @@ -1202,9 +1203,11 @@ void showhelp(void) { static unsigned int blackjack_menu(struct game_context* bj) { int selection=0; bool breakout = false; - - MENUITEM_STRINGLIST(menu,"BlackJack Menu",NULL,"Start Game","Resume Game", - "High Scores", "Help", "Playback Control", "Quit"); + + MENUITEM_STRINGLIST(menu, "BlackJack Menu", NULL, + "Start Game","Resume Game", + "High Scores", "Help", + "Playback Control", "Quit"); while(!breakout) { switch(rb->do_menu(&menu, &selection, NULL, false)) { @@ -1215,7 +1218,6 @@ static unsigned int blackjack_menu(struct game_context* bj) { if(!blackjack_loadgame(bj)) { rb->splash(HZ*2, "Nothing to resume"); } else { - rb->splash(HZ*2, "Loading..."); breakout = true; } break; @@ -1223,18 +1225,19 @@ static unsigned int blackjack_menu(struct game_context* bj) { highscore_show(NUM_SCORES, highest, NUM_SCORES, false); break; case 3: - showhelp(); + if(blackjack_help()) + return BJ_USB; break; case 4: if (playback_control(NULL)) - return 1; + return BJ_USB; break; case 5: return BJ_QUIT; - + case MENU_ATTACHED_USB: return BJ_USB; - + default: break; } @@ -1253,6 +1256,11 @@ static int blackjack(struct game_context* bj) { bool breakout = false; bool dbl_down = false; +#if LCD_DEPTH > 1 + rb->lcd_set_background(BG_COLOR); + rb->lcd_set_foreground(FG_COLOR); +#endif + /* don't resume by default */ bj->resume = false; @@ -1268,7 +1276,6 @@ static int blackjack(struct game_context* bj) { * init * ********************/ blackjack_init(bj); - bj->current_bet=10; /******************** * play * @@ -1279,21 +1286,21 @@ static int blackjack(struct game_context* bj) { bj->resume = false; redraw_board(bj); if (bj->split_status == 2) { - todo=2; - player_x = bj->num_player_cards[0] * 10 + 4; + todo=2; + player_x = bj->num_player_cards[0] * 10 + 4; } else if (bj->split_status == 3) { - player_x = bj->num_player_cards[1] * 10 + LCD_WIDTH/2 + 4; - todo=2; - done=1; + player_x = bj->num_player_cards[1] * 10 + LCD_WIDTH/2 + 4; + todo=2; + done=1; } - } else { bj->player_money = 1000; + bj->current_bet = 10; blackjack_get_bet(bj); if (bj->current_bet == 0) - return BJ_QUIT; + return -1; rb->lcd_clear_display(); deal_init_cards(bj); blackjack_drawtable(bj); @@ -1309,7 +1316,7 @@ static int blackjack(struct game_context* bj) { bj->end_hand = true; finish_game(bj); } - else if(bj->dealer_cards[1].is_soft_ace && !breakout && + else if(bj->dealer_cards[1].is_soft_ace && !breakout && !bj->asked_insurance) { temp_var = insurance(bj); if (bj->dealer_total == 21) { @@ -1328,7 +1335,7 @@ static int blackjack(struct game_context* bj) { rb->lcd_update(); } } - if(!bj->end_hand && bj->split_status == 0 && + if(!bj->end_hand && bj->split_status == 0 && bj->player_cards[0][0].num == bj->player_cards[0][1].num) { split(bj); redraw_board(bj); @@ -1350,16 +1357,16 @@ static int blackjack(struct game_context* bj) { bj->num_player_cards[done]++; if (bj->num_player_cards[done] == MAX_CARDS + 1) { redraw_board(bj); - rb->lcd_update_rect(0, LCD_HEIGHT/2, LCD_WIDTH, + rb->lcd_update_rect(0, LCD_HEIGHT/2, LCD_WIDTH, LCD_HEIGHT/2); } else if (bj->num_player_cards[done]>MAX_CARDS || todo > 1) { - rb->lcd_update_rect(player_x, player_y, CARD_WIDTH+2, + rb->lcd_update_rect(player_x, player_y, CARD_WIDTH+2, CARD_HEIGHT+2); player_x += 10; } else { - rb->lcd_update_rect(player_x, player_y, CARD_WIDTH+2, + rb->lcd_update_rect(player_x, player_y, CARD_WIDTH+2, CARD_HEIGHT+2); player_x += CARD_WIDTH + 4; } @@ -1370,7 +1377,8 @@ static int blackjack(struct game_context* bj) { bj->end_hand = true; break; case BJACK_DOUBLEDOWN: - if ((signed int)bj->current_bet * 2 < bj->player_money + 1&& + if ((signed int)bj->current_bet * 2 < + bj->player_money + 1 && bj->num_player_cards[0]==2 && todo==1) { double_down(bj); dbl_down = true; @@ -1379,7 +1387,8 @@ static int blackjack(struct game_context* bj) { finish_game(bj); } } - else if((signed int)bj->current_bet * 2 > bj->player_money){ + else if((signed int)bj->current_bet * 2 > + bj->player_money){ rb->splash(HZ, "Not enough money to double down."); redraw_board(bj); rb->lcd_update(); @@ -1395,7 +1404,7 @@ static int blackjack(struct game_context* bj) { } while (bj->player_total > 21 && !bj->end_hand) { - temp = check_for_aces(bj->player_cards[done], + temp = check_for_aces(bj->player_cards[done], bj->num_player_cards[done]); if(temp != -1) { bj->player_cards[done][temp].is_soft_ace = false; @@ -1409,7 +1418,7 @@ static int blackjack(struct game_context* bj) { else bj->end_hand = true; } - + if (bj->end_hand) { done++; if(todo > 1) { @@ -1426,7 +1435,7 @@ static int blackjack(struct game_context* bj) { bj->current_bet /= 2; rb->lcd_update_rect(LCD_WIDTH/2-w/2, LCD_HEIGHT/2-3*h/2, w,h); - rb->sleep(HZ*2); + rb->sleep(HZ*2); bj->player_total = temp_var; finish_game(bj); rb->lcd_getstringsize(" Split 2 ", &w, &h); @@ -1446,7 +1455,7 @@ static int blackjack(struct game_context* bj) { player_x += 10; rb->lcd_update(); } - } + } else finish_game(bj); } @@ -1462,7 +1471,11 @@ static int blackjack(struct game_context* bj) { return BJ_END; else { /* User keeps playing */ breakout = false; + temp = bj->current_bet; + bj->current_bet = 0; redraw_board(bj); + rb->lcd_update(); + bj->current_bet = temp; if(dbl_down) { bj->current_bet /= 2; dbl_down = false; @@ -1477,7 +1490,7 @@ static int blackjack(struct game_context* bj) { blackjack_drawtable(bj); rb->lcd_update(); } - } + } } /* Never reached */ return PLUGIN_OK; @@ -1509,33 +1522,26 @@ enum plugin_status plugin_start(const void* parameter) /* fall through to BJ_END */ case BJ_END: - if(!bj.resume) { + if(!bj.resume && bj.player_money > 10) { /* There is no level, so store -1 to blank column */ - int position = highscore_update(bj.player_money, -1, "", + int position = highscore_update(bj.player_money, -1, "", highest, NUM_SCORES); if (position == 0) { rb->splash(HZ*2, "New High Score"); } if (position != -1) { highscore_show(position, highest, NUM_SCORES, false); - bj.dirty=true; - } else { - rb->sleep(3); } } break; case BJ_USB: rb->lcd_setfont(FONT_UI); - if(bj.dirty) { - highscore_save(HIGH_SCORE,highest,NUM_SCORES); - } + highscore_save(HIGH_SCORE,highest,NUM_SCORES); return PLUGIN_USB_CONNECTED; case BJ_QUIT: - if(bj.dirty) { - highscore_save(HIGH_SCORE,highest,NUM_SCORES); - } + highscore_save(HIGH_SCORE,highest,NUM_SCORES); exit = true; break; diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c index d5d9987f68..ebf2051f1c 100644 --- a/apps/plugins/bubbles.c +++ b/apps/plugins/bubbles.c @@ -36,12 +36,13 @@ PLUGIN_HEADER /* files */ #define SCORE_FILE PLUGIN_GAMES_DIR "/bubbles.score" #define SAVE_FILE PLUGIN_GAMES_DIR "/bubbles.save" +#define DATA_FILE PLUGIN_GAMES_DIR "/bubbles.data" /* final game return status */ enum { BB_LOSE, BB_QUIT, - BB_QUIT_AND_SAVE, + BB_SAVE_AND_QUIT, BB_USB, BB_END, BB_WIN, @@ -1241,7 +1242,6 @@ struct tile { /* the game context struct * score is the current score * level is the current level - * highlevel is the highest level beaten * angle is the current cannon direction * shots is the number of shots fired since last compression * compress is the height of the compressor @@ -1252,13 +1252,11 @@ struct tile { * elapsedlvl is level elapsed time in 1/100s of seconds * elapsedshot is the shot elapsed time in 1/100s of seconds * startedshot is when the current shot began - * resume denotes whether to resume the currently loaded game * playboard is the game playing board */ struct game_context { unsigned int score; unsigned int level; - unsigned int highlevel; int angle; int shots; int compress; @@ -1276,6 +1274,8 @@ struct highscore highscores[NUM_SCORES]; /* used to denote available resume info */ static bool resume = false; +static unsigned int highlevel = 0; /* the highest level beaten */ +static unsigned int last_highlevel = 0; static void bubbles_init(struct game_context* bb); static bool bubbles_nextlevel(struct game_context* bb); @@ -1291,7 +1291,6 @@ static void bubbles_anchored(struct game_context* bb, int row, int col); static int bubbles_fall(struct game_context* bb); static int bubbles_checklevel(struct game_context* bb); static void bubbles_recordscore(struct game_context* bb); -static void bubbles_savescores(struct game_context* bb); static bool bubbles_loadgame(struct game_context* bb); static void bubbles_savegame(struct game_context* bb); static inline void bubbles_setcolors(void); @@ -1326,15 +1325,14 @@ static void bubbles_init(struct game_context* bb) { static bool bubbles_nextlevel(struct game_context* bb) { int i, j, pos; - /* save highest level */ - if (bb->level > bb->highlevel) - bb->highlevel = bb->level; - bb->level++; /* check if there are no more levels */ if(bb->level > NUM_LEVELS) return false; + /* save highest level */ + if (bb->level-1 > highlevel) + highlevel = bb->level-1; /* set up the play board */ rb->memset(bb->playboard, 0, sizeof(bb->playboard)); @@ -2165,7 +2163,7 @@ static void bubbles_recordscore(struct game_context* bb) { int position; - position = highscore_update(bb->score, bb->level, "", + position = highscore_update(bb->score, bb->level-1, "", highscores, NUM_SCORES); if (position==0) rb->splash(HZ*2, "New High Score"); @@ -2174,36 +2172,43 @@ static void bubbles_recordscore(struct game_context* bb) { } /***************************************************************************** -* bubbles_loadscores() loads the high scores saved file. +* bubbles_loaddata() loads highest level beaten. ******************************************************************************/ -static void bubbles_loadscores(struct game_context* bb) { +static void bubbles_loaddata(void) { + int fd; - int i; - int highlevel = 0; - /* highlevel and highscores */ - highscore_load(SCORE_FILE, highscores, NUM_SCORES); + last_highlevel = highlevel = 0; + /* open data file */ + fd = rb->open(DATA_FILE, O_RDONLY); + if (fd < 0) return; - /* level X in the high scores means one succeeded the level before (X-1) */ - for (i = 0; i < NUM_SCORES; i++) + /* read in saved game */ + if (rb->read(fd, &highlevel, sizeof(highlevel)) < (long)sizeof(highlevel)) { - if (highscores[i].level-1 > highlevel) - { - highlevel = highscores[i].level-1; - } + highlevel = 0; } + if (highlevel >= NUM_LEVELS) + highlevel = NUM_LEVELS-1; + last_highlevel = highlevel; - if (bb->highlevel < (unsigned)highlevel) - bb->highlevel = highlevel; + rb->close(fd); } /***************************************************************************** -* bubbles_savescores() saves the high scores saved file. +* bubbles_savedata() saves the current game state. ******************************************************************************/ -static void bubbles_savescores(struct game_context* bb) { +static void bubbles_savedata(void) { + int fd; - /* highscores */ - (void)bb; - highscore_save(SCORE_FILE, highscores, NUM_SCORES+1); + if (last_highlevel >= highlevel) /* no need to save */ + return; + + fd = rb->open(DATA_FILE, O_WRONLY|O_CREAT); + if (fd < 0) return; + + rb->write(fd, &highlevel, sizeof(highlevel)); + + rb->close(fd); } /***************************************************************************** @@ -2225,6 +2230,9 @@ static bool bubbles_loadgame(struct game_context* bb) { } rb->close(fd); + + /* delete saved file */ + rb->remove(SAVE_FILE); return ret; } @@ -2266,8 +2274,8 @@ static inline void bubbles_setcolors(void) { * on usb connect and shutdown. ******************************************************************************/ static void bubbles_callback(void* param) { - struct game_context* bb = (struct game_context*) param; - bubbles_savescores(bb); + (void) param; + highscore_save(SCORE_FILE, highscores, NUM_SCORES); } /***************************************************************************** @@ -2353,23 +2361,20 @@ static int bubbles_handlebuttons(struct game_context* bb, bool animblock, } /***************************************************************************** -* bubbles() is the main game subroutine, it returns the final game status. +* bubbles_menu() is the initial menu at the start of the game. ******************************************************************************/ -static int bubbles(struct game_context* bb) { - int buttonres; - unsigned int startlevel = 0; +static int bubbles_menu(struct game_context* bb) { + static unsigned int startlevel = 0; + int selected = resume?0:1; bool startgame = false; - long timeout; - /******************** - * menu * - ********************/ MENUITEM_STRINGLIST(menu,"Bubbles Menu",NULL, - "Resume Game", "Start New Game", + "Resume Game", "Start New Game", "Level", "High Scores", "Playback Control", - "Quit", "Quit and Save"); + "Quit", "Save and Quit"); + while(!startgame){ - switch (rb->do_menu(&menu, NULL, NULL, false)) + switch (rb->do_menu(&menu, &selected, NULL, false)) { case 0: /* resume game */ if (!resume) @@ -2379,11 +2384,8 @@ static int bubbles(struct game_context* bb) { } else { - startlevel = bb->level - 1; startgame = true; } - /* delete saved file */ - rb->remove(SAVE_FILE); break; case 1: /* new game */ bb->level = startlevel; @@ -2393,7 +2395,7 @@ static int bubbles(struct game_context* bb) { case 2: /* choose level */ startlevel++; rb->set_int("Choose start level", "", UNIT_INT, &startlevel, - NULL, 1, 1, MIN(NUM_LEVELS,bb->highlevel+1), NULL); + NULL, 1, 1, highlevel+1, NULL); startlevel--; break; case 3: /* High scores */ @@ -2404,13 +2406,30 @@ static int bubbles(struct game_context* bb) { break; case 5: /* quit */ return BB_QUIT; - case 6: /* quit and save */ - return BB_QUIT_AND_SAVE; + case 6: /* save and quit */ + return BB_SAVE_AND_QUIT; case MENU_ATTACHED_USB: bubbles_callback(bb); return BB_USB; } } + return 0; +} + +/***************************************************************************** +* bubbles() is the main game subroutine, it returns the final game status. +******************************************************************************/ +static int bubbles(struct game_context* bb) { + int buttonres; + long timeout; + + /******************** + * menu * + ********************/ + buttonres = bubbles_menu(bb); + if(buttonres != 0) + return buttonres; + /******************** * init * ********************/ @@ -2464,13 +2483,12 @@ enum plugin_status plugin_start(const void* parameter) { bool exit = false; enum plugin_status ret = PLUGIN_OK; - /* plugin init */ (void)parameter; - /* end of plugin init */ /* load files */ resume = bubbles_loadgame(&bb); - bubbles_loadscores(&bb); + bubbles_loaddata(); + highscore_load(SCORE_FILE, highscores, NUM_SCORES); rb->lcd_clear_display(); /* start app */ @@ -2484,7 +2502,7 @@ enum plugin_status plugin_start(const void* parameter) { case BB_WIN: rb->splash(HZ*2, "You Win!"); /* record high level */ - bb.highlevel = NUM_LEVELS; + highlevel = NUM_LEVELS-1; /* record high score */ bubbles_recordscore(&bb); break; @@ -2501,15 +2519,17 @@ enum plugin_status plugin_start(const void* parameter) { case BB_USB: ret = PLUGIN_USB_CONNECTED; + exit = true; break; - case BB_QUIT_AND_SAVE: - rb->splash(HZ/2, "Saving Game and Scors"); - bubbles_savescores(&bb); + case BB_SAVE_AND_QUIT: + rb->splash(HZ/2, "Saving Game ..."); bubbles_savegame(&bb); /* fall through */ case BB_QUIT: + bubbles_savedata(); + highscore_save(SCORE_FILE, highscores, NUM_SCORES); exit = true; break; diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c index 873a09b970..17116fe3e9 100644 --- a/apps/plugins/calendar.c +++ b/apps/plugins/calendar.c @@ -272,7 +272,7 @@ static int is_leap_year(int yr) (!((yr) % 4) && ((yr) % 100)) || !((yr) % 400)) ? 1:0 ; } -/* searches the weekday of the first day in month, +/* searches the weekday of the first day in month, * relative to the given values */ static int calc_weekday( struct shown *shown ) { @@ -343,19 +343,9 @@ static void draw_calendar(struct shown *shown) int x,y,pos,days_per_month,j; char buffer[9]; const char *monthname[] = { - "Jan", - "Feb", - "Mar", - "Apr", - "May", - "Jun", - "Jul", - "Aug", - "Sep", - "Oct", - "Nov", - "Dec" - }; + "Jan", "Feb", "Mar", "Apr", "May", "Jun", + "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" + }; if(use_system_font) rb->lcd_setfont(FONT_SYSFIXED); rb->lcd_getstringsize("A",&w,&h); @@ -421,7 +411,7 @@ static int memos_in_shown_memory = 0; static void load_memo(struct shown *shown) { - int i, k, fp; + int k, fp; bool exit = false; char temp_memo1[2]; char temp_memo2[3]; @@ -429,18 +419,6 @@ static void load_memo(struct shown *shown) temp_memo1[1] = 0; temp_memo2[2] = 0; temp_memo4[4] = 0; - for (k = 0; k < memos_in_memory; k++) - { - memos[k].day = 0; - memos[k].month = 0; - memos[k].file_pointer_start = 0; - memos[k].file_pointer_end = 0; - memos[k].year = 0; - memos[k].type = 0; - memos[k].wday = 0; - for (i = 0; i < MAX_CHAR_MEMO_LEN; i++) - memos[k].message[i] = 0; - } for (k = 1; k < 32; k++) day_has_memo[k] = false; for (k = 0; k < 7; k++) @@ -449,12 +427,13 @@ static void load_memo(struct shown *shown) fp = rb->open(ROCKBOX_DIR "/.memo",O_RDONLY); if (fp > -1) { - int count = rb->filesize(fp); rb->lseek(fp, 0, SEEK_SET); while (!exit) { - memos[memos_in_memory].file_pointer_start = rb->lseek(fp, 0, - SEEK_CUR); + bool load_to_memory; + rb->memset(&memos[memos_in_memory].message, 0, MAX_CHAR_MEMO_LEN); + memos[memos_in_memory].file_pointer_start = + rb->lseek(fp, 0, SEEK_CUR); if (rb->read(fp, temp_memo2, 2) == 2) memos[memos_in_memory].day = rb->atoi(&temp_memo2[0]); else @@ -472,7 +451,7 @@ static void load_memo(struct shown *shown) if (memos[memos_in_memory].year > (shown->year * 10)) memos[memos_in_memory].year = (memos[memos_in_memory].year - memos[memos_in_memory].month) / - 100; + 100; if (rb->read(fp, temp_memo1, 1) == 1) memos[memos_in_memory].wday = rb->atoi(&temp_memo1[0]); else @@ -481,48 +460,16 @@ static void load_memo(struct shown *shown) memos[memos_in_memory].type = rb->atoi(&temp_memo1[0]); else memos[memos_in_memory].type = 0; - for (k = 0; k <= count; k++) + load_to_memory = ((memos[memos_in_memory].type < 2) || + ((memos[memos_in_memory].type == 2) && + (memos[memos_in_memory].month == shown->mon)) || + ((memos[memos_in_memory].type > 2) && + (memos[memos_in_memory].month == shown->mon) && + (memos[memos_in_memory].year == shown->year))); + k = 0; + while (1) { - if (rb->read(fp, temp_memo1, 1) == 1) - { - if ( - (memos[memos_in_memory].type < 2) - || - ( - (memos[memos_in_memory].type == 2) - && - (memos[memos_in_memory].month == shown->mon) - ) - || - ( - (memos[memos_in_memory].type > 2) - && - (memos[memos_in_memory].month == shown->mon) - && - (memos[memos_in_memory].year == shown->year) - ) - ) - { - if (temp_memo1[0] == '\n') - { - if (memos[memos_in_memory].type > 0) - day_has_memo[memos[memos_in_memory].day] = - true; - else - wday_has_memo[memos[memos_in_memory].wday] = - true; - memos[memos_in_memory++].file_pointer_end = - rb->lseek(fp, 0, SEEK_CUR); - } - else if ( (temp_memo1[0] != '\r') && - (temp_memo1[0] != '\t') && - k < MAX_CHAR_MEMO_LEN-1 ) - memos[memos_in_memory].message[k] = temp_memo1[0]; - } - if (temp_memo1[0] == '\n') - break; - } - else + if (rb->read(fp, temp_memo1, 1) != 1) { memos[memos_in_memory].day = 0; memos[memos_in_memory].month = 0; @@ -535,6 +482,26 @@ static void load_memo(struct shown *shown) exit = true; break; } + if (load_to_memory) + { + if (temp_memo1[0] == '\n') + { + if (memos[memos_in_memory].type > 0) + day_has_memo[memos[memos_in_memory].day] = + true; + else + wday_has_memo[memos[memos_in_memory].wday] = + true; + memos[memos_in_memory++].file_pointer_end = + rb->lseek(fp, 0, SEEK_CUR); + } + else if ( (temp_memo1[0] != '\r') && + (temp_memo1[0] != '\t') && + k < MAX_CHAR_MEMO_LEN-1 ) + memos[memos_in_memory].message[k++] = temp_memo1[0]; + } + if (temp_memo1[0] == '\n') + break; } } } @@ -546,7 +513,7 @@ static bool save_memo(int changed, bool new_mod, struct shown *shown) int fp,fq; fp = rb->open(ROCKBOX_DIR "/.memo",O_RDONLY | O_CREAT); fq = rb->creat(ROCKBOX_DIR "/~temp"); - if ( (fq != -1) && (fp != -1) ) + if ( (fq > -1) && (fp > -1) ) { int i; char temp[MAX_CHAR_MEMO_LEN]; @@ -578,9 +545,9 @@ static bool save_memo(int changed, bool new_mod, struct shown *shown) load_memo(shown); return true; } - else if (fp != -1) + else if (fp > -1) rb->close(fp); - else if (fq != -1) + else if (fq > -1) rb->close(fq); return false; } @@ -714,7 +681,7 @@ static bool view_events(int selected, struct shown *shown) rb->gui_synclist_set_nb_items(&gui_memos, memos_in_shown_memory); rb->gui_synclist_select_item(&gui_memos, selected); rb->gui_synclist_draw(&gui_memos); - + while (!exit) { button = rb->get_action(CONTEXT_LIST,TIMEOUT_BLOCK); @@ -746,19 +713,10 @@ static void update_memos_shown(struct shown *shown) int i; memos_in_shown_memory = 0; for (i = 0; i < memos_in_memory; i++) - if ( - ( - (memos[i].type >= 1) - && - (memos[i].day == shown->mday) - ) - || - ( - (memos[i].type < 1) - && - (memos[i].wday == shown->wday) - ) - ) + if (((memos[i].type >= 1) && + (memos[i].day == shown->mday)) || + ((memos[i].type < 1) && + (memos[i].wday == shown->wday))) pointer_array[memos_in_shown_memory++] = i; } @@ -836,7 +794,7 @@ enum plugin_status plugin_start(const void* parameter) struct shown shown; bool exit = false; int button; - + (void)(parameter); calendar_init(&today, &shown); diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c index 26a979ac54..2b5b7febeb 100644 --- a/apps/plugins/clix.c +++ b/apps/plugins/clix.c @@ -605,7 +605,7 @@ static int clix_menu(struct clix_game_state_t* state, bool ingame) "Resume Game", "Start New Game", "Help", - "High Score", + "High Scores", "Playback Control", "Quit"); diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index 0393a502f0..71cd093963 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c @@ -1323,7 +1323,7 @@ static int jewels_game_menu(struct game_context* bj, bool ingame) "Start New Game", "Mode", "Help", - "High Score", + "High Scores", "Playback Control", "Quit without Saving", "Quit"); diff --git a/apps/plugins/lib/highscore.c b/apps/plugins/lib/highscore.c index 280c0c7724..20e472f9dc 100644 --- a/apps/plugins/lib/highscore.c +++ b/apps/plugins/lib/highscore.c @@ -129,7 +129,6 @@ void highscore_show(int position, struct highscore *scores, int num_scores, bool rb->lcd_set_background(LCD_BLACK); rb->lcd_set_foreground(LCD_WHITE); #endif - rb->button_clear_queue(); rb->lcd_clear_display(); rb->lcd_setfont(FONT_UI); @@ -174,6 +173,8 @@ void highscore_show(int position, struct highscore *scores, int num_scores, bool } } rb->lcd_update(); + rb->sleep(HZ/2); + rb->button_clear_queue(); rb->button_get(true); rb->lcd_setfont(FONT_SYSFIXED); } diff --git a/apps/plugins/rocklife.c b/apps/plugins/rocklife.c index 8a1a1b35f2..5258121ea3 100644 --- a/apps/plugins/rocklife.c +++ b/apps/plugins/rocklife.c @@ -77,7 +77,7 @@ PLUGIN_HEADER #define PATTERN_GROWTH_1 1 #define PATTERN_GROWTH_2 2 #define PATTERN_ACORN 3 -#define PATTERN_GLIDER_GUN 4 /* not yet implemented */ +#define PATTERN_GLIDER_GUN 4 const struct button_mapping *plugin_contexts[] = {generic_directions, generic_actions}; diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c index 32d48862ae..2e383c0d0d 100644 --- a/apps/plugins/spacerocks.c +++ b/apps/plugins/spacerocks.c @@ -644,7 +644,7 @@ static int spacerocks_menu(bool ingame) "Resume Game", "Start New Game", "Help", - "High Score", + "High Scores", "Playback Control", "Quit"); diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c index 2ef9f990f4..97b2fded4f 100644 --- a/apps/plugins/wormlet.c +++ b/apps/plugins/wormlet.c @@ -63,10 +63,6 @@ PLUGIN_HEADER #define MULTIPLAYER #endif -#define PLAYERS_TEXT "UP/DN" -#define WORMS_TEXT "L/R" -#define KEY_CONTROL_TEXT "F1" - #elif (CONFIG_KEYPAD == ARCHOS_AV300_PAD) #define BTN_DIR_UP BUTTON_UP #define BTN_DIR_DOWN BUTTON_DOWN @@ -79,10 +75,6 @@ PLUGIN_HEADER #define BTN_STOPRESET BUTTON_ON #define BTN_TOGGLE_KEYS BUTTON_F1 -#define PLAYERS_TEXT "UP/DN" -#define WORMS_TEXT "L/R" -#define KEY_CONTROL_TEXT "F1" - #elif (CONFIG_KEYPAD == ONDIO_PAD) #define BTN_DIR_UP BUTTON_UP #define BTN_DIR_DOWN BUTTON_DOWN @@ -92,9 +84,6 @@ PLUGIN_HEADER #define BTN_QUIT (BUTTON_OFF|BUTTON_REL) #define BTN_STOPRESET (BUTTON_OFF|BUTTON_MENU) -#define PLAYERS_TEXT "UP/DN" -#define WORMS_TEXT "L/R" - #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ (CONFIG_KEYPAD == IPOD_1G2G_PAD) @@ -106,9 +95,6 @@ PLUGIN_HEADER #define BTN_QUIT (BUTTON_SELECT|BUTTON_MENU) #define BTN_STOPRESET (BUTTON_SELECT|BUTTON_PLAY) -#define PLAYERS_TEXT "Menu/Play" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == IRIVER_H300_PAD) || (CONFIG_KEYPAD == IRIVER_H100_PAD) #define BTN_DIR_UP BUTTON_UP @@ -121,9 +107,6 @@ PLUGIN_HEADER #define BTN_RC_QUIT BUTTON_RC_STOP -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) #define BTN_DIR_UP BUTTON_UP @@ -134,9 +117,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_REC -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == GIGABEAT_PAD) #define BTN_DIR_UP BUTTON_UP @@ -147,10 +127,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_A -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - - #elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \ (CONFIG_KEYPAD == SANSA_C200_PAD) @@ -162,9 +138,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_REC -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == SANSA_CLIP_PAD) #define BTN_DIR_UP BUTTON_UP @@ -175,9 +148,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_HOME -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) #define BTN_DIR_UP BUTTON_UP @@ -188,9 +158,6 @@ PLUGIN_HEADER #define BTN_QUIT (BUTTON_HOME|BUTTON_REPEAT) #define BTN_STOPRESET (BUTTON_SELECT | BUTTON_UP) -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == SANSA_M200_PAD) #define BTN_DIR_UP BUTTON_UP @@ -201,9 +168,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET (BUTTON_SELECT | BUTTON_UP) -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == IRIVER_H10_PAD) #define BTN_DIR_UP BUTTON_SCROLL_UP @@ -214,9 +178,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_REW -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) #define BTN_DIR_UP BUTTON_UP @@ -227,9 +188,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_BACK #define BTN_STOPRESET BUTTON_MENU -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == MROBE100_PAD) #define BTN_DIR_UP BUTTON_UP @@ -240,9 +198,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_DISPLAY -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif CONFIG_KEYPAD == IAUDIO_M3_PAD #define BTN_DIR_UP BUTTON_RC_VOL_UP @@ -253,9 +208,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_RC_REC #define BTN_STOPRESET BUTTON_RC_MODE -#define PLAYERS_TEXT "VOL UP/DN" -#define WORMS_TEXT "REW/FF" - #elif (CONFIG_KEYPAD == COWOND2_PAD) #define BTN_QUIT BUTTON_POWER @@ -270,9 +222,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_BACK #define BTN_STOPRESET BUTTON_MENU -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD #define BTN_DIR_UP BUTTON_UP @@ -283,9 +232,6 @@ PLUGIN_HEADER #define BTN_QUIT BUTTON_POWER #define BTN_STOPRESET BUTTON_VIEW -#define PLAYERS_TEXT "Up/Down" -#define WORMS_TEXT "Left/Right" - #elif (CONFIG_KEYPAD == ONDAVX747_PAD) || CONFIG_KEYPAD == MROBE500_PAD #define BTN_QUIT BUTTON_POWER @@ -315,16 +261,8 @@ PLUGIN_HEADER #endif #ifndef BTN_STOPRESET #define BTN_STOPRESET BUTTON_TOPRIGHT - #endif -#ifndef PLAYERS_TEXT -#define PLAYERS_TEXT "Up/Down" #endif -#ifndef WORMS_TEXT -#define WORMS_TEXT "Left/Right" -#endif -#endif - #if (LCD_WIDTH == 112) && (LCD_HEIGHT == 64) #define FOOD_SIZE 3 @@ -500,14 +438,14 @@ static int players = 1; static struct configdata config[] = { - {TYPE_INT, 0, 1024, { .int_p = &highscore }, "highscore", NULL}, - {TYPE_INT, 0, 15, { .int_p = &arghs_per_food }, "arghs per food", NULL}, - {TYPE_INT, 0, 15, { .int_p = &argh_size }, "argh size", NULL}, - {TYPE_INT, 0, 15, { .int_p = &food_size }, "food size", NULL}, - {TYPE_INT, 0, 3, { .int_p = &players }, "players", NULL}, - {TYPE_INT, 0, 3, { .int_p = &worm_count }, "worms", NULL}, - {TYPE_INT, 0, 20, { .int_p = &speed }, "speed", NULL}, - {TYPE_INT, 0, 15, { .int_p = &worm_food }, "Worm Growth Per Food", NULL} + {TYPE_INT, 0, 1024, { .int_p = &highscore }, "highscore", NULL}, + {TYPE_INT, 0, 15, { .int_p = &arghs_per_food }, "arghs per food", NULL}, + {TYPE_INT, 0, 15, { .int_p = &argh_size }, "argh size", NULL}, + {TYPE_INT, 0, 15, { .int_p = &food_size }, "food size", NULL}, + {TYPE_INT, 0, 3, { .int_p = &players }, "players", NULL}, + {TYPE_INT, 0, 3, { .int_p = &worm_count }, "worms", NULL}, + {TYPE_INT, 0, 20, { .int_p = &speed }, "speed", NULL}, + {TYPE_INT, 0, 15, { .int_p = &worm_food }, "Worm Growth Per Food", NULL} }; #ifdef DEBUG_WORMLET @@ -524,7 +462,8 @@ static void set_debug_out(char *str){ * @return int A value 0 <= value < 4 * Note the predefined constants NORTH, SOUTH, EAST, WEST */ -static int get_worm_dir(struct worm *w) { +static int get_worm_dir(struct worm *w) +{ int retVal ; if (w->dirx == 0) { if (w->diry == 1) { @@ -551,13 +490,14 @@ static int get_worm_dir(struct worm *w) { * dir must be 0 <= dir < 4. Use predefined constants * NORTH, SOUTH, EAST, WEST */ -static void set_worm_dir(struct worm *w, int dir) { +static void set_worm_dir(struct worm *w, int dir) +{ switch (dir) { case WEST: w->dirx = -1; w->diry = 0; break; - case NORTH: + case NORTH: w->dirx = 0; w->diry = - 1; break; @@ -569,7 +509,7 @@ static void set_worm_dir(struct worm *w, int dir) { w->dirx = 0; w->diry = 1; break; - } + } } /** @@ -577,7 +517,8 @@ static void set_worm_dir(struct worm *w, int dir) { * is also a value for the number of bends that are in the worm. * @return int a positive value with 0 <= value < MAX_WORM_SEGMENTS */ -static int get_worm_array_length(struct worm *w) { +static int get_worm_array_length(struct worm *w) +{ /* initial simple calculation will be overwritten if wrong. */ int retVal = w->head - w->tail; @@ -596,7 +537,8 @@ static int get_worm_array_length(struct worm *w) { * w must not be null. * @return int The length of the worm (>= 0). */ -static int get_score(struct worm *w) { +static int get_score(struct worm *w) +{ int retval = 0; int length = get_worm_array_length(w); int i; @@ -620,7 +562,7 @@ static int get_score(struct worm *w) { minimum = MIN(startx, endx); maximum = MAX(startx, endx); } - retval += abs(maximum - minimum); + retval += abs(maximum - minimum); } return retval; } @@ -639,7 +581,9 @@ static int get_score(struct worm *w) { * @param int height The height of the rectangle. * @return bool Returns true if the specified line intersects with the recangle. */ -static bool line_in_rect(int startx, int starty, int endx, int endy, int x, int y, int width, int height) { +static bool line_in_rect(int startx, int starty, int endx, int endy, + int x, int y, int width, int height) +{ bool retval = false; int simple, simplemin, simplemax; int compa, compb, compmin, compmax; @@ -687,7 +631,8 @@ static bool line_in_rect(int startx, int starty, int endx, int endy, int x, int * @param int height The height of the rect * @return bool Returns true if the worm intersects with the rect */ -static bool worm_in_rect(struct worm *w, int x, int y, int width, int height) { +static bool worm_in_rect(struct worm *w, int x, int y, int width, int height) +{ bool retval = false; @@ -722,7 +667,8 @@ static bool worm_in_rect(struct worm *w, int x, int y, int width, int height) { * @return Returns true if the coordinate hits the food specified by * foodIndex. */ -static bool specific_food_collision(int foodIndex, int x, int y) { +static bool specific_food_collision(int foodIndex, int x, int y) +{ bool retVal = false; if (x >= foodx[foodIndex] && x < foodx[foodIndex] + food_size && @@ -740,7 +686,8 @@ static bool specific_food_collision(int foodIndex, int x, int y) { * -1 is returned. * @return int -1 <= value < MAX_FOOD */ -static int food_collision(int x, int y) { +static int food_collision(int x, int y) +{ int i = 0; int retVal = -1; for (i = 0; i < MAX_FOOD; i++) { @@ -761,8 +708,8 @@ static int food_collision(int x, int y) { * @return Returns true if the coordinate hits the argh specified by * arghIndex. */ -static bool specific_argh_collision(int arghIndex, int x, int y) { - +static bool specific_argh_collision(int arghIndex, int x, int y) +{ if ( x >= arghx[arghIndex] && y >= arghy[arghIndex] && x < arghx[arghIndex] + argh_size && @@ -782,7 +729,8 @@ static bool specific_argh_collision(int arghIndex, int x, int y) { * @param int y The y coordinate. * @return int -1 <= value < argh_count <= MAX_ARGH */ -static int argh_collision(int x, int y) { +static int argh_collision(int x, int y) +{ int i = 0; int retVal = -1; @@ -821,7 +769,8 @@ static bool worm_food_collision(struct worm *w, int foodIndex) * @return Returns false if the specified argh is not hit within the next * moves. */ -static bool worm_argh_collision_in_moves(struct worm *w, int argh_idx, int moves){ +static bool worm_argh_collision_in_moves(struct worm *w, int argh_idx, int moves) +{ bool retVal = false; int x1, y1, x2, y2; x1 = w->x[w->head]; @@ -857,8 +806,8 @@ static bool worm_argh_collision(struct worm *w, int arghIndex) * @param int index * Ensure that 0 <= index < MAX_FOOD. */ -static void make_food(int index) { - +static void make_food(int index) +{ int x = 0; int y = 0; bool collisionDetected = false; @@ -1002,8 +951,8 @@ static void draw_argh(int index) rb->lcd_set_foreground(COLOR_ARGH); #endif rb->lcd_fillrect(arghx[index] + FIELD_RECT_X, - arghy[index] + FIELD_RECT_Y, - argh_size, argh_size); + arghy[index] + FIELD_RECT_Y, + argh_size, argh_size); #ifdef HAVE_LCD_COLOR rb->lcd_set_foreground(COLOR_FG); #endif @@ -1020,24 +969,25 @@ static void virtual_player(struct worm *w); * @param int y The y coordinate at which the tail of the worm starts * y must be 0 <= y < FIELD_RECT_WIDTH. */ -static void init_worm(struct worm *w, int x, int y){ - /* initialize the worm size */ - w->head = 1; - w->tail = 0; +static void init_worm(struct worm *w, int x, int y) +{ + /* initialize the worm size */ + w->head = 1; + w->tail = 0; - w->x[w->head] = x + 1; - w->y[w->head] = y; + w->x[w->head] = x + 1; + w->y[w->head] = y; - w->x[w->tail] = x; - w->y[w->tail] = y; + w->x[w->tail] = x; + w->y[w->tail] = y; - /* set the initial direction the worm creeps to */ - w->dirx = 1; - w->diry = 0; + /* set the initial direction the worm creeps to */ + w->dirx = 1; + w->diry = 0; - w->growing = INITIAL_WORM_LENGTH - 1; - w->alive = true; - w->fetch_worm_direction = virtual_player; + w->growing = INITIAL_WORM_LENGTH - 1; + w->alive = true; + w->fetch_worm_direction = virtual_player; } /** @@ -1089,9 +1039,9 @@ static void init_wormlet(void) int i; for (i = 0; i< worm_count; i++) { - /* Initialize all the worm coordinates to center. */ - int x = (int)(FIELD_RECT_WIDTH / 2); - int y = (int)((FIELD_RECT_HEIGHT - 20)/ 2) + i * 10; + /* Initialize all the worm coordinates to center. */ + int x = (int)(FIELD_RECT_WIDTH / 2); + int y = (int)((FIELD_RECT_HEIGHT - 20)/ 2) + i * 10; init_worm(&worms[i], x, y); } @@ -1223,12 +1173,12 @@ static void move_worm(struct worm *w) */ static void draw_worm(struct worm *w) { -#ifdef HAVE_LCD_COLOR - rb->lcd_set_foreground(COLOR_WORM); -#endif /* draw the new head */ int x = w->x[w->head]; int y = w->y[w->head]; +#ifdef HAVE_LCD_COLOR + rb->lcd_set_foreground(COLOR_WORM); +#endif if (x >= 0 && x < FIELD_RECT_WIDTH && y >= 0 && y < FIELD_RECT_HEIGHT) { rb->lcd_drawpixel(x + FIELD_RECT_X, y + FIELD_RECT_Y); } @@ -1325,7 +1275,8 @@ static void add_growing(struct worm *w, int len) { * @return struct worm* The worm that has been hit by x,y. If no worm * was at the position NULL is returned. */ -static struct worm* worm_collision(struct worm *w, int x, int y){ +static struct worm* worm_collision(struct worm *w, int x, int y) +{ struct worm *retVal = NULL; int i; for (i = 0; (i < worm_count) && (retVal == NULL); i++) { @@ -1366,7 +1317,8 @@ static bool field_collision(struct worm *w) * @return bool Returns false if x,y specifies a point outside the * field of worms. */ -static bool is_in_field_rect(int x, int y) { +static bool is_in_field_rect(int x, int y) +{ bool retVal = false; retVal = (x >= 0 && x < FIELD_RECT_WIDTH && y >= 0 && y < FIELD_RECT_HEIGHT); @@ -1410,7 +1362,8 @@ static int check_collision(struct worm *w) * @param int y The y coordinate of the point * @return int A value usable as index in foodx and foody. */ -static int get_nearest_food(int x, int y){ +static int get_nearest_food(int x, int y) +{ int nearestfood = 0; int olddistance = FIELD_RECT_WIDTH + FIELD_RECT_HEIGHT; int deltax = 0; @@ -1443,7 +1396,8 @@ static int get_nearest_food(int x, int y){ * @return Returns true if the worm will hit the position unless * it change its direction before the next move. */ -static bool is_in_front_of_worm(struct worm *w, int x, int y) { +static bool is_in_front_of_worm(struct worm *w, int x, int y) +{ bool infront = false; int deltax = x - w->x[w->head]; int deltay = y - w->y[w->head]; @@ -1463,7 +1417,8 @@ static bool is_in_front_of_worm(struct worm *w, int x, int y) { * @return Returns true if the worm will collide with the next move * unless it changes its direction. */ -static bool will_worm_collide(struct worm *w) { +static bool will_worm_collide(struct worm *w) +{ int x = w->x[w->head] + w->dirx; int y = w->y[w->head] + w->diry; bool retVal = !is_in_field_rect(x, y); @@ -1487,7 +1442,8 @@ static bool will_worm_collide(struct worm *w) { * @param struct worm *w - The worm of which the direction * is altered. */ -static void virtual_player(struct worm *w) { +static void virtual_player(struct worm *w) +{ bool isright; int plana, planb, planc; /* find the next lunch */ @@ -1554,7 +1510,8 @@ static void score_board(void) int i; int y = 0; rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); - rb->lcd_fillrect(FIELD_RECT_WIDTH + 2, 0, LCD_WIDTH - FIELD_RECT_WIDTH - 2, LCD_HEIGHT); + rb->lcd_fillrect(FIELD_RECT_WIDTH + 2, 0, + LCD_WIDTH - FIELD_RECT_WIDTH - 2, LCD_HEIGHT); rb->lcd_set_drawmode(DRMODE_SOLID); for (i = 0; i < worm_count; i++) { int score = get_score(&worms[i]); @@ -1662,7 +1619,7 @@ static bool process_collisions(struct worm *w) else { if (worm_collision(w, w->x[w->head], w->y[w->head]) != NULL) { w->alive = false; - } + } } } } @@ -1834,7 +1791,8 @@ static int run(void) * Just a test routine that checks that worm_food_collision works * in some typical situations. */ -static void test_worm_food_collision(void) { +static void test_worm_food_collision(void) +{ int collision_count = 0; int i; rb->lcd_clear_display(); @@ -1892,7 +1850,8 @@ static void test_worm_food_collision(void) { } -static bool expensive_worm_in_rect(struct worm *w, int rx, int ry, int rw, int rh){ +static bool expensive_worm_in_rect(struct worm *w, int rx, int ry, int rw, int rh) +{ int x, y; bool retVal = false; for (x = rx; x < rx + rw; x++){ @@ -1905,7 +1864,8 @@ static bool expensive_worm_in_rect(struct worm *w, int rx, int ry, int rw, int r return retVal; } -static void test_worm_argh_collision(void) { +static void test_worm_argh_collision(void) +{ int i; int dir; int collision_count = 0; @@ -1955,7 +1915,8 @@ static void test_worm_argh_collision(void) { } } -static int testline_in_rect(void) { +static int testline_in_rect(void) +{ int testfailed = -1; int rx = 10; @@ -2164,7 +2125,8 @@ static int testline_in_rect(void) { /** * Just a test routine to test wether specific_worm_collision might work properly */ -static int test_specific_worm_collision(void) { +static int test_specific_worm_collision(void) +{ int collisions = 0; int dir; int x = 0; @@ -2202,7 +2164,8 @@ static int test_specific_worm_collision(void) { return collisions; } -static void test_make_argh(void){ +static void test_make_argh(void) +{ int dir; int seed = 0; int hit = 0; @@ -2241,31 +2204,35 @@ static void test_make_argh(void){ for (worm_idx = 0; worm_idx < worm_count; worm_idx++){ if (expensive_worm_in_rect(&worms[worm_idx], x, y, argh_size, argh_size)) { int tries = 0; - rb->srand(seed); + rb->srand(seed); tries = make_argh(0); if ((x == arghx[0] && y == arghy[0]) || tries < 2) { - failures ++; - } + failures ++; + } - rb->snprintf(buf, sizeof buf, "(%d;%d) fail%d try%d", x, y, failures, tries); - rb->lcd_putsxy(0, LCD_HEIGHT - 8, buf); - rb->lcd_update(); - rb->lcd_invertrect(x + FIELD_RECT_X, y+ FIELD_RECT_Y, argh_size, argh_size); + rb->snprintf(buf, sizeof buf, "(%d;%d) fail%d try%d", + x, y, failures, tries); + rb->lcd_putsxy(0, LCD_HEIGHT - 8, buf); + rb->lcd_update(); + rb->lcd_invertrect(x + FIELD_RECT_X, y+ FIELD_RECT_Y, + argh_size, argh_size); rb->lcd_update(); draw_argh(0); rb->lcd_update(); - rb->lcd_invertrect(x + FIELD_RECT_X, y + FIELD_RECT_Y, argh_size, argh_size); - rb->lcd_clearrect(arghx[0] + FIELD_RECT_X, arghy[0] + FIELD_RECT_Y, argh_size, argh_size); + rb->lcd_invertrect(x + FIELD_RECT_X, y + FIELD_RECT_Y, + argh_size, argh_size); + rb->lcd_clearrect(arghx[0] + FIELD_RECT_X, arghy[0] + FIELD_RECT_Y, + argh_size, argh_size); if (failures > last_failures) { - rb->button_get(true); - } + rb->button_get(true); + } last_failures = failures; - hit ++; + hit ++; + } } } - } } static void test_worm_argh_collision_in_moves(void) { @@ -2296,184 +2263,10 @@ static void test_worm_argh_collision_in_moves(void) { } #endif /* DEBUG_WORMLET */ -extern bool use_old_rect; - -/** - * These are additional functions required to set various wormlet settings - * and to enable saving of settings and high score - */ - -/* -Sets the total number of worms, both human and machine -*/ -bool set_worm_num_worms(void) -{ - bool ret; - static const struct opt_items num_worms_option[3] = { - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - }; - - ret = rb->set_option("Number Of Worms", &worm_count,INT, num_worms_option, 3, NULL); - if (worm_count < players) { - worm_count=players; - } - return ret; -} - /* -Sets the number of human players -*/ -bool set_worm_num_players(void) -{ - bool ret; - static const struct opt_items num_players_option[4] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 } - }; - - ret = rb->set_option("Number of Players", &players, INT,num_players_option , 4, NULL); - if (players > worm_count) { - worm_count = players; - } - if (players > 2) { - use_remote = true; - } - return ret; -} - -/* -Sets the size of each argh block created -*/ -bool set_worm_argh_size(void) -{ - static const struct opt_items argh_size_option[11] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 } - }; - - return rb->set_option("Argh Size", &argh_size,INT,argh_size_option , 11, NULL); -} - -/* -Sets the amount a worm grows per food -*/ -bool set_worm_food(void) -{ - static const struct opt_items worm_food_option[11] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 } - }; - return rb->set_option("Worm Growth Per Food", &worm_food,INT,worm_food_option , 11, NULL); -} - -/* -Sets the number of arghs created per food -*/ -bool set_argh_per_food(void) -{ - static const struct opt_items argh_food_option[5] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - }; - return rb->set_option("Arghs Per Food", &arghs_per_food,INT,argh_food_option , 5, NULL); -} - -/* -Sets the number of ticks per move -*/ -bool set_worm_speed(void) -{ - bool ret; - static const struct opt_items speed_option[19] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 }, - { "11", -1 }, - { "12", -1 }, - { "13", -1 }, - { "14", -1 }, - { "15", -1 }, - { "16", -1 }, - { "17", -1 }, - { "18", -1 }, - }; - - - speed = 20 - speed; - ret = rb->set_option("Worm Speed", &speed,INT,speed_option , 19, NULL); - speed = 20 - speed; - return ret; -} - -/* -Sets the control style, which depends on the number of players, -remote control existing, etc -bool set_bool_options(char* string, bool* variable, - char* yes_str, char* no_str, void (*function)(bool)) -*/ -bool set_worm_control_style(void) -{ - static const struct opt_items key1_option[2] = { - { "Remote Control", -1 }, - { "No Rem. Control", -1 }, - }; - - static const struct opt_items key2_option[2] = { - { "2 Key Control", -1 }, - { "4 Key COntrol", -1 }, - }; - - static const struct opt_items key3_option[1] = { - { "Out of Control", -1 }, - }; - - if (players > 1) { - rb->set_option("Control Style",&use_remote,INT, key1_option, 2, NULL); - } else { - if (players > 0) { - rb->set_option("Control Style",&use_remote,INT, key2_option, 2, NULL); - } - else { - rb->set_option("Control Style",&use_remote,INT, key3_option, 1, NULL); - } - } - return false; -} - -void default_settings(void) + * Reverts default settings + */ +static void default_settings(void) { arghs_per_food = ARGHS_PER_FOOD; argh_size = ARGH_SIZE; @@ -2487,9 +2280,9 @@ void default_settings(void) } /* -Launches the wormlet game -*/ -bool launch_wormlet(void) + * Launches the wormlet game + */ +static bool launch_wormlet(void) { int game_result = 1; @@ -2513,8 +2306,6 @@ bool launch_wormlet(void) return false; } -/* End of settings/changes etc */ - /** * Main entry point */ @@ -2563,104 +2354,6 @@ enum plugin_status plugin_start(const void* parameter) { "Yes", -1 }, }; - static const struct opt_items num_worms_option[3] = { - { "1", -1 }, - { "2", -1 }, - { "3", -1 } - }; - -#ifdef MULTIPLAYER - static const struct opt_items num_players_option[4] = { -#else - static const struct opt_items num_players_option[2] = { -#endif - { "0", -1 }, - { "1", -1 } -#ifdef MULTIPLAYER - ,{ "2", -1 }, - { "3", -1 } -#endif - }; - - static const struct opt_items argh_size_option[9] = { - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 } - }; - - static const struct opt_items food_size_option[9] = { - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 } - }; - - static const struct opt_items worm_food_option[16] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 }, - { "11", -1 }, - { "12", -1 }, - { "13", -1 }, - { "14", -1 }, - { "15", -1 } - }; - - static const struct opt_items argh_food_option[9] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 } - }; - - static const struct opt_items speed_option[21] = { - { "0", -1 }, - { "1", -1 }, - { "2", -1 }, - { "3", -1 }, - { "4", -1 }, - { "5", -1 }, - { "6", -1 }, - { "7", -1 }, - { "8", -1 }, - { "9", -1 }, - { "10", -1 }, - { "11", -1 }, - { "12", -1 }, - { "13", -1 }, - { "14", -1 }, - { "15", -1 }, - { "16", -1 }, - { "17", -1 }, - { "18", -1 }, - { "19", -1 }, - { "20", -1 } - }; - static const struct opt_items remoteonly_option[1] = { { "Remote Control", -1 } }; @@ -2701,23 +2394,20 @@ enum plugin_status plugin_start(const void* parameter) launch_wormlet(); break; case 1: - new_setting = worm_count - 1; - rb->set_option("Number of Worms", &new_setting, INT, num_worms_option, 3, NULL); - if (new_setting != worm_count) - worm_count = new_setting + 1; + rb->set_int("Number of Worms", "", UNIT_INT, &worm_count, NULL, + 1, 1, 3, NULL); if (worm_count < players) { worm_count = players; } break; case 2: - new_setting = players; #ifdef MULTIPLAYER - rb->set_option("Number of Players", &new_setting, INT, num_players_option , 4, NULL); + rb->set_int("Number of Players", "", UNIT_INT, &players, NULL, + 1, 0, 4, NULL); #else - rb->set_option("Number of Players", &new_setting, INT, num_players_option , 2, NULL); + rb->set_int("Number of Players", "", UNIT_INT, &players, NULL, + 1, 0, 2, NULL); #endif - if (new_setting != players) - players = new_setting; if (players > worm_count) { worm_count = players; } @@ -2726,63 +2416,55 @@ enum plugin_status plugin_start(const void* parameter) } break; case 3: - new_setting = use_remote; switch(players) { case 0: - rb->set_option("Control Style",&new_setting,INT, nokey_option, 1, NULL); + rb->set_option("Control Style",&use_remote,INT, + nokey_option, 1, NULL); break; case 1: - rb->set_option("Control Style",&new_setting,INT, key24_option, 2, NULL); + rb->set_option("Control Style",&use_remote,INT, + key24_option, 2, NULL); break; case 2: #ifdef REMOTE - rb->set_option("Control Style",&new_setting,INT, remote_option, 2, NULL); + rb->set_option("Control Style",&use_remote,INT, + remote_option, 2, NULL); #else - rb->set_option("Control Style",&new_setting,INT, key2_option, 1, NULL); + rb->set_option("Control Style",&use_remote,INT, + key2_option, 1, NULL); #endif break; case 3: - rb->set_option("Control Style",&new_setting,INT, remoteonly_option, 1, NULL); + rb->set_option("Control Style",&use_remote,INT, + remoteonly_option, 1, NULL); break; } - if (new_setting != use_remote) - use_remote = new_setting; break; case 4: - new_setting = worm_food; - rb->set_option("Worm Growth Per Food", &new_setting,INT,worm_food_option , 16, NULL); - if (new_setting != worm_food) - worm_food = new_setting; + rb->set_int("Worm Growth Per Food", "", UNIT_INT, &worm_food, + NULL, 1, 0, 15, NULL); break; case 5: - new_setting = speed; - new_setting = 20 - new_setting; - rb->set_option("Worm Speed", &new_setting,INT,speed_option , 21, NULL); - new_setting = 20 - new_setting; - if (new_setting != speed) - speed = new_setting; + new_setting = 20 - speed; + rb->set_int("Worm Speed", "", UNIT_INT, &new_setting, + NULL, 1, 0, 20, NULL); + speed = 20 - new_setting; break; case 6: - new_setting = arghs_per_food; - rb->set_option("Arghs Per Food", &new_setting,INT,argh_food_option , 9, NULL); - if (new_setting != arghs_per_food) - arghs_per_food = new_setting; + rb->set_int("Arghs Per Food", "", UNIT_INT, &arghs_per_food, + NULL, 1, 0, 8, NULL); break; case 7: - new_setting = argh_size-2; - rb->set_option("Argh Size", &new_setting,INT,argh_size_option , 9, NULL); - if (new_setting != argh_size) - argh_size = new_setting+2; + rb->set_int("Argh Size", "", UNIT_INT, &argh_size, + NULL, 1, 2, 10, NULL); break; case 8: - new_setting = food_size-2; - rb->set_option("Food Size", &new_setting,INT,food_size_option, 9, NULL); - if (new_setting != food_size) - food_size = new_setting+2; + rb->set_int("Food Size", "", UNIT_INT, &food_size, + NULL, 1, 2, 10, NULL); break; case 9: new_setting = 0; - rb->set_option("Reset Settings?", &new_setting,INT, noyes , 2, NULL); + rb->set_option("Reset Settings?", &new_setting, INT, noyes , 2, NULL); if (new_setting == 1) default_settings(); break; -- cgit v1.2.3