diff options
| -rw-r--r-- | build/data/imgs/throwables/molotov_explode.png | bin | 0 -> 284297 bytes | |||
| -rw-r--r-- | build/data/sounds/fire.wav | bin | 0 -> 1563214 bytes | |||
| -rw-r--r-- | build/data/sounds/molotov_explode.wav | bin | 0 -> 178878 bytes | |||
| -rw-r--r-- | build/zombies.exe | bin | 2000459 -> 2001751 bytes | |||
| -rw-r--r-- | data/imgs/throwables/molotov_explode.png | bin | 0 -> 284297 bytes | |||
| -rw-r--r-- | data/sounds/fire.wav | bin | 0 -> 1563214 bytes | |||
| -rw-r--r-- | data/sounds/molotov_explode.wav | bin | 0 -> 178878 bytes | |||
| -rw-r--r-- | include/asset_defs.h | 4 | ||||
| -rw-r--r-- | include/audio.h | 2 | ||||
| -rw-r--r-- | include/math_helper.h | 2 | ||||
| -rw-r--r-- | src/asset_defs.c | 3 | ||||
| -rw-r--r-- | src/audio.c | 2 | ||||
| -rw-r--r-- | src/throwables.c | 59 |
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 Binary files differnew file mode 100644 index 0000000..365211a --- /dev/null +++ b/build/data/imgs/throwables/molotov_explode.png diff --git a/build/data/sounds/fire.wav b/build/data/sounds/fire.wav Binary files differnew file mode 100644 index 0000000..900d6d1 --- /dev/null +++ b/build/data/sounds/fire.wav diff --git a/build/data/sounds/molotov_explode.wav b/build/data/sounds/molotov_explode.wav Binary files differnew file mode 100644 index 0000000..fba72bb --- /dev/null +++ b/build/data/sounds/molotov_explode.wav diff --git a/build/zombies.exe b/build/zombies.exe Binary files differindex b6202ec..02bcfcd 100644 --- a/build/zombies.exe +++ b/build/zombies.exe diff --git a/data/imgs/throwables/molotov_explode.png b/data/imgs/throwables/molotov_explode.png Binary files differnew file mode 100644 index 0000000..365211a --- /dev/null +++ b/data/imgs/throwables/molotov_explode.png diff --git a/data/sounds/fire.wav b/data/sounds/fire.wav Binary files differnew file mode 100644 index 0000000..900d6d1 --- /dev/null +++ b/data/sounds/fire.wav diff --git a/data/sounds/molotov_explode.wav b/data/sounds/molotov_explode.wav Binary files differnew file mode 100644 index 0000000..fba72bb --- /dev/null +++ b/data/sounds/molotov_explode.wav 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, |
