MCPcopy Create free account
hub / github.com/NetHack/NetHack / do_osshock

Function do_osshock

src/zap.c:1636–1674  ·  view source on GitHub ↗

Assumes obj is on the floor. */

Source from the content-addressed store, hash-verified

1634
1635/* Assumes obj is on the floor. */
1636void
1637do_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 */
1677boolean

Callers 1

bhitoFunction · 0.85

Calls 7

rn2Function · 0.85
splitobjFunction · 0.85
rndFunction · 0.85
costly_spotFunction · 0.85
addtobillFunction · 0.85
stolen_valueFunction · 0.85
delobjFunction · 0.85

Tested by

no test coverage detected