Rev 5316 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5316 | Rev 5322 | ||
---|---|---|---|
1 | #ifndef RSGAME_H_INCLUDED |
1 | #ifndef RSGAME_H_INCLUDED |
2 | #define RSGAME_H_INCLUDED |
2 | #define RSGAME_H_INCLUDED |
3 | 3 | ||
4 | /* |
4 | /* |
5 | 5 | ||
6 | Heliothryx |
6 | Heliothryx |
7 | Game by Roman Shuvalov |
7 | Game by Roman Shuvalov |
8 | 8 | ||
9 | */ |
9 | */ |
10 | 10 | ||
11 | #ifndef RS_LINUX |
11 | #ifndef RS_LINUX |
12 | #ifndef RS_WIN32 |
12 | #ifndef RS_WIN32 |
13 | #ifndef RS_KOS |
13 | #ifndef RS_KOS |
14 | #error Please specify platform |
14 | #error Please specify platform |
15 | #endif |
15 | #endif |
16 | #endif |
16 | #endif |
17 | #endif |
17 | #endif |
18 | 18 | ||
19 | 19 | ||
20 | #include "rskos.h" |
20 | #include "rskos.h" |
21 | #include "rs/rsplatform.h" |
21 | #include "rs/rsplatform.h" |
22 | 22 | ||
23 | #include "rs/rsdebug.h" |
23 | #include "rs/rsdebug.h" |
24 | #include "rs/rsbits.h" |
24 | #include "rs/rsbits.h" |
25 | 25 | ||
26 | #include "rsgamelogic.h" |
26 | #include "rsgamelogic.h" |
27 | 27 | ||
28 | 28 | ||
29 | #include "rs/rsmx.h" |
29 | #include "rs/rsmx.h" |
30 | 30 | ||
31 | 31 | ||
32 | 32 | ||
33 | 33 | ||
34 | #define GAME_LANG_EN 0 |
34 | #define GAME_LANG_EN 0 |
35 | #define GAME_LANG_RU 1 |
35 | #define GAME_LANG_RU 1 |
36 | 36 | ||
37 | #define GAME_WIDTH 320 |
37 | #define GAME_WIDTH 320 |
38 | #define GAME_HEIGHT 180 |
38 | #define GAME_HEIGHT 180 |
39 | 39 | ||
40 | 40 | ||
41 | typedef struct { |
41 | typedef struct { |
42 | unsigned int status; |
42 | unsigned int status; |
43 | int w; |
43 | int w; |
44 | int h; |
44 | int h; |
45 | unsigned char *data; // BGRA BGRA |
45 | unsigned char *data; // BGRA BGRA |
46 | } rs_texture_t; |
46 | } rs_texture_t; |
47 | 47 | ||
48 | 48 | ||
49 | // for little-endian |
49 | // for little-endian |
50 | typedef union color_t { |
50 | typedef union color_t { |
51 | int d; // 0x44332211 (ARGB) |
51 | int d; // 0x44332211 (ARGB) |
52 | struct { |
52 | struct { |
53 | unsigned char b; // 0x11 |
53 | unsigned char b; // 0x11 |
54 | unsigned char g; // 0x22 |
54 | unsigned char g; // 0x22 |
55 | unsigned char r; // 0x33 |
55 | unsigned char r; // 0x33 |
56 | unsigned char a; // 0x44 |
56 | unsigned char a; // 0x44 |
57 | }; |
57 | }; |
58 | } color_t; |
58 | } color_t; |
59 | 59 | ||
60 | // for little-endian (ARGB) |
60 | // for little-endian (ARGB) |
61 | #define COLOR_BLACK 0xFF000000 |
61 | #define COLOR_BLACK 0xFF000000 |
62 | #define COLOR_TRANSPARENT 0x00000000 |
62 | #define COLOR_TRANSPARENT 0x00000000 |
63 | #define COLOR_DARK_RED 0xFF401000 |
63 | #define COLOR_DARK_RED 0xFF401000 |
64 | 64 | ||
65 | 65 | ||
66 | 66 | ||
67 | void texture_init(rs_texture_t *tex, int w, int h); |
67 | void texture_init(rs_texture_t *tex, int w, int h); |
68 | void texture_free(rs_texture_t *tex); |
68 | void texture_free(rs_texture_t *tex); |
69 | void texture_clear(rs_texture_t *tex, unsigned int color); |
69 | void texture_clear(rs_texture_t *tex, unsigned int color); |
70 | void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode); |
70 | void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode); |
71 | void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color); |
71 | void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color); |
72 | void texture_draw_hline(rs_texture_t *tex, int x, int y, int l, unsigned int color); |
72 | void texture_draw_hline(rs_texture_t *tex, int x, int y, int l, unsigned int color); |
73 | void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color); |
73 | void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color); |
74 | 74 | ||
75 | unsigned char clamp_byte(int value); |
75 | unsigned char clamp_byte(int value); |
76 | 76 | ||
77 | #define DRAW_MODE_REPLACE 0 |
77 | #define DRAW_MODE_REPLACE 0 |
78 | #define DRAW_MODE_ADDITIVE 1 |
78 | #define DRAW_MODE_ADDITIVE 1 |
79 | #define DRAW_MODE_ALPHA 2 |
79 | #define DRAW_MODE_ALPHA 2 |
80 | 80 | ||
81 | #define DRAW_MODE_MASK 0x0000FFFF |
81 | #define DRAW_MODE_MASK 0x0000FFFF |
82 | #define DRAW_TILED_FLAG 0x00010000 |
82 | #define DRAW_TILED_FLAG 0x00010000 |
83 | 83 | ||
84 | 84 | ||
85 | 85 | ||
86 | typedef struct { |
86 | typedef struct { |
87 | unsigned int status; |
87 | unsigned int status; |
88 | int length_samples; |
88 | int length_samples; |
89 | SNDBUF hbuf; |
89 | SNDBUF hbuf; |
90 | signed short *data; |
90 | signed short *data; |
91 | } rs_soundbuf_t; |
91 | } rs_soundbuf_t; |
92 | 92 | ||
93 | void soundbuf_init(rs_soundbuf_t *snd, int length); |
93 | void soundbuf_init(rs_soundbuf_t *snd, int length); |
94 | void soundbuf_free(rs_soundbuf_t *snd); |
94 | void soundbuf_free(rs_soundbuf_t *snd); |
95 | void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div); |
95 | void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div); |
96 | void soundbuf_sin(rs_soundbuf_t *snd, float freq); |
96 | void soundbuf_sin(rs_soundbuf_t *snd, float freq); |
97 | void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq); |
97 | void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq); |
98 | void soundbuf_play(rs_soundbuf_t *snd, int mode); |
98 | void soundbuf_play(rs_soundbuf_t *snd, int mode); |
99 | void soundbuf_loop_check(rs_soundbuf_t *snd); |
99 | void soundbuf_loop_check(rs_soundbuf_t *snd); |
100 | void soundbuf_stop(rs_soundbuf_t *snd); |
100 | void soundbuf_stop(rs_soundbuf_t *snd); |
101 | 101 | ||
102 | // Game Objects |
102 | // Game Objects |
103 | 103 | ||
104 | #define GAME_OBJS_MAX_COUNT 1024 |
104 | #define GAME_OBJS_MAX_COUNT 1024 |
105 | 105 | ||
106 | #define OBJ_PLAYER 0 |
106 | #define OBJ_PLAYER 0 |
107 | #define OBJ_BULLET 1 |
107 | #define OBJ_BULLET 1 |
108 | #define OBJ_EXPLOSION 2 |
108 | #define OBJ_EXPLOSION 2 |
109 | #define OBJ_ROCK 3 |
109 | #define OBJ_ROCK 3 |
110 | #define OBJ_MINIROCK 4 |
110 | #define OBJ_MINIROCK 4 |
111 | #define OBJ_TURRET 5 |
111 | #define OBJ_TURRET 5 |
112 | #define OBJ_RED_BULLET 6 |
112 | #define OBJ_RED_BULLET 6 |
113 | #define OBJ_HUGE_EXPLOSION 7 |
113 | #define OBJ_HUGE_EXPLOSION 7 |
114 | 114 | ||
115 | typedef struct game_obj_t { |
115 | typedef struct game_obj_t { |
116 | int obj_type; |
116 | int obj_type; |
117 | int flags; |
117 | int flags; |
118 | int tag; |
118 | int tag; |
119 | int radius; |
119 | int radius; |
120 | 120 | ||
121 | float x; |
121 | float x; |
122 | float y; |
122 | float y; |
123 | int t; |
123 | int t; |
124 | float f; |
124 | float f; |
125 | - | ||
126 | // int health; |
- | |
127 | // int reserved0; |
- | |
128 | // int reserved1; |
- | |
129 | // int reserved2; |
125 | |
130 | } game_obj_t; |
126 | } game_obj_t; |
131 | 127 | ||
132 | #define OBJ_FLAG_DESTROYED 0x01 |
128 | #define OBJ_FLAG_DESTROYED 0x01 |
133 | #define OBJ_FLAG_ENEMY 0x02 |
129 | #define OBJ_FLAG_ENEMY 0x02 |
134 | #define OBJ_FLAG_SIN 0x04 |
130 | #define OBJ_FLAG_SIN 0x04 |
135 | #define OBJ_FLAG_BOSS 0x08 // draw health-bar above |
131 | #define OBJ_FLAG_BOSS 0x08 // draw health-bar above |
136 | 132 | ||
137 | game_obj_t game_obj(int obj_type, int flags, int tag, int radius, float x, float y, int t, float f); |
133 | game_obj_t game_obj(int obj_type, int flags, int tag, int radius, float x, float y, int t, float f); |
138 | 134 | ||
139 | int game_obj_add(game_obj_t obj); |
135 | int game_obj_add(game_obj_t obj); |
140 | void game_obj_remove(int index); |
136 | void game_obj_remove(int index); |
141 | 137 | ||
142 | 138 | ||
143 | 139 | ||
144 | // Game Registry |
140 | // Game Registry |
145 | 141 | ||
146 | #define ROCKS_COUNT 8 |
142 | #define ROCKS_COUNT 8 |
147 | #define MINIROCKS_COUNT ROCKS_COUNT // must equal |
143 | #define MINIROCKS_COUNT ROCKS_COUNT // must equal |
148 | #define FONTS_COUNT 4 |
144 | #define FONTS_COUNT 4 |
149 | #define EXPLOSIONS_COUNT 8 |
145 | #define EXPLOSIONS_COUNT 8 |
150 | #define EXPLOSION_RADIUS 16 |
146 | #define EXPLOSION_RADIUS 16 |
151 | 147 | ||
152 | #define HUGE_EXPLOSIONS_COUNT 24 |
148 | #define HUGE_EXPLOSIONS_COUNT 24 |
153 | #define HUGE_EXPLOSION_RADIUS 32 |
149 | #define HUGE_EXPLOSION_RADIUS 32 |
154 | 150 | ||
155 | 151 | ||
156 | #define STATUS_MENU 0 |
152 | #define STATUS_MENU 0 |
157 | #define STATUS_PLAYING 1 |
153 | #define STATUS_PLAYING 1 |
158 | #define STATUS_PAUSED 2 |
154 | #define STATUS_PAUSED 2 |
159 | 155 | ||
160 | 156 | ||
161 | #define RS_ARROW_LEFT_MASK 0x01 |
157 | #define RS_ARROW_LEFT_MASK 0x01 |
162 | #define RS_ARROW_DOWN_MASK 0x02 |
158 | #define RS_ARROW_DOWN_MASK 0x02 |
163 | #define RS_ARROW_UP_MASK 0x04 |
159 | #define RS_ARROW_UP_MASK 0x04 |
164 | #define RS_ARROW_RIGHT_MASK 0x08 |
160 | #define RS_ARROW_RIGHT_MASK 0x08 |
165 | #define RS_ATTACK_KEY_MASK 0x10 |
161 | #define RS_ATTACK_KEY_MASK 0x10 |
166 | - | ||
167 | //#define BULLETS_COUNT 8 |
162 | |
168 | 163 | ||
169 | #define GAME_SHOOT_PERIOD 3 |
164 | #define GAME_SHOOT_PERIOD 3 |
170 | 165 | ||
171 | #define GAME_FLAG_BOSS_DESTROYED 0x01 |
166 | #define GAME_FLAG_BOSS_DESTROYED 0x01 |
172 | #define GAME_FLAG_INSTRUCTIONS_PASSED 0x02 |
167 | #define GAME_FLAG_INSTRUCTIONS_PASSED 0x02 |
173 | 168 | ||
174 | #define SOUND_EXPLOSIONS_COUNT 8 |
169 | #define SOUND_EXPLOSIONS_COUNT 8 |
175 | 170 | ||
176 | typedef struct rs_game_t { |
171 | typedef struct rs_game_t { |
177 | rs_texture_t framebuffer; |
172 | rs_texture_t framebuffer; |
178 | unsigned char *scaled_framebuffer; // 24-bit BGRBGRBGR... for direct drawing |
173 | unsigned char *scaled_framebuffer; // 24-bit BGRBGRBGR... for direct drawing |
179 | 174 | ||
180 | rs_texture_t tex; |
175 | rs_texture_t tex; |
181 | 176 | ||
182 | rs_texture_t tex_clouds; |
177 | rs_texture_t tex_clouds; |
183 | rs_texture_t tex_ground; |
178 | rs_texture_t tex_ground; |
184 | 179 | ||
185 | rs_texture_t tex_ship[4]; |
180 | rs_texture_t tex_ship[4]; |
186 | rs_texture_t tex_rocks[ROCKS_COUNT]; |
181 | rs_texture_t tex_rocks[ROCKS_COUNT]; |
187 | rs_texture_t tex_minirocks[MINIROCKS_COUNT]; |
182 | rs_texture_t tex_minirocks[MINIROCKS_COUNT]; |
188 | 183 | ||
189 | rs_texture_t tex_explosions[EXPLOSIONS_COUNT]; |
184 | rs_texture_t tex_explosions[EXPLOSIONS_COUNT]; |
190 | rs_texture_t tex_huge_explosions[HUGE_EXPLOSIONS_COUNT]; |
185 | rs_texture_t tex_huge_explosions[HUGE_EXPLOSIONS_COUNT]; |
191 | 186 | ||
192 | rs_texture_t tex_font[64*FONTS_COUNT]; |
187 | rs_texture_t tex_font[64*FONTS_COUNT]; |
193 | 188 | ||
194 | rs_texture_t tex_gui_line; |
189 | rs_texture_t tex_gui_line; |
195 | 190 | ||
196 | int bg_color; |
191 | int bg_color; |
197 | 192 | ||
198 | rs_soundbuf_t sound_shoot; |
193 | rs_soundbuf_t sound_shoot; |
199 | rs_soundbuf_t sound_turret_shoot; |
194 | rs_soundbuf_t sound_turret_shoot; |
200 | 195 | ||
201 | rs_soundbuf_t sound_test2; |
196 | rs_soundbuf_t sound_test2; |
202 | rs_soundbuf_t sound_test3; |
197 | rs_soundbuf_t sound_test3; |
203 | 198 | ||
204 | rs_soundbuf_t sound_explosions[SOUND_EXPLOSIONS_COUNT]; |
199 | rs_soundbuf_t sound_explosions[SOUND_EXPLOSIONS_COUNT]; |
205 | rs_soundbuf_t sound_hit; |
200 | rs_soundbuf_t sound_hit; |
206 | rs_soundbuf_t sound_huge_explosion; |
201 | rs_soundbuf_t sound_huge_explosion; |
207 | 202 | ||
208 | rs_soundbuf_t sound_music; |
203 | rs_soundbuf_t sound_music; |
209 | // rs_soundbuf_t sound_music2; |
204 | // rs_soundbuf_t sound_music2; |
210 | 205 | ||
211 | int status; |
206 | int status; |
212 | int flags; |
207 | int flags; |
213 | 208 | ||
214 | unsigned int keyboard_state; |
209 | unsigned int keyboard_state; |
215 | 210 | ||
216 | int menu_index; |
211 | int menu_index; |
217 | int menu_item_index; |
212 | int menu_item_index; |
218 | 213 | ||
219 | int window_scale; |
214 | int window_scale; |
220 | - | ||
221 | // int tx1; |
- | |
222 | // int ty1; |
215 | |
223 | int tz; |
216 | int tz; |
224 | 217 | ||
225 | int player_x; |
218 | int player_x; |
226 | int player_y; |
219 | int player_y; |
227 | // int player_z; |
- | |
228 | - | ||
229 | // int bullet_x[BULLETS_COUNT]; |
- | |
230 | // int bullet_y[BULLETS_COUNT]; |
- | |
231 | // int bullet_index; |
220 | |
232 | int shoot_delay; |
221 | int shoot_delay; |
233 | int shoot_keypressed; |
222 | int shoot_keypressed; |
234 | int shoot_restore_delay; |
223 | int shoot_restore_delay; |
235 | 224 | ||
236 | int health; |
225 | int health; |
237 | int ammo; |
226 | int ammo; |
238 | int score; |
227 | int score; |
239 | 228 | ||
240 | // int ammo_max; |
229 | // int ammo_max; |
241 | 230 | ||
242 | int stage; // (wave) |
231 | int stage; // (wave) |
243 | int stage_timer; |
232 | int stage_timer; |
244 | 233 | ||
245 | int stage_level; // (stage) |
234 | int stage_level; // (stage) |
246 | 235 | ||
247 | game_obj_t *objs; |
236 | game_obj_t *objs; |
248 | int objs_count; |
237 | int objs_count; |
249 | 238 | ||
250 | } rs_game_t; |
239 | } rs_game_t; |
251 | 240 | ||
252 | #define GAME_HEALTH_MAX 8 |
241 | #define GAME_HEALTH_MAX 8 |
253 | #define GAME_AMMO_MAX 24 |
242 | #define GAME_AMMO_MAX 24 |
254 | 243 | ||
255 | extern rs_game_t game; |
244 | extern rs_game_t game; |
256 | void game_reg_init(); |
245 | void game_reg_init(); |
257 | 246 | ||
258 | 247 | ||
259 | 248 | ||
260 | 249 | ||
261 | 250 | ||
262 | 251 | ||
263 | 252 | ||
264 | 253 | ||
265 | 254 | ||
266 | /* __ |
255 | /* __ |
267 | /cc\ |
256 | /cc\ |
268 | /aaaa\ |
257 | /aaaa\ |
269 | |kkkkkk| <-- Easter Egg |
258 | |kkkkkk| <-- Easter Egg |
270 | \eeee/ |
259 | \eeee/ |
271 | ------------------------------- */ |
260 | ------------------------------- */ |
272 | 261 | ||
273 | 262 | ||
274 | 263 | ||
275 | 264 | ||
276 | 265 | ||
277 | 266 | ||
278 | 267 | ||
279 | 268 | ||
280 | 269 | ||
281 | void game_ding(int i); |
270 | void game_ding(int i); |
282 | 271 | ||
283 | void GameInit(); |
272 | void GameInit(); |
284 | void GameTerm(); |
273 | void GameTerm(); |
285 | 274 | ||
286 | void GameKeyDown(int key); |
275 | void GameKeyDown(int key); |
287 | void GameKeyUp(int key); |
276 | void GameKeyUp(int key); |
288 | 277 | ||
289 | void GameMouseDown(int x, int y); |
278 | void GameMouseDown(int x, int y); |
290 | void GameMouseUp(int x, int y); |
279 | void GameMouseUp(int x, int y); |
291 | 280 | ||
292 | void game_change_window_scale(int d); |
281 | void game_change_window_scale(int d); |
293 | 282 | ||
294 | int is_key_pressed(int mask); |
283 | int is_key_pressed(int mask); |
295 | unsigned short rs_rand(); |
284 | unsigned short rs_rand(); |
296 | 285 | ||
297 | #endif // RSGAME_H_INCLUDED--> |
286 | #endif // RSGAME_H_INCLUDED--> |