… | |
… | |
1654 | } |
1654 | } |
1655 | |
1655 | |
1656 | /* Received a fire command for the player - go and do it. |
1656 | /* Received a fire command for the player - go and do it. |
1657 | */ |
1657 | */ |
1658 | bool |
1658 | bool |
1659 | fire (object *op, int dir) |
1659 | fire (object *who, int dir) |
1660 | { |
1660 | { |
1661 | int spellcost = 0; |
1661 | int spellcost = 0; |
1662 | |
1662 | |
1663 | player *pl = op->contr; |
1663 | player *pl = who->contr; |
1664 | |
1664 | |
1665 | if (pl->golem) |
1665 | if (pl->golem) |
1666 | { |
1666 | { |
1667 | control_golem (op->contr->golem, dir); |
1667 | control_golem (who->contr->golem, dir); |
1668 | return false; |
1668 | return false; |
1669 | } |
1669 | } |
1670 | |
1670 | |
1671 | object *ob = pl->ranged_ob; |
1671 | object *ob = pl->ranged_ob; |
1672 | |
1672 | |
1673 | if (!ob) |
1673 | if (!ob) |
1674 | return false; |
1674 | return false; |
1675 | |
1675 | |
1676 | if (op->speed_left > 0.f) |
1676 | if (who->speed_left > 0.f) |
1677 | --op->speed_left; |
1677 | --who->speed_left; |
1678 | else |
1678 | else |
1679 | return false; |
1679 | return false; |
1680 | |
1680 | |
1681 | if (!op->apply (ob)) |
1681 | if (!who->apply (ob)) |
1682 | return false; |
1682 | return false; |
1683 | |
1683 | |
1684 | /* check for loss of invisiblity/hide */ |
1684 | /* check for loss of invisiblity/hide */ |
1685 | if (action_makes_visible (op)) |
1685 | if (action_makes_visible (who)) |
1686 | make_visible (op); |
1686 | make_visible (who); |
1687 | |
1687 | |
1688 | switch (ob->type) |
1688 | switch (ob->type) |
1689 | { |
1689 | { |
1690 | case BOW: |
1690 | case BOW: |
1691 | player_fire_bow (op, dir); |
1691 | player_fire_bow (who, dir); |
1692 | break; |
1692 | break; |
1693 | |
1693 | |
1694 | case SPELL: |
1694 | case SPELL: |
1695 | spellcost = cast_spell (op, op, dir, ob, *pl->spellparam ? pl->spellparam : 0); |
1695 | spellcost = cast_spell (who, who, dir, ob, *pl->spellparam ? pl->spellparam : 0); |
1696 | break; |
1696 | break; |
1697 | |
1697 | |
1698 | case BUILDER: |
1698 | case BUILDER: |
1699 | apply_map_builder (op, dir); |
1699 | apply_map_builder (who, dir); |
1700 | break; |
1700 | break; |
1701 | |
1701 | |
1702 | case SKILL: |
1702 | case SKILL: |
1703 | do_skill (op, op, ob, dir, 0); |
1703 | do_skill (who, who, ob, dir, 0); |
1704 | break; |
1704 | break; |
1705 | |
1705 | |
1706 | case RANGED: |
1706 | case RANGED: |
1707 | //TODO: use skill to fire (do_skill_fire?) |
1707 | do_skill (who, ob, who->chosen_skill, dir, 0); |
1708 | break; |
1708 | break; |
1709 | |
1709 | |
1710 | default: |
1710 | default: |
1711 | fire_misc_object (op, dir); |
1711 | fire_misc_object (who, dir); |
1712 | break; |
1712 | break; |
1713 | } |
1713 | } |
1714 | |
1714 | |
1715 | return true; |
1715 | return true; |
1716 | } |
1716 | } |