2 // C Implementation: scene
7 // Author: Tobias Glaesser <tobi.web@gmx.de>, (C) 2004
9 // Copyright: See COPYING file that comes with this distribution
16 /* Initialize all 'dynamic' arrays */
17 void arrays_init(void)
20 num_bouncy_distros = 0;
21 num_broken_bricks = 0;
22 num_bouncy_bricks = 0;
23 num_floating_scores = 0;
27 bouncy_distros = NULL;
30 floating_scores = NULL;
35 /* Free memory of 'dynamic' arrays */
36 void arrays_free(void)
42 free(floating_scores);
47 void set_defaults(void)
54 timer_init(&super_bkgd_timer);
56 counting_distros = NO;
61 /* set current song/music */
62 current_music = LEVEL_MUSIC;
67 void add_score(int x, int y, int s)
77 /* Add a floating score thing to the game: */
81 for (i = 0; i < num_floating_scores && found == -1; i++)
83 if (!floating_scores[i].base.alive)
89 ++num_floating_scores;
90 floating_scores = realloc(floating_scores,num_floating_scores*sizeof(floating_score_type));
91 floating_score_init(&floating_scores[num_floating_scores-1],x,y,s);
97 floating_score_init(&floating_scores[found],x,y,s);
101 /* Add a bouncy distro: */
103 void add_bouncy_distro(float x, float y)
109 for (i = 0; i < num_bouncy_distros && found == -1; i++)
111 if (!bouncy_distros[i].base.alive)
117 ++num_bouncy_distros;
118 bouncy_distros = realloc(bouncy_distros,num_bouncy_distros*sizeof(bouncy_distro_type));
119 found = num_bouncy_distros - 1;
124 bouncy_distro_init(&bouncy_distros[found],x,y);
129 /* Add broken brick pieces: */
131 void add_broken_brick(float x, float y)
133 add_broken_brick_piece(x, y, -1, -4);
134 add_broken_brick_piece(x, y + 16, -1.5, -3);
136 add_broken_brick_piece(x + 16, y, 1, -4);
137 add_broken_brick_piece(x + 16, y + 16, 1.5, -3);
141 /* Add a broken brick piece: */
143 void add_broken_brick_piece(float x, float y, float xm, float ym)
149 for (i = 0; i < num_broken_bricks && found == -1; i++)
151 if (!broken_bricks[i].base.alive)
158 broken_bricks = realloc(broken_bricks,num_broken_bricks*sizeof(broken_brick_type));
159 found = num_broken_bricks - 1;
164 broken_brick_init(&broken_bricks[found], x, y, xm, ym);
169 /* Add a bouncy brick piece: */
171 void add_bouncy_brick(float x, float y)
177 for (i = 0; i < num_bouncy_bricks && found == -1; i++)
179 if (!bouncy_bricks[i].base.alive)
186 bouncy_bricks = realloc(bouncy_bricks,num_bouncy_bricks*sizeof(bouncy_brick_type));
187 found = num_bouncy_bricks - 1;
192 bouncy_brick_init(&bouncy_bricks[found],x,y);
199 void add_bad_guy(float x, float y, int kind)
205 for (i = 0; i < num_bad_guys && found == -1; i++)
207 if (!bad_guys[i].base.alive)
214 bad_guys = realloc(bad_guys,num_bad_guys*sizeof(bad_guy_type));
215 found = num_bad_guys - 1;
220 badguy_init(&bad_guys[found], x, y, kind);
224 /* Add an upgrade: */
226 void add_upgrade(float x, float y, int kind)
232 for (i = 0; i < num_upgrades && found == -1; i++)
234 if (!upgrades[i].base.alive)
241 upgrades = realloc(upgrades,num_upgrades*sizeof(upgrade_type));
242 found = num_upgrades - 1;
247 upgrade_init(&upgrades[found], x, y, kind);
253 void add_bullet(float x, float y, float xm, int dir)
259 for (i = 0; i < num_bullets && found == -1; i++)
261 if (!bullets[i].base.alive)
268 bullets = realloc(bullets,num_bullets*sizeof(bullet_type));
269 found = num_bullets - 1;
274 bullet_init(&bullets[found], x, y, xm, dir);
276 play_sound(sounds[SND_SHOOT], SOUND_CENTER_SPEAKER);