X-Git-Url: https://plomlompom.com/repos/index.html?a=blobdiff_plain;f=src%2Fserver%2Fai.c;h=9e317a18543ad769086473d3d899984aa7f3f8ac;hb=b3c95117ef622d1bb9f1c663b1d1b0c41755ce9b;hp=c6139287125f9881c1f0179b5e8b35225cfa4dda;hpb=fa4a1c651a7b5221780fc7c6ddc1fdc17bc8a0bb;p=plomrogue
diff --git a/src/server/ai.c b/src/server/ai.c
index c613928..9e317a1 100644
--- a/src/server/ai.c
+++ b/src/server/ai.c
@@ -39,6 +39,9 @@ static void dijkstra_map(uint16_t * score_map, uint16_t max_score);
*/
static char get_dir_to_nearest_enemy(struct Thing * thing_origin);
+/* Return 1 if any animate thing not "t_origin" is in its field of view. */
+static uint8_t seeing_enemies(struct Thing * t_origin);
+
static void get_neighbor_scores(uint16_t * score_map, uint16_t pos_i,
@@ -138,7 +141,8 @@ static char get_dir_to_nearest_enemy(struct Thing * t_origin)
struct Thing * t = world.things;
for (; t != NULL; t = t->next)
{
- if (!t->lifepoints || t == t_origin)
+ if ( !t->lifepoints || t == t_origin
+ || 'H' == t_origin->fov_map[t->pos.y * world.map.length + t->pos.x])
{
continue;
}
@@ -172,13 +176,33 @@ static char get_dir_to_nearest_enemy(struct Thing * t_origin)
+static uint8_t seeing_enemies(struct Thing * t_origin)
+{
+ struct Thing * t = world.things;
+ for (; t != NULL; t = t->next)
+ {
+ if ( t->lifepoints
+ && t != t_origin
+ && 'v' == t_origin->fov_map[t->pos.y * world.map.length + t->pos.x])
+ {
+ return 1;
+ }
+ }
+ return 0;
+}
+
+
+
extern void ai(struct Thing * t)
{
t->command = get_thing_action_id_by_name(s[S_CMD_WAIT]);
- char sel = t->fov_map ? get_dir_to_nearest_enemy(t) : 0;/* t->fov_map may */
- if (0 != sel) /* be absent due */
- { /* to god command.*/
- t->command = get_thing_action_id_by_name(s[S_CMD_MOVE]);
- t->arg = sel;
+ if (seeing_enemies(t))
+ {
+ char sel = t->fov_map ? get_dir_to_nearest_enemy(t) : 0;
+ if (0 != sel)
+ {
+ t->command = get_thing_action_id_by_name(s[S_CMD_MOVE]);
+ t->arg = sel;
+ }
}
}