Subversion Repositories Kolibri OS

Rev

Rev 5316 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5316 Rev 5322
1
#include "rsgame.h"
1
#include "rsgame.h"
2
 
2
 
3
#include "rsgametext.h"
3
#include "rsgametext.h"
4
 
4
 
5
#include "rsgamemenu.h"
5
#include "rsgamemenu.h"
6
 
6
 
7
#include "rsgamedraw.h"
7
#include "rsgamedraw.h"
8
 
8
 
9
#include "rskos.h"
9
#include "rskos.h"
10
 
10
 
11
#include "rsgentex.h"
11
#include "rsgentex.h"
12
#include "rssoundgen.h"
12
#include "rssoundgen.h"
13
#include "rsnoise.h"
13
#include "rsnoise.h"
14
 
14
 
15
#include "rs/rsplatform.h"
15
#include "rs/rsplatform.h"
16
 
16
 
17
 
17
 
18
#ifdef RS_USE_C_LIBS // linux version
18
#ifdef RS_USE_C_LIBS // linux version
19
    #include 
19
    #include 
20
    #include  
20
    #include  
21
    #include 
21
    #include 
22
    
22
    
23
    #include "rs/rskeyboard.h"
23
    #include "rs/rskeyboard.h"
24
#endif
24
#endif
25
 
25
 
26
 
26
 
27
 
27
 
28
rs_game_t game;
28
rs_game_t game;
29
 
29
 
30
 
30
 
31
game_obj_t game_obj(int obj_type, int flags, int tag, int radius, float x, float y, int t, float f) {
31
game_obj_t game_obj(int obj_type, int flags, int tag, int radius, float x, float y, int t, float f) {
32
    game_obj_t obj;
32
    game_obj_t obj;
33
    obj.obj_type = obj_type;
33
    obj.obj_type = obj_type;
34
    obj.flags = flags;
34
    obj.flags = flags;
35
    obj.tag = tag;
35
    obj.tag = tag;
36
    obj.radius = radius;
36
    obj.radius = radius;
37
    obj.x = x;
37
    obj.x = x;
38
    obj.y = y;
38
    obj.y = y;
39
    obj.t = t;
39
    obj.t = t;
40
    obj.f = f;
40
    obj.f = f;
41
    return obj;
41
    return obj;
42
};
42
};
43
 
43
 
44
int game_obj_add(game_obj_t obj) {
44
int game_obj_add(game_obj_t obj) {
45
    if (game.objs_count < GAME_OBJS_MAX_COUNT) {
45
    if (game.objs_count < GAME_OBJS_MAX_COUNT) {
46
        game.objs[game.objs_count++] = obj;
46
        game.objs[game.objs_count++] = obj;
47
        return game.objs_count-1;    
47
        return game.objs_count-1;    
48
    };
48
    };
49
    #ifdef RS_LINUX
49
    #ifdef RS_LINUX
50
        DEBUG10("Error, max objects count is reached");
50
        DEBUG10("Error, max objects count is reached");
51
    #endif
51
    #endif
52
    return 0; // Max objects count is reached
52
    return 0; // Max objects count is reached
53
};
53
};
54
 
54
 
55
void game_obj_remove(int index) {
55
void game_obj_remove(int index) {
56
    if (index == game.objs_count - 1) {
56
    if (index == game.objs_count - 1) {
57
        game.objs_count--;
57
        game.objs_count--;
58
        return;
58
        return;
59
    };
59
    };
60
    game.objs[index] = game.objs[ game.objs_count-1 ];
60
    game.objs[index] = game.objs[ game.objs_count-1 ];
61
    game.objs_count--;
61
    game.objs_count--;
62
};
62
};
63
 
63
 
64
 
64
 
65
 
65
 
66
 
66
 
67
 
67
 
68
 
68
 
69
 
69
 
70
 
70
 
71
 
71
 
72
void texture_init(rs_texture_t *tex, int w, int h) {
72
void texture_init(rs_texture_t *tex, int w, int h) {
73
    tex->status = 1;
73
    tex->status = 1;
74
    tex->w = w;
74
    tex->w = w;
75
    tex->h = h;
75
    tex->h = h;
76
    tex->data = malloc(w*h*4); // BGRA BGRA
76
    tex->data = malloc(w*h*4); // BGRA BGRA
77
};
77
};
78
 
78
 
79
void texture_free(rs_texture_t *tex) {
79
void texture_free(rs_texture_t *tex) {
80
    free(tex->data);
80
    free(tex->data);
81
    tex->status = 0;
81
    tex->status = 0;
82
};
82
};
83
 
83
 
84
void texture_clear(rs_texture_t *tex, unsigned int color) {
84
void texture_clear(rs_texture_t *tex, unsigned int color) {
85
    int i;
85
    int i;
86
    for (i = 0; i < tex->w * tex->h; i++) {
86
    for (i = 0; i < tex->w * tex->h; i++) {
87
        *((unsigned int*)(&tex->data[i*4])) = color;
87
        *((unsigned int*)(&tex->data[i*4])) = color;
88
    };
88
    };
89
};
89
};
90
 
90
 
91
void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode) {
91
void texture_draw(rs_texture_t *dest, rs_texture_t *src, int x, int y, int mode) {
92
    
92
    
93
    int i; // y
93
    int i; // y
94
    int j; // x
94
    int j; // x
95
    int k; // color component
95
    int k; // color component
96
    
96
    
97
    int istart = (y < 0) ? -y : 0;
97
    int istart = (y < 0) ? -y : 0;
98
    int iend = src->h - (( (y + src->h) > dest->h) ? (y + src->h - dest->h) : 0);
98
    int iend = src->h - (( (y + src->h) > dest->h) ? (y + src->h - dest->h) : 0);
99
    
99
    
100
    int jstart = (x < 0) ? -x : 0;
100
    int jstart = (x < 0) ? -x : 0;
101
    int jend = src->w - (( (x + src->w) > dest->w) ? (x + src->w - dest->w) : 0);
101
    int jend = src->w - (( (x + src->w) > dest->w) ? (x + src->w - dest->w) : 0);
102
    
102
    
103
    int ishift = 0;
103
    int ishift = 0;
104
    int jshift = 0;
104
    int jshift = 0;
105
    
105
    
106
    float a; // alpha value
106
    float a; // alpha value
107
    
107
    
108
    if (mode & DRAW_TILED_FLAG) {
108
    if (mode & DRAW_TILED_FLAG) {
109
        jshift = x;
109
        jshift = x;
110
        ishift = y;
110
        ishift = y;
111
        x = y = istart = jstart = 0;
111
        x = y = istart = jstart = 0;
112
        iend = dest->h;
112
        iend = dest->h;
113
        jend = dest->w;
113
        jend = dest->w;
114
    };
114
    };
115
    
115
    
116
    mode = mode & DRAW_MODE_MASK;
116
    mode = mode & DRAW_MODE_MASK;
117
    
117
    
118
    int modvalue = (src->w*src->h*4); 
118
    int modvalue = (src->w*src->h*4); 
119
    
119
    
120
    if (mode == DRAW_MODE_REPLACE) {
120
    if (mode == DRAW_MODE_REPLACE) {
121
        for (i = istart; i < iend; i++) {
121
        for (i = istart; i < iend; i++) {
122
            for (j = jstart; j < jend; j++) {
122
            for (j = jstart; j < jend; j++) {
123
                for (k = 0; k < 4; k++) {
123
                for (k = 0; k < 4; k++) {
124
                    dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] = src->data[ (4*(i*src->w + j) + k) % modvalue ];
124
                    dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] = src->data[ (4*(i*src->w + j) + k) % modvalue ];
125
                };
125
                };
126
            };
126
            };
127
        };
127
        };
128
    }
128
    }
129
    else if (mode == DRAW_MODE_ADDITIVE) {
129
    else if (mode == DRAW_MODE_ADDITIVE) {
130
        for (i = istart; i < iend; i++) {
130
        for (i = istart; i < iend; i++) {
131
            for (j = jstart; j < jend; j++) {
131
            for (j = jstart; j < jend; j++) {
132
                for (k = 0; k < 3; k++) { // Alpha channel is not added
132
                for (k = 0; k < 3; k++) { // Alpha channel is not added
133
                    dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] = 
133
                    dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] = 
134
                        clamp_byte( dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] + src->data[ (4*((i+ishift)*src->w + j + jshift) + k) % modvalue] );
134
                        clamp_byte( dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] + src->data[ (4*((i+ishift)*src->w + j + jshift) + k) % modvalue] );
135
                };
135
                };
136
            };
136
            };
137
        };
137
        };
138
    }
138
    }
139
    else if (mode == DRAW_MODE_ALPHA) {
139
    else if (mode == DRAW_MODE_ALPHA) {
140
        for (i = istart; i < iend; i++) {
140
        for (i = istart; i < iend; i++) {
141
            for (j = jstart; j < jend; j++) {
141
            for (j = jstart; j < jend; j++) {
142
                for (k = 0; k < 3; k++) {
142
                for (k = 0; k < 3; k++) {
143
                    a = (1.0 * src->data[ (4*(i*src->w + j) + 3) % modvalue ] / 255.0);
143
                    a = (1.0 * src->data[ (4*(i*src->w + j) + 3) % modvalue ] / 255.0);
144
                    dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] = 
144
                    dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] = 
145
                         (unsigned char) ( (1.0-a) * dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] 
145
                         (unsigned char) ( (1.0-a) * dest->data[ 4 * ( (y+i)*dest->w + (x+j) ) + k ] 
146
                                          + a*src->data[ (4*((i+ishift)*src->w + j + jshift) + k) % modvalue] );
146
                                          + a*src->data[ (4*((i+ishift)*src->w + j + jshift) + k) % modvalue] );
147
                };
147
                };
148
            };
148
            };
149
        };
149
        };
150
    };
150
    };
151
    
151
    
152
};
152
};
153
 
153
 
154
 
