Assumes obj is on the floor. */
| 1634 | |
| 1635 | /* Assumes obj is on the floor. */ |
| 1636 | void |
| 1637 | do_osshock(struct obj *obj) |
| 1638 | { |
| 1639 | long i; |
| 1640 | |
| 1641 | #ifdef MAIL_STRUCTURES |
| 1642 | if (obj->otyp == SCR_MAIL) |
| 1643 | return; |
| 1644 | #endif |
| 1645 | go.obj_zapped = TRUE; |
| 1646 | |
| 1647 | if (gp.poly_zapped < 0) { |
| 1648 | /* some may metamorphose */ |
| 1649 | for (i = obj->quan; i; i--) |
| 1650 | if (!rn2(Luck + 45)) { |
| 1651 | gp.poly_zapped = objects[obj->otyp].oc_material; |
| 1652 | break; |
| 1653 | } |
| 1654 | } |
| 1655 | |
| 1656 | /* if quan > 1 then some will survive intact */ |
| 1657 | if (obj->quan > 1L) { |
| 1658 | if (obj->quan > LARGEST_INT) |
| 1659 | obj = splitobj(obj, (long) rnd(30000)); |
| 1660 | else |
| 1661 | obj = splitobj(obj, (long) rnd((int) obj->quan - 1)); |
| 1662 | } |
| 1663 | |
| 1664 | /* appropriately add damage to bill */ |
| 1665 | if (costly_spot(obj->ox, obj->oy)) { |
| 1666 | if (*u.ushops) |
| 1667 | addtobill(obj, FALSE, FALSE, FALSE); |
| 1668 | else |
| 1669 | (void) stolen_value(obj, obj->ox, obj->oy, FALSE, FALSE); |
| 1670 | } |
| 1671 | |
| 1672 | /* zap the object */ |
| 1673 | delobj(obj); |
| 1674 | } |
| 1675 | |
| 1676 | /* Returns TRUE if obj resists polymorphing */ |
| 1677 | boolean |
no test coverage detected