Colors
On many systems, NetHack can display monsters, objects and dungeon features in color, in ASCII mode. The exact appearance of these colors depends on many things, including the platform NetHack was compiled for, compile-time options, run-time options, your terminal settings and the monitor you're using. If your NetHack supports color output, it can be toggled on or off using the color option.
For the colors of the wiki itself, see function templates and ReplaceCharsBlock.
Contents
Monitor
Even the appearance of the RGB colors is not fixed, but can vary depending on your display hardware and software. Some issues that can affect color rendering include:
- Your computer may or may not apply gamma correction to colors (and, if it does, it may or may not be properly calibrated). Also, different monitors may have different natural gamma values, and on some monitors the gamma value may even be adjustable.
- CRT and LCD monitors have different color gamuts, affecting the colors they can display.
- The brightness, contrast and color temperature of the monitor can also vary, and are often subject to user adjustment.
- Finally, ambient lighting and variations in the human eye itself can affect the appearance of colors.
What all this comes down to is that colors which look nice and easily visible to one person may not look as good to another. Thus, picking a good color palette is ultimately a personal, subjective choice.
Changing terminal colors
When playing without tiles, you can adjust the colors used by your terminal/console. For example, if dark blue on black background is nearly invisible, try changing the dark blue color in your console color settings.
PuTTY
The colors for PuTTY can be changed in the putty settings, or you could use Windows Console colors editor which can also create a registry file for putty. Alternatively, the putty-color-themes repository has many color themes ready.
rxvt
From the command line: rxvt -color4 lightblue.
rxvt colors can also be set via the X11 resources as seen in the xterm configuration below by using Rxvt*color4: lightblue in ~/.Xdefaults
xterm
From the command line: xterm -xrm "XTerm*color4: lightblue"
Similar to setting X11 resources, you can change the colors used by xterm, by putting eg. the following in ~/.Xdefaults:
XTerm*color4: lightblue
And then doing xrdb -merge ~/.Xdefaults to set the resource. Starting xterm after that will use the lightblue color.
mintty (Cygwin)
Changing the ANSI terminal colors in mintty doesn't seem possible using the GUI color options; you can, however, specify color preferences by editing ~/.minttyrc.
The syntax is ColorName=R,G,B, putting each new entry on a new line.
For example:
BoldBlue=202,169,250
Colors are referred to by their ANSI names - Black, Blue, Red, Magenta, Green, Cyan, Yellow and White; prefix these with Bold when referring to the secondary, highlighted version of the color.
Linux console
You can output an OSC control sequence to change a color. The format is: Esc]Pnrrggbb, where Esc means the escape character. nrrggbb is a sequence of 7 hexadecimal digits, where n is the color number, and rr, gg and bb are the red, green and blue parts of the color.
You can do this with the echo command, for example:
echo -e '\e]P40000ff'
This will set the fourth color (dark blue) to the RGB values 0, 0, and 255. To reset all colors, use this sequence:
echo -e '\e]R'
You might want to put this into a script so you don't have to do this manually every time you play.
Windows
You can edit the colors in the command prompt settings.
Internal NetHack color codes
Internally, the colors in NetHack are specified using the 16 CLR_* color codes (including NO_COLOR, a dark gray used as the default color) defined in the file includes/color.h.
color name | numeric value |
---|---|
CLR_BLACK | 0 |
CLR_RED | 1 |
CLR_GREEN | 2 |
CLR_BROWN | 3 |
CLR_BLUE | 4 |
CLR_MAGENTA | 5 |
CLR_CYAN | 6 |
CLR_GRAY | 7 |
NO_COLOR | 8 |
CLR_ORANGE | 9 |
CLR_BRIGHT_GREEN | 10 |
CLR_YELLOW | 11 |
CLR_BRIGHT_BLUE | 12 |
CLR_BRIGHT_MAGENTA | 13 |
CLR_BRIGHT_CYAN | 14 |
CLR_WHITE | 15 |
CLR_MAX | 16 |
The same file also defines a number of "logical" colors for different materials and effects which map to these 16 colors: for example, both leather and wood are defined to be CLR_BROWN.
logical name | color name |
---|---|
HI_OBJ | CLR_MAGENTA |
HI_METAL | CLR_CYAN |
HI_COPPER | CLR_YELLOW |
HI_SILVER | CLR_GRAY |
HI_GOLD | CLR_YELLOW |
HI_LEATHER | CLR_BROWN |
HI_CLOTH | CLR_BROWN |
HI_ORGANIC | CLR_BROWN |
HI_WOOD | CLR_BROWN |
HI_PAPER | CLR_WHITE |
HI_GLASS | CLR_BRIGHT_CYAN |
HI_MINERAL | CLR_GRAY |
DRAGON_SILVER | CLR_BRIGHT_CYAN |
HI_ZAP | CLR_BRIGHT_BLUE |
Terminal color codes
On systems where NetHack outputs text to be displayed in a terminal (rather than handling text rendering by itself), the internal color codes defined in color.h are mapped to ANSI escape codes or equivalent codes defined in the system terminfo. This mapping is specified in win/tty/termcap.c, and (for a mapping of 16 to 16 colors) is surprisingly platform-dependent. Notable quirks include:
- On systems defining MICRO (which are these?), CLR_BLUE is mapped to the same color code as CLR_BRIGHT_BLUE, presumably because the default blue is considered too dark.
- On many (most?) systems (which?), no color codes are defined for CLR_BLACK, CLR_GRAY and NO_COLOR, leaving them all as the default text color (usually gray).
- On Unix systems using terminfo, CLR_BLACK is actually aliased to CLR_BLUE. There is a comment saying that this is done to avoid trying to display black text on a (presumed) black background, as it might not be visible.
- On the Atari TOS port, several of the darker colors are mapped to their bright counterparts. (Which ones? The code is kind of confusing...)
On some systems, the mapping from NetHack colors to terminal colors may be adjusted using the videocolors option.
RGB colors
On some systems, NetHack directly maps the 16 internal color codes to RGB colors. On others, this task is left for the terminal emulator, while on some (mainly older) systems, the color choices may even be determined by the graphics hardware.
A user has suggested improving this page or section as follows:
"List some NetHack/terminal color palettes here."
mtty palette
- Black
- Red
- Green
- Brown
- Blue
- Magenta
- Cyan
- Gray
- Orange
- Bright green
- Yellow
- Bright blue
- Bright magenta
- Bright cyan
- White
See Also
This page may need to be updated for the current version of NetHack.
It may contain text specific to NetHack 3.4.3. Information on this page may be out of date.
Editors: After reviewing this page and making necessary edits, please change the {{nethack-343}} tag to the current version's tag or {{noversion}} as appropriate.