154
 
155
 
155
 
156
void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color) {
156
void texture_set_pixel(rs_texture_t *tex, int x, int y, unsigned int color) {
157
    *((unsigned int*) &tex->data[ 4 * ( (y)*tex->w + (x) ) + 0 ]) = color;
157
    *((unsigned int*) &tex->data[ 4 * ( (y)*tex->w + (x) ) + 0 ]) = color;
158
};
158
};
159
 
159
 
160
void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color) {
160
void texture_draw_vline(rs_texture_t *tex, int x, int y, int l, unsigned int color) {
161
    int i;
161
    int i;
162
    if (y+l >= tex->h) {
162
    if (y+l >= tex->h) {
163
        l = tex->h - y;
163
        l = tex->h - y;
164
    };
164
    };
165
    
165
    
166
    if (x < 0) {
166
    if (x < 0) {
167
        return;
167
        return;
168
    };
168
    };
169
    
169
    
170
    if (x >= tex->w) {
170
    if (x >= tex->w) {
171
        return;
171
        return;
172
    };
172
    };
173
    
173
    
174
    for (i = 0; i < l; i++) {
174
    for (i = 0; i < l; i++) {
175
        *((unsigned int*) &tex->data[ 4 * ( (y+i)*tex->w + (x) ) + 0 ]) = color;
175
        *((unsigned int*) &tex->data[ 4 * ( (y+i)*tex->w + (x) ) + 0 ]) = color;
176
    };    
176
    };    
177
};
177
};
178
 
178
 
179
 
179
 
180
 
180
 
181
void soundbuf_init(rs_soundbuf_t *snd, int length_samples) {
181
void soundbuf_init(rs_soundbuf_t *snd, int length_samples) {
182
    snd->status = 1;
182
    snd->status = 1;
183
    snd->length_samples = length_samples;
183
    snd->length_samples = length_samples;
184
    snd->data = malloc(length_samples*2);
184
    snd->data = malloc(length_samples*2);
185
    rskos_snd_create_buffer(&snd->hbuf, snd->data, length_samples);
185
    rskos_snd_create_buffer(&snd->hbuf, snd->data, length_samples);
186
};
186
};
187
 
187
 
188
void soundbuf_update(rs_soundbuf_t *snd) {
188
void soundbuf_update(rs_soundbuf_t *snd) {
189
    rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
189
    rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
190
};
190
};
191
 
191
 
192
void soundbuf_free(rs_soundbuf_t *snd) {
192
void soundbuf_free(rs_soundbuf_t *snd) {
193
    snd->status = 0;
193
    snd->status = 0;
194
    free(snd->data);
194
    free(snd->data);
195
};
195
};
196
 
196
 
197
void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div) {
197
void soundbuf_fill(rs_soundbuf_t *snd, int amp, int freq_div) {
198
    int i;
198
    int i;
199
    for (i = 0; i < snd->length_samples; i++) {
199
    for (i = 0; i < snd->length_samples; i++) {
200
		snd->data[i] = -amp/2 + amp/2*( ( (i % freq_div) > freq_div/2 ) ? 1 : 0 );
200
		snd->data[i] = -amp/2 + amp/2*( ( (i % freq_div) > freq_div/2 ) ? 1 : 0 );
201
	};
201
	};
202
	rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
202
	rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
203
};
203
};
204
 
204
 
205
void soundbuf_sin(rs_soundbuf_t *snd, float freq) {
205
void soundbuf_sin(rs_soundbuf_t *snd, float freq) {
206
    int i;
206
    int i;
207
    int amp = 19000;
207
    int amp = 19000;
208
    for (i = 0; i < snd->length_samples; i++) {
208
    for (i = 0; i < snd->length_samples; i++) {
209
		snd->data[i] = ( 1.0 - 1.0*i/snd->length_samples ) * sin(freq*i) * amp;
209
		snd->data[i] = ( 1.0 - 1.0*i/snd->length_samples ) * sin(freq*i) * amp;
210
	};
210
	};
211
	rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
211
	rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
212
};
212
};
213
 
213
 
214
void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq) {
214
void soundbuf_sin_fade(rs_soundbuf_t *snd, float freq) {
215
    int i;
215
    int i;
216
    int amp = 19000;
216
    int amp = 19000;
217
    for (i = 0; i < snd->length_samples; i++) {
217
    for (i = 0; i < snd->length_samples; i++) {
218
		snd->data[i] = ( 1.0 - 1.0*i/snd->length_samples ) * sin( ( (1.0 - 0.48*i/snd->length_samples) * freq ) *i) * amp;
218
		snd->data[i] = ( 1.0 - 1.0*i/snd->length_samples ) * sin( ( (1.0 - 0.48*i/snd->length_samples) * freq ) *i) * amp;
219
	};
219
	};
220
	
-
 
221
	
-
 
222
	/*
-
 
223
	
-
 
224
	// ok
-
 
225
	
-
 
226
	rs_sgen_init(2, snd->length_samples);
-
 
227
	rs_sgen_func_pm(1, 880.0, 21.0, 0.3, 110.0, 0.3);
-
 
228
	rs_sgen_func_normalize(1, 1.0);
-
 
229
	rs_sgen_func_lowpass(0, 1, 1.0, 0.0, 1.0);
-
 
230
	rs_sgen_wave_out(0);
-
 
231
	
-
 
232
	memcpy(snd->data, rs_sgen_reg.wave_out, snd->length_samples*2 );
-
 
233
	
-
 
234
	rs_sgen_term();
-
 
235
	
-
 
236
	*/
-
 
237
	
220
	
238
	rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
221
	rskos_snd_update_buffer(&snd->hbuf, snd->data, snd->length_samples);
239
};
222
};
240
 
223
 
241
void soundbuf_play(rs_soundbuf_t *snd, int mode) {
224
void soundbuf_play(rs_soundbuf_t *snd, int mode) {
242
    rskos_snd_play(&snd->hbuf, mode);
225
    rskos_snd_play(&snd->hbuf, mode);
243
};
226
};
244
 
227
 
245
void soundbuf_stop(rs_soundbuf_t *snd) {
228
void soundbuf_stop(rs_soundbuf_t *snd) {
246
    rskos_snd_stop(&snd->hbuf);
229
    rskos_snd_stop(&snd->hbuf);
247
};
230
};
248
 
231
 
249
void soundbuf_loop_check(rs_soundbuf_t *snd) {
232
void soundbuf_loop_check(rs_soundbuf_t *snd) {
250
    rskos_snd_check_loop(&snd->hbuf);
233
    rskos_snd_check_loop(&snd->hbuf);
251
};
234
};
252
 
235
 
253
 
236
 
254
 
237
 
255
unsigned char clamp_byte(int value) {
238
unsigned char clamp_byte(int value) {
256
    value = value * (1 - (value >> 31)); // negative to zero
239
    value = value * (1 - (value >> 31)); // negative to zero
257
    return (value > 255) ? 255 : value;
240
    return (value > 255) ? 255 : value;
258
};
241
};
259
 
242
 
260
 
243
 
261
void game_reg_init() {
244
void game_reg_init() {
262
//    game.tx = 0;
-
 
263
//    game.ty = 0;
-
 
264
//    game.tz = 0;
-
 
265
    
245
    
266
    game.player_x = 0;
246
    game.player_x = 0;
267
    game.player_y = 0;
247
    game.player_y = 0;
268
    game.tz = 0;
248
    game.tz = 0;
269
    
249
    
270
    game.bg_color = COLOR_BLACK;
250
    game.bg_color = COLOR_BLACK;
271
 
-
 
272
//    int i;
-
 
273
//    for (i = 0; i < BULLETS_COUNT; i++) {
-
 
274
//        game.bullet_x[i] = 0;
-
 
275
//        game.bullet_y[i] = 0;
-
 
276
//    };
-
 
277
//    game.bullet_index = 0;
-
 
278
 
251
 
279
    game.objs = malloc( sizeof(game_obj_t) * GAME_OBJS_MAX_COUNT ); 
252
    game.objs = malloc( sizeof(game_obj_t) * GAME_OBJS_MAX_COUNT ); 
280
    
253
    
281
    game.status = STATUS_MENU;
254
    game.status = STATUS_MENU;
282
    
255
    
283
    game.window_scale = 2;
256
    game.window_scale = 2;
284
    #ifndef RS_KOS
257
    #ifndef RS_KOS
285
        game.window_scale = 3;
258
        game.window_scale = 3;
286
        window_scale_str[3] = '3'; 
259
        window_scale_str[3] = '3'; 
287
    #endif
260
    #endif
288
    
261
    
289
    game.keyboard_state = 0;
262
    game.keyboard_state = 0;
290
    
263
    
291
    game.menu_index = 0;
264
    game.menu_index = 0;
292
    game.menu_item_index = 0;
265
    game.menu_item_index = 0;
293
};
266
};
294
 
267
 
295
 
268
 
296
int is_key_pressed(int mask) {
269
int is_key_pressed(int mask) {
297
    return IS_BIT_SET(game.keyboard_state, mask) ? 1 : 0;
270
    return IS_BIT_SET(game.keyboard_state, mask) ? 1 : 0;
298
};
271
};
299
 
272
 
300
 
273
 
301
int seed = 0;
274
int seed = 0;
302
 
275
 
303
unsigned short rs_rand() {
276
unsigned short rs_rand() {
304
    seed += 1000;
277
    seed += 1000;
305
    seed %= 56789;
278
    seed %= 56789;
306
    
279
    
307
    // from here, http://www.cplusplus.com/forum/general/85758/
280
    // from here, http://www.cplusplus.com/forum/general/85758/
308
    // koef. changed
281
    // koef. changed
309
    int n = rskos_get_time() + seed * 57 * 5; // no *2
282
    int n = rskos_get_time() + seed * 57 * 5; // no *2
310
    n = (n << 13) ^ n;
283
    n = (n << 13) ^ n;
311
    return (n * (n * n * 15731 + 789221) + 1376312589) & 0xFFFF;
284
    return (n * (n * n * 15731 + 789221) + 1376312589) & 0xFFFF;
312
    
285
    
313
};
286
};
314
 
