… | |
… | |
1643 | |
1643 | |
1644 | arrow->set_owner (op); |
1644 | arrow->set_owner (op); |
1645 | arrow->skill = bow->skill; |
1645 | arrow->skill = bow->skill; |
1646 | arrow->direction = dir; |
1646 | arrow->direction = dir; |
1647 | |
1647 | |
|
|
1648 | arrow->stats.sp = arrow->stats.wc; /* save original wc, dam, attacktype and slaying */ |
|
|
1649 | arrow->stats.hp = arrow->stats.dam; |
|
|
1650 | arrow->stats.grace = arrow->attacktype; |
|
|
1651 | |
|
|
1652 | if (arrow->slaying) |
|
|
1653 | arrow->spellarg = strdup (arrow->slaying); |
|
|
1654 | |
1648 | if (op->type == PLAYER) |
1655 | if (op->type == PLAYER) |
1649 | { |
1656 | { |
1650 | op->speed_left = 0.01 - (float) FABS (op->speed) * 100 / bowspeed; |
1657 | op->speed_left = 0.01 - (float) FABS (op->speed) * 100 / bowspeed; |
1651 | op->update_stats (); |
1658 | op->update_stats (); |
1652 | } |
1659 | } |
1653 | |
1660 | |
1654 | SET_ANIMATION (arrow, arrow->direction); |
1661 | SET_ANIMATION (arrow, arrow->direction); |
1655 | |
|
|
1656 | arrow->stats.sp = arrow->stats.wc; /* save original wc and dam */ |
|
|
1657 | arrow->stats.hp = arrow->stats.dam; |
|
|
1658 | arrow->stats.grace = arrow->attacktype; |
|
|
1659 | |
|
|
1660 | if (arrow->slaying) |
|
|
1661 | arrow->spellarg = strdup (arrow->slaying); |
|
|
1662 | |
1662 | |
1663 | arrow->stats.dam += op->stats.dam + arrow->magic; |
1663 | arrow->stats.dam += op->stats.dam + arrow->magic; |
1664 | |
1664 | |
1665 | /* update the speed */ |
1665 | /* update the speed */ |
1666 | arrow->speed = (float) ((QUERY_FLAG (bow, FLAG_NO_STRENGTH) ? |
1666 | arrow->speed = (float) ((QUERY_FLAG (bow, FLAG_NO_STRENGTH) ? |
… | |
… | |
1676 | arrow->level = op->chosen_skill ? op->chosen_skill->level : op->level; |
1676 | arrow->level = op->chosen_skill ? op->chosen_skill->level : op->level; |
1677 | arrow->stats.wc -= dex_bonus[op->stats.Dex]; |
1677 | arrow->stats.wc -= dex_bonus[op->stats.Dex]; |
1678 | |
1678 | |
1679 | if (!arrow->slaying) |
1679 | if (!arrow->slaying) |
1680 | arrow->slaying = op->slaying; |
1680 | arrow->slaying = op->slaying; |
|
|
1681 | |
|
|
1682 | arrow->attacktype |= op->attacktype; |
1681 | } |
1683 | } |
1682 | else |
1684 | else |
1683 | { |
1685 | { |
1684 | arrow->level = op->level; |
1686 | arrow->level = op->level; |
1685 | arrow->stats.wc -= bow->magic; |
1687 | arrow->stats.wc -= bow->magic; |
1686 | |
1688 | |
1687 | if (!arrow->slaying) |
1689 | if (!arrow->slaying) |
1688 | arrow->slaying = bow->slaying; |
1690 | arrow->slaying = bow->slaying; |
|
|
1691 | |
|
|
1692 | arrow->attacktype |= bow->attacktype; |
1689 | } |
1693 | } |
1690 | |
1694 | |
1691 | arrow->stats.wc -= arrow->level; |
1695 | arrow->stats.wc -= arrow->level; |
1692 | |
|
|
1693 | arrow->attacktype |= bow->attacktype; |
|
|
1694 | |
1696 | |
1695 | arrow->move_type = MOVE_FLY_LOW; |
1697 | arrow->move_type = MOVE_FLY_LOW; |
1696 | arrow->move_on = MOVE_FLY_LOW | MOVE_WALK; |
1698 | arrow->move_on = MOVE_FLY_LOW | MOVE_WALK; |
1697 | |
1699 | |
1698 | play_sound_map (op->map, op->x, op->y, SOUND_FIRE_ARROW); |
1700 | play_sound_map (op->map, op->x, op->y, SOUND_FIRE_ARROW); |