Commit Graph
100 Commits
Author SHA1 Message Date
PatR b574bcc93d fountain.c formatting 2015-10-15 12:30:50 -07:00
PatR 07554b4613 'v' vs '%'
Guard against the possibility of BETA_INFO (or other fields used to
construct the one-line version string) having a percent sign that would
be misinterpreted during pline processing.
2015-10-14 16:58:26 -07:00
PatR 587279601d sp_lev.c warnings
Fix a couple of warnings about prototype not matching function definition.
Prototype specified a narrow scalar ('boolean') but function uses old-style
definition which implicitly promotes narrow types (char,short,'boolean' to
int, float to double).  Switch prototypes to BOOLEAN_P.

A whole bunch of prototypes specify STATIC_DCL ('static') and then leave
the definition without STATIC_OVL (also 'static').  I only fixed up a
couple of those, but we risk getting somebody using an old compiler that
doesn't like
  static int foo();
  int foo() { return 42; }
Even if every comiler accepts that (I don't recall whether that was kosher
in the ancient K&R days), you can't tell by looking at the function
defintion (in the usual case where the forward declarations are at the top
of the file rather than immediately before the defintiion) whether it's
local to that file or global, so the missing STATIC_OVL qualifiers ought
to be added.
2015-10-13 15:15:06 -07:00
PatR 7451e6c3b0 fix inappropriate merge during aborted throw
Fix the situation reported by Pasi where cancelling a throw via ESC at
the "which direction?" prompt resulted in "object null after merge"
panic from addinv().  I wasn't able to reproduce the panic, but I could
see the throw-nowhere stack getting merged into the quiver stack when
it shouldn't.  This fixes that.

Also a couple of formatting bits.  I wish I'd quit coming across those.
2015-10-13 14:33:42 -07:00
PatR 8160990f99 tribute: The Truth 2015-10-13 02:13:37 -07:00
PatR b2aea3e9d7 wishing for novels
Make novels be wishable in normal and explore modes in addition to
wizard mode.  I don't think this weakens the tribute and it prevents
someone who attempts such a wish from getting misleading feedback of
"Nothing fitting that description exists in the game."

Wishing for "novel" will yield "novel named Foo" where "Foo" is a
randomly chosen Discworld title.  Wishing for "novel named Bar" will
yield "novel named Bar" or "novel named The Bar" if "Bar" or "The Bar"
is a valid Discworld title, or else override "Bar" and pick random
Discworld "novel named Foo" if it isn't.

Since first read of a novel bestows some experience (once per game, no
matter how many novels become available), a pacifist with an early
wish can get a head start.  I don't think that's a big deal.  And it
will require an awful lot of wishes for any player who wants to acquire
all 41 titles in one game.  I imagine someone will manage it.
2015-10-11 19:39:23 -07:00
PatR bc59da6418 tribute: The Fifth Elephant 2015-10-10 03:37:35 -07:00
PatR a28b535e80 litroom() vs Blind
An item from the "A few bugs" mail was that reading a scroll of light
when swallowed didn't light the surrounding area--which is intended--
but that doing so while blind *did*.  The logic in litroom()--which
the report was based on--was wrong, but do_clear_area() prevented the
light was escaping the engulfer.  So there was no bug from the player's
perspective, but only because the vision code has special handling for
being swallowed.  This fixes litroom()'s logic and does some formatting
cleanup.
2015-10-08 18:05:05 -07:00
PatR bd3244835e spell of protection
Another item from the "A few bugs" mail.  Casting spell of protection
when previous casting(s) hadn't timed out yet miscalculated the new AC
boost.  At low levels--when this spell probably gets its most use--the
bug wasn't noticeable.  (At high levels when someone might cast it a
whole bunch of times in succession, the effect could be noticed but
was probably just assumed to be working as intended.  Its behavior is
somewhat convoluted.)
2015-10-08 02:19:58 -07:00
PatR b2dd4bb410 MUSE for branch stairs
Fix another item in the "A few bugs" mail.  Monsters who wanted to flee
weren't able to use 'sstairs' (extra stairway leading to different branch
of dungeon) due to a logic error in the find_defensive() choices.
  if (terrain==STAIR) {
  } else if (terrain==LADDER) {
  } else if (x==sstairs.sx && y==sstairs.sy) {
  } else { /* check traps */
  }
wouldn't find 'sstairs' because they have terrain type STAIRS.  (Also,
the sstairs check wasn't screening out immobile monsters, but that bug
didn't have a chance to manifest.)

There's a bunch of reformatting, and some code re-organization to improve
other formatting, and some additional logic fixes.
2015-10-07 16:32:10 -07:00
PatR ea0729c5ca some mthrowu.c formatting cleanup 2015-10-07 15:49:59 -07:00
PatR a51531776d flesh golem healing
Fix one of the entries in the "A few bugs" mail.  Flesh golems hit by
electric damage calculated a healing amount of dam/6, then ignored it
and used dam instead.  Probably never noticed in actual play....
2015-10-05 18:32:40 -07:00
PatR 9656225247 sanity check for embedded dragon scales
The problem discovered with sanity checking of embedded dragon scales
was with the checking, not with the object flagged "embedded in skin".
I thought W_ARM got cleared when switching 'uarm' object to 'uskin',
but it isn't.
2015-10-05 18:18:03 -07:00
PatR d0217160bb tribute: Capre Jugulum 2015-10-02 23:35:41 -07:00
PatR 154c9f164f tribute: The Last Continent 2015-09-30 15:33:58 -07:00
PatR 58b9391de8 tribute typos 2015-09-25 15:56:35 -07:00
PatR 08947dcdfa tribute: Jingo 2015-09-24 18:52:39 -07:00
PatR 55e1a50512 tribute: Hogfather
I changed the first quote to use the American spelling (snowplow vs
snowplough) found in the edition I have on hand.

