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