… | |
… | |
487 | } |
487 | } |
488 | |
488 | |
489 | if (!head) |
489 | if (!head) |
490 | head = tmp; |
490 | head = tmp; |
491 | |
491 | |
492 | tmp->x = op->x + freearr_x[dir] + tmp->arch->clone.x; |
492 | tmp->x = op->x + freearr_x[dir] + tmp->arch->x; |
493 | tmp->y = op->y + freearr_y[dir] + tmp->arch->clone.y; |
493 | tmp->y = op->y + freearr_y[dir] + tmp->arch->y; |
494 | tmp->map = op->map; |
494 | tmp->map = op->map; |
495 | |
495 | |
496 | if (tmp->invisible) |
496 | if (tmp->invisible) |
497 | tmp->invisible = 0; |
497 | tmp->invisible = 0; |
498 | |
498 | |
… | |
… | |
677 | LOG (llevError, "Spell %s lacks other_arch\n", &spob->name); |
677 | LOG (llevError, "Spell %s lacks other_arch\n", &spob->name); |
678 | return 0; |
678 | return 0; |
679 | } |
679 | } |
680 | |
680 | |
681 | if (!dir) |
681 | if (!dir) |
682 | dir = find_free_spot (&at->clone, op->map, op->x, op->y, 1, SIZEOFFREE1 + 1); |
682 | dir = find_free_spot (at, op->map, op->x, op->y, 1, SIZEOFFREE1 + 1); |
683 | |
683 | |
684 | if (dir < 0 || ob_blocked (&at->clone, op->map, op->x + freearr_x[dir], op->y + freearr_y[dir])) |
684 | if (dir < 0 || ob_blocked (at, op->map, op->x + freearr_x[dir], op->y + freearr_y[dir])) |
685 | { |
685 | { |
686 | new_draw_info (NDI_UNIQUE, 0, op, "There is something in the way."); |
686 | new_draw_info (NDI_UNIQUE, 0, op, "There is something in the way."); |
687 | return 0; |
687 | return 0; |
688 | } |
688 | } |
689 | |
689 | |
… | |
… | |
992 | { |
992 | { |
993 | ndir = dir; |
993 | ndir = dir; |
994 | dir = absdir (dir + 1); |
994 | dir = absdir (dir + 1); |
995 | } |
995 | } |
996 | else |
996 | else |
997 | ndir = find_free_spot (&summon_arch->clone, op->map, op->x, op->y, 1, SIZEOFFREE); |
997 | ndir = find_free_spot (summon_arch, op->map, op->x, op->y, 1, SIZEOFFREE); |
998 | |
998 | |
999 | if (ndir > 0) |
999 | if (ndir > 0) |
1000 | { |
1000 | { |
1001 | x = freearr_x[ndir]; |
1001 | x = freearr_x[ndir]; |
1002 | y = freearr_y[ndir]; |
1002 | y = freearr_y[ndir]; |
1003 | } |
1003 | } |
1004 | |
1004 | |
1005 | if (ndir < 0 || ob_blocked (&summon_arch->clone, op->map, op->x + x, op->y + y)) |
1005 | if (ndir < 0 || ob_blocked (summon_arch, op->map, op->x + x, op->y + y)) |
1006 | { |
1006 | { |
1007 | new_draw_info (NDI_UNIQUE, 0, op, "There is something in the way."); |
1007 | new_draw_info (NDI_UNIQUE, 0, op, "There is something in the way."); |
1008 | if (nrof > 1) |
1008 | if (nrof > 1) |
1009 | new_draw_info (NDI_UNIQUE, 0, op, "No more pets for this casting."); |
1009 | new_draw_info (NDI_UNIQUE, 0, op, "No more pets for this casting."); |
1010 | |
1010 | |
… | |
… | |
1052 | tmp->head = head; |
1052 | tmp->head = head; |
1053 | prev->more = tmp; |
1053 | prev->more = tmp; |
1054 | } |
1054 | } |
1055 | |
1055 | |
1056 | prev = tmp; |
1056 | prev = tmp; |
1057 | tmp->x = op->x + x + tmp->arch->clone.x; |
1057 | tmp->x = op->x + x + tmp->arch->x; |
1058 | tmp->y = op->y + y + tmp->arch->clone.y; |
1058 | tmp->y = op->y + y + tmp->arch->y; |
1059 | tmp->map = op->map; |
1059 | tmp->map = op->map; |
1060 | } |
1060 | } |
1061 | |
1061 | |
1062 | head->direction = freedir[ndir]; |
1062 | head->direction = freedir[ndir]; |
1063 | head->stats.exp = 0; |
1063 | head->stats.exp = 0; |