nethack: keyboard cheat page
authorMischa POSLAWSKY <perl@shiar.org>
Mon, 5 Jan 2009 23:35:50 +0000 (23:35 +0000)
committerMischa POSLAWSKY <perl@shiar.org>
Tue, 6 Jan 2009 23:59:47 +0000 (23:59 +0000)
Especially useless, but nonetheless a full description of all keys (even
unshown meta extensions) of the NetHack game (according to Debian's v3.4.3).

nethack-cmds.inc.pl [new file with mode: 0644]
nethack.inc.pl [new file with mode: 0644]
nethack.plp [new file with mode: 0644]

diff --git a/nethack-cmds.inc.pl b/nethack-cmds.inc.pl
new file mode 100644 (file)
index 0000000..b7bd6d1
--- /dev/null
@@ -0,0 +1,57 @@
+use utf8;
+
+'' => {
+       desc => 'normal mode',
+
+       '~' => ["open home$sign{_}dir"],
+       '@' => ["play macro", 'arg'],
+       '%' => ["to line pct", 'pm'], #TODO: G?
+       '0' => ["left of page", 'pm'],
+       '$' => ["right of page", 'pm'],
+       '#' => ["rev. find word", 'pm'],
+       '*' => ["find word", 'pm'],
+       #'+'
+       #'`'
+       #'^^'
+       '?' => ["help menu", 'mh arg mode?'],
+       '/' => ["explain symbol", 'pm arg mode/'],
+
+       'a' => ["apply tool"],
+       'A' => ["remove all armor"],
+       '^a'=> ["redo command"],
+       'c' => ["close door"],
+       'C' => ["call monster", 'pm'],
+       'd' => ["drop item"],
+       'D' => ["drop items"],
+       '^d'=> ["kick"],
+       'e' => ["eat food"],
+       'E' => ["engrave"],
+       'f' => ["fire quiver"],
+       'F' => ["fight monster"],
+       'i' => ["inventory"],
+       'I' => ["inventory parts", 'arg'],
+       'o' => ["open door"],
+       'O' => ["options", 'modeO'],
+       's' => ["search"],
+       't' => ["throw or shoot"],
+       'T' => ["remove armor"],
+       '^t'=> ["teleport"],
+       'v' => ["version"],
+       'w' => ["wield weapon"],
+       'W' => ["wear armor"],
+       'x' => ["swap weapons"],
+       'X' => ["explore mode"],
+       ':' => ["look here"],
+       ';' => ["look elsewhere"],
+       ',' => ["pick up"],
+       ')' => ["show weapon"],
+       '[' => ["show armor"],
+       '=' => ["show rings"],
+       '"' => ["show amulet"],
+       '(' => ["show tools"],
+       '*' => ["show equipment"],
+       '$' => ["count gold"],
+       '+' => ["list spells"],
+       '\\'=> ["discovered objects"],
+},
+
diff --git a/nethack.inc.pl b/nethack.inc.pl
new file mode 100644 (file)
index 0000000..82fed9c
--- /dev/null
@@ -0,0 +1,123 @@
+use utf8;
+
+'' => {
+       desc => 'normal gameplay',
+
+       'b' => ["step left down",  'pm', 'numpad 1'],
+       'j' => ["step down",       'pm', 'numpad 2'],
+       'n' => ["step right down", 'pm', 'numpad 3'],
+       'h' => ["step left",       'pm', 'numpad 4'],
+       'l' => ["step right",      'pm', 'numpad 6'],
+       'y' => ["step left up",    'pm', 'numpad 7'],
+       'k' => ["step up",         'pm', 'numpad 8'],
+       'u' => ["step right up",   'pm', 'numpad 9'],
+
+       'B' => ["go left down",    'po', 'shift numpad 1'],
+       'J' => ["go down",         'po', 'shift numpad 2'],
+       'N' => ["go right down",   'po', 'shift numpad 3'],
+       'H' => ["go left",         'po', 'shift numpad 4'],
+       'L' => ["go right",        'po', 'shift numpad 6'],
+       'Y' => ["go left up",      'po', 'shift numpad 7'],
+       'K' => ["go up",           'po', 'shift numpad 8'],
+       'U' => ["go right up",     'po', 'shift numpad 9'],
+
+       '^b'=> ["run left down",   'po', 'numpad 1'],
+       '^j'=> ["run down",        'po', 'numpad 2'],
+       '^n'=> ["run right down",  'po', 'numpad 3'],
+       '^h'=> ["run left",        'po', 'numpad 4'],
+       '^l'=> ["run right",       'po', 'numpad 6'],
+       '^y'=> ["run left up",     'po', 'numpad 7'],
+       '^k'=> ["run up",          'po', 'numpad 8'],
+       '^u'=> ["run right up",    'po', 'numpad 9'],
+
+       'g' => ["run until interest", 'po argm'],
+       'm' => ["move blind", 'po argm', 'no pickup'],
+       'G' => ["g any$sign{_}where", 'po argm', "follow branches"],
+
+       '?' => ["help menu", 'mv mode?'], #help
+       '+?'=> ["more help", 'mv'],
+       '/' => ["explain symbol", 'mi arg mode/'], #whatis
+       '&' => ["explain comm$sign{_}and", 'mi arg'],
+       '<' => ["climb up a ladder",   'pm'], #up
+       '>' => ["climb down a ladder", 'pm'], #down
+       '.' => ["rest (noop)", 'pm'], #rest
+       '_' => ["travel to", 'po argM'], #travel
+
+       '+2'=> ["two$sign{_}weapon toggle", 'co'], #twoweapon
+       'a' => ["apply tool", 'co argi'], #apply
+       'A' => ["remove all armor", 'co'], #armor
+       '^a'=> ["redo comm$sign{_}and", 'co', 'Again'], #again
+       '+a'=> ["adjust inv$sign{_}ent$sign{_}ory", 'mi'], #adjust
+       'c' => ["close door", 'co argm'], #close
+       'C' => ["call monster", 'co arg'], #call
+       '+c'=> ["chat", 'co arg'], #chat
+       'd' => ["drop item", 'co argi'], #drop
+       'D' => ["Drop items", 'co arg'], #Drop
+       '^d'=> ["kick", 'co argm'], #kick
+       '+d'=> ["dip", 'co argi'], #dip
+       'e' => ["eat food", 'co argi'], #eat
+       'E' => ["engrave", 'co argi'], #engrave
+       '+e'=> ["weapon skills", 'co', 'Enhance'], #enhance
+       'f' => ["fire quiver", 'co argm'], #fire
+       'F' => ["fight monster", 'co argm'], #fight
+       '+f'=> ["force lock", 'co'], #force
+       'i' => ["invent$sign{_}ory", 'mo'], #invent
+       'I' => ["invent$sign{_}ory part", 'mo arg'], #Invent
+       '+i'=> ["invoke object", 'co argi'], #invoke
+       '+j'=> ["jump", 'co'], #jump
+       '+l'=> ["loot", 'co'], #loot
+       '+m'=> ["monster ability", 'co'], #monster
+       '+n'=> ["name item$sign{_}(s)", 'mo arg'], #name
+       'o' => ["open door", 'co argm'], #open
+       'O' => ["options", 'mv modeO'], #options
+       '+o'=> ["offer sacrifice", 'co argi'], #offer
+       'p' => ["pay bill", 'co'], #pay
+       'P' => ["put on", 'co argi'], #puton
+       '^p'=> ["repeat message", 'mi'], #prevmsg
+       '+p'=> ["pray", 'co arg'], #pray
+       'q' => ["drink", 'co argi', 'Quaff'], #quaff
+       'Q' => ["quiver ammo", 'co argi'], #quiver
+       '+q'=> ["exit game", 'mi', 'Quit'], #quit
+       'r' => ["read scroll", 'co argi'], #read
+       'R' => ["put off", 'co argi', 'Remove accessory'], #remove
+       '^r'=> ["redraw", 'mi'], #redraw
+       '+r'=> ["rub object", 'co argi'], #rub
+       's' => ["search secrets", 'co'], #search
+       'S' => ["save game", 'mi'], #save
+       '+s'=> ["sit down", 'co'], #sit
+       't' => ["throw$sign{_}/shoot", 'co argm'], #throw
+       'T' => ["remove armor", 'co argi'], #takeoff
+       '^t'=> ["teleport", 'co'], #'port
+       '+t'=> ["turn undead", 'co'], #turn
+       '+u'=> ["untrap", 'co'], #untrap
+       'v' => ["version", 'mi'],
+       'V' => ["verbose version", 'mi'], #history
+       '+v'=> ["compile details", 'mi'], #version
+       'w' => ["wield weapon", 'co argi'], #wield
+       'W' => ["wear armor", 'co argi'], #wear
+       '+w'=> ["wipe face", 'co'], #wipe
+       'x' => ["swap weapons", 'co', 'Xchange'], #xchange
+       'X' => ["explore mode", 'mi'], #explore
+       '^x'=> ["show stats", 'mi'], #show
+       'z' => ["zap wand", 'co argm'], #zap
+       'Z' => ["cast spell", 'co argi'], #Zap
+       '^z'=> ["suspend game", 'mi'], #suspend
+
+       ':' => ["look here", 'mi'], #look
+       ';' => ["look else$sign{_}where", 'mi argM'], #farlook
+       ',' => ["pick up", 'co'], #pickup
+       '@' => ["toggle pick$sign{_}up", 'mi'],
+       '^' => ["show trap", 'mi argm'], #trap_id
+       ')' => ["show weapon", 'mo'],
+       '[' => ["show armor", 'mo'],
+       '=' => ["show rings", 'mo'],
+       '"' => ["show amulet", 'mo'],
+       '(' => ["show tools", 'mo'],
+       '*' => ["show equipment", 'mo'],
+       '$' => ["count gold", 'mi'], #gold
+       '+' => ["list spells", 'mo'], #spells
+       '\\'=> ["discovered objects", 'mo'], #known
+       '!' => ["shell escape", 'mi'], #sh
+       '#' => ["more comm$sign{_}ands", 'mv'],
+},
+
diff --git a/nethack.plp b/nethack.plp
new file mode 100644 (file)
index 0000000..bb0be70
--- /dev/null
@@ -0,0 +1,172 @@
+<:
+use utf8;
+use strict;
+use warnings;
+no  warnings 'qw';  # you know what you doing
+no  warnings 'uninitialized';  # save some useless checks for more legible code
+
+our $VERSION = '1.0';
+
+our $ascii = 0;
+if (exists $get{ascii}) {
+       $ascii = $get{ascii} ne '0';  # manual override
+} elsif (defined $ENV{HTTP_ACCEPT_CHARSET}) {
+       $ascii = 1;
+       for (split q{,}, $ENV{HTTP_ACCEPT_CHARSET}) {
+               $ascii = 0, last if $_ eq '*' or m{utf-?8}i;
+       }
+}
+
+my $charset = $ascii ? 'us-ascii' : 'utf-8';
+my $ctype = "text/html; charset=$charset";
+$header{content_type} = $ctype;
+
+:><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
+ "http://www.w3.org/TR/html4/loose.dtd">
+<html>
+
+<head>
+<title>nethack cheat sheet</title>
+<meta http-equiv="content-type" content="<:= $ctype :>">
+<link rel="stylesheet" type="text/css" media="all" href="base.css">
+<!--[if lte IE 6]><style> .help dl.legend dt {margin:0 0 1px} </style><![endif]-->
+<!--[if lte IE 7]><style> .help dl.legend dd {float:none} </style><![endif]--><:
+       my %styles = map {$_ => $_} qw(dark circus mono terse);
+       our $style = exists $get{style} && $styles{$get{style}} || 'light';
+       printf(qq{\n<link rel="%s" type="text/css" media="all" href="%s" title="%s">},
+               $_ eq $style ? 'stylesheet' : 'alternate stylesheet', "$_.css", $_
+       ) for keys %styles;
+
+       our $showkeys = exists $get{keys} && $get{keys} ne '0';
+       print "\n<style> .no {visibility:hidden} </style>" unless $showkeys;
+       print "\n<style> .no, .alias {opacity:.5} </style>"
+               if $showkeys and $get{keys} eq 'ghost';
+:>
+
+<script><!--
+function setmode(classname) {
+       // set style for each #rows>li>ul>li to display:none unless it matches classname
+       var showclass = classname ? ' '+classname+'(?!\\w)' : '^$';
+       var parentskip = /^keys/;
+       var row = document.getElementById('rows').firstChild;
+       do {
+               if (row.tagName == 'LI' && row.firstChild.tagName == 'UL'
+               && !row.firstChild.className.match(parentskip)) {
+                       var el = row.firstChild.firstChild;
+                       if (el) do {
+                               if (el.tagName == 'LI') {
+                                       el.style.display = el.className.match(showclass) ? 'block' : 'none';
+                               }
+                       } while (el = el.nextSibling);
+               }
+       } while (row = row.nextSibling);
+
+       // update H2 to reflect the first part of a currently active (but hidden) H3
+       var h3s = document.getElementsByTagName('H3');
+       for (var i = 0; i < h3s.length; i++) {
+               if (h3s[i].parentNode.style.display != 'block') continue;
+               document.getElementsByTagName('H2')[0].innerHTML = h3s[i].firstChild.data;
+       }
+} // setmode
+//--></script>
+
+<body>
+
+<h1>NetHack cheat sheet</h1>
+
+<h2>normal gameplay</h2>
+
+<ul id="rows">
+
+<li class="row">
+       <ul class="keys omni">
+       <li class="mo" onclick="setmode()"><b>Esc</b>
+               <!-- not as static anymore, but never bothered; just see ^[ -->
+       </ul>
+</li>
+
+<:
+our %sign = (
+       arg    => $ascii ? '.' : '·',  # described as 'dot'
+       argi   => $ascii ? ':' : ':',
+       motion => $ascii ? '|' : '↕',
+       alias  => $ascii ? 'see: ' : '»',
+       up     => $ascii ? 'up'    : '▲',
+       right  => $ascii ? 'right' : '▶',
+       down   => $ascii ? 'down'  : '▼',
+       left   => $ascii ? 'left'  : '◀',
+       sep    => $ascii ? '*'     : '•',
+       _      => exists $get{ascii} && !$ascii ? "\x{200b}" : '<wbr>',
+               # use the correct ZWNJ only when unicode is forced on
+               # default to use unofficial html for best support
+);
+
+use Shiar_Sheet::Keyboard;
+my $keys = Shiar_Sheet::Keyboard->new({do 'nethack.inc.pl'});
+$keys->map($get{map}) or undef $get{map};
+$keys->print_rows($get{static});
+:>
+</ul>
+
+<hr>
+
+<div class="help">
+       <div class="left">
+               <dl class="legend legend-types">
+               <dt class="ci">
+                       <dd>
+               <dt class="pm">direction
+                       <dd>Direction to move to or target a command (<:= $sign{motion} :>).
+               <dt class="po">move
+                       <dd>Other character movement.
+               <dt class="co">act
+                       <dd>Direct action command: takes a turn.
+               <dt class="mi">info
+                       <dd>Informational command: shows/does something without ending the turn.
+               <dt class="mo">invertory
+                       <dd>Display invertory menu.
+               <dt class="mv">menu
+                       <dd>Enters some other menu.
+               <dt class="me">
+                       <dd>
+               </dl>
+       </div>
+
+       <div class="right">
+               <dl class="legend legend-options">
+               <dt>key<:= $sign{arg} :>
+                       <dd>Commands with a dot need at least one argument afterwards.
+               <dt>key<:= $sign{motion} :>
+                       <dd>Requires a direction afterwards.
+               <dt>key<:= $sign{argi} :>
+                       <dd>Asks for an inventory item.
+               </dl>
+
+               <ul class="legend legend-set">
+               <li>keyboard <strong>map</strong> is
+                       <:= $get{map} ? 'set to ' : '' :><em><:= $keys->{map} :></em>
+               <li><strong>ascii</strong> mode is
+                       <:= exists $get{ascii} && 'forced ' :><em><:=
+                               $ascii ? 'on' : 'off' :></em>
+               <li><strong>keys</strong> are
+                       <em><:= $showkeys ? 'always shown' : 'hidden if unassigned' :></em><:=
+                               !exists $get{keys} && ' by default' :>
+               <li>default <strong>style</strong> is
+                       <:= defined $get{style} && 'set to ' :><em><:= $style :></em>
+               </ul>
+       </div>
+</div>
+
+<p class="footer">
+       <a href="http://sheet.shiar.nl/nethack">sheet.shiar.nl<strong>/nethack</strong></a>
+       <a href="git://dev.shiar.net/vi-cheat"><:= "v$VERSION" :></a>
+       created by Shiar <:= $sign{sep} :>
+       <a title="Licensed under the GNU Affero General Public License, version 3"
+          href="http://www.fsf.org/licensing/licenses/agpl-3.0.html">AGPLv3</a> <:= $sign{sep} :>
+       last update <:
+               use Time::Format qw(time_format);
+               print time_format('yyyy-mm-dd', (stat 'nethack.inc.pl')[9]);
+       :>
+</p>
+
+</html>