287
 
315
 
288
 
316
 
289
 
317
 
290
 
318
void GameInit() {
291
void GameInit() {
319
 
292
 
320
    game_reg_init();
293
    game_reg_init();
321
    
294
    
322
    game.scaled_framebuffer = malloc(GAME_WIDTH*game.window_scale * GAME_HEIGHT*game.window_scale * 3);
295
    game.scaled_framebuffer = malloc(GAME_WIDTH*game.window_scale * GAME_HEIGHT*game.window_scale * 3);
323
    DEBUG10f("scaled framebuffer: %d (window_scale = %d) \n", game.window_scale * GAME_WIDTH * GAME_HEIGHT * 3, game.window_scale);
296
    DEBUG10f("scaled framebuffer: %d (window_scale = %d) \n", game.window_scale * GAME_WIDTH * GAME_HEIGHT * 3, game.window_scale);
324
    
297
    
325
    game_font_init();
298
    game_font_init();
326
    
299
    
327
    texture_init(&game.framebuffer, GAME_WIDTH, GAME_HEIGHT);
300
    texture_init(&game.framebuffer, GAME_WIDTH, GAME_HEIGHT);
328
    
301
    
329
    texture_init(&game.tex, 64, 64);
302
    texture_init(&game.tex, 64, 64);
330
    rs_gen_init(1, 64);
303
    rs_gen_init(1, 64);
331
    rs_gen_func_set(0, 0.0);
304
    rs_gen_func_set(0, 0.0);
332
    rs_gen_func_cell(0, 1200, 10, NULL, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0);
305
    rs_gen_func_cell(0, 1200, 10, NULL, 1.0, 1.0, 1.0, 1.0, 0.0, 1.0);
333
    rs_gen_func_normalize(0, 0.0, 1.0);
306
    rs_gen_func_normalize(0, 0.0, 1.0);
334
    rs_gen_func_posterize(0, 5);
307
    rs_gen_func_posterize(0, 5);
335
    rs_gen_tex_out_rgba(0, 0, 0, -1, 1.0, 1.0, 1.0, 1.0);
308
    rs_gen_tex_out_rgba(0, 0, 0, -1, 1.0, 1.0, 1.0, 1.0);
336
    memcpy(game.tex.data, rs_gen_reg.tex_out, 64*64*4 );
309
    memcpy(game.tex.data, rs_gen_reg.tex_out, 64*64*4 );
337
    rs_gen_term();
310
    rs_gen_term();
338
    
311
    
339
    texture_init(&game.tex_clouds, 128, 128);
312
    texture_init(&game.tex_clouds, 128, 128);
340
    rs_gen_init(1, 128);
313
    rs_gen_init(1, 128);
341
    rs_gen_func_perlin(0, 8, 5, 0.5, 1100);
314
    rs_gen_func_perlin(0, 8, 5, 0.5, 1100);
342
    rs_gen_func_normalize(0, 0.0, 1.0);
315
    rs_gen_func_normalize(0, 0.0, 1.0);
343
    rs_gen_func_posterize(0, 4);
316
    rs_gen_func_posterize(0, 4);
344
    rs_gen_func_normalize(0, 0.0, 0.50);
317
    rs_gen_func_normalize(0, 0.0, 0.50);
345
    rs_gen_tex_out_rgba(0, 0, 0, -1, 0.9, 0.7, 0.5, 1.0);
318
    rs_gen_tex_out_rgba(0, 0, 0, -1, 0.9, 0.7, 0.5, 1.0);
346
    memcpy(game.tex_clouds.data, rs_gen_reg.tex_out, 128*128*4 );
319
    memcpy(game.tex_clouds.data, rs_gen_reg.tex_out, 128*128*4 );
347
    rs_gen_term();
320
    rs_gen_term();
348
    
321
    
349
    texture_init(&game.tex_ground, GAME_WIDTH, 50);
322
    texture_init(&game.tex_ground, GAME_WIDTH, 50);
350
    
323
    
351
    
324
    
352
    
325
    
353
    int ship_size = 8;
326
    int ship_size = 8;
354
    
327
    
355
    // 16x8
328
    // 16x8
356
    
329
    
357
    unsigned char tex_ship1_mask[] = { 0x10, 0x58, 0x7C, 0x7C, 0x3E, 0x1E, 0xBE, 0xFE };
330
    unsigned char tex_ship1_mask[] = { 0x10, 0x58, 0x7C, 0x7C, 0x3E, 0x1E, 0xBE, 0xFE };
358
    unsigned char tex_ship2_mask[] = { 0x7C, 0x7C, 0x7E, 0x7E, 0x3C, 0x3C, 0x1C, 0x18 };
331
    unsigned char tex_ship2_mask[] = { 0x7C, 0x7C, 0x7E, 0x7E, 0x3C, 0x3C, 0x1C, 0x18 };
359
    unsigned char tex_ship1_overlay_mask[] = { 0x10, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x8C, 0x84 };
332
    unsigned char tex_ship1_overlay_mask[] = { 0x10, 0x18, 0x1C, 0x1C, 0x1C, 0x1C, 0x8C, 0x84 };
360
    unsigned char tex_ship2_overlay_mask[] = { 0x00, 0x00, 0x20, 0x20, 0x30, 0x30, 0x10, 0x10 };
333
    unsigned char tex_ship2_overlay_mask[] = { 0x00, 0x00, 0x20, 0x20, 0x30, 0x30, 0x10, 0x10 };
361
    
334
    
362
    texture_init(&game.tex_ship[0], ship_size, ship_size);
335
    texture_init(&game.tex_ship[0], ship_size, ship_size);
363
    rs_gen_init(2, ship_size);
336
    rs_gen_init(2, ship_size);
364
    rs_gen_func_perlin(0, 8, 5, 0.5, 111);
337
    rs_gen_func_perlin(0, 8, 5, 0.5, 111);
365
    rs_gen_func_normalize(0, 0.0, 1.0);
338
    rs_gen_func_normalize(0, 0.0, 1.0);
366
    rs_gen_func_posterize(0, 2);
339
    rs_gen_func_posterize(0, 2);
367
    rs_gen_func_mult_add_value(0, 0, 0.3, 0.7);
340
    rs_gen_func_mult_add_value(0, 0, 0.3, 0.7);
368
 
341
 
369
    rs_gen_func_set(1, 1.0);
342
    rs_gen_func_set(1, 1.0);
370
    rs_gen_func_apply_mask(1, tex_ship1_mask);
343
    rs_gen_func_apply_mask(1, tex_ship1_mask);
371
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
344
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
372
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.8, 0.65, 0.66, 1.0);
345
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.8, 0.65, 0.66, 1.0);
373
    memcpy(game.tex_ship[0].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
346
    memcpy(game.tex_ship[0].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
374
    rs_gen_term();
347
    rs_gen_term();
375
    
348
    
376
    texture_init(&game.tex_ship[1], ship_size, ship_size);
349
    texture_init(&game.tex_ship[1], ship_size, ship_size);
377
    rs_gen_init(2, ship_size);
350
    rs_gen_init(2, ship_size);
378
    rs_gen_func_perlin(0, 8, 5, 0.5, 1100);
351
    rs_gen_func_perlin(0, 8, 5, 0.5, 1100);
379
    rs_gen_func_normalize(0, 0.0, 1.0);
352
    rs_gen_func_normalize(0, 0.0, 1.0);
380
    rs_gen_func_posterize(0, 2);
353
    rs_gen_func_posterize(0, 2);
381
    rs_gen_func_mult_add_value(0, 0, 0.1, 0.9);
354
    rs_gen_func_mult_add_value(0, 0, 0.1, 0.9);
382
 
355
 
383
    rs_gen_func_set(1, 1.0);
356
    rs_gen_func_set(1, 1.0);
384
    rs_gen_func_apply_mask(1, tex_ship1_overlay_mask);
357
    rs_gen_func_apply_mask(1, tex_ship1_overlay_mask);
385
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
358
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
386
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.4, 0.3, 0.3, 1.0);
359
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.4, 0.3, 0.3, 1.0);
387
    memcpy(game.tex_ship[1].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
360
    memcpy(game.tex_ship[1].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
388
    rs_gen_term();
361
    rs_gen_term();
389
    
362
    
390
    
363
    
391
    texture_init(&game.tex_ship[2], ship_size, ship_size);
364
    texture_init(&game.tex_ship[2], ship_size, ship_size);
392
    rs_gen_init(2, ship_size);
365
    rs_gen_init(2, ship_size);
393
    rs_gen_func_perlin(0, 8, 5, 0.5, 111);
366
    rs_gen_func_perlin(0, 8, 5, 0.5, 111);
394
    rs_gen_func_normalize(0, 0.0, 1.0);
367
    rs_gen_func_normalize(0, 0.0, 1.0);
395
    rs_gen_func_posterize(0, 2);
368
    rs_gen_func_posterize(0, 2);
396
    rs_gen_func_mult_add_value(0, 0, 0.3, 0.7);
369
    rs_gen_func_mult_add_value(0, 0, 0.3, 0.7);
397
//    rs_gen_func_set(0, 1.0);
370
//    rs_gen_func_set(0, 1.0);
398
    rs_gen_func_set(1, 1.0);
371
    rs_gen_func_set(1, 1.0);
399
    rs_gen_func_apply_mask(1, tex_ship2_mask);
372
    rs_gen_func_apply_mask(1, tex_ship2_mask);
400
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
373
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
401
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.8, 0.65, 0.66, 1.0);
374
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.8, 0.65, 0.66, 1.0);
402
    memcpy(game.tex_ship[2].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
375
    memcpy(game.tex_ship[2].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
403
    rs_gen_term();
376
    rs_gen_term();
404
    
377
    
405
    texture_init(&game.tex_ship[3], ship_size, ship_size);
378
    texture_init(&game.tex_ship[3], ship_size, ship_size);
406
    rs_gen_init(2, ship_size);
379
    rs_gen_init(2, ship_size);
407
    rs_gen_func_perlin(0, 8, 5, 0.5, 1100);
380
    rs_gen_func_perlin(0, 8, 5, 0.5, 1100);
408
    rs_gen_func_normalize(0, 0.0, 1.0);
381
    rs_gen_func_normalize(0, 0.0, 1.0);
409
    rs_gen_func_posterize(0, 2);
382
    rs_gen_func_posterize(0, 2);
410
    rs_gen_func_mult_add_value(0, 0, 0.1, 0.9);
383
    rs_gen_func_mult_add_value(0, 0, 0.1, 0.9);
411
 
384
 
412
    rs_gen_func_set(1, 1.0);
385
    rs_gen_func_set(1, 1.0);
413
    rs_gen_func_apply_mask(1, tex_ship2_overlay_mask);
386
    rs_gen_func_apply_mask(1, tex_ship2_overlay_mask);
414
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
387
//    rs_gen_func_mult_add_value(1, 1, 0.8, 0.2);
415
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.4, 0.3, 0.2, 1.0);
388
    rs_gen_tex_out_rgba(0, 0, 0, 1, 0.4, 0.3, 0.2, 1.0);
416
    memcpy(game.tex_ship[3].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
389
    memcpy(game.tex_ship[3].data, rs_gen_reg.tex_out, ship_size*ship_size*4 );
417
    rs_gen_term(); 
390
    rs_gen_term(); 
418
    
391
    
419
    
392
    
420
    texture_init(&game.tex_gui_line, GAME_WIDTH, 13);
393
    texture_init(&game.tex_gui_line, GAME_WIDTH, 13);
421
    int i;
394
    int i;
422
    for (i = 0; i < GAME_WIDTH*13; i++) {
395
    for (i = 0; i < GAME_WIDTH*13; i++) {
423
        ( (unsigned int*) (game.tex_gui_line.data)) [i] = 0x668899AA;
396
        ( (unsigned int*) (game.tex_gui_line.data)) [i] = 0x668899AA;
424
    };
397
    };
425
    
398
    
426
    
399
    
427
    int rock_size = 32;
400
    int rock_size = 32;
428
    rs_gen_init(3, rock_size);
401
    rs_gen_init(3, rock_size);
429
    for (i = 0; i < ROCKS_COUNT; i++) {
402
    for (i = 0; i < ROCKS_COUNT; i++) {
430
    
403
    
431
        texture_init(&(game.tex_rocks[i]), rock_size, rock_size);
404
        texture_init(&(game.tex_rocks[i]), rock_size, rock_size);
432
 
405
 
433
        rs_gen_func_set(0, 0.0);
406
        rs_gen_func_set(0, 0.0);
434
        rs_gen_func_radial(0, 0.5, 0.5, 0.5, 0.75, 2.5 + i%5);
407
        rs_gen_func_radial(0, 0.5, 0.5, 0.5, 0.75, 2.5 + i%5);
435
 
408
 
436
        rs_gen_func_perlin(2, 33, 4, 0.5, 350+i);
409
        rs_gen_func_perlin(2, 33, 4, 0.5, 350+i);
437
        rs_gen_func_normalize(2, 0.0, 1.0);
410
        rs_gen_func_normalize(2, 0.0, 1.0);
438
        rs_gen_func_posterize(2, 4);
411
        rs_gen_func_posterize(2, 4);
439
        
412
        
440
        rs_gen_func_cell(1, 410+i, 50, NULL, -2.0, 1.0, 1.0, 1.0, 0.0, 1.0);
413
        rs_gen_func_cell(1, 410+i, 50, NULL, -2.0, 1.0, 1.0, 1.0, 0.0, 1.0);
441
        rs_gen_func_posterize(1, 2);
414
        rs_gen_func_posterize(1, 2);
442
        rs_gen_func_normalize(1, 0.0, 1.0);
415
        rs_gen_func_normalize(1, 0.0, 1.0);
443
        rs_gen_func_add(1, 1, 2, 1.0, 0.5);
416
        rs_gen_func_add(1, 1, 2, 1.0, 0.5);
444
        rs_gen_func_normalize(1, 0.0, 1.0);
417
        rs_gen_func_normalize(1, 0.0, 1.0);
445
        rs_gen_func_posterize(1, 4);
418
        rs_gen_func_posterize(1, 4);
446
 
419
 
447
        rs_gen_func_add(1, 0, 1, 1.0, 1.0);
420
        rs_gen_func_add(1, 0, 1, 1.0, 1.0);
448
        rs_gen_func_normalize(1, 0.0, 1.0);
421
        rs_gen_func_normalize(1, 0.0, 1.0);
449
        rs_gen_func_mult(1, 0, 1);
422
        rs_gen_func_mult(1, 0, 1);
450
        rs_gen_func_normalize(1, 0.0, 1.0);
423
        rs_gen_func_normalize(1, 0.0, 1.0);
451
        rs_gen_func_posterize(1, 4);
424
        rs_gen_func_posterize(1, 4);
452
        rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0);
425
        rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0);
453
        rs_gen_tex_out_rgba(1, 1, 1, -1, 0.5+ 0.03*(i%2), 0.7+ 0.03*(i%3) , 0.9, 1.0);
426
        rs_gen_tex_out_rgba(1, 1, 1, -1, 0.5+ 0.03*(i%2), 0.7+ 0.03*(i%3) , 0.9, 1.0);
454
 
427
 
455
        memcpy(game.tex_rocks[i].data, rs_gen_reg.tex_out, rock_size*rock_size*4 );
428
        memcpy(game.tex_rocks[i].data, rs_gen_reg.tex_out, rock_size*rock_size*4 );
456
    };
429
    };
