* General Public License for more details.
*/
-#include <stdio.h>
-#include <string.h>
-#include <math.h>
-#include <assert.h>
-
-#include "level.h"
#include "levels.h"
-#include "game.h"
-#include "demo.h"
-#include "audio.h"
-#include "config.h"
-#include "set.h"
/*---------------------------------------------------------------------------*/
-/* The level currently playing */
+/* Currently playing level. */
static struct level_game current_level_game;
-/*---------------------------------------------------------------------------*/
-
-int level_replay(const char *filename)
-{
- return demo_replay_init(filename, ¤t_level_game);
-}
-
-int level_play_go(void)
-/* Start to play the current level */
-{
- struct level_game *lg = ¤t_level_game;
- const struct level *l = lg->level;
- int mode = lg->mode;
-
- assert(l != NULL);
-
- lg->goal = (mode == MODE_PRACTICE) ? 0 : l->goal;
- lg->time = (mode == MODE_PRACTICE) ? 0 : l->time;
-
- /* clear other fields */
- lg->state = GAME_NONE;
- lg->coins = 0;
- lg->timer = lg->time;
- lg->coin_rank = lg->goal_rank = lg->time_rank =
- lg->score_rank = lg->times_rank = 3;
- lg->win = lg->dead = lg->unlock = 0;
- lg->next_level = NULL;
-
- return demo_play_init(USER_REPLAY_FILE, l, lg);
-}
-
-/* Prepare to play a level sequence from the `i'th level */
-
-void level_play(const struct level *l, int m)
-{
- struct level_game *lg = ¤t_level_game;
-
- memset(lg, 0, sizeof (struct level_game));
-
- lg->mode = m;
- lg->level = l;
- lg->balls = 3;
-}
-
-/*---------------------------------------------------------------------------*/
-
-const struct level_game *curr_lg(void)
+struct level_game *curr_lg(void)
{
return ¤t_level_game;
}
-int count_extra_balls(int old_score, int coins)
-{
- int modulo = old_score % 100;
- int sum = modulo + coins;
- return sum / 100;
-}
-
-/* Stop the current playing level */
-
-void level_stop(int state, int state_value, int clock, int coins)
-{
- struct level_game *lg = ¤t_level_game;
- int mode = lg->mode;
- int timer = (mode == MODE_PRACTICE ||
- mode == MODE_SINGLE) ? clock : lg->time - clock;
-
- lg->state = state;
- lg->coins = coins;
- lg->timer = timer;
- lg->state_value = state_value;
-
- /* Performs challenge mode operations */
- if (mode == MODE_CHALLENGE)
- {
- /* sum time */
- lg->times += timer;
-
- /* sum coins an earn extra balls */
- if (state == GAME_GOAL || state == GAME_SPEC || lg->level->is_bonus)
- {
- lg->balls += count_extra_balls(lg->score, coins);
- lg->score += coins;
- }
-
- /* lose ball and game */
- else
- {
- lg->dead = (lg->balls <= 0);
- lg->balls--;
- }
- }
-
- /* Update high-scores and next level */
- set_finish_level(lg, config_simple_get_s(CONFIG_PLAYER));
-
- /* stop demo recording */
- demo_play_stop(lg);
-}
-
-void level_next(void)
-{
- struct level_game *lg = ¤t_level_game;
- lg->level = lg->next_level;
-}
-
-void level_update_player_name(void)
-{
- score_change_name(¤t_level_game, config_simple_get_s(CONFIG_PLAYER));
-}
-
/*---------------------------------------------------------------------------*/
-