Subversion Repositories Kolibri OS

Rev

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