457
    rs_gen_term();
430
    rs_gen_term();
458
    
431
    
459
    
432
    
460
    rock_size = 16;
433
    rock_size = 16;
461
    rs_gen_init(3, rock_size);
434
    rs_gen_init(3, rock_size);
462
    for (i = 0; i < MINIROCKS_COUNT; i++) {
435
    for (i = 0; i < MINIROCKS_COUNT; i++) {
463
    
436
    
464
        texture_init(&(game.tex_minirocks[i]), rock_size, rock_size);
437
        texture_init(&(game.tex_minirocks[i]), rock_size, rock_size);
465
 
438
 
466
        rs_gen_func_set(0, 0.0);
439
        rs_gen_func_set(0, 0.0);
467
        rs_gen_func_radial(0, 0.5, 0.5, 0.5, 0.75, 2.5 + i%5);
440
        rs_gen_func_radial(0, 0.5, 0.5, 0.5, 0.75, 2.5 + i%5);
468
 
441
 
469
        rs_gen_func_perlin(2, 33, 4, 0.5, 350+i);
442
        rs_gen_func_perlin(2, 33, 4, 0.5, 350+i);
470
        rs_gen_func_normalize(2, 0.0, 1.0);
443
        rs_gen_func_normalize(2, 0.0, 1.0);
471
        rs_gen_func_posterize(2, 4);
444
        rs_gen_func_posterize(2, 4);
472
        
445
        
473
        rs_gen_func_cell(1, 410+i, 50, NULL, -2.0, 1.0, 1.0, 1.0, 0.0, 1.0);
446
        rs_gen_func_cell(1, 410+i, 50, NULL, -2.0, 1.0, 1.0, 1.0, 0.0, 1.0);
474
        rs_gen_func_posterize(1, 2);
447
        rs_gen_func_posterize(1, 2);
475
        rs_gen_func_normalize(1, 0.0, 1.0);
448
        rs_gen_func_normalize(1, 0.0, 1.0);
476
        rs_gen_func_add(1, 1, 2, 1.0, 0.5);
449
        rs_gen_func_add(1, 1, 2, 1.0, 0.5);
477
        rs_gen_func_normalize(1, 0.0, 1.0);
450
        rs_gen_func_normalize(1, 0.0, 1.0);
478
        rs_gen_func_posterize(1, 4);
451
        rs_gen_func_posterize(1, 4);
479
 
452
 
480
        rs_gen_func_add(1, 0, 1, 1.0, 1.0);
453
        rs_gen_func_add(1, 0, 1, 1.0, 1.0);
481
        rs_gen_func_normalize(1, 0.0, 1.0);
454
        rs_gen_func_normalize(1, 0.0, 1.0);
482
        rs_gen_func_mult(1, 0, 1);
455
        rs_gen_func_mult(1, 0, 1);
483
        rs_gen_func_normalize(1, 0.0, 1.0);
456
        rs_gen_func_normalize(1, 0.0, 1.0);
484
        rs_gen_func_posterize(1, 4);
457
        rs_gen_func_posterize(1, 4);
485
        rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0);
458
        rs_gen_tex_out_rgba_set(0.0, 0.0, 0.0, 0.0);
486
        rs_gen_tex_out_rgba(1, 1, 1, -1, 0.7+ 0.01*(i%2), 0.7+ 0.01*(i%3) , 0.65, 1.0);
459
        rs_gen_tex_out_rgba(1, 1, 1, -1, 0.7+ 0.01*(i%2), 0.7+ 0.01*(i%3) , 0.65, 1.0);
487
 
460
 
488
        memcpy(game.tex_minirocks[i].data, rs_gen_reg.tex_out, rock_size*rock_size*4 );
461
        memcpy(game.tex_minirocks[i].data, rs_gen_reg.tex_out, rock_size*rock_size*4 );
489
    };
462
    };
490
    rs_gen_term();
463
    rs_gen_term();
491
    
464
    
492
    
465
    
493
    
466
    
494
    
467
    
495
    rs_gen_init(3, EXPLOSION_RADIUS*2);
468
    rs_gen_init(3, EXPLOSION_RADIUS*2);
496
    for (i = 0; i < EXPLOSIONS_COUNT; i++) {
469
    for (i = 0; i < EXPLOSIONS_COUNT; i++) {
497
            
470
            
498
        texture_init(&(game.tex_explosions[i]), EXPLOSION_RADIUS*2, EXPLOSION_RADIUS*2);
471
        texture_init(&(game.tex_explosions[i]), EXPLOSION_RADIUS*2, EXPLOSION_RADIUS*2);
499
 
472
 
500
        rs_gen_func_set(0, 1.0);
473
        rs_gen_func_set(0, 1.0);
501
//        rs_gen_func_radial(0, 0.5, 0.5, 0.3 + 0.5*i/EXPLOSION_FRAMES_COUNT, 0.975, 4.0);
474
//        rs_gen_func_radial(0, 0.5, 0.5, 0.3 + 0.5*i/EXPLOSION_FRAMES_COUNT, 0.975, 4.0);
502
//        rs_gen_func_set(0, 1.0);
475
//        rs_gen_func_set(0, 1.0);
503
 
476
 
504
        rs_gen_func_perlin(2, 10 + i, 7, 0.5, 100 + i*1000);
477
        rs_gen_func_perlin(2, 10 + i, 7, 0.5, 100 + i*1000);
505
        rs_gen_func_normalize(2, 0.0, 1.0);
478
        rs_gen_func_normalize(2, 0.0, 1.0);
506
 
479
 
507
        rs_gen_func_set(1, 0.0);
480
        rs_gen_func_set(1, 0.0);
508
        rs_gen_func_radial(1, 0.5, 0.5, 0.1 + 0.4*i/EXPLOSIONS_COUNT, 1.0 - 1.0*i/EXPLOSIONS_COUNT, 2.5 + i%5);
481
        rs_gen_func_radial(1, 0.5, 0.5, 0.1 + 0.4*i/EXPLOSIONS_COUNT, 1.0 - 1.0*i/EXPLOSIONS_COUNT, 2.5 + i%5);
509
        
482
        
510
        rs_gen_func_add(0, 0, 2, 1.0, -0.8);
483
        rs_gen_func_add(0, 0, 2, 1.0, -0.8);
511
 
484
 
512
        rs_gen_tex_out_rgba_set( 0.0, 0.0, 0.0, 0.0);
485
        rs_gen_tex_out_rgba_set( 0.0, 0.0, 0.0, 0.0);
513
        rs_gen_tex_out_rgba(0, 0, 0, 1, 0.5*i/EXPLOSIONS_COUNT, 1.0 - 0.7*i/EXPLOSIONS_COUNT, 1.0, 1.0);
486
        rs_gen_tex_out_rgba(0, 0, 0, 1, 0.5*i/EXPLOSIONS_COUNT, 1.0 - 0.7*i/EXPLOSIONS_COUNT, 1.0, 1.0);
514
 
487
 
515
        memcpy(game.tex_explosions[i].data, rs_gen_reg.tex_out, EXPLOSION_RADIUS*2*EXPLOSION_RADIUS*2*4 );
488
        memcpy(game.tex_explosions[i].data, rs_gen_reg.tex_out, EXPLOSION_RADIUS*2*EXPLOSION_RADIUS*2*4 );
516
    };
489
    };
517
    rs_gen_term();
490
    rs_gen_term();
518
    
491
    
519
    
492
    
520
    
493
    
521
    rs_gen_init(3, HUGE_EXPLOSION_RADIUS*2);
494
    rs_gen_init(3, HUGE_EXPLOSION_RADIUS*2);
522
    for (i = 0; i < HUGE_EXPLOSIONS_COUNT; i++) {
495
    for (i = 0; i < HUGE_EXPLOSIONS_COUNT; i++) {
523
            
496
            
524
        texture_init(&(game.tex_huge_explosions[i]), HUGE_EXPLOSION_RADIUS*2, HUGE_EXPLOSION_RADIUS*2);
497
        texture_init(&(game.tex_huge_explosions[i]), HUGE_EXPLOSION_RADIUS*2, HUGE_EXPLOSION_RADIUS*2);
525
 
498
 
526
        rs_gen_func_set(0, 1.0);
499
        rs_gen_func_set(0, 1.0);
527
//        rs_gen_func_radial(0, 0.5, 0.5, 0.3 + 0.5*i/EXPLOSION_FRAMES_COUNT, 0.975, 4.0);
500
//        rs_gen_func_radial(0, 0.5, 0.5, 0.3 + 0.5*i/EXPLOSION_FRAMES_COUNT, 0.975, 4.0);
528
//        rs_gen_func_set(0, 1.0);
501
//        rs_gen_func_set(0, 1.0);
529
 
502
 
530
        rs_gen_func_perlin(2, 10 + i, 7, 0.5, 500 + i*2000);
503
        rs_gen_func_perlin(2, 10 + i, 7, 0.5, 500 + i*2000);
531
        rs_gen_func_normalize(2, 0.0, 1.0);
504
        rs_gen_func_normalize(2, 0.0, 1.0);
532
 
505
 
533
        rs_gen_func_set(1, 0.0);
506
        rs_gen_func_set(1, 0.0);
534
        rs_gen_func_radial(1, 0.5, 0.5, 0.1 + 0.4*i/HUGE_EXPLOSIONS_COUNT, 1.0 - 1.0*i/HUGE_EXPLOSIONS_COUNT, 2.5 + i%5);
507
        rs_gen_func_radial(1, 0.5, 0.5, 0.1 + 0.4*i/HUGE_EXPLOSIONS_COUNT, 1.0 - 1.0*i/HUGE_EXPLOSIONS_COUNT, 2.5 + i%5);
535
        
508
        
536
        rs_gen_func_add(0, 0, 2, 1.0, -0.8);
509
        rs_gen_func_add(0, 0, 2, 1.0, -0.8);
537
 
510
 
538
        rs_gen_tex_out_rgba_set( 0.0, 0.0, 0.0, 0.0);
511
        rs_gen_tex_out_rgba_set( 0.0, 0.0, 0.0, 0.0);
539
        rs_gen_tex_out_rgba(0, 0, 0, 1, 0.88*i/HUGE_EXPLOSIONS_COUNT, 0.8 - 0.8*i/HUGE_EXPLOSIONS_COUNT, 1.0, 1.0);
512
        rs_gen_tex_out_rgba(0, 0, 0, 1, 0.88*i/HUGE_EXPLOSIONS_COUNT, 0.8 - 0.8*i/HUGE_EXPLOSIONS_COUNT, 1.0, 1.0);
540
 
513
 
541
        memcpy(game.tex_huge_explosions[i].data, rs_gen_reg.tex_out, HUGE_EXPLOSION_RADIUS*2*HUGE_EXPLOSION_RADIUS*2*4 );
514
        memcpy(game.tex_huge_explosions[i].data, rs_gen_reg.tex_out, HUGE_EXPLOSION_RADIUS*2*HUGE_EXPLOSION_RADIUS*2*4 );
542
    };
515
    };
543
    rs_gen_term();
516
    rs_gen_term();
544
    
517
    
545
    
518
    
546
 
519
 
547
    #ifndef RS_KOS
520
    #ifndef RS_KOS
548
        rs_audio_init(RS_AUDIO_FMT_MONO16, RS_AUDIO_FREQ_16000, 2); 
521
        rs_audio_init(RS_AUDIO_FMT_MONO16, RS_AUDIO_FREQ_16000, 2); 
549
    #endif
522
    #endif
550
 
523
 
551
    soundbuf_init(&game.sound_shoot, 1536);
524
    soundbuf_init(&game.sound_shoot, 1536);
552
 
525
 
553
	rs_sgen_init(2, game.sound_shoot.length_samples);
526
	rs_sgen_init(2, game.sound_shoot.length_samples);
554
	rs_sgen_func_pm(1, 2900.0, 1.70, 65.0, 17.0, 1.0);
527
	rs_sgen_func_pm(1, 2900.0, 1.70, 65.0, 17.0, 1.0);
555
	rs_sgen_func_normalize(1, 0.6);
528
	rs_sgen_func_normalize(1, 0.6);
556
//	rs_sgen_func_lowpass(0, 1, 1.0, 0.0, 4.0);
529
//	rs_sgen_func_lowpass(0, 1, 1.0, 0.0, 4.0);
557
	rs_sgen_func_highpass(0, 1, 1.0, 0.0, 3.0);
530
	rs_sgen_func_highpass(0, 1, 1.0, 0.0, 3.0);
558
 
531
 
559
	rs_sgen_wave_out(0);
532
	rs_sgen_wave_out(0);
560
	
533
	
561
	memcpy(game.sound_shoot.data, (unsigned char*) rs_sgen_reg.wave_out, game.sound_shoot.length_samples*2 );
534
	memcpy(game.sound_shoot.data, (unsigned char*) rs_sgen_reg.wave_out, game.sound_shoot.length_samples*2 );
562
	
535
	
563
	rs_sgen_term();
536
	rs_sgen_term();
564
    soundbuf_update(&game.sound_shoot);
537
    soundbuf_update(&game.sound_shoot);
565
    
538
    
566
    
539
    
567
    
540
    
568
    soundbuf_init(&game.sound_turret_shoot, 4096);
541
    soundbuf_init(&game.sound_turret_shoot, 4096);
569
	rs_sgen_init(2, game.sound_turret_shoot.length_samples);
542
	rs_sgen_init(2, game.sound_turret_shoot.length_samples);
570
	rs_sgen_func_pm(1, 227.0, 4.70, 555.0, 150.0, 0.01);
543
	rs_sgen_func_pm(1, 227.0, 4.70, 555.0, 150.0, 0.01);
571
	rs_sgen_func_normalize(1, 0.6);
544
	rs_sgen_func_normalize(1, 0.6);
572
//	rs_sgen_func_highpass(0, 1, 1.0, 0.0, 3.0);
545
//	rs_sgen_func_highpass(0, 1, 1.0, 0.0, 3.0);
573
	rs_sgen_func_lowpass(0, 1, 1.0, 0.0, 3.0);
546
	rs_sgen_func_lowpass(0, 1, 1.0, 0.0, 3.0);
574
 
547
 
575
	rs_sgen_wave_out(0);
548
	rs_sgen_wave_out(0);
576
	
549
	
577
	memcpy(game.sound_turret_shoot.data, (unsigned char*) rs_sgen_reg.wave_out, game.sound_turret_shoot.length_samples*2 );
550
	memcpy(game.sound_turret_shoot.data, (unsigned char*) rs_sgen_reg.wave_out, game.sound_turret_shoot.length_samples*2 );
578
	
551
	
579
	rs_sgen_term();
552
	rs_sgen_term();
580
    soundbuf_update(&game.sound_turret_shoot);
553
    soundbuf_update(&game.sound_turret_shoot);
581
    
554
    
582
    
555
    
583
     
556
     
584
    
557
    
585
    
558
    
586
    
559
    
587
    
560
    
588
    
561
    
589
 
562
 
590
    soundbuf_init(&game.sound_test2, 1024);
563
    soundbuf_init(&game.sound_test2, 1024);
591
    //soundbuf_fill(&game.sound_test2, 8, 40);
564
    //soundbuf_fill(&game.sound_test2, 8, 40);
592
    soundbuf_sin(&game.sound_test2, 0.48);
565
    soundbuf_sin(&game.sound_test2, 0.48);
593
 
566
 
594
    soundbuf_init(&game.sound_test3, 1024);
567
    soundbuf_init(&game.sound_test3, 1024);
595
    //soundbuf_fill(&game.sound_test3, 12, 60);
568
    //soundbuf_fill(&game.sound_test3, 12, 60);
596
    soundbuf_sin(&game.sound_test3, 0.24);
569
    soundbuf_sin(&game.sound_test3, 0.24);
597
 
570
 
598
 
571
 
599
 
572
 
600
    
573
    
601
    
574
    
602
    int soundlen = 55000;
575
    int soundlen = 55000;
603
            
576
            
604
//    int freqs[SOUND_EXPLOSIONS_COUNT] = { 440, 523, 587, 698, 783, 880, 1046, 1174 };
577
//    int freqs[SOUND_EXPLOSIONS_COUNT] = { 440, 523, 587, 698, 783, 880, 1046, 1174 };
605
    
578
    
606
    for (i = 0; i < SOUND_EXPLOSIONS_COUNT; i++) {
579
    for (i = 0; i < SOUND_EXPLOSIONS_COUNT; i++) {
607
 
580
 
608
        soundbuf_init(&game.sound_explosions[i], soundlen);
581
        soundbuf_init(&game.sound_explosions[i], soundlen);
609
 
582
 
610
        rs_sgen_init(3, soundlen);
583
        rs_sgen_init(3, soundlen);
611
 
584
 
612
        rs_sgen_func_noise(2, 1000);
585
        rs_sgen_func_noise(2, 1000);
613
        //rs_sgen_func_phaser(0, 2, 0.9, 15.2 + 1.0*i/SOUND_EXPLOSIONS_COUNT, 6.0, 3.0, 2000.0, 1.73); 
586
        //rs_sgen_func_phaser(0, 2, 0.9, 15.2 + 1.0*i/SOUND_EXPLOSIONS_COUNT, 6.0, 3.0, 2000.0, 1.73); 
614
        rs_sgen_func_phaser(0, 2, 0.9, 16.2 + 0.5*i/SOUND_EXPLOSIONS_COUNT, 6.0, 3.0, 900.0, 0.93); 
587
        rs_sgen_func_phaser(0, 2, 0.9, 16.2 + 0.5*i/SOUND_EXPLOSIONS_COUNT, 6.0, 3.0, 900.0, 0.93); 
615
        rs_sgen_func_normalize(0, 1.0);
588
        rs_sgen_func_normalize(0, 1.0);
616
 
589
 
617
        rs_sgen_func_lowpass(2, 0, 0.6, 0.0, 20.0);
590
        rs_sgen_func_lowpass(2, 0, 0.6, 0.0, 20.0);
618
        rs_sgen_func_normalize(2, 0.5);
591
        rs_sgen_func_normalize(2, 0.5);
619
 
592
 
620
        rs_sgen_wave_out(2);
593
        rs_sgen_wave_out(2);
621
 
594
 
622
        memcpy(game.sound_explosions[i].data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2);
595
        memcpy(game.sound_explosions[i].data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2);
623
        soundbuf_update(&game.sound_explosions[i]);
596
        soundbuf_update(&game.sound_explosions[i]);
624
 
597
 
625
        rs_sgen_term();
598
        rs_sgen_term();
626
    
599
    
627
    };
600
    };
628
    
601
    
629
    
602
    
630
    
603
    
631
    soundlen = 95000;
604
    soundlen = 95000;
632
    
605
    
633
    soundbuf_init(&game.sound_huge_explosion, soundlen);
606
    soundbuf_init(&game.sound_huge_explosion, soundlen);
634
 
607
 
635
    rs_sgen_init(3, soundlen);
608
    rs_sgen_init(3, soundlen);
636
 
609
 
637
    rs_sgen_func_noise(2, 1000);
610
    rs_sgen_func_noise(2, 1000);
638
    //rs_sgen_func_phaser(0, 2, 0.9, 15.2 + 1.0*i/SOUND_EXPLOSIONS_COUNT, 6.0, 3.0, 2000.0, 1.73); 
611
    //rs_sgen_func_phaser(0, 2, 0.9, 15.2 + 1.0*i/SOUND_EXPLOSIONS_COUNT, 6.0, 3.0, 2000.0, 1.73); 
639
    rs_sgen_func_phaser(0, 2, 0.9, 16.2 + 0.5, 6.0, 3.0, 100.0, 0.53); 
612
    rs_sgen_func_phaser(0, 2, 0.9, 16.2 + 0.5, 6.0, 3.0, 100.0, 0.53); 
640
    rs_sgen_func_normalize(0, 1.0);
613
    rs_sgen_func_normalize(0, 1.0);
641
 
614
 
642
    rs_sgen_func_lowpass(2, 0, 0.8, 0.0, 10.0);
615
    rs_sgen_func_lowpass(2, 0, 0.8, 0.0, 10.0);
643
    rs_sgen_func_normalize(2, 0.5);
616
    rs_sgen_func_normalize(2, 0.5);
644
 
617
 
645
    rs_sgen_wave_out(2);
618
    rs_sgen_wave_out(2);
646
 
619
 
647
    memcpy(game.sound_huge_explosion.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2);
620
    memcpy(game.sound_huge_explosion.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2);
648
    soundbuf_update(&game.sound_huge_explosion);
621
    soundbuf_update(&game.sound_huge_explosion);
649
 
622
 
650
    rs_sgen_term();
623
    rs_sgen_term();
651
    
624
    
652
    
625
    
653
    
626
    
654
    
627
    
655
    
628
    
656
    
629
    
657
    
630
    
658
    
631
    
659
 
632
 
660
    soundlen = 17888;
633
    soundlen = 17888;
661
 
634
 
662
    soundbuf_init(&game.sound_hit, soundlen);
635
    soundbuf_init(&game.sound_hit, soundlen);
663
 
636
 
664
    rs_sgen_init(3, soundlen);
637
    rs_sgen_init(3, soundlen);
665
 
638
 
666
    rs_sgen_func_noise(2, 1000);
639
    rs_sgen_func_noise(2, 1000);
667
    rs_sgen_func_phaser(0, 2, 0.9, 11.5, 16.0, 13.0, 1300.0, 1.93); 
640
    rs_sgen_func_phaser(0, 2, 0.9, 11.5, 16.0, 13.0, 1300.0, 1.93); 
668
    rs_sgen_func_normalize(0, 1.0);
641
    rs_sgen_func_normalize(0, 1.0);
669
 
642
 
670
    rs_sgen_func_highpass(2, 0, 1.0, 0.3, 20.0);
643
    rs_sgen_func_highpass(2, 0, 1.0, 0.3, 20.0);
671
    rs_sgen_func_normalize(2, 0.5);
644
    rs_sgen_func_normalize(2, 0.5);
672
 
645
 
673
    rs_sgen_wave_out(2);
646
    rs_sgen_wave_out(2);
674
 
647
 
675
    memcpy(game.sound_hit.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2);
648
    memcpy(game.sound_hit.data, (unsigned char*) rs_sgen_reg.wave_out, soundlen*2);
676
    soundbuf_update(&game.sound_hit);
649
    soundbuf_update(&game.sound_hit);
677
 
650
 
678
    rs_sgen_term();
651
    rs_sgen_term();
679
    
652
    
680
    
653
    
681
    
654
    
682
 
655
 
683
    #define NOTE(i) ( 3 << ( (i)/12) ) / ( 24 - ( (i) % 12) )
656
    #define NOTE(i) ( 3 << ( (i)/12) ) / ( 24 - ( (i) % 12) )
684
    int amp = 70;
657
    int amp = 70;
685
    int t_shift = 0;
658
    int t_shift = 0;
686
    int t;
659
    int t;
687
 
660
 
688
    soundlen = 128 * 1024; 
661
    soundlen = 128 * 1024; 
689
    
662
    
690
 
663
 
691
 
664
 
692
    soundbuf_init(&game.sound_music, soundlen);
665
    soundbuf_init(&game.sound_music, soundlen);
693
    
666
    
694
    for (t = t_shift; t < soundlen+t_shift; t++) {
667
    for (t = t_shift; t < soundlen+t_shift; t++) {
695
        game.sound_music.data[t-t_shift] = (0xFF & 
668
        game.sound_music.data[t-t_shift] = (0xFF & 
696
            (                                        
669
            (                                        
697
                ((t>>11) | (t>>7) | ( t>>5) | (t))
670
                ((t>>11) | (t>>7) | ( t>>5) | (t))
698
 
671
 
699
            )                                   
672
            )                                   
700
        ) * amp;
673
        ) * amp;
701
    };
674
    };
702
    
675
    
703
    soundbuf_update(&game.sound_music);
676
    soundbuf_update(&game.sound_music);
704
    
677
    
705
    
678
    
706
    
679
    
707
//    int d[4] = { 5, 6, 1, 2 };
680
//    int d[4] = { 5, 6, 1, 2 };
708
    
681
    
709
    
682
    
710
//    soundbuf_init(&game.sound_music2, soundlen);
683
//    soundbuf_init(&game.sound_music2, soundlen);
711
//    
684
//    
712
//    for (t = t_shift; t < soundlen+t_shift; t++) {
685
//    for (t = t_shift; t < soundlen+t_shift; t++) {
713
//            
686
//            
714
////        y = 1 + (t & 16383);
687
////        y = 1 + (t & 16383);
715
////        x = (t * c[ (t>>13) & 3 ] / 24) & 127;
688
////        x = (t * c[ (t>>13) & 3 ] / 24) & 127;
716
//            
689
//            
717
//        game.sound_music2.data[t-t_shift] = (0xFF & 
690
//        game.sound_music2.data[t-t_shift] = (0xFF & 
718
//            (                                        
691
//            (                                        
719
//           //( t*5 & t >> 7 ) | ( t*2 & t >> 10 )
692
//           //( t*5 & t >> 7 ) | ( t*2 & t >> 10 )
720
//                                                    
693
//                                                    
721
//           // ( ((t*t*t/1000000 + t) % 127) | t>>4 | t>>5 | (t%127) ) + ( (t>>16) | t )
694
//           // ( ((t*t*t/1000000 + t) % 127) | t>>4 | t>>5 | (t%127) ) + ( (t>>16) | t )
722
//           
695
//           
723
////           ((t>>11) | (t>>7) | ( t>>5) | (t))
696
////           ((t>>11) | (t>>7) | ( t>>5) | (t))
724
////           //+ 
697
////           //+ 
725
////           //(( (t*5) >>12) & ( (t*3)>>19))
698
////           //(( (t*5) >>12) & ( (t*3)>>19))
726
//             
699
//             
727
////                (3000 / y) * 35
700
////                (3000 / y) * 35
728
////             + x*y*40000
701
////             + x*y*40000
729
////             + ( ( ((t>>8) & (t>>10)) | (t >> 14) | x) & 63 )
702
////             + ( ( ((t>>8) & (t>>10)) | (t >> 14) | x) & 63 )
730
//                                
703
//                                
731
//                 // (  ((6 * t / d[ (t>>13) & 15 ] ) & 127) * 10000 ) 
704
//                 // (  ((6 * t / d[ (t>>13) & 15 ] ) & 127) * 10000 ) 
732
//                 //|( ( t>>3 ) )                
705
//                 //|( ( t>>3 ) )                
733
//             
706
//             
734
//                    (t*NOTE( d[ (t>>13) & 3 ] )*10000)
707
//                    (t*NOTE( d[ (t>>13) & 3 ] )*10000)
735
//                    | ((t>>6)*20000) 
708
//                    | ((t>>6)*20000) 
736
//             
709
//             
737
//             )
710
//             )
738
//                                                    
711
//                                                    
739
//        ) * amp;
712
//        ) * amp;
740
//    };
713
//    };
741
//    
714
//    
742
//    soundbuf_update(&game.sound_music2);
715
//    soundbuf_update(&game.sound_music2);
743
    
716
    
744
    
717
    
745
    soundbuf_play( &game.sound_music, SND_MODE_LOOP );    
718
    soundbuf_play( &game.sound_music, SND_MODE_LOOP );    
746
    
719
    
747
 
720
 
748
};
721
};
749
 
722
 
750
 
723
 
751
void GameTerm() {
724
void GameTerm() {
752
 
725
 
753
 
726
 
754
    DEBUG10("--- Game Term ---");
727
    DEBUG10("--- Game Term ---");
755
 
728
 
756
    #ifndef RS_KOS
729
    #ifndef RS_KOS
757
        rs_audio_term();
730
        rs_audio_term();
758
    #endif
731
    #endif
759
 
732
 
760
    game_font_term();
733
    game_font_term();
761
    
734
    
762
    free(game.scaled_framebuffer);
735
    free(game.scaled_framebuffer);
763
    
736
    
764
    free(game.objs);
737
    free(game.objs);
765
    
738
    
766
    texture_free(&game.framebuffer);
739
    texture_free(&game.framebuffer);
767
    texture_free(&game.tex);
740
    texture_free(&game.tex);
768
    texture_free(&game.tex_clouds);
741
    texture_free(&game.tex_clouds);
769
    texture_free(&game.tex_ground);
742
    texture_free(&game.tex_ground);
770
    
743
    
771
    texture_free(&game.tex_gui_line);
744
    texture_free(&game.tex_gui_line);
772
    
745
    
773
    int i;
746
    int i;
774
    for (i = 0; i < ROCKS_COUNT; i++) {
747
    for (i = 0; i < ROCKS_COUNT; i++) {
775
        texture_free(&game.tex_rocks[i]);
748
        texture_free(&game.tex_rocks[i]);
776
    };
749
    };
777
    
750
    
778
    soundbuf_free(&game.sound_huge_explosion);
751
    soundbuf_free(&game.sound_huge_explosion);
779
    soundbuf_free(&game.sound_hit);
752
    soundbuf_free(&game.sound_hit);
780
    soundbuf_free(&game.sound_music);
753
    soundbuf_free(&game.sound_music);
781
    
754
    
782
    for (i = 0; i < SOUND_EXPLOSIONS_COUNT; i++) {
755
    for (i = 0; i < SOUND_EXPLOSIONS_COUNT; i++) {
783
        soundbuf_free(&game.sound_explosions[i]);
756
        soundbuf_free(&game.sound_explosions[i]);
784
    };
757
    };
785
    
758
    
786
    
759
    
787
    soundbuf_free(&game.sound_shoot);
760
    soundbuf_free(&game.sound_shoot);
788
    soundbuf_free(&game.sound_turret_shoot);
761
    soundbuf_free(&game.sound_turret_shoot);
789
    soundbuf_free(&game.sound_test2);
762
    soundbuf_free(&game.sound_test2);
790
    soundbuf_free(&game.sound_test3);
763
    soundbuf_free(&game.sound_test3);
791
    
764
    
792
 
765
 
793
};
766
};
794
 
767
 
795
// ------------ #Event Functions ------------
768
// ------------ #Event Functions ------------
796
 
769
 
797
 
770
 
798
 
771
 
799
 
772
 
800
 
773
 
801
 
774
 
802
void GameKeyDown(int key) {
775
void GameKeyDown(int key) {
803
    
776
    
804
    
777
    
805
    switch (key) {
778
    switch (key) {
806
        case RS_KEY_LEFT:
779
        case RS_KEY_LEFT:
807
            BIT_SET(game.keyboard_state, RS_ARROW_LEFT_MASK);
780
            BIT_SET(game.keyboard_state, RS_ARROW_LEFT_MASK);
808
            break;
781
            break;
809
        case RS_KEY_RIGHT:
782
        case RS_KEY_RIGHT:
810
            BIT_SET(game.keyboard_state, RS_ARROW_RIGHT_MASK);
783
            BIT_SET(game.keyboard_state, RS_ARROW_RIGHT_MASK);
811
            break;
784
            break;
812
        case RS_KEY_UP:
785
        case RS_KEY_UP:
813
            BIT_SET(game.keyboard_state, RS_ARROW_UP_MASK);
786
            BIT_SET(game.keyboard_state, RS_ARROW_UP_MASK);
814
            break;
787
            break;
815
        case RS_KEY_DOWN:
788
        case RS_KEY_DOWN:
816
            BIT_SET(game.keyboard_state, RS_ARROW_DOWN_MASK);
789
            BIT_SET(game.keyboard_state, RS_ARROW_DOWN_MASK);
817
            break;
790
            break;
818
        case RS_KEY_A:
791
        case RS_KEY_A:
819
            BIT_SET(game.keyboard_state, RS_ATTACK_KEY_MASK);
792
            BIT_SET(game.keyboard_state, RS_ATTACK_KEY_MASK);
820
            game.shoot_keypressed = 1;
793
            game.shoot_keypressed = 1;
821
            
794
            
822
//            soundbuf_loop_check( &game.sound_music );
795
//            soundbuf_loop_check( &game.sound_music );
823
            
796
            
824
            break;
797
            break;
825
            
798
            
826
        
799
        
827
        
800
        
828
        case RS_KEY_SPACE:
801
        case RS_KEY_SPACE:
829
                soundbuf_play( &game.sound_huge_explosion, 0 );
802
                soundbuf_play( &game.sound_huge_explosion, 0 );
830
            break;
803
            break;
831
        
804
        
832
        #ifdef RS_LINUX
805
        #ifdef RS_LINUX
833
            
806
            
834
        case RS_KEY_Z:
807
        case RS_KEY_Z:
835
//                soundbuf_stop( &game.sound_music );
808
//                soundbuf_stop( &game.sound_music );
836
//                soundbuf_play( &game.sound_music2, 0 );
809
//                soundbuf_play( &game.sound_music2, 0 );
837
                game.stage = 7;
810
                game.stage = 7;
838
                break;
811
                break;
839
            
812
            
840
        #endif
813
        #endif
841
        
814
        
842
 
815
 
843
            
816
            
844
    };
817
    };
845
    
818
    
846
    
819
    
847
    if (game.status == STATUS_MENU) {
820
    if (game.status == STATUS_MENU) {
848
    
821
    
849
        switch (key) {
822
        switch (key) {
850
            case RS_KEY_LEFT:
823
            case RS_KEY_LEFT:
851
                BIT_SET(game.keyboard_state, RS_ARROW_LEFT_MASK);
824
                BIT_SET(game.keyboard_state, RS_ARROW_LEFT_MASK);
852
 
825
 
853
                if ( (game.menu_index == MENU_SETTINGS) && (game.menu_item_index == MENU_ITEM_WINDOW_SCALE) ) {
826
                if ( (game.menu_index == MENU_SETTINGS) && (game.menu_item_index == MENU_ITEM_WINDOW_SCALE) ) {
854
                    game_change_window_scale(-1);
827
                    game_change_window_scale(-1);
855
                    game_ding(1);
828
                    game_ding(1);
856
                };
829
                };
857
 
830
 
858
                //PlayBuffer(hBuff, 0);
831
                //PlayBuffer(hBuff, 0);
859
                break;
832
                break;
860
            case RS_KEY_RIGHT:
833
            case RS_KEY_RIGHT:
861
                BIT_SET(game.keyboard_state, RS_ARROW_RIGHT_MASK);
834
                BIT_SET(game.keyboard_state, RS_ARROW_RIGHT_MASK);
862
                
835
                
863
                if ( (game.menu_index == MENU_SETTINGS) && (game.menu_item_index == MENU_ITEM_WINDOW_SCALE) ) {
836
                if ( (game.menu_index == MENU_SETTINGS) && (game.menu_item_index == MENU_ITEM_WINDOW_SCALE) ) {
864
                    game_change_window_scale(1);
837
                    game_change_window_scale(1);
865
                    game_ding(1);
838
                    game_ding(1);
866
                };
839
                };
867
 
840
 
868
                //StopBuffer(hBuff);
841
                //StopBuffer(hBuff);
869
                break;
842
                break;
870
            case RS_KEY_UP:
843
            case RS_KEY_UP:
871
                BIT_SET(game.keyboard_state, RS_ARROW_UP_MASK);
844
                BIT_SET(game.keyboard_state, RS_ARROW_UP_MASK);
872
                menu_cursor_up();
845
                menu_cursor_up();
873
                //ResetBuffer(hBuff, 0);
846
                //ResetBuffer(hBuff, 0);
874
                break;
847
                break;
875
            case RS_KEY_DOWN:
848
            case RS_KEY_DOWN:
876
                BIT_SET(game.keyboard_state, RS_ARROW_DOWN_MASK);
849
                BIT_SET(game.keyboard_state, RS_ARROW_DOWN_MASK);
877
                menu_cursor_down();
850
                menu_cursor_down();
878
                break;
851
                break;
879
            case RS_KEY_RETURN:
852
            case RS_KEY_RETURN:
880
                menu_cursor_click();
853
                menu_cursor_click();
881
                break;
854
                break;
882
            case RS_KEY_ESCAPE:
855
            case RS_KEY_ESCAPE:
883
                if (game.menu_index != MENU_PAUSE) {
856
                if (game.menu_index != MENU_PAUSE) {
884
                    menu_open(0);
857
                    menu_open(0);
885
                }
858
                }
886
                else {
859
                else {
887
                    game.status = STATUS_PLAYING;
860
                    game.status = STATUS_PLAYING;
888
                    return;
861
                    return;
889
                };
862
                };
890
                break;
863
                break;
891
        };
864
        };
892
 
865
 
893
    };
866
    };
894
    
867
    
895
    if (game.status == STATUS_PLAYING) {
868
    if (game.status == STATUS_PLAYING) {
896
        switch (key) {
869
        switch (key) {
897
            
870
            
898
            case RS_KEY_ESCAPE:
871
            case RS_KEY_ESCAPE:
899
                game.status = STATUS_MENU;
872
                game.status = STATUS_MENU;
900
                menu_open(MENU_PAUSE);
873
                menu_open(MENU_PAUSE);
901
                break;
874
                break;
902
            case RS_KEY_SPACE:
875
            case RS_KEY_SPACE:
903
                
876
                
904
                
877
                
905
                //game_obj_add( game_obj( OBJ_EXPLOSION, 0, 0, 0, game.tx + 80, game.ty - 10, 0, 0.0 ) );
878
                //game_obj_add( game_obj( OBJ_EXPLOSION, 0, 0, 0, game.tx + 80, game.ty - 10, 0, 0.0 ) );
906
                
879
                
907
//                game_obj_add( game_obj( OBJ_ROCK, 0, 0, 32, game.tx + 80, game.ty - 10, 0, 0.0 ) );
880
//                game_obj_add( game_obj( OBJ_ROCK, 0, 0, 32, game.tx + 80, game.ty - 10, 0, 0.0 ) );
908
                
881
                
909
                break;
882
                break;
910
            
883
            
911
        };
884
        };
912
    };
885
    };
913
 
886
 
914
};
887
};
915
 
888
 
916
void GameKeyUp(int key) {
889
void GameKeyUp(int key) {
917
 
890
 
918
    switch (key) {
891
    switch (key) {
919
        case RS_KEY_LEFT:
892
        case RS_KEY_LEFT:
920
            BIT_CLEAR(game.keyboard_state, RS_ARROW_LEFT_MASK);
893
            BIT_CLEAR(game.keyboard_state, RS_ARROW_LEFT_MASK);
921
            break;
894
            break;
922
        case RS_KEY_RIGHT:
895
        case RS_KEY_RIGHT:
923
            BIT_CLEAR(game.keyboard_state, RS_ARROW_RIGHT_MASK);
896
            BIT_CLEAR(game.keyboard_state, RS_ARROW_RIGHT_MASK);
924
            break;
897
            break;
925
        case RS_KEY_UP:
898
        case RS_KEY_UP:
926
            BIT_CLEAR(game.keyboard_state, RS_ARROW_UP_MASK);
899
            BIT_CLEAR(game.keyboard_state, RS_ARROW_UP_MASK);
927
            break;
900
            break;
928
        case RS_KEY_DOWN:
901
        case RS_KEY_DOWN:
929
            BIT_CLEAR(game.keyboard_state, RS_ARROW_DOWN_MASK);
902
            BIT_CLEAR(game.keyboard_state, RS_ARROW_DOWN_MASK);
930
            break;
903
            break;
931
        case RS_KEY_A:
904
        case RS_KEY_A:
932
            BIT_CLEAR(game.keyboard_state, RS_ATTACK_KEY_MASK);
905
            BIT_CLEAR(game.keyboard_state, RS_ATTACK_KEY_MASK);
933
            break;
906
            break;
934
    };
907
    };
935
 
908
 
936
};
909
};
937
 
910
 
938
void GameMouseDown(int x, int y) {
911
void GameMouseDown(int x, int y) {
939
//    game.tx = x;
912
//    game.tx = x;
940
//    game.ty = y;
913
//    game.ty = y;
941
    DEBUG10f("Mouse Down %d, %d \n", x, y);
914
    DEBUG10f("Mouse Down %d, %d \n", x, y);
942
};
915
};
943
 
916
 
944
void GameMouseUp(int x, int y) {
917
void GameMouseUp(int x, int y) {
945
    //
918
    //
946
};
919
};
947
 
920
 
948
 
921
 
949
void game_change_window_scale(int d) {
922
void game_change_window_scale(int d) {
950
    int scale = window_scale_str[3] - '0';
923
    int scale = window_scale_str[3] - '0';
951
    
924
    
952
    unsigned int w;
925
    unsigned int w;
953
    unsigned int h;
926
    unsigned int h;
954
    rskos_get_screen_size(&w, &h);
927
    rskos_get_screen_size(&w, &h);
955
    
928
    
956
    int max_scale = (w-20)/GAME_WIDTH;
929
    int max_scale = (w-20)/GAME_WIDTH;
957
    if ( (h-20)/GAME_HEIGHT < max_scale ) {
930
    if ( (h-20)/GAME_HEIGHT < max_scale ) {
958
        max_scale = (h-20)/GAME_HEIGHT;
931
        max_scale = (h-20)/GAME_HEIGHT;
959
    };
932
    };
960
    
933
    
961
    scale += d;
934
    scale += d;
962
    if ( scale > max_scale) {
935
    if ( scale > max_scale) {
963
        scale = 1;
936
        scale = 1;
964
    }
937
    }
965
    else if (scale < 1) {
938
    else if (scale < 1) {
966
        scale = max_scale;
939
        scale = max_scale;
967
    };
940
    };
968
    
941
    
969
    game.window_scale = scale;
942
    game.window_scale = scale;
970
    
943
    
971
    free(game.scaled_framebuffer);
944
    free(game.scaled_framebuffer);
972
    game.scaled_framebuffer = malloc(GAME_WIDTH*game.window_scale * GAME_HEIGHT*game.window_scale * 3);
945
    game.scaled_framebuffer = malloc(GAME_WIDTH*game.window_scale * GAME_HEIGHT*game.window_scale * 3);
973
    
946
    
974
    
947
    
975
    rskos_resize_window( GAME_WIDTH * scale, GAME_HEIGHT * scale );
948
    rskos_resize_window( GAME_WIDTH * scale, GAME_HEIGHT * scale );
976
 
949
 
977
    window_scale_str[3] = scale + '0';
950
    window_scale_str[3] = scale + '0';
978
    
951
    
979
    
952
    
980
    
953
    
981
};
954
};
982
 
955
 
983
void game_ding(int i) {
956
void game_ding(int i) {
984
    
957
    
985
    switch (i) {
958
    switch (i) {
986
        case 0:
959
        case 0:
987
            soundbuf_play(&game.sound_test2, 0);
960
            soundbuf_play(&game.sound_test2, 0);
988
            break;
961
            break;
989
        case 1:
962
        case 1:
990
            soundbuf_play(&game.sound_test3, 0);
963
            soundbuf_play(&game.sound_test3, 0);
991
            break;
964
            break;
992
    };
965
    };
993
    
966
    
994
};
967
};