summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAldrik Ramaekers <aldrik@amftech.nl>2024-01-02 20:31:29 +0100
committerAldrik Ramaekers <aldrik@amftech.nl>2024-01-02 20:31:29 +0100
commitee4714ccff99414f19b6cce42e9fe53d2a867a15 (patch)
tree708d2077e232c39d43a505573d9f1168b5132358
parent007335a39baff05fb7cabb07457cd5972a013fda (diff)
zombie sprite
-rw-r--r--build/data/imgs/objects/metal_wall_window.pngbin0 -> 1883 bytes
-rw-r--r--build/data/imgs/players/alien_run.pngbin0 -> 1835 bytes
-rw-r--r--build/data/maps/map1.datbin8322408 -> 8322408 bytes
-rw-r--r--build/zombies.exebin2110845 -> 2110414 bytes
-rw-r--r--data/imgs/objects/metal_wall_window.pngbin0 -> 1883 bytes
-rw-r--r--data/imgs/players/Blue/Gunner_Blue_Crouch.pngbin0 -> 1496 bytes
-rw-r--r--data/imgs/players/Blue/Gunner_Blue_Death.pngbin0 -> 3615 bytes
-rw-r--r--data/imgs/players/Blue/Gunner_Blue_Idle.pngbin0 -> 1600 bytes
-rw-r--r--data/imgs/players/Blue/Gunner_Blue_Jump.pngbin0 -> 1183 bytes
-rw-r--r--data/imgs/players/Blue/Gunner_Blue_Run.pngbin0 -> 2471 bytes
-rw-r--r--data/imgs/players/alien_run.pngbin0 -> 1835 bytes
-rw-r--r--data/maps/map1.datbin8322408 -> 8322408 bytes
-rw-r--r--include/asset_defs.h1
-rw-r--r--include/sprite.h2
-rw-r--r--include/zombies.h2
-rw-r--r--src/asset_defs.c1
-rw-r--r--src/sprite.c24
-rw-r--r--src/zombies.c26
18 files changed, 47 insertions, 9 deletions
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
--- /dev/null
+++ b/build/data/imgs/objects/metal_wall_window.png
Binary files 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
--- /dev/null
+++ b/build/data/imgs/players/alien_run.png
Binary files differ
diff --git a/build/data/maps/map1.dat b/build/data/maps/map1.dat
index 0c2f19a..aef35fc 100644
--- a/build/data/maps/map1.dat
+++ b/build/data/maps/map1.dat
Binary files differ
diff --git a/build/zombies.exe b/build/zombies.exe
index 324f8e8..a07e1fd 100644
--- a/build/zombies.exe
+++ b/build/zombies.exe
Binary files 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
--- /dev/null
+++ b/data/imgs/objects/metal_wall_window.png
Binary files 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
--- /dev/null
+++ b/data/imgs/players/Blue/Gunner_Blue_Crouch.png
Binary files 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
--- /dev/null
+++ b/data/imgs/players/Blue/Gunner_Blue_Death.png
Binary files 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
--- /dev/null
+++ b/data/imgs/players/Blue/Gunner_Blue_Idle.png
Binary files 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
--- /dev/null
+++ b/data/imgs/players/Blue/Gunner_Blue_Jump.png
Binary files 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
--- /dev/null
+++ b/data/imgs/players/Blue/Gunner_Blue_Run.png
Binary files differ
diff --git a/data/imgs/players/alien_run.png b/data/imgs/players/alien_run.png
new file mode 100644
index 0000000..6d624c4
--- /dev/null
+++ b/data/imgs/players/alien_run.png
Binary files differ
diff --git a/data/maps/map1.dat b/data/maps/map1.dat
index 0c2f19a..aef35fc 100644
--- a/data/maps/map1.dat
+++ b/data/maps/map1.dat
Binary files 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);
}