Merge branch 'NetHack-3.6.0'
This commit is contained in:
+72
-68
@@ -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
@@ -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.
|
||||||
#
|
#
|
||||||
|
|||||||
@@ -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
@@ -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 *));
|
||||||
|
|||||||
@@ -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
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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;
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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
@@ -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!");
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
@@ -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
@@ -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
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user