Merge branch 'NetHack-3.6.0'
This commit is contained in:
140
dat/data.base
140
dat/data.base
@@ -80,7 +80,7 @@ sacrific*
|
||||
top will have grooves for blood, and the whole will be covered
|
||||
with _dry brown stains of a troubling kind_ from former
|
||||
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
|
||||
Death cometh soon or late;
|
||||
@@ -215,15 +215,14 @@ apelike creature
|
||||
the apes have the forelimbs much better developed than
|
||||
the hind limbs. Tail entirely absent. Growth is slow
|
||||
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
|
||||
right. He knew it. He smacked his lips in anticipation as
|
||||
he thought of it. Yes. Apes should be strong. Apes should
|
||||
be masters. Apes should be proud. Apes should make the
|
||||
Earth shake when they walked. Apes should _rule_ the Earth.
|
||||
[ Battle for the Planet of the Apes,
|
||||
by David Gerrold ]
|
||||
[ Battle for the Planet of the Apes, by David Gerrold ]
|
||||
apple
|
||||
NEWTONIAN, adj. Pertaining to a philosophy of the universe
|
||||
invented by Newton, who discovered that an apple will fall
|
||||
@@ -278,8 +277,7 @@ arioch
|
||||
I found the arrow still unbroke;
|
||||
And the song, from beginning to end,
|
||||
I found again in the heart of a friend.
|
||||
[ The Arrow and the Song,
|
||||
by Henry Wadsworth Longfellow ]
|
||||
[ The Arrow and the Song, by Henry Wadsworth Longfellow ]
|
||||
ashikaga takauji
|
||||
Ashikaga Takauji was a daimyo of the Minamoto clan who
|
||||
joined forces with the Go-Daigo to defeat the Hojo armies.
|
||||
@@ -289,7 +287,7 @@ ashikaga takauji
|
||||
Go-Daigo eventually escaped and established another
|
||||
government in the town of Yoshino. This period of dual
|
||||
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
|
||||
It is said that Asmodeus is the overlord over all of hell.
|
||||
His appearance, unlike many other demons and devils, is
|
||||
@@ -557,6 +555,17 @@ candelabrum*
|
||||
(Enter all the Friars to sing the dirge)
|
||||
[ Doctor Faustus and Other Plays, by Christopher Marlowe ]
|
||||
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
|
||||
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
|
||||
@@ -579,7 +588,7 @@ boomerang
|
||||
the formula for making this splendid footwear is a closely
|
||||
guarded secret, possibly derived from nonhumans (see Dwarfs,
|
||||
Elves, and Gnomes).
|
||||
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
|
||||
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
|
||||
*booze
|
||||
potion of sleeping
|
||||
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
|
||||
lived with other celestial beings in their paradise on Mount
|
||||
Kunlun.
|
||||
[ The Illustrated Who's Who In Mythology, by Michael Senior ]
|
||||
[ The Illustrated Who's Who In Mythology, by Michael Senior ]
|
||||
chromatic dragon
|
||||
tiamat
|
||||
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
|
||||
around her/his shivering body_. This seems to suggest they
|
||||
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*
|
||||
I wandered lonely as a cloud
|
||||
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
|
||||
merely touching its lifeless body can cause a person to
|
||||
sicken and die.
|
||||
[ Mythical Beasts by Deirdre Headon (The Leprechaun Library)
|
||||
and other sources ]
|
||||
[ Mythical Beasts by Deirdre Headon (The Leprechaun Library)
|
||||
and other sources ]
|
||||
*coin
|
||||
~creeping coins
|
||||
*coins
|
||||
@@ -1055,21 +1064,20 @@ crom
|
||||
his weapon, and mutters under his breath:
|
||||
"By Crom, there will be blood spilt today."
|
||||
|
||||
[ Conan the Avenger by Robert E. Howard, Bjorn Nyberg, and
|
||||
L. Sprague de Camp ]
|
||||
[ Conan the Avenger by Robert E. Howard, Bjorn Nyberg,
|
||||
and L. Sprague de Camp ]
|
||||
crossbow*
|
||||
"God save thee, ancient Mariner!
|
||||
From the fiends, that plague thee thus! -
|
||||
Why look'st thou so?" - With my cross-bow
|
||||
I shot the Albatross.
|
||||
[ The Rime of the Ancient Mariner, by Samuel Taylor
|
||||
Coleridge ]
|
||||
[ The Rime of the Ancient Mariner, by Samuel Taylor Coleridge ]
|
||||
crystal ball
|
||||
You look into one of these and see _vapours swirling like
|
||||
clouds_. These shortly clear away to show a sort of video
|
||||
without sound of something that is going to happen to you
|
||||
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*
|
||||
Curses are longstanding ill-wishings which, in Fantasyland,
|
||||
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
|
||||
raise their Curses. Your best source is to hide the Sword
|
||||
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
|
||||
A pack of snow-white, red-eared spectral hounds which
|
||||
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
|
||||
them difficult to deal with, even on the rare occasions when
|
||||
they are friendly.
|
||||
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
|
||||
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
|
||||
diamond
|
||||
The hardest known mineral (with a hardness of 10 on Mohs' scale).
|
||||
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
|
||||
reddish- or yellowish-brown coat, believed to have been
|
||||
introduced by the aborigines.
|
||||
[Webster's Encyclopedic Unabridged Dictionary of the English Language]
|
||||
[ Webster's Encyclopedic Unabridged Dictionary
|
||||
of the English Language ]
|
||||
disenchanter
|
||||
Ask not, what your magic can do to it. Ask what it can do
|
||||
to your magic.
|
||||
@@ -1320,7 +1329,7 @@ doppelganger
|
||||
not only with clouds of sulphurous fumes pouring from its fire
|
||||
breathing nostrils, but also with the thrashings of its tail,
|
||||
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
|
||||
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
|
||||
the many ills he has brought among himself, Man has forgotten
|
||||
his most ancient adversary, the gargoyles.
|
||||
[ Excerpt from the opening narration to the movie
|
||||
_Gargoyles_, written by Stephen and Elinor Karpf ]
|
||||
[ Excerpt from the opening narration to the movie
|
||||
_Gargoyles_, written by Stephen and Elinor Karpf ]
|
||||
*garlic
|
||||
1 November - All day long we have travelled, and at a good
|
||||
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:
|
||||
if a deity is pushing you, things will go miserably badly until
|
||||
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 piece
|
||||
A metal of characteristic yellow colour, the most precious
|
||||
@@ -2056,7 +2065,7 @@ hachi
|
||||
Its strings break only in very rare instances, usually
|
||||
because the Harper is sulking or crossed in love. This is
|
||||
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,
|
||||
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
|
||||
dark form and savage face which broke upon us out of the wall
|
||||
of fog.
|
||||
[ The Hound of the Baskervilles, by Sir Arthur Conan Doyle. ]
|
||||
[ The Hound of the Baskervilles, by Sir Arthur Conan Doyle. ]
|
||||
hermes
|
||||
Messenger and herald of the Olympians. Being required to do
|
||||
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
|
||||
the fourth part of the earth, to kill with sword, and with
|
||||
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
|
||||
The first of five mythical Chinese emperors, Huan Ti is known
|
||||
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
|
||||
South America. This feline predator (_Panthera onca_) is
|
||||
sometimes incorrectly called a panther.
|
||||
[ Van Dale's Groot Woordenboek der Nederlandse Taal ]
|
||||
[ Van Dale's Groot Woordenboek der Nederlandse Taal ]
|
||||
jellyfish
|
||||
I do not care to share the seas
|
||||
With jellyfishes such as these;
|
||||
Particularly Portuguese.
|
||||
[ Lines on Meeting a Portuguese Man-o'-war while
|
||||
Bathing, by Michael Flanders ]
|
||||
[ Lines on Meeting a Portuguese Man-o'-war while Bathing,
|
||||
by Michael Flanders ]
|
||||
juiblex
|
||||
jubilex
|
||||
Little is known about the Faceless Lord, even the correct
|
||||
@@ -2688,8 +2697,7 @@ knight
|
||||
And was a bugbear in men's eyes;
|
||||
But had the fortune in his age
|
||||
To live a fool and die a sage.
|
||||
[ Don Quixote of La Mancha, by Miquel de
|
||||
Cervantes Saavedra ]
|
||||
[ Don Quixote of La Mancha, by Miquel de Cervantes Saavedra ]
|
||||
~kobold ??m*
|
||||
*kobold*
|
||||
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,
|
||||
and finally tumbled him a good way off from it on the field in
|
||||
evil plight.
|
||||
[ Don Quixote of La Mancha, by Miquel de
|
||||
Cervantes Saavedra ]
|
||||
[ Don Quixote of La Mancha, by Miquel de Cervantes Saavedra ]
|
||||
land mine
|
||||
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
|
||||
@@ -2911,7 +2918,7 @@ leprechaun
|
||||
way to divert his captor's attention and vanishes in the
|
||||
twinkling of an eye.
|
||||
[ A Field Guide to the Little People
|
||||
by Nancy Arrowsmith & George Moorse ]
|
||||
by Nancy Arrowsmith & George Moorse ]
|
||||
*lich
|
||||
But on its heels ere the sunset faded, there came a second
|
||||
apparition, striding with incredible strides and halting when
|
||||
@@ -3029,10 +3036,12 @@ bad luck
|
||||
that?"
|
||||
Jack shrugged [...]. "Bad grace, I suppose. Just because I
|
||||
shot off his ear and made him jump into a pit full of spikes."
|
||||
[ the hollow chocolate bunnies of
|
||||
the apocalypse, by Robert Rankin ]
|
||||
# [no relation... both cover and title page list
|
||||
# this book's title in all lower case]
|
||||
[ the hollow chocolate bunnies of the apocalypse,
|
||||
by Robert Rankin ]
|
||||
# [no relation... both cover and title page list this
|
||||
# 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*
|
||||
Lugh, or Lug, was the sun god of the Irish Celts. One of his
|
||||
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
|
||||
walls. Metal will also be present, but only when made up into
|
||||
armor and weapons (_wondrous_).
|
||||
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
|
||||
[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
|
||||
minotaur
|
||||
The Minotaur was a monster, half bull, half human, the
|
||||
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
|
||||
plants and animals. His chief adversary is Ahriman, the
|
||||
power of darkness.
|
||||
[ The Encyclopaedia of Myths and Legends of All
|
||||
Nations, by Herbert Spencer Robinson and
|
||||
Knox Wilson ]
|
||||
[ The Encyclopaedia of Myths and Legends of All Nations,
|
||||
by Herbert Spencer Robinson and Knox Wilson ]
|
||||
*mithril*
|
||||
_Mithril_! All folk desired it. It could be beaten like
|
||||
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
|
||||
fury, Skuld often spoiled the work of her sisters by tearing
|
||||
the web to shreds.
|
||||
[ The Encyclopedia of Myths and Legends of All
|
||||
Nations by Herbert Spencer Robinson and Knox
|
||||
Wilson ]
|
||||
[ The Encyclopedia of Myths and Legends of All Nations
|
||||
by Herbert Spencer Robinson and Knox Wilson ]
|
||||
nunchaku
|
||||
A nunchaku is two sections of wood (or metal in modern
|
||||
incarnations) connected by a cord or chain. There is much
|
||||
@@ -3812,7 +3819,7 @@ panther
|
||||
Nay, rather did impede so much my way,
|
||||
That many times I to return had turned.
|
||||
[ Dante's Inferno, as translated
|
||||
by Henry Wadsworth Longfellow ]
|
||||
by Henry Wadsworth Longfellow ]
|
||||
*paper
|
||||
Some players, who unconsciously perceive Paper as weak or a
|
||||
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
|
||||
continent and to and from our own world. The precise manner
|
||||
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(o)n, lord of the seas and father of rivers and
|
||||
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
|
||||
earthquakes as well. Physically, he is shown as a strong and
|
||||
powerful ruler, every inch a king.
|
||||
[ The Encyclopedia of Myths and Legends of All
|
||||
Nations, by Herbert Robinson and Knox Wilson ]
|
||||
[ The Encyclopedia of Myths and Legends of All Nations,
|
||||
by Herbert Robinson and Knox Wilson ]
|
||||
~*sleeping
|
||||
~*booze
|
||||
*potion*
|
||||
@@ -4105,7 +4112,7 @@ quasit
|
||||
why not? By then you will have had a lot of practice in
|
||||
that sort of thing and, besides, the Quest Object is usually
|
||||
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
|
||||
One of the principal Aztec-Toltec gods was the great and wise
|
||||
Quetzalcoatl, who was called Kukumatz in Guatemala, and
|
||||
@@ -4222,7 +4229,7 @@ robe
|
||||
are dealing with.
|
||||
2. For Kings. The OMT here is _falling in stately folds_.
|
||||
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
|
||||
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
|
||||
@@ -4685,8 +4692,8 @@ javelin
|
||||
of Rome in Nero's time, for instance? Why, it would merely
|
||||
say 'Town burned down; no insurance; boy brast a window,
|
||||
fireman brake his neck!' Why, that ain't a picture!
|
||||
[ A Connecticut Yankee in King Arthur's Court, by Mark
|
||||
Twain ]
|
||||
[ A Connecticut Yankee in King Arthur's Court,
|
||||
by Mark Twain ]
|
||||
*spellbook*
|
||||
The Book of Three lay closed on the table. Taran had never
|
||||
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
|
||||
belligerent tengu were supposed to have been man's first
|
||||
instructors in the use of arms.
|
||||
[ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ]
|
||||
[ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ]
|
||||
thoth
|
||||
The Egyptian god of the moon and wisdom, Thoth is the patron
|
||||
deity of scribes and of knowledge, including scientific,
|
||||
@@ -5026,8 +5033,7 @@ towel
|
||||
wave your towel in emergencies as a distress signal, and of
|
||||
course dry yourself off with it if it still seems to be clean
|
||||
enough.
|
||||
[ The Hitchhiker's Guide to the Galaxy,
|
||||
by Douglas Adams ]
|
||||
[ The Hitchhiker's Guide to the Galaxy, by Douglas Adams ]
|
||||
*tower
|
||||
*tower of darkness
|
||||
Towers (_brooding_, _dark_) stand alone in Waste Areas and
|
||||
@@ -5036,7 +5042,7 @@ towel
|
||||
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
|
||||
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
|
||||
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
|
||||
@@ -5187,7 +5193,7 @@ unicorn horn
|
||||
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
|
||||
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.
|
||||
"You hold your beer awfully well."
|
||||
@@ -5208,9 +5214,8 @@ valkyrie
|
||||
without restraint and fighting over again the battles in
|
||||
which they died and in which they had won their deathless
|
||||
fame.
|
||||
[ The Encyclopaedia of Myths and Legends of All
|
||||
Nations, by Herbert Robinson and Knox
|
||||
Wilson ]
|
||||
[ The Encyclopaedia of Myths and Legends of All Nations,
|
||||
by Herbert Robinson and Knox Wilson ]
|
||||
vampire
|
||||
~vampire bat
|
||||
vampire lord
|
||||
@@ -5322,8 +5327,7 @@ water
|
||||
And all the boards did shrink;
|
||||
Water, water, everywhere
|
||||
Nor any drop to drink.
|
||||
[ The Rime of the Ancient Mariner, by Samuel Taylor
|
||||
Coleridge ]
|
||||
[ The Rime of the Ancient Mariner, by Samuel Taylor Coleridge ]
|
||||
water demon
|
||||
[ The monkey king ] walked along the bank, around the pond.
|
||||
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
|
||||
was formerly used medicinally. In both senses also called
|
||||
monkshood.
|
||||
[ The American Heritage Dictionary of the English Language,
|
||||
Fourth Edition. ]
|
||||
[ The American Heritage Dictionary of
|
||||
the English Language, Fourth Edition. ]
|
||||
wood golem
|
||||
Come, old broomstick, you are needed,
|
||||
Take these rags and wrap them round you!
|
||||
@@ -5442,8 +5446,8 @@ wood golem
|
||||
How the water spills,
|
||||
How the water basins
|
||||
Brimming full he fills!
|
||||
[ The Sorcerer's Apprentice, by Johann Wolfgang von Goethe,
|
||||
translation by Edwin Zeydel ]
|
||||
[ The Sorcerer's Apprentice, by Johann Wolfgang von Goethe,
|
||||
translation by Edwin Zeydel ]
|
||||
woodchuck
|
||||
The Usenet Oracle requires an answer to this question!
|
||||
|
||||
|
||||
89
dat/tribute
89
dat/tribute
@@ -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
|
||||
Yesterday you never thought about it and after today you
|
||||
don't know what you would do without it.
|
||||
|
||||
That was what the technology was doing.
|
||||
[...] And yesterday you never thought about it and after today you don't
|
||||
know what you would do without it. That was what the technology was doing.
|
||||
It was your slave but, in a sense, it might be the other way round.
|
||||
|
||||
[Raising Steam, by Terry Pratchett]
|
||||
%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
|
||||
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]
|
||||
%e passage
|
||||
@@ -5388,22 +5389,88 @@ looking at.
|
||||
|
||||
[Raising Steam, by Terry Pratchett]
|
||||
%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
|
||||
#
|
||||
#
|
||||
#
|
||||
%title The Shepherd's Crown (1)
|
||||
%passage 1
|
||||
'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?'
|
||||
|
||||
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
|
||||
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
|
||||
IF YOU ASK ME, said Death, NOBODY COULD DO ANY BETTER THAN THAT. . .
|
||||
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
|
||||
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
|
||||
IF YOU ASK ME, said Death, NOBODY COULD DO ANY BETTER THAN THAT...
|
||||
|
||||
[The Shepherd's Crown, by Terry Pratchett]
|
||||
%e passage
|
||||
%e title
|
||||
#
|
||||
%e section
|
||||
#
|
||||
#-----------------------------------------------------
|
||||
# Used for interaction with Death.
|
||||
#
|
||||
|
||||
@@ -45,6 +45,18 @@ make MAXPLAYERS option in sysconf accept 0 value
|
||||
avoid hearing yelps when you are deaf
|
||||
make corpse visible if stethoscope told you about it being there
|
||||
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
|
||||
@@ -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
|
||||
unix/X11: in top level Makefile, some commented out definitions of VARDATND
|
||||
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: guard against buffer overflow in in mswin_getlin()
|
||||
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
|
||||
different feedback for reading a scroll of mail created by writing with marker
|
||||
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
|
||||
@@ -76,6 +93,7 @@ Platform- and/or Interface-Specific New Features
|
||||
|
||||
NetHack Community Patches (or Variation) Included
|
||||
-------------------------------------------------
|
||||
Malcolm Ryan's improved tin opener
|
||||
|
||||
|
||||
Code Cleanup and Reorganization
|
||||
|
||||
@@ -604,6 +604,7 @@ E void NDECL(init_uhunger);
|
||||
E int NDECL(Hear_again);
|
||||
E void NDECL(reset_eat);
|
||||
E int NDECL(doeat);
|
||||
E int FDECL(use_tin_opener, (struct obj *));
|
||||
E void NDECL(gethungry);
|
||||
E void FDECL(morehungry, (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 int FDECL(load_symset, (const char *, int));
|
||||
E void NDECL(free_symsets);
|
||||
E void FDECL(parsesymbols, (char *));
|
||||
E boolean FDECL(parsesymbols, (char *));
|
||||
E struct symparse *FDECL(match_sym, (char *));
|
||||
E void NDECL(set_playmode);
|
||||
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 TEST_MOVE 1 /* test a normal move (move there next) */
|
||||
#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 ***/
|
||||
#define yn(query) yn_function(query, ynchars, 'n')
|
||||
|
||||
28
src/apply.c
28
src/apply.c
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -1502,6 +1502,17 @@ int magic; /* 0=Physical, otherwise skill level */
|
||||
{
|
||||
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))) {
|
||||
/* normally (nolimbs || slithy) implies !Jumping,
|
||||
but that isn't necessarily the case for knights */
|
||||
@@ -3494,18 +3505,8 @@ doapply()
|
||||
res = dowrite(obj);
|
||||
break;
|
||||
case TIN_OPENER:
|
||||
if (!carrying(TIN)) {
|
||||
You("have no tin to open.");
|
||||
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;
|
||||
|
||||
res = use_tin_opener(obj);
|
||||
break;
|
||||
case FIGURINE:
|
||||
use_figurine(&obj);
|
||||
break;
|
||||
@@ -3547,7 +3548,6 @@ doapply()
|
||||
break;
|
||||
}
|
||||
pline("Sorry, I don't know how to use that.");
|
||||
xit:
|
||||
nomul(0);
|
||||
return 0;
|
||||
}
|
||||
|
||||
35
src/eat.c
35
src/eat.c
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -2579,6 +2579,39 @@ doeat()
|
||||
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
|
||||
* modifying usedtime. Returns 1 if they choked and survived, 0 otherwise.
|
||||
*/
|
||||
|
||||
@@ -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 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -311,12 +311,13 @@ int expltype;
|
||||
so avoid any which begins with a capital letter) */
|
||||
do {
|
||||
Sprintf(hallu_buf, "%s explosion",
|
||||
s_suffix(rndmonnam(NULL)));
|
||||
s_suffix(rndmonnam((char *) 0)));
|
||||
} while (*hallu_buf != lowc(*hallu_buf));
|
||||
str = hallu_buf;
|
||||
}
|
||||
if (u.uswallow && mtmp == u.ustuck) {
|
||||
const char *adj = NULL;
|
||||
const char *adj = (char *) 0;
|
||||
|
||||
if (is_animal(u.ustuck->data)) {
|
||||
switch (adtyp) {
|
||||
case AD_FIRE:
|
||||
@@ -431,7 +432,7 @@ int expltype;
|
||||
if (do_hallu) { /* (see explanation above) */
|
||||
do {
|
||||
Sprintf(hallu_buf, "%s explosion",
|
||||
s_suffix(rndmonnam(NULL)));
|
||||
s_suffix(rndmonnam((char *) 0)));
|
||||
} while (*hallu_buf != lowc(*hallu_buf));
|
||||
str = hallu_buf;
|
||||
}
|
||||
@@ -468,9 +469,8 @@ int expltype;
|
||||
rehumanize();
|
||||
} else {
|
||||
if (olet == MON_EXPLODE) {
|
||||
/* killer handled by caller */
|
||||
if (generic)
|
||||
killer.name[0] = 0;
|
||||
if (generic) /* explosion was unseen; str=="explosion", */
|
||||
; /* killer.name=="gas spore's explosion" */
|
||||
else if (str != killer.name && str != hallu_buf)
|
||||
Strcpy(killer.name, str);
|
||||
killer.format = KILLED_BY_AN;
|
||||
@@ -486,8 +486,7 @@ int expltype;
|
||||
Strcpy(killer.name, str);
|
||||
}
|
||||
if (iflags.last_msg == PLNMSG_CAUGHT_IN_EXPLOSION
|
||||
|| iflags.last_msg
|
||||
== PLNMSG_TOWER_OF_FLAME) /*seffects()*/
|
||||
|| iflags.last_msg == PLNMSG_TOWER_OF_FLAME) /*seffects()*/
|
||||
pline("It is fatal.");
|
||||
else
|
||||
pline_The("%s is fatal.", str);
|
||||
|
||||
@@ -2386,7 +2386,10 @@ int src;
|
||||
*op = '\0';
|
||||
}
|
||||
/* parse here */
|
||||
parsesymbols(bufp);
|
||||
if (!parsesymbols(bufp)) {
|
||||
raw_printf("Error in SYMBOLS definition '%s'.\n", bufp);
|
||||
wait_synch();
|
||||
}
|
||||
if (morelines) {
|
||||
do {
|
||||
*symbuf = '\0';
|
||||
|
||||
41
src/hack.c
41
src/hack.c
@@ -657,7 +657,7 @@ xchar x, y;
|
||||
}
|
||||
|
||||
/* 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
|
||||
test_move(ux, uy, dx, dy, mode)
|
||||
@@ -747,7 +747,7 @@ int mode;
|
||||
} else
|
||||
pline("That door is closed.");
|
||||
}
|
||||
} else if (mode == TEST_TRAV)
|
||||
} else if (mode == TEST_TRAV || mode == TEST_TRAP)
|
||||
goto testdiag;
|
||||
return FALSE;
|
||||
}
|
||||
@@ -790,15 +790,19 @@ int mode;
|
||||
/* Pick travel path that does not require crossing a trap.
|
||||
* Avoid water and lava using the usual running rules.
|
||||
* (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);
|
||||
|
||||
if ((t && t->tseen)
|
||||
|| (!Levitation && !Flying && !is_clinger(youmonst.data)
|
||||
&& 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];
|
||||
|
||||
/* 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 };
|
||||
/* no diagonal movement for grid bugs */
|
||||
int dirmax = NODIAG(u.umonnum) ? 4 : 8;
|
||||
boolean alreadyrepeated = FALSE;
|
||||
|
||||
for (dir = 0; dir < dirmax; ++dir) {
|
||||
int nx = x + xdir[ordered[dir]];
|
||||
@@ -923,14 +928,18 @@ boolean guess;
|
||||
if (!isok(nx, ny))
|
||||
continue;
|
||||
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
|
||||
* cause a delay, so prefer another path */
|
||||
if (travel[x][y] > radius - 3) {
|
||||
travelstepx[1 - set][nn] = x;
|
||||
travelstepy[1 - set][nn] = y;
|
||||
/* don't change travel matrix! */
|
||||
nn++;
|
||||
if (!alreadyrepeated) {
|
||||
travelstepx[1 - set][nn] = x;
|
||||
travelstepy[1 - set][nn] = y;
|
||||
/* don't change travel matrix! */
|
||||
nn++;
|
||||
alreadyrepeated = TRUE;
|
||||
}
|
||||
continue;
|
||||
}
|
||||
}
|
||||
@@ -1361,8 +1370,9 @@ domove()
|
||||
}
|
||||
|
||||
mtmp = m_at(x, y);
|
||||
if (mtmp) {
|
||||
if (mtmp && !is_safepet(mtmp)) {
|
||||
/* 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 */
|
||||
if (context.run && ((!Blind && mon_visible(mtmp)
|
||||
&& ((mtmp->m_ap_type != M_AP_FURNITURE
|
||||
@@ -1384,7 +1394,10 @@ domove()
|
||||
|
||||
/* attack monster */
|
||||
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 */
|
||||
/* or if we used the 'F' command to fight blindly */
|
||||
/* 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
|
||||
* 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))) {
|
||||
if (mtmp->m_ap_type && !Protection_from_shape_changers
|
||||
&& !sensemon(mtmp))
|
||||
@@ -2406,7 +2419,7 @@ lookaround()
|
||||
&& mtmp->m_ap_type != M_AP_OBJECT
|
||||
&& (!mtmp->minvis || See_invisible) && !mtmp->mundetected) {
|
||||
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;
|
||||
}
|
||||
|
||||
@@ -2669,6 +2682,8 @@ boolean k_format;
|
||||
u.uhp -= n;
|
||||
if (u.uhp > u.uhpmax)
|
||||
u.uhpmax = u.uhp; /* perhaps n was negative */
|
||||
else
|
||||
context.travel = context.travel1 = context.mv = context.run = 0;
|
||||
context.botl = 1;
|
||||
if (u.uhp < 1) {
|
||||
killer.format = k_format;
|
||||
|
||||
@@ -1099,6 +1099,7 @@ register const char *let, *word;
|
||||
&& (otmp->otyp != HORN_OF_PLENTY || !otmp->dknown
|
||||
|| !objects[HORN_OF_PLENTY].oc_name_known))
|
||||
|| (!strcmp(word, "charge") && !is_chargeable(otmp))
|
||||
|| (!strcmp(word, "open") && otyp != TIN)
|
||||
|| (!strcmp(word, "call") && !objtyp_is_callable(otyp))
|
||||
) {
|
||||
foo--;
|
||||
|
||||
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -120,7 +120,12 @@ register int otyp;
|
||||
Strcpy(buf, "wand");
|
||||
break;
|
||||
case SPBOOK_CLASS:
|
||||
Strcpy(buf, "spellbook");
|
||||
if (otyp != SPE_NOVEL) {
|
||||
Strcpy(buf, "spellbook");
|
||||
} else {
|
||||
Strcpy(buf, !nn ? "book" : "novel");
|
||||
nn = 0;
|
||||
}
|
||||
break;
|
||||
case RING_CLASS:
|
||||
Strcpy(buf, "ring");
|
||||
|
||||
@@ -3298,7 +3298,7 @@ boolean tinitial, tfrom_file;
|
||||
* options list
|
||||
*/
|
||||
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 */
|
||||
if (!boolopt[i].addr) {
|
||||
if (!initial && !negated)
|
||||
@@ -3312,6 +3312,23 @@ boolean tinitial, tfrom_file;
|
||||
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;
|
||||
|
||||
/* 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 */
|
||||
badoption(opts);
|
||||
}
|
||||
@@ -4957,7 +4980,7 @@ free_symsets()
|
||||
}
|
||||
|
||||
/* Parse the value of a SYMBOLS line from a config file */
|
||||
void
|
||||
boolean
|
||||
parsesymbols(opts)
|
||||
register char *opts;
|
||||
{
|
||||
@@ -4967,7 +4990,7 @@ register char *opts;
|
||||
|
||||
if ((op = index(opts, ',')) != 0) {
|
||||
*op++ = 0;
|
||||
parsesymbols(op);
|
||||
if (!parsesymbols(op)) return FALSE;
|
||||
}
|
||||
|
||||
/* S_sample:string */
|
||||
@@ -4976,7 +4999,7 @@ register char *opts;
|
||||
if (!strval)
|
||||
strval = index(opts, '=');
|
||||
if (!strval)
|
||||
return;
|
||||
return FALSE;
|
||||
*strval++ = '\0';
|
||||
|
||||
/* strip leading and trailing white space from symname and strval */
|
||||
@@ -4985,12 +5008,13 @@ register char *opts;
|
||||
|
||||
symp = match_sym(symname);
|
||||
if (!symp)
|
||||
return;
|
||||
return FALSE;
|
||||
|
||||
if (symp->range && symp->range != SYM_CONTROL) {
|
||||
val = sym_val(strval);
|
||||
update_l_symset(symp, val);
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
struct symparse *
|
||||
|
||||
168
src/pickup.c
168
src/pickup.c
@@ -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. */
|
||||
/* 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"
|
||||
@@ -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 long FDECL(carry_count, (struct obj *, struct obj *, long,
|
||||
BOOLEAN_P, int *, int *));
|
||||
STATIC_DCL int FDECL(lift_object,
|
||||
(struct obj *, struct obj *, long *, BOOLEAN_P));
|
||||
STATIC_DCL int FDECL(lift_object, (struct obj *, struct obj *, long *,
|
||||
BOOLEAN_P));
|
||||
STATIC_DCL boolean FDECL(mbag_explodes, (struct obj *, int));
|
||||
STATIC_PTR int FDECL(in_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 */
|
||||
/* 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;
|
||||
#define Icebox (current_container->otyp == ICE_BOX)
|
||||
|
||||
static const char moderateloadmsg[] = "You have a little trouble lifting";
|
||||
static const char nearloadmsg[] = "You have much trouble lifting";
|
||||
static const char overloadmsg[] = "You have extreme difficulty lifting";
|
||||
static const char
|
||||
moderateloadmsg[] = "You have a little trouble lifting",
|
||||
nearloadmsg[] = "You have much trouble lifting",
|
||||
overloadmsg[] = "You have extreme difficulty lifting";
|
||||
|
||||
/* BUG: this lets you look at cockatrice corpses while blind without
|
||||
touching them */
|
||||
@@ -89,6 +90,7 @@ boolean here; /* flag for type of obj list linkage */
|
||||
pline1(doname(otmp));
|
||||
} else {
|
||||
winid tmpwin = create_nhwindow(NHW_MENU);
|
||||
|
||||
putstr(tmpwin, 0, "");
|
||||
do {
|
||||
putstr(tmpwin, 0, doname(otmp));
|
||||
@@ -125,15 +127,15 @@ int *itemcount;
|
||||
|
||||
/*
|
||||
* Suppose some '?' and '!' objects are present, but '/' objects aren't:
|
||||
* "a" picks all items without further prompting;
|
||||
* "A" steps through all items, asking one by one;
|
||||
* "?" steps through '?' items, asking, and ignores '!' ones;
|
||||
* "/" becomes 'A', since no '/' present;
|
||||
* "?a" or "a?" picks all '?' without further prompting;
|
||||
* "/a" or "a/" becomes 'A' since there aren't any '/'
|
||||
* (bug fix: 3.1.0 thru 3.1.3 treated it as "a");
|
||||
* "?/a" or "a?/" or "/a?",&c picks all '?' even though no '/'
|
||||
* (ie, treated as if it had just been "?a").
|
||||
* "a" picks all items without further prompting;
|
||||
* "A" steps through all items, asking one by one;
|
||||
* "?" steps through '?' items, asking, and ignores '!' ones;
|
||||
* "/" becomes 'A', since no '/' present;
|
||||
* "?a" or "a?" picks all '?' without further prompting;
|
||||
* "/a" or "a/" becomes 'A' since there aren't any '/'
|
||||
* (bug fix: 3.1.0 thru 3.1.3 treated it as "a");
|
||||
* "?/a" or "a?/" or "/a?",&c picks all '?' even though no '/'
|
||||
* (ie, treated as if it had just been "?a").
|
||||
*/
|
||||
STATIC_OVL boolean
|
||||
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 */
|
||||
const char *where = 0;
|
||||
register char sym, oc_of_sym, *p;
|
||||
char sym, oc_of_sym, *p;
|
||||
|
||||
/* additional choices */
|
||||
ilets[iletct++] = ' ';
|
||||
ilets[iletct++] = 'a';
|
||||
@@ -189,8 +192,7 @@ int *menu_on_demand;
|
||||
if (*inbuf == '\033')
|
||||
return FALSE;
|
||||
|
||||
for (p = inbuf; (sym = *p++);) {
|
||||
/* new A function (selective all) added by GAN 01/09/87 */
|
||||
for (p = inbuf; (sym = *p++) != 0; ) {
|
||||
if (sym == ' ')
|
||||
continue;
|
||||
else if (sym == 'A')
|
||||
@@ -407,8 +409,8 @@ struct obj *obj;
|
||||
/* check for particular bless/curse state */
|
||||
if (bucx_filter) {
|
||||
/* first categorize this object's bless/curse state */
|
||||
char bucx =
|
||||
!obj->bknown ? 'X' : obj->blessed ? 'B' : obj->cursed ? 'C' : 'U';
|
||||
char bucx = !obj->bknown ? 'X'
|
||||
: obj->blessed ? 'B' : obj->cursed ? 'C' : 'U';
|
||||
|
||||
/* if its category is not in the list, reject */
|
||||
if (!index(valid_menu_classes, bucx))
|
||||
@@ -425,11 +427,10 @@ allow_cat_no_uchain(obj)
|
||||
struct obj *obj;
|
||||
{
|
||||
if (obj != uchain
|
||||
&& ((index(valid_menu_classes,'u') && obj->unpaid)
|
||||
&& ((index(valid_menu_classes,'u') && obj->unpaid)
|
||||
|| index(valid_menu_classes, obj->oclass)))
|
||||
return TRUE;
|
||||
else
|
||||
return FALSE;
|
||||
return TRUE;
|
||||
return FALSE;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -447,9 +448,9 @@ register struct obj *otmp;
|
||||
* or a monster's inventory if swallowed.
|
||||
*
|
||||
* Arg what:
|
||||
* >0 autopickup
|
||||
* =0 interactive
|
||||
* <0 pickup count of something
|
||||
* >0 autopickup
|
||||
* =0 interactive
|
||||
* <0 pickup count of something
|
||||
*
|
||||
* Returns 1 if tried to pick something up, whether
|
||||
* or not it succeeded.
|
||||
@@ -538,11 +539,12 @@ int what; /* should be a long */
|
||||
if (flags.menu_style != MENU_TRADITIONAL || iflags.menu_requested) {
|
||||
/* use menus exclusively */
|
||||
if (count) { /* looking for N of something */
|
||||
char buf[QBUFSZ];
|
||||
Sprintf(buf, "Pick %d of what?", count);
|
||||
char qbuf[QBUFSZ];
|
||||
|
||||
Sprintf(qbuf, "Pick %d of what?", count);
|
||||
val_for_n_or_more = count; /* set up callback selector */
|
||||
n = query_objlist(buf, objchain, traverse_how | AUTOSELECT_SINGLE
|
||||
| INVORDER_SORT,
|
||||
n = query_objlist(qbuf, objchain, traverse_how | AUTOSELECT_SINGLE
|
||||
| INVORDER_SORT,
|
||||
&pick_list, PICK_ONE, n_or_more);
|
||||
/* correct counts, if any given */
|
||||
for (i = 0; i < n; i++)
|
||||
@@ -600,11 +602,12 @@ int what; /* should be a long */
|
||||
traverse_how == BY_NEXTHERE, &via_menu)) {
|
||||
if (!via_menu)
|
||||
return 0;
|
||||
n = query_objlist(
|
||||
"Pick up what?", objchain,
|
||||
traverse_how | (selective ? 0 : INVORDER_SORT),
|
||||
&pick_list, PICK_ANY,
|
||||
via_menu == -2 ? allow_all : allow_category);
|
||||
n = query_objlist("Pick up what?", objchain,
|
||||
traverse_how
|
||||
| (selective ? 0 : INVORDER_SORT),
|
||||
&pick_list, PICK_ANY,
|
||||
(via_menu == -2) ? allow_all
|
||||
: allow_category);
|
||||
goto menu_pickup;
|
||||
}
|
||||
}
|
||||
@@ -657,7 +660,7 @@ int what; /* should be a long */
|
||||
n_picked += res;
|
||||
}
|
||||
end_query:
|
||||
; /* semicolon needed by brain-damaged compilers */
|
||||
; /* statement required after label */
|
||||
}
|
||||
|
||||
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?
|
||||
*/
|
||||
char *objdesc = makesingular(doname(obj));
|
||||
struct autopickup_exception *ape =
|
||||
(grab) ? iflags.autopickup_exceptions[AP_GRAB]
|
||||
: iflags.autopickup_exceptions[AP_LEAVE];
|
||||
struct autopickup_exception
|
||||
*ape = (grab) ? iflags.autopickup_exceptions[AP_GRAB]
|
||||
: iflags.autopickup_exceptions[AP_LEAVE];
|
||||
|
||||
while (ape) {
|
||||
if (regex_match(objdesc, ape->regex))
|
||||
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 */
|
||||
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 */
|
||||
if (!pickit)
|
||||
pickit = is_autopickup_exception(curr, TRUE);
|
||||
@@ -732,7 +741,7 @@ menu_item **pick_list; /* list of objects and counts to pick up */
|
||||
}
|
||||
|
||||
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)) {
|
||||
pickit = (!*otypes || index(otypes, curr->oclass));
|
||||
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.
|
||||
*
|
||||
* Query flags:
|
||||
* BY_NEXTHERE - Follow object list via nexthere instead of nobj.
|
||||
* AUTOSELECT_SINGLE - Don't ask if only 1 object qualifies - just
|
||||
* use it.
|
||||
* USE_INVLET - Use object's invlet.
|
||||
* INVORDER_SORT - Use hero's pack order.
|
||||
* INCLUDE_HERO - Showing engulfer's invent; show hero too.
|
||||
* SIGNAL_NOMENU - Return -1 rather than 0 if nothing passes "allow".
|
||||
* SIGNAL_ESCAPE - Return -1 rather than 0 if player uses ESC to
|
||||
* pick nothing.
|
||||
* BY_NEXTHERE - Follow object list via nexthere instead of nobj.
|
||||
* AUTOSELECT_SINGLE - Don't ask if only 1 object qualifies - just
|
||||
* use it.
|
||||
* USE_INVLET - Use object's invlet.
|
||||
* INVORDER_SORT - Use hero's pack order.
|
||||
* INCLUDE_HERO - Showing engulfer's invent; show hero too.
|
||||
* SIGNAL_NOMENU - Return -1 rather than 0 if nothing passes "allow".
|
||||
* SIGNAL_ESCAPE - Return -1 rather than 0 if player uses ESC to
|
||||
* pick nothing.
|
||||
*/
|
||||
int
|
||||
query_objlist(qstr, olist, qflags, pick_list, how, allow)
|
||||
@@ -1202,7 +1211,7 @@ int *wt_before, *wt_after;
|
||||
* object and calling weight.
|
||||
*
|
||||
* This works for containers only because containers
|
||||
* don't merge. -dean
|
||||
* don't merge. -dean
|
||||
*/
|
||||
for (qq = 1L; qq <= count; qq++) {
|
||||
obj->quan = qq;
|
||||
@@ -1295,8 +1304,8 @@ boolean telekinesis;
|
||||
return -1;
|
||||
}
|
||||
|
||||
*cnt_p =
|
||||
carry_count(obj, container, *cnt_p, telekinesis, &old_wt, &new_wt);
|
||||
*cnt_p = carry_count(obj, container, *cnt_p, telekinesis,
|
||||
&old_wt, &new_wt);
|
||||
if (*cnt_p < 1L) {
|
||||
result = -1; /* nothing lifted */
|
||||
} else if (obj->oclass != COIN_CLASS
|
||||
@@ -1557,6 +1566,7 @@ mon_beside(x, y)
|
||||
int x, y;
|
||||
{
|
||||
int i, j, nx, ny;
|
||||
|
||||
for (i = -1; i <= 1; i++)
|
||||
for (j = -1; j <= 1; j++) {
|
||||
nx = x + i;
|
||||
@@ -1572,6 +1582,7 @@ do_loot_cont(cobjp)
|
||||
struct obj **cobjp;
|
||||
{
|
||||
struct obj *cobj = *cobjp;
|
||||
|
||||
if (!cobj)
|
||||
return 0;
|
||||
if (cobj->olocked) {
|
||||
@@ -1584,6 +1595,7 @@ struct obj **cobjp;
|
||||
|
||||
if (cobj->otyp == BAG_OF_TRICKS) {
|
||||
int tmp;
|
||||
|
||||
You("carefully open the bag...");
|
||||
pline("It develops a huge set of teeth and bites you!");
|
||||
tmp = rnd(10);
|
||||
@@ -1645,7 +1657,7 @@ lootcont:
|
||||
int n, i;
|
||||
winid win;
|
||||
anything any;
|
||||
menu_item *pick_list = NULL;
|
||||
menu_item *pick_list = (menu_item *) 0;
|
||||
|
||||
any.a_void = 0;
|
||||
win = create_nhwindow(NHW_MENU);
|
||||
@@ -1846,9 +1858,9 @@ boolean *prev_loot;
|
||||
struct obj *otmp;
|
||||
char qbuf[QBUFSZ];
|
||||
|
||||
/* 3.3.1 introduced the ability to remove saddle from a steed */
|
||||
/* *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.
|
||||
/* 3.3.1 introduced the ability to remove saddle from a steed.
|
||||
* *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.
|
||||
*/
|
||||
if (mtmp && mtmp != u.usteed && (otmp = which_armor(mtmp, W_SADDLE))) {
|
||||
long unwornmask;
|
||||
@@ -1884,10 +1896,11 @@ boolean *prev_loot;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
/* 3.4.0 introduced the ability to pick things up from within swallower's
|
||||
* stomach */
|
||||
/* 3.4.0 introduced the ability to pick things up from within
|
||||
swallower's stomach */
|
||||
if (u.uswallow) {
|
||||
int count = passed_info ? *passed_info : 0;
|
||||
|
||||
timepassed = pickup(count);
|
||||
}
|
||||
return timepassed;
|
||||
@@ -1966,16 +1979,16 @@ register struct obj *obj;
|
||||
return 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)
|
||||
return 0; /* unwielded, died, rewielded */
|
||||
} else if (obj == uswapwep) {
|
||||
setuswapwep((struct obj *) 0);
|
||||
if (uswapwep)
|
||||
return 0; /* unwielded, died, rewielded */
|
||||
} else if (obj == uquiver) {
|
||||
setuqwep((struct obj *) 0);
|
||||
if (uquiver)
|
||||
return 0; /* unwielded, died, rewielded */
|
||||
}
|
||||
|
||||
if (fatal_corpse_mistake(obj, FALSE))
|
||||
@@ -2001,12 +2014,13 @@ register struct obj *obj;
|
||||
(void) snuff_lit(obj);
|
||||
|
||||
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 */
|
||||
obj->no_charge = 1;
|
||||
} else if (obj->oclass != COIN_CLASS) {
|
||||
/* sellobj() will take an unpaid item off the shop bill
|
||||
* note: coins are handled later */
|
||||
} else {
|
||||
/* sellobj() will take an unpaid item off the shop bill */
|
||||
was_unpaid = obj->unpaid ? TRUE : FALSE;
|
||||
sellobj_state(SELL_DELIBERATE);
|
||||
sellobj(obj, u.ux, u.uy);
|
||||
@@ -2018,6 +2032,7 @@ register struct obj *obj;
|
||||
/* stop any corpse timeouts when frozen */
|
||||
if (obj->otyp == CORPSE && obj->timed) {
|
||||
long rot_alarm = stop_timer(ROT_CORPSE, obj_to_any(obj));
|
||||
|
||||
(void) stop_timer(REVIVE_MON, obj_to_any(obj));
|
||||
/* mark a non-reviving corpse as such */
|
||||
if (rot_alarm)
|
||||
@@ -2058,7 +2073,6 @@ register struct obj *obj;
|
||||
* update status immediately.
|
||||
*/
|
||||
bot();
|
||||
|
||||
return (current_container ? 1 : -1);
|
||||
}
|
||||
|
||||
@@ -2121,10 +2135,10 @@ register struct obj *obj;
|
||||
|
||||
otmp = addinv(obj);
|
||||
loadlev = near_capacity();
|
||||
prinv(loadlev
|
||||
? (loadlev < MOD_ENCUMBER ? "You have a little trouble removing"
|
||||
: "You have much trouble removing")
|
||||
: (char *) 0,
|
||||
prinv(loadlev ? ((loadlev < MOD_ENCUMBER)
|
||||
? "You have a little trouble removing"
|
||||
: "You have much trouble removing")
|
||||
: (char *) 0,
|
||||
otmp, count);
|
||||
|
||||
if (is_gold) {
|
||||
@@ -2698,7 +2712,7 @@ dotip()
|
||||
int n, i;
|
||||
winid win;
|
||||
anything any;
|
||||
menu_item *pick_list = NULL;
|
||||
menu_item *pick_list = (menu_item *) 0;
|
||||
struct obj dummyobj, *otmp;
|
||||
|
||||
any = zeroany;
|
||||
@@ -2838,7 +2852,7 @@ struct obj *box; /* or bag */
|
||||
treated the same as in the carried case. We do so one
|
||||
item at a time instead of doing whole container at once
|
||||
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
|
||||
fields haven't been overloaded to mean something special for the
|
||||
|
||||
76
src/potion.c
76
src/potion.c
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -1725,6 +1725,7 @@ register struct obj *o1, *o2;
|
||||
switch (o2->otyp) {
|
||||
case POT_SICKNESS:
|
||||
return POT_SICKNESS;
|
||||
case POT_ENLIGHTENMENT:
|
||||
case POT_SPEED:
|
||||
return POT_BOOZE;
|
||||
case POT_GAIN_LEVEL:
|
||||
@@ -1746,13 +1747,14 @@ register struct obj *o1, *o2;
|
||||
break;
|
||||
}
|
||||
|
||||
return 0;
|
||||
return STRANGE_OBJECT;
|
||||
}
|
||||
|
||||
/* #dip command */
|
||||
int
|
||||
dodip()
|
||||
{
|
||||
static const char Dip_[] = "Dip ", into_the_something[] = " into the %s?";
|
||||
register struct obj *potion, *obj;
|
||||
struct obj *singlepotion;
|
||||
uchar here;
|
||||
@@ -1772,19 +1774,28 @@ dodip()
|
||||
here = levl[u.ux][u.uy].typ;
|
||||
/* Is there a fountain to dip into 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?" */
|
||||
if (yn(safe_qbuf(qbuf, "Dip ", " into the fountain?", obj,
|
||||
doname, thesimpleoname, shortestname)) == 'y') {
|
||||
if (yn(qbuf) == 'y') {
|
||||
dipfountain(obj);
|
||||
return 1;
|
||||
}
|
||||
} else if (is_pool(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}?" */
|
||||
Sprintf(qtoo, " into the %s?", pooltype);
|
||||
if (yn(safe_qbuf(qbuf, "Dip ", qtoo, obj,
|
||||
doname, thesimpleoname, shortestname)) == 'y') {
|
||||
if (yn(qbuf) == 'y') {
|
||||
if (Levitation) {
|
||||
floating_above(pooltype);
|
||||
} else if (u.usteed && !is_swimmer(u.usteed->data)
|
||||
@@ -1801,10 +1812,19 @@ dodip()
|
||||
}
|
||||
|
||||
/* "What do you want to dip <the object> into?" */
|
||||
Strcpy(qbuf, safe_qbuf(qtoo, "What do you want to dip ", " into?", obj,
|
||||
doname, thesimpleoname, shortestname)
|
||||
+ sizeof "What do you want to " - sizeof "");
|
||||
potion = getobj(beverages, qbuf); /* "dip into" */
|
||||
if (flags.verbose) {
|
||||
/* "What do you want to " is getobj()'s prefix, "dip " is ours */
|
||||
Strcpy(qbuf, safe_qbuf(qtoo, "What do you want to 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)
|
||||
return 0;
|
||||
if (potion == obj && potion->quan == 1L) {
|
||||
@@ -1859,19 +1879,25 @@ dodip()
|
||||
potion->in_use = FALSE; /* didn't go poof */
|
||||
return 1;
|
||||
} else if (obj->oclass == POTION_CLASS && obj->otyp != potion->otyp) {
|
||||
long amt = obj->quan;
|
||||
int amt = (int) obj->quan;
|
||||
boolean magic;
|
||||
|
||||
Strcpy(qbuf, "The");
|
||||
if (amt > (objects[potion->otyp].oc_magic ? 2L : 9L)) {
|
||||
mixture = mixtype(obj, potion);
|
||||
|
||||
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
|
||||
subset; pick an amount between 2 and min(N,9), inclusive */
|
||||
amt -= 1L;
|
||||
do {
|
||||
amt = (long) rnd((int) amt);
|
||||
} while (amt >= 9L);
|
||||
amt += 1L;
|
||||
if (amt < obj->quan) {
|
||||
obj = splitobj(obj, amt);
|
||||
subset; pick an amount between 3 and 8, inclusive, for magic
|
||||
potion result, between 7 and N for non-magic */
|
||||
if (magic)
|
||||
amt = rnd(min(amt, 8) - (3 - 1)) + (3 - 1); /* 1..6 + 2 */
|
||||
else
|
||||
amt = rnd(amt - (7 - 1)) + (7 - 1); /* 1..(N-6) + 6 */
|
||||
|
||||
if ((long) amt < obj->quan) {
|
||||
obj = splitobj(obj, (long) amt);
|
||||
Sprintf(qbuf, "%ld of the", obj->quan);
|
||||
}
|
||||
}
|
||||
@@ -1894,7 +1920,7 @@ dodip()
|
||||
potionbreathe(obj);
|
||||
useupall(obj);
|
||||
useup(potion);
|
||||
losehp((int) (amt + rnd(9)), /* not physical damage */
|
||||
losehp(amt + rnd(9), /* not physical damage */
|
||||
"alchemic blast", KILLED_BY_AN);
|
||||
return 1;
|
||||
}
|
||||
@@ -1903,7 +1929,7 @@ dodip()
|
||||
if (Blind || Hallucination)
|
||||
obj->dknown = 0;
|
||||
|
||||
if ((mixture = mixtype(obj, potion)) != 0) {
|
||||
if (mixture != STRANGE_OBJECT) {
|
||||
obj->otyp = mixture;
|
||||
} else {
|
||||
switch (obj->odiluted ? 1 : rnd(8)) {
|
||||
@@ -2065,7 +2091,7 @@ more_dips:
|
||||
|
||||
potion->in_use = FALSE; /* didn't go poof */
|
||||
if ((obj->otyp == UNICORN_HORN || obj->otyp == AMETHYST)
|
||||
&& (mixture = mixtype(obj, potion)) != 0) {
|
||||
&& (mixture = mixtype(obj, potion)) != STRANGE_OBJECT) {
|
||||
char oldbuf[BUFSZ], newbuf[BUFSZ];
|
||||
short old_otyp = potion->otyp;
|
||||
boolean old_dknown = FALSE;
|
||||
|
||||
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -467,7 +467,7 @@ int trouble;
|
||||
what ? what : (const char *) Yobjnam2(otmp, "softly glow"),
|
||||
hcolor(NH_AMBER));
|
||||
iflags.last_msg = PLNMSG_OBJ_GLOWS;
|
||||
otmp->bknown = TRUE;
|
||||
otmp->bknown = !Hallucination;
|
||||
}
|
||||
uncurse(otmp);
|
||||
update_inventory();
|
||||
|
||||
21
src/read.c
21
src/read.c
@@ -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. */
|
||||
/* 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 {
|
||||
for (obj = invent; obj; obj = obj->nobj) {
|
||||
long wornmask;
|
||||
|
||||
/* gold isn't subject to cursing and blessing */
|
||||
if (obj->oclass == COIN_CLASS)
|
||||
continue;
|
||||
@@ -1269,8 +1270,7 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
|
||||
if (sblessed || wornmask || obj->otyp == LOADSTONE
|
||||
|| (obj->otyp == LEASH && obj->leashmon)) {
|
||||
/* water price varies by curse/bless status */
|
||||
boolean shop_h2o =
|
||||
(obj->unpaid && obj->otyp == POT_WATER);
|
||||
boolean shop_h2o = (obj->unpaid && obj->otyp == POT_WATER);
|
||||
|
||||
if (confused) {
|
||||
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;
|
||||
break;
|
||||
}
|
||||
if (!chwepon(sobj,
|
||||
scursed
|
||||
? -1
|
||||
: !uwep ? 1 : (uwep->spe >= 9)
|
||||
? !rn2(uwep->spe)
|
||||
: sblessed ? rnd(3 - uwep->spe / 3)
|
||||
: 1))
|
||||
if (!chwepon(sobj, scursed ? -1
|
||||
: !uwep ? 1
|
||||
: (uwep->spe >= 9) ? !rn2(uwep->spe)
|
||||
: sblessed ? rnd(3 - uwep->spe / 3)
|
||||
: 1))
|
||||
sobj = 0; /* nothing enchanted: strange_feeling -> useup */
|
||||
break;
|
||||
case SCR_TAMING:
|
||||
@@ -1387,7 +1385,8 @@ struct obj *sobj; /* scroll, or fake spellbook object for scroll-like spell */
|
||||
if (vis_results > 0)
|
||||
known = TRUE;
|
||||
}
|
||||
} break;
|
||||
break;
|
||||
}
|
||||
case SCR_GENOCIDE:
|
||||
if (!already_known)
|
||||
You("have found a scroll of genocide!");
|
||||
|
||||
37
src/shk.c
37
src/shk.c
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -383,9 +383,8 @@ register xchar x, y;
|
||||
|
||||
rno = levl[x][y].roomno;
|
||||
if ((rno < ROOMOFFSET) || levl[x][y].edge || !IS_SHOP(rno - ROOMOFFSET))
|
||||
return NO_ROOM;
|
||||
else
|
||||
return rno;
|
||||
rno = NO_ROOM;
|
||||
return rno;
|
||||
}
|
||||
|
||||
void
|
||||
@@ -773,21 +772,18 @@ register char rmno;
|
||||
|
||||
boolean
|
||||
tended_shop(sroom)
|
||||
register struct mkroom *sroom;
|
||||
struct mkroom *sroom;
|
||||
{
|
||||
register struct monst *mtmp = sroom->resident;
|
||||
struct monst *mtmp = sroom->resident;
|
||||
|
||||
if (!mtmp)
|
||||
return FALSE;
|
||||
else
|
||||
return (boolean) inhishop(mtmp);
|
||||
return !mtmp ? FALSE : (boolean) inhishop(mtmp);
|
||||
}
|
||||
|
||||
STATIC_OVL struct bill_x *
|
||||
onbill(obj, shkp, silent)
|
||||
register struct obj *obj;
|
||||
register struct monst *shkp;
|
||||
register boolean silent;
|
||||
struct obj *obj;
|
||||
struct monst *shkp;
|
||||
boolean silent;
|
||||
{
|
||||
if (shkp) {
|
||||
register struct bill_x *bp = ESHK(shkp)->bill_p;
|
||||
@@ -1131,12 +1127,13 @@ register xchar ox, oy;
|
||||
hot_pursuit(shkp);
|
||||
}
|
||||
|
||||
STATIC_VAR const char no_money[] = "Moreover, you%s have no money.";
|
||||
STATIC_VAR const char not_enough_money[] =
|
||||
"Besides, you don't have enough to interest %s.";
|
||||
STATIC_VAR const char
|
||||
no_money[] = "Moreover, you%s have no money.",
|
||||
not_enough_money[] = "Besides, you don't have enough to interest %s.";
|
||||
|
||||
/* delivers the cheapest item on the list */
|
||||
STATIC_OVL long
|
||||
cheapest_item(shkp) /* delivers the cheapest item on the list */
|
||||
cheapest_item(shkp)
|
||||
register struct monst *shkp;
|
||||
{
|
||||
register int ct = ESHK(shkp)->billct;
|
||||
@@ -1348,6 +1345,7 @@ proceed:
|
||||
long dtmp = eshkp->debit;
|
||||
long loan = eshkp->loan;
|
||||
char sbuf[BUFSZ];
|
||||
|
||||
umoney = money_cnt(invent);
|
||||
Sprintf(sbuf, "You owe %s %ld %s ", shkname(shkp), dtmp,
|
||||
currency(dtmp));
|
||||
@@ -1394,6 +1392,7 @@ proceed:
|
||||
if (eshkp->billct) {
|
||||
register boolean itemize;
|
||||
int iprompt;
|
||||
|
||||
umoney = money_cnt(invent);
|
||||
if (!umoney && !eshkp->credit) {
|
||||
You("%shave no money or credit%s.",
|
||||
@@ -2122,7 +2121,7 @@ boolean quietly;
|
||||
(7 - obj->spe), (obj->spe > 0) ? " more" : "",
|
||||
plur(7 - obj->spe));
|
||||
/* [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 {
|
||||
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 = (tmp + 3) * obj->quan;
|
||||
}
|
||||
} else if (tmp > 1L && !rn2(4))
|
||||
} else if (tmp > 1L && !(shkp->m_id % 4))
|
||||
multiplier *= 3L, divisor *= 4L;
|
||||
}
|
||||
|
||||
|
||||
@@ -1823,8 +1823,8 @@ struct mkroom *croom;
|
||||
otmp->obroken = 1;
|
||||
otmp->olocked = 0; /* obj generation may set */
|
||||
}
|
||||
if (o->trapped)
|
||||
otmp->otrapped = 1;
|
||||
if (o->trapped == 0 || o->trapped == 1)
|
||||
otmp->otrapped = o->trapped;
|
||||
if (o->greased)
|
||||
otmp->greased = 1;
|
||||
#ifdef INVISIBLE_OBJECTS
|
||||
@@ -3023,7 +3023,7 @@ struct sp_coder *coder;
|
||||
tmpobj.lit = 0;
|
||||
tmpobj.eroded = 0;
|
||||
tmpobj.locked = 0;
|
||||
tmpobj.trapped = 0;
|
||||
tmpobj.trapped = -1;
|
||||
tmpobj.recharged = 0;
|
||||
tmpobj.invis = 0;
|
||||
tmpobj.greased = 0;
|
||||
|
||||
@@ -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 */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -474,6 +474,7 @@ register struct obj *spellbook;
|
||||
spellbook->o_id)) {
|
||||
u.uconduct.literate++;
|
||||
check_unpaid(spellbook);
|
||||
makeknown(booktype);
|
||||
if (!u.uevent.read_tribute) {
|
||||
/* give bonus of 20 xp and 4*20+0 pts */
|
||||
more_experienced(20, 0);
|
||||
|
||||
@@ -350,10 +350,12 @@ register struct monst *mtmp;
|
||||
Strcpy(buf, y_monnam(mtmp));
|
||||
buf[0] = highc(buf[0]);
|
||||
You("stop. %s is in the way!", buf);
|
||||
context.travel = context.travel1 = context.mv = context.run = 0;
|
||||
return TRUE;
|
||||
} else if ((mtmp->mfrozen || (!mtmp->mcanmove)
|
||||
|| (mtmp->data->mmove == 0)) && rn2(6)) {
|
||||
pline("%s doesn't seem to move!", Monnam(mtmp));
|
||||
context.travel = context.travel1 = context.mv = context.run = 0;
|
||||
return TRUE;
|
||||
} else
|
||||
return FALSE;
|
||||
|
||||
21
src/wield.c
21
src/wield.c
@@ -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. */
|
||||
/* 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))) {
|
||||
char buf[BUFSZ];
|
||||
|
||||
Sprintf(buf, "Your %s %s.", makeplural(body_part(HAND)),
|
||||
(amount >= 0) ? "twitch" : "itch");
|
||||
strange_feeling(otmp, buf);
|
||||
if (amount >= 0 && uwep && will_weld(uwep)) { /* cursed tin opener */
|
||||
if (!Blind) {
|
||||
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));
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -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. */
|
||||
/* NetHack may be freely redistributed. See license for details. */
|
||||
|
||||
@@ -335,6 +335,9 @@ int sco_flag_console = 0;
|
||||
int sco_map_valid = -1;
|
||||
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_mapoff);
|
||||
void NDECL(check_sco_console);
|
||||
@@ -399,6 +402,9 @@ init_sco_cons()
|
||||
|
||||
int linux_flag_console = 0;
|
||||
|
||||
#if defined(TTY_GRAPHICS) && defined(TEXTCOLOR)
|
||||
extern int NDECL(has_colors);
|
||||
#endif
|
||||
void NDECL(linux_mapon);
|
||||
void NDECL(linux_mapoff);
|
||||
void NDECL(check_linux_console);
|
||||
|
||||
Reference in New Issue
Block a user