1 /*
2  * Copyright 2009-2018 Peter Kosyh <p.kosyh at gmail.com>
3  *
4  * Permission is hereby granted, free of charge, to any person
5  * obtaining a copy of this software and associated documentation files
6  * (the "Software"), to deal in the Software without restriction,
7  * including without limitation the rights to use, copy, modify, merge,
8  * publish, distribute, sublicense, and/or sell copies of the Software,
9  * and to permit persons to whom the Software is furnished to do so,
10  * subject to the following conditions:
11  *
12  * The above copyright notice and this permission notice shall be
13  * included in all copies or substantial portions of the Software.
14  *
15  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22  *
23  */
24 
25 #ifndef __GAME_H__
26 #define __GAME_H__
27 #include <SDL_mixer.h>
28 #include "utils.h"
29 
30 #define SND_CHANNELS MIX_CHANNELS
31 
32 #ifndef GAMES_PATH
33 #define GAMES_PATH "./games"
34 #endif
35 
36 #define HZ 		100
37 
38 extern int	game_grab_events;
39 extern int	game_wait_use;
40 extern int	game_running;
41 extern int	game_theme_changed;
42 
43 extern int	nosound_sw;
44 extern int	debug_sw;
45 extern int	fullscreen_sw;
46 extern int	hires_sw;
47 extern int	window_sw;
48 extern int	nopause_sw;
49 extern int	nocursor_sw;
50 extern int	game_own_theme; /* current game has own theme */
51 extern char	*games_sw;
52 extern char	game_cwd[PATH_MAX]; /* current game cwd */
53 extern char	*curgame_dir;
54 extern int	vsync_sw;
55 extern int	resizable_sw;
56 extern int	scale_sw;
57 extern int	standalone_sw;
58 extern char	*render_sw;
59 extern int	dpi_sw;
60 
61 extern char	*appdir(void);
62 
63 extern void	game_clear(int x, int y, int w, int h);
64 extern void	game_clear_all(void);
65 extern void	game_redraw_all(void);
66 
67 extern char	*game_local_games_path(int cr);
68 extern char	*game_local_themes_path(void);
69 extern char	*game_tmp_path(void);
70 extern int	game_theme_select(const char *name);
71 
72 extern int	game_init(const char *game);
73 extern void	game_flip(void);
74 extern int	game_loop(void);
75 extern void	game_done(int err);
76 extern char	*game_reset_name(void);
77 
78 extern int	game_load_theme(const char *path);
79 extern int	game_apply_theme(void);
80 extern int	game_use_theme(void);
81 extern void	game_release_theme(int force);
82 extern int	game_reset(void);
83 extern int	game_cfg_save(void);
84 
85 extern void 	game_music_player(void);
86 
87 extern void	game_stop_mus(int ms);
88 
89 extern int 	game_change_vol(int d, int val);
90 extern int 	game_change_hz(int hz);
91 
92 extern int 	games_lookup(const char *path);
93 extern struct game *game_lookup(const char *name);
94 
95 extern int	is_game(const char *games, const char *name);
96 extern int	games_remove(int nr);
97 extern int	games_replace(const char *path, const char *dir);
98 extern int 	games_rename(void);
99 
100 extern void 	game_res_err_msg(const char *s, int alert);
101 extern int 	game_error(void);
102 
103 extern int	game_restart(void);
104 extern int	game_select(const char *name);
105 
106 extern void	game_gfx_clip(void);
107 extern void	game_gfx_noclip(void);
108 
109 #define GAME_CMD_CLICK 1
110 #define GAME_CMD_FILE  2
111 #define GAME_CMD_NOHL  4
112 
113 extern int	game_cmd(char *cmd, int flags);
114 
115 extern void	game_menu(int nr); /* select and show menu */
116 extern int	game_menu_box(int show, const char *txt); /* show menu */
117 extern int	game_menu_box_wh(const char *txt, int *w, int *h);
118 extern int	game_menu_box_width(int show, const char *txt, int width);
119 
120 extern void mouse_reset(int hl);
121 extern int mouse_restore(void);
122 
123 extern int	game_load(int nr);
124 extern int	game_save(int nr);
125 extern int	game_saves_enabled(void);
126 
127 extern char 	*game_cfg_path(void);
128 extern char 	*game_save_path(int rc, int nr);
129 
130 extern char 	*game_locale(void);
131 
132 extern int	game_freezed(void);
133 
134 extern int	game_paused(void);
135 
136 extern char	*open_file_dialog(void);
137 
138 extern int	game_from_disk(void);
139 
140 extern int	game_pict_modify(img_t p);
141 extern int	game_bg_modify(img_t p);
142 
143 extern int game_pict_coord(int *x, int *y, int *w, int *h);
144 extern void menu_toggle(int menu);
145 extern int menu_visible(void);
146 extern void game_channel_finished(int channel);
147 
148 extern void sound_play_click(void);
149 extern void *sound_get(const char *fname);
150 extern void sound_put(void *sn);
151 
152 extern int game_tag_valid(const char *p);
153 
154 void game_gfx_commit(int sync);
155 
156 #define CURSOR_CLEAR -1
157 #define CURSOR_OFF    0
158 #define CURSOR_ON     1
159 #define CURSOR_DRAW   2
160 
161 extern void 	game_cursor(int on); /* must be called with -1 before gfx change and 1 after, 2 - not update */
162 extern int game_cursor_show;
163 
164 struct game {
165 	char *path;
166 	char *name;
167 	char *author;
168 	char *version;
169 	char *info;
170 	char *dir;
171 	char *direction;
172 /*	char *api; */
173 	int idf;
174 };
175 
176 extern struct	game *games;
177 extern int	games_nr;
178 
179 extern unsigned long timer_counter;
180 #endif
181