Passages for several more books are still queued up.  Transcribing them
is very tedious.
2015-09-20 16:31:25 -07:00
PatR 80ca4e9837 novel bit
Feedback phrasing:  don't refer to a novel as a "spellbook" when
rejecting the attempt to write on one with a magic marker.
2015-09-14 17:18:05 -07:00
PatR 29f1470ec6 tribute: Small Gods 2015-09-14 17:15:15 -07:00
PatR 27efe608d7 VMS update from KevinS (2 of 2: sys/vms)
Update the command procedure that can be used to compile and link
everything.  The sys/vms Makefiles still need updating.

I added 'tribute' to the command procedure used to create and populate
the plaground directory but am not able to test it.
2015-09-08 16:46:07 -07:00
PatR ba6c2c1f9f VMS updates from KevinS (1 of 2: core)
His changes add file_exists() to sys/vms/vmsfiles.c, which might be
needed in the future but is not useful here.  Checking for 'gbd' and
'grep' for PANICTRACE support (which I had working on Alpha--and
ought to work on VAX, no idea about IA64--before losing access to vms)
is pointless since neither is used.

src/files.c
  SYSCF support, parse_config_line():
    #if VMS, ignore GDBPATH and GREPPATH if present in sysconf;

  SYSCF support, assure_syscf_file():
    #if VMS, force open()'s optional third argument since the macro
    which redirects open to vms_open requires it.

src/sp_lev.c
  selection_do_randline():
    use configuration-specified 'Rand()' rather than raw 'rand()'.
2015-09-08 16:12:27 -07:00
PatR 96f9997164 unicorn horn vs deafness
Implement the suggestion that applying a non-cursed unicorn horn can
cure deafness like other similar troubles.  Also, applying a cursed one
can cause deafness, although I made the chance be half of what it is
for the other troubles since they tend to be more significant.

This is entry #2 on the bugzilla list, but I haven't figured out how to
update that yet.
2015-08-20 18:31:12 -07:00
PatR 791c41e6b4 branch traversal via W quest artifact
Require the hero to pass the next_to_u() check when using the Eye of the
Aethiopica to portal to another dungeon branch.  Even though the reported
exploit of having a steed which is carrying the Amulet bring it along had
already been prevented, this changes the temporary portal behavior to be
like level teleport.  A steed carrying the Amulet or a non-adjacent pet
on a cursed leash will inhibit the attempted change of location.
2015-08-14 19:18:12 -07:00
PatR a5d450898d couple of tribute typos 2015-08-14 19:06:31 -07:00
PatR 71d0e83e97 tribute: Feet of Clay 2015-08-04 19:55:02 -07:00
PatR b3db52abc2 fix up Guidebook.mn's preface
Make the preface have an unnumbered header and force a new paragraph
  for its text;
remove the unterminated switch to bold font;
change "Terry Pratchett" from bold to italics to match Guidebook.tex's
  setting.
2015-08-04 17:41:54 -07:00
PatR 35cabe53bf wear/remove commands, P & R vs W & T
Allow 'P' and 'R' commands to accept armor and wear/take-off the chosen
item, and 'W' and 'T' commands to accept accessories and put-on/remove
the item.  The which-object prompt only lists the type(s) of items that
traditionally go with each command, as does an inventory menu if the
user picks '?', but items of the alternate type(s) can be chosen, by
unshown letter or by the inventory menu given for '*'.

There shouldn't be much difference if you continue picking items that
go with the original commands, although you will somestimes get
"which object? [*]" when the only choices are for alternate command.
And you won't see the all-four-accessories-are-already-worn message
for 'P' unless you also have something worn in all seven armor slots.

The Guidebook.mn changes have been tested (that's how/why I noticed
the preface glitch) but the corresponding Guidebook.tex ones haven't.
2015-08-03 18:38:38 -07:00
PatR 5e909d3b44 obj bypass: move vs turn
Reported by ais; clearing object bypass bits once per turn isn't often
enough.  Clear them after the hero moves (which might be more than once
in a turn) and before each monster moves (ditto) and after last monster
moves.  This might not be optimal but that shouldn't matter since it's
usually a no-op.
2015-08-02 01:54:51 -07:00
PatR 590aed1d25 tribute: Raising Steam
Plus a couple miscellaneous typo fixes.
2015-07-26 19:43:29 -07:00
PatR 2fd01af153 tribute typos 2015-07-26 17:41:29 -07:00
PatR b8e35cac69 tribute: Maskerade 2015-07-25 20:32:12 -07:00
PatR 9034e2a7e5 W_WEAPON, W_ACCESSORY
Add macros W_WEAPON and W_ACCESSORY, similar to existing W_ARMOR, bitmask
of all the relevant worn bits.  Just for code readability; there should
be no change in behavior.

Also, reformat the "ugly checks" portion of getobj().  Slightly better
readability and fewer continuation lines, but only a modest improvement.
2015-07-25 19:19:58 -07:00
PatR 872c8e292c tribute: Interesting Times
I have several psssages for Maskerade too, but after the time and effort
spent fixing up the ones already present for that book, they'll have to
wait until some other occasion.
2015-07-18 19:36:51 -07:00
PatR 4ebe3978b6 tribute: Soul Music 2015-07-17 02:11:20 -07:00
PatR 2b2ee0fbab formatting fixup (1 of 2)
Replace instances of strings split across lines which rely on C89/C90
implicit concatenation of string literals to splice them together
with single strings that are outdented relative to the code that uses
them.  It's uglier but it won't break compile for pre-ANSI compilers.

This covers many files in src/ that only have one or two such split
strings.  There are several more files which have three or more.  Those
will eventually be '(2 of 2)'.

Noticed along the way:  the fake mail message/subject
  Report bugs to devteam@nethack.org.
wasn't using its format string of "Report bugs to %s.", so would have
just shown our email address.  Doesn't anybody enable fake mail anymore?

I modified that format to enclose the address within angle brackets and
made a similar change for the 'contact' choice of the '?' command.
2015-07-12 19:35:06 -07:00
PatR 3caa4e2adb quest message summaries: knight and monk
Six roles down, seven to go....
2015-07-10 01:08:45 -07:00
PatR 72303206fc questpgr: plural neuter pronoun
%o[hij] relied on makesingular() converting "the Eyes of the Overworld"
into "the Eye of the Overworld" to recognize when it should use
they/them/their instead of it/it/its, but makesingular() was changed to
keep "eyes" intract instead of stripping the 's'.  So qtext_pronoun()
needs to check for "Eyes" itself.
2015-07-10 01:00:07 -07:00
PatR e571b18985 healer quest messsage summaries
Add summary lines for the deliver-by-window messages of the Healer
quest.  Also, replace a bunch of hard-coded pronouns for leader,
nemesis, and in one case, patron deity in the Healer messages plus
the three roles which precede it (Arc, Bar, Cav).
2015-07-08 02:19:08 -07:00
PatR 7684076e09 tribute: Men at Arms
The breakfast+coffee+doughnut one is by the far the longest we've had,
but I decided not to try trimming any of it out.  It was at the start
of a 10 page stretch that has six good passages, but I've only included
three of them.

I've got passages for two more books queued up, but transcribing and
proofreading is a chore....
2015-07-07 02:23:27 -07:00
PatR 63736ba33b '/' enhancement
Add new entries to the menu used for the '/' command:  describe nearby
monsters, describe all shown monsters, describe nearby objects, and
describe all shown objects.  It makes a text window listing monsters--
or objects--currently displayed on the map, showing lines of
X  r,c  monster-or-object description
where 'X' is symbol (monster or object class letter for tty), 'r,c' is
row and column separated by comma, and description is similar to what
using '/y' or ';' manually would provide (how-seen info is omitted
when listing monsters).

Originally intended for blind players using screen readers to describe
what is displayed, but will probably get used by other players too.

The map doesn't use a separate set of glyphs for objects which are the
tops of piles, so the information that there are additional objects
beneath the ones shown isn't available to '/' and ';'.  That feels like
a bug to me....
2015-07-06 19:07:26 -07:00
PatR fe09f7156d vampshifter messages
If you've just received the "dead bat revives as a vampire" message,
suppress the rather obscure "Maybe not..." message given when an unseen
creature gets life-saved since it ends up being out of sequence.  You
could get them both when the death/revival was sensed via telepathy
without being in sight.

Also, some formatting cleanup and a couple miscellaneous code tweaks.
2015-07-06 18:24:13 -07:00
PatR c64036c97b \#overview quest feedback
Implement the requested feature to have an automatic annotation on the
dungeon level with the quest entry portal where you sense the leader
summoning you.  It stays even after entering the portal (which results
in another automatic annotation of "portal to quest"), up until you
return to that level after having completed the quest.

Add a second one for the quest home level once the leader has given
you the go ahead to start the quest.  After completing the quest that
one remains but its wording is changed.

This ought to haved incremented EDITLEVEL but I decided to risk leaving
current save files viable.  That should work ok for anyone who isn't
overriding the default definition of Bitfield(), although odd behavior
could conceivably occur.  New games have nothing to worry about.
2015-07-04 20:06:31 -07:00
PatR 60de579757 another do.c formatting bit 2015-07-04 17:49:47 -07:00
PatR b1d8ce0993 do.c formatting
Fix a couple of instances of a mis-indented block comment which happens
to be immediately preceded by an end-of-line comment.  Change a couple of
|  if (condition)
|    something;
|  else {
|    other_stuff;
|  }
to have braces around the 'then' part.  Remove some gratuitous 'register'
declarations.
2015-07-04 17:07:41 -07:00
PatR 8f758cce25 boot weights
Make both pairs of iron boots weigh the same (kicking boots become
heavier).  Make boots of water walking weigh the same as levitation
and elven boots (slightly lighter; 3/4 as much as speed, fumbling,
and mundane high boots).
2015-07-04 16:28:08 -07:00
PatR e832da49ec epitaph punctuation
Clean up some of the epitaphs.  Mostly to always use two spaces when
separating sentences.

A lot of them have terminating punctuation, and a lot of them don't.
I mostly left those alone; should they be made consistent?
2015-07-02 18:58:01 -07:00
PatR 60e974e9f1 reformat objects.c
Manually reformat objects.c so that it's a bit easier to work with,
prior to possibly modifying it.  I wrote objects[] and obj_descr[].*
to files before and after and they were byte-for-byte identical, so
the revised objects.c hasn't introduced any changes.  It was done
from scratch rather than reverting to the pre-clang-format edition.

There was nothing particularly wrong with the uniform spacing
produced by the automated reformat, but organizing things in columns
and/or controlling where the line splits occur make changes and
comparisons easier.

artilist.h and monst.c should probably be redone too, but I don't
think I going to get around to tackling them.
2015-06-18 19:07:43 -07:00
PatR da1ae4a7da Make #tip at a location which has multiple containers honor menustyle
rather than always use a menu.  Only affects menustyle:traditional and
can be overridden at the time by using the 'm' prefix before the #tip
command.

When using the menu, add an explicit pick-from-inventory choice.  The
behavior there stays the same:  ask about inventory if no floor container
is chosen.
2015-06-16 19:23:43 -07:00
PatR e676663a64 tribute bits
Fix a couple of transcription typos and change the abbreviation of page
from 'pg.' to 'p.' since pg looks like it could refer to passage or
paragraph.
2015-06-16 16:35:54 -07:00
PatR f6e46d286d another recent bit of lint 2015-06-16 02:42:17 -07:00
PatR 1547e676f3 finish implementing pmatchregex
I started out cleaning up a bit of lint in the recent run-time options
handling and discovered that pmatchregex wasn't finished.  Finish it and
also deal with the version lint.  Argument declarations for function
definitions in pmatchregex.c have been switched to K&R style.  (The ones
in posixregex.c have been left in ANSI style.)

There wasn't any build rule for pmatchregex.o; now there is (for Unix).
posixregex.o is still the default.

There isn't any build rule for cppregex.o (again, for Unix); the change
to cppregex.cpp is untested.
2015-06-16 02:29:22 -07:00
PatR 8848c8d7ae tribute: Lords and Ladies
It's a lot of passages, even when leaving out ones about Cresote and
King Midas (or whatever name his Discworld analog has), Nanny Ogg's cat,
Ridcully's custom made wizard hat, and the mention of a law which
requires that bystanders be warned before commencing to play folk music.
2015-06-15 18:16:03 -07:00
PatR 710a8fb0e2 rising from the dead during panic
Prevent rising from the dead as a giant ant if the game panics during
initialization.
2015-06-15 15:47:47 -07:00
PatR 29f9a8a33d #overview, level difficulty
Three fixes, the first leading to the need to fix the second, and that
fix making dealing with the third be straightforward.

First, make the furthest level reached in any given branch be considered
interesting by #overview, even if no interesting features have been
encountered.  This will result in listing Gnomish Mines and their first
level when someone goes down the stairs and immediately back up.  It will
also produce a reminder of how far you've been--in each branch--after
retreating for any reason, without the need to manually add an annotation.

Second, #overview was suppressing the range of level numbers for Sokoban
because the author realized that the values were wrong.  The record of
the furthest level reached was incorrect for builds-up branches, always
sticking with the deepest level even though it was the entrance.  The
overview patch neglected to do the same suppression for Vlad's Tower and
the level range ("36 to 38" or similar) there was wrong.  This fixes the
furthest level reached problem and also fixes #overview's level range
handling for builds-up branches.

Third and last, a long-standing issue which I don't think has ever been
formally reported:  the level difficulty calculation used for monster
creation treated the upper (harder to get to) levels of builds-up branches
as if they were easier since they're closer to the surface as the gopher
burrows.  So sokoban generated easier monsters on its final level than on
the ones leading up to that.  Make depth for difficulty purposes account
for descent to the entrance and then ascent to the level of interest.

There was a distressing amount of trial and error involved.  The dungeon
layout structures are not exactly easy to work with, and I never managed
to get builds_up() based on branch data to work correctly.  Basing it on
dungeon data works as intended provided the branch has more than one
level, but it will yield incorrect result if we ever add a single-level
branch reached via stairs up rather than stairs down.
2015-06-14 18:14:14 -07:00
PatR 0bf3231f29 role selection: priest/priestess' prompt
Change "Shall I pick your priest/priestess' race, gender, ..." prompt
to "... priest/priestess's ...".

Unfortunately that makes it long enough to push the cursor onto the
next line for basic 80 column display.  If caveman/cavewoman's wasn't
already longer I think I would have left the clumsier phrasing/spelling.
2015-06-11 18:47:57 -07:00
PatR af54125c22 characteristics disclosure
Change end of game disclosure's display for strength, dexterity, &c to
always show the maximum possible value instead of only when the final
value was less than maximum.  For both end of game and ^X, change the
description from "limit" to "innate limit" if the current value exceeds
limit due to worn items (gauntlets of power, +N ring of adornment, &c).
2015-06-11 18:19:09 -07:00
PatR 12c013ee28 more menustyle
Make the list of menustyle values in the game match their order in the
revised documentation:  traditional, combination, full, partial.
2015-06-11 14:09:17 -07:00
PatR 9bf715c815 menustyle documentation
Reorder the description of the values for the menustyle option, swapping
'full' and 'partial' since 'full' is closer in operation to 'combination'.
2015-06-11 13:35:41 -07:00
PatR c9013bdc6a tribute passage 'summary'
When reading a passage from a tribute novel, put the final attribution
line "[$TITLE, by Terry Pratchett]" into message history, comparable to
the summary line for deliver-by-window quest messages.
2015-06-10 16:23:19 -07:00
PatR 1592cb3d10 tribute: The Last Hero
Flesh out _The_Last_Hero_.  Due to its publishing history (no ordinary
paperback, some lists of "other books by this author" miscategorize it
as being co-written by the illustrator) it's most likely not as widely
read as the other Discworld books.
2015-06-10 00:54:07 -07:00
PatR 4453ecac64 lookat again
Remove second 'alt_i' initialization, which was first in implementation.
Superseded by the preceding line, which came later.  Works either way,
but the conditional initalization avoids the two extra loop iterations
when they're not useful.
2015-06-05 23:37:02 -07:00
PatR 7218f2bfbd lookat issues for unknown/solid rock/dark room
Fix two things with the ';' and '/' commands, both for looking at blank
space.  The list of possibilies included "a dark part of a room or the
dark part of a room" even though the code involved goes out of its way
to avoid redundant clauses.  S_stone let dark part be prefixed by 'a',
S_room and S_darkroom forced it to be 'the' which is better phrasing
but outsmarted the redundancy check.  Make S_stone's use of "dark part
of a room" force 'the' too.

That's trivial; this is more complicated:  the new maze variations
exposed/aggravated an issue that's been there all along.  In a non-
WALLIFIED maze, doing look-at on the solid stone in-place-of-wall
next to you reported "dark part of a room" which is clearly wrong when
you can tell it's not a room.  (The same thing happens in any ordinary
corridor, but players rarely try to identify blank space next to them
it that circumstance so it hasn't mattered very much.)  This change
results in look-at listing "unexplored" and "stone" as additional
possibilities when looking at blank spots.  Final description will be
"unexplored" instead of dark room if you haven't seen the spot, "stone"
if you have and that's what it is, or "dark part of a room" otherwise.
2015-06-05 20:19:18 -07:00
PatR c890269947 remove use of __FUNCTION__
The special level loader has been using __FUNCTION__ in error messages
for a few months now, but that is a gcc extension (evidently picked up
by other compilers since only Borland had an issue so far).  The
standard way to do the same thing is with __func__, but that's C99 so
we should avoid it.  (__FUNCTION__ came earlier; gcc supports both.)

This switches to convential C code to achieve the same effect, using
the name 'nhFunc' rather than __FUNCTION__:
  void foo()
  {
    static const char nhFunc[] = "foo";
    ... code that might report problem in nhFunc ...
    return;
  }
This has only been added to the functions which actually reference it,
not a blanket intrusion into every routine.  In special level loader's
case, the reference is hidden in the opvar_free() macro which is used
quite a lot.

At first I used a macro:
  void foo()
  {
  #define nhFunc "foo"
    ... code that might report problem in nhFunc ...
    return;
  #undef nhFunc
  }
but using an actual variable avoids duplicate copies of the function
name string when used more than once inside a given function, and it
can't accidentally carry over into the next function due to missing or
misspelled #undef.

If we someday switch alloc() to give more specific information than
__FILE__, the macro variation would be better since the function name
won't be used most of the time (ie, when MONITOR_HEAP isn't defined).
2015-06-05 18:18:19 -07:00
PatR def2549592 shapeshifting on rogue level
Limit vampire shapeshifting on rogue level to vampire bats (only
choice represented by uppercase letter) and have other shapeshifting
try for uppercase.  The latter isn't rigorous because shapeshifters
(chameleon=':', doppelganger='@', sandestin='&') aren't uppercase
themselves, so won't be created there under ordinary circumstances.
It applies to the "summon nasties" monster spell and post-invocation/
post-Wizard's-death harassment effect too.
2015-06-04 15:31:25 -07:00
PatR 64e0c99b62 enlightenment for unarmored, also blindness
Augment the existing enlightenment feedback for blindness:  "innately"
blind if poly'd into something without eyes, "permanently" blind if
using the blind-from-birth option, "deliberately" blind if blindness
is  solely due to a blindfold, or "temporarily" blind otherwise.

Add status of "not wearing any armor" when applicable, with slightly
different phrasing if it's due to adhering the OPTIONS:nudist conduct.
2015-06-02 17:39:19 -07:00
PatR a1aebc336c blind-from-birth fix
The Blindfolded_only macro didn't track u.uroleplay.blind so would
give a false positive if wearing a blindfold, not able to see due to
the blind option, and not afflicted with any other blindness factors.
Dipping a worn blindfold into holy or unholy water is supposed to
reveal a glow if that blindfold is the only reason for blindness but
the glow was described even when blind-from-birth.

There's no feedback at all when the glow isn't seen.  I'm punting on
that one.  (This change didn't introduce that, just added one extra
situation where it happens.)
2015-06-02 17:30:16 -07:00
PatR ad7310bec6 breaking blind-from-birth conduct
OPTIONS:blind starts the hero off blind, but putting on the Eyes of the
Overworld confers sight.  Make that break the blind-from-birth conduct.

Sight persists after removing the Eyes even though they aren't intended
to cure anything.  It doesn't make sense to restore the blind-from-birth
flag when taking the Eyes off, but we may want to add another flag, or
make u.uroleplay.blind into a bit mask that can track both can't-see-now
for play and could-never-see for conduct.  (Actually, u.uroleplay.blind
should track only the conduct, and starting the game with it enabled
should set one of the extra bits in u.uprops[BLINDED].intrinsic.  The
Eyes already override that, and taking them off would restore blindness
since the bit would still be set.  As a bonus, the expression in the
macro 'Blind' could be simplified.)
2015-06-02 16:57:42 -07:00
PatR f0904157c5 tty role selection when filter by options
Honor things like OPTIONS:role=!tourist and NETHACKOPTIONS='race=!orc'
when performing interactive role selection.  I don't think it was
completely correct when players let the program choose, but it must
have been close enough because we haven't gotten any complaints.
The post-3.4.3 interactive selection was ignoring options-base filtering
entirely and did get complaints for the pre-beta.

Role selection has a ton of code which bloats the program without doing
anything useful for actual game play.  It ought to be split off into a
separate front end.
2015-06-01 18:18:47 -07:00
PatR 92ec573fbb mondata.c formatting cleanup, ancient AIX PS/2 bug
When looking to see whether the monsndx() panic could provide any more
useful information [if a pointer that's supposed to point into the
mons[] array doesn't, I don't think that there's a whole lot of other
information available aside from whether it is null or not, and that's
implicitly provided already], I went through the whole file cleaning up
the formatting and making sure every routine was preceded by a short
(usually one line) comment.

There were a few bits of code reorganization.  I changed little_to_big
to have a single point of return.  The 25 year old workaround for a
compiler bug on a defunct platform may or may not still be applicable;
I took that out.  If we get segfault reports for AIX on PS/2, this is
the first place to look.  (big_to_little is nearly identical and didn't
have the same workaround.  Not needed, or not called often enough for
any AIX PS/2 user to be affected?)
2015-05-31 17:18:06 -07:00
PatR 3a5304c49e last? Sting
If Sting is glowing when blindness gets toggled, give a new "glowing"
message.

So instead of
  Sting glows blue! [...] You can't see! [...] Sting stops quivering.
if you're still blind when the last orc goes away, or
  Sting quivers slightly. [...] You can see again. [...] Sting stops
  glowing.
if you were blind when the first orc arrived, now you'll get an
intermediate message between the second and third ones.  'Sting is
quivering' for the first case, 'Sting is glowing' for the second.
No matter how many times blindness toggles back and forth, the final
"stops glowing" or "stops quivering" will be consistent with the most
recent "is glowing" or "is quivering".
2015-05-31 01:24:19 -07:00
PatR a70599b0cd Sting again
When formatting uwep, verify that warning comes from wielded weapon
before appending "(glowing <color>)".
2015-05-31 00:44:40 -07:00
PatR 0171345aad more Sting,&c
Add "(glowing light blue)" to the formatted object description when
Sting or Orcrist is glowing due to presence of orcs or "(glowing red)"
if Grimtooth is glowing due to elves.  Use "(glowing)" if blind;
assumes that some aspect of the glow (perhaps warmth or vibration) can
be noticed via touch.

Make enlightenment's "you are warned about <monster class> because of
<artifact>" catch up with Orcrist and Grimtooth.  It was attributing
Orcrist's warning against orcs to Sting, and Grimtooth's warning was
against "something" rather than elves.

