forked from len0rd/rockbox
Use a struct for the necessary status variables for rockblox. Will make dumping the status easier for the upcoming resume addition.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@20966 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
ba5618a253
commit
732ef1e157
1 changed files with 96 additions and 69 deletions
|
|
@ -586,11 +586,24 @@ extern const fb_data rockblox_background[];
|
||||||
% %%% %
|
% %%% %
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static bool gameover = false;
|
|
||||||
/* c=current f=figure o=orientation n=next */
|
/* c=current f=figure o=orientation n=next */
|
||||||
static int lines = 0, level = 0, score = 0, cx, cy, cf, co, nf;
|
static struct _rockblox_status
|
||||||
static short board[BOARD_HEIGHT][BOARD_WIDTH]; /* 20 rows of 10 blocks */
|
{
|
||||||
|
int gameover;
|
||||||
|
int lines;
|
||||||
|
int level;
|
||||||
|
int score;
|
||||||
|
int cx;
|
||||||
|
int cy;
|
||||||
|
int cf;
|
||||||
|
int co;
|
||||||
|
int nf;
|
||||||
|
short board[BOARD_HEIGHT][BOARD_WIDTH]; /* 20 rows of 10 blocks */
|
||||||
|
} rockblox_status;
|
||||||
|
|
||||||
|
/* prototypes */
|
||||||
|
static void draw_next_block(void);
|
||||||
|
static void new_block(void);
|
||||||
|
|
||||||
#ifdef HAVE_SCROLLWHEEL
|
#ifdef HAVE_SCROLLWHEEL
|
||||||
int wheel_events = 0, last_wheel_event = 0;
|
int wheel_events = 0, last_wheel_event = 0;
|
||||||
|
|
@ -705,6 +718,7 @@ figures[BLOCKS_NUM] = {
|
||||||
/* Rockbox File System only supports full filenames inc dir */
|
/* Rockbox File System only supports full filenames inc dir */
|
||||||
#define HIGH_SCORE PLUGIN_GAMES_DIR "/rockblox.score"
|
#define HIGH_SCORE PLUGIN_GAMES_DIR "/rockblox.score"
|
||||||
#define MAX_HIGH_SCORES 5
|
#define MAX_HIGH_SCORES 5
|
||||||
|
|
||||||
/* Default High Scores... */
|
/* Default High Scores... */
|
||||||
struct highscore Highest[MAX_HIGH_SCORES];
|
struct highscore Highest[MAX_HIGH_SCORES];
|
||||||
|
|
||||||
|
|
@ -720,7 +734,7 @@ static void init_board (void)
|
||||||
int i, j;
|
int i, j;
|
||||||
for (i = 0; i < BOARD_WIDTH; i++)
|
for (i = 0; i < BOARD_WIDTH; i++)
|
||||||
for (j = 0; j < BOARD_HEIGHT; j++)
|
for (j = 0; j < BOARD_HEIGHT; j++)
|
||||||
board[j][i] = EMPTY_BLOCK;
|
rockblox_status.board[j][i] = EMPTY_BLOCK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* show the score, level and lines */
|
/* show the score, level and lines */
|
||||||
|
|
@ -733,16 +747,17 @@ static void show_details (void)
|
||||||
rb->lcd_set_foreground (LCD_BLACK);
|
rb->lcd_set_foreground (LCD_BLACK);
|
||||||
rb->lcd_set_background (LCD_WHITE);
|
rb->lcd_set_background (LCD_WHITE);
|
||||||
#endif
|
#endif
|
||||||
rb->snprintf (str, sizeof (str), "%d", score);
|
rb->snprintf (str, sizeof (str), "%d", rockblox_status.score);
|
||||||
rb->lcd_putsxy (LABEL_X, SCORE_Y, str);
|
rb->lcd_putsxy (LABEL_X, SCORE_Y, str);
|
||||||
rb->snprintf (str, sizeof (str), "%d", level);
|
rb->snprintf (str, sizeof (str), "%d", rockblox_status.level);
|
||||||
rb->lcd_putsxy (LEVEL_X, LEVEL_Y, str);
|
rb->lcd_putsxy (LEVEL_X, LEVEL_Y, str);
|
||||||
rb->snprintf (str, sizeof (str), "%d", lines);
|
rb->snprintf (str, sizeof (str), "%d", rockblox_status.lines);
|
||||||
rb->lcd_putsxy (LINES_X, LINES_Y, str);
|
rb->lcd_putsxy (LINES_X, LINES_Y, str);
|
||||||
#else /* HAVE_LCD_CHARCELLS */
|
#else /* HAVE_LCD_CHARCELLS */
|
||||||
rb->snprintf (str, sizeof (str), "L%d/%d", level, lines);
|
rb->snprintf (str, sizeof (str), "L%d/%d", rockblox_status.level,
|
||||||
|
rockblox_status.lines);
|
||||||
rb->lcd_puts (5, 0, str);
|
rb->lcd_puts (5, 0, str);
|
||||||
rb->snprintf (str, sizeof (str), "S%d", score);
|
rb->snprintf (str, sizeof (str), "S%d", rockblox_status.score);
|
||||||
rb->lcd_puts (5, 1, str);
|
rb->lcd_puts (5, 1, str);
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
@ -755,7 +770,7 @@ static void show_highscores (void)
|
||||||
|
|
||||||
for (i = MAX_HIGH_SCORES-1; i>=0; i--)
|
for (i = MAX_HIGH_SCORES-1; i>=0; i--)
|
||||||
{
|
{
|
||||||
rb->snprintf (str, sizeof (str), "%06d" _SPACE "L%1d", Highest[i].score, Highest[i].level);
|
rb->snprintf (str, sizeof (str), "%06d" _SPACE "L%1d",Highest[i].score, Highest[i].level);
|
||||||
rb->lcd_putsxy (HIGH_LABEL_X, HIGH_SCORE_Y + (10 * ((MAX_HIGH_SCORES-1) - i)), str);
|
rb->lcd_putsxy (HIGH_LABEL_X, HIGH_SCORE_Y + (10 * ((MAX_HIGH_SCORES-1) - i)), str);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -763,13 +778,15 @@ static void show_highscores (void)
|
||||||
|
|
||||||
static void init_rockblox (void)
|
static void init_rockblox (void)
|
||||||
{
|
{
|
||||||
highscore_update(score, level, Highest, MAX_HIGH_SCORES);
|
highscore_update(rockblox_status.score, rockblox_status.level, Highest,
|
||||||
|
MAX_HIGH_SCORES);
|
||||||
|
|
||||||
|
rockblox_status.level = 1;
|
||||||
|
rockblox_status.lines = 0;
|
||||||
|
rockblox_status.score = 0;
|
||||||
|
rockblox_status.nf = t_rand (BLOCKS_NUM);
|
||||||
|
rockblox_status.gameover = false;
|
||||||
|
|
||||||
level = 1;
|
|
||||||
lines = 0;
|
|
||||||
score = 0;
|
|
||||||
gameover = false;
|
|
||||||
nf = t_rand (BLOCKS_NUM);
|
|
||||||
init_board ();
|
init_board ();
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
rb->lcd_bitmap (rockblox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT);
|
rb->lcd_bitmap (rockblox_background, 0, 0, LCD_WIDTH, LCD_HEIGHT);
|
||||||
|
|
@ -849,7 +866,7 @@ static void refresh_board (void)
|
||||||
|
|
||||||
for (i = 0; i < BOARD_WIDTH; i++)
|
for (i = 0; i < BOARD_WIDTH; i++)
|
||||||
for (j = 0; j < BOARD_HEIGHT; j++) {
|
for (j = 0; j < BOARD_HEIGHT; j++) {
|
||||||
block = board[j][i];
|
block = rockblox_status.board[j][i];
|
||||||
if (block != EMPTY_BLOCK) {
|
if (block != EMPTY_BLOCK) {
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
|
|
@ -886,17 +903,21 @@ static void refresh_board (void)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
x = getRelativeX (cf, i, co) + cx;
|
x = getRelativeX (rockblox_status.cf, i, rockblox_status.co)
|
||||||
y = getRelativeY (cf, i, co) + cy;
|
+ rockblox_status.cx;
|
||||||
|
y = getRelativeY (rockblox_status.cf, i, rockblox_status.co)
|
||||||
|
+ rockblox_status.cy;
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (figures[cf].color[1]); /* middle drawing */
|
/* middle drawing */
|
||||||
|
rb->lcd_set_foreground (figures[rockblox_status.cf].color[1]);
|
||||||
#endif
|
#endif
|
||||||
rb->lcd_fillrect (BOARD_X + x * BLOCK_WIDTH,
|
rb->lcd_fillrect (BOARD_X + x * BLOCK_WIDTH,
|
||||||
BOARD_Y + y * BLOCK_HEIGHT,
|
BOARD_Y + y * BLOCK_HEIGHT,
|
||||||
BLOCK_WIDTH, BLOCK_HEIGHT);
|
BLOCK_WIDTH, BLOCK_HEIGHT);
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (figures[cf].color[0]); /* light drawing */
|
/* light drawing */
|
||||||
|
rb->lcd_set_foreground (figures[rockblox_status.cf].color[0]);
|
||||||
#endif
|
#endif
|
||||||
rb->lcd_vline (BOARD_X + x * BLOCK_WIDTH, BOARD_Y + y * BLOCK_HEIGHT,
|
rb->lcd_vline (BOARD_X + x * BLOCK_WIDTH, BOARD_Y + y * BLOCK_HEIGHT,
|
||||||
BOARD_Y + (y + 1) * BLOCK_HEIGHT - 2);
|
BOARD_Y + (y + 1) * BLOCK_HEIGHT - 2);
|
||||||
|
|
@ -904,7 +925,8 @@ static void refresh_board (void)
|
||||||
BOARD_X + (x + 1) * BLOCK_WIDTH - 2,
|
BOARD_X + (x + 1) * BLOCK_WIDTH - 2,
|
||||||
BOARD_Y + y * BLOCK_HEIGHT);
|
BOARD_Y + y * BLOCK_HEIGHT);
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (figures[cf].color[2]); /* shadow drawing */
|
/* shadow drawing */
|
||||||
|
rb->lcd_set_foreground (figures[rockblox_status.cf].color[2]);
|
||||||
#endif
|
#endif
|
||||||
rb->lcd_vline (BOARD_X + (x + 1) * BLOCK_WIDTH - 1,
|
rb->lcd_vline (BOARD_X + (x + 1) * BLOCK_WIDTH - 1,
|
||||||
BOARD_Y + y * BLOCK_HEIGHT + 1,
|
BOARD_Y + y * BLOCK_HEIGHT + 1,
|
||||||
|
|
@ -923,10 +945,11 @@ static bool canMoveTo (int x, int y, int newOrientation)
|
||||||
{
|
{
|
||||||
int i, rx, ry;
|
int i, rx, ry;
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
ry = getRelativeY (cf, i, newOrientation) + y;
|
ry = getRelativeY (rockblox_status.cf, i, newOrientation) + y;
|
||||||
rx = getRelativeX (cf, i, newOrientation) + x;
|
rx = getRelativeX (rockblox_status.cf, i, newOrientation) + x;
|
||||||
if ((rx < 0 || rx >= BOARD_WIDTH) ||
|
if ((rx < 0 || rx >= BOARD_WIDTH) ||
|
||||||
(ry < 0 || ry >= BOARD_HEIGHT) || (board[ry][rx] != EMPTY_BLOCK))
|
(ry < 0 || ry >= BOARD_HEIGHT) ||
|
||||||
|
(rockblox_status.board[ry][rx] != EMPTY_BLOCK))
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|
@ -967,17 +990,17 @@ static void draw_next_block (void)
|
||||||
|
|
||||||
/* draw the figure */
|
/* draw the figure */
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
rx = getRelativeX (nf, i, 0) + 2;
|
rx = getRelativeX (rockblox_status.nf, i, 0) + 2;
|
||||||
ry = getRelativeY (nf, i, 0) + 2;
|
ry = getRelativeY (rockblox_status.nf, i, 0) + 2;
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifdef HAVE_LCD_BITMAP
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (figures[nf].color[1]); /* middle drawing */
|
rb->lcd_set_foreground (figures[rockblox_status.nf].color[1]); /* middle drawing */
|
||||||
#endif
|
#endif
|
||||||
rb->lcd_fillrect (PREVIEW_X + rx * BLOCK_WIDTH,
|
rb->lcd_fillrect (PREVIEW_X + rx * BLOCK_WIDTH,
|
||||||
PREVIEW_Y + ry * BLOCK_HEIGHT,
|
PREVIEW_Y + ry * BLOCK_HEIGHT,
|
||||||
BLOCK_WIDTH, BLOCK_HEIGHT);
|
BLOCK_WIDTH, BLOCK_HEIGHT);
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (figures[nf].color[0]); /* light drawing */
|
rb->lcd_set_foreground (figures[rockblox_status.nf].color[0]); /* light drawing */
|
||||||
#endif
|
#endif
|
||||||
rb->lcd_vline (PREVIEW_X + rx * BLOCK_WIDTH,
|
rb->lcd_vline (PREVIEW_X + rx * BLOCK_WIDTH,
|
||||||
PREVIEW_Y + ry * BLOCK_HEIGHT,
|
PREVIEW_Y + ry * BLOCK_HEIGHT,
|
||||||
|
|
@ -986,7 +1009,7 @@ static void draw_next_block (void)
|
||||||
PREVIEW_X + (rx + 1) * BLOCK_WIDTH - 2,
|
PREVIEW_X + (rx + 1) * BLOCK_WIDTH - 2,
|
||||||
PREVIEW_Y + ry * BLOCK_HEIGHT);
|
PREVIEW_Y + ry * BLOCK_HEIGHT);
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (figures[nf].color[2]); /* shadow drawing */
|
rb->lcd_set_foreground (figures[rockblox_status.nf].color[2]); /* shadow drawing */
|
||||||
#endif
|
#endif
|
||||||
rb->lcd_vline (PREVIEW_X + (rx + 1) * BLOCK_WIDTH - 1,
|
rb->lcd_vline (PREVIEW_X + (rx + 1) * BLOCK_WIDTH - 1,
|
||||||
PREVIEW_Y + ry * BLOCK_HEIGHT + 1,
|
PREVIEW_Y + ry * BLOCK_HEIGHT + 1,
|
||||||
|
|
@ -1004,40 +1027,47 @@ static void draw_next_block (void)
|
||||||
/* move the block to a relative location */
|
/* move the block to a relative location */
|
||||||
static void move_block (int x, int y, int o)
|
static void move_block (int x, int y, int o)
|
||||||
{
|
{
|
||||||
if (canMoveTo (cx + x, cy + y, o)) {
|
if (canMoveTo (rockblox_status.cx + x, rockblox_status.cy + y, o)) {
|
||||||
cy += y;
|
rockblox_status.cy += y;
|
||||||
cx += x;
|
rockblox_status.cx += x;
|
||||||
co = o;
|
rockblox_status.co = o;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* try to add a new block to play with (return true if gameover) */
|
/* try to add a new block to play with (return true if gameover) */
|
||||||
static void new_block (void)
|
static void new_block (void)
|
||||||
{
|
{
|
||||||
cy = 1;
|
rockblox_status.cy = 1;
|
||||||
cx = 5;
|
rockblox_status.cx = 5;
|
||||||
cf = nf;
|
rockblox_status.cf = rockblox_status.nf;
|
||||||
co = 0; /* start at the same orientation all time */
|
rockblox_status.co = 0; /* start at the same orientation all time */
|
||||||
nf = t_rand (BLOCKS_NUM);
|
rockblox_status.nf = t_rand (BLOCKS_NUM);
|
||||||
gameover = !canMoveTo (cx, cy, co);
|
rockblox_status.gameover = !canMoveTo (rockblox_status.cx,
|
||||||
|
rockblox_status.cy, rockblox_status.co);
|
||||||
|
|
||||||
draw_next_block ();
|
draw_next_block ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* check for filled lines and do what necessary */
|
/* check for filled rockblox_status.lines and do what necessary */
|
||||||
static int check_lines (void)
|
static int check_lines (void)
|
||||||
|
|
||||||
{
|
{
|
||||||
int i, j, y;
|
int i, j, y;
|
||||||
int rockblox = 0;
|
int rockblox = 0;
|
||||||
|
|
||||||
for (j = 0; j < BOARD_HEIGHT; j++) {
|
for (j = 0; j < BOARD_HEIGHT; j++) {
|
||||||
for (i = 0; ((i < BOARD_WIDTH) && (board[j][i] != EMPTY_BLOCK)); i++);
|
for (i = 0; ((i < BOARD_WIDTH) &&
|
||||||
|
(rockblox_status.board[j][i] != EMPTY_BLOCK)); i++);
|
||||||
if (i == BOARD_WIDTH) { /* woo hoo, we have a line */
|
if (i == BOARD_WIDTH) { /* woo hoo, we have a line */
|
||||||
rockblox++;
|
rockblox++;
|
||||||
for (y = j; y > 0; y--)
|
for (y = j; y > 0; y--)
|
||||||
|
{
|
||||||
for (i = 0; i < BOARD_WIDTH; i++)
|
for (i = 0; i < BOARD_WIDTH; i++)
|
||||||
board[y][i] = board[y - 1][i]; /* fall line */
|
{ /* fall line */
|
||||||
|
rockblox_status.board[y][i] = rockblox_status.board[y - 1][i];
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1049,20 +1079,20 @@ static void move_down (void)
|
||||||
{
|
{
|
||||||
int l, i, rx, ry;
|
int l, i, rx, ry;
|
||||||
|
|
||||||
if (!canMoveTo (cx, cy + 1, co)) {
|
if (!canMoveTo (rockblox_status.cx, rockblox_status.cy + 1, rockblox_status.co)) {
|
||||||
/* save figure to board */
|
/* save figure to board */
|
||||||
for (i = 0; i < 4; i++) {
|
for (i = 0; i < 4; i++) {
|
||||||
rx = getRelativeX (cf, i, co) + cx;
|
rx = getRelativeX (rockblox_status.cf, i, rockblox_status.co) + rockblox_status.cx;
|
||||||
ry = getRelativeY (cf, i, co) + cy;
|
ry = getRelativeY (rockblox_status.cf, i, rockblox_status.co) + rockblox_status.cy;
|
||||||
board[ry][rx] = cf;
|
rockblox_status.board[ry][rx] = rockblox_status.cf;
|
||||||
}
|
}
|
||||||
/* check if formed some lines */
|
/* check if formed some lines */
|
||||||
l = check_lines ();
|
l = check_lines ();
|
||||||
if (l) {
|
if (l) {
|
||||||
/* the original scoring from "http://en.wikipedia.org/wiki/Rockblox" */
|
/* the original scoring from "http://en.wikipedia.org/wiki/Rockblox" */
|
||||||
score += scoring[l - 1] * level;
|
rockblox_status.score += scoring[l - 1] * rockblox_status.level;
|
||||||
lines += l;
|
rockblox_status.lines += l;
|
||||||
level = (int) lines / 10 + 1;
|
rockblox_status.level = (int) rockblox_status.lines / 10 + 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* show details */
|
/* show details */
|
||||||
|
|
@ -1071,14 +1101,14 @@ static void move_down (void)
|
||||||
/* generate a new figure */
|
/* generate a new figure */
|
||||||
new_block ();
|
new_block ();
|
||||||
} else
|
} else
|
||||||
move_block (0, 1, co);
|
move_block (0, 1, rockblox_status.co);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int rockblox_loop (void)
|
static int rockblox_loop (void)
|
||||||
{
|
{
|
||||||
int button;
|
int button;
|
||||||
int lastbutton = BUTTON_NONE;
|
int lastbutton = BUTTON_NONE;
|
||||||
long next_down_tick = *rb->current_tick + level_speed(level);
|
long next_down_tick = *rb->current_tick + level_speed(rockblox_status.level);
|
||||||
|
|
||||||
new_block ();
|
new_block ();
|
||||||
|
|
||||||
|
|
@ -1126,7 +1156,7 @@ static int rockblox_loop (void)
|
||||||
/* if it's enabled, go ahead and rotate.. */
|
/* if it's enabled, go ahead and rotate.. */
|
||||||
if(wheel_enabled)
|
if(wheel_enabled)
|
||||||
#endif
|
#endif
|
||||||
move_block (0, 0, (co + 1) % figures[cf].max_or);
|
move_block (0, 0, (rockblox_status.co + 1) % figures[rockblox_status.cf].max_or);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ROCKBLOX_ROTATE_LEFT:
|
case ROCKBLOX_ROTATE_LEFT:
|
||||||
|
|
@ -1138,29 +1168,29 @@ static int rockblox_loop (void)
|
||||||
if(wheel_enabled)
|
if(wheel_enabled)
|
||||||
#endif
|
#endif
|
||||||
move_block (0, 0,
|
move_block (0, 0,
|
||||||
(co + figures[cf].max_or -
|
(rockblox_status.co + figures[rockblox_status.cf].max_or -
|
||||||
1) % figures[cf].max_or);
|
1) % figures[rockblox_status.cf].max_or);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
#ifdef ROCKBLOX_ROTATE_RIGHT2
|
#ifdef ROCKBLOX_ROTATE_RIGHT2
|
||||||
case ROCKBLOX_ROTATE_RIGHT2:
|
case ROCKBLOX_ROTATE_RIGHT2:
|
||||||
move_block (0, 0, (co + 1) % figures[cf].max_or);
|
move_block (0, 0, (rockblox_status.co + 1) % figures[rockblox_status.cf].max_or);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
case ROCKBLOX_DOWN:
|
case ROCKBLOX_DOWN:
|
||||||
case ROCKBLOX_DOWN | BUTTON_REPEAT:
|
case ROCKBLOX_DOWN | BUTTON_REPEAT:
|
||||||
move_block (0, 1, co);
|
move_block (0, 1, rockblox_status.co);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ROCKBLOX_RIGHT:
|
case ROCKBLOX_RIGHT:
|
||||||
case ROCKBLOX_RIGHT | BUTTON_REPEAT:
|
case ROCKBLOX_RIGHT | BUTTON_REPEAT:
|
||||||
move_block (1, 0, co);
|
move_block (1, 0, rockblox_status.co);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ROCKBLOX_LEFT:
|
case ROCKBLOX_LEFT:
|
||||||
case ROCKBLOX_LEFT | BUTTON_REPEAT:
|
case ROCKBLOX_LEFT | BUTTON_REPEAT:
|
||||||
move_block (-1, 0, co);
|
move_block (-1, 0, rockblox_status.co);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case ROCKBLOX_DROP:
|
case ROCKBLOX_DROP:
|
||||||
|
|
@ -1168,8 +1198,8 @@ static int rockblox_loop (void)
|
||||||
if (lastbutton != ROCKBLOX_DROP_PRE)
|
if (lastbutton != ROCKBLOX_DROP_PRE)
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
while (canMoveTo (cx, cy + 1, co))
|
while (canMoveTo (rockblox_status.cx, rockblox_status.cy + 1, rockblox_status.co))
|
||||||
move_block (0, 1, co);
|
move_block (0, 1, rockblox_status.co);
|
||||||
break;
|
break;
|
||||||
#ifdef ROCKBLOX_RESTART
|
#ifdef ROCKBLOX_RESTART
|
||||||
case ROCKBLOX_RESTART:
|
case ROCKBLOX_RESTART:
|
||||||
|
|
@ -1215,20 +1245,19 @@ static int rockblox_loop (void)
|
||||||
|
|
||||||
if (TIME_AFTER(*rb->current_tick, next_down_tick)) {
|
if (TIME_AFTER(*rb->current_tick, next_down_tick)) {
|
||||||
move_down ();
|
move_down ();
|
||||||
next_down_tick += level_speed(level);
|
next_down_tick += level_speed(rockblox_status.level);
|
||||||
if (TIME_AFTER(*rb->current_tick, next_down_tick))
|
if (TIME_AFTER(*rb->current_tick, next_down_tick))
|
||||||
/* restart time "raster" when we had to wait longer than usual
|
/* restart time "raster" when we had to wait longer than usual
|
||||||
* (pause, game restart etc) */
|
* (pause, game restart etc) */
|
||||||
next_down_tick = *rb->current_tick + level_speed(level);
|
next_down_tick = *rb->current_tick + level_speed(rockblox_status.level);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (gameover) {
|
if (rockblox_status.gameover) {
|
||||||
#if LCD_DEPTH >= 2
|
#if LCD_DEPTH >= 2
|
||||||
rb->lcd_set_foreground (LCD_BLACK);
|
rb->lcd_set_foreground (LCD_BLACK);
|
||||||
#endif
|
#endif
|
||||||
rb->splash (HZ * 2, "Game Over");
|
rb->splash (HZ * 2, "Game Over");
|
||||||
init_rockblox ();
|
init_rockblox ();
|
||||||
new_block ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
refresh_board ();
|
refresh_board ();
|
||||||
|
|
@ -1267,9 +1296,7 @@ enum plugin_status plugin_start (const void *parameter)
|
||||||
init_rockblox ();
|
init_rockblox ();
|
||||||
ret = rockblox_loop ();
|
ret = rockblox_loop ();
|
||||||
|
|
||||||
#ifdef HAVE_LCD_BITMAP
|
#ifndef HAVE_LCD_BITMAP
|
||||||
rb->lcd_setfont (FONT_UI);
|
|
||||||
#else
|
|
||||||
pgfx_release();
|
pgfx_release();
|
||||||
#endif
|
#endif
|
||||||
/* Save user's HighScore */
|
/* Save user's HighScore */
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue