mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-16 03:27:39 -04:00
Portability enhancements - make the menu bitmap positions #defines, introduce a game loop timer (to fix the speed on all targets) and fix the menu on targets with 320x240 LCDs.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8464 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
2047f79f75
commit
553c9e2fce
3 changed files with 101 additions and 59 deletions
|
@ -18,11 +18,15 @@ sudoku_inverse.220x176x16.bmp
|
||||||
/* Brickmania */
|
/* Brickmania */
|
||||||
|
|
||||||
#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) && (LCD_DEPTH == 16)
|
#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) && (LCD_DEPTH == 16)
|
||||||
|
#if (LCD_WIDTH == 320)
|
||||||
|
brickmania_menu_bg.320x240x16.bmp
|
||||||
|
#else
|
||||||
|
brickmania_menu_bg.220x176x16.bmp
|
||||||
|
#endif
|
||||||
brickmania_ball.220x176x16.bmp
|
brickmania_ball.220x176x16.bmp
|
||||||
brickmania_bricks.220x176x16.bmp
|
brickmania_bricks.220x176x16.bmp
|
||||||
brickmania_gameover.220x176x16.bmp
|
brickmania_gameover.220x176x16.bmp
|
||||||
brickmania_help.220x176x16.bmp
|
brickmania_help.220x176x16.bmp
|
||||||
brickmania_menu_bg.220x176x16.bmp
|
|
||||||
brickmania_no_resume.220x176x16.bmp
|
brickmania_no_resume.220x176x16.bmp
|
||||||
brickmania_pads.220x176x16.bmp
|
brickmania_pads.220x176x16.bmp
|
||||||
brickmania_powerups.220x176x16.bmp
|
brickmania_powerups.220x176x16.bmp
|
||||||
|
|
BIN
apps/plugins/bitmaps/native/brickmania_menu_bg.320x240x16.bmp
Normal file
BIN
apps/plugins/bitmaps/native/brickmania_menu_bg.320x240x16.bmp
Normal file
Binary file not shown.
After Width: | Height: | Size: 225 KiB |
|
@ -22,6 +22,12 @@
|
||||||
|
|
||||||
PLUGIN_HEADER
|
PLUGIN_HEADER
|
||||||
|
|
||||||
|
/* The time (in ms) for one iteration through the game loop - decrease this
|
||||||
|
to speed up the game - note that current_tick is (currently) only accurate
|
||||||
|
to 10ms.
|
||||||
|
*/
|
||||||
|
#define CYCLETIME 30
|
||||||
|
|
||||||
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||||
|
|
||||||
#define QUIT BUTTON_OFF
|
#define QUIT BUTTON_OFF
|
||||||
|
@ -31,6 +37,10 @@ PLUGIN_HEADER
|
||||||
#define UP BUTTON_UP
|
#define UP BUTTON_UP
|
||||||
#define DOWN BUTTON_DOWN
|
#define DOWN BUTTON_DOWN
|
||||||
|
|
||||||
|
/* H100 and H300 don't have scroll events */
|
||||||
|
#define SCROLL_FWD(x) (0)
|
||||||
|
#define SCROLL_BACK(x) (0)
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == IPOD_4G_PAD)
|
#elif (CONFIG_KEYPAD == IPOD_4G_PAD)
|
||||||
|
|
||||||
#define QUIT BUTTON_MENU
|
#define QUIT BUTTON_MENU
|
||||||
|
@ -40,6 +50,9 @@ PLUGIN_HEADER
|
||||||
#define UP BUTTON_SCROLL_BACK
|
#define UP BUTTON_SCROLL_BACK
|
||||||
#define DOWN BUTTON_SCROLL_FWD
|
#define DOWN BUTTON_SCROLL_FWD
|
||||||
|
|
||||||
|
#define SCROLL_FWD(x) ((x) & BUTTON_SCROLL_FWD)
|
||||||
|
#define SCROLL_BACK(x) ((x) & BUTTON_SCROLL_BACK)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Unsupported keypad
|
#error Unsupported keypad
|
||||||
#endif
|
#endif
|
||||||
|
@ -71,6 +84,11 @@ extern const fb_data brickmania_bricks[];
|
||||||
|
|
||||||
/* TO DO: This needs adjusting correctly for larger than 220x176 LCDS */
|
/* TO DO: This needs adjusting correctly for larger than 220x176 LCDS */
|
||||||
#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176)
|
#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176)
|
||||||
|
|
||||||
|
/* Offsets for LCDS > 220x176 */
|
||||||
|
#define XOFS ((LCD_WIDTH-220)/2)
|
||||||
|
#define YOFS ((LCD_HEIGHT-176)/2)
|
||||||
|
|
||||||
#define PAD_WIDTH 40
|
#define PAD_WIDTH 40
|
||||||
#define PAD_HEIGHT 5
|
#define PAD_HEIGHT 5
|
||||||
#define PAD_POS_Y LCD_HEIGHT - 7
|
#define PAD_POS_Y LCD_HEIGHT - 7
|
||||||
|
@ -108,6 +126,18 @@ extern const fb_data brickmania_bricks[];
|
||||||
#define BMPHEIGHT_powerup 6
|
#define BMPHEIGHT_powerup 6
|
||||||
#define BMPWIDTH_powerup 10
|
#define BMPWIDTH_powerup 10
|
||||||
|
|
||||||
|
#define BMPXOFS_resume (62+XOFS)
|
||||||
|
#define BMPYOFS_resume (100+YOFS)
|
||||||
|
#define BMPXOFS_quit (93+XOFS)
|
||||||
|
#define BMPYOFS_quit (138+YOFS)
|
||||||
|
#define BMPXOFS_start (55+XOFS)
|
||||||
|
#define BMPYOFS_start (78+YOFS)
|
||||||
|
#define BMPXOFS_help (92+XOFS)
|
||||||
|
#define BMPYOFS_help (118+YOFS)
|
||||||
|
#define HIGHSCORE_XPOS (7+XOFS)
|
||||||
|
#define HIGHSCORE_YPOS (56+YOFS)
|
||||||
|
|
||||||
|
|
||||||
#else
|
#else
|
||||||
#error Unsupported LCD Size
|
#error Unsupported LCD Size
|
||||||
#endif
|
#endif
|
||||||
|
@ -498,44 +528,46 @@ int game_menu(int when)
|
||||||
int button,cur=0;
|
int button,cur=0;
|
||||||
char str[10];
|
char str[10];
|
||||||
|
|
||||||
rb->lcd_clear_display();
|
rb->lcd_bitmap(brickmania_menu_bg,0,0,LCD_WIDTH,LCD_HEIGHT);
|
||||||
rb->lcd_bitmap(brickmania_menu_bg,0,0,220,176);
|
|
||||||
while (true) {
|
while (true) {
|
||||||
for(i=0;i<MENU_LENGTH;i++) {
|
for(i=0;i<MENU_LENGTH;i++) {
|
||||||
if (cur==0)
|
if (cur==0)
|
||||||
rb->lcd_bitmap(brickmania_sel_start,55,78,
|
rb->lcd_bitmap(brickmania_sel_start,
|
||||||
|
BMPXOFS_start,BMPYOFS_start,
|
||||||
BMPWIDTH_sel_start,BMPHEIGHT_sel_start);
|
BMPWIDTH_sel_start,BMPHEIGHT_sel_start);
|
||||||
else
|
else
|
||||||
rb->lcd_bitmap(brickmania_start,55,78,
|
rb->lcd_bitmap(brickmania_start,BMPXOFS_start,BMPYOFS_start,
|
||||||
BMPWIDTH_start,BMPHEIGHT_start);
|
BMPWIDTH_start,BMPHEIGHT_start);
|
||||||
|
|
||||||
if (when==1) {
|
if (when==1) {
|
||||||
if (cur==1)
|
if (cur==1)
|
||||||
rb->lcd_bitmap(brickmania_sel_resume,62,100,
|
rb->lcd_bitmap(brickmania_sel_resume,
|
||||||
|
BMPXOFS_resume,BMPYOFS_resume,
|
||||||
BMPWIDTH_sel_resume,BMPHEIGHT_sel_resume);
|
BMPWIDTH_sel_resume,BMPHEIGHT_sel_resume);
|
||||||
else
|
else
|
||||||
rb->lcd_bitmap(brickmania_resume,62,100,
|
rb->lcd_bitmap(brickmania_resume,
|
||||||
|
BMPXOFS_resume,BMPYOFS_resume,
|
||||||
BMPWIDTH_resume,BMPHEIGHT_resume);
|
BMPWIDTH_resume,BMPHEIGHT_resume);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
rb->lcd_bitmap(brickmania_no_resume,62,100,
|
rb->lcd_bitmap(brickmania_no_resume,
|
||||||
|
BMPXOFS_resume,BMPYOFS_resume,
|
||||||
BMPWIDTH_no_resume,BMPHEIGHT_no_resume);
|
BMPWIDTH_no_resume,BMPHEIGHT_no_resume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (cur==2)
|
if (cur==2)
|
||||||
rb->lcd_bitmap(brickmania_sel_help,92,118,
|
rb->lcd_bitmap(brickmania_sel_help,BMPXOFS_help,BMPYOFS_help,
|
||||||
BMPWIDTH_sel_help,BMPHEIGHT_sel_help);
|
BMPWIDTH_sel_help,BMPHEIGHT_sel_help);
|
||||||
else
|
else
|
||||||
rb->lcd_bitmap(brickmania_help,92,118,
|
rb->lcd_bitmap(brickmania_help,BMPXOFS_help,BMPYOFS_help,
|
||||||
BMPWIDTH_help,BMPHEIGHT_help);
|
BMPWIDTH_help,BMPHEIGHT_help);
|
||||||
|
|
||||||
|
|
||||||
if (cur==3)
|
if (cur==3)
|
||||||
rb->lcd_bitmap(brickmania_sel_quit,93,138,
|
rb->lcd_bitmap(brickmania_sel_quit,BMPXOFS_quit,BMPYOFS_quit,
|
||||||
BMPWIDTH_sel_quit,BMPHEIGHT_sel_quit);
|
BMPWIDTH_sel_quit,BMPHEIGHT_sel_quit);
|
||||||
else
|
else
|
||||||
rb->lcd_bitmap(brickmania_quit,93,138,
|
rb->lcd_bitmap(brickmania_quit,BMPXOFS_quit,BMPYOFS_quit,
|
||||||
BMPWIDTH_quit,BMPHEIGHT_quit);
|
BMPWIDTH_quit,BMPHEIGHT_quit);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -543,11 +575,11 @@ int game_menu(int when)
|
||||||
rb->lcd_setfont(FONT_SYSFIXED);
|
rb->lcd_setfont(FONT_SYSFIXED);
|
||||||
rb->lcd_set_background(LCD_RGBPACK(0,0,140));
|
rb->lcd_set_background(LCD_RGBPACK(0,0,140));
|
||||||
rb->lcd_set_foreground(LCD_WHITE);
|
rb->lcd_set_foreground(LCD_WHITE);
|
||||||
rb->lcd_putsxy(7, 56, "High Score");
|
rb->lcd_putsxy(HIGHSCORE_XPOS, HIGHSCORE_YPOS, "High Score");
|
||||||
rb->snprintf(str, sizeof(str), "%d", highscore);
|
rb->snprintf(str, sizeof(str), "%d", highscore);
|
||||||
rb->lcd_getstringsize("High Score", &sw, NULL);
|
rb->lcd_getstringsize("High Score", &sw, NULL);
|
||||||
rb->lcd_getstringsize(str, &w, NULL);
|
rb->lcd_getstringsize(str, &w, NULL);
|
||||||
rb->lcd_putsxy(7+sw/2-w/2, 65, str);
|
rb->lcd_putsxy(HIGHSCORE_XPOS+sw/2-w/2, HIGHSCORE_YPOS+9, str);
|
||||||
rb->lcd_setfont(FONT_UI);
|
rb->lcd_setfont(FONT_UI);
|
||||||
|
|
||||||
rb->lcd_update();
|
rb->lcd_update();
|
||||||
|
@ -690,6 +722,7 @@ int game_loop(void){
|
||||||
int j,i,k,bricky,brickx;
|
int j,i,k,bricky,brickx;
|
||||||
char s[20];
|
char s[20];
|
||||||
int sec_count=0,num_count=10;
|
int sec_count=0,num_count=10;
|
||||||
|
int end;
|
||||||
|
|
||||||
rb->srand( *rb->current_tick );
|
rb->srand( *rb->current_tick );
|
||||||
|
|
||||||
|
@ -713,7 +746,10 @@ int game_loop(void){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
while(true) {
|
while(true) {
|
||||||
|
/* Convert CYCLETIME (in ms) to HZ */
|
||||||
|
end = *rb->current_tick + (CYCLETIME * HZ) / 1000;
|
||||||
|
|
||||||
if (life >= 0) {
|
if (life >= 0) {
|
||||||
rb->lcd_set_background(LCD_BLACK);
|
rb->lcd_set_background(LCD_BLACK);
|
||||||
rb->lcd_set_drawmode(DRMODE_SOLID);
|
rb->lcd_set_drawmode(DRMODE_SOLID);
|
||||||
|
@ -733,7 +769,7 @@ int game_loop(void){
|
||||||
rb->lcd_getstringsize(s, &sw, NULL);
|
rb->lcd_getstringsize(s, &sw, NULL);
|
||||||
rb->lcd_putsxy(LCD_WIDTH/2-2, 150, s);
|
rb->lcd_putsxy(LCD_WIDTH/2-2, 150, s);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* write life num */
|
/* write life num */
|
||||||
rb->snprintf(s, sizeof(s), "Life: %d", life);
|
rb->snprintf(s, sizeof(s), "Life: %d", life);
|
||||||
rb->lcd_putsxy(2, 2, s);
|
rb->lcd_putsxy(2, 2, s);
|
||||||
|
@ -742,7 +778,6 @@ int game_loop(void){
|
||||||
rb->lcd_getstringsize(s, &sw, NULL);
|
rb->lcd_getstringsize(s, &sw, NULL);
|
||||||
rb->lcd_putsxy(LCD_WIDTH-sw-2, 2, s);
|
rb->lcd_putsxy(LCD_WIDTH-sw-2, 2, s);
|
||||||
|
|
||||||
|
|
||||||
if (vscore<score) vscore++;
|
if (vscore<score) vscore++;
|
||||||
rb->snprintf(s, sizeof(s), "%d", vscore);
|
rb->snprintf(s, sizeof(s), "%d", vscore);
|
||||||
rb->lcd_getstringsize(s, &sw, NULL);
|
rb->lcd_getstringsize(s, &sw, NULL);
|
||||||
|
@ -1033,58 +1068,59 @@ int game_loop(void){
|
||||||
}
|
}
|
||||||
|
|
||||||
int move_button,button;
|
int move_button,button;
|
||||||
int time = 3; /* number of ticks this function will loop reading keys */
|
int button_right,button_left;
|
||||||
int start = *rb->current_tick;
|
button=rb->button_get(false);
|
||||||
int end = start + time;
|
|
||||||
button=rb->button_get_w_tmo(end - *rb->current_tick);
|
|
||||||
move_button=rb->button_status();
|
move_button=rb->button_status();
|
||||||
|
|
||||||
if ((move_button & RIGHT && flip_sides==false) || (flip_sides==true && move_button & LEFT)) {
|
button_right=((move_button & RIGHT) || (SCROLL_FWD(button)));
|
||||||
|
button_left=((move_button & LEFT) || (SCROLL_BACK(button)));
|
||||||
|
|
||||||
|
if ((button_right && flip_sides==false) || (button_left && flip_sides==true)) {
|
||||||
if (pad_pos_x+8+PAD_WIDTH > LCD_WIDTH) {
|
if (pad_pos_x+8+PAD_WIDTH > LCD_WIDTH) {
|
||||||
if (start_game==1 || on_the_pad==1) ball_pos_x+=LCD_WIDTH-pad_pos_x-PAD_WIDTH;
|
if (start_game==1 || on_the_pad==1) ball_pos_x+=LCD_WIDTH-pad_pos_x-PAD_WIDTH;
|
||||||
pad_pos_x+=LCD_WIDTH-pad_pos_x-PAD_WIDTH;
|
pad_pos_x+=LCD_WIDTH-pad_pos_x-PAD_WIDTH;
|
||||||
} else {
|
} else {
|
||||||
if ((start_game==1 || on_the_pad==1))
|
if ((start_game==1 || on_the_pad==1))
|
||||||
ball_pos_x+=8;
|
ball_pos_x+=8;
|
||||||
pad_pos_x+=8;
|
pad_pos_x+=8;
|
||||||
}
|
|
||||||
} else if ((move_button & LEFT && flip_sides==false) || (flip_sides==true && move_button & RIGHT)) {
|
|
||||||
if (pad_pos_x-8 < 0) {
|
|
||||||
if (start_game==1 || on_the_pad==1) ball_pos_x-=pad_pos_x;
|
|
||||||
pad_pos_x-=pad_pos_x;
|
|
||||||
} else {
|
|
||||||
if (start_game==1 || on_the_pad==1) ball_pos_x-=8;
|
|
||||||
pad_pos_x-=8;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
} else if ((button_left && flip_sides==false) || (button_right && flip_sides==true)) {
|
||||||
|
if (pad_pos_x-8 < 0) {
|
||||||
|
if (start_game==1 || on_the_pad==1) ball_pos_x-=pad_pos_x;
|
||||||
|
pad_pos_x-=pad_pos_x;
|
||||||
|
} else {
|
||||||
|
if (start_game==1 || on_the_pad==1) ball_pos_x-=8;
|
||||||
|
pad_pos_x-=8;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
switch(button){
|
switch(button) {
|
||||||
case SELECT:
|
case SELECT:
|
||||||
if (start_game==1 && con_game!=1 && pad_type!=1) {
|
if (start_game==1 && con_game!=1 && pad_type!=1) {
|
||||||
bally=-4;
|
bally=-4;
|
||||||
ballx=pad_pos_x+(PAD_WIDTH/2)-2>=LCD_WIDTH/2?2:-2;
|
ballx=pad_pos_x+(PAD_WIDTH/2)-2>=LCD_WIDTH/2?2:-2;
|
||||||
|
start_game =0;
|
||||||
|
} else if (pad_type==1 && on_the_pad==1) {
|
||||||
|
on_the_pad=0;
|
||||||
|
if (start_game!=1 && con_game==1) {
|
||||||
start_game =0;
|
start_game =0;
|
||||||
} else if (pad_type==1 && on_the_pad==1) {
|
|
||||||
on_the_pad=0;
|
|
||||||
if (start_game!=1 && con_game==1) {
|
|
||||||
start_game =0;
|
|
||||||
con_game=0;
|
|
||||||
}
|
|
||||||
} else if (pad_type==2 && con_game!=1) {
|
|
||||||
int tfire;
|
|
||||||
tfire=fire_space();
|
|
||||||
fire[tfire].top=PAD_POS_Y-7;
|
|
||||||
fire[tfire].left=pad_pos_x+1;
|
|
||||||
tfire=fire_space();
|
|
||||||
fire[tfire].top=PAD_POS_Y-7;
|
|
||||||
fire[tfire].left=pad_pos_x+PAD_WIDTH-1;
|
|
||||||
} else if (con_game==1 && start_game!=1) {
|
|
||||||
ballx=x;
|
|
||||||
bally=y;
|
|
||||||
con_game=0;
|
con_game=0;
|
||||||
}
|
}
|
||||||
break;
|
} else if (pad_type==2 && con_game!=1) {
|
||||||
|
int tfire;
|
||||||
|
tfire=fire_space();
|
||||||
|
fire[tfire].top=PAD_POS_Y-7;
|
||||||
|
fire[tfire].left=pad_pos_x+1;
|
||||||
|
tfire=fire_space();
|
||||||
|
fire[tfire].top=PAD_POS_Y-7;
|
||||||
|
fire[tfire].left=pad_pos_x+PAD_WIDTH-1;
|
||||||
|
} else if (con_game==1 && start_game!=1) {
|
||||||
|
ballx=x;
|
||||||
|
bally=y;
|
||||||
|
con_game=0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
case QUIT:
|
case QUIT:
|
||||||
switch(game_menu(1)){
|
switch(game_menu(1)){
|
||||||
case 0:
|
case 0:
|
||||||
|
@ -1140,6 +1176,8 @@ int game_loop(void){
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (end > *rb->current_tick)
|
||||||
|
rb->sleep(end-*rb->current_tick);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue