| 1624 | } |
| 1625 | |
| 1626 | staticfn void |
| 1627 | seffect_enchant_weapon(struct obj **sobjp) |
| 1628 | { |
| 1629 | struct obj *sobj = *sobjp; |
| 1630 | boolean sblessed = sobj->blessed; |
| 1631 | boolean scursed = sobj->cursed; |
| 1632 | boolean confused = (Confusion != 0); |
| 1633 | boolean old_erodeproof, new_erodeproof; |
| 1634 | int s; |
| 1635 | |
| 1636 | /* [What about twoweapon mode? Proofing/repairing/enchanting both |
| 1637 | would be too powerful, but shouldn't we choose randomly between |
| 1638 | primary and secondary instead of always acting on primary?] */ |
| 1639 | if (confused && uwep |
| 1640 | && erosion_matters(uwep) && uwep->oclass != ARMOR_CLASS) { |
| 1641 | old_erodeproof = (uwep->oerodeproof != 0); |
| 1642 | new_erodeproof = !scursed; |
| 1643 | uwep->oerodeproof = 0; /* for messages */ |
| 1644 | if (Blind) { |
| 1645 | uwep->rknown = FALSE; |
| 1646 | Your("weapon feels warm for a moment."); |
| 1647 | } else { |
| 1648 | uwep->rknown = TRUE; |
| 1649 | pline("%s covered by a %s %s %s!", Yobjnam2(uwep, "are"), |
| 1650 | scursed ? "mottled" : "shimmering", |
| 1651 | hcolor(scursed ? NH_PURPLE : NH_GOLDEN), |
| 1652 | scursed ? "glow" : "shield"); |
| 1653 | } |
| 1654 | if (new_erodeproof && (uwep->oeroded || uwep->oeroded2)) { |
| 1655 | uwep->oeroded = uwep->oeroded2 = 0; |
| 1656 | pline("%s as good as new!", |
| 1657 | Yobjnam2(uwep, Blind ? "feel" : "look")); |
| 1658 | } |
| 1659 | if (old_erodeproof && !new_erodeproof) { |
| 1660 | /* restore old_erodeproof before shop charges */ |
| 1661 | uwep->oerodeproof = 1; |
| 1662 | costly_alteration(uwep, COST_DEGRD); |
| 1663 | } |
| 1664 | uwep->oerodeproof = new_erodeproof ? 1 : 0; |
| 1665 | return; |
| 1666 | } |
| 1667 | s = scursed ? -1 |
| 1668 | : !uwep ? 1 /* guard further tests against null pointer */ |
| 1669 | : (uwep->spe >= 9) ? (rn2(uwep->spe) == 0) /* usually 0, maybe 1 */ |
| 1670 | : sblessed ? rnd(3 - uwep->spe / 3) /* >= 9 case prevents rnd(0) */ |
| 1671 | : 1; /* uncursed */ |
| 1672 | if (!chwepon(sobj, s)) |
| 1673 | *sobjp = 0; /* nothing enchanted: strange_feeling -> useup */ |
| 1674 | if (uwep) |
| 1675 | cap_spe(uwep); |
| 1676 | } |
| 1677 | |
| 1678 | staticfn void |
| 1679 | seffect_taming(struct obj **sobjp) |
no test coverage detected