|
JACK WHITHAM PhD MEng Professional Activities - Publications - Software - Articles |
|||
|
|
|
||
| Software -> Tilehack (Nethack with Graphical Tiles - Online!) |
Nethack is the definitive
"roguelike"
adventure game. It's a huge, complicated and challenging game, both
frustrating and rewarding. Most computers can run the game software
locally, but it's also fun to play online, for a high
score on alt.org or prizes
from the /dev/null Nethack
Tournament.
Online Nethack servers usually only offer Nethack via the text-only Telnet protocol. Only the classical text interface is available (right). But some players prefer the graphical interface that has been a standard part of offline Nethack since version 3.2 (released 1996).
One way to enable online tiled play is to guess a suitable tile to replace each on-screen character, based on its attributes, and substitute accordingly. This is the strategy used by David McCallum's program Ebonhack. It works for any Nethack server, but it isn't completely ideal. The text display does not contain as much information as a tiled display - some characters could represent more than one tile, and sometimes a page of text is mistaken for a map and vice versa. A better strategy (introduced by Justin Hiltscher for TelnetTiles) extends Nethack to generate hints about the correct tiles alongside the text characters.
Tilehack is a new approach to TelnetTiles, moving the client into Javascript running in a web browser. It is compatible with text mode and the popular dgamelaunch software. This makes it cross-platform and easy to use, and ensures that the tile set used by the players always matches the one used by the server. Naturally, a player can switch between tiled mode and text mode without starting a new game.
The Tilehack interface is similar to the graphical Nethack interface
for MS-DOS: there is no mouse and menus are still text. However, the
tiles appear exactly as they do within Nethack for Windows, Mac, MS-DOS
and Linux (right).
It takes effect only when $TERM = "tilehack". Tiles are drawn using VT100-style escape codes; there are additional escape codes to set the cursor colour according to the player's HP, as in Qt Nethack. These escape codes are chosen for compactness rather than compatibility with non-tiled terminals: unrecognised escape codes are supposed to be ignored, but some terminals try to interpret them anyway, so there is no way to produce output that is compatible both with Tilehack (or TelnetTiles) and with absolutely all non-tiled terminals.
(There is also an earlier version based on shellinabox-2.10, and here is the diff for version 2.10 and the diff for SVN version 239.)
The low 12 bits of number are the tile number, as used within Nethack's glyph2tile data structure. The 12th bit indicates if the tile represents a pet: if so, a small "heart" icon is added to the corner. For version 3.4.3, there are 1080 tiles, resulting in 2160 PNG images.
Then, the steps are (roughly) as follows:
shellinaboxd -t -s '/:$user:$group:/:$command'In this command line, you must substitute $user and $group with the names of a valid user and group on your system. For testing, use your own username and group (the first two fields that are printed by the "id" command). For a real server, you should think about setting up a "chroot" environment and using dummy user accounts for extra security.
Shellinabox is GPLv2-licensed software, written and copyright by Markus Gutschke. Tilehack would have been much more difficult if I had not been able to build upon this excellent piece of free software.
Here is the final high score table. Once again, my thanks to all who took part.
| Score | Level | Max Level |
End Date | Class/Race/ Gender/Align |
Name | Reason for endgame |
|---|---|---|---|---|---|---|
| 2313906 | -1 | 53 | 20091230 | Tou Hum Mal Neu | trif | petrified by an Archon (with the Amulet) |
| 206174 | 21 | 21 | 20100123 | Mon Hum Mal Neu | CatStevens | killed by a rock troll |
| 153622 | 17 | 13 | 20100130 | Val Hum Fem Law | CatStevens | killed by a fire giant |
| 136632 | 14 | 16 | 20100124 | Bar Hum Fem Cha | robcypher | killed by a rock troll |
| 126312 | 25 | 26 | 20100216 | Sam Hum Mal Law | trabic | killed by a touch of death |
| 122636 | 6 | 11 | 20100221 | Bar Hum Fem Neu | robcypher | poisoned by a rotted black naga corpse |
| 113292 | 3 | 10 | 20100218 | Mon Hum Mal Neu | hansel0 | killed by a fire ant, while helpless |
| 96386 | 21 | 21 | 20100103 | Bar Orc Fem Cha | Jack | killed by an air elemental |
| 79750 | 12 | 13 | 20100110 | Val Hum Fem Law | trif | killed by a winter wolf, while helpless |
| 70252 | 1 | 11 | 20100109 | Val Hum Fem Law | trif | escaped |
| 40387 | 8 | 11 | 20100116 | Mon Hum Fem Neu | Xev | killed by an ettin mummy, while helpless |
| 28605 | 11 | 11 | 20100130 | Wiz Hum Fem Neu | Xev | killed by an energy vortex |
| 22301 | 7 | 9 | 20100327 | Wiz Elf Fem Cha | Xev | killed by a soldier ant |
| 17773 | 10 | 10 | 20100101 | Sam Hum Fem Law | robcypher | killed by a vampire |
| 16904 | 5 | 10 | 20100129 | Wiz Elf Mal Cha | Voltari | killed by a scroll of earth |
| 12138 | 7 | 7 | 20091226 | Kni Hum Mal Law | robcypher | killed by an owlbear |
| 11786 | 6 | 9 | 20100314 | Kni Hum Mal Law | iigneous | killed by a soldier ant |
| 11405 | 12 | 12 | 20091228 | Cav Hum Mal Neu | trif | killed by a dwarf |
| 10470 | 8 | 8 | 20100202 | Ran Hum Fem Cha | robcypher | petrified by a chickatrice |
| 8005 | 6 | 6 | 20100121 | Kni Hum Fem Law | Xev | killed by a soldier ant |
| 7726 | 7 | 7 | 20100115 | Hea Hum Mal Neu | LawyerGuy | quit |
| 6496 | 8 | 8 | 20100126 | Arc Dwa Mal Law | robcypher | killed by a leocrotta |
| 5154 | 8 | 8 | 20091227 | Ran Orc Fem Cha | boldbjorn | killed by a watch captain |
| 5102 | 6 | 6 | 20100324 | Sam Hum Mal Law | iigneous | killed by an Uruk-hai |
| 4545 | 5 | 5 | 20091230 | Rog Hum Fem Cha | trif | killed by an ape |
| 4512 | 2 | 7 | 20091226 | Ran Elf Fem Cha | Spaden | killed by a rothe |
| 4265 | 7 | 7 | 20100303 | Pri Hum Mal Neu | light3 | killed by a black unicorn |
| 3091 | 8 | 8 | 20100318 | Arc Gno Mal Neu | moru | killed by a giant spider |
| 2850 | 6 | 6 | 20091230 | Rog Hum Mal Cha | trif | killed by a jaguar |
| 2537 | 5 | 5 | 20100111 | Pri Elf Mal Cha | robcypher | poisoned by a rotted gray ooze corpse |
| 2536 | 7 | 7 | 20100228 | Cav Hum Mal Neu | light3 | killed by a giant bat |
| 2422 | 9 | 9 | 20100326 | Pri Elf Mal Cha | iigneous | killed by a soldier ant |
| 2354 | 9 | 9 | 20091225 | Tou Hum Mal Neu | Jack | killed by a dwarf |
| 1936 | 6 | 6 | 20100209 | Arc Hum Mal Neu | Voltari | killed by a magic missile |
| 1584 | 4 | 5 | 20100225 | Hea Hum Mal Neu | iznogoud | killed by a pony, while helpless |
| 1527 | 5 | 5 | 20091228 | Tou Hum Fem Neu | trif | killed by a killer bee |
| 1002 | 7 | 7 | 20100111 | Hea Gno Fem Neu | robcypher | killed by a small mimic, while helpless |
| 841 | 5 | 5 | 20100305 | Rog Orc Mal Cha | iigneous | killed by a dwarf zombie |
| 719 | 3 | 3 | 20100323 | Cav Gno Mal Neu | someone13 | killed by a bat |
|
|
|
||
| Copyright (C) Jack Whitham 1997-2011 | |||