From d018848939d1101df21515cb81f611f23c119d10 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Tue, 26 Dec 2023 16:04:38 +0100 Subject: body --- build/data/imgs/players/body.png | Bin 0 -> 77183 bytes build/zombies.exe | Bin 2106909 -> 2108487 bytes data/imgs/players/body.png | Bin 0 -> 77183 bytes data/psd/body.psd | Bin 0 -> 324637 bytes include/asset_defs.h | 4 ++- include/sprite.h | 3 ++- src/asset_defs.c | 3 ++- src/objects.c | 2 +- src/players.c | 53 ++++++++++++++++++++++++++++----------- src/sprite.c | 10 +++++++- src/throwables.c | 5 ++-- src/zombies.c | 2 +- 12 files changed, 59 insertions(+), 23 deletions(-) create mode 100644 build/data/imgs/players/body.png create mode 100644 data/imgs/players/body.png create mode 100644 data/psd/body.psd diff --git a/build/data/imgs/players/body.png b/build/data/imgs/players/body.png new file mode 100644 index 0000000..96ab485 Binary files /dev/null and b/build/data/imgs/players/body.png differ diff --git a/build/zombies.exe b/build/zombies.exe index b700aab..f09d198 100644 Binary files a/build/zombies.exe and b/build/zombies.exe differ diff --git a/data/imgs/players/body.png b/data/imgs/players/body.png new file mode 100644 index 0000000..96ab485 Binary files /dev/null and b/data/imgs/players/body.png differ diff --git a/data/psd/body.psd b/data/psd/body.psd new file mode 100644 index 0000000..901b7d0 Binary files /dev/null and b/data/psd/body.psd differ diff --git a/include/asset_defs.h b/include/asset_defs.h index ef40df0..c060a0b 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -15,6 +15,8 @@ font* fnt_20; font* fnt_16; font* fnt_12; +image* img_test; + // Icons image* img_icon_bullets; image* img_icon_nova; @@ -41,8 +43,8 @@ image* img_grenade_explode; image* img_molotov_explode; // Players -image* img_player_running; image* img_helmet; +image* img_body; // Other image* img_zombie_chunk_hand; diff --git a/include/sprite.h b/include/sprite.h index 251ceea..af98d32 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -24,6 +24,7 @@ typedef struct t_sprite_frame { sprite create_sprite(image* img, int frame_count, int fwidth, int fheight, float sec_per_frame); void update_sprite(sprite* sprite); -sprite_frame sprite_get_frame(sprite* sprite); +void sprite_set_current_frame(sprite* sprite, int index); +sprite_frame sprite_get_frame(image* img, sprite* sprite); #endif \ No newline at end of file diff --git a/src/asset_defs.c b/src/asset_defs.c index a44963f..bca99f4 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -30,6 +30,7 @@ void load_assets() { img_disconnected = assets_load_image_from_file("data/imgs/icons/disconnected.png"); img_icon_grenade = assets_load_image_from_file("data/imgs/icons/grenade.png"); img_icon_molotov = assets_load_image_from_file("data/imgs/icons/molotov.png"); + img_test = assets_load_image_from_file("data/imgs/players/body.png"); // Throwables img_grenade = assets_load_image_from_file("data/imgs/throwables/grenade.png"); @@ -43,8 +44,8 @@ void load_assets() { img_metal_wall_front = assets_load_image_from_file("data/imgs/objects/metal_wall_front.png"); // Players - img_player_running = assets_load_image_from_file("data/imgs/players/player1_running.png"); img_helmet = assets_load_image_from_file("data/imgs/players/helmet.png"); + img_body = assets_load_image_from_file("data/imgs/players/body.png"); // Other img_zombie_chunk_hand = assets_load_image_from_file("data/imgs/zombie_chunk_hand.png"); diff --git a/src/objects.c b/src/objects.c index 32a2dc7..fad613b 100644 --- a/src/objects.c +++ b/src/objects.c @@ -137,6 +137,6 @@ void create_objects() { create_spawner((vec2){15, 5}); create_spawner((vec2){3, 8}); */ - create_spawner((vec2){11, 18}); + //create_spawner((vec2){11, 18}); create_wallitem((vec3f){14, 1, 0}, WALLITEM_GUN, (wall_item_data){.gun = GUN_NOVA}); } \ No newline at end of file diff --git a/src/players.c b/src/players.c index 52e1e7c..c4f2c61 100644 --- a/src/players.c +++ b/src/players.c @@ -59,7 +59,7 @@ void spawn_player(u32 id, network_client client) { players[i].guntype = GUN_MP5; players[i].height = 0.0f; players[i].client = client; - players[i].sprite = create_sprite(img_player_running, 22, 108, 136, 0.02f); + players[i].sprite = create_sprite(img_body, 4, 256, 256, 0.0f); players[i].direction = DIRECTION_DOWN; players[i].connection_state = CONNECTED; players[i].throwables.grenades = 3; @@ -319,29 +319,29 @@ void update_players_client() { if (!players[i].active) continue; if (players[i].direction == DIRECTION_DOWN) { - players[i].sprite.frame_start = 374; + sprite_set_current_frame(&players[i].sprite, 0); } if (players[i].direction == DIRECTION_UP) { - players[i].sprite.frame_start = 0; + sprite_set_current_frame(&players[i].sprite, 1); } if (players[i].direction == DIRECTION_LEFT) { - players[i].sprite.frame_start = 660; + sprite_set_current_frame(&players[i].sprite, 2); } if (players[i].direction == DIRECTION_RIGHT) { - players[i].sprite.frame_start = 198; + sprite_set_current_frame(&players[i].sprite, 3); } if (players[i].direction == DIRECTION_TOPRIGHT) { - players[i].sprite.frame_start = 110; + sprite_set_current_frame(&players[i].sprite, 1); } if (players[i].direction == DIRECTION_TOPLEFT) { - players[i].sprite.frame_start = 506; + sprite_set_current_frame(&players[i].sprite, 1); } if (players[i].direction == DIRECTION_BOTTOMRIGHT) { - players[i].sprite.frame_start = 286; + sprite_set_current_frame(&players[i].sprite, 0); } if (players[i].direction == DIRECTION_BOTTOMLEFT) { - players[i].sprite.frame_start = 682; + sprite_set_current_frame(&players[i].sprite, 0); } @@ -464,13 +464,36 @@ void draw_player(platform_window* window, player* p, int index) { float player_render_x = player_pos.x; float player_render_y = player_pos.y; - float rads = -atan2(p->diry, p->dirx); - renderer->render_set_rotation(rads + M_PI); - renderer->render_image(img_helmet, player_render_x, player_render_y, size, size); - renderer->render_image_tint(img_helmet, + // Body + { + sprite_frame frame = sprite_get_frame(img_test, &p->sprite); + renderer->render_image_quad_partial(img_test, player_render_x, player_render_y, - size, size, get_color_tint_by_player_index(index)); - renderer->render_set_rotation(0.0f); + player_render_x, player_render_y + size, + player_render_x + size, player_render_y + size, + player_render_x + size, player_render_y, + frame.tl, frame.tr, frame.bl, frame.br); + + renderer->render_image_quad_partial_tint(img_test, + player_render_x, player_render_y, + player_render_x, player_render_y + size, + player_render_x + size, player_render_y + size, + player_render_x + size, player_render_y, + frame.tl, frame.tr, frame.bl, frame.br, get_color_tint_by_player_index(index)); + } + + player_render_y -= size*0.7; + + // Helmet + { + float rads = -atan2(p->diry, p->dirx); + renderer->render_set_rotation(rads + M_PI); + renderer->render_image(img_helmet, player_render_x, player_render_y, size, size); + renderer->render_image_tint(img_helmet, + player_render_x, player_render_y, + size, size, get_color_tint_by_player_index(index)); + renderer->render_set_rotation(0.0f); + } int name_x = player_render_x + (size)/2 - (renderer->calculate_text_width(fnt_20, name))/2; int name_y = player_render_y - fnt_20->px_h - 5; diff --git a/src/sprite.c b/src/sprite.c index c6ee82e..30307ae 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -16,6 +16,7 @@ sprite create_sprite(image* img, int frame_count, int fwidth, int fheight, float void update_sprite(sprite* sprite) { sprite->time += SERVER_TICK_RATE; + if (sprite->sec_per_frame == 0.0f) return; // sprite does not play. int frame = sprite->time / sprite->sec_per_frame; sprite->current_frame = frame; if (frame >= sprite->frame_count) { @@ -24,7 +25,14 @@ void update_sprite(sprite* sprite) { } } -sprite_frame sprite_get_frame(sprite* sprite) { +void sprite_set_current_frame(sprite* sprite, int index) { + sprite->current_frame = index; +} + +sprite_frame sprite_get_frame(image* img, sprite* sprite) { + sprite->img_width = img->width; + sprite->img_height = img->height; + sprite_frame frame = {0}; int columns = sprite->img_width / sprite->frame_width; int rows = sprite->img_height/ sprite->frame_height; diff --git a/src/throwables.c b/src/throwables.c index a950080..2ed5133 100644 --- a/src/throwables.c +++ b/src/throwables.c @@ -258,9 +258,10 @@ void draw_throwables(platform_window* window) { explode_location.y -= explosion_size.y/2; box box = get_render_box_of_square(window, explode_location, explosion_size); - sprite_frame frame = sprite_get_frame(&throwables[i].sprite); + image* img = get_throwable_explosion_from_type(t.type); + sprite_frame frame = sprite_get_frame(img, &throwables[i].sprite); - renderer->render_image_quad_partial(get_throwable_explosion_from_type(t.type), + renderer->render_image_quad_partial(img, box.tl_u.x, box.tl_u.y, box.bl_d.x, box.bl_d.y, box.br_d.x, box.br_d.y, diff --git a/src/zombies.c b/src/zombies.c index 1006e95..4abef22 100644 --- a/src/zombies.c +++ b/src/zombies.c @@ -125,7 +125,7 @@ void draw_spawners(platform_window* window) { tile tile = loaded_map.heightmap[spawner.position.y][spawner.position.x]; - sprite_frame frame = sprite_get_frame(&spawner.sprite); + sprite_frame frame = sprite_get_frame(img_spawner, &spawner.sprite); renderer->render_image_quad_partial(img_spawner, tile.tl.x, tile.tl.y, tile.bl.x, tile.bl.y, -- cgit v1.2.3-70-g09d2