Skip to content

Commit

Permalink
revived unicorn horns (trunk only)
Browse files Browse the repository at this point in the history
     Back in Nov'04, <Someone> pointed out that even with only 5%
chance for dropping a horn upon the death of a unicorn which has been
revived from corpse, it's still possible to produce a nearly unlimited
number of them for polypile fodder.  This bumps the chance for a horn up
to 50%, but flags the horn as coming from a revived corpse and makes such
horns be treated by polymoprh as if they're non-magic (which practically
guarantees that they'll poly into mundane tools instead of magic ones).
  • Loading branch information
nethack.rankin committed Apr 1, 2007
1 parent b4f39da commit e91ff47
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 10 deletions.
1 change: 1 addition & 0 deletions doc/fixes35.0
Expand Up @@ -206,6 +206,7 @@ charge for kicked shop-owned food if it gets used up taming a monster
give better feedback when thrown shop-owned food gets used up taming a monster
effect of negative AC on damage received was calculated differently than
normal when deciding whether hero poly'd into pudding would split
unicorn horn produced by revived monster will polymorph as if non-magic


Platform- and/or Interface-Specific Fixes
Expand Down
3 changes: 2 additions & 1 deletion include/obj.h
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)obj.h 3.5 2007/02/17 */
/* SCCS Id: @(#)obj.h 3.5 2007/03/30 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -85,6 +85,7 @@ struct obj {
Bitfield(oerodeproof,1); /* erodeproof weapon/armor */
Bitfield(olocked,1); /* object is locked */
Bitfield(obroken,1); /* lock has been broken */
#define degraded_horn obroken /* unicorn horn will poly to non-magic */
Bitfield(otrapped,1); /* container is trapped */
/* or accidental tripped rolling boulder trap */
#define opoisoned otrapped /* object (weapon) is coated with poison */
Expand Down
16 changes: 9 additions & 7 deletions src/mon.c
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)mon.c 3.5 2007/02/08 */
/* SCCS Id: @(#)mon.c 3.5 2007/03/30 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -191,12 +191,14 @@ unsigned corpseflags;
case PM_WHITE_UNICORN:
case PM_GRAY_UNICORN:
case PM_BLACK_UNICORN:
if (mtmp->mrevived && rn2(20)) {
if (canseemon(mtmp))
pline("%s recently regrown horn crumbles to dust.",
s_suffix(Monnam(mtmp)));
} else
(void) mksobj_at(UNICORN_HORN, x, y, TRUE, FALSE);
if (mtmp->mrevived && rn2(2)) {
if (canseemon(mtmp))
pline("%s recently regrown horn crumbles to dust.",
s_suffix(Monnam(mtmp)));
} else {
obj = mksobj_at(UNICORN_HORN, x, y, TRUE, FALSE);
if (obj && mtmp->mrevived) obj->degraded_horn = 1;
}
goto default_1;
case PM_LONG_WORM:
(void) mksobj_at(WORM_TOOTH, x, y, TRUE, FALSE);
Expand Down
7 changes: 5 additions & 2 deletions src/zap.c
@@ -1,4 +1,4 @@
/* SCCS Id: @(#)zap.c 3.5 2007/02/17 */
/* SCCS Id: @(#)zap.c 3.5 2007/03/30 */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */

Expand Down Expand Up @@ -1283,14 +1283,17 @@ poly_obj(obj, id)
change_luck(-1); /* Sokoban guilt */
if (id == STRANGE_OBJECT) { /* preserve symbol */
int try_limit = 3;
unsigned magic_obj = objects[obj->otyp].oc_magic;

if (obj->otyp == UNICORN_HORN && obj->degraded_horn) magic_obj = 0;
/* Try up to 3 times to make the magic-or-not status of
the new item be the same as it was for the old one. */
otmp = (struct obj *)0;
do {
if (otmp) delobj(otmp);
otmp = mkobj(obj->oclass, FALSE);
} while (--try_limit > 0 &&
objects[obj->otyp].oc_magic != objects[otmp->otyp].oc_magic);
objects[otmp->otyp].oc_magic != magic_obj);
} else {
/* literally replace obj with this new thing */
otmp = mksobj(id, FALSE, FALSE);
Expand Down

0 comments on commit e91ff47

Please sign in to comment.