Change magic number of replays. (See
[neverball] / ball / level.h
index 607d1ca..6ef95a6 100644 (file)
 #ifndef LEVEL_H
 #define LEVEL_H
 
+#include "base_config.h"
+#define NSCORE  3
+
 /*---------------------------------------------------------------------------*/
 
-#define MODE_CHALLENGE 1
-#define MODE_NORMAL    2
-#define MODE_PRACTICE  3
+/* A score structure */
 
-const char *mode_to_str(int);
+struct score
+{
+    char player[NSCORE + 1][MAXNAM]; /* player name */
+    int  timer[NSCORE + 1];          /* time elapsed */
+    int  coins[NSCORE + 1];          /* coins collected */
+};
+
+void score_init_hs(struct score *, int, int);
+
+/*---------------------------------------------------------------------------*/
+
+/* A simple level */
+
+struct level
+{
+    /* Level identity */
+
+    char file[MAXSTR];    /* sol main file */
+    char name[MAXSTR];    /* the level name */
+    int  version;         /* the level version */
+    char author[MAXSTR];  /* the author */
+
+    /* Time and goal information */
+
+    int time;             /* time limit */
+    int goal;             /* coins needed */
+
+    struct score time_score;  /* "best time" score */
+    struct score goal_score;  /* "unlock goal" score */
+    struct score coin_score;  /* "most coin" score */
+
+    /* Regarding set information */
+
+    struct set *set;        /* set (NULL in single mode) */
+    int number;             /* level number in the set */
+    char numbername[3];     /* string representation of the number (eg. B1) */
+    int is_locked;          /* Is the level unplayable */
+    int is_bonus;           /* Is the level an extra-bonus level? */
+    int is_completed;       /* Is the level goal terminated? */
+    int is_last;            /* Is the level the last of the set? */
+
+    /* Other metadata (files are relative the data file) */
+
+    char message[MAXSTR]; /* intro message */
+    char back[MAXSTR];    /* sol background file */
+    char grad[MAXSTR];    /* gradiant backgound image */
+    char shot[MAXSTR];    /* screenshot image */
+    char song[MAXSTR];    /* song file */
+};
+
+int level_load(const char *, struct level *);
 
-const char *level_shot(int);
-const char *level_coin_n(int, int);
-const char *level_time_n(int, int);
-int         level_coin_c(int, int);
-int         level_time_c(int, int);
-int         level_coin_t(int, int);
-int         level_time_t(int, int);
-
-void level_init(const char *, const char *, const char *);
-void level_free(void);
-
-int  level_exists(int);
-int  level_opened(int);
-int  level_locked(int);
-int  level_extra_bonus(int i);
-int  level_extra_bonus_opened(void);
-int  level_set_completed(void);
-const char * level_number_name(int);
-
-int  curr_times_total(void);
-int  curr_coins_total(void);
-int  curr_count(void);
-int  curr_score(void);
-int  curr_coins(void);
-int  curr_balls(void);
-int  curr_level(void);
-int  curr_goal (void);
-
-int  level_replay(const char *);
-void level_play(int, int);
-int  level_play_go(void);
-void level_next(void);
-
-void level_stop(int);
-int  level_dead(void);
-int  level_last(void);
-int  level_sort(int *, int *);
-int  level_done(int *, int *);
-int  level_score(int);
-int  level_count(void);
-
-void level_name(int, const char *, int, int);
-void level_snap(int);
-void level_song(void);
-
-int level_mode(void);
-
-void level_cheat(void);
+void level_dump_info(const struct level *);
 
 /*---------------------------------------------------------------------------*/
 
+/* A level for the playing */
+
+struct level_game
+{
+    int mode;          /* game mode */
+    const struct level *level; /* the level played */
+
+    int goal;          /* coins needed */
+    int time;          /* time limit */
+
+    /* MODE_CHALLENGE only */
+    int score;         /* coin total */
+    int balls;         /* live count */
+    int times;         /* time total */
+
+    /* Once a level is finished */
+    int state;         /* state ending */
+    int coins;         /* coins collected */
+    int timer;         /* time elapsed */
+    int state_value;   /* more precision about the state: skip for goal */
+
+    /* rank = 3  => unclassed */
+    int coin_rank;     /* rank in the level high-scores */
+    int goal_rank;     /* rank in the level high-scores */
+    int time_rank;     /* rank in the level high-scores */
+    int score_rank;    /* rank in the set high-scores */
+    int times_rank;    /* rank in the set high-scores */
+
+    /* What about the game and the set? */
+    int dead;          /* Is the game over and lost? */
+    int win;           /* Is the game over and win? */
+    int unlock;        /* Is the next level newly unlocked */
+    const struct level *next_level; /* next level (NULL no next level) */
+};
+
+/*---------------------------------------------------------------------------*/
+
+#define MODE_CHALLENGE  1
+#define MODE_NORMAL     2
+#define MODE_PRACTICE   3
+#define MODE_SINGLE     4
+
+const char *mode_to_str(int);
+
+/*---------------------------------------------------------------------------*/
+
+#define GAME_NONE 0     /* No event (or aborted) */
+#define GAME_TIME 1     /* Time's up */
+#define GAME_GOAL 2    /* Goal reached */
+#define GAME_FALL 3    /* Fall out */
+#define GAME_SPEC 4    /* Special goal reached */
+
+const char *state_to_str(int);
+
 #endif