Merge branch 'NetHack-3.6.0'

This commit is contained in:
nhmall
2015-12-24 16:54:35 -05:00
23 changed files with 499 additions and 268 deletions
+72 -68
View File
@@ -80,7 +80,7 @@ sacrific*
top will have grooves for blood, and the whole will be covered top will have grooves for blood, and the whole will be covered
with _dry brown stains of a troubling kind_ from former with _dry brown stains of a troubling kind_ from former
Sacrifices. Sacrifices.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
To every man upon this earth To every man upon this earth
Death cometh soon or late; Death cometh soon or late;
@@ -215,15 +215,14 @@ apelike creature
the apes have the forelimbs much better developed than the apes have the forelimbs much better developed than
the hind limbs. Tail entirely absent. Growth is slow the hind limbs. Tail entirely absent. Growth is slow
and sexual maturity reached at quite an advanced age. and sexual maturity reached at quite an advanced age.
[ A Field Guide to the Larger Mammals of Africa by Dorst ] [ A Field Guide to the Larger Mammals of Africa by Dorst ]
Aldo the gorilla had a plan. It was a good plan. It was Aldo the gorilla had a plan. It was a good plan. It was
right. He knew it. He smacked his lips in anticipation as right. He knew it. He smacked his lips in anticipation as
he thought of it. Yes. Apes should be strong. Apes should he thought of it. Yes. Apes should be strong. Apes should
be masters. Apes should be proud. Apes should make the be masters. Apes should be proud. Apes should make the
Earth shake when they walked. Apes should _rule_ the Earth. Earth shake when they walked. Apes should _rule_ the Earth.
[ Battle for the Planet of the Apes, [ Battle for the Planet of the Apes, by David Gerrold ]
by David Gerrold ]
apple apple
NEWTONIAN, adj. Pertaining to a philosophy of the universe NEWTONIAN, adj. Pertaining to a philosophy of the universe
invented by Newton, who discovered that an apple will fall invented by Newton, who discovered that an apple will fall
@@ -278,8 +277,7 @@ arioch
I found the arrow still unbroke; I found the arrow still unbroke;
And the song, from beginning to end, And the song, from beginning to end,
I found again in the heart of a friend. I found again in the heart of a friend.
[ The Arrow and the Song, [ The Arrow and the Song, by Henry Wadsworth Longfellow ]
by Henry Wadsworth Longfellow ]
ashikaga takauji ashikaga takauji
Ashikaga Takauji was a daimyo of the Minamoto clan who Ashikaga Takauji was a daimyo of the Minamoto clan who
joined forces with the Go-Daigo to defeat the Hojo armies. joined forces with the Go-Daigo to defeat the Hojo armies.
@@ -289,7 +287,7 @@ ashikaga takauji
Go-Daigo eventually escaped and established another Go-Daigo eventually escaped and established another
government in the town of Yoshino. This period of dual government in the town of Yoshino. This period of dual
governments was known as the Nambokucho. governments was known as the Nambokucho.
[ Samurai - The Story of a Warrior Tradition, by Cook ] [ Samurai - The Story of a Warrior Tradition, by Cook ]
asmodeus asmodeus
It is said that Asmodeus is the overlord over all of hell. It is said that Asmodeus is the overlord over all of hell.
His appearance, unlike many other demons and devils, is His appearance, unlike many other demons and devils, is
@@ -557,6 +555,17 @@ candelabrum*
(Enter all the Friars to sing the dirge) (Enter all the Friars to sing the dirge)
[ Doctor Faustus and Other Plays, by Christopher Marlowe ] [ Doctor Faustus and Other Plays, by Christopher Marlowe ]
boomerang boomerang
#: this one is commented out because two from the same source feels a
#: bit excessive; if uncommented, it should be first since the punchline
#: is about coming back while the other one is disdainful about that, so
#: if this one came second, its joke would be weakened
# "It's a boomerang," said Vimes. "You find something like this
# all over the world. You have to wave it carefully and suddenly
# your opponent gets it in the back. I've heard that there's a lad
# in Fourecks who can throw a boomerang with such precision that it
# can get the morning paper and come back with it."
# [ Raising Steam, by Terry Pratchett ]
#
Rincewind pulled himself up and thought about reaching for his Rincewind pulled himself up and thought about reaching for his
stick. And then he thought again. The man had a couple of spears stick. And then he thought again. The man had a couple of spears
stuck in the ground, and people here were good at spears, because stuck in the ground, and people here were good at spears, because
@@ -579,7 +588,7 @@ boomerang
the formula for making this splendid footwear is a closely the formula for making this splendid footwear is a closely
guarded secret, possibly derived from nonhumans (see Dwarfs, guarded secret, possibly derived from nonhumans (see Dwarfs,
Elves, and Gnomes). Elves, and Gnomes).
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
*booze *booze
potion of sleeping potion of sleeping
On waking, he found himself on the green knoll whence he had On waking, he found himself on the green knoll whence he had
@@ -874,7 +883,7 @@ chih*sung*tzu
do so. He became the heavenly controller of the rain, and do so. He became the heavenly controller of the rain, and
lived with other celestial beings in their paradise on Mount lived with other celestial beings in their paradise on Mount
Kunlun. Kunlun.
[ The Illustrated Who's Who In Mythology, by Michael Senior ] [ The Illustrated Who's Who In Mythology, by Michael Senior ]
chromatic dragon chromatic dragon
tiamat tiamat
Tiamat is said to be the mother of evil dragonkind. She is Tiamat is said to be the mother of evil dragonkind. She is
@@ -895,7 +904,7 @@ citrine*
with trees_ or _swords_, or needing to be _pulled close with trees_ or _swords_, or needing to be _pulled close
around her/his shivering body_. This seems to suggest they around her/his shivering body_. This seems to suggest they
are less than practical for anyone on an arduous Tour. are less than practical for anyone on an arduous Tour.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
cloud* cloud*
I wandered lonely as a cloud I wandered lonely as a cloud
That floats on high o'er vales and hills, That floats on high o'er vales and hills,
@@ -943,8 +952,8 @@ c*ckatrice
But even a dead basilisk is dangerous, for it is said that But even a dead basilisk is dangerous, for it is said that
merely touching its lifeless body can cause a person to merely touching its lifeless body can cause a person to
sicken and die. sicken and die.
[ Mythical Beasts by Deirdre Headon (The Leprechaun Library) [ Mythical Beasts by Deirdre Headon (The Leprechaun Library)
and other sources ] and other sources ]
*coin *coin
~creeping coins ~creeping coins
*coins *coins
@@ -1055,21 +1064,20 @@ crom
his weapon, and mutters under his breath: his weapon, and mutters under his breath:
"By Crom, there will be blood spilt today." "By Crom, there will be blood spilt today."
[ Conan the Avenger by Robert E. Howard, Bjorn Nyberg, and [ Conan the Avenger by Robert E. Howard, Bjorn Nyberg,
L. Sprague de Camp ] and L. Sprague de Camp ]
crossbow* crossbow*
"God save thee, ancient Mariner! "God save thee, ancient Mariner!
From the fiends, that plague thee thus! - From the fiends, that plague thee thus! -
Why look'st thou so?" - With my cross-bow Why look'st thou so?" - With my cross-bow
I shot the Albatross. I shot the Albatross.
[ The Rime of the Ancient Mariner, by Samuel Taylor [ The Rime of the Ancient Mariner, by Samuel Taylor Coleridge ]
Coleridge ]
crystal ball crystal ball
You look into one of these and see _vapours swirling like You look into one of these and see _vapours swirling like
clouds_. These shortly clear away to show a sort of video clouds_. These shortly clear away to show a sort of video
without sound of something that is going to happen to you without sound of something that is going to happen to you
soon. It is seldom good news. soon. It is seldom good news.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
curse* curse*
Curses are longstanding ill-wishings which, in Fantasyland, Curses are longstanding ill-wishings which, in Fantasyland,
often manifest as semisentient. They have to be broken or often manifest as semisentient. They have to be broken or
@@ -1082,7 +1090,7 @@ curse*
want to do this. Swords usually resist all attempts to want to do this. Swords usually resist all attempts to
raise their Curses. Your best source is to hide the Sword raise their Curses. Your best source is to hide the Sword
or give it to someone you dislike. or give it to someone you dislike.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
cwn*n cwn*n
A pack of snow-white, red-eared spectral hounds which A pack of snow-white, red-eared spectral hounds which
sometimes took part in the kidnappings and raids the sometimes took part in the kidnappings and raids the
@@ -1183,7 +1191,7 @@ major demon
through a keyhole yet not be pierced with a Sword. This makes through a keyhole yet not be pierced with a Sword. This makes
them difficult to deal with, even on the rare occasions when them difficult to deal with, even on the rare occasions when
they are friendly. they are friendly.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
diamond diamond
The hardest known mineral (with a hardness of 10 on Mohs' scale). The hardest known mineral (with a hardness of 10 on Mohs' scale).
It is an allotropic form of pure carbon that has crystallized in It is an allotropic form of pure carbon that has crystallized in
@@ -1231,7 +1239,8 @@ dingo
A wolflike wild dog, Canis dingo, of Australia, having a A wolflike wild dog, Canis dingo, of Australia, having a
reddish- or yellowish-brown coat, believed to have been reddish- or yellowish-brown coat, believed to have been
introduced by the aborigines. introduced by the aborigines.
[Webster's Encyclopedic Unabridged Dictionary of the English Language] [ Webster's Encyclopedic Unabridged Dictionary
of the English Language ]
disenchanter disenchanter
Ask not, what your magic can do to it. Ask what it can do Ask not, what your magic can do to it. Ask what it can do
to your magic. to your magic.
@@ -1320,7 +1329,7 @@ doppelganger
not only with clouds of sulphurous fumes pouring from its fire not only with clouds of sulphurous fumes pouring from its fire
breathing nostrils, but also with the thrashings of its tail, breathing nostrils, but also with the thrashings of its tail,
the most deadly part of its serpent-like body. the most deadly part of its serpent-like body.
[ Mythical Beasts by Deirdre Headon (The Leprechaun Library) ] [ Mythical Beasts by Deirdre Headon (The Leprechaun Library) ]
"One whom the dragons will speak with," he said, "that is a "One whom the dragons will speak with," he said, "that is a
dragonlord, or at least that is the center of the matter. It's dragonlord, or at least that is the center of the matter. It's
@@ -1770,8 +1779,8 @@ fox
imagination. In this year, with Man's thoughts turned toward imagination. In this year, with Man's thoughts turned toward
the many ills he has brought among himself, Man has forgotten the many ills he has brought among himself, Man has forgotten
his most ancient adversary, the gargoyles. his most ancient adversary, the gargoyles.
[ Excerpt from the opening narration to the movie [ Excerpt from the opening narration to the movie
_Gargoyles_, written by Stephen and Elinor Karpf ] _Gargoyles_, written by Stephen and Elinor Karpf ]
*garlic *garlic
1 November - All day long we have travelled, and at a good 1 November - All day long we have travelled, and at a good
speed. The horses seem to know that they are being kindly speed. The horses seem to know that they are being kindly
@@ -1943,7 +1952,7 @@ goddess
by narrowing down your available choices of what to do next: by narrowing down your available choices of what to do next:
if a deity is pushing you, things will go miserably badly until if a deity is pushing you, things will go miserably badly until
there is only one choice left to you. there is only one choice left to you.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
gold gold
gold piece gold piece
A metal of characteristic yellow colour, the most precious A metal of characteristic yellow colour, the most precious
@@ -2056,7 +2065,7 @@ hachi
Its strings break only in very rare instances, usually Its strings break only in very rare instances, usually
because the Harper is sulking or crossed in love. This is because the Harper is sulking or crossed in love. This is
just as well as no one seems to make or sell spare strings. just as well as no one seems to make or sell spare strings.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
After breakfast was over, the ogre called out: "Wife, wife, After breakfast was over, the ogre called out: "Wife, wife,
bring me my golden harp." So she brought it and put it on bring me my golden harp." So she brought it and put it on
@@ -2141,7 +2150,7 @@ hell hound*
savage, more appalling, more hellish be conceived than that savage, more appalling, more hellish be conceived than that
dark form and savage face which broke upon us out of the wall dark form and savage face which broke upon us out of the wall
of fog. of fog.
[ The Hound of the Baskervilles, by Sir Arthur Conan Doyle. ] [ The Hound of the Baskervilles, by Sir Arthur Conan Doyle. ]
hermes hermes
Messenger and herald of the Olympians. Being required to do Messenger and herald of the Olympians. Being required to do
a great deal of travelling and speaking in public, he became a great deal of travelling and speaking in public, he became
@@ -2325,7 +2334,7 @@ hunger
and Hell followed with him. And power was given unto them over and Hell followed with him. And power was given unto them over
the fourth part of the earth, to kill with sword, and with the fourth part of the earth, to kill with sword, and with
hunger, and with death, and with the beasts of the earth. hunger, and with death, and with the beasts of the earth.
[ Revelations of John, 6:1-8 ] [ Revelations of John, 6:1-8 ]
huan*ti huan*ti
The first of five mythical Chinese emperors, Huan Ti is known The first of five mythical Chinese emperors, Huan Ti is known
as the yellow emperor. He rules the _moving_ heavens, as as the yellow emperor. He rules the _moving_ heavens, as
@@ -2567,13 +2576,13 @@ jaguar
Large, flesh-eating animal of the cat family, of Central and Large, flesh-eating animal of the cat family, of Central and
South America. This feline predator (_Panthera onca_) is South America. This feline predator (_Panthera onca_) is
sometimes incorrectly called a panther. sometimes incorrectly called a panther.
[ Van Dale's Groot Woordenboek der Nederlandse Taal ] [ Van Dale's Groot Woordenboek der Nederlandse Taal ]
jellyfish jellyfish
I do not care to share the seas I do not care to share the seas
With jellyfishes such as these; With jellyfishes such as these;
Particularly Portuguese. Particularly Portuguese.
[ Lines on Meeting a Portuguese Man-o'-war while [ Lines on Meeting a Portuguese Man-o'-war while Bathing,
Bathing, by Michael Flanders ] by Michael Flanders ]
juiblex juiblex
jubilex jubilex
Little is known about the Faceless Lord, even the correct Little is known about the Faceless Lord, even the correct
@@ -2688,8 +2697,7 @@ knight
And was a bugbear in men's eyes; And was a bugbear in men's eyes;
But had the fortune in his age But had the fortune in his age
To live a fool and die a sage. To live a fool and die a sage.
[ Don Quixote of La Mancha, by Miquel de [ Don Quixote of La Mancha, by Miquel de Cervantes Saavedra ]
Cervantes Saavedra ]
~kobold ??m* ~kobold ??m*
*kobold* *kobold*
The race of kobolds are reputed to be an artificial creation The race of kobolds are reputed to be an artificial creation
@@ -2805,8 +2813,7 @@ lance
his lance into shivers, carrying him and his horse after it, his lance into shivers, carrying him and his horse after it,
and finally tumbled him a good way off from it on the field in and finally tumbled him a good way off from it on the field in
evil plight. evil plight.
[ Don Quixote of La Mancha, by Miquel de [ Don Quixote of La Mancha, by Miquel de Cervantes Saavedra ]
Cervantes Saavedra ]
land mine land mine
Your heart is intact, your brain is not badly damaged, but the rest Your heart is intact, your brain is not badly damaged, but the rest
of your injuries are comparable to stepping on a land mine. You'd of your injuries are comparable to stepping on a land mine. You'd
@@ -2911,7 +2918,7 @@ leprechaun
way to divert his captor's attention and vanishes in the way to divert his captor's attention and vanishes in the
twinkling of an eye. twinkling of an eye.
[ A Field Guide to the Little People [ A Field Guide to the Little People
by Nancy Arrowsmith & George Moorse ] by Nancy Arrowsmith & George Moorse ]
*lich *lich
But on its heels ere the sunset faded, there came a second But on its heels ere the sunset faded, there came a second
apparition, striding with incredible strides and halting when apparition, striding with incredible strides and halting when
@@ -3029,10 +3036,12 @@ bad luck
that?" that?"
Jack shrugged [...]. "Bad grace, I suppose. Just because I Jack shrugged [...]. "Bad grace, I suppose. Just because I
shot off his ear and made him jump into a pit full of spikes." shot off his ear and made him jump into a pit full of spikes."
[ the hollow chocolate bunnies of [ the hollow chocolate bunnies of the apocalypse,
the apocalypse, by Robert Rankin ] by Robert Rankin ]
# [no relation... both cover and title page list # [no relation... both cover and title page list this
# this book's title in all lower case] # book's title in all lower case; however, its sequel,
# "the toyminator", refers to it using conventional
# capitalization in a couple of early footnotes]
lug* lug*
Lugh, or Lug, was the sun god of the Irish Celts. One of his Lugh, or Lug, was the sun god of the Irish Celts. One of his
weapons was a rod-sling which worshippers sometimes saw in weapons was a rod-sling which worshippers sometimes saw in
@@ -3282,7 +3291,7 @@ gnomish mines
unwanted emeralds, etc., still embedded in the rock of the unwanted emeralds, etc., still embedded in the rock of the
walls. Metal will also be present, but only when made up into walls. Metal will also be present, but only when made up into
armor and weapons (_wondrous_). armor and weapons (_wondrous_).
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
minotaur minotaur
The Minotaur was a monster, half bull, half human, the The Minotaur was a monster, half bull, half human, the
offspring of Minos' wife Pasiphae and a wonderfully beautiful offspring of Minos' wife Pasiphae and a wonderfully beautiful
@@ -3307,9 +3316,8 @@ mit*ra*
and contracts. He is attributed with the creation of both and contracts. He is attributed with the creation of both
plants and animals. His chief adversary is Ahriman, the plants and animals. His chief adversary is Ahriman, the
power of darkness. power of darkness.
[ The Encyclopaedia of Myths and Legends of All [ The Encyclopaedia of Myths and Legends of All Nations,
Nations, by Herbert Spencer Robinson and by Herbert Spencer Robinson and Knox Wilson ]
Knox Wilson ]
*mithril* *mithril*
_Mithril_! All folk desired it. It could be beaten like _Mithril_! All folk desired it. It could be beaten like
copper, and polished like glass; and the Dwarves could make copper, and polished like glass; and the Dwarves could make
@@ -3556,9 +3564,8 @@ ninja-to
good condition by placing fresh earth around it daily. In her good condition by placing fresh earth around it daily. In her
fury, Skuld often spoiled the work of her sisters by tearing fury, Skuld often spoiled the work of her sisters by tearing
the web to shreds. the web to shreds.
[ The Encyclopedia of Myths and Legends of All [ The Encyclopedia of Myths and Legends of All Nations
Nations by Herbert Spencer Robinson and Knox by Herbert Spencer Robinson and Knox Wilson ]
Wilson ]
nunchaku nunchaku
A nunchaku is two sections of wood (or metal in modern A nunchaku is two sections of wood (or metal in modern
incarnations) connected by a cord or chain. There is much incarnations) connected by a cord or chain. There is much
@@ -3812,7 +3819,7 @@ panther
Nay, rather did impede so much my way, Nay, rather did impede so much my way,
That many times I to return had turned. That many times I to return had turned.
[ Dante's Inferno, as translated [ Dante's Inferno, as translated
by Henry Wadsworth Longfellow ] by Henry Wadsworth Longfellow ]
*paper *paper
Some players, who unconsciously perceive Paper as weak or a Some players, who unconsciously perceive Paper as weak or a
sign of surrender, will shy away from using it entirely or sign of surrender, will shy away from using it entirely or
@@ -3934,7 +3941,7 @@ pony
You will travel through them both to distant parts of the You will travel through them both to distant parts of the
continent and to and from our own world. The precise manner continent and to and from our own world. The precise manner
of their working is a Management secret. of their working is a Management secret.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
poseido*n poseido*n
Poseido(o)n, lord of the seas and father of rivers and Poseido(o)n, lord of the seas and father of rivers and
fountains, was the son of Chronos and Rhea, brother of Zeus, fountains, was the son of Chronos and Rhea, brother of Zeus,
@@ -3951,8 +3958,8 @@ poseido*n
shake the earth, a power which makes him the god of shake the earth, a power which makes him the god of
earthquakes as well. Physically, he is shown as a strong and earthquakes as well. Physically, he is shown as a strong and
powerful ruler, every inch a king. powerful ruler, every inch a king.
[ The Encyclopedia of Myths and Legends of All [ The Encyclopedia of Myths and Legends of All Nations,
Nations, by Herbert Robinson and Knox Wilson ] by Herbert Robinson and Knox Wilson ]
~*sleeping ~*sleeping
~*booze ~*booze
*potion* *potion*
@@ -4105,7 +4112,7 @@ quasit
why not? By then you will have had a lot of practice in why not? By then you will have had a lot of practice in
that sort of thing and, besides, the Quest Object is usually that sort of thing and, besides, the Quest Object is usually
designed to help you do it. designed to help you do it.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
quetzalcoatl quetzalcoatl
One of the principal Aztec-Toltec gods was the great and wise One of the principal Aztec-Toltec gods was the great and wise
Quetzalcoatl, who was called Kukumatz in Guatemala, and Quetzalcoatl, who was called Kukumatz in Guatemala, and
@@ -4222,7 +4229,7 @@ robe
are dealing with. are dealing with.
2. For Kings. The OMT here is _falling in stately folds_. 2. For Kings. The OMT here is _falling in stately folds_.
3. As the garb of Desert Nomads. [...] 3. As the garb of Desert Nomads. [...]
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
rock rock
Bilbo saw that the moment had come when he must do something. Bilbo saw that the moment had come when he must do something.
He could not get up at the brutes and he had nothing to shoot He could not get up at the brutes and he had nothing to shoot
@@ -4685,8 +4692,8 @@ javelin
of Rome in Nero's time, for instance? Why, it would merely of Rome in Nero's time, for instance? Why, it would merely
say 'Town burned down; no insurance; boy brast a window, say 'Town burned down; no insurance; boy brast a window,
fireman brake his neck!' Why, that ain't a picture! fireman brake his neck!' Why, that ain't a picture!
[ A Connecticut Yankee in King Arthur's Court, by Mark [ A Connecticut Yankee in King Arthur's Court,
Twain ] by Mark Twain ]
*spellbook* *spellbook*
The Book of Three lay closed on the table. Taran had never The Book of Three lay closed on the table. Taran had never
been allowed to read the volume for himself; now he was sure been allowed to read the volume for himself; now he was sure
@@ -4862,7 +4869,7 @@ tengu
feuds and prolonging enmity between families. Indeed, the feuds and prolonging enmity between families. Indeed, the
belligerent tengu were supposed to have been man's first belligerent tengu were supposed to have been man's first
instructors in the use of arms. instructors in the use of arms.
[ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ] [ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ]
thoth thoth
The Egyptian god of the moon and wisdom, Thoth is the patron The Egyptian god of the moon and wisdom, Thoth is the patron
deity of scribes and of knowledge, including scientific, deity of scribes and of knowledge, including scientific,
@@ -5026,8 +5033,7 @@ towel
wave your towel in emergencies as a distress signal, and of wave your towel in emergencies as a distress signal, and of
course dry yourself off with it if it still seems to be clean course dry yourself off with it if it still seems to be clean
enough. enough.
[ The Hitchhiker's Guide to the Galaxy, [ The Hitchhiker's Guide to the Galaxy, by Douglas Adams ]
by Douglas Adams ]
*tower *tower
*tower of darkness *tower of darkness
Towers (_brooding_, _dark_) stand alone in Waste Areas and Towers (_brooding_, _dark_) stand alone in Waste Areas and
@@ -5036,7 +5042,7 @@ towel
blocks of masonry that make them very hard to climb. [...] blocks of masonry that make them very hard to climb. [...]
You will have to go to a Tower and then break into it at some You will have to go to a Tower and then break into it at some
point towards the end of your Tour. point towards the end of your Tour.
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ] [ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
trap*door trap*door
I knew my Erik too well to feel at all comfortable on jumping I knew my Erik too well to feel at all comfortable on jumping
into his house. I knew what he had made of a certain palace at into his house. I knew what he had made of a certain palace at
@@ -5187,7 +5193,7 @@ unicorn horn
tamed and captured by a maiden. Made gentle by the sight of a tamed and captured by a maiden. Made gentle by the sight of a
virgin, the unicorn can be lured to lay its head in her lap, and virgin, the unicorn can be lured to lay its head in her lap, and
in this docile mood, the maiden may secure it with a golden rope. in this docile mood, the maiden may secure it with a golden rope.
[ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ] [ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ]
Martin took a small sip of beer. "Almost ready," he said. Martin took a small sip of beer. "Almost ready," he said.
"You hold your beer awfully well." "You hold your beer awfully well."
@@ -5208,9 +5214,8 @@ valkyrie
without restraint and fighting over again the battles in without restraint and fighting over again the battles in
which they died and in which they had won their deathless which they died and in which they had won their deathless
fame. fame.
[ The Encyclopaedia of Myths and Legends of All [ The Encyclopaedia of Myths and Legends of All Nations,
Nations, by Herbert Robinson and Knox by Herbert Robinson and Knox Wilson ]
Wilson ]
vampire vampire
~vampire bat ~vampire bat
vampire lord vampire lord
@@ -5322,8 +5327,7 @@ water
And all the boards did shrink; And all the boards did shrink;
Water, water, everywhere Water, water, everywhere
Nor any drop to drink. Nor any drop to drink.
[ The Rime of the Ancient Mariner, by Samuel Taylor [ The Rime of the Ancient Mariner, by Samuel Taylor Coleridge ]
Coleridge ]
water demon water demon
[ The monkey king ] walked along the bank, around the pond. [ The monkey king ] walked along the bank, around the pond.
He examined the footprints of the animals that had gone into He examined the footprints of the animals that had gone into
@@ -5422,8 +5426,8 @@ wolf
some of these plants, which yield a poisonous alkaloid that some of these plants, which yield a poisonous alkaloid that
was formerly used medicinally. In both senses also called was formerly used medicinally. In both senses also called
monkshood. monkshood.
[ The American Heritage Dictionary of the English Language, [ The American Heritage Dictionary of
Fourth Edition. ] the English Language, Fourth Edition. ]
wood golem wood golem
Come, old broomstick, you are needed, Come, old broomstick, you are needed,
Take these rags and wrap them round you! Take these rags and wrap them round you!
@@ -5442,8 +5446,8 @@ wood golem
How the water spills, How the water spills,
How the water basins How the water basins
Brimming full he fills! Brimming full he fills!
[ The Sorcerer's Apprentice, by Johann Wolfgang von Goethe, [ The Sorcerer's Apprentice, by Johann Wolfgang von Goethe,
translation by Edwin Zeydel ] translation by Edwin Zeydel ]
woodchuck woodchuck
The Usenet Oracle requires an answer to this question! The Usenet Oracle requires an answer to this question!
+78 -11
View File
@@ -5283,18 +5283,19 @@ that moment you had never known that you always wanted to do it...
# #
# #
# #
%title Raising Steam (8) %title Raising Steam (13)
# p. 281 (Anchor Books edition; passage starts mid-paragraph)
%passage 1 %passage 1
Yesterday you never thought about it and after today you [...] And yesterday you never thought about it and after today you don't
don't know what you would do without it. know what you would do without it. That was what the technology was doing.
That was what the technology was doing.
It was your slave but, in a sense, it might be the other way round. It was your slave but, in a sense, it might be the other way round.
[Raising Steam, by Terry Pratchett] [Raising Steam, by Terry Pratchett]
%e passage %e passage
# p. 358 (passage starts mid-paragraph and ends mid-paragraph; quote is
# attributed to Lord Vetinari but he's not present in the scene)
%passage 2 %passage 2
If you take enough precautions, you never need to take precautions. "If you take enough precautions, you never need to take precautions."
[Raising Steam, by Terry Pratchett] [Raising Steam, by Terry Pratchett]
%e passage %e passage
@@ -5388,22 +5389,88 @@ looking at.
[Raising Steam, by Terry Pratchett] [Raising Steam, by Terry Pratchett]
%e passage %e passage
##
# passages 9..13 added after 3.6.0's release
##
# pp. 20-21
%passage 9
Moist Von Lipwig had done some heavy work once and couldn't see any future
in it, but he could look at it for hours, provided other people were doing
it, of course, and clearly some of them liked what they were doing, and so
he shrugged and felt happy that Crisp was happy being a handyman whilst
Moist was happy not picking up anything that was heavier than a glass.
After all, his work was unseen and depended on words, which were
fortunately not very heavy and didn't need grease. In his career as a
crook they had served him well and now he felt somewhat smug at using them
to the benefit of the citizenry.
There was a difference between a banker and a crook, there really was, and
although it was very, very teeny Moist felt that he should point out that
it did exist and, besides, Lord Vetinari always had his eye on him.
So everybody was happy and Moist went to work in very clean clothes and
with a very clean conscience.
[Raising Steam, by Terry Pratchett]
%e passage
# p. 22
%passage 10
Harry, red-faced and impatient, looked over his desk and said to him, "Lad,
time is money and I'm a busy man. You told Nancy down on reception that
you've got something I might like. Now stop fidgeting and look me in the
face square like. If you're another chancer wanting to bamboozle me I'll
have you down the Effing stairs(1) before you know it."
(1) The wonderfully colored oak wood of the Effing Forest was much in
demand for high-class joinery.
[Raising Steam, by Terry Pratchett]
%e passage
# p. 80
%passage 11
Moist knew about the zeitgeist, he tasted it in the wind, and sometimes it
allowed him to play with it. He understood it, and now it hinted at speed,
escape, something wonderfully new, the very bones of the land awakening,
and suddenly it seemed to cry out for motion, new horizons, faraway places,
/anywhere that is not here/! No doubt about it, the railway was going to
turn coal into gold.
[Raising Steam, by Terry Pratchett]
%e passage
# p. 195 (passage starts mid-paragraph and ends mid-paragraph)
%passage 12
And the trouble with madness was that the mad didn't know they were mad.
[Raising Steam, by Terry Pratchett]
%e passage
# p. 284 (passage starts mid-paragraph; speaker is Cmdr Vimes of the Watch)
%passage 13
"[...] That's the trouble, you see. When you've had hatred on your tongue
for such a long time, you don't know how to spit it out."
[Raising Steam, by Terry Pratchett]
%e passage
%e title %e title
#
#
#
%title The Shepherd's Crown (1) %title The Shepherd's Crown (1)
%passage 1 %passage 1
'It's an inconvenience, true enough, and I don't like it at all, but I 'It's an inconvenience, true enough, and I don't like it at all, but I
know that you do it for everyone, Mister Death. Is there any other way?' know that you do it for everyone, Mister Death. Is there any other way?'
NO, THERE ISN'T, I'M AFRAID. WE ARE ALL FLOATING IN THE WINDS OF TIME. NO, THERE ISN'T, I'M AFRAID. WE ARE ALL FLOATING IN THE WINDS OF TIME.
BUT YOUR CANDLE, MISTRESS WEATHERWAX, WILL FLICKER FOR SOME TIME BEFORE BUT YOUR CANDLE, MISTRESS WEATHERWAX, WILL FLICKER FOR SOME TIME BEFORE
IT GOES OUT -- A LITTLE REWARD FOR A LIFE WELL LIVED. FOR I CAN SEE THE IT GOES OUT -- A LITTLE REWARD FOR A LIFE WELL LIVED. FOR I CAN SEE THE
BALANCE AND YOU HAVE LEFT THE WORLD MUCH BETTER THAN YOU FOUND IT, AND BALANCE AND YOU HAVE LEFT THE WORLD MUCH BETTER THAN YOU FOUND IT, AND
IF YOU ASK ME, said Death, NOBODY COULD DO ANY BETTER THAN THAT. . . IF YOU ASK ME, said Death, NOBODY COULD DO ANY BETTER THAN THAT...
[The Shepherd's Crown, by Terry Pratchett] [The Shepherd's Crown, by Terry Pratchett]
%e passage %e passage
%e title %e title
#
%e section %e section
#
#----------------------------------------------------- #-----------------------------------------------------
# Used for interaction with Death. # Used for interaction with Death.
# #
+18
View File
@@ -45,6 +45,18 @@ make MAXPLAYERS option in sysconf accept 0 value
avoid hearing yelps when you are deaf avoid hearing yelps when you are deaf
make corpse visible if stethoscope told you about it being there make corpse visible if stethoscope told you about it being there
sceptre of might database entry word change sceptre of might database entry word change
avoid "spellbook of novel" on discoveries list after object ID of novel
add novel to discoveries list after reading one
putting gold into hero-owned container on shop floor gave free credit
stack splitting for dipping large quantities of potions was done poorly
dipping fruit juice into enlightenment gave different result than the inverse
make travel walk up to a trap and stop when the trap blocks the only
way forward, instead of trying to go straight line
travel will displace pets rather than stop
do not autopickup unpaid items in shops
death due an unseen gas spore's explosion resulted in "killed by a died"
allow optional parameter "true", "yes", "false", or "no" for boolean options
actually make the castle chest not trapped
Platform- and/or Interface-Specific Fixes Platform- and/or Interface-Specific Fixes
@@ -55,6 +67,7 @@ tty: specifying all four of role, race, gender, and alignment still prompted
for confirmation with "Is this ok?" before starting play for confirmation with "Is this ok?" before starting play
unix/X11: in top level Makefile, some commented out definitions of VARDATND unix/X11: in top level Makefile, some commented out definitions of VARDATND
misspelled pilemark.xbm (as pilemark.xpm) misspelled pilemark.xbm (as pilemark.xpm)
unix/tty: fix compile warning about 'has_colors' for some configurations
win32gui: getversionstring() was overflowing the provided Help About buffer win32gui: getversionstring() was overflowing the provided Help About buffer
win32gui: guard against buffer overflow in in mswin_getlin() win32gui: guard against buffer overflow in in mswin_getlin()
MacOSX: initial binary release was built from out of date source code that MacOSX: initial binary release was built from out of date source code that
@@ -68,6 +81,10 @@ General New Features
naming Sting or Orcrist now breaks illiterate conduct naming Sting or Orcrist now breaks illiterate conduct
different feedback for reading a scroll of mail created by writing with marker different feedback for reading a scroll of mail created by writing with marker
wizard mode #wizintrinsic wizard mode #wizintrinsic
reading non-cursed scroll of enchant weapon uncurses welded tin opener
if hero has no jumping ability but knows the jumping spell, the #jump command
will attempt to cast the spell
additional passages for Raising Steam
Platform- and/or Interface-Specific New Features Platform- and/or Interface-Specific New Features
@@ -76,6 +93,7 @@ Platform- and/or Interface-Specific New Features
NetHack Community Patches (or Variation) Included NetHack Community Patches (or Variation) Included
------------------------------------------------- -------------------------------------------------
Malcolm Ryan's improved tin opener
Code Cleanup and Reorganization Code Cleanup and Reorganization
+2 -1
View File
@@ -604,6 +604,7 @@ E void NDECL(init_uhunger);
E int NDECL(Hear_again); E int NDECL(Hear_again);
E void NDECL(reset_eat); E void NDECL(reset_eat);
E int NDECL(doeat); E int NDECL(doeat);
E int FDECL(use_tin_opener, (struct obj *));
E void NDECL(gethungry); E void NDECL(gethungry);
E void FDECL(morehungry, (int)); E void FDECL(morehungry, (int));
E void FDECL(lesshungry, (int)); E void FDECL(lesshungry, (int));
@@ -1644,7 +1645,7 @@ E int FDECL(add_autopickup_exception, (const char *));
E void NDECL(free_autopickup_exceptions); E void NDECL(free_autopickup_exceptions);
E int FDECL(load_symset, (const char *, int)); E int FDECL(load_symset, (const char *, int));
E void NDECL(free_symsets); E void NDECL(free_symsets);
E void FDECL(parsesymbols, (char *)); E boolean FDECL(parsesymbols, (char *));
E struct symparse *FDECL(match_sym, (char *)); E struct symparse *FDECL(match_sym, (char *));
E void NDECL(set_playmode); E void NDECL(set_playmode);
E int FDECL(sym_val, (char *)); E int FDECL(sym_val, (char *));
+1
View File
@@ -277,6 +277,7 @@ NEARDATA extern coord bhitpos; /* place where throw or zap hits or stops */
#define DO_MOVE 0 /* really doing the move */ #define DO_MOVE 0 /* really doing the move */
#define TEST_MOVE 1 /* test a normal move (move there next) */ #define TEST_MOVE 1 /* test a normal move (move there next) */
#define TEST_TRAV 2 /* test a future travel location */ #define TEST_TRAV 2 /* test a future travel location */
#define TEST_TRAP 3 /* check if a future travel loc is a trap */
/*** some utility macros ***/ /*** some utility macros ***/
#define yn(query) yn_function(query, ynchars, 'n') #define yn(query) yn_function(query, ynchars, 'n')
+14 -14
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 apply.c $NHDT-Date: 1450481050 2015/12/18 23:24:10 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.214 $ */ /* NetHack 3.6 apply.c $NHDT-Date: 1450582748 2015/12/20 03:39:08 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.217 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1502,6 +1502,17 @@ int magic; /* 0=Physical, otherwise skill level */
{ {
coord cc; coord cc;
/* attempt "jumping" spell if hero has no innate jumping ability */
if (!magic && !Jumping) {
int sp_no;
for (sp_no = 0; sp_no < MAXSPELL; ++sp_no)
if (spl_book[sp_no].sp_id == NO_SPELL)
break;
else if (spl_book[sp_no].sp_id == SPE_JUMPING)
return spelleffects(sp_no, FALSE);
}
if (!magic && (nolimbs(youmonst.data) || slithy(youmonst.data))) { if (!magic && (nolimbs(youmonst.data) || slithy(youmonst.data))) {
/* normally (nolimbs || slithy) implies !Jumping, /* normally (nolimbs || slithy) implies !Jumping,
but that isn't necessarily the case for knights */ but that isn't necessarily the case for knights */
@@ -3494,18 +3505,8 @@ doapply()
res = dowrite(obj); res = dowrite(obj);
break; break;
case TIN_OPENER: case TIN_OPENER:
if (!carrying(TIN)) { res = use_tin_opener(obj);
You("have no tin to open."); break;
goto xit;
}
You("cannot open a tin without eating or discarding its contents.");
if (flags.verbose)
pline("In order to eat, use the 'e' command.");
if (obj != uwep)
pline(
"Opening the tin will be much easier if you wield the tin opener.");
goto xit;
case FIGURINE: case FIGURINE:
use_figurine(&obj); use_figurine(&obj);
break; break;
@@ -3547,7 +3548,6 @@ doapply()
break; break;
} }
pline("Sorry, I don't know how to use that."); pline("Sorry, I don't know how to use that.");
xit:
nomul(0); nomul(0);
return 0; return 0;
} }
+34 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 eat.c $NHDT-Date: 1449269916 2015/12/04 22:58:36 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.154 $ */ /* NetHack 3.6 eat.c $NHDT-Date: 1450573885 2015/12/20 01:11:25 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.156 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -2579,6 +2579,39 @@ doeat()
return 1; return 1;
} }
int
use_tin_opener(obj)
struct obj *obj;
{
struct obj *otmp;
int res = 0;
if (!carrying(TIN)) {
You("have no tin to open.");
return 0;
}
if (obj != uwep) {
if (obj->cursed && obj->bknown) {
char qbuf[QBUFSZ];
if (ynq(safe_qbuf(qbuf, "Really wield ", "?",
obj, doname, thesimpleoname, "that")) != 'y')
return 0;
}
if (!wield_tool(obj, "use"))
return 0;
res = 1;
}
otmp = getobj(comestibles, "open");
if (!otmp)
return res;
start_tin(otmp);
return 1;
}
/* Take a single bite from a piece of food, checking for choking and /* Take a single bite from a piece of food, checking for choking and
* modifying usedtime. Returns 1 if they choked and survived, 0 otherwise. * modifying usedtime. Returns 1 if they choked and survived, 0 otherwise.
*/ */
+8 -9
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 explode.c $NHDT-Date: 1446955298 2015/11/08 04:01:38 $ $NHDT-Branch: master $:$NHDT-Revision: 1.44 $ */ /* NetHack 3.6 explode.c $NHDT-Date: 1450915435 2015/12/24 00:03:55 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.45 $ */
/* Copyright (C) 1990 by Ken Arromdee */ /* Copyright (C) 1990 by Ken Arromdee */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -311,12 +311,13 @@ int expltype;
so avoid any which begins with a capital letter) */ so avoid any which begins with a capital letter) */
do { do {
Sprintf(hallu_buf, "%s explosion", Sprintf(hallu_buf, "%s explosion",
s_suffix(rndmonnam(NULL))); s_suffix(rndmonnam((char *) 0)));
} while (*hallu_buf != lowc(*hallu_buf)); } while (*hallu_buf != lowc(*hallu_buf));
str = hallu_buf; str = hallu_buf;
} }
if (u.uswallow && mtmp == u.ustuck) { if (u.uswallow && mtmp == u.ustuck) {
const char *adj = NULL; const char *adj = (char *) 0;
if (is_animal(u.ustuck->data)) { if (is_animal(u.ustuck->data)) {
switch (adtyp) { switch (adtyp) {
case AD_FIRE: case AD_FIRE:
@@ -431,7 +432,7 @@ int expltype;
if (do_hallu) { /* (see explanation above) */ if (do_hallu) { /* (see explanation above) */
do { do {
Sprintf(hallu_buf, "%s explosion", Sprintf(hallu_buf, "%s explosion",
s_suffix(rndmonnam(NULL))); s_suffix(rndmonnam((char *) 0)));
} while (*hallu_buf != lowc(*hallu_buf)); } while (*hallu_buf != lowc(*hallu_buf));
str = hallu_buf; str = hallu_buf;
} }
@@ -468,9 +469,8 @@ int expltype;
rehumanize(); rehumanize();
} else { } else {
if (olet == MON_EXPLODE) { if (olet == MON_EXPLODE) {
/* killer handled by caller */ if (generic) /* explosion was unseen; str=="explosion", */
if (generic) ; /* killer.name=="gas spore's explosion" */
killer.name[0] = 0;
else if (str != killer.name && str != hallu_buf) else if (str != killer.name && str != hallu_buf)
Strcpy(killer.name, str); Strcpy(killer.name, str);
killer.format = KILLED_BY_AN; killer.format = KILLED_BY_AN;
@@ -486,8 +486,7 @@ int expltype;
Strcpy(killer.name, str); Strcpy(killer.name, str);
} }
if (iflags.last_msg == PLNMSG_CAUGHT_IN_EXPLOSION if (iflags.last_msg == PLNMSG_CAUGHT_IN_EXPLOSION
|| iflags.last_msg || iflags.last_msg == PLNMSG_TOWER_OF_FLAME) /*seffects()*/
== PLNMSG_TOWER_OF_FLAME) /*seffects()*/
pline("It is fatal."); pline("It is fatal.");
else else
pline_The("%s is fatal.", str); pline_The("%s is fatal.", str);
+4 -1
View File
@@ -2386,7 +2386,10 @@ int src;
*op = '\0'; *op = '\0';
} }
/* parse here */ /* parse here */
parsesymbols(bufp); if (!parsesymbols(bufp)) {
raw_printf("Error in SYMBOLS definition '%s'.\n", bufp);
wait_synch();
}
if (morelines) { if (morelines) {
do { do {
*symbuf = '\0'; *symbuf = '\0';
+28 -13
View File
@@ -657,7 +657,7 @@ xchar x, y;
} }
/* return TRUE if (dx,dy) is an OK place to move /* return TRUE if (dx,dy) is an OK place to move
* mode is one of DO_MOVE, TEST_MOVE or TEST_TRAV * mode is one of DO_MOVE, TEST_MOVE, TEST_TRAV, or TEST_TRAP
*/ */
boolean boolean
test_move(ux, uy, dx, dy, mode) test_move(ux, uy, dx, dy, mode)
@@ -747,7 +747,7 @@ int mode;
} else } else
pline("That door is closed."); pline("That door is closed.");
} }
} else if (mode == TEST_TRAV) } else if (mode == TEST_TRAV || mode == TEST_TRAP)
goto testdiag; goto testdiag;
return FALSE; return FALSE;
} }
@@ -790,15 +790,19 @@ int mode;
/* Pick travel path that does not require crossing a trap. /* Pick travel path that does not require crossing a trap.
* Avoid water and lava using the usual running rules. * Avoid water and lava using the usual running rules.
* (but not u.ux/u.uy because findtravelpath walks toward u.ux/u.uy) */ * (but not u.ux/u.uy because findtravelpath walks toward u.ux/u.uy) */
if (context.run == 8 && mode != DO_MOVE && (x != u.ux || y != u.uy)) { if (context.run == 8
&& (mode == TEST_MOVE || mode == TEST_TRAP)
&& (x != u.ux || y != u.uy)) {
struct trap *t = t_at(x, y); struct trap *t = t_at(x, y);
if ((t && t->tseen) if ((t && t->tseen)
|| (!Levitation && !Flying && !is_clinger(youmonst.data) || (!Levitation && !Flying && !is_clinger(youmonst.data)
&& is_pool_or_lava(x, y) && levl[x][y].seenv)) && is_pool_or_lava(x, y) && levl[x][y].seenv))
return FALSE; return (mode == TEST_TRAP);
} }
if (mode == TEST_TRAP) return FALSE; /* do not move through traps */
ust = &levl[ux][uy]; ust = &levl[ux][uy];
/* Now see if other things block our way . . */ /* Now see if other things block our way . . */
@@ -915,6 +919,7 @@ boolean guess;
static int ordered[] = { 0, 2, 4, 6, 1, 3, 5, 7 }; static int ordered[] = { 0, 2, 4, 6, 1, 3, 5, 7 };
/* no diagonal movement for grid bugs */ /* no diagonal movement for grid bugs */
int dirmax = NODIAG(u.umonnum) ? 4 : 8; int dirmax = NODIAG(u.umonnum) ? 4 : 8;
boolean alreadyrepeated = FALSE;
for (dir = 0; dir < dirmax; ++dir) { for (dir = 0; dir < dirmax; ++dir) {
int nx = x + xdir[ordered[dir]]; int nx = x + xdir[ordered[dir]];
@@ -923,14 +928,18 @@ boolean guess;
if (!isok(nx, ny)) if (!isok(nx, ny))
continue; continue;
if ((!Passes_walls && !can_ooze(&youmonst) if ((!Passes_walls && !can_ooze(&youmonst)
&& closed_door(x, y)) || sobj_at(BOULDER, x, y)) { && closed_door(x, y)) || sobj_at(BOULDER, x, y)
|| test_move(x, y, nx-x, ny-y, TEST_TRAP)) {
/* closed doors and boulders usually /* closed doors and boulders usually
* cause a delay, so prefer another path */ * cause a delay, so prefer another path */
if (travel[x][y] > radius - 3) { if (travel[x][y] > radius - 3) {
travelstepx[1 - set][nn] = x; if (!alreadyrepeated) {
travelstepy[1 - set][nn] = y; travelstepx[1 - set][nn] = x;
/* don't change travel matrix! */ travelstepy[1 - set][nn] = y;
nn++; /* don't change travel matrix! */
nn++;
alreadyrepeated = TRUE;
}
continue; continue;
} }
} }
@@ -1361,8 +1370,9 @@ domove()
} }
mtmp = m_at(x, y); mtmp = m_at(x, y);
if (mtmp) { if (mtmp && !is_safepet(mtmp)) {
/* Don't attack if you're running, and can see it */ /* Don't attack if you're running, and can see it */
/* It's fine to displace pets, though */
/* We should never get here if forcefight */ /* We should never get here if forcefight */
if (context.run && ((!Blind && mon_visible(mtmp) if (context.run && ((!Blind && mon_visible(mtmp)
&& ((mtmp->m_ap_type != M_AP_FURNITURE && ((mtmp->m_ap_type != M_AP_FURNITURE
@@ -1384,7 +1394,10 @@ domove()
/* attack monster */ /* attack monster */
if (mtmp) { if (mtmp) {
nomul(0); /* don't stop travel when displacing pets; if the
displace fails for some reason, attack() in uhitm.c
will stop travel rather than domove */
if (!is_safepet(mtmp) || context.forcefight) nomul(0);
/* only attack if we know it's there */ /* only attack if we know it's there */
/* or if we used the 'F' command to fight blindly */ /* or if we used the 'F' command to fight blindly */
/* or if it hides_under, in which case we call attack() to print /* or if it hides_under, in which case we call attack() to print
@@ -1400,7 +1413,7 @@ domove()
* attack_check(), which still wastes a turn, but prints a * attack_check(), which still wastes a turn, but prints a
* different message and makes the player remember the monster. * different message and makes the player remember the monster.
*/ */
if (context.nopick if (context.nopick && !context.travel
&& (canspotmon(mtmp) || glyph_is_invisible(levl[x][y].glyph))) { && (canspotmon(mtmp) || glyph_is_invisible(levl[x][y].glyph))) {
if (mtmp->m_ap_type && !Protection_from_shape_changers if (mtmp->m_ap_type && !Protection_from_shape_changers
&& !sensemon(mtmp)) && !sensemon(mtmp))
@@ -2406,7 +2419,7 @@ lookaround()
&& mtmp->m_ap_type != M_AP_OBJECT && mtmp->m_ap_type != M_AP_OBJECT
&& (!mtmp->minvis || See_invisible) && !mtmp->mundetected) { && (!mtmp->minvis || See_invisible) && !mtmp->mundetected) {
if ((context.run != 1 && !mtmp->mtame) if ((context.run != 1 && !mtmp->mtame)
|| (x == u.ux + u.dx && y == u.uy + u.dy)) || (x == u.ux + u.dx && y == u.uy + u.dy && !context.travel))
goto stop; goto stop;
} }
@@ -2669,6 +2682,8 @@ boolean k_format;
u.uhp -= n; u.uhp -= n;
if (u.uhp > u.uhpmax) if (u.uhp > u.uhpmax)
u.uhpmax = u.uhp; /* perhaps n was negative */ u.uhpmax = u.uhp; /* perhaps n was negative */
else
context.travel = context.travel1 = context.mv = context.run = 0;
context.botl = 1; context.botl = 1;
if (u.uhp < 1) { if (u.uhp < 1) {
killer.format = k_format; killer.format = k_format;
+1
View File
@@ -1099,6 +1099,7 @@ register const char *let, *word;
&& (otmp->otyp != HORN_OF_PLENTY || !otmp->dknown && (otmp->otyp != HORN_OF_PLENTY || !otmp->dknown
|| !objects[HORN_OF_PLENTY].oc_name_known)) || !objects[HORN_OF_PLENTY].oc_name_known))
|| (!strcmp(word, "charge") && !is_chargeable(otmp)) || (!strcmp(word, "charge") && !is_chargeable(otmp))
|| (!strcmp(word, "open") && otyp != TIN)
|| (!strcmp(word, "call") && !objtyp_is_callable(otyp)) || (!strcmp(word, "call") && !objtyp_is_callable(otyp))
) { ) {
foo--; foo--;
+7 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 objnam.c $NHDT-Date: 1450306207 2015/12/16 22:50:07 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.158 $ */ /* NetHack 3.6 objnam.c $NHDT-Date: 1450584419 2015/12/20 04:06:59 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.159 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -120,7 +120,12 @@ register int otyp;
Strcpy(buf, "wand"); Strcpy(buf, "wand");
break; break;
case SPBOOK_CLASS: case SPBOOK_CLASS:
Strcpy(buf, "spellbook"); if (otyp != SPE_NOVEL) {
Strcpy(buf, "spellbook");
} else {
Strcpy(buf, !nn ? "book" : "novel");
nn = 0;
}
break; break;
case RING_CLASS: case RING_CLASS:
Strcpy(buf, "ring"); Strcpy(buf, "ring");
+29 -5
View File
@@ -3298,7 +3298,7 @@ boolean tinitial, tfrom_file;
* options list * options list
*/ */
for (i = 0; boolopt[i].name; i++) { for (i = 0; boolopt[i].name; i++) {
if (match_optname(opts, boolopt[i].name, 3, FALSE)) { if (match_optname(opts, boolopt[i].name, 3, TRUE)) {
/* options that don't exist */ /* options that don't exist */
if (!boolopt[i].addr) { if (!boolopt[i].addr) {
if (!initial && !negated) if (!initial && !negated)
@@ -3312,6 +3312,23 @@ boolean tinitial, tfrom_file;
return; return;
} }
op = string_for_opt(opts, TRUE);
if (op) {
if (negated) {
badoption(opts);
return;
}
if (!strcmp(op, "true") || !strcmp(op, "yes"))
negated = FALSE;
else if (!strcmp(op, "false") || !strcmp(op, "no"))
negated = TRUE;
else {
badoption(opts);
return;
}
}
*(boolopt[i].addr) = !negated; *(boolopt[i].addr) = !negated;
/* 0 means boolean opts */ /* 0 means boolean opts */
@@ -3385,6 +3402,12 @@ boolean tinitial, tfrom_file;
} }
} }
/* Is it a symbol? */
if (strstr(opts, "S_") == opts && parsesymbols(opts)) {
switch_symbols(TRUE);
return;
}
/* out of valid options */ /* out of valid options */
badoption(opts); badoption(opts);
} }
@@ -4957,7 +4980,7 @@ free_symsets()
} }
/* Parse the value of a SYMBOLS line from a config file */ /* Parse the value of a SYMBOLS line from a config file */
void boolean
parsesymbols(opts) parsesymbols(opts)
register char *opts; register char *opts;
{ {
@@ -4967,7 +4990,7 @@ register char *opts;
if ((op = index(opts, ',')) != 0) { if ((op = index(opts, ',')) != 0) {
*op++ = 0; *op++ = 0;
parsesymbols(op); if (!parsesymbols(op)) return FALSE;
} }
/* S_sample:string */ /* S_sample:string */
@@ -4976,7 +4999,7 @@ register char *opts;
if (!strval) if (!strval)
strval = index(opts, '='); strval = index(opts, '=');
if (!strval) if (!strval)
return; return FALSE;
*strval++ = '\0'; *strval++ = '\0';
/* strip leading and trailing white space from symname and strval */ /* strip leading and trailing white space from symname and strval */
@@ -4985,12 +5008,13 @@ register char *opts;
symp = match_sym(symname); symp = match_sym(symname);
if (!symp) if (!symp)
return; return FALSE;
if (symp->range && symp->range != SYM_CONTROL) { if (symp->range && symp->range != SYM_CONTROL) {
val = sym_val(strval); val = sym_val(strval);
update_l_symset(symp, val); update_l_symset(symp, val);
} }
return TRUE;
} }
struct symparse * struct symparse *
+91 -77
View File
@@ -1,9 +1,9 @@
/* NetHack 3.6 pickup.c $NHDT-Date: 1445556881 2015/10/22 23:34:41 $ $NHDT-Branch: master $:$NHDT-Revision: 1.162 $ */ /* NetHack 3.6 pickup.c $NHDT-Date: 1450604648 2015/12/20 09:44:08 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.167 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
/* /*
* Contains code for picking objects up, and container use. * Contains code for picking objects up, and container use.
*/ */
#include "hack.h" #include "hack.h"
@@ -25,8 +25,8 @@ STATIC_DCL int FDECL(autopick, (struct obj *, int, menu_item **));
STATIC_DCL int FDECL(count_categories, (struct obj *, int)); STATIC_DCL int FDECL(count_categories, (struct obj *, int));
STATIC_DCL long FDECL(carry_count, (struct obj *, struct obj *, long, STATIC_DCL long FDECL(carry_count, (struct obj *, struct obj *, long,
BOOLEAN_P, int *, int *)); BOOLEAN_P, int *, int *));
STATIC_DCL int FDECL(lift_object, STATIC_DCL int FDECL(lift_object, (struct obj *, struct obj *, long *,
(struct obj *, struct obj *, long *, BOOLEAN_P)); BOOLEAN_P));
STATIC_DCL boolean FDECL(mbag_explodes, (struct obj *, int)); STATIC_DCL boolean FDECL(mbag_explodes, (struct obj *, int));
STATIC_PTR int FDECL(in_container, (struct obj *)); STATIC_PTR int FDECL(in_container, (struct obj *));
STATIC_PTR int FDECL(out_container, (struct obj *)); STATIC_PTR int FDECL(out_container, (struct obj *));
@@ -63,13 +63,14 @@ STATIC_DCL void FDECL(tipcontainer, (struct obj *));
/* A variable set in use_container(), to be used by the callback routines */ /* A variable set in use_container(), to be used by the callback routines */
/* in_container() and out_container() from askchain() and use_container(). */ /* in_container() and out_container() from askchain() and use_container(). */
/* Also used by menu_loot() and container_gone(). */ /* Also used by menu_loot() and container_gone(). */
static NEARDATA struct obj *current_container; static NEARDATA struct obj *current_container;
#define Icebox (current_container->otyp == ICE_BOX) #define Icebox (current_container->otyp == ICE_BOX)
static const char moderateloadmsg[] = "You have a little trouble lifting"; static const char
static const char nearloadmsg[] = "You have much trouble lifting"; moderateloadmsg[] = "You have a little trouble lifting",
static const char overloadmsg[] = "You have extreme difficulty lifting"; nearloadmsg[] = "You have much trouble lifting",
overloadmsg[] = "You have extreme difficulty lifting";
/* BUG: this lets you look at cockatrice corpses while blind without /* BUG: this lets you look at cockatrice corpses while blind without
touching them */ touching them */
@@ -89,6 +90,7 @@ boolean here; /* flag for type of obj list linkage */
pline1(doname(otmp)); pline1(doname(otmp));
} else { } else {
winid tmpwin = create_nhwindow(NHW_MENU); winid tmpwin = create_nhwindow(NHW_MENU);
putstr(tmpwin, 0, ""); putstr(tmpwin, 0, "");
do { do {
putstr(tmpwin, 0, doname(otmp)); putstr(tmpwin, 0, doname(otmp));
@@ -125,15 +127,15 @@ int *itemcount;
/* /*
* Suppose some '?' and '!' objects are present, but '/' objects aren't: * Suppose some '?' and '!' objects are present, but '/' objects aren't:
* "a" picks all items without further prompting; * "a" picks all items without further prompting;
* "A" steps through all items, asking one by one; * "A" steps through all items, asking one by one;
* "?" steps through '?' items, asking, and ignores '!' ones; * "?" steps through '?' items, asking, and ignores '!' ones;
* "/" becomes 'A', since no '/' present; * "/" becomes 'A', since no '/' present;
* "?a" or "a?" picks all '?' without further prompting; * "?a" or "a?" picks all '?' without further prompting;
* "/a" or "a/" becomes 'A' since there aren't any '/' * "/a" or "a/" becomes 'A' since there aren't any '/'
* (bug fix: 3.1.0 thru 3.1.3 treated it as "a"); * (bug fix: 3.1.0 thru 3.1.3 treated it as "a");
* "?/a" or "a?/" or "/a?",&c picks all '?' even though no '/' * "?/a" or "a?/" or "/a?",&c picks all '?' even though no '/'
* (ie, treated as if it had just been "?a"). * (ie, treated as if it had just been "?a").
*/ */
STATIC_OVL boolean STATIC_OVL boolean
query_classes(oclasses, one_at_a_time, everything, action, objs, here, query_classes(oclasses, one_at_a_time, everything, action, objs, here,
@@ -168,7 +170,8 @@ int *menu_on_demand;
} }
} else { /* more than one choice available */ } else { /* more than one choice available */
const char *where = 0; const char *where = 0;
register char sym, oc_of_sym, *p; char sym, oc_of_sym, *p;
/* additional choices */ /* additional choices */
ilets[iletct++] = ' '; ilets[iletct++] = ' ';
ilets[iletct++] = 'a'; ilets[iletct++] = 'a';
@@ -189,8 +192,7 @@ int *menu_on_demand;
if (*inbuf == '\033') if (*inbuf == '\033')
return FALSE; return FALSE;
for (p = inbuf; (sym = *p++);) { for (p = inbuf; (sym = *p++) != 0; ) {
/* new A function (selective all) added by GAN 01/09/87 */
if (sym == ' ') if (sym == ' ')
continue; continue;
else if (sym == 'A') else if (sym == 'A')
@@ -407,8 +409,8 @@ struct obj *obj;
/* check for particular bless/curse state */ /* check for particular bless/curse state */
if (bucx_filter) { if (bucx_filter) {
/* first categorize this object's bless/curse state */ /* first categorize this object's bless/curse state */
char bucx = char bucx = !obj->bknown ? 'X'
!obj->bknown ? 'X' : obj->blessed ? 'B' : obj->cursed ? 'C' : 'U'; : obj->blessed ? 'B' : obj->cursed ? 'C' : 'U';
/* if its category is not in the list, reject */ /* if its category is not in the list, reject */
if (!index(valid_menu_classes, bucx)) if (!index(valid_menu_classes, bucx))
@@ -425,11 +427,10 @@ allow_cat_no_uchain(obj)
struct obj *obj; struct obj *obj;
{ {
if (obj != uchain if (obj != uchain
&& ((index(valid_menu_classes,'u') && obj->unpaid) && ((index(valid_menu_classes,'u') && obj->unpaid)
|| index(valid_menu_classes, obj->oclass))) || index(valid_menu_classes, obj->oclass)))
return TRUE; return TRUE;
else return FALSE;
return FALSE;
} }
#endif #endif
@@ -447,9 +448,9 @@ register struct obj *otmp;
* or a monster's inventory if swallowed. * or a monster's inventory if swallowed.
* *
* Arg what: * Arg what:
* >0 autopickup * >0 autopickup
* =0 interactive * =0 interactive
* <0 pickup count of something * <0 pickup count of something
* *
* Returns 1 if tried to pick something up, whether * Returns 1 if tried to pick something up, whether
* or not it succeeded. * or not it succeeded.
@@ -538,11 +539,12 @@ int what; /* should be a long */
if (flags.menu_style != MENU_TRADITIONAL || iflags.menu_requested) { if (flags.menu_style != MENU_TRADITIONAL || iflags.menu_requested) {
/* use menus exclusively */ /* use menus exclusively */
if (count) { /* looking for N of something */ if (count) { /* looking for N of something */
char buf[QBUFSZ]; char qbuf[QBUFSZ];
Sprintf(buf, "Pick %d of what?", count);
Sprintf(qbuf, "Pick %d of what?", count);
val_for_n_or_more = count; /* set up callback selector */ val_for_n_or_more = count; /* set up callback selector */
n = query_objlist(buf, objchain, traverse_how | AUTOSELECT_SINGLE n = query_objlist(qbuf, objchain, traverse_how | AUTOSELECT_SINGLE
| INVORDER_SORT, | INVORDER_SORT,
&pick_list, PICK_ONE, n_or_more); &pick_list, PICK_ONE, n_or_more);
/* correct counts, if any given */ /* correct counts, if any given */
for (i = 0; i < n; i++) for (i = 0; i < n; i++)
@@ -600,11 +602,12 @@ int what; /* should be a long */
traverse_how == BY_NEXTHERE, &via_menu)) { traverse_how == BY_NEXTHERE, &via_menu)) {
if (!via_menu) if (!via_menu)
return 0; return 0;
n = query_objlist( n = query_objlist("Pick up what?", objchain,
"Pick up what?", objchain, traverse_how
traverse_how | (selective ? 0 : INVORDER_SORT), | (selective ? 0 : INVORDER_SORT),
&pick_list, PICK_ANY, &pick_list, PICK_ANY,
via_menu == -2 ? allow_all : allow_category); (via_menu == -2) ? allow_all
: allow_category);
goto menu_pickup; goto menu_pickup;
} }
} }
@@ -657,7 +660,7 @@ int what; /* should be a long */
n_picked += res; n_picked += res;
} }
end_query: end_query:
; /* semicolon needed by brain-damaged compilers */ ; /* statement required after label */
} }
if (!u.uswallow) { if (!u.uswallow) {
@@ -684,9 +687,10 @@ boolean grab; /* forced pickup, rather than forced leave behind? */
* Does the text description of this match an exception? * Does the text description of this match an exception?
*/ */
char *objdesc = makesingular(doname(obj)); char *objdesc = makesingular(doname(obj));
struct autopickup_exception *ape = struct autopickup_exception
(grab) ? iflags.autopickup_exceptions[AP_GRAB] *ape = (grab) ? iflags.autopickup_exceptions[AP_GRAB]
: iflags.autopickup_exceptions[AP_LEAVE]; : iflags.autopickup_exceptions[AP_LEAVE];
while (ape) { while (ape) {
if (regex_match(objdesc, ape->regex)) if (regex_match(objdesc, ape->regex))
return TRUE; return TRUE;
@@ -716,7 +720,12 @@ menu_item **pick_list; /* list of objects and counts to pick up */
/* first count the number of eligible items */ /* first count the number of eligible items */
for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow)) { for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow)) {
pickit = (!*otypes || index(otypes, curr->oclass)); /* pick if in pickup_types and not unpaid item in shop */
pickit = ((!*otypes || index(otypes, curr->oclass))
&& !(curr->where == OBJ_FLOOR
&& !curr->no_charge
&& isok(curr->ox, curr->oy)
&& costly_spot(curr->ox, curr->oy)));
/* check for "always pick up */ /* check for "always pick up */
if (!pickit) if (!pickit)
pickit = is_autopickup_exception(curr, TRUE); pickit = is_autopickup_exception(curr, TRUE);
@@ -732,7 +741,7 @@ menu_item **pick_list; /* list of objects and counts to pick up */
} }
if (n) { if (n) {
*pick_list = pi = (menu_item *) alloc(sizeof(menu_item) * n); *pick_list = pi = (menu_item *) alloc(sizeof (menu_item) * n);
for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow)) { for (n = 0, curr = olist; curr; curr = FOLLOW(curr, follow)) {
pickit = (!*otypes || index(otypes, curr->oclass)); pickit = (!*otypes || index(otypes, curr->oclass));
if (!pickit) if (!pickit)
@@ -759,15 +768,15 @@ menu_item **pick_list; /* list of objects and counts to pick up */
* returned counts are guaranteed to be in bounds and non-zero. * returned counts are guaranteed to be in bounds and non-zero.
* *
* Query flags: * Query flags:
* BY_NEXTHERE - Follow object list via nexthere instead of nobj. * BY_NEXTHERE - Follow object list via nexthere instead of nobj.
* AUTOSELECT_SINGLE - Don't ask if only 1 object qualifies - just * AUTOSELECT_SINGLE - Don't ask if only 1 object qualifies - just
* use it. * use it.
* USE_INVLET - Use object's invlet. * USE_INVLET - Use object's invlet.
* INVORDER_SORT - Use hero's pack order. * INVORDER_SORT - Use hero's pack order.
* INCLUDE_HERO - Showing engulfer's invent; show hero too. * INCLUDE_HERO - Showing engulfer's invent; show hero too.
* SIGNAL_NOMENU - Return -1 rather than 0 if nothing passes "allow". * SIGNAL_NOMENU - Return -1 rather than 0 if nothing passes "allow".
* SIGNAL_ESCAPE - Return -1 rather than 0 if player uses ESC to * SIGNAL_ESCAPE - Return -1 rather than 0 if player uses ESC to
* pick nothing. * pick nothing.
*/ */
int int
query_objlist(qstr, olist, qflags, pick_list, how, allow) query_objlist(qstr, olist, qflags, pick_list, how, allow)
@@ -1202,7 +1211,7 @@ int *wt_before, *wt_after;
* object and calling weight. * object and calling weight.
* *
* This works for containers only because containers * This works for containers only because containers
* don't merge. -dean * don't merge. -dean
*/ */
for (qq = 1L; qq <= count; qq++) { for (qq = 1L; qq <= count; qq++) {
obj->quan = qq; obj->quan = qq;
@@ -1295,8 +1304,8 @@ boolean telekinesis;
return -1; return -1;
} }
*cnt_p = *cnt_p = carry_count(obj, container, *cnt_p, telekinesis,
carry_count(obj, container, *cnt_p, telekinesis, &old_wt, &new_wt); &old_wt, &new_wt);
if (*cnt_p < 1L) { if (*cnt_p < 1L) {
result = -1; /* nothing lifted */ result = -1; /* nothing lifted */
} else if (obj->oclass != COIN_CLASS } else if (obj->oclass != COIN_CLASS
@@ -1557,6 +1566,7 @@ mon_beside(x, y)
int x, y; int x, y;
{ {
int i, j, nx, ny; int i, j, nx, ny;
for (i = -1; i <= 1; i++) for (i = -1; i <= 1; i++)
for (j = -1; j <= 1; j++) { for (j = -1; j <= 1; j++) {
nx = x + i; nx = x + i;
@@ -1572,6 +1582,7 @@ do_loot_cont(cobjp)
struct obj **cobjp; struct obj **cobjp;
{ {
struct obj *cobj = *cobjp; struct obj *cobj = *cobjp;
if (!cobj) if (!cobj)
return 0; return 0;
if (cobj->olocked) { if (cobj->olocked) {
@@ -1584,6 +1595,7 @@ struct obj **cobjp;
if (cobj->otyp == BAG_OF_TRICKS) { if (cobj->otyp == BAG_OF_TRICKS) {
int tmp; int tmp;
You("carefully open the bag..."); You("carefully open the bag...");
pline("It develops a huge set of teeth and bites you!"); pline("It develops a huge set of teeth and bites you!");
tmp = rnd(10); tmp = rnd(10);
@@ -1645,7 +1657,7 @@ lootcont:
int n, i; int n, i;
winid win; winid win;
anything any; anything any;
menu_item *pick_list = NULL; menu_item *pick_list = (menu_item *) 0;
any.a_void = 0; any.a_void = 0;
win = create_nhwindow(NHW_MENU); win = create_nhwindow(NHW_MENU);
@@ -1846,9 +1858,9 @@ boolean *prev_loot;
struct obj *otmp; struct obj *otmp;
char qbuf[QBUFSZ]; char qbuf[QBUFSZ];
/* 3.3.1 introduced the ability to remove saddle from a steed */ /* 3.3.1 introduced the ability to remove saddle from a steed.
/* *passed_info is set to TRUE if a loot query was given. */ * *passed_info is set to TRUE if a loot query was given.
/* *prev_loot is set to TRUE if something was actually acquired in here. * *prev_loot is set to TRUE if something was actually acquired in here.
*/ */
if (mtmp && mtmp != u.usteed && (otmp = which_armor(mtmp, W_SADDLE))) { if (mtmp && mtmp != u.usteed && (otmp = which_armor(mtmp, W_SADDLE))) {
long unwornmask; long unwornmask;
@@ -1884,10 +1896,11 @@ boolean *prev_loot;
return 0; return 0;
} }
} }
/* 3.4.0 introduced the ability to pick things up from within swallower's /* 3.4.0 introduced the ability to pick things up from within
* stomach */ swallower's stomach */
if (u.uswallow) { if (u.uswallow) {
int count = passed_info ? *passed_info : 0; int count = passed_info ? *passed_info : 0;
timepassed = pickup(count); timepassed = pickup(count);
} }
return timepassed; return timepassed;
@@ -1966,16 +1979,16 @@ register struct obj *obj;
return 0; return 0;
} }
setuwep((struct obj *) 0); setuwep((struct obj *) 0);
/* This uwep check is obsolete. It dates to 3.0 and earlier when
* unwielding Firebrand would be fatal in hell if hero had no other
* fire resistance. Life-saving would force it to be re-wielded.
*/
if (uwep) if (uwep)
return 0; /* unwielded, died, rewielded */ return 0; /* unwielded, died, rewielded */
} else if (obj == uswapwep) { } else if (obj == uswapwep) {
setuswapwep((struct obj *) 0); setuswapwep((struct obj *) 0);
if (uswapwep)
return 0; /* unwielded, died, rewielded */
} else if (obj == uquiver) { } else if (obj == uquiver) {
setuqwep((struct obj *) 0); setuqwep((struct obj *) 0);
if (uquiver)
return 0; /* unwielded, died, rewielded */
} }
if (fatal_corpse_mistake(obj, FALSE)) if (fatal_corpse_mistake(obj, FALSE))
@@ -2001,12 +2014,13 @@ register struct obj *obj;
(void) snuff_lit(obj); (void) snuff_lit(obj);
if (floor_container && costly_spot(u.ux, u.uy)) { if (floor_container && costly_spot(u.ux, u.uy)) {
if (current_container->no_charge && !obj->unpaid) { if (obj->oclass == COIN_CLASS) {
; /* defer gold until after put-in message */
} else if (current_container->no_charge && !obj->unpaid) {
/* don't sell when putting the item into your own container */ /* don't sell when putting the item into your own container */
obj->no_charge = 1; obj->no_charge = 1;
} else if (obj->oclass != COIN_CLASS) { } else {
/* sellobj() will take an unpaid item off the shop bill /* sellobj() will take an unpaid item off the shop bill */
* note: coins are handled later */
was_unpaid = obj->unpaid ? TRUE : FALSE; was_unpaid = obj->unpaid ? TRUE : FALSE;
sellobj_state(SELL_DELIBERATE); sellobj_state(SELL_DELIBERATE);
sellobj(obj, u.ux, u.uy); sellobj(obj, u.ux, u.uy);
@@ -2018,6 +2032,7 @@ register struct obj *obj;
/* stop any corpse timeouts when frozen */ /* stop any corpse timeouts when frozen */
if (obj->otyp == CORPSE && obj->timed) { if (obj->otyp == CORPSE && obj->timed) {
long rot_alarm = stop_timer(ROT_CORPSE, obj_to_any(obj)); long rot_alarm = stop_timer(ROT_CORPSE, obj_to_any(obj));
(void) stop_timer(REVIVE_MON, obj_to_any(obj)); (void) stop_timer(REVIVE_MON, obj_to_any(obj));
/* mark a non-reviving corpse as such */ /* mark a non-reviving corpse as such */
if (rot_alarm) if (rot_alarm)
@@ -2058,7 +2073,6 @@ register struct obj *obj;
* update status immediately. * update status immediately.
*/ */
bot(); bot();
return (current_container ? 1 : -1); return (current_container ? 1 : -1);
} }
@@ -2121,10 +2135,10 @@ register struct obj *obj;
otmp = addinv(obj); otmp = addinv(obj);
loadlev = near_capacity(); loadlev = near_capacity();
prinv(loadlev prinv(loadlev ? ((loadlev < MOD_ENCUMBER)
? (loadlev < MOD_ENCUMBER ? "You have a little trouble removing" ? "You have a little trouble removing"
: "You have much trouble removing") : "You have much trouble removing")
: (char *) 0, : (char *) 0,
otmp, count); otmp, count);
if (is_gold) { if (is_gold) {
@@ -2698,7 +2712,7 @@ dotip()
int n, i; int n, i;
winid win; winid win;
anything any; anything any;
menu_item *pick_list = NULL; menu_item *pick_list = (menu_item *) 0;
struct obj dummyobj, *otmp; struct obj dummyobj, *otmp;
any = zeroany; any = zeroany;
@@ -2838,7 +2852,7 @@ struct obj *box; /* or bag */
treated the same as in the carried case. We do so one treated the same as in the carried case. We do so one
item at a time instead of doing whole container at once item at a time instead of doing whole container at once
to reduce the chance of exhausting shk's billing capacity. */ to reduce the chance of exhausting shk's billing capacity. */
maybeshopgoods = !carried(box) && costly_spot(ox, oy); maybeshopgoods = !carried(box) && costly_spot(ox, oy);
/* caveat: this assumes that cknown, lknown, olocked, and otrapped /* caveat: this assumes that cknown, lknown, olocked, and otrapped
fields haven't been overloaded to mean something special for the fields haven't been overloaded to mean something special for the
+51 -25
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 potion.c $NHDT-Date: 1449977945 2015/12/13 03:39:05 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.122 $ */ /* NetHack 3.6 potion.c $NHDT-Date: 1450667491 2015/12/21 03:11:31 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.124 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1725,6 +1725,7 @@ register struct obj *o1, *o2;
switch (o2->otyp) { switch (o2->otyp) {
case POT_SICKNESS: case POT_SICKNESS:
return POT_SICKNESS; return POT_SICKNESS;
case POT_ENLIGHTENMENT:
case POT_SPEED: case POT_SPEED:
return POT_BOOZE; return POT_BOOZE;
case POT_GAIN_LEVEL: case POT_GAIN_LEVEL:
@@ -1746,13 +1747,14 @@ register struct obj *o1, *o2;
break; break;
} }
return 0; return STRANGE_OBJECT;
} }
/* #dip command */ /* #dip command */
int int
dodip() dodip()
{ {
static const char Dip_[] = "Dip ", into_the_something[] = " into the %s?";
register struct obj *potion, *obj; register struct obj *potion, *obj;
struct obj *singlepotion; struct obj *singlepotion;
uchar here; uchar here;
@@ -1772,19 +1774,28 @@ dodip()
here = levl[u.ux][u.uy].typ; here = levl[u.ux][u.uy].typ;
/* Is there a fountain to dip into here? */ /* Is there a fountain to dip into here? */
if (IS_FOUNTAIN(here)) { if (IS_FOUNTAIN(here)) {
Sprintf(qtoo, into_the_something, "fountain");
if (flags.verbose)
(void) safe_qbuf(qbuf, Dip_, qtoo, obj,
doname, thesimpleoname, shortestname);
else
Sprintf(qbuf, "%s%s%s", Dip_, shortestname, qtoo);
/* "Dip <the object> into the fountain?" */ /* "Dip <the object> into the fountain?" */
if (yn(safe_qbuf(qbuf, "Dip ", " into the fountain?", obj, if (yn(qbuf) == 'y') {
doname, thesimpleoname, shortestname)) == 'y') {
dipfountain(obj); dipfountain(obj);
return 1; return 1;
} }
} else if (is_pool(u.ux, u.uy)) { } else if (is_pool(u.ux, u.uy)) {
const char *pooltype = waterbody_name(u.ux, u.uy); const char *pooltype = waterbody_name(u.ux, u.uy);
Sprintf(qtoo, into_the_something, pooltype);
if (flags.verbose)
(void) safe_qbuf(qbuf, Dip_, qtoo, obj,
doname, thesimpleoname, shortestname);
else
Sprintf(qbuf, "%s%s%s", Dip_, shortestname, qtoo);
/* "Dip <the object> into the {pool, moat, &c}?" */ /* "Dip <the object> into the {pool, moat, &c}?" */
Sprintf(qtoo, " into the %s?", pooltype); if (yn(qbuf) == 'y') {
if (yn(safe_qbuf(qbuf, "Dip ", qtoo, obj,
doname, thesimpleoname, shortestname)) == 'y') {
if (Levitation) { if (Levitation) {
floating_above(pooltype); floating_above(pooltype);
} else if (u.usteed && !is_swimmer(u.usteed->data) } else if (u.usteed && !is_swimmer(u.usteed->data)
@@ -1801,10 +1812,19 @@ dodip()
} }
/* "What do you want to dip <the object> into?" */ /* "What do you want to dip <the object> into?" */
Strcpy(qbuf, safe_qbuf(qtoo, "What do you want to dip ", " into?", obj, if (flags.verbose) {
doname, thesimpleoname, shortestname) /* "What do you want to " is getobj()'s prefix, "dip " is ours */
+ sizeof "What do you want to " - sizeof ""); Strcpy(qbuf, safe_qbuf(qtoo, "What do you want to dip ", " into?",
potion = getobj(beverages, qbuf); /* "dip into" */ obj, doname, thesimpleoname, shortestname)
/* skip getobj()'s prefix when assigning to qbuf */
+ sizeof "What do you want to " - sizeof "");
/* we needed the '?' in " into?" so that safe_qbuf() was working
with the right overall length, but now we need to take the '?'
off because getobj() is going to append one */
*(eos(qbuf) - 1) = '\0';
} else
Sprintf(qbuf, "dip %s into", shortestname);
potion = getobj(beverages, qbuf); /* qbuf[] == "dip <obj> into" */
if (!potion) if (!potion)
return 0; return 0;
if (potion == obj && potion->quan == 1L) { if (potion == obj && potion->quan == 1L) {
@@ -1859,19 +1879,25 @@ dodip()
potion->in_use = FALSE; /* didn't go poof */ potion->in_use = FALSE; /* didn't go poof */
return 1; return 1;
} else if (obj->oclass == POTION_CLASS && obj->otyp != potion->otyp) { } else if (obj->oclass == POTION_CLASS && obj->otyp != potion->otyp) {
long amt = obj->quan; int amt = (int) obj->quan;
boolean magic;
Strcpy(qbuf, "The"); mixture = mixtype(obj, potion);
if (amt > (objects[potion->otyp].oc_magic ? 2L : 9L)) {
magic = (mixture != STRANGE_OBJECT) ? objects[mixture].oc_magic
: (objects[obj->otyp].oc_magic || objects[potion->otyp].oc_magic);
Strcpy(qbuf, "The"); /* assume full stack */
if (amt > (magic ? 3 : 7)) {
/* trying to dip multiple potions will usually affect only a /* trying to dip multiple potions will usually affect only a
subset; pick an amount between 2 and min(N,9), inclusive */ subset; pick an amount between 3 and 8, inclusive, for magic
amt -= 1L; potion result, between 7 and N for non-magic */
do { if (magic)
amt = (long) rnd((int) amt); amt = rnd(min(amt, 8) - (3 - 1)) + (3 - 1); /* 1..6 + 2 */
} while (amt >= 9L); else
amt += 1L; amt = rnd(amt - (7 - 1)) + (7 - 1); /* 1..(N-6) + 6 */
if (amt < obj->quan) {
obj = splitobj(obj, amt); if ((long) amt < obj->quan) {
obj = splitobj(obj, (long) amt);
Sprintf(qbuf, "%ld of the", obj->quan); Sprintf(qbuf, "%ld of the", obj->quan);
} }
} }
@@ -1894,7 +1920,7 @@ dodip()
potionbreathe(obj); potionbreathe(obj);
useupall(obj); useupall(obj);
useup(potion); useup(potion);
losehp((int) (amt + rnd(9)), /* not physical damage */ losehp(amt + rnd(9), /* not physical damage */
"alchemic blast", KILLED_BY_AN); "alchemic blast", KILLED_BY_AN);
return 1; return 1;
} }
@@ -1903,7 +1929,7 @@ dodip()
if (Blind || Hallucination) if (Blind || Hallucination)
obj->dknown = 0; obj->dknown = 0;
if ((mixture = mixtype(obj, potion)) != 0) { if (mixture != STRANGE_OBJECT) {
obj->otyp = mixture; obj->otyp = mixture;
} else { } else {
switch (obj->odiluted ? 1 : rnd(8)) { switch (obj->odiluted ? 1 : rnd(8)) {
@@ -2065,7 +2091,7 @@ more_dips:
potion->in_use = FALSE; /* didn't go poof */ potion->in_use = FALSE; /* didn't go poof */
if ((obj->otyp == UNICORN_HORN || obj->otyp == AMETHYST) if ((obj->otyp == UNICORN_HORN || obj->otyp == AMETHYST)
&& (mixture = mixtype(obj, potion)) != 0) { && (mixture = mixtype(obj, potion)) != STRANGE_OBJECT) {
char oldbuf[BUFSZ], newbuf[BUFSZ]; char oldbuf[BUFSZ], newbuf[BUFSZ];
short old_otyp = potion->otyp; short old_otyp = potion->otyp;
boolean old_dknown = FALSE; boolean old_dknown = FALSE;
+2 -2
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 pray.c $NHDT-Date: 1446854232 2015/11/06 23:57:12 $ $NHDT-Branch: master $:$NHDT-Revision: 1.87 $ */ /* NetHack 3.6 pray.c $NHDT-Date: 1450577672 2015/12/20 02:14:32 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.89 $ */
/* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */ /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -467,7 +467,7 @@ int trouble;
what ? what : (const char *) Yobjnam2(otmp, "softly glow"), what ? what : (const char *) Yobjnam2(otmp, "softly glow"),
hcolor(NH_AMBER)); hcolor(NH_AMBER));
iflags.last_msg = PLNMSG_OBJ_GLOWS; iflags.last_msg = PLNMSG_OBJ_GLOWS;
otmp->bknown = TRUE; otmp->bknown = !Hallucination;
} }
uncurse(otmp); uncurse(otmp);
update_inventory(); update_inventory();
+10 -11
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 read.c $NHDT-Date: 1450490118 2015/12/19 01:55:18 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.130 $ */ /* NetHack 3.6 read.c $NHDT-Date: 1450577673 2015/12/20 02:14:33 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.131 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -1237,6 +1237,7 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
} else { } else {
for (obj = invent; obj; obj = obj->nobj) { for (obj = invent; obj; obj = obj->nobj) {
long wornmask; long wornmask;
/* gold isn't subject to cursing and blessing */ /* gold isn't subject to cursing and blessing */
if (obj->oclass == COIN_CLASS) if (obj->oclass == COIN_CLASS)
continue; continue;
@@ -1269,8 +1270,7 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
if (sblessed || wornmask || obj->otyp == LOADSTONE if (sblessed || wornmask || obj->otyp == LOADSTONE
|| (obj->otyp == LEASH && obj->leashmon)) { || (obj->otyp == LEASH && obj->leashmon)) {
/* water price varies by curse/bless status */ /* water price varies by curse/bless status */
boolean shop_h2o = boolean shop_h2o = (obj->unpaid && obj->otyp == POT_WATER);
(obj->unpaid && obj->otyp == POT_WATER);
if (confused) { if (confused) {
blessorcurse(obj, 2); blessorcurse(obj, 2);
@@ -1340,13 +1340,11 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
uwep->oerodeproof = new_erodeproof ? 1 : 0; uwep->oerodeproof = new_erodeproof ? 1 : 0;
break; break;
} }
if (!chwepon(sobj, if (!chwepon(sobj, scursed ? -1
scursed : !uwep ? 1
? -1 : (uwep->spe >= 9) ? !rn2(uwep->spe)
: !uwep ? 1 : (uwep->spe >= 9) : sblessed ? rnd(3 - uwep->spe / 3)
? !rn2(uwep->spe) : 1))
: sblessed ? rnd(3 - uwep->spe / 3)
: 1))
sobj = 0; /* nothing enchanted: strange_feeling -> useup */ sobj = 0; /* nothing enchanted: strange_feeling -> useup */
break; break;
case SCR_TAMING: case SCR_TAMING:
@@ -1387,7 +1385,8 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
if (vis_results > 0) if (vis_results > 0)
known = TRUE; known = TRUE;
} }
} break; break;
}
case SCR_GENOCIDE: case SCR_GENOCIDE:
if (!already_known) if (!already_known)
You("have found a scroll of genocide!"); You("have found a scroll of genocide!");
+18 -19
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 shk.c $NHDT-Date: 1446854234 2015/11/06 23:57:14 $ $NHDT-Branch: master $:$NHDT-Revision: 1.116 $ */ /* NetHack 3.6 shk.c $NHDT-Date: 1450604649 2015/12/20 09:44:09 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.117 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -383,9 +383,8 @@ register xchar x, y;
rno = levl[x][y].roomno; rno = levl[x][y].roomno;
if ((rno < ROOMOFFSET) || levl[x][y].edge || !IS_SHOP(rno - ROOMOFFSET)) if ((rno < ROOMOFFSET) || levl[x][y].edge || !IS_SHOP(rno - ROOMOFFSET))
return NO_ROOM; rno = NO_ROOM;
else return rno;
return rno;
} }
void void
@@ -773,21 +772,18 @@ register char rmno;
boolean boolean
tended_shop(sroom) tended_shop(sroom)
register struct mkroom *sroom; struct mkroom *sroom;
{ {
register struct monst *mtmp = sroom->resident; struct monst *mtmp = sroom->resident;
if (!mtmp) return !mtmp ? FALSE : (boolean) inhishop(mtmp);
return FALSE;
else
return (boolean) inhishop(mtmp);
} }
STATIC_OVL struct bill_x * STATIC_OVL struct bill_x *
onbill(obj, shkp, silent) onbill(obj, shkp, silent)
register struct obj *obj; struct obj *obj;
register struct monst *shkp; struct monst *shkp;
register boolean silent; boolean silent;
{ {
if (shkp) { if (shkp) {
register struct bill_x *bp = ESHK(shkp)->bill_p; register struct bill_x *bp = ESHK(shkp)->bill_p;
@@ -1131,12 +1127,13 @@ register xchar ox, oy;
hot_pursuit(shkp); hot_pursuit(shkp);
} }
STATIC_VAR const char no_money[] = "Moreover, you%s have no money."; STATIC_VAR const char
STATIC_VAR const char not_enough_money[] = no_money[] = "Moreover, you%s have no money.",
"Besides, you don't have enough to interest %s."; not_enough_money[] = "Besides, you don't have enough to interest %s.";
/* delivers the cheapest item on the list */
STATIC_OVL long STATIC_OVL long
cheapest_item(shkp) /* delivers the cheapest item on the list */ cheapest_item(shkp)
register struct monst *shkp; register struct monst *shkp;
{ {
register int ct = ESHK(shkp)->billct; register int ct = ESHK(shkp)->billct;
@@ -1348,6 +1345,7 @@ proceed:
long dtmp = eshkp->debit; long dtmp = eshkp->debit;
long loan = eshkp->loan; long loan = eshkp->loan;
char sbuf[BUFSZ]; char sbuf[BUFSZ];
umoney = money_cnt(invent); umoney = money_cnt(invent);
Sprintf(sbuf, "You owe %s %ld %s ", shkname(shkp), dtmp, Sprintf(sbuf, "You owe %s %ld %s ", shkname(shkp), dtmp,
currency(dtmp)); currency(dtmp));
@@ -1394,6 +1392,7 @@ proceed:
if (eshkp->billct) { if (eshkp->billct) {
register boolean itemize; register boolean itemize;
int iprompt; int iprompt;
umoney = money_cnt(invent); umoney = money_cnt(invent);
if (!umoney && !eshkp->credit) { if (!umoney && !eshkp->credit) {
You("%shave no money or credit%s.", You("%shave no money or credit%s.",
@@ -2122,7 +2121,7 @@ boolean quietly;
(7 - obj->spe), (obj->spe > 0) ? " more" : "", (7 - obj->spe), (obj->spe > 0) ? " more" : "",
plur(7 - obj->spe)); plur(7 - obj->spe));
/* [what if hero is already carrying enough candles? /* [what if hero is already carrying enough candles?
should Izchak explain how to attach them instead] */ should Izchak explain how to attach them instead?] */
} else { } else {
verbalize("I won't stock that. Take it out of here!"); verbalize("I won't stock that. Take it out of here!");
} }
@@ -2158,7 +2157,7 @@ register struct monst *shkp;
tmp = (obj->otyp % (6 - shkp->m_id % 3)); tmp = (obj->otyp % (6 - shkp->m_id % 3));
tmp = (tmp + 3) * obj->quan; tmp = (tmp + 3) * obj->quan;
} }
} else if (tmp > 1L && !rn2(4)) } else if (tmp > 1L && !(shkp->m_id % 4))
multiplier *= 3L, divisor *= 4L; multiplier *= 3L, divisor *= 4L;
} }
+3 -3
View File
@@ -1823,8 +1823,8 @@ struct mkroom *croom;
otmp->obroken = 1; otmp->obroken = 1;
otmp->olocked = 0; /* obj generation may set */ otmp->olocked = 0; /* obj generation may set */
} }
if (o->trapped) if (o->trapped == 0 || o->trapped == 1)
otmp->otrapped = 1; otmp->otrapped = o->trapped;
if (o->greased) if (o->greased)
otmp->greased = 1; otmp->greased = 1;
#ifdef INVISIBLE_OBJECTS #ifdef INVISIBLE_OBJECTS
@@ -3023,7 +3023,7 @@ struct sp_coder *coder;
tmpobj.lit = 0; tmpobj.lit = 0;
tmpobj.eroded = 0; tmpobj.eroded = 0;
tmpobj.locked = 0; tmpobj.locked = 0;
tmpobj.trapped = 0; tmpobj.trapped = -1;
tmpobj.recharged = 0; tmpobj.recharged = 0;
tmpobj.invis = 0; tmpobj.invis = 0;
tmpobj.greased = 0; tmpobj.greased = 0;
+2 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 spell.c $NHDT-Date: 1450306224 2015/12/16 22:50:24 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.74 $ */ /* NetHack 3.6 spell.c $NHDT-Date: 1450584420 2015/12/20 04:07:00 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.75 $ */
/* Copyright (c) M. Stephenson 1988 */ /* Copyright (c) M. Stephenson 1988 */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -474,6 +474,7 @@ register struct obj *spellbook;
spellbook->o_id)) { spellbook->o_id)) {
u.uconduct.literate++; u.uconduct.literate++;
check_unpaid(spellbook); check_unpaid(spellbook);
makeknown(booktype);
if (!u.uevent.read_tribute) { if (!u.uevent.read_tribute) {
/* give bonus of 20 xp and 4*20+0 pts */ /* give bonus of 20 xp and 4*20+0 pts */
more_experienced(20, 0); more_experienced(20, 0);
+2
View File
@@ -350,10 +350,12 @@ register struct monst *mtmp;
Strcpy(buf, y_monnam(mtmp)); Strcpy(buf, y_monnam(mtmp));
buf[0] = highc(buf[0]); buf[0] = highc(buf[0]);
You("stop. %s is in the way!", buf); You("stop. %s is in the way!", buf);
context.travel = context.travel1 = context.mv = context.run = 0;
return TRUE; return TRUE;
} else if ((mtmp->mfrozen || (!mtmp->mcanmove) } else if ((mtmp->mfrozen || (!mtmp->mcanmove)
|| (mtmp->data->mmove == 0)) && rn2(6)) { || (mtmp->data->mmove == 0)) && rn2(6)) {
pline("%s doesn't seem to move!", Monnam(mtmp)); pline("%s doesn't seem to move!", Monnam(mtmp));
context.travel = context.travel1 = context.mv = context.run = 0;
return TRUE; return TRUE;
} else } else
return FALSE; return FALSE;
+17 -4
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 wield.c $NHDT-Date: 1446887539 2015/11/07 09:12:19 $ $NHDT-Branch: master $:$NHDT-Revision: 1.47 $ */ /* NetHack 3.6 wield.c $NHDT-Date: 1450577672 2015/12/20 02:14:32 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.48 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -608,9 +608,22 @@ register int amount;
if (!uwep || (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep))) { if (!uwep || (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep))) {
char buf[BUFSZ]; char buf[BUFSZ];
Sprintf(buf, "Your %s %s.", makeplural(body_part(HAND)), if (amount >= 0 && uwep && will_weld(uwep)) { /* cursed tin opener */
(amount >= 0) ? "twitch" : "itch"); if (!Blind) {
strange_feeling(otmp, buf); Sprintf(buf, "%s with %s aura.",
Yobjnam2(uwep, "glow"), an(hcolor(NH_AMBER)));
uwep->bknown = !Hallucination;
} else {
/* cursed tin opener is wielded in right hand */
Sprintf(buf, "Your right %s tingles.", body_part(HAND));
}
uncurse(uwep);
update_inventory();
} else {
Sprintf(buf, "Your %s %s.", makeplural(body_part(HAND)),
(amount >= 0) ? "twitch" : "itch");
}
strange_feeling(otmp, buf); /* pline()+docall()+useup() */
exercise(A_DEX, (boolean) (amount >= 0)); exercise(A_DEX, (boolean) (amount >= 0));
return 0; return 0;
} }
+7 -1
View File
@@ -1,4 +1,4 @@
/* NetHack 3.6 unixtty.c $NHDT-Date: 1432512788 2015/05/25 00:13:08 $ $NHDT-Branch: master $:$NHDT-Revision: 1.19 $ */ /* NetHack 3.6 unixtty.c $NHDT-Date: 1450916700 2015/12/24 00:25:00 $ $NHDT-Branch: NetHack-3.6.0 $:$NHDT-Revision: 1.21 $ */
/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
/* NetHack may be freely redistributed. See license for details. */ /* NetHack may be freely redistributed. See license for details. */
@@ -335,6 +335,9 @@ int sco_flag_console = 0;
int sco_map_valid = -1; int sco_map_valid = -1;
unsigned char sco_chanmap_buf[BSIZE]; unsigned char sco_chanmap_buf[BSIZE];
#if defined(TTY_GRAPHICS) && defined(TEXTCOLOR)
extern int NDECL(has_colors);
#endif
void NDECL(sco_mapon); void NDECL(sco_mapon);
void NDECL(sco_mapoff); void NDECL(sco_mapoff);
void NDECL(check_sco_console); void NDECL(check_sco_console);
@@ -399,6 +402,9 @@ init_sco_cons()
int linux_flag_console = 0; int linux_flag_console = 0;
#if defined(TTY_GRAPHICS) && defined(TEXTCOLOR)
extern int NDECL(has_colors);
#endif
void NDECL(linux_mapon); void NDECL(linux_mapon);
void NDECL(linux_mapoff); void NDECL(linux_mapoff);
void NDECL(check_linux_console); void NDECL(check_linux_console);