1
0
Fork 0
mirror of https://codeberg.org/noisytoot/notnotdnethack.git synced 2025-08-08 21:55:25 +01:00

Merge branch 'compat-3.21.3' into devel-3.21.4

This commit is contained in:
chris 2022-06-06 18:58:54 -04:00
commit 20530d8cef
17 changed files with 362 additions and 136 deletions

View file

@ -337,8 +337,9 @@ NEARDATA extern coord bhitpos; /* place where throw or zap hits or stops */
#define BEAT 22
#define BONES 23
#define EAR 24
#define CREAK 25
#define CRACK 26
#define EARS 25
#define CREAK 26
#define CRACK 27
#define BALL_IN_MON (u.uswallow && uball && uball->where == OBJ_FREE)
#define CHAIN_IN_MON (u.uswallow && uchain && uchain->where == OBJ_FREE)

Binary file not shown.

After

(image error) Size: 933 B

Binary file not shown.

After

(image error) Size: 1.1 KiB

Binary file not shown.

After

(image error) Size: 648 B

Binary file not shown.

After

(image error) Size: 749 B

Binary file not shown.

After

(image error) Size: 699 B

View file

@ -19,11 +19,11 @@ dwarf_noble_quest,Durin's Bane's Bane,Completed the dwarf noble quest,x,@ and &
dwarf_knight_quest,Battle of (5-4) armies,Completed the dwarf knight quest,x,@ facing a bunch of o
gnome_ranger_quest,Strongest of all time,Completed the gnome ranger quest,x,Gnome sniping a kobold
elf_shared_quest,Driven out,Completed the elf shared quest,dnh_elf_shared_quest.png,
clockwork_ascension,Deus ex machina,Ascended a clockwork automaton,x,Gear-@ with a hovering crown
chiropteran_ascension,Bat outa hell,Ascended a chiropteran,x,B above lava with a hovering crown
yuki_onna_ascension,Snow in heaven,Ascended a yuki-onna,x,n with snowflakes with a hovering crown
half_dragon_ascension,Three halves,Ascended a half-dragon,x,D with a hovering crown
law_quest,Ripple-resistant tower,Completed the law quest,x,Butterfly
clockwork_ascension,Deus ex machina,Ascended a clockwork automaton,dnh_clockwork.png,
chiropteran_ascension,Bat outa hell,Ascended a chiropteran,dnh_chiropteran.png,
yuki_onna_ascension,Snow in heaven,Ascended a yuki-onna,dnh_yuki_onna.png,
half_dragon_ascension,Three halves,Ascended a half-dragon,dnh_half_dragon.png,
law_quest,Ripple-resistant tower,Completed the law quest,dnh_law_quest.png,
neutral_quest,Key to the (corpse) city,Completed the neutral quest,x,
chaos_temple_quest,Asinine paradigm,Completed the chaos temple quest,dnh_chaos1_quest.png,
mithardir_quest,Chasing after the wind,Completed the mithardir quest,x,

1 achieveXname name description icon
19 dwarf_knight_quest Battle of (5-4) armies Completed the dwarf knight quest x @ facing a bunch of o
20 gnome_ranger_quest Strongest of all time Completed the gnome ranger quest x Gnome sniping a kobold
21 elf_shared_quest Driven out Completed the elf shared quest dnh_elf_shared_quest.png
22 clockwork_ascension Deus ex machina Ascended a clockwork automaton x dnh_clockwork.png Gear-@ with a hovering crown
23 chiropteran_ascension Bat outa hell Ascended a chiropteran x dnh_chiropteran.png B above lava with a hovering crown
24 yuki_onna_ascension Snow in heaven Ascended a yuki-onna x dnh_yuki_onna.png n with snowflakes with a hovering crown
25 half_dragon_ascension Three halves Ascended a half-dragon x dnh_half_dragon.png D with a hovering crown
26 law_quest Ripple-resistant tower Completed the law quest x dnh_law_quest.png Butterfly
27 neutral_quest Key to the (corpse) city Completed the neutral quest x
28 chaos_temple_quest Asinine paradigm Completed the chaos temple quest dnh_chaos1_quest.png
29 mithardir_quest Chasing after the wind Completed the mithardir quest x

