summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build/data/imgs/throwables/molotov_explode.pngbin0 -> 284297 bytes
-rw-r--r--build/data/sounds/fire.wavbin0 -> 1563214 bytes
-rw-r--r--build/data/sounds/molotov_explode.wavbin0 -> 178878 bytes
-rw-r--r--build/zombies.exebin2000459 -> 2001751 bytes
-rw-r--r--data/imgs/throwables/molotov_explode.pngbin0 -> 284297 bytes
-rw-r--r--data/sounds/fire.wavbin0 -> 1563214 bytes
-rw-r--r--data/sounds/molotov_explode.wavbin0 -> 178878 bytes
-rw-r--r--include/asset_defs.h4
-rw-r--r--include/audio.h2
-rw-r--r--include/math_helper.h2
-rw-r--r--src/asset_defs.c3
-rw-r--r--src/audio.c2
-rw-r--r--src/throwables.c59
13 files changed, 57 insertions, 15 deletions
diff --git a/build/data/imgs/throwables/molotov_explode.png b/build/data/imgs/throwables/molotov_explode.png
new file mode 100644
index 0000000..365211a
--- /dev/null
+++ b/build/data/imgs/throwables/molotov_explode.png
Binary files differ
diff --git a/build/data/sounds/fire.wav b/build/data/sounds/fire.wav
new file mode 100644
index 0000000..900d6d1
--- /dev/null
+++ b/build/data/sounds/fire.wav
Binary files differ
diff --git a/build/data/sounds/molotov_explode.wav b/build/data/sounds/molotov_explode.wav
new file mode 100644
index 0000000..fba72bb
--- /dev/null
+++ b/build/data/sounds/molotov_explode.wav
Binary files differ
diff --git a/build/zombies.exe b/build/zombies.exe
index b6202ec..02bcfcd 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files differ
diff --git a/data/imgs/throwables/molotov_explode.png b/data/imgs/throwables/molotov_explode.png
new file mode 100644
index 0000000..365211a
--- /dev/null
+++ b/data/imgs/throwables/molotov_explode.png
Binary files differ
diff --git a/data/sounds/fire.wav b/data/sounds/fire.wav
new file mode 100644
index 0000000..900d6d1
--- /dev/null
+++ b/data/sounds/fire.wav
Binary files differ
diff --git a/data/sounds/molotov_explode.wav b/data/sounds/molotov_explode.wav
new file mode 100644
index 0000000..fba72bb
--- /dev/null
+++ b/data/sounds/molotov_explode.wav
Binary files differ
diff --git a/include/asset_defs.h b/include/asset_defs.h
index cdf9614..f052346 100644
--- a/include/asset_defs.h
+++ b/include/asset_defs.h
@@ -29,6 +29,7 @@ image* img_obj_wall1;
// Throwables
image* img_grenade;
image* img_grenade_explode;
+image* img_molotov_explode;
// Players
image* img_player_running;
@@ -45,6 +46,9 @@ image* img_tile_grass1;
// Sounds
Mix_Chunk* wav_throwable_bounce;
Mix_Chunk* wav_grenade_explode;
+Mix_Chunk* wav_molotov_explode;
+
+Mix_Chunk* wav_fire;
Mix_Chunk* wav_shoot_mp5;
Mix_Chunk* wav_reload_mp5;
diff --git a/include/audio.h b/include/audio.h
index 22e0a99..a22ec95 100644
--- a/include/audio.h
+++ b/include/audio.h
@@ -12,6 +12,7 @@
#define CHANNEL_RELOAD 3
#define CHANNEL_EXPLODE 4
#define CHANNEL_COLLECT 5
+#define CHANNEL_FIRE 6
typedef enum t_audio_event_type {
EVENT_SHOOT,
@@ -20,6 +21,7 @@ typedef enum t_audio_event_type {
EVENT_EXPLODE_THROWABLE,
EVENT_IMPACT,
EVENT_COLLECT,
+ EVENT_FIRE,
} audio_event_type;
typedef struct t_audio_event {
diff --git a/include/math_helper.h b/include/math_helper.h
index 6786128..074e73a 100644
--- a/include/math_helper.h
+++ b/include/math_helper.h
@@ -11,7 +11,7 @@
#define DROP_RENDER_DEPTH(_h) renderer->set_render_depth(4 + ceil(_h));
#define BULLET_RENDER_DEPTH(_h) renderer->set_render_depth(5 + ceil(_h));
-#define THROWABLE_RENDER_DEPTH(_h) renderer->set_render_depth(5 + ceil(_h));
+#define THROWABLE_RENDER_DEPTH(_h) renderer->set_render_depth(3 + ceil(_h));
#define OBJECT_RENDER_DEPTH(_h) renderer->set_render_depth(5 + ceil(_h));
#define OVERLAY_RENDER_DEPTH() renderer->set_render_depth(100);
diff --git a/src/asset_defs.c b/src/asset_defs.c
index 15a948a..566a49b 100644
--- a/src/asset_defs.c
+++ b/src/asset_defs.c
@@ -22,6 +22,7 @@ void load_assets() {
// Throwables
img_grenade = assets_load_image_from_file("data/imgs/throwables/grenade.png");
img_grenade_explode = assets_load_image_from_file("data/imgs/throwables/grenade_explode.png");
+ img_molotov_explode = assets_load_image_from_file("data/imgs/throwables/molotov_explode.png");
// Objects
img_spawner = assets_load_image_from_file("data/imgs/spawner.png");
@@ -43,6 +44,8 @@ void load_assets() {
// sounds
wav_throwable_bounce = Mix_LoadWAV("data/sounds/throwable_bounce.wav");
wav_grenade_explode = Mix_LoadWAV("data/sounds/grenade_explode.wav");
+ wav_molotov_explode = Mix_LoadWAV("data/sounds/molotov_explode.wav");
+ wav_fire = Mix_LoadWAV("data/sounds/fire.wav");
wav_shoot_mp5 = Mix_LoadWAV("data/sounds/shoot_mp5.wav");
wav_reload_mp5 = Mix_LoadWAV("data/sounds/reload_mp5.wav");
wav_shoot_nova = Mix_LoadWAV("data/sounds/shoot_nova.wav");
diff --git a/src/audio.c b/src/audio.c
index 1f15a66..73232af 100644
--- a/src/audio.c
+++ b/src/audio.c
@@ -53,9 +53,11 @@ static Mix_Chunk* get_sample_from_audio_event(audio_event event, u32 playerid) {
{
case EVENT_COLLECT: return wav_collect;
case EVENT_BOUNCE_THROWABLE: return wav_throwable_bounce;
+ case EVENT_FIRE: return wav_fire;
case EVENT_EXPLODE_THROWABLE: {
switch(event.throwable) {
case THROWABLE_GRENADE: return wav_grenade_explode;
+ case THROWABLE_MOLOTOV: return wav_molotov_explode;
default: return wav_error;
}
}
diff --git a/src/throwables.c b/src/throwables.c
index 1492287..6021b27 100644
--- a/src/throwables.c
+++ b/src/throwables.c
@@ -13,10 +13,16 @@ void throw_throwable(u32 id, throwable_type type, float dirx, float diry) {
throwable t = {.active = true, .state = THROWABLE_FLYING, .alive_time = 0.0f, .type = type, .direction = (vec3f){.x = dirx*1.5f, .y = diry*1.5f, .z = -0.2f},
.player_id = id, .position = (vec3f){.x = p->playerx, .y = p->playery, .z = p->height}};
- t.sprite = create_sprite(img_grenade_explode, 12, 96, 96, 0.1f);
-
switch(type) {
- case THROWABLE_GRENADE: t.damage = 1500; break;
+ case THROWABLE_GRENADE: {
+ t.sprite = create_sprite(img_grenade_explode, 12, 96, 96, 0.1f);
+ t.damage = 1500;
+ } break;
+ case THROWABLE_MOLOTOV: {
+ t.sprite = create_sprite(img_molotov_explode, 32, 66, 119, 0.04f);
+ t.damage = 300;
+ } break;
+
}
throwables[i] = t;
@@ -33,11 +39,6 @@ bool check_if_throwable_collided_with_object(throwable* b, vec3f oldpos, vec3f n
if (b->position.z <= o.h + o.size.z && b->position.z >= o.h) {
box obj_box = get_box_of_square((vec3f){o.position.x, o.position.y, o.h}, o.size);
- //if (o.type == OBJECT_PLANTBOX1 && oldpos.x < o.position.x && newpos.x > o.position.x) {
- // log_infox("intersect {%.2f %.2f}{%.2f %.2f} {%.2f %.2f}{%.2f %.2f}",
- // oldpos.x, oldpos.y, newpos.x, newpos.y, o.position.x, o.position.y, o.position.x, o.position.y + o.size.y);
- //}
-
// top
if (lines_intersect((vec2f){.x = oldpos.x, .y = oldpos.y}, (vec2f){.x = newpos.x, .y = newpos.y},
(vec2f){.x = o.position.x, .y = o.position.y}, (vec2f){.x = o.position.x + o.size.x, .y = o.position.y})) {
@@ -99,6 +100,34 @@ void explode_grenade(throwable t) {
}
}
+void explode_molotov(throwable b) {
+ add_throwable_audio_event_to_queue(EVENT_FIRE, b.type, b.player_id, b.position);
+}
+
+static image* get_throwable_explosion_from_type(throwable_type type) {
+ switch(type) {
+ case THROWABLE_GRENADE: return img_grenade_explode;
+ case THROWABLE_MOLOTOV: return img_molotov_explode;
+ default: return img_grenade_explode;
+ }
+}
+
+static float get_throwable_explosion_time(throwable_type type) {
+ switch(type) {
+ case THROWABLE_GRENADE: return 3.2f;
+ case THROWABLE_MOLOTOV: return 8.0f;
+ default: return 0.0f;
+ }
+}
+
+static float get_throwable_fly_time(throwable_type type) {
+ switch(type) {
+ case THROWABLE_GRENADE: return 2.0f;
+ case THROWABLE_MOLOTOV: return 0.6f;
+ default: return 0.0f;
+ }
+}
+
void update_throwables_server() {
float speed = 7.0f * SERVER_TICK_RATE;
float gravity = 0.015f;
@@ -109,23 +138,25 @@ void update_throwables_server() {
if (!b.active) continue;
throwables[i].rotation += SERVER_TICK_RATE*3.0f*throwables[i].bounces;
-
throwables[i].alive_time += SERVER_TICK_RATE;
- if (throwables[i].alive_time >= 2.0f) {
+ if (throwables[i].alive_time >= get_throwable_explosion_time(b.type)) {
+ throwables[i].active = false;
+ continue;
+ }
+
+ if (throwables[i].alive_time >= get_throwable_fly_time(b.type)) {
if (throwables[i].state == THROWABLE_FLYING) {
add_throwable_audio_event_to_queue(EVENT_EXPLODE_THROWABLE, b.type, b.player_id, b.position);
switch(b.type) {
case THROWABLE_GRENADE: explode_grenade(b); break;
+ case THROWABLE_MOLOTOV: explode_molotov(b); break;
}
}
throwables[i].state = THROWABLE_EXPLODED;
update_sprite(&throwables[i].sprite);
- }
- if (throwables[i].alive_time >= 3.2f) {
- throwables[i].active = false;
continue;
}
@@ -184,7 +215,7 @@ void draw_throwables(platform_window* window) {
sprite_frame frame = sprite_get_frame(&throwables[i].sprite);
- renderer->render_image_quad_partial(img_grenade_explode,
+ renderer->render_image_quad_partial(get_throwable_explosion_from_type(t.type),
box.tl_u.x, box.tl_u.y,
box.bl_d.x, box.bl_d.y,
box.br_d.x, box.br_d.y,