The glow color is now a new field in artilist[], so the biggest part
of this patch is adding an extra value to each artifact's definition.
2015-05-30 22:41:30 -07:00
PatR 24b4872e2f get_cost_from_price
I couldn't figure out why walking over a container in a shop might
give the wrong price; the code looks correct.  But I've reorganized
get_cost_from_price to perform the cheapest tests first.  The u.ushops
check should probably be done in doname to avoid calling this routine
at all 99.99% of the time.
2015-05-30 18:22:14 -07:00
PatR da64f26844 disoriented teleport attempt
Reported for pre-beta, getting "you feel disoriented" when attempting
to teleport within a level while carrying the Amulet, you still ended
up teleporting.  Wizard mode allows the disorientation to be overridden
but the logic was wrong.  It worked as intended when in wizard mode but
unintentionally always overrode disorientation when not in that mode.
2015-05-30 12:30:54 -07:00
PatR bd968776a9 menucolors parsing
Revise the menucolor parsing (color and attribute portion, not the
regexp part) to switch to the string matching used for wishing in
order to allow space in the "light <foo>" entries instead of forcing
the two words to be run together.  Having them be run together still
works, as does use of dash or underscore to separate the two words.
So the canonical form for light blue is now "light blue" instead of
"lightblue", but all of "light blue", "lightblue", "light-blue", and
"light_blue" match it.  (So do weird things like "--li-gh_-_tbl ue _"
but I won't lose any sleep over that.)

Almost all of this if formatting; mostly blank line after declarations
but also there was new stuff that didn't match the recent reformat.
2015-05-30 01:25:46 -07:00
PatR 37763d030e add warning glow for Orcrist & Grimtooth
Make Orcrist glow light blue when orcs are present, just like Sting.
(Sting supposedly glowed because it was made by the elves of Gondolin
rather than any particular attribute built into it, and Orcrist was
made there too.  I think it also glowed in the Hobbit; that was how
Bilbo recognized what the situation was when he first saw Sting glow.
Maybe it was the other sword rather than Orcrist, but they were treated
as being functionally equivalent.)

Also make Grimtooth glow red when elves are present.  That's from thin
air, to give it some novelty.  Unlike Sting, whose double-damage bonus
is restricted to orc targets, Grimtooth's weak 1d6 bonus still applies
to all targets.
2015-05-29 17:42:15 -07:00
PatR 77373baadf 'Du' bug with non-empty containers
ckunpaid() had the same coding error as allow_category().  A hero-owned
container holding hero-owned contents followed in invent an any unpaid
object was mis-classified unpaid.
2015-05-29 15:46:13 -07:00
PatR 95aab36c4c Adjust the getpos() hint for naming a floor object if the hero happens
to polymorphed into something which is hiding under an object.

Also, make the attempt to name a floor object while hallucinating give
a more interesting result.
2015-05-29 15:14:38 -07:00
PatR 7d74a25a14 using #name to call a floor object
Implement Boudewijn's suggestion that #name be extended to allow naming
something of the floor.  I'm sure he wants this so that he can avoid
picking up gray stones, but it's something I started to implement years
ago (probably at an earlier suggestion from him...) and then forgot all
about.

This changes the #name menu to be
   m - a monster
   i - a particular object in inventory
   o - the type of an object in inventory
   f - the type of an object upon the floor
   d - the type of an object on discoveries list
   a - record an annotation for the current level
   What do you want to name?
with the i and o choices omitted when inventory is empty.  If the
'lootabc' option is set it will use a through f instead, but then the
last three entries change letters when inventory is empty.  'y' and 'n'
are still accelerators (effectively hidden choices) for the i and o
entries, corresponding to the answers for the 3.4.3 and earlier "name
an individual object?" prompt.

The floor choice asks you to pick a location.  If you pick yourself,
then the top object of the pile underneath you is targetted.  Otherwise,
the target must be an object glyph, and the object must have its dknown
bit set, so have previously been seen up close or revealed via blessed
potion of object detection.  To make it be more useful, targetting an
object on an adjacent square will set the dknown bit.  (Just the top
object if there is a pile there.)  There's no cockatrice corpse touch
check since you aren't actually touching anything, just looking.

The setting of dknown bit for an adjacent object has been extended to
the '/' and ';' commands for examining things on the screen as well.
It's only done for adjacent spots you actively select, not all 8 spots
around you.
2015-05-29 02:07:50 -07:00
PatR 29617ada12 Sting's glow while blind
Give an alternate message if Sting starts or stops glowing while the
hero can't see.  It probably ought to give an immediate message when
blindness toggles but that looks like it could get messy.

Having an 'o' die or migrate off level should probably also redo the
Sting message immediately, otherwise we see things like:
  The little dog kills the goblin.
  The little dog eats a goblin corpse.
  Sting stops glowing.
(There could be lots of additional intervening messages depending on
other monster activity at the time.)  Calling see_monsters() in the
relevant places--probably m_detach() and migrate_to_level()--would
address this but won't do because that could result in hallucinating
monsters changing appearance mid-turn.
2015-05-28 18:36:51 -07:00
PatR 92a8ec1796 MSGTYPE lint
Fix a couple of bits of lint in options.c, plus do some formatting
cleanup (in the vicinity only, not the whole file).
2015-05-28 02:36:00 -07:00
PatR 7e05f03bc4 fix [pre-]beta 'Du' bug with containers in shops
'Du' in a shop was listing hero-owned containers that didn't contain
any unpaid items.  At least one unpaid item must be carried; bug
manifested iff one or more unpaid items followed the container in
the invent list.

Recently revised allow_category() was using count_unpaid() for
container contents incorrectly, inadvertently checking the rest of
inventory after the container in addition to its contents.
2015-05-28 02:22:48 -07:00
PatR ad3af4efb2 hacklib.c formatting
hacklib.c took a beating in the reformatting, so clean it up.
A tweak to the anti-predictability hack in setrandom() is the only
change in the actual code.
2015-05-27 03:49:09 -07:00
PatR eeb69bfe09 omit_buc tweak
gcc complained about mixing && with || without parantheses.  After
scratching my head a bit, I think this change yields the intended
result.

'omit_buc' is a bad option name.  It's cryptic and it doesn't even
describe the function.  At a minimum it ought to be changed to
'omit_uncursed' to accurately describe what it does.
'implicit_uncursed' or 'explicit_uncursed' (with opposite boolean
value) would be even more precise but probably not any clearer.
2015-05-27 03:35:28 -07:00
PatR 5f02b15a75 mimics mimicking strange objects
The code that intended to have mimics occasionally take on the form
of "strange object" always produced downstairs instead because
S_MIMIC_DEF is greater than MAXOCLASSES.

This problem was present in 3.4.3.  I didn't try to go back to see
how long it's been there, but strange objects used to occur once
upon a time.  Either nobody noticed that they'd gone away or there's
an alternate way to produce them.
2015-05-26 17:16:30 -07:00
PatR fca75c5766 questpgr.c's in_line[], out_line[]
Replace static in_line[] and out_line[] with local variables that are
released when the quest pager code returns to caller.  QTEXT_IN_SIZ
was already removed from makedefs; now QTEXT_OUTSIZ is removed from
nethack.  Use regular BUFSZ for them instead of trying to maintain a
separate size for quest text.
2015-05-25 15:49:44 -07:00
PatR dfd9586ab4 wishing bit - royal jelly 2015-05-25 14:54:48 -07:00
PatR 911745a5ea trickier lint cleanup
Suppress some mostly longstanding "unused parameter" warnings where
the usage was generally conditional.

restlevl() had a conditional closing brace that confused the recent
reformat, resulting in some code inside a funciton ending up flush
against the left border (first column, that is, as if outside of the
function).
2015-05-24 23:49:05 -07:00
PatR 49c997c22c makedefs lint
makedefs.c: In function 'fgetline':
makedefs.c:2630: warning: comparison between signed and unsigned
makedefs.c: At top level:
makedefs.c:2638: warning: ISO C does not allow extra ';' outside of a function

fgetline() makes my recent check for quest line truncation become
redundant, so strip that out.  I haven't taken the corresponding
macro out of qtext.h though.

[I didn't see any patch introducing 'fgetline'.  Was it hidden as
part of some big merge?]
2015-05-24 23:26:35 -07:00
PatR 5f0a55f2cd makedefs -q fix
Make the input buffer for quest messages bigger so that the expanded
header line from nhsub won't be too long.  Also, makedefs will notice
and report too long lines ('makedefs -q' only) and sanely proceed with
the rest of the file instead of treating the excess part of a long
line as a separate line.
2015-05-23 23:11:41 -07:00
PatR 7bc1a6e7f3 quest summary messages for B and C
Add '%E [summary line]' to '%Cc' messages for Barbarian and Caveman.
Archeologist was done several years ago; the other roles still need
them.  Creating them is fairly tedious, but DEBUGFILES=questpgr.c
allows them all to be checked on turn 1 via ^P, a great improvement
since that first set.
2015-05-23 01:10:56 -07:00
PatR ae78865da8 msghistory bandage
Have genl_putmsghistory() pass the message to pline() for the !restoring
case, so that quest summary lines are delivered as ordinary messages.
No effect on tty or win32, which have their own putmsghistory routines.
But for X11, which has a multi-line message window but no save/restore
implementation for its contents, this makes the quest summary lines
actually show up somewhere.  (I looked at maybe implementing
X11_getmsghistory() and X11_putmsghistory() but don't have the energy to
tackle it.)

Other interfaces which lack their own history save/restore will see the
quest summary messages too.  Presumeably they'll all have multi-line
history windows so the extra line won't be displacing the most recent
message.  If not, they'll essentially get the long quest messages twice,
once in full via popup window, then the one-line summary via pline.
2015-05-23 00:59:18 -07:00
PatR 905c21dbe8 qtdump() overhaul
When dumping quest messages at startup via DEBUGFILES=questpgr.c,
give a single message for each one, instead of a pline showing the
message number and delivery protocol followed by a popup message
window containing the text.  This puts the number and protocol info
at the start/top of the popup window, bypassing the pline (and the
extra --More-- given for tty).
2015-05-23 00:50:34 -07:00
PatR 168572fd0d #terrain update
Make the post-3.4.3 '#terrain' command be more versatile by allowing the
player to choose between floor-only, floor+traps, and floor+traps+objects
so that it is possible to view known traps covered by objects or monsters
and remembered objects covered by monsters.  The extra explore mode and
wizard mode choices aren't affected.
2015-05-21 16:53:46 -07:00
PatR f0370f5f86 you feel {a,an unexpected} draft
Move the message given when a monster digs through a closed door
or a secret corridor into a separate routine.  In theory, nethack
should determine whether there is a path between the new opening
and the hero's location in order to decide whether a draft can
be felt.  (I don't think anyone is likely to implement that--I'm
certainly not.  Checking whether the hero is in a room with no
breaches in its walls could at least catch being inside a vault.)

While at it, add some USA-centric puns about feeling the prospect
of imminent military conscription instead of air current if it
happens while hallucinating.
2015-05-18 18:25:44 -07:00
PatR 9e0e1ac5d1 remove accidentally added util/lev_main.i 2015-05-15 23:08:15 -07:00
PatR fabf9cd901 VA_DECL/VA_END usage
Make the variadic functions look more like ordinary code rather than
have the function opening brace be hidden inside the VA_DECL() macro.
That brace is still there, but VA_DECL() now needs to be followed by
a visible brace (which introduces a nested block rather than the
start of the funciton).  VA_END() now provides a hidden closing brace
to end the nested block, and the existing closing brace still matches
the one in VA_DECL().

Sample usage:
void foo VA_DECL(int, arg)  --macro expansion has a hidden opening brace
{  --new, explicit opening brace (actually introduces a nested block)
  VA_START(bar);
  ...code for foo...
  VA_END();  --expansion now provides a closing brace for the nested block
}  --existing closing brace, still pairs with the hidden one in VA_DECL()

This should help if/when another round of reformatting ever takes place,
and also with editors or other tools that do brace/bracket/parenthesis
matching.

I had forgotten that there were variadic functions in sys/* and ended
up modifying a lot more files than intended.  The majority of changes
to those just inserted a new '{' line so that revised VA_END()'s '}'
won't introduce a syntax error.  A couple of them needed VA_END() moved
so that local variables wouldn't go out of scope too soon.  Only the
Unix ones have been tested.
2015-05-15 17:45:21 -07:00
PatR dd62a6831f fix mdig_tunnel impossibility
Reported by the keymasher:  "stone at (48,8) is undiggable".  Bigroom 4
has a tree at that spot and the whole level is flagged as undiggable.
Undiggable trees were supported on arboreal levels (where their terrain
type is STONE rather than TREE), but not elsewhere.  Monster movement
uses IS_ROCK(), which is true for TREEs, but may_dig() uses IS_STWALL(),
which is false for TREEs so doesn't consider the location as being of
interest and fails to disallow digging.  But mdig_tunnel() bypasses
may_dig() and tests the NONDIGGABLE bit directly, disallowing digging.
(If this sounds confusing, it's a stroll in the park compared to the
code itself.  Apologies for the mixed metaphore.)

Digging away a secret corridor could leave rocks, which doesn't make
a whole lot of sense.  Now a monster's dig attempt will reveal the
location as a corridor instead.

This also moves an assignment out of a macro invocation where it was
inviting trouble if that macro gets modified.  And reorganizes an 'if'
to put cheaper tests sooner.
2015-05-13 17:54:26 -07:00
PatR beaab1b974 Make the #terrain command work as intended if used while the map is
suppressed when the hero is engulfed.  No fixes entry.
2015-05-12 16:07:18 -07:00