Skip to content

Commit e916ed6

Browse files
author
David Ghiassi
committed
Added a level and a new power-up: double missile
1 parent 87ea429 commit e916ed6

File tree

11 files changed

+154
-45
lines changed

11 files changed

+154
-45
lines changed

data/level7.txt

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -14,9 +14,7 @@ $ A_gaseous_planet?
1414

1515
$ Wave_1
1616

17-
1000 320 5 40 0
1817
0 540 5 40 0
19-
0 760 5 40 0
2018
5000 540 3 2 D
2119
5000 540 3 2 D
2220
5000 540 3 2 D
@@ -34,13 +32,8 @@ $ Wave_2
3432
0 540 2 6 B
3533
0 740 2 6 B
3634
0 940 2 6 B
37-
4000 540 3 5 C
35+
5000 540 3 5 C
3836

39-
$ Final_Boss
37+
$ Boss
4038

41-
1000 540 2 70 1
42-
43-
$ ...
44-
$ Detector_sees_no_more_enemy
45-
$ ...
46-
$ Thanks_for_playing!
39+
1000 540 10 40 0

data/level8.txt

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,51 @@
1+
# Usage:
2+
# $ wave_name
3+
# @ object_type
4+
# num_ms_to_appear pos_y speed health enemy_type
5+
6+
# Object_type usage:
7+
# @ S: shield
8+
# @ G: galaxy (non-interactible)
9+
# @ P: planet (non-interactible)
10+
# @ H: health
11+
# @ M: double-missile
12+
13+
# Enemy_type usage:
14+
# A: standard
15+
# B: asteroid
16+
# C: rotating enemy
17+
# D: drone
18+
# 0: boss
19+
# 1: final boss
20+
21+
22+
$ Mission_8
23+
24+
$ Wave_1
25+
26+
@ M
27+
6000 240 2 8 A
28+
0 840 2 8 A
29+
3000 540 2 8 A
30+
31+
$ Wave_2
32+
33+
1000 340 3 4 C
34+
0 740 3 4 C
35+
4000 340 3 4 C
36+
0 740 3 4 C
37+
4000 140 2 6 B
38+
0 340 2 6 B
39+
0 540 2 6 B
40+
0 740 2 6 B
41+
0 940 2 6 B
42+
4000 540 3 5 C
43+
44+
$ Final_Boss
45+
46+
1000 540 2 150 1
47+
48+
$ ...
49+
$ Detector_sees_no_more_enemy
50+
$ ...
51+
$ Thanks_for_playing!

data/missile.bmp

4.78 KB
Binary file not shown.

src/collision.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -281,6 +281,10 @@ void check_collisions_objects(struct window *window, struct player *player)
281281
player->shield_time = SDL_GetTicks();
282282
break;
283283

284+
case MISSILE_AROUND:
285+
player->missile_around = 1;
286+
break;
287+
284288
default:
285289
error("Unknown object", "Unknown object type", window->window);
286290
break;

src/game.c

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -226,19 +226,27 @@ static int respawn(struct window *window, struct player *player)
226226

227227
void reset_game_attributes(struct window *window, int difficulty, int all_reset)
228228
{
229-
for (enum list_type i = 0; i < NUM_LISTS; i++)
230-
clear_list(window->list[i]);
231-
232229
if (all_reset)
230+
{
231+
for (enum list_type i = 0; i < NUM_LISTS; i++)
232+
clear_list(window->list[i]);
233+
233234
window->score = 0;
235+
}
234236

235237
window->last_enemy_time = 0;
236238
window->is_wave_title = 0;
237239
window->wave_title_time = 0;
238240

239241
for (int i = 0; i < window->num_players; i++)
242+
{
240243
window->player[i].respawn_frame = 0;
241244

245+
if (all_reset)
246+
for (int i = 0; i < window->num_players; i++)
247+
window->player[i].missile_around = 0;
248+
}
249+
242250
switch (difficulty)
243251
{
244252
case EASY:

src/init.c

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ static void load_textures(struct window *window)
5757
window->img->objects[SHIELD] = load_texture_collision("data/shield.png", window);
5858
window->img->objects[PLANET] = load_texture_collision("data/planet.png", window);
5959
window->img->objects[GALAXY] = load_texture_collision("data/galaxy.png", window);
60+
window->img->objects[MISSILE_AROUND] = load_texture_collision("data/missile.bmp", window);
6061
window->img->aura = load_texture("data/aura.png", window);
6162
window->img->asteroid = load_texture_collision("data/asteroid.png", window);
6263

@@ -187,7 +188,7 @@ struct window *init_all(void)
187188
error("Could not load SDL2_mixer", Mix_GetError(), window->window);
188189

189190
// Load music with volume settings
190-
Mix_AllocateChannels(16);
191+
Mix_AllocateChannels(32);
191192

192193
if (Mix_OpenAudio(44100, MIX_DEFAULT_FORMAT, 2, 1024) == -1)
193194
error("Could not initialize SDL2_mixer", Mix_GetError(), window->window);

src/init.h

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
#include <SDL2/SDL_mixer.h>
88
#include <SDL2/SDL_net.h>
99

10-
#define NUM_LEVELS 7
10+
#define NUM_LEVELS 8
1111
#define NUM_ROTATING_FRAMES 180
1212
#define DEFAULT_W 1920
1313
#define DEFAULT_H 1080
@@ -19,6 +19,7 @@ enum object_type
1919
SHIELD,
2020
PLANET,
2121
GALAXY,
22+
MISSILE_AROUND,
2223
NUM_OBJECTS
2324
};
2425

@@ -162,6 +163,7 @@ struct player
162163
int animated_health_high;
163164
Uint32 last_shot_time;
164165
int is_controller;
166+
int missile_around;
165167
};
166168

