#include "glext.h"
#include "config.h"
#include "image.h"
+#include "text.h"
#include "set.h"
#include "game.h"
if (!res && errno != ENOENT)
{
fprintf(stderr,
- _("Error while loading user high-score file '%s': %s\n"),
- fn, errno ? strerror(errno) : _("Incorrect format"));
+ L_("Error while loading user high-score file '%s': %s\n"),
+ fn, errno ? strerror(errno) : L_("Incorrect format"));
}
}
if (!fin)
{
- fprintf(stderr, _("Cannot load the set file '%s': %s\n"),
+ fprintf(stderr, L_("Cannot load the set file '%s': %s\n"),
filename, strerror(errno));
return 0;
}
void set_goto(int i)
{
+ set = i;
+
set_load_levels();
set_load_hs();
}
/*---------------------------------------------------------------------------*/
+/* Update the level score rank according to coins and timer. */
static int level_score_update(struct level_game *lg, const char *player)
-/* Update the level score rank according to coins and timer */
{
int timer = lg->timer;
int coins = lg->coins;
return (lg->time_rank < 3 || lg->goal_rank < 3 || lg->coin_rank < 3);
}
+/* Update the set score rank according to score and times. */
static int set_score_update(struct level_game *lg, const char *player)
-/* Update the set score rank according to score and times */
{
int timer = lg->times;
int coins = lg->score;
lg->score_rank = score_time_insert(&s->time_score, player, timer, coins);
lg->times_rank = score_time_insert(&s->coin_score, player, timer, coins);
+
return (lg->score_rank < 3 || lg->times_rank < 3);
}
-
+/* Update the player name for set and level high-score. */
void score_change_name(struct level_game *lg, const char *player)
-/* Update the player name for set and level high-score */
{
-#define UPDATE(i, x) (strncpy((x).player[(i)], player, MAXNAM))
- struct set *s = &set_v[set];
+ struct set *s = &set_v[set];
struct level *l = &level_v[lg->level->number];
- UPDATE(lg->time_rank, l->score.best_times);
- UPDATE(lg->goal_rank, l->score.unlock_goal);
- UPDATE(lg->coin_rank, l->score.most_coins);
- UPDATE(lg->score_rank, s->coin_score);
- UPDATE(lg->times_rank, s->time_score);
+
+ strncpy(l->score.best_times.player [lg->time_rank], player, MAXNAM);
+ strncpy(l->score.unlock_goal.player[lg->goal_rank], player, MAXNAM);
+ strncpy(l->score.most_coins.player [lg->coin_rank], player, MAXNAM);
+
+ strncpy(s->coin_score.player[lg->score_rank], player, MAXNAM);
+ strncpy(s->time_score.player[lg->times_rank], player, MAXNAM);
+
set_store_hs();
}
}
static struct level *next_normal_level(int i)
-/* Return the next normal level (starting for i)
- * Return NULL if there is not a such level */
{
for (i++; i < set_v[set].count; i++)
if (!level_v[i].is_bonus)
return &level_v[i];
+
return NULL;
}
+/*---------------------------------------------------------------------------*/
+
void set_finish_level(struct level_game *lg, const char *player)
-/* Inform the set that a level is finished.
- * Update next_level and score rank fields */
{
struct set *s = &set_v[set];
- int ln = lg->level->number; /* current level number */
- struct level *cl = &level_v[ln]; /* current level */
- struct level *nl = NULL; /* next level */
- int dirty = 0; /* HS should be saved? */
+ int ln = lg->level->number; /* Current level number */
+ struct level *cl = &level_v[ln]; /* Current level */
+ struct level *nl = NULL; /* Next level */
+ int dirty = 0; /* Should the score be saved? */
assert(s == cl->set);
}
/* On level completed */
- if (lg->state == GAME_GOAL)
+ if (lg->status == GAME_GOAL)
{
/* Update level scores */
dirty = level_score_update(lg, player);
}
/* On goal reached */
- if (lg->state == GAME_GOAL || lg->state == GAME_SPEC)
+ if (lg->status == GAME_GOAL)
{
/* Identify the following level */
- nl = next_level(ln + lg->state_value);
+ nl = next_level(ln);
if (nl != NULL)
{
/* skip bonuses if unlocked in non challenge mode */
if (game_init(&level_v[i], 0, 0))
{
- int shadow;
-
- if ((shadow = config_get_d(CONFIG_SHADOW)))
- config_set_d(CONFIG_SHADOW, 0);
-
/* Render the level and grab the screen. */
config_clear();
SDL_GL_SwapBuffers();
image_snap(filename);
-
- if (shadow)
- config_set_d(CONFIG_SHADOW, 1);
}
}