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.
23 #define GAME_INT_INVALID -100
25 /* prepare cave, gfx buffer */
26 #define GAME_INT_LOAD_CAVE -73
28 /* show description/note of cave. */
29 #define GAME_INT_SHOW_STORY -72
31 /* waiting fire button after showing the story. */
32 #define GAME_INT_SHOW_STORY_WAIT -71
34 /* start uncovering */
35 #define GAME_INT_START_UNCOVER -70
37 /* ...70 frames until full uncover... */
38 #define GAME_INT_UNCOVER_ALL -1
40 /* normal running state. */
41 #define GAME_INT_CAVE_RUNNING 0
43 /* add points for remaining time */
44 #define GAME_INT_CHECK_BONUS_TIME 1
46 /* ...2..99 = wait and do nothing, after adding time */
47 #define GAME_INT_WAIT_BEFORE_COVER 2
50 #define GAME_INT_COVER_START 100
52 /* ... 8 frames of cover animation */
53 #define GAME_INT_COVER_ALL 108
56 typedef struct _gd_game
58 GdString player_name; /* Name of player */
59 int player_score; /* Score of player */
60 int player_lives; /* Remaining lives of player */
62 GdDirection player_move;
63 boolean player_move_stick;
66 GdCave *cave; /* Copy of the cave. This is the iterated, changed (ruined...) one */
67 GdCave *original_cave; /* original cave from caveset. used to record highscore */
69 boolean out_of_window; /* will be set to true, if player is not visible in the window, and we have to wait for scrolling */
71 int cave_num; /* actual playing cave number */
72 int cave_score; /* score collected in this cave */
73 int level_num; /* actual playing level */
74 int bonus_life_flash; /* different kind of flashing, for bonus life */
76 int state_counter; /* counter used to control the game flow, rendering of caves */
78 int **last_element_buffer;
80 int **gfx_buffer; /* contains the indexes to the cells; created by *start_level, deleted by *stop_game */
85 int milliseconds_game;
86 int milliseconds_anim;
88 int replay_no_more_movements;
89 boolean show_story; /* variable to remember that the story for a particular cave was already shown. */
92 typedef enum _gd_game_state
94 GD_GAME_INVALID_STATE,
96 GD_GAME_SHOW_STORY_WAIT,
99 GD_GAME_LABELS_CHANGED,
100 GD_GAME_TIMEOUT_NOW, /* this signals the moment of time out */
101 GD_GAME_NO_MORE_LIVES,
106 GdCave *gd_create_snapshot(GdGame *gameplay);
108 void gd_game_free(GdGame *gameplay);
109 GdGame *gd_game_new(const int cave, const int level);
110 GdGame *gd_game_new_snapshot(GdCave *snapshot);
111 GdGame *gd_game_new_test(GdCave *cave, int level);
113 void play_game_func(GdGame *game, int action);
115 #endif // BD_GAMEPLAY_H