- set_shadow(left_angle, right_angle_1st, shadows, pos_in_map, fov_map);
- if (right_angle_1st != right_angle)
+ uint8_t all_shaded = shade_hex(left_angle, right_angle_1st, middle_angle,
+ shadows, pos_in_map, fov_map);
+ if (!all_shaded && 'X' == world.map.cells[pos_in_map])
+ {
+ set_shadow(left_angle, right_angle_1st, shadows);
+ if (right_angle_1st != right_angle)
+ {
+ left_angle = CIRCLE;
+ set_shadow(left_angle, right_angle, shadows);
+ }
+ }
+}
+
+
+
+static void add_things_to_map_memory(struct Thing * t_eye)
+{
+ struct ThingInMemory * tm = t_eye->t_mem;
+ struct ThingInMemory * tm_prev = NULL;
+ struct ThingInMemory * tm_next = NULL;
+ for (; tm; tm = tm_next)
+ {
+ tm_next = tm->next;
+ if ('v' == t_eye->fov_map[tm->pos.y * world.map.length + tm->pos.x])
+ {
+ if (tm_prev)
+ {
+ tm_prev->next = tm->next;
+ }
+ else
+ {
+ t_eye->t_mem = tm->next;
+ }
+ free(tm);
+ continue;
+ }
+ tm_prev = tm;
+ }
+ struct Thing * t = world.things;
+ for (; t; t = t->next)
+ {
+ if ( !t->lifepoints
+ && 'v' == t_eye->fov_map[t->pos.y * world.map.length + t->pos.x])
+ {
+ add_thing_to_memory_map(t_eye, t->type, t->pos.y, t->pos.x);
+ }
+ }
+}
+
+
+
+extern void update_map_memory(struct Thing * t_eye, uint8_t age_map)
+{
+ if (!t_eye->mem_map)
+ {
+ init_empty_map(&(t_eye->mem_map));
+ }
+ if (!t_eye->mem_depth_map)