Commit Graph

134 Commits

Author SHA1 Message Date
nhmall
53e72acb98 correct sz error when gang parameter is null 2018-11-26 10:59:57 -05:00
PatR
5226de8c74 warning fixups
Non-const string literals.
2018-11-25 14:31:20 -08:00
nhmall
ccd6f1cf22 more orctown-related follow-up
Under some circumstances, when all the marauding orcs belonging to the
horde operating within the gnomish mines had been provided with their
spoils and placed appropriately, there could still be some pillaged stuff
left-over on the migrating obj chain. Orcs created by regular monster
generation elsewhere would then be susceptable to receiving that stuff
until it was used up. That part is fine, except that the orcs were then
being named as part of the same horde operating within the mines. Now
they will no longer be named as part of the Gnomish Mines horde.

Mythos: There's a good chance that these particular orcs received the
stolen goods from the Gnomish Mines horde.
2018-11-25 12:47:53 -05:00
PatR
14bef9a02d formatting cleanup src/*.c
Remove trailing spaces, and remove tabs from the files that had
trailing spaces.

Also, rndorcname() was using a random value to terminate a loop
and was recalculating a new one each iteration.
2018-10-02 16:53:22 -07:00
PatR
dbf3816cc4 do_name.c cleanup
Some formatting and several things that warrant being 'static'.
2018-09-20 16:16:58 -07:00
PatR
792eb64af5 build bits
Eliminate a few warnings:  array name used as boolean is always true,
parameter 'flags' shadows (blocks access to) global struct 'flags',
initializer discards 'const' (assigning string literal to 'char *').
Plus a couple of simplifications.
2018-09-20 14:06:17 -07:00
nhmall
9eb7830819 Gnomish Mines changes involving "Orctown" level variant
Changes to be committed:
	modified:   include/decl.h
	modified:   include/dungeon.h
	modified:   include/extern.h
	modified:   include/hack.h
	modified:   src/decl.c
	modified:   src/do_name.c
	modified:   src/dog.c
	modified:   src/dokick.c
	modified:   src/makemon.c
	modified:   src/mkmaze.c
	modified:   src/mkobj.c
	modified:   src/pager.c

This commit is an attempt to address the complaints about
the orc town variation taking away lots of stuff that is
normally available in mine town. The statement in the level
description says "A tragic accident has occurred in Frontier
Town...It has been overrun by orcs."

The changes in this commit attempt to uphold that premise,
while making things a bit more interesting and perhaps
more palatable for the player.

This update does the following in keeping with the mythos:
- While many of the orcs still remain to wander about the
  level, many of the orcs took off deeper into the mines with
  some of the stuff that they plundered. You may now be
  able to hunt some of it down.

- Adds some appearance of this particular horde of marauding
  orcs working as part of a larger collective.

- This evolves the Orc Town mine town variation into a
  a feature over multiple levels of The Gnomish Mines,
  rather than just the single-level "feature" that it was
  previously.

- You may have to work longer and a bit harder for some
  things than other mine town variations, but at least with
  these changes, there is hope that some of it may be found
  elsewhere.

Game mechanics notes (maybe spoily?)

- Add mechanism to place objects into limbo (okay, really
  place them onto the migrating_objs list for transferring
  between levels etc.) and destine them
  to become part of the monster inventory of a particular
  species. In this particular usage case, it's using the
  M2_ORC flag setting to identify the recipients.

- At present, there is no mechanism in the level compiler
  for placing objects onto the migrating objects, nor
  with more sophisticated landing logic, so a somewhat
  kludgy hard-coded fixup and supporting routines were used.
  Some day the need for that might change if additional
  capabilities move to the level compiler.

This is a NetHack-3.6.2-beta01 update. Please give it a workout.

Fixes #127
2018-09-18 18:35:13 -04:00
keni
d8c49ec9d1 Add updated copyright lines, part 1. 2018-04-25 15:00:13 -04:00
Pasi Kallinen
94ad7512a6 Compile-time option to allow some prompts remember the input
Define EDIT_GETLIN to make the tty, X11, and Qt4 windowports to
remember the input strings for wishing and annotation.
2018-03-26 23:04:53 +03:00
PatR
5dd6c05322 switch docall() to safe_qbuf()
Simplify docall() for object types.  Adds some different complexity to
a new routine so the overall simplification is rather minimal, but we
already have a routine to construct prompt buffers involving formatted
object names without allowing overflow, so use it.

tty getlin() limits the input to COLNO characters, so 80 by default.
To get potential QBUFSZ overflow, I had to increase COLNO in global.h
and rebuild from scratch.  A value greater than 127 triggers a lot of
warnings.  I didn't try 127.  126 gets one warning, involving use of
FARAWAY (defined as COLNO+2) in dogmove.c.

We should change things to limit object names to much less than 80,
but this doesn't attempt to implement that.
2018-02-23 13:07:49 -08:00
PatR
094c7f5c1b fix #6870 - clairvoyance feedback
Forwarded to the contact form from a github "issue":  in some
circumtances clairvoyance lets you move the cursor around to examine
the revealed map, and when doing so starts with "for instructions
type '?'".  When extended clairvoyance periodically kicks in, as
opposed to explicitly casting the spell, there wasn't sufficient
context to figure out what it was prompting for (unless you actually
answer '?' to get instructions).  Depending upon the most recent
message, it could seem like quite a strange prompt.  Explicitly give
a clairvoyance-specific message prior to that.

Also, the getpos() help was including suggestions for targetting
monsters that aren't appropriate when it's being used for detection.

do_name.c has had quite a bit of formatting rot slip in since 3.6.0.
This fixes up the stuff I spotted by manual inspection.
2018-02-21 22:44:15 -08:00
nhmall
0301420fcb fix reported stack corruption bug during Call
Fix an issue reported as github #74.
Some guard code was required to prevent writing past end of qbuf
via a sprintf.
2018-02-19 10:19:44 -05:00
Pasi Kallinen
c2f767e1fe Fix a warning 2017-11-06 15:28:13 +02:00
Pasi Kallinen
a552956f7a Silence some warnings 2017-08-19 13:38:38 +03:00
Pasi Kallinen
4e05de9bff Add whatis_moveskip option to change fast-moving cursor
Previously the "fast-moving" when getting a target location
was always by 8 units. If this option is on, fast-moving
will instead skip the same map glyphs. This should be much more
useful for blind players.
2017-08-06 15:41:31 +03:00
Pasi Kallinen
b13bae91dc Add way to cycle through valid locations for polearm or jump target 2017-07-31 19:10:26 +03:00
Pasi Kallinen
439028dcae Add whatis_filter option to filter eligible map locations for travel
Compound option whatis_filter, filters the eligible map locations
when getting a cursor location for targeting. Accepts 'n' (none),
'v' (map locations in view), or 'a' (map locations in the same area,
eg. room or corridor).
2017-07-31 16:58:23 +03:00
PatR
67c1325a81 tribute: The Amazing Maurice
and His Educated Rodents.  The last Discworld book with only one or
two passages to choose from when reading.
2017-06-30 02:09:56 -07:00
PatR
3512297f59 fix #H5547 - named vampire shapeshifting message
Report was about "Pet vampire" but the relevant aspect was that the
vampire had been assigned a name, not that it was tame:
You observe a Hilda where a Hilda was.

Investigating this has uncovered two other bugs, one potentially
serious.  m_monnam() overrides hallucination but seems to be getting
used to some situations where hallucination should be honored (several
instances).  Dynamically constructed format strings are including
monster or object names in the format (rather than the usual use as
arguments), so player assigned names containing percent signs could
cause havoc (a few instances).  This fixes some of the former and one
of the latter, but doesn't deal with various other cases revealed by
grep.
2017-06-03 16:05:23 -07:00
PatR
28fb985757 fix #H5486 - artifact naming vs illiterate
Attempting to name the relevant type of item with an artifact's name
(such as a runesword with "Stormbringer") fails with "your hand
slips" in order to prevent turning the item into an aritfact.  Since
that only happens when the name is valid, it indicates that the hero
is literate so violate illiterate conduct.

(Naming items in general doesn't affect [il]literacy so that player
can assign names to inventory or stash items to maintain notes.)
2017-05-22 16:02:50 -07:00
PatR
3fbcce5e87 autodescribe vs DUMPLOG
Keep getpos's autodescribe feedback out of the DUMPLOG message history.
Unfortunately it still gets put in interface-specific message history
and is liable to fill up the buffer there, forcing actual old messages
to be flushed away.
2017-04-08 19:54:18 -07:00
PatR
dd8a95eec4 fix #H5188 - getting an artifact break illiterate
To-be-3.6.1 bug, caused by a patch (of mine...) incorporated about
a week after 3.6.0 was released that was intended to be for naming
Sting or Orcist.  Any artifact creation ended up breaking illiterate
conduct whether user-assigned naming was involved or not (because
oname() is always used to apply the name, not just when do_name() is
executing).

This should be handled differently but I don't want to go through
the dozen and half or so calls to oname() to add an extra argument.
2017-03-14 05:27:45 -07:00
PatR
9f8f22ea4a more lint and formatting
Fix a C89/C90 complaint about a declaration following executable code.
The rest is formatting (of stuff I saw rather than systematic fixups).
2016-10-13 12:08:06 -07:00
Pasi Kallinen
abb4f0fab2 Allow toggling menu for any travel target list 2016-10-13 20:16:21 +03:00
Pasi Kallinen
23157c4830 Free allocated memory 2016-10-11 18:34:41 +03:00
Pasi Kallinen
fb148c0d44 Iron bars, water and lava are not interesting for travel 2016-10-06 13:33:54 +03:00
Pasi Kallinen
efd7526194 Accessibility: Pick travel/cursor targets from a menu
Adds two new configurable keys to the cursor targeting: 'A' (getpos.menu)
and 'a' (getpos.menu.cansee). First one shows a menu of all interesting
glyphs on the map, second one shows only those in sight.

Travel command also now obeys the "request menu" -prefix, showing
the menu with interesting targets in sight, and then traveling there.

Idea via the NetHack accessibility research by Alexei Pepers.
2016-10-06 13:10:13 +03:00
Pasi Kallinen
680c8a542c Add key rebinding
This is a modified version of Jason Dorje Short's key rebinding
patch, and allows also binding special keys, such as the ones
used in getloc and getpos.

One of the ways to play NetHack on nethack.alt.org is via a HTML
terminal in browser. Unfortunately this means several ctrl-key
combinations cannot be entered, because the browser intercepts
those. Similar thing applies to some international keyboard layouts
on Windows. With this patch, the user can just rebind the command
to a key that works best for them.

I've tested this on Linux TTY, X11, and Windows TTY and GUI.
2016-10-05 20:04:56 +03:00
Pasi Kallinen
ce315311f5 Show keys in travel help wrapped in single quotes 2016-09-21 19:25:25 +03:00
Pasi Kallinen
28e36b3136 Add full compass coordinate mode for screen readers 2016-09-20 18:36:06 +03:00
Pasi Kallinen
f82205c232 For travel target location, report if no known travel path
Yet another accessibility feature.  When asked for a location
to travel, and autodescribe is on, the location description
has "(no travel path)" appended, if there is no known path
to that location.
2016-08-31 22:08:15 +03:00
Pasi Kallinen
3f5116fbd4 Add more hallu liquids 2016-06-13 10:26:13 +03:00
Pasi Kallinen
3502cfcc5a Hallucinatory liquids for water, lava, and acid 2016-06-07 20:57:50 +03:00
Pasi Kallinen
a5d3d0fdb8 Make coyote names deterministic 2016-06-01 18:38:21 +03:00
PatR
7404597ac5 getpos moving to 'cmap' characters
While testing something I noticed that moving the cursor to visible '^'
by typing '^' while getpos was asking me to pick a location, it didn't
always cycle through all visible traps.  The most straightforward
culprit was after trap detection (via confused gold detection, not ^F)
had found a trap door or level teleporter in a closet that itself was
a secret corridor spot.  But it turned out to be any location that
hadn't been seen yet.  This is a substantial overhaul of the relevant
code and so far works for all the cases I've tried, but there are
bound to be cases I haven't tried yet and those may or may not work
correctly.

There's also a bunch of formatting cleanup, and some simplification of
the m/M/o/O/d/D/x/X handling.
2016-05-30 17:56:47 -07:00
Pasi Kallinen
bbe02dca2b Add rudimentary autoexplore to getloc
Pressing 'x' or 'X' will move the cursor to a possibly unexplored location.
2016-05-28 14:55:02 +03:00
Pasi Kallinen
ac8bde0f70 Some code reorg for the getloc nearest/farthest locs 2016-05-28 14:27:07 +03:00
Pasi Kallinen
3bbf12d8b5 Minor code reorg in gather locs 2016-05-28 13:52:53 +03:00
PatR
5987c62468 getpos of doors
Using 'd' to cycle through door locations is worthwhile when #terrain
is executing as well as when picking a location.
2016-05-27 16:10:03 -07:00
Pasi Kallinen
d51db5a992 Make getpos for doors also target drawbridges 2016-05-27 18:47:56 +03:00
Pasi Kallinen
962610f365 Reset dooridx too 2016-05-26 17:58:17 +03:00
Pasi Kallinen
fdc1889d0d Allow quick pick doors and doorways in getloc 2016-05-23 21:03:10 +03:00
PatR
dccc818801 autodescribe for #terrain
Requested during beta-testing however long ago:  want a way to
look at specific map locations while #terrain is showing them
without monsters and/or objects and/or traps being displayed in
the way.  The post-3.6.0 autodescribe feature for getpos() made
this pretty easy to achieve, although the lookat() aspect felt
more like trail-and-error than careful design.

Instead of putting up a --More-- prompt, ask the player to pick
a location with the cursor.  Moving the cursor gives the terse
description for every location traversed.  Actually picking a
spot just ends #terrain and goes back to normal play.
2016-05-12 18:57:10 -07:00
PatR
ea35773192 more getpos() help
Explain the what-is response types in the help provided when typing '?'
during getpos operation.
2016-01-19 02:19:33 -08:00
PatR
83a4234292 whatis_coord - rename 'getpos_coord' option
Rename the option for adding coordinates to autodescribe feedback for
the '/' and ';' commands from 'getpos_coord' to 'whatis_coord', after
the '/' command that uses it instead of after the internal routine
that implements it.  The 'whatis' name was only in dat/hh as far as I
could find, so this changes it to 'what-is' and also updates dat/help
and the Guidebook to mention the name too.

Add a 'screen' choice to the option to show coordinates as row,column
rather than x,y or compass direction(s).  Revise the /m, /M, /o, /O
operations of 'what-is' to honor the whatis_coord option (mostly; a
value of 'none' gets overridden by 'map' to force coordinates).

Also, update the description of the functionality of the '/' command
in the Guidebook.  The .mn version is tested, the .tex one isn't.
2016-01-18 19:27:53 -08:00
Pasi Kallinen
c49490dfd4 Rename getpos_coord values to "compass" and "map" 2016-01-13 12:21:27 +02:00
Pasi Kallinen
ef3ce49dd4 Make getpos monster/object coord picker deterministic
...and make it pick coordinates top-left to bottom-right.
2016-01-13 10:22:44 +02:00
PatR
5f6c0bd04a getpos autodescribe
Move the details of autodescribe out of getpos into a separate
routine.

I think 'cartesian' mode should be renamed 'compass' mode, and
'absolute' mode perhaps should be 'map' mode.  And we should have
a new 'screen' mode which shows rows,columns (1..N rather than
0..N-1).  For tty, row is line+2; message and prompting "window"
is row 1, line 0 of map is row 2.  Columns are straightforward
since column 0 of the map isn't used for map display:  column 1
of map is column 1 of screen.  Non-tty mostly shouldn't care and
might as well use the same conversion.
2016-01-12 23:10:31 -08:00
Pasi Kallinen
0ee5d8ce47 Add getpos_coord option
Allows showing the coordinate when picking a position on the
map with '/' and autodescribe is on.

This is another blind player request
2016-01-11 21:10:51 +02:00
PatR
9cfc0ac5d7 getpos() 'm','M' and 'o','O'
Always include the hero's location in the set of spots for 'm',&c to
cycle through.  This way the set will never be empty so checks for that
can be dropped, and choosing initial index becomes trivial (set to 0,
then increment to reach nearest spot of interest or decrement to reach
farthest).  Also, it makes it easier for player to see when successive
'm's,&c have been through all the interesting locations if there are
multiple monsters or objects clumped near the last one in the cycle.
2016-01-10 14:42:06 -08:00