167169
struct window

src/intro.c

Lines changed: 46 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,17 @@ void intro(struct window *window)
1010
{
1111
char *s = "Made by David 'Gazi' Ghiassi";
1212

13+
int escape = 0;
14+
1315
for (int i = 0; i < 256; i += 3)
1416
{
1517
update_events(window->in, window);
1618
handle_quit_event(window, 0);
1719

20+
escape = handle_escape_event(window) || handle_play_event(window);
21+
if (escape)
22+
break;
23+
1824
// Black screen
1925
SDL_SetRenderDrawColor(window->renderer, 0, 0, 0, 255);
2026
SDL_RenderClear(window->renderer);
@@ -30,45 +36,59 @@ void intro(struct window *window)
3036
SDL_framerateDelay(window->fps);
3137
}
3238

33-
for (int i = 0; i < 100; i++)
39+
if (!escape)
3440
{
35-
update_events(window->in, window);
36-
handle_quit_event(window, 0);
41+
for (int i = 0; i < 100; i++)
42+
{
43+
update_events(window->in, window);
44+
handle_quit_event(window, 0);
3745

38-
// Black screen
39-
SDL_SetRenderDrawColor(window->renderer, 0, 0, 0, 255);
40-
SDL_RenderClear(window->renderer);
46+
escape = handle_escape_event(window) || handle_play_event(window);
47+
if (escape)
48+
break;
4149

42-
SDL_Color white = { 255, 255, 255, 255 };
50+
// Black screen
51+
SDL_SetRenderDrawColor(window->renderer, 0, 0, 0, 255);
52+
SDL_RenderClear(window->renderer);
4353

44-
render_text(window, window->fonts->calibri, s, white,
45-
POS_CENTERED, POS_CENTERED);
54+
SDL_Color white = { 255, 255, 255, 255 };
4655

47-
SDL_RenderPresent(window->renderer);
56+
render_text(window, window->fonts->calibri, s, white,
57+
POS_CENTERED, POS_CENTERED);
4858

49-
// Wait a frame
50-
SDL_framerateDelay(window->fps);
59+
SDL_RenderPresent(window->renderer);
5160

52-
}
61+
// Wait a frame
62+
SDL_framerateDelay(window->fps);
5363

54-
for (int i = 255; i >= 0; i -= 3)
55-
{
56-
update_events(window->in, window);
57-
handle_quit_event(window, 0);
64+
}
5865

59-
// Black screen
60-
SDL_SetRenderDrawColor(window->renderer, 0, 0, 0, 255);
61-
SDL_RenderClear(window->renderer);
66+
if (!escape)
67+
{
68+
for (int i = 255; i >= 0; i -= 3)
69+
{
70+
update_events(window->in, window);
71+
handle_quit_event(window, 0);
6272

63-
SDL_Color white = { i, i, i, i };
73+
escape = handle_escape_event(window) || handle_play_event(window);
74+
if (escape)
75+
break;
6476

65-
render_text(window, window->fonts->calibri, s, white,
66-
POS_CENTERED, POS_CENTERED);
77+
// Black screen
78+
SDL_SetRenderDrawColor(window->renderer, 0, 0, 0, 255);
79+
SDL_RenderClear(window->renderer);
6780

68-
SDL_RenderPresent(window->renderer);
81+
SDL_Color white = { i, i, i, i };
6982

70-
// Wait a frame
71-
SDL_framerateDelay(window->fps);
83+
render_text(window, window->fonts->calibri, s, white,
84+
POS_CENTERED, POS_CENTERED);
85+
86+
SDL_RenderPresent(window->renderer);
87+
88+
// Wait a frame
89+
SDL_framerateDelay(window->fps);
90+
}
91+
}
7292
}
7393

7494

src/level.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -226,6 +226,7 @@ void select_level(struct window *window)
226226
"Spatial Army",
227227
"Bosses",
228228
"New Planet",
229+
"The End",
229230
"Arcade Mode"
230231
};
231232

src/path.c

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,10 @@ static void set_object_type(struct window *window, const char *filename, FILE *f
5353
p->line.type = GALAXY;
5454
break;
5555

56+
case 'M':
57+
p->line.type = MISSILE_AROUND;
58+
break;
59+
5660
default:
5761
error(filename, "Could not load file because it is corrupted.", window->window);
5862
break;

0 commit comments

Comments
 (0)