--- deliantra/server/server/time.C 2006/09/16 22:24:13 1.13 +++ deliantra/server/server/time.C 2006/09/21 18:58:39 1.14 @@ -739,6 +739,7 @@ free_object (op); return; } + if (op->last_sp-- < 0) { stop_arrow (op); @@ -775,46 +776,46 @@ if (QUERY_FLAG (tmp, FLAG_ALIVE)) break; - /* Not really fair, but don't let monsters hit themselves with * their own arrow - this can be because they fire it then * move into it. */ - - if (tmp != NULL && tmp != op->owner) + if (tmp && tmp != op->owner) { /* Found living object, but it is reflecting the missile. Update * as below. (Note that for living creatures there is a small * chance that reflect_missile fails.) */ - if (QUERY_FLAG (tmp, FLAG_REFL_MISSILE) && (rndm (0, 99)) < (90 - op->level / 10)) { - int number = op->face->number; op->direction = absdir (op->direction + 4); op->state = 0; + if (GET_ANIM_ID (op)) { number += 4; + if (number > GET_ANIMATION (op, 8)) number -= 8; + op->face = &new_faces[number]; } + was_reflected = 1; /* skip normal movement calculations */ } else { /* Attack the object. */ op = hit_with_arrow (op, tmp); - if (op == NULL) + + if (!op) return; } } /* if this is not hitting its owner */ } /* if there is something alive on this space */ - if (OB_TYPE_MOVE_BLOCK (op, GET_MAP_MOVE_BLOCK (m, new_x, new_y))) { int retry = 0;