NetHack Curses Interface Wiki
(Added crazy idea for ASCII-art "tiles")
(Added link to bug report)
 
(22 intermediate revisions by 3 users not shown)
Line 1: Line 1:
'''[[Main Page]] | [[Info]] | [[Downloads]] | [[Screenshots]] | Developers'''
+
'''[[Main Page]] | [[Info]] | [[Downloads]] | [[Screenshots]] | Developers | [[Misc]]'''
   
 
----
 
----
   
This page is intended for those who might be inclined to contribute to this project. Below is a list of things that are unfinished, or that I would personally like to see. Additionally, the [[NextVersion]] page shows what is currently in progress.
+
This page is intended for those who might be inclined to contribute to this project. Below is a list of things that are unfinished, or that I would personally like to see. Additionally, the [[NextVersion]] page shows what is currently in progress. Also, there is now a [http://sourceforge.net/projects/nethack-curses/ project page] on sourceforge.net with a svn repository.
   
 
==NetHack Interface==
 
==NetHack Interface==
Line 11: Line 11:
 
*Implement curses_rip for optional fancier color tombstone, as well as one that will display correctly on smaller terminals.
 
*Implement curses_rip for optional fancier color tombstone, as well as one that will display correctly on smaller terminals.
   
*I am confused as to how mark_synch, wait_synch, and delay_output should work. Help, please?
+
*I am confused as to how mark_synch, wait_synch, <s>and delay_output</s> should work. Help, please?
   
*Both PDCurses and Ncurses have mouse support, so the poskey function could probably be implemented easily enough.
+
*Both PDCurses and Ncurses have mouse support, so the poskey function could probably be implemented easily enough. '''Done'''
   
 
*raw_print is supposed to be able to work before the windowing system has been initialized, as well as after, so I am unsure if curses functions should be used here. Maybe check to see if initscr() has been called, and use curses functions if so, and call initscr() from there is not? Right now it is just a call to puts() with no support for bold text.
 
*raw_print is supposed to be able to work before the windowing system has been initialized, as well as after, so I am unsure if curses functions should be used here. Maybe check to see if initscr() has been called, and use curses functions if so, and call initscr() from there is not? Right now it is just a call to puts() with no support for bold text.
Line 21: Line 21:
 
*Consolidate refreshes of the display for smoother output.
 
*Consolidate refreshes of the display for smoother output.
   
*Horizontal scrollbar to show position for displays < 80 columns.
+
*Horizontal scrollbar to show position for displays < 80 columns '''Done'''
   
 
*Calls to getch() should probably be turned into wgetch() for the appropriate window. This causes quirky cursor behavior under PDCurses, however.
 
*Calls to getch() should probably be turned into wgetch() for the appropriate window. This causes quirky cursor behavior under PDCurses, however.
   
*Animation effects do not display properly - this could probably be fixed with a correct implementation of the delay_output function.
+
*Animation effects do not display properly - this could probably be fixed with a correct implementation of the delay_output function '''Done'''
   
 
*Support option to set foreground and background colors for individual windows
 
*Support option to set foreground and background colors for individual windows
Line 33: Line 33:
 
(cursdial.c)
 
(cursdial.c)
   
*<s>Menus need to be able to accept a count as input, e.g. to specify how many items to drop.</s>
+
*Menus need to be able to accept a count as input, e.g. to specify how many items to drop '''Done'''
   
*Currently the "preselected" flag for an individual menu item is ignored. This should eventually be implemented.
+
*Currently the "preselected" flag for an individual menu item is ignored. This should eventually be implemented '''Done'''
   
 
*Menus probably should never overlap with the message window, since the user sometimes needs to be able to see the messages while the menu is active, e.g. when identifying multiple items one at a time.
 
*Menus probably should never overlap with the message window, since the user sometimes needs to be able to see the messages while the menu is active, e.g. when identifying multiple items one at a time.
Line 41: Line 41:
 
*Perhaps allow for keyboard navigation of individual items, e.g. using the up and down arrows to move among the selectable items, and selecting individual items with the spacebar. Perhaps the tab key could jump to the first selectable item after the next heading, and shift-tab could jump to the first item of the previous heading.
 
*Perhaps allow for keyboard navigation of individual items, e.g. using the up and down arrows to move among the selectable items, and selecting individual items with the spacebar. Perhaps the tab key could jump to the first selectable item after the next heading, and shift-tab could jump to the first item of the previous heading.
   
*Need to consider reusing accelerators as some other windowports do, or otherwise go beyond numbers to get more.
+
*Need to consider reusing accelerators as some other windowports do, or otherwise go beyond numbers to get more '''Done'''
  +
  +
*Selected menu entries should be more clearly marked as selected; quickly eyeballing through a menu, it's easy to miss the <tt style="background:lightgray;">&lt;x&gt;</tt> (vs <tt style="background:lightgray;">&nbsp;x)</tt>). Maybe reverse attr or something? --[[User:Paxed|paxed]] 17:11, June 18, 2010 (UTC) '''Done'''
  +
*Add option to have inventory, pickup etc menus use the whole width of the screen instead of wrapping halfway. My terminal is wider than it is tall so using more of the width would reduce the number of pages that need to be scrolled through. --DrSunglass
   
 
==Message Window==
 
==Message Window==
Line 47: Line 50:
 
(cursmesg.c)
 
(cursmesg.c)
   
*Hitting Esc at the more prompt (which is '>>' for the curses interface) should suppress the display of any further messages for that turn like the tty interface does.
+
*Hitting Esc at the more prompt (which is '>>' for the curses interface) should suppress the display of any further messages for that turn like the tty interface does '''Done'''
   
 
==Map Window==
 
==Map Window==
Line 53: Line 56:
 
(curswins.c)
 
(curswins.c)
   
*The map window would probably benefit from a total redesign. Right now, it uses a pad instead of a regular curses window, which causes a number of special cases in the code to account for it, and a separate window behind it just to draw the border. It feels kludgy and annoying!
+
*The map window would probably benefit from a total redesign. Right now, it uses a pad instead of a regular curses window, which causes a number of special cases in the code to account for it, and a separate window behind it just to draw the border. It feels kludgy and annoying! '''Done'''
 
*This is something fairly silly and whimsical, but it seems like it would be fun to have a "tiles mode" od sorts for the curses port that used ASCII-art "tiles".
 
   
 
==Status Window==
 
==Status Window==
Line 61: Line 62:
 
(cursstat.c)
 
(cursstat.c)
   
*If the status window is on the right or left, then we have much more room to work with for each item horizontally. Expand out some of the labels for clarity. We can also list the current dungeon (e.g. Gnomish Mines) and perhaps show thermometer bars for hit points and magical power.
+
*If the status window is on the right or left, then we have much more room to work with for each item horizontally. Expand out some of the labels for clarity. We can also list the current dungeon (e.g. Gnomish Mines) '''Done'''
  +
**Possibly show thermometer bars for hit points and magical power with an expanded status display
   
*Conversely, if we have a narrower display, compress some of the labels to save space, and do not display some items that never or rarely change (e.g. name, level and title, and alignment). Perhaps display changes to these fields in the message window if they do happen to change (e.g. converting to a new alignment).
+
*Conversely, if we have a narrower display, compress some of the labels to save space, and do not display some items that never or rarely change (e.g. name, level and title, and alignment). Perhaps display changes to these fields in the message window if they do happen to change (e.g. converting to a new alignment). '''Done'''
   
 
*Maybe add some configuration options for what colors are used and the like.
 
*Maybe add some configuration options for what colors are used and the like.
Line 71: Line 73:
 
(cursdial.c)
 
(cursdial.c)
   
*<s>curses_yn_function needs to accept a count if a '#' is present in choices string.</s>
+
*curses_yn_function needs to accept a count if a '#' is present in choices string. '''Done'''
   
*Extended commands should be enterable letter-by-letter via a '#' prompt if user does not have the extmenu command set to TRUE.
+
*Extended commands should be enterable letter-by-letter via a '#' prompt if user does not have the extmenu command set to TRUE. '''Done'''
   
*Character selection should allow for a random selection of any or all choices.
+
*Character selection should allow for a random selection of any or all choices. '''Done'''
  +
*Allow escaping out of prompts like "Really attack the foo?". In the standard interface this dismisses the prompt, but in the curses interface it puts a ^[ in the box -- not at all useful. --DrSunglass
  +
** Seems to only happen with free-form dialogs, such as "For what do you wish?". Added this to the [https://sourceforge.net/tracker/?func=detail&aid=3160862&group_id=317683&atid=1336046 bug tracker].
   
 
==Other Platforms==
 
==Other Platforms==
   
PDCurses also work on DOS and OS/2. PDCurses for SDL and ncurses exist for Mac OS X. Porting the curses interface to these platforms should not be too difficult. The [[Building]] page gives more information about this.
+
PDCurses also works on DOS and OS/2. Porting the curses interface to these platforms should not be too difficult. The [[Building]] page gives more information about this.
   
 
==Misc==
 
==Misc==
   
*Update documentation and in-game help to describe the newly-added options: cursesgraphics, term_rows, term_cols, and windowborders.
+
*Update documentation and in-game help to describe the newly-added options: cursesgraphics, term_rows, term_cols, windowborders, and guicolor.
   
*Recognize "Alt" key in a platform-independant way to allow its use to select extended commands. Currently this works for PDCurses. For Ncurses, the Alt key works in an xterm or rxvt if the -meta8 flag is passed, but I'd like to see a general way of detecting it.
+
*Recognize "Alt" key in a platform-independant way to allow its use to select extended commands. Currently this works for PDCurses. For Ncurses, the Alt key works in an xterm or rxvt if the -meta8 flag is passed, but I'd like to see a general way of detecting it. '''Done''' (mostly)
   
*PDCurses has a function named "addrawch" to output the visual representation of a control character to the screen without having the control character affect the display otherwise. I would like to find a way to accomplish the same thing via Ncurses to e.g. be able to use a font like nh10 with the correct symbol mappings in an xterm or the like.
+
*PDCurses has a function named "addrawch" to output the visual representation of a control character to the screen without having the control character affect the display otherwise. I would like to find a way to accomplish the same thing via Ncurses to e.g. be able to use a font like nh10 with the correct symbol mappings in an xterm or the like. (maybe impossible on a real terminal?)
   
 
*Convert nh10.bdf text font into a format that PDCurses-SDL can use.
 
*Convert nh10.bdf text font into a format that PDCurses-SDL can use.
Line 93: Line 97:
 
*Allow all transient windows to be moved with arrows, possibly with modifier keys for multipage dialogs.
 
*Allow all transient windows to be moved with arrows, possibly with modifier keys for multipage dialogs.
   
*<s>Add an optional ASCII-art splash screen, possibly using dungeon-drawing characters and color.</s>
+
*Add an optional ASCII-art splash screen, possibly using dungeon-drawing characters and color '''Done'''
  +
  +
*Implement perm_invent option to allow inventory window to always be visible on larger terminals
  +
  +
*Add window_borders option to not draw window borders for the main windows on the outside edge of the terminal

Latest revision as of 14:49, 18 January 2011

Main Page | Info | Downloads | Screenshots | Developers | Misc


This page is intended for those who might be inclined to contribute to this project. Below is a list of things that are unfinished, or that I would personally like to see. Additionally, the NextVersion page shows what is currently in progress. Also, there is now a project page on sourceforge.net with a svn repository.

NetHack Interface[]

(These are the functions in cursmain.c called by the core NetHack code)

  • Implement curses_rip for optional fancier color tombstone, as well as one that will display correctly on smaller terminals.
  • I am confused as to how mark_synch, wait_synch, and delay_output should work. Help, please?
  • Both PDCurses and Ncurses have mouse support, so the poskey function could probably be implemented easily enough. Done
  • raw_print is supposed to be able to work before the windowing system has been initialized, as well as after, so I am unsure if curses functions should be used here. Maybe check to see if initscr() has been called, and use curses functions if so, and call initscr() from there is not? Right now it is just a call to puts() with no support for bold text.

Display[]

  • Consolidate refreshes of the display for smoother output.
  • Horizontal scrollbar to show position for displays < 80 columns Done
  • Calls to getch() should probably be turned into wgetch() for the appropriate window. This causes quirky cursor behavior under PDCurses, however.
  • Animation effects do not display properly - this could probably be fixed with a correct implementation of the delay_output function Done
  • Support option to set foreground and background colors for individual windows

Menus[]

(cursdial.c)

  • Menus need to be able to accept a count as input, e.g. to specify how many items to drop Done
  • Currently the "preselected" flag for an individual menu item is ignored. This should eventually be implemented Done
  • Menus probably should never overlap with the message window, since the user sometimes needs to be able to see the messages while the menu is active, e.g. when identifying multiple items one at a time.
  • Perhaps allow for keyboard navigation of individual items, e.g. using the up and down arrows to move among the selectable items, and selecting individual items with the spacebar. Perhaps the tab key could jump to the first selectable item after the next heading, and shift-tab could jump to the first item of the previous heading.
  • Need to consider reusing accelerators as some other windowports do, or otherwise go beyond numbers to get more Done
  • Selected menu entries should be more clearly marked as selected; quickly eyeballing through a menu, it's easy to miss the <x> (vs  x)). Maybe reverse attr or something? --paxed 17:11, June 18, 2010 (UTC) Done
  • Add option to have inventory, pickup etc menus use the whole width of the screen instead of wrapping halfway. My terminal is wider than it is tall so using more of the width would reduce the number of pages that need to be scrolled through. --DrSunglass

Message Window[]

(cursmesg.c)

  • Hitting Esc at the more prompt (which is '>>' for the curses interface) should suppress the display of any further messages for that turn like the tty interface does Done

Map Window[]

(curswins.c)

  • The map window would probably benefit from a total redesign. Right now, it uses a pad instead of a regular curses window, which causes a number of special cases in the code to account for it, and a separate window behind it just to draw the border. It feels kludgy and annoying! Done

Status Window[]

(cursstat.c)

  • If the status window is on the right or left, then we have much more room to work with for each item horizontally. Expand out some of the labels for clarity. We can also list the current dungeon (e.g. Gnomish Mines) Done
    • Possibly show thermometer bars for hit points and magical power with an expanded status display
  • Conversely, if we have a narrower display, compress some of the labels to save space, and do not display some items that never or rarely change (e.g. name, level and title, and alignment). Perhaps display changes to these fields in the message window if they do happen to change (e.g. converting to a new alignment). Done
  • Maybe add some configuration options for what colors are used and the like.

Other Dialogs[]

(cursdial.c)

  • curses_yn_function needs to accept a count if a '#' is present in choices string. Done
  • Extended commands should be enterable letter-by-letter via a '#' prompt if user does not have the extmenu command set to TRUE. Done
  • Character selection should allow for a random selection of any or all choices. Done
  • Allow escaping out of prompts like "Really attack the foo?". In the standard interface this dismisses the prompt, but in the curses interface it puts a ^[ in the box -- not at all useful. --DrSunglass
    • Seems to only happen with free-form dialogs, such as "For what do you wish?". Added this to the bug tracker.

Other Platforms[]

PDCurses also works on DOS and OS/2. Porting the curses interface to these platforms should not be too difficult. The Building page gives more information about this.

Misc[]

  • Update documentation and in-game help to describe the newly-added options: cursesgraphics, term_rows, term_cols, windowborders, and guicolor.
  • Recognize "Alt" key in a platform-independant way to allow its use to select extended commands. Currently this works for PDCurses. For Ncurses, the Alt key works in an xterm or rxvt if the -meta8 flag is passed, but I'd like to see a general way of detecting it. Done (mostly)
  • PDCurses has a function named "addrawch" to output the visual representation of a control character to the screen without having the control character affect the display otherwise. I would like to find a way to accomplish the same thing via Ncurses to e.g. be able to use a font like nh10 with the correct symbol mappings in an xterm or the like. (maybe impossible on a real terminal?)
  • Convert nh10.bdf text font into a format that PDCurses-SDL can use.
  • Allow all transient windows to be moved with arrows, possibly with modifier keys for multipage dialogs.
  • Add an optional ASCII-art splash screen, possibly using dungeon-drawing characters and color Done
  • Implement perm_invent option to allow inventory window to always be visible on larger terminals
  • Add window_borders option to not draw window borders for the main windows on the outside edge of the terminal