diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/char/enemy.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/src/char/enemy.c b/src/char/enemy.c index f8e91a3..e51e440 100644 --- a/src/char/enemy.c +++ b/src/char/enemy.c @@ -52,6 +52,7 @@ _mf_enemy_step(struct mf_char *c) enum _mf_char_dir back; int dx; int dy; + struct mf_char *o; /* Shuffle directions */ for (i = 0; i < 4; ++i) { @@ -89,9 +90,21 @@ _mf_enemy_step(struct mf_char *c) /* Wall ahead; don't go this direction. */ continue; } + for (o = c; o != NULL; o = ((struct mf_enemy *) o)->next_enemy){ + if (o->cur_x == c->cur_x+dx && o->cur_y == c->cur_y+dy){ + /* Another enemy currently in this direction */ + goto next_dir; + } + if (o->new_x == c->cur_x+dx && o->new_y == c->cur_y+dy){ + /* Another enemy moving in this direction */ + goto next_dir; + } + } /* Move */ c->new_dir = dirs[i]; return 0; + next_dir: + continue; } return 0; |