summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--data/maps/map1.datbin8384008 -> 8384008 bytes
-rw-r--r--include/zombies.h5
-rw-r--r--src/players.c2
-rw-r--r--src/zombies.c26
4 files changed, 31 insertions, 2 deletions
diff --git a/data/maps/map1.dat b/data/maps/map1.dat
index fd020cf..d159157 100644
--- a/data/maps/map1.dat
+++ b/data/maps/map1.dat
Binary files differ
diff --git a/include/zombies.h b/include/zombies.h
index 5c6d252..85f66df 100644
--- a/include/zombies.h
+++ b/include/zombies.h
@@ -43,7 +43,10 @@ typedef struct t_spawner {
sprite sprite;
} spawner;
-#define MAX_SPAWNERS (5)
+// Despawn distance.
+#define MAX_DISTANCE_BETWEEN_ZOMBIE_AND_PLAYER 40
+
+#define MAX_SPAWNERS (25)
spawner spawner_tiles[MAX_SPAWNERS] = {0};
#define SERVER_MAX_ZOMBIES (50)
diff --git a/src/players.c b/src/players.c
index b4b744d..b5d0666 100644
--- a/src/players.c
+++ b/src/players.c
@@ -128,7 +128,7 @@ void add_points_to_player(player* p, u32 points) {
void move_user(platform_window* window, u32 id, protocol_move_type move, float delta) {
- float speed_straight = 15.5f;
+ float speed_straight = 5.5f;
float speed = speed_straight * delta;
float pad_between_player_and_obj = 0.01f;
diff --git a/src/zombies.c b/src/zombies.c
index 1e3e05b..3bad715 100644
--- a/src/zombies.c
+++ b/src/zombies.c
@@ -183,7 +183,26 @@ void spawn_zombie(int x, int y) {
}
}
+static void despawn_far_zombies_server()
+{
+ for (int i = 0; i < SERVER_MAX_ZOMBIES; i++) {
+ zombie o = zombies[i];
+ if (!o.alive) continue;
+
+ float dist = 0.0f;
+ player p = get_closest_player_to_tile_x(o.position.x, o.position.y, &dist);
+ if (dist >= MAX_DISTANCE_BETWEEN_ZOMBIE_AND_PLAYER)
+ {
+ zombies[i].alive = 0;
+ _current_round.zombies++;
+ log_infox("Despawned zombie %d", i);
+ }
+ }
+}
+
void update_spawners_server() {
+ despawn_far_zombies_server();
+
for (int x = 0; x < MAX_SPAWNERS; x++) {
spawner spawner = spawner_tiles[x];
if (!spawner.active) continue;
@@ -191,6 +210,13 @@ void update_spawners_server() {
spawner_tiles[x].sec_since_last_spawn += SERVER_TICK_RATE;
if (zombies_left_in_current_round() <= 0) continue;
if (spawner_tiles[x].sec_since_last_spawn >= 1.0f) {
+
+ float dist = 0.0f;
+ player p = get_closest_player_to_tile_x(spawner.position.x, spawner.position.y, &dist);
+ if (dist >= MAX_DISTANCE_BETWEEN_ZOMBIE_AND_PLAYER) {
+ continue;
+ }
+
spawn_zombie(spawner.position.x, spawner.position.y);
spawner_tiles[x].sec_since_last_spawn = 0;
}