NH4: Comma selects ground for eat/tin/sacrifice

Compared to NetHack4, the prompts for ground objects won't show the
object picking prompt again if 'n' is given for all of them, the object
class groups avoid having to deal with unexplained "+ 2" insertions in
unrelated code, and an explanation for the goto is given in a
descriptive comment.  The code is also adapted slightly to work with the
Astral Escape patch included in UnNetHack.

Slash'EM-style eating controls
Alex Smith <ais523@bham.ac.uk>
28b83ea1b49ba2b06bbb6023d06db2dfc8ade5f6

Only skip the y/n dialog for corpses on the floor when eating.
nutzy <clcasto@gmail.com>
fda33426492a2fde36a8194cd276298e1a941a47

A better fix for sacrificing corpses on the floor
nutzy <clcasto@gmail.com>
322aa799b03577209b162bc72d9c175f0128c3b7
Make more help available via '?' when targeting

This shows a help screen when pressing '?' while choosing a location,
describing the keys that work, hopefully making them more discoverable.
Only direct-link zlib to front-end in static build

It seems like there should be a way to link libnitrohack's dependencies
to nitrohack_curses automatically, or at least without repetition, but I
don't quite know how to do that.
NH4: Describe map under cursor when targeting

Describe things while moving the cursor over them in getpos
Alex Smith <ais523@bham.ac.uk>
d90a5a152948686b7979085d962de3d91a856775
Remove unused flags.null

In NetHack this was how the 'null' option was reflected in the game
(default true), with the effect of calling 'tputs("$<50>", 1, xputc)' in
the TTY interface in tty_delay_output() for its 50 ms delay.  NitroHack
no longer contains the TTY interface, so this flag field is unused.
Fix null level uses in mk_mplayer()

This bug also exists in upstream NitroHack and NetHack4.
Use correct level in mk_artifact()

This bug also exists in upstream NitroHack and NetHack4.
Use right level in m_initthrow()

This bug also exists in upstream NitroHack and NetHack4.
Pass right level to mksobj()

Without this, crashes can occur if mksobj() ever tries to use the lev
argument it's passed.  This fixes the mksobj calls in:

 * mongets()
 * mkmonmoney()
 * m_initinv()
 * mkcorpstat()
 * mk_mplayer_armor()
 * mkroll_launch()

Most of the fixes assume that objects made for monsters should be made
on the same level as that monster, which seems like a safe bet.

This bug also exists in upstream NitroHack and NetHack4.
Fix buffer overflow with long msgs sent to pline()

Without this fix, overly-long messages such as feedback from max-length
wishes, causing a buffer overflow, stack smashing, memory corruption,
etc.

This bug also exists in upstream NitroHack and NetHack4.
Fix unrestored door locked/trapped status

Oops, my bad.  This was being saved fine, just forgot to restore it too.

This is meant to go with commit cc784daa52 (NH4: Track knowledge of door
locked/trapped status).
Record player's wish input, unmangled

The wish parser may alter the player's original wish input, leading to
the history listing recording said wishes with certain parts cut off or
excluded.

This bug also exists in upstream NitroHack.
Add cornuthaum charisma bonus to calc_attr_bonus()

Cornuthaums are supposed to give +1 charisma to wizards and -1 charisma
to everybody else, but NitroHack's calc_attr_bonus() doesn't account for
this.

This bug also exists in upstream NitroHack and NetHack4.
oprops: Magical object properties (from GruntHack)

e.g. short sword of fire, bow of detonation, cloak of magic resistance
and reflection.

Properties can be found on weapons, armors, amulets and rings.
Properties can be found randomly or wished for (with restrictions).

This is a huge change, see doc/README.oprops.md for full details.
CS1436: Ensure "Elbereth" status is always updated

The duplicated init for was_on_elbereth is ugly, but there doesn't seem
to be any one function for both starting and restoring games that runs
after level is init'd, otherwise I'd have used it for the fix to the
notify_levelchange() on restore bug too.
NH4: Use more portable Unicode characters for map

 * 'black square' for open doors
 * 'plus-minus sign' for trees and dead trees
 * 'pilcrow' for fountains (easier to see than 'top-half integral')
 * don't use 'dagger' for grave
 * 'double cross' for webs
 * vertical/horizontal rule for swallowing/explosions instead of eighth
   blocks

Change the characters we use to ones that render portably
<ais523@nethack4.org>
524a57f9bb0072d35123523b3ab869816e09a480
oprops: Merge properties regardless of known-ness

... and merge the known properties correctly.

Without this fix, when several arrows of (unknown) fire miss and then
hit a monster, the ones that hit would have the fire property
identified, but not the ones that missed, and would thus not stack, even
if they were obviously originally from the same stack.

This does lead to players magically knowing the properties of a newly
found object if it stacks with an existing object with matching
properties that are known, but that's a quirk I can live with.
NH4: Fix fruit chain restoring in reverse order

Yet another source of replay warnings.  Problem spotted Sean Hunt, but
this uses an original fix since the NetHack4 fix is faulty.

Fix a number of save/replay consistency bugs
Sean Hunt <scshunt@csclub.uwaterloo.ca>
acf2e2f4f27f90ba6745bba7003d1e325c97abe4
NH4: Restore old options as intended after replay

If program_state.viewing or program_state.game_running aren't unset by
the time replay_end() is called, the nh_set_option() calls within it
won't restore the game options saved from before the replay as they
should.

Fix a number of save/replay consistency bugs
Sean Hunt <scshunt@csclub.uwaterloo.ca>
acf2e2f4f27f90ba6745bba7003d1e325c97abe4
Fix (war)horse appearing as a pony when ridden

Looks like horses and warhorses have their mnum set to pony for some
reason, which display_self() was all too happy to use.  Using monsndx()
makes them appear as they should when being ridden.

See also commit 2cc8a319e1 (level genocide treats chameleons like normal
geno), which also shows a difference between using mtmp->mnum and
monsndx(mtmp->data) for shape changers.

This bug also exists in upstream NitroHack and NetHack4.