From ee4714ccff99414f19b6cce42e9fe53d2a867a15 Mon Sep 17 00:00:00 2001 From: Aldrik Ramaekers Date: Tue, 2 Jan 2024 20:31:29 +0100 Subject: zombie sprite --- build/data/imgs/objects/metal_wall_window.png | Bin 0 -> 1883 bytes build/data/imgs/players/alien_run.png | Bin 0 -> 1835 bytes build/data/maps/map1.dat | Bin 8322408 -> 8322408 bytes build/zombies.exe | Bin 2110845 -> 2110414 bytes data/imgs/objects/metal_wall_window.png | Bin 0 -> 1883 bytes data/imgs/players/Blue/Gunner_Blue_Crouch.png | Bin 0 -> 1496 bytes data/imgs/players/Blue/Gunner_Blue_Death.png | Bin 0 -> 3615 bytes data/imgs/players/Blue/Gunner_Blue_Idle.png | Bin 0 -> 1600 bytes data/imgs/players/Blue/Gunner_Blue_Jump.png | Bin 0 -> 1183 bytes data/imgs/players/Blue/Gunner_Blue_Run.png | Bin 0 -> 2471 bytes data/imgs/players/alien_run.png | Bin 0 -> 1835 bytes data/maps/map1.dat | Bin 8322408 -> 8322408 bytes include/asset_defs.h | 1 + include/sprite.h | 2 ++ include/zombies.h | 2 ++ src/asset_defs.c | 1 + src/sprite.c | 24 ++++++++++++++++++++---- src/zombies.c | 26 +++++++++++++++++++++----- 18 files changed, 47 insertions(+), 9 deletions(-) create mode 100644 build/data/imgs/objects/metal_wall_window.png create mode 100644 build/data/imgs/players/alien_run.png create mode 100644 data/imgs/objects/metal_wall_window.png create mode 100644 data/imgs/players/Blue/Gunner_Blue_Crouch.png create mode 100644 data/imgs/players/Blue/Gunner_Blue_Death.png create mode 100644 data/imgs/players/Blue/Gunner_Blue_Idle.png create mode 100644 data/imgs/players/Blue/Gunner_Blue_Jump.png create mode 100644 data/imgs/players/Blue/Gunner_Blue_Run.png create mode 100644 data/imgs/players/alien_run.png diff --git a/build/data/imgs/objects/metal_wall_window.png b/build/data/imgs/objects/metal_wall_window.png new file mode 100644 index 0000000..25938a2 Binary files /dev/null and b/build/data/imgs/objects/metal_wall_window.png differ diff --git a/build/data/imgs/players/alien_run.png b/build/data/imgs/players/alien_run.png new file mode 100644 index 0000000..6d624c4 Binary files /dev/null and b/build/data/imgs/players/alien_run.png differ diff --git a/build/data/maps/map1.dat b/build/data/maps/map1.dat index 0c2f19a..aef35fc 100644 Binary files a/build/data/maps/map1.dat and b/build/data/maps/map1.dat differ diff --git a/build/zombies.exe b/build/zombies.exe index 324f8e8..a07e1fd 100644 Binary files a/build/zombies.exe and b/build/zombies.exe differ diff --git a/data/imgs/objects/metal_wall_window.png b/data/imgs/objects/metal_wall_window.png new file mode 100644 index 0000000..25938a2 Binary files /dev/null and b/data/imgs/objects/metal_wall_window.png differ diff --git a/data/imgs/players/Blue/Gunner_Blue_Crouch.png b/data/imgs/players/Blue/Gunner_Blue_Crouch.png new file mode 100644 index 0000000..7c86829 Binary files /dev/null and b/data/imgs/players/Blue/Gunner_Blue_Crouch.png differ diff --git a/data/imgs/players/Blue/Gunner_Blue_Death.png b/data/imgs/players/Blue/Gunner_Blue_Death.png new file mode 100644 index 0000000..bce1a15 Binary files /dev/null and b/data/imgs/players/Blue/Gunner_Blue_Death.png differ diff --git a/data/imgs/players/Blue/Gunner_Blue_Idle.png b/data/imgs/players/Blue/Gunner_Blue_Idle.png new file mode 100644 index 0000000..7f05bb1 Binary files /dev/null and b/data/imgs/players/Blue/Gunner_Blue_Idle.png differ diff --git a/data/imgs/players/Blue/Gunner_Blue_Jump.png b/data/imgs/players/Blue/Gunner_Blue_Jump.png new file mode 100644 index 0000000..c28a071 Binary files /dev/null and b/data/imgs/players/Blue/Gunner_Blue_Jump.png differ diff --git a/data/imgs/players/Blue/Gunner_Blue_Run.png b/data/imgs/players/Blue/Gunner_Blue_Run.png new file mode 100644 index 0000000..133cf41 Binary files /dev/null and b/data/imgs/players/Blue/Gunner_Blue_Run.png differ diff --git a/data/imgs/players/alien_run.png b/data/imgs/players/alien_run.png new file mode 100644 index 0000000..6d624c4 Binary files /dev/null and b/data/imgs/players/alien_run.png differ diff --git a/data/maps/map1.dat b/data/maps/map1.dat index 0c2f19a..aef35fc 100644 Binary files a/data/maps/map1.dat and b/data/maps/map1.dat differ diff --git a/include/asset_defs.h b/include/asset_defs.h index d75a3ee..13e1e54 100644 --- a/include/asset_defs.h +++ b/include/asset_defs.h @@ -44,6 +44,7 @@ image* img_molotov_explode; // Players image* img_helmet; image* img_body; +image* img_alien_run; // Guns image* img_gun_mp5; diff --git a/include/sprite.h b/include/sprite.h index af98d32..c203595 100644 --- a/include/sprite.h +++ b/include/sprite.h @@ -13,6 +13,7 @@ typedef struct t_sprite { int img_width; int img_height; int frame_start; + float zoom; } sprite; typedef struct t_sprite_frame { @@ -25,6 +26,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); void sprite_set_current_frame(sprite* sprite, int index); +sprite_frame sprite_swap_frame_horizontally(sprite_frame frame); sprite_frame sprite_get_frame(image* img, sprite* sprite); #endif \ No newline at end of file diff --git a/include/zombies.h b/include/zombies.h index 9c1b68d..a9d8a5c 100644 --- a/include/zombies.h +++ b/include/zombies.h @@ -24,6 +24,8 @@ typedef struct t_zombie { pathfinding_request request; vec2f next2tiles[2]; zombie_type type; + sprite sprite_run; + vec2f dir; } zombie; typedef struct t_spawner { diff --git a/src/asset_defs.c b/src/asset_defs.c index 34c3758..ac414e2 100644 --- a/src/asset_defs.c +++ b/src/asset_defs.c @@ -47,6 +47,7 @@ void load_assets() { // Players img_helmet = assets_load_image_from_file("data/imgs/players/helmet.png"); img_body = assets_load_image_from_file("data/imgs/players/body.png"); + img_alien_run = assets_load_image_from_file("data/imgs/players/alien_run.png"); // Guns img_gun_mp5 = assets_load_image_from_file("data/imgs/guns/mp5.png"); diff --git a/src/sprite.c b/src/sprite.c index 30307ae..5818ebf 100644 --- a/src/sprite.c +++ b/src/sprite.c @@ -11,6 +11,7 @@ sprite create_sprite(image* img, int frame_count, int fwidth, int fheight, float s.sec_per_frame = sec_per_frame; s.time = 0.0f; s.frame_start = 0; + s.zoom = 1.0f; return s; } @@ -42,10 +43,13 @@ sprite_frame sprite_get_frame(image* img, sprite* sprite) { int column = (sprite->frame_start + sprite->current_frame) % columns; int row = (sprite->frame_start + sprite->current_frame) / columns; - frame.tl = (vec2f){column * column_percentage, row * row_percentage}; - frame.tr = (vec2f){column * column_percentage + column_percentage, row * row_percentage}; - frame.bl = (vec2f){column * column_percentage, row * row_percentage + row_percentage}; - frame.br = (vec2f){column * column_percentage + column_percentage, row * row_percentage + row_percentage}; + float offsetx = column_percentage * (sprite->zoom-1.0f); + float offsety = row_percentage * (sprite->zoom-1.0f); + + frame.tl = (vec2f){column * column_percentage + offsetx, row * row_percentage + offsety}; + frame.tr = (vec2f){column * column_percentage + column_percentage - offsetx, row * row_percentage + offsety}; + frame.bl = (vec2f){column * column_percentage + offsetx, row * row_percentage + row_percentage - offsety}; + frame.br = (vec2f){column * column_percentage + column_percentage - offsetx, row * row_percentage + row_percentage - offsety}; /* frame.tl = (vec2f){0,0}; @@ -54,4 +58,16 @@ sprite_frame sprite_get_frame(image* img, sprite* sprite) { frame.br = (vec2f){0.25f,0.25f}; */ return frame; +} + +sprite_frame sprite_swap_frame_horizontally(sprite_frame frame) { + vec2f tl = frame.tr; + vec2f tr = frame.tl; + vec2f bl = frame.br; + vec2f br = frame.bl; + frame.tl = tl; + frame.tr = tr; + frame.bl = bl; + frame.br = br; + return frame; } \ No newline at end of file diff --git a/src/zombies.c b/src/zombies.c index c7d4c2d..3a28d5d 100644 --- a/src/zombies.c +++ b/src/zombies.c @@ -86,10 +86,12 @@ void spawn_zombie(int x, int y) { zombies[i].type = ZOMBIE_TYPE_NORMAL; zombies[i].health = 1000.0f; zombies[i].position = (vec3f){x,y, 0}; - zombies[i].size = (vec3f){0.4, 0.4, 1}; + zombies[i].size = (vec3f){1.5f, 1.5f, 1.5f}; zombies[i].time_since_last_path = 0.0f; zombies[i].request.to_fill = &zombies[i].next_path; zombies[i].request.mutex = mutex_create(); + zombies[i].sprite_run = create_sprite(img_alien_run, 6, 32, 32, 0.1f); + zombies[i].sprite_run.zoom = 1.20f; _current_round.zombies--; @@ -252,6 +254,8 @@ void update_zombies_server(platform_window* window) { zombie o = zombies[i]; if (!o.alive) continue; + update_sprite(&zombies[i].sprite_run); + zombies[i].time_since_last_path += SERVER_TICK_RATE; if (zombies[i].time_since_last_path > SERVER_PATHFINDING_INTERVAL) { player closest_player = get_closest_player_to_tile((int)o.position.x, (int)o.position.y); @@ -290,6 +294,7 @@ void update_zombies_server(platform_window* window) { zombies[i].position.x += dir.x*speed; zombies[i].position.y += dir.y*speed; zombies[i].position.z = height; + zombies[i].dir = dir; zombies[i].next2tiles[0] = (vec2f){-1,-1}; zombies[i].next2tiles[1] = (vec2f){-1,-1}; @@ -310,11 +315,22 @@ void draw_zombies(platform_window* window) { zombie o = zombies[i]; if (!o.alive) continue; + sprite_frame frame = sprite_get_frame(img_alien_run, &o.sprite_run); box box = get_render_box_of_square(window, (vec3f){o.position.x, o.position.y, o.position.z}, o.size); - render_quad_with_outline(box.tl_d, box.tr_d, box.bl_d, box.br_d, rgb(200,200,0)); - render_quad_with_outline(box.tl_u, box.tr_u, box.bl_u, box.br_u, rgb(200,200,0)); - render_quad_with_outline(box.tl_u, box.tl_d, box.bl_u, box.bl_d, rgb(200,200,0)); - render_quad_with_outline(box.bl_u, box.br_u, box.bl_d, box.br_d, rgb(200,200,0)); + vec2f zombie_pos = world_pos_to_screen_pos(window, o.position.x, o.position.y, o.position.z); + float zombie_size = o.size.x * get_tile_width(window); + + float rads = -atan2(o.dir.x, o.dir.y); + if (rads >= 0.0f) { + frame = sprite_swap_frame_horizontally(frame); + } + + renderer->render_image_quad_partial(img_alien_run, + zombie_pos.x, zombie_pos.y, + zombie_pos.x, zombie_pos.y + zombie_size, + zombie_pos.x + zombie_size, zombie_pos.y + zombie_size, + zombie_pos.x + zombie_size, zombie_pos.y, + frame.tl, frame.tr, frame.bl, frame.br); if (global_state.server) draw_path_of_zombie(window, o); } -- cgit v1.2.3-70-g09d2