2 * Copyright (c) 2007, 2008, 2009, Czirkos Zoltan <cirix@fw.hu>
4 * Permission to use, copy, modify, and distribute this software for any
5 * purpose with or without fee is hereby granted, provided that the above
6 * copyright notice and this permission notice appear in all copies.
8 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
11 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
13 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
14 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
25 #define GAME_INT_INVALID -100
27 /* prepare cave, gfx buffer */
28 #define GAME_INT_LOAD_CAVE -73
30 /* show description/note of cave. */
31 #define GAME_INT_SHOW_STORY -72
33 /* waiting fire button after showing the story. */
34 #define GAME_INT_SHOW_STORY_WAIT -71
36 /* start uncovering */
37 #define GAME_INT_START_UNCOVER -70
39 /* ...70 frames until full uncover... */
40 #define GAME_INT_UNCOVER_ALL -1
42 /* normal running state. */
43 #define GAME_INT_CAVE_RUNNING 0
45 /* add points for remaining time */
46 #define GAME_INT_CHECK_BONUS_TIME 1
48 /* ...2..99 = wait and do nothing, after adding time */
49 #define GAME_INT_WAIT_BEFORE_COVER 2
52 #define GAME_INT_COVER_START 100
54 /* ... 8 frames of cover animation */
55 #define GAME_INT_COVER_ALL 108
58 typedef struct _gd_game
60 GdString player_name; /* Name of player */
61 int player_score; /* Score of player */
62 int player_lives; /* Remaining lives of player */
64 GdDirection player_move;
65 boolean player_move_stick;
68 GdCave *cave; /* Copy of the cave. This is the iterated, changed (ruined...) one */
69 GdCave *original_cave; /* original cave from caveset. used to record highscore */
71 boolean out_of_window; /* will be set to true, if player is not visible in the window, and we have to wait for scrolling */
73 int cave_num; /* actual playing cave number */
74 int cave_score; /* score collected in this cave */
75 int level_num; /* actual playing level */
76 int bonus_life_flash; /* different kind of flashing, for bonus life */
78 int state_counter; /* counter used to control the game flow, rendering of caves */
80 int **last_element_buffer;
82 int **gfx_buffer; /* contains the indexes to the cells; created by *start_level, deleted by *stop_game */
87 int milliseconds_game;
88 int milliseconds_anim;
90 int replay_no_more_movements;
91 boolean show_story; /* variable to remember that the story for a particular cave was already shown. */
94 typedef enum _gd_game_state
96 GD_GAME_INVALID_STATE,
98 GD_GAME_SHOW_STORY_WAIT,
101 GD_GAME_LABELS_CHANGED,
102 GD_GAME_TIMEOUT_NOW, /* this signals the moment of time out */
103 GD_GAME_NO_MORE_LIVES,
108 GdCave *gd_create_snapshot(GdGame *gameplay);
110 void gd_game_free(GdGame *gameplay);
111 GdGame *gd_game_new(const int cave, const int level);
112 GdGame *gd_game_new_snapshot(GdCave *snapshot);
113 GdGame *gd_game_new_test(GdCave *cave, int level);
115 void play_game_func(GdGame *game, int action);
117 #endif // BD_GAMEPLAY_H