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

Function seffect_enchant_weapon

src/read.c:1626–1676  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1624}
1625
1626staticfn void
1627seffect_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
1678staticfn void
1679seffect_taming(struct obj **sobjp)

Callers 1

seffectsFunction · 0.85

Calls 10

erosion_mattersFunction · 0.85
YourFunction · 0.85
Yobjnam2Function · 0.85
hcolorFunction · 0.85
costly_alterationFunction · 0.85
rn2Function · 0.85
rndFunction · 0.85
chweponFunction · 0.85
cap_speFunction · 0.85
plineFunction · 0.70

Tested by

no test coverage detected