forked from len0rd/rockbox
use lib display text to display help messages (FS#10099).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21861 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
e37f9f1691
commit
c72b23ad2e
9 changed files with 407 additions and 744 deletions
|
@ -22,6 +22,7 @@
|
|||
#include "plugin.h"
|
||||
#include "lib/configfile.h" /* Part of libplugin */
|
||||
#include "lib/helper.h"
|
||||
#include "lib/display_text.h"
|
||||
|
||||
PLUGIN_HEADER
|
||||
|
||||
|
@ -1130,154 +1131,84 @@ int game_menu(int when)
|
|||
}
|
||||
}
|
||||
|
||||
int help(int when)
|
||||
int help(void)
|
||||
{
|
||||
int w,h;
|
||||
int button;
|
||||
int xoffset=0;
|
||||
int yoffset=0;
|
||||
/* set the maximum x and y in the helpscreen
|
||||
dont forget to update, if you change text */
|
||||
int maxY=180;
|
||||
int maxX=215;
|
||||
|
||||
while(true) {
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
rb->lcd_set_background(LCD_BLACK);
|
||||
rb->lcd_clear_display();
|
||||
rb->lcd_set_background(LCD_BLACK);
|
||||
rb->lcd_set_foreground(LCD_WHITE);
|
||||
#else
|
||||
rb->lcd_clear_display();
|
||||
#endif
|
||||
|
||||
rb->lcd_getstringsize("BrickMania", &w, &h);
|
||||
rb->lcd_putsxy(LCD_WIDTH/2-w/2+xoffset, 1+yoffset, "BrickMania");
|
||||
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
rb->lcd_set_foreground(LCD_RGBPACK(245,0,0));
|
||||
rb->lcd_putsxy(1+xoffset, 1*(h+2)+yoffset,"Aim");
|
||||
rb->lcd_set_foreground(LCD_WHITE);
|
||||
#else
|
||||
rb->lcd_putsxy(1+xoffset, 1*(h+2)+yoffset,"Aim");
|
||||
#endif
|
||||
rb->lcd_putsxy(1+xoffset, 2*(h+2)+yoffset,
|
||||
"destroy all the bricks by bouncing");
|
||||
rb->lcd_putsxy(1+xoffset, 3*(h+2)+yoffset,
|
||||
"the ball of them using the paddle.");
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
rb->lcd_set_foreground(LCD_RGBPACK(245,0,0));
|
||||
rb->lcd_putsxy(1+xoffset, 5*(h+2)+yoffset,"Controls");
|
||||
rb->lcd_set_foreground(LCD_WHITE);
|
||||
#else
|
||||
rb->lcd_putsxy(1+xoffset, 5*(h+2)+yoffset,"Controls");
|
||||
#endif
|
||||
rb->lcd_putsxy(1+xoffset, 6*(h+2)+yoffset,"< & > Move the paddle");
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char* help_text[] = {
|
||||
"BrickMania", "", "Aim", "",
|
||||
"Destroy", "all", "the", "bricks", "by", "bouncing",
|
||||
"the", "ball", "of", "them", "using", "the", "paddle.", "", "",
|
||||
"Controls", "",
|
||||
"< & >", "Move", "the", "paddle", "",
|
||||
#if CONFIG_KEYPAD == ONDIO_PAD
|
||||
rb->lcd_putsxy(1+xoffset, 7*(h+2)+yoffset,
|
||||
"MENU Releases the ball/Fire!");
|
||||
"MENU",
|
||||
#elif (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == IAUDIO_M3_PAD)
|
||||
rb->lcd_putsxy(1+xoffset, 7*(h+2)+yoffset,
|
||||
"PLAY Releases the ball/Fire!");
|
||||
"PLAY",
|
||||
#elif CONFIG_KEYPAD == IRIVER_H300_PAD
|
||||
rb->lcd_putsxy(1+xoffset, 7*(h+2)+yoffset,
|
||||
"NAVI Releases the ball/Fire!");
|
||||
"NAVI",
|
||||
#else
|
||||
rb->lcd_putsxy(1+xoffset, 7*(h+2)+yoffset,
|
||||
"SELECT Releases the ball/Fire!");
|
||||
"SELECT",
|
||||
#endif
|
||||
"Releases", "the", "ball/", "Fire!", "",
|
||||
#if CONFIG_KEYPAD == IAUDIO_M3_PAD
|
||||
rb->lcd_putsxy(1+xoffset, 8*(h+2)+yoffset, "REC Opens menu/Quit");
|
||||
"REC",
|
||||
#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) || \
|
||||
(CONFIG_KEYPAD == CREATIVEZVM_PAD)
|
||||
"BACK",
|
||||
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
|
||||
(CONFIG_KEYPAD == IPOD_3G_PAD) || \
|
||||
(CONFIG_KEYPAD == IPOD_1G2G_PAD)
|
||||
"MENU",
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
||||
(CONFIG_KEYPAD == IRIVER_H300_PAD) || \
|
||||
(CONFIG_KEYPAD == ONDIO_PAD) || \
|
||||
(CONFIG_KEYPAD == RECORDER_PAD) || \
|
||||
(CONFIG_KEYPAD == ARCHOS_AV300_PAD)
|
||||
"STOP",
|
||||
#else
|
||||
rb->lcd_putsxy(1+xoffset, 8*(h+2)+yoffset, "STOP Opens menu/Quit");
|
||||
"POWER",
|
||||
#endif
|
||||
"Opens", "menu/", "Quit", "", "",
|
||||
"Specials", "",
|
||||
"N", "Normal:", "returns", "paddle", "to", "normal", "",
|
||||
"D", "DIE!:", "loses", "a", "life", "",
|
||||
"L", "Life:", "gains", "a", "life/", "power", "up", "",
|
||||
"F", "Fire:", "allows", "you", "to", "shoot", "bricks", "",
|
||||
"G", "Glue:", "ball", "sticks", "to", "paddle", "",
|
||||
"B", "Ball:", "generates", "another", "ball", "",
|
||||
"FL", "Flip:", "flips", "left /", "right", "movement",
|
||||
};
|
||||
static struct style_text formation[]={
|
||||
{ 0, TEXT_CENTER|TEXT_UNDERLINE },
|
||||
{ 2, C_RED },
|
||||
{ 19, C_RED },
|
||||
{ 38, C_RED },
|
||||
{ 40, C_BLUE },
|
||||
{ 47, C_RED },
|
||||
{ 53, C_GREEN },
|
||||
{ 61, C_ORANGE },
|
||||
{ 69, C_GREEN },
|
||||
{ 76, C_YELLOW },
|
||||
{ 82, C_RED },
|
||||
{ -1, 0 }
|
||||
};
|
||||
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
rb->lcd_set_foreground(LCD_RGBPACK(245,0,0));
|
||||
rb->lcd_putsxy(1+xoffset, 10*(h+2)+yoffset, "Specials");
|
||||
rb->lcd_set_background(LCD_BLACK);
|
||||
rb->lcd_set_foreground(LCD_WHITE);
|
||||
#else
|
||||
rb->lcd_putsxy(1+xoffset, 10*(h+2)+yoffset, "Specials");
|
||||
#endif
|
||||
rb->lcd_putsxy(1+xoffset, 11*(h+2)+yoffset,
|
||||
"N Normal:returns paddle to normal");
|
||||
rb->lcd_putsxy(1+xoffset, 12*(h+2)+yoffset, "D DIE!:loses a life");
|
||||
rb->lcd_putsxy(1+xoffset, 13*(h+2)+yoffset,
|
||||
"L Life:gains a life/power up");
|
||||
rb->lcd_putsxy(1+xoffset, 14*(h+2)+yoffset,
|
||||
"F Fire:allows you to shoot bricks");
|
||||
rb->lcd_putsxy(1+xoffset, 15*(h+2)+yoffset,
|
||||
"G Glue:ball sticks to paddle");
|
||||
rb->lcd_putsxy(1+xoffset, 16*(h+2)+yoffset,
|
||||
"B Ball:generates another ball");
|
||||
rb->lcd_putsxy(1+xoffset, 17*(h+2)+yoffset,
|
||||
"FL Flip:flips left / right movement");
|
||||
rb->lcd_update();
|
||||
|
||||
rb->lcd_setfont(FONT_UI);
|
||||
if (display_text(WORDS, help_text, formation, NULL))
|
||||
return 1;
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
switch (button) {
|
||||
#ifdef RC_QUIT
|
||||
case RC_QUIT:
|
||||
#endif
|
||||
#ifdef HAVE_TOUCHSCREEN
|
||||
case BUTTON_TOUCHSCREEN:
|
||||
#endif
|
||||
case QUIT:
|
||||
switch (game_menu(when)) {
|
||||
case 0:
|
||||
cur_level=0;
|
||||
life=2;
|
||||
int_game(1);
|
||||
break;
|
||||
case 1:
|
||||
con_game=1;
|
||||
break;
|
||||
case 2:
|
||||
if (help(when)==1)
|
||||
return 1;
|
||||
break;
|
||||
case 3:
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
break;
|
||||
case LEFT:
|
||||
case LEFT | BUTTON_REPEAT:
|
||||
#ifdef ALTLEFT
|
||||
case ALTLEFT:
|
||||
case ALTLEFT | BUTTON_REPEAT:
|
||||
#endif
|
||||
if( xoffset<0)
|
||||
xoffset+=2;
|
||||
break;
|
||||
case RIGHT:
|
||||
case RIGHT | BUTTON_REPEAT:
|
||||
#ifdef ALTRIGHT
|
||||
case ALTRIGHT:
|
||||
case ALTRIGHT | BUTTON_REPEAT:
|
||||
#endif
|
||||
if(xoffset+maxX > LCD_WIDTH)
|
||||
xoffset-=2;
|
||||
break;
|
||||
case UP:
|
||||
case UP | BUTTON_REPEAT:
|
||||
if(yoffset <0)
|
||||
yoffset+=2;
|
||||
break;
|
||||
case DOWN:
|
||||
case DOWN | BUTTON_REPEAT:
|
||||
if(yoffset+maxY > LCD_HEIGHT)
|
||||
yoffset-=2;
|
||||
break;
|
||||
|
||||
default:
|
||||
if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
|
||||
rb->yield();
|
||||
}
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
rb->lcd_setfont(FONT_SYSFIXED);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -1315,10 +1246,6 @@ int game_loop(void)
|
|||
int sec_count=0,num_count=10;
|
||||
int end;
|
||||
|
||||
rb->srand( *rb->current_tick );
|
||||
|
||||
configfile_load(HIGH_SCORE,config,1,0);
|
||||
|
||||
switch(game_menu(0)) {
|
||||
case 0:
|
||||
cur_level = 0;
|
||||
|
@ -1329,7 +1256,7 @@ int game_loop(void)
|
|||
con_game = 1;
|
||||
break;
|
||||
case 2:
|
||||
if (help(0) == 1) return 1;
|
||||
return help();
|
||||
break;
|
||||
case 3:
|
||||
return 1;
|
||||
|
@ -1885,22 +1812,7 @@ int game_loop(void)
|
|||
sleep(3);
|
||||
}
|
||||
|
||||
switch(game_menu(0)) {
|
||||
case 0:
|
||||
life=2;
|
||||
cur_level=0;
|
||||
int_game(1);
|
||||
break;
|
||||
case 1:
|
||||
con_game=1;
|
||||
break;
|
||||
case 2:
|
||||
if (help(0)==1) return 1;
|
||||
break;
|
||||
case 3:
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2029,6 +1941,7 @@ int game_loop(void)
|
|||
case RC_QUIT:
|
||||
#endif
|
||||
case QUIT:
|
||||
while(1) {
|
||||
switch(game_menu(1)) {
|
||||
case 0:
|
||||
life=2;
|
||||
|
@ -2041,13 +1954,16 @@ int game_loop(void)
|
|||
con_game=1;
|
||||
break;
|
||||
case 2:
|
||||
if (help(1)==1)
|
||||
if (help()==1)
|
||||
return 1;
|
||||
continue;
|
||||
break;
|
||||
case 3:
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
for(k=0;k<used_balls;k++) {
|
||||
if (ball[k].x!=0)
|
||||
|
@ -2091,23 +2007,7 @@ int game_loop(void)
|
|||
ball[k].y=0;
|
||||
}
|
||||
|
||||
switch(game_menu(0)) {
|
||||
case 0:
|
||||
cur_level=0;
|
||||
life=2;
|
||||
int_game(1);
|
||||
break;
|
||||
case 1:
|
||||
con_game=1;
|
||||
break;
|
||||
case 2:
|
||||
if (help(0)==1)
|
||||
return 1;
|
||||
break;
|
||||
case 3:
|
||||
return 1;
|
||||
break;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (end > *rb->current_tick)
|
||||
rb->sleep(end-*rb->current_tick);
|
||||
|
@ -2128,6 +2028,10 @@ enum plugin_status plugin_start(const void* parameter)
|
|||
/* Turn off backlight timeout */
|
||||
backlight_force_on(); /* backlight control in lib/helper.c */
|
||||
|
||||
rb->srand( *rb->current_tick );
|
||||
|
||||
configfile_load(HIGH_SCORE,config,1,0);
|
||||
|
||||
/* now go ahead and have fun! */
|
||||
while (game_loop()!=1);
|
||||
|
||||
|
|
|
@ -592,32 +592,32 @@ static int clix_clear_selected(struct clix_game_state_t* state)
|
|||
return state->status;
|
||||
}
|
||||
|
||||
static int clix_help(void)
|
||||
static bool clix_help(void)
|
||||
{
|
||||
rb->lcd_setfont(FONT_UI);
|
||||
rb->lcd_set_foreground(LCD_WHITE);
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char *help_text[] = {
|
||||
"Clix", "", "Aim", "", "Remove", "all", "blocks", "from", "the",
|
||||
"board", "to", "achieve", "the", "next", "level.", "You", "can",
|
||||
"only", "remove", "blocks,", "if", "at", "least", "two", "blocks",
|
||||
"with", "the", "same", "color", "have", "a", "direct", "connection.",
|
||||
"The", "more", "blocks", "you", "remove", "per", "turn,", "the",
|
||||
"more", "points", "you", "get."
|
||||
"Clix", "", "Aim", "",
|
||||
"Remove", "all", "blocks", "from", "the", "board", "to", "achieve",
|
||||
"the", "next", "level.", "You", "can", "only", "remove", "blocks,",
|
||||
"if", "at", "least", "two", "blocks", "with", "the", "same", "color",
|
||||
"have", "a", "direct", "connection.", "The", "more", "blocks", "you",
|
||||
"remove", "per", "turn,", "the", "more", "points", "you", "get."
|
||||
};
|
||||
static struct style_text formation[]={
|
||||
{ 0, TEXT_CENTER|TEXT_UNDERLINE },
|
||||
{ 2, C_RED }
|
||||
{ 2, C_RED },
|
||||
{ -1, 0 }
|
||||
};
|
||||
|
||||
if (display_text(WORDS, help_text, formation, NULL)==PLUGIN_USB_CONNECTED)
|
||||
return PLUGIN_USB_CONNECTED;
|
||||
int button;
|
||||
|
||||
rb->lcd_setfont(FONT_UI);
|
||||
rb->lcd_set_foreground(LCD_WHITE);
|
||||
if (display_text(WORDS, help_text, formation, NULL))
|
||||
return true;
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
if (button == SYS_USB_CONNECTED) {
|
||||
return PLUGIN_USB_CONNECTED;
|
||||
}
|
||||
if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
|
||||
return true;
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
rb->lcd_setfont(FONT_SYSFIXED);
|
||||
|
@ -656,7 +656,7 @@ static int clix_menu(struct clix_game_state_t* state, bool ingame)
|
|||
clix_init(state);
|
||||
return 0;
|
||||
case 2:
|
||||
if (clix_help()==PLUGIN_USB_CONNECTED)
|
||||
if (clix_help())
|
||||
return 1;
|
||||
break;
|
||||
case 3:
|
||||
|
|
|
@ -38,6 +38,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_PLAY
|
||||
#define JEWELS_CANCEL BUTTON_OFF
|
||||
#define HK_SELECT "PLAY"
|
||||
#define HK_CANCEL "OFF"
|
||||
|
||||
#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -46,6 +48,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_OFF
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "OFF"
|
||||
|
||||
#elif CONFIG_KEYPAD == ONDIO_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -54,6 +58,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_MENU
|
||||
#define JEWELS_CANCEL BUTTON_OFF
|
||||
#define HK_SELECT "MENU"
|
||||
#define HK_CANCEL "OFF"
|
||||
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -63,6 +69,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_OFF
|
||||
#define JEWELS_RC_CANCEL BUTTON_RC_STOP
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "OFF"
|
||||
|
||||
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
|
||||
(CONFIG_KEYPAD == IPOD_1G2G_PAD)
|
||||
|
@ -75,6 +83,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_NEXT BUTTON_SCROLL_FWD
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL (BUTTON_SELECT | BUTTON_MENU)
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "SEL + MENU"
|
||||
|
||||
#elif (CONFIG_KEYPAD == IPOD_3G_PAD)
|
||||
#define JEWELS_LEFT BUTTON_LEFT
|
||||
|
@ -83,6 +93,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_DOWN BUTTON_SCROLL_FWD
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_MENU
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "MENU"
|
||||
|
||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -91,6 +103,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_PLAY
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "PLAY"
|
||||
|
||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -99,6 +113,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -107,6 +123,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
||||
#define JEWELS_SCROLLWHEEL
|
||||
|
@ -118,6 +136,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_NEXT BUTTON_SCROLL_FWD
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
|
||||
#define JEWELS_SCROLLWHEEL
|
||||
|
@ -129,6 +149,8 @@ PLUGIN_HEADER
|
|||
#define JEWELS_NEXT BUTTON_SCROLL_FWD
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL (BUTTON_HOME|BUTTON_REPEAT)
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "HOME"
|
||||
|
||||
#elif CONFIG_KEYPAD == SANSA_C200_PAD || \
|
||||
CONFIG_KEYPAD == SANSA_CLIP_PAD || \
|
||||
|
@ -139,6 +161,8 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
||||
#define JEWELS_UP BUTTON_SCROLL_UP
|
||||
|
@ -147,6 +171,8 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_PLAY
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "PLAY"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -155,6 +181,8 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_BACK
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "BACK"
|
||||
|
||||
#elif CONFIG_KEYPAD == MROBE100_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -163,6 +191,8 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
|
||||
#define JEWELS_UP BUTTON_RC_VOL_UP
|
||||
|
@ -171,10 +201,14 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RC_FF
|
||||
#define JEWELS_SELECT BUTTON_RC_PLAY
|
||||
#define JEWELS_CANCEL BUTTON_RC_REC
|
||||
#define HK_SELECT "PLAY"
|
||||
#define HK_CANCEL "REC"
|
||||
|
||||
#define JEWELS_RC_CANCEL BUTTON_REC
|
||||
|
||||
#elif CONFIG_KEYPAD == COWOND2_PAD
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == IAUDIO67_PAD
|
||||
#define JEWELS_UP BUTTON_STOP
|
||||
|
@ -183,6 +217,8 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_MENU
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "MENU"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -191,6 +227,8 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_BACK
|
||||
#define HK_SELECT "MIDDLE"
|
||||
#define HK_CANCEL "BACK"
|
||||
|
||||
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
|
@ -199,10 +237,13 @@ CONFIG_KEYPAD == SANSA_M200_PAD
|
|||
#define JEWELS_RIGHT BUTTON_RIGHT
|
||||
#define JEWELS_SELECT BUTTON_SELECT
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_SELECT "SELECT"
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == ONDAVX747_PAD || \
|
||||
CONFIG_KEYPAD == MROBE500_PAD
|
||||
#define JEWELS_CANCEL BUTTON_POWER
|
||||
#define HK_CANCEL "POWER"
|
||||
|
||||
#else
|
||||
#error No keymap defined!
|
||||
|
@ -223,9 +264,11 @@ CONFIG_KEYPAD == MROBE500_PAD
|
|||
#endif
|
||||
#ifndef JEWELS_SELECT
|
||||
#define JEWELS_SELECT BUTTON_CENTER
|
||||
#define HK_SELECT "CENTER"
|
||||
#endif
|
||||
#ifndef JEWELS_CANCEL
|
||||
#define JEWELS_CANCEL BUTTON_TOPLEFT
|
||||
#define HK_CANCEL "TOPLEFT"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -1312,15 +1355,26 @@ static int jewels_help(void)
|
|||
rb->lcd_setfont(FONT_UI);
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char *help_text[] = {
|
||||
"Jewels", "", "Aim", "", "Swap", "pairs", "of", "jewels", "to",
|
||||
"form", "connected", "segments", "of", "three", "or", "more", "of",
|
||||
"the", "same", "type.", "", "The", "goal", "of", "the", "game",
|
||||
"is", "to", "score", "as", "many", "points", "as", "possible",
|
||||
"before", "running", "out", "of", "available", "moves."
|
||||
"Jewels", "", "Aim", "",
|
||||
"Swap", "pairs", "of", "jewels", "to", "form", "connected",
|
||||
"segments", "of", "three", "or", "more", "of", "the", "same",
|
||||
"type.", "",
|
||||
"The", "goal", "of", "the", "game", "is", "to", "score", "as", "many",
|
||||
"points", "as", "possible", "before", "running", "out", "of",
|
||||
"available", "moves.", "", "",
|
||||
"Controls", "",
|
||||
"Directions",
|
||||
#ifdef JEWELS_SCROLLWHEEL
|
||||
"or", "scroll",
|
||||
#endif
|
||||
"to", "move", "",
|
||||
HK_SELECT, "to", "select", "",
|
||||
HK_CANCEL, "to", "go", "to", "menu"
|
||||
};
|
||||
static struct style_text formation[]={
|
||||
{ 0, TEXT_CENTER|TEXT_UNDERLINE },
|
||||
{ 2, C_RED }
|
||||
{ 2, C_RED },
|
||||
{ -1, 0 }
|
||||
};
|
||||
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
|
|
|
@ -134,11 +134,6 @@ bool display_text(short words, char** text, struct style_text* style,
|
|||
rb->screens[SCREEN_MAIN]->update_viewport();
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
rb->lcd_set_drawmode(prev_drawmode);
|
||||
#endif
|
||||
#ifdef HAVE_LCD_COLOR
|
||||
if (style!=NULL) {
|
||||
rb->lcd_set_foreground(standard_fgcolor);
|
||||
}
|
||||
#endif
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -19,6 +19,7 @@
|
|||
*
|
||||
****************************************************************************/
|
||||
#include "plugin.h"
|
||||
#include "lib/display_text.h"
|
||||
|
||||
#include "pluginbitmaps/pegbox_header.h"
|
||||
#include "pluginbitmaps/pegbox_pieces.h"
|
||||
|
@ -719,111 +720,6 @@ char levels[NUM_LEVELS][ROWS][COLS] = {
|
|||
};
|
||||
|
||||
|
||||
/*****************************************************************************
|
||||
* display_text() formats and outputs text.
|
||||
******************************************************************************/
|
||||
static void display_text(char *str, bool waitkey)
|
||||
{
|
||||
int chars_by_line;
|
||||
int lines_by_screen;
|
||||
int chars_for_line;
|
||||
int current_line = 0;
|
||||
int char_width, char_height;
|
||||
int first_char_index = 0;
|
||||
char *ptr_char;
|
||||
char *ptr_line;
|
||||
int i;
|
||||
char line[255];
|
||||
int key;
|
||||
bool go_on;
|
||||
|
||||
rb->lcd_clear_display();
|
||||
|
||||
rb->lcd_getstringsize("a", &char_width, &char_height);
|
||||
|
||||
chars_by_line = LCD_WIDTH / char_width;
|
||||
lines_by_screen = LCD_HEIGHT / char_height;
|
||||
|
||||
do
|
||||
{
|
||||
ptr_char = str + first_char_index;
|
||||
chars_for_line = 0;
|
||||
i = 0;
|
||||
ptr_line = line;
|
||||
while (i < chars_by_line)
|
||||
{
|
||||
switch (*ptr_char)
|
||||
{
|
||||
case '\t':
|
||||
case ' ':
|
||||
*(ptr_line++) = ' ';
|
||||
case '\n':
|
||||
case '\0':
|
||||
chars_for_line = i;
|
||||
break;
|
||||
|
||||
default:
|
||||
*(ptr_line++) = *ptr_char;
|
||||
}
|
||||
if (*ptr_char == '\n' || *ptr_char == '\0')
|
||||
break;
|
||||
ptr_char++;
|
||||
i++;
|
||||
}
|
||||
|
||||
if (chars_for_line == 0)
|
||||
chars_for_line = i;
|
||||
|
||||
line[chars_for_line] = '\0';
|
||||
|
||||
/* test if we have cut a word. If it is the case we don't have to */
|
||||
/* skip the space */
|
||||
if (i == chars_by_line && chars_for_line == chars_by_line)
|
||||
first_char_index += chars_for_line;
|
||||
else
|
||||
first_char_index += chars_for_line + 1;
|
||||
|
||||
/* print the line on the screen */
|
||||
rb->lcd_putsxy(0, current_line * char_height, line);
|
||||
|
||||
/* if the number of line showed on the screen is equals to the */
|
||||
/* maximum number of line we can show, we wait for a key pressed to */
|
||||
/* clear and show the remaining text. */
|
||||
current_line++;
|
||||
if (current_line == lines_by_screen || *ptr_char == '\0')
|
||||
{
|
||||
current_line = 0;
|
||||
rb->lcd_update();
|
||||
go_on = false;
|
||||
while (waitkey && !go_on)
|
||||
{
|
||||
key = rb->button_get(true);
|
||||
switch (key)
|
||||
{
|
||||
#ifdef HAVE_TOUCHSCREEN
|
||||
case BUTTON_TOUCHSCREEN:
|
||||
#endif
|
||||
case PEGBOX_QUIT:
|
||||
case PEGBOX_LEFT:
|
||||
case PEGBOX_DOWN:
|
||||
go_on = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
/*if (rb->default_event_handler(key) == SYS_USB_CONNECTED)
|
||||
{
|
||||
usb_detected = true;
|
||||
go_on = true;
|
||||
break;
|
||||
}*/
|
||||
break;
|
||||
}
|
||||
}
|
||||
rb->lcd_clear_display();
|
||||
}
|
||||
} while (*ptr_char != '\0');
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* draw_board() draws the game's current level.
|
||||
******************************************************************************/
|
||||
|
@ -1127,6 +1023,48 @@ static void pegbox_callback(void* param) {
|
|||
pegbox_savedata(pb);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* pegbox_help() display help text
|
||||
************************************************************************/
|
||||
static bool pegbox_help(void)
|
||||
{
|
||||
int button;
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char* help_text[] = {
|
||||
"Pegbox", "", "Aim", "",
|
||||
"To", "beat", "each", "level,", "you", "must", "destroy", "all", "of",
|
||||
"the", "pegs.", "If", "two", "like", "pegs", "are", "pushed", "into",
|
||||
"each", "other,", "they", "disappear", "except", "for", "triangles",
|
||||
"which", "form", "a", "solid", "block", "and", "crosses", "which",
|
||||
"allow", "you", "to", "choose", "a", "replacement", "block.", "", "",
|
||||
"Controls", "",
|
||||
RESTART_TEXT, "to", "restart", "level", "",
|
||||
LVL_UP_TEXT, "to", "go", "up", "a", "level", "",
|
||||
LVL_DOWN_TEXT, "to", "go", "down", "a", "level", "",
|
||||
SAVE_TEXT, "to", "select/save", "",
|
||||
QUIT_TEXT, "to", "quit"
|
||||
};
|
||||
static struct style_text formation[]={
|
||||
{ 0, TEXT_CENTER|TEXT_UNDERLINE },
|
||||
{ 2, C_RED },
|
||||
{ 46, C_RED },
|
||||
{ -1, 0 }
|
||||
};
|
||||
|
||||
rb->lcd_setfont(FONT_UI);
|
||||
|
||||
if (display_text(WORDS, help_text, formation, NULL))
|
||||
return true;
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
|
||||
return true;
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
rb->lcd_setfont(FONT_SYSFIXED);
|
||||
return false;
|
||||
}
|
||||
|
||||
/*****************************************************************************
|
||||
* pegbox_menu() is the initial menu at the start of the game.
|
||||
******************************************************************************/
|
||||
|
@ -1253,26 +1191,10 @@ static unsigned int pegbox_menu(struct game_context* pb) {
|
|||
breakout = true;
|
||||
}
|
||||
else if (loc == 2)
|
||||
display_text("How to Play\nTo beat each level, you must "
|
||||
"destroy all of the pegs. If two like pegs are "
|
||||
"pushed into each other they disappear except "
|
||||
"for triangles which form a solid block and "
|
||||
"crosses which allow you to choose a "
|
||||
"replacement block.\n\n"
|
||||
"Controls\n"
|
||||
#if LCD_HEIGHT > 64
|
||||
RESTART_TEXT " to restart level\n"
|
||||
LVL_UP_TEXT " to go up a level\n"
|
||||
LVL_DOWN_TEXT " to go down a level\n"
|
||||
SAVE_TEXT " to select/save\n"
|
||||
QUIT_TEXT " to quit\n",true);
|
||||
#else
|
||||
RESTART_TEXT ": restart\n"
|
||||
LVL_UP_TEXT ": level up\n"
|
||||
LVL_DOWN_TEXT " level down\n"
|
||||
SAVE_TEXT " select/save\n"
|
||||
QUIT_TEXT " quit\n",true);
|
||||
#endif
|
||||
{
|
||||
if(pegbox_help())
|
||||
return PB_USB;
|
||||
}
|
||||
else if (loc == 3)
|
||||
return PB_QUIT;
|
||||
break;
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
#include "plugin.h"
|
||||
#include "lib/pluginlib_actions.h"
|
||||
#include "lib/display_text.h"
|
||||
|
||||
/* This macros must always be included. Should be placed at the top by
|
||||
convention, although the actual position doesn't matter */
|
||||
|
@ -850,45 +851,23 @@ static void play_animation(int input)
|
|||
|
||||
static void instructions()
|
||||
{
|
||||
#define MARGIN 2
|
||||
int y = MARGIN, space_w, width, height;
|
||||
unsigned short x = MARGIN, i = 0;
|
||||
#define WORDS (sizeof instructions / sizeof (char*))
|
||||
static char* instructions[] = {
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char* help_text[] = {
|
||||
#if 0
|
||||
/* Not sure if we want to include this? */
|
||||
"robotfindskitten", RFK_VERSION, "", "",
|
||||
"By", "the", "illustrious", "Leonard", "Richardson", "(C)", "1997,", "2000", "",
|
||||
"Written", "originally", "for", "the", "Nerth", "Pork", "robotfindskitten", "contest", "", "",
|
||||
#endif
|
||||
"In", "this", "game", "you", "are", "robot", "(#).", "Your", "job", "is", "to", "find", "kitten.", "This", "task", "is", "complicated", "by", "the", "existence", "of", "various", "things", "which", "are", "not", "kitten.", "Robot", "must", "touch", "items", "to", "determine", "if", "they", "are", "kitten", "or", "not.", "",
|
||||
"In", "this", "game", "you", "are", "robot", "(#).", "Your", "job", "is",
|
||||
"to", "find", "kitten.", "This", "task", "is", "complicated", "by", "the",
|
||||
"existence", "of", "various", "things", "which", "are", "not", "kitten.",
|
||||
"Robot", "must", "touch", "items", "to", "determine", "if", "they", "are",
|
||||
"kitten", "or", "not.", "",
|
||||
"The", "game", "ends", "when", "robotfindskitten.", "", "",
|
||||
"Press", "any", "key", "to", "start",
|
||||
};
|
||||
rb->lcd_clear_display();
|
||||
rb->lcd_getstringsize(" ", &space_w, &height);
|
||||
for (i = 0; i < WORDS; i++) {
|
||||
rb->lcd_getstringsize(instructions[i], &width, NULL);
|
||||
/* Skip to next line if the current one can't fit the word */
|
||||
if (x + width > LCD_WIDTH - MARGIN) {
|
||||
x = MARGIN;
|
||||
y += height;
|
||||
}
|
||||
/* .. or if the word is the empty string */
|
||||
if (rb->strcmp(instructions[i], "") == 0) {
|
||||
x = MARGIN;
|
||||
y += height;
|
||||
continue;
|
||||
}
|
||||
/* We filled the screen */
|
||||
if (y + height > LCD_HEIGHT - MARGIN) {
|
||||
y = MARGIN;
|
||||
pause();
|
||||
rb->lcd_clear_display();
|
||||
}
|
||||
rb->lcd_putsxy(x, y, instructions[i]);
|
||||
x += width + space_w;
|
||||
}
|
||||
display_text(WORDS, help_text, NULL, NULL);
|
||||
pause();
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,7 @@
|
|||
#include "plugin.h"
|
||||
#include "lib/playback_control.h"
|
||||
#include "lib/configfile.h"
|
||||
#include "lib/display_text.h"
|
||||
#include "button.h"
|
||||
#include "lcd.h"
|
||||
|
||||
|
@ -447,26 +448,6 @@ PLUGIN_HEADER
|
|||
# define HK_UD "UP/DOWN"
|
||||
#endif
|
||||
|
||||
/**
|
||||
* Help strings
|
||||
*/
|
||||
|
||||
static int helplines;
|
||||
static int displaylines;
|
||||
|
||||
static char helptext[] =
|
||||
/* Use single spaces only! Close each line with one \0. */
|
||||
"-- Navigation --\0"
|
||||
HK_LR ": Move the cursor to the previous/ next column.\0"
|
||||
HK_UD ": Move the cursor up/ down in the column.\0"
|
||||
HK_MOVE ": Select cards, move cards, reveal hidden cards...\0"
|
||||
HK_DRAW ": Deselect a card if it was selected. Else draw new card(s) from the remains stack.\0"
|
||||
"-- Shortcuts --\0"
|
||||
HK_REM2CUR ": Put the card on top of the remains stack on top of the cursor.\0"
|
||||
HK_CUR2STACK ": Put the card under the cursor on one of the 4 final stacks.\0"
|
||||
HK_REM2STACK ": Put the card on top of the remains stack on one of the 4 final stacks.\0"
|
||||
;
|
||||
|
||||
/**
|
||||
* Misc constants, graphics and other defines
|
||||
*/
|
||||
|
@ -634,122 +615,41 @@ static void draw_empty_stack( int s, int x, int y, bool cursor )
|
|||
draw_card_ext( x, y, false, cursor );
|
||||
}
|
||||
|
||||
/**
|
||||
* Help
|
||||
*/
|
||||
|
||||
static void init_help(void)
|
||||
/* Help */
|
||||
static bool solitaire_help( void )
|
||||
{
|
||||
int lines = 0;
|
||||
int w_space, w, h;
|
||||
int para_len;
|
||||
char *para = helptext;
|
||||
|
||||
rb->lcd_getstringsize(" ", &w_space, &h);
|
||||
displaylines = LCD_HEIGHT / h;
|
||||
para_len = rb->strlen(para);
|
||||
|
||||
while (para_len)
|
||||
{
|
||||
bool first = true;
|
||||
int x = 0;
|
||||
char *next, *store;
|
||||
|
||||
next = rb->strtok_r(para, " ", &store);
|
||||
while (next)
|
||||
{
|
||||
rb->lcd_getstringsize(next, &w, NULL);
|
||||
if (!first)
|
||||
{
|
||||
if (x + w > LCD_WIDTH)
|
||||
{
|
||||
lines++;
|
||||
x = 0;
|
||||
}
|
||||
else
|
||||
next[-1] = ' '; /* re-concatenate string */
|
||||
}
|
||||
else
|
||||
first = false;
|
||||
|
||||
x += w + w_space;
|
||||
next = rb->strtok_r(NULL, " ", &store);
|
||||
}
|
||||
|
||||
lines++;
|
||||
para += para_len + 1;
|
||||
para_len = rb->strlen(para);
|
||||
}
|
||||
helplines = lines;
|
||||
}
|
||||
|
||||
enum help { HELP_QUIT, HELP_USB };
|
||||
|
||||
/* help for the not so intuitive interface */
|
||||
enum help solitaire_help( void )
|
||||
{
|
||||
int start = 0;
|
||||
int button;
|
||||
int lastbutton = BUTTON_NONE;
|
||||
bool fixed = (displaylines >= helplines);
|
||||
|
||||
while( true )
|
||||
{
|
||||
char *text = helptext;
|
||||
int line = fixed ? (displaylines - helplines) / 2 : 0;
|
||||
int i;
|
||||
|
||||
rb->lcd_clear_display();
|
||||
|
||||
for (i = 0; i < start + displaylines; i++)
|
||||
{
|
||||
if (i >= start)
|
||||
rb->lcd_puts(0, line++, text);
|
||||
text += rb->strlen(text) + 1;
|
||||
}
|
||||
rb->lcd_update();
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char* help_text[] = {
|
||||
"Solitaire", "", "Controlls", "",
|
||||
HK_LR ":", "Move", "the", "cursor", "to", "the",
|
||||
"previous/", "next", "column.", "",
|
||||
HK_UD ":", "Move", "the", "cursor", "up/", "down", "in", "the",
|
||||
"column.", "",
|
||||
HK_MOVE ":", "Select", "cards,", "move", "cards...", "",
|
||||
HK_DRAW ":", "Deselect", "a", "card", "if", "it", "was", "selected.",
|
||||
"Else", "draw", "new", "card(s)", "from", "the", "remains",
|
||||
"stack.", "", "",
|
||||
"Shortcuts", "",
|
||||
HK_REM2CUR ":", "Put", "the", "card", "on", "top", "of", "the",
|
||||
"remains", "stack", "on", "top", "of", "the", "cursor.", "",
|
||||
HK_CUR2STACK ":", "Put", "the", "card", "under", "the", "cursor",
|
||||
"on", "one", "of", "the", "4", "final", "stacks.", "",
|
||||
HK_REM2STACK ":", "Put", "the", "card", "on", "top", "of", "the",
|
||||
"remains", "stack", "on", "one", "of", "the", "4", "final",
|
||||
"stacks."
|
||||
};
|
||||
|
||||
if (display_text(WORDS, help_text, NULL, NULL))
|
||||
return true;
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
switch( button )
|
||||
{
|
||||
case SOL_UP:
|
||||
#ifdef SOL_UP_PRE
|
||||
if( lastbutton != SOL_UP_PRE )
|
||||
break;
|
||||
#else
|
||||
case SOL_UP|BUTTON_REPEAT:
|
||||
#endif
|
||||
if (!fixed && start > 0)
|
||||
start--;
|
||||
break;
|
||||
|
||||
case SOL_DOWN:
|
||||
#ifdef SOL_DOWN_PRE
|
||||
if( lastbutton != SOL_DOWN_PRE )
|
||||
break;
|
||||
#else
|
||||
case SOL_DOWN|BUTTON_REPEAT:
|
||||
#endif
|
||||
if (!fixed && start < helplines - displaylines)
|
||||
start++;
|
||||
break;
|
||||
|
||||
#ifdef SOL_RC_QUIT
|
||||
case SOL_RC_QUIT:
|
||||
#endif
|
||||
case SOL_QUIT:
|
||||
return HELP_QUIT;
|
||||
|
||||
default:
|
||||
if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
|
||||
return HELP_USB;
|
||||
break;
|
||||
}
|
||||
if( button != BUTTON_NONE )
|
||||
lastbutton = button;
|
||||
return true;
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
|
||||
rb->yield();
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -831,7 +731,7 @@ int solitaire_menu(bool in_game)
|
|||
break;
|
||||
|
||||
case 3:
|
||||
if (solitaire_help() == HELP_USB)
|
||||
if (solitaire_help())
|
||||
result = MENU_USB;
|
||||
break;
|
||||
|
||||
|
@ -1929,8 +1829,6 @@ enum plugin_status plugin_start(const void* parameter )
|
|||
else
|
||||
result = SOLITAIRE_WIN;
|
||||
|
||||
init_help();
|
||||
|
||||
/* play the game :)
|
||||
* Keep playing if a game was won (that means display the menu after
|
||||
* winning instead of quiting) */
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
****************************************************************************/
|
||||
#include "plugin.h"
|
||||
#ifdef HAVE_LCD_BITMAP
|
||||
#include "lib/display_text.h"
|
||||
|
||||
PLUGIN_HEADER
|
||||
|
||||
|
@ -66,6 +67,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP BUTTON_F3
|
||||
#define STAR_LEVEL_DOWN BUTTON_F1
|
||||
#define STAR_LEVEL_REPEAT BUTTON_F2
|
||||
#define STAR_TOGGLE_CONTROL_NAME "ON"
|
||||
#define STAR_QUIT_NAME "OFF"
|
||||
#define STAR_LEVEL_UP_NAME "F3"
|
||||
#define STAR_LEVEL_DOWN_NAME "F1"
|
||||
#define STAR_LEVEL_REPEAT_NAME "F2"
|
||||
|
||||
#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
|
||||
#define STAR_QUIT BUTTON_OFF
|
||||
|
@ -78,6 +84,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP BUTTON_F3
|
||||
#define STAR_LEVEL_DOWN BUTTON_F1
|
||||
#define STAR_LEVEL_REPEAT BUTTON_F2
|
||||
#define STAR_TOGGLE_CONTROL_NAME "ON/SELECT"
|
||||
#define STAR_QUIT_NAME "OFF"
|
||||
#define STAR_LEVEL_UP_NAME "F3"
|
||||
#define STAR_LEVEL_DOWN_NAME "F1"
|
||||
#define STAR_LEVEL_REPEAT_NAME "F2"
|
||||
|
||||
#elif CONFIG_KEYPAD == ONDIO_PAD
|
||||
#define STAR_QUIT BUTTON_OFF
|
||||
|
@ -90,6 +101,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "MODE"
|
||||
#define STAR_QUIT_NAME "OFF"
|
||||
#define STAR_LEVEL_UP_NAME "M >"
|
||||
#define STAR_LEVEL_DOWN_NAME "M <"
|
||||
#define STAR_LEVEL_REPEAT_NAME "M ^"
|
||||
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
|
||||
(CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||
|
@ -103,6 +119,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_ON | BUTTON_RIGHT)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_ON | BUTTON_LEFT)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_ON | BUTTON_SELECT)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "MODE/SELECT"
|
||||
#define STAR_QUIT_NAME "OFF"
|
||||
#define STAR_LEVEL_UP_NAME "ON + RIGHT"
|
||||
#define STAR_LEVEL_DOWN_NAME "ON + LEFT"
|
||||
#define STAR_LEVEL_REPEAT_NAME "ON + NAVI"
|
||||
|
||||
#define STAR_RC_QUIT BUTTON_RC_STOP
|
||||
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
|
||||
|
@ -119,6 +140,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_PLAY)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "S + MENU"
|
||||
#define STAR_LEVEL_UP_NAME "S >"
|
||||
#define STAR_LEVEL_DOWN_NAME "S <"
|
||||
#define STAR_LEVEL_REPEAT_NAME "S + PLAY"
|
||||
|
||||
#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
|
||||
|
||||
|
@ -133,6 +159,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_DOWN_PRE BUTTON_REC
|
||||
#define STAR_LEVEL_DOWN (BUTTON_REC|BUTTON_REPEAT)
|
||||
#define STAR_LEVEL_REPEAT BUTTON_PLAY
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
#define STAR_LEVEL_UP_NAME "REC"
|
||||
#define STAR_LEVEL_DOWN_NAME "REC.."
|
||||
#define STAR_LEVEL_REPEAT_NAME "PLAY"
|
||||
|
||||
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
|
||||
|
||||
|
@ -145,6 +176,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP BUTTON_VOL_UP
|
||||
#define STAR_LEVEL_DOWN BUTTON_VOL_DOWN
|
||||
#define STAR_LEVEL_REPEAT BUTTON_A
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
#define STAR_LEVEL_UP_NAME "VOL UP"
|
||||
#define STAR_LEVEL_DOWN_NAME "VOL DOWN"
|
||||
#define STAR_LEVEL_REPEAT_NAME "A"
|
||||
|
||||
#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
|
||||
(CONFIG_KEYPAD == SANSA_C200_PAD) || \
|
||||
|
@ -160,7 +196,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_DOWN)
|
||||
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
#define STAR_LEVEL_UP_NAME "SELECT + RIGHT"
|
||||
#define STAR_LEVEL_DOWN_NAME "SELECT + LEFT"
|
||||
#define STAR_LEVEL_REPEAT_NAME "SELECT + DOWN"
|
||||
|
||||
#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
|
||||
|
||||
|
@ -173,6 +213,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_DOWN)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "HOME"
|
||||
#define STAR_LEVEL_UP_NAME "SELECT + RIGHT"
|
||||
#define STAR_LEVEL_DOWN_NAME "SELECT + LEFT"
|
||||
#define STAR_LEVEL_REPEAT_NAME "SELECT + DOWN"
|
||||
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
|
||||
|
||||
|
@ -185,6 +230,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_SCROLL_UP)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_SCROLL_DOWN)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "REW"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
#define STAR_LEVEL_UP_NAME "PLAY+UP"
|
||||
#define STAR_LEVEL_DOWN_NAME "PLAY+DOWN"
|
||||
#define STAR_LEVEL_REPEAT_NAME "PLAY+RIGHT"
|
||||
|
||||
#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
|
||||
|
||||
|
@ -197,6 +247,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP BUTTON_VOL_UP
|
||||
#define STAR_LEVEL_DOWN BUTTON_VOL_DOWN
|
||||
#define STAR_LEVEL_REPEAT BUTTON_MENU
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "BACK"
|
||||
#define STAR_LEVEL_UP_NAME "VOL UP"
|
||||
#define STAR_LEVEL_DOWN_NAME "VOL DOWN"
|
||||
#define STAR_LEVEL_REPEAT_NAME "MENU"
|
||||
|
||||
#elif (CONFIG_KEYPAD == MROBE100_PAD)
|
||||
|
||||
|
@ -209,6 +264,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP BUTTON_PLAY
|
||||
#define STAR_LEVEL_DOWN BUTTON_MENU
|
||||
#define STAR_LEVEL_REPEAT BUTTON_DISPLAY
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
#define STAR_LEVEL_UP_NAME "PLAY"
|
||||
#define STAR_LEVEL_DOWN_NAME "MENU"
|
||||
#define STAR_LEVEL_REPEAT_NAME "DISPLAY"
|
||||
|
||||
#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
|
||||
|
||||
|
@ -221,11 +281,16 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_RC_PLAY|BUTTON_RC_VOL_DOWN)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_RC_PLAY|BUTTON_RC_MENU)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "MODE"
|
||||
#define STAR_QUIT_NAME "REC"
|
||||
#define STAR_LEVEL_UP_NAME "PLAY+VOL+"
|
||||
#define STAR_LEVEL_DOWN_NAME "PLAY+VOL-"
|
||||
#define STAR_LEVEL_REPEAT_NAME "PLAY+MENU"
|
||||
|
||||
#elif (CONFIG_KEYPAD == COWOND2_PAD)
|
||||
|
||||
#define STAR_QUIT BUTTON_POWER
|
||||
#define STAR_QUIT_NAME "[POWER]"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
|
||||
|
||||
|
@ -238,6 +303,11 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP (BUTTON_CUSTOM | BUTTON_UP)
|
||||
#define STAR_LEVEL_DOWN (BUTTON_CUSTOM | BUTTON_DOWN)
|
||||
#define STAR_LEVEL_REPEAT (BUTTON_CUSTOM | BUTTON_RIGHT)
|
||||
#define STAR_TOGGLE_CONTROL_NAME "PLAY"
|
||||
#define STAR_QUIT_NAME "BACK"
|
||||
#define STAR_LEVEL_UP_NAME "CUSTOM+UP"
|
||||
#define STAR_LEVEL_DOWN_NAME "CUSTOM+DOWN"
|
||||
#define STAR_LEVEL_REPEAT_NAME "CUSTOM+RIGHT"
|
||||
|
||||
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
|
||||
|
||||
|
@ -250,15 +320,20 @@ PLUGIN_HEADER
|
|||
#define STAR_LEVEL_UP BUTTON_VOL_UP
|
||||
#define STAR_LEVEL_DOWN BUTTON_VOL_DOWN
|
||||
#define STAR_LEVEL_REPEAT BUTTON_VIEW
|
||||
#define STAR_TOGGLE_CONTROL_NAME "SELECT"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
#define STAR_LEVEL_UP_NAME "VOL UP"
|
||||
#define STAR_LEVEL_DOWN_NAME "VOL DOWN"
|
||||
#define STAR_LEVEL_REPEAT_NAME "VIEW"
|
||||
|
||||
#elif (CONFIG_KEYPAD == ONDAVX747_PAD)
|
||||
|
||||
#define STAR_QUIT BUTTON_POWER
|
||||
#define STAR_QUIT_NAME "[POWER]"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
|
||||
#elif CONFIG_KEYPAD == MROBE500_PAD
|
||||
#define STAR_QUIT BUTTON_POWER
|
||||
#define STAR_QUIT_NAME "[POWER]"
|
||||
#define STAR_QUIT_NAME "POWER"
|
||||
|
||||
#else
|
||||
#error No keymap defined!
|
||||
|
@ -267,7 +342,7 @@ PLUGIN_HEADER
|
|||
#ifdef HAVE_TOUCHSCREEN
|
||||
//#ifndef STAR_QUIT
|
||||
//#define STAR_QUIT BUTTON_TOPLEFT
|
||||
//#define STAR_QUIT_NAME "[TOPLEFT]"
|
||||
//#define STAR_QUIT_NAME "TOPLEFT"
|
||||
//#endif
|
||||
#ifndef STAR_LEFT
|
||||
#define STAR_LEFT BUTTON_MIDLEFT
|
||||
|
@ -283,19 +358,19 @@ PLUGIN_HEADER
|
|||
#endif
|
||||
#ifndef STAR_TOGGLE_CONTROL
|
||||
#define STAR_TOGGLE_CONTROL BUTTON_CENTER
|
||||
#define STAR_TOGGLE_CONTROL_NAME "[CENTER]"
|
||||
#define STAR_TOGGLE_CONTROL_NAME "CENTER"
|
||||
#endif
|
||||
#ifndef STAR_LEVEL_UP
|
||||
#define STAR_LEVEL_UP BUTTON_TOPLEFT
|
||||
#define STAR_LEVEL_UP_NAME "[TOPLEFT]"
|
||||
#define STAR_LEVEL_UP_NAME "TOPLEFT"
|
||||
#endif
|
||||
#ifndef STAR_LEVEL_DOWN
|
||||
#define STAR_LEVEL_DOWN BUTTON_BOTTOMLEFT
|
||||
#define STAR_LEVEL_DOWN_NAME "[BOTTOMLEFT]"
|
||||
#define STAR_LEVEL_DOWN_NAME "BOTTOMLEFT"
|
||||
#endif
|
||||
#ifndef STAR_LEVEL_REPEAT
|
||||
#define STAR_LEVEL_REPEAT BUTTON_BOTTOMRIGHT
|
||||
#define STAR_LEVEL_REPEAT_NAME "[BOTTOMRIGHT]"
|
||||
#define STAR_LEVEL_REPEAT_NAME "BOTTOMRIGHT"
|
||||
#endif
|
||||
#endif
|
||||
|
||||
|
@ -538,104 +613,6 @@ static unsigned char* levels =
|
|||
"*........o*o...*\n"
|
||||
"****************";
|
||||
|
||||
/**
|
||||
* Display text.
|
||||
*/
|
||||
void star_display_text(char *str, bool waitkey)
|
||||
{
|
||||
int chars_by_line;
|
||||
int lines_by_screen;
|
||||
int chars_for_line;
|
||||
int current_line = 0;
|
||||
int first_char_index = 0;
|
||||
char *ptr_char;
|
||||
char *ptr_line;
|
||||
int i;
|
||||
char line[255];
|
||||
int key;
|
||||
bool go_on;
|
||||
|
||||
rb->lcd_clear_display();
|
||||
|
||||
chars_by_line = LCD_WIDTH / char_width;
|
||||
lines_by_screen = LCD_HEIGHT / char_height;
|
||||
|
||||
do
|
||||
{
|
||||
ptr_char = str + first_char_index;
|
||||
chars_for_line = 0;
|
||||
i = 0;
|
||||
ptr_line = line;
|
||||
while (i < chars_by_line)
|
||||
{
|
||||
switch (*ptr_char)
|
||||
{
|
||||
case '\t':
|
||||
case ' ':
|
||||
*(ptr_line++) = ' ';
|
||||
case '\n':
|
||||
case '\0':
|
||||
chars_for_line = i;
|
||||
break;
|
||||
|
||||
default:
|
||||
*(ptr_line++) = *ptr_char;
|
||||
}
|
||||
if (*ptr_char == '\n' || *ptr_char == '\0')
|
||||
break;
|
||||
ptr_char++;
|
||||
i++;
|
||||
}
|
||||
|
||||
if (chars_for_line == 0)
|
||||
chars_for_line = i;
|
||||
|
||||
line[chars_for_line] = '\0';
|
||||
|
||||
/* test if we have cut a word. If it is the case we don't have to */
|
||||
/* skip the space */
|
||||
if (i == chars_by_line && chars_for_line == chars_by_line)
|
||||
first_char_index += chars_for_line;
|
||||
else
|
||||
first_char_index += chars_for_line + 1;
|
||||
|
||||
/* print the line on the screen */
|
||||
rb->lcd_putsxy(0, current_line * char_height, line);
|
||||
|
||||
/* if the number of line showed on the screen is equals to the */
|
||||
/* maximum number of line we can show, we wait for a key pressed to */
|
||||
/* clear and show the remaining text. */
|
||||
current_line++;
|
||||
if (current_line == lines_by_screen || *ptr_char == '\0')
|
||||
{
|
||||
current_line = 0;
|
||||
rb->lcd_update();
|
||||
go_on = false;
|
||||
while (waitkey && !go_on)
|
||||
{
|
||||
key = rb->button_get(true);
|
||||
switch (key)
|
||||
{
|
||||
case STAR_QUIT:
|
||||
case STAR_LEFT:
|
||||
case STAR_DOWN:
|
||||
go_on = true;
|
||||
break;
|
||||
|
||||
default:
|
||||
if (rb->default_event_handler(key) == SYS_USB_CONNECTED)
|
||||
{
|
||||
usb_detected = true;
|
||||
go_on = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
rb->lcd_clear_display();
|
||||
}
|
||||
} while (*ptr_char != '\0');
|
||||
}
|
||||
|
||||
/**
|
||||
* Do a pretty transition from one level to another.
|
||||
*/
|
||||
|
@ -986,7 +963,7 @@ static int star_run_game(int current_level)
|
|||
if (current_level == STAR_LEVEL_COUNT)
|
||||
{
|
||||
rb->lcd_clear_display();
|
||||
star_display_text("Congratulations!", true);
|
||||
rb->splash(HZ*2, "Congratulations!");
|
||||
rb->lcd_update();
|
||||
|
||||
/* There is no such level as STAR_LEVEL_COUNT so it can't be the
|
||||
|
@ -999,6 +976,45 @@ static int star_run_game(int current_level)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Display help text.
|
||||
*/
|
||||
static bool star_help(void)
|
||||
{
|
||||
int button;
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char* help_text[] = {
|
||||
"Star", "", "Aim", "",
|
||||
"Take", "all", "the", "stars", "to", "go", "to", "the", "next", "level.",
|
||||
"You", "can", "toggle", "control", "with", "the", "block", "to", "use",
|
||||
"it", "as", "a", "mobile", "wall.", "The", "block", "cannot", "take",
|
||||
"stars.", "", "",
|
||||
"Controls", "",
|
||||
STAR_TOGGLE_CONTROL_NAME":", "Toggle", "Control", "",
|
||||
STAR_QUIT_NAME":", "", "Exit", "",
|
||||
STAR_LEVEL_DOWN_NAME":", "Prev.", "level", "",
|
||||
STAR_LEVEL_REPEAT_NAME":", "Reset", "level", "",
|
||||
STAR_LEVEL_UP_NAME":", "Next", "level"
|
||||
};
|
||||
static struct style_text formation[]={
|
||||
{ 0, TEXT_CENTER|TEXT_UNDERLINE },
|
||||
{ 2, C_RED },
|
||||
{ 35, C_RED },
|
||||
{ -1, 0 }
|
||||
};
|
||||
|
||||
if (display_text(WORDS, help_text, formation, NULL))
|
||||
return true;
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
|
||||
return true;
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Display the choice menu.
|
||||
*/
|
||||
|
@ -1010,7 +1026,7 @@ static int star_menu(void)
|
|||
rb->lcd_getstringsize("a", &char_width, &char_height);
|
||||
|
||||
MENUITEM_STRINGLIST(menu,"Star Menu",NULL,"Play","Choose Level",
|
||||
"Information","Keys","Quit");
|
||||
"Help", "Quit");
|
||||
|
||||
while(!menu_quit)
|
||||
{
|
||||
|
@ -1024,80 +1040,8 @@ static int star_menu(void)
|
|||
NULL, 1, 1, STAR_LEVEL_COUNT, NULL );
|
||||
break;
|
||||
case 2:
|
||||
star_display_text(
|
||||
"INFO\n\n"
|
||||
"Take all the stars to go to the next level. "
|
||||
"You can toggle control with the block to "
|
||||
"use it as a mobile wall. The block cannot "
|
||||
"take stars.", true);
|
||||
break;
|
||||
case 3:
|
||||
#if CONFIG_KEYPAD == RECORDER_PAD
|
||||
star_display_text("KEYS\n\n"
|
||||
"[ON] Toggle Ctl.\n"
|
||||
"[OFF] Exit\n"
|
||||
"[F1] Prev. level\n"
|
||||
"[F2] Reset level\n"
|
||||
"[F3] Next level", true);
|
||||
#elif CONFIG_KEYPAD == ONDIO_PAD
|
||||
star_display_text("KEYS\n\n"
|
||||
"[MODE] Toggle Ctl\n"
|
||||
"[OFF] Exit\n"
|
||||
"[M <] Prev. level\n"
|
||||
"[M ^] Reset level\n"
|
||||
"[M >] Next level", true);
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||
star_display_text("KEYS\n\n"
|
||||
"[MODE/NAVI] Toggle Ctrl\n"
|
||||
"[OFF] Exit\n"
|
||||
"[ON + LEFT] Prev. level\n"
|
||||
"[ON + NAVI] Reset level\n"
|
||||
"[ON + RIGHT] Next level", true);
|
||||
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \
|
||||
(CONFIG_KEYPAD == IPOD_1G2G_PAD)
|
||||
star_display_text("KEYS\n\n"
|
||||
"[SELECT] Toggle Ctl\n"
|
||||
"[S + MENU] Exit\n"
|
||||
"[S <] Prev. level\n"
|
||||
"[S + PLAY] Reset level\n"
|
||||
"[S >] Next level", true);
|
||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||
star_display_text("KEYS\n\n"
|
||||
"[SELECT] Toggle Ctl\n"
|
||||
"[POWER] Exit\n"
|
||||
"[REC..] Prev. level\n"
|
||||
"[PLAY] Reset level\n"
|
||||
"[REC] Next level", true);
|
||||
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
||||
star_display_text("KEYS\n\n"
|
||||
"[SELECT] Toggle Control\n"
|
||||
"[POWER] Exit\n"
|
||||
"[VOL DOWN] Prev. level\n"
|
||||
"[A] Reset level\n"
|
||||
"[VOL UP] Next level", true);
|
||||
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
||||
star_display_text("KEYS\n\n"
|
||||
"[REW] Toggle Ctl\n"
|
||||
"[POWER] Exit\n"
|
||||
"[PLAY+DOWN] Prev. level\n"
|
||||
"[PLAY+RIGHT] Reset level\n"
|
||||
"[PLAY+UP] Next level", true);
|
||||
#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
|
||||
star_display_text("KEYS\n\n"
|
||||
"[SELECT] Toggle Control\n"
|
||||
"[BACK] Exit\n"
|
||||
"[VOL DOWN] Prev. level\n"
|
||||
"[MENU] Reset level\n"
|
||||
"[VOL UP] Next level", true);
|
||||
#endif
|
||||
#ifdef HAVE_TOUCHSCREEN
|
||||
star_display_text("KEYS\n\n"
|
||||
STAR_TOGGLE_CONTROL_NAME " Toggle Control\n"
|
||||
STAR_QUIT_NAME " Exit\n"
|
||||
STAR_LEVEL_DOWN_NAME " Prev. level\n"
|
||||
STAR_LEVEL_REPEAT_NAME " Reset level\n"
|
||||
STAR_LEVEL_UP_NAME " Next level", true);
|
||||
#endif
|
||||
if(star_help())
|
||||
usb_detected = true;
|
||||
break;
|
||||
default:
|
||||
menu_quit = true;
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
****************************************************************************/
|
||||
#include "plugin.h"
|
||||
#include "lib/playback_control.h"
|
||||
#include "lib/display_text.h"
|
||||
PLUGIN_HEADER
|
||||
|
||||
extern const fb_data superdom_boarditems[];
|
||||
|
@ -557,10 +558,8 @@ int settings_menu_function(void) {
|
|||
|
||||
static int do_help(void) {
|
||||
int button;
|
||||
int y = MARGIN, space_w, width, height;
|
||||
unsigned short x = MARGIN, i = 0;
|
||||
#define WORDS (sizeof instructions / sizeof (char*))
|
||||
static char* instructions[] = {
|
||||
#define WORDS (sizeof help_text / sizeof (char*))
|
||||
static char* help_text[] = {
|
||||
"Super", "domination", "is", "a", "turn", "based", "strategy", "game,",
|
||||
"where", "the", "aim", "is", "to", "overpower", "the", "computer",
|
||||
"player", "by", "taking", "their", "territory.", "",
|
||||
|
@ -572,49 +571,17 @@ static int do_help(void) {
|
|||
"the", "ownership", "of", "adjacent", "tiles,", "and", "the", "type",
|
||||
"and", "number", "of", "troops", "on", "them.",
|
||||
};
|
||||
rb->lcd_clear_display();
|
||||
rb->lcd_getstringsize(" ", &space_w, &height);
|
||||
for (i = 0; i < WORDS; i++) {
|
||||
rb->lcd_getstringsize(instructions[i], &width, NULL);
|
||||
/* Skip to next line if the current one can't fit the word */
|
||||
if (x + width > LCD_WIDTH - MARGIN) {
|
||||
x = MARGIN;
|
||||
y += height;
|
||||
}
|
||||
/* .. or if the word is the empty string */
|
||||
if (rb->strcmp(instructions[i], "") == 0) {
|
||||
x = MARGIN;
|
||||
y += height;
|
||||
continue;
|
||||
}
|
||||
/* We filled the screen */
|
||||
if (y + height > LCD_HEIGHT - MARGIN) {
|
||||
y = MARGIN;
|
||||
rb->lcd_update();
|
||||
|
||||
if (display_text(WORDS, help_text, NULL, NULL))
|
||||
return PLUGIN_USB_CONNECTED;
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
if (button == SYS_USB_CONNECTED) {
|
||||
if ( rb->default_event_handler( button ) == SYS_USB_CONNECTED )
|
||||
return PLUGIN_USB_CONNECTED;
|
||||
}
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
|
||||
|
||||
rb->lcd_clear_display();
|
||||
}
|
||||
rb->lcd_putsxy(x, y, instructions[i]);
|
||||
x += width + space_w;
|
||||
}
|
||||
rb->lcd_update();
|
||||
do {
|
||||
button = rb->button_get(true);
|
||||
if (button == SYS_USB_CONNECTED) {
|
||||
return PLUGIN_USB_CONNECTED;
|
||||
}
|
||||
} while( ( button == BUTTON_NONE )
|
||||
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
|
||||
|
||||
return 0;
|
||||
return PLUGIN_OK;
|
||||
}
|
||||
|
||||
int menu(void) {
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue