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 | };>>>>>>><>>>>>>>><>>>>>>>>>>>>>>>>>>> |