View file

@ -1964,18 +1964,17 @@ dorub()
}
}
if (!obj || !wield_tool(obj, "rub")) return 0;
if (!obj) return 0;
/* now uwep is obj */
if (uwep->otyp == MAGIC_LAMP) {
if (uwep->spe > 0 && !rn2(3)) {
check_unpaid_usage(uwep, TRUE); /* unusual item use */
djinni_from_bottle(uwep);
if (obj->otyp == MAGIC_LAMP) {
if (obj->spe > 0 && !rn2(3)) {
check_unpaid_usage(obj, TRUE); /* unusual item use */
djinni_from_bottle(obj);
makeknown(MAGIC_LAMP);
uwep->otyp = OIL_LAMP;
uwep->spe = 0; /* for safety */
uwep->age = rn1(500,1000);
if (uwep->lamplit) begin_burn(uwep);
obj->otyp = OIL_LAMP;
obj->spe = 0; /* for safety */
obj->age = rn1(500,1000);
if (obj->lamplit) begin_burn(obj);
update_inventory();
} else if (rn2(2) && !Blind)
You("see a puff of smoke.");

View file

@ -11737,7 +11737,7 @@ int spe;
pline("You hear chattering among the stars.");
break;
case 4:
pline("You hear ringing in your %s.", makeplural(body_part(EAR)));
pline("You hear ringing in your %s.", body_part(EARS));
break;
case 5:
pline("You hear silence in heaven.");

View file

@ -8252,10 +8252,10 @@ struct monst *mtmp;
}
else {
if(canseemon(tmpm) && canseemon(mtmp)){
pline("Gray light shines from %s %s.", s_suffix(mon_nam(tmpm)), makeplural(mbodypart(tmpm, EAR)));
pline("Gray light shines from %s %s.", s_suffix(mon_nam(tmpm)), mbodypart(tmpm, EARS));
pline("The light is drawn under %s bell.", s_suffix(mon_nam(mtmp)));
} else if(canseemon(tmpm)){
pline("Gray light shines from %s %s.", s_suffix(mon_nam(tmpm)), makeplural(mbodypart(tmpm, EAR)));
pline("Gray light shines from %s %s.", s_suffix(mon_nam(tmpm)), mbodypart(tmpm, EARS));
} else if(canseemon(mtmp)){
pline("Gray light is drawn under %s bell.", s_suffix(mon_nam(mtmp)));
}

View file

@ -337,8 +337,8 @@ int template;
ptr->mflagsm |= (MM_BREATHLESS);
ptr->mflagst |= (MT_HOSTILE | MT_STALK);
ptr->mflagst &= ~(MT_PEACEFUL | MT_ITEMS | MT_HIDE | MT_CONCEAL);
ptr->mflagsg &= ~(MG_INFRAVISIBLE);
ptr->mflagsg |= (MG_REGEN);
ptr->mflagsg &= ~(MG_INFRAVISIBLE|MG_HATESUNHOLY);
ptr->mflagsg |= (MG_REGEN|MG_HATESHOLY|MG_HATESSILVER);
ptr->mflagsa |= (MA_UNDEAD | MA_VAMPIRE);
/* resists: */
ptr->mresists |= (MR_SLEEP | MR_POISON); /* individual monsters gain cold res at mlev >= 10 */

View file

@ -7276,7 +7276,7 @@ MM_FLY /*MM*/, MT_STALK|MT_HOSTILE|MT_COLLECT|MT_BOLD /*MT*/, MF_MARTIAL_E|MF_BA
A(NO_ATTK),
SIZ(WT_GIGANTIC, 0, MS_FLOWER, MZ_GIGANTIC), MR_COLD|MR_POISON|MR_STONE, 0,
MM_BREATHLESS|MM_STATIONARY /*MM*/, MT_HOSTILE|MT_MINDLESS|MT_NOTAKE /*MT*/, 0 /*MF*/,
MB_FEMALE|MB_HUMANOID /*MB*/, MG_WRESIST|MG_NOPOLY|MG_SANLOSS|MG_INSIGHT /*MG*/,
MB_FEMALE|MB_HUMANOID|MB_NOFEET /*MB*/, MG_WRESIST|MG_NOPOLY|MG_SANLOSS|MG_INSIGHT /*MG*/,
MA_G_O_O|MA_PLANT|MA_PRIMORDIAL /*MA*/, MV_NORMAL /*MV*/, CLR_GRAY),
MON("warden tree", S_PLANT,//19 /* Needs encyc entry */

View file

@ -167,6 +167,8 @@ int force_linedup; /* if TRUE, we have some offensive item ready that will work
/* get location of next target */
if (mdef == &youmonst) {
if(no_upos(magr)) //They don't know where you are.
continue;
tarx = magr->mux;
tary = magr->muy;

View file

@ -4674,9 +4674,9 @@ int wishflags;
*wishreturn = WISH_SUCCESS;
return (&zeroobj);
#else
otmp = mksobj(GOLD_PIECE, mkobjflags|MKOBJ_NOINIT);
otmp = mksobj(GOLD_PIECE, mkobjflags|MKOBJ_NOINIT);
otmp->quan = cnt;
otmp->owt = weight(otmp);
otmp->owt = weight(otmp);
flags.botl=1;
*wishreturn = WISH_SUCCESS;
return (otmp);

View file

@ -2015,80 +2015,222 @@ struct monst *mon;
int part;
{
static NEARDATA const char
*humanoid_parts[] = { "arm", "eye", "face", "finger",
"fingertip", "foot", "hand", "handed", "head", "leg",
"light headed", "neck", "spine", "toe", "hair",
"blood", "lung", "nose", "stomach","heart","skin",
"flesh","beat","bones","ear","creak","crack"},
*clockwork_parts[] = { "arm", "photoreceptor", "face", "grasping digit",
"digit-tip", "foot", "manipulator", "manipulatored", "head", "leg",
"addled", "neck", "chassis", "toe", "doll-hair",
"oil", "gear", "chemoreceptor", "keyhole","mainspring","metal skin",
"brass structure","tick","rods","phonoreceptor","creak","bend"},
*jelly_parts[] = { "pseudopod", "dark spot", "front",
"pseudopod extension", "pseudopod extremity",
"pseudopod root", "grasp", "grasped", "cerebral area",
"lower pseudopod", "viscous", "middle", "centriole",
"pseudopod extremity", "ripples", "juices",
"tiny cilia", "sensor", "stomach","cytoskeletal structure","membrane",
"cortex","shift","cytoskeletal filaments","membrane","creak","crack" },
*animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip",
"rear claw", "foreclaw", "clawed", "head", "rear limb",
"light headed", "neck", "spine", "rear claw tip",
"fur", "blood", "lung", "nose", "stomach","heart","skin",
"flesh","beat","bones","ear","creak","crack" },
*insect_parts[] = { "forelimb", "compound eye", "face", "foreclaw", "claw tip",
"rear claw", "foreclaw", "clawed", "head", "rear limb",
"light headed", "neck", "notochord", "rear claw tip",
"setae", "ichor", "spriacle", "antenna", "stomach","dorsal vessel","exoskeleton",
"chitin","pulse","apodeme","ear","creak","tear" },
*bird_parts[] = { "wing", "eye", "face", "wing", "wing tip",
"foot", "wing", "winged", "head", "leg",
"light headed", "neck", "spine", "toe",
"feathers", "blood", "lung", "bill", "stomach","heart","skin",
"flesh","beat","bones","ear","creak","crack" },
*horse_parts[] = { "foreleg", "eye", "face", "forehoof", "hoof tip",
"rear hoof", "foreclaw", "hooved", "head", "rear leg",
"light headed", "neck", "backbone", "rear hoof tip",
"mane", "blood", "lung", "nose", "stomach","heart","skin",
"flesh","beat","bones","ear","creak","crack"},
*sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle", "tentacle tip",
"lower appendage", "tentacle", "tentacled", "body", "lower tentacle",
"rotational", "equator", "body", "lower tentacle tip",
"surface", "life force", "retina", "olfactory nerve","interior","core","surface",
"subsurface layers","pulse","auras","tympanic membrane","flicker","blink out"},
*fungus_parts[] = { "mycelium", "visual area", "front", "hypha",
"hypha", "root", "strand", "stranded", "cap area",
"rhizome", "sporulated", "stalk", "root", "rhizome tip",
"spores", "juices", "gill", "gill", "interior","hyphal network","cuticle",
"...it doesn't sound like much",
"flesh","hyphae","tympanic area","stretch","tear" },
*vortex_parts[] = { "region", "eye", "front", "minor current",
"minor current", "lower current", "swirl", "swirled",
"central core", "lower current", "addled", "center",
"currents", "edge", "currents", "life force",
"center", "leading edge", "interior","core","vaporous currents",
"subsurface currents","pulse","currents","vapor","weaken","falter" },
*snake_parts[] = { "vestigial limb", "eye", "face", "large scale",
"large scale tip", "rear region", "scale gap", "scale gapped",
"head", "rear region", "light headed", "neck", "length",
"rear scale", "scales", "blood", "lung", "forked tongue", "stomach","heart","scales",
"flesh","beat","bones","ear","creak","crack" },
*fish_parts[] = { "fin", "eye", "premaxillary", "pelvic axillary",
"pelvic fin", "anal fin", "pectoral fin", "finned", "head", "peduncle",
"played out", "gills", "dorsal fin", "caudal fin",
"scales", "blood", "gill", "nostril", "stomach","heart","scales",
"flesh","beat","bones","ear","creak","crack" },
*snakeleg_humanoid_parts[] = { "arm", "eye", "face", "finger",
"fingertip", "serpentine lower body", "hand", "handed", "head", "rear region",
"light headed", "neck", "spine", "tail-tip", "scales",
"blood", "lung", "nose", "stomach","heart","scales",
"flesh","beat","bones","ear","creak","crack" },
*centauroid_parts[] = { "arm", "eye", "face", "finger",
"fingertip", "hoof", "hand", "handed", "head", "front leg",
"light headed", "neck", "spine", "hoof-nail", "hair",
"blood", "lung", "nose", "stomach","heart","skin",
"flesh","beat","bones","ear","creak","crack" };
*humanoid_parts[] = {
"arm", "eye", "face", "finger",
"fingertip", "foot", "hand", "handed",
"head", "leg", "light headed", "neck",
"spine", "toe", "hair", "blood",
"lung", "nose", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack"},
*uvuudaum_parts[] = {
"arm", "eye", "headspike", "finger",
"fingertip", "hand", "hand", "handed",
"tentacle", "arm", "addled", "tentacle-base",
"spine", "finger", "headspike", "ichor",
"pore", "pore", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"clairaudience", "clairaudience", "creak", "crack"},
*clockwork_parts[] = {
"arm", "photoreceptor", "face", "grasping digit",
"digit-tip", "foot", "manipulator", "manipulatored",
"head", "leg", "addled", "neck",
"chassis", "toe", "doll-hair", "oil",
"gear", "chemoreceptor", "keyhole", "mainspring",
"foil skin", "brass structure", "tick", "armature",
"phonoreceptor","phonoreceptors", "creak", "bend"},
*doll_parts[] = {
"arm", "glass eye", "face", "finger",
"fingertip", "foot", "hand", "handed",
"head", "leg", "addled", "neck",
"trunk", "toe", "doll-hair", "ichor",
"lip", "nose", "wood", "wood",
"painted skin", "wood", "...it doesn't sound like much", "wood",
"ear", "ears", "creak", "crack"},
*android_parts[] = {
"arm", "photoreceptor", "face", "finger",
"fingertip", "foot", "hand", "handed",
"head", "leg", "buggy", "neck",
"dorsal wiring","toe", "doll-hair", "oily red liquid",
"vocal pump", "chemoreceptor", "black box", "heart",
"cosmetic layer","plasteel", "pump", "armature",
"phonoreceptor","phonoreceptors", "flex", "crack"},
*assessor_parts[] = {
"arm", "eye", "central eye", "grasping digit",
"digit-tip", "foot", "manipulator", "manipulatored",
"head", "leg", "addled", "shoulders",
"chassis", "toe", "topspike", "oil",
"valve", "olfactory nerve", "gearbox", "eternal core",
"armor", "brass structure", "tick", "armature",
"phonoreceptor","phonoreceptors", "creak", "bend"},
*audient_parts[] = {
"distal limb", "photoreceptor", "front", "articulated distal spike",
"spike-tip", "ventral needle", "distal spike", "spiked",
"cap", "ventral limb", "addled", "stalk",
"chassis", "needle-tip", "spores", "oil",
"gear", "gill", "hyphal network","eternal core",
"metal skin", "brass structure", "tick", "armature",
"phonoreceptor horn","phonoreceptor horn","creak", "bend"},
*jelly_parts[] = {
"pseudopod", "dark spot", "front", "pseudopod extension",
"pseudopod extremity","pseudopod root", "grasp", "grasped",
"cerebral area", "lower pseudopod", "viscous", "middle",
"centriole", "pseudopod extremity","ripples", "juices",
"tiny cilia", "sensor", "stomach", "cytoskeletal structure",
"membrane", "cortex", "shift", "cytoskeletal filaments",
"membrane", "membrane", "creak", "crack" },
*animal_parts[] = {
"forelimb", "eye", "face", "foreclaw",
"claw tip", "rear claw", "foreclaw", "clawed",
"head", "rear limb", "light headed", "neck",
"spine", "rear claw tip", "fur", "blood",
"lung", "nose", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" },
*insect_parts[] = {
"forelimb", "compound eye", "face", "foreclaw",
"claw tip", "rear claw", "foreclaw", "clawed",
"head", "rear limb", "light headed", "neck",
"notochord", "rear claw tip", "setae", "haemolymph",
"spriacle", "antenna", "stomach", "dorsal vessel",
"exoskeleton", "chitin", "pulse", "apodeme",
"tympanum", "tympana", "creak", "tear" },
*bird_parts[] = {
"wing", "eye", "face", "wing",
"wing tip", "foot", "wing", "winged",
"head", "leg", "light headed", "neck",
"spine", "toe", "feathers", "blood",
"lung", "bill", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" },
*horse_parts[] = {
"foreleg", "eye", "face", "forehoof",
"hoof tip", "rear hoof", "foreclaw", "hooved",
"head", "rear leg", "light headed", "neck",
"backbone", "rear hoof tip", "mane", "blood",
"lung", "nose", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack"},
*sphere_parts[] = {
"appendage", "optic nerve", "body", "tentacle",
"tentacle tip", "lower appendage", "tentacle", "tentacled",
"body", "lower tentacle", "rotational", "equator",
"body", "lower tentacle tip","surface", "life force",
"retina", "olfactory nerve", "interior", "core",
"surface", "subsurface layers","pulse", "auras",
"tympanic membrane","tympanic membranes","flicker", "blink out"},
*spore_parts[] = {
"stalk", "visual area", "front", "stalk",
"stalk tip", "stalk", "stalk", "stalked",
"annulus", "stalk", "addled", "equator",
"body", "stalk tip", "surface", "sap",
"lip", "lip", "interior", "spores",
"annulus", "flesh", "...they don't sound like much","cells",
"tympanic area", "tympanic area", "flex", "crack"},
*fungus_parts[] = {
"mycelium", "visual area", "front", "hypha",
"hypha", "root", "strand", "stranded",
"cap area", "rhizome", "sporulated", "stalk",
"root", "rhizome tip", "spores", "juices",
"gill", "gill", "interior", "hyphal network",
"cuticle", "flesh", "...it doesn't sound like much","hyphae",
"tympanic area", "tympanic area", "stretch", "tear" },
*tree_parts[] = {
"limb", "visual area", "front", "leaf",
"leaftip", "taproot", "twig", "twigged",
"crown", "root", "wilty", "trunk",
"heartwood","root-tip", "leaves", "sap",
"stoma", "stoma", "xylem", "phloem",
"bark", "sapwood", "...it doesn't sound like much","wood",
"tympanic area","tympanic area","creak", "crack" },
*vipertree_parts[] = {
"coil", "eye", "face", "mouth",
"fang", "taproot", "viper head", "headed",
"crown", "root", "disordered", "trunk",
"heartwood","root-tip", "scales", "blood",
"lung", "nose", "stomach", "heart",
"scales", "sapwood", "beat", "wood",
"ear", "ears", "creak", "crack" },
*blackflower_parts[] = {
"arm", "blank eye", "face", "finger",
"fingertip", "petal" "hand", "handed",
"head", "flower" , "light headed", "neck",
"spine", "petal-tip", "hair", "pale fluid",
"lung", "nose", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" },
*plant_parts[] = {
"shoot", "visual area", "front", "leaf",
"leaftip", "lateral root", "twig", "twigged",
"apical bud", "primary root", "wilty", "stem",
"vascular tissue","root-tip", "leaves", "sap",
"stoma", "stoma", "xylem", "phloem",
"epidermis", "flesh", "...it doesn't sound like much","stem",
"tympanic area","tympanic area","stretch", "tear" },
*mandrake_parts[] = {
"arm-root", "eye spot", "root-face", "arm-root tip",
"arm-root hair","leg-root tip", "arm-root end", "rooted",
"leaves", "leg-root", "wilty", "ground tissue",
"spine", "leg-root hair","apical bud", "bloody sap",
"stoma", "nose spots", "xylem", "phloem",
"epidermis", "flesh", "...it doesn't sound like much","stem",
"ear spot", "ear spots", "stretch", "tear" },
*willow_parts[] = {
"limb", "visual area", "front", "leaf",
"leaftip", "taproot", "twig", "twigged",
"crown", "root", "wilty", "trunk",
"spine", "root-tip", "leaves", "blood",
"stoma", "stoma", "xylem", "phloem",
"bark", "flesh", "...it doesn't sound like much","wood",
"tympanic area","tympanic area","creak", "crack" },
*birch_parts[] = {
"limb", "eye", "face", "thorn",
"thorn-tip", "crawling-root","scaffold", "scaffolded",
"head", "bud union", "light headed", "neck",
"spine", "root-tip", "hair", "sap",
"lung", "nose", "stomach", "heart",
"bark", "sapwood", "beat", "wood",
"ear", "ears", "creak", "crack" },
*vortex_parts[] = {
"region", "eye", "front", "minor current",
"minor current", "lower current", "swirl", "swirled",
"central core", "lower current", "addled", "center",
"currents", "edge", "currents", "life force",
"center", "leading edge", "interior", "core",
"vaporous currents","subsurface currents","pulse", "currents",
"vapor", "vapor", "weaken", "falter" },
*snake_parts[] = {
"vestigial limb", "eye", "face", "large scale",
"large scale tip", "rear region", "scale gap", "scale gapped",
"head", "rear region", "light headed", "neck",
"length", "rear scale", "scales", "blood",
"lung", "forked tongue", "stomach", "heart",
"scales", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" },
*fish_parts[] = {
"fin", "eye", "premaxillary", "pelvic axillary",
"pelvic fin", "anal fin", "pectoral fin", "finned",
"head", "peduncle", "played out", "gills",
"dorsal fin", "caudal fin", "scales", "blood",
"gill", "nostril", "stomach", "heart",
"scales", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" },
*snakeleg_humanoid_parts[] = {
"arm", "eye", "face", "finger",
"fingertip", "serpentine lower body","hand", "handed",
"head", "rear region", "light headed", "neck",
"spine", "tail-tip", "scales", "blood",
"lung", "nose", "stomach", "heart",
"scales", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" },
*centauroid_parts[] = {
"arm", "eye", "face", "finger",
"fingertip", "hoof", "hand", "handed",
"head", "front leg", "light headed", "neck",
"spine", "hoof-nail", "hair", "blood",
"lung", "nose", "stomach", "heart",
"skin", "flesh", "beat", "bones",
"ear", "ears", "creak", "crack" };
/* claw attacks are overloaded in mons[]; most humanoids with
such attacks should still reference hands rather than claws */
static const char not_claws[] = {
@ -2099,21 +2241,7 @@ int part;
};
struct permonst *mptr = mon->data;
if (part == HAND || part == HANDED) { /* some special cases */
if (mptr->mlet == S_DOG || mptr->mlet == S_FELINE ||
mptr->mlet == S_YETI)
return part == HAND ? "paw" : "pawed";
if(mon == &youmonst && youracedata->mtyp == PM_HALF_DRAGON)
return part == HAND ? "claw" : "clawed";
if(mon->mtyp == PM_HALF_DRAGON)
return part == HAND ? "claw" : "clawed";
if (humanoid(mptr) && attacktype(mptr, AT_CLAW) &&
!index(not_claws, mptr->mlet) &&
mptr->mtyp != PM_STONE_GOLEM &&
mptr->mtyp != PM_SENTINEL_OF_MITHARDIR &&
mptr->mtyp != PM_INCUBUS && mptr->mtyp != PM_SUCCUBUS)
return part == HAND ? "claw" : "clawed";
}
//Specific overrides
if ((mptr->mtyp == PM_MUMAK || mptr->mtyp == PM_MASTODON) &&
part == NOSE)
return "trunk";
@ -2124,9 +2252,80 @@ int part;
return "tentacle";
if (mptr->mtyp == PM_FLOATING_EYE && part == EYE)
return "cornea";
if (mptr->mtyp == PM_SUNFLOWER || mptr->mtyp == PM_MIRRORED_MOONFLOWER){
if(part == HEAD)
return "flower";
if(part == FACE)
return "mirrored corolla";
}
if (mptr->mtyp == PM_DREADBLOSSOM_SWARM){
if(part == HEAD)
return "flower";
if(part == FACE)
return "corolla";
}
if (is_fern(mptr)){
if(part == HEAD)
return "crosier";
}
if (mptr->mtyp == PM_DREADBLOSSOM_SWARM && part == LEG)
return "root-thorn";
if ((mptr->mtyp == PM_DREADBLOSSOM_SWARM || mptr->mtyp == PM_SUNFLOWER || mptr->mtyp == PM_MIRRORED_MOONFLOWER) && part == HAIR)
return "petals";
if (is_delouseable(mptr)){
if(mptr->mtyp == PM_PARASITIZED_DOLL){
if(part == HEAD)
return "nightmarish flesh mass";
if(part == FACE)
return "gnawing mouths";
if(part == EYE)
return "winking eye";
if(part == BLOOD)
return "seathing blood";
} else {
if(part == FACE)
return "squid";
if(part == EAR)
return "skin";
if(part == EARS)
return "skin";
if(part == EYE)
return "eye";
}
}
//PM-based part lists
if (mptr->mtyp == PM_RAVEN || mptr->mtyp == PM_CROW)
return bird_parts[part];
if (mptr->mlet == S_CENTAUR || mptr->mlet == S_UNICORN ||
if (mptr->mtyp == PM_APHANACTONAN_ASSESSOR)
return assessor_parts[part];
if (mptr->mtyp == PM_APHANACTONAN_AUDIENT)
return audient_parts[part];
if (mptr->mtyp == PM_MANDRAKE)
return mandrake_parts[part];
if (mptr->mtyp == PM_CANDLE_TREE)
return birch_parts[part];
if (mptr->mtyp == PM_WEEPING_WILLOW)
return willow_parts[part];
if (mptr->mtyp == PM_VIPER_TREE)
return vipertree_parts[part];
if (mptr->mtyp == PM_BLACK_FLOWER)
return blackflower_parts[part];
if (is_fern_spore(mptr))
return spore_parts[part];
if (mptr->mtyp == PM_WARDEN_TREE)
return tree_parts[part];
if (mptr->mtyp == PM_LIVING_DOLL)
return doll_parts[part];
if (is_android(mptr))
return android_parts[part];
if (mptr->mtyp == PM_UVUUDAUM)
return uvuudaum_parts[part];
//S-based part lists
if (mptr->mlet == S_PLANT)
return plant_parts[part];
if (mptr->mlet == S_UNICORN ||
(mptr->mtyp == PM_ROTHE && part != HAIR))
return horse_parts[part];
if (mptr->mlet == S_LIGHT) {
@ -2148,6 +2347,23 @@ int part;
return fish_parts[part];
if (mptr->mlet == S_ANT)
return insect_parts[part];
//General body shape-based
if (part == HAND || part == HANDED) { /* some special cases */
if (mptr->mlet == S_DOG || mptr->mlet == S_FELINE ||
mptr->mlet == S_YETI)
return part == HAND ? "paw" : "pawed";
if(mon == &youmonst && youracedata->mtyp == PM_HALF_DRAGON)
return part == HAND ? "claw" : "clawed";
if(mon->mtyp == PM_HALF_DRAGON)
return part == HAND ? "claw" : "clawed";
if (humanoid(mptr) && attacktype(mptr, AT_CLAW) &&
!index(not_claws, mptr->mlet) &&
mptr->mtyp != PM_STONE_GOLEM &&
mptr->mtyp != PM_SENTINEL_OF_MITHARDIR &&
mptr->mtyp != PM_INCUBUS && mptr->mtyp != PM_SUCCUBUS)
return part == HAND ? "claw" : "clawed";
}
if (serpentine(mptr) || (mptr->mlet == S_DRAGON && part == HAIR))
return snake_parts[part];
if (snakemanoid(mptr))

View file

@ -2767,30 +2767,38 @@ dodip()
pline1(nothing_happens);
} else {
boolean was_wep = FALSE, was_swapwep = FALSE, was_quiver = FALSE;
short save_otyp = obj->otyp;
/* KMH, conduct */
u.uconduct.polypiles++;
short save_otyp = obj->otyp;
/* KMH, conduct */
u.uconduct.polypiles++;
if (obj == uwep) was_wep = TRUE;
else if (obj == uswapwep) was_swapwep = TRUE;
else if (obj == uquiver) was_quiver = TRUE;
if (obj == uwep) was_wep = TRUE;
else if (obj == uswapwep) was_swapwep = TRUE;
else if (obj == uquiver) was_quiver = TRUE;
obj = randpoly_obj(obj);
obj = randpoly_obj(obj);
if (was_wep) setuwep(obj);
else if (was_swapwep) setuswapwep(obj);
else if (was_quiver) setuqwep(obj);
#ifndef GOLDOBJ
if(obj->otyp == GOLD_PIECE){
u.ugold += 2*obj->quan; //Gold piece handling disaster: useupall reduces the player's gold count by the ammount destroyed, so add the gold twice :(
useupall(obj);
obj = (struct obj *) 0;
}
#endif
if (was_wep) setuwep(obj);
else if (was_swapwep) setuswapwep(obj);
else if (was_quiver) setuqwep(obj);
if (obj->otyp != save_otyp || (obj->otyp == HYPOSPRAY_AMPULE && objects[HYPOSPRAY_AMPULE].oc_name_known)) {
if (save_otyp == POT_POLYMORPH || potion->otyp == POT_POLYMORPH)
makeknown(POT_POLYMORPH);
useup(potion);
prinv((char *)0, obj, 0L);
return 1;
} else {
pline("Nothing seems to happen.");
goto poof;
}
if (!obj || obj->otyp != save_otyp || (obj->otyp == HYPOSPRAY_AMPULE && objects[HYPOSPRAY_AMPULE].oc_name_known)) {
if (save_otyp == POT_POLYMORPH || potion->otyp == POT_POLYMORPH)
makeknown(POT_POLYMORPH);
useup(potion);
if(obj)
prinv((char *)0, obj, 0L);
return 1;
} else {
pline("Nothing seems to happen.");
goto poof;
}
}
potion->in_use = FALSE; /* didn't go poof */
return(1);

View file

@ -1690,7 +1690,7 @@ struct obj * obj;
}
/* gold scrolls of law turn a small randomize amount of gold (and were guaranteed to turn into gold pieces) */
if (obj->otyp == SCR_GOLD_SCROLL_OF_LAW) {
otmp->quan = rnd(50 * obj->quan) + 50 * obj->quan;
otmp->quan = d(obj->quan,50) + 50 * obj->quan;
}
/* crocodile corpses were turned into shoes */
if (obj->otyp == CORPSE && obj->corpsenm == PM_CROCODILE) {