… | |
… | |
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: |
|
|
1707 | do_skill (who, ob, who->chosen_skill, dir, 0); |
|
|
1708 | break; |
|
|
1709 | |
1706 | default: |
1710 | default: |
1707 | fire_misc_object (op, dir); |
1711 | fire_misc_object (who, dir); |
1708 | break; |
1712 | break; |
1709 | } |
1713 | } |
1710 | |
1714 | |
1711 | return true; |
1715 | return true; |
1712 | } |
1716 | } |
… | |
… | |
2374 | |
2378 | |
2375 | if (tmp->type == FOOD || tmp->type == DRINK || tmp->type == POISON) |
2379 | if (tmp->type == FOOD || tmp->type == DRINK || tmp->type == POISON) |
2376 | { |
2380 | { |
2377 | op->statusmsg ("You blindly grab for a bite of food. " |
2381 | op->statusmsg ("You blindly grab for a bite of food. " |
2378 | "H<To prevent you from starving, you ate some random item from your backpack.>"); |
2382 | "H<To prevent you from starving, you ate some random item from your backpack.>"); |
2379 | manual_apply (op, tmp, 0); |
2383 | op->apply (tmp); |
2380 | |
2384 | |
2381 | if (op->stats.food >= 0 || op->stats.hp < 0) |
2385 | if (op->stats.food >= 0 || op->stats.hp < 0) |
2382 | break; |
2386 | break; |
2383 | } |
2387 | } |
2384 | else if (tmp->type == FLESH) |
2388 | else if (tmp->type == FLESH) |
… | |
… | |
2390 | */ |
2394 | */ |
2391 | if (op->stats.food < 0 && op->stats.hp >= 0 && flesh) |
2395 | if (op->stats.food < 0 && op->stats.hp >= 0 && flesh) |
2392 | { |
2396 | { |
2393 | op->statusmsg ("You blindly grab for a bite of food. " |
2397 | op->statusmsg ("You blindly grab for a bite of food. " |
2394 | "H<To prevent you from starving, you ate some random item from your backpack.>"); |
2398 | "H<To prevent you from starving, you ate some random item from your backpack.>"); |
2395 | manual_apply (op, flesh, 0); |
2399 | op->apply (flesh); |
2396 | } |
2400 | } |
2397 | |
2401 | |
2398 | // If player is still starving, alert him! |
2402 | // If player is still starving, alert him! |
2399 | if (op->stats.food < 0) |
2403 | if (op->stats.food < 0) |
2400 | op->failmsg ("You are starving! " |
2404 | op->failmsg ("You are starving! " |