Files
nethack/win/curses
PatR d989b36763 revamped curses status display
I've overhauled the status display for curses.  Horizontal layout
supports both 2 lines and 3 lines which can be changed dynamically
via using 'O' to set 'statuslines'.  Fields are spread out a little
more than they used to be, making it more readable--at least to me--
but the extra spaces get squeezed out when lines become too long.
If 'showexp' is on and either conditions or hunger+encumbrance go
off the right edge, experience points are suppressed (but the option
is left on, so they'll come back once there is room).

For traditional 2-line hozizontal status, if hunger+encumbrance+
conditions go off the right edge even after experience points are
knocked out, there will be a '+' in the rightmost column if there
are any conditions that are all the way off.  At present it doesn't
use the tty method of switching to abbreviated condition names to
reduce their legnth.  I'll probably tackle that eventually if no one
beats me to it.

For 3-line horizonal status, there was an older implementation (but
disabled via #if 0) with gold and score moving to the third line.
(I'm not sure how status conditions were handled.)  This one ignored
that and modified 2-line from scratch, moving alignment from line one
to line 2 and level description, time, and conditions from line 2 to
line 3.  It looks like this (view with a fixed-width font...).

Wizard the Hatamoto            St:16 Dx:15 Co:18 In:8 Wi:11 Ch:7    S:25
Lawful  $:21  HP:25(25)  Pw:6(6)  AC:4  Xp:2/21  Hungry Burdened
Dlvl:1  T:36                                     Blind Lev

Score is actually right aligned with the edge but I've deleted several
spaces to keep the line shorter here.  The status conditions line up
with the hunger slot as that shifts due to changes in gold/HP/power/AC/
experience, and conditions prefer that column even when hunger and/or
encumbrance are blank.  Howver, if the number of conditions increase to
the point where they would go off the edge, the whole list shifts left
instead of trying to stay lined up with hunger.  (It's just coincidence
that the lefthand parts of lines 2 and 3 seem to line up in this sample.
In general, they don't.)

The vertical layout has reordered most of the fields and now has a few
blank lines to separate those fields into some groups for readability.
Lines have the form of
Field-name  : Value
and when highlights apply, now they only affect the value portion.
Single digit characteristics are padded with a leading space so that
all six of them line up (for "18/xx", "/xx" protrudes to the right).
HP and Pw are aligned with each other.  Hunger and encumbrance share a
line.  When there are more than three conditions, they're shown three
per line instead of wrapping across lines.  And if too many lines are
present, it will squeeze out enough blank ones to fit.

To see the vertical status, you need a display size of at least 106
columns with 'windowborders' explicitly off, or 110 with them on; also
set option 'align_status' to 'right' or 'left'.  (With borders on,
including the default 'auto' setting, the vertical status appears at
width of 108 columns, but does so by hiding 2 columns of the map; using
110 columns avoids that.)  Resizing from outside the game or changing
align_status via 'O' both cause dynamic reconfiguration of the layout;
there's no need to save, make config changes, then restore.
2019-03-23 17:38:23 -07:00
..
2018-11-16 20:53:38 -05:00
2019-03-13 19:55:43 -04:00
2018-12-05 17:40:33 -05:00
2018-12-05 17:41:30 -05:00
2019-03-18 15:08:01 -07:00
2018-12-05 17:42:11 -05:00
2018-12-05 17:43:33 -05:00
2019-03-15 01:12:59 -07:00
2019-03-23 17:38:23 -07:00
2018-12-05 17:45:15 -05:00
2019-03-18 15:08:01 -07:00
2018-12-05 17:45:40 -05:00
2018-11-16 20:53:38 -05:00
2018-11-16 20:53:38 -05:00

INTRO
=====

The "curses" windowport is a new text-based interface for NetHack,
using high-level curses routines to control the display.  Currently, it
has been compiled and tested on Linux and Windows, but it should also
be portable to a number of other systems, such as other forms of UNIX,
Mac OS X, MSDOS, and OS/2.

Some features of this interface compared to the traditional tty
interface include:

 * Dynamic window resizing (e.g. maximizing a terminal window)
 * Dynamic configurable placement of status and message windows,
 relative to the map
 * Makes better use of larger terminal windows
 * Fancier display (e.g. window borders, optional popup dialogs)
 * "cursesgraphics" option for fancier line-drawing characters for
 drawing the dungeon - this should work on most terminals/platforms


BUILDING
========

As of this writing code has been compiled on Linux and Windows.

UNIX/Linux build instructions: Follow the instructions in
sys/unix/Install.unx.  By default, the Makefile is setup to compile
against ncurses.  Edit Makefile.src if you wish to compile against a
different curses library, such as PDCurses for SDL.

Windows build instructions: If you are using Mingw32 as your compiler,
then follow the instructions in sys/winnt/Install.nt with the following
changes:

 * After running nhsetup, manually copy the file cursmake.gcc to the
 src/ subdirectory
 * Instead of typing "mingw32-make -f Makefile.gcc install" you will
 type "mingw32-make -f cursmake.gcc install"

If you are using a different compiler, you will have to manually modify
the appropriate Makefile to include the curses windowport files.


GAMEPLAY
========

Gameplay should be similar to the tty interface for NetHack; the 
differences are primarily visual.  This windowport supports dymanic
resizing of the terminal window, so you can play with it to see how it
looks best to you during a game.  Also, the align_status and
align_message options may be set during the game, so you can experiment
to see what arraingement looks best to you.

For menus, in addition to the normal configurable keybindings for menu
navigation descrived in the Guidebook, you can use the right and left
arrows to to forward or backward one page, respectively, and the home
and end keys to go to the first and last pages, respectively.

Some configuration options that are specific to or relevant to the
curses windowport are shown below.  Copy any of these that you like to
your nethack configuration file (e.g. .nethackrc for UNIX or
NetHack.cnf for Windows):
#
# Use this if the binary was compiled with multiple window interfaces,
# and curses is not the default
OPTIONS=windowtype:curses
#
# Set this for Windows systems, or for PDCurses for SDL on any system.
# The latter uses a cp437 font, which works with this option
#OPTIONS=IBMgraphics
#
# Set this if IBMgraphics above won't work for your system.  Mutually
# exclusive with the above option, and should work on nearly any
# system.
OPTIONS=cursesgraphics
#
# Optionally specify the alignment of the message and status windows
# relative to the map window.  If not specified, the code will default
# to the locations used in the tty interface: message window on top,
# and status window on bottom.  Placing either of these on the right or
# left really only works well for winder terminal windows.
OPTIONS=align_message:bottom,align_status:right
#
# Use a small popup "window" for short prompts, e.g. "Really save?".
# If this is not set, the message window will be used for these as is
# done for the tty interface.
OPTIONS=popup_dialog
#
# Specify the initial window size for NetHack in units of characters.
# This is supported on PDCurses for SDL as well as PDCurses for
# Windows.
OPTIONS=term_cols:110,term_rows:32
#
# Controls the usage of window borders for the main NetHack windows
# (message, map, and status windows).  A value of 1 forces the borders
# to be drawn, a value of 2 forces them to be off, and a value of 3
# allows the code to decide if they should be drawn based on the size
# of the terminal window.
OPTIONS=windowborders:3


CONTACT
=======

Please send any bug reports, suggestions, patches, or miscellaneous
feedback to me (Karl Garrison) at: kgarrison@pobox.com.  Note that as
of this writing, I only have sporatic Internet access, so I may not get
back to you right away.

Happy Hacking!

Karl Garrison
March, 2009