diff -aurN slashem-0.0.7E6F2/ChangeLog.jnh jslashem-0.0.7E6F2-J0.0.8/ChangeLog.jnh
--- slashem-0.0.7E6F2/ChangeLog.jnh	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/ChangeLog.jnh	2004-08-23 09:51:36.000000000 +0900
@@ -0,0 +1,661 @@
+Mon Aug  2 2004  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.3-0.4リリース
+	* 複数形で願った時の処理を#ifdefで分離
+	* 変身と名前返答の時に日本語が使えなかった問題を修正
+	* 翻訳追加修正
+
+Thu Apr 29 2004  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.3-0.3リリース
+	* 虐殺で日本語が使えなかった問題を修正
+	* 乗馬用アイテムの効果が効いていなかった問題を修正
+	* 翻訳追加修正
+
+Thu Feb 19 2004  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.3-0.2リリース
+	* win/ttyがBCCでコンパイルできなくなっていた問題を修正
+	* 翻訳追加修正
+
+Wed Dec 31 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.3-0.1リリース
+	* NetHack-3.4.3ベースに対応
+
+Thu Dec  5 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.2-0.2リリース
+	* win/ttyでスコア一覧表示が乱れる問題を修正
+	* 素手で酸のブロッブを殴るとまれにクラッシュする問題を修正
+	* 翻訳追加修正
+
+Thu Nov 11 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.2-0.1リリース
+	* NetHack-3.4.2ベースに対応
+
+Wed Sep  3 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.1-0.4リリース
+	* 翻訳追加修正
+
+Sat Aug  9 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.1-0.3リリース
+	* Reportパッチを分離
+	* コマンドラインで指定した名前の漢字コードが変換されない問題を修正
+	* 翻訳追加修正
+
+Thu Jun  9 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.1-0.2リリース
+	* winnt/ttyで日本語入力が出来ない問題を修正
+	* 翻訳追加修正
+
+Thu Apr 10 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.1-0.1リリース
+	* NetHack-3.4.1ベースに対応
+
+Sat Feb 14 2003  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.0-0.10リリース
+	* unix/X11対応開始
+	* Radarパッチを分離
+	* Newbieパッチを分離
+	* CenterPopupsパッチを分離
+	* MinGWでのコンパイルに対応
+	* jjjを廃止
+	* 公式セキュリティパッチ(C340-137)を適用
+	* winnt/win32で多くのウィンドウを表示すると落ちる問題(W340-14)を修正
+	* 翻訳追加修正
+
+Fri Dec 20 2002  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.0-0.9リリース
+	* 死の谷で上り階段が生成されないことがある問題(C340-27)を修正
+	* 武闘家でレベル13の時冷気耐性がつかない問題を修正
+	* Windows/GUI版がWin95系で文字化けする問題を修正
+	* Boland C++でのコンパイルに対応
+	* Fighterパッチを分離
+	* 本家でGnome対応されているので旧GTK_GRAPHICS関係を削除
+	* 翻訳追加修正
+
+Sat Sep 16 2002  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.0-0.8リリース
+	* ボーパルブレードで幽霊を切ると落ちる問題を修正
+	* 怪物が人間に変身したときに職業表示が文字化けする問題を修正
+	* 翻訳追加修正
+
+Mon Aug  5 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* dos(djgpp)対応開始
+
+Sat Aug  3 2002  Kentaro Shirakata  <argrath@ub32.org>
+
+	* JNetHack-3.4.0-0.7リリース
+	* jGuidebookを追加
+	* data.base,quest.datをそれぞれjdata.base,jquest.datに変更
+	* rogueレベルで'@'が文字化けする問題を修正
+	* 地雷でその上にある巨石/像が壊れると落ちる問題(C340-2)を修正
+	* 翻訳追加修正
+
+Sun Jul  7 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* JNetHack-3.4.0-0.6リリース
+	* フロストブランドの攻撃が命中すると落ちる問題を修正
+	* 数字を"/"コマンドで調べると落ちる問題を修正
+	* 音に関するメッセージが全く表示されていなかった問題を修正
+	* 翻訳追加修正
+
+Fri Jun 14 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* JnetHack-3.4.0-0.5リリース
+	* winnt/ttyで表示が乱れる問題を仮修正
+	* アイテム命名が反映されないことがある問題を修正
+	* 翻訳追加修正
+
+Fri May 24 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* JNetHack-3.4.0-0.4リリース
+	* トリックの鞄を#lootしたときのダメージがおかしいバグを修正
+	* "."で休憩できないバグを修正
+	* プレイヤーがモンスターを飲み込むと無条件で石化するのを修正
+	* 翻訳追加修正
+
+Thu May 16 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* JNetHack-3.4.0-0.3リリース
+	* winnt/tty対応開始
+	* data.baseを処理
+	* 翻訳追加修正
+
+Sun May 12 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* JNetHack-3.4.0-0.2リリース
+	* winnt/win32対応開始
+	* default.nhを読もうとするとエラーになるのを修正
+	* 翻訳追加修正
+
+Thu May  9 2002  Kentaro Shirakata  <argrath@ub32.org>
+	* NetHack-3.4.0ベース JNetHackテストリリース(3.4.0-0.1)
+
+Sun Apr    2 2000	Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.2.0βバージョンリリース
+
+Tue Mar   14 2000	Hideaki YOSHIFUJI (吉藤英明) <yoshfuji@ecei.tohoku.ac.jp>
+	* IPV6に対応
+
+Fri Mar   10 2000	Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.2.0αバージョンリリース
+
+Wed Mar   1 2000	Issei Numata  <issei@jnethack.org>
+	* オープニングメッセージを変更
+	* NetHack-3.3.0ベース JNetHack開発開始
+
+Sat Feb  12 2000	Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.1.5 リリース
+
+Mon Feb  7 2000		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.1.4 リリース
+
+Mon Feb  7 2000		Issei Numata  <issei@jnethack.org>
+	* NetHack-3.2.3に対応
+
+Wed Dec  1 1999		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.1.3 リリース
+
+Sun Nov 21 1999		Issei Numata  <issei@jnethack.org>
+	* プロキシをオプションで指定できるよう変更
+
+Thu Nov 19 1999		Issei Numata  <issei@jnethack.org>
+	* 3Dマップ対応
+
+Wed Nov 17 1999		Issei Numata  <issei@jnethack.org>
+	* bonesシステム導入
+
+Tue Nov 9 1999		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.1.2 リリース
+
+Tue Nov 9 1999		Issei Numata  <issei@jnethack.org>
+	* proxyを使えるように変更
+	* 細かいバグ修正
+
+Mon Nov 8 1999		Issei Numata  <issei@jnethack.org>
+	* httpでスコアを転送できるように変更
+
+Tue Nov 2 1999		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.1.1 リリース
+
+Mon Nov 1 1999		Issei Numata  <issei@jnethack.org>
+	* 西暦2000年問題に対処
+	* menuに HP/MP barを追加
+	* 細かいバグ修正
+
+Thu Oct 28 1999		Issei Numata  <issei@jnethack.org>
+	* monster detectionなどで画面が止まらない問題を修正
+	* 伝統的文字モードを選択可能に
+
+Mon Oct 24 1999		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.1.0 リリース
+	* 細かいバグ修正
+
+Sat Oct 23 1999		Issei Numata  <issei@jnethack.org>
+	* credit画像追加
+
+Thu Oct 21 1999		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.0.7.19991021リリース
+
+Tue Oct 19 1999		Issei Numata  <issei@jnethack.org>
+	* JNetHack-1.0.7.19991019リリース
+
+Sat Oct 16 1999		Issei Numata  <issei@jnethack.org>
+	* warningを減らす
+	* 細かいバグ修正
+
+Sat Oct 9 1999		Issei Numata  <issei@jnethack.org>
+	* newbieモード追加
+
+Sat Oct 9 1999		Issei Numata  <issei@jnethack.org>
+	* jnethack-1.0.6.3公開
+
+Fri Oct 8 1999		Issei Numata  <issei@jnethack.org>
+	* タイルを使用しないときはradarを非表示にするように修正
+	* radarの上で ESCを押したら非表示に修正
+	* optionに radarの on/offの切替を追加
+	* スコアサーバに接続するとき20秒でタイムアウトするよう変更
+	* その他細いバグを修正
+
+Fri Oct 8 1999		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* スコア表示のバグを修正
+
+Tue Oct 7 1999		ITAKURA Mitsuhiro <ita@gold.koma.jaeri.go.jp>	
+	* 透明ピックスマップの高速化
+
+Tue Oct 7 1999		Issei Numata  <issei@jnethack.org>
+	* optionに homeurlを追加
+	* デフォルトのオプション変更
+	  perm_invent -> off
+	  TEXT_COLORをデフォルトで #define
+
+Tue Oct 7 1999		Issei Numata  <issei@jnethack.org>
+	* 透明ピックスマップに対応
+	* JNetHack.ad を HACKDIRに置けるように変更
+
+Tue Oct 6 1999		Issei Numata  <issei@jnethack.org>
+	* jnethack-1.0.6.1公開
+
+Tue Oct 6 1999		Issei Numata  <issei@jnethack.org>
+	* Linuxでも簡単にコンパイルできるよう修正
+	* ripのcolormapが正しく設定されない問題を修正
+	* レーダーの上でもキーを受けつけるよう修正
+	* X版はオプションの有無にかかわらず、number padを移動に
+	  使えるように修正
+
+Tue Oct 5 1999		Issei Numata  <issei@jnethack.org>
+	* jnethack-1.0.6公開
+
+Mon Oct 4 1999		Issei Numata  <issei@jnethack.org>
+	* デフォルトのオプション値変更
+	  autopickup -> off
+	  perm_invent -> on
+	  mail -> off
+	  windowtype 'tty' -> 'x11'
+
+Sun Oct 3 1999		Issei Numata  <issei@jnethack.org>
+	* レーダー表示追加
+	* 色数が少ないモニタでも動作するよう変更
+
+Thu Oct 1 1999		Issei Numata  <issei@jnethack.org>
+	* 標準タイルを32x32のものに変更
+	* スコア表示を変更
+
+Wed Sep 30 1999		Issei Numata  <issei@jnethack.org>
+	* スコアをホストに転送するシステム作成
+
+Wed Sep 24 1997		Issei Numata  <issei@nna.so-net.or.jp>
+	* class名を NetHackから JNetHackへ変更
+
+Mon Sep 8 1997		uchidak@creo.co.jp
+Mon Aug 25 1997
+	* メッセージの修正
+
+Tue Jul 22 1997		KIHARA Hideto <kihara@shiratori.riec.tohoku.ac.jp>
+	* メッセージの修正
+
+Thu Jul 3 1997		Kentaro Shirakata <shira@kdel.info.eng.osaka-cu.ac.jp>
+	* nethack-3.2.2ベースのjnethackの開発に着手
+	* quest.txtの訳語修正．
+
+Tue Dec 24 1996		Issei Numata  <issei@nna.so-net.or.jp>
+	* jnethack-1.0.5.4.1 release
+	* 性別女でKを選ぶとPになってしまうバグを本当に修正．
+
+Sat Nov 23 1996		Issei Numata  <issei@nna.so-net.or.jp>
+	* jnethack-1.0.5.4 release
+	* ドキュメントの修正(とてもここに名前は書き切れません)
+	* メッセージの修正(とてもここに名前は書き切れません)
+
+Fri Sep  6 1996		Issei Numata  <issei@jaist.ac.jp>
+	* jnethack-1.0.5.2 release
+
+Fri Aug 23 1996		Issei Numata  <issei@jaist.ac.jp>
+	* Ｆの死体や幽霊が例の場所に現われない問題の修正．
+
+Thu Aug 22 1996		Issei Numata  <issei@jaist.ac.jp>
+	* X11で perminventをオプションで指定するとアイテムを拾ったときに
+	  落ちる問題の修正
+	* ユーティリティrecoverで回復できない問題の修正． (NetHackのバグ) 
+	* Class Genocideしたときのメッセージが英語の修正． 
+	* 聖器(アーティファクト)を願って失敗したときのメッセージが英語． 
+
+Wed Aug 21 1996		Issei Numata  <issei@jaist.ac.jp>
+	* japanese/jlib.c の is_kanji1の修正
+	* 職業 Fの Questでの Guardのメッセージが変
+	* 職業 Fで Neutralの神が英語
+	* 薬がジュースや水になるときのメッセージ．
+	* 毒の攻撃を食って死ぬと怪物の名前．
+	* たまにマップの文字が化ける(とくに jisで遊んでいる時)問題．
+	* 聖器(アーティファクト)に触れて死んだときの死因が英語
+	* 落書の文字が化ける
+
+Mon Aug 19 1996		Issei Numata  <issei@jaist.ac.jp>
+	* jnethack-1.0.5.1 release
+
+Mon Aug 19 1996		Issei Numata  <issei@jaist.ac.jp>
+	* いくつかの日本語関係の表示のバグを解決
+
+Fri Aug 16 1996		Issei Numata  <issei@jaist.ac.jp>
+	* jnethack-1.0.5 release
+
+Thu Aug 15 1996		Issei Numata  <issei@jaist.ac.jp>
+	* 短いファイルネームのシステムに対応できるよう，jtrns_*.cを改名
+
+Wed Aug 14 1996		Issei Numata  <issei@jaist.ac.jp>
+	* DOS/Vで tile表示を可能に．
+
+Thu Aug  8 1996		Issei Numata  <issei@jaist.ac.jp>
+	* Jだけのオリジナル職業(F)を追加
+
+Fri Aug  2 1996		juan@super.win.or.jp (Kenji Gotoh)
+	* sjisで wishingするとき旨くいかないことがある問題を修正
+
+Wed Jul 31 1996		Satoh Yoshiyuki <yo-satou@system.hitachi.co.jp>
+	* いくつかのメッセージの間違いを修正
+
+Tue Jul 30 1996		Hiramoto Kouji (平本光二 ) <hiramoto@Nurse.Angel.nanako.or.jp>
+	* PCでスタート時に英語のメッセージが出る問題の修正
+
+Mon Jul 29 1996		Hideto KIHARA <kihara@shiratori.riec.tohoku.ac.jp>
+	* いくつかのメッセージの間違いを修正
+
+Thu Jul 25 1996		fukui@nm.nmcc.co.jp (Terushige Fukui)
+	* 存在しないものを wishしたときに落ちる問題を修正
+
+Thu Jul 25 1996		Issei Numata  <issei@jaist.ac.jp>
+	* 日本語による wishingを一部可能に
+
+Wed Jul 24 1996		Hideto KIHARA <kihara@shiratori.riec.tohoku.ac.jp>
+	* jtrns_monの副作用の問題を修正
+
+Tue Jul 23 1996		juan@super.win.or.jp (Kenji Gotoh)
+	* ステータス欄を全て書き換えてしまう問題を修正
+
+Mon Jul 22 1996		Naoki Hamada <nao@sbl.cl.nec.co.jp>
+	* DEC graphics で漢字が化ける問題を修正
+
+Mon Jul 22 1996		Hideto KIHARA <kihara@shiratori.riec.tohoku.ac.jp>
+	* メッセージのまちがいを修正
+	* jconjのバグの修正
+	* 「ら」抜き言葉の修正
+
+Sat Jul 20 1996		shira@kdel.info.eng.osaka-cu.ac.jp (Kentaro Shirakata)
+	* PCでコンパイルエラーが出るのを修正
+
+Fri Jul 19 1996		Issei Numata  <issei@jaist.ac.jp>
+	* いくつかの Warningを削除
+	* formatの間違いを修整
+
+Thu Jul 18 1996		Issei Numata  <issei@jaist.ac.jp>
+	* 言語モードの切替がうまくいかないのを修整
+
+Thu Jul 18 1996		Issei Numata  <issei@jaist.ac.jp>
+	* jnethack-1.0.4-alpha release
+
+Fry Jun 21 1996		Issei Numata  <issei@jaist.ac.jp>
+	* nethack-3.2.1ベースのjnethackの開発に着手
+
+Thu May  2 1996		Issei Numata  <issei@jaist.ac.jp>
+	* nethack-3.2.0ベースのjnethackの開発に着手
+
+Sun Jun  4 1995		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-1.0.3 release
+
+Sun Jun  4 1995		nishi@bsd1.kb.nec.co.jp
+	* nh14.bdfをパッケージに追加
+
+Fri Jun  2 1995		Issei Numata <issei@jaist.ac.jp>
+	* スコアリストのメッセージのバグを修整．
+	* ドキュメントの間違いを修整．
+
+Thu Feb 23 1995		Hiramoto Kouji (平本光二 ) <hiramoto@kubota.co.jp>
+	* resotre.c メッセージを修整．
+
+Thu Feb 21 1995		Hiramoto Kouji (平本光二 ) <hiramoto@kubota.co.jp>
+	* cmd.c 「あなたは」が重複するのを修整．
+
+Thu Jan 5  1995		asami@cs.berkeley.edu
+	* 全般的にメッセージの誤訳を修整．
+
+Tue Dec 27 1994		藤枝 和宏 (FUJIEDA Kazuhiro) <fujieda@jaist.ac.jp>
+	* fountain.c 流し台の水を飲んで薬が出てきたときのメッセージを修整
+
+Tue Dec 20 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-1.0.2 release
+
+Thu Oct 27 1994		narusawa@nsis.cl.nec.co.jp (Masaru Narusawa)
+	* NEWOS用のパッチ追加．
+
+Fri Oct 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* X11版で長いメッセージが出たときにpanicになる問題を修正．
+	* 自分自身をgenocideしたときのメッセージを修正．
+
+Mon Sep 19 1994		Kentaro Shirakata <shira@kdel.info.osaka-cu.ac.jp>
+	* mhitm.c ニンフが他のモンスターを攻撃したときにcodeを吐く問題を
+	  修正．
+
+Mon Sep 12 1994		Issei Numata <issei@jaist.ac.jp>
+	* オリジナルモードで死んだときスコアファイルが英名になるのを修正．
+	* 怪物の攻撃で病気になったときのメッセージを修正．
+	* helpに英名-和名の変換テーブル追加．
+
+Thu Sep  8 1994		Issei Numata <issei@jaist.ac.jp>
+	* コカトリスの死体で死んだときのメッセージを修正．
+	* メデューサで石化したときのメッセージを修正．
+	* 迷宮から脱出したときのメッセージを修正．
+	* たくさんの誤訳，誤字を修正．
+	* quest.txtを整形．
+	* jisモードのとき \033$@, \033$Jも有効になるように修正．
+
+Mon Aug 29 1994		Issei Numata <issei@jaist.ac.jp>
+	* 環境変数と設定ファイル両方を設定した場合のエラーを修正．
+
+Mon Aug 29 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-1.0.1 release
+
+Tue Aug 23 1994		Issei Numata <issei@jaist.ac.jp>
+	* vorpale bladeが首を切り落したときのメッセージを正しく表示する
+ 	  よう修正．
+
+Sat Aug 20 1994		Issei Numata <issei@jaist.ac.jp>
+	* 細いメッセージの修正．
+
+Fri Aug 19 1994		Kentaro Shirakata <shira@kdel.info.osaka-cu.ac.jp>
+	* data.base改訂．
+
+Wed Aug 17 1994		Masayuki Koba <masa-k@sag.hitachi-sk.co.jp>
+	* NetHack.ad 16ドットフォントをデフォルトで使うよう修正．
+
+Sat Aug 13 1994		Yasuhito Futatsuki <futatuki@jaist.ac.jp>
+	* 迷宮から抜けたときのメッセージの不具合を修正．
+
+Sun Aug  7 1994		Kentaro Shirakata <shira@kdel.info.osaka-cu.ac.jp>
+	* DJGPP版パッケージ追加．
+
+Sun Aug  7 1994		高田　幸治 <HAE00146@niftyserve.or.jp>
+	* MSC版パッケージ追加．
+
+Thu Aug  4 1994		Yoshiki Ogino <azrael@cosmos.ces.kyutech.ac.jp>
+	* questpgr.c アライメント表示のバグを修正．
+ 
+Thu Aug  4 1994		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* mk_artifact以外で，artifactを得たとき正しく作成されないのを修正．
+	* class genocideで殺すことができなかったモンスターの名前を正しく
+	  表示できるよう修正．
+
+Mon Aug  1 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-1.0.0 release
+
+Mon Aug  1 1994		Issei Numata <issei@jaist.ac.jp>
+	* 細かいメッセージの修正．
+
+Sun Jul 31 1994		Kentaro Shirakata <shira@kdel.info.osaka-cu.ac.jp>
+	* 刃のない武器で攻撃されたときのメッセージを修正．
+
+Mon Jul 25 1994		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* magicbane関係のメッセージを修正．
+
+Mon Jul 25 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.3.1 beta test starts
+
+Sut Jul 23 1994		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* artifact.c magicbaneの訳を修正．
+
+Mon Jul 25 1994		Issei Numata <issei@jaist.ac.jp>
+	* topl.c 長い文字列のフォールディングを修正．
+	* 長い名前をつけた際に文字化けするのを修正．
+
+Sut Jul 23 1994		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* jtrns_{obj,mon}.dat 細い訳語の間違いを修正．
+
+Sut Jul 23 1994		Issei Numata <issei@jaist.ac.jp>
+	* jGuideBook.txtを JNetHackにあわせ修正．
+
+Fri Jul 22 1994		shira@kdel.info.osaka-cu.ac.jp (Kentaro Shirakata)
+	* jGuideBook.txtをパッケージに追加．
+
+Thu Jul 21 1994		Issei Numata <issei@jaist.ac.jp>
+	* jtrns_obj.dat 武器を強くする巻物->武器に魔法をかける巻物へ変更．
+	* getline.c kinput2から漢字を入力できるように変更．
+
+Thu Jul 21 1994		Yoshiaki KASAHARA <kasahara@csce.kyushu-u.ac.jp>
+	* 麻痺->眩暈に変更．
+
+Thu Jul 21 1994		Issei Numata <issei@jaist.ac.jp>
+	* objnam.c nemesisの死体名が正しく表示されるよう修正．
+
+Thu Jul 21 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.3.0 beta test starts	
+
+Tue Jul 19 1994		s92458km@sfc.keio.ac.jp (the kunedog)
+	* quest.txt Turist の翻訳追加
+
+Fri Jul 15 1994		Issei Numata <issei@jaist.ac.jp>
+	* priest.c 天使の名前が正しく表示されるよう修正．
+	* end.c topten.c 死んだときのメッセージの不具合を修正．
+	* objnam.c 長い名前の文字でcoreを吐く問題を修正．
+
+Thu Jul 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* jconj.c jtrns_obj.dat 聖器の名前が正しく表示されないのを修正．
+
+Thu Jul 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.2.4 beta test starts
+
+Thu Jul 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* termcap.c -decで文字が化けるのを修正．
+	* 聖器に全部和名を与えた．
+
+Wed Jul 13 1994		Issei Numata <issei@jaist.ac.jp>
+	* jtrns_{obj,dat}をソースに埋めこみ，makedefsで対応するよう修正．
+	* warningを減らした．
+
+Tue Jul 12 1994		Hideharu Miyazaki <hideha-m@ascii.co.jp>
+	* printf系の引数の間違いを修正
+	* extern.h locomotion2のプロトタイプを追加
+	* コメントアウトのミスを修正
+
+Sun Jul 10 1994		Issei Numata <issei@jaist.ac.jp>
+	* eat.c コカトリスで石化したときのメッセージの不具合を修正．
+
+Thu Jul 7 1994		<mya@jaist.ac.jp
+	* quest.txt Knight の翻訳追加
+
+Thu Jul 7 1994		<nishi@aries.bsd1.kb.nec.co.jp>
+	* options.c mallocが0クリアしない問題を修正
+
+Wed Jul 6 1994		Yoshiaki KASAHARA <kasahara@csce.kyushu-u.ac.jp>
+	* config.h の不具合を修正
+
+Tue Jul 5 1994		Issei Numata <issei@jaist.ac.jp>
+	* invent.c 発見済み宝石が正しく表示されるように修正
+	* objnam.c 名づけられたアイテムが日本語らしくなるよう修正
+	* end.c ペットに殺されたときの墓石のメッセージを修正
+	* wintty.c -decでダンジョンがたまに文字化けするのを修正
+	* メッセージやアイテムの細い修正
+
+Sun Jul 2 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.2.3 beta test starts
+
+Sun Jul 2 1994		Issei Numata <issei@jaist.ac.jp>
+	* メッセージやアイテムの細い修正
+
+Tue Jun 28 1994		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* quest.txt Elfの翻訳追加
+
+Mon Jun 27 1994		Issei Numata <issei@jaist.ac.jp>
+	* quest.txt Rogueの翻訳追加
+
+Sun Jun 26 1994		Issei Numata <issei@jaist.ac.jp>
+	* デフォルトのプログラム名を nethack -> jnethackへ変更
+
+Sun Jun 26 1994		HAMADA Naoki <nao@jaist.ac.jp>
+	* dialog.c Ctrl-m アクションを追加
+
+Thu Jun 23 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.2.2 beta test starts
+
+Thu Jun 23 1994		<hideki@bsd1.kb.nec.co.jp>
+	* win/X11/winmesg.c X11R6でコアを吐く問題を修正．
+
+Thu Jun 23 1994		Issei Numata <issei@jaist.ac.jp>
+	* win/X11/*.c リソースに書かなくても国際化に対応するよう修正．
+
+Wed Jun 22 1994		Kazuhiro Fujieda <fujieda@jaist.ac.jp>
+	* files.c .jnethackrcを先に見るようにした．
+	* pager.c 罠の名前が正しく出るように変更．
+	* jtrns_obj.dat	訂正
+	* pray.c 「献上する」を正しく表示されるよう変更．
+	
+Tue Jun 21 1994		Yasuhito Futatsuki <futatuki@jaist.ac.jp>
+	* shk.c 店のなかでものを壊したときにcoreを吐くのを修正
+
+Mon Jun 16 1994		Issei Numata <issei@jaist.ac.jp>
+	* data.baseの翻訳着手
+
+Mon Jun 16 1994		Issei Numata <issei@jaist.ac.jp>
+	* do_name.c hallucination時のbogus monsterを正しく表示するよう修正
+	* sys/unixmain.c -sオプション時に文字化けするのを回避
+
+Mon Jun 15 1994		Issei Numata <issei@jaist.ac.jp>
+	* jconj.c 終止形からも活用できるようにjconj_adj 修正
+
+Mon Jun 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* jconj.c isspace_8 修正
+
+Mon Jun 14 1994		Koji Kishi <kis@rqa.sony.co.jp>
+	* engrave.c jconj.c sony newsでiskanji2がかちあう問題を回避
+
+Mon Jun 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.2.1 beta test starts
+
+Tue Jun 14 1994		Issei Numata <issei@jaist.ac.jp>
+	* end.c 終了時にcoreを吐くのを修正
+
+Tue Jun 14 1994		HAMADA Naoki <nao@jaist.ac.jp>
+	* shk.c shopkeeperのセリフ修正
+
+Mon Jun 14 1994		Yasuhito Futatsuki <futatuki@jaist.ac.jp>
+	* dokick.c 物を蹴って死んだときのメッセージ訂正
+
+Mon Jun 13 1994		Issei Numata <issei@jaist.ac.jp>
+	* -sオプションで漢字コードを正しく認識するように改良
+	* 終了時に画面が乱れるのを修正
+
+Mon Jun 13 1994		Issei Numata <issei@jaist.ac.jp>
+	* jnethack-0.2.0 beta test starts
+
+Mon Jun 13 1994		Yasuhito Futatsuki <futatuki@jaist.ac.jp>
+	* dotogglelangの戻り値を 0に設定
+
+Mon Jun 13 1994		Issei Numata <issei@jaist.ac.jp>
+	* JIS/SJIS端末で表示ができるように改良
+	* .nethackrcで漢字コードを選択できるように改良
+
+Sun Jun 12 1994		Issei Numata <issei@jaist.ac.jp>
+	* quest.txt に Cavemanの翻訳追加
+
+Sat Jun 11 1994		Issei Numata <issei@jaist.ac.jp>
+	* JNetHack-0.1.9 test starts.
+
+Sat Jun 11 1994		Issei Numata <issei@jaist.ac.jp>	
+	* quest.txt に Barbarianの翻訳追加
+	* アイテム名，怪物名 オジナル<->日本語の切り替えサポート
+	* jtrns_obj.dat改訂 
+
+Fri Jun 10 1994		Issei Numata <issei@jaist.ac.jp>
+	* 発見済みアイテムの英名/和名併記
+	* 「水の薬」->「水」,「フルーツジュースの薬」->「フルーツジュース」
+	* rumor.fal改訂
+
+Thu Jun  9 1994		Tomoyuki Shiraishi <tshira@mtl.t.u-tokyo.ac.jp>
+	* quest.txt に Healerの翻訳追加
+
+Tue Jun  7 1994		Issei Numata <issei@jaist.ac.jp>
+	* JNetHack-0.1.8 test starts.
+
diff -aurN slashem-0.0.7E6F2/ChangeLog.jsm jslashem-0.0.7E6F2-J0.0.8/ChangeLog.jsm
--- slashem-0.0.7E6F2/ChangeLog.jsm	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/ChangeLog.jsm	2004-08-27 18:21:50.437500000 +0900
@@ -0,0 +1,173 @@
+Fri Aug 27 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+	* JSlash'EM-0.0.7E6F2-J0.0.8リリース
+	* JNetHack-3.4.3-0.4のリリースに伴い0.3との差分を適用。
+	* 特殊技能「武器落し」で相手の武器を奪ったときに落ちる危険性があ
+	  った問題を修正。
+	* 炎の魔術師のクエスト情報に一部誤りがあり、これを修正。
+	* ドッグフードを食べたときの最後のメッセージを変更。
+	* ドッペルゲンガーが怪物に変身するときのメッセージを微妙に変更。
+	* 泉でエクスカリバーを生成したときのメッセージを変更。
+	* ナイトメアレベルや衛士クエストの名のついたアイテムの名称を翻訳。
+	* 飲み込み怪物に飲み込まれて死んだときの啓蒙メッセージを修正。
+	* 蜘蛛人間が変身した時のメッセージを翻訳。
+	* "body spells"と"protection spells"の翻訳を"肉体"と"護り"に統一。
+	* "Magic Memory Vault"の翻訳を「魔法のメモリー倉庫」に統一。
+	* "gas spore"の和訳を「包子ガス」から「胞子ガス」に変更。
+	* 大アルカナ"Judgement"の誤訳を修正（『正義』→『審判』）。
+	* ドラゴンがブレスを吐いたときのメッセージを修正。
+	* drains (life)の翻訳を「生命力吸収」に統一。
+	* JNetHackの修正取込：heavy iron ballの翻訳を「重い鉄球」に統一。
+	* 店のサービスのアイテム選択メッセージを修正。
+	* 本家のバグである、鉄球を引きずった状態でディスプレーサービース
+	  トと位置交換したときにplace_object: obj not freeで例外となって
+	  しまう問題を仮修正。
+	* 特殊技能「魔力収集」の終了メッセージを修正。
+	* 翻訳編集時のミスでヒツジの鳴き声が表示されなくなっていたのを修
+	  正。
+	* jdata.baseの検索ユニークモンスター名称が『』に対応していなかっ
+	  たので対応。
+	* JNetHackの修正取込：氷の渦に変化して怪物を飲み込んでいる時のメ
+	  ッセージを修正。
+	* JNetHackの修正取込：ワルキューレクエストに訪れたときのメッセー
+	  ジを修正。
+
+Sat Jul 31 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+	* JSlash'EM-0.0.7E6F2-J0.0.7リリース
+	* 起動時に自動リカバーするオプションを有効化
+	* クエスト中のメッセージやコメント行が80文字を超えてしまい、クエ
+	  ストネメシス等のメッセージ表示に不具合が出ていた問題を修正。
+	* 句読点、クエスチョン、エクスクラメーションの統一。
+	* 和訳テーブルに"Azog the Orc King"の訳を追加。
+	* 手榴弾やガス弾を使用したときのメッセージ、売り物を使用したとき
+	  のメッセージ、使用中のアイテム状態の表示を修正した。
+	* J0.0.6から入れたYou_hearにて、文字列領域の未初期化バグを修正。
+	* JNetHackの修正取込：変化する怪物を日本語で入力できるようにする。
+	* 啓蒙時の「能力維持の属性」、「今の姿から変化できない属性」の表
+	  示形式を変更。
+	* 「美しい 水のニンフ」等、モンスターの修飾語の後にスペースが入
+	  る問題を修正。
+
+Sun Jul 25 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+
+	* JSlash'EM-0.0.7E6F2-J0.0.6リリース
+	* カーソルによる位置指定時のヘルプ「背景シンボルによる移動」の訳
+	  の修正。
+	* UNIXのMakefileにおけるjGuidebookとjgypsy.txtに関する処理の記述
+	  抜けの修正。
+	* 衝撃の魔法等での怪物への命中時のメッセージの未訳を修正。
+	* ジプシーのスリーカード勝利時のメッセージの修正。
+	* asid potionの和訳が「酸の」になっていたためこれを修正。
+	* 特殊技能「武器落とし」を学習したときのメッセージの修正。
+	* 冒険者の攻撃を怪物が防具によって防いだときのメッセージの修正。
+	* 怪物の攻撃が怪物の防具によって防がれたときのメッセージの修正。
+	* 店の扉を破壊したときのメッセージの修正。
+	* 敵対的な吸血鬼との会話文の修正。
+	* 盗賊の特殊技能「クリティカル」の未訳の修正。
+	* 特殊技能を全く持っていない状態での特殊技能を使用しようとしたと
+	  きのメッセージの未訳を修正。
+	* 床の文字や墓石を発見したときの補助メッセージの修正。
+	* 毒吹きの魔法や毒の息が冒険者に命中したときのメッセージの修正。
+	* 名前の付いたモンスターにその名前を継承したモルドが生えたときの
+	  メッセージにて、名前のみではなくモンスター名(モルド)も表示する
+	  ように修正。
+	* ユニコーンが宝石を受け取ったときのメッセージの修正。
+	* bullの和訳名の牡牛の後ろについていた半角スペースを除去。
+	* 呪われた軽量化の鞄の中で未識別なアイテムが消滅したときのメッセ
+	  ージを修正。
+	* アンデッドを使役する魔法書が登場したことによる魔法書一覧のズレ
+	  の修正。
+	* 指輪の強化値の前に入っている半角スペースを削除。武器、防具等の
+	  強化値の前には半角スペースは入っていないため、統一した。
+	* vコマンドによるバージョン情報にて日本語版のバージョン情報を出す
+	  ように修正。
+	* モンスター名にて和訳変換テーブルを通していないものがいくつかあ
+	  ったため、これを修正。
+	  - 怪物の装備しているコカトリスの死体をガントレットを装備して
+	    いない状態で 鞭で奪ったとき
+	  - ババウに凝視されて死んだとき
+	  - 飲み込み攻撃を持つ怪物に変身して爆発する怪物を飲み込んで、
+	    飲み込んだ怪物が爆発してそのダメージで死んだとき
+	  - アンデットスレイヤーで、変化制御能力なしでアンデッドに変化
+	    しそうになったとき
+	  - 怪物に変化しているときに、敵対的な吸血鬼に話し掛けたとき
+	  - 紫ワームに変身して緑スライムを飲み込んだとき
+	  - 金庫の番人に魔法のメモリー倉庫の外で殺されたときの倉庫に建
+	    てられる墓のメッセージに含まれる冒険者の変身していた怪物名
+	* 指がぬるぬるしていたときの啓蒙のメッセージの修正。
+	* 犬や猫の缶詰を食べて反感を買ったときのメッセージの修正。
+	* JNetHackの修正取込：まとまったアイテムを重さの関係上分けて持ち
+	  上げたときのメッセージの修正。
+	* JNetHackの修正取込：/コマンド等での水中・溶岩中のアイテム表示
+	  の修正。
+	* JNetHackの修正取込：墓場のある階における幻覚時のメッセージの修
+	  正。
+	* 冒険者を飲み込んでいる怪物を石化させたときのメッセージの修正。
+	* You_hearを使用している箇所における和訳の不具合の修正。
+	* 飛び道具を投げられて死んだときの墓の死因表示の不具合の修正。
+
+Sat Jul 10 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+
+	* JSlash'EM-0.0.7E6F2-J0.0.5リリース
+	* JNetHackの修正取込：幻覚時の薬を混ぜたときのメッセージ修正
+	* JNetHackの修正取込：考古学者クエストの床文字の和訳
+	* ユニークモンスターの名称統一：今回は仮に固有名のみ『』で囲む
+	  ことにしました。
+	* 職業「郷士」を「衛士」に変更。
+	* 衛士のクエストの会話にて、「ビーフェザー」を「ビーフィーター」
+	  に変更。
+	* アイテム、モンスターの和訳変換テーブルを大幅修正。
+	* 「常闇の海」フロアの床メッセージを修正。
+	* SLASH'EMで追加された獣人の性別名称が表示されるようにした。
+	* 啓蒙表示を修正：消化不良の指輪装備時。
+	* 簡易啓蒙表示にて職業と性別を翻訳。
+	* 過去に食べたことのあるモンスターと同じシンボルのモンスターの
+	  肉の缶詰を食べたときの記憶に関するメッセージの和訳変換ミスの
+	  修正。
+	* 死因「裏切られて死んだ」が抜けていたことによる死因・脱出メッセ
+	  ージのずれていたのを修正。
+	* 冒険者が吸血鬼に血を吸われたときのメッセージを翻訳。
+	* 名前のついたアイテム／未識別の聖器の名前が表示されていなかった
+	  のを修正。
+	* 透明なアイテム、霞んだアイテムの修飾語を翻訳。
+	* 能力回復の薬を飲んだときのメッセージを修正。
+	* テレパシーを得たときのメッセージを修正。
+	* "mage"の和訳が統一されていなかったので「魔術師」に統一。
+	* 職業「修行僧」の称号「木の習い手」を「風の習い手」に修正。
+	* ドッグフード等を食べたときの吐き気の連鎖メッセージにて「あなた
+	  は」が重複していたのを修正。
+	* ゲーム起動時のコピーライトを追加。
+
+Sun Jul  4 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+
+	* JSlash'EM-0.0.7E6F2-J0.0.4リリース
+	* 弾丸の数詞を「発分の」にした
+	* 銃器の数詞を「丁の」にした
+	* defsyms[].explanationの訳抜け修正
+	* 銃器のセレクター選択時のバグを修正
+	* UNIXの場合の設定ファイルを、.jslashemrc、.jnethackrcの順に読み
+	  込むように修正。
+	* steel bootsの訳語「鋼鉄の靴」を追加。
+	* 店の鑑定サービスのメッセージを修正。
+	* ペットが金貨拾うと落ちるバグを修正。
+
+Fri Jul  2 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+
+	* JSlash'EM-0.0.7E6F2-J0.0.3リリース
+	* Makefile.mscとMakefile.bccにてMSWINタイルモードでコンパイルでき
+	  るようにした。
+	* jquest.txtのSlash'EM独自部分の翻訳が完了した。
+	* 翻訳修正
+
+Mon Jun 28 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+
+	* JSlash'EM-0.0.7E6F2-J0.0.2リリース
+	* Slash'EM独自の未訳部分を翻訳
+	* Makefile.mscを使用できるように修正
+	* 翻訳追加修正
+
+Wed Jun 23 2004  Masaki Miyaso  <so-miya@sourceforge.jp>
+
+	* JSlash'EM-0.0.7E6F2-J0.0.1暫定リリース
+	* JNetHack-3.4.3-0.3をSlash'EM-0.0.7E6F2に適用
+	* Makefile.bccを使用できるように修正
+	* 翻訳追加修正
diff -aurN slashem-0.0.7E6F2/INSTALL.jnh jslashem-0.0.7E6F2-J0.0.8/INSTALL.jnh
--- slashem-0.0.7E6F2/INSTALL.jnh	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/INSTALL.jnh	2004-06-10 08:55:10.000000000 +0900
@@ -0,0 +1,74 @@
+
+                               JNetHack
+                                   
+         Copyright 1993-1997  I.Numata, S.Miyashita, N.Hamada
+                   2002-2003  K.Shirakata
+
+
+                             INSTALL NOTE
+                                   
+    まず，ドキュメントに目を通せ．全てはそれからだ．
+                                -- K.E. Aganimot, Science & Technology より
+
+    必要な情報がすべてドキュメントに書いてあるとはかぎらない．
+                                -- N.N. Adamah, the Tao of NetHack より
+
+0)
+
+JNetHackは，NetHackに対するソースパッチと，各機種用のバイナリの二種類
+の形態で配布されています．ソースからコンパイルするのは少々面倒ですの
+で，特に理由がなければバイナリを利用することをお勧めします．
+
+JNetHackをコンパイルする場合は，まずオリジナルの英語版を一度コンパイ
+ルしてみることを強くお勧めします．その方が間違いや問題の発見がしやす
+くなるでしょう．NetHackのコンパイルは決して単純ではありません，注意深
+く一歩一歩，問題を解決して行くのが大切です．
+
+次のファイルにはいかにして Nethack を構築するかが書かれています．
+
+        sys/msdos/Install.dos (MS-DOS)
+        sys/unix/Install.unx (UNIX)
+        sys/winnt/Install.nt (MS Windows)
+
+より正確にコンパイルするため熟読することをお勧めします．また次のファ
+イルには JNetHackのコンパイル方法が書かれています．詳しくはそちらの
+ファイルを参考にしてください．
+
+	japanese/Install.dos
+	japanese/Install.lnx
+	japanese/Install.nt
+	japanese/Install.unx
+
+                                NOTICE
+
+    注意書きには時として有益な情報もあるが
+    その殆どが無益なくだらない情報だ．
+                                        -- I. Atamun, タバーンな人生より
+
+1)環境設定について
+
+UNIXでの環境設定ファイルは .nethackrcより先に .jnethackrcを見に行きま
+す．このため英語版のと共存が可能です．また新たに追加された環境変数と
+して，`kcode'があります．値は jis,sjis,eucを取ります．
+
+OPTIONS=kcode:jis
+
+のようにして，環境設定ファイルの一番最初に設定してください．以後の環境
+の漢字コードは設定した値になります．
+
+2)
+JNetHackで追加されたコマンドとして，「`」があります．キーを押す毎に
+オリジナルモードと日本語モードが切りかわります．オリジナルモードでは，
+'i','I',';','/'で表示される物体名や怪物名が英語になります．またアイテ
+ムは識別しないとオリジナルの名前になりません．
+
+
+                           ABOUT BUG REPORT
+
+    特定できるバグは，たいしたバグではない．何がバグかわからないの
+    が問題なのだ．
+                                -- Otihorih, Creatures in Palace より
+
+
+3.4 対応は http://jnethack.sourceforge.jp/ で行っています．
+コメント等はこちらに頂けるとありがたいです．
diff -aurN slashem-0.0.7E6F2/README.jnh jslashem-0.0.7E6F2-J0.0.8/README.jnh
--- slashem-0.0.7E6F2/README.jnh	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/README.jnh	2004-06-10 08:55:10.000000000 +0900
@@ -0,0 +1,57 @@
+				   
+			       JNetHack
+				   
+	 Copyright 1993-2000  I.Numata, S.Miyashita, N.Hamada
+	           2002-2003  K.Shirakata
+
+			   COPYRIGHT NOTICE
+
+JNetHack is Japanization of Nethack-3.4.3. You must read
+original license (dat/license) and obey it to redistribute and modify
+this program.  Japanization part of JNetHack obey original license
+completely.  Japanization part copyright belong to the authors(see
+below).
+
+JNetHackは NetHack-3.4.3に日本語化を施したものです．JNetHackを再配布する
+際はオリジナルのNetHack-3.4.3のライセンス (dat/license)をよく読んでくだ
+さい．日本語化された NetHackは，オリジナルの配布規定に完全に従っています．
+日本語化された部分の Copyrightは作者らにあります(下記参考)．また，オリジ
+ナルのライセンスで言うところの NetHackとは JNetHack をも含むとします．
+
+
+			     著作権者一覧
+
+Issei Numata		HAMADA Naoki		Shigehiro Miyashita
+Tomoyuki Shiraishi	Kazuhiro FUjieda	Kunedog
+Shinkou Awatsu		Takeshi Nishimura	高田幸治
+Kentaro Shirakata	板倉充洋		樋口雄一
+Haruko Numata
+
+				 謝辞
+				   
+以下に，たわいもないことから厳しいことまで，貴重な人生の一部分をくだら
+ないことに没頭した人間の名を示す．
+				   
+aBE TOru		HAMADA Naoki		Shigehiro Miyashita
+Shinkou Awatsu		Tomoyuki Shiraishi	Masayuki Koba
+Kunedog			Kazuki Jo		Kaoru Maeda
+Toshinori Nagaoka	Takashi Murase		SAKAMOTO Kei
+Hanataka Shinya		Toshiyuki Maeshima	Shigenori Imanaka
+Tetsuya Fujii		Atsushi Nishitani	Tohru Ishii
+Kenji Tonami		Yoshiaki KASAHARA	Kazuhiro Fujieda
+Yasuhito FUTATSUKI	Kunihito Yamamori	Ryouko Hayashi
+Akashi Fujiwara		Takeshi Nishimura	Hideharu Miyazaki
+Kentaro Shirakata	NAKANISHI Yoshiaki	Kouji Takada
+MAKOTO Matsushita	Sayu			IIDA Yosiaki
+Satoshi Asami		OZAWA Sakuro		FUCHIGAMI Masachika
+KIHARA Hideto		UCHIDA Toshiaki		Satoh Yoshiyuki
+Terishige Fukui		Yamamoto Hirotaka	Hiramoto Kouji
+MORIMOTO Kenji		内田　和洋		Noritaka Ishizumi
+Yosuke Mitsumath	Kenji Gotoh		Terushige Fukui
+うえだ さとし		清水頭			Hirata Makoto
+FUmiki Niioka		Akira Tsuneduka		Tsubai Masanari
+Shinmyoh Koji		Yukihiko Aoki		Hideaki YOSHIFUJI
+久留賢治		Niizato Manabu		箱山 洋
+G-HAL
+
+および，dq-mlのメンバー
diff -aurN slashem-0.0.7E6F2/README.jsm jslashem-0.0.7E6F2-J0.0.8/README.jsm
--- slashem-0.0.7E6F2/README.jsm	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/README.jsm	2004-07-31 15:35:16.000000000 +0900
@@ -0,0 +1,30 @@
+JSlash'EM 0.0.7E6F2-J0.0.7
+
+			      JSlash'EM
+
+	 Copyright 1993-2000  I.Numata, S.Miyashita, N.Hamada
+	           2002-2003  K.Shirakata
+	           2004       M.Miyaso, S.Sakusha
+
+			   COPYRIGHT NOTICE
+
+JSlash'EM is Japanization of Slash'EM-0.0.7 with JNetHack-3.4.3 patch.
+You must read original license (dat/license) and obey it to redistribute
+and modify this program.  Japanization part of JNetHack obey original
+license completely.  Japanization part copyright belong to the authors
+(see below).
+
+JSlash'EMはSlash'EM-0.0.7にJNetHask3.4.3のパッチを当てた上でNetHackとは異
+なるSlash'EM独自の部分の和訳を行ったものです。JSlash'EMを再配布する際はオ
+リジナルのSlash'EM-0.0.7のライセンス (dat/license)をよく読んでください．
+日本語化された Slash'EMは，オリジナルの配布規定に完全に従っています．日本
+語化された部分の Copyrightは作者らにあります(下記参考)．また，オリジナル
+のライセンスで言うところの NetHackとは JNetHack をも含むとします．
+
+まだいくつか不完全な部分が残っていると思いますがどうかご容赦ください。
+
+
+			     著作権者一覧
+
+Masaki Miyaso (So-Miya)		Shiganai Sakusha
+README.jnhに記述されているJNetHackの著作権者の方々
diff -aurN slashem-0.0.7E6F2/dat/Arch.des jslashem-0.0.7E6F2-J0.0.8/dat/Arch.des
--- slashem-0.0.7E6F2/dat/Arch.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/Arch.des	2004-07-10 15:37:34.000000000 +0900
@@ -200,10 +200,16 @@
 OBJECT:random,random,random
 OBJECT:random,random,random
 # Treasure?
-ENGRAVING:random,engrave,"X marks the spot."
-ENGRAVING:random,engrave,"X marks the spot."
-ENGRAVING:random,engrave,"X marks the spot."
-ENGRAVING:random,engrave,"X marks the spot."
+#ENGRAVING:random,engrave,"X marks the spot."
+#ENGRAVING:random,engrave,"X marks the spot."
+#ENGRAVING:random,engrave,"X marks the spot."
+#ENGRAVING:random,engrave,"X marks the spot."
+#
+#ENGRAVING:random,engrave,"×印がつけられている．"
+ENGRAVING:random,engrave,"×印地点"
+ENGRAVING:random,engrave,"×印地点"
+ENGRAVING:random,engrave,"×印地点"
+ENGRAVING:random,engrave,"×印地点"
 # Random traps
 TRAP:"spiked pit",(24,02)
 TRAP:"spiked pit",(37,00)
diff -aurN slashem-0.0.7E6F2/dat/Yeoman.des jslashem-0.0.7E6F2-J0.0.8/dat/Yeoman.des
--- slashem-0.0.7E6F2/dat/Yeoman.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/Yeoman.des	2004-08-10 13:42:26.000000000 +0900
@@ -326,7 +326,8 @@
 MONSTER:'@',"watchman",(05,14),peaceful
 MONSTER:'@',"watchman",(06,14),peaceful
 MONSTER:'@',"watchman",(07,14),peaceful
-MONSTER:'@',"prisoner",(08,14),"William Penn",peaceful
+#MONSTER:'@',"prisoner",(08,14),"William Penn",peaceful
+MONSTER:'@',"prisoner",(08,14),"ウィリアム・ペン",peaceful
 # Bell Tower
 #	Planned by Richard I "The Lionhearted", completed in 1200s.
 #	Elizabeth I was held here during her imprisonment.
@@ -334,7 +335,8 @@
 #	This tower contains the warning bell that calls the garrison
 #	to arms.
 #	...So that's where the Bell of Opening is from!
-ENGRAVING:(02,14),burn,"In case of trouble, ring bell."
+#ENGRAVING:(02,14),burn,"In case of trouble, ring bell."
+ENGRAVING:(02,14),burn,"何かあったときは呼び鈴をお使いください．"
 DOOR:closed,(03,14)
 # Gentleman Gaoler's (Jailer's) Lodgings
 #	This is the home of the Gentleman Gaoler, who oversees the
@@ -402,7 +404,8 @@
 #	Colonel Blood's attempted theft in 1671.  Talbot Edwards
 #	was the Assistant Keeper of the Jewels.
 DOOR:open,(31,03)
-OBJECT:'%',"corpse",(31,02),uncursed,"watchman",0,"Talbot Edwards"
+#OBJECT:'%',"corpse",(31,02),uncursed,"watchman",0,"Talbot Edwards"
+OBJECT:'%',"corpse",(31,02),uncursed,"watchman",0,"タルボット・エドワーズ"
 # Constable Tower
 #	Built by Henry III.
 #	This is the home of the Constable of the Tower, a lord
diff -aurN slashem-0.0.7E6F2/dat/blkmar.des jslashem-0.0.7E6F2-J0.0.8/dat/blkmar.des
--- slashem-0.0.7E6F2/dat/blkmar.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/blkmar.des	2004-06-28 00:37:32.000000000 +0900
@@ -29,23 +29,36 @@
 REGION: (03,01,73,16), lit, "black market", filled
 BRANCH: (01,01,01,01), (0,0,0,0)
 DOOR: open, (02,14)
-ENGRAVING: (01,03), engrave, "Pets are not allowed in the shop"
-ENGRAVING: (01,05), engrave, "Thieves will be killed."
-ENGRAVING: (01,07), engrave, "Sorry about the mess. Remember, ask if you need help!"
-ENGRAVING: (01,09), engrave, "Don't even think about stealing anything."
+#ENGRAVING: (01,03), engrave, "Pets are not allowed in the shop"
+ENGRAVING: (01,03), engrave, "店内へのペット同伴はご遠慮ください"
+#ENGRAVING: (01,05), engrave, "Thieves will be killed."
+ENGRAVING: (01,05), engrave, "泥棒には死，あるのみ．"
+#ENGRAVING: (01,07), engrave, "Sorry about the mess. Remember, ask if you need help!"
+ENGRAVING: (01,07), engrave, "申し訳ありませんが店内は散らかっております．御用のときはお声をおかけください！"
+#ENGRAVING: (01,09), engrave, "Don't even think about stealing anything."
+ENGRAVING: (01,09), engrave, "万引きしようなどとは思わないことだ．"
 # black marketeer's assistants:
 # from The Hobbit (Tolkien)
-MONSTER: 'T', "rock troll",  (03,03), "William", asleep, peaceful
-MONSTER: 'T', "rock troll",  (03,12), "Thomas", asleep, peaceful
+#MONSTER: 'T', "rock troll",  (03,03), "William", asleep, peaceful
+MONSTER: 'T', "rock troll",  (03,03), "ウィリアム", asleep, peaceful
+#MONSTER: 'T', "rock troll",  (03,12), "Thomas", asleep, peaceful
+MONSTER: 'T', "rock troll",  (03,12), "トーマス", asleep, peaceful
 # from the Bible
-MONSTER: 'H', "frost giant", (03,16), "Goliath", asleep, peaceful
+#MONSTER: 'H', "frost giant", (03,16), "Goliath", asleep, peaceful
+MONSTER: 'H', "frost giant", (03,16), "ゴリアテ", asleep, peaceful
 # from Greek mythology & high-energy physics
-MONSTER: 'n', "wood nymph",  (03,09), "Daphne",  asleep, peaceful
+#MONSTER: 'n', "wood nymph",  (03,09), "Daphne",  asleep, peaceful
+MONSTER: 'n', "wood nymph",  (03,09), "ダフネ",  asleep, peaceful
 # Add your favorite monsters here.  Make them peaceful and named,
 # otherwise they will not behave like assistants.
-MONSTER: '&', "balrog",  (03,04), "Njalnohaar",  asleep, peaceful
-MONSTER: '&', "pit fiend",  (03,02), "Hilvuuloth",  asleep, peaceful
-MONSTER: 'c', "cockatrice",  (03,13), "Wilbur",  asleep, peaceful
-MONSTER: 'c', "cockatrice",  (03,08), "Simon",  asleep, peaceful
-MONSTER: ':', "rhaumbusun",  (03,11), "Izzy",  asleep, peaceful
+#MONSTER: '&', "balrog",  (03,04), "Njalnohaar",  asleep, peaceful
+MONSTER: '&', "balrog",  (03,04), "ニャルノハール",  asleep, peaceful
+#MONSTER: '&', "pit fiend",  (03,02), "Hilvuuloth",  asleep, peaceful
+MONSTER: '&', "pit fiend",  (03,02), "ハイルヴーロス",  asleep, peaceful
+#MONSTER: 'c', "cockatrice",  (03,13), "Wilbur",  asleep, peaceful
+MONSTER: 'c', "cockatrice",  (03,13), "ウィルバー",  asleep, peaceful
+#MONSTER: 'c', "cockatrice",  (03,08), "Simon",  asleep, peaceful
+MONSTER: 'c', "cockatrice",  (03,08), "シモン",  asleep, peaceful
+#MONSTER: ':', "rhaumbusun",  (03,11), "Izzy",  asleep, peaceful
+MONSTER: ':', "rhaumbusun",  (03,11), "イズィー",  asleep, peaceful
 
diff -aurN slashem-0.0.7E6F2/dat/endgame.des jslashem-0.0.7E6F2-J0.0.8/dat/endgame.des
--- slashem-0.0.7E6F2/dat/endgame.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/endgame.des	2004-06-10 08:55:10.000000000 +0900
@@ -9,11 +9,21 @@
 # Players are supposed to sacrifice the Amulet of Yendor on the appropriate
 # shrine.
 
+#
+#	Japanese version Copyright (c) Issei Numata 2000
+#	changing point is marked `JP' (94/1/6)
+#	JNetHack may be freely redistributed.  See license for details. 
+#
+
 MAZE:"earth",' '
 FLAGS: noteleport,hardfloor,shortsighted
-MESSAGE: "Well done, mortal!"
-MESSAGE: "But now thou must face the final Test..."
-MESSAGE: "Prove thyself worthy or perish!"
+#JP
+#MESSAGE: "Well done, mortal!"
+#MESSAGE: "But now thou must face the final Test..."
+#MESSAGE: "Prove thyself worthy or perish!"
+MESSAGE: "よくやった，人間よ！"
+MESSAGE: "しかし，汝は最後の試練に直面している．．．"
+MESSAGE: "汝自身価値あるものか否かを示せ！"
 
 GEOMETRY:center,center
 # The player lands, upon arrival, in the
@@ -128,8 +138,11 @@
 FLAGS: noteleport,hardfloor,shortsighted
 # The following messages are somewhat obtuse, to make then
 # equally meaningful if the player can see or not.
-MESSAGE: "What a strange feeling!"
-MESSAGE: "You notice that there is no gravity here."
+#JP
+#MESSAGE: "What a strange feeling!"
+#MESSAGE: "You notice that there is no gravity here."
+MESSAGE: "なんと奇妙な気持だ！"
+MESSAGE: "あなたはここには重力がないことに気がついた．"
 GEOMETRY:center,center
 # The player lands, upon arrival, in the
 # lower-left area.  The location of the
@@ -378,7 +391,8 @@
 
 MAZE:"water",' '
 FLAGS: noteleport,hardfloor,shortsighted
-MESSAGE: "You find yourself suspended in an air bubble surrounded by water."
+#MESSAGE: "You find yourself suspended in an air bubble surrounded by water."
+MESSAGE: "あなたは水中の空気の泡のなかに浮遊している．"
 GEOMETRY:center,center
 # The player lands upon arrival to an air bubble
 # within the leftmost third of the level.  The
@@ -475,9 +489,12 @@
 
 MAZE:"astral",' '
 FLAGS: noteleport,hardfloor,nommap,shortsighted
-MESSAGE: "You arrive on the Astral Plane!"
-MESSAGE: "Here the High Temples of the aligned gods are located."
-MESSAGE: "You sense alarm, hostility, and excitement in the air!"
+#MESSAGE: "You arrive on the Astral Plane!"
+#MESSAGE: "Here the High Temples of the aligned gods are located."
+#MESSAGE: "You sense alarm, hostility, and excitement in the air!"
+MESSAGE: "あなたは精霊界に到着した！"
+MESSAGE: "ここにはあなたの神の大神殿がある．"
+MESSAGE: "あなたは危険を感じ，興奮した．"
 GEOMETRY:center,center
 MAP
                               ---------------                              
diff -aurN slashem-0.0.7E6F2/dat/jcmdhelp jslashem-0.0.7E6F2-J0.0.8/dat/jcmdhelp
--- slashem-0.0.7E6F2/dat/jcmdhelp	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jcmdhelp	2004-06-28 14:02:02.000000000 +0900
@@ -0,0 +1,128 @@
+^       罠の種類を調べる
+^[      コマンドをキャンセルする
+^A      前のコマンドを繰り返す
+^C      ゲームをやめる
+^D      何かを蹴る (普通は扉)
+^E      部屋を探す (ウィザードモードのみ)
+^F      その階の地図を画く (ウィザードモードのみ)
+^G      怪物をつくる (ウィザードモードのみ)
+^I      道具を識別する (ウィザードモードのみ)
+^J      レベルを上げる (ウィザードモードのみ)
+^O      特殊な階の場所を知る (ウィザードモードのみ)
+^P      前のメッセージを見る
+^R      画面を書きなおす
+^T      その階で瞬間移動する
+^V      違う階へ瞬間移動する (ウィザードモードのみ)
+^W      望みをかなえる (ウィザードモードのみ)
+^X      あなたの属性を見る (細かい情報は発見・ウィザードモードのみ)
+^Y      変身する．（できるなら）
+^Z      ゲームを中断する (定義しているなら)
+a       道具を使用する
+A       鎧を全て脱ぐ
+b       南西に歩く
+B       何かにぶつかるまで南西に歩く
+^B      何かが見えるまで南西に歩く
+c       扉を閉める
+C       怪物に名前をつける
+d       物を置く
+D       種類を選んで物を置く
+e       何か食べる
+E       床のほこりに文字を書く
+g       次に方向を指定すると何かにぶつかるまで歩く
+G       次に方向を指定すると何かが見えるまで歩く
+h       西に歩く (number_padが設定されているときは，ヘルプ)
+H       何かにぶつかるまで西に歩く
+^H      何かが見えるまで西に歩く
+i       あなたの持ち物一覧を見る
+I       種類を選択して持ち物一覧を見る
+j       南に歩く (number_padが設定されているときは，他の場所に飛ぶ)
+J       何かにぶつかるまで南に歩く
+^J      何かが見えるまで南に歩く
+k       北に歩く (number_padが設定されているときは，何かを蹴る)
+K       何かにぶつかるまで北に歩く (number_padが設定されているときは，殺害一覧)
+^K      何かが見えるまで北に歩く
+l       東に歩く (number_padが設定されているときは，箱の中身を略奪する)
+L       何かにぶつかるまで東に歩く
+^L      何かが見えるまで東に歩く
+m       次に方向を指定すると，ものを拾わず、戦闘せずに移動する
+M       次に方向を指定すると，ものを拾わずに遠くに移動する
+n       南東に歩く
+N       何かにぶつかるまで南東に歩く(number_padが設定されているときは，物に名前をつける)
+^N      何かが見えるまで南東に歩く
+o       扉を開ける
+O       オプションをセットする (O?はオプションを説明する)
+p       店の勘定を払う/サービスを受ける
+P       アクセアリを身につける(指輪，魔除け，など)
+q       何かを飲む(水薬, 水, など)
+Q       ゲームをやめる
+r       巻物や魔法書を読む
+R       アクセサリをはずす(指輪，魔除け，など)
+s       罠や秘密の扉を探す
+S       ゲームを保存する
+t       何かを投げる
+T       鎧を脱ぐ
+u       北東に歩く (number_padが設定されているときは，罠をはずす)
+U       何かにぶつかるまで北東に歩く
+^U      何かが見えるまで北東に歩く
+v       バージョンを見る
+V       バージョンおよび歴史を見る (長文)
+w       武器を装備する
+W       鎧を着る
+x       主武器と補助武器と交換する
+X       探検モードに入る
+y       北西に歩く
+Y       何かにぶつかるまで北西に歩く
+^Y      何かが見えるまで北西に歩く
+z       杖をふる
+Z       魔法を唱える (定義されているなら)
+<       階段を昇る
+>       階段を降りる
+/       記号が何に対応しているか調べる
+?       ヘルプ
+&       このコマンドが何か調べる
+~       メニューシステムを使用する
+!       シェルに抜ける (定義されているなら)
+\       今までに発見された物の一覧
+_       マップで示された点に最小経路アルゴリズムで移動する
+.       その場で休む
+        何もしないでその場で休む (rest_on_spaceが定義されているなら) 
+:       そこに何があるか見る
+;       画面上の記号が何であるかを調べる
+,       足元の物を拾う
+@       pickupオプションを切り替える
+)       装備している武器を見る
+*       使用可能な装備を見る ( ),[,=,",(コマンドと連携)
+[       装備している鎧を見る
+=       身につけている指輪を見る
+"       身につけている魔除けを見る
+(       使っている道具を見る
+$       お金を数える
++       知っている魔法の一覧 (定義されているなら)
+`	オリジナルモードと日本語モードの切り替え
+#       拡張コマンド
+M-?	拡張コマンドのヘルプ (対応しているプラットフォームなら)
+M-2	二刀流戦闘の切り替え (number_padが設定されていないなら)
+M-a     持ち物一覧の調整 (fixinvオプションが必要)
+M-b     盗む
+M-c     誰かに話しかける
+M-d     物を何かに浸す
+M-e     武器の技量を高めるまたは見る
+M-f     鍵をこじあける
+M-i     物の特別な力を使う
+M-j     他の位置の飛びうつる
+M-k     武器の技量を高めるまたは見る
+M-l     床の上の箱の中身を略奪する
+M-m     怪物の特別能力を使う (定義されているなら)
+M-n     アイテムや物に名前をつける
+M-o     神に供物を捧げる
+M-p     神に祈る
+M-r     ランプをこする
+M-s     座る
+M-t     特殊技能を使用する
+M-u     罠をはずす (通常はしかけられた物)
+M-v     コンパイル時のオプションを表示する
+M-w     顔を拭う
+M-y     変身する
+
+
+
diff -aurN slashem-0.0.7E6F2/dat/jdata.base jslashem-0.0.7E6F2-J0.0.8/dat/jdata.base
--- slashem-0.0.7E6F2/dat/jdata.base	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jdata.base	2004-08-25 20:56:58.453125000 +0900
@@ -0,0 +1,5828 @@
+#	SCCS Id: @(#)data.base	3.4	2002/12/28
+#	    $Id: data.base,v 1.14 2003/12/11 09:49:05 j_ali Exp $
+#   Copyright (c) 1994, 1995, 1996 by the NetHack Development Team
+#   Copyright (c) 1994 by Boudewijn Wayers
+#   Copyright (c) 2002 by the Slash'EM Development Team
+#   NetHack may be freely redistributed.  See license for details.
+#
+# This is the data.base for SLASH'EM
+#
+# This is the source file for the "data" file generated by `makedefs -d'.
+# A line starting with a # is a comment and is ignored by makedefs.
+# Any other line not starting with whitespace is a creature or an item.
+#
+# Each entry should be comprised of:
+# the thing/person being described on a line by itself, in lowercase;
+# on each succeeding line a <TAB> description.
+#
+# If the first character of a key field is "~", then anything which matches
+# the rest of that key will be treated as if it did not match any of the
+# following keys for that entry.  For instance, `~orc ??m*' preceding `orc*'
+# prevents "orc mummy" and "orc zombie" from matching.
+#
+#   The demons are all listed first because makedefs used to have to give
+#   them special handling for #ifndef INFERNO; it doesn't matter any more.
+アブバソール
+abbathor
+#[SLASH'EM 0.0.7E6]
+	Abbathor is the sole evil dwarven god, the great master of the
+	greed and avarice that plagues so many of that otherwise noble
+	race. He is a hunched, twisted creature, warped by his own
+	greeds, jealousies, and desires. Like many other deities, his
+	name is often invoked by followers of other gods to keep him away
+	from one's treasure.
+師範
+abbot
+	というのも，長い間ランドルフ伯には，彼の7番目の息子トマス
+	は，大修道院長かその類のものにするより他に，どうしようもな
+	いということが，はっきりしていたのである．1226年に生まれた
+	彼は子供のころから，補食性の鷲になること，あるいは鷹狩りや
+	馬上試合，その他の紳士的娯楽にふつうの興味をしめすことにさ
+	え，不可解な反感をもっていた．彼は大きく，重く，静かな少年
+	で，驚くほどに寡黙であった．彼はたまに衝撃的な仕方で「神と
+	はなにか」と教師にとつぜん質問する以外には，めったに口をひ
+	らかなかった．答は記録されていないが，質問した彼自身が答を
+	見つけだすにまで至ったということは，ありうる話である．
+		[ The Runaway Abbot, by G. K. Chesterton ]
+aclys
+aklys
+アキリス
+	鋲またはトゲがある短い棍棒で投げたあと装備できるよう紐が取り
+	つけられている．
+	槍を遠くへ投げるのに使う器具であるアトゥルアトゥルと混同しては
+	ならない．
+エアドレ・ファインヤ
+aerdrie faenya
+#[SLASH'EM 0.0.7E6]
+	Aerdrie  Faenya is the elven goddess of air and weather. As a rain-
+	bringer, she is revered as a source of fertility.  She is, however,
+	perceived as a somewhat distant  goddess, and the fact that she  is
+	also revered by some aarakocra slightly diminishes the  strength of
+	elven  devotion to  her (as does  her definite  neutral tendency in
+	alignment). The goddess  herself takes  delight in  the freedom  of
+	the skies, the music  of wind instruments,  and (sometimes)  fairly
+	severe and  violent thunderstorms. She is  friendly to all  avians,
+	aarakocra, ki-rin, and lammasu.
+					 [ Monster Mythology, by TSR inc. ]
+#aleax
+#アレアックス
+#	属性に反する行為に対し神の罰を与えるため使わされる精霊と言わ
+#	れている．
+*leax
+アレアックス
+#[SLASH'EM 0.0.7E6]
+	An Aleax,  according to the  AD&D Fiend Folio,  is a  creature that
+	looks exactly  like the character, and  is sent  by the character's
+	god to  punish alignment violations. Obviously  - and  luckily - in
+	Nethack this is not the case.
+*祭壇
+*altar
+	次の3種類がある．
+	1.  神殿にあるもの．生贄用[...]．石の上面には血を受けるた
+	めの溝があり，前の生贄が流した_苦しみの果てに流された血の，
+	渇いた茶色の染み_が祭壇の全体を覆っている．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.101-102, 祭壇
+
+	この世の誰にでも
+	死は遅かれ早かれおとずれる
+	父祖たちの灰と
+	神の寺院への
+	怖ろしい可能性に直面するより
+	よりよく死ぬことなどできようか?
+		[ Lays of Ancient Rome, by Thomas B. Macaulay ]
+天照大神
+#amaterasu omikami
+amat*rasu *
+	神道の太陽の女神，天照大神は神道および代々の皇室の神性の
+	中心的象徴である．最初の神，伊邪那岐命の娘の一人で，左の
+	目から生まれ，伊邪那岐命が特に寵愛したと言われている．
+	    [ Encyclopedia of Gods, by Michael Jordan ]
+琥珀*
+amber*
+	「樹脂というやつは」ウーが説明をつづけた．「しばしば昆虫をから
+	めとり，閉じこめてしまうことがあります．すると昆虫は，化石化し
+	た琥珀のなかに完璧な状態で保存される．琥珀のなかからはじつにさ
+	まざまな種類の昆虫が見つかっているんですよ．そしてそのなかには，
+	大型動物の血液を吸っていた昆虫もふくまれます」
+		[ Jurassic Park, by Michael Crichton ]
+		[ 酒井昭伸訳，早川書房 ]
+*amnesia
+maud
+記憶喪失
+	ここより立ち去り，来るなかれ
+	偽りだらけの，思い出は失く
+	月日は流れ，苦痛が訪ずれ，
+	月日は転々と流れる．
+	記憶を稲妻が走り
+	記憶がふと蘇える
+		...
+	おおMaud，愛しい真実の愛よ，
+	私が生きているかぎり，
+	あなたにはいつまでも
+	返して欲しくない借りだらけ．
+	もしあなたが私を忘れるなら
+	お願いだから
+	私に借りを作っておくれ
+	そのとき私は何を言えばいいのだろう？
+	そして，もし忘れられるなら，
+	神よ私を恥知らずとののしり，
+	この世から私を消しさるがよい．	
+		[ Maud, And Other Poems by Alfred, Lord Tennyson ]
+~イェンダーの魔除け
+*魔除け
+~amulet of yendor
+*amulet
+amulet of *
+	「完全な魔よけは，人々を不幸にするあらゆることがらから，われ
+	われを遠ざけることができる――やきもち，不きげん，思いあがり，
+	気むずかしさ，どんよく，自分勝手，怠惰．魔よけが作られた時分，
+	人々はこうしたものを，邪悪な心とよんでいた．完全な魔よけを手
+	に入れたらすばらしいと思わんか?」
+	「とても．」
+	子どもたちは，まったく熱のない調子で，いいました．
+	「そして，それは，あんたたちに力と勇気をあたえることができる．」
+	「そのほうがいいですね．」
+	と，シリル．
+	「そして，徳を．」
+	「それが手に入ったらすてきだと思うけど．」
+	と，ジェインはいいましたが，たいして興味はもっていないようすでした．
+	「そして，あんたたちの心からののぞみをかなえることができる．」
+	「今しゃべってるのは，あなたですよね．」
+	と，ロバートがいいました．
+		[ The Story of the Amulet, by Edith Nesbit ]
+		[ 魔よけ物語, 八木田宜子訳, 講談社青い鳥文庫 ]
+# 魔よけ物語(上), 講談社 青い鳥文庫, イーディス=ネズビット, 八木田宜子訳,
+# 1995, pp.55-56
+イェンダーの魔除け
+amulet of yendor
+	この神秘的な魔除けこそがあなたの探索の目的である．この魔除
+	けは定命の者にはおよそ使うことはもちろん，理解することさえ
+	できない力を持っていると言われている．モーロックの聖域の深
+	みからこれを持ってきて天上界の適切な中央祭壇に捧げた冒険者
+	は，神々より不死の生命を賜わるであろう．
+angel*
+天使
+御使い
+	イエスは答えて言われた，「良い種をまく者は人の子である．畑は世
+	界である．良い種と言うのは御国の子たちで，毒麦は悪い者の子たち
+	である．それをまいた敵は悪魔である．収穫とは世の終りのことで，
+	刈る者は御使いたちである．だから，毒麦が集められて火で焼かれる
+	ように，世の終りにもそのとおりになるであろう．人の子はその使た
+	ちをつかわし，つまずきとなるものと不法を行う者とを，ことごとく
+	御国からとり集めて，炉の火に投げ入れさせるであろう．そこでは泣
+	き叫んだり，歯がみをしたりするであろう．
+	...
+	世の終りにも，そのとおりになるであろう．すなわち，御使いたちが
+	きて，義人のうちから悪人をえり分け，そして炉の火に投げこむであ
+	ろう．そこでは泣き叫んだり，歯がみをしたりするであろう．
+	[マタイによる福音書，13:37-42, 49-50，口語訳聖書，日本聖書協会]
+anhur
+アンフル
+	戦いと狩猟のエジプトの神，彼の猛威について行ける神はほとん
+	どいなかった．他の多くの戦いの神とは違って，彼は善の力を持つ．
+	アンフルの怒りは徐々に高まるが，一度そうなると回避することは
+	不可能である．アンフルは4つの腕を持つ力強い風体である．彼は
+	しばしば巨大な槍を持って現われる．槍を持つには，2つの右手が
+	必要で，先端には太陽の破片から作られた矢じりがつけられていた．
+	彼はライオンの頭を持つ女神メハトと結婚している．
+アンク*モルポーク
+ankh-morpork
+	双子都市アンク=モルポークは，円形海岸の都市の中で最も主要な
+	ものであり，当然，数多くのギャング，盗賊ギルド，シンジーケ
+	ート他似たような組織の根城となっていた．そのおかげでこの都市
+	は裕福だったとも言える．アンク川の逆回転側，迷路のようなモル
+	ポークの小路に住む多くの貧しい人々は，張り合うギャングたち
+	のためにちょっとした仕事をしては，乏しい収入を補っていたから
+	だ．
+	    [ ディスクワールド騒動記，安田均訳，角川文庫 ]
+anshar
+アンシャル
+	バビロニアアッカド王朝の祖先．アンシャルはバビロニアの創世記
+	「エヌマエリシュ」ではラームとラハムの双子(他方はカイシャル)
+	の一人とされている．アンシャルは天と同一視されており，カイシャ
+	ルは地に同一視されている．
+	    [ Encyclopedia of Gods, by Michael Jordan ]
+ant
+* ant
+蟻
+	普通の蟻を巨大にしたこの種は，小さい種がそうであるように
+	凶暴である．様々な種が存在し，儀牲者への情け容赦ない攻撃
+	で恐れられている．
+anu
+アヌ
+	アヌはバビロニアの天の神であり，北極星の支配者である．彼は
+	バビロニアの神々の中で一番歳をとっており，全ての神の父と
+	されている天と運命の統治者である．アヌはウルクや他の町の
+	バビロニアの「アチク祭」にて力強く演じられている．
+類人猿
+人食い猿
+ape
+* ape
+	解剖学的特徴により示されるところや脳の発達により全ての霊長
+	類でもっとも進化した動物．樹上，地表をとわず，類人猿は後足
+	よりはるかに発達した前足を持つ．尻尾は完全になくなっている．
+	成長は遅く，かなり歳を取ると生殖能力を持つようになる．
+	[ A Field Guide to the Larger Mammals of Africa by Dorst ]
+
+	ゴリラのアルドには計画があった．それは素晴らしい計画だった．
+	それは正しかった．彼は知っていた．彼はそれを考え，楽しみにし
+	舌つづみを打った．そう，猿は強くなくてはいけない．猿は支配者
+	でなければならない．猿は誇りを持たなくてはいけない．猿は地上
+	を歩くときに大地を揺がさなくてはいけない．猿は地上の「ルール」
+	でなければならない．
+		[ Battle for the Planet of the Apes,
+			by David Gerrold ]
+
+#[SLASH'EM 0.0.7E6]
+	Four-handed, tailless,  mammal of  the  order of  Primates, of  the
+	sub-order  of _Anthropoidea_,  which of  all  mammals most  closely
+	resembles man (both in appearance and in behaviour).
+			  [ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+りんご
+apple
+	NEWTONIAN(形容詞)【ニュートン学説の】その理由は言えなかった
+	のだが，林檎が地面に落ちるのを発見したニュートン創案になる
+	宇宙理論に関係のある．彼の後継者ならびに弟子たちが，林檎が
+	落ちる時期を言えるまでその理論を押し進めてきている．
+	[悪魔の辞典，A．ビアス，奥田俊介，倉本護，猪狩博訳，角川文庫]
+	[ The Devil's Dictionary, by Ambrose Bierce ]
+*考古学者
+archeologist
+* archeologist
+	考古学は真理ではなく事実を探究するものである．…だから，失
+	なわれた都市や，エキゾチックな旅行や，世界をひとつ掘り出す
+	などという考えは忘れることだ．我々は地図上に埋蔵された財宝
+	を求めるわけではないし，「あそこに宝物がある」などというこ
+	とは一度もなかったし，これからもありえない．
+		[ Indiana Jones and the Last Crusade ]
+archon
+アルコン
+	アルコンは天上に住む上位種である．それらは, その異常な見掛けとは
+	違って，いちがいに悪とはいえない．アルコンは自身やまわりのものに
+	対して平和的な種である．
+
+#[SLASH'EM 0.0.7E6]
+	Archons are the primary  inhabitants of the Seven Heavens. The five
+	varieties of archon (Lantern, Hound,  Warden, Sword, and Tome) have
+	wholly different appearances.  The various types look like  spheres
+	of  light,   dog-faced  humanoids,   bear-like  humanoids,   winged
+	humanoids,  and hawk-like humanoids respectively. Although there is
+	a distinct  hierarchy among the varieties,  there is  no rivalry or
+	jealousy  there.  Each  has  his   role  to  fulfil  and   that  is
+	recognition enough for an archon.
+	However strange  and frightening  their  appearance, archons  never
+	seem evil. Rather, they appear  as beings at peace  with themselves
+	and their environment.
+					[ Monstrous Compendium 8, by TSR inc. ]
+アリオッチ
+arioch
+	アリオッチ．それはエルリックの祖先たちの守護魔神である．
+	<地獄の大公> の中でも最強の一人であり，<剣の騎士>，<七つの
+	暗黒界 の王>，<上層地獄の王>など，さまざまな異名を持つ存在．
+		[ Elric of Melnibone, by Michael Moorcock ]
+	[ メルニボネの皇子，マイクル・ムアコック，安田均訳，ハヤカワ文庫 ]
+アーケン石
+arkenstone
+#[SLASH'EM 0.0.7E6]
+	Arkenstone, Heart of the Mountain, property of the King
+	under the Mountain, is the most valued jewel that the
+	dwarves possess. It shines white light that can guide
+	your steps in the darkness, and carrying it is said
+	to increase your carrying capacity. When invoked it
+	will reveal the gold around you.
+*arrow
+*矢
+	私は空へ向かって矢を放った，
+	矢は大地へ落ちたが，場所は分らなかった．
+	矢は，あまり速く飛んだので，私には
+	行方を追うことなどできなかったのだ．
+
+	私は空へ向かって歌を歌った，
+	歌は大地へ落ちたが，場所は分らなかった．
+	そんな鋭い視力を誰が持っていよう，
+	歌の行方を追いかけられるような？
+
+	ずっと，ずっとたってから，柏の木に
+	私は矢を見つけた．矢は折れていなかった．
+	そしてあの歌もまた，初めから終りまで，
+	ある友達の心に生きていたのだ．
+		[ The Arrow and the Song,
+		  by Henry Wadsworth Longfellow ]
+		[ 矢と歌，Ｈ．Ｗ．ロングフェロー ]
+		[ 楽しい英詩集，杉本誠訳編，オセアニア出版 ]
+足利尊氏
+『足利尊氏』
+#ashikaga takauji
+*shikaga *akauji
+	足利尊氏は源一族の大名で，北条軍を打ち破るため後醍醐天皇
+	に協力した．のち後醍醐天皇が武士の力を抑えようとしたとき，
+	彼は天皇に対し反逆した．彼は後醍醐天皇を打ち負かし，光明
+	天皇を立てた．後醍醐天皇はかろうじて逃げ延び，吉野の里に
+	別の政府を立てた．この2つの王朝のある時代は南北朝として
+	知られている．	
+	[ Samurai - The Story of a Warrior Tradition, by Cook ]
+
+#[SLASH'EM 0.0.7E6]
+	On July 8, 1336,  he and his samurai entered Kyoto, forced Go-Daigo
+	to retire,  after which  he seized  power himself  and installed  a
+	puppet prince on the throne  (the current Japanese  imperial family
+	are  the   descendants  of  this   puppet  emperor  that   Ashikaga
+	installed).
+
+	Go-Daigo escaped,  though, wouldn't  admit to  have been  defeated,
+	and  opened a new "capital"  in Yoshino (south of  Kyoto), where he
+	and few  of his  descendants claimed  to be  running a  government,
+	known as  the "Southern Court". The  period between  1337 and 1392,
+	when Japan was ruled by two courts, is known as the Nambokucho.
+
+	That "government" disappeared, naturally, after a  few generations,
+	and Ashikaga's  Muromachi regime lasted for  a long  time. The last
+	Ashikaga daimyo in power was the 14th descendant of Takauji.
+asmodeus
+アスモデウス
+『アスモデウス』
+	アスモデウスは，地獄全体の総支配者であると言われている．その
+	外見は，他の悪魔と違い，角と尻尾以外は人間と同じである．触ら
+	れると，肉体は凍りついてしまう．
+アズフィンクス
+asphynx
+#[SLASH'EM 0.0.7E6]
+	This small,  inoffensive-looking snake shares the feared power
+	of petrification with its distant relatives the cockatrice and
+	basilisk. Just one touch from its blunt snout  can render  one
+	motionless for all eternity.
+		[ The New Bestiary, Wizard Endlebrook ]
+アサメ
+athame
+	魔術崇拝のイニシエーションのために聖別された儀礼用ナイフ(4つ
+	の基本道具の１つで，杖，聖杯，五芒星と一緒に使う)．伝統的に
+	アサメは両刃，黒い握り，交差した柄をもつ6インチから8インチの
+	長さの短剣である．
+アソール
+athol
+#[SLASH'EM 0.0.7E6]
+	In 1927, zoologist Ernst Bartels was in his home near the 
+	Tjidjenkol River in Java when he heard a strange cry louder than 
+	the other night sounds, a cry like "a-hool."
+	Bartels heard the sound twice more before the origin of the cries 
+	moved off into the night. Bartels soon remembered a local legend 
+	of the ahool or athol, a type of huge bat reputed to live in 
+	the area.
+
+	Locals described the bat as the size of a small child, with 
+	an 11-12 foot wingspan. The athol was supposedly covered in 
+	grayish fur and had a face similar to that of a monkey or a man. 
+	At times, it was seen sitting on the forest floor, with its wings 
+	folded beside it; it was also reputed to have feet which pointed
+	backwards. During the day (like all bats, it was nocturnal), the 
+	athol's refuge was supposedly a cave somewhere near a waterfall, 
+	although at night it would fly over the river's surface in
+	search of fish.
+
+		[ "A Belfry of Crypto-bats." by Shuker, Dr. Karl P.N. 
+		Fortean Studies 1, pp. 235-245. ]
+アテナ
+athen*
+	パラス・アテナ（ミネルウァ）は，知恵の女神で，ゼウスのむすめです
+	が，母親はありません．ゼウスの頭から生まれたのです．その愛鳥はフ
+	クロウで，ささげられた植物はオリーブです．
+	    [ Bulfinch's Mythology by Thomas Bulfinch ]
+	    [ ギリシア・ローマ神話, 野上弥生子訳, 岩波少年文庫 ]
+
+#[SLASH'EM 0.0.7E6]
+	Athena, the  Greek goddess of war and peace, the peaceful arts, and
+	wisdom.  Patron defender of many Greek cities, Athens in particular
+	(then called Pallas Athena),  she is a major  goddess of the  Greek
+	pantheon  and, according to Hesiod, the daughter  of Metis (Wisdom)
+	and Zeus, born fully  armed from his head. A goddess of  battle and
+	allegedly  a snake  goddess,  she is  a deity  who also  stands for
+	discipline against  the more unruly conduct  of such  as Hermes and
+	Poseidon.
+	Her  symbol is the Aegis,  the skin of  a sacrificial  goat. She is
+	also associated with ship-building and domestic crafts.
+			  [ after the Encyclopedia of Gods, by Michael Jordan ]
+axolotl
+	よくいるサラマンダー．無害．
+*鞄
+*袋
+bag
+bag of *
+sack
+	「さて，この三枚目のハンカチにも」ミステルが続けている．「縁が四
+	つあります．縁がつながっておるのがご覧になれますな．この四つの縁
+	を，財布の縁にしなければならん．それで完成です．外側は――」
+	「わかった！」ミュリエル嬢がやる気満々でさえぎった．「外側は内側
+	とつながってるんでしょう！　だけど時間がかかりそう．縫うのはお茶
+	のあとにしません？」バッグを脇に置くと，ふたたびティーカップを手
+	にした．「だけどなんで幸運の財布って名前なんです？」
+	老人は今まで以上に教授っぽく，にっこりと微笑みかけた．「わかりま
+	せんかな――言ってよろしいか？　内側も外側も財布，外側も内側も財
+	布．ということは世界中の富がこの小ッコヒ財布の中に入るのですぞ！」
+		[ Sylvie and Bruno Concluded, by Lewis Carroll ]
+		[ シルヴィーとブルーノ完結編, wilder訳, プロジェクト杉田玄白 ]
+b*lzebub
+*ベルゼブ*
+*ベルゼバブ*
+	「蝿の王」はヘブライ語のBa'alzevuv(ギリシャ語ではBeelzebub)
+	が変化したものである．	もともとこの名前は，辛辣で悪魔の名前
+	であると思わせるような単語の綴を間違えたものを誤訳したものだ
+	と思われる(悪魔には腐敗，破壊，堕落，ヒステリー，混乱を連想
+	させるような名前がつけられている)．
+		[ Notes on _Lord of the Flies_, by E. L. Epstein ]
+balrog
+バルログ
+	そのものは火のきわまでやって来ました．火はまるで雲がかぶさ
+	ってきたかのように，光がうすれました．ついでその物は一跳び
+	で割れめを越えました．焔は迎えるようにごうごうと燃えたけり，
+	それにからみつきました．黒い煙が渦を巻いて立ち上りました．
+	たなびくたてがみに火がついて，その者の背後に赤々と燃え上が
+	りました．その者の右手には切っ先鋭い火の舌のような刃が握ら
+	れ，左手にはたくさんの皮紐のついた鞭が握られていました．
+	「ああ！ああ！」レゴラスが声をふりしぼりました．「バルログ
+	だ！バルログが来た！」
+		   [ The Fellowship of the Ring, by J.R.R. Tolkien ]
+					      [ 評論社, 瀬田貞二訳 ]
+バルキテリウム
+チタノゼア
+baluchitherium
+titanothere
+	絶滅したサイには様々な形態が含まれる．漸新世の時代にアジアにい
+	たもっとも壮観な生き物であるバルキテリウムは知られているかぎり
+	地上最大の哺乳類である．その体は肩まで18フィートの高さで，どっし
+	りとした四肢にささえられており，4フィートの長さの頭は木の高い枝
+	の葉を食べることができた．第3期の始めのチタノゼアまた巨大な奇蹄
+	類であり，漸新世のブロントテリウムも肩まで8フィートあった．
+		[ Prehistoric Animals, by Barry Cox ]
+バナナ
+banana
+	また一歩，彼が進みでたところを見すまして，彼女は強く右の手首をひ
+	ねった．ばねがかちりと鳴るのが聞こえた．重みが手のなかにすべりお
+	りてきた．
+	「これでも食らえ！」悲鳴のような声で叫ぶなり，デイナは右腕を斜め
+	上に強くふりあげた．相手の下腹を切り裂いてやるつもりだった．腹を
+	切り裂いて，相手が湯気の立つロープさながらに内臓をばらまきながら，
+	もつれる脚でそこらをよろめきあるくさまを見物してやりたかった．と
+	ころがそのかわりに，彼は両手を腰にあてると，胸を張ってからからと
+	笑いだした．熱気を放つ顔を大きくのけぞらせ，いかにも上機嫌に，表
+	情をくしゃくしゃにゆがめて哄笑しつづけた．
+	「おやおや，たいへんだ！」そう叫んで，そこでまたひとしきり，げら
+	げらと笑った．
+	デイナは呆然とわが手を見おろした．その手が握っているのは，かたく
+	黄色いバナナだった．チキータ・バナナの青と白のステッカーまで貼っ
+	てある．おぞましさに，デイナはあわててそれを投げだした．カーペッ
+	トの上に横たわったそれは，フラッグ自身の笑みをそっくり模倣して，
+	忌まわしい黄色のにたにた笑いとなった．
+	「さあ，言うんだ．」彼がささやきかえてきた．「どうせいずれは答え
+	ることになるんだから」
+	そしてデイナも，それがそのとおりであるのをさとった．
+		[ The Stand, by Stephen King ]
+		[ ザ・スタンド, 深町眞理子訳, 文藝春秋 ] 
+*野蛮人
+蛮族
+barbarian
+* barbarian
+	まず，身装りが似ていた----鹿皮の深靴，革の短袴に鹿皮の短衣，広
+	幅の腰帯に斧と短剣を差し，だれもが痩せぎすで，顔に創痕があり，
+	目が鋭く，筋肉質の躰，そしてそろって寡黙だった．
+	彼らはいうなれば野性の男だが，しかし，キンメリア人とのあいだに
+	は，天地ほどの懸隔があった．彼らはもともと文明の子であるが，生
+	きてゆく必要から，半ば蛮族の状態に復帰していたのだが，コナンは
+	それに反して，数千年のあいだ，野性の血を変えることなく伝えてき
+	た蛮族中の蛮族だった．アキロニアの山男たちは，鍛練によって忍び
+	の術を習得したのだが，コナンはそれを身に付けて生まれてきて，動
+	きに無駄がないだけでも，彼らをはるかに遼駕していた．彼らが狼で
+	あるとすれば，コナンは猛虎であった．
+	    [ Conan - The Warrior, by Robert E. Howard ]
+	    [ コナンと古代王国の秘宝, 宇野利泰訳, 創元推理文庫 ]
+
+#[SLASH'EM 0.0.7E6]
+	Hrun the  Barbarian crept  soundlessly along  the corridors,  which
+	were lit  with a  light so  violet that  it was  almost black.  his
+	earlier  confusion was  gone. This was obviously  a magical temple,
+	and that explained everything.
+	   ...
+	Observe Hrun,  as he leaps  cat-footed across  a suspicious  tunnel
+	mouth. Even in this violet light his skin gleams  coppery. There is
+	much  gold about his person, in  the form of anklets and wristlets,
+	but otherwise  he is naked except  for a  leopardskin loincloth. He
+	took  that in the  steaming forests  of Howondaland,  after killing
+	its owner with his teeth.
+	In his right hand  he carried the magical black sword  Kring, which
+	was  forged  from a  thunderbolt  and has  a  soul  but suffers  no
+	scabbard. Hrun  had  stolen it  only  three  days before  from  the
+	impregnable  palace  of the  Archmandrite of  B'Ituni,  and  he was
+	already regretting it. It was beginning to get on his nerves.
+	"I tell you  it went down that last  passage on the  right," hissed
+	Kring in a voice like the scrape of a blade over stone.
+	"Be silent!"
+	"All I said was -"
+	"Shut up!"
+				[ The colour of Magic, by Terry Pratchett ]
+髭のある悪魔
+barbed devil
+	髭のある悪魔には特殊能力が全くない．しかし倒すのは非常に困難
+	である．
++~mongbat
++~vampire bat
+*こうもり
+*bat
+	一匹のコウモリが，外の暗闇の中を飛び回っていたが，夜毎の巡
+	回をするとき道を間違え，健康のために開けたままにしてあった
+	窓から中に入ってきた．そしてコウモリは部屋の中を，無目的に
+	馬鹿のように輪を描いて飛びはじめた．それは，神が創造された
+	うち，より低い知性しか与えられなかったものどもの中でも悪名
+	高い，コウモリに生来のものである．昔の箴言は言ったものだ．
+	「私にコウモリを見せよ．そうすればある種の住みかにあるべき
+	何かを見せよう」
+		[ A Pelican at Blandings, by P. G. Wodehouse ]
+ベック・ド・コルバン
+bec de corbin
+#[SLASH'EM 0.0.7E6]
+	農民の長柄武器であるベク・ド・コルバンの，鴉のくちばし状の刃は，
+	上流階級の戦士が愛用する重い板金鎧を刺し貫くように設計されている．
+	この武器においてくちばしは主要な特徴である．これは，平らなハンマー
+	状の頭部もしくは短い刃の様なスパイクを反対側につけた爪状の頭部に
+	よって支持される．
+*蜂
+*bee
+	有益な通常の蜂の近縁にあたるこの巨大な様々な蜂は通常小さな集団
+	を形成して現われ，それらの女王蜂のためにかかせないロイヤルゼリー
+	を作るために生きた食材を探している．極稀に女王蜂に餌が与えら
+	れている蜂の巣に誰かが誤って入ると，侵入者に対して女王蜂の身を
+	守る．
+カブト虫
+*beetle
+	(創造神は)甲虫を過度に溺愛している．
+		[ 生物学者J.B.Sホールデンによる ]
+
+	甲のような形をした羽をもつ昆虫に共通の名前(学名: Coleoptera)．
+	昆虫の10の亜綱の1つ．それらは折りたまれた後羽を覆う甲(二枚の
+	前羽)が特徴である．
+	    [ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+ビホルダー
+beholder
+#[SLASH'EM 0.0.7E6]
+	The beholder (A.K.A the eye tyrant, the sphere of many eyes) 
+	is most frequently found deep underground, although infrequently 
+	it will lair in desolate wilderness.  The globular body of this 
+	monster is supported by levitation, and it floats slowly about 
+	as it wills.  Atop the sphere are ten eyestalks, while in its 
+	central area are a great eleventh eye and a large mouth filled 
+	with pointed teeth.  Each of the eyes is said to have a different
+	magical property, all of which are deadly or malicious.  The 
+	beholder is hateful, tricky, and avaricious and is known to have 
+	a fondness for both traps and artifacts.
+		[ Adapted by Ben Lehman from Monstrous Manual, by TSR, Inc. ]
+開放のベル
+bell of opening
+	「ベルと，本と，ロウソクによる作業だ」
+	会計がためいきをついた．「我々はそれを試しましたよ，総長」
+	総長は総長のほうに身をのりだした．
+	「なに?」と総長は言った．
+	「我々はそれを試しましたと，こう申したのです，総長」会計が，
+	老人の耳にむかってどなった．「夕食後，おぼえておいででしょ
+	う? 我々はHumptemperの『蟻どもの名前』を使い，Old Tomをな
+	らしたのです」
+	「そうだった，たしかに．で，うまくいったのだろう」
+	「とんでもない，総長」
+
+	(Old Tomは大学の鐘楼にある，ひとつのひびわれた青銅のベル)
+		[ Eric, by Terry Pratchett ]
+目隠し
+blindfold
+	　この眼かくしといふのは，アマハッガー人が着物をこしらへる
+	黄色い麻布の切れっぱしで，眼のまはりをしつかりとくゝつて，
+	うしろでかたく結ぶことであつた．この麻布は，その後私の發見
+	したところによると墓場から掘り出したもので，私の想像したや
+	うに土民のこしらへたものではなかつた．
+	　序(ついで)に言つておくが，アステーンも眼かくしをされた．
+	これは，彼女が吾々に秘密を聞かすかもしれんといふ用意のため
+	だつたのであらう．
+		[ She, by H. Rider Haggard ]
+		[ 『洞窟の女王』平林初之輔訳，改造社 ]
+ブラインド*イオ
+盲目のイオ
+blind io
+	この日，たゆみない覚醒のおかげで神々の長となった“盲目のイオ”
+	は，手に顎を乗せて座り，目の前の赤大理石のテーブルに載ったゲー
+	ム盤を眺めていた．「盲目のイオの名前は，眼窩のあるべきところに，
+	のっぺらぼうの皮膚しかないところに由来する．イオの目は，感動す
+	るほど数が多いのだが，目たちはそれ自身で半ば独立した生活を送っ
+	ていた．そのうちのいくつかが，現在，テーブルの上を浮遊している．
+	    [ The Colour of Magic, by Terry Pratchett ]
+	    [ ディスクワールド騒動記，安田均訳，角川文庫 ]
+*ブロッブ
+ゼラチンキューブ
+*ウーズ
+#*プリン
+* blob
+gelatinous cube
+ooze
+* ooze
+#*pudding
+* slime
+	この巨大なアメーバのような生き物は，粘液の水たまりにしか見え
+	ないが，金属や木，加えて即席の洞窟探検者などを食べて生きてい
+	る．
+
+	　しかしわたしたちは地下鉄のプラットホームにいたのではなかった．
+	悪臭放つ虹色に輝く悪夢じみた可塑性のある柱が，十五本の足の月空で
+	床に密着して進み，いやましに不快にも速度を早め，深淵の青白い蒸気
+	がふたたび濃密になった渦巻く霧を押しやっている，その前方にわたし
+	たちはいたのだ．どんな地下鉄の列車よりもはるかに巨大で恐ろしい，
+	筆舌につくしがたいものだった―原形質の泡の無定形の塊が，自らかす
+	かに輝き，わたちたちに向かいあう，トンネルを満たす前部のいたると
+	ころに，緑がかった光を放つ疣のような何万もの一時的な目を形成した
+	り消したりしながら，あわてふためくペンギンたちを押しつぶし，同類
+	とともに邪悪にもすべてをとりさったなめらかな床をずるずるすべって
+	きたのだった．
+		[ At the Mountains of Madness, by H.P. Lovecraft ]
+		[ 狂気の山脈にて, ラヴクラフト全集4, 大瀧啓裕訳, 創元推理文庫 ]
+*プリン
+*pudding
+#[SLASH'EM 0.0.7E6]
+	「ほんとにいい天気だ」と，憂鬱な調子でプディングは言った．
+	「ペンギンと海賊であることの喜びを歌うにはね．でもなぜお前は
+	プディングで，１日中食べられてしまうのか？」
+	そしてすごいドラ声で彼は歌った：
+	
+		「オー，誰がプディングか，
+		  ポットの中にちょこんと座り，
+		  暑い火の中我慢させられる
+		  プディングなのか？
+		  オー，悲しくも本当に沢山の
+		  プディングがポットの中に．
+	
+	    ．．．
+	
+		「だけど私はプディングで，
+		  ポットの中のプディングで，
+		  あなたが私を沢山食べて
+		  腹痛起こせばいいのにな．
+		  あなたがプディング沢山食べて，
+		  熱でも出せばいいのにな！」
+	
+	「いい歌だね，アルバート」とビルが激励した．「低音の中に少し
+	ハスキーな声が混ざってたけど，君の中につまったソースのせい
+	じゃないよ．でも，明るい小さな恋人に対する謝礼として，私達は
+	夜が更ける前に君をスライスして配らなきゃならないんだ．」
+		[ The Magic Pudding: The Adventures of Bunyip Bluegum.
+		  Norman Lindsay ]
+骨の悪魔
+bone devil
+	骨の悪魔は武器と，大きな鈎のついた尾で攻撃してくる．この鈎が
+	刺さると，強さが吸い取られてしまう．
+死者の書
+*燭台
+*ろうそく
+book of the dead
+candelabrum*
+*candle
+# data.baseで引用されている本とは異なる本を訳したものなのか，
+# 内容が少し異なるようです．
+	メフィストフィリス  さてと，フォースタス，今度はどうしたい?  言っ
+		とくが，おまえは鐘と聖書と蝋燭による破門の儀式で呪われる
+		だろうぜ．
+	フォースタス  鐘と聖書と蝋燭か，蝋燭と聖書と鐘か，
+		  順序はどうでもどうせフォースタスは地獄堕ちか!
+	修道士たち，鎮魂歌を唱えるべく鐘と聖書と蝋燭をもって登場．
+		[ Doctor Faustus and Other Plays, by Christopher Marlowe ]
+# フォースタス博士 第九場, クリストファー・マーロウ, 小田島雄志訳,
+# エリザベス朝演劇集I マルタ島のユダヤ人 フォースタス博士,
+# 白水社, 1995, p205
+*靴
+*boot*
+	ファンタジーランドの長靴は異常とも思えるほど，ほとんど，あ
+	るいは決して擦り減ることがなく，靴下を履かなくとも乗馬や歩
+	行にまったく支障がない．きつかったり，靴擦れしたり，石ころ
+	が入ることはなく，くぎが靴底を突き破って足に刺さることもな
+	い．長靴の長さはふくらはぎの中頃か膝丈までが慣例となってお
+	り，着脱簡単で足の臭いがすることもない．残念ながら，このす
+	ばらしい履物の作り方は門外不出であるが，おそらく人間でない
+	種族の製法によるのだろう(ドワーフ，エルフ，ノームを見よ)．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# p.171, 長靴
+bottle
+* bottle
+#[SLASH'EM 0.0.7E6]
+	For half a buck, a vial of luck
+		Or a bottle of nifty breaks
+	Or a flask of joy, or Myrna Loy
+		For luncheon with sirloin steaks.
+	
+	Pour out a mug from this old jug,
+		And you'll never get wet in rains.
+	I've bottles of grins and racetrack wins
+		And lotions to ease your pains.
+	
+	Here's bottles of imps and wet-pack shrimps
+		From a sea unknown to man,
+	And an elixir to banish fear,
+		And the sap from the pipes of Pan.
+	
+	With the powdered horn of the unicorn
+		You can win yourself a mate;
+	With the rish hobnob; or get a job --
+		It's yours at a lowered rate.
+		[ Shottle Bop, by Theodore Sturgeon ]
+岩
+boulder
+	私はてこをよく下へ動かし，背中をのばした．岩のはしが持ちあ
+	がった．私はてこの支点をけとばした．そこで押し下げようとし
+	たとき，私は下からなにかとりだすべきものがあることを思いだ
+	した．私がてこをはずせば，岩はまた落ちてしまうだろう．私は
+	カシの木の根に座って，考えた．木が大地に立っているのを見な
+	がら，自分のやり方を調べた．私がより長いてこをもってきてい
+	たのは幸運だった．てこは，カシの根におしこむのにちょうど届
+	くだろう長さがあった．
+	てこをそこまで押し下げるのは目方のある人間には楽な仕事だろ
+	うが，私にとっては困難な戦いだった．だが，今回は私はたとえ
+	死のうともそうするつもりだった．なぜなら，私はそれができる
+	と知っていたからだ．二度私は近くまでいったが，二度とも重し
+	はふたたびそれを押し上げた．しかし三度目に自分自身を投げだ
+	したとき，私の耳にポセイドンの海の音が聞こえた．そこで，今
+	度はできるとわかった．そして，私はやった．
+		[ The King Must Die, by Mary Renault ]
+~和弓
+~ダイアナの長弓
+*弓
+~*longbow of diana
+bow
+* bow
+	「黄金の勇士ども，部署について待機するんだ．剣の柄に誓って言う
+	が，この旅はついてるぞ．白衣隊の古い言い伝えを忘れるな」エイル
+	ワードはグループからグループへと伝えて回った．
+	「エイルワード，何だそりゃ？」何人かが大声で訊いた．弓にもたれ，
+	エイルワードを笑っている．
+	「弓作りの名人の忠告だ．『弓はよく曲げよ．矢はよく放て．矢はよ
+	く弓につがえよ．弦はよく張れ』．これを頭ん中でくり返し，左手に
+	は腕甲，右手には射撃用の手袋，ベルトには一ファージング価のワッ
+	クス．射手にこれ以上何が要るというんだ？」
+	「ベルトの下に四ファージング価のワインがあれば，もっといいだろ
+	うな」ジョンが言った．
+		[ The White Company, by Sir Arthur Conan Doyle ]
+		[ 白衣の騎士団，笹野史隆訳，原書房 ]
+ブリジット
+brigit
+	ブリジット(ブリジッド，ブライド，バンファイル)は「高貴な人」を
+	意味するケルト族(大陸のヨーロッパ人やアイルランド人)の肥沃の女
+	神である．彼女は本来２月１日のインボルク祭で祝福される．祭は
+	雌羊の授乳のはじまりとされており，スコットランドでは，陰鬱な冬
+	の魔女を退ける日ともされている．キリスト教の暦も同じ日を聖ブリ
+	ジットの祝日としている．アイルランドにキリスト教の聖徒が本当に
+	いたと言う記録はないが，アイルランドの神話では彼女は聖母マリア
+	の助産婦となっている．
+		[ Encyclopedia of Gods, by Michael Jordan ]
+~ストームブリンガー
+*幅広の剣
+~stormbringer
+*broadsword
+	おれのだんびらをもってこい
+	そしておれの理解をはっきりさせてくれ
+	おれの黄金の十字をもってこい
+	魔除けとするために
+		[ "Broadsword" (refrain) by Ian Anderson ]
+バグベア
+bugbear
+	バグベアはゴブリンの血縁だといわれているが，大概のものはより大
+	きく毛深い．攻撃的な肉食動物で，時には財宝を狙って襲いかかって
+	くる．
+
+#[SLASH'EM 0.0.7E6]
+	Bugbears are giant, hairy  cousins of goblins who frequent the same
+	areas  as  their smaller  relatives.  Bugbears are  large and  very
+	muscular, standing 7' tall.  Their hides range from light yellow to
+	yellow brown  and their  thick coarse  hair varies  in colour  from
+	brown  to  brick  red.  Though  vaguely   humanoid  in  appearance,
+	bugbears seem to contain the  blood of some large  carnivore. Their
+	eyes recall  those of  some savage  bestial animal, being  greenish
+	white with  red pupils, while their  ears are  wedge shaped, rising
+	from the  top of  their heads. A  bugbear's mouth  is full of  long
+	sharp fangs.
+	Bugbears have two main goals  in life: survival and  treasure. They
+	are  superb  carnivores,  winnowing  out  the   weak  and  careless
+	adventurer, monster, and animal. Goblins  are always on  their toes
+	when  bugbears are present, for  the weak or  stupid quickly end up
+	in the stewpot.
+		[ Monstrous Manual, by TSR, Inc. ]
+ラッパ
+bugle
+	「私はあなたを知る
+	その角らっぱとすぐれた乗馬で
+	私はあなたを知る
+	王の緑の森を守ると誓った森林監視員だと
+	「森林監視員は，貴夫人よ，角らっぱを吹く
+	それは夜明けのこと
+	彼のひと吹きは楽しい夜明けに聞かれる
+	私のは夜のしじまに聞かれる
+		[ Brignall Banks, by Sir Walter Scott ]
+ビヤーキー
+byakhee
+#[SLASH'EM 0.0.7E6]
+	他の星の存在であるこのコウモリのような種族は，魔術師と暗黒の力が
+	利用する為に，広大な宇宙空間を越えて召喚する事ができる．それは，
+	彼らを呼び出したはいいが支配できない者を捕らえ，恐ろしい運命の待
+	つ他の世界に運び去ってしまうと言われている．
+カマキシトリ
+*camaxtli
+	古代中米のアステカ人の戦いの神．ミクスコルカマキシトリ(雲蛇)
+	としてもまた知られている．彼はまた囚われた捕虜を生贄として受けと
+	る狩と火の象徴である．伝説によれば，太陽の神テスカリトポカがミク
+	スコルカマキシトリに変身し聖なる火の杖を振りまわし火を作ったとさ
+	れている．
+		[ Encyclopedia of Gods, by Michael Jordan ]
+キャンディ
+candy bar
+	　一年にたった一日だけの誕生日に，チャーリーはチョコレートのかけ
+	らにありつけました．家じゅうの人たちが，この特別の日のために，お
+	金をためておくのです．この記念すべき日がくると，チャーリーは小さ
+	な板チョコをプレゼントされて，自分だけでぜんぶ食べることになって
+	いました．このすばらしい誕生日の朝がくるたびに，かれはプレゼント
+	をもらうと愛用の小さな木の箱に，その板チョコをまるで金ののべ棒か
+	何かみたいに，たいせつにしまうのでした．そのあと二，三日は少年は
+	ただ眺めているだけで，指一本ふれようとはしませんでした．でも，と
+	うとう我慢できなくなると，少年は包み紙のすみっこをほんのちょっぴ
+	り破って，チョコレートをむき出すと，さも惜しそうにちょびっとかむ
+	のです--あのとろけるような味が，舌のうえに，ほのかにゆっくりとひ
+	ろがるくらいまで．そのつぎの日，少年はまたちょっぴりかじりました．
+	そしてつぎの日もちょっぴり，そしてつぎの日も．こんなふうにして，
+	チャーリーは誕生日にもらった六ペンスの板チョコを，一ヶ月以上もも
+	たせるのです．
+                [ Charlie and the Chocolate Factory, by Roald Dahl ]
+		[チョコレート工場の秘密　田村隆一訳　評論社]
+シュレディンガー*
+s*d*g*r* cat
+	完全に作られていかなる影響もその壁を越えて出入りできない，密閉さ
+	れた容器を想像しよう．容器の中には猫が閉じ込められており，また何ら
+	かの量子事象に触発されて起動する装置も収められている．その事象が起
+	きると，装置が働いて青酸を入れた小瓶が割れて猫は死ぬ．もし，事象が
+	起こらなければ，猫は生き続ける．シュレーディンガーの最初の案では，
+	量子的事象は放射性原子の崩解であった．
+	．．．．
+	外部の観測者には，猫は確かに，生と死の線型結合であり，最後に容器が
+	開かれたときにはじめて，猫の状態のベクトルは崩解してどちらか一方の
+	状態になる．これに対して，容器内部の(適当な防御を施した)観測者に
+	とって見れば，猫の状態ベクトルはもっと早く崩解してしまい，外部の
+	観測者との線型結合は意味がなくなる．
+		[ The Emperor's New Mind, by Roger Penrose ]
+		[ 皇帝の新しい心，林 一訳，みすず書房 ]
+*猫
+*cat
+kitten
+	よく知られた肉食のネコ科の四足動物(学名: Felis ochreata
+	 domestica)，厚く柔らかい毛皮を持ち，よくペットとして飼われる．
+	多くの伝承が魔法や古代エジプトの神に関連づけてネコをとりあげて
+	いる．
+
+	　かくしてウルタールはやりきれない怒りのうちに眠りにつき，住民が
+	夜明けに目を覚ますや，何ということか，すべての猫が馴染の炉辺にも
+	どっていたのである．大きいのも小さいのも，黒いのも，灰色のも，縞
+	のはいったのも，黄色のも，白いのも，猫はすべてもどってきた．あま
+	つさえ，いつにもまして毛並もつややか，腹をふくらませ，満足げに，
+	喉を鳴らしていた．
+		[ The Cats of Ulthar, by H.P. Lovecraft ]
+		[ ウルタールの猫, ラヴクラフト全集6, 大瀧啓裕訳, 創元推理文庫 ]
+# this one doesn't work very well for dwarven and gnomish cavemen
+洞窟人
+cave*man
+human cave*man
+	今や，去るのに充分な明るさだった．ムーンウォッチャーはしぼんだ死
+	体を拾い上げ，洞穴の低い張り出しの下で背をかがめながら，それを自
+	分の後ろに引きずった．一度外に出て，彼は身体を肩の上から投げ出し，
+	そしてまっすぐに立った――この世界においてそれ（直立）が出来る唯
+	一の動物として．
+	彼の種族において，ムーンウォッチャーはほとんど巨人だった．彼の背
+	丈は約５フィートあり，そしてひどく栄養不良とはいえ体重は１００ポ
+	ンド以上あった．彼の毛深い筋肉の体は猿と人間の中間であったが，彼
+	の頭部は既に猿より人間にずっと近いものであった．額は低く，眼窩の
+	上にうねがあり，紛れも無く彼の遺伝子には人間の兆候がみられた．
+		[ 2001: A Space Odyssey, by Arthur C. Clarke ]
+*ケンタウロス
+*centaur
+	ギリシャ人の想像したケンタウロスはそれ自身１つのクラスを構成す
+	る．かなりの好色気質にもかかわらず，普段のふるまいは道徳的で，
+	人間には親切である．
+	ネッソスのダイアネイラへの非道な未遂行為，ラピタイの花嫁での全
+	てのケンタウロス族の非道行為は，フォロスの待遇や，ケイロンの智
+	恵，医師，予言者，叙情詩人，アキリスの指導者で埋め合せてあまる
+	くらいである．さらに，馬の体に人間の胴体と頭からなるケンタウロ
+	スは独特の想像もできない二重の生命器官ときわめて重要な男根を必
+	要とする特有の生活をしている．そのグロテスクな交合はギリシアっ
+	ぽくない．この奇妙な生き物は洞窟や山地の断崖に澄んでいると言わ
+	れ，神話は特にテサリーの丘やエリマンソス山脈などに結びつけてい
+	る．
+		     [ Mythology of all races, Vol. 1, pp. 270-271 ]
+ムカデ
+centipede
+	私はここ，ムカデがたくさんいる地域で，以前にしばしば見たも
+	のを観察した．この地域のムカデは，明るい赤みがかった身体に
+	青い足をもっている．大きなヤスデがそこらじゅうをはいまわっ
+	ているのが見られる．これらはなんの害もないにもかかわらず，
+	人間に嫌悪感をかきたてる．おそらく人間の姿は，象やその他巨
+	大な動物にとっては同じような嫌悪感をもよおすものだろう．ム
+	カデどもは大いに邪魔されたので，人間を，自分たちの平穏をめ
+	ちゃめちゃにするいまわしい二足動物として，まったく信頼でき
+	ないものと考えるであろう．
+		[ Travels and Researches in South Africa,
+			by Dr. David Livingstone ]
+ケルベロス
+#cerberus
+*erberus
+kerberos
+	ケルベロスは３つの頭を持つ地獄の門の番犬だ．死者を通すが二度と
+	戻らせることはない．しかしたったの２度だけ彼は騙されたことがあ
+	る：　一度はオルフェウスがその竪琴で奏でる美しい音楽で眠らせて，
+	また一度はヘラクレスが彼の１２番めの(そして最後の)試練として
+	生者の世界に連れ出した時である．
+カメレオン
+chameleon
+	カメレオン科，カメレオン類のうろこをもつトカゲに似る生物．
+	とくに学名Chameleo Vulgarisをさす．短い首と爪，ものをつか
+	むことのできる尾をもち，舌は長く延ばすことができ，また眼球
+	は左右独立して動く．カメレオンが怯えるか怒るかすると，身を
+	ふくらませ，透明な皮膚が血液を見せる．皮膚は最初は緑がかっ
+	た色だが，次第に斑点のある赤色にまで変わっていく．最終的な
+	色は背景色に依存する．これゆえ，カメレオンは不信感をほのめ
+	かす比喩表現である．大文字の場合，南半球の星座(カメレオン
+	座)である．
+	    [ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+カロン
+『カロン』
+#charo*n
+*haro*n
+	古代ギリシャ人が死ぬと，その魂は地下の世界すなわち冥界へ行った．
+	魂が冥界へとたどり着くには，生者と死者とを分かつステュクス川を
+	渡らねばならなかった．ステュクス川は渡し船で渡ることができ，船
+	の年老いたみすぼらしい渡し守はカロンと呼ばれた．人が死ぬとその
+	家族は，渡し守に渡し賃を払えるようにと，死者の舌の下に硬貨を入
+	れた．
+*箱
+chest
+large box
+	　箱の周囲の土は，たちまちにして掻きのけられた．そしてダンテスは，
+	順々に，二つの錠前に挟まれた真中の鍵や，側面についたにぎりのあら
+	われるのを見た．そのすべてには，当時の風習にしたがって彫刻が施さ
+	れていた．当時にあっては，細工さえ施してあったら，どんなつまらな
+	い金属でも，すべて貴いものとされていたのだった．
+	　ダンテスは箱のとってを取って，持ち上げてみようとした．だが，そ
+	れは不可能だった．明けてみようとしたが，鍵や錠前がかかっていた．
+	これら忠実な番人どもは，さも中の宝を引き渡したくないとでもいうよ
+	うだった．
+	　ダンテスは，鶴はしの鋭い端を箱の身と蓋との間に差しこみ，鶴はし
+	の柄に力をこめた．すると蓋はしばらくきしんでいた後ではじけ飛んだ．
+	板に大きな割れ目ができると，もはや金物などはなんの役にもたたなかっ
+	た．そして，その執拗な爪で，板をしっかり捉まえていたが，遂には板
+	に傷をつけながらはずれ落ちた．箱はあいた．
+	　狂おしい昂奮がダンテスを捉えた．彼は銃をとり，それに弾丸ごめし
+	て自分のそばに置いた．まず彼は，輝く空におけるよりももっとたくさ
+	んな星を想像の夜のうちに見つけようとする子供のように，その両眼を
+	閉じてみた．そして，ふたたびそれを開いたとき，彼は茫然として目が
+	くらんだ．
+	　箱は三つに仕切られていた．第一の仕切りには，鹿の子色の反射をみ
+	せて真紅な金貨が輝いていた．第二の仕切りには，磨きのかからない地
+	金が整然と並んでいた．だが，それは，とても重く，すばらしい価値が
+	あるということ以外，金のようには見えなかった．さて第三の仕切りに
+	は，その半ばを埋めつくして，手に溢れるほどのダイヤモンド，真珠，
+	紅玉があった．それは輝きわたる滝をなしてざらざらこぼれ落ちながら，
+	まるでガラス窓にあたる霰のような音をたてた．
+		[ The Count of Monte Cristo, by Alexandre Dumas ]
+		[ モンテ・クリスト伯, 山内義雄訳, 岩波文庫 ] 
+赤松子
+chih*sung*tzu
+	中国の雨の神．
+クロマティック*ドラゴン
+ティアマット
+#chromatic dragon
+*hromatic *ragon
+tiamat
+#[SLASH'EM 0.0.7E6]
+	ティアマットは邪悪なドラゴンの母といわれている．彼女はとても
+	虚栄心が強い．
+	Avaricious,  supremely vain,  and  profoundly Lawful  Evil,  Tiamat
+	proclaims  herself  the   creator  of  all  evil  dragonkind,   and
+	certainly many evil dragons  revere her as their creator and patron
+	deity.  She  infests the  uppermost  of  the  Nine  Hells with  her
+	consorts,  each a  Great Wyrm  of different  colour -  one red, one
+	white, one green, one blue, and one black.
+	Tiamat's Avatar appears  as a gigantic five-headed dragon with  one
+	head of  each of  the chromatic  (evil) dragon  types. Each  head's
+	colour  runs the length  of the  neck and into  the forepart of het
+	body  as stripes,  gradually blending  to  three  stripes of  grey,
+	blue-green,  and  purple  over her  back  and  hind-quarters,  then
+	merging into a muddy dark  brown tail. Her underbelly and  legs are
+	greenish white fading into her upper body colours.
+		 [ Monster Mythology, by TSR inc. ]
+~エルフのクローク
+~防水クローク
+*クローク
+~elven cloak
+~oilskin cloak
+*cloak*
+	すべての者(野蛮人を除く)にとっての一般的な，外にまとう服．
+	その理由ははかりがたい．マントは前が開いているので，ほとん
+	どの間，片手で開かないように押さえていなければならない．馬
+	上ではシャツしか着ていない腕と，胴の大部分を，風雨にさらす
+	ことになる．マントの公認表現は，その不便さをよく伝えている．
+	マントはしょっちゅう_はためき，露をしたたらせ_，雨の日には
+	_濡れて重くなり_，_木や剣にからまり_，_震えながら体に巻きつ
+	け_なければならない．これは困難なツアーをする者にとってはち
+	っとも実際的ではないように思える．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.238-239, マント
+雲
+cloud*
+	谷また丘のうえ高く漂う雲のごと，
+	われひとりさ迷い行けば，
+	折しも見出でたる一群の，
+	黄金色に輝く水仙の花，
+	湖のほとり，木立の下に，
+	微風に翻りつつ，はた，踊りつつ．
+		[ I Wandered Lonely as a Cloud, by William Wordsworth ]
+		[ 水仙，ワーズワース詩集，田部重治選訳，岩波文庫 ]
+コブラ
+cobra
+	ダージーとおくさんは，こたえもしないで，巣のなかでちじこまるばか
+	りだった．木立ちの下の厚くしげった草やぶから，ひくくシューという
+	音がしたからだ．この，ぞっとするような冷酷な音を聞くと，リッキは，
+	ゆうに六十センチとびすさった．見ると，草の上に一センチずつヘビの
+	頭がせりあがってきた．
+	かさのように首根っこをふくらませた大きなクロコブラ，ナッグの頭だ．
+	身長は，舌のさきからしっぽまで，一・五メートルもある．からだを三
+	分の一，地面からもちあげると，そのまま宙にうかせてゆすっている．
+	ちょうど，タンポポの花が風にゆれているようだ．ナッグはリッキをじっ
+	と見た．すこしも表情をかえない，じつにいやなヘビの目だ．なにを考
+	えていようと，けっしてそとにださない，あの目だ．
+	「ナッグってだれだ，だと？」
+	コブラはいった．
+	「ナッグとはな，このおれさまじゃよ．偉大なブラフマーの神が，おれ
+	たちなかまにつけてくださったご紋だ，よっくおがめ！ブラフマーさま
+	がお昼寝のとき，ご先祖がこのかさをひろげて，かげをつくってさしあ
+	げたのよ．ほれ，こわかろうが．」
+		[ Rikki-tikki-tavi, by Rudyard Kipling ]
+		[ リッキ・ティッキ・タービ ]
+		[ ジャングル・ブック, 西村孝次訳, 学習研究社 ]
+#チカトリス
+#コカトリス
+#c*ckatrice
+コカトリス
+バシリスク
+cockatrice
+basilisk
+	何百年に一度，星々の位置が正しい位置にあるとき，7歳の雄鳥が卵
+	を産む．そして，蛇がやってきて卵に巻きついたり，ヒキガエルが
+	卵の上に乗ったりして温め，孵化するのを手伝う．それが孵化した
+	とき，出てきた生き物をバジリスクとかコカトリスとか呼ぶ．最も
+	危険な生き物である．その黄色い凍てつくようなヒキガエルの目を
+	ちらりと見ることは，人間と獣の両方に死をもたらす．その破壊の
+	力は，強力すぎるので，時々そのシーッと言う声を聞くだけで死ぬ
+	ことがあると言う．その息は猛毒で，全ての植物を枯らす．
+
+	しかしながら，バジリスクの死の眈みに耐えることができるある種
+	の生き物がいる．これはイタチである．誰も何故そういうことなの
+	か知らないが，兇暴なイタチはバジリスクを殺すことができる．バ
+	ジリスクはもがきながら死んでいく．このようにイタチはバジリス
+	クを瀕死にするものとして知られている．もしそれが見ているなら，
+	鏡でその姿を反射させることにより直ちに死をもたらすことだろう．
+	しかし死んだバジリスクもまた危険である．その生命のない体にさ
+	わることは，たまに人間に病気や死をもたらすと言われている．
+		    [ 神話の生物, Deirede Headon(レプレコーン図書) ]
+チカトリス
+chickatrice
+#[SLASH'EM 0.0.7E6]
+	This beastie is the recently-hatched broodling of a cockatrice, a
+	creature feared by adventurers great and small for its petrifying
+	peck.  
+		[ The New Bestiary, Wizard Endlebrook ]
+##2箇所に入っているので3.4.3の側に移動
+##ピロリスク
+##pyrolisk
+###[SLASH'EM 0.0.7E6]
+##	A single glance from this red-feathered cockatrice  can cause even
+##	the bravest adventurer to burst into flames, their flesh withering
+##	and blackening and curling beneath the creature's baleful gaze.
+##		[ The New Bestiary, Wizard Endlebrook ]
+とんがり帽子
+cornuthaum
+	男の人は，毛皮の肩衣のついた流れるような長いガウンを着ていた．
+	ガウンには一面に，十二宮星座のサインが刺繍してある．そのほかに，
+	三角で囲んだ目玉やら，妙ちくりんな十字架やら，木の葉や，鳥やけ
+	ものの骨，太陽をうけた鏡の破片さながらにきらきら光る星座図など
+	の，さまざまな秘教的な図柄もあった．頭には，学校でだめな生徒が
+	かぶらされるのにそっくりな，とんがり帽子をかぶっている．そのこ
+	ろの貴婦人のかぶりもののようでもあるが，貴婦人なら，てっぺんか
+	らヴェールをなびかせているところ．
+			[ The Once and Future King, by T.H. White ]
+			[ 永遠の王, 森下弓子訳, 創元推理文庫]
+
+	「魔法使いだ!」ドゥーリーが驚きにうたれて叫んだ．「おおせ
+	のままに，皆様がた」と魔法使いが言った．「気づかれるとは，
+	なんたる洞察力よ．どうやら帽子のせいで露見したようですな．
+	一種の目印です，疑いなく」彼の帽子はほとんどそのとおりだっ
+	た，高く，円錐形で，一面に星と三日月の模様があった．概して，
+	これ以上ないというくらい魔法使いらしかった．
+			[ The Elfin Ship, James P. Blaylock ]
+コウアトル
+couatl
+#[SLASH'EM 0.0.7E6]
+	神話における羽のある大蛇．コウアトルはとても珍しい．
+	コウアトルは神話と伝承に登場する，羽をもつ大蛇である．証明
+	された訳ではないが，それらは竜の遠い親戚であると信じられて
+	いる．コウアトルは伝説であると考えられるのと同じくらい非常
+	に稀な存在で，最も美しい生物の１つに数えられる．コウアトル
+	は長い大蛇の身体と虹色の羽がついた翼を持っている．時折過て
+	るしもべに対する神々の使いとして送り込まれる事があり，コウ
+	アトルは常にそれに値する者達を罰しようと努めるであろう．
+		[ 2nd ed. Monstrous Compendium, by TSR, Inc. ]
+コヨーテ
+coyote
+	この肉食獣は，そのさかんな食欲と，自分の知性に対する慢心し
+	た考え方で有名である．
+クラム
+たらふく
+cram*
+	たらふくがどんなものかといっても，わたしには作り方がわかりませ
+	ん．ただ，ビスケットのようなもので，「もち」がたいへんよいとこ
+	ろから，非常食料とされるくらいで，くちゃくちゃのものをかむ練習
+	のために使うのでなければ，とびついてほしがるようなものではあり
+	ません．長い旅をする場合，湖の人たちが作る食べ物です．
+		[ The Hobbit, by J.R.R. Tolkien ]
+		[ ホビットの冒険，岩波少年文庫，瀬田貞二訳 ]
+ワニ*
+*crocodile
+	トカゲに似た大きな動物，爬虫類(学名: Loricata もしく Crocodylia)
+	ワニは大きく，危険な熱帯や亜熱帯に住む肉食動物である．主に水
+	のなかで生活する．
+クロイソス
+『クロイソス』
+croesus
+kroisos
+creosote
+	クロイソス，リディアの最後の金持ちの王．デルファイのオラクル
+	(参照せよ)が「もしそなたがペルシャを攻撃するならば，強力な帝
+	国を滅ぼすであろう」と述べたあと彼がキルスに攻め込んだとき，彼
+	の帝国は 549年に滅んだ．
+クロム
+crom
+	用心してコナンは，辺りを見回した．彼の全ての感覚は危険を
+	感じとっていた．彼はすこし離れた場所で，懐かしいデュアリ族の
+	集落を見つけた．突然，彼は首の毛を逆立たせた．邪悪な魔法のオ
+	ーラを感じとったのだ．その瞬間，彼は武器を構えつぶやいた．
+	「クロムよ，彼の者の血を捧げよう」
+	[ Conan the Avenger by Robert E. Howard, Bjorn Nyberg, and
+	  L. Sprague de Camp ]
+*クロスボゥ*
+crossbow*
+	「老水夫よ，君をそんなに苦しめる
+	悪霊を神が追い払いますよう−−
+	その顔つきはどうしたのだ」−−石弓で
+	わしはその鳥を撃ち落としたのじゃ．
+		[ The Rime of the Ancient Mariner, by Samuel Taylor
+		  Coleridge ]
+		[ 老水夫の歌，Ｓ．Ｔ．コールリッジ ]
+		[ 叙情歌謡集，ワーズワス，コールリッジ
+		  宮下忠二訳，大修舘書店 ]
+水晶玉
+crystal ball
+	これを覗きこむと_かすみが雲のように渦を巻く_のが見える．こ
+	のかすみはすぐに引き，無音のビデオのような映像が，これから
+	すぐにあなたに降りかかる事を教える．それが良い知らせである
+	ことはめったにない．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# p.134, 水晶玉
+クトゥルフ
+『クトゥルフ』
+ct*ul*u
+kt*ul*u
+cht*ul*u
+kht*ul*u
+#[SLASH'EM 0.0.7E6]
+	"The Thing cannot be described -- there is no language for such
+	abysms of shrieking and immemorial lunacy, such eldritch
+	contradictions of all matter, force, and cosmic order.  A
+	mountain walked or stumbled.  God!... the Thing of the idols,
+	the green, sticky spawn of the stars, had awakened to claim
+	his own.  The stars were right again... great Cthulhu was
+	loose again, and ravening for delight."
+		[ The Call of Cthulhu, by H.P. Lovecraft ]
+	
+	The exact origins of Cthulhu are lost to time, but it is
+	known that in aeons long past a race of space faring
+	beings came to this world and Cthulhu was amongst their
+	number as the high priest who interceded between them
+	and the dark gods they worshipped.  Whether Cthulhu is
+	a long lived individual or a title of office, is not
+	known, but a creature bearing this name lives on,
+	trapped in eternal slumber in the ruins of his great
+	city. 
+呪い*
+呪われた*
+curse*
+	非常に長くつづく邪悪な願いで，ファンタジーランドではしばし
+	ば感覚的なものである．呪いは破壊するか解かなければならない．
+	その方法は呪いの種類や起源によって変わる．
+	[...]
+	4.  指輪や剣にかけられた呪い．これは困りものである．指輪は
+	造られた場所に戻さねばならず，できれば摂氏1000度の熱で滅ぼ
+	さねばならないが，呪いはあなたがそれを行いたくない気持ちに
+	仕向ける．剣の場合，たいていは呪いを解くすべての試みを跳ね
+	返す．最良の方法は剣をどこかに隠してしまうか，嫌いな人にあ
+	げてしまうことだ．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.200-201, 呪い
+## a thousand degrees Fahrenheitの訳が摂氏1000度になっているが，
+## 華氏1000度の誤訳? (華氏1000度≒摂氏538度)
+クーン・アンヌーン
+cwn*n
+	雪のように白く，赤い耳をもった幽霊のような犬の群．時として
+	子さらいに加わる．また現世に時おり姿をあらわすあの世の住人
+	を襲う(「幽霊の狩猟」)．ウェールズでは，この動物は渡りの雁
+	の声に関係づけられており，また呪われた者の魂を地獄へと導く
+	といわれている．たいていは真冬に，この幽霊がうなりをあげる
+	風を随伴してついてくるのが見聞きされる．
+		[ Encyclopedia Mythica, ed. M.F. Lindemans ]
+サイクロプス
+cyclops
+	それがすむとめいめいの母羊に
+	嬰子の羊を宛てがってやり，こう大急ぎで仕事をせっせとやり終ると，
+	何ということ，またもや二人をとっ掴まえ，夕食の仕度に宛てたのでした．
+	そのおりを待ち，私はキュクロープスの間近に立ち寄り，話しかけたので，
+	蔦の木の椀を手に持ち，黒々としたぶどう酒をそれに満たして．
+	「キュクロープスさん，さあお酒を飲みなさい，人間の肉をあがったならば，
+	これこの通りの，何という甘い飲料を，私の船が蔵してきたか，
+	悟って下さるようにも．またお供えのお神酒まで持って来ました，もしや私を
+	不憫に思い，故国へ送ってくださるまいかと．でもその狂気の沙汰は
+	とうてい辛抱できません．非道い方です，どうして今後他人が訪ねて
+	まいりましょう，そんなに多数人がいても，こう道に外れなさりかたでは．」
+	こう言いますと，巨人は受けとり飲み干しましたが，飲んだお酒の
+	甘さがとても気に入ったので，もう一杯重ねてくれと請求しました．
+	「もっとくれよ，気前よくな．それからわしにお前の名前を教えろ，
+		.....
+	こうして三度も酌んで渡すと，三度も愚かな無分別から飲み乾しました．
+	ところですっかりキュクロープスの体じゅう，脳まで酒が廻ったおき，
+	そのときついに私は，彼に対って猫撫で声で，大声でこう言いました，
+	「キュクロープスさん，私の世間に知られた名前をお訊きで．そんなら私も
+	申しあげましょうから，あなたの方でも約束どおり土産をください．
+	駄礼毛志内と私はいうので，駄礼毛志内と母親も父親にしても，
+	そのほかの仲間の人たち皆が，私のことを呼んでおります．」
+	こう言うと，大男は早速にも，情容赦もない心で，私に返答するよう，
+	「駄礼毛志内をわしは最後に喰ってやろうよ，仲間たちのうちでもな，
+	ほかの奴らを先にしてやる，これがお前にやる土産だぞ．」
+	こう言うと，そのままあお向けに引っくり返って倒れまして，それから
+	がっしりとした猪頚を斜めに曲げて横になり，あらゆるものを
+	屈服させる睡眠の虜になって，咽喉もとから，ぶどう酒やら
+	人間の肉の切れ片やらが噴き出て来たのは，深酒のため吐いたのでした．
+		[ The Odyssey, (chapter Epsilon), by Homer ]
+		[ 岩波文庫，呉茂一訳 ]
+~スティング
+*短剣
+~sting
+*dagger
+	短剣ではないか，そこに見えるのは，
+	手にとれと言わんばかりに？よし，掴んでやる，
+	掴めない，目には見えるのだが．
+	忌まわしい幻め，
+	見えても，手には触れぬのか？
+	熱に犯された頭が造り上げた幻覚にすぎぬというのか？
+	いや，まだ見える，それ，抜くぞ，
+	同じではないか，まざまざと，手にとるように．
+		[ Macbeth, by William Shakespeare ]
+		[ マクベス，福田恆存訳，新潮文庫]
+暗き者
+dark one
+	しかしかれは使えるところでは，むしろ暴力と恐怖によって統治した．
+	かれの影が世界中に広がってゆくのを認めた者は，かれを冥王と呼び，
+	大敵と名づけた．そしてかれは地上に或いは地下に残っているモルゴス
+	時代の邪悪な者たちをすべて傘下に集め，オーク共はかれの指図に従い，
+	その数は蝿の如く殖えた．かくて黒の時代は始まった．
+		[ The Silmarillion, by J.R.R. Tolkien ]
+		[ シルマリルの物語，評論社，瀬田貞二訳 ]
+*深きもの
+deep* one
+#[SLASH'EM 0.0.7E6]
+	八万年のあいだ，ス・スヤ・ルアイはヰ・ハ・ンスレイに住んでお
+	り，オーベッド・マーシュが死んでからのち，そこに戻っていった．
+	ヰ・ハ・ンスレイは破壊されなかった．たとえ，名を忘れられた，
+	人類以前の地球上の「旧支配者」がその古代の魔術によって，とき
+	にはこの「深海のもの」を阻止することはあったとしても，「深海
+	のもの」を破滅させるわけにはいかなかったのだ．さし当たり現在
+	のところ，彼らはじっとおとなしくしていよう．が，やがていつの
+	日にか，彼らの記憶のよみがえったあかつきには，大クトゥルフが
+	熱望していた貢物を求めてふたたび立ちあがるであろう．
+		[ The Shadow Over Innsmouth, by H.P. Lovecraft ]
+	[ インスマウスの影, ラヴクラフト全集1, 大瀧啓裕訳, 創元推理文庫 ]
+デモゴルゴン
+『デモゴルゴン』
+demogorgon
+	デモゴルゴンは悪魔の皇子で，汚物にまみれ，犠牲者を速やかに死
+	に至らせる毒を撒き散らす．強力な魔術師でもあり，人間の生命を，
+	尻尾で触れることにより吸いとることができる．
+悪魔
+demon
+	妖魔がどんな姿をしているかということを知ることは難しく，大
+	きくて，大きな牙とにらみつけるような目，たくさんの手足と奇
+	妙な色をしているというだいたいの印象しかわかっていない．し
+	かし共通する見解では，妖魔はすさまじい力を持ち，強力な魔法
+	を使い(人間にはできないやり方で)，鍵穴を通り抜け，剣で切ら
+	れることもない物質でできている．そのため妖魔はとても扱いづ
+	らい．もしそれがめったにない友好的な妖魔であったとしても．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.266-267, 妖魔
+*・デヴァ
+*deva
+#[SLASH'EM 0.0.7E6]
+	Devas are the descendants of plane-touched aasimon.  They have
+	feathery wings that may be vestigial or functional.
+	Movanic devas are the most frequently seen by mortals. Their
+	milky skin and slender build distinguishes them from the
+	dark and muscular monadic devas.  The latter are rarely encountered
+	except in the inner planes. It is said they are able to breathe
+	elements other than air.
+		[ adapted from Aasimar, by David Roberts and Brynn ]
+プラネター
+planetar
+#[SLASH'EM 0.0.7E6]
+	These Aasimar seldom associate with mortals.  Planetars are
+	hairless and tall, with green-tinted skin and a wild psionic talent.
+		[ adapted from Aasimar, by David Roberts and Brynn ]
+ソーラー
+solar
+#[SLASH'EM 0.0.7E6]
+	Solars are near to powers in status, and their children like
+	demipowers.  Their hair and skin is metallic.  Solars stay aloof
+	from mortals, but may command them with an irresistable voice.
+		[ adapted from Aasimar, by David Roberts and Brynn ]
+#*野犬*
+*ディンゴ*
+#[SLASH'EM 0.0.7E6]
+dingo
+	狼に似た野犬．Canis dingo．オーストラリアに住む．赤あるい
+	は黄色がかった色の毛皮をもち，アボリジニたちによってもたら
+	されたと信じられている．
+	[Webster's Encyclopedic Unabridged Dictionary of the English Language]
+吸魔の怪物
+disenchanter
+	あなたの魔法がそれに何を出来るかを尋ねてはならない．
+	それがあなたの魔法に何が出来るかを尋ねなさい．
+ディスペータ
+『ディスペータ』
+dispater
+	デスペーターは冥府を統べる大悪魔で，強力な魔術師である．
+*ジン
+djinn*
+	ジンは風の精霊界から来る精霊である．彼らは精霊界において独自の
+	社会を形成している．地上界で彼らと偶然出会うこともあるし，強力
+	な魔法使いが使役するために彼らを召喚することさえある．こうした
+	魔法使いたちはよく，後ほど奉仕させるために彼らを瓶やランプに押
+	し込めておく．時として好運な冒険者がこうした道具を見つけること
+	があり，解放されたジンの中には，感謝のしるしに冒険者の願いを一
+	つかなえてくれる者もいることが知られている．
+#~野犬
+~*ディンゴ*
+#[SLASH'EM 0.0.7E6]
+~ハチ公
+~スラッシャー
+~シリウス
+*犬
+~hachi
+~idefix
+~slasher
+~sirius
+*dog
+pup*
+	ペット，飼い犬(学名: Canis familiaris)，多数の種が存在．オスは
+	 dogと呼ばれメスは bitchと呼ばれる．人間への忠誠や子供への優し
+	さが知られており，世界で最もポピュラーなペットである．いろいろ
+	な技を簡単に教えることもできる．
+影の狼
+shadow wolf
+#[SLASH'EM 0.0.7E6]
+	This evil creature (_canis tenebrous_)  lurks in the darker, more
+	sinister corners of the world. Its bite is known for its chilling
+	effect upon humanoid flesh, and it is not a tameable animal.
+	[ The New Bestiary, Wizard Endlebrook ]
+霧の狼
+mist wolf
+#[SLASH'EM 0.0.7E6]
+	This hazy canine  (_canis precipitous_) is  thought to  have a good
+	heart hiding somewhere within its green, silky hide. Unfortunately,
+	the  beast is  usually ravenous,  as its diet  of mist is  not very
+	filling, at least compared to human flesh.
+	[ The New Bestiary, Wizard Endlebrook ]
+~落し扉
+*扉
+~trap*door
+*door
+doorway
+	憂いの国に生かんとするものはわれを潜れ．
+	永劫の苛責に遭わんとするものはわれをくぐれ．
+	破滅の人に伍せんとするものはわれをくぐれ．
+	正義は高き主を動かし，
+	神威は，最上智は，
+	原初(はじめ)の愛は，われを作る．
+	わが前に創られし物なし，
+	ただ無窮あり，われは無窮に続くものなり，
+	われを過ぎんとするものは一切の望を捨てよ
+		[ The Inferno, from The Divine Comedy of Dante
+			Alighieri, translated by H.F. Cary ]
+		[ 神曲: 地獄篇，河出世界文学全集，平川祐弘訳 ]
+ドッペルゲンガー
+doppelganger
+	「それなら，ここが南極であることに感謝するしかないな．基地にいる
+	　動物をのぞけば，模倣する生きものが，ただの一匹もいないことに」
+	「われわれがいる」ブレアーが含み笑いをもらした．
+	「われわれを模倣できる．犬じゃ海まで四百マイルも歩けない．食料が
+	　ないからな．この季節には，模倣するべき盗賊カモメもいない．これ
+	　ほど内陸じゃ，ペンギンもいない．この地点から海へたどり着けるも
+	　のはいない――われわれを別にすればだ．われわれには知恵がある．
+	　たどり着けるんだ．わかるだろう――そいつは，われわれを模倣する
+	　しかない――われわれのひとりになりすますしかない――飛行機を飛
+	　ばす方法は，それしかないんだ――飛行機を二時間飛ばせばーー地球
+	　の住民をことごとく支配――いや――なり変わることができるんだ．
+	　世界を乗っ取れるんだ――われわれになりすましさえすれば！」
+		[ Who Goes There?, by John W. Campbell ]
+		[ 影が行く, 中村融訳 ]
+# ホラーSF傑作選 影が行く, P.K.ディック, D.R.クーンツ他, 中村融編訳, p.179
+
+	ザンダー: 行かせてくれ! あの悪魔の蝿野郎を殺してやる!
+	ザンダーその2 (銃をつかみながら): アンヤ，どいてくれ．
+	バフィー: ザンダー!
+	ザンダーその2: そのとおり，バフィ．俺が，彼をつくった．
+	ザンダー: ちがうぞ，バフィ．俺が本物だ．助けてくれ!
+	アンヤ: 私の銃を，彼は私の銃を持っている．
+	ライリー: あんたが銃をもってるのか?
+	バフィ: ザンダー，銃をもってるザンダー，それをちょうだい．
+	アンヤ: バフィ，どちらが本物?
+	ザンダー:俺だ．
+	ザンダーその2: ちがう，俺だ．
+	    [ Buffy the Vampire Slayer, Episode 5.03, "The Replacement" ]
+~コモド*
+~komodo*
+#[SLASH'EM 0.0.7E6]
+*ドラゴン
+*dragon
+*xoth
+	西洋では，ドラゴンは人間の敵である．荒れた寂しい場所に住むこ
+	とを好むのだが，人間に見られると必ず，破壊や病気の後を遺して
+	いく．この獣を殺そうと言うありとあらゆる挑戦は危険な仕事であ
+	る．ドラゴンを攻撃するものには，硫黄の臭気のガスだけでなく，
+	最も危険な蛇のように激しく動く尻尾とも格闘せねばならない．
+	[ Mythical Beasts by Deirdre Headon (The Leprechaun Library) ]
+
+        「竜と話し合いができる人間，それが竜王さ．」男は言った．「いや，
+	それが第一条件かな．竜を制するのは，みんなの考えるようなトリック
+	でもなんでもないんだ．竜はおよそ主人というものを持たない動物なの
+	でね．竜を相手にしたら，問うべきことはいつも同じ，交渉ができるか，
+	それとも食べられるか，だ．もしも，交渉ができる，食べられることは
+	ない，という確信がもてるようになれば，それでもう立派な竜王さ．」
+		[ The Tombs of Atuan, by Ursula K. Le Guin ]
+                [ こわれた腕輪, 清水真砂子訳, 岩波書店 ]
+太鼓
+*drum*
+	多くの探検家や旅行者が類人猿の太鼓を発見しているし，そのふしぎ
+	な太鼓をたたく音や，ジャングルの支配者たちの奇怪なお祭り騒ぎの
+	音も聞いてもいるが，実際にその狂気の祭りに加わったことのある人
+	間は，グレイストーク＝ターザンだけであったにちがいない．
+		[ Tarzan of the Apes, by Edgar Rice Burroughs ]
+		[ 類猿人ターザン, 高橋豊訳, ハヤカワ文庫SF ]
+ドゥマソイン
+dumathoin
+#[SLASH'EM 0.0.7E6]
+	Dumathoin of the Keeper of Secrets Under the Mountain, the god of
+	mining, discovery, and exploration.  He is called the Silent
+	Keeper, for he never speaks, but may guide his most devoted
+	followers and worshippers through fate and happenstance to the
+	richest veins of ore and the greatest treasures. His symbol is a
+	faceted gem set against a mountainous silhouette.
+ドワーフ*
+~dwarf ??m*
+dwarf*
+dwar* cave*man
+	ドワーフは人間と同じような顔(しわがあり，がさがさした皮膚
+	で，醜い)をしているが，一般的には偏平足か，後指が前向きか，
+	あるいは足が後ろ向きかのどれかである．彼らは大地に由来し，
+	たくましく，洞窟の最奥に住んでおり，クロークだけを着てさら
+	に奥を目指している．そのクロークのおかげで，彼らは姿を見え
+	なくすることができ，また他のものには蛙のように見せかけるの
+	である．鉱山人夫はしばしばドワーフたちに遭遇し，時としてそ
+	れなりに親密な関係を築く．…コーンウォールの鉱山人夫たちは，
+	ブッカがいそがしく採掘していく音を聞くといつも喜ぶ．という
+	のも，ドワーフたちはみな貴重な金属に対し信頼できる鼻をもっ
+	ているからである．
+
+	その他に，ドワーフは鍛冶屋や宝石細工人としての技術を正当に
+	も評価されている．ドワーフたちはオーディンに有名な槍「グン
+	グニール」を作ってやったし，トールにはハンマーを作ってやっ
+	た．さらにフレイヤのために素晴しいネックレスをデザインし，
+	フレイのために金毛の猪を与えたのである．暇なときには，ドワー
+	フたちは優れたパン職人ともなる．皮肉なことに，ドワーフたち
+	は奇妙な足をもっているにもかかわらず，ダンスをとくに好む．
+	ドワーフは未来をみることもでき，それゆえ優れた気象学者でも
+	ある．ドワーフたちは自分の好きな人たちへの贈り物を惜しまな
+	いが，ドワーフの贈り物というのは手元の金に変わってしまいが
+	ちである．しかし，結局のところ，ドワーフというのはぶっきら
+	ぼうな連中である．
+	    [ The Immortals, by Derek and Julia Parker ]
+エアレンディル
+エルウィング
+earendil
+elwing
+	後世，モルゴスが勝利を占め，エルフと人間が，かれの願望通り，離聞
+	されるに至った時，中つ国になおも住み続けるエルフ族は，次第に衰え，
+	力を失い，人間が陽光を恣に亨受した．やがてクウェンディは，広大な
+	国々，島々の人気ない場所をさまよい，月光と星明かりに，そして森と
+	洞窟に親しみ，記憶の中に存在する影の如きものになり果てた．ただ，
+	時折，西方に船出して中つ国から姿を消す者がいた．しかし，黎明期に
+	あっては，エルフと人間は盟友であり，互いに同類と見なしていた．そ
+	して人間の中にはエルダアルの智恵を学び，ノルドオルの大将たちに立
+	ちまじる，勇猛にしてすぐれた者もいた．エルフの栄光と美しさ，かれ
+	らの宿命を完全に共有したのは，エルフと人間の血を亨けたエアレンデ
+	ィルであり，エルウィングであり，かれらの子供であるエルロンドであ
+	る．
+		[ The Silmarillion, by J.R.R. Tolkien ]
+		[ シルマリルの物語，評論社，瀬田貞二訳 ]
+#前後に単語がつかない只のearthといったらこれの事か?
+地の精霊界
+earth
+#[SLASH'EM 0.0.7E6]
+	大抵は無害．
+		[ Hitchhiker's Guide to the Galaxy, by Douglas Adams ]
+ウナギ
+巨大ウナギ
+eel
+giant eel
+	きれいな水に住むウナギの振舞いはその周辺の神秘性を増す．それら
+	は自由に濁った泥々の湖底を移動し，夏の日中は埋まって生活する．
+	....
+	ウナギは大食漢の食肉動物で，主に夜に補食し，多くの種類の魚や
+	無脊椎動物をたいらげる．初期の考えとは反対に，ウナギは死んだ生
+	物よりむしろ生きたものを探しており，腐肉の常食者ではない．
+	    [ Freshwater Fishes of Canada, by Scott and Crossman ]
+*卵
+egg
+	しかし私は，どうしてそれをそのままにして，雛が孵るまで雌鳥
+	にあたためさせないのか，そうすれば中から何が出てくるかわか
+	るのに，とたずねた．「いいものなんかありっこないよ」とお母
+	さんが言った．「なにかおっかないものかもしれない．でも覚え
+	ておきなさい，そいつがワニかドラゴンみたいなものだったら，
+	一分たりとも家のなかにおいときはしないから」
+		[ The Enormous Egg, by Oliver Butterworth ]
+elbereth
+	敷居をまたぐ時にも，澄んだ歌声が一つ高らかに聞こえてきました．
+
+		アー エルベレス ギルソニエル，
+		シリブレン ペンナ ミリエル
+		オー メネル アグラール エレナス！
+		ナ=カエレド パラン=ディリエル
+		オー ガラズレミン エノラス，
+		ファヌイロス，レ リナソン
+		ネフ アイアー，シー ネフ アイアロン！
+
+	フロドは一瞬立ち止まって，振り向きました．エルロンドは椅子に腰
+	を下していて，その顔にはまるで夏の光が樹々を照らすように，暖炉
+	の火が照り映えていました．彼のそばにはアルウェン姫がすわってい
+	ました．
+		.....
+	かれはなおも魅せられたように立っていました．その間，エルフの歌
+	の美しい音節の一つ一つが，言葉と旋律のまざった透明な宝玉のよう
+	に，耳に聞こえてきました．「エルベレスに捧げる歌だよ．」とビル
+	ボがいいました．「今夜はみんな，あの歌や，ほかにも浄福の国の讃
+	歌を何度も何度も歌うことだろう．さぁ，行こう！」
+	   [ The Fellowship of the Ring, by J.R.R. Tolkien ]
+				      [ 評論社, 瀬田貞二訳 ]
+電気ウナギ
+electric eel
+	南アメリカの淡水魚(学名 Gymnotus electricus)．蛇のような形を
+	しており，2メートルにも成長する．このウナギは馬くらいのサイズ
+	の生き物をも痺れさせる電気体として知られている．
+	   [ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+*の精
+*elemental
+	エレメンタルとは全宇宙の基本現象の現れである．風，火，水，地
+	の4つのエレメンタルが知られている．何人かの神秘主義者は5番目
+	のタイプ，すなわち霊であるが，の必要性を主張しているが，少な
+	くとも存在するこの地では誰も遭遇したことがない．
+~elf* cl*
+~*ゾンビ
+~*ミイラ
+エルフ*
+~elf ??m*
+*elf*
+elvenking
+	エルフたちは焚火をかこんで，草の上や，丸太の切株を腰掛にして，
+	すわっていました．杯を運ぶ者あり，飲みものをそそいで回る者が
+	ありました．また山のように積み上げた皿小鉢の上に食べ物をのせ
+	てくる者もいました．
+	「御馳走はありませんよ．」と，かれらはホビットたちにいいまし
+	た．「ここはわたしたちの館を遠く離れた緑の森の宿りだから．わ
+	が館にお招きしたら，もっとましなおもてなしをするけれど．」
+	「わたしには，りっぱな誕生日のご馳走ほどに思えますよ．」とフ
+	ロドがいいました．
+	ピピンはあとになってこの時のことを思い出そうとしても，食べも
+	ののことも飲みもののこともほとんど思い浮かびませんでした．か
+	れは，エルフたちの顔に映える光と，うつつの夢とまごうほど，変
+	化に富む美しい声の響きに，すっかり心を奪われてしまったせいで
+	した．
+		.....
+	サムはその夜感じたこと，思ったことを言葉に写すことも，心には
+	っきり思い描くこともついにできませんでした．しかしその夜のこ
+	とは，かれの生涯を通じてのおもなでき事の一つとして，いつまで
+	もかれの記憶にとどめられました．辛うじてかれにいえたのは，次
+	のような言葉でした．「ほんとに，旦那，おらにこんなりんごが育
+	てられたら，おらも自分を庭師と呼びますだ．だけど，おらの心に
+	響いたのはあの歌声ですた，ほんとのこと」
+	   [ The Fellowship of the Ring, by J.R.R. Tolkien ]
+				      [ 評論社, 瀬田貞二訳 ]
+エルフのクローク
+#elven cloak
+elf* cl*
+elv* cl*
+	エルフたちは次に，持ってきた衣類を広げ，一行の一人一人にわたしま
+	した．かれらがめいめいに準備してくれたものは，それぞれの背丈に合
+	わせて作ったマントと頭巾でした．そしてこれはみんなガラズリムたち
+	が織った軽くて暖かい絹のような布でできていました．色はちょっと何
+	色ともいえません．木の下では黄昏の色を帯びた灰色のように見えます．
+	しかし，それを着て動いたり，あるいは別の光にあてて見ると，翳を帯
+	びた葉っぱのような緑色に見えたり，夜の故畑のような褐色に見えたり，
+	星明りの下の水のような暗い銀色に見えたりします．
+		[ 評論社, 瀬田貞二訳 ]
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+エメラルド
+emerald
+	「その燦爛たる黄金の仮面，
+	エメラルドの眼の仮面をおはずし．」
+	「ごめんです，貴方は，心が，激しくて，
+	賢こくって，しかも冷めたくは無いってことが，
+	あるかどうか，あつかましくも露(あば)こうとなさる」
+
+	「恋か欺瞞か，何がひそんでいるか，
+	この目で見たがっているだけのこと」
+	「貴方のお意(こころ)をつかみ，つづいて，
+	貴方の心臓を鳴らせたのは，
+	仮面ですよ，仮面の後にあるものじゃない．」
+
+	「だが，貴女が私の敵であっては困るんで，
+	せんぎ立てをせねばならない．」
+	「いや，あなた，それなりでよいのです，
+	あなたにも私にも情熱がもえていさえすれば，
+	いいじゃありませんか．」
+		[ The Mask, by W.B. Yeats ]
+		[ 仮面，Ｗ．Ｂ．イェイツ ]
+		[ イェイツ−−人と作品 屋島庄太郎著，研究社 ]
+イリニス
+erinys
+erinyes
+	ギリシャ神話のフュリズにちなんで命名された女性の姿をしたこの悪魔は
+	不注意な犠牲者につかみかかったり，毒をくらわす．
+エティン
+ettin
+	双頭の巨人．エティンは危険でなにをしでかすかわからないハンター
+	である．エティンは夜中大またで歩き，掴めるものなら何でも食う．
+エクスカリバー
+excalibur
+	最初は，その先端しか見えなかったが，次第にそれはまっすぐ，
+	ほこりだかくそびえ立った．それは高潔で偉大ですばらしいもの
+	すべてだった．剣の先端は，月を，まるでまっぷたつに切り裂こ
+	うかというように差し示していた．剣そのものが，闇夜のかがり
+	火のようにきらめいていた．剣が光を反射できるような光源はな
+	かった．というのも月はおそれて雲のうしろに逃げこんだからだ．
+	剣はそれ自身の強さと力と知識の激しさから輝いていた．その激
+	しさは正義が具現化したものであり，数えきれない年月のまどろ
+	みののち，その時がふたたびきたのである．剣が表面をやぶった
+	のち，つかが見えた．そして剣をつかんだのは，ひとつの力強い，
+	しかし女の手であり，その指には海の青緑色に輝くはだかの宝石
+	をもつ指輪がいくつかはめられていた．
+		[ Knight Life, by Peter David ]
+高価なカメラ
+expensive camera
+	リンスウィンドがアイコノスコープをたいへん好んだ時があった．
+	彼はあらゆる経験に反し，世界は基本的に理解できるものであり，
+	もし正しく精神の道具箱を身につければ，彼は背景をとりさるこ
+	とができ，それがどのように作用するかをみることができる，と
+	信じていた．もちろん，彼は決定的に間違っていた．アイコノス
+	コープは，(彼が推量したように)光を特別な処理をされた紙の上
+	に当てることで撮影するのではなく，優れた色彩の識別力と，絵
+	ブラシをもった素早い手をもつ小さな悪魔をとじこめるという，
+	はるかに単純な手段によっているのだった．そのことを発見して，
+	彼はたいへん狼狽した．
+		[ The Light Fantastic, by Terry Pratchett ]
+エチオピアの目
+eye of the aethiopica
+	強力な遠視の魔除け．その通常の力の他に，それを持っているものなら
+	誰でも魔法をより頻繁に唱えれるようエネルギーが回復する．また，そ
+	れを持つものの魔法のダメージを半分に減らし，魔法の矢から守る力が
+	ある．その力を使うと迷宮の他のエリアへの魔法の入口を開き，力を使
+	うものはエリア間を高速に移動することができる．
+超世界の目
+eyes of the overworld
+	．．．そして「超世界の目」である．このよくわからない聖器は，
+	装着した者の視覚を「超世界」(天上界の別名)のものへと高める．
+	ふつう，そこには見るべきものはない．しかしながら，「目」の
+	装着者は，自分自身の周囲を，あたかも地図で見るかのように見
+	ることができるようにもなるのである．なぜ誰もがそうしたがる
+	かというに．．．
+*ダゴン*
+*ハイドラ*
+father dagon
+mother hydra
+#[SLASH'EM 0.0.7E6]
+	「生贄も，土人たちの飾り物もたっぷり与え，町でゆっくり宿泊でき
+	るようにしてやらないと，満足しなかった．よその土地で，こういう
+	話を平気で――というのはお祈りもせずに，という意味だが――聞い
+	ていられるものは一人もいまい．秘密は万事，――あの『ダゴンの秘
+	密教団』という忠実なる一派の手に握られていた――子供たちだけは，
+	ぜひ生かしておいて，おれたち人間の究極の先祖である，母親のヒド
+	ラと，父親のダゴンのもとに，還って行かねばならんのだ――イア！
+	イア！クトゥルフ．．．」
+		[ The Shadow Over Innsmouth, by H.P. Lovecraft ]
+	[ インスマウスの影, ラヴクラフト全集1, 大瀧啓裕訳, 創元推理文庫 ]
+槍剣
+fauchard
+#[SLASH'EM 0.0.7E6]
+	この武器は大鎌あるいは鎌から発達したものである．長い柄の先に取り
+	付けられたフォーシャールの曲刃は，切る事も刺す事も可能である．こ
+	の武器は受け流しや受け止め／押さえつけに関しては若干有利であり，
+	また敵を落馬させるまではいかなくとも，馬を傷つける事は可能である．
+*人形
+figurine*
+	スペインを追われたカルロス主義者たちがあふれていたパリに，鳥
+	はやがて姿を見せました．その連中の一人が，何物とはわかりませ
+	んが，鳥を持ちだしたのでしょう．しかしその人物は，鳥の真価を
+	露ほども知らなかったのだと思います．スペインの王位継承をめぐ
+	る内戦中，この鳥はちょっと珍しい彫像程度にしか見えないように，
+	明らかに奪われぬ用心のためペンキかエナメルを塗られていたので
+	す．そして偽装のまま，見せかけの姿に隠された真価に気づくよす
+	がもない愚かな所有者や古物商の手から手に，七十年余にわたって
+	パリ近辺を転々としたわけです．
+		[ マルタの鷹，小鷹信光訳，ハヤカワ文庫 ]
+		[ The Maltese Falcon, by Dashiell Hammett ]
+炎の精
+fire vampire
+#[SLASH'EM 0.0.7E6]
+	明るく光る渦巻く雲で，燃える粉である炎の精は犠牲者を不意に襲い，
+	その致命的な抱擁は犠牲者をたやすく焼き殺す．
+さまよう目
+floating eye
+	さまよう目は，驚くべきことでもないが，巨大で宙に浮いた眼球で，
+	ダンジョンの中をあちこちさまよっている．それ自体が単独で危険と
+	いうわけではないものの，闘いの最中にその巨大な目を見つめた者を
+	麻痺させるという能力は大いに恐れられている．さまよう目に対して
+	殴りかかり，その魔力によって麻痺し，辺りをうろついていた他の生
+	物によって体力を削られて死に至った者達の話はよく聞かれる．
+肉のゴーレム
+flesh golem
+*frank*n*st*n*
+	苦しいほどの熱意に駆られ，わたしは足もとに横たわる命のない物体
+	に生命の火花を吹きこむべく，生命の器械をまわりに集めました．す
+	でに午前一時．雨がぱらぱらと陰気に窓を打ち，蝋燭は今にも燃えつ
+	きようとする，そのとき，なかば消えかけた微かな光に，わたしは生
+	き物のどんより黄色い目がひらくのを見たのです．それは重く息をつ
+	き，痙攣が手足を走りました．
+
+	この大詰めのわたしの感情を語ることなどできるでしょうか．どう描
+	いたらいいのでしょう，計り知れる苦心と用心をかさねて創りだそう
+	としてきた，このあさましい生き物を？四肢は均整がとれ，容貌も美
+	しく選んであった．美しく！--これが美しいと！黄色い皮膚は下の筋
+	肉や動脈の作用をほとんど隠さず，髪は黒くつややかにすらりと伸び，
+	歯の白さは真珠のよう．だがそんな贅沢は，いっそうおぞましくきわ
+	だたせるばかりでした．はめこまれた薄茶の眼窩とほとんど同じ色に
+	見えるうるんだ目，やつれたような顔の色，一文字の黒い唇を．
+		[ Frankenstein, by Mary Wollstonecraft Shelley ]
+		[ フランケンシュタイン，創元推理文庫，森下弓子訳 ]
+*フルート
+*flute
+	さあこれであなたは何でもできます．
+	人の心も変えられます．
+	悲しむ人にも笑顔がもどり，
+	女ぎらいも恋に心を開きます．
+		[ The Magic Flute, by Wolfgang Amadeus Mozart ]
+		[ 魔笛, 荒井秀直訳, 音楽之友社 ]
+霧の雲
+fog cloud
+	霧がくる
+	小さな猫の足つきで
+	
+	静かに腰をおろして
+	港と街を
+	眺めわたしている
+	それから動いていく．
+	     [ Fog, by Carl Sandburg ]
+	     [ 霧, 安藤一郎・新倉俊一訳 ]
+泉
+fountain
+	憩え! この小さな泉は流れる
+	かく永遠に--決してとどまらない
+	夏の太陽の照りにも
+	冬の日の寒さにも
+	近くをさすらう誰でも
+	シリアの熱がもっともひどいときは
+	彼をこちらへ来させよ，
+	喉のかつえが満たされないといけないから
+	彼は気づくだろう，この小川が
+	静かにいつも明るく流れていると
+	彼に飲ませよ，そして道を先へと急がしめよ
+	心のなかでのみ考えながら
+	私Erotasは命じる
+	水の精ナイアスが落ちることを
+	そして偉大な牧神パンに感謝を!
+		[ For a Fountain, by Bryan Waller Procter ]
+狐
+きつね
+fox
+	ある暑い夏の日，一匹の狐が果樹園を散歩しており，やがて高い
+	枝の上に剪定されたつるに実った葡萄の房を見つけた．「喉のか
+	わきをいやすのにぴったりだ」と狐は言った．狐は2，3歩下がり，
+	枝に飛びつこうとしたが，失敗した．同じようにもう一度，二度，
+	三度，狐は飛びあがったが，さしてうまくいかなかった．魅力的
+	な一口に誘われて何度も挑戦したが，ついにはあきらめねばなら
+	なかった．狐はいばりくさって歩き去りながら言った．「あれは
+	酸っぱいにちがいない」
+		[ イソップの寓話 ]
+
+#[SLASH'EM 0.0.7E6]
+	後に，小麦が実る頃，サムソンは若い山羊を連れて，彼の妻のも
+	とを訪ねた．彼は「妻の部屋に行く」と言ったが，彼女の父親は
+	彼に入らせなかった．
+	「お前が完全に彼女を憎んでいる事は確かだろう，」と彼は言っ
+	た．「だから私はお前の友人に彼女を与えた．彼女の妹の方が一
+	層魅力的ではないか？代わりに彼女を連れて行きなさい．」
+	サムソンは彼らに言った，「今や私にはペリシテ人に仕返しをす
+	る権利がある．本当に彼らを傷つけるだろう．」と．そして彼は
+	外に出て，三百匹のキツネを捕え，それらをペアにして尻尾と尻
+	尾を結びつけ，全ての尻尾に松明をくくり付けて火をつけ，ペリ
+	シテ人達の麦畑の只中に放った．
+		[ Judges 15:1-5, NIV ]
+キノコ
+菌類
+*fung*
+	菌類．クロロフィル，真茎，根，葉の欠けた単純植物に属する．藻類
+	と違って菌類は光合成ができず，植物や動物死骸に寄生して生きている．
+	真菌類は変形菌と真菌からなる．真菌は多細胞(イースト菌を除く)生物
+	で，ほとんどの真菌類の体は細い綿のような単繊維や菌糸からなる．全
+	ての菌類は細胞分裂，発芽，分裂，胞子による無性生殖が可能である．
+	有性生殖をする物は有性世代(配偶体)と胞子体世代が交互にある．真菌
+	類の4つの綱は鞭毛菌類(例えば黒パンカビや，べと病菌)，子嚢菌類(例えば，
+	イースト菌，白カビ，トリュフ，ペニシリンのような青緑カビ)，担子菌
+	類(例えば，マッシュルーム，ホコリタケ)，不完全菌類(例えば，みずむ
+	しの原因となる種や白癬菌)である．菌類は有機体を分解する手助けをし
+	(土壌の再生に重要)，抗生物質，ビタミン，様々な化学薬品の原料として
+	あるいはその発酵作用(例えば，パンやアルコール飲料生成)に重要なもの
+	である．
+		[ The Concise Columbia Encyclopedia ]
+*ガーゴイル
+*gargoyle
+	かくして人類が地上を支配するようになり，ガーゴイルどもは光
+	から逃れ，潜伏して待っていた．人間の時間にして600年ごとに
+	生まれかわり，ガーゴイルどもは地上の支配権を得るために人類
+	との戦いに加わった．
+
+	戦いのたびにガーゴイルどもは，ますます増えて繁栄していく人
+	類によって，ほぼ全滅させられてきた．今や，古いガーゴイルの
+	像や絵画が単なる人間の想像の産物だと思われるようになって，
+	何百年もがすぎた．この年月，人類の考えは自分たちがまわりに
+	もたらした多くの邪悪なものに向かっていたので，人類はその最
+	も古い敵対者であるガーゴイルどもを忘れてしまった．
+	[ Excerpt from the opening narration to the movie
+		_Gargoyles_, written by Stephen and Elinor Karpf ]
+大蒜
+にんにく
+*garlic
+	１１月１日――終日，快速力で旅を続けている．馬も親切に扱われて
+	るのを知ってか，喜んで精いっぱいの速力で走っている．馬の取り換
+	えは，今までに何度かしたが，まだ同じことがつづきそうだ．早くそ
+	んなわずらわしさのない，気楽な旅になりたいと思う心しきりなり．
+	教授はあいかわらずテキパキしている．百姓たちには，ビストリッツ
+	へ急ぐ者だといって，お金をたんまり払って馬を換えさせる．私たち
+	は熱いスープ，コーヒー，お茶などをふるまってもらい，それからま
+	た出発する．風光の美しい地方で，住民はりりしく，強壮で，しかも
+	正直で，性質がいい．彼らは非常に迷信深い．私たちが馬車をとめた
+	最初の家では，とりなしに出てきた女の人が，私の額の痣を見ると，
+	いきなり十字を切って，魔除けの二本指をつき出した．きっと私たち
+	に御馳走してくれた料理の中には，ニンニクをわざわざよけいに入れ
+	たにちがいない．私はまた，ニンニクはとても我慢がならないときて
+	いる．このことがあってから，なるべく注意して，私は帽子やヴェー
+	ルをとらないことにした．そうしていれば，土地の人の迷信からはの
+	がれられていた．
+		[ Dracula, by Bram Stoker ]
+		[ 吸血鬼ドラキュラ, 平井呈一訳, 創元推理文庫 ]
+包子ガス
+gas spore*
+#[SLASH'EM 0.0.7E6]
+	ガス胞子はビホルダーに似た外見を持つ，あいまいな知性をもつ菌類で
+	ある．もしそれらが何らかの攻撃を受けたら，激しく爆発するであろう．
+	ガス胞子は集団で成長する傾向があり，そして伝説には，愚かにもその
+	１つに触れた冒険者によって引き起こされた破壊に関する記述が有る．
+	    [ Adapted by Ben Lehman from Monstrous Manual, by TSR, Inc. ]
+ゲーリュオーン
+『ゲーリュオーン』
+geryon
+	ゲーリュオーンはときに野獣と呼ばれる大悪魔であり，爪と毒針で
+	攻撃してくる．地獄での階級は極めて低いと云われている．
+幽霊
+*ghost
+	去った亡者の白霊たちが，幽冥界から浮かび上がって群がり寄るのは，
+	若い少女やまだ独身の青年たち，またずいぶん苦労した(らしい)老人など，
+	あるはまたやさしい乙女の，生々しい痛みを胸に抱くものなど，
+	また大勢は，青銅をはめた槍をもて突き殺されて亡ったもの，
+	あるは戦さに命を落とし，なお血まみれな武具を着けた武士など，
+	おびただしく穴のまわりへ，四方八方からてんでんに群らがり寄って，
+	おっそろしい叫喚のこえをあげるのに，色蒼ざめる恐怖が私を捉えました．
+	     [ The Odyssey, (chapter Lambda), by Homer ]
+	     [ 岩波文庫，呉茂一訳 ]
+グール
+ghoul
+	諸々のやみの力は互いに知り合い，互いに不思議な均衡を保っている．
+	牙も爪も，つかみ得べからざるものを恐れる．血をすする獣性，餌物を
+	さがす飢えたる貪欲，爪と顎とをそなえ腹のみがその源であり目的であ
+	る本能，それらのものは，平然たる幻の姿をおずおずとながめまたかぎ
+	まわす．その姿は経帷子に包まれて彷徨し，おぼろなるうち震う上衣に
+	くるまって直立し，死の世界の恐ろしい生命に生きてるがようである．
+	ただ物質にすぎない獰猛性などは，凝って一つの不可解なる者となって
+	広大なる暗黒を相手にするのを，漠然と恐れている．道をふさぐ黒い形
+	は，一挙に野獣の歩みをさえぎり止める．墳墓から出でたる者が，洞窟
+	から出でたる者を脅かし狼狽させる．獰猛なるものは凄惨なるものを恐
+	れる．狼は幽鬼に出会ってあとに退く．
+		[ Les Miserables, by Victor Hugo ]
+		[ レ・ミゼラブル, 豊島与志雄訳, 岩波文庫 ]
+*巨人
+*giant
+giant humanoid
+	巨人はいつも大地を歩いていたが，最近では彼らは非常に希な存在
+	となっている．彼らのサイズと言ったら，9フィートたらずのから
+	空にもそびえる20フィート以上のものまでいる．大きなものは巨大
+	な岩を武器として使い，遠くからでもそれを投げつける．全ての種
+	類の巨人は人間（焼いたり，煮たり，揚げたりしたもの）が大好き
+	という点で共通している．彼らのテーブルマナーは伝説的だ．
+毒トカゲ
+gila*
+#[SLASH'EM 0.0.7E6]
+	[Gila monsters] are stout-bodied lizards with short legs and a short,
+	fat tail. They're covered with bright irregular markings, usually
+	pink, yellow or white, against black or brown scales. They are shy,
+	retiring creatures unless they're provoked. Then they can be
+	dangerous because they secrete a neurotoxin -- a poison that
+	destroys nerve tissue -- from their salivary glands. In humans,
+	their bite can result in severe pain and even death.
+	    [Expedition Guide -- American Museum of Natural History]
+コモド*
+komodo*
+#[SLASH'EM 0.0.7E6]
+	The people of Komodo call this animal "ora." Elsewhere it is known
+	as the Komodo Island monitor or more popularly, the Komodo dragon.
+	Oras can reach 10 feet in length and weigh 300 pounds or more --
+	particularly after a meal. They are the top predators in their
+	habitat, feeding on wild boar, deer, water buffalo, dogs, goats,
+	rats, snakes, birds, other oras, and -- once in a great while --
+	humans. They hunt by ambush, hiding in the scrub brush along trails
+	and in the tall grass of the savannas. Despite their lumbering
+	appearance, oras can move with alarming speed when they want to,
+	lunging from their hiding places and sprinting toward their
+	startled victims. They can't sustain a long chase, but often all
+	they need to subdue their prey is one bite. Oras carry poisonous
+	bacteria in their mouths so even if they don't immediately catch
+	their prey, the attack is often fatal. Using their long forked
+	tongues (oras and other monitor lizards are closely related to
+	snakes), they track the scent of their prey as the wounded animal
+	slowly weakens from the infected bite -- a process that can take
+	several days. When the victim can no longer flee, the ora moves
+	in for the kill. Oras are voracious eaters. They devour every bit
+	of their prey -- bones, fur, hooves -- ripping off huge chunks with
+	their razor-sharp serrated teeth and swallowing the pieces whole.
+	    [Expedition Guide -- American Museum of Natural History]
+グレイブ
+glaive
+#[SLASH'EM 0.0.7E6]
+	グレイブはナイフ状の刃を持つ槍である． それは槍の突き刺す
+	機能とナイフの凸の刃の二次的な切断機能を持っている．この武
+	器は切り裂き攻撃での切断能力を上げる為に，急速に刃が大型化
+	した．しかし槍やフォーシャールと同様，この武器は突撃を止め
+	る機能は無く，また貫通力や落馬能力も持たない．
+神秘的なノーム
+deep gnome
+#[SLASH'EM 0.0.7E6]
+	Far beneath the surface of the earth dwell the Svirfneblin, or Deep
+	Gnomes. Small parties of these demihumans roam the Underdark's mazes
+	of small passageways searching for gemstones. They are said to dwell
+	in great cities consisting of a closely connected series of tunnels,
+	buildings, and caverns in which up to a thousand of these diminutive
+	creatures live. They keep the location of these hidden cities secret
+	in order to protect them from their deadly foes, the kuo-toa, Drow,
+	and mind flayers.
+	Svirfneblin are slightly smaller than rock gnomes, but their thin,
+	wiry, gnarled frames are just as strong. Their skin is rock-colored,
+	usually medium brown to brownish gray, and their eyes are gray. Male
+	svirfneblin are completely bald; female deep gnomes have stringy gray
+	hair. The average svirfneblin life span is 250 years.
+		[ The Underdark, by Mike Drees and Albert Foster ]
+# note: "gnomish wizard" is a monster; cave*man entry doesn't fit nonhumans
+~*ゾンビ
+~*ミイラ
+ノーム*
+~gnome ??m*
+gnome*
+gnomish wizard
+gnom* cave*man
+	... そのあとから，小鬼(インプ)の三倍もほどもある土鬼(ノーム)
+	が，荷物をかついで駆けてきた．独特の服，それにとりわけ独特の
+	帽子をかぶったやつだ．この土鬼は小鬼ほど足が早くないが，怯え
+	ていることに変りはなかった．こうした魔法の民をおびやかすよう
+	な一大事が，森のなかでもちあがったのだ．ラモン・アランソは，
+	土鬼が人間の言葉をしゃべる上に，人間に声をかけられればかなら
+	ず答える習性をもっていたことを思いだし，帽子をふり上げて土鬼
+	の名前を尋ねた．土鬼はあわただしい駆けっこを一瞬もやめないで，
+	自分の名を「アラバマ」と教えてくれた．帽子のふちにも手をやっ
+	たけれど，脱ぐのは忘れた．
+	「何が起きたんだ，アラバマ」とラモン・アランソが訊いた．
+	「白い魔法だよ！逃げろ！」土鬼はそういって必死に走りつづけた．
+			[ The Charwoman's Shadow, by Lord Dunsany. ]
+					     [ハヤカワ文庫 荒俣宏訳]
+
+	「マグルの庭にも飾り用の小人が置いてあるの，知ってるだろ」
+	　ハリーは芝生を横切りながらロンに言った．
+	「あぁ，マグルが庭小人だと思っているやつは見たことがある」
+	ロンは腰を曲げて芍薬の茂みに首を突っ込みながら応えた．「太っ
+	たサンタクロースの小さいのが釣り竿を持っているような感じだっ
+	たな」
+	　突然ドタバタと荒っぽい音がして，芍薬の茂みが震え，中から
+	ロンが立ち上がった．「これぞ」ロンが重々しく言った．「ほん
+	との庭小人なのだ」
+	「放せ! 放しやがれ!」小人はキーキー喚いた．
+	　なるほど，サンタクロースとは似ても似つかない．小さく，ゴ
+	ワゴワした感じで，ジャガイモそっくりの凸凹した大きな禿頭だ．
+	堅い小さな足でロンを蹴飛ばそうと暴れるので，ロンは腕を伸ば
+	して小人をつかんでいた．それから足首をつかんで小人を逆さま
+	にぶら下げた．
+	  [ Harry Potter and the Chamber of Secrets, by J. K. Rowling ]
+	  [ ハリー・ポッターと秘密の部屋, 松岡佑子訳, 静山社 ]
+ゴブリン
+goblin
+	もともとゴブリンは，ざんこくで，腹黒くて，しんから悪いやつ
+	です．美しいものを作りだせないくせに，手さきはかなりきよう
+	です．いちばんじょうずなドワーフにはかないませんが，とにか
+	くドワーフなみにトンネルを掘り，鉱山を掘ります．もっとも，
+	ふだんはそんなに働かないで，だらしがなくて，よごれほうだい
+	です．つちに斧，剣に短刀，つるはしにやっとこ，そのほかの
+	武器や，ひとをいためる道具などをゴブリンたちはけっこうじょう
+	ずに作りますし，ほかの者を使って思いどおりに作らせることも
+	あります．ほかの者というのはつかまえた者や奴隷たちで，空気
+	と光がたりないで死んでしまうまで，働かされるのがきまりです．
+	     [ The Hobbit, by J.R.R. Tolkien ]
+	     [ホビットの冒険，岩波少年文庫，瀬田貞二訳]
+神
+女神
+god
+goddess
+	ひとりで仕事をすることもあれば，3人組，または9人やそれ以上
+	の集団で仕事をすることもある(宗教を見よ)．どの神々も，自分
+	が世界を創造したと主張するが，実際，3人組か集団の神々がそう
+	主張するのはもっともである．ファンタジーランドには複数の者
+	によって造られた雰囲気があるからだ．けれども，彼らが世界を
+	造ったと主張しているかどうかは別にして，すべての神々は，詳
+	細な短期計画を練っていて，それを実現しようと堅く心に決めて
+	いる．その結果，彼らは偶然や予言によって，または単に，選択
+	の余地をなくすことで，人間に自分たちに必要な行動をとらせる．
+	もしある神がそうしようと決めたなら，あなたの人生はどんどん
+	惨めになっていって，最後にはひとつしか選択の余地が残されて
+	いないことだろう．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.51-52, 神々
+ゴールド
+金
+gold
+gold piece
+zorkmid
+	独特の黄色をした金属で，最も希少な金属，商業において共通の兌
+	換価値として用いられた．元素記号Au，元素番号79，原子量197.2．
+	あらゆる金属の中で，もっとも展性と延性に富み，また，かなり重
+	い(比重19.3)．熱，湿気，腐食に非常に強く，そのため貨弊や宝石
+	装飾に適する．
+					[ ウェブスター英語辞典2版 ]
+金のゴーレム
+gold golem
+	鞴は火から離して置き，これまで使っていた道具はすべて集めて銀の櫃
+	に納める．海綿で顔や手，逞しいくびと頸と毛むくじゃらの胸の汚れを
+	拭き取ってから肌着をつけ，太い杖をとって足を引き摺りながら仕事場
+	を出ると，生きた娘さながらに造られた黄金製の侍女たちが，主の身を
+	支えながら足早に歩んでくる．侍女たちの胸中には心が宿り，言葉も話
+	しまた力もあり，神々から教えられてさまざまな手業の心得もある．
+		[ The Iliad, by Homer ]
+		[ イリアス, 松平千秋訳, 岩波文庫 ]
+~金のゴーレム
+~肉のゴーレム
+*ゴーレム
+~gold golem
+~flesh golem
+*golem
+	「ことの起こりは十七世紀にさかのぼると言われてる．カバラのいま
+	では散逸してしもうた規定書に従って，ある牧師が，下男にして教会
+	堂の鐘をつかせたり，いろんな雑用をさせるつもりで人造人間を----
+	つまりゴーレムをだな----こしらえたと言うんだ．
+
+	ところがまともな人間ができずに，そいつには鈍重な，半分痴呆の，
+	植物みたいな生命しか宿らんかったんだな．しかもその生命も昼間だ
+	けのもんで，そいつの歯のうしろに貼った護符の力で宇宙の星の，あ
+	いてるエネルギーを借りてたんだそうだ．
+
+	ある晩のこと，その牧師が夜の祈りのまえにゴーレムの口から護符を
+	はずすのを忘れたら，ゴーレムのやつ急に狂暴になって，裏町の暗闇
+	を狂いまわり，出くわすものを片っぱしから叩きつぶした．
+
+	しまいに牧師が体当りをして，やっと護符をはがしたんだそうだ．
+
+	そしたらそいつはいのちをなくしてぶっ倒れてしまい，あとに残った
+	のは小人のかたちをした土くれだけだったそうだ．いまでもその土く
+	れはアルトノイ教会堂に展示されてるけど」 ...
+	    [ The Golem, by Gustav Meyrink ]
+	    [ ゴーレム, 今村孝訳, 河出書房新社 ]
+墓
+grave
+	「だれが掘りたいもんか」と老いさらばえた男
+	「チョークで印した六尺の穴なんぞ
+	口は達者　足はなお達者なこのわしが
+	埋葬される時期とな」と老いさらばえた男
+		[ Three Songs to the Same Tune, by W.B. Yeats ]
+		[ イェイツ全詩集，鈴木弘訳，北星堂 ]
+グレイスワンダー
+grayswandir
+	なぜ私はグレイスワンダーを持っているのだろうか．他の武器な
+	ら，こうも強くLogrusの「影」に影響を与えただろうか．ならば，
+	私をここへつれてきたのは本当に私の父だったのか．そして，父
+	は，父の武器が供給できる特別な鋭さを私が必要とするだろうと
+	感じたのか．私はそう考えたかった．彼が単なる「模様」の「影」
+	以上のものだと信じるために．
+		[ Knight of Shadows, by Roger Zelazny ]
+脂*
+*grease
+	ANOINT(動詞)【聖別する(聖式で頭に油をそそいで)】
+	もうすっかりつるつるに［ずるく］なっている王や他の高官
+	どもの頭を塗りたくる．
+	[ The Devil's Dictionary, by Ambrose Bierce ]
+	[悪魔の辞典，A．ビアス，奥田俊介，倉本護，猪狩博訳，角川文庫]
+緑のガラス
+銀の指輪
+*green glass
+silver ring
+#[SLASH'EM 0.0.7E6]
+	Nymph, nymph, what are your beads?
+		Green glass, goblin. Why do you stare at them?
+	Give them me.
+		No.
+	Give them me. Give them me.
+		No.
+	Then I will howl all night in the reeds,
+	Lie in the mud and howl for them.
+		Goblin, why do you love them so?
+	They are better than stars or water,
+	Better than voices of winds that sing.
+	Better than any man's fair daughter,
+	Your green glass beads on a silver ring.
+		Hush, I stole them out of the moon.
+	Give me your beads, I desire them.
+		No.
+	I will howl in a deep lagoon
+	For your green glass beads, I love them so.
+	Give them me. Give them.
+		No.
+		[ Overheard On A Saltmarsh, by Harold Monro ]
+グレムリン
+gremlin
+	グレムリンは高い知能をもつ，ひどく邪悪な生き物である．他の生
+	き物を困らせるために生きていて，苦痛や，障害を与えようとする．
+
+	　ふいに，戦争中の新聞記事を思い出した．連合軍のパイロットたちが
+	出撃中に，空に棲むと思われている生き物に悩まされた，という話が載っ
+	ていたのだ．その生きものは，たしかグレムリンと呼ばれていたはず．
+	実際に，そんな生きものがいるのだろうか．こんな高い上空で，ちゃん
+	と体積も体重もあるらしいのに重力の影響を受けず，ふわふわ風に乗っ
+	て飛んでいるなんて，考えられるか？そんなことを考えていると，あい
+	つがまた姿をあらわした．
+		[ Nightmare at 20,000 Feet, by Richard Matheson ]
+		[ 二万フィートの悪夢, ミステリーゾーン 4, 矢野浩三郎訳,
+			文春文庫 ]
+グリッドバグ
+grid bug
+	これらの電気にもとづく生物は，我々の宇宙に自然にあるもので
+	はない．このものどもは，我々の世界とはまったく異なる運動の
+	法則をもつ世界からあらわれた．
+
+	トロンは，友人とヨーリのほうを向いて，
+	「船首のビーム連結の具合を見てくる．
+	ヨーリ，フリンと二人で，ビームのネットワークに欠陥がないか，
+	見はっていてくれ．」
+	フリンは，ビーム連結が完全であることをいのった．
+	太陽帆船がレールから飛びだすなどという悲劇にあいたくなかった．
+	    [ Tron, novel by Brian Daley, story by Steven Lisberger ]
+# トロン, ブリアン・デイリー, 久米穣 訳編, 講談社, 昭和57, p.163
+アークバグ
+スパークバグ
+電光バグ
+lightning bug
+arc bug
+spark bug
+#[SLASH'EM 0.0.7E6]
+	"What was that?" cried Buck, rubbing his numb and tingling arm.
+	"Nature's revenge for bug zappers," replied his companion.
+ガグ
+gug
+#[SLASH'EM 0.0.7E6]
+	これらの異形のものは，ン・カイの谷間の無限の暗闇の中に存在し，
+	不幸にもそれに出くわした侵入者の骨をむさぼる．それらがグール
+	の歪んだ姿かもしれないという説には疑問があるが，それらを目に
+	して生き残った者がほとんどいない為，情報が不足している．
+ギザルム
+guisarme
+#[SLASH'EM 0.0.7E6]
+	中世の小作農が，彼らの引っ掛け鉤から相応に効果的な長柄武器を
+	生み出せる事を発見した．ギザルムである．それは鉤の凸の側面に
+	沿って鋭い刃を，また引っ掛ける為に逆向きのスパイクを備えてい
+	る．スパイクはこの武器を振り回した時に相手の鎧を貫通する為に，
+	また鉤は騎手を地面に引きずり落とす為に用いる事ができる．
+丸薬
+gunyoki
+	侍が戦いの前に食べる究極の食事．普通，勝ち栗，コンブ，酒から
+	なる．
+ハチ公
+hachi
+	ハチ公は教授である主人に仕え毎朝渋谷駅まで通っていた犬である．
+	午後彼の主人が仕事から戻ってくるときには，ハチはいつも駅で
+	待っていた．ある日彼の主人が仕事場で死にもう二度と戻ってこな
+	くなった．しかし10年もの毎日，ハチは午後になると駅へやって来て
+	彼の主人の帰りを待っていた．ハチが死んだとき，彼を讃え，駅の
+	プラットホームに像が立てられた．今でも像に触ると幸せになれる
+	と言われている．
+ハルバード
+halberd
+#[SLASH'EM 0.0.7E6]
+	長柄斧のこの形状は，初期には凸の頭部をもつ広刃斧だったが，しかし
+	その頭部は，刃が敵に最も強い打撃を与えられるよう考慮された，都合
+	が良い角度に設定されている．これはこの武器を普通の長柄斧とはまる
+	で異なったものにしている．武器の全長は約８フィートに達し，ほぼ常
+	に頭部には長い槍状の穂先を，背にはしばしば下方に曲がっていたり鉤
+	状だったりするスパイクを持つ．槍の穂先はもちろん相手を寄せ付けな
+	い為に，そして突き刺す為に（ランスで武装した騎士に対しては全く効
+	果が無い事が立証されているが）用いられる．反対側のスパイクは相手
+	の鎧を貫通する為に，また相手を落馬させる為に用いられる．
+*ハープ
+*harp
+	弦を張った三角形の楽器で，魔法の道具であることが多い．魔法
+	のものでなくても，おどろくほど携帯可能で壊れにくく，どんな
+	悪天候下であろうと，吟遊詩人や竪琴弾きがどこへでも背負って
+	いくことが可能である．竪琴はめったに音が外れることがなく，
+	反り返ることは決してない．弦はごくたまに切れるだけで，それ
+	はたいていは竪琴弾きが不機嫌なときか，失恋したときである．
+	だから，誰も予備の弦を作ったり買ったりしていないのだろう．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# p.161, 竪琴
+
+	　朝飯が終わると，人食い鬼はこうどなった．「かみさん，かみさん，
+	黄金のハープを持ってきてくれ」そこで奥さんがもってきてテーブルの
+	上にすえた．そこで人食い鬼が「うたえ」というと，黄金のハープは，
+	じつに美しい音でうたった．そして人食い鬼が眠ってしまって，雷のよ
+	うないびきをかきはじめるまでうたっておった．
+	　そこでジャックは大鍋のふたをそおっともちあげて，ねずみのように
+	床へおりて，よつんばいでテーブルのところまで行くと，はい登るよう
+	にしてハープをつかみ，それをもってドアのほうへつっ走った．ところ
+	がハープは大きな音で「だんな！だんな！」とうたいだしたので人食い
+	鬼が目をさますと，ちょうどジャックがハープをひっかかえて逃げて行
+	くところが見えた．
+	　[ジャックと豆のつる　木下順二訳　岩波書店]
+		[ Jack and the Beanstalk, from English Fairy Tales,
+		  by Joseph Jacobs ]
+薬師
+healer
+* healer
+attendant
+doctor
+physician
+	医神アポロン，アスクレピオス，ヒギエイア，バナケイア及び全ての男
+	神と女神に誓う，私の能力と判断に従ってこの誓いと約束を守ることを．
+	この術を私に教えた人を我が親の如く敬い，我が財を分かって，その必
+	要あるとき助ける．その子孫を私自身の兄弟の如くみて，彼らが学ぶこ
+	とを欲すれば報酬なしにこの術を教える．そして書き物や講義その他あ
+	らゆる方法で，私のもつ医術の知識を我が息子，我が師の息子，また医
+	の規則に基づき約束と誓いで結ばれている弟子どもに分かち与え，それ
+	以外の誰にも与えない．私は能力と判断の限り患者に利益すると思う養
+	生法をとり，悪くて有害と知る方法を決してとらない． 
+		[ Hippocrates' Oath, translated by Francis Adams ]
+		[ ヒポクラテスの誓い, 新簡明公衆衛生第2版, 
+			稲葉裕, 野崎貞彦編, 南山堂 ]
+# 稲葉裕, 野崎貞彦編, 新簡明公衆衛生第2版, 南山堂, 1996, p.299
+
+	医者〔名〕われわれが病気のときには望みをあっけ，健康なときには
+	犬をけしかけたくなる奴．
+		[ The Devil's Dictionary, by Ambrose Bierce ]
+		[ 悪魔の辞典, 郡司利男訳, こびあん書房 ]
+# アンブローズ・ビアス, 郡司利男訳, 正・続全訳悪魔の辞典, こびあん書房, 1982, p.305
+アーリマンの心臓
+heart of ahriman
+	三人の仲間たちは思わず息を飲んだ．柩の前に立った黒い巨人が，
+	ささやき声をあげた．「アーリマンの心臓よ！」男は片方の手で，
+	仲間たちのざわめきを制した．どこからか，無気味な野犬の遠吠
+	えがひびきあがり，かんぬきをうちおろした扉の外で，重々しい
+	足音が聞こえた．だが，男たちの視線は木乃伊(ミイラ)の柩から
+	動かなかった．テンの毛皮で縁取りされた法衣に身をつつんだ男
+	は，燃えるような宝球を動かしながら，あのアトランチスよりも
+	古い呪文をあいかわらず唱えつづけていた．宝石の輝きが男たち
+	の瞳を眩惑させるためか，かれらは今目の当たりにしているもの
+	の正体を確認することができなかった．だが次の瞬間，三人の前
+	に置かれた緑色の柩が轟音とともに破られた．ちょうど，抵抗を
+	許さぬほど強大な圧力が柩のなかで膨張し，彫刻をほどこした柩
+	の蓋を打ち砕いたようだった．四人の男たちはいっせいに身をか
+	がめて，中にはいっているものを見つめた--腐敗し，糜爛し，萎
+	縮した人体が，そこに横たわっていた．朽ち果てた包帯から，埋
+	れ木のようにどす黒い四肢の骨がかいまみえた．
+	「生き返ったのか？」右端にたたずんでいた色の黒い小男が，毒
+	を含んだ笑みを浮かべながらささやいた．「指を触れただけでも
+	こなごなに崩れそうではないか．わしたちはひょっとすると，馬
+	鹿を見たのかもしれんぞ--」
+		[ Conan The Conqueror, by Robert E. Howard ]
+		[ 征服王コナン，団征二訳，ハヤカワ文庫 ]
+ヘルハウンド*
+hell hound*
+	ヘルハウンドは炎の息を吐く犬で，悪魔に仕えさせるためにこの地と
+	は別の実在界から持ち込まれた．ヘルハウンドは，毛が赤錆色か赤茶
+	色で，赤く燃えるような目をした大型の猟犬に似ている．体の模様も
+	歯も舌もすす黒い．肩までの高さは2フィートから3フィートで，独特
+	の煙と硫黄との臭気を漂わせている．その吠え声は不気味なこもった
+	音で，これを聞いた者に身震いを起こさせる．
+ヘルメス
+hermes
+	オリンポスの使者および伝令官．多くの旅行と演説を公に行うこと
+	が要求されたので，彼は雄弁，旅行者，商業，盗賊の神になった．彼
+	は策略だらけのマキャベリ主義の性格や性的欲情からギリシアの神々
+	のなかでももっともエネルギッシュな一人である．他のギリシアの神
+	々のように，彼には地方のニンフ達に向けられた数多くの性的な武勇
+	がある．彼は境界の神であり，墓の番人であり，羊飼いの保護者の象
+	徴である．彼は通常羽のついた金の履物を履き，ヘビがからみついた
+	魔法の使者の杖を持ったりりしい若者として描かれる．彼はウワサで
+	はカロンの下界への船から戻る道を見つけられる唯一の者である．彼
+	は他にもリラ(古代ギリシアの竪琴)やパンのパイプ，数字，アルファ
+	ベット，度量衡，いけにえの行為を発明したと言われる．
+ヘズロウ
+hezrou
+	ヘズロウは第II種の魔神の総称である．悪魔の中では比較的弱いほ
+	うであるが，それでも，十分に手ごわい．
+ヒポクラテス
+『ヒポクラテス』
+hippocrates
+	ギリシャの医師．「医学の父」として知られる．信じられるとこ
+	ろによると，彼はコス島に産まれ，医師である父に学び，おそら
+	くアテナで学ぶためにしばしば旅行し，コス島に戻ってきてから
+	開業し，教育や著述を行った．彼の周囲に形成されたヒポクラテ
+	ス派あるいはコス派は，医学を，迷信と哲学的思弁とからきりは
+	なし，客観的観察と批判的演繹法に基づく厳密に科学的な段階に
+	位置づけたという点できわめて重要である．
+		[ The Columbia Encyclopedia, Sixth Edition ]
+ホビット
+hobbit
+	ホビット族は，きわめて表に出たがらない，さりながらはなはだ
+	古い種族で，以前は人数も今日とはくらべものにならないくらい，
+	実に多かった．というのも，平和と静けさとよく耕された大地を
+	愛する種族だからである．整地よく，耕作よき田園こそ，かれら
+	の好む棲処だった．かれらは道具の扱いがうまいくせに，今も昔
+	も，炉とふいご，水車，または手織ばたの類より複雑な機械はわ
+	からず，あるいは好まなかった．古代にあってすら，ホビット族
+	は一般に，かれらがいうわれわれ人間族の通称「大きい人たち」
+	をうとんじていたのだが，今日ではわれわれの姿を見ると怖れあ
+	わてて避けるので，かれらを発見することはむずかしくなってき
+	ている．		
+		   [ The Fellowship of the Ring, by J.R.R. Tolkien ]
+					      [ 評論社, 瀬田貞二訳 ]
+ホブゴブリン
+hobgoblin
+	ホブゴブリンは，清教徒たちによって，また時代が下ってからは，例
+	えばジョン・バニヤンの「ホブゴブリンにも悪魔にもわたしの心はひ
+	るまない」という表現が示すように，邪悪なゴブリン族の妖精を指す
+	のに用いられたが，ブラウニー型の親しみやすい妖精を指すのに用い
+	るのが正しい．『夏の夜の夢』では，シェイクスピアのパックに向かっ
+	て妖精がこう言っている．
+		「ホブゴブリン様とか，わたしのパックとか
+		呼んでくれる人たちのためには，
+		仕事をしてやり，幸運を授ける，
+		そのパックなんでしょう，あなたは？」
+	もしもホブゴブリンというのが悪い響きのある言葉ならば，パックは
+	もちろんそう呼ばれるのを好むはずがない．
+
+	概してホブゴブリンは気だてがよく，喜んで手助けをし，悪ふざけを
+	するのが好きで，かつまたほとんどの妖精と同じように，機嫌を損ね
+	ると危険な連中である．ボガートはホブゴブリンに属するか属さない
+	かの境目にいる．ボーグルはわずかに外れる．
+
+	ヘンダーソンによって記述されたもので，より邪悪なホブに〈首なし
+	ホブ〉がいる．これはハーワースとニーサムの間の道路に出没したが，
+	ティーズ川に流れこむ小さなケント川を渡ることができなかった．こ
+	のホブは，魔除けの力によって道端の大きな石の下に，満99年のあい
+	だ閉じこめられた．もし不注意にその石に腰を下ろした人は，永久に
+	そこから離れられなくなる．その99年の期限がそろそろ明けようとし
+	ているので，ハーワースとニーサム間の道路で，何か事件がもちあが
+	るかもしれない．
+		[ A Dictionary of Fairies, by Katharine Briggs ]
+		[ 妖精事典, 平野敬一 他訳, 冨山房 ]
+聖水
+holy water
+	「我々はお前に合う単語を欲する」と（その「単語」が「恐ろしく痛い
+	永遠」と同意語であることを暗示するかのように意図された声の調子で）
+	リグルは言い，そしてずんぐりした悪魔はオフィスドアを押し開いた．
+	バケツがぐらつき，リグルの頭めがけて落ちた．
+	水の中にナトリウム塊を落としてみよう．それが燃え上がって焼けて狂っ
+	たように回転し，めらめら燃えてパチパチ音をたてるのを観察しよう．
+	これはちょうどそんな不快な感じに似ている．
+	悪魔は皮がむけ，そしてめらめら燃えて，ゆらめいた．油っこい茶色の煙
+	を噴き出し，叫びをあげ金切り声をあげ悲鳴をあげた．そしてそれは崩れ
+	落ち，それ自身に包み込まれ，そしてまるでつぶれたナメクジのようなも
+	のが１つかみ，カーペットの焼けて黒焦げた円の上にきらきら輝いて残っ
+	た．
+	「やあ」リグルの後ろを歩いていて，あいにくそれほどしぶきを浴びなかっ
+	たハスターに，クロウリーは声をかけた．
+	想像もできない事もある．悪魔でさえ他の悪魔がそこまで成り下がるとは
+	信じられないであろう深みがある．
+	「…聖水か，クズ野郎」とハスターがつぶやいた．「お前は本当にクズ野
+	郎だ．奴がお前に対して何かした訳でもないだろう」
+	「今の所は，ね」クロウリーは訂正した．
+		[ Good Omens, by Neil Gaiman and Terry Pratchett ]
+ホムンクルス
+hom*nculus
+	ホムンクルスとは，なにか特定の任務をなすために魔術師によっ
+	て召喚された生き物である．ホムンクルスたちはとくに隠密行動
+	に長けている．小さい生き物だが，きわめて敏捷である．ホムン
+	クルスたちはその有毒なかみつきで犠牲者を眠りにおとしいれる
+	ことができる．しかしながら，その身体の小ささのために，人間
+	に対しては効果は長続きしない．
+
+	「Tothapisは彼をさえぎった．『黙れ，謹聴せよ．汝は聖なる
+	wingboatに乗って旅ゆくであろう．wingboatについては噂も知る
+	まい．しかしそのものは汝をかの地へ一昼夜のうちに連れてゆく
+	であろう．ホムンクルスが汝と共にゆくであろう．そのものが思
+	考と同じ速さで何リーグもの距離を超えて，汝の言葉を私に伝え，
+	私の言葉を汝に伝えるのだ』」
+		[ Conan the Rebel, by Poul Anderson ]
+刈り込みがま
+鈎付の長斧
+ひっかけ棒
+鉄のフック
+*hook
+	だがクィークェグはどうか．―そのときは食卓の上手に坐りこんでいた
+	のだが，まるで氷柱のように冷静だったのだ．その行儀作法については
+	あまりほめるわけにはゆかない．熱烈な崇拝者にしても，銛を朝食の卓
+	に持ちこんできてやたらに振りまわし，みなの頭部をひやひやさせなが
+	らそれを食卓の上に差しのべて，ビフテキを引き寄せるありさまを，心
+	から正しいと思うことはできなかったであろう．
+		[ Moby Dick, by Herman Melville ]
+		[ 白鯨, 阿部知二訳, 岩波文庫 ]
+ホルン
+~unicorn horn
+*horn
+	ロラン，象牙の角笛を口に当てたり．
+	強く押し当て，力をこめてそれを吹く．
+	山は高く，響きはいと長し．
+	三十里の遠くより，こだま返すを彼等聞く．
+	シャルルはそれを聞けり．またその軍勢すべても．
+	王はいう，「われらの味方，戦を交ゆ！」
+	これに向いて，ガヌロン答えたり，
+	「それを別人の言いしならば，真赤な嘘とし思われん！」
+		[ The Song of Roland ]
+		[ 有永弘人訳，岩波文庫 ]
+角のある悪魔
+horned devil
+	角のある悪魔には特殊な能力が全くない．しかし倒すのは非常に困
+	難である．
+*馬
+~horsem*
+*horse
+	リチャード王：馬をくれ！馬を！代りにこの国をやるぞ，馬をくれ！
+	ケイツビー：ひとまず御退きを．御乗馬は，私が求めます．
+	リチャード王：下郎，この骰子の一目に命を賭けた俺だ，目が出るま
+		      では退かぬ．リッチモンドの奴，六人もいるらしいぞ，
+		      もう五人殺した，みんな影武者だ．馬をくれ！馬を！
+		      代りにこの国をやるぞ，馬をくれ！
+		[ King Richard III, by William Shakespeare ]
+		[ リチャード三世，福田恆存訳，新潮文庫]
+デス
+ペスティレンス
+フェミン
+『デス』
+『ペスティレンス』
+『フェミン』
+戦争
+飢餓
+*horsem*
+rider*
+death
+famine
+pestilence
+war
+hunger
+	子羊がその七つの封印の一つを解いた時，わたしが見ていると，四つの
+	生き物の一つが，雷のような声で「きたれ」と呼ぶのを聞いた．そして
+	見ていると，見よ，白い馬が出てきた．そして，それに乗っている者は，
+	弓を手に持っており，また冠を与えられて，勝利の上にもなお勝利を得
+	ようとして出かけた．
+	[War]
+	子羊が第二の封印を解いた時，第二の生き物が「きたれ」と言うのを私
+	は聞いた．すると今度は赤い馬が出てきた．そして，それに乗っている
+	者は，人々が互いに殺し合うようになるために，地上から平和を奪い取
+	ることが許され，また，大きなつるぎを与えられた．
+	[Famine]
+	また第三の封印を解いた時，第三の生き物が「きたれ」と言うのを私は
+	聞いた．そこで見ていると，見よ，黒い馬が出てきた．そして，それに
+	乗っている者は，はかりを手に持っていた．すると，わたしは四つの生
+	き物の間から出て来ると思われる声が，こう言うのを聞いた，「小麦一
+	ますは一デナリ．大麦三ますも一デナリ．オリブ油とぶとう酒とを，そ
+	こなうな」．
+	[Death]
+	子羊が第四の封印を解いた時，第四の生き物が「きたれ」と言う声をわ
+	たしは聞いた．そこで見ていると，見よ，青白い馬が出てきた．そして，
+	それに乗っている者の名は「死」と言い，それに黄泉が従っていた．彼
+	らには，地の四分の一を支配する権威，および，つるぎと，ききんと，
+	死と，地の獣らとによって人を殺す権威とが，与えられた．
+	     [ ヨハネの黙示録，6:1-8，口語訳聖書，日本聖書協会 ] 
+黄帝
+huan*ti
+	中国の伝説の五帝の一．彼は暗黒の天に対して天の動きを定めた．
+	彼は発明家であり，他の者どもの中から人間に車輪と鎧と羅針盤を
+	与えたと言われている．彼は占いと戦いの神でもある．
+フヘトトル
+hu*h*eto*l
+minion of huhetotl
+	フェフェトトルまたはフヘトトルは「古い神」を意味しアステカ人
+	(古代中米)の火の神である．彼は一般に父性やシウテクトルの複合
+	体(？)に分類されるグループの一人として関連づけられている．彼
+	は通常の人間をめちゃめちゃにさせるために使い魔を送ると言うこ
+	とでも知られている．
+	     [ after the Encyclopedia of Gods, by Michael Jordan ]
+ヒューマノイド
+humanoid
+	ヒューマノイドの大きさは人間とほとんど変らない．遠くにいると
+	見間違うほどだ．彼等は自然では普通部族にわかれており，住みか
+	を強烈に守ろうとする．好ましくないものには彼らは団結し襲撃し，
+	人間の集落から略奪を行なう．
+人間
+戦士
+首領
+番兵
+忍者
+看護婦
+小姓
+浪人
+店主
+実習生
+ちんぴら
+魔法使い
+見張り*
+プレイヤー
+human
+chieftain
+guard
+ninja
+nurse
+page
+ronin
+shopkeeper
+student
+thug
+warrior
+*watch*
+player
+	この変った生き物たちはたいていは地表に住んでおり，様々な形態
+	の社会で共同生活を営んでいる．しかし，たまに，さまよい歩く者
+	が地下に潜りこんでは，当然ながらこの乱入に怒っている洞窟に住
+	みついた者たちに傷害罪を犯している．こいつらは武器や魔法を扱
+	える．イェンダーの魔法使いもこれらの仲間である，との噂である．
+ハンター
+hunter
+	狩りの首尾はどうだった? だいたんな狩人よ．
+	　きょうだい，見はりはながく，寒かった．
+
+	ねらってでかけたえものはどうした?
+	　きょうだい，やつはまだ森で生きている．
+
+	いつもじまんの力はどうした?
+	　きょうだい，見るまに身からひいていく．
+
+	いさんででかけた，意気はどうした?
+	　きょうだい，おれはねぐらに死ににいく．
+		[ The Jungle Book, by Rudyard Kipling ]
+		[ ジャングル・ブック, 西村孝次訳, 学習研究社 ]
+氷の悪魔
+ice devil
+	氷の悪魔は，大きな昆虫に似た生物で，地獄の業火にも煉獄の極冷
+	にも平気である．彼らの尾に触れるだけで旅行者は煉獄の極冷を味
+	わうことになる．
+氷の魔術師
+ice mag*
+#[SLASH'EM 0.0.7E6]
+	Found mainly near the frozen wastes of the north, the Ice Mages
+	are a mysterious group of individuals who are rumored to be 
+	descendants of a once great northern civilization that fell into 
+	chaos over a thousand years ago.  
+	They wield the power of elemental cold, a conglomeration of elemental 
+	air and water.  They are particularly effective fighting fire-based 
+	creatures. Although they command of two of the four elements, Ice Mages 
+	have difficulty affecting undead, who are immune to cold.
+		[ by Drew Curtis ]
+インプ
+imp
+	小鬼(インプ)と言うのは二フィート足らずの小さな生きもので，飛
+	んだり跳ねたりすることに秀でている．
+			 [ The Charwoman's Shadow, by Lord Dunsany ]
+					     [ハヤカワ文庫 荒俣宏訳]
+
+	インプとは本来，横枝とか，挿し木用に切り取った枝のことであり，
+	インプ・ツリー(ymp tree)とは，接ぎ木した木，あるいは実生ではな
+	く挿し木から育った木を意味していた．インプは，正しくはサタンか
+	ら枝分かれした小悪魔を意味するが，ゴブリンやボーグルと，地獄か
+	ら来たインプとの区別はつけがたい．ケルト圏では，多くの人がイン
+	グランドの清教徒同様，妖精をすべて悪魔と考えている．
+	伝承世界の妖精たちは幽霊と悪魔の身分の間を，どちらともつかずさ
+	まよっていることが多い．
+		[ A Dictionary of Fairies, by Katharine Briggs ]
+		[ 妖精事典, 平野敬一 他訳, 冨山房 ]
+インキュバス
+サキュバス
+incubus
+succubus
+	インキュバスとサキュバスは同じ種類の魔神で，それぞれ男性と女
+	性である．それらと関係を持つ愚かな人間は大抵手痛い目に合う．
+鉄球
+鉄の鎖
+*iron ball
+*iron chain
+	「おまえさんは，足かせをかけられているんだね？」スクルージは震
+	えながらいった．「どうしてなのか，教えてくれないか？」
+	「生きているあいだにこしらえた鎖をつけてるのさ」幽霊は答えた．
+	「こいつを作るには，輪をひとつひとつ，一ヤードまた一ヤードとこ
+	しらえたのだ．おれは自分の自由意志で，それをしばりつけ，自分の
+	自由意志でからだにつけた．こんな型は，あんたにははじめてかね？」
+	スクルージはますますひどく身を震わせた．
+	「それとも知りたいかね？」亡霊は言葉をつづけた．「あんたがから
+	だに巻きつけているがんじょうな鎖が，どのくらい重く，どのくらい
+	長いかを？七年前のクリスマスの前夜には，こいつとちょうど同じく
+	らい重く，長かった．それからずっと，あんたはせっせとそれを作っ
+	てきた．いまでは，ずっしりと重い鎖になっている！」
+		[ A Christmas Carol, by Charles Dickens ]
+		[ クリスマス・キャロル，皆河宗一訳，河出世界文学全集 ]
+イシュタル
+ishtar
+	イシュタル(天上の星)はメソポタミアの肥沃と戦いの女神である．
+	彼女は普通羽を持ち，武器入れを肩にかけ，ライオンの頭の装飾
+	のある儀式用の双頭の三日月刀を持っている姿と描写されている．
+	彼女はまた八芒星の象徴でもある．
+		[ Encyclopedia of Gods, by Michael Jordan ]
+イセック
+issek
+	さて，ファファードが奉仕することを選んだ〈瓶のイセク〉は
+	ランクマーに集う神々，いや，神々の卵の中でも，最も卑しく，
+	芽の出ない部類に属していた．もうこの都にきて十三年になるが，
+	〈神々の大路〉をわずか二丁旅しただけ，いまはふたたび後退して，
+	まもなく忘れ去られようとしていた．このイセクを，〈腕のない
+	イセク〉や〈焼けた足のイセク〉や〈皮を剥がれたイセク〉など，
+	おなじ名を持つ，華麗な迫害を受けた数多くの神々と混同しては
+	ならない．いや，事実，彼の不人気の一因は，その死にざま
+	----拷問台での死----が，今一つの迫力に欠けるところに
+	あったのかもしれない． ... しかしながら，ファファードが
+	彼の見習僧になってからは，多少事情が変わってきた．
+		[ Swords In The Mist, by Fritz Leiber ]
+		[ 霧の中の二剣士, 大谷圭二訳, 創元推理文庫 ]
+izchak
+	ノームの炭坑の町の照明具店の店主は，NetHack開発チーム創設時からの
+	メンバーで我々全ての親友である Izchak Millerに贈るものである．
+	Izchakのゲームへの貢献は絶大なものであった．彼は属性システム，祈
+	りのコード，3.1のリリースにあたり「地獄」の書き変えなどで貢献した
+	のはもちろん，彼は大量の店のロジックをコーディングした(それ故に献
+	辞が自然である)．Izchakは哲学の教授であり，多くの素晴しい大学(MIT
+	やスタンフォード)で教鞭をとり，一時は Xerox PARCで働いていた．
+	Izchakは NetHackプロジェクトの最初の「司書」であり，創設時からの
+	メンバーであり，1986年に彼がペンシルバニア大学(それゆえ我々の以前
+	のメイリングリストのアドレスがあった)で働いているときに加わった．
+	3.1.3のリリースまで，Izchak は全てのコードが同じになるよう管理し，
+	開発チームのメンバー間の論争の仲裁をした．が，Izchak Millerは1994年
+	4月1日早朝，癌の合併症のため 58歳でこの世を去った．我々は
+	NetHack3.2を彼へ捧げる．
+			[ Mike Stephenson, for the NetHack DevTeam ]
+ジャバウォック
+ボーパルブレード
+jabberwock
+vorpal*
+	「わが子よ，ジャバーウォックに油断するなかれ！
+	  食らいつくその顎，かきむしるその爪！
+	  ジャブジャブ鳥にも心許すな，
+	  おどろしきバンダースナッチにはゆめ近寄るべからず！」
+
+	けしにぐの剣，手に取りて，
+	かれ，ひとごろしき敵をば求め歩くこと久しかりしが--
+	タムタムの樹のかたえにて一息つき，
+	しばし立ちつくして思いに沈みぬ．
+
+	られられしき思いその胸に駆けめぐるときもとき，
+	見よ，らんらんたる眼燃やしたるジャバーウォック，
+	おぐらてしき森の奥より，飄飄と風切り飛びきたり，
+	ぶーぶくぶくとうなやきけり．
+
+	いち，に！いち，に！ぐっさりぐさり
+	目にも止まらぬけしにぐの剣，手錬の早業！
+	横たわりたる死体より刎ねたる首をば小脇にかかえ，
+	たからからからと帰り来たりぬ．
+				[ Jabberwocky, by Lewis Carroll ]
+				       [ 高橋康也・沢崎純之介訳 ]
+ジャッカル
+jackal
+	アジアの民話では，ジャッカルはライオンの世話をします．ジャッカ
+	ルはライオンが殺して食べている獲物をかきあつめ，残したものを褒
+	美として受けとるのです．北インドの話では，ジャッカルはときどき
+	「王(すなわちライオン)の使い」と呼ばれています．伝説によると，
+	ジャッカルは決して自分で獲物を殺しません．これは彼の卑怯な伝説
+	から来ています．ジャッカルの心臓は，たとえばジャッカルが沢山い
+	るところの土着の人々の信仰では絶対喰われることはありません．
+	...
+	ハウサ・ネグロの民話ではジャッカルは利口な判事の役を演じ，「森の
+	博学者」などと呼ばれます．ブッシュマンはジャッカルは「ジャッカル
+	であるがゆえ」のようなふるまいのようなやりかたでふらふらしている
+	と言います．
+		[ Funk & Wagnalls Standard Dictionary of Folklore ]
+ひすい*
+翡翠*
+jade*
+        廃虚の中には何も生えていない．街路は壊れ，家々の壁は崩れていた
+        が，割れ目に生える雑草もなく，あたかもこの都がごく最近に地震で
+        壊滅したかのようだった．たったひとつ無傷で廃虚の上にそびえたつ
+        ものがあった．それは巨大な，白，灰色，緑の翡翠の像−−若い男の
+        裸像で，その顔はほとんど女性的なまでの美しさを持ち，見えぬ目を
+        北方に向けていた．
+        「あの眼！」アヴァン・アストラン公爵が言った．「眼がなくなって
+        いる！」
+		[ The Jade Man's Eyes, by Michael Moorcock ]
+                [ この世の彼方の海，井辻朱美訳，早川書房 ]
+ジャガー
+jaguar
+	大型の猫の仲間の肉食動物．中央および南アフリカに住む．この猫科の
+	食肉動物(学名:Pantehra onca)はときどき間違ってヒョウと呼ばれる．
+	 [ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+クラゲ
+jellyfish
+#[訳注 Portuguese Man-o'-warはカツオノエボシのこと]
+	私は海を分かちあうことを好まない
+	このようなくらげどもがいては
+	ことにポルトガルのものならば
+		[ Lines on Meeting a Portuguese Man-o'-war while
+			Bathing, by Michael Flanders ]
+ジョウビレックス
+『ジョウビレックス』
+juiblex
+jubilex
+	無貌の王については，その名前の正確な綴りすらほとんど分かって
+	いない．知られているように，物理的な形態がなく，そのあたりを
+	じっと観察したものの報告によると，スライム様の生物である．他
+	の生物を生きたまま飲み込み，腐食性の分泌液を放出する．これを
+	浴びた犠牲者は病気になり，即死してしまうこともある．
+兜
+kabuto
+	兜はサムライが身に付けるヘルメットであり，装着者の顔面を保護す
+	るため，顔を覆うように突き出た前端部に特徴があり，これから近代
+	日本では「衝角（鍬形）付き兜」と呼ばれている．兜を構成する主な
+	部品は，長円形の鉄板，衝角棒，頭部に合わせた半球形の鉢である．
+	この鉢には，声を前面に集中させる機能を持つよう，下前方に曲げら
+	れた延長部（鉢付）が取り付けられている．頭部を囲むように作られ
+	た2つの板が，この鉢付に鋲で止められている．下方は「腰巻」と呼
+	ばれ鉢の下方の縁を構成し，もう一方は「胴巻」と呼ばれてこめかみ
+	辺りに置かれる．これらの板と衝角棒の間の隙間には，時には三角形
+	であるが普通は四角形の小さな板が詰められている．頭部から前方に
+	突き出てた形状のため，三角形のギャップは「衝角底板」と呼ばれる
+	小さな板で埋められている．「衝角底板」の後縁は前頭部に載せられ
+	た縁に向かい下向きに曲げられている．
+	   [ Arms & Armour of the Samurai, by Bottomley & Hopson ]
+カマダン
+kamadan
+#[SLASH'EM 0.0.7E6]
+	The kamadan is a greatly feared hunter that resembles a large
+	leopard with six snakes sprouting from its shoulders.
+	Sages believe it is a distant relative of the displacer beast,
+	though how it came to be is still a matter for speculation.
+	    [ Creature Catalog by Scott Greene ]
+刀
+katana
+	刀は，長くて片刃の刀身が軽くそりかえった侍の剣である．その長
+	い柄は，片手でも両手でも刀を振り回せるようにできている．
+麒麟
+ki-rin
+	麒麟は奇妙な空飛ぶ動物である．鱗，ライオンのようなたてがみ，
+	尻尾，ひずめ，つのをもつ．明い色をしており，しばしば報いるた
+	めの良い行いを探し空を飛んでいるのを目撃される．
+アーサー王
+『アーサー』王
+king arthur
+*arthur
+	エクターはふたりの息子を教会に据えられた鉄床の前へつれてき
+	た．そこで，鉄床の前にたって，彼はケイに命じた．「もし玉座
+	が本当におまえのものだと思うのなら，剣を鉄に突き通してみる
+	がいい!」しかし剣は鉄をかすっただけだった．「次はおまえの
+	番だ」エクターはアーサーにむかって言った．
+	若者は両手で剣をもちあげ，突きさした．刃は閃きとともに風を
+	切って，鋼鉄にまるでバターのようにたやすく穴をあけた．エク
+	ターとケイはアーサーの前に膝をついた．
+	「父さんに兄さん，どうして僕におじぎするの?」アーサーは疑
+	問を声にたたえてたずねた．
+	「あなたが王であると，生まれだけではなく法によっても今や確
+	かにわかったからです」とエクターが言った．「あなたは私の息
+	子ではなく，ケイの弟でもない．あなたが生まれてすぐに賢者マー
+	リンが，安全に育つようにと私の元へつれてきた．あな
+	たが洗礼をうけたときアーサーと名づけたのはたしかに私ではあ
+	るが，本当はあなたは，勇ましい王ウーゼル・ペンドラゴンと女
+	王イグレーヌの息子なのだ」…
+
+	そしてその言葉の後，王はたちあがり，なにがおきたかを知らせ
+	るため，大司教に会いにいった．
+	   [ Van Gouden Tijden Zingen de Harpen, by Vladimir Hulpach,
+		Emanuel Frynta, and Vackav Cibula ]
+ナイフ
+スティレット
+knife
+stiletto
+	ひょっとすると人々の顔に半信半疑の表情を見てとったのだろうか，
+	世界の放浪者はなおも執拗に自分の冒険談をつづけたのである．
+
+	――それからトリエステでは一人の男がイタリア人に殺されるのを
+	見たぜ．背中をナイフで突き刺されてね．こんなナイフだった．
+
+	話しながら彼は自分の性格にふさわしい物騒な折畳みナイフを取り
+	出して，突き刺すようにそれを構えて見せた．
+
+	――そこは淫売宿で，密輸入業者二人がお互いにいかさまを働いた
+	からなんだ．奴はドアのかげに隠れてて，背後からその男を襲った．
+	こんなふうに．《汝の神に会う準備(そなえ)をせよ》と奴が言う．
+	ぶすっ! 柄のところまで背中に突き刺さったな．
+		[ Ulysses, by James Joyce ]
+		[ ユリシーズ, 丸谷才一・永川玲二・高松雄一訳, 集英社 ]
+# ユリシーズ III, ジェイムズ・ジョイス, 丸谷才一・永川玲二・高松雄一訳,
+# 集英社, 1997, p.230
+*騎士
+knight
+* knight
+	勇ましの郷士ここにぞ眠る，
+	きわまれるそれが勇気は
+	死の神も君が生命を
+	死をもってかち得ざりしと，
+	世の人は語り伝えぬ．
+	ありし日は世界を蔑(なみ)し，
+	世をあげて君をおそれて
+	ひたぶるに怖気(おぞけ)ふるいぬ．
+	かくしては幸(さち)を得たりき．
+	狂人とし世を送りしが
+	正気に復してみまかれり．
+		[ Don Quixote of La Mancha by Miquel de
+		  Cervantes Saavedra ]
+		[ ドン・キホーテ, 会田由訳, 晶文社 ]
+*コボルド*
+~kobold ??m*
+*kobold*
+	コボルド一族は(半ば神と化した？)偉大な魔法使いによる人工生命
+	体であると云われている．コボルドの身長は3フィート程で，感情のはっ
+	きりしない犬のような顔をしている．エルフを非常に嫌っており，
+	どんなときでもエルフに騒動を起こすためには我を忘れる．
+警備員
+巡査
+巡査部長
+警部補
+*kop*
+	Kopは素晴らしい概念だ．適性がないKopの一団を率い，一連の騒々しく
+	面白い身体罰で繰り返し彼らを画面に出すのは，天井桟敷でも高価な
+	ボックスシートでも変わりはない．人々はKopを嫌う．一度も警官と関係
+	をもった事がない人々さえ彼らを嫌う．もちろん，我々は彼らが秩序を
+	守り，我々が保護を必要とする時に保護してくれる事をあてにしている
+	し，テレビにおいて豪胆さと美しい心を持つ彼らを愛したりもするが，
+	それでも抽象的に，国家と同様に，ひとまとめに我々は彼らを嫌う．彼
+	らはあまりに学園の校長に似ている．我々は彼らのズボンが落ちるのを
+	見るのが楽しいし，我々には彼らの顔にはパイがお似合いに見える．
+	Keystone Kopは登場し――そしてお互いに衝突したり落っこちたりして
+	罰せられ，侮辱に継ぐ侮辱を経験する．ここに純粋な映画満足がある．
+	
+	Kopは非常に巧みに演出される．彼らの追跡シーンの１つでのこっけい
+	な独創性とタイミングは，思いつくべき想像力，実行する才能，メディ
+	アの理解，そして当然ながら，能力を発揮するありのままの勇気を必要
+	とする．Kopは不適格者として提示される狂人であり，そして彼らは近
+	代的な乗り物で性急に行動する狂人である．その上，彼らが日常茶飯事
+	に操作していた乗り物は新発明品であり，一般の映画ファンにとっては
+	未体験の代物であった．（自動車の黎明期には，カンザスシティーで登
+	録されていた自動車はたった２台であり，それらが互いに出くわしたと
+	報告されている．この事実には詩歌と哲学が共に含まれているが，しか
+	しすべての中で最も，ユーモアがある．Sennettはユーモアを得た．）
+		[ Silent Stars, by Jeanine Basinger ]
+コス
+kos
+	「おれは腰抜けではない! 〈盗賊の館〉に堂々と乗りこんで，
+	クローヴァスの首級をあげ，血のぽたぽた垂れるやつを
+	ヴラナの足もとへほうり出してみせる! 運命の神コスも照覧あれ，
+	わが父ナルグロンの茶色の骨と，この腰に帯びた父の剣
+	〈灰色杖〉にかけて，それを誓う!」
+	   [ Swords and Deviltry, by Fritz Leiber ]
+	   [ 魔の都の二剣士, 大谷圭二訳, 創元推理文庫 ]
+琴
+koto
+	日本のハープ．
+クラーケン
+kraken
+	水の中から一本のくねくねした長い触手がはい出ていました．そ
+	れはうすい緑色の発光体で，濡れていました．その指のついた先
+	端がフロドの足をつかんで，水の中に引き入れようとしていたの
+	です．サムは両膝をつき，短剣でその手に切りつけました．
+	腕はフロドを放しました．サムは助けを呼びながら，フロドを引
+	っ張ってそこを離れました．別に二十本ばかりの腕が小波をたて
+	て現われました．暗い水面が騒ぎ，恐しい悪臭がしました．
+	   [ The Fellowship of the Ring, by J.R.R. Tolkien ]
+				      [ 評論社, 瀬田貞二訳 ]
+レディ
+オフラー
+女神
+*lady
+offler
+	イオはさいころ箱を取り上げた．それは頭蓋骨でできており，あちこ
+	ちの穴がルビーでふさいである．イオはいくつかの目玉を＜女神＞に
+	向けて，五を三つ振り出した．＜女神＞は微笑んだ．＜女神＞の目は
+	こんなふうだ−−色は明るい緑，瞳孔はなく，内側から輝いている．
+
+	部屋中が静まり返る中，彼女は駒を入れた箱を探り，その底から二つ
+	の駒を取り出すと，決然とした表情で，かちっかちっと音をさせて盤
+	の上に置いた．．他のプレーヤーは，一斉に首を伸ばしてのぞき込ん
+	だ．
+
+	「うらりり者のまひゅつ師に，何かの事務員らな」＜鰐の神＞オフラー
+	の言葉は，例によって牙のせいで聞き取りにくい．「おらまあ」かれ
+	はかぎ爪のついた足で，象牙色のチップを一山，テーブルの
+	まん中に押しやった．
+
+	＜女神＞は，かすかにうなずいた．彼女はさいころ箱を取り上げると，
+	岩でも持つかのようにしっかともった．にもかかわらず，どの神々に
+	も，三つのさいころが箱の中で，からからと転がる音が聞こえた．そ
+	して彼女はさいころをテーブルの上に転がした．
+
+	六，三，五．
+
+	だが，何かが五の目に起こりつつあった．何十億という分子の偶然の
+	衝突にさらされて，さいころはくいっと角で立ち上がり，おもむろに
+	回転すると七の目を見せた．“盲目のイオ”はさいころを手にとって，
+	面の数を数えた．「頼むよ」かれはうんざりしたような声を出した．
+	「フェア・プレイで行こう」
+
+		[ The Colour of Magic, by Terry Pratchett ]
+		[ ディスクワールド騒動記，安田均訳，角川文庫 ]
+*ランプ
+*lamp
+	気がついたとき，彼は母親に何がおこったかを語って聞かせ，ラ
+	ンプと庭で集めてきた果物を見せた．それは実は貴重な宝石なの
+	だった．それから彼は食べる物が欲しいと言った．
+
+	「困ったね，息子や!」母親は言った．「家にはもうなにもない
+	んだよ．でも，つむいだ木綿が少しあるから，それを売ってきま
+	しょう」
+
+	アラジンは母親に木綿をとっておくように言った．というのも，
+	代わりにランプを売るつもりだったからだ．ランプはひどく汚れ
+	ていたので，母親はそれをこすりだした．そうすればもっと高く
+	売れるかもしれないので．たちまち見るも恐しい魔神があらわれ，
+	彼女に何が欲しいかをたずねた．母親は気を失なってしまったが，
+	アラジンはすぐさまランプをつかみ，大胆にも言った．
+	「なにか食べるものを取ってこい!」
+		[ Aladdin, from The Arabian Nights, by Andrew Lang ]
+ランス
+lance
+	折しも一陣の風が吹いてきて，大きな風車の翼がいっせいに動き出
+	した．それを見ると，ドン・キホーテはこう叫んだ――「たとえお
+	ぬしらが，かの巨人ブリアレーオより多くの腕を動かしたところで，
+	拙者が目にもの見せずにおくものか．今に思い知るぞ．」
+
+	こう口走った彼は，かくも大きな危機を迎えたわが身を救いたまえ
+	と，思い姫ドゥルシネーアに心をこめて祈念しながら，盾をしっか
+	りと構え，槍を小脇にかいこんで，ロシナンテを全速力で駆けさせ，
+	いちばん手前にあった風車に突撃した．ところが，彼が思いきり槍
+	を突き立てたその瞬間，風が激しい勢いで翼を回転させたものだか
+	ら，その槍がへし折られただけでなく，馬とその乗り手もそっくり
+	翼にさらわれて，反対側に放り出され，むざんにも，野原をころが
+	っていく始末だった．
+		[ Don Quixote of La Mancha by Miquel de
+		  Cervantes Saavedra ]
+		[ 新訳 ドン・キホーテ(前篇), 牛島信明訳, 岩波書店 ]
+# 新訳 ドン・キホーテ(前篇), セルバンテス作, 牛島信明訳, 岩波書店,
+# 1999, pp.69-70
+紐
+leash
+	　ポンゴもミセスもすばらしい顔と肩，それに強い足とまっすぐ
+	な尾を持っています．体の水玉もようはまっ黒で，ほとんどが二
+	シリング硬貨ほどの大きさです．顔と足と尾の水玉もようはいく
+	ぶん小さく，鼻と目のふちが黒色です．
+	　ミセスはたいへん愛くるしい表情をしています．ポンゴは生ま
+	れついてのリーダーですが，目にいたずらっぽい輝きがあります．
+	　ポンゴとミセスはとても気品のあるようすで，ならんで歩いて
+	います．
+	　ただ，十字路にきたとき，デアリーさんたちを安全にわたらせ
+	るように，ひもをくっつけています．
+		[ The Hundred and One Dalmatians, by Dodie Smith ]
+		[ ダルメシアン: 100と1ぴきの犬の物語，ドディー・スミス，熊谷鉱司訳，文渓堂 ]
+レンバス
+lembas*
+	朝になって，一同がささやかな荷物の荷ごしらえを始めていますと，か
+	れらの言葉を話すことのできるエルフたちがやって来て，旅に必要な食
+	べものや衣類などのたくさんの贈り物を持ってきました．食べものは大
+	部分が非常に薄い焼き菓子の形をしていて，それは外側がうすいとび色
+	に焼け，中がクリーム色をしており，あら碾きの粉でできていました．
+	ギムリはその一つを取りあげると，うさんくさそうな目でじっと見まし
+	た．
+
+	「クラムだ．」かれは小声でそういうと，端っこをボキッと折り取って
+	噛んでみました．その表情はたちまち変わりました．そして残りをいか
+	にもおいしそうに全部食べてしまいました．
+
+	「もうだめ，もうだめ」エルフたちは笑いながら叫びました．「あなた
+	は一日たっぷり歩けるくらいの分をもう食べてしまったんですよ．」
+
+	「わたしはまたこれはただのクラムのようなもんだと思ったんです．谷
+	間の国の人間たちが荒野を旅する時に持って行くようなやつですよ．」
+
+	「そうですよ」と，かれは答えました．「だけど，わたしたちはこれを
+	レンバス，つまり行糧(こうりょう)と呼んでいるのです．そして，これ
+	は人間の作ったどんな食べものよりも力がつくし，それに何といったっ
+	て，クラムなんかよりうまいですよ．
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+					      [ 評論社, 瀬田貞二訳 ]
+レムレース
+lemure
+	地獄の最下級の住人．
+レオクロッタ
+leocrotta
+leu*otta
+	レオクロッタ，とてつもなく素早い野性の獣，野性のロバくらいの
+	大きさ，雄鹿の足，首，尻尾，ライオンの胸，穴熊の頭，2つに割れ
+	た蹄，耳のように切りさかれてる口，歯の変りに一枚の骨．この動
+	物は人間の声をまねるとも言われている．
+		[ Curious Creatures in Zoology, by John Ashton ]
+レプレコーン
+leprechaun
+	アイルランドのレプレコーンは妖精の靴の仕立屋であり，アイルラン
+	ドの色々な場所によって色々な名前で知られている．コーク地方では
+	クルリカーン，ケリー地方ではルリカン，キルダーではルリキーン，
+	ティパラリーではリガダーンである．彼らは妖精のために仕事をす
+	るが，レプレコーンは同じ種族のものではない．それは小さく，黒
+	い皮膚を持ち，奇妙な服を着ていてる．レプレコーンは次のように
+	躁鬱的である．最初にとても幸せになり，片方の靴底を釘付けする
+	かのように陽気に口笛を吹く．数分後，陰鬱かつ不機嫌になり，自
+	家製のヒースのエールで酔いつぶれる．レプレコーンは二つのもの
+	を愛する．煙草とウィスキーだ．そしてレプレコーンはすばらしい
+	信用のあるやつで，相手を裏切ることのないやつだ．どうでもいい
+	ことだが，どんなに利口なやつでも隠された金や魔法シリングのつ
+	まったポットを騙しとったのはいない．最後には，彼を掴まえるも
+	のの注意をそらす方法について考え，目もまばたかせ消えるのであ
+	る．
+		[ A Field Guide to the Little People
+			       by Nancy Arrowsmith & George Moorse ]
+###[地形．本体の訳に合わせる事]
+レテ*
+レーテ*
+lethe
+sparkling water
+#[SLASH'EM 0.0.7E6]
+	The Lethe is a river, slow, dark and deep, which flows from
+	the mortal world to the forbidden lands of Gehennom.  It is
+	said that a single sip of its sparkling waters is enough to
+	wash a man's memories away, never to return.
+*リッチ
+*lich
+	何百年かに一度，邪悪な魔法を極めたものや僧侶が，その人生を普
+	通の人間の一生をはるかに越えるようにしようと偉大な魔法の使用
+	を使用することがある．この魔法の普通の効果は時間をかけ，人間
+	を偉大な魔法のパワーをもつアンデッドに変化させる．リッチはあ
+	らゆる形での生命を忌み嫌う．これらの生き物に触られたりするだ
+	けで，犠牲者は冷たくなり痺れてしまう．彼らはまた魔法をも使う
+	ことができる．
+苔の怪物
+lichen
+	その室は粗雑な岩でできており，丸く，さしわたし18か20フィー
+	トほどの広さで，多くの種類のシダやコケや地衣類でいろどられ
+	ていた．シダは冬らしく動かず，あるいは大潮にそなえて渦巻き
+	状になっていた．しかしコケは生命にみちあふれており，羽毛を
+	生じているものや，ゴブレットのようになっているものや，赤い
+	ふちどりのあるものもあった．
+		[ Lorna Doone, by R.D. Blackmore ]
+黄色い光
+黒い光
+~* of light
+* light
+	物体というよりはエネルギーからなる奇妙な生物で，敵に対しては
+	自虐的な爆発を与える．
+~毒トカゲ
+#[SLASH'EM 0.0.7E6]
+ヤモリ
+イグアナ
+トカゲ
+gecko
+iguana
+lizard
+	トカゲ，蛇，穴みみずトカゲは「鱗のある」を意味する鱗目を形成
+	する．トカゲのすらっとした，スリムな，長い尻尾の体は広範囲の
+	生息地での生活を可能とするように変化してきた．トカゲは穴掘り，
+	ランニング，水泳，壁上りの名人で，あるものは肋骨にくっつ
+	いた粗末な短距離滑空用の「羽」をうまく使うことができる．たい
+	ていは肉食で，無脊椎動物や小さな脊椎動物をえさとして食べる．
+	しかし，植物を食べるものもいる．
+		[ Macmillan Illustrated Animal Encyclopedia ]
+ロキ
+loki
+	ロキまたはロプトはスノリのエッダでは次のように記述されている．
+	「見た感じは人に好かれ，りりしいが，性格は悪で，ふるまいは
+	気まぐれである」．彼は巨人ファルバウティとラウフェイの息子で
+	ある．
+	ロキは北欧の悪知恵，悪，盗賊および火の神である．彼は他の神々
+	を憎み，彼らの破滅と世界の転覆を望んでいる．彼は多く殺人を犯
+	した．盗賊として，彼はフレイのネックレスを，トールのベルトと
+	力の小手を，若さの林檎を盗んだ．うまく変化をできるので，彼は
+	雌馬，ノミ，蝿，ハヤブサ，アザラシ，しわくちゃ婆など色々なも
+	のになりすましたと言われている．雌馬になったとき彼はオーディ
+	ンの馬スレイプニルを産んだ．彼は伝えられるところでは，ヘビの
+	ミドガルド，冥界の女王，ヘル，ラグナロクに太陽をむさぼり食う
+	フェンリル狼を生ませた．
+ダイアナの長弓
+*longbow of diana
+	この伝説の弓は，持っているだけでESPが与えられ，装備すれば
+	魔法による攻撃を反射することができるし，使用すれば矢を得る
+	ことができる．
+ガラス
+鏡
+looking glass
+mirror
+	ところで雪白姫のほうはずんずんおおきくなりましたが，それにつれて
+	だんだん美しくなるばかりで，七歳のときには，まるで，晴れわたった
+	日のようにうつくしく，さすがのおきさきよりも美しくありました．あ
+	るとき，おきさきが，お気にいりの鏡に，
+
+	「かがみや，かべのすがたみや，
+	  お国じゅうで，いちばんきりょうのいい女は，だあれ？」
+
+	とたずねると，鏡は，
+
+	「おきさきさま，ここでは，おきさきさまがいちばんごきりょうよし，
+	けれども，ゆきじろひめは，おきさきさまより千ぞう倍もうつくしい」
+
+	と，へんじをしました．
+		[ 完訳，グリム童話集２，岩波文庫，金田鬼一訳 ]
+		[ Snow White, by Jakob and Wilhelm Grimm ]
+*カーナボン*
+ケナーヴェン卿
+lord carnarvon
+	ケナーヴェン卿はイングランド以外のどこにも生まれえなかった
+	だろう人物である．スポーツマンと収集家，紳士と世界旅行者の
+	混ぜ合わせであり，その行動は現実主義的であり，感情面ではロ
+	マンチストであった．…1903年，彼ははじめて，おだやかな気候
+	の調査のためエジプトにおもむき，そこでいくつかの考古学的調
+	査の発掘現場をおとずれた．
+	…1906年，彼は自身の発掘作業をはじめた．
+		[ Gods, Graves, and Scholars, by C. W. Ceram ]
+大名佐藤
+大名『佐藤』
+lord sato
+	大名佐藤は太郎一族の当主で強力な大名である．彼は皇帝の忠臣で
+	あり帝国のためにその力を全て発揮している．
+火の巨人*スルト*
+スルト*
+サーター*
+lord surt*
+	だが，いちばん初めには，南の方に，ムスペルという世界があったの
+	だ．それは明るく，熱く，その辺りは焔をあげて燃え上り，異国の者
+	で，そこに生れたのでない者は，近づけなかった．そこの国境警備の
+	任についている者はスルトと呼ばれている．彼は手に燃えさかる剣を
+	もち，世界の終りにやってきて，荒しまわり，神々を一人残らず討ち
+	平らげ，全世界を火で焼きつくすだろう．
+			[ The Prose Edda, by Snorri Sturluson ]
+			[ エッダ，谷口幸男訳，新潮社]
+ルーフ
+lug*
+	ルーフまたはルーグはアイルランドのケルト人の太陽の神であった．
+	彼の武器の1つにロッドスリングがあり，礼拝者がときどき虹として
+	空に見た．種族の神として，彼は実際，彼の重厚な無敵のひとりでに
+	戦う槍の扱いにたけていた．彼の名の1つに「(長武器の)ラムフハダ」
+	と言うのがある．彼は若く，明らかに神々の父ダグダよりも魅力的で
+	あった．姿形を変えることができ，彼の名前はオオヤマネコに変換
+	されている．
+ラーカー
+lurker*
+	この洞窟の掃除屋は周囲の洞窟内の壁や天井に溶け込むのを極めて得
+	意としている．それは彼らが岩に似た色の皮膚を有しているからであ
+	る．
+ヒョウ人間
+ヒョウ男
+ヒョウ女
+虎人間
+虎男
+虎女
+蜘蛛人間
+蜘蛛男
+蜘蛛女
+蛇人間
+蛇男
+蛇女
+#[SLASH'EM 0.0.7E6]
+ライカンスロープ
+ジャッカル人間
+狼人間
+ねずみ人間
+ジャッカル男
+狼男
+ねずみ男
+ジャッカル女
+狼女
+ねずみ女
+lycanthrope
+were*
+human were*
+*were
+	1573年，ドールの議会は法令を公布し，フランシュ・コンテの住
+	人が，その地域を荒らしていた狼人間を狩りたてて殺すことを許
+	可した．人々は「いわゆる狼人間を，いかなる罰金やその他の罰
+	則を負うことなく，発見しうるいかなる場所においても，ジャヴェ
+	リン，ハルバード，槍，火縄銃，棍棒などで武装し，狩りたてて
+	追いかけ，あるいは捕え，焼き，殺す権限を与え」られた．この
+	狩りは以下の事実から判断するに，成功したように思われる．す
+	なわち，翌年，同議会がジャイルズ・ガルニエという男を火刑に
+	処す判決を下したことである．ジャイルズは，よつんばいになっ
+	て森や野原をかけまわり，「金曜日にさえ」子供をむさぼり食っ
+	たのである．そのあわれな獣人は，教会の祭日に対し，フランス
+	の豚と同じくらいわずかにしか尊敬の念をもっていなかったよう
+	だった．フランスの豚は，断食日に子供を喰らうことを信心を理
+	由に我慢したりはしない．
+		[ The History of Vampires, by Dudley Wright ]
+山猫
+lynx
+	夢で山猫を見るのは，敵があなたの仕事を揺るがしたり家庭の事を混乱
+	させているということです．女性なら，この夢はあなたの恋人の愛情が
+	あなたに匹敵する用心深い女性がいることを示します．もしあなたが
+	山猫を殺したのなら，あなたはライバルに勝つでしょう．
+		[ 10,000 Dreams Interpreted, by Gustavus Hindman Miller ]
+魔法のマーカ*
+magic marker
+	ペンは剣より強し．
+		[ Richelieu, by Edward Bulwer-Lytton ]
+マーリンの魔法の鏡
+magic mirror of merlin
+	この強大な鏡は，木々が歌い岩が踊っていた時代にドルイド僧，マー
+	リンによって作られたものである．それはその所有者全てをマジック
+	ミサイルから護り，遠視能力を与える．
+メ*ルデーモン
+mail d*emon
+	この奇妙な生物は飼い犬によってのみ傷つけることができると噂さ
+	れている．
+マナンナン*マクリール
+ma*annan*
+	通常はマナナンと呼ばれる．ラーの息子で商業と水兵の神．マナ
+	ナンは決っして殺害に失敗しない剣，その持ち主が望むところに
+	推進する船，風より疾い馬，どんな剣でも貫通できない魔法の鎧
+	を持っている．彼はのちに彼が住んでいたティル・ナ・ノークの
+	下方にある海の神および地下の神となった．
+亡霊
+manes
+	迷宮のブヨ．この群らがる怪物は単独で現われるのは稀である．
+マングラー
+mangler
+#[SLASH'EM 0.0.7E6]
+	The Mangler (1995)
+	Starring: Robert Englund, Ted Levine
+	Director: Tobe Hooper
+	Synopsis: An industrial laundry machine develops a taste for blood in
+	 this Stephen King adaptation. Strictly for genre fans who overlook
+	 ludicrous plot, acting, and prefer bloody gore to genuine scares.
+	Runtime: 106 minutes
+		[ www.reel.com ]
+マードク
+marduk
+	まず至上の指導者としての承認を知らしめるため，マルドゥクは
+	ドラゴンをうちたおし，その身体をふたつに切ってそれらから天
+	と地をつくり，人間たちを世界に住まわせた．人間たちは，不自
+	然なことではないが，自分たちの生におおいに感謝をあらわした．
+	神々もまた相応に感謝しており，マルドゥクに多くの称号を授け，
+	次第に自分たちをマルドゥクにとりこんでもらうことを許されて
+	いった．そういうわけでマルドゥクは最高神となり，星々の通り
+	道から人間どもが生活する日々の出来事まで，あらゆる既知の生
+	命のなりゆきを企図するようになった．
+		[ The Immortals, by Derek and Julia Parker ]
+マリリス
+marilith
+	マリリスの上半身は人間の女性で，下半身はと大蛇である．複数の
+	腕を自由にあやつり攻撃をしかけてくる．武器を扱えるだけの知能
+	もあるので，マリリスは非常に危険な存在である．
+マルス
+mars
+	戦争の神であり，もっとも有名で崇拝される神のひとりである．
+	初期ローマでは，彼は春，自然の生長，肥沃の神であり，子牛の
+	守護者であった．マルスはまた，地の神としても言及されるが，
+	このことから，なぜ彼が死と，ついには戦争の神になったのかが
+	わかるかもしれない．彼はジュピターとジュノーの息子である．
+		[ Encyclopedia Mythica, ed. M.F. Lindemans ]
+暗殺者の頭領
+master assassin
+	ツローフは何人かの暗殺者を引き連れて，階段を降りてきた．イモー
+	の真ん前に来ると口を開く．「旅行者を頂きに来た」
+	．．．．．
+	「一歩でも動けば，入ってきたときより目玉を減らして帰ることにな
+	るぞ」盗賊の頭は言った．「だから，座っていっぱいやりな，ツロー
+	フ，それからゆっくり話し合おうじゃないか．確かお互いに協定を結
+	んだと思っていたんだがな−−おまえたちは盗まない，俺たちは殺さ
+	ない」そして間を置いて付け加えた，「報酬のためにはな」
+
+	ツローフは差し出されたビールを飲んだ．
+
+	「それで？」と暗殺者．「俺が殺す，それからあんたが盗めばいい．
+	あそこの妙な格好をした奴がそうか？」
+
+	「そうだ」
+
+	ツローフはツーフラワーを見すえた．ツーフラワーはにやっと笑いか
+	えした．ツローフは肩をすくめた．かれはなぜ，人々が他人にしんで
+	もらいたがるのか，わざわざ考えて時間を無駄にすることは滅多にな
+	かった．生計の糧というのに過ぎない．「依頼人は誰か，教えてくれ
+	ないか？」とイモー．
+
+	ツローフは片手を上げた．「おいおい！」と抗議する．「職務上のエ
+	チケットだぞ」
+
+		[ The Colour of Magic, by Terry Pratchett ]
+		[ ディスクワールド騒動記，安田均訳，角川文庫 ]
+盗賊のマスターキー
+master key of thievery
+	この万能鍵は大昔に作られ，どんな鍵でも開けてしまう強力な魔力が
+	吹き込まれている．持っているだけで，持ち主に警告を与え，瞬間
+	移動を制御し，物理ダメージを半減させる．その力を使うとどんな
+	罠でも解除する能力が得られる．
+盗賊の頭領
+master of thieves
+	窓の外で羽ばたきが聞こえた．イモーは椅子から巨体を起こすと部屋
+	を横切り，一羽の大烏を連れて戻ってきた．脚の通信間をはずしても
+	らうと，そいつは飛び上がって，垂木のすき間にひそむ同類たちの仲
+	間入りをした．ワイゼルは憎しみのこもった目でそいつを眺めた．イ
+	モーの大烏は，主人への忠誠に関しては悪名が高い．イモーの右腕た
+	るワイゼルが一度，アンク=モルポークで一番手の盗賊になろうと試
+	みたときには，左目を失うはめになったほどだ．だが，命まで取られ
+	たわけじゃない．イモーは男が大志を持ったからといって，決して妬
+	んだりはしないのだ．
+
+		[ The Colour of Magic, by Terry Pratchett ]
+		[ ディスクワールド騒動記，安田均訳，角川文庫 ]
+マストドン
+mastodon
+	マンモス属の，巨大なゾウに似た哺乳動物．マストドンなど．漸
+	新世から更新世にかけて生息．円錐状に突出した臼歯を持つ．
+		[ Webster's Encyclopedic Unabridged Dictionary
+			of the English Language ]
+
+#[SLASH'EM 0.0.7E6]
+	Yakwawiと呼ばれるマストドンが，人間の役に立つようにとこの世に置か
+	れた．しかし巨大な怪物のような獣は荒々しく，強力で，そして無敵で
+	あった．その皮はとても強靭で，非常に厚かったので，最も鋭い槍と矢
+	をもってしても，ほとんど刺し貫く事ができなかった．この恐ろしい生
+	物は森と平野に住んでいた全ての他の動物に対し――創造者がLenapeの
+	民に対して肉として使われるよう置かれた動物に対し戦争を起こした．
+		[ From Legends of the Lenape Native Americans ]
+#	Lenapeとは，デラウェア川流域に住んでいたネイティブアメリカンの事
+ミート*
+大きな肉のかたまり
+meat*
+huge chunk of meat
+	肉があっても食べられない者がいる
+	求めるものを食べる者もいる
+	しかし私たちには肉があり，食べることができる
+	だから神に感謝しよう
+		[ Grace Before Meat, by Robert Burns ]
+メデューサ
+『メデューサ』
+medusa
+	ゴルゴンの三姉妹のうち，メデューサのみが人間の姿を装いダンジョ
+	ンの世界に住んでいる
+
+	ペルセウスがいっぱし成人いたしますと，ポリュデクテスは，メド
+	ゥサといってその国を荒らしていた恐しい怪物退治に彼をやりまし
+	た．メドゥサはもとは美しい乙女でありました．ことに髪の毛を何
+	よりの誇りにして，アテナとその美しさを争うようなことをしたた
+	めに女神からすべての美を奪われて，美しい巻毛はことごとくひし
+	めく蛇と変えられたのでありました．彼女はとうとう残酷な怪物と
+	なってしまいました．そうしてその顔つきがあまり恐しいものです
+	から，誰でも一目見たものはみんな石になりました．メドゥサの住
+	んでいる洞窟の周囲には，人間や動物の形をした石がたくさんあり
+	ますが，これはどうかした機会に彼女を一目見て，見るとともに石
+	化してしまったのであります．さてペルセウスはアテナとヘルメス
+	に可愛いがられていたので，アテナは彼女の盾を貸してくれるし，
+	ヘルメスはまた翼のついた靴を貸してくれました．それ故ペルセウ
+	スはメドゥサが眠っているあいだに，その姿をまともに見ないよう
+	に気をつけながら手に持った盾の中に映っているアテナの像に守護
+	せられて，メドゥサに近よりました．そうして首を切り落してそれ
+	をアテナにあたえますと，アテナは自分の盾のまん中にメドゥサの
+	首をつけました．
+		[ Bulfinch's Mythology, by Thomas Bulfinch ]
+		[ ギリシア・ローマ神話， 野上弥生子訳，岩波文庫 ]
+メロン
+melon
+	「どうしたんだ，ウンボパ？　この馬鹿者」私はズル語で叫んだ．
+	「食べものと水だよ，マクマザーン」と言って彼は，ふたたびその緑
+	色のものを振ってみせた．
+	やっと彼が手にもっているものがわかった．メロンだった．私たちは
+	野生のメロン畑の上にきていたのだ．熟しきって何千となくころがっ
+	ていた．「メロンだ！」と私は隣りにいるグッドに叫んだ．つぎの
+	瞬間，グッドは義歯でメロンにかぶりついていた．
+	食べてしまってから気がつくと，私たちはそれぞれ六個は食べていた．
+	貧弱な果物だったが，私は，これほどおいしいものは食べたことがな
+	いような気がした．
+		[ King Solomon's Mines, by H. Rider Haggard ]
+		[ ソロモン王の洞窟, 大久保康雄訳, 創元推理文庫 ]
+mercury
+	ローマ神話で商業，交易，旅行者をつかさどる．彼は一般に，使
+	者の杖(二匹の蛇がからみついた杖)と財布を持った姿で描かれて
+	いる．
+ミ＝ゴ*
+migo*
+mi-go*
+#[SLASH'EM 0.0.7E6]
+	これらの奇妙な生物は他次元からの飛来者である．知性もつ菌類と，身
+	体の大部分を占める昆虫のような姿には異様な共生関係がある．それら
+	は強大な魔力に触れる事が出来るといわれている．それらの女王は人間
+	の脳を取り出す術を心得ており，遠きユゴス(冥王星)にそれを運ぶ．
+	ミ＝ゴ達もまたユゴスよりの者として知られている．
+*ミミック
+*mimic
+	現代のカメレオンの祖先であり，この生き物はその周囲にあるものの
+	何にでも化ける事ができる．それは物体や洞窟の要素にも化ける事が
+	できる．しかしながらカメレオンが他の生き物に化けて，狩りに出る
+	のに対し，ミミックはそれを求めて食料がやって来るのを忍耐強く待っ
+	ている．
+マインドフレア
+*mind flayer
+	この生き物は人間の体を持つが，口は触手に覆われ，両手には三本の
+	指を持つ．マインドフレアはテレパシーをもっており，知恵のある生
+	き物，とりわけ人間を溺愛している．触手で攻撃されようものなら，
+	マインドフレアはゆっくりと全ての知恵を吸いとり，やがて犠牲者は
+	死んでしまうだろう．
+*鉱山
+mine*
+	ドワーフによって作られたもの．この場合の〈規定〉によれば，
+	この鉱山は，長年打ち棄てられているか，せいぜいわずかな生き
+	残りが住んでいるだけ，という状態にあり，彼らは人間/他部族の
+	ドワーフ/闇の王の手先に，追い立てられた/仲間の多くを殺され
+	た，というような内容をごちゃごちゃと主張してくる．住人が残
+	っていようといまいと，優美に掘りぬいた何層もの回廊のため，
+	鉱山の内部はきわめて複雑である．ここで採掘されていたものに
+	ついては，必ずしもはっきりしていないことが多いが，少なくと
+	もある時には宝石であったと思われる．というのも，たいていの
+	場合，壁面の岩に，不要なエメラルドなどが埋まっているのを見
+	つけることになっているからである．金属も存在しているものの，
+	鎧や武器(_目をみはるような_)の形になっている場合にかぎられ
+	る．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.87-88, 鉱山
+ミノタウロス
+minotaur
+	ミノタウロスは半牛半人の怪物である，ミノスの妻パシパエとすば
+	らしく美しい牡牛の間の子である．
+	．．．
+	ミノタウロスが産まれたときミノスはミノタウロスを殺さなかった．
+	偉大な建築家で発明家であるダイダロスが逃がれることが不可能で
+	ある監禁場所を彼のために作った．ダイダロスはかの有名な迷宮を
+	つくった．一度入るとよじれた道の出口を見つけることはできず，
+	永遠に歩きつづけなければらなかった．
+		[ Mythology, by Edith Hamilton ]
+ミトラ
+mit*ra*
+	インドに由来する．ミトラは光の神であり，ペルシャの光の信仰であ
+	るアフラマズダ神の付き人に翻訳された．このことからローマの神ミ
+	トラスとして取り入れられている．彼は一般に空の神だけでなく，温
+	暖な気候やそよ風の力で田畑を肥やの力化身ともみなされる．「アヴ
+	ェスタ」によると彼は10000の目と耳をもち，白馬に引かれる馬車に
+	乗っている．ミトラはゾロアスタ教によると，光と闇に力の終りなき
+	戦いに関係がある．宣誓と誓約を保存する責任者であり，彼は植物や
+	動物の創造者である．彼に敵対するものの長は暗黒の力であるアーリ
+	マンである．
+		[ The Encyclopaedia of Myths and Legends of All
+			Nations, by Herbert Spencer Robinson and
+			Knox Wilson ]
+*ミスリル*
+*mithril*
+	ミスリル！すべての民がこれを欲しがった．これは銅のように打ち
+	延ばすことができた．またガラスのように磨くことができた．ドワ
+	ーフたちはこれを軽くしてしかも鍛えた鋼よりも堅い金属に作り上
+	げることができた．その美しさはふつうの銀のそれに似ておるが，
+	ミスリルの方はくろずむこともなく，曇ることもなかった．
+		   [ The Fellowship of the Ring, by J.R.R. Tolkien ]
+					      [ 評論社, 瀬田貞二訳 ]
+聖なる冠
+*mitre of holiness
+	この知性の兜は，通常の知性の兜のすべての効果を発揮し，なおかつ
+	炎によるすべての攻撃から身を守る能力を有する．特別な力を使えば，
+	使用者の魔力を増幅し，より多くの呪文を唱えることができるように
+	なる．
+ミュルニール
+mjollnir
+	ロキの挑戦に対するためドワーフのエイトリとブロックに鍛えられた
+	ミュルニールは不滅のウォーハンマーである．ミュルニールは２つの
+	魔力をもつ．それを投げると常にトールの手に戻ってくること，そし
+	てトールのシャツの中におさまるまで小さくなることができることで
+	ある．他の神々はミュルニールこそ闘争の勝者であると判決を下した．
+	なぜなら，作られた全ての宝物のなかで，それだけが巨人達から神々
+	を守る力も持っていたからである．伝説によれば，ミュルニールの
+	成長に囲まれて，神格化の質を帯びはじめるとされる．トールは誕生，
+	結婚，死から彼のヤギが復活するときにさえ浄めるためにミュルニー
+	ルを使用した．北欧神話では，ミュルニールはトールの人生のサイク
+	ルすなわち，受精，誕生，破滅，復活の統治力として表わされている．
+*モールド
+カビ
+~slime mold
+*mold
+	モールド，カビ，糸状菌．菌類に属する多細胞有機体，綿のような単
+	繊維組織網で構成された植物の体の典型．モールドの特色は単繊維で
+	の胞子の発芽に帰する．ほとんどのモールドは死体寄生である．ある
+	特定の種は(例えばペニシリン，青カビ)はチーズや抗生物質を作るの
+	に使われる．
+		[ The Concise Columbia Encyclopedia ]
+モーロック
+モレク
+mol?ch
+	主はまたモーセに言われた．「イスラエルの人々に言いなさい，『イ
+	スラエルの人々のうち，またイスラエルのうちに寄留する他国人のう
+	ち，だれでもその子供をモレクにささげる者は，必ず殺されなければ
+	ならない．わたしは顔をその人に向け，彼を民のうちから断つであろ
+	う．彼がその子供をモレクにささげてわたしの聖所を汚し，またわた
+	しの聖なる名を汚したからである．その人が子供をモレクにささげる
+	とき，国の民がもしことさらに，この事に目をおおい，これを殺さな
+	いならば，わたし自身，顔をその人とその家族とに向け，彼および彼
+	に見ならってモレクを慕い，これと姦淫する者を，すべて民のうちか
+	断つであろう．
+		[ レビ記 20:1-5，口語訳聖書，日本聖書協会 ]
+monk
+* monk
+grand master
+master kaen
+武闘家
+総師範
+カエン
+マスター*カエン*
+	ある日，将軍が仏教徒の修道士　一休（直訳すると「1・休み」）を
+	彼の城での夕食に招待した．一休は豪華な袈裟は着慣れていないの
+	で，城に行く時も丁度良い古袈裟を着ていった．彼には「見かけは
+	関係無い」．
+	
+	彼が城につくと，２人の門番が彼の前に立ちはだかり，大声で言った．
+	「このこじきめ，どこから来た！　名を名乗れ！　お前にこの辺りを
+	うろついて良いとは言って無いぞ！」
+	
+	「私の名は一休僧上です．将軍の夕食に招待されたのですが．」
+	
+	２人の門番は注意深く修道士を調べて，そして言った．
+	「嘘つきめ． 将軍様がどうしてこのようなみすぼらしい身なりの
+	修道士を夕食に招くか？　彼はお前ではなく，今日の大きい式典の
+	為に非常に厳粛で尊い一休を城に招いているのだ．とっとと立ち去れ！」
+
+	一休は門番に彼が本当に招待された客人である事を納得させる事が出来
+	なかった．なので彼は寺に戻り，夕食のために非常にきちんとした厳粛
+	な豪華な袈裟に着替えた．そして彼が再び城に行くと，門番は彼が素晴
+	らしい仏教徒の修道士である事を認め，礼をもって彼を迎え入れた．
+
+	夕食の席で，一休は料理満載な食膳の前についた．しかし，彼は料理を
+	口にせず，箸でつまんでは袖に入れた．将軍は不思議に思って尋ねた．
+	「これは呆れた．あなたは料理の幾つかを寺に持ち返りたいのか? 
+	料理人に命じて何か持ち返り用の料理を作らせるが．」「いいえ」と
+	彼は答えた．「私がここを訪れました時に，この豪華な袈裟を着るまで，
+	城に入るのを門番に止められましたので．貴方がお招きしたのは私では
+	なくこの袈裟でしょう．ですから袈裟に料理を食べさせているのです．」
+			[ Dining with a General - a Zen Buddhism Koan ]
+			[将軍との食事 − 禅宗の公案]
+猿
+monkey
+	「いいか．」
+	クマの声は，むし暑い夜にひびくかみなりのように，とどろいた．
+	「わしはな，おまえに，ジャングルのおきてをぜんぶおしえてきた．ジャ
+	ングルにすむ動物すべてにあてはまるおきてを，な．だが，木の上でく
+	らすサルだけは，あれはべつものだ．あいつらにおきてはないんだ．ジャ
+	ングルの，のけものだよ．じぶんらのことばもなくて，いろんな動物の
+	ことばをぬすんでつかうのさ．高い木の上で待ちぶせして，のぞき見し
+	ながら，ぬすみ聞きするんだ．あいつらのくらしかたは，もとからわし
+	らとはちがうんだよ．かしらをもたないところ，なんでもすぐにわすれ
+	るところ，みんながちがってるんだ．そのくせ，じまんするのが大すき
+	で，おしゃべりときてる．おまけに，うぬぼれも強くて，じぶんたちは
+	ジャングルで大きな仕事ができるえらい種族だと思いこんでやがる．と
+	ころがだ，木の実がひとつおちたといっちゃ，ゲラゲラわらい，あとは
+	すっかりわすれちまうんだ．わしら，ジャングルのものは，サルどもと
+	はけっしてつきあわんのだぞ．やつらが口をつけたところじゃ，わしら
+	はぜったい水をのまん．やつらがいく場所には近づかん．やつらとは，
+	くいものをとるところもべつ，死に場所もべつなんだ．．．」
+		[ The Jungle Book, by Rudyard Kipling ]
+		[ ジャングル・ブック, 西村孝次訳, 学習研究社 ]
+モラディン
+moradin
+#[SLASH'EM 0.0.7E6]
+	Moradin is the creator, the ancestral father of the dwarven race.
+	He is an excellent craftsman and warrior, as befits the respected
+	leader of the dwarven pantheon, and is a master of the forge.  He
+	is pictured as a tall, muscular dwarf, wearing rough blacksmith's
+	clothing.  In most representations of him, he is at the forge,
+	working on a piece of steel.  As could be expected, his symbol of
+	worship is the anvil and hammer.
+モンバット
+mongbat
+#[SLASH'EM 0.0.7E6]
+	In appearance, a cross between a small boy and a bat, this nimble
+	creature is capable of quick, aerial strikes. Fortunately, a
+	mongbat's small size renders its attack little more than a painful
+	nuisance.
+	    [ Beyond the Serpent Pillars by Andrew Morris ]
+
+	Though a novice, the warrior had riches.
+	In finery, he assaulted the liches.
+	  An orc got his suit,
+	  A spectre one boot,
+	And a mongbat is wearing his britches.
+	    [ Limericks, by Magus ]
+ムーマク
+mumak*
+	ハラドのムーマクは事実途方もなく大きな図体をした獣でした．か
+	れと同じものは今ではもう中つ国を歩いてはいません．この末の世
+	にまだ生きているその同類の中に，わずかながらありし昔のかれの
+	胴まわりと堂々たる姿の記憶が留められているに過ぎません．かれ
+	はやって来ました．．．その足ときたら大木のよう，とてつもなく
+	大きな耳は帆のように広がり，長い鼻は今にも打ってかかろうとす
+	る大蛇のように持ち上がっていました．小さな赤い目は怒り狂って
+	います．角のような形は．．．ぽとぽと血を滴らせていました．
+			       [ The Two Towers, by J.R.R. Tolkien ]
+					      [ 評論社, 瀬田貞二訳 ]
+*ミイラ
+*mummy
+	しかし，身体に包帯をまく仕方と，軟膏および作業の途中で用い
+	られる他の物質のリストと，おのおのの包帯がしかるべき位置に
+	まかれるごとに話される力の言葉のために，我々は，M.マスペロ
+	によって『防腐保存の儀式』というタイトルで編集され翻訳され
+	た，たいへん興味深いパピルスに頼らねばならなかった．…
+
+	今や身体を保存するためのあらゆることがなされ，身体のすべて
+	の器官は，腐敗する物質を腐敗しなく変える力の言葉によって，
+	未来永劫に保護されたのである．最後に身体を紫か白のリネンで
+	覆えば，死者の身体はいつでも埋葬できる状態となる．
+		[ Egyptian Magic, by E.A. Wallis Budge ]
+ミイラの包帯
+mummy wrapping
+	彼は白い布---これは自分で持ってきたナプキンだった---で顔の下半
+	分を隠しており，口と顎がすっかり覆われているのだから声がくぐも
+	るのも当然だった．しかしホール夫人をびっくりさせたのはこんなこ
+	とではなかった．彼の青い色眼鏡の上の額は包帯で巻かれ，耳まで別
+	の包帯で覆われているので，顔の中で出ているところといえばピンク
+	色のとがった鼻だけだった．それはやや光沢のあるピンク色だった．
+	着ているのは茶褐色のビロードのジャケットで，高い黒い色のリンネ
+	ルで縁どりした襟を立て，首を隠していた．そして十文字にかけた包
+	帯の下や隙間からふさふさした黒髪が奇妙な尾か角のようにとびだし
+	ていて，何とも奇怪な姿であった．
+		[ The Invisible Man, by H.G. Wells ]
+		[ 透明人間，岩波文庫，橋本槇矩 ]
+*ナーガ
+*ナーガの雛
+*naga*
+*naja*
+	ナーガは蛇の体に男や女の顔を持つ神秘的な生き物である．彼らは
+	自分のテリトリーと考えるところを死守する．ある種のナーガは偉
+	大な力の魔法使いによって無理矢理番兵のように仕えさせることが
+	できる．
+なぎなた
+薙刀
+naginata
+	反りかえった単刃のとりつけられた日本の長刀．刃の長さは2フィート
+	から4フィートで，4フィートから5フィートの長さの柄につけられて
+	いる．なぎなたはなかご(刀身の柄に入った部分)のそばの樋の部分で
+	みねの部分が薄くなっているところの上部で切る．しかしそこは鋭利
+	ではない．この刀の全体の断面は上部を平にした菱形になっている．
+	隣隔が見えるよう，反りは柄の近くでは少ししかないかもしくは全く
+	なく，先端がよりはっきりするようになっている．
+
+	長刀にて，向ふ敵五人薙ぎふせ，六人に當る敵に逢うて，長刀中より
+	うち折つて捨ててげり．その後太刀を拔いて戰うに，敵は多勢なり，
+	蜘蛛手・かく繩・十文字・蜻蛉返り・水車，八方すかさず切つたり
+	けり．向ふ敵八人切りふせ，九人に當る敵が甲の鉢に，餘りに強う
+	打ち當てて，目貫の元よりちやうと折れ，くつと拔けて，河へざつ
+	ぶとぞ入りにける．
+	[ Story of Tsutsui no Jomio Meishu from Tales of Heike ]
+		[ 筒井浄妙明秀，平家物語 ]
+ナルフェシニ
+nalfeshnee
+	この魔神たちには爪や牙による物理的な攻撃だけでなく，魔法による
+	攻撃の能力もある．
+ナルゾク
+nalzok
+	ナルゾクは，モーロック自身が戦闘に加わりたくない時に戦闘の指揮
+	を任せるほどの，狡猾で信頼のおけるモーロックの忠実な戦闘副官で
+	ある．ナルゾクは上位の悪魔であり，アンデッドを指揮することで知
+	られている．彼は権力に飢えており，密かにモーロックの地位を欲し
+	ている．モーロックは彼を信用していないが，自分自身の能力には自
+	信があるので，彼が有用であるが故にナルゾクに現在の地位を許すこ
+	とにしている．
+ネアンデルタール*
+neanderthal*
+	1．有史以前の現代人の先祖である太古の頭蓋骨が発見された，ドイツ
+	のデュエッセルドルフとエルバフェルドに狭まれた谷．2. 上記に関連
+	する人種．
+*ネフェレト*
+neferet
+neferet the green
+	「緑のネフェレト」は隠された塔に居をかまえている．その塔に
+	は魔法によってしか到達できない．そこで彼女はオカルティズム
+	の不思議な技術を徒弟たちに教えている．長い年月にもかかわら
+	ず，彼女は新たな呪文，とくに空間移動を含むものを研究しつづ
+	けている．噂でしかないが，彼女自身がまだ徒弟だったとき，彼
+	女は偶然皮膚を緑色にかえてしまい，それ以来ずっとそのままに
+	しているということである．
+イモリ
+newt
+	トカゲに似た小さい動物(の種)．水中で大部分を過す．
+		[ Oxford's Student's Dictionary of Current English ]
+
+	田沼の蛇のヒレ肉も，
+	煮えたり，焼けたり，釜の中．
+	蛙の指に，蠑〓(虫へんに原)(いもり)の目，
+	蝙蝠の毛に犬の舌，
+	蝮蛇(まむし)の叉舌，盲蛇(むし)の針，
+	蜥蜴(とかげ)の足に，角鴟(ずく)の羽，
+	ひどい難儀のまじないに，
+	地獄の吸物みたいに煮えろ．
+	骨折苦労を倍にして，
+	釜も沸き立て，火も燃えろ．
+		[ Macbeth, by William Shakespeare ]
+		[ マクベス，野上豊一郎訳，岩波文庫 ]
+忍者刀
+ninja-to
+	日本の幅広の剣．
+###[地形．本体の訳に合わせる事]
+ン・カイ
+*nkia
+*n'kai
+#[SLASH'EM 0.0.7E6]
+	A vast, endless, eternally dark gulf said to lie at the bottom
+	of Gehennom.  Even daemons fear to tread there.  The source of
+	the Lethe river is said to be within the great gulf.  What few
+	tales exist of its outer reaches speak of hordes of hideous
+	gugs that scavenge and devour the bodies of all who enter.
+	無限に広がる，永遠に暗い谷間がゲヘナの底に横たわっているといわれ
+	ている．悪魔達でさえそこに踏み込む事をためらう．レーテの源流がそ
+	の谷間の中にあるという．侵入者をむさぼり食う秘せるガグの群れの話
+	が，谷の外でもわずかに言い伝えられている．
+ノルン
+*norn
+	ノルンは北欧の三人の運命の女神である．女性の巨人で彼女らは素晴
+	しい黄金時代を終末へと導く．彼女らは全て生まれた子供のゆりかご
+	に糸を垂らし贈り物を置く．彼女らの名前はウルダ，ヴェルダンディ，
+	スクルドであり，過去，現在，未来を現わす．ウルダとヴェルダンデ
+	ィは温厚だが，スクルドは冷酷で残忍である．彼女らの仕事は運命の
+	糸をつむぎ，聖なるトネリコの木ユグドラシルに水をやり，常にその
+	まわりの大地を浄めておくことである．スクルドが激怒すると，彼女
+	はしばしば緩徐の姉達のつぐんだ糸をずたずたにし仕事を大なしにす
+	る．
+		[ The Encyclopedia of Myths and Legends of All
+			Nations by Herbert Spencer Robinson and Knox
+			Wilson ]
+ヌンチャク
+nunchaku
+	日本のフレイル．
+*ニンフ
+*nymph
+	ローマ神話やギリシャ神話に登場する女性型の生き物であるニンフは，
+	川や森や池などに住んでいました．ニンフの美しさは言葉にできない
+	くらいです: 永遠の若さを保つこの乙女は，スマートな容姿と長くて
+	たっぷりとした髪，まばゆいほどの肌と完壁な歯，あざやかな唇と優
+	しい目をしています．ニンフはとてもよい香りがし，彼女の長いロー
+	ブは，金糸のふちどりとこの世のものとは思われない壮麗な虹色の刺
+	繍によって輝いています．ニンフの振舞いは優雅で魅力的であり，そ
+	の頭脳は鋭く機知に富んでいます．
+
+	「テセウスは，彼女の声が自分を眠りの深みにひきこんでいくよ
+	うに感じた，歌は彼の夢の骨組みであり，その夢は恐怖にみちて
+	いた．悪魔の少女が彼をおいかけ，牛男が彼をつきさそうとして
+	いた．いたるところに血が，苦痛が，恐怖があった．しかし彼の
+	頭はニンフの膝のもとにあり，ニンフの麝香は彼のそばにあり，
+	彼女の声は夢をつむいでいた．そのとき彼は，彼女が，彼にやが
+	ておとずれるであろうおそろしいなにかを伝えるためにつかわさ
+	れたのだと知った．彼女の歌は警告であった．しかし彼女は彼に
+	新しい種類の喜びをもたらし，そのひとつは彼のものの見方を変
+	えた．そのとき，やがて英雄となるであろう少年は，とつぜんに
+	して，大部分の英雄が後に(なかには遅すぎるものもあるが)知る
+	こと，すなわち，喜びは苦痛を汚すこと，ニンフへの道は怪物に
+	よってふさがれるということを，知ったのである．」
+	    [ The Minotaur by Bernard Evslin ]
+オーディン
+odin
+	シグチュール(勝利の神)，ワルファザー(スレインの父)，片目，
+	ハンガ神(首切りの神)，ファルマ神(積荷の神)，ハプタ神(囚人の神)
+	オージンとも呼ばれる．彼は北欧の最高神で，戦い，勝利，智恵，
+	予言，詩，死，空気，風，歓迎，魔法の神である．
+	戦いと勝利の神として，オーディンは彼が手中にした戦士した英雄達
+	の宮殿であるアースガルドのヴァルハラ宮殿に住む女性の戦士ワルキ
+	ューレを指揮する．
+	彼女らは神の領域を最後の審判日ラグナロクにおいて氷の巨人から守
+	備する者を選ぶ．
+	風の神として，オーディンは8本足の馬，スレイプニルに乗り，彼の槍
+	であるグングニルを装備し天空を駆ける．通常はヒュギンとムニンと
+	言うワタリガラスも同行し，彼はそれらを偵察にも用いる．
+	歓迎の神として，人々のふるまいがどうであるか，あるいはオーディン
+	をどのように扱っているかなど彼が知りえないことを見るために，変装
+	して，地上を訪ずれるのを楽しむ．
+	オーディンは通常片目の長い白髭と大きなつばのある帽子の歳老いた賢
+	者として描かれる(彼が片方の目をヘルの智恵の泉の番人であるミミル
+	に泉の一飲みとの交換のため与えたからである)
+オーガ*
+ogre*
+	この喰い意地の張った，裸の，怒っているオーガに会ったものはそ
+	れを簡単に忘れること--生き延びていればだが--ができません．雌
+	雄問わずオーガは３ｍくらいまで軽く成長します．体格や顔の表情
+	はネアンデルタール人を思い浮べさせられます．その小さな点のよ
+	うな鋭い歯で噛みつくのです．オーガは太陽の光を直接浴びること
+	を嫌うので，そいつらのぼろぼろのぶかっこうな皮膚はシャツのよ
+	うに白いのです．そいつらは体にラードを塗ったくるのが大好きで，
+	たいていは腰巻き以外のものは身につけません．エルフはそのバタ
+	ーが腐ったような悪臭を１０ｍ先からかぎわけます．
+	オーガは孤独を好む生物です．ごくまれに二三人の若者をつれてい
+	る雌に会うことがあります．彼らはヒューマノイドの中で唯一肉食
+	です．そして好みの食事は--そんなに驚くことではないが--人間の
+	肉です．よい肉が得られそうだと予想されるときのみですが，彼ら
+	はときどきオークやゴブリンとつるみます．
+		[ het Boek van de Regels; Het Oog des Meesters ]
+防水クローク
+oilskin cloak
+	当直の間，我々は衣服を点検し，悪天候に備えてあらゆるものを
+	こしらえ，また修繕した．我々ひとりひとりが油かタール塗りの
+	防水布の服を作っていたが，それをとりだしてきて油およびター
+	ルのコーティングをほどこし，ステーの上につるしてかわかした．
+	我々の頑丈な靴もまた，溶かしたグリスとタールを混ぜあわせた
+	もので厚く覆った．このようにして，我々は太平洋の暖かい太陽
+	と好天を利用して，その反対の天候に備えたのである．
+		[ Two Years Before the Mast, by Richard Henry Dana ]
+防水袋
+oilskin sack
+	夏はあっというまに過ぎました．キャンプがしまる日，ブリックル先生
+	はリーダーたちを集めて給料をはらいました．ルイも百ドルもらいまし
+	た．生まれてはじめて，じぶんでかせいだお金でした．ルイにはさいふ
+	もポケットもないので，ブリックル先生がひものついた防水の袋にお金
+	を入れてくれました．先生はそのお金の袋を，トランペットや黒板やチョー
+	クや人命救助メダルといっしょに，ルイの首にかけました．
+		[ The Trumpet of the Swan, by E.B. White ]
+		[ 白鳥のトランペット, 松永ふみ子訳, 福音館書店 ]
+オログ*ハイ
+olog-hai
+	しかし，第3期の終わり頃には，今まで知られていなかったト
+	ロル族が南MirkWoodとモルドールの境界になる山々に現れまし
+	た．  
+	彼らは暗黒の言葉でオログ-ハイと呼ばれました．
+	サウロンは彼等がどこからきたのか知らないまま，彼等を忠実
+	な下僕に育てました． 
+	彼等はトロルではなく，大きなオークだと考える者もいました．
+	しかし，体も力も強い最も大きなオークと比べても，オログ-
+	ハイは体も心も全くといっていいほど似ていませんでした．
+	トロル族は彼らの主人の邪悪な意思でいっぱいでした．堕ちた種
+	族で，強大ですばしこく，凶暴でずるく，石より固いのでした．  
+	古い黄昏の種族と異なり，彼等は太陽の光を耐えること
+	ができました． 
+	彼等はほとんど言葉を話しませんが，知っている言葉はバラド-
+	デュアの暗黒の言葉だけでした． 
+		[ The Return of the King, by J.R.R. Tolkien ]
+				      [ 評論社, 瀬田貞二訳 ]
+賢者
+オラクル
+デルファイ
+oracle
+delphi
+p*thia
+	アポロンの神託所のあるパルナッソスの高くそびえる山の斜面にある
+	デルファイは神話で重要な部分を演じています．カスタリアはその聖
+	なる泉で，セフィサスはその川です．それは世界の中心にささえられ
+	ており，沢山の巡礼者がギリシアはもちろん外国からもそこにやって
+	来ました．他の聖堂とはくらべものになりません．真実を切望する探
+	究者により質問された疑問に対する答えはトランス状態にある尼僧の
+	言葉により伝わります．
+		[ Mythology, by Edith Hamilton ]
+オレンジ
+洋ナシ
+orange
+pear
+	いったいどんな味の木の実か，とおっしゃるんですか？　残念なこと
+	に，味のことはうまくいいあらわせないものです．せいぜい，ほかの
+	くだものとくらべていうくらいですが，とれたてのグレープフルーツ
+	でも，これにくらべれば味がなく，いちばん汁気のあるオレンジもか
+	すかす．舌の上でとろける洋ナシもまだかたくて，すじっぽいともい
+	えるし，どれほどあまい野イチゴにせよ，これにくらべたらすっぱい
+	と思われました．そのうえ，たねもなく，しんもなく，虫もついてま
+	せん．この木の実を一度食べたあとでは，どんなおいしいものだって，
+	薬みたいな味に思われるでしょう．といっても，わたしにはとてもの
+	べられません．みなさんがじぶんでその国にいって，じぶんで味をみ
+	るのでなければ，わかりませんね．
+		[ The Last Battle, by C.S. Lewis ]
+		[ さいごの戦い, 瀬田貞二訳, 岩波少年文庫 ]
+多相グモ
+phase spider
+#[SLASH'EM 0.0.7E6]
+	Phase potion, which is related to oil of etherealness, is more
+	useful for general combat. When imbibed, this potion allows the
+	user to shift in and out of phase with the Prime Material plane
+	at will, much like a phase spider. When out of phase, the user
+	is impervious to all forms of attack except those that reach
+	into Ethereal plane. ... Phase potions are brewed from phase-spider
+	ichor or from the concentrated juices of rare underground fungi.
+		[ RPG Sheets by Amalor Mymnyx ]
+
+	Phase Spiders are not true Spiders, but an alien race which
+	appear as giant spiders with humanoid shaped heads. Phase Spiders
+	speak a whispery language which is reminiscent of the sound of the
+	wind blowing through the trees. ... Phase Spiders are considered
+	Enlightened creatures as they have the ability to phase in and out
+	of our normal space-time into what most scientists would refer to
+	as Void-Space. Phase Spiders use this ability to their great
+	advantage in combat.
+		[ Alien Update Lexicon by Randy Walker ]
+ピクシー
+フェアリー
+妖精
+pixie*
+fairy
+fairies
+#[SLASH'EM 0.0.7E6]
+	Do fairies live in the hedge by the lawn?
+	With pale, violet eyes and wings that shimmer?
+	Not in my garden of thistle and thorn,
+	Well, not since I tidied it up with my strimmer.
+		[ Learning to Live with Orcs by Richard A. Bartle ]
+ピロリスク
+pyrolisk
+	最初に角の向こうをちらっと見たとき，私はまたコカトリスがいるのだ
+	と思いました．この嫌らしい生物には迷宮に入ってから二，三回出会っ
+	ていました．私は頭を引っ込めると次にどうするかを考えました．どき
+	どきしながら，サックを叩いて確かにトカゲの死体がすぐ手の届くとこ
+	ろにあるのを確認しました．装備に穴や傷がないことも確かめました．
+	先に行かなければならないのです．一つ深呼吸をして，数え始めました．
+	三，二，一．そして角の向こうに飛び出しました．しかしそこにいたの
+	はコカトリスではなかったのです！突然顔の周りの皮膚が激しく焦げた
+	のを感じ，サックから炎が立ち昇りました．私をサックを地面に投げ捨
+	て，とにかくそいつの視界から逃れるためにすばやく角の向こうに引っ
+	込みました．
+
+#[SLASH'EM 0.0.7E6]
+	A single glance from this red-feathered cockatrice  can cause even
+	the bravest adventurer to burst into flames, their flesh withering
+	and blackening and curling beneath the creature's baleful gaze.
+		[ The New Bestiary, Wizard Endlebrook ]
+探索のオーブ
+*orb of detection
+	このオーブは並はずれた力をもつ水晶玉である．持つだけで，遠視
+	能力が得られ，魔法のダメージを制限し，持つ主を魔法の矢から守る．
+	能力を使うと持ち主を透明にすることができる．
+運命のオーブ
+orb of fate
+	あるものはオーディン自身がこの古代の水晶玉を作ったと言うし，他
+	の者はロキが作り，オーディンのサインを真似，底に記したのだとも
+	言われている．どちらにしろ，これは強力な聖器である．持つだけで
+	警告の力を得，物理および魔法のダメージをオーブ自身が部分的に吸
+	いとってくれる．能力を使うと，使った者を他の階へ瞬間移動させる
+	力を持つ．
+ゴブリンの王
+かみつき丸
+オークリスト
+goblin king
+orcrist
+	大ゴブリンは，これを見ると，しんからおそれにうたれた，いかり
+	のうめき声をあげ，いならぶ兵士たちもみな，歯をくいしばり，た
+	てをうち，足をふみならしました．ゴブリンたちは，すぐさまその
+	剣を見わけたのです．それは，ゴンドリンのよいエルフたちが山の
+	なかでゴブリンたちを追ったり，その町のかこみの前で戦いをした
+	むかし，何百何千のたくさんのゴブリンを殺した名剣です．エルフ
+	たちは，剣をオルクリスト，つまりゴブリン退治とよんでいました
+	が，ゴブリンたちはこれをただ「かみつき丸」とよびました．そし
+	てこの剣をにくみ，この剣を持った者をにくみました．
+				   [ The Hobbit, by J.R.R. Tolkien ]
+			  [ホビットの冒険，岩波少年文庫，瀬田貞二訳]
+オーケス
+『オーケス』
+orcus
+	死霊の皇子であるオーケスには羊の頭と毒針がある．しかしながら，
+	恐ろしいのは何よりその強力な魔力である．その杖は狙いをはずさ
+	ず，死をもたらす．
+~*ゾンビ
+~*ミイラ
+~オークの*
+オーク*
+*オーク
+#ウルク*ハイ
+~orc ??m*
+~orcish barbarian
+~orcish ranger
+~orcish rogue
+~orcish wizard
+orc*
+* orc
+#uruk*hai
+	オークは見たところ二足動物でゴブリンの親戚です．しかし，ゴブリ
+	ンよりももっと大きくもっと危険です．平均的なオークは並の知力で，
+	広く筋肉質な肩，首，でっぱった額を持ち，厚く黒い毛が生えていま
+	す．そのしかめっつらの糸切り歯はまるでイノシシのように前を向い
+	ています．服には無頓着なので，そいつらは雑色の服を着るのを好み
+	ます．本来疑い深い性格で，オークは種族や群で生活しています．そ
+	いつらは地下に住みたがる傾向がありますが，もちろん地表にも住み
+	たがります(しかし太陽光線を好みません)．オークは全ての武器，道
+	具，鎧を人間が使うように使うことができます．彼らにはものを自分
+	たちでこしらえる能力なんてないので，彼らはしょっちゅうそれらを
+	得るために狩りをします．ものを使えないオークの群と言うのはあり
+	えません．
+		[ het Boek van de Regels; Het Oog des Meesters ]
+orion
+sirius
+*オリオン*
+シリウス
+	オリオンはポセイドンの息子でありました．彼は美しい巨人でも
+	あれば，また力の強い猟人でもありました．父は，彼に海の底を
+	わたり歩く力をあたえました．一説には海上を渡る力だともいわ
+	れています．
+
+	彼はその後猟人となって，自分を寵愛してくれるアルテミスといっ
+	しょに住んでいますと，二人は結婚するのだという評判がたちま
+	した．女神の兄(アポロン)はたいそうそれを非難して，そんなこ
+	とをしてはいけないとしばしば彼女を叱りました．ある日，用心
+	深いオリオンが，水の上に頭だけを浮かべて海にもぐっています
+	と，アポロンは妹にそれを指し示して，お前にはとてもあの海の
+	上の黒い物には射当てられまい，といいました．射手なる女神は
+	運命の的を目がけて一矢を放ちました．すると，波がオリオンの
+	死骸を陸に打ち寄せて来たので，アルテミスは自分の失策を泣き
+	悲しみ，彼を星の中に置きました．彼はそこに巨人の星として，
+	腰帯と，劒と，獅子の毛皮と棍棒を持って現われます．セイリオ
+	ス(狼星)という彼の犬がその後に従って，前にはプレイアス(昴
+	星)が飛んでいます．
+		[ Bulfinch's Mythology, by Thomas Bulfinch ]
+		[ ギリシア・ローマ神話， 野上弥生子訳，岩波文庫 ]
+おさく
+osaku
+	おさくは開錠のための小さな道具である．
+アウル*ベア
+owlbear
+	アウルベアはおそらく狂った魔法使いの異種交配によって作られた
+	生物であり，この製造過程で致命的な本性を与えられ，アウルベ
+	アを作った魔法使いはもう生きていないというのはありそうなこ
+	とである．名前に見ればわかると思うが，アウルべアは巨大なアウル
+	(ふくろう)とベア(熊)を交配させたものである．毛皮と羽に覆われ
+	ている．
+パンサー
+panther
+	すると，山の斜面にさしかかるやいなや，そこに
+	軽快で敏捷な豹が一頭あらわれた，
+	皮に斑目(まだらめ)がある豹だった．
+
+	面と向かいあったが立ち去りもせず，
+	逆に行手をさえぎろうとするから，
+	引き返そうかと私は幾度も後ろを振り返った．
+		[ Dante's Inferno, as translated
+			by Henry Wadsworth Longfellow ]
+		[ 神曲・地獄篇，ダンテ ]
+		[ 平川〓(示に右)洋訳，河出世界文学全集 ]
+ペリアス
+pelias
+	コナンはするどく叫んであとずさり，仲間を押し戻した．彼らの
+	前には，不滅の憎しみをその目にたたえたSathaの巨大な輝く白
+	い姿があらわれた．コナンは狂戦士の猛攻撃にそなえて身を緊張
+	させた．輝くファゴットをあの邪悪な表情へおしこみ，その生命
+	に切り裂く剣の一撃を加えようとした．しかし蛇はコナンを見て
+	いなかった．蛇はコナンの肩のむこうの，ペリアスとよばれる男
+	をにらみつけていた．ペリアスは腕をくんで立ち，ほほえんでい
+	た．そして，巨大な冷たい黄色い目から，純粋な恐怖の輝きにゆっ
+	くりと憎しみが消えていった．コナンがそのような感情を爬虫類
+	の目にみたことはかつて一度もなかった．
+
+	強風が吹きはらうような渦をまいて，大蛇は消えさった．
+	「いったいやつは何に怯えたんだ?」コナンが仲間を不安そうに
+	見ながら言った．
+	「うろこあるものどもは，死すべき者の目が避けるようなものを
+	見るのです」ペリアスが皮肉に言った．「あなたに見えるのは私
+	の生身の見かけですが，やつはむきだしの魂を見たのです」
+	    [ Conan the Usurper, by Robert E. Howard and L. Sprague de Camp ]
+つるはし
+pick*ax*
+	鉱山はつるはしの傷跡と
+	穴でいっぱい
+	だが，金細工師の店をごらん
+	そこには，いたるところに金がある
+		[ Divan-i Kebir Meter 2, by Mevlana Celaleddin Rumi ]
+*喰い
+*piercer
+	穴喰いは鍾乳石のように見えん．洞窟やほら穴の天井にぶらさがら
+	ん．この種のものは，人間の高さほどの，人間のももより厚く，成
+	長せん，生き物が下方に通りぬけるとき，熱と音により，知覚でき
+	よう，殺すために落ち，むさぼり喰うために落ちよう．他の手段に
+	て移動せしときそれらの動きは極めて遅いであろう．
+					[ the Bestiary of Xygag ]
+ピラニア
+piranha
+	これらは「群れ」をなして住んでいる．しばしば，この魚どもは
+	川の浅瀬に獲物がやってくるのを待っている．そこでピラニアの
+	大集団が攻撃するのである．ピラニアの大集団は大きな動物でも
+	殺すことができる…．ピラニアの下の歯は上の歯のすきまにぴっ
+	たりと合い，万力のようなものすごい噛みつきを可能にしてい
+	る．．．ピラニアは水中で暴れているいかなるものにでも興味を
+	示す．
+		[ http://www.animalsoftherainforest.com ]
+*落し穴
+pit
+spiked pit
+	さし迫った火刑を思うと，井戸の冷たさという考えが鎮静香油のよ
+	うに心に思い浮んできた．おれはその恐ろしい縁に駆けよった．目
+	を見はって下を見た．赤熱した屋根の反射が遙か底から輝いていた．
+	だが，物狂おしくなっているときゆえ，一瞬は，おれの心も眼に見
+	たものの意味を悟り得なかった．だが遂にはそれはむりやり――お
+	れの魂のなかに押し入ってきた――戦(おのの)く理性に焼きついた．
+	ああ，ものを言う声が出たらいいのだが!――ああ，恐ろしい!――
+	ああ，これ以外の恐ろしさなら何でもよい! 
+		[ The Pit and the Pendulum, by Edgar Allan Poe ]
+		[ 陥穽と振子, 小川和夫訳, 筑摩世界文學大系 37 ]
+# 陥穽と振子, 小川和夫訳, 筑摩世界文學大系 37 ポオ ボオドレール, 筑摩書房,
+# 昭和48, p.12
+穴の悪霊
+pit fiend
+	穴の悪霊は，悪魔の中でも強力で，武器で２度攻撃でき，なわばり
+	に入り込む不注意な者の命をつかみだし，握りつぶしてしまう．
+プラチナイェンダー印エクスプレスカード
+platinum yendorian express card
+	謎の物質で作られた古代の聖器．長方形の形状を持ち，とても薄く，
+	古代ルーン文字で解読不能な文字が刻まれている．持ち歩くものに
+	ESPの能力を与え，全ての魔法ダメージを半分にしてくれる．また，
+	魔法の矢の攻撃からも身を守ってくれる．その魔力を使うと，他の
+	物体を充填することができる．
+仔馬
+pony
+		おーい，おい！さあ，おいで！どこに行った？
+		上か下か，近くか遠くか，ここかあそこか，
+		それとも向こうまで，さ迷い出たか？
+		早耳，鼻利き，尻尾ふり，
+		田吾作，ちびの白靴下，
+		でぶのとしより，ずんぐりや！
+
+	[...]
+
+	トムは小馬たちの名前を順々に呼びました．かれらは急な山ぎわを乗り
+	越えてくると一列に並びました．それからトムはホビットたちにお辞儀
+	をしました．
+	「さあ，みな様方の小馬です！」と，かれはいいました．「こいつらは
+	（ある意味じゃ）お前さん方迷えるホビットよりも分別があるようだね
+	―鼻が，ずっと確かだよ．こいつらはお前さん方がまともにつっこんで
+	行く危険を鼻で嗅ぎ取っているし，逃げるにしても，方向を誤らずに逃
+	げていく．」
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+		[ 旅の仲間, 評論社, 瀬田貞二訳 ]
+魔法の入口
+*portal
+	鏡，絵画，立石，ストーンサークル，窓，この目的のために造ら
+	れた特別な門など．異界への扉を通じて，大陸の遠く離れた場所
+	への移動や，我々の世界との往来が可能になる．異界への扉の正
+	確な仕組みに関しては，ファンタジーランド旅行公社の企業秘密
+	となっている．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# p.18, 異界への扉
+ポセイドン
+poseido*n
+	ポセイドン，海の王にして，川や泉の父，クロノスとレイアの息子
+	で，ゼウス，ハデス，ヘラ，ヘスティア，デメテルの弟．ゼウスが彼
+	自身で天上の世界を受けとりハデスに地下の支配権を与えた神々の協
+	議会のくじで波の支配の階級を受けとった．
+	ポセイドンはいろいろなところで馬に関連づけられており，それゆえ
+	馬達の神である．彼は人間に馬の乗り方や彼が創作した動物の御しか
+	たを教えた．彼は創始者として見られており，馬の種の守護神である．
+	彼の象徴は岩をも割り，嵐を引き起したり沈めたり，地面を揺らすこ
+	とが可能な三又の鉾または槍である．その力ゆえ彼はまた地震の神と
+	もされている．肉体的にも彼は王として強靭で強力な支配者である．
+		[ The Encyclopedia of Myths and Legends of All
+		  Nations, by Herbert Robinson and Knox Wilson ]
+*薬*
+*potion*
+	PORTABLE，形容詞【引用の】飲むのに適した．水は飲用に
+	適していると言われる．実際，水こそわれわれ人間の天然の
+	飲料だと宣言する者もいる．もっとも喉の渇きという事実で
+	周知の周期的な病気に苦しむ時のみ，それが美味であるのに
+	気がつくのだが．まことにその時の水は妙薬である．もっとも
+	未開の人間を除いて，水の代用品の発明くらい，全時代を
+	通じ，全世界の国々で，人間が莫大かつ熱心な工夫をこらした
+	ものは，何ひとつとして見当たらない．水という液体に対する
+	一部の人々が抱くこの嫌悪感が，人類の保存本能に基盤を置い
+	ていないとすれば，それは当然のことだが，非科学的である．
+	−−つまり，科学がなければ，われわれ人間は，蛇とかヒキ蛙
+	と同じになってしまうのだ．
+	[悪魔の辞典，A．ビアス，奥田俊介，倉本護，猪狩博訳，角川文庫]
+	[ The Devil's Dictionary, by Ambrose Bierce ]
+僧侶
+高僧
+尼僧
+侍者
+priest*
+* priest*
+acolyte
+	［...］というのは，二人の神父は，いかにも神父らしく信心深そうに，
+	学識も豊かにのんびりと，もっとも現実離れのした神学の謎について話
+	をしていたからである．エセックスのちび神父は，その丸顔をしだいに
+	光を強める星に向けて，きわめて素朴にしゃべっていたが，相棒は，自
+	分には星を見上げる値打ちさえないのだといわんばかりに，うつ向いて
+	話をしている．だが，これほど純粋に聖職者らしい会話は，たとえイタ
+	リアの白い修道院やスペインの黒い大伽藍でも耳にすることはあるまい．
+	　最初彼の耳に入ったのは，ブラウン神父が言いかけていた文章の末尾
+	だったが，それは――「……中世の人が天は不滅なりと云ったのは，こ
+	ういう意味だった」と結ばれていた．
+	　のっぽの神父うなだれたままうなずいてからしゃべりだした――「そ
+	うですな，たしかに現代の不信心な連中は自分の理性に訴えましょう――
+	だが，誰だってこの無限の宇宙をながめれば，われわれの頭上のどこか
+	に，理性がまったく不合理である宇宙がなきにしもあらずと感じるでしょ
+	うが」
+		[ The Innocence of Father Brown, by G.K. Chesterton ]
+		[ ブラウン神父の童心, 第１話 青い十字架, 中村保男訳, 創元推理文庫 ]
+#創元推理文庫　p32-33
+prisoner
+	俺はどこにいる?
+	　『村』に．
+	おまえはなにが欲しい?
+	　情報を．
+	おまえはどっちの味方だ?
+	　いずれわかる．我々は情報が欲しい…情報が…
+	手に入りはしないさ．
+	　なんとしても手にいれてやる．
+	おまえは誰だ?
+	　新しい2番だ．
+	誰が1番だ?
+	　おまえは6番だ．
+	俺を番号で呼ぶな! 俺は自由人だ!
+		[ The Prisoner, by Patrick McGoohan ]
+プタハ
+ptah
+	ヌー，ネフ，ケヌビス，アメン・ネフ，ヘリー・バケフなど様々
+	な名前で知られるプタハは，創造神であり職人の神である．彼は
+	通常手だけが自由なぴっちりと体に合うローブを着ている姿とし
+	て描かれる．彼の容貌の最も特徴的なことは，顔と耳以外を覆う
+	不変のスカルキャップ(小さな縁なし帽)と，生命のアンク十字架
+	が上に乗っている杖である統治の杖である．彼は他にも神聖な動
+	物である雄牛の象徴でもある．
+紫ワーム*
+*purple worm
+	無害なみみずのガルガンチュア(巨大な巨人)版．紫ワームは通常の
+	冒険者をおどすポーズをとる．全てを飲みこみ，数分で儀牲者を消
+	化することが知られている．これらワームはいつも身構えており，
+	地面のちょっとの振動に敏感であるが，大抵は鋭い音で目が覚める．
+四足動物
+quadruped
+	森をはじめいろんな場所は，単純には分類できないような沢山の四
+	本足の生き物に適している．それらは炎のブレスや死の針を持って
+	いないが，冒険者はそれにもかかわらず，そのような動物の爪や蹄
+	や噛みつきによって何度も終焉を迎えている．
+量子力学者
+quantum mechanic
+	この生き物はこの世界のものではない．どこからか不思議な力が湧
+	いて出るようである．動力も不明．
+クアシト
+quasit
+	クアシトは小さな邪悪な生物であり，インプに似ている．攻撃の時に
+	使用する彼等の鈎爪は非常に強い毒を分泌する．
+quest
+	多くの(おそらくほとんどの)ツアーが，探索の旅として企画され
+	ている．これは大規模な宝探しのようなもので，いくつかのにせ
+	ものをまじえた手がかりが大陸中に散らばっており，大賢人がこ
+	のゲームの説明役をつとめ，探索をより楽しめるように，闇の王
+	と地形が難易度を上げている． [...]
+	探索が終了したのちも顧客を確保しておくため，公社はさらなる
+	〈規定〉を設けている．ツーリストは探し求めるものを見出した
+	ことで報いられるどころか，その先なお，闇の王を打ち破るか，
+	世界を救うことに着手するか，さもなければその両方を達成すべ
+	く励まなければならない．とはいえ，それで不都合はないのだ．
+	その時になれば，あなたもこの手のことがらに熟達しているだろ
+	うし，そもそも，探し求めるものとは，そうした目的を果たすの
+	に役立つよう考案されているのだから．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# pp.163-164, 探索
+ケツアルカトル
+quetzalcoatl
+	アステカ・トルテカの主要な神のひとりは，偉大で賢明なケツア
+	ルカトルである(グアテマラではククマツ，ユカタンではククル
+	カンと呼ばれる)．彼の姿は，羽根のはえた蛇であるが，インディ
+	オ建築においては最古のものと最新のものと，いずれにも見うけ
+	られる．…インディオの神ケツアルカトルがどのようにして「太
+	陽の昇る国」からやってきたかを語る伝説がある．彼は長く白い
+	ローブをまとい，ほおひげをはやしていた．彼は人々に手工業と
+	慣習を教え，優れた法を制定した．彼は帝国をつくり，そこでは
+	トウモロコシの穂が人間と同じ高さにまで成長した．そして彼は
+	色のついた綿の莢が綿の木に実るようにした．しかし何らかの理
+	由で，彼は帝国を去らねばならなかった．…だが，ケツアルカト
+	ルにまつわるすべての伝説は，彼がふたたび帰ってくることを約
+	束したという点は共通している．
+		[ Gods, Graves, and Scholars, by C. W. Ceram ]
+quit*
+	Maltar: (…) アカデミーにきて最初の日にならった諺を思いだ
+	        したよ．
+	Natalie: ええ，知ってる．「勝者は決して中断しないし，中断
+	         した者が勝利することはありえない」ね．
+	Malter: なんだって? 違うよ! 「勝者は決して中断しないし，中
+	        断した者は地獄の炎にぶちこまれるべきだ」ってのさ．
+		[ Snow Day, directed by Chris Koch,
+		  written by Will McRobb and Chris Viscardi ]
+雷神
+雷田
+raijin
+raiden
+	雷神のこと．
+*レンジャー
+ranger
+* ranger
+	「われら荒野の野伏たちは，孤独な人間だ．われらは野伏であり，狩猟
+	　者である―といっても，常にわれらの敵の召使どもを追い求める狩猟
+	　者なのです．と申すのはかれら召使どもはモルドールのみならず，こ
+	　こかしこに見いだされるからです．
+	「ボロミアよ，ゴンドールが堅固な塔であったと申されるなら，われら
+	　はわれらでまた別の役割を果たしてまいった．あなた方の強固な城壁
+	　や輝く剣をもってしても防ぎきれない悪しきものたちがたくさんいる
+	　のです．あなた方はご自分の国境の外の国々のことはほとんどご存知
+	　ない．平和と自由，とあなたはいわれるか？もしわれらの存在がなけ
+	　れば，北の国々もこの二つのものをほとんど知ることがなかったであ
+	　りましょう．恐怖がかれらを滅ぼしたでありましょう．しかし，家な
+	　き無人の山々から，昼なお暗き森林から，暗いものたちがひそかに忍
+	　び出てきても，かれらはわれらを見てたちまち逃げ失せます．もしわ
+	　れらドゥネダインが惰眠をむさぼっていたとしたら，あるいは一人残
+	　らず死に絶えてしまってたとしたら，人はどの道を安心して通ったら
+	　いいのだろうか？平和な国々や，素朴な人々の家々に，夜分どのよう
+	　な安全が保障されているというのだろうか？」
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+		[ 旅の仲間, 評論社, 瀬田貞二訳 ]
+*ネズミ
+rat
+* rat
+	ねずみは尻尾の長い齧歯類である．彼等は攻撃的で雑食で順応性があ
+	り，しばしば病気を運ぶ．
+
+	「あのネズミどもは」とオブライエンは姿の見えない聴衆に向かい，
+	まだ演説しているように続けた．「齧歯動物に属するが肉食である．
+	君も知っての通りだ．この街の貧民街で起こっている事態は君も聞い
+	ていることであろう．或る通りなど，母親は五分間でも，赤ん坊を一
+	人だけ家の中に放って置くことは出来ない．ネズミどもが間違いなく
+	襲うからだ．奴らはあっという間に赤ん坊を骨だけにしてしまう．病
+	人や死にかけている者まで襲うのだ．奴らは人間がいつ無力になるの
+	か，ちゃんと見抜ける程の凄い能力を持っている」
+                [ 1984, by George Orwell ]
+		[ 1984年，新庄哲夫訳，ハヤカワ書房 ]
+ランサー
+ranseur
+#[SLASH'EM 0.0.7E6]
+	パイクから発展したランサーは，細い両刃の主刃を持っている．補助の
+	刃は後ろ向きの鉤状に曲がった突起で，大きい中央の主刃の下に上手に
+	つけられて王冠形を形成している． 
+	武器の突き刺し機能は外見上明白だが，主刃の下のスペースで相手の武
+	器を捕えることもでき，柄をねじればそれか又は補助の刃で圧力をかけ，
+	相手の武器を破壊するか手放させるかする．さらに，補助の刃は相手を
+	離れた所から押さえ込んだり，騎乗する馬から引きずり下ろしたりする
+	事もできる．
+オオガラス
+raven
+	ただしこの大鴉，見事な胸像の上にひっそり据わって，
+	一言を発したのみなのだ
+	    まるでその一語に自分の魂をこめたかのようで
+	それ以上はまったく叫ばず，−−身じろぎもしない−−
+	で，しまいに私の方が呟く．”ほかの鴉たちだって来ては飛び去って
+	    いったのだ，
+	明日はこの鴉も飛び去るだろう−−
+	    ちょうどわが希望の数々が飛び去ったように”
+		すると大鴉は言った，”もう二度と”
+			[ The Raven - Edgar Allan Poe ]
+			[ 対訳 ポー詩集，加島祥造編，岩波文庫 ]
+*指輪
+*ring
+ring of *
+	三つの指輪は，空の下なるエルフの王に，
+	七つの指輪は，岩の館のドワーフの君に，
+	九つは，死すべき運命の人の子に，
+	一つは暗き御座の冥王のために，
+	影横たわるモルドールの国に．
+	一つの指輪は，すべてを統べ
+	一つの指輪は，すべてを見つけ，
+	一つの指輪は，すべてを捕えて，
+	くらやみのなかにつなぎとめる．
+	影横たわるモルドールの国に
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+					   [ 評論社, 瀬田貞二訳 ]
+ローブ
+robe
+	シャツをのぞけば，袖のある唯一の衣類．3つの用途がある．
+	1.  神官，巫女，僧，尼僧(尼僧院を見よ)，魔法使いの公式な装
+	束として．公認表現では，神官と尼僧の長衣は_簡素であり_，巫
+	女の場合には_なびき_，魔法使いであれば_ひるがえる_．かくて，
+	自分がどの相手と対峙しているのか，あなたにはわかるのである．
+	2.  王が着用する．公認表現は，_ずっしりとしたひだが垂れてい
+	る_．
+	3.  砂漠の遊牧民の装いとして． [...]
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# p.170, 長衣
+石
+rock
+	ビルボは，すぐ何かやらなければならない時がきたのを，知りました．
+	あのちくしょうどものところへ，のぼっていくことができませんし，こ
+	ちらから射かける道具もありません．けれどもあたりを見まわしますと，
+	昔の川ぞこだったとみえる，いまはかわいたみぞのなかに，たくさんの
+	石がころがっているのを見つけました．ビルボは，石なげにかけてはた
+	いした名人でした．にぎりやすい，すべらかな卵がたの手ごろな石を見
+	つけるのに，てまはとりませんでした．子どものころ，ビルボは，まと
+	に石をうちあてるれんしゅうをしたものでした．そして，ウサギやリス
+	や，とぶ鳥でさえも，ビルボが石を投げる見たしゅんかんに，はや電光
+	のように逃げていくくらいの腕前になっていました．おとなになってか
+	らでさえ，たっぷり時間をかけて，輪なげや投げ矢や棒なげ，かわらけ
+	投げやボーリングまで，いつもやっていましたし，もっと静かな遊びに
+	も，ねらって投げつけるようなことを，たくさん楽しんだものです．た
+	ばこの煙りの輪をあげること，なぞかけ遊び，それにこれまでお話しす
+	るひまがなった料理などのようなビルボの楽しみに，ものを投げること
+	もはいっていたのです．さて今は，ためらう時ではありません．ビルボ
+	が石をひろっているあいだに，クモはボンブールのところにたどりつき
+	ました．もうすぐ，ボンブールは殺されるでしょう．この時，ビルボは，
+	投げました．石は，クモの頭をうちくだきました．クモはたちまちがく
+	りとして，木から落ち，地にどさとたおれて，ぜんぶの足をちぢめまし
+	た．
+		[ The Hobbit, by J.R.R. Tolkien ]
+		[ホビットの冒険，岩波少年文庫，瀬田貞二訳]
+岩もぐら
+rock mole
+	岩もぐらは齧歯類の一員である．もぐらが地面に穴を掘るように岩に
+	穴を掘る能力から，その名前が付けられた．彼等は，彼等が掘り進ん
+	だ所にあるものすべてを食べてしまうが，どのようにしてそれらを栄
+	養価に変換するのかについては未だ不明である．
+盗賊
+rogue
+* rogue
+	なにやらかすつもりかわかったぜ，ちゃあんと聞いたからな．敏活な
+	耳，機敏な目，敏捷な手，っていうのは巾着切りには必要条件だ．鋭
+	敏な鼻ってやつも前提条件だ，耳や目や手のために仕事を嗅ぎ出さな
+	くちゃならねえからな．今年はどうやら不正直者の当たり年らしいや．
+	....
+	だいたい王子様とあろうおかたが不正を働こうってんだろう，かわいい
+	お荷物をかかえておやじさんの目をかすめて逃げ出そうってんだから．
+	こいつを王様へご注進におよぶのが正直者のやりかただろうが，おれ
+	はそうはしねぇ，かくしとくのが悪党にふさわしいとなりゃぁ，そう
+	するほうがおれの職業に忠実ってわけだから．
+		[ Autolycus the Rogue, from The Winter's Tale by
+			  William Shakespeare ]
+		[ 「冬物語」よりごろつきのオートリカス，
+			白水ブックス，小田島尾訳 ]
+ロゼ
+rothe
+	ロゼは，光を嫌うジャコウウシに似た生物である．地衣類や苔の生え
+	ている地下で生活する方を好む．
+ロイヤルゼリー
+*royal jelly
+	「『ロイヤルゼリーは…』」彼は声に出して読んだ．「『おそろしく
+	滋養強壮に富む物質で，これだけを日常に摂取するだけで，ミツバチの
+	幼虫は5日間で体重が1500倍にも増えます！』」
+
+	「何倍ですって？」
+
+	「1500倍だよ，Mabel．これを人間に当てはめたらどうなるか分かる
+	かい？つまり…」彼は声を落とし，身を乗り出して，小さな青白い目で
+	彼女を見据え，「つまり，5日間で7ポンド半の赤ん坊が5トンになるって
+	ことだよ！」
+		[ Royal Jelly, by Roald Dahl ]
+*ルッゴ*
+ノームの王?
+Ruggo
+?nome king
+#[SLASH'EM 0.0.7E6]
+	The Nome King declared, "Cruelty is a thing I can't abide. So, 
+	as slaves must work hard, and the Queen of Ev and her children 
+	were delicate and tender, I transformed them all into articles of 
+	ornament and bric-a-brac and scattered them around the various 
+	rooms of my palace. Instead of being obliged to labor, they 
+	merely decorate my apartments, and I really think I have treated 
+	them with great kindness." 
+		[ Ozma of Oz, by L. Frank Baum ]
+錆の怪物
+rust monster
+	この奇妙な生き物は金属を食べる．こいつらは鎧を瞬く間に錆だら
+	けの鉄クズにしてしまう．
+*サーベル
+*saber
+*sabre
+	抜けバ玉ちるやいバをバ　皆もろ共に振あげて
+	きら／＼／＼と輝けり　敵陣近く乗り掛けて
+	大砲方をなで切りす　最と目冷しき働きぞ
+	煙の中に飛込みて　烈しく陣を破るなり
+	太刀の早業見ごとなり　敵の軍勢たぢ／＼と
+	遂にさゝふる事ならず　むら／＼ばつとむらくづれ
+	馬の頭ぞ立直す　以前に進みし六百騎
+	残るハいとゞわづかなり
+		[ The Charge of the Light Brigade,
+		  by Alfred, Lord Tennyson ]
+		[ テニソン氏軽騎隊進撃ノ詩 ]
+		[ 新体詩抄, 特選名著復刻全集, 近代文学館 ]
+鞍
+saddle
+	騎手は馬に仕え
+	牛飼いは牛に仕え
+	商人は財布に仕え
+	食事者は自分の食事に仕える
+	それが動産の時代
+	おりなすべき織物，刈りとるべき穀物，
+	万事は鞍の上にあり
+	人はそれに乗る
+		[ Ode, by Ralph Waldo Emerson ]
+酒
+sake
+	日本の醸造酒．
+サラマンダー
+salamander
+	何百年も昔，サラマンダーは魔法であると多くの人々は信じていた．
+	中世のイギリスでは，炎はサラマンダーによって起こされると考えら
+	れた．彼等が湿った丸太に火をつけると，何十ものほっそりした生物
+	がちょこちょこ出てきた．サラマンダーという単語は実際「炎の動物」
+	という意味のギリシャ語の単語からきている．
+		[ Salamanders, by Cherie Winner ]
+samurai
+* samurai
+侍
+	そのときには奈良原が大剣をひねりあげて地を蹴り，駆けながら肩衣を
+	はねあげていた．
+	  奈良原が，二尺五寸藤原忠広をもって馬上の異人の左胴から腹にかけ
+	て斬りさげていたのは，それから一分もたたぬのちである．この男はは
+	み出てくる腸をおさえながら逃げ，十丁ほどむこうの松の根方にころげ
+	落ち，海江田武次にトドメをさされた．他の二人もそれぞれ一刀を浴び
+	て遁走し，女ひとりだけはたすかった．
+		[ The Fox-horse, from Drunk as a Lord, by Ryotaro Shiba ]
+		[ きつね馬, 酔って候, 司馬遼太郎, 文芸春秋 ]
+# 酔って候, 司馬遼太郎, 文芸春秋, 1965, p.186-187
+サンデスティン
+sandestin
+	Ildefonseはテラスをはなれた．ほぼ同時に口論する声が仕事場
+	のほうから聞こえた．Ildefonseはほどなくにテラスにもどった．
+	Osherlと2匹目のサンデスティンがついていった．それはやせ衰
+	えた青い鳥に似た生物の外見を用い，6フィートほどの高さがあっ
+	た．Ildefonseは厳しい調子で言った．「あのふたつの生き物を
+	見よ!  やつらは，私やおまえがテーブルのまわりを歩くのと同
+	じくらい簡単にクロノプレックスをうろつくことができる．それ
+	だけでなく，到着したときにそれを知らせるウィットさえもって
+	いる．私は閃電岩の中で眠っていたOsherlと，たるきに止まって
+	いたSarsemを見つけたのだ」
+	…
+	「問題ない」Rhialtoがいった．「彼はSarsemをもたらした．そ
+	してこれが彼の要求だ．概しては，Osharl，おまえはよくやった!」
+
+	「では私の契約点は?」
+
+	「Sarsemの証言におおいに依存するな．Sarsem，座るかね?」
+
+	「この姿では，立っているほうが便利だと思います」
+
+	「では，人間の姿に変化し，我々とともにテーブルでくつろがな
+	いかね?」
+
+	「いいですね」 Sarsemは，ラベンダー色のうろこと，背中に伸
+	びたポンポンのような紫の髪のふくらみをもつ，裸の若い両性具
+	有者になった．彼はテーブルの前に座ったが，飲み物は断わった．
+	「この人間の姿は，典型的ではありますが，結局のところ，みせ
+	かけにすぎません．もしこのようなものを私の内部にとりこむよ
+	うなことになれば，さぞ不安になることでしょう」
+		[ Rhialto the Marvellous, by Jack Vance ]
+サスカッチ
+sasquatch
+	サスカッチという名は，カナダでは1930年代までたいして有名で
+	はなかった．そのときブリティッシュコロンビア人の作家J.W.バー
+	ンズの作品にあらわれたのである．彼は自分の物語にインディア
+	ンの伝承をたくさん用いた．バーンズのサスカッチは，荒野に住
+	む巨大なインディアンであった．彼は毛深いがそれは頭髪が長い
+	というだけであったし，このサスカッチは野生的で原始的な生活
+	を送っていたとはいえ，完全な人間であった．バーンズのサスカッ
+	チはきわめて普及しているとわかった．ハリソンの町の近くには
+	「サスカッチ宿」があった．ブリティッシュコロンビア州とハリ
+	ソンには，「サスカッチの日」という地方の祝典さえあった．長
+	年のあいだ休止されていたこの祝典は，ブリティッシュコロンビ
+	ア州の百年祭の一部として復活し，イベントのひとつは「サスカッ
+	チ狩り」となる予定であった．その狩りはいちども行なわれなかっ
+	た．おそらく想像だにされなかったことであろうが，それに関す
+	る公表は，サスカッチに出会ったと主張する人々を大勢もたらし
+	た．バーンズの巨大なインディアンではなく，我々がみな知るこ
+	とになった毛深い猿に似た生物である．
+		[ The Encyclopedia of Monsters, by Daniel Cohen ]
+権力の笏
+*sceptre of might
+	この棍棒は大昔に名もない洞窟で作られ，洞窟の住人により何代もの
+	間受けつがれてきたものである．これは実に強力な棍棒である．さら
+	に言えば，それを持つものは誰でも魔法の矢の攻撃から守られる．
+	能力を使うと，回りを煽動することができる．
+シミター
+scimitar
+	　おお！そのときの父の姿，雨と降る弾丸のなかに，半月刀をかざし，
+	焔硝に黒くなった顔をして立っていたアリ・テブランの姿，それは，な
+	んとりっぱに，なんと大きく見えたことでございましょう！敵は，先を
+	あらそって逃げ出したことでした！
+		[ The Count of Monte Cristo, by Alexandre Dumas ]
+		[ モンテ・クリスト伯, 山内義雄訳, 岩波文庫 ]
+
+# p279 岩波文庫 ,アレクサンドル・デュマ, 山内義雄訳
+サソリ
+scorpio*
+	蜘蛛の亜種(学名: Scorpionidae)，サソリは低く長い体，先細い毒の
+	あるトゲのついた尻尾を持つことで見わけることができる．サソリ
+	は合計8本の足とはさみを持つ．
+		[ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+大蠍
+scorpius
+	古くより蠍座は死，暗闇，邪悪を象徴してきた．蠍座は狩人オリ
+	オンの殺害者だといわれている．…神々は蠍と狩人をともに星座
+	にしたが， たがいに二度と争わないように，天球の反対側に置
+	いたのである．蠍座が東の空に昇ると，オリオン座は西へと沈む
+	のだ．
+		[ 365 Starry Nights, by Chet Raymo ]
+*巻物
+*scroll
+scroll *
+	そこでわたしは  限りない熱涙と  限りない呻吟とで，
+	大波をうつむきになって見ていると，
+	足もとに  ひとりの老人の手が現われて，
+	この巻物と  またこの同じ細い杖とを  握りしめていた．
+	わたしは苦痛の中にひざまずき――手をのばし――この宝物を
+	つかみ――こぶしに触れ――また離れ――
+	指をとらえた．だが  さがる重みに
+	圧倒され――沈んで行った．それから  嵐は衰えはじめ，
+	冷たい瘧(おこり)のような暗がりを通して
+	心地よい太陽が射し込んできた．わたしは懸命になって
+	その書物を求め，温かい大気のなかで
+	念入りに  その濡れた紙をはがした．
+	それには不思議なことが書かれていて，わたしの心を
+	頁から頁へ惹きつけ，やがて  ほとんど
+	没我の境にはまり込んだ．そのとき  茫然として，
+	わたしはこれらの言葉を読み，読み返し，
+	さらに天空にまなこを上げ，再び読み返した．
+		[ Endymion, by John Keats ]
+		[ エンディミオン 物語詩, 出口保天訳, キーツ全詩集, 白凰社 ]
+# キーツ全詩集 第一巻, 出口保天訳, エンディミオン 物語詩 巻三, 白凰社,
+# 1974, p.326
+影
+shad*
+	影は不死の生物である．ゾンビが不死の動く死体であるのに対し
+	影は黒魔法により作られた魔法的に不死の生き物であると言う違い
+	がある．
+呪術師カルノフ
+呪術師『カルノフ』
+shaman karnov
+	彼の住みかである太古の洞窟を作った呪術師カルノフは絶え間なく
+	ティアマットの使いの攻撃からネアンデルタール人を守ろうとして
+	いる．
+山雷精
+shan*lai*ching
+	中国の山と海の神，また古い書の名前(山海経とも)．怪物クンクンを
+	使わし4代皇帝，尭から力を奪取しようとした．
+		[ Spectrum Atlas van de Mythologie ]
+サメ
+shark
+	鮫が動くとき，暗い上部は事実上，光をまったく反射しなかった．
+	肌の歯状突起は，鮫が大きな尾を鎌のように左右にないでうみだ
+	す力によって上昇するとき，その動きで生ずるシューッという音
+	を消した．魚は水面へむかって急上昇した．
+	Charles Bruderは海の動きにわずかに吸いこむような引きを感じ
+	たが，それはとおりすぎる水流，または波の引っぱり，引き波が
+	彼をくすぐっているのだと思った．彼は，それほど深くもない下
+	方の，かすかな吸いこまれる水流の音を聞くことができなかった．
+	彼は，深淵から驚くべきスピードで突進してきているものを，強
+	力な初撃のために，大きく，広く，開かれた鮫のあごを，見るこ
+	とも聞くこともできなかった．それは他のどんな生物もなしえな
+	い伝統的な攻撃，深みからの爆弾であった．
+		[ Close to Shore, by Michael Capuzzo ]
+刺刀
+shito
+	日本の，刺すためのナイフ．
+#*ショゴ太くん
+#*ショゴ音ちん
+*ショゴス
+*shoggoth
+*shuggoth
+#[SLASH'EM 0.0.7E6]
+	"... in the place of utter blasphemy, the unholy pit where 
+	the black realm begins and the watcher guards the gate - 
+	I saw a shoggoth - it changed shape ..."
+		[ The Thing on the Doorstep, by H.P. Lovecraft ]
+
+	どんな地下鉄の列車よりもはるかに巨大で恐ろしい，筆舌につくしがた
+	いものだった―原形質の泡の無定形の塊が，自らかすかに輝き，わたし
+	たちに向かいあう，トンネルを満たす前部のいたるところに，緑がかっ
+	た光を放つ疣のような何万もの一時的な目を形成したり消したりしなが
+	ら，あわてふためくペンギンたちを押しつぶし，同類とともに邪悪にも
+	すべてをとりさったなめらかな床をずるずるすべってきたのだった．な
+	おも不気味な嘲笑うような声，「テケリ・リ！　テケリ・リ！」が聞こ
+	え，わたしたちはここにきてようやく，悪魔めいたショゴス―＜旧支配
+	者＞によってのみ生命や思考や可塑的な器官を与えられ，．．．
+		[ At the Mountains of Madness, by H.P. Lovecraft ]
+	[ 狂気の山脈にて, ラヴクラフト全集4, 大瀧啓裕訳, 創元推理文庫 ]
+シュリーカー
+shrieker
+	猛烈な槍の一撃で，女戦士はきのこを突き刺し，沈黙させた．し
+	かし，もはや遅かった．警報はすでに出されていた．…
+	突然彼らの前に巨大な暗い物体が奥底からそびえたち，悪臭をは
+	なつ巨体をあらわした．その怪物は巨大な黒いワームの一種であっ
+	たが，彼らが確実にわかったのはそれがほぼすべてだった．
+		[ The Adventurers, Epic IV, by Thomas A. Miller ]
+銀
+silver
+#[SLASH'EM 0.0.7E6]
+	非常に展性があり可鍛性も高く，磨く事により光沢を放ち，優れた
+	電気・熱の伝導性をもつ，白く価値の高い金属元素である．
+	化学記号Ag，原子番号47，原子量107.880．
+	[ Webster's New Twentieth Century Dictionary Unabridged,
+		Second Edition]
+骸骨
+skeleton
+	骸骨は魔法で動く不死の生物である．影とは違い単なる人間型の骨格
+	から作られた生き物である．誰もこれがなぜ真実なのかは知らないが
+	暗黒技術の医師達間で受けいれられた事実になっている．
+スラッシャー
+傷だらけ
+slasher
+	「この犬の飼主は開拓者の一人で，砦から数マイル南の河岸に小屋を
+	造ろうとしていた男だ」コナンが暗い顔つきで説明した． ...
+	「砦へ連れもどって，傷の手当をしてやったが，元気をとりもどすと，
+	森へはいって，野犬になってしまった----おお，どうした，傷だらけ！
+	いまでもおまえ，主人を殺したやつらを狙っているのか？」 ...
+	「いっしょに連れていこう」コナンは低い声でいった．「蛮人どもが
+	ひそんでいたら，こいつが先に嗅ぎつけてくれるはずだ」
+	...
+	犬は，丸太の山を躍り越え，茂みのなかへ跳びこんでいった．そして
+	そのあたりを激しくざわめかしたあと，犬は口から血をしたたらせて，
+	バルトゥスのかたわらへもどってきた．
+	...
+	「あの若者はりっぱな男だった」コナンがいった．「おれはこの酒を
+	あの若者の霊に捧げる．そして，怖れを知らぬ勇敢な犬のためにも！」
+	といいながら，酒杯の半ばを一気に飲み，残りを床にぶちまけ，その
+	あと酒杯を叩き割った．異教のならわしにもとづく奇妙な哀悼の表現
+	だった．「彼のために，ピクトのやつらの首を十個斬りとってやる．
+	犬のためにも七つは斬ってやろう．畜生ではあるが，どんな人間より
+	もりっぱな戦士だった」
+		[ Conan The Warrior, by Robert E Howard ]
+		[ コナンと古代王国の秘宝, 宇野利泰訳, 創元推理文庫 ]
+変形菌
+ねばねばカビ
+slime mold
+	変形菌，変形カビ(ゲームではねばねばカビ)．通常は菌類に分類され
+	る有機体だが，原生動物との類似点もある．ねばねばカビは動物のよ
+	うに食物を摂取し成長しながら自律運動をもつ時期と，植物のように
+	不動で生殖する時期の複雑なライフサイクルを持つ．自律運動の時期
+	には一般に腐った丸太の下や湿めった葉の下で見つけることができる．
+	それは，普通，単一のアメーバのような細胞であったり，アメーバの
+	ようにはびこり運動する明るく色どられた変形体と呼ばれる原形質の
+	多核集団である．
+		[ The Concise Columbia Encyclopedia ]
+スリング
+sling
+	そのペリシテびとが立ちあがり，近づいてきてダビデに立ち向か
+	ったので，ダビデは急ぎ戦線に走り出て，ペリシテびとに立ち向か
+	った．ダビデは手を袋に入れて，その中から一つの石を取り，石投げ
+	で投げて，ペリシテびとの額を撃ったので，石はその額に突き入り，
+	うつむきに地に倒れた．
+	こうしてダビデは石投げと石をもってペリシテびとに勝ち，ペリシ
+	テびとを撃って，これを殺した．ダビデの手につるぎがなかったので，
+	     [ サムエル記上，17:48-50，口語訳聖書，日本聖書協会 ] 
+スマウグ
+『スマウグ』
+smaug
+#[SLASH'EM 0.0.7E6]
+	そこに，スマウグが寝ていました．大きな赤金色の竜は，ぐっすり眠っ
+	ていました．ごうごういう音が口と鼻からふき出し，煙がぽっぽっと
+	流れ出ていますが，火は，眠っているあいだ弱まっています．大きな
+	からだの下にも，手足の下にも，とぐろを巻いた長い尻尾の下にも，
+	さらに竜のまわり一ったいにも，暗くて見えない床の方まで四方八方
+	に，宝石類の山が無数にかさなり，それらのめずらしい石や宝石，細
+	工した金や純金や銀の山づみのむれがみな，赤い光に赤くそまってい
+	ます．
+		[The Hobbit by J.R.R. Tolkien]
+		[ホビットの冒険，岩波少年文庫，瀬田貞二訳]
+*蛇
+*ヘビ
+*snake
+serpent
+water moccasin
+python
+pit viper
+	さて，主なる神が造られた野の生き物のうちで，へびが最も狡猾であ
+	った．へびは女に言った，「園のうちにあるどの木からも取って食べ
+	るなと，ほんとうに神が言われたのですか」．女はへびに言った．「
+	わたしたちは園の木の実を食べることは許されていますが，ただ園の
+	中央にある木の実については，これを取って食べるな，これに触れる
+	な，死んではいけないからと，神は言われました」．へびは女に言っ
+	た．「あなたがたは決して死ぬことはないでしょう．それを食べると，
+	あなたがたの目が開け，神のように善悪を知る者となることを，神は
+	知っておられるのです」．女がその木を見ると，それは食べるに良く，
+	目には美しく，賢くなるには好ましいと思われたから，その実を取っ
+	て食べ，また共にいた夫にも与えたので，彼も食べた．
+	....
+	そこで主なる神は女に言われた．「あなたは．なんということをした
+	のです」．女は答えた，「へびがわたしをだましたのです．それでわ
+	たしは食べました」．主なる神はへびに言われた．
+	「おまえは，この事を，したので，
+	すべての家畜，野のすべての獣のうち，
+	最ものろわれる．
+	おまえは腹で，這いあるき，
+	一生，ちりを食べるであろう．
+	わたしは恨みをおく，
+	おまえと女のあいだに，
+	おまえのすえと女のすえとの間に．
+	彼はおまえのかしらを砕き，
+	おまえは彼のかかとを砕くであろう」．
+		[ 創世記  3:1-6,13-15， 口語訳聖書，日本聖書協会 ]
+スニッカーズニー
+snickersnee
+	ああ，忘れまいぞ，
+		そが叫びし叫びを，
+	我は歯をきしらせるや，
+		すらりと抜けり，わが太刀を！
+	-- 秩父の守，狐々
+		[ ミカド, Sir W.S. Gilbert ]
+倉庫番
+sokoban
+	倉庫番はプレイヤーが荷物をゴールエリアに押して運ぶゲームである．
+	1982年にシンキングラビット社から第一作が発売され，以来，多くのプ
+	ラットフォームに移植されている．
+		[ Xsokoban web site ]
+兵士
+下士官
+副官
+指揮官
+*soldier
+sergeant
+lieutenant
+captain
+	イェンダーの兵士達は戦いの技についてよく訓練されており，そのう
+	ちの多くは魔法使い直々に訓練されている．ある者が言うには，兵士
+	は不幸にして捕らえられ，魔法使いの呪文により配下におかれている
+	冒険者であるそうだ．兵士らに会って生き延びたものが言うには，彼
+	らは小隊毎に行動する気性の荒い戦士である．しかしながら，彼らの
+	戦闘用の装具の重さのため，普通は彼らから逃げ切ることができ，そ
+	うすることは賢いことだと考えられている．
+*槍
+ジャベリン
+*spear
+javelin
+	−−で，えらく遮二無二ぶつかり合う．そうして，槍がパッと折れた
+	かと思うと，一方は楯を割り，他方は馬もろとも崩れ落ち，馬の尻尾
+	からふっ飛んで首をへし折る，てなことになる．つづいてお次の志願
+	者が遮二無二に登場，ご自分の槍を折り，相手方が楯を割ってくださ
+	るので，こっちは馬もろとも崩れ落ちて馬の尻尾からふっ飛び，ごて
+	いねいに首までへし折る．するとこんどはまたべつのが選ばれ，また
+	もう一人，またもう一人，さらにまたもう一人というぐあいに続き，
+	とうとう手持ちの駒はすっかり使い果たしてしまい，さあ，いよいよ
+	成績を算出するという段になると，どれが誰やらさっぱり区別がつか
+	ず，誰が勝ちなのかもわからない始末だ．かといって，血湧き肉躍る
+	疾風怒涛のことき戦闘の図として描こうにも，フン！バカバカしい．
+	そんなの，色は希薄で音も立たずだ−−霧ん中で掴み合いをしてる幽
+	霊でしかねえや，ヤレヤレ，こんな貧弱な言葉数でもって，この上な
+	く強烈な光景でも扱ったりしたら，どういうことになるのかね？−−
+	たとえばのはなし，ネロ時代のローマ炎上なんてのは？いやはや，ま
+	ずこんなふうに言うだけだろうよ−『町は焼け落ちたり，保険金ゼロ，
+	男の子が窓を突き破り，消防士は首を折れり』とね．ああ，そんなの
+	では恥ずかしくって絵にもならんじゃないかな！
+		[ A Connecticut Yankee in King Arthur's Court, by Mark
+		  Twain ]
+		[ 龍口直太郎訳，創元推理文庫 ]
+魔法
+spell
+#[SLASH'EM 0.0.7E6]
+	A spell is a consciously directed act of magic which may take
+	almost any form, depending on the laws of magic in operation.
+	Commonly there will be a spoken element, ranging from a simple 
+	phrase or name to elaborately complex ritual incantations. 
+	[...]  Hand-gestures or passes may be required -- called 
+	the "somatic element" by the scientific magic investigators 
+	in L. Sprague de Camp's and Fletcher Pratt's _Incomplete
+	Enchanter_ series.
+	Many spells exhaust the caster, like Gorice's arduous conjuration
+	in _The Worm Ouroboros_ (1922) by E. R. Eddison.  Jack Vance's 
+	_The Dying Earth_ (1950) has spells which must be painstakingly 
+	impressed on the mind (whose capacity is finite), and when cast 
+	are gone until re-learned.  
+		[ The Encyclopedia of Fantasy by David Langford ]
+魔法書
+*spellbook*
+	ふと，テーブルに目をやると，すぐそばに<時の書>があった．タラン
+	は今まで，自分でその本を読んだことがなかった．タランはダルベン
+	が一部分しか話してくれなかったことが，この本の中にはもっと書い
+	てあるにちがいないと思った．ダルベンは，ずっともの思いをつづけ
+	ていて，頭をあげる様子はなかった．タランは立ち上がると，明るい
+	日光がいっぱいのへやの中を，テーブルに近づいた．一ぴきのカブト
+	ムシがたてる，キチキチというものうい音が，森から聞こえてきた．
+	タランは，両手を本の上にのせた．しかし，すぐに，いたみを感じて，
+	あっ，といいながら急いで手をひいた．両手とも，クマンバチにささ
+	れたように，指がぴりぴりいたかった．タランは，ひょいととんで後
+	ろにさがったが，そのとたん，長いすにぶつかって床にたおれた．そ
+	して，しょげかえって，指を口に入れた．
+	ダルベンがまばたきした．タランをうかがって，のんびりあくびをし
+	てから，いった．「コルのところへ行って，ぬり薬をもらうがよい．
+	そうせぬと，おそらく火ぶくれになる．」
+		[ The Book of Three, by Lloyd Alexander ]
+		[ タランと角の王, 神宮輝夫訳, 評論社 ]
+~多相グモ
+*グモ
+giant spider
+#[SLASH'EM 0.0.7E6]
+*蜘蛛
+*spider
+	獲物を捕えるための網を張ることができる8本足の生物．
+
+	「君，ハエ食べるの？」と，ウィルバーがたまげていいました．
+	「もちろんよ，ハエでも，子虫でも，バッタでも，上等なカブト虫でも，
+	ガでも，チョウチョウでも，味のいいアブラ虫でも，ブヨでも，小さい
+	カでも，大きいカでも，カトンボでも，ムカデでも，コオロギでも，お
+	よそ，わたしのあみにひっかかるようなだらしのないものは，何でも，
+	食べるのよ，わたしだって，生きていかなければなりませんものね，そ
+	うでしょう？」
+	「そりゃ，そうですとも」ウィルバーはそういって，また，つづけてき
+	きました．
+		[ Charlotte's Web, by E.B. White ]
+		[ シャーロットのおくりもの, 鈴木哲子訳, 法政大学出版局 ]
+*シェロブ*
+shelob
+#[SLASH'EM 0.0.7E6]
+	．．．かの女は大きな触覚を持ち，短い軸のような首の後ろにはとて
+	つもなく巨大な盛り上がった体がありました．それはふくらんだ大き
+	な袋のようにその脚の間にたわんで揺れていました．その大きな胴体
+	は黒く，青白いあざがまだらについていましたが，節のある大きな関
+	節はその背中より高いところにあり，鋼のとげのように突き出た毛が
+	生えていて，それぞれの脚の先には鉤爪がありました．
+		[ The Two Towers, by J.R.R. Tolkien ]
+		[二つの塔, 瀬田貞二，田中明子訳, 評論社]
+*胞子
+*spore
+*sphere
+	死にたがっている者の攻撃，それは完全な防御で備えることので
+	きない攻撃だ．
+					 -人間のアフォリズム
+		[ The Dosadi Experiment, by Frank Herbert ]
+~*こん棒
+~ひっかけ棒
+*棒
+~*aesculapius
+*staff
+	　かくてふたりは，指のはばほどもあとへひくことなく，一時間あまり
+	も，打ったり打たれたりのすさまじい戦いをつづけた．ふたりのからだ
+	は，どこもかしこも，きずだらけこぶだらけになった．それでもどっち
+	も「参った！」と叫ぶようすがなかった．ときどきふたりは，打つのを
+	やめて休んだ．そして，おたがいに腹のなかで，「おれは，こんなに強
+	い六尺棒の使い手にぶつかったのは，生まれてはじめてだぞ．」と舌を
+	まいておどろいた．
+	　ついにロビンは，男のあばら骨をしたたかなぐりつけた．男の上着か
+	ら，ちょうどお日様にてらされた雨あがりの藁屋根のように，水煙がた
+	ちのぼったほどだった．このために，男はもう，あと，髪の毛一本のち
+	がいで，川の中へ落ちこむところだった．けれども男はすばやく立ちな
+	おると，目にもとまらぬ一打ちを，ロビンの頭にくらわせたので，ロビ
+	ンの頭からは，血がふき出した．
+	　ロビンは気もくるわんばかりに怒り，死にものぐるいで，相手に打ち
+	かかっていった．だがその男は，よくこれをふせいで，もう一つロビン
+	にしたたかくらわしたので，さすがのロビンも，ついに水の中へまっさ
+	かさまに落ちて行った．
+	　[ロビンフッドの愉快な冒険　村山知義・村山亜土訳　岩波書店]
+		[ The Merry Adventures of Robin Hood, by Howard Pyle ]
+アエスキュラピスの杖
+*staff of aesculapius
+	この杖は全ての薬師に神聖なものと考えられている．なぜなら，生と
+	死をつかさどる力を持っているからである．手にすると，それはエナ
+	ジードレインから持ち主を守り，さらに持ち主に回復力を与える．能力
+	を使うと魔力が回復する．
+階段
+stair*
+	マイロは階段をのぼっていきました．最初は，すごく速く―それから，
+	ちょっとゆっくりと―それからもう少しすぎると，もっとゆっくりと―
+	そして，そのおわりのない階段を何分ものぼったころには，とうとう，
+	足がほとんどあがらなくなってしまいました．マイロはふと気がつきま
+	した．こんなにいっしょうけんめいのぼってるのに，なかなか着かない
+	なあ．それに，階段の下がまだあんな近くだよ．それでも，もうしばら
+	くがんばってのぼりつづけました．でも，とうとう最後にはへとへとに
+	なって，階段のとちゅうでたおれこんでしまいました．
+	「くるんじゃなかった」
+	マイロはぶつぶついいました．そして，棒のようになってしまった両足
+	をなげだして，はあはああらい息をつきました．
+	「これ，どこまでもつづいているんだもの．これじゃ，無限の国になん
+	かつけっこないよ」
+	「どっちみち，いいところじゃないよ」
+	だれかが，やさしい声でいいました．
+	「無限の国って，すごくつかれるところだよ．おわりがないからね」
+		[ The Phantom Tollbooth, by Norton Juster ]
+		[ マイロのふしぎな冒険, 斉藤健一訳, PHP創作シリーズ ]
+
+星の精
+star vampire
+#[SLASH'EM 0.0.7E6]
+	星の向こうからきた存在である．目に見えないそれは，何かを食して
+	その生命力と血を吸い取り姿を見せるまで，宙を漂っている．食した
+	直後は，それらは一時的に目に見えるようになり，その非常に恐ろし
+	い姿は人間を狂気に陥れることができると言われている．
+*像
+~statue trap
+statue*
+	そのうちにとうとう，そのライオンがじっと動かないのを，ふしぎに
+	思いはじめました．ライオンははじめに見かけてから１ミリも動かな
+	いのです．エドマンドはできるだけ片陰から出ないようにしながら，
+	思い切ってすこし近よってみました．そして，ライオンの立っている
+	向きからいって，かれのほうはぜんぜん見えないことがわかりました．
+	(「でも，もし首をこっちへむけたら，どうしよう？」と，エドマンド
+	は考えました．) ライオンは，何かをじっとねらってました．そして
+	そこに，１メートルくらいはなれたところに，背中をむけた小さい小
+	人がひとり立っていました．「やあ！　では，あの小人にとびかかる
+	とたんに，にげだせるぞ．」とエドマンドは思いました．けれども，
+	やっぱりライオンは動きませんし，小人も動きません．そのうちに，
+	とうとうエドマンドは，白い魔女がひとびとを石にする話をきいたの
+	を思い出しました．きっとこれは，石のライオンなんだ――そう思っ
+	たひょうしに，エドマンドはライオンの背中にも頭の上にも雪がつも
+	っていることに気がつきました．ではもちろん，ただの立像にちがい
+	ない！
+		[ The Lion, the Witch and the Wardrobe by C.S. Lewis ]
+		[ ライオンと魔女, 瀬田貞二訳, 岩波少年文庫 ]
+スティング
+つらぬき丸
+sting
+	いつものように，森の一日のうす暗いあけ方の光があたりをぼおっ
+	とそめるころ，ビルボはようやく正気づきました．クモは，ビルボ
+	のすぐそばにたおれて死んでいて，剣のぬきみ真っ黒な血がこびり
+	ついていました．ともかく，とほうもない大グモを殺したのです！
+	それもやみのなかで，たったひとりで，です！魔法使いの力をかり
+	たのでもなければ，ドワーフたちのかせいでもありません．これが，
+	わがバギンズ君をたらりと変えるみなもとになりました．ビルボは
+	いま，ちがったひとになりかわった気がしました．胃ぶくろだけは
+	からっぽですのに，勇気りんりん，みなぎる熱気を感じながら，剣
+	を草葉でぬぐって，さやにおさめました．
+	「おまえに名まえをつけてやろう！よし，つらぬき丸とよぼう」
+	とビルボは剣にいいました．
+		[ The Hobbit, by J.R.R. Tolkien ]
+		[ホビットの冒険，岩波少年文庫，瀬田貞二訳]
+ストームブリンガー
+stormbringer
+        彼方にざわめきがきこえる．この名もなく，時もない海のたてる音に
+        そぐわぬ響きだった．遙か彼方ではあったが，苦悩に満ち，世にもお
+        そろしい細い音だった−−だが船はあたかもひきよせられるように，
+        その音を追っていた．音はしだいに高まる−−苦痛と絶望と，そして
+        何にも増して恐怖に彩られた音は．
+        古きメルニボネ帝国の名残りの全統治権をすてて逃げ出す前，エルリッ
+        クは，従弟イイルクーンが皮肉にも″快楽の部屋″と名づけた場所か
+        ら，このような響きがきこえてきたことを思った．それは魂そのもの
+        が逃げ場を失った者たちの声，その者には死が単なる消滅ではなく，
+        永遠に，ある残忍なこの世のものならぬ主人の軛のもとにおかれ続け
+        ることであるような，そんな者たちの声だった．エルリックは，かれ
+        の救済であり，宿命でもある黒い大剣ストームブリンガーが，ひとの
+        魂をのみほすとき，犠牲者らが同じ声で叫ぶのをきいたことがあった．
+		[ The Lands Beyond the World, by Michael Moorcock ]
+                [ この世の彼方の海，井辻朱美訳，早川書房 ]
+
+#[SLASH'EM 0.0.7E6]
+	Without thinking, he drew Stormbringer from its sheath.
+	The Black Sword began to howl and the familiar black radiance
+	spilled from it.  The runes carved into its blade pulsed a vivid
+	scarlet which slowly turned to a deep purple and then to black
+	once more.
+	The creatures were wading through the water on their
+	stiltlike legs and paused when they saw the sword, glancing at
+	one another.  And they were not the only ones unnerved by the
+	sight, for Duke Avan and his men paled too.
+	'Gods!' yelled Duke Avan.  'I know not which I prefer
+	the look of - those who attack us or that which defends us!'
+	'Stay well away from that sword,' Smiorgan warned.
+	'It has the habit of killing more than its master chooses.'"
+		[ The Sailor On the Seas of Fate, by Michael Moorcock ]
+
+	The Pan Tangian strove to imitate Elric's irony.  
+	'But you will note, Sir Demon, that we outnumber you.  
+	Considerably.'
+	Softly the albino spoke: 'I've noticed that fact, but I'm not 
+	disturbed by it,' and he had drawn the black blade even as he
+	finished speaking, for they had come at him with a rush.
+	The Pan Tangian was the first to die, sliced through the
+	side, his vertebrae sheared, and Stormbringer, having taken its
+	first soul, began to sing.
+	A Chalalite died next, leaping with stabbing javelin
+	poised, on the point of the runesword, and Stormbringer murmured
+	with pleasure.
+	But it was not until it had sliced the head clean off a
+	Filkharian pike-master that the sword began to croon and come
+	fully to life, black fire flickering up and down its length, its
+	strange runes glowing."
+		[ The Sailor On the Seas of Fate, by Michael Moorcock ]
+須佐之男
+susano*o
+	神道の混沌と天気の神，太陽神天照大神の弟，最初の神，伊邪那岐命
+	の，鼻から生まれ，物理的，物質的な世界の象徴．天から追放され，
+	地上に居を構える．
+		[ Encyclopedia of Gods, by Michael Jordan ]
+短甲
+tanko
+	大和時代(西暦300年から710年)の侍の鋼鉄の鎧．
+天狗
+tengu
+	天狗は日本の神話で最もやっかいな生き物である．半鳥半人，紅い
+	尖った鼻とらんらんと光る目を持つ．天狗は家同士の不和を煽りた
+	て，長びかせることで悪名高かった．実は，好戦的な天狗が人間に
+	初めて武器の使い方を教えたとも云われる．
+	[ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ]
+トーリン
+thorin
+#[SLASH'EM 0.0.7E6]
+	Known as 'Thorin Oakenshield' because in the Battle of Azanulbizar
+	he used an oak-branch as a shield and club.  He is the King of
+	Durin's folk in exile, and wears a golden necklace and a belt.
+トート
+thoth
+	エジプトの月と智恵の神．トートは法律および科学，医学，幾何学を
+	含む知識の象徴であり，象形文字の書き方を人間に教えたと言われて
+	いる．彼は神々の調停者や相談役として重要であり，ヘリオポリス
+	エネード(太陽都市エネード？)神殿の書記である．神話によれば，彼
+	はセト神の頭から生まれた．彼はトキの頭を持った人間として描かれ
+	たり，完全なトキとして描かれたり，ときには胴に羽を覆った座った
+	ヒヒとして描かれている．彼は月の円板の上に載った三日月からなる
+	王冠を持っている．
+	トートは一般に温和の象徴とされておいる．彼はまた実直に公平な
+	来世へ向かう魂の記録を記載する責任者であるだけでなく２つの真理
+	の館(？)の審判でもある．ピラミッドの文書はトートに反対する者の
+	首を切り，心臓をもぎとると言う彼の野蛮な側面を暴露している．
+		[ Encyclopedia of Gods, by Michael Jordan ]
+*トート*アモン*
+thoth*amon
+	また人の噂によりますと，ルクサナに住まいいたすトート・アモン
+	というセトの大司教に反抗したツトートメスが，その大司教を転覆
+	させるためとて禁断の魔力を求めにまいったよしでございますが，
+	....
+		[ Conan the Conqueror, by Robert E. Howard ]
+		[ 征服王コナン，団征二訳，ハヤカワ文庫 ]
+*玉座
+*throne
+	思うに私は玉座の階段を見た
+	霧と蒸気が私の目からそれを隠していた―
+	そこに座ることを許された誰かの姿もまた．
+	しかしすべての段と地面に散りばめられていた
+	かつて生者と死者が知るうちに
+	もっとも悲しい光景が．あわれな群集，
+	病人，健康な者，老人，若者，あのかげりの前で泣き叫ぶ者ども．
+	「汝は吾らが王なり，
+	ああ，死よ! 汝にこそ我らは嘆く」
+	これらの段を私は登った．私の前の霧が
+	なめらかな道を示した．そして私は見つめた
+	苔むした洞にひとり眠る者のかんばせを．
+	天をふりあおぎ，過ぎさりし思い出を
+	心楽しく思いおこしているような．
+	夏の墓の，愛しい麗人！
+		[ Sonnet, by William Wordsworth ]
+虎
+tiger
+	1. よく知られた熱帯のネコ科の肉食動物(学名: Felis tigris )．
+	黒い反転や縞のある黄色がかった皮を持つ．2.比喩用法: 紙に
+	書いた虎，恐怖を意味する何かのようで，実際には何の効果もない．
+	(1946年の毛沢東の声明による)
+		[ Van Dale's Groot Woordenboek der Nederlandse Taal ]
+
+	虎よ！夜の森かげで
+	赫々(あかあか)と燃えている虎よ！
+	死を知らざる者のいかなる手が，眼が，
+	お前の畏るべき均整を造りえたのであるか？
+		[ The Tyger, by William Blake ]
+		[ イギリス名詩選，平井正穂編，岩波文庫 ]
+~缶切り
+~脂の缶
+*缶*
+tin
+tin of *
+tinning kit
+	「鮭ってご存知ですよね，軍曹」とNobbyが言った．
+	「私が知るところでは魚だな」
+	「それが缶詰入りのスライスで売られてることも…」
+	「そう，分かるとも」
+	「ところで…全ての缶詰が同じ大きさなのはどういうわけでしょう？
+	鮭って両端は細くなってますよね．」
+	「興味深い話だ，Nobby．私が思うに…」
+		[ Soul Music, by Terry Pratchett ]
+缶切り
+tin opener
+	今や生きのびた猫族は30以下であり，食糧を必死で探しながらカー
+	ゴデッキを後足で立ってうろついていた．
+	しかし食糧はなくなった．
+	供給は断たれた．
+	衰弱し，病を患い，猫どもは貨物室の銀の山に祈った．ミュータ
+	ント猫どもが異教徒なりのやりかたで信仰している，巨大にそび
+	えたつ大量の金属の岩が，猫どもを見わたしていた．
+	泣き叫ぶ声と金切り声のただなかに，いっぴきの猫がたちあがり，
+	聖なるイコンを高くかかげた．イコンは神聖なるものとして賜下
+	されたものであり，いつの日かその用途が知らされるであろうも
+	のだった．
+	それはV字型の金属片で，頂部には回転ハンドルがあった．
+	その猫は銀の山から銀の岩をとった．他の猫どもはすくみあがり，
+	冒涜に叫びをあげた．
+	猫はイコンを岩の縁におき，ハンドルをまわした．
+	ハンドルはまわった．
+	岩が開いた．
+	岩の中にはトマトソースのアルファベット型スパゲティがあった．
+		[ Red Dwarf, by Rob Grant and Doug Naylor ]
+タイタン
+titan
+	母なる大地ガイアはカオスから発生し，天である配偶者のウラヌス
+	を産んだ．ウラヌスは彼らの全ての子供を憎んだ．なぜなら彼らが
+	彼自身の権威の脅威になることを恐れたからである．これらの子供，
+	タイタン，ギガンテス，サイクロプスは冥界に追放された．彼らの
+	立腹した母親はやがてはもっとも若いタイタン，クロノス(タイム)
+	をはなち，父親を去勢しその地を支配するよう彼をしむけた．後に，
+	彼はその息子のゼウスの挑戦を受け，彼および彼の仲間のタイタン
+	はオリンポスの山々から追放された．
+		[ Greek Mythology, by Richard Patrick ]
+試金石
+touch*stone
+	「金は試金石で試され，人間は金で試される．」
+		[ Chilon (c. 560 BC) ]
+旅行者
+*観光客
+tourist
+* tourist
+	アンク=モルポークからチルムへ至る道は，高山をうねうねと白く抜
+	ける百五十キロ近い山道だった．山を縫うように深い谷や半ば埋もれ
+	た岩を伝い，柑橘類が茂る涼しい緑の谷を抜け，蔓植物が蜘蛛の巣の
+	ようにはびこる小峡谷を，吊り橋で渡っていく．それは多くの場合，
+	いつにもまして，絵のように美しかった．
+
+	“絵の様に美しい”．この表現は，魔術師リンスウィンド（＜見えざ
+	る大学＞魔法学士，《除籍》）には耳新しいものだった．黒焦げの廃
+	虚と化したアンク＝モルポークを出てから覚えた言葉の一つだ．
+	他に，“趣のある”というのも覚えた．“絵の様に美しい”と言うの
+	は−−リンスウィンドは，ツーフラワーが感激してこの表現を使った
+	景色を，注意深く観察してこう定義した−−景観が恐ろしいほどに切
+	り立っているということだ．“趣ある”と言うのは，時おり通り過ぎ
+	た村について言われた場合には，熱病に襲われ，すっかり荒れ果てた
+	という意味だ．
+
+	ツーフラワーはディスクワールドはじまって以来の旅行者である．
+	“旅行者”というのはリンスウィンドの定義では“馬鹿”のことだ．
+
+		[ The Colour of Magic, by Terry Pratchett ]
+		[ ディスクワールド騒動記，安田均訳，角川文庫 ]
+タオル
+towel
+	『銀河ヒッチハイク・ガイド』はタオルについても語っています．
+	恒星間を旅するヒッチハイカーの持ち物のなかでも，タオルはとりわ
+	け役に立つ品物です．まず，実用的な価値---ジャグラン・ベータ星の
+	冷たい月に照らされて旅をするときは，タオルにくるまって暖をとる
+	ことができます．サントラギヌス第五惑星のきらきら輝く大理石の砂
+	浜では，タオルの上に寝そべって，人を酔わせる潮風を心ゆくまで吸
+	い込みましょう．砂漠惑星カクラフーンの赤く輝く星々のもとでは，
+	タオルをかけて眠ります．かの有名な大河，モス河くだりでは，タオ
+	ルを筏の帆にすることもできます．トラアルには虫のような鳴き声の
+	貪欲な獣が生息していますが，その眼を避けたり（というのは，こい
+	つはいやになるほどマヌケな獣で，あなたがこいつを見ることができ
+	なければ，こいつもあなたを見ることができないことになっているの
+	です---とまあ，きわめつけのバカなのですが，貪欲なこともこのうえ
+	ありません），悪臭を避けたりするにはタオルを顔に巻きつけます．
+	遭難したときはタオルを振って合図できますし，もちろん，まだきれ
+	いだなと思ったら，身体を拭いてもいいのです．
+	        [ The Hitchhiker's Guide to the Galaxy,by Douglas Adams ]
+	        [ 銀河ヒッチハイク・ガイド，風見潤訳，新潮文庫 ]
+*塔
+*tower
+	(_のしかかるような_，_暗い_)塔は，荒地にぽつんと立っており，
+	ほとんど例外なく魔法使いのものである．どの塔も数階建ての高
+	さで，円形をしており，扉がなく，事実上窓もなく，なめらかな
+	石材でできているので，よじ登ることは非常に難しい． [...]
+	ツアーが終わりに近づいたころ，あなたは塔におもむき，中に侵
+	入しなければならない．
+	[ The Tough Guide to Fantasyland, by Diana Wynne Jones ]
+	[ ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+	  原島文世・岸野あき恵訳, 東洋書林 ]
+# ダイアナ・ウィン・ジョーンズのファンタジーランド観光ガイド,
+# ダイアナ・ウィン・ジョーンズ, 原島文世・岸野あき恵訳, 東洋書林, 2004,
+# p.179, 塔
+落し扉
+trap*door
+	わたしはエリックをよく知っていたので，彼が自分で作り上げたさ
+	まざまな仕掛けに出くわすのではないか，という推測をそのとき抱
+	いていた．だから彼の家にとび降りても，少しも安心してはいなか
+	った．わたしは彼があのマゼンデランの宮殿をどんなふうに作り変
+	えたかを知っていた．この世でいちばんまっとうな建造物を，彼は
+	やがて悪魔の家にしてしまったのであり，そこではもはや反響によ
+	って盗み聞きされたり，告げ口されたりしないでは，ひとことも口
+	にできなくなったのだ．あの化け物は切穴と一緒に，どんな家庭内
+	のドラマを，どんな血なまぐさい悲劇を引きずっていたことか! 
+		[ The Phantom of the Opera, by Gaston Leroux ]
+		[ オペラ座の怪人, 三輪秀彦訳, 創元推理文庫 ]
+# オペラ座の怪人, ガストン・ルルー, 三輪秀彦訳, 創元推理文庫, 東京創元社,
+# 1987, p.376
+トラッパー
+trapper
+	トラッパーは，ダンジョンの周囲にとけこむというカメレオンのよう
+	な能力を持つように進化した生物である．トラッパーは非常に静かに，
+	そしてダンジョンの周囲にとけこみ，何の疑いも持たない生物が通り
+	過ぎるまで待ち，獲物を捕獲する．トラッパーは獲物にすっぽり覆い
+	被さり，消化する．
+木
+tree
+	私は思う
+	木ほどに美しい詩を見ることはないと
+	大地の甘く流れるような胸に
+	飢えた口を焦がれる木よ
+	ひねもす神を見つめて
+	葉の茂い腕を祈りにもたげる木よ
+	夏になればその髪に
+	コマドリの巣をいただき
+	その胸に雪を横たえ
+	親しく雨とともに生きる木よ
+	詩は私のような愚者によってさえなされる
+	しかし木は神のみが作りうる
+		[ Trees - Joyce Kilmer ]
+ほし肉
+tripe
+tripe ration
+	もしゼロから始めようとしたら，牛の胃の料理は大変な長仕事です．
+	新鮮な牛の胃全体の料理には最低でも12時間かかりますし，いくつかの
+	由緒ある料理法は24時間ほど要します．
+	新鮮な牛の胃の準備には，必要なら余計な部分を除きます．徹底的に
+	洗い，一晩水に浸し，塩水で30分湯通しします．再びよく洗って，
+	水気を切り，カットします．料理すると，牛の胃の手触りは柔らかい
+	すじのようになるでしょう．よくあることですが，悲しいかな，火力が
+	充分に低く保たれてないと，濡れた靴の皮のように硬くなります．
+		[ Joy of Cooking, by I Rombauer and M Becker ]
+*トロル
+*troll
+	トロルは，よたよたと近よってきた．みたところ，８フィート，ある
+	いは，それ以上はあるにちがいない．両手をうしろにぶらつかせ，ふ
+	とい爪のある足でかがみこんで歩くさまは，見るだに恐ろしいものだっ
+	た．毛のない緑色の肌が体のうえで波うち，頭部には耳まで裂けた口
+	と１ヤードも突出した鼻がついていて，落ちくぼんだ眼は，黒い眼窩
+	がプールのように穴をあけ，瞳孔も白眼もみえず，松明の光を吸いこ
+	んでしまうだけで，ひとかけらも反射しなかった．
+	[...]
+	巨大な緑のクモのように，トロルの切断された手首が，指で這いはじ
+	める．盛り土した床をこえ，丸太につきあたって鉤爪をひっかけて這
+	いのぼり，また下りて這いすすみ，腕の一端へたどりついた．そして，
+	トロルの手首は，そこにぴたりと癒着した．同時に，トロルのひしゃ
+	げた顔が，溶けたようにうごめき，ついに元どおりに剥ぎあわされた．
+	トロルは立ちあがって歯をむきだした．消えかけた松明の赤い火が，
+	ふとい牙を照らしだした．
+		[ Three Hearts and Three Lions, by Poul Anderson ]
+		[ 魔界の紋章, 豊田有恒訳, ハヤカワ文庫SF ]
+村正*
+*tsurugi of muramasa
+	この古の剣は，数百年の昔から幕府の指導者によって代々受け継がれ
+	てきた．その所有者に幸運をもたらすをいわれているが，その真の力
+	は目にするも恐しい．それは所有者に反抗するすべての生物をまっぷ
+	たつにし，即死させる能力を持っている．
+大刀
+~*muramasa
+tsurugi
+	剣は侍の長剣として知られており，侍が好んで使用した極めて鋭利な
+	両手持ちの剣である．それは鍛えられた鉄で出来ており，決して錆び
+	ないように特殊な工程を経て作られている．剣はその鋭利さ故に，し
+	ばしばその敵を真っ二つにすることができると噂されている．
+ガイド
+ツーフロアー
+ツゥフロア
+トゥフロア
+twoflower
+guide
+	「リンスウィンドか！」
+
+	ツーフラワーがベッドから飛び出してきた．魔術師は飛びすさったが，
+	顔には何とかねじれた笑顔を浮かべた．
+
+	「やぁ君！時間どおりだ！昼ご飯を食べたら，午後は盛りだくさんの
+	計画を立ててくれてるはずだね！」
+	「えぇと−−」
+	「それはすごい！」
+	リンスウィンドは深呼吸した．
+	「いいかい」必死になって伝える．「昼飯はどこかよそで食おう．下
+	ではちょっとした騒ぎがあったんだ」
+	「酒場の喧嘩だ！どうして起こしてくれなかったの？」
+
+	「そりゃだって，君−−何だって？」
+
+	「今朝はっきり言っておいたと思うんだけど，リンスウィンド．僕は
+	本物のモルポークらしい生活を見てみたいんだ−−奴隷市場や，＜娼
+	婦の穴蔵＞，＜小神の寺院＞，乞食のギルド・・・それに本物の酒場
+	の喧嘩」ツーフラワーの声に，行くぶん疑うような口調が加わった．
+	「本当にあるよね？ほら，シャンデリアにぶら下がったり，テーブル
+	の上の剣を交わしたり−−蛮人フルンや＜イタチ＞がいつも巻き込ま
+	れているような出来事．つまり−−血湧き肉踊る冒険だよ！」
+
+		[ The Colour of Magic, by Terry Pratchett ]
+		[ ディスクワールド騒動記，安田均訳，角川文庫 ]
+チュール
+tyr
+	チュールという名のアース神がまだいる．この神は最も大胆な神
+	と考えられている．戦いにおいて，勝敗を決めることもしばしば
+	あるのだ．だから，戦士はこの神に祈願するのがよい．ほかの人
+	より強くて，何物をも恐れない者を，チュールのように強い，と
+	いう表現があるくらいだ．この神はまた非常に賢くて，賢い人を
+	チュールのように賢いというくらいだ．アース神たちが，フェン
+	リスウールヴ(狼)をそそのかして，グレイプニルという足枷をは
+	かせようとしたときに，チュールの勇気が証明されたのだ．その
+	とき，フェンリスウールヴはアース神たちが，自分を再びはなし
+	てくれることを，その保証として，チュールが手を口の中に差し
+	込むまで，信用しなかった．そこでアース神たちが狼をはなそう
+	としなかったとき，狼はチュールの手を，俗に<狼の関節>と呼ば
+	れているところから噛み切ったのだ．それでチュールは片手しか
+	ないし，人々の調停者と呼ばれないのだ．
+			[ The Prose Edda, by Snorri Sturluson ]
+			[ エッダ，谷口幸男訳，新潮社]
+*hulk
+*ハルク
+	アンバーハルクは強力な地下の肉食動物で，その鉄のような爪は固い
+	岩をえじきを求めて掘り抜ける．そいつらは途方もなく強い．ふくら
+	はぎの下方や鱗状の獣皮は筋肉がもりがっており，力強い腕と足は全
+	て大きな爪がある．
+*ユニコーン
+ユニコーンの角
+*unicorn
+unicorn horn
+	人間はいつも捉えどころのないユニコーンを見てきた．頭の前に生
+	えている一本のねじれた角は力強い魔除けの効果があると考えられ
+	てきた．ユニコーンは泥だらけの水たまりを浄化するため，角の先
+	っぽをちょっと入れると言われている．人間はまた，この角で飲む
+	ことにより，あらゆる病気から身を守ることができ，角を煎じるこ
+	とができるのなら，それはあらゆる毒の中和剤となると信じてきた．
+	200年前のフランスではユニコーンの角は王家の食物を毒を調べる
+	セレモニーに用いられていた．		
+
+	小さい馬くらいの大きさであるが，ユニコーンは獰猛な動物で，そ
+	の角からの一突きは象をも殺す力がある．また，その足の俊敏さは
+	この群を作らない生き物を捉えることを困難にする．しかしながら，
+	ユニコーンは処女の手により手なづけ捉えることができる．ユニコ
+	ーンは処女を見ることによりおとなしくなり，頭をその女のひざに
+	押しつけ魅了させられてしまう．このとき処女は金のロープで安全
+	に捉えることができる．
+	[ Mythical Beasts, by Deirdre Headon (The Leprechaun Library) ]
+		    [ 神話の生物, Deirede Headon(レプレコーン図書) ]
+
+	Martinは少しビールをすすった．「ほとんどいける」と彼は言っ
+	た．「あんたはビールをおそろしくうまく保ってるね」
+	Tlingelは笑った．「ユニコーンの角は解毒剤なんだ．それを持っ
+	ていればあらゆるものを治すことができる．私は温かく輝く段階
+	になるまで待って，それから私の角を使って余計な部分を焼きは
+	らい，そのままの状態に保っているんだ」
+		[ Unicorn Variations, by Roger Zelazny ]
+ウルク*ハイ
+uruk*hai
+#[SLASH'EM 0.0.7E6]
+	「そうよ，おれたちは離れちゃなんねえのよ．」ウグルグが怒った声
+	でいいました．「おれは手前たちみてえな豚野郎は信用してねえぜ．
+	お前たちはそのきたねえ豚小屋から一歩出りゃ，からきし意気地がな
+	くなるのよ．おれたちがいなけりゃ，お前たち，ただ逃げるばっかり
+	だったろうぜ．おれたちは戦闘部隊ウルク＝ハイなのよ！おれたちが
+	あの大戦士をやっつけた．捕虜もおれたちがつかまえた．おれたちは
+	白の手なる賢者サルマンさまの手の者よ．白の手さまはな，おれたち
+	に人間の肉を食べさせてくださるのよ．おれたちはアイゼンガルドか
+	らやって来た．そしてお前たちをここまで連れてきた．このさきはこっ
+	ちの好きな道を通ってお前たちを連れて帰るのよ．おれはウグルグ．
+	ウグルグさまの仰せだぞ．」（訳注　ウルクとは暗黒語で，大きなオー
+	クの意）
+#	[ The Return of the King, by J.R.R. Tolkien ]
+##瀬田訳では該当箇所が掲載されているのは『二つの塔(上)』
+		[二つの塔, 瀬田貞二，田中明子訳, 評論社]
+ワルキューレ
+valkyrie
+* valkyrie
+	ワルキューレは13人の選ばれた殺人者で，天空を駆けるオーディンに
+	仕える美しい女戦士である．彼女らは戦いの進行状況を見，戦いから
+	戦士を選ぶ．彼等が死んだあと，処女達は戦士達にキスを与え，魂を
+	戦士達にとって安息の地であるヴァルハラへと導く．酒も食事も尽き
+	ることなく，終末の時まで何度でも戦い，永遠の名声を得ることがで
+	きる．
+		[ The Encyclopaedia of Myths and Legends of All
+			Nations, by Herbert Robinson and Knox
+			Wilson ]
+吸血*
+vampire
+vampire bat
+vampire lord
+	オックスフォード英語辞典は極めて明解である：
+	ヴァンパイア --- 有害な本性を持った超自然的な生物(原書もしく
+	は通常伝来では，生き返った死体)．糧を捜し求め，傷つけ，眠って
+	いる人間の血を吸う．
+ビーナス
+venus
+	アプロディテ（ウェヌス）は，愛と美の女神で，ゼウスとディオネのあ
+	いだに生まれたむすめです．ほかの説によれば，海の泡のなかから生ま
+	れたともいいます．アプロディテは西風に吹き送られて，波のまにまに
+	キュプロス（サイプラス）島に，流れつきました．そこで，四季の女神
+	たちに迎えられ，美しい着物をきせられて，神々の集まっている天上の
+	大広間に連れてゆかれました．アプロディテの美しさに心をうわばれた
+	神々は，みんなアプロディテを自分の妻にと望みました．ゼウスは，む
+	すこのヘパイストスが雷をきたえあげてくれた礼として，かれにアプロ
+	ディテを与えました．そういうわけで，女神のなかで，一ばん美しい女
+	神が，一ばんみにくい神の妻となることになりました．
+		[ Bulfinch's Mythology, by Thomas Bulfinch ]
+		[ ギリシア・ローマ神話, 野上弥生子訳, 岩波少年文庫 ]
+*ヴラド*
+vlad*
+	ヴラド・ドラキュラ侯は15聖記のカルパチア山脈地方のバーガウ
+	(現在のルーマニア)の君主である．ルーマニアの歴史では，彼は2
+	つの点でよく知られている．1つはオスマントルコのキリスト教
+	文化圏であるヨーロッパへの侵攻を防いだその統制手腕．もう1つ
+	は戦場での冷酷な行動である．彼のやり方に反対するものには木の杭
+	を突き刺した．帽子を脱ぐのに失敗した教会の高僧を訪ね頭を釘で打
+	ちつけた．
+渦
+*vortex
+vortices
+	純粋な精霊のエネルギーの雲の渦巻き．渦はより巨大な精霊に関係
+	があると思われる．渦は触っただけではダメージを喰らうことはない
+	が，それらは油断している冒険者を取り込んでしまうことに注意せよ．
+	不運な冒険者はこのようにして渦に飲み込まれ，渦を構成する
+	精霊に身をさらし非業の死を遂げる．
+ボルゲ
+voulge
+#[SLASH'EM 0.0.7E6]
+	長く堅い棒の先に重い包丁をつけなさい，そうすれば梃子の原理
+	により，棒の使い手は甲冑を切り裂くだけの力を得られるだろう．
+	ボルゲは基本的な型のものだと距離をおいた敵を留める手段を持
+	たないが，先端もしくは後方の刃を下に下げて，短剣のような先
+	端を相手に向ければ，この武器はより完璧な様相を帯びる．
+ヴァロック
+vrock
+	ヴァロックは悪魔としては比較的弱い．人間とコンドルの混血に
+	似ている．噛んだり手足の爪で攻撃してくる．
+脇差し
+wakizashi
+	侍は伝統的に二本剣を差している．脇差しは短いほうである．刀
+	の項目も見よ．
+*杖
+wand of *
+*wand
+	「サルマン！」かれは声を張り上げました．その声は次第に力と権威を
+	帯びてきました．「見よ，わしはお前が裏切った灰色のガンダルフでは
+	ない．わしは黄泉より戻った白のガンダルフじゃ．お前は今では色を持
+	たぬ．わしはお前をわが賢人団から追放し，白の会議から追放する．」
+	かれは片手をあげると，はっきりした冷い声でゆっくりといいました．
+	「サルマン，お前の杖は折れたぞ．」メキメキと音がして，杖は杖はサ
+	ルマンの手の中で割れ，握りがガンダルフの足許に転げ落ちてきました．
+	「行け！」ガンダルフがいいました．サルマンは一声叫び声をあげると，
+	後に退き，はうように逃げて行きました．
+		[ The Two Towers, by J.R.R. Tolkien ]
+		[ 評論社, 瀬田貞二訳 ]
+ワーグ
+warg
+	突然アラゴルンが跳び上って叫びました．「何てひどく風が吠えるだ
+	と！吠えているのは狼の声だ．ワーグどもが山脈の西にやって来たの
+	だ！」
+	「では，朝まで待つことがあろうか？」とガンダルフがいいました．
+	「いった通りじゃ，追跡が始まったぞ！こうなればたとえ生きて明日
+	の日の出を仰ごうと，気ちがい狼どもに後をつけられて，南への夜の
+	度を続けて行こうと思う者がおるじゃろうか？」
+	「モリアまでどのくらいあるのですか？」と，ボロミアはたずねまし
+	た．
+	「カラズラスの南西に入口が一つある．鴉が飛ぶように直線に行けば
+	十五マイルばかり，狼どもが走るがごとく行けば二十マイルばかりあ
+	ろう．」ガンダルフがきびしい顔で答えました．
+	「それでは，できれば，日が明るみ次第すぐ出かけましょう．」と，
+	ボロミアがいいました．「現に耳に聞く狼どもは，話で恐れるオーク
+	鬼どもより悪いものです．」
+	「その通り！」アラゴルンはそういって，さやに入った剣をベルトか
+	らはずしました．「だが，狼の吠えるところには，オーク鬼もうろつ
+	いているものだ．」
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+		[ 評論社, 瀬田貞二訳 ]
+~ミュルニール
+ウォーハンマー
+~mjollnir
+war*hammer
+	激しい戦闘が周囲で行なわれているさなかに，二人はトライデン
+	ト川の渡り場で相見えたのだった．ロバートは愛用の戦鎚をたず
+	さえ，大きな枝角つきの兜をかぶっていた．そして，ターガリエ
+	ン家のプリンスは真っ黒な鎧兜に身をかため，その甲冑の胸当に
+	は，三つの頭を持つドラゴンの紋章がついていた．その紋章のす
+	べてがルビーでできており，日光を受けると火のようにきらめい
+	た．かれらが何度も何度も旋回して激突すると，軍馬の蹄のまわ
+	りのトライデント川の水が赤く染まった．そしてついに，ロバー
+	トの激しい戦鎚の打撃が，ドラゴンの紋章とその下の胸を打ち砕
+	いた．ネッドがやっとその場面に駆けつけたとき，レーガーは川
+	の中に死んで横たわっており，両軍の兵士たちが渦巻く川の水を
+	かきまわして，かれの鎧から打ち落とされたルビーを拾っていた．
+		[ A Game of Thrones, by George R.R. Martin ]
+		[ 七王国の玉座, 岡部宏之訳, 早川書房 ]
+# 七王国の玉座 上, ジョージ・R・R・マーティン, 岡部宏之訳, 早川書房, 2002, p.49
+水
+water
+	来る日も来る日も次の日も
+	そよとの風も波もなく
+	動かないこと絵に描いた海の
+	絵に描いた船のようじゃった．
+
+	あちらを向いても水ばかり，
+	なのに船板干割れてちぢむ．
+	こちらを向いても水ばかり，
+	なのに一滴飲めはせぬ．
+		[ The Rime of the Ancient Mariner, by Samuel Taylor
+		  Coleridge ]
+		[対訳コウルリッジ詩集，上島建吉編，岩波文庫]
+		[ イェイツ全詩集，鈴木弘訳，北星堂 ]
+くもの巣
+web
+	おお，なんともつれた蜘蛛の巣を織りあげることか，
+	我々が人を欺くことを学んだときから!
+		[ Marmion, by Sir Walter Scott ]
+ワイト
+*wight
+	ふたたび正気づいた時，とっさには恐怖感のほかは何一つ思い出せま
+	せんでした．それから突然自分が囚われの身となり，絶望的な状態に
+	陥ったことを知りました．フロドは古墳の中にいました．塚人がかれ
+	を捕えたのです．そしておそらくすでに，噂話に語られたかの塚人た
+	ちの身の毛のよだつような呪文をかけられてしまったのでしょう．か
+	れは身動きする勇気もなく，気がついたときのままの姿勢で，冷い石
+	に背中をあて，胸に両手を置いてじっと横になっていました．
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+		[ 評論社, 瀬田貞二訳 ]
+# note: need to convert player character "gnomish wizard" into just "wizard"
+# in the lookup code to avoid conflict with the monster of that same name
+~gnomish wizard
+wizard
+* wizard
+apprentice
+~ノームの魔法使い
+魔法使い
+実習生
+	Ebenezum は我々がこれらの育ち過ぎた森で見いだした道の，最も
+	近いものに沿って私の前を歩いていた． 数歩歩く度に彼は一休み
+	しなければならなかったので，それで私は，神秘的で重い道具一式
+	が詰まった袋を重荷に思いつつも，彼の驚くべき歩幅に追いつく事
+	ができた．彼は，いつものように，好んで，彼がしばしば言ってい
+	るように，素早く魔法をかける為と魔法の瞑想において思考を自由
+	にする為に，何も運ばなかった．
+		[ A Dealing with Demons, by Craig Shaw Gardner ]
+rodney
+イェンダーの魔法使い
+wizard of yendor
+	この強大な魔法使いが何歳だとか，何処から来たのとかを知るものは
+	いない．普通の人間より遥かに長く生きており，死なない体に退屈し
+	はじめていることが知られている．そして，人間とのつきあいや人間
+	について考えることもやめ，はるか地の奥深くに向った．彼は，恐し
+	い聖器「死者の書」をもっている．それは偉大なパワーをもっている
+	と言う．多くの人間が魔法使いとその宝を探そうとした．が，誰も発
+	見することができず，それどころか生きて話を語るものすらいない．
+	この強大な魔法使いをかき乱す無謀な冒険者に苦痛あれ！
+~影の狼
+~霧の狼
+#[SLASH'EM 0.0.7E6]
+狼*
+*狼
+wolf
+*wolf
+*wolf cub
+	現代の飼い犬の祖先である狼は強力な力を毛むくじゃらの尻尾に
+	持っている．狼は，賢く，社会的生活を営む．家族または家族の
+	集まった群で行動する．これらの群は獲物を狩るため協力しあう．
+woodchuck
+リス
+	UseNetの託宣者は，この問題に答えることを要求する！
+
+	>リス(woodchuck)が木質(wood)を食える(could chuck)とすれば，
+	>一匹のウッドチャックはどのくらいの木質を食えるのか？
+
+	「なんだって！僕は*これ*をなんとかするのか！」託宣者は自分にター
+	ミナルを戻して，ZOT安全装置ロックをはずし，ZOTキーからガラスガー
+	ドをスライドさせて取り去った．「うーーむ．ちょっと変えてもらえま
+	すか？初心者にはZOTはとてもグラフィカルです．*僕*でさえ，ときど
+	き少々吐き気を催す・・」その初心者が変更すると，託宣者がコンピュー
+	タキーに指を乱暴に打ち付けるのが聞こえた．大きなZZZZOTTTTTの音と
+	オゾンの匂いがしてきた．
+		[ Excerpted from Internet Oracularity 576.6 ]
+ロングワーム
+#*ワーム
+# avoid false hits for non-long worms
+#[SLASH'EM 0.0.7E6]
+*ワームの尻尾
+クリスナイフ
+ワームの歯
+#*worm
+# avoid false hits for non-long worms
+#[SLASH'EM 0.0.7E6]
+worm
+long worm
+long worm tail
+worm tooth
+crysknife
+	「クリスナイフ」は死んだサンドワームから取った歯から作られ，二
+	つの使い方がある．二つの使い方とは，固体と粉末である．粉末のナ
+	イフは粉砕を防ぐ電子のフィールドを人間の体のまわりに作る．固体
+	したナイフは貯蔵用として扱う．20センチメートルくらいの長さである．
+					  [ Dune, by Frank Herbert ]
+レイス
+ナズクル
+wraith
+nazgul
+	たちまち，ほかのすべての物はもとのままぼんやりと暗く見える中で，
+	黒い影たちの姿だけが恐しいほどはっきり見えてきました．かれはか
+	れらの黒い装束の下まで見通すことができました．背の高い姿は全部
+	で五つありました．二人は谷のふちに立ち，三人は前進して来るとこ
+	ろでした．かれらの蒼白い顔には鋭い無慈悲な目が燃えていました．
+	黒いマントの下には灰色の長衣をまとっていました．灰色の顔には銀
+	のかぶとがかぶせられていました．やせさらばえた手には鋼の剣が握
+	られていました．かれらの視線はかれを捕え，かれを突き刺しました．
+	それとともにかれらはかれに向って走り出しました．死にもの狂いで
+	かれは自分の剣を抜きました．かれにはそれがまるで松明のように赤
+	くちらちらとゆらぐように見えました．五人のうち二人が立ち止まり
+	ました．三人めはあとの者よりいっそう高く，長い髪をきらめかし，
+	かぶとの上に冠をいただいていました．かれは片手に長い剣を持ち，
+	もう一方の手にナイフを握っていました．ナイフもそれを握る手も蒼
+	白い光を放っていました．かれはぱっと跳び上がったかと思うと，急
+	にフロドに襲いかかってきました．
+		[ The Fellowship of the Ring, by J.R.R. Tolkien ]
+		[ 評論社, 瀬田貞二訳 ]
+ワンパス
+wumpus
+	ところで，ワンパスは吸盤のついた足があるため障害に悩まされること
+	はなく，そして大きすぎるのでコウモリに持ち上げられることもない．
+	また，もし彼を射ようとして外せば，起き上がって別の洞穴に動くかも
+	しれない．元来ワンパスは固着性の生き物ではあるが．
+		[ wump (6) -- "Hunt the Wumpus" ]
+ザン
+xan
+	前方になにがあるかを調べるため，彼らは友人の蚊「ザン」をお
+	くりこんだ．「おまえは道ゆく人間の血を吸う者だから，行って，
+	シバルバの者どもを刺してこい」と彼らは蚊に言った．蚊は地下
+	への暗い道を飛んでおりていった．「死の王」の家に入ると，蚊
+	は最初に見かけた人を刺した．
+
+	…蚊はこの男も同じように刺し，彼が叫ぶと，となりにいた男が
+	「『たくさん集まった血』よ，どうした?」とたずねた．そこで
+	蚊は列にそって飛び，座っている男をすべて刺し，12人全員の名
+	前を知った．
+			[ Popul Vuh, as translated by Ralph Nelson ]
+ゾーン
+xorn
+	地の精霊の遠い従姉妹にあたる．ゾーンは体を構成する細胞を
+	移動させ物体の内部に浸透する能力を持つ．これにより，壁や
+	障害物を自在に通り抜ける能力を持つ．
+矢
+ya
+	侍の使用する矢である．矢は真直な竹から作り，矢じりは堅い鉄で
+	ある．
+イーノグ
+『イーノグ』
+yeenoghu
+	イーノグはノールの支配者であり，その手下が地表から一掃されて
+	しまったにもかかわらず，いまだに存在している．近付くと魔術弾
+	を発射する．その鋭い目を単にちらりと見ただけでも，戦いにつか
+	れた冒険者はどうしようもなく混乱してしまうかもしれない．
+イェティ
+yeti
+	「忌まわしい雪男」またはイエティは，20世紀の真に正体不明な
+	巨大動物のひとつである．それは大きく毛深い二足動物であり，
+	アジアのヒマラヤ山脈地域に棲息している．「忌まわしい雪男」
+	に関する話は大小の神秘にみたされているが，もっとも難解なこ
+	とのひとつは，なぜそんなおそろしい名前になったか，というこ
+	とである．この生物はとりたてて忌まわしいというわけでもない
+	し，必ずしも雪の中に住んでいるわけでもない．イエティという
+	のはチベット語で，ヒマラヤ山脈に実在する正体不明の動物か，
+	あるいは山の精か悪魔を意味するようだが，確かなことはわから
+	ない．そして西洋人がイエティを求めてうろつきまわるようになっ
+	て半世紀近くになってからというもの，この化物にまつわる本来
+	の土着の伝統は，ますますごちゃまぜで混乱したものになってし
+	まった．
+		[ The Encyclopedia of Monsters, by Daniel Cohen ]
+弓懸
+*yugake
+	日本の革製のアーチェリーの小手である．実際には鎧とともに，親
+	指を補強するために使われた．これらの防具は実戦では革を二重に
+	して，親指を補強したという．
+和弓
+yumi
+	侍は高度なトレーニングを特殊な武器である弓に対して行なってい
+	る．矢の様に，弓は竹で作られている．弓矢を持つことにより，侍
+	は極めて精密な殺人戦士となる．
+*ゾンビ
+*zombie
+	ゾンビ．．．は魂のない人間の死体であるが墓から出て，魔術によっ
+	て機械的な装いを受けている．-- さも生きているかのように歩き，
+	演じ，動くための死の体である．
+		[ W. B. Seabrook ]
+ズルティ
+zruty
+	ズルティは兇暴で巨大な生物である．タトラ山の荒地に住んでいる．
diff -aurN slashem-0.0.7E6F2/dat/jgypsy.txt jslashem-0.0.7E6F2-J0.0.8/dat/jgypsy.txt
--- slashem-0.0.7E6F2/dat/jgypsy.txt	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jgypsy.txt	2004-06-29 08:35:38.000000000 +0900
@@ -0,0 +1,87 @@
+運勢を占う
+  50ゴールド，ジプシーがランダムにカードを引きます．あなたのカード
+  が組のカードであると，あなたは特別な運命に見舞われるでしょう．
+  タロットのカードは全て特殊な効果を持ちますが，いい効果も悪い効果も
+  存在します．
+
+  このサービスを受けるのに特殊な技術は必要ありません．しかしながら，
+  最も有効な結果の恩恵を実際に受けるには，追加コストが必要であり，
+  そのコストは預け金でしか支払われません．そのため，よい結果を引いた
+  ときに備えて十分な預け金を勝ち取るべく，これ以外の他のゲームを最初
+  に行っておきたいところです．
+
+
+スリー・カード・モンテ
+  「勝つのが最も簡単なゲームをあなたにお見せしましょう．私は3枚の
+  カードを持っています:剣のエース，剣の２，剣の３．私はこれをあなたの
+  前でシャッフルしますのでよく見ていてくださいよ．ちゃんとしっかり
+  見てますか？ はい！どれがエースかわかりますか？ そのとおり！
+  簡単じゃない？いくらかの預け金を勝ち取りたいと思いますか．
+  賭け金をただ置いてください．そうすれば，あなたがエースを再び取る
+  ことができれば，私はあなたに賭け金分を払いましょう．」
+
+  実際問題，あなたがどれくらい注意深くジプシーを見ているかは重要では
+  ない――わずかな手の動きで，彼女はあなたの勝ち負けをコントロールす
+  ることができます．あなたがゲームを続行して「夢中である」とジプシー
+  に思わせることで，あなたが勝利する機会が増加するかもしれませんし，
+  逆に減少するかもしれません．
+
+ナインティー・ナイン
+  賭けを置いた後に，あなたとジプシーは各々3枚のカードを手札に持ちます．
+  あなたはジプシーと交互にカードを一枚ずつ出し合い，出したカードを場に
+  追加して次の新たなカードを引かなければなりません．ゲームの目的は手札
+  をなくすか，あるいは相手に場の合計を99にさせることです．
+  回転を，手からの1枚のカードをしなければならず，カードを場に追加した
+  ときの合計の計算方法は以下の通りです：
+    エース             場の合計に1を加えます．
+    2〜10              場の合計にカードの数字を足します．
+    ジャック，クイーン 場の合計から10を引きます．
+    キング             場の合計を99にします．いつでも出せます．
+    愚者               場の合計を100にします．いつ出しても負けです．
+    それ以外の，タロット等は場の数を変更しません．いつでも出せます．
+
+  あなたの先手から始まります．もし残り札から新たにカードが引けなくなっ
+  た場合，あなたの勝ちです．
+
+
+イェンダー・タロッチ
+  このゲームはまだ工事中です．将来のバージョンで実装されます．
+
+  タロット・カードは，タロッチ(イタリアで発生したカードゲーム)をする
+  目的で考案されました．(占いや神秘学などでのそれらの使用は，はるか後
+  世で発生したものです．)タロッチは他の文化によって最適化され改名され
+  ました:タロットカード(フランス)，タロッコ(デンマーク)，タロッカス(
+  スイス)などです．
+
+
+宝石を質に入れる
+  宝石をジプシーの預け金に換金します．
+
+
+カードについて
+私たちが一般的にトランプと言っているカードデッキは，いくつかの異なるヨ
+ーロッパのカードシステムに由来します．イタリアのカードシステムが最も古
+く，およそ1370年ごろにインド，ペルシャ，またはアラビアから輸入されたと
+考えられています．（トランプは中国で発明されましたがそれらがヨーロッパ
+のカードに直接の影響がなかったことを学究的な証拠が示すことに注目．さら
+に，かなり後まで，カードはヨーロッパに現われませんでした．したがって，
+マルコ・ポーロあるいは十字軍などがこれらをもたらしたことはありそうもあ
+りません．）タロット・カードは15世紀の間に，トリック・テイキングという
+カードゲームを行う目的で発明されました．それらは18世紀までジプシーや，
+神秘学には関係していませんでした．最終的に，フランスのカードシステム
+が出現しました．このカードは英語圏で広く採用されています．
+
+本ゲームのカードデッキは二種類に分けることができます．よく知られている
+フランスのシステム(13のランクを備えた4つのスィート)に非常に似ている、
+52枚の「スィート」カードがあります．タロットカード・デッキでは、これら
+が「小アルカナ」と呼ばれます．デッキのもう一つの部分は「切り札」カード
+です．それらはタロットカード・デッキの「大アルカナ」と呼ばれます．
+
+私たちのスィートはそれぞれ「剣」、「杖」、「盾」および「指輪」と呼びま
+す．これらはタロットカード・スィートとの一致によりそれらの最も近似して
+いるNetHackのアイテムに割り当てられます．面白いことに，２つの「攻撃系」
+スィート（剣と杖），２つの「防衛系」スィート（盾と指輪），２つの「物理
+的」スィート（剣と盾），および２つの「魔法的」スィート（杖と指輪）に分
+けられます．
+
+
diff -aurN slashem-0.0.7E6F2/dat/jhelp jslashem-0.0.7E6F2-J0.0.8/dat/jhelp
--- slashem-0.0.7E6F2/dat/jhelp	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jhelp	2004-06-28 14:02:32.000000000 +0900
@@ -0,0 +1,199 @@
+        NetHack へようこそ！                ( description of version 3.4 )
+
+  NetHack は20階下のどこかに隠されていると噂されている「イェンダーの魔
+よけ」を求め，ダンジョンの深みに降りて行く「Dungeons and Dragons」ふう
+のゲームである．
+  あなたは一匹のペットを伴っている．ペットはいろいろと助けてくれたり，
+いろんなことをするようにしつけることができる．
+  あなたは途中で便利な(時には役立たずの)道具 (魔法の品もある) や，いろ
+いろなモンスターに出会う．モンスターのいる所へ体当りをすることによって
+攻撃することができる．(しかし大抵の場合は離れていた方が賢明だろう)
+
+  言葉であなたの位置を表現するような多くのアドベンチャーゲームと違って， 
+NetHack はあなたのいるダンジョンのビジュアルイメージをあたえてくれる．
+
+
+        NetHack では以下の文字を使う:
+
+        - と |   部屋の壁．開いたドアや墓のこともある．
+        .        床 または 出入口．
+        #        廊下 鉄棒 または 木．流し台(もしあれば)や
+                 跳ね橋のこともある．
+        >        次の階への階段等．
+        <        前の階への階段等．
+        @        ( ふつうは )プレーヤー または 別の人間．
+        )        いろんな種類の武器．
+        [        服 または 鎧．
+        %        食べもの．(腐ってないとは限らない)
+        /        魔法の杖．
+        =        指輪．
+        ?        巻物．
+        !        水薬．
+        (        道具．(つるはし, 鍵, ランプ．．．)
+        $        金の塊．
+        *        宝石 または 岩．(役に立つ場合も，無価値の場合もある)
+        +        閉じた扉 または 呪文の書かれた魔法書．
+        ^        (見つけた後の) 罠．
+        "        魔除け または 蜘蛛の巣．
+        0        鉄の玉．
+        _        祭壇 または 鉄の鎖．
+        {        泉．
+        }        水溜り や 塵だまり
+        \        豪華な王座．
+        `        玉石 または 彫像．
+        A から Z, a から z, その他:  怪物
+        I        透明または見えていない怪物が最後にいた場所
+
+                 '/' の後に文字を入力することで，それが何を表しているのか
+                 見分けることができる．たとえば "/A" は，'A' は猿，
+                 のように表示する．
+
+
+
+y k u   7 8 9   移動コマンド:
+ \|/     \|/            yuhjklbn: 指定された方向に１ステップ移動する．
+h-.-l   4-.-6           YUHJKLBN: 壁に当たるか何かに入るまで移動する．
+ /|\     /|\
+b j n   1 2 3           g<dir>:   何かに出会うまで <dir> の方向に移動する．
+      numberpad         G<dir>,   上と同じ ただし廊下の分かれ道でも気にしない．
+
+ <  上                  ^<dir>:   (ここでの ^ はコントロールキーを意味する)
+ >  下                  m<dir>:   ものを拾わずに移動する．
+                number_pad オプションをセットすると，テンキーで移動できる．
+                プラットフォームによっては，Shift+数字，Meta-数字，Alt+数字で
+                YUHJKLBNコマンドを発動するものもある．
+                Control <方向> は number_pad オプションがセットされている場合
+                はプラットフォームによって動いたり動かなかったりする．
+
+コマンド一覧:
+        NetHack では以下のコマンドを使うことができる．
+        ?       ヘルプメニュー．
+        ~       メインメニュー．
+        /       シンボルが何を表しているか教える．
+                位置で指定するか，アーギュメントで指定するかで選ぶ．
+        &       コマンドの意味を教える．
+        <       階段を登る．  (その上にいる場合のみ)
+        >       階段を降りる．(その上にいる場合のみ)
+        .       何もしない．(待つ)
+        _       マップで示された点に最小経路アルゴリズムで移動する
+        a       道具を使う．(つるはし, 鍵, ランプ…)
+        A       すべての防具を外す．
+        ^A      直前に実行したコマンドを繰り返す．
+        c       ドアを閉める．
+        C       特定のモンスターに名前をつける．
+        d       何かを落す． d7a: 'a' を７個落す．
+        D       いくつかのものを置く．このコマンドのふるまいは2種類あり
+                ユーザが選択できる．
+                1:
+                「D」はあなたの持つアイテム全ての一覧を表示する．「+」は
+                「置く」を「-」は置かないを意味する．一覧の文字をタイプ
+                することにより，選択，非選択を変えることができる．全ての
+                アイテムを選択するには「.」，非選択にするには「-」である．
+                スペースキーで次のページへ移動するこができる．
+                2:
+                "どの種類のものを置きますか？ [!%= au]"の質問の答えと
+                して，タイプを表す文字をゼロ個以上 'a' や 'u' を後に付
+                けて指定できる．
+                Da  - 確認に答えたもの以外のすべての持ちものを落す．
+                Du  - 勘定を払っていないものだけ落す．(店の中の場合)
+                D%u - 勘定を払っていない食糧だけ落す．
+        ^D      (普通はドアを)蹴る．
+        e       ものを食べる．吸血鬼は物を食べることはできませんが，このコマ
+                ンドを使うことで新鮮な死体から体液を吸うことができます．
+        E       床に文字を彫る．
+                E- - 指でホコリに字を書く．
+        f       装填されたものを射る
+        F       方向を指定して怪物と戦う(そこにいるかどうかは別として)
+        i       持ちものを表示する．
+        I       以下のように，持ちものの種類を選んで表示する．
+                I* - 持っている宝石を全部表示する．
+                Iu - 勘定を払っていないものを表示する．
+                Ix - 消費して勘定を払っていないものを表示する．
+                I$ - 金を勘定する．
+        n#      次のコマンドを繰り返す．
+        N       アイテムを呼ぶか名づけるかする．
+        o       ドアを開ける．
+        O       現在のオプション設定を表示し可能なら変更する．
+                変更するためのメニューが表示され，ほとんどは選択するだけ
+		で変更できる．通常，オプションはプレイするときに環境変数
+		NETHACKOPTIONSもしくは，設定ファイル(defaults.nh，
+                NetHack Defaults，nethack.cnf，.jnethackrcなど)で行う．
+        p       買いものの勘定を払う．
+        P       アクセサリーをつける．(指輪，魔除け,etc)
+        ^P      最後のメッセージをくりかえす．
+                (続けるとより古いメッセージを表示する)
+        q       何かを飲む(水薬, 水, など)
+        Q       装填するものを選択する．
+        r       巻物や呪文の本を読む．
+        R       アクセサリーをはずす．(指輪，魔除け,etc)
+        ^R      画面の再表示．
+        s       隠されたドアや罠を探す．
+        S       ゲームをセーブする．
+        t       ものを投げる．または飛び道具を使う．
+        T       防具を外す．
+        ^T      (出来るなら)テレポートする．
+        v       バージョンを表示する．
+        V       長い形式のバージョンと，このゲームの歴史を含めて表示する．
+
+        w       武器を身につける．w- は何も使わず素手で戦うことを意味する．
+        W       防具をつける．
+        x       主武器と補助武器を交換する．
+        X       探検モードに入る．
+        ^X      属性を表示する．
+        ^Y      変身する (できるなら)
+        z       魔法の杖を振りかざす．
+        Z       呪文を唱える．
+        ^Z      ゲームを中断する．
+        :       ここに何があるのか見る．
+        ;       別な場所にある物が何かを調べる．
+        ,       拾う．
+        @       pickup オプションを反転する．
+        ^       直前に見付けた罠の種類を聞く
+        )       使っている武器を表示する．
+        [       使っている防具を表示する．
+        =       はめている指輪を表示する．
+        "       身につけている魔除けを表示する．
+        (       使っている道具を表示する．
+        *       使用可能なアイテム一覧を表示する．
+        *       使用している装備類を表示する．
+        $       持っている金塊の数を数える．
+        +       知っている呪文を表示する．並び換えも出来る．
+        \       発見した物の種類を表示する．
+        !       OSでサポートされているなら shell を実行する．
+        `       オリジナルモードと日本語モードを切り替える．'i','I',';',
+                '/'コマンドでの名前がオリジナル名になる．
+        #       「拡張」コマンドを指定する．"#" で使えるコマンドのリス
+                トは "#?" で得られる．使える拡張コマンドは，nethack を
+                コンパイルした時のオプション，あなたのクラス，どんな種
+                類の怪物だったか，に依存する． キーボードにメタキー 
+                (それは，他のキーと一緒に押されることで，「メタ」(８番
+                目の，または 'high')ビットをセットする) があれば，それ
+                と拡張コマンドの１文字目だけで呼び出す事ができる．
+                Alt キーも似たような効果がある．
+
+        "number_pad" オプションがセットされている場合，いくつかの追加
+        のコマンドが使えるようになる．
+
+        h       '?'と同様にヘルプを表示する．
+        j       別の場所に飛ぶ．
+        k       蹴る．(大抵の場合はドア)
+        K       殺害したモンスター一覧を表示する．(あなたが倒したかどうかを問わず)
+        l       床に置かれている箱を略奪する．
+        n       続いて数字を入力し，次のコマンドを何回繰り返すかを指定する．
+        N       物や物の型に名前をつける．
+        u       罠の仕掛けられているドアや物の罠を外す．
+
+        "40." または "20s"のように，コマンドの前に繰り返し回数をつけること
+        ができる．もし number_pad オプションをセットしていたら"n40." また
+        は "n20s"のように回数の前に'n'を付けなければならない．
+
+ 									
+        いくつかの情報は画面の下または別ウィンドウ(プラットフォームによる)
+        に表示される．あなたの属性，あなたの信仰，ダンジョンの何階にいる
+        か，いまヒットポイントをどれだけ持っているか(そして最大がいくつ
+        か)，アーマークラスがいくつか(小さいほど良い)，経験レベル，腹の
+        具合がわかる．オプションとして，スペルポイント，金塊の保有数，そ
+        の他を見るか見ないかは自由である．
+
+        Have Fun, and Happy Hacking!
+
diff -aurN slashem-0.0.7E6F2/dat/jhh jslashem-0.0.7E6F2-J0.0.8/dat/jhh
--- slashem-0.0.7E6F2/dat/jhh	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jhh	2004-06-28 14:07:16.000000000 +0900
@@ -0,0 +1,118 @@
+y k u   7 8 9   移動:
+ \|/     \|/            yuhjklbn: 指定方向に，一歩歩く
+h-.-l   4-.-6           YUHJKLBN: 指定方向に，何かにぶつかるまで歩く，
+ /|\     /|\                      または何かの中へ入る．
+b j n   1 2 3           g<dir>:   指定方向に，何かが見えるまで歩く
+      numberpad         G<dir>:   指定方向に，何かが見えるまで歩く．
+                                  ただし，通路の分岐で止まらない．
+ <  up                  ^<dir>:   上に同じ．(コントロールを押しながら)
+ >  down                m<dir>:   何もせずに移動する．
+                `number_pad'のオプションがセットされているなら，ナン
+                バーパッドを移動に使用できる．
+
+一般:
+?       help    ヘルプ
+#quit   quit    ゲームをやめる．
+~       menu    メインメニューを表示する．
+S       save    ゲームを(後で続けるために)中断する．
+!       sh      (もしできるなら)シェルを実行する．
+^Z      suspend ゲームを中断する．
+O       options オプションを設定する．
+/       whatis  画面の記号が何かを知る．
+\       known   今までに発見した道具の一覧を表示する．
+v       version バージョンを表示する．
+V       history ゲームの歴史を表示する．
+X       explore ゲームを発見モードに切り替える．
+^A      again   1つ前のコマンドを実行する．(^Aはコントロールを押しな
+                がらAを押すことを意味する．)
+^R      redraw  画面を書きなおす．
+^P      prevmsg 前のメッセージを見る．(^Pは繰り返し使える)
+`               オリジナルモードと日本語モードの切り替え
+#               拡張コマンド(#?でヘルプ)
+
+ゲーム:
+^D      kick    蹴る．(扉等)
+^T      'port   瞬間移動．(可能なら)
+a       apply   道具を使う．(つるはし，鍵，カメラ等)
+A       armor   全ての鎧を脱ぐ．
+c       close   扉を閉める．
+C       call    怪物に名前をつける．(例えば，あなたの犬を命名する)
+d       drop    物を置く．  d7a：aなるものを7個置く．
+D       Drop    種類を選んで物を置く．
+e       eat     何かを食べる．(吸血鬼は死体から吸う)
+f	fire	装填されているものを射る．
+F	fight	方向を指定し戦う．
+E       engrave 床のほこりに文字を書く．(E-  指を使って)
+i       invent  あなたの持ち物一覧．(あなたが持っているもの全て)
+I       Invent  種類を選択して持ち物一覧．
+                Iu: 未払の道具一覧．
+                Ix: 未払だが使いはたした道具一覧．
+                I$: お金を数える．
+n#      repeat  次のコマンドを繰り返す．
+N       name    アイテムに呼び名や名称をつける．
+o       open    扉を開ける．
+p       pay     勘定を払う．(店の中で)／サービスを受ける．
+P       puton   アクセサリを身につける．(指輪，魔除けなど)
+q       quaff   何かを飲む(水薬, 水, など)
+Q	quiver	装填するものを選択する．
+r       read    巻物や魔法の本を読む．
+R       remove  アクセサリをはずす．(指輪，魔除けなど)
+s       search  秘密の扉，隠れた罠，怪物を探す．
+t       throw   武器を投げる，撃つ，射る．
+T       takeoff 鎧を脱ぐ．
+w       wield   武器を装備する．(w-  何も装備しない)
+W       wear    鎧を着る．
+x       xchange	左右の武器を交換する．
+X       explorer探検モードに入る．
+z       zap     杖を振る．
+Z       Zap     魔法を唱える．
+<       up      階段を昇る．
+>       down    階段を降りる．
+^       trap_id 罠を調べる．
+),[,=,",(       現在装備している記号に対応したものを表示
+*		装備しているものを表示
+$       gold    お金を数える．
++       spells  唱えることのできる魔法の一覧．
+_       travel  指定した位置まで最短距離で移動する．
+.       rest    休む．
+,       pickup  物を拾う．
+@               `pickup'(自動pickup)のオプションを切り替える．
+:       look    何があるかを見る．
+;       farlook 他に何があるか調べる．(地図上の記号を選択する)
+
+メタキーのあるキーボードでは以下の拡張コマンドを # のかわりにメタキー
+を押しながら実行できる．
+
+M-a     adjust  持ち物一覧の調整
+M-b     bereave 盗む
+M-c     chat    誰かと話す
+M-d     dip     何かに物を浸す．
+M-e	enhance 武器の技量を高めるまたは見る	
+M-f     force   鍵をこじあける．
+M-i     invoke  物の特別な力を使う．
+M-j     jump    他の位置に飛びうつる．
+M-l     loot    床の上の箱の中身を略奪する．
+M-m     monster 怪物の特別能力を使う．
+M-n     name    アイテムや物に名前をつける．
+M-o     offer   神に供物を捧げる．
+M-p     pray    神に祈る．
+M-q	quit	ゲームをやめる
+M-r     rub     ランプをこする．
+(none)	twoweapon	両手持ちの切り替え
+M-s     sit     座る．
+M-t     tech    特殊技能を使用する．
+M-u     untrap  罠をはずす．
+M-v     version コンパイル時のオプションを表示する．
+M-w     wipe    顔を拭う．
+M-y     youpoly 変身する．
+
+`number_pad'のオプションがオンなら，次のコマンドが可能になる．
+
+n               これに続く数字だけ次のコマンドを実行する．
+j       jump    他の位置に飛びうつる．
+k       kick    蹴る．(扉等)
+K       Kills   倒されたモンスター一覧（あなたに倒されたかどうかによらない）
+l       loot    床の上の箱の中身を略奪する．
+N       name    アイテムや物に名前をつける．
+u       untrap  罠をはずす．(通常はしかけられた物)
+
diff -aurN slashem-0.0.7E6F2/dat/jhistory jslashem-0.0.7E6F2-J0.0.8/dat/jhistory
--- slashem-0.0.7E6F2/dat/jhistory	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jhistory	2004-06-29 08:37:48.000000000 +0900
@@ -0,0 +1,168 @@
+SLASH'EM History file for release 0.0.7
+
+見よ，死すべきものよ，SLASH'EMの起源を．．．
+
+Jay Fenlasonが最初のHackを Kenny Woodland, Mike Thome および Jon Payne
+の助けのもと書いた．
+
+Andries Brouwerはこれを大きく書き直し，Hackをまったく違うゲームに仕立て，
+UNIX(tm)で動く(少なくとも)3つのバージョン(1.0.1, 1.0.2 および 1.0.3)を
+Usenetで公開した．
+
+Don G. Knellerは Hack 1.0.3を Microsoft(tm) C および MS-DOS(tm)へ移植し，
+PC HACK 1.01eを制作した．加えて DEC Rainbowグラフィックを 1.03gでサ
+ポートし，少なくとも4つ以上のバージョンを制作した．(3.0, 3.2, 3.51
+および 3.6)．
+
+P. Blackは PC HACK 3.51を Lattice(tm) Cおよび，Atari 520/1040STへ移植し，
+ST Hack 1.03を開発した．
+
+Mike Stephensonはこれら色々なバージョンを一緒に統合し，新な機能を加え，
+Nethackバージョン1.4を制作した．彼はその後1000にも及ぶ，NetHack 1.4の
+改良やデバッグを重ね整え，NetHackバージョン 2.2および 2.3をリリースした．
+ 
+その後，Mikeはゲームを大幅に書き換え，調整し，Ken Arromdee,
+Jean-Christophe Collet, Steve Creps, Eric Hendrickson, Izchak Miller,
+Eric S. Raymond, John Rupley, Mike Threepoint および Janet Walzを含む
+チームの先頭に立ち，NetHack 3.0cを制作した．同じグループがその後10のリ
+ビジョンパッチをリリースし，3.0をアプデートした．
+
+NetHack 3.0は Eric R. Smithによって Atariに移植され，Timo Hakulinenによって
+OS/2に移植され， Dabvid Gentzelによって VMSに移植された．彼ら3人および，
+Kevi Darcyは後に 3.0のリビジョンを制作したメイン開発チームに合流した．
+
+Olaf Seibertは NetHack 2.3および 3.0を Amigaに移植した． Norm Meluch,
+Stephen Spackman および Pierre Martineauは PC NetHack 3.0のオーバレイ
+コードをデザインした．Johnny Leeは NetHack 3.0を Macintoshに移植した．
+沢山の他のダンジョナーにより，彼らは，PC, Macintosh および Amigaに
+3.0後のリビジョンを移植した．
+
+Nethackの次のメジャーバージョンのリリースが途絶えた一ヶ月の間に，2つの
+冒険的な魂が、神聖なNethack定式への自分の修正を試みた．Tom Proudfootと
+YuvalはNethack++(それはすぐにNethack--へと改名された)をリリースした――
+新しい怪物，アイテムおよび他の様々な修正を含んでいた．
+
+Mike Stephensonを先頭に，Izchak Millerおよび Janet Walzが調整し，
+今や Ken Arromdee, David Cohrs, Jean-Christophe Collet, Kevin Darcy, 
+Matt Day, Timo Hakulinen, Steve Linhart, Dean Luick, Pat Rankin, 
+Eric Raymond および， Eric Smithを含む開発チームは3.0の抜本的なリビジョン
+に着手した．彼らはゲームをデザインしなおし，コードの大きな改良を行なった．
+彼らはマルチプルダンジョン，新しいディスプレイ，キャラクター毎のクエスト，
+新しい最終試練および沢山の新しい機能を加え，NetHack 3.1を制作した．
+
+Ken Lorber, Gregg Wonderlyおよび Grag Olsonは Richard Addison,
+Mike Passaretti および Olaf Seibertの手を借り Amigaの NetHack 3.1を開発
+した．
+
+Norm Meluch および Kevin Smolkowskiは Carl Schelin, Stephen Spackman
+Steve VanDevenderおよび Paul Winnerの手を借り NetHack 3.1をPCに移植した．
+
+Jon Watte および Hao-yang Wangは Ross Brown, Mike Engber, David Hairston,
+Micheal Hamel, Jonathan Handler, Johnny Lee, Tim Lennan, Rob Menke
+および Andy Swansonの手を借り Macintoshの Nethack 3.1を開発し，MPW用に
+移植した．それの開発の際，Barton Houseは Think Cに移植した．
+
+Timo Hakulinenは NetHack 3.1を OS/2に移植した． Eric Smithは NetHack 3.1
+を Atariに移植した． Pat Rankinは Joshua Delahuntyの手を借り，NetHack 3.1
+のVMSバージョンに応じている．Michael Allisonは NetHack3.1を Windows NTに
+移植した．
+
+Dean Luickは David Cohrsの手を借り，X11のNetHack 3.1を開発した．
+Warwick AllisonはNetHack3.2用のゲームの"タイル"バージョンを追加し、視覚的な
+NetHack用タイルを生成した．
+
+時は流れ，Chrisの手によってNetHack--が3.11に移植された．
+
+Stephen White then released his own  modification  known  as Nethack  Plus,
+which  contained  new  character classes.  Unbeknownst to the world at large,
+Tom Proudfoot  took  this  source and combined it with his Nethack--.
+Stephen White went on to add weapon skills,  which were eventually integrated
+into  the  next version of Nethack,  and other features.
+
+In February 1996,  Tom Proudfoot released SLASH V1.  Including part of
+Stephen White's Nethack Plus and his  own  Nethack--, leaving  unmentioned
+his own slew of further modifications,  this is perhaps the best known of
+the Nethack modifications.  Six versions of this,  ending with SLASH V6,
+are known to exist.
+
+The 3.2 development team, comprised of: Michael Allison; Ken Arromdee; David
+Cohrs; Jessie Collet; Steve Creps; Kevin Darcy; Timo Hakulinen; Steve
+Linhart; Dean Luick; Pat Rankin; Eric Smith; Mike Stephenson; Janet Walz; and
+Paul Winner, released version 3.2 in April of 1996.
+
+Version 3.2 marks the tenth anniversary of the formation of the development
+team.  In a testament to their dedication to the game, all thirteen members
+of the original development team remained on the team at the start of work
+on the current release.  During the interval between the release of 3.1.3
+and 3.2, one of the founding members of the development team, Dr. Izchak
+Miller, passed away.  This release of the game is dedicated to him by the
+development and porting teams.
+
+Version 3.2 is more stable than previous versions, (it is hoped).  Many bugs
+have been fixed, abuses eliminated, and game features tuned for better game
+play.  The menus have been modified to give players more choices in styles
+for menus which require pick list selections.  A graphical display has been
+added for some ports.  (Added to the X11 port by Dean Luick, to the
+Amiga port by Ken Lorber, and to the DOS port by Michael Allison.)  The
+spell system and weapon proficiency portions of the game were adapted by
+Stephen White from his NHPlus variant.  (The #qualifications' and '#enhance'
+extended commands were added to make use of these changes.)  Additional game
+changes worth mentioning: light sources no longer have to be carried by the
+player to be used; wands can be destroyed if desired (use the 'a'pply
+command); treasures can be found buried in walls or in the floor; the
+'#untrap' command has been improved; and, wands of probing now provide more
+information.  Other more subtle changes have also been added to the game.
+You will have to play the game to discover them.
+
+Pat Rankin maintained 3.2 for VMS.
+
+Michael Allison, Yitzhak Sapir, and Paul Winner, with help from Steve Linhart,
+Kevin Smolkowski, Mike Stephenson and Stephen White ported 3.2 for MSDOS.
+Keizo Yamamoto and Ken Washikita ported 3.2 for the NEC 98xx machines popular
+in Japan.
+
+Ken Lorber, Andy Church, and Gregg Wonderly, with help from Richard Addison,
+ported 3.2 for the Amiga.
+
+Dean Luick ported 3.2 to the Macintosh.
+
+Eric Smith and Warwick Allison ported 3.2 for the Ataris.
+
+Michael Allison ported 3.2 for the Microsoft Windows NT platform.
+
+Timo Hakulinen remains responsible for the OS/2 port.
+
+                           - - - - - - - - - -
+ 
+時々，堕落した人物が彼らのネットランドからゲームの手助けとなるような興
+味をそそる改良案を送ってくる．ダンジョンの神はこれら堕ちるところまで堕
+ちた人間たちの名前をきまぐれでひかえている．そのダンジョンナーたちは以
+下である:
+
+    Andy Church             Izchak Miller             Mike Passaretti
+    Andy Swanson            Janet Walz                Mike Stephenson
+    Ari Huttunen            Jean-Christophe Collet    Norm Meluch
+    Barton House            Jochen Erwied             Olaf Seibert
+    Benson I. Margulies     John Kallen               Pat Rankin
+    Bill Dyer               John Rupley               Paul Winner
+    Boudewijn Wayers        John S. Bien              Pierre Martineau
+    Bruce Holloway          Johnny Lee                Ralf Brown
+    Bruce Mewborne          Jon W{tte                 Richard Addison
+    Carl Schelin            Jonathan Handler          Richard P. Hughey
+    David Cohrs             Joshua Delahunty          Rob Menke
+    David Gentzel           Keizo Yamamoto            Roland McGrath
+    David Hairston          Ken Arromdee              Ross Brown
+    Dean Luick              Ken Lorber                Scott R. Turner
+    Del Lamb                Ken Washikita             Stephen Spackman
+    Deron Meranda           Kevin Darcy               Stephen White
+    Eric Backus             Kevin Sitze               Steve Creps
+    Eric Hendrickson        Kevin Smolkowski          Steve Linhart
+    Eric R. Smith           Kevin Sweet               Steve VanDevender
+    Eric S. Raymond         Mark Gooderum             Tim Lennan
+    Frederick Roeber        Matthew Day               Timo Hakulinen
+    Gil Neiger              Merlyn LeRoy              Tom Almy
+    Greg Laskin             Michael Allison           Tom West
+    Greg Olson              Michael Hamel             Warwick Allison
+    Gregg Wonderly          Michael Sokolov           Yitzhak Sapir
+    Hao-yang Wang           Mike Engber
+    Helge Hafting           Mike Gallop
diff -aurN slashem-0.0.7E6F2/dat/jopthelp jslashem-0.0.7E6F2-J0.0.8/dat/jopthelp
--- slashem-0.0.7E6F2/dat/jopthelp	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jopthelp	2004-06-28 21:56:42.000000000 +0900
@@ -0,0 +1,282 @@
+全てのバージョンで可能な真偽オプション(デフォルトは[]である．):
+
+autodig        掘る道具を装備して移動した場合は掘る                    [FALSE]
+autopickup     移動したとき自動で物を拾う                              [TRUE]
+autoquiver     何かを射るときに矢筒(など)が空の場合，適当な武器を
+               装填する．                                              [FALSE]
+cmdassist      方向やその他のコマンドでエラー時にヘルプを表示する      [TRUE]
+confirm        ペットや友好的な怪物を攻撃する前に確認する              [TRUE]
+DECgraphics    ダンジョンにDEC/VTの罫線を使用する                      [FALSE]
+disclose       ゲーム終了時の情報表示形態                              [TRUE]
+eight_bit_tty  8-bitキャラクタを端末にそのまま送信する                 [FALSE]
+extmenu        拡張コマンド (#) を選択するときにメニューを使用する     [FALSE]
+fixinv         できるだけ，同じ物は同じ文字に当てる                    [TRUE]
+help           '/'コマンド時にさらなる情報を見るか確認する             [TRUE]
+IBMgraphics    ダンジョンにIBM拡張文字を使用する                       [FALSE]
+ignintr        ブレークを含むインタラプトシグナルを無視する            [FALSE]
+legacy         ゲーム最初にイントロダクションを表示する                [TRUE]
+lit_corridor   暗い回廊でもプレーヤの周囲を明るく表示する              [FALSE]
+lootabc        箱を開けたときにo/i/bではなくa/b/cを使う                [FALSE]
+mail           メールデーモンの存在を許す                              [TRUE]
+null           端末にヌルを送る．                                      [TRUE]
+               移動する物体が部屋をテレポートしているように見えるなら
+               ば，このオプションをオフにせよ．(強制的にディレイコード
+               を送るようになる)
+number_pad     yuhjklbnの代わりに移動にナンバーパッドを使用する        [FALSE]
+perm_invent    持ち物一覧をずっとウィンドウに表示しておく              [FALSE]
+pickup_thrown  投げたものを自動的に拾う                                [TRUE]
+prayconfirm    #prayコマンドが実行されるときに確認する                 [TRUE]
+pushweapon     何かを新しく装備するとき，右手の武器を左手に持ち替える  [FALSE]
+rawio          raw I/Oの仕様を許可する                                 [FALSE]
+rest_on_space  スペースバーで休憩する                                  [FALSE]
+safe_pet       (わかっているなら)ペットを攻撃するのを避ける            [TRUE]
+showrace       自分自身を職業でなく種族で表示する                      [FALSE]
+silent         端末のベルを鳴らさない                                  [TRUE]
+sortpack       似たような種類の物をまとめる                            [TRUE]
+sound          enable messages about what your character hears    [TRUE]
+               (note: this has nothing to do with your computer's audio
+               capabilities, and the game resets it periodically)
+sparkle        魔法攻撃にレジストしたとき(火への耐性を持つ怪物に       [TRUE]
+               火の攻撃を行ったときなど)にエフェクトを表示する
+standout       --More--を太字で表示する                                [FALSE]
+time           ゲームの経過時間を表示する                              [FALSE]
+tombstone      死んだとき墓石を表示する                                [TRUE]
+toptenwin      トップ10を標準出力ではなくウィンドウに表示する          [FALSE]
+travel         enable the command to travel to a map location via [TRUE]
+               a shortest-path algorithm, usually invoked by '_'.
+verbose        ゲームのコメントを詳しく表示する                        [TRUE]
+
+
+Jnethack の色々なバージョンにはさらに真偽オプションが存在する．(あな
+たは，'O'コマンドを使用して現在のオプションの設定をチェックし，どのオ
+プションがあなたのバージョンにあるか知ることができる)
+
+コンパイル時に INSURANCEが設定されてるならば:
+checkpoint     階を移動する度にゲームセーブし，可能ならばプログ        [TRUE]
+               ラムがクラッシュしても復活できる
+
+コンパイル時に NEWSが設定されているならば:
+news           スタートアップ時にゲーム管理者からのメッセージを        [TRUE]
+               表示する
+
+コンパイル時に DGKが設定されているならば:
+BIOS           IBM ROM BIOSを使用する                                  [FALSE]
+rawio          I/Oを直接操作する(スタート時のみ設定可能)               [FALSE]
+
+コンパイル時に EXP_ON_BTOLが設定されているならば:
+showexp        経験値を表示する                                        [FALSE]
+
+コンパイル時に SCORE_ON_BOTLが設定されているならば:
+showscore      スコアを表示する                                        [FALSE]
+
+コンパイル時に SHOW_DMGが設定されているならば:
+showdmg        攻撃したとき/受けたときのダメージをメッセージ行         [FALSE]
+               に表示する
+
+コンパイル時に SHOW_WEIGHTが設定されているならば:
+invweight      アイテム一覧にて大括弧'[]'つきで重さを表示します        [FALSE]
+showweight     所持品の重さの総計を最下行に表示します                  [FALSE]
+
+コンパイル時に TEXTCOLORが設定されているならば:
+color          画面の物の色々な色を使用する                  [TRUE for micros]
+hilite_pet     ペットを強調表示する                                    [FALSE]
+
+コンパイル時に TEXTCOLORとMENU_COLORが設定されているならば:
+menucolors     メニューをカラーで表示します                  [TRUE for micros]
+
+コンパイル時に TIMED_DELAYが設定されているならば(ttyインターフェースのみ):
+timed_delay    UNIXやVMSではディスプレイへ表示をポーズする代りに       [TRUE]
+               タイマーを使う．MSDOSで termcapライブラリを使用し
+               ない場合は，表示をポーズのあるなしにかかわらず
+               タイマーが使われる．
+
+コンパイル時に KEEP_SAVEが設定されているならば:
+keep_savefile  リストア後にセーブファイルを保持します                  [FALSE]
+
+コンパイル時に USE_TILESが設定されているならば(MSDOSプロテクトモードのみ) :
+preload_tiles  タイル画像があらかじめ全てRAMメモリ上に読み込む        [TRUE]
+               かどうかを指定します．これを行うことでタイル表示
+               はより高速化しますが，メモリ使用量は増大します．
+
+任意の真偽オプションは'!'や'no'をつけることにより否定できる．
+
+パラメータつきオプションは option_name:option_value のように既述する．
+漢字コードは内部コードにする必要がある．(普通はEUC)
+
+ゲーム中に設定できるパラメータつきオプションは:
+
+boulder         巨岩の文字を他のものに変える [`]
+disclose        ゲーム終了時に見る情報の種類 [all]
+fruit           好物の果物の名前 [slime mold]
+                (基本的にNetHackが気まぐれで使ってきた)
+menustyle       複数オブジェクトを選択するときのユーザーインタフェース
+                Traditional -- 1つのアイテムを迅速に選択
+                Combination -- 対象とするクラスを迅速に選択しメニュー表示
+                Partial     -- クラス選択を使用しない
+                Full        -- 対象とするクラスをメニューで選択し，
+                               オブジェクトをメニューで
+                最初の一文字('T', 'C', 'P', 'F')で決定．'N'は 'T'
+                と同様の意味．[Full]                            
+packorder       背負い袋内の物の順番を決めるシンボル [")[%?+!=/(*`0_]
+                (いくつかの物体しか特定しない場合，残りのはデフォルトの
+                 順番に並ぶ)
+pickup_burden   何かを持ちあげようとしてふらめく状態になったときに，続けるか
+                どうかの確認をする．(通常:U，よろめき:B，圧迫:S，限界:N，
+                荷重:N，超過:T)  [B]
+pickup_types    自動で拾いあげる物のシンボル [all]
+runmode       マップ上にて何ステップ分もの行動の表示を行うときどのように画面
+              表示を行うかを設定します．(トラベルコマンド使用時など):
+              teleport -- 動きが止まるまで画面上に描画しません．
+              run      -- 周期的に画面更新します．(7ステップごと)
+              walk     -- 全ステップで画面更新します．
+              crawl    -- 更新はwalkと同じですが，一歩ごとにデレイをかけます．
+              (This only affects screen display, not actual movement.)  [run]
+scores          ゲーム終了時に見るスコアの種類 [!own/3 top/2 around]
+                トップスコア，トップスコアの周辺，あなた自身のスコアの
+                組み合せを選ぶ． 
+suppress_alert 過去のバージョンからみて動作を変更したキーを使用したときに
+               警告を表示していますが，この警告の表示を止める設定．
+               例えば'Q'コマンドで昔は終了していたが今は#quitで終了する．
+               (例: suppress_alert:3.3.1と指定したとき，そのバージョン以下
+               の警告の表示を停止します．)                            [(none)]
+kcode           端末の漢字コード [EUC]
+
+tileset       the name of a predefined (with TILESET=) tileset to use.  This
+              option may be negated (eg., !tileset) or set to an emty value
+              to disable tiles.  If the windowing port does not support the
+              named tileset then a suitable alternative will be used.
+              [depends on windowing port]
+
+スタート時にのみ設定できるパラメータつきオプションは:
+
+align      ゲームスタート時の属性(align:lawful, align:neutral, align:chaotic
+           のいずれか)．最初の一文字を指定するだけでよい．[RANDOM]
+catname    冒険を供にする最初の猫の名前 [NONE]
+dogname    冒険を供にする最初の犬の名前 [NONE]
+dungeon
+           ダンジョンを書くためのデフォルトのシンボルのリスト
+           シンボルは沢山の処理をこなせるようになっている，
+           コントロールキャラクタ ^xやメタキャラクタ \Mxはもちろん
+           \nや \081のような C言語ライクなエスケープを使える．
+           普通, \は次の文字を強制的に文字通りにする．沢山のシン
+           ボルが重複され使用されているので，ここではいくつかの注
+           意とともにシンボルの代りに名前を与える:
+
+           stone                                   (固い岩，普通は ' ' )
+           vwall hwall tlcorn trcorn blcorn brcorn            (部屋の壁)
+           crwall tuwall tdwall tlwall trwall   (まがりくねった迷路の壁)
+           nodoor vodoor hodoor             (なし，垂直，水平の開いた扉)
+           vcdoor hcdoor                          (垂直，水平の閉じた扉)
+           irocnbars tree room darkcorr litcorr
+           upstair dnstair upladder dnladder
+           altar grave throne sink toilet fountain pool ice lava
+           vodbridge hodbridge                (垂直，水平の開いた跳ね橋)
+           vcdbridge hcdbridge                (垂直，水平の降りた跳ね橋)
+           air cloud water
+           default:  \ |--------||.-|++.##<><>_|\\##{}.}..##\ #}
+effects
+           dungeon同様，特殊効果のシンボル．
+           vbeam hbeam lslant rslant                  (普通は杖のビーム)
+           digbeam flashbeam              (穴掘りとカメラの特殊なビーム)
+           boomleft boomright                               (ブーメラン)
+           ss1 ss2 ss3 ss4                                  (防御の課程)
+           sw_topl, sw_topm, sw_topr,           (飲み込まれたときの上段)
+           sw_midl, sw_midr,                    (飲み込まれたときの中段)
+           sw_botl, sw_botm, sw_botr            (飲み込まれたときの下段)
+           mextl mextm mextr           (magical explosion matrix top row)
+           mexml mexmm mexmr        (magical explosion matrix middle row)
+           mexbl mexbm mexbr        (magical explosion matrix bottom row)
+           fextl fextm fextr              (fire explosion matrix top row)
+           fexml fexmm fexmr           (fire explosion matrix middle row)
+           fexbl fexbm fexbr           (fire explosion matrix bottom row)
+           cextl cextm cextr              (cold explosion matrix top row)
+           cexml cexmm cexmr           (cold explosion matrix middle row)
+           cexbl cexbm cexbr           (cold explosion matrix bottom row)
+           dextl dextm dextr             (death explosion matrix top row)
+           dexml dexmm dexmr          (death explosion matrix middle row)
+           dexbl dexbm dexbr          (death explosion matrix bottom row)
+           lextl lextm lextr         (lightning explosion matrix top row)
+           lexml lexmm lexmr      (lightning explosion matrix middle row)
+           lexbl lexbm lexbr      (lightning explosion matrix bottom row)
+           pextl pextm pextr            (poison explosion matrix top row)
+           pexml pexmm pexmr         (poison explosion matrix middle row)
+           pexbl pexbm pexbr         (poison explosion matrix bottom row)
+           aextl aextm aextr              (acid explosion matrix top row)
+           aexml aexmm aexmr           (acid explosion matrix middle row)
+           aexbl aexbm aexbr           (acid explosion matrix bottom row)
+           default:  |-\\/*!)(0#@*/-\\||\\-//-\\|\ |\\-//-\\|\ |\\-//-\\|\ |\\-/
+	            /-\\|\ |\\-//-\\|\ |\\-//-\\|\ |\\-//-\\|\ |\\-/
+gender     ゲーム開始時の性別(gender:male または gender:female)．最初の
+           一文字を指定するだけでよい．maleやfemaleオプションも使用でき
+           るが，genderオプションが優先する．
+horsename  冒険を供にする最初の馬の名前 [NONE]
+ghoulname  冒険を供にする最初のグールの名前 [NONE]
+menucolor  メニューに色を設定します．(menucolor:"regex_string"=color)
+           もしオプション"menucolors"が有効なら，メニューは異なる色で
+           表示されるでしょう．
+           例えば，「menucolor:" blessed "=green」と設定すれば
+           " blessed "というテキストが含まれているメニューの全ての行が
+           greenになります．
+           文字列のマッチングには正規表現が使用できます．
+           使用可能な色はblack, red, green, brown, blue, magenta, cyan,
+           gray, orange, lightgreen, yellow, lightblue, lightmagenta,
+           lightcyan およびwhiteです．
+           menucolorはあなたが望むままに幾らでも定義できます．後置
+           で定義されたものほど有効とされます．
+           menucolorの設定はコンパイル時にTEXTCOLORとMENU_COLORを有
+           効にしてコンパイルしたときのみ有効となります．  [NONE]
+menu_*     メニューコマンドで使用する一文字のキャラクタ．以下にあるのは
+           全てのコマンドのメニューである．それぞれに続く( )内文字の意味
+           は次の通り: x = x11, t = tty．
+           menu_deselect_all  全てのアイテムを非選択 [-](xt)
+           menu_deselect_page 現在表示されているページのアイテムを非選択 [\](t)
+           menu_first_page    メニューの最初のページへ [^](t)
+           menu_invert_all    全てのアイテムを反転 [@](xt)
+           menu_invert_page   現在表示されているページのアイテムを反転 [~](t)
+           menu_last_page     メニューの最後のページへ [|](t)
+           menu_next_page     次のメニューのページへ [>](t)
+           menu_previous_page 前のメニューのページへ [<](t)
+           menu_search        メニューの検索 [:](x)
+           menu_select_all    全てのアイテムを選択 [.](xt)
+           menu_select_page   現在表示されている全てのアイテムを選択 [,](t)
+
+monsters
+           dungeon同様，怪物のためのシンボル．
+           デフォルト:  abcdefghijklmnopqrstuvwxyz
+                        ABCDEFGHIJKLMNOPQRSTUVWXYZ@\ \\&;:~]
+
+msghistory 先頭行の履歴を保存数 [20]
+name       あなたの名前 [システムかあなたに名前を尋ねて得られたもの]
+objects    dungeon同様，オブジェクトのシンボル
+           デフォルト:  ])[="(%!?+/$*`0_.
+pettype    あなたのキャラクタがどちらも使えるなら，あなたの好きな
+           ペットの種類(猫か犬か) [RANDOM]
+race       ゲーム開始時の種族 (例 race:Human, race:Elf) [RANDOM]
+role       ゲーム開始時の職業 (例 race:Barbarian, role: Valk)
+           最初の一文字を指定するだけでよいが，単に最初にマッチした
+           職業を選ぶだけである．完全に識別可能な文字を記述すること
+           をお薦めする．名前の後に職業を指定することも可能であるが，
+           (例 Isami-V)roleオプションが優先する．
+traps
+           dungeon同様，罠のためのシンボル．
+           arrow_trap dart_trap falling_rock_trap squeaky_board
+           bear_trap land_mine rolling_boulder_trap sleeping_gas_trap
+           rust_trap fire_trap pit spiked_pit hole trap_door
+           teleportation_trap level_teleporter magic_portal web statue_trap
+           magic_trap anti_magic_trap polymorph_trap
+           デフォルト:  ^^^^^^^^^^^^^^^^^"^^^^
+windowtype 使用するウインドゥシステム [システム依存]
+wolfname   冒険を供にする最初の狼の名前 [NONE]
+
+Compound option if TTY_GRAPHICS was set at compile time:
+msg_window the type of message window to use:
+           single      -- One message at a time
+           full        -- Full window with all saved top line messages
+           reverse     -- Same as full, but messages printed most-recent-first
+           combination -- Two single messages, then as full
+           default:  single
+
+オプションの例:
+!autopickup,!tombstone,name:Gandalf,scores:own/3 top/2 around
+female,nonews,dogname:Rover,dungeon: |--------||.-|++.##<><>_\\#{}.}..## #}
+rest_on_space,!verbose,menustyle:traditional
diff -aurN slashem-0.0.7E6F2/dat/joracles.txt jslashem-0.0.7E6F2-J0.0.8/dat/joracles.txt
--- slashem-0.0.7E6F2/dat/joracles.txt	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/joracles.txt	2004-06-28 11:31:04.000000000 +0900
@@ -0,0 +1,143 @@
+-----
+汝その杖使いきりしとき，
+汝それを振りまわせ．
+はじめは無のみ生ずれど，
+その働きに応え，
+末期の力が引きだされん．
+-----
+げに店主が心せしとも，
+賊は杖で穴を掘り，
+金を払うことなく逃げ退き，
+あまたの品を盗まん．
+-----
+汝武具の錆に悩まされしときは，
+乱れしときに武具の力を高める書物を読まん．
+脂の軟膏は，
+瞬きの間なれど，
+等しき守りの種を与えん．
+-----
+コカトリスなる物を見よ，
+小なる背丈なれど隠れた力を秘めし．
+コカトリスは触れしものを石と化せん．
+冒険者よ！石となるのを好まぬならば，
+賢き冒険者の行いを見ならわん！
+死したるトカゲを食すとき．
+酸のブロブを食すとき．
+-----
+冒険者よ！
+機知に富む冒険者は，
+神秘的な意味を知りたり．
+ドラゴンの住みかの鱗から，
+いずれの鎧が作られしや．
+-----
+汝の目が幻にまどわされしとき，
+冒険者の中でよく知られしことあり．
+ひと飲みの超回復の薬が五感を直らせん．
+しかし，忘れてはならぬ！
+汝を病に侵せし卑しき薬も等しき効あらん！
+-----
+神の寵愛を受けし水やトカゲの肉を食せ！
+さすれば乱れし汝を解放せん．
+極めて純潔なる生物の角を使え！
+さすれば他の苦悩も同様に解放されん！
+-----
+汝遠く離れた地に疾く立ち渡らんと望むなら，
+瞬間移動の制御を収得せよ．
+そして常には汝の身をその地でのみ瞬間移動さする巻物を手にし，
+乱れしときに読むべし．
+肝々し冒険者は巻き物や薬なくとも，
+特別な待ち伏せに飛び込みてそれを成し遂げん．
+-----
+この地を訪ねる全ての冒険者よ！
+恐るべきメデューサを出抜けんと思いし冒険者よ！
+殊なき諌めを汝に贈らん！
+汝の目を目隠しで覆い
+メデューサの姿を反射する鏡を見い出すべし！
+-----
+"ad aerarium"と書かれし場所を，
+入念に探索せん．
+時に，金持ちクロイソスの，
+魔法の記念倉庫へと送られる罠の道をあきらかにできるだろう．
+されど忘るることなかれ．
+倉庫から金を盗みて出しは
+入るよりはるかに難し．
+-----
+賢い店主は値段を吊りあげん．
+きらきら光る出で立ちの旅人と行見たとき，
+不公正な常連客の顔つきの旅人と見しとき．
+彼らは偏愛する．
+行い良き客を見しとき，
+公正な顔の客を見たとき，
+無作法者は利を得ず．
+----- SINKS
+台所の流し台は，
+その表に触れしことにより
+偉大なる真理や多くの訓戒を得られん．
+そのむさぼり喰らうからくりは
+多くの指輪を吸い込まん．
+-----
+魔法の生物の肉体は，
+食みたる者に魔法の特性をしばしば与えん．
+さまよう目の新しき死体は，
+魔法使いの間で高い値をつけん．
+盲目のとき心に浮かびあがる，
+テレパシーの授与という使い道のため，
+-----
+祝福と呪いの発見は神の領分である．
+神はこの情報を与えん．
+崇拝の地において死すべきものへ，
+献身を捧げる死すべきものへ．
+-----
+神は立派な嘆願者に力をもたらさん．
+伝説で語りつがれた名のある力の大剣，
+力ある旅人は助けなしに，
+生み出すことができる．
+オークに忌み嫌われるエルフの血統の大剣を．
+-----
+強力な魔除けには数多の逸話あり，
+その原型は古代のイェンダー．
+魔除けは畏怖の力を持ち，
+神はその偉大さを望む．
+死すべきものはその恐しき能力の一部に触れるのみ．
+逸話は死すべきものに告げている．
+この魔法の魔除けを所有しているとき．
+彼らの目は見ることができぬものを見，
+魔法の輸送道の場所を探せると言う．
+死すべきものはその力を引き出すためには
+身につけねばならぬとも言われている．
+しかし均衡のため，
+そのような偉大な力を得るには，
+大きな犠牲を払わねばならぬ．
+-----
+汝モーロックの聖域に踏みこまんとするなら，
+ゲヘナの奥深く地面の揺れし場所より入らん．
+汝は三種の魔法の道具の手助けが必要なり．
+祝福されし燭台の光が道を開き，
+銀のベルの清かなる音が汝に告げ，
+モーロックの本より読まれし恐しきルーンは地を力強く揺らさん．
+-----
+ダンジョンの奥のさらなる奥で，
+その下を守るべく城が行く手をはばまん．
+そこには望みの杖が置かれん．
+汝入ろうとするならば，
+音楽を奏でるべし．
+正しき音色ならば
+跳ね橋がおりてこよう．
+その音色は神のみぞ知るものなれど，
+音楽の推理は可能なり．
+それが不可能ならば，
+城の裏門に行くのだ．
+-----
+すべての迷宮の一つ上，
+直死の魔眼を持つ彼女は嘘をつく．
+石化させることなく倒せれば，
+魔法の乗馬を授けられるであろう．
+----- ELBERETH
+Elberethの名前は，
+汝足元にその名を書くならば
+汝の敵に畏怖の念を与えん．
+汝極めて静かにしておれば，
+偉大な力を得ることが可能なり．
+足でその文字を
+消さないように注意せよ．
+-----
diff -aurN slashem-0.0.7E6F2/dat/jquest.txt jslashem-0.0.7E6F2-J0.0.8/dat/jquest.txt
--- slashem-0.0.7E6F2/dat/jquest.txt	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jquest.txt	2004-08-27 09:21:21.171875000 +0900
@@ -0,0 +1,7801 @@
+#	SCCS Id: @(#)quest.txt	3.4	2002/03/26
+#       Copyright (c) 1991 by M. Stephenson
+# NetHack may be freely redistributed.  See license for details.
+#
+#	The quest text file for Slash'em (NH3.4.0 version).
+#
+#       These are the "standard" message numbers from qtext.h.  All class
+#       dialogue must have at least these entries.
+#
+#       QT_FIRSTTIME     1
+#       QT_NEXTTIME      2
+#       QT_OTHERTIME     3
+#
+#	QT_GUARDTALK	 5	/* 5 random things guards say before quest */
+#	QT_GUARDTALK2	10	/* 5 random things guards say after quest */
+#
+#	QT_FIRSTLEADER	15
+#	QT_NEXTLEADER	16
+#	QT_OTHERLEADER	17
+#	QT_LASTLEADER	18
+#	QT_BADLEVEL	19
+#	QT_BADALIGN	20
+#	QT_ASSIGNQUEST	21
+#
+#	QT_ENCOURAGE	25	/* 1-10 random encouragement messages */
+#
+#	QT_FIRSTLOCATE	35
+#	QT_NEXTLOCATE	36
+#
+#       QT_FIRSTACQUIRE 40
+#       QT_NEXTACQUIRE  41
+#
+#       QT_FIRSTNEMESIS 50
+#       QT_NEXTNEMESIS  51
+#       QT_OTHERNEMESIS 52
+#       QT_NEMWANTSIT   53      /* you somehow got the artifact */
+#
+#       QT_DISCOURAGE   60      /* 1-10 random maledictive messages */
+#
+#       QT_GOTIT        70
+#
+#       QT_KILLEDNEM    80
+#       QT_OFFEREDIT    81
+#	QT_OFFEREDIT2	82	/* if you throw artifact to leader after #81 */
+#
+#       QT_POSTHANKS    90
+#       QT_HASAMULET    91
+#
+#	Japanese version staff
+#
+#	director	issei@jaist.ac.jp
+#	Arc		issei@jaist.ac.jp
+#	Bar		issei@jaist.ac.jp
+#	Cav		issei@jaist.ac.jp
+#	#Elf		fujieda@jaist.ac.jp
+#	#Fig		issei@jaist.ac.jp
+#	*Fla		shin@kmc.kyoto-u.ac.jp
+#	Hea		tshira@mtl.t.u-tokyo.ac.jp
+#	*Ice	shin@kmc.kyoto-u.ac.jp
+#	Kni		mya@jaist.ac.jp	
+#	*Nec	shin@kmc.kyoto-u.ac.jp
+#	Pri		s92458km@sfc.keio.ac.jp
+#	Ran		**???**
+#	Rog		issei@jaist.ac.jp
+#	Sam		issei@jaist.ac.jp
+#	Tou		s92458km@sfc.keio.ac.jp
+#	*Und	shin@kmc.kyoto-u.ac.jp
+#	Val		issei@jaist.ac.jp
+#	*Yeo	ssakusha@hotmail.com
+#	Wiz		nao@jaist.ac.jp
+#	general		issei@jaist.ac.jp
+#	angelic/demonic	s92458km@sfc.keio.ac.jp
+#	gypsy fortunes	ssakusha@hotmail.com
+#
+#	for 3.4.0	So-Miya and Kentaro Shirakata
+#	*:for Slash'em (NH3.4.0 version)	So-Miya and Sakusha Shiagnai
+#
+
+#
+#       Archeologist
+#
+%Cc Arc 00001
+#You are suddenly in familiar surroundings.  The buildings in the distance
+#appear to be those of your old alma mater, but something is wrong.  It looks
+#as if there has been a riot recently, or %H has
+#been under siege.
+#
+#All of the windows are boarded up, and there are objects scattered around
+#the entrance.
+#
+#Strange forbidding shapes seem to be moving in the distance.
+あなたは突然見覚えのある場所にいた．遠方に見える建物はあなたの
+母校に違いない，しかし何かが違う．まるで最近，暴動があったか
+%Hが包囲されていたかのように見える．
+
+全ての窓と言う窓は塞がれ，学校の入口は散らかったままだ．
+
+恐しいほど不気味な形をしたものが遠方で動いているのが見えた．
+%E
+%Cp Arc 00002
+#Once again, you are back at %H.
+もう一度，あなたは%Hに戻った．
+%E
+%Cp Arc 00003
+#You are back at %H.
+#You have an odd feeling this may be the last time you ever come here.
+あなたは%Hに戻った．
+ここに戻ってくるのは最後であるような奇妙な気がした．
+%E
+%Cp Arc 00005
+#"Did you see Lash LaRue in 'Song of Old Wyoming' the other night?"
+「こないだの『古きワイオミングの歌』見た？」
+%E
+%Cp Arc 00006
+#"Hey man, got any potions of hallucination for sale?"
+「やぁ，幻覚の薬を売ってくれないかい？」
+%E
+%Cp Arc 00007
+#"Did you see the artifact %l brought back from the last dig?"
+「%lがこの前の発掘調査で持ち帰った聖器を見たかい？」
+%E
+%Cp Arc 00008
+#"So what species do *you* think we evolved from?"
+「我々はいったいどのような生物から進化したんだろう？」
+%E
+%Cp Arc 00009
+#"So you're %ls prize pupil!  I don't know what he sees in you."
+「君は%lの一番の生徒だが，彼が君をどのように見ていることやら．」
+%E
+%Cp Arc 00010
+#"Did you see Lash LaRue in 'Song of Old Wyoming' the other night?"
+「こないだの『古きワイオミングの歌』見た？」
+%E
+%Cp Arc 00011
+#"Hey man, got any potions of hallucination for sale?"
+「やぁ，幻覚の薬を売ってくれないかい？」
+%E
+%Cp Arc 00012
+#"I guess you are guaranteed to make full professor now."
+「今回，あなたが正教授になることが保障されると思います．」
+%E
+%Cp Arc 00013
+#"So, what was worse, %n or your entrance exams?"
+「そうすると，%nとあなたの入学試験のどちらが悪かったのだろう？」
+%E
+%Cp Arc 00014
+#"%oC is impressive, but nothing like the bones I dug up!"
+「%oCは印象的だが，私が掘り出した骨とはわけが違う！」
+%E
+%Cc Arc 00015
+#"Finally you have returned, %p.  You were always
+#my most promising student.  Allow me to see if you are ready for the
+#most difficult task of your career."
+「戻ってきたか，%p君．君は私がもっとも信頼している学生だ．
+  君の人生でもっとも困難な仕事に対する準備が出来たら，私に会うこと
+  を許そう．」
+%E
+%Cp Arc 00016
+#"Again, %p, you stand before me.
+#Let me see if you have gained experience in the interim."
+「また来たか，%p君．私の前に来たまえ．
+  そして，君が経験を積んだかどうか見せてくれたまえ．」
+%E
+%Cp Arc 00017
+#"Once more, %p, you have returned from the field.
+#Are you finally ready for the task that must be accomplished?"
+「もう一度だ，%p君．君は野原から戻ってきた．
+  君は目標を達成しなければならないと言う仕事への準備が出来たの
+  かな？」
+%E
+%Cc Arc 00018
+#"%p, you have failed us.  All of my careful training has been in
+#vain.  Begone!  Your tenure at this college has been revoked!
+#
+#"You are a disgrace to the profession!"
+「%p君，私は君に失望したよ．私は教師としての自信を失なった．
+  どこでも行きたまえ！君の大学での在職権は取り消しだ！
+
+  君は同業者としてまったく恥ずかしいやつだ！」
+%E
+%Cc Arc 00019
+#"%p, you are yet too inexperienced to undertake such a demanding
+#quest.  A mere %r could not possibly face the rigors demanded and
+#survive.  Go forth, and come here again when your adventures have further
+#taught you."
+「%p君，君は私のクエストを実行するにはちょっと経験が足りない
+  ようだ．単なる%rではおそらく厳しさに耐え生き残ることはできない
+  だろう．冒険が教師だ！力をつけろ，そして戻ってこい．」
+%E
+%Cc Arc 00020
+#"%p!  I've heard that you've been using sloppy techniques.  Your
+#results lately can hardly be called suitable for %ra!
+#
+#"How could you have strayed from the %a path?  Go from here, and come
+#back only when you have purified yourself."
+「%p君！私は君がいいかげんな冒険をしていると聞いとるよ．そん
+  なんじゃ%rとはとても呼べないね．
+
+「%aの道からいかにはずれているかわかるか？ここからとっとと消え
+  去り自分自身を浄化して戻ってくるがよい．」
+%E
+%Cc Arc 00021
+#"Grave times have befallen the college, for %na has
+#stolen %o.  Without it, the board of directors of
+#the university will soon have no choice but to revoke our research grants.
+#
+#"You must locate the entrance to %i.  Within it,
+#you will find %n.
+#
+#"You must then defeat %n and return %o
+#to me.
+#
+#"Only in this way will we be able to prevent the budget cuts that could
+#close this college.
+#
+#"May the wisdom of %d be your guide."
+「大学に暗雲がさしかかっている．実は%nが%oを
+  盗んだのだ．あれがないと直ちに大学の理事会は問答言わせず我々
+  の研究を無効にするであろう．
+
+「君は%iの入口に行かねばならない．そこに行けば，
+  %nがいるだろう．
+
+「君は%nを打ち負かさねばらなない．そして%oを取り
+  返すのだ．
+
+「この大学を閉鎖に導く研究費の削除を防ぐにはこれしか方法がない．
+
+「%dの知識が君の助けとならんことを．」
+%E
+%Cp Arc 00025
+#"Beware, for %n is powerful and cunning."
+「気をつけろ！%nは強い上に狡猾なやつだ．」
+%E
+%Cp Arc 00026
+#"To locate the entrance to %i, you must pass
+#many traps."
+「%iの入口へ行くには，多くの危険な罠を通り抜けねばならない．」
+%E
+%Cp Arc 00027
+#"A %nt may be vulnerable to attacks by magical cold."
+「%nは冷気の魔法に弱いはずだ．」
+%E
+%Cp Arc 00028
+#"Call upon %d when you encounter %n."
+「%nに出逢ったら，%dに祈りを求めるのだ．」
+%E
+%Cp Arc 00029
+#"You must destroy %n.  It will pursue you otherwise."
+「君は%nを殺さねばならない．そいつは君を追いかけまわすのだから．」
+%E
+%Cp Arc 00030
+#"%oC is a mighty talisman.  With it you
+#can destroy %n."
+%oは強力な護符だ．それがあれば君も%nを打ちのめせる．」
+%E
+%Cp Arc 00031
+#"Go forth with the blessings of %d."
+「%dの祝福のあらんことを．」
+%E
+%Cp Arc 00032
+#"I will have my %gP watch for your return."
+「我%gが君の帰還を見守らんことを．」
+%E
+%Cp Arc 00033
+#"Remember not to stray from the true %a path."
+「真実の%aの道からはずれぬようつねに注意するのだ．」
+%E
+%Cp Arc 00034
+#"You may be able to sense %o when you are near."
+「君なら%oに近づいたときその存在を感じることができるはずだ．」
+%E
+%Cp Arc 00035
+#You have the feeling that you will soon find the entrance to
+#%i.
+あなたはもうすぐ%iの入口を発見できるような気がした．
+%E
+%Cp Arc 00036
+#Once again, you are near the entrance to %i.
+もう一度，あなたは%iの入口の近くまでやってきた．
+%E
+%Cp Arc 00040
+#You sense the presence of %o.
+あなたは%oの存在を感じた．
+%E
+%Cp Arc 00041
+#The familiar presence of %o is in the ether.
+%oの存在が空気を通してつたわってきた．
+%E
+%Cc Arc 00050
+#"So, %p, you think that you can succeed in recovering
+#%o, when your teacher, %l, has already failed.
+#
+#"Come, try your best!  I shall destroy you, and gnaw on your bones."
+「け！%pよ，お前は%oを奪回できると思っているだろう，だが
+  お前の師である%lは失敗しているのだ．
+
+「さあ，全力で来い！お前の骨は本当にいい味がしそうだ．」
+%E
+%Cc Arc 00051
+#"Again you try to best me, eh %p?  Well, you shall fail again.
+#
+#"You shall never recover %o.
+#
+#"I shall bear your soul to the Plane of Origins for my master's pleasure."
+「け！また来たか！どうせまた失敗さ．
+
+「%oを取り返すなんて不可能だ．
+
+「我がマスターのために，お前の魂をあの世に送ってやろう．」
+%E
+%Cp Arc 00052
+#"You persist yet %p!  Good.  Now, you shall die!"
+「%p！まだ生きていたのか．よし，今度こそ殺してやる！」
+%E
+%Cp Arc 00053
+#"I shall have %o from you, %p, then feast
+#upon your entrails!"
+「%p！おまえから%oを取り返し，はらわたを晩飯にしてやろう！」
+%E
+%Cp Arc 00060
+#"Try your best, %p.  You cannot defeat me."
+「全力でこい%p．お前なんかにゃ殺されないさ．」
+%E
+%Cp Arc 00061
+#"I shall rend the flesh from your body whilst you still breathe!"
+「一瞬でお前の体をひきさいてやるぜ！」
+%E
+%Cp Arc 00062
+#"First you, %p, then I shall destroy your mentor, %l."
+「%p！まずお前を殺して，次に師である%lを殺してやる．」
+%E
+%Cp Arc 00063
+#"Tiring yet, %p?  I draw my power from my master and cannot
+#falter!"
+「まだやるのか%p？私は我があるじから力を得ている．決して死なない
+のさ！」
+%E
+%Cp Arc 00064
+#"I shall rend thy soul from thy body and consume it!"
+「お前の魂を喰ったら本当にうまそうだ！」
+%E
+%Cp Arc 00065
+#"You are far too %a -- it weakens you.  You shall die in this place."
+「%aには程遠いな．お前はこの地で死ぬのだ．」
+%E
+%Cp Arc 00066
+#"%d has forsaken you!  You are lost now!"
+「%dはお前を見すてたぞ！お前はここで消滅するのだ！」
+%E
+%Cp Arc 00067
+#"A mere %r cannot hope to defeat me!"
+「単なる%rじゃオレには勝てん！」
+%E
+%Cp Arc 00068
+#"If you are the best %l can send, I have nothing to fear."
+「%lは本当に一番強いやつを送ってきたのか？これじゃ恐れること
+  など何もない！」
+%E
+%Cp Arc 00069
+#"Die %c!  I shall exhibit your carcass as a trophy."
+「死ね！%cよ．お前の残骸を我がコレクションに加えよう．」
+%E
+%Cc Arc 00070
+#The power of %o flows through your body!  You feel
+#as if you could now take on the Wizard of Yendor himself and win, but
+#you know you must return %o to %l.
+%oの力が体に注がれた！あなたは，まるで大魔法使いイェンダー自身
+を相手にして，勝利できるかのような気持になった．しかし，%oを
+持って%lのもとへ戻らねばならないことに気がついた．
+%E
+%Cp Arc 00080
+#The body of %n dissipates in a cloud of noxious fumes.
+%nの体は毒性の蒸気へと飛び散った．
+%E
+%Cc Arc 00081
+#%lC touches %o briefly, gazes into it,
+#then smiles at you and says:
+#
+#"Well done, %p.  You have defeated the and
+#recovered %o.  But I fear that it shall never be safe
+#here.
+#
+#Please take %o with you.  You, %p, can
+#guard it now far better than I.
+#
+#May the blessings of %d follow you and guard you."
+%lは軽く%oに触れ，それをじっと見つめ，あなたに向って
+微笑みかけた：
+
+「%pよ．よくやった．お前は%nを倒し，%oを
+  取り戻した．しかし，ここに置くのやはり安全ではない．
+
+  %oを持っていくがよい．%pよ．お前に預けておけば安心だ．
+
+  %dの祝福と加護があらんことを．」
+%E
+%Cc Arc 00082
+#"Careful, %p!  %oC might break, and that would be
+#a tragic loss.  You are its keeper now, and the time has come to
+#resume your search for the Amulet.  %Z await your
+#return through the magic portal that brought you here."
+「気をつけろ%p！%oが壊れてしまう．
+  そうなったら大きな痛手だ．お前は%oの守護者だ．
+  魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zがお前を待っているぞ．
+%E
+%Cc Arc 00090
+#"Welcome back, %p.  Have you progressed with your quest to
+#regain the Amulet of Yendor for %d?"
+「よく戻ってきた%pよ．%dのためイェンダーの魔除けを探す旅は
+  進展したかね？」
+%E
+%Cc Arc 00091
+#"Congratulations, %p.  I wondered if anyone could prevail against
+#the Wizard and the minions of Moloch.  Now, you must embark on one
+#final adventure.
+#
+#"Take the Amulet, and find your way onto the astral plane.
+#There you must find the altar of %d and sacrifice the
+#Amulet on that altar to fulfill your destiny.
+#
+#"Remember, your path now should always be upwards."
+「おめでとう%p！私は大魔法使いやモーロックの使い魔に
+  打ち勝てる者がいるのかどうか疑問に思っていたのだ．今，お前は最終試練
+  に向って船出せねばならない．
+
+「魔除けを使い，精霊界への道を見つけるのだ．運命を果すため，お前は
+  %dの祭壇を見つけ，魔除けを祭壇に捧げねばならない．
+
+「お前の進む道は常に一本であることを覚えておくのだ．」
+%E
+#
+#       Barbarian
+#
+%Cc Bar 00001
+#Warily you scan your surroundings, all of your senses alert for signs
+#of possible danger.  Off in the distance, you can %x the familiar shapes
+#of %H.
+#
+#But why, you think, should %l be there?
+#
+#Suddenly, the hairs on your neck stand on end as you detect the aura of
+#evil magic in the air.
+#
+#Without thought, you ready your weapon, and mutter under your breath:
+#
+#    "By %d, there will be blood spilt today."
+ゆっくりとあなたは目蓋を開けた．ありとあらゆる感覚が危険信号を発して
+いる．遠方に%Hの懐かしい光景を%xた．
+
+しかし，何故か%lがそこにいる？！
+
+突然，空中に邪悪な魔法のオーラを感じ，あなたのうなじにむしずが走った．
+
+何も考えず，あなたは武器を構えた．そして一人言をつぶやいた：
+
+    「%dの名において血しぶきを許したまえ」
+%E
+%Cp Bar 00002
+#Once again, you near %H.  You know that %l
+#will be waiting.
+もう一度%Hにやってきた．%lが待っている．
+%E
+%Cp Bar 00003
+#Again, and you think possibly for the last time, you approach
+#%H.
+またやってきた．%Hに来るのは，多分これが最後であろうと思った．
+%E
+%Cp Bar 00005
+#"The battles here have been good -- our enemies' blood soaks the soil!"
+「ここでの戦いは好調だ．敵の血が土壌に浸みこんでるぜ！」
+%E
+%Cp Bar 00006
+#"Remember that glory is crushing your enemies beneath your feet!"
+「栄光とは足元で敵を踏み砕く事だということを忘れるな！」
+%E
+%Cp Bar 00007
+#"There has been little treasure to loot, since the horde arrived."
+「軍団が来てからは，ほとんど略奪する宝箱は残っていない，」
+%E
+%Cp Bar 00008
+#"The horde is mighty in numbers, but they have little courage."
+「軍団は数の力で押してくる，なにせ，あいつらは憶病ものだからな．」
+%E
+%Cp Bar 00009
+#"%lC is a strange one, but he has helped defend us."
+「%lと言うのは変ったやつだ，しかし彼は我々を守ってくれている．」
+%E
+%Cp Bar 00010
+#"The battles here have been good -- our enemies' blood soaks the soil!"
+「ここでの戦いは好調だ．敵の血が土壌に浸みこんでるぜ！」
+%E
+%Cp Bar 00011
+#"Remember that glory is crushing your enemies beneath your feet!"
+「栄光とは足元で敵を踏み砕く事だということを忘れるな！」
+%E
+%Cp Bar 00012
+#"Times will be good again, now that the horde is vanquished."
+「軍団は征服され，またよい時代になるだろう．」
+%E
+%Cp Bar 00013
+#"You have brought our clan much honor in defeating %n."
+「お前は%nを打ち破り，我々一族に多くの名誉をもたらしてくれた．」
+%E
+%Cp Bar 00014
+#"You will be a worthy successor to %l."
+「お前は%lのよい後継者になるだろう．」
+%E
+%Cc Bar 00015
+#"Ah, %p.  You have returned at last.  The world is in dire
+#need of your help.  There is a great quest you must undertake.
+#
+#"But first, I must see if you are ready to take on such a challenge."
+「おお！%pよ．やっと戻ってきてくれたか．この世界は至急お前の
+  助けを必要としている．お前が引き受けねばならぬ偉大なクエストが待ち構え
+  ているのだ．
+「しかし，まずお前がそれを受け負うだけの力があるか調べねばならぬ．」
+%E
+%Cp Bar 00016
+#"%p, you are back.  Are you ready now for the challenge?"
+「%pよ．戻ってきたか．偉大な挑戦の準備は整ったかな？」
+%E
+%Cp Bar 00017
+#"Again, you stand before me, %p.  Surely you have prepared yourself."
+「%pよ．またお前は私の前に立っているのだが，準備は
+  いいかな？」
+%E
+%Cc Bar 00018
+#"Pah!  You have betrayed the gods, %p.  You will never attain
+#the glory which you aspire to.  Your failure to follow the true path has
+#closed this future to you.
+#
+#"I will protect these people as best I can, but soon %n will overcome
+#me and destroy all who once called you %s.  Now begone!"
+「ふん！お前は%pの神を裏切った．お前が熱望する
+  名誉を得ることもないだろう．真実の道を辿りお前の失敗が未来を閉ざす
+  はずだ．
+
+「私はここにいる人々を全力で守るつもりだ，しかしすぐにでも%n
+  が私を倒し，お前を一度でも%sと呼んだ人々を殺すだろう．
+  消えうせろ！」
+%E
+%Cc Bar 00019
+#"%p, I fear that you are as yet too inexperienced to face
+#%n.  Only %Ra with the help of %d could ever hope to
+#defeat him."
+「%pよ，%nと正対するにはちと経験不足のようだな．
+  %Rだけが%dの助けを得て%nを倒せよう．」
+%E
+%Cp Bar 00020
+#"%p!  You have wandered from the path of the %a!
+#If you attempt to overcome %n in this state, he will surely
+#enslave your soul.  Your only hope, and ours, lies in your purification.
+#Go forth, and return when you feel ready."
+「%p！%aの道から外れさまよっているな！この状態で%nを
+  打ちまかそうとするなら，確実にお前の魂はとりこにされるだろう．
+  唯一の望みは自分自身の浄化だ．進め！そして準備ができたと思ったら
+  戻ってこい．」
+%E
+%Cc Bar 00021
+#"The world is in great need of your assistance, %p.
+#
+#"About six months ago, I learned that a mysterious sorcerer, known
+#as %n, had begun to gather a large group of cutthroats and brigands
+#about him.
+#
+#"At about the same time, these people you once rode with `liberated' a
+#potent magical talisman, %o, from a Turanian caravan.
+#
+#"%nC and his Black Horde swept down upon %i and defeated
+#the people there, driving them out into the desert.  He has taken
+#%o, and seeks to bend it to his will.  I detected the
+#subtle changes in the currents of fate, and joined these people.
+#Then I sent forth a summons for you.
+#
+#"If %n can bend %o to his will, he will become
+#almost indestructible.  He will then be able to enslave the minds of
+#men across the world.  You are the only hope.  The gods smile upon you,
+#and with %d behind you, you alone can defeat %n.
+#
+#"You must go to %i.  From there, you can track down
+#%n, defeat him, and return %o to us.  Only
+#then will the world be safe."
+「世界はお前の助けを必要としている，%pよ．
+
+「半年ほど前，私は%nとして知られている神秘的な魔法使いが，
+  殺人鬼や略奪者を集めていると言うのを知った．
+
+「またほぼ同じころ，この地の人間が強力な魔法の護符である%oを
+  ツラニアンの洞窟から持ち去った．
+
+「%nおよび彼の暗黒軍団は，%iに押し寄せ，そこの
+  人々を打ち負かし砂漠へ追いやった．彼は%oを手に入れ
+  彼の意のままにする方法を探している．私は運命の微妙な変化を嗅ぎとり，
+  そしてこの地の人々と合流した．そしてお前に召喚のための力を送ったのだ．
+
+「もし%nが%oを意のままにすることができたならば，
+  彼は不滅の魂を得，世界中の人間の心を奴隷にすることができるだろう．
+  お前は唯一の希望だ．神の祝福があらんことを，
+  また%dの加護があらんことを．お前だけが唯一
+  %nを倒せる．
+
+「お前は%iに行かねばならぬ．ここから%nのところ
+  まで降りて行ける．そして%oを私に戻しておくれ．それが唯一
+  世界を救う方法だ．」
+%E
+%Cp Bar 00025
+#"%nC is strong in the dark arts, but not immune to cold steel."
+「%nは暗黒の術には強い．しかし冷たい鋼には抵抗力がない．」
+%E
+%Cp Bar 00026
+#"Remember that %n is a great sorcerer.  He lived in the time
+#of Atlantis."
+「%nは偉大な魔法使いであることを忘れるな．彼はアトランティス
+  の時代から生きているのだ．」
+%E
+%Cp Bar 00027
+#"If you fail, %p, I will not be able to protect these people long."
+「%pよ．お前が失敗したなら私はこの地の人間を長くは守って
+  いられないぞ．」
+%E
+%Cp Bar 00028
+#"To enter %i, you must be very stealthy.  The horde will be on
+#guard."
+「%iに入るには，よほど静かに行動しなければならぬ．軍団が守って
+  いるはずだ．」
+%E
+%Cp Bar 00029
+#"Call upon %d in your time of need."
+「必要ならば%dを呼ぶのだ．」
+%E
+%Cp Bar 00030
+#"May %d protect you, and guide your steps."
+「%dの加護と導きのあらんことを．」
+%E
+%Cp Bar 00031
+#"If you can lay hands upon %o, carry it for good fortune."
+「%oの上に手をかざすことができたならば，幸運を手に入れられる
+  だろう．」
+%E
+%Cp Bar 00032
+#"I cannot stand against %ns sorcery.  But %d will help you."
+「%nの魔術の前に私は無力だ．しかし%dがお前を助けて
+  くれよう．」
+%E
+%Cp Bar 00033
+#"Do not fear %n.  I know you can defeat him."
+「%nを恐れるな．お前なら彼を倒すことができる．」
+%E
+%Cp Bar 00034
+#"You have a great road to travel, %p, but only after you defeat
+#%n."
+「%pよ，お前の偉大なる冒険は%nを倒してこそ成り立つのだ．」
+%E
+%Cc Bar 00035
+#The scent of water comes to you in the desert breeze.  You know that
+#you have located %i.
+水の匂いが砂漠の風に溶けこんでいる．あなたは%iにいることを
+実感した．
+%E
+%Cp Bar 00036
+#Yet again you have a chance to infiltrate %i.
+また%iに潜入する機会がやってきた．
+%E
+%Cc Bar 00040
+#The hairs on the nape of your neck lift as you sense an energy in the
+#very air around you.  You fight down a primordial panic that seeks to
+#make you turn and run.  This is surely the lair of %n.
+周囲のエネルギーを感じ取り，あなたのうなじの毛が逆立った．
+あなたは振り返って走り去りたいという本能的な恐怖を懸命に抑えつけた．
+ここはまさに%nのすみかなのだ．
+%E
+%Cp Bar 00041
+#Yet again you feel the air around you heavy with malevolent magical energy.
+あなたは再び，重くのしかかってくる
+悪意に満ちた魔法のエネルギーの存在を感じた．
+%E
+%Cc Bar 00050
+#"So.  This is what that second rate sorcerer %l sends to do his bidding.
+#I have slain many before you.  You shall give me little sport.
+#
+#"Prepare to die, %c."
+「そうか，お前が二級魔法使い%lの送りこんできたやつか．
+  ワシはお前の前に随分と殺したもんだ．おまえの相手をするのもいい運動になる
+  だろう．
+
+「死ぬ準備は出来たか？%cよ．」
+%E
+%Cp Bar 00051
+#"I have wasted too much time on you already.  Now, you shall die."
+「お前の準備ができるまで随分と暇だったぞ．ついに，お前の死ぬときが
+  来たか．」
+%E
+%Cp Bar 00052
+#"You return yet again, %c!  Are you prepared for death now?"
+「また来たのか%c！今度こそ死ぬ準備はできたのか？」
+%E
+%Cp Bar 00053
+#"I shall have %o back, you pitiful excuse for %ca.
+#And your life as well."
+「%oを取り戻してやる，哀れを乞うがよい%cよ．
+  そして，おまえの命も同様だ．」
+%E
+%Cp Bar 00060
+#"My pets will dine on your carcass tonight!"
+「ワシのペットがお前の屍の食事を楽しみにしとるわ！」
+%E
+%Cp Bar 00061
+#"You are a sorry excuse for %ra."
+「%rの面目まるつぶれだな．」
+%E
+%Cp Bar 00062
+#"Run while you can, %c.  My next spell will be your last."
+「全力で逃げろ，%c．次の魔法がお前の最後だ．」
+%E
+%Cp Bar 00063
+#"I shall use your very skin to bind my next grimoire."
+「お前の皮を新しい呪文書の装丁に使うとしよう．」
+%E
+%Cp Bar 00064
+#"%d cannot protect you now.  Here, you die."
+「%dはお前を守ってやることなぞできない．死ね．」
+%E
+%Cp Bar 00065
+#"Your %a nature makes you weak.  You cannot defeat me."
+「お前の%aさがお前を弱くするのだ．お前にワシは倒せない．」
+%E
+%Cp Bar 00066
+#"Come, %c.  I shall kill you, then unleash the horde on your tribe."
+「来い，%c．お前を殺してやる．そして軍団をお前の部族へ
+  送りこんでやる．」
+%E
+%Cp Bar 00067
+#"Once you are dead, my horde shall finish off %l, and your tribe."
+「お前が死んだなら，ワシの軍団は%lや部族をすっかり片付ける
+  ことだろう．」
+%E
+%Cp Bar 00068
+#"Fight, %c, or are you afraid of the mighty %n?"
+「戦え%c！それとも偉大な%nにおじけづいたか？」
+%E
+%Cp Bar 00069
+#"You have failed, %c.  Now, my victory is complete."
+「勝負あったな%c．ワシの勝利は近づいた．」
+%E
+%Cc Bar 00070
+#As you pick up %o, you feel the power of it
+#flowing through your hands.  It seems to be in two or more places
+#at once, even though you are holding it.
+%oを拾うと，手からパワーが伝わってくるのを感じた．
+それを握っていてさえ，何ヶ所にも存在しているような気がした．
+%E
+%Cp Bar 00080
+#%nC falls to the ground, and utters a last curse at you.  Then his
+#body fades slowly, seemingly dispersing into the air around you.  You
+#slowly become aware that the overpowering aura of magic in the air has
+#begun to fade.
+%nは地に伏し，最後の呪いを口から発した．彼の体はゆっくりと
+消えはじめ，あなたの周りの空気に溶けこんだ．あなたは周囲にはりめぐらさ
+れていた魔法のオーラが消えはじめているのになんとなく気がついた．
+%E
+%Cc Bar 00081
+#When %l sees %o, he smiles, and says:
+#
+#    Well done, %p.  You have saved the world from certain doom.
+#    What, now, should be done with %o?
+#
+#    These people, brave as they are, cannot hope to guard it from
+#    other sorcerers who will detect it, as surely as %n did.
+#
+#    Take %o with you, %p.  It will guard you in
+#    your adventures, and you can best guard it.  You embark on a
+#    quest far greater than you realize.
+#
+#    Remember me, %p, and return when you have triumphed.  I
+#    will tell you then of what you must do.  You will understand when the
+#    time comes.
+%lは%oを見ると微笑んで，こう言った．
+
+  よくやった，%pよ．お前は世界を破滅から救ったのだ．
+  さて，%oは何のために使うのがよいであろう？
+
+  この地の者達は勇敢ではある．
+  しかし仮に%oを奪おうとする者が再び現れたとき，
+  阻止出来るとはとても思えぬ．%nがそうしたようにな．
+
+  %oを持ってゆくがよい．%pよ．%oは
+  お前を守ってくれるだろうし，またお前も%oの
+  よき守り手となるであろう．お前が実感しているよりはるかに偉大な
+  クエストに向けて船出するのだ．
+
+  私を忘れるな%pよ，そして勝利のあかつきには戻って来るのだ．
+  その時にまたそなたが為すべきことを教えよう．
+  時が来ればこの意味も理解できるであろう．
+%E
+%Cc Bar 00082
+#%l gazes reverently at %o, then back at you.
+#
+#"You are its keeper now, and the time has come to resume your search
+#for the Amulet.  %Z await your return through the
+#magic portal which brought you here."
+%lは%oを受けとりあなたに戻した．
+
+「今や，お前は%oの守護者だ．
+  魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zがお前を待っているぞ．
+%E
+%Cp Bar 00090
+#"Tell us, %p, have you fared well on your great quest?"
+「%pよ．お前の偉大なクエストについて話しておくれ．」
+%E
+%Cc Bar 00091
+#"This is wondrous, %p.  I feared that you could not possibly
+#succeed in your quest, but here you are in possession of the Amulet
+#of Yendor!
+#
+#"I have studied the texts of the magi constantly since you left.  In
+#the Book of Skelos, I found this:
+#
+#    %d will cause a child to be sent into the world.  This child is to
+#    be made strong by trial of battle and magic, for %d has willed it so.
+#    It is said that the child of %d will recover the Amulet of Yendor
+#    that was stolen from the Creator at the beginning of time.
+#
+#"As you now possess the amulet, %p, I suspect that the Book
+#speaks of you.
+#
+#    The child of %d will take the Amulet, and travel to the Astral
+#    Plane, where the Great Temple of %d is to be found.  The Amulet
+#    will be sacrificed to %d, there on His altar.  Then the child will
+#    stand by %d as champion of all %cP for eternity.
+#
+#"This is all I know, %p.  I hope it will help you."
+「信じがたい！%p．お前がクエストを成功させることはできないのでは
+  ないかと心配してたのだが，今まさにイェンダーの魔除けを持っているでは
+  ないか！
+
+「私はお前が去ってから魔法の文献を常に読みあさっていた．そのとき
+  スケロスの書に次のような一節を見つけたのだ:
+
+    %d１人の子を世界に送らん．この子%dの意思により戦いに
+    於いて強く，魔術に於いても強く作られり．%dの子世界の始めより
+    造られし生物に盗まれたイェンダーの魔除けを取り戻さん．
+
+「そして%pよ，今はお前が魔除けを持っている．この本はお前のことを
+  語っているのであろう．
+
+    %dの子魔除けを手に入れ，%dの偉大なる寺院を見つけんと
+    精霊界へ旅だたん．祭壇にて魔除けを%dに献上し，その子
+    %dの前にて完壁なる永遠の%cとなれり．
+
+「これが私の知る全てだ，%pよ．何らかの助けになることを
+  祈っているぞ．」
+%E
+#
+#       Cave(wo)man
+#
+%Cc Cav 00001
+#You descend through a barely familiar stairwell that you remember
+#%l showing you when you embarked upon your vision quest.
+#
+#You arrive back at %H, but something seems
+#wrong here.  The usual smoke and glowing light of the fires of the
+#outer caves are absent, and an uneasy quiet fills the damp air.
+あなたは見なれた階段を降りながら，冒険に旅立ったとき，%l
+があなたを見ていたのをふと思いだした．
+
+あなたは%Hに戻ってきた，しかし何かが違っているように見える．いつも
+の煙や洞窟の外の火の灯が消えうせており，何とも言えない沈黙が漂って
+いた．
+%E
+%Cp Cav 00002
+#Once again, you arrive back at %H.
+もう一度，あなたは%Hに戻ってきた．
+%E
+%Cp Cav 00003
+#For some reason, you think that this may be the last time you will
+#enter %H.
+なぜか，あなたは%Hに来るのはこれが最後である
+ような気がした．
+%E
+%Cp Cav 00005
+#"We have not been able to gather as much food since the Giants sealed
+#off our access to the outer world."
+「巨人が外への出入りを封印して以来我らは十分な食料を集めることは
+  できないのだ．」
+%E
+%Cp Cav 00006
+#"Since %n sent her minions, we have been constantly fighting."
+「%nが彼女の下僕を送ってきて以来，我らは常に
+  戦っているのだ．」
+%E
+%Cp Cav 00007
+#"I have heard your vision quest was successful.  Is this so?"
+「私はあなたの冒険が成功しそうだと聞いているが，どうなんだ？」
+%E
+%Cp Cav 00008
+#"So, tell me, %p, how have you fared?"
+「%pよ．うまくいっているかどうか教えてくれ」
+%E
+%Cp Cav 00009
+#"%lC grows old.  We know not who will guide us after he ascends."
+「%lは年老いた．彼亡き後，誰が我らを守ってくれると言うのだ．」
+%E
+%Cp Cav 00010
+#"The rains have returned and the land grows lush again."
+「雨は戻り，大地は再び豊潤になるだろう．」
+%E
+%Cp Cav 00011
+#"Peace has returned, give thanks to %d!"
+「平和が戻ってきた！%dのおかげだ！」
+%E
+%Cp Cav 00012
+#"Welcome back!  Did you find %o?"
+「よく戻ってきた！%oは見つかったかね？」
+%E
+%Cp Cav 00013
+#"So, %p, tell us the story of your fight with %n."
+「おぉ，%p，おまえと%nの戦いは伝説として語り継がれるだろう．」
+%E
+%Cp Cav 00014
+#"%lC grows old.  Perhaps you will guide us after he ascends."
+「%lは年老いた．彼亡き後，あなたが我々を導いてくれるだろう．」
+%E
+%Cc Cav 00015
+#"You have returned from your vision quest, %p.  Thank %d.
+#
+#"We are in dire need of your help, my %S.
+#
+#"But first, I must see if you are yet capable of the quest I would
+#ask you to undertake."
+「冒険から戻ってきたか%pよ．%dに感謝しよう．
+
+「我%sよ．我らはお前の助けを必要としている．
+
+「しかし手始めに，私の要求するクエストを受けいれるだけの技量があるか
+  調べねばならぬ．」
+%E
+%Cp Cav 00016
+#"Again, you return to us, %p.  Let me see if you are ready now."
+「また戻ってきたか%pよ．準備が出来たかどうか見てやろう．」
+%E
+%Cp Cav 00017
+#"Ah, %p.  Are you finally ready?"
+「おお%p．準備はできたかな？」
+%E
+%Cc Cav 00018
+#"%p!  You have sealed our fate.  You seem unable to reform yourself,
+#so I must select another to take your place.
+#
+#"Begone from %H!  You have betrayed us by choosing
+#the path of the %C over the true path of the %L.
+#
+#"You no longer live in our eyes."
+「%p！お前は我らの運命を封印してしまった．お前は自分自身を改める
+  ことができないと見える．この任務には替りの者をたてることとしよう．
+
+「%Hから去るがよい！お前は%Lの真実の道の替りに
+  %Cの道を撰択し，我らを裏切った．
+
+「我が目の前に二度と現われるな．」
+%E
+%Cc Cav 00019
+#"Alas, %p, you are as yet too inexperienced to embark upon such
+#a difficult quest as that I propose to give you.
+#
+#"%rA could not possibly survive the rigors demanded to find
+#%i, never mind to confront %n herself.
+#
+#"Adventure some more, and you will learn the skills you will require.
+#%d decrees it."
+「あぁ%pよ．お前は私がさずける困難なクエストの旅に出るには
+  少し経験不足のようだ．
+
+「%rでは%iを見つけ，生きている可能性などないだろう．
+  ましていわんや%nと対面などできぬ．
+
+「冒険を重ねよ．そして必用な技量を学んでくるがよい．
+  %dはそう命じでいる．」
+%E
+%Cc Cav 00020
+#"%p!  You have deviated from my teachings.  You no longer follow
+#the path of the %a as you should.  I banish you from these caves, to
+#go forth and purify yourself.  Then, you might be able to accomplish this
+#quest."
+「%pよ！我が教えにそむいておるな．お前は成すべき%aの
+  道から外れている．力をつけ自分自身を浄化してもらうため，お前を
+  この洞窟から追い払おう．そしてこのクエストをやりとげるくらい
+  の力をつけてくるのだ．」
+%E
+%Cc Cav 00021
+#"You are indeed ready now, %p.  I shall tell you a tale of
+#great suffering among your people:
+#
+#"Shortly after you left on your vision quest, the caves were invaded by
+#the creatures sent against us by %n.
+「ふむ．準備ができたようだな%pよ．まず，この地で起きた大いなる
+  受難の話をしよう:
+
+「お前が冒険に出かけた後すぐに，この洞窟は%nが
+  我々に送ってきた生物に侵略されてしまった．
+
+#"She, herself, could not attack us due to her great size, but her minions
+#have harassed us ever since.  In the first attacks, many died, and the
+#minions of %n managed to steal %o.
+#They took it to %i and there, none of our
+#%g warriors have been able to go.
+「彼女はその巨体のため自分自身では攻撃できないのだが，彼女の下僕達は
+  我々の悩みの種だ．最初の攻撃で多くが死に，%n
+  の下僕達は%oを盗んでしまった．彼らは%iに
+  持ちかえり，我ら%gの戦士は誰もそこへ行くこと
+  ができない．
+
+#"You must find %i, and within it wrest
+#%o from %n.  She guards it as
+#jealously as she guards all treasures she attains.  But with it,
+#we can make our caves safe once more.
+#
+#"Please, %p, recover %o for us, and return it here."
+「お前は%iを見つけ，%nから%oを
+  もぎ取ってくるのだ．彼女は全力でそれを守っている．それを取り戻せ
+  ば我らは安泰だ．
+
+「%pよ．どうか我らのために%oを取り戻し，ここへ戻ってきて
+  ほしい．」
+%E
+%Cp Cav 00025
+#"%nC is immune to her own breath weapons.
+#You should use magic upon her that she does not use herself."
+「%nは彼女自身のブレス攻撃に対しては耐性がある．
+  お前は彼女の使わない魔法を用いるべきだ．」
+%E
+%Cp Cav 00026
+#"When you encounter %n, call upon %d for assistance."
+「%nに会ったなら，%dの助けを呼ぶのだ．」
+%E
+%Cp Cav 00027
+#"There will be nowhere to hide inside %n's inner sanctum."
+「%nの聖域内では隠れるところなどないぞ．」
+%E
+%Cp Cav 00028
+#"Your best chance with %n will be to keep moving."
+「%nに対しては常に動き，チャンスをうかがえ．」
+%E
+%Cp Cav 00029
+#"Do not be distracted by the great treasures in %ns lair.
+#Concentrate on %o."
+「%nの住みかの宝には目もくれるな．%oに
+  集中するのだ．」
+%E
+%Cp Cav 00030
+#"%oC is the only object that %n truly fears."
+「%oは%nが畏れる唯一の物体だ．」
+%E
+%Cp Cav 00031
+#"Do not be fooled by %ns size.  She is fast, and it is
+#rumored that she uses magic."
+「%nの大きさに迷わされるな．彼女は素早く，また魔法を
+  使うと噂されている．」
+%E
+%Cp Cav 00032
+#"I would send a party of %gP with you, but we will need all
+#of our strength to defend ourselves."
+「%gの一隊を送りたいのだが，我らの精鋭はここの守りのために必要
+  なのだ．」
+%E
+%Cp Cav 00033
+#"Remember, be %a at all times.  This is your strength."
+「いつでも%aの精神を忘れるな．それがお前の強さなのだ．」
+%E
+%Cp Cav 00034
+#"If only we had an amulet of reflection, this would not have happened."
+「反射の魔除けさえ持っていれば，このようなことは
+  起こらかったであろう．」
+%E
+%Cc Cav 00035
+#You %x many large claw marks on the ground.  The tunnels ahead
+#of you are larger than most of those in any cave complex you have
+#ever been in before.
+#
+#Your nose detects the smell of carrion from within, and bones litter
+#the sides of the tunnels.
+あなたは，地面に巨大な爪跡があるのを%xた．あなたの前方にあるトンネルは
+今迄にあなたが見たことのあるものより巨大で，複雑である．
+
+死肉の臭いがそこから漂ってくるのを感じ，骨がトンネルの両側に散乱して
+いる．
+%E
+%Cp Cav 00036
+#Once again, you approach %i.
+もう一度，あなたは%iに近づいた．
+%E
+%Cc Cav 00040
+#You find yourself in a large cavern, with neatly polished walls, that
+#nevertheless show signs of being scorched by fire.
+#
+#Bones litter the floor, and there are objects scattered everywhere.
+#The air is close with the stench of sulphurous fumes.
+#
+#%nC is clearly visible, but she seems to be asleep.
+あなたは壁が丁寧に磨かれた大きな洞窟にいるのに気がついた．しかし，それ
+でも，火で焦がされた跡があちこちにある．
+
+骨が床に散乱しており，いろんなものが無造作にちらばっている．
+空気の流れは滞っており，硫黄の臭いが鼻につく．
+
+%nははっきりと見えている．しかし彼女は寝ているようだ．
+%E
+%Cp Cav 00041
+#Once again, you find yourself in the lair of %n.
+もう一度，あなたは%nの住みかにいた．
+%E
+%Cc Cav 00050
+#"So, follower of %l, you seek to invade the lair of %n.
+#Only my meals are allowed down here.  Prepare to be eaten!"
+「%lに従う者よ．%nの住みかに侵入して何かをお捜しですか？
+  ここへは私の食料以外は入ってこれないのです．食べられる準備をしなさい！」
+%E
+%Cp Cav 00051
+#"So, again you face me, %c.  No one has ever before escaped me.
+#Now I shall kill you."
+「またお会いしましたね，%c．だれも私からは逃げられません．
+  今度こそ殺してさしあげましょう．」
+%E
+%Cp Cav 00052
+#"You are getting annoying, %c.  Prepare to die."
+「あなたはいらいらさせられます，%c．死ぬ準備をしなさい．」
+%E
+%Cp Cav 00053
+#"I'll have %o from you, %c.  You shall die."
+「私こそ%oを持つべきだ，%c．死ね．」
+%E
+%Cp Cav 00060
+#"You are weak, %c.  No challenge for the Mother of all Dragons."
+「弱ってきたようね，%c．全てのドラゴンの母へ挑戦するなど
+  無謀だったようですね．」
+%E
+%Cp Cav 00061
+#"I grow hungry, %r.  You look like a nice appetizer!"
+「ちょうど腹が減ってきたところよ，%r．あなたを見てると食欲が湧い
+  てきます．」
+%E
+%Cp Cav 00062
+#"Join me for lunch?  You're the main course, %c."
+「昼食をいっしょにどうですか？もちろんあなたがメインディッシュです
+  けど，%c」
+%E
+%Cp Cav 00063
+#"With %o, I am invincible!  You cannot succeed."
+「%oにより私は無敵です．あなたが目的を達成するなど
+  不可能ですよ．」
+%E
+%Cp Cav 00064
+#"Your mentor, %l has failed.  You are nothing to fear."
+「あなたの指導者である%lは失敗したのですよ．あなたも何も恐れる
+  ことなどないでしょう．」
+%E
+%Cp Cav 00065
+#"You shall die here, %c.  %rA cannot hope to defeat me."
+「あなたはここで死ぬのです，%c．%rごときでは私を
+  倒すなど夢物語ですね．」
+%E
+%Cp Cav 00066
+#"You, a mere %r challenge the might of %n?  Hah!"
+「%nの力に挑戦するとは希な%rですね．ふーん」
+%E
+%Cp Cav 00067
+#"I am the Mother of all Dragons!  You cannot hope to defeat me."
+「私は全ドラゴンの母です！倒すなど言う馬鹿げた考えは棄てなさい．」
+%E
+%Cp Cav 00068
+#"My claws are sharp now.  I shall rip you to shreds!"
+「今日の私の爪は鋭いですよ．ずたずたにしてあげましょう！」
+%E
+%Cp Cav 00069
+#"%d has deserted you, %c.  This is my domain."
+「%dはあなたを見捨てたようですね，%c．ここは私の
+  領域なのですよ．」
+%E
+%Cc Cav 00070
+#As you pick up %o it seems heavy at first, but as you
+#hold it strength flows into your arms.
+#
+#You suddenly feel full of power, as if nothing could possibly stand
+#in your path.
+あなたは，%oを拾った．最初は重く感じたがそれを持つと力が腕に
+注がれてきた．
+
+あなたは，力が満たされたように感じ，誰も行く手を阻むことなどできないよ
+うな気がした．
+%E
+%Cp Cav 00080
+#%nC sinks to the ground, her heads flailing about.
+#As she dies, a cloud of noxious fumes billows about her.
+%nは地面に崩れ，彼女の頭がガクンとうなだれた．
+彼女が死ぬと，有毒ガスが体からたちこめた．
+%E
+%Cc Cav 00081
+#%lC glimpses %o in your possession.
+#He smiles and says:
+#
+#    You have done it!  We are saved.  But I fear that %o
+#    will always be a target for %C forces who will want it for their
+#    own.
+#
+#    To prevent further trouble, I would like you, %p,
+#    to take %o away with you.  It will help you as you
+#    quest for the Amulet of Yendor.
+%lはあなたが持っている%oをちらっと見ると，微笑み
+ながら話しかけた:
+
+    見事なしとげたか！我らは助かった．しかし，私は%oが
+    それを手に入れんとする者の，いつでも%cの力の脅威
+    にあることを恐れている．
+
+    そのような問題を避けるため，私は次のようにしてはどうかと思って
+    いる．%pよ，お前が%oを持っていくのだ．
+    それはお前のイェンダーの魔除けを捜す冒険の助けになるだろう．
+%E
+%Cc Cav 00082
+%lは%oを勢いよく掴み，あなたを見つめた．
+
+「今や，お前は%oの守護者だ．
+  魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zがお前を待っているぞ．
+%E
+%Cp Cav 00090
+#"%p!  Welcome back.
+#How goes your quest to recover the Amulet for %d?"
+「%p！戻ってきたか．
+  %dの魔除けを取り戻す冒険はどんな調子だい？」
+%E
+%Cc Cav 00091
+#"You have been successful, I see, %p.
+#
+#"Now that the Amulet of Yendor is yours, here is what you must do:
+#
+#"Journey upwards to the open air.  The Amulet you carry will then
+#take you into the Astral Planes, where the Great Temple of %d
+#casts its influence throughout our world.
+#
+#"Sacrifice the Amulet on the altar.  Thus shall %d become supreme!"
+「成功したのか%pよ．
+
+「いまや，イェンダーの魔除けはお前の手にある，何をすべきか教えて
+  しんぜよう:
+
+「大いなる空へ旅を続けるのだ．魔除けがお前を精霊界へつれて行って
+  くれるだろう．そこには世界中に影響を与えている
+  %dの大寺院がある．
+
+「魔除けを献上せよ．%dが迎えてくれるだろう！」
+%E
+#
+#	Flame Mage
+#
+%Cc Fla 00001
+#Waves of blistering heat ripple off of the lava-covered landscape that
+#surrounds you.  Off in the distance, you can see the craggy rocks
+#of %H.
+#
+#Suddenly, the hairs on your neck stand on end as you detect a faint hint of
+#evil moisture in the air.
+熱波を発する溶岩に覆われた地形があなたを取り巻いている．
+少し離れたところに%Hのごつごつした岩が見える．
+
+突然，首筋の毛が逆立った．あなたは空気の中に邪悪なものを感じ取ったのだ．
+
+%E
+%Cp Fla 00002
+#Once again, you near %H.  You know that %l
+#will be waiting.
+あなたは再び%Hの近くにやって来た．
+%lがあなたを待っている．
+%E
+%Cp Fla 00003
+#Again, and you think possibly for the last time, you approach
+#%H.
+あなたは%Hを再び訪れた．
+今回が%Hを訪れる最後の機会になるだろう．
+%E
+%Cp Fla 00005
+#"The battles here have been good -- our enemies' blood has boiled away!"
+「この地での戦いは良い結果に終わった．
+  我らが敵の血は蒸発し消え去ったのだ！」
+%E
+%Cp Fla 00006
+#"May your days always be warm!"
+「あなたの人生が暖かいものでありますように！」
+%E
+%Cp Fla 00007
+#"We have had trouble concentrating on our studies!"
+「我らが学びの道に集中するには困難がつきものだ！」
+%E
+%Cp Fla 00008
+#"The water elementals are fierce, but they boil away under our fire!"
+「水の精霊は強力な力を持つが，
+  我らの炎の前には蒸発してしまうのだ！」
+%E
+%Cp Fla 00009
+#"%lC is a strange one, but he has helped defend us."
+「%lも変わり者だ．しかし彼は我らを守ってくれる．」
+%E
+%Cp Fla 00010
+#"The battles here have been good -- our enemies' blood has boiled away!"
+「この地での戦いは良い結果に終わった．
+  我らが敵の血は蒸発し消え去ったのだ！」
+%E
+%Cp Fla 00011
+#"May your days always be warm!"
+「あなたの人生が暖かいものでありますように！」
+%E
+%Cp Fla 00012
+#"Since the defeat of the hoarde, all can concentrate fully on our studies!"
+#hoardeとはhordeの誤記か? [Sakusha]
+「敵の軍団を打ち破ってから，自分達の研究に専念することができるようになった！」
+%E
+%Cp Fla 00013
+#"I'm taking my holidays in Gehennom this year - very warm there, supposedly"
+「今年の休暇はゲヘナで過ごすつもりだ．多分，とても暖かい所だろうからな．」
+%E
+%Cp Fla 00014
+#"Have you noticed how much stronger %l is since %o was recovered?"
+「%oが取り戻されてから%lがどれほど強くなったか教えてくれるかい？」
+%E
+%Cc Fla 00015
+#"Ah, %p.  You have returned at last.  The world is in dire
+#need of your help.  There is a great quest you must undertake.
+#
+#"But first, I must see if you are ready to take on such a challenge."
+「おお，%pよ．よく戻って来たな．この世界はそなたの早急なる
+  助けを必要としておる．そなたが引き受けるべき大いなる探究の
+  旅が待っているのじゃ．
+
+  しかし，まずそなたがこの挑戦を引き受ける準備が出来ている
+  かどうか，それをわしは見極めねばならぬ．」
+%E
+%Cp Fla 00016
+#"%p, you are back.  Are you ready now for the challenge?"
+「%pよ戻って来たか．挑戦する準備は出来たかの？」
+%E
+%Cp Fla 00017
+#"Again, you stand before me, %p.  Surely you have prepared yourself."
+「再び私の元へ来たか，%p．準備は良いようじゃな．」
+%E
+%Cc Fla 00018
+#"Pah!  You have betrayed the gods, %p.  You will never attain
+#the glory which you aspire to.  Your failure to follow the true path has
+#closed this future to you.
+#
+#"I will protect these people as best I can, but soon %n will overcome
+#me and destroy all who once called you %s.  Now begone!"
+「なんと！  そなたは神々を裏切っておるな，%pよ．
+  そなたは求める栄光を決っして手に入れることは出来ないであろう．
+  そなたは自分自身の失敗によって正しき未来の道を閉ざしてしまっておる．
+
+  わしはここにおる人々を最善を尽くして守らねばならぬ．
+  しかしもうすぐ%nが私を倒し，そなたを一度でも%sと呼んだ者を
+  殺してしまうことじゃろう．去れ！」
+%E
+%Cc Fla 00019
+#"%p, I fear that you are as yet too inexperienced to face
+#%n.  Only %Ra with the help of %d could ever hope to
+#defeat him."
+「%p，わしはそなたの経験が%nに相対するには
+  未だ不十分なのが心配じゃ．
+  %dの助けを得た%Rのみにきゃつを倒す望みがあるのじゃ．」
+%E
+%Cp Fla 00020
+#"%p!  You have wandered from the path of the %a!
+#If you attempt to overcome %n in this state, he will surely
+#enslave your soul.  Your only hope, and ours, lies in your purification.
+#Go forth, and return when you feel ready."
+「%p！  そなたは%aの道から外れておる！
+  もしそなたがこの状態で%nを倒そうとすれば，
+  きゃつは必ずそなたの魂を虜にするじゃろう．
+  そなたの，そして我らの望みはそなたの浄化のみにある．
+  先に進み，準備が整ったら戻ってくるのじゃ．」
+%E
+%Cc Fla 00021
+#"The world is in great need of your assistance, %p.
+#
+#"About six months ago, I learned that a mysterious sorcerer, known
+#as %n, had begun to summon horrible elementals from the plane of 
+#Water.
+#
+#"%nC and his hordes of elementals swept down upon %H and stole
+#%o, and seeks to bend it to his will.  
+#After many brave wizards were slain by his watery servants, I
+#sent forth a summons for you!
+#
+#"If %n can bend %o to his will, he will become
+#almost indestructible.  He will then be able to enslave our elementals,
+#and destroy us.  You are our only hope.  The gods smile upon you,
+#and with %d behind you, you alone can defeat %n.
+#
+#"You must go to %i.  From there, you can track down
+#%n, defeat him, and return %o to us.  Only
+#then will the world be safe."
+「この世界はそなたの助けを大いに必要としておる．%pよ．
+
+  およそ半年前，わしは%nと呼ばれる神秘的な魔法使いが
+  水の精霊界からおぞましい精霊たちを召喚し始めたことを知った．
+
+  %nときゃつの精霊の大群は%Hを湿らせ，
+  %oを盗み出した．それを意のままに
+  操ろうというのじゃ．
+  多くの勇敢な魔法使いがきゃつの水の奴隷たちに殺された．
+  そしてそなたにお呼びがかかったというわけなのじゃ．
+
+  もし%nが%oを操ることが出来れば，
+  きゃつを倒すことはほぼ不可能になる．きゃつは我らの精霊を
+  支配し，我らを破滅させることが可能になるのじゃ．
+  そなただけが我らの望み．神々がそなたに微笑み，
+  %dがそなたと共にあるとき，そなたのみが%nを
+  倒すことが出来るのじゃ．
+
+  そなたは%iに赴かねばならぬ．そこから%nを
+  追ってゆくのじゃ．そしてきゃつを倒し，%oを
+  我らの手に取り戻しておくれ．
+  それがこの世界が生きのびる唯一の道なのじゃ．」
+%E
+%Cp Fla 00025
+#"%n is strong in the dark arts, but not immune to cold steel."
+「%nは暗黒の術には強い．しかし冷たい鋼には耐性が無いのじゃ．」
+%E
+%Cp Fla 00026
+#"Remember that %n is a great sorcerer.  He lived in the time
+#of Atlantis."
+「%nが偉大な魔法使いであることを忘れてはならぬ．
+  きゃつはアトランティスの時代から生きているのじゃ．」
+%E
+%Cp Fla 00027
+#"If you fail, %p, I will not be able to protect these people long."
+「%pよ，もしそなたが失敗するようなことがあれば，
+  わしはここの人々を長くは守っていられぬであろう．」
+%E
+%Cp Fla 00028
+#"To enter %i, you must be very stealthy.  The elementals will be on
+#guard."
+「%iに侵入する時は，よほど静かに行動せねばならぬ．
+  精霊たちが守りについていることじゃろう．」
+%E
+%Cp Fla 00029
+#"Call upon %d in your time of need."
+「助けが必要な時は%dに頼ることじゃ．」
+%E
+%Cp Fla 00030
+#"May %d protect you, and guide your steps."
+「%dがそなたを守り，そなたを正しく導かんことを．」
+%E
+%Cp Fla 00031
+#"If you can lay hands upon %o, carry it for good fortune."
+「もし%oを取り戻すことが出来たなら，
+  それを良き運勢を導くために用いよ．」
+%E
+%Cp Fla 00032
+#"I cannot stand against %ns sorcery.  But %d will help you."
+「わしは%nの魔法に対抗することは出来ぬ．
+  しかし%dがそなたを助けて下さるであろう．」
+%E
+%Cp Fla 00033
+#"Do not fear %n.  I know you can defeat him."
+「%nを恐れるな．そなたならきゃつに勝てるであろう．」
+%E
+%Cp Fla 00034
+#"You have a great road to travel, %p, but only after you defeat
+#%n."
+「%pよ，そなたには%nを倒した後にも，偉大な旅が待っているのじゃ．」
+%E
+%Cc Fla 00035
+#The soggy scent of water comes to you in the breeze.  You know that
+#you have located %i.
+風に乗って水っぽい匂いが漂ってきた．
+あなたは%iに侵入したのだ．
+%E
+%Cp Fla 00036
+#Yet again you have a chance to infiltrate %i.
+あなたは再び%iに侵入する機会を得た．
+%E
+%Cc Fla 00040
+#You sense an evil energy in the very air around you.  You fight
+#down a primordial panic that seeks to make you turn and run.
+#This is surely the lair of %n.
+あなたは周囲の空気に邪悪なエネルギーを感じ取った．
+振り返って走り去りたいという本能的な恐怖を懸命に抑えつけた．
+ここはまさに%nのすみかなのだ．
+%E
+%Cp Fla 00041
+#Yet again you feel the air around you heavy with malevolent magical energy.
+あなたは再び，重くのしかかってくる
+悪意に満ちた魔法のエネルギーの存在を感じた．
+%E
+%Cc Fla 00050
+#"So.  This is what that second rate sorcerer %l sends to do his bidding.
+#I have slain many before you.  You shall give me little sport.
+#
+#"Prepare to die, %c."
+「ほほう．二流の魔法使い%lが目的を果たすために
+  おまえを送りこんできたのだな．俺はおまえの来る前に沢山の
+  魔法使いを殺したぞ．おまえの相手をするのもいい運動になる
+  だろう．
+
+  死ぬ準備はよいか？  %cよ！」
+%E
+%Cp Fla 00051
+#"I have wasted too much time on you already.  Now, you shall die."
+「おまえと遊ぶのに少し時間をかけすぎたようだ．
+  今こそ死ね．」
+%E
+%Cp Fla 00052
+#"You return yet again, %c!  Are you prepared for death now?"
+「%cよ，また会ったな！  今度は死ぬ覚悟が出来ているか？」
+%E
+%Cp Fla 00053
+#"I shall have %o back, you pitiful excuse for %ca.
+#And your life as well."
+「%oは私のものだ．%caとしては哀れなものだな．
+  そしておまえの人生も哀れなものだ！」
+%E
+%Cp Fla 00060
+#"My pets will dine on your carcass tonight!"
+「おまえの死骸は私のペットたちの今宵の晩飯になるのだ！」
+%E
+%Cp Fla 00061
+#"You are a sorry excuse for %ra."
+「おまえは%raにしては情けないな．」
+%E
+%Cp Fla 00062
+#"Run while you can, %c.  My next spell will be your last."
+「%cよ，逃げられるうちに逃げておくがよい．
+  次の呪文でお前は終わりだ！」
+%E
+%Cp Fla 00063
+#"I shall use your very skin to bind my next grimoire."
+「お前の皮を新しい呪文書の装丁に使うとしよう．」
+%E
+%Cp Fla 00064
+#"%d cannot protect you now.  Here, you die."
+「%dもおまえを守ってはくれぬ．この地で死ぬがよい．」
+%E
+%Cp Fla 00065
+#"Your %a nature makes you weak.  You cannot defeat me."
+「お前の%aさがお前を弱くするのだ．おまえは私には勝てぬ．」
+%E
+%Cp Fla 00066
+#"Come, %c.  I shall kill you, then unleash the horde on your people."
+「かかってこい，%cよ．殺してやろう．
+  その後で精霊の大群をおまえの仲間に向けて解き放ってやる！」
+%E
+%Cp Fla 00067
+#"Once you are dead, my horde shall finish off %l, and your people."
+「おまえさえ死ねば，私の精霊達が%lとおまえの仲間達に
+  引導を渡すだろう．」
+%E
+%Cp Fla 00068
+#"Fight, %c, or are you afraid of the mighty %nt?"
+「戦え，%c．それとも%nの力の前に恐れをなしたか？」
+%E
+%Cp Fla 00069
+#"You have failed, %c.  Now, my victory is complete."
+「おまえの負けだ，%c．今こそ私の勝利は確実なものになる．」
+%E
+%Cc Fla 00070
+#As you pick up %o, you feel the power of it
+#flowing through your hands.  It seems to be in two or more places
+#at once, even though you are holding it.
+あなたが%oを拾い上げると，その力が手を通して伝わってきた．
+それは手にしているだけで，同時に二カ所，もしくはもっと
+多くの場所に同時に存在しているような感じがするのだった．
+%E
+%Cp Fla 00080
+#%n falls to the ground, and utters a last curse at you.  Then his
+#body fades slowly, seemingly dispersing into the air around you.  You
+#slowly become aware that the overpowering aura of magic in the air has
+#begun to fade.
+%nは地面に崩れ落ちた．
+そして最後の呪いの言葉をあなたに向かって叫んだ．
+それから彼の体はあなたのまわりの空気に溶けこむように
+ゆっくりと消えていった．
+あなたは周囲に満ちていた強力な魔法の
+オーラもゆっくりと消えてゆくのを感じた．
+%E
+%Cc Fla 00081
+#When %l sees %o, he smiles, and says:
+#
+#    Well done, %p.  You have saved the world from certain doom.
+#    What, now, should be done with %o?
+#
+#    These wizards, brave as they are, cannot hope to guard it from
+#    other sorcerers who will detect it, as surely as %n did.
+#
+#    Take %o with you, %p.  It will guard you in
+#    your adventures, and you can best guard it.  You embark on a
+#    quest far greater than you realize.
+#
+#    Remember me, %p, and return when you have triumphed.  I
+#    will tell you then of what you must do.  You will understand when the
+#    time comes.
+%lは%oを見ると微笑んで，こう言った．
+
+    よくやった，%pよ．そなたは世界を破滅から救ったのじゃ．
+    さて，%oは何のために使うのがよいじゃろう？
+
+    この地の魔法使い達は勇敢ではある．
+    しかし仮に%oを奪おうとする者が再び現れたとき，
+    阻止出来るとはとても思えぬ．%nがそうしたようにな．
+
+    %oを持ってゆくがよい．%pよ．%oは
+    そなたを守ってくれるじゃろうし，またそなたも%oの
+    よき守り手となるじゃろう．そなたは思っているよりはるかに
+    偉大な探究の旅に出るのじゃ．
+
+    わしの事を忘れるでないぞ%pよ，そして勝利のあかつきには
+    ここに戻って来るのじゃ．その時にそなたが為すべきことを教えよう．
+    時が来ればこの意味も理解できるじゃろう．
+%E
+%Cc Fla 00082
+#%l gazes at %o warmly for a moment, then looks at you.
+#
+#"You are its keeper now, and the time has come to resume your search
+#for the Amulet.  %Z await your return through the
+#magic portal which brought you here."
+%lはしばらくの間%oを暖かい目でみつめた後，あなたに向き直った．
+
+「今や，そなたは%oの守護者じゃ．
+  魔除け探索を再開するがよい．魔法の入口の向こうで，
+  %Zがそなたを待っておるぞ．
+%E
+%Cp Fla 00090
+#"Tell us, %p, have you fared well on your great quest?"
+「%pよ，偉大なる探究の旅はうまくいっておるか？」
+%E
+%Cc Fla 00091
+#"This is wondrous, %p.  I feared that you could not possibly
+#succeed in your quest, but here you are in possession of the Amulet
+#of Yendor!
+#
+#"I have studied the texts of the magi constantly since you left.  In
+#the Book of Skelos, I found this:
+#
+#    %d will cause a child to be sent into the world.  This child is to
+#    be made strong by trial of battle and magic, for %d has willed it so.
+#    It is said that the child of %d will recover the Amulet of Yendor
+#    that was stolen from the Creator at the beginning of time.
+#
+#"As you now possess the amulet, %p, I suspect that the Book
+#speaks of you.
+#
+#    The child of %d will take the Amulet, and travel to the Astral
+#    Plane, where the Great Temple of %d is to be found.  The Amulet
+#    will be sacrificed to %d, there on His altar.  Then the child will
+#    stand by %d as champion of all %cP for eternity.
+#
+#"This is all I know, %p.  I hope it will help you."
+「すばらしい，%pよ！  わしはそなたの偉大なる探究の旅が
+  ひょっとすると成功しないのではないかと恐れておった．
+  しかしそなたはこのとおりイェンダーの魔除けを手にしておる！
+
+  わしはそなたがこの地を去ってから，ずっと魔法書を調べておった．
+  そしてスケロスの書の中にこの部分を見つけたのじゃ．」
+
+    %d１人の子を世界に送らん．この子%dの意思により戦いに
+    於いて強く，魔術に於いても強く作られり．%dの子世界の始めより
+    造られし生物に盗まれたイェンダーの魔除けを取り戻さん．
+
+「%p，そなたは今その魔除けを持っておる．わしはこの書が
+  そなたのことを語っているのではないかと思う．」
+
+    %dの子魔除けを手に入れ，%dの偉大なる寺院を見つけんと
+    精霊界へ旅だたん．祭壇にて魔除けを%dに献上し，その子
+    %dの前にて完壁なる永遠の%cとなれり．
+
+「これがわしの知る全てじゃ，%pよ．
+  何らかの助けになることを祈っておるぞ．」
+%E
+#
+#       Healer
+#
+%Cc Hea 00001
+#What sorcery has brought you back to %H?  The smell
+#of fresh funeral pyres tells you that something is amiss with the healing
+#powers that used to practice here.
+#
+#No rhizotomists are tending the materia medica gardens, and where are the
+#common folk who used to come for the cures?
+#
+#You know that you must quickly make your way to the collegium, and
+#%ls iatreion, and find out what has happened in your
+#absence.
+どんな魔法があなたを%Hに連れ戻したのだ？真新しい火葬用の
+薪の匂いが，ここで開業するために使った治癒の力のどこかに不具合が生じて
+いると告げている．
+
+薬用植物園へ向かう神経科医の姿もない．治療に来ていた人々はいったい
+どこに行ってしまったのだ？
+
+あなたがいない間に何が起こったのかを知るために，すぐに委員会と
+%lの医療所に出向く必要があるだろう．
+%E
+%Cp Hea 00002
+#After your last experience you expected to be here, but you certainly
+#did not expect to see things so much worse.  This time you must
+#succeed.
+予想された最後の経験を終えた後でも，しかしこれほどまで
+事態が酷くなっていようとは思ってもいなかった．あなたは必ず
+成功しなければならないのだ．
+%E
+%Cp Hea 00003
+#Again, you %x %H in the distance.
+#
+#The smell of death and disease permeates the air.  You do not have
+#to be %Ra to know that %n is on the verge of victory.
+ふたたび，あなたは遠くに%Hを%xた．
+
+死と病の匂いが空気中に立ちこめている．%Raならずとも，
+%nがまさに勝利を収めんとしていることが分かるだろう．
+%E
+%Cp Hea 00005
+#"Did you read that new treatise on the therapeutic use of leeches?"
+「ヒルの治療学的使用法に関する新しい論文は読んだか？」
+%E
+%Cp Hea 00006
+#"Paint a red caduceus on your shield and monsters won't hit you."
+「赤い蛇杖を盾に描けば，怪物は攻撃してこなくなるだろう．」
+%E
+%Cp Hea 00007
+#"I passed handwriting so they are demoting me a rank."
+「筆記試験に合格したので，彼らは私を降格する．」
+%E
+%Cp Hea 00008
+#"I've heard that even %l has not been able to cure Chiron."
+「%lですら，ケイローンを治療することは出来ぬと聞いたぞ．」
+%E
+%Cp Hea 00009
+#"We think %n has used his alchemists, and %o,
+#to unleash a new disease we call 'the cold' on Gehennom."
+「我らは%nが錬金術と%oを使って，ゲヘナで
+  『風邪』と呼ばれる新たな病を解き放ったと考えている．」
+%E
+%Cp Hea 00010
+#"Did you read that new treatise on the therapeutic use of leeches?"
+「ヒルの治療学的使用法に関する新しい論文は読んだか？」
+%E
+%Cp Hea 00011
+#"Paint a red caduceus on your shield and monsters won't hit you."
+「赤い蛇杖を盾に描けば，怪物は攻撃してこなくなるだろう．」
+%E
+%Cp Hea 00012
+#"How are you feeling?  Perhaps a good bleeding will improve your sprits."
+「どんな感じだい？たぶん，いい流血がおまえの魂を良くしてくれるだろうよ．」
+%E
+%Cp Hea 00013
+#"Have you heard the absurd new theory that diseases are caused by
+#microscopic organisms, and not ill humors?"
+「疾病が，悪い血ではなく微生物によって引き起こされるという
+ばかげた新説を聞いたかい？」
+%E
+%Cp Hea 00014
+#"I see that you bring %o, now you can cure this plague!"
+「あなたは%oを持ち帰り，この疫病を癒してくれるでしょう．」
+%E
+%Cc Hea 00015
+#Feebly, %l raises his head to look at you.
+#
+#"It is good to see you again, %p.  I see the concern in your
+#eyes, but do not worry for me.  I am not ready for Hades yet.  We have
+#exhausted much of our healing powers holding off %n.
+#I need your fresh strength to carry on our work.
+#
+#"Come closer and let me lay hands on you, and determine if you have
+#the skills necessary to accomplish this mission."
+力なく，%lはあなたに顔を向けた．
+
+「再び会えて良かった，%pよ．心配そうな目だな，だが案ずるこ
+  とはない．まだハデスの世話にはならん．我らは%nを防ぐのに
+  癒しの力を使い尽くしてしまった．この仕事を続けるにはお前の若い力が
+  必要なのだ．
+
+「近くに寄って手を取るがいい．お前にこの任務を成し遂げる技量があるか
+  見きわめよう．」
+%E
+%Cp Hea 00016
+#"Again you return to me, %p.  I sense that each trip back
+#the pleurisy and maladies of our land begin to infect you.  Let us
+#hope and pray to %d that you become ready for your task before
+#you fall victim to the bad humors."
+「また帰ってきたな，%pよ．それぞれの旅は肋膜炎と背中合わせで，
+  我らの国の病気がそなたに影響をおよぼし始めているのが感じられる．
+  %dに祈りを捧げて，そなたが悪しき気の犠牲になる前に仕事の
+  準備ができるよう期待しているぞ．」
+%E
+%Cp Hea 00017
+#"Chiron has fallen, Hermes has fallen, what else must I tell you to
+#impress upon you the importance of your mission!  I hope that you
+#have come prepared this time."
+「ケイローンが死に，ヘルメスが死に，他に何をもってお前に任務の
+  重要性を認識させればよいのだ！もう覚悟は決めたのだろうな．」
+%E
+%Cc Hea 00018
+#"You have failed us, %p.  You are a quack!  A charlatan!
+#
+#"Hades will be happy to hear that you are once again practicing your
+#arts on the unsuspecting."
+「お前には失望した，%pよ．お前はにせ医者だ！いんちき野郎！
+
+「お前がまた医者を始めたと聞いたら，ハデスはさぞ喜ぶだろうよ．」
+%E
+%Cc Hea 00019
+#"Alas, %p, you are yet too inexperienced to deal with the rigors
+#of such a task.  You must be able to draw on the knowledge of botany,
+#vetenary, and alchemy before I can send you on this quest with good
+#conscience.
+#
+#"Return when you wear %Ra's caduceus."
+「ああ！%pよ，お前はまだこの様な難しい仕事をこなすに
+  はあまりにも未熟だ．安心してこの探索に送り出す前には，植物学，獣医学，
+  錬金術の知識を利用できなければならぬ．
+
+「%Raの蛇杖を身につけたら戻って来るのだ．」
+%E
+%Cc Hea 00020
+#"You have learned much of the remedies that benefit, but you must also
+#know which physic for which ail.  That is why %ds teachings are a
+#part of your training.
+#
+#"Return to us when you have healed thyself."
+「そなたは数多くの有益な治療法を学んだ．だがどの薬がどの病に
+  効くかも学ばねばならぬ．%dの教えがそなたの訓練の一部と
+  なっているのはそのためだ．
+
+「汝自身を癒したら戻って来い．」
+%E
+%Cc Hea 00021
+#For the first time, you sense a smile on %ls face.
+#
+#    You have indeed learned as much as we can teach you in preparation
+#    for this task.  Let me tell you what I know of the symptoms and hope
+#    that you can provide a cure.
+#
+#    A short while ago, the dreaded %nt was fooled by the gods
+#    into thinking that he could use %o to find a
+#    cure for old age.  Think of it, eternal youth!  But his good
+#    health is accomplished by drawing the health from those around him.
+#
+#    He has exhausted his own supply of healthy people and now he seeks to
+#    extend his influence into our world.  You must recover from him
+#    %o and break the spell.
+#
+#    You must travel into the swamps to %i, and from there
+#    follow the trail to the %ns island lair.  Be careful.
+最初に，%lの顔に笑みが浮かんでいるのを感じた．
+
+    そなたは確かに我々がこの仕事の準備にと教えうる限りのことを
+    学んだ．私が知っているきざしを話し，そなたが癒しを
+    施すことを期待しよう．
+
+    少し前に，恐るべき%nは神々に騙されて
+    %oを用いれば老いを癒すことができると考えた．
+    永遠の若さだ！しかしやつの健康は，周囲の健康を奪うことに
+    よってなされている．
+
+    やつは健康な人々の備えを使い尽くし，今やその影響力を
+    我らの世界にまで広げようとしている．そなたは%oを
+    やつから取り戻し，呪文を打ち破らねばならない．
+
+    沼地を通って%iへ赴き，そこから%nの
+    隠れ家となっている島への手がかりを追うのだ．注意せよ．
+%E
+%Cp Hea 00025
+#"Remember, %p, to always wash your hands before operating."
+「忘れるな，%pよ．手術の前には必ず手を洗うのだ．」
+%E
+%Cp Hea 00026
+#"%nC has no real magic of his own.  To this he is vulnerable."
+「%nは自らの魔法を持たぬ．そこがやつの弱味だ．」
+%E
+%Cp Hea 00027
+#"If you have been true to %d, you can draw on the power of
+#%o."
+「%dに対して誠実であったのなら，
+  %oの力が利用できる．」
+%E
+%Cp Hea 00028
+#"Bring with you antidotes for poisons."
+「解毒剤を持って来なさい．」
+%E
+%Cp Hea 00029
+#"Remember this, %n cannot use %o
+#to harm you, it has only healing powers."
+「覚えておけ，%nは%oでお前を傷つけることは出来ぬ．
+  癒しの力しか持っていないからだ．」
+%E
+%Cp Hea 00030
+#"I have sent for Chiron, but I am afraid he will come too late."
+「ケイローンには使いを出した．しかし彼が来る頃にはもう
+  遅すぎるかもしれぬ．」
+%E
+%Cp Hea 00031
+#"Maybe when you return the snakes will once again begin to shed."
+「そなたが戻って来た時，蛇は再び脱皮するかもしれぬ．」
+%E
+%Cp Hea 00032
+#"The plague grows worse as we speak.  Hurry, %p!"
+「話している間にも疫病は一層悪くなってきている．急げ，%pよ！」
+%E
+%Cp Hea 00033
+#"Many times %n has caused trouble in these lands.  It is
+#time that he was eradicated like the diseases he has caused."
+「%nは何度もこの地に禍を引き起こした．やつがもたらした病気の
+  ように，今度はやつが滅ぼされる番だ．」
+%E
+%Cp Hea 00034
+#"With but one eye, %n should be easy to blind.  Remember this."
+「片目しかないがゆえに，%nは盲目になりやすい．覚えておけ．」
+%E
+%Cc Hea 00035
+#You stand before the entrance to %i.  Strange
+#scratching noises come from within the building.
+#
+#The swampy ground around you seems to stink with disease.
+あなたは%iの入口の前に立った．奇妙な
+引っかく音が建物の中から聞こえてくる．
+
+まわりの沼地は病で腐っているように見える．
+%E
+%Cp Hea 00036
+#Once again you stand at the entrance to %i.
+もう一度あなたは%iの入口に立った．
+%E
+%Cc Hea 00040
+#You stand within sight of the infamous Isle of %n.  Even
+#the words of %l had not prepared you for this.
+#
+#Steeling yourself against the wails of the ill that pierce your ears,
+#you hurry on your task.  Maybe with %o you can
+#heal them on your return, but not now.
+あなたは忌まわしき%nの島が見える場所に立った．
+%lの言葉ですらこのことを覚悟させるものではなかった．
+
+耳を貫く不吉な風の音に心を固くして，あなたは仕事を急いだ．
+%oをもってすれば，帰って彼らを癒すことが出来るかもしれぬ．
+だがそれは今ではない．
+%E
+%Cp Hea 00041
+#Once again, you %x the Isle of %n in the distance.
+もう一度，あなたは向こうに%nの島を%xた．
+%E
+%Cc Hea 00050
+#"They have made a mistake in sending you, %p.
+#
+#"When I add your youth to mine, it will just make it easier for me
+#to defeat %l."
+「やつらがお前を送り込んだのは間違いだったようだな，%pよ．
+
+「お前の若さを手に入れれば，%lを滅ぼすのは更にたやすくなるだろう．」
+%E
+%Cp Hea 00051
+#"Unlike your patients, you seem to keep coming back, %p!"
+「お前の患者とは違って，戻って来たようだな，%pよ！」
+%E
+%Cp Hea 00052
+#"Which would you like, %p?  Boils, pleurisy, convulsions?"
+「どれが好みだ，%p？腫れ物，腹膜炎，それとも痙攣か？」
+%E
+%Cp Hea 00053
+#"I'll have %o back from you, %r.  You are
+#not going to live to escape this place."
+「きっと%oを取り戻す，%rよ．この場所から逃げ出して
+  生き延びることなど出来ぬぞ．」
+%E
+%Cp Hea 00060
+#"They might as well give scalpels to wizards as to let you try to
+#use %o!"
+「お前に%oを使わせるとは，魔法使いにメスを
+  与えるようなものだ！」
+%E
+%Cp Hea 00061
+#"If I could strike %l, surrounded by his %gP, imagine what I
+#can do to you here by yourself."
+「%gPに囲まれた%lを倒すことができるとはどういうことか，
+  想像してみたまえ．」
+%E
+%Cp Hea 00062
+#"I will put my %Rp to work making a physic out of your ashes."
+「お前の骸の届かぬところで%Rpに治療をさせてくれる．」
+%E
+%Cp Hea 00063
+#"As we speak, Hades gathers your patients to join you."
+「我らが話している間にも，ハデスはお前の患者を集めて
+  お前の道連れにしてくれるぞ．」
+%E
+%Cp Hea 00064
+#"After I'm done with you, I'll destroy %l as well."
+「お前が済んだら，%lも同じように滅ぼしてくれるわ．」
+%E
+%Cp Hea 00065
+#"You will have to kill me if you ever hope to leave this place."
+「この地を去りたいのなら，私を殺さねばならぬ．」
+%E
+%Cp Hea 00066
+#"I will impale your head on my caduceus for all to see."
+「皆に見えるように，お前の頭を私の蛇杖に突き刺してやろう．」
+%E
+%Cp Hea 00067
+#"There is no materia medica in your sack which will cure you of me!"
+「袋の中に，お前を直してくれるような薬品はない．」
+%E
+%Cp Hea 00068
+#"Do not fight too hard, I want your soul strong, not weakened!"
+「あまり激しく戦うな．お前の魂を強くしたいのであって，
+  弱くしたいのではない！」
+%E
+%Cp Hea 00069
+#"You should have stopped studying at vetenary."
+「獣医学を勉強するのをやめるべきだ．」
+%E
+%Cc Hea 00070
+#As you pick up %o, you feel its healing begin to
+#warm your soul.  You curse Zeus for taking it from its rightful owner,
+#but at least you hope that %l can put it to good use once
+#again.
+%oを拾い上げると，癒しの力があなたの魂を温め始めるのが
+感じられた．あなたはこれを正しい持ち主から奪ったゼウスを
+呪ったが，少なくとももう一度適切に使われることを望んだ．
+%E
+%Cc Hea 00080
+#The battered body of %n slumps to the ground and gasps
+#out one last curse:
+#
+#    You have defeated me, %p, but I shall have my revenge.
+#    How, I shall not say, but this curse shall be like a
+#    cancer on you.
+#
+#With that %n dies.
+%nの潰れた体は地面へと崩れ落ち，喘ぎながら最後の呪いを放った．
+
+    お前の勝ちだ，%p．だがきっと復讐してやる．
+    その方法は言わぬが，この呪いは癌のようにお前を蝕むだろう．
+
+かくして%nは死んだ．
+%E
+%Cc Hea 00081
+#As soon as %l sees %o he summons his %gP.
+#
+#Gently, %l reaches out and touches %o.
+#He instructs each of the assembled to do the same.  When everyone
+#has finished he speaks to you.
+#
+#    Now that we have been replenished we can defeat this plague.  You must
+#    take %o with you and replenish the worlds you have
+#    been called upon to travel next.  I wish you could ride Chiron to the
+#    end of your journey, but I need him to help me spread the cure.  Go
+#    now and continue your journey.
+%lは%oを見るやいなや，彼の%gPを呼び寄せた．
+
+静かに，%lは手を伸ばして%oに触れた．
+彼は集まった各々に同じことをするように教えた．全てが終った後，
+彼はあなたに話しかけた．
+
+    今こそ我らは満たされ，この疫病を打ち破ることができる．
+    そなたは%oを携えて，次に旅するよう求められている世界を
+    満たさねばならぬ．ケイローンに乗って行ければよいのだが，
+    癒しの力を広めるのに彼が必要だ．行ってそなたの旅を続けるのだ．
+%E
+%Cc Hea 00082
+#%l cautiously handles %o while watching you.
+#
+#"You are its keeper now, and the time has come to resume your search
+#for the Amulet.  %Z await your return through the
+#magic portal which brought you here."
+%lは%oを気をつけて掴み，あなたを見つめた．
+
+「今や，そなたは%oの守護者だ．
+  魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zがそなたを待っているぞ．
+%E
+%Cp Hea 00090
+#"You have again returned to us, %p.  We have done well in your
+#absence, yes?  How fare you upon your quest for the Amulet?"
+「再び戻って来たな，%pよ．我々はそなたのいない間も
+  うまくやっている．魔除けの探索はどうだ？」
+%E
+%Cc Hea 00091
+#"Ah, you have recovered the Amulet, %p.  Well done!
+#
+#"Now, you should know that you must travel through the elemental planes
+#to the astral, and there return the Amulet to %d.  Go forth and
+#may our prayers be as a wind upon your back."
+「おお，魔除けを取り戻したのだな，%pよ．よくやった！
+
+「今こそ，界面を通って精霊界へと向かい，魔除けを%dに
+  戻す旅に出なければならぬ．行け，そして我らの祈りが
+  そなたの背に吹く風とならんことを．」
+%E
+#
+#       Ice Mage
+#
+%Cc Ice 00001
+#The howling arctic wind is like a welcome home for you.
+#Off in the distance, you can see the familiar ice crags that surround
+#%H.
+#
+#Suddenly, the hairs on your neck stand on end as you detect the aura of
+#evil magic in the air.
+咆哮をとどろかす極寒の風があなたを出向かえた．
+少し離れたところに懐しい氷の山が%Hを
+囲んでいるのが見える．
+
+突然あなたの首筋の毛が逆立った．
+あなたは空気の中に邪悪なものを感じ取ったのだ．
+
+%E
+%Cp Ice 00002
+#Once again, you near %H.  You know that %l
+#will be waiting.
+あなたは再び%Hの近くにやって来た．
+%lがあなたを待っている．
+%E
+%Cp Ice 00003
+#Again, and you think possibly for the last time, you approach
+#%H.
+あなたは%Hを再び訪れた．
+今回が%Hを訪れる最後の機会になるだろう．
+%E
+%Cp Ice 00005
+#"Our enemies come from beneath the earth itself!"
+「我々の敵は地面の下からやって来るのだ！」
+%E
+%Cp Ice 00006
+#"Remember to pack a pick-axe!"
+「つるはしを持っていくのを忘れるな！」
+%E
+%Cp Ice 00007
+#"There has been little studying accomplished since the horde arrived."
+「あの軍団がやってきてから少ししか勉強出来ていない．」
+%E
+%Cp Ice 00008
+#"The horde is mighty in numbers, but they have little courage."
+「あの軍団は数はすごいが，勇敢とは言いがたい．」
+%E
+%Cp Ice 00009
+#"%lC has helped defend us, but our strength is fading."
+「%lは我々を守ってくれる．しかし我々の力は弱まりつつある．」
+%E
+%Cp Ice 00010
+#"Remember to pack a pick-axe!"
+「つるはしを持っていくのを忘れるな！」
+%E
+%Cp Ice 00011
+#"Since the defeat of the hoarde, all can concentrate fully on our studies!"
+#hoardeとはhordeの誤記か? [Sakusha]
+「敵の軍団を打ち破ってから，自分達の研究に専念することができるようになった！」
+%E
+%Cp Ice 00012
+#"The frozen lake looks beautiful today"
+「今日は凍った湖が美しく見えるな．」
+%E
+%Cp Ice 00013
+#"I always knew %n was too warm blooded to defeat us!"
+「我々を倒すには%nの血は熱すぎたという事だな！」
+%E
+%Cp Ice 00014
+#"I've been trying to alter cone of cold from Vanilla to Chocolate - yum!"
+## Vanilla = 本家NetHack?
+## ところで Chocolateなんて呼ばれるvariantってあるの? (^^;) [Sakusha]
+「私は冷気の魔法をバニラからチョコレートに変換しようとしているのだが．．．
+  むう！」
+%E
+%Cc Ice 00015
+#"Ah, %p.  You have returned at last.  The world is in dire
+#need of your help.  There is a great quest you must undertake.
+#
+#"But first, I must see if you are ready to take on such a challenge."
+「おお，%pよ．よく戻って来たな．この世界はそなたの早急なる
+  助けを必要としておる．そなたが引き受けるべき大いなる探究の
+  旅が待っているのじゃ．
+
+  しかし，まずそなたがこの挑戦を引き受ける準備が出来ている
+  かどうか，それをわしは見極めねばならぬ．」
+%E
+%Cp Ice 00016
+#"%p, you are back.  Are you ready now for the challenge?"
+「%pよ戻って来たか．挑戦する準備は出来たかの？」
+%E
+%Cp Ice 00017
+#"Again, you stand before me, %p.  Surely you have prepared yourself."
+「再び私の元へ来たか，%pよ．準備は良いようじゃな．」
+%E
+%Cc Ice 00018
+#"Pah!  You have betrayed the gods, %p.  You will never attain
+#the glory which you aspire to.  Your failure to follow the true path has
+#closed this future to you.
+#
+#"I will protect my people as best I can, but soon %n will overcome
+#me and destroy all who once called you %s.  Now begone!"
+「なんと！  そなたは神々を裏切っておるな，%pよ．
+  そなたは求める栄光を決っして手に入れることは出来ないであろう．
+  そなたは自分自身の失敗によって正しき未来の道を閉ざしてしまっておる．
+
+  わしはここにおる人々を最善を尽くして守らねばならぬ．
+  しかしもうすぐ%nが私を倒し，そなたを一度でも%sと呼んだ者を
+  殺してしまうことじゃろう．去れ！」
+%E
+%Cc Ice 00019
+#"%p, I fear that you are as yet too inexperienced to face
+#%n.  Only %Ra with the help of %d could ever hope to
+#defeat him."
+「%p，わしはそなたの経験が%nに相対するには
+  未だ不十分なのが心配じゃ．
+  %dの助けを得た%Raのみにきゃつを倒す望みがあるのじゃ．」
+%E
+%Cp Ice 00020
+#"%p!  You have wandered from the path of the %a!
+#If you attempt to overcome %n in this state, he will surely
+#enslave your soul.  Your only hope, and ours, lies in your purification.
+#Go forth, and return when you are ready."
+「%p！  そなたは%aの道から外れておる！
+  もしそなたがこの状態で%nを倒そうとすれば，
+  きゃつは必ずそなたの魂を虜にするじゃろう．
+  そなたの，そして我らの望みはそなたの浄化のみにある．
+  先に進み，準備が整ったら戻ってくるのじゃ．」
+%E
+%Cc Ice 00021
+#"The world is in great need of your assistance, %p.
+#
+#"About six months ago, I learned that a mysterious sorcerer, known
+#as %n, had begun to summon a large group of elementals and monsters.
+#
+#"%nC and his horde swept down upon %H and stole 
+#%o. He seeks to bend it to his will.  After we regrouped, 
+#I sent forth a summons for you.
+#
+#"If %n can bend %o to his will, he will become
+#almost indestructible.  He will then be able to summon our elementals
+#to him.  You are the only hope.  The gods smile upon you,
+#and with %d behind you, you alone can defeat %n.
+#
+#"You must go to %i.  From there, you can track down
+#%n, defeat him, and return %o to us.  Only
+#then will the world be safe."
+「この世界はそなたの助けを大いに必要としておる．%pよ．
+
+  およそ半年前，わしは%nと呼ばれる神秘的な魔法使いが
+  多くの精霊やモンスターを召喚し始めたことを知った．
+
+  %nときゃつのモンスターの大群は%Hを一掃し，
+  %oを盗み出した．それを意のままに
+  扱おうというのじゃ．
+  我々は再び集結してそなたを呼び出したというわけなのじゃ．
+
+  もし%nが%oを扱うことが出来れば，
+  きゃつを倒すことはほぼ不可能になる．きゃつは我らの精霊を
+  召喚できるようになってしまうのじゃ．
+  そなただけが我らの望み．神々がそなたに微笑み，
+  %dがそなたと共にあるとき，そなたのみが%nを
+  倒すことが出来るのじゃ．
+
+  そなたは%iに赴かねばならぬ．そこから%nを
+  追ってゆくのじゃ．そしてきゃつを倒し，%oを
+  我らの手に取り戻しておくれ．
+  それがこの世界が生きのびる唯一の道なのじゃ．」
+%E
+%Cp Ice 00025
+#"%nC is strong in the dark arts, but not immune to cold steel."
+「%nは暗黒の術には強い．しかし冷たい鋼には耐性が無いのじゃ．」
+%E
+%Cp Ice 00026
+#"Remember that %n is a great sorcerer.  He has lived for a thousand years."
+「%nが偉大な魔法使いであることを忘れてはならぬ．
+  きゃつは千年もの間生きているのじゃ．」
+%E
+%Cp Ice 00027
+#"If you fail, %p, I will not be able to protect these people long."
+「%pよ，もしそなたが失敗するようなことがあれば，
+  わしはここの人々を長くは守っていられぬであろう．」
+%E
+%Cp Ice 00028
+#"To enter %i, you must be very stealthy.  The horde will be on
+#guard."
+「%iに侵入するる時は，よほど静かに行動せねばならぬ．
+  きゃつの呼び出した怪物達が守りについていることじゃろう．」
+%E
+%Cp Ice 00029
+#"Call upon %d in your time of need."
+「助けが必要な時は%dに頼ることじゃ．」
+%E
+%Cp Ice 00030
+#"May %d protect you, and guide your steps."
+「%dがそなたを守り，そなたを正しく導かんことを．」
+%E
+%Cp Ice 00031
+#"If you can lay hands upon %o, carry it for good fortune."
+「もし%oを取り戻すことが出来たなら，
+  それを良き運勢を導くために用いよ．」
+%E
+%Cp Ice 00032
+#"I cannot stand against %ns sorcery.  But %d will help you."
+「わしは%nの魔法に対抗することは出来ぬ．
+  しかし%dがそなたを助けて下さるであろう．」
+%E
+%Cp Ice 00033
+#"Do not fear %n.  I know you can defeat him."
+「%nを恐れるな．そなたならきゃつに勝てるであろう．」
+%E
+%Cp Ice 00034
+#"You have a great road to travel, %p, but only after you defeat
+#%n."
+「%pよ，そなたには%nを倒した後にも，偉大な旅が待っているのじゃ．」
+%E
+%Cc Ice 00035
+#The air is heavy and claustrophobic. You know that you have located %i.
+空気が重くなり，空間が密閉されているように感じられる．
+あなたは%iに侵入したのだ．
+%E
+%Cp Ice 00036
+#Yet again you have a chance to infiltrate %i.
+あなたは再び%iに侵入する機会を得た．
+%E
+%Cc Ice 00040
+#The hairs on the nape of your neck lift as you sense an energy in the
+#very air around you.  You fight down a primordial panic that seeks to
+#make you turn and run.  This is surely the lair of %n.
+周囲の空気に邪悪なエネルギーを感じ取り，あなたの首筋の毛が逆立った．
+振り返って走り去りたいという本能的な恐怖を懸命に抑えつけた．
+ここはまさに%nのすみかなのだ．
+%E
+%Cp Ice 00041
+#Yet again you feel the air around you heavy with malevolent magical energy.
+あなたは再び，重くのしかかってくる
+悪意に満ちた魔法のエネルギーの存在を感じた．
+%E
+%Cc Ice 00050
+#"So.  This is what that second rate sorcerer %l sends to do his bidding.
+#I have slain many before you.  You shall give me little sport.
+#
+#"Prepare to die, %c."
+「ほほう．二流の魔法使い%lが目的を果たすために
+  おまえを送りこんできたのだな．俺はおまえの来る前に沢山の
+  魔法使いを殺したぞ．おまえの相手をするのもいい運動になる
+  だろう．
+
+  死ぬ準備はよいか？  %cよ！」
+%E
+%Cp Ice 00051
+#"I have wasted too much time on you already.  Now, you shall die."
+「おまえと遊ぶのに少し時間をかけすぎたようだ．
+  今こそ死ね．」
+%E
+%Cp Ice 00052
+#"You return yet again, %c!  Are you prepared for death now?"
+「%cよ，また会ったな！  今度は死ぬ覚悟が出来ているか？」
+%E
+%Cp Ice 00053
+#"I shall have %o back, you pitiful excuse for %ca.
+#And your life as well."
+「%oは私のものだ．%caとしては哀れなものだな．
+  そしておまえの人生も哀れなものだ！」
+%E
+%Cp Ice 00060
+#"My pets will dine on your carcass tonight!"
+「おまえの死骸は私のペットたちの今宵の晩飯になるのだ！」
+%E
+%Cp Ice 00061
+#"You are a sorry excuse for %ra."
+「おまえは%raにしては情けないな．」
+%E
+%Cp Ice 00062
+#"Run while you can, %c.  My next spell will be your last."
+「%cよ，逃げられるうちに逃げておくがよい．
+  次の呪文でお前は終わりだ！」
+%E
+%Cp Ice 00063
+#"I shall use your very skin to bind my next grimoire."
+「お前の皮を新しい呪文書の装丁に使うとしよう．」
+%E
+%Cp Ice 00064
+#"%d cannot protect you now.  Here, you die."
+「%dもおまえを守ってはくれぬ．この地で死ぬがよい．」
+%E
+%Cp Ice 00065
+#"Your %a nature makes you weak.  You cannot defeat me."
+「お前の%aさがお前を弱くするのだ．おまえは私には勝てぬ．」
+%E
+%Cp Ice 00066
+#"Come, %c.  I shall kill you, then unleash the horde on your people."
+「かかってこい，%cよ．殺してやろう．
+  その後でモンスターの大群をおまえの仲間に向けて解き放ってやる！」
+%E
+%Cp Ice 00067
+#"Once you are dead, my horde shall finish off %l, and your people."
+「おまえさえ死ねば，私のしもべ達が%lとおまえの仲間達に
+  引導を渡すだろう．」
+%E
+%Cp Ice 00068
+#"Fight, %c, or are you afraid of the mighty %n?"
+「戦え，%c．それとも%nの力の前に恐れをなしたか？」
+%E
+%Cp Ice 00069
+#"You have failed, %c.  Now, my victory is complete."
+「おまえの負けだ，%c．今こそ私の勝利は確実なものになる．」
+%E
+%Cc Ice 00070
+#As you pick up %o, you feel the power of it
+#flowing through your hands.  It seems to be in two or more places
+#at once, even though you are holding it.
+あなたが%oを拾い上げると，その力が手を通して伝わってきた．
+それは手にしているだけで，同時に二カ所，もしくはもっと
+多くの場所に同時に存在しているような感じがするのだった．
+%E
+%Cp Ice 00080
+#%nC falls to the ground, and utters a last curse at you.  Then his
+#body fades slowly, seemingly dispersing into the air around you.  You
+#slowly become aware that the overpowering aura of magic in the air has
+#begun to fade.
+%nは地面に崩れ落ちた．
+そして最後の呪いの言葉をあなたに向かって叫んだ．
+それから彼の体はあなたのまわりの空気に溶けこむように
+ゆっくりと消えていった．
+あなたは周囲に満ちていた強力な魔法の
+オーラもゆっくりと消えてゆくのを感じた．
+%E
+%Cc Ice 00081
+#When %l sees %o, he smiles, and says:
+#
+#    Well done, %p.  You have saved the world from certain doom.
+#    What, now, should be done with %o?
+#
+#    Our people, brave as they are, cannot hope to guard it from
+#    other sorcerers who will detect it, as surely as %n did.
+#
+#    Take %o with you, %p.  It will guard you in
+#    your adventures, and you can best guard it.  You embark on a
+#    quest far greater than you realize.
+#
+#    Remember me, %p, and return when you have triumphed.  I
+#    will tell you then of what you must do.  You will understand when the
+#    time comes.
+%lは%oを見ると微笑んで，こう言った．
+
+    よくやった，%pよ．そなたは世界を破滅から救ったのじゃ．
+    さて，%oは何のために使うのがよいじゃろう？
+
+    この地の民は勇敢ではある．しかし仮に
+    %oを奪おうとする者が再び現れたとき，
+    阻止出来るとはとても思えぬ．%nがそうしたようにな．
+
+    %oを持ってゆくがよい．%pよ．%oは
+    そなたを守ってくれるじゃろうし，またそなたも%oの
+    よき守り手となるじゃろう．そなたは思っているよりはるかに
+    偉大な探究の旅に出るのじゃ．
+
+    わしの事を忘れるでないぞ%pよ，そして勝利のあかつきには
+    ここに戻って来るのじゃ．その時にそなたが為すべきことを教えよう．
+    時が来ればこの意味も理解できるじゃろう．
+%E
+%Cc Ice 00082
+#%l handles %o for a moment, then looks at you.
+#
+#"You are its keeper now, and the time has come to resume your search
+#for the Amulet.  %Z await your return through the
+#magic portal which brought you here."
+%lは一旦%oを手に取った後，あなたに向き直った．
+
+「今や，そなたは%oの守護者じゃ．
+  魔除け探索を再開するがよい．魔法の入口の向こうで，
+  %Zがそなたを待っておるぞ．
+%E
+%Cp Ice 00090
+#"Tell us, %p, have you fared well on your great quest?"
+「%pよ，偉大なる探究の旅はうまくいっておるか？」
+%E
+%Cc Ice 00091
+#"This is wondrous, %p.  I feared that you could not possibly
+#succeed in your quest, but here you are in possession of the Amulet
+#of Yendor!
+#
+#"I have studied the texts of the magi constantly since you left.  In
+#the Book of Skelos, I found this:
+#
+#    %dC will cause a child to be sent into the world.  This child is to
+#    be made strong by trial of battle and magic, for %d has willed it so.
+#    It is said that the child of %d will recover the Amulet of Yendor
+#    that was stolen from the Creator at the beginning of time.
+#
+#"As you now possess the amulet, %p, I suspect that the Book
+#speaks of you.
+#
+#    The child of %d will take the Amulet, and travel to the Astral
+#    Plane, where the Great Temple of %d is to be found.  The Amulet
+#    will be sacrificed to %d, there on His altar.  Then the child will
+#    stand by %d as champion of all %cP for eternity.
+#
+#"This is all I know, %p.  I hope it will help you."
+「すばらしい，%pよ！  わしはそなたの偉大なる探究の旅が
+  ひょっとすると成功しないのではないかと恐れておった．
+  しかしそなたはこのとおりイェンダーの魔除けを手にしておる！
+
+  わしはそなたがこの地を去ってから，ずっと魔法書を調べておった．
+  そしてスケロスの書の中にこの部分を見つけたのじゃ．」
+
+    %d１人の子を世界に送らん．この子%dの意思により戦いに
+    於いて強く，魔術に於いても強く作られり．%dの子世界の始めより
+    造られし生物に盗まれたイェンダーの魔除けを取り戻さん．
+
+「%p，そなたは今その魔除けを持っておる．わしはこの書が
+  そなたのことを語っているのではないかと思う．」
+
+    %dの子魔除けを手に入れ，%dの偉大なる寺院を見つけんと
+    精霊界へ旅だたん．祭壇にて魔除けを%dに献上し，その子
+    %dの前にて完壁なる永遠の%cとなれり．
+
+「これがわしの知る全てじゃ，%pよ．
+  何らかの助けになることを祈っておるぞ．」
+%E
+#
+#       Knight
+#
+%Cc Kni 00001
+#You materialize in the shadows of %H.  Immediately, you notice
+#that something is wrong.  The fields around the castle are trampled and
+#withered, as if some great battle has been recently fought.
+#
+#Looking closer, you %x long gouges in the walls of %H.
+#You know of only one creature that makes those kinds of marks...
+あなたは%Hの影の中に現れた．が，すぐに何かが違っている
+ことに気付いた．城の周囲の草原は踏みつけられて萎れている．まるでつい
+最近なにか大きな争いがあったかのようである．
+
+間近をみると，%Hの壁に細長い溝があるのが見える．
+このような傷をつけられるのは唯一あの生物だけであることを，
+あなたは知っている．．．
+%E
+%Cp Kni 00002
+#Once again you stand in the shadows of %H.
+あなたは%Hの影の中に再び現れた．
+%E
+%Cp Kni 00003
+#Again, you stand before %H.  You vaguely sense that this
+#may be the last time you stand before %l.
+あなたはまた%Hの前にいる．あなたはなんとなく，
+%lの前に立つのがこれで最後となろうことを感じていた．
+%E
+%Cp Kni 00005
+#"Hail, %p!  Verily, thou lookest well."
+「ようこそ%pよ！汝は実に元気そうだ．」
+%E
+%Cp Kni 00006
+#"There is word, %p, that %n hath been sighted in the fens
+#near %i."
+「%pよ，話がある．%nが%iの側の沼地で
+  目撃されたというのだ．」
+%E
+%Cp Kni 00007
+#"Thou art our only hope now, %p."
+「%pよ，汝だけが我らが最後の希望となった．」
+%E
+%Cp Kni 00008
+#"Verily, %l could have no better champion, %p."
+「実に%lには勝者は%pを除いては見当たるまい．」
+%E
+%Cp Kni 00009
+#"Many brave %cP died when %n attacked."
+「多くの%cPが%nと戦い，そして死んでいった．」
+%E
+%Cp Kni 00010
+#"Hail, %p!  Verily, thou lookest well."
+「ようこそ%pよ！汝は実に元気そうだ．」
+%E
+%Cp Kni 00011
+#"So, %p, didst thou find %n in the fens
+#near %i?"
+「なぁ，%p，%nを%iの側の沼地で見なかったかい？」
+%E
+%Cp Kni 00012
+#"Worthy %p, hast thou proven thy right purpose on the body of %n?"
+「偉大なる%pよ，汝は%nの身体の上に正しき目的を見い出すであろう．」
+%E
+%Cp Kni 00013
+#"Verily, %l could have no better champion, %p."
+「実に%lには勝者は%pを除いては見当たるまい．」
+%E
+%Cp Kni 00014
+#"Hast thou indeed recovered %o?"
+「まことに汝が%oを取り戻してくれるのだな？」
+%E
+%Cc Kni 00015
+#"Ah, %p.  We see thou hast received our summons.
+#We are in dire need of thy prowess.  But first, We must needs
+#decide if thou art ready for this great undertaking."
+「おお，%pよ．汝は我らが召喚に応じたのであろう．
+我々には汝の武勇が必要だ．だがまず最初に，汝がこの偉大な使命に
+対して準備ができているかどうか決めなければならない．」
+%E
+%Cp Kni 00016
+#"Welcome again, %p.  We hope thou art ready now."
+「よくぞ参った，%pよ．汝の準備が整っていることを期待するぞ．」
+%E
+%Cp Kni 00017
+#"Once again, thou standest before us, %p.  Art thou ready now?"
+「またも汝は我らがもとに来た，%pよ．準備はできたか？」
+%E
+%Cp Kni 00018
+#"Thou disgracest this noble court with thine impure presence.  We have been
+#lenient with thee, but no more.  Thy name shall be spoken no more.  We
+#hereby strip thee of thy title, thy lands, and thy standing as %ca.
+#Begone from our sight!"
+「汝はこの高貴なる廷をその汚らわしい存在で辱めたのだ．我々は
+汝には寛大であった．が，それもこれまでである．汝の名は二度と口
+にされるまい．これにより我らは汝の称号，土地，そして%cとして
+の地位も剥奪してくれよう．立ち去るがいい！」
+%E
+%Cp Kni 00019
+#"Verily, %p, thou hast done well.  That thou hast survived thus
+#far is a credit to thy valor, but thou art yet unprepared for
+#the demands required as Our Champion.  %rA, no matter how
+#pure, could never hope to defeat the foul %n.
+#
+#"Journey forth from this place, and hone thy skills.  Return to
+#Our presence when thou hast attained the noble title of %R."
+「%pよ，実によくやった．汝がこれまでに切り抜けてきたことは，
+その武勇伝に刻まれている．しかし汝は，我らの擁護者に
+必要とされる要求に対してまだ準備ができていない．
+%rAは，たとえどんなに高潔であっても，
+卑劣な%nをうち負かすことはまったく望めない．
+
+「この場所から旅立ち，そして汝の能力を磨け．%Rの高貴な称号を
+勝ち得たら，我々の場所へ戻ってくるがいい．」
+
+%E
+%Cp Kni 00020
+#"Thou dishonourest us, %p!  Thou hast strayed from the path of
+#chivalry! Go from our presence and do penance.  Only when thou art again
+#pure mayst thou return hence."
+「%pよ，汝は我らが名誉を汚した！汝は騎士道を踏み外したのだ！
+ここから立ち去り，そして懺悔するがよい．汝が再び純粋になったなら，
+ここに戻ることを許そう．」
+%E
+%Cc Kni 00021
+#"Ah, %p.  Thou art truly ready, as no %c before thee hath
+#been.  Hear now Our words:
+#
+#"As thou noticed as thou approached %H, a great battle hath
+#been fought recently in these fields.  Know thou that Merlin himself
+#came to aid us here as we battled the foul %n.  In the midst of that
+#battle, %n struck Merlin a great blow, felling him.  Then, as our
+#forces were pressed back, %n stole %o.
+#
+#"We eventually turned the tide, but lost many %cP in doing so.
+#Merlin was taken off by his apprentice, but hath not recovered.  We have
+#been told that so long as %n possesseth %o,
+#Merlin will not regain his health.
+#
+#"We hereby charge thee with this most important of duties:
+#
+#"Go forth from this place, to the fens, and there thou wilt find
+#%i.  From there, thou must track down %n.  Destroy the
+#beast, and return to Us %o.  Only then can
+#We restore Merlin to health."
+「おお，%pよ．汝の用意が整ったようだ．汝のような%cはこれまで
+現れなかった．さあ，我らが命を伝えよう：
+
+「汝が%Hに到着してすぐに気付いたとおり，つい最近この平原で
+  戦いがあった．知っての通り，醜い%nと戦うために
+  マーリン自身がここに我らの手助けに来たのだ．その戦いの中で，
+  %nの強大な一撃でマーリンは倒れてしまった．
+  そして我らが軍勢は撤退を余儀なくされ，%nに
+  %oを奪われたのだ．
+
+「結果として形勢は変わり，多くの%cPを失ってしまった．
+  マーリンはその弟子に連れていかれたが，まだ回復していない．
+  %nが%oを所有している限り，マーリンがその健康を
+  回復しないと聞いている．
+
+「そこで我々は汝に次の極めて重大な義務を課すこととなったのだ：
+
+「この場所から沼地に向かい，そしてそこで汝は%iを探す．
+  そして，そこから汝は%nを追跡し捉える．その獣を倒し，我らに
+  %oを取り返すのだ．そしてその時初めてマーリンは健康を回復する
+  ことができるだろう．」
+%E
+%Cp Kni 00025
+#"Remember, %p, follow always the path of %d."
+「%pよ，常に%dの足跡に従うことを忘れるでない．」
+%E
+%Cp Kni 00026
+#"Though %n is verily a mighty foe, we have confidence in thy victory."
+「%nは実に強力な敵だが，我々は汝の勝利に自信を持っている．」
+%E
+%Cp Kni 00027
+#"Beware, for %n hath surrounded himself with hordes of foul creatures."
+「%nはそのまわりをおぞましい生物の大群で守られているという．
+気を付けるがいい．」
+%E
+%Cp Kni 00028
+#"Great treasure, 'tis said, is hoarded in the lair of %n."
+「すばらしい宝物が%nの巣に貯えられているという．」
+%E
+%Cp Kni 00029
+#"If thou possessest %o, %p, %ns magic
+#shall therewith be thwarted."
+「%pよ，もし汝が%oを手に入れているのであれば，
+  それによって%nの魔法をくじくことができよう．」
+%E
+%Cp Kni 00030
+#"The gates of %i are guarded by forces unseen, %p.
+#Go carefully."
+「%pよ，%iの門は見えない力で守られているぞ．
+気を付けて行くがいい．」
+%E
+%Cp Kni 00031
+#"Return %o to us quickly, %p."
+「%oを直ちに我らが手に取り返すのだ，%pよ．」
+%E
+%Cp Kni 00032
+#"Destroy %n, %p, else %H shall surely fall."
+「%nを倒すのだ，%pよ．さもなくば
+  %Hは確実に落ちよう．」
+%E
+%Cp Kni 00033
+#"Call upon %d when thou art in need."
+「汝が必要になれば，%dを求めるがよい．」
+%E
+%Cp Kni 00034
+#"To find %i, thou must keep thy heart pure."
+「汝が%iを見つけるには，純粋な心を保たねばならない．」
+%E
+%Cc Kni 00035
+#You stand at the foot of %i.  Atop, you can %x a shrine.
+#Strange energies seem to be focused here, and the hair on the back
+#of your neck stands on end.
+あなたは%iのすそに立たずんでいる．その頂上にはほこらが見えた．
+怪しいエネルギーがそこに集中しているように見え，そしてあなたの後ろ髪は
+ピンと逆立った．
+%E
+%Cp Kni 00036
+#Again, you stand at the foot of %i.
+再びあなたは%iのすそにいる．
+%E
+%Cc Kni 00040
+#As you exit the swamps, you %x before you a huge, gaping hole in the
+#side of a hill.  From within, you smell the foul stench of carrion.
+#
+#The pools on either side of the entrance are fouled with blood, and
+#pieces of rusted metal and broken weapons show above the surface.
+あなたがその沼から脱出すると，目前に，大きくぱっくりと開いた穴が
+丘の側面にあるのが見えた．その中から屍肉の悪臭がただよってくる．
+
+入り口の周囲の水たまりは血で汚れ，その表面には錆びた金属や壊れた
+武器が見える．
+%E
+%Cp Kni 00041
+#Again, you stand at the entrance to %ns lair.
+再び，あなたは%nの巣の入り口に立っていた．
+%E
+%Cp Kni 00050
+#"Hah!  Another puny %c seeks death.  I shall dine well tonight,
+#then tomorrow, %H shall fall!"
+「むふふ，またしてもおろかな%sが死を求めておる．今夜はごちそう
+  にしようぞ．そして明日は%Hが落ちるのだ！」
+%E
+%Cp Kni 00051
+#"Thy strength waneth, %p.  The time of thy death draweth near."
+「またしても汝は我に挑もうというのか，%rよ？好きにするがいい．
+が，ここで死ぬことになるぞ．」
+%E
+%Cp Kni 00052
+#"Thou art truly foolish, %r.  I shall dispatch thee anon."
+「まったくもって汝はたわけだな，%r．さっさと汝を片付けてくれよう．」
+%E
+%Cp Kni 00053
+#"So, thou darest touch MY property!  I shall have that bauble back,
+#puny %r.  Thou wilt die in agony!"
+「ずうずうしくも我が財産に触れようとは！それは子供だましの後ろにあるのだ，
+おろかな%rよ．苦しみもだえて死ぬがいい！」
+%E
+%Cp Kni 00060
+#"A mere %r can never withstand me!"
+「たかが%rでは我には耐えられぬぞ！」
+%E
+%Cp Kni 00061
+#"I shall kill thee now, and feast!"
+「汝をすぐに殺して，食ってくれよう！」
+%E
+%Cp Kni 00062
+#"Puny %c.  What manner of death dost thou wish?"
+「ちっぽけな%cよ．どのような死を汝は望むのだ？」
+%E
+%Cp Kni 00063
+#"First thee, %p, then I shall feast upon %l."
+「最初は汝だ，%p．それから%lを食らおうぞ．」
+%E
+%Cp Kni 00064
+#"Hah!  Thou hast failed, %r.  Now thou shalt die."
+「むふふ，汝は失敗したようだな，%rよ．今こそ汝の死すべき時なり．」
+%E
+%Cp Kni 00065
+#"Die, %c.  Thou art as nothing against my might."
+「死ね，%c．汝では我の力には適わぬ．」
+%E
+%Cp Kni 00066
+#"I shall suck the marrow from thy bones, %c."
+「汝の骨の髄まで吸ってやろうぞ，%cよ．」
+%E
+%Cp Kni 00067
+#"Let's see...  Broiled?  No.  Fried?  Nay.  Baked?  Yea verily,
+#that is the way I like my %c for dinner."
+「ええい，あぶってやろうか？いや，揚げるか？否，焼く方がいいか？
+しかり，こうやって%cをいただくのが実に我は好きなのだ．」
+%E
+%Cp Kni 00068
+#"Thy strength waneth, %p.  The time of thy death draweth near."
+「%pよ，力が抜けていくだろう．もうじき汝に死が訪れようぞ」
+%E
+%Cp Kni 00069
+#"Call upon thy precious %d, %p.  It shalt not avail thee."
+「貴重なる%dを求めてきたのか，%pよ．
+  汝ではこれは使えぬぞ．」
+%E
+%Cc Kni 00070
+#As you pick up %o, you feel its protective fields
+#form around your body.  You also feel a faint stirring in your mind,
+#as if you are in two places at once, and in the second, you are waking
+#from a long sleep.
+あなたは%oを拾うと，あなたのまわりにその結界が生じるのを
+感じた．また，まるで同時に二ヶ所にいるような，そしてたちまち長い眠りから
+覚めたような，そんな軽い感動を覚えた．
+%E
+%Cc Kni 00080
+#As %n sinks to the ground, blood gushing from his open mouth, he
+#defiantly curses you and %l:
+#
+#    Thou hast not won yet, %r.  By the gods, I shall return and dog
+#    thy steps to the grave!
+#
+#His tail flailing madly, %n tries to crawl towards you, but slumps
+#to the ground and dies in a pool of his own blood.
+%nはその開いた口から血を吹き出し地に沈んでいく一方で，挑戦的に
+あなたと%lを呪って言った：
+
+    汝はまだ勝ったわけではないぞ，%rよ．ええい口惜しい，必ずや舞い戻り
+    汝の血で汝の名を墓に刻んでやるぞ．
+
+狂ったように尻尾を振り回し，%nはあなたに近づこうともがいたが，
+地面に伏して自らの血の海の中で死んだ．
+%E
+%Cc Kni 00081
+#As you approach %l, he beams at you and says:
+#
+#    Well done!  Thou art truly the Champion of %H.  We
+#    have received word that Merlin is recovering, and shall soon
+#    rejoin us.
+#
+#    He hath instructed us that thou art now to be the guardian of
+#    %o.  He feeleth that thou mayst have need of
+#    its powers in thine adventures.  It is our wish that thou keepest
+#    %o with thee as thou searchest for the fabled
+#    Amulet of Yendor.
+%lに近づくと，彼はあなたに微笑み，そして言った：
+
+    よくやった！汝は%Hの真の勝者となった．我々はマーリンが
+    回復し，そしてじきに我らに合流すると伝えられている．
+
+    彼は我らに今や汝が%oの護衛として適していることを
+    教えてくれた．彼は汝の冒険においてその力を汝が必要としているで
+    あろうことを感じているのだ．偉大なるイェンダーの魔除けの探索と
+    して，汝が%oとともにあることを我らは望んでいる．
+%E
+%Cc Kni 00082
+#"Careful, %p!  %oC might break, and that would
+#be a tragic loss.  Thou art its keeper now, and the time hath come
+#to resume thy search for the Amulet.  %Z await thy
+#return through the magic portal that brought thee here."
+「気をつけろ%p！%oが壊れてしまう．
+  そうなったら大きな痛手だ．汝は%oの守護者だ．
+  魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zが汝を待っているぞ．」
+%E
+%Cp Kni 00090
+#"Well met, %p.  How goeth thy search for the Amulet of Yendor?"
+「よくぞ来た，%pよ．イェンダーの魔除けの探索はどうなっておる？」
+%E
+%Cc Kni 00091
+#"Thou hast succeeded, we see, %p!  Now thou art commanded to take
+#the Amulet to be sacrificed to %d in the plane of the astral.
+#
+#"Merlin hath counseled us that thou must travel always upwards through
+#the planes of the elements, to achieve this goal.
+#
+#"Go with %d, %p."
+「よくやった，%pよ！汝は次は精霊界の%dに捧げるべく，
+かの魔除けを持っていくのだ．
+
+「マーリンから次の助言をうけておる．それは汝がその目的を達成するには，
+界面を通り抜けて上に向かわねばならないというものだ．
+
+「%pに%dの加護のあらんことを．」
+%E
+#
+#       Monk
+#
+%Cc Mon 00001
+#You find yourself standing in sight of %H.  Something
+#is obviously wrong here.  The doors to %H, which usually
+#stand open, are closed.  Strange human shapes shamble around
+#outside.
+#
+#You realize that %l needs your assistance!
+気がつくと，あなたは%Hの前に立っていた．が，何かが違う．
+普段開いている%Hの戸は完全に閉ざされているし，奇妙な人間
+の格好をしたものが外をよろよろと歩いている．
+
+あなたは%lが手助けを求めていることに気付いた．
+%E
+%Cp Mon 00002
+#Once again, you stand before %H.
+もう一度，あなたは%Hの前に立っていた．
+%E
+%Cp Mon 00003
+#Again you face %H.  Your intuition hints that this may be
+#the final time you come here.
+あなたは再び %H の前に立っていた．虫の知らせか，
+あなたはここに来るのがこれで最後なのかもしれないとを感じた．
+%E
+%Cp Mon 00005
+#"Greetings, honored %r.  It is good to see you."
+「よくぞ来た，光栄なる%rよ．そなたに会えて私は非常にうれしい．」
+%E
+%Cp Mon 00006
+#"Ah, %p!  Surely you can help us in our hour of need."
+「%pよ．そなたならこの重大な時期に立たされている我らを助ける
+  ことが出来るであろう．」
+%E
+%Cp Mon 00007
+#"Greetings, %s.  %lC has great need of your help."
+「ようこそ，我%sよ．%lがあなたに手助けを求めていらっしゃる．」
+%E
+%Cp Mon 00008
+#"Alas, it seems as if even %d has deserted us."
+「ああ，我々は%dにも見放されてしまったのではなかろうか．」
+%E
+%Cp Mon 00009
+#"May %d be with you, %s."
+「%dがあなたとともにあらんことを．」
+%E
+%Cp Mon 00010
+#"Greetings, honorable %r.  It is good to see you again."
+「よくぞ来た，偉大なる%rよ．そなたに再び会えて私は非常にうれしい．」
+%E
+%Cp Mon 00011
+#"Ah, %p!  Our deepest gratitude for all of your help."
+「%pよ．あなたの助けには深い感謝の念が絶えない．」
+%E
+%Cp Mon 00012
+#"Greetings, %s.  Perhaps you will take some time to meditate with us?"
+「ようこそ，我%sよ．おそらく我々との計画はある程度の時間を要するでしょう．」
+%E
+%Cp Mon 00013
+#"With this test behind you, may %d bring you enlightenment."
+「後に控えているこの試練で，%dはあなたに悟りをもたらすだろう．」
+%E
+%Cp Mon 00014
+#"May %d be with you, %s."
+「%dがあなたとともにあらんことを．」
+%E
+%Cc Mon 00015
+#"Ah, %p, my %S.  You have returned to us at last.
+#A great blow has befallen our order; perhaps you can help us.
+#First, however, I must determine if you are prepared for this
+#great challenge."
+「我が%S%pよ．そなたはやっと我々のもとへ戻ってきた．
+  我々の教団は現在重大な危機に頻しておる．これについて，そなたは我々の手
+  助けを出来るやもしれぬ．
+  しかし，まず最初に，私はそなたがこの大いなる挑戦に対する心構えが出来て
+  いるかどうか試さねばならぬ．」
+%E
+%Cp Mon 00016
+#"Again, my %S, you stand before me.  Are you ready now to help us?"
+「我が%Sよ，そなたは再び私の前に現れた．我々の手助けをする
+  心構えは出来たか？」
+%E
+%Cp Mon 00017
+#"Once more, %p, you stand within the sanctum.  Are you ready now?"
+「%p，そなたは再び聖域の内に現れた．準備は出来たか？」
+%E
+%Cc Mon 00018
+#"You are a heretic, %p!  How can you, %ra, deviate so from the
+#teachings of %d?  Begone from this temple.  You are no longer
+#%sa to this order.  We will pray to %d for other assistance,
+#as you have failed us utterly."
+「%p，この異端が！どうしたら，そなたのような%rが%d
+  の教えからそれることが出来るのだ！この寺院の内から出ていけい！そなた
+  はもうこの教団の%sではない！そなたが我々の期待に応えられなかった
+  手前，%dには他の手助けを乞うよう祈ろう．」
+%E
+%Cc Mon 00019
+#"Alas, %p, it is not yet to be.  A mere %r could never
+#withstand the might of %n.  Go forth, again into the world, and return
+#when you have attained the post of %R."
+「%p，残念ながら，そちはまだ用意できておらぬようだ．
+  %rでは%nに太刀打ちすることは無理だ．また再び世の中へ出て，
+  %Rの地位をおさめることが出来たら帰ってくるがよい．」
+%E
+%Cc Mon 00020
+#"This is terrible, %p.  You have deviated from the true path!
+#You know that %d requires the most strident devotion of this
+#order.  The %shood must stand for utmost piety.
+#
+#"Go from here, atone for your sins against %d.  Return only when
+#you have purified yourself."
+「これはなんとひどいことじゃ，%p．そなたは正道から踏み外し
+  ている．そなたも存じておろう，%dは強い信仰心をこの教団に
+  求めていることを．そなたは完璧なまでの信心を見せねばならぬ．
+
+  ここから出て，%dへと働いた罪を懺悔するのだ．己の身を清めら
+  れたときのみ，ここへと戻るがよい．」
+%E
+%Cc Mon 00021
+#"Yes, %p.  You are truly ready now.  Attend to me and I shall
+#tell you of what has transpired:
+#
+#"At one of the Great Festivals a short time ago, %n and a legion
+#of undead invaded %H.  Many %gP were killed, including
+#the one carrying %o.
+#
+#"As a final act of vengefulness, %n desecrated the altar here.
+#Without it, we could not mount a counter-attack.  Now, there are
+#barely enough %gP left to keep the undead at bay.
+#
+#"We need you to find %i, then, from there, travel
+#to %ns lair.  If you can manage to defeat %n and return
+#%o here, we can then drive off the legions of
+#undead that befoul the land.
+#
+#"Go with %d as your guide, %p."
+「%pよ．そなたは用意が出来ておるようだ．今から何が起こったか
+  話すので，私のいうことに耳を傾けてくれ．
+
+「少し前の大祭に，%nと，%nに引き連られたアンデッドの軍団が
+  %Hを攻めたのだ．%oを持っていた者を始め，多くの
+  %gが殺されたのだ． 
+
+「そしてその後，恐れ多くも%nはここの祭壇を汚したのだ．
+  祭壇なしでは我々は逆襲することは出来ない．そして現在，我々のもとには
+  %Hに軍勢を寄せつけないためにするだけの，ごく小数の%g
+  しかいないのだ．
+
+「まず最初に，%iを探し，そして，そこから%nのアジトへと向かっ
+  てもらう．もしそなたが%nを倒して，%oを持ち帰ってくることが
+  出来るのならば，我々はこの土地を汚すアンデッド
+  どもを追い返せるのだ．
+
+「さあ，%dの加護のもと，行くのだ，%pよ．」
+%E
+%Cp Mon 00025
+#"You can prevail, if you rely on %d."
+「%dを信ずれば，そなたは勝てる．」
+%E
+%Cp Mon 00026
+#"Remember that %n has great magic at his command."
+「%nはすさまじい魔術を意のままに操る，ということを肝に命じておけ．」
+%E
+%Cp Mon 00027
+#"Be pure, my %S."
+「清くあれ，我が%Sよ．」
+%E
+%Cp Mon 00028
+#"Beware, %i is surrounded by a great graveyard."
+「%iは巨大な墓地に囲まれておる，気をつけるように．」
+%E
+%Cp Mon 00029
+#"You may be able to affect %n with magical cold."
+「もしかすれば，%nを冷気の呪文で冒すことが出来るかもしれない．」
+%E
+%Cp Mon 00030
+#"Acquire and wear %o if you can.  It will aid you
+#against %n."
+「できるならば%oを手にいれ，装着するのだ．%nに対し効力を発揮
+  するであろう．」
+%E
+%Cp Mon 00031
+#"Call upon %d when your need is greatest.  You will be answered."
+「最も困ったと思われるときには%dに助けを求めよ．
+  そなたの願いは受けれられるであろう．」
+%E
+%Cp Mon 00032
+#"Remember to use the elementals' strength against them!"
+「元素の力を使うことを忘れるな！」
+%E
+%Cp Mon 00033
+#"Do not loose faith, %p.  If you do so, %n will grow stronger."
+「%pよ，信仰心を忘れるな．もしそのようなことがあれば，
+  %nはより強くなることであろう．」
+%E
+%Cp Mon 00034
+#"Wear %o.  It will assist you against the undead."
+「%oを装着せよ．さすれば，アンデッドに対し，効力を発揮する．」
+%E
+%Cc Mon 00035
+#You stand facing a large graveyard.  The sky above is filled with clouds
+#that seem to get thicker closer to the center.  You sense the presence of
+#undead in larger numbers than you have ever encountered before.
+#
+#You remember the descriptions of %i, given to you by
+#%lC.  It is ahead that you will find %ns trail.
+あなたは大きな墓地の前に立っている．空は中心へいくに連れてどんよりとし
+ていく雲に囲まれている．あなたは今までに遭遇したことのないほどのアンデッ
+ドの大軍の存在を察した．
+
+あなたは%lが教えてくれた，%iの構造を思い出した．
+前方に%nの通った跡があるようだ．
+%E
+%Cp Mon 00036
+#Again, you stand before %i.
+あなたは再び%iの前に立った．
+%E
+%Cc Mon 00040
+#The stench of brimstone is all about you, and the shrieks and moans
+#of tortured souls assault your psyche.
+#
+#Ahead, there is a small clearing amidst the bubbling pits of lava...
+そこらじゅうが硫黄の臭いによって包まれ，不具な魂供の叫びやうめきが，あ
+なたの不安をかりたてた．
+
+手前の，ぐつぐつと煮えたった溶岩の狭間に，小さな空き地がある．
+%E
+%Cp Mon 00041
+#Again, you have invaded %ns domain.
+あなたは再び%nの領域を襲撃した．
+%E
+%Cc Mon 00050
+#"Ah, so %lC has sent another %g to retrieve
+#%o.
+#
+#"No, I see you are no %g.  Perhaps I shall have some fun today
+#after all.  Prepare to die, %r!  You shall never regain
+#%o."
+「ケッ！%lがまたもや%gをよこしたのか，
+  %oを取り返すために．
+
+「いや，待て．そちは，ただの%gではないらしいな．もしかしたら，
+  今日は少し楽しめるかもしれない．死ぬ準備でもするのだな，%r！
+  そなたが%oを取り返すことなど不可能なのだからな．」
+%E
+%Cp Mon 00051
+#"So, %r.  Again you challenge me."
+「ほう，%r．そちはまた私に挑戦するのか．」
+%E
+%Cp Mon 00052
+#"Die now, %r.  %d has no power here to aid you."
+「死ねい，%r．ここでは%dがそちを助けることはできぬ．」
+%E
+%Cp Mon 00053
+#"You shall die, %r, and I will have %o back."
+「%r，そちは死んで，私は%oを取り返すのだ．」
+%E
+%Cp Mon 00060
+#"Submit to my will, %c, and I shall spare you."
+「%cよ，私に服従すれば，私はそちを生かす．」
+%E
+%Cp Mon 00061
+#"Your puny powers are no match for me, %c."
+「%cよ，そちのような猪小才では私には到底及ばぬ．」
+%E
+%Cp Mon 00062
+#"I shall have you turned into a zombie for my pleasure!"
+「私の楽しみのために，そちをゾンビにでもしてやろう．」
+%E
+%Cp Mon 00063
+#"Despair now, %r.  %d cannot help you."
+「絶望だな，%r．%dはそちを助けることはできぬ．」
+%E
+%Cp Mon 00064
+#"I shall feast upon your soul for many days, %c."
+「そちの魂を何日にも渡って喰らいつづけてやろうではないか，%c．」
+%E
+%Cp Mon 00065
+#"Your death will be slow and painful.  That I promise!"
+「そちはじわじわと苦しめて殺してくれよう．それだけ私は約束する」
+%E
+%Cp Mon 00066
+#"You cannot defeat %n, you fool.  I shall kill you now."
+「そちのようなうつけでは，%nに勝てぬのだ．殺して差し上げよう．」
+%E
+%Cp Mon 00067
+#"Your precious %lt will be my next victim."
+「%lが私の次の餌食となるであろう．」
+%E
+%Cp Mon 00068
+#"I feel your powers failing you, %r.  You shall die now."
+「そちは力を調節出来ぬようだな，%r．そちはもう死ぬ．」
+%E
+%Cp Mon 00069
+#"With %o, nothing can stand in my way."
+「%oさえあれば，私に恐れるべきものはない．」
+%E
+%Cc Mon 00070
+#As you pick up %o, you feel the essence of
+#%d fill your soul.  You know now why %n stole it from
+#%H, for with it, %ca of %d could
+#easily defeat his plans.
+#
+#You sense a message from %d.  Though not verbal, you
+#get the impression that you must return to %lC as soon
+#as possible.
+%oを拾うと，あなたは%dの本質を感じとった．そして，
+%dの%cならば%nの野望を打ち破れるから，
+%nが%Hより%oを盗んだ，ということに気付いた．
+
+あなたは%dからのメッセージを感じ取った．それは言葉に
+よるものではないが，あなたはすぐ%lのもとへ帰らねばならない
+ことを感じた．
+%E
+%Cc Mon 00080
+#%nC gasps:
+#
+#    "You have only defeated this mortal body.  Know this: my spirit
+#    is strong.  I shall return and reclaim what is mine!"
+#
+#With that, %n expires.
+%nはあえいだ．
+
+  おまえはわが定命の肉体を退けたに過ぎぬ．覚えておくがよい．
+  我が魂は強大である．私は必ず戻り，我が物を取り戻す！
+
+そして，%nは死んだ．
+%E
+%Cc Mon 00081
+#"You have returned, %p.  And with %o, I see.
+#Congratulations.
+#
+#"I have been in meditation, and have received direction from
+#a minion of %d.  %d commands that you retain
+#%o.  With it, you must recover the Amulet
+#of Yendor.
+#
+#"Go forth, and let %d guide your steps."
+%p，帰ってきたか．．しかも，%oを手にして．
+おめでとう．
+
+私はずっと瞑想していたのだが，%dの使者より命令を承った．
+%dは，そなたに%oを持ち続けるように，と命じた．そして，
+それをもって，イェンダーの魔除けを取り戻すのだ．
+%E
+%Cc Mon 00082
+#%lC studies %o for a moment,
+#then returns his gaze to you.
+#
+#"%oC must remain with you.  Use them
+#as you resume your search for the Amulet.
+#%Z await your return through the magic portal
+#that brought you here."
+%lは素早く%oをあなたに返した．
+
+「今や，そなたは%oの守護者だ．
+  魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zがそなたを待っているぞ．
+%E
+%Cp Mon 00090
+#"Welcome back, %p.  How is your quest for the Amulet going?"
+よくぞ帰ってきた，%p．魔除けを探す方はどうなっているのだ．
+%E
+%Cc Mon 00091
+#"You have prevailed, %p!  %d is surely with you.  Now,
+#you must take the amulet, and sacrifice it on %ds altar on
+#the Astral plane.  I suspect that I shall never see you again in this
+#life, but I hope to at %ds feet."
+%pよ，そちは打ち勝ったのだ！真に，%dはそちとともに在る．
+さあ，そなたは魔除けを持って，これから精霊界にある%dの祭壇
+にそれを捧げるのだ．今生ではそなたに会うことはもうないだろう，
+しかし，%dの足元でそなたに会うことを楽しみにしているぞ．
+%E
+#
+#       Necromancer
+#
+%Cc Nec 00001
+#You are suddenly surrounded by stinking mists. Ah! The smell of home!
+#
+#However, things are not the same as when you were last here.  You hear
+#demoniac cackling from all around, and the dry, rustling flap of
+#leathery wings.
+#
+#You know %l would never allow such creatures to approach the
+#tower...  unless something were dreadfully wrong!
+突然あなたは悪臭を放つ霧に囲まれた．ああ！故郷の匂いだ！
+
+しかし，あなたがここを去ったときとはなにかが違う．
+狂人のような叫び声が至るところから聞こえ，
+乾いたなめし皮の羽が羽ばたいている．
+
+%lがこのようなモンスターをこの塔に近づけさせるはずがない．
+なにか悪いことがあったのだ！
+%E
+%Cp Nec 00002
+#Once again, you are back at %H.
+あなたは再び%Hに戻って来た．
+%E
+%Cp Nec 00003
+#You are back at %H.
+#You have an odd feeling this may be the last time you ever come here.
+あなたは%Hに戻ってきた．
+これがこの地を訪れる最後の機会になるだろうという奇妙な直観が働いた．
+%E
+%Cp Nec 00005
+#"Would you happen to have some eye of newt in that overstuffed pack, %s?"
+「ひょっとしてその荷物の中にいもりの目玉が入っていたりはしないかね？  %sよ．」
+%E
+%Cp Nec 00006
+#"Ah, the spell to create the magic portal worked.  Outstanding!"
+「おお，魔法の入口を作る魔法はうまくいったのか．素晴しい！」
+%E
+%Cp Nec 00007
+#"Hurry!  %lC may not survive that casting of the
+#portal spell!!"
+「急げ！  %lは魔法の入口を作る呪文を唱えるのに力を使い果たしてしまう！」
+%E
+%Cp Nec 00008
+#"We must strive to destroy that bloodless demon, or all is lost."
+「我々はあの血の流れていない悪魔を倒すために戦わなくてはならない．
+  そうせねば全てが失しなわれてしまう．」
+%E
+%Cp Nec 00009
+#"I, too, will venture into the world, because %n is but one of
+#many demons to be vanquished."
+「私も世界を冒険したいと思っている．
+  %nは倒すべき悪魔の一匹に過ぎないのだからな．」
+%E
+%Cp Nec 00010
+#"Would you happen to have some eye of newt in that overstuffed pack, %s?"
+「ひょっとしてその荷物の中にいもりの目玉が入っていたりはしないかね？  %sよ．」
+%E
+%Cp Nec 00011
+#"Ah, the spell to create the magic portal worked.  Outstanding!"
+「おお，魔法の入口を作る魔法はうまくいったのか．素晴しい！」
+%E
+%Cp Nec 00012
+#"I, too, will venture into the world, because %n was but one of
+#many demons to be vanquished."
+「私も世界を冒険したいと思っている．
+  %nは倒すべき悪魔の一匹に過ぎないのだからな．」
+%E
+%Cp Nec 00013
+#"Yes! I have been rostered the graveyard shift this week!"
+「そう！私は今週は墓守の当番なんだ．」
+%E
+%Cp Nec 00014
+#"I wonder how Doctor Frankenstein's work progresses?"
+「フランケンシュタイン博士の研究の進行状況はどうなのだろうな．」
+%E
+%Cc Nec 00015
+#"Come closer, %p, for my voice falters in my old age.
+#Yes, I see that you have come a long way since you went out into the
+#world, leaving the confines of this tower.  However, I must first
+#determine if you have all of the skills required to take on the task
+#I require of you."
+「もっと近くにおいで，%p，私も年を取ってはっきり
+  しゃべれなくなったからね．よし，おぬしはこの塔を離れ，
+  外の世界へ旅立ってから長い旅をしてきたようだね．
+  まずは，おぬしにこれから課そうとしている困難に必要なだけの
+  経験をおぬしが積んでいるかどうかを見極めさせておくれ．」
+%E
+%Cp Nec 00016
+#"Well, %p, you have returned.  Perhaps you are now ready..."
+「うむ，%p．よく戻って来たね．今度は準備できたかね？」
+%E
+%Cp Nec 00017
+#"This is getting tedious, %p, but perseverance is a sign of a true mage.
+#I certainly hope that you are truly ready this time!"
+「だんだん待ちくたびれてきたよ，%p．しかし忍耐は真の魔法使いの証だ．
+  今度こそおぬしが準備を整えてきたことを望むよ！」
+%E
+%Cc Nec 00018
+#"You fool, %p!  Why did I waste all of those years teaching you
+#the dark arts?  Get out of here!  I shall find another."
+「馬鹿ものが，%p！  なぜおぬしに長い年月をかけて無駄な技を
+  教えたりしたのだろう．ここから立ちされ！ 他の者に頼ることにする．」
+%E
+%Cc Nec 00019
+#"Alas, %p, you have not yet shown your proficiency as a worthy
+#necromancer.  As %ra, you would surely be overcome in the challenge
+#ahead.  Go, now, expand your horizons, and return when you have attained
+#renown as %Ra."
+「ああ，%pよ，おぬしは一人前の死人使いとして，まだ十分熟達しておらん．
+  %rの身分では，この冒険においておぬしは打ち負かされてしまうじゃろう．
+  今は去るのだ．そして自らの地平を開き，%Rの称号を手に入れたときに
+  戻って来るがいい．」
+%E
+%Cc Nec 00020
+#"You amaze me, %p!  How many times did I tell you that sorcery
+#requires care.  One must maintain the balance of darkness within oneself,
+#lest one leave it in ruins and simplify the task of %n.
+#
+#"You must go back and show your worthiness.  Do not return until you are
+#truly ready for this quest.  May %d guide you in this task."
+「なんということじゃ，%p！  あれほど魔法の扱いには
+  注意するように言ったはずじゃろて．死人使いは自分の中の暗黒の
+  調和を保たねばならぬ．調和が崩れれば破滅が訪れ，%nの
+  計画も容易いものになってしまうのじゃ．
+
+  おぬしはあの世界に戻り，自分の信念を示さねばならぬ．この冒険の
+  準備が整うまではここに戻って来てはならぬ．%dがおぬしの
+  仕事を導いて下さるように祈ろうぞ．」
+%E
+%Cc Nec 00021
+#"Yes, %p, you truly are ready for this dire task.  Listen,
+#carefully, for what I tell you now will be of vital importance.
+#
+#"Since you left us to hone your skills in the world, we unexpectedly came
+#under attack by the forces of %n.  As you know,
+#we thought he had perished at the end of the last age, but, alas,
+#this was not the case.
+#
+#"%nC sent an army of abominations against us.  Among them
+#was a minion, mindless and ensorcelled, and thus, in the confusion,
+#it was able to penetrate our defenses.  Alas, this creature has stolen
+#%o and I fear it has delivered it
+#to %n.
+#
+#"You must travel to %i, and within its dungeons,
+#find and overcome %n, and return %o to me.
+#
+#"Go now, with %d, and return freedom to our tower."
+「よしよし，%p，やっとこの緊急の仕事の準備ができたようだね．
+  注意して聞くのだよ．これから話すことは重要なことだから．
+
+  おぬしが技術を磨くために我々の元を去ってから，
+  我々は予期せぬ%nの軍隊の攻撃を受けてね．知っての通り，
+  きゃつは先の時代に滅びたものと思われていたが，
+  ああ，そうではなかったのだよ．
+
+  %nは憎たらしい軍隊を我等に差し向けた．
+  その軍隊は心を失った，魔法をかけられたものどもだった．
+  そして混乱に乗じて，きゃつらは我等の守りを打ち破った．
+  ああ悲しや，きゃつらは%oを盗みだし，%nにそれを
+  届けたらしいのじゃ．
+
+  おぬしは%iに向かわねばならぬ．そこにある迷宮の中で
+  %nを探し出し，打ち破るのじゃ．そして%oを
+  私の元へ取り戻しておくれ．
+
+  ゆけ，%dと共に．わが塔に秩序を取り戻すのじゃ．」
+%E
+%Cp Nec 00025
+#"Beware, for %n is immune to most magical attacks."
+「%nはほとんどの魔法攻撃に対して耐性を持っておるぞえ．」
+%E
+%Cp Nec 00026
+#"To enter %i you must pass many traps."
+「%iに侵入するには多くの罠を抜けなければならぬ．」
+%E
+%Cp Nec 00027
+#"%nC may be vulnerable to physical attacks."
+「%nは物理攻撃には弱いじゃろう．」
+%E
+%Cp Nec 00028
+#"%d will come to your aid when you call."
+「%dにすがれば助けてもらえることじゃろて．」
+%E
+%Cp Nec 00029
+#"You must utterly destroy %n.  He will pursue you otherwise."
+「%nは完全に滅ぼさなくてはならないよ．
+  さもなくば，きゃつはおぬしを追っていくじゃろて．」
+%E
+%Cp Nec 00030
+#"%oC is a mighty artifact.  With it you can
+#destroy %n."
+「%oは強力なアーティファクトじゃ．
+  それがあれば%nを倒せるじゃろう．」
+%E
+%Cp Nec 00031
+#"Go forth with the blessings of %d."
+「%dの御加護と共に進むがよい．」
+%E
+%Cp Nec 00032
+#"I will have my %gP watch for your return."
+「わが%gにおぬしの帰りを待たせるつもりじゃ．」
+%E
+%Cp Nec 00033
+#"Feel free to take any items in that chest that might aid you."
+「その宝箱のなかのアイテムは自由に取ってよいぞえ．
+  おぬしの助けになるとよいのじゃが．」
+%E
+%Cp Nec 00034
+#"You will know when %o is near.  Proceed with care!"
+「%oが近くにあれば，おぬしにはすぐわかるじゃろう．
+  気をつけながら進むのじゃ！」
+%E
+%Cp Nec 00035
+#Wisps of dark mist swirl nearby.  You feel that %ns lair is close.
+暗黒の霧がすぐ近くに渦巻いている．
+あなたは%nのすみかが近いことを知った．
+%E
+%Cp Nec 00036
+#You believe that you may once again invade %i.
+あなたは再び%iに侵入した．
+%E
+%Cp Nec 00040
+#You feel your mentor's presence; perhaps %o is nearby.
+あなたは指導者の存在を感じた．%oが近くにあるに違いない．
+%E
+%Cp Nec 00041
+#The aura of %o tingles at the edge of your perception.
+%oの気配があなたの知覚を刺激する．
+%E
+%Cc Nec 00050
+#"Ah, I recognize you, %p.  So, %l has sent you to steal
+#%o from me, hmmm?  Well, %l is a
+#fool to send such a mental weakling against me.
+#
+#"Your destruction, however, should make for good sport.  In the end, you
+#shall beg me to kill you!"
+「おや，誰かいるな．%pか．ほほう，%lが
+  %oを私から取り戻すためにおぬしを送り込んだのだな？
+  ふふん．%lはこんな弱虫を私に指し向けるほど愚かなのか．
+
+  おぬしを破滅させるのはいい運動になりそうだ．最後には，おぬしは
+  一思いに殺して欲しいと泣きつく事になるだろう！」
+%E
+%Cc Nec 00051
+#"How nice of you to return, %p!  I enjoyed our last meeting.  Are you
+#still hungry for more pain?
+#
+#"Come!  Your soul, like %o, shall soon be mine to
+#command."
+「尻尾をまいて帰ったほうがいいんじゃないか，%p！
+  私たちが会うのもこれが最後だろう．
+  おぬしはまだ痛めつけられたいのか？
+
+  かかってこい！  おぬしの魂も%oのように
+  すぐに私の意のままになるのだ！」
+%E
+%Cp Nec 00052
+#"I'm sure that your perseverance shall be the subject of innumerable
+#ballads, but you shall not be around to hear them, I fear!"
+「おぬしの忍耐は数えきれないほど沢山の民謡の主題になるだろう．
+  しかしお前はそれを聞くことはないのだがな！」
+%E
+%Cp Nec 00053
+#"Thief!  %o belongs to me, now.  I shall feed
+#your living flesh to my minions."
+「こそどろめ！  %oは今は私のものだ．
+  おぬしの肉は私のしもべ達に食わせてやろう．」
+%E
+%Cp Nec 00060
+#"Your puny powers are no match for me, fool!"
+「おぬしのひよわな力では私に対抗することは出来ない．
+  愚か者め！」
+%E
+%Cp Nec 00061
+#"When you are defeated, your torment will last for a thousand years."
+「おぬしが負けたとき，おぬしの苦しみは千年もの間続くことだろう．」
+%E
+%Cp Nec 00062
+#"After your downfall, %p, I shall devour %l
+#for dessert!"
+「%pよ，おぬしが倒れた後に%lをデザートに食ってやるぞ．」
+%E
+%Cp Nec 00063
+#"Are you ready yet to beg for mercy?  I could be lenient..."
+「まだ慈悲を請うつもりにはならないか？
+  私も寛大になろうと思えばなれるものを...」
+%E
+%Cp Nec 00064
+#"Your soul shall join the enslaved multitude I command!"
+「おぬしの魂も私の操る奴隷の群衆に加わるのだ！」
+%E
+%Cp Nec 00065
+#"Your lack of will is evident, and you shall die as a result."
+「おぬしには意志が欠けていることは明らかだ．
+  おぬしは最後には死ぬことだろう．」
+%E
+%Cp Nec 00066
+#"Your faith in %d is for naught!  Come, submit to me now!"
+「%dへの信仰は無意味だ！  さあこい，私に服従するのだ！」
+%E
+%Cp Nec 00067
+#"A mere %r is nothing compared to my skill!"
+「%rごときが私の能力にかなうわけがない！」
+%E
+%Cp Nec 00068
+#"So, you are the best hope of %l?  How droll."
+「ふん，おぬしが%lの最後の頼みの綱なのか？  滑稽な．」
+%E
+%Cp Nec 00069
+#"Feel my power, %c!  My victory is imminent!"
+「私の力を見るがいい，%cよ！  私の勝利は目前だ！」
+%E
+%Cc Nec 00070
+#As you touch %o, its comforting power infuses you
+#with new energy.  Although you yearn to use %o
+#to attack the Wizard of Yendor, you know you must return it to its
+#rightful owner, %l.
+あなたが%oに触れるとその力があなたに新しいエネルギーを
+吹きこみ，あなたを元気づけた．あなたはこれをイェンダーの魔法使い
+と闘うのに使いたいと思ったが，もちろんこれは正当な所有者である
+%lに返さなくてはならない．
+%E
+%Cc Nec 00080
+#%nC croaks out, as his body begins to shrivel up:
+#
+#    I shall haunt your progress until the end of time.  A thousand
+#    curses on you and %l.
+#
+#Then, the body bursts into a cloud of choking dust, and blows away.
+%nの体はしぼみ始めた．しわがれ声で%nは叫んだ．
+
+    おぬしの人生をこの世の終わりまで呪ってやる．
+    おぬしと%lに千の呪いをかけてやるぞ．
+
+そしてその体は爆発して塵の雲になり，風に吹かれて消えた．
+%E
+%Cc Nec 00081
+#%lC notices %o in your possession,
+#beams at you and says:
+#
+#    I knew you could defeat %n and retrieve
+#    %o.  Good...
+#
+#    Take %o with you in your quest for
+#    the Amulet of Yendor.  I can sense that it has attuned
+#    its dark mind to yours already.
+#
+#    May %d guide you in your quest, and keep you from harm.
+%lはあなたが%oを持っているのに気がついた．
+そしてあなたを見すえてこう言った．
+
+    おぬしが%nを倒し，%oを
+    取り戻してくれると信じておったよ．見事じゃ．．．
+
+    %oをイェンダーの魔除けを求める旅に持っていくがいい．
+    私には%oの暗黒の意思がすでにおぬしの心に調和しておる
+    事がわかるでな．
+
+    %dがおぬしを正しく導き，害悪から守らん事を．
+%E
+%Cc Nec 00082
+#%l handles %o for a moment, then looks at you.
+#
+#"You are its keeper now, and the time has come to resume your search
+#for the Amulet.  %Z await your return through the
+#magic portal which brought you here."
+%lは一旦%oを手に取った後，あなたに向き直った．
+
+「今や，おぬしは%oの守護者じゃ．
+  魔除け探索を再開するがよい．魔法の入口の向こうで，
+  %Zがそなたを待っておるぞ．」
+%E
+%Cc Nec 00090
+#"Come near, my %S, and share your adventures with me.  So, have you
+#succeeded in your quest for the Amulet of Yendor?"
+「こっちへおいで，わが%Sよ．
+  おぬしの冒険を私とわかちあわせておくれ．
+  おぬしのイェンダーの魔除けを求める旅は成功したのかえ？」
+%E
+%Cc Nec 00091
+#"Congratulations, %p.  I always knew that if anyone could succeed
+#in defeating the Wizard of Yendor and his minions, it would be you.
+#
+#"Go now, and take the Amulet to the astral plane.  Once there, present
+#the Amulet on the altar of %d.  Along the way you shall pass through the
+#four elemental planes.  These planes are like nothing you have ever
+#experienced before, so be prepared!
+#
+#"For this you were born, %s!  I am very proud of you."
+「めでたいのう，%p．イェンダーの魔法使いとその手先に
+  勝てるものがいるとすれば，それはおぬしじゃろうと思っていたぞえ．
+
+  ゆけ，そしてその魔除けを精霊界に持っていくのじゃ．そしてそこにある
+  %dの祭壇にその魔除けを捧げるのじゃ．そこに至るまでに
+  おぬしは四つの精霊界を通り抜けねばならぬ．精霊界はおぬしの全く経験
+  したことの無い世界じゃ．注意することじゃ！
+
+  おぬしはこのために生まれたのじゃ，%s！
+  わしはおぬしを誇りに思っておるぞ．」
+%E
+#
+#       Priest
+#
+%Cc Pri 00001
+#You find yourself standing in sight of %H.  Something
+#is obviously wrong here.  The doors to %H, which usually
+#stand open, are closed.  Strange human shapes shamble around
+#outside.
+#
+#You realize that %l needs your assistance!
+気がつくと，あなたは%Hの前に立っていた．が，何かが違う．
+普段開いている%Hの戸は完全に閉ざされているし，奇妙な人間
+の格好をしたものが外をよろよろと歩いている．
+
+あなたは%lが手助けを求めていることに気付いた．
+%E
+%Cp Pri 00002
+#Once again, you stand before %H.
+もう一度，あなたは%Hの前に立っていた．
+%E
+%Cp Pri 00003
+#Again you face %H.  Your intuition hints that this may be
+#the final time you come here.
+あなたは再び %H の前に立っていた．虫の知らせか，
+あなたはここに来るのがこれで最後なのかもしれないとを感じた．
+%E
+%Cp Pri 00005
+#"Greetings, honored %r.  It is good to see you."
+「よくぞ来た，光栄なる%rよ．そなたに会えて私は非常にうれしい．」
+%E
+%Cp Pri 00006
+#"Ah, %p!  Surely you can help us in our hour of need."
+「%pよ．そなたならこの重大な時期に立たされている我らを助ける
+  ことが出来るであろう．」
+%E
+%Cp Pri 00007
+#"Greetings, %s.  %lC has great need of your help."
+「ようこそ，我%sよ．%lがあなたに手助けを求めていらっしゃる．」
+%E
+%Cp Pri 00008
+#"Alas, it seems as if even %d has deserted us."
+「ああ，我々は%dにも見放されてしまったのではなかろうか．」
+%E
+%Cp Pri 00009
+#"May %d be with you, %s."
+「%dがあなたとともにあらんことを．」
+%E
+%Cp Pri 00010
+"Greetings, %r.  It is good to see you again."
+「よくぞ来た，%rよ．そなたに再び会えて私は非常にうれしい．」
+%E
+%Cp Pri 00011
+"Ah, %p!  Our deepest gratitude for all of your help."
+「%pよ．あなたの助けには深い感謝の念が絶えない．」
+%E
+%Cp Pri 00012
+#"Welcome back, %s!  With %o, no undead can stand against us."
+「よく戻ってきた%sよ．
+  %oとともにあれば，我々の通った後にはアンデッドはおるまい．」
+%E
+%Cp Pri 00013
+#"Praise be to %d, for delivering us from %n."
+「%dを崇めよ．%nから我々を救うものなり．」
+%E
+%Cp Pri 00014
+#"May %d be with you, %s."
+「%dがあなたとともにあらんことを．」
+%E
+%Cc Pri 00015
+#"Ah, %p, my %S.  You have returned to us at last.
+#A great blow has befallen our order; perhaps you can help us.
+#First, however, I must determine if you are prepared for this
+#great challenge."
+「我が%S%pよ．そなたはやっと我々のもとへ戻ってきた．
+  我々の教団は現在重大な危機に頻しておる．これについて，そなたは我々の手
+  助けを出来るやもしれぬ．
+  しかし，まず最初に，私はそなたがこの大いなる挑戦に対する心構えが出来て
+  いるかどうか試さねばならぬ．」
+%E
+%Cp Pri 00016
+#"Again, my %S, you stand before me.  Are you ready now to help us?"
+「我が%Sよ，そなたは再び私の前に現れた．我々の手助けをする
+  心構えは出来たか？」
+%E
+%Cp Pri 00017
+#"Once more, %p, you stand within the sanctum.  Are you ready now?"
+「%p，そなたは再び聖域の内に現れた．準備は出来たか？」
+%E
+%Cc Pri 00018
+#"You are a heretic, %p!  How can you, %ra, deviate so from the
+#teachings of %d?  Begone from this temple.  You are no longer
+#%sa to this order.  We will pray to %d for other assistance,
+#as you have failed us utterly."
+「%p，この異端が！どうしたら，そなたのような%rが%d
+  の教えからそれることが出来るのだ！この寺院の内から出ていけい！そなた
+  はもうこの教団の%sではない！そなたが我々の期待に応えられなかった
+  手前，%dには他の手助けを乞うよう祈ろう．」
+%E
+%Cc Pri 00019
+#"Alas, %p, it is not yet to be.  A mere %r could never
+#withstand the might of %n.  Go forth, again into the world, and return
+#when you have attained the post of %R."
+「%p，残念ながら，そちはまだ用意できておらぬようだ．
+  %rでは%n に太刀打ちすることは無理だ．また再び世の中へ出て，
+  %Rの地位をおさめることが出来たら帰ってくるがよい．」
+%E
+%Cc Pri 00020
+#"This is terrible, %p.  You have deviated from the true path!
+#You know that %d requires the most strident devotion of this
+#order.  The %shood must stand for utmost piety.
+#
+#"Go from here, atone for your sins against %d.  Return only when
+#you have purified yourself."
+「これはなんとひどいことじゃ，%p．そなたは正道から踏み外し
+  ている．そなたも存じておろう，%dは強い信仰心をこの教団に
+  求めていることを．そなたは完璧なまでの信心を見せねばならぬ．
+
+  ここから出て，%dへと働いた罪を懺悔するのだ．己の身を清めら
+  れたときのみ，ここへと戻るがよい．」
+%E
+%Cc Pri 00021
+#"Yes, %p.  You are truly ready now.  Attend to me and I shall
+#tell you of what has transpired:
+#
+#"At one of the Great Festivals a short time ago, %n and a legion
+#of undead invaded %H.  Many %gP were killed, including
+#the one carrying %o.
+#
+#"As a final act of vengefulness, %n desecrated the altar here.
+#Without it, we could not mount a counter-attack.  Now, there are
+#barely enough %gP left to keep the undead at bay.
+#
+#"We need you to find %i, then, from there, travel
+#to %ns lair.  If you can manage to defeat %n and return
+#%o here, we can then drive off the legions of
+#undead that befoul the land.
+#
+#"Go with %d as your guide, %p."
+「%pよ．そなたは用意が出来ておるようだ．今から何が起こったか
+  話すので，私のいうことに耳を傾けてくれ．
+
+「少し前の大祭に，%nと，%nに引き連られたアンデッドの軍団が
+  %Hを攻めたのだ．%oを持っていた者を始め，多くの
+  %gが殺されたのだ． 
+
+「そしてその後，恐れ多くも%nはここの祭壇を汚したのだ．
+  祭壇なしでは我々は逆襲することは出来ない．そして現在，我々のもとには
+  %Hに軍勢を寄せつけないためにするだけの，ごく小数の%g
+  しかいないのだ．
+
+「まず最初に，%iを探し，そして，そこから%nのアジトへと向かっ
+  てもらう．もしそなたが%nを倒して，%oを持ち帰ってくることが
+  出来るのならば，我々はこの土地を汚すアンデッド
+  どもを追い返せるのだ．
+
+「さあ，%dの加護のもと，行くのだ，%pよ．」
+%E
+%Cp Pri 00025
+#"You can prevail, if you rely on %d."
+「%dを信ずれば，そなたは勝てる．」
+%E
+%Cp Pri 00026
+#"Remember that %n has great magic at his command."
+「%nはすさまじい魔術を意のままに操る，ということを肝に命じておけ．」
+%E
+%Cp Pri 00027
+#"Be pure, my %S."
+「清くあれ，我が%Sよ．」
+%E
+%Cp Pri 00028
+#"Beware, %i is surrounded by a great graveyard."
+「%iは巨大な墓地に囲まれておる，気をつけるように．」
+%E
+%Cp Pri 00029
+#"You may be able to affect %n with magical cold."
+「もしかすれば，%nを冷気の呪文で冒すことが出来るかもしれない．」
+%E
+%Cp Pri 00030
+#"Acquire and wear %o if you can.  It will aid you
+#against %n."
+「できるならば%oを手にいれ，装着するのだ．%nに対し効力を発揮
+  するであろう．」
+%E
+%Cp Pri 00031
+#"Call upon %d when your need is greatest.  You will be answered."
+「最も困ったと思われるときには%dに助けを求めよ．
+  そなたの願いは受けれられるであろう．」
+%E
+%Cp Pri 00032
+#"The undead legions are weakest during the daylight hours."
+「アンデッドの軍団は日中，最も弱い．」
+%E
+%Cp Pri 00033
+#"Do not loose faith, %p.  If you do so, %n will grow stronger."
+「%pよ，信仰心を忘れるな．もしそのようなことがあれば，
+  %nはより強くなることであろう．」
+%E
+%Cp Pri 00034
+#"Wear %o.  It will assist you against the undead."
+「%oを装着せよ．さすれば，アンデッドに対し，効力を発揮する．」
+%E
+%Cc Pri 00035
+#You stand facing a large graveyard.  The sky above is filled with clouds
+#that seem to get thicker closer to the center.  You sense the presence of
+#undead in larger numbers than you have ever encountered before.
+#
+#You remember the descriptions of %i, given to you by
+#%lC.  It is ahead that you will find %ns trail.
+あなたは大きな墓地の前に立っている．空は中心へいくに連れてどんよりとし
+ていく雲に囲まれている．あなたは今までに遭遇したことのないほどのアンデッ
+ドの大軍の存在を察した．
+
+あなたは%lが教えてくれた，%iの構造を思い出した．
+前方に%nの通った跡があるようだ．
+%E
+%Cp Pri 00036
+#Again, you stand before %i.
+あなたは再び%iの前に立った．
+%E
+%Cc Pri 00040
+#The stench of brimstone is all about you, and the shrieks and moans
+#of tortured souls assault your psyche.
+#
+#Ahead, there is a small clearing amidst the bubbling pits of lava...
+そこらじゅうが硫黄の臭いによって包まれ，不具な魂供の叫びやうめきが，あ
+なたの不安をかりたてた．
+
+手前の，ぐつぐつと煮えたった溶岩の狭間に，小さな空き地がある．
+%E
+%Cp Pri 00041
+#Again, you have invaded %ns domain.
+あなたは再び%nの領域を襲撃した．
+%E
+%Cc Pri 00050
+#"Ah, so %lC has sent another %g to retrieve
+#%o.
+#
+#"No, I see you are no %g.  Perhaps I shall have some fun today
+#after all.  Prepare to die, %r!  You shall never regain
+#%o."
+「ケッ！%lがまたもや%gをよこしたのか，
+  %oを取り返すために．
+
+「いや，待て．そちは，ただの%gではないらしいな．もしかしたら，
+  今日は少し楽しめるかもしれない．死ぬ準備でもするのだな，%r！
+  そなたが%oを取り返すことなど不可能なのだからな．」
+%E
+%Cp Pri 00051
+#"So, %r.  Again you challenge me."
+「ほう，%r．そちはまた私に挑戦するのか．」
+%E
+%Cp Pri 00052
+#"Die now, %r.  %d has no power here to aid you."
+「死ねい，%r．ここでは%dがそちを助けることはできぬ．」
+%E
+%Cp Pri 00053
+#"You shall die, %r, and I will have %o back."
+「%r，そちは死んで，私は%oを取り返すのだ．」
+%E
+%Cp Pri 00060
+#"Submit to my will, %c, and I shall spare you."
+「%cよ，私に服従すれば，私はそちを生かす．」
+%E
+%Cp Pri 00061
+#"Your puny powers are no match for me, %c."
+「%cよ，そちのような猪小才では私には到底及ばぬ．」
+%E
+%Cp Pri 00062
+#"I shall have you turned into a zombie for my pleasure!"
+「私の楽しみのために，そちをゾンビにでもしてやろう．」
+%E
+%Cp Pri 00063
+#"Despair now, %r.  %d cannot help you."
+「絶望だな，%r．%dはそちを助けることはできぬ．」
+%E
+%Cp Pri 00064
+#"I shall feast upon your soul for many days, %c."
+「そちの魂を何日にも渡って喰らいつづけてやろうではないか，%c．」
+%E
+%Cp Pri 00065
+#"Your death will be slow and painful.  That I promise!"
+「そちはじわじわと苦しめて殺してくれよう．それだけ私は約束する」
+%E
+%Cp Pri 00066
+#"You cannot defeat %n, you fool.  I shall kill you now."
+「そちのようなうつけでは，%nに勝てぬのだ．殺して差し上げよう．」
+%E
+%Cp Pri 00067
+#"Your precious %lt will be my next victim."
+「%lが私の次の餌食となるであろう．」
+%E
+%Cp Pri 00068
+#"I feel your powers failing you, %r.  You shall die now."
+「そちは力を調節出来ぬようだな，%r．そちはもう死ぬ．」
+%E
+%Cp Pri 00069
+#"With %o, nothing can stand in my way."
+「%oさえあれば，私に恐れるべきものはない．」
+%E
+%Cc Pri 00070
+#As you pick up %o, you feel the essence of
+#%d fill your soul.  You know now why %n stole it from
+#%H, for with it, %ca of %d could
+#easily defeat his plans.
+#
+#You sense a message from %d.  Though not verbal, you
+#get the impression that you must return to %lC as soon
+#as possible.
+%oを拾うと，あなたは%dの本質を感じとった．そして，
+%dの%cならば%nの野望を打ち破れるから，
+%nが%Hより%oを盗んだ，ということに気付いた．
+
+あなたは%dからのメッセージを感じ取った．それは言葉に
+よるものではないが，あなたはすぐ%lのもとへ帰らねばならない
+ことを感じた．
+%E
+%Cc Pri 00080
+#You feel a wrenching shift in the ether as %n's body dissolves
+#into a cloud of noxious gas.
+#
+#Suddenly, a voice booms out:
+#
+#    Thou hast defeated the least of my minions, %r.
+#    Know now that Moloch is aware of thy presence.
+#    As for thee, %n, I shall deal with thy failure
+#    at my leisure.
+#
+#You then hear the voice of %n, screaming in terror...
+%nの肉体が毒性の気体へと空気に融けこむにつれ，
+天空が響いているのに気付いた．
+
+すると突然，声が轟きわたった：
+
+  %rよ，汝は私のもっとも汚わらしい下僕を倒してくれた．
+  モーロックがそちの存在に気付いているということを肝に命じよ．
+  %nよ，汝の不首尾は私が直に裁こう．
+
+そして，あなたは%nの悲鳴を聞いた．
+%E
+%Cc Pri 00081
+#"You have returned, %p.  And with %o, I see.
+#Congratulations.
+#
+#"I have been in meditation, and have received direction from
+#a minion of %d.  %d commands that you retain
+#%o.  With it, you must recover the Amulet
+#of Yendor.
+#
+#"Go forth, and let %d guide your steps."
+%p，帰ってきたか．．しかも，%oを手にして．
+おめでとう．
+
+私はずっと瞑想していたのだが，%dの使者より命令を承った．
+%dは，そなたに%oを持ち続けるように，と命じた．そして，
+それをもって，イェンダーの魔除けを取り戻すのだ．
+%E
+%Cp Pri 00090
+#"Welcome back, %p.  How is your quest for the Amulet going?"
+よくぞ帰ってきた，%p．魔除けを探す方はどうなっているのだ．
+%E
+%Cc Pri 00091
+#"You have prevailed, %p!  %d is surely with you.  Now,
+#you must take the amulet, and sacrifice it on %ds altar on
+#the Astral plane.  I suspect that I shall never see you again in this
+#life, but I hope to at %ds feet."
+%pよ，そちは打ち勝ったのだ！真に，%dはそちとともに在る．
+さあ，そなたは魔除けを持って，これから精霊界にある%dの祭壇
+にそれを捧げるのだ．今生ではそなたに会うことはもうないだろう，
+しかし，%dの足元でそなたに会うことを楽しみにしているぞ．
+%E
+#
+#       Ranger
+#
+%Cc Ran 00001
+#You arrive in familiar surroundings.  In the distance, you %x the
+#ancient forest grove, the place of worship to %d.
+#
+#Something is wrong, though.  Surrounding the grove are centaurs!
+#And they've noticed you!
+あなたは見なれた場所にたどりつき，遠方に%dの崇拝の地で
+ある古森の木立を%xた．
+
+しかし，何かが違う．なんとサークルの回りにいるのはケンタウロスだ！
+彼らはあなたに気がついた！
+%E
+%Cp Ran 00002
+#Once again, you stand before %H.
+再び，あなたは%Hの前に立った．
+%E
+%Cp Ran 00003
+#You have the oddest feeling that this may be the last time you
+#are to enter %H.
+あなたは，%Hに入るのはこれが最後かもしれないという奇妙な感じがした．
+%E
+%Cp Ran 00005
+#"%pC!  I have not seen you in many moons.  How do you fare?"
+「%pよ！ ずいぶん長いこと会わなかったが，元気にやっているかね？」
+%E
+%Cp Ran 00006
+#"%nC continues to threaten the grove.  But we hold fast."
+「%nは木立を脅かし続けているが，我々がしっかり支えている．」
+%E
+%Cp Ran 00007
+#"%lC is growing weak.  The magic required to defend the grove drains us."
+「%lはだんだん弱ってきた．
+木立を守るために必要な魔力が我々を消耗させるのだ．」
+%E
+%Cp Ran 00008
+#"Remember %i is hard to enter.  Beware the
+#distraction of leatherwings."
+#*** leatherwings = こうもり？
+「%iに潜入するのは難しいぞ．皮の翼たちの狂気に気をつけなさい．」
+%E
+%Cp Ran 00009
+#"We must regain %o.  Without it we will be overrun."
+「我々は%oを取り戻さなければならない．さもなくば
+  やられてしまうだろう．」
+%E
+%Cp Ran 00010
+#"%pC!  I have not seen you in many moons.  How do you fare?"
+「%pよ！ ずいぶん長いこと会わなかったが，元気にやっているかね？」
+%E
+%Cp Ran 00011
+#"Birdsong has returned to the grove, surely this means you have defeated %n."
+「鳥の歌が木々の合間に戻ってきました．
+  これは，あなたが%nを打ち破ったことを表しています．」
+%E
+%Cp Ran 00012
+#"%lC seems to have regained some of his strength."
+「%lはその力のいくばくかを回復できたようです．」
+%E
+%Cp Ran 00013
+#"So, tell us how you entered %i, in case some new evil arises there."
+「新たな問題が持ち上がったとき，どうやって%iに入ったか教えてくれ．」
+%E
+%Cp Ran 00014
+#"Is that truely %o that I see you carrying?"
+「あなたのもたらしたものは真の%oなのですか？」
+%E
+%Cc Ran 00015
+#"%p!  You have returned!  Thank %d.
+#
+#"We have great need of you.  But first, I must see if you have the
+#required abilities to take on this responsibility."
+「%pよ！ よく戻って来てくれた！ %dよ感謝します．
+
+我々はお前が必要だが，この大事な役目を果たす能力をお前が持っているか
+最初に確かめさせてくれ．」
+%E
+%Cp Ran 00016
+#"Once again, %p, you stand in our midst.  Are you ready now?"
+「おお%pよ．再びお前は我々の中心に立っている．準備はできているか？」
+%E
+%Cp Ran 00017
+#"Ah, you are here again, %p.  Allow me to determine your readiness..."
+「おお，また来たな%pよ．お前の準備ができているか調べさせてくれ…」
+%E
+%Cc Ran 00018
+#"%p!  You have doomed us all.  You fairly radiate %L influences
+#and weaken the power we have raised in this grove as a result!
+#
+#"Begone!  We renounce your %shood with us!  You are an outcast now!"
+「%pよ！ お前は我々すべてを破滅させる気なのか！
+お前が%Lの影響力をまき散らしているせいで，
+木立を支えている我々の力が弱まっているではないか！
+
+「立ち去れ！ 我々はお前と%s分の縁を切る．お前は追放だ！」
+%E
+%Cc Ran 00019
+#"%p, you are yet too inexperienced to withstand the demands of that
+#which we need you to do.  %RA might just be able to do this thing.
+#
+#"Return to us when you have learned more, my %S."
+「%pよ．お前はまだ経験不足だ．
+これでは我々が要求することには耐えられないだろう．
+%Rならどうにか耐えられるかもしれん．
+
+「もっと経験を積んでから我々の元に戻ってくるが良い．わが%Sよ．」
+%E
+%Cc Ran 00020
+#"You have strayed, %p!  You know that %d requires that
+#we maintain a pure devotion to things %a!
+#
+#"You must go from us.  Return when you have purified yourself."
+「正しい道からそれているようだな，%pよ．お前も知っているように，
+%dは我々に%aに対する純粋な信心を持つことを求めている．
+
+我々の前から立ち去れ．そして穢れを清めてから戻ってくるのだ．」
+%E
+%Cc Ran 00021
+#"You are indeed ready, %p.  I shall tell you what has transpired,
+#and why we so desperately need your help:
+#
+#"A short time ago, the Uruk-hai tribes of the mountains to the east
+#invaded and enslaved the goblin tribes in this area.  The local
+#%nt is now only a figurehead, and serves the Uruk-hai Overlord.
+#
+#"During our last gathering of worship here, we were beset by hordes of
+#orcs and goblins, as you witnessed.  In the first onslaught a group,
+#headed by %n himself, managed to breach the grove and
+#steal %o.
+#
+#"Since then, we have been besieged.  We do not know how much longer
+#we will be able to maintain our magical barriers.
+#
+#"If we are to survive, you, %p, must infiltrate
+#%i.  There, you will find a pathway down, to the
+#underground castle of %n.  He has always coveted
+#%o, and will surely keep it on his person,
+#until he delivers it to the Uruk-hai Overlord.
+#
+#"Recover %o for us, %p!  Only then will
+#the circle of %d be safe."
+「%pよ，準備は良いようだな．まずは何が起こったのか，そして，
+なぜ我々がこんなにもお前の助けを必要としているのかを聞いて欲しい．
+
+「つい最近のことだ，あの東方山脈のウルク・ハイ共が押し寄せてきて，
+この地方のゴブリンどもを奴隷にした．この地方の%nは
+ただの傀儡で，奴はウルク・ハイの大君主に仕えている．
+
+「この間礼拝のために我々がここに集まっている間に，お前が目撃したように，
+我々はオークとゴブリンの群れに囲まれてしまった．そして最初の猛攻撃の時に，
+%nのグループが木立をうまく突破して%oを盗んだのだ．
+
+「それ以来，我々はずっと包囲されている．
+我々が後どれくらい魔法のバリアを維持できるかわからん．
+
+「我々が生きのびるためには，%pよ，お前は%iに潜入しな
+ければならない．そこには下へ，すなわち%nの地下城へ降りる
+道があるはずだ．奴はいつも%oを欲しがっていたから，
+ウルク・ハイの大君主に渡すまでの間は，必ず身につけているだろう．
+
+「我々のために%oを取り返してくれ，%pよ！
+取り返してくれれば，%dのサークルは安泰だ．」
+%E
+%Cp Ran 00025
+#"It is rumored that the Uruk-hai have a pact with the Hill Ogres."
+「噂によると例のウルク・ハイがヒル・オーガと条約を結んだらしい．」
+%E
+%Cp Ran 00026
+#"%nC is strong, but not very smart."
+「%nは強いがとても賢いというわけではない．」
+%E
+%Cp Ran 00027
+#"Use %o, when you find it.  It will help you survive
+#to reach us."
+「%oを見付けたらまず使ってみるんだ．
+我々の元に生還するのに役に立つだろう．」
+%E
+%Cp Ran 00028
+#"Remember, let %d be your guide."
+「忘れるな，%dをお前の案内人にするのだ．」
+%E
+%Cp Ran 00029
+#"Call upon %d when you face %n.
+#The very act of doing so will infuriate him, and give you advantage."
+「%nに立ち向かうときには%dに祈るんだ．
+その行動が奴を激怒させて，お前を有利にするだろう．」
+%E
+%Cp Ran 00030
+#"%n and his kind have always hated us."
+「%nと奴の種族は常に我々を憎んでいる．」
+%E
+%Cp Ran 00031
+#"We cannot hold the grove much longer, %p.  Hurry!"
+「我々はこれ以上木立を支えていけそうにない．%pよ，急いでくれ！」
+%E
+%Cp Ran 00032
+#"To infiltrate %i, you must be very stealthy."
+「%iに潜入するには，人目を盗む能力が必要だ．」
+%E
+%Cp Ran 00033
+#"Remember that %n is a braggart.  Trust not what he says."
+「%nがほら吹きであることを覚えておくんだ．
+  奴の言うことを信用するなよ．」
+%E
+%Cp Ran 00034
+#"You can triumph, %p, if you trust in %d."
+「%pよ，もしお前が%dを信じるのなら，勝利を得ることが
+  できるだろう．」
+%E
+%Cc Ran 00035
+#This must be %i.
+#
+#You are in a cave built of many different rooms, all interconnected
+#by tunnels.  Your quest is to find and shoot the evil wumpus that
+#resides elsewhere in the cave without running into any bottomless
+#pits or using up your limited supply of arrows.  Good luck.
+#
+#You are in room 9 of the cave.  There are tunnels to rooms
+#5, 8, and 10.
+#*rustle* *rustle* (must be bats nearby)
+#*sniff* (I can smell the evil wumpus nearby!)
+ここは%iに違いない．
+
+トンネルにより相互接続された多くの部屋からなる洞窟中にあなたはいる．
+あなたの目的は，底なしの落し穴に落ちたり矢を使い尽くす前に，
+洞窟中のどこかにいる悪いワンパスを見つけて射殺すことだ． 
+幸運を祈る．
+
+あなたは洞窟の9番目の部屋に居る．
+ここには，5，8，10の部屋へと続くトンネルがある．
+カサカサ，カサカサ(近くにこうもりが居るに違いない)
+クンクン（近くで邪悪なワンパスの臭いがする）
+%E
+%Cc Ran 00036
+#Once again, you descend into %i.
+#
+#*whoosh* (I feel a draft from some pits).
+#*rustle* *rustle* (must be bats nearby)
+#***
+再びあなたは%iに降り立った．
+
+シューッ（いくつかの孔から隙間風を感じる）
+カサカサ，カサカサ(近くにこうもりが居るに違いない)
+%E
+%Cc Ran 00040
+#You descend into a weird place, in which roughly cut cave-like walls
+#join with smooth, finished ones, as if someone was in the midst of
+#finishing off the construction of a subterranean complex.
+#
+#Off in the distance, you hear the sounds of a large, raucous gathering.
+あなたは気味の悪い場所に降り立った．
+荒く切断した洞窟のような壁が，完成されたなめらかな壁とつながっている．
+まるで誰かが地下迷宮の建築を仕上げている最中のようである．
+
+遠く離れた所で，大勢が集まってざわざわ騒いでいる音が聞こえる．
+%E
+%Cp Ran 00041
+#Once again, you enter the distorted castle of %n.
+再びあなたは%nのねじ曲がった城に侵入した．
+%E
+%Cc Ran 00050
+#"So, %c.  %lC has sent you to recover %o.
+#
+#"Well, I shall keep that bauble.  It pleases me.  You, %c, shall die."
+「ほう%cか．%lが%oを取り戻させるために
+  お前を送り込んだんだな．
+
+だがわしはこいつを手放す気はないぞ．%cよ，お前は死ぬのだ．」
+%E
+%Cp Ran 00051
+#"Back again, eh?  Well, a mere %r is no threat to me!  Die, %c!"
+「ほう，また来たか．だが，たかが%rでは脅威にはならないぞ．
+  死ね，%c！」
+%E
+%Cp Ran 00052
+#"You haven't learned your lesson, %c.  You can't kill me!  You shall die now."
+「経験不足だな%cよ．お前ではこのわしは倒せん！ 
+  お前は今ここで死ぬのだ．」
+%E
+%Cp Ran 00053
+#"I shall have %o from you, %r.  Then I shall
+#kill you."
+「%rよ，お前に%oを渡すつもりはない．お前は殺す．」
+%E
+%Cp Ran 00060
+#"Your %d is nothing, %c.  You are mine now!"
+「%c，お前の%dは役に立たんよ．
+  お前は今からわしのものだ！」
+%E
+%Cp Ran 00061
+#"Run away little %c!  You can never hope to defeat %n!"
+「ほら逃げるがいい，ちっぽけな%cよ！ %nを倒そうなどと
+  思わないことだな．」
+%E
+%Cp Ran 00062
+#"My Uruk-hai servants will rip you to shreds!"
+「我がしもべのウルク・ハイどもがお前をずたずたに引き裂くだろう！」
+%E
+%Cp Ran 00063
+#"I shall display your head as a trophy.  What do you think about that wall?"
+「わしはお前の頭をトロフィーとして飾るつもりだ．あの壁でどうかな？」
+%E
+%Cp Ran 00064
+#"I shall break your %ls grove, and destroy all the %gP!"
+「%lの木立を壊し，そして%gを全員殺してやる！」
+%E
+%Cp Ran 00065
+#"%d has abandoned you, %c.  You are doomed."
+「%cよ，%dはお前を見捨てたぞ．お前は
+  死すべき定めなのだ．」
+%E
+%Cp Ran 00066
+#"%rA?  %lC sends a mere %r against me?  Hah!"
+「%r？ わしを倒すのに%rごときを送り込むとは
+  %lめ．愚かなやつよ！」
+%E
+%Cp Ran 00067
+#"%lC has failed, %c.  %oC will never leave here."
+「%lは失敗したな，%cよ．
+  %oをここから持ち出すことは不可能だ．」
+%E
+%Cp Ran 00068
+#"You really think you can defeat me, eh %c?  You are wrong!"
+「%cよ，お前は本当にこのわしを倒せると思っているのか？
+  大きな間違いだぞ！」
+%E
+%Cp Ran 00069
+#"You weaken, %c.  I shall kill you now."
+「弱っているな，%cよ．今すぐ殺してやる．」
+%E
+%Cc Ran 00070
+#As you pick up %o, it seems to glow, and a warmth
+#fills you completely.  You realize that its power is what has protected
+#your %sp against their enemies for so long.
+#
+#You must now return it to %l without delay -- their lives depend
+#on your speed.
+あなたが%oを拾うと，それは光ったように見えて，そしてあなたを
+暖かさで満たした．あなたはこの力が敵と戦う%s達を長い間守って
+きたものであることを悟った．
+
+あなたは一刻も早くこれを%lの元に届けなければならない―
+彼らの命はあなたのスピードにかかっている．
+%E
+%Cc Ran 00080
+#%nC collapses to the ground, cursing you and %l, then says:
+#
+#    You have defeated me, %r!  But I curse you one final time, with my
+#    dying breath!  You shall die before you leave my castle!
+%nはあなたと%lを呪いながら地面に倒れ，そして言った：
+
+    お前の勝ちだ，%rよ！ しかし，わしは今際の際に
+    お前を呪ってやる，わしの最期の息でな！ お前は自分の城に戻る前
+    に死ぬのだ！
+%E
+%Cc Ran 00081
+#"%p!  You have succeeded!  I feared it was not possible!
+#
+#"You have returned with %o!
+#
+#"I fear, now, that the Centaurs will regroup and plot yet another raid.
+#This will take some time, but if you can recover the Amulet of Yendor
+#for %d before that happens, we will be eternally safe.
+#
+#"Take %o with you.  It will aid in your quest for
+#the Amulet."
+「%pよ！ よくやった！ 私は無理ではないかと恐れていたのだ！
+
+「%oを持って戻ってきたな！
+
+「私は今，かのケンタウロスが別の%nを選ぶことを恐れている．
+それはいつかなされるだろう，しかし，その前にお前が%dのために
+イェンダーの魔除けを取り戻すことができれば，我々は永遠に安泰だ．
+
+「%oを持って行くがいい．魔除けを探す冒険の助けとなるだろう．」
+%E
+# assumes The Longbow of Diana
+%Cc Ran 00082
+#%l flexs %o reverently.
+#
+#"With this wondrous bow, one need never run out of arrows.
+#You are its keeper now, and the time has come to resume your
+#search for the Amulet.  %Z await your return
+#through the magic portal that brought you here."
+%lはうやうやしく%oをしならせた。
+
+「この不思議な弓を使っていると、決して矢が尽きない．
+お前は%oの守護者だ．
+魔除け探索を再開せよ．魔法の入口の向こうで，
+%Zがお前を待っているぞ．」
+%E
+%Cp Ran 00090
+#"Welcome, %p.  How have you fared on your quest for the Amulet
+#of Yendor?"
+「良く来た，%pよ．イェンダーの魔除けの探索は順調かな？」
+%E
+%Cc Ran 00091
+#"You have it!  You have recovered the Amulet of Yendor!
+#Now attend to me, %p, and I will tell you what must be done:
+#
+#"The Amulet has within it magic, the capability to transport you to
+#the Astral Plane, where the primary circle of %d resides.
+#
+#"To activate this magic, you must travel upwards as far as you can.
+#When you reach the temple, sacrifice the Amulet to %d.
+#
+#"Thus will you fulfill your destiny."
+「おお！ イェンダーの魔除けを取り戻したのか！
+これから何をするべきか教えるから，注意して聞くのだ：
+
+この魔除けはある魔力を内に秘めている．それはお前を精霊界に転送するものだ．
+精霊界には%dの最初のサークルが存在する．
+
+この魔力を働かせるには，お前は登れるだけ上に登らなければならない．
+寺院にたどり着いたら，魔除けを%dに捧げるのだ．
+
+そうすればお前は宿命を果たすことができるだろう．」
+%E
+#
+#       Rogue (with apologies to all Norsk speakers -dean)
+#       (訳注)すんげー意訳．意味よくわからん．^_^;
+#
+%Cc Rog 00001
+#Unexpectedly, you find yourself back in Ransmannsby, where you trained to
+#be a thief.  Quickly you make the guild sign, hoping that you AND word
+#of your arrival reach the %ls den.
+ふと，あなたは盗賊になるために修業した，ランスマンスベイに
+戻っているのに気がついた．あなたは素早くギルドの印を作った．
+%lに届くことを祈りながら．
+%E
+%Cp Rog 00002
+#Once again, you find yourself back in Ransmannsby.  Fond memories are
+#replaced by fear, knowing that %l is waiting for you.
+もういちど，あなたはランスマンスベイに戻っているのに気がついた．甘い
+記憶が恐れに置きかえられている．%lがあなたを待っている
+のに気がついた．
+%E
+%Cp Rog 00003
+#You rub your hands through your hair, hoping that the little ones on
+#the back of your neck stay down, and prepare yourself for your meeting
+#with %l.
+あなたは髮をとかした，誰にも首ねっこを圧えつけられることは
+ないことを祈りながら．そして，%lに会う準備をした．
+%E
+%Cp Rog 00005
+#"I hear that Lady Tyvefelle's household is lightly guarded."
+「レディ・タイヴェフェルの家の警備は手薄だそうだ．」
+%E
+%Cp Rog 00006
+#"You're back?  Even the Twain don't come back anymore."
+「戻ってきた？トウェーンですら戻ってこないのに．」
+%E
+%Cp Rog 00007
+#"Can you spare an old cutpurse a zorkmid for some grog?"
+「この年寄スリにラム酒のための金を恵んでくれ．」
+%E
+%Cp Rog 00008
+#"Fritz tried to join the other side, and now he's hell-hound chow."
+「フリッツは裏切りやがった．いまやすっかりカタギだ．」
+%E
+%Cp Rog 00009
+#"Be careful what you steal, I hear the boss has perfected turning
+#rocks into worthless pieces of glass."
+「何でも盗めばいいってもんじゃない，ボスが岩を価値のないガラスに
+  仕上げている音を聞いたぜ．」
+%E
+%Cp Rog 00010
+#"I was sure wrong about Lady Tyvefelle's house; I barely got away with my
+#life and lost my lock pick in the process."
+「レディ・タイヴェフェルの家は確実にヤバイぜ．
+俺は鍵開け道具を失うのと引き換えにかろうじて命からがら逃げ出せた．」
+%E
+%Cp Rog 00011
+#"You're back?  Even the Twain don't come back anymore."
+「戻ってきた？トウェインですら戻ってこないのに．」
+%E
+%Cp Rog 00012
+#"Can you spare an old cutpurse a zorkmid for some grog?"
+「この年寄スリにラム酒のための金を恵んでくれ．」
+%E
+%Cp Rog 00013
+#"Fritz tried to join the other side, and now he's hell-hound chow."
+「フリッツは裏切りやがった．いまやすっかりカタギだ．」
+%E
+%Cp Rog 00014
+#"Be careful what you steal, I hear the boss has perfected turning
+#rocks into worthless pieces of glass."
+「何でも盗めばいいってもんじゃない，ボスが岩を価値のないガラスに
+  仕上げている音を聞いたぜ．」
+%E
+%Cc Rog 00015
+#"Well, look who it is boys -- %p has come home.  You seem to have
+#fallen behind in your dues.  I should kill you as an example to these
+#other worthless cutpurses, but I have a better plan.  If you are ready
+#maybe you could work off your back dues by performing a little job for
+#me.  Let us just see if you are ready..."
+「誰か来たようだな．%pか．何だ？任務に失敗しやがったのか．ふん．
+  ここにいる価値のないスリのように殺してやろうと思ったが，もっといいこと
+  を思いついた．準備はいいか？なーに，俺のためにちょいと仕事をしてくれれば
+  いいのさ．準備ができてるかな．．．」
+%E
+%Cp Rog 00016
+#"Well, I didn't expect to see you back.  It shows that you are either stupid,
+#or you are finally ready to accept my offer.  Let us hope for your sake it
+#isn't stupidity that brings you back."
+「また会えるとは思わなかったぜ．お前は馬鹿か？俺の任務を請け負う
+  だけの技量があるか見てやろう．せいぜいお前があいかわらず馬鹿で
+  ないことを祈ろう．」
+%E
+%Cp Rog 00017
+#"Did you perhaps mistake me for some other %lt?  You must
+#think me as stupid as your behavior.  I warn you not to try my patience."
+「%l以外にそそのかされておらんだろうな？俺のことをお前
+  くらい馬鹿だと考えてるだろう．俺にも我慢の限界ってものがあるんだぜ．」
+%E
+%Cc Rog 00018
+#"Well %gp, it looks like our friend has forgotten who is the boss
+#around here.  Our friend seems to think that %rp have been put in
+#charge.  Wrong.  DEAD WRONG!"
+#
+#Your sudden shift in surroundings prevents you from hearing the end
+#of %ls curse.
+「%g！俺の友は誰がここのボスだか忘れたと見える．俺の友は
+  %rが裏切ったと考えている．間違いだ．死すべき間違いだ！」
+
+%lの呪いの言葉が遠のき，まわりの景色が突然変った．
+%E
+%Cc Rog 00019
+#"In the time that you've been gone you've only been able to master the
+#arts of %ra?  I've trained ten times again as many %Rp
+#in that time.  Maybe I should send one of them, no?  Where would that
+#leave you, %p?  Oh yeah, I remember, I was going to kill you!"
+「現時点で%rを極めたか？俺は10年前に%Rを極めたものだ．
+  私は%Rを極めた１人として送られたのだが，それに比べて%p
+  お前はどうだ？ふん．忘れるな！俺はお前を殺そうとしてるのだぜ．」
+%E
+%Cc Rog 00020
+#"Maybe I should chain you to my perch here for a while.  Perhaps watching
+#real %A men at work will bring some sense back to you.  I don't
+#think I could stand the sight of you for that long though.  Come back
+#when you can be trusted to act properly."
+「どうやら，お前を止まり木につなりでおくべきだったようだ．おおかた働く
+  %Aの人間を見てつまらん感情でも抱いたんだろう．お前の前に
+  立っているなんて考えたくもない．何を信じるべきかわかったら戻ってこい．」
+%E
+%Cc Rog 00021
+#"Will everyone not going to retrieve %o from that
+#jerk, %n, take one step backwards.  Good choice,
+#%p, because I was going to send you anyway.  My other %gp
+#are too valuable to me.
+#
+#"Here's the deal.  I want %o, %n
+#has %o.  You are going to get %o
+#and bring it back to me.  So simple an assignment even you can understand
+#it."
+「誰も%oを馬鹿野郎の%nから取りかえしてきや
+  がらねぇ．よく聞け！%p，なぜなら俺はお前を送りつけるからだ．
+  他の%gたちはお前なんかより大事だからな．
+
+「取り引きと行こうじゃないか．俺は%oが欲しい．%nが
+  %oを持っている．お前は%oを取りに行き，
+  俺のところへ持ってこい．簡単なこった．お前でも十分理解できるだろ．」
+%E
+%Cc Rog 00025
+#"You don't seem to understand, %o isn't here so
+#neither should you be!"
+「なんでぇ，わからなかったのか？%oはここにはねぇ．何しろお前が
+  取り返してねぇんだからな！」
+%E
+%Cp Rog 00026
+#"May %d curse you with lead fingers.  Get going!"
+「%dの呪いがあらんことを．行け！」
+%E
+%Cp Rog 00027
+#"We don't have all year.  GET GOING!"
+「俺らには暇がねぇんだ．行け！」
+%E
+%Cc Rog 00028
+#"How would you like a scar necklace?  I'm just the jeweler to do it!"
+「傷もののネックレスは好きか？俺はそういうことをする宝石屋だぜ！」
+%E
+%Cp Rog 00029
+#"Lazy S.O.B.  Maybe I should call up someone else..."
+「怠けもんが！このクソ野郎．誰か他のやつを呼ぶぞ．．．」
+%E
+%Cp Rog 00030
+#"Maybe I should open your skull and see if my instructions are inside?"
+「お前の頭を開いて俺の命令が本当にてめぇの中に入ってるか見てやろうか？」
+%E
+%Cp Rog 00031
+#"This is not a task you can complete in the afterlife, you know."
+「安心して老後を送りたいなら，この仕事はちゃんとやっとくんだな．」
+%E
+%Cc Rog 00032
+#"Inside every living person is a dead person trying to get out, and I have
+#your key!"
+「生きている人間と言うのはもがき続ける死んだ人間だ．そして俺はお前の
+  鍵を持っている！」
+%E
+%Cp Rog 00033
+#"We're almost out of hell-hound chow, so why don't you just get moving!"
+「俺らは皆カタギにはなれねぇ．何いまさらじたばたしてんだ！」
+%E
+%Cp Rog 00034
+#"You know, %o isn't going to come when you
+#whistle.  You must get it yourself."
+「%oは笛を吹いたって来やがらねぇ．自分で取って
+  くるしかねぇんだ．」
+%E
+%Cp Rog 00035
+#Those damn little hairs tell you that you are nearer to
+#%o.
+くそったれの髮の毛が%oに近づいたことを知らせた．
+%E
+%Cp Rog 00036
+#Not wanting to face %l without having stolen
+#%o, you continue.
+%oを盗むまでは%lには会いたくなかったが，続けた．
+%E
+%Cc Rog 00040
+#You feel a great swelling up of courage, sensing the presence of
+#%o.  Or is it fear?
+あなたは勇気が湧いてくるような気がした．%oが近いに違いない．
+それとも恐れ？
+%E
+%Cp Rog 00041
+#The hairs on the back of your neck whisper -- it's fear.
+あなたのうなじの髮がささやいた．-- 恐怖なんかじゃない．
+%E
+%Cc Rog 00050
+#"Ah!  You must be %ls ... er, `hero'.  A pleasure
+#to meet you."
+「お前が%lの．．．使いのヒーローか．お前に会えて嬉しいぜ．」
+%E
+%Cc Rog 00051
+#"We meet again.  Please reconsider your actions."
+「また会ったな．もういいかげんにしてほしいものだ．」
+%E
+%Cp Rog 00052
+#"Surely, %p, you have learned that you cannot trust any bargains
+#that %l has made.  I can show you how to continue on
+#your quest without having to run into him again."
+「おい%p，%lとの取り引きは信用できないってことは
+  知ってんだろうな．俺がお前がどうやったら冒険を続けるか示してやろう．
+  彼のところに逃げこむ前にな．」
+%E
+%Cp Rog 00053
+#"Please, think for a moment about what you are doing.  Do you truly
+#believe that %d would want %l to have
+#%o?"
+「ちょっとまて，考えなおしてくれ．本当に%lが%o
+  を持つことを%dが望んでいると思ってるのか？」
+%E
+%Cp Rog 00060
+#"May I suggest a compromise.  Are you interested in gold or gems?"
+「妥協しようじゃねぇか．金と宝石のどっちがいい？」
+%E
+%Cp Rog 00061
+#"Please don't force me to kill you."
+「お前は殺したくねぇんだがな．」
+%E
+%Cp Rog 00062
+#"Grim times are upon us all.  Will you not see reason?"
+「いやな時間だけありやがる．理由はわかってんのか？」
+%E
+%Cp Rog 00063
+#"I knew %l, and you're no %l, thankfully."
+「俺は%lを知っている．お前は%lじゃない．ありがてぇ．」
+%E
+%Cp Rog 00064
+#"It is a shame that we are not meeting under more pleasant circumstances."
+「俺たちがもっと喜ばしい状況で会えねぇとはひでぇ話だ．」
+%E
+%Cp Rog 00065
+#"I was once like you are now, %p.  Believe in me -- our way
+#is better."
+「俺はかつては今のお前のような立場だった，%pよ．俺を信じろ，
+  俺のやりかたの方がすぐれてるってもんだ．」
+%E
+%Cp Rog 00066
+#"Stay with me, and I will make you %os guardian."
+「俺のところに来ねぇか？お前を%oの番兵にしてやろう．」
+%E
+%Cp Rog 00067
+#"When you return, with or without %o,
+#%l will have you killed."
+「お前が戻ったら%oの如何にかかわらず
+  %lはお前を殺すぜ．」
+%E
+%Cp Rog 00068
+#"Do not be fooled; I am prepared to kill to defend %o."
+「馬鹿はやめろ，俺は%oのため殺してもいいんだぜ．」
+%E
+%Cp Rog 00069
+#"I can reunite you with the Twain.  Oh, the stories you can swap."
+「お前をトウェインに会わせてやれるぜ．ミイラ取りがミイラか？」
+%E
+%Cc Rog 00070
+#"As you pick up %o, the hairs on the back of your
+#neck fall out.  At once you realize why %n was
+#willing to die to keep it out of %ls hands.  Somehow
+#you know that you must do likewise."
+あなたが%oを拾うと，うなじの髪の毛がはらりと落ちた．すぐに
+あなたは，何故%nがそれを%lの手元から
+離しておくために進んで死んだのかを悟った．
+どういうわけか，あなたも同じことをしなければ
+ならないような気になった．
+%E
+%Cc Rog 00080
+#"I know what you are thinking, %p.  It is not too late for you
+#to use %o wisely.  For the sake of your guild
+#%sp, do what is right."
+#
+#You sit and wait for death to come for %n, and then you
+#brace yourself for your next meeting with %l!
+「%p，お前が何を考えてるのか知ってるぞ．%oを賢く
+  使うにはまだ遅くない．お前のギルドの%lのため正しく使うのだ．」
+
+あなたは座りこみ，%nの死を待った，そして次に%lに会うため
+神経を緊張させた！
+%E
+%Cc Rog 00081
+#"Well, I'll be damned.  You got it.  I am proud of you, a fine %r
+#you've turned out to be.
+#
+#"While you were gone I got to thinking, you and %o
+#together could bring me more treasure than either of you apart, so why don't
+#you take it with you.  All I ask is a cut of whatever loot you come by.
+#That is a better deal than I offered %n.
+#
+#"But, you see what happened to %n when he refused.
+#Don't make me find another to send after you this time."
+「ふん．ちょうどけなしてたとろだ．ブツを手に入れたようだな．お前を
+  誇りに思っとるよ．お前は素晴しい%rだ．
+
+「お前が行ってしまったあと，考えてたんだが，お前と%o
+  は一緒にしとくと俺をもっと宝のあるところへ導いてくれそうだ．どうだい？
+  つまり，俺が聞きてぇのはお前が略奪したものの分け前ってことだ．
+  %nなんかよりずっとすげぇ分け前にちがいねぇ．
+
+「しかし，お前は%nが拒否したとき何が起きたか見ただろう．また別の
+  人間を今度はお前のところに送るなんてことがねぇようにしとけ．」
+%E
+%Cc Rog 00082
+%lはさっと%oと彼のポケットにあるつまらない
+物とを交換しようとした．しかし，あなたはそれに気がついた．
+
+「魔除け探索を再開するんだな．魔法の入口の向こうで，
+  %Zがお前を待ってるぜ．
+%E
+%Cc Rog 00090
+#"Quite the little thief, aren't we, %p.  Can I interest you in a
+#swap for %o.  Look around, anything in the keep
+#is yours for the asking."
+「チンケな盗賊だが%p，俺は%oのかわりにお前に興味がある．
+  良く見まわせ，ここにあるもん全部を望むならお前にくれてやってもいいぜ．」
+%E
+%Cc Rog 00091
+#"I see that with your abilities, and my brains, we could rule this world.
+#
+#"All that we would need to be all-powerful is for you to take that little
+#trinket you've got there up to the Astral plane.  From there, %d will
+#show you what to do with it.  Once that's done, we will be invincible!"
+「お前の能力は俺のふんだ通りのものだった，俺らはこの世界の掟だ．
+
+「万能の力を得るためにお前がすることは，そのチンケな装飾具を精霊界に
+  持ってくことだ．そこで%dが何をすりゃいいのか教えてくれる．これができ
+  たら，俺らは無敵だ！」
+%E
+#
+#       Samurai
+#
+%Cc Sam 00001
+#Even before your senses adjust, you recognize the kami of
+#%H.
+#
+#You %x the standard of your teki, %n, flying above
+#the town.  How could such a thing have happened?  Why are ninja
+#wandering freely; where are the samurai of your daimyo, %l?
+#
+#You quickly say a prayer to Izanagi and Izanami and walk towards
+#town.
+意識が完全に戻る前に，あなたは%Hの都にいることがわかった．
+
+あなたの宿敵である%nが何故町の上空を飛んでいるのを%xた．
+なぜこんなことが起きているのだ？
+忍者が何故あちこちで放浪しているのだ？あなたの大
+名である%lの侍はどこにいるのだ？
+
+あなたは急いで伊邪那岐および伊邪那美に祈りをささげ，町へ向って
+歩いていった．
+%E
+%Cp Sam 00002
+もう一度，あなたは%Hに戻った．
+%E
+%Cp Sam 00003
+#You are back at %H.
+#
+#Instantly you sense a subtle change in your karma.  You seem to know that
+#if you do not succeed in your quest, %n will have destroyed
+#the kami of %H before you return again.
+あなたは%Hに戻った．
+
+即座に，あなたはカルマの微妙な違いを感じとった．あなたは，もしクエストに
+失敗したら，あなたが戻る前に%nが%Hの都を破壊すると言う重大な
+事態に気がついた．
+%E
+%Cp Sam 00005
+#"To succeed, you must walk like a butterfly on the wind."
+「成功のためには，蝶のように歩かねばならない」
+%E
+%Cp Sam 00006
+#"Ikaga desu ka?"
+「もうかりまっか？」
+%E
+%Cp Sam 00007
+#"I fear for The Land of The Gods."
+「私は神の地を恐れている」
+%E
+%Cp Sam 00008
+#"%nC has hired the Ninja -- be careful."
+「%nは忍者を雇ったそうだ．気をつけろ．」
+%E
+%Cp Sam 00009
+#"If %o is not returned, we will all be ronin."
+「もし%oが手に戻らなければ，我々はずっと浪人のままだ．」
+%E
+%Cp Sam 00010
+#"Come, join us in celebrating with some sake."
+「来い．祝杯を上げようじゃないか．」
+%E
+%Cp Sam 00011
+#"Ikaga desu ka?"
+「いかがですか？」
+%E
+%Cp Sam 00012
+#"You have brought our clan and %l much honor."
+「おまえは我らが氏族と%lに多くの名誉をもたらしてくれた．」
+%E
+%Cp Sam 00013
+#"Please %r, sit for a while and tell us how you overcame the Ninja."
+「さぁさぁ%r，まぁ，ここに座って，忍者をどうやってあしらったか
+  我々に教えてくれよ．」
+%E
+%Cp Sam 00014
+#"%lC still lives!  You have saved us from becoming ronin."
+「%lは安泰なり！おまえは我々を浪人になることから救ってくれた．」
+%E
+%Cc Sam 00015
+#"Ah, %p-san, it is good to see you again.  I need someone who can
+#lead my samurai against %n.  If you are ready, you will be
+#that person."
+「おお%pよ，おまえに会えて非常に嬉しい．私は%nに
+  対して我が侍魂を導く者を必要としている．
+  もし，おまえに準備ができているなら，
+  おまえがその選ばれた人間だ．」
+%E
+%Cp Sam 00016
+#"Once again, %p-san, you kneel before me.  Are you yet capable of
+#being my vassal?"
+「また来たな%pよ．私の前にひざまずけ．おまえにわたしの臣下
+  になるだけの技量があるかな？」
+%E
+%Cp Sam 00017
+#"You begin to test my matsu, %p-san.
+#If you cannot determine what I want in a samurai, how can I rely on you
+#to figure out what I need from a samurai?"
+「おまえは私の松の試練を受けはじめた，%pよ．もし，おまえが
+  私が侍に望むべきものを決めかねているなら，どうやっておまえを信頼したら
+  よいのだ？」
+%E
+%Cp Sam 00018
+#"You are no longer my samurai, %p.
+#
+#"Hara-kiri is denied.  You are ordered to shave your head and then to
+#become a monk.  Your fief and family are forfeit.  Wakarimasu?"
+「おまえはもはや私の侍ではない，%pよ．
+
+「ハラキリはやめよう．頭を剃り，僧にでもなるがよい．おまえの
+  領地や家族は没収する．わかったか？」
+%E
+%Cp Sam 00019
+#"%p-san, you have learned well and honored your family.
+#I require the skills of %Ra in order to defeat %n.
+#Go and seek out teachers.  Learn what they have learned.  When you
+#are ready, return to me."
+「%pよ，おまえはよく学び，家族を名誉に思っている．おまえが%nを
+  倒すには%Rくらいの技量が必要だ．
+  行け！そして師を捜せ！学ぶべきことを学べ！用意ができたなら
+  私のところへ戻ってくるのだ．」
+%E
+%Cp Sam 00020
+#"%p-san, you would do better to join the kyokaku.
+#
+#"You have skills, but until you can call upon the bushido to know when and
+#how to use them you are not samurai.  When you can think %A and
+#act %A then return."
+「%pよ．侠客に加わったほうがよいのではないか？
+
+「おまえは技量を持っている，しかし武士道のなんたるかを知るまでは，
+  おまえは侍ではない．%aについてよく考え，%aを実行し
+  そして戻るがよい．」
+%E
+%Cc Sam 00021
+#"Domo %p-san, indeed you are ready.  I can now tell you what
+#it is that I require of you.
+#
+#"The daimyo, %n, has betrayed us.  He has stolen from us
+#%o and taken it to his donjon deep within
+#%i.
+#
+#"If I cannot show the emperor %o when he comes
+#for the festival he will know that I have failed in my duty, and
+#request that I commit seppuku.
+#
+#"You must gain entrance to %i and retrieve the
+#emperor's property.  Be quick!  The emperor will be here for the
+#cha-no-you in 5 sticks.
+#
+#"Wakarimasu?"
+「%pよ，実にすばらしい．私はお前に私が何を求めているか
+  告げよう．
+
+「大名の%nが我々を裏切った．彼は我々から%oを盗み，
+  %iの地下深くに持ち去ったのだ．
+
+「帝が祭にやってきたとき，%oを献上できねば，帝は私の失敗に
+  気がつき，切腹を要求するであろう．
+
+「おまえは，%iに入り，帝の財産を回収せねばならない．急げ！
+  帝は5日後の茶の湯に来るのだ．
+
+「わかったか？」
+%E
+%Cp Sam 00025
+#"To defeat %n you must overcome the seven emotions:
+#hate, adoration, joy, anxiety, anger, grief, and fear."
+「%nを倒すには，おまえは7つの感情を打ち破らねばならぬ：
+  憎しみ，愛慕，楽しみ，不安，怒り，悲しみ，そして恐れだ．」
+%E
+%Cp Sam 00026
+#"Remember your honor is my honor, you perform in my name."
+「おまえの名誉は私の名誉であることを忘れるな，我が名のもとで戦え！」
+%E
+%Cp Sam 00027
+#"I will go to the temple and burn incense for your safe return."
+「私は寺へ行き，おまえの安全のため香を焚くつもりだ．」
+%E
+%Cp Sam 00028
+#"Sayonara."
+「さらばだ．」
+%E
+%Cp Sam 00029
+#"There can be honor in defeat, but no gain."
+「打ち負かした際には力や金はないが，名誉がある．」
+%E
+%Cp Sam 00030
+#"Your kami must be strong in order to succeed."
+「成功のためにはおまえの神は強者でなければならない．」
+%E
+%Cp Sam 00031
+#"You are indeed a worthy %R, but now you must be a worthy samurai."
+「おまえは実に%Rにふさわしい，しかし今やおまえは侍としても
+  ふさわしくなければならぬ．」
+%E
+%Cp Sam 00032
+#"If you fail, %n will be like a tai-fun on the land."
+「もしおまえが失敗するなら，%nはこの地の台風のようになる
+  であろう．」
+%E
+%Cp Sam 00033
+#"If you are truly %A, %d will listen."
+「もしおまえが本当に%aを守っているなら，%dは聞きいれてく
+  れるだろう．」
+%E
+%Cp Sam 00034
+#"Sharpen your swords and your wits for the task before you."
+「任務のため，おまえの剣を研ぎ，知恵を鍛えよ．」
+%E
+%Cc Sam 00035
+#You instinctively reach for your swords.  You do not recognize the
+#lay of this land, but you know that your teki are everywhere.
+あなたは直感的に剣に手が伸びた．あなたは自分がどこにいるのかわからなかっ
+たが，敵があちこちにいるのだけはわかった．
+%E
+%Cp Sam 00036
+#Thankful that your %sp at %H cannot see
+#your fear, you prepare again to advance.
+%Hにいるあなたの%sがあなたの恐怖にひきつった
+顔を見られないことが幸いだ．あなたは前進する準備をした．
+%E
+%Cc Sam 00040
+#In your mind, you hear the taunts of %n.
+#
+#You become like the rice plant and bend to the ground, offering a
+#prayer to %d.  But when the wind has passed, you stand
+#proudly again.  Putting your kami in the hands of fate, you advance.
+気のせいか，%nのあざけ笑いを聞いた．
+
+あなたは稲穂のように首を垂れ，地面に屈伏し，
+%dへの祈りを捧げた．一陣の風が通りすぎると，
+神の宿命を手に，あなたはまた勇ましげに前進した．
+%E
+%Cp Sam 00041
+#As you arrive once again at the home of %n, your thoughts
+#turn only to %o.
+%nの地へもう一度戻るときは，%oだけを考えて
+いるような気がした．
+%E
+%Cp Sam 00050
+#"Ah, so it is to be you, %p-san.  I offer you seppuku.
+#I will be your second if you wish."
+「おまえか，%pよ．切腹するという手段が残っているぞよ．
+  お前が望むなら，介錯人になろうぞ．」
+%E
+%Cp Sam 00051
+#"I have offered you the honorable exit.  Now I will have your
+#head to send unwashed to %l."
+「名誉ある死を勧めよう．さすれば，%lにお前の生首を
+  届けてやる．」
+%E
+%Cp Sam 00052
+#"After I have dispatched you, I will curse your kami."
+「お前をとっとと処刑して，おまえの神を呪ってやろうぞ．」
+%E
+%Cp Sam 00053
+#"You have fought my samurai; surely you must know that you
+#will not be able to take %o back to
+#%H"
+「お前は私の侍と戦った．%oを持って
+  %Hに帰ることなど不可能であると痛いほど知るがよい」
+%E
+%Cp Sam 00060
+#"Ahh, I finally meet the daimyo of the kyokaku!"
+「おお，私はとうとう侠客の大名に会った！」
+%E
+%Cp Sam 00061
+#"There is no honor for me in your death."
+「お前の死など私にとっては名誉でもなんでもない．」
+%E
+%Cp Sam 00062
+#"You know that I cannot resash my swords until they have killed."
+「我が剣は血を求めてやまない．」
+%E
+%Cp Sam 00063
+#"Your presence only compounds the dishonor of %l in not coming himself."
+「お前の存在は単に%lの不名誉を高めるだけだ．」
+%E
+%Cp Sam 00064
+#"I will make tea with your hair and serve it to %l."
+「お前の髪で茶を沸かし，%lに捧げよう．」
+%E
+%Cp Sam 00065
+#"Your fear shows in your eyes, coward!"
+「お前の恐怖心が目に見えるぞ，憶病者め！」
+%E
+%Cp Sam 00066
+#"I have not heard of you, %p-san; has your life been that unworthy?"
+「"%p？知らないな．お前の存在など一片の価値もない」
+%E
+%Cp Sam 00067
+#"If you will not obey me, you will die."
+「従わねば，死あるのみ．」
+%E
+%Cp Sam 00068
+#"Kneel now and make the two cuts of honor.  I will tell your %sp
+#of your honorable death."
+「ひざまずけ，名誉を捨てよ．さすればお前の%sに
+  名誉の死を伝えてやろう」
+%E
+%Cp Sam 00069
+#"Your master was a poor teacher.  You will pay for his mistakes in
+#your teaching."
+「お前の師は間抜けだな．彼の教え間違いの報いを受けるがよい」
+%E
+%Cc Sam 00070
+#As you pick up %o, you feel the strength of its karma.
+#You realize at once why so many good samurai had to die to defend it.
+#You are humbled knowing that you hold one of the artifacts of the
+#sun god.
+%oを拾うと，そのカルマの強さを感じた．
+あなたは直ちに，なぜ多くの侍がそれを守るために死んだのかを
+悟った．あなたは太陽神の聖器の１つを手にしたことを知って謙虚
+な気持になった．
+%E
+%Cc Sam 00080
+#Your healing skills tell you that %ns wounds are mortal.
+#
+#You know that the bushido tells you to finish him and let his kami
+#die with honor, but the thought of so many samurai dead due to this
+#man's dishonor prevents you from giving the final blow.
+#
+#You order that his unwashed head be given to the crows and his body
+#thrown into the sea.
+%nの傷は致命傷であることが感覚的にわかった．
+
+あなたは武士道では主のため，または主の神のために死ぬことは名誉であると
+教えていることを知っている．しかし，この不名誉な男のために死んだ数多く
+の侍への思いがとどめの一撃を与えることを妨げた．
+
+あなたは彼の生首をカラスに与え，彼の体を海へ投げることにした．
+%E
+%Cc Sam 00081
+#As you bow before %l, he welcomes you:
+#
+#    You have brought your family great honor, %p-sama.
+#
+#    While you have been gone the emperor's advisors have discovered in
+#    the ancient texts that the karma of the samurai who seeks to recover
+#    the amulet and the karma of %o are joined
+#    as the seasons join to make a year.
+#
+#    Because you have shown such fidelity, the emperor requests
+#    that you take leave of other obligations and continue on the
+#    road that fate has set your feet upon.  I would consider it
+#    an honor if you would allow me to watch your household until
+#    you return with the amulet.
+#
+#With that, %l bows, and places his sword atop
+#%o.
+%lに礼をする前に，彼はあなたを迎えた：
+
+    あなたは家族に偉大な名誉をもたらしました，%p様．
+
+    あなたが行く前に帝の従者が古代の文献の中に魔除けを取り戻す
+    ために探索する侍のカルマを発見し，%oのカルマは
+    四季の季節として結びつけられていることを発見しました．
+
+    あなたの忠誠心を見て，帝はあなたが他の義務を放棄し，あなたの宿命の
+    道をたどることを求めました．もしあなたが魔除けを持ってくる
+    までわたしがあなたの家族の世話をしてもよいなら，それは
+    非常に名誉なことです．
+
+このように%lは礼をし，彼の剣を差し出した．
+%E
+%Cc Sam 00082
+%lは%oをじっくりと眺め，あなたに返した．
+
+「魔除け探索の時が迫っています．
+  魔除け探索を再開するのです．魔法の入口の向こうで，
+  %Zがあなたを待っています．
+%E
+%Cp Sam 00090
+#%lC bows.  "%p-sama, tell us of your search for the Amulet."
+%lは礼をした．「%p様，魔除け探索の話をお聞かせください．」
+%E
+%Cc Sam 00091
+#"Ah, %p-sama.  You have wasted your efforts returning home.
+#Now that you are in possession of the Amulet, you are honor-bound to
+#finish the quest you have undertaken.  There will be plenty of time
+#for saki and stories when you have finished.
+#
+#"Go now, and may our prayers be a wind at your back."
+「おお%p様，故郷に帰られるとはもったいのうございます．
+  今や，あなたは魔除けの所有者です．あなたが請け負っている冒険を
+  終了することは名誉なことです．無事終了した際には，酒宴と冒険談
+  のためにあまるほどの時間があるでしょう．
+
+「お進みください，あなたに我々の祈りのあらんことを．」
+%E
+#
+#       Tourist
+#
+%Cc Tou 00001
+#You breathe a sigh of relief as you find yourself back in the familiar
+#surroundings of %H.
+#
+#You quickly notice that things do not appear the way they did when you
+#left.  The town is dark and quiet.  There are no sounds coming from
+#behind the town walls, and no campfires burning in the fields.  As a
+#matter of fact, you do not %x any movement in the fields at all, and
+#the crops look as though they have been untended for many weeks.
+#
+あなたは見慣れた%Hの敷地について安堵の一息をついた．
+
+しかし，ここを離れた時とはなんだか違うのに気付いた．
+町は暗く，静まり返っている．町の壁の向こう側からはなにも音が聞こえず，
+広場でのキャンプファイアーも見当たらない．
+というより，広場では何の動きも感じられず，作物は何週間
+にも渡って手入れされていないようだ．
+%E
+%Cp Tou 00002
+#Once again, you are back at %H.
+#
+あなたは再び%Hへと戻ってきた．
+%E
+%Cp Tou 00003
+#You are back at %H.
+#Things appear to have become so bad that you fear that soon
+#%H will not be here to return to.
+#
+あなたは%Hへと戻ってきた．
+
+状況がひどくなりすぎて，
+帰ってくる頃には%Hがなくなってしまうのではないかと危惧した．
+%E
+%Cp Tou 00005
+#"Gehennom on 5 zorkmids a day -- more like 500 a day if you ask me."
+#
+「ゲヘナで一日５ゴールドだって？５００の間違いじゃぁないのかい？」
+%E
+%Cp Tou 00006
+#"Do you know where I could find some nice postcards of The Gnomish Mines?"
+#
+「ノームの炭坑のきれいな絵葉書を売ってるところ知りません？」
+%E
+%Cp Tou 00007
+#"Have you tried the weird toilets?"
+#
+「あのー．変なトイレを使ったことあります？」
+%E
+%Cp Tou 00008
+#"Don't stay at the Inn, I hear the food is terrible and it has rats."
+#
+「宿には泊まらない方がいいよ．食事がひどくて，
+　おまけに鼠がでるんだってさ．」
+%E
+%Cp Tou 00009
+#"They told me that this was the off season!"
+#
+「えー．聞いてないよー．今がオフシーズンじゃなかったの？」
+%E
+%Cp Tou 00010
+#"Gehennom on 5 zorkmids a day -- more like 500 a day if you ask me."
+「ゲヘナで一日５ゴールドだって？５００の間違いじゃぁないのかい？」
+%E
+%Cp Tou 00011
+#"Do you know where I could find some nice postcards of The Gnomish Mines?"
+「ノームの炭坑のきれいな絵葉書を売ってるところ知りません？」
+%E
+%Cp Tou 00012
+#"Have you tried the weird toilets?"
+「あのー．変なトイレを使ったことあります？」
+%E
+%Cp Tou 00013
+#"If you stick around, I'll show you the pictures from my latest trip."
+「ちょっとそこで待ってくれれば，私の今回の旅行についての写真を
+  見せてあげるよ．」
+%E
+%Cp Tou 00014
+#"Did you bring me back any souvenirs?"
+「私のお土産を取り返してくれたのかい？」
+%E
+%Cc Tou 00015
+#"Is it really you, %p!  I had given up hope for your return.
+#As you can %x, we are desperately in need of your talents.  Someone must
+#defeat %n if our town is become what it once was.
+#
+#"Let me see if you are ready to be that someone."
+#
+「やや，%p君かい．戻ってくるとは思わなかったよ．
+  君にも分かると思うが，我々はヒジョーに困ってるんだ．
+　誰かが%nを倒さねば，町はもとのように戻らないんだ．」
+
+「君が我々を助けるに値するほどか確かめてみよう．」
+%E
+%Cp Tou 00016
+#"Things are getting worse, %p.
+#I hope that this time you are ready."
+#
+「状況は刻一刻悪化してるんだ，%p君．
+　今回は用意できているだろうね．」
+%E
+%Cp Tou 00017
+#"I hope that for the sake of %H you have prepared
+#yourself this time."
+#
+「%Hのためにも，今回は準備してきただろうね．」
+%E
+%Cc Tou 00018
+#"It is too late, %p.  You are not even worthy to die amongst us.
+#Leave %H and never return."
+#
+「遅すぎたね，%p君．君は我々の仲間として死ぬにも値しない．
+　%Hを離れて，二度と帰ってくるな．」
+%E
+%Cc Tou 00019
+#"There is still too much that you have to learn before you can undertake
+#the next step.  Return to us as a proven %R, and perhaps then
+#you will be ready.
+#
+#"Go back now, and may the teachings of %d serve you well."
+#
+「君は次の行動を起こす前にもっと学ばなければいけない．
+　%R として我々の前に帰ってこれたら，もしかしたら用意
+　できてるかもしれない．」
+
+「ささ，戻りたまえ．んで，%dの教えが君の為にならんことを．」
+%E
+%Cc Tou 00020
+#"It would be an affront to %d to have one not true to the
+#%a path undertake her bidding.
+#
+#"You must not return to us until you have purified yourself of these
+#bad influences on your actions.  Remember, only by following the %a
+#path can you hope to overcome the obstacles you will face."
+#
+「%aでない道を歩むものをこの試練に送ることは%dに対し
+  不貞を働くことになる．」	
+
+「君は自らの業を清めるまでわれわれの元に帰ってくるな．
+  そして覚えておけ．%aな道だけを進ことによって君はさらなる
+  試練に立ち向かうことができるんだ．」
+%E
+%Cc Tou 00021
+#"You have indeed proven yourself a worthy %c, %p.
+#
+#"But now your kinfolk and I must ask you to put aside your travels and
+#help us in our time of need.  After you left us we elected a new mayor,
+#%n.  He proved to be a most heinous and vile creature.
+#
+#"Soon after taking office he absconded with %o
+#and fled town, leaving behind his henchmen to rule over us.  In order
+#for us to regain control of our town, you must enter %i
+#and recover %o.
+#
+#"Do not be distracted on your quest.  If you do not return quickly I fear
+#that all will be lost.  Let us both pray now that %d will guide you
+#and keep you safe."
+#
+「確かに君はしょーしんしょーめーの%cだ，%p君．」
+
+「しかし，私及び我が一族は君に旅を一時休止して
+  この困ってる状況において助けてほしい．君が旅に出た直後，
+  %nが新しい町長として当選したんだが，
+  奴は残忍にして情け容赦ない，とんでもないやつだったんだ．．」
+
+「町長になってからというもの，奴は%oを
+  盗みだし，  町を自分の手下どもに好きなように任せ，
+  町を出ていった．我々がこの町を元に戻すためには君に
+  %iにいってもらい，%oを
+  取ってきてもらわなければならない．」
+
+「道草を食うようなことはしないでくれ．もし君が早く帰ってこれなけ
+  れば我々は全てを失ってしまうかもしれないんだ．%dが
+  君を導き，安全に守ってくれることを祈ろう．」
+
+%E
+%Cp Tou 00025
+#"Do not be fooled by the false promises of %n."
+#
+「%nの口車にのるな．奴は必ず裏切る．」
+%E
+%Cp Tou 00026
+#"To enter %i you must pass many traps."
+#
+「%iに入るためには様々な罠をくぐり抜けなければならないっす．」 
+%E
+%Cp Tou 00027
+#"If you do not return with %o, your quest
+#will be in vain."
+#
+「%oなくして帰ってきたら，あなたのしてきた
+  ことはなーんの意味も持たない．」
+%E
+%Cp Tou 00028
+#"Do not be afraid to call upon %d if you truly need help."
+#
+「どうしても助けが必要なら，ためらわずに%dに祈りなさい．」
+
+%E
+%Cp Tou 00029
+#"If you do not destroy %n, he will follow you back here!"
+#
+「%nを倒さなければ，%nはあなたをここまで追ってきますよ．」
+
+%E
+%Cp Tou 00030
+#"Take %o from %n
+#and you may be able to defeat him."
+#
+「%nから%oをとることが出来たら
+  %nを倒すことが出来るかもしれないっす．」
+%E
+%Cp Tou 00031
+#"You must hurry, %p!"
+#
+「%p，急ぎなさい！」
+%E
+%Cp Tou 00032
+#"You are like %Sa to me, %p.  Do not let me down."
+#
+「%p君，私にとって君は%Sのようなものだ．
+  期待を裏切るようなことはしないでくれ．」
+%E
+%Cp Tou 00033
+#"If you are %a at all times you may succeed, %p."
+#
+「%p君，君が常に%aであるならば，
+  もしかしたら成功するかもしれない．」
+%E
+%Cp Tou 00034
+#"Let all who meet you on your journey know that you are on an quest for
+#%l and grant safe passage."
+#
+「旅の途中で会う全ての者が君に安全であるように，
+  君が%lの為に旅に出ている，
+  ということを知らせておいたほうがいい．」
+%E
+%Cp Tou 00035
+#Only your faith in %d keeps you from trembling.  You %x
+#the handiwork of %ns henchlings everywhere.
+#
+%dに対する信仰だけがあなたを恐怖から遠ざけているようだ．
+あなたは%nのごろつきどもの作ったものをそこらじゅうで見かけた．
+%E
+%Cp Tou 00036
+#You know that this time you must find and destroy %n.
+#
+今回こそあなたは%nを探して倒さなければならない，
+と感じた．
+%E
+%Cp Tou 00040
+#You sense the presence of %o.
+#
+あなたは%oがここのどこかに
+あることに気づいた．
+%E
+%Cp Tou 00041
+#You gain confidence, knowing that you may soon be united with
+#%o.
+#
+あなたはもう少ししたら%oと共になれる，
+ということで自信を取り戻した．
+%E
+%Cc Tou 00050
+#"So, %p, %l thinks that you can wrest
+#%o from me!
+#
+#"It only proves how desperate he has become that he sends %ra to
+#try and defeat me.  When this day is over, I will have you enslaved
+#in the mines where you will rue the day that you ever entered
+#%i.
+#
+「ほほう，%p，%lはお前ごときが私から
+%oを取り返せると思っているのか！」
+
+「%r程度の雑魚を私のもとに送りつけるとは笑止な．
+  よほど部下に恵まれていないらしい．今日という日が終わったら，
+  お前を地下の奥深くで働かせ，%iに来たことをうんと
+  後悔させてやろう．」
+%E
+%Cc Tou 00051
+#"I let you live the last time because it gave me pleasure.  This time I will
+#destroy you, %p."
+「この前私がお前を生かしておいたのは，この上なく楽しませてもらったから
+  だ．しかし%p，今回は本当に殺す！」
+%E
+%Cp Tou 00052
+#"These meetings come to bore me.  You disturb my workings with
+#%o.
+#
+#"If you do not run away now, I will inflict so much suffering on you that
+#%l will feel guilty for ever having sent his %S to me!"
+#
+「なんだかこうしてお前と何回も会うのもつまらん．
+  私と%oを邪魔してるだけだ．」
+
+「もし私の前から失せなければ，お前にこの上ない苦しみを味わせてくれる．
+  そうすれば，%lは自分の%Sを私の元に送ったことをさぞや
+  後悔するだろう．」
+%E
+%Cp Tou 00053
+#"You fool.  You do not know how to call upon the powers of%o.
+#
+#
+#"Return it to me and I will teach you how to use it, and together we
+#will rule %H.  But do so now, as my patience
+#grows thin."
+
+「愚か者が！お前に%oを扱う
+  知識はないだろうが．」
+
+「今私にそれを返せばそれの使い方を教えてやる．
+  それでもって，二人で%Hを支配しよう．ただ，今すぐ返せ．
+  私は気が短いんでね．」
+%E
+%Cp Tou 00060
+#"I defeated %l and I will defeat you, %p."
+#
+「私は%lに勝った．そして今度はお前に勝つ番だ，%p．」
+%E
+%Cp Tou 00061
+#"Where is %d now!  You must realize no one can help you here."
+#
+「%dとやらはここにはいない．ここでお前を助けるものなぞ
+  誰もいない．」
+
+%E
+%Cp Tou 00062
+#"Beg for mercy now and I may be lenient on you."
+#
+「詫びろ．そうすれば助けてやらないこともない．」
+%E
+%Cp Tou 00063
+#"If you were not so %a, you might have stood a chance."
+#
+「それほど%aでなければ，もしかしたら互角に戦えたかもしれない．」
+%E
+%Cp Tou 00064
+#"Vengeance is mine at last, %p."
+#
+「最後に勝つのは私だ，%p」
+%E
+%Cp Tou 00065
+#"I only wish that %l had a more worthy %r to send against me."
+#
+「弱い！%lももう少し骨のある%rを送り出せばよかったものを．」
+%E
+%Cp Tou 00066
+#"With %o in my possession you cannot
+#hope to defeat me."
+#
+「%oが私の手元にある以上，
+  お前に勝つ見込みはない！」
+%E
+%Cp Tou 00067
+#"%nC has never been defeated, NEVER!"
+#
+「%nは一度たりとも負けたことはないのだ．一度もな．」
+%E
+%Cp Tou 00068
+#"Are you truly the best %H has to send against me?
+#I pity %l."
+#
+「お前は本当に%Hで一番強いのか？そうならば
+  %lを憐れむよ．」
+%E
+%Cp Tou 00069
+#"How do you spell %p?  I want to ensure the marker on your grave is
+#correct as a warning to your %sp."
+#
+「%pのつづりはどう書くんだ？墓石にどう書くのかちゃんと
+  確かめないと，お前の%sに対する 見せしめにならないからな．」
+%E
+%Cc Tou 00070
+#As you pick up %o, you feel a great
+#weight has been lifted from your shoulders.  Your only thoughts are
+#to quickly return to %H and find %l.
+#
+%oを拾うにつれて，背中から
+重荷を下ろしたときのような
+安堵感を感じた．今思うことはただ一つ．
+%Hへ早くかえって%lを探すことだ．
+%E
+%Cc Tou 00080
+#You turn in the direction of %n.  As his earthly body begins
+#to vanish before your eyes, you hear him curse:
+#
+#    You shall never be rid of me, %p!
+#    I will find you where ever you go and regain what is rightly mine.
+#
+あなたは%nの方向へ目を向ける．彼の体があなたの目の前から
+消えるにつれ，彼の呪いの言葉を聞いた．
+
+「%p，お前にはずっとつきまとってやる！
+  お前がどこにいようがお前を必ず探し出して
+  私の為にあるべきものを取り返してみせる．」
+%E
+%Cc Tou 00081
+#As %l detects the presence of %o,
+#he almost smiles for the first time in many a full moon.
+#
+#As he looks up from %o he says:
+#
+#    You have recovered %o.  You are its
+#    owner now, but not its master.  Let it work with you as you continue
+#    your journey.  With its help, and %d to guide you on the
+#    %a path, you may yet recover the Amulet of Yendor.
+#
+%lは%oの存在を確認するにつれ，
+何月ぶりかというほどの笑顔を見せた．
+
+そして，%oから目を離すにつれて話した．
+
+「君は%oを取り戻してくれた．
+  それは君が持ち主となったわけだが，君はまだ真の主となったわけではない．
+  君が旅を続けるにつれ，それは真の姿を見せるだろう．それと%dの
+  %aな導きがあればもしやしたらイェンダーの魔除けを手にすることが
+  できるかもしれない．」
+%E
+%Cc Tou 00082
+「今や，君は%oの守護者だよ．
+  魔除け探索を再開しなきゃ．魔法の入口の向こうで，
+  %Zが君を待っているよ．
+%E
+%Cc Tou 00090
+#"I could not be more proud than if you were my own %S, %p!
+#Tell me of your adventures in quest of the Amulet of Yendor."
+#
+「君が私の本当の%Sであればよかったものの．しかし，それにしても
+これは私にとって君はこの上ない誇りだ．
+ささ，君のイェンダーの魔除けを探すまでの冒険談を聞かせてくれたまえ．」
+%E
+%Cc Tou 00091
+#"Stand back and let me look at you, %p.
+#Now that you have recovered the Amulet of Yendor, I'm afraid living
+#out your days in %H would seem pretty tame.
+#
+#"You have come too far to stop now, for there are still more tasks that
+#our oral history foretells for you.  Forever more, though, your name shall
+#be spoken by the %gP with awe.  You are truly an inspiration to your
+#%sp!"
+「もう少し下がって君の姿を見せてくれ，%p．
+  イェンダーの魔除けを手にした以上，これからずっと
+  %Hで生きていくというのはちとつまらないであろう．」
+
+「君はもう後戻りする訳にはいかない．なぜなら，
+  君はこれから後に様々な冒険をすることを運命づけられている．
+  そして，%pと言う名は%gの間で伝説として語り継がれるだろう．
+  %p，君は自分の%sの偉大なる手本となったのだ．」
+
+%E
+#
+#       Undead Slayer
+#
+%Cc Und 00001
+#You find yourself standing in sight of %H.  Something
+#is obviously wrong here.  The holy light that usually fills the sky
+#is gone, and strange human shapes shamble around outside.
+#
+#You realize that %l needs your assistance!
+あなたは%Hの近くに立っていた．
+明らかに何かがおかしい．いつも空を満たしていた聖なる光が無くなっている．
+そして怪しい人間のミイラが%Hのまわりをうろついている．
+
+あなたは%lがあなたの助けを必要としていることを知った．
+%E
+%Cp Und 00002
+#Once again, you stand before %H.
+あなたは再び%Hの前に立った．
+%E
+%Cp Und 00003
+#Again you face %H.  Your intuition hints that this may be
+#the final time you come here.
+あなたは再び%Hを目にした．直観的にここを訪れるのはこれが
+最後になるということがわかった．
+%E
+%Cp Und 00005
+#"Greetings, %r.  It is good to see you."
+「こんにちは，%r．お会いできて嬉しいです．」
+%E
+%Cp Und 00006
+#"Ah, %p!  Surely you can help us in our hour of need."
+「ああ，%p！  あなたならきっと私達を助けてくれるでしょう．」
+%E
+%Cp Und 00007
+#"Greetings, %s.  %lC has great need of your help."
+「こんにちは，%s．%lはあなたの助けをおおいに必要としています．」
+%E
+%Cp Und 00008
+#"Alas, it seems as if even %d has deserted us."
+「ああ，%dも私達を見捨ててしまわれたのかもしれない．」
+%E
+%Cp Und 00009
+#"May %d be with you, %s."
+「%dがあなたと共にありますように，%s．」
+%E
+%Cp Und 00010
+#"Greetings, %r.  It is good to see you."
+「こんにちは，%r．お会いできて嬉しいです．」
+%E
+%Cp Und 00011
+#"May %d be with you, %s."
+「%dがあなたと共にありますように，%s．」
+%E
+%Cp Und 00012
+#"Have you heard the rumors about the vampire known as 'The Day Walker'
+#that stalks his own breed?"
+「『昼歩き』と呼ばれる吸血鬼の噂を聞いた事がありますか？
+  子孫を残す為に徘徊しているらしいのですが．」
+%E
+%Cp Und 00013
+#"With %n destroyed, we are safe once more!"
+「%nを倒した事により，私達は再び安息を得る事ができました！」
+%E
+%Cp Und 00014
+#"I hear you are to be nominated as next leader of the order!"
+「あなたが次期当主として推薦されているという話を聞きましたよ！」
+%E
+%Cc Und 00015
+#"Ah, %p, my %S.  You have returned to us at last.
+#A great blow has befallen our order; perhaps you can help us.
+#First, however, I must determine if you are prepared for this
+#great challenge."
+「ああ，%p，我が%Sよ．とうとう我等のところに戻ってきてくれたな．
+  我等の平和の上に災難が降りかかってきたのだ．
+  お前なら我等を助けてくれるであろう．
+  しかし，まずお前がこの大いなる冒険に出るのにふさわしいか
+  どうかを確かめねばならぬ．」
+%E
+%Cp Und 00016
+#"Again, my %S, you stand before me.  Are you ready now to help us?"
+「我が%Sよ，再び私の元へ来たか．我等を助ける準備は良いか？」
+%E
+%Cp Und 00017
+#"Once more, %p, you stand within the sanctum.  Are you ready now?"
+「%pよ，お前は再びこの聖域へやってきたな．準備は良いか？」
+%E
+%Cc Und 00018
+#"You are a heretic, %p!  How can you, %ra, deviate so from the
+#teachings of %d?  Begone from this temple.  You are no longer
+#%sa to this order.  We will pray to %d for other assistance,
+#as you have failed us utterly."
+「お前は異端者だ，%p！  %rの身分にあるのに何故%dの教えに
+  背いたりしたのだ？  この寺院から去るがよい．お前は最早
+  この世界の%sではない．我等は%dに助けて下さるようにまた
+  お祈りしよう．お前は我等を裏切ったのだ．」
+%E
+%Cc Und 00019
+#"Alas, %p, it is not yet to be.  A mere %r could never
+#withstand the might of %n.  Go forth, again into the world, and return
+#when you have attained the post of %R."
+「ああ，%pよ，まだその時ではないようだ．%rの身分では，まだ
+  %nの力に対抗することは出来ない．先に進み，%Rの位を
+  手に入れたら再びこの世界に戻って来るのだ．」
+%E
+%Cc Und 00020
+#"This is terrible, %p.  You have deviated from the true path!
+#You know that %d requires the most strident devotion of this
+#order.  The %shood must stand for utmost piety.
+#
+#"Go from here, atone for your sins against %d.  Return only when
+#you have purified yourself."
+「これは恐しいことだ．お前は真の道から外れている！
+  %dが最大限の献身を求めていることはお前も知っていよう．
+  %sとしてできうる限り敬虔であらねばならぬ．
+
+  ここから去り，そして%dに対する罪を購うのだ．
+  お前の身が浄められた時にここに戻って来るがいい．」
+%E
+%Cc Und 00021
+#"Yes, %p.  You are truly ready now.  Attend to me and I shall
+#tell you of what has transpired:
+#
+#"Recently, %n and a legion of undead invaded %H.
+#Many %gP were killed, and %o was stolen from us!
+#
+#"Now, there are barely enough %gP left to keep
+#the undead at bay.
+#
+#"We need you to find %i, and then, from there, travel
+#to %ns lair.  If you can manage to defeat %n
+#and return %o here, we can then drive off the
+#legions of undead that befoul the land.
+#
+#"Go with %d as your guide, %p."
+「よし，%pよ，お前の準備は整ったようだ．注意して聞け．
+  これから起こったことを話そう．
+
+  最近のこと，%nとそのアンデッドの軍隊が%Hを侵略した．
+  大くの%gが殺された．そして%oがここから盗まれたのだ．
+
+  今はかろうじてアンデッドを追い払うだけの%gしか
+  ここにはいない．
+
+  お前に%iを見つけ，そしてそこから%nのすみかへと
+  旅してもらいたいのだ．もしお前が%nを倒し，%oを
+  ここへと持ち帰ってくれたなら，我等はこの地を汚している
+  アンデッドの軍隊を一掃することが出来るのだ．
+
+  %dとともにゆけ．%dはお前を導いて下さるで
+  あろう．%pよ．」
+%E
+%Cp Und 00025
+#"You can prevail, if you rely on %d."
+「%dを信じるのだ．そうすればお前は勝利することが出来る．」
+%E
+%Cp Und 00026
+#"Remember that %n has great magic at his command."
+「%nは強力な魔法を使いこなすから注意しろ．」
+%E
+%Cp Und 00027
+#"Be pure, my %S."
+「清い身でいるのだ，我が%Sよ．」
+%E
+%Cp Und 00028
+#"Beware, %i is surrounded by a great graveyard."
+「%iは広大な墓地に囲まれている．」
+%E
+%Cp Und 00029
+#"Remember, no mercy for the evil!"
+「邪悪なるものに情けをかけてはいかんぞ！」
+%E
+%Cp Und 00030
+#"Acquire and wield %o if you can.  It will aid you
+#against %n."
+「%oを手にいれよ．そして可能なら装備してみることだ．
+  それは%nと戦うのに役立つことだろう．」
+%E
+%Cp Und 00031
+#"Call upon %d when your need is greatest.  You will be answered."
+「助けがどうしても必要な時は%dを呼ぶのだ．
+  きっと答えて下さるだろう．」
+%E
+%Cp Und 00032
+#"The undead legions are weakest during the daylight hours."
+「アンデッドの軍隊は日がのぼっている間が最も弱い．」
+%E
+%Cp Und 00033
+#"Do not loose faith, %p.  If you do so, %n will grow stronger."
+「信仰を失ってはならぬ，%pよ．もし失えば%nはより強くなるぞ．」
+%E
+%Cp Und 00034
+#"Wear %o.  It will assist you against the undead."
+「%oを身につけてみるのだ．それはアンデッドと戦う助けになるだろう．」
+%E
+%Cc Und 00035
+#You stand facing a large graveyard.  The sky above is filled with clouds
+#that seem to get thicker closer to the center.  You sense the presence of
+#undead in larger numbers than you have ever encountered before.
+#
+#You remember the descriptions of %i, given to you by
+#%l.  It is ahead that you will find %ns trail.
+あなたは広大な墓地を目にしている．頭上の空は雲に覆われており，
+その雲は墓地の中心に行くにつれて厚くなっているようだ．
+あなたの五感は今までに出会ったことの無いような数のアンデッドが
+いることを感じ取った．
+
+あなたは%lがあなたに話した%iについての描写を
+思い出した．%nを見つけるためには前進しなくてはならない．
+%E
+%Cp Und 00036
+#Again, you stand before %i.
+あなたは再び%iの前に立った．
+%E
+%Cc Und 00040
+#The stench of brimstone is all about you, and the shrieks and moans
+#of tortured souls assault your psyche.
+#
+#Ahead, there is a small clearing amidst the bubbling pits of lava...
+硫黄の悪臭があなたの鼻をついた．拷問にかけられた魂の叫びと呻きが
+あなたの心を刺した．
+
+前方の，湧きだす溶岩の穴の中，小さく開けたところがある...
+%E
+%Cp Und 00041
+#Again, you have invaded %ns domain.
+あなたは再び%nのすみかに侵入した．
+%E
+%Cc Und 00050
+#"Ah, so %l has sent another %g to retrieve
+#%o.
+#
+#"No, I see you are no %g.  Perhaps I shall have some fun today
+#after all.  Prepare to die, %r!  You shall never regain
+#%o."
+「ほほう，%lが%oを取り戻すために
+  新しい%gを送り込んできたか．
+
+  いやお前は%gには見えないな．どっちにしろ今日は
+  少しは楽しめそうだ．死ぬ準備をしろ，%r！
+  %oを取り戻すことはできぬ！」
+%E
+%Cp Und 00051
+#"So, %r.  Again you challenge me."
+「ほほう，%rよ．また私に挑戦するか．」
+%E
+%Cp Und 00052
+#"Die now, %r.  %d has no power here to aid you."
+「今こそ死ね，%r．%dの力もここではお前を助けることはできぬ．」
+%E
+%Cp Und 00053
+#"You shall die, %r, and I will have %o back."
+「お前は死ぬのだ，%r．そして私は%oを取り戻す．」
+%E
+%Cp Und 00060
+#"Submit to my will, %c, and I shall spare you."
+「私の命令に従え，%c．そうすればお前を助けてやるぞ．」
+%E
+%Cp Und 00061
+#"Your puny powers are no match for me, %c."
+「その貧弱な力では私に勝つことは出来んぞ，%cよ．」
+%E
+%Cp Und 00062
+#"I shall have you turned into a zombie for my pleasure!"
+「お前をゾンビにしてやるのが今から楽しみだ！」
+%E
+%Cp Und 00063
+#"Despair now, %r.  %d cannot help you."
+「絶望するがいい，%r．%dはお前を救えぬ．」
+%E
+%Cp Und 00064
+#"I shall feast upon your soul for many days, %c."
+「%cよ，お前の魂を何日もの間，味わってやろう．」
+%E
+%Cp Und 00065
+#"Your death will be slow and painful.  That I promise!"
+「お前はゆっくりと，苦しみながら死ぬのだ．
+  それだけは約束しよう！」
+%E
+%Cp Und 00066
+#"You cannot defeat %n, you fool.  I shall kill you now."
+「%nは倒せぬぞ，馬鹿ものめ．今こそお前を殺してやろう．」
+%E
+%Cp Und 00067
+#"Your precious %l will be my next victim."
+「お前の尊敬する%lが私の次のいけにえだ．」
+%E
+%Cp Und 00068
+#"I feel your powers failing you, %r.  You shall die now."
+「お前の力はどうやら足りなかったようだな，%r．今こそ死ね．」
+%E
+%Cp Und 00069
+#"With %o, nothing can stand in my way."
+「%oさえあれば何者も私を邪魔することは出来ぬ．」
+%E
+%Cc Und 00070
+#As you pick up %o, you feel the essence of
+#%d fill your soul.  You know now why %n stole it from
+#%H, for with it, %ca of %d could
+#easily defeat his plans.
+#
+#You sense a message from %d.  Though not verbal, you
+#get the impression that you must return to %l as soon
+#as possible.
+あなたが%oを取り上げると，
+%dへの信仰が魂を満たすのを感じた．
+あなたは，なぜ%nがそれを%Hから盗み出したのかを
+理解した．これがあれば%dの下僕，%cは
+更に容易に%nの計画を打ち破れたであろう事を．
+
+あなたは%dからのメッセージを感じた．言葉では言えないが，
+あなたは%lの元へ今すぐ帰らなくてはならないと感じたのだ．
+%E
+%Cc Und 00080
+#You feel a wrenching shift in the ether as %ns body dissolves
+#into a cloud of noxious gas.
+#
+#Suddenly, a voice booms out:
+#
+#    Mark my words, niggling! I shall return!
+#
+#You then hear the voice of %n, laughing insanely...
+%nの体が有害な気体へと溶けてゆくとき，
+空気の不自然なゆがみが感じられた．
+
+突然，声が響いた．
+
+    私の言葉を覚えておくがいい，小心者よ！
+    私は必ず戻って来るぞ！
+
+それからあなたは，狂ったように笑う%nの声を聞いた．
+%E
+%Cc Und 00081
+#"You have returned, %p.  And with %o, I see.
+#Congratulations.
+#
+#"I have been in meditation, and have received direction from
+#a minion of %d.  %d commands that you retain
+#%o.  With it, you must recover the Amulet
+#of Yendor.
+#
+#"Go forth, and let %d guide your steps."
+「よく戻ってきたな，%pよ．%oも取り戻してくれた．
+  おめでとう．
+
+  私はずっと冥想していて，%dの天使から啓示を頂いた．
+  %dはお前が%oを保有するよう
+  命じられた．お前はそれを使ってイェンダーの魔除けを
+  取り戻さねばならぬ．
+
+  先へ進むのだ．%dの導きのままに．」
+%E
+%Cc Und 00082
+#%l reiterates that %o is yours now.
+#
+#"The time has come to resume your search for the Amulet.
+#%Z await your return through the magic portal which brought
+#you here."
+%lは，%oは今やあなたの物なのだと繰り返した．
+
+「お前が再び魔除けの探索に戻るべき時が来た．
+  お前が来る時に使った魔法の入口の向こうで，
+  %Zがお前を待っているぞ．｝
+%E
+%Cp Und 00090
+#"Welcome back, %p.  How is your quest for the Amulet going?"
+「よく戻ってきたな，%pよ．
+  イェンダーの魔除けを求める旅はどんな具合だ？」
+%E
+%Cc Und 00091
+#"You have prevailed, %p!  %d is surely with you.  Now,
+#you must take the amulet, and sacrifice it on %ds altar on
+#the Astral plane.  I suspect that I shall never see you again in this
+#life, but I hope to at %ds feet."
+「勝利したな，%p！  %dはお前と共にある．
+  今，お前はその魔除けを持って精霊界へ行き，%dの祭壇に
+  捧げなくてはならぬ．もう生きている間にお前に再び会うことは
+  無いだろう．しかし%dの御足の下で再び会うことができるに
+  違いない．」
+%E
+#
+#       Valkyrie
+#
+%Cc Val 00001
+#You materialize at the base of a snowy hill.  Atop the hill sits
+#a place you know well, %H.  You immediately realize
+#that something here is very wrong!
+#
+#In places, the snow and ice have been melted into steaming pools of
+#water.  Fumaroles and pools of bubbling lava surround the hill.
+#The stench of sulphur is carried through the air, and you %x creatures
+#that should not be able to live in this environment moving towards you.
+あなたは雪の降る丘に突如現われた．この地の丘の頂上にある%Hは
+よく知っている場所だが，あなたは即座に何かが大きく違うことに気がついた．
+
+何故か，雪や氷が水溶け水蒸気をもくもくとあげている．噴気孔やぶくぶく
+と泡だっている溶岩が丘を囲んでいる．硫黄の匂いが空気を漂っており，
+このような環境では生きていけない生物があなたの前方で動いているの
+を%xた．
+%E
+%Cp Val 00002
+#Once again, you are near the abode of %l.
+もう一度，あなたは%lの住まいの近くにやってきた．
+%E
+%Cp Val 00003
+#Again you materialize near %ls abode.  You have a nagging feeling
+#that this may be the last time you come here.
+再度，あなたは%lの住まいの近くに現われた．ここにやってくるのはこれが
+最後であるようないらだつ気持になった．
+%E
+%Cp Val 00005
+#"Hail, and well met, brave %c."
+「ようこそ！偉大なる%c．」
+%E
+%Cp Val 00006
+#"May %d guide your steps, %p."
+「%pよ，%dがお前を導いてくれるであろう．」
+%E
+%Cp Val 00007
+#"%lC weakens.  Without %o, her foresight is dim."
+「%lは衰弱している．%oなしでは彼女の
+  洞察力はかすんでしまうのだ．」
+%E
+%Cp Val 00008
+#"You must hurry, %p, else Ragnarok may well come."
+「お前は急がねばならぬ%p．さもなければラグナロックがやってくる．」
+%E
+%Cp Val 00009
+#"I would deal with this foul %n myself, but %d forbids it."
+「むかつく%nにこの身をぶつけたい，しかし%dがそれを
+  してはならぬと言うのだ．」
+%E
+%Cp Val 00010
+#"Hail, and well met, brave %c."
+「ようこそ！偉大なる%c．」
+%E
+%Cp Val 00011
+#"May %d guide your steps, %p."
+「%pよ，%dがお前を導いてくれるであろう．」
+%E
+%Cp Val 00012
+#"%lC told us you had succeeded!"
+「%lは君の成功を話してくれたよ！」
+%E
+%Cp Val 00013
+#"You recovered %o just in time, %p."
+「ちょうどいいときに%oを取り戻してきてくれた．%p．」
+%E
+%Cp Val 00014
+#"Hail %d, for delivering %o back to us."
+「おぉ，%dよ，%oを我々のもとに返してくださった．」
+%E
+%Cc Val 00015
+#"Ah, %p, my %S.  You have returned to %H
+#at last.  We are in dire need of your aid, but I must determine if you
+#are yet ready for such an undertaking.
+#
+#"Let me read your fate..."
+「まぁ，わたしの%s%pよ！%Hに戻ってきてくれましたのね．
+  我々はあなたの力が至急必要なのです，しかしその前にあなたがそれを
+  受け負うだけの力があるか決めなければなりません．
+
+「あなたの運命を読んでみましょう．．．」
+%E
+%Cp Val 00016
+#"Let me read the future for you now, %p, perhaps you have managed to
+#change it enough..."
+「あなたの未来を読んでみましょう%p，たぶんあなたは簡単に
+  修業をなさってくるでしょうけど．．．」
+%E
+%Cp Val 00017
+#"Again, I shall read your fate, my %S.  Let us both hope that you have
+#made changes to become ready for this task..."
+「また，あなたの運命を読んでみましょう，わたしの%Sよ．この
+  任務をこなすだけの修業をなさってきたことを望みましょう．」
+%E
+%Cc Val 00018
+#"No, %p.  Your fate is sealed.  I must cast about for another
+#champion.  Begone from my presence, and never return.  Know this, that
+#you shall never succeed in this life, and Valhalla is denied to you."
+「いけません%p！あなたの運命は封印されてしまいました．
+  わたしは別の勇者を頼ることにします．わたしの前から去りなさい．戻って
+  くることはまかりなりません．次のことをよく覚えておくのです．あなたは
+  決して成功することはないでしょう．ヴァルハラ宮殿もあなたを拒んでいます．」
+%E
+%Cc Val 00019
+#"I see you and %n fighting, %p.  But you are not prepared and
+#shall die at %ns hand if you proceed.  No.  This will not do.
+#Go back out into the world, and grow more experienced at the ways of
+#war.  Only when you have returned %Ra will you be able to defeat
+#%n."
+「%pよ，私はあなたと%nの戦いを見ています．しかし
+  あなたは準備ができてないようです．今のままではあなたは%n
+  の手により殺されてしまうでしょう．いけません．こんなことになっては
+  いけない．戻りなさい，そして戦いにより経験を積むのです．%R
+  になってから戻ってくるのです．そうすれば，%nを打ち負かすこ
+  とができるでしょう．」 
+%E
+%Cc Val 00020
+#"NO!  This is terrible.  I see you becoming an ally of %n, and
+#leading his armies in the final great battles.  This must not come to
+#pass!  You have strayed from the %a path.  You must purge yourself,
+#and return here only when you have regained a state of purity."
+「いけません！恐しいことです．%nに心を奪われ，
+  偉大なる最終戦で彼の部下を導く姿が見えます．大変困った
+  ことですわね．あなたは%aの道から外れているようです．
+  自分自身を清め，純粋な気持を取り戻したときにまた戻ってくるのです．」
+%E
+%Cc Val 00021
+#"It is not clear, %p, for my sight is limited without
+#%o.  But it is now likely that you can defeat %n,
+#and recover %o.
+#
+#"A short time ago, %n and his minions attacked this place.  They
+#opened the huge volcanic vents you %x about the hill, and attacked.
+#I knew that this was to come to pass, and had asked %d for a group
+#of %gP to help defend this place.  The few you %x here are the
+#mightiest of Valhalla's own, and are all that are left of one hundred
+#%d sent.
+#
+#"Despite the great and glorious battle we fought, %n managed at last
+#to steal %o.  This has upset the balance of the universe, and
+#unless %o is returned into my care, %n may start Ragnarok.
+#
+#"You must find the entrance to %i.  Travel downward
+#from there and you will find %ns lair.  Defeat him and
+#return %o to me."
+「%pよ，わたしの眼力は%o無しでは極めて制限されてしま
+  うので正確なことは言えません．しかし，あなたは%nを打ち負かし，
+  %oを取り返すだけの力を得たようです．
+
+「少し前に，%nと彼の使い魔がこの地に攻撃をしかけました．丘の上
+  にあるのを見たと思いますが，彼らは巨大な火口を開き，攻撃をしかけてき
+  たのです．わたしはこれが困ったことになるのを知り，%gの一隊にこの地を
+  守るよう%dに懇願しました．ここにいる者達はヴァルハラ宮殿直属
+  の選ばれた精鋭で，%dの送った100人の戦士の生き残りなのです．
+
+「偉大かつ栄誉ある戦いにもかかわらず，とうとう%nは
+  %oを盗んでしまいました．%oがわたしの手元に戻らな
+  ければ，%nはラグナロックを始めてしまい，世界の均衡は崩れて
+  しまうでしょう．
+
+「あなたは，%iの入口を探さなければなりません．ここから地下に
+  旅を進め，%nの隠れ家をみつけるのです．彼を打ち負かし，
+  %oを私の元へ取り返してください．」
+%E
+%Cp Val 00025
+#"Go with the blessings of %d."
+「%dの祝福のあらんことを．」
+%E
+%Cp Val 00026
+#"Call upon %d when you are in need."
+「必要ならば%dを呼びなさい．」
+%E
+%Cp Val 00027
+#"Use %o if you can.  It will protect you."
+「可能なら%oを使いなさい．あなたを守るてしょう．」
+%E
+%Cp Val 00028
+#"Magical cold is very effective against %n."
+「%nには寒さの魔法が効果的です．」
+%E
+%Cp Val 00029
+#"To face %n, you will need to be immune to fire."
+「%nと直面するには，炎への耐性が必要です．」
+%E
+%Cp Val 00030
+#"May %d strengthen your sword-arm."
+「%dがあなたの利き腕に力を与えてくれるでしょう．」
+%E
+%Cp Val 00031
+#"Trust in %d.  He will not desert you."
+「%dを信じなさい．彼はあなたを見捨てたりしませんわ．」
+%E
+%Cp Val 00032
+#"It becomes more likely that Ragnarok will come with every passing moment.
+#You must hurry, %p."
+「ラグナロックが今すぐにでも起きそうです．急ぎなさい%p！」
+%E
+%Cp Val 00033
+#"If %n can master %o, he will be powerful enough to
+#face %d far earlier than is fated.  This must not be!"
+「もし%nが%oを支配しているなら，彼は%dに
+  匹敵するくらい強力なはずです．これだけは避けねばなりません！」
+%E
+%Cp Val 00034
+#"Remember your training, %p.  You can succeed."
+「あなたの力を信じなさい%p．きっと成功しますわ．」
+%E
+%Cc Val 00035
+#The ice and snow gives way to a valley floor.  You %x ahead of you
+#a huge round hill surrounded by pools of lava.  This then is the entrance
+#to %i.  It looks like you're not going to get in without
+#a fight though.
+氷と雪が谷底に道を作っていた．あなたは目の前に，溶岩に囲まれた大きな
+丸い丘を見た．これは%iへの入口である．戦うことなしに内部に
+入ることは無理なようだ．
+%E
+%Cp Val 00036
+#Once again, you stand before the entrance to %i.
+もう一度，あなたは%iの入口の前にやってきた．
+%E
+%Cc Val 00040
+#Through clouds of sulphurous gasses, you %x a rock palisade
+#surrounded with a moat of bubbling lava.  You remember the description
+#from something that %l said.  This is the lair of %n.
+硫黄のガスの雲間に，あなたは泡だつ溶岩の堀を囲む石の柵を見つけた．
+あなたは%lが言っていたことを思いだした．これは%nの
+住み家だ．
+%E
+%Cp Val 00041
+#Once again, you stand in sight of %ns lair.
+もう一度，あなたは%nの住み家の見えるところにやってきた．
+%E
+%Cc Val 00050
+#"So!  %lC has finally sent %ca to challenge me!
+#
+#"I thought that mastering %o would enable me to challenge %d,
+#but it has shown me that first I must kill you!
+#So come, little %s.  Once I defeat you, I can at last begin
+#the final battle with %d."
+「ほう．%lは私を倒すため%cを送ってきたか！
+
+「私は%oを支配することにより%dを倒せると思ってるのだが，
+  手始めに貴様を殺すことによってその力をためしてみよう！来るがよい．
+  哀れな%sよ．貴様を殺してから，%dとの最終戦争を始めよう
+  ではないか．」
+%E
+%Cp Val 00051
+#"Again you challenge me, %r.  Good.  I will kill you now."
+「またきたか%r．よろしい．今度こそ貴様に止めを刺してやろう．」
+%E
+%Cp Val 00052
+#"Have you not learned yet?  You cannot defeat %n!"
+「まだわからんのか？貴様に%nは倒せないのさ！」
+%E
+%Cp Val 00053
+#"I will kill you, %c, and wrest %o from your mangled hands."
+「%cよ死ね！貴様の腕を切りきざみ%oをもぎとってやる．」
+%E
+%Cp Val 00060
+#"I am your death, %c."
+「我に貴様の死を，%c．」
+%E
+%Cp Val 00061
+#"You cannot prevail, %r.  I have foreseen your every move."
+「私には勝てんよ，%r．貴様の動きなど手に取るようにわかるわい．」
+%E
+%Cp Val 00062
+#"With you out of the way, Valhalla will be mine for the taking."
+「貴様が道から外れているので，ヴァルハラ宮殿は我がものだ．」
+%E
+%Cp Val 00063
+#"I killed scores of %ds best when I took %o.
+#Do you really think that one %c can stand against me?"
+「%oを手にしてたときは，%dの精鋭を何十人となく殺したもんだ．
+  たった１人の%cが私にはむかってくる？滑稽な話だ．」
+%E
+%Cp Val 00064
+#"Who bears the souls of %c to Valhalla, %r?"
+「誰が%cの魂をヴァルハラ宮殿に生みつけるんだ，%rよ？」
+%E
+%Cp Val 00065
+#"No, %d cannot help you here."
+「無駄無駄，ここでは%dは助けてくれないぞ．」
+%E
+%Cp Val 00066
+#"Some instrument of %d you are, %p.  You are a weakling!"
+「貴様は%dの道具さ%p．軟弱者め！」
+%E
+%Cp Val 00067
+#"Never have I seen %ca so clumsy in battle."
+「%cがこんなにも戦いが下手とは知らなかったわい．」
+%E
+%Cp Val 00068
+#"You die now, little %s."
+「貴様はすぐにでも死ぬさ，可愛いそうな%sよ．」
+%E
+%Cp Val 00069
+#"Your body I destroy now, your soul when my hordes overrun Valhalla!"
+「貴様の体を破壊し，貴様の魂は我が軍がヴァルハラ宮殿を襲うときに
+  破壊するとしよう！」
+%E
+%Cc Val 00070
+#As you pick up %o, your mind is suddenly filled with images,
+#and you perceive all of the possibilities of each potential choice you
+#could make.  As you begin to control and channel your thoughts, you
+#realize that you must return %o to %lC immediately.
+%oを拾うと，あなたの心は突然イメージで満たされ，選択可能な全ての
+可能性を理解した．あなたの思いを制御し伝達しはじめると，あなたは
+%oを%lに直ちに返さなければならないことに気がついた．
+%E
+%Cc Val 00080
+#A look of surprise and horror appears on %ns face.
+#
+#    No!!!  %o has lied to me!  I have been misled!
+#
+#Suddenly, %n grasps his head and screams in agony, then dies.
+驚きと恐怖が%nの顔に現われた．
+
+     ばかな！%oは我が手中にあったはずだ．何故だ！！
+
+突然%nは顔を掴み，苦痛の声をあげ，死んだ．
+%E
+%Cc Val 00081
+#As you approach, %lC rises and touches %o.
+#
+#"You may take %o with you, %p.  I have removed from
+#it the power to foretell the future, for that power no mortal should
+#have.  Its other abilities, however, you have at your disposal.
+#
+#"You must now begin in %ds name to search for the Amulet of Yendor.
+#May your steps be guided by %d, my %S."
+あなたが近づくと，%lは立ちあがり，%oに触れた．
+
+「%pよ．%oを持っていきなさい．わたしは%oから
+  人間の手に触れてはならぬ未来を告げる力を取り除きました．
+  しかしながら%oの他の力は，あなたの思い通りに
+  してかまいません．
+
+「あなたは%dの名のもとイェンダーの魔除けを探さねばなりません．
+  あなたの進む道が%dの導きにより開かれますように．
+  わたしの%sよ．」
+%E
+%Cc Val 00082
+「気をつけなさい%p！%oが壊れてしまうわ．
+  そうなったら大きな痛手です．あなたは%oの守護者なのです．
+  魔除け探索を再開しなさい．魔法の入口の向こうで，
+  %Zがあなたを待っていますよ．
+%E
+%Cp Val 00090
+#"Greetings, %p.  I have not been able to pay as much attention to
+#your search for the Amulet as I have wished.  How do you fare?"
+「%p，ようこそ．私はあなたの魔除け探索についての助言を
+  述べることはできません．今の旅はどんな感じかしら？」
+%E
+%Cc Val 00091
+#"Excellent, %p.  I see you have recovered the Amulet!
+#
+#"You must take the Amulet to the Great Temple of %d, on the Astral
+#plane.  There you must offer the Amulet to %d.
+#
+#"Go now, my %S.  I cannot tell you your fate, as the power of the
+#Amulet interferes with mine.  I hope for your success."
+「まぁ，なんてことでしょう%p．あなたが魔除けを取り戻すのを
+  この目で見られるなんて！
+
+「あなたは魔除けを精霊界にある%dの偉大な寺院に持っていかねば
+  なりません．そこで%dに魔除けを捧げるのです．
+
+「さぁ，わたしの%S．私はあなたに運命を告げることはできま
+  せん．魔除けの力が邪魔をするのです．あなたの成功を祈っていますわ．」
+%E
+#
+#       Yeoman
+#
+%Cc Yeo 00001
+#The forbidding fortress that lay before you is a landmark of
+#one of the greatest cities in the world: %H.  For nearly six
+#centuries, the Tower has kept a solemn watch over the city.
+#
+#Yet something is wrong today.  The streets are abandoned and
+#overrun with vermin.  Ravens fly ominously overhead.  It is
+#your duty seek out %l and offer him any
+#assistance you can provide.
+あなたの目の前に並ぶ近寄りがたい砦は，世界最大の都市のひとつである
+この街の象徴ともいえる建物だ。６世紀近くに渡って，この塔はおごそかに
+街を護ってきた。
+
+しかし何かおかしい。通りは荒れ果て，害獣や害虫があちこちに群がって
+いる。凶兆を示すかのようにカラス達が頭上を飛んでいる。%lを探し出し，
+出来る限りの援助を申し出なければならない。
+%E
+%Cp Yeo 00002
+#You are once again in %H.
+あなたは再び%Hにたどり着いた．
+%E
+%Cp Yeo 00003
+#You have once more returned to %H.  This may be your last
+#chance to redeem your honour.
+あなたは再び%Hに戻ってきた．これは信用を取り戻せる最後の機会だろう。
+%E
+%Cp Yeo 00005
+#"Halt!  Who goes there?"
+「止まれ！どこに行かれるか？」
+%E
+%Cp Yeo 00006
+#"An escort for the Keys!"
+# #『London Bridge(is falling/broken down) (ロンドン橋落ちた)』に
+# #２番の歌詞が"Take the keys and lock her up, ..."という別バージョンがある模様
+# #  ["Build it up with wood and clay, ..."だけかと思ってたSakusha]
+「私は只今，鍵かけのエスコート中であります！」
+%E
+%Cp Yeo 00007
+#"Whose Keys does thou bring?"
+# #同上(^^;)[Sakusha]
+「そなたは誰の鍵を持たれているのか？」
+%E
+%Cp Yeo 00008
+#"God preserve Queen Elizabeth!"
+「神がエリザベス女王を護ってくださる！」
+%E
+%Cp Yeo 00009
+#"A Beefeater is more than a bottle of spirits!"
+# #Beefeater(yeoman of the guard[親衛隊]と同じ意味も持つ)という銘の
+# #spiritsがあるらしい[Sakusha]
+「ビーフィーターの志はスピリッツ以上であります！」
+%E
+%Cp Yeo 00010
+#"Halt!  Who goes there?"
+「止まれ！どこに行かれるか？」
+%E
+%Cp Yeo 00011
+#"An escort for the Keys!"
+「私は只今，鍵かけのエスコート中であります！」
+%E
+%Cp Yeo 00012
+#"Whose Keys does thou bring?"
+「そなたは誰の鍵を持たれているのか？」
+%E
+%Cp Yeo 00013
+#"God preserve Queen Elizabeth!"
+「神がエリザベス女王を護ってくださる！」
+%E
+%Cp Yeo 00014
+#"A Beefeater is more than a bottle of spirits!"
+「ビーフィーターの志はスピリッツ以上であります！」
+%E
+%Cc Yeo 00015
+#%lC turns to you with a troubled expression
+#on his face.
+#
+#"The Tower is in danger.  We are in need of loyal and gallant
+#subjects who can serve %d.  Are you prepared for what
+#lies ahead?"
+%lは悩みの表情を浮かべながら，あなたの方を向いた．
+
+「この塔は危機に瀕している．我々は%dのお役に立てる誠実で勇敢な
+  家臣を必要としているのだ．君は前に立ちふさがるものと対峙する
+  覚悟ができているか？」
+%E
+%Cp Yeo 00016
+#"I see you have returned, %p.  Are you now ready to fulfill
+#your duty to %d?"
+「戻ってきてくれると思っていたよ，%p．%dに対する君の義務を
+  果たす準備はできたかな？」
+%E
+%Cp Yeo 00017
+#"Time is growing short, %p.  Are you finally prepared to
+#serve %d?"
+「%pよ，もう時間が無い．%dに仕える為の最後の準備はできたのか？」
+%E
+%Cp Yeo 00018
+#"%pC, you disgrace the good name of %d.  I must now
+#seek another to serve in your place.  Leave %H in shame, and
+#never return!"
+「%pよ，君は偉大なる%dの名を汚した．私は君の後任を探さなければ
+  ならぬ．恥を知れ，二度とここには来るな！」
+%E
+%Cc Yeo 00019
+#"Alas, %p, you are but %ra.  Such a %c could not
+#succeed in bringing justice against %n.  Continue your
+#adventures and revisit me when you have attained the rank
+#of %R."
+「あぁ%pよ．お前は未だ%rだ．そのような%cでは
+  %nに対抗して正義をもたらす事はできぬだろう．
+  冒険を続け，%Rの位を得た後に，私のもとに戻るが良い．」
+%E
+%Cc Yeo 00020
+#"Woe, dear %p.  You have not yet proven your devotion
+#to %d.  Go forth in his service and return when you have
+#proven yourself %a."
+「おお，親愛なる%pよ．！君は未だ%dへの献身を
+  見いだせぬ様だな．%dに奉公し、自分自身の%aを
+  見いだした後に戻ってきたまえ．」
+%E
+%Cc Yeo 00021
+#"I see that you are a worthy %c, %p.
+#Perhaps you can aide us in our predicament..."
+#
+#"It was but a few moments ago that the Assistant Keeper
+#of the Crown Jewels, Talbot Edwards, was found dead.
+#It must have been a robbery, since the Crown Jewels are
+#missing, including %o.  They are
+#normally kept in Martin Tower, safe inside %i."
+#
+#"The Crown Jewels are the most sacred symbols of
+#%d.  It was a great loss when Cromwell and his
+#band of thugs desecrated the monarchy by selling the
+#Jewels during the Commonwealth period.  Fortunately, many
+#were reconstructed for the coronation of Charles II.  We
+#must never let such vandalism happen again!"
+#
+#"We suspect that the culprit is no other than %n.
+#He surely is deceitful enough to pull such a heist.  Do
+#you remember how he fought on both sides during the
+#Civil War against Parliament?  His plot to seize Dublin
+#Castle?  Or his attempt to kidnap the Lord High Steward?
+#There is quite a ransom already on that rogue's head!"
+#
+#"I have barely enough men to watch the outer ward, and I am
+#unable to call for more, since it appears that our warning
+#bell has also been stolen.  Would you help me by searching
+#%i?  Please bring back %o
+#and our warning bell when you find the Jewels."
+#
+「君は立派な%cだ，%pよ．
+  君ならおそらく我々を苦境から救えるだろう．
+
+  しばらく前に，宝冠類の番人であったタルボット・エドワーズが
+  死亡しているのが発見された．%oも含め宝冠類が
+  消えていたので，多分強盗の仕業だろう．それらは通常は，
+  安全な%iの中のイワツバメの塔に保管されていたのだが．
+
+  宝冠は%dの最も神聖なるシンボルだ．以前クロムウェルと
+  奴を取り巻くごろつき共が宝石を売り飛ばして君主制の神聖さを
+  汚した事があったが，あれは共和国の歴史における多大な損失だった．
+  幸運な事に，チャールズII世の戴冠式の折には失われた宝石も補完
+  されたがな．そのような蛮行を再び行わせる訳にはいかんのだ！」
+
+「我々は，下手人は%n以外にいないと考えている．
+  奴は紛れもなくそのような強盗を働ける詐欺的な奴だからな．君は
+  チャールズI世が議会と争っていた頃に，奴が双方の陣営でどういう活動を
+  したか覚えているか？奴のダブリン城奪取計画は？あるいは奴が企てた
+  ハイ・スチュワード卿誘拐計画は？奴は既にかなりの身代金を得ている！」
+
+「辛うじて外部の警備を固める事はできたが，警報を知らせるベルも
+  盗まれてしまった為にこれ以上の応援は望めぬのだ．
+  我々の%i捜索を手伝ってくれぬか？もしも宝石を
+  発見したら，%oとベルをここに持ち帰って欲しい．」
+
+#"Thank you, and Godspeed!"
+「ありがとう，成功を祈る！」
+%E
+%Cp Yeo 00025
+#"We must find %o soon!"
+「我々は早急に%oを発見しなければならない！」
+%E
+%Cp Yeo 00026
+#"Please bring back our bell, too!"
+「我々のベルも持ち帰ってきてくれ！」
+%E
+%Cp Yeo 00027
+#"Go forth and do justice!"
+「進め，そして正義を執行せよ！」
+%E
+%Cp Yeo 00028
+#"Go forth and stop the growth of iniquity!"
+「進め，そして不正の芽をつむのだ！」
+%E
+%Cp Yeo 00029
+#"Go forth and protect the holy church of %d!"
+「進め，そして%dの聖なる教会を守るのだ！」
+%E
+%Cp Yeo 00030
+#"Go forth to help and defend widows and orphans!"
+「進め，そして未亡人と孤児を助け，守るのだ！」
+%E
+%Cp Yeo 00031
+#"Go forth and restore the things that are gone to decay!"
+「進め，そして腐敗し失われたものを再生せよ！」
+%E
+%Cp Yeo 00032
+#"Go forth and maintain the things that are restored!"
+「進め，そして再生されたものを維持せよ！」
+%E
+%Cp Yeo 00033
+#"Go forth to punish and reform what is amiss!"
+「進め，そして不当を罰し，改善せよ！」
+%E
+%Cp Yeo 00034
+#"Go forth and confirm what is in good order!"
+「進め，そして良き秩序を堅固にせよ！」
+%E
+%Cc Yeo 00035
+#You stand in reverence as you catch a glimpse of the
+#courtyard before you.  This is %i of the
+#Tower of London, for centuries the home of kings and queens.
+#But since the overthrow of Charles I during the Civil War
+#and the subsequent return of Charles II, the fortress is
+#now mostly used as a treasury, museum, and political prison.
+#
+#The Crown Jewels must be here.  But where?
+目の前に故郷がちらりと見えたので，あなたは直立して敬礼した．ここは
+何世紀もの間王族の住まいであった，ロンドン塔の%iだ．
+しかし議会との争いにおけるチャールズI世の転覆劇の頃，及びチャールズII世の
+復帰後, この要塞は主に，宝物庫や博物館，そして政治犯の収容所として使われた．
+
+宝冠はここに有るはずだ．しかしどこに？
+%E
+%Cp Yeo 00036
+#Once again, you are in %i.  You know that the
+#Crown Jewels are here -- somewhere.
+再び，あなたは%iに入った．宝冠がある事は
+分かっている．ここの -- どこかに．
+%E
+%Cc Yeo 00040
+#This must be the Sword Room, home of the famous Knights of
+#the Bath.  Two of the honoured knights are soaking in the
+#tubs before you.  One of them turns to you to whisper
+#something:
+#
+#"There is a stranger in the banquet hall.  And he has
+#%o!"
+# #Bathに浸かったって事かい！(^^;)[Sakusha]
+ここはバス勲位をもつ有名な騎士の家の武器室に違いない．
+二人の尊敬すべき騎士達が既に浴槽（バス）に浸かっている．
+うち一人があなたの方に向き直って何かささやいた．
+
+「饗宴用ホールに不審者がいる，%oを持っているぞ！」
+%E
+%Cp Yeo 00041
+#You are certain that %o is here.
+あなたはここに%oが有ると確信している．
+%E
+%Cc Yeo 00050
+#"Greetings, friend.  Were you looking for %o?
+#I think I saw it in Bowyer Tower.  Now begone."
+#
+#"What, you are still here?  Then I will make with you as I
+#did with Talbot Edwards!"
+「ようこそ，友よ．%oをお探しですか？それなら
+  弓手の塔で見かけたように思いますよ．ここはお引取り下さい．」
+
+「おや，何故行かないのです？
+
+  なら，タルボット・エドワーズと同じ目にあわせてやる！」
+%E
+%Cp Yeo 00051
+#%nC points at you and shouts: "Stop, thief!"
+#But the tower inhabitants are not fooled by his diversion.
+%nはあなたを指差して叫んだ：「止まれ，泥棒め！」
+
+しかし塔の住人は彼の陽動になど騙されない．
+%E
+%Cp Yeo 00052
+#"You must have been sent by %l to recover %o.
+#I have no choice but to kill you."
+「貴様は%oを取り戻す為に%lに派遣されたに違いない．
+  私には貴様を殺す以外に道はない．」
+%E
+%Cp Yeo 00053
+#"How did you get %o?  It's mine, I say, mine!"
+「何故%oを奪おうとする？これは私の物だ，私の物なのだ！」
+%E
+%Cp Yeo 00060
+#"I shall sell %o for a handsome profit!"
+「私は立派な益を得る為に%oを売るのだ！」
+%E
+%Cp Yeo 00061
+#"Don't bother looking for %o.  It isn't here."
+「%oを探すなどという面倒な事はおやめ下さい．
+  そのような物はここにはございません．」
+%E
+%Cp Yeo 00062
+#"Stop hitting me.  Can't you see that I am just a poor priest?"
+「殴るのをおやめ下さい．私は単なる貧しい聖職者に過ぎませぬ．見えませんか？」
+%E
+%Cp Yeo 00063
+#"You'll never catch me alive!"
+「貴様は生きている限り私を捕まえられぬだろう！」
+%E
+%Cp Yeo 00064
+#"I saw someone with %o over there."
+「あそこで%oを持つ者を見かけましたよ．」
+%E
+%Cp Yeo 00065
+#"Did you see what I did to Talbot Edwards?"
+「私がタルボット・エドワーズに何をしたと？
+  あなたはその場を見ていたとでもいうのですか？」
+%E
+%Cp Yeo 00066
+#"My accomplices have already escaped."
+「私の仲間は既に逃亡したよ．」
+%E
+%Cp Yeo 00067
+#"I do not fear silly %c."
+「馬鹿な%cを恐れたりするものか．」
+%E
+%Cp Yeo 00068
+#"I am wanted dead or alive."
+「私に残された道は生か死か，だ．」
+%E
+%Cp Yeo 00069
+#"There is a reward on my head, but you will not live to receive it."
+「私の首には賞金がかけられているが，貴様はそれを受け取るまで生きていられぬ．」
+%E
+%Cc Yeo 00070
+#As you hold %o, you can %x why it is more than
+#a mere artifact.  Perhaps you should return it to %l.
+%oを手にした時，あなたはそれが
+単なるアーティファクトではないと%xた．
+おそらくあなたはそれを%lに返さなければならないだろう．
+%E
+%Cc Yeo 00080
+#As %n collapses to the floor, he issues a final retort.
+#
+#"I cannot believe that I have been apprehended by a mere
+#%r.  Go back to that cowardly %lt
+#and gloat of your victory."
+%nは床に倒れ伏した時，最後のさかねじを食わせてきた．
+
+「単なる%rに倒されたとは信じられぬ．臆病な%lのもとに
+  戻ったら，せいぜい貴様の勝利を吹聴することだな．」
+%E
+%Cc Yeo 00081
+#"You have found %o!  The monarchy is
+#once again secure."
+#
+#"Behold, %p, I have one more duty for you to fulfill:
+#finding the Amulet of Yendor, and sacrificing it in the name of
+#%d.  This is not an easy task, but until then I can
+#permit you to keep %o.  You may find
+#its powers useful."
+#
+#"Take our bell with you.  When blessed, it can open the
+#drawbridges of the Tower.  You may find other uses for it,
+#as well."
+#
+#"God preserve %d!"
+「%oを見つけてくれたか！
+  これで君主制も再び安泰だ．
+
+  よく聞くのだ，%p．私には君に果たすべきもう一つの義務がある．
+  イェンダーの魔除けを探し出し，%dの名のもとにそれを捧げるという
+  君の目的を完遂させる為にな．これは容易な任務ではないが，その任務の
+  間は%oをお前に預けておく事ができる。
+  その力が役立つ時もあるかもしれない．
+
+  我々のベルも持っていくがいい．祝福されていれば，それは塔の跳ね橋を
+  開ける事ができる。それに，他の使い方が見つかるかもしれぬしな．
+
+  神が%dを護ってくださる！」
+
+%E
+%Cc Yeo 00082
+#%l handles %o reverently for a moment, then looks at you.
+#
+#"You are its keeper now, and the time has come to resume your search
+#for the Amulet.  %Z await your return through the
+#magic portal which brought you here."
+%lは一旦%oをうやうやしく手に取った後，あなたに向き直った．
+
+「今は君が%oの番人だ．
+  魔除け探索を再開したまえ．魔法の入口の向こうで，
+  %Zが君を待っているぞ．」
+%E
+%Cp Yeo 00090
+#"Greetings, %p.  How is your quest for the Amulet of Yendor?"
+「ようこそ，%pよ．イェンダーの魔除けの探索はどんな調子だ？」
+%E
+%Cc Yeo 00091
+#"How admirable, %p!  You have recovered the Amulet of Yendor!"
+#
+#"With the Amulet, %d will build an empire more mighty than
+#the world will ever see.  Go quickly, return to the dungeon, and
+#climb upward until you meet the elemental planes.  Find the Astral
+#Plane, and sacrifice the Amulet on the high altar to %d."
+#
+#"Now, would you please return our bell and %o?"
+# #え？返すの？[Sakusha]
+「見事だ，%p！魔除けを取り戻してくれたか！
+
+  この魔除けがあれば，%dはかつてない強力な帝国を築き上げる事ができる
+  だろう．早く迷宮に戻り，精霊界にたどり着くまで上を目指せ．
+  天上界を探し出し，%dの中央祭壇に魔除けを捧げるのだ．
+
+  さて，我々のベルと%oを返してくれないか？」
+%E
+#
+#       Wizard
+#
+%Cc Wiz 00001
+#You are suddenly in familiar surroundings.  You notice what appears to
+#be a large, squat stone structure nearby.  Wait!  That looks like the
+#tower of your former teacher, %l.
+#
+#However, things are not the same as when you were last here.  Mists and
+#areas of unexplained darkness surround the tower.  There is movement in
+#the shadows.
+#
+#Your teacher would never allow such unaesthetic forms to surround the
+#tower...  unless something were dreadfully wrong!
+突然，あなたは見なれた景色の中に自分を見い出した．大きくてずんぐりした
+石づくりの建造物が，そばにあるのにあなたは気がついた．待てよ，それはあ
+なたの老師，%lの塔のようだ．
+
+だが，前回ここへ来た時と状況は変わってしまっている．霧と，名状しがたい
+暗黒とが塔を覆っている．闇の中に，動く影がある．
+
+あなたの師の美意識は，こんなものが塔を覆うことを決して許しはしないはず
+だ．．．．何かとてつもなく恐ろしいことが起こったとでもいうのでないかぎ
+り！
+%E
+%Cp Wiz 00002
+#Once again, you are back at %H.
+ふたたび，あなたは%Hに戻ってきた．
+%E
+%Cp Wiz 00003
+#You are back at %H.
+#You have an odd feeling this may be the last time you ever come here.
+あなたは%Hに戻ってきた．
+ここに来るのはこれで最後になるかもしれない，そんな奇妙な気がした．
+%E
+%Cp Wiz 00005
+#"Would you happen to have some eye of newt in that overstuffed pack, %s?"
+「%sよ，そのぱんぱんの荷物の中には，ひょっとしてイモリの目が
+  入っていたりはしないか？」
+%E
+%Cp Wiz 00006
+#"Ah, the spell to create the magic portal worked.  Outstanding!"
+「おお，魔法の入口を作る魔法が働いた．見よ！」
+%E
+%Cp Wiz 00007
+#"Hurry!  %lC may not survive that casting of the
+#portal spell!!"
+「急げ！魔法の入口を作る魔法を唱えたからには%lはもう長いこと
+  はないぞ！！」
+%E
+%Cp Wiz 00008
+#"The spells of %n were just too powerful for us to withstand."
+「%nの呪文は我々が抵抗するにはまったく強力でした．」
+%E
+%Cp Wiz 00009
+#"I, too, will venture into the world, because %n is but one of
+#many evils to be vanquished."
+「わたしも思い切って冒険に出よう．%nは，滅ぼすべき
+  魔物どものひとつにすぎんのだから．」
+%E
+%Cp Wiz 00010
+#"I have some eye of newt to trade, do you have a spare blind-worm's sting?"
+「私の持ってるイモリの目と交換できるような余った盲目虫の針は持ってないかい？」
+%E
+%Cp Wiz 00011
+#"The magic portal now seems like it will remain stable for quite some time."
+「今，魔法の入り口はまるで今までずっと安定していたかのように見えます．」
+%E
+%Cp Wiz 00012
+#"Have you noticed how much stronger %l is since %o was recovered?"
+「%oが戻されてから%lがどれほど強くなったか教えてくれるかい？」
+%E
+%Cp Wiz 00013
+#"Thank %d!  We weren't positive you would defeat %n."
+「%dに感謝を！おまえが%nを倒せるとは確信していなかった．」
+%E
+%Cp Wiz 00014
+#"I, too, will venture into the world, because %n was but one of
+#many evils to be vanquished."
+「わたしも思い切って冒険に出よう．%nは，滅ぼすべき
+  魔物どものひとつにすぎなかったのだから．」
+%E
+%Cc Wiz 00015
+#"Come closer, %p, for my voice falters in my old age.
+#Yes, I see that you have come a long way since you went out into the
+#world, leaving the safe confines of this tower.  However, I must first
+#determine if you have all of the skills required to take on the task
+#I require of you."
+「%pよ，もっと近くに来てくれ．わたしの声は年のせいで掠れてし
+  まったのでな．おまえが安全なこの塔の領域を去り，世に旅立ってからもう，
+  ずいぶんになる．やっと来てくれたのだな．だが，まずはじめに，おまえに
+  使命を果たすため充分な腕前があるのかどうか，試さねばならん．」
+%E
+%Cp Wiz 00016
+#"Well, %p, you have returned.  Perhaps you are now ready..."
+「%pよ，戻ってきてくれたのだな．準備は万端のことと思うが．．．」
+%E
+%Cp Wiz 00017
+#"This is getting tedious, %p, but perseverance is a sign of a true mage.
+#I certainly hope that you are truly ready this time!"
+「%pよ，待つのは退屈だ．しかし，忍耐こそは真の勇気の証なのだ．
+  今度こそはまさに準備を整えておろうな！」
+%E
+%Cc Wiz 00018
+#"You fool, %p!  Why did I waste all of those years teaching you
+#the esoteric arts?  Get out of here!  I shall find another."
+「%pよ，このうつけものめが！何故わたしはこの数年まるまる，
+  おまえに奥義を伝授するのに費やしてしまったというのだろう？出ていけ！
+  お前なんぞに期待はせん．」
+%E
+%Cc Wiz 00019
+#"Alas, %p, you have not yet shown your proficiency as a worthy
+#spellcaster.  As %ra, you would surely be overcome in the challenge
+#ahead.  Go, now, expand your horizons, and return when you have attained
+#renown as %Ra."
+「ああ，%pよ．おまえはまだ，まじない師にふさわしい熟練を
+  見せておらん．%raとしては，確かに試練に耐えてきたのであろう．さあ，
+  行け．もっと能力を高めよ．%Raとしての名声を勝ちとった時，
+  再び戻ってくるのだ．」
+%E
+%Cc Wiz 00020
+#"You amaze me, %p!  How many times did I tell you that the way of a mage
+#is an exacting one.  One must use the world with care, lest one leave it
+#in ruins and simplify the task of %n.
+#
+#"You must go back and show your worthiness.  Do not return until you are
+#truly ready for this quest.  May %d guide you in this task."
+「%pよ，おまえには驚いた．魔法使いの道は厳しいものだと，
+  何度言ったらわかるのだ．世界を扱うには注意をもってせよ．さもなくば，
+  世界は廃虚と化し，%nの仕事を楽にするだけだ．
+
+「戻って，自分がいかに価値ある者か，示すのだ．冒険の準備が本当に整うま
+  で，ここに戻ることは許さん．%dの導きのあらんことを．」
+%E
+%Cc Wiz 00021
+#"Yes, %p, you truly are ready for this dire task.  Listen,
+#carefully, for what I tell you now will be of vital importance.
+#
+#"Since you left us to hone your skills in the world, we unexpectedly came
+#under attack by the forces of %n.  As you know, we thought
+#%n had perished at the end of the last age, but, alas, this was
+#not the case.
+#
+#"%nC sent an army of abominations against us.  Among them was a
+#minion, mindless and ensorcelled, and thus, in the confusion, it was able
+#to penetrate our defenses.  Alas, this creature has stolen
+#%o and I fear it has delivered %o
+#to %n.
+#
+#"Over the years, I had woven most of my power into this amulet, and thus,
+#without it, I have but a shadow of my former power, and I fear that I
+#shall soon perish.
+#
+#"You must travel to %i, and within its dungeons,
+#find and overcome %n, and return %o to me.
+#
+#"Go now, with %d, and complete this quest before it is too late."
+「%pよ，このおそろしい仕事への準備はまさに整ったようだな．
+  よく聞け．これからわたしの言うことは，おまえにとってきわめて重要なこ
+  となのだ．
+
+「おまえが技を磨くため，我々を残し，世に出て行ってからというもの，我々
+  は%nの手により予期しない攻撃を食らっている．%nは
+  先の時代の終りに滅んだものと思っていた．しかし，ああ，それは間違いだ
+  ったのだ．
+
+「%nは忌まわしきものの大群を，我々のもとへよこした．そのなか
+  には理性のない魔術使いの手下がおり，混乱に乗じて我々の防衛線を突破す
+  ることができたのだ．ああ，そいつは%oを盗んでしまった．
+  そして%oを%nのもとへ届けてしまったのではないかとわた
+  しは恐れている．
+
+「長年の間，わたしは自分の力のほとんどを，この魔よけに注ぎ込んだ．その
+  せいでわたしは魔よけなしでは，力をほとんど発揮できない．そして，その
+  まま死んでしまうのではないかとわたしは恐れている．
+
+「おまえは%iへ行き，その迷路の中で%nを見つけ打ち倒し，
+  %oをわたしのもとへ奪い返してくるのだ．
+
+「%dとともに行け．そして手遅れになる前にこの使命を果たすのだ．」
+%E
+%Cp Wiz 00025
+#"Beware, for %n is immune to most magical attacks."
+「気をつけろ．%nを魔法で攻撃しても，大抵効かないぞ．」
+%E
+%Cp Wiz 00026
+#"To enter %i you must pass many traps."
+「%iに入るためには，罠をたくさんかわさねばならない．」
+%E
+%Cp Wiz 00027
+#"%nC may be vulnerable to physical attacks."
+「%nは，物理的攻撃には弱いということもありうる．」
+%E
+%Cp Wiz 00028
+#"%d will come to your aid when you call."
+「%dは，呼べば，あなたを助けに来てくれることだろう．」
+%E
+%Cp Wiz 00029
+#"You must utterly destroy %n.  He will pursue you otherwise."
+「%nは完全に殺してしまわねばならない．そうしないと，いつまでも
+  追いかけてくる．」
+%E
+%Cp Wiz 00030
+#"%oC is a mighty artifact.  With it you can
+#destroy %n."
+「%oCは強力な聖器だ．これを使えば，%nを殺すことができる．」
+%E
+%Cp Wiz 00031
+#"Go forth with the blessings of %d."
+「%dの祝福とともに進め．」
+%E
+%Cp Wiz 00032
+#"I will have my %gP watch for your return."
+「わたしの%gPに，あなたの帰還を待たせるとしよう．」
+%E
+%Cp Wiz 00033
+#"Feel free to take any items in that chest that might aid you."
+「この箱の中のもので，役立つものがあれば何でも持っていくがよい．」
+%E
+%Cp Wiz 00034
+#"You will know when %o is near.  Proceed with care!"
+「%oが近付いてくると，それを感じるだろう．注意深く進め！」
+%E
+%Cp Wiz 00035
+#Wisps of fog swirl nearby.  You feel that %ns lair is close.
+近くで煙が一筋，渦を巻いている．あなたは%nの隠れ家が
+近付いたのを感じた．
+%E
+%Cp Wiz 00036
+#You believe that you may once again invade %i.
+あなたは，自分が再び，%iに侵入することになるかもしれないことを
+確信した．
+%E
+%Cp Wiz 00040
+#You feel your mentor's presence; perhaps %o is nearby.
+あなたは師の存在を感じた．%oが近いのだろう．
+%E
+%Cp Wiz 00041
+#The aura of %o tingles at the edge of your perception.
+%oのオーラのせいで，あなたの知覚のへりがひりひりした．
+%E
+%Cc Wiz 00050
+#"Ah, I recognize you, %p.  So, %l has sent you to steal
+#%o from me, hmmm?  Well, %l is a
+#fool to send such a mental weakling against me.
+#
+#"Your destruction, however, should make for good sport.  In the end, you
+#shall beg me to kill you!"
+「おお，%p，君か．つまり，%lはわたしから%oを
+  盗み出すために君を送り込んだってわけだね？こんなうすら馬鹿をわたしに
+  差し向けるとは，%lもヤキがまわったもんだねぇ．」
+
+「まっ，君をやっつけるのも，いい運動になるだろう．しまいには，自分から
+  殺してくれってわたしに懇願させてあげようじゃないか！」
+%E
+%Cc Wiz 00051
+#"How nice of you to return, %p!  I enjoyed our last meeting.  Are you
+#still hungry for more pain?
+#
+#"Come!  Your soul, like %o, shall soon be mine to
+#command."
+「%pよ，よくぞ戻ってきた．このまえはとても楽しかったよ．
+  痛い思いにまだまだ飢えてるってわけかい？」
+
+「かかってこい！すぐに君の魂を，%oと同じく，わたしの思うまま
+  にしてあげようじゃないか．」
+%E
+%Cp Wiz 00052
+#"I'm sure that your perseverance shall be the subject of innumerable
+#ballads, but you shall not be around to hear them, I fear!"
+「おまえの忍耐力は，無数の物語の語るところとなることだろう．だが，わた
+  しが恐れるのは，おまえがそれを聞くことはついぞないのではないかという
+  ことだ！」
+%E
+%Cp Wiz 00053
+#"Thief!  %o belongs to me, now.  I shall feed
+#your living flesh to my minions."
+「泥棒！%oは今やわたしのものだ．おまえの肉を，わたしの手下ども
+  にくれてやるぞ．」
+%E
+%Cp Wiz 00060
+#"Your puny powers are no match for me, fool!"
+「馬鹿ものめ，そんなひよわなことでわたしにかなうと思ったか！」
+%E
+%Cp Wiz 00061
+#"When you are defeated, your torment will last for a thousand years."
+「君の死の苦しみは1000年ものあいだ続くことになろう．」
+%E
+%Cp Wiz 00062
+#"After your downfall, %p, I shall devour %l
+#for dessert!"
+「%pよ，君を斃したあとは，デザートに%lを滅ぼして
+  やろうじゃないか！」
+%E
+%Cp Wiz 00063
+#"Are you ready yet to beg for mercy?  I could be lenient..."
+「もう慈悲を乞う準備はできたかい？わたしが寛大であったらよかったかもな．．．」
+%E
+%Cp Wiz 00064
+#"Your soul shall join the enslaved multitude I command!"
+「君の魂を，わたしの命に従うやつらに加えてやろうじゃないか！」
+%E
+%Cp Wiz 00065
+#"Your lack of will is evident, and you shall die as a result."
+「君に気力がないことは目に見えているんだ．それが命とりになるんだよ．」
+%E
+%Cp Wiz 00066
+#"Your faith in %d is for naught!  Come, submit to me now!"
+「君の%dへの信心は無駄だ！さあ，もはや，わたしに従うのだ！」
+%E
+%Cp Wiz 00067
+#"A mere %r is nothing compared to my skill!"
+「%rなど，わたしの技に比べればものの数ではない！」
+%E
+%Cp Wiz 00068
+#"So, you are the best hope of %l?  How droll."
+「ほう，君は%lの最大の希望であるってわけかね？こりゃあ，傑作だ．」
+%E
+%Cp Wiz 00069
+#"Feel my power, %c!  My victory is imminent!"
+「%cよ，わたしの力を感じるのだ！わたしの勝利は目に見えてるじゃないか！」
+%E
+%Cc Wiz 00070
+#As you touch %o, its comforting power infuses you
+#with new energy.  You feel as if you can detect others' thoughts flowing
+#through it.  Although you yearn to wear %o
+#and attack the Wizard of Yendor, you know you must return it to its
+#rightful owner, %l.
+%oに触れると，その心地よい力はおまえに新たなる力を注いで
+くれる．おまえはそれから流れ出てくる他の者の思考を理解できるような気が
+することだろう．おまえは%oをまとってイェンダーの魔法使い
+を攻撃することを切に願うであろうが，おまえはその正当なる所有者，
+%lのもとへ自分が戻らねばならぬのだ．
+%E
+%Cc Wiz 00080
+#%nC croaks out, as his body begins to shrivel up:
+#
+#    I shall haunt your progress until the end of time.  A thousand
+#    curses on you and %l.
+#
+#Then, the body bursts into a cloud of choking dust, and blows away.
+%nが叫ぶと，その体はみるみるうちにしぼみはじめた．
+
+    おまえの行く先々，時の終りまでたたってやる．
+    おまえと%lに千の呪いのあらんことを．
+
+すると，その体は爆発して息のつまりそうな煙に変わり，流れて消えた．
+%E
+%Cc Wiz 00081
+#%lC notices %o in your possession,
+#beams at you and says:
+#
+#    I knew you could defeat %n and retrieve
+#    %o.  We shall never forget this
+#    brave service.
+#
+#    Take %o with you in your quest for
+#    the Amulet of Yendor.  I can sense that it has attuned
+#    itself to you already.
+#
+#    May %d guide you in your quest, and keep you from harm.
+%lはあなたが%oを持っていることに気がつき，
+あなたを見て言った．
+
+    どうやら，%nをたおして%oをとりかえす
+    ことができたようだな．わたしはこの勇気ある行ないを決して忘れはしま
+    いぞ．
+
+    イェンダーの魔除けを求めに，%oを携えて行くがよい．
+    すでにおまえに同調しているのがわたしにはわかるのだ．
+
+    %dがおまえの旅を導き，危険より守らんことを．
+%E
+%Cc Wiz 00082
+「今や，おまえは%oの守護者だ．
+  ＊他の＊魔除け探索を再開せよ．魔法の入口の向こうで，
+  %Zがおまえを待っているぞ．
+%E
+%Cc Wiz 00090
+#"Come near, my %S, and share your adventures with me.  So, have you
+#succeeded in your quest for the Amulet of Yendor?"
+「わが%Sよ，もっと近くに来て，冒険を共にしてくれ．イェンダー
+  の魔よけはもう，手に入れたかね？」
+%E
+%Cc Wiz 00091
+#"Congratulations, %p.  I always knew that if anyone could succeed
+#in defeating the Wizard of Yendor and his minions, it would be you.
+#
+#"Go now, and take the Amulet to the astral plane.  Once there, present
+#the Amulet on the altar of %d.  Along the way you shall pass through the
+#four elemental planes.  These planes are like nothing you have ever
+#experienced before, so be prepared!
+#
+#"For this you were born, %s!  I am very proud of you."
+「%pよ，おめでとう．イェンダーの魔法使いとその一味をたおすこと
+  ができるものがいるとすれば，おまえであろうことはわたしにはいつもわかっ
+  ていたよ．
+
+「その魔除けを持ち，精霊界に行くのだ．昔，その魔除けは%dの祭壇にあったの
+  だ．その途中，おまえは４つの界面を通過することになろう．今までの経験に
+  ない場所だ，覚悟を決めておくのだぞ！
+
+「%sよ，おまえはこのために生まれてきたのだ．おまえをわたしはとても
+  ほこらしく思うぞ．」
+%E
+#
+#       General
+#
+%Cc - 00001
+#It is written in the Book of %d:
+#
+#    After the Creation, the cruel god Moloch rebelled
+#    against the authority of Marduk the Creator.
+#    Moloch stole from Marduk the most powerful of all
+#    the artifacts of the gods, the Amulet of Yendor,
+#    and he hid it in the dark cavities of Gehennom, the
+#    Under World, where he now lurks, and bides his time.
+#
+#Your %G %d seeks to possess the Amulet, and with it
+#to gain deserved ascendance over the other gods.
+#
+#You, a newly trained %r, have been heralded
+#from birth as the instrument of %d.  You are destined
+#to recover the Amulet for your deity, or die in the
+#attempt.  Your hour of destiny has come.  For the sake
+#of us all:  Go bravely with %d!
+これは，%dの書に述べられているものである．
+
+   天地創造の後，破壊神モーロック，創造主マルドゥークと違いして
+   反乱す．破壊神モーロック，マルドゥークの聖器のなかより，万物
+   の力の源「イェンダーの魔除け」を盗みだし，それを彼の潜む
+   世界の底，ゲヘナの闇の洞窟に隠し，時を待てり．
+
+%G%dは「魔除け」を望み，他の神々に対し
+絶対的優勢を得ようとしている．
+
+あなたは現在，まだ%rではあるが，生まれたときから%d
+の下僕と予言されている．%Gのため，イェンダーの魔除けを発見
+するか，そのために死ぬかが運命づけらている．あなたの運命の時
+は来た！我々のために，%dの加護のあらんことを！
+%E
+%Cp - 00002
+#You receive a faint telepathic message from %l:
+#Your help is urgently needed at %H!
+#Look for a ...ic transporter.
+#You couldn't quite make out that last message.
+あなたは，%lから微かなテレパシーメッセージを受けとった：
+%Hで助けを火急に必要としている．
+魔..の..口を探す．．．．．
+あなたは最後のメッセージを完全に受けとれなかった．
+%E
+%Cp - 00003
+#You again sense %l pleading for help.
+あなたは，また%lが助けを求めているのを感じた．
+%E
+%Cp - 00004
+#You again sense %l demanding your attendance.
+あなたは，また%lがあなたを求めているのを感じた．
+%E
+# Completed the quest by returning with artifact, but not carrying
+# the Bell of Opening; quest leader lets you know that it is needed.
+#[ Should this be role-specific so that each leader has variant text? ]
+%Cp - 00005
+#"The silver bell which was hoarded by %n will be
+#essential in locating the Amulet of Yendor."
+「%nの所持していた銀のベル．それは，イェンダーの魔除けを探し出すのに
+必要不可欠である．」
+%E
+#
+#       Angelic maledictions.
+#
+%Cp - 00010
+#"Repent, and thou shalt be saved!"
+「悔いあらためよ，されば汝救われん！」
+%E
+%Cp - 00011
+#"Thou shalt pay for thine insolence!"
+「汝，己の働きし傲慢の報いを受けるべし！」
+%E
+%Cp - 00012
+#"Very soon, my child, thou shalt meet thy maker."
+「我が子よ，汝は己の作りたもう者にあいま見えることになろう．」
+%E
+%Cp - 00013
+#"The great %D has sent me to make you pay for your sins!"
+「偉大なる%Dが汝の罪の償いのため我を使わせん．」
+%E
+%Cp - 00014
+#"The wrath of %D is now upon you!"
+「そなたは%Dの怒りに触れた！」
+%E
+%Cp - 00015
+#"Thy life belongs to %D now!"
+「汝の生命，いまや%Dの掌の上なり！」
+%E
+%Cp - 00016
+#"Dost thou wish to receive thy final blessing?"
+「汝最後の祝福を受けることを所望するか？」
+%E
+%Cp - 00017
+#"Thou art but a godless void."
+「汝，神をも信じぬ異端者以外の何者でもない．」
+%E
+%Cp - 00018
+#"Thou art not worthy to seek the Amulet."
+「汝，魔除けを探し求めるに値せず！」
+%E
+%Cp - 00019
+#"No one expects the Spanish Inquisition!"
+「異端審問を受けることを予想する者など誰もいない！」
+%E
+#
+#       Demonic maledictions.
+#
+%Cp - 00030
+#"I first mistook thee for a statue, when I regarded thy head of stone."
+「お前の石頭を見て，お前を石像と間違えたわい．」
+%E
+%Cp - 00031
+#"Come here often?"
+「ここへはよく来るのか？」
+%E
+%Cp - 00032
+#"Doth pain excite thee?  Wouldst thou prefer the whip?"
+「お前は苦痛に興奮を感じるか？鞭のほうがよいかな？」
+%E
+%Cp - 00033
+#"Thinkest thou it shall tickle as I rip out thy lungs?"
+「お前のはらわたを引き裂いたら楽しいと思うか？」
+%E
+%Cp - 00034
+#"Eat slime and die!"
+「スライムでも喰らって死ねい！」
+%E
+%Cp - 00035
+#"Go ahead, fetch thy mama!  I shall wait."
+「失せろ！お前のママでも呼んできな！それまで待ってやる．」
+%E
+%Cp - 00036
+#"Go play leapfrog with a herd of unicorns!"
+「ユニコーンの群れと馬飛びでもして遊んでな！」
+%E
+%Cp - 00037
+#"Hast thou been drinking, or art thou always so clumsy?"
+「お前は酔っぱらいか？それともそれが実力か？」
+%E
+%Cp - 00038
+#"This time I shall let thee off with a spanking, but let it not happen again."
+「今回は尻叩きだけで許そう．しかし二度目はそうはいかぬ.」
+%E
+%Cp - 00039
+#"I've met smarter (and prettier) acid blobs."
+「お前よりずっと賢い(かつ綺麗な)酸のブロブを見たことがあるぞ．」
+%E
+%Cp - 00040
+#"Look!  Thy bootlace is undone!"
+「見ろ！靴紐がほどけてるぞ！」
+%E
+%Cp - 00041
+#"Mercy!  Dost thou wish me to die of laughter?"
+「わはは，やめてくれ！お前は私を笑い殺すつもりか？」
+%E
+%Cp - 00042
+#"Run away!  Live to flee another day!"
+「逃げ失せろ！一日でも長く生き続けるがよい！」
+%E
+%Cp - 00043
+#"Thou hadst best fight better than thou canst dress!"
+「お前は着こなすより戦うほうがうまいな！」
+%E
+%Cp - 00044
+#"Twixt thy cousin and thee, Medusa is the prettier."
+「お前とお前の従兄弟より，メデューサの方がかわいいぞ．」
+%E
+%Cp - 00045
+#"Methinks thou wert unnaturally interested in yon corpse back there,
+# eh, varlet?"
+「見る限りでは，向こうにある己の屍に無関心なようだが，
+  実際はどうなのだ？こわっぱ」
+%E
+%Cp - 00046
+#"Up thy nose with a rubber hose!"
+「鼻にゴムホースでも突っこんでろ！」
+%E
+%Cp - 00047
+#"Verily, thy corpse could not smell worse!"
+「はっきりいって，そちの屍の匂いは最悪だ！」
+%E
+%Cp - 00048
+#"Wait!  I shall polymorph into a grid bug to give thee a fighting chance!"
+「おっと！グリッドバグにでも変化して戦いを楽にしてやろうか！」
+%E
+%Cp - 00049
+#"Why search for the Amulet?  Thou wouldst but lose it, cretin."
+「何故魔除けを探索する？お前のようなうつけではなくすだけだ．」
+%E
+#
+#       Banishment message (for converted hero)
+#
+%Cc - 00060
+#"You have betrayed all those who hold allegiance to %d, as you once did.
+#My allegiance to %d holds fast and I cannot condone or accept what you 
+#have done.
+#
+#Leave this place.  You shall never set foot at %H again.
+#That which you seek is now lost forever, for without the Bell of Opening, 
+#you will never be able to enter the place where he who has the Amulet 
+#resides.
+#
+#Go now!  You are banished from this place.
+「お前は%dを信ずる人々全てを裏切った．
+%dへの忠誠をもってすれば、お前の行いを見逃したり許したりすることはできない．
+
+この場を去れ．二度と%Hに足を踏み入れることはならぬ．
+お前の捜し求めていたものは今となっては永遠に失われた．
+開放のベルなしでは，魔除けを持つ者のいる地に入ることは出来ぬ．
+
+さあ行け！お前はこの地から追放されたのだ．」
+%E
+#
+#	Gypsy fortunes
+#	Thanks to Mike Gribble <mgribb@ihug.co.nz> for submissions.
+#
+%Cc - 00100
+#Ace of Swords.
+剣のエース．
+%E
+%Cc - 00101
+#2 of Swords, Peace.
+剣の2，平和．
+%E
+%Cc - 00102
+#3 of Swords, Sorrow.
+#
+#Your relationships will be shaky.
+剣の3，悲しみ．
+
+あなたの想い人が病の床に伏すでしょう．
+%E
+%Cc - 00103
+#4 of Swords, Truce.
+剣の4，真実．
+%E
+%Cc - 00104
+#5 of Swords, Defeat.
+剣の5，打倒．
+%E
+%Cc - 00105
+#6 of Swords, Science.
+#
+#Your intellect will aid you soon.
+剣の6，技術．
+
+あなたの理知があなた自身を助けるでしょう．
+%E
+%Cc - 00106
+#7 of Swords, Futility.
+#
+#You should stop trying to bend fate.
+剣の7，無益．
+
+運命をねじ曲げるようとするのはやめた方がいいわ．
+%E
+%Cc - 00107
+#8 of Swords, Interference.
+剣の8，干渉．
+%E
+%Cc - 00108
+#9 of Swords, Cruelty.
+#
+#The cards are stacked against you.
+剣の9，残酷．
+
+あなた，カードに嫌われているわね．
+%E
+%Cc - 00109
+#10 of Swords, Ruin.
+#
+#When the full moon rises terrible things will happen to you.
+剣の10，破滅．
+
+満月が昇る時，あなたに災難がふりかかるでしょう．
+%E
+%Cc - 00110
+#Jack of Swords.
+剣のジャック．
+%E
+%Cc - 00111
+#Queen of Swords.
+剣のクィーン．
+%E
+%Cc - 00112
+#King of Swords.
+剣のキング．
+%E
+%Cc - 00113
+#Ace of Wands.
+杖のエース．
+%E
+%Cc - 00114
+#2 of Wands, Dominion.
+#
+#You must not let evil overcome you.
+杖の2，支配．
+
+邪悪なものに負けては駄目よ．
+%E
+%Cc - 00115
+#3 of Wands, Virtue.
+#
+#Keep active or woe will overcome you.
+杖の3，純潔．
+
+活力を保つ事ね．でないと災難に呑込まれるわ．
+%E
+%Cc - 00116
+#4 of Wands, Completion.
+#
+#You should stick to your path.
+杖の4，成就．
+
+自分の道をふみ外さないようにね．
+%E
+%Cc - 00117
+#5 of Wands, Strife.
+#
+#When Mars is out, it will be a time of bloodshed for you.
+杖の5，不和．
+
+火星が沈む時が，あなたにとっての流血の時になるでしょうね．
+%E
+%Cc - 00118
+#6 of Wands, Victory.
+#
+#If you stick to your path, great things will happen to you.
+杖の6，勝利．
+
+自分の道を進めば，あなたにとって重要な事が起こるでしょうね．
+%E
+%Cc - 00119
+#7 of Wands, Valour.
+#
+#Your strength will be put to the test in coming times.
+杖の7，勇気．
+
+あなたの力が試される時が来るわ．
+%E
+%Cc - 00120
+#8 of Wands, Swiftness.
+#
+#You will have to be fast in coming times.
+杖の8，俊敏．
+
+この次の時まであなたは素早くなければいけないわ．
+%E
+%Cc - 00121
+#9 of Wands, Adjustment.
+#
+#Beware, it will not be a safe time for you next full moon.
+杖の9，調和．
+
+注意する事ね．次の満月まであなたは安全ではなくなるでしょうから．
+%E
+%Cc - 00122
+#10 of Wands, Oppression.
+杖の10，抑圧．
+%E
+%Cc - 00123
+#Jack of Wands.
+杖のジャック．
+%E
+%Cc - 00124
+#Queen of Wands.
+杖のクィーン．
+%E
+%Cc - 00125
+#King of Wands.
+杖のキング．
+%E
+%Cc - 00126
+#Ace of Shields.
+盾のエース．
+%E
+%Cc - 00127
+#2 of Shields, Love.
+#
+#You should work on your relationships.
+盾の2，愛．
+
+想い人の為に尽くすべきね．
+%E
+%Cc - 00128
+#3 of Shields, Abundance.
+盾の3，富裕．
+%E
+%Cc - 00129
+#4 of Shields, Luxury.
+盾の4，贅沢．
+%E
+%Cc - 00130
+#5 of Shields, Disappointment.
+#
+#Disappointment waits for you round the corner...
+盾の5，失望．
+
+そこの角で失望があなたを待ちうけているわ．．．
+%E
+%Cc - 00131
+#6 of Shields, Pleasure.
+#
+#The full moon is the time for you to develop relationships.
+盾の6，満足．
+
+満月の時が，あなたと想い人との結びつきが深まる時よ．
+%E
+%Cc - 00132
+#7 of Shields, Debauch.
+#
+#You will meet someone tall, dark, and handsome.
+盾の7，堕落．
+
+あなたは，背が高く浅黒く美しい者に出会うでしょう．
+%E
+%Cc - 00133
+#8 of Shields, Indolence.
+#
+#Your god will be short tempered during the new moon.
+盾の8，怠惰．
+
+あなたの神は，新月中は少し機嫌が悪くなるでしょう．
+%E
+%Cc - 00134
+#9 of Shields, Happiness.
+#
+#Your dreams will come true.
+盾の9，幸福．
+
+あなたの夢がかなうでしょう．
+%E
+%Cc - 00135
+#10 of Shields, Satiety.
+盾の10，厭倦．
+%E
+%Cc - 00136
+#Jack of Shields.
+盾のジャック．
+%E
+%Cc - 00137
+#Queen of Shields.
+盾のクィーン．
+%E
+%Cc - 00138
+#King of Shields.
+盾のキング．
+%E
+%Cc - 00139
+#Ace of Rings.
+指輪のエース．
+%E
+%Cc - 00140
+#2 of Rings, Change.
+#
+#Your powers will be put to the test soon...
+指輪の2，変化．
+
+もうすぐ，あなたの力が試される時が来るでしょう．．．
+%E
+%Cc - 00141
+#3 of Rings, Works.
+#
+#You will meet new challenges.
+指輪の3，労働．
+
+あなたは新たな挑戦に出会うでしょう．
+%E
+%Cc - 00142
+#4 of Rings, Power.
+#
+#Your strength will aid you greatly in times to come.
+指輪の4，力．
+
+来たる時に，あなたの力があなたを大いに助けてくれるでしょう．
+%E
+%Cc - 00143
+#5 of Rings, Worry.
+#
+#Your worst nightmares will come true.
+指輪の5，心配．
+
+あなたにとっての最悪な悪夢が現実のものとなるでしょう．
+%E
+%Cc - 00144
+#6 of Rings, Success.
+指輪の6，成功．
+%E
+%Cc - 00145
+#7 of Rings, Failure.
+#
+#You have had many close shaves with death, you will have more...
+指輪の7，失敗．
+
+あなたは九死に一生を得た事が数多くあるでしょうが，この先更に．．．
+%E
+%Cc - 00146
+#8 of Rings, Prudence.
+#
+#Next full moon is an excellent time to try to please your god.
+指輪の8，賢明．
+
+次の満月の時は，神に願うにはすばらしい時になるわ．
+%E
+%Cc - 00147
+#9 of Rings, Gain.
+#
+#Your wishes will come true.
+指輪の9，利益．
+
+あなたの願いは現実のものとなるでしょう．
+%E
+%Cc - 00148
+#10 of Rings, Wealth.
+指輪の10，富．
+%E
+%Cc - 00149
+#Jack of Rings.
+指輪のジャック．
+%E
+%Cc - 00150
+#Queen of Rings.
+指輪のクィーン．
+%E
+%Cc - 00151
+#King of Rings.
+指輪のキング．
+%E
+
+#
+#       TEST PATTERN
+#
+%Cc - 00099
+ %p:	return(plname);
+ %c:	return(pl_character);
+ %r:	return((char *)rank_of(u.ulevel));
+ %R:	return((char *)rank_of(MIN_QUEST_LEVEL));
+ %s:	return((flags.female) ? "sister" : "brother" );
+ %S:	return((flags.female) ? "daughter" : "son" );
+ %l:	return((char *)ldrname());
+ %i:	return(intermed());
+ %o:	return(artiname());
+ %n:	return((char *)neminame());
+ %g:	return((char *)guardname());
+ %G:	return((char *)align_gtitle(u.ualignbase[1]));
+ %H:	return((char *)homebase());
+ %a:	return(Alignnam(u.ualignbase[1]));
+ %A:	return(Alignnam(u.ualign.type));
+ %d:	return((char *)align_gname(u.ualignbase[1]));
+ %D:	return((char *)align_gname(A_LAWFUL));
+ %C:	return("chaotic");
+ %N:	return("neutral");
+ %L:	return("lawful");
+ %x:	return((Blind) ? "sense" : "see");
+ %Z:	return("The Dungeons of Doom");
+ %%:	return(percent_sign);
+ a suffix:	return an(root);
+ A suffix:	return An(root);
+ C suffix:	return capitalized(root);
+ p suffix:	return makeplural(root);
+ P suffix:	return makeplural(capitalized(root));
+ s suffix:	return s_suffix(root);
+ S suffix:	return s_suffix(capitalized(root));
+ t suffix:	return strip_the_prefix(root);
+%E
diff -aurN slashem-0.0.7E6F2/dat/jrumors.fal jslashem-0.0.7E6F2-J0.0.8/dat/jrumors.fal
--- slashem-0.0.7E6F2/dat/jrumors.fal	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jrumors.fal	2004-08-25 12:48:23.765625000 +0900
@@ -0,0 +1,408 @@
+「俺が死んだら最初に天国で見るのはスコアのリストかな？」
+ハッキングの第一法則：  出るのは入るのより難しい．
+ハッキングの第二法則：  ファーストイン，ファーストアウト．
+ハッキングの第三法則：  最後の一撃が一番痛い．
+ハッキングの第四法則：  入口は出口である．
+バベルフィッシュがあなたにレオクロッタを理解させる．
+メイルデーモンに化けたカメレオンがたまに炎の巻物を持ってくる．
+コカトリスの死体は腐ることがないことが保証されている！
+コカトリスの死体とはトカゲの死体のことである．
+ドラゴンとは炎の巻物を食べた蛇のことである．
+暗い回廊は洞察力を高める．
+輝く薬は熱すぎて飲むことができない．
+ある種の魔除けは番兵の攻撃を防ぐことができる．
+トカゲの死体は不死の生き物を土に還す効果がある．
+ロングワームは再帰的に定義されている．一体どうやって攻撃すりゃいいんだい？
+怪物の心境はまさにおもちゃのロボットだ．
+ニンフは彼女の本当の名前(ローレライ)で呼ばれるととても喜ぶ．
+ダンジョンマスターを制御する指輪があるらしい．
+薬指を増やす指輪は魔法をかけない限り使えない．
+紐を迷宮の入口に結んで置くと迷子にならない．
+杖は床にしばらく置いていると使用可能量が増える．
+動物園を見学することはいろんな動物に会え教育上非常によろしい．
+空耳の杖は羊飼いの杖より危険な武器である．
+振動の杖は洞窟を完全に潰してしまうだろう．
+勝者は決して途中でやめたりしない．途中でやめたものは勝者ではない．
+願い？よし，占いクッキーを作るがよい．
+ミミックが恐い？真実の指輪を身につけるのだ．
+全ての怪物は邪悪に作られているが，ある種の怪物はさらに邪悪である．
+さまよう目は背後から攻撃するよう心がけよ．
+エルフのクロークを身につけてるとセンスがよいと言われる．
+ときどき小さな物体が大きな物体の下に隠れていることがある．
+考古学者は骨を発見する確率が高い．
+オースティン・パワーズは言った: オレのアレが帰ってきた！
+バルログは地下20階より上では出てこない．
+バナナの皮は警備員に対して特に効果的である．
+バナナを食べるときは注意せよ．怪物が皮で滑るかもしれない．
+迷宮はとっと抜けたほうがよい．さもなければ大怪我をする．
+小さな種族に気をつけろ！
+ニトログリセリンの薬には気をつけよ．心筋梗塞の薬じゃないぞ．
+気をつけろ！杖を使うときにはいつでも爆発の危険が伴う．
+地下23階を越えれば自分の部屋で楽隠居できる．
+剣を落さずに着替える？御冗談を！
+扉を閉めろ！熱が逃げるじゃないか！
+コカトリスは鏡に写った自分の顔を見ると石になってしまう．
+迷宮では飲食物の持ち込みを禁止している．
+暗い部屋では写真を現像できるらしい．
+暗い部屋は「完全」に暗いのではない．目が暗闇に慣れるまで待ってみよ．．．
+デビットロンドン曰く：「冒険者よ！トカゲの死体をコカトリスに対して武器とせよ！」
+デスは炎に包まれたとき人生の教訓を教えてくれる．
+半神は神の助けは不要だ．
+魔神は僧侶や尼僧を憎んでいる．
+支払いを忘れてないかい？
+ママに拾い喰いをしちゃいけないように言われてないかい？
+絶対的に面している敵に絶対命中するよう絶対的にやれ！絶対に正しい絶対方向だ．
+何？お金が欲しい？ローディオス砦番兵組合があなたの期待にお答えします．
+あなたが今何をしているかボスは知ってるかい？
+何かを願うのにためらってはならない．次の階で手に入るだろうけどね．
+食べすぎは体によくない．しゃっくりが始まるぞ！
+仕事中にネットハックで遊んではならない．ボスに怒られるぞ！
+秘密の扉を見つけても他言してはならない．そんなをことしたら秘密じゃなくなる．
+20歳未満の未成年が酔っぱらいの薬を飲んだら牢屋行きになる．
+うぬぼれを捨て，宝石を処分せよ！スリがうろついているんだぞ！
+にんにくを10株ほど食べると，2マス四方ほど人間を遠ざけることができる．
+巨大ウナギが泥の底に隠れている．ユニコーンの角で水を清め，見えるようにせよ．
+エルフは一段と速い．
+願いの杖であなたの望むものを床に刻め！
+最終的に魅力的な素早く逃げたニンフを称賛することになろう．
+シューっという音を聞いたことがあるか？お前が聞いたことないのを知ってるけど．
+ドラゴンの死体を持ち上げたことがあるかい？
+レオクロッタが天狗の舞いを踊っているのを見たことがあるかい？
+武器がラシャ状に輝いたのを見たことがあるかい？
+店主を手なずけたことがあるかい？
+倉庫の番兵に穴を開けようとしたことがあるかい？
+紐を強化したことがあるかい？
+さまよう目はアロハシャツの前には立たない．
+診察はとっても痛い．
+巨大こうもりは巨大吸血鬼に変身する．
+障害物記念日には障害物競争をせよ．
+今晩が半月だ．少なくとも新月よりはましなはずだ．
+お願い助けて！あたしは占いクッキー工場の牢屋に閉じ込められているわ．
+家猫は9つの命を持っている．子猫はたった1つだ．
+どのくらい水を踏んでいられる？
+ハラヘリ？下の階には沢山食料があるぞ．
+イェンダーの魔除けを持っているとメイルデーモンを攻撃できないだろう．
+店主だったら，自由に物を持ち出せるぞ．
+うまく質問すれば、魔法使いはあなたに魔除けを渡してくれるだろう．
+上手くいく方法が判らないなら，上手くいかない方法を楽しめばよい．
+魔法使いが邪悪だと思うのなら，将軍に会ってみるとよい．
+目が見えなくなっても，ペットの犬が盲導犬になることを期待してはいけない．
+とてもいい気持になりたかったら，巨大なものを食べないといけない．
+体を浮かせたかったら，さまよう目を食べるのがよい．
+もし自分の幽霊に殺されたなら，スコアが増加する．
+霊力を高める方法：自分の幽霊を手なずけよ．
+偉大なる人間を見つけるために前進せよ．
+森の内部の怪物を見つけることは簡単だ．
+落し扉の下には別の落し扉がある．落ち続けよ！
+侍の刀はとても鋭い．自分自身を切らないように注意せよ．
+心を無にする方法：無色の薬を飲むのだ．
+端末を蹴ったところで怪物は傷つかない．
+殺人蜂はその女王を殺すまで現われつづける．
+殺人ウサギはにんじんでのみ手なずけられる．
+最新のニュースが知りたい？ fj.rec.games.roguelike を .newsrcに書くのだ！
+綴りを覚えたい？ ネットハックを遊ぶのだ！
+レプラコーンは秘密の部屋にゴールドを隠している．
+歩くために指を yulkjhnb のキーの上に置こう．
+現実を直視しよう：今回君は勝利を得ることができない．
+宴会をしよう，酔っぱらいの薬を飲もう！
+酒屋は決して酒を飲まない；彼らは二度訪れられるのを嫌う．
+今晩は月食だ．やめたほうがいいんじゃないかい？
+自分の幽霊に会うとかなりの運を失う．
+投資するための金？魔法のメモリー倉庫の支店から取ってくるがよい．
+怪物はあらゆるところで君を打ちまかそうと，どこからともなくやって来る．
+怪物は君が穴掘りしている間は眠っているが，決して疲れているからではない．
+ほとんどの怪物はひき肉を好む．これが君を攻撃する理由だ．
+ネットハックのほとんどのバグは床の上にいる．
+から騒ぎが発生．
+マルチプレイヤーネットハックってのは神話だ．
+ネットハックは中毒性がある．君はもう手遅れだ．
+店主に品物の値段一覧を尋ねてはいけない．
++5シャベルでひっぱたかれたのでない限り，木を燃やしてはいけない．
+手が輝いているときに食事をしてはならない．
+ナズグルを殺さないでください − サウロンがひどい敗北をこうむるでしょう．
+怪物に攻撃されても気にするな：そいつらは掃除婦のかわりだから．
+ユニコーンで馬とびをしてはならない．
+呪われた落書を踏んではならない．
+カメラを持ったまま泳いではならない：被写体なんてないんだから．
+錆の怪物を誘い出すようにペットを教育してはならない．
+魔法のフィールド内でのランダムジェネレータを信用してはならない．
+死の杖を使ってはならない．
+どの階にも店は二軒ない．迷宮には階がない．だから．．．．
+復帰可能なようにされているこのシステムだが運命のどんな一部分も再生できない．
+全ての噂がこの文章のように騙そうとしているわけではない．
+ニンフと看護婦は綺麗な指輪を好む．
+ニンフはブロンドだ．君は神士かな？
+ユニコーンに無価値のガラスをあげることは致命的な間違いであろう！
+年寄ハッカーは死ぬことがない．若いやつはよく死ぬ．
+聖燭節の日には，何度も同じゲームを行うべきです、そしての上に．．．
+一つのゲームはすべてを統べ，一つのゲームはすべてを見つけ，一つのゲームは全てを捕らえ．．．
+閉店前に店を去らねばならない．
+ホムンクルスは一日中医者に近付かないようにしている．
+ちょうど今，もう一階下りたところで誰かが殺されそうになっている．
+魔法使いのみが魔法の笛を使うことができる．
+邪悪な属性の冒険者のみが飼い犬を殺すことを考えるそうだ．
+混沌に属する邪悪な者のみが眠っている怪物を殺すそうだ．
+本当のトラッパーのみが罠から抜けだせる．
+真の魔法使いのみが巻物を書くとができる．
+『過剰殺戮』作戦がいま始まった．
+うげ．それはやだなあ．
+さきほどのウワサは無視してください．
+エティンに変化せよ．敵と顔と顔と顔で向きあえる．
+祈りは魔神を恐れさせる．
+♪ゆったりとしたカロン[Charon(4x)]の流れに沿ってのボート遊び[Row(3x)]．死とは単なる夢だ．
+ランニングは足によい．
+勇気を奮い起せ！そうすりゃ日常生活でも勇気を奮い起せる．
+巻物が熱い？そりゃ熱いんじゃなくてしけってるのさ．
+水漏れ？漏れ穴のあるパイプ？湿度が上昇？配管工を召喚せよ．
+Segmentation fault (core dumped).
+店主はCroesus自身によって保証されている！
+店主はときどき老齢のため死ぬ．
+マニュアルによるといくつかの迷路(とくに小さいもの)には抜けられないものがある．
+スフィンクスが出す問題には答えのないものもある．
+『無』が答えのときもある．
+残念でした．今回占いは入ってません！次回のクッキーに期待しましょう．
+食料を作る巻物はそれが必要になるまで使わないようにしておけ．
+ストームブリンガーが魂を盗むのではない．民衆が魂を盗むのだ．
+突然，迷宮が崩れた．．．
+メイルデーモンを手なずけることはシステムセキュリティ違反である．
+がつがつむしゃむしゃトラアル獣はあなたの生命に興味があるように見える．
+聴衆はとても頑固だから，つっこみ役は迷宮でつっこまないほうがいいらしいぞぉ．
+レプラコーンは小さな隠し部屋に宝を隠している．
+長いほど杖はよい．
+魔法の言葉「XYZZY」
+従順はあなたのbone fileを継承する．
+炭坑は暗く深い．私は，寝る前に行けるレベルにしている．
+ダイナマイトを迷宮で使うのは危険だ．
+ＵＮＩＸバージョンにはワームはいない．
+この階には罠がある．
+アスモデウス，オーケス，イーノグ，ジョウビレックスは法律事務所じゃないそうだ．
+ゲーリュオーンには危険な双子がいるそうだ．気をつけろ！
+メデューサは恐しいペットを生み出すそうだ．
+ネットハックのバグはシェルダンが計画したものだそうだ．
+ネットハックには256個の風味があるそうだ．
+ネットハックは単なるコンピューターゲームだそうだ．
+ネットハックは単なるコンピューターゲーム以上のものがあるそうだ．
+ネットハックの存在意義などないそうだ．
+子供のドラゴンは小さすぎて，攻撃などできないそうだ．
+黒プリンは単に茶色プリンが腐ったものだそうだ．
+黒羊からは100%ウールの鞄を3つ作れるそうだ．
+白紙の巻物は白紙の小切手のようなものだそうだ．
+モリスという名の猫は9つの生命を持っているそうだ．
+無鉄砲な買い物客は店の中で湯水のごとく金を使うそうだ．
+ダイヤモンドの犬は誰にとっても最大の友だそうだ．
+ドワーフの貴族は着ている鎧が軽いので，つるはしを持てるそうだ．
+さまよう目はメデューサを打ち負かすそうだ．
+占いは一行しかないので，行間を読むことはできないそうだ．
+占いは一行しかないが，行間を読むことはできるそうだ．
+泉は普通の燃える間欠泉のようには見えないそうだ．
+黄金の鳥は同じ重さの金より価値があるそうだ．
+グリッドバグは店の中であなたをピリっとさせ店主に金を払わないそうだ．
+ジプシーは金額次第であなたの未来を告げてくれるそうだ．
+その昔，アリスという名のハッカーは鏡でテレポートしたことがあるそうだ．
+その昔，ダビデという名のハッカーはスリングと岩で巨人を笑い殺したそうだ．
+その昔，ドロシーという名のハッカーはオズの国へ行く雲に乗ったことがあるそうだ．
+その昔，メアリーという名のハッカーは迷路の中で白羊を失ったそうだ．
+知性の兜は軽々しく手に入れられないそうだ．
+ホットドッグとヘルハウンドは同じものだそうだ．
+アラジンのランプという名のランプには3つの願いをかなえてくれるジンがいるそうだ．
+ラッシーという名の犬はあなたを魔除けへと導いてくれるそうだ．
+長剣は軽い剣ではないそうだ．
+亡霊とは生気を抜きとる恐しいものだそうだ．
+心とは生気を抜きとる恐しいものだそうだ．
+普通のニンフは針金の指輪を片方の耳にしているそうだ．
+桃の帽子は，かつてとさかのある兜のために使われていたそうだ．
+オイルの薬を掴むのは難しいそうだ．
+ヨーグルトの薬は病気の薬への特効薬だそうだ．
+紫ワームは紫ドラゴンの子供ではないそうだ．
+震えるブロッブの味はゼラチンキューブとはまた違ったものだそうだ．
+ストームブリンガーと名づけられた神秘的な幅広の剣は渦をひきよせるそうだ．
+召喚の巻物は他の名前でも呼ばれるそうだ．
+呪術師は祝福を贈ることがでるが，普通はしないそうだ．
+呪術師にイモリの目とこうもりの羽をあげると祝福してくれるそうだ．
+輝く金の盾は磨かれた銀の盾とは違うそうだ．
+槍はネオ・チューに命中するそうだ．(意味わかる？)
+斑点のあるドラゴンは究極の形態変化だそうだ．
+聴診器は自分の鼓動を聞くだけなら無用の長物だそうだ．
+スージィという名のサキュバスはときどき危険を教えてくれるそうだ．
+無力化の杖は変化の杖ではないらしい．
+ピノキオという名の木のゴーレムは簡単に制御できるそうだ．
+ドラゴンを殺したあとは舞台の背景を変更する時間だそうだ．
+絞殺の魔除けは襟のカラーの輪よりたちが悪いそうだ．
+屋根裏はおもちゃを隠すのには絶好の場所だそうだ．
+クリーバーと名づけられた斧はビーバーという名のハッカーがかつて持っていたそうだ．
+いもりの目とこうもりの羽はトラブルの危険が２倍になるそうだ．
+イズィーという名のインキュバスはときどき女性をヒステリックにさせるそうだ．
+華やかな玉座の部屋はめったにあなたが望んだ場所にないそうだ．
+不幸なハッカーはその昔祭壇で鼻血を流し死んだそうだ．
+というそうだが決してそうだとは言われていないそうだ．
+ときどき量子場では速度が失なわれるそうだ．
+ユニコーンの角を使うということは理解できかねる行為だそうだ．
+考古学者はよくbone fileの山を見つけるそうだ．
+青い岩は放射線を発っしているそうだ．気をつけろ．
+迷宮を建設するのは共同作業だったそうだ．
+混沌の職業は祭壇の蹴りを喰らうことがないそうだ．
+化学の知識は適切な設備なしでは役に立たないそうだ．
+迷宮の崩解はしばしばパニックを引き起すそうだ．
+孵化する前に卵の数を数えておくことはあなたの心配症を示すものだそうだ．
+手品の鞄を泉の水で濡らしてもアイスボックスにはならないそうだ．
+ウナギと茶色モールドをお湯で煮るとブイヤベースというフランス料理になるそうだ．
+ 1ドブロン寄進するのは極めて敬虔な慈善行為だそうだ．
+冒険家はダークチョコレートを好む．
+ロイヤルゼリーを食べると灰色アウルベアが誘い寄せられるそうだ．
+卵とパンケーキとジュースは単なるありきたりの朝食だそうだ．
+誰もが何故メデューサが暗闇に一人で立っているのか知っているそうだ．
+みんなrec.games.hackという名前は変えてほしいと思っているそうだ．
+勝利のための戦略を発見するには気長にやるしかないそうだ．
+無価値のガラスを見つけることは価値あることだそうだ．
+占いクッキーは思索の食べ物だそうだ．
+ゴールドを消費するペットはドラゴンだけだそうだ．
+果報は寝て待てばいいそうだ．
+油を塗った物は怪物の手から滑り落るそうだ．
+もし私が億万長者ならあなたに猿を買ってやるべきなんだそうだ．
+読み書きができないなら，魔法の本を貰えるように願うといいそうだ．
+剣の世界に生きるなら，剣によって死ぬと言われている．
+怪物の真似をしたいなら，いいゲームに出あったと言えよう．
+悪魔といっしょに眠ったならば，頭痛ともに目が覚めるであろう．
+割れ目を踏んでしまったら母親のかばんを壊してしまうそうだ．
+姿が見えなくなっても音はするそうだ．
+幸運の持ち主でも巻物のルーン文字を感じとることができるそうだ．
+巨大な絵の中では金なんてほんの小銭だそうだ．
+迷宮では知識なんて大した問題じゃないそうだ．
+迷宮では月の石が真のデリジウムの結晶だそうだ．
+迷宮ではがさつな客に権利はないそうだ．
+迷宮では時刻を教えてくれる時計は不要だそうだ．
+迷宮では何か古いもの，新しいもの，穴の開いたもの，青いものが必要だそうだ．
+迷宮では常に祝福の数を数えなければならないそうだ．
+鉄のゴーレムの鋼鉄の鎧は望んでもらうほど価値あるものではないそうだ．
+一本の杖を作るには4本の六尺棒が必要だそうだ．
+太った女性が歌うまで終わらないそうだ．
+太った女性が「首をちょん切っておしまい！」と叫ぶまで終わらないそうだ．
+重い像を蹴るというのは無駄な行為だそうだ．
+貴重な宝石を蹴るというのは無意味な行為と思われるだろう．
+レプラコーンはラテン語を知っている，あなたも学ぶべきだ．
+ミノタウロスは迷宮の外で迷子になっている．
+ほとんどのトロルは復活する．
+ガーフィールドと名づけられた猫はあなたをより魅力的にするそうだ．
+迷宮内のあらゆる物に関するあらゆることを知っている者はいないそうだ．
+単なる楽しみでネットハックをプレイできる者などいないそうだ．
+fj.rec.games.roguelikeを講読しているものなど実際にはいないそうだ．
+誰も噂を流すことを許してないそうだ．
+看護婦はときどきメスを持っているが決して使わないそうだ．
+魔法使いは一人見たら三十人いるそうだ．
+一匹のトロールは10,000のイモリの価値があるそうだ．
+デビットだけが動物園を見つけられるそうだ．
+天使だけがペットのためにハープを演奏できるそうだ．
+浪費家だけが金を持ち運べるそうだ．
+雌のモンスターだけが卵を産めるそうだ．
+オークの呪術師は健康的で裕福で賢いそうだ．
+ネットハックで遊ぶということは死の罠の上を歩いているようなものだそうだ．
+呼吸困難には適当な食事制限が一番だそうだ．
+浮遊の薬をたくさん飲むと頭痛になるそうだ．
+女王蜂はロイヤルゼリーを食べることによりできるそうだ．
+怪物を怯えさせる巻物を読むことはElberethと喋ること同じだそうだ．
+真のハッカーは常に制御されているそうだ．
+真のハッカーは眠らないそうだ．
+店主はクロイソス自身によって傷つけられるそうだ．
+店主は夜中には20ゴールド以上を持ち歩かないそうだ．
+店主は祝福された透明の薬を絶体売らないそうだ．
+兵士は子供手袋に，まぬけヘルメットを装備しているそうだ．
+何人かの警官は賄賂を期待しているそうだ．
+番兵の手に脂を塗ることができるそうだ．
+ドラムの演奏を止めさせるため，靴にキスする怪物がいるそうだ．
+ホルンを演奏すると，政党の殺し屋になれるそうだ．
+ネットハックの神々は一般的に献上物を歓迎するそうだ．
+ヴィルヤ，ネンヤ，ナルヤと名づけられた3つの指環が存在するそうだ．
+大魔法使いイェンダーは死の望みをもっているそうだ．
+犬の髪の毛はときには効果的な治療薬となるそうだ．
+ゲームをセーブするのは今だ！手遅れになるまえに．．．
+ネットハック最大の障害は，あなたの心だそうだ．
+神があなたに物をぶつけるときは激怒しているそうだ．
+神は僧職にあるものがおきにいりだそうだ．
+ユニコーンを幸福にさせるには，望むものを渡せばよいそうだ．
+白や黒の石はなく灰色しかないそうだ．
+骸骨は存在しない．故に骸骨の鍵もない．
+全てハッカーの中には死にかけたとき脱出してしまう賢い盗賊がいるそうだ．
+タダのアドバイスのようなものはないそうだ．
+ネットハックの勝利者になる道は1つしかないそうだ．
+かつて，楽能という恐怖のサムライがいたそうだ．
+呪われた聖なる水は水でないときがあるそうだ．
+こぼれた灰色ウーズは盆に戻らないそうだ．
+パンドラの箱を開けてしまったら，希望しかのこってないそうだ．
+扉の罠にはいつも「罠に注意！」と記されているそうだ．
+性転換の魔除けを使うのはそんなに難しいことではないそうだ．
+水上歩行の靴はヘルメスのように早く歩きたいときに便利だそうだ．
+丸い魔除けを身に付けるとトロルに見えるそうだ．
+腹が減ったときはピザを注文できる．30歩以内にこないとタダだそうだ．
+神が怒っているときは，他の神に頼るべきだそうだ．
+ユニコーンの角を装備すると強くなれるそうだ．
+速さの靴を履くと，ひき逃げの心配がないそうだ．
+殺人蜂はユニコーンの角で倒せるそうだ．
+ステュクス川はカロンの舟でのみ渡れるそうだ．
+リッチは一度だけ殺せるので，慎重にやる必要があるそうだ．
+既に持っているものしか願えないそうだ．
+親切に話しかけることによって，猫を訓練できるそうだ．
+毅然として話しかけることによって，犬を訓練できるそうだ．
+金は王の名によって信頼できるそうだ．
+脂ぎった手を白紙の巻物でふきとれないそうだ．
+噂の巻物は信用できないそうだ．
+エネルギーの渦で天地がひっくり返るそうだ．
+鍵のかかった扉を開けるには鍵が必要だそうだ．
+アンティークショップでミミックを見わけるには鏡が必要だそうだ．
+つるはしは使いたいときには使えないそうだ．
+いつでも地下室に道具をしまっておくべきだそうだ．
+成功への階段を上っている間は注意するべきだそうだ．
+鎧に「錆びない」と名付けるとよいそうだ．
+クールなペットを持ちたければ，犬にスパッズと名前をつけるとよいそうだ．
+最初の怪物を倒したあとに武器に名前をつけるべきだそうだ．
+あなたはUSENETユーザにフレーム攻撃をかけてはいけないそうだ．彼らは火への耐性を持っている．
+紐のゴーレムをサキュバスに導いてはいけないそうだ．
+見えない指輪の亡霊の側で寝てはいけないそうだ．
+宝石鞄を持ってダンジョンを抜けてはいけないそうだ．
+玉座に座る前に鎧を脱ぐべきだそうだ．
+あなたが自分の飼い犬を殺すと神は怒るそうだ．
+占いクッキーはコピープロテクトされている．
+占いクッキーは有限会社 Fortune Cookiesが版権を握っている．
+このバージョンの10%は再生資源で作られています．
+時はサキュバスがカレンダーを2000年1月1日に変えるまで待っているそうだ．
+疲れた？充填の巻き物を自分自身に使え！
+より高い次の評価を得るには，あと3ポイント必要だ．
+天国に行くには，浮遊の指輪を身につけてダンジョンを抜けだすといいそうだ．
+シャツを着た観光客は死人を起すのに十分やかましい．
+トライデントは水の中で使うべきだ．
+あなたの刀をMoulinetteと呼んでみよ．
+色は匂えど，散りぬるお和歌．
+うげ！肉は色が塗られている！
+不幸にも，メッセージは故意に空白のままだ．
+夕方にモーニングスターを使うと効果がない．
+色は匂えど，散りぬるお和歌．
+ヒントが欲しい？透明の杖を武器に振りかけるのだ！
+急いで昇天したい？ナントカ学園がよい．
+募集：アルバイト．地下35階の魔法使いイェンダーに手紙を届ける仕事．
+警告：未来を読むことはあなたの健康に害を与えます．
+裏切りのための新らしい道を発見した．
+濡れたタオルは強力な武器となるぞ！
+なんてことだ！あなたは読むことができない．
+おかしくなる可能性があるなら、おかしくなる．
+頭の上にトゲが落ちてきら，天井に攻撃を加えたくなるだろう．
+迷宮では右の壁をつたっていくと，迷子にならないはずだ．
+鍵を持っているなら，番兵を待つ必要がない．
+なぜこんなもの読んでるだ？時間の無駄じゃないか．
+マスターキーを望むがよい．魔法のメモリー倉庫が開くはずだ．
+魔法使いは全ての怪物が任務をはたすことを期待している．
+ワォ！フルーツジュースをどうぞ！
+まだ，他の，くだらない，ルーマー(またくる)がある．
+あなたは占いにより間違って導かれる運命だ．
+次のことをすれば本物のイェンダーの魔除けを手に入れることができる：  --More--
+徹底的に沸騰させることで聖水を作ることができる．
+徹底的に沸騰させることで聖水を作ることができる．
+次のことをして，黒ドラゴンの攻撃を防ぐのだ：  --More--
+蛇を追い抜くことはできない．
+あなたは占いクッキーを喉に詰まらせた．  --More--
+誰かが足をひっぱているような気がした．
+スフィンクスを出し抜くか，金を払わねばならない．
+占いクッキーがシーッという音を聞いた．
+手紙を売ることによりリッチになれる．しかし，不幸の手紙には気をつけろ．
+シャイフルドに血なまぐさくない鞘のないクリスナイフをささげよ．
+おみくじを飲みこんでしまった！
+より強くなりたい？2レベル先にゲストハウスがある！
+背が高く，暗く，身の毛もよだつ生き物に会うであろう．
diff -aurN slashem-0.0.7E6F2/dat/jrumors.tru jslashem-0.0.7E6F2-J0.0.8/dat/jrumors.tru
--- slashem-0.0.7E6F2/dat/jrumors.tru	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jrumors.tru	2004-08-15 19:06:32.000000000 +0900
@@ -0,0 +1,376 @@
+テレパシー能力があるなら目隠しが役に立つ．
+7本のろうそくを差した燭台は魔法の光で道を示す．
+水晶の鎧が錆びることはない．
+刀はワームを真二つにすることもある．
+命を救うのは身体を作る者ではありません．
+魔法の嘔吐ポンプがグルメには役立つこともあるだろう．
+ニンフは鎖の外し方を知っている．
+盲目の薬は見えないものを見えるようにする．
+僧侶は簡単に神に願いを聞いてもらうことができる．
+たとえ処女の尼僧でも，ユニコーンは気にとめない．
+部屋に看護婦がいるのなら，争いの指輪は悪しき品となる．
+小剣は長剣ほど良くはない．
+サキュバスはニンフよりも更にすごいことをする．
+古の冒険者の亡霊を除霊する杖がある．
+酸のブロッブは素手で攻撃すべきだ．
+ニンフとの情事はしばしば高くつく．
+ニンフが恐いって？飾りの指輪を身につけろ．
+大切な物を盗まれたくないって？もっとがらくたを持ってな！
+月の満ち欠けには気をつけろ！
+重要なメッセージを刻む前にはいつも床を掃除しろ．
+イェンダーの魔除けを作り出すことは困難だ．たとえ願いの杖をもってしても．
+アークリッチは最悪のリッチではないらしい．．．
+エルフのクロークは魔法から身を守ってくれる．
+アンバーハルクは混乱させる視線を持っている．
+クロムが我が証人であるかぎり，私は二度と飢えることはない！
+怪物について尋ねることは，非常に有益なことだろう．
+ロングワームは背後から攻撃しろ -- 非常に安全だ！
+何もないところのウナギを攻撃するのは致命的な間違いだ！
+怪我に包帯を巻くと姿が見えてしまう．
+弓で怪物を殴るのはそれほど良い考えではない．
+注意しろ！魔法使いが待ち伏せているぞ！
+看護婦には親切に．武器をはずして服を脱ぎなさい．
+消化されるのは非常に遅いプロセスだ．
+白紙の巻物はもっと面白い読み物になる．
+目が見えない？さまよう目を捕まえな！
+本屋は決して巻物を読まない．ただ運び去るだけだ．
+簡明な征服．制御，混乱，懇願，非難
+エネルギーを大切に，灯りを消しましょう．
+墓をほりおこすのはいい考えとは言えないことがある…
+ディリジウムの結晶は本当に珍しい．
+犬は乾し肉の匂いに引き寄せられる．
+犬は迷信深い．決して呪われた品を踏もうとしない．
+幽霊の飼い犬は怒っているのではない．単に空腹なのだ．
+お金について悩むな：興味を持つのはレプラコーンと店主だけ．
+トイレを壊すな！あなたもいつ必要になるか判らない．
+忘れるな！大きな犬は小さい犬よりずっと殺しにくい．
+店主にちょっかいを出すのはやめろ．さもなくばギルドがお前を付け狙う．
+ドラゴンは決して子供を鞭打たない．どうせ感じないのだから．
+にんじんを食べなさい．目にいい．
+凍った球体を食べるのは，イエティを食べるようなものだ．
+殺人蜂を食べるのは，サソリを食べるようなものだ．
+天狗を食べるのは，ニンフを食べるようなものだ．
+レイスを食べるのは価値のある経験だ！
+未払いのレプラコーンを食べると得になることもある．
+このあたりではエルベレスは絶大な人気がある．
+エルフの死体は睡魔と両立しない．時には神々さえも．
+エルフのクロークは錆びない．
+邪悪なプレイヤーにさえ守護天使がいる．
+魔法をかけた歯で戦ってみたかい？
+恐怖の杖について聞いたことがあるかい？あれにはびっくりさせられるね！
+混乱している時に巻物を読んでみたか？
+トロルを大きな箱に入れてみたか？
+薬に何かを浸す人がいるのはどうしてか不思議に思ったことはないか？
+高価なカメラは突き刺すようなフラッシュライトを持っている．
+階段が多ければ行き先も多い．
+火の文字は怪物を思い止まらせるかもしれない．
+快適に過ごすためには『Elbereth』と刻め．
+宝石は無造作に投げ捨てるにはあまりにも貴重だ．
+腹が減った？指輪をするのをやめるんだな！
+暑すぎる？ イェンダーの魔除けを外して出口から離れろ！
+神は聖職者には多くを期待している．
+神は半神を軽蔑している．
+モンタグの野郎は鞄に巻物を入れている．
+薬瓶は注意して扱うように -- 幽霊が中にいるかもしれない．
+聖水にはたくさんの使い途がある．
+馬は乗り手を信頼する．たとえそれほど信頼するに値しない乗り手でも．
+飢餓は犬にとって混乱させるような経験だ！
+かつて急いで食べすぎて窒息死したハッカーを知っている．
+曲がりくねった小さな通路の迷路の匂いがする．
+願いの杖を願わねばよかっのたにと願う．(願望的思考．)
+巨人とキャッチボールをするとはお勧めできんな．
+見張っているぞ -- イェンダーの魔法使い
+アイスボックスは食料を新鮮に保つ．
+罰せられているなら，その罰は強力無比な武器となる．
+大魔法使いを殺したのなら，半神への道が開かれる．
+穴を掘る杖が欲しければ，ミノタウロスにお願いすることだ．
+攻撃を命中させたいのなら，短剣を使いなさい．
+店で盗みを働きたいなら，犬を訓練することだ．
+道に迷ったのなら，次から店で地図を買うようにすることだ．
+店の中では，買いものをする前に値札を見た方がいい．
+店の中で杖を使うのは行儀の悪いことだ．
+真夜中に墓場を訪れるのは危険だ．
+笛を吹いて犬を呼ぶのは良い考えであるとは限らない．
+大魔法使いはいくらかの助けを雇ったと噂されている．
+"status"を"statue"にするのはeではなくcである．
+ユニコーンにルビーを差し出すのは良い考えだろう．
+あなたの犬が石になるのは異様に悲しい．
+鎧は錆びないようにしておけ．
+武器を酸に近付けるな．
+自分と同じ属性のユニコーンを殺すと運が悪くなる．
+皮には防水性がある．牛が傘をさしているのを見たことがあるかい？
+レプラコーンはこの迷宮で最も腕のいいスリだ．
+トカゲの死体はコカトリスから守ってくれる．
+金を失うのはささいな損失，名誉を失うのは大きな損失，勇気を失うのは何もかも終わり．
+大抵の怪物は泳げない．
+音楽には頑固な跳ね橋に作用する魔力がある．
+音楽には残忍な獣をなだめる魔力がある．
+決して番兵を攻撃するな．
+ロングワームには決して乗るな．
+呪いの言葉を刻むのに決して最上の武器を使ってはいけない．
+重い荷物を抱えて戦うのは容易ではない．
+看護婦は裸の人間に触るように慣れている．害は加えない．
+ニンフは鎖かたびら以上のものでも奪い去ることができる．
+そのうち仔犬は大きな犬になり，あなたはそれを誇りにすることだろう．
+缶詰を開けるのは難しい．特に素手の時は．
+オークと殺人蜂は生活様式を同じにしている．
+オークは暗い部屋では子をなすことはできない．
+不器量なニンフは害がない．
+AD&Dをプレイするのは役に立つかもしれない．
+ガントレットをプレイするのはある状況では啓発的だ．
+ビリヤードをプレイするのは店の中で役に立つ．
+店主を変化させるとより安全になるかもしれない．
+あなたの犬を変化させると多分より安全だ．
+薬は普通は混ざらない．だが時々...
+しーっ！ 鏡のしわざだ！
+瞬間移動の指輪を身に付けよ．猛攻撃から運び去ってくれる．
+光線はブーメランではない．もちろん．だがしかし...
+洞窟に入る前に説明書を読め -- さもなくば殺されるであろう．
+ハーバートを読むことは，あるケースで啓発的だ．
+トールキンを読むことは助けになるだろう．
+酔っぱらって巻物を読むことは，混乱した結果をもたらすだろう．
+錆の怪物は水を好む．だがしかし，奴等が嫌う薬もある．
+鞄は中身を華氏452まで守ることができる．
+巻物の文字が薄れた？ 熱のせいじゃなく，濡れたせいだ．
+店主はクレジットカードもうけつける．ただし，現金で支払うかぎり．
+店主は1マイル向こうの観光客でもアロハシャツによって見分けることができる．
+店主は一卵性双生児を見分けることができない．
+店主は泳げない．
+店主は字を読めない．店の中に刻むことに意味はあるか？
+店主は信じられないほど忍耐強い．
+店主は観光客には値段をふっかけることもある．
+店主は復讐より金に価値をおく．
+トイレに座ることは緊急の助け！
+飼いならすことができる怪物もいる．ドラゴンをならしたハッカーに会ったこともある．
+かつて誰かが言ったことには，<を登ったものは>を降りてくるかもしれない．
+誰かが落し穴にトゲを仕掛けていたぞ！
+時に怪物はあなたを攻撃しないで互いに戦うこともある．
+ほうれん草，にんじん，ゼリー -- 看護婦に相応しい食事！
+腐った肉は毒よりも体に悪い！
+遠視は単なるコツだ．一度やり方を知れば，簡単なこと．
+レプラコーン信用金庫は魔法のメモリー倉庫の一部門ではない．
+イェンダーの魔法使いにとって，死はちょっとした経験でしかない．
+最高の装備は，もちろん最も高くつく．
+神はやっかいな聖職者を評価しない．
+魔法のマーカは剣より強し．
+月はこのゲームに影響する唯一の天体ではない．
+オークはエルフリストという名の幅広の剣を振りまわした．あなたは死んだ...
+何も起こらない杖の秘密．もう一度試してみろ！
+鏡には常に神秘的な何かがあった．
+迷宮の奥深くにはマスターマインドがある．
+動物園には莫大な宝が隠されている．
+目に見えるよりも更なる魔法がこの洞窟にある．
+大きな犬を褒めても害はない．
+ミミックを食べるのに似たことはない．
+昔，ランスを持って馬に乗るのが大好きなランスロットという騎士がいた．
+ゼラチンキューブはあなたを麻痺させることができるらしい．
+地獄はかつてもっと大きかったらしい．
+ジョウビレックスは穴堀りの杖を恐れているらしい．
+メデューサはあなたを台座に置きたがっているそうだ．
+ヴェクナは生きているらしい．彼のリッチの友人は言わずもがな！
+ヴェクナは膨大な財宝を溜め込んでいるらしい．
+ヴラドは生きているらしい！！ ... 迷宮の中で．
+しばしば『Elbereth』について書かれているらしい．
+軽量化の鞄にはなんでも入れられるわけではないそうだ．
+祝福されたクアシトの肉の缶詰は素早い食事になるそうだ．
+猫は罠を避けるそうだ．
+洞窟グモは，時おり洞窟グモの卵を食べるそうだ．
+賢い魔法使いの持つ能力値．18/** 24 18 24 24 24
+にんにくは正しく扱えば良いお守りになるそうだ．
+呪われた瞬間移動の巻物はあなたを危機に陥れるかもしれない．
+ダイヤモンドはもう一つの種類の幸せの石らしい．
+犬は物を取ってくるように訓練することができるそうだ．
+ゼラチンキューブは健康的な朝食をつくるそうだ．
+巨人はちゃんと食べることで強くなるそうだ．試してみな！
+グリッドバグはすれ違う時には攻撃しないらしい．
+ジプシーはあなたの運勢の価値を判っているらしい．
+レンバスはとても軽い食事らしい．
+重しには奇妙な引力があるが，悪運ではないらしい．
+どんな名前で呼ぼうとも，鍵開け器具は鍵開け器具だそうだ．
+幸運な魔除けは毒の矢から守ってくれるらしい．
+鏡はさまよう目を動けなくするが，あなたはそれを見ることができるらしい．
+中立の人間は，ジャイアントスレイヤーを手に入れるだろう．
+変化の罠は魔法の罠なので，魔法防御があれば防げるらしい．
+回復の薬は病気の薬を打ち消すらしい．
+怪物を探す薬は，しばしば双方向に働くそうだ．
+流し台は床より高い場所から見るとまた違って見えるらしい．
+召喚された悪魔はゲームを好転させるかもしれない．
+レイスの肉の缶詰は珍しい晩餐の体験だそうだ．
+ユニコーンは幸運をもたらすかもしれない．
+無力化の杖は変化の杖のようなものらしい．
+施錠の杖は扉以外のものも閉めることができるらしい．
+変化の杖はゲームを変えることができるらしい．
+魔法使いは二度目以降はより強力にさえなっているらしい．
+ゾーンはあなたを追跡する時に障害物のことは気付きもしないらしい．
+クレジットカードの乱用は遅かれ早かれ衝撃を与えるだろう．
+魔除けは大艇のものと同じように，命を奪うことも救うこともあるらしい．
+祭壇は祝福を識別することができるらしい．
+ウーズは靴をかじり，岩もぐらは靴を食べるそうだ．
+缶詰の爆発で死んだ不幸なハッカーがいるそうだ．
+骨董屋は常に貴重な宝石に興味をもっているらしい．
+傷を包帯で巻くことは存在を知らしめることになるらしい．
+酔っぱらいの薬は薄めることはできるが，効かなくすることはできない．
+注意して聞けば，隠し扉の音が聞けるそうだ．
+にんじんとにんじんジュースは視力を良くするらしい．
+洞窟グモは高価な健康食とはみなされていないそうだ．
+半神は手に入れたこの世の持ちものを手放さねばならない．
+トイレに物をつけるのはよくない習慣らしい．
+風のジンを起こすことは，高くつく間違いかもしれない．
+ドラゴンの鱗は魔法をかける価値があるらしい．
+泉にコインを投げ入れても，願いをかなえてはくれないだろう．
+ドワーフは秩序正しく自分の仕事に専念しているそうだ．
+こうもりの死体を食べると，しばらくこうもりのようになるらしい．
+クラムを食べると活発に動くらしい．
+青色ゼリーを食べると寒気が襲ってくるらしい．
+迷宮からの脱出は，終りの始まりに過ぎないらしい．
+思いもよらないすきま風を感じることは，一種の突破口になるだろう．
+呪われた灰色の石を発見することは常に不運なことだそうだ．
+レベルが上がることは，視力を増すことのできる経験だそうだ．
+小さなヘビの肉が美味なることは稀だが，それでもなお健康的だそうだ．
+器用さの小手には隠された魔法のタッチがあるらしい．
+天国へ行くのは迷宮から抜け出すもう一つの方法に過ぎない．
+金色ナーガはあなたがそうである限り，法を守る住人だそうだ．
+墓荒らしは時々金持ちになれるらしい．
+今は灰色ドラゴンの鱗鎧は最終装備ではないらしい．
+グレムリンは今よりも涼しさを感じさせてくれるかもしれない．
+グリッドバグはデカルト座標に厳密である．
+ニンフを食べるとしばしばハッカーは飛んだり跳ねたりするように感じるそうだ．
+変化制御の能力を持っていれば，ショックを受けることもないだろう．
+食料を平らげるのが難しいなら，あとひとかじりで死に至ることがあるそうだ．
+眼鏡をかけていないのなら，どうしてにんじんを嫌がるのか？
+足元のゆるんだ板に気付いたら，その上に乗らない方がいいそうだ．
+底からスタートしたのなら，行くべき唯一の場所は上だそうだ．
+天国に瞬間移動したならば，既に死んでいると思われるそうだ．
+店ではツケも請求されるそうだ．
+軽い時には石を通り抜ける方法を考え付くかもしれない．
+迷宮で鏡を壊すと7年にわたって不幸にみまわれるそうだ．
+普通迷宮ではいかなる運も持ち合わせていないそうだ．
+祝福された幸せの石はあなたの神の機嫌を良くするそうだ．
+大魔法使いを殺す方が，大人しくさせるより簡単だそうだ．
+警備員に会うためには，たった1ゴールド盗むだけでいいそうだ．
+うまく薬を混ぜ合わせると，爆発が起こるらしい．
+メデューサをちらりと見られても偶然の幸運とは言えないそうだ．
+店主を殺すと運が悪くなるらしい．
+怪物は怪物を怯えさせる巻物を踏めないらしい．
+大抵の怪物はフルートの演奏には極めてうんざりしているそうだ．
+ミイラの死体は保存状態が悪いらしい．
+願いの杖はもちろん厳重にガードされているそうだ．
+岩の下のがらくたには誰も見向きもしないらしい．
+ユニコーンの角が錆びるなんてことはないらしい．
+探検家が永久に生きられるかどうか誰も知らないそうだ．君は？
+とある薬の中には風のジンが入っているという事実は決して変わらないそうだ．
+とある薬の中には幽霊が入っているという事実は決して変わらないそうだ．
+ニンフはいつもロックンロールにひっかかるそうだ．試してみな！
+一旦オログハイを缶詰にすれば，再び顔を出すことはないだろう．
+昔々，ザンは決して靴を引っ掻こうとはしなかったそうだ．
+経験を積んだ魔法使いのみが天狗をごまかすことができるらしい．
+混沌に属する者のみが店主を殺しても大丈夫だそうだ．
+トイレの水を飲めるのは犬だけらしい．．．
+メスの怪物のみが卵を生むことができるそうだ．
+角笛を本当に下手に演奏すると，本当にいいことがあるらしい．
+輝く薬をこすっても，魔法のランプにはならないそうだ．
+メスはアサメではないが故になまくらになる．
+店主はつるはしが嫌いらしい．
+店主はペットを店に入れても気にしないらしい．
+店主はあなたが店にこっそり入っても普段は気にしないらしい．
+店主はしばしば財布の中に多額の金を持っているらしい．
+店主はあなたが忘れたことでも覚えていることがあるらしい．
+流し台と鎧が相容れることはない．すぐにクロークを脱ぐのだ！
+流し台に流れているもの： 熱いの，冷たいの，風味いろいろ．
+ヘビ使いは魅力的なのではなく，単に音楽の才能があるだけなのだそうだ．
+兵士は常に備え，そして大抵は身を守っているらしい．
+幸か不幸か，あなたの背負い袋で孵る卵があるそうだ．
+火蟻はあなたを熱い食事にしてしまうそうだ．
+ホルンには熱い音楽を奏でるものもあり，またあるものは言葉にできないほど冷たいそうだ．
+ヒューマノイドには完全に人間なのもいるそうだ．
+店主の中には宝石を家宝と考えている者がいるらしい．
+宝石を鑑定できる店主もいるが，それを告げようとはしないそうだ．
+石の中には，他の石よりもずっとずっと重い物があるらしい．
+イエティには熱い空気で満たされているものがいるらしい．
+警備の固いところには，何か特別な物があるそうだ．
+韋駄天の靴は水の上を歩けるほどには速くしてくれないそうだ．
+瞬間移動の罠は悪魔の所業らしい．
+天狗は指輪を装備しないらしい．あなたはするべきか？
+天狗はそれが得意なのにもかかわらず決して金を盗まないらしい．
+一度盗まれた物は，再び盗まれるらしい．ニンフに頼んでみろ．
+デルファイの賢者はトカゲの死体が混乱させるようなものではないことを知っているらしい．
+エルベルスの御手はあなたの祈りを妨げるそうだ．
+レプラコーンの王はクロイソスとおなじくらい金持ちだそうだ．
+失われた墓地は死ぬにはよくない場所らしい．
+オークの王は麻痺知らずらしい．何故？
+イェンダーの魔法使いは精神分裂症で自殺的らしい．
+ビホルダーは致命的な弱点を持っているらしい．
+経験を積んだキャラクタは，祭壇を改宗させる方法を知っているらしい．
+神々はご機嫌麗しい時あなたの足元に物を落すそうだ．
+透明なナズグルという考えにはある指輪がむすびついている．
+湖の貴夫人は，今はどこかの泉にいるらしい．
+田舎の店主は失礼な旅行者にいやな顔をするそうだ．
+吸血鬼の塔への唯一の扉は，その最下層にあるそうだ．
+良いジンとは感謝しているジンだけだそうだ．
+虐殺について重要なのは，それが両方向に働くということだそうだ．
+ユニコーンの角の法則とは，壊れていないものは直さないということだそうだ．
+霧の曇からの眺めは本当によく動く．
+店の壁は特別堅い物質で出来ているそうだ．
+浮遊の靴を失うには少なくとも15通りの方法があるそうだ．
+雲の巣の上には重要なアイテムが載っているらしい．
+鉱山のどこかに幸せの石が眠っている来しい．
+ガラス玉を投げることは，石を投げるのと同じことらしい．
+岩に侵入することは，おそらく価値のないことだろう
+ユニコーンの角とクリスナイフは昔より鋭くなっているらしい．．．
+ユニコーンは貴重な宝石を好むそうだ．
+祭壇で祈るとそこにある水が時々聖水になるらしい．
+排水口に落ちたものがまた上ってくることがあるそうだ．
+ファイアブランドという名の長剣を装備すると，涼しく感じるらしい．
+フロストブランドという名の長剣を装備すると，熱くなるらしい．
+さまよう目は自分の顔を拭けないらしい．
+さまよう目があれば暗闇でも見えるそうだ．
+ユニコーンにルビーをくわえさせることができれば幸運になるらしい．
+あなたはあなたが食べたものになるらしい．
+運が良ければ祭壇で銘のある武器を見出すことができるだろう．
+コカトリスの卵を触っても平気らしい．それで？
+反射の魔除けを壊すことはできないらしい．
+常に望んだものが得られるわけではないらしい．
+壊れた煙の出ている薬を墓場で見つけるだろう．
+最終試練に向けて，常に準備を怠ってはいけない．
+鍵のかかった店へ入るにはドワーフに頼むべきらしい．
+天の啓示のために祈るがいい．
+信心深くお金を寄付すべきだそうだ．
+ヤモリを食べて健康になるなど絶対に有り得ないそうだ．
+死人がえしの杖を自分に振りかざすのは愚かなことだと言われている．
+魔法使いの城にはブービートラップが仕掛けられているらしい．
+自分の犬を殺すと神は立腹なさるらしい．
+祈り過ぎると神は立腹なさるらしい．
+店主はCroesus自身によって保証されているらしい．
+迷宮の奥深くの城には強力な魔法の道具が隠されているらしい．
+コカトリスの死体を装備する者の前には岩だらけの道ができるらしい．
+野性の犬に食料を与えてやれば，飼い慣らせるかもしれない．
+満腹の時にはどの食料もまずい．
+トロルはゴムのようだと言われている．彼らは打たれても立ち直り続ける．
+幽霊には引きつけて回り込む戦法を取ってみよ．
+濡れた巻物に魔法のマーカを使ってみなさい．
+不正をふたつ重ねても正義にはならないが，三つの残りものならそうなる．
+ワルキューレは北からやってきたのに相応しい能力を持っている．
+吸血鬼はにんにくを嫌っている．
+倉庫の番兵は彼らの主人を決して邪魔しない．
+菜食主義者は苔や海藻が好きだ．
+お客様には店主を虐殺なさらぬようお願い申し上げます．
+注意しろ！魔法使いが戻ってくるぞ．
+ドラゴンには水の罠は効かない．
+コカトリスは空腹になると何を食べるのだろう？
+ガラス人間はエプロンを必要としない．
+何故これが「魔法の」マーカと呼ばれるか分かるかい？
+どうして傭兵と呼ぶのだと思う？
+正気の人間ならだれでも『Elbereth』を刻むのはなぜだろう？
+あまりに多くの望みは極めて少ない実りしかもたらさぬ．
+兵隊蟻を買収することはできない．
+ジプシーから金を奪うことはできない．
+裏口から店を出ることはできない．そんなものはないのだ！
+純度の高いアルコールの入った薬ビンを見つけるかもしれない．
+祝福された薬瓶に浸してみるのもいいかもしれない．
+悪魔の貴族を買収することもできるかもしれぬ．
+お前が透明なら店主をだますことも可能だろう．
+量子力学者についての知識をつけておくべきだ．
+真夜中に死体安置所に行くつもりか？？？
+犬は何を食べたら良いか知っている．よく見てみたまえ．
+自らに杖を振りかざし，何が起こるか確かめよ...
+死人がえしの杖を振りかざせば，お前の犬は生き返るかもしれない．
diff -aurN slashem-0.0.7E6F2/dat/jtrnsmon.dat jslashem-0.0.7E6F2-J0.0.8/dat/jtrnsmon.dat
--- slashem-0.0.7E6F2/dat/jtrnsmon.dat	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jtrnsmon.dat	2004-08-15 18:48:06.000000000 +0900
@@ -0,0 +1,1318 @@
+#
+#	Japanese NetHack Copyright (c) Issei Numata 2000
+#	JNetHack may be freely redistributed.  See license for details. 
+#
+#	English -> Japanese monster table
+#
+player:			あなた:
+#
+#	ants
+#
+giant ant:		巨大蟻:
+killer bee:		殺人蜂:
+soldier ant:		兵隊蟻:
+fire ant:		火蟻:
+giant beetle:		巨大カブト虫:
+queen bee:		女王蜂:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+snow ant:		雪蟻:
+tsetse fly:		ツェツェバエ:
+giant wasp:		巨大スズメバチ:
+black wasp:		黒色スズメバチ:
+army ant:		軍隊蟻:
+spitting beetle:	毒吐きカブト虫:
+assassin bug:		暗殺虫:
+# 追加 by Kihara Tomoyasu
+killer beetle:		殺人カブト虫:
+# 追加 by Shiganai Sakusha
+giant tick:		巨大ダニ:
+giant flea:		巨大ノミ:
+giant louse:		巨大シラミ:
+migo drone:		ミ＝ゴの働き手:
+yellow jacket:		黄色スズメバチ:
+migo warrior:		ミ＝ゴの戦士:
+migo queen:		ミ＝ゴの女王:
+#
+#	blobs
+#
+acid blob:		酸のブロッブ:
+quivering blob:		震えるブロッブ:
+gelatinous cube:	ゼラチンキューブ:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+jiggling blob:		揺れるブロッブ:
+lava blob:		溶岩のブロッブ:
+burbling blob:		おしゃべりブロッブ:
+# 追加 by Shiganai Sakusha
+static blob:		静かなブロッブ:
+#
+#	cockatrice
+#
+chickatrice:		チカトリス:
+cockatrice:		コカトリス:
+pyrolisk:		ピロリスク:
+# 追加 by Shiganai Sakusha
+chicken:		ニワトリ:
+cockatoo:		ボタンインコ:
+parrot:			オウム:
+#
+#	dogs and other canines
+#
+jackal:			ジャッカル:
+fox:			狐:
+coyote:			コヨーテ:
+werejackal:		ジャッカル人間:
+little dog:		仔犬:
+dog:			犬:
+large dog:		大きな犬:
+#dingo:			野犬:
+wolf:			狼:
+werewolf:		狼人間:
+warg:			ワーグ:
+winter wolf:		冬狼:
+winter wolf cub:	冬狼の子:
+hell hound pup:		ヘルハウンドの仔:
+hell hound:		ヘルハウンド:
+Cerberus:		ケルベロス:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+pit bull:		ピットブル:
+death dog:		死の犬:
+dingo:			ディンゴ:
+rabid wolf:		狂気の狼:
+wolverine:		クズリ:
+shadow wolf:		影の狼:
+mist wolf:		霧の狼:
+# 追加 by Shiganai Sakusha
+dingo puppy:		ディンゴの仔:
+large dingo:		大きなディンゴ:
+#
+#	eyes
+#
+gas spore:		胞子ガス:
+floating eye:		さまよう目:
+freezing sphere:	氷の球体:
+flaming sphere:		炎の球体:
+shocking sphere:	電撃の球体:
+#beholder:		ビホルダー:
+# 追加 for Slash'EM
+glowing eye:		発光する目:
+blinking eye:		点滅する目:
+# 追加 by Ooi Takefumi
+bloodshot eye:		血走った目:
+#blinking eye:		まばたく目:
+# 追加 by Shiganai Sakusha
+#glowing eye:		光る目:
+#
+#	felines 
+#
+kitten:			小猫:
+housecat:		家猫:
+jaguar:			ジャガー:
+lynx:			山猫:
+#panther:		パンサー:
+large cat:		大きな猫:
+tiger:			虎:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+panther:		ヒョウ:
+werepanther:		ヒョウ人間:
+caterwaul:		わめき猫:
+weretiger:		虎人間:
+sabre-toothed cat:	剣歯猫:
+kamadan:		カマダン:
+displacer beast:	ディスプレイサービースト:
+hellcat:		ヘルキャット:
+#
+#	gremlins
+#
+gremlin:		グレムリン:
+gargoyle:		ガーゴイル:
+winged gargoyle:	羽のあるガーゴイル:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+jermlaine:		ジャームライン:
+galltrit:		ガルトリット:
+# 追加 by Shiganai Sakusha
+statue gargoyle:	石像ガーゴイル:
+#
+#	humanoids
+#
+hobbit:			ホビット:
+dwarf:			ドワーフ:
+bugbear:		バグベアー:
+dwarf lord:		ドワーフの貴族:
+dwarf king:		ドワーフの王:
+mind flayer:		マインドフレア:
+master mind flayer:	マスターマインドフレア:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi	
+dwarf thief:		ドワーフの盗賊:
+# 追加 by Shiganai Sakusha
+duergar:		ドゥエルガル:
+deep one:		深きもの:
+deeper one:		更に深きもの:
+deepest one:		最も深きもの:
+#
+#	imps & other minor demons/devils
+#
+manes:			亡霊:
+homunculus:		ホムンクルス:
+imp:			インプ:
+lemure:			レムレース:
+quasit:			クアシト:
+tengu:			天狗:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+dretch:			ドレッチ:
+rutterkin:		ルッターキン:
+nupperibo:		のっぺらぼう:
+# 追加 by Shiganai Sakusha
+blood imp:		鮮血のインプ:
+#
+#	jellies 
+#
+blue jelly:		青色ゼリー:
+spotted jelly:		まだらゼリー:
+ochre jelly:		黄土色ゼリー:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+clear jelly:		透明ゼリー:
+orange jelly:		オレンジゼリー:
+# 追加 by Shiganai Sakusha
+yellow jelly:		黄色ゼリー:
+rancid jelly:		悪臭ゼリー:
+#
+#	kobolds 
+#
+kobold:			コボルド:
+large kobold:		大きなコボルド:
+kobold lord:		コボルドの貴族:
+kobold shaman:		コボルドの呪術師:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+#swamp kobold:		沼コボルト:
+#rock kobold:		岩コボルト:
+#kobold warrior:	コボルトの戦士:
+#Kroo the Kobold King:	コボルトの王「Kroo」:
+# 追加 by Shiganai Sakusha
+# 本家JNethackでは末尾が−トではなく−ドなので合わせる
+swamp kobold:		沼コボルド:
+rock kobold:		岩コボルド:
+kobold warrior:		コボルドの戦士:
+Kroo the Kobold King:	コボルドの王『クルー』:
+#
+#	leprechauns
+#
+leprechaun:		レプラコーン:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+leprechaun wizard:	レプラコーンの魔法使い:
+#
+#	mimics
+#
+small mimic:		小さなミミック:
+large mimic:		大きなミミック:
+giant mimic:		巨大なミミック:
+#
+#	nymphs
+#
+wood nymph:		木のニンフ:
+water nymph:		水のニンフ:
+mountain nymph:		山のニンフ:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+pixie:			ピクシー:
+brownie:		ブラウニー:
+quickling:		クイックリング:
+Aphrodite:		『アフロディテ』:
+#
+#	orcs
+#
+goblin:			ゴブリン:
+hobgoblin:		ホブゴブリン:
+orc:			オーク:
+hill orc:		丘のオーク:
+Mordor orc:		モルドールのオーク:
+Uruk-hai:		ウルク・ハイ:
+orc shaman:		オークの呪術師:
+orc-captain:		オークの隊長:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+war orc:		兵隊オーク:
+great orc:		グレートオーク:
+snow orc:		雪のオーク:
+demon orc:		デーモンオーク:
+# 追加 by Shiganai Sakusha
+Grund the Orc King:	オークの王『グルンド』:
+#
+#	 piercers
+#
+rock piercer:		岩喰い:
+iron piercer:		鉄喰い:
+glass piercer:		ガラス喰い:
+#
+#	quadrupeds (generic)
+#
+rothe:			ロゼ:
+mumak:			ムーマク:
+leocrotta:		レオクロッタ:
+wumpus:			ワンパス:
+titanothere:		チタノゼア:
+baluchitherium:		バルキテリウム:
+mastodon:		マストドン:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+giant badger:		巨大アナグマ:
+scramper:		スクランパー:
+squealer:		スクウィーラー:
+mangler:		マングラー:
+juggernaut:		ジャガーノート:
+catoblepas:		カトブレパス:
+# 追加 by Shiganai Sakusha
+lamb:			子羊:
+sheep:			羊:
+goat:			山羊:
+cow:			牝牛:
+bull:			雄牛:
+Jumbo the Elephant:	象の『ジャンボ』:
+# 追加 for Slash'EM
+#mangler:		人間圧搾機:
+#mangler:		悪魔狼:
+#
+#	rodents 
+#
+sewer rat:		ドブネズミ:
+giant rat:		巨大ネズミ:
+rabid rat:		兇暴ネズミ:
+rat:			ねずみ:
+wererat:		ねずみ人間:
+rock mole:		岩もぐら:
+woodchuck:		リス:
+# 追加 for Slash'EM
+# 追加 by Ooi Tkakefumi
+rabbit:			野ウサギ:
+black rat:		黒ネズミ:
+rabid rabbit:		兇暴ウサギ:
+pack rat:		こそ泥ネズミ:
+hellrat:		ヘルラット:
+the Rat King:		ネズミの王:
+#
+#	spiders and scorpions
+#
+cave spider:		洞窟グモ:
+centipede:		ムカデ:
+giant spider:		巨大グモ:
+scorpion:		サソリ:
+# 追加 for Slash'EM
+spider:		蜘蛛:
+# 追加 by Ooi Takefumi
+recluse spider:		隠れグモ:
+barking spider:		ほえるクモ:
+carrion crawler:	キャリオン・クローラー:
+nickelpede:		ニッケルさそり:
+giant scorpion:		巨大サソリ:
+phase spider:		多相グモ:
+werespider:		蜘蛛人間:
+# 追加 by Shiganai Sakusha
+Girtab:			『ギルタブ』:
+Shelob:			『シェロブ』:
+#
+#	trappers, lurkers, &c.
+#
+lurker above:		ラーカー:
+trapper:		トラッパー:
+#
+#	unicorns
+#
+white unicorn:		白ユニコーン:
+gray unicorn:		灰色ユニコーン:
+black unicorn:		黒ユニコーン:
+pony:			仔馬:
+horse:			馬:
+warhorse:		戦闘用の馬:
+# 追加 for Slash'EM
+# 追加 by Shiganai Sakusha
+Pegasus:		ペガサス:
+#
+#	vortices
+#
+fog cloud:		霧の曇:
+dust vortex:		ほこりの渦:
+ice vortex:		氷の渦:
+energy vortex:		エネルギーの渦:
+steam vortex:		蒸気の渦:
+fire vortex:		炎の渦:
+#
+#	worms
+#
+baby long worm:		ロングワームの子供:
+baby purple worm:	紫ワームの子供:
+long worm:		ロングワーム:
+purple worm:		紫ワーム:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+dung worm:		糞ワーム:
+acid worm:		酸のワーム:
+tunnel worm:		トンネルワーム:
+# 追加 by Shiganai Sakusha
+larva:			イモムシ:
+maggot:			ウジ:
+bloodworm:		鮮血のワーム:
+rot worm:		腐敗のワーム:
+#
+#	Dummy monster needed for visual interface. 
+#
+long worm tail:		ロングワームの尻尾:
+#
+#	xan, &c.
+#
+grid bug:		グリッドバグ:
+xan:			ザン:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+arc bug:		アークバグ:
+spark bug:		スパークバグ:
+lightning bug:		電光バグ:
+#
+#	lights 
+#
+yellow light:		黄色い光:
+black light:		黒い光:
+#
+#	Zouthern animals
+#(the zruty has been moved to Yeti)
+# 追加 by Shiganai Sakusha
+echidna:		ハリモグラ:
+platypus:		カモノハシ:
+koala:			コアラ:
+wombat:			ウォンバット:
+Tasmanian devil:	タスマニアデビル:
+wallaby:		ワラビー:
+wallaroo:		ワラルー:
+kangaroo:		カンガルー:
+#
+#	Angels and other lawful minions 
+#
+couatl:			コウアトル:
+Aleax:			アレアックス:
+Angel:			天使:
+ki-rin:			麒麟:
+Archon:			アルコン:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+movanic deva:		モヴァニック・デヴァ:
+monadic deva:		モナディック・デヴァ:
+astral deva:		アストラル・デヴァ:
+Planetar:		プラネター:
+Solar:			ソーラー:
+#
+#	Bats
+#
+bat:			こうもり:
+giant bat:		巨大こうもり:
+raven:			オオガラス:
+vampire bat:		吸血こうもり:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+hellbat:		ヘルバット:
+mongbat:		モンバット:
+harpy:			ハーピー:
+# 追加 by Shiganai Sakusha
+rhumbat:		ルンバこうもり:	#ルンバット:#
+athol:			アソール:
+mobat:			集団こうもり:
+byakhee:		ビヤーキー:
+nightgaunt:		夜のゴーント:
+#
+#	Centaurs
+#
+plains centaur:		草原のケンタウロス:
+forest centaur:		森のケンタウロス:
+mountain centaur:	山のケンタウロス:
+#
+#	Dragons
+#
+baby gray dragon:	灰色ドラゴンの子供:
+baby silver dragon:	銀色ドラゴンの子供:
+baby red dragon:	赤色ドラゴンの子供:
+baby white dragon:	白ドラゴンの子供:
+baby orange dragon:	オレンジドラゴンの子供:
+baby black dragon:	黒ドラゴンの子供:
+baby blue dragon:	青ドラゴンの子供:
+baby green dragon:	緑ドラゴンの子供:
+baby yellow dragon:	黄色ドラゴンの子供:
+gray dragon:		灰色ドラゴン:
+silver dragon:		銀色ドラゴン:
+red dragon:		赤色ドラゴン:
+white dragon:		白ドラゴン:
+orange dragon:		オレンジドラゴン:
+black dragon:		黒ドラゴン:
+blue dragon:		青ドラゴン:
+green dragon:		緑ドラゴン:
+yellow dragon:		黄色ドラゴン:
+# 追加 for Slash'EM
+baby shimmering dragon:	幻影ドラゴンの子供:
+baby deep dragon:	漆黒ドラゴンの子供:
+shimmering dragon:	幻影ドラゴン:
+deep dragon:		漆黒ドラゴン:
+# 追加 by Ooi Takefumi
+wyvern:			ワイバーン:
+hydra:			ヒドラ:
+#
+#	Elementals
+#
+stalker:		ストーカー:
+air elemental:		風の精:
+fire elemental:		火の精:
+earth elemental:	土の精:
+water elemental:	水の精:
+#
+#	Fungi
+#
+lichen:			苔の怪物:
+brown mold:		茶色モールド:
+yellow mold:		黄色モールド:
+green mold:		緑モールド:
+red mold:		赤色モールド:
+shrieker:		シュリーカー:
+violet fungus:		紫キノコ:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+disgusting mold:	気持ち悪いモールド:
+black mold:		黒色モールド:
+#
+#	Gnomes
+#
+gnome:			ノーム:
+gnome lord:		ノームの貴族:
+gnomish wizard:		ノームの魔法使い:
+gnome king:		ノームの王:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+gnome thief:		ノームの盗賊:
+deep gnome:		神秘的なノーム:
+gnome warrior:		ノームの戦士:
+# 追加 by Shiganai Sakusha
+Ruggo the Gnome King:	ノームの王『ルッゴ』:
+gnoll:			ノール:
+gnoll warrior:		ノールの戦士:
+gnoll chieftain:	ノールの首領:
+gnoll shaman:		ノールの呪術師:
+#
+#	giant Humanoids
+#
+giant:			巨人:
+stone giant:		岩石巨人:
+hill giant:		丘の巨人:
+fire giant:		炎の巨人:
+frost giant:		吹雪の巨人:
+storm giant:		雷の巨人:
+ettin:			エティン:
+titan:			タイタン:
+minotaur:		ミノタウロス:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+the Largest Giant:	巨人の王族:
+# 追加 by Shiganai Sakusha
+Father Dagon:		父なる『ダゴン』:
+Mother Hydra:		母なる『ハイドラ』:
+#
+#	Invisible stalker
+# 'I' is a visual marker for all invisible monsters and must be unused
+#
+#stalker:		ストーカー:
+#
+#	Jabberwock 
+#
+jabberwock:		ジャバウォック:
+# 追加 by Ooi Takefumi
+vorpal jabberwock:	ボーパルジャバウォック:
+#
+#	Kops
+#
+Keystone Kop:		警備員:
+Kop Sergeant:		巡査:
+Kop Lieutenant:		巡査部長:
+Kop Kaptain:		警部補:
+#
+#	Liches
+#
+lich:			リッチ:
+demilich:		デミリッチ:
+master lich:		マスターリッチ:
+arch-lich:		アーチリッチ:
+#
+#	Mummies 
+#
+kobold mummy:		コボルドのミイラ:
+gnome mummy:		ノームのミイラ:
+orc mummy:		オークのミイラ:
+dwarf mummy:		ドワーフのミイラ:
+elf mummy:		エルフのミイラ:
+human mummy:		人間のミイラ:
+ettin mummy:		エティンのミイラ:
+giant mummy:		巨人のミイラ:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+troll mummy:		トロルのミイラ:
+#
+#	Nagas
+#
+red naga hatchling:	赤色ナーガの雛:
+black naga hatchling:	黒ナーガの雛:
+golden naga hatchling:	金色ナーガの雛:
+guardian naga hatchling:	番兵ナーガの雛:
+red naga:		赤色ナーガ:
+black naga:		黒ナーガ:
+golden naga:		金色ナーガ:
+guardian naga:		番兵ナーガ:
+#
+#	Ogres
+#
+ogre:			オーガ:
+ogre lord:		オーガの君主:
+ogre king:		オーガの王:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+ogre mage:		オーガの魔術師:
+shadow ogre:		影のオーガ:
+#
+#	Puddings 
+#
+gray ooze:		灰色ウーズ:
+brown pudding:		茶色プリン:
+black pudding:		黒プリン:
+green slime:		緑スライム:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+moldy pudding:		かびたプリン:
+# 追加 by Shiganai Sakusha
+shoggoth:		ショゴス:
+giant shoggoth:		巨大ショゴス:
+#
+#	Quantum Mechanics
+#
+quantum mechanic:	量子物理学者:
+# 追加 for Slash'EM
+Doctor Frankenstein:	科学者『フランケンシュタイン』:
+# 追加 by Shiganai Sakusha
+genetic engineer:	遺伝子工学研究者:
+#
+#	Rust Monster
+#
+rust monster:		錆の怪物:
+disenchanter:		吸魔の怪物:
+#
+#	Snakes
+#
+garter snake:		小さなヘビ:
+snake:			ヘビ:
+water moccasin:		水ヘビ:
+pit viper:		穴ヘビ:
+python:			ニシキヘビ:
+cobra:			コブラ:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+king cobra:		キングコブラ:
+weresnake:		蛇人間:
+asphynx:		アズフィンクス:
+#
+#	Trolls
+#
+troll:			トロル:
+ice troll:		氷のトロル:
+rock troll:		岩のトロル:
+water troll:		水のトロル:
+Olog-hai:		オログハイ:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+two-headed troll:	双頭のトロル:
+black troll:		黒トロル:
+#
+#	Umber Hulk
+#
+umber hulk:		アンバーハルク:
+# 追加 by Ooi Takefumi
+water hulk:		ウオーターハルク:
+#
+#	Vampires
+#
+vampire:		吸血鬼:
+vampire lord:		吸血鬼の貴族:
+# 追加 for SLASH'EM
+Vlad the Impaler:	串刺伯爵『ヴラド』:
+# 追加 by Ooi Takefumi
+vampire mage:		吸血鬼の魔術師:
+# 追加 by Shiganai Sakusha
+fire vampire:		炎の精:
+star vampire:		星の精:
+#
+#	Wraiths 
+#
+barrow wight:		バロウ・ワイト:
+wraith:			レイス:
+Nazgul:			ナズグル:
+# 追加 for Slash'EM
+# 追加 by Kihara Tomoyasu
+wight:			ワイト:
+#
+#	Xorn
+#
+xorn:			ゾーン:
+#
+#	Yeti, Apes and other large beasts 
+#
+monkey:			猿:
+ape:			類人猿:
+owlbear:		アウルベア:
+yeti:			イエティ:
+carnivorous ape:	人喰い猿:
+sasquatch:		サスカッチ:
+# 追加 for Slash'EM
+# 追加 by Shiganai Sakusha
+zruty:			ズルティ:
+#
+#	Zombies 
+#
+kobold zombie:		コボルドのゾンビ:
+gnome zombie:		ノームのゾンビ:
+orc zombie:		オークのゾンビ:
+dwarf zombie:		ドワーフのゾンビ:
+elf zombie:		エルフのゾンビ:
+human zombie:		人間のゾンビ:
+
+ettin zombie:		エティンのゾンビ:
+giant zombie:		巨人のゾンビ:
+ghoul:			グール:
+skeleton:		骸骨:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+ghast:			ガスト:
+# 追加 by Shiganai Sakusha
+ghoul mage:		グールの魔術師:
+ghoul queen:		グールの女王:
+gug:			ガグ:
+#
+#	Golems
+#
+straw golem:		藁のゴーレム:
+paper golem:		紙のゴーレム:
+rope golem:		紐のゴーレム:
+gold golem:		金のゴーレム:
+leather golem:		皮のゴーレム:
+wood golem:		木のゴーレム:
+flesh golem:		肉のゴーレム:
+clay golem:		土のゴーレム:
+stone golem:		岩のゴーレム:
+glass golem:		ガラスのゴーレム:
+iron golem:		鉄のゴーレム:
+# 追加 for Slash'EM
+# 追加 by Shiganai Sakusha
+wax golem:		蝋のゴーレム:
+plastic golem:		樹脂のゴーレム:
+Frankenstein's Monster:	フランケンシュタインの怪物:
+ruby golem:		ルビーのゴーレム:
+diamond golem:		ダイヤモンドのゴーレム:
+sapphire golem:		サファイアのゴーレム:
+steel golem:		鋼鉄のゴーレム:
+crystal golem:		水晶のゴーレム:
+#
+#	Humans	
+#
+human:			人間:
+#werejackal:		ジャッカル人間:
+#werewolf:		狼人間:
+Woodland-elf:		森のエルフ:
+Green-elf:		緑エルフ:
+Grey-elf:		灰色エルフ:
+elf-lord:		エルフの貴族:
+Elvenking:		エルフの王:
+doppelganger:		ドッペルゲンガー:
+nurse:			看護婦:
+shopkeeper:		店主:
+guard:			番兵:
+prisoner:		囚人:
+Oracle:			賢者:
+aligned priest:		僧侶:
+high priest:		高僧:
+#unarmored watchman:	丸腰の見張り:
+#unarmored soldier:	丸腰の戦士:
+soldier:		兵士:
+sergeant:		下士官:
+lieutenant:		副官:
+captain:		指揮官:
+watchman:		見張り:
+watch captain:		見張りの隊長:
+Medusa:			『メデューサ』:
+Wizard of Yendor:	イェンダーの魔法使い:
+Croesus:		『クロイソス』:
+Charon:			『カロン』:
+# 追加 for Slash'EM
+drow:			ドロウ:
+lycanthrope:	獣人:
+# 追加 by Ooi Takefumi
+gibberling:		おしゃべり猿:
+grimlock:		グリムロック:
+mugger:			抱きつき強盗:
+black marketeer:	闇の店の店主:
+# 追加 by Shiganai Sakusha
+High-elf:		ハイエルフ:
+gypsy:			ジプシー:
+#
+#	Ghosts	
+#
+ghost:			幽霊:
+shade:			影:
+# 追加 by Shiganai Sakusha
+shadow:			シャドウ:
+# #追加 by Shiganai Sakusha
+#	(major) demons
+#
+water demon:		水の魔神:
+horned devil:		角のある悪魔:
+succubus:		サキュバス:
+incubus:		インキュバス:
+erinys:			イリニス:
+barbed devil:		棘の悪魔:
+marilith:		マリリス:
+vrock:			ヴァロック:
+hezrou:			ヘズロウ:
+bone devil:		骨の悪魔:
+ice devil:		氷の悪魔:
+nalfeshnee:		ナルフェシニ:
+pit fiend:		穴の悪霊:
+balrog:			バルログ:
+Juiblex:		『ジョウビレックス』:
+Yeenoghu:		『イーノグ』:
+Orcus:			『オーケス』:
+Geryon:			『ゲーリュオーン』:
+Dispater:		『ディスペータ』:
+Baalzebub:		『ベルゼブブ』:
+Asmodeus:		『アスモデウス』:
+Demogorgon:		『デモゴルゴン』:
+Death:			『デス』:
+Pestilence:		『ペスティレンス』:
+Famine:			『フェミン』:
+mail daemon:		メイルデーモン:
+djinni:			風のジン:
+sandestin:		サンデスティン:
+# 追加 for Slash'EM
+#efreeti:		イフリート:
+#dao:			ダオ:
+#marid:			マリッド:
+# 追加 by Ooi Takefumi
+spined devil:		刺のある悪魔:
+bearded devil:		顎髭のある悪魔:
+bar-lgura:		バ・ルグラ:
+chasme:			チャスム:
+babau:			ババウ:
+nabassu:		ナバス:
+# 追加 by Shiganai Sakusha
+Cthulhu:		クトゥルフ:
+#
+#	sea monsters
+#
+jellyfish:		クラゲ:
+piranha:		ピラニア:
+shark:			サメ:
+giant eel:		巨大ウナギ:
+electric eel:		電気ウナギ:
+kraken:			クラーケン:
+# 追加 for Slash'EM
+# 追加 by Shiganai Sakusha
+giant crab:		巨大ガニ:
+#
+#	lizards 
+#
+newt:			イモリ:
+gecko:			ヤモリ:
+iguana:			イグアナ:
+baby crocodile:		ワニの子供:
+lizard:			トカゲ:
+chameleon:		カメレオン:
+crocodile:		ワニ:
+salamander:		サラマンダー:
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+gila monster:		毒トカゲ:
+rhaumbusun:		ランブサン:
+basilisk:		バシリスク:
+komodo dragon:		コモドドラゴン:
+#
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+#       food monster
+#
+bad egg:		バッドエッグ:
+killer tripe ration:	殺人干し肉:
+killer food ration:	殺人食糧:
+#
+# 追加 for Slash'EM
+# 追加 by Ooi Takefumi
+#	coins monster
+#
+pile of killer coins:		殺人硬貨の山:
+large pile of killer coins:	大きな殺人硬貨の山:
+huge pile of killer coins:	巨大な殺人硬貨の山:
+#
+# 追加 for Slash'EM
+# #追加 by Shiganai Sakusha
+#	Monsters of the aligned key quests
+#
+Nightmare:		ナイトメア:
+Beholder:		ビホルダー:
+Vecna:			『ヴェクナ』:
+#
+#	character classes
+#
+Archeologist:		考古学者:
+Barbarian:		野蛮人:
+Caveman:		洞窟人:
+Cavewoman:		洞窟人:
+Flame Mage:		炎の魔術師:#
+Healer:			薬師:
+Ice Mage:		氷の魔術師:#
+Knight:			騎士:
+Monk:			武闘家:
+Necromancer:		死人使い:#
+Priest:			僧侶:
+Priestess:		尼僧:
+Ranger:			レンジャー:
+Rogue:			盗賊:
+Samurai:		侍:
+Tourist:		観光客:
+Undead Slayer:		アンデットスレイヤー:#
+Valkyrie:		ワルキューレ:
+Wizard:			魔法使い:
+Yeoman:			衛士:#
+archeologist:		考古学者:
+barbarian:		野蛮人:
+caveman:		洞窟人:
+cavewoman:		洞窟人:
+elf:			エルフ:
+flame mage:		炎の魔術師:#
+healer:			薬師:
+ice mage:		氷の魔術師:#
+knight:			騎士:
+monk:			武闘家:
+necromancer:		死人使い:#
+priest:			僧侶:
+priestess:		尼僧:
+ranger:			レンジャー:
+rogue:			盗賊:
+samurai:		侍:
+tourist:		観光客:
+undead slayer:		アンデットスレイヤー:#
+valkyrie:		ワルキューレ:
+wizard:			魔法使い:
+yeoman:			衛士:#
+#
+#	leader
+#
+Lord Carnarvon:		考古学者『カーナボン』伯爵:
+Pelias:				『ペリアース』:
+Shaman Karnov:		呪術師『カルノフ』:
+Hippocrates:		『ヒポクラテス』:
+King Arthur:		『アーサー』王:
+Grand Master:		総師範:
+Arch Priest:		主席司祭:
+Orion:			勇者『オリオン』:
+Master of Thieves:	盗賊の頭領:
+Lord Sato:		大名『佐藤』:
+Twoflower:		『ツーフラワー』:
+Norn:			ノルン:
+Neferet the Green:	緑の『ネフェレト』:
+# 追加 for Slash'EM
+#Master Shifter:	マスターシフター:
+#Thorin:		トーリン:
+#Bilbo Baggins:		『ビルボ・バギンズ』:
+#High Lycanthrope:	獣人の王:
+#Lolth:			ロルス:
+# 追加 by Ooi Takefumi
+High Flame Mage:	炎の高位魔術師:
+High Ice Mage:		氷の高位魔術師:
+Dark Lord:		ダークロード:
+Van Helsing:		『ヴァン・ヘルシング』:
+# 追加 by Shiganai Sakusha
+Chief Yeoman Warder:	守衛長:
+#
+#	The nemesis monsters
+#
+Minion of Huhetotl:	フヘトトルの使い:
+Thoth Amon:		『トート・アモン』:
+Chromatic Dragon:	クロマティック・ドラゴン:
+Cyclops:		サイクロプス:
+Ixoth:			『イクソス』:
+Master Kaen:		マスター『カエン』:
+Nalzok:			『ナルゾク』:
+Scorpius:		大蠍:
+Master Assassin:	暗殺者の頭領:
+Ashikaga Takauji:	『足利尊氏』:
+#Master of Thieves:	盗賊の頭領:
+Lord Surtur:		火の巨人『スルト』:
+Dark One:		暗きもの:
+# 追加 for Slash'EM
+#Transmuter:		変異術師:
+#Smaug:			『スマウグ』:
+#Goblin King:		ゴブリンの王:
+#Lareth:		『ラレス』:
+#Gollum:		『ゴクリ』:
+# 追加 by Ooi Takefumi
+Water Mage:		水の魔術師:
+Earth Mage:		大地の魔術師:
+Sir Lorimar:		『ロリマー』卿:
+Maugneshaagar:		『マウグネッシャガー』:
+# 追加 by Shiganai Sakusha
+Count Dracula:		『ドラキュラ』伯爵:
+Colonel Blood:		『コロネル・ブラッド』:
+#
+#	The "guards"
+#
+student:		学生:
+chieftain:		首領:
+neanderthal:		ネアンデルタール人:
+attendant:		随行員:
+page:			小姓:
+abbot:			師範:
+acolyte:		侍者:
+hunter:			ハンター:
+thug:			ちんぴら:
+ninja:			忍者:
+roshi:			浪士:
+guide:			ガイド:
+warrior:		戦士:
+apprentice:		実習生:
+man:			男:
+woman:			女:
+# 追加 for Slash'EM
+#shifter:		変異者:
+#dwarf warrior:		ドワーフの戦士:
+#proudfoot:		足高家のもの:
+#intern:		収容者:
+#Farmer Maggot:		農夫『マゴット』:
+# 追加 by Ooi Takefumi
+igniter:		点火者:
+froster:		結霜者:
+embalmer:		ミイラ製作者:
+exterminator:		撲滅者:
+#fiend:			悪霊:
+# 追加 by Shiganai Sakusha
+Yeoman Warder:		守衛:
+#
+#	Gods 
+#
+Quetzalcoatl:		ケツアルカトル:
+Camaxtli:		カマキシトリ:
+Huhetotl:		フヘトトル:
+Mitra:			ミトラ:
+Crom:			クロム:
+Set:			セト:
+Anu:			アヌ:
+Ishtar:			イシュタル:
+Anshar:			アンシャル:
+Athena:			アテナ:
+Hermes:			ヘルメス:
+Poseidon:		ポセイドン:
+Lugh:			ルーフ:
+Brigit:			ブリジット:
+Manannan Mac Lir:	マナンナン・マクリール:
+Shan Lai Ching:		山雷精:
+Chih Sung-tzu:		赤松子:
+Huan Ti:		黄帝:
+Issek:			イセック:
+Mog:			モグ:
+Kos:			コス:
+Amaterasu Omikami:	天照大神:
+Raijin:			雷神:
+Susanowo:		須佐之男:
+Blind Io:		ブラインド・イオ:
+The Lady:		レディ:
+Offler:			オフラー:
+Tyr:			チュール:
+Odin:			オーディン:
+Loki:			ロキ:
+Ptah:			プタハ:
+Thoth:			トート:
+Anhur:			アンフル:
+Mercury:		マーキュリー:
+Venus:			ビーナス:
+Mars:			マーズ:
+# 追加 by Ooi Takefumi
+Earth:			アース:
+Fire:			ファイア:
+Ash:			アッシュ:
+Air:			エアー:
+Frost:			フロスト:
+Smoke:			スモーク:
+Nharlotep:		ナーロテップ:
+Zugguthobal:		ツグソーバル:
+Gothuulbe:		ゴスールベ:
+# 追加 by Shiganai Sakusha
+Und:			ウンド:
+the Temple of Light:	光の神殿:
+the Crypt of Dracula:	ドラキュラの地下室:
+His Majesty:		陛下:
+His Holiness:		ローマ教皇:
+The Commons:		平民:
+# 追加 for Slash'EM
+Seeker:				シーカー:
+Osiris:				オシリス:
+Seth:				セト:
+
+#
+Moloch:			モーロック:
+#
+#	bogus monster
+#
+jumbo shrimp:		巨大甘エビ:
+giant pigmy:		巨大ピグミー:
+gnu:			ヌー:
+killer penguin:		殺人ペンギン:
+giant cockroach:	巨大ゴキブリ:
+giant slug:		巨大ナメクジ:
+#maggot:			蛆虫:
+pterodactyl:		プテラノドン:
+tyrannosaurus rex:	ティラノザウルス:
+#basilisk:		バジリスク:
+#beholder:		ビホルダー:
+#nightmare:		ナイトメア:
+#efreeti:		イフリート:
+#marid:			マリッド:
+rot grub:		赤蛆:
+bookworm:		紙魚:
+master lichen:		マスター苔:
+hologram:		ホログラム:
+#shadow:		シャドウ:
+jester:			道化師:
+attorney:		弁護士:
+sleazoid:		おちょうし者:
+killer tomato:		殺人トマト:
+amazon:			アマゾン:
+robot:			ロボット:
+battlemech:		バトルメック:
+rhinovirus:		鼻風邪:
+#harpy:			ハーピー:
+lion-dog:		ライオン犬:
+rat-ant:		ネズミ蟻:
+Y2K bug:		2000年問題:
+#
+#	misc
+#
+grue:			グルー:
+Christmas-tree monster:	クリスマスツリーの怪物:
+luck sucker:		厄病神:
+paskald:		パスカルド:
+#
+#	Quendor (Zork, &c.)
+#
+brogmoid:		ブログモイド:
+dornbeast:		ドルンビースト:
+#
+#	Moria
+#
+Ancient Multi-Hued Dragon:	古代万色ドラゴン:
+Evil Iggy:			邪悪なるイギー:
+#
+#	Rogue
+#
+emu:		おおうずら:
+kestrel:	おおはやぶさ:
+xeroc:		ものまねの怪物:
+venus flytrap:	はえとりぐさ:
+#
+#	Wizardry
+#
+creeping coins:	クリーピングコイン:
+#
+#	Greek legend
+#
+#hydra:		ヒドラ:
+siren:		セイレーン:
+#
+#	Monty Python
+#
+killer bunny:	兇悪ウサちゃん:
+#
+#	The Princess Bride
+#
+rodent of unusual size:	異常な大きさのリスちゃん:
+#
+#	"Only you can prevent forest fires!"
+#
+Smokey the bear:	森林火災防止マークの熊ちゃん:
+#
+#	Discworld
+#
+Luggage:	ルッゲージ:
+#
+#	Lord of the Rings
+#
+Ent:		エント:
+#
+#	Xanth
+#
+tangle tree:	触手木:
+#nickelpede:	ニッケルさそり:
+wiggle:		ぴくぴく虫:
+#
+#	Lewis Carroll
+#
+white rabbit:	白うさぎ:
+snark:		スナーク:
+#
+#	Dr. Doolittle
+#
+pushmi-pullyu:	オシツオサレツ:
+#
+#	The Smurfs
+#
+smurf:		スマーフ:
+#
+#	Star Trek
+#
+tribble:	トリブル:
+Klingon:	クリンゴン:
+Borg:		ボーグ:
+#
+#	Star Wars
+#
+Ewok:		イオーク:
+#
+#	Tonari no Totoro
+#
+Totoro:		となりのトトロ:
+#
+#	Nausicaa
+#
+ohmu:		王蟲:
+#
+#	monster movies
+#
+youma:		妖魔:
+#
+#	pocket monster
+#
+nyaasu:		ニャース:
+#
+#	monster movies
+#
+Godzilla:	ゴジラ:
+King Kong:	キングコング:
+#
+#	old L of SH
+#
+earthquake beast:	大ナマズ:
+#
+#	Robotech
+#
+Invid:		インビッド:
+#
+#	The Terminator
+#
+Terminator:	ターミネーター:
+#
+#	Bubblegum Crisis
+#
+boomer:		ブーマー:
+#
+#	Dr. Who ("Exterminate!")
+#
+Dalek:		ダレク:
+#
+#	HGttG
+#
+microscopic space fleet:		超微細宇宙船:
+Ravenous Bugblatter Beast of Traal:	がつがつむしゃむしゃトラアル獣:
+#
+#	TMNT
+#
+teenage mutant ninja turtle:	激亀忍者:
+#
+#	Usagi Yojimbo
+#
+samurai rabbit:		侍兎:
+#
+#	Cerebus
+#
+aardvark:		ツチブタ:
+#
+#	Little Shop of Horrors
+#
+Audrey II:		オードリーII:
+#
+#	50's rock 'n' roll
+#
+witch doctor:		呪術医:
+one-eyed one-horned flying purple people eater:	一目一手空飛ぶ紫人食類:
+#
+#	saccharine kiddy TV
+#
+Barney the dinosaur:	恐竜バニーちゃん:
+#
+#	Angband
+#
+Azog the Orc King:	オークの王『アゾグ』
+Morgoth:		モルゴス:
+##Vorlon:			ヴォーロン:
+questing beast:		倒された伝説の怪物:
+Predator:		プレデター:
+mother-in-law:		義理の母:
+
+# #/*[Tom] new wacky names */
+# #追加 by Shiganai Sakusha
+#
+#/* Military */
+#
+commando:		コマンドー:
+green beret:		グリーンベレー:
+sherman tank:		シャーマン戦車(AC-10):
+#
+#/* Star Wars */
+#
+Jedi knight:		ジェダイの騎士:
+tie fighter:		タイファイター:
+protocol droid		プロトコル・ドロイド:
+R2 unit:		R2ユニット:
+Emperor:		帝国皇帝:
+#
+#/* Babylon 5 */
+#アメリカ作品　１９９４年〜１９９８年　第５期まで
+#コッシュ大使:Vorlon Ambassador Kosh Naranek
+#参考http://www.tora-2.com/Babylon5.HTM
+Vorlon:			コッシュ大使:
+#
+#/* drinks */
+#
+keg:			ケッグ:
+Diet Pepsi:		ダイエットペプシ:
+#
+#/* King Arthur */
+#
+##questing beast:	:
+#
+#/* Movie */
+#
+##Predator:		:
+#
+#/* misc */
+#
+green light:		青信号:
+automobile:		自動車:
+invisible Wizard of Yendor:	姿の見えないイェンダーの魔法使い:
+piece of yellowish-brown glass:	価値があるかもしれない茶褐色のガラス:
+wand of nothing:	単なる杖:
+ocean:			海:
+ballpoint pen:		ボールペン:
+paper cut:		ペーパーナイフ:
+#
+#/* people I know */
+#
+Rune:			ルーン:
+Gurk:			ガーク:
+Yuval:			ユーヴァル:
+#
+#/* common pest */
+#
+##mother-in-law:	:
diff -aurN slashem-0.0.7E6F2/dat/jtrnsobj.dat jslashem-0.0.7E6F2-J0.0.8/dat/jtrnsobj.dat
--- slashem-0.0.7E6F2/dat/jtrnsobj.dat	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jtrnsobj.dat	2004-08-25 20:57:23.953125000 +0900
@@ -0,0 +1,1371 @@
+#
+#	Japanese NetHack Copyright (c) Issei Numata 2000
+#	For 3.4, (c) Kentaro Shirakata 2003-2004
+#	JNetHack may be freely redistributed.  See license for details. 
+#
+#	English -> Japanese objects transfer table
+#
+#	missiles
+#
+)arrow:			矢:
+)elven arrow:		エルフの矢:
+)runed arrow:		神秘的な矢:
+)orcish arrow:		オークの矢:
+)crude arrow:		粗末な矢:
+)silver arrow:		銀の矢:
+)crossbow bolt:		クロスボゥボルト:
+)bamboo arrow:		竹の矢:
+)dart:			投げ矢:
+)shuriken:		手裏剣:
+)throwing star:		星型の投げるもの:
+)boomerang:		ブーメラン:
+)spear:			槍:
+)elven spear:		エルフの槍:
+)runed spear:		神秘的な槍:
+)orcish spear:		オークの槍:
+)crude spear:		粗末な槍:
+)dwarvish spear:	ドワーフの槍:
+)stout spear:		丈夫な槍:
+)silver spear:		銀の槍:
+)javelin:		ジャベリン:
+)throwing spear:	投げ槍:
+)trident:		トライデント:
+)lance:			ランス:
+)dagger:		短剣:
+)elven dagger:		エルフの短剣:
+)runed dagger:		神秘的な短剣:
+)orcish dagger:		オークの短剣:
+)silver dagger:		銀の短剣:
+)crude dagger:		粗末な短剣:
+)athame:		アサメ:
+)scalpel:		メス:
+)knife:			ナイフ:
+)stiletto:		スティレット:
+)worm tooth:		ワームの歯:
+)crysknife:		クリスナイフ:
+)dwarvish mattock:	ドワーフのつるはし:
+)broad pick:		幅広のつるはし:
+)heavy pick:		重いつるはし:
+)axe:			斧:
+)battle-axe:		戦斧:
+)double-headed axe:	両刃の斧:
+)short sword:		小剣:
+)elven short sword:	エルフの小剣:
+)runed short sword:	神秘的な小剣:
+)orcish short sword:	オークの小剣:
+)crude short sword:	粗末な小剣:
+)dwarvish short sword:	ドワーフの小剣:
+)broad short sword:	幅広の小剣:
+)scimitar:		シミター:
+)curved sword:		曲った剣:
+)silver saber:		銀のサーベル:
+)broadsword:		幅広の剣:
+)elven broadsword:	エルフの幅広の剣:
+)runed broadsword:	神秘的な幅広の剣:
+)long sword:		長剣:
+)two-handed sword:	両手剣:
+)katana:		刀:
+)samurai sword:		侍の剣:
+)tsurugi:		大刀:
+)long samurai sword:	侍の長剣:
+)runesword:		ルーンの剣:
+)partisan:		パルチザン:
+)vulgar polearm:	長斧:
+)ranseur:		ランサー:
+)hilted polearm:	柄付の長斧:
+)spetum:		スペタム:
+)forked polearm:	フォーク付き長斧:
+)glaive:		グレイブ:
+)single-edged polearm:	片刃長斧:
+)halberd:		ハルバード:
+)angled poleaxe:	曲ったまさかり:
+)bardiche:		バーディック:
+)long poleaxe:		長いまさかり:
+)voulge:		ボルゲ:
+)pole cleaver:		肉切り包丁:
+)fauchard:		槍剣:
+)pole sickle:		かま:
+)guisarme:		ギザルム:
+)pruning hook:		刈り込みがま:
+)bill-guisarme:		ビル・ギザルム:
+)hooked polearm:	鈎付の長斧:
+)lucern hammer:		ルッツェルンハンマー:
+)pronged polearm:	二股の長斧:
+)bec de corbin:		ベック・ド・コルバン:
+)beaked polearm:	槍つきの長斧:
+)mace:			メイス:
+)morning star:		モーニングスター:
+)war hammer:		ウォーハンマー:
+)club:			こん棒:
+)rubber hose:		ゴムホース:
+)quarterstaff:		六尺棒:
+)staff:			棒:
+)aklys:			アキリス:
+)thonged club:		紐付のこん棒:
+)flail:			フレイル:
+)bullwhip:		鞭:
+# 追加 by Ooi Takefumi
+)dark elven arrow:	ダークエルフの矢:
+)black runed arrow:	黒い神秘的な矢:
+)dark elven dagger:	ダークエルフの短剣:
+)black runed dagger:	黒い神秘的な短剣:
+)dark elven short sword:	ダークエルフの小剣:
+)black runed short sword:	黒い神秘的な小剣:
+)silver short sword:	銀の小剣:
+)silver long sword:	銀の長剣:
+)silver mace:		銀のメイス:
+)wooden stake:		木の杭:
+)baseball bat:		野球のバット:
+)great dagger:		鋭い短剣:
+)rapier:		レイピア:
+# 追加 by Shiganai Sakusha
+)fly swatter:		ハエたたき:
+)heavy hammer:		大金鎚:
+#
+#	bows
+#
+)bow:		弓:
+)elven bow:	エルフの弓:
+)runed bow:	神秘的な弓:
+)orcish bow:	オークの弓:
+)crude bow:	粗末な弓:
+)yumi:		和弓:
+)long bow:	長弓:
+)sling:		スリング:
+)crossbow:	クロスボゥ:
+# 追加 by Ooi Takefumi
+)dark elven bow:	ダークエルフの弓:
+)black runed bow:	黒い神秘的な弓:
+# 追加 by Shiganai Sakusha
+)pistol:		拳銃:
+)submachine gun:	軽機関銃:
+)heavy machine gun:	重機関銃:
+)rifle:			ライフル:
+)assault rifle:		野戦ライフル:
+)sniper rifle:		狙撃用ライフル:
+)shotgun:		散弾銃:
+)auto shotgun:		自動散弾銃:
+)rocket launcher:	ロケットランチャー:
+)grenade launcher:	グレネードランチャー:
+)bullet:		弾丸:
+)silver bullet:		銀の弾丸:
+)shotgun shell:		散弾:
+)rocket:		ロケット:
+)frag grenade:		手榴弾:
+)gas grenade:		ガス弾:
+)stick of dynamite:	ダイナマイト:
+)red stick:		赤い棒:
+#
+#	dummy weapon(for #enhance)
+#
+)polearms:		長斧:
+)saber:			サーベル:
+)two weapon combat:	二刀流:
+)pick-axe:		つるはし:
+)bare handed combat:	素手:
+)martial arts:		マーシャルアーツ:
+)unicorn horn:		ユニコーンの角:
+# 追加 by Shiganai Sakusha
+)bare-handed combat:	素手:
+)two-handed combat:	二刀流:
+#
+#	armors
+#
+]elven leather helm:	エルフの革帽子:
+]leather hat:		革帽子:
+]orcish helm:		オークの兜:
+]iron skull cap:	鉄の帽子:
+]dwarvish iron helm:	ドワーフの鉄兜:
+]hard hat:		固い帽子:
+]fedora:		フィドーラ:
+]cornuthaum:		とんがり帽子:
+]conical hat:		円錐形の帽子:
+]dunce cap:		低能帽:
+]dented pot:		くぼんだ鍋:
+]helmet:		兜:
+]plumed helmet:		羽兜:
+]helm of brilliance:	知性の兜:
+]etched helmet:		模様入り兜:
+]helm of opposite alignment:	逆属性の兜:
+]crested helmet:	とさかの兜:
+]helm of telepathy:	千里眼の兜:
+]visored helmet:	面頬付きの兜:
+]gray dragon scale mail:	灰色ドラゴンの鱗鎧:
+]silver dragon scale mail:	銀色ドラゴンの鱗鎧:
+]red dragon scale mail:		赤色ドラゴンの鱗鎧:
+]white dragon scale mail:	白ドラゴンの鱗鎧:
+]orange dragon scale mail:	オレンジドラゴンの鱗鎧:
+]black dragon scale mail:	黒ドラゴンの鱗鎧:
+]blue dragon scale mail:	青ドラゴンの鱗鎧:
+]green dragon scale mail:	緑ドラゴンの鱗鎧:
+]yellow dragon scale mail:	黄色ドラゴンの鱗鎧:
+]gray dragon scales:		灰色ドラゴンの鱗:
+]silver dragon scales:		銀色ドラゴンの鱗:
+]red dragon scales:		赤色ドラゴンの鱗:
+]white dragon scales:		白ドラゴンの鱗:
+]orange dragon scales:		オレンジドラゴンの鱗:
+]black dragon scales:		黒ドラゴンの鱗:
+]blue dragon scales:		青ドラゴンの鱗:
+]green dragon scales:		緑ドラゴンの鱗:
+]yellow dragon scales:		黄色ドラゴンの鱗:
+# 追加 by Ooi Takefumi
+]shimmering dragon scale mail:	幻影ドラゴンの鱗鎧:
+]deep dragon scale mail:	漆黒ドラゴンの鱗鎧:
+]shimmering dragon scales:	幻影ドラゴンの鱗:
+]deep dragon scales:		漆黒ドラゴンの鱗:
+#
+]plate mail:		鋼鉄の鎧:
+]crystal plate mail:	水晶の鎧:
+]bronze plate mail:	青銅の鎧:
+]splint mail:		鉄片の鎧:
+]banded mail:		帯金の鎧:
+]dwarvish mithril-coat:	ドワーフのミスリル服:
+]elven mithril-coat:	エルフのミスリル服:
+]chain mail:		鎖かたびら:
+]orcish chain mail:	オークの鎖かたびら:
+]crude chain mail:	粗末な鎖かたびら:
+]scale mail:		鱗の鎧:
+]studded leather armor:	鋲付き革鎧:
+]ring mail:		鉄環の鎧:
+]orcish ring mail:	オークの鉄環の鎧:
+]crude ring mail:	粗末な鉄環の鎧:
+]leather armor:		革鎧:
+]leather jacket:	革の服:
+# 追加 by Ooi Takefumi
+]dark elven mithril-coat:	ダークエルフのミスリル服:
+#]asbestos jacket:	石綿の服:
+#]silver jacket:		銀色の服:
+#]robe:			ローブ:
+]red robe:		赤いローブ:
+]robe of protection:	守りのローブ:
+]blue robe:		青いローブ:
+]robe of power:		力のローブ:
+]orange robe:		オレンジ色のローブ:
+]robe of weakness:	脆弱のローブ:
+]green robe:		緑のローブ:
+#
+#	cloaks
+#
+]mummy wrapping:	ミイラの包帯:
+]elven cloak:		エルフのクローク:
+]faded pall:		陰気な外套:
+]orcish cloak:		オークのクローク:
+]coarse mantelet:	粗末なマント:
+]dwarvish cloak:	ドワーフのクローク:
+]hooded cloak:		フードつきのクローク:
+]oilskin cloak:		防水クローク:
+]slippery cloak:	つるつるしたクローク:
+]cloak of protection:	守りのクローク:
+]tattered cape:		ぼろぼろのケープ:
+]cloak of invisibility:	透明のクローク:
+]opera cloak:		オペラクローク:
+]cloak of magic resistance:	魔法を防ぐクローク:
+]ornamental cope:	装飾用の外套:
+]cloak of displacement:	幻影のクローク:
+]piece of cloth:	布切れ:
+]robe:			ローブ:
+#]alchemy smock:		錬金術の仕事着:
+#]apron:			エプロン:
+]leather cloak:		革のクローク:
+# 追加 by Ooi Takefumi
+]lab coat:		実験室のコート:
+]white coat:		白いコート:
+#]cloak of poisonousness:	服毒のクローク:
+# 追加 by Shiganai Sakusha
+]dirty rag:		薄汚い端切れ:
+# 追加 for Slash'EM
+]poisonous cloak:	服毒のクローク:
+#
+#	shields
+#
+]small shield:		小さな盾:
+]elven shield:		エルフの盾:
+]blue and green shield:	青と緑の盾:
+]Uruk-hai shield:	ウルク・ハイの盾:
+]white-handed shield:	白の手の盾:
+]orcish shield:		オークの盾:
+]red-eyed shield:	赤い目の盾:
+]large shield:		大きな盾:
+]dwarvish roundshield:	ドワーフの丸盾:
+]large round shield:	大きな丸盾:
+]shield of reflection:	反射の盾:
+]polished silver shield:	銀色の磨かれた盾:
+]Hawaiian shirt:		アロハシャツ:
+]T-shirt:		Ｔシャツ:
+#
+#	gloves
+#
+]leather gloves:	革の手袋:
+]old gloves:		古い手袋:
+]gauntlets of fumbling:	お手玉の小手:
+]padded gloves:		詰めもののある手袋:
+]gauntlets of power:	力の小手:
+]riding gloves:		乗馬用の手袋:
+]gauntlets of dexterity:	器用さの小手:
+]fencing gloves:	フェンシングの小手:
+# 追加 by Ooi Takefumi
+]gauntlets of swimming:	水泳の小手:
+]black gloves:		黒い手袋:
+#
+#	boots
+#
+]low boots:		かかとの低い靴:
+]walking shoes:		散歩用の靴:
+]iron shoes:		鉄の靴:
+]hard shoes:		固い靴:
+]high boots:		かかとの高い靴:
+]jackboots:		軍隊靴:
+]speed boots:		韋駄天の靴:
+]combat boots:		戦闘靴:
+]water walking boots:	水上歩行の靴:
+]jungle boots:		ジャングルの靴:
+]jumping boots:		飛び跳ねる靴:
+]hiking boots:		ハイキングの靴:
+]elven boots:		エルフの靴:
+]mud boots:		ドロだらけの靴:
+]fumble boots:		つまずきの靴:
+]riding boots:		乗馬用の靴:
+]levitation boots:	浮遊の靴:
+]snow boots:		雪靴:
+]kicking boots:		蹴り挙げ靴:
+]buckled boots:		留め金のある靴:
+# 追加 for Slash'EM
+]steel boots:		鋼鉄の靴:
+#
+#	rings
+#
+=adornment:		飾りの指輪:
+=gain strength:		強さの指輪:
+=gain constitution:	体力の指輪:
+=increase accuracy:	命中の指輪:
+=increase damage:	攻撃の指輪:
+=protection:		守りの指輪:
+=regeneration:		回復の指輪:
+=searching:		探索の指輪:
+=stealth:		忍びの指輪:
+=sustain ability:	能力維持の指輪:
+=levitation:		浮遊の指輪:
+=hunger:		飢餓の指輪:
+=aggravate monster:	反感の指輪:
+=conflict:		争いの指輪:
+=warning:		警告の指輪:
+=poison resistance:	耐毒の指輪:
+=fire resistance:	耐炎の指輪:
+=cold resistance:	耐冷の指輪:
+=shock resistance:	耐電の指輪:
+=free action:		自由行動の指輪:
+=slow digestion:	消化不良の指輪:
+=teleportation:		瞬間移動の指輪:
+=teleport control:	瞬間移動制御の指輪:
+=polymorph:		変化の指輪:
+=polymorph control:	変化制御の指輪:
+=invisibility:		透明の指輪:
+=see invisible:		可視の指輪:
+=protection from shape changers:	耐変化怪物の指輪:
+# 追加 by Ooi Takefumi
+=gain intelligence:	知性の指輪:
+=gain wisdom:		賢さの指輪:
+=gain dexterity:	器用さの指輪:
+=sleeping:		眠りの指輪:
+# 追加 for Slash'EM
+# moodringとは実際にある体調で色の変わる指輪のこと
+=mood:			気分の指輪:
+#
+=wooden:	木の指輪:
+=granite:	花崗岩の指輪:
+=opal:		オパールの指輪:
+=clay:		土の指輪:
+=coral:		珊瑚の指輪:
+=black onyx:	黒めのうの指輪:
+=moonstone:	月長石の指輪:
+=tiger eye:	虎目石の指輪:
+=jade:		ひすいの指輪:
+=bronze:	青銅の指輪:
+=agate:		めのうの指輪:
+=topaz:		トパーズの指輪:
+=sapphire:	サファイアの指輪:
+=ruby:		ルビーの指輪:
+=diamond:	ダイアモンドの指輪:
+=pearl:		真珠の指輪:
+=iron:		鉄の指輪:
+=brass:		真鍮の指輪:
+=copper:	銅の指輪:
+=twisted:	ねじれた指輪:
+=steel:		鋼鉄の指輪:
+=silver:	銀の指輪:
+=gold:		金の指輪:
+=ivory:		象牙の指輪:
+=emerald:	エメラルドの指輪:
+=wire:		針金の指輪:
+=engagement:	婚約指輪:
+=shiny:		光る指輪:
+# 追加 by Ooi Takefumi
+=plain:		簡素な指輪:
+=glass:		ガラスの指輪:
+=obsidian:	黒曜石の指輪:
+=wedding:	結婚式用の指輪:
+=black:		黒い指輪:
+# 追加 by Shiganai Sakusha
+=ridged:	峰の尖った指輪:
+=cameo:		カメオの指輪:
+=intaglio:	沈み彫りの指輪:
+#
+#	amulets
+#
+"amulet of ESP:			遠視の魔除け:
+"amulet of life saving:		命の魔除け:
+"amulet of strangulation:	絞殺の魔除け:
+"amulet of restful sleep:	安眠の魔除け:
+"amulet versus poison:		耐毒の魔除け:
+"amulet of change:		性転換の魔除け:
+"amulet of unchanging:		無変化の魔除け:
+"amulet of reflection:		反射の魔除け:
+"amulet of magical breathing:	呼吸の魔除け:
+# 追加 for Slash'EM
+"amulet of drain resistance:	耐生命力吸収の魔除け:
+# 追加 by Ooi Takefumi
+"amulet of regeneration:	再生の魔除け:
+"amulet of conflict:		争いの魔除け:
+"amulet of polymorph:		変化の魔除け:
+# 追加 by Shiganai Sakusha
+"amulet of flying:		飛行の魔除け:
+"amulet versus stone:		耐石化の魔除け:
+#
+"circular:	丸い魔除け:
+"spherical:	球の魔除け:
+"oval:		卵型の魔除け:
+"triangular:	三角形の魔除け:
+"pyramidal:	四角錐の魔除け:
+"square:	四角の魔除け:
+"concave:	凹面の魔除け:
+"hexagonal:	六角形の魔除け:
+"octagonal:	八角形の魔除け:
+"cheap plastic imitation of the Amulet of Yendor:偽物のイェンダーの魔除け:
+"Amulet of Yendor:	イェンダーの魔除け:
+# 追加 by Ooi Takefumi
+"warped:	歪んだ魔除け:
+"twisted:	ねじれた魔除け:
+"lunate:	三日月形の魔除け:
+# 追加 by Shiganai Sakusha
+"convex:	凸面の魔除け:
+#
+#	containers
+#
+(large box:	大箱:
+(chest:		宝箱:
+(ice box:	アイスボックス:
+(sack:		袋:
+(oilskin sack:	防水袋:
+(bag of holding:	軽量化の鞄:
+(bag of tricks:	トリックの鞄:
+(bag:		鞄:
+# 追加 for Slash'EM
+(medical kit:	薬箱:
+(leather bag:	革製の鞄:
+#
+#	lock opening tools
+#
+(skeleton key:	万能鍵:
+(key:		鍵:
+(lock pick:	鍵開け器具:
+(credit card:	クレジットカード:
+#
+#	light sources
+#
+(tallow candle:	獣脂のろうそく:
+(candle:	ろうそく:
+(wax candle:	蜜蝋のろうそく:
+(brass lantern:	真鍮のランタン:
+(oil lamp:	オイルランプ:
+(lamp:		ランプ:
+(magic lamp:	魔法のランプ:
+(expensive camera:	高価なカメラ:
+(mirror:	鏡:
+(looking glass:	ガラス:
+(crystal ball:	水晶玉:
+(glass orb:	ガラスの球:
+(lenses:	レンズ:
+(blindfold:	目隠し:
+(towel:		タオル:
+(saddle:	鞍:
+(leash:		紐:
+(stethoscope:	聴診器:
+(tinning kit:	缶詰作成道具:
+(tin opener:	缶切り:
+(can of grease:	脂の缶:
+(figurine:	人形:
+(magic marker:	魔法のマーカ:
+# 追加 by Ooi Takefumi
+(magic candle:	魔法のろうそく:
+#
+#	instruments
+#
+(tin whistle:	ブリキの笛:
+(whistle:	笛:
+(magic whistle:	魔法の笛:
+(wooden flute:	木のフルート:
+(flute:		フルート:
+(magic flute:	魔法のフルート:
+(tooled horn:	細工のほどこされたホルン:
+(horn:		ホルン:
+(frost horn:	吹雪のホルン:
+(fire horn:	炎のホルン:
+(horn of plenty:	恵みのホルン:
+(wooden harp:	木の竪琴:
+(harp:		竪琴:
+(magic harp:	魔法の竪琴:
+(bell:		ベル:
+(bugle:		ラッパ:
+(leather drum:	革の太鼓:
+(drum:		太鼓:
+(drum of earthquake:	地震の太鼓:
+(land mine:	地雷:
+(beartrap:	熊の罠:
+# 追加 by Ooi Takefumi
+(orb of enchantment:	強化のオーブ:
+(orb of charging:	充填のオーブ:
+(orb of destruction:	破壊のオーブ:
+#
+#	tools useful as weapons
+#
+(pick-axe:	つるはし:
+(grappling hook:	ひっかけ棒:
+(iron hook:		鉄のフック:
+(unicorn horn:	ユニコーンの角:
+# 追加 by Shiganai Sakusha
+(spoon:		スプーン:
+(fishing pole:	釣り竿:
+(torch:		松明:
+(green lightsaber:	緑のライトセイバー:
+(lightsaber:		ライトセイバー:
+(blue lightsaber:	青いライトセイバー:
+(red lightsaber:	赤いライトセイバー:
+(red double lightsaber:	赤い両刃のライトセイバー:
+(double lightsaber:	両刃のライトセイバー:
+# # 追加 by Shiganai Sakusha
+#	two special unique artifact "tools"
+#
+(bandage:	包帯:
+(phial:		ガラス瓶:
+#
+#	special tools
+#
+(Candelabrum of Invocation:	祈りの燭台:
+(candelabrum:			燭台:
+(Bell of Opening:		開放のベル:
+(silver bell:			銀のベル:
+#
+#	meat
+#
+%tripe ration:	乾し肉:
+%corpse:	死体:
+%egg:		卵:
+%meatball:	ミートボール:
+%meat stick:	ミートスティック:
+%huge chunk of meat:	大きな肉のかたまり:
+%meat ring:	ミートリング:
+%kelp frond:	ワカメ:
+%eucalyptus leaf:	ユーカリの葉:
+# 追加 by Ooi Takefumi
+%eyeball:		眼球:
+%severed hand:		重い手:
+#
+#	fruits & veggies
+#
+%apple:		りんご:
+%orange:	オレンジ:
+%pear:		洋ナシ:
+%melon:		メロン:
+%banana:		バナナ:
+%carrot:		にんじん:
+%sprig of wolfsbane:	トリカブト:
+%clove of garlic:	にんにく:
+%slime mold:		ねばねばカビ:
+%slice of pizza:	ピザ:
+# 追加 by Ooi Takefumi
+%asian pear:	アジア産ナシ:
+%mushroom:	キノコ:
+#
+#	human food
+#
+%lump of royal jelly:	ロイヤルゼリー:
+%cream pie:		クリームパイ:
+%candy bar:		キャンディ:
+%fortune cookie:	占いクッキー:
+%pancake:		パンケーキ:
+%lembas wafer:		レンバス:
+%cram ration:		クラム:
+%food ration:		食料:
+%K-ration:		Ｋレーション:
+%C-ration:		Ｃレーション:
+%tin:			缶:
+# 追加 by Ooi Takefumi
+%sandwich:		サンドイッチ:
+%tortilla:		トルティーヤ:
+%cheese:		チーズ:
+#%pill:			ピル:
+%holy wafer:		聖餅:
+# 追加 for Slash'EM
+%pill:			錠剤:
+#
+#	potions
+#
+!gain ability:		能力獲得の薬:
+!restore ability:	能力回復の薬:
+!confusion:		混乱の薬:
+!blindness:		盲目の薬:
+!paralysis:		麻痺の薬:
+!speed:			加速の薬:
+!levitation:		浮遊の薬:
+!hallucination:		幻覚の薬:
+!invisibility:		透明の薬:
+!see invisible:		可視の薬:
+!healing:		回復の薬:
+!extra healing:		超回復の薬:
+!gain level:		レベルアップの薬:
+!enlightenment:		啓蒙の薬:
+!monster detection:	怪物を探す薬:
+!object detection:	物体を探す薬:
+!gain energy:		魔力の薬:
+!sleeping:		睡眠の薬:
+!full healing:		完全回復の薬:
+!polymorph:		変化の薬:
+!booze:			酔っぱらいの薬:
+!sickness:		病気の薬:
+!fruit juice:		フルーツジュース:
+!water:			水:
+!oil:			油:
+!acid:			酸の薬:
+# 追加 by Ooi Takefumi
+!clairvoyance:		千里眼の薬:
+!ESP:			遠視の薬:
+!invulnerability:	不死身の薬:
+# 追加 by Shiganai Sakusha
+!blood:			血液:
+!vampire blood:		吸血鬼の血液:
+!amnesia:		記憶喪失の薬:
+#
+!ruby:			ルビー色の:
+!pink:			ピンク色の:
+!orange:		オレンジ色の:
+!yellow:		黄色の:
+!emerald:		エメラルド色の:
+!dark green:		暗緑色の:
+!cyan:			シアン色の:
+!sky blue:		水色の:
+!brilliant blue:	明るい青色の:
+!magenta:		マゼンダ色の:
+!purple-red:		赤紫色の:
+!puce:			暗褐色の:
+!milky:			ミルク色の:
+!swirly:		渦を巻いている:
+!bubbly:		泡だっている:
+!smoky:			煙がでている:
+!cloudy:		曇っている:
+!effervescent:		沸騰している:
+!black:			黒い:
+!white:			白い:
+!brown:			茶色の:
+!fizzy:			発泡している:
+!dark:			陰気な色の:
+!clear:			無色の:
+!murky:			濃黒の:
+!golden:		金色の:
+# 追加 by Ooi Takefumi
+!luminescent:		光る:
+!muddy:			さえない色の:
+!icy:			冷たそうな:
+# 追加 by Shiganai Sakusha
+!blood-red:		血のような赤色をした:
+!sparkling:		火花が飛ぶ:
+#
+#	scrolls
+#
+?enchant armor:		鎧に魔法をかける巻物:
+?destroy armor:		鎧を破壊する巻物:
+?confuse monster:	怪物を混乱させる巻物:
+?scare monster:		怪物を怯えさせる巻物:
+?remove curse:		解呪の巻物:
+?enchant weapon:	武器に魔法をかける巻物:
+?create monster:	怪物を作る巻物:
+?taming:		怪物を飼いならす巻物:
+?genocide:		虐殺の巻物:
+?light:			光の巻物:
+?teleportation:		瞬間移動の巻物:
+?gold detection:	金貨を探す巻物:
+?food detection:	食料を探す巻物:
+?identify:		識別の巻物:
+?magic mapping:		地図の巻物:
+?amnesia:		記憶喪失の巻物:
+?fire:			炎の巻物:
+?earth:			大地の巻物:
+?punishment:		罰の巻物:
+?charging:		充填の巻物:
+?stinking cloud:	悪臭雲の巻物:
+?mail:			手紙の巻物:
+?blank paper:		白紙の巻物:
+?ZELGO MER:		『へろへろっす』と書かれた巻物:
+?JUYED AWK YACC:	『ぱーるあぱっち』と書かれた巻物:
+?NR 9:			『せぶんすぎょざー』と書かれた巻物:
+?XIXAXA XOXAXA XUXAXA:	『びーえすでー』と書かれた巻物:
+?PRATYAVAYAH:		『おろかぶー』と書かれた巻物:
+?DAIYEN FOOELS:		『あらほらさっさ』と書かれた巻物:
+?LEP GEX VEN ZEA:	『りなっくす』と書かれた巻物:
+?PRIRUTSENIE:		『げろげーろ』と書かれた巻物:
+?ELBIB YLOH:		『ばくしょうもんだい』と書かれた巻物:
+?VERR YED HORRE:	『ちぇっくめいと』と書かれた巻物:
+?VENZAR BORGAVVE:	『おーくすだーびー』と書かれた巻物:
+?THARR:			『かねかねかね』と書かれた巻物:
+?YUM YUM:		『おぶちけいぞう』と書かれた巻物:
+?KERNOD WEL:		『くっくー』と書かれた巻物:
+?ELAM EBOW:		『じゃいすと』と書かれた巻物:
+?DUAM XNAHT:		『まえをみろ』と書かれた巻物:
+?ANDOVA BEGARIN:	『どっくりびんきー』と書かれた巻物:
+?VE FORBRYDERNE:	『すてーきみゃ』と書かれた巻物:
+?HACKEM MUCHE:		『じゃいしょく』と書かれた巻物:
+?VELOX NEB:		『ちゃんぴお〜ん』と書かれた巻物:
+?FOOBIE BLETCH:		『はにゃ〜ん』と書かれた巻物:
+?TEMOV:			『ぽちっとな』と書かれた巻物:
+?GARVEN DEH:		『しびびんしびびん』と書かれた巻物:
+?READ ME:		『うしろをみろ』と書かれた巻物:
+?KIRJE:			『よしのやぎゅどーん』と書かれた巻物:
+?stamped:		消印の押された巻物:
+?unlabeled:		ラベルのない巻物:
+#
+#	spellbooks
+#
++dig:			穴掘りの魔法書:
++magic missile:		矢の魔法書:
++fireball:		火の玉の魔法書:
++cone of cold:		冷気の魔法書:
++sleep:			眠りの魔法書:
++finger of death:	死の指の魔法書:
++light:			灯りの魔法書:
++detect monsters:	怪物を探す魔法書:
++healing:		回復の魔法書:
++knock:			開錠の魔法書:
++force bolt:		衝撃の魔法書:
++confuse monster:	混乱の魔法書:
++cure blindness:	盲目を癒す魔法書:
++drain life:		生命力吸収の魔法書:
++slow monster:		牛歩の魔法書:
++wizard lock:		施錠の魔法書:
++create monster:	怪物を造る魔法書:
++detect food:		食料を探す魔法書:
++cause fear:		恐怖の魔法書:
++clairvoyance:		千里眼の魔法書:
++cure sickness:		病気を癒す魔法書:
++charm monster:		魅了の魔法書:
++haste self:		速攻の魔法書:
++detect unseen:		霊感の魔法書:
++levitation:		浮遊の魔法書:
++extra healing:		超回復の魔法書:
++restore ability:	能力回復の魔法書:
++invisibility:		透明の魔法書:
++detect treasure:	宝を探す魔法書:
++remove curse:		解呪の魔法書:
++magic mapping:		地図の魔法書:
++identify:		識別の魔法書:
++turn undead:		蘇生の魔法書:
++polymorph:		変化の魔法書:
++teleport away:		瞬間移動の魔法書:
++create familiar:	造魔の魔法書:
++cancellation:		無力化の魔法書:
++protection:		守りの魔法書:
++jumping:		跳躍の魔法書:
++stone to flesh:	軟化の魔法書:
+# 追加 by Ooi Takefumi
++command undead:	アンデットを使役する魔法書:
++summon undead:		アンデット召喚の魔法書:
++enchant weapon:	武器強化の魔法書:
++enchant armor:		防具強化の魔法書:
++resist poison:		耐毒の魔法書:
++resist sleep:		耐眠の魔法書:
++endure cold:		耐冷の魔法書:
++endure heat:		耐熱の魔法書:
++enlighten:		啓蒙の魔法書:
+# 追加 by Shiganai Sakusha
++insulate:		耐電の魔法書:
++passwall:		壁抜けの魔法書:
++flame sphere:		炎の球体の魔法書:
++freeze sphere:		氷の球体の魔法書:
++poison blast:		毒吹きの魔法書:
++acid stream:		酸の旋風の魔法書:
+# 追加 for Slash'EM
++lightning:		雷の魔法書:
+#
++parchment:	羊皮紙の魔法書:
++vellum:	子牛皮の魔法書:
++ragged:	ぼろぼろの魔法書:
++dog eared:	ページの折られた魔法書:
++mottled:	まだらの魔法書:
++stained:	よごれた魔法書:
++cloth:		布地の魔法書:
++leather:	革の魔法書:
++white:		白い魔法書:
++pink:		ピンク色の魔法書:
++red:		赤い魔法書:
++orange:	オレンジ色の魔法書:
++yellow:	黄色い魔法書:
++velvet:	ビロードの魔法書:
++light green:	淡緑色の魔法書:
++dark green:	濃緑色の魔法書:
++turquoise:	青緑色の魔法書:
++cyan:		シアン色の魔法書:
++light blue:	淡青の魔法書:
++dark blue:	濃青の魔法書:
++indigo:	藍色の魔法書:
++magenta:	マゼンダ色の魔法書:
++purple:	紫色の魔法書:
++violet:	スミレ色の魔法書:
++tan:		黄褐色の魔法書:
++plaid:		ラシャの魔法書:
++light brown:	淡茶色の魔法書:
++dark brown:	濃茶色の魔法書:
++gray:		灰色の魔法書:
++dusty:		ほこりっぽい魔法書:
++bronze:	青銅の魔法書:
++copper:	銅の魔法書:
++silver:	銀の魔法書:
++gold:		金の魔法書:
++glittering:	きらびらかな魔法書:
++shining:	輝く魔法書:
++dull:		さえない色の魔法書:
++thin:		薄い色の魔法書:
++thick:		濃い色の魔法書:
++plain:		真っ白な魔法書:
++canvas:	麻の魔法書:
++hardcover:	固い表紙の魔法書:
++Book of the Dead:	死者の書:
++papyrus:	パピルスの魔法書:
++blank paper:		白紙の魔法書:
++wrinkled:	くしゃくしゃの魔法書:
+# 追加 by Ooi Takefumi
++big:		大きな魔法書:
++fuzzy:		けば立った魔法書:
++wide:		幅の広い魔法書:
++deep:		厚い魔法書:
++long:		長い魔法書:
++faded:		色あせた魔法書:
++black:		黒い魔法書:
++dark:		黒ずんだ魔法書:
+# 追加 by Shiganai Sakusha
++spotted:	斑点の有る魔法書:
++torn:		引き裂かれた魔法書:
++ochre:		黄土色の魔法書:
++tattered:	ぼろい魔法書:
++colorful:	カラフルな魔法書:
++tartan:	格子縞の魔法書:
++stylish:	スタイリッシュな魔法書:
++spiral-bound:	螺旋綴じの魔法書:
++stapled:	留め金で綴じた魔法書:
+# 追加 for Slash'EM
++rainbow:		虹色の魔法書:
++psychedelic:	サイケデリックな魔法書:
++left-handed:	左開きの魔法書:
+#
+#	wands
+#
+/light:			灯りの杖:
+/secret door detection:	扉探索の杖:
+/enlightenment:		啓蒙の杖:
+/create monster:	怪物を造る杖:
+/wishing:		願いの杖:
+/nothing:		単なる杖:
+/striking:		衝撃の杖:
+/make invisible:	透明化の杖:
+/slow monster:		減速の杖:
+/speed monster:		加速の杖:
+/undead turning:	蘇生の杖:
+/polymorph:		変化の杖:
+/cancellation:		無力化の杖:
+/teleportation:		瞬間移動の杖:
+/opening:		開錠の杖:
+/locking:		施錠の杖:
+/probing:		探査する杖:
+/digging:		穴掘りの杖:
+/magic missile:		矢の杖:
+/fire:			炎の杖:
+/cold:			吹雪の杖:
+/sleep:			眠りの杖:
+/death:			死の杖:
+/lightning:		雷の杖:
+# 追加 by Ooi Takefumi
+/create horde:		大群の杖:
+/fear:			恐怖の杖:
+/healing:		回復の杖:
+/extra healing:		超回復の杖:
+/fireball:		火球の杖:
+# 追加 by Shiganai Sakusha
+/draining:		生命力吸収の杖:
+#
+/glass:		ガラスの杖:
+/balsa:		バルサの杖:
+/crystal:	水晶の杖:
+/maple:		楓の杖:
+/pine:		松の杖:
+/oak:		樫の杖:
+/ebony:		黒檀の杖:
+/marble:	大理石の杖:
+/tin:		ブリキの杖:
+/brass:		真鍮の杖:
+/copper:	銅の杖:
+/silver:	銀の杖:
+/platinum:	プラチナの杖:
+/iridium:	イリジウムの杖:
+/zinc:		亜鉛の杖:
+/aluminum:	アルミニウムの杖:
+/uranium:	ウラニウムの杖:
+/iron:		鉄の杖:
+/steel:		鋼鉄の杖:
+/hexagonal:	六角形の杖:
+/short:		短い杖:
+/runed:		ルーン文字の書かれた杖:
+/long:		長い杖:
+/curved:	曲った杖:
+/forked:	二叉の杖:
+/spiked:	くさびの打ちつけられた杖:
+/jeweled:	宝石が埋められた杖:
+# 追加 by Ooi Takefumi
+/black:		黒い杖:
+/rusty:		さびついた杖:
+/bamboo:	竹の杖:
+/bronze:	青銅の杖:
+/octagonal:	八角形の杖:
+# 追加 by Shiganai Sakusha
+/ceramic:	陶磁器の杖:
+#
+#	gold
+#
+$gold piece:	ゴールド:
+#
+#	gems & rocks
+#
+*dilithium crystal:	ディリジウムの結晶:
+*white:		白い石:
+*diamond:	ダイヤモンド:
+*ruby:		ルビー:
+*red:		赤い石:
+*sapphire:	サファイア:
+*blue:		青い石:
+*emerald:	エメラルド:
+*turquoise:	トルコ石:
+*aquamarine:	アクアマリン:
+*green:		緑の石:
+*amber:		琥珀:
+*yellowish brown:	茶褐色の石:
+*topaz:		トパーズ:
+*opal:		オパール:
+*garnet:	ガーネット:
+*amethyst:	アメジスト:
+*violet:	紫の石:
+*jasper:	ジャスパー:
+*fluorite:	フルオライト:
+*jade:		ひすい:
+#
+# jactinthは出エジプト記28章で黄水晶と訳されているが，
+# citrineとかぶるので橙水晶
+#
+*jacinth:	橙水晶:
+*orange:	橙色の石:
+*black opal:	黒オパール:
+*black:		黒い石:
+*citrine:	黄水晶:
+*yellow:	黄色い石:
+*jet:		黒玉:
+*chrysoberyl:	金緑石:
+*obsidian:	黒燿石:
+*agate:		めのう:
+*worthless piece of white glass:	白いガラス:
+*worthless piece of blue glass:		青いガラス:
+*worthless piece of red glass:		赤いガラス:
+*worthless piece of yellowish brown glass:	茶褐色のガラス:
+*worthless piece of green glass:	緑のガラス:
+*worthless piece of violet glass:	紫のガラス:
+*worthless piece of orange glass:	橙色のガラス:
+*worthless piece of black glass:	黒色のガラス:
+*worthless piece of yellow glass:	黄色のガラス:
+#
+*luckstone:	幸せの石:
+*gray:		灰色の宝石:
+*loadstone:	重し:
+*touchstone:	試金石:
+*flint:		火打ち石:
+*rock:		石:
+# 追加 by Shiganai Sakusha
+*healthstone:	回復の石:
+*whetstone:	砥石:
+#
+#	miscellaneous
+#
+'boulder:		岩:
+'statue:		像:
+0heavy iron ball:	重い鉄球:
+_iron chain:		鉄の鎖:
+'blinding venom:	盲目の毒液:
+'splash of venom:	毒液のしぶき:
+'acid venom:		酸の毒液:
+#
+#	samurai's item
+#
+)wakizashi:	脇差し:
+)ninja-to:	忍者刀:
+)nunchaku:	ヌンチャク:
+)naginata:	なぎなた:
+)ya:		竹矢:
+(osaku:		おさく:
+(koto:		琴:
+)shito:		刺刀:
+]tanko:		短甲:
+]kabuto:	兜:
+]yugake:	弓懸:
+%gunyoki:	丸薬:
+%nori:		海苔:
+!sake:		酒:
+#
+#	artifacts
+#
+AExcalibur:		エクスカリバー:
+AStormbringer:		ストームブリンガー:
+AMjollnir:		ミュルニール:
+ACleaver:		クリーバー:
+AGrimtooth:		グリムトゥース:
+AOrcrist:		オークリスト:
+ASting:			スティング:
+AMagicbane:		マジックベーン:
+AFrost Brand:		フロストブランド:
+AFire Brand:		ファイアブランド:
+ADragonbane:		ドラゴンベーン:
+ADemonbane:		デーモンベーン:
+AWerebane:		ウェアベーン:
+AGrayswandir:		グレイスワンダー:
+#AGiantslayer:		ジャイアントスレイヤー:
+AOgresmasher:		オーガスマッシャー:
+ATrollsbane:		トロルスベーン:
+AVorpal Blade:		ボーパルブレード:
+ASnickersnee:		スニッカーズニー:
+ASunsword:		サンソード:
+# 追加 by Ooi Takefumi
+AGiantkiller:		ジャイアントキラー:
+AQuick Blade:		クイックブレード:
+ASkullcrusher:		スカルクラッシャー:
+AHoly Spear of Light:	光の聖槍:
+ALuckblade:		ラックブレード:
+ASword of Balance:	調和の剣:
+ADisrupter:		ディスラプター:
+AGauntlets of Defense:  守りの小手:
+AMirrorbright:		ミラーブライト:
+ADeluder:		ディルダー:
+AWhisperfeet:		ウィスパーフィート:
+ASerpent's Tongue:	サーペンツ・タン:
+ADoomblade:		ドゥームブレード:
+AThiefbane:		シーフベーン:
+ADeathsword:		デスソード:
+ABat from Hell:		地獄のバット:
+AElfrist:		エルフリスト:
+# 追加 by Shiganai Sakusha
+AFirewall:		炎の守り:
+ASword of Justice:	正義の剣:
+AReaper:		リーパー:
+ADeep Freeze:		凍結の刃:
+APlague:		プレイグ:
+AHellfire:		ヘルファイア:
+AHouchou:		包丁:
+
+#	Special Artifacts
+# 追加 by Ooi Takefumi
+AThe Hand of Vecna:	ヴェクナの手:
+# 追加 by Shiganai Sakusha
+AWallet of Perseus:	ペルセウスの袋:
+ANighthorn:		ナイトホーン:
+AThe Key of Law:	秩序の鍵:
+AThe Eye of the Beholder:	ビホルダーの目:
+AThe Key of Neutrality:	中立の鍵:
+AThe Key of Chaos:	混沌の鍵:
+
+# A
+AThe Orb of Detection:		探索のオーブ:
+# B
+AThe Heart of Ahriman:		アーリマンの心臓:
+# C
+AThe Sceptre of Might:		権力の笏:
+# F
+AThe Candle of Eternal Flame:	永燃のロウソク:	#
+# H
+AThe Staff of Aesculapius:	アエスキュラピスの杖:
+# I
+AThe Storm Whistle:		嵐の魔笛:	#
+# K
+AThe Magic Mirror of Merlin:	マーリンの魔法の鏡:
+# Mon
+AThe Eyes of the Overworld:	超世界の目:
+# N
+AThe Great Dagger of Glaurgnaa:	グラーグナーの短剣:	#
+# P
+AThe Mitre of Holiness:		聖なる冠:
+# Ran
+AThe Longbow of Diana:		ダイアナの長弓:
+# R
+AThe Master Key of Thievery:	盗賊のマスターキー:
+# S
+AThe Tsurugi of Muramasa:	村正の刀:
+# T
+AThe Platinum Yendorian Express Card:	プラチナイェンダー印エクスプレスカード:
+# U
+AThe Stake of Van Helsing:	ヴァンヘルシングの杭:	#
+# V
+AThe Orb of Fate:		運命のオーブ:
+# W
+AThe Eye of the Aethiopica:	エチオピアの目:
+# Y
+AThe Crown of Saint Edward:	聖エドワードの王冠:	#
+#
+# name of dungeon
+#
+dSokoban:		倉庫番:
+dThe Dungeons of Doom:	運命の大迷宮:
+dThe Gnomish Mines:	ノームの鉱山:
+dThe Quest:		クエスト:
+dGehennom:		ゲヘナ:
+dFort Ludios:		ローディオス砦:
+dVlad's Tower:		ヴラド候の塔:
+dThe Elemental Planes:	精霊界:
+#追加
+dThe Wyrm Caves:        竜の洞窟:
+dOne-eyed Sam's Market: 片目のサムのマーケット:
+dThe Lost Tomb:         失われた墓地:
+dThe Spider Caves:      蜘蛛の洞窟:
+dThe Sunless Sea:       暗黒の海:
+dThe Temple of Moloch:  モーロックの寺院:
+dThe Giant Caverns:     巨人の洞窟:
+# 追加 by Shiganai Sakusha
+dGrund's Stronghold:	グルンドの要塞:
+dLawful Quest:		秩序のクエスト:
+dNeutral Quest:		中立のクエスト:
+dChaotic Quest:		混沌のクエスト:
+dFrankenstein's Lab:	フランケンシュタイン研究所:
+#
+# Symbols or other things name (this is not a object name (See: drawing.c))
+#
+Sremembered, unseen, creature:		見えるはずのない生物:
+#
+Sstrange object:			奇妙な物体:
+Sweapon:				武器:
+Ssuit or piece of armor:		服または鎧のたぐい:
+Sring:					指輪:
+Samulet:				魔除け:
+Suseful item (pick-axe, key, lamp...):	便利な道具(つるはし，鍵，ランプ．．．):
+Spiece of food:				食料:
+Spotion:				薬:
+Sscroll:				巻物:
+Sspell book:				魔法の本:
+Swand:					杖:
+Spile of coins:				金貨の山:
+Sgem or rock:				宝石または石:
+Sboulder or statue:			岩または像:
+Siron ball:				鉄球:
+Siron chain:				鉄の鎖:
+Ssplash of venom:			毒液:
+#
+Sillegal objects:	奇妙な物体:
+Sweapons:		武器:
+Sarmor:			鎧:
+Srings:			指輪:
+Samulets:		魔除け:
+Stools:			道具:
+Sfood:			食料:
+Spotions:		薬:
+Sscrolls:		巻物:
+Sspell books:		魔法の本:
+Swands:			杖:
+Scoins:			金貨:
+Srocks:			石:
+Slarge stones:		巨石:
+Siron balls:		鉄球:
+Schains:		鎖:
+Svenoms:		毒:
+#
+Sant or other insect:	蟻または他の昆虫:
+Sblob:			ブロッブ:
+Scockatrice:		コカトリス:
+Sdog or other canine:	犬またはイヌ科の動物:
+Seye or sphere:		目または球体:
+Sfeline:		猫またはネコ科の動物:
+Scat or other feline:	猫またはネコ科の動物:
+Sgremlin:		グレムリン:
+Shumanoid:		ヒューマノイド:
+Simp or minor demon:	インプまたは下級悪魔:
+Sjelly:			ゼリー:
+Skobold:		コボルト:
+Sleprechaun:		レプラコーン:
+Smimic:			ミミック:
+Snymph:			ニンフ:
+Sorc:			オーク:
+Spiercer:		穴喰い:
+Squadruped:		四足動物:
+Srodent:		齧歯動物:
+Sarachnid or centipede:		クモ形類動物またはムカデ:
+Strapper or lurker above:	トラッパーまたはラーカー:
+Sunicorn:		ユニコーン:
+Sunicorn or horse:	ユニコーンまたは馬:
+Svortex:		渦:
+Sworm:			ワーム:
+Sxan or other mythical/fantastic insect:	ザンまたは神話やファンタジーの昆虫:
+Slight:			光:
+Szruty:			ズルティ:
+Sangelic being:		天使:
+Sbat:			こうもり:
+Sbat or bird:		こうもりまたは鳥:
+Scentaur:		ケンタウロス:
+Sdragon:		ドラゴン:
+Selemental:		精霊:
+Sfungus or mold:	キノコまたはモールド:
+Sgnome:			ノーム:
+Sgiant humanoid:	巨人:
+Sinvisible stalker:	透明ストーカー:
+Sjabberwock:		ジャバウォック:
+SKeystone Kop:		警備員:
+Slich:			リッチ:
+Smummy:			ミイラ:
+Snaga:			ナーガ:
+Sogre:			オーガ:
+Spudding or ooze:	プリンまたはウーズ:
+Squantum mechanic:	量子場:
+Srust monster:		錆の怪物:
+Srust monster or disenchanter:	錆の怪物または吸魔の怪物:
+Ssnake:			ヘビ:
+Stroll:			トロル:
+Sumber hulk:		アンバーハルク:
+Svampire:		吸血鬼:
+Swraith:		レイス:
+Sxorn:			ゾーン:
+Sapelike creature:	猿のような生物:
+Szombie:		ゾンビ:
+Shuman:			人間:
+Shuman or elf:		人間またはエルフ:
+Sranger:		レンジャー:
+Sghost:			幽霊:
+Sgolem:			ゴーレム:
+Sdemon:			悪魔:
+Smajor demon:		悪魔:
+Ssea monster:		海の怪物:
+Slizard:		トカゲ:
+Slong worm tail:	ロングワームの尻尾:
+# 追加 by Shiganai Sakusha
+SZouthern animal:	有袋動物:
+Squantum mechanic or other scientist:	量子物理学者または他の科学者:
+#
+#	part of room
+#
+Sdark part of a room:	部屋の暗い部分:
+Swall:			壁:
+Sdoorway:		出入口:
+Sopen door:		開いた扉:
+Sclosed door:		閉じた扉:
+Sfloor of a room:	部屋の床:
+Scorridor:		通路:
+Slit corridor:		明るい通路:
+Sstaircase up:		上り階段:
+Sstaircase down:	下り階段:
+Sladder up:		上りはしご:
+Sladder down:		下りはしご:
+Strap:			罠:
+Sweb:			くもの巣:
+Saltar:			祭壇:
+Sopulent throne:	華やかな玉座:
+Ssink:			流し台:
+Sfountain:		泉:
+Swater filled area:	水のたまった場所:
+Swater:			水のたまった場所:
+Sice:			氷:
+Smolten lava:		溶岩:
+Slowered drawbridge:	降りている跳ね橋:
+Sraised drawbridge:	上っている跳ね橋:
+Sair filled area:	空気のたまった場所:
+Sair:			空気のたまった場所:
+Scloud filled area:	曇:
+Scloud:			曇:
+Sgrave:			墓:
+Stree:			木:
+Siron bars:		鉄棒:
+# 追加 by Ooi Takefumi
+Stoilet:		トイレ:
+#
+#	traps
+#
+^arrow trap:		矢の罠:
+^dart trap:		投げ矢の罠:
+^falling rock trap:	岩落しの罠:
+^squeaky board:		きしむ板:
+^beartrap:		熊の罠:
+^bear trap:		熊の罠:
+^land mine:		地雷:
+^sleeping gas trap:	睡眠ガスの罠:
+^hole:			穴:
+^rust trap:		腐食の罠:
+^fire trap:		火の罠:
+^pit:			落し穴:
+^spiked pit:		トゲだらけの落し穴:
+^trapdoor:		落し扉:
+^trap door:		落し扉:
+^teleportation trap:	瞬間移動の罠:
+^level teleporter:	別の階への瞬間移動の罠:
+^magic portal:		魔法の入口:
+^web:			くもの巣:
+^statue trap:		彫像の罠:
+^magic trap:		魔法の罠:
+^anti-magic field:	反魔法空間の罠:
+^anti-magic trap field:	反魔法空間の罠:
+^polymorph trap:	変化の罠:
+^rolling boulder trap:	落岩の罠:
+#
+#	SKILLs
+#
+Kmartial arts:		体術:
+Kbare handed combat:	素手:
+Ktwo weapon combat:	二刀流:
+Kriding:		乗馬:
+Kdagger:		短剣:
+Kaxe:			斧:
+Kknife:			ナイフ:
+Kpick-axe:		つるはし:
+Kshort sword:		小剣:
+Kbroadsword:		幅広の剣:
+Klong sword:		長剣:
+Ktwo-handed sword:	両手剣:
+Kscimitar:		シミター:
+Ksaber:			サーベル:
+Kclub:			こん棒:
+Kmace:			メイス:
+Kquarterstaff:		六尺棒:
+Kmorning star:		モーニングスター:
+Kflail:			フレイル:
+Khammer:		ハンマー:
+Kpolearms:		長斧:
+Kspear:			槍:
+Kjavelin:		ジャベリン:
+Ktrident:		トライデント:
+Klance:			ランス:
+Ksling:			スリング:
+Kunicorn horn:		ユニコーンの角:
+Kcrossbow:		クロスボウ:
+Kdart:			ダーツ:
+Kboomerang:		ブーメラン:
+Kwhip:			鞭:
+Kshuriken:		手裏剣:
+Kbow:			弓:
+Kdivination spells:	予知:
+Kattack spells:		攻撃:
+Kescape spells:		脱出:
+Kmatter spells:		物質:
+Khealing spells:	治癒:
+Kenchantment spells:	補助:
+Kclerical spells:	僧侶:
+# 追加 by Shiganai Sakusha
+Kpaddle:		ハエたたき:
+Kfirearms:		銃器:
+Kprotection spells:	護り:
+Kbody spells:		肉体:
+Klightsaber:		ライトセイバー:
+Kbare-handed combat:	素手:
+Ktwo-handed combat:	二刀流:
diff -aurN slashem-0.0.7E6F2/dat/jwizhelp jslashem-0.0.7E6F2-J0.0.8/dat/jwizhelp
--- slashem-0.0.7E6F2/dat/jwizhelp	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/jwizhelp	2004-06-10 16:42:50.000000000 +0900
@@ -0,0 +1,26 @@
+デバッグモード：
+
+^C  ==  ACを増やす
+^E  ==  秘密のドアや罠を調べる．
+^F  ==  魔法の地図．
+^G  ==  怪物を造る．
+^I  ==  持ち物を識別する．
+^J  ==  レベルを上昇させる
+^N  ==  無敵化(トグル)
+^O  ==  特殊階の位置を知る．
+^T  ==  その階での瞬間移動．
+^V  ==  違う階への瞬間移動．
+^W  ==  望みをかなえる．
+^X  ==  属性を見る．
+
+#levelchange == change experience level
+#lightsources == show mobile light sources
+#monpolycontrol == control monster polymorphs
+#panic == panic test
+#polyself == polymorph self
+#seenv == show seen vectors
+#stats == show memory statistics
+#timeout == look at timeout queue
+#vision == show vision array
+#wmode == show wall modes
+
diff -aurN slashem-0.0.7E6F2/dat/mall-1.des jslashem-0.0.7E6F2-J0.0.8/dat/mall-1.des
--- slashem-0.0.7E6F2/dat/mall-1.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/mall-1.des	2004-06-27 23:13:36.000000000 +0900
@@ -5,7 +5,8 @@
 #
 
 LEVEL: "mall-1"
-MESSAGE: "You hear the sounds of civilization."
+#MESSAGE: "You hear the sounds of civilization."
+MESSAGE: "あなたは市場のざわめきを聞いた．"
 RANDOM_MONSTERS:'@','r'
 ROOM: "ordinary" , lit, random, random, (48,15)
 NAME: "town"
diff -aurN slashem-0.0.7E6F2/dat/mall-2.des jslashem-0.0.7E6F2-J0.0.8/dat/mall-2.des
--- slashem-0.0.7E6F2/dat/mall-2.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/mall-2.des	2004-06-27 23:13:54.000000000 +0900
@@ -5,7 +5,8 @@
 #
 
 LEVEL: "mall-2"
-MESSAGE: "You hear the sounds of civilization."
+#MESSAGE: "You hear the sounds of civilization."
+MESSAGE: "あなたは市場のざわめきを聞いた．"
 RANDOM_MONSTERS:'@','r'
 ROOM: "ordinary" , lit, random, random, (48,15)
 NAME: "town"
diff -aurN slashem-0.0.7E6F2/dat/mines.des jslashem-0.0.7E6F2-J0.0.8/dat/mines.des
--- slashem-0.0.7E6F2/dat/mines.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/mines.des	2004-06-10 08:55:10.000000000 +0900
@@ -877,8 +877,10 @@
 NON_DIGGABLE:(53,07,55,07)
 NON_DIGGABLE:(53,14,61,14)
 # The Gnome King's wine cellar.
-ENGRAVING:(12,03),engrave,"You are now entering the Gnome King's wine cellar."
-ENGRAVING:(12,04),engrave,"Trespassers will be persecuted!"
+#ENGRAVING:(12,03),engrave,"You are now entering the Gnome King's wine cellar."
+#ENGRAVING:(12,04),engrave,"Trespassers will be persecuted!"
+ENGRAVING:(12,03),engrave,"ノームの王のワイン倉庫"
+ENGRAVING:(12,04),engrave,"侵入者はそれ相応の償いを求められる！"
 OBJECT:'!',"booze",(10,07)
 OBJECT:'!',"booze",(10,07)
 OBJECT:'!',random,(10,07)
diff -aurN slashem-0.0.7E6F2/dat/mtemple.des jslashem-0.0.7E6F2-J0.0.8/dat/mtemple.des
--- slashem-0.0.7E6F2/dat/mtemple.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/mtemple.des	2004-06-27 23:24:02.000000000 +0900
@@ -147,4 +147,5 @@
 MONSTER: 'Z',random,(21,5),hostile,asleep
 MONSTER: 'Z',random,(22,5),hostile,asleep
 MONSTER: 'Z',random,(23,5),hostile,asleep
-ENGRAVING:(06,04),burn,"Those Not of Moloch, Begone!"
+#ENGRAVING:(06,04),burn,"Those Not of Moloch, Begone!"
+ENGRAVING:(06,04),burn,"モーロックの信者でないものは立ち去れ！"
diff -aurN slashem-0.0.7E6F2/dat/newmall.des jslashem-0.0.7E6F2-J0.0.8/dat/newmall.des
--- slashem-0.0.7E6F2/dat/newmall.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/newmall.des	2004-06-27 23:14:02.000000000 +0900
@@ -5,7 +5,8 @@
 #
 
 LEVEL: "mall"
-MESSAGE: "You hear the sounds of civilization."
+#MESSAGE: "You hear the sounds of civilization."
+MESSAGE: "あなたは市場のざわめきを聞いた．"
 ROOM: "ordinary" , lit, random, random, (48,15)
 NAME: "town"
 FOUNTAIN: (20, 7)
diff -aurN slashem-0.0.7E6F2/dat/nightmar.des jslashem-0.0.7E6F2-J0.0.8/dat/nightmar.des
--- slashem-0.0.7E6F2/dat/nightmar.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/nightmar.des	2004-08-10 13:10:14.000000000 +0900
@@ -82,7 +82,8 @@
 
 # entrance
 REGION:(47,15,49,17),lit,"ordinary"
-ENGRAVING:(48,16),engrave,"Beware of Dreams come true!"
+#ENGRAVING:(48,16),engrave,"Beware of Dreams come true!"
+ENGRAVING:(48,16),engrave,"夢の実現には気をつけろ！"
 MONSTER:'i',"imp",(49,15),hostile
 TRAP[60%]:"sleep gas",(48,15)
 TRAP[60%]:"sleep gas",(47,16)
@@ -138,13 +139,20 @@
 OBJECT[40%]:'[',"gauntlets of fumbling",place[2],cursed,-4
 OBJECT[40%]:'[',"poisonous cloak",place[2],cursed,-1
 OBJECT[40%]:'[',"robe of weakness",place[2],cursed,0
-OBJECT[40%]:')',"fly swatter",place[2],cursed,-2,"Bugshmasher"
-OBJECT[40%]:')',"worm tooth",place[2],cursed,-4,"Storm Brand"
-OBJECT[40%]:')',"short sword",place[2],cursed,-3,"Chaosbane"
-OBJECT[40%]:'"',"amulet of strangulation",place[2],cursed,0,"life saving"
-OBJECT[40%]:'=',"sleeping",place[2],cursed,0,"slow digestion"
-OBJECT[40%]:'=',"hunger",place[2],cursed,0,"free action"
-OBJECT[40%]:'=',"increase accuracy",place[2],blessed,-9,"polymorph control"
+#OBJECT[40%]:')',"fly swatter",place[2],cursed,-2,"Bugshmasher"
+OBJECT[40%]:')',"fly swatter",place[2],cursed,-2,"バグスマッシャー"
+#OBJECT[40%]:')',"worm tooth",place[2],cursed,-4,"Storm Brand"
+OBJECT[40%]:')',"worm tooth",place[2],cursed,-4,"ストームブランド"
+#OBJECT[40%]:')',"short sword",place[2],cursed,-3,"Chaosbane"
+OBJECT[40%]:')',"short sword",place[2],cursed,-3,"カオスベーン"
+#OBJECT[40%]:'"',"amulet of strangulation",place[2],cursed,0,"life saving"
+OBJECT[40%]:'"',"amulet of strangulation",place[2],cursed,0,"命"
+#OBJECT[40%]:'=',"sleeping",place[2],cursed,0,"slow digestion"
+OBJECT[40%]:'=',"sleeping",place[2],cursed,0,"消化不良"
+#OBJECT[40%]:'=',"hunger",place[2],cursed,0,"free action"
+OBJECT[40%]:'=',"hunger",place[2],cursed,0,"自由行動"
+#OBJECT[40%]:'=',"increase accuracy",place[2],blessed,-9,"polymorph control"
+OBJECT[40%]:'=',"increase accuracy",place[2],blessed,-9,"変化制御"
 OBJECT[40%]:'(',"oil lamp",place[2],cursed,0
 MONSTER:'@',random,place[2],hostile
 MONSTER:'@',random,place[2],hostile
@@ -251,13 +259,19 @@
 MONSTER[40%]:'E',random,(25,13),hostile
 MONSTER[40%]:'E',random,(26,14),hostile
 
-MONSTER:'g',"gremlin",(38,12),"Clown",hostile
+#MONSTER:'g',"gremlin",(38,12),"Clown",hostile
+MONSTER:'g',"gremlin",(38,12),"クラウン",hostile
 
-MONSTER:'h',"mind flayer",(29,09),"Ginger",hostile
-MONSTER[80%]:'h',"mind flayer",(30,09),"Victoria",hostile
-MONSTER[80%]:'h',"mind flayer",(31,09),"Emma",hostile
-MONSTER[60%]:'h',"master mind flayer",(30,08),"Mel C.",hostile
-MONSTER[60%]:'h',"master mind flayer",(30,10),"Mel B.",hostile
+#MONSTER:'h',"mind flayer",(29,09),"Ginger",hostile
+MONSTER:'h',"mind flayer",(29,09),"ジンジャー",hostile
+#MONSTER[80%]:'h',"mind flayer",(30,09),"Victoria",hostile
+MONSTER[80%]:'h',"mind flayer",(30,09),"ヴィクトリア",hostile
+#MONSTER[80%]:'h',"mind flayer",(31,09),"Emma",hostile
+MONSTER[80%]:'h',"mind flayer",(31,09),"エマ",hostile
+#MONSTER[60%]:'h',"master mind flayer",(30,08),"Mel C.",hostile
+MONSTER[60%]:'h',"master mind flayer",(30,08),"メル・シー．",hostile
+#MONSTER[60%]:'h',"master mind flayer",(30,10),"Mel B.",hostile
+MONSTER[60%]:'h',"master mind flayer",(30,10),"メル・ビー．",hostile
 CONTAINER:'(',"chest",(30,09)
 OBJECT[70%]:'"',"amulet of flying",contained
 OBJECT:'/',"cold",contained,uncursed,+16
@@ -330,8 +344,10 @@
 TRAP[50%]:"anti magic",random
 
 # Engravings
-ENGRAVING:random,random,"You can feel eyes on your back."
-ENGRAVING:random,random,"I can see you..."
+#ENGRAVING:random,random,"You can feel eyes on your back."
+ENGRAVING:random,random,"君は背後に視線を感じる．"
+#ENGRAVING:random,random,"I can see you..."
+ENGRAVING:random,random,"君を見ているよ．．．"
 
 # doors
 DOOR:locked,(30,07)
diff -aurN slashem-0.0.7E6F2/dat/sea.des jslashem-0.0.7E6F2-J0.0.8/dat/sea.des
--- slashem-0.0.7E6F2/dat/sea.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/sea.des	2004-07-10 01:02:22.000000000 +0900
@@ -14,7 +14,8 @@
 #
 #
 MAZE: "sea",' '
-MESSAGE:"You hear the roar of the sea. That can't be right...."
+#MESSAGE:"You hear the roar of the sea. That can't be right...."
+MESSAGE:"あなたは海の波の音を聞き、耳を疑った．．．"
 GEOMETRY: center,center
 #0        1         2         3         4         5         6
 #1234567890123456789012345678901234567890123456789012345678901234567890
@@ -89,5 +90,6 @@
 MONSTER: ';',random,random,hostile
 MONSTER: ';',random,random,hostile
 MONSTER: ';',random,random,hostile
-ENGRAVING:(11,03),burn,"The lamp washed into the sea while I slept! Woe and damnnation!"
+#ENGRAVING:(11,03),burn,"The lamp washed into the sea while I slept! Woe and damnnation!"
+ENGRAVING:(11,03),burn,"私が寝ている隙に，ランプが波にさらわれてしまった！いまいましくてうんざりだ！"
 OBJECT: random,random,(11,03)
diff -aurN slashem-0.0.7E6F2/dat/stor-1.des jslashem-0.0.7E6F2-J0.0.8/dat/stor-1.des
--- slashem-0.0.7E6F2/dat/stor-1.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/stor-1.des	2004-06-27 23:30:56.000000000 +0900
@@ -12,7 +12,8 @@
 OBJECT:'(',random,(2,2)
 OBJECT:'"',random,(2,2)
 OBJECT:'=',random,(2,2)
-ENGRAVING:(2,2),burn,"Begone! Keep Off! Shoo!"
+#ENGRAVING:(2,2),burn,"Begone! Keep Off! Shoo!"
+ENGRAVING:(2,2),burn,"立ち去れ！入ってくんな！シッシッ！"
 TRAP: random, random
 TRAP: random, random
 TRAP: random, random
diff -aurN slashem-0.0.7E6F2/dat/stor-2.des jslashem-0.0.7E6F2-J0.0.8/dat/stor-2.des
--- slashem-0.0.7E6F2/dat/stor-2.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/stor-2.des	2004-06-27 23:32:08.000000000 +0900
@@ -13,7 +13,8 @@
 OBJECT:'=',random,(2,2)
 OBJECT:'=',"regeneration",(2,2)
 OBJECT:'*',random,(2,2)
-ENGRAVING:(2,2),burn,"Danger! Cursed Items! Do Not Touch!"
+#ENGRAVING:(2,2),burn,"Danger! Cursed Items! Do Not Touch!"
+ENGRAVING:(2,2),burn,"触るな危険！呪いの道具！"
 TRAP: random, random
 TRAP: random, random
 TRAP: random, random
diff -aurN slashem-0.0.7E6F2/dat/stor-3.des jslashem-0.0.7E6F2-J0.0.8/dat/stor-3.des
--- slashem-0.0.7E6F2/dat/stor-3.des	2004-05-03 19:16:58.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/dat/stor-3.des	2004-06-27 23:35:50.000000000 +0900
@@ -13,7 +13,8 @@
 OBJECT:'(',random,(2,2)
 OBJECT:'(',random,(2,2)
 OBJECT:'=',random,(2,2)
-ENGRAVING:(2,2),burn,"Property of the Wizard! Do Not Touch!"
+#ENGRAVING:(2,2),burn,"Property of the Wizard! Do Not Touch!"
+ENGRAVING:(2,2),burn,"イェンダーの魔法使いの所有物！ 触るな！"
 TRAP: random, random
 TRAP: random, random
 TRAP: random, random
diff -aurN slashem-0.0.7E6F2/doc/jGuidebook.mn jslashem-0.0.7E6F2-J0.0.8/doc/jGuidebook.mn
--- slashem-0.0.7E6F2/doc/jGuidebook.mn	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/doc/jGuidebook.mn	2004-07-07 20:59:16.000000000 +0900
@@ -0,0 +1,5025 @@
+.\" "Guidebook.mn" Japanese Translation
+.\"
+.\" Translated
+.\"   for NetHack 3.1.0 PL10 by Keizo Yamamoto
+.\"   for NetHack 3.1.3      by Kentaro Shirakata
+.\"   for JNetHack 1.0.5     by Issei Numata
+.\"   for NetHack 3.3.0      by Kentaro Shirakata
+.\"   for (J)NetHack 3.4     by Kentaro Shirakata <argrath@ub32.org>
+.\"   for (J)Slash'EM 0.06   by Masaki Miyaso
+.\"
+.\" Usage:
+.\"   tbl tmac.n jGuideBook.mn | nroff -Tnippon
+.\"
+.\"WORD:	Dungeoneer		洞窟の主
+.\"WORD:	the Mazes of Menace	恐怖の迷宮
+.\"WORD:	dungeon			洞窟
+.\"WORD:	proficiency		技量
+.\"
+.ds h0 "NetHack Guidebook
+.ds h1
+.ds h2 %
+.ds vr "SLASH'EM 0.0.7
+.ds f0 "\*(vr
+.ds f1
+.ds f2 "December 10, 2003
+.mt
+.\"O A Guide to the Mazes of Menace
+.\"O (Guidebook for SLASH'EM)
+
+恐怖の迷宮への招待
+(SLASH'EM ガイドブック)
+.au
+Eric S. Raymond
+.\"O (Extensively edited and expanded for NetHack 3.4)
+(NetHack 3.4のための広範囲な校訂と拡充)
+(Revised for SLASH'EM 0.0.3 by Warren Cheung)
+(Revised for SLASH'EM 0.0.6 by J. Ali Harlow)
+.hn 1
+.\"O Introduction
+はじめに
+.pg
+.\"O Recently, you have begun to find yourself unfulfilled and distant 
+.\"O in your daily occupation.  Strange dreams of prospecting, stealing, 
+.\"O crusading, and combat have haunted you in your sleep for many months, 
+.\"O but you aren't sure of the reason.  You wonder whether you have in 
+.\"O fact been having those dreams all your life, and somehow managed to 
+.\"O forget about them until now.  Some nights you awaken suddenly
+.\"O and cry out, terrified at the vivid recollection of the strange and 
+.\"O powerful creatures that seem to be lurking behind every corner of the 
+.\"O dungeon in your dream.  Could these details haunting your dreams be real?  
+.\"O As each night passes, you feel the desire to enter the mysterious caverns 
+.\"O near the ruins grow stronger.  Each morning, however, you quickly put 
+.\"O the idea out of your head as you recall the tales of those who entered 
+.\"O the caverns before you and did not return.  Eventually you can resist 
+.\"O the yearning to seek out the fantastic place in your dreams no longer.  
+.\"O After all, when other adventurers came back this way after spending time 
+.\"O in the caverns, they usually seemed better off than when they passed 
+.\"O through the first time.  And who was to say that all of those who did 
+.\"O not return had not just kept going?
+.\"O 
+最近、あなたは日々の仕事に満たされなく、敬遠しつつある自分に気がついた。
+最近数ヶ月、あなたが見る夢は探査、盗み、十字軍、戦闘といったものであったが、
+あなたにはその理由がはっきりとはわからなかった。
+あなたはこれらの夢を実際には生まれてこのかたずっと見続けていて、
+なぜか今までそれらについて忘れようとしていたのではないか、と思った。
+ある夜、あなたは飛び起きて、
+夢の中の洞窟のあらゆる角の後ろに潜んでいるように見える、
+奇妙で強力な怪物の鮮明な記憶にぞっとして大声で叫んだ。
+あなたの夢に出没する内容は本当なのだろうか?
+夜毎に、廃墟の近くの不思議な洞窟に入るという欲求が強くなった。
+それでも、毎朝あなたはそのような考えを、
+洞窟に入って帰って来なかった人々の話を思い出すことで頭から追い出した。
+しかし、ついにあなたは夢の中に出てくる不思議な場所を捜し求めるという思いを
+抑えきれなくなった。
+何といっても、冒険者は最初にその道を通っていった時より、
+こちらに戻って来る時の方が裕福になっているように見えるのだ。
+戻って来ない人たちは皆、単にまだ冒険を続けているだけなのでは?
+
+.pg
+.\"O Asking around, you hear about a bauble, called the Amulet of Yendor by some,
+.\"O which, if you can find it, will bring you great wealth.  One legend you were
+.\"O told even mentioned that the one who finds the amulet will be granted
+.\"O immortality by the gods.  The amulet is rumored to be somewhere beyond the
+.\"O Valley of Gehennom, deep within the Mazes of Menace.  Upon hearing the
+.\"O legends, you immediately realize that there is some profound and 
+.\"O undiscovered reason that you are to descend into the caverns and seek 
+.\"O out that amulet of which they spoke.  Even if the rumors of the amulet's 
+.\"O powers are untrue, you decide that you should at least be able to sell the 
+.\"O tales of your adventures to the local minstrels for a tidy sum, especially 
+.\"O if you encounter any of the terrifying and magical creatures of 
+.\"O your dreams along the way.  You spend one last night fortifying yourself 
+.\"O at the local inn, becoming more and more depressed as you watch the odds 
+.\"O of your success being posted on the inn's walls getting lower and lower.  
+あちこちで尋ねるうちに、あなたはある噂を耳にした。
+イェンダーの魔除けとかいうものがあり、手に入れることができたなら、
+すばらしい財産をもたらすと言うのだ。
+あなたが聞いたとある伝説では、
+魔除けを見つけたものは神から不死の体を授かるとさえ言われているらしい。
+魔除けは恐怖の迷宮の奥深く、ゲヘナの谷を越えたどこかにあるという噂である。
+伝説を聞いた瞬間、あなたは自分には洞窟に入って彼らの話している
+魔除けを捜し求めるべき深遠で未知のなんらかの理由があると確信した。
+あなたはたとえ魔除けの力が真実でなくても、
+少なくとも冒険談を地元のの吟遊詩人にかなりの金額で売り込めるだろうと考えた。
+夢の中で出てきた恐ろしく、不思議な怪物に出会うことができればなおさらである。
+あなたは地元の安宿で最後の宿を取り対策を練った。
+安宿の壁に掲げられた成功率のオッズが下がれば下がるほど、
+あなたは意気消沈した。
+
+.pg
+.\"O   In the morning you awake, collect your belongings, and 
+.\"O set off for the dungeon.  After several days of uneventful 
+.\"O travel, you see the ancient ruins that mark the entrance to the 
+.\"O Mazes of Menace.  It is late at night, so you make camp at the entrance 
+.\"O and spend the night sleeping under the open skies.  In the morning, you 
+.\"O gather your gear, eat what may be your last meal outside, and enter the 
+.\"O dungeon...
+朝起きると、あなたは所持品をかき集め、あなたは洞窟に向けて旅立った。
+無事何日かの旅を続けて恐怖の迷宮への入口を
+示す古代の遺跡へとたどり着いた。夜も更けていたので入口でキャンプをすることにし、
+その夜は広々とした空の下で眠りに就いた。翌朝あなたは道具をかき集め、
+もしかすると地上での最後になるかもしれない食事を済ませ、
+洞窟へと入っていった。
+
+.hn 1
+.\"O What is going on here?
+あなたを取り巻く状況
+.pg
+.\"O You have just begun a game of SLASH'EM.  Your goal is to grab as much
+.\"O treasure as you can, retrieve the Amulet of Yendor, and escape the
+.\"O Mazes of Menace alive.
+こうしてあなたは SLASH'EM というゲームを始めることになった。あなたの目的は
+持てる限りの宝を集め、イェンダーの魔除けを見つけ出し、さらにはこの恐怖
+の迷宮から生きて脱出することである。
+.pg
+.\"O Your abilities and strengths for dealing with the hazards of adventure
+.\"O will vary with your background and training:
+冒険におけるいろいろな困難に対応するための各種の能力や力は、
+あなたの生い立ちと修行によって変化する。
+.pg
+.\"O \fIArcheologists\fP understand dungeons pretty well; this enables them
+.\"O to move quickly and sneak up on the local nasties.  They start equipped
+.\"O with the tools for a proper scientific expedition.
+\fI考古学者(Archeologist)\fP は洞窟について多くの知識を持っている。
+このため素早く動いたり洞窟での不快な事態を切り抜けることができる。
+彼らは学術的調査のための探検旅行に適した道具を持って出発する。
+.pg
+.\"O \fIBarbarians\fP are warriors out of the hinterland, hardened to battle.
+.\"O They begin their quests with naught but uncommon strength, a trusty hauberk,
+.\"O and a great two-handed sword.
+\fI 野蛮人(Barbarian)\fP は奥地からやってきた戦士であり、戦闘のために鍛えられている。
+彼らは類まれな力の強さを持ち、丈夫な鎖かたびらと大きな両手持ちの
+剣のみを持って探求に出発する。
+.pg
+.\"O \fICavemen\fP and \fICavewomen\fP start with exceptional strength but,
+.\"O unfortunately, with neolithic weapons.
+\fI 洞窟人(Caveman と Cavewoman)\fPはとりわけ強い力を持っているが、
+新石器時代に使われた武器を持って出発する。
+.pg
+.\"O \fIFlame\fP Mages have managed to harness mystical energies into
+.\"O the control of the element of fire. Notwithstanding their pet hell hounds,
+.\"O woe be unto anyone who stands in the way of a skilled mage casting a fireball.
+\fI炎の魔術師(Flame Mage)\fP は火の精霊を制御して神秘のエネルギーを
+使用する。彼らのペットはヘルハウンドであるにもかかわらず、火の玉
+の魔法を詠唱する熟練した魔術師になるには困難が立ちふさがっている。
+.pg
+.\"O \fIHealers\fP are wise in medicine and apothecary.  They know the
+.\"O herbs and simples that can restore vitality, ease pain, anesthetize,
+.\"O and neutralize poisons; and with their instruments, they can divine a
+.\"O being's state of health or sickness.  Their medical practice earns them
+.\"O quite reasonable amounts of money, with which they enter the dungeon.
+\fI医者(Healer)\fPは医術や薬物について精通している。
+生気を回復させたり、苦痛を和らげたり、麻酔をかけたり、
+毒を中和させたりする香草や薬草について詳しい。
+そして器具を使って生物の健康状態を見抜くことができる。
+彼らは開業医としてかなりよい報酬を得て、それを持って洞窟に入っていく。
+.pg
+.\"O \fIIce Mages\fP command the forces of cold.  An experienced Mage can
+.\"O summon great blizzards yet remain unaffected by the turmoil of the elements.
+\fI氷の魔術師(Ice Mages)\fPは、冷気の力を支配する。
+経験を積んだ魔術師は大きな暴風雪を呼び出すことができるが、
+まだ精霊の騒動に関与できるまでにはなっていない。
+.pg
+.\"O \fIKnights\fP are distinguished from the common skirmisher by their
+.\"O devotion to the ideals of chivalry and by the surpassing excellence of
+.\"O their armor.
+\fI騎士(Knight)\fP は騎士道に忠実であることと防具が驚くほど優れていることとい
+う点で、普通の戦士とは区別される。
+.pg
+.\"O \fIMonks\fP are ascetics, who by rigorous practice of physical and mental
+.\"O disciplines have become capable of fighting as effectively without weapons
+.\"O as with.  They wear no armor but make up for it with increased mobility.
+\fI モンク(Monk) \fP は修道者であり、厳格な肉体的習慣と精神的訓練によって、
+武器なしでも武器を使うのと同じように戦うことが出来る。
+モンクは防具をつけないが、機動性を向上させることで埋め合わせている。
+.pg
+.\"O \fINecromancers\fP have delved into the darkest of the magical lore, and
+.\"O mastered some of the most forbidden of the magical lore.  Many have fallen
+.\"O to the armies of the undead that they are capable of bringing forth and
+.\"O controlling.
+\fI死人使い(Necromancers)\fP は魔術に関する英知のうち
+もっとも闇の部分を探求するものたちであり、
+それらのうちの禁呪とされるものをいくらかマスターしている。
+彼らのほとんどが自らが作り出しコントロールするアンデッドの軍隊を
+まるで義務であるかのように持っている。
+.pg
+.\"O \fIPriests\fP and \fIPriestesses\fP are clerics militant, crusaders
+.\"O advancing the cause of righteousness with arms, armor, and arts
+.\"O thaumaturgic.  Their ability to commune with deities via prayer
+.\"O occasionally extricates them from peril, but can also put them in it.
+\fI僧侶と尼僧(Priest と Priestess)\fP は聖職の戦士であり、
+武器と防具を持ち魔法の業を駆使して正義を広めんとする聖戦士である。
+祈りを通じて神と語る能力により、彼らはしばしば危難から逃れることができる…
+が、祈りは危難をもたらすこともある。
+.pg
+.\"O \fIRangers\fP are most at home in the woods, and some say slightly out
+.\"O of place in a dungeon.  They are, however, experts in archery as well
+.\"O as tracking and stealthy movement.
+\fI レンジャー(Ranger)\fP はほとんど森を住みかとし、洞窟は少々場違いかもしれない。
+しかし、彼らは追跡術や隠密行動と共に、弓術の達人である。
+.pg
+.\"O \fIRogues\fP are agile and stealthy thieves, with knowledge of locks,
+.\"O traps, and poisons.  They specialize in surprise, which they employ
+.\"O to great advantage.
+\fI 盗賊(Rogue)\fP は敏捷で身を隠す業に長けた泥棒であり、
+錠や罠や毒に詳しい。
+彼らは奇襲の達人であり、これは非常な長所となる。
+.pg
+.\"O \fISamurai\fP are the elite warriors of feudal Nippon.  They are heavily
+.\"O armored but quick, and wear the \fIdai-sho\fP, two swords of the deadliest
+.\"O keenness.
+\fI 侍(Samurai)\fP は封建時代の日本の精鋭の武人である。
+防具は重装備だが身のこなし
+に秀でており、この上なく研ぎ澄まされた \fI 大小 \fP 2本の刀を帯びている。
+.pg
+.\"O \fITourists\fP start out with lots of gold (suitable for shopping with),
+.\"O a credit card, lots of food, some maps, and an expensive camera.  Most
+.\"O monsters don't like being photographed.
+\fI 観光客(Tourist)\fP は多額の金(買物に最適である)とクレジットカード、大量の食料、
+地図、そして高価なカメラを持って出発する。
+ほとんどの怪物は写真に撮られるのを嫌うものである。
+.pg
+.\"O \fIUndead Slayers\fP are specialists,  trained to hunt the undead as well
+.\"O as other incarnations of evil.  They are well aware of the weaknesses of
+.\"O their foes and come prepared.  Few denizens of darkness ever encounter such
+.\"O warriors of light and live to tell of it.
+\fIアンデットスレイヤー(Undead Slayer)\fPは、他の悪しきものと同じようにアンデッドも狩り出すように
+訓練されている専門家である。彼らは、敵対者の弱点を熟知しており、準備して来る。
+闇の住人で光の戦士と相対し、生き延びてそれを伝えられるものは極わずかしか居ないだろう。
+.pg
+.\"O \fIValkyries\fP are hardy warrior women.  Their upbringing in the harsh
+.\"O Northlands makes them strong, inures them to extremes of cold, and instills
+.\"O in them stealth and cunning.
+\fI ワルキューレ(Valkyrie)\fP は勇敢な女戦士である。
+過酷なスカンジナビアの国々で育った彼女らは頑強で、厳しい寒さにも耐え、
+身を隠す業と巧妙さを身につけている。
+.pg
+.\"O \fIWizards\fP start out with a knowledge of magic, a selection of magical
+.\"O items, and a particular affinity for dweomercraft.  Although seemingly weak
+.\"O and easy to overcome at first sight, an experienced Wizard is a deadly foe.
+\fI 魔法使い(Wizard)\fPは魔術の知識とに選び抜かれた魔法の道具を準備しており、
+いにしえの魔法学に対して特に造詣が深い。
+見かけは弱そうで簡単に打ち倒せるように思えるが、
+経験を積んだ魔法使いは恐るべき敵である。
+.pg
+.\"O \fIYeomen\fP are sturdy fighters. They are famed for their ability to stand
+.\"O doing nothing for hours. It is said that this is because they are none too
+.\"O bright. Yeomen can both take a lot of damage and inflict it on others.
+\fI衛士(Yeomen)\fPは頑丈な戦士である。彼らは、何時間も何もせずに立っていられる能力で有名である。
+この能力は、彼らがあまりにも愚直だからできるのだと言われている。
+衛士は受けたたくさんのダメージを他者に与えることが可能である。
+.pg
+.\"O You may also choose the race of your character:
+また、キャラクターの種族も選ぶことができる。
+.pg
+.\"O \fIDoppelgangers\fP have the anviable ability to change form at will,  at
+.\"O a cost of some mystic energy (\fImana\fP),  although what they become
+.\"O may be a bit of a surprise,  even for them.
+\fIドッペルゲンガー(Doppelganger) \fPは意思により変身できる不思議な能力を持っている。
+神秘的なエネルギー(\fIマナ\fP)を使っているとはいえそれらはちょっとした
+脅威だろう。
+.pg
+.\"O \fIDwarves\fP are smaller than humans or elves, but are stocky and solid
+.\"O individuals.  Dwarves' most notable trait is their great expertise in mining
+.\"O and metalwork.  Dwarvish armor is said to be second in quality not even to the
+.\"O mithril armor of the Elves.
+\fI ドワーフ(Dwarf) \fP は人間やエルフよりも小さいが、がっしりした体つきで丈夫である。
+ドワーフの注目すべき特性は採掘と金属工作の専門的技術である。
+ドワーフの防具はエルフのミスリル防具と同じとまではいかないまでも、
+それに次ぐ品質である。
+.pg
+.\"O \fIElves\fP and \fIDrows\fP are agile, quick, and perceptive; very little of
+.\"O what goes on will escape an Elf.  The quality of Elven craftsmanship often
+.\"O gives them an advantage in arms and armor.
+\fI エルフ(Elf) \fP と \fI ドロウ(Drow) \fP は機敏さと迅速さ、そして鋭敏な感覚を
+持っている。周囲で起きるどんな些細なことも彼らの目を逃れることはできない。
+職人気質の彼らの持つ武器と防具は優秀なものである。
+.pg
+.\"O \fIGnomes\fP are smaller than but generally similar to dwarves.  Gnomes are
+.\"O known to be expert miners, and it is known that a secret underground mine
+.\"O complex built by this race exists within the Mazes of Menace, filled with
+.\"O both riches and danger.
+\fI ノーム(Gnome) \fP はドワーフよりもさらに小さいが、ドワーフと似ている。
+ノームは熟練した採掘師として知られ、
+富と危険で満ちている秘密の地下坑道を恐怖の迷宮に作っていることで知られる。
+.pg
+.\"O \fIHumans\fP are by far the most common race of the surface world, and
+.\"O are thus the norm by which other races are often compared.  Although
+.\"O they have no special abilities, they can succeed in any role.
+\fI 人間(Human) \fP は地上で最も一般的な種族で、ゆえに他の種族と比較される時の基準となっている。
+特別な能力は持っていないが、あらゆる職業で成功することができる。
+.pg
+.\"O \fILycanthropes\fP are wild beasts who draw their strength from the phases
+.\"O of the moon,  and can transform into wolves when they channel their magical
+.\"O energies.  Even unarmed,  a Lycanthrope is a savage fighter,  as many
+.\"O scarred by their deadly claws can attest.
+\fI 獣人(Lycanthrope) \fP は月の満ち欠けの力を引き出し、その魔力に
+よって狼に変身できる野獣である。 たとえ武装がなくても、獣人が残忍
+な戦士であると、 彼らの死をもたらす爪が生み出す無数の傷痕が証明し
+てくれるであろう。
+.pg
+.\"O \fIOrcs\fP are a cruel and barbaric race that hate every living thing
+.\"O (including other orcs).  Above all others, Orcs hate Elves with a passion
+.\"O unequalled, and will go out of their way to kill one at any opportunity.
+.\"O The armor and weapons fashioned by the Orcs are typically of inferior quality.
+\fI オーク(Orc) \fP は残酷で野蛮な種族で、(他のオークを含む)あらゆる生物を嫌っている。
+特に、オークはエルフを感性の違いゆえに嫌い、わざわざあらゆる機会を見つけて殺そうとする。
+オークによって作られた防具と武器は一般的に品質が劣る。
+.pg
+\fIVampires\fP strike fear into the heart of many. Their super-human strength,
+notorious dexterity and resiliance make them difficult to defeat while their
+almost hypnotic charm makes them dangerous opponents. Even their own Gods
+treat vampires with some distaste.
+.hn 1
+.\"O What do all those things on the screen mean?
+画面に表示されるものの意味
+.pg
+.\"O On the screen is kept a map of where you have
+.\"O been and what you have seen on the current dungeon level; as you
+.\"O explore more of the level, it appears on the screen in front of you.
+画面上にはあなたが現在いる洞窟の階
+ですでに探索を終えた部分の地図と、そこで目にした物が示されている。さら
+に深く探検を進めるに連れて洞窟はその姿を次第にあなたの前の画面に明らか
+にしていく。
+.pg
+.\"O When SLASH'EM's ancestor \fIrogue\fP first appeared, its screen
+.\"O orientation was almost unique among computer fantasy games.  Since
+.\"O then, screen orientation has become the norm rather than the
+.\"O exception; SLASH'EM continues this fine tradition.  Unlike text
+.\"O adventure games that accept commands in pseudo-English sentences and
+.\"O explain the results in words, SLASH'EM commands are all one or two
+.\"O keystrokes and the results are displayed graphically on the screen.  A
+.\"O minimum screen size of 24 lines by 80 columns is recommended; if the
+.\"O screen is larger, only a 21x80 section will be used for the map.
+SLASH'EM の祖先である \fIrogue\fP が最初に現れたとき、そのスクリーン指向は
+コンピュータファンタジーゲームの中でも全く独特のものであった。それ以来
+スクリーン指向は例外的なものというよりむしろ標準となった。SLASH'EM はこ
+のすばらしい伝統を受け継いでいる。疑似的な英語でコマンドを入力し、結果
+が文章で表示されるテキストアドベンチャーゲームとは異なり、SLASH'EM のコ
+マンドはすべて 1 文字か 2 文字のキー入力で与えられ、その結果は画面上に
+グラフィカルに表示される。画面は最低 80 桁および 24 行の大きさが推奨さ
+れる。それ以上の大きさがあっても 80 × 21 の領域だけが地図の表示に使わ
+れる。
+.pg
+.\"O SLASH'EM can even be played by blind players, with the assistance of Braille
+.\"O readers or speech synthesisers.  Instructions for configuring SLASH'EM for
+.\"O the blind are included later in this document.
+SLASH'EM は点字や音声合成の助けを借りて、目の不自由な人でもプレイできる。
+目の不自由な人のためのSLASH'EMの設定方法については、このドキュメントで
+後述する。
+.pg
+.\"O SLASH'EM generates a new dungeon every time you play it; even the
+.\"O authors still find it an entertaining and exciting game despite
+.\"O having won several times.
+SLASH'EM はプレイするたびに新しい洞窟を作成する。
+このため何回かゲームに勝利したことのある作者たちにも、
+いまだこのゲームは楽しく興奮に満ちたものと感じられる。
+.pg
+.\"O SLASH'EM offers a variety of display options.  The options available to you
+.\"O will vary from port to port, depending on the capabilities of your
+.\"O hardware and software, and whether various compile-time options were
+.\"O enabled when your executable was created.  The three possible display
+.\"O options are: a monochrome character interface, a color character interface,
+.\"O and a graphical interface using small pictures called tiles.  The two
+.\"O character interfaces allow fonts with other characters to be substituted,
+.\"O but the default assignments use standard ASCII characters to represent
+.\"O everything.  There is no difference between the various display options
+.\"O with respect to game play.  Because we cannot reproduce the tiles or
+.\"O colors in the Guidebook, and because it is common to all ports, we will
+.\"O use the default ASCII characters from the monochrome character display
+.\"O when referring to things you might see on the screen during your game.
+SLASH'EM はさまざまな表示のオプションを提供する。
+オプションはあなたのハードウェアやソフトウェアの能力に依存し、
+プラットフォーム毎にさまざまである。
+さまざまなコンパイル時のオプションは実行ファイルが作られたときにのみ可能となる。
+モノクロキャラクタインタフェース、
+カラーキャラクタインタフェース、
+タイルと呼ばれる小さな絵を用いたグラフィカルインタフェースの 3 つの表示方法がある。
+2 つのキャラクタインタフェースはフォントを他の文字に置き換えることもできるが、
+標準設定では 標準の ASCII キャラクタを用いて全てを表現する。
+さまざまな表示のオプションはゲーム内容には影響を与えない。
+タイルや色はガイドブックで表記できないし、
+それは全てのプラットフォームに共通ではないので、
+ゲーム中に表示されるものの説明としては
+モノクロキャラクタディスプレイで表示される標準の ASCII キャラクタを用いる。
+.pg
+.\"O In order to understand what is going on in SLASH'EM, first you must
+.\"O understand what SLASH'EM is doing with the screen.  The SLASH'EM screen
+.\"O replaces the ``You see ...'' descriptions of text adventure games.
+.\"O Figure 1 is a sample of what a SLASH'EM screen might look like.
+.\"O The way the screen looks for you depends on your platform.
+SLASH'EM で何が起きているのかを理解するには、まず SLASH'EM では画面が
+どうなっているのかを理解しなくてはならない。SLASH'EM の画面は、テキストアド
+ベンチャーゲームにおける「あなたは…を見た」のような文章の代わりである。
+図 1 は SLASH'EM では画面に何が表示されるかの一例である。
+画面がどのように表示されるかはプラットホームに依存する。
+
+.TS S
+center tab(~);
+a.
+_
+The bat bites!
+
+    ------
+    |....|    ----------
+    |.<..|####...@...$.|
+    |....-#   |...B....+
+    |....|    |.d......|
+    ------    -------|--
+
+
+
+Player the Rambler     St:12 Dx:7 Co:18 In:11 Wi:9 Ch:15  Neutral
+Dlvl:1 $:0  HP:9(12) Pw:3(3) AC:10 Exp:1/19 T:257 Weak
+
+_
+.TE
+.ce 1
+Figure 1
+
+.hn 2
+.\"O The status lines (bottom)
+ステータス行(画面の下部)
+.pg
+.\"O The bottom two lines of the screen contain several cryptic pieces of
+.\"O information describing your current status.  If either status line
+.\"O becomes longer than the width of the screen, you might not see all of
+.\"O it.  Here are explanations of what the various status items mean
+.\"O (though your configuration may not have all the status items listed
+.\"O below):
+画面の下 2 行には、あなたの現在の状態を表す暗号のような情報の断片が含まれている。
+どちらかの行が画面の幅よりも長くなるとその全部を見ることはできない
+かもしれない。以下に状態を示すいろいろな項目が何を意味するのかを述べる
+(コンフィグレーションによっては、以下に一覧されている状態を示す項目の
+すべてが表示されるとは限らない)。
+.\"O .lp "Rank  "
+.lp 名前とランク(Rank)
+.\"O Your character's name and professional ranking (based on the
+.\"O experience level, see below).
+あなたのキャラクタ名と(後述の経験レベルに基づく)職業別の等級。
+.\"O .lp Strength
+.lp 強さ(Strength)
+.\"O A measure of your character's strength; one of your six basic
+.\"O attributes.  A human character's attributes can range from 3 to 18 inclusive;
+.\"O non-humans may exceed these limits
+.\"O (occasionally you may get super-strengths of the form 18/xx, and magic can
+.\"O also cause attributes to exceed the normal limits).  The
+.\"O higher your strength, the stronger you are.  Strength affects how
+.\"O successfully you perform physical tasks, how much damage you do in
+.\"O combat, and how much loot you can carry.
+あなたのキャラクタの力の強さの値であり、6 つの基本的な属性の 1 
+つである。人間のキャラクターの場合，力の強さは 3 から 18 の間の値をとる。
+その他の場合，この制限を越えることもある
+(時折 18/xx のような特別な力を得ることもあり、魔法の力も普通の制限を越える
+能力を与えることがある)。
+力の強さの値が大きいほど、あなたの力は強い。
+力の強さは力仕事をどれだけうまくやれるか、戦いでどれだけの
+ダメージを与えるか、どれくらい荷物を運べるかに影響する。
+.\"O .lp Dexterity
+.lp 素早さ(Dexterity)
+.\"O Dexterity affects your chances to hit in combat, to avoid traps, and
+.\"O do other tasks requiring agility or manipulation of objects.
+素早さは戦いにおける命中率、罠を逃れる可能性、そしてその他の
+敏捷さを必要とする仕事や物をいかに器用に扱えるかなどのことがら
+に影響を与える。
+.\"O .lp Constitution
+.lp
+耐久力(Constitution)
+.\"O Constitution affects your ability to recover from injuries and other
+.\"O strains on your stamina.
+耐久力は怪我やその他の圧迫によるスタミナの消耗から回復する能力に影響する。
+.\"O .lp Intelligence
+.lp 知力(Intelligence)
+.\"O Intelligence affects your ability to cast spells and read spellbooks.
+知力は呪文を唱える能力や魔法書を読む能力に影響を与える。
+.\"O .lp Wisdom
+.lp 賢さ(Wisdom)
+.\"O Wisdom comes from your practical experience (especially when dealing with
+.\"O magic).  It affects your magical energy.
+賢さは(特に魔法を扱う)実戦的な経験により得られる。
+魔法のエネルギーに影響する。
+.\"O .lp Charisma
+.lp 魅力(Charisma)
+.\"O Charisma affects how certain creatures react toward you.  In
+.\"O particular, it can affect the prices shopkeepers offer you.
+魅力はある種の生物があなたに対してとる態度に影響を与える。
+特に店主が示す価格に影響する。
+.\"O .lp Alignment
+.lp 属性(Alignment)
+.\"O \fBLawful\fP, \fBNeutral\fP, or \fBChaotic\fP.  Often, Lawful is
+.\"O taken as good and Chaotic as evil, but legal and ethical do not always
+.\"O coincide.  Your alignment influences how other
+.\"O monsters react toward you.  Monsters of a like alignment are more likely
+.\"O to be non-aggressive, while those of an opposing alignment are more likely
+.\"O to be seriously offended at your presence.
+属性には \fB 秩序 (Lawful)\fP, \fB 中立 (Neutral)\fP,
+\fB 混沌(Chaotic)\fP がある。
+しばしば、秩序は善、混沌は悪であるとされるが、法と道徳が
+常に一致するとは限らない。
+あなたの属性は他の怪物のあなたに対する反応に影響を与える。
+属性が似ている怪物は好戦的ではなく、
+反対の属性に対してはあなたの存在に対して極めて好戦的であるらしい。
+.\"O .lp "Dungeon Level
+.lp "階数(Dungeon Level)"
+.\"O How deep you are in the dungeon.  You start at level one and the number
+.\"O increases as you go deeper into the dungeon.  Some levels are special,
+.\"O and are identified by a name and not a number.  The Amulet of Yendor is
+.\"O reputed to be somewhere beneath the twentieth level.
+どれだけ洞窟の奥深くまで行ったかを示す。
+初期値は 1 で、洞窟を奥深く行くほど大きな値になる。
+いくつかの階は特別で、数字ではなく名前で識別される。
+イェンダーの魔除けは地下 20 階より深くのどこかにあると考えられている。
+.\"O .lp "Gold  "
+.lp 金(Gold)
+.\"O The number of gold pieces you are openly carrying.  Gold which you have
+.\"O concealed in containers is not counted.
+大っぴらに所持している金塊の量である。箱などに隠したお金は勘定に入っていない。
+.\"O .lp "Hit Points
+.lp "体力(Hit Points)
+.\"O Your current and maximum hit points.  Hit points indicate how much
+.\"O damage you can take before you die.  The more you get hit in a fight,
+.\"O the lower they get.  You can regain hit points by resting, or by using
+.\"O certain magical items or spells.  The number in parentheses is the maximum
+.\"O number your hit points can reach.
+体力の現在値と最大値である。
+体力はあとどれだけのダメージを受けると死ぬかを示す。
+戦いで傷つくほど値は減少する。体力は休息や魔法のアイテムや呪文により回復できる。
+括弧の中の数字は体力のとり得る最大値である。
+.\"O .lp Power
+.lp 魔力(Power)
+.\"O Spell points.  This tells you how much mystic energy (\fImana\fP)
+.\"O you have available for spell casting.  Again, resting will regenerate the
+.\"O amount available.
+呪文に使う魔力である。これは呪文を唱えるのに必要な神秘の力
+(\fImana: マナ \fP) がどれほどあるかを示す。
+魔力もまた休息することにより回復する。
+.\"O .lp "Armor Class
+.lp "防御値(Armor Class)
+.\"O A measure of how effectively your armor stops blows from unfriendly
+.\"O creatures.  The lower this number is, the more effective the armor; it
+.\"O is quite possible to have negative armor class. 
+非友好的な生物からの攻撃を防具がどれほど食い止められるかを示す値である。
+数字が小さいほど防具は有効であり、
+防御値が負の値になることさえ十分あり得る。
+.\"O .lp Experience
+.lp 経験値(Experience)
+.\"O Your current experience level and experience points.  As you
+.\"O adventure, you gain experience points.  At certain experience point
+.\"O totals, you gain an experience level.  The more experienced you are,
+.\"O the better you fight and withstand magical attacks.  Many dungeons
+.\"O show only your experience level here.
+現在の経験レベルと経験値である。冒険が進むと経験値を得ること
+ができる。経験値の合計がある一定値まで達すると、経験レベルが上
+がる。経験を積むにつれ、戦い方が上達し魔法の攻撃にも耐えられるよ
+うになる。多くのバージョンでは経験レベルだけが表示される。
+.\"O .lp Weight
+.lp 重さ(Weight)
+.\"O The total weight of all items in your inventory, displayed if you have the
+.\"O .op showweight
+.\"O option set. The number after the slash is your carrying capacity.
+所持しているアイテムの全重量、これを表示したい場合、
+.op showweight
+オプションがオンにする。 スラッシュの後ろの数字が(よろめかずに)持ち運べる最大重量である。
+.\"O .lp "Time  "
+.lp 時間(Time)
+.\"O The number of turns elapsed so far, displayed if you have the
+.\"O .op time
+.\"O option set.
+経過したターン数である。
+.op time
+オプションがオンのときに表示される。
+.\"O .lp "Hunger status
+.lp "腹具合(Hunger status)
+.\"O Your current hunger status, ranging from \fBSatiated\fP down to
+.\"O \fBFainting\fP.  If your hunger status is normal, it is not displayed.
+現在の腹具合である。腹具合は \fB 満腹(Satiated)\fP から
+\fB ふらふら(Fainting) \P までの値をとる。腹具合が普通なら表示されない。
+.pg
+.\"O Additional status flags may appear after the hunger status:  \fBConf\fP
+.\"O when you're confused, \fBFoodPois\fP or \fBIll\fP
+.\"O when sick, \fBBlind\fP when you can't
+.\"O see, \fBStun\fP when stunned, and \fBHallu\fP when hallucinating.
+この他にも状態を示す表示が腹具合の後ろに表示されることがあるかもしれ
+ない。混乱しているときには \fBConf\fP、病気のときには \fBFoodPois\fP または \fBIll\fP、
+目が見えないときには \fBBlind\fP、眩暈がしたときは \fBStun\fP、
+幻覚を見ているときは \fBHallu\fP と表示される。
+.hn 2
+.\"O The message line (top)
+メッセージ行(画面の上部)
+.pg
+.\"O The top line of the screen is reserved for messages that describe
+.\"O things that are impossible to represent visually.  If you see a
+.\"O ``\fB--More--\fP'' on the top line, this means that SLASH'EM has
+.\"O another message to display on the screen, but it wants to make certain
+.\"O that you've read the one that is there first.  To read the next message,
+.\"O just press the space bar.
+画面の最上行は視覚的に表現できないことを説明するメッセージのために使われる。
+最上行に``\fB--More--\fP''が表示されたときは、
+このあとにさらにメッセージが続いているけれども
+現在のメッセージをまず確実に読むよう促しているということである。
+次のメッセージを読むためには単にスペースキーを押せばよい。
+.hn 2
+.\"O The map (rest of the screen)
+地図(画面のその他の部分)
+.pg
+.\"O The rest of the screen is the map of the level as you have explored it
+.\"O so far.  Each symbol on the screen represents something.  You can set
+.\"O various graphics options to change some of the symbols the game uses;
+.\"O otherwise, the game will use default symbols.  Here is a list of what the
+.\"O default symbols mean:
+画面のその他の部分は、あなたが現在いる階で
+それまでに探索し終わった部分の地図である。
+画面上のシンボルはそれぞれ何かを表している。
+表示されるシンボルのうちいくつかは、
+さまざまなグラフィックオプションを設定することによって変えることができる。
+そうでなければ標準設定のシンボルが用いられる。
+次に標準設定のシンボルの意味の一覧を示す。
+.\"O .lp "- and |
+.lp "- と |
+.\"O The walls of a room, or an open door.  Or a grave (|).
+部屋の壁、または開いた扉、または墓 (|)。
+.lp .
+.\"O The floor of a room, ice, or a doorless doorway.
+部屋の床、氷、または扉のない出入口。
+.lp #
+.\"O A corridor, or iron bars, or a tree, or possibly a kitchen sink (if
+.\"O your dungeon has sinks), or a drawbridge.
+通路、鉄の棒、木、あるいは台所の流し台(流し台がインプリメントされているとき)
+または跳ね橋
+.lp >
+.\"O Stairs down: a way to the next level.
+上り階段:上の階への通路。
+.lp <
+.\"O Stairs up: a way to the previous level.
+下り階段:下の階への通路。
+.lp +
+.\"O A closed door, or a spellbook containing a spell you may be able to learn.
+閉じた扉、または学習できるかもしれない呪文の書かれた魔法書。
+.lp @
+.\"O Your character or a human.
+あなたのキャラクター、または人間。
+.lp $
+.\"O A pile of gold.
+金塊の山。
+.lp ^
+.\"O A trap (once you have detected it).
+罠(ひとたび発見すれば表示される)。
+.lp )
+.\"O A weapon.
+武器。
+.lp [
+.\"O A suit or piece of armor.
+服またはなんらかの防具。
+.lp %
+.\"O Something edible (not necessarily healthy).
+食料(衛生的であるとは限らない)。
+.lp ?
+.\"O A scroll.
+巻物。
+.lp /
+.\"O A wand.
+杖。
+.lp =
+.\"O A ring.
+指輪。
+.lp !
+.\"O A potion.
+水薬。
+.lp (
+.\"O A useful item (pick-axe, key, lamp...).
+便利なアイテム(つるはし、鍵、ランプ…)。
+.lp """
+.\"O An amulet or a spider web.
+.lp *
+.\"O A gem or rock (possibly valuable, possibly worthless).
+宝石または岩(貴重なものかもしれないし、価値のないものかもしれない)。
+.lp `
+.\"O A boulder or statue.
+岩、または彫像。
+.lp 0
+.\"O An iron ball.
+鉄球。
+.lp _
+.\"O An altar, or an iron chain.
+祭壇、または鉄の鎖。
+.lp {
+.\"O A fountain.
+泉
+.lp }
+.\"O A pool of water or moat or a pool of lava.
+水たまり、または堀、または溶岩の海。
+.lp "\e
+.\"O An opulent throne.
+豪華な王座
+.\"O .lp "a-zA-Z and other symbols
+.lp "a-zA-Z およびその他のシンボル
+.\"O Letters and certain other symbols represent the various inhabitants
+.\"O of the Mazes of Menace.  Watch out, they can be nasty and vicious.
+.\"O Sometimes, however, they can be helpful.
+これらの文字とその他のいくつかのシンボルは恐怖の迷宮のいろいろな住人たちを表す。
+彼らは不機嫌で悪意に満ちているかも知れないので警戒しなければならない。
+が、ときには何かの手助けになることもある。
+.lp I
+.\"O This marks the last known location of an invisible or otherwise unseen
+.\"O monster.  Note that the monster could have moved.  The 'F' and 'm' commands
+.\"O may be useful here.
+このマークは透明、あるいはその他の見えない怪物が最後にいたらしい場所に表示される。
+怪物はすでに移動しているかもしれないことに注意すること。
+ここでは'F'と'm'のコマンドが便利だろう。
+.pg
+.\"O You need not memorize all these symbols; you can ask the game what any
+.\"O symbol represents with the `/' command (see the next section for
+.\"O more info).
+これらのシンボルをすべて記憶する必要はない。`/' コマンドでどのシンボ
+ルが何を表すか知ることができる(詳細は次の項を参照のこと)。
+
+.hn 1
+.\"O Commands
+コマンド
+.pg
+.\"O Commands are initiated by typing one or two characters.  Some commands,
+.\"O like ``search'', do not require that any more information be collected by
+.\"O SLASH'EM.  Other commands might require additional information, for
+.\"O example a direction, or an object to be used.  For those commands that
+.\"O require additional information, SLASH'EM will present you with either a
+.\"O menu of choices or with a command line prompt requesting information.  Which
+.\"O you are presented with will depend chiefly on how you have set the
+.\"O .op menustyle
+.\"O option.
+コマンドは 1 文字か 2 文字のキー入力を行うことで実行される。
+いくつかのコマンド、例えば``search''はそれ以上 SLASH'EM に情報を与える必要がない。
+他のコマンドは例えば方向や使用する物などの情報をさらに与える必要がある。
+これらさらなる情報を必要とするコマンドに対しては、
+SLASH'EM は選択メニューもしくはコマンドラインプロンプトのいずれかを表示する。
+どちらが表示されるかは主として
+.op menustyle
+オプションをどのように設定したかによる。
+.pg
+.\"O For example, a common question, in the form ``What do you want to
+.\"O use?\ [a-zA-Z\ ?*]'', asks you to choose an object you are carrying.
+.\"O Here, ``a-zA-Z'' are the inventory letters of your possible choices.
+.\"O Typing `?' gives you an inventory list of these items, so you can see
+.\"O what each letter refers to.  In this example, there is also a `*'
+.\"O indicating that you may choose an object not on the list, if you
+.\"O wanted to use something unexpected.  Typing a `*' lists your entire
+.\"O inventory, so you can see the inventory letters of every object you're
+.\"O carrying.  Finally, if you change your mind and decide you don't want
+.\"O to do this command after all, you can press the ESC key to abort the
+.\"O command.
+例えば ``What do you want to use?\ [a-zA-Z\ ?*]'' という形式の質問がよくあるが、
+これはあなたに持っている物のうちどれを選ぶかを尋ねるものである。
+この質問において「a-zA-Z」はあなたが選べる持物の目録記号である。
+`?' を入力するとこれらの物の目録一覧が得られ、
+個々の記号が何を表しているのか知ることができる。
+この例では、`*' もある。これは一覧には表示されておらず、
+通常そのコマンドでの使用を想定していない物でも、使おうと思えばそれを
+選ぶことができることを示している。`*' を入力するとすべての持物の目録が
+表示され、個々の持物すべてについての目録記号を知ることができる。
+考え直して結局このコマンドを使わないことにしたときには ESC キーを押せば
+コマンドを終了することができる。
+.pg
+Some commands allow you to choose an object that you are not currently
+carrying. Such commands have an extra option available as in ``What do
+you want to drink?\ [fgh or ?*,.]''. Typing `,' gives you a list of the
+applicable objects on the floor, from which you may make your choice.
+For commands where it is possible to choose your current location rather
+than an object, the `.' option will be displayed. This can be used to
+read an engraving or drink from a dungeon feature.
+.pg
+.\"O You can put a number before some commands to repeat them that many
+.\"O times; for example, ``10s'' will search ten times.  If you have the
+.\"O .op number_pad
+.\"O option set, you must type `n' to prefix a count, so the example above
+.\"O would be typed ``n10s'' instead.  Commands for which counts make no
+.\"O sense ignore them.  In addition, movement commands can be prefixed for
+.\"O greater control (see below).  To cancel a count or a prefix, press the
+.\"O ESC key.
+コマンドの中には、その前に数字を入力することで何回も繰り返すこと
+ができるものもある。例えば「10s」は 10 回の探索を表している。もし
+.op number_pad
+オプションがオンのときには数字の前に `n' を入力しなければならない。
+つまり上の例では代わりに「n 10s」と入力しなければならない。
+複数回実行することが無意味なコマンドではこれは無視される。
+さらに、移動コマンドの前に特定の文字(プレフィックス)を付けることによって
+さまざまな移動方法をとることができる(後述)。
+繰り返し回数やプレフィックスを取り消すためには ESC キーを押せばよい。
+.pg
+.\"O The list of commands is rather long, but it can be read at any time
+.\"O during the game through the `?' command, which accesses a menu of
+.\"O helpful texts.  As well,  there is now a menusystem available
+.\"O through the '`' command for those who would rather page through
+.\"O menus than hunt and peck for keys. Here are the commands for your reference:
+コマンドの一覧はかなり長いが、ゲーム中に `?' コマンドを使用して
+ヘルプメニューを見ることにより、いつでもコマンドの一覧を見ることができる。
+また、キーを捜して押すよりもメニューを使うほうがいいという人のために
+'~'コマンドによる新しいメニューシステムもある。
+以下はコマンドの一覧である。
+.lp ESC
+.\"O Cancel the current operation (where applicable) or skip messages. If the
+現在の処理を適当な場所でキャンセルしたりメッセージをスキップしたりする。もし
+.op menu_on_esc
+.\"O option is set, then this key will access the menusystem when pressed while
+.\"O the program is waiting for a command.
+オプションが有効ならば、ゲームがコマンド入力待ち状態のときにこのキーを押すことで
+メニューシステムを使用することができる。
+.lp ?
+.\"O Help menu:  display one of several help texts available.
+ヘルプメニュー: 表示可能なヘルプ画面のうちの 1 つを表示する。
+.lp ~
+.\"O Main menu:  access the menusystem.
+メインメニュー：メニューシステムを使用する。
+.lp /
+.\"O Tell what a symbol represents.  You may choose to specify a location
+.\"O or type a symbol (or even a whole word) to explain.
+シンボルが何を意味するかを示す。指定するには場所を示すか、
+またはシンボル(あるいは単語全体)を入力するかを選択することができる。
+.\"O Specifying a location is done by moving the cursor to a particular spot
+.\"O on the map and then pressing one of `.', `,', `;',
+.\"O or `:'.  `.' will explain the symbol at the chosen location,
+.\"O conditionally check for ``More info?'' depending upon whether the
+.\"O .op help
+.\"O option is on, and then you will be asked to pick another location;
+.\"O `,' will explain the symbol but skip any additional
+.\"O information; `;' will skip additional info and also not bother asking
+.\"O you to choose another location to examine; `:' will show additional
+.\"O info, if any, without asking for confirmation.  When picking a location,
+.\"O pressing the ESC key will terminate this command, or pressing `?'
+.\"O will give a brief reminder about how it works.
+.pg
+場所の指定は、適切な位置までカーソルを移動させてから`.'、`,'、`;'、`:'の
+どれかを押すことによって行なう。
+`.'を押すと、選んだ場所で表示されているシンボルの説明が表示され、
+もし
+.op help
+オプションがオンなら場合によっては``More info?''(詳細を見る?)と質問され、
+それからさらに他の場所を指定することができる。
+`,'を押すと、シンボルの説明が表示されるが、詳細情報は表示されない。
+`;'を押すと、詳細情報は表示されず、さらに他の場所の指定もできない。
+`:'を押すと、(もしあるなら)確認なしで詳細情報が表示される。
+場所を選ぶ時に ESC キーを押すことによってこのコマンドを中断でき、
+`?'を押すとどのように動作するかの簡単な説明が表示される。
+.\"O Specifying a name rather than a location
+.\"O always gives any additional information available about that name.
+場所でなく名前を指定した場合は、
+常にその名前に対する追加情報が表示される。
+.lp &
+.\"O Tell what a command does.
+コマンドの動作を示す。
+.lp <
+.\"O Go up to the previous level (if you are on a staircase or ladder).
+上の階へ行く(階段やはしごにいるとき)。
+.lp >
+.\"O Go down to the next level (if you are on a staircase or ladder).
+下の階へ行く(階段やはしごにいるとき)。
+.lp [yuhjklbn]
+.\"O Go one step in the direction indicated (see Figure 2).  If you sense
+.\"O or remember
+.\"O a monster there, you will fight the monster instead.  Only these
+.\"O one-step movement commands cause you to fight monsters; the others
+.\"O (below) are ``safe.''
+指定した方向へ一歩進む(図 2 参照)。その方向に怪物がいると感じているか
+覚えているときは、
+移動するのではなく怪物と戦うことになる。
+怪物と戦うことになるのはこの一歩移動のコマンドだけである。
+その他のコマンド(後述)は「安全」である。
+.sd
+.TS S
+center;
+c c.
+y  k  u	7  8  9
+\e | /	\e | /
+h- . -l	4- . -6
+/ | \e	/ | \e
+b  j  n	1  2  3
+.\"O 	(if \fBnumber_pad\fP is set)
+	(\fBnumber_pad\fP がオンのとき)
+.TE
+.ed
+.ce 1
+Figure 2
+
+.lp [YUHJKLBN]
+.\"O Go in that direction until you hit a wall or run into something.
+壁に突き当たるか何かに衝突するまで指定した方向に進む。
+.lp m[yuhjklbn]
+.\"O Prefix:  move without picking up objects or fighting (even if you remember
+.\"O a monster there)
+プレフィックス: 物を拾ったり、
+(たとえそこに怪物がいると思っていても)戦ったりせずに移動する。
+.lp F[yuhjklbn]
+.\"O Prefix:  fight a monster (even if you only guess one is there)
+プレフィックス: (そこに怪物がいると予想しているだけでも)怪物と戦う
+.lp M[yuhjklbn]
+.\"O Prefix:  move far, no pickup.
+プレフィックス: 物を拾わずに遠くへ移動する。
+.lp "g[yuhjklbn]
+.\"O Prefix:  move until something interesting is found.
+プレフィックス: 何かが見つかるまで移動する。
+.lp "G[yuhjklbn] or <CONTROL->[yuhjklbn]
+.\"O Prefix:  same as `g', but forking of corridors is not considered interesting.
+プレフィックス: 'g' と同じ。ただし通路の分岐点では止まらない。
+.lp _
+.\"O Travel to a map location via a shortest-path algorithm.  The shortest path
+.\"O is computed over map locations the hero knows about (e.g. seen or
+.\"O previously traversed).  If there is no known path, a guess is made instead.
+指定された位置まで、最短距離アルゴリズムを用いて移動する。
+最短距離は、あなたが知っている(見た、または以前に通った)地図配置を
+基に計算される。
+知っている道がない場合、代わりに推測が行われる。
+.\"マウスに対応している版では、現在位置以外の位置を
+.\"マウスでクリックしたときにもこのコマンドが発動する。
+.\"O Stops on most of
+.\"O the same conditions as the `G' command, but without picking up
+.\"O objects, similar to the `M' command.  For ports with mouse 
+`G'コマンドとほぼ同じ条件で停止するが、
+`M'コマンドと同様に物を拾わないで移動する。
+.lp .
+.\"O Rest, do nothing for one turn.
+休憩する。1 ターン何もしない。
+.lp a
+.\"O Apply (use) a tool (pick-axe, key, lamp...).
+道具(つるはし、鍵、ランプ…)を用いる(使う)。
+.lp A
+.\"O Remove one or more worn items, such as armor.
+.\"O Use `T' (take off) to take off only one piece of armor 
+.\"O or `R' (remove) to take off only one accessory.
+1 つまたは複数の身につけているもの(防具など)をはずす。防具を1 
+つだけはずすときには 'T'(take off: 防具をはずす)を、アクセサリを
+1 つだけはずすときは 'R'(remove: アクセサリをはずす)を使用せよ。
+.lp ^A
+.\"O Redo the previous command.
+1 つ前のコマンドを繰り返す。
+.lp ^B
+.\"O Borrow (steal) money from an adjacent monster.
+隣接した怪物からお金を盗む。
+.lp c
+.\"O Close a door.
+扉を閉じる。
+.lp C
+.\"O Call (name) an individual monster.
+個々の怪物に名前を付ける。
+.lp ^C
+.\"O Panic button.  Quit the game.
+パニックボタン。ゲームを放棄する。
+.lp d
+.\"O Drop something.  Ex. ``d7a'' means drop seven items of object \fIa\fP.
+何かを下に置く。例:「d7a」は a という物を 7 個下に置くことを意味する。
+.lp D
+.\"O Drop several things.  In answer to the question
+.\"O ``What kinds of things do you want to drop? [!%= BUCXaium]''
+.\"O you should type zero or more object symbols possibly followed by 
+.\"O `a' and/or `i' and/or `u' and/or `m'.  In addition, one or more of
+.\"O the blessed/uncursed/cursed groups may be typed.
+いくつかの物を下に置く。``What kinds of things do you want to drop?[!%= BUCXaium]''
+(どの種類のものを置きますか?)
+の質問に対して、0 個以上の物のシンボルを入力することで答える。
+さらに`a', `i', `m', `u' をその後に入力することもできる。
+加えて、祝福された(B)/呪われていない(U)/呪われた(C)アイテムを指定することもできる。
+.sd
+.si
+.\"O DB  - drop all objects known to be blessed.
+.\"O DU  - drop all objects known to be uncursed.
+.\"O DC  - drop all objects known to be cursed.
+.\"O DX  - drop all objects of unknown B/U/C status.
+.\"O Da  - drop all objects, without asking for confirmation.
+.\"O Di  - examine your inventory before dropping anything.
+.\"O Du  - drop only unpaid objects (when in a shop).
+.\"O Dm  - use a menu to pick which object(s) to drop.
+.\"O D%u - drop only unpaid food.
+DB  - 祝福されていると判明している物全てを下に置く。
+DU  - 呪われていないと判明している物全てを下に置く。
+DC  - 呪われていると判明している物全てを下に置く。
+DX  - 祝福/呪いが判明していない物全てを下に置く。
+Da - 確認なしにすべての物を下に置く。
+Di - 物を置く前に持ち物を確認する。
+Du - (店にいるとき)代金未払の物だけを下に置く。
+Dm - 置く物を選ぶのにメニューを用いる。
+D%u - 代金未払の食料だけを下に置く。
+.ei
+.ed
+.lp ^D
+.\"O Kick something (usually a door).
+何か(普通は扉)を蹴る。
+.lp e
+.\"O Eat food. Vampires cannot eat as such. However, they can gain nutrition by
+.\"O draining blood from fresh corpses using this command.
+食料を食べる。吸血鬼は食べることはできないが、このコマンドを使用することで新鮮な
+死体から体液を吸うことで食欲を満たせる。
+.\"O .\" Make sure Elbereth is not hyphenated below, the exact spelling matters
+.hw Elbereth
+.lp E
+.\"O Engrave a message on the floor.
+.\"O Engraving the word ``Elbereth'' will cause most monsters to not attack
+.\"O you hand-to-hand (but if you attack, you will rub it out); this is
+.\"O often useful to give yourself a breather.  (This feature may be compiled out
+.\"O of the game, so your version might not have it.)
+床にメッセージを刻み込む。``Elbereth'' という語を刻み込むと、
+たいていの怪物はあなたに白兵戦を挑んで来なくなる
+(しかしあなたが攻撃をすると文字は消えてしまう)。
+これは、一息いれたいときになかなか便利である。
+(この機能はコンパイル時に削除されているかも知れないので、
+あなたのバージョンで必ずしも機能するとは限らない。)
+.sd
+.si
+.\"O E- - write in the dust with your fingers.  
+E- - ほこりの中に指で書く。
+.ei
+.ed
+.lp f
+.\"O Fire one of the objects placed in your quiver.  You may select
+.\"O ammunition with a previous `Q' command, or let the computer pick
+.\"O something appropriate if
+.\"O .op autoquiver
+.\"O is true.
+矢筒に入れてあるものを発射する。
+発射するものは予め`Q'コマンドで選択することも出来るし、
+.op autoquiver
+オプションが設定されている場合は、コンピューターに
+自動的に適当なものを設定させることもできる。
+.lp i
+.\"O List your inventory (everything you're carrying).
+持物の目録(持っている物すべて)を表示する。
+.lp I
+.\"O List selected parts of your inventory.
+持物の目録のうち指定した一部を表示する。
+.sd
+.si
+.\"O I* - list all gems in inventory;
+.\"O Iu - list all unpaid items;
+.\"O Ix - list all used up items that are on your shopping bill;
+.\"O I$ - count your money.
+I* - 持物のうち宝石をすべて表示する。
+Iu - 代金未払いの物をすべて表示する。
+Ix - 代金未払いだが使ってしまった物をすべて表示する。
+I$ - お金を数える。
+.ei
+.ed
+.lp o
+.\"O Open a door.
+扉を開ける。
+.lp O
+.\"O Set options.  A menu showing the current option values will be
+.\"O displayed.  You can change most values simply by selecting the menu
+.\"O entry for the given option (ie, by typing its letter or clicking upon
+.\"O it, depending on your user interface).  For the non-boolean choices,
+.\"O a further menu or prompt will appear once you've closed this menu.
+オプションを設定する。
+現在のオプションの値の一覧が表示される。
+(見出し文字をタイプするかクリックすることによって)変更したいオプションを選んで、
+ほとんどの値を変更することができる。
+ブール値でないオプションの場合は、さらにメニューが出るか、プロンプトが出る。
+.\"O The available options
+.\"O are listed later in this Guidebook.  Options are usually set before the
+.\"O game rather than with the `O' command; see the section on options below.
+設定可能なオプションはこのガイドブックの後ほどに一覧がある。
+オプションは通常は `O' コマンドではなく、ゲームを始める前に設定する。
+後述のオプションの項を参照のこと。
+.lp p
+.\"O Pay your shopping bill/Shopkeeper services.
+代金を払う、もしくはサービスを受ける。
+.lp P
+.\"O Put on a ring or other accessory (amulet, blindfold).
+指輪、あるいはその他の装飾品（魔除け、目隠し）を身につける。
+.lp ^P
+.\"O Repeat previous message.  Subsequent ^P's repeat earlier messages.
+.\"O The behavior can be varied via the msg_window option.
+1 つ前のメッセージをもう一度表示する。
+続けて ^P を入力するとさらに前のメッセージが順に表示される。
+この振る舞いは msg_windows オプションによって変化する。
+.lp q
+.\"O Quaff (drink) something (potion, water, etc).
+何か(水薬，水など)を飲む。
+.lp Q
+.\"O Select an object for your quiver.  You can then throw this using
+.\"O the `f' command.  (In SLASH'EM versions prior to 0.0.6 this was the command
+.\"O to quit the game, which has now been moved to `#quit'.)
+矢筒に入れるものを選択する。
+ここで選択したものは`f'コマンドで発射することができる。
+(SLASH'EMのバージョン 0.0.6 以前ではこのコマンドはゲームを放棄するものだったが、
+その機能は`#quit'に移動した)
+.lp r
+.\"O Read a scroll or spellbook.
+巻物や魔法書を読む。
+.lp R
+.\"O Remove an accessory (ring, amulet, etc).
+装飾品（指輪、魔除けなど）をはずす。
+.lp ^R
+.\"O Redraw the screen.
+画面を描き直す。
+.lp s
+.\"O Search for secret doors and traps around you.  It usually takes several
+.\"O tries to find something.
+周囲の隠し扉や罠を探す。何かを見つけるには普通何回も探す必要がある。
+.lp S
+.\"O Save (and suspend) the game.  The game will be restored automatically the
+.\"O next time you play.
+ゲームをセーブして、中断する。ゲームは次回プレイ時に自動的に復旧される。
+.lp t
+.\"O Throw an object or shoot a projectile.
+物を投げる。または矢などを発射する。
+.lp T
+.\"O Take off armor.
+防具をはずす。
+.lp ^T
+.\"O Teleport, if you have the ability.
+テレポート能力があればテレポートする。
+.lp v
+.\"O Display version number.
+バージョン番号を表示する。
+.lp V
+.\"O Display the game history.
+このゲームの履歴を表示する。
+.lp w
+.\"O Wield weapon.
+武器を持つ。
+.sd
+.si
+.\"O w- - wield nothing, use your bare hands.
+w- - 武器として何も持たず素手になる。
+.ei
+.ed
+.lp W
+.\"O Wear armor.
+.lp x
+.\"O Exchange your wielded weapon with the item in your alternate
+.\"O weapon slot.  The latter is used as your secondary weapon when engaging in
+.\"O two-weapon combat.  Note that if one of these slots is empty,
+.\"O the exchange still takes place.
+装備している武器を予備の武器と交換する。
+予備の武器は二刀流攻撃で用いられる。
+予備の武器がなくても交換は実行される(今持っているものを予備にして、
+素手になる)ことに注意。
+.lp X
+.\"O Enter explore (discovery) mode, explained in its own section later.
+後述する探検(発見)モードに入る。
+.lp ^X
+.\"O Display your name, role, race, gender, and alignment as well as
+.\"O the various deities in your game.
+あなたの名前、職業、種族、性別、属性および、今回のゲームにおける
+さまざまな神の名前を表示する。
+.lp ^Y
+.\"O Polymorph yourself, if you have the ability.
+もし変身能力を持っているならば自分自身を変化させる。
+.lp z
+.\"O Zap a wand.  To aim at yourself, use `.' for the direction.
+杖を振る。自分に振る場合は、方向に`.'を使う。
+.lp Z
+.\"O Zap (cast) a spell.  To cast at yourself, use `.' for the direction.
+呪文を唱える。自分に呪文を唱えたいときは、方向として`.'を使う。
+.lp ^Z
+.\"O Suspend the game
+.\"O .ux " versions with job control only)." (
+ゲームを一時中止する(ジョブコントロール機能のある 
+.ux
+バージョンのみ)。
+.lp :
+.\"O Look at what is here.
+足元に何があるか見る。
+.lp ;
+.\"O Show what type of thing a visible symbol corresponds to.
+見えているシンボルが何を示すかを表示する。
+.lp ,
+.\"O Pick up some things. May be preceded by `m' to force a selection menu.
+何かを拾う。`m'の後に押すことによって、設定に関わらず選択メニューを表示する。
+.lp @
+.\"O Toggle the
+.\"O .op autopickup
+.\"O option on and off.
+.op autopickup
+オプションのオン・オフを切り替える。
+.lp ^
+.\"O Ask for the type of a trap you found earlier.
+今までに発見した罠の種類を調べる。
+.lp )
+.\"O Tell what weapon you are wielding.
+持っている武器を表示する。
+.lp [
+.\"O Tell what armor you are wearing.
+付けている防具を表示する。
+.lp =
+.\"O Tell what rings you are wearing.
+はめている指輪を表示する。
+.lp """
+.\"O Tell what amulet you are wearing.
+付けている魔除けを表示する。
+.lp (
+.\"O Tell what tools you are using.
+使っている道具を表示する。
+.lp *
+.\"O Tell what equipment you are using; combines the preceding five type-specific
+.\"O commands into one.
+装備しているものを表示する。上の 5 つのコマンドを一つにしたもの。
+.lp $
+.\"O Count your gold pieces.
+持っている金塊を数える。
+.lp +
+.\"O List the spells you know.  Using this command, you can also rearrange
+.\"O the order in which your spells are listed.  They are shown via a menu,
+.\"O and if you select a spell in that menu, you'll be re-prompted for
+.\"O another spell to swap places with it, and then have opportunity to
+.\"O make further exchanges.
+知っている呪文の一覧を表示する。
+このコマンドによって、呪文の表示される順番を変えることもできる。
+呪文をメニュー形式で表示させ、まず一つ目の呪文を選択し、
+さらに入れ替えたい呪文を選択することによって順番が入れ替わる。
+さらに入れ替えたい場合はこの操作を繰り返す。
+.lp "\e
+.\"O Show what types of objects have been discovered.
+今までにどんな種類の物を見つけたかを表示する。
+.lp !
+.\"O Escape to a shell.
+シェルに抜ける。
+.lp #
+.\"O Perform an extended command.  As you can see, the authors of NetHack
+.\"O used up all the letters, so this is a way to introduce the less frequently
+.\"O used commands.
+.\"O What extended commands are available depends on what features the game was
+.\"O compiled with.
+拡張コマンドを実行する。以上から分かるように 
+NetHack の作者たちはすべての文字を使い果たしてしまったので、
+あまり頻繁に使われないコマンドはこのようにして導入された。
+どの拡張コマンドが使用可能かは、
+ゲームのコンパイル時にどの機能が有効にされたかによる。
+.lp #adjust
+.\"O Adjust inventory letters (most useful when the
+.\"O .op fixinv
+.\"O option is ``on'').
+持物の目録記号を変更する(
+.lp #borrow
+.\"O Borrow (steal) money from an adjacent monster, if you have the ability.
+盗む能力を持っているときに怪物からお金を盗む。
+.op fixinv
+オプションが「オン」の時に非常に便利である)。
+.lp #chat
+.\"O Talk to someone.
+誰かと話をする。
+.lp #conduct
+.\"O List which challenges you have adhered to.  See the section below entitled
+.\"O ``Conduct'' for details.
+どの挑戦がまだ守られているかを表示する。詳しくは後述する「制限プレイ」の章を
+参照すること。
+.lp #dip
+.\"O Dip an object into something.
+物を何かに浸す。
+.lp #enhance
+.\"O Advance or check weapons and spell skills.
+武器の技量を高めたり、調べたりする。
+.lp #force
+.\"O Force a lock.
+錠をこじ開ける。
+.lp #invoke
+.\"O Invoke an object's special powers.
+物が持つ特別な能力を発動する。
+.lp #jump
+.\"O Jump to another location.
+別の場所へジャンプする。
+.lp #loot
+.\"O Loot a box or bag on the floor beneath you, or the saddle 
+.\"O from a horse standing next to you.
+あなたのそばにある床に置いてある箱や鞄、またはあなたの隣に立っている馬の
+鞍の中身を調べる。
+.lp #monster
+.\"O Use a monster's special ability (when polymorphed into monster form).
+(怪物の姿に変化している時に)怪物の特殊能力を使う。
+.lp #name
+.\"O Name an item or type of object.
+物や物の種類に名前を付ける。
+.lp #offer
+.\"O Offer a sacrifice to the gods.
+神にいけにえを捧げる。
+.lp #pray
+.\"O Pray to the gods for help.
+神に祈って助けを求める。
+.lp #quit
+.\"O Quit the program without saving your game.
+ゲームをセーブせずにプログラムを終了する。
+.lp #ride
+.\"O Ride (or stop riding) a monster.
+怪物に乗る(あるいは乗るのをやめる)。
+.lp #rub
+.\"O Rub a lamp or a stone.
+ランプや石をこする。
+.lp #sit
+.\"O Sit down.
+座る。
+.lp #technique
+.\"O Perform a role or race specific technique. A menu showing the techniques
+.\"O available to your character will be displayed.
+職業や種族に備わった特殊技能を使用する。使用可能な技能のメニューが表示される。
+.lp #turn
+.\"O Turn undead.
+不死の怪物を追い払う。
+.lp #twoweapon
+.\"O Toggle two-weapon combat on or off.  Note that you must
+.\"O use suitable weapons for this type of combat, or it will
+.\"O be automatically turned off.
+二刀流戦闘のオン・オフを切り替える。
+二刀流に適切な武器を使うこと。
+さもなければ自動的にオフになる。
+.lp #untrap
+.\"O Untrap something (trap, door, or chest).
+何か(罠、扉、宝箱)の罠をはずす。
+.lp #vanquished
+.\"O List vanquished monsters (whether by you or not).
+倒されたモンスター一覧を表示する。（あなたが倒したかどうかにかかわらず）
+.lp #youpoly
+.\"O Polymorph yourself, if you have the ability.
+変身能力を持っている場合に限り自らを変化させる。
+.lp #version
+.\"O Print compile time options for this version of SLASH'EM.
+このバージョンの SLASH'EM をコンパイルしたときのオプションを表示する。
+.lp #wipe
+.\"O Wipe off your face.
+顔を拭う。
+.lp #?
+.\"O Help menu:  get the list of available extended commands.
+ヘルプメニュー: 利用可能な拡張コマンドの一覧を表示する。
+.pg
+.\"O If your keyboard has a meta key (which, when pressed in combination
+.\"O with another key, modifies it by setting the `meta' [8th, or `high']
+.\"O bit), you can invoke many extended commands by meta-ing the first
+.\"O letter of the command.
+.\"O .\" In {\it NT, OS/2, PC\/ {\rm and} ST SLASH'EM},
+.\"O .\" the `Alt' key can be used in this fashion;
+.\"O .\" on the Amiga set the {\it altmeta\/} option to get this behavior.
+.\"O In NT, OS/2, and PC SLASH'EM, the `Alt' key
+.\"O can be used in this fashion.
+もしあなたのキーボードにメタキー
+(別のキーと一緒に押すことによって
+そのキーの`メタ'[第 8、または`上位']ビットをセットする)があれば、
+コマンドの頭文字をメタキーと一緒に押すことによって多くの
+拡張コマンドを起動することができる。
+.\" NT, OS/2, PC および ST SLASH'EM では 'Alt' キーがこの目的に使われる.
+NT, OS/2, PC SLASH'EM では 'Alt' キーがこの目的に使われる.
+.\" (Amiga ではこれを用いるには altmetaオプションをセットする。)
+.lp M-?
+.\"O #? (not supported by all platforms)
+#? (対応していないプラットホームもある)
+.lp M-2
+.\"O #twoweapon (unless the number_pad option is enabled)
+#twoweapon (number_pad がオフの場合)
+.lp M-a
+#adjust
+.lp M-b
+#borrow
+.lp M-c
+#chat
+.lp M-d
+#dip
+.lp M-e
+#enhance
+.lp M-f
+#force
+.lp M-i
+#invoke
+.lp M-j
+#jump
+.lp M-l
+#loot
+.lp M-m
+#monster
+.lp M-n
+#name
+.lp M-o
+#offer
+.lp M-p
+#pray
+.lp M-q
+#quit
+.lp M-r
+#rub
+.lp M-s
+#sit
+.lp M-t
+#technique
+.lp M-u
+#untrap
+.lp M-v
+#version
+.lp M-w
+#wipe
+.lp M-y
+#youpoly
+.pg
+.\"O If the
+.\"O .op number_pad
+.\"O option is on, some additional letter commands are available:
+.op number_pad
+オプションがオンのときは、これらに加えいくつかの文字コマンドが有効になる。
+.lp h
+.\"O Help menu:  display one of several help texts available, like ``?''.
+ヘルプメニュー: ``?'' と同様にヘルプメニューを表示する。
+.lp j
+.\"O Jump to another location.  Same as ``#jump'' or ``M-j''.
+別の場所へジャンプする。「#jump」や「M-j」と同じ。
+.lp k
+.\"O Kick something (usually a door).  Same as `^D'.
+何か(通常は扉)を蹴る。'^D' と同じ。
+.lp K
+.\"O List vanquished monsters (whether by you or not).  Same as ``#vanquished''.
+倒されたモンスター一覧を表示する。（あなたが倒したかどうかにかかわらず）
+``#vanquished''と同じ。
+.lp l
+.\"O Loot a box or bag on the floor beneath you, or the saddle 
+.\"O from a horse standing next to you.  Same as ``#loot'' or ``M-l''.
+あなたのそばにある床に置いてある箱や鞄、またはあなたの隣に立っている馬の
+鞍の中身を調べる。「#loot」や「M-l」と同じ。
+.lp N
+.\"O Name an item or type of object.  Same as ``#name'' or ``M-n''.
+物や物の種類に名前を付ける。「#name」や「M-n」と同じ。
+.lp u
+.\"O Untrap a trap, door, or chest.  Same as ``#untrap'' or ``M-u''.
+罠、扉、宝箱などの仕掛けられた罠をはずす。「#untrap」や「M-u」と同じ。
+
+.hn 1
+.\"O Rooms and corridors
+部屋と通路
+.pg
+.\"O Rooms and corridors in the dungeon are either lit or dark.
+.\"O Any lit areas within your line of sight will be displayed;  
+.\"O dark areas are only displayed if they are within one space of you.
+.\"O Walls and corridors remain on the map as you explore them.
+洞窟内の部屋や通路は明りがついていることもあるし、ついていないこともある。
+明りのついている部分で自分の視野に入る部分は画面に表示される。
+暗いところでは周囲 1 つ分の空間だけが見える。
+壁や通路は画面に表示されたままになる。
+.pg
+.\"O Secret corridors are hidden.  You can find them with the `s' (search)
+.\"O command.
+隠し通路は表示されない。これらは `s'(search: 探す) コマンドで
+発見することができる。
+.hn 2
+.\"O Doorways
+出入口
+.pg
+.\"O Doorways connect rooms and corridors.  Some doorways have no doors;
+.\"O you can walk right through.  Others have doors in them, which may be
+.\"O open, closed, or locked.  To open a closed door, use the `o' (open)
+.\"O command; to close it again, use the `c' (close) command.
+出入口は部屋と通路を接続するものである。出入口の中には扉のないものがある。
+このときにはそのまま通り抜けることができる。その他の出入口には扉があるが、
+その扉は開いているか、閉じているか、錠がかかっているかのいずれかである。
+閉じている扉を開けるには `o'(open: 扉を開ける) コマンドを
+用いる。再び扉を閉じるには `c'(close: 扉を閉じる) コマンドを用いる。
+.pg
+.\"O You can get through a locked door by using a tool to pick the lock
+.\"O with the `a' (apply) command, or by kicking it open with the `^D'
+.\"O (kick) command.
+扉に錠がかかっているときは `a'(apply: 道具を用いる) コマンドで錠をはずす
+道具を使うか、`^D'(kick: 蹴る) コマンドで扉を蹴破ることで
+通ることができる。
+.pg
+.\"O Open doors cannot be entered diagonally; you must approach them
+.\"O straight on, horizontally or vertically.  Doorways without doors are
+.\"O not restricted in this fashion.
+開いた扉に斜めから入ることはできない。水平あるいは垂直方向から真っ直ぐに
+近付かなければならない。扉のない出入口にはこのような制限はない。
+.pg
+.\"O Doors can be useful for shutting out monsters.  Most monsters cannot
+.\"O open doors, although a few don't need to (ex. ghosts can walk through
+.\"O doors).
+扉は怪物を締め出すのに役に立つ。たいていの怪物は扉を開けることができない。
+けれどもいくつかの怪物にとっては扉を開ける必要などない(例: 亡霊は
+扉を通り抜けることができる)。
+.pg
+.\"O Secret doors are hidden.  You can find them with the `s' (search)
+.\"O command.  Once found they are in all ways equivalent to normal doors.
+隠し扉は表示されない。これらは `s'(search: 探す) コマンドで発見する
+ことができる。一度発見すると普通の扉と同様になる。
+.hn 2
+.\"O Traps (`^')
+罠 (`^')
+.pg
+.\"O There are traps throughout the dungeon to snare the unwary delver.
+.\"O For example, you may suddenly fall into a pit and be stuck for a few
+.\"O turns trying to climb out.  Traps don't appear on your map until you
+.\"O see one triggered by moving onto it, see something fall into it, or you
+.\"O discover it with the `s' (search) command.  Monsters can fall prey to
+.\"O traps, too, which can be a very useful defensive strategy.
+そそっかしい冒険者を陥れようとする罠が洞窟のあちこちにある。
+例えば落し穴に落ちると上り出るのに数ターンの間その場から動けなくなるであろう。
+そこに誰かが足を踏み入れて引っかかるか、`s'(search: 探す) コマンドで見つけるか
+して初めて罠は表示される。怪物も罠の餌食になることがある。これは非常に有効な
+防御戦術である。
+.\"O .pg
+.\"O There is a special pre-mapped branch of the dungeon based on the
+.\"O classic computer game ``Sokoban.''  The goal is to push the boulders
+.\"O into the pits or holes.  With careful foresight, it is possible to
+.\"O complete all of the levels according to the traditional rules of
+.\"O Sokoban.  Some allowances are permitted in case the player gets stuck;
+.\"O however, they will lower your luck.
+古典的コンピュータゲームである「倉庫番」を基にした特別なダンジョンへの
+分かれ道も存在する。
+このダンジョンでの目的は大岩を落し穴に入れることである。
+慎重に先読みすれば、全ての階は倉庫番の伝統のルールでクリアできる。
+行き詰まってしまった冒険者のためにいくつかの助け舟が用意されているが、
+これらは運を低下させてしまう。
+.hn 2
+.\"O Stairs (`<', `>')
+階段 (`<', `>')
+.pg
+.\"O In general, each level in the dungeon will have a staircase going up
+.\"O (`<') to the previous level and another going down (`>') to the next
+.\"O level.  There are some exceptions though.  For instance, fairly early
+.\"O in the dungeon you will find a level with two down staircases, one
+.\"O continuing into the dungeon and the other branching into an area
+.\"O known as the Gnomish Mines.  Those mines eventually hit a dead end,
+.\"O so after exploring them (if you choose to do so), you'll need to
+.\"O climb back up to the main dungeon.
+一般的に洞窟の各階には、前の階への上り階段('<')と、
+次の階への下り階段('>')がひとつずつある。
+しかし、例外もある。
+例えば、洞窟の比較的浅い階であなたは二つの下り階段がある階を発見するだろう。
+ひとつは洞窟の続きであり、
+もうひとつはノームの坑道として知られる地帯に続いている。
+この坑道は最後には行き止まりになっていて、
+ここを探検した(あなたがそうすることを選択した場合)後、
+元の洞窟にまで戻って来る必要がある。
+.pg
+.\"O When you traverse a set of stairs, or trigger a trap which sends you
+.\"O to another level, the level you're leaving will be deactivated and
+.\"O stored in a file on disk.  If you're moving to a previously visited
+.\"O level, it will be loaded from its file on disk and reactivated.  If
+.\"O you're moving to a level which has not yet been visited, it will be
+.\"O created (from scratch for most random levels, from a template for
+.\"O some ``special'' levels, or loaded from the remains of an earlier game
+.\"O for a ``bones'' level as briefly described below).  Monsters are only
+.\"O active on the current level; those on other levels are essentially
+.\"O placed into stasis.
+階段を使うか、あるいは他の階に移動する罠に引っ掛かった場合、
+いままでいた階は非活性化されて、ディスク上のファイルに貯えられる。
+昔訪れた階に再び訪れた場合、ディスク上のファイルが読み込まれて再活性化される。
+初めて訪れる階に移動した場合、その階は(ほとんどの階は一から、
+「特別な」階はテンプレートから、「骨の」階(後述)の場合はファイルから読み込んで)
+新たに作成される。
+怪物は現在の階にいるものだけが行動する。
+他の階にいるものは止まっている。
+.pg
+.\"O Ordinarily when you climb a set of stairs, you will arrive on the
+.\"O corresponding staircase at your destination.  However, pets (see below)
+.\"O and some other monsters will follow along if they're close enough when
+.\"O you travel up or down stairs, and occasionally one of these creatures
+.\"O will displace you during the climb.  When that occurs, the pet or other
+.\"O monster will arrive on the staircase and you will end up nearby.
+普通、あなたが階段を使うと、あなたは目的地で対応する階段の上に現れる。
+しかし、ペット(後述)といくつかの怪物はあなたが階段を上り降りした時についてきて、
+時々それらの一体があなたと入れ替わることがある。
+こうなった場合、ペットやその他の怪物が階段の上に現れ、
+あなたはそのそばに現れる。
+.hn 2
+.\"O Ladders (`<', `>')
+はしご (`<', `>')
+.pg
+.\"O Ladders serve the same purpose as staircases, and the two types of
+.\"O inter-level connections are nearly indistinguishable during game play.
+はしごは階段と同じ役目であり、階を繋ぐこの二つの種類は
+ゲーム中ほとんど区別ができない。
+.hn 2
+.\"O Shops and shopping
+店と買い物
+.pg
+.\"O Occasionally you will run across a room with a shopkeeper near the door
+.\"O and many items lying on the floor.  You can buy items by picking them
+.\"O up and then using the `p' command.  You can inquire about the price
+.\"O of an item prior to picking it up by using the ``#chat'' command
+.\"O while standing on it.  Using an item prior to paying for it will incur a
+.\"O charge, and the shopkeeper won't allow you to leave the shop until you
+.\"O have paid any debt you owe.
+時々ドアのそばに店主がいて、床にたくさんの物が置いてある部屋に
+行き当たることがある．物を拾って、`p'コマンドを使うことで
+物を買うことができる．
+物を拾う前に、物の上に立って``#chat''コマンドを使うことで値段を確認できる．
+支払いをする前に物を使うと借金になり、店主は債務を支払うまでは
+店の外に出してくれなくなる．
+.pg
+.\"O You can sell items to a shopkeeper by dropping them to the floor while
+.\"O inside a shop.  You will either be offered an amount of gold and asked
+.\"O whether you're willing to sell, or you'll be told that the shopkeeper
+.\"O isn't interested (generally, your item needs to be compatible with the
+.\"O type of merchandise carried by the shop).
+店の中にいるときに物を落すことで物を店主に売ることができる．
+売却価格を提示され、売るかどうかを確認されるか、
+単に店主が興味がないことを知らされる(一般的に、
+店で売っている物と同じ種類の物が買い取り対象である)。
+.pg
+.\"O If you drop something in a shop by accident, the shopkeeper will usually
+.\"O claim ownership without offering any compensation.  You'll have to buy
+.\"O it back if you want to reclaim it.
+偶然で物を店の中に落してしまうと、店主は普通代償なしに所有権を主張する．
+物を取り戻すためには買い戻す必要がある．
+.pg
+.\"O Shopkeepers sometimes run out of money.  When that happens, you'll be
+.\"O offered credit instead of gold when you try to sell something.  Credit
+.\"O can be used to pay for purchases, but it is only good in the shop where
+.\"O it was obtained; other shopkeepers won't honor it.  (If you happen to
+.\"O find a "credit card" in the dungeon, don't bother trying to use it in
+.\"O shops; shopkeepers will not accept it.)
+店主は資金不足になることがある。こうなった場合、何かを売ろうとすると
+現金の代わりに信用貸しを提案される。
+信用貸しは物を買うときに使えるが、同じ店でだけ有効である。
+他の店主は引き受けない。
+(迷宮で「クレジットカード」を手に入れることがあるが、
+これを店で使おうとしてはいけない。店主は受け入れない。)
+.pg
+.\"O The `$' command, which reports the amount of gold you are carrying
+.\"O (in inventory, not inside bags or boxes), will also show current shop
+.\"O debt or credit, if any.  The `Iu' command lists unpaid items
+.\"O (those which still belong to the shop) if you are carrying any.
+.\"O The `Ix' command shows an inventory-like display of any unpaid
+.\"O items which have been used up, along with other shop fees, if any.
+`$'コマンドを使うと、今持ち運んでいる金貨の数(かばんや箱に入っているものは
+除く)とともに、負債や信用貸しがあれば表示される。
+`Iu'コマンドは未払いの物(まだ店が所有する物)の一覧(あれば)を表示する。
+`Ix'コマンドは使ってしまった物の代金の一覧(あれば)が表示される。
+.hn 3
+.\"O Shop idiosyncracies
+店の特殊な性質
+.pg
+.\"O Several aspects of shop behavior might be unexpected.
+.\"O .\" note: using * instead of \(bu is better for plain text output
+店のいくつかの性質は意外なものかもしれない。
+.lp * 2
+.\"O The price of a given item can vary due to a variety of factors.
+アイテムの値段は色々な要素によって様々に変化する。
+.lp * 2
+.\"O A shopkeeper treats the spot immediately inside the door as if it were
+.\"O outside the shop.
+店主はドアの一つ内側の場所は店の外として扱う。
+.lp * 2
+.\"O While the shopkeeper watches you like a hawk, he will generally ignore
+.\"O any other customers.
+店主はあなたを鷹のように注意深く見張っているが、
+一般的にその他の消費者については無視する。
+.lp * 2
+.\"O If a shop is "closed for inventory", it will not open of its own accord.
+店が"closed for inventory"(「棚卸のため閉店」)の場合、
+待っていても開店はしない。
+.lp * 2
+.\"O Shops do not get restocked with new items, regardless of inventory depletion.
+店は例え品物が枯渇しても新しいアイテムが入荷することはない。
+
+.hn 1
+.\"O Monsters
+怪物
+.pg
+.\"O Monsters you cannot see are not displayed on the screen.  Beware!
+.\"O You may suddenly come upon one in a dark place.  Some magic items can
+.\"O help you locate them before they locate you (which some monsters can do
+.\"O very well).
+画面上にはあなたから見える怪物しか表示されないが、ひょっとすると闇の
+中で怪物とばったり出くわすことになるかもしれないので注意が必要である。
+魔法のアイテムの中には、怪物があなたを発見するよりも前にあなたが怪物を
+発見するのに役立つ物もある(しかしこの能力に大変優れている怪物もいる。)
+.pg
+.\"O The commands `/' and `;' may be used to obtain information about those
+.\"O monsters who are displayed on the screen.  The command `C' allows you
+.\"O to assign a name to a monster, which may be useful to help distinguish
+.\"O one from another when multiple monsters are present.  Assigning a name
+.\"O which is just a space will remove any prior name.
+`/' コマンドと `;' コマンドが画面上に表示されている怪物に関する情報を得るのに用いられる。
+`C' コマンドは怪物に名前をつけるのに用いられ、
+複数の怪物がいる時に、ある怪物を他のものと見分けたいときに便利である。
+名前としてスペースを指定すると、以前につけた名前を消すことになる。
+.pg
+.\"O The extended command ``#chat'' can be used to interact with an adjacent
+.\"O monster.  There is no actual dialog (in other words, you don't get to
+.\"O choose what you'll say), but chatting with some monsters such as a
+.\"O shopkeeper or the Oracle of Delphi can produce useful results.
+拡張コマンド「#chat」によって、隣接する怪物と交流できる。
+実際の台詞は選択できない(言い換えると、あなたが何をしゃべるかは選べない)が、
+店主や Oracle of Delphi(デルファイの神殿)といった相手と話をすることは、
+有益な結果をもたらす。
+
+.hn 2
+.\"O Fighting
+戦闘
+.pg
+.\"O If you see a monster and you wish to fight it, just attempt to walk
+.\"O into it.  Many monsters you find will mind their own business unless
+.\"O you attack them.  Some of them are very dangerous when angered.
+.\"O Remember:  discretion is the better part of valor.
+発見した怪物と戦いたいときには、
+単にその怪物に向かって移動するようにすればよい。
+多くの怪物はあなたが戦いを挑まない限り、
+他のことを気にすることはない。
+腹を立てると大変危険な怪物もいる。
+「三十六計逃げるにしかず」ということわざを忘れずに。
+.pg
+.\"O If you can't see a monster (if it is invisible, or if you are blinded),
+.\"O the symbol `I' will be shown when you learn of its presence.
+.\"O If you attempt to walk into it, you will try to fight it just like
+.\"O a monster that you can see; of course,
+.\"O if the monster has moved, you will attack empty air.  If you guess
+.\"O that the monster has moved and you don't wish to fight, you can use the `m'
+.\"O command to move without fighting; likewise, if you don't remember a monster
+.\"O but want to try fighting anyway, you can use the `F' command.
+怪物が見えない(怪物が透明、またはあなたが目が見えない)場合、
+怪物がいるとあなたが思った位置に`I'の文字が表示される。
+その区画に歩こうとすると、見えている時と同じようにあなたは怪物に攻撃しようとする。
+もちろん、もし怪物が移動してしまっていたら、あなたの攻撃は空を切ることになる。
+もし怪物がすでに移動してしまっていると考え、戦いたくない場合は、
+`m'コマンドを使うことで戦うことなく移動できる。
+逆に、そこに怪物がいるかどうかわからないけれどもとにかく戦って見たい場合は、
+`F'コマンドが使える。
+.hn 2
+.\"O Your pet
+ペット
+.pg
+.\"O You start the game with a little dog (`d'), cat (`f'), hell hound pup ('d'),
+.\"O winter wolf cub ('d'), ghoul ('Z'), or pony (`u'), which follows you about
+.\"O the dungeon and fights monsters with you.  With the exception of ghouls, your
+.\"O pet needs food to survive.  It usually feeds itself on fresh carrion
+.\"O and other meats.  If you're worried about it or want to train it, you
+.\"O can feed it, too, by throwing it food.  A properly trained pet can be
+.\"O very useful under certain circumstances.
+あなたは仔犬(`d')、子猫(`f')、ヘルハウンドの仔('d')、冬狼の仔('d')、
+グール('z')、ポニー(`u')のいずれかとともにゲームを始める。
+あなたのペットはあなたとともに洞窟をさまよい、怪物と戦う。
+ペットはあなたと同様に生きのびるための食料を必要とする。
+ペットは新鮮な死肉やその他の肉をえさにしている。
+もしもペットのことが気がかりであったり、ペットを飼い慣らしておきたいと思うなら、
+あなたが直接えさを与えることもできる。
+そのためには食料をペットに向かって投げてやればよい。
+きちんと訓練されたペットはある種の状況のもとで極めて利用価値が高い。
+.pg
+.\"O Your pet also gains experience from killing monsters, and can grow
+.\"O over time, gaining hit points and doing more damage.  Initially, your
+.\"O pet may even be better at killing things than you, which makes pets
+.\"O useful for low-level characters.
+ペットも怪物を倒していくにつれて経験を積んでいく。
+また時間とともに成長もし、体力や相手に与えるダメージも増加する。
+初めのうちはあなたよりもペットの方が強いだろうから、
+レベルの低いキャラクタにとっては役に立つだろう。
+.pg
+.\"O Your pet will follow you up and down staircases if it is next to you
+.\"O when you move.  Otherwise your pet will be stranded and may become
+.\"O wild.  Similarly, when you trigger certain types of traps which alter
+.\"O your location (for instance, a trap door which drops you to a lower
+.\"O dungeon level), any adjacent pet will accompany you and any non-adjacent
+.\"O pet will be left behind.  Your pet may trigger such traps itself; you
+.\"O will not be carried along with it even if adjacent at the time.
+あなたが他の階へ移動するとき、隣にペットを連れていればペットもあなた
+について移動する。置き去りにすると野生化してしまうかもしれない。
+同様に、もしあなたが自分の位置が変わるような罠にかかった場合
+(例えば、トラップドアで下の階に落ちた場合)、
+隣にいたペットはついていき、隣にいなかったペットは取り残される。
+ペットが自分でそのような罠にかかることもある。
+あなたはたとえその時にペットの隣にいても一緒に移動することはない。
+.hn 2
+.\"O Steeds
+軍馬
+.pg
+.\"O Some types of creatures in the dungeon can actually be ridden if you
+.\"O have the right equipment and skill.  Convincing a wild beast to let
+.\"O you saddle it up is difficult to say the least.  Many a dungeoneer 
+.\"O has had to resort to magic and wizardry in order to forge the alliance.
+ダンジョンにいるある種の生物は、あなたが正しい装備と能力を
+持っていれば、乗ることができる。
+野生の生物にあなたが乗ることを納得させるのは困難である。
+多くの洞窟の主は協力関係をでっち上げるのに魔法の力に頼らなければならない。
+.\"O Once you do have the beast under your control however, you can 
+.\"O easily climb in and out of the saddle with the `#ride' command.  Lead
+.\"O the beast around the dungeon when riding, in the same manner as 
+.\"O you would move yourself.  It is the beast that you will see displayed
+.\"O on the map.
+しかし、一旦動物をあなたの支配下に置いたなら、
+`#ride'コマンドで乗り降りすることができる。
+動物に乗って洞窟を移動する方法は、自分自身が移動するのと同じである。
+地図に表示されるのはあなたが乗っている動物である。
+.pg
+.\"O Riding skill is managed by the `#enhance' command.  See the section
+.\"O on Weapon proficiency for more information about that.
+乗馬技術は`#enhance'コマンドで管理することができる。
+詳しくは後述する武器の技術の章を参照すること。
+.hn 2
+.\"O Bones levels
+骸骨の階
+.pg
+.\"O You may encounter the shades and corpses of other adventurers (or even
+.\"O former incarnations of yourself!) and their personal effects.  Ghosts
+.\"O are hard to kill, but easy to avoid, since they're slow and do little
+.\"O damage.  You can plunder the deceased adventurer's possessions;
+.\"O however, they are likely to be cursed.  Beware of whatever killed the
+.\"O former player; it is probably still lurking around, gloating over its
+.\"O last victory.
+冒険者の幽霊とその死体(あるいはそれは生まれ変わる前のあなた自身であ
+ることさえある)や、その所持品に出くわすかもしれない。
+幽霊を殺すことは難しいが、
+動きがのろくほとんどダメージを受けないので簡単に逃げることができる。
+あなたは死んだ冒険者の所持品を奪うこともできる。
+しかしそれらは呪われていることが多い。
+以前の冒険者を死に到らしめたものにはすべて注意を払わねばならない。
+それはあたりを徘徊し、その直前の勝利に酔いしれているからだ。
+
+.hn 1
+.\"O Objects 
+物
+.pg
+.\"O When you find something in the dungeon, it is common to want to pick
+.\"O it up.  In SLASH'EM, this is accomplished automatically by walking over
+.\"O the object (unless you turn off the
+.\"O .op autopickup
+.\"O option (see below), or move with the `m' prefix (see above)), or
+.\"O manually by using the `,' command.
+洞窟の中で何かを見つけた場合、それを拾いたいと思うのはよくあることである。
+SLASH'EM ではその物の上を通ることによって自動的に拾うことができ(
+.op autopickup
+オプション(後述)がオフになっているときや `m' プレフィックス
+(前述)を用いて移動するときはこの限りではない)、
+または `,' コマンドを使って手動で拾うことができる。
+.pg
+.\"O If you're carrying too many items, SLASH'EM will tell you so and you won't 
+.\"O be able to pick
+.\"O up anything more.  Otherwise, it will add the object(s) to your pack and tell
+.\"O you what you just picked up.
+持物が多すぎるときには、SLASH'EM はあなたにそのように告げ、
+それ以上拾うことはできなくなる。
+そうでなければ SLASH'EM はその物をあなたの荷物に加え、何を拾ったかが表示される。
+.pg
+.\"O As you add items to your inventory, you also add the weight of that object
+.\"O to your load.  The amount that you can carry depends on your strength and
+.\"O your constitution.  The
+.\"O stronger you are, the less the additional load will affect you.  There comes
+.\"O a point, though, when the weight of all of that stuff you are carrying around
+.\"O with you through the dungeon will encumber you.  Your reactions
+.\"O will get slower and you'll burn calories faster, requiring food more frequently
+.\"O to cope with it.  Eventually, you'll be so overloaded that you'll either have
+.\"O to discard some of what you're carrying or collapse under its weight.
+持ち物が増えるに連れて、荷物の重さが重くなる。
+どれだけの重さの物を運べるかは筋力と耐久力による。
+力が強いほど、荷物の重さの影響は小さくなる。
+しかしそれでも、洞窟の中を持ち歩いている荷物の重さがあなたに負担になるときがくる。
+反応は鈍くなり、カロリー消費が早くなってより多くの食料が必要となる。
+そして最終的には荷物が重すぎて何かを捨てないと動けなくなってしまう。
+.pg
+.\"O SLASH'EM will tell you how badly you have loaded yourself.  The symbols
+.\"O `Burdened', `Stressed', `Strained', `Overtaxed' and `Overloaded' are
+.\"O displayed on the bottom line display to indicate your condition.
+SLASH'EM では荷物の重さがどれくらい悪影響を与えるかを教えてくれる。
+最下行に表示される`Burdened', `Stressed', `Strained', `Overtaxed',`Overloaded'
+の表示があなたの状態を示している。
+.pg
+.\"O When you pick up an object, it is assigned an inventory letter.  Many
+.\"O commands that operate on objects must ask you to find out which object
+.\"O you want to use.  When SLASH'EM asks you to choose a particular object
+.\"O you are carrying, you are usually presented with a list of inventory
+.\"O letters to choose from (see Commands, above).
+物を拾ったとき、その物には目録記号が割り当てられる。
+物に関する多くのコマンドはあなたがどの物を使いたいのかを尋ねてくる。
+持物のうち特定の物を選ぶように SLASH'EM が尋ねてきたときは、
+普通目録記号の一覧が表示されてその中から選ぶ(前述のコマンドの項を参照のこと)。
+.pg
+.\"O Some objects, such as weapons, are easily differentiated.  Others, like
+.\"O scrolls and potions, are given descriptions which vary according to
+.\"O type.  During a game, any two objects with the same description are
+.\"O the same type.  However, the descriptions will vary from game to game.
+いくつかの物、例えば武器類のような物は、どんなものか簡単に区別が付けられる。
+この他の物、例えば巻物や水薬はその種類に応じていろいろな名前が付けられている。
+1 回のゲームの間は同じ名前を持った物は同じ種類の物である。
+しかし物に付けられる名前はゲームごとに違うものになる。
+.pg
+.\"O When you use one of these objects, if its effect is obvious, SLASH'EM
+.\"O will remember what it is for you.  If its effect isn't extremely
+.\"O obvious, you will be asked what you want to call this type of object
+.\"O so you will recognize it later.  You can also use the ``#name''
+.\"O command for the same purpose at any time, to name all objects of a
+.\"O particular type or just an individual object.
+.\"O When you use ``#name'' on an object which has already been named,
+.\"O specifying a space as the value will remove the prior name instead
+.\"O of assigning a new one.
+このような物を使った時、もしその効果が明らかな場合は SLASH'EM がそれが
+何であるかを憶えていてくれる。
+その効果があまり明らかでない場合はその物の種類を何と名付けるか尋ねてくる。
+このため後になってそれを思い出すことができる。
+またいつでも``#name''コマンドを使って同様のことができ、
+ある種類の物すべてに名前を付けたり個々の物に名前を付けたりできる。
+すでに名前をつけているものに``#name''を使う場合、
+新しい名前としてスペースを指定することによって、
+以前つけていた名前を消すことができる。
+.hn 2
+.\"O Curses and Blessings
+呪いと祝福
+.pg
+.\"O Any object that you find may be cursed, even if the object is
+.\"O otherwise helpful.  The most common effect of a curse is being stuck
+.\"O with (and to) the item.  Cursed weapons weld themselves to your hand
+.\"O when wielded, so you cannot unwield them.  Any cursed item you wear
+.\"O is not removable by ordinary means.  In addition, cursed arms and armor
+.\"O usually, but not always, bear negative enchantments that make them
+.\"O less effective in combat.  Other cursed objects may act poorly or
+.\"O detrimentally in other ways.
+あなたが発見したいろいろな物は、たとえそれが役に立つものであったとしても
+呪いがかけられているかも知れない。呪いがかけられている物を使うと
+それが張り付いてしまうことは最もよく見られる結果である。
+呪いがかけられている武器を持つとそれは手に張り付いてしまって取れなくなる。
+呪いがかけられている物を身につけると普通の方法でははずすことができない。
+さらに、呪いがかけられている武器や防具には必ずと言うわけではないが
+たいていの場合負の魔力が与えられていて、そうでない物よりも戦闘時の効力が劣る。
+その他の呪いがかけられている物は、あまり役に立たなかったり
+またはその他の点で害を及ぼしたりするだろう。
+.pg
+.\"O Objects can also be blessed.  Blessed items usually work better or
+.\"O more beneficially than normal uncursed items.  For example, a blessed
+.\"O weapon will do more damage against demons.
+また祝福されている物もある。祝福されている物は
+呪いがかけられていない普通の物に比べて具合良く働き役に立つ。
+例えば祝福された武器は悪魔たちに一層のダメージを与えることができるだろう。
+.pg
+.\"O There are magical means of bestowing or removing curses upon objects,
+.\"O so even if you are stuck with one, you can still have the curse
+.\"O lifted and the item removed.  Priests and Priestesses have an innate
+.\"O sensitivity to this property in any object, so they can more easily avoid
+.\"O cursed objects than other character roles.
+魔法を使うと物に呪いをかけたり呪いを解いたりすることができる。
+このためたとえ物が張り付いてしまっても、
+呪いを解いてはずすことができる。
+僧侶は生来呪いや祝福に敏感なので、
+他の職業の冒険者よりも容易に呪われているものを避けることができる。
+.pg
+.\"O An item with unknown status will be reported in your inventory with no prefix.
+.\"O An item which you know the state of will be distinguished in your inventory
+.\"O by the presence of the word ``cursed'', ``uncursed'' or ``blessed'' in the
+.\"O description of the item.
+あなたの持物の目録の中で呪いがかけられているかどうか分からない物は
+目録のなかで特に何の説明もない。どんな状態にあるか知っている物は
+目録一覧で「cursed(呪われた)」「uncursed(呪われていない)」「blessed(祝福された)」などの
+言葉が物の説明に与えられる。
+.hn 2
+.\"O Weapons (`)')
+武器 (`)')
+.pg
+.\"O Given a chance, most monsters in the Mazes of Menace will gratuitously try to
+.\"O kill you.  You need weapons for self-defense (killing them first).  Without a
+.\"O weapon, you do only 1-2 hit points of damage (plus bonuses, if any).
+.\"O Monk characters are an exception; they normally do much more damage with
+.\"O bare hands than they do with weapons.
+恐怖の迷宮に住むほとんどすべての怪物は、チャンスと見れば見境なくあなたを
+殺そうとするだろう。自分の身を守る(先に怪物を殺してしまう)ために
+あなたは武器を必要とする。武器なしではポイントにして 1 〜 2 のダメージ
+(いくらかの加算があるかも知れないが)を与えることしかできない。
+但し、モンクは例外である。モンクは武器を使って攻撃するよりも
+素手で攻撃した方が遥かに大きなダメージを与えることができる。
+.pg
+.\"O There are wielded weapons, like maces and swords, and thrown weapons,
+.\"O like arrows and spears.  To hit monsters with a weapon, you must wield it and
+.\"O attack them, or throw it at them.  You can simply elect to throw a spear.
+武器には鎚矛や剣のような振り回すためのものと、矢や槍のような投げつけるためのものがある。
+武器で怪物に打撃を与えるためには、武器を手にもって怪物を攻撃するか
+武器を怪物に投げなければならない。投げるには、単純に槍を投げるように選択するだけでよい。
+.pg
+.\"O To shoot an arrow, you should first wield a bow, then throw the arrow.
+.\"O An alternative method would be wield a bow and place the arrows in your
+.\"O Quiver, after which you fire the ammunition.
+.\"O Rangers and the like may find that having a bow as their secondary weapon
+.\"O is a useful combination. In order to use a secondary weapon to fire ammunition
+.\"O however, it must first be moved to the primary weapon slot. The ``x'' command
+.\"O is available for this use.
+.\"O Crossbows shoot crossbow bolts.  Slings hurl rocks and (other) stones
+.\"O (like gems).
+弓から矢を発射するには、まず弓を手に持ってから矢を投げればよい。
+An alternative method would be wield a bow and place the arrows in your
+Quiver, after which you fire the ammunition.
+Rangers and the like may find that having a bow as their secondary weapon
+is a useful combination. In order to use a secondary weapon to fire ammunition
+however, it must first be moved to the primary weapon slot. The ``x'' command
+is available for this use.
+クロスボウはcrossbow bolt(クロスボウ用の太矢)を発射するためのものである。
+投石器は岩や(宝石のような)その他の石を投げつけるために用いる。
+.pg
+.\"O Enchanted weapons have a ``plus'' (or ``to hit enhancement'' which can be
+.\"O either positive or negative) that adds to your chance to
+.\"O hit and the damage you do to a monster.  The only way to determine a weapon's
+.\"O enchantment is to have it magically identified somehow.
+魔力のある武器には「追加能力」(攻撃能力と言うことで正と負の両方を取り得る)が
+付けられており、
+攻撃が怪物に当たる可能性と与えるダメージに追加される。
+武器の魔力を測定するには、なんらかの方法で魔法を使って鑑定するしかない。
+.\"O Most weapons are subject to some type of damage like rust.  Such
+.\"O ``erosion'' damage can be repaired.
+多くの武器は錆のようなある種のダメージを受けやすい。このような
+「腐食」ダメージは修復可能である。
+.pg
+.\"O The chance that an attack will successfully hit a monster, and the amount
+.\"O of damage such a hit will do, depends upon many factors.  Among them are:
+.\"O type of weapon, quality of weapon (enchantment and/or erosion), experience
+.\"O level, strength, dexterity, encumbrance, and proficiency (see below).  The
+.\"O monster's armor class - a general defense rating, not necessarily due to
+.\"O wearing of armor - is a factor too; also, some monsters are particularly
+.\"O vulnerable to certain types of weapons.
+攻撃がうまく怪物に命中するかと、命中した時にどれくらいのダメージを与えるかは、
+多くの要素によって決定される。それらには以下のものがある:
+武器の種類、武器の品質(魔力や腐食)、経験レベル、筋力、敏捷性、荷物の重さ、
+技量(後述)。
+怪物の防御値(一般的な防御率。防具を着ることによるとは限らない)も要素の一つである。
+また、ある種の武器に対して特に耐性を持つ怪物もいる。
+.pg
+.\"O Many weapons can be wielded in one hand; some require both hands.
+.\"O When wielding a two-handed weapon, you can not wear a shield, and
+.\"O vice versa.  When wielding a one-handed weapon, you can have another
+.\"O weapon ready to use by setting things up with the `x' command, which
+.\"O exchanges your primary (the one being wielded) and alternate weapons.
+多くの武器は片手持ちであるが、両手が必要な武器もある。
+両手持ちの武器と盾を同時に持つことはできない。
+片手持ちの武器を持っている場合、
+もうひとつの武器を予備として準備しておいて、
+`x'コマンドで今使っている武器と交換することができる。
+.\"O And if you have proficiency in the ``two weapon combat'' skill, you
+.\"O may wield both weapons simultaneously as primary and secondary; use the
+.\"O `#twoweapon' extended command to engage or disengage that.  Only
+.\"O some types of characters (barbarians, for instance) have the necessary
+.\"O skill available.  Even with that skill, using two weapons at once incurs
+.\"O a penalty in the chance to hit your target compared to using just one
+.\"O weapon at a time.
+さらに「二刀流戦闘」技能の技量がある場合、二つの武器を同時に使うことができる。
+`#twoweapon' 拡張コマンドで二刀流戦闘をするかどうかを切り替えられる。
+一部のキャラクター(例えば野蛮人)だけがこの技能を持っている。
+たとえこの技能を持っていても、一度に二つの武器を使うと
+ひとつしか使わない時に比べて敵に命中する確率にペナルティを受ける。
+.pg
+.\"O There might be times when you'd rather not wield any weapon at all.
+.\"O To accomplish that, wield `-', or else use the `A' command which
+.\"O allows you to unwield the current weapon in addition to taking off
+.\"O other worn items.
+全く何の武器も装備したくない時もあるかもしれない。
+そうするためには、装備するものを選ぶ時に`-'を選ぶか、あるいは`A'コマンドで
+その他の身につけているものを外すのと同時に現在使っている武器を外すことができる。
+.pg
+.\"O Those of you in the audience who are AD&D players, be aware that each
+.\"O weapon which existed in AD&D does roughly the same damage to monsters in
+.\"O SLASH'EM.  Some of the more obscure weapons (such as the \fIaklys\fP,
+.\"O \fIlucern hammer\fP, and \fIbec-de-corbin\fP) are defined in an
+.\"O appendix to \fIUnearthed Arcana\fP, an AD&D supplement.
+AD&D をプレイしたことのある読者はお気付きだろうが、AD&D に登場した武器は
+SLASH'EM においても怪物にだいたい同じダメージを与える。
+あまり良く知られていない武器(
+\fIaklys\fP(アキリス), \fIlucern hammer\fP(ルッツェンハンマー),
+\fIbec-de-corbin\fP(ベッグ・デ・コルビン) など)のいくつかは AD&D の
+追加ルールである \fIUnearthed Arcana\fP の付録で詳しく説明されている。
+.pg
+.\"O The commands to use weapons are `w' (wield), `t' (throw),
+.\"O `f' (fire, an alternative way of throwing), `Q' (quiver),
+.\"O `x' (exchange), `#twoweapon', and `#enhance' (see below).
+武器を使うコマンドは `w'(wield: 武器を持つ)、 `t'(throw: 投げる)、
+`f' (fire: 武器を発射するもうひとつの方法), `Q'(quiver: 矢筒)、
+`x' (exchange: 武器を交換する)、`#twoweapon'、`#enhance'(後述) である。
+.hn 3
+.\"O Throwing and shooting
+ものを投げることと発射すること
+.pg
+.\"O You can throw just about anything via the `t' command.  It will prompt
+.\"O for the item to throw; picking `?' will list things in your inventory
+.\"O which are considered likely to be thrown, or picking `*' will list
+.\"O your entire inventory.  After you've chosen what to throw, you will
+.\"O be prompted for a direction rather than for a specific target.  The
+.\"O distance something can be thrown depends mainly on the type of object
+.\"O and your strength.  Arrows can be thrown by hand, but can be thrown
+.\"O much farther and will be more likely to hit when thrown while you are
+.\"O wielding a bow.
+`t'コマンドを使うことによって、どんな物でも投げることができる。
+このコマンドを指定すると、投げる物を尋ねてくる。
+`?'を押すと、持ち物の中で投げるのに向いていそうな物の一覧が表示され、
+`*'を押すと、全ての持ち物の一覧が表示される。
+何を投げるかを指定した後、(どの目標に投げるかではなく)どの方向に投げるかを尋ねられる。
+投げることができる距離は、主に物の種類と筋力による。
+矢は手で投げることもできるが、弓を持って投げた方が遥かに遠くまで飛び、
+目標にも当たりやすい。
+.pg
+.\"O You can simplify the throwing operation by using the `Q' command to
+.\"O select your preferred ``missile'', then using the `f' command to
+.\"O throw it.  You'll be prompted for a direction as above, but you don't
+.\"O have to specify which item to throw each time you use `f'.  There is
+.\"O also an option,
+.\"O .op autoquiver,
+.\"O which has SLASH'EM choose another item to automatically fill your
+.\"O quiver when the inventory slot used for `Q' runs out.
+`Q'コマンドで予め好みの「発射物」を選択しておき、
+`f'コマンドで投げることによって、投げる操作を簡単にすることが出来る。
+先程と同様に投げる方向は尋ねられるが、
+`f'コマンドを使うたびに何を投げるかを指定する必要はない。
+.op autoquiver
+オプションをオンにすると、
+`Q'コマンドで設定した物がなくなった時に、
+NetHack が自動的に矢筒に他の物を入れてくれる。
+.pg
+---
+.\"O Some characters will throw multiple items in a single action.  Rangers,
+.\"O for instance, or anyone who achieves a high level of proficiency in
+.\"O the relevant weapon skill (in bow skill if you're wielding one to
+.\"O shoot arrows, or in sling skill if you're wielding one to shoot stones).
+.\"O There is little you can do
+.\"O to control this; if NetHack decides that you'll be shooting 3 arrows
+.\"O on the current shot, then three arrows will travel in the direction
+.\"O you've indicated, even if the first or second succeeds in killing the
+.\"O target.  You can explicitly limit the number of shots by using a numeric
+.\"O prefix before the `t' or `f' command.
+---
+.\"O Some characters have the ability to fire a volley of multiple items in a
+.\"O single turn.  Knowing how to load several rounds of ammunition at
+.\"O once -- or hold several missiles in your hand -- and still hit a
+.\"O target is not an easy task.  Rangers are among those who are adept
+.\"O at this task, as are those with a high level of proficiency in the
+.\"O relevant weapon skill (in bow skill if you're wielding one to
+.\"O shoot arrows, in crossbow skill if you're wielding one to shoot bolts,
+.\"O or in sling skill if you're wielding one to shoot stones).
+.\"O The number of items that the character has a chance to fire varies from
+.\"O turn to turn.  You can explicitly limit the number of shots by using a
+.\"O numeric prefix before the `t' or `f' command.
+一度に複数の物を投げることができるキャラクターもいる。
+一度に複数の矢を装填し(あるいは一度に複数の物を持ち)、
+それを目標に当てることはたやすい仕事ではない。
+レンジャーはこの技能に優れているし、適切な武器の技能
+(弓を持って矢を射るなら弓の技能、クロスボゥを使うならクロスボゥの技能、
+スリングを持って石を投げるならスリングの技能)
+において高いレベルの技量があれば他の職業でも可能である。
+あなたがいくつのアイテムを同時に投げることができるかは
+毎ターン変化する。
+`t'コマンドや`f'コマンドの前に数字を指定することによって、
+発射する数を明示的に制限することもできる。
+.\"O For example, ``2f'' (or ``n2f'' if using
+.\"O .op number_pad
+.\"O mode) would ensure that at most 2 arrows are shot
+.\"O even if you could have fired 3.  If you specify
+.\"O a larger number than would have been shot (``4f'' in this example),
+.\"O you'll just end up shooting the same number (3, here) as if no limit
+.\"O had been specified.  Once the volley is in motion, all of the items
+.\"O will travel in the same direction; if the first ones kill a monster,
+.\"O the others can still continue beyond that spot.
+例えば、``2f''(
+.op number_pad
+オプションがオンの時には``n2f'')と指定すると、
+たとえ 3 本発射可能でも最大 2 本しか発射されない。
+もし、実際に発射できる数よりも大きい数を指定した場合
+(この例では ``4f'')は、
+特に数字を指定しなかった場合と同様、
+実際に発射可能な数(ここでは 3 本)しか発射されない。
+一旦動作を開始したなら、全てのアイテムは同じ方向に飛ぶ。
+もし 1 本目で怪物を倒したなら、残りはその先まで飛んでいくことになる。
+.hn 3
+.\"O Weapon proficiency
+武器の技量
+.pg
+.\"O You will have varying degrees of skill in the weapons available.
+.\"O Weapon proficiency, or weapon skills, affect how well you can use
+.\"O particular types of weapons, and you'll be able to improve your skills
+.\"O as you progress through a game, depending on your role, your experience
+.\"O level, and use of the weapons.
+利用できる武器の技能はさまざまに異なっている。
+武器の技量(技能)はある種の武器をどれくらいうまく扱えるかに影響する。
+技能はゲームを通じて向上させることが出来るが、
+それは職業や経験レベルや武器の使用回数による。
+.pg
+.\"O For the purposes of proficiency, weapons have
+.\"O been divided up into various groups such as daggers, broadswords, and
+.\"O polearms.  Each role has a limit on what level of proficiency a character
+.\"O can achieve for each group.  For instance, wizards can become highly
+.\"O skilled in daggers or staves but not in swords or bows.
+技量を示すために、武器は daggers 、 broadswords 、 polearms といった風に
+いくつかのグループに分けられている。
+それぞれのグループで技量レベルをどこまで高めることが出来るかは職業毎に決まっている。
+例えば魔法使いは daggers や staves に対しては高いレベルに達することが出来るが、
+swords や bows に対してはそうではない。
+.pg
+.\"O The `#enhance' extended command is used to review current weapons proficiency
+.\"O (also spell proficiency) and to choose which skill(s) to improve when
+.\"O you've used one or more skills enough to become eligible to do so.  The
+.\"O skill rankings are ``none'' (sometimes also referred to as ``restricted'',
+.\"O because you won't be able to advance), ``unskilled'', ``basic'', ``skilled'',
+.\"O and ``expert''.  Restricted skills simply will not appear in the list
+.\"O shown by `#enhance'.  (Divine intervention might unrestrict a particular
+.\"O skill, in which case it will start at unskilled and be limited to basic.)
+.\"O Some characters can enhance their barehanded combat or martial arts skill
+.\"O beyond expert to ``master'' or ``grand master''.
+`#enhance'拡張コマンドで現在の武器(と呪文)の技量を見ることができる。
+さらに、ひとつまたは複数の技能を向上させることができる状態なら、
+どの技能を向上させるかを選択することができる。
+技能のランクは"none" (技能を向上させることができないという意味で
+"restricted"(制限された) と呼ばれることもある)、 "unskilled"(初心者),
+"basic"(入門者), "skilled"(熟練者), "expert"(エキスパート)である。
+制限された技能は単に`#enhance'コマンドで一覧に表示されない。
+(神の介入によりある種の技能の制限が解除されることもある。
+その時には技能は"unskilled"となり、限界は"basic"までとなる)
+キャラクターによっては、素手での戦闘やマーシャルアーツの技能を
+``master''(マスター)や``grand master''(グランドマスター)にまで向上させる
+ことができる。
+.pg
+.\"O Use of a weapon in which you're restricted or unskilled
+.\"O will incur a modest penalty in the chance to hit a monster and also in
+.\"O the amount of damage done when you do hit; at basic level, there is no
+.\"O penalty or bonus; at skilled level, you receive a modest bonus in the
+.\"O chance to hit and amount of damage done; at expert level, the bonus is
+.\"O higher.  A successful hit has a chance to boost your training towards
+.\"O the next skill level (unless you've already reached the limit for this
+.\"O skill).  Once such training reaches the threshold for that next level,
+.\"O you'll be told that you feel more confident in your skills.  At that
+.\"O point you can use `#enhance' to increase one or more skills.  Such skills
+.\"O are not increased automatically because there is a limit to your total
+.\"O overall skills, so you need to actively choose which skills to enhance
+.\"O and which to ignore.
+技能レベルが"restricted"や"unskilled"の武器を使うと、怪物への命中率や
+命中した時に与えるダメージにペナルティがある。
+"basic"ではペナルティもボーナスもない。
+"skilled"では命中率と与えるダメージにささやかなボーナスがある。
+"expert"ではボーナスは大きくなる。
+攻撃が命中すると、使っている武器に関する技能を(もし最大に達していないなら)
+向上させるための訓練度を増やすチャンスがある。
+この訓練度が次のレベルに必要な値に達すると、
+自分の技能により自信を持てるように感じたことが告げられる。
+この時点で`#enhance'コマンドを使うことによってひとつまたは複数の技能を
+向上させることができる。
+技能は自動的には向上しない。
+なぜなら全ての技能レベルの合計には制限があるので、
+どの技能を向上させて、どれを無視するかを決める必要があるからである。
+.hn 2
+.\"O Armor (`[')
+防具 (`[')
+.pg
+.\"O Lots of unfriendly things lurk about; you need armor to protect
+.\"O yourself from their blows.  Some types of armor offer better
+.\"O protection than others.  Your armor class is a measure of this
+.\"O protection.  Armor class (AC) is measured as in AD&D, with 10 being
+.\"O the equivalent of no armor, and lower numbers meaning better armor.
+.\"O Each suit of armor which exists in AD&D gives the same protection in
+.\"O NetHack.  Here is an (incomplete) list of the armor classes provided by
+.\"O various suits of armor:
+多くの非友好的なものが洞窟には潜んでいる。
+そういったものからの攻撃から我が身を守るには防具が必要である。
+防具の中には他の種類の防具よりも防御効果に優れた物がある。
+Armor class(AC)(防御値)はこの防御効果の尺度である。
+防御値 (AC)は AD&D での場合と同じように評価される。
+10 が防具なしの状態と等しく、数値が小さいほど優れた防具であることを示す。
+AD&D に存在する鎧はいずれも NetHack においても同じ防御効果を示す。
+以下に(不完全ではあるが) 各種の鎧ごとに規定される防御値の一覧を示す。
+
+.TS S
+center;
+a n.
+dragon scale mail(ドラゴンの鱗鎧)	1
+plate mail(鋼鉄の鎧)	3
+crystal plate mail(水晶の鎧)	3
+bronze plate mail(青銅の鎧)	4
+splint mail(鉄片の鎧)	4
+banded mail(帯金の鎧)	4
+dwarvish mithril-coat(ドワーフのミスリル服)	4
+elven mithril-coat(エルフのミスリル服)	5
+chain mail(鎖かたびら)	5
+orcish chain mail(オークの鎖かたびら)	6
+scale mail(鱗の鎧)	6
+studded leather armor(鋲付き皮鎧)	7
+ring mail(鉄環の鎧)	7
+orcish ring mail(オークの鉄環の鎧)	8
+leather armor(皮鎧)	8
+leather jacket(皮ジャケット)	9
+no armor(鎧なし)	10
+.TE
+.pg
+.\"O You can also wear other pieces of armor (ex. helmets, boots, shields, cloaks)
+.\"O to lower your armor class even further, but you can only wear one item
+.\"O of each category (one suit of armor, one cloak, one helmet, one
+.\"O shield, and so on) at a time.
+さらに他の防具(例: 兜、靴、楯、クローク) を身につけ、
+防御値の値を小さくすることもできる。
+ただし同じ範疇に入る物は 1 つしか身につけることはできない
+(鎧は一式、クロークは 1 着、兜は 1 個、楯は 1 枚など)。
+.pg
+.\"O If a piece of armor is enchanted, its armor protection will be better
+.\"O (or worse) than normal, and its ``plus'' (or minus) will subtract from
+.\"O your armor class.  For example, a +1 chain mail would give you
+.\"O better protection than normal chain mail, lowering your armor class one
+.\"O unit further to 4.  When you put on a piece of armor, you immediately
+.\"O find out the armor class and any ``plusses'' it provides.  Cursed
+.\"O pieces of armor usually have negative enchantments (minuses) in
+.\"O addition to being unremovable.
+防具に魔力があればその防具の防御効果は通常の物よりも良く(もしくは悪く)なっており、
+それに付いている「＋記号」(あるいは−記号)の分だけ防御値の値が小さくなる。
+例えば +1 鎖かたびらは、通常の鎖かたびらよりも防御効果が高く、
+防御値は 1 単位分小さくなって 4 になる。
+防具を身につけると直ちに防御値と「＋記号」の値が分かる。
+呪いがかけられた防具は通常負の魔力(−記号)を持っており、取りはずすことはできない。
+.pg
+.\"O Many types of armor are subject to some kind of damage like rust.  Such
+.\"O damage can be repaired.  Some types of armor may inhibit spell casting.
+多くの鎧は錆のようなある種のダメージを受けやすい。
+このようなダメージは修復可能である。
+魔法を唱えるのを妨げる防具もある。
+.pg
+.\"O The commands to use armor are `W' (wear) and `T' (take off).
+鎧を使うためのコマンドは `W'(wear: 防具を付ける) と 
+`T'(take off: 防具をはずす) である。 
+.\"O The `A' command can also be used to take off armor as well as other
+.\"O worn items.
+`A'(remove all: 全てをはずす)もまた他の身につけるもの同様、
+防具をはずすのに使用できる。
+.hn 2
+.\"O Food (`%')
+食料 (`%')
+.pg
+.\"O Food is necessary to survive.  If you go too long without eating you
+.\"O will faint, and eventually die of starvation.  Some types of food will
+.\"O spoil, and become unhealthy to eat, if not protected.  Food stored in
+.\"O ice boxes or tins (``cans'') will usually stay fresh, but
+.\"O ice boxes are heavy, and tins take a while to open.
+生きのびるには食料が不可欠である．長い間食料を口にしないままでいると
+やがて昏倒し、徐々に餓死への道をたどることになる。
+保存の処置を取ってないと傷んでしまい、食べるには不衛生になる食料もある。
+アイスボックスや缶に入っている食料は通常はいつまでも傷まないが、
+アイスボックスは重く、缶は開けるのに少しばかり時間が必要である。
+.pg
+.\"O When you kill monsters, they usually leave corpses which are also
+.\"O ``food.''  Many, but not all, of these are edible; some also give you
+.\"O special powers when you eat them.  A good rule of thumb is ``you are
+.\"O what you eat.''
+怪物を殺すと通常はその死体が残るが、これは「食料」にもなる。
+すべてと言うわけではないが多くは食べられるし、
+中には食べると特別な力がつくものもある。
+大ざっぱに言えば「食べたものになる」ということである。
+.pg
+.\"O Some character roles and some monsters are vegetarian.  Vegetarian monsters
+.\"O will typically never eat animal corpses, while vegetarian players can,
+.\"O but with some rather unpleasant side-effects.
+菜食主義の職業や怪物もいる。
+菜食主義の怪物は決して動物の死体を食べない。
+一方菜食主義のプレイヤーは動物の死体を食べることができるが、
+なんらかのありがたくない副作用がある。
+.pg
+.\"O You can name one food item after something you like to eat with the
+.\"O .op fruit
+.\"O option.
+.op furit
+オプションによってあなたの好物の食料にちなんで
+その名前を 1 つ設定することができる。
+
+.pg
+.\"O The command to eat food is `e'.
+食料を食べるためのコマンドは `e' である。
+.hn 2
+.\"O Scrolls (`?')
+巻物 (`?')
+.pg
+.\"O Scrolls are labeled with various titles, probably chosen by ancient wizards
+.\"O for their amusement value (ex. ``READ ME,'' or ``THANX MAUD'' backwards).
+.\"O Scrolls disappear after you read them (except for blank ones, without
+.\"O magic spells on them).
+巻物にはいろいろな表題が付けられているが、
+これはおそらくいにしえの魔術師たちが暇潰しとして選んだのであろう
+(例:``READ ME'' とか ``THANX MAUD'' の逆さ読みとか)。
+巻物は読むと消滅する(ただし魔法の呪文の書かれていない白紙は消滅しない)。
+.pg
+.\"O One of the most useful of these is the \fIscroll of identify\fP, which
+.\"O can be used to determine what another object is, whether it is cursed or
+.\"O blessed, and how many uses it has left.  Some objects of subtle
+.\"O enchantment are difficult to identify without these.
+これらの中で最も利用価値の高いものは\fIscroll of identify(識別の巻物)\fPである。
+これは他の物についてそれが何であるか、
+呪いがかけられているか祝福されているか、
+あと何回効力を発揮できるかを確定できる。
+得体の知れない魔力を持つ物の中にはこの巻物なしでは何であるか鑑定し難いものもある。
+.pg
+.\"O A mail daemon may run up and deliver mail to you as a
+.\"O \fIscroll of mail\fP (on versions compiled with this feature).
+メイルデーモンが走ってきてあなたに\fIscroll of mail(手紙の巻物)\fPを渡してくれることもある
+(この機能を有効にしてコンパイルされているバージョンの場合)。
+.\"O To use this feature on versions where NetHack mail delivery is triggered
+.\"O by electronic mail appearing in your system mailbox,
+.\"O you must let NetHack know where to look for new mail by setting
+.\"O the ``MAIL'' environment variable to the file name of your mailbox.
+NetHack のメール配達機能はシステムのメールボックスに電子メールが
+やってきた場合に起動される。
+この機能を使用するには環境変数``MAIL''にあなたのメールボックスの
+ファイル名を設定して NetHack に新しいメールを探す場所を知らせる必要が
+ある。
+.\"O You may also want to set the ``MAILREADER'' environment
+.\"O variable to the file name of your favorite reader, so NetHack can shell to it
+.\"O when you read the scroll.
+また望むならば環境変数``MAILREADER''に使いたいメール受信プログラ
+ムのファイル名を設定することもできる。
+このとき NetHack からそのプログラムを起動してその巻物を読むことができる。
+.\"O On versions of NetHack where mail is randomly generated internal to the game,
+.\"O these environment variables are ignored.
+メールがゲーム内においてランダムに生成されるバージョンの NetHack では
+これらの環境変数は無視される。
+.\"O You can disable the mail daemon by turning off the
+.\"O .op mail
+.\"O option.
+メイルデーモンは
+.op mail
+オプションでオフにできる。
+.pg
+.\"O The command to read a scroll is `r'.
+巻物を読むためのコマンドは `r' である。
+.hn 2
+.\"O Potions (`!')
+水薬 (`!')
+.pg
+.\"O Potions are distinguished by the color of the liquid inside the flask.
+.\"O They disappear after you quaff them.
+水薬は小びんに入っている液体の色によって区別される。
+水薬は飲むと消滅してしまう。
+.pg
+.\"O Clear potions are potions of water.  Sometimes these are blessed or cursed,
+.\"O resulting in holy or unholy water.  Holy water is the bane of the undead, so
+.\"O potions of holy water are good things to throw (`t') at them.  It is also
+.\"O sometimes very useful to dip (``#dip'') an object into a potion.
+透明な水薬は水である。これらはしばしば祝福されていたり呪いがかけられていたりして、
+聖水や不浄な水になったりする。不死の怪物にとって聖水は有害なので、
+聖水を不死の怪物に投げつける(`t')と有効である。
+聖水に他の物を浸す(``#dip'')のもたいへん有益である。
+.pg
+.\"O The command to drink a potion is `q' (quaff).
+水薬を飲むためのコマンドは `q'(quaff: 飲む) である。
+.hn 2
+.\"O Wands (`/')
+杖 (`/')
+.pg
+.\"O Magic wands usually have multiple magical charges.  Some wands are
+.\"O directional\(emyou must give a direction in which to zap them.  You can also
+.\"O zap them at yourself (just give a `.' or `s' for the direction). Be warned,
+.\"O however, for this is often unwise.  Other wands are nondirectional\(emthey
+.\"O don't require a direction.  The number of charges in a wand is random and
+.\"O decreases by one whenever you use it.
+魔法の杖は通常何回も魔力を発揮する．杖の中には方向性のあるものがあり、
+この場合杖を振る方向を指示しなくてはならない。
+杖を自分に向けて振ることもできる(方向として `.' か `s' を入力する)が、
+これはしばしば愚かな行為となる。
+その他の杖には方向性がなく、杖を振る方向を尋ねてこない。
+杖が効力を発揮する回数は杖ごとに不定で、杖を使う度にその回数は 1 ずつ減る。
+.pg
+.\"O When the number of charges left in a wand becomes zero, attempts to use the
+.\"O wand will usually result in nothing happening.  Occasionally, however, it may
+.\"O be possible to squeeze the last few mana points from an otherwise spent wand,
+.\"O destroying it in the process.  A wand may be recharged by using suitable
+.\"O magic, but doing so runs the risk of causing it to explode.  The chance
+.\"O for such an explosion starts out very small and increases each time the
+.\"O wand is recharged.
+杖の魔法の量がなくなると、通常は杖を使用しても何も起きない。
+しかしながら時折、最後の一握りの魔力を使いきった杖から搾り取ることが可能である。
+しかしこれをすると杖は壊れてしまう。
+杖は適切な魔法によって再充填することができるが、
+そうすると杖が爆発してしまう可能性がある。
+爆発する可能性は最初は非常に小さく、同じ杖に何度も再充填するごとに大きくなる。
+.pg
+.\"O In a truly desperate situation, when your back is up against the wall, you
+.\"O might decide to go for broke and break your wand.  This is not for the faint
+.\"O of heart.  Doing so will almost certainly cause a catastrophic release of
+.\"O magical energies.
+自暴自虐なな行為ではあるが、どうにもならなくなったときには杖を壊すという手もある。
+これは弱気な行為ではない。それを行うことにより、
+破壊的な魔法のエネルギーが解放されるからである。
+.pg
+.\"O When you have fully identified a particular wand, inventory display will
+.\"O include additional information in parentheses: the number of times it has
+.\"O been recharged followed by a colon and then by its current number of charges.
+ある杖を完全に鑑定した場合、持ち物の一覧では括弧の中に追加の情報が表示される。
+それは再充填された回数、コロン、現在の使用可能な回数である。
+.\"O A current charge count of -1 is a special case indicating that the wand
+.\"O has been cancelled.
+杖が無効化された場合には使用可能な回数は -1 になる。
+.pg
+.\"O The command to use a wand is `z' (zap).  To break one, use the `a' (apply)
+.\"O command.
+杖を使うためのコマンドは `z'(zap: 杖を振る) である。壊すには `a'
+(apply: 道具を使う)である。
+.hn 2
+.\"O Rings (`=')
+指輪 (`=')
+.pg
+.\"O Rings are very useful items, since they are relatively permanent
+.\"O magic, unlike the usually fleeting effects of potions, scrolls, and
+.\"O wands.
+指輪は大変役に立つ物である。
+というのも水薬や巻物や杖のように魔力が一過性にしか働かないものと違い、
+指輪の魔力は比較的恒久的であるからだ。
+.pg
+.\"O Putting on a ring activates its magic.  You can wear only two
+.\"O rings, one on each ring finger.
+指輪をはめることによってその魔力は発揮される。
+指輪は両手の薬指に 1 つずつ、計 2 つしかはめることはできない。
+.pg
+.\"O Most rings also cause you to grow hungry more rapidly, the rate
+.\"O varying with the type of ring.  
+またたいていの指輪は身につけると腹の減り方が速くなる。
+減り方は指輪の種類によって異なる。
+.pg
+.\"O The commands to use rings are `P' (put on) and `R' (remove).
+指輪を使うためのコマンドは `P'(put on: 指輪をはめる) と
+`R'(remove: 指輪をはずす) である。
+.hn 2
+.\"O Spellbooks (`+')
+魔法書 (`+')
+.pg
+.\"O Spellbooks are tomes of mighty magic.  When studied with the `r' (read)
+.\"O command, they transfer to the reader the knowledge of a spell (and
+.\"O therefore eventually become unreadable) \(em unless the attempt backfires.
+魔法書は強力な魔法を記した大きな本である。`r'(read: 読む) コマンドで
+学ぶと呪文の知識が読み手に転送される(したがって最後には読めなくなる)か、
+さもなくばその試みは不測の結果に終る。
+.\"O Reading a cursed spellbook or one with mystic runes beyond
+.\"O your ken can be harmful to your health!
+呪いがかけられた魔法書や知識の及ばない神秘の古代文字で記された魔法書を
+読むと健康状態に害が及ぶ可能性がある！
+.pg
+.\"O A spell (even when learned) can also backfire when you cast it.  If you
+.\"O attempt to cast a spell well above your experience level, or if you have
+.\"O little skill with the appropriate spell type, or cast it at
+.\"O a time when your luck is particularly bad, you can end up wasting both the
+.\"O energy and the time required in casting.
+呪文を唱えたとき(学んでいる時も)にも魔力が逆流することもある。
+あなたの経験レベルでは遠く及ばない高度な呪文を唱えようと試みたり、
+対応する呪文タイプに関する技能が低かったり、
+ひどくついてないときに呪文を唱えたりすると、
+呪文を唱えるのに必要なエネルギーと時間を浪費しただけに終わってしまうこともある。
+.pg
+.\"O Casting a spell calls forth magical energies and focuses them with
+.\"O your naked mind.  Some of the magical energy released comes from within
+.\"O you, and casting several spells in a row may tire you.
+.\"O Casting of spells also requires practice.  With practice, your
+.\"O skill in each category of spell casting will improve.  Over time, however,
+.\"O your memory of each spell if you do not use it, and you will need 
+.\"O to relearn it. Casting a spell reinforces your memory of it, so you may
+.\"O never need to relearn a frequently used spell.
+呪文を唱えることは、魔法のエネルギーを呼び起こしてそれを精神そのもの
+に集中させることである。
+あなた自身の内部から出る魔法のエネルギーが開放され、
+連続して呪文を唱えると疲れてしまう。
+呪文を唱えるには練習が必要である。
+練習していれば、それぞれの呪文領域の技能は向上していく。
+しかしながら、呪文を使用していないと、時間が経つにつれてそれぞれの
+呪文に関する記憶は薄れ、もう一度呪文を学ぶ必要がでてくるだろう。
+繰返し呪文を使用した場合は記憶は強化され、頻繁に再び学ぶ必要は少なくなるだろう。
+.pg
+.\"O Some spells are
+.\"O directional\(emyou must give a direction in which to cast them.  You can also
+.\"O cast them at yourself (just give a `.' or `s' for the direction). Be warned,
+.\"O however, for this is often unwise.  Other spells are nondirectional\(emthey
+.\"O don't require a direction.
+指向性のある呪文の場合、呪文を唱える方向を指定する必要がある。
+方向として`.'または`s'を指定することで自分自身に対して呪文を唱えることもできる。
+しかし、これはしばしば愚かな行為である。
+指向性のない呪文の場合、方向を指定する必要はない。
+.pg
+.\"O Just as weapons are divided into groups in which a character can become
+.\"O proficient (to varying degrees), spells are similarly grouped.
+.\"O Successfully casting a spell exercises the skill group; sufficient skill
+.\"O may increase the potency of the spell and reduce the risk of spell failure.
+.\"O Skill slots are shared with weapons skills.  (See also the section on
+.\"O ``Weapon proficiency''.)
+武器が習熟度の面でグループ分けされているのと同様、呪文もグループ分けされている。
+呪文を唱えるのに成功すると、そのグループを訓練したことになる。
+十分な技能があれば呪文の効果を高め、失敗の可能性を低めることができる。
+技能スロットは武器スキルと共有する。(``武器の技量''の項も参照のこと)
+.pg
+.\"O Casting a spell also requires flexible movement, and wearing various types
+.\"O of armor may interfere with that.
+魔法を唱えるには自由に移動できなければならない。また、いくつかの種類の鎧を
+着ていると魔法を唱えるのを妨げるだろう。
+.pg
+.\"O The command to read a spellbook is the same as for scrolls, `r'
+.\"O (read).  The `+' command lists your current spells, their levels,
+.\"O categories, and chances for failure.  
+.\"O The `Z' (cast) command casts a spell.
+.\"O The ``#enhance'' extended command advances your spellcasting skills.
+魔法書を読むためのコマンドは巻物を読むときと同じく `r'(read: 読む) である。
+`+' コマンドにより、知っている呪文とそのレベル，分野，成功率が一覧表示される。
+`Z'(cast: 呪文を唱える) コマンドにより呪文を唱える。
+``#enhance''拡張コマンドにより魔法詠唱スキルを上昇させることができる。
+.hn 2
+.\"O Tools (`(')
+道具 (`(')
+.pg
+.\"O Tools are miscellaneous objects with various purposes.  Some tools
+.\"O have a limited number of uses, akin to wand charges.  For example, lamps burn
+.\"O out after a while.  Other tools are containers, which objects can
+.\"O be placed into or taken out of.
+道具はいろいろな目的に使う種々雑多な物である。杖などと同じように使用
+回数に制限のある物もある。例えばランプはしばらくたつと燃え尽きてしまう。
+その他の道具の中には容器も含まれており、物を出し入れすることができる。
+.pg
+.\"O The command to use tools is `a' (apply).
+道具を使うためのコマンドは `a'(apply: 道具を用いる) である。
+.hn 3
+.\"O Containers
+箱
+.pg
+.\"O You may encounter bags, boxes, and chests in your travels.  A tool of
+.\"O this sort can be opened with the ``#loot'' extended command when
+.\"O you are standing on top of it (that is, on the same floor spot),
+.\"O or with the `a' (apply) command when you are carrying it.  However,
+.\"O chests are often locked, and are in any case unwieldy objects.
+冒険の途中で鞄や箱やひつに出くわすこともあるであろう。
+これらは置いてある場所に立っている場合には
+拡張コマンド「#loot」によって、
+また持っているときには `a'(apply: 道具を用いる) コマンドで開けることができる。
+しかしながらひつにはしばしば錠がかかっており、大抵は重くて運びにくい物体である。
+.\"O You must set one down before unlocking it by
+.\"O using a key or lock-picking tool with the `a' (apply) command,
+.\"O by kicking it with the `^D' command,
+.\"O or by using a weapon to force the lock with the ``#force'' extended command.
+ひつは手に持つことはできない物なので、
+錠をはずす(`a'(apply: 道具を用いる) コマンドで鍵や錠をはずす道具を使ったり、
+`^D'コマンドで蹴とばしたり、
+拡張コマンド``#force''により武器を使ってこじ開けるなどの方法による)には
+床に置かなくてはならない。
+.pg
+.\"O Some chests are trapped, causing nasty things to happen when you
+.\"O unlock or open them.  You can check for and try to deactivate traps
+.\"O with the ``#untrap'' extended command.
+ひつには罠が仕掛けられているものもあり、錠をはずしたりふたを開けたり
+したときに不快な出来事が起きる。拡張コマンド``#untrap''によってチェックを
+して罠が無効になるよう試みることができる。
+.hn 2
+.\"O Amulets (`"')
+魔除け (`"')
+.pg
+.\"O Amulets are very similar to rings, and often more powerful.  Like
+.\"O rings, amulets have various magical properties, some beneficial,
+.\"O some harmful, which are activated by putting them on.
+魔除けは指輪と大変よく似ており、しばしばもっと大きな効力を持っている。
+指輪と同じように魔除けにはいろいろな魔法の特性があり、有益なものも有害
+なものもあって、身につけることにより効力を発揮する。
+.pg
+.\"O Only one amulet may be worn at a time, around your neck.
+魔除けは一つだけしか首にかけることができない。
+.pg
+.\"O The commands to use amulets are the same as for rings, `P' (put on)
+.\"O and `R' (remove).
+魔除けを使うためのコマンドは指輪の場合と同じく `P'(put on: 指輪を
+はめる) と `R'(remove: 指輪をはずす) である。
+.hn 2
+.\"O Gems (`*')
+宝石 (`*')
+.pg
+.\"O Some gems are valuable, and can be sold for a lot of gold.  They are also
+.\"O a far more efficient way of carrying your riches.  Valuable gems increase
+.\"O your score if you bring them with you when you exit.
+宝石の中には価値のあるものもあり、高値で売れる。
+宝石は財産を持ち歩く方法としてとして極めて効果的なやり方である。
+価値のある宝石を脱出時に所持していれば得点に加算される。
+.pg
+.\"O Other small rocks are also categorized as gems, but they are much less
+.\"O valuable.  All rocks, however, can be used as projectile weapons (if you
+.\"O have a sling).  In the most desperate of cases, you can still throw them
+.\"O by hand.
+他の小さな石も宝石に分類されるが、その価値はほとんどない。
+しかし、全ての石は(もしスリングを持っているなら)弾として有効である。
+窮余に陥いったら手で投げることも可能である。
+.hn 2
+.\"O Large rocks (`\`')
+大きな岩 (`\`')
+.pg
+.\"O Statues and boulders are not particularly useful, and are generally
+.\"O heavy.  It is rumored that some statues are not what they seem.
+彫像や巨石は特に有用ではないし、一般的に重いものである。
+見かけとは異なった彫像もあるという噂である。
+.pg
+.\"O Very large humanoids (giants and their ilk) have been known to use boulders
+.\"O as weapons.
+巨大なヒューマノイド(巨人やその仲間)は巨石を武器として用いることができる。
+.hn 2
+.\"O Gold (`$')
+金 (`$')
+.pg
+.\"O Gold adds to your score, and you can buy things in shops with it.
+金は得点に加算され、また店では金で物を買うことができる。
+.\"O There are a number
+.\"O of monsters in the dungeon that may be influenced by the amount of gold
+.\"O you are carrying (shopkeepers aside).
+迷宮にはあなたの持つお金に影響されるかもしれない数多くの怪物が
+いる(店主は別として)。
+
+.hn 1
+.\"O Conduct
+制限プレイ
+.pg
+.\"O As if winning SLASH'EM were not difficult enough, certain players
+.\"O seek to challenge themselves by imposing restrictions on the
+.\"O way they play the game.  The game automatically tracks some of
+.\"O these challenges, which can be checked at any time with the #conduct
+.\"O command or at the end of the game.  When you perform an action which
+.\"O breaks a challenge, it will no longer be listed.  This gives
+.\"O players extra ``bragging rights'' for winning the game with these
+.\"O challenges.  Note that it is perfectly acceptable to win the game
+.\"O without resorting to these restrictions and that it is unusual for
+.\"O players to adhere to challenges the first time they win the game.
+単に SLASH'EM に勝利するだけでは満足できない一部のプレイヤーは、
+プレイに制限を設けることに挑戦している。
+これらの挑戦の一部はゲームによって自動的に記録され、
+ゲーム中いつでも #conduct コマンドで確認できる。
+またゲーム終了時にも表示される。
+挑戦に反するような行動を取ると、もはやその挑戦は表示されない。l
+これらの挑戦に勝利することによって、プレイヤーは追加の``自慢する権利''を
+得られる。
+なお、これらの制限に従うことなくゲームに勝利することも
+完全に有効であり、最初にゲームに勝利するときは普通これらの挑戦は関係ない。
+.pg
+.\"O Several of the challenges are related to eating behavior.  The most
+.\"O difficult of these is the foodless challenge.  Although creatures
+.\"O can survive long periods of time without food, there is a physiological
+.\"O need for water; thus there is no restriction on drinking beverages,
+.\"O even if they provide some minor food benefits.
+.\"O Calling upon your god for help with starvation does
+.\"O not violate any food challenges either.
+挑戦のいくつかは食べ物に関するものである。
+最も困難な挑戦は食料なしの挑戦である。
+生物は食料なしでも長い間生存できるが、水は必要である。
+従って、飲み物に対しては何の制限もない。例え栄養分があってもである。
+神に祈って飢えをしのぐことはいかなる食べ物に関する挑戦にも違反しない。
+.pg
+.\"O A strict vegan diet is one which avoids any food derived from animals.
+.\"O The primary source of nutrition is fruits and vegetables.  The
+.\"O corpses and tins of blobs (`b'), jellies (`j'), and fungi (`F') are
+.\"O also considered to be vegetable matter.  Certain human
+.\"O food is prepared without animal products; namely, lembas wafers, cram
+.\"O rations, food rations (gunyoki), K-rations, and C-rations.
+.\"O Metal or another normally indigestible material eaten while polymorphed
+.\"O into a creature that can digest it is also considered vegan food.
+.\"O Note however that eating such items still counts against foodless conduct.
+厳密な菜食主義者は動物から作られた食べ物を食べない。
+基本的な栄養源は果物と野菜である。
+ブロッブ(`b')、ゼリー(`j')、細菌(`F')も野菜とみなされる。
+人間の食料にも動物を使っていないものがある。
+レンバス、クラム、「食料」(丸薬)、Ｋレーション、Ｃレーションがそうである。
+他の生物に変化しているときは、金属などの普通消化できない物質も
+厳密な菜食主義者用の食料として扱われる。
+しかし、これらの物も食料なしの挑戦には反することに注意すること。
+.pg
+.\"O Vegetarians do not eat animals;
+.\"O however, they are less selective about eating animal byproducts than vegans.
+.\"O In addition to the vegan items listed above, they may eat any kind
+.\"O of pudding (`P') other than the black puddings,
+.\"O eggs and food made from eggs (fortune cookies and pancakes),
+.\"O food made with milk (cream pies and candy bars), and lumps of
+.\"O royal jelly.  Monks are expected to observe a vegetarian diet.
+菜食主義者は動物を食べない。
+しかし、動物からの副生産物を食べることは厳密な菜食主義者ほどは厳しくない。
+上記の厳密な菜食主義者が食べられるものに追加して、
+ブラックプリン以外のプリン(`P')、卵、卵から作られた食べ物
+(占いクッキーとパンケーキ)、牛乳から造られた食べ物
+(クリームパイとキャンディーバー)、ロイヤルゼリーを食べることができる。
+モンクは菜食主義者とみなされる。
+.pg
+.\"O Eating any kind of meat violates the vegetarian, vegan, and foodless
+.\"O conducts.  This includes tripe rations, the corpses or tins of any
+.\"O monsters not mentioned above, and the various other chunks of meat
+.\"O found in the dungeon.  Swallowing and digesting a monster while polymorphed
+.\"O is treated as if you ate the creature's corpse.
+.\"O Eating leather, dragon hide, or bone items while
+.\"O polymorphed into a creature that can digest it, or eating monster brains
+.\"O while polymorphed into a mind flayer, is considered eating
+.\"O an animal, although wax is only an animal byproduct.
+肉を食べることは厳密な菜食主義者、菜食主義者、食料なしの挑戦に反する。
+これにはほし肉、上記以外の怪物の死体や缶詰、迷宮で見つかる
+その他の肉のかたまりを含む。
+変化中に「飲み込んで消化」攻撃をかけるのはその怪物の死体を
+食べたものとみなす。
+皮、竜鱗、骨でできた物体を、これらを消化できる怪物に変化して食べたり、
+マインドフレイヤーに変化して脳を食べることは動物を食べたとみなす。
+ただし、蜜蝋は動物の副生成物とみなす。
+.pg
+.\"O Regardless of conduct, there will be some items which are indigestible,
+.\"O and others which are hazardous to eat.  Using a swallow-and-digest
+.\"O attack against a monster is equivalent to eating the monster's corpse.
+.\"O Please note that the term ``vegan'' is used here only in the context of
+.\"O diet.  You are still free to choose not to use or wear items derived
+.\"O from animals (e.g. leather, dragon hide, bone, horns, coral), but the
+.\"O game will not keep track of this for you.  Also note that ``milky''
+.\"O potions may be a translucent white, but they do not contain milk,
+.\"O so they are compatible with a vegan diet.  Slime molds or
+.\"O player-defined ``fruits'', although they could be anything
+.\"O from ``cherries'' to ``pork chops'', are also assumed to be vegan.
+挑戦に関わらず、消化不可能な物もあり、食べると危険なものもある。
+怪物に対して「飲み込んで消化」攻撃をかけることは、
+その怪物の死体を食べたものとみなす。
+「厳格な菜食主義者(``vegan'')」という言葉は食べ物に関する文脈でのみ
+用いられることに注意してほしい。
+動物から作られた物(皮、竜の鱗、骨、角、さんご)を使ったり身につけたり
+することは制限に違反しない。
+また、「ミルク色の」水薬は不透明な白色ではあるが、牛乳を含んでいるわけ
+ではないので、厳密な菜食主義者の制限に違反しない。
+スライムモルドやプレイヤーが定義した``fruits''は、
+例え「さくらんぼ」であろうが「ポークチョップ」であろうが、
+厳密な菜食主義者の制限に違反しない。
+.pg
+.\"O An atheist is one who rejects religion.  This means that you cannot
+.\"O #pray, #offer sacrifices to any god, #turn undead, or #chat with a priest.
+.\"O Particularly selective readers may argue that playing Monk or Priest
+.\"O characters should violate this conduct; that is a choice left to the
+.\"O player.  Offering the Amulet of Yendor to your god is necessary to
+.\"O win the game and is not counted against this conduct.  You are also
+.\"O not penalized for being spoken to by an angry god, priest(ess), or
+.\"O other religious figure; a true atheist would hear the words but
+.\"O attach no special meaning to them.
+無神論者は宗教を否定する。つまり、#pray(祈る), #offer(いけにえを捧げる),
+#turn (不死のものを戻す), 僧侶に対する #chat(話す)ことはできない。
+一部の読者はモンクや僧侶でプレイするのもこの制限に反していると主張するかもしれないが、
+ここではプレイヤーの選択の余地を残してある。
+イェンダーの魔除けを神に捧げるのはゲームに勝利するために必要なので
+制限には反しないものとする。
+また、怒った神や僧侶やその他の宗教的存在が話す言葉を聞いても制限には反しない。
+真の無神論者は言葉は聞くが，そこになんら特別な意味を見出さない。
+.pg
+.\"O Most players fight with a wielded weapon (or tool intended to be
+.\"O wielded as a weapon).  Another challenge is to win the game without
+.\"O using such a wielded weapon.  You are still permitted to throw,
+.\"O fire, and kick weapons; use a wand, spell, or other type of item;
+.\"O or fight with your hands and feet.
+ほとんどのプレイヤーは武器(あるいは武器として装備することを
+考慮している道具)を手に戦う。
+挑戦の一つはこのような武器を手にして使わずにゲームに勝利することである。
+武器を投げたり、発射したり、蹴ったりするのは許される。
+また、杖、呪文、あるいはその他のアイテムを使ったり、
+素手や脚で戦うことも許される。
+.pg
+.\"O In SLASH'EM, a pacifist refuses to cause the death of any other monster
+.\"O (i.e. if you would get experience for the death).  This is a particularly
+.\"O difficult challenge, although it is still possible to gain experience
+.\"O by other means.
+SLASH'EM において、平和主義者は他の怪物を殺してはならない(言い換えると、
+怪物の死によって経験値を得てはならない)。
+これは特に難しい挑戦であるが、他の手段によって経験値を得ることは可能である。
+.pg
+.\"O An illiterate character cannot read or write.  This includes reading
+.\"O a scroll, spellbook, fortune cookie message, or t-shirt; writing a
+.\"O scroll; or reading (or making) an engraving of anything other than a single ``x'' (the
+.\"O traditional signature of an illiterate person).  Reading
+.\"O any item that is absolutely necessary to win the game is not counted
+.\"O against this conduct.  The identity of scrolls and spellbooks (and
+.\"O knowledge of spells) in your starting inventory is assumed to be
+.\"O learned from your teachers prior to the start of the game and isn't
+.\"O counted.
+文盲者は読み書きができない。これには以下の行為が含まれる。
+巻き物を読む、魔法書を読む、占いクッキーのメッセージを読む、Tシャツの文字を読む、
+巻き物を読む(または書く)、``x''一文字(文盲者の伝統的なサイン)以外の文字を刻む。
+ゲームに勝利するために絶対に必要なアイテムを読むことは制限には反しないものとする。
+ゲーム開始時に持っている巻き物と魔法書の内容を知っていることおよび
+呪文の知識は、ゲーム開始以前に教師から教わったものとみなし、
+制限には反しないものとする。
+.pg
+.\"O There are several other challenges tracked by the game.  It is possible
+.\"O to eliminate one or more species of monsters by genocide; playing without
+.\"O this feature is considered a challenge.  When the game offers you an
+.\"O opportunity to genocide monsters, you may respond with the monster type
+.\"O ``none'' if you want to decline.  You can change the form of an item into
+.\"O another item of the same type (``polypiling'') or the form of your own
+.\"O body into another creature (``polyself'') by wand, spell, or potion of
+.\"O polymorph; avoiding these effects are each considered challenges.
+.\"O Polymorphing monsters, including pets, does not break either of these
+.\"O challenges.
+.\"O Finally, you may sometimes receive wishes; a game without an attempt to
+.\"O wish for an object is a challenge, as is a game without wishing for
+.\"O an artifact (even if the artifact immediately disappears).
+.\"O wish for any items is a challenge, as is a game without wishing for
+.\"O an artifact (even if the artifact immediately disappears).  When the
+.\"O game offers you an opportunity to make a wish for an item, you may
+.\"O choose ``nothing'' if you want to decline.
+その他にいくつかの細かいゲームとして記録される挑戦がある。
+怪物は虐殺することが可能である。これをせずにプレイするのも挑戦とみなす。
+怪物を虐殺する機会が与えられたとき、
+``none''(または``なし'')と答えると、虐殺しないままにすることができる。
+あなたはアイテムを同じグループの他のアイテムに変化させたり (``polypiling'')、
+変化の杖・呪文・薬で自分の体を他の生物に変えたり(``polyself'')できる。
+これらの効果を用いないことはそれぞれ挑戦とみなす。
+最後に、あなたはときどき願いをかなえてもらうことがある。
+なんのアイテムも願わずにプレイするのは一つの挑戦であり、
+聖器を願わない(たとえ直ちに消滅したとしても)でプレイするのも一つの挑戦である。
+アイテムを願う機会を与えられたとき、
+``nothing''または``なし''と答えると、願わないままにすることができる。
+
+.hn 1
+.\"O Options
+オプション
+.pg
+.\"O Due to variations in personal tastes and conceptions of how SLASH'EM
+.\"O should do things, there are options you can set to change how SLASH'EM
+.\"O behaves.
+人にはそれぞれいろいろな好みがあり SLASH'EM の遊び方もそれぞれ異なっているの
+で、SLASH'EM の振る舞いを変更するため設定できるオプションがある。
+.hn 2
+.\"O Setting the options
+オプションの設定
+.pg
+.\"O Options may be set in a number of ways.  Within the game, the `O'
+.\"O command allows you to view all options and change most of them.
+.\"O You can also set options automatically by placing them in the
+.\"O SLASHEMOPTIONS environment variable or in a configuration file.
+.\"O Some versions of SLASH'EM also have front-end programs that allow
+.\"O you to set options before starting the game.
+オプションを設定する方法にはいくつかある。ゲーム中に `O' コマンドを
+使うことによって全てのオプションを見ることができ、そのほとんどを変更で
+きる。また、環境変数``SLASHEMOPTIONS''や設定ファイルで自動的に設定する
+こともできる。SLASH'EM のバージョンによってはゲーム開始前にオプションを設
+定することができるプログラムがついていることもある。
+.hn 2
+.\"O Using the SLASHEMOPTIONS environment variable
+環境変数 SLASHEMOPTIONS を使う
+.pg
+.\"O The SLASHEMOPTIONS variable is a comma-separated list of initial
+.\"O values for the various options.  Some can only be turned on or off.
+.\"O You turn one of these on by adding the name of the option to the list,
+.\"O and turn it off by typing a `!' or ``no'' before the name.  Others take a 
+.\"O character string as a value.  You can set string options by typing
+.\"O the option name, a colon or equals sign, and then the value of the string.
+.\"O The value is terminated by the next comma or the end of string.
+環境変数 SLASHEMOPTIONS にはいろいろなオプションの初期値をカンマで区
+切って列挙し設定する。オプションのうちのいくつかのものは単にオンかオフ
+の選択ができるだけである。そのオプション名をリストに入れるとオンになり、
+オプション名の前に `!' か``no''をつけるとオフになる。その他のオプショ
+ンでは設定値として文字列が必要である。これらのオプションを設定するには
+オプション名、コロンまたはイコール記号、設定値の順で入力すればよい。
+設定値は次のカンマもしくは文字列の最後までとなる。
+.pg
+.\"O For example, to set up an environment variable so that ``autoquiver'' is on,
+.\"O ``autopickup'' is off, the name is set to ``Blue Meanie'', and the fruit
+.\"O is set to ``papaya'', you would enter the command
+例えば``autoquiver''をオン、``autopickup''をオフ、名前が``Blue Meanie'' 
+に、フルーツが``papaya''になるように環境変数を設定するには \fIcsh\fP では次の
+コマンドを入力すればよい。
+(!は特殊文字なのでエスケープしてやる必要があることに注意)
+.sd
+% \fBsetenv SLASHEMOPTIONS "autoquiver,\e!autopickup,name:Blue Meanie,fruit:papaya"\fP
+.ed
+.\"O in \fIcsh\fP (note the need to escape the ! since it's special to the shell), or
+\fBsh\fP または \fBksh\fP では
+.sd
+$ \fBSLASHEMOPTIONS="autoquiver,!autopickup,name:Blue Meanie,fruit:papaya"\fP
+$ \fBexport SLASHEMOPTIONS\fP
+.ed
+.\"O in \fIsh\fP or \fIksh\fP.
+とすればよい。
+.hn 2
+.\"O Using a configuration file
+設定ファイルを使う
+.pg
+.\"O Any line in the configuration file starting with `#' is treated as a comment.
+.\"O Any line in the configuration file starting with ``OPTIONS='' may be
+.\"O filled out with options in the same syntax as in SLASHEMOPTIONS.
+設定ファイルの中の`#'で始まる行はコメントとして扱われる。
+設定ファイルの中の``OPTION=''で始まる行は環境変数``SLASHEMOPTIONS''
+と同じ文法でオプションが記述されているものと見なす。
+.\"O Any line starting with ``DUNGEON='', ``EFFECTS='', ``MONSTERS='',
+.\"O ``OBJECTS='', ``TRAPS='', or ``BOULDER=''
+.\"O is taken as defining the corresponding
+.\"O .op dungeon,
+.\"O .op effects,
+.\"O .op monsters,
+.\"O .op objects
+.\"O .op traps
+.\"O or
+.\"O .op boulder
+.\"O option in a different syntax,
+.\"O a sequence of decimal numbers giving the character position
+.\"O in the current font to be used in displaying each entry.
+``DUNGEON=''、``EFFECTS=''、``MONSTERS=''、``OBJECTS=''、``TRAPS=''、``BOULDER=''で
+始まる行はそれぞれ
+.op dungeon
+、
+.op effects
+、
+.op monsters
+、
+.op objects
+、
+.op traps
+、
+.op boulder
+ オプションとして扱われるが、その指定方法は、
+現在使われているフォントのかわりに使われるキャラクタコードを示す 10 進数の列である。
+.\"O A zero in any entry in such a sequence leaves the display of that
+.\"O entry unchanged; this feature is not available using the option syntax.
+この列に 0 を指定すると、その項目は変更されない。
+この機能はオプションの文法では利用できない。
+.\"O Such a sequence can be continued to multiple lines by putting a `\e'
+.\"O at the end of each line to be continued.
+この列は各行の最後に`\e'をつけることによって複数行に渡ることができる。
+.\"O Any line starting with ``TILESET='' defines a tile set in the same syntax
+.\"O as in SLASHEMOPTIONS (although the options are different). See the
+.\"O section on tile sets, below, for more information.
+Any line starting with ``TILESET='' defines a tile set in the same syntax
+as in SLASHEMOPTIONS (although the options are different). See the
+section on tile sets, below, for more information.
+.pg
+.\"O If your copy of the game included the compile time AUTOPICKUP_EXCEPTIONS
+.\"O option, then any line starting with ``AUTOPICKUP_EXCEPTION='' is taken
+.\"O as defining an exception to the 
+.\"O .op pickup_types
+.\"O option. 
+.\"O There is a section of this Guidebook that discusses that.
+コンパイル時に AUTOPICKUP_EXCEPTIONS オプションが設定されていると、
+``AUTOPICKUP_EXCEPTION=''で始まる行によって
+.op pickup_type
+オプションの例外を定義できる。
+.pg
+.\"O The default name of the configuration file varies on different
+.\"O operating systems, but SLASHEMOPTIONS can also be set to
+.\"O the full name of a file you want to use (possibly preceded by an `@').
+標準設定の設定ファイル名は OS によって異なるが、
+環境変数``SLASHEMOPTIONS''で
+（先頭に`@'を付けることで）使用したい設定ファイル名を指定することができる。
+.hn 2
+.\"O Customization options
+カスタマイズオプション
+.pg
+.\"O Here are explanations of what the various options do.
+.\"O Character strings that are too long may be truncated.
+.\"O Some of the options listed may be inactive in your dungeon.
+以下にいろいろなオプションの役割を説明する。
+あまりに長すぎる文字列の部分は無視される。
+以下のオプションのうち実装によっては無効となっているオプションもある。
+.lp align
+.\"O Your starting alignment (align:lawful, align:neutral,
+.\"O or align:chaotic).  You may specify just the first letter.
+.\"O The default is to randomly pick an appropriate alignment.
+.\"O Cannot be set with the `O' command.
+スタート時の属性(align:lawful, align:neutral, align:chaotic)。
+最初の一文字で指定することもできる。
+標準設定ではランダムに選択される。
+`O' コマンドで設定することはできない。
+.lp autodig
+.\"O Automatically dig if you are wielding a digging tool and moving into a place
+.\"O that can be dug (default false).
+掘るための道具を手にしていて、掘ることができる地形に移動しようとしたとき、
+自動的に掘る（標準設定はオフ）。
+.lp "autopickup  "
+.\"O Automatically pick up things onto which you move (default on). 
+.\"O See
+.\"O .op pickup_types
+.\"O to refine the behavior.
+移動先にあるものを自動的に拾う（標準設定はオン）。
+この振る舞いをカスタマイズするためには
+.op pickup_types
+を参照すること。
+.lp "autoquiver  "
+.\"O This option controls what happens when you attempt the `f' (fire)
+.\"O command with an empty quiver.  When true, the computer will fill
+.\"O your quiver with some suitable weapon.  Note that it will not take
+.\"O into account the blessed/cursed status, enchantment, damage, or
+.\"O quality of the weapon; you are free to manually fill your quiver with
+.\"O the `Q' command instead.  If no weapon is found or the option is
+.\"O false, the `t' (throw) command is executed instead.  (default false)
+このオプションは矢筒が空の時に`f'(fire:矢筒の中にあるものを発射する)コマンドを
+実行した時にどうするかを決める。
+オンなら、コンピューターは適当な武器を矢筒に入れる。
+この時、呪い、祝福、魔法、劣化、武器の数などは考慮されないので注意すること。
+代わりに`Q'コマンドを使って自分の好きな物を矢筒に入れる。
+入れる武器がないか、このオプションがオフの時は
+代わりに`t'(throw:物を投げる)コマンドが実行される。
+(標準設定はオフ)
+.lp boulder
+.\"O Set the character used to display boulders (default is rock class symbol).
+巨岩を表示するのに用いるキャラクタ（標準設定は岩を表すキャラクタ）。
+.lp catname
+.\"O Name your starting cat (ex. ``catname:Morris'').
+.\"O Cannot be set with the `O' command.
+スタート時の猫の名前(例: catname:Morris)。
+`O' コマンドで設定することはできない。
+.lp character
+.\"O Pick your type of character (ex. ``character:Monk'');
+.\"O synonym for ``role''.  See ``name'' for an alternate method
+.\"O of specifying your role.  Normally only the first letter of
+.\"O the value is examined; the string ``random'' is an exception.
+キャラクターのタイプを設定する(例:``character:Monk'')。
+``role''オプションと同じである。
+職業を設定するその他の方法については``name''オプションを参照のこと。
+``random''以外の文字列は最初の 1 文字だけで判別される。
+.lp checkpoint
+.\"O Save game state after each level change, for possible recovery after
+.\"O program crash (default on).
+プログラムがクラッシュした時に復旧できるように
+階を移動する毎に状態をセーブする（標準設定はオン）。
+.lp "color   "
+.\"O Use color for different monsters, objects, and dungeon features
+.\"O (default on for microcomputers).
+色々な怪物や物や洞窟の地形をカラーで表示する
+(マイクロコンピュータでは標準設定はオン)。
+.lp checkspace
+.\"O Check free disk space before writing files to disk (default on).
+.\"O You may have to turn this off if you have more than 2 GB free space
+.\"O on the partition used for your save and level files.
+.\"O Only applies when MFLOPPY was defined during compilation.
+ファイルを書き込む前にディスクの空き容量をチェックする(標準設定はオン)。
+セーブファイルやレベルファイルのために使うパーティションに2GB以上の
+空き容量がある場合、このオプションをオフをしなければならないかもしれない。
+このオプションはコンパイル時にMFLOPPYが定義されているときのみ適用される。
+.lp cmdassist
+.\"O Have the game provide some additional command assistance for 
+.\"O new players if it detects some anticipated mistakes (default on).
+ありがちなミスを検出したときに新規プレイヤーのために
+追加のコマンド補助メッセージを表示する(標準設定はオン)。
+.lp "confirm "
+.\"O Have user confirm attacks on pets, shopkeepers, and other
+.\"O peaceable creatures (default on).
+ペット、店主、その他の攻撃してこない生物を
+攻撃しようとしたときに確認をする(標準設定はオン)。
+.lp DECgraphics
+.\"O Use a predefined selection of characters from the DEC VT-xxx/DEC
+.\"O Rainbow/ANSI line-drawing character set to display the dungeon/effects/traps
+.\"O instead of having to define a full graphics set yourself (default off).
+.\"O This option also sets up proper handling of graphics
+.\"O characters for such terminals, so you should specify it when appropriate
+.\"O even if you override the selections with your own graphics strings.
+洞窟の表示に用いる文字をあなた自身ですべて定義する代わりに、
+DEC VT-xxx/DEC Rainbow/ANSI 罫線文字セットから
+あらかじめ用意された設定を使用する(標準設定はオフ)。
+このオプションはまたターミナルが適切なグラフィックキャラクターを扱えるよう設定する。
+すなわち、あなたが自分でグラフィック文字を上書き設定するときにも
+明示しなくてはいけない。
+.lp disclose
+.\"O Controls options for disclosing various information when the game ends (defaults
+.\"O to all possibilities being disclosed).
+.\"O The possibilities are:
+.\"O .sd
+.\"O .si
+.\"O i - disclose your inventory.
+.\"O a - disclose your attributes.
+.\"O v - summarize monsters that have been vanquished.
+.\"O g - list monster species that have been genocided.
+.\"O c - display your conduct.
+.\"O .ei
+.\"O .ed
+ゲーム終了時に表示する情報を制御する(標準設定は、全てを表示する)。
+設定できるものは以下の通り。
+.sd
+.si
+i - 持ち物の鑑定
+a - 属性の公開
+v - 退治した怪物の一覧
+g - 抹殺した怪物種
+c - 挑戦
+.ei
+.ed
+.\"O Each disclosure possibility can optionally be preceded by a prefix which
+.\"O let you refine how it behaves. Here are the valid prefixes:
+.\"O .sd
+.\"O .si
+.\"O y - prompt you and default to yes on the prompt.
+.\"O n - prompt you and default to no on the prompt.
+.\"O + - disclose it without prompting.
+.\"O - - do not disclose it and do not prompt.
+.\"O .ei
+.\"O .ed
+それぞれの表示に対して、その前にどのように振舞うかを指示する文字を
+つけることができる。文字の意味は以下のとおり。
+.sd
+.si
+y - 確認するが、標準設定はイエスにする。
+n - 確認するが、標準設定はノーにする。
++ - 確認なしに表示する。
+- - 確認なしで非表示とする。
+.ei
+.ed
+.\"O (ex. ``disclose:yi na +v -g -c'')
+(例: ``disclose:yi na +v -g -c'')
+.\"O The example sets 
+.\"O .op inventory
+.\"O to prompt and default to yes,
+.\"O .op attributes
+.\"O to prompt and default to no,
+.\"O .op vanquished
+.\"O to disclose without prompting,
+.\"O .op genocided
+.\"O to not disclose and not to prompt,
+.\"O .op conduct
+.\"O to not disclose and not to prompt.
+このように設定した場合、
+.op 持ち物
+は確認する(標準設定はイエス)。
+.op 属性
+は確認する(標準設定はノー)。
+.op 退治した怪物
+は確認なしに表示する。
+.op 抹殺した怪物
+は確認せずに非表示とする。
+.op 挑戦
+は確認せずに非表示とする。
+.\"O Note that the vanquished monsters list includes all monsters killed by
+.\"O traps and each other as well as by you.
+退治した怪物の一覧は罠や同士討ちによって死んだ怪物も含むことに注意。
+.lp dogname
+.\"O Name your starting dog (ex. ``dogname:Fang'').
+.\"O Cannot be set with the `O' command.
+スタート時の犬の名前(例: dogname:Fang)。
+`O' コマンドで設定することはできない。
+.lp dungeon
+.\"O Set the graphics symbols for displaying the dungeon
+.\"O (default \&``\ |--------||.-|++##.##<><>_|\e\e##{}.}..##\ #}'').
+迷宮表示のためのグラフィックシンボルを設定する
+(標準設定は \&``\ |--------||.-|++##.##<><>_|\e\e##{}.}..##\ #}'')
+.\"O The
+.\"O .op dungeon
+.\"O option should be followed by a string of 1-42
+.\"O characters to be used instead of the default map-drawing characters.
+.op dungeon
+オプションは標準設定の文字の代わりに地図を描くのに使用する 1 から 42 文字の
+文字列を書く。
+.\"O The dungeon map will use the characters you specify instead of the
+.\"O default symbols, and default symbols for any you do not specify.
+.\"O Remember that you may need to escape some of these characters
+.\"O on a command line if they are special to your shell.
+標準設定の文字の代わりにここで設定した文字を使って洞窟の地図が
+表示され、標準設定の文字は使われない。
+もしあなたのシェルが特別扱いする文字を使うなら、
+それらのキャラクタをエスケープする必要があるかもしれないことに注意。
+
+.\"O Note that SLASH'EM escape-processes this option string in conventional C
+.\"O fashion.  This means that `\e' is a prefix to take the following
+.\"O character literally.  Thus `\e' needs to be represented as `\e\e'.
+.\"O The special escape
+.\"O form `\em' switches on the meta bit in the following character, and the `^'
+.\"O prefix causes the following character to be treated as a control
+.\"O character.
+このオプションで設定される文字列は、現在では通常の C 言語で使
+われる方式でエスケープ処理されることに注意しなくてはならない。
+`\e' の後の文字はその文字そのものとして取り扱われ、
+特別なプレフィックスとしては扱われないということである。
+従って、`\e' は `\e\e' とする必要がある。
+特殊なエスケープ形式である `\em' は後ろの文字のメタビットをオンにし、
+'^' プレフィックスは後ろの文字をコントロールキャラクタとみなすようにする。
+
+.\"O The order of the symbols is:  solid rock, vertical wall, horizontal
+.\"O wall, upper left corner, upper right corner, lower left corner, lower
+.\"O right corner, cross wall, upward T wall, downward T wall, leftward T
+.\"O wall, rightward T wall, no door, vertical open door, horizontal open
+.\"O door, vertical closed door, horizontal closed door, iron bars, tree,
+.\"O floor of a room, dark corridor, lit corridor, stairs up, stairs down,
+.\"O ladder up, ladder down, altar, grave, throne, kitchen sink, toilet,
+.\"O fountain, pool or moat,
+.\"O ice, lava, vertical lowered drawbridge, horizontal lowered drawbridge,
+.\"O vertical raised drawbridge, horizontal raised drawbridge, air, cloud,
+.\"O under water.
+シンボルは以下の順序である：
+堅い岩、壁(縦)、壁(横)、左上の角、右上の角、左下の角、右下の角,
+壁の交差、T 字状の壁、逆 T 字状の壁、左向きの T字状の壁,
+右向きの T 字状の壁、扉のない出入口、開いた扉(縦)、開いた扉(横),
+閉じた扉(縦)、閉じた扉(横)、鉄の棒、木、部屋の床、暗い通路、明るい通路,
+上への階段、下への階段、上へのはしご、下へのはしご、祭壇、墓, 玉座、
+流し台、トイレ、泉、水たまりまたは堀、氷、溶岩、降りている跳ね橋(縦)、
+降りている跳ね橋(横)、上がっている跳ね橋(縦)、上がっている跳ね橋(横)、
+空気、雲、水中
+
+.\"O You might want to use `+' for the corners and T walls for a more
+.\"O aesthetic, boxier display.  Note that in the next release, new symbols
+.\"O may be added, or the present ones rearranged.
+より美しく四角の表示を得るためには角と T 字状の壁に '+' を使った
+方がよいかも知れない。
+次のリリースでは新しいシンボルが加わったり、
+現在のものが再構成される可能性があるので注意。
+
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp effects
+.\"O Set the graphics symbols for displaying special effects
+.\"O (default \&``|-\e\e/*!)(0#@*/-\e\e||\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-/'').
+効果表示のためのグラフィックシンボルを設定する
+(標準設定は\&``|-\e\e/*!)(0#@*/-\e\e||\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-//-\e\e|\ |\e\e-/'')
+.\"O The
+.\"O .op effects
+.\"O option should be followed by a string of 1-83
+.\"O characters to be used instead of the default special-effects characters.
+.op effects
+オプションは標準設定の文字の代わりに地図を描くのに使用する 1-83 文字の
+文字列を書く。
+.\"O This string is subjected to the same processing as the
+.\"O .op dungeon
+.\"O option.
+この文字列は
+.op dungeon
+オプションと同様に処理される。
+
+.\"O The order of the symbols is:  vertical beam, horizontal beam, left slant,
+.\"O right slant, digging beam, camera flash beam, left boomerang, right boomerang,
+.\"O four glyphs giving the sequence for magic resistance displays,
+.\"O the eight surrounding glyphs for swallowed display,
+.\"O nine glyphs each for magical, fire, cold, death, lightning, poison and acid explosions.
+シンボルは以下の順序である：
+光線(縦)、光線(横)、光線(左上から右下)、光線(右上から左下)、
+掘削光線、カメラのフラッシュ、ブーメラン(左)、ブーメラン(右)、
+魔法防御に用いる 4 つの記号、飲み込まれたときに使われる 8 つの記号、
+魔法、炎、冷気、死、電撃、毒および酸の爆発に用いる 9 つの記号。
+.\"O An explosion consists of three rows (top, middle, and bottom) of three
+.\"O characters.  The explosion is centered in the center of this 3 by 3
+.\"O array.
+爆発は 3 キャラクタ 3 列からなり、
+爆発の中心はこの 3 × 3 の配列の中心になる。
+
+.\"O Note that in the next release, new symbols may be added,
+.\"O or the present ones rearranged.
+次のリリースでは新しいシンボルが加わったり、
+現在のものが再構成される可能性があるので注意。
+
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp extmenu
+.\"O Changes the extended commands interface to pop-up a menu of available commands.  
+.\"O It is keystroke compatible with the traditional interface except that it does
+.\"O not require that you hit Enter. It is implemented only by the tty port 
+.\"O (default off), when the game has been compiled to support tty graphics.
+拡張コマンドインターフェースを、有効なコマンドの一覧メニューが出るように変更する。
+キー入力は、最後に Enter を押す必要がないこと以外は伝統的なインターフェースと互換性がある。
+tty インターフェースにだけ実装されている。(標準設定はオフ)
+.lp female
+.\"O An obsolete synonym for ``gender:female''.
+``gender:female'' の古い別名。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp fixinv
+.\"O An object's inventory letter sticks to it when it's dropped (default on).
+.\"O If this is off, dropping an object shifts all the remaining inventory letters.
+持物の目録記号と物との対応はその物を下に置いても
+変化しない(標準設定はオン)。
+オフにしたときは物を下に置くとその物の目録記号以降の記号と
+物との対応が 1 つずつずれる。
+.lp "fruit   "
+.\"O Name a fruit after something you enjoy eating (ex. ``fruit:mango'')
+.\"O (default ``slime mold'').  Basically a nostalgic whimsy that SLASH'EM uses
+.\"O from time to time.  You should set this to something you find more
+.\"O appetizing than slime mold.  Apples, oranges, pears, bananas, and melons
+.\"O already exist in SLASH'EM, so don't use those.
+あなたの好物の果物にちなんでその名前を設定する(例:fruit:mango)
+(標準設定は「slime mold」)。
+元来 SLASH'EM で時々使われる懐古趣味的な妙な言葉である。
+slime mold(ネバネバかび)よりももっと食欲のわく食べ物にするべきであろう。
+apples(リンゴ)、oranges(オレンジ)、 pears(洋なし)、 bananas(バナナ)、
+melons (メロン) は SLASH'EM にはもう存在しているので、設定してはならない。
+.lp gender
+.\"O Your starting gender (gender:male or gender:female).
+.\"O You may specify just the first letter.  Although you can
+.\"O still denote your gender using the ``male'' and ``female''
+.\"O options, the ``gender'' option will take precedence.
+.\"O The default is to randomly pick an appropriate gender.
+開始時の性別(gender:male または gender:female).
+最初の一文字で指定することもできる。
+``male'' と ``female'' オプションを指定していても、
+``gender'' オプションが優先される。
+標準設定では適切な性別がランダムに選択される。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp ghoulname
+.\"O Name your starting ghoul (ex. ``ghoulname:Casper'').
+.\"O Cannot be set with the `O' command.
+開始時のグールの名前をつける (例:``ghoulname:Casper'').
+`O' コマンドで設定することはできない。
+.lp "help    "
+.\"O If more information is available for an object looked at
+.\"O with the `/' command, ask if you want to see it (default on). Turning help
+.\"O off makes just looking at things faster, since you aren't interrupted with the
+.\"O ``More info?'' prompt, but it also means that you might miss some
+.\"O interesting and/or important information.
+`/' コマンドを使って調べている物について何らかの情報がある場合、
+それを見るかどうかを尋ねる(標準設定はオン)。
+ヘルプが出ないようにすれば ``More info?'' というプロンプトに煩わされなくなるので、
+素早く物を調べることができる。
+しかしそれは興味深く重要な情報を見逃してしまうかも知れないことを意味する。
+.lp hilite_pet
+.\"O Visually distinguish pets from similar animals (default off).
+.\"O In text windowing, use text highlighting when color is turned off;
+.\"O with X tiles, display a heart symbol near pets.
+ペットを同種の動物から視覚的に区別する(標準設定はオフ)。
+テキストウィンドウ表示では color がオフのときに強調表示する。
+Xのタイルを使用するときは、ハートの記号をペットにつける。
+.lp horsename
+.\"O Name your starting horse (ex. ``horsename:Trigger'').
+開始時の馬の名前をつける (例:``horsename:Trigger'').
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp IBMgraphics
+.\"O Use a predefined selection of IBM extended ASCII characters to display the
+.\"O dungeon/effects/traps instead of having to define a full graphics set
+.\"O yourself (default off).
+洞窟、効果、罠の表示に用いる文字をあなた自身ですべて定義する代わりに、
+IBM 拡張 ASCII 文字セットからあらかじめ用意された設定を使用する
+(標準設定はオフ)。
+.\"O This option also sets up proper handling of graphics
+.\"O characters for such terminals, so you should specify it when appropriate
+.\"O even if you override the selections with your own graphics strings.
+このオプションはまたターミナルが適切なグラフィックキャラクターを扱えるよう設定する。
+すなわち、あなたが自分のグラフィック文字で上書き設定するときにも
+明示しなくてはいけない。
+.lp ignintr
+.\"O Ignore interrupt signals, including breaks (default off).
+ブレークを含む割り込み信号を無視する(標準設定はオフ)。
+.lp invweight
+Display the weights of items in your inventory (and at other times)
+in braces (default off).
+.lp keep_savefile
+Keeps the save file after restore.  SLASH'EM usually deletes your savefile
+after you restore,  making death permanent.  This option can allow you to
+restore from the last save. (default off).
+.lp legacy
+.\"O Display an introductory message when starting the game (default on).
+ゲーム開始時に説明メッセージを表示する(標準設定はオン)。
+.lp lit_corridor
+.\"O Show corridor squares seen by night vision or a light source held by your
+.\"O character as lit (default off).
+夜目やあなたのキャラクタが持っている光源によって見える通路を
+表示する (標準設定はオフ)。
+.lp lootabc
+.\"O Use the old `a', `b', and `c' keyboard shortcuts when
+.\"O looting, rather than the mnemonics `o', `i', and `b' (default off).
+箱を開けるときに`o', `i', `b'ではなく`a', `b', `c'のキーを使う
+(標準設定はオフ)。
+.lp "mail    "
+.\"O Enable mail delivery during the game (default on).
+ゲーム中にメールを配達するようにする(標準設定はオン)。
+.lp "male    "
+.\"O An obsolete synonym for ``gender:male''.
+``gender:male'' の古くなった別名。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp menustyle
+.\"O Controls the interface used when you need to choose various objects (in
+.\"O response to the Drop command, for instance).  The value specified should
+.\"O be the first letter of one of the following:  traditional, combination,
+.\"O partial, or full.  Traditional was the only interface available for
+.\"O earlier versions; it consists of a prompt for object class characters,
+.\"O followed by an object-by-object prompt for all items matching the selected
+.\"O object class(es).  Combination starts with a prompt for object class(es)
+.\"O of interest, but then displays a menu of matching objects rather than
+.\"O prompting one-by-one.  Partial skips the object class filtering and
+.\"O immediately displays a menu of all objects.  Full displays a menu of
+.\"O object classes rather than a character prompt, and then a menu of matching
+.\"O objects for selection.
+いろいろなオブジェクトを指定するとき(たとえば Dropコマンド)に用
+いるインタフェースの制御。値は tradional, combination, partial, full
+の 4 つのタイプの最初の一文字を指定する。
+``tradional''は古いバージョンで唯一利用できたもので、
+物の種類を示す文字の入力、次に選んだ種類に当てはまる全ての物を一つずつ
+確認する。
+``combination''は選択したい物の種類を示す文字を入力するが、
+次に当てはまる物を一つずつ確認で選択するのではなく、メニュー形式で選択する。
+``partial''は物の種類を選ぶことをせず、
+直ちに全ての物が表示されたメニューを表示する。
+``full''は物の種類の文字入力のかわりに、最初に物の種類のメニューを表示し、
+それから選択した種類に当てはまる物のメニューを表示する。
+.lp menu_deselect_all
+.\"O Menu character accelerator to deselect all items in a menu.
+.\"O Implemented by the Amiga, Gem, X11, GTK and tty ports.
+.\"O Default '-'.
+メニューの全ての項目を非選択にするキー。
+Amiga, Gem, X11, GTK, ttyで実装されている。(標準設定は `-')
+.lp menu_deselect_page
+.\"O Menu character accelerator to deselect all items on this page of a menu.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default '\e'.
+メニューのうち、現在表示されている全ての項目を非選択にするキー。
+Amiga, Gem, tty で実装されている。(標準設定は `\e')
+.lp menu_first_page
+.\"O Menu character accelerator to jump to the first page in a menu.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default '^'.
+メニューの最初のページへ移動するキー。
+Amiga, Gem, tty で実装されている。(標準設定は `^')
+.lp menu_headings
+.\"O Controls how the headings in a menu are highlighted.
+.\"O Values are 'bold', 'inverse', or 'underline'.
+.\"O Not all ports can actually display all three types.
+メニューのうち注目している部分をどのように表示するかを指定する。
+値は 'bold'(太字), 'inverse'(反転), 'underline'(下線)のいずれかである。.
+全てのポートで実際に三つ全てのタイプを表示できるわけではない。
+.lp menu_invert_all
+.\"O Menu character accelerator to invert all items in a menu.
+.\"O Implemented by the Amiga, Gem, X11, GTK and tty ports.
+.\"O Default '@'.
+メニューの全ての項目の選択状態を反転するキー。
+Amiga, Gem, X11, GTK, tty で実装されている。(標準設定は `@')
+.lp menu_invert_page
+.\"O Menu character accelerator to invert all items on this page of a menu.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default '~'.
+メニューの現在のページの全ての項目の選択状態を反転するキー。
+Amiga, Gem, tty で実装されている。(標準設定は `~')
+.lp menu_last_page
+.\"O Menu character accelerator to jump to the last page in a menu.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default '|'.
+メニューの最後のページへ移動するキー。
+Amiga, Gem, tty で実装されている。(標準設定は '|')
+.lp menu_next_page
+.\"O Menu character accelerator to goto the next menu page.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default '>'.
+メニューの次のページへ移動するキー。
+Amiga, Gem, tty で実装されている。(標準設定は `>')
+.lp menu_on_esc
+.\"O Make the ESC key a synonym for the `~' (main menu) command (default on).
+ESCキーに`~'コマンド(メインメニュー)と同等の機能を割り当てる。(標準設定はON)
+.lp menu_previous_page 
+.\"O Menu character accelerator to goto the previous menu page.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default '<'.
+メニューの前のページへ移動するキー。
+Amiga, Gem, tty で実装されている。(標準設定は `<')
+.lp menu_search
+.\"O Menu character accelerator to search for a menu item.
+.\"O Implemented by the Amiga, Gem and X11 ports.
+.\"O Default ':'.
+メニューで検索を行うキー。
+Amiga, Gem, X11 で実装されている。(標準設定は `:')
+.lp menu_select_all
+.\"O Menu character accelerator to select all items in a menu.
+.\"O Implemented by the Amiga, Gem, X11, GTK and tty ports.
+.\"O Default '.'.
+メニューの全ての項目を選択にするキー。
+Amiga, Gem, X11, GTK, tty で実装されている。(標準設定は `.')
+.lp menu_select_page
+.\"O Menu character accelerator to select all items on this page of a menu.
+.\"O Implemented by the Amiga, Gem and tty ports.
+.\"O Default ','.
+メニューのうち、現在表示されている全ての項目を選択にするキー。
+Amiga, Gem, tty で実装されている。(標準設定は `,')
+.lp monsters
+.\"O Set the characters used to display monster classes (default
+.\"O ``abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@\ \'&;:~]'').
+怪物の種類を表示するのに使用するキャラクタを指定する。
+(標準設定は
+``abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ@\ \'&;:~]'').
+.\"O This string is subjected to the same processing as the
+.\"O .op dungeon
+.\"O option.
+この文字列は
+.op dungeon
+オプションと同様に処理される。
+.\"O The order of the symbols is
+シンボルの順序は、
+ant or other insect(蟻あるいはその他の昆虫),
+blob(ブロッブ),
+cockatrice(コカトリス),
+dog or other canine(犬またはその他のイヌ科の動物),
+eye or sphere(目または球体),
+feline(猫),
+gremlin(グレムリン),
+humanoid(人間),
+imp or minor demon(インプまたは低級悪魔),
+jelly(ゼリー),
+kobold(コボルド),
+leprechaun(レプラコーン),
+mimic(ミミック),
+nymph(ニンフ),
+orc(オーク),
+piercer(突き刺すもの),
+quadruped(四つ足動物),
+rodent(鼠),
+arachnid or centipede(くもまたはムカデ),
+trapper or lurker above(トラッパーまたは天井に潜むもの),
+horse or unicorn(馬またはユニコーン),
+vortex(渦巻き),
+worm(ワーム),
+xan or other mythical/fantastic insect(ザンまたはその他の不思議な昆虫),
+light(ライト),
+Zouthern aminal(有袋類),
+angelic being(天使のような存在),
+bat or bird(コウモリまたは鳥),
+centaur(ケンタウルス),
+dragon(龍),
+elemental(エレメンタル),
+fungus or mold(カビやコケ),
+gnome(ノーム),
+giant humanoid(大型人類),
+invisible monster(見えない怪物),
+jabberwock(ジャバーウォック),
+Keystone Kop(キーストーンコップ),
+lich(リッチ),
+mummy(ミイラ),
+naga(ナーガ),
+ogre(オーガ),
+pudding or ooze(スライム),
+quantum mechanic(量子力学),
+rust monster(錆の怪物),
+snake(蛇),
+troll(トロール),
+umber hulk(アンバーハルク),
+vampire(バンパイア),
+wraith(レイス),
+xorn(ゾーン),
+apelike creature(猿のような生き物),
+zombie(ゾンビ),
+human(人間),
+ghost(幽霊),
+golem(ゴーレム),
+demon(悪魔),
+sea monster(海の怪物),
+lizard(トカゲ),
+long worm tail(ロングワームの尻尾),
+mimic(ミミック)
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp msghistory
+.\"O The number of top line messages to save (and recall with ^P) (default 20).
+後で ^P で呼び出すために保存しておく最上行のメッセージの数(標準設定は 20)。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp msg_window
+.\"O Allows you to change the way recalled messages are displayed.
+.\"O (It is currently implemented for tty only.)
+.\"O The possible values are:
+.\"O .sd
+.\"O .si
+.\"O s - single message (default, this was the behavior before 3.4.0).
+.\"O c - combination, two messages as `single', then as `full'.
+.\"O f - full window, oldest message first.
+.\"O r - full window, newest message first.
+.\"O .ei
+.\"O .ed
+.\"O For backward compatibility, no value needs to be specified (which
+.\"O defaults to `full'), or it can be negated (which defaults to `single').
+過去のメッセージの表示方法を変更する(現時点では tty にのみ実装されている)。
+指定できる値は以下のとおり。
+.sd
+.si
+s - `single': 1 メッセージだけ (標準設定。これは 3.4.0 以前での振る舞いである)
+c - `conbination': 最初の 2 メッセージは `single'、その後は `full'。
+f - `full': 全画面。古いメッセージが先。
+r - 全画面。新しいメッセージが先。
+.ei
+.ed
+過去との互換性のために、値なしにもできる(`full'とみなす)し、
+否定もできる(`single'とみなす)。
+.lp "name    "
+.\"O Set your character's name (defaults to your user name).  You can also
+.\"O set your character's role by appending a dash and one or more letters of
+.\"O the role (that is, by suffixing one of
+.\"O .op "-A -B -C -F -H -I -K -M -N -P -Ra -Ro -S -T -U -V -W -Y" ).
+あなたのキャラクタの名前を設定する(標準設定はあなたの ユーザー名)。
+-記号とキャラクタの職業の頭文字を付け加える(つまり
+.op "-A -B -C -F -H -I -K -M -N -P -Ra -Ro -S -T -U -V -W -Y"
+のどれかを後に付ける)ことによって職業を設定することもできる。
+.\"O If
+.\"O .op "-@"
+.\"O is used for the role, then a random one will be automatically chosen.
+職業として
+.op "-@"
+を使用すると、ランダムなひとつが自動的に選択される。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp "news    "
+.\"O Read the SLASH'EM news file, if present (default on).
+.\"O Since the news is shown at the beginning of the game, there's no point
+.\"O in setting this with the `O' command.
+SLASH'EM のニュースファイルがあればそれを読む(標準設定はオン)。
+ニュースはゲームの最初に表示されるので、
+`O' コマンドでこれを設定するのは無意味である。
+.lp "null    "
+.\"O Send padding nulls to the terminal (default off).
+端末にパディングのためのナルキャラクタを送る(標準設定はオフ)。
+.lp number_pad
+.\"O Use the number keys to move instead of [yuhjklbn] (default 0 or off).
+.\"O (number_pad:2 invokes the old DOS behavior where `5' means `g', meta-`5'
+.\"O means `G',  and meta-`0' means `I'.)
+移動のために[yuhjklbn]のかわりに数字キーを使用する(標準設定は 0 またはオフ)。
+(number_pad:2 は昔の DOS 版の振る舞いにする。
+`5'は`g'、meta-`5'は`G'、meta-`0'は`I'となる。)
+.lp objects
+.\"O Set the characters used to display object classes
+.\"O (default ``])[="(%!?+/$*`0_.'').
+物の種類を表示する時に使う文字を設定する
+(標準設定は ``])[="(%!?+/$*`0_.'')
+.\"O This string is subjected to the same processing as the
+.\"O .op dungeon
+.\"O option.
+この文字列は
+.op dungeon
+オプションと同様に処理される。
+.\"O The order of the symbols is
+.\"O illegal-object (should never be seen), weapon, armor, ring, amulet, tool,
+.\"O food, potion, scroll, spellbook, wand, gold, gem or rock, boulder or statue,
+.\"O iron ball, chain, and venom.
+シンボルの順番は
+（見たこともないような）おかしな物体、武器、防具、指輪、魔除け、工具、
+食料、水薬、巻物、魔法書、杖、金貨、宝石または石、巨石または彫像、
+鉄球、鎖、毒液。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp packorder
+.\"O Specify the order to list object types in (default ``")[%?+!=/(*`0_'')
+.\"O The value of this option should be a string containing the
+.\"O symbols for the various object types.  Any omitted types are filled in
+.\"O at the end from the previous order.
+物の種類を表示するときの順番を指定する(標準設定は
+``")[%?+!=/(*`0_'').
+このオプションにはいろいろな物の種類を表す文字の列を設定する。
+設定されなかった種類は以前の順序で最後に表示される。
+.lp perm_invent
+.\"O If true, always display your current inventory in a window.  This only
+.\"O makes sense for windowing system interfaces that implement this feature.
+もしオンならば、現在の持ち物一覧を常にウィンドウに表示しておく。
+この機能が実装されているウィンドウシステムでのみ有効。
+.lp pettype
+.\"O Specify the type of your initial pet, if you are playing a character class
+.\"O that uses multiple types of pets; or choose to have no initial pet at all.
+.\"O Possible values are ``cat'', ``dog'' and ``none''.
+プレイするキャラクタクラスが複数のタイプのペットを使用できる時に
+初期のペットを指定する、または初期のペットを全く指定しない。
+指定出来るのは``cat'', ``dog'', ``none'' である。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp pickup_burden
+.\"O When you pick up an item that would exceed this encumbrance
+.\"O level (Unburdened, Burdened, streSsed, straiNed, overTaxed,
+.\"O or overLoaded), you will be asked if you want to continue.
+.\"O (Default `S').
+物を拾った時にここで指定した荷物の重さレベル
+(Unburdened, Burdened, streSsed, straiNed, overTaxed, overLoaded)
+以上になると、続行するかどうかを確認する。
+(標準設定は `S').
+.lp pickup_thrown
+.\"O If this boolean option is true and
+.\"O .op autopickup
+.\"O is on, try to pick up things that you threw, even if they aren't in
+.\"O Default is on.
+.op autopickup
+オプションが設定されている時にこのオプションが設定されていると、
+.op pickup_types
+に設定されていないアイテムであっても
+自分が投げたアイテムを自動的に拾う。
+(標準設定はオン).
+.lp pickup_types
+.\"O Specify the object types to be picked up when
+.\"O .op autopickup
+.\"O is on.  Default is all types.  If your copy of the game has the experimental
+.\"O compile time option AUTOPICKUP_EXCEPTIONS included, you may be able to use 
+.\"O .op autopickup_exception
+.\"O configuration file lines to further refine
+.\"O .op autopickup
+.\"O behavior.
+.op autopickup
+オプションが設定されている時に拾う物の種類を指定する(標準設定は全ての種類)。
+実験的コンパイル時オプションである AUTOPICKUP_EXCEPTIONS が指定されていると、
+.op autopickup_exception
+行を使うことで
+.op autopickup
+の振る舞いをより細かく制御できる。
+.lp prayconfirm
+.\"O Prompt for confirmation before praying (default on).
+神に祈る前に確認する(標準設定はオン)。
+.lp preload_tiles
+.\"O For the protected mode MSDOS version, control whether tiles
+.\"O get pre-loaded into RAM at the start of the game.  Doing so
+.\"O enhances performance of the tile graphics, but uses more memory. (default on).
+MSDOSのプロテクトモードで、タイルをゲームの始めにあらかじめ RAM に
+読み込んでおくかどうかを制御する。
+オンにすると、タイルグラフィックのパフォーマンスが高まるが、
+より多くのメモリを使用する(標準設定はオン)。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp pushweapon
+.\"O Using the `w' (wield) command when already wielding
+.\"O something pushes the old item into your alternate weapon slot (default off).
+既に武器を持っている時に `w' (wield: 武器を持つ) コマンドを使ったとき、
+既に持っていた武器を予備の武器に設定する(標準設定はオフ)。
+.lp "race    "
+.\"O Selects your race (for example, ``race:human'').  Default is random.
+種族を選択する(例: ``race:human'')。標準設定はランダムである。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp rest_on_space
+.\"O Make the space bar a synonym for the `.' (rest) command (default off).
+スペースキーを `.'(rest: 休憩する) コマンドとして使用する
+(標準設定はオフ)。
+.lp "role    "
+.\"O Pick your type of character (ex. ``role:Samurai'');
+.\"O synonym for ``character''.  See ``name'' for an alternate method
+.\"O of specifying your role.  Normally only the first letter of the
+.\"O value is examined; `r' is an exception with ``Rogue'', ``Ranger'',
+.\"O and ``random'' values.
+キャラクターのタイプを設定する (例:``role:Samurai'')。
+``character''オプションと同じである。
+職業を設定するその他の方法については``name''オプションを参照のこと。
+普通は先頭の 1 文字だけで判別されるが、
+`r'は例外である。``Rogue''、``Ranger''、``random''があるからである。
+.lp runmode
+.\"O Controls the amount of screen updating for the map window when engaged
+.\"O in multi-turn movement (running via shift+direction or control+direction
+.\"O and so forth, or via the travel command or mouse click).
+「まとめて移動」する(shift+方向やcontrol+方向で移動するか、
+旅行コマンドやマウスのクリックを使った場合)
+ときにどれくらいの頻度で地図を更新するかを制御する。
+.\"O The possible values are:
+.\"O .sd
+.\"O .si
+.\"O teleport - update the map after movement has finished;
+.\"O run - update the map after every seven or so steps;
+.\"O walk - update the map after each step;
+.\"O crawl - like walk, but pause briefly after each step.
+.\"O .ei
+.\"O .ed
+設定可能な値は以下の通り。
+.sd
+.si
+teleport - 移動が完了してから地図を更新する。
+run - 7 歩ぐらい毎に地図を更新する。
+walk - 1 歩毎に地図を更新する。
+crawl - ``walk'' と同様だが、一歩毎にしばらく停止する。
+.ei
+.ed
+.\"O This option only affects the game's screen display, not the actual
+.\"O results of moving.  The default is `run'; versions prior to 3.4.1 
+.\"O used `teleport' only.  Whether or not the effect is noticeable will
+.\"O depend upon the window port used or on the type of terminal.
+このオプションは画面表示にのみ影響し、実際の移動結果には影響しない。
+標準設定は `run' である。バージョン 3.4.1 以前は `teleport' のみであった。
+効果が確認できるかどうかは使っている版や端末の種類に依存する。
+.lp safe_pet
+.\"O Prevent you from (knowingly) attacking your pets (default on).
+ペットを(ペットと知りつつ)攻撃してしまうのを防ぐ(標準設定はオン)。
+.lp scores
+.\"O Control what parts of the score list you are shown at the end (ex.
+.\"O ``scores:5 top scores/4 around my score/own scores'').  Only the first
+.\"O letter of each category (`t', `a', or `o') is necessary.
+最後にスコアリストのどの部分を見るかを制御する
+(例：``scores:5 top scores/4 around my score/own scores'')。
+それぞれの分野の最初の文字 (`t', `a', `o')のみが必要である。
+.lp showexp
+.\"O Show your accumulated experience points on bottom line (default off).
+最下行に現在の経験点を表示する(標準設定はオフ)。
+.lp showrace
+.\"O Display yourself as the glyph for your race, rather than the glyph
+.\"O for your role (default off).  Note that this setting affects only
+.\"O the appearance of the display, not the way the game treats you.
+あなたを表示するときに、職業に対応するマークではなく、
+種族に対応するマークで表示する(標準設定はオフ)。
+この設定は表示にだけ用いられ、ゲームとしては何も変わらないことに注意。
+.lp showscore
+.\"O Show your approximate accumulated score on bottom line (default off).
+最下行に現在のスコアを表示する(標準設定はオフ)。
+.lp showdmg
+.\"O Show damage inflicted/damage received (default off).
+ダメージを与えた/ダメージを受けたときに数値表示する(標準設定はオフ)。
+.lp showweight
+.\"O Show total weight in inventory on bottom line (default off).
+所持品の総重量を最下行に表示する(標準設定はオフ)。
+.lp "silent  "
+.\"O Suppress terminal beeps (default on).
+端末のビープ音を鳴らさない(標準設定はオン)。
+.lp sortpack
+.\"O Sort the pack contents by type when displaying inventory (default on).
+持物の目録を表示するとき種類毎に荷物の内容を並べ替える
+(標準設定はオン)。
+.lp sound
+.\"O Enable messages about what your character hears (default on).
+.\"O Note that this has nothing to do with your computer's audio capabilities.
+.\"O This option is only partly under player control.  The game toggles it
+.\"O off and on during and after sleep, for example.
+あなたのキャラクターが聞いたものに関するメッセージを表示する(標準設定はオン)。
+これはコンピューターの音声出力機能とは何の関係もないことに注意すること。
+このオプションは部分的にだけプレイヤーの制御下にある。
+例えば、眠っている間はこのオプションは自動的にオフにされ、
+目覚めるとオンになる。
+.lp sparkle
+.\"O Display a sparkly effect when a monster (including yourself) is hit by an
+.\"O attack to which it is resistant (default on).
+怪物(やあなた)が攻撃を受け、それに抵抗した場合に画面効果を表示する
+(標準設定はオン)。
+.lp standout
+.\"O Boldface monsters and ``\fB--More--\fP'' (default off).
+怪物と``\fB--More--\fP''を太字で表示する(標準設定はオフ)。
+.lp suppress_alert
+.\"O This option may be set to a SLASH'EM version level to suppress
+.\"O alert notification messages about feature changes for that 
+.\"O and prior versions (ex. ``suppress_alert:0.0.6'').
+前のバージョンから変更された機能に対して注意を促すメッセージを
+表示しないようにする SLASH'EM のバージョンを設定する。
+(例: ``suppress_alert:0.0.6'')
+例のように指定すると 0.0.6 以前に変更された機能に対する注意メッセージは表示されない。
+.lp tiles
+This option may be set to the name of a tile set to use, or specified
+as ``notiles'' to disable the use of tiles. Not all windowing interfaces
+support this option. The tile set named must also be defined. See the
+section on tile sets for more information on that.
+.lp "time    "
+.\"O Show the elapsed game time in turns on bottom line (default off).
+最下行にゲームで経過した時間をターン数で表示する(標準設定はオフ)。
+.lp timed_delay
+.\"O When pausing momentarily for display effect, such as with explosions and
+.\"O moving objects, use a timer rather than sending extra characters to the
+.\"O screen.  (Applies to ``tty'' interface only; ``X11'' and ``GTK'' interface always
+.\"O uses a timer based delay.  The default is on if configured into the
+.\"O program.)
+爆発や物体の移動など、効果を表示するためにちょっと時間待ちするとき、
+特殊なキャラクタを画面に送るかわりにタイマーを使用する。
+(tty インタフェースにのみ適用される。
+X11とGTK インタフェースは常にタイマーを使用する。
+標準設定はタイマーによる時間待ちが組み込まれているならばオン)
+.lp tombstone
+.\"O Draw a tombstone graphic upon your death (default on).
+死んだとき墓石を表示する(標準設定はオン)。
+.lp toptenwin
+.\"O Put the ending display in a SLASH'EM window instead of on stdout (default off).
+.\"O Setting this option makes the score list visible when a windowing version
+.\"O of SLASH'EM is started without a parent window, but it no longer leaves
+.\"O the score list around after game end on a terminal or emulating window.
+ゲーム終了時の表示を標準出力のかわりにSLASH'EMのウィンドウに表示する
+(標準設定はオフ)。
+このオプションを設定すると
+ウィンドウを使うバージョンの SLASH'EM では
+起動した親ウィンドウとは別のウィンドウにスコアリストが表示される。
+しかし、スコアリストはゲームが終了したあとターミナルやウィンドウには残らない。
+.lp traps
+.\"O Set the graphics symbols for displaying traps
+.\"O (default \&``^^^^^^^^^^^^^^^^^"^^^^'').
+罠の種類を表示するのに使用するキャラクタを指定する。(標準設定は
+\&``^^^^^^^^^^^^^^^^^"^^^^'').
+.\"O The
+.\"O .op traps
+.\"O option should be followed by a string of 1-22
+.\"O characters to be used instead of the default traps characters.
+.op traps
+オプションは標準設定の文字の代わりに罠を描くのに使用する 
+1 から 22 文字の文字列を書く。
+この文字列は dungeon
+オプションと同じ処理をする。
+.\"O This string is subjected to the same processing as the
+.\"O .op dungeon
+.\"O option.
+この文字列は
+.op dungeon
+オプションと同様に処理される。
+
+.\"O The order of the symbols is: 
+シンボルの順序は、
+arrow trap(矢の罠),
+dart trap(投げ矢の罠),
+falling rock trap(岩落しの罠),
+squeaky board(きしむ板),
+bear trap(熊の罠),
+land mine(地雷),
+rolling boulder trap(落岩の罠),
+sleeping gas trap(睡眠ガスの罠),
+rust trap(腐食の罠),
+fire trap(火の罠),
+pit(落し穴),
+spiked pit(トゲだらけの落し穴),
+hole(穴),
+trap door(落し扉),
+teleportation trap(瞬間移動の罠),
+level teleporter(別の階への瞬間移動の罠),
+magic portal(魔法の入口),
+web(くもの巣),
+statue trap(彫像の罠),
+magic trap(魔法の罠),
+anti-magic field(反魔法空間の罠),
+polymorph trap(変化の罠)。
+
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp travel
+.\"O Allow the travel command (default on).  Turning this option off will
+.\"O prevent the game from attempting unintended moves if you make inadvertent
+.\"O mouse clicks on the map window.
+トラベルコマンドを有効にする(標準設定はオン)。
+このオプションをオフにすることによって、うっかり地図ウィンドウを
+クリックすることによって、望まない移動をしようとすることを防ぐことができる。
+.lp verbose
+.\"O Provide more commentary during the game (default on).
+ゲーム中のコメントを詳細に表示する(標準設定はオン)。
+.lp windowtype
+.\"O Select which windowing system to use, such as ``tty'' or ``X11''
+.\"O (default depends on version).
+ウインドウシステムを使用するかどうかを「tty」または「X11」で選択する
+（標準設定はバージョンによる）。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp wolfname
+.\"O Name your starting wolf (ex. ``wolfname:Beast'').
+.\"O Cannot be set with the `O' command.
+スタート時の狼の名前(例: catname:Morris)。
+`O' コマンドで設定することはできない。
+.hn 2
+Tile sets
+.pg
+For those windowing ports which support tiles (multicolored pictures
+instead of the traditional characters), tile sets can be defined using
+a line in the configuration file that begins ``TILESET=''. There should
+be one tile set definition line for each available tile set. Once defined,
+tile sets can be selected for initial display (using the tiles option) or
+dynamically selected during the game (for those windowing ports that
+support this).
+.pg
+A ``TILESET'' line has the same syntax as an ``OPTION'' line but with
+the following options available:
+.lp name
+The name of the tile set (for selection). This can be any string of characters
+excluding the comma. It must be specified.
+.lp file
+The name of the file which contains the tile set. This must be specified.
+.lp transparent
+Marks a tile set as being transparent (as opposed to opaque). Transparent
+tile sets allow eg., monsters to be displayed on top of the background.
+Tile sets must be designed to be used in this way in order to achieve
+meaningful results. This option is ignored by windowing ports which do
+not support transparency.
+.lp pseudo3D
+Marks a tile set as being designed for use with Mitsuhiro Itakura's
+pseudo-3D display algorithm. They are assumed to have an offset-X value
+equal to one third of the total tile width and an offset-Y value equal
+to one half of the total tile height. Such tile sets are not compatible
+with standard tile sets and while amusing effects can be created by
+setting this option incorrectly, nothing useful can be achieved. Windowing
+ports that do not support pseudo-3D display will ignore tile sets with
+this option set.
+.hn 2
+.\"O Window Port Customization options
+ウインドウシステム版専用カスタマイズオプション
+.pg
+.\"O Here are explanations of the various options that are
+.\"O used to customize and change the characteristics of the
+.\"O windowtype that you have chosen.
+以下はあなたが選択したウィンドゥタイプの特性をカスタマイズして
+変更するために用いる様々なオプションの説明である。
+.\"O Character strings that are too long may be truncated.
+.\"O Not all window ports will adjust for all settings listed
+.\"O here.  You can safely add any of these options to your config
+.\"O file, and if the window port is capable of adjusting to
+.\"O suit your preferences, it will attempt to do so. If it
+.\"O can't it will silently ignore it.  You can find out if an
+.\"O option is supported by the window port that you are currently
+.\"O using by checking to see if it shows up in the Options list.
+.\"O Some options are dynamic and can be specified during the game
+.\"O with the `O' command.
+長すぎる文字列は適当に切り詰められる。
+全てのウィンドゥタイプに対してこれら全てのオプションが有効というわけではない。
+これらのオプションが設定されたとき、もしウィンドゥタイプがその設定を
+受け付けるなら、そうされる。もし受け付けられないなら、単に無視される。
+現在のウィンドゥタイプで対応しているオプションは、オプション一覧表示
+(`O')で表示される。
+一部のオプションは`O'コマンドで動的に変更できる。
+.lp align_message
+.\"O Where to align or place the message window (top, bottom, left, or right)
+メッセージウィンドウをどこに置くか(top, bottom, left, right)
+.lp align_status
+.\"O Where to align or place the status window (top, bottom, left, or right).
+ステータスウィンドウをどこに置くか(top, bottom, left, right)
+.lp ascii_map
+.\"O SLASH'EM should display an ascii character map if it can.
+可能ならASCIIキャラクタマップを表示する
+.lp color		
+.\"O SLASH'EM should display color if it can for different monsters, 
+.\"O objects, and dungeon features
+怪物、物体、洞窟の構成要素をカラーで表示する
+.lp eight_bit_tty	
+.\"O SLASH'EM should pass eight-bit character values (for example, specified with the
+.\"O .op traps
+.\"O option) straight through to your terminal (default off).
+8ビットキャラクタ(例えば
+.op traps
+オプションで指定したもの)をそのままターミナルに表示する(標準設定はオフ)。
+.lp font_map	
+.\"O SLASH'EM should use a font by the chosen name for the map window.
+マップウィンドウを表示するフォント名
+.lp font_menu	
+.\"O SLASH'EM should use a font by the chosen name for menu windows.
+メニューを表示するフォント名
+.lp font_message	
+.\"O SLASH'EM should use a font by the chosen name for the message window.
+メッセージを表示するフォント名
+.lp font_status	
+.\"O SLASH'EM should use a font by the chosen name for the status window.
+ステータスを表示するフォント名
+.lp font_text	
+.\"O SLASH'EM should use a font by the chosen name for text windows.
+テキストを表示するフォント名
+.lp font_size_map	
+.\"O SLASH'EM should use this size font for the map window.
+マップウィンドウを表示するフォントサイズ
+.lp font_size_menu	
+.\"O SLASH'EM should use this size font for menu windows.
+メニューウィンドウを表示するフォントサイズ
+.lp font_size_message 
+.\"O SLASH'EM should use this size font for the message window.
+メッセージウィンドウを表示するフォントサイズ
+.lp font_size_status
+.\"O SLASH'EM should use this size font for the status window.
+ステータスウィンドウを表示するフォントサイズ
+.lp font_size_text	
+.\"O SLASH'EM should use this size font for text windows.
+テキストウィンドウを表示するフォントサイズ
+.lp fullscreen
+.\"O SLASH'EM should try and display on the entire screen rather than in a window.
+ウィンドウでなく画面全体で表示しようと試みる
+.lp hilite_pet
+.\"O Visually distinguish pets from similar animals (default off).
+.\"O The behavior of this option depends on the type of windowing you use.
+.\"O In text windowing, text highlighting or inverse video is often used;
+.\"O with tiles, generally displays a heart symbol near pets or a red box
+.\"O around the pet.
+ペットを目立つように表示する(標準設定はオフ)。
+このオプションの振る舞いは使っているウィンドウシステムに依存する。
+テキストウィンドウの場合、高輝度か反転が主に用いられる。
+タイルの場合、一般的にはペットの近くにハートマークが表示されるか、
+赤い枠でペットが囲まれる。
+.lp large_font	
+.\"O SLASH'EM should use a large font.
+大きいフォントを使う。
+.lp map_mode	
+.\"O SLASH'EM should display the map in the manner specified.
+指定された方法でマップを表示する。
+.lp mouse_support
+.\"O Allow use of the mouse for input and travel.
+入力と移動にマウスを使えるようにする。
+.lp player_selection
+.\"O SLASH'EM should pop up dialog boxes, or use prompts for character selection.
+キャラクター選択時にダイアログボックスや確認画面を用いる
+.lp popup_dialog	
+.\"O SLASH'EM should pop up dialog boxes for input.
+入力時にポップアップダイアログボックスを用いる
+.lp preload_tiles
+.\"O SLASH'EM should preload tiles into memory.
+.\"O For example, in the protected mode MSDOS version, control whether tiles
+.\"O get pre-loaded into RAM at the start of the game.  Doing so
+.\"O enhances performance of the tile graphics, but uses more memory. (default on).
+.\"O Cannot be set with the `O' command.
+タイルをメモリに予め読み込んでおく。
+例えば、プロテクトモードMSDOS版の場合、ゲーム開始時にタイルを
+RAM に予め読み込むかどうかを制御する。
+予め読み込むとタイルグラフィックの性能は向上するが、より多くのメモリを消費する
+(標準設定はオン)。
+`O' コマンドで設定することはできない。
+.lp scroll_amount
+.\"O SLASH'EM should scroll the display by this number of cells
+.\"O when the hero reaches the scroll_margin.
+scroll_margin オプションで指定された位置に来たときに、
+どれだけの数スクロールさせるかを指定する。
+.lp scroll_margin
+.\"O SLASH'EM should scroll the display when the hero or cursor
+.\"O is this number of cells away from the edge of the window.
+ウィンドウの端からここで指定されたマス数にあなたまたはカーソルが
+移動したときに、画面をスクロールさせる。
+.lp softkeyboard
+.\"O Display an onscreen keyboard.  Handhelds are most likely to support this option.
+.lp splash_screen
+.\"O SLASH'EM should display an opening splash screen when it starts up (default yes).
+起動時にスプラッシュスクリーンを表示する(標準設定はオン)
+.lp tiled_map	
+.\"O SLASH'EM should display a tiled map if it can.
+可能ならタイルマップを表示する
+.lp tile_file
+.\"O Specify the name of an alternative tile file to override the default.
+標準設定を上書きする別のタイルファイルの名前
+.lp tile_height
+.\"O Specify the preferred height of each tile in a tile capable port.
+タイルが表示できる環境でのタイルの高さ
+.lp tile_width
+.\"O Specify the preferred width of each tile in a tile capable port
+タイルが表示できる環境でのタイルの幅
+.lp use_inverse
+.\"O SLASH'EM should display inverse when the game specifies it.
+ゲームが指定したときに画面を反転する
+.lp vary_msgcount
+.\"O SLASH'EM should display this number of messages at a time in
+.\"O the message window.
+メッセージウィンドウに一度に表示するメッセージの数
+.lp windowcolors
+.\"O SLASH'EM should display windows with the specified foreground/background
+.\"O colors if it can.
+可能ならウィンドウを指定した前景色/背景色で表示する
+.lp wraptext
+.\"O SLASH'EM port should wrap long lines of text if they don't fit in 
+.\"O the visible area of the window.
+.hn 2
+.\"O Platform-specific Customization options
+プラットフォーム固有の設定オプション
+.pg
+.\"O Here are explanations of options that are used by specific platforms or ports 
+.\"O to customize and change the port behavior.
+以下は特定のプラットフォームでカスタマイズや振る舞いの変更をするために
+用いられるオプションの説明である。
+.lp altkeyhandler
+.\"O Select an alternate keystroke handler dll to load (Win32 tty SLASH'EM only).
+.\"O The name of the handler is specified without the .dll extension and without any
+.\"O path information.
+.\"O Cannot be set with the `O' command.
+キー入力を扱う DLL を選択する(Win32 tty SLASH'EM のみ)。
+DLL の名前は、.dll の拡張子やパス抜きで指定する。
+`O' コマンドで設定することはできない。
+.lp altmeta
+.\"O (default on, AMIGA NetHack only).
+(標準設定はオン。 AMIGA NetHack のみ)。
+.lp "BIOS    "
+.\"O Use BIOS calls to update the screen
+.\"O display quickly and to read the keyboard (allowing the use of arrow
+.\"O keys to move) on machines with an IBM PC compatible BIOS ROM (default off,
+.\"O OS/2, PC, and ST NetHack only).
+高速に画面を書き換え、移動にカーソルキーを使えるようにキーボードを読むために、
+IBM-PC 互換の BIOS ROM を使用しているマシンで BIOS コールを使用する。
+(標準設定はオフ。OS/2 , PC, および ST NetHack のみ)
+.lp flush
+.\"O (default off, AMIGA SLASH'EM only).
+(標準設定はオフ。 AMIGA SLASH'EM のみ)。
+.lp "MACgraphics"
+.\"O (default on, Mac SLASH'EM only).
+(標準設定はオン。 Mac SLASH'EM のみ)。
+.lp page_wait
+.\"O (default on, Mac SLASH'EM only).
+(標準設定はオン。 Mac SLASH'EM のみ)。
+.lp "rawio   "
+.\"O Force raw (non-cbreak) mode for faster output and more
+.\"O bulletproof input (MS-DOS sometimes treats `^P' as a printer toggle
+.\"O without it) (default off, OS/2, PC, and ST SLASH'EM only).
+.\"O Note:  DEC Rainbows hang if this is turned on.
+.\"O Cannot be set with the `O' command.
+raw(cbreak でない) モードを使用して、
+より高速な出力と問題の起こらない入力を実現する
+(MS-DOS ではプリンタがないにも関わらず `^P' をプリンタ出力の
+トグルとみなしてしまうことがある)
+(標準設定はオフ)。
+注意: DEC Rainbow ではこれがオンのときはハングアップしてしまう。
+`O' コマンドで設定することはできない。
+.lp soundcard
+.\"O (default on, PC SLASH'EM only).
+.\"O Cannot be set with the `O' command.
+(標準設定はオン。 PC SLASH'EM のみ)。
+`O' コマンドで設定することはできない。
+.lp subkeyvalue
+.\"O (Win32 tty SLASH'EM only).
+.\"O May be used to alter the value of keystrokes that the operating system
+.\"O returns to SLASH'EM to help compensate for international keyboard issues.
+.\"O OPTIONS=subkeyvalue:171/92
+.\"O will return 92 to SLASH'EM, if 171 was originally going to be returned.
+.\"O You can use multiple subkeyvalue statements in the config file if needed.
+.\"O Cannot be set with the `O' command.
+(Win32 tty SLASH'EM のみ)。
+国際キーボードの問題を補正するのを助けるために、
+OS が SLASH'EM に返すキー入力の値を変更するために使用する。
+OPTIONS=subkeyvalue:171/92
+とすると、もともと 171 が返されようとしていた場合、
+SLASH'EM に 92 を返す。
+必要なら、複数の subkeyvalue 行を設定ファイルに書いてもよい。
+`O' コマンドで設定することはできない。
+.lp video
+.\"O Set the video mode used (PC SLASH'EM only).
+.\"O Values are `autodetect', `default', or `vga'.
+.\"O Setting `vga' (or `autodetect' with vga hardware present) will cause
+.\"O the game to display tiles. 
+.\"O Cannot be set with the `O' command.
+使用するビデオモードを設定する(PC SLASH'EM のみ)。
+値は `autodetect', `default', `vga' のいずれかである。
+`vga' (または VGA ハードウェアがあるときに`autodetect')に設定すると、
+表示にタイルを用いる。
+`O' コマンドで設定することはできない。
+.lp videocolors
+.\"O Set the color palette for PC systems using NO_TERMS
+.\"O (default 4-2-6-1-5-3-15-12-10-14-9-13-11, (PC SLASH'EM only).
+NO_TERMを使用しているPCシステムのカラーパレットをセットする
+(標準設定は「4-2-6-1-5-3-15-12-10-14-9-13-11」)(PC SLASH'EM のみ)。
+.\"O The order of colors is red, green, brown, blue, magenta, cyan,
+.\"O bright.white, bright.red, bright.green, yellow, bright.blue,
+.\"O bright.magenta, and bright.cyan.
+シンボルの順番は、赤・緑・茶色・青・マゼンタ・シアン・輝く白・
+輝く赤・輝く緑・黄色・輝く青・輝くマゼンタ・輝くシアン。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.lp videoshades
+.\"O Set the intensity level of the three gray scales available
+.\"O (default dark normal light, PC SLASH'EM only).
+.\"O If the game display is difficult to read, try adjusting these scales;
+.\"O if this does not correct the problem, try !color.
+3 段階の利用可能なグレイスケールを設定する
+(標準設定は ``dark normal light'' PC Nethackのみ)。
+もしゲーム画面が見にくい場合は、
+３つのスケールを調整してみること。
+もしこれでうまくいかなかったら、!colorを試してみること。
+.\"O Cannot be set with the `O' command.
+`O' コマンドで設定することはできない。
+.hn 2
+.\"O Configuring autopickup exceptions
+自動拾い例外の設定
+.pg
+.\"O There is an experimental compile time option called AUTOPICKUP_EXCEPTIONS.  
+.\"O If your copy of the game was built with that option defined, you can 
+.\"O further refine the behavior of the
+.\"O .op autopickup
+.\"O option beyond what is available through the 
+.\"O .op pickup_types
+.\"O option. 
+実験的コンパイル時オプションとして AUTOPICKUP_EXCEPTIONS がある。
+このオプションを定義してコンパイルされたバイナリの場合、
+.op autopickup
+オプションの振る舞いを
+.op pickup_types
+オプションを使ってより洗練させることができる。
+.pg
+.\"O By placing 
+.\"O .op autopickup_exception
+.\"O lines in your configuration
+.\"O file, you can define patterns to be checked when the game is about to
+.\"O autopickup something.
+.op autopickup_exception
+行を設定ファイルに書くことで、
+何かを拾おうとするときにチェックするべきパターンを定義できる。
+.lp autopickup_exception
+.\"O Sets an exception to the 
+.\"O .op pickup_types
+.\"O option.
+.op pickup_types
+オプションの例外を設定する。
+.\"O The
+.\"O .op autopickup_exception
+.\"O option should be followed by a string of 1-80 characters to be used as a 
+.\"O pattern to match against the singular form of the description of an 
+.\"O object at your location.
+.op autopickup_exception
+オプションはあなたの位置にある物体の説明の単数形に一致するパターンを
+指定する。これは 1-80 文字の文字列であるべきである。
+.pg
+.\"O You may use the following special characters in a pattern:
+パターンでは以下の特殊文字が使える。
+.sd
+.si
+.\"O   *--- matches 0 or more characters.
+.\"O   ?--- matches any single character.
+  *--- 0 以上の文字にマッチする。
+  ?--- 任意の 1 文字にマッチする。
+.ei
+.ed
+.pg
+.\"O In addition, some characters are treated specially if they occur as the first 
+.\"O character in the string pattern, specifically:
+さらに、文字列パターンの先頭に置いた場合に特別扱いされる文字もある。
+.sd
+.si
+.\"O < - always pickup an object that matches the pattern that follows.
+.\"O > - never pickup an object that matches the pattern that follows.
+< - 以下のパターンに一致する物体は常に拾う。
+> - 以下のパターンに一致する物体は決して拾わない。
+.ei
+.ed
+.pg
+.\"O Can be set with the `O' command, but the setting is not preserved
+.\"O across saves and restores.
+`O' オプションで設定することもできるが、設定はセーブ・ロードしたときには
+保存されない。
+.pg
+.\"O Here's a couple of examples of autopickup_exceptions:
+以下は autopickup_exceptions の例である。
+.sd
+.si
+.\"O autopickup_exception="<*arrow"
+.\"O autopickup_exception=">*corpse"
+.\"O autopickup_exception=">* cursed*"
+.ei
+.ed
+.\"O The first example above will result in autopickup of any type of arrow.
+.\"O The second example results in the exclusion of any corpse from autopickup.
+.\"O The last example results in the exclusion of items known to be cursed from autopickup.
+.\"O A `never pickup' rule takes precedence over an `always pickup' rule if both match.
+上記の例の最初のものは、全ての矢を自動的に拾う。
+二番目の例は、死体は自動拾いの例外とする。
+最後の例は、呪われているとわかっているものは自動拾いの例外とする。
+`決して拾わない'ルールは`常に拾う'ルールに優先する。
+.hn 2
+.\"O Configuring User Sounds
+音声の設定
+.pg
+.\"O Some platforms allow you to define sound files to be played when a message 
+.\"O that matches a user-defined pattern is delivered to the message window.
+.\"O At this time the Qt port and the win32tty and win32gui ports support the
+.\"O use of user sounds.
+メッセージウィンドウに表示されたメッセージが
+ユーザー定義のパターンと一致したときに
+特定の音声ファイルを鳴らすことができるプラットフォームもある。
+現在のところ、Qt, win32tty, win32gui がユーザー音声に対応している。
+.pg
+.\"O The following config file entries are relevant to mapping user sounds
+.\"O to messages:
+ユーザー音声とメッセージの関連付けに関する設定ファイル項目は
+以下のとおりである。
+.lp SOUNDDIR
+.\"O The directory that houses the sound files to be played.
+音声ファイルのあるディレクトリ
+.lp SOUND
+.\"O An entry that maps a sound file to a user-specified message pattern.
+.\"O Each SOUND entry is broken down into the following parts:
+.\"O .sd
+.\"O .si
+.\"O MESG       - message window mapping (the only one supported in 3.4).
+.\"O pattern    - the pattern to match.
+.\"O sound file - the sound file to play.
+.\"O volume     - the volume to be set while playing the sound file.
+.\"O .ei
+.\"O .ed
+音声ファイルとユーザーが指定するメッセージパターンを関連付ける項目。
+各 SOUND 項目は以下の項目に分解される。
+.sd
+.si
+MESG       - メッセージウィンドウ指定 (3.4 ではただ一つだけに対応している)
+pattern    - マッチするパターン
+sound file - 鳴らす音声ファイル
+volume     - 音声ファイルを鳴らすときの音量
+.ei
+.ed
+.pg
+.\"O The exact format for the pattern depends on whether the platform is
+.\"O built to use ``regular expressions'' or SLASH'EM's own internal pattern 
+.\"O matching facility. The ``regular expressions'' matching can be much more 
+.\"O sophisticated than the internal SLASH'EM pattern matching, but requires 
+.\"O 3rd party libraries on some platforms.  There are plenty of references 
+.\"O available elsewhere for explaining ``regular expressions''. You can verify 
+.\"O which pattern matching is used by your port with the #version command.  
+パターンの正確な書式はプラットフォームが ``正規表現'' を用いるか
+SLASH'EM の内蔵パターンマッチング機能を用いるかによって変わる。
+``正規表現'' マッチングは SLASH'EM 内蔵パターンマッチングより洗練されているが、
+サードパーティライブラリが必要なプラットフォームもある。
+``正規表現'' に関する説明はどこか他のところを参照のこと。
+どちらのパターンマッチングが用いられているかは #version コマンドで確認できる。
+.pg
+.\"O SLASH'EM's internal pattern matching routine uses the following
+.\"O special characters in its pattern matching:
+.\"O .sd
+.\"O .si
+.\"O   *--- matches 0 or more characters.
+.\"O   ?--- matches any single character.
+.\"O .ei
+.\"O .ed
+SLASH'EM の内蔵パターンマッチングルーチンは以下の特殊文字を用いる。
+.sd
+.si
+  *--- 0 個以上の文字にマッチする。
+  ?--- 任意の 1 文字にマッチする。
+.ei
+.ed
+.pg
+.\"O Here's an example of a sound mapping using SLASH'EM's internal
+.\"O pattern matching facility:
+.\"O .sd
+.\"O     SOUND=MESG "*chime of a cash register*" "gong.wav" 50
+.\"O .ed
+.\"O specifies that any message with "chime of a cash register" contained
+.\"O in it will trigger the playing of "gong.wav".  You can have multiple
+.\"O SOUND entries in your config file.
+.\"O .sd
+.\"O     SOUND=MESG "*chime of a cash register*" "gong.wav" 50
+.\"O .ed
+以下は SLASH'EM 内蔵パターンマッチング機能を用いた例である。
+.sd
+    SOUND=MESG "*chime of a cash register*" "gong.wav" 50
+.ed
+ここでは "chime of a cash register" を含むメッセージに反応して
+"gong.wav" を鳴らす。
+設定ファイルには複数の SOUND 設定を書くことができる。
+.pg
+.hn 2
+.\"O Configuring SLASH'EM for Play by the Blind
+視覚障害者がSLASH'EMをプレイするための設定
+.pg
+.\"O SLASH'EM can be set up to use only standard ASCII characters for making
+.\"O maps of the dungeons. This makes the MS-DOS versions of SLASH'EM completely
+.\"O accessible to the blind who use speech and/or Braille access technologies.
+SLASH'EM は洞窟の地図を作るのに標準の ASCII キャラクターだけを使うように
+設定することもできる。これにより、 MS-DOS 版の SLASH'EM は
+音声合成または点字技術を用いれば目の不自由な人でも完全にプレイ可能である。
+.\"O Players will require a good working knowledge of their screen-reader's
+.\"O review features, and will have to know how to navigate horizontally and
+.\"O vertically character by character. They will also find the search
+.\"O capabilities of their screen-readers to be quite valuable. Be certain to
+.\"O examine this Guidebook before playing so you have an idea what the screen
+.\"O layout is like. You'll also need to be able to locate the PC cursor. It is
+.\"O always where your character is located. Merely searching for an @-sign will
+.\"O not always find your character since there are other humanoids represented
+.\"O by the same sign. Your screen-reader should also have a function which
+.\"O gives you the row and column of your review cursor and the PC cursor.
+.\"O These co-ordinates are often useful in giving players a better sense of the
+.\"O overall location of items on the screen.
+プレイヤーはこれらの画面読み取りシステムに関する十分な知識が必要で、
+上下左右に一文字ずつ移動する方法を知らなければならないだろう。
+画面読み取りシステムの検索能力を知ることもかなり価値がある。
+プレイする前にこのガイドブックを十分に読めば、
+画面のレイアウトがどんな感じかがわかるだろう。
+また、 PC カーソルの位置を突き止めることができる必要がある。
+これは自分のキャラクターの位置を示している。
+`@'は他のヒューマノイドを表わすのにも用いられるので、
+自分の位置を探すのに`@'を検索するだけでは不十分である。
+さらに、あなたが見ている位置と PC カーソルの位置の物理的な行と桁を知らせる機能が
+必要だろう。この機能はスクリーン全体にどのようなアイテムがあるかを判別するのに
+便利である。
+.pg
+.\"O While it is not difficult for experienced users to edit the \fBdefaults.nh\fP
+.\"O file to accomplish this, novices may find this task somewhat daunting.
+慣れたユーザーなら \fBdefaults.nh\fPを修正することは難しくないだろうが、
+初心者は少しひるんでしまう仕事かもしれない。
+.\"O Included in all official distributions of SLASH'EM is a file called
+.\"O \fBNHAccess.nh\fP.  Replacing \fBdefaults.nh\fP with this file will cause
+.\"O the game to run in a manner accessible to the blind. After you have gained
+.\"O some experience with the game and with editing files, you may want to alter
+.\"O settings to better suit your preferences. Instructions on how to do this
+.\"O are included in the \fBNHAccess.nh\fP file itself. The most crucial settings to
+.\"O make the game accessible are:
+SLASH'EM の全ての公式配布には \fBNHAccess.nh\fPというファイルが含まれている。
+\fBdefault.nh\fPファイルをこのファイルと入れ替えることにより、
+目の不自由な人がプレイできるような設定になる。
+ファイルを修正することやゲームそのものに慣れたなら、
+より好みに合うように設定を変更したいと思うことだろう。
+そのための説明は \fBNHAccess.nh\fP そのものに含まれている。
+ゲームのアクセシビリティに最も影響を与える設定は以下のものである:
+.pg
+.lp IBMgraphics
+.\"O Disable IBMgraphics by commenting out this option.
+このオプションをコメントアウトすることによって IBM グラフィックを無効にする。
+.lp menustyle:traditional
+.\"O This will assist in the interface to speech synthesizers.
+これは音声合成システムを利用する助けになる。
+.lp number_pad
+.\"O A lot of speech access programs use the number-pad to review the screen.
+.\"O If this is the case, disable the number_pad option and use the traditional
+.\"O Rogue-like commands.
+多くの発声プログラムは number-pad を画面の確認に用いる。
+この場合、 number_pad オプションをオフにして、伝統的な Rogue 風コマンドを使うこと。
+.lp "Character graphics"
+.\"O Comment out all character graphics sets found near the bottom of the
+.\"O \fBdefaults.nh\fP file.  Most of these replace \fBSLASH'EM\fP's
+.\"O default representation of the dungeon using standard ASCII characters
+.\"O with fancier characters from extended character sets, and these fancier
+.\"O characters can annoy screen-readers.
+\fBdefaults.nh\fP ファイルの下の方にある全てのキャラクターグラフィック設定を
+コメントアウトする。これらのほとんどは \fBSLASH'EM\fP の
+標準である、標準 ASCII キャラクターを用いた洞窟の表現を
+拡張キャラクターセットのより凝ったキャラクターで置き換える。
+これらのキャラクターは画面読み取りシステムを煩わせるだろう。
+.hn 1
+.\"O Scoring
+得点
+.pg
+.\"O SLASH'EM maintains a list of the top scores or scorers on your machine,
+.\"O depending on how it is set up.  In the latter case, each account on
+.\"O the machine can post only one non-winning score on this list.  If
+.\"O you score higher than someone else on this list, or better your
+.\"O previous score, you will be inserted in the proper place under your
+.\"O current name.  How many scores are kept can also be set up when
+.\"O SLASH'EM is compiled.
+SLASH'EM は設定によって、あなたの機械における高得点の一覧または高得点
+者の一覧を作成する。後者の設定になっている場合、ゲームを最後まで終えた
+場合を除きそのマシンの 1 つのアカウントにつき 1 つだけしかこの一覧には
+載らない。あなたがこの一覧に載っている他の誰かより高い得点を取ったとき、
+もしくはあなたの前の得点より高い得点を取ったときにのみ、その一覧のしか
+るべき位置にあなたの名前が載る。得点が何個まで載るかもコンパイル時に設
+定できる。
+.pg
+.\"O Your score is chiefly based upon how much experience you gained, how
+.\"O much loot you accumulated, how deep you explored, and how the game
+.\"O ended.  If you quit the game, you escape with all of your gold intact.
+.\"O If, however, you get killed in the Mazes of Menace, the guild will
+.\"O only hear about 90% of your gold when your corpse is discovered
+.\"O (adventurers have been known to collect finder's fees).  So, consider
+.\"O whether you want to take one last hit at that monster and possibly
+.\"O live, or quit and stop with whatever you have.  If you quit, you keep
+.\"O all your gold, but if you swing and live, you might find more.
+得点は主に経験値、戦利品、到達した階とゲームの終わり方に基づいている。
+ゲームを放棄した場合には持っている金を全額手にして脱出できる。
+しかし恐怖の迷宮の中で殺された場合には、亡骸が発見されると持っている金の 90% 
+だけがギルドに伝えられる(冒険者は亡骸を発見した場合には手数料を取るこ
+とが知られている)。従って怪物にさらに一撃を加えて運あらば生き残らんと
+するか、放棄してその時点で持っている物で終了するかはあなたが決めること
+である。放棄した場合はすべての金を手にすることができる。しかし戦って生
+き残ればさらに多くを得ることができるかも知れない。
+.pg
+.\"O If you just want to see what the current top players/games list is, you
+.\"O can type \fBnethack -s all\fP on most versions.
+単に現時点での高得点者・高得点の一覧を見たい場合にはほとんどの
+バージョンでは \fBnethack -s all\fP と入力すればよい。
+
+.hn 1
+.\"O Explore mode
+探検モード
+.pg
+.\"O SLASH'EM is an intricate and difficult game.  Novices might falter
+.\"O in fear, aware of their ignorance of the means to survive.  Well, fear
+.\"O not.  Your dungeon may come equipped with an ``explore'' or ``discovery''
+.\"O mode that enables you to keep old save files and cheat death, at the
+.\"O paltry cost of not getting on the high score list.
+SLASH'EM は複雑で難しいゲームである。初心者は生き残るすべを知らないこ
+とに気づき、恐怖におじけづいてしまうかもしれない。しかし恐れることはな
+い。冒険する洞窟に「探検」もしくは「発見」モードがある場合には、高得点
+の一覧に載らないというとるに足らないデメリットと引き替えに前のセーブファ
+イルを残しておけたり不死身となれたりするのである。
+.pg
+.\"O There are two ways of enabling explore mode.  One is to start the game
+.\"O with the
+.\"O .op -X
+.\"O switch.  The other is to issue the `X' command while already playing
+.\"O the game.  The other benefits of explore mode are left for the trepid
+.\"O reader to discover.
+探検モードに入るには 2 通りの方法がある。1 つはゲームの開始時に
+.op -X 
+スイッチを付けることである。もう 1 つはゲームのプレイ中に `X' コマンド
+を入力することである。探検モードで得られる他の利点は大胆な読者諸君自ら
+確かめて欲しい。
+
+.hn
+.\"O Credits
+クレジット
+.pg
+.\"O The original \fIhack\fP game was modeled on the Berkeley 
+.\"O .ux
+.\"O \fIrogue\fP game.  Large portions of this paper were shamelessly
+.\"O cribbed from \fIA Guide to the Dungeons of Doom\fP, by Michael C. Toy
+.\"O and Kenneth C. R. C. Arnold.  Small portions were adapted from
+.\"O \fIFurther Exploration of the Dungeons of Doom\fP, by Ken Arromdee.
+最初の hack というゲームは、バークレイ版
+.ux
+のゲーム \fIrogue\fP をモデルとしている。
+このドキュメントの大部分は Michael C. Toy と Kenneth C. R. C. Arnold の手になる
+\fIA Guide to the Dungeons of Doom(運命の洞窟への招待)\fP を図々しくも盗用したものである。
+また一部は Ken Arromdee による 
+\fIFurther Exploration of the Dungeons of Doom(運命の洞窟の深部への探検)\fP
+から採っている。
+.pg
+.\"O SLASH'EM is the product of literally dozens of people's work.
+.\"O Main events in the course of the game development are described below:
+SLASH'EM は文字どおり何十人もの人々の手によって完成された。
+以下はゲームの開発の過程での主な出来事である。
+
+.pg
+.\"O \fBJay Fenlason\fP wrote the original Hack, with help from
+.\"O \fBKenny Woodland\fP, \fBMike Thome\fP and \fBJon Payne\fP.
+\fBJay Fenlason\fP は \fBKenny Woodland\fP, \fBMike Thome\fP, \fBJon Payne\fP
+らの助けを得て、最初の Hack を書いた。
+.pg
+.\"O \fBAndries Brouwer\fP did a major re-write, transforming Hack into a
+.\"O very different game, and published (at least) three versions (1.0.1,
+.\"O 1.0.2, and 1.0.3) for
+.\"O .ux
+.\"O machines to the Usenet.
+\fBAndries Brouwer\fP はプログラムを大幅に書き換えて Hack を元とはかなり異
+なったゲームに仕立て上げ、
+.ux
+マシン用の(少なくとも)3 バージョン(1.0.1、1.0.2、1.0.3)を Usenet で発表した。
+.pg
+.\"O \fBDon G. Kneller\fP ported Hack 1.0.3 to Microsoft C and MS-DOS, producing PC
+.\"O HACK 1.01e, added support for DEC Rainbow graphics in version 1.03g, and went
+.\"O on to produce at least four more versions (3.0, 3.2, 3.51, and 3.6).
+\fBDon G. Kneller\fP は Hack 1.0.3 を Microsoft C を使用して MS-DOS へ移植
+し PC HACK 1.01e を作成した。バージョン 1.03g では DEC Rainbow のグラ
+フィックをサポートし、続いて少なくともあと 4 つのバージョン(3.0、3.2、
+3.51、3.6)を作成した。
+.pg
+.\"O \fBR. Black\fP ported PC HACK 3.51 to Lattice C and the Atari 520/1040ST,
+.\"O producing ST Hack 1.03.
+\fBR. Black\fP は PC HACK 3.51 を Lattice C を使用して Atari 520/1040ST へ
+移植し ST Hack 1.03 を作成した。
+.pg
+.\"O \fBMike Stephenson\fP merged these various versions back together,
+.\"O incorporating many of the added features, and produced NetHack 1.4.
+.\"O He then coordinated a cast of thousands in enhancing and debugging
+.\"O NetHack 1.4 and released NetHack versions 2.2 and 2.3.
+\fBMike Stephenson\fP はこれらのいろいろなバージョンを再び 1 つに統合し、
+多くの追加要素と合わせて NetHack バージョン 1.4 を作成した。さらに彼は
+何千人もの人々に作業を分担して NetHack 1.4 の拡張とデバッグを行い、
+NetHack バージョン 2.2 と 2.3 を発表した。
+.pg
+.\"O Later, Mike coordinated a major rewrite of the game, heading a
+.\"O team which included \fBKen Arromdee\fP, \fBJean-Christophe Collet\fP, \fBSteve
+.\"O Creps\fP, \fBEric Hendrickson\fP, \fBIzchak Miller\fP, \fBJohn Rupley\fP,
+.\"O \fBMike Threepoint\fP, and \fBJanet Walz\fP, to produce NetHack 3.0c.
+さらにその後、Mike は \fBKen Arromdee\fP, \fBJean-Christophe Collet\fP,
+\fBSteve Creps\fP, \fBEric Hendrickson\fP、\fBIzchak Miller\fP、\fBJohn Rupley\fP、
+\fBMike Threepoint\fP、\fBJanet Walz\fP 
+を含むチームを率いてゲームの大幅な書き直しを行ない、
+NetHack 3.0c を作成した。
+.pg
+.\"O NetHack 3.0 was ported to the Atari by \fBEric R. Smith\fP, to OS/2 by
+.\"O \fBTimo Hakulinen\fP, and to VMS by \fBDavid Gentzel\fP.  The three of them
+.\"O and \fBKevin Darcy\fP later joined the main development team to produce
+.\"O subsequent revisions of 3.0.
+NetHack 3.0 は \fBEric R. Smith\fP によって Atari へ、
+\fBTimo Hakulinen\fP によって OS/2 へ、
+\fBDavid Gentzel\fP によって VMS へ移植された。
+この 3 人と \fBKevin Darcy\fP はその後主力開発チームに加わり、
+3.0 のその後のいくつかの改訂版を作成した。
+.pg
+.\"O \fBOlaf Seibert\fP ported NetHack 2.3 and 3.0 to the Amiga.
+.\"O \fBNorm Meluch\fP, \fBStephen Spackman\fP and \fBPierre Martineau\fP designed
+.\"O overlay code for PC NetHack 3.0.  \fBJohnny Lee\fP ported
+.\"O NetHack 3.0 to the Macintosh.  Along with various other Dungeoneers, they
+.\"O continued to enhance the PC, Macintosh, and Amiga ports through the later
+.\"O revisions of 3.0.
+\fBOlaf Seibert\fP は NetHack 2.3 と 3.0 を Amiga へ移植した。
+\fBNorm Meluch、\fBStephen Spackman\fP、\fBPierre Martineau\fP は
+PC NetHack 3.0 のためのオーバーレイルーチンを設計した。
+\fBJohnny Lee\fP は NetHack 3.0 を Macintosh へ移植した。
+彼らは他のさまざまな洞窟の主たちとともに PC、Macintosh、Amiga 
+の移植版の拡張を続け、 3.0 のその後のいくつかの改訂版を作成した。
+.pg
+A scant one month before the next major version release of NetHack, two
+adventurous souls undertook their own modification to the sacred NetHack
+formula. \fBTom Proudfoot\fP and \fBYuval\fP released Nethack++,  which was
+rapidly renamed Nethack--,  contained new monsters,  items and
+other miscellaneous modifications.
+.pg
+.\"O Headed by \fBMike Stephenson\fP and coordinated by \fBIzchak Miller\fP and
+.\"O \fBJanet Walz\fP, the development team which now included \fBKen Arromdee\fP,
+.\"O \fBDavid Cohrs\fP, \fBJean-Christophe Collet\fP, \fBKevin Darcy\fP,
+.\"O \fBMatt Day\fP, \fBTimo Hakulinen\fP, \fBSteve Linhart\fP, \fBDean Luick\fP,
+.\"O \fBPat Rankin\fP, \fBEric Raymond\fP, and \fBEric Smith\fP undertook a radical
+.\"O revision of 3.0.  They re-structured the game's design, and re-wrote major
+.\"O parts of the code.  They added multiple dungeons, a new display, special
+.\"O individual character quests, a new endgame and many other new features, and
+.\"O produced NetHack 3.1.
+\fBMike Stephenson\fPをリーダーとし、\fBIzchak Miller\fPと\fBJanet Walz\fPの助けによって
+\fBKen Arromdee\fP, \fBDavid Cohrs\fP, \fBJean-Christophe Collet\fP, \fBKevin Darcy\fP,
+\fBMatt Day\fP, \fBTimo Hakulinen\fP, \fBSteve Linhart\fP, \fBDean Luick\fP, 
+\fBPat Rankin\fP, \fBEric Raymond\fP, \fBEric Smith\fP を含む制作チームが
+3.0の徹底的な見直しを行なった。
+彼らはゲームデザインを再構築し、コードの大部分を書き直した。
+複合ダンジョン、新しいディスプレイ、それぞれのキャラクター毎の特別のクエスト、
+新しいエンドゲームとその他の多くの新しい要素を追加し、
+NetHack 3.1を制作した。
+.pg
+.\"O \fBKen Lorber\fP, \fBGregg Wonderly\fP and \fBGreg Olson\fP, with help
+.\"O from \fBRichard Addison\fP, \fBMike Passaretti\fP, and \fBOlaf Seibert\fP,
+.\"O developed NetHack 3.1 for the Amiga.
+\fBKen Lorber\fP, \fBGregg Wonderly\fP, \fBGreg Olson\fP は
+\fBRichard Addison\fP, \fBMike Passaretti\fP, \fBOlaf Seibert\fP の助けを借りて
+Amiga 用 NetHack 3.1 を作成した。
+.pg
+.\"O \fBNorm Meluch\fP and \fBKevin Smolkowski\fP, with help from
+.\"O \fBCarl Schelin\fP, \fBStephen Spackman\fP, \fBSteve VanDevender\fP,
+.\"O and \fBPaul Winner\fP, ported NetHack 3.1 to the PC.
+\fBNorm Meluch\fP と \fBKevin Smolkowski\fP は 
+\fBCarl Schelin\fP, \fBStephen Spackman\fP, \fBSteve VanDevender\fP,
+\fBPaul Winner\fP の助けを借りて NetHack 3.1 を PC に移植した。
+.pg
+.\"O \fBJon W{tte\fP and \fBHao-yang Wang\fP, with help from \fBRoss Brown\fP,
+.\"O \fBMike Engber\fP, \fBDavid Hairston\fP, \fBMichael Hamel\fP,
+.\"O \fBJonathan Handler\fP, \fBJohnny Lee\fP, \fBTim Lennan\fP, \fBRob Menke\fP,
+.\"O and \fBAndy Swanson\fP, developed NetHack 3.1 for the Macintosh,
+.\"O porting it for MPW.  Building on their development, \fBBarton House\fP
+.\"O added a Think C port.
+\fBJon Watte\fP と \fBHao-yang Wang\fP は \fBRoss Brown\fP,
+\fBMike Engber\fP, \fBDavid Hairston\fP, \fBMichael Hamel\fP,
+\fBJonathan Handler\fP, \fBJohnny Lee\fP, \fBTim Lennan\fP, \fBRob Menke\fP,
+\fBAndy Swanson\fP の助けを借りて MPW 用の Macintosh 用 NetHack 3.1 を作成した。
+その作成中に、\fBBarton House\fP は Think C 用を加えた。
+.pg
+.\"O \fBTimo Hakulinen\fP ported NetHack 3.1 to OS/2.  \fBEric Smith\fP
+.\"O ported NetHack 3.1 to the Atari.  \fBPat Rankin\fP, with help from
+.\"O \fBJoshua Delahunty\fP, was responsible for the VMS version of NetHack 3.1.
+.\"O \fBMichael Allison\fP ported NetHack 3.1 to Windows NT.
+\fBTimo Hakulinen\fP は NetHack 3.1 を OS/2 に移植した。
+\fBEric Smith\fP は NetHack 3.1 を Atari に移植した。
+\fBPat Rankin\fP は \fBJoshua Delahunty\fP の助けを借りて VMS 版 NetHack 3.1 を作成した。
+\fBMichael Allison\fP は NetHack 3.1 を Windows NT に移植した。
+.pg
+.\"O \fBDean Luick\fP, with help from \fBDavid Cohrs\fP, developed NetHack
+.\"O 3.1 for X11.
+.\"O \fBWarwick Allison\fP wrote a tiled version of NetHack for the Atari;
+.\"O he later contributed the tiles to the DevTeam and tile support was
+.\"O then added to other platforms.
+\fBDean Luick\fP は \fBDavid Cohrs\fP の助けを借りて X11 用 NetHack3.1 を作成した。
+\fBWarwick Allison\fP は Atari 用に NetHack のタイルバージョンを作成した。
+彼は後にタイルを開発チームに寄贈し、タイルサポートは他のプラットフォームにも追加された。
+.pg
+Time passed,  and Nethack-- was ported to 3.11 by \fBChris\fP.
+.pg
+\fBStephen White\fP then released his own modification known as
+Nethack Plus,  which contained new character classes.  Unbeknownst
+to the world at large,  \fBTom Proudfoot\fP took this source and
+combined it with his Nethack--.  \fBStephen White\fP went on to add
+weapon skills,  which were eventually integrated into the next version
+of Nethack,  and other features.
+.pg
+In February 1996,  \fBTom Proudfoot\fP released SLASH V1.  Including
+part of \fBStephen White\fP's Nethack Plus and his own Nethack--,  leaving
+unmentioned his own slew of further modifications,  this is perhaps
+the best known of the Nethack modifications.  Six versions of this,  ending
+with SLASH V6,  are known to exist.
+.pg
+.\"O The 3.2 development team, comprised of \fBMichael Allison\fP, \fBKen
+.\"O Arromdee\fP, \fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBSteve Creps\fP,
+.\"O \fBKevin Darcy\fP, \fBTimo Hakulinen\fP, \fBSteve Linhart\fP, \fBDean
+.\"O Luick\fP, \fBPat Rankin\fP, \fBEric Smith\fP, \fBMike Stephenson\fP,
+.\"O \fBJanet Walz\fP, and \fBPaul Winner\fP, released version 3.2 in April of
+.\"O 1996.
+\fBMichael Allison\fP, \fBKen
+Arromdee\fP, \fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBSteve Creps\fP,
+\fBKevin Darcy\fP, \fBTimo Hakulinen\fP, \fBSteve Linhart\fP, \fBDean
+Luick\fP, \fBPat Rankin\fP, \fBEric Smith\fP, \fBMike Stephenson\fP,
+\fBJanet Walz\fP, and \fBPaul Winner\fP
+からなる 3.2の開発チームは バージョン 3.2 を 1996 年 4 月にリリースした。
+.pg
+.\"O Version 3.2 marked the tenth anniversary of the formation of the development
+.\"O team.  In a testament to their dedication to the game, all thirteen members
+.\"O of the original development team remained on the team at the start of work
+.\"O on that release.  During the interval between the release of 3.1.3
+.\"O and 3.2, one of the founding members of the development team, \fBDr. Izchak
+.\"O Miller\fP, was diagnosed with cancer and passed away.  That release of the
+.\"O game was dedicated to him by the development and porting teams.
+バージョン 3.2 は開発チームが結成されてから 10 周年のものであった。
+彼らのゲームへの貢献について記すと、13 人の初期の開発チーム全員は
+このリリースの開始時の最初の時点までチームに残っていた。
+が、 3.1.3 から 3.2 の間に、開発チームの創始者の一人である
+\fBIzchak Miller博士\fPが癌と診断され、亡くなった。
+このリリースは開発チームおよび移植チームから彼に捧げられた。
+.pg
+\fBLarry Stewart-Zerba\fP set along a different track - to enhance the
+spellcasting abilities of the Wizard.   Thus, in April 1996,  he released
+version 0.1 of the Wizard Patch.  By July,  he was joined by
+\fBWarwick Allison\fP and version 0.4 of the Wizard Patch was released.
+The final update came in April 1997,  with the release of
+Wizard Patch 1.0.
+.pg
+.\"O \fBWarwick Allison\fP also ported NetHack to use the Qt interface.
+\fBWarwick Allison\fP は NetHack を Qt インターフェースを使うように変更した。
+.pg
+SLASH V6 was picked up by \fBEnrico Horn\fP, who managed to synchronize it with
+the 3.2 source.  The new SLASH 4.1.2 was released as far back as November
+1996 went through at least 4 editlevels (E5, E6, E7)
+with the latest version being 4.1.2E8,  synchronized with Nethack 3.2.2 and
+the Blackmarket option available,  released in June 1997.
+.pg
+\fBNathan La\fP began the arduous task of drawing tiles for the SLASH monsters.
+.pg
+\fBKentaro Shirakata\fP ported SLASH 4.1.2E8 to Unix.
+.pg
+\fBLief Clennon\fP ported SLASH 4.1.2E8 to OS/2 EMX.
+.pg
+\fBRomain Dolbeau\fP ported SLASH 4.1.2E8 to Macintosh.
+.pg
+\fBWarren Cheung\fP combined SLASH 4.1.2 and Wizard Patch to create
+SLASH'EM 0.1 in November 1997.  Several revisions including new spells and
+other additions led eventually to SLASH'EM 0.0.5E7F1. \fBSteven Uy\fP
+generously made additional modifications.
+.pg
+\fBDirk Schoenberger\fP continued updating the SLASH/SLASH'EM monster
+tiles.  He also ported SLASH'EM to Linux.
+.pg
+\fBLief Clennon\fP ported SLASH'EM to OS/2 EMX.
+.pg
+\fBKevin Hugo\fP ported SLASH'EM to Macintosh,  and also contributed
+additional changes and improvements.
+.pg
+\fBRobin Johnson\fP finished the arduous task of drawing tiles for the
+SLASH'EM monsters.  He also contributed many more new tiles.
+.pg
+.\"O Kevin later joined the
+.\"O DevTeam and incorporated the best of these ideas in NetHack 3.3.
+Kevin は後に開発チームに加わり、これらのアイデアを NetHack 3.3 に統合した。
+.pg
+JNetHack (the Japanese version of NetHack) has been around since at least
+1994, developed by Issei Numata and others. The GTK interface was written
+for this variant and released in 1999.
+.pg
+Mitsuhiro Itakura headed a team which began the process of redrawing the
+NetHack tiles in 8-bit color at 32x32 pixels.
+.pg
+.\"O The final update to 3.2 was the bug fix release 3.2.3, which was released
+.\"O simultaneously with 3.3.0 in December 1999 just in time for the Year 2000.
+3.2 の最終バージョンはバグ修正版である 3.2.3 である。
+これは 2000 年問題対策のために 3.3.0 と同時に 1999 年 12 月に発表された。
+.pg
+.\"O The 3.3 development team, consisting of \fBMichael Allison\fP, \fBKen Arromdee\fP, 
+.\"O \fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBSteve Creps\fP, \fBKevin Darcy\fP, 
+.\"O \fBTimo Hakulinen\fP, \fBKevin Hugo\fP, \fBSteve Linhart\fP, \fBKen Lorber\fP, 
+.\"O \fBDean Luick\fP, \fBPat Rankin\fP, \fBEric Smith\fP, \fBMike Stephenson\fP, 
+.\"O \fBJanet Walz\fP, and \fBPaul Winner\fP, released 3.3.0 in 
+.\"O December 1999 and 3.3.1 in August of 2000.
+\fBMichael Allison\fP, \fBKen Arromdee\fP, 
+\fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBSteve Creps\fP, \fBKevin Darcy\fP, 
+\fBTimo Hakulinen\fP, \fBKevin Hugo\fP, \fBSteve Linhart\fP, \fBKen Lorber\fP, 
+\fBDean Luick\fP, \fBPat Rankin\fP, \fBEric Smith\fP, \fBMike Stephenson\fP, 
+\fBJanet Walz\fP, \fBPaul Winner\fP
+からなる 3.3 の開発チームは 1999 年 12 月に 3.3.0を、
+2000 年 8 月に 3.3.1 をリリースした。
+.pg
+.\"O Version 3.3 offered many firsts. It was the first version to separate race 
+.\"O and profession. The Elf class was removed in preference to an elf race, 
+.\"O and the races of dwarves, gnomes, and orcs made their first appearance in 
+.\"O the game alongside the familiar human race.  Monk and Ranger roles joined 
+.\"O Archeologists, Barbarians, Cavemen, Healers, Knights, Priests, Rogues, Samurai, 
+.\"O Tourists, Valkyries and of course, Wizards.  It was also the first version
+.\"O to allow you to ride a steed, and was the first version to have a publicly 
+.\"O available web-site listing all the bugs that had been discovered.  Despite 
+.\"O that constantly growing bug list, 3.3 proved stable enough to last for
+.\"O more than a year and a half.
+バージョン 3.3 は多くの新要素を提供した。
+まず、種族と職業を分離した最初のバージョンである。
+職業としてのエルフは削除され、種族の一つとなった。
+また、ドワーフ、ノーム、オークが種族として追加された。
+モンクとレンジャーの二つが職業として追加された。
+さらに、動物に乗ることが出来る最初のバージョンでもあり、
+発見された全てのバグをウェブサイトで公表した最初のバージョンでもある。
+バグリストが順調に伸びていったにも関わらず、
+3.3 は 1 年半続いたことで十分安定していたことを証明した。
+.pg
+.\"O The 3.4 development team initially consisted of
+.\"O \fBMichael Allison\fP, \fBKen Arromdee\fP,
+.\"O \fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBKevin Hugo\fP, \fBKen Lorber\fP,
+.\"O \fBDean Luick\fP, \fBPat Rankin\fP, \fBMike Stephenson\fP, 
+.\"O \fBJanet Walz\fP, and \fBPaul Winner\fP, with \fB Warwick Allison\fP joining 
+.\"O just before the release of NetHack 3.4.0 in March 2002.
+3.4 開発チームは \fBMichael Allison\fP, \fBKen Arromdee\fP,
+\fBDavid Cohrs\fP, \fBJessie Collet\fP, \fBKevin Hugo\fP, \fBKen Lorber\fP,
+\fBDean Luick\fP, \fBPat Rankin\fP, \fBMike Stephenson\fP, 
+\fBJanet Walz\fP, and \fBPaul Winner\fP で開始され、
+NetHack 3.4.0 リリース直前の 2002 年 3 月に \fB Warwick Allison\fP が加わった。
+.pg
+.\"O As with version 3.3, various people contributed to the game as a whole as
+.\"O well as supporting ports on the different platforms that NetHack runs on:
+バージョン 3.3 と同様に、様々な人々が NetHack の色々なプラットフォームへの
+移植を行なってくれた。
+.pg
+.\"O \fBPat Rankin\fP maintained 3.4 for VMS.
+\fBPat Rankin\fP は 3.4 の VMS への移植を担当した。
+.pg
+.\"O \fBMichael Allison\fP maintained NetHack 3.4 for the MS-DOS platform.  \fBPaul Winner\fP
+.\"O and \fBYitzhak Sapir\fP provided encouragement.
+\fBMichael Allison\fP は MS-DOS 版の NetHack 3.4 を管理している。
+\fBPaul Winner\fP と \fBYitzhak Sapir\fP が手伝っている。
+.pg
+.\"O \fBDean Luick\fP, \fBMark Modrall\fP, and \fBKevin Hugo\fP maintained and enhanced the
+.\"O Macintosh port of 3.4.
+\fBDean Luick\fP, \fBMark Modrall\fP, \fBKevin Hugo\fP は
+3.4 の Macintosh への移植と拡張を担当した。
+.pg
+.\"O \fBMichael Allison\fP, \fBDavid Cohrs\fP, \fBAlex Kompel\fP, \fBDion Nicolaas\fP, and 
+.\"O \fBYitzhak Sapir\fP maintained and enhanced 3.4 for the Microsoft Windows platform.
+.\"O \fBAlex Kompel\fP contributed a new graphical interface for the Windows port. 
+.\"O \fBAlex Kompel\fP also contributed a Windows CE port for 3.4.1.
+\fBMichael Allison\fP, \fBDavid Cohrs\fP, \fBAlex Kompel\fP, \fBDion Nicolaas\fP,
+\fBYitzhak Sapir\fP は 3.4 の Microsoft Windows プラットフォームへの移植と拡張を担当した。
+\fBAlex Kompel\fP は Windows 版への新しいグラフィックインターフェースを提供した。
+\fBAlex Kompel\fP はまた、3.4.1 の Windows CE 版を提供した。
+.\"O \fBRon Van Iwaarden\fP maintained 3.4 for OS/2.
+\fBRon Van Iwaarden\fP は 3.4 の OS/2 版を管理している。
+.pg
+.\"O \fBJanne Salmijarvi\fP and \fBTeemu Suikki\fP maintained and 
+.\"O enhanced the Amiga port of 3.4 after \fBJanne Salmijarvi\fP resurrected 
+.\"O it for 3.3.1.
+3.3.1 で復活した Amiga への移植と拡張は \fBJanne Salmijarvi\fP と \fBTeemu Suikki\fP が
+行っている。
+.pg
+.\"O \fBChristian ``Marvin'' Bressler\fP maintained 3.4 for the Atari after he 
+.\"O resurrected it for 3.3.1.
+3.3.1 で復活した Atari 版は \fBChristian ``Marvin'' Bressler\fP が管理している。
+.pg
+.\"O There is a NetHack web site maintained by \fBKen Lorber\fP at http://www.nethack.org/.
+\fBKen Lorber\fP によって管理されている NetHack のウェブサイトが http://www.nethack.org/ にある。
+.pg
+.pg
+\fBWarren Cheung\fP combined SLASH'EM 0.0.5E7F1 and NetHack 3.3 to create
+SLASH'EM 0.0.6 and continues to maintain the DOS and Microsoft Windows ports.
+.pg
+\fBJ. Ali Harlow\fP incorporated the GTK interface and Mitsuhiro Itakura's
+32x32 tileset into SLASH'EM 0.0.6 and maintains the UNIX port of SLASH'EM.
+\fBPeter Makholm\fP maintains the Debian package.
+.pg
+\fBPaul Hurtley\fP maintains the MAC port of SLASH'EM.
+
+			   - - - - - - - - - -
+.pg
+.\"O From time to time, some depraved individual out there in netland sends a
+.\"O particularly intriguing modification to help out with the game.  The Gods of
+.\"O the Dungeon sometimes make note of the names of the worst of these miscreants
+.\"O in this, the list of Dungeoneers:
+.\"O 
+時々ネットワークの世界のどうしようもない連中が、
+ゲームの改良の手助けをしようとしてとりわけ興味をそそるような修正を送ってよこす。
+洞窟の神々は、ときにはこういった悪党のうちでも最も邪悪な連中の名前を
+洞窟の主たちの一覧としてここに記すのだ。
+.sd
+.TS S
+center;
+c c c.
+.\"TABLE_START
+Adam Aronow	Izchak Miller	Mike Stephenson
+Alex Kompel	J. Ali Harlow	Norm Meluch
+Andreas Dorn	Janet Walz	Olaf Seibert
+Andy Church	Janne Salmijarvi	Pasi Kallinen
+Andy Swanson	Jean-Christophe Collet	Pat Rankin
+Ari Huttunen	Jochen Erwied	Paul Winner
+Barton House	John Kallen	Pierre Martineau
+Benson I. Margulies	John Rupley	Ralf Brown
+Bill Dyer	John S. Bien	Ray Chason
+Boudewijn Waijers	Johnny Lee	Richard Addison
+Bruce Cox	Jon W{tte	Richard Beigel
+Bruce Holloway	Jonathan Handler	Richard P. Hughey
+Bruce Mewborne	Joshua Delahunty	Rob Menke
+Carl Schelin	Keizo Yamamoto	Robin Johnson
+Chris Russo	Ken Arnold	Roderick Schertler
+David Cohrs	Ken Arromdee	Roland McGrath
+David Damerell	Ken Lorber	Ron Van Iwaarden
+David Gentzel	Ken Washikita	Ronnen Miller
+David Hairston	Kevin Darcy	Ross Brown
+Dean Luick	Kevin Hugo	Sascha Wostmann
+Del Lamb	Kevin Sitze	Scott Bigham
+Deron Meranda	Kevin Smolkowski	Scott R. Turner
+Dion Nicolaas	Kevin Sweet	Stephen Spackman
+Dylan O'Donnell	Lars Huttar	Stephen White
+Eric Backus	Malcolm Ryan	Steve Creps
+Eric Hendrickson	Mark Gooderum	Steve Linhart
+Eric R. Smith	Mark Modrall	Steve VanDevender
+Eric S. Raymond	Marvin Bressler	Teemu Suikki
+Erik Andersen	Matthew Day	Tim Lennan
+Frederick Roeber	Merlyn LeRoy	Timo Hakulinen
+Gil Neiger	Michael Allison	Tom Almy
+Greg Laskin	Michael Feir	Tom West
+Greg Olson	Michael Hamel	Warren Cheung
+Gregg Wonderly	Michael Sokolov	Warwick Allison
+Hao-yang Wang	Mike Engber	Yitzhak Sapir
+Helge Hafting	Mike Gallop
+Irina Rempt-Drijfhout	Mike Passaretti
+.\"TABLE_END  Do not delete this line.
+.TE
+.ed
+
+.\"O .\"Microsoft and MS-DOS are registered trademarks of Microsoft Corporation.
+.\"O .\"Lattice is a trademark of Lattice, Inc.
+.\"O .\"Atari and 1040ST are trademarks of Atari, Inc.
+.\"O .\"AMIGA is a trademark of Commodore-Amiga, Inc.
+.\"O .sm "Brand and product names are trademarks or registered trademarks \
+.\"O of their respective holders."
+.sm ブランドと製品名は各社の商標または登録商標である。
diff -aurN slashem-0.0.7E6F2/doc/jGuidebook.txt jslashem-0.0.7E6F2-J0.0.8/doc/jGuidebook.txt
--- slashem-0.0.7E6F2/doc/jGuidebook.txt	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/doc/jGuidebook.txt	2004-07-07 20:59:20.000000000 +0900
@@ -0,0 +1,3708 @@
+
+
+
+
+
+
+
+
+
+
+                                 恐怖の迷宮への招待
+                               (Slash'EM ガイドブック)
+
+
+                                    Eric S. Raymond
+                       (NetHack 3.4のための広範囲な校訂と拡充)
+                    (Revised for SLASH'EM 0.0.3 by Warren Cheung)
+                    (Revised for SLASH'EM 0.0.6 by J. Ali Harlow)
+
+
+
+          1.  はじめに
+
+               最近、あなたは日々の仕事に満たされなく、敬遠しつつある自分に
+          気がついた。最近数ヶ月、あなたが見る夢は探査、盗み、十字軍、戦 闘
+          と いったものであったが、あなたにはその理由がはっきりとはわからな
+          かった。あなたはこれらの夢を実際には生まれてこのかたずっと見続 け
+          て い て、 なぜか今までそれらについて忘れようとしていたのではない
+          か、と思った。ある夜、あなたは飛び起きて、夢の中の洞窟のあらゆ る
+          角 の後ろに潜んでいるように見える、奇妙で強力な怪物の鮮明な記憶に
+          ぞっとして大声で叫んだ。あなたの夢に出没する内容は本当なのだろ う
+          か?    夜毎に、廃墟の近くの不思議な洞窟に入るという欲求が強くなっ
+          た。それでも、毎朝あなたはそのような考えを、洞窟に入って帰って 来
+          な かった人々の話を思い出すことで頭から追い出した。しかし、ついに
+          あなたは夢の中に出てくる不思議な場所を捜し求めるという思いを抑 え
+          き れなくなった。何といっても、冒険者は最初にその道を通っていった
+          時より、こちらに戻って来る時の方が裕福になっているように見える の
+          だ。戻って来ない人たちは皆、単にまだ冒険を続けているだけなのでは?
+
+
+               あちこちで尋ねるうちに、あなたはある噂を耳にした。イェンダー
+          の 魔除けとかいうものがあり、手に入れることができたなら、すばらし
+          い財産をもたらすと言うのだ。あなたが聞いたとある伝説では、魔除 け
+          を 見つけたものは神から不死の体を授かるとさえ言われているらしい。
+          魔除けは恐怖の迷宮の奥深く、ゲヘナの谷を越えたどこかにあるとい う
+          噂 である。伝説を聞いた瞬間、あなたは自分には洞窟に入って彼らの話
+          している魔除けを捜し求めるべき深遠で未知のなんらかの理由がある と
+          確 信した。あなたはたとえ魔除けの力が真実でなくても、少なくとも冒
+          険談を地元のの吟遊詩人にかなりの金額で売り込めるだろうと考え た。
+          夢 の中で出てきた恐ろしく、不思議な怪物に出会うことができればなお
+          さらである。あなたは地元の安宿で最後の宿を取り対策を練った。安 宿
+          の 壁に掲げられた成功率のオッズが下がれば下がるほど、あなたは意気
+          消沈した。
+
+
+               朝起きると、あなたは所持品をかき集め、あなたは洞窟に向けて旅
+          立っ た。無事何日かの旅を続けて恐怖の迷宮への入口を示す古代の遺跡
+          へとたどり着いた。夜も更けていたので入口でキャンプをする こ と に
+          し、 その夜は広々とした空の下で眠りに就いた。翌朝あなたは道具をか
+          き集め、もしかすると地上での最後になるかもしれない食事を済ま せ、
+          洞窟へと入っていった。
+
+
+
+          SLASH'EM Guidebook                                               1
+
+
+
+
+
+          SLASH'EM Guidebook                                               2
+
+
+
+          2.  あなたを取り巻く状況
+
+               こうしてあなたは SLASH'EM というゲームを始めることになった。
+          あなたの目的は持てる限りの宝を集め、イェンダーの魔除けを見つけ 出
+          し、さらにはこの恐怖の迷宮から生きて脱出することである。
+
+               冒険におけるいろいろな困難に対応するための各種の能力や力は、
+          あなたの生い立ちと修行によって変化する。
+
+               考古学者(Archeologist) は洞窟について多くの知識を 持っ て い
+          る。 このため素早く動いたり洞窟での不快な事態を切り抜けることがで
+          きる。彼らは学術的調査のための探検旅行に適した道具を持って出発 す
+          る。
+
+                野 蛮人(Barbarian) は奥地からやってきた戦士であり、戦闘のた
+          めに鍛えられている。彼らは類まれな力の強さを持ち、丈夫な鎖かた び
+          らと大きな両手持ちの剣のみを持って探求に出発する。
+
+                洞 窟 人(Caveman  と Cavewoman)はとりわけ強い力を持っている
+          が、新石器時代に使われた武器を持って出発する。
+
+               炎の魔術師(Flame Mage)は火の精霊を制御して神秘のエネルギーを
+          使用する。彼らのペットはヘルハウンドであるにもかかわらず、火の玉
+          の魔法を詠唱する熟練した魔術師になるには困難が立ちふさがる．
+
+               医者(Healer)は医術や薬物について精通している。生気を回復させ
+          た り、苦痛を和らげたり、麻酔をかけたり、毒を中和させたりする香草
+          や薬草について詳しい。そして器具を使って生物の健康状態を見抜く こ
+          と ができる。彼らは開業医としてかなりよい報酬を得て、それを持って
+          洞窟に入っていく。
+
+               氷の魔術師(Ice Mages)は、冷気の力を支配する。経験を積んだ魔
+          術師は大きな暴風雪を呼び出すことができるが、まだ精霊の騒動に関与
+          できるまでにはなっていない。
+
+               騎士(Knight) は騎士道に忠実であることと防具が驚くほど優れ て
+          いることという点で、普通の戦士とは区別される。
+
+                モンク(Monk)  は修道者であり、 厳格な肉体的習慣と精神的訓練
+          によって、 武器なしでも武器を使うのと同じように戦うことが出来る。
+          モンクは防具をつけないが、 機動性を向上させることで埋め合わせてい
+          る。
+
+               死人使い(Necromancers) は魔術に関する英知のうちもっとも闇の
+          部分を探求するものであり、それらのうちの禁呪とされるものをいくら
+          かマスターしている。彼らのほとんどが自らが作り出しコントロールす
+          るアンデッドの軍隊を義務のように持っている。
+
+               僧侶と尼僧(Priest と Priestess) は聖職の戦士であり、武器と防
+          具を持ち魔法の業を駆使して正義を広めんとする聖戦士である。 祈りを
+          通じて神と語る能力により、彼らはしばしば危難から逃れることがで き
+          る…が、祈りは危難をもたらすこともある。
+
+                レンジャー(Ranger) はほとんど森を住みかとし、洞窟は少々場違
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               3
+
+
+          いかもしれない。しかし、彼らは追跡術や隠密行動と共に、弓術の達 人
+          である。
+
+                盗賊(Rogue) は敏捷で身を隠す業に長けた泥棒であり、 錠や罠や
+          毒に詳しい。彼らは奇襲の達人であり、これは非常な長所となる。
+
+                侍(Samurai) は封建時代の日本の精鋭の武人である。防具は重 装
+          だが身のこなしに秀でており、この上なく研ぎ澄まされた 大小 2本の刀
+          を帯びている。
+
+                観光客 (Tourist) は多額の金 (買物に最適である) とクレジット
+          カード、 大量の食料、地図、そして高価なカメラを持って出発する。ほ
+          とんどの怪物は写真に撮られるのを嫌うものである。
+
+                アンデットスレイヤー (Undead Slayer) は、他の悪しきものと同
+          じようにアンデッドも狩り出すように訓練されている専門家である。彼
+          らは、敵対者の弱点を熟知しており、準備して来る。闇の住人で光の戦
+          士と相対し、生き延びてそれを伝えられるものは極わずかしか居ないだ
+          ろう。
+
+                ワルキューレ(Valkyrie) は勇敢な女戦士である。過酷なスカンジ
+          ナ ビアの国々で育った彼女らは頑強で、厳しい寒さにも耐え、身を隠す
+          業と巧妙さを身につけている。
+
+                魔法使い(Wizard)は魔術の知識とに選び抜かれた魔法の道具を 準
+          備 しており、いにしえの魔法学に対して特に造詣が深い。見かけは弱そ
+          うで簡単に打ち倒せるように思えるが、経験を積んだ魔法使いは恐る べ
+          き敵である。
+
+                衛士(Yeomen) は頑丈な戦士である。彼らは、何時間も何もせずに
+          立っていられる能力で有名である。この能力は、彼らがあまりにも愚直だ
+          からできるのだと言われている。衛士は受けたたくさんのダメージを他者
+          に与えることが可能である。
+
+               また、キャラクターの種族も選ぶことができる。
+
+                ドッペルゲンガー(Doppelganger) は意思により変身できる不思議
+          な能力を持っている。神秘的なエネルギー(マナ)を使っているとはいえ
+          それらはちょっとした脅威だろう。
+
+                ドワーフ(Dwarf)  は人間やエルフよりも小さいが、がっしりした
+          体つきで丈夫である。ドワーフの注目すべき特性は採掘と金属工作の 専
+          門 的技術である。ドワーフの防具はエルフのミスリル防具と同じとまで
+          はいかないまでも、それに次ぐ品質である。
+
+                エルフ(Elf) と ドロウ(Drow) は機敏さと迅速さ、 そして鋭敏な
+          感覚を持っている。 周囲で起きるどんな些細なことも彼らの目を逃れる
+          ことはできない。職人気質の彼らの持つ武器と防具は優秀なものである。
+
+                ノーム(Gnome)  はドワーフよりもさらに小さいが、ドワーフと似
+          て いる。ノームは熟練した採掘師として知られ、富と危険で満ちている
+          秘密の地下坑道を恐怖の迷宮に作っていることで知られる。
+
+                獣人(Lycanthrope)  は月の満ち欠けの力を引き出し、その魔力に
+          よって狼に変身できる野獣である。 たとえ武装がなくても、獣人が残忍
+          な戦士であると、 彼らの死をもたらす爪が生み出す無数の傷痕が証明し
+          てくれるであろう。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               4
+
+
+                人間(Human)  は地上で最も一般的な種族で、ゆえに他の種族と比
+          較 される時の基準となっている。特別な能力は持っていないが、あらゆ
+          る職業で成功することができる。
+
+                オーク(Orc)  は残酷で野蛮な種族で、(他のオークを含む)あらゆ
+          る 生物を嫌っている。特に、オークはエルフを感性の違いゆえに嫌い、
+          わざわざあらゆる機会を見つけて殺そうとする。オークによって作ら れ
+          た防具と武器は一般的に品質が劣る。
+
+                Vampires  strike  fear  into  the  heart  of  many.  Their
+          super-human strength,   notorious dexterity and resiliance make
+          them difficult to defeat while their almost hypnotic charm makes
+          them dangerous opponents.   Even their own Gods treat vampires
+          with some distaste.
+
+          3.  画面に表示されるものの意味
+
+               画面上にはあなたが現在いる洞窟の階ですでに探索を終えた部分の
+          地図と、そこで目にした物が示されている。さらに深く探検を進める に
+          連れて洞窟はその姿を次第にあなたの前の画面に明らかにしていく。
+
+               SLASH'EM  の祖先である rogue が最初に現れたとき、そのスクリー
+          ン指向はコンピュータファンタジーゲームの中でも全く独特の も の で
+          あっ た。それ以来スクリーン指向は例外的なものというよりむしろ標準
+          となった。SLASH'EM はこのすばらしい伝統を受け継いでいる。疑似的 な
+          英 語 で コマンドを入力し、結果が文章で表示されるテキストアドベン
+          チャーゲームとは異なり、SLASH'EM のコマンドはすべて 1 文字か 2  文
+          字 のキー入力で与えられ、その結果は画面上にグラフィカルに表示され
+          る。画面は最低 80 桁および 24 行の大きさが推奨される。それ以上 の
+          大きさがあっても 80 × 21 の領域だけが地図の表示に使われる。
+
+               SLASH'EM は点字や音声合成の助けを借りて、目の不自由な人でもプ
+          レイできる。目の不自由な人のためのSLASH'EMの設定方法については、こ
+          のドキュメントで後述する。
+
+               SLASH'EM はプレイするたびに新しい洞窟を作成する。このため何回
+          かゲームに勝利したことのある作者たちにも、いまだこのゲームは楽 し
+          く興奮に満ちたものと感じられる。
+
+               SLASH'EM はさまざまな表示のオプションを提供する。オプションは
+          あなたのハードウェアやソフトウェアの能力に依存し、プラット フォー
+          ム 毎 に さまざまである。さまざまなコンパイル時のオプションは実行
+          ファイルが作られたときにのみ可能となる。モノクロキャラクタイン タ
+          フェー ス、カラーキャラクタインタフェース、タイルと呼ばれる小さな
+          絵を用いたグラフィカルインタフェースの 3 つの表示方法があ る。  2
+          つ のキャラクタインタフェースはフォントを他の文字に置き換えること
+          もできるが、標準設定では 標準の ASCII キャラクタを用いて全てを 表
+          現 す る。 さまざまな表示のオプションはゲーム内容には影響を与えな
+          い。タイルや色はガイドブックで表記できないし、それは全てのプ ラッ
+          ト フォームに共通ではないので、ゲーム中に表示されるものの説明とし
+          てはモノクロキャラクタディスプレイで表示される標準の ASCII キャラ
+          クタを用いる。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               5
+
+
+               SLASH'EM  で何が起きているのかを理解するには、まず SLASH'EM で
+          は画面がどうなっているのかを理解しなくてはならない。SLASH'EM の 画
+          面 は、テキストアドベンチャーゲームにおける「あなたは…を見た」の
+          ような文章の代わりである。図 1 は SLASH'EM では画面に何が表示さ れ
+          る かの一例である。画面がどのように表示されるかはプラットホームに
+          依存する。
+
+          --------------------------------------------------------------------
+           The bat bites!
+
+               ------
+               |....|    ----------
+               |.<..|####...@...$.|
+               |....-#   |...B....+
+               |....|    |.d......|
+               ------    -------|--
+
+
+
+           Player the Rambler     St:12 Dx:7 Co:18 In:11 Wi:9 Ch:15  Neutral
+           Dlvl:1 $:0  HP:9(12) Pw:3(3) AC:10 Exp:1/19 T:257 Weak
+
+          --------------------------------------------------------------------
+                                      Figure 1
+
+
+          3.1.  ステータス行(画面の下部)
+
+               画面の下 2 行には、あなたの現在の状態を表す暗号のような情 報
+          の 断片が含まれている。どちらかの行が画面の幅よりも長くなるとその
+          全部を見ることはできないかもしれない。以下に状態を示すいろいろ な
+          項 目が何を意味するのかを述べる (コンフィグレーションによっては、
+          以下に一覧されている状態を示す項目のすべてが表示されるとは限ら な
+          い)。
+
+          名前とランク(Rank)
+               あ な たのキャラクタ名と(後述の経験レベルに基づく)職業別の等
+               級。
+
+          強さ(Strength)
+               あなたのキャラクタの力の強さの値であり、6 つの基本的な属性の
+               1   つである。人間のキャラクターの場合，力の強さは 3 から 18
+               の間の値をとる。その他の場合，この制限を越えることもある (時
+               折  18/xx のような特別な力を得ることもあり、魔法の力も普通の
+               制限を越える能力を与えることがある)。力の強さの値が大きい ほ
+               ど、あなたの力は強い。力の強さは力仕事をどれだけうまくやれる
+               か、戦いでどれだけのダメージを与えるか、どれくらい荷物を運べ
+               るかに影響する。
+
+          素早さ(Dexterity)
+               素早さは戦いにおける命中率、罠を逃れる可能性、そしてその他の
+               敏捷さを必要とする仕事や物をいかに器用に扱えるかなどのことが
+               らに影響を与える。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               6
+
+
+               耐 久力(Constitution) 耐久力は怪我やその他の圧迫によるスタミ
+               ナの消耗から回復する能力に影響する。
+
+          知力(Intelligence)
+               知力は呪文を唱える能力や魔法書を読む能力に影響を与える。
+
+          賢さ(Wisdom)
+               賢さは(特に魔法を扱う)実戦的な経験により得られる。魔法のエネ
+               ルギーに影響する。
+
+          魅力(Charisma)
+               魅力はある種の生物があなたに対してとる態度に影響を与える。特
+               に店主が示す価格に影響する。
+
+          属性(Alignment)
+               属性には  秩序 (Lawful),  中立 (Neutral),
+                混沌(Chaotic) がある。しばしば、秩序は善、混沌は悪である と
+               されるが、法と道徳が常に一致するとは限らない。あなたの属性は
+               他の怪物のあなたに対する反応に影響を与える。属性が似ている怪
+               物は好戦的ではなく、反対の属性に対してはあなたの存在に対して
+               極めて好戦的であるらしい。
+
+          階数(Dungeon Level)
+               どれだけ洞窟の奥深くまで行ったかを示す。初期値は 1 で、洞 窟
+               を奥深く行くほど大きな値になる。いくつかの階は特別で、数字で
+               はなく名前で識別される。イェンダーの魔除けは地下 20 階より深
+               くのどこかにあると考えられている。
+
+          金(Gold)
+               大っぴらに所持している金塊の量である。箱などに隠したお金は勘
+               定に入っていない。
+
+          体力(Hit Points)
+               体力の現在値と最大値である。体力はあとどれだけのダメージを受
+               けると死ぬかを示す。戦いで傷つくほど値は減少する。体力は休息
+               や魔法のアイテムや呪文により回復できる。括弧の中の数字は体力
+               のとり得る最大値である。
+
+          魔力(Power)
+               呪 文 に使う魔力である。これは呪文を唱えるのに必要な神秘の力
+               (mana: マナ ) がどれほどあるかを示す。魔力もまた休息すること
+               により回復する。
+
+          防御値(Armor Class)
+               非友好的な生物からの攻撃を防具がどれほど食い止められるかを示
+               す値である。数字が小さいほど防具は有効であり、防御値が負の値
+               になることさえ十分あり得る。
+
+          経験値(Experience)
+               現在の経験レベルと経験値である。冒険が進むと経験値を得ること
+               ができる。経験値の合計がある一定値まで達すると、経験レベルが
+               上がる。経験を積むにつれ、戦い方が上達し魔法の攻撃にも耐えら
+               れるようになる。多くのバージョンでは経験レベルだけが表示され
+               る。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               7
+
+
+
+          重さ(Weight)
+               所持 している アイテム の 全重量、 これを 表示 したい 場合、
+               showweight オプションがオンにする。  スラッシュの後ろの数字
+               が(よろめかずに)持ち運べる最大重量である。
+
+          時間(Time)
+               経過したターン数である。 time オプションがオンのときに表示さ
+               れる。
+
+          腹具合(Hunger status)
+               現在の腹具合である。腹具合は  満腹(Satiated) から
+                ふらふら(Fainting) P までの値をとる。腹具合が普通なら表示さ
+               れない。
+
+               この他にも状態を示す表示が腹具合の後ろに表示されることがある
+          かもしれない。混乱しているときには Conf、病気のときには  FoodPois
+          または Ill、目が見えないときには Blind、眩暈がしたときは Stun、幻
+          覚を見ているときは Hallu と表示される。
+
+          3.2.  メッセージ行(画面の上部)
+
+               画面の最上行は視覚的に表現できないことを説明するメッセージの
+          た めに使われる。最上行に``--More--''が表示されたときは、このあと
+          にさらにメッセージが続いているけれども現在のメッセージをまず確 実
+          に 読むよう促しているということである。次のメッセージを読むために
+          は単にスペースキーを押せばよい。
+
+          3.3.  地図(画面のその他の部分)
+
+               画面のその他の部分は、あなたが現在いる階でそれまでに探索し終
+          わっ た部分の地図である。画面上のシンボルはそれぞれ何かを表してい
+          る。表示されるシンボルのうちいくつかは、さまざまなグラフィック オ
+          プ ションを設定することによって変えることができる。そうでなければ
+          標準設定のシンボルが用いられる。次に標準設定のシンボルの意味の 一
+          覧を示す。
+
+          - と |
+               部屋の壁、または開いた扉、または墓 (|)。
+
+          .    部屋の床、氷、または扉のない出入口。
+
+          #     通路、鉄の棒、木、あるいは台所の流し台(流し台がインプリメン
+               トされているとき) または跳ね橋
+
+          >    上り階段:上の階への通路。
+
+          <    下り階段:下の階への通路。
+
+          +    閉じた扉、または学習できるかもしれない呪文の書かれた魔法書。
+
+          @    あなたのキャラクター、または人間。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               8
+
+
+
+          $    金塊の山。
+
+          ^    罠(ひとたび発見すれば表示される)。
+
+          )    武器。
+
+          [    服またはなんらかの防具。
+
+          %    食料(衛生的であるとは限らない)。
+
+          ?    巻物。
+
+          /    杖。
+
+          =    指輪。
+
+          !    水薬。
+
+          (    便利なアイテム(つるはし、鍵、ランプ…)。
+
+          "
+
+          *     宝石または岩(貴重なものかもしれないし、価値のないものかもし
+               れない)。
+
+          `    岩、または彫像。
+
+          0    鉄球。
+
+          _    祭壇、または鉄の鎖。
+
+          {    泉
+
+          }    水たまり、または堀、または溶岩の海。
+
+          \    豪華な王座
+
+          a-zA-Z およびその他のシンボル
+               これらの文字とその他のいくつかのシンボルは恐怖の迷宮のいろい
+               ろな住人たちを表す。彼らは不機嫌で悪意に満ちているかも知れな
+               いので警戒しなければならない。が、ときには何かの手助けになる
+               こともある。
+
+          I    このマークは透明、あるいはその他の見えない怪物が最後にいたら
+               しい場所に表示される。怪物はすでに移動しているかもしれないこ
+               とに注意すること。ここでは'F'と'm'のコマンドが便利だろう。
+
+               これらのシンボルをすべて記憶する必要はない。`/' コマンドでど
+          のシンボルが何を表すか知ることができる(詳細は次の項を 参 照 の こ
+          と)。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                               9
+
+
+
+          4.  コマンド
+
+               コマンドは 1 文字か 2 文字のキー入力を行うことで実行される。
+          いくつかのコマンド、例えば``search''はそれ以上 SLASH'EM に情報を与
+          え る必要がない。他のコマンドは例えば方向や使用する物などの情報を
+          さらに与える必要がある。これらさらなる情報を必要とするコマンド に
+          対しては、 SLASH'EM は選択メニューもしくはコマンドラインプロンプト
+          のいずれかを表示する。どちらが表示されるかは主として menustyle オ
+          プションをどのように設定したかによる。
+
+               例えば ``What do you want to use? [a-zA-Z ?*]'' という形式の
+          質問がよくあるが、これはあなたに持っている物のうちどれを選ぶか を
+          尋 ねるものである。この質問において「a-zA-Z」はあなたが選べる持物
+          の目録記号である。 `?' を入力するとこれらの物の目録一覧が得られ、
+          個 々 の記号が何を表しているのか知ることができる。この例では、`*'
+          もある。これは一覧には表示されておらず、通常そのコマンドでの使 用
+          を 想定していない物でも、使おうと思えばそれを選ぶことができること
+          を示している。`*' を入力するとすべての持物の目録が表示され、個 々
+          の 持物すべてについての目録記号を知ることができる。考え直して結局
+          このコマンドを使わないことにしたときには ESC キーを押せばコマンド
+          を終了することができる。
+
+          Some commands  allow you to choose an object that  you are not
+          currently carrying. Such commands have an extra option available
+          as in ``What do you want to drink?\ [fgh or ?*,.]''.  Typing `,'
+          gives you a list of the applicable objects on the floor,  from 
+          which you may make your choice.   For commands  where it is
+          possible to choose your current location rather than an object,
+          the `.' option will be displayed. This can be used to read an
+          engraving or drink from a dungeon feature.
+
+               コマンドの中には、その前に数字を入力することで何回も繰り返す
+          ことができるものもある。例えば「10s」は 10 回の探索を表している。
+          もし number_pad オプションがオンのときには数字の前に `n' を入力し
+          なければならない。つまり上の例では代わりに「n 10s」と入力しなけれ
+          ば ならない。複数回実行することが無意味なコマンドではこれは無視さ
+          れる。さらに、移動コマンドの前に特定の文字(プレフィックス)を付 け
+          る ことによってさまざまな移動方法をとることができる(後述)。繰り返
+          し回数やプレフィックスを取り消すためには ESC キーを押せばよい。
+
+               コマンドの一覧はかなり長いが、ゲーム中に `?' コマンドを使 用
+          し てヘルプメニューを見ることにより、いつでもコマンドの一覧を見る
+          ことができる。 また、キーを捜して押すよりもメニューを使うほうがい
+          いという人のために '~' コマンドによる新しいメニューシステムもある。
+          以下はコマンドの一覧である。
+
+          ESC  現在の処理を適当な場所でキャンセルしたりメッセージをスキップ
+               したりする。もし menu_on_esc オプションが有効ならば、 ゲーム
+               がコマンド入力待ち状態のときにこのキーを押すことでメニューシ
+               ステムを使用することができる。
+
+          ?    ヘルプメニュー: 表示可能なヘルプ画面のうちの 1 つを 表 示 す
+               る。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              10
+
+
+
+          ~    メインメニュー：メニューシステムを使用する。
+
+          /    シンボルが何を意味するかを示す。指定するには場所を示すか、ま
+               たはシンボル(あるいは単語全体)を入力するかを選択することがで
+               きる。
+
+
+               場 所 の 指 定 は、 適 切 な 位 置までカーソルを移動させてか
+          ら`.'、`,'、`;'、`:'のどれかを押すことによって行なう。 `.'を押 す
+          と、選んだ場所で表示されているシンボルの説明が表示され、もし help
+          オプションがオンなら場合によっては``More info?''(詳細を見る?)と質
+          問 され、それからさらに他の場所を指定することができる。 `,'を押す
+          と、シンボルの説明が表示されるが、詳細情報は表示されない。 `;' を
+          押 す と、 詳細情報は表示されず、さらに他の場所の指定もできない。
+          `:'を押すと、(もしあるなら)確認なしで詳細情報が表示される。場所を
+          選ぶ時に ESC キーを押すことによってこのコマンドを中断でき、 `?'を
+          押すとどのように動作するかの簡単な説明が表示される。場所でなく 名
+          前を指定した場合は、常にその名前に対する追加情報が表示される。
+
+          &    コマンドの動作を示す。
+
+          <    上の階へ行く(階段やはしごにいるとき)。
+
+          >    下の階へ行く(階段やはしごにいるとき)。
+
+          [yuhjklbn]
+               指 定した方向へ一歩進む(図 2 参照)。その方向に怪物がいると感
+               じているか覚えているときは、移動するのではなく怪物と戦うこと
+               になる。怪物と戦うことになるのはこの一歩移動のコマンドだけで
+               ある。その他のコマンド(後述)は「安全」である。
+
+                                   y  k  u            7  8  9
+                                    \ | /              \ | /
+                                   h- . -l            4- . -6
+                                    / | \              / | \
+                                   b  j  n            1  2  3
+                                             (number_pad がオンのとき)
+
+                                         Figure 2
+
+
+          [YUHJKLBN]
+               壁に突き当たるか何かに衝突するまで指定した方向に進む。
+
+          m[yuhjklbn]
+               プレフィックス: 物を拾ったり、 (たとえそこに怪物がいると思っ
+               ていても)戦ったりせずに移動する。
+
+          F[yuhjklbn]
+               プレフィックス: (そこに怪物がいると予想しているだけでも)怪物
+               と戦う
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              11
+
+
+
+          M[yuhjklbn]
+               プレフィックス: 物を拾わずに遠くへ移動する。
+
+          g[yuhjklbn]
+               プレフィックス: 何かが見つかるまで移動する。
+
+          G[yuhjklbn] or <CONTROL->[yuhjklbn]
+               プレフィックス: 'g' と同じ。ただし通路の分岐点では止ま ら な
+               い。
+
+          _    指定された位置まで、最短距離アルゴリズムを用いて移動する。最
+               短距離は、あなたが知っている(見た、または以前に通った)地図配
+               置を基に計算される。知っている道がない場合、代わりに推測が行
+               われる。 `G'コマンドとほぼ同じ条件で停止するが、 `M'コマンド
+               と同様に物を拾わないで移動する。
+
+          .    休憩する。1 ターン何もしない。
+
+          a    道具(つるはし、鍵、ランプ…)を用いる(使う)。
+
+          A    1   つまたは複数の身につけているもの(防具など)をはずす。防具
+               を1 つだけはずすときには 'T'(take off: 防具をはずす)を、アク
+               セ サ リを 1 つだけはずすときは 'R'(remove: アクセサリをはず
+               す)を使用せよ。
+
+          ^A   1 つ前のコマンドを繰り返す。
+
+          ^B   隣接した怪物からお金を盗む。
+
+          c    扉を閉じる。
+
+          C    個々の怪物に名前を付ける。
+
+          ^C   パニックボタン。ゲームを放棄する。
+
+          d    何かを下に置く。例:「d7a」は a という物を 7 個下に置くことを
+               意味する。
+
+          D     い くつかの物を下に置く。``What kinds of things do you want
+               to drop?[!%= BUCXaium]'' (どの種類のものを置きますか?)  の質
+               問に対して、0 個以上の物のシンボルを入力することで答える。さ
+               らに`a', `i', `m', `u' をその後に入力することもできる。加 え
+               て、 祝福された(B)/呪われていない(U)/呪われた(C)アイテムを指
+               定することもできる。
+
+                    DB  - 祝福されていると判明している物全てを下に置く。
+                    DU  - 呪われていないと判明している物全てを下に置く。
+                    DC  - 呪われていると判明している物全てを下に置く。
+                    DX  - 祝福/呪いが判明していない物全てを下に置く。
+                    Da - 確認なしにすべての物を下に置く。
+                    Di - 物を置く前に持ち物を確認する。
+                    Du - (店にいるとき)代金未払の物だけを下に置く。
+                    Dm - 置く物を選ぶのにメニューを用いる。
+                    D%u - 代金未払の食料だけを下に置く。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              12
+
+
+
+          ^D   何か(普通は扉)を蹴る。
+
+          e    食料を食べる。吸血鬼は食べることはできないが、このコマンドを
+               使用することで新鮮な死体から体液を吸うことで食欲を満たせる。
+
+          E    床にメッセージを刻み込む。``Elbereth'' という語を刻 み 込 む
+               と、たいていの怪物はあなたに白兵戦を挑んで来なくなる (しかし
+               あなたが攻撃をすると文字は消えてしまう)。これは、一息いれ た
+               いときになかなか便利である。 (この機能はコンパイル時に削除さ
+               れているかも知れないので、あなたのバージョンで必ずしも機能す
+               るとは限らない。)
+
+                    E- - ほこりの中に指で書く。
+
+          f     矢筒に入れてあるものを発射する。発射するものは予め`Q'コマン
+               ドで選択することも出来るし、 autoquiver オプションが設定され
+               ている場合は、コンピューターに自動的に適当なものを設定させる
+               こともできる。
+
+          i    持物の目録(持っている物すべて)を表示する。
+
+          I    持物の目録のうち指定した一部を表示する。
+
+                    I* - 持物のうち宝石をすべて表示する。
+                    Iu - 代金未払いの物をすべて表示する。
+                    Ix - 代金未払いだが使ってしまった物をすべて表示する。
+                    I$ - お金を数える。
+
+          o    扉を開ける。
+
+          O    オプションを設定する。現在のオプションの値の一覧が表示 さ れ
+               る。  (見出し文字をタイプするかクリックすることによって)変更
+               したいオプションを選んで、ほとんどの値を変更することが で き
+               る。 ブー ル値でないオプションの場合は、さらにメニューが出る
+               か、プロンプトが出る。設定可能なオプションはこのガイドブック
+               の 後ほどに一覧がある。オプションは通常は `O' コマンドではな
+               く、ゲームを始める前に設定する。後述のオプションの項を参照の
+               こと。
+
+          p    代金を払う、もしくはサービスを受ける。
+
+          P    指輪、あるいはその他の装飾品（魔除け、目隠し）を身につける。
+
+          ^P   1 つ前のメッセージをもう一度表示する。続けて ^P を入力すると
+               さ ら に 前 の メッ セー ジ が順に表示される。この振る舞いは
+               msg_windows オプションによって変化する。
+
+          q    何か(水薬，水など)を飲む。
+
+          Q    矢筒に入れるものを選択する。ここで選択したものは`f'コマン ド
+               で 発射することができる。 (SLASH'EMのバージョン 0.0.6 以前で
+               はこのコマンドはゲームを放棄するものだったが、 その機能は
+               `#quit'に移動 した)
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              13
+
+
+
+          r    巻物や魔法書を読む。
+
+          R    装飾品（指輪、魔除けなど）をはずす。
+
+          ^R   画面を描き直す。
+
+          s    周囲の隠し扉や罠を探す。何かを見つけるには普通何回も探す必要
+               がある。
+
+          S    ゲームをセーブして、中断する。ゲームは次回プレイ時に自動的に
+               復旧される。
+
+          t    物を投げる。または矢などを発射する。
+
+          T    防具をはずす。
+
+          ^T   テレポート能力があればテレポートする。
+
+          v    バージョン番号を表示する。
+
+          V    このゲームの履歴を表示する。
+
+          w    武器を持つ。
+
+                    w- - 武器として何も持たず素手になる。
+
+          W
+
+          x    装備している武器を予備の武器と交換する。予備の武器は二刀流攻
+               撃で用いられる。予備の武器がなくても交換は実行される(今 持っ
+               ているものを予備にして、素手になる)ことに注意。
+
+          X    後述する探検(発見)モードに入る。
+
+          ^X   あなたの名前、職業、種族、性別、属性および、今回のゲームにお
+               けるさまざまな神の名前を表示する。
+
+          ^Y   もし変身能力を持っているならば自分自身を変化させる。
+
+          z    杖を振る。自分に振る場合は、方向に`.'を使う。
+
+          Z    呪文を唱える。自分に呪文を唱えたいときは、方向として`.'を 使
+               う。
+
+          ^Z    ゲー ム を一時中止する(ジョブコントロール機能のある UNIX(R)
+               バージョンのみ)。
+
+          :    足元に何があるか見る。
+
+          ;    見えているシンボルが何を示すかを表示する。
+
+
+          __________
+          (R)UNIX is a registered trademark of AT&T.
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              14
+
+
+
+          ,    何かを拾う。`m'の後に押すことによって、設定に関わらず選択 メ
+               ニューを表示する。
+
+          @    autopickup オプションのオン・オフを切り替える。
+
+          ^    今までに発見した罠の種類を調べる。
+
+          )    持っている武器を表示する。
+
+          [    付けている防具を表示する。
+
+          =    はめている指輪を表示する。
+
+          "    付けている魔除けを表示する。
+
+          (    使っている道具を表示する。
+
+          *     装備しているものを表示する。上の 5 つのコマンドを一つにした
+               もの。
+
+          $    持っている金塊を数える。
+
+          +    知っている呪文の一覧を表示する。このコマンドによって、呪文の
+               表示される順番を変えることもできる。呪文をメニュー形式で表示
+               させ、まず一つ目の呪文を選択し、さらに入れ替えたい呪文を選択
+               することによって順番が入れ替わる。さらに入れ替えたい場合はこ
+               の操作を繰り返す。
+
+          \    今までにどんな種類の物を見つけたかを表示する。
+
+          !    シェルに抜ける。
+
+          #    拡張コマンドを実行する。以上から分かるように SLASH'EM の作 者
+               たちはすべての文字を使い果たしてしまったので、あまり頻繁に使
+               われないコマンドはこのようにして導入された。どの拡張コマンド
+               が使用可能かは、ゲームのコンパイル時にどの機能が有効にされた
+               かによる。
+
+          #adjust
+               持物の目録記号を変更する( fixinv オプションが「オン」の時 に
+               非常に便利である)。
+
+          #borrow
+               盗む能力を持っているときに怪物からお金を盗む。
+
+          #chat
+               誰かと話をする。
+
+          #conduct
+               どの挑戦がまだ守られているかを表示する。詳しくは後述する「制
+               限プレイ」の章を参照すること。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              15
+
+
+
+          #dip 物を何かに浸す。
+
+          #enhance
+               武器の技量を高めたり、調べたりする。
+
+          #force
+               錠をこじ開ける。
+
+          #invoke
+               物が持つ特別な能力を発動する。
+
+          #jump
+               別の場所へジャンプする。
+
+          #loot
+               あなたのそばにある床に置いてある箱や鞄、またはあなたの 隣 に
+               立っている馬の鞍の中身を調べる。
+
+          #monster
+               (怪物の姿に変化している時に)怪物の特殊能力を使う。
+
+          #name
+               物や物の種類に名前を付ける。
+
+          #offer
+               神にいけにえを捧げる。
+
+          #pray
+               神に祈って助けを求める。
+
+          #quit
+               ゲームをセーブせずにプログラムを終了する。
+
+          #ride
+               怪物に乗る(あるいは乗るのをやめる)。
+
+          #rub ランプや石をこする。
+
+          #sit 座る。
+
+          #technique
+               職業や種族に備わった特殊技能を使用する。 使用可能な技能のメ
+               ニューが表示される。
+
+          #turn
+               不死の怪物を追い払う。
+
+          #twoweapon
+               二刀流戦闘のオン・オフを切り替える。二刀流に適切な武器を使う
+               こと。さもなければ自動的にオフになる。
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              16
+
+
+
+
+          #untrap
+               何か(罠、扉、宝箱)の罠をはずす。
+
+          #vanquished
+               倒されたモンスター一覧を表示する。（あなたが倒したかどうかに
+               かかわらず）
+
+          #youpoly
+               変身能力を持っている場合に限り自らを変化させる。
+
+          #version
+               このバージョンの SLASH'EM をコンパイルしたときのオプション を
+               表示する。
+
+          #wipe
+               顔を拭う。
+
+          #?   ヘルプメニュー: 利用可能な拡張コマンドの一覧を表示する。
+
+               もしあなたのキーボードにメタキー (別のキーと一緒に押すことに
+          よってそのキーの`メタ'[第 8、または`上位']ビットをセットする)があ
+          れ ば、コマンドの頭文字をメタキーと一緒に押すことによって多くの拡
+          張コマンドを起動することができる。 NT, OS/2,  PC  SLASH'EM   で は
+          'Alt' キーがこの目的に使われる.
+
+          M-?  #? (対応していないプラットホームもある)
+
+          M-2  #twoweapon (number_pad がオフの場合)
+
+          M-a  #adjust
+
+          M-b  #borrow
+
+          M-c  #chat
+
+          M-d  #dip
+
+          M-e  #enhance
+
+          M-f  #force
+
+          M-i  #invoke
+
+          M-j  #jump
+
+          M-l  #loot
+
+          M-m  #monster
+
+          M-n  #name
+
+          M-o  #offer
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              17
+
+
+
+          M-p  #pray
+
+          M-q  #quit
+
+          M-r  #rub
+
+          M-s  #sit
+
+          M-t  #technique
+
+          M-u  #untrap
+
+          M-v  #version
+
+          M-w  #wipe
+
+          M-y  #youpoly
+
+               number_pad  オプションがオンのときは、これらに加えいくつかの
+          文字コマンドが有効になる。
+
+          h    ヘルプメニュー: ``?'' と同様にヘルプメニューを表示する。
+
+          j    別の場所へジャンプする。「#jump」や「M-j」と同じ。
+
+          k    何か(通常は扉)を蹴る。'^D' と同じ。
+
+          K    倒されたモンスター一覧を表示する。（あなたが倒したかどうかに
+               かかわらず）``#vanquished''と同じ。
+
+          l    あなたのそばにある床に置いてある箱や鞄、またはあなたの 隣 に
+               立っている馬の鞍の中身を調べる。「#loot」や「M-l」と同じ。
+
+          N    物や物の種類に名前を付ける。「#name」や「M-n」と同じ。
+
+          u     罠、 扉、 宝 箱 などの仕掛けられた罠をはずす。「#untrap」や
+               「M-u」と同じ。
+
+          5.  部屋と通路
+
+               洞窟内の部屋や通路は明りがついていることもあるし、ついていな
+          い こともある。明りのついている部分で自分の視野に入る部分は画面に
+          表示される。暗いところでは周囲 1 つ分の空間だけが見える。壁や通路
+          は画面に表示されたままになる。
+
+               隠 し通路は表示されない。これらは `s'(search: 探す) コマンド
+          で発見することができる。
+
+          5.1.  出入口
+
+               出入口は部屋と通路を接続するものである。出入口の中には扉のな
+          い ものがある。このときにはそのまま通り抜けることができる。その他
+          の出入口には扉があるが、その扉は開いているか、閉じているか、錠 が
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              18
+
+
+
+          か かっ て い る か の い ず れかである。閉じている扉を開けるには
+          `o'(open: 扉を開ける) コマンドを用いる。再び 扉 を 閉 じ る に は
+          `c'(close: 扉を閉じる) コマンドを用いる。
+
+               扉に錠がかかっているときは `a'(apply: 道具を用いる) コマンド
+          で錠をはずす道具を使うか、`^D'(kick: 蹴る) コマンドで扉を蹴破るこ
+          とで通ることができる。
+
+               開いた扉に斜めから入ることはできない。水平あるいは垂直方向か
+          ら真っ直ぐに近付かなければならない。扉のない出入口にはこのよう な
+          制限はない。
+
+               扉は怪物を締め出すのに役に立つ。たいていの怪物は扉を開けるこ
+          とができない。けれどもいくつかの怪物にとっては扉を開ける必要な ど
+          ない(例: 亡霊は扉を通り抜けることができる)。
+
+               隠 し扉は表示されない。これらは `s'(search: 探す) コマンドで
+          発見することができる。一度発見すると普通の扉と同様になる。
+
+          5.2.  罠 (`^')
+
+               そそっかしい冒険者を陥れようとする罠が洞窟のあちこちにある。
+          例 えば落し穴に落ちると上り出るのに数ターンの間その場から動けなく
+          なるであろう。そこに誰かが足を踏み入れて引っかかるか、`s'(search:
+          探 す) コマンドで見つけるかして初めて罠は表示される。怪物も罠の餌
+          食になることがある。これは非常に有効な防御戦術である。古典的コ ン
+          ピュー タゲームである「倉庫番」を基にした特別なダンジョンへの分か
+          れ道も存在する。このダンジョンでの目的は大岩を落し穴に入れるこ と
+          で ある。慎重に先読みすれば、全ての階は倉庫番の伝統のルールでクリ
+          アできる。行き詰まってしまった冒険者のためにいくつかの助け舟が 用
+          意されているが、これらは運を低下させてしまう。
+
+          5.3.  階段 (`<', `>')
+
+               一 般的に洞窟の各階には、前の階への上り階段('<')と、次の階へ
+          の下り階段('>')がひとつずつある。しかし、例外もある。例えば、洞窟
+          の 比較的浅い階であなたは二つの下り階段がある階を発見するだろう。
+          ひとつは洞窟の続きであり、もうひとつはノームの坑道として知られ る
+          地 帯に続いている。この坑道は最後には行き止まりになっていて、ここ
+          を探検した(あなたがそうすることを選択した場合)後、元の洞窟にま で
+          戻って来る必要がある。
+
+               階段を使うか、あるいは他の階に移動する罠に引っ掛かった場合、
+          いままでいた階は非活性化されて、ディスク上のファイルに貯 え ら れ
+          る。 昔訪れた階に再び訪れた場合、ディスク上のファイルが読み込まれ
+          て再活性化される。初めて訪れる階に移動した場合、その階は(ほとんど
+          の 階は一から、「特別な」階はテンプレートから、「骨の」階(後述)の
+          場合はファイルから読み込んで) 新たに作成される。怪物は現在の階 に
+          いるものだけが行動する。他の階にいるものは止まっている。
+
+               普通、あなたが階段を使うと、あなたは目的地で対応する階段の上
+          に現れる。しかし、ペット(後述)といくつかの怪物はあなたが階段を 上
+          り 降りした時についてきて、時々それらの一体があなたと入れ替わるこ
+          とがある。こうなった場合、ペットやその他の怪物が階段の上に現 れ、
+          あなたはそのそばに現れる。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              19
+
+
+
+          5.4.  はしご (`<', `>')
+
+               はしごは階段と同じ役目であり、階を繋ぐこの二つの種類はゲーム
+          中ほとんど区別ができない。
+
+          5.5.  店と買い物
+
+               時々ドアのそばに店主がいて、床にたくさんの物が置いてある部屋
+          に行き当たることがある．物を拾って、`p'コマンドを使うことで物を買
+          うことができる．物を拾う前に、物の上に立って``#chat''コマンドを使
+          う ことで値段を確認できる．支払いをする前に物を使うと借金になり、
+          店主は債務を支払うまでは店の外に出してくれなくなる．
+
+               店の中にいるときに物を落すことで物を店主に売ることができる．
+          売 却価格を提示され、売るかどうかを確認されるか、単に店主が興味が
+          ないことを知らされる(一般的に、店で売っている物と同じ種類の物が買
+          い取り対象である)。
+
+               偶然で物を店の中に落してしまうと、店主は普通代償なしに所有権
+          を主張する．物を取り戻すためには買い戻す必要がある．
+
+               店主は資金不足になることがある。こうなった場合、何かを売ろう
+          と すると現金の代わりに信用貸しを提案される。信用貸しは物を買うと
+          きに使えるが、同じ店でだけ有効である。他の店主は引き受けない。  (
+          迷 宮で「クレジットカード」を手に入れることがあるが、これを店で使
+          おうとしてはいけない。店主は受け入れない。)
+
+               `$'コマンドを使うと、今持ち運んでいる金貨の数(かばんや 箱 に
+          入っているものは除く)とともに、負債や信用貸しがあれば表示される。
+          `Iu'コマンドは未払いの物(まだ店が所有する物)の一覧(あれば)を表 示
+          する。 `Ix'コマンドは使ってしまった物の代金の一覧(あれば)が表示さ
+          れる。
+
+          5.5.1.  店の特殊な性質
+
+               店のいくつかの性質は意外なものかもしれない。
+
+          * アイテムの値段は色々な要素によって様々に変化する。
+
+          * 店主はドアの一つ内側の場所は店の外として扱う。
+
+          * 店主はあなたを鷹のように注意深く見張っているが、一般的にその 他
+            の消費者については無視する。
+
+          *  店が"closed for inventory"(「棚卸のため閉店」)の場合、待ってい
+            ても開店はしない。
+
+          * 店は例え品物が枯渇しても新しいアイテムが入荷することはない。
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              20
+
+
+
+          6.  怪物
+
+               画面上にはあなたから見える怪物しか表示されないが、ひょっとす
+          る と闇の中で怪物とばったり出くわすことになるかもしれないので注意
+          が必要である。魔法のアイテムの中には、怪物があなたを発見するよ り
+          も前にあなたが怪物を発見するのに役立つ物もある(しかしこの能力に大
+          変優れている怪物もいる。)
+
+               `/' コマンドと `;' コマンドが画面上に表示されている怪物に 関
+          する情報を得るのに用いられる。 `C' コマンドは怪物に名前をつけるの
+          に用いられ、複数の怪物がいる時に、ある怪物を他のものと見分けた い
+          と きに便利である。名前としてスペースを指定すると、以前につけた名
+          前を消すことになる。
+
+               拡張コマンド「#chat」によって、隣接する怪物と交流できる。 実
+          際の台詞は選択できない(言い換えると、あなたが何をしゃべるかは選べ
+          ない)が、店主や Oracle of Delphi(デルファイの神殿)といった相手 と
+          話をすることは、有益な結果をもたらす。
+
+
+          6.1.  戦闘
+
+               発見した怪物と戦いたいときには、単にその怪物に向かって移動す
+          るようにすればよい。多くの怪物はあなたが戦いを挑まない限り、他 の
+          こ とを気にすることはない。腹を立てると大変危険な怪物もいる。「三
+          十六計逃げるにしかず」ということわざを忘れずに。
+
+               怪物が見えない(怪物が透明、またはあなたが目が見えない)場合、
+          怪物がいるとあなたが思った位置に`I'の文字が表示される。その区画に
+          歩こうとすると、見えている時と同じようにあなたは怪物に攻撃しよ う
+          と する。もちろん、もし怪物が移動してしまっていたら、あなたの攻撃
+          は空を切ることになる。もし怪物がすでに移動してしまってい る と 考
+          え、 戦いたくない場合は、 `m'コマンドを使うことで戦うことなく移動
+          できる。逆に、そこに怪物がいるかどうかわからないけれどもとにか く
+          戦って見たい場合は、 `F'コマンドが使える。
+
+          6.2.  ペット
+
+               あなたは仔犬(`d')、 子猫(`f')、 ヘルハウンドの仔('d')、冬狼
+          の仔('d')、 グール('z')、 ポニー(`u') のいずれかとともにゲームを
+          始める。 あなたのペットはあなたとともに洞窟をさまよい、 怪物と戦
+          う。 ペットは あなたと 同様に生きのびるための 食料を必要とする。
+          ペットは新鮮な死肉や その他の肉をえさにしている。 もしもペットの
+          ことが気がかりであったり、 ペットを飼い慣らしておきたいと思うな
+          ら、あなたが直接えさを与えることもできる。そのためには食料を ペッ
+          ト に向かって投げてやればよい。きちんと訓練されたペットはある種の
+          状況のもとで極めて利用価値が高い。
+
+               ペットも怪物を倒していくにつれて経験を積んでいく。また時間と
+          と もに成長もし、体力や相手に与えるダメージも増加する。初めのうち
+          はあなたよりもペットの方が強いだろうから、レベルの低いキャラク タ
+          にとっては役に立つだろう。
+
+               あなたが他の階へ移動するとき、隣にペットを連れていればペット
+          もあなたについて移動する。置き去りにすると野生化してしまうかも し
+          れ ない。同様に、もしあなたが自分の位置が変わるような罠にかかった
+          場合 (例えば、トラップドアで下の階に落ちた場合)、隣にいたペットは
+          つ いていき、隣にいなかったペットは取り残される。ペットが自分でそ
+          のような罠にかかることもある。あなたはたとえその時にペットの隣 に
+          いても一緒に移動することはない。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              21
+
+
+
+          6.3.  軍馬
+
+               ダ ン ジョンにいるある種の生物は、あなたが正しい装備と能力を
+          持っていれば、乗ることができる。野生の生物にあなたが乗ることを 納
+          得 させるのは困難である。多くの洞窟の主は協力関係をでっち上げるの
+          に魔法の力に頼らなければならない。しかし、一旦動物をあなたの支 配
+          下 に置いたなら、 `#ride'コマンドで乗り降りすることができる。動物
+          に乗って洞窟を移動する方法は、自分自身が移動するのと同じであ る。
+          地図に表示されるのはあなたが乗っている動物である。
+
+               乗馬技術は`#enhance'コマンドで管理することができる。詳しくは
+          後述する武器の技術の章を参照すること。
+
+          6.4.  骸骨の階
+
+               冒険者の幽霊とその死体(あるいはそれは生まれ変わる前のあな た
+          自身であることさえある)や、その所持品に出くわすかもしれない。幽霊
+          を殺すことは難しいが、動きがのろくほとんどダメージを受けないの で
+          簡 単に逃げることができる。あなたは死んだ冒険者の所持品を奪うこと
+          もできる。しかしそれらは呪われていることが多い。以前の冒険者を 死
+          に 到らしめたものにはすべて注意を払わねばならない。それはあたりを
+          徘徊し、その直前の勝利に酔いしれているからだ。
+
+
+          7.  物
+
+               洞窟の中で何かを見つけた場合、それを拾いたいと思うのはよくあ
+          ることである。 SLASH'EM ではその物の上を通ることによって自動的に拾
+          うことができ( autopickup オプション(後述)がオフになっているときや
+          `m'   プ レ フィックス (前述)を用いて移動するときはこの限りではな
+          い)、または `,' コマンドを使って手動で拾うことができる。
+
+               持物が多すぎるときには、SLASH'EM はあなたにそのように告げ、そ
+          れ以上拾うことはできなくなる。そうでなければ SLASH'EM はその物をあ
+          なたの荷物に加え、何を拾ったかが表示される。
+
+               持ち物が増えるに連れて、荷物の重さが重くなる。どれだけの重さ
+          の 物を運べるかは筋力と耐久力による。力が強いほど、荷物の重さの影
+          響は小さくなる。しかしそれでも、洞窟の中を持ち歩いている荷物の 重
+          さ があなたに負担になるときがくる。反応は鈍くなり、カロリー消費が
+          早くなってより多くの食料が必要となる。そして最終的には荷物が重 す
+          ぎて何かを捨てないと動けなくなってしまう。
+
+               SLASH'EM では荷物の重さがどれくらい悪影響を与えるかを教えてく
+          れる。最下行に表 示 さ れ る`Burdened',  `Stressed',  `Strained',
+          `Overtaxed',`Overloaded' の表示があなたの状態を示している。
+
+               物を拾ったとき、その物には目録記号が割り当てられる。物に関す
+          る多くのコマンドはあなたがどの物を使いたいのかを尋ねてくる。持 物
+          のうち特定の物を選ぶように SLASH'EM が尋ねてきたときは、普通目録記
+          号の一覧が表示されてその中から選ぶ(前述のコマンドの項を参照 の こ
+          と)。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              22
+
+
+
+               いくつかの物、例えば武器類のような物は、どんなものか簡単に区
+          別が付けられる。この他の物、例えば巻物や水薬はその種類に応じて い
+          ろいろな名前が付けられている。 1 回のゲームの間は同じ名前を持った
+          物は同じ種類の物である。しかし物に付けられる名前はゲームごとに 違
+          うものになる。
+
+               このような物を使った時、もしその効果が明らかな場合は SLASH'EM
+          がそれが何であるかを憶えていてくれる。その効果があまり明らかで な
+          い 場合はその物の種類を何と名付けるか尋ねてくる。このため後になっ
+          てそれを思い出すことができる。またいつでも``#name''コマンドを使っ
+          て 同様のことができ、ある種類の物すべてに名前を付けたり個々の物に
+          名前を付けたりできる。すでに名前をつけているものに``#name''を使う
+          場 合、新しい名前としてスペースを指定することによって、以前つけて
+          いた名前を消すことができる。
+
+          7.1.  呪いと祝福
+
+               あなたが発見したいろいろな物は、たとえそれが役に立つも の で
+          あっ たとしても呪いがかけられているかも知れない。呪いがかけられて
+          いる物を使うとそれが張り付いてしまうことは最もよく見られる結果 で
+          あ る。呪いがかけられている武器を持つとそれは手に張り付いてしまっ
+          て取れなくなる。呪いがかけられている物を身につけると普通の方法 で
+          は はずすことができない。さらに、呪いがかけられている武器や防具に
+          は必ずと言うわけではないがたいていの場合負の魔力が与えら れ て い
+          て、 そうでない物よりも戦闘時の効力が劣る。その他の呪いがかけられ
+          ている物は、あまり役に立たなかったりまたはその他の点で害を及ぼ し
+          たりするだろう。
+
+               また祝福されている物もある。祝福されている物は呪いがかけられ
+          ていない普通の物に比べて具合良く働き役に立つ。例えば祝福された 武
+          器は悪魔たちに一層のダメージを与えることができるだろう。
+
+               魔 法 を使うと物に呪いをかけたり呪いを解いたりすることができ
+          る。このためたとえ物が張り付いてしまっても、呪いを解いてはずす こ
+          と ができる。僧侶は生来呪いや祝福に敏感なので、他の職業の冒険者よ
+          りも容易に呪われているものを避けることができる。
+
+               あなたの持物の目録の中で呪いがかけられているかどうか分からな
+          い 物は目録のなかで特に何の説明もない。どんな状態にあるか知ってい
+          る物は目録一覧で「cursed(呪われた)」「uncursed(呪われていな い)」
+          「blessed(祝福された)」などの言葉が物の説明に与えられる。
+
+          7.2.  武器 (`)')
+
+               恐怖の迷宮に住むほとんどすべての怪物は、チャンスと見れば見境
+          なくあなたを殺そうとするだろう。自分の身を守る(先に怪物を殺してし
+          まう)ためにあなたは武器を必要とする。武器なしではポイントにして 1
+          〜 2 のダメージ (いくらかの加算があるかも知れないが)を与えるこ と
+          し かできない。但し、モンクは例外である。モンクは武器を使って攻撃
+          するよりも素手で攻撃した方が遥かに大きなダメージを与えることが で
+          きる。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              23
+
+
+
+               武器には鎚矛や剣のような振り回すためのものと、矢や槍のような
+          投げつけるためのものがある。武器で怪物に打撃を与えるためには、 武
+          器 を手にもって怪物を攻撃するか武器を怪物に投げなければならない。
+          投げるには、単純に槍を投げるように選択するだけでよい。
+          An alternative method would be wield a bow and place the arrows
+          in your Quiver, after which you fire the ammunition.  Rangers and
+          the like may find that having a bow as their secondary weapon is
+          a useful combination. In order to use a secondary weapon to fire
+          ammunition however, it must first be moved to the primary weapon
+          slot. The ``x'' command is available for this use.
+
+               弓から矢を発射するには、 まず弓を手に持ってから 矢を投げれば
+          よい。 クロスボウは crossbow bolt(クロスボウ用の太矢)を発射するた
+          めのものである。投石器は岩や(宝石のような)その他の石を投げつける
+          ために用いる。
+
+               魔 力のある武器には「追加能力」(攻撃能力と言うことで正と負の
+          両方を取り得る)が付けられており、攻撃が怪物に当たる可能性と与える
+          ダ メージに追加される。武器の魔力を測定するには、なんらかの方法で
+          魔法を使って鑑定するしかない。多くの武器は錆のようなある 種 の ダ
+          メージを受けやすい。このような「腐食」ダメージは修復可能である。
+
+               攻 撃 がうまく怪物に命中するかと、命中した時にどれくらいのダ
+          メージを与えるかは、多くの要素によって決定される。それらには以 下
+          の ものがある: 武器の種類、武器の品質(魔力や腐食)、経験レベル、筋
+          力、敏捷性、荷物の重さ、技量(後述)。怪物の防御値(一般的な防御率。
+          防具を着ることによるとは限らない)も要素の一つである。また、ある種
+          の武器に対して特に耐性を持つ怪物もいる。
+
+               多くの武器は片手持ちであるが、両手が必要な武器もある。両手持
+          ち の武器と盾を同時に持つことはできない。片手持ちの武器を持ってい
+          る場合、もうひとつの武器を予備として準備しておいて、 `x'コマン ド
+          で 今使っている武器と交換することができる。さらに「二刀流戦闘」技
+          能の技量がある場合、二つの武器を同時 に 使 う こ と が で き る。
+          `#twoweapon' 拡張コマンドで二刀流戦闘をするかどうかを切り替えられ
+          る。一部のキャラクター(例えば野蛮人)だけがこの技能を持ってい る。
+          た とえこの技能を持っていても、一度に二つの武器を使うとひとつしか
+          使わない時に比べて敵に命中する確率にペナルティを受ける。
+
+               全く何の武器も装備したくない時もあるかもしれない。そうするた
+          め には、装備するものを選ぶ時に`-'を選ぶか、あるいは`A'コマンドで
+          その他の身につけているものを外すのと同時に現在使っている武器を 外
+          すことができる。
+
+               AD&D をプレイしたことのある読者はお気付きだろうが、AD&D に登
+          場した武器は SLASH'EM においても怪物にだいたい同じダメージを 与 え
+          る。あまり良く知られていない武器( aklys(アキリス), lucern hammer(
+          ルッツェンハンマー), bec-de-corbin(ベッグ・デ・コルビン) など) の
+          い くつかは AD&D の追加ルールである Unearthed Arcana の付録で詳し
+          く説明されている。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              24
+
+
+
+               武器を使うコマンドは `w'(wield: 武器を持つ)、 `t'(throw:  投
+          げ る)、  `f' (fire: 武器を発射するもうひとつの方法), `Q'(quiver:
+          矢筒)、 `x' (exchange: 武器を交換する)、`#twoweapon'、`#enhance'(
+          後述) である。
+
+          7.2.1.  ものを投げることと発射すること
+
+               `t' コマンドを使うことによって、どんな物でも投げることができ
+          る。このコマンドを指定すると、投げる物を尋ねてくる。 `?' を 押 す
+          と、 持ち物の中で投げるのに向いていそうな物の一覧が表示され、 `*'
+          を押すと、全ての持ち物の一覧が表示される。何を投げるかを指定し た
+          後、( どの目標に投げるかではなく)どの方向に投げるかを尋ねられる。
+          投げることができる距離は、主に物の種類と筋力による。矢は手で投 げ
+          る こともできるが、弓を持って投げた方が遥かに遠くまで飛び、目標に
+          も当たりやすい。
+
+               `Q'コマンドで予め好みの「発射物」を選択しておき、 `f'コマ ン
+          ド で投げることによって、投げる操作を簡単にすることが出来る。先程
+          と同様に投げる方向は尋ねられるが、 `f'コマンドを使うたびに何を 投
+          げ る か を指定する必要はない。 autoquiver オプションをオンにする
+          と、 `Q'コマンドで設定した物がなくなった時に、 SLASH'EM が自動的に
+          矢筒に他の物を入れてくれる。
+
+               ---  ---  一度に複数の物を投げることができるキャラクターもい
+          る。一度に複数の矢を装填し(あるいは一度に複数の物を持ち)、それ を
+          目 標に当てることはたやすい仕事ではない。レンジャーはこの技能に優
+          れているし、適切な武器の技能 (弓を持って矢を射るなら弓の技能、 ク
+          ロ スボゥを使うならクロスボゥの技能、スリングを持って石を投げるな
+          らスリングの技能) において高いレベルの技量があれば他の職業でも 可
+          能 である。あなたがいくつのアイテムを同時に投げることができるかは
+          毎ターン変化する。 `t'コマンドや`f'コマンドの前に数字を指定するこ
+          と に よっ て、 発 射 す る数を明示的に制限することもできる。例え
+          ば、``2f''( number_pad オプションがオンの時には``n2f'')と指定する
+          と、 たとえ 3 本発射可能でも最大 2 本しか発射されない。もし、実際
+          に発射できる数よりも大きい数を指定した場合 (この例 で は  ``4f'')
+          は、特に数字を指定しなかった場合と同様、実際に発射可能な数(ここで
+          は 3 本)しか発射されない。一旦動作を開始したなら、全てのアイテ ム
+          は同じ方向に飛ぶ。もし 1 本目で怪物を倒したなら、残りはその先まで
+          飛んでいくことになる。
+
+          7.2.2.  武器の技量
+
+               利用できる武器の技能はさまざまに異なっている。武器の技量( 技
+          能)はある種の武器をどれくらいうまく扱えるかに影響する。技能はゲー
+          ムを通じて向上させることが出来るが、それは職業や経験レベルや武 器
+          の使用回数による。
+
+               技 量を示すために、武器は daggers 、 broadswords 、 polearms
+          といった風にいくつかのグループに分けられている。それぞれのグ ルー
+          プ で技量レベルをどこまで高めることが出来るかは職業毎に決まってい
+          る。例えば魔法使いは daggers や staves に対しては高いレベルに達す
+          ることが出来るが、 swords や bows に対してはそうではない。
+
+               `#enhance'拡張コマンドで現在の武器(と呪文)の技量を見ることが
+          できる。さらに、ひとつまたは複数の技能を向上させることができる 状
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              25
+
+
+          態 なら、どの技能を向上させるかを選択することができる。技能のラン
+          クは"none" (技能を向上させること が で き な い と い う 意 味 で
+          "restricted"(制限された) と呼ばれることもある)、 "unskilled"(初心
+          者), "basic"(入門者), "skilled"(熟練者), "expert"(エキスパート)で
+          あ る。 制 限された技能は単に`#enhance'コマンドで一覧に表示されな
+          い。 (神の介入によりある種の技能の制限が解除されることもある。 そ
+          の 時には技能は"unskilled"となり、限界は"basic"までとなる) キャラ
+          クターによっては、素手での戦闘や マー シャ ル アー ツ の 技 能 を
+          ``master''( マスター)や``grand master''(グランドマスター)にまで向
+          上させることができる。
+
+               技能レベルが"restricted"や"unskilled"の武器を使うと、怪物 へ
+          の 命中率や命中した時に与えるダメージにペナルティがある。 "basic"
+          ではペナルティもボーナスもない。 "skilled"では命中率と与 え る ダ
+          メージにささやかなボーナスがある。 "expert"ではボーナスは大きくな
+          る。攻撃が命中すると、使っている武器に関する技能を(もし最大に達し
+          て いないなら) 向上させるための訓練度を増やすチャンスがある。この
+          訓練度が次のレベルに必要な値に達すると、自分の技能により自信を 持
+          て るように感じたことが告げられる。この時点で`#enhance'コマンドを
+          使うことによってひとつまたは複数の技能を向上させることができ る。
+          技 能は自動的には向上しない。なぜなら全ての技能レベルの合計には制
+          限があるので、どの技能を向上させて、どれを無視するかを決める必 要
+          があるからである。
+
+          7.3.  防具 (`[')
+
+               多くの非友好的なものが洞窟には潜んでいる。そういったものから
+          の攻撃から我が身を守るには防具が必要である。防具の中には他の種 類
+          の 防具よりも防御効果に優れた物がある。 Armor class(AC)(防御値)は
+          この防御効果の尺度である。防御値 (AC)は AD&D での場合と同じように
+          評 価される。 10 が防具なしの状態と等しく、数値が小さいほど優れた
+          防具であることを示す。 AD&D に存在する鎧はいずれも SLASH'EM におい
+          ても同じ防御効果を示す。以下に(不完全ではあるが) 各種の鎧ごとに規
+          定される防御値の一覧を示す。
+
+                  dragon scale mail(ドラゴンの鱗鎧)               1
+                  plate mail(鋼鉄の鎧)                            3
+                  crystal plate mail(水晶の鎧)                    3
+                  bronze plate mail(青銅の鎧)                     4
+                  splint mail(鉄片の鎧)                           4
+                  banded mail(帯金の鎧)                           4
+                  dwarvish mithril-coat(ドワーフのミスリル服)     4
+                  elven mithril-coat(エルフのミスリル服)          5
+                  chain mail(鎖かたびら)                          5
+                  orcish chain mail(オークの鎖かたびら)           6
+                  scale mail(鱗の鎧)                              6
+                  studded leather armor(鋲付き皮鎧)               7
+                  ring mail(鉄環の鎧)                             7
+                  orcish ring mail(オークの鉄環の鎧)              8
+                  leather armor(皮鎧)                             8
+                  leather jacket(皮ジャケット)                    9
+                  no armor(鎧なし)                               10
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              26
+
+
+
+               さらに他の防具(例: 兜、靴、楯、クローク) を身につけ、防御 値
+          の値を小さくすることもできる。ただし同じ範疇に入る物は 1 つしか身
+          につけることはできない (鎧は一式、クロークは 1 着、兜は 1 個、 楯
+          は 1 枚など)。
+
+               防 具に魔力があればその防具の防御効果は通常の物よりも良く(も
+          しくは悪く)なっており、それに付いている「＋記号」(あるいは−記号)
+          の 分だけ防御値の値が小さくなる。例えば +1 鎖かたびらは、通常の鎖
+          かたびらよりも防御効果が高く、防御値は 1 単位分小さくなって 4  に
+          な る。防具を身につけると直ちに防御値と「＋記号」の値が分かる。呪
+          いがかけられた防具は通常負の魔力(−記号)を持っており、取りはず す
+          ことはできない。
+
+               多くの鎧は錆のようなある種のダメージを受けやすい。このような
+          ダメージは修復可能である。魔法を唱えるのを妨げる防具もある。
+
+               鎧を使うためのコマンドは `W'(wear: 防具を付ける) と `T'(take
+          off: 防具をはずす) である。 `A'(remove all: 全てをはずす)もまた他
+          の身につけるもの同様、防具をはずすのに使用できる。
+
+          7.4.  食料 (`%')
+
+               生きのびるには食料が不可欠である．長い間食料を口にしないまま
+          で いるとやがて昏倒し、徐々に餓死への道をたどることになる。保存の
+          処置を取ってないと傷んでしまい、食べるには不衛生になる食 料 も あ
+          る。 アイスボックスや缶に入っている食料は通常はいつまでも傷まない
+          が、アイスボックスは重く、缶は開けるのに少しばかり時間が必要で あ
+          る。
+
+               怪物を殺すと通常はその死体が残るが、これは「食料」にもなる。
+          すべてと言うわけではないが多くは食べられるし、中には食べると特 別
+          な 力がつくものもある。大ざっぱに言えば「食べたものになる」という
+          ことである。
+
+               菜食主義の職業や怪物もいる。菜食主義の怪物は決して動物の死体
+          を 食べない。一方菜食主義のプレイヤーは動物の死体を食べることがで
+          きるが、なんらかのありがたくない副作用がある。
+
+               furit オプションによってあなたの好物の食料にちなんでその名前
+          を 1 つ設定することができる。
+
+               食料を食べるためのコマンドは `e' である。
+
+          7.5.  巻物 (`?')
+
+               巻物にはいろいろな表題が付けられているが、これはおそらくいに
+          しえの魔術師たちが暇潰しとして選んだのであろう (例:``READ ME'' と
+          か  ``THANX MAUD'' の逆さ読みとか)。巻物は読むと消滅する(ただし魔
+          法の呪文の書かれていない白紙は消滅しない)。
+
+               これらの中で最も利用価値の高いものはscroll of identify(識 別
+          の巻物)である。これは他の物についてそれが何であるか、呪いがかけら
+          れているか祝福されているか、あと何回効力を発揮できるかを確定で き
+          る。 得体の知れない魔力を持つ物の中にはこの巻物なしでは何であるか
+          鑑定し難いものもある。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              27
+
+
+
+
+               メイルデーモンが走ってきてあなたにscroll of mail(手紙の巻物)
+          を 渡してくれることもある (この機能を有効にしてコンパイルされてい
+          るバージョンの場合)。 SLASH'EM のメール配達機能はシステムのメー ル
+          ボッ クスに電子メールがやってきた場合に起動される。この機能を使用
+          するには環境変数``MAIL''にあなたのメールボックスのファイル名を 設
+          定して SLASH'EM に新しいメールを探す場所を知らせる必要がある。また
+          望むならば環境変数``MAILREADER''に使いたいメール受信プログラム の
+          ファイル名を設定することもできる。このとき SLASH'EM からそのプログ
+          ラムを起動してその巻物を読むことができる。メールがゲーム内にお い
+          てランダムに生成されるバージョンの SLASH'EM ではこれらの環境変数は
+          無視される。メイルデーモンは mail オプションでオフにできる。
+
+               巻物を読むためのコマンドは `r' である。
+
+          7.6.  水薬 (`!')
+
+               水薬は小びんに入っている液体の色によって区別される。水薬は飲
+          むと消滅してしまう。
+
+               透明な水薬は水である。これらはしばしば祝福されていたり呪いが
+          かけられていたりして、聖水や不浄な水になったりする。不死の怪物 に
+          とって聖水は有害なので、聖水を不死の怪物に投げつける(`t')と有効で
+          ある。聖水に他の物を浸す(``#dip'')のもたいへん有益である。
+
+               水薬を飲むためのコマンドは `q'(quaff: 飲む) である。
+
+          7.7.  杖 (`/')
+
+               魔法の杖は通常何回も魔力を発揮する．杖の中には方向性のあるも
+          の があり、この場合杖を振る方向を指示しなくてはならない。杖を自分
+          に向けて振ることもできる(方向として `.' か `s' を入力する)が、 こ
+          れ はしばしば愚かな行為となる。その他の杖には方向性がなく、杖を振
+          る方向を尋ねてこない。杖が効力を発揮する回数は杖ごとに不定で、 杖
+          を使う度にその回数は 1 ずつ減る。
+
+               杖の魔法の量がなくなると、通常は杖を使用しても何も起きない。
+          しかしながら時折、最後の一握りの魔力を使いきった杖から搾り取る こ
+          と が可能である。しかしこれをすると杖は壊れてしまう。杖は適切な魔
+          法によって再充填することができるが、そうすると杖が爆発してしま う
+          可 能性がある。爆発する可能性は最初は非常に小さく、同じ杖に何度も
+          再充填するごとに大きくなる。
+
+               自暴自虐なな行為ではあるが、どうにもならなくなったときには杖
+          を 壊すという手もある。これは弱気な行為ではない。それを行うことに
+          より、破壊的な魔法のエネルギーが解放されるからである。
+
+               ある杖を完全に鑑定した場合、持ち物の一覧では括弧の中に追加の
+          情報が表示される。 それは再充填された回数、コロン、現在の使用可能
+          な回数である。杖が無効化された場合には使用可能な回数は -1 になる。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              28
+
+
+
+               杖を使うためのコマンドは `z'(zap: 杖を振る) である。壊すには
+          `a' (apply: 道具を使う)である。
+
+          7.8.  指輪 (`=')
+
+               指輪は大変役に立つ物である。というのも水薬や巻物や杖のように
+          魔 力が一過性にしか働かないものと違い、指輪の魔力は比較的恒久的で
+          あるからだ。
+
+               指輪をはめることによってその魔力は発揮される。指輪は両手の薬
+          指に 1 つずつ、計 2 つしかはめることはできない。
+
+               またたいていの指輪は身につけると腹の減り方が速くなる。減り方
+          は指輪の種類によって異なる。
+
+               指輪を使うためのコマンドは `P'(put on: 指輪を は め る)   と
+          `R'(remove: 指輪をはずす) である。
+
+          7.9.  魔法書 (`+')
+
+               魔法書は強力な魔法を記した大きな本である。`r'(read: 読む) コ
+          マンドで学ぶと呪文の知識が読み手に転送される(したがって最後には読
+          めなくなる)か、さもなくばその試みは不測の結果に終る。呪いがかけら
+          れた魔法書や知識の及ばない神秘の古代文字で記された魔法書を読む と
+          健康状態に害が及ぶ可能性がある！
+
+               呪 文 を唱えたとき(学んでいる時も)にも魔力が逆流することもあ
+          る。あなたの経験レベルでは遠く及ばない高度な呪文を唱えようと試 み
+          た り、対応する呪文タイプに関する技能が低かったり、ひどくついてな
+          いときに呪文を唱えたりすると、呪文を唱えるのに必要なエネルギー と
+          時間を浪費しただけに終わってしまうこともある。
+
+               呪文を唱えることは、魔法のエネルギーを呼び起こしてそれを精神
+          そのものに集中させることである。あなた自身の内部から出る魔法の エ
+          ネ ルギーが開放され、連続して呪文を唱えると疲れてしまう。呪文を唱
+          えるには練習が必要である。練習していれば、それぞれの呪文領域の 技
+          能 は向上していく。しかしながら、呪文を使用していないと、時間が経
+          つにつれてそれぞれの呪文に関する記憶は薄れ、 もう一度呪文を学ぶ必
+          要がでてくるだろう。  繰返し呪文を使用した場合は記憶は強化され、
+          頻繁に再び学ぶ必要は少なくなるだろう。
+
+
+               指向性のある呪文の場合、呪文を唱える方向を指定する必要 が あ
+          る。 方向として`.'または`s'を指定することで自分自身に対して呪文を
+          唱えることもできる。しかし、これはしばしば愚かな行為である。指 向
+          性のない呪文の場合、方向を指定する必要はない。
+
+               武 器 が習熟度の面でグループ分けされているのと同様、呪文もグ
+          ループ分けされている。呪文を唱えるのに成功すると、そのグループ を
+          訓 練したことになる。十分な技能があれば呪文の効果を高め、失敗の可
+          能性を低めることができる。技能スロットは武器スキルと共有する。(``
+          武器の技量''の項も参照のこと)
+
+               魔法を唱えるには自由に移動できなければならない。また、いくつ
+          かの種類の鎧を着ていると魔法を唱えるのを妨げるだろう。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              29
+
+
+
+               魔法書を読むためのコマンドは巻物を読むときと同じく `r'(read:
+          読む) である。 `+' コマンドにより、知っている呪文とそのレベル，分
+          野，成功率が一覧表示される。 `Z'(cast: 呪文を唱える) コマンドによ
+          り呪文を唱える。``#enhance''拡張コマンドにより魔法詠唱スキルを上昇
+          させることができる。
+
+          7.10.  道具 (`(')
+
+               道具はいろいろな目的に使う種々雑多な物である。杖などと同じよ
+          うに使用回数に制限のある物もある。例えばランプはしばらくたつと 燃
+          え 尽きてしまう。その他の道具の中には容器も含まれており、物を出し
+          入れすることができる。
+
+               道具を使うためのコマンドは `a'(apply: 道具を用いる) である。
+
+          7.10.1.  箱
+
+               冒険の途中で鞄や箱やひつに出くわすこともあるであろう。これら
+          は置いてある場所に立っている場合には拡張コマンド「#loot」 に よっ
+          て、 また持っているときには `a'(apply: 道具を用いる) コマンドで開
+          けることができる。しかしながらひつにはしばしば錠がかかってお り、
+          大 抵は重くて運びにくい物体である。ひつは手に持つことはできない物
+          なので、錠をはずす(`a'(apply: 道具を用いる) コマンドで鍵や錠を は
+          ず す 道 具 を 使っ たり、 `^D'コマンドで蹴とばしたり、拡張コマン
+          ド``#force''により武器を使ってこじ開けるなどの方法による)には床に
+          置かなくてはならない。
+
+               ひつには罠が仕掛けられているものもあり、錠をはずしたりふたを
+          開けたりしたときに不快な出来事が起きる。拡張コマンド``#untrap''に
+          よってチェックをして罠が無効になるよう試みることができる。
+
+          7.11.  魔除け (`"')
+
+               魔 除 けは指輪と大変よく似ており、しばしばもっと大きな効力を
+          持っている。指輪と同じように魔除けにはいろいろな魔法の特 性 が あ
+          り、 有益なものも有害なものもあって、身につけることにより効力を発
+          揮する。
+
+               魔除けは一つだけしか首にかけることができない。
+
+               魔除けを使うためのコマンドは指輪の場合と同じく  `P'(put  on:
+          指輪をはめる) と `R'(remove: 指輪をはずす) である。
+
+          7.12.  宝石 (`*')
+
+               宝石の中には価値のあるものもあり、高値で売れる。宝石は財産を
+          持ち歩く方法としてとして極めて効果的なやり方である。価値のある 宝
+          石を脱出時に所持していれば得点に加算される。
+
+               他の小さな石も宝石に分類されるが、その価値はほとんどない。し
+          かし、全ての石は(もしスリングを持っているなら)弾として有 効 で あ
+          る。窮余に陥いったら手で投げることも可能である。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              30
+
+
+
+          7.13.  大きな岩 (``')
+
+               彫像や巨石は特に有用ではないし、一般的に重いものである。見か
+          けとは異なった彫像もあるという噂である。
+
+               巨大なヒューマノイド(巨人やその仲間)は巨石を武器として用いる
+          ことができる。
+
+          7.14.  金 (`$')
+
+               金は得点に加算され、また店では金で物を買うことができる。迷宮
+          にはあなたの持つお金に影響されるかもしれない数多くの怪物がいる(店
+          主は別として)。
+
+
+          8.  制限プレイ
+
+               単 に SLASH'EM に勝利するだけでは満足できない一部のプレイヤー
+          は、プレイに制限を設けることに挑戦している。これらの挑戦の一部 は
+          ゲー ムによって自動的に記録され、ゲーム中いつでも #conduct コマン
+          ドで確認できる。またゲーム終了時にも表示される。挑戦に反するよ う
+          な 行動を取ると、もはやその挑戦は表示されない。l これらの挑戦に勝
+          利することによって、プレイヤーは追加の``自慢する権利''を 得 ら れ
+          る。 なお、これらの制限に従うことなくゲームに勝利することも完全に
+          有効であり、最初にゲームに勝利するときは普通これらの挑戦は関係 な
+          い。
+
+               挑戦のいくつかは食べ物に関するものである。最も困難な挑戦は食
+          料なしの挑戦である。生物は食料なしでも長い間生存できるが、水は 必
+          要 で あ る。従って、飲み物に対しては何の制限もない。例え栄養分が
+          あってもである。神に祈って飢えをしのぐことはいかなる食べ物に関 す
+          る挑戦にも違反しない。
+
+               厳密な菜食主義者は動物から作られた食べ物を食べない。基本的な
+          栄養源は果物と野菜である。ブロッブ(`b')、ゼリー(`j')、細菌(`F')も
+          野 菜とみなされる。人間の食料にも動物を使っていないものがある。レ
+          ンバス、クラム、「食料」(丸薬)、Ｋレーション、Ｃレーションがそ う
+          で ある。他の生物に変化しているときは、金属などの普通消化できない
+          物質も厳密な菜食主義者用の食料として扱われる。しかし、これらの 物
+          も食料なしの挑戦には反することに注意すること。
+
+               菜食主義者は動物を食べない。しかし、動物からの副生産物を食べ
+          ることは厳密な菜食主義者ほどは厳しくない。上記の厳密な菜食主義 者
+          が食べられるものに追加して、ブラックプリン以外のプリン(`P')、卵、
+          卵から作られた食べ物 (占いクッキーとパンケーキ)、牛乳から造られた
+          食べ物 (クリームパイとキャンディーバー)、ロイヤルゼリーを食べるこ
+          とができる。モンクは菜食主義者とみなされる。
+
+               肉を食べることは厳密な菜食主義者、菜食主義者、食料なしの挑戦
+          に 反する。これにはほし肉、上記以外の怪物の死体や缶詰、迷宮で見つ
+          かるその他の肉のかたまりを含む。変化中に「飲み込んで消化」攻撃 を
+          か けるのはその怪物の死体を食べたものとみなす。皮、竜鱗、骨ででき
+          た物体を、これらを消化できる怪物に変化して食べたり、マインドフ レ
+          イ ヤーに変化して脳を食べることは動物を食べたとみなす。ただし、蜜
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              31
+
+
+
+          蝋は動物の副生成物とみなす。
+
+               挑戦に関わらず、消化不可能な物もあり、食べると危険なものもあ
+          る。 怪物に対して「飲み込んで消化」攻撃をかけることは、その怪物の
+          死体を食べたものとみなす。「厳格な菜食主義者(``vegan'')」という言
+          葉 は食べ物に関する文脈でのみ用いられることに注意してほしい。動物
+          から作られた物(皮、竜の鱗、骨、角、さんご)を使ったり身につけた り
+          す ることは制限に違反しない。また、「ミルク色の」水薬は不透明な白
+          色ではあるが、牛乳を含んでいるわけではないので、厳密な菜食主義 者
+          の 制 限 に 違 反 し な い。 ス ラ イムモルドやプレイヤーが定義し
+          た``fruits''は、例え「さくらんぼ」であろうが「ポークチョップ」 で
+          あろうが、厳密な菜食主義者の制限に違反しない。
+
+               無神論者は宗教を否定する。つまり、#pray(祈る), #offer(いけに
+          えを捧げる), #turn (不死のものを戻す), 僧侶に対する #chat(話す)こ
+          と はできない。一部の読者はモンクや僧侶でプレイするのもこの制限に
+          反していると主張するかもしれないが、ここではプレイヤーの選択の 余
+          地 を残してある。イェンダーの魔除けを神に捧げるのはゲームに勝利す
+          るために必要なので制限には反しないものとする。また、怒った神や 僧
+          侶 やその他の宗教的存在が話す言葉を聞いても制限には反しない。真の
+          無神論者は言葉は聞くが，そこになんら特別な意味を見出さない。
+
+               ほとんどのプレイヤーは武器(あるいは武器として装備すること を
+          考慮している道具)を手に戦う。挑戦の一つはこのような武器を手にして
+          使わずにゲームに勝利することである。武器を投げたり、発射した り、
+          蹴っ たりするのは許される。また、杖、呪文、あるいはその他のアイテ
+          ムを使ったり、素手や脚で戦うことも許される。
+
+               SLASH'EM において、平和主義者は他の怪物を殺してはならない( 言
+          い換えると、怪物の死によって経験値を得てはならない)。これは特に難
+          しい挑戦であるが、他の手段によって経験値を得ることは可能である。
+
+               文盲者は読み書きができない。これには以下の行為が含まれる。巻
+          き物を読む、魔法書を読む、占いクッキーのメッセージを読む、Tシャツ
+          の文字を読む、巻き物を読む(または書く)、``x''一文字(文盲者の伝統的
+          なサイン)以外 の文字を刻む。ゲームに勝利するために絶対に必要なアイ
+          テムを読むことは制限には反しないものとする。 ゲーム開始時に持って
+          いる巻き物と魔法書の内容を知っていることおよび呪文の知識は、ゲーム
+          開始以前に教師から教わったものとみなし、 制限には反しないものとす
+          る。
+
+               その他にいくつかの細かいゲームとして記録される挑戦がある。怪
+          物は虐殺することが可能である。これをせずにプレイするのも挑戦と み
+          な す。 怪 物を虐殺する機会が与えられたとき、 ``none''(または``な
+          し'')と答えると、虐殺しないままにすることができる。あなたはアイテ
+          ムを同じグループの他のアイテムに変化させたり (``polypiling'')、変
+          化の杖・呪文・薬で自分の体を他の生物に変えたり(``polyself'')で き
+          る。 これらの効果を用いないことはそれぞれ挑戦とみなす。最後に、あ
+          なたはときどき願いをかなえてもらうことがある。なんのアイテムも 願
+          わずにプレイするのは一つの挑戦であり、聖器を願わない(たとえ直ちに
+          消滅したとしても)でプレイするのも一つの挑戦である。アイテムを願う
+          機 会を与えられたとき、 ``nothing''または``なし''と答えると、願わ
+          ないままにすることができる。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              32
+
+
+
+          9.  オプション
+
+               人にはそれぞれいろいろな好みがあり SLASH'EM の遊び方もそれ ぞ
+          れ 異なっているので、SLASH'EM の振る舞いを変更するため設定できるオ
+          プションがある。
+
+          9.1.  オプションの設定
+
+               オプションを設定する方法にはいくつかある。ゲーム中に `O'  コ
+          マ ンドを使うことによって全てのオプションを見ることができ、そのほ
+          とんどを変更できる。また、環境変数``SLASHEMOPTIONS''や設定ファ イ
+          ル で自動的に設定することもできる。SLASH'EM のバージョンによっては
+          ゲーム開始前にオプションを設定することができるプログラムがつい て
+          いることもある。
+
+          9.2.  環境変数 SLASHEMOPTIONS を使う
+
+               環境変数 SLASHEMOPTIONS にはいろいろなオプションの初期値をカ
+          ンマで区切って列挙し設定する。オプションのうちのいくつかのもの は
+          単 にオンかオフの選択ができるだけである。そのオプション名をリスト
+          に入れるとオンになり、オプション名の前に `!' か``no''をつけるとオ
+          フ になる。その他のオプションでは設定値として文字列が必要である。
+          これらのオプションを設定するにはオプション名、コロンまたはイ コー
+          ル 記号、設定値の順で入力すればよい。設定値は次のカンマもしくは文
+          字列の最後までとなる。
+
+               例えば``autoquiver''をオ ン、``autopickup'' を オ フ、 名 前
+          が``Blue  Meanie'' に、フルーツが``papaya''になるように環境変数を
+          設定するには csh では次のコマンドを入力すればよい。 (!は特殊文 字
+          なのでエスケープしてやる必要があることに注意)
+
+               % setenv SLASHEMOPTIONS "autoquiver,\!autopickup,name:Blue Meanie,fruit:papaya"
+
+          sh または ksh では
+
+               $ SLASHEMOPTIONS="autoquiver,!autopickup,name:Blue Meanie,fruit:papaya"
+               $ export SLASHEMOPTIONS
+
+          とすればよい。
+
+          9.3.  設定ファイルを使う
+
+               設 定ファイルの中の`#'で始まる行はコメントとして扱われる。設
+          定ファイルの中の``OPTION=''で始まる行は環境変数``SLASHEMOPTIONS''
+          と 同 じ 文 法 で オ プ ショ ン が 記 述 されているものと見なす。
+          ``DUNGEON=''、``EFFECTS=''、``MONSTERS=''、``OBJECTS=''、``TRAPS=''、``BOULDER=''
+          で始まる行はそれぞれ dungeon 、 effects 、 monsters 、 objects 、
+          traps 、 boulder
+           オプションとして扱われるが、その指定方法は、現在使われているフォ
+          ン トのかわりに使われるキャラクタコードを示す 10 進数の列である。
+          この列に 0 を指定すると、その項目は変更されない。この機能は オ プ
+          ションの文法では利用できない。この列は各行の最後に`\'をつけること
+          によって複数行に渡ることができる。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              33
+
+
+
+               コンパイル時に AUTOPICKUP_EXCEPTIONS オプションが設定され て
+          い ると、 ``AUTOPICKUP_EXCEPTION=''で始まる行によって pickup_type
+          オプションの例外を定義できる。
+
+               標準設定の設定ファイル名は OS によって異 な る が、 環 境 変
+          数``SLASHEMOPTIONS'' で （先頭に`@'を付けることで）使用したい設定
+          ファイル名を指定することができる。
+
+          9.4.  カスタマイズオプション
+
+               以下にいろいろなオプションの役割を説明する。あまりに長すぎる
+          文 字列の部分は無視される。以下のオプションのうち実装によっては無
+          効となっているオプションもある。
+
+          align
+            スタート時の属性(align:lawful, align:neutral,  align:chaotic)。
+            最 初の一文字で指定することもできる。標準設定ではランダムに選択
+            される。 `O' コマンドで設定することはできない。
+
+          autodig
+            掘るための道具を手にしていて、掘ることができる地形に移動しよ う
+            としたとき、自動的に掘る（標準設定はオフ）。
+
+          autopickup
+            移 動先にあるものを自動的に拾う（標準設定はオン）。この振る舞い
+            をカスタマイズするためには pickup_types を参照すること。
+
+          autoquiver
+            このオプションは矢筒が空の時に`f'(fire:矢筒の中にあるものを発射
+            す る) コマンドを実行した時にどうするかを決める。オンなら、コン
+            ピューターは適当な武器を矢筒に入れる。この時、呪い、 祝 福、 魔
+            法、 劣 化、 武器の数などは考慮されないので注意すること。代わり
+            に`Q'コマンドを使って自分の好きな物を矢筒に入れる。入れる武器が
+            ないか、このオプションがオフの時は代わりに`t'(throw:物を投げる)
+            コマンドが実行される。 (標準設定はオフ)
+
+          boulder
+            巨岩を表示するのに用いるキャラクタ（標準設定は岩を表すキャラ ク
+            タ）。
+
+          catname
+            スタート時の猫の名前(例: catname:Morris)。 `O' コマンドで設定す
+            ることはできない。
+
+          character
+            キャラクターのタ イ プ を 設 定 す る( 例:``character:Monk'')。
+            ``role'' オプションと同じである。職業を設定するその他の方法につ
+            いては``name''オプションを参照のこと。 ``random''以外の文字列は
+            最初の 1 文字だけで判別される。
+
+          checkpoint
+            プ ログラムがクラッシュした時に復旧できるように階を移動する毎に
+            状態をセーブする（標準設定はオン）。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              34
+
+
+
+          color
+            色々な怪物や物や洞窟の地形をカラーで表示する (マ イ ク ロ コ ン
+            ピュータでは標準設定はオン)。
+
+          checkspace
+            ファイルを書き込む前にディスクの空き容量をチェックする(標準設定
+            はオン)。セーブファイルやレベルファイルのために使うパーティショ
+            ンに2GB以上の空き容量がある場合、このオプションをオフをしなけれ
+            ばならないかもしれない。このオプションはコンパイル時にMFLOPPYが
+            定義されているときのみ適用される。
+
+          cmdassist
+            あ りがちなミスを検出したときに新規プレイヤーのために追加のコマ
+            ンド補助メッセージを表示する(標準設定はオン)。
+
+          confirm
+            ペット、店主、その他の攻撃してこない生物を攻撃しようとしたと き
+            に確認をする(標準設定はオン)。
+
+          DECgraphics
+            洞 窟 の 表示に用いる文字をあなた自身ですべて定義する代わりに、
+            DEC VT-xxx/DEC Rainbow/ANSI 罫線文字セットからあらかじめ用意 さ
+            れ た設定を使用する(標準設定はオフ)。このオプションはまたターミ
+            ナルが適切なグラフィックキャラクターを扱えるよう設定する。す な
+            わ ち、あなたが自分でグラフィック文字を上書き設定するときにも明
+            示しなくてはいけない。
+
+          disclose
+            ゲーム終了時に表示する情報を制御する(標準設定は、全てを表 示 す
+            る)。設定できるものは以下の通り。
+
+                 i - 持ち物の鑑定
+                 a - 属性の公開
+                 v - 退治した怪物の一覧
+                 g - 抹殺した怪物種
+                 c - 挑戦
+
+            そ れぞれの表示に対して、その前にどのように振舞うかを指示する文
+            字をつけることができる。文字の意味は以下のとおり。
+
+                 y - 確認するが、標準設定はイエスにする。
+                 n - 確認するが、標準設定はノーにする。
+                 + - 確認なしに表示する。
+                 - - 確認なしで非表示とする。
+
+            (例: ``disclose:yi na +v -g -c'') このように設定した場合、 持ち
+            物 は 確 認 す る(標準設定はイエス)。 属性は確認する(標準設定は
+            ノー)。 退治した怪物は確認なしに表示する。 抹殺した怪物は確認せ
+            ずに非表示とする。 挑戦は確認せずに非表示とする。退治した怪物の
+            一覧は罠や同士討ちによって死んだ怪物も含むことに注意。
+
+          dogname
+            スタート時の犬の名前(例: dogname:Fang)。 `O' コマンドで設定する
+            ことはできない。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              35
+
+
+
+
+          dungeon
+            迷 宮 表 示 の ためのグラフィックシンボルを設定する (標準設定は
+            `` |--------||.-|++##.##<><>_|\\##{}.}..## #}'') dungeon  オ プ
+            ショ ン は標準設定の文字の代わりに地図を描くのに使用する 1 から
+            42 文字の文字列を書く。標準設定の文字の代わりにここで設定した文
+            字 を使って洞窟の地図が表示され、標準設定の文字は使われない。も
+            しあなたのシェルが特別扱いする文字を使うなら、それらのキャラ ク
+            タをエスケープする必要があるかもしれないことに注意。
+
+            このオプションで設定される文字列は、現在では通常の C 言語で使わ
+            れる方式でエスケープ処理されることに注意しなくてはな ら な い。
+            `\'   の 後の文字はその文字そのものとして取り扱われ、特別なプレ
+            フィックスとしては扱われないということである。従っ て、`\'   は
+            `\\' とする必要がある。特殊なエスケープ形式である `\m' は後ろの
+            文字のメタビットをオンにし、
+
+            シンボルは以下の順序である：堅い岩、壁(縦)、壁(横)、左上の 角、
+            右上の角、左下の角、右下の角, 壁の交差、T 字状の壁、逆 T 字状の
+            壁、左向きの T字状の壁, 右向きの T 字状の壁、扉のない出入口、開
+            い た扉(縦)、開いた扉(横), 閉じた扉(縦)、閉じた扉(横)、鉄の棒、
+            木、部屋の床、暗い通路、明るい通路, 上への階段、下への階段、 上
+            へ のはしご、下へのはしご、祭壇、墓, 玉座、流し台、トイレ、泉、
+            水たまりまたは堀、氷、溶岩、降りている跳ね橋(縦)、 降りている跳
+            ね橋(横)、上がっている跳ね橋(縦)、上がっている跳ね橋(横)、空気、
+            雲、水中
+
+            より美しく四角の表示を得るためには角と T 字状の壁に '+' を 使っ
+            た 方がよいかも知れない。次のリリースでは新しいシンボルが加わっ
+            たり、現在のものが再構成される可能性があるので注意。
+
+            `O' コマンドで設定することはできない。
+
+          effects
+            効果表示のためのグラフィックシンボルを設定 す る  ( 標準設定は
+            ``|-\\/*!)(0#@*/-\\||\\-//-\\| |\\-//-\\| |\\-//-\\| |\\-//-\\|
+             |\\-//-\\| |\\-//-\\| |\\-//-\\| |\\-/'').  effects オプション
+            は標準設定の文字の代わりに地図を描くのに使用する 1-83 文字の 文
+            字列を書く。この文字列は dungeon オプションと同様に処理される。
+
+            シンボルは以下の順序である：光線(縦)、光線(横)、光線(左上から右
+            下)、光線(右上から左下)、掘削光線、カメラのフラッシュ、ブーメラ
+            ン(左)、ブーメラン(右)、魔法防御に用いる 4 つの記号、飲み込まれ
+            た ときに使われる 8 つの記号、魔法、 炎、 冷気、 死、 電撃、 毒
+            および酸の爆発に用いる 9 つの記号。爆発は 3 キャラクタ 3 列から
+            なり、爆発の中心はこの 3 × 3 の配列の中心になる。
+
+            次 のリリースでは新しいシンボルが加わったり、現在のものが再構成
+            される可能性があるので注意。
+
+            `O' コマンドで設定することはできない。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              36
+
+
+
+          extmenu
+            拡張コマンドインターフェースを、有効なコマンドの一覧メニュー が
+            出るように変更する。キー入力は、最後に Enter を押す必要がないこ
+            と以外は伝統的なインターフェースと互換性がある。 tty イ ン ター
+            フェースにだけ実装されている。(標準設定はオフ)
+
+          female
+            ``gender:female'' の古い別名。 `O' コマンドで設定することはでき
+            ない。
+
+          fixinv
+            持物の目録記号と物との対応はその物を下に置いても変化しない(標準
+            設定はオン)。オフにしたときは物を下に置くとその物の目録記号以降
+            の記号と物との対応が 1 つずつずれる。
+
+          fruit
+            あなたの好物の果物にちなんでその名前を設定する( 例:fruit:mango)
+            (標準設定は「slime mold」)。元来 SLASH'EM で時々使われる懐古趣味
+            的な妙な言葉である。 slime mold(ネバネバかび)よりももっと食欲の
+            わ く 食べ物にするべきであろう。 apples(リンゴ)、oranges(オレン
+            ジ)、 pears(洋なし)、 bananas(バナナ)、 melons ( メ ロ ン)   は
+            SLASH'EM にはもう存在しているので、設定してはならない。
+
+          gender
+            開始時の性別(gender:male または gender:female).  最初の一文字で
+            指定することもできる。 ``male'' と ``female'' オプションを指 定
+            し ていても、 ``gender'' オプションが優先される。標準設定では適
+            切な性別がランダムに選択される。 `O' コマンドで設定することはで
+            きない。
+
+          ghoulname
+            開始時のグールの名前をつける (例:``ghoulname:Casper'').  `O' コ
+            マンドで設定することはできない。
+
+          help
+            `/'   コ マンドを使って調べている物について何らかの情報がある場
+            合、それを見るかどうかを尋ねる(標準設定はオン)。ヘルプが出な い
+            よ うにすれば ``More info?'' というプロンプトに煩わされなくなる
+            ので、素早く物を調べることができる。しかしそれは興味深く重要 な
+            情報を見逃してしまうかも知れないことを意味する。
+
+          hilite_pet
+            ペッ トを同種の動物から視覚的に区別する(標準設定はオフ)。テキス
+            トウィンドウ表示では color がオフのときに強調表示する。 Xのタイ
+            ルを使用するときは、ハートの記号をペットにつける。
+
+          horsename
+            開 始時の馬の名前をつける (例:``horsename:Trigger'').  `O' コマ
+            ンドで設定することはできない。
+
+          IBMgraphics
+            洞窟、効果、罠の表示に用いる文字をあなた自身ですべて定義する 代
+            わ りに、 IBM 拡張 ASCII 文字セットからあらかじめ用意された設定
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              37
+
+
+
+            を使用する (標準設定はオフ)。このオプションはまたターミナルが適
+            切 なグラフィックキャラクターを扱えるよう設定する。すなわち、あ
+            なたが自分のグラフィック文字で上書き設定するときにも明示しな く
+            てはいけない。
+
+          ignintr
+            ブレークを含む割り込み信号を無視する(標準設定はオフ)。
+
+          invweight
+            Display the  weights of items in your inventory  ( and at other
+            times) in braces (default off). 
+
+          keep_savefile
+            Keeps the save file  after restore.   SLASH'EM  usually  deletes
+            your savefile after you restore,   making death permanent.  This
+            option can allow you to restore from the last save. (default off).
+
+          legacy
+            ゲーム開始時に説明メッセージを表示する(標準設定はオン)。
+
+          lit_corridor
+            夜 目やあなたのキャラクタが持っている光源によって見える通路を表
+            示する (標準設定はオフ)。
+
+          lootabc
+            箱を開けるときに`o', `i', `b'ではなく`a', `b', `c'のキーを使 う
+            (標準設定はオフ)。
+
+          mail
+            ゲーム中にメールを配達するようにする(標準設定はオン)。
+
+          male
+            ``gender:male'' の古くなった別名。 `O' コマンドで設定することは
+            できない。
+
+          menustyle
+            いろいろなオブジェクトを指定するとき(たとえば Dropコマンド)に用
+            いるインタフェースの制御。値は tradional, combination, partial,
+            full の 4 つのタイプの最初の一文字を指定する。 ``tradional'' は
+            古 い バー ジョンで唯一利用できたもので、物の種類を示す文字の入
+            力、次に選んだ種類に当てはまる全ての物を一つず つ 確 認 す る。
+            ``combination''は選択したい物の種類を示す文字を入力するが、次に
+            当てはまる物を一つずつ確認で選択するのではなく、メニュー形式 で
+            選 択する。 ``partial''は物の種類を選ぶことをせず、直ちに全ての
+            物が表示されたメニューを表示する。 ``full''は物の種類の文字入力
+            の かわりに、最初に物の種類のメニューを表示し、それから選択した
+            種類に当てはまる物のメニューを表示する。
+
+          menu_deselect_all
+            メニューの全ての項目を非選択にするキー。 Amiga, Gem, X11, GTK,
+            ttyで実装されている。(標準設定は `-')
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              38
+
+
+
+          menu_deselect_page
+            メ ニュー の う ち、 現在表示されている全ての項目を非選択にする
+            キー。 Amiga, Gem, tty で実装されている。(標準設定は `\')
+
+          menu_first_page
+            メニューの最初のページへ移動するキー。 Amiga, Gem, tty で実装さ
+            れている。(標準設定は `^')
+
+          menu_headings
+            メ ニュー の うち注目している部分をどのように表示するかを指定す
+            る。値は 'bold'(太字), 'inverse'(反転), 'underline'(下線)のいず
+            れかである。.  全てのポートで実際に三つ全てのタイプを表示できる
+            わけではない。
+
+          menu_invert_all
+            メニューの全ての項目の選択状態を反転するキー。 Amiga, Gem, X11,
+            GTK, tty で実装されている。(標準設定は `@')
+
+          menu_invert_page
+            メ ニュー の 現在のページの全ての項目の選択状態を反転するキー。
+            Amiga, Gem, tty で実装されている。(標準設定は `~')
+
+          menu_last_page
+            メニューの最後のページへ移動するキー。 Amiga, Gem, tty で実装さ
+            れている。(標準設定は '|')
+
+          menu_next_page
+            メニューの次のページへ移動するキー。 Amiga, Gem, tty で実装され
+            ている。(標準設定は `>')
+
+          menu_on_esc
+            ESCキーに`~'コマンド(メインメニュー)と同等の機能を割り当てる。
+            (標準設定はON)
+
+          menu_previous_page
+            メニューの前のページへ移動するキー。 Amiga, Gem, tty で実装され
+            ている。(標準設定は `<')
+
+          menu_search
+            メ ニューで検索を行うキー。 Amiga, Gem, X11 で実装されている。(
+            標準設定は `:')
+
+          menu_select_all
+            メニューの全ての項目を選択にするキー。 Amiga, Gem, X11, GTK, tty
+            で実装されている。(標準設定は `.')
+
+          menu_select_page
+            メ ニューのうち、現在表示されている全ての項目を選択にするキー。
+            Amiga, Gem, tty で実装されている。(標準設定は `,')
+
+
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              39
+
+
+
+          monsters
+            怪物の種類を表示するのに使用するキャラクタを指定する。 (標準 設
+            定    は     ``abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTU-
+            VWXYZ@ '&;:~]'').  この文字列は dungeon オプションと同様に処 理
+            される。シンボルの順序は、 ant or other insect(蟻あるいはその他
+            の昆虫), blob(ブロッブ), cockatrice(コカトリス), dog  or  other
+            canine( 犬またはその他のイヌ科の動物), eye or sphere(目または球
+            体), feline(猫), gremlin(グレムリン), humanoid(人 間),  imp  or
+            minor demon(インプまたは低級悪魔), jelly(ゼリー), kobold(コボル
+            ド), leprechaun(レプラコーン), mimic(ミミック), nymph(ニン フ),
+            orc( オー ク),  piercer( 突 き刺すもの), quadruped(四つ足動物),
+            rodent(鼠), arachnid or centipede(くもまたはムカデ), trapper or
+            lurker above(トラッパーまたは天井に潜むもの), horse or unicorn(
+            馬またはユニコーン), vortex(渦巻き), worm(ワーム), xan or other
+            mythical/fantastic  insect( ザ ン ま たはその他の不思議な昆虫),
+            light(ライト), Zouthern aminal(有袋類), angelic being(天使のよ
+            うな存在),  bat or bird(コウモリ または鳥),  centaur(ケンタウル
+            ス), dragon(龍), elemental(エレメンタル), fungus or mold(カビや
+            コケ),  gnome(ノーム),  giant  humanoid( 大 型 人類), invisible
+            monster(見えない怪物), jabberwock(ジャバーウォッ ク),  Keystone
+            Kop(キーストーンコップ), lich(リッチ), mummy(ミイラ), naga(ナー
+            ガ), ogre(オーガ), pudding or ooze(スライム), quantum mechanic(
+            量 子力学), rust monster(錆の怪物), snake(蛇), troll(トロール),
+            umber hulk(アンバーハルク), vampire(バンパイア),  wraith( レ イ
+            ス),  xorn(ゾーン), apelike creature(猿のような生き物), zombie(
+            ゾンビ), human(人間), ghost(幽霊), golem(ゴーレ ム),  demon( 悪
+            魔), sea monster(海の怪物), lizard(トカゲ), long worm tail(ロン
+            グワームの尻尾), mimic(ミミック) `O' コマンドで設定することはで
+            きない。
+
+          msghistory
+            後で ^P で呼び出すために保存しておく最上行のメッセージの数(標準
+            設定は 20)。 `O' コマンドで設定することはできない。
+
+          msg_window
+            過去のメッセージの表示方法を変更する(現時点では tty にのみ実 装
+            されている)。指定できる値は以下のとおり。
+
+                 s - `single': 1 メッセージだけ (標準設定。これは 3.4.0 以前での振る舞いである)
+                 c - `conbination': 最初の 2 メッセージは `single'、その後は `full'。
+                 f - `full': 全画面。古いメッセージが先。
+                 r - 全画面。新しいメッセージが先。
+
+            過 去との互換性のために、値なしにもできる(`full'とみなす)し、否
+            定もできる(`single'とみなす)。
+
+          name
+            あなたのキャラクタの名前を設定する(標準設定はあなたの ユー ザー
+            名)。  -記号とキャラクタの職業の頭文字を付け加える(つまり -A -B
+            -C -F -H -I -K -M -N -P -Ra -Ro -S -T -U -V -W -Y のどれかを後に
+            付ける)ことによって職業を設定することもできる。職業として -@ を
+            使用すると、ランダムなひとつが自動的に選択される。 `O' コマンド
+            で設定することはできない。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              40
+
+
+
+          news
+            SLASH'EM  のニュースファイルがあればそれを読む(標準設定はオン)。
+            ニュースはゲームの最初に表示されるので、 `O' コマンドでこれを設
+            定するのは無意味である。
+
+          null
+            端末にパディングのためのナルキャラクタを送る(標準設定はオフ)。
+
+          number_pad
+            移動のために[yuhjklbn]のかわりに数字キーを使用する(標準設定は 0
+            またはオフ)。 (number_pad:2 は昔の DOS 版の振る舞いにする。 `5'
+            は`g'、meta-`5'は`G'、meta-`0'は`I'となる。)
+
+          objects
+            物 の 種 類 を 表 示 す る 時 に 使う文字を設定する (標準設定は
+            ``])[="(%!?+/$*`0_.'')  この文字列は dungeon オプションと同様に
+            処 理される。シンボルの順番は（見たこともないような）おかしな物
+            体、武器、防具、指輪、魔除け、工具、食料、水薬、巻物、魔法 書、
+            杖、金貨、宝石または石、巨石または彫像、鉄球、鎖、毒液。 `O' コ
+            マンドで設定することはできない。
+
+          packorder
+            物の種類を表示すると き の 順 番 を 指 定 す る( 標 準 設 定 は
+            ``")[%?+!=/(*`0_'').   このオプションにはいろいろな物の種類を表
+            す文字の列を設定する。設定されなかった種類は以前の順序で最後 に
+            表示される。
+
+          perm_invent
+            も し オ ンならば、現在の持ち物一覧を常にウィンドウに表示してお
+            く。この機能が実装されているウィンドウシステムでのみ有効。
+
+          pettype
+            プレイするキャラクタクラスが複数のタイプのペットを使用できる 時
+            に 初期のペットを指定する、または初期のペットを全く指定しない。
+            指定出来るのは``cat'', ``dog'', ``none'' である。 `O' コマン ド
+            で設定することはできない。
+
+          pickup_burden
+            物 を拾った時にここで指定した荷物の重さレベル (Unburdened, Bur-
+            dened, streSsed, straiNed, overTaxed, overLoaded) 以上 に な る
+            と、続行するかどうかを確認する。 (標準設定は `S').
+
+          pickup_thrown
+            autopickup オプションが設定されている時にこのオプションが設定さ
+            れていると、 pickup_types に設定されていない アイテムであっても
+            自分が投げたアイテムを自動的に拾う。 (標準設定はオン).
+
+          pickup_types
+            autopickup   オプションが設定されている時に拾う物の種類を指定す
+            る(標準設定は全ての種類)。実験的コンパイル時オプション で あ る
+            AUTOPICKUP_EXCEPTIONS が指定されていると、 autopickup_exception
+            行を使うことで autopickup の振る舞いをより細かく制御できる。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              41
+
+
+
+          prayconfirm
+            神に祈る前に確認する(標準設定はオン)。
+
+          preload_tiles
+            MSDOSのプロテクトモードで、タイルをゲームの始めにあらかじめ RAM
+            に 読 み 込んでおくかどうかを制御する。オンにすると、タイルグラ
+            フィックのパフォーマンスが高まるが、より多くのメモリを使用する(
+            標準設定はオン)。 `O' コマンドで設定することはできない。
+
+          pushweapon
+            既に武器を持っている時に `w' (wield: 武器を持つ) コマンドを使っ
+            たとき、既に持っていた武器を予備の武器に設定する(標準設定 は オ
+            フ)。
+
+          race
+            種 族を選択する(例: ``race:human'')。標準設定はランダムである。
+            `O' コマンドで設定することはできない。
+
+          rest_on_space
+            スペースキーを `.'(rest: 休憩する) コマンドとして使用する (標準
+            設定はオフ)。
+
+          role
+            キャ ラ ク ター の タ イ プ を 設定する (例:``role:Samurai'')。
+            ``character''オプションと同じである。職業を設定するその他の方法
+            については``name''オプションを参照のこと。普通は先頭の 1 文字だ
+            け  で  判  別  さ  れ  る  が、   `r'   は   例   外   で   あ
+            る。``Rogue''、``Ranger''、``random''があるからである。
+
+          runmode
+            「まとめて移動」する(shift+方向やcontrol+方向で移動するか、旅行
+            コマンドやマウスのクリックを使った場合) ときにどれくらいの頻 度
+            で地図を更新するかを制御する。設定可能な値は以下の通り。
+
+                 teleport - 移動が完了してから地図を更新する。
+                 run - 7 歩ぐらい毎に地図を更新する。
+                 walk - 1 歩毎に地図を更新する。
+                 crawl - ``walk'' と同様だが、一歩毎にしばらく停止する。
+
+            こ のオプションは画面表示にのみ影響し、実際の移動結果には影響し
+            ない。標準設定は `run' である。バージョン 3.4.1 以前 は  `tele-
+            port'  のみであった。効果が確認できるかどうかは使っている版や端
+            末の種類に依存する。
+
+          safe_pet
+            ペットを(ペットと知りつつ)攻撃してしまうのを防ぐ(標準設定 は オ
+            ン)。
+
+          scores
+            最 後にスコアリストのどの部分を見るかを制御する (例：``scores:5
+            top scores/4 around my score/own scores'')。それぞれの分野の 最
+            初の文字 (`t', `a', `o')のみが必要である。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              42
+
+
+
+
+          showexp
+            最下行に現在の経験点を表示する(標準設定はオフ)。
+
+          showrace
+            あ なたを表示するときに、職業に対応するマークではなく、種族に対
+            応するマークで表示する(標準設定はオフ)。この設定は表示にだけ 用
+            いられ、ゲームとしては何も変わらないことに注意。
+
+          showscore
+            最下行に現在のスコアを表示する(標準設定はオフ)。
+
+          showdmg
+            ダメージを与えた/ダメージを受けたときに数値表示する(標準設定はオ
+            フ)。
+
+          showweight
+            所持品の総重量を最下行に表示する(標準設定はオフ)。
+
+          silent
+            端末のビープ音を鳴らさない(標準設定はオン)。
+
+          sortpack
+            持 物の目録を表示するとき種類毎に荷物の内容を並べ替える (標準設
+            定はオン)。
+
+          sound
+            あなたのキャラクターが聞いたものに関するメッセージを表示する(標
+            準設定はオン)。これはコンピューターの音声出力機能とは何の関係も
+            ないことに注意すること。このオプションは部分的にだけプレイ ヤー
+            の 制御下にある。例えば、眠っている間はこのオプションは自動的に
+            オフにされ、目覚めるとオンになる。
+
+          sparkle
+            怪物(やあなた)が攻撃を受け、それに抵抗した場合に画面効果を表 示
+            する (標準設定はオン)。
+
+          standout
+            怪物と``--More--''を太字で表示する(標準設定はオフ)。
+
+          suppress_alert
+            前 のバージョンから変更された機能に対して注意を促すメッセージを
+            表示しないようにする SLASH'EM のバージョンを設 定 す る。  ( 例:
+            ``suppress_alert:0.0.6'') 例のように指定すると 0.0.6 以前に変更
+            された機能に対する注意メッセージは表示されない。
+
+          tiles
+            This option may be set to the name of a tile set to use,  or
+            specified  as ``notiles'' to disable the use of tiles. Not all
+            windowing interfaces support this option. The tile set named 
+            must also be defined. See the section on tile sets for more
+            information on that.
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              43
+
+
+
+          time
+            最下行にゲームで経過した時間をターン数で表示する(標準設定 は オ
+            フ)。
+
+          timed_delay
+            爆 発や物体の移動など、効果を表示するためにちょっと時間待ちする
+            とき、特殊なキャラクタを画面に送るかわりにタイマーを使用す る。
+            (tty  インタフェースにのみ適用される。 X11 と GTK インタフェース
+            は常にタイマーを使用する。標準設定はタイマーによる時間待ちが組み
+            込まれているならばオン)
+
+          tombstone
+            死んだとき墓石を表示する(標準設定はオン)。
+
+          toptenwin
+            ゲーム終了時の表示を標準出力のかわりにSLASH'EMのウィンドウに表示
+            する (標準設定はオフ)。このオプションを設定するとウィンドウを使
+            うバージョンの SLASH'EM では起動した親ウィンドウとは別のウィンド
+            ウにスコアリストが表示される。しかし、スコアリストはゲームが 終
+            了したあとターミナルやウィンドウには残らない。
+
+          traps
+            罠の種類を表示するのに使用するキャラクタを指定する。(標準設定は
+            ``^^^^^^^^^^^^^^^^^"^^^^'').  traps オプションは標準設定の文 字
+            の代わりに罠を描くのに使用する 1 から 22 文字の文字列を書く。こ
+            の文字列は dungeon オプションと同じ処理をする。この 文 字 列 は
+            dungeon オプションと同様に処理される。
+
+            シ ン ボルの順序は、 arrow trap(矢の罠), dart trap(投げ矢の罠),
+            falling rock trap(岩落しの罠), squeaky board(きし む 板),  bear
+            trap( 熊の罠), land mine(地雷), rolling boulder trap(落岩の罠),
+            sleeping gas trap(睡眠ガスの罠), rust trap( 腐 食 の 罠),  fire
+            trap( 火 の 罠),  pit( 落し穴), spiked pit(トゲだらけの落し穴),
+            hole(穴), trap door(落し扉), teleportation trap(瞬間移動の 罠),
+            level teleporter(別の階への瞬間移動の罠), magic portal(魔法の入
+            口), web(くもの巣), statue trap(彫像の罠), magic trap( 魔 法 の
+            罠),  anti-magic  field( 反魔法空間の罠), polymorph trap(変化の
+            罠)。
+
+            `O' コマンドで設定することはできない。
+
+          travel
+            トラベルコマンドを有効にする(標準設定はオン)。このオプション を
+            オ フにすることによって、うっかり地図ウィンドウをクリックするこ
+            とによって、望まない移動をしようとすることを防ぐことができる。
+
+          verbose
+            ゲーム中のコメントを詳細に表示する(標準設定はオン)。
+
+          windowtype
+            ウインドウシステムを使用するかどうかを「tty」または「X11」で 選
+            択する（標準設定はバージョンによる）。 `O' コマンドで設定するこ
+            とはできない。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              44
+
+
+          wolfname
+            スタート時の狼の名前(例: catname:Morris)。 `O' コマンドで設定す
+            ることはできない。
+
+
+          9.5.  Tile sets
+
+               For  those windowing ports which support tiles (multicolored
+          pictures instead of the traditional characters), tile sets can be
+          defined  using  a  line  in  the  configuration  file that begins
+          ``TILESET=''. There should be one tile set  definition  line  for
+          each  available tile set. Once defined, tile sets can be selected
+          for initial display (using the tiles option) or  dynamically  se-
+          lected  during  the  game (for those windowing ports that support
+          this).
+
+               A ``TILESET'' line has the same syntax as an ``OPTION'' line
+          but with the following options available:
+
+          name
+            The name of the tile set  (for  selection).  This  can  be  any
+            string of characters excluding the comma. It must be specified.
+
+          file
+            The name of the file which contains the tile set. This must  be
+            specified.
+
+          transparent
+            Marks  a  tile set as being transparent (as opposed to opaque).
+            Transparent tile sets allow eg., monsters to  be  displayed  on
+            top  of  the background.  Tile sets must be designed to be used
+            in this way in order to achieve meaningful results. This option
+            is  ignored by windowing ports which do not support transparen-
+            cy.
+
+          pseudo3D
+               Marks  a  tile  set as being designed for use with Mitsuhiro
+            Itakura's pseudo-3D display algorithm. They are assumed to have
+            an offset-X value equal to one third of the  total  tile  width
+            and  an  offset-Y  value  equal  to  one half of the total tile
+            height. Such tile sets are not compatible  with  standard  tile
+            sets  and  while amusing effects can be created by setting this
+            option incorrectly, nothing useful can be  achieved.  Windowing
+            ports  that  do  not support pseudo-3D display will ignore tile
+            sets with this option set.
+
+
+          9.6.  ウインドウシステム版専用カスタマイズオプション
+
+               以下はあなたが選択したウィンドゥタイプの特性をカスタマイズし
+          て 変更するために用いる様々なオプションの説明である。長すぎる文字
+          列は適当に切り詰められる。全てのウィンドゥタイプに対してこれら 全
+          て のオプションが有効というわけではない。これらのオプションが設定
+          されたとき、もしウィンドゥタイプがその設定を受け付けるなら、そ う
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              45
+
+
+          さ れ る。 もし受け付けられないなら、単に無視される。現在のウィン
+          ドゥタイプで対応しているオプションは、オプション一覧表示 (`O') で
+          表示される。一部のオプションは`O'コマンドで動的に変更できる。
+
+          align_message
+            メッセージウィンドウをどこに置くか(top, bottom, left, right)
+
+          align_status
+            ステータスウィンドウをどこに置くか(top, bottom, left, right)
+
+          ascii_map
+            可能ならASCIIキャラクタマップを表示する
+
+          color
+            怪物、物体、洞窟の構成要素をカラーで表示する
+
+          eight_bit_tty
+            8 ビットキャラクタ(例えば traps オプションで指定したもの)をその
+            ままターミナルに表示する(標準設定はオフ)。
+
+          font_map
+            マップウィンドウを表示するフォント名
+
+          font_menu
+            メニューを表示するフォント名
+
+          font_message
+            メッセージを表示するフォント名
+
+          font_status
+            ステータスを表示するフォント名
+
+          font_text
+            テキストを表示するフォント名
+
+          font_size_map
+            マップウィンドウを表示するフォントサイズ
+
+          font_size_menu
+            メニューウィンドウを表示するフォントサイズ
+
+          font_size_message
+            メッセージウィンドウを表示するフォントサイズ
+
+          font_size_status
+            ステータスウィンドウを表示するフォントサイズ
+
+          font_size_text
+            テキストウィンドウを表示するフォントサイズ
+
+          fullscreen
+            ウィンドウでなく画面全体で表示しようと試みる
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              46
+
+
+
+
+          hilite_pet
+            ペットを目立つように表示する(標準設定はオフ)。このオプション の
+            振 る舞いは使っているウィンドウシステムに依存する。テキストウィ
+            ンドウの場合、高輝度か反転が主に用いられる。タイルの場合、一 般
+            的にはペットの近くにハートマークが表示されるか、 赤い枠でペット
+            が囲まれる。
+
+          large_font
+            大きいフォントを使う。
+
+          map_mode
+            指定された方法でマップを表示する。
+
+          mouse_support
+            入力と移動にマウスを使えるようにする。
+
+          player_selection
+            キャラクター選択時にダイアログボックスや確認画面を用いる
+
+          popup_dialog
+            入力時にポップアップダイアログボックスを用いる
+
+          preload_tiles
+            タ イ ル を メ モリに予め読み込んでおく。例えば、プロテクトモー
+            ドMSDOS版の場合、ゲーム開始時にタイルを RAM に予め読み込むか ど
+            う かを制御する。予め読み込むとタイルグラフィックの性能は向上す
+            るが、より多くのメモリを消費する (標準設定はオン)。 `O' コマ ン
+            ドで設定することはできない。
+
+          scroll_amount
+            scroll_margin  オプションで指定された位置に来たときに、どれだけ
+            の数スクロールさせるかを指定する。
+
+          scroll_margin
+            ウィンドウの端からここで指定されたマス数にあなたまたはカーソ ル
+            が移動したときに、画面をスクロールさせる。
+
+          softkeyboard
+
+          splash_screen
+            起動時にスプラッシュスクリーンを表示する(標準設定はオン)
+
+          tiled_map
+            可能ならタイルマップを表示する
+
+          tile_file
+            標準設定を上書きする別のタイルファイルの名前
+
+          tile_height
+            タイルが表示できる環境でのタイルの高さ
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              47
+
+
+
+          tile_width
+            タイルが表示できる環境でのタイルの幅
+
+          use_inverse
+            ゲームが指定したときに画面を反転する
+
+          vary_msgcount
+            メッセージウィンドウに一度に表示するメッセージの数
+
+          windowcolors
+            可能ならウィンドウを指定した前景色/背景色で表示する
+
+          wraptext
+
+          9.7.  プラットフォーム固有の設定オプション
+
+               以下は特定のプラットフォームでカスタマイズや振る舞いの変更を
+          するために用いられるオプションの説明である。
+
+          altkeyhandler
+            キー入力を扱う DLL を選択する(Win32 tty SLASH'EM のみ)。 DLL  の
+            名 前は、.dll の拡張子やパス抜きで指定する。 `O' コマンドで設定
+            することはできない。
+
+          altmeta
+            (標準設定はオン。 AMIGA SLASH'EM のみ)。
+
+          BIOS
+            高速に画面を書き換え、移動にカーソルキーを使えるようにキー ボー
+            ド を読むために、 IBM-PC 互換の BIOS ROM を使用しているマシンで
+            BIOS コールを使用する。 (標準設定はオフ。OS/2 , PC, およ び  ST
+            SLASH'EM のみ)
+
+          flush
+            (標準設定はオフ。 AMIGA SLASH'EM のみ)。
+
+          MACgraphics
+            (標準設定はオン。 Mac SLASH'EM のみ)。
+
+          page_wait
+            (標準設定はオン。 Mac SLASH'EM のみ)。
+
+          rawio
+            raw(cbreak でない) モードを使用して、より高速な出力と問題の起こ
+            らない入力を実現する (MS-DOS ではプリンタがないにも 関 わ ら ず
+            `^P'  をプリンタ出力のトグルとみなしてしまうことがある) (標準設
+            定はオフ)。注意: DEC Rainbow ではこれがオンのときはハングアップ
+            してしまう。 `O' コマンドで設定することはできない。
+
+          soundcard
+            (標準設定はオン。 PC SLASH'EM のみ)。 `O' コマンドで設定すること
+            はできない。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              48
+
+
+
+          subkeyvalue
+            (Win32 tty SLASH'EM のみ)。国際キーボードの問題を補正するのを 助
+            けるために、 OS が SLASH'EM に返すキー入力の値を変更するために使
+            用する。 OPTIONS=subkeyvalue:171/92 とすると、もともと 171 が返
+            されようとしていた場合、 SLASH'EM に 92 を返す。必要なら、複数の
+            subkeyvalue 行を設定ファイルに書いてもよい。 `O' コマンドで設定
+            することはできない。
+
+          video
+            使 用するビデオモードを設定する(PC SLASH'EM のみ)。値は `autode-
+            tect', `default', `vga' のいずれかである。 `vga' (ま た は  VGA
+            ハードウェアがあるときに`autodetect')に設定すると、表示にタイル
+            を用いる。 `O' コマンドで設定することはできない。
+
+          videocolors
+            NO_TERMを使用しているPCシステムのカラーパレットをセットする (標
+            準設定は「4-2-6-1-5-3-15-12-10-14-9-13-11」)(PC SLASH'EM のみ)。
+            シンボルの順番は、赤・緑・茶色・青・マゼンタ・シアン・輝く 白・
+            輝く赤・輝く緑・黄色・輝く青・輝くマゼンタ・輝くシアン。 `O' コ
+            マンドで設定することはできない。
+
+          videoshades
+            3 段階の利用可能なグレイスケールを設定する (標準設定 は  ``dark
+            normal  light''  PC  Nethackのみ)。もしゲーム画面が見にくい場合
+            は、３つのスケールを調整してみること。もしこれでうまく い か な
+            かったら、!colorを試してみること。 `O' コマンドで設定することは
+            できない。
+
+          9.8.  自動拾い例外の設定
+
+               実験的コンパイル時オプションとして AUTOPICKUP_EXCEPTIONS  が
+          あ る。 こ のオプションを定義してコンパイルされたバイナリの場合、
+          autopickup オプションの振る舞いを pickup_types オプションを使って
+          より洗練させることができる。
+
+               autopickup_exception  行を設定ファイルに書くことで、何かを拾
+          おうとするときにチェックするべきパターンを定義できる。
+
+          autopickup_exception
+            pickup_types オプションの例外を設定する。  autopickup_exception
+            オ プ ショ ンはあなたの位置にある物体の説明の単数形に一致するパ
+            ターンを指定する。これは 1-80 文字の文字列であるべきである。
+
+               パターンでは以下の特殊文字が使える。
+
+                 *--- 0 以上の文字にマッチする。
+                 ?--- 任意の 1 文字にマッチする。
+
+               さらに、文字列パターンの先頭に置いた場合に特別扱いされる文字
+          もある。
+
+               < - 以下のパターンに一致する物体は常に拾う。
+               > - 以下のパターンに一致する物体は決して拾わない。
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              49
+
+
+
+
+               `O' オプションで設定することもできるが、設定はセーブ・ロード
+          したときには保存されない。
+
+               以下は autopickup_exceptions の例である。
+
+
+          上記の例の最初のものは、全ての矢を自動的に拾う。二番目の例は、 死
+          体 は自動拾いの例外とする。最後の例は、呪われているとわかっている
+          ものは自動拾いの例外とする。 `決して拾わない'ルールは`常に 拾 う'
+          ルールに優先する。
+
+          9.9.  音声の設定
+
+               メッセージウィンドウに表示されたメッセージがユーザー定義のパ
+          ターンと一致したときに特定の音声ファイルを鳴らすことがで き る プ
+          ラットフォームもある。現在のところ、Qt, win32tty, win32gui がユー
+          ザー音声に対応している。
+
+               ユーザー音声とメッセージの関連付けに関する設定ファイル項目は
+          以下のとおりである。
+
+          SOUNDDIR
+            音声ファイルのあるディレクトリ
+
+          SOUND
+            音 声ファイルとユーザーが指定するメッセージパターンを関連付ける
+            項目。各 SOUND 項目は以下の項目に分解される。
+
+                 MESG       - メッセージウィンドウ指定 (3.4 ではただ一つだけに対応している)
+                 pattern    - マッチするパターン
+                 sound file - 鳴らす音声ファイル
+                 volume     - 音声ファイルを鳴らすときの音量
+
+               パターンの正確な書式はプラットフォームが ``正規表現'' を用い
+          る か  SLASH'EM の内蔵パターンマッチング機能を用いるかによって変わ
+          る。 ``正規表現'' マッチングは SLASH'EM 内蔵パターンマッチングより
+          洗 練されているが、サードパーティライブラリが必要なプラットフォー
+          ムもある。 ``正規表現'' に関する説明はどこか他のところを参照の こ
+          と。 どちらのパターンマッチングが用いられているかは #version コマ
+          ンドで確認できる。
+
+               SLASH'EM の内蔵パターンマッチングルーチンは以下の特殊文字を用
+          いる。
+
+                 *--- 0 個以上の文字にマッチする。
+                 ?--- 任意の 1 文字にマッチする。
+
+               以下は SLASH'EM 内蔵パターンマッチング機能を用いた例である。
+
+                   SOUND=MESG "*chime of a cash register*" "gong.wav" 50
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              50
+
+
+
+          こ こ で は "chime of a cash register" を含むメッセージに反応して
+          "gong.wav" を鳴らす。設定ファイルには複数の SOUND 設定を書くこ と
+          ができる。
+
+          9.10.  視覚障害者がSLASH'EMをプレイするための設定
+
+               SLASH'EM  は洞窟の地図を作るのに標準の ASCII キャラクターだけ
+          を使うように設定することもできる。これ に よ り、  MS-DOS   版 の
+          SLASH'EM  は音声合成または点字技術を用いれば目の不自由な人でも完全
+          にプレイ可能である。プレイヤーはこれらの画面読み取りシステムに 関
+          す る十分な知識が必要で、上下左右に一文字ずつ移動する方法を知らな
+          ければならないだろう。画面読み取りシステムの検索能力を知ること も
+          か なり価値がある。プレイする前にこのガイドブックを十分に読めば、
+          画面のレイアウトがどんな感じかがわかるだろう。また、 PC カーソ ル
+          の 位 置 を突き止めることができる必要がある。これは自分のキャラク
+          ターの位置を示している。 `@'は他のヒューマノイドを表わすのにも 用
+          いられるので、自分の位置を探すのに`@'を検索するだけでは不十分であ
+          る。さらに、あなたが見ている位置と PC カーソルの位置の物理的な 行
+          と 桁を知らせる機能が必要だろう。この機能はスクリーン全体にどのよ
+          うなアイテムがあるかを判別するのに便利である。
+
+               慣れたユーザーなら defaults.nhを修正することは難しくないだろ
+          うが、初心者は少しひるんでしまう仕事かもしれない。 SLASH'EM の全て
+          の公式配布には NHAccess.nhというファ イ ル が 含 ま れ て い る。
+          default.nh ファイルをこのファイルと入れ替えることにより、目の不自
+          由な人がプレイできるような設定になる。ファイルを修正する こ と や
+          ゲー ムそのものに慣れたなら、より好みに合うように設定を変更したい
+          と思うことだろう。そのための説明は NHAccess.nh そのものに含まれて
+          い る。ゲームのアクセシビリティに最も影響を与える設定は以下のもの
+          である:
+
+          IBMgraphics
+            このオプションをコメントアウトすることによって IBM グラフィック
+            を無効にする。
+
+          menustyle:traditional
+            これは音声合成システムを利用する助けになる。
+
+          number_pad
+            多 くの発声プログラムは number-pad を画面の確認に用いる。この場
+            合、 number_pad オプションをオフにして、伝統的な Rogue 風コマン
+            ドを使うこと。
+
+          Character graphics
+            defaults.nh  ファイルの下の方にある全てのキャラクターグラフィッ
+            ク設定をコメントアウトする。これらのほとんどは SLASH'EM の標準で
+            あ る、 標準 ASCII キャラクターを用いた洞窟の表現を拡張キャラク
+            ターセットのより凝ったキャラクターで置き換える。これらのキャ ラ
+            クターは画面読み取りシステムを煩わせるだろう。
+
+          10.  得点
+
+               SLASH'EM は設定によって、あなたの機械における高得点の一覧また
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              51
+
+
+
+
+          は高得点者の一覧を作成する。後者の設定になっている場合、ゲーム を
+          最 後まで終えた場合を除きそのマシンの 1 つのアカウントにつき 1 つ
+          だけしかこの一覧には載らない。あなたがこの一覧に載っている他の 誰
+          か より高い得点を取ったとき、もしくはあなたの前の得点より高い得点
+          を取ったときにのみ、その一覧のしかるべき位置にあなたの名 前 が 載
+          る。得点が何個まで載るかもコンパイル時に設定できる。
+
+               得点は主に経験値、戦利品、到達した階とゲームの終わり方に基づ
+          いている。ゲームを放棄した場合には持っている金を全額手にして脱 出
+          で きる。しかし恐怖の迷宮の中で殺された場合には、亡骸が発見される
+          と持っている金の 90% だけがギルドに伝えられる(冒険者は亡骸を発 見
+          した場合には手数料を取ることが知られている)。従って怪物にさらに一
+          撃を加えて運あらば生き残らんとするか、放棄してその時点で持って い
+          る 物で終了するかはあなたが決めることである。放棄した場合はすべて
+          の金を手にすることができる。しかし戦って生き残ればさらに多くを 得
+          ることができるかも知れない。
+
+               単に現時点での高得点者・高得点の一覧を見たい場合にはほとんど
+          のバージョンでは nethack -s all と入力すればよい。
+
+
+          11.  探検モード
+
+               SLASH'EM は複雑で難しいゲームである。初心者は生き残るすべを知
+          ら ないことに気づき、恐怖におじけづいてしまうかもしれない。しかし
+          恐れることはない。冒険する洞窟に「探検」もしくは「発見」モード が
+          あ る場合には、高得点の一覧に載らないというとるに足らないデメリッ
+          トと引き替えに前のセーブファイルを残しておけたり不死身となれた り
+          するのである。
+
+               探 検モードに入るには 2 通りの方法がある。1 つはゲームの開始
+          時に -X スイッチを付けることである。もう 1 つはゲームのプレイ中に
+          `X'  コマンドを入力することである。探検モードで得られる他の利点は
+          大胆な読者諸君自ら確かめて欲しい。
+
+
+          12.  クレジット
+
+               最初の hack というゲームは、バークレイ版 UNIX のゲーム rogue
+          を モデルとしている。このドキュメントの大部分は Michael C. Toy と
+          Kenneth C. R. C. Arnold の手になる A Guide  to  the  Dungeons  of
+          Doom(運命の洞窟への招待) を図々しくも盗用したものである。また一部
+          は Ken Arromdee による Further Exploration  of  the  Dungeons  of
+          Doom(運命の洞窟の深部への探検) から採っている。
+
+               SLASH'EM は文字どおり何十人もの人々の手によって完成された。以
+          下はゲームの開発の過程での主な出来事である。
+
+
+               Jay Fenlason は Kenny Woodland, Mike Thome, Jon Payne らの助
+          けを得て、最初の Hack を書いた。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              52
+
+
+
+               Andries Brouwer はプログラムを大幅に書き換えて Hack を元とは
+          かなり異なったゲームに仕立て上げ、 UNIX マシン用の(少なく と も)3
+          バージョン(1.0.1、1.0.2、1.0.3)を Usenet で発表した。
+
+               Don  G.  Kneller は Hack 1.0.3 を Microsoft C を使用して MS-
+          DOS へ移植し PC HACK 1.01e を作成した。バージョン 1.03g では  DEC
+          Rainbow   のグラフィックをサポートし、続いて少なくともあと 4 つの
+          バージョン(3.0、3.2、 3.51、3.6)を作成した。
+
+               R. Black は PC HACK 3.51 を Lattice C  を 使 用 し て  Atari
+          520/1040ST へ移植し ST Hack 1.03 を作成した。
+
+               Mike  Stephenson はこれらのいろいろなバージョンを再び 1 つに
+          統合し、多くの追加要素と合わせて NetHack バージョン 1.4 を作成 し
+          た。さらに彼は何千人もの人々に作業を分担して NetHack 1.4 の拡張と
+          デバッグを行い、 NetHack バージョン 2.2 と 2.3 を発表した。
+
+               さらにその後、Mike は Ken Arromdee, Jean-Christophe  Collet,
+          Steve  Creps, Eric Hendrickson、Izchak Miller、John Rupley、 Mike
+          Threepoint、Janet Walz を含むチームを率いてゲームの大幅な書き直し
+          を行ない、 NetHack 3.0c を作成した。
+
+               NetHack  3.0 は Eric R. Smith によって Atari へ、 Timo Haku-
+          linen によって OS/2 へ、 David Gentzel によって VMS へ移 植 さ れ
+          た。 この 3 人と Kevin Darcy はその後主力開発チームに加わり、 3.0
+          のその後のいくつかの改訂版を作成した。
+
+               Olaf Seibert は NetHack 2.3 と 3.0 を Amiga へ 移 植 し た。
+          Norm Meluch、Stephen Spackman、Pierre Martineau は PC NetHack 3.0
+          のためのオーバーレイルーチンを設計した。 Johnny Lee   は  NetHack
+          3.0 を Macintosh へ移植した。彼らは他のさまざまな洞窟の主たちとと
+          もに PC、Macintosh、Amiga の移植版の拡張を続け、 3.0 のその後のい
+          くつかの改訂版を作成した。
+
+               A scant one month before the next major version release of
+          NetHack, two adventurous souls undertook their own modification
+          to the sacred NetHack formula. Tom Proudfoot and Yuval released
+          Nethack++,  which was rapidly renamed Nethack--,  contained new
+          monsters,  items and other miscellaneous modifications.
+
+               Mike Stephensonをリーダーとし、Izchak MillerとJanet Walzの助
+          けによって Ken Arromdee,  David  Cohrs,  Jean-Christophe  Collet,
+          Kevin Darcy, Matt Day, Timo Hakulinen, Steve Linhart, Dean Luick,
+          Pat Rankin, Eric Raymond, Eric Smith を含む制作チームが 3.0の徹底
+          的 な見直しを行なった。彼らはゲームデザインを再構築し、コードの大
+          部分を書き直した。複合ダンジョン、新しいディスプレイ、それぞれ の
+          キャ ラクター毎の特別のクエスト、新しいエンドゲームとその他の多く
+          の新しい要素を追加し、 NetHack 3.1を制作した。
+
+               Ken Lorber, Gregg Wonderly, Greg Olson は  Richard  Addison,
+          Mike Passaretti, Olaf Seibert の助けを借りて Amiga 用 NetHack 3.1
+          を作成した。
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              53
+
+
+
+               Norm Meluch と Kevin Smolkowski  は  Carl  Schelin,  Stephen
+          Spackman,  Steve  VanDevender, Paul Winner の助けを借りて NetHack
+          3.1 を PC に移植した。
+
+               Jon Watte と Hao-yang Wang は Ross Brown, Mike Engber, David
+          Hairston,  Michael  Hamel,  Jonathan  Handler,  Johnny  Lee,  Tim
+          Lennan, Rob Menke, Andy Swanson の助けを借りて MPW 用の Macintosh
+          用  NetHack 3.1 を作成した。その作成中に、Barton House は Think C
+          用を加えた。
+
+               Timo Hakulinen は NetHack 3.1 を OS/2 に 移 植 し た。  Eric
+          Smith   は NetHack 3.1 を Atari に移植した。 Pat Rankin は Joshua
+          Delahunty の助けを借りて VMS 版 NetHack 3.1 を作成した。  Michael
+          Allison は NetHack 3.1 を Windows NT に移植した。
+
+               Dean  Luick  は David Cohrs の助けを借りて X11 用 NetHack3.1
+          を作成した。 Warwick Allison は Atari 用に NetHack のタイ ル バー
+          ジョ ン を 作成した。彼は後にタイルを開発チームに寄贈し、タイルサ
+          ポートは他のプラットフォームにも追加された。
+
+               Time passed,  and Nethack-- was ported to 3.11 by Chris.
+
+               Stephen  White  then  released his own modification known as
+          Nethack Plus,  which  contained  new  character  classes.   Unbe-
+          knownst  to  the  world at large,  Tom Proudfoot took this source
+          and combined it with his Nethack--.  Stephen White went on to add
+          weapon  skills,   which  were eventually integrated into the next
+          version of Nethack,  and other features.
+
+               In February 1996,  Tom Proudfoot released SLASH V1.  Includ-
+          ing  part  of Stephen White's Nethack Plus and his own Nethack--,
+          leaving unmentioned his own slew of further modifications,   this
+          is perhaps the best known of the Nethack modifications.  Six ver-
+          sions of this,  ending with SLASH V6,  are known to exist.
+
+               Michael Allison, Ken Arromdee, David Cohrs,  Jessie  Collet,
+          Steve  Creps,  Kevin  Darcy,  Timo Hakulinen, Steve Linhart, Dean
+          Luick, Pat Rankin, Eric Smith, Mike Stephenson, Janet  Walz,  and
+          Paul  Winner からなる 3.2の開発チームは バージョン 3.2 を 1996 年
+          4 月にリリースした。
+
+               バージョン 3.2 は開発チームが結成されてから 10 周年のもの で
+          あった。彼らのゲームへの貢献について記すと、13 人の初期の開発チー
+          ム全員はこのリリースの開始時の最初の時点までチームに残ってい た。
+          が、 3.1.3 から 3.2 の間に、開発チームの創始者の一人である Izchak
+          Miller博士が癌と診断され、亡くなった。このリリースは開発チーム お
+          よび移植チームから彼に捧げられた。
+
+               Larry Stewart-Zerba set along a different track - to enhance
+          the spellcasting abilities of the Wizard.   Thus, in April  1996,
+          he  released  version  0.1 of the Wizard Patch.  By July,  he was
+          joined by Warwick Allison and version 0.4 of the Wizard Patch was
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              54
+
+
+
+
+          released.  The final update came in April 1997,  with the release
+          of Wizard Patch 1.0.
+
+               Warwick Allison also ported NetHack to use the Qt interface.
+
+               SLASH  V6  was picked up by Enrico Horn, who managed to syn-
+          chronize it with the 3.2 source.  The new  SLASH  4.1.2  was  re-
+          leased  as  far back as November 1996 went through at least 4 ed-
+          itlevels (E5, E6, E7) with  the  latest  version  being  4.1.2E8,
+          synchronized with Nethack 3.2.2 and the Blackmarket option avail-
+          able,  released in June 1997.
+
+               Nathan La began the arduous task of drawing  tiles  for  the
+          SLASH monsters.
+
+               Kentaro Shirakata ported SLASH 4.1.2E8 to Unix.
+
+               Lief Clennon ported SLASH 4.1.2E8 to OS/2 EMX.
+
+               Romain Dolbeau ported SLASH 4.1.2E8 to Macintosh.
+
+               Warren  Cheung combined SLASH 4.1.2 and Wizard Patch to cre-
+          ate SLASH'EM 0.1 in November 1997.  Several  revisions  including
+          new  spells  and  other  additions  led  eventually  to  SLASH'EM
+          0.0.5E7F1. Steven Uy generously made additional modifications.
+
+               Dirk Schoenberger continued updating the SLASH/SLASH'EM mon-
+          ster tiles.  He also ported SLASH'EM to Linux.
+
+               Lief Clennon ported SLASH'EM to OS/2 EMX.
+
+               Kevin  Hugo  ported  SLASH'EM  to  Macintosh,  and also con-
+          tributed additional changes and improvements.
+
+               Robin Johnson finished the arduous task of drawing tiles for
+          the  SLASH'EM monsters.  He also contributed many more new tiles.
+
+               Kevin は後に開発チームに加わり、これらのアイデアを NetHack 
+          3.3 に統合した。
+
+               JNetHack (the Japanese version of NetHack) has been around
+          since at least 1994, developed by Issei Numata and others. The
+          GTK interface was written for this variant and released in 1999.
+
+               Mitsuhiro Itakura headed a team which began the process of
+          redrawing the NetHack tiles in 8-bit color at 32x32 pixels.
+
+               3.2  の最終バージョンはバグ修正版である 3.2.3 である。これは
+          2000 年問題対策のために 3.3.0 と同時に 1999 年 12 月に発 表 さ れ
+          た。
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              55
+
+
+
+
+               Michael  Allison,  Ken Arromdee, David Cohrs, Jessie Collet,
+          Steve Creps, Kevin Darcy, Timo Hakulinen, Kevin Hugo, Steve  Lin-
+          hart,  Ken  Lorber,  Dean  Luick,  Pat  Rankin,  Eric Smith, Mike
+          Stephenson, Janet Walz, Paul Winner からなる 3.3 の開発チー ム は
+          1999 年 12 月に 3.3.0を、 2000 年 8 月に 3.3.1 をリリースした。
+
+               バー ジョン 3.3 は多くの新要素を提供した。まず、種族と職業を
+          分離した最初のバージョンである。職業としてのエルフは削除され、 種
+          族 の一つとなった。また、ドワーフ、ノーム、オークが種族として追加
+          された。モンクとレンジャーの二つが職業として追加された。さら に、
+          動 物に乗ることが出来る最初のバージョンでもあり、発見された全ての
+          バグをウェブサイトで公表した最初のバージョンでもある。バグリス ト
+          が 順調に伸びていったにも関わらず、 3.3 は 1 年半続いたことで十分
+          安定していたことを証明した。
+
+               3.4 開発チームは Michael Allison, Ken Arromdee, David Cohrs,
+          Jessie  Collet,  Kevin  Hugo, Ken Lorber, Dean Luick, Pat Rankin,
+          Mike Stephenson, Janet Walz, and Paul Winner で開始され、 NetHack
+          3.4.0 リリース直前の 2002 年 3 月に  Warwick Allison が加わった。
+
+               バージョン 3.3 と同様に、様々な人々が NetHack の色々なプラッ
+          トフォームへの移植を行なってくれた。
+
+               Pat Rankin は 3.4 の VMS への移植を担当した。
+
+               Michael  Allison は MS-DOS 版の NetHack 3.4 を管理している。
+          Paul Winner と Yitzhak Sapir が手伝っている。
+
+               Dean Luick, Mark Modrall, Kevin Hugo は 3.4 の Macintosh  へ
+          の移植と拡張を担当した。
+
+               Michael  Allison,  David  Cohrs, Alex Kompel, Dion Nicolaas,
+          Yitzhak Sapir は 3.4 の Microsoft Windows プラットフォームへの 移
+          植 と 拡 張 を 担当した。 Alex Kompel は Windows 版への新しいグラ
+          フィックインターフェースを提供した。 Alex Kompel はまた、3.4.1 の
+          Windows CE 版を提供した。 Ron Van Iwaarden は 3.4 の OS/2 版を 管
+          理している。
+
+               3.3.1  で復活した Amiga への移植と拡張は Janne Salmijarvi と
+          Teemu Suikki が行っている。
+
+               3.3.1 で復活した Atari 版は Christian ``Marvin'' Bressler が
+          管理している。
+
+               Ken  Lorber  によって管理されている NetHack のウェブサイトが
+          http://www.nethack.org/ にある。
+
+               Warren Cheung combined SLASH'EM 0.0.5E7F1 and NetHack 3.3 to
+          create SLASH'EM 0.0.6 and continues to maintain the DOS and
+          Microsoft Windows ports.
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              56
+
+
+
+
+               J. Ali Harlow incorporated the GTK interface and Mitsuhiro
+          Itakura's 32x32 tileset into SLASH'EM 0.0.6 and maintains the UNIX
+          port of SLASH'EM.  Peter Makholm  maintains the Debian package.
+
+               Paul Hurtley maintains the MAC port of SLASH'EM.
+
+                    - - - - - - - - - -
+
+               時々ネットワークの世界のどうしようもない連中が、ゲームの改良
+          の 手助けをしようとしてとりわけ興味をそそるような修正を送ってよこ
+          す。洞窟の神々は、ときにはこういった悪党のうちでも最も邪悪な連 中
+          の名前を洞窟の主たちの一覧としてここに記すのだ。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
+
+
+          SLASH'EM Guidebook                                              51
+
+
+
+                    Adam Aronow            Izchak Miller         Mike Stephenson
+                    Alex Kompel            J. Ali Harlow           Norm Meluch
+                   Andreas Dorn              Janet Walz            Olaf Seibert
+                    Andy Church           Janne Salmijarvi        Pasi Kallinen
+                   Andy Swanson        Jean-Christophe Collet       Pat Rankin
+                   Ari Huttunen            Jochen Erwied           Paul Winner
+                   Barton House             John Kallen          Pierre Martineau
+                Benson I. Margulies         John Rupley             Ralf Brown
+                     Bill Dyer              John S. Bien            Ray Chason
+                 Boudewijn Waijers           Johnny Lee          Richard Addison
+                     Bruce Cox               Jon W{tte            Richard Beigel
+                  Bruce Holloway          Jonathan Handler      Richard P. Hughey
+                  Bruce Mewborne          Joshua Delahunty          Rob Menke
+                   Carl Schelin            Keizo Yamamoto         Robin Johnson
+                    Chris Russo              Ken Arnold         Roderick Schertler
+                    David Cohrs             Ken Arromdee          Roland McGrath
+                  David Damerell             Ken Lorber          Ron Van Iwaarden
+                   David Gentzel           Ken Washikita          Ronnen Miller
+                  David Hairston            Kevin Darcy             Ross Brown
+                    Dean Luick               Kevin Hugo          Sascha Wostmann
+                     Del Lamb               Kevin Sitze            Scott Bigham
+                   Deron Meranda          Kevin Smolkowski       Scott R. Turner
+                   Dion Nicolaas            Kevin Sweet          Stephen Spackman
+                  Dylan O'Donnell           Lars Huttar           Stephen White
+                    Eric Backus             Malcolm Ryan           Steve Creps
+                 Eric Hendrickson          Mark Gooderum          Steve Linhart
+                   Eric R. Smith            Mark Modrall        Steve VanDevender
+                  Eric S. Raymond         Marvin Bressler          Teemu Suikki
+                   Erik Andersen            Matthew Day             Tim Lennan
+                 Frederick Roeber           Merlyn LeRoy          Timo Hakulinen
+                    Gil Neiger            Michael Allison            Tom Almy
+                    Greg Laskin             Michael Feir             Tom West
+                    Greg Olson             Michael Hamel          Warren Cheung
+                  Gregg Wonderly          Michael Sokolov        Warwick Allison
+                   Hao-yang Wang            Mike Engber           Yitzhak Sapir
+                   Helge Hafting            Mike Gallop
+               Irina Rempt-Drijfhout      Mike Passaretti
+
+          ブランドと製品名は各社の商標または登録商標である。
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+          SLASH'EM 0.0.7                                  December 10, 2003
+
+
+
diff -aurN slashem-0.0.7E6F2/include/config.h jslashem-0.0.7E6F2-J0.0.8/include/config.h
--- slashem-0.0.7E6F2/include/config.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/config.h	2004-06-25 08:39:46.000000000 +0900
@@ -23,6 +23,7 @@
  *		provide it (no need to change sec#1, vmsconf.h handles it).
  */
 
+#define JNETHACK
 #define UNIX		/* delete if no fork(), exec() available */
 
 /* #define MSDOS */	/* in case it's not auto-detected */
@@ -170,6 +171,12 @@
 #endif
 
 #ifndef DEFAULT_WINDOW_SYS
+# ifdef X11_GRAPHICS
+#  define DEFAULT_WINDOW_SYS "x11"
+# endif
+#endif
+
+#ifndef DEFAULT_WINDOW_SYS
 # define DEFAULT_WINDOW_SYS "tty"
 #endif
 
@@ -183,9 +190,10 @@
  *  xpmtoppm <x11tiles.xpm | pnmscale 1.25 | pnmdepth 255 |
  *     ppmquant 90 | ppmtoxpm >x11tiles_big.xpm
  */
-/* # define USE_XPM */		/* Disable if you do not have the XPM library */
+/*# define USE_XPM*/		/* Disable if you do not have the XPM library */
 # ifdef USE_XPM
 #  define GRAPHIC_TOMBSTONE	/* Use graphical tombstone (rip.xpm) */
+#  define X11LARGETILE		/* Large tile for X11 */
 # endif
 #endif
 
@@ -197,6 +205,12 @@
  *		playground.
  */
 
+#ifdef JNETHACK
+/*#define NH_EXTENSION*/	/* Some extension for game */
+# define XI18N
+# define INSTALLCOLORMAP
+#endif
+
 #ifndef WIZARD		/* allow for compile-time or Makefile changes */
 # ifndef KR1ED
 #  define WIZARD  "wizard" /* the person allowed to use the -D option */
@@ -227,12 +241,12 @@
 
 #ifdef UNIX
 /* path and file name extension for compression program */
-# define COMPRESS "/usr/bin/compress" /* Lempel-Ziv compression */
-# define COMPRESS_EXTENSION ".Z"	     /* compress's extension */
+/* # define COMPRESS "/usr/bin/compress" */ /* Lempel-Ziv compression */
+/* # define COMPRESS_EXTENSION ".Z" */	     /* compress's extension */
 
 /* An example of one alternative you might want to use: */
-/* # define COMPRESS "/usr/local/bin/gzip" */   /* FSF gzip compression */
-/* # define COMPRESS_EXTENSION ".gz" */	     /* normal gzip extension */
+# define COMPRESS "/usr/local/bin/gzip"   /* FSF gzip compression */
+# define COMPRESS_EXTENSION ".gz"	     /* normal gzip extension */
 
 /* # define COMPRESS "/usr/bin/bzip2"	*//* bzip2 compression */
 /* # define COMPRESS_EXTENSION ".bz2"	*//* bzip2 extension */
@@ -475,6 +489,10 @@
 
 #define DISPLAY_LAYERS	/* Improved support for transparent tile sets - ALI */
 
+#ifdef JNETHACK
+/*# define USE_MAKESINGULAR */	/* Enable singularize */
+#endif
+
 /*
  * Section 5:  EXPERIMENTAL STUFF
  *
diff -aurN slashem-0.0.7E6F2/include/decl.h jslashem-0.0.7E6F2-J0.0.8/include/decl.h
--- slashem-0.0.7E6F2/include/decl.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/decl.h	2004-06-10 08:55:12.000000000 +0900
@@ -200,6 +200,9 @@
 #define KILLED_BY_AN	 0
 #define KILLED_BY	 1
 #define NO_KILLER_PREFIX 2
+#if 1 /*JP*/
+#define KILLED_SUFFIX	 3
+#endif
 E NEARDATA int killer_format;
 E const char *killer;
 E const char *delayed_killer;
diff -aurN slashem-0.0.7E6F2/include/extern.h jslashem-0.0.7E6F2-J0.0.8/include/extern.h
--- slashem-0.0.7E6F2/include/extern.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/extern.h	2004-08-05 09:33:38.000000000 +0900
@@ -1279,6 +1279,9 @@
 E const char *FDECL(locomotion, (const struct permonst *,const char *));
 E const char *FDECL(stagger, (const struct permonst *,const char *));
 E const char *FDECL(on_fire, (struct permonst *,struct attack *));
+#if 1 /*JP*/
+E const char *FDECL(jumpedthrough, (const struct permonst *,const char *));
+#endif
 E const struct permonst *FDECL(raceptr, (struct monst *));
 
 /* ### monmove.c ### */
@@ -1468,9 +1471,11 @@
 E char *FDECL(The, (const char *));
 E char *FDECL(the, (const char *));
 E char *FDECL(aobjnam, (struct obj *,const char *));
+#if 0 /*JP*//*日本語には三単現のsはない*/
 E char *FDECL(Tobjnam, (struct obj *,const char *));
 E char *FDECL(otense, (struct obj *,const char *));
 E char *FDECL(vtense, (const char *,const char *));
+#endif
 E char *FDECL(Doname2, (struct obj *));
 E char *FDECL(yname, (struct obj *));
 E char *FDECL(Yname2, (struct obj *));
@@ -1655,6 +1660,9 @@
 E void FDECL(make_blinded, (long,BOOLEAN_P));
 E void FDECL(make_sick, (long, const char *, BOOLEAN_P,int));
 E void FDECL(make_vomiting, (long,BOOLEAN_P));
+#ifdef JPEXTENSION
+E void FDECL(make_totter, (long, BOOLEAN_P));
+#endif
 E boolean FDECL(make_hallucinated, (long,BOOLEAN_P,long));
 E int NDECL(dodrink);
 E int FDECL(dopotion, (struct obj *));
@@ -1843,8 +1851,13 @@
 E void NDECL(role_init);
 E void NDECL(rigid_role_checks);
 E void NDECL(plnamesuffix);
+#if 0 /*JP*/
 E const char *FDECL(Hello, (struct monst *));
 E const char *NDECL(Goodbye);
+#else
+E const char *FDECL(Hello, (struct monst *, int));
+E const char *FDECL(Goodbye, (int));
+#endif
 E char *FDECL(build_plselection_prompt, (char *, int, int, int, int, int));
 E char *FDECL(root_plselection_prompt, (char *, int, int, int, int, int));
 
@@ -2560,6 +2573,57 @@
 
 #endif /* !MAKEDEFS_C && !LEV_LEX_C */
 
+#if 1 /*JP*/
+
+/* ### jlib.c  ### */
+
+E  int FDECL(is_kanji, (unsigned int));
+E  void FDECL(setkcode,(int));
+E  unsigned char *FDECL(e2sj, (unsigned char *));
+E  unsigned char *FDECL(sj2e, (unsigned char *));
+E  const char *FDECL(str2ic, (const char *));
+#ifdef SJIS_FILESYSTEM
+E  const char *FDECL(ic2str, (const char *));
+#endif
+E  int FDECL(jbuffer, (unsigned int, unsigned int *, void (*)(), void (*)(unsigned int), void (*)(unsigned int, unsigned int)));
+E  int FDECL(cbuffer, (unsigned int, unsigned int *, void (*)(), void (*)(unsigned int), void (*)(unsigned int, unsigned int)));
+E  void FDECL(cputchar,(int));
+E  void FDECL(jputchar,(int));
+E  void FDECL(jputs,(const char *));
+E  int FDECL(is_kanji2, (const char *,int));
+E  int FDECL(is_kanji1, (const char *,int));
+E  int FDECL(isspace_8, (int));
+E  void FDECL(split_japanese, (char *,char *,char *,int));
+E  void FDECL(jrndm_replace, (char *));
+E  const char *FDECL(joffmsg, (struct obj *, const char **));
+E  const char *FDECL(jonmsg, (struct obj *, const char **));
+
+/* ### jconj.c  ### */
+
+E  const char *FDECL(jconj, (const char *,const char *));
+E  const char *FDECL(jcan, (const char *));
+E  const char *FDECL(jcannot, (const char *));
+E  const char *FDECL(jpast, (const char *));
+E  const char *FDECL(jconj_adj, (const char *));
+
+/* ### jtrns.c ### */
+
+E  void NDECL(init_jtrns);
+E  int NDECL(dotogglelang);
+E  int NDECL(query_lang_mode);
+E  void FDECL(set_trns_mode, (int));
+E  const char *FDECL(jtrns_mon_gen, (const char *, int));
+E  const char *FDECL(jtrns_mon, (const char *));
+E  const char *FDECL(jtrns_obj, (const int, const char *));
+E  const char *FDECL(etrns_mon, (const char *));
+E  const char *FDECL(etrns_obj, (const int, const char *));
+E  char FDECL(objclass_to_sym, (const int));
+
+/*E  void FDECL(zen2han, (char *));*/
+
+#endif
+
 #undef E
 
 #endif /* EXTERN_H */
+
diff -aurN slashem-0.0.7E6F2/include/global.h jslashem-0.0.7E6F2-J0.0.8/include/global.h
--- slashem-0.0.7E6F2/include/global.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/global.h	2004-06-27 03:42:22.000000000 +0900
@@ -18,6 +18,7 @@
 
 #define NH_RECORD		"record"  /* a file containing list of topscorers */
 #define NH_RECORD_AREA	FILE_AREA_VAR
+#if 0 /*JP*/
 #define NH_HELP		"help"	  /* a file containing command descriptions */
 #define NH_HELP_AREA	FILE_AREA_SHARE
 #define NH_SHELP		"hh"		/* abbreviated form of the same */
@@ -38,13 +39,43 @@
 #define NH_LICENSE_AREA	FILE_AREA_DOC
 #define NH_OPTIONFILE	"opthelp"	/* a file explaining runtime options */
 #define NH_OPTIONAREA	FILE_AREA_SHARE
+#else /*JP*/
+#define NH_HELP		"jhelp"	  /* a file containing command descriptions */
+#define NH_HELP_AREA	FILE_AREA_SHARE
+#define NH_SHELP		"jhh"		/* abbreviated form of the same */
+#define NH_SHELP_AREA	FILE_AREA_SHARE
+#define NH_DEBUGHELP	"jwizhelp"	/* a file containing debug mode cmds */
+#define NH_DEBUGHELP_AREA	FILE_AREA_SHARE
+#define NH_RUMORFILE	"jrumors"	/* a file with fortune cookies */
+#define NH_RUMORAREA	FILE_AREA_SHARE
+#define NH_ORACLEFILE	"joracles"	/* a file with oracular information */
+#define NH_ORACLEAREA	FILE_AREA_SHARE
+#define NH_DATAFILE	"data"	/* a file giving the meaning of symbols used */
+#define NH_DATAAREA	FILE_AREA_SHARE
+#define NH_CMDHELPFILE	"jcmdhelp"	/* file telling what commands do */
+#define NH_CMDHELPAREA	FILE_AREA_SHARE
+#define NH_HISTORY		"jhistory"	/* a file giving nethack's history */
+#define NH_HISTORY_AREA	FILE_AREA_SHARE
+#define NH_LICENSE		"license"	/* file with license information */
+#define NH_LICENSE_AREA	FILE_AREA_DOC
+#define NH_OPTIONFILE	"jopthelp"	/* a file explaining runtime options */
+#define NH_OPTIONAREA	FILE_AREA_SHARE
+#endif /*JP*/
 #define NH_OPTIONS_USED	"options"	/* compile-time options, for #version */
 #define NH_OPTIONS_USED_AREA FILE_AREA_SHARE
+#if 0 /*JP*/
 #ifdef SHORT_FILENAMES
 # define NH_GUIDEBOOK       "guideboo.txt"        /* Nethack Guidebook*/
 #else
 #define NH_GUIDEBOOK       "Guidebook.txt"       /* Nethack Guidebook*/
 #endif
+#else /*JP*/
+#ifdef SHORT_FILENAMES
+#define NH_GUIDEBOOK       "jguidebo.txt"        /* Nethack Guidebook*/
+#else
+#define NH_GUIDEBOOK       "jGuidebook.txt"       /* Nethack Guidebook*/
+#endif
+#endif /*JP*/
 #define NH_GUIDEBOOK_AREA	FILE_AREA_DOC
 
 #define LEV_EXT	".lev"		/* extension for special level files */
@@ -252,7 +283,7 @@
 #  else
 #  define PORT_ID	"PC"
 #  endif
-#  ifdef DJGPP
+#  ifdef __DJGPP__
 #  define PORT_SUB_ID	"djgpp"
 #  else
 #   ifdef OVERLAY
@@ -292,6 +323,10 @@
 #endif
 #endif
 
+#if defined(MSDOS) || defined(CYGWIN32)
+# define SJIS_FILESYSTEM	/* filename encoding is sjis */ 
+#endif
+
 #ifdef VMS
 /* vms_exit() (sys/vms/vmsmisc.c) expects the non-VMS EXIT_xxx values below.
  * these definitions allow all systems to be treated uniformly, provided
diff -aurN slashem-0.0.7E6F2/include/patchlevel.h jslashem-0.0.7E6F2-J0.0.8/include/patchlevel.h
--- slashem-0.0.7E6F2/include/patchlevel.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/patchlevel.h	2004-07-10 16:09:52.000000000 +0900
@@ -27,6 +27,28 @@
 #define COPYRIGHT_BANNER_C \
 "See license for details. Bug reports to slashem-discuss@lists.sourceforge.net"
 
+  
+#if 1 /*JP*/
+#define JA_COPYRIGHT_BANNER_A \
+"NetHack[日本語版], Copyright 1993 - 1996"
+
+#define JA_COPYRIGHT_BANNER_B \
+"         By I. Numata , S. Miyashita and N. Hamada."
+
+#define JA_COPYRIGHT_BANNER_C \
+"    for 3.4,  Copyright 2002 - 2003"
+
+#define JA_COPYRIGHT_BANNER_D \
+"         By K.Shirakata."
+
+#define JA_COPYRIGHT_BANNER_E \
+"SLASH'EM[日本語版],  Copyright 2004"
+
+#define JA_COPYRIGHT_BANNER_F \
+"         By M. Miyaso , S. Shiganai"
+#endif
+
+
 #if 1
 /*
  * If two or more successive releases have compatible data files, define
diff -aurN slashem-0.0.7E6F2/include/system.h jslashem-0.0.7E6F2-J0.0.8/include/system.h
--- slashem-0.0.7E6F2/include/system.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/system.h	2004-06-10 09:20:40.000000000 +0900
@@ -135,7 +135,9 @@
 		     int(*)(const genericptr,const genericptr)));
 #else
 # if (defined(BSD) || defined(ULTRIX)) && (!defined(LINUX) && !defined(__CYGWIN__))
+#if 0 /*JP*/
 E  int qsort();
+#endif
 # else
 #  if !defined(LATTICE) && !defined(AZTEC_50)
 E   void FDECL(qsort, (genericptr_t,size_t,size_t,
@@ -302,9 +304,11 @@
 # if defined(NHSTDC) || (defined(VMS) && !defined(ANCIENT_VAXC))
 #  if !defined(_AIX32) && !(defined(SUNOS4) && defined(__STDC__)) && !defined(LINUX)
 /* Solaris unbundled cc (acc) */
+#if 0 /*JP*/
 E int FDECL(memcmp, (const void *,const void *,size_t));
 E void *FDECL(memcpy, (void *, const void *, size_t));
 E void *FDECL(memset, (void *, int, size_t));
+#endif
 #  endif
 # else
 #  ifndef memcmp	/* some systems seem to macro these back to b*() */
@@ -373,7 +377,9 @@
 #  endif
 # else	/*!POSIX_TYPES*/
 #  ifndef getpid		/* Borland C defines getpid() as a macro */
+#if 0 /*JP*/
 E int NDECL(getpid);
+#endif
 #  endif
 #  ifdef VMS
 E int NDECL(getppid);
diff -aurN slashem-0.0.7E6F2/include/unixconf.h jslashem-0.0.7E6F2-J0.0.8/include/unixconf.h
--- slashem-0.0.7E6F2/include/unixconf.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/unixconf.h	2004-06-10 08:55:12.000000000 +0900
@@ -26,7 +26,7 @@
 /* #define ULTRIX */	/* define for Ultrix v3.0 or higher (but not lower) */
 			/* Use BSD for < v3.0 */
 			/* "ULTRIX" not to be confused with "ultrix" */
-#define SYSV		/* define for System V, Solaris 2.x, newer versions */
+/* #define SYSV	*/	/* define for System V, Solaris 2.x, newer versions */
 			/* of Linux */
 /* #define HPUX */	/* Hewlett-Packard's Unix, version 6.5 or higher */
 			/* use SYSV for < v6.5 */
@@ -48,7 +48,7 @@
 			 * job control (note that AIX is SYSV otherwise)
 			 * Also define this for AIX 3.2 */
 
-#define TERMINFO	/* uses terminfo rather than termcap */
+/* #define TERMINFO */	/* uses terminfo rather than termcap */
 			/* Should be defined for most SYSV, SVR4 (including
 			 * Solaris 2+), HPUX, and Linux systems.  In
 			 * particular, it should NOT be defined for the UNIXPC
diff -aurN slashem-0.0.7E6F2/include/winX.h jslashem-0.0.7E6F2-J0.0.8/include/winX.h
--- slashem-0.0.7E6F2/include/winX.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/winX.h	2004-06-10 09:23:30.000000000 +0900
@@ -9,6 +9,16 @@
 #ifndef WINX_H
 #define WINX_H
 
+/*JP
+**	for i18n by issei 1994/1/8
+*/
+#ifdef XI18N
+#include <X11/Xlocale.h>
+#endif
+#ifdef XAW_I18N
+#include <X11/Xaw/Xawi18n.h>
+#endif
+
 #ifndef E
 #define E extern
 #endif
@@ -56,6 +66,7 @@
     unsigned short glyphs[ROWNO][COLNO];	/* Saved glyph numbers. */
     GC	white_gc;
     GC	black_gc;
+    GC  clip_gc;
 };
 
 struct map_info_t {
@@ -87,6 +98,10 @@
 
 struct mesg_info_t {
     XFontStruct *fs;		/* Font for the window. */
+/*JP*/
+#ifdef XI18N
+    XFontSet	fontset;
+#endif
     int		num_lines;	/* line count */
     struct line_element *head;	/* head of circular line queue */
     struct line_element *line_here;/* current drawn line position */
@@ -143,6 +158,10 @@
     struct menu new_menu;	/* New menu being built. */
 
     XFontStruct *fs;		/* Font for the window. */
+/*JP*/
+#ifdef XI18N
+    XFontSet	fontset;
+#endif
     long menu_count;		/* number entered by user */
     Dimension line_height;	/* Total height of a line of text. */
     Dimension internal_height;	/* Internal height between widget & border */
@@ -162,6 +181,10 @@
 struct text_info_t {
     struct text_buffer text;
     XFontStruct *fs;		/* Font for the text window. */
+/*JP*/
+#ifdef XI18N
+    XFontSet	fontset;
+#endif
     int		max_width;	/* Width of widest line so far. */
     int		extra_width,	/* Sum of left and right border widths. */
 		extra_height;	/* Sum of top and bottom border widths. */
@@ -241,6 +264,10 @@
     Boolean message_line;
     Boolean double_tile_size;	/* double tile size */
     String  tile_file;		/* name of file to open for tiles */
+#ifdef X11LARGETILE
+    int     tile_width;
+    int	    tile_height;
+#endif
     String  icon;		/* name of desired icon */
     int     message_lines;	/* number of lines to attempt to show */
     String  pet_mark_bitmap;	/* X11 bitmap file used to mark pets */
@@ -342,7 +369,11 @@
 E void FDECL(clear_text_buffer,(struct text_buffer*));
 E void FDECL(free_text_buffer,(struct text_buffer*));
 #ifdef GRAPHIC_TOMBSTONE
+#ifndef XI18N
 E void FDECL(calculate_rip_text, (int));
+#else
+E void FDECL(calculate_rip_text, (int, XFontSet));
+#endif
 #endif
 
 
diff -aurN slashem-0.0.7E6F2/include/wintty.h jslashem-0.0.7E6F2-J0.0.8/include/wintty.h
--- slashem-0.0.7E6F2/include/wintty.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/wintty.h	2004-06-10 08:55:12.000000000 +0900
@@ -108,6 +108,7 @@
 E void FDECL(xputc, (int));
 #else
 E void FDECL(xputc, (CHAR_P));
+E void FDECL(xputc2, (int, int));
 #endif
 E void FDECL(xputs, (const char *));
 #if defined(SCREEN_VGA) || defined(SCREEN_8514) || defined(ALLEG_FX)
@@ -154,6 +155,10 @@
 E void NDECL(more);
 E void FDECL(update_topl, (const char *));
 E void FDECL(putsyms, (const char*));
+/*JP
+Sat Aug 27 00:42:03 JST 1994 by issei
+*/
+E void FDECL(raw_putsyms, (const char*));
 
 /* ### wintty.c ### */
 #ifdef CLIPPING
diff -aurN slashem-0.0.7E6F2/include/xwindowp.h jslashem-0.0.7E6F2-J0.0.8/include/xwindowp.h
--- slashem-0.0.7E6F2/include/xwindowp.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/xwindowp.h	2004-06-10 08:55:12.000000000 +0900
@@ -57,6 +57,10 @@
     Pixel	   bright_cyan;
     Pixel	   white;
     XFontStruct    *font;
+/* this cannot work because winX11/Window.c does not include config.h */
+/* #ifdef XI18N*/
+    XFontSet	   fontset;
+/* #endif */
     XtCallbackList expose_callback;
     XtCallbackList input_callback;
     XtCallbackList resize_callback;
diff -aurN slashem-0.0.7E6F2/include/you.h jslashem-0.0.7E6F2-J0.0.8/include/you.h
--- slashem-0.0.7E6F2/include/you.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/you.h	2004-06-10 08:55:12.000000000 +0900
@@ -81,6 +81,7 @@
 struct Role {
 	/*** Strings that name various things ***/
 	struct RoleName name;	/* the role's name (from u_init.c) */
+	struct RoleName jname;	/* the role's name (from u_init.c) */
 	struct RoleName rank[9]; /* names for experience levels (from botl.c) */
 	const char *lgod, *ngod, *cgod; /* god names (from pray.c) */
 	const char *filecode;	/* abbreviation for use in file names */
@@ -161,6 +162,7 @@
 struct Race {
 	/*** Strings that name various things ***/
 	const char *noun;	/* noun ("human", "elf") */
+/*JP*/	const char *j;		/* japanese */
 	const char *adj;	/* adjective ("human", "elven") */
 	const char *coll;	/* collective ("humanity", "elvenkind") */
 	const char *filecode;	/* code for filenames */
@@ -206,6 +208,7 @@
 /*** Unified structure specifying gender information ***/
 struct Gender {
 	const char *adj;	/* male/female/neuter */
+/*JP*/	const char *j;		/* japanese */
 	const char *he;		/* he/she/it */
 	const char *him;	/* him/her/it */
 	const char *his;	/* his/her/its */
@@ -227,6 +230,7 @@
 /*** Unified structure specifying alignment information ***/
 struct Align {
 	const char *noun;	/* law/balance/chaos */
+/*JP*/	const char *j;		/* japanese */
 	const char *adj;	/* lawful/neutral/chaotic */
 	const char *filecode;	/* file code */
 	short allow;		/* equivalent ROLE_ mask */
diff -aurN slashem-0.0.7E6F2/include/youprop.h jslashem-0.0.7E6F2-J0.0.8/include/youprop.h
--- slashem-0.0.7E6F2/include/youprop.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/include/youprop.h	2004-06-10 08:55:12.000000000 +0900
@@ -126,6 +126,10 @@
 
 #define HSleeping		u.uprops[SLEEPING].intrinsic
 #define ESleeping		u.uprops[SLEEPING].extrinsic
+#ifdef	JPEXTENSION
+#define Totter			u.uprops[TOTTER].p_flgs
+#endif
+
 #define Sleeping		(HSleeping || ESleeping)
 
 #define HHunger			u.uprops[HUNGER].intrinsic
diff -aurN slashem-0.0.7E6F2/japanese/Install.dos jslashem-0.0.7E6F2-J0.0.8/japanese/Install.dos
--- slashem-0.0.7E6F2/japanese/Install.dos	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/Install.dos	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,26 @@
+	DJGPP 版 jnethack のコンパイル方法
+							Kentaro Shirakata
+
+0.必要環境
+
+　最近の DJGPP V2 なら多分問題ないはずです。私がインストールしたのは
+　以下のものです。
+
+bnu2112b.zip
+djdev203.zip
+fil40b.zip
+gcc304b.zip
+mak3791b.zip
+
+　以下、トップディレクトリ(README.j があるディレクトリ)を基準とします。
+　ソースの漢字コードは EUC のままにしてください。
+
+1.コンパイル
+
+・sys/msdos/setup.bat gcc を実行。
+・src/makefile の "YACC_LEX = Y" を "YACC_LEX = N"に変更。(yacc と lex を
+　インストールすれば Y のままでも構いません)
+・make install を実行。
+・3.4.3 では makefile が壊れていて途中でエラーが出るので、もう一度
+　make install を実行。
+・binary/ ディレクトリに必要ファイルが作成されます。
diff -aurN slashem-0.0.7E6F2/japanese/Install.lnx jslashem-0.0.7E6F2-J0.0.8/japanese/Install.lnx
--- slashem-0.0.7E6F2/japanese/Install.lnx	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/Install.lnx	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,171 @@
+
+	Linux 用 jnethack 3.4.3 のコンパイル例
+
+
+0) はじめに
+
+Plamo Linux 3.2 で tty / X11 版をコンパイルした例です。
+この文書は sys/unix/README.linux から設定を抜き出して書かれています。
+
+
+1) アーカイブの展開・パッチ当て
+
+$ tar zxvf nethack-343.tgz
+$ cd nethack-3.4.3
+$ zcat jnethack-3.4.3-x.x.diff.gz | patch -p1
+$ sh sys/unix/setup.sh
+ 
+
+2) ファイルの編集
+
+2-1) Makefile の該当行を編集
+
+GAMEGRP = games
+GAMEPERM = 02755
+FILEPERM = 0644
+EXEPERM = 755
+DIRPERM = 775
+
+X11 版もコンパイルする場合は以下の設定も必要。
+
+VARDATND = x11tiles pet_mark.xbm rip.xpm
+
+
+2-2) src/Makefile の該当行を編集
+
+CFLAGS = -O2 -fomit-frame-pointer -I../include
+LFLAGS =
+
+X11 版もコンパイルする場合は以下の設定も必要。
+
+LFLAGS =  -L/usr/X11R6/lib
+WINSRC = $(WINTTYSRC) $(WINX11SRC)
+WINOBJ = $(WINTTYOBJ) $(WINX11OBJ)
+WINX11LIB = -lXaw -lXmu -lXext -lXt -lXpm -lX11
+WINLIB = $(WINTTYLIB) $(WINX11LIB)
+
+
+2-3) util/Makefile の該当行を編集
+
+CFLAGS = -O2 -fomit-frame-pointer -I../include
+LFLAGS =
+
+
+2-4) include/unixconf.h の該当行を編集
+
+コメントアウトされている Linux の定義を有効にします。
+
+#define SYSV
+#define LINUX
+#define TERMINFO
+#define TIMED_DELAY
+
+
+2-5) include/config.h の該当行を編集
+
+#define DLB
+
+X11 版もコンパイルする場合は以下の設定も必要。
+
+#define X11_GRAPHICS
+#define USE_XPM
+#define AUTOPICKUP_EXCEPTIONS
+
+
+2-6) win/X11/JNetHack.ad の該当行を編集(X11 版のみ)
+
+JNetHack*font: -misc-fixed-medium-r-*--12-*
+JNetHack*display_file*font: -misc-fixed-medium-r-*--12-*
+JNetHack*tombstone*font: -misc-fixed-medium-r-*--12-*
+JNetHack*rip*font: -misc-fixed-medium-r-*--12-*
+JNetHack*menu*font: -misc-fixed-medium-r-*--12-*
+JNetHack*text*font: -misc-fixed-medium-r-*--12-*
+JNetHack*map*font: -misc-fixed-medium-r-*--14-*
+JNetHack*fontSet: -misc-fixed-medium-r-*--12-*
+
+タイル表示する場合は以下の設定をします。
+
+JNetHack.tile_file: x11tiles
+JNetHack.tile_width: 16
+JNetHack.tile_height: 16
+
+タイルを使用しない場合はタイル設定の行頭に "!" をつけます。
+
+
+3) コンパイル
+
+$ make all
+
+
+4) インストール
+
+4-1) はじめてインストールする場合
+
+# make install
+
+X11 版の場合はリソースファイルもコピーします。
+
+# cp win/X11/JNetHack.ad /usr/X11R6/lib/X11/app-defaults/JNetHack
+
+
+4-2) 上書きする場合(セーブデータが保護されます)
+
+# make update
+
+
+5) エラーメッセージ
+
+5-1) インストール時に chgrp: invalid group name `games'
+
+システムに games グループが登録されていません。
+新しく games グループを作るか Makefile の GAMEGRP を変更してインストールしてください。
+
+
+5-2) 起動時に Warning: cannot write scoreboard file record
+
+record ファイルのパーミッションが設定されていない場合表示されます。
+
+# chmod g+w /usr/games/lib/jnethackdir/record
+
+上記のように書き込み権限を有効にします。
+
+
+5-3) 終了時に Cannot open log file!
+
+logfile ファイルのパーミッションが設定されていない場合表示されます。
+
+# chmod g+w /usr/games/lib/jnethackdir/logfile
+
+上記のように書き込み権限を有効にします。
+
+
+5-4) セーブ時に No such file or directory Exec to compress save/[キャラクター名] failed.
+
+compress もしくは gzip が存在しないか設定が間違っています。
+include/config.h の COMPRESS の設定が正しいかどうか確認してください。
+
+#define COMPRESS "/usr/bin/gzip" /* FSF gzip compression */
+
+
+6) 環境設定
+
+6-1) 設定ファイル
+
+ホームディレクトリに ~/.jnethackrc ファイルを作成してプレイヤー名などの設定を
+することができます。
+設定ファイルの書き方は doc/jGuidebook.txt を参照してください。
+
+tty 版と X11 版の切り替えは以下の通りです。
+
+OPTIONS=windowtype:tty # tty 版の場合
+OPTIONS=windowtype:x11 # X11 版の場合
+
+JNetHack 1.x 系で追加されたスコア送信機能や Radar パッチは 3.4.x 系では
+分離されているので report や radar オプションを設定しても有効にはなりません。
+
+
+6-2) X11 版のウインドウサイズ
+
+起動時に -g オプションをつけるとメインウインドウの大きさを設定できます。
+
+$ jnethack -g 640x480
diff -aurN slashem-0.0.7E6F2/japanese/Install.nt jslashem-0.0.7E6F2-J0.0.8/japanese/Install.nt
--- slashem-0.0.7E6F2/japanese/Install.nt	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/Install.nt	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,33 @@
+	MS Windows 用 jnethack のコンパイル方法
+							Kentaro Shirakata
+
+0.必要環境
+
+　私がテストしたのは Visual C++ 6 SP5 と Boland C++ 5.5 です。
+　以下、トップディレクトリ(README.j があるディレクトリ)を基準とします。
+　(基本的に sys/winnt/Install.nt と同じです)
+
+1. VC/GUI 版
+
+・sys/winnt/nhsetup.bat を実行。
+・nethack.dsw をダブルクリック(Visual Studio 起動)。
+・[ビルド]→[アクティブな構成の設定...] で "nethackw - Win32 Release" を選択。
+・[ビルド]→[ビルド] でコンパイル・インストール。
+・binary/ ディレクトリに必要ファイルが作成されます。
+
+2. VC/CUI 版(コマンドラインから)
+
+・(Visual Studio の)VCVARS32.BAT を実行。
+・sys/winnt/nhsetup.bat を実行。
+・src/ ディレクトリに移動。
+・nmake all でコンパイル・インストール。
+・binary/ ディレクトリに必要ファイルが作成されます。
+
+3. BCC 版(コマンドラインから)
+
+・sys/winnt/nhsetup.bat を実行。
+・src/ ディレクトリに移動。
+・デフォルトでは CUI 版になっているので、GUI 版を作成する場合は
+  Makefile.bcc の 51 行目を「GRAPHICAL = Y」に変更。
+・make /f Makefile.bcc install でコンパイル・インストール。
+・binary/ ディレクトリに必要ファイルが作成されます。
diff -aurN slashem-0.0.7E6F2/japanese/Install.unx jslashem-0.0.7E6F2-J0.0.8/japanese/Install.unx
--- slashem-0.0.7E6F2/japanese/Install.unx	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/Install.unx	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,118 @@
+(このドキュメントは古いもので、3.4.0ベースでは当てはまらないものもあります)
+
+                               JNetHack
+                                   
+         Copyright 1993-1999  I.Numata, S.Miyashita, N.Hamada
+
+
+			INSTALL GUIDE FOR UNIX
+
+0) はじめに
+
+日本語 NetHackをインストールするには、8ビットスルーな lexが必要です。
+lexに -8 オプション(あるいはそれと同等のもの)があるかどうかをインストー
+ルの前に確認します。なければ、8ビットスルーな lexをインストールしなけ
+ればなりません。幸い GNUの flexが8ビットスルーですので、これをインストー
+ルするのがよいでしょう。また、gzipや patchも GNUの最新バージョンをインス
+トールしておくことをおすすめします。
+
+またバージョン 1.0.6からは X11 および XPMがデフォルトで必須となっています。
+インストールされてない方はこれを機会に是非追加してください。
+
+1) JNetHackのインストール方法
+
+JNetHack-currentを展開します。
+
+	% gzip -dc jnethack-current.tar.gz | tar xvf -
+
+漢字コードは EUCで記述されています。
+
+OSやコンパイル環境が不幸にしてSJISしかサポートしていない環境の方は
+
+	% gzip -dc nethack-3.3.0.tar.gz | tar xvf -
+
+とNetHack-3.3.0を展開して、
+
+        % gzip -dc  jnethack-current-nethack-3.3.0.patch.gz | nkf -s | patch -p1
+
+等とすればよいでしょう。次に Makefileを作ります。
+
+        % cd sys/unix
+        % sh setup.sh
+
+src/Makefile のコメントを参考にして、いくつかのフラグをマシンの設定に
+合せて自分で編集します。重要なのはWINTTYLIBと WINX11LIBです。デフォル
+トではFreeBSDになっているので、Linuxでは
+
+WINTTYLIB = -ltermcap
+WINX11LIB = -lXaw -lXmu -lXext -lXt -lXpm -lX11 -lm
+
+としてください。次に include/config.hや include/unixconf.h を編集します。
+オジナル版Nethackがインストールされている場合を考慮し、HACKDIRは別のディ
+レクトリになっています。 HACKDIRを変更した場合はトップ階層にある
+Makefileも変更します。さもないと make installが正しく動作しません。
+
+次に、lexを使うか、flexを使うかによって、util/Makefileの対応する部分を
+書き替えます。
+
+        % make
+
+エラーなくコンパイルできたならば、次のコマンドを実行します。(多くの場
+合rootになる必要があるはずです)
+
+        # make install
+
+インストール仕直すときは
+
+	# make update
+
+とすればよいでしょう。これを行わないとセーブファイル等が全て初期化されて
+しまいます。但しバージョンやコンパイルオプションを大きく変更したときは
+初期化インストールすることをオススメします。
+
+その他不明なことは
+
+http://www.jnethack.org
+
+を御覧ください。
+	
+(付録)
+
+JNetHackに追加されたオプション
+
+kcode(デフォルト:無変換)
+
+	OPTIONS=kcode:jis
+
+	のように指定してください。このオプションは ttyおよび設定ファイ
+	ルの漢字コードに影響を与えます。XはXの国際化部分に依存します。
+	また、.nethackrcより先に .jnethackrc を読みに行くので、英語版
+	との共存が可能です。
+
+	kterm-5.2.0(以上)がインストールされているならば、X11版をインス
+	トールしなくても -decオプションをつけることにより、そこそこの
+	グラフィックを堪能できます。この場合 kcode:jisとする必要があり
+	ます。
+
+homeurl(デフォルト:"")
+
+	OPTIONS=homeurl:http://www.guru.gr.jp/
+
+	のように指定してください。このオプションでURLを指定している
+	とスコアサーバにスコアを送るときにHome PageのURLをも送ります。
+
+proxy(デフォルト:"")
+
+	OPTIONS=proxy:proxy.guru.gr.jp:1234
+
+	のように指定してください。
+
+report(デフォルト:TRUE)
+
+	このオプションを指定するとゲーム終了時にスコアをスコアサーバ
+	に報告します。デフォルトはオフになっています。
+
+radar(デフォルト:TRUE)
+
+	レーダーのオンオフをします。win版でタイルを使用しているとき
+	のみ有効です。
diff -aurN slashem-0.0.7E6F2/japanese/emalloc.c jslashem-0.0.7E6F2-J0.0.8/japanese/emalloc.c
--- slashem-0.0.7E6F2/japanese/emalloc.c	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/emalloc.c	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,204 @@
+
+/* EMS handler routine
+   Copyright (c) Kouji Takada 1994-2000 */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+#include "hack.h"
+#include <dos.h>
+#include <stdlib.h>
+#include "emalloc.h"
+
+#define	EMS_VECT	0x67
+#define	EMS_STR		"EMMXXXX0"
+static	int isems = 0;
+static	unsigned int ems_frame = 0;
+static	unsigned long emalloc_ptr = 0;
+static	unsigned int ems_handle = 0;
+
+#ifdef MOVERLAY
+/* MOVERLAY API */
+#define	MOVE_PAUSE_CACHE	4
+extern	unsigned short _movefpause;
+extern	void _movepause(void);
+extern	void _moveresume(void);
+#endif
+
+/* 正規化されたポインタを作成する */
+static	void *mk_fp(unsigned int seg, unsigned int off)
+{
+	unsigned long temp;
+
+	temp = (((unsigned long)seg) << 4) + ((unsigned long)off);
+	return (void *)(((temp & 0xffff0L) << 12) + (temp & 0x0000fL));
+}
+
+/* プログラム終了時に呼ばれ、EMS を開放する */
+void	done_ems(void)
+{
+	union REGS inregs, outregs;
+	struct SREGS segregs;
+	int i;
+
+	if (isems == 0) return;
+	inregs.h.ah = 0x44;
+	inregs.x.dx = ems_handle;
+	inregs.x.bx = 0xffff;
+	for (i = 0; i < 4; i++)
+	{
+		/* ページをアンマップする */
+		inregs.h.al = i;
+		int86(EMS_VECT, &inregs, &outregs);
+		if (outregs.h.ah != 0) fprintf(stderr,
+			"警告: EMS をアンマップ出来ません (%04x)。\n",
+			outregs.h.ah & (i << 8));
+	}
+
+	/* ページを開放する */
+	inregs.h.ah = 0x45;
+	inregs.x.dx = ems_handle;
+	int86(EMS_VECT, &inregs, &outregs);
+	if (outregs.h.ah != 0)
+	{
+		fprintf(stderr, "警告: EMS を開放出来ません (%04x)。\n",
+			outregs.h.ah);
+		return;
+	}
+/*	fprintf(stderr, "EMS は %ud バイト使用されました。\n", emalloc_ptr); */
+	isems = 0;
+}
+
+/* EMS を初期化する */
+int	detect_ems(void)
+{
+	union REGS inregs, outregs;
+	char *vect;
+	int i;
+
+	/* EMS ドライバを探す */
+	vect = (char *)_dos_getvect(EMS_VECT);
+	vect = mk_fp(FP_SEG(vect), 0x000a);
+	if (memcmp(vect, EMS_STR, 8) != 0)
+	{
+		fprintf(stderr, "EMS が存在しません。\n");
+		return 0;
+	}
+
+#ifdef MOVERLAY
+	/* MOVERLAY が取得している EMS を開放させる */
+        _movefpause |= MOVE_PAUSE_CACHE;
+	_movepause();
+#endif
+	/* ハードウェアが正常かどうか確認する */
+	inregs.h.ah = 0x40;
+	int86(EMS_VECT, &inregs, &outregs);
+	if (outregs.h.ah != 0)
+	{
+		fprintf(stderr, "EMS が異常です (%04x)。\n", outregs.h.ah);
+#ifdef MOVERLAY
+		_moveresume();
+#endif
+		return 0;
+	}
+
+	/* ４ページの空きがあるか確認する */
+	inregs.h.ah = 0x42;
+	int86(EMS_VECT, &inregs, &outregs);
+	if (outregs.x.bx < 4)
+	{
+		fprintf(stderr, "EMS のフレームが足りません (%04x)。\n",
+			outregs.x.cx);
+#ifdef MOVERLAY
+		_moveresume();
+#endif
+		return 0;
+	}
+
+	/* ページフレームが４つ以上あるかどうか確認する */
+	inregs.x.ax = 0x5801;
+	int86(EMS_VECT, &inregs, &outregs);
+	if (outregs.x.cx < 4)
+	{
+		fprintf("stderr, EMS のフレームが足りません (%04x)。\n", outregs.x.cx);
+		_moveresume();
+		return 0;
+	}
+
+	/* ページフレームの先頭アドレスを得る */
+	inregs.h.ah = 0x41;
+	int86(EMS_VECT, &inregs, &outregs);
+	ems_frame = outregs.x.bx;
+
+	/* ４ページのメモリを確保する */
+	inregs.h.ah = 0x43;
+	inregs.x.bx = 4;
+	int86(EMS_VECT, &inregs, &outregs);
+	if (outregs.h.ah != 0)
+	{
+		fprintf(stderr, "EMS が取得出来ません (%04x)。\n",
+			outregs.h.ah);
+#ifdef MOVERLAY
+		_moveresume();
+#endif
+		_moveresume();
+		return 0;
+	}
+	ems_handle = outregs.x.dx;
+
+	/* ページをマップする */
+	inregs.h.ah = 0x44;
+	inregs.x.dx = ems_handle;
+	for (i = 0; i < 4; i++)
+	{
+		inregs.h.al = i;
+		inregs.x.bx = i;
+		int86(EMS_VECT, &inregs, &outregs);
+		if (outregs.h.ah != 0)
+		{
+			fprintf(stderr, "EMS をマップ出来ません (%04x)。\n",
+				outregs.h.ah & (i << 8));
+			inregs.h.ah = 0x45;
+			inregs.x.dx = ems_handle;
+			int86(EMS_VECT, &inregs, &outregs);
+#ifdef MOVERLAY
+			_moveresume();
+#endif
+			return 0;
+		}
+	}
+
+#ifdef MOVERLAY
+	/* MOVERLAY のキャッシュを再び有効にする */
+	_moveresume();
+#endif
+	/* プログラム終了時に自動的に呼び出す */
+	atexit(done_ems);
+
+	fprintf(stderr, "\nEMS をデータ領域として使用します。\n");
+	isems = 1;
+	return 1;
+}
+
+/* EMS 領域から優先してメモリを確保する */
+void	*emalloc(unsigned int size)
+{
+	void *ptr;
+
+	/* EMS が使用可能なら */
+	if (isems != 0)
+	{
+		/* EMS に空きがあれば */
+		if ((emalloc_ptr + ((unsigned long)size)) <= 0xffffL)
+		{
+			/* ポインタを作って返す */
+			ptr = mk_fp(ems_frame, emalloc_ptr);
+			emalloc_ptr += size;
+			memset(ptr, 0, size);
+			return ptr;
+		}
+	}
+	/* EMS からメモリが取得出来なければ、ヒープを使う */
+	ptr = alloc(size);
+	memset(ptr, 0, size);
+	return ptr;
+}
+
diff -aurN slashem-0.0.7E6F2/japanese/emalloc.h jslashem-0.0.7E6F2-J0.0.8/japanese/emalloc.h
--- slashem-0.0.7E6F2/japanese/emalloc.h	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/emalloc.h	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,9 @@
+
+/* EMS handler routine
+   Copyright (c) Kouji Takada 1994 */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+int	detect_ems(void);
+void	done_ems(void);
+void	*emalloc(unsigned int);
+
diff -aurN slashem-0.0.7E6F2/japanese/hash.c jslashem-0.0.7E6F2-J0.0.8/japanese/hash.c
--- slashem-0.0.7E6F2/japanese/hash.c	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/hash.c	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,17 @@
+/* Copyright (c) Issei Numata 1994-2000 */
+/* For 3.4, 2003-2004 by Kentaro Shirakata */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+#define HASHSIZE 2047
+
+static int 
+hash_val(key)
+     unsigned char *key;
+{
+    int v=0;
+
+    ++key;/* skip first char */
+    while(*key)
+      v = (v * 3 + *(key++)) % HASHSIZE;
+    return v;
+}
diff -aurN slashem-0.0.7E6F2/japanese/jconj.c jslashem-0.0.7E6F2-J0.0.8/japanese/jconj.c
--- slashem-0.0.7E6F2/japanese/jconj.c	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/jconj.c	2004-07-17 14:51:32.000000000 +0900
@@ -0,0 +1,438 @@
+/*
+**
+**	$Id: jconj.c,v 1.1.3.1 1999/11/17 06:35:05 issei Exp issei $
+**
+*/
+
+/* Copyright (c) Issei Numata 1994-2000 */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+#include <stdio.h>
+#include <ctype.h>
+#include <string.h>
+
+#define EUC	0
+#define SJIS	1
+#define JIS	2
+
+/* internal kcode */
+/* IC=0 EUC */
+/* IC=1 SJIS */
+#define IC ((unsigned char)("漢"[0])==0x8a)
+
+#define J_A	0
+#define J_KA	(1*5)
+#define J_SA	(2*5)
+#define J_TA	(3*5)
+#define J_NA	(4*5)
+#define J_HA	(5*5)
+#define J_MA	(6*5)
+#define J_YA	(7*5)
+#define J_RA	(8*5)
+#define J_WA	(9*5)
+
+#define J_GA	(10*5)
+#define J_ZA	(11*5)
+#define J_DA	(12*5)
+#define J_BA	(13*5)
+#define J_PA	(14*5)
+
+static unsigned char hira_tab[][2]={
+    {0xa4, 0xa2}, {0xa4, 0xa4}, {0xa4, 0xa6}, {0xa4, 0xa8}, {0xa4, 0xaa}, 
+    {0xa4, 0xab}, {0xa4, 0xad}, {0xa4, 0xaf}, {0xa4, 0xb1}, {0xa4, 0xb3}, 
+    {0xa4, 0xb5}, {0xa4, 0xb7}, {0xa4, 0xb9}, {0xa4, 0xbb}, {0xa4, 0xbd}, 
+    {0xa4, 0xbf}, {0xa4, 0xc1}, {0xa4, 0xc4}, {0xa4, 0xc6}, {0xa4, 0xc8}, 
+    {0xa4, 0xca}, {0xa4, 0xcb}, {0xa4, 0xcc}, {0xa4, 0xcd}, {0xa4, 0xce}, 
+    {0xa4, 0xcf}, {0xa4, 0xd2}, {0xa4, 0xd5}, {0xa4, 0xd8}, {0xa4, 0xdb}, 
+    {0xa4, 0xde}, {0xa4, 0xdf}, {0xa4, 0xe0}, {0xa4, 0xe1}, {0xa4, 0xe2}, 
+    {0xa4, 0xe4}, {0xa4, 0xa4}, {0xa4, 0xe6}, {0xa4, 0xa8}, {0xa4, 0xe8}, 
+    {0xa4, 0xe9}, {0xa4, 0xea}, {0xa4, 0xeb}, {0xa4, 0xec}, {0xa4, 0xed}, 
+    {0xa4, 0xef}, {0xa4, 0xa4}, {0xa4, 0xa6}, {0xa4, 0xa8}, {0xa4, 0xaa}, 
+    {0xa4, 0xac}, {0xa4, 0xae}, {0xa4, 0xb0}, {0xa4, 0xb2}, {0xa4, 0xb4}, 
+    {0xa4, 0xb6}, {0xa4, 0xb8}, {0xa4, 0xba}, {0xa4, 0xbc}, {0xa4, 0xbe}, 
+    {0xa4, 0xc0}, {0xa4, 0xc2}, {0xa4, 0xc5}, {0xa4, 0xc7}, {0xa4, 0xc9}, 
+    {0xa4, 0xd0}, {0xa4, 0xd3}, {0xa4, 0xd6}, {0xa4, 0xd9}, {0xa4, 0xdc}, 
+    {0xa4, 0xd1}, {0xa4, 0xd4}, {0xa4, 0xd7}, {0xa4, 0xda}, {0xa4, 0xdd},
+};
+
+#define FIFTH	0 /* 五段 */
+#define UPPER	1 /* 上一段 */
+#define LOWER	2 /* 下一段 */
+#define SAHEN	3 /* サ変 */
+#define KAHEN	4 /* カ変 */
+
+#define NORMAL	0 /* あける→〜た */
+#define SOKUON	1 /* 刻む→〜んだ */
+#define HATSUON	2 /* 打つ→〜った */
+#define ION	3 /* 浮く→〜いた */
+
+struct _jconj_tab {
+    const char *main;
+    int column;
+/* 0: fifth conj. 1:upper conj. 2:lower conj. 3:SAHEN 4:KAHEN */
+    int katsuyo_type;
+/* 0: normal 1: sokuon 2: hatson 3: ion */
+    int onbin_type;
+} jconj_tab[] = {
+/* あ */
+    {"あける", J_KA, LOWER, NORMAL},
+    {"開ける", J_KA, LOWER, NORMAL},
+    {"いれる", J_RA, LOWER, NORMAL},
+    {"入れる", J_RA, LOWER, NORMAL},
+    {"浮く", J_KA, FIFTH, ION},
+    {"打つ", J_TA, FIFTH, HATSUON},
+    {"置く", J_KA, FIFTH, ION},
+    {"納める", J_MA, LOWER, NORMAL},
+    {"落ちる", J_TA, UPPER, NORMAL},
+    {"落す", J_SA, FIFTH, NORMAL},
+/* か */
+    {"書く", J_KA, FIFTH, ION},
+    {"かける", J_KA, UPPER, NORMAL},
+    {"かぶる", J_RA, FIFTH, HATSUON},
+    {"構える", J_A, LOWER, NORMAL},
+    {"噛みつく", J_KA, FIFTH, ION},
+    {"刻む", J_MA, FIFTH, SOKUON},
+    {"着る", J_KA, UPPER, NORMAL},
+    {"来る", J_KA, KAHEN, NORMAL}, 
+    {"斬る", J_RA, FIFTH, HATSUON},
+    {"砕く", J_KA, FIFTH, ION}, 
+    {"加える", J_A, LOWER, NORMAL},
+    {"こする", J_RA, FIFTH, HATSUON},
+    {"こます", J_SA, FIFTH, NORMAL},
+    {"込む", J_MA, FIFTH, SOKUON},
+    {"殺す", J_SA, FIFTH, NORMAL},
+    {"壊す", J_SA, FIFTH, NORMAL},
+/* さ */
+    {"捧げる", J_KA, LOWER, NORMAL},
+    {"錆びる", J_BA, UPPER, NORMAL},
+    {"死ぬ", J_NA, FIFTH, SOKUON},
+    {"滑る", J_RA, FIFTH, HATSUON},
+    {"する", J_SA, SAHEN, NORMAL}, 
+/* た */
+    {"出す", J_SA, FIFTH, NORMAL},
+    {"食べる", J_HA, LOWER, NORMAL}, 
+    {"使う", J_WA, FIFTH, HATSUON},
+    {"つける", J_KA, LOWER, NORMAL},
+    {"つまずく", J_KA, FIFTH, ION},
+    {"出る", J_NA, LOWER, NORMAL},
+    {"解く", J_KA, FIFTH, ION},
+    {"溶ける", J_KA, LOWER, NORMAL},
+    {"とばす", J_SA, FIFTH, NORMAL},
+    {"飛ぶ", J_BA, FIFTH, SOKUON},
+    {"取る", J_RA, FIFTH, HATSUON},
+/* な */
+    {"投げる", J_GA, LOWER, NORMAL},
+    {"名づける", J_KA, LOWER, NORMAL},
+    {"握る", J_RA, FIFTH, HATSUON},
+    {"脱ぐ", J_GA, FIFTH, ION},
+    {"濡らす", J_SA, FIFTH, NORMAL},
+    {"塗る", J_RA, FIFTH, HATSUON},
+    {"飲む", J_MA, FIFTH, SOKUON},
+/* は */
+    {"はいずる", J_RA, FIFTH, HATSUON},
+    {"履く", J_KA, FIFTH, ION},
+    {"はさむ", J_MA, FIFTH, SOKUON},
+    {"はずす", J_SA, FIFTH, NORMAL},
+    {"外す", J_SA, FIFTH, NORMAL},
+    {"はめる", J_MA, UPPER, NORMAL},
+    {"浸す", J_SA, FIFTH, NORMAL},
+    {"ひっかける", J_KA, LOWER, NORMAL},
+    {"拾う", J_WA, FIFTH, HATSUON},
+    {"踏む", J_MA, FIFTH, SOKUON},
+    {"掘る", J_RA, FIFTH, HATSUON},
+/* ま */
+    {"巻く", J_KA, FIFTH, ION},
+    {"守る", J_RA, FIFTH, HATSUON},
+    {"回す", J_SA, FIFTH, NORMAL},
+    {"身につける", J_KA, LOWER, NORMAL},
+    {"持つ", J_TA, FIFTH, HATSUON},
+    {"燃やす", J_SA, FIFTH, NORMAL},
+/* や */
+    {"焼く", J_KA, FIFTH, ION},
+    {"呼ぶ", J_BA, FIFTH, SOKUON},
+    {"読む", J_MA, FIFTH, SOKUON},
+/* ら */
+/* わ */
+    {(void*)0, 0, 0, 0},
+};
+
+extern unsigned char *e2sj(unsigned char *s);
+extern unsigned char *sj2e(unsigned char *s);
+
+/*
+**	conjection verb word
+**
+**	Example
+**	arg1	arg2	result
+**	脱ぐ	ない	脱がない
+**	脱ぐ	た	脱いだ
+**
+*/
+static char *
+jconjsub( tab, jverb, sfx )
+     struct _jconj_tab *tab;
+     char *jverb;
+     char *sfx;
+{
+    int len;
+    unsigned char *p;
+    static unsigned char tmp[1024];
+
+    len = strlen(jverb);
+    strcpy((char *)tmp, jverb );
+
+    if(!strncmp(sfx, "と", 2)){
+	strcat((char *)tmp, sfx);
+	return (char *)tmp;
+    }
+
+    switch( tab->katsuyo_type ){
+      case FIFTH:
+	p = tmp + (len - 2);
+	if(!strncmp(sfx, "な", 2)){
+	    if(!IC){
+		p[0] = 0xa4;
+		p[1] = hira_tab[tab->column][1];
+	    } else {
+	      memcpy(p, e2sj(hira_tab[tab->column]), 2);
+	    }
+
+	    strcpy((char *)p + 2, sfx);
+	    break;
+	}
+	else if(!strncmp(sfx, "た", 2) || !strncmp(sfx, "て", 2)){
+	    switch( tab->onbin_type ){
+	      case NORMAL:
+		if(!IC){
+		    p[1] = hira_tab[tab->column + 1][1];
+		} else {
+		    memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
+		}
+		break;
+	      case SOKUON:
+		if(!IC){
+		    p[1] = 0xf3;
+		} else {
+		    memcpy(p, "ん", 2);
+		}
+		break;
+	      case HATSUON:
+		if(!IC){
+		    p[1] = 0xc3;
+		} else {
+		    memcpy(p, "っ", 2);
+		}
+		break;
+	      case ION:
+		if(!IC){
+		    p[1] = 0xa4;
+		} else {
+		    memcpy(p, "い", 2);
+		}
+		break;
+	    }
+	    strcpy((char *)p + 2, sfx);
+	    if(tab->onbin_type == SOKUON ||
+	       (tab->onbin_type == ION && tab->column >= J_GA)){
+		if(!IC){
+		  ++p[3];
+		} else {
+		  ++p[3];
+		}
+/*	  memcpy(p+2, e2sj(sj2e(p+2)+1), 2);*//* sj2e() returns ptr to char* */
+	    }
+	    break;
+	}
+	else if(!strncmp(sfx, "ば", 2)){
+	    if(!IC){
+		p[1] = hira_tab[tab->column + 3][1];
+	    } else {
+		memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
+	    }
+	    strcpy((char *)p + 2, sfx);
+	}
+	else if(!strncmp(sfx, "れ", 2)){
+	    if(!IC){
+		p[1]=hira_tab[tab->column + 3][1];
+	    } else {
+		memcpy(p, e2sj(hira_tab[tab->column + 3]), 2);
+	    }
+	    strcpy((char *)p + 2, sfx + 2);
+	}
+	else if(!strncmp(sfx, "ま", 2)) {
+	    if(!IC){
+		p[1] = hira_tab[tab->column + 1][1];
+	    } else {
+		memcpy(p, e2sj(hira_tab[tab->column + 1]), 2);
+	    }
+	    strcpy((char *)p + 2, sfx);
+	    break;
+	}
+	break;
+      case LOWER:
+      case UPPER:
+      case KAHEN:
+	p = tmp + (len - 2);
+	if(!strncmp(sfx, "ば", 2)){
+	    strcpy((char *)p, "れ");
+	    strcpy((char *)p + 2, sfx);
+	}
+	else if(!strncmp(sfx, "れ", 2) && tab->katsuyo_type == LOWER){
+	    strcpy((char *)p, "ら");
+	    strcpy((char *)p + 2, sfx);
+	}
+	else
+	  strcpy((char *)p, sfx);
+	break;
+      case SAHEN:
+	p = tmp + (len - 4);
+	if(!strncmp(sfx, "な", 2) ||
+	   !strncmp(sfx, "ま", 2) ||
+	   !strncmp(sfx, "た", 2) ||
+	   !strncmp(sfx, "て", 2)){
+	    strcpy((char *)p, "し");
+	    strcpy((char *)p + 2, sfx);
+	}
+	else if(!strncmp(sfx, "ば", 2) || !strncmp(sfx, "れば", 4)){
+	    strcpy((char *)p, "すれば");
+	}
+	break;
+    }
+    return (char *)tmp;
+}
+const char *
+jconj( jverb, sfx )
+     const char *jverb;
+     const char *sfx;
+{
+    struct _jconj_tab *tab;
+    int len;
+
+    len = strlen(jverb);
+    for( tab = jconj_tab; tab->main != (void*)0; ++tab){
+	if(!strcmp(jverb, tab->main)){
+	    return jconjsub(tab, jverb, sfx);
+	}
+    }
+
+    for( tab = jconj_tab; tab->main != (void*)0; ++tab){
+	if(len - strlen(tab->main) > 0 &&
+	   !strcmp(jverb + (len - strlen(tab->main)), tab->main)){
+	    return jconjsub(tab, jverb, sfx);
+	}
+    }
+
+#ifdef JAPANESETEST
+    fprintf( stderr, "I don't know such word \"%s\"\n");
+#endif
+    return jverb;
+}
+
+const char *
+jcan(jverb)
+     const char *jverb;
+{
+    const char *ret;
+    static unsigned char tmp[1024];
+
+    int len = strlen(jverb);
+    if(!strcmp(jverb + len - 4, "する")){
+	strncpy(tmp, jverb, len - 4);
+	strcpy(tmp + len - 4, "できる");
+	return tmp;
+    } else {
+	ret = jconj(jverb, "れる");
+	return ret;
+    }
+}
+
+const char *
+jcannot(jverb)
+     const char *jverb;
+{
+    static unsigned char tmp[1024];
+
+    int len = strlen(jverb);
+    if(!strcmp(jverb + len - 4, "する")){
+	strncpy(tmp, jverb, len-4);
+	strcpy(tmp +len-4, "できない");
+	return tmp;
+    } else {
+	return jconj(jverb, "れない");
+    }
+}
+const char *
+jpast(jverb)
+     const char *jverb;
+{
+    return jconj(jverb, "た");
+}
+
+
+/*
+**	conjection of adjective word
+**
+**	Example:
+**
+**	形容詞的用法	   副詞的用法
+**
+**	赤い		-> 赤く		(形容詞)
+**	綺麗な		-> 綺麗に	(形容動詞)
+**	綺麗だ		-> 綺麗に	(形容動詞)
+*/
+const char *
+jconj_adj( jadj )
+     const char *jadj;
+{
+    int len;
+    static unsigned char tmp[1024];
+
+    strcpy((char *)tmp, jadj);
+    len = strlen((char *)tmp);
+
+    if(!strcmp((char *)tmp + len - 2, "い")){
+	strcpy((char *)tmp + len - 2, "く");
+    } else if(!strcmp((char *)tmp + len - 2, "だ") ||
+	      !strcmp((char *)tmp + len - 2, "な") ||
+	      !strcmp((char *)tmp + len - 2, "の")){
+	strcpy((char *)tmp + len - 2, "に");
+    }
+
+    return (char *)tmp;
+}
+
+
+#ifdef JAPANESETEST
+unsigned char
+*e2sj(unsigned char *s)
+{
+    return *s;
+}
+
+unsigned char
+*sj2e(unsigned char *s)
+{
+    return *s;
+}
+
+void
+main()
+{
+    struct _jconj_tab *tab;
+
+    for(tab = jconj_tab; tab->main != (void*)0; ++tab){
+	printf("%s %s\n", tab->main, jconj(tab->main, "ない"));
+	printf("%s %s\n", tab->main, jconj(tab->main, "ます"));
+	printf("%s %s\n", tab->main, jconj(tab->main, "た"));
+	printf("%s %s\n", tab->main, jconj(tab->main, "れば"));
+	printf("%s %s\n", tab->main, jconj(tab->main, "とき"));
+	printf("%s %s\n", tab->main, jcan(tab->main));
+	printf("%s %s\n", tab->main, jcannot(tab->main));
+    }
+    printf("%s\n", jconj("徹夜でnethackの翻訳をする", "ない"));
+    printf("%s\n", jconj("徹夜でnethackの翻訳をする", "ます"));
+    printf("%s\n", jconj("徹夜でnethackの翻訳をする", "た"));
+    printf("%s\n", jconj("徹夜でnethackの翻訳をする", "れば"));
+    printf("%s\n", jconj("徹夜でnethackの翻訳をする", "とき"));
+}
+#endif
diff -aurN slashem-0.0.7E6F2/japanese/jlib.c jslashem-0.0.7E6F2-J0.0.8/japanese/jlib.c
--- slashem-0.0.7E6F2/japanese/jlib.c	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/jlib.c	2004-06-10 08:55:12.000000000 +0900
@@ -0,0 +1,758 @@
+/*
+**
+**	$Id: jlib.c,v 1.1.3.1 1999/11/17 06:35:05 issei Exp issei $
+**
+*/
+
+/* Copyright (c) Issei Numata 1994-2000 */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+#include <stdio.h>
+#include <ctype.h>
+#include "hack.h"
+
+int xputc(CHAR_P);
+int xputc2(int, int);
+
+
+#define EUC	0
+#define SJIS	1
+#define JIS	2
+
+/* internal kcode */
+/* IC=0 EUC */
+/* IC=1 SJIS */
+#define IC ((unsigned char)("漢"[0])==0x8a)
+
+/* default input kcode */
+#ifndef INPUT_KCODE
+# ifdef MSDOS
+#  define INPUT_KCODE SJIS
+# else
+#  define INPUT_KCODE EUC
+# endif
+#endif
+
+/* default output kcode */
+#ifndef OUTPUT_KCODE
+# ifdef MSDOS
+#  define OUTPUT_KCODE SJIS
+# else
+#  define OUTPUT_KCODE EUC
+# endif
+#endif
+
+static int	output_kcode = OUTPUT_KCODE;
+static int	input_kcode = INPUT_KCODE;
+
+/*
+**	Kanji code library....
+*/
+
+int
+is_kanji(c)
+     unsigned c;
+{
+    if(IC == EUC)
+      return (c & 0x80);
+    else
+      return ((unsigned int)c>=0x81 && (unsigned int)c<=0x9f)
+	|| ((unsigned int)c>=0xe0 && (unsigned int)c<=0xfc);
+}
+
+void
+setkcode(c)
+     int c;
+{
+    if(c == 'E' || c == 'e' )
+      output_kcode = EUC;
+    else if(c == 'J' || c == 'j')
+      output_kcode = JIS;
+    else if(c == 'S' || c == 's')
+      output_kcode = SJIS;
+    else if(c == 'I' || c == 'i')
+#ifdef MSDOS
+      output_kcode = SJIS;
+#else
+      output_kcode = IC;
+#endif
+    else{
+	output_kcode = IC;
+    }
+    input_kcode = output_kcode;
+}
+/*
+**	EUC->SJIS
+*/
+
+unsigned char *
+e2sj(s)
+     unsigned char *s;
+{
+    unsigned char h,l;
+    static unsigned char sw[2];
+
+    h = s[0] & 0x7f;
+    l = s[1] & 0x7f;
+
+    sw[0] = ((h - 1) >> 1)+ ((h <= 0x5e) ? 0x71 : 0xb1);
+    sw[1] = l + ((h & 1) ? ((l < 0x60) ? 0x1f : 0x20) : 0x7e);
+
+    return sw;
+}
+/*
+**	SJIS->EUC
+*/
+unsigned char *
+sj2e(s)
+     unsigned char *s;
+{
+    unsigned int h,l;
+    static unsigned char sw[2];
+
+    h = s[0];
+    l = s[1];
+
+    h = h + h - ((h <=0x9f) ? 0x00e1 : 0x0161);
+    if( l<0x9f )
+      l = l - ((l > 0x7f) ? 0x20 : 0x1f);
+    else{
+	l = l-0x7e;
+	++h;
+    }
+    sw[0] = h | 0x80;
+    sw[1] = l | 0x80;
+    return sw;
+}
+/*
+**	translate string to internal kcode
+*/
+const char *
+str2ic(s)
+     const char *s;
+{
+    static unsigned char buf[1024];
+    const unsigned char *up;
+    unsigned char *p, *pp;
+    int kin;
+
+    if(!s)
+      return s;
+
+    buf[0] = '\0';
+
+    if( IC==input_kcode ){
+	strcpy((char *)buf, s);
+	return (char *)buf;
+    }
+
+    p = buf;
+    if( IC==EUC && input_kcode == SJIS ){
+	while(*s){
+	    up = s;
+	    if(is_kanji(*up)){
+		pp = sj2e((unsigned char *)s);
+		*(p++) = pp[0];
+		*(p++) = pp[1];
+		s += 2;
+	    }
+	    else
+	      *(p++) = (unsigned char)*(s++);
+	}
+    }
+    else if( IC==EUC && input_kcode == JIS ){
+	kin = 0;
+	while(*s){
+	    if(s[0] == 033 && s[1] == '$' && (s[2] == 'B' || s[3] == '@')){
+		kin = 1;
+		s += 3;
+	    }
+	    else if(s[0] == 033 && s[1] == '(' && (s[2] == 'B' || s[3] == 'J')){
+		kin = 0;
+		s += 3;
+	    }
+	    else if( kin )
+	      *(p++) = (*(s++) | 0x80);
+	    else
+	      *(p++) = *(s++);
+	}
+    }
+    else{
+	strcpy((char *)buf, s);
+	return (char *)buf;
+    }
+
+    *(p++) = '\0';
+    return (char *)buf;
+}
+
+#ifdef SJIS_FILESYSTEM
+/*
+**	translate string to output kcode
+*/
+const char *
+ic2str(s)
+     const char *s;
+{
+    static unsigned char buf[1024];
+    const unsigned char *up;
+    unsigned char *p, *pp;
+    int kin;
+
+    if(!s)
+      return s;
+
+    buf[0] = '\0';
+
+    p = buf;
+    if( IC==EUC && output_kcode == SJIS ){
+	while(*s){
+	    up = s;
+	    if( *up & 0x80 ){
+		pp = e2sj((unsigned char *)s);
+		*(p++) = pp[0];
+		*(p++) = pp[1];
+		s += 2;
+	    }
+	    else
+	      *(p++) = (unsigned char)*(s++);
+	}
+    }
+    else{
+	strcpy((char *)buf, s);
+	return (char *)buf;
+    }
+
+    *(p++) = '\0';
+    return (char *)buf;
+}
+#endif /* MSDOS */
+
+/*
+**	primitive function
+*/
+
+static int kmode;	/* 0: Kanji out */
+			/* 1: Kanji in */
+
+static void
+tty_reset()
+{
+    if(kmode && output_kcode==JIS ){
+	putchar(033);
+	putchar('(');
+	putchar('B');
+/*
+    if (flags.DECgraphics){
+      putchar(033);
+      putchar('$');
+      putchar(')');
+      putchar('B');
+    }
+*/
+    }
+    kmode = 0;
+}
+
+/* print out 1 byte character to tty (no conversion) */
+static void
+tty_cputc(unsigned int c)
+{
+    if(kmode && output_kcode==JIS ){
+	putchar(033);
+	putchar('(');
+	putchar('B');
+    }
+    kmode = 0;
+
+#if defined(NO_TERMS) && (defined(MSDOS) || defined(WIN32CON))
+    xputc(c);
+#else
+    putchar(c);
+#endif
+} 
+
+/* print out 2 bytes character to tty (no conversion) */
+static void
+tty_cputc2(unsigned int c, unsigned int c2)
+{
+    kmode = 1;
+
+#if defined(NO_TERMS) && (defined(MSDOS) || defined(WIN32CON))
+    xputc2(c, c2);
+#else
+    putchar(c);
+    putchar(c2);
+#endif
+} 
+
+/* print out 1 byte character to tty (IC->output_kcode) */
+static void
+tty_jputc(unsigned int c)
+{
+    if(kmode && output_kcode==JIS ){
+	putchar(033);
+	putchar('(');
+	putchar('B');
+    }
+    kmode = 0;
+
+#if defined(NO_TERMS) && (defined(MSDOS) || defined(WIN32CON))
+    xputc(c);
+#else
+    putchar(c);
+#endif
+}
+
+/* print out 2 bytes character to tty (IC->output_kcode) */
+static void
+tty_jputc2(unsigned int c, unsigned int c2)
+{
+    if(!kmode && output_kcode==JIS ){
+	putchar(033);
+	putchar('$');
+	putchar('B');
+    }
+    kmode = 1;
+
+#if defined(NO_TERMS) && (defined(MSDOS) || defined(WIN32CON))
+    xputc2(c, c2);
+#else
+    putchar(c);
+    putchar(c2);
+#endif
+}
+
+/*
+**  japanese buffersing function
+*/
+int
+jbuffer(
+     unsigned int c,
+     unsigned int *buf,
+     void (*reset)(),
+     void (*f1)(unsigned int),
+     void (*f2)(unsigned int, unsigned int))
+{
+    static unsigned int ibuf[2];
+    unsigned int c1, c2;
+    unsigned char uc[2];
+    unsigned char *p;
+
+    if(!buf) buf = ibuf;
+    if(!reset) reset = tty_reset;
+    if(!f1) f1 = tty_jputc;
+    if(!f2) f2 = tty_jputc2;
+
+    c = c & 0xff;
+
+    if(!(buf[0]) && (is_kanji(c))){
+	buf[1] = c;
+	++buf[0];
+	return 0;
+    }
+    else if(buf[0]){
+	c1 = buf[1];
+	c2 = c;
+
+	if(IC == output_kcode)
+	  ;
+	else if(IC == EUC){
+	    switch(output_kcode){
+	      case JIS:
+		c1 &= 0x7f;
+		c2 &= 0x7f;
+		break;
+	      case SJIS:
+		uc[0] = c1;
+		uc[1] = c2;
+		p = e2sj(uc);
+		c1 = p[0];
+		c2 = p[1];
+		break;
+	      default:
+		impossible("Unknown kcode!");
+		break;
+	    }
+	}
+	else if(IC == SJIS){
+	    uc[0] = c1;
+	    uc[1] = c2;
+	    p = sj2e(uc);
+	    switch(output_kcode){
+	      case JIS:
+		c1 &= 0x7f;
+		c2 &= 0x7f;
+		break;
+	      case EUC:
+		break;
+	      default:
+		impossible("Unknown kcode!");
+		break;
+	    }
+	}
+	f2(c1, c2);
+	buf[0] = 0;
+	return 2;
+    }
+    else if(c){
+	f1(c);
+	return 1;
+    }
+    reset();
+    return -1;
+}
+
+int
+cbuffer(
+     unsigned int c,
+     unsigned int *buf,
+     void (*reset)(),
+     void (*f1)(unsigned int),
+     void (*f2)(unsigned int, unsigned int))
+{
+    static unsigned int ibuf[2];
+
+    if(!buf) buf = ibuf;
+    if(!reset) reset = tty_reset;
+    if(!f1) f1 = tty_cputc;
+    if(!f2) f2 = tty_cputc2;
+
+    if(!(buf[0]) && is_kanji(c)){
+	buf[1] = c;
+	++buf[0];
+	return 0;
+    }
+    else if(buf[0]){
+	f2(buf[1], c);
+	buf[0] = 0;
+	return 2;
+    }
+    else if(c){
+	f1(c);
+	return 1;
+    }
+    reset();
+    return -1;
+}
+
+void
+jputchar(int c)
+{
+    static unsigned int buf[2];
+    jbuffer((unsigned int)(c & 0xff), buf, NULL, NULL, NULL);
+}
+void
+cputchar(int c)
+{
+    static unsigned int buf[2];
+    cbuffer((unsigned int)(c & 0xff), buf, NULL, NULL, NULL);
+}
+
+void
+jputs(s)
+     const char *s;
+{
+    while(*s)
+      jputchar((unsigned char)*s++);
+    jputchar('\n');
+}
+
+int is_kanji2(s,pos)
+const char *s;
+int pos;
+{
+    unsigned char *str;
+
+    str = (unsigned char *)s;
+    while(*str && pos>0){
+	if(is_kanji(*str)){
+	    str+=2;
+	    pos-=2;
+	}
+	else{
+	    ++str;
+	    --pos;
+	}
+    }
+    if(pos<0)
+      return 1;
+    else
+      return 0;
+}
+
+int is_kanji1(s,pos)
+const char *s;
+int pos;
+{
+    unsigned char *str;
+
+    str = (unsigned char *)s;
+    while(*str && pos>0){
+	if(is_kanji(*str)){
+	    str+=2;
+	    pos-=2;
+	}
+	else{
+	    ++str;
+	    --pos;
+	}
+    }
+    if(!pos && is_kanji(*str))
+      return 1;
+    else
+      return 0;
+}
+
+/*
+**	8bit through isspace for Japanese
+*/
+int
+isspace_8(c)
+     int c;
+{
+    unsigned int *up;
+
+    up = (unsigned int *)&c;
+    return *up<0x80 ? isspace(*up) : 0;
+}
+/*
+** split string(str) including japanese before pos and return to
+** str1, str2.
+*/
+void
+split_japanese( str, str1, str2, pos )
+     char *str;
+     char *str1;
+     char *str2;
+     int pos;
+{
+    int len, i, j, k, mlen;
+    char *pstr;
+    char *pnstr;
+    int	sq_brac;
+
+retry:
+    len = strlen((char *)str);
+
+    if( len < pos ){
+	strcpy(str1,str);
+	*str2 = '\0';
+	return;
+    }
+
+    if(pos > 20)
+      mlen = 20;
+    else
+      mlen = pos;
+
+    i = pos;
+    if(is_kanji2(str, i))
+      --i;
+
+/* 1:
+** search space character
+*/
+    j = 0;
+    while( j<mlen ){
+	if(isspace_8(str[i-j])){
+	    --j;
+	    goto found;
+	}
+	else if(is_kanji1(str,i-j)){
+	    if(!strncmp(str+i-j,"　",2)){
+		j -= 2;
+		goto found;
+	    }
+	}
+	++j;
+    }
+
+/* 3:
+** search second bytes of japanese
+*/
+    j = 0;
+    sq_brac = 0;
+    while( j<mlen ){
+	if(str[i-j] == '['){
+	    sq_brac = 0;
+	    goto found;
+	}
+	else if(str[i-j] == ']')
+	  sq_brac = 1;
+	
+	if(!sq_brac && is_kanji1(str,i-j)){
+	    goto found;
+	}
+
+	++j;
+    }
+    if(pos > 2){
+	pos -= 2;
+	goto retry;
+    }
+found:
+
+    if(pos > 2){
+	if((str[i-j] == ']' ||
+	    str[i-j] == ')' ||
+	    str[i-j] == '}')){
+	    pos -= 2;
+	    goto retry;
+	}
+	else if(!strncmp(str+i-j, "］", 2) ||
+		!strncmp(str+i-j, "）", 2) ||
+		!strncmp(str+i-j, "｝", 2)){
+	    pos -= 2;
+	    goto retry;
+	}
+	else if(!strncmp(str+i-j,"？",2) ||
+		!strncmp(str+i-j,"、",2) ||
+		!strncmp(str+i-j,"。",2) ||
+		!strncmp(str+i-j,"，",2) ||
+		!strncmp(str+i-j,"．",2)){
+	    pos -= 2;
+	    goto retry;
+	}
+    }
+
+    pstr = str;
+
+    pnstr = str1;
+    for( k=0 ; k<i-j ; ++k )
+      *(pnstr++) = *(pstr++);
+    *(pnstr++) = '\0';
+
+    pnstr = str2;
+    for( ; str[k] ; ++k )
+      *(pnstr++) = *(pstr++);
+    *(pnstr++) = '\0';
+}
+
+void 
+jrndm_replace(c)
+     char *c;
+{
+    unsigned char cc[3];
+
+    if(IC==SJIS)
+      memcpy(cc, (char *)sj2e(c), 2);
+    else
+      memcpy(cc, c, 2);
+
+    cc[0] &= 0x7f;
+    cc[1] &= 0x7f;
+
+    switch(cc[0]){
+      case 0x21:
+	cc[1] = rn2(94) + 0x21;
+	break;
+      case 0x23:
+	if(cc[1] <= 0x39) /* ０〜９ */
+	  cc[1] = rn2(10) + 0x30;
+	else if(cc[1] <= 0x5A) /* Ａ〜Ｚ */
+	  cc[1] = rn2(26) + 0x41;
+	else if(cc[2] <= 0x7A) /* ａ〜ｚ */
+	  cc[1] = rn2(26) + 0x61;
+	break;
+      case 0x24:
+      case 0x25:
+	cc[1] = rn2(83) + 0x21; /* あ〜ん or ア〜ン */
+	break;
+      case 0x26:
+	if(cc[1] <= 0x30)
+	  cc[1] = rn2(24) + 0x21; /* Α〜Ω ギリシャ文字 */
+	else
+	  cc[1] = rn2(24) + 0x41; /* α〜ω ギリシャ文字 */
+	break;
+      case 0x27:
+	if(cc[1] <= 0x40)
+	  cc[1] = rn2(33) + 0x21; /* А〜Я ロシア文字 */
+	else
+	  cc[1] = rn2(33) + 0x51; /* а〜я ロシア文字 */
+	break;
+      case 0x4f:
+	cc[1] = rn2(51) + 0x21; /* 蓮〜 腕 */
+	break;
+      case 0x74:
+	cc[1] = rn2(4) + 0x21; /* 堯 槇 遙 瑤 の4文字*/
+	break;
+      default:
+	if(cc[0] >= 0x30 && cc[1] <= 0x74)
+	  cc[1] = rn2(94) + 0x21;
+	break;
+    }
+
+    cc[0] |= 0x80;
+    cc[1] |= 0x80;
+
+    if(IC==SJIS)
+      memcpy(c, (char *)e2sj(cc), 2);
+    else
+      memcpy(c, cc, 2);
+}
+
+const char *
+joffmsg(otmp, joshi)
+register struct obj *otmp;
+const char **joshi;
+{
+    static char buf[BUFSZ];
+
+    *joshi = "を";
+
+    if(otmp->oclass == RING_CLASS){
+	Sprintf(buf, "%sからはずす", body_part(FINGER));
+	return buf;
+    }
+    if( otmp->oclass == AMULET_CLASS){
+	return "はずす";
+    }
+    else if(is_helmet(otmp))
+      return "取る";
+    else if(is_gloves(otmp))
+      return "はずす";
+    else if(otmp->oclass == WEAPON_CLASS||is_shield(otmp)){
+	*joshi = "の";
+	return "装備を解く";
+    }
+    else if(is_suit(otmp))
+      return "脱ぐ";
+    else
+      return "はずす";
+}
+
+const char *
+jonmsg(otmp, joshi)
+register struct obj *otmp;
+const char **joshi;
+{
+    static char buf[BUFSZ];
+
+    *joshi = "を";
+
+    if(otmp->oclass == RING_CLASS){
+	Sprintf(buf, "%sにはめる", body_part(FINGER));
+	return buf;
+    }
+    else if(otmp->oclass == AMULET_CLASS)
+      return "身につける";
+    else if(is_gloves(otmp))
+      return "身につける";
+    else if(is_shield(otmp)){
+	*joshi = "で";
+	return "身を守る";
+    }
+    else if(is_helmet(otmp))
+      return "かぶる";
+    else if(otmp->oclass == WEAPON_CLASS){
+	Sprintf(buf, "%sにする", body_part(HAND));
+	return buf;
+    }
+    else if(is_boots(otmp))
+      return "履く";
+    else if(is_suit(otmp))
+      return "着る";
+    else
+      return "身につける";
+}
diff -aurN slashem-0.0.7E6F2/japanese/jpatchlevel.h jslashem-0.0.7E6F2-J0.0.8/japanese/jpatchlevel.h
--- slashem-0.0.7E6F2/japanese/jpatchlevel.h	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/jpatchlevel.h	2004-07-31 15:36:44.000000000 +0900
@@ -0,0 +1,13 @@
+/*
+**
+**	$Id: jpatchlevel.h,v 1.1.3.1 1999/11/17 06:35:05 issei Exp issei $
+**
+*/
+
+/* Copyright (c) Issei Numata 1994-2000 */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+#define JVERSION_MAJOR	0
+#define JVERSION_MINOR	0
+#define JPATCHLEVEL	7
+#define JEDITLEVEL	0
diff -aurN slashem-0.0.7E6F2/japanese/jtrns.c jslashem-0.0.7E6F2-J0.0.8/japanese/jtrns.c
--- slashem-0.0.7E6F2/japanese/jtrns.c	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/japanese/jtrns.c	2004-07-07 17:20:50.000000000 +0900
@@ -0,0 +1,284 @@
+/*
+**
+**	$Id: jtrns.c,v 1.1.3.1 1999/11/17 06:35:05 issei Exp issei $
+**
+*/
+
+/* Copyright (c) Issei Numata 1994-2000 */
+/* For 3.4, 2003 by Kentaro Shirakata */
+/* JNetHack may be freely redistributed.  See license for details. */
+
+#include "hack.h"
+
+#include <ctype.h>
+#ifdef NULL
+#undef NULL
+#define NULL ((void *)0)
+#endif
+
+#include "jdata.h"
+
+/* mode
+**
+**  0 - English(Original)
+**  1 - Japanese
+*/
+static int lang_mode = 1;
+static int trns_flg = 1;
+
+#include "hash.c"
+
+/*
+**	English -> Japanese
+*/
+static const unsigned char *
+  get(key, type)
+unsigned char *key;
+int type;
+{
+    int i = hash_tab[hash_val(key)];
+
+    while ( 0 <= i ){
+	const struct _jtrns_tab *p = &jtrns_tab[i];
+	if ((type == ' ' || p->type == type) &&
+	    !strcmp((char *)p->key, (char *)key))
+	  return p->val;
+	i = p->next;
+    }
+
+    return NULL;
+}
+
+/*
+**	Japanese -> English
+*/
+static const unsigned char *
+  rev_get(val, type)
+unsigned char *val;
+int type;
+{
+    int i = rhash_tab[hash_val(val)];
+
+    while ( 0 <= i ){
+	const struct _jtrns_tab *p = &jtrns_tab[i];
+	if ((type == ' ' || p->type == type) &&
+	    !strcmp((char *)p->val, (char *)val))
+	  return p->key;
+	i = p->rev_next;
+    }
+
+    return NULL;
+}
+
+void
+init_jtrns()
+{
+  ;
+}
+
+int
+dotogglelang()
+{
+    lang_mode = (!lang_mode);
+
+    switch(lang_mode){
+      case 0:
+	pline("オリジナルモード");
+	break;
+      case 1:
+	pline("日本語モード");
+	break;
+    }
+    return 0;
+}
+
+int
+query_lang_mode()
+{
+    return lang_mode;
+}
+#if 0
+static void
+set_lang_mode(ln)
+     int ln;
+{
+    lang_mode = ln;
+}
+#endif
+void
+set_trns_mode(flg)
+     int flg;
+{
+    trns_flg = flg;
+}
+
+/*
+  モンスター名変換(性別つき)
+*/
+const char *
+jtrns_mon_gen(name, female)
+     const char *name;
+     int female;
+{
+    if(name == NULL) return NULL;
+    if(!trns_flg) return name;
+
+    if(female){
+	if(!strcmp(name, "werejackal") || !strcmp(name, "Werejackal"))
+	  return "ジャッカル女";
+	else if(!strcmp(name, "werewolf") || !strcmp(name, "Werewolf"))
+	  return "狼女";
+	else if(!strcmp(name, "wererat") || !strcmp(name, "Wererat"))
+	  return "ねずみ女";
+	else if(!strcmp(name, "werepanther") || !strcmp(name, "Werepanther"))
+	  return "豹女";
+	else if(!strcmp(name, "weretiger") || !strcmp(name, "Weretiger"))
+	  return "虎女";
+	else if(!strcmp(name, "werespider") || !strcmp(name, "Werespider"))
+	  return "蜘蛛女";
+	else if(!strcmp(name, "weresnake") || !strcmp(name, "Weresnake"))
+	  return "蛇女";
+    } else {
+	if(!strcmp(name, "werejackal") || !strcmp(name, "Werejackal"))
+	  return "ジャッカル男";
+	else if(!strcmp(name, "werewolf") || !strcmp(name, "Werewolf"))
+	  return "狼男";
+	else if(!strcmp(name, "wererat") || !strcmp(name, "Wererat"))
+	  return "ねずみ男";
+	else if(!strcmp(name, "werepanther") || !strcmp(name, "Werepanther"))
+	  return "豹男";
+	else if(!strcmp(name, "weretiger") || !strcmp(name, "Weretiger"))
+	  return "虎男";
+	else if(!strcmp(name, "werespider") || !strcmp(name, "Werespider"))
+	  return "蜘蛛男";
+	else if(!strcmp(name, "weresnake") || !strcmp(name, "Weresnake"))
+	  return "蛇男";
+    }
+    return jtrns_mon(name);
+}
+
+/*
+  モンスター名変換(無性別)
+*/
+const char *
+jtrns_mon(name)
+     const char *name;
+{
+    const char *ret;
+
+    if(name == NULL) return NULL;
+    if(!trns_flg) return name;
+
+    ret = get(name, '@');
+
+    if(ret == NULL) return name;
+
+    return ret;
+}
+
+const char *
+jtrns_obj(type, name)
+     const int type;
+     const char *name;
+{
+    const char *ret;
+
+    if(name==NULL)
+      return NULL;
+
+    if(!trns_flg)
+      return name;
+
+    ret = (const char *)get(name, type);
+    if( ret==NULL )
+      return name;
+    else
+      return ret;
+}
+#if 0
+/*
+** this 2 functions does not transform
+** if mode is original.
+*/
+static const char *
+jtrns_mon2(name)
+     const char *name;
+{
+    const char *ret;
+
+    if(!lang_mode || !trns_flg)	/* original mode */
+      return name;
+
+    if(name==NULL)
+      return NULL;
+
+    ret =  (const char *)get(name, '@');
+    if( ret==NULL )
+      return name;
+    return ret;
+}
+static const char *
+jtrns_obj2(type,name)
+     const int type;
+     const char *name;
+{
+    const char *ret;
+
+    if(!lang_mode || !trns_flg)	/* original mode */
+      return name;
+
+    if(name==NULL)
+      return NULL;
+
+    ret = (const char *)get(name, type);
+    if( ret==NULL )
+      return name;
+    else
+      return ret;
+}
+#endif
+/*
+**
+*/
+const char *
+etrns_mon(name)
+     const char *name;
+{
+    const char *ret;
+
+    if(name==NULL)
+      return NULL;
+
+    ret = (const char *)rev_get(name, '@');
+    if( ret==NULL )
+      return name;
+    else
+      return ret;
+}
+
+const char *
+etrns_obj(type, name)
+     const int type;
+     const char *name;
+{
+    const char *ret;
+
+    if(name==NULL)
+      return NULL;
+
+    ret = (const char *)rev_get(name, type);
+    if( ret==NULL )
+      return name;
+    else
+      return ret;
+}
+char
+objclass_to_sym(oc)
+     const int oc;
+{
+    if(oc <= 0 || MAXOCLASSES <= oc)
+      return ' '; /* 'S'? */
+    if(oc == ARMOR_CLASS)
+      return ']';
+    return def_oc_syms[oc];
+}
diff -aurN slashem-0.0.7E6F2/src/allmain.c jslashem-0.0.7E6F2-J0.0.8/src/allmain.c
--- slashem-0.0.7E6F2/src/allmain.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/allmain.c	2004-06-30 22:51:42.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* various code that was replicated in *main.c */
 
 #include "hack.h"
@@ -39,20 +47,32 @@
 
     flags.moonphase = phase_of_the_moon();
     if(flags.moonphase == FULL_MOON) {
+/*JP
 	You("are lucky!  Full moon tonight.");
+*/
+	        pline("ラッキー！今晩は満月だ．");
 	change_luck(1);
     } else if(flags.moonphase == NEW_MOON) {
+/*JP
 	pline("Be careful!  New moon tonight.");
+*/
+	        pline("注意しろ！今晩は新月だ．");
     }
     flags.friday13 = friday_13th();
     if (flags.friday13) {
+/*JP
 	pline("Watch out!  Bad things can happen on Friday the 13th.");
+*/
+	        pline("用心しろ！１３日の金曜日にはよくないことがある．") ;
 	change_luck(-1);
     }
     /* KMH -- February 2 */
     flags.groundhogday = groundhog_day();
     if (flags.groundhogday)
+/*JP
 	pline("Happy Groundhog Day!");
+*/
+	pline("今日は幸せな聖燭節の日！春の到来！");
 
     initrack();
 
@@ -250,7 +270,10 @@
 			    } else if (!Upolyd && u.uhp > 1) {
 				u.uhp--;
 			    } else {
+/*JP
 				You("pass out from exertion!");
+*/
+				pline("疲労で意識を失った！");
 				exercise(A_CON, FALSE);
 				fall_asleep(-10, FALSE);
 			    }
@@ -419,11 +442,20 @@
 		u.utrap -= 1<<8;
 		if(u.utrap < 1<<8) {
 		    killer_format = KILLED_BY;
+/*JP
 		    killer = "molten lava";
+*/
+			    killer = "どろどろの溶岩で";
+/*JP
 		    You("sink below the surface and die.");
+*/
+			    You("溶岩に深く沈み，溶けた．");
 		    done(DISSOLVED);
 		} else if(didmove && !u.umoved) {
+/*JP
 		    Norep("You sink deeper into the lava.");
+*/
+			    Norep("溶岩に深く沈んだ．");
 		    u.utrap += rnd(4);
 		}
 	    }
@@ -488,7 +520,10 @@
 {
 	if(occupation) {
 		if (!maybe_finished_meal(TRUE))
+/*JP
 		    You("stop %s.", occtxt);
+*/
+		    You("%sのを中断した．", occtxt);
 		occupation = 0;
 		flags.botl = 1; /* in case u.uhs changed */
 /* fainting stops your occupation, there's no reason to sync.
@@ -620,11 +655,17 @@
      */
     *buf = '\0';
     if (new_game || u.ualignbase[A_ORIGINAL] != u.ualignbase[A_CURRENT])
+/*JP
 	Sprintf(eos(buf), " %s", align_str(u.ualignbase[A_ORIGINAL]));
+*/
+	Sprintf(eos(buf), "%s", align_str(u.ualignbase[A_ORIGINAL]));
     if (!urole.name.f &&
 	    (new_game ? (urole.allow & ROLE_GENDMASK) == (ROLE_MALE|ROLE_FEMALE) :
 	     currentgend != flags.initgend))
+/*JP
 	Sprintf(eos(buf), " %s", genders[currentgend].adj);
+*/
+	Sprintf(eos(buf), "の%s", genders[currentgend].j);
 
 #if 0
     pline(new_game ? "%s %s, welcome to NetHack!  You are a%s %s %s."
@@ -632,6 +673,7 @@
 	  Hello((struct monst *) 0), plname, buf, urace.adj,
 	  (currentgend && urole.name.f) ? urole.name.f : urole.name.m);
 #endif
+#if 0 /*JP*/
     if (new_game) pline("%s %s, welcome to %s!  You are a%s %s %s.",
 	  Hello((struct monst *) 0), plname, DEF_GAME_NAME, buf, urace.adj,
 	  (currentgend && urole.name.f) ? urole.name.f : urole.name.m);
@@ -639,6 +681,18 @@
 	  Hello((struct monst *) 0), plname, buf, urace.adj,
 	  (currentgend && urole.name.f) ? urole.name.f : urole.name.m, 
 	  DEF_GAME_NAME);
+#else /*JP*/
+    if(new_game){
+	pline("%s，%sの世界へ！このゲームではあなたは%sの%s(%s)だ．",
+	      Hello((struct monst *) 0, TRUE), DEF_GAME_NAME, urace.j,
+	      (currentgend && urole.jname.f) ? urole.jname.f : urole.jname.m,
+	      buf);
+    } else {
+	pline("%s，%sの世界へ！あなたは%sの%sだ！",
+	      Hello((struct monst *) 0, TRUE), DEF_GAME_NAME, urace.j,
+	      (currentgend && urole.jname.f) ? urole.jname.f : urole.jname.m);
+    }
+#endif /*JP*/
 }
 
 #ifdef POSITIONBAR
diff -aurN slashem-0.0.7E6F2/src/apply.c jslashem-0.0.7E6F2-J0.0.8/src/apply.c
--- slashem-0.0.7E6F2/src/apply.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/apply.c	2004-07-31 14:50:56.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "edog.h"
 
@@ -49,7 +57,10 @@
 void FDECL( amii_speaker, ( struct obj *, char *, int ) );
 #endif
 
+/*JP
 const char no_elbow_room[] = "don't have enough elbow-room to maneuver.";
+*/
+const char no_elbow_room[] = "それをするだけのゆとりがない．";
 
 #ifdef TOURIST
 STATIC_OVL int
@@ -59,7 +70,10 @@
 	register struct monst *mtmp;
 
 	if(Underwater) {
+/*JP
 		pline("Using your camera underwater would void the warranty.");
+*/
+		pline("そんなことをしたら保証が効かなくなる．");
 		return(0);
 	}
 	if(!getdir((char *)0)) return(0);
@@ -73,10 +87,18 @@
 	if (obj->cursed && !rn2(2)) {
 		(void) zapyourself(obj, TRUE);
 	} else if (u.uswallow) {
+#if 0 /*JP*/
 		You("take a picture of %s %s.", s_suffix(mon_nam(u.ustuck)),
 		    mbodypart(u.ustuck, STOMACH));
+#else
+		You("%sの%sの写真を撮った．", mon_nam(u.ustuck),
+		    mbodypart(u.ustuck, STOMACH));
+#endif
 	} else if (u.dz) {
+/*JP
 		You("take a picture of the %s.",
+*/
+		You("%sの写真を撮った",
 			(u.dz > 0) ? surface(u.ux,u.uy) : ceiling(u.ux,u.uy));
 	} else if (!u.dx && !u.dy) {
 		(void) zapyourself(obj, TRUE);
@@ -96,10 +118,16 @@
 	struct obj *obj;
 {
 	if(!freehand()) {
+/*JP
 		You("have no free %s!", body_part(HAND));
+*/
+		You("%sの自由が効かない！", body_part(HAND));
 		return 0;
 	} else if (obj->owornmask) {
+/*JP
 		You("cannot use it while you're wearing it!");
+*/
+		You("それを身につけているので使用できない！");
 		return 0;
 	} else if (obj->cursed) {
 		long old;
@@ -107,25 +135,46 @@
 		case 2:
 		    old = Glib;
 		    incr_itimeout(&Glib, rn1(10, 3));
+#if 0 /*JP*/
 		    Your("%s %s!", makeplural(body_part(HAND)),
 			(old ? "are filthier than ever" : "get slimy"));
+#else
+		    Your("%sは%s！", makeplural(body_part(HAND)),
+			(old ? "ますます汚なくなった" : "ぬるぬるになった"));
+#endif
 		    return 1;
 		case 1:
 		    if (!ublindf) {
 			old = u.ucreamed;
 			u.ucreamed += rn1(10, 3);
+#if 0 /*JP*/
 			pline("Yecch! Your %s %s gunk on it!", body_part(FACE),
 			      (old ? "has more" : "now has"));
+#else
+			pline("ゲェー！あなたの%sは%sべとべとになった！", body_part(FACE),
+			      (old ? "もっと" : ""));
+#endif
 			make_blinded(Blinded + (long)u.ucreamed - old, TRUE);
 		    } else {
 			const char *what = (ublindf->otyp == LENSES) ?
+#if 0 /*JP*/
 					    "lenses" : "blindfold";
+#endif
+					    "レンズ" : "目隠し";
 			if (ublindf->cursed) {
+#if 0 /*JP*/
 			    You("push your %s %s.", what,
 				rn2(2) ? "cock-eyed" : "crooked");
+#else
+			    pline("%sがずれた．", what);
+#endif
 			} else {
 			    struct obj *saved_ublindf = ublindf;
+#if 0 /*JP*/
 			    You("push your %s off.", what);
+#else
+			    You("%sがずり落ちた．", what);
+#endif
 			    Blindf_off(ublindf);
 			    dropx(saved_ublindf);
 			}
@@ -138,23 +187,35 @@
 
 	if (Glib) {
 		Glib = 0;
+/*JP
 		You("wipe off your %s.", makeplural(body_part(HAND)));
+*/
+		You("%sを拭いた．", makeplural(body_part(HAND)));
 		return 1;
 	} else if(u.ucreamed) {
 		Blinded -= u.ucreamed;
 		u.ucreamed = 0;
 
 		if (!Blinded) {
+/*JP
 			pline("You've got the glop off.");
+*/
+			You("さっぱりした．");
 			Blinded = 1;
 			make_blinded(0L,TRUE);
 		} else {
+/*JP
 			Your("%s feels clean now.", body_part(FACE));
+*/
+			pline("%sの汚れを拭きとった．", body_part(FACE));
 		}
 		return 1;
 	}
 
+/*JP
 	Your("%s and %s are already clean.",
+*/
+	Your("%sや%sは汚れていない．",
 		body_part(FACE), makeplural(body_part(HAND)));
 
 	return 0;
@@ -174,7 +235,10 @@
 	if (Hallucination && sobj_at(CORPSE, rx, ry)) {
 	    /* (a corpse doesn't retain the monster's sex,
 	       so we're forced to use generic pronoun here) */
+/*JP
 	    You_hear("a voice say, \"It's dead, Jim.\"");
+*/
+	    You_hear("「それは死んでるぜ，ジム」という声が聞こえた．");
 	    *resp = 1;
 	    return TRUE;
 	} else if (Role_if(PM_HEALER) && ((otmp = sobj_at(CORPSE, rx, ry)) != 0 ||
@@ -183,21 +247,36 @@
 	       if both types are present, but it's not worth the effort */
 	    if (vobj_at(rx, ry)->otyp == STATUE) otmp = vobj_at(rx, ry);
 	    if (otmp->otyp == CORPSE) {
+#if 0 /*JP*/
 		You("determine that %s unfortunate being is dead.",
 		    (rx == u.ux && ry == u.uy) ? "this" : "that");
+#else
+		You("%s不幸な生き物は死んでいると結論した．",
+		    (rx == u.ux && ry == u.uy) ? "この" : "その");
+#endif
 	    } else {
 		ttmp = t_at(rx, ry);
+#if 0 /*JP*/
 		pline("%s appears to be in %s health for a statue.",
 		      The(mons[otmp->corpsenm].mname),
 		      (ttmp && ttmp->ttyp == STATUE_TRAP) ?
 			"extraordinary" : "excellent");
+#else
+		pline("彫像としての%sは%s作品だ．",
+		      jtrns_mon(The(mons[otmp->corpsenm].mname)),
+		      (ttmp && ttmp->ttyp == STATUE_TRAP) ?
+			"健康的な" : "躍動的な");
+#endif
 	    }
 	    return TRUE;
 	}
 	return FALSE;
 }
 
+/*JP
 static const char hollow_str[] = "a hollow sound.  This must be a secret %s!";
+*/
+static const char hollow_str[] = "うつろな音を聞いた．秘密の%sに違いない！";
 
 /* Strictly speaking it makes no sense for usage of a stethoscope to
    not take any time; however, unless it did, the stethoscope would be
@@ -216,10 +295,17 @@
 				!rn2(Role_if(PM_HEALER) ? 10 : 3));
 
 	if (nohands(youmonst.data)) {	/* should also check for no ears and/or deaf */
+#if 0 /*JP*/
 		You("have no hands!");	/* not `body_part(HAND)' */
+#else
+		pline("あなたには手がない！");
+#endif
 		return 0;
 	} else if (!freehand()) {
+/*JP
 		You("have no free %s.", body_part(HAND));
+*/
+		You("%sの自由が効かない．", body_part(HAND));
 		return 0;
 	}
 	if (!getdir((char *)0)) return 0;
@@ -232,7 +318,10 @@
 #ifdef STEED
 	if (u.usteed && u.dz > 0) {
 		if (interference) {
+/*JP
 			pline("%s interferes.", Monnam(u.ustuck));
+*/
+			pline("%sがじゃまをした．", Monnam(u.ustuck));
 			mstatusline(u.ustuck);
 		} else
 			mstatusline(u.usteed);
@@ -243,24 +332,44 @@
 		mstatusline(u.ustuck);
 		return res;
 	} else if (u.uswallow && interference) {
+/*JP
 		pline("%s interferes.", Monnam(u.ustuck));
+*/
+		pline("%sがじゃまをした．", Monnam(u.ustuck));
 		mstatusline(u.ustuck);
 		return res;
 	} else if (u.dz) {
 		if (Underwater)
+/*JP
 		    You_hear("faint splashing.");
+*/
+		    You_hear("かすかにバシャバシャという音を聞いた．");
 		else if (u.dz < 0 || !can_reach_floor())
+#if 0 /*JP*/
 		    You_cant("reach the %s.",
 			(u.dz > 0) ? surface(u.ux,u.uy) : ceiling(u.ux,u.uy));
+#else
+		    You("%sに届かない．",
+			(u.dz > 0) ? surface(u.ux,u.uy) : ceiling(u.ux,u.uy));
+#endif
 		else if (its_dead(u.ux, u.uy, &res))
 		    ;	/* message already given */
 		else if (Is_stronghold(&u.uz))
+/*JP
 		    You_hear("the crackling of hellfire.");
+*/
+		    You_hear("地獄の炎がパチパチ燃えている音を聞いた．");
 		else
+/*JP
 		    pline_The("%s seems healthy enough.", surface(u.ux,u.uy));
+*/
+		    pline("%sは十分健康のようだ．", surface(u.ux,u.uy));
 		return res;
 	} else if (obj->cursed && !rn2(2)) {
+/*JP
 		You_hear("your heart beat.");
+*/
+		You_hear("自分の心臓の鼓動を聞いた．");
 		return res;
 	}
 	if (Stunned || (Confusion && !rn2(5))) confdir();
@@ -270,7 +379,10 @@
 	}
 	rx = u.ux + u.dx; ry = u.uy + u.dy;
 	if (!isok(rx,ry)) {
+/*JP
 		You_hear("a faint typing noise.");
+*/
+		You_hear("かすかにだれかがタイピングしている音を聞いた．");
 		return 0;
 	}
 	if ((mtmp = m_at(rx,ry)) != 0) {
@@ -286,18 +398,27 @@
 	if (memory_is_invisible(rx, ry)) {
 		unmap_object(rx, ry);
 		newsym(rx, ry);
+/*JP
 		pline_The("invisible monster must have moved.");
+*/
+		pline_The("見えない怪物は移動してしまったようだ．");
 	}
 	lev = &levl[rx][ry];
 	switch(lev->typ) {
 	case SDOOR:
+/*JP
 		You_hear(hollow_str, "door");
+*/
+		You_hear(hollow_str, "扉");
 		cvt_sdoor_to_door(lev);		/* ->typ = DOOR */
 		if (Blind) feel_location(rx,ry);
 		else newsym(rx,ry);
 		return res;
 	case SCORR:
+/*JP
 		You_hear(hollow_str, "passage");
+*/
+		You_hear(hollow_str, "通路");
 		lev->typ = CORR;
 		unblock_point(rx,ry);
 		if (Blind) feel_location(rx,ry);
@@ -306,17 +427,27 @@
 	}
 
 	if (!its_dead(rx, ry, &res))
+#if 0 /*JP*/
 	    You("hear nothing special.");	/* not You_hear()  */
+#else
+	    pline("別に何も聞こえない．");
+#endif
 	return res;
 }
 
+/*JP
 static const char whistle_str[] = "produce a %s whistling sound.";
+*/
+static char whistle_str[] = "笛を吹いて%s音をたてた．";
 
 STATIC_OVL void
 use_whistle(obj)
 struct obj *obj;
 {
+/*JP
 	You(whistle_str, obj->cursed ? "shrill" : "high");
+*/
+	You(whistle_str, obj->cursed ? "不気味な" : "かん高い");
 	wake_nearby();
 }
 
@@ -327,11 +458,17 @@
 	register struct monst *mtmp, *nextmon;
 
 	if(obj->cursed && !rn2(2)) {
+/*JP
 		You("produce a high-pitched humming noise.");
+*/
+		You("調子の高いうなるような音をたてた．");
 		wake_nearby();
 	} else {
 		int pet_cnt = 0;
+/*JP
 		You(whistle_str, Hallucination ? "normal" : "strange");
+*/
+		You(whistle_str, Hallucination ? "笛のような" : "奇妙な");
 		for(mtmp = fmon; mtmp; mtmp = nextmon) {
 		    nextmon = mtmp->nmon; /* trap might kill mon */
 		    if (DEADMONSTER(mtmp)) continue;
@@ -389,9 +526,15 @@
 
 	if (feedback) {
 	    if (canseemon(mtmp))
+/*JP
 		pline("%s pulls free of %s leash!", Monnam(mtmp), mhis(mtmp));
+*/
+		pline("%sは紐を引っぱって逃れた！", Monnam(mtmp));
 	    else
+/*JP
 		Your("leash falls slack.");
+*/
+		Your("紐がたるんで落ちた．");
 	}
 	for(otmp = invent; otmp; otmp = otmp->nobj)
 		if(otmp->otyp == LEASH &&
@@ -424,7 +567,10 @@
 	int spotmon;
 
 	if(!obj->leashmon && number_leashed() >= MAXLEASHED) {
+/*JP
 		You("cannot leash any more pets.");
+*/
+		You("これ以上ペットに紐をかけられない．");
 		return;
 	}
 
@@ -438,12 +584,18 @@
 		    goto got_target;
 		}
 #endif
+/*JP
 		pline("Leash yourself?  Very funny...");
+*/
+		pline("自分を縛る？変なの．．．");
 		return;
 	}
 
 	if(!(mtmp = m_at(cc.x, cc.y))) {
+/*JP
 		There("is no creature there.");
+*/
+		pline("そこには生き物はいない．");
 		return;
 	}
 
@@ -468,50 +620,89 @@
 	if ((mtmp->data->mlet == S_NYMPH || mtmp->data == &mons[PM_SUCCUBUS]
 		 || mtmp->data == &mons[PM_INCUBUS])
 	     && (spotmon) && (!mtmp->mleashed)) {
+#if 0 /*JP*/
 	       pline("%s looks shocked! \"I'm not that way!\"", Monnam(mtmp));
+#else
+	       pline("%sはショックを受けたように見える！「私にその気はない！」", Monnam(mtmp));
+#endif
 	       mtmp->mtame = 0;
 	       mtmp->mpeaceful = 0;
 	       mtmp->msleeping = 0;
 	}
 	if(!mtmp->mtame) {
 	    if(!spotmon)
+#if 0 /*JP*/
 		There("is no creature there.");
+#else
+		pline("そこには生き物はいない．");
+#endif
 	    else
+#if 0 /*JP*/
 		pline("%s %s leashed!", Monnam(mtmp), (!obj->leashmon) ?
 				"cannot be" : "is not");
+#else
+		pline("%sは紐で%s！", Monnam(mtmp), (!obj->leashmon) ?
+				"結べない" : "結ばれていない");
+#endif
 	    return;
 	}
 	if(!obj->leashmon) {
 		if(mtmp->mleashed) {
+#if 0 /*JP*/
 			pline("This %s is already leashed.",
 			      spotmon ? l_monnam(mtmp) : "monster");
+#else
+			You("%sを紐で結びつけた．",
+			      spotmon ? l_monnam(mtmp) : "怪物");
+#endif
 			return;
 		}
+#if 0 /*JP*/
 		You("slip the leash around %s%s.",
 		    spotmon ? "your " : "", l_monnam(mtmp));
+#else
+		You("%sを紐で結びつけた．",
+		    l_monnam(mtmp));
+#endif
 		mtmp->mleashed = 1;
 		obj->leashmon = (int)mtmp->m_id;
 		mtmp->msleeping = 0;
 		return;
 	}
 	if(obj->leashmon != (int)mtmp->m_id) {
+#if 0 /*JP*/
 		pline("This leash is not attached to that creature.");
+#else
+		pline("この紐はそれには結ばれていない．");
+#endif
 		return;
 	} else {
 		if(obj->cursed) {
+#if 0 /*JP*/
 			pline_The("leash would not come off!");
+#else
+			pline("紐がはずれない！");
+#endif
 			obj->bknown = TRUE;
 			return;
 		}
 		mtmp->mleashed = 0;
 		obj->leashmon = 0;
+#if 0 /*JP*/
 		You("remove the leash from %s%s.",
 		    spotmon ? "your " : "", l_monnam(mtmp));
+#else
+		You("%sから紐をはずした．", l_monnam(mtmp));
+#endif
 		/* KMH, balance patch -- this is okay */
 		if ((mtmp->data == &mons[PM_SUCCUBUS]) ||
 				(mtmp->data == &mons[PM_INCUBUS]))
 		{
+#if 0 /*JP*/
 		    pline("%s is infuriated!", Monnam(mtmp));
+#else
+		    pline("%sは激しく怒り出した！", Monnam(mtmp));
+#endif
 		    mtmp->mtame = 0;
 		    mtmp->mpeaceful = 0;
 		}
@@ -553,8 +744,12 @@
 				if(otmp->otyp == LEASH &&
 					otmp->leashmon == (int)mtmp->m_id) {
 				    if(otmp->cursed) return(FALSE);
+#if 0 /*JP*/
 				    You_feel("%s leash go slack.",
 					(number_leashed() > 1) ? "a" : "the");
+#else
+				    You("紐がたるんだような気がした．");
+#endif
 				    mtmp->mleashed = 0;
 				    otmp->leashmon = 0;
 				}
@@ -598,7 +793,10 @@
 			    (mtmp->mhp -= rnd(2)) <= 0) {
 			long save_pacifism = u.uconduct.killer;
 
+/*JP
 			Your("leash chokes %s to death!", mon_nam(mtmp));
+*/
+			pline("%sは絞め殺された！",mon_nam(mtmp));
 			/* hero might not have intended to kill pet, but
 			   that's the result of his actions; gain experience,
 			   lose pacifism, take alignment and luck hit, make
@@ -607,16 +805,25 @@
 			/* life-saving doesn't ordinarily reset this */
 			if (mtmp->mhp > 0) u.uconduct.killer = save_pacifism;
 		    } else {
+/*JP
 			pline("%s chokes on the leash!", Monnam(mtmp));
+*/
+			pline("%sは紐で首を絞められた！", Monnam(mtmp));
 			/* tameness eventually drops to 1 here (never 0) */
 			if (mtmp->mtame && rn2(mtmp->mtame)) mtmp->mtame--;
 		    }
 		} else {
 		    if (um_dist(mtmp->mx, mtmp->my, 5)) {
+/*JP
 			pline("%s leash snaps loose!", s_suffix(Monnam(mtmp)));
+*/
+			pline("%sの紐はパチンと外れた！", Monnam(mtmp));
 			m_unleash(mtmp, FALSE);
 		    } else {
+/*JP
 			You("pull on the leash.");
+*/
+				    You("紐を引っぱった．");
 			if (mtmp->data->msound != MS_SILENT)
 			    switch (rn2(3)) {
 			    case 0:  growl(mtmp);   break;
@@ -634,7 +841,10 @@
 
 #define WEAK	3	/* from eat.c */
 
+/*JP
 static const char look_str[] = "look %s.";
+*/
+static const char look_str[] = "%s見える．";
 
 STATIC_OVL int
 use_mirror(obj)
@@ -647,57 +857,116 @@
 	if(!getdir((char *)0)) return 0;
 	if(obj->cursed && !rn2(2)) {
 		if (!Blind)
+#if 0 /*JP*/
 			pline_The("mirror fogs up and doesn't reflect!");
+#else
+			pline("鏡は曇り，映らなくなった！");
+#endif
 		return 1;
 	}
 	if(!u.dx && !u.dy && !u.dz) {
 		if(!Blind && !Invisible) {
 		    if (u.umonnum == PM_FLOATING_EYE) {
 			if (!Free_action) {
+#if 0 /*JP*/
 			pline(Hallucination ?
 			      "Yow!  The mirror stares back!" :
 			      "Yikes!  You've frozen yourself!");
+#else
+			pline(Hallucination ?
+			      "おゎ！鏡があなたをにらみ返した！" :
+			      "おゎ！あなたは動けなくなった！");
+#endif
 			nomul(-rnd((MAXULEV+6) - u.ulevel));
 			nomovemsg = 0;
+#if 0 /*JP*/
 			} else You("stiffen momentarily under your gaze.");
-		    } else if (is_vampire(youmonst.data))
+#else
+			} else You("一瞬あなたのにらみで硬直した．");
+#endif
+
		    } else if (is_vampire(youmonst.data))
+#if 0 /*JP*/
 			You("don't have a reflection.");
-		    else if (u.umonnum == PM_UMBER_HULK) {
+#else
+			You("鏡に映らなかった．");
+#endif
+
		    else if (u.umonnum == PM_UMBER_HULK) {
+#if 0 /*JP*/
 			pline("Huh?  That doesn't look like you!");
-			make_confused(HConfusion + d(3,4),FALSE);
+#else
+			pline("ほえ？写ってるのはあなたじゃないみたいだ！");
+#endif
+
			make_confused(HConfusion + d(3,4),FALSE);
 		    } else if (Hallucination)
 			You(look_str, hcolor((char *)0));
 		    else if (Sick)
+#if 0 /*JP*/
 			You(look_str, "peaked");
-		    else if (u.uhs >= WEAK)
+#else
+			You(look_str, "顔色が悪く");
+#endif
+
		    else if (u.uhs >= WEAK)
+#if 0 /*JP*/
 			You(look_str, "undernourished");
+#else
+			You(look_str, "栄養失調のように");
+#endif
+
#if 0 /*JP*/
 		    else You("look as %s as ever.",
 				ACURR(A_CHA) > 14 ?
 				(poly_gender()==1 ? "beautiful" : "handsome") :
 				"ugly");
+#else
+		    else You("あいかわらず%s見える．",
+				ACURR(A_CHA) > 14 ?
+				(poly_gender()==1 ? "美しく" : "りりしく") :
+				"醜く");
+#endif
 		} else {
+#if 0 /*JP*/
 			You_cant("see your %s %s.",
 				ACURR(A_CHA) > 14 ?
 				(poly_gender()==1 ? "beautiful" : "handsome") :
 				"ugly",
 				body_part(FACE));
+#else
+			You("自分の%s%sを見ることができない．",
+				ACURR(A_CHA) > 14 ?
+				(poly_gender()==1 ? "美しい" : "りりしい") :
+				"醜い",
+				body_part(FACE));
+#endif
 		}
 		return 1;
 	}
 	if(u.uswallow) {
+#if 0 /*JP*/
 		if (!Blind) You("reflect %s %s.", s_suffix(mon_nam(u.ustuck)),
+#else
+		if (!Blind) You("%sの%sを映した．", mon_nam(u.ustuck),
+#endif
 		    mbodypart(u.ustuck, STOMACH));
 		return 1;
 	}
 	if(Underwater) {
+#if 0 /*JP*/
 		You(Hallucination ?
 		    "give the fish a chance to fix their makeup." :
 		    "reflect the murky water.");
+#else
+		You(Hallucination ?
+		    "魚がやってきて化粧直しをした．":
+		    "あなたは陰気な水を映した．");
+#endif
 		return 1;
 	}
 	if(u.dz) {
 		if (!Blind)
+#if 0 /*JP*/
 		    You("reflect the %s.",
+#else
+		    You("%sを映した．",
+#endif
 			(u.dz > 0) ? surface(u.ux,u.uy) : ceiling(u.ux,u.uy));
 		return 1;
 	}
@@ -712,21 +981,41 @@
 	mlet = mtmp->data->mlet;
 	if (mtmp->msleeping) {
 		if (vis)
+#if 0 /*JP*/
 		    pline ("%s is too tired to look at your mirror.",
+#else
+		    pline ("%sはとても疲れていて鏡を見ることができない．",
+#endif
 			    Monnam(mtmp));
 	} else if (!mtmp->mcansee) {
 	    if (vis)
+#if 0 /*JP*/
 		pline("%s can't see anything right now.", Monnam(mtmp));
+#else
+		pline("%sは幻覚に襲われていて，ちゃんと見ることができない．", Monnam(mtmp));
+#endif
 	/* some monsters do special things */
 	} else if (is_vampire(mtmp->data) || mlet == S_GHOST) {
 	    if (vis)
+#if 0 /*JP*/
 		pline ("%s doesn't have a reflection.", Monnam(mtmp));
+#else
+		pline ("%sは鏡に写らない．", Monnam(mtmp));
+#endif
 	} else if(!mtmp->mcan && !mtmp->minvis &&
 					mtmp->data == &mons[PM_MEDUSA]) {
+#if 0 /*JP*/
 		if (mon_reflects(mtmp, "The gaze is reflected away by %s %s!"))
+#else
+		if (mon_reflects(mtmp, "にらみは%sの%sで反射した！"))
+#endif
 			return 1;
 		if (vis)
+#if 0 /*JP*/
 			pline("%s is turned to stone!", Monnam(mtmp));
+#else
+			pline("%sは石になった！", Monnam(mtmp));
+#endif
 		stoned = TRUE;
 		killed(mtmp);
 	} else if(!mtmp->mcan && !mtmp->minvis &&
@@ -734,8 +1023,13 @@
 		int tmp = d((int)mtmp->m_lev, (int)mtmp->data->mattk[0].damd);
 		if (!rn2(4)) tmp = 120;
 		if (vis)
+#if 0 /*JP*/
 			pline("%s is frozen by its reflection.", Monnam(mtmp));
 		else You_hear("%s stop moving.",something);
+#else
+			pline("%sは自分の姿を見て動けなくなった．", Monnam(mtmp));
+		else You_hear("何かが動きをとめた音を聞いた．");
+#endif
 		mtmp->mcanmove = 0;
 		if ( (int) mtmp->mfrozen + tmp > 127)
 			mtmp->mfrozen = 127;
@@ -743,14 +1037,26 @@
 	} else if(!mtmp->mcan && !mtmp->minvis &&
 					mtmp->data == &mons[PM_UMBER_HULK]) {
 		if (vis)
+/*JP
 			pline ("%s confuses itself!", Monnam(mtmp));
+*/
+			pline ("%sは混乱した！", Monnam(mtmp));
 		mtmp->mconf = 1;
 	} else if(!mtmp->mcan && !mtmp->minvis && (mlet == S_NYMPH
 				     || mtmp->data==&mons[PM_SUCCUBUS])) {
 		if (vis) {
+/*JP
 		    pline ("%s admires herself in your mirror.", Monnam(mtmp));
+*/
+		    pline ("%sは自分の姿にうっとりした．", Monnam(mtmp));
+/*JP
 		    pline ("She takes it!");
+*/
+		    pline ("彼女はそれを奪った！");
+/*JP
 		} else pline ("It steals your mirror!");
+*/
+		} else pline ("何者かがあなたの鏡を盗んだ！");
 		setnotworn(obj); /* in case mirror was wielded */
 		freeinv(obj);
 		(void) mpickobj(mtmp,obj);
@@ -758,18 +1064,30 @@
 	} else if (!is_unicorn(mtmp->data) && !humanoid(mtmp->data) &&
 			(!mtmp->minvis || perceives(mtmp->data)) && rn2(5)) {
 		if (vis)
+/*JP
 		    pline("%s is frightened by its reflection.", Monnam(mtmp));
+*/
+		    pline ("%sは自分の姿を見て怖がった．", Monnam(mtmp));
 		monflee(mtmp, d(2,4), FALSE, FALSE);
 	} else if (!Blind) {
 		if (mtmp->minvis && !See_invisible)
 		    ;
 		else if ((mtmp->minvis && !perceives(mtmp->data))
 			 || !haseyes(mtmp->data))
+#if 0 /*JP*/
 		    pline("%s doesn't seem to notice its reflection.",
+#else
+		    pline("%sは自分の姿に気がついてないようだ．",
+#endif
 			Monnam(mtmp));
 		else
+#if 0 /*JP*/
 		    pline("%s ignores %s reflection.",
 			  Monnam(mtmp), mhis(mtmp));
+#else
+		    pline("%sは自分の姿を無視した．",
+			  Monnam(mtmp));
+#endif
 	}
 	return 1;
 }
@@ -785,17 +1103,26 @@
 		invoking = (obj->otyp == BELL_OF_OPENING &&
 			 invocation_pos(u.ux, u.uy) && !On_stairs(u.ux, u.uy));
 
+/*JP
 	You("ring %s.", the(xname(obj)));
+*/
+	You("%sを鳴らした．", the(xname(obj)));
 
 	if (Underwater || (u.uswallow && ordinary)) {
 #ifdef	AMIGA
 	    amii_speaker( obj, "AhDhGqEqDhEhAqDqFhGw", AMII_MUFFLED_VOLUME );
 #endif
+/*JP
 	    pline("But the sound is muffled.");
+*/
+	    pline("しかし音はかき消された．");
 
 	} else if (invoking && ordinary) {
 	    /* needs to be recharged... */
+/*JP
 	    pline("But it makes no sound.");
+*/
+	    pline("しかし，音は鳴らなかった．");
 	    learno = TRUE;	/* help player figure out why */
 
 	} else if (ordinary) {
@@ -809,9 +1136,15 @@
 		    !(mvitals[PM_MOUNTAIN_NYMPH].mvflags & G_GONE) &&
 		    (mtmp = makemon(mkclass(S_NYMPH, 0),
 					u.ux, u.uy, NO_MINVENT)) != 0) {
+/*JP
 		You("summon %s!", a_monnam(mtmp));
+*/
+		You("%sを召喚した！", a_monnam(mtmp));
 		if (!obj_resists(obj, 93, 100)) {
+/*JP
 		    pline("%s shattered!", Tobjnam(obj, "have"));
+*/
+		    pline("%sは粉々になった！", xname(obj));
 		    useup(obj);
 		    *optr = 0;
 		} else switch (rn2(3)) {
@@ -847,8 +1180,13 @@
 		wakem = TRUE;
 
 	    } else  if (invoking) {
+#if 0 /*JP*/
 		pline("%s an unsettling shrill sound...",
 		      Tobjnam(obj, "issue"));
+#else
+	        pline("%sは不気味な鋭い音を出した．．．",
+		      xname(obj));
+#endif
 #ifdef	AMIGA
 		amii_speaker( obj, "aefeaefeaefeaefeaefe", AMII_LOUDER_VOLUME );
 #endif
@@ -869,9 +1207,15 @@
 		res += openit();
 		switch (res) {
 		  case 0:  pline(nothing_happens); break;
+/*JP
 		  case 1:  pline("%s opens...", Something);
+*/
+		  case 1:  pline("何かが開いた．．．");
 			   learno = TRUE; break;
+/*JP
 		  default: pline("Things open around you...");
+*/
+		  default: pline("まわりの物が開いた．．．");
 			   learno = TRUE; break;
 		}
 
@@ -896,47 +1240,86 @@
 use_candelabrum(obj)
 register struct obj *obj;
 {
+#if 0 /*JP*/
 	const char *s = (obj->spe != 1) ? "candles" : "candle";
+#endif
 
 	if(Underwater) {
+/*JP
 		You("cannot make fire under water.");
+*/
+		You("水中で火はおこせない．");
 		return;
 	}
 	if(obj->lamplit) {
+/*JP
 		You("snuff the %s.", s);
+*/
+		You("ろうそくを吹き消した．");
 		end_burn(obj, TRUE);
 		return;
 	}
 	if(obj->spe <= 0) {
+/*JP
 		pline("This %s has no %s.", xname(obj), s);
+*/
+		pline("この%sにはろうそくがない．", xname(obj));
 		return;
 	}
 	if(u.uswallow || obj->cursed) {
 		if (!Blind)
+#if 0 /*JP*/
 		    pline_The("%s %s for a moment, then %s.",
 			      s, vtense(s, "flicker"), vtense(s, "die"));
+#else
+		    pline("ろうそくの炎はしばらく点滅し，消えた．");
+#endif
 		return;
 	}
 	if(obj->spe < 7) {
+#if 0 /*JP*/
 		There("%s only %d %s in %s.",
 		      vtense(s, "are"), obj->spe, s, the(xname(obj)));
+#else
+		pline("%sにはたった%d本のろうそくしかない．",
+		       xname(obj), obj->spe);
+#endif
 		if (!Blind)
+#if 0 /*JP*/
 		    pline("%s lit.  %s dimly.",
 			  obj->spe == 1 ? "It is" : "They are",
 			  Tobjnam(obj, "shine"));
+#else
+		    pline("%sに火をつけた．%sはほのかに輝いた．",
+		       xname(obj), xname(obj));
+#endif
 	} else {
+#if 0 /*JP*/
 		pline("%s's %s burn%s", The(xname(obj)), s,
 			(Blind ? "." : " brightly!"));
+#else
+		pline("%sのろうそくは%s燃えあがった！", The(xname(obj)),
+			(Blind ? "" : "明るく"));
+#endif
 	}
 	if (!invocation_pos(u.ux, u.uy)) {
+/*JP
 		pline_The("%s %s being rapidly consumed!", s, vtense(s, "are"));
+*/
+		pline("ろうそくはすごい速さで燃え始めた！");
 		obj->age /= 2;
 	} else {
 		if(obj->spe == 7) {
 		    if (Blind)
+/*JP
 		      pline("%s a strange warmth!", Tobjnam(obj, "radiate"));
+*/
+		      pline("奇妙な暖かさを%sに感じた！", xname(obj));
 		    else
+/*JP
 		      pline("%s with a strange light!", Tobjnam(obj, "glow"));
+*/
+		      pline("%sは奇妙な光を発している！", xname(obj));
 		}
 		obj->known = 1;
 	}
@@ -949,7 +1332,9 @@
 {
 	register struct obj *obj = *optr;
 	register struct obj *otmp;
+#if 0 /*JP*/
 	const char *s = (obj->quan != 1) ? "candles" : "candle";
+#endif
 	char qbuf[QBUFSZ];
 
 	if(u.uswallow) {
@@ -957,7 +1342,10 @@
 		return;
 	}
 	if(Underwater) {
+/*JP
 		pline("Sorry, fire and water don't mix.");
+*/
+		pline("残念ながら，火と水はまざらない．");
 		return;
 	}
 
@@ -970,29 +1358,50 @@
 		return;
 	}
 
+#if 0 /*JP*/
 	Sprintf(qbuf, "Attach %s", the(xname(obj)));
 	Sprintf(eos(qbuf), " to %s?",
 		safe_qbuf(qbuf, sizeof(" to ?"), the(xname(otmp)),
 			the(simple_typename(otmp->otyp)), "it"));
+#else
+	Sprintf(qbuf, "%sを", the(xname(obj)));
+	Sprintf(eos(qbuf), "%sに取りつけますか？",
+		safe_qbuf(qbuf, sizeof("に取りつけますか？"), the(xname(otmp)),
+			the(simple_typename(otmp->otyp)), "それ"));
+#endif
 	if(yn(qbuf) == 'n') {
 		if (!obj->lamplit)
+/*JP
 		    You("try to light %s...", the(xname(obj)));
+*/
+		    You("%sに火をつけようとした．．．", the(xname(obj)));
 		use_lamp(obj);
 		return;
 	} else {
 		if ((long)otmp->spe + obj->quan > 7L)
 		    obj = splitobj(obj, 7L - (long)otmp->spe);
 		else *optr = 0;
+#if 0 /*JP*/
 		You("attach %ld%s %s to %s.",
 		    obj->quan, !otmp->spe ? "" : " more",
 		    s, the(xname(otmp)));
+#else
+		You("%ld本のろうそくを%s%sへ取りつけた．",
+		    obj->quan, !otmp->spe ? "" : "さらに",
+		    xname(otmp));
+#endif
 		if (obj->otyp == MAGIC_CANDLE) {
+#if 0 /*JP*/
 		    if (obj->lamplit)
 			pline_The("new %s %s very ordinary.", s,
 				vtense(s, "look"));
 		    else
 			pline("%s very ordinary.",
 				(obj->quan > 1L) ? "They look" : "It looks");
+#else
+		    pline("%sろうそくはとても平凡に見える．",
+			(obj->lamplit) ? "新しい" : "");
+#endif
 		    if (!otmp->spe)
 			otmp->age = 600L;
 		} else
@@ -1000,17 +1409,34 @@
 		    otmp->age = obj->age;
 		otmp->spe += (int)obj->quan;
 		if (otmp->lamplit && !obj->lamplit)
+#if 0 /*JP*/
 		    pline_The("new %s magically %s!", s, vtense(s, "ignite"));
+#else
+		    pline("新しいろうそくは不思議な炎をあげた！");
+#endif
 		else if (!otmp->lamplit && obj->lamplit)
+#if 0 /*JP*/
 		    pline("%s out.", (obj->quan > 1L) ? "They go" : "It goes");
+#else
+		    pline("炎は消えた．");
+#endif
 		if (obj->unpaid)
+#if 0 /*JP*/
 		    verbalize("You %s %s, you bought %s!",
 			      otmp->lamplit ? "burn" : "use",
 			      (obj->quan > 1L) ? "them" : "it",
 			      (obj->quan > 1L) ? "them" : "it");
+#else
+		    verbalize("火をつけたなら，買ってもらおう！");
+#endif
 		if (obj->quan < 7L && otmp->spe == 7)
+#if 0 /*JP*/
 		    pline("%s now has seven%s candles attached.",
 			  The(xname(otmp)), otmp->lamplit ? " lit" : "");
+#else
+		    pline("%sにはすでに7本の%sろうそくが取りつけられている．",
+			  The(xname(otmp)), otmp->lamplit ? "火のついた" : "");
+#endif
 		/* candelabrum's light range might increase */
 		if (otmp->lamplit) obj_merge_light_sources(otmp, otmp);
 		/* candles are no longer a separate light source */
@@ -1031,14 +1457,22 @@
 		otmp->lamplit) {
 	    char buf[BUFSZ];
 	    xchar x, y;
+#if 0 /*JP*/
 	    register boolean many = candle ? otmp->quan > 1L : otmp->spe > 1;
+#endif
 
 	    (void) get_obj_location(otmp, &x, &y, 0);
 	    if (otmp->where == OBJ_MINVENT ? cansee(x,y) : !Blind)
+#if 0 /*JP*/
 		pline("%s %scandle%s flame%s extinguished.",
 		      Shk_Your(buf, otmp),
 		      (candle ? "" : "candelabrum's "),
 		      (many ? "s'" : "'s"), (many ? "s are" : " is"));
+#else
+		pline("%s%sろうそくの炎は消えた",
+		      Shk_Your(buf, otmp),
+		      candle ? "" : "燭台の");
+#endif
 	   end_burn(otmp, TRUE);
 	   return(TRUE);
 	}
@@ -1061,7 +1495,10 @@
 		obj->otyp == TORCH) {
 		(void) get_obj_location(obj, &x, &y, 0);
 		if (obj->where == OBJ_MINVENT ? cansee(x,y) : !Blind)
+/*JP
 		    pline("%s %s out!", Yname2(obj), otense(obj, "go"));
+*/
+		    pline("%sは消えた！", Yname2(obj));
 		end_burn(obj, TRUE);
 		return TRUE;
 	    }
@@ -1093,13 +1530,20 @@
 		 obj->otyp == BRASS_LANTERN) && obj->cursed && !rn2(2))
 		return FALSE;
 	    if (obj->where == OBJ_MINVENT ? cansee(x,y) : !Blind)
+/*JP
 		pline("%s %s light!", Yname2(obj), otense(obj, "catch"));
+*/
+		pline("%sの明かりがついた！", Yname2(obj));
 	    if (obj->otyp == POT_OIL) makeknown(obj->otyp);
 	    if (obj->unpaid && costly_spot(u.ux, u.uy) && (obj->where == OBJ_INVENT)) {
 	        /* if it catches while you have it, then it's your tough luck */
 		check_unpaid(obj);
+#if 0 /*JP:T*/
 	        verbalize("That's in addition to the cost of %s %s, of course.",
 				Yname2(obj), obj->quan == 1 ? "itself" : "themselves");
+#else
+	        verbalize("これはもちろん%sの値段とは別だよ．", Yname2(obj));
+#endif
 		bill_dummy_object(obj);
 	    }
 	    begin_burn(obj, FALSE);
@@ -1116,19 +1560,31 @@
 	char qbuf[QBUFSZ];
 
 	if(Underwater) {
+#if 0 /*JP*/
 		pline("This is not a diving lamp.");
+#else
+		pline("これは潜水用のランプじゃない．");
+#endif
 		return;
 	}
 	if(obj->lamplit) {
 		if(obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP ||
 				obj->otyp == BRASS_LANTERN) {
+#if 0 /*JP*/
 		    pline("%s lamp is now off.", Shk_Your(buf, obj));
+#else
+		    pline("%sランプの灯は消えた．", Shk_Your(buf, obj));
+#endif
 #ifdef LIGHTSABERS
 		} else if(is_lightsaber(obj)) {
 		    if (obj->otyp == RED_DOUBLE_LIGHTSABER) {
 			/* Do we want to activate dual bladed mode? */
 			if (!obj->altmode && (!obj->cursed || rn2(4))) {
+#if 0 /*JP*/
 			    You("ignite the second blade of %s.", yname(obj));
+#else
+			    pline("%sの二つ目の刃を始動させた．", yname(obj));
+#endif
 			    obj->altmode = TRUE;
 			    return;
 			} else obj->altmode = FALSE;
@@ -1137,10 +1593,18 @@
 		    return;
 #endif
 		} else if (artifact_light(obj)) {
+#if 0 /*JP*/
 		    You_cant("snuff out %s.", yname(obj));
+#else
+		    pline("%sを吹き消すことができない．", yname(obj));
+#endif
 		    return;
 		} else {
+#if 0 /*JP*/
 		    You("snuff out %s.", yname(obj));
+#else
+		    pline("%sを吹き消した．", yname(obj));
+#endif
 		}
 		end_burn(obj, TRUE);
 		return;
@@ -1153,57 +1617,104 @@
 			|| is_lightsaber(obj)
 #endif
 			)
+#if 0 /*JP*/
 			Your("%s has run out of power.", xname(obj));
+#else
+			Your("%sの電力を使い切ってしまった！", xname(obj));
+#endif
 		else if (obj->otyp == TORCH) {
+#if 0 /*JP*/
 		        Your("torch has burnt out and cannot be relit.");
+#else
+		        Your("トーチは燃え尽きてしまってもう光らない．");
+#endif
 		}
+#if 0 /*JP*/
 		else pline("This %s has no oil.", xname(obj));
+#else
+		else pline("この%sにはもうオイルがない．", xname(obj));
+#endif
 		return;
 	}
 	if (obj->cursed && !rn2(2)) {
+#if 0 /*JP*/
 		pline("%s for a moment, then %s.",
 		      Tobjnam(obj, "flicker"), otense(obj, "die"));
+#else
+		pline("%sはしばらくの間点滅し，消えた．", xname(obj));
+#endif
 	} else {
 		if(obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP ||
 				obj->otyp == BRASS_LANTERN) {
 		    check_unpaid(obj);
+#if 0 /*JP*/
 		    pline("%s lamp is now on.", Shk_Your(buf, obj));
+#else
+		    pline("%sランプに灯が灯った．", Shk_Your(buf, obj));
+#endif
 		} else if (obj->otyp == TORCH) {
 		    check_unpaid(obj);
+#if 0 /*JP*/
 		    pline("%s flame%s burn%s%s",
 			s_suffix(Yname2(obj)),
 			plur(obj->quan),
 			obj->quan > 1L ? "" : "s",
 			Blind ? "." : " brightly!");
+#else
+		    pline("%sは%s燃えあがった！",
+			Yname2(obj), Blind ? "" : "明るく");
+#endif
 #ifdef LIGHTSABERS
 		} else if (is_lightsaber(obj)) {
 		    /* WAC -- lightsabers */
 		    /* you can see the color of the blade */
 		    
 		    if (!Blind) makeknown(obj->otyp);
+#if 0 /*JP*/
 		    You("ignite %s.", yname(obj));
+#else
+		    You("%sを始動させた．", yname(obj));
+#endif
 		    unweapon = FALSE;
 #endif
 		} else {	/* candle(s) */
+#if 0 /*JP*/
 		    Sprintf(qbuf, "Light all of %s?", the(xname(obj)));
+#else
+		    Sprintf(qbuf, "%sの全てに火をつけますか？", the(xname(obj)));
+#endif
 		    if (obj->quan > 1L && (yn(qbuf) == 'n')) {
 			/* Check if player wants to light all the candles */
 			struct obj *rest;	     /* the remaining candles */
 			rest = splitobj(obj, obj->quan - 1L);
 			obj_extract_self(rest);	     /* free from inv */
 			obj->spe++;	/* this prevents merging */
+#if 0 /*JP*/
 			(void)hold_another_object(rest, "You drop %s!",
 					  doname(rest), (const char *)0);
+#else
+			(void)hold_another_object(rest, "あなたは%sを落した！",
+					  doname(rest), (const char *)0);
+#endif
 			obj->spe--;
 		    }
+#if 0 /*JP*/
 		    pline("%s flame%s %s%s",
 			s_suffix(Yname2(obj)),
 			plur(obj->quan), otense(obj, "burn"),
 			Blind ? "." : " brightly!");
+#else
+		    pline("%sは%s燃えあがった！",
+			Yname2(obj), Blind ? "" : "明るく");
+#endif
 		    if (obj->unpaid && costly_spot(u.ux, u.uy) &&
 			  obj->otyp != MAGIC_CANDLE) {
+#if 0 /*JP*/
 			const char *ithem = obj->quan > 1L ? "them" : "it";
 			verbalize("You burn %s, you bought %s!", ithem, ithem);
+#else
+			verbalize("灯をつけたなら，買ってもらおう！");
+#endif
 			bill_dummy_object(obj);
 		    }
 		}
@@ -1223,7 +1734,10 @@
 	return 0;
     }
     if (Underwater) {
+/*JP
 	pline("Sorry, fire and water don't mix.");
+*/
+	pline("残念ながら，火と水はまざらない．");
 	return 0;
     }
     if (obj->quan > 1L) {
@@ -1237,7 +1751,11 @@
     use_lamp(obj);
     /* shouldn't merge */
     if (otmp)
+#if 0 /*JP*/
 	otmp = hold_another_object(otmp, "You drop %s!",
+#else
+	otmp = hold_another_object(otmp, "あなたは%sを落した！",
+#endif
 				   doname(otmp), (const char *)0);
     return 1;
 }
@@ -1248,11 +1766,19 @@
 {
 	char buf[BUFSZ];
 	char *objnam =
+#if 0 /*JP*/
 #ifdef FIREARMS
 	    obj->otyp == POT_OIL ? "potion" : "stick";
 #else
 	    "potion";
 #endif
+#else
+#ifdef FIREARMS
+	    obj->otyp == POT_OIL ? "油瓶" : "爆弾";
+#else
+	    "油瓶";
+#endif
+#endif
 
 	if (u.uswallow) {
 	    You(no_elbow_room);
@@ -1260,12 +1786,19 @@
 	}
 
 	if(Underwater) {
+#if 0 /*JP*/
 		You("can't light this underwater!");
+#else
+		You("水の中じゃ火が点かない！");
+#endif
 		return;
 	}
 
 	if (obj->lamplit) {
+/*JP
 	    You("snuff the lit %s.", objnam);
+*/
+	    You("%sの火を吹き消した．", objnam);
 	    end_burn(obj, TRUE);
 	    /*
 	     * Free & add to re-merge potion.  This will average the
@@ -1276,12 +1809,20 @@
 	    (void) addinv(obj);
 	    return;
 	} else if (Underwater) {
+/*JP
 	    There("is not enough oxygen to sustain a fire.");
+*/
+	    pline("火をつけるのに十分な酸素がない．");
 	    return;
 	}
 
+#if 0 /*JP*/
 	You("light %s %s.%s", shk_your(buf, obj), objnam,
 	    Blind ? "" : "  It gives off a dim light.");
+#else
+	You("%s%sに火をつけた．%s", shk_your(buf, obj), objnam, 
+	    Blind ? "" : "それは暗い光をはなった．");
+#endif
 	if (obj->unpaid && costly_spot(u.ux, u.uy)) {
 	    /* Normally, we shouldn't both partially and fully charge
 	     * for an item, but (Yendorian Fuel) Taxes are inevitable...
@@ -1290,11 +1831,18 @@
 	    if (obj->otyp != STICK_OF_DYNAMITE) {
 #endif
 	    check_unpaid(obj);
+/*JP
 	    verbalize("That's in addition to the cost of the potion, of course.");
+*/
+	    verbalize("これはもちろん油瓶の値段とは別だよ．");
 #ifdef FIREARMS
 	    } else {
+#if 0 /*JP*/
 		const char *ithem = obj->quan > 1L ? "them" : "it";
 		verbalize("You burn %s, you bought %s!", ithem, ithem);
+#else
+		verbalize("灯をつけたなら，買ってもらおう！");
+#endif
 	    }
 #endif
 	    bill_dummy_object(obj);
@@ -1310,7 +1858,11 @@
 	    obj_extract_self(obj);	/* free from inv */
 
 	    /* shouldn't merge */
+#if 0 /*JP*/
 	    obj = hold_another_object(obj, "You drop %s!",
+#else
+	    obj = hold_another_object(obj, "あなたは%sを落した！",
+#endif
 				      doname(obj), (const char *)0);
 	} else
 	    begin_burn(obj, FALSE);
@@ -1321,14 +1873,20 @@
 int
 dorub()
 {
+/*JP
 	struct obj *obj = getobj(cuddly, "rub");
+*/
+	struct obj *obj = getobj(cuddly, "こする");
 
 	if (obj && obj->oclass == GEM_CLASS) {
 	    if (is_graystone(obj)) {
 		use_stone(obj);
 		return 1;
 	    } else {
+/*JP
 		pline("Sorry, I don't know how to use that.");
+*/
+		pline("残念．使い方がわからない．");
 		return 0;
 	    }
 	}
@@ -1347,12 +1905,21 @@
 		if (uwep->lamplit) begin_burn(uwep, TRUE);
 		update_inventory();
 	    } else if (rn2(2) && !Blind)
+/*JP
 		You("see a puff of smoke.");
+*/
+		pline("けむりが舞いあがった．");
 	    else pline(nothing_happens);
 	} else if (obj->otyp == BRASS_LANTERN) {
 	    /* message from Adventure */
+/*JP
 	    pline("Rubbing the electric lamp is not particularly rewarding.");
+*/
+	    pline("電気ランプをこすっても意味はないと思うが．．．");
+/*JP
 	    pline("Anyway, nothing exciting happens.");
+*/
+	    pline("やっぱり，何も起きなかった．");
 	} else pline(nothing_happens);
 	return 1;
 }
@@ -1373,57 +1940,109 @@
 	if (!magic && (nolimbs(youmonst.data) || slithy(youmonst.data))) {
 		/* normally (nolimbs || slithy) implies !Jumping,
 		   but that isn't necessarily the case for knights */
+#if 0 /*JP*/
 		You_cant("jump; you have no legs!");
+#else
+		pline("足が無くては跳べない！");
+#endif
 		return 0;
 	} else if (!magic && !Jumping) {
+#if 0 /*JP*/
 		You_cant("jump very far.");
+#else
+		You_cant("そんな遠くまで跳べない．");
+#endif
 		return 0;
 	} else if (u.uswallow) {
 		if (magic) {
+#if 0 /*JP*/
 			You("bounce around a little.");
+#else
+			You("反動をつけた．");
+#endif
 			return 1;
 		} else {
-		pline("You've got to be kidding!");
-		return 0;
+#if 0 /*JP*/
+			pline("You've got to be kidding!");
+#else
+			pline("冗談はよしこさん！");
+#endif
+			return 0;
 		}
 		return 0;
 	} else if (u.uinwater) {
 		if (magic) {
+#if 0 /*JP*/
 			You("swish around a little.");
+#else
+			You("スイスイと泳いだ．");
+#endif
 			return 1;
 		} else {
-		pline("This calls for swimming, not jumping!");
-		return 0;
+#if 0 /*JP*/
+			pline("This calls for swimming, not jumping!");
+#else
+			pline("それは『泳ぐ』であって，『跳ぶ』じゃない！");
+#endif
+			return 0;
 		}
 		return 0;
 	} else if (u.ustuck) {
 		if (u.ustuck->mtame && !Conflict && !u.ustuck->mconf) {
+#if 0 /*JP*/
 		    You("pull free from %s.", mon_nam(u.ustuck));
+#else
+		    You("%sから離れた．", mon_nam(u.ustuck));
+#endif
 		    setustuck(0);
 		    return 1;
 		}
 		if (magic) {
+#if 0 /*JP*/
 			You("writhe a little in the grasp of %s!", mon_nam(u.ustuck));
+#else
+			You("%sから逃れようとジタバタした！", mon_nam(u.ustuck));
+#endif
 			return 1;
 		} else {
-		You("cannot escape from %s!", mon_nam(u.ustuck));
-		return 0;
+#if 0 /*JP*/
+			You("cannot escape from %s!", mon_nam(u.ustuck));
+#else
+			You("%sから逃れられない！", mon_nam(u.ustuck));
+#endif
+			return 0;
 		}
 
 		return 0;
 	} else if (Levitation || Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) {
 		if (magic) {
+#if 0 /*JP*/
 			You("flail around a little.");
+#else
+			You("バタバタ跳んだ．");
+#endif
 			return 1;
 		} else {
-		You("don't have enough traction to jump.");
-		return 0;
+#if 0 /*JP*/
+			You("don't have enough traction to jump.");
+#else
+			You("跳ぶための反動がつけられない．");
+#endif
+			return 0;
 		}
 	} else if (!magic && near_capacity() > UNENCUMBERED) {
+#if 0 /*JP*/
 		You("are carrying too much to jump!");
+#else
+		You("たくさん物を持ちすぎて跳べない！");
+#endif
 		return 0;
 	} else if (!magic && (u.uhunger <= 100 || ACURR(A_STR) < 6)) {
+#if 0 /*JP*/
 		You("lack the strength to jump!");
+#else
+		You("跳ぶだけの力がない！");
+#endif
 		return 0;
 	} else if (Wounded_legs) {
  		long wl = (EWounded_legs & BOTH_SIDES);
@@ -1432,42 +2051,72 @@
 		if (wl == BOTH_SIDES) bp = makeplural(bp);
 #ifdef STEED
 		if (u.usteed)
+/*JP
 		    pline("%s is in no shape for jumping.", Monnam(u.usteed));
+*/
+		    pline("%sは跳べる状態ではない．", Monnam(u.usteed));
 		else
 #endif
+#if 0 /*JP*/
 		Your("%s%s %s in no shape for jumping.",
 		     (wl == LEFT_SIDE) ? "left " :
 			(wl == RIGHT_SIDE) ? "right " : "",
 		     bp, (wl == BOTH_SIDES) ? "are" : "is");
+#else
+		Your("%s%sは跳べる状態ではない．",
+		     (wl == LEFT_SIDE) ? "左" :
+		     (wl == RIGHT_SIDE) ? "右" : "", bp);
+#endif
 		return 0;
 	}
 #ifdef STEED
 	else if (u.usteed && u.utrap) {
+/*JP
 		pline("%s is stuck in a trap.", Monnam(u.usteed));
+*/
+		pline("%sは罠にひっかかっている．", Monnam(u.usteed));
 		return (0);
 	}
 #endif
 
+/*JP
 	pline("Where do you want to jump?");
+*/
+	pline("どこに跳びますか？");
 	cc.x = u.ux;
 	cc.y = u.uy;
+/*JP
 	if (getpos(&cc, TRUE, "the desired position") < 0)
+*/
+	if (getpos(&cc, TRUE, "跳びたい場所") < 0)
 		return 0;	/* user pressed ESC */
 	if (!magic && !(HJumping & ~INTRINSIC) && !EJumping &&
 			distu(cc.x, cc.y) != 5) {
 		/* The Knight jumping restriction still applies when riding a
 		 * horse.  After all, what shape is the knight piece in chess?
 		 */
+/*JP
 		pline("Illegal move!");
+*/
+		pline("その移動は桂馬跳びじゃない！");
 		return 0;
 	} else if (distu(cc.x, cc.y) > (magic ? 6+magic*3 : 9)) {
+/*JP
 		pline("Too far!");
+*/
+		pline("遠すぎる！");
 		return 0;
 	} else if (!cansee(cc.x, cc.y)) {
+/*JP
 		You("cannot see where to land!");
+*/
+		You("着地点が見えない！");
 		return 0;
 	} else if (!isok(cc.x, cc.y)) {
+/*JP
 		You("cannot jump there!");
+*/
+		You("そこには飛べない！");
 		return 0;
 	} else {
 	    coord uc;
@@ -1477,27 +2126,45 @@
 		switch(u.utraptype) {
 		case TT_BEARTRAP: {
 		    register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE;
-		    You("rip yourself free of the bear trap!  Ouch!");
+/*JP
+  		    You("rip yourself free of the bear trap!  Ouch!");
+*/
+		    You("自分を熊の罠からひきはがした，いてっ！");
 #ifdef STEED
 			if (!u.usteed)
 #endif
+/*JP
 		    losehp(rnd(10), "jumping out of a bear trap", KILLED_BY);
+*/
+		    losehp(rnd(10), "熊の罠から飛び出ようとして", KILLED_BY);
 		    set_wounded_legs(side, rn1(1000,500));
 		    break;
 		  }
 		case TT_PIT:
+/*JP
 		    You("leap from the pit!");
+*/
+		    You("落し穴から飛び出た！");
 		    break;
 		case TT_WEB:
+/*JP
 		    You("tear the web apart as you pull yourself free!");
+*/
+		    You("くもの巣を引き裂き，自由になった！");
 		    deltrap(t_at(u.ux,u.uy));
 		    break;
 		case TT_LAVA:
+/*JP
 		    You("pull yourself above the lava!");
+*/
+		    You("溶岩から飛び出た！");
 		    u.utrap = 0;
 		    return 1;
 		case TT_INFLOOR:
+/*JP
 		    You("strain your %s, but you're still stuck in the floor.",
+*/
+		    You("%sを引っぱった，しかし，あなたはまだ床にうまっている．",
 			makeplural(body_part(LEG)));
 		    set_wounded_legs(LEFT_SIDE, rn1(10, 11));
 		    set_wounded_legs(RIGHT_SIDE, rn1(10, 11));
@@ -1555,16 +2222,32 @@
 	 * moves, we've got to deal with decaying corpses...
 	 */
 	if (obj->spe <= 0) {
+#if 0 /*JP*/
 		You("seem to be out of tins.");
+#else
+		pline("缶詰を作るための缶が切れたようだ．");
+#endif
 		return;
 	}
+#if 0 /*JP*/
 	if (!(corpse = getobj((const char *)tinnables, "tin"))) return;
+#else
+	if (!(corpse = getobj((const char *)tinnables, "缶詰めにする"))) return;
+#endif
 	if (corpse->otyp == CORPSE && (corpse->oeaten || corpse->odrained)) {
+#if 0 /*JP*/
 		You("cannot tin %s which is partly eaten.",something);
+#else
+		You("食べかけのものを缶詰にすることはできない．");
+#endif
 		return;
 	}
 	if (!tinnable(corpse)) {
+#if 0 /*JP*/
 		You_cant("tin that!");
+#else
+		You("それは缶詰にすることはできない！");
+#endif
 		return;
 	}
 	if (touch_petrifies(&mons[corpse->corpsenm])
@@ -1572,29 +2255,56 @@
 	    char kbuf[BUFSZ];
 
 	    if (poly_when_stoned(youmonst.data))
+#if 0 /*JP*/
 		You("tin %s without wearing gloves.",
 			an(mons[corpse->corpsenm].mname));
+#else
+		You("小手なしで%sを缶詰にしようとした．",
+			jtrns_mon(mons[corpse->corpsenm].mname));
+#endif
 	    else {
+#if 0 /*JP*/
 		pline("Tinning %s without wearing gloves is a fatal mistake...",
 			an(mons[corpse->corpsenm].mname));
+#else
+		pline("%sを小手なしで缶詰にするのは致命的な間違いだ．．．",
+			jtrns_mon(mons[corpse->corpsenm].mname));
+#endif
+#if 0 /*JP*/
 		Sprintf(kbuf, "trying to tin %s without gloves",
 			an(mons[corpse->corpsenm].mname));
+#else
+		Sprintf(kbuf, "小手をつけずに%sを缶詰にしようとして",
+			jtrns_mon(mons[corpse->corpsenm].mname));
+#endif
 	    }
 	    instapetrify(kbuf);
 	}
 	if (is_rider(&mons[corpse->corpsenm])) {
 		(void) revive_corpse(corpse, FALSE);
+#if 0 /*JP*/
 		verbalize("Yes...  But War does not preserve its enemies...");
+#else
+		verbalize("そうだ．．．しかし「戦争」は敵に安らぎを与えぬ．．．");
+#endif
 		return;
 	}
 	if (mons[corpse->corpsenm].cnutrit == 0) {
+#if 0 /*JP*/
 		pline("That's too insubstantial to tin.");
+#else
+		pline("実体がないので缶詰にできない．");
+#endif
 		return;
 	}
 	consume_obj_charge(obj, TRUE);
 
 	if ((can = mksobj(TIN, FALSE, FALSE)) != 0) {
+#if 0 /*JP*/
 	    static const char you_buy_it[] = "You tin it, you bought it!";
+#else
+	    static const char you_buy_it[] = "缶詰にしたのなら買ってもらうよ！";
+#endif
 
 	    can->corpsenm = corpse->corpsenm;
 	    can->cursed = obj->cursed;
@@ -1618,7 +2328,10 @@
 		    verbalize(you_buy_it);
 		useupf(corpse, 1L);
 	    }
+/*JP
 	    can = hold_another_object(can, "You make, but cannot pick up, %s.",
+*/
+	    can = hold_another_object(can, "缶詰にできたが，%sを持つことができない．",
 				      doname(can), (const char *)0);
 	} else impossible("Tinning failed.");
 }
@@ -1645,8 +2358,13 @@
 	    case 1: make_blinded(Blinded + lcount, TRUE);
 		    break;
 	    case 2: if (!Confusion)
+#if 0 /*JP*/
 			You("suddenly feel %s.",
 			    Hallucination ? "trippy" : "confused");
+#else
+			You("突然%s．",
+			    Hallucination ? "へろへろになった" : "混乱した");
+#endif
 		    make_confused(HConfusion + lcount, TRUE);
 		    break;
 	    case 3: make_stunned(HStun + lcount, TRUE);
@@ -1771,11 +2489,20 @@
 	}
 
 	if (did_attr)
+#if 0 /*JP*/
 	    pline("This makes you feel %s!",
 		  (did_prop + did_attr) == (trouble_count + unfixable_trbl) ?
 		  "great" : "better");
+#else
+	    pline("気分が%sよくなった！",
+		  (did_prop + did_attr) == (trouble_count + unfixable_trbl) ?
+		  "とても" : "より");
+#endif
 	else if (!did_prop)
+/*JP
 	    pline("Nothing seems to happen.");
+*/
+	    pline("何も起きなかったようだ．");
 
 	flags.botl = (did_attr || did_prop);
 #undef PROP_COUNT
@@ -1828,17 +2555,31 @@
 	    switch (figurine->where) {
 		case OBJ_INVENT:
 		    if (Blind)
+#if 0 /*JP*/
 			You_feel("%s %s from your pack!", something,
 			    locomotion(mtmp->data,"drop"));
+#else
+			You_feel("%sがあなたの鞄から%s！", something,
+				 jconj(locomotion(mtmp->data,"落ちる"), "た"));
+#endif
 		    else
+#if 0 /*JP*/
 			You("see %s %s out of your pack!",
 			    monnambuf,
 			    locomotion(mtmp->data,"drop"));
+#else
+			You("%sがあなたの鞄から%s！",
+			    monnambuf,
+			    jconj(locomotion(mtmp->data,"落ちる"), "た"));
+#endif
 		    break;
 
 		case OBJ_FLOOR:
 		    if (cansee_spot && !silent) {
+/*JP
 			You("suddenly see a figurine transform into %s!",
+*/
+			You("突然人形は%sになった！",
 				monnambuf);
 			redraw = TRUE;	/* update figurine's map location */
 		    }
@@ -1850,15 +2591,29 @@
 			mon = figurine->ocarry;
 			/* figurine carring monster might be invisible */
 			if (canseemon(figurine->ocarry)) {
+/*JP
 			    Sprintf(carriedby, "%s pack",
+*/
+			    Sprintf(carriedby, "%sの鞄",
 				     s_suffix(a_monnam(mon)));
 			}
 			else if (is_pool(mon->mx, mon->my))
+/*JP
 			    Strcpy(carriedby, "empty water");
+*/
+			    Strcpy(carriedby, "何もない水中");
 			else
+/*JP
 			    Strcpy(carriedby, "thin air");
+*/
+			    Strcpy(carriedby, "何もない空中");
+#if 0 /*JP*/
 			You("see %s %s out of %s!", monnambuf,
 			    locomotion(mtmp->data, "drop"), carriedby);
+#else
+			You("%sが%sから%sのを見た！", monnambuf,
+			    carriedby, locomotion(mtmp->data, "落ちる"));
+#endif
 		    }
 		    break;
 #if 0
@@ -1888,26 +2643,40 @@
 
 	if (carried(obj) && u.uswallow) {
 		if (!quietly)
+/*JP
 			You("don't have enough room in here.");
+*/
+			pline("ここには十分な場所がない．");
 		return FALSE;
 	}
 	x = cc->x; y = cc->y;
 	if (!isok(x,y)) {
 		if (!quietly)
+/*JP
 			You("cannot put the figurine there.");
+*/
+			You("ここには人形を置けない．");
 		return FALSE;
 	}
 	if (IS_ROCK(levl[x][y].typ) &&
 	    !(passes_walls(&mons[obj->corpsenm]) && may_passwall(x,y))) {
 		if (!quietly)
+#if 0 /*JP*/
 		    You("cannot place a figurine in %s!",
 			IS_TREE(levl[x][y].typ) ? "a tree" : "solid rock");
+#else
+		    You("%sの中には人形を置けない！",
+			IS_TREE(levl[x][y].typ) ? "木" : "固い石");
+#endif
 		return FALSE;
 	}
 	if (sobj_at(BOULDER,x,y) && !passes_walls(&mons[obj->corpsenm])
 			&& !throws_rocks(&mons[obj->corpsenm])) {
 		if (!quietly)
+/*JP
 			You("cannot fit the figurine on the boulder.");
+*/
+		    You("岩の上には人形を置けない．");
 		return FALSE;
 	}
 	return TRUE;
@@ -1934,6 +2703,7 @@
 	cc.x = x; cc.y = y;
 	/* Passing FALSE arg here will result in messages displayed */
 	if (!figurine_location_checks(obj, &cc, FALSE)) return;
+#if 0 /*JP*/
 	You("%s and it transforms.",
 	    (u.dx||u.dy) ? "set the figurine beside you" :
 	    (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz) ||
@@ -1942,6 +2712,15 @@
 	    (u.dz < 0 ?
 		"toss the figurine into the air" :
 		"set the figurine on the ground"));
+#else
+	You("%s．するとそれは変形した．",
+	    (u.dx||u.dy) ? "そばに人形を置いた" :
+	    (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) ?
+		"人形を放った" :
+	    (u.dz < 0 ?
+		"人形を空中に投げた" :
+		"人形を地面に置いた"));
+#endif
 	(void) make_familiar(obj, cc.x, cc.y, FALSE);
 	(void) stop_timer(FIG_TRANSFORM, (genericptr_t)obj);
 	useup(obj);
@@ -1950,7 +2729,10 @@
 
 static NEARDATA const char lubricables[] = { ALL_CLASSES, ALLOW_NONE, 0 };
 static NEARDATA const char need_to_remove_outer_armor[] =
+/*JP
 			"need to remove your %s to grease your %s.";
+*/
+			"%sに油を塗るには%sをはずす必要がある．";
 
 STATIC_OVL void
 use_grease(obj)
@@ -1960,8 +2742,13 @@
 	char buf[BUFSZ];
 
 	if (Glib) {
+#if 0 /*JP*/
 	    pline("%s from your %s.", Tobjnam(obj, "slip"),
 		  makeplural(body_part(FINGER)));
+#else
+	    pline("%sはあなたの%sから滑り落ちた．", xname(obj),
+		  body_part(FINGER));
+#endif
 	    dropx(obj);
 	    return;
 	}
@@ -1970,48 +2757,81 @@
 		if ((obj->cursed || Fumbling) && !rn2(2)) {
 			consume_obj_charge(obj, TRUE);
 
+#if 0 /*JP*/
 			pline("%s from your %s.", Tobjnam(obj, "slip"),
 			      makeplural(body_part(FINGER)));
+#else
+			pline("%sはあなたの%sから滑り落ちた．", xname(obj),
+			      body_part(FINGER));
+#endif
 			dropx(obj);
 			return;
 		}
+/*JP
 		otmp = getobj(lubricables, "grease");
+*/
+		otmp = getobj(lubricables, "に塗る");
 		if (!otmp) return;
 		if ((otmp->owornmask & WORN_ARMOR) && uarmc) {
 			Strcpy(buf, xname(uarmc));
+/*JP
 			You(need_to_remove_outer_armor, buf, xname(otmp));
+*/
+			You(need_to_remove_outer_armor, xname(otmp), buf);
 			return;
 		}
 #ifdef TOURIST
 		if ((otmp->owornmask & WORN_SHIRT) && (uarmc || uarm)) {
+#if 0 /*JP*/
 			Strcpy(buf, uarmc ? xname(uarmc) : "");
 			if (uarmc && uarm) Strcat(buf, " and ");
 			Strcat(buf, uarm ? xname(uarm) : "");
 			You(need_to_remove_outer_armor, buf, xname(otmp));
+#else
+			Strcpy(buf, uarmc ? xname(uarmc) : "");
+			if (uarmc && uarm) Strcat(buf, "と");
+			Strcat(buf, uarm ? xname(uarm) : "");
+			You(need_to_remove_outer_armor, xname(otmp), buf);
+#endif
 			return;
 		}
 #endif
 		consume_obj_charge(obj, TRUE);
 
 		if (otmp != &zeroobj) {
+/*JP
 			You("cover %s with a thick layer of grease.",
+*/
+			You("%sに脂を丹念に塗った．",
 			    yname(otmp));
 			otmp->greased = 1;
 			if (obj->cursed && !nohands(youmonst.data)) {
 			    incr_itimeout(&Glib, rnd(15));
+/*JP
 			    pline("Some of the grease gets all over your %s.",
+*/
+			    pline("脂が少し%sについた．",
 				makeplural(body_part(HAND)));
 			}
 		} else {
 			Glib += rnd(15);
+/*JP
 			You("coat your %s with grease.",
+*/
+			You("%sに脂を塗った．",
 			    makeplural(body_part(FINGER)));
 		}
 	} else {
 	    if (obj->known)
+/*JP
 		pline("%s empty.", Tobjnam(obj, "are"));
+*/
+		pline("%sは空っぽだ．", xname(obj));
 	    else
+/*JP
 		pline("%s to be empty.", Tobjnam(obj, "seem"));
+*/
+		pline("%sは空っぽのようだ．", xname(obj));
 	}
 	update_inventory();
 }
@@ -2055,7 +2875,10 @@
 	    return 0;
 	} else
 	if (!carried(otmp) || !carried(ows)) {
+/*JP
 	    You("seem to have mislaid %s.",
+*/
+	    You("%sをセットしていないようだ．",
 		!carried(otmp) ? yname(otmp) : yname(ows));
 	    reset_whetstone();
 	    return 0;
@@ -2079,25 +2902,42 @@
 	    /* Remove rust first, then sharpen dull edges */
 	    if (otmp->oeroded) {
 		otmp->oeroded--;
+#if 0 /*JP*/
 		pline("%s %s%s now.", Yname2(otmp),
 		    (Blind ? "probably " : (otmp->oeroded ? "almost " : "")),
 		    otense(otmp, "shine"));
+#else
+		pline("%sは%s輝いた．", Yname2(otmp),
+		    (Blind ? "たぶん" : (otmp->oeroded ? "少し" : "")));
+#endif
 	    } else
 	    if (otmp->spe < 0) {
 		otmp->spe++;
+#if 0 /*JP*/
 		pline("%s %s %ssharper now.%s", Yname2(otmp),
 		    otense(otmp, Blind ? "feel" : "look"),
 		    (otmp->spe >= 0 ? "much " : ""),
 		    Blind ? "  (Ow!)" : "");
+#else
+		pline("%sは%s鋭くなった%s．", Yname2(otmp),
+		    (otmp->spe >= 0 ? "ますます" : "だいぶ"),
+		    Blind ? "と感じる" : "ように見える");
+#endif
 	    }
 	    makeknown(WHETSTONE);
 	    reset_whetstone();
 	} else {
 	    if (Hallucination)
+#if 0 /*JP*/
 		pline("%s %s must be faulty!",
 		    is_plural(ows) ? "These" : "This", xname(ows));
 	    else pline("%s", Blind ? "Pheww!  This is hard work!" :
 		"There are no visible effects despite your efforts.");
+#else
+		pline("この%sは欠陥品に間違いない！", xname(ows));
+	    else pline("%s", Blind ? "フゥ！これは難しいな！" :
+		"努力の割には目に見えるような効果はないようだ．");
+#endif
 	    reset_whetstone();
 	}
 
@@ -2110,27 +2950,48 @@
 struct obj *stone, *obj;
 {
 	boolean fail_use = TRUE;
+#if 0 /*JP*/
 	const char *occutext = "sharpening";
+#else
+	const char *occutext = "研ぐ";
+#endif
 	int tmptime = 130 + (rnl(13) * 5);
 
 	if (u.ustuck && sticks(youmonst.data)) {
+#if 0 /*JP*/
 	    You("should let go of %s first.", mon_nam(u.ustuck));
+#else
+	    You("まず最初に%sから出なければならない．", mon_nam(u.ustuck));
+#endif
 	} else
 	if ((welded(uwep) && (uwep != stone)) ||
 		(uswapwep && u.twoweap && welded(uswapwep) && (uswapwep != obj))) {
+#if 0 /*JP*/
 	    You("need both hands free.");
+#else
+	    You("両手を開ける必要がある．");
+#endif
 	} else
 	if (nohands(youmonst.data)) {
+#if 0 /*JP*/
 	    You("can't handle %s with your %s.",
 		an(xname(stone)), makeplural(body_part(HAND)));
+#else
+	    pline("あなたの%sでは%sを扱うことができない．",
+		makeplural(body_part(HAND)), an(xname(stone)));
+#endif
 	} else
 	if (verysmall(youmonst.data)) {
-	    You("are too small to use %s effectively.", an(xname(stone)));
+	    You("小さすぎて%sを有効に使うことができない．", an(xname(stone)));
 	} else
 #ifdef GOLDOBJ
 	if (obj == &goldobj) {
+#if 0 /*JP*/
 	    pline("Shopkeepers would spot the lighter coin%s immediately.",
 		obj->quan > 1 ? "s" : "");
+#else
+	    pline("店主はただちに光る金貨に注目するだろう．");
+#endif
 	} else
 #endif
 	if (!is_pool(u.ux, u.uy) && !IS_FOUNTAIN(levl[u.ux][u.uy].typ)
@@ -2139,12 +3000,24 @@
 #endif
 	    ) {
 	    if (carrying(POT_WATER) && objects[POT_WATER].oc_name_known) {
+#if 0 /*JP*/
 		pline("Better not waste bottled water for that.");
+#else
+		pline("それをするために瓶詰めの水を無駄遣いするのはよくない．");
+#endif
 	    } else
+#if 0 /*JP*/
 		You("need some water when you use that.");
+#else
+		pline("それを使うには水が必要だ．");
+#endif
 	} else
 	if (Levitation && !Lev_at_will && !u.uinwater) {
+#if 0 /*JP*/
 	    You("can't reach the water.");
+#else
+	    You("水に届かない．");
+#endif
 	} else
 	    fail_use = FALSE;
 
@@ -2155,7 +3028,11 @@
 
 	if (stone == whetstoneinfo.wsobj && obj == whetstoneinfo.tobj &&
 	    carried(obj) && carried(stone)) {
+#if 0 /*JP*/
 	    You("resume %s %s.", occutext, yname(obj));
+#else
+	    You("%sを%sのを再開した．", yname(obj), occutext);
+#endif
 	    set_occupation(set_whetstone, occutext, 0);
 	    return;
 	}
@@ -2166,35 +3043,68 @@
 	    boolean isedged = (is_pick(obj) ||
 				(objects[ttyp].oc_dir & (PIERCE|SLASH)));
 	    if (obj == &zeroobj) {
+#if 0 /*JP*/
 		You("file your nails.");
+#else
+		You("爪をやすりがけした．");
+#endif
 	    } else
 	    if (!isweapon || !isedged) {
+#if 0 /*JP*/
 		pline("%s sharp enough already.",
 			is_plural(obj) ? "They are" : "It is");
+#else
+		pline("%sは十分に鋭い．",
+			is_plural(obj) ? "それら" : "それ");
+#endif
 	    } else
 	    if (stone->quan > 1) {
+#if 0 /*JP*/
 		pline("Using one %s is easier.", singular(stone, xname));
+#else
+		pline("%sはひとつだけのほうがより使いやすい．", singular(stone, xname));
+#endif
 	    } else
 	    if (obj->quan > 1) {
+#if 0 /*JP*/
 		You("can apply %s only on one %s at a time.",
 		    the(xname(stone)),
 		    (obj->oclass == WEAPON_CLASS ? "weapon" : "item"));
+#else
+		You("一回につき%sをひとつの%sに対してしか使うことができない．",
+		    the(xname(stone)),
+		    (obj->oclass == WEAPON_CLASS ? "武器" : "道具"));
+#endif
 	    } else
 	    if (!is_metallic(obj)) {
+#if 0 /*JP*/
 		pline("That would ruin the %s %s.",
+#else
+		pline("それは%sの%sを駄目にしてしまうだろう．",
+#endif
 			materialnm[objects[ttyp].oc_material],
 		xname(obj));
 	    } else
 	    if (((obj->spe >= 0) || !obj->known) && !obj->oeroded) {
+#if 0 /*JP*/
 		pline("%s %s sharp and pointy enough.",
 			is_plural(obj) ? "They" : "It",
 			otense(obj, Blind ? "feel" : "look"));
+#else
+		pline("それ%sは十分鋭い切っ先を持っている%s．",
+			is_plural(obj) ? "ら" : "",
+			Blind ? "ような気がする" : "ように見える");
+#endif
 	    } else {
 		if (stone->cursed) tmptime *= 2;
 		whetstoneinfo.time_needed = tmptime;
 		whetstoneinfo.tobj = obj;
 		whetstoneinfo.wsobj = stone;
+#if 0 /*JP*/
 		You("start %s %s.", occutext, yname(obj));
+#else
+		You("%sを研ぎ始めた．", yname(obj));
+#endif
 		set_occupation(set_whetstone, occutext, 0);
 		if (IS_FOUNTAIN(levl[u.ux][u.uy].typ)) whetstone_fountain_effects(obj);
 #ifdef SINKS
@@ -2202,8 +3112,13 @@
 		else if (IS_TOILET(levl[u.ux][u.uy].typ)) whetstone_toilet_effects(obj);
 #endif
 	    }
+#if 0 /*JP*/
 	} else You("wave %s in the %s.", the(xname(stone)),
 	    (IS_POOL(levl[u.ux][u.uy].typ) && Underwater) ? "water" : "air");
+#else
+	} else You("%sを%s振った．", the(xname(stone)),
+	    (IS_POOL(levl[u.ux][u.uy].typ) && Underwater) ? "水中で" : "空中で");
+#endif
 }
 
 /* touchstones - by Ken Arnold */
@@ -2215,7 +3130,10 @@
     boolean do_scratch;
     const char *streak_color, *choices;
     char stonebuf[QBUFSZ];
+/*JP
     static const char scritch[] = "\"scritch, scritch\"";
+*/
+    static const char scritch[] = "「ゴシ，ゴシ」";
     static const char allowall[3] = { COIN_CLASS, ALL_CLASSES, 0 };
     static const char justgems[3] = { ALLOW_NONE, GEM_CLASS, 0 };
 #ifndef GOLDOBJ
@@ -2228,7 +3146,10 @@
        junk as likely candidates for rubbing */
     choices = (tstone->otyp == TOUCHSTONE && tstone->dknown &&
 		objects[TOUCHSTONE].oc_name_known) ? justgems : allowall;
+/*JP
     Sprintf(stonebuf, "rub on the stone%s", plur(tstone->quan));
+*/
+    Sprintf(stonebuf, "石でこする");
     if ((obj = getobj(choices, stonebuf)) == 0)
 	return;
 #ifndef GOLDOBJ
@@ -2241,7 +3162,11 @@
 #endif
 
     if (obj == tstone && obj->quan == 1) {
+#if 0 /*JP*/
 	You_cant("rub %s on itself.", the(xname(obj)));
+#else
+	You("%sをそれ自体でこすることはできない．", the(xname(obj)));
+#endif
 	return;
     }
 
@@ -2249,12 +3174,25 @@
 	    obj->oclass == GEM_CLASS && !is_graystone(obj) &&
 	    !obj_resists(obj, 80, 100)) {
 	if (Blind)
+#if 0 /*JP*/
 	    pline("You feel something shatter.");
+#else
+	    You("何かが粉々になるのを感じた．");
+#endif
 	else if (Hallucination)
+#if 0 /*JP*/
 	    pline("Oh, wow, look at the pretty shards.");
+#else
+	    pline("ワーォ！なんてきれいな破片なんだ．");
+#endif
 	else
+#if 0 /*JP*/
 	    pline("A sharp crack shatters %s%s.",
 		  (obj->quan > 1) ? "one of " : "", the(xname(obj)));
+#else
+	    pline("強くこすりすぎて%s%sは粉々になってしまった．",
+		  the(xname(obj)), (obj->quan > 1) ? "のひとつ" : "");
+#endif
 #ifndef GOLDOBJ
      /* assert(obj != &goldobj); */
 #endif
@@ -2266,7 +3204,11 @@
 	pline(scritch);
 	return;
     } else if (Hallucination) {
+#if 0 /*JP*/
 	pline("Oh wow, man: Fractals!");
+#else
+	pline("ワーォ！フラクタル模様だ！");
+#endif
 	return;
     }
 
@@ -2302,27 +3244,55 @@
     default:
 	switch (objects[obj->otyp].oc_material) {
 	case CLOTH:
+#if 0 /*JP*/
 	    pline("%s a little more polished now.", Tobjnam(tstone, "look"));
+#else
+	    pline("%sはさらにつやが出たように見える．", xname(tstone));
+#endif
 	    return;
 	case LIQUID:
 	    if (!obj->known)		/* note: not "whetstone" */
+#if 0 /*JP*/
 		You("must think this is a wetstone, do you?");
+#else
+		You("これは砥石だと思った？");
+#endif
 	    else
+#if 0 /*JP*/
 		pline("%s a little wetter now.", Tobjnam(tstone, "are"));
+#else
+		pline("%sは少しぬれた．", xname(tstone));
+#endif
 	    return;
 	case WAX:
+#if 0 /*JP*/
 	    streak_color = "waxy";
+#else
+	    streak_color = "脂っぽい";
+#endif
 	    break;		/* okay even if not touchstone */
 	case WOOD:
+#if 0 /*JP*/
 	    streak_color = "wooden";
+#else
+	    streak_color = "おがくずのような";
+#endif
 	    break;		/* okay even if not touchstone */
 	case GOLD:
 	    do_scratch = TRUE;	/* scratching and streaks */
+#if 0 /*JP*/
 	    streak_color = "golden";
+#else
+	    streak_color = "金色の";
+#endif
 	    break;
 	case SILVER:
 	    do_scratch = TRUE;	/* scratching and streaks */
+#if 0 /*JP*/
 	    streak_color = "silvery";
+#else
+	    streak_color = "銀色の";
+#endif
 	    break;
 	default:
 	    /* Objects passing the is_flimsy() test will not
@@ -2337,13 +3307,24 @@
 	break;		/* default oclass */
     }
 
+#if 0 /*JP*/
     Sprintf(stonebuf, "stone%s", plur(tstone->quan));
+#endif
     if (do_scratch)
+#if 0 /*JP*/
 	pline("You make %s%sscratch marks on the %s.",
 	      streak_color ? streak_color : (const char *)"",
 	      streak_color ? " " : "", stonebuf);
+#else
+	You("%sこすり跡を石につけた．",
+              streak_color ? streak_color : (const char *)"");
+#endif
     else if (streak_color)
+#if 0 /*JP*/
 	pline("You see %s streaks on the %s.", streak_color, stonebuf);
+#else
+	pline("石に%s筋がついた．", streak_color);
+#endif
     else
 	pline(scritch);
     return;
@@ -2357,41 +3338,82 @@
 	int ttyp, tmp;
 	const char *what = (char *)0;
 	char buf[BUFSZ];
+#if 0 /*JP*/
 	const char *occutext = "setting the trap";
+#else
+	const char *occutext = "罠を仕掛けている";
+#endif
 
 	if (nohands(youmonst.data))
+/*JP
 	    what = "without hands";
+*/
+	    what = "手がないので";
 	else if (Stunned)
+/*JP
 	    what = "while stunned";
+*/
+	    what = "くらくらしているので";
 	else if (u.uswallow)
+#if 0 /*JP*/
 	    what = is_animal(u.ustuck->data) ? "while swallowed" :
 			"while engulfed";
+#else
+	    what = is_animal(u.ustuck->data) ? "飲み込まれている間は" :
+			"巻き込まれている間は";
+#endif
 	else if (Underwater)
+/*JP
 	    what = "underwater";
+*/
+	    what = "水面下では";
 	else if (Levitation)
+/*JP
 	    what = "while levitating";
+*/
+	    what = "浮いている間は";
 	else if (is_pool(u.ux, u.uy))
+/*JP
 	    what = "in water";
+*/
+	    what = "水中では";
 	else if (is_lava(u.ux, u.uy))
+/*JP
 	    what = "in lava";
+*/
+	    what = "溶岩の中では";
 	else if (On_stairs(u.ux, u.uy))
 	    what = (u.ux == xdnladder || u.ux == xupladder) ?
+/*JP
 			"on the ladder" : "on the stairs";
+*/
+			"はしごの上では" : "階段の上では";
 	else if (IS_FURNITURE(levl[u.ux][u.uy].typ) ||
 		IS_ROCK(levl[u.ux][u.uy].typ) ||
 		closed_door(u.ux, u.uy) || t_at(u.ux, u.uy))
+/*JP
 	    what = "here";
+*/
+	    what = "ここでは";
 	if (what) {
+/*JP
 	    You_cant("set a trap %s!",what);
+*/
+	    pline("%s罠を仕掛けられない！",what);
 	    reset_trapset();
 	    return;
 	}
 	ttyp = (otmp->otyp == LAND_MINE) ? LANDMINE : BEAR_TRAP;
 	if (otmp == trapinfo.tobj &&
 		u.ux == trapinfo.tx && u.uy == trapinfo.ty) {
+#if 0 /*JP*/
 	    You("resume setting %s %s.",
 		shk_your(buf, otmp),
 		defsyms[trap_to_defsym(what_trap(ttyp))].explanation);
+#else
+	    You("%sを仕掛けるのを再開した．",
+		jtrns_obj('^', defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
+#endif
 	    set_occupation(set_trap, occutext, 0);
 	    return;
 	}
@@ -2412,11 +3434,20 @@
 
 	    if (Fumbling || otmp->cursed) chance = (rnl(10) > 3);
 	    else  chance = (rnl(10) > 5);
+#if 0 /*JP:T*/
 	    You("aren't very skilled at reaching from %s.",
 		mon_nam(u.usteed));
+#else
+	    pline("%sの上からではうまく仕掛けられないかもしれない．",
+		mon_nam(u.usteed));
+#endif
+#if 0 /*JP*/
 	    Sprintf(buf, "Continue your attempt to set %s?",
 		the(defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
 	    if(yn(buf) == 'y') {
+#else
+	    if(yn("それでも続ける？") == 'y') {
+#endif
 		if (chance) {
 			switch(ttyp) {
 			    case LANDMINE:	/* set it off */
@@ -2425,8 +3456,13 @@
 				break;
 			    case BEAR_TRAP:	/* drop it without arming it */
 				reset_trapset();
+#if 0 /*JP*/
 				You("drop %s!",
 			  the(defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
+#else
+				You("%sを落した！",
+	jtrns_obj('^', defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
+#endif
 				dropx(otmp);
 				return;
 			}
@@ -2437,9 +3473,14 @@
 	    }
 	}
 #endif
+#if 0 /*JP*/
 	You("begin setting %s %s.",
 	    shk_your(buf, otmp),
 	    defsyms[trap_to_defsym(what_trap(ttyp))].explanation);
+#else
+	You("%s%sを仕掛けはじめた．", shk_your(buf, otmp),
+	    jtrns_obj('^', defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
+#endif
 	set_occupation(set_trap, occutext, 0);
 	return;
 }
@@ -2471,14 +3512,22 @@
 		add_damage(u.ux, u.uy, 0L);		/* schedule removal */
 	    }
 	    if (!trapinfo.force_bungle)
+#if 0 /*JP*/
 		You("finish arming %s.",
 			the(defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
+#else
+		You("%sを仕掛け終えた．",
+			jtrns_obj('^', defsyms[trap_to_defsym(what_trap(ttyp))].explanation));
+#endif
 	    if (((otmp->cursed || Fumbling) && (rnl(10) > 5)) || trapinfo.force_bungle)
 		dotrap(ttmp,
 			(unsigned)(trapinfo.force_bungle ? FORCEBUNGLE : 0));
 	} else {
 	    /* this shouldn't happen */
+/*JP
 	    Your("trap setting attempt fails.");
+*/
+	    You("罠を仕掛けるのに失敗した．");
 	}
 	useup(otmp);
 	reset_trapset();
@@ -2493,8 +3542,13 @@
     struct monst *mtmp;
     struct obj *otmp;
     int rx, ry, proficient, res = 0;
+#if 0 /*JP*/
     const char *msg_slipsfree = "The bullwhip slips free.";
     const char *msg_snap = "Snap!";
+#else
+    const char *msg_slipsfree = "鞭はほどけた．";
+    const char *msg_snap = "ピシッ！";
+#endif
 
     if (obj != uwep) {
 	if (!wield_tool(obj, "lash")) return 0;
@@ -2517,13 +3571,22 @@
     if (proficient < 0) proficient = 0;
 
     if (u.uswallow && attack(u.ustuck)) {
+/*JP
 	There("is not enough room to flick your bullwhip.");
+*/
+	pline("鞭を打つほど広くない．");
 
     } else if (Underwater) {
+/*JP
 	There("is too much resistance to flick your bullwhip.");
+*/
+	pline("水の抵抗がありすぎて鞭を打つことができない．");
 
     } else if (u.dz < 0) {
+/*JP
 	You("flick a bug off of the %s.",ceiling(u.ux,u.uy));
+*/
+	You("%sの虫を打ち落した．",ceiling(u.ux,u.uy));
 
     } else if ((!u.dx && !u.dy) || (u.dz > 0)) {
 	int dam;
@@ -2531,7 +3594,10 @@
 #ifdef STEED
 	/* Sometimes you hit your steed by mistake */
 	if (u.usteed && !rn2(proficient + 2)) {
+/*JP
 	    You("whip %s!", mon_nam(u.usteed));
+*/
+	    You("%sを鞭打った！", mon_nam(u.usteed));
 	    kick_steed();
 	    return 1;
 	}
@@ -2544,12 +3610,20 @@
 	    /* Have a shot at snaring something on the floor */
 	    otmp = level.objects[u.ux][u.uy];
 	    if (otmp && otmp->otyp == CORPSE && otmp->corpsenm == PM_HORSE) {
+/*JP
 		pline("Why beat a dead horse?");
+*/
+		pline("どうして死んだ馬を鞭打つようなことをするの？");
 		return 1;
 	    }
 	    if (otmp && proficient) {
+#if 0 /*JP*/
 		You("wrap your bullwhip around %s on the %s.",
 		    an(singular(otmp, xname)), surface(u.ux, u.uy));
+#else
+		You("鞭を%sの上の%sにからませた．",
+		    surface(u.ux, u.uy), an(singular(otmp, xname)));
+#endif
 		if (rnl(6) || pickup_object(otmp, 1L, TRUE) < 1)
 		    pline(msg_slipsfree);
 		return 1;
@@ -2557,14 +3631,25 @@
 	}
 	dam = rnd(2) + dbon() + obj->spe;
 	if (dam <= 0) dam = 1;
+/*JP
 	You("hit your %s with your bullwhip.", body_part(FOOT));
+*/
+	You("自分の%sを自分で打ちつけた．", body_part(FOOT));
+#if 0 /*JP:T*/
 	Sprintf(buf, "killed %sself with %s bullwhip", uhim(), uhis());
 	losehp(dam, buf, NO_KILLER_PREFIX);
+#else
+	Strcpy(buf, "自分自身を鞭打って");
+	losehp(dam, buf, KILLED_BY);
+#endif
 	flags.botl = 1;
 	return 1;
 
     } else if ((Fumbling || Glib) && !rn2(5)) {
+/*JP
 	pline_The("bullwhip slips out of your %s.", body_part(HAND));
+*/
+	pline("鞭が%sからすべり落ちた．", body_part(HAND));
 	dropx(obj);
 
     } else if (u.utrap && u.utraptype == TT_PIT) {
@@ -2599,16 +3684,25 @@
 	    if (IS_FURNITURE(levl[rx][ry].typ))
 		wrapped_what = something;
 	    else if (sobj_at(BOULDER, rx, ry))
+/*JP
 		wrapped_what = "a boulder";
+*/
+		wrapped_what = "岩";
 	}
 	if (wrapped_what) {
 	    coord cc;
 
 	    cc.x = rx; cc.y = ry;
+/*JP
 	    You("wrap your bullwhip around %s.", wrapped_what);
+*/
+	    You("鞭を%sにからませた．", wrapped_what);
 	    if (proficient && rn2(proficient + 2)) {
 		if (!mtmp || enexto(&cc, rx, ry, youmonst.data)) {
+/*JP
 		    You("yank yourself out of the pit!");
+*/
+		    You("ぐいと引っぱって穴から抜け出した！");
 		    teleds(cc.x, cc.y, TRUE);
 		    u.utrap = 0;
 		    vision_full_recalc = 1;
@@ -2622,7 +3716,11 @@
     } else if (mtmp) {
 	if (!canspotmon(mtmp) &&
 		!memory_is_invisible(rx, ry)) {
+#if 0 /*JP*/
 	   pline("A monster is there that you couldn't see.");
+#else
+	   pline("見えない怪物がいる．");
+#endif
 	   map_invisible(rx, ry);
 	}
 	otmp = MON_WEP(mtmp);	/* can be null */
@@ -2638,13 +3736,23 @@
 	    } else
 		mon_hand = 0;	/* lint suppression */
 
+/*JP
 	    You("wrap your bullwhip around %s %s.",
+*/
+	    You("鞭を%sの%sにからませた．",
 		s_suffix(mon_nam(mtmp)), onambuf);
 	    if (gotit && otmp->cursed) {
+#if 0 /*JP*/
 		pline("%s welded to %s %s%c",
 		      (otmp->quan == 1L) ? "It is" : "They are",
 		      mhis(mtmp), mon_hand,
 		      !otmp->bknown ? '!' : '.');
+#else
+		pline("%sは%sの%sにくっついてしまっている%s",
+		      onambuf,
+		      mon_nam(mtmp), mon_hand,
+		      !otmp->bknown ? "！" : "．");
+#endif
 		otmp->bknown = 1;
 		gotit = FALSE;	/* can't pull it free */
 	    }
@@ -2656,7 +3764,10 @@
 		switch (rn2(proficient + 1)) {
 		case 2:
 		    /* to floor near you */
+/*JP
 		    You("yank %s %s to the %s!", s_suffix(mon_nam(mtmp)),
+*/
+		    You("%sの%sを%sに引き落した！", mon_nam(mtmp),
 			onambuf, surface(u.ux, u.uy));
 		    place_object(otmp, u.ux, u.uy);
 		    stackobj(otmp);
@@ -2674,7 +3785,10 @@
 				     dmgval(otmp, &youmonst),
 				     otmp, (char *)0);
 			if (hitu) {
+/*JP
 			    pline_The("%s hits you as you try to snatch it!",
+*/
+			    pline_The("%sを奪おうとしたらあなたに当たった！",
 				the(onambuf));
 			}
 			place_object(otmp, u.ux, u.uy);
@@ -2683,7 +3797,10 @@
 		    }
 #endif /* 0 */
 		    /* right into your inventory */
+/*JP
 		    You("snatch %s %s!", s_suffix(mon_nam(mtmp)), onambuf);
+*/
+		    You("%sの%sを奪った！", mon_nam(mtmp), onambuf);
 		    if (otmp->otyp == CORPSE &&
 			    touch_petrifies(&mons[otmp->corpsenm]) &&
 			    !uarmg && !Stone_resistance &&
@@ -2691,17 +3808,31 @@
 				polymon(PM_STONE_GOLEM))) {
 			char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 			Sprintf(kbuf, "%s corpse",
 				an(mons[otmp->corpsenm].mname));
+#else
+			Sprintf(kbuf, "%sの死体",
+				jtrns_mon(mons[otmp->corpsenm].mname));
+#endif
+/*JP
 			pline("Snatching %s is a fatal mistake.", kbuf);
+*/
+			pline("%sを奪ったのは致命的なミスだ．", kbuf);
 			instapetrify(kbuf);
 		    }
+/*JP
 		    otmp = hold_another_object(otmp, "You drop %s!",
+*/
+		    otmp = hold_another_object(otmp, "%sを落した！",
 					       doname(otmp), (const char *)0);
 		    break;
 		default:
 		    /* to floor beneath mon */
+/*JP
 		    You("yank %s from %s %s!", the(onambuf),
+*/
+		    You("%sを%sの%sからひっぱった！", the(xname(otmp)),
 			s_suffix(mon_nam(mtmp)), mon_hand);
 		    obj_no_longer_held(otmp);
 		    place_object(otmp, mtmp->mx, mtmp->my);
@@ -2716,7 +3847,10 @@
 	    if (mtmp->m_ap_type &&
 		!Protection_from_shape_changers && !sensemon(mtmp))
 		stumble_onto_mimic(mtmp);
+/*JP
 	    else You("flick your bullwhip towards %s.", mon_nam(mtmp));
+*/
+	    else You("%sに向って鞭を打った．", mon_nam(mtmp));
 	    if (proficient) {
 		if (attack(mtmp)) return 1;
 		else pline(msg_snap);
@@ -2725,7 +3859,10 @@
 
     } else if (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) {
 	    /* it must be air -- water checked above */
+/*JP
 	    You("snap your whip through thin air.");
+*/
+	    You("何もないところで鞭を打った．");
 
     } else {
 	pline(msg_snap);
@@ -2750,7 +3887,12 @@
 
 	/* Are you allowed to use the pole? */
 	if (u.uswallow) {
+#if 0 /*JP*/
 		pline("There's not enough room here to use that.");
+#else
+		pline("それを使うだけの広さがない．");
+#endif
+
 		return (0);
 	}
 	if (obj != uwep) {
@@ -2759,10 +3901,18 @@
 	}
 
 	/* Prompt for a location */
+#if 0 /*JP*/
 	pline("Where do you want to hit?");
+#else
+	pline("どれを狙う？");
+#endif
 	cc.x = u.ux;
 	cc.y = u.uy;
+#if 0 /*JP*/
 	getpos(&cc, TRUE, "the spot to hit");
+#else
+	getpos(&cc, TRUE, "狙う場所");
+#endif
 	if (cc.x == -10) return (0); /* user pressed esc */
 
 #ifdef WEAPON_SKILLS
@@ -2775,13 +3925,25 @@
 	min_range = ((obj->otyp == FISHING_POLE) ? 1 : 4);
 
 	if (distu(cc.x, cc.y) > max_range) {
+#if 0 /*JP*/
 		pline("Too far!");
+#else
+		pline("遠すぎる！");
+#endif
 		return (res);
 	} else if (distu(cc.x, cc.y) < min_range) {
+#if 0 /*JP*/
 		pline("Too close!");
+#else
+		pline("近すぎる！");
+#endif
 		return (res);
 	} else if (!cansee(cc.x, cc.y)) {
+#if 0 /*JP*/
 		You("won't hit anything if you can't see that spot.");
+#else
+		You("場所が見えなければ狙えない．");
+#endif
 		return (res);
 	}
 
@@ -2795,8 +3957,13 @@
 		case 1:
 			/* Snag yourself */
 			if (obj->otyp == FISHING_POLE) {
+#if 0 /*JP*/
 				You("hook yourself!");
 				losehp(rn1(10,10), "a fishing hook", KILLED_BY);
+#else
+				You("自分自身を引っかけた！");
+				losehp(rn1(10,10), "釣竿で", KILLED_BY);
+#endif
 				return (1);
 			}
 			break;
@@ -2805,12 +3972,20 @@
 			if (fishing && mtmp) {
 				if ((bigmonst(mtmp->data) || strongmonst(mtmp->data))
 						&& !rn2(2)) {
+#if 0 /*JP*/
 					You("are yanked toward the %s",
+#else
+					You("%sの方に引っ張られた．",
+#endif
 							surface(cc.x, cc.y));
 					hurtle(sgn(cc.x-u.ux), sgn(cc.y-u.uy), 1, TRUE);
 					return (1);
 				} else if (enexto(&cc, u.ux, u.uy, 0)) {
+#if 0 /*JP*/
 					You("reel in %s!", mon_nam(mtmp));
+#else
+					You("%sを釣り上げた！", mon_nam(mtmp));
+#endif
 					mtmp->mundetected = 0;
 					rloc_to(mtmp, cc.x, cc.y);
 					return (1);
@@ -2822,7 +3997,11 @@
 			if (obj->otyp == FISHING_POLE &&
 					(otmp = level.objects[cc.x][cc.y]) !=
 					(struct obj *)0) {
+#if 0 /*JP*/
 				You("snag an object from the %s!", surface(cc.x, cc.y));
+#else
+				pline("%sの下の何かに引っかかった！", surface(cc.x, cc.y));
+#endif
 				pickup_object(otmp, 1, FALSE);
 				/* If pickup fails, leave it alone */
 				newsym(cc.x, cc.y);
@@ -2835,7 +4014,11 @@
 					(otmp = mksobj(LOW_BOOTS, TRUE, FALSE)) !=
 					(struct obj *)0) {
 				flags.boot_count++;
+#if 0 /*JP*/
 				You("snag some garbage from the %s!",
+#else
+				You("%sから何かを釣り上げた！",
+#endif
 						surface(cc.x, cc.y));
 				if (pickup_object(otmp, 1, FALSE) <= 0) {
 					obj_extract_self(otmp);
@@ -2852,9 +4035,15 @@
 					IS_TOILET(levl[cc.x][cc.y].typ))) {
 				mtmp = makemon(&mons[PM_SEWER_RAT],
 						cc.x, cc.y, NO_MM_FLAGS);
+#if 0 /*JP*/
 				pline("Eek!  There's %s there!",
 					Blind ? "something squirmy" :
 					a_monnam(mtmp));
+#else
+				pline("げ！ここには%sがいる！",
+					Blind ? "身もだえするようなもの" :
+					a_monnam(mtmp));
+#endif
 				return (1);
 			}
 #endif
@@ -2864,7 +4053,11 @@
 			if (fishing &&
 					(otmp = mksobj(CRAM_RATION, TRUE, FALSE)) !=
 					(struct obj *)0) {
+#if 0 /*JP*/
 				You("catch tonight's dinner!");
+#else
+				You("今日の晩飯を捕獲した！");
+#endif
 				if (pickup_object(otmp, 1, FALSE) <= 0) {
 					obj_extract_self(otmp);
 					place_object(otmp, u.ux, u.uy);
@@ -2892,10 +4085,17 @@
 
 
 static const char
+#if 0 /*JP*/
 	not_enough_room[] = "There's not enough room here to use that.",
 	where_to_hit[] = "Where do you want to hit?",
 	cant_see_spot[] = "won't hit anything if you can't see that spot.",
 	cant_reach[] = "can't reach that spot from here.";
+#else
+	not_enough_room[] = "それを使うだけの広さがない．",
+	where_to_hit[] = "どれを狙う？",
+	cant_see_spot[] = "場所が見えなければ狙えない．",
+	cant_reach[] = "ここからそこへは届かない．";
+#endif
 
 #if 0
 /* Distance attacks by pole-weapons */
@@ -2923,7 +4123,10 @@
 	pline(where_to_hit);
 	cc.x = u.ux;
 	cc.y = u.uy;
+/*JP
 	if (getpos(&cc, TRUE, "the spot to hit") < 0)
+*/
+	if (getpos(&cc, TRUE, "狙う場所") < 0)
 	    return 0;	/* user pressed ESC */
 
 	/* Calculate range */
@@ -2932,10 +4135,16 @@
 	else if (P_SKILL(typ) == P_SKILLED) max_range = 5;
 	else max_range = 8;
 	if (distu(cc.x, cc.y) > max_range) {
+/*JP
 	    pline("Too far!");
+*/
+	    pline("遠すぎる！");
 	    return (res);
 	} else if (distu(cc.x, cc.y) < min_range) {
+/*JP
 	    pline("Too close!");
+*/
+	    pline("近すぎる！");
 	    return (res);
 	} else if (!cansee(cc.x, cc.y) &&
 		   ((mtmp = m_at(cc.x, cc.y)) == (struct monst *)0 ||
@@ -2983,25 +4192,47 @@
 		obj = splitobj(obj, 1L);
 	}
 	if (Hallucination)
+/*JP
 		You("give yourself a facial.");
+*/
+		You("自分の顔にクリームパックをした．");
 	else
+#if 0 /*JP*/
 		pline("You immerse your %s in %s%s.", body_part(FACE),
 			several ? "one of " : "",
 			several ? makeplural(the(xname(obj))) : the(xname(obj)));
+#else
+		pline("%s%sに%sを沈めた．",
+			xname(obj),
+			several ? "のひとつ" : "", body_part(FACE));
+#endif
 	if(can_blnd((struct monst*)0, &youmonst, AT_WEAP, obj)) {
 		int blindinc = rnd(25);
 		u.ucreamed += blindinc;
 		make_blinded(Blinded + (long)blindinc, FALSE);
 		if (!Blind || (Blind && wasblind))
+#if 0 /*JP*/
 			pline("There's %ssticky goop all over your %s.",
 				wascreamed ? "more " : "",
 				body_part(FACE));
+#else
+			pline("やっかいなねばねばが%s全体に%sついた．",
+				body_part(FACE), wascreamed ? "さらに" : "");
+#endif
 		else /* Blind  && !wasblind */
+#if 0 /*JP*/
 			You_cant("see through all the sticky goop on your %s.",
 				body_part(FACE));
+#else
+			pline("やっかいなねばねばが%s全体について何も見えなくなった．",
+				body_part(FACE));
+#endif
 	}
 	if (obj->unpaid) {
+/*JP
 		verbalize("You used it, you bought it!");
+*/
+		verbalize("使ったのなら買ってもらうよ！");
 		bill_dummy_object(obj);
 	}
 	obj_extract_self(obj);
@@ -3033,7 +4264,10 @@
 	pline(where_to_hit);
 	cc.x = u.ux;
 	cc.y = u.uy;
+/*JP
 	if (getpos(&cc, TRUE, "the spot to hit") < 0)
+*/
+	if (getpos(&cc, TRUE, "狙う場所") < 0)
 	    return 0;	/* user pressed ESC */
 
 	/* Calculate range */
@@ -3042,7 +4276,10 @@
 	else if (P_SKILL(typ) == P_SKILLED) max_range = 5;
 	else max_range = 8;
 	if (distu(cc.x, cc.y) > max_range) {
+/*JP
 		pline("Too far!");
+*/
+		pline("遠すぎる！");
 		return (res);
 	} else if (!cansee(cc.x, cc.y)) {
 		You(cant_see_spot);
@@ -3061,17 +4298,32 @@
 	    any.a_int = 1;	/* use index+1 (cant use 0) as identifier */
 	    start_menu(tmpwin);
 	    any.a_int++;
+/*JP
 	    Sprintf(buf, "an object on the %s", surface(cc.x, cc.y));
+*/
+	    Sprintf(buf, "%sにある物体", surface(cc.x, cc.y));
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
 			 buf, MENU_UNSELECTED);
 	    any.a_int++;
+#if 0 /*JP:T*/
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
 			"a monster", MENU_UNSELECTED);
+#else
+	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
+			"怪物", MENU_UNSELECTED);
+#endif
 	    any.a_int++;
+#if 0 /*JP*/
 	    Sprintf(buf, "the %s", surface(cc.x, cc.y));
+#else
+	    Sprintf(buf, "%s", surface(cc.x, cc.y));
+#endif
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
 			 buf, MENU_UNSELECTED);
+/*JP
 	    end_menu(tmpwin, "Aim for what?");
+*/
+	    end_menu(tmpwin, "何を狙う？");
 	    tohit = rn2(4);
 	    if (select_menu(tmpwin, PICK_ONE, &selected) > 0 &&
 			rn2(P_SKILL(typ) > P_SKILLED ? 20 : 2))
@@ -3087,7 +4339,10 @@
 	    break;
 	case 1:	/* Object */
 	    if ((otmp = level.objects[cc.x][cc.y]) != 0) {
+/*JP
 		You("snag an object from the %s!", surface(cc.x, cc.y));
+*/
+		You("%sのものを引っ掛けた！", surface(cc.x, cc.y));
 		(void) pickup_object(otmp, 1L, FALSE);
 		/* If pickup fails, leave it alone */
 		newsym(cc.x, cc.y);
@@ -3098,7 +4353,10 @@
 	    if ((mtmp = m_at(cc.x, cc.y)) == (struct monst *)0) break;
 	    if (verysmall(mtmp->data) && !rn2(4) &&
 			enexto(&cc, u.ux, u.uy, (struct permonst *)0)) {
+/*JP
 		You("pull in %s!", mon_nam(mtmp));
+*/
+	    	You("%sを引っ張った！", mon_nam(mtmp));
 		mtmp->mundetected = 0;
 		rloc_to(mtmp, cc.x, cc.y);
 		return (1);
@@ -3110,17 +4368,29 @@
 	    /* FALL THROUGH */
 	case 3:	/* Surface */
 	    if (IS_AIR(levl[cc.x][cc.y].typ) || is_pool(cc.x, cc.y))
+/*JP
 		pline_The("hook slices through the %s.", surface(cc.x, cc.y));
+*/
+		pline("フックは%sをさっと切った．", surface(cc.x, cc.y));
 	    else {
+/*JP
 		You("are yanked toward the %s!", surface(cc.x, cc.y));
+*/
+		You("%sへ引っぱられた！", surface(cc.x, cc.y));
 		hurtle(sgn(cc.x-u.ux), sgn(cc.y-u.uy), 1, FALSE);
 		spoteffects(TRUE);
 	    }
 	    return (1);
 	default:	/* Yourself (oops!) */
 	    if (P_SKILL(typ) <= P_BASIC) {
+/*JP
 		You("hook yourself!");
+*/
+		You("自分自身を引っ掛けた");
+/*JP
 		losehp(rn1(10,10), "a grappling hook", KILLED_BY);
+*/
+		losehp(rn1(10,10), "自分自身を引っ掛けて", KILLED_BY);
 		return (1);
 	    }
 	    break;
@@ -3140,20 +4410,39 @@
     char confirm[QBUFSZ], the_wand[BUFSZ];
 
     Strcpy(the_wand, yname(obj));
+#if 0 /*JP*/
     Sprintf(confirm, "Are you really sure you want to break %s?",
 	safe_qbuf("", sizeof("Are you really sure you want to break ?"),
 				the_wand, ysimple_name(obj), "the wand"));
+#else
+    Sprintf(confirm, "本当に%sを壊すの？",
+	safe_qbuf("", sizeof("本当にを壊すの？"),
+				the_wand, ysimple_name(obj), "杖"));
+#endif
     if (yn(confirm) == 'n' ) return 0;
 
     if (nohands(youmonst.data)) {
+#if 0 /*JP*/
 	You_cant("break %s without hands!", the_wand);
+#else
+	You("手が無いので%sを壊せない！", the_wand);
+#endif
 	return 0;
     } else if (ACURR(A_STR) < 10) {
+#if 0 /*JP*/
 	You("don't have the strength to break %s!", the_wand);
+#else
+	You("%sを壊すだけの力がない！", the_wand);
+#endif
 	return 0;
     }
+#if 0 /*JP*/
     pline("Raising %s high above your %s, you break it in two!",
 	  the_wand, body_part(HEAD));
+#else
+    pline("%sを%sの上にあげ二つにへし折った！",
+	  the_wand, body_part(HEAD));
+#endif
     return wand_explode(obj, TRUE);
 }
 
@@ -3177,7 +4466,10 @@
     struct obj *obj;
     boolean hero_broke;
 {
+/*JP
     static const char nothing_else_happens[] = "But nothing else happens...";
+*/
+    static const char nothing_else_happens[] = "しかし，何も起きなかった．．．";
     register int i, x, y;
     register struct monst *mon;
     int dmg, damage;
@@ -3245,7 +4537,10 @@
 	goto discard_broken_wand;
     case WAN_STRIKING:
 	/* we want this before the explosion instead of at the very end */
+/*JP
 	pline("A wall of force smashes down around you!");
+*/
+	pline("あなたは魔力の壁につつまれた！");
 	dmg = d(1 + obj->spe,6);	/* normally 2d12 */
     case WAN_CANCELLATION:
     case WAN_POLYMORPH:
@@ -3330,10 +4625,18 @@
 		damage = zapyourself(obj, FALSE);
 		if (damage) {
 		    if (hero_broke) {
+#if 0 /*JP*/
 		    Sprintf(buf, "killed %sself by breaking a wand", uhim());
 		    losehp(damage, buf, NO_KILLER_PREFIX);
+#else
+		    Sprintf(buf, "自分自身で杖を壊してダメージを受け");
+		    losehp(damage, buf, KILLED_BY);
+#endif
 		    } else
+/*JP
 			losehp(damage, "exploding wand", KILLED_BY_AN);
+*/
+			losehp(damage, "杖の爆発で", KILLED_BY_AN);
 		}
 		if (flags.botl) bot();		/* blindness */
 	    } else if ((mon = m_at(x, y)) != 0 && !DEADMONSTER(mon)) {
@@ -3349,7 +4652,10 @@
 
     /* Note: if player fell thru, this call is a no-op.
        Damage is handled in digactualhole in that case */
+/*JP
     if (shop_damage) pay_for_damage("dig into", FALSE);
+*/
+    if (shop_damage) pay_for_damage("穴をあける", FALSE);
 
     if (obj->otyp == WAN_LIGHT)
 	litroom(TRUE, obj);	/* only needs to be done once */
@@ -3402,7 +4708,10 @@
 	if (carrying(CREAM_PIE) || carrying(EUCALYPTUS_LEAF))
 		add_class(class_list, FOOD_CLASS);
 
+/*JP
 	obj = getobj(class_list, "use or apply");
+*/
+	obj = getobj(class_list, "使う");
 	if(!obj) return 0;
 
 	if (obj->oartifact && !touch_artifact(obj, &youmonst))
@@ -3419,10 +4728,17 @@
 		    if (!cursed(obj)) Blindf_off(obj);
 		} else if (!ublindf)
 		    Blindf_on(obj);
+#if 0 /*JP*/
 		else You("are already %s.",
 			ublindf->otyp == TOWEL ?     "covered by a towel" :
 			ublindf->otyp == BLINDFOLD ? "wearing a blindfold" :
 						     "wearing lenses");
+#else
+		else You("もう%sている．",
+			ublindf->otyp == TOWEL ?     "タオルを巻い" : 
+			ublindf->otyp == BLINDFOLD ? "目隠しをつけ" :
+						     "レンズをつけ");
+#endif
 		break;
 	case CREAM_PIE:
 		res = use_cream_pie(obj);
@@ -3489,8 +4805,13 @@
 			if (!Blind) {
 			    char buf[BUFSZ];
 
+#if 0 /*JP*/
 			    pline("%s %s %s.", Shk_Your(buf, obj),
 				  aobjnam(obj, "glow"), hcolor("brown"));
+#else
+			    pline("%s%sは%s輝いた．", Shk_Your(buf, obj), xname(obj),
+				  jconj_adj(hcolor("茶色の")));
+#endif
 			    obj->bknown = 1;
 			}
 			unbless(obj);
@@ -3507,7 +4828,10 @@
 		break;
 # ifdef P_SPOON
 	case SPOON:
+/*JP
 		pline("It's a finely crafted antique spoon; what do you want to do with it?");
+*/
+		pline("それは素晴らしく巧妙に作られたアンティークなスプーンだ．あなたは何に使いたいですか？");
 		break;
 # endif /* P_SPOON */
 	case BELL:
@@ -3612,14 +4936,26 @@
 		break;
 	case TIN_OPENER:
 		if(!carrying(TIN)) {
+/*JP
 			You("have no tin to open.");
+*/
+			You("缶を持っていない．");
 			goto xit;
 		}
+/*JP
 		You("cannot open a tin without eating or discarding its contents.");
+*/
+		pline("中身を食べるか，捨てるかしないと缶を空にできない．");
 		if(flags.verbose)
+/*JP
 			pline("In order to eat, use the 'e' command.");
+*/
+			pline("食べるには，'e'コマンドを使えばよい．");
 		if(obj != uwep)
+/*JP
     pline("Opening the tin will be much easier if you wield the tin opener.");
+*/
+    pline("缶切りを装備していれば，ずっと簡単に開けることができる．");
 		goto xit;
 
 	case FIGURINE:
@@ -3661,7 +4997,11 @@
 			if (otmp->otyp == PILL)
 			    break;
 		    if (!otmp)
+#if 0 /*JP*/
 			You_cant("find any more pills in %s.", yname(obj));
+#else
+			You("%sの中にはピルがまったく見つからない．", yname(obj));
+#endif
 		    else {
 			check_unpaid(obj);
 			if (otmp->quan > 1L)
@@ -3674,7 +5014,11 @@
 			 * Note that while white and pink pills share the
 			 * same otyp value, they are quite different.
 			 */
+#if 0 /*JP*/
 			You("take a white pill from %s and swallow it.",
+#else
+			You("%sから白い錠剤を取り出して飲み込んだ．",
+#endif
 				yname(obj));
 			if (can_use) {
 			    if (Sick) make_sick(0L, (char *) 0,TRUE ,SICK_ALL);
@@ -3689,17 +5033,34 @@
 			    else if (u.uhp < u.uhpmax) {
 				u.uhp += rn1(10,10);
 				if (u.uhp > u.uhpmax) u.uhp = u.uhpmax;
+#if 0 /*JP*/
 				You_feel("better.");
+#else
+				You("よくなった気がする．");
+#endif
 				flags.botl = TRUE;
 			    } else pline(nothing_happens);
 			} else if (!Sick && rn2(3))
 			    make_sick(0L, xname(otmp), TRUE ,SICK_ALL);
 			else if (rn2(3)) {
+#if 0 /*JP*/
 			    You("seem to have made your condition worse!");
 			    losehp(rn1(10,10), "a drug overdose", KILLED_BY);
+#else
+			    You("体調がますます悪くなった気がする．");
+			    losehp(rn1(10,10), "薬の飲みすぎで", KILLED_BY);
+#endif
+#if 0 /*JP*/
 			} else pline("Nothing seems to happen.");
+#else
+			} else pline("何も起こらなかった．");
+#endif
 		    }
+#if 0 /*JP*/
 		} else You("seem to be out of medical supplies");
+#else
+		} else You("医療用品は入っていないようだ．");
+#endif
 		break;
 	case HORN_OF_PLENTY:	/* not a musical instrument */
 		if (obj->spe > 0) {
@@ -3713,17 +5074,27 @@
 			while ((otmp->otyp == POT_SICKNESS) ||
 					objects[otmp->otyp].oc_magic)
 			    otmp->otyp = rnd_class(POT_BOOZE, POT_WATER);
+/*JP
 			what = "A potion";
+*/
+			what = "薬";
 		    } else {
 			otmp = mkobj(FOOD_CLASS, FALSE);
 			if (otmp->otyp == FOOD_RATION && !rn2(7))
 			    otmp->otyp = LUMP_OF_ROYAL_JELLY;
+/*JP
 			what = "Some food";
+*/
+			what = "食べ物";
 		    }
+/*JP
 		    pline("%s spills out.", what);
+*/
+		    pline("%sが飛び出てきた．", what);
 		    otmp->blessed = obj->blessed;
 		    otmp->cursed = obj->cursed;
 		    otmp->owt = weight(otmp);
+#if 0 /*JP*/
 		    otmp = hold_another_object(otmp, u.uswallow ?
 				       "Oops!  %s out of your reach!" :
 					(Is_airlevel(&u.uz) ||
@@ -3734,6 +5105,18 @@
 					       "Oops!  %s to the floor!",
 					       The(aobjnam(otmp, "slip")),
 					       (const char *)0);
+#else
+		    otmp = hold_another_object(otmp, u.uswallow ?
+				       "おっと！%sは届かない！" :
+					(Is_airlevel(&u.uz) ||
+					 Is_waterlevel(&u.uz) ||
+					 levl[u.ux][u.uy].typ < IRONBARS ||
+					 levl[u.ux][u.uy].typ >= ICE) ?
+					       "おっと！%sはあなたの手から滑り落ちた！" :
+					       "おっと！%sは床に滑り落ちた！",
+					       The(xname(otmp)),
+					       (const char *)0);
+#endif
 		    makeknown(HORN_OF_PLENTY);
 		} else
 		    pline(nothing_happens);
@@ -3762,24 +5145,44 @@
 			obj->altmode = WP_MODE_AUTO;
 		}
 		
+#if 0 /*JP*/
 		You("switch %s to %s mode.", yname(obj), 
 			((obj->altmode == WP_MODE_SINGLE) ? "single shot" : 
 			 ((obj->altmode == WP_MODE_BURST) ? "burst" :
 			  "full automatic")));
+#else
+		You("%sのセレクターを%sモードに変更した．", yname(obj), 
+			((obj->altmode == WP_MODE_SINGLE) ? "単射" : 
+			 ((obj->altmode == WP_MODE_BURST) ? "三点射" :
+			  "全自動")));
+#endif
 		break;	
 	case AUTO_SHOTGUN:
 	case SUBMACHINE_GUN:		
 		if (obj->altmode == WP_MODE_AUTO) obj-> altmode = WP_MODE_SINGLE;
 		else obj->altmode = WP_MODE_AUTO;
+#if 0 /*JP*/
 		You("switch %s to %s mode.", yname(obj), 
 			(obj->altmode ? "semi-automatic" : "full automatic"));
+#else
+		You("%sのセレクターを%sモードに変更した．", yname(obj), 
+			(obj->altmode ? "半自動" : "全自動"));
+#endif
 		break;
 	case FRAG_GRENADE:
 	case GAS_GRENADE:
 		if (!obj->oarmed) {
+#if 0 /*JP*/
 			You("arm %s.", yname(obj));
+#else
+			You("%sの安全ピンを抜いた．", yname(obj));
+#endif
 			arm_bomb(obj, TRUE);
+#if 0 /*JP*/
 		} else pline("It's already armed!");
+#else
+		} else pline("既に秒読み段階に入っている！");
+#endif
 		break;
 	case STICK_OF_DYNAMITE:
 		light_cocktail(obj);
@@ -3794,7 +5197,10 @@
 			res = use_pick_axe(obj);
 			break;
 		}
+/*JP
 		pline("Sorry, I don't know how to use that.");
+*/
+		pline("それをどうやって使うんだい？");
 	xit:
 		nomul(0);
 		return 0;
diff -aurN slashem-0.0.7E6F2/src/artifact.c jslashem-0.0.7E6F2-J0.0.8/src/artifact.c
--- slashem-0.0.7E6F2/src/artifact.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/artifact.c	2004-06-27 16:52:02.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "artifact.h"
 #ifdef OVLB
@@ -641,16 +649,28 @@
 	char buf[BUFSZ];
 
 	if (!yours) return 0;
+#if 0 /*JP*/
 	You("are blasted by %s power!", s_suffix(the(xname(obj))));
+#else
+	You("%sの力を浴びた！", xname(obj));
+#endif
 	dmg = d((Antimagic ? 6 : 8), (self_willed ? 10 : 6));
+#if 0 /*JP*/
 	Sprintf(buf, "touching %s", oart->name);
+#else
+	Sprintf(buf, "%sに触れて", jtrns_obj('A', oart->name));
+#endif
 	losehp(dmg, buf, KILLED_BY);
 	exercise(A_WIS, FALSE);
     }
 
     /* can pick it up unless you're totally non-synch'd with the artifact */
     if (badclass && badalign && self_willed) {
+#if 0 /*JP*/
 	if (yours) pline("%s your grasp!", Tobjnam(obj, "evade"));
+#else
+	if (yours) pline("%sは握ろうとするとするりと抜けた！", xname(obj));
+#endif
 	return 0;
     }
 
@@ -840,12 +860,22 @@
     for (i = 0; i < NROFARTIFACTS; i++) {
 	if (artidisco[i] == 0) break;	/* empty slot implies end of list */
 	if (i == 0)
+#if 0 /*JP*/
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
 	      "Artifacts", MENU_UNSELECTED);
+#else
+	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
+	      "聖器", MENU_UNSELECTED);
+#endif
 	m = artidisco[i];
 	otyp = artilist[m].otyp;
+#if 0 /*JP*/
 	Sprintf(buf, "  %s [%s %s]", artiname(m),
 		align_str(artilist[m].alignment), simple_typename(otyp));
+#else
+	Sprintf(buf, "  %s [%s %s]", jtrns_obj('A', artiname(m)),
+		align_str(artilist[m].alignment), simple_typename(otyp));
+#endif
 	add_menu(tmpwin, objnum_to_glyph(otyp), &any, 0, 0, ATR_NONE,
 	  buf, MENU_UNSELECTED);
     }
@@ -879,8 +909,14 @@
 	 */
 #define MB_MAX_DIEROLL		8	/* rolls above this aren't magical */
 static const char * const mb_verb[2][4] = {
+#if 0 /*JP*/
 	{ "probe", "stun", "scare", "cancel" },
 	{ "prod", "amaze", "tickle", "purge" },
+#else
+	/* Mb_hit() で "%sた"の形で利用 */
+	{"調べ", "くらくらさせ", "怯えさせ", "浄化し"},
+	{ "励まし", "驚かせ", "くすぐっ", "清め" },
+#endif
 };
 #define MB_INDEX_PROBE		0
 #define MB_INDEX_STUN		1
@@ -944,8 +980,13 @@
     verb = mb_verb[!!Hallucination][attack_indx];
     if (youattack || youdefend || vis) {
 	result = TRUE;
+#if 0 /*JP*/
 	pline_The("magic-absorbing blade %s %s!",
 		  vtense((const char *)0, verb), hittee);
+#else
+	pline("魔力を吸いとる刃が%sを%sた！",
+		  hittee, verb);
+#endif
 	/* assume probing has some sort of noticeable feedback
 	   even if it is being done by one monster to another */
 	if (attack_indx == MB_INDEX_PROBE && !canspotmon(mdef))
@@ -968,7 +1009,10 @@
 		if (youmonst.data != old_uasmon)
 		    *dmgptr = 0;    /* rehumanized, so no more damage */
 		if (u.uenmax > 0) {
+/*JP
 		    You("lose magical energy!");
+*/
+		    You("魔法のエネルギーを失った！");
 		    u.uenmax--;
 		    if (u.uen > 0) u.uen--;
 		    flags.botl = 1;
@@ -977,7 +1021,10 @@
 		if (mdef->data == &mons[PM_CLAY_GOLEM])
 		    mdef->mhp = 1;	/* cancelled clay golems will die */
 		if (youattack && attacktype(mdef->data, AT_MAGC)) {
+/*JP
 		    You("absorb magical energy!");
+*/
+		    You("魔法のエネルギーを吸いとった！");
 		    u.uenmax++;
 		    u.uen++;
 		    flags.botl = 1;
@@ -995,7 +1042,11 @@
 		nomovemsg = "";
 		if (magr && magr == u.ustuck && sticks(youmonst.data)) {
 		    setustuck((struct monst *)0);
+#if 0 /*JP*/
 		    You("release %s!", mon_nam(magr));
+#else
+		    You("%sを解放した！", mon_nam(magr));
+#endif
 		}
 	    }
 	} else {
@@ -1013,7 +1064,10 @@
 
     case MB_INDEX_PROBE:
 	if (youattack && (mb->spe == 0 || !rn2(3 * abs(mb->spe)))) {
+/*JP
 	    pline_The("%s is insightful.", verb);
+*/
+	    pline("識別できた．");
 	    /* pre-damage status */
 	    probe_monster(mdef);
 	}
@@ -1040,7 +1094,10 @@
     if (youattack || youdefend || vis) {
 	(void) upstart(hittee);	/* capitalize */
 	if (resisted) {
+/*JP
 	    pline("%s %s!", hittee, vtense(hittee, "resist"));
+*/
+	    pline("%sは防いだ！", hittee);
 	    shieldeff(youdefend ? u.ux : mdef->mx,
 		      youdefend ? u.uy : mdef->my);
 	}
@@ -1048,11 +1105,19 @@
 	    char buf[BUFSZ];
 
 	    buf[0] = '\0';
+#if 0 /*JP:T*/
 	    if (do_stun) Strcat(buf, "stunned");
 	    if (do_stun && do_confuse) Strcat(buf, " and ");
 	    if (do_confuse) Strcat(buf, "confused");
 	    pline("%s %s %s%c", hittee, vtense(hittee, "are"),
 		  buf, (do_stun && do_confuse) ? '!' : '.');
+#else
+	    if (do_stun && do_confuse) Strcat(buf, "よろめいて");
+	    else if (do_stun) Strcat(buf, "よろめいた");
+	    if (do_confuse) Strcat(buf, "混乱した");
+	    pline("%sは%s%s", hittee,
+		  buf, (do_stun && do_confuse) ? "！" : "．");
+#endif
 	}
     }
 
@@ -1081,7 +1146,11 @@
 	    || (youattack && u.uswallow && mdef == u.ustuck && !Blind);
 	boolean realizes_damage;
 	const char *wepdesc;
+#if 0 /*JP*/
 	static const char you[] = "you";
+#else
+	static const char you[] = "あなた";
+#endif
 	char hittee[BUFSIZ];
 
 	strcpy(hittee, youdefend ? you : mon_nam(mdef));
@@ -1104,11 +1173,19 @@
 	/* the four basic attacks: fire, cold, shock and missiles */
 	if (attacks(AD_FIRE, otmp)) {
 	    if (realizes_damage)
+#if 0 /*JP*/
 		pline_The("fiery blade %s %s%c",
 			!spec_dbon_applies ? "hits" :
 			(mdef->data == &mons[PM_WATER_ELEMENTAL]) ?
 			"vaporizes part of" : "burns",
 			hittee, !spec_dbon_applies ? '.' : '!');
+#else
+		pline_The("猛火が%s%s",
+			hittee,
+			!spec_dbon_applies ? "に命中した．" :
+			(mdef->data == &mons[PM_WATER_ELEMENTAL]) ?
+			"の一部を消滅させた！" : "を焼いた！");
+#endif
 	    if (!rn2(4)) (void) destroy_mitem(mdef, POTION_CLASS, AD_FIRE);
 	    if (!rn2(4)) (void) destroy_mitem(mdef, SCROLL_CLASS, AD_FIRE);
 	    if (!rn2(7)) (void) destroy_mitem(mdef, SPBOOK_CLASS, AD_FIRE);
@@ -1117,27 +1194,45 @@
 	}
 	if (attacks(AD_COLD, otmp)) {
 	    if (realizes_damage)
+#if 0 /*JP*/
 		pline_The("ice-cold blade %s %s%c",
 			!spec_dbon_applies ? "hits" : "freezes",
 			hittee, !spec_dbon_applies ? '.' : '!');
+#else
+		pline_The("猛吹雪が%s%s",
+			hittee,
+			!spec_dbon_applies ? "に命中した．" : "を襲った！");
+#endif
 	    if (!rn2(4)) (void) destroy_mitem(mdef, POTION_CLASS, AD_COLD);
 	    return realizes_damage;
 	}
 	if (attacks(AD_ELEC, otmp)) {
 	    if (realizes_damage)
+#if 0 /*JP*/
 		pline_The("massive hammer hits%s %s%c",
 			  !spec_dbon_applies ? "" : "!  Lightning strikes",
 			  hittee, !spec_dbon_applies ? '.' : '!');
+#else
+		    pline("巨大なハンマーは%sに命中した%s", hittee,
+			  !spec_dbon_applies ? "．" : "！電撃が襲った！");
+#endif
 	    if (!rn2(5)) (void) destroy_mitem(mdef, RING_CLASS, AD_ELEC);
 	    if (!rn2(5)) (void) destroy_mitem(mdef, WAND_CLASS, AD_ELEC);
 	    return realizes_damage;
 	}
 	if (attacks(AD_MAGM, otmp)) {
 	    if (realizes_damage)
+#if 0 /*JP*/
 		pline_The("imaginary widget hits%s %s%c",
 			  !spec_dbon_applies ? "" :
 				"!  A hail of magic missiles strikes",
 			  hittee, !spec_dbon_applies ? '.' : '!');
+#else
+		pline("実体を持たない物体が%sを攻撃した%s",
+			  hittee,
+			  !spec_dbon_applies ? "．" :
+				"！魔法の矢が雨あられと命中した！");
+#endif
 	    return realizes_damage;
 	}
 
@@ -1157,13 +1252,26 @@
 	/* STEPHEN WHITE'S NEW CODE */
 	if (otmp->oartifact == ART_SERPENT_S_TONGUE) {
 	    otmp->dknown = TRUE;
+#if 0 /*JP*/
 	    pline_The("twisted blade poisons %s!",
 		    youdefend ? "you" : mon_nam(mdef));
+#else
+	    pline_The("ねじくれた刃が%sを毒に冒した！",
+		    youdefend ? "あなた" : mon_nam(mdef));
+#endif
 	    if (youdefend ? Poison_resistance : resists_poison(mdef)) {
 		if (youdefend)
+#if 0 /*JP*/
 		    You("are not affected by the poison.");
+#else
+		    You("毒の影響を受けない．");
+#endif
 		else
+#if 0 /*JP*/
 		    pline("%s seems unaffected by the poison.", Monnam(mdef));
+#else
+		    pline("%sには毒は効かないようだ．．", Monnam(mdef));
+#endif
 		return TRUE;
 	    }
 	    switch (rnd(10)) {
@@ -1183,7 +1291,11 @@
 		    *dmgptr += d(3,6) + 6;
 		    break;
 		case 10:
+#if 0 /*JP*/
 		    pline_The("poison was deadly...");
+#else
+		    pline_The("毒は致死量だった．．．");
+#endif
 		    *dmgptr = 2 *
 			    (youdefend ? Upolyd ? u.mh : u.uhp : mdef->mhp) +
 			    FATAL_DAMAGE_MODIFIER;
@@ -1194,11 +1306,20 @@
 
        if (otmp->oartifact == ART_DOOMBLADE && dieroll < 6) {
 	    if (youattack)
+#if 0 /*JP*/
 		You("plunge the Doomblade deeply into %s!",
+#else
+		You("%sを%sに深く突き刺した！", jtrns_obj('A', artilist[ART_DOOMBLADE].name),
+#endif
 			mon_nam(mdef));
 	    else
+#if 0 /*JP*/
 		pline("%s plunges the Doomblade deeply into %s!",
 			Monnam(magr), hittee);
+#else
+		pline("%sは%sを%sに深く突き刺した！",
+			Monnam(magr), jtrns_obj('A', artilist[ART_DOOMBLADE].name), hittee);
+#endif
 	    *dmgptr += rnd(4) * 5;
 	    return TRUE;
        }
@@ -1230,10 +1351,18 @@
 	/* reverse from AD&D. */
 	if (spec_ability(otmp, SPFX_BEHEAD)) {
 	    if (otmp->oartifact == ART_TSURUGI_OF_MURAMASA && dieroll < 3) {
+#if 0 /*JP*/
 		wepdesc = "The razor-sharp blade";
+#else
+		wepdesc = "斬鉄剣";
+#endif
 		/* not really beheading, but so close, why add another SPFX */
 		if (youattack && u.uswallow && mdef == u.ustuck) {
+#if 0 /*JP*/
 		    You("slice %s wide open!", mon_nam(mdef));
+#else
+		    You("%sを輪切りにした！", mon_nam(mdef));
+#endif
 		    *dmgptr = 2 * mdef->mhp + FATAL_DAMAGE_MODIFIER;
 		    return TRUE;
 		}
@@ -1244,22 +1373,38 @@
 
 			if (bigmonst(mdef->data)) {
 				if (youattack)
+#if 0 /*JP*/
 					You("slice deeply into %s!",
+#else
+					You("%sに深く斬りつけた！",
+#endif
 						mon_nam(mdef));
 				else if (vis)
+#if 0 /*JP*/
 					pline("%s cuts deeply into %s!",
+#else
+					pline("%sは%sに深く斬りつけた！",
+#endif
 					      Monnam(magr), hittee);
 				*dmgptr *= 2;
 				return TRUE;
 			}
 			*dmgptr = 2 * mdef->mhp + FATAL_DAMAGE_MODIFIER;
+#if 0 /*JP*/
 			pline("%s cuts %s in half!", wepdesc, mon_nam(mdef));
+#else
+			pline("%sが%sを真っ二つにした！", wepdesc, mon_nam(mdef));
+#endif
 			otmp->dknown = TRUE;
 			return TRUE;
 		} else {
 			/* Invulnerable player won't be bisected */
 			if (bigmonst(youmonst.data) || Invulnerable) {
+#if 0 /*JP*/
 				pline("%s cuts deeply into you!",
+#else
+				pline("%sはあなたに深く斬りつけた！",
+#endif
 				      magr ? Monnam(magr) : wepdesc);
 				*dmgptr *= 2;
 				return TRUE;
@@ -1271,33 +1416,58 @@
 			 * damage does not prevent death.
 			 */
 			*dmgptr = 2 * (Upolyd ? u.mh : u.uhp) + FATAL_DAMAGE_MODIFIER;
+#if 0 /*JP*/
 			pline("%s cuts you in half!", wepdesc);
+#else
+			pline("%sがあなたを真っ二つにした！", wepdesc);
+#endif
 			otmp->dknown = TRUE;
 			return TRUE;
 		}
 	    } else if (dieroll < 3 || otmp->oartifact == ART_VORPAL_BLADE &&
 				      mdef->data == &mons[PM_JABBERWOCK]) {
 		static const char * const behead_msg[2] = {
+#if 0 /*JP*/
 		     "%s beheads %s!",
 		     "%s decapitates %s!"
+#else
+		     "%sは%sの首を切った！",
+		     "%sは%sの首を切り落した！"
+#endif
 		};
 
 		if (youattack && u.uswallow && mdef == u.ustuck)
 			return FALSE;
+#if 0 /*JP*/
 		wepdesc = artilist[otmp->oartifact].name;
+#else
+		wepdesc = jtrns_obj('A', artilist[ART_VORPAL_BLADE].name);
+#endif
 		if (!youdefend) {
 			if (!has_head(mdef->data) || notonhead || u.uswallow) {
 				if (youattack)
+#if 0 /*JP*/
 					pline("Somehow, you miss %s wildly.",
+#else
+					pline("なぜか，%sへの攻撃は大きくはずれた．",
+#endif
 						mon_nam(mdef));
 				else if (vis)
+#if 0 /*JP*/
 					pline("Somehow, %s misses wildly.",
+#else
+					pline("なぜか，%sの攻撃は大きくはずれた．",
+#endif
 						mon_nam(magr));
 				*dmgptr = 0;
 				return ((boolean)(youattack || vis));
 			}
 			if (noncorporeal(mdef->data) || amorphous(mdef->data)) {
+#if 0 /*JP*/
 				pline("%s slices through %s %s.", wepdesc,
+#else
+				pline("%sは%sの%sを切り落した．", wepdesc,
+#endif
 				      s_suffix(mon_nam(mdef)),
 				      mbodypart(mdef,NECK));
 				return TRUE;
@@ -1309,25 +1479,41 @@
 			return TRUE;
 		} else {
 			if (!has_head(youmonst.data)) {
+#if 0 /*JP*/
 				pline("Somehow, %s misses you wildly.",
+#else
+				pline("なぜか，%sの攻撃は大きくはずれた．",
+#endif
 				      magr ? mon_nam(magr) : wepdesc);
 				*dmgptr = 0;
 				return TRUE;
 			}
 			if (noncorporeal(youmonst.data) || amorphous(youmonst.data)) {
+#if 0 /*JP*/
 				pline("%s slices through your %s.",
+#else
+				pline("%sはあなたの%sを切り落した．",
+#endif
 				      wepdesc, body_part(NECK));
 				return TRUE;
 			}
 			*dmgptr = 2 * (Upolyd ? u.mh : u.uhp)
 				  + FATAL_DAMAGE_MODIFIER;
 			if (Invulnerable) {
+#if 0 /*JP*/
 				pline("%s slices into your %s.",
+#else
+				pline("%sはあなたの%sに切り込んだ．",
+#endif
 				      wepdesc, body_part(NECK));
 				return TRUE;
 			}
 			pline(behead_msg[rn2(SIZE(behead_msg))],
+#if 0 /*JP*/
 			      wepdesc, "you");
+#else
+			      wepdesc, "あなた");
+#endif
 			otmp->dknown = TRUE;
 			/* Should amulets fall off? */
 			return TRUE;
@@ -1338,7 +1524,11 @@
 		if (!youdefend && !resists_drli(mdef)) {
 			if (vis) {
 			    if(otmp->oartifact == ART_STORMBRINGER)
+#if 0 /*JP*/
 				pline_The("%s blade draws the life from %s!",
+#else
+				pline_The("%s刃が%sの生命力を奪った！",
+#endif
 				      hcolor(NH_BLACK),
 				      mon_nam(mdef));
 #if 0	/* OBSOLETE */
@@ -1347,7 +1537,11 @@
 				      mon_nam(mdef));
 #endif
 			    else
+#if 0 /*JP*/
 				pline("%s draws the life from %s!",
+#else
+				pline("%sは%sの生命力を奪った！",
+#endif
 				      The(distant_name(otmp, xname)),
 				      mon_nam(mdef));
 			}
@@ -1366,16 +1560,34 @@
 			int oldhpmax = u.uhpmax;
 
 			if (Blind)
+#if 0 /*JP*/
 				You_feel("an %s drain your life!",
 				    otmp->oartifact == ART_STORMBRINGER ?
 				    "unholy blade" : "object");
+#else
+				pline("%sに生命力を奪われたような気がした！",
+				    otmp->oartifact == ART_STORMBRINGER ?
+				    "不浄な刃" : "何か");
+#endif
 			else if (otmp->oartifact == ART_STORMBRINGER)
+#if 0 /*JP*/
 				pline_The("%s blade drains your life!",
+#else
+				pline("%s刃があなたの生命力を奪った！",
+#endif
 				      hcolor(NH_BLACK));
 			else
+#if 0 /*JP*/
 				pline("%s drains your life!",
+#else
+				pline("%sがあなたの生命力を奪った！",
+#endif
 				      The(distant_name(otmp, xname)));
+#if 0 /*JP*/
 			losexp("life drainage", FALSE);
+#else
+			losexp("生命力を吸収されて", FALSE);
+#endif
 			if (magr && magr->mhp < magr->mhpmax) {
 			    magr->mhp += (oldhpmax - u.uhpmax)/2;
 			    if (magr->mhp > magr->mhpmax) magr->mhp = magr->mhpmax;
@@ -1399,11 +1611,22 @@
 
 		if (weap && spec_applies(weap, mdef) && (dieroll < 4)) {
 			if (realizes_damage) {
+#if 0 /*JP*/
 				pline("%s %s!", The(distant_name(otmp, xname)),
 						(Blind ? "roars deafeningly" : 
 							 "shines brilliantly"));
+#else
+				pline("%sは%s！", The(distant_name(otmp, xname)),
+						(Blind ? "耳を聾せんばかりの音をたてた" : 
+							 "光り輝いた"));
+#endif
+#if 0 /*JP*/
 				pline("It strikes %s!", 
 					(youdefend ? "you" : mon_nam(mdef)));
+#else
+				pline("それは%sに直撃した！", 
+					(youdefend ? "あなた" : mon_nam(mdef)));
+#endif
 			}
 			cancel_monst(mdef, otmp, youattack, TRUE, (magr == mdef));
 			return TRUE;
@@ -1421,7 +1644,10 @@
 {
     register struct obj *obj;
 
+/*JP
     obj = getobj(invoke_types, "invoke");
+*/
+    obj = getobj(invoke_types, "の魔力を使う");
     if (!obj) return 0;
     if (obj->oartifact && !touch_artifact(obj, &youmonst)) return 1;
     return arti_invoke(obj);
@@ -1454,8 +1680,12 @@
 	/* It's a special power, not "just" a property */
 	if(obj->age > monstermoves) {
 	    /* the artifact is tired :-) */
+#if 0 /*JP:T*/
 	    You_feel("that %s %s ignoring you.",
 		     the(xname(obj)), otense(obj, "are"));
+#else
+	    You_feel("%sが無視しているように感じた．", xname(obj));
+#endif
 	    /* and just got more so; patience is essential... */
 	    obj->age += (long) d(3,10);
 	    return 1;
@@ -1477,7 +1707,10 @@
 
 	    if (Upolyd) healamt = (u.mhmax + 1 - u.mh) / 2;
 	    if (healamt || Sick || Slimed || Blinded > creamed)
+/*JP
 		You_feel("better.");
+*/
+		You_feel("気分がよくなった．");
 	    else
 		goto nothing_special;
 	    if (healamt > 0) {
@@ -1495,7 +1728,10 @@
 	    if (epboost > 120) epboost = 120;		/* arbitrary */
 	    else if (epboost < 12) epboost = u.uenmax - u.uen;
 	    if(epboost) {
+/*JP
 		You_feel("re-energized.");
+*/
+		You("エネルギーが満たされた．");
 		u.uen += epboost;
 		flags.botl = 1;
 	    } else
@@ -1510,7 +1746,10 @@
 	    break;
 	  }
 	case CHARGE_OBJ: {
+/*JP
 	    struct obj *otmp = getobj(recharge_type, "charge");
+*/
+	    struct obj *otmp = getobj(recharge_type, "充填する");
 	    boolean b_effect;
 
 	    if (!otmp) {
@@ -1529,9 +1768,15 @@
 	/* STEPHEN WHITE'S NEW CODE */       
 	case LIGHT_AREA:
 	    if (!Blind)
+/*JP
 			pline("%s shines brightly for an instant!", The(xname(obj)));
+*/
+			pline("%sが瞬時に明るく輝いた！", The(xname(obj)));
 	    else
+/*JP
 			pline("%s grows warm for a second!", The(xname(obj)));
+*/
+			pline("%sが一時的に暖かくなった！", The(xname(obj)));
 
 	    litroom(TRUE, obj); /* Light up the room */
 
@@ -1539,7 +1784,10 @@
 
 		/* WAC - added effect to self, damage is now range dependant */
 		if(is_undead(youmonst.data)) {
+/*JP
 			You("burn in the radiance!");
+*/
+			You("輝きの中で焼け焦げた！");
 			
 			/* This is ground zero.  Not good news ... */
 			u.uhp /= 100;
@@ -1547,7 +1795,10 @@
 			if (u.uhp < 1) {
 				u.uhp = 0;
 				killer_format = KILLED_BY;
+/*JP
 				killer = "the Holy Spear of Light";
+*/
+				killer = "光の聖槍によって";
 				done(DIED);
 			}
 		}
@@ -1564,7 +1815,10 @@
 				(is_undead(mtmp->data) || is_demon(mtmp->data)) &&
 				!resist(mtmp, '\0', 0, TELL)) {
 					if (canseemon(mtmp))
+/*JP
 						pline("%s burns in the radiance!", Monnam(mtmp));
+*/
+						pline("%sは輝きの中で焼け焦げた！", Monnam(mtmp));
 					else
 						unseen++;
 					/* damage now depends on distance, divisor ranges from 10 to 2 */
@@ -1573,22 +1827,36 @@
 			}
 	    }
 	    if (unseen)
+/*JP
 			You("hear %s of intense pain!", unseen > 1 ? "cries" : "a cry");
+*/
+			You("激痛を訴える%s叫びを聞いた！", unseen > 1 ? "複数の" : "");
 	    break;
 	case DEATH_GAZE:
 	    if (u.uluck < -9) { /* uh oh... */
+/*JP
 			pline("The Eye turns on you!");
+*/
+			pline("『目』はあなたを見返した！");
 			u.uhp = 0;
 			killer_format = KILLED_BY;
-			killer = "the Eye of the Beholder";
+/*JP
+			killer = "ビホルダーの目によって";
+*/
 			done(DIED);
 	    }
+/*JP
 	    pline("The Eye looks around with its icy gaze!");
+*/
+	    pline("『目』はあたりに冷たい視線を投げかけた！");
 		for (mtmp = fmon; mtmp; mtmp = mtmp2) {
 			mtmp2 = mtmp->nmon;
 			/* The eye is never blind ... */
 			if (couldsee(mtmp->mx, mtmp->my) && !is_undead(mtmp->data)) {
+/*JP
 				pline("%s screams in agony!",Monnam(mtmp));
+*/
+				pline("%sは苦痛の金切り声を上げた！",Monnam(mtmp));
 				mtmp->mhp /= 3;
 				if (mtmp->mhp < 1) mtmp->mhp = 1;
 			}
@@ -1600,15 +1868,24 @@
 	case SUMMON_UNDEAD:
 	    if (u.uluck < -9) { /* uh oh... */
 		u.uhp -= (rn2(20)+5);
+/*JP
 		pline("The Hand claws you with its icy nails!");
+*/
+		pline("『手』の冷たい爪があなたを引っかいた！");
 		if (u.uhp <= 0) {
 		  killer_format = KILLED_BY;
+/*JP
 		  killer="the Hand of Vecna";
+*/
+		  killer="ヴェクナの手によって";
 		  done(DIED);
 		}
 	    }
 	    summon_loop = rn2(4) + 4;
+/*JP
 	    pline("Creatures from the grave surround you!");
+*/
+	    pline("あなたの周りを墓から蘇った怪物どもが取り囲んだ！");
 	    do {
 	      switch (rn2(6)+1) {
 		case 1: mtmp = makemon(mkclass(S_VAMPIRE,0), u.ux, u.uy, NO_MM_FLAGS);
@@ -1633,14 +1910,20 @@
 	    u.uluck -= 3;
 	    break;
 	case PROT_POLY:
+/*JP
 	    You("feel more observant.");
+*/
+	    You("もっと慎重深く行動する必要があると感じた．");
 	    rescham();
 	    break;
 	case SUMMON_FIRE_ELEMENTAL:
 	    pm = &mons[PM_FIRE_ELEMENTAL];
 	    mtmp = makemon(pm, u.ux, u.uy, NO_MM_FLAGS);
    
+/*JP
 	    pline("You summon an elemental.");
+*/
+	    You("精霊を召喚した．");
    
 	    if ((mtmp2 = tamedog(mtmp, (struct obj *)0)) != 0)
 			mtmp = mtmp2;
@@ -1650,7 +1933,10 @@
 	    pm = &mons[PM_WATER_ELEMENTAL];
 	    mtmp = makemon(pm, u.ux, u.uy, NO_MM_FLAGS);
    
+/*JP
 	    pline("You summon an elemental.");
+*/
+	    You("精霊を召喚した．");
 	    
 	    if ((mtmp2 = tamedog(mtmp, (struct obj *)0)) != 0)
 			mtmp = mtmp2;
@@ -1669,7 +1955,10 @@
 	    any.a_void = 0;	/* set all bits to zero */
  #ifdef BLACKMARKET           
 	    if (Is_blackmarket(&u.uz) && *u.ushops) {
+/*JP
 		You("feel very disoriented for a moment.");
+*/
+		You("一瞬方向感覚を失った．");
 		break;
 	    }
  #endif
@@ -1679,11 +1968,17 @@
 		if (!dungeons[i].dunlev_ureached) continue;
 		any.a_int = i+1;
 		add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE,
+/*JP
 			 dungeons[i].dname, MENU_UNSELECTED);
+*/
+			 jtrns_obj('d', dungeons[i].dname), MENU_UNSELECTED);
 		num_ok_dungeons++;
 		last_ok_dungeon = i;
 	    }
+/*JP
 	    end_menu(tmpwin, "Open a portal to which dungeon?");
+*/
+	    end_menu(tmpwin, "どの迷宮への魔法の入口を開きますか？");
 	    if (num_ok_dungeons > 1) {
 		/* more than one entry; display menu for choices */
 		menu_item *selected;
@@ -1713,10 +2008,19 @@
 		newlev.dlevel = dungeons[i].dunlev_ureached;
 	    if(u.uhave.amulet || In_endgame(&u.uz) || In_endgame(&newlev) ||
 	       newlev.dnum == u.uz.dnum) {
+/*JP
 		You_feel("very disoriented for a moment.");
+*/
+		You("一瞬方向感覚を失った．");
 	    } else {
+/*JP
 		if(!Blind) You("are surrounded by a shimmering sphere!");
+*/
+		if(!Blind) You("チカチカ光る球体に覆われた！");
+/*JP
 		else You_feel("weightless for a moment.");
+*/
+		else You_feel("一瞬，無重力感を感じた！");
 		goto_level(&newlev, FALSE, FALSE, FALSE);
 	    }
 	    break;
@@ -1739,8 +2043,13 @@
 	    } else
 		otmp->quan += rnd(5);
 	    otmp->owt = weight(otmp);
+#if 0 /*JP*/
 	    otmp = hold_another_object(otmp, "Suddenly %s out.",
 				       aobjnam(otmp, "fall"), (const char *)0);
+#else
+	    otmp = hold_another_object(otmp, "突然%sが落ちた．",
+				       xname(otmp), 0);
+#endif
 	    break;
 	  }
 	}
@@ -1752,8 +2061,12 @@
 	if(on && obj->age > monstermoves) {
 	    /* the artifact is tired :-) */
 	    u.uprops[oart->inv_prop].extrinsic ^= W_ARTI;
+#if 0 /*JP:T*/
 	    You_feel("that %s %s ignoring you.",
 		     the(xname(obj)), otense(obj, "are"));
+#else
+	    You_feel("%sが無視しているように感じた．", xname(obj));
+#endif
 	    /* can't just keep repeatedly trying */
 	    obj->age += (long) d(3,10);
 	    return 1;
@@ -1767,13 +2080,22 @@
 nothing_special:
 	    /* you had the property from some other source too */
 	    if (carried(obj))
+/*JP
 		You_feel("a surge of power, but nothing seems to happen.");
+*/
+		You("力が渦巻いたような気がした，しかし何も起きなかった．");
 	    return 1;
 	}
 	switch(oart->inv_prop) {
 	case CONFLICT:
+/*JP
 	    if(on) You_feel("like a rabble-rouser.");
+*/
+	    if(on) You("民衆扇動家のような気がした．");
+/*JP
 	    else You_feel("the tension decrease around you.");
+*/
+	    else pline("まわりの緊張感がなくなったような気がした．");
 	    break;
 	case LEVITATION:
 	    if(on) {
@@ -1785,10 +2107,19 @@
 	    if (BInvis || Blind) goto nothing_special;
 	    newsym(u.ux, u.uy);
 	    if (on)
+#if 0 /*JP*/
 		    Your("body takes on a %s transparency...",
 			 Hallucination ? "normal" : "strange");
+#else
+		    pline("%s，体は透過性をもった．．．",
+			  Hallucination ? "あたりまえのことだが" : "奇妙なことに");
+#endif
 	    else
+#if 0 /*JP*/
 		    Your("body seems to unfade...");
+#else
+		    Your("体は次第に見えるようになってきた．．．");
+#endif
 	    break;
 	}
     }
@@ -1815,25 +2146,44 @@
 	 switch (artilist[(int) (obj)->oartifact].attk.adtyp) {
 		 case AD_FIRE:
 			 if (!silent) {
+#if 0 /*JP*/
 				pline("A cloud of steam rises.");
 				pline("%s is untouched.", The(xname(obj)));
+#else
+				pline("蒸気の雲が湧き上がった．");
+				pline("%sは熱くて触れない．", The(xname(obj)));
+#endif
 			 }
 			 return (AD_FIRE);
 		 case AD_COLD:
 			 if (!silent) {
+#if 0 /*JP*/
 				pline("Icicles form and fall from the freezing %s.",
 			             the(xname(obj)));
+#else
+				pline("凍りついた%sからつららができて落ちた．",
+			             the(xname(obj)));
+#endif
 			 }
 			 return (AD_COLD);
 		 case AD_ELEC:
 			 if (!silent) {
+#if 0 /*JP*/
 				pline_The("humid air crackles with electricity from %s.",
 						the(xname(obj)));
+#else
+				pline("湿気を含んだ大気は%sの放電で満たされた．",
+						the(xname(obj)));
+#endif
 			 }
 			 return (AD_ELEC);
 		 case AD_DRLI:
 			 if (!silent) {
+#if 0 /*JP*/
 				pline("%s absorbs the water!", The(xname(obj)));
+#else
+				pline("%sは水を吸収した！", The(xname(obj)));
+#endif
 			 }
 			 return (AD_DRLI);
 		 default:
@@ -1867,8 +2217,13 @@
 
 	line = getrumor(bcsign(obj), buf, TRUE);
 	if (!*line)
+#if 0 /*JP*/
 		line = "Slash'EM rumors file closed for renovation.";
 	pline("%s:", Tobjnam(obj, "whisper"));
+#else
+		line = "噂の真相は新装のため一時閉店．";
+	pline("%sはささやいた：", xname(obj));
+#endif
 	verbalize("%s", line);
 	return;
 }
diff -aurN slashem-0.0.7E6F2/src/attrib.c jslashem-0.0.7E6F2-J0.0.8/src/attrib.c
--- slashem-0.0.7E6F2/src/attrib.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/attrib.c	2004-06-27 16:52:06.000000000 +0900
@@ -2,6 +2,15 @@
 /*	Copyright 1988, 1989, 1990, 1992, M. Stephenson		  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+
 /*  attribute modification routines. */
 
 #include "hack.h"
@@ -13,10 +22,16 @@
 	/* part of the output on gain or loss of attribute */
 static
 const char	* const plusattr[] = {
+/*JP
 	"strong", "smart", "wise", "agile", "tough", "charismatic"
+*/
+	"強い","賢明だ","賢い","機敏だ","頑丈だ","魅力的だ"
 },
 		* const minusattr[] = {
+/*JP
 	"weak", "stupid", "foolish", "clumsy", "fragile", "repulsive"
+*/
+	"弱い","愚かだ","間抜けだ","不器用だ","ひ弱だ","醜い"
 };
 
 
@@ -28,102 +43,192 @@
 	const char *gainstr, *losestr;
 }	arc_abil[] = { {	 1, &(HStealth), "", "" },
 		     {   1, &(HFast), "", "" },
+#if 0 /*JP*/
 		     {  10, &(HSearching), "perceptive", "" },
+#else
+		     {  10, &(HSearching), "知覚力を得た", "知覚力を失った" },
 		     {	 0, 0, 0, 0 } },
+#endif
 
 	bar_abil[] = { {	 1, &(HPoison_resistance), "", "" },
+#if 0 /*JP*/
 		     {   7, &(HFast), "quick", "slow" },
 		     {  15, &(HStealth), "stealthy", "" },
+#else
+		     {   7, &(HFast), "素早さを得た", "遅くなった" },
+		     {  15, &(HStealth), "人目を盗む力を得た", "人目を盗む力を失った" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
+#if 0 /*JP*/
 	cav_abil[] = { {	 7, &(HFast), "quick", "slow" },
 		     {	15, &(HWarning), "sensitive", "" },
+#else
+	cav_abil[] = { {	 7, &(HFast), "素早さを得た", "遅くなった" },
+		     {	15, &(HWarning), "敏感になった", "鈍感になった" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	fla_abil[] = { {   1, &(HFire_resistance), "", "" },
+#if 0 /*JP*/
 		     {  13, &(HCold_resistance), "warm", "cooler" },
+#else
+		     {  13, &(HCold_resistance), "暖かくなった", "冷たくなった"},
+#endif
 		     {   0, 0, 0, 0 } },
 
 	hea_abil[] = { {	 1, &(HPoison_resistance), "", "" },
+#if 0 /*JP*/
 		     {	15, &(HWarning), "sensitive", "" },
+#else
+		     {	15, &(HWarning), "敏感になった", "鈍感になった" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	ice_abil[] = { {   1, &(HCold_resistance), "", "" },
+#if 0 /*JP*/
 		     {  13, &(HFire_resistance), "cool", "warmer" },
+#else
+		     {  13, &(HFire_resistance), "冷たくなった", "暖かくなった" },
+#endif
 		     {   0, 0, 0, 0 } },
 
+#if 0 /*JP*/
 	kni_abil[] = { {	 7, &(HFast), "quick", "slow" },
+#else
+	kni_abil[] = { {	 7, &(HFast), "素早さを得た", "遅くなった" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	mon_abil[] = { {   1, &(HFast), "", "" },
 		     {   1, &(HSleep_resistance), "", "" },
 		     {   1, &(HSee_invisible), "", "" },
+#if 0 /*JP*/
 		     {   3, &(HPoison_resistance), "healthy", "" },
 		     {   5, &(HStealth), "stealthy", "" },
 		     {   7, &(HWarning), "sensitive", "" },
 		     {   9, &(HSearching), "perceptive", "unaware" },
+#else
+		     {   3, &(HPoison_resistance), "健康になった", "不健康になった" },
+		     {   5, &(HStealth), "人目を盗む力を得た", "人目を盗む力を失った" },
+		     {   7, &(HWarning), "敏感になった", "鈍感になった" },
+		     {   9, &(HSearching), "知覚力を得た", "知覚力を失った" },
+#endif
 #if 0
 		     {  11, &(HFire_resistance), "cool", "warmer" },
 		     {  13, &(HCold_resistance), "warm", "cooler" },
 		     {  15, &(HShock_resistance), "insulated", "conductive" },
 		     /* WAC -- made the above three attribs techs */
 #endif
+#if 0 /*JP*/
 		     {  17, &(HTeleport_control), "controlled","uncontrolled" },
+#else
+		     {  17, &(HTeleport_control), "制御力を得た","制御力を失った" },
+#endif
 		     {   0, 0, 0, 0 } },
 
 	nec_abil[] = { {   1, &(HDrain_resistance), "", "" },
 		     {   1, &(HSick_resistance), "", "" },
+#if 0 /*JP*/
 		     {   3, &(HUndead_warning), "sensitive", "" },
+#else
+		     {   3, &(HUndead_warning), "敏感になった", "鈍感になった" },
+#endif
 		     {   0, 0, 0, 0 } },
 
+#if 0 /*JP*/
 	pri_abil[] = { {	15, &(HWarning), "sensitive", "" },
 		     {  20, &(HFire_resistance), "cool", "warmer" },
+#else
+	pri_abil[] = { {	15, &(HWarning), "敏感になった", "鈍感になった" },
+		     {  20, &(HFire_resistance), "冷たくなった", "暖かくなった" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	ran_abil[] = { {   1, &(HSearching), "", "" },
+#if 0 /*JP*/
 		     {	 7, &(HStealth), "stealthy", "" },
+#else
+		     {	 7, &(HStealth), "人目を盗む力を得た", "人目を盗む力を失った" },
+#endif
 		     {	15, &(HSee_invisible), "", "" },
 		     {	 0, 0, 0, 0 } },
 
 	rog_abil[] = { {	 1, &(HStealth), "", ""  },
+#if 0 /*JP*/
 		     {  10, &(HSearching), "perceptive", "" },
+#else
+		     {  10, &(HSearching), "知覚力を得た", "知覚力を失った" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	sam_abil[] = { {	 1, &(HFast), "", "" },
+#if 0 /*JP*/
 		     {  15, &(HStealth), "stealthy", "" },
+#else
+		     {  15, &(HStealth), "人目を盗む力を得た", "人目を盗む力を失った" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
+#if 0 /*JP*/
 	tou_abil[] = { {	10, &(HSearching), "perceptive", "" },
 		     {	20, &(HPoison_resistance), "hardy", "" },
+#else
+	tou_abil[] = { {	10, &(HSearching), "知覚力を得た", "知覚力を失った" },
+		     {	20, &(HPoison_resistance), "免疫力を得た", "免疫力を失った" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	und_abil[] = { {   1, &(HStealth), "", "" },
 		     {   1, &(HDrain_resistance), "", "" },
 		     {   1, &(HSick_resistance), "", "" },
 		     {   1, &(HUndead_warning), "", "" },
+#if 0 /*JP*/
 		     {   7, &(HFast), "quick", "slow" },
 		     {   9, &(HPoison_resistance), "hardy", "less healthy" },
+#else
+		     {   7, &(HFast), "素早さを得た", "遅くなった" },
+		     {   9, &(HPoison_resistance), "免疫力を得た", "免疫力を失った" },
+#endif
 		     {   0, 0, 0, 0 } },
 
 	val_abil[] = { {	 1, &(HCold_resistance), "", "" },
 		     {	 1, &(HStealth), "", "" },
+#if 0 /*JP*/
 		     {   7, &(HFast), "quick", "slow" },
+#else
+		     {   7, &(HFast),  "素早さを得た", "遅くなった" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 #ifdef YEOMAN
 	yeo_abil[] = {
+#if 0 /*JP*/
 		     {   7, &(HFast), "quick", "slow" },
 		     {  15, &(HSwimming), "ready to swim","afraid of the water" },
+#else
+		     {   7, &(HFast),  "素早さを得た", "遅くなった" },
+		     {  15, &(HSwimming), "泳げるようになった","水が怖くなった" },
+#endif
 		     {   0, 0, 0, 0 } },
 #endif
 
+#if 0 /*JP*/
 	wiz_abil[] = { {	15, &(HWarning), "sensitive", "" },
 		     {  17, &(HTeleport_control), "controlled","uncontrolled" },
+#else
+	wiz_abil[] = { {	15, &(HWarning), "知覚力を得た", "知覚力を失った" },
+		     {  17, &(HTeleport_control), "制御力を得た","制御力を失った" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
 	/* Intrinsics conferred by race */
 	dop_abil[] = {/* {   1, &(HPolymorph), "", "" },*/
+#if 0 /*JP*/
 		       {   9, &(HPolymorph_control), "your choices improve", "choiceless" },
+#else
+		       {   9, &(HPolymorph_control), "姿を選べるようになった", "選べなくなった" },
+#endif
 		       {   0, 0, 0, 0 } },
 
 #ifdef DWARF
@@ -132,16 +237,28 @@
 			{   0, 0, 0, 0 } },
 #endif
 
+#if 0 /*JP*/
 	elf_abil[] = { {	4, &(HSleep_resistance), "awake", "tired" },
+#else
+	elf_abil[] = { {	4, &(HSleep_resistance), "目が覚めた", "眠くなった" },
+#endif
 		     {	 0, 0, 0, 0 } },
 
+#if 0 /*JP*/
 	gno_abil[] = { {   5, &(HStealth), "stealthy", "" },
+#else
+	gno_abil[] = { {   5, &(HStealth), "人目を盗む力を得た", "人目を盗む力を失った" },
+#endif
 /*		     {   9, &(HFast), "quick", "slow" },
 		     {   11, &(HSearching), "perceptive", "unaware" },*/
 		     {   0, 0, 0, 0 } },
 
 	hob_abil[] = { {  1, &(HStealth), "", "" },
+#if 0 /*JP*/
 		     {   7, &(HFast), "quick", "slow" },
+#else
+		     {   7, &(HFast), "素早さを得た", "遅くなった" },
+#endif
 		     {   0, 0, 0, 0 } },
 
 
@@ -169,14 +286,20 @@
 	if ((ndx == A_INT || ndx == A_WIS)
 				&& uarmh && uarmh->otyp == DUNCE_CAP) {
 		if (msgflg == 0)
+/*JP
 		    Your("cap constricts briefly, then relaxes again.");
+*/
+		    Your("帽子がしばらくの間キュっと締めつけ，そしてゆるんだ．");
 		return FALSE;
 	}
 
 	if (incr > 0) {
 	    if ((AMAX(ndx) >= ATTRMAX(ndx)) && (ACURR(ndx) >= AMAX(ndx))) {
 		if (msgflg == 0 && flags.verbose)
+/*JP
 		    pline("You're already as %s as you can get.",
+*/
+		    You("もう十分に%s．",
 			  plusattr[ndx]);
 		ABASE(ndx) = AMAX(ndx) = ATTRMAX(ndx); /* just in case */
 		return FALSE;
@@ -193,7 +316,10 @@
 	} else {
 	    if (ABASE(ndx) <= ATTRMIN(ndx)) {
 		if (msgflg == 0 && flags.verbose)
+/*JP
 		    pline("You're already as %s as you can get.",
+*/
+		    You("もう十分%s．",
 			  minusattr[ndx]);
 		ABASE(ndx) = ATTRMIN(ndx); /* just in case */
 		return FALSE;
@@ -209,9 +335,15 @@
 	    }
 	}
 	if (msgflg <= 0)
+#if 0 /*JP*/
 	    You_feel("%s%s!",
 		  (incr > 1 || incr < -1) ? "very ": "",
 		  (incr > 0) ? plusattr[ndx] : minusattr[ndx]);
+#else
+	    You("%s%sなったような気がした！",
+		  (incr > 1 || incr < -1) ? "とても ": "",
+		  jconj_adj((incr > 0) ? plusattr[ndx] : minusattr[ndx]));
+#endif
 	flags.botl = 1;
 	if (msgflg <= 1 && moves > 1 && (ndx == A_STR || ndx == A_CON))
 		(void)encumber_msg();
@@ -499,20 +631,40 @@
 		    /* then print an explanation */
 		    switch(i) {
 		    case A_STR: You((mod_val >0) ?
+#if 0 /*JP*/
 				    "must have been exercising." :
 				    "must have been abusing your body.");
+#else
+				    "運動したに違いない．" :
+				    "体を酷使したに違いない．");
+#endif
 				break;
 		    case A_WIS: You((mod_val >0) ?
+#if 0 /*JP*/
 				    "must have been very observant." :
 				    "haven't been paying attention.");
+#else
+				    "慎重に行動してたに違いない．" :
+				    "注意不足だったに違いない．");
+#endif
 				break;
 		    case A_DEX: You((mod_val >0) ?
+#if 0 /*JP*/
 				    "must have been working on your reflexes." :
 				    "haven't been working on reflexes lately.");
+#else
+				    "反射神経を使ったに違いない．" :
+				    "最近反射神経を使ってなかったに違いない．");
+#endif
 				break;
 		    case A_CON: You((mod_val >0) ?
+#if 0 /*JP*/
 				    "must be leading a healthy life-style." :
 				    "haven't been watching your health.");
+#else
+				    "健康的な生活をしていたに違いない．" :
+				    "健康管理を怠っていたに違いない．");
+#endif
 				break;
 		    }
 		}
@@ -684,13 +836,22 @@
 				*(abil->ability) |= mask;
 			if(!(*(abil->ability) & INTRINSIC & ~mask)) {
 			    if(*(abil->gainstr))
+/*JP
 				You_feel("%s!", abil->gainstr);
+*/
+				You("%sような気がした！", abil->gainstr);
 			}
 		} else if (oldlevel >= abil->ulevel && newlevel < abil->ulevel) {
 			*(abil->ability) &= ~mask;
 			if(!(*(abil->ability) & INTRINSIC)) {
 			    if(*(abil->losestr))
+/*JP
 				You_feel("%s!", abil->losestr);
+*/
+				You("%sような気がした！", abil->losestr);
+/*JP 
+**	この条件は満さないはず．
+*/
 			    else if(*(abil->gainstr))
 				You_feel("less %s!", abil->gainstr);
 			}
diff -aurN slashem-0.0.7E6F2/src/ball.c jslashem-0.0.7E6F2-J0.0.8/src/ball.c
--- slashem-0.0.7E6F2/src/ball.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/ball.c	2004-06-27 16:52:08.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* Ball & Chain =============================================================*/
 
 #include "hack.h"
@@ -23,7 +31,10 @@
 	gets_hit = (((uball->ox != u.ux) || (uball->oy != u.uy)) &&
 		    ((uwep == uball)? FALSE : (boolean)rn2(5)));
 	if (carried(uball)) {
+/*JP
 		pline("Startled, you drop the iron ball.");
+*/
+		pline("驚いてあなたは鉄球を落した．");
 		if (uwep == uball)
 			setuwep((struct obj *)0, FALSE);
 		if (uswapwep == uball)
@@ -35,17 +46,31 @@
 	}
 	if(gets_hit){
 		int dmg = rn1(7,25);
+/*JP
 		pline_The("iron ball falls on your %s.",
+*/
+		pline("鉄球はあなたの%sの上に落ちた．",
 			body_part(HEAD));
 		if (uarmh) {
 		    if(is_metallic(uarmh)) {
+/*JP
 			pline("Fortunately, you are wearing a hard helmet.");
+*/
+			pline("幸運にも，あなたは固い兜を身につけていた．");
 			dmg = 3;
 		    } else if (flags.verbose)
+/*JP
 			Your("%s does not protect you.", xname(uarmh));
+*/
+			Your("%sでは守れない．", xname(uarmh));
 		}
+#if 0 /*JP*/
 		losehp(dmg, "crunched in the head by an iron ball",
 			NO_KILLER_PREFIX);
+#else
+		losehp(dmg, "鉄球で頭を打って",
+			KILLED_BY);
+#endif
 	}
 }
 
@@ -561,8 +586,13 @@
 drag:
 
 	if (near_capacity() > SLT_ENCUMBER && dist2(x, y, u.ux, u.uy) <= 2) {
+#if 0 /*JP*/
 	    You("cannot %sdrag the heavy iron ball.",
 			    invent ? "carry all that and also " : "");
+#else
+	    You("%s重い鉄球をひきずることができない．",
+			    invent ? "それだけの荷物を持ったまま" : "");
+#endif
 	    nomul(0);
 	    return FALSE;
 	}
@@ -579,12 +609,18 @@
 			 t->ttyp == TRAPDOOR)) ) {
 
 	    if (Levitation) {
+/*JP
 		You_feel("a tug from the iron ball.");
+*/
+		You("鉄球に引っぱられた．");
 		if (t) t->tseen = 1;
 	    } else {
 		struct monst *victim;
 
+/*JP
 		You("are jerked back by the iron ball!");
+*/
+		You("鉄球にぐいと引っぱられた！");
 		if ((victim = m_at(uchain->ox, uchain->oy)) != 0) {
 		    int tmp;
 
@@ -657,33 +693,60 @@
 
     if (x != u.ux || y != u.uy) {
 	struct trap *t;
+/*JP
 	const char *pullmsg = "The ball pulls you out of the %s!";
+*/
+	const char *pullmsg = "鉄球は%sからあなたを引っぱり出した！";
 
 	if (u.utrap && u.utraptype != TT_INFLOOR) {
 	    switch(u.utraptype) {
 	    case TT_PIT:
+/*JP
 		pline(pullmsg, "pit");
+*/
+		pline(pullmsg, "落し穴");
 		break;
 	    case TT_WEB:
+/*JP
 		pline(pullmsg, "web");
+*/
+		pline(pullmsg, "くもの巣");
+/*JP
 		pline_The("web is destroyed!");
+*/
+		pline("くもの巣はこわれた！");
 		deltrap(t_at(u.ux,u.uy));
 		break;
 	    case TT_LAVA:
+/*JP
 		pline(pullmsg, "lava");
+*/
+		pline(pullmsg, "溶岩");
 		break;
 	    case TT_BEARTRAP: {
 		register long side = rn2(3) ? LEFT_SIDE : RIGHT_SIDE;
+/*JP
 		pline(pullmsg, "bear trap");
+*/
+		pline(pullmsg, "熊の罠");
 		set_wounded_legs(side, rn1(1000, 500));
 #ifdef STEED
 		if (!u.usteed)
 #endif
 		{
+#if 0 /*JP*/
 		    Your("%s %s is severely damaged.",
 					(side == LEFT_SIDE) ? "left" : "right",
 					body_part(LEG));
+#else
+		    Your("%s%sはひどい傷を負った．",
+			 (side == LEFT_SIDE) ? "左" : "右",
+			 body_part(LEG));
+#endif
+/*JP
 		    losehp(2, "leg damage from being pulled out of a bear trap",
+*/
+		    losehp(2, "熊の罠から抜けようと足を引っぱって",
 					KILLED_BY);
 		}
 		break;
@@ -740,8 +803,13 @@
 		nextobj = otmp->nobj;
 		if ((otmp != uball) && (rnd(capacity) <= (int)otmp->owt)) {
 			if (canletgo(otmp, "")) {
+#if 0 /*JP*/
 				Your("%s you down the stairs.",
 				     aobjnam(otmp, "follow"));
+#else
+				You("%sと一緒に階段を降りた．",
+				     xname(otmp));
+#endif
 				dropx(otmp);
 			}
 		}
@@ -767,26 +835,51 @@
 	forward = carried(uball) && (uwep == uball || !uwep || !rn2(3));
 
 	if (carried(uball))
+/*JP
 		You("lose your grip on the iron ball.");
+*/
+		You("鉄球を手から落してしまった．");
 
 	if (forward) {
 		if(rn2(6)) {
+/*JP
 			pline_The("iron ball drags you downstairs!");
+*/
+			You("鉄球によって階段をころがり落ちた！");
+#if 0 /*JP*/
 			losehp(rnd(6), "dragged downstairs by an iron ball",
 				NO_KILLER_PREFIX);
+#else
+			losehp(rnd(6), "鉄球により階段をころがり落ちて",
+				KILLED_BY);
+#endif
 			litter();
 		}
 	} else {
 		if(rn2(2)) {
+/*JP
 			pline_The("iron ball smacks into you!");
+*/
+			pline("鉄球はあなたにゴツンとぶつかった！");
+/*JP
 			losehp(rnd(20), "iron ball collision", KILLED_BY_AN);
+*/
+			losehp(rnd(20), "鉄球の衝突で", KILLED_BY_AN);
 			exercise(A_STR, FALSE);
 			dragchance -= 2;
 		}
 		if( (int) dragchance >= rnd(6)) {
+/*JP
 			pline_The("iron ball drags you downstairs!");
+*/
+			You("鉄球によって階段をころがり落ちた！");
+#if 0 /*JP*/
 			losehp(rnd(3), "dragged downstairs by an iron ball",
 				NO_KILLER_PREFIX);
+#else
+			losehp(rnd(3), "鉄球により階段をころがり落ちて",
+				KILLED_BY);
+#endif
 			exercise(A_STR, FALSE);
 			litter();
 		}
diff -aurN slashem-0.0.7E6F2/src/bones.c jslashem-0.0.7E6F2-J0.0.8/src/bones.c
--- slashem-0.0.7E6F2/src/bones.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/bones.c	2004-07-27 09:06:30.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985,1993. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 
@@ -325,8 +333,13 @@
 		}
 		mtmp = christen_monst(mtmp, plname);
 		newsym(u.ux, u.uy);
+#if 0 /*JP*/
 		Your("body rises from the dead as %s...",
 			an(mons[u.ugrave_arise].mname));
+#else
+		Your("体は%sとして死体から蘇った．．．",
+			jtrns_mon_gen(mons[u.ugrave_arise].mname, mtmp->female));
+#endif
 		display_nhwindow(WIN_MESSAGE, FALSE);
 		drop_upon_death(mtmp, (struct obj *)0);
 		m_dowear(mtmp, TRUE);
@@ -445,7 +458,10 @@
 #ifdef WIZARD
 	    if (!wizard)
 #endif
+/*JP
 		pline("Discarding unuseable bones; no need to panic...");
+*/
+		pline("使えない骨を捨てた．慌てる必要はない．．．");
 	} else {
 #ifdef WIZARD
 		if(wizard)  {
@@ -461,8 +477,13 @@
 		if (strcmp(bonesid, oldbonesid) != 0) {
 			char errbuf[BUFSZ];
 
+#if 0 /*JP*/
 			Sprintf(errbuf, "This is bones level '%s', not '%s'!",
 				oldbonesid, bonesid);
+#else
+			Sprintf(errbuf, "この骨のレベルは'%s'であって，'%s'ではない！",
+				oldbonesid, bonesid);
+#endif
 #ifdef WIZARD
 			if (wizard) {
 				pline("%s", errbuf);
diff -aurN slashem-0.0.7E6F2/src/botl.c jslashem-0.0.7E6F2-J0.0.8/src/botl.c
--- slashem-0.0.7E6F2/src/botl.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/botl.c	2004-06-29 02:21:14.000000000 +0900
@@ -2,12 +2,21 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef OVL0
 extern const char *hu_stat[];	/* defined in eat.c */
 
 const char *hu_abbrev_stat[] = {	/* must be kept consistent with eat.c */
+#if 0 /*JP*/
 	"Sat",
 	"",
 	"Hun",
@@ -15,24 +24,51 @@
 	"Ftg",
 	"Ftd",
 	"Sta"
+#else
+	"満",
+	"",
+	"空",
+	"衰",
+	"飢",
+	"暈",
+	"餓"
+#endif
 };
 
 const char * const enc_stat[] = {
+#if 0 /*JP*/
 	"",
 	"Burdened",
 	"Stressed",
 	"Strained",
 	"Overtaxed",
 	"Overloaded"
+#else
+	"",
+	"よろめき",
+	"圧迫",
+	"限界",
+	"荷重",
+	"超過"
+#endif
 };
 
 const char *enc_abbrev_stat[] = {
+#if 0 /*JP*/
 	"",
 	"Brd",
 	"Ssd",
 	"Snd",
 	"Otd",
 	"Old"
+#else
+	"",
+	"蹌",
+	"圧",
+	"限",
+	"重",
+	"過"
+#endif
 };
 
 STATIC_DCL void NDECL(bot1);
@@ -212,11 +248,29 @@
 
     Strcpy(player, plname);
     if ('a' <= player[0] && player[0] <= 'z') player[0] += 'A'-'a';
+#if 1 /*JP*/
+	if(is_kanji1(player, 9))
+		player[9] = '_';
+#endif
     player[10] = 0;
+#if 0 /*JP*/
     Sprintf(nb = eos(player)," the ");
+#else
+	Sprintf(nb = eos(player)," ");
+#endif
 
 	if (Upolyd) {
+#if 0 /*JP*/
 	(void) strncpy(mbot, mons[u.umonnum].mname, SIZE(mbot) - 1);
+#else
+	    char *umname = jtrns_mon_gen(mons[u.umonnum].mname, flags.female) ;
+	    if ( strlen(umname) > SIZE(mbot) - 1 && is_kanji1(umname, SIZE(mbot) - 1) ) {
+		(void) strncpy(mbot, umname, SIZE(mbot) - 2);
+		mbot[SIZE(mbot) - 2] = '_' ;
+	    } else {
+		(void) strncpy(mbot, umname, SIZE(mbot) - 1) ;
+	    }
+#endif
 	mbot[SIZE(mbot) - 1] = 0;
 		while(mbot[k] != 0) {
 		    if ((k == 0 || (k > 0 && mbot[k-1] == ' ')) &&
@@ -260,15 +314,24 @@
 	if((i - j) > 0)
 		Sprintf(nb = eos(nb),"%*s", i-j, " ");  /* pad with spaces */
         
+#if 0 /*JP*/
 	Sprintf(nb = eos(nb), "St:%s ", botl_strength());
 	Sprintf(nb = eos(nb),
 		"Dx:%-1d Co:%-1d In:%-1d Wi:%-1d Ch:%-1d",
 		ACURR(A_DEX), ACURR(A_CON), ACURR(A_INT), ACURR(A_WIS), ACURR(A_CHA));
 	Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? "  Chaotic" :
 			(u.ualign.type == A_NEUTRAL) ? "  Neutral" : "  Lawful");
+#else
+	Sprintf(nb = eos(nb), "強:%s ", botl_strength());
+	Sprintf(nb = eos(nb),
+		"早:%-1d 耐:%-1d 知:%-1d 賢:%-1d 魅:%-1d ",
+		ACURR(A_DEX), ACURR(A_CON), ACURR(A_INT), ACURR(A_WIS), ACURR(A_CHA));
+	Sprintf(nb = eos(nb), (u.ualign.type == A_CHAOTIC) ? "混沌" :
+			(u.ualign.type == A_NEUTRAL) ? "中立" : "秩序");
+#endif
 #ifdef SCORE_ON_BOTL
 	if (flags.showscore)
-	    Sprintf(nb = eos(nb), " S:%ld", botl_score());
+	    Sprintf(nb = eos(nb), "%ld点", botl_score());
 #endif
 	curs(WIN_STATUS, 1, 0);
 	putstr(WIN_STATUS, 0, newbot1);
@@ -284,18 +347,39 @@
 
 	/* TODO:	Add in dungeon name */
 	if (Is_knox(&u.uz))
+#if 0 /*JP*/
 		Sprintf(buf, "%s ", dungeons[u.uz.dnum].dname);
+#else
+		Sprintf(buf, "%s ", jtrns_obj('d', dungeons[u.uz.dnum].dname));
+#endif
 	else if (In_quest(&u.uz))
+#if 0 /*JP*/
 		Sprintf(buf, "Home %d ", dunlev(&u.uz));
+#else
+		Sprintf(buf, "故郷 %d ", dunlev(&u.uz));
+#endif
 	else if (In_endgame(&u.uz))
 		Sprintf(buf,
+#if 0 /*JP*/
 			Is_astralevel(&u.uz) ? "Astral Plane " : "End Game ");
+#else
+			Is_astralevel(&u.uz) ? "精霊界 " : "最終試練 ");
+#endif
 	else {
 		if (verbose)
+#if 0 /*JP*/
 			Sprintf(buf, "%s, level %d ",
 				dungeons[u.uz.dnum].dname, depth(&u.uz));
+#else
+			Sprintf(buf, "%s(%d階) ",
+				jtrns_obj('d', dungeons[u.uz.dnum].dname), depth(&u.uz));
+#endif
 		else
+#if 0 /*JP*/
 		Sprintf(buf, "Dlvl:%-2d ", depth(&u.uz));
+#else
+		Sprintf(buf, "地下:%-2d ", depth(&u.uz));
+#endif
 		ret = 0;
 	}
 	return ret;
@@ -351,7 +435,11 @@
 		  );
 	else
 		nb = newbot2;
+#if 0 /*JP*/
 	Sprintf(nb = eos(nb), "HP:%d(%d) Pw:%d(%d) AC:%-2d",
+#else
+	Sprintf(nb = eos(nb), "体:%d(%d) 魔:%d(%d) 鎧:%-2d",
+#endif
 		hp, hpmax, u.uen, u.uenmax, u.uac);
 
 	if (Upolyd)
@@ -359,19 +447,35 @@
 						u.ulevel : mons[u.umonnum].mlevel));
 #ifdef EXP_ON_BOTL
 	else if(flags.showexp && bot2_abbrev < 3)
+#if 0 /*JP*/
 		Sprintf(nb = eos(nb), " Xp:%u/%-1ld", u.ulevel,u.uexp);
+#else
+		Sprintf(nb = eos(nb), " 経験:%u/%-1ld", u.ulevel,u.uexp);
+#endif
 #endif
 	else
+#if 0 /*JP*/
 		Sprintf(nb = eos(nb), " Exp:%u", u.ulevel);
+#else
+		Sprintf(nb = eos(nb), " 経験:%u", u.ulevel);
+#endif
 
 #ifdef SHOW_WEIGHT
 	if (flags.showweight && bot2_abbrev < 3)
+#if 0 /*JP*/
 		Sprintf(nb = eos(nb), "  Wt:%ld/%ld", (long)(inv_weight()+weight_cap()),
+#else
+		Sprintf(nb = eos(nb), " 荷重:%ld/%ld", (long)(inv_weight()+weight_cap()),
+#endif
 				(long)weight_cap());
 #endif
 
 	if(flags.time && bot2_abbrev < 3)
+#if 0 /*JP*/
 	        Sprintf(nb = eos(nb), "  T:%ld ", moves);
+#else
+	        Sprintf(nb = eos(nb), " 歩:%ld ", moves);
+#endif
 
 #ifdef ALLEG_FX
         if(iflags.usealleg && botl_warn && !Hallucination)
@@ -401,6 +505,7 @@
 #endif
 */
 	/* KMH -- changed to Lev */
+#if 0 /*JP*/
 	if (Levitation)    Sprintf(nb = eos(nb), " Lev");
 	if(Confusion)
 		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " Cnf" : " Conf");
@@ -425,6 +530,34 @@
 	if(cap > UNENCUMBERED)
 		Sprintf(nb = eos(nb), " %s",
 		  bot2_abbrev >= 2 ? enc_abbrev_stat[cap] : enc_stat[cap]);
+#else
+	if(Levitation)
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 浮" : " 浮遊");
+	if(Confusion)
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 乱" : " 混乱");
+	if(Sick) {
+		if (u.usick_type & SICK_VOMITABLE)
+			   Sprintf(nb = eos(nb),
+			     bot2_abbrev >= 2 ? " 毒" : " 食毒");
+		if (u.usick_type & SICK_NONVOMITABLE)
+			   Sprintf(nb = eos(nb),
+			     bot2_abbrev >= 2 ? " 病" : " 病気");
+	}
+
+	if(Blind)
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 盲" : " 盲目");
+	if(Stunned)
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 眩" : " 眩暈");
+	if(Hallucination)
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 幻" : " 幻覚");
+	if(Slimed)
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 溶" : " 溶解");
+	if(u.ustuck && !u.uswallow && !sticks(youmonst.data))
+		Sprintf(nb = eos(nb), bot2_abbrev >= 2 ? " 捕" : " 捕縛");
+	if(cap > UNENCUMBERED)
+		Sprintf(nb = eos(nb), " %s",
+		  bot2_abbrev >= 2 ? enc_abbrev_stat[cap] : enc_stat[cap]);
+#endif
 }
 
 STATIC_OVL void
diff -aurN slashem-0.0.7E6F2/src/cmd.c jslashem-0.0.7E6F2-J0.0.8/src/cmd.c
--- slashem-0.0.7E6F2/src/cmd.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/cmd.c	2004-08-22 22:52:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "func_tab.h"
 /* #define DEBUG */	/* uncomment for debugging */
@@ -341,9 +349,15 @@
 
 	datawin = create_nhwindow(NHW_TEXT);
 	putstr(datawin, 0, "");
+/*JP
 	putstr(datawin, 0, "            Extended Commands List");
+*/
+	putstr(datawin, 0, "            拡張コマンド一覧");
 	putstr(datawin, 0, "");
+/*JP
 	putstr(datawin, 0, "    Press '#', then type:");
+*/
+	putstr(datawin, 0, "    '#'を押したあとタイプせよ:");
 	putstr(datawin, 0, "");
 
 	for(efp = extcmdlist; efp->ef_txt; efp++) {
@@ -450,10 +464,16 @@
 		    Sprintf(prompt, "%s [%s]", choices[i]->ef_txt,
 				choices[i]->ef_desc);
 		} else if (acount == 1) {
+/*JP
 		    Sprintf(prompt, "%s or %s", choices[i-1]->ef_txt,
+*/
+		    Sprintf(prompt, "%s または %s", choices[i-1]->ef_txt,
 				choices[i]->ef_txt);
 		} else {
+/*JP
 		    Strcat(prompt," or ");
+*/
+		    Strcat(prompt," または ");
 		    Strcat(prompt, choices[i]->ef_txt);
 		}
 		++acount;
@@ -464,7 +484,10 @@
 		any.a_char = prevaccelerator;
 		add_menu(win, NO_GLYPH, &any, any.a_char, 0, ATR_NONE, buf, FALSE);
 	    }
+/*JP
 	    Sprintf(prompt, "Extended Command: %s", cbuf);
+*/
+	    Sprintf(prompt, "拡張コマンド: %s", cbuf);
 	    end_menu(win, prompt);
 	    n = select_menu(win, PICK_ONE, &pick_list);
 	    destroy_nhwindow(win);
@@ -509,18 +532,33 @@
 	    if(IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
 		if (split_mon(&youmonst, (struct monst *)0))
 		    dryup(u.ux, u.uy, TRUE);
+/*JP
 	    } else There("is no fountain here.");
+*/
+	    } else pline("ここには泉はない．");
 	} else if (is_unicorn(youmonst.data)) {
 	    use_unicorn_horn((struct obj *)0);
 	    return 1;
 	} else if (youmonst.data->msound == MS_SHRIEK) {
+/*JP
 	    You("shriek.");
+*/
+	    You("金切り声をあげた．");
 	    if(u.uburied)
+/*JP
 		pline("Unfortunately sound does not carry well through rock.");
+*/
+		pline("残念ながら音は岩をうまく伝わらない．");
 	    else aggravate();
 	} else if (Upolyd)
+/*JP
 		pline("Any special ability you may have is purely reflexive.");
+*/
+		pline("あなたの持っている特殊能力はどれも受動的だ．");
+/*JP
 	else You("don't have a special ability in your normal form!");
+*/
+	else You("特殊能力を持っていない！");
 	return 0;
 }
 
@@ -528,15 +566,27 @@
 enter_explore_mode()
 {
 	if(!discover && !wizard) {
+/*JP
 		pline("Beware!  From explore mode there will be no return to normal game.");
+*/
+		pline("警告！発見モードに入ったら通常モードには戻れない．");
+/*JP
 		if (yn("Do you want to enter explore mode?") == 'y') {
+*/
+		if (yn("発見モードに移りますか？") == 'y') {
 			clear_nhwindow(WIN_MESSAGE);
+/*JP
 			You("are now in non-scoring explore mode.");
+*/
+			You("スコアがのらない発見モードに移行した．");
 			discover = TRUE;
 		}
 		else {
 			clear_nhwindow(WIN_MESSAGE);
+/*JP
 			pline("Resuming normal game.");
+*/
+			pline("通常モードを続ける．");
 		}
 	}
 	return 0;
@@ -551,11 +601,17 @@
 	boolean no_steal = FALSE;
 
 	if (nohands(youmonst.data)) {
+/*JP
 		pline("Could be hard without hands ...");
+*/
+		pline("手がないと難しい．．．");
 		no_steal = TRUE;
 	} else
 	if (near_capacity() > SLT_ENCUMBER) {
+/*JP
 		Your("load is too heavy to attempt to steal.");
+*/
+		Your("盗みを行うには荷物が重すぎる．");
 		no_steal = TRUE;
 	}
 	if (no_steal) {
@@ -571,7 +627,10 @@
 	y = u.uy + u.dy;
 	
 	if(u.uswallow) {
+/*JP
 		pline("You search around but don't find anything.");
+*/
+		pline("周りを見回したが何も見つからない．");
 		return(1);
 	}
 
@@ -631,9 +690,15 @@
 					obj_extract_self(gold);
 		      if (merge_choice(invent, gold) || inv_cnt() < 52) {
 				    addinv(gold);
+/*JP
 						You("steal %s.", doname(gold));
+*/
+						You("%sを盗んだ．", doname(gold));
 					} else {
+/*JP
             You("grab %s, but find no room in your knapsack.", doname(gold));
+*/
+            You("%sを掴んだが，あなたのナップザックには入れる隙間がない", doname(gold));
 			    	dropy(gold);
 					}
 				}
@@ -645,20 +710,32 @@
 				if (temp > mdat->mgold) temp = mdat->mgold;
 				u.ugold += temp;
 				mdat->mgold -= temp;
+/*JP
 				You("steal %d gold.",temp);
+*/
+				You("%d個の金塊を盗んだ．",temp);
 #endif
 			} else
+/*JP
 				You("don't find anything to steal.");
+*/
+				You("盗めるものが見つからない．");
 
 			if (!mdat->mtame) exercise(A_DEX, TRUE);
 			return(1);
 		} else {
+/*JP
 			You("failed to steal anything.");
+*/
+			You("盗みに失敗した．");
 			setmangry(mdat);
 			return(1);
 	       }
 	} else {
+/*JP
 		pline("I don't see anybody to rob there!");
+*/
+		pline("そこには何もいない！");
 		return(0);
 	}
 
@@ -679,7 +756,10 @@
 	    flags.verbose = save_verbose;
 	    (void) encumber_msg();
 	} else
+/*JP
 	    pline("Unavailable command '^W'.");
+*/
+	    pline("'^W'コマンドは使えない．");
 	return 0;
 }
 
@@ -901,7 +981,10 @@
 wiz_identify()
 {
 	if (wizard)	identify_pack(0);
+/*JP
 	else		pline("Unavailable command '^I'.");
+*/
+	else		pline("'^I'コマンドは使えない．");
 	return 0;
 }
 
@@ -923,7 +1006,10 @@
 	    HConfusion = save_Hconf;
 	    HHallucination = save_Hhallu;
 	} else
+/*JP
 	    pline("Unavailable command '^F'.");
+*/
+	    pline("'^F'コマンドは使えない．");
 	return 0;
 }
 
@@ -932,7 +1018,10 @@
 wiz_gain_level()
 {
 	if (wizard) pluslvl(FALSE);
+/*JP
 	else            pline("Unavailable command '^J'.");
+*/
+	else pline("'^J'コマンドは使えない．");
 	return 0;
 }
 
@@ -942,15 +1031,24 @@
 {
 	if (wizard) {
 		if (u.ublessed < 20) {
+/*JP
 			pline("Intrinsic AC increased by 1.");
+*/
+			pline("生身でのACを1増やした．");
 			HProtection |= FROMOUTSIDE;
 			u.ublessed++;
 			flags.botl = 1;
 		} else
+/*JP
 			pline("Intrinsic AC is already maximized.");
+*/
+			pline("生身でのACはもう最大だ．");
 	}
 	else
+/*JP
 		pline("Unavailable command '^C'.");
+*/
+		pline("'^C'コマンドは使えない．");
 	return 0;
 }
 
@@ -959,17 +1057,26 @@
 {
 	if (wizard) {
 	    if ((Invulnerable == 0) && (u.uinvulnerable == FALSE)) {
+/*JP
 	            You("will be invulnerable for 32000 turns.");
+*/
+	            You("32000ターン無敵状態になった．");
 	            Invulnerable = 32000;
 	            u.uinvulnerable = TRUE;
 	    }
 	    else {
+/*JP
 	            You("are no longer invulnerable.");
+*/
+	            You("もう無敵ではない．");
 	            Invulnerable = 0;
 	            u.uinvulnerable = FALSE;
 	    }
 	}
+/*JP
 	else            pline("Unavailable command '^N'.");
+*/
+	else            pline("'^N'コマンドは使えない．");
 	return 0;
 }
 /* END TSANTH'S CODE */
@@ -978,7 +1085,10 @@
 wiz_genesis()
 {
 	if (wizard)	(void) create_particular();
+/*JP
 	else		pline("Unavailable command '^G'.");
+*/
+	else		pline("'^G'コマンドは使えない．");
 	return 0;
 }
 
@@ -987,7 +1097,10 @@
 wiz_where()
 {
 	if (wizard) (void) print_dungeon(FALSE, (schar *)0, (xchar *)0);
+/*JP
 	else	    pline("Unavailable command '^O'.");
+*/
+	else	    pline("'^O'コマンドは使えない．");
 	return 0;
 }
 
@@ -996,7 +1109,10 @@
 wiz_detect()
 {
 	if(wizard)  (void) findit();
+/*JP
 	else	    pline("Unavailable command '^E'.");
+*/
+	else	    pline("'^E'コマンドは使えない．");
 	return 0;
 }
 
@@ -1005,7 +1121,10 @@
 wiz_level_tele()
 {
 	if (wizard)	level_tele();
+/*JP
 	else		pline("Unavailable command '^V'.");
+*/
+	else		pline("'^V'コマンドは使えない．");
 	return 0;
 }
 
@@ -1014,8 +1133,13 @@
 wiz_mon_polycontrol()
 {
     iflags.mon_polycontrol = !iflags.mon_polycontrol;
+#if 0 /*JP*/
     pline("Monster polymorph control is %s.",
 	  iflags.mon_polycontrol ? "on" : "off");
+#else
+    pline("怪物の変化制御: %s",
+	  iflags.mon_polycontrol ? "オン" : "オフ");
+#endif
     return 0;
 }
 
@@ -1027,7 +1151,10 @@
     int newlevel;
     int ret;
 
+/*JP
     getlin("To what experience level do you want to be set?", buf);
+*/
+    getlin("経験レベルをいくつに設定しますか？", buf);
     (void)mungspaces(buf);
     if (buf[0] == '\033' || buf[0] == '\0') ret = 0;
     else ret = sscanf(buf, "%d", &newlevel);
@@ -1037,18 +1164,30 @@
 	return 0;
     }
     if (newlevel == u.ulevel) {
+/*JP
 	You("are already that experienced.");
+*/
+	You("すでにその経験レベルだ．");
     } else if (newlevel < u.ulevel) {
 	if (u.ulevel == 1) {
+/*JP
 	    You("are already as inexperienced as you can get.");
+*/
+	    You("すでに最低の経験レベルだ．");
 	    return 0;
 	}
 	if (newlevel < 1) newlevel = 1;
 	while (u.ulevel > newlevel)
+/*JP
 	    losexp("#levelchange", TRUE);
+*/
+	    losexp("#levelchangeコマンドで ", TRUE);
     } else {
 	if (u.ulevel >= MAXULEV) {
+/*JP
 	    You("are already as experienced as you can get.");
+*/
+	    You("すでに最大の経験レベルだ．");
 	    return 0;
 	}
 	if (newlevel > MAXULEV) newlevel = MAXULEV;
@@ -1063,7 +1202,10 @@
 STATIC_PTR int
 wiz_panic()
 {
+/*JP
 	if (yn("Do you want to call panic() and end your game?") == 'y')
+*/
+	if (yn("panic()関数を呼び出してゲームを終了させますか？") == 'y')
 		panic("crash test.");
         return 0;
 }
@@ -1193,22 +1335,41 @@
 /* -enlightenment and conduct- */
 static winid en_win;
 static const char
+#if 0 /*JP*/
 	You_[] = "You ",
 	are[]  = "are ",  were[]  = "were ",
 	have[] = "have ", had[]   = "had ",
 	can[]  = "can ",  could[] = "could ";
+#else
+	You_[] = "あなたは",
+	are[]  = "である",       were[]  = "であった",
+	have[] = "をもっている", had[]   = "をもっていた",
+	can[]  = "できる",       could[] = "できた",
+	iru[]  = "いる",         ita[]   = "いた";
+#endif
+#if 0 /*JP*/
 static const char
 	have_been[]  = "have been ",
 	have_never[] = "have never ", never[] = "never ";
+#endif
 
+#if 0 /*JP*/
 #define enl_msg(prefix,present,past,suffix) \
 			enlght_line(prefix, final ? past : present, suffix)
+#else
+#define enl_msg(prefix,present,past,suffix) \
+			enlght_line(prefix, suffix, final ? past : present)
+#endif
 #define you_are(attr)	enl_msg(You_,are,were,attr)
 #define you_have(attr)	enl_msg(You_,have,had,attr)
 #define you_can(attr)	enl_msg(You_,can,could,attr)
+#if 0 /*JP*/
 #define you_have_been(goodthing) enl_msg(You_,have_been,were,goodthing)
 #define you_have_never(badthing) enl_msg(You_,have_never,never,badthing)
 #define you_have_X(something)	enl_msg(You_,have,(const char *)"",something)
+#else
+#define you_are_ing(goodthing) enl_msg(You_,iru,ita,goodthing)
+#endif
 
 static void
 enlght_line(start, middle, end)
@@ -1216,7 +1377,11 @@
 {
 	char buf[BUFSZ];
 
+#if 0 /*JP*/
 	Sprintf(buf, "%s%s%s.", start, middle, end);
+#else
+	Sprintf(buf, "%s%s%s．", start, middle, end);
+#endif
 	putstr(en_win, 0, buf);
 }
 
@@ -1231,21 +1396,32 @@
 	char buf[BUFSZ];
 
 	en_win = create_nhwindow(NHW_MENU);
+#if 0 /*JP*/
 	putstr(en_win, 0, final ? "Final Attributes:" : "Current Attributes:");
+#else
+	putstr(en_win, 0, final ? "最終属性：" : "現在の属性：");
+#endif
 	putstr(en_win, 0, "");
 
 #ifdef ELBERETH
 	if (u.uevent.uhand_of_elbereth) {
 	    static const char * const hofe_titles[3] = {
+#if 0 /*JP*/
 				"the Hand of Elbereth",
 				"the Envoy of Balance",
 				"the Glory of Arioch"
+#else
+				"エルベレスの御手",
+				"調和の使者",
+				"アリオッチの名誉"
+#endif
 	    };
 	    you_are(hofe_titles[u.uevent.uhand_of_elbereth - 1]);
 	}
 #endif
 
 	/* note: piousness 20 matches MIN_QUEST_ALIGN (quest.h) */
+#if 0 /*JP*/
 	if (u.ualign.record >= 20)	you_are("piously aligned");
 	else if (u.ualign.record > 13)	you_are("devoutly aligned");
 	else if (u.ualign.record > 8)	you_are("fervently aligned");
@@ -1256,14 +1432,32 @@
 	else if (u.ualign.record >= -3)	you_have("strayed");
 	else if (u.ualign.record >= -8)	you_have("sinned");
 	else you_have("transgressed");
+#else
+	if (u.ualign.record >= 20)	you_have("敬虔な信仰心");
+	else if (u.ualign.record > 13)	you_have("心からの信仰心");
+	else if (u.ualign.record > 8)	you_have("熱心な信仰心");
+	else if (u.ualign.record > 3)	you_have("おおげさな信仰心");
+	else if (u.ualign.record == 3)	you_have("普通の信仰心");
+	else if (u.ualign.record > 0)	you_have("躊躇しながらも信仰心");
+	else if (u.ualign.record == 0)	you_have("形だけの信仰心");
+	else if (u.ualign.record >= -3)	you_are_ing("信仰に迷いをもって");
+	else if (u.ualign.record >= -8)	you_are_ing("罪を負って");
+	else you_are_ing("信仰から逸脱して");
+#endif
 #ifdef WIZARD
 	if (wizard) {
+#if 0 /*JP*/
 		Sprintf(buf, " %d", u.ualign.record);
 		enl_msg("Your alignment ", "is", "was", buf);
+#else
+		Sprintf(buf, "あなたの属性値は%d", u.ualign.record);
+		enl_msg(buf, "である", "だった", "");
+#endif
 	}
 #endif
 
 	/*** Resistances to troubles ***/
+#if 0 /*JP*/
 	if (Fire_resistance) you_are("fire resistant");
 	if (Cold_resistance) you_are("cold resistant");
 	if (Sleep_resistance) you_are("sleep resistant");
@@ -1278,11 +1472,32 @@
 		you_are("petrification resistant");
 	if (Invulnerable) you_are("invulnerable");
 	if (u.uedibility) you_can("recognize detrimental food");
+#else
+	if (Fire_resistance) you_have("火への耐性");
+	if (Cold_resistance) you_have("寒さへの耐性");
+	if (Disint_resistance) you_have("粉砕への耐性");
+	if (Shock_resistance) you_have("電撃への耐性");
+	if (Sleep_resistance) you_have("眠りへの耐性");
+	if (Poison_resistance) you_have("毒への耐性");
+	if (Drain_resistance) you_have("生命力吸収への耐性");
+	if (Sick_resistance) you_have("病気に対する免疫");
+	if (Antimagic) you_have("魔法防御能力");
+	if (Acid_resistance) you_have("酸への耐性");
+	if (Stone_resistance)
+		you_have("石化への耐性");
+	if (Invulnerable) you_are("不死身");
+	if (u.uedibility) you_can("有害な食料を識別");
+#endif
 
 	/*** Troubles ***/
 	if (Halluc_resistance)
+#if 0 /*JP*/
 		enl_msg("You resist", "", "ed", " hallucinations");
+#else
+		you_have("幻覚への耐性");
+#endif
 	if (final) {
+#if 0 /*JP*/
 		if (Hallucination) you_are("hallucinating");
 		if (Stunned) you_are("stunned");
 		if (Confusion) you_are("confused");
@@ -1293,42 +1508,93 @@
 			if (u.usick_type & SICK_NONVOMITABLE)
 				you_are("sick from illness");
 		}
+#else
+		if (Hallucination) you_are("幻覚状態");
+		if (Stunned) you_are("くらくら状態");
+		if (Confusion) you_are("混乱状態");
+		if (Blinded) you_are("盲目");
+		if (Sick) {
+			if (u.usick_type & SICK_VOMITABLE)
+				enl_msg("あなたは食中毒で気分が悪", "い", "かった", "");
+			if (u.usick_type & SICK_NONVOMITABLE)
+				enl_msg("あなたは病気で気分が悪", "い", "かった", "");
+		}
+#endif
 	}
+#if 0 /*JP*/
 	if (Stoned) you_are("turning to stone");
 	if (Slimed) you_are("turning into slime");
 	if (Strangled) you_are((u.uburied) ? "buried" : "being strangled");
+#else
+	if (Stoned) enl_msg(You_, "なりつつある", "なった", "石に");
+	if (Slimed) you_are_ing("スライム状になって");
+	if (Strangled) you_are_ing((u.uburied) ? "窒息して" : "首を絞められて");
+#endif
 	if (Glib) {
+#if 0 /*JP*/
 		Sprintf(buf, "slippery %s", makeplural(body_part(FINGER)));
 		you_have(buf);
+#else
+		Sprintf(buf, "%sがぬるぬるして", body_part(FINGER));
+		you_are_ing(buf);
+#endif
 	}
+#if 0 /*JP*/
 	if (Fumbling) enl_msg("You fumble", "", "d", "");
+#else
+	if (Fumbling) you_are_ing("不器用になって");
+#endif
 	if (Wounded_legs
 #ifdef STEED
 	    && !u.usteed
 #endif
 			  ) {
+#if 0 /*JP*/
 		Sprintf(buf, "wounded %s", makeplural(body_part(LEG)));
 		you_have(buf);
+#else
+		Sprintf(buf, "%sを怪我して", makeplural(body_part(LEG)));
+		you_are_ing(buf);
+#endif
 	}
 #if defined(WIZARD) && defined(STEED)
 	if (Wounded_legs && u.usteed && wizard) {
+#if 0 /*JP*/
 	    Strcpy(buf, x_monnam(u.usteed, ARTICLE_YOUR, (char *)0, 
 		    SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION, FALSE));
 	    *buf = highc(*buf);
 	    enl_msg(buf, " has", " had", " wounded legs");
+#else
+	    Sprintf(buf, "%sは足を怪我して", x_monnam(u.usteed, ARTICLE_YOUR, (char *)0, 
+		    SUPPRESS_SADDLE | SUPPRESS_HALLUCINATION, FALSE));
+	    enl_msg(buf, "いる", "いた", "");
+#endif
 	}
 #endif
+#if 0 /*JP*/
 	if (Sleeping) enl_msg("You ", "fall", "fell", " asleep");
 	if (Hunger) enl_msg("You hunger", "", "ed", " rapidly");
+#else
+	if (Sleeping) you_are_ing("眠って");
+	if (Hunger) enl_msg("あなたはすぐに腹が減る状態", "である", "だった", "");
+#endif
 
 	/*** Vision and senses ***/
+#if 0 /*JP*/
 	if (See_invisible) enl_msg(You_, "see", "saw", " invisible");
 	if (Blind_telepat) you_are("telepathic");
 	if (Warning) you_are("warned");
+#else
+	if (See_invisible) you_can("透明なものを見ることが");
+	if (Blind_telepat) you_have("テレパシー");
+	if (Warning) you_have("警戒能力");
+#endif
 	if (Warn_of_mon && flags.warntype) {
 	    /* [ALI] Add support for undead */
 	    int i, nth = 0;
 	    unsigned long warntype = flags.warntype;
+
+#if 0 /*JP*/
 	    struct { unsigned long mask; char *str; } warntypes[] = {
 		M2_ORC,		"orcs",
 		M2_DEMON,	"demons",
@@ -1359,14 +1625,52 @@
 	    }
 		you_are(buf);
 	}
+#else
+	    struct { unsigned long mask; char *str; } warntypes[] = {
+		M2_ORC,		"オーク",
+		M2_DEMON,	"悪魔",
+		M2_UNDEAD,	"不死の生物",
+	    };
+
+	    buf[0] = '\0' ;
+	    for(i = 0; i < SIZE(warntypes); i++) {
+		if (warntype & warntypes[i].mask) {
+		    warntype &= ~warntypes[i].mask;
+		    if (nth) {
+			if (warntype)
+			    strcat(buf, "，");
+			else
+			    strcat(buf, "及び");
+		    }
+		    else
+			nth = 1;
+		    strcat(buf, warntypes[i].str);
+		}
+	    }
+	    if (warntype) {
+		if (nth) strcat(buf, "及び");
+		strcat(buf, something) ;
+	    }
+	    strcat(buf, "の存在を感じる能力") ;
+	    you_have(buf);
+	}
+#endif
 #if 0	/* ALI - dealt with under Warn_of_mon */
 	if (Undead_warning) you_are("warned of undead");
 #endif
+#if 0 /*JP*/
 	if (Searching) you_have("automatic searching");
 	if (Clairvoyant) you_are("clairvoyant");
 	if (Infravision) you_have("infravision");
 	if (Detect_monsters) you_are("sensing the presence of monsters");
 	if (u.umconf) you_are("going to confuse monsters");
+#else
+	if (Searching) you_have("探査能力");
+	if (Clairvoyant) you_have("千里眼能力");
+	if (Infravision) you_have("暗闇で物を見る能力");
+	if (Detect_monsters) you_have("怪物を探す能力");
+	if (u.umconf) you_have("怪物を混乱させる能力");
+#endif
 
 	/*** Appearance and behavior ***/
 	if (Adornment) {
@@ -1375,22 +1679,47 @@
 	    if(uleft && uleft->otyp == RIN_ADORNMENT) adorn += uleft->spe;
 	    if(uright && uright->otyp == RIN_ADORNMENT) adorn += uright->spe;
 	    if (adorn < 0)
+#if 0 /*JP*/
 		you_are("poorly adorned");
+#else
+		you_are_ing("みずほらしく着飾って");
+#endif
 	    else
+#if 0 /*JP*/
 		you_are("adorned");
+#else
+		you_are_ing("着飾って");
+#endif
 	}
+#if 0 /*JP*/
 	if (Invisible) you_are("invisible");
 	else if (Invis) you_are("invisible to others");
+#else
+	if (Invisible) you_are("透明");
+	else if (Invis) you_are("他人に対して透明");
+#endif
 	/* ordinarily "visible" is redundant; this is a special case for
 	   the situation when invisibility would be an expected attribute */
 	else if ((HInvis || EInvis || pm_invisible(youmonst.data)) && BInvis)
+#if 0 /*JP*/
 	    you_are("visible");
+#else
+	    you_are("不透明");
+#endif
+#if 0 /*JP*/
 	if (Displaced) you_are("displaced");
 	if (Stealth) you_are("stealthy");
 	if (Aggravate_monster) enl_msg("You aggravate", "", "d", " monsters");
 	if (Conflict) enl_msg("You cause", "", "d", " conflict");
+#else
+	if (Displaced) you_have("幻影能力");
+	if (Stealth) you_have("人目を盗む能力");
+	if (Aggravate_monster) you_are_ing("反感をかって");
+	if (Conflict) you_are_ing("闘争を引き起こして");
+#endif
 
 	/*** Transportation ***/
+#if 0 /*JP*/
 	if (Jumping) you_can("jump");
 	if (Teleportation) you_can("teleport");
 	if (Teleport_control) you_have("teleport control");
@@ -1402,35 +1731,81 @@
 	if (Breathless) you_can("survive without air");
 	else if (Amphibious) you_can("breathe water");
 	if (Passes_walls) you_can("walk through walls");
+#else
+	if (Jumping) you_can("跳躍することが");
+	if (Teleportation) you_can("瞬間移動が");
+	if (Teleport_control) you_have("瞬間移動の制御能力");
+	if (Lev_at_will) you_have("上手く浮遊する能力");
+	else if (Levitation) you_are("浮遊状態");	/* without control */
+	else if (Flying) you_can("飛ぶことが");
+	if (Wwalking) you_can("水の上を歩くことが");
+	if (Swimming) you_can("泳ぐことが");        
+	if (Breathless) you_can("空気なしで生き延びることが");
+	else if (Amphibious) you_can("水中で呼吸が");
+	if (Passes_walls) you_can("壁を通り抜けることが");
+#endif
 #ifdef STEED
 	/* If you die while dismounting, u.usteed is still set.  Since several
 	 * places in the done() sequence depend on u.usteed, just detect this
 	 * special case. */
+#if 0 /*JP*/
 	if (u.usteed && (final < 2 || strcmp(killer, "riding accident"))) {
 	    Sprintf(buf, "riding %s", y_monnam(u.usteed));
 	    you_are(buf);
 	}
+#else
+	if (u.usteed && (final < 2 || strcmp(killer, "乗りものから落ちて"))) {
+	    Sprintf(buf, "%sに乗って", y_monnam(u.usteed));
+	    you_are_ing(buf);
+	}
+#endif
 #endif
 	if (u.uswallow) {
+#if 0 /*JP*/
 	    Sprintf(buf, "swallowed by %s", a_monnam(u.ustuck));
 #ifdef WIZARD
 	    if (wizard) Sprintf(eos(buf), " (%u)", u.uswldtim);
 #endif
 	    you_are(buf);
+#else
+#ifdef WIZARD
+	    if (wizard)
+		Sprintf(buf, "%sに飲み込まれ(%u)て", a_monnam(u.ustuck), u.uswldtim);
+	    else
+#endif
+	    Sprintf(buf, "%sに飲み込まれて", a_monnam(u.ustuck));
+	    you_are_ing(buf);
+#endif
 	} else if (u.ustuck) {
+#if 0 /*JP*/
 	    Sprintf(buf, "%s %s",
 		    (Upolyd && sticks(youmonst.data)) ? "holding" : "held by",
 		    a_monnam(u.ustuck));
 	    you_are(buf);
+#else
+	    Sprintf(buf, "%s%s",
+		    a_monnam(u.ustuck),
+		    (Upolyd && sticks(youmonst.data)) ? "を捕まえて" : "に捕まって");
+	    you_are_ing(buf);
+#endif
 	}
 
 	/*** Physical attributes ***/
+#if 0 /*JP*/
 	if (u.uhitinc)
 	    you_have(enlght_combatinc("to hit", u.uhitinc, final, buf));
 	if (u.udaminc)
 	    you_have(enlght_combatinc("damage", u.udaminc, final, buf));
 	if (Slow_digestion) you_have("slower digestion");
 	if (Regeneration) enl_msg("You regenerate", "", "d", "");
+#else
+	if (u.uhitinc)
+	    you_have(enlght_combatinc("命中率", u.uhitinc, final, buf));
+	if (u.udaminc)
+	    you_have(enlght_combatinc("ダメージ", u.udaminc, final, buf));
+	if (Slow_digestion) enl_msg("あなたは食物の消化が遅", "い", "かった", "");
+	if (Regeneration) you_have("再生能力");
+#endif
 	if (u.uspellprot || Protection) {
 	    int prot = 0;
 
@@ -1440,26 +1815,55 @@
 	    prot += u.uspellprot;
 
 	    if (prot < 0)
+#if 0 /*JP*/
 		you_are("ineffectively protected");
+#else
+		you_are_ing("不十分に守られて");
+#endif
 	    else
+#if 0 /*JP*/
 		you_are("protected");
+#else
+		you_are_ing("守られて");
+#endif
 	}
+#if 0 /*JP*/
 	if (Protection_from_shape_changers)
 		you_are("protected from shape changers");
 	if (Polymorph) you_are("polymorphing");
 	if (Polymorph_control) you_have("polymorph control");
+#else
+	if (Protection_from_shape_changers)
+		you_are_ing("変化怪物から守られて");
+	if (Polymorph) you_are_ing("変化して");
+	if (Polymorph_control) you_have("変化の制御能力");
+#endif
 	if (u.ulycn >= LOW_PM) {
+#if 0 /*JP*/
 		Strcpy(buf, an(mons[u.ulycn].mname));
+#else
+		Strcpy(buf, jtrns_mon_gen(mons[u.ulycn].mname, flags.female));
+#endif
 		you_are(buf);
 	}
 	if (Upolyd) {
+#if 0 /*JP*/
 	    if (u.umonnum == u.ulycn) Strcpy(buf, "in beast form");
 	    else Sprintf(buf, "polymorphed into %s", an(youmonst.data->mname));
+#else
+	    if (u.ulycn >= LOW_PM) Strcpy(buf, "獣の姿を");
+	    else Sprintf(buf, "%sに変化", a_monnam(&youmonst));
+#endif
 #ifdef WIZARD
 	    if (wizard) Sprintf(eos(buf), " (%d)", u.mtimedone);
 #endif
+#if 0 /*JP*/
 	    you_are(buf);
+#else
+	    enl_msg(buf, "している", "していた", "");
+#endif
 	}
+#if 0 /*JP*/
 	if (Unchanging) you_can("not change from your current form");
 	if (Fast) you_are(Very_fast ? "very fast" : "fast");
 	if (Reflecting) you_have("reflection");
@@ -1480,8 +1884,34 @@
 			makeplural(body_part(HAND)));
 	    you_are(buf);
 	}
+#else
+	if (Unchanging) enl_msg(You_, "できない", "できなかった",
+				"今の姿から変化することが");
+	if (Fast) you_have(Very_fast ? "とても素早く行動する能力" :
+			   "素早く行動する能力");
+	if (Reflecting) you_have("反射能力");
+	if (Free_action) you_have("拘束されない能力");
+	if (Fixed_abil) you_are_ing("能力が固定されて");
+	if (uamul && uamul->otyp == AMULET_VERSUS_STONE)
+		you_are_ing("石化から保護されて");
+	if (Lifesaved)
+		enl_msg("あなたの生命は保存されて", iru, ita, "");
+	if (u.twoweap) you_are("二刀流");
+	if (u.twoweap) {
+	    if (uwep && uswapwep)
+		Sprintf(buf, "二刀流で戦闘して");
+	    else if (uwep || uswapwep)
+		Sprintf(buf, "武器と%s%sで戦闘して",
+			uwep ? "左" : "右", body_part(HAND));
+	    else
+		Sprintf(buf, "両%sで戦闘して",
+			makeplural(body_part(HAND)));
+	    you_are_ing(buf);
+	}
+#endif
 
 	/*** Miscellany ***/
+#if 0 /*JP*/
 	if (Luck) {
 	    ltmp = abs((int)Luck);
 	    Sprintf(buf, "%s%slucky",
@@ -1492,20 +1922,50 @@
 #endif
 	    you_are(buf);
 	}
+#else /*JP*/
+	if (Luck) {
+	    ltmp = abs((int)Luck);
+	    Sprintf(buf, "%s%s",
+		    ltmp >= 10 ? "猛烈に" : ltmp >= 5 ? "とても" : "",
+		    Luck < 0 ? "不幸" : "幸福");
 #ifdef WIZARD
+	    if (wizard) Sprintf(eos(buf), "(%d)", Luck);
+#endif
+	    you_are(buf);
+	}
+#endif /*JP*/
+#ifdef WIZARD
+#if 0 /*JP*/
 	 else if (wizard) enl_msg("Your luck ", "is", "was", " zero");
+#else
+	 else if (wizard) enl_msg("あなたの運はゼロ", "である", "だった", "");
 #endif
+#endif
+#if 0 /*JP*/
 	if (u.moreluck > 0) you_have("extra luck");
 	else if (u.moreluck < 0) you_have("reduced luck");
+#else
+	if (u.moreluck > 0) you_have("さらなる幸運");
+	else if (u.moreluck < 0) you_have("さらなる悪運");
+#endif
 	if (carrying(LUCKSTONE) || stone_luck(TRUE)) {
 	    ltmp = stone_luck(FALSE);
 	    if (ltmp <= 0)
+#if 0 /*JP*/
 		enl_msg("Bad luck ", "does", "did", " not time out for you");
+#else
+		enl_msg("悪運は時間切れにならな", "い", "かった", "");
+#endif
 	    if (ltmp >= 0)
+#if 0 /*JP*/
 		enl_msg("Good luck ", "does", "did", " not time out for you");
+#else
+		enl_msg("幸運は時間切れにならな", "い", "かった", "");
+#endif
 	}
 
 	/* KMH, balance patch -- healthstones affect health */
+#if 0 /*JP*/
 	if (u.uhealbonus)
 	{
 		Sprintf(buf, "%s health", u.uhealbonus > 0 ? "extra" :
@@ -1518,7 +1978,21 @@
 #ifdef WIZARD
 	 else if (wizard) enl_msg("Your health bonus ", "is", "was", " zero");
 #endif
+#else /*JP*/
+	if (u.uhealbonus)
+	{
+		Sprintf(buf, "%s健康的", u.uhealbonus > 0 ? "極めて" : "不");
+#ifdef WIZARD
+	    if (wizard) Sprintf(eos(buf), " (%d)", u.uhealbonus);
+#endif
+		you_are(buf);
+	}
+#ifdef WIZARD
+	 else if (wizard) enl_msg("あなたの健康度はゼロ", "である", "だった", "");
+#endif
+#endif /*JP*/
 
+#if 0 /*JP*/
 	if (u.ugangr) {
 	    Sprintf(buf, " %sangry with you",
 		    u.ugangr > 6 ? "extremely " : u.ugangr > 3 ? "very " : "");
@@ -1527,12 +2001,23 @@
 #endif
 	    enl_msg(u_gname(), " is", " was", buf);
 	} else
+#else /*JP*/
+	if (u.ugangr) {
+	    Sprintf(buf, "%sは%s怒って", u_gname(),
+		    u.ugangr > 6 ? "猛烈に" : u.ugangr > 3 ? "とても" : "");
+#ifdef WIZARD
+	    if (wizard) Sprintf(eos(buf), "(%d)", u.ugangr);
+#endif
+	    enl_msg(buf, iru, ita, "");
+	} else
+#endif /*JP*/
 	    /*
 	     * We need to suppress this when the game is over, because death
 	     * can change the value calculated by can_pray(), potentially
 	     * resulting in a false claim that you could have prayed safely.
 	     */
 	  if (!final) {
+#if 0 /*JP*/
 #if 0
 	    /* "can [not] safely pray" vs "could [not] have safely prayed" */
 	    Sprintf(buf, "%s%ssafely pray%s", can_pray(FALSE) ? "" : "not ",
@@ -1544,6 +2029,13 @@
 	    if (wizard) Sprintf(eos(buf), " (%d)", u.ublesscnt);
 #endif
 	    you_can(buf);
+#else /*JP*/
+	    Strcpy(buf, "あなたは安全に祈ることが");
+	    if(can_pray(FALSE))
+	      enl_msg(buf, "できる", "できた", "");
+	    else
+	      enl_msg(buf, "できない", "できなかった", "");
+#endif /*JP*/
 #if 0	/* WAC -- replaced by techniques */
 /*	    Sprintf(buf, "%s%suse%s your special", !u.unextuse ? "" : "not ",
 		    final ? "have " : "", final ? "d" : "");*/
@@ -1560,6 +2052,7 @@
 
 	buf[0] = '\0';
 	if (final < 2) {    /* still in progress, or quit/escaped/ascended */
+#if 0 /*JP*/
 	    p = "survived after being killed ";
 	    switch (u.umortality) {
 	    case 0:  p = !final ? (char *)0 : "survived";  break;
@@ -1569,7 +2062,19 @@
 	    default: Sprintf(buf, "%d times", u.umortality);
 		     break;
 	    }
+#else
+	    p = "死んだ後復活していた";
+	    switch (u.umortality) {
+	    case 0:  p = !final ? (char *)0 : "生き延びた";  break;
+	    case 1:  Strcpy(buf, "一度");  break;
+	    case 2:  Strcpy(buf, "二度");  break;
+	    case 3:  Strcpy(buf, "三度");  break;
+	    default: Sprintf(buf, "%d回", u.umortality);
+		     break;
+	    }
+#endif
 	} else {		/* game ended in character's death */
+#if 0 /*JP*/
 	    p = "are dead";
 	    switch (u.umortality) {
 	    case 0:  impossible("dead without dying?");
@@ -1578,8 +2083,21 @@
 			     ordin(u.umortality));
 		     break;
 	    }
+#else
+	    p = "死んでいる";
+	    switch (u.umortality) {
+	    case 0:  impossible("dead without dying?");
+	    case 1:  break;			/* just "are dead" */
+	    default: Sprintf(buf, "(%d回！)", u.umortality);
+		     break;
+	    }
+#endif
 	}
+#if 0 /*JP*/
 	if (p) enl_msg(You_, "have been killed ", p, buf);
+#else
+	if (p) enl_msg(You_, "死んでいる", p, buf);
+#endif
     }
 
 	display_nhwindow(en_win, TRUE);
@@ -1614,78 +2132,171 @@
 	buf[0] = buf2[0] = '\0';
 	tmpwin = create_nhwindow(NHW_MENU);
 	start_menu(tmpwin);
+#if 0 /*JP*/
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "Starting", FALSE);
+#else
+	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "開始", FALSE);
+#endif
 
 	/* Starting name, race, role, gender */
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "name", plname);
+#else
+	Sprintf(buf, fmtstr, "名前", plname);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "race", urace.noun);
+#else
+	Sprintf(buf, fmtstr, "種族", urace.j);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "role",
 		(flags.initgend && urole.name.f) ? urole.name.f : urole.name.m);
+#else
+	Sprintf(buf, fmtstr, "職業",
+		(flags.initgend && urole.jname.f) ? urole.jname.f : urole.jname.m);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "gender", genders[flags.initgend].adj);
+#else
+	Sprintf(buf, fmtstr, "性別", genders[flags.initgend].j);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 
 	/* Starting alignment */
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "alignment", align_str(u.ualignbase[A_ORIGINAL]));
+#else
+	Sprintf(buf, fmtstr, "属性", align_str(u.ualignbase[A_ORIGINAL]));
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 
 	/* Current name, race, role, gender */
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", FALSE);
+#if 0 /*JP*/
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "Current", FALSE);
 	Sprintf(buf, fmtstr, "race", Upolyd ? youmonst.data->mname : urace.noun);
+#else
+	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "現在", FALSE);
+	Sprintf(buf, fmtstr, "種族", Upolyd ? jtrns_mon_gen(youmonst.data->mname, flags.female) : urace.j);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 	if (Upolyd) {
+#if 0 /*JP*/
 	    Sprintf(buf, fmtstr, "role (base)",
 		(u.mfemale && urole.name.f) ? urole.name.f : urole.name.m);
+#else
+	    Sprintf(buf, fmtstr, "職業(基本)",
+		(u.mfemale && urole.jname.f) ? urole.jname.f : urole.jname.m);
+#endif
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 	} else {
+#if 0 /*JP*/
 	    Sprintf(buf, fmtstr, "role",
 		(flags.female && urole.name.f) ? urole.name.f : urole.name.m);
+#else
+	    Sprintf(buf, fmtstr, "職業",
+		(flags.female && urole.jname.f) ? urole.jname.f : urole.jname.m);
+#endif
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 	}
 	/* don't want poly_gender() here; it forces `2' for non-humanoids */
 	genidx = is_neuter(youmonst.data) ? 2 : flags.female;
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "gender", genders[genidx].adj);
+#else
+	Sprintf(buf, fmtstr, "性別", genders[genidx].j);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 	if (Upolyd && (int)u.mfemale != genidx) {
+#if 0 /*JP*/
 	    Sprintf(buf, fmtstr, "gender (base)", genders[u.mfemale].adj);
+#else
+	    Sprintf(buf, fmtstr, "性別(基本)", genders[u.mfemale].j);
+#endif
 	    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 	}
 
 	/* Current alignment */
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "alignment", align_str(u.ualign.type));
+#else
+	Sprintf(buf, fmtstr, "属性", align_str(u.ualign.type));
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 
 	/* Deity list */
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "", FALSE);
+#if 0 /*JP*/
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "Deities", FALSE);
+#else
+	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings, "神", FALSE);
+#endif
 	Sprintf(buf2, deity_fmtstr, align_gname(A_CHAOTIC),
+#if 0 /*JP*/
 	    (u.ualignbase[A_ORIGINAL] == u.ualign.type
 		&& u.ualign.type == A_CHAOTIC) ? " (s,c)" :
 	    (u.ualignbase[A_ORIGINAL] == A_CHAOTIC)       ? " (s)" :
 	    (u.ualign.type   == A_CHAOTIC)       ? " (c)" : "");
+#else
+	    (u.ualignbase[A_ORIGINAL] == u.ualign.type
+		&& u.ualign.type == A_CHAOTIC) ? " (初，現)" :
+	    (u.ualignbase[A_ORIGINAL] == A_CHAOTIC)       ? " (初)" :
+	    (u.ualign.type   == A_CHAOTIC)       ? " (現)" : "");
+#endif
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "Chaotic", buf2);
+#else
+	Sprintf(buf, fmtstr, "混沌", buf2);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 
 	Sprintf(buf2, deity_fmtstr, align_gname(A_NEUTRAL),
+#if 0 /*JP*/
 	    (u.ualignbase[A_ORIGINAL] == u.ualign.type
 		&& u.ualign.type == A_NEUTRAL) ? " (s,c)" :
 	    (u.ualignbase[A_ORIGINAL] == A_NEUTRAL)       ? " (s)" :
 	    (u.ualign.type   == A_NEUTRAL)       ? " (c)" : "");
+#else
+	    (u.ualignbase[A_ORIGINAL] == u.ualign.type
+		&& u.ualign.type == A_NEUTRAL) ? " (初，現)" :
+	    (u.ualignbase[A_ORIGINAL] == A_NEUTRAL)       ? " (初)" :
+	    (u.ualign.type   == A_NEUTRAL)       ? " (現)" : "");
+#endif
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "Neutral", buf2);
+#else
+	Sprintf(buf, fmtstr, "中立", buf2);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 
 	Sprintf(buf2, deity_fmtstr, align_gname(A_LAWFUL),
+#if 0 /*JP*/
 	    (u.ualignbase[A_ORIGINAL] == u.ualign.type &&
 		u.ualign.type == A_LAWFUL)  ? " (s,c)" :
 	    (u.ualignbase[A_ORIGINAL] == A_LAWFUL)        ? " (s)" :
 	    (u.ualign.type   == A_LAWFUL)        ? " (c)" : "");
+#else
+	    (u.ualignbase[A_ORIGINAL] == u.ualign.type &&
+		u.ualign.type == A_LAWFUL)  ? " (初，現)" :
+	    (u.ualignbase[A_ORIGINAL] == A_LAWFUL)        ? " (初)" :
+	    (u.ualign.type   == A_LAWFUL)        ? " (現)" : "");
+#endif
+#if 0 /*JP*/
 	Sprintf(buf, fmtstr, "Lawful", buf2);
+#else
+	Sprintf(buf, fmtstr, "秩序", buf2);
+#endif
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, FALSE);
 
+#if 0 /*JP*/
 	end_menu(tmpwin, "Base Attributes");
+#else
+	end_menu(tmpwin, "基本属性");
+#endif
 	n = select_menu(tmpwin, PICK_NONE, &selected);
 	destroy_nhwindow(tmpwin);
 	return (n != -1);
@@ -1702,6 +2313,7 @@
 }
 
 static const struct menu_tab game_menu[] = {
+#if 0 /*JP*/
 	{'O', TRUE, doset, "Options"},
 	{'r', TRUE, doredraw, "Redraw Screen"},
 	{'x', TRUE, enter_explore_mode, "Enter Explore Mode"},
@@ -1710,10 +2322,21 @@
 #endif
 	{'S', TRUE, dosave, "Save"},
 	{'q', TRUE, done2, "Quit [M-q]"},
+#else /*JP*/
+	{'O', TRUE, doset, "オプション"},
+	{'r', TRUE, doredraw, "再描画する"},
+	{'x', TRUE, enter_explore_mode, "探索モードに入る"},
+#ifdef SHELL
+	{'!', TRUE, dosh, "Shellを呼び出す"},
+#endif
+	{'S', TRUE, dosave, "保存して終了"},
+	{'q', TRUE, done2, "保存せずに終了 [M-q]"},
+#endif /*JP*/
 	{0,0,0,0},
 };
 
 static const struct menu_tab inv_menu[] = {
+#if 0 /*JP*/
 	{(char)0, TRUE, (void *)0, "View Inventory"},
 	{'i', TRUE, ddoinv, "Inventory List"},
 	{'I', TRUE, dotypeinv, "Inventory List by Type"},
@@ -1733,10 +2356,32 @@
 	{(char)0, TRUE, (void *)0, "Drop Items"},
 	{'d', FALSE, dodrop, "Drop an object"},
 	{'D', FALSE, doddrop, "Multi-Drop"},
+#else /*JP*/
+	{(char)0, TRUE, (void *)0, "持ち物表示"},
+	{'i', TRUE, ddoinv, "持ち物一覧"},
+	{'I', TRUE, dotypeinv, "種類別の持ち物一覧"},
+	{'*', TRUE, doprinuse, "使用できるアイテム"},
+	{(char)0, TRUE, (void *)0, "装備する"},
+	{'w', FALSE, dowield, "武器の装備"},
+	{'W', FALSE, dowear, "防具の装備"},
+	{'Q', FALSE, dowieldquiver, "射出武器の準備 (矢筒に)"},
+	{'T', FALSE, dotakeoff, "防具を脱ぐ"},
+	{(char)0, TRUE, (void *)0, "使用する"},
+	{'a', FALSE, doapply, "アイテムを使用する"},
+	{'d', FALSE, dodip, "アイテムを漬ける [M-d]"},
+	{'E', FALSE, doengrave, "床に文字を書く"},
+	{'f', FALSE, dofire, "射撃武器を射出する"},
+	{'e', TRUE, doinvoke, "聖器を発動させる [M-i]"},
+	{'t', FALSE, dothrow, "投げる"},
+	{(char)0, TRUE, (void *)0, "落す"},
+	{'d', FALSE, dodrop, "アイテムを落す"},
+	{'D', FALSE, doddrop, "複数選択で落す"},
+#endif /*JP*/
 	{0,0,0,0}
 };
 
 static const struct menu_tab action_menu[] = {
+#if 0 /*JP*/
 	{'c', FALSE, doclose, "Close a door"},
 	{'e', FALSE, doeat, "Eat some food"},
 	{'f', FALSE, doforce, "Force a lock [M-f]"},
@@ -1747,10 +2392,23 @@
 	{'u', FALSE, dountrap, "Untrap"}, 
 	{'z', FALSE, dozap, "Zap a wand"},
 	{'Z', TRUE, docast, "Cast a spell"},
+#else /*JP*/
+	{'c', FALSE, doclose, "扉を閉める"},
+	{'e', FALSE, doeat, "食事をとる"},
+	{'f', FALSE, doforce, "鍵をこじ開ける [M-f]"},
+	{'l', FALSE, doloot, "ものを調べる"},
+	{'o', FALSE, doopen, "扉を開ける"},
+	{'q', TRUE, dodrink, "水薬を飲む"},
+	{'r', FALSE, doread, "読む"},
+	{'u', FALSE, dountrap, "解除する [M-u]"}, 
+	{'z', FALSE, dozap, "杖を振る"},
+	{'Z', TRUE, docast, "魔法を詠唱"},
+#endif /*JP*/
 	{0,0,0,0}
 };
 
 static const struct menu_tab player_menu[] = {
+#if 0 /*JP*/
 	{'b', FALSE, playersteal, "Steal from Monsters [M-b]"},
 	{'c', TRUE, dotalk, "Chat with Monsters [M-c]"},
 	{'d', FALSE, dokick, "Do Kick"}, 
@@ -1765,11 +2423,28 @@
 	{'T', TRUE, dotech, "Use Techniques [M-t]"},
 	{'x', TRUE, doattributes, "Show attributes"},
 	{'y', TRUE, polyatwill, "Self-Polymorph [M-y]"},
+#else /*JP*/
+	{'b', FALSE, playersteal, "怪物から盗む [M-b]"},
+	{'c', TRUE, dotalk, "怪物と話す [M-c]"},
+	{'d', FALSE, dokick, "蹴る"}, 
+/*	{'e', FALSE, specialpower, "職業の特殊能力を使う [M-e]"},*/
+	{'e', TRUE, enhance_weapon_skill, "武器スキル [M-k]"},
+	{'m', TRUE, domonability, "種族の能力を使用する [M-m]"},
+	{'o', FALSE, dosacrifice, "捧げる [M-o]"},
+	{'p', FALSE, dopay, "店主に支払う[M-p]"},
+	{'s', FALSE, dosit, "座る [M-s]"},
+	{'t', TRUE, dotele, "瞬間移動する [C-t]"},
+/*	{'T', TRUE, doturn, "不死者を還す [M-t]"},*/
+	{'T', TRUE, dotech, "特殊能力を使う [M-t]"},
+	{'x', TRUE, doattributes, "属性を見る [C-x]"},
+	{'y', TRUE, polyatwill, "変身する [M-y]"},
+#endif /*JP*/
 	{0,0,0,0}
 };
 
 #ifdef WIZARD
 static const struct menu_tab wizard_menu[] = {
+#if 0 /*JP*/
 	{'c', TRUE, wiz_gain_ac, "Increase AC"},
 #ifdef DISPLAY_LAYERS
 	{'d', TRUE, wiz_show_display, "Detail display layers"},
@@ -1792,19 +2467,51 @@
 #ifdef DEBUG
 	{'&', TRUE, wiz_debug_cmd, "wizard debug command"},
 #endif
+#else /*JP*/
+	{'c', TRUE, wiz_gain_ac, "ACの上昇"},
+#ifdef DISPLAY_LAYERS
+	{'d', TRUE, wiz_show_display, "表示レイヤーの詳細"},
+#endif
+	{'e', TRUE, wiz_detect, "扉と罠の表示"},
+	{'f', TRUE, wiz_map, "魔法の地図の実行"},
+	{'g', TRUE, wiz_genesis, "怪物生成"},
+	{'i', TRUE, wiz_identify, "所持品の鑑定"},
+	{'j', TRUE, wiz_gain_level, "経験レベルの上昇"},
+	{'n', TRUE, wiz_toggle_invulnerability, "無敵化トグル"},
+	{'o', TRUE, wiz_where, "特殊レベルの一覧"},
+	{'v', TRUE, wiz_level_tele, "レベルテレポート"},
+	{'w', TRUE, wiz_wish,  "願いを叶える"},
+	{'L', TRUE, wiz_light_sources, "移動光源を見る"},
+	{'M', TRUE, wiz_show_stats, "メモリー状態を見る"},
+	{'S', TRUE, wiz_show_seenv, "show seen vectors"},
+	{'T', TRUE, wiz_timeout_queue, "タイムアウトキューの表示"},
+	{'V', TRUE, wiz_show_vision, "視界配列の参照"},
+	{'W', TRUE, wiz_show_wmodes, "壁透視モード"},
+#ifdef DEBUG
+	{'&', TRUE, wiz_debug_cmd, "wizard debug command"},
+#endif
+#endif /*JP*/
 	{0,0,0,0,0},
 };
 #endif
 
 static const struct menu_tab help_menu[] = {
+#if 0 /*JP*/
 	{'?', TRUE, dohelp, "Help Contents"},
 	{'v', TRUE, doextversion, "Version"},
 	{'/', TRUE, dowhatis, "Identify an object on the screen" },
 	{'&', TRUE, dowhatdoes, "Determine what a key does"},
+#else
+	{'?', TRUE, dohelp, "ヘルプ一覧"},
+	{'v', TRUE, doextversion, "バージョン"},
+	{'/', TRUE, dowhatis, "画面上の文字の意味を調べる" },
+	{'&', TRUE, dowhatdoes, "キーの動作を調べる"},
+#endif
 	{0,0,0,0,0},
 };
 
 static const struct menu_tab main_menu[] = {
+#if 0 /*JP*/
 	{'g', TRUE, (void *)0, "Game"},
 	{'i', TRUE, (void *)0, "Inventory"},
 	{'a', TRUE, (void *)0, "Action"},
@@ -1814,17 +2521,35 @@
 	{'w', TRUE, (void *)0, "Wizard"},
 #endif
 	{'?', TRUE, (void *)0, "Help"},
+#else /*JP*/
+	{'g', TRUE, (void *)0, "ゲーム"},
+	{'i', TRUE, (void *)0, "所持品"},
+	{'a', TRUE, (void *)0, "行動"},
+	{'p', TRUE, (void *)0, "プレイヤー"},
+	{'d', TRUE, (void *)0, "発見物"},
+#ifdef WIZARD
+	{'w', TRUE, (void *)0, "Wizard"},
+#endif
+	{'?', TRUE, (void *)0, "ヘルプ"},
+#endif /*JP*/
 	{0,0,0,0},
 };
 
 static const struct menu_tab discover_menu[] = {
+#if 0 /*JP*/
 	{'X', TRUE, dovspell, "View known spells"},                  /* Mike Stephenson */
 	{'d', TRUE, dodiscovered, "Items already discovered [\\]"},             /* Robert Viduya */
 	{'C', TRUE, do_mname, "Name a monster"},
+#else
+	{'X', TRUE, dovspell, "記憶済み魔法"},                  /* Mike Stephenson */
+	{'d', TRUE, dodiscovered, "発見済みアイテム [\\]"},             /* Robert Viduya */
+	{'C', TRUE, do_mname, "画面上の怪物の名前"},
+#endif
 	{0,0,0,0},
 };
 
 static struct menu_list main_menustruct[] = {
+#if 0 /*JP*/
 	{"Game", "Main Menu", game_menu},
 	{"Inventory", "Main Menu", inv_menu},
 	{"Action", "Main Menu", action_menu},
@@ -1836,6 +2561,19 @@
 	{"Help", "Main Menu", help_menu},
 	{"Main Menu",(char *)0, main_menu},
 	{0,0,0},
+#else /*JP*/
+	{"ゲーム", "メインメニュー", game_menu},
+	{"所持品", "メインメニュー", inv_menu},
+	{"行動", "メインメニュー", action_menu},
+	{"プレイヤー", "メインメニュー", player_menu},
+	{"発見物", "メインメニュー", discover_menu},
+#ifdef WIZARD
+	{"Wizard", "メインメニュー", wizard_menu},
+#endif
+	{"ヘルプ", "メインメニュー", help_menu},
+	{"メインメニュー",(char *)0, main_menu},
+	{0,0,0},
+#endif /*JP*/
 };
 
 STATIC_PTR int
@@ -1902,7 +2640,11 @@
 STATIC_PTR int
 domenusystem()  /* WAC add helpful menus ;B */
 {
+#if 0 /*JP*/
         return (makemenu("Main Menu", main_menustruct));
+#else
+        return (makemenu("メインメニュー", main_menustruct));
+#endif
 }
 
 /* KMH, #conduct
@@ -1936,19 +2678,34 @@
 	} else {
 	    int absamt = abs(incamt);
 
+#if 0 /*JP*/
 	    if (absamt <= 3) modif = "small";
 	    else if (absamt <= 6) modif = "moderate";
 	    else if (absamt <= 12) modif = "large";
 	    else modif = "huge";
+#else
+	    if (absamt <= 3) modif = "僅かな";
+	    else if (absamt <= 6) modif = "中程度の";
+	    else if (absamt <= 12) modif = "大きな";
+	    else modif = "強大な";
+#endif
 	}
+#if 0 /*JP*/
 	bonus = (incamt > 0) ? "bonus" : "penalty";
+#else
+	bonus = (incamt > 0) ? "ボーナス" : "ペナルティ";
+#endif
 	/* "bonus to hit" vs "damage bonus" */
 	if (!strcmp(inctyp, "damage")) {
 	    const char *ctmp = inctyp;
 	    inctyp = bonus;
 	    bonus = ctmp;
 	}
+#if 0 /*JP*/
 	Sprintf(outbuf, "%s %s %s", an(modif), bonus, inctyp);
+#else
+	Sprintf(outbuf, "%sに%s%s", inctyp, modif, bonus);
+#endif
 	return outbuf;
 }
 
@@ -1961,94 +2718,195 @@
 
 	/* Create the conduct window */
 	en_win = create_nhwindow(NHW_MENU);
+#if 0 /*JP*/
 	putstr(en_win, 0, "Voluntary challenges:");
+#else
+	putstr(en_win, 0, "自発的挑戦:");
+#endif
 	putstr(en_win, 0, "");
 
 	if (!u.uconduct.food && !u.uconduct.unvegan)
+#if 0 /*JP*/
 	    enl_msg(You_, "have gone", "went", " without food");
+#else
+	    enl_msg("あなたは食事をし", "ていない", "なかった", "");
+#endif
 	    /* But beverages are okay */
 	else if (!u.uconduct.food)
+#if 0 /*JP*/
 	    enl_msg(You_, "have gone", "went", " without eating");
+#else
+	    enl_msg("あなたは何も口にし", "ていない", "なかった", "");
+#endif
 	    /* But quaffing animal products (eg., blood) is okay */
 	else if (!u.uconduct.unvegan)
+#if 0 /*JP*/
 	    you_have_X("followed a strict vegan diet");
+#else
+	    you_are("厳格な菜食主義者");
+#endif
 	else if (!u.uconduct.unvegetarian)
+#if 0 /*JP*/
 	    you_have_been("vegetarian");
+#else
+	    you_are("菜食主義者");
+#endif
 
 	if (!u.uconduct.gnostic)
+#if 0 /*JP*/
 	    you_have_been("an atheist");
+#else
+	    you_are("無神論者");
+#endif
 
 	if (!u.uconduct.weaphit)
+#if 0 /*JP*/
 	    you_have_never("hit with a wielded weapon");
+#else
+	    enl_msg("あなたは装備している武器で攻撃し", "ていない", "なかった", "");
+#endif
 #ifdef WIZARD
 	else if (wizard) {
+#if 0 /*JP*/
 	    Sprintf(buf, "used a wielded weapon %ld time%s",
 		    u.uconduct.weaphit, plur(u.uconduct.weaphit));
 	    you_have_X(buf);
+#else
+	    Sprintf(buf, "あなたは%ld回装備した武器を使用し",
+		    u.uconduct.weaphit);
+	    enl_msg(buf, "ている", "た", "");
+#endif
 	}
 #endif
 	if (!u.uconduct.killer)
+#if 0 /*JP*/
 	    you_have_been("a pacifist");
+#else
+	    you_are("平和主義者");
+#endif
 
 	if (!u.uconduct.literate)
+#if 0 /*JP*/
 	    you_have_been("illiterate");
+#else
+	    enl_msg("あなたは読み書きし", "ていない", "なかった", "");
+#endif
 #ifdef WIZARD
 	else if (wizard) {
+#if 0 /*JP*/
 	    Sprintf(buf, "read items or engraved %ld time%s",
 		    u.uconduct.literate, plur(u.uconduct.literate));
 	    you_have_X(buf);
+#else
+	    Sprintf(buf, "%ld回読んだり書いたりし",
+		    u.uconduct.literate);
+	    enl_msg(buf, "ている", "た", "");
+#endif
 	}
 #endif
 
 	ngenocided = num_genocides();
 	if (ngenocided == 0) {
+#if 0 /*JP*/
 	    you_have_never("genocided any monsters");
+#else
+	    enl_msg("あなたは怪物を虐殺し", "ていない", "なかった", "");
+#endif
 	} else {
+#if 0 /*JP*/
 	    Sprintf(buf, "genocided %d type%s of monster%s",
 		    ngenocided, plur(ngenocided), plur(ngenocided));
 	    you_have_X(buf);
+#else
+	    Sprintf(buf, "%d種の怪物を虐殺し",
+		    ngenocided);
+	    enl_msg(buf, "ている", "た", "");
+#endif
 	}
 
 	if (!u.uconduct.polypiles)
+#if 0 /*JP*/
 	    you_have_never("polymorphed an object");
+#else
+	    enl_msg("あなたは物体を変化させ", "ていない", "なかった", "");
+#endif
 #ifdef WIZARD
 	else if (wizard) {
+#if 0 /*JP*/
 	    Sprintf(buf, "polymorphed %ld item%s",
 		    u.uconduct.polypiles, plur(u.uconduct.polypiles));
 	    you_have_X(buf);
+#else
+	    Sprintf(buf, "%ld個の道具を変化させ",
+		    u.uconduct.polypiles);
+	    enl_msg(buf, "ている", "た", "");
+#endif
 	}
 #endif
 
 	if (!u.uconduct.polyselfs)
+#if 0 /*JP*/
 	    you_have_never("changed form");
+#else
+	    enl_msg("あなたは変化し", "ていない", "なかった", "");
+#endif
 #ifdef WIZARD
 	else if (wizard) {
+#if 0 /*JP*/
 	    Sprintf(buf, "changed form %ld time%s",
 		    u.uconduct.polyselfs, plur(u.uconduct.polyselfs));
 	    you_have_X(buf);
+#else
+	    Sprintf(buf, "%ld回姿を変え",
+		    u.uconduct.polyselfs);
+	    enl_msg(buf, "ている", "た", "");
+#endif
 	}
 #endif
 
 	if (!u.uconduct.wishes)
+#if 0 /*JP*/
 	    you_have_X("used no wishes");
+#else
+	    enl_msg("あなたは願い事をし", "ていない", "なかった", "");
+#endif
 	else {
+#if 0 /*JP*/
 	    Sprintf(buf, "used %ld wish%s",
 		    u.uconduct.wishes, (u.uconduct.wishes > 1L) ? "es" : "");
 	    you_have_X(buf);
+#else
+	    Sprintf(buf, "%ld回願い事をし",
+		    u.uconduct.wishes);
+	    enl_msg(buf, "ている", "た", "");
+#endif
 
 	    if (!u.uconduct.wisharti)
+#if 0 /*JP*/
 		enl_msg(You_, "have not wished", "did not wish",
 			" for any artifacts");
+#else
+		enl_msg("あなたは聖器を願", "っていない", "わなかった", "");
+#endif
 	}
 
 
 	if (!u.uconduct.celibacy)
+#if 0 /*JP*/
 		you_have_X("remained celibate");
+#else
+		you_are_ing("禁欲を貫いて");
+#endif
 #ifdef WIZARD
 	else if (wizard) {
+#if 0 /*JP*/
 		Sprintf(buf, "broken your vow of celibacy %ld time%s.",
 			u.uconduct.celibacy, u.uconduct.celibacy > 1 ? "s" : "");
 		you_have_X(buf);
+#else
+		Sprintf(buf, "純潔の誓約を%ld回破って", u.uconduct.celibacy);
+		you_are_ing(buf);
+#endif
 	}
 #endif
 
@@ -2160,7 +3018,10 @@
 	{'r', FALSE, doread},
 	{'R', FALSE, doremring},
 	{M('r'), FALSE, dorub},
+/*JP
 	{'s', TRUE, dosearch, "searching"},
+*/
+	{'s', TRUE, dosearch, "捜す"},
 	{'S', TRUE, dosave},
 	{M('s'), FALSE, dosit},
 	{'t', FALSE, dothrow},
@@ -2195,18 +3056,28 @@
 #ifdef SHELL
 	{'!', TRUE, dosh},
 #endif
+#if 0 /*JP*/
 	{'.', TRUE, donull, "waiting"},
 	{' ', TRUE, donull, "waiting"},
+#else
+	{'.', TRUE, donull, "休憩する"},
+	{' ', TRUE, donull, "休憩する"},
+#endif
 	{',', FALSE, dopickup},
 	{':', TRUE, dolook},
 	{';', TRUE, doquickwhatis},
 	{'^', TRUE, doidtrap},
 	{'\\', TRUE, dodiscovered},		/* Robert Viduya */
 	{'@', TRUE, dotogglepickup},
+#if 1 /*JP*/
+	{'`', TRUE, dotogglelang},
+#endif
 	{M('2'), FALSE, dotwoweapon},
 /* WAC Angband style items in use, menusystem
 	{'*', TRUE, doinvinuse}, */
+#if 0 /*JP*/
 	{'`', TRUE, domenusystem},
+#endif
 	{'~', TRUE, domenusystem},
 	{WEAPON_SYM,  TRUE, doprwep},
 	{ARMOR_SYM,  TRUE, doprarm},
@@ -2222,6 +3093,7 @@
 };
 
 struct ext_func_tab extcmdlist[] = {
+#if 0 /*JP*/
 	{"2weapon", "toggle two-weapon combat", dotwoweapon, FALSE},
 	{"adjust", "adjust inventory letters", doorganize, TRUE},
 	{"borrow", "steal from monsters", playersteal, FALSE},  /* jla */        
@@ -2259,8 +3131,48 @@
 	{"version", "list compile time options for this version of Slash'EM",
 		doextversion, TRUE},
 	{"wipe", "wipe off your face", dowipe, FALSE},
-	{"youpoly", "polymorph at will", polyatwill, FALSE},  /* jla */        
+	{"youpoly", "polymorph at will", polyatwill, FALSE},  /* jla */
 	{"?", "get this list of extended commands", doextlist, TRUE},
+#else /*JP*/
+	{"2weapon", "両手持ちの切り替え", dotwoweapon, FALSE},
+	{"adjust", "持ち物一覧の調整", doorganize, TRUE},
+	{"borrow", "モンスターから盗む", playersteal, FALSE},  /* jla */
+	{"chat", "誰かと話す", dotalk, TRUE},	/* converse? */
+	{"conduct", "どういう行動をとったか見る", doconduct, TRUE},
+	{"dip", "何かに物を浸す", dodip, FALSE},
+	{"enhance", "武器熟練度を高める", enhance_weapon_skill, TRUE},
+#if 0
+	{"ethics", "自発的挑戦一覧", doethics, TRUE},
+#endif
+	{"explore", "探索モードに入る", enter_explore_mode, TRUE},
+	{"force", "鍵をこじあける", doforce, FALSE},
+	{"invoke", "物の特別な力を使う", doinvoke, TRUE},
+	{"jump", "他の位置に飛びうつる", dojump, FALSE},
+	{"loot", "床の上の箱を開ける", doloot, TRUE},
+	{"monster", "怪物の特別能力を使う", domonability, TRUE},
+	{"name", "アイテムや物に名前をつける", ddocall, TRUE},
+	{"offer", "神に供物を捧げる", dosacrifice, FALSE},
+	{"pray", "神に祈る", dopray, TRUE},
+	{"quit", "セーブしないで終了", done2, TRUE},
+#ifdef STEED
+	{"ride", "怪物に乗る(または降りる)", doride, FALSE},
+#endif
+	{"rub", "ランプをこする", dorub, FALSE},
+#ifdef SHOUT
+	{"shout", "大声で叫ぶ", doyell, TRUE}, /* jrn */
+#endif
+	{"sit", "座る", dosit, FALSE},
+	{"technique", "技を行使する", dotech, TRUE},
+	{"turn", "アンデットを土に返す", doturn, TRUE},
+	{"twoweapon", "両手持ちの切り替え", dotwoweapon, FALSE},
+	{"untrap", "罠をはずす", dountrap, FALSE},
+	{"vanquished", "倒したモンスター一覧", dolistvanq, TRUE},
+	{"version", "コンパイル時のオプションを表示する",
+		doextversion, TRUE},
+	{"wipe", "顔を拭う", dowipe, FALSE},
+	{"youpoly", "意識的に変身する", polyatwill, FALSE},  /* jla */
+	{"?", "この拡張コマンド一覧を表示する", doextlist, TRUE},
+#endif
 #if defined(WIZARD)
 	/*
 	 * There must be a blank entry here for every entry in the table
@@ -2294,6 +3206,7 @@
 
 #if defined(WIZARD)
 static const struct ext_func_tab debug_extcmdlist[] = {
+#if 0 /*JP*/
 #ifdef DISPLAY_LAYERS
 	{"display", "detail display layers", wiz_show_display, TRUE},
 #endif
@@ -2316,6 +3229,30 @@
 	{"wizdebug", "wizard debug command", wiz_debug_cmd, TRUE},
 #endif
 	{"wmode", "show wall modes", wiz_show_wmodes, TRUE},
+#else /*JP*/
+#ifdef DISPLAY_LAYERS
+	{"display", "表示レイヤーの詳細", wiz_show_display, TRUE},
+#endif
+	{"levelchange", "経験レベルを変える", wiz_level_change, TRUE},
+	{"light sources", "移動光源を見る", wiz_light_sources, TRUE},
+#ifdef DEBUG_MIGRATING_MONS
+	{"migratemons", "指定匹数のランダムな怪物を召喚する", wiz_migrate_mons, TRUE},
+#endif
+	{"monpolycontrol", "怪物への変化を制御する", wiz_mon_polycontrol, TRUE},
+	{"panic", "パニックルーチンをテストする(致命的)", wiz_panic, TRUE},
+	{"polyself", "変化する", wiz_polyself, TRUE},
+#ifdef PORT_DEBUG
+	{"portdebug", "wizard port debug command", wiz_port_debug, TRUE},
+#endif
+	{"seenv", "視線ベクトルを見る", wiz_show_seenv, TRUE},
+	{"stats", "メモリ状態を見る", wiz_show_stats, TRUE},
+	{"timeout", "時間切れキューを見る", wiz_timeout_queue, TRUE},
+	{"vision", "視界配列を見る", wiz_show_vision, TRUE},
+#ifdef DEBUG
+	{"wizdebug", "ウィザードデバッグモード", wiz_debug_cmd, TRUE},
+#endif
+	{"wmode", "壁モードを見る", wiz_show_wmodes, TRUE},
+#endif
 	{(char *)0, (char *)0, donull, TRUE}
 };
 
@@ -2803,7 +3740,10 @@
 		if ((*cmd & 0xff) != (tlist->f_char & 0xff)) continue;
 
 		if (u.uburied && !tlist->can_if_buried) {
+/*JP
 		    You_cant("do that while you are buried!");
+*/
+		    You("埋まっている時にそんなことはできない！");
 		    res = 0;
 		} else {
 		    /* we discard 'const' because some compilers seem to have
@@ -2839,9 +3779,15 @@
 		}
 	    }
 	    *cp = '\0';
+#if 0 /*JP*/
 	    if (!prefix_seen || !iflags.cmdassist ||
 		!help_dir(0, "Invalid direction key!"))
 	    Norep("Unknown command '%s'.", expcmd);
+#else
+	    if (!prefix_seen || !iflags.cmdassist ||
+		!help_dir(0, "無効な方向指定です．"))
+		Norep("'%s'コマンド？", expcmd);
+#endif
 	}
 	/* didn't move */
 	flags.move = FALSE;
@@ -2884,6 +3830,11 @@
 	u.dx = xdir[dp-sdp];
 	u.dy = ydir[dp-sdp];
 	u.dz = zdir[dp-sdp];
+#ifdef JPEXTENSION
+	if(Totter){	/* mirror move */
+	    u.dx = -u.dx;
+	}
+#endif
 	if (u.dx && u.dy && u.umonnum == PM_GRID_BUG) {
 		u.dx = u.dy = 0;
 		return 0;
@@ -2931,8 +3882,13 @@
 	/* WAC add dirsymbols to generic prompt */
 	char buf[BUFSZ];
         
+#if 0 /*JP*/
 	Sprintf(buf, "In what direction? [%s]",
                 (iflags.num_pad ? ndir : sdir));
+#else
+	Sprintf(buf, "どの方向？ [%s]",
+                (iflags.num_pad ? ndir : sdir));
+#endif
 
 
 #ifdef REDO
@@ -2955,9 +3911,17 @@
 		if(!index(quitchars, dirsym)) {
 		    if (iflags.cmdassist) {
 			did_help = help_dir((s && *s == '^') ? dirsym : 0,
+#if 0 /*JP*/
 					    "Invalid direction key!");
+#else
+					    "無効な方向指定です．");
+#endif
 		    }
+#if 0 /*JP*/
 		    if (!did_help) pline("What a strange direction!");
+#else
+		    if (!did_help) pline("ずいぶんと奇妙な方向だ！");
+#endif
 		}
 		return 0;
 	}
@@ -3006,28 +3970,44 @@
 	    }
 	}
 	if (iflags.num_pad && u.umonnum == PM_GRID_BUG) {
+#if 0 /*JP*/
 	    putstr(win, 0, "Valid direction keys in your current form (with number_pad on) are:");
+#else
+	    putstr(win, 0, "有効な方向キー(number_pad オプション設定時):");
+#endif
 	    putstr(win, 0, "             8   ");
 	    putstr(win, 0, "             |   ");
 	    putstr(win, 0, "          4- . -6");
 	    putstr(win, 0, "             |   ");
 	    putstr(win, 0, "             2   ");
 	} else if (u.umonnum == PM_GRID_BUG) {
+#if 0 /*JP*/
 	    putstr(win, 0, "Valid direction keys in your current form are:");
+#else
+	    putstr(win, 0, "有効な方向キー:");
+#endif
 	    putstr(win, 0, "             k   ");
 	    putstr(win, 0, "             |   ");
 	    putstr(win, 0, "          h- . -l");
 	    putstr(win, 0, "             |   ");
 	    putstr(win, 0, "             j   ");
 	} else if (iflags.num_pad) {
+#if 0 /*JP*/
 	    putstr(win, 0, "Valid direction keys (with number_pad on) are:");
+#else
+	    putstr(win, 0, "有効な方向キー(number_pad オプション設定時):");
+#endif
 	    putstr(win, 0, "          7  8  9");
 	    putstr(win, 0, "           \\ | / ");
 	    putstr(win, 0, "          4- . -6");
 	    putstr(win, 0, "           / | \\ ");
 	    putstr(win, 0, "          1  2  3");
 	} else {
+#if 0 /*JP*/
 	    putstr(win, 0, "Valid direction keys are:");
+#else
+	    putstr(win, 0, "有効な方向キー:");
+#endif
 	    putstr(win, 0, "          y  k  u");
 	    putstr(win, 0, "           \\ | / ");
 	    putstr(win, 0, "          h- . -l");
@@ -3039,7 +4019,11 @@
 	putstr(win, 0, "          >  down");
 	putstr(win, 0, "          .  direct at yourself");
 	putstr(win, 0, "");
+#if 0 /*JP*/
 	putstr(win, 0, "(Suppress this message with !cmdassist in config file.)");
+#else
+	putstr(win, 0, "(このメッセージを表示したくない場合は設定ファイルに !cmdassist を設定してください．)");
+#endif
 	display_nhwindow(win, FALSE);
 	destroy_nhwindow(win);
 	return TRUE;
@@ -3229,7 +4213,10 @@
 		    if (multi < 0 || multi >= LARGEST_INT) multi = LARGEST_INT;
 		    if (multi > 9) {
 			clear_nhwindow(WIN_MESSAGE);
+/*JP
 			Sprintf(in_line, "Count: %d", multi);
+*/
+			Sprintf(in_line, "数: %d", multi);
 			pline(in_line);
 			mark_synch();
 		    }
@@ -3356,8 +4343,14 @@
 	    cc.x = u.ux;
 	    cc.y = u.uy;
 	}
+/*JP
 	pline("Where do you want to travel to?");
+*/
+	pline("どこに移動する？");
+/*JP
 	if (getpos(&cc, TRUE, "the desired destination") < 0) {
+*/
+	if (getpos(&cc, TRUE, "移動先") < 0) {
 		/* user pressed ESC */
 		return 0;
 	}
diff -aurN slashem-0.0.7E6F2/src/dbridge.c jslashem-0.0.7E6F2-J0.0.8/src/dbridge.c
--- slashem-0.0.7E6F2/src/dbridge.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dbridge.c	2004-06-27 16:52:20.000000000 +0900
@@ -10,6 +10,15 @@
  * deal with players as well. - 11/89
  */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef OVLB
@@ -309,7 +318,10 @@
 e_nam(etmp)
 struct entity *etmp;
 {
+/*JP
 	return(is_u(etmp)? "you" : mon_nam(etmp->emon));
+*/
+	return(is_u(etmp)? "あなた" : mon_nam(etmp->emon));
 }
 
 #ifdef D_DEBUG
@@ -321,7 +333,10 @@
 Enam(etmp)
 struct entity *etmp;
 {
+/*JP
 	return(is_u(etmp)? "You" : Monnam(etmp->emon));
+*/
+	return(is_u(etmp)? "あなた" : Monnam(etmp->emon));
 }
 #endif /* D_DEBUG */
 
@@ -337,6 +352,10 @@
 {
 	static char wholebuf[80];
 
+#if 1 /*JP*/
+	Strcpy(wholebuf, is_u(etmp) ? "あなた" : Monnam(etmp->emon));
+	return wholebuf;
+#else
 	Strcpy(wholebuf, is_u(etmp) ? "You" : Monnam(etmp->emon));
 	if (!*verb) return(wholebuf);
 	Strcat(wholebuf, " ");
@@ -345,6 +364,7 @@
 	else
 	    Strcat(wholebuf, vtense((char *)0, verb));
 	return(wholebuf);
+#endif
 }
 
 /*
@@ -392,14 +412,22 @@
 			/* use more specific killer if specified */
 			if (!killer) {
 			    killer_format = KILLED_BY_AN;
+/*JP
 			    killer = "falling drawbridge";
+*/
+			killer = "降りてきた跳ね橋で";
 			}
 			done(how);
 			/* So, you didn't die */
 			if (!e_survives_at(etmp, etmp->ex, etmp->ey)) {
 			    if (enexto(&xy, etmp->ex, etmp->ey, etmp->edata)) {
+#if 0 /*JP*/
 				pline("A %s force teleports you away...",
 				      Hallucination ? "normal" : "strange");
+#else
+				pline("%s力があなたを遠くに運んだ．．．",
+				      Hallucination ? "普通の" : "奇妙な");
+#endif
 				teleds(xy.x, xy.y, FALSE);
 			    }
 			    /* otherwise on top of the drawbridge is the
@@ -537,15 +565,24 @@
 
 	if (automiss(etmp) && e_survives_at(etmp, oldx, oldy)) {
 		if (e_inview && (at_portcullis || IS_DRAWBRIDGE(crm->typ)))
+#if 0 /*JP*/
 			pline_The("%s passes through %s!",
 			      at_portcullis ? "portcullis" : "drawbridge",
 			      e_nam(etmp));
+#else
+			pline_The("%sは%sを通り抜けた！",
+			      at_portcullis ? "落し格子" : "跳ね橋",
+			      e_nam(etmp));
+#endif
 		if (is_u(etmp)) spoteffects(FALSE);
 		return;
 	}
 	if (e_missed(etmp, FALSE)) {
 		if (at_portcullis)
+/*JP
 			pline_The("portcullis misses %s!",
+*/
+			pline("落し格子は%sに命中しなかった！",
 			      e_nam(etmp));
 #ifdef D_DEBUG
 		else
@@ -565,7 +602,10 @@
 		}
 	} else {
 		if (crm->typ == DRAWBRIDGE_DOWN) {
+/*JP
 			pline("%s crushed underneath the drawbridge.",
+*/
+			pline("%sは跳ね橋の下敷になった．",
 			      E_phrase(etmp, "are"));		  /* no jump */
 			e_died(etmp, e_inview? 3 : 2, CRUSHING);/* no corpse */
 			return;   /* Note: Beyond this point, we know we're  */
@@ -581,10 +621,16 @@
 #endif
 		} else {
 		    if (e_inview)
+/*JP
 			pline("%s crushed by the falling portcullis!",
+*/
+			pline("%s落ちてきた落し格子に潰された！",
 			      E_phrase(etmp, "are"));
 		    else if (flags.soundok)
+/*JP
 			You_hear("a crushing sound.");
+*/
+			You_hear("何かが潰れる音を聞いた．");
 		    e_died(etmp, e_inview? 3 : 2, CRUSHING);
 		    /* no corpse */
 		    return;
@@ -681,18 +727,33 @@
 #endif
 		if (e_inview) {
 			if (is_u(etmp)) {
+/*JP
 				You("tumble towards the closed portcullis!");
+*/
+				You("閉まりかけの落し格子をころぶようにすりぬけた！");
 				if (automiss(etmp))
+/*JP
 					You("pass through it!");
+*/
+					You("通りぬけた！");
 				else
+/*JP
 					pline_The("drawbridge closes in...");
+*/
+					pline_The("跳ね橋は閉じた．．．");
 			} else
+/*JP
 				pline("%s behind the drawbridge.",
+*/
+				pline("%sは跳ね橋の裏に移動した．",
 				      E_phrase(etmp, "disappear"));
 		}
 		if (!e_survives_at(etmp, etmp->ex, etmp->ey)) {
 			killer_format = KILLED_BY_AN;
+/*JP
 			killer = "closing drawbridge";
+*/
+			killer = "閉じていく跳ね橋に狭まれて";
 			e_died(etmp, 0, CRUSHING);	       /* no message */
 			return;
 		}
@@ -705,11 +766,17 @@
 #endif
 		if (is_pool(etmp->ex, etmp->ey) && !e_inview)
 			if (flags.soundok)
+/*JP
 				You_hear("a splash.");
+*/
+				You_hear("パシャパシャという音を聞いた．");
 		if (e_survives_at(etmp, etmp->ex, etmp->ey)) {
 			if (e_inview && !is_flyer(etmp->edata) &&
 			    !is_floater(etmp->edata))
+/*JP
 				pline("%s from the bridge.",
+*/
+				pline("%sは橋から落ちた",
 				      E_phrase(etmp, "fall"));
 			return;
 		}
@@ -722,16 +789,33 @@
 			boolean lava = is_lava(etmp->ex, etmp->ey);
 
 			if (Hallucination)
+#if 0 /*JP*/
 			    pline("%s the %s and disappears.",
 				  E_phrase(etmp, "drink"),
 				  lava ? "lava" : "moat");
+#else
+			    pline("%sは%sを飲み，消えた．",
+				  E_phrase(etmp, "drink"),
+				  lava ? "溶岩" : "堀");
+#endif
 			else
+#if 0 /*JP*/
 			    pline("%s into the %s.",
 				  E_phrase(etmp, "fall"),
 				  lava ? "lava" : "moat");
+#else
+			    pline("%sは%sの中に落ちた．",
+				  E_phrase(etmp, "fall"),
+				  lava ? "溶岩" : "堀");
+#endif
 		    }
+#if 0 /*JP:T*/
 		killer_format = NO_KILLER_PREFIX;
 		killer = "fell from a drawbridge";
+#else
+		killer_format = KILLED_BY;
+		killer = "跳ね橋から落ちて";
+#endif
 		e_died(etmp, e_inview ? 3 : 2,      /* CRUSHING is arbitrary */
 		       (is_pool(etmp->ex, etmp->ey)) ? DROWNING :
 		       (is_lava(etmp->ex, etmp->ey)) ? BURNING :
@@ -757,9 +841,13 @@
 	x2 = x; y2 = y;
 	get_wall_for_db(&x2,&y2);
 	if (cansee(x,y) || cansee(x2,y2))
+#if 0 /*JP*/
 		You("see a drawbridge %s up!",
 		    (((u.ux == x || u.uy == y) && !Underwater) ||
 		     distu(x2,y2) < distu(x,y)) ? "coming" : "going");
+#else
+		pline("跳ね橋が閉じていくのが見えた！");
+#endif
 	lev1->typ = DRAWBRIDGE_UP;
 	lev2 = &levl[x2][y2];
 	lev2->typ = DBWALL;
@@ -780,7 +868,10 @@
 	set_entity(x2, y2, &(occupants[1]));	/* do_entity for worm tail */
 	do_entity(&(occupants[1]));
 	if(OBJ_AT(x,y) && flags.soundok)
+/*JP
 	    You_hear("smashing and crushing.");
+*/
+	    You_hear("ガシャン，ガランという音を聞いた．");
 	(void) revive_nasty(x,y,(char *)0);
 	(void) revive_nasty(x2,y2,(char *)0);
 	delallobj(x, y);
@@ -809,8 +900,12 @@
 	x2 = x; y2 = y;
 	get_wall_for_db(&x2,&y2);
 	if (cansee(x,y) || cansee(x2,y2))
+#if 0 /*JP*/
 		You("see a drawbridge %s down!",
 		    (distu(x2,y2) < distu(x,y)) ? "going" : "coming");
+#else
+		pline("跳ね橋が開くのが見えた！");
+#endif
 	lev1->typ = DRAWBRIDGE_DOWN;
 	lev2 = &levl[x2][y2];
 	lev2->typ = DOOR;
@@ -856,28 +951,55 @@
 		boolean lava = (lev1->drawbridgemask & DB_UNDER) == DB_LAVA;
 		if (lev1->typ == DRAWBRIDGE_UP) {
 			if (cansee(x2,y2))
+#if 0 /*JP*/
 			    pline_The("portcullis of the drawbridge falls into the %s!",
 				  lava ? "lava" : "moat");
+#else
+			    pline("跳ね橋の落し格子が%sに落ちた！",
+				  lava ? "溶岩" : "堀");
+#endif
 			else if (flags.soundok)
+#if 0 /*JP*/
 				You_hear("a loud *SPLASH*!");
+#else
+				You_hear("大きなバッシャーンという音を聞いた！");
+#endif
 		} else {
 			if (cansee(x,y))
+#if 0 /*JP*/
 			    pline_The("drawbridge collapses into the %s!",
 				  lava ? "lava" : "moat");
+#else
+			    pline("跳ね橋は%sにくずれ落ちた！",
+				  lava ? "溶岩" : "堀");
+#endif
 			else if (flags.soundok)
+#if 0 /*JP*/
 				You_hear("a loud *SPLASH*!");
+#else
+				You_hear("大きなバッシャーンという音を聞いた！");
+#endif
 		}
 		lev1->typ = lava ? LAVAPOOL : MOAT;
 		lev1->drawbridgemask = 0;
 		if ((otmp = sobj_at(BOULDER,x,y)) != 0) {
 		    obj_extract_self(otmp);
+/*JP
 		    (void) flooreffects(otmp,x,y,"fall");
+*/
+		    (void) flooreffects(otmp,x,y,"落ちる");
 		}
 	} else {
 		if (cansee(x,y))
+/*JP
 			pline_The("drawbridge disintegrates!");
+*/
+			pline("跳ね橋はこなごなになった！");
 		else
+/*JP
 			You_hear("a loud *CRASH*!");
+*/
+			You_hear("大きなガシャーンという音を聞いた！");
 		lev1->typ =
 			((lev1->drawbridgemask & DB_ICE) ? ICE : ROOM);
 		lev1->icedpool =
@@ -898,10 +1020,16 @@
 		e_inview = e_canseemon(etmp2);
 		if (!automiss(etmp2)) {
 			if (e_inview)
+/*JP
 				pline("%s blown apart by flying debris.",
+*/
+				pline("%sは飛び散った瓦礫の破片を浴びた．",
 				      E_phrase(etmp2, "are"));
 			killer_format = KILLED_BY_AN;
+/*JP
 			killer = "exploding drawbridge";
+*/
+			killer = "跳ね橋の爆発で";
 			e_died(etmp2, e_inview? 3 : 2, CRUSHING); /*no corpse*/
 		}	     /* nothing which is vulnerable can survive this */
 	}
@@ -915,14 +1043,23 @@
 		} else {
 			if (e_inview) {
 			    if (!is_u(etmp1) && Hallucination)
+/*JP
 				pline("%s into some heavy metal!",
+*/
+				pline("%sは重金属に埋もれた！",
 				      E_phrase(etmp1, "get"));
 			    else
+/*JP
 				pline("%s hit by a huge chunk of metal!",
+*/
+				pline("大きな鉄の塊が%sに命中した！",
 				      E_phrase(etmp1, "are"));
 			} else {
 			    if (flags.soundok && !is_u(etmp1) && !is_pool(x,y))
+/*JP
 				You_hear("a crushing sound.");
+*/
+				You_hear("ガランという音を聞いた．");
 #ifdef D_DEBUG
 			    else
 				pline("%s from shrapnel",
@@ -930,7 +1067,10 @@
 #endif
 			}
 			killer_format = KILLED_BY_AN;
+/*JP
 			killer = "collapsing drawbridge";
+*/
+			killer = "バラバラになった跳ね橋で";
 			e_died(etmp1, e_inview? 3 : 2, CRUSHING); /*no corpse*/
 			if(lev1->typ == MOAT) do_entity(etmp1);
 		}
diff -aurN slashem-0.0.7E6F2/src/decl.c jslashem-0.0.7E6F2-J0.0.8/src/decl.c
--- slashem-0.0.7E6F2/src/decl.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/decl.c	2004-06-27 16:52:24.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 int NDECL((*afternmv));
@@ -230,13 +239,21 @@
 NEARDATA struct mvitals mvitals[NUMMONS];
 
 NEARDATA struct c_color_names c_color_names = {
+#if 0 /*JP*/
 	"black", "amber", "golden",
 	"light blue", "red", "green",
 	"silver", "blue", "purple",
 	"white"
+#else
+	"黒い", "琥珀色の", "金色の",
+	"水色の", "赤い", "緑色の",
+	"銀色の", "青い", "紫色の",
+	"白い"
+#endif
 };
 
 const char *c_obj_colors[] = {
+#if 0 /*JP*/
 	"black",		/* CLR_BLACK */
 	"red",			/* CLR_RED */
 	"green",		/* CLR_GREEN */
@@ -253,6 +270,24 @@
 	"bright magenta",	/* CLR_BRIGHT_MAGENTA */
 	"bright cyan",		/* CLR_BRIGHT_CYAN */
 	"white",		/* CLR_WHITE */
+#else
+	"黒い",			/* CLR_BLACK */
+	"赤い",			/* CLR_RED */
+	"緑色の",		/* CLR_GREEN */
+	"茶色の",		/* CLR_BROWN */
+	"青い",			/* CLR_BLUE */
+	"マゼンダ色の",		/* CLR_MAGENTA */
+	"シアン色の",		/* CLR_CYAN */
+	"灰色の",		/* CLR_GRAY */
+	"透明な",		/* no_color */
+	"橙色の",		/* CLR_ORANGE */
+	"明るい緑色の",		/* CLR_BRIGHT_GREEN */
+	"黄色の",		/* CLR_YELLOW */
+	"明るい青色の",		/* CLR_BRIGHT_BLUE */
+	"明るいマゼンダ色の",	/* CLR_BRIGHT_MAGENTA */
+	"明るいシアン色の",	/* CLR_BRIGHT_CYAN */
+	"白い",			/* CLR_WHITE */
+#endif
 };
 
 #ifdef MENU_COLOR
@@ -260,19 +295,33 @@
 #endif
 
 struct c_common_strings c_common_strings = {
+#if 0 /*JP*/
 	"Nothing happens.",		"That's enough tries!",
 	"That is a silly thing to %s.",	"shudder for a moment.",
 	"something", "Something", "You can move again.", "Never mind.",
 	"vision quickly clears.", {"the", "your"}
+#else
+	"何も起きなかった．",		"いい加減にしろ！",
+	"%s？そりゃばかげている．",	"一瞬震えた．",
+	"何か", "何か", "また動けるようになった．", "え？",
+	"視界がはっきりした．", {"", ""}
+#endif
 };
 
 /* NOTE: the order of these words exactly corresponds to the
    order of oc_material values #define'd in objclass.h. */
 const char *materialnm[] = {
+#if 0 /*JP*/
 	"mysterious", "liquid", "wax", "organic", "flesh",
 	"paper", "cloth", "leather", "wooden", "bone", "dragonhide",
 	"iron", "metal", "copper", "silver", "gold", "platinum", "mithril",
 	"plastic", "glass", "gemstone", "stone"
+#else
+	"神秘", "液状", "蝋", "有機", "肉",
+	"紙", "布", "革", "木", "骨", "竜皮",
+	"鉄", "金属", "銅", "白銀", "金", "プラチナ", "ミスリル",
+	"プラスチック", "ガラス", "宝石", "石"
+#endif
 };
 
 /* Vision */
diff -aurN slashem-0.0.7E6F2/src/detect.c jslashem-0.0.7E6F2-J0.0.8/src/detect.c
--- slashem-0.0.7E6F2/src/detect.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/detect.c	2004-07-27 09:06:42.000000000 +0900
@@ -7,6 +7,15 @@
  * command.
  */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1996-2000
+**	changing point is marked `JP' (96/7/21)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "artifact.h"
 
@@ -209,8 +218,12 @@
 	if (sobj) {
 		char buf[BUFSZ];
 		if (youmonst.data == &mons[PM_GOLD_GOLEM]) {
+#if 0 /*JP*/
 			Sprintf(buf, "You feel like a million %s!",
 				currency(2L));
+#else
+			Strcpy(buf, "あなたは金持ちになったように感じた！");
+#endif
 		} else if (hidden_gold() ||
 #ifndef GOLDOBJ
 				u.ugold)
@@ -218,16 +231,25 @@
 			        money_cnt(invent))
 #endif
 			Strcpy(buf,
+/*JP
 				"You feel worried about your future financial situation.");
+*/
+				"あなたは将来の経済状況が心配になった．");
 		else
+/*JP
 			Strcpy(buf, "You feel materially poor.");
+*/
+			Strcpy(buf, "あなたはひもじさを感じた．");
 		strange_feeling(sobj, buf);
         }
 	return(1);
     }
     /* only under me - no separate display required */
     if (stale) docrt();
+/*JP
     You("notice some gold between your %s.", makeplural(body_part(FOOT)));
+*/
+    You("%sの間に金貨が落ちていることに気がついた．", body_part(FOOT));
     return(0);
 
 outgoldmap:
@@ -278,7 +300,10 @@
     }
     
     newsym(u.ux,u.uy);
+/*JP
     You_feel("very greedy, and sense gold!");
+*/
+    You("どん欲になったような気がした，そして金貨の位置を感知した！");
     exercise(A_WIS, TRUE);
     display_nhwindow(WIN_MAP, TRUE);
     docrt();
@@ -299,7 +324,10 @@
     register int ct = 0, ctu = 0;
     boolean confused = (Confusion || (sobj && sobj->cursed)), stale;
     char oclass = confused ? POTION_CLASS : FOOD_CLASS;
+/*JP
     const char *what = confused ? something : "food";
+*/
+    const char *what = confused ? "ハラヘリ" : "食べ物";
     int uw = u.uinwater;
 
     stale = clear_stale_map(oclass, 0);
@@ -322,15 +350,26 @@
 	known = stale && !confused;
 	if (stale) {
 	    docrt();
+/*JP
 	    You("sense a lack of %s nearby.", what);
+*/
+	    You("%sが減っているのに気がついた．",what);
 	    if (sobj && sobj->blessed) {
+/*JP
 		if (!u.uedibility) Your("%s starts to tingle.", body_part(NOSE));
+*/
+		if (!u.uedibility) Your("%sがぴくっと動いた．", body_part(NOSE));
 		u.uedibility = 1;
 	    }
 	} else if (sobj) {
 	    char buf[BUFSZ];
+#if 0 /*JP*/
 	    Sprintf(buf, "Your %s twitches%s.", body_part(NOSE),
 			(sobj->blessed && !u.uedibility) ? " then starts to tingle" : "");
+#else
+	    Sprintf(buf, "あなたの%sがひくひくと動い%s．", body_part(NOSE),
+			(sobj->blessed && !u.uedibility) ? "て，うずうずしだした" : "た");
+#endif
 	    if (sobj->blessed && !u.uedibility) {
 		boolean savebeginner = flags.beginner;	/* prevent non-delivery of */
 		flags.beginner = FALSE;			/* 	message            */
@@ -343,9 +382,15 @@
 	return !stale;
     } else if (!ct) {
 	known = TRUE;
+/*JP
 	You("%s %s nearby.", sobj ? "smell" : "sense", what);
+*/
+	You("近くの%sを%s．", what, sobj ? "嗅ぎつけた" : "感知した");
 	if (sobj && sobj->blessed) {
+/*JP
 		if (!u.uedibility) pline("Your %s starts to tingle.", body_part(NOSE));
+*/
+		if (!u.uedibility) pline("あなたの%sはうずうずしだした．", body_part(NOSE));
 		u.uedibility = 1;
 	}
     } else {
@@ -373,13 +418,24 @@
 	newsym(u.ux,u.uy);
 	if (sobj) {
 	    if (sobj->blessed) {
+#if 0 /*JP*/
 	    	Your("%s %s to tingle and you smell %s.", body_part(NOSE),
 	    		u.uedibility ? "continues" : "starts", what);
+#else
+	    	Your("%sはうずうずし%s，%sの匂いを嗅ぎとった．", body_part(NOSE),
+	    		u.uedibility ? "続け" : "始め", what);
+#endif
 		u.uedibility = 1;
 	    } else
+/*JP
 		Your("%s tingles and you smell %s.", body_part(NOSE), what);
+*/
+		Your("%sはうずうずし，%sの匂いを嗅ぎとった．", body_part(NOSE), what);
 	}
+/*JP
 	else You("sense %s.", what);
+*/
+	else You("%sを感知した．", what);
 	display_nhwindow(WIN_MAP, TRUE);
 	exercise(A_WIS, TRUE);
 	docrt();
@@ -431,8 +487,14 @@
     if (Hallucination || (Confusion && class == SCROLL_CLASS))
 	Strcpy(stuff, something);
     else
+/*JP
     	Strcpy(stuff, class ? oclass_names[class] : "objects");
+*/
+    	Strcpy(stuff, class ? oclass_names[class] : "物体");
+/*JP
     if (boulder && class != ROCK_CLASS) Strcat(stuff, " and/or large stones");
+*/
+    if (boulder && class != ROCK_CLASS) Strcat(stuff, "と巨岩");
 
     if (do_dknown) for(obj = invent; obj; obj = obj->nobj) do_dknown_of(obj);
 
@@ -473,11 +535,17 @@
     if (!clear_stale_map(!class ? ALL_CLASSES : class, 0) && !ct) {
 	if (!ctu) {
 	    if (detector)
+/*JP
 		strange_feeling(detector, "You feel a lack of something.");
+*/
+		strange_feeling(detector, "あなたは何かが欠乏しているような気がした．");
 	    return 1;
 	}
 
+/*JP
 	You("sense %s nearby.", stuff);
+*/
+	You("近くの%sを感知した．", stuff);
 	return 0;
     }
 
@@ -559,7 +627,10 @@
     }
 
     newsym(u.ux,u.uy);
+/*JP
     You("detect the %s of %s.", ct ? "presence" : "absence", stuff);
+*/
+    You("%s%s．", stuff, ct ? "を発見した" : "は何もないことがわかった" );
     display_nhwindow(WIN_MAP, TRUE);
     /*
      * What are we going to do when the hero does an object detect while blind
@@ -602,8 +673,13 @@
     if (!mcnt) {
 	if (otmp)
 	    strange_feeling(otmp, Hallucination ?
+#if 0 /*JP*/
 			    "You get the heebie jeebies." :
 			    "You feel threatened.");
+#else
+			    "あなたは金鳥の夏でキンチョーした．" :
+			    "あなたは恐怖でぞくぞくした．");
+#endif
 	return 1;
     } else {
 	boolean woken = FALSE;
@@ -630,9 +706,15 @@
 	    }
 	}
 	display_self();
+/*JP
 	You("sense the presence of monsters.");
+*/
+	You("怪物の存在を嗅ぎつけた．");
 	if (woken)
+/*JP
 	    pline("Monsters sense the presence of you.");
+*/
+	    pline("怪物はあなたの存在を嗅ぎつけた．");
 	display_nhwindow(WIN_MAP, TRUE);
 	docrt();
 	if (Underwater) under_water(2);
@@ -711,12 +793,18 @@
     }
     if (!found) {
 	char buf[42];
+/*JP
 	Sprintf(buf, "Your %s stop itching.", makeplural(body_part(TOE)));
+*/
+	Sprintf(buf, "あなたの%sのむずむずはおさまった．", makeplural(body_part(TOE)));
 	strange_feeling(sobj,buf);
 	return(1);
     }
     /* traps exist, but only under me - no separate display required */
+/*JP
     Your("%s itch.", makeplural(body_part(TOE)));
+*/
+    Your("%sはむずむずした．", makeplural(body_part(TOE)));
     return(0);
 outtrapmap:
     cls();
@@ -737,7 +825,10 @@
     }
 
     newsym(u.ux,u.uy);
+/*JP
     You_feel("%s.", sobj && sobj->cursed ? "very greedy" : "entrapped");
+*/
+    You("%s気持になった．", sobj && sobj->cursed ? "とてもどん欲な" : "だまされているような");
     display_nhwindow(WIN_MAP, TRUE);
     docrt();
     u.uinwater = uw;
@@ -755,41 +846,83 @@
 
     if (ll < 0) {
 	if (ll < (-8 - rn2(3))) {
+#if 0 /*JP*/
 	    if (!indun)	return "far away";
 	    else	return "far below";
+#else
+	    if (!indun)	return "はるか彼方に";
+	    else	return "はるか下方に";
+#endif
 	}
 	else if (ll < -1) {
+#if 0 /*JP*/
 	    if (!indun)	return "away below you";
 	    else	return "below you";
+#else
+	    if (!indun)	return "ずっと下方に";
+	    else	return "下方に";
+#endif
 	}
 	else
+#if 0 /*JP*/
 	    if (!indun)	return "in the distance";
 	    else	return "just below";
+#else
+	    if (!indun)	return "遠くに";
+	    else	return "真下に";
+#endif
     } else if (ll > 0) {
 	if (ll > (8 + rn2(3))) {
+#if 0 /*JP*/
 	    if (!indun)	return "far away";
 	    else	return "far above";
+#else
+	    if (!indun)	return "はるか彼方に";
+	    else	return "はるか上方に";
+#endif
 	}
 	else if (ll > 1) {
+#if 0 /*JP*/
 	    if (!indun)	return "away above you";
 	    else	return "above you";
+#else
+	    if (!indun)	return "ずっと下方に";
+	    else	return "上方に";
+#endif
 	}
 	else
+#if 0 /*JP*/
 	    if (!indun)	return "in the distance";
 	    else	return "just above";
+#else
+	    if (!indun)	return "遠くに";
+	    else	return "真上に";
+#endif
     } else
+#if 0 /*JP*/
 	    if (!indun)	return "in the distance";
 	    else	return "near you";
+#else
+	    if (!indun)	return "遠くに";
+	    else	return "近くに";
+#endif
 }
 
 static const struct {
     const char *what;
     d_level *where;
 } level_detects[] = {
+#if 0 /*JP*/
   { "Delphi", &oracle_level },
   { "Medusa's lair", &medusa_level },
   { "a castle", &stronghold_level },
   { "the Wizard of Yendor's tower", &wiz1_level },
+#else
+  { "デルファイ", &oracle_level },
+  { "メデューサの住みか", &medusa_level },
+  { "城", &stronghold_level },
+  { "イェンダーの魔法使いの塔", &wiz1_level },
+#endif
 };
 
 void
@@ -800,33 +933,60 @@
     int oops;
 
     if (Blind) {
+/*JP
 	pline("Too bad you can't see %s.", the(xname(obj)));
+*/
+	pline("なんてことだ．%sを見ることができない．", the(xname(obj)));
 	return;
     }
     oops = (rnd(20) > ACURR(A_INT) || obj->cursed);
     if (oops && (obj->spe > 0)) {
 	switch (rnd(obj->oartifact ? 4 : 5)) {
+/*JP
 	case 1 : pline("%s too much to comprehend!", Tobjnam(obj, "are"));
+*/
+	case 1 : pline("%sを覗いたが何のことだかさっぱりわからなかった！", xname(obj));
 	    break;
+/*JP
 	case 2 : pline("%s you!", Tobjnam(obj, "confuse"));
+*/
+	case 2 : pline("%sを覗いてるとふらついてきた！", xname(obj));
 	    make_confused(HConfusion + rnd(100),FALSE);
 	    break;
 	case 3 : if (!resists_blnd(&youmonst)) {
+/*JP
 		pline("%s your vision!", Tobjnam(obj, "damage"));
+*/
+		pline("%sを覗いていると視覚がおかしくなってきた！", xname(obj));
 		make_blinded(Blinded + rnd(100),FALSE);
 		if (!Blind) Your(vision_clears);
 	    } else {
+/*JP
 		pline("%s your vision.", Tobjnam(obj, "assault"));
+*/
+		pline("%sがあなたの視界に迫ってきた．", xname(obj));
+/*JP
 		You("are unaffected!");
+*/
+		pline("しかし，あなたは影響を受けなかった！");
 	    }
 	    break;
+/*JP
 	case 4 : pline("%s your mind!", Tobjnam(obj, "zap"));
+*/
+	case 4 : pline("%sを覗いていると五感がおかしくなってきた！", xname(obj));
 	    (void) make_hallucinated(HHallucination + rnd(100),FALSE,0L);
 	    break;
+/*JP
 	case 5 : pline("%s!", Tobjnam(obj, "explode"));
+*/
+	case 5 : pline("%sは爆発した！", xname(obj));
 	    useup(obj);
 	    obj = 0;	/* it's gone */
+/*JP
 	    losehp(rnd(30), "exploding crystal ball", KILLED_BY_AN);
+*/
+	    losehp(rnd(30), "水晶玉の爆発で", KILLED_BY_AN);
 	    break;
 	}
 	if (obj) consume_obj_charge(obj, TRUE);
@@ -835,22 +995,46 @@
 
     if (Hallucination) {
 	if (!obj->spe) {
+/*JP
 	    pline("All you see is funky %s haze.", hcolor((char *)0));
+*/
+	    pline("おお！ファンキーモンキーな%sもやが見える．", hcolor((char *)0));
 	} else {
 	    switch(rnd(6)) {
+/*JP
 	    case 1 : You("grok some groovy globs of incandescent lava.");
+*/
+	    case 1 : You("水門の鍵をもった水戸黄門が壁の影に隠れているのが見えた．");
 		break;
+/*JP
 	    case 2 : pline("Whoa!  Psychedelic colors, %s!",
+*/
+	    case 2 : pline("ワーオ！ラリってるかい？%s！",
+/*JP
 			   poly_gender() == 1 ? "babe" : "dude");
+*/
+			   poly_gender() == 1 ? "ベイビー" : "ユー");
 		break;
+/*JP
 	    case 3 : pline_The("crystal pulses with sinister %s light!",
+*/
+	    case 3 : pline("水晶は不吉な%sパルスを発した！", 
 				hcolor((char *)0));
 		break;
+/*JP
 	    case 4 : You("see goldfish swimming above fluorescent rocks.");
+*/
+	    case 4 : You("蛍光岩の上を金魚が泳いでいるのが見えた．");
 		break;
+/*JP
 	    case 5 : You("see tiny snowflakes spinning around a miniature farmhouse.");
+*/
+	    case 5 : You("小さい雪片がミニチュアの農家の家のまわりを舞ってるのが見えた．");
 		break;
+/*JP
 	    default: pline("Oh wow... like a kaleidoscope!");
+*/
+	    default: pline("ワーオ．万華鏡のようだ！");
 		break;
 	    }
 	    consume_obj_charge(obj, TRUE);
@@ -859,18 +1043,30 @@
     }
 
     /* read a single character */
+/*JP
     if (flags.verbose) You("may look for an object or monster symbol.");
+*/
+    if (flags.verbose) You("物体や怪物の記号を探せる．");
+/*JP
     ch = yn_function("What do you look for?", (char *)0, '\0');
+*/
+    ch = yn_function("何を探しますか？", (char *)0, '\0');
     /* Don't filter out ' ' here; it has a use */
     if ((ch != def_monsyms[S_GHOST]) && index(quitchars,ch)) { 
 	if (flags.verbose) pline(Never_mind);
 	return;
     }
+/*JP
     You("peer into %s...", the(xname(obj)));
+*/
+    You("%sを覗きこんだ．．．", the(xname(obj)));
     nomul(-rnd(10));
     nomovemsg = "";
     if (obj->spe <= 0)
+/*JP
 	pline_The("vision is unclear.");
+*/
+	pline("映像は不鮮明だった．");
     else {
 	int class;
 	int ret = 0;
@@ -896,7 +1092,10 @@
 		default:
 		    {
 		    int i = rn2(SIZE(level_detects));
+/*JP
 		    You("see %s, %s.",
+*/
+		    You("%sを%s見た．",
 			level_detects[i].what,
 			level_distance(level_detects[i].where));
 		    }
@@ -906,8 +1105,14 @@
 
 	if (ret) {
 	    if (!rn2(100))  /* make them nervous */
+/*JP
 		You("see the Wizard of Yendor gazing out at you.");
+*/
+		You("イェンダーの魔法使いがあなたをにらんでいるのが見えた．");
+/*JP
 	    else pline_The("vision is unclear.");
+*/
+	    else pline("映像は不鮮明になった．");
 	}
     }
     return;
@@ -1076,11 +1281,21 @@
 		if(levl[zx][zy].typ == SDOOR)
 		    cvt_sdoor_to_door(&levl[zx][zy]);	/* .typ = DOOR */
 		if(levl[zx][zy].doormask & D_TRAPPED) {
+/*JP
 		    if(distu(zx, zy) < 3) b_trapped("door", 0);
+*/
+		    if(distu(zx, zy) < 3) b_trapped("扉", 0);
+#if 0 /*JP*/
 		    else Norep("You %s an explosion!",
 				cansee(zx, zy) ? "see" :
 				   (flags.soundok ? "hear" :
 						"feel the shock of"));
+#else
+		    else Norep("あなたは爆発%s！",
+				cansee(zx, zy) ? "を見た" :
+				   (flags.soundok ? "音を聞いた" :
+						"の衝撃を感じた"));
+#endif
 		    wake_nearto(zx, zy, 11*11);
 		    levl[zx][zy].doormask = D_NODOOR;
 		} else
@@ -1123,8 +1338,14 @@
 
 	if(u.uswallow) {
 		if (is_animal(u.ustuck->data)) {
+/*JP
 			if (Blind) pline("Its mouth opens!");
+*/
+			if (Blind) pline("何者かの口が開いた！");
+/*JP
 			else pline("%s opens its mouth!", Monnam(u.ustuck));
+*/
+			else pline("%sは口を開いた！", Monnam(u.ustuck));
 		}
 		expels(u.ustuck, u.ustuck->data, TRUE);
 		return(-1);
@@ -1161,7 +1382,10 @@
 	cleared = TRUE;
     }
 
+/*JP
     You("find %s.", an(defsyms[trap_to_defsym(tt)].explanation));
+*/
+    You("%sを見つけた．", jtrns_obj('^', defsyms[trap_to_defsym(tt)].explanation));
 
     if (cleared) {
 	display_nhwindow(WIN_MAP, TRUE);	/* wait */
@@ -1188,7 +1412,10 @@
 
 	if(u.uswallow) {
 		if (!aflag)
+/*JP
 			pline("What are you looking for?  The exit?");
+*/
+			pline("何を探すんだい？非常口？");
 	} else {
 	    int fund = (uwep && uwep->oartifact &&
 		    spec_ability(uwep, SPFX_SEARCH)) ?
@@ -1234,11 +1461,17 @@
 					 */
 					continue;
 				    } else {
+/*JP
 					You_feel("an unseen monster!");
+*/
+					You("見えない怪物の気配を感じた！");
 					map_invisible(x, y);
 				    }
 				} else if (!sensemon(mtmp))
+/*JP
 				    You("find %s.", a_monnam(mtmp));
+*/
+				    You("%sを見つけた．", a_monnam(mtmp));
 				return(1);
 			    }
 			    if(!canspotmon(mtmp)) {
diff -aurN slashem-0.0.7E6F2/src/dig.c jslashem-0.0.7E6F2-J0.0.8/src/dig.c
--- slashem-0.0.7E6F2/src/dig.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dig.c	2004-08-06 23:48:50.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1996-2000
+**	changing point is marked `JP' (94/7/16)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "edog.h"
 /* #define DEBUG */	/* turn on for diagnostics */
@@ -93,9 +102,17 @@
     register xchar i;
     register boolean waslit = rm_waslit();
 
+/*JP
     if(rockit) pline("Crash!  The ceiling collapses around you!");
+*/
+    if(rockit) pline("げげん！あなたのまわりの天井が崩れた！");
+#if 0 /*JP*/
     else pline("A mysterious force %s cave around you!",
 	     (levl[u.ux][u.uy].typ == CORR) ? "creates a" : "extends the");
+#else
+    else pline("神秘的な力によりあなたのまわり%s！",
+	     (levl[u.ux][u.uy].typ == CORR) ? "に洞窟ができた" : "の洞窟が広がった");
+#endif
     display_nhwindow(WIN_MESSAGE, TRUE);
 
     for(dist = 1; dist <= 2; dist++) {
@@ -166,45 +183,90 @@
 	int		x, y;
 {
 	struct trap *ttmp = t_at(x, y);
+#if 0 /*JP*/
 	const char *verb =
 	    (madeby != BY_YOU || !uwep || is_pick(uwep)) ? "dig in" :
 #ifdef LIGHTSABERS
 	    is_lightsaber(uwep) ? "cut" :
 #endif
 	    "chop";
+#else
+	const char *verb =
+	    (madeby != BY_YOU || !uwep || is_pick(uwep)) ? "掘れない" :
+#ifdef LIGHTSABERS
+	    is_lightsaber(uwep) ? "斬れない" :
+#endif
+	    "砕けない";
+#endif
 
 	if (On_stairs(x, y)) {
+#if 0 /*JP*/
 	    if (x == xdnladder || x == xupladder) {
 		if(verbose) pline_The("ladder resists your effort.");
 	    } else if(verbose) pline_The("stairs are too hard to %s.", verb);
+#else
+	    if (x == xdnladder || x == xupladder) {
+		if(verbose) pline("はしごが邪魔をした．");
+	    } else if(verbose) pline("階段はとても固くて%s．", verb);
+#endif
 	    return(FALSE);
 	/* ALI - Artifact doors */
 	} else if (IS_DOOR(levl[x][y].typ) && artifact_door(x, y)) {
+#if 0 /*JP*/
 	    if(verbose) pline_The("%s here is too hard to dig in.",
 				  surface(x,y));
+#else
+	    if(verbose) pline("%sはとても固くて掘れない．",
+				  surface(x,y));
+#endif
 	    return(FALSE);
 	} else if (IS_THRONE(levl[x][y].typ) && madeby != BY_OBJECT) {
+#if 0 /*JP*/
 	    if(verbose) pline_The("throne is too hard to break apart.");
+#else
+	    if(verbose) pline("玉座はとても固くて砕けない．");
+#endif
 	    return(FALSE);
 	} else if (IS_ALTAR(levl[x][y].typ) && (madeby != BY_OBJECT ||
 				Is_astralevel(&u.uz) || Is_sanctum(&u.uz))) {
+#if 0 /*JP*/
 	    if(verbose) pline_The("altar is too hard to break apart.");
+#else
+	    if(verbose) pline_The("祭壇はとても固くて砕けない．");
+#endif
 	    return(FALSE);
 	} else if (Is_airlevel(&u.uz)) {
+#if 0 /*JP*/
 	    if(verbose) You("cannot %s thin air.", verb);
+#else
+	    if(verbose) You("何もない空間は%s．", verb);
+#endif
 	    return(FALSE);
 	} else if (Is_waterlevel(&u.uz)) {
+#if 0 /*JP*/
 	    if(verbose) pline_The("water splashes and subsides.");
+#else
+	    if(verbose) pline("水がピシャッと跳ねた．");
+#endif
 	    return(FALSE);
 	} else if ((IS_ROCK(levl[x][y].typ) && levl[x][y].typ != SDOOR &&
 		      (levl[x][y].wall_info & W_NONDIGGABLE) != 0)
 		|| (ttmp &&
 		      (ttmp->ttyp == MAGIC_PORTAL || !Can_dig_down(&u.uz)))) {
+#if 0 /*JP*/
 	    if(verbose) pline_The("%s here is too hard to %s.",
 				  surface(x,y), verb);
+#else
+	    if(verbose) pline_The("%sはとても固くて%s．",
+				  surface(x,y), verb);
+#endif
 	    return(FALSE);
 	} else if (sobj_at(BOULDER, x, y)) {
+#if 0 /*JP*/
 	    if(verbose) There("isn't enough room to %s here.", verb);
+#else
+	    if(verbose) pline("十分な場所がないので%s．", verb);
+#endif
 	    return(FALSE);
 	} else if (madeby == BY_OBJECT &&
 		    /* the block against existing traps is mainly to
@@ -222,12 +284,21 @@
 	register struct rm *lev;
 	register xchar dpx = digging.pos.x, dpy = digging.pos.y;
 	register boolean ispick = uwep && is_pick(uwep);
+#if 0 /*JP*/
 	const char *verb =
 	    (!uwep || is_pick(uwep)) ? "dig into" :
 #ifdef LIGHTSABERS
 	    is_lightsaber(uwep) ? "cut through" :
 #endif
 	    "chop through";
+#else
+	const char *verb =
+	    (!uwep || is_pick(uwep)) ? "掘れない" :
+#ifdef LIGHTSABERS
+	    is_lightsaber(uwep) ? "斬れない" :
+#endif
+	    "砕けない";
+#endif
 	int bonus;
 
 	lev = &levl[dpx][dpy];
@@ -249,15 +320,24 @@
 	} else { /* !digging.down */
 	    if (IS_TREE(lev->typ) && !may_dig(dpx,dpy) &&
 			dig_typ(uwep, dpx, dpy) == DIGTYP_TREE) {
+#if 0 /*JP*/
 		pline("This tree seems to be petrified.");
+#else
+		pline("この木は石化しているようだ．");
+#endif
 		return(0);
 	    }
 	    /* ALI - Artifact doors */
 	    if (IS_ROCK(lev->typ) && !may_dig(dpx,dpy) &&
 	    		dig_typ(uwep, dpx, dpy) == DIGTYP_ROCK ||
 		    IS_DOOR(lev->typ) && artifact_door(dpx, dpy)) {
+#if 0 /*JP*/
 		pline("This %s is too hard to %s.",
 			IS_DOOR(lev->typ) ? "door" : "wall", verb);
+#else
+		pline("この%sはとても固くて%s．",
+			IS_DOOR(lev->typ) ? "扉" : "壁", verb);
+#endif
 		return(0);
 	    }
 	}
@@ -270,28 +350,47 @@
 	    switch(rn2(3)) {
 	    case 0:
 		if(!welded(uwep)) {
+/*JP
 		    You("fumble and drop your %s.", xname(uwep));
+*/
+			     You("手が滑り%sを落した．", xname(uwep));
 		    dropx(uwep);
 		} else {
 #ifdef STEED
 		    if (u.usteed)
+#if 0 /*JP*/
 			Your("%s %s and %s %s!",
 			     xname(uwep),
 			     otense(uwep, "bounce"), otense(uwep, "hit"),
 			     mon_nam(u.usteed));
+#else
+			 pline("%sは跳ねかえり%sに命中した！",
+			      xname(uwep), mon_nam(u.usteed));
+#endif
 		    else
 #endif
+#if 0 /*JP*/
 			pline("Ouch!  Your %s %s and %s you!",
 			      xname(uwep),
 			      otense(uwep, "bounce"), otense(uwep, "hit"));
+#else
+			 pline("いてっ！%sは跳ねかえりあなたに命中した！",
+			      xname(uwep));
+#endif
 		    set_wounded_legs(RIGHT_SIDE, 5 + rnd(5));
 		}
 		break;
 	    case 1:
+/*JP
 		pline("Bang!  You hit with the broad side of %s!",
+*/
+	        pline("バン！%sの柄で打ってしまった！",
 		      the(xname(uwep)));
 		break;
+/*JP
 	    default: Your("swing misses its mark.");
+*/
+		default: You("狙いを定めて振りおろしたがはずした．");
 		break;
 	    }
 	    return(0);
@@ -344,7 +443,10 @@
 
 		if ((obj = sobj_at(STATUE, dpx, dpy)) != 0) {
 			if (break_statue(obj))
+/*JP
 				digtxt = "The statue shatters.";
+*/
+				digtxt = "彫像はこなごなになった．";
 			else
 				/* it was a statue trap; break_statue()
 				 * printed a message and updated the screen
@@ -359,7 +461,10 @@
 			    obj_extract_self(bobj);
 			    place_object(bobj, dpx, dpy);
 			}
+/*JP
 			digtxt = "The boulder falls apart.";
+*/
+			digtxt = "岩はこなごなになった．";
 		} else if (lev->typ == STONE || lev->typ == SCORR ||
 				IS_TREE(lev->typ)) {
 			if(Is_earthlevel(&u.uz)) {
@@ -373,17 +478,26 @@
 			    }
 			}
 			if (IS_TREE(lev->typ)) {
+/*JP
 			    digtxt = "You cut down the tree.";
+*/
+			    digtxt = "木を切り倒した．";
 			    lev->typ = ROOM;
 			    if (!rn2(5)) (void) rnd_treefruit_at(dpx, dpy);
 			} else {
+/*JP
 			    digtxt = "You succeed in cutting away some rock.";
+*/
+			    digtxt = "岩を少し切りとった．";
 			    lev->typ = CORR;
 			}
 		} else if(IS_WALL(lev->typ)) {
 			if(shopedge) {
 			    add_damage(dpx, dpy, 10L * ACURRSTR);
+/*JP
 			    dmgtxt = "damage";
+*/
+			    dmgtxt = "傷つける";
 			}
 			if (level.flags.is_maze_lev) {
 			    lev->typ = ROOM;
@@ -394,17 +508,29 @@
 			    lev->typ = DOOR;
 			    lev->doormask = D_NODOOR;
 			}
+/*JP
 			digtxt = "You make an opening in the wall.";
+*/
+			digtxt = "壁に穴を空けた．";
 		} else if(lev->typ == SDOOR) {
 			cvt_sdoor_to_door(lev);	/* ->typ = DOOR */
+/*JP
 			digtxt = "You break through a secret door!";
+*/
+			digtxt = "秘密の扉を通り抜けた！";
 			if(!(lev->doormask & D_TRAPPED))
 				lev->doormask = D_BROKEN;
 		} else if(closed_door(dpx, dpy)) {
+/*JP
 			digtxt = "You break through the door.";
+*/
+			digtxt = "扉を通り抜けた．";
 			if(shopedge) {
 			    add_damage(dpx, dpy, 400L);
+/*JP
 			    dmgtxt = "break";
+*/
+			    dmgtxt = "壊す";
 			}
 			if(!(lev->doormask & D_TRAPPED))
 				lev->doormask = D_BROKEN;
@@ -433,11 +559,19 @@
 					dpx, dpy, NO_MM_FLAGS);
 			break;
 		    }
+#if 0 /*JP*/
 		    if(mtmp) pline_The("debris reassembles and comes to life!");
+#else
+		    if(mtmp) pline("岩の破片が生命を帯びた！");
+#endif
 		}
 		if(IS_DOOR(lev->typ) && (lev->doormask & D_TRAPPED)) {
 			lev->doormask = D_NODOOR;
+#if 0 /*JP*/
 			b_trapped("door", 0);
+#else
+			b_trapped("扉", 0);
+#endif
 			newsym(dpx, dpy);
 		}
 cleanup:
@@ -448,19 +582,29 @@
 		return(0);
 	} else {		/* not enough effort has been spent yet */
 		static const char *const d_target[6] = {
+#if 0 /*JP*/
 			"", "rock", "statue", "boulder", "door", "tree"
+#else
+			"", "石", "彫像", "岩", "扉", "木"
+#endif
 		};
 		int dig_target = dig_typ(uwep, dpx, dpy);
 
 		if (IS_WALL(lev->typ) || dig_target == DIGTYP_DOOR) {
 		    if(*in_rooms(dpx, dpy, SHOPBASE)) {
+#if 0 /*JP*/
 			pline("This %s seems too hard to %s.",
 			      IS_DOOR(lev->typ) ? "door" : "wall", verb);
+#else
+			pline("この%sはとても固くて%s．",
+			      IS_DOOR(lev->typ) ? "扉" : "壁", verb);
+#endif
 			return(0);
 		    }
 		} else if (!IS_ROCK(lev->typ) && dig_target == DIGTYP_ROCK)
 		    return(0); /* statue or boulder got taken */
 		if(!did_dig_msg) {
+#if 0 /*JP*/
 #ifdef LIGHTSABERS
 		    if (is_lightsaber(uwep)) You("burn steadily through %s.",
 			d_target[dig_target]);
@@ -468,6 +612,15 @@
 #endif
 		    You("hit the %s with all your might.",
 			d_target[dig_target]);
+#else
+#ifdef LIGHTSABERS
+		    if (is_lightsaber(uwep)) You("%sを貫いて焼き斬った．",
+			d_target[dig_target]);
+		    else
+#endif
+		    You("%sを力一杯打ちつけた．",
+			d_target[dig_target]);
+#endif
 		    did_dig_msg = TRUE;
 		}
 	}
@@ -568,7 +721,10 @@
 	/* maketrap() might change it, also, in this situation,
 	   surface() returns an inappropriate string for a grave */
 	if (IS_GRAVE(lev->typ))
+/*JP
 	    Strcpy(surface_type, "grave");
+*/
+	    Strcpy(surface_type, "墓");
 	else
 	    Strcpy(surface_type, surface(x,y));
 	shopdoor = IS_DOOR(lev->typ) && *in_rooms(x, y, SHOPBASE);
@@ -583,12 +739,24 @@
 	if (ttyp == PIT) {
 
 	    if(madeby_u) {
+/*JP
 		You("dig a pit in the %s.", surface_type);
+*/
+		You("%sに落し穴を掘った．", surface_type);
+/*JP
 		if (shopdoor) pay_for_damage("ruin", FALSE);
+*/
+		if (shopdoor) pay_for_damage("めちゃめちゃにする", FALSE);
 	    } else if (!madeby_obj && canseemon(madeby))
+/*JP
 		pline("%s digs a pit in the %s.", Monnam(madeby), surface_type);
+*/
+		pline("%sは%sに落し穴を掘った．", Monnam(madeby), surface_type);
 	    else if (cansee(x, y) && flags.verbose)
+/*JP
 		pline("A pit appears in the %s.", surface_type);
+*/
+		pline("落し穴が%sに現われた．", surface_type);
 
 	    if(at_u) {
 		if (!wont_fall) {
@@ -603,25 +771,43 @@
 	    } else if(mtmp) {
 		if(is_flyer(mtmp->data) || is_floater(mtmp->data)) {
 		    if(canseemon(mtmp))
+#if 0 /*JP*/
 			pline("%s %s over the pit.", Monnam(mtmp),
 						     (is_flyer(mtmp->data)) ?
 						     "flies" : "floats");
+#else
+			pline("%sは%s落し穴を越えた．", Monnam(mtmp),
+						     (is_flyer(mtmp->data)) ?
+						     "飛んで" : "浮いて");
+#endif
 		} else if(mtmp != madeby)
 		    (void) mintrap(mtmp);
 	    }
 	} else {	/* was TRAPDOOR now a HOLE*/
 
 	    if(madeby_u)
+/*JP
 		You("dig a hole through the %s.", surface_type);
+*/
+		You("%sに穴を開けた．", surface_type);
 	    else if(!madeby_obj && canseemon(madeby))
+/*JP
 		pline("%s digs a hole through the %s.",
+*/
+		pline("%sは%sに穴を開けた．",
 		      Monnam(madeby), surface_type);
 	    else if(cansee(x, y) && flags.verbose)
+/*JP
 		pline("A hole appears in the %s.", surface_type);
+*/
+		pline("%sに穴が現われた．", surface_type);
 
 	    if (at_u) {
 		if (!u.ustuck && !wont_fall && !next_to_u()) {
+/*JP
 		    You("are jerked back by your pet!");
+*/
+		    You("ペットによって引き戻された！");
 		    wont_fall = TRUE;
 		}
 
@@ -634,16 +820,28 @@
 			impact_drop((struct obj *)0, x, y, 0);
 		    if (oldobjs != newobjs)
 			(void) pickup(1);
+#if 0 /*JP*/
 		    if (shopdoor && madeby_u) pay_for_damage("ruin", FALSE);
+#else
+		    if (shopdoor && madeby_u) pay_for_damage("めちゃめちゃにする", FALSE);
+#endif
 
 		} else {
 		    d_level newlevel;
+#if 0 /*JP*/
 		    const char *You_fall = "You fall through...";
+#else
+		    const char *You_fall = "あなたは落ちた．．．";
+#endif
 
 		    if (*u.ushops && madeby_u)
 			shopdig(1); /* shk might snatch pack */
 		    /* handle earlier damage, eg breaking wand of digging */
+#if 0 /*JP*/
 		    else if (!madeby_u) pay_for_damage("dig into", TRUE);
+#else
+		    else if (!madeby_u) pay_for_damage("穴をあける", TRUE);
+#endif
 
 		    /* Earlier checks must ensure that the destination
 		     * level exists and is in the present dungeon.
@@ -662,7 +860,10 @@
 		}
 		}
 	    } else {
+/*JP
 		if (shopdoor && madeby_u) pay_for_damage("ruin", FALSE);
+*/
+		if (shopdoor && madeby_u) pay_for_damage("めちゃめちゃにする", FALSE);
 		if (newobjs)
 		    impact_drop((struct obj *)0, x, y, 0);
 		if (mtmp) {
@@ -681,7 +882,10 @@
 			    assign_level(&tolevel, &valley_level);
 			} else if (Is_botlevel(&u.uz)) {
 			    if (canseemon(mtmp))
+/*JP
 				pline("%s avoids the trap.", Monnam(mtmp));
+*/
+				pline("%sは罠を避けた．", Monnam(mtmp));
 			    return;
 			} else {
 			    get_level(&tolevel, depth(&u.uz) + 1);
@@ -711,11 +915,19 @@
 	   IS_DOOR(levl[u.ux][u.uy].typ) && artifact_door(u.ux, u.uy) ||
 	   (IS_ROCK(lev->typ) && lev->typ != SDOOR &&
 	    (lev->wall_info & W_NONDIGGABLE) != 0)) {
+/*JP
 		pline_The("%s here is too hard to dig in.", surface(u.ux,u.uy));
+*/
+		pline("%sはとても固くて掘れない．", surface(u.ux,u.uy));
 
 	} else if (is_pool(u.ux, u.uy) || is_lava(u.ux, u.uy)) {
+#if 0 /*JP*/
 		pline_The("%s sloshes furiously for a moment, then subsides.",
 			is_lava(u.ux, u.uy) ? "lava" : "water");
+#else
+		pline("%sは激しく波うった．",
+			is_lava(u.ux, u.uy) ? "溶岩" : "水");
+#endif
 		wake_nearby();	/* splashing */
 
 	} else if (lev->typ == DRAWBRIDGE_DOWN ||
@@ -724,7 +936,10 @@
 		   bridge is extended; drawbridge_wall is the open "doorway" or
 		   closed "door" where the portcullis/mechanism is located */
 		if (pit_only) {
+/*JP
 		    pline_The("drawbridge seems too hard to dig through.");
+*/
+		    pline("跳ね橋はとても固くて掘れそうにない．");
 		    return FALSE;
 	} else if (IS_GRAVE(lev->typ)) {        
 	    digactualhole(u.ux, u.uy, BY_YOU, PIT);
@@ -741,14 +956,20 @@
 	} else if ((boulder_here = sobj_at(BOULDER, u.ux, u.uy)) != 0) {
 		if (ttmp && (ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT) &&
 		    rn2(2)) {
+/*JP
 			pline_The("boulder settles into the pit.");
+*/
+			pline("岩は落し穴を埋めた．");
 			ttmp->ttyp = PIT;	 /* crush spikes */
 		} else {
 			/*
 			 * digging makes a hole, but the boulder immediately
 			 * fills it.  Final outcome:  no hole, no boulder.
 			 */
+/*JP
 			pline("KADOOM! The boulder falls in!");
+*/
+			pline("どどーん！岩は落ちた！");
 			(void) delfloortrap(ttmp);
 		}
 		delobj(boulder_here);
@@ -768,7 +989,10 @@
 			 * We can't dig a hole here since that will destroy
 			 * the drawbridge.  The following is a cop-out. --dlc
 			 */
+/*JP
 			pline_The("%s here is too hard to dig in.",
+*/
+			pline("%sはとても固くて掘れない．",
 			      surface(u.ux, u.uy));
 			return FALSE;
 		}
@@ -781,8 +1005,13 @@
 		/* if any objects were frozen here, they're released now */
 		unearth_objs(u.ux, u.uy);
 
+#if 0 /*JP*/
 		pline("As you dig, the hole fills with %s!",
 		      typ == LAVAPOOL ? "lava" : "water");
+#else
+		pline("あなたが掘ると，%sが湧いてきた！",
+		      typ == LAVAPOOL ? "溶岩" : "水");
+#endif
 		/* KMH, balance patch -- new intrinsic */
 		if (!Levitation && !Flying) {
 		    if (typ == LAVAPOOL)
@@ -794,10 +1023,16 @@
 
 	/* the following two are here for the wand of digging */
 	} else if (IS_THRONE(lev->typ)) {
+/*JP
 		pline_The("throne is too hard to break apart.");
+*/
+		pline("玉座はとても固くて砕けない．");
 
 	} else if (IS_ALTAR(lev->typ)) {
+/*JP
 		pline_The("altar is too hard to break apart.");
+*/
+		pline("祭壇はとても固くて砕けない．");
 
 	} else {
 		typ = fillholetyp(u.ux,u.uy);
@@ -828,35 +1063,60 @@
 	exercise(A_WIS, FALSE);
 	if (Role_if(PM_ARCHEOLOGIST)) {
 	    adjalign(-sgn(u.ualign.type)*3);
+/*JP
 	    You_feel("like a despicable grave-robber!");
+*/
+	    pline("これではまるで墓泥棒だ！");
 	} else if (Role_if(PM_SAMURAI)) {
 	    adjalign(-sgn(u.ualign.type));
+/*JP
 	    You("disturb the honorable dead!");
+*/
+	    You("名誉ある死者の眠りを妨げだ！");
 	} else if ((u.ualign.type == A_LAWFUL) && (u.ualign.record > -10)) {
 	    adjalign(-sgn(u.ualign.type));
+/*JP
 	    You("have violated the sanctity of this grave!");
+*/
+	    You("聖なる墓地を犯した！");
 	}
 
 	switch (rn2(5)) {
 	case 0:
 	case 1:
+/*JP
 	    You("unearth a corpse.");
+*/
+	    You("死体を掘り起した．");
 	    if (!!(otmp = mk_tt_object(CORPSE, u.ux, u.uy)))
 	    	otmp->age -= 100;		/* this is an *OLD* corpse */;
 	    break;
 	case 2:
+#if 0 /*JP*/
 	    if (!Blind) pline(Hallucination ? "Dude!  The living dead!" :
  			"The grave's owner is very upset!");
+#else
+	    if (!Blind) pline(Hallucination ? "ゾンビがくるりと輪を描いた！" :
+			      "墓の所有者はとても驚いた！");
+#endif
  	    (void) makemon(mkclass(S_ZOMBIE,0), u.ux, u.uy, NO_MM_FLAGS);
 	    break;
 	case 3:
+#if 0 /*JP*/
 	    if (!Blind) pline(Hallucination ? "I want my mummy!" :
  			"You've disturbed a tomb!");
+#else
+	    if (!Blind) pline(Hallucination ? "マミーが必要だ！" :
+ 			"墓を荒してしまった！");
+#endif
  	    (void) makemon(mkclass(S_MUMMY,0), u.ux, u.uy, NO_MM_FLAGS);
 	    break;
 	default:
 	    /* No corpse */
+/*JP
 	    pline_The("grave seems unused.  Strange....");
+*/
+	    pline("この墓は未使用のようだ．奇妙だ．．．");
 	    break;
 	}
 	levl[u.ux][u.uy].typ = ROOM;
@@ -885,13 +1145,21 @@
 	    else res = 1;
 	}
 	ispick = is_pick(obj);
+/*JP
 	verb = ispick ? "dig" : "chop";
+*/
+	verb = ispick ? "掘る" : "砕く";
 
 	if (u.utrap && u.utraptype == TT_WEB) {
+#if 0 /*JP*/
 	    pline("%s you can't %s while entangled in a web.",
 		  /* res==0 => no prior message;
 		     res==1 => just got "You now wield a pick-axe." message */
 		  !res ? "Unfortunately," : "But", verb);
+#else
+	    pline("%sくもの巣にひかかっている間は%s．",
+		  !res ? "残念ながら" : "しかし", jconj(verb, "ない"));
+#endif
 	    return res;
 	}
 
@@ -907,7 +1175,10 @@
 		sdp++;
 	}
 	*dsp = 0;
+/*JP
 	Sprintf(qbuf, "In what direction do you want to %s? [%s]", verb, dirsyms);
+*/
+	Sprintf(qbuf, "どの方向を%s？[%s]", verb, dirsyms);
 	if(!getdir(qbuf))
 		return(res);
 
@@ -930,11 +1201,19 @@
 	register struct rm *lev;
 	int dig_target, res = 0, digtyp;
 	boolean ispick = is_pick(obj);
+#if 0 /*JP*/
 	const char *verbing = ispick ? "digging" :
 #ifdef LIGHTSABERS
 		is_lightsaber(uwep) ? "cutting" :
 #endif
 		"chopping";
+#else /*JP*/
+	const char *verbing = ispick ? "掘る" :
+#ifdef LIGHTSABERS
+		is_lightsaber(uwep) ? "斬る" :
+#endif
+		"砕く";
+#endif /*JP*/
 
 	/* 0 = pick, 1 = lightsaber, 2 = axe */
 	digtyp = (is_pick(uwep) ? 0 :
@@ -946,15 +1225,32 @@
 	if (u.uswallow && attack(u.ustuck)) {
 		;  /* return(1) */
 	} else if (Underwater) {
+#if 0 /*JP*/
 		pline("Turbulence torpedoes your %s attempts.", verbing);
+#else
+		pline("%sうとすると乱水流が起きた．",
+			(digtyp==0)?"掘ろ":(digtyp==1)?"斬ろ":"砕こ");
+#endif
 	} else if(u.dz < 0) {
 		if(Levitation)
 		    if (digtyp == 1)
+#if 0 /*JP*/
 			pline_The("ceiling is too hard to cut through.");
+#else
+			pline("天井は固すぎて斬れない．");
+#endif
 		    else
+#if 0 /*JP*/
 			You("don't have enough leverage.");
+#else
+			You("浮いているのでふんばりがきかない．");
+#endif
 		else
+#if 0 /*JP*/
 			You_cant("reach the %s.",ceiling(u.ux,u.uy));
+#else
+			You("%sに届かない．", ceiling(u.ux,u.uy));
+#endif
 	} else if(!u.dx && !u.dy && !u.dz) {
 		/* NOTREACHED for lightsabers/axes called from doforce */
 		
@@ -963,9 +1259,14 @@
 
 		dam = rnd(2) + dbon() + obj->spe;
 		if (dam <= 0) dam = 1;
+#if 0 /*JP*/
 		You("hit yourself with %s.", yname(uwep));
 		Sprintf(buf, "%s own %s", uhis(),
 				OBJ_NAME(objects[obj->otyp]));
+#else
+		You("自分自身を%sで叩いた．", yname(uwep));
+		Sprintf(buf, "自分自身を%sで叩いて", yname(uwep));
+#endif
 		losehp(dam, buf, KILLED_BY);
 		flags.botl=1;
 		return(1);
@@ -974,9 +1275,16 @@
 		rx = u.ux + u.dx;
 		ry = u.uy + u.dy;
 		if(!isok(rx, ry)) {
+#if 0 /*JP*/
 			if (digtyp == 1) pline("Your %s bounces off harmlessly.",
 				aobjnam(obj, (char *)0));
 			else pline("Clash!");
+#else
+			if (digtyp == 1)
+			    pline("あなたの%sは傷をつけることなく跳ね返った．",
+				xname(obj));
+			else pline("ガラガラ！");
+#endif
 			return(1);
 		}
 		lev = &levl[rx][ry];
@@ -990,33 +1298,74 @@
 			if (trap && trap->ttyp == WEB) {
 			    if (!trap->tseen) {
 				seetrap(trap);
+#if 0 /*JP*/
 				There("is a spider web there!");
+#else
+				pline("そこにはくもの巣がある！");
+#endif
 			    }
+#if 0 /*JP*/
 			    Your("%s entangled in the web.",
 				aobjnam(obj, "become"));
+#else
+			    Your("%sはくもの巣にからまった．",
+				xname(obj));
+#endif
 			    /* you ought to be able to let go; tough luck */
 			    /* (maybe `move_into_trap()' would be better) */
 			    nomul(-d(2,2));
+#if 0 /*JP*/
 			    nomovemsg = "You pull free.";
+#else
+			    nomovemsg = "ひきはなした．";
+#endif
 			} else if (lev->typ == IRONBARS) {
+#if 0 /*JP*/
 			    pline("Clang!");
+#else
+			    pline("ガツン！");
+#endif
 			    wake_nearby();
 			} else if (IS_TREE(lev->typ))
+#if 0 /*JP*/
 			    You("need an axe to cut down a tree.");
+#else
+			    You("木を切るには斧が必要だ．");
+#endif
 			else if (IS_ROCK(lev->typ))
+#if 0 /*JP*/
 			    You("need a pick to dig rock.");
+#else
+			    You("掘るにはつるはしが必要だ．");
+#endif
 			else if (!ispick && (sobj_at(STATUE, rx, ry) ||
 					     sobj_at(BOULDER, rx, ry))) {
 			    boolean vibrate = !rn2(3);
+#if 0 /*JP*/
 			    pline("Sparks fly as you whack the %s.%s",
 				sobj_at(STATUE, rx, ry) ? "statue" : "boulder",
 				vibrate ? " The axe-handle vibrates violently!" : "");
+#else
+			    pline("%sを切ろうとしたら火花が散った！%s",
+				sobj_at(STATUE, rx, ry) ? "彫像" : "岩",
+				vibrate ? "斧は激しく振動した！" : "");
+#endif
+#if 0 /*JP*/
 			    if (vibrate) losehp(2, "axing a hard object", KILLED_BY);
+#else
+			    if (vibrate) losehp(2, "固いものに斧を使おうとして", KILLED_BY);
+#endif
 			}
 			else
+#if 0 /*JP*/
 			    You("swing your %s through thin air.",
 				aobjnam(obj, (char *)0));
+#else
+			    You("何もない空間で%sを振りまわした．",
+				xname(obj));
+#endif
 		} else {
+#if 0 /*JP*/
 			static const char * const d_action[6][2] = {
 			    {"swinging","slicing the air"},
 			    {"digging","cutting through the wall"},
@@ -1025,6 +1374,24 @@
 			    {"chopping at the door","burning through the door"},
 			    {"cutting the tree","razing the tree"}
 			};
+#else
+			static const char * const d_action1[6][2] = {
+			    {"振り","空を斬り"},
+			    {"掘り","壁を斬り崩し"},
+			    {"彫像を削り","彫像を斬り倒し"},
+			    {"岩を打ちつけ","岩を斬り崩し"},
+			    {"扉を削り","扉を焼き切り"},
+			    {"木を切り","木を斬り倒し"}
+			};
+			static const char * const d_action2[6][2] = {
+			    {"振る","空を斬る"},
+			    {"掘る","壁を斬り崩す"},
+			    {"彫像を削る","彫像を斬り倒す"},
+			    {"岩を打ちつける","岩を斬り崩す"},
+			    {"扉を削る","扉を焼き切る"},
+			    {"木を切る","木を斬り倒す"}
+			};
+#endif
 			did_dig_msg = FALSE;
 			digging.quiet = FALSE;
 			if (digging.pos.x != rx || digging.pos.y != ry ||
@@ -1046,26 +1413,53 @@
 			    assign_level(&digging.level, &u.uz);
 			    digging.effort = 0;
 			    if (!digging.quiet)
+#if 0 /*JP*/
 				You("start %s.", d_action[dig_target][digtyp == 1]);
+#else
+				You("%sはじめた．", d_action1[dig_target][digtyp == 1]);
+#endif
 			} else {
+#if 0 /*JP*/
 			    You("%s %s.", digging.chew ? "begin" : "continue",
 					d_action[dig_target][digtyp == 1]);
+#else
+			    You("%sのを再開した", 
+					d_action2[dig_target][digtyp == 1]);
+#endif
 			    digging.chew = FALSE;
 			}
 			set_occupation(dig, verbing, 0);
 		}
 	} else if (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) {
 		/* it must be air -- water checked above */
+#if 0 /*JP*/
 		You("swing your %s through thin air.", aobjnam(obj, (char *)0));
+#else
+		You("%sを何もない空間で振りまわした．", xname(obj));
+#endif
 	} else if (!can_reach_floor()) {
+#if 0 /*JP*/
 		You_cant("reach the %s.", surface(u.ux,u.uy));
+#else
+		You("%sに届かない．", surface(u.ux,u.uy));
+#endif
 	} else if (is_pool(u.ux, u.uy) || is_lava(u.ux, u.uy)) {
 		/* Monsters which swim also happen not to be able to dig */
+#if 0 /*JP*/
 		You("cannot stay under%s long enough.",
 				is_pool(u.ux, u.uy) ? "water" : " the lava");
+#else
+		You("%sには長時間いられない．",
+				is_pool(u.ux, u.uy) ? "水面下" : "溶岩の中");
+#endif
 	} else if (digtyp == 2) {
+#if 0 /*JP*/
 		Your("%s merely scratches the %s.",
 				aobjnam(obj, (char *)0), surface(u.ux,u.uy));
+#else
+		Your("%sは%sにかすり傷をつけただけだった．",
+				aobjnam(obj, (char *)0), surface(u.ux,u.uy));
+#endif
 		u_wipe_engr(3);
 	} else {
 		if (digging.pos.x != u.ux || digging.pos.y != u.uy ||
@@ -1077,10 +1471,16 @@
 		    digging.pos.y = u.uy;
 		    assign_level(&digging.level, &u.uz);
 		    digging.effort = 0;
+/*JP
 		    You("start %s downward.", verbing);
+*/
+		    You("下向きに掘りはじめた．");
 		    if (*u.ushops) shopdig(0);
 		} else
+/*JP
 		    You("continue %s downward.", verbing);
+*/
+		    You("下向きに掘るのを再開した．");
 		did_dig_msg = FALSE;
 		set_occupation(dig, verbing, 0);
 	}
@@ -1117,20 +1517,38 @@
 
 	    if (mtmp) {
 		if(zap || digging.warned) {
+/*JP
 		    verbalize("Halt, vandal!  You're under arrest!");
+*/
+		    verbalize("止まれ野蛮人！おまえを逮捕する！");
 		    (void) angry_guards(!(flags.soundok));
 		} else {
 		    const char *str;
 
 		    if (IS_DOOR(lev->typ))
+/*JP
 			str = "door";
+*/
+			str = "扉";
 		    else if (IS_TREE(lev->typ))
+/*JP
 			str = "tree";
+*/
+			str = "木";
 		    else if (IS_ROCK(lev->typ))
+/*JP
 			str = "wall";
+*/
+			str = "壁";
 		    else
+/*JP
 			str = "fountain";
+*/
+			str = "泉";
+/*JP
 		    verbalize("Hey, stop damaging that %s!", str);
+*/
+		    verbalize("おい，%sを破壊するのをやめろ！", str);
 		    digging.warned = TRUE;
 		}
 		if (is_digging())
@@ -1167,7 +1585,10 @@
 		}
 	    } else {
 		if (!rn2(3) && flags.verbose)	/* not too often.. */
+/*JP
 		    You_feel("an unexpected draft.");
+*/
+		    You("思いもよらず，すきま風を感じた．");
 		here->doormask = D_BROKEN;
 	    }
 	    newsym(mtmp->mx, mtmp->my);
@@ -1187,7 +1608,11 @@
 	    /* KMH -- Okay on arboreal levels (room walls are still stone) */
 	    if (flags.soundok && flags.verbose && !rn2(5))
 	    /* KMH -- Okay on arboreal levels (room walls are still stone) */
+#if 0 /*JP*/
 		You_hear("crashing rock.");
+#else
+		You_hear("岩のくだける音を聞いた．");
+#endif
 	    if (*in_rooms(mtmp->mx, mtmp->my, SHOPBASE))
 		add_damage(mtmp->mx, mtmp->my, 0L);
 	    if (level.flags.is_maze_lev) {
@@ -1243,7 +1668,10 @@
 
 	    if (!is_whirly(mtmp->data)) {
 		if (is_animal(mtmp->data))
+/*JP
 		    You("pierce %s %s wall!",
+*/
+		    You("%sの%sの壁に穴を開けた！",
 			s_suffix(mon_nam(mtmp)), mbodypart(mtmp, STOMACH));
 		mtmp->mhp = 1;		/* almost dead */
 		expels(mtmp, mtmp->data, !is_animal(mtmp->data));
@@ -1255,13 +1683,30 @@
 	    if (!Is_airlevel(&u.uz) && !Is_waterlevel(&u.uz) && !Underwater) {
 		if (u.dz < 0 || On_stairs(u.ux, u.uy)) {
 		    if (On_stairs(u.ux, u.uy))
+#if 0 /*JP*/
 			pline_The("beam bounces off the %s and hits the %s.",
 			      (u.ux == xdnladder || u.ux == xupladder) ?
 			      "ladder" : "stairs", ceiling(u.ux, u.uy));
+#else
+			pline("光線は%sで反射し%sに命中した．",
+			      (u.ux == xdnladder || u.ux == xupladder) ?
+			      "はしご" : "階段", ceiling(u.ux, u.uy));
+#endif
+/*JP
 		    You("loosen a rock from the %s.", ceiling(u.ux, u.uy));
+*/
+		    pline("%sの岩がガタガタしはじめた．", ceiling(u.ux, u.uy));
+/*JP
 		    pline("It falls on your %s!", body_part(HEAD));
+*/
+		    pline("それはあなたの%sに落ちてきた！", body_part(HEAD));
+#if 0 /*JP*/
 		    losehp(rnd((uarmh && is_metallic(uarmh)) ? 2 : 6),
 			   "falling rock", KILLED_BY_AN);
+#else
+		    losehp(rnd((uarmh && is_metallic(uarmh)) ? 2 : 6),
+			   "落岩で", KILLED_BY_AN);
+#endif
 		    otmp = mksobj_at(ROCK, u.ux, u.uy, FALSE, FALSE);
 		    if (otmp) {
 			(void)xname(otmp);	/* set dknown, maybe bknown */
@@ -1292,11 +1737,19 @@
             /* WAC check for monster, boulder */
             if ((mtmp = m_at(zx, zy)) != 0) {
                 if (made_of_rock(mtmp->data)) {
+#if 0 /*JP*/
                     You("gouge a hole in %s!", mon_nam(mtmp));
+#else
+                    You("%sに穴を穿った！", mon_nam(mtmp));
+#endif
                     mtmp->mhp /= 2;
                     if (mtmp->mhp < 1) mtmp->mhp = 1;
 		    setmangry(mtmp);
+#if 0 /*JP*/
                 } else pline("%s is unaffected!", Monnam(mtmp));
+#else
+                } else pline("%sは影響を受けない！", Monnam(mtmp));
+#endif
             }
             for(otmp = level.objects[zx][zy]; otmp; otmp = next_obj) {
                 next_obj = otmp->nexthere;
@@ -1308,7 +1761,11 @@
 			change_luck(-1);
 		    unblock_point(zx, zy);
 		    newsym(zx, zy);
+#if 0 /*JP*/
 		    pline_The("boulder is vaporized!");
+#else
+		    pline("岩は真っぷたつになった！");
+#endif
 		}
 		break;
             }
@@ -1317,7 +1774,11 @@
 		/* ALI - Artifact doors */
 		if (artifact_door(zx, zy)) {
 		    if (cansee(zx, zy))
+#if 0 /*JP*/
 			pline_The("door glows then fades.");
+#else
+			pline("扉は一瞬輝いた．");
+#endif
 		    break;
 		}
 		if (*in_rooms(zx,zy,SHOPBASE)) {
@@ -1327,7 +1788,10 @@
 		if (room->typ == SDOOR)
 		    room->typ = DOOR;
 		else if (cansee(zx, zy))
+/*JP
 		    pline_The("door is razed!");
+*/
+		    pline("扉は崩れ落ちた！");
 		watch_dig((struct monst *)0, zx, zy, TRUE);
 		room->doormask = D_NODOOR;
 		unblock_point(zx,zy); /* vision */
@@ -1343,21 +1807,30 @@
 			room->typ = ROOM;
 			unblock_point(zx,zy); /* vision */
 		    } else if (!Blind)
+/*JP
 			pline_The("wall glows then fades.");
+*/
+			pline("壁は一瞬輝いた．");
 		    break;
 		} else if (IS_TREE(room->typ)) { /* check trees before stone */
 		    if (!(room->wall_info & W_NONDIGGABLE)) {
 			room->typ = ROOM;
 			unblock_point(zx,zy); /* vision */
 		    } else if (!Blind)
+/*JP
 			pline_The("tree shudders but is unharmed.");
+*/
+			pline("木はゆれたが傷つかなかった．");
 		    break;
 		} else if (room->typ == STONE || room->typ == SCORR) {
 		    if (!(room->wall_info & W_NONDIGGABLE)) {
 			room->typ = CORR;
 			unblock_point(zx,zy); /* vision */
 		    } else if (!Blind)
+/*JP
 			pline_The("rock glows then fades.");
+*/
+			pline("石は一瞬輝いた．");
 		    break;
 		}
 	    } else if (IS_ROCK(room->typ)) {
@@ -1389,7 +1862,10 @@
 	} /* while */
 	tmp_at(DISP_END,0);	/* closing call */
 	if (shopdoor || shopwall)
+/*JP
 	    pay_for_damage(shopdoor ? "destroy" : "dig into", FALSE);
+*/
+	    pay_for_damage(shopdoor ? "破壊する" : "穴をあける", FALSE);
 	return;
 }
 
@@ -1555,9 +2031,15 @@
 	} else if (in_invent) {
 	    if (flags.verbose) {
 		char *cname = corpse_xname(obj, FALSE);
+#if 0 /*JP:T*/
 		Your("%s%s %s away%c",
 		     obj == uwep ? "wielded " : nul, cname,
 		     otense(obj, "rot"), obj == uwep ? '!' : '.');
+#else
+		pline("あなたの%s%sは腐ってしまった%s",
+		     obj == uwep ? "手にしている" : "", cname,
+		     obj == uwep ? "！" : "．");
+#endif
 	    }
 	    if (obj == uwep) {
 		uwepgone();	/* now bare handed */
@@ -1618,9 +2100,15 @@
 	/* KMH, balance patch -- new intrinsic */
     if (!Levitation && !Flying) {
 	if(u.uswallow)
+/*JP
 	    You_feel("a sensation like falling into a trap!");
+*/
+	    You("罠に落ちるような感覚におそわれた！");
 	else
+/*JP
 	    pline_The("%s opens beneath you and you fall in!",
+*/
+	    pline("%sが下方に開き，あなたは落ちた！",
 		  surface(u.ux, u.uy));
 
 	u.uburied = TRUE;
@@ -1650,7 +2138,10 @@
 #endif
 	if ((Teleportation || can_teleport(youmonst.data)) &&
 	    (Teleport_control || rn2(3) < Luck+2)) {
+/*JP
 		You("attempt a teleport spell.");
+*/
+		You("瞬間移動を試みた．");
 		(void) dotele();	/* calls unearth_you() */
 	} else if(u.uburied) { /* still buried after 'port attempt */
 		boolean good;
@@ -1659,10 +2150,17 @@
 		   noncorporeal(youmonst.data) || unsolid(youmonst.data) ||
 		   (tunnels(youmonst.data) && !needspick(youmonst.data))) {
 
+#if 0 /*JP*/
 		    You("%s up through the %s.",
 			(tunnels(youmonst.data) && !needspick(youmonst.data)) ?
 			 "try to tunnel" : (amorphous(youmonst.data)) ?
 			 "ooze" : "phase", surface(u.ux, u.uy));
+#else
+		    You("床に%s．",
+			(tunnels(youmonst.data) && !needspick(youmonst.data)) ?
+			 "トンネルを掘ろうとした" : (amorphous(youmonst.data)) ?
+			 "にじみのぼろうとした" : "徐々にはいあがろうとした");
+#endif
 
 		    if(tunnels(youmonst.data) && !needspick(youmonst.data))
 			good = dighole(TRUE);
@@ -1681,7 +2179,10 @@
 	pline("bury_obj");
 #endif
 	if(cansee(otmp->ox, otmp->oy))
+/*JP
 	   pline_The("objects on the %s tumble into a hole!",
+*/
+	   pline_The("%sの物体は穴に転がった！",
 		surface(otmp->ox, otmp->oy));
 
 	bury_objs(otmp->ox, otmp->oy);
diff -aurN slashem-0.0.7E6F2/src/do.c jslashem-0.0.7E6F2-J0.0.8/src/do.c
--- slashem-0.0.7E6F2/src/do.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/do.c	2004-07-18 03:14:08.000000000 +0900
@@ -4,6 +4,15 @@
 
 /* Contains code for 'd', 'D' (drop), '>', '<' (up, down) */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 
@@ -42,7 +51,10 @@
 #endif
 
 	if (*u.ushops) sellobj_state(SELL_DELIBERATE);
+/*JP
 	result = drop(getobj(&drop_types[i], "drop"));
+*/
+	result = drop(getobj(&drop_types[i], "置く"));
 	if (*u.ushops) sellobj_state(SELL_NORMAL);
 	reset_occupations();
 
@@ -85,20 +97,35 @@
 		
 		newsym(rx,ry);
 		if (pushing) {
+/*JP
 		    You("push %s into the %s.", the(xname(otmp)), what);
+*/
+		    You("%sを%sの中へ押しこんだ．", the(xname(otmp)), what);
 		    if (flags.verbose && !Blind)
+/*JP
 			pline("Now you can cross it!");
+*/
+			pline("さぁ渡れるぞ！");
 		    /* no splashing in this case */
 		}
 	    }
 	    if (!fills_up || !pushing) {	/* splashing occurs */
 		if (!u.uinwater) {
 		    if (pushing ? !Blind : cansee(rx,ry)) {
+#if 0 /*JP*/
 			There("is a large splash as %s %s the %s.",
 			      the(xname(otmp)), fills_up? "fills":"falls into",
 			      what);
+#else
+			pline("%sを%sに%sと大きな水しぶきがあがった．",
+			      xname(otmp), what,
+			      fills_up? "埋め込む" : "落す" );
+#endif
 		    } else if (flags.soundok)
+/*JP
 			You_hear("a%s splash.", lava ? " sizzling" : "");
+*/
+			You_hear("%sと言う音を聞いた．",lava ? "シューッ" : "パシャッ");
 		    wake_nearto(rx, ry, 40);
 		}
 
@@ -106,20 +133,42 @@
 		    u.uinwater = 0;
 		    docrt();
 		    vision_full_recalc = 1;
+#if 0 /*JP*/
 		    You("find yourself on dry land again!");
+#else
+		    You("いつのまにか乾いた場所にいた！");
+#endif
 		} else if (lava && distu(rx,ry) <= 2) {
+#if 0 /*JP*/
 		    You("are hit by molten lava%c",
 			Fire_resistance ? '.' : '!');
+#else
+		    You("どろどろの溶岩でダメージを受けた%s",
+			Fire_resistance ? "．" : "！");
+#endif
 			burn_away_slime();
 		    if (Slimed) {
+#if 0 /*JP*/
 			pline("The slime is burned off!");
+#else
+			pline("スライムが焼け落ちた！");
+#endif
 			Slimed =0;
 		    }
+#if 0 /*JP*/
 		    losehp(d((Fire_resistance ? 1 : 3), 6),
 			   "molten lava", KILLED_BY);
+#else
+		    losehp(d((Fire_resistance ? 1 : 3), 6),
+			   "どろどろの溶岩で", KILLED_BY);
+#endif
 		} else if (!fills_up && flags.verbose &&
 			   (pushing ? !Blind : cansee(rx,ry)))
+#if 0 /*JP*/
 		    pline("It sinks without a trace!");
+#else
+		    pline("それはあとかたもなく沈んだ！");
+#endif
 	    }
 
 	    /* boulder is now gone */
@@ -140,6 +189,9 @@
 int x,y;
 const char *verb;
 {
+#if 1 /*JP*//* trap.c */
+	extern const char *set_you[2];
+#endif
 	struct trap *t;
 	struct monst *mtmp;
 
@@ -157,9 +209,15 @@
 		if (((mtmp = m_at(x, y)) && mtmp->mtrapped) ||
 			(u.utrap && u.ux == x && u.uy == y)) {
 		    if (*verb)
+#if 0 /*JP*/
 			pline_The("boulder %s into the pit%s.",
 				vtense((const char *)0, verb),
 				(mtmp) ? "" : " with you");
+#else
+			pline("岩は%s落し穴へ%s．",
+				(mtmp) ? "" : "あなたといっしょに",
+			      jconj(verb,"た"));
+#endif
 		    if (mtmp) {
 			if (!passes_walls(mtmp->data) &&
 				!throws_rocks(mtmp->data)) {
@@ -169,8 +227,13 @@
 			mtmp->mtrapped = 0;
 		    } else {
 			if (!Passes_walls && !throws_rocks(youmonst.data)) {
+#if 0 /*JP:T*/
 			    losehp(rnd(15), "squished under a boulder",
 				   NO_KILLER_PREFIX);
+#else
+			    losehp(rnd(15), "岩の下で潰されて",
+				   KILLED_BY);
+#endif
 			    return FALSE;	/* player remains trapped */
 			} else u.utrap = 0;
 		    }
@@ -178,15 +241,28 @@
 		if (*verb) {
 			if (Blind) {
 				if ((x == u.ux) && (y == u.uy))
+/*JP
 					You_hear("a CRASH! beneath you.");
+*/
+					You_hear("足元で何かが砕ける音を聞いた．");
 				else
+/*JP
 					You_hear("the boulder %s.", verb);
+*/
+					You_hear("岩が%s音を聞いた", verb);
 			} else if (cansee(x, y)) {
+#if 0 /*JP*/
 				pline_The("boulder %s%s.",
 				    t->tseen ? "" : "triggers and ",
 				    t->ttyp == TRAPDOOR ? "plugs a trap door" :
 				    t->ttyp == HOLE ? "plugs a hole" :
 				    "fills a pit");
+#else
+				pline_The("岩は%s．",
+				    t->ttyp == TRAPDOOR ? "落し扉を埋めた" :
+				    t->ttyp == HOLE ? "穴を埋めた" :
+				    "落し穴を埋めた");
+#endif
 			}
 		}
 		deltrap(t);
@@ -204,9 +280,15 @@
 		    ((x == u.ux) && (y == u.uy))) {
 		    if (!Underwater) {
 			if (weight(obj) > 9) {
+/*JP
 				pline("Splash!");
+*/
+				pline("バシャッ！");
 		        } else if (Levitation || Flying) {
+/*JP
 				pline("Plop!");
+*/
+				pline("ポチャン！");
 		        }
 		    }
 		    map_background(x, y, 0);
@@ -219,12 +301,22 @@
 			(t->ttyp==PIT || t->ttyp==SPIKED_PIT)) {
 		/* you escaped a pit and are standing on the precipice */
 		if (Blind && flags.soundok)
+#if 0 /*JP:T*/
 			You_hear("%s %s downwards.",
 				The(xname(obj)), otense(obj, "tumble"));
+#else
+			You_hear("%sが下の方へ転がっていく音を聞いた．",
+				xname(obj));
+#endif
 		else
+#if 0 /*JP:T*/
 			pline("%s %s into %s pit.",
 				The(xname(obj)), otense(obj, "tumble"),
 				the_your[t->madeby_u]);
+#else
+			pline("%sは%s落とし穴に転がりおちた．",
+				xname(obj), set_you[t->madeby_u]);
+#endif
 	}
 #ifdef LIGHTSABERS
 	if (is_lightsaber(obj) && obj->lamplit) {
@@ -250,13 +342,23 @@
 	u.uconduct.gnostic++;
 
 	if ((obj->blessed || obj->cursed) && obj->oclass != COIN_CLASS) {
+#if 0 /*JP*/
 		There("is %s flash as %s %s the altar.",
 			an(hcolor(obj->blessed ? NH_AMBER : NH_BLACK)),
 			doname(obj), otense(obj, "hit"));
+#else
+		pline("%sが祭壇に触れると%s光った．",
+			doname(obj),
+			an(jconj_adj(hcolor(obj->blessed ? NH_AMBER : NH_BLACK))));
+#endif
 		if (!Hallucination) obj->bknown = 1;
 	} else {
+#if 0 /*JP*/
 		pline("%s %s on the altar.", Doname2(obj),
 			otense(obj, "land"));
+#else
+		pline("%sを祭壇の上に置いた．", Doname2(obj));
+#endif
 		obj->bknown = 1;
 	}
 }
@@ -279,70 +381,140 @@
 {
 	register struct obj *otmp,*otmp2;
 	register boolean ideed = TRUE;
-
+#if 0 /*JP*/
 	You("drop %s down the drain.", doname(obj));
+#else
+	You("%sを排水口に落した．", doname(obj));
+#endif
 	obj->in_use = TRUE;	/* block free identification via interrupt */
 	switch(obj->otyp) {	/* effects that can be noticed without eyes */
 	    case RIN_SEARCHING:
+#if 0 /*JP*/
 		You("thought your %s got lost in the sink, but there it is!",
 			xname(obj));
+#else
+		You("%sを失った気がしたが，気のせいだった！",
+			xname(obj));
+#endif
 		goto giveback;
 	    case RIN_SLOW_DIGESTION:
+#if 0 /*JP*/
 		pline_The("ring is regurgitated!");
+#else
+		pline("指輪は逆流した！");
+#endif
 giveback:
 		obj->in_use = FALSE;
 		dropx(obj);
 		trycall(obj);
 		return;
 	    case RIN_LEVITATION:
+#if 0 /*JP*/
 		pline_The("sink quivers upward for a moment.");
+#else
+		pline("流し台は一瞬，上下に震えた．");
+#endif
 		break;
 	    case RIN_POISON_RESISTANCE:
+#if 0 /*JP*/
 		You("smell rotten %s.", makeplural(fruitname(FALSE)));
+#else
+		pline("腐った%sのような匂いがした．", fruitname(FALSE));
+#endif
 		break;
 	    case RIN_AGGRAVATE_MONSTER:
+#if 0 /*JP*/
 		pline("Several flies buzz angrily around the sink.");
+#else
+		pline("数匹のハエがブンブン流し台の回りを飛びまわった．");
+#endif
 		break;
 	    case RIN_SHOCK_RESISTANCE:
+#if 0 /*JP*/
 		pline("Static electricity surrounds the sink.");
+#else
+		pline("流し台がピリピリしはじめた．");
+#endif
 		break;
 /* KMH, balance patch -- now an amulet
 	    case RIN_DRAIN_RESISTANCE:
 		pline("The sink looks weaker for a moment, but it passes.");
 		break; */
 	    case RIN_CONFLICT:
+#if 0 /*JP*/
 		You_hear("loud noises coming from the drain.");
+#else
+		pline("排水口から大きな音が聞こえてきた．");
+#endif
 		break;
 	    case RIN_SLEEPING:		/* ALI */
+#if 0 /*JP*/
 		You_hear("loud snores coming from the drain.");
+#else
+		pline("排水管から大きないびきが聞こえてきた．");
+#endif
 		break;
 	    case RIN_SUSTAIN_ABILITY:	/* KMH */
+#if 0 /*JP*/
 		pline_The("water flow seems fixed.");
+#else
+		pline("水の流れが一定になった．");
+#endif
 		break;
 	    case RIN_GAIN_STRENGTH:
+#if 0 /*JP*/
 		pline_The("water flow seems %ser now.",
 			(obj->spe<0) ? "weak" : "strong");
+#else
+		pline("水の流れが%sなったように見えた．",
+			(obj->spe<0) ? "弱く" : "強く");
+#endif
 		break;
 	    case RIN_GAIN_CONSTITUTION:
+#if 0 /*JP*/
 		pline_The("water flow seems %ser now.",
 			(obj->spe<0) ? "less" : "great");
+#else
+		pline("水の力が%sなったように見えた．",
+			(obj->spe<0) ? "弱く" : "強く");
+#endif
 		break;
 	    case RIN_GAIN_INTELLIGENCE:
 	    case RIN_GAIN_WISDOM:
+#if 0 /*JP*/
 		pline("The water flow seems %ser now.",
 			(obj->spe<0) ? "dull" : "quick");
+#else
+		pline("水の流れが%sなったように見えた．",
+			(obj->spe<0) ? "ゆるやかに" : "活発に");
+#endif
 		break;
 	    case RIN_GAIN_DEXTERITY:
+#if 0 /*JP*/
 		pline("The water flow seems %ser now.",
 			(obj->spe<0) ? "slow" : "fast");
+#else
+		pline("水の流れが%sなったように見えた．",
+			(obj->spe<0) ? "遅く" : "速く");
+#endif
 		break;
 	    case RIN_INCREASE_ACCURACY:	/* KMH */
+#if 0 /*JP*/
 		pline_The("water flow %s the drain.",
 			(obj->spe<0) ? "misses" : "hits");
+#else
+		pline_The("水が排水口%sようになった．",
+			(obj->spe<0) ? "から反れる" : "めがけて流れる");
+#endif
 		break;
 	    case RIN_INCREASE_DAMAGE:
+#if 0 /*JP*/
 		pline_The("water's force seems %ser now.",
 			(obj->spe<0) ? "small" : "great");
+#else
+		pline_The("水の勢いが%sなった．",
+			(obj->spe<0) ? "弱く" : "強く");
+#endif
 		break;
 	    case RIN_HUNGER:
 		ideed = FALSE;
@@ -351,8 +523,13 @@
 		    if (otmp != uball && otmp != uchain &&
 			    !obj_resists(otmp, 1, 99)) {
 			if (!Blind) {
+#if 0 /*JP*/
 			    pline("Suddenly, %s %s from the sink!",
 				  doname(otmp), otense(otmp, "vanish"));
+#else
+			    pline("突然，%sは流し台から消えた！",
+				  doname(otmp));
+#endif
 			    ideed = TRUE;
 			}
 			delobj(otmp);
@@ -361,7 +538,10 @@
 		break;
 	    case MEAT_RING:
 		/* Not the same as aggravate monster; besides, it's obvious. */
+/*JP
 		pline("Several flies buzz around the sink.");
+*/
+		pline("数匹のハエがブンブン流し台の回りを飛びまわった．");
 		break;
 	    default:
 		ideed = FALSE;
@@ -371,62 +551,136 @@
 	    ideed = TRUE;
 	    switch(obj->otyp) {		/* effects that need eyes */
 		case RIN_ADORNMENT:
+#if 0 /*JP*/
 		    pline_The("faucets flash brightly for a moment.");
+#else
+		    pline("蛇口は一瞬明るく輝いた．");
+#endif
 		    break;
 		case RIN_REGENERATION:
+#if 0 /*JP*/
 		    pline_The("sink looks as good as new.");
+#else
+		    pline("流し台が新品のように見えた．");
+#endif
 		    break;
 		case RIN_INVISIBILITY:
+#if 0 /*JP*/
 		    You("don't see anything happen to the sink.");
+#else
+		    pline("流し台に何が起きたのか見えなかった．");
+#endif
 		    break;
 		case RIN_FREE_ACTION:
+#if 0 /*JP*/
 		    You("see the ring slide right down the drain!");
+#else
+		    pline("指輪が排水口をするりと避けるのを見た！");
+#endif
 		    break;
 		case RIN_SEE_INVISIBLE:
+#if 0 /*JP*/
 		    You("see some air in the sink.");
+#else
+		    You("流し台の上に何らかの気体が見えた．");
+#endif
 		    break;
 		case RIN_STEALTH:
+#if 0 /*JP*/
 		pline_The("sink seems to blend into the floor for a moment.");
+#else
+		    pline("一瞬，流し台が床に溶けこんだように見えた．");
+#endif
 		    break;
 		case RIN_FIRE_RESISTANCE:
+#if 0 /*JP*/
 		pline_The("hot water faucet flashes brightly for a moment.");
+#else
+		    pline("一瞬，熱湯の蛇口が明るく輝いた．");
+#endif
 		    break;
 		case RIN_COLD_RESISTANCE:
+#if 0 /*JP*/
 		pline_The("cold water faucet flashes brightly for a moment.");
+#else
+		    pline("一瞬，冷水の蛇口が明るく輝いた．");
+#endif
 		    break;
 		case RIN_PROTECTION_FROM_SHAPE_CHAN:
+#if 0 /*JP*/
 		    pline_The("sink looks nothing like a fountain.");
+#else
+		    pline("流し台は泉とはまったく違うもののように見えた．");
+#endif
 		    break;
 		case RIN_PROTECTION:
+#if 0 /*JP*/
 		    pline_The("sink glows %s for a moment.",
 			    hcolor((obj->spe<0) ? NH_BLACK : NH_SILVER));
+#else
+		    pline("流し台は一瞬%s輝いた．",
+			  jconj_adj(hcolor((obj->spe<0) ? NH_BLACK : NH_SILVER)));
+#endif
 		    break;
 		case RIN_WARNING:
+#if 0 /*JP*/
 		    pline_The("sink glows %s for a moment.", hcolor(NH_WHITE));
+#else
+		    pline("流し台は一瞬%s輝いた．", jconj_adj(hcolor(NH_WHITE)));
+#endif
 		    break;
 		case RIN_MOOD:
+#if 0 /*JP*/
 			pline_The("sink looks groovy.");
+#else
+		    pline("流し台はとてもステキに見えた．");
+#endif
 			break;
 		case RIN_TELEPORTATION:
+#if 0 /*JP*/
 		    pline_The("sink momentarily vanishes.");
+#else
+		    pline("流し台は一瞬消えた．");
+#endif
 		    break;
 		case RIN_TELEPORT_CONTROL:
+#if 0 /*JP*/
 	    pline_The("sink looks like it is being beamed aboard somewhere.");
+#else
+	    /*JP "beam aboard" はスタートレックの「転送」*/
+	    pline("流し台はどこかに転送されようとしているように見えた．");
+#endif
 		    break;
 		case RIN_POLYMORPH:
+#if 0 /*JP*/
 		    pline_The("sink momentarily looks like a fountain.");
+#else
+		    pline("流し台は一瞬泉のように見えた．");
+#endif
 		    break;
 		case RIN_POLYMORPH_CONTROL:
+#if 0 /*JP*/
 	pline_The("sink momentarily looks like a regularly erupting geyser.");
+#else
+	pline("流し台は一瞬規則正しく噴出する間欠泉のように見えた．");
+#endif
 		    break;
 	    }
 	}
 	if(ideed)
 	    trycall(obj);
 	else
+#if 0 /*JP*/
 	    You_hear("the ring bouncing down the drainpipe.");
+#else
+	    You("指輪が排水口に当りながら落る音を聞いた．");
+#endif
 	if (!rn2(20)) {
+#if 0 /*JP*/
 		pline_The("sink backs up, leaving %s.", doname(obj));
+#else
+		pline("しかし，流し台に%sは流れてない．", doname(obj));
+#endif
 		obj->in_use = FALSE;
 		dropx(obj);
 	} else
@@ -445,8 +699,13 @@
 {
 	if(obj->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL)){
 		if (*word)
+#if 0 /*JP:T*/
 			Norep("You cannot %s %s you are wearing.",word,
 				something);
+#else
+			Norep("あなたが身につけているものを%sことはできない．",
+			        word);
+#endif
 		return(FALSE);
 	}
 	/* KMH, balance patch -- removed stone of rotting */        
@@ -458,9 +717,14 @@
 			   implicitly forced to be 1; replicate its kludge... */
 			if (!strcmp(word, "throw") && obj->quan > 1L)
 			    obj->corpsenm = 1;
+#if 0 /*JP*/
 			pline("For some reason, you cannot %s%s the stone%s!",
 			      word, obj->corpsenm ? " any of" : "",
 			      plur(obj->quan));
+#else
+			pline("どういうわけか，あなたは石を%sことはできない！",
+				word);
+#endif
 		}
 		obj->corpsenm = 0;		/* reset */
 		obj->bknown = 1;
@@ -468,15 +732,23 @@
 	}
 	if (obj->otyp == LEASH && obj->leashmon != 0) {
 		if (*word)
+/*JP
 			pline_The("leash is tied around your %s.",
+*/
+			pline("紐があなたの%sに結びつけられている．",
 					body_part(HAND));
 		return(FALSE);
 	}
 #ifdef STEED
 	if (obj->owornmask & W_SADDLE) {
 		if (*word)
+#if 0 /*JP*/
 			You("cannot %s %s you are sitting on.", word,
 				something);
+#else
+			You("乗っている間は%sを%sことはできない．", 
+			    something, word);
+#endif
 		return (FALSE);
 	}
 #endif
@@ -489,7 +761,10 @@
 register struct obj *obj;
 {
 	if(!obj) return(0);
+/*JP
 	if(!canletgo(obj,"drop"))
+*/
+	if(!canletgo(obj,"置く"))
 		return(0);
 	if(obj == uwep) {
 		if(welded(uwep)) {
@@ -513,8 +788,13 @@
 
 			/* doname can call s_suffix, reusing its buffer */
 			Strcpy(buf, s_suffix(mon_nam(u.ustuck)));
+#if 0 /*JP*/
 			You("drop %s into %s %s.", doname(obj), buf,
 				mbodypart(u.ustuck, STOMACH));
+#else
+			You("%sを%sの%sに置いた．", doname(obj), buf,
+				mbodypart(u.ustuck, STOMACH));
+#endif
 		}
 	} else {
 #ifdef SINKS
@@ -525,7 +805,10 @@
 	    }
 #endif
 	    if (!can_reach_floor()) {
+/*JP
 		if(flags.verbose) You("drop %s.", doname(obj));
+*/
+		if(flags.verbose) You("%sを置いた．", doname(obj));
 #ifndef GOLDOBJ
 		if (obj->oclass != COIN_CLASS || obj == invent) freeinv(obj);
 #else
@@ -537,7 +820,10 @@
 		return(1);
 	    }
 	    if (!IS_ALTAR(levl[u.ux][u.uy].typ) && flags.verbose)
+/*JP
 		You("drop %s.", doname(obj));
+*/
+		You("%sを置いた．", doname(obj));
 	}
 	dropx(obj);
 	return(1);
@@ -572,7 +858,10 @@
 	if (obj == uquiver) setuqwep((struct obj *)0);
 	if (obj == uswapwep) setuswapwep((struct obj *)0, FALSE);
 
+/*JP
 	if (!u.uswallow && flooreffects(obj,u.ux,u.uy,"drop")) return;
+*/
+	if (!u.uswallow && flooreffects(obj,u.ux,u.uy,"落ちる")) return;
 	/* uswallow check done by GAN 01/29/87 */
 	if(u.uswallow) {
 	    boolean could_petrify = FALSE;
@@ -657,7 +946,10 @@
 	add_valid_menu_class(0); /* clear any classes already there */
 	if (*u.ushops) sellobj_state(SELL_DELIBERATE);
 	if (flags.menu_style != MENU_TRADITIONAL ||
+/*JP
 		(result = ggetobj("drop", drop, 0, FALSE, (unsigned *)0)) < -1)
+*/
+		(result = ggetobj("置く", drop, 0, FALSE, (unsigned *)0)) < -1)
 	    result = menu_drop(result);
 	if (*u.ushops) sellobj_state(SELL_NORMAL);
 	reset_occupations();
@@ -696,7 +988,10 @@
 	all_categories = (retry == -2);
     } else if (flags.menu_style == MENU_FULL) {
 	all_categories = FALSE;
+/*JP
 	n = query_category("Drop what type of items?",
+*/
+	n = query_category("どの種類の道具を置きますか？",
 			invent,
 			UNPAID_TYPES | ALL_TYPES | CHOOSE_ALL |
 			BUC_BLESSED | BUC_CURSED | BUC_UNCURSED | BUC_UNKNOWN,
@@ -715,7 +1010,10 @@
 	unsigned ggoresults = 0;
 	all_categories = FALSE;
 	/* Gather valid classes via traditional NetHack method */
+/*JP
 	i = ggetobj("drop", drop, 0, TRUE, &ggoresults);
+*/
+	i = ggetobj("置く", drop, 0, TRUE, &ggoresults);
 	if (i == -2) all_categories = TRUE;
 	if (ggoresults & ALL_FINISHED) {
 		n_dropped = i;
@@ -730,7 +1028,10 @@
 	}
     } else {
 	/* should coordinate with perm invent, maybe not show worn items */
+/*JP
 	n = query_objlist("What would you like to drop?", invent,
+*/
+	n = query_objlist("どれを置きますか？", invent,
 			USE_INVLET|INVORDER_SORT, &pick_list,
 			PICK_ANY, all_categories ? allow_all : allow_category);
 	if (n > 0) {
@@ -787,17 +1088,28 @@
 		ladder_down = (u.ux == xdnladder && u.uy == ydnladder);
 
 	if (Role_if(PM_GNOME) && on_level(&mineend_level,&u.uz)) {
+#if 0 /*JP*/
 		pline("The staircase is filled with tons of rubble and debris.");
 		pline("Poor Ruggo!");
+#else
+		pline("階段は何トンもの瓦礫と採掘屑で埋まっている．");
+		pline("かわいそうなルッゴ！");
+#endif
 		return (0);
 	}
 
 #ifdef STEED
 	if (u.usteed && !u.usteed->mcanmove) {
+/*JP
 		pline("%s won't move!", Monnam(u.usteed));
+*/
+		pline("%sは動けない！", Monnam(u.usteed));
 		return(0);
 	} else if (u.usteed && u.usteed->meating) {
+/*JP
 		pline("%s is still eating.", Monnam(u.usteed));
+*/
+		pline("%sはまだ食べている．", Monnam(u.usteed));
 		return(0);
 	} else
 #endif
@@ -820,8 +1132,13 @@
 		if (float_down(I_SPECIAL|TIMEOUT, W_ARTI))
 		    return (1);   /* came down, so moved */
 	    }
+#if 0 /*JP*/
 	    floating_above(stairs_down ? "stairs" : ladder_down ?
 			   "ladder" : surface(u.ux, u.uy));
+#else
+	    floating_above(stairs_down ? "階段" : ladder_down ?
+			   "はしご" : surface(u.ux, u.uy));
+#endif
 	    return (0);   /* didn't move */
 	}
 	if (!stairs_down && !ladder_down) {
@@ -833,34 +1150,63 @@
 				uwep && is_pick(uwep)) {
 				return use_pick_axe2(uwep);
 			} else {
+/*JP
 				You_cant("go down here.");
+*/
+			pline("ここでは降りることができない．");
 				return(0);
 			}
 		}
 	}
 	if(u.ustuck) {
+#if 0 /*JP*/
 		You("are %s, and cannot go down.",
 			!u.uswallow ? "being held" : is_animal(u.ustuck->data) ?
 			"swallowed" : "engulfed");
+#else
+		You("%s降りることができない．",
+			!u.uswallow ? "つかまえられていて" : is_animal(u.ustuck->data) ?
+			"飲み込まれていて" : "巻き込まれていて");
+#endif
 		return(1);
 	}
 	if (on_level(&valley_level, &u.uz) && !u.uevent.gehennom_entered) {
+/*JP
 		You("are standing at the gate to Gehennom.");
+*/
+		You("ゲヘナの門の前に立っている．");
+/*JP
 		pline("Unspeakable cruelty and harm lurk down there.");
+*/
+		pline("言葉にすらできない残虐と惨事がこの下に潜んでいる．");
+/*JP
 		if (yn("Are you sure you want to enter?") != 'y')
+*/
+		if (yn("本当に入りますか？") != 'y')
 			return(0);
+/*JP
 		else pline("So be it.");
+*/
+		else pline("運命は決まった．");
 		u.uevent.gehennom_entered = 1;	/* don't ask again */
 	}
 
 	if(!next_to_u()) {
+/*JP
 		You("are held back by your pet!");
+*/
+		You("ペットに呼びもどされた！");
 		return(0);
 	}
 
 	if (trap)
+#if 0 /*JP*/
 	    You("%s %s.", locomotion(youmonst.data, "jump"),
 		trap->ttyp == HOLE ? "down the hole" : "through the trap door");
+#else
+	    You("%s%s．", locomotion(youmonst.data, "跳ぶ"),
+		trap->ttyp == HOLE ? "穴に落ちた" : "落し扉に入った");
+#endif
 
 	if (trap && Is_stronghold(&u.uz)) {
 		goto_hell(FALSE, TRUE);
@@ -880,36 +1226,62 @@
 	     && (!sstairs.sx || u.ux != sstairs.sx || u.uy != sstairs.sy
 			|| !sstairs.up)
 	  ) {
+/*JP
 		You_cant("go up here.");
+*/
+		You("ここでは上ることができない．");
 		return(0);
 	}
 #ifdef STEED
 	if (u.usteed && !u.usteed->mcanmove) {
+/*JP
 		pline("%s won't move!", Monnam(u.usteed));
+*/
+		pline("%sは動けない！", Monnam(u.usteed));
 		return(0);
 	} else if (u.usteed && u.usteed->meating) {
+/*JP
 		pline("%s is still eating.", Monnam(u.usteed));
+*/
+		pline("%sはまだ食べている．", Monnam(u.usteed));
 		return(0);
 	} else
 #endif
 	if(u.ustuck) {
+#if 0 /*JP*/
 		You("are %s, and cannot go up.",
 			!u.uswallow ? "being held" : is_animal(u.ustuck->data) ?
 			"swallowed" : "engulfed");
+#else
+		You("%s降りることができない．",
+			!u.uswallow ? "つかまえられていて" : is_animal(u.ustuck->data) ?
+			"飲み込まれていて" : "巻き込まれていて");
+#endif
 		return(1);
 	}
 	if(near_capacity() > SLT_ENCUMBER) {
 		/* No levitation check; inv_weight() already allows for it */
+#if 0 /*JP*/
 		Your("load is too heavy to climb the %s.",
 			levl[u.ux][u.uy].typ == STAIRS ? "stairs" : "ladder");
+#else
+		You("物を持ちすぎて%sを上ることができない．",
+			levl[u.ux][u.uy].typ == STAIRS ? "階段" : "はしご");
+#endif
 		return(1);
 	}
 	if(ledger_no(&u.uz) == 1) {
+/*JP
 		if (yn("Beware, there will be no return! Still climb?") != 'y')
+*/
+		if (yn("気をつけろ，多分戻れないぞ！それでも上る？") != 'y')
 			return(0);
 	}
 	if(!next_to_u()) {
+/*JP
 		You("are held back by your pet!");
+*/
+		You("ペットに呼びもどされた！");
 		return(0);
 	}
 	at_ladder = (boolean) (levl[u.ux][u.uy].typ == LADDER);
@@ -948,8 +1320,13 @@
 	if (!savelev(fd, ledger_no(&u.uz), COUNT_SAVE)) {
 		(void) close(fd);
 		delete_levelfile(ledger_no(&u.uz));
+#if 0 /*JP*/
 		pline("Slash'EM is out of disk space for making levels!");
 		You("can save, quit, or continue playing.");
+#else
+		pline("新しいレベルを作るためのディスク容量が足りない！");
+		You("セーブするか終了するか，あるいはプレイを続行できる．");
+#endif
 		return -1;
 	}
 #endif
@@ -1057,7 +1434,10 @@
 	 * (s)he has been given the go-ahead by the leader.
 	 */
 	if (on_level(&u.uz, &qstart_level) && !newdungeon && !ok_to_quest()) {
+/*JP
 		pline("A mysterious force prevents you from descending.");
+*/
+		pline("奇妙な力があなたが降りるのを妨げた．");
 		return;
 	}
 
@@ -1140,7 +1520,10 @@
 		fd = open_levelfile(new_ledger, whynot);
 		if (fd < 0) {
 			pline("%s", whynot);
+/*JP
 			pline("Probably someone removed it.");
+*/
+			pline("おそらく誰かが削除したのだろう．");
 			killer = whynot;
 			done(TRICKED);
 			/* we'll reach here if running in wizard mode */
@@ -1190,10 +1573,18 @@
 		}
 		/* Remove bug which crashes with levitation/punishment  KAA */
 		if (Punished && !Levitation) {
+#if 0 /*JP*/
 			pline("With great effort you climb the %s.",
 				at_ladder ? "ladder" : "stairs");
+#else
+			pline("やっとこさ%sを上った．",
+				at_ladder ? "はしご" : "階段");
+#endif
 		} else if (at_ladder)
+/*JP
 		    You("climb up the ladder.");
+*/
+		    You("はしごを上った．");
 	    } else {	/* down */
 		if (at_ladder) {
 		    u_on_newpos(xupladder, yupladder);
@@ -1202,11 +1593,19 @@
 		    else u_on_upstairs();
 		}
 		if (u.dz && Flying)
+#if 0 /*JP*/
 		    You("fly down along the %s.",
 			at_ladder ? "ladder" : "stairs");
+#else
+		    You("%sに沿って跳び降りた．",
+			at_ladder ? "はしご" : "階段");
+#endif
 		else if (u.dz &&
 		    (near_capacity() > UNENCUMBERED || Punished || Fumbling)) {
+/*JP
 		    You("fall down the %s.", at_ladder ? "ladder" : "stairs");
+*/
+		    You("%sを転げ落ちた．", at_ladder ? "はしご" : "階段");
 		    if (Punished) {
 			drag_down();
 			if (carried(uball)) {
@@ -1225,10 +1624,19 @@
 			dismount_steed(DISMOUNT_FELL);
 		    else
 #endif
+/*JP
 			losehp(rnd(3), "falling downstairs", KILLED_BY);
+*/
+		    losehp(rnd(3), "階段を転げ落ちて", KILLED_BY);
+/*JP
 		    selftouch("Falling, you");
+*/
+		    selftouch("落ちながら，あなたは");
 		} else if (u.dz && at_ladder)
+/*JP
 		    You("climb down the ladder.");
+*/
+		    You("はしごを降りた．");
 	    }
 	} else {	/* trap door or level_tele or In_endgame */
 	    if (was_in_W_tower && On_W_tower_level(&u.uz))
@@ -1251,7 +1659,10 @@
 				LR_DOWNTELE, (d_level *) 0);
 	    if (falling) {
 		if (Punished) ballfall();
+/*JP
 		selftouch("Falling, you");
+*/
+		selftouch("落ちながら，あなたは");
 	    }
 	}
 
@@ -1323,52 +1734,86 @@
 	/* Check whether we just entered Gehennom. */
 	if (!In_hell(&u.uz0) && Inhell) {
 	    if (Is_valley(&u.uz)) {
+/*JP
 		You("arrive at the Valley of the Dead...");
+*/
+		You("死の谷に到達した．．．");
+/*JP
 		pline_The("odor of burnt flesh and decay pervades the air.");
+*/
+		pline("死肉や腐肉の燃える悪臭がただよっている．");
 #ifdef MICRO
 		display_nhwindow(WIN_MESSAGE, FALSE);
 #endif
+/*JP
 		You_hear("groans and moans everywhere.");
+*/
+		pline("うめき声やうなり声があちこちから聞こえる．");
+/*JP
 	    } else pline("It is hot here.  You smell smoke...");
+*/
+	    } else pline("ここは暑い．煙りの匂いがする．．．");
 	}
 
 	if (familiar) {
 	    static const char * const fam_msgs[4] = {
+#if 0 /*JP*/
 		"You have a sense of deja vu.",
 		"You feel like you've been here before.",
 		"This place %s familiar...",
+#else
+		"既視感におそわれた．",
+		"前にここに来たことがあるような気がした．",
+		"この場所は懐かしい．．．",
+#endif
 		0	/* no message */
 	    };
 	    static const char * const halu_fam_msgs[4] = {
+#if 0 /*JP*/
 		"Whoa!  Everything %s different.",
 		"You are surrounded by twisty little passages, all alike.",
 		"Gee, this %s like uncle Conan's place...",
+#else
+		"オワッ！まったく変わっちまってる．",
+		"あなたはまがりくねった通路にかこまれていた．．．",
+		"ゲー！コナンおじさんの場所に似ている．．．",
+#endif
 		0	/* no message */
 	    };
 	    const char *mesg;
+#if 0 /*JP*/
 	    char buf[BUFSZ];
+#endif
 	    int which = rn2(4);
 
 	    if (Hallucination)
 		mesg = halu_fam_msgs[which];
 	    else
 		mesg = fam_msgs[which];
+#if 0 /*JP*/
 	    if (mesg && index(mesg, '%')) {
 		Sprintf(buf, mesg, !Blind ? "looks" : "seems");
 		mesg = buf;
 	    }
+#endif
 	    if (mesg) pline(mesg);
 	}
 
 #ifdef REINCARNATION
 	if (new && Is_rogue_level(&u.uz))
+/*JP
 	    You("enter what seems to be an older, more primitive world.");
+*/
+	    You("とても古くさく見える部屋に入った，ずいぶん単純な世界だ．");
 #endif
 	/* Final confrontation */
 	if (In_endgame(&u.uz) && newdungeon && u.uhave.amulet)
 		resurrect();
 	if (newdungeon && In_V_tower(&u.uz) && In_hell(&u.uz0))
+/*JP
 		pline_The("heat and smoke are gone.");
+*/
+		pline("熱と煙りは消えさった．");
 
 	/* the message from your quest leader */
 	if (!In_quest(&u.uz0) && at_dgn_entrance("The Quest") &&
@@ -1384,8 +1829,14 @@
 
 	/* once Croesus is dead, his alarm doesn't work any more */
 	if (Is_knox(&u.uz) && (new || !mvitals[PM_CROESUS].died)) {
+/*JP
 		You("penetrated a high security area!");
+*/
+		You("最高機密の場所へ踏み込んだ！");
+/*JP
 		pline("An alarm sounds!");
+*/
+		pline("警報がなった！");
 		for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
 		    if (!DEADMONSTER(mtmp) && mtmp->msleeping) mtmp->msleeping = 0;
 	}
@@ -1422,8 +1873,12 @@
 
 	/* create a guardian angel next to player, if worthy */
 	if (Conflict) {
+#if 0 /*JP*/
 	    pline(
 	     "A voice booms: \"Thy desire for conflict shall be fulfilled!\"");
+#else
+	    pline("声が響いた:「汝の闘争への望み，かなえられるべし！」");
+#endif
 	    for (i = rnd(4); i > 0; --i) {
 		mm.x = u.ux;
 		mm.y = u.uy;
@@ -1432,16 +1887,25 @@
 				     mm.x, mm.y, FALSE);
 	    }
 	} else if (u.ualign.record > 8) {	/* fervent */
+/*JP
 	    pline("A voice whispers: \"Thou hast been worthy of me!\"");
+*/
+	    pline("ささやき声が聞こえた:「汝，我が評価を得たり！」");
 	    mm.x = u.ux;
 	    mm.y = u.uy;
 	    if (enexto(&mm, mm.x, mm.y, &mons[PM_ANGEL])) {
 		if ((mtmp = mk_roamer(&mons[PM_ANGEL], u.ualign.type,
 				      mm.x, mm.y, TRUE)) != 0) {
 		    if (!Blind)
+/*JP
 			pline("An angel appears near you.");
+*/
+			pline("天使があなたのそばに現われた．");
 		    else
+/*JP
 			You_feel("the presence of a friendly angel near you.");
+*/
+			You("近くに友好的な天使の存在を感じた．");
 		    /* guardian angel -- the one case mtame doesn't
 		     * imply an edog structure, so we don't want to
 		     * call tamedog().
@@ -1545,7 +2009,10 @@
     
     where = corpse->where;
     is_uwep = corpse == uwep;
+/*JP
     cname = eos(strcpy(cname_buf, "bite-covered "));
+*/
+    cname = eos(strcpy(cname_buf, "歯型のついた"));
     Strcpy(cname, corpse_xname(corpse, TRUE));
     mcarry = (where == OBJ_MINVENT) ? corpse->ocarry : 0;
 
@@ -1571,57 +2038,110 @@
 	    case OBJ_INVENT:
 		if (is_uwep) {
 		    if (moldy) {
+#if 0 /*JP*/
 			Your("weapon goes moldy.");
 			pline("%s writhes out of your grasp!", Monnam(mtmp));
+#else
+			Your("武器がカビていく．");
+			pline("%sはもがいた！", cname);
+#endif
 		    }
 		    else
+#if 0 /*JP*/
 		    pline_The("%s writhes out of your grasp!", cname);
+#else
+		    pline_The("%sはもがいた！", cname);
+#endif
 		}
 		else
+#if 0 /*JP*/
 		    You_feel("squirming in your backpack!");
+#else
+		    pline("背負い袋で何かがもがいているような気がした！");
+#endif
 		break;
 
 	    case OBJ_FLOOR:
 		if (cansee(mtmp->mx, mtmp->my)) {
 		    if (moldy)
+#if 0 /*JP*/
 			pline("%s grows on a moldy corpse!",
 			  Amonnam(mtmp));
+#else
+			pline("%sがカビた死体の上で成長した！",
+			  l_monnam(mtmp));
+#endif
 		    else
+#if 0 /*JP*/
 		    pline("%s rises from the dead!", chewed ?
 			  Adjmonnam(mtmp, "bite-covered") : Monnam(mtmp));
+#else
+		    pline("%sが蘇った！", chewed ?
+			  Adjmonnam(mtmp, "歯型のついた") : Monnam(mtmp));
+#endif
 		}
 		break;
 
 	    case OBJ_MINVENT:		/* probably a nymph's */
 		if (cansee(mtmp->mx, mtmp->my)) {
 		    if (canseemon(mcarry))
+#if 0 /*JP*/
 			pline("Startled, %s drops %s as it %s!",
 			      mon_nam(mcarry), moldy ? "a corpse" : an(cname),
 			      moldy ? "goes moldy" : "revives");
+#else
+			pline("%sが%sのにびっくりして，%sは%sを落した！",
+			      moldy ? "死体" : cname,
+			      moldy ? "カビになった" : "生きかえった",
+			      mon_nam(mcarry),
+			      moldy ? "死体" : an(cname));
+#endif
 		    else
+#if 0 /*JP*/
 			pline("%s suddenly appears!", chewed ?
 			      Adjmonnam(mtmp, "bite-covered") : Monnam(mtmp));
+#else
+			pline("%sが突然現われた！", chewed ?
+			      Adjmonnam(mtmp, "歯型のついた") : Monnam(mtmp));
+#endif
 		}
 		break;
 	   case OBJ_CONTAINED:
 	   	if (container_where == OBJ_MINVENT && cansee(mtmp->mx, mtmp->my) &&
 		    mcarry && canseemon(mcarry) && container) {
 		        char sackname[BUFSZ];
+#if 0 /*JP*/
 		        Sprintf(sackname, "%s %s", s_suffix(mon_nam(mcarry)),
 				xname(container)); 
 	   		pline("%s writhes out of %s!", Amonnam(mtmp), sackname);
+#else
+		        Sprintf(sackname, "%sの%s", mon_nam(mcarry),
+  				xname(container)); 
+	   		pline("%sは%sから逃れようともがいた！", Amonnam(mtmp),
+	   		      sackname);
+#endif
 	   	} else if (container_where == OBJ_INVENT && container) {
 		        char sackname[BUFSZ];
 		        Strcpy(sackname, an(xname(container)));
+#if 0 /*JP*/
 	   		pline("%s %s out of %s in your pack!",
 	   			Blind ? Something : Amonnam(mtmp),
 				locomotion(mtmp->data,"writhes"),
 	   			sackname);
+#else
+	   		pline("%sは袋の中で%sから逃れようともがいた！",
+	   			Blind ? Something : Amonnam(mtmp),
+	   			sackname);
+#endif
 	   	} else if (container_where == OBJ_FLOOR && container &&
 		            cansee(mtmp->mx, mtmp->my)) {
 		        char sackname[BUFSZ];
 		        Strcpy(sackname, an(xname(container)));
+#if 0 /*JP*/
 			pline("%s escapes from %s!", Amonnam(mtmp), sackname);
+#else
+			pline("%sは%sから逃れた！", Amonnam(mtmp), sackname);
+#endif
 		}
 		break;
 	    default:
@@ -1649,7 +2169,10 @@
     /* if we succeed, the corpse is gone, otherwise, rot it away */
     if (!revive_corpse(body, FALSE)) {
 	if (is_rider(&mons[body->corpsenm]))
+/*JP
 	    You_feel("less hassled.");
+*/
+	    You("悩み事が減った気がした．");
 	(void) start_timer(250L - (monstermoves-body->age),
 					TIMER_OBJECT, ROT_CORPSE, arg);
     }
@@ -1747,13 +2270,19 @@
 	if (Blinded < 4)	Blinded = 0;
 	else			Blinded -= 4;
 	if (!Blinded) {
+/*JP
 		pline("You've got the glop off.");
+*/
+		You("%sからネバネバがとれた．", body_part(FACE));
 		u.ucreamed = 0;
 		Blinded = 1;
 		make_blinded(0L,TRUE);
 		return(0);
 	} else if (!u.ucreamed) {
+/*JP
 		Your("%s feels clean now.", body_part(FACE));
+*/
+		Your("%sはきれいになった．", body_part(FACE));
 		return(0);
 	}
 	return(1);		/* still busy */
@@ -1765,14 +2294,20 @@
 	if(u.ucreamed)  {
 		static NEARDATA char buf[39];
 
+/*JP
 		Sprintf(buf, "wiping off your %s", body_part(FACE));
+*/
+		Sprintf(buf, "%sを拭いている", body_part(FACE));
 		set_occupation(wipeoff, buf, 0);
 		/* Not totally correct; what if they change back after now
 		 * but before they're finished wiping?
 		 */
 		return(1);
 	}
+/*JP
 	Your("%s is already clean.", body_part(FACE));
+*/
+	Your("%sは汚れていない．", body_part(FACE));
 	return(1);
 }
 
@@ -1814,10 +2349,16 @@
 		{
 			/* KMH, intrinsics patch */
 			if((EWounded_legs & BOTH_SIDES) == BOTH_SIDES) {
+/*JP
 			Your("%s feel somewhat better.",
+*/
+			Your("両%sは回復した．",
 				makeplural(body_part(LEG)));
 		} else {
+/*JP
 			Your("%s feels somewhat better.",
+*/
+			Your("%sは回復した．",
 				body_part(LEG));
 		}
 		}
diff -aurN slashem-0.0.7E6F2/src/do_name.c jslashem-0.0.7E6F2-J0.0.8/src/do_name.c
--- slashem-0.0.7E6F2/src/do_name.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/do_name.c	2004-08-05 09:39:42.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef OVLB
@@ -21,19 +30,36 @@
     boolean doing_what_is;
     winid tmpwin = create_nhwindow(NHW_MENU);
 
+/*JP
     Sprintf(sbuf, "Use [%s] to move the cursor to %s.",
+*/
+    Sprintf(sbuf, "[%s]で%sへ移動できる．",
 	    iflags.num_pad ? "2468" : "hjkl", goal);
     putstr(tmpwin, 0, sbuf);
+/*JP
     putstr(tmpwin, 0, "Use [HJKL] to move the cursor 8 units at a time.");
+*/
+    putstr(tmpwin, 0, "[HJKL]で一度に8歩移動できる．");
+/*JP
     putstr(tmpwin, 0, "Or enter a background symbol (ex. <).");
+*/
+    putstr(tmpwin, 0, "背景のシンボルを入力するとその位置に移動する(例：<)．");
     /* disgusting hack; the alternate selection characters work for any
        getpos call, but they only matter for dowhatis (and doquickwhatis) */
     doing_what_is = (goal == what_is_an_unknown_object);
+#if 0 /*JP*/
     Sprintf(sbuf, "Type a .%s when you are at the right place.",
             doing_what_is ? " or , or ; or :" : "");
+#else
+    Sprintf(sbuf, "[.]%sで決定．",
+            doing_what_is ? "[,][;][:]" : "");
+#endif
     putstr(tmpwin, 0, sbuf);
     if (!force)
+/*JP
 	putstr(tmpwin, 0, "Type Space or Escape when you're done.");
+*/
+	putstr(tmpwin, 0, "スペースまたはエスケープで終了．");
     putstr(tmpwin, 0, "");
     display_nhwindow(tmpwin, TRUE);
     destroy_nhwindow(tmpwin);
@@ -55,7 +81,10 @@
     if(iflags.num_pad) sdp = ndir; else sdp = sdir;	/* DICE workaround */
 
     if (flags.verbose) {
+/*JP
 	pline("(For instructions type a ?)");
+*/
+	pline("(?でヘルプ)");
 	msg_given = TRUE;
     }
     cx = cc->x;
@@ -155,19 +184,34 @@
 			    }	/* column */
 			}	/* row */
 		    }		/* pass */
+/*JP
 		    pline("Can't find dungeon feature '%c'.", c);
+*/
+		    pline("'%c'？", c);
 		    msg_given = TRUE;
 		    goto nxtc;
 		} else {
+#if 0 /*JP*/
 		    pline("Unknown direction: '%s' (%s).",
 			  visctrl((char)c),
 			  !force ? "aborted" :
 			  iflags.num_pad ? "use 2468 or ." : "use hjkl or .");
+#else
+		    pline("その方向はない：'%s' (%s)",
+			  visctrl((char)c),
+			  force ?
+			  iflags.num_pad ? "[2468]で移動，[.]で終了" :
+			  "[hjkl]で移動，[.]で終了" :
+			  "中断した");
+#endif
 		    msg_given = TRUE;
 		} /* k => matching */
 	    } /* !quitchars */
 	    if (force) goto nxtc;
+/*JP
 	    pline("Done.");
+*/
+	    pline("以上．");
 	    msg_given = FALSE;	/* suppress clear */
 	    cx = -1;
 	    cy = 0;
@@ -211,6 +255,11 @@
 		if (lth) Strcpy(NAME(mtmp), name);
 		return mtmp;
 	}
+#if 1 /*JP*/
+	if(is_kanji2(name,lth-1))
+	  --lth;
+#endif
+
 	mtmp2 = newmonst(mtmp->mxlth + lth);
 	*mtmp2 = *mtmp;
 	(void) memcpy((genericptr_t)mtmp2->mextra,
@@ -231,12 +280,18 @@
 	char qbuf[QBUFSZ];
 
 	if (Hallucination) {
+/*JP
 		You("would never recognize it anyway.");
+*/
+		You("それを認識できない．");
 		return 0;
 	}
 	cc.x = u.ux;
 	cc.y = u.uy;
+/*JP
 	if (getpos(&cc, FALSE, "the monster you want to name") < 0 ||
+*/
+	if (getpos(&cc, FALSE, "あなたが名づけたい怪物") < 0 ||
 			(cx = cc.x) < 0)
 		return 0;
 	cy = cc.y;
@@ -247,11 +302,19 @@
 		mtmp = u.usteed;
 	    else {
 #endif
+#if 0 /*JP*/
 		pline("This %s creature is called %s and cannot be renamed.",
 		ACURR(A_CHA) > 14 ?
 		(flags.female ? "beautiful" : "handsome") :
 		"ugly",
 		plname);
+#else
+		pline("この%s生き物は%sと呼ばれていて，名前は変更できない．",
+		ACURR(A_CHA) > 14 ?
+		(flags.female ? "美人の" : "かっこいい") :
+		"醜い",
+		plname);
+#endif
 		return(0);
 #ifdef STEED
 	    }
@@ -264,19 +327,28 @@
 			|| mtmp->m_ap_type == M_AP_FURNITURE
 			|| mtmp->m_ap_type == M_AP_OBJECT
 			|| (mtmp->minvis && !See_invisible)))) {
+/*JP
 		pline("I see no monster there.");
+*/
+		pline("そこに怪物はいない．");
 		return(0);
 	}
 	/* special case similar to the one in lookat() */
 	(void) distant_monnam(mtmp, ARTICLE_THE, buf);
+/*JP
 	Sprintf(qbuf, "What do you want to call %s?", buf);
+*/
+	Sprintf(qbuf, "%sを何と呼びますか？", buf);
 	getlin(qbuf,buf);
 	if(!*buf || *buf == '\033') return(0);
 	/* strip leading and trailing spaces; unnames monster if all spaces */
 	(void)mungspaces(buf);
 
 	if (mtmp->data->geno & G_UNIQ)
+/*JP
 	    pline("%s doesn't like being called names!", Monnam(mtmp));
+*/
+	    pline("%sはあだ名で呼ばれるのが嫌いなようだ！", Monnam(mtmp));
 	else
 	    (void) christen_monst(mtmp, buf);
 	return(0);
@@ -296,8 +368,12 @@
 	const char *aname;
 	short objtyp;
 
+#if 0 /*JP*/
 	Sprintf(qbuf, "What do you want to name %s %s?",
 		is_plural(obj) ? "these" : "this", xname(obj));
+#else
+	Sprintf(qbuf, "%sを何と名づけますか？", xname(obj));
+#endif
 	getlin(qbuf, buf);
 	if(!*buf || *buf == '\033')	return;
 	/* strip leading and trailing spaces; unnames item if all spaces */
@@ -308,7 +384,10 @@
 		Strcpy(buf, aname);
 
 	if (obj->oartifact) {
+/*JP
 		pline_The("artifact seems to resist the attempt.");
+*/
+		pline("聖器は名づけを拒否しているようだ．");
 		return;
 	} else if (restrict_name(obj, buf) || exist_artifact(obj->otyp, buf)) {
 		int n = rn2((int)strlen(buf));
@@ -317,9 +396,15 @@
 		c1 = lowc(buf[n]);
 		do c2 = 'a' + rn2('z'-'a'); while (c1 == c2);
 		buf[n] = (buf[n] == c1) ? c2 : highc(c2);  /* keep same case */
+/*JP
 		pline("While engraving your %s slips.", body_part(HAND));
+*/
+		pline("刻んでいる間に%sが滑ってしまった．", body_part(HAND));
 		display_nhwindow(WIN_MESSAGE, FALSE);
+/*JP
 		You("engrave: \"%s\".",buf);
+*/
+		You("刻んだ: 「%s」．",buf);
 	}
 	obj = oname(obj, buf);
 }
@@ -407,6 +492,10 @@
 
 	lth = *name ? (int)(strlen(name) + 1) : 0;
 	if (lth > PL_PSIZ) {
+#if 1 /*JP*/
+		if(is_kanji2(buf,lth-1))
+		  --lth;
+#endif
 		lth = PL_PSIZ;
 		name = strncpy(buf, name, PL_PSIZ - 1);
 		buf[PL_PSIZ - 1] = '\0';
@@ -453,7 +542,10 @@
 #ifdef REDO
 		ch =
 #endif
+/*JP
 		ynq("Name an individual object?")) {
+*/
+		ynq("持ち物に個別の名前をつけますか？")) {
 	case 'q':
 		break;
 	case 'y':
@@ -461,14 +553,20 @@
 		savech(ch);
 #endif
 		allowall[0] = ALL_CLASSES; allowall[1] = '\0';
+/*JP
 		obj = getobj(allowall, "name");
+*/
+		obj = getobj(allowall, "名づける");
 		if(obj) do_oname(obj);
 		break;
 	default :
 #ifdef REDO
 		savech(ch);
 #endif
+/*JP
 		obj = getobj(callable, "call");
+*/
+		obj = getobj(callable, "呼ぶ");
 		if (obj) {
 			/* behave as if examining it in inventory;
 			   this might set dknown if it was picked up
@@ -476,7 +574,10 @@
 			(void) xname(obj);
 
 			if (!obj->dknown) {
+/*JP
 				You("would never recognize another one.");
+*/
+				You("他に認識できない．");
 				return 0;
 			}
 			docall(obj);
@@ -501,10 +602,18 @@
 	otemp.oxlth = 0;
 	if (objects[otemp.otyp].oc_class == POTION_CLASS && otemp.fromsink)
 	    /* kludge, meaning it's sink water */
+#if 0 /*JP*/
 	    Sprintf(qbuf,"Call a stream of %s fluid:",
 		    OBJ_DESCR(objects[otemp.otyp]));
+#else
+	    Sprintf(qbuf,"%s液体:",
+		    jtrns_obj('!', OBJ_DESCR(objects[otemp.otyp])));
+#endif
 	else
+/*JP
 	    Sprintf(qbuf, "Call %s:", an(xname(&otemp)));
+*/
+	    Sprintf(qbuf, "%sに何と名前をつける？", an(xname(&otemp)));
 	getlin(qbuf, buf);
 	if(!*buf || *buf == '\033')
 		return;
@@ -591,8 +700,10 @@
 #endif
 	struct permonst *mdat = mtmp->data;
 	boolean do_hallu, do_invis, do_it, do_saddle;
+#if 0 /*JP*/
 	boolean name_at_start, has_adjectives;
 	char *bp;
+#endif
 
 	if (program_state.gameover)
 	    suppress |= SUPPRESS_HALLUCINATION;
@@ -615,7 +726,10 @@
 
 	/* unseen monsters, etc.  Use "it" */
 	if (do_it) {
+/*JP
 	    Strcpy(buf, "it");
+*/
+	    Strcpy(buf, "何者か");
 	    return buf;
 	}
 
@@ -632,8 +746,10 @@
 	    name = priestname(mtmp, priestnambuf);
 	    EHalluc_resistance = save_prop;
 	    mtmp->minvis = save_invis;
+#if 0 /*JP*/
 	    if (article == ARTICLE_NONE && !strncmp(name, "the ", 4))
 		name += 4;
+#endif
 	    return strcpy(buf, name);
 	}
 
@@ -643,6 +759,7 @@
 	 * none of this applies.
 	 */
 	if (mtmp->isshk && !do_hallu) {
+#if 0 /*JP*/
 	    if (adjective && article == ARTICLE_THE) {
 		/* pathological case: "the angry Asidonhopo the blue dragon"
 		   sounds silly */
@@ -659,37 +776,76 @@
 		Strcat(buf, "invisible ");
 	    Strcat(buf, mdat->mname);
 	    return buf;
+#else
+	    if (adjective && article == ARTICLE_THE) {
+		Strcpy(buf, adjective);
+		Strcat(buf, shkname(mtmp));
+		return buf;
+	    }
+	    if (mdat == &mons[PM_SHOPKEEPER] && !do_invis){
+		    Strcpy(buf, shkname(mtmp));
+	    } else {
+		    Sprintf(buf, "%sという名の%s%s",
+		    shkname(mtmp), do_invis ? "姿の見えない" : "",
+		    jtrns_mon(mdat->mname));
+	    }
+	    return buf;
+#endif
 	}
 
 	/* Put the adjectives in the buffer */
 	if (adjective)
+#if 0 /*JP*/
 	    Strcat(strcat(buf, adjective), " ");
+#else
+	    Strcat(buf, adjective);
+#endif
 	if (do_invis)
+/*JP
 	    Strcat(buf, "invisible ");
+*/
+	    Strcat(buf, "姿の見えない");
 #ifdef STEED
 	if (do_saddle && (mtmp->misc_worn_check & W_SADDLE) &&
 	    !Blind && !Hallucination)
+/*JP
 	    Strcat(buf, "saddled ");
+*/
+	    Strcat(buf, "鞍のついている");
 #endif
+#if 0 /*JP*/
 	if (buf[0] != 0)
 	    has_adjectives = TRUE;
 	else
 	    has_adjectives = FALSE;
+#endif
 
 	/* Put the actual monster name or type into the buffer now */
 	/* Be sure to remember whether the buffer starts with a name */
 	if (do_hallu) {
 	    Strcat(buf, rndmonnam());
+#if 0 /*JP*/
 	    name_at_start = FALSE;
+#endif
 	} else if (mtmp->mnamelth) {
 	    char *name = NAME(mtmp);
 
 	    if (mdat == &mons[PM_GHOST]) {
+#if 0 /*JP*/
 		Sprintf(eos(buf), "%s ghost", s_suffix(name));
 		name_at_start = TRUE;
+#else
+		Sprintf(buf, "%sの幽霊", name);
+#endif
 	    } else if (called) {
+#if 0 /*JP*/
 		Sprintf(eos(buf), "%s called %s", mdat->mname, name);
 		name_at_start = (boolean)type_is_pname(mdat);
+#else
+		Sprintf(eos(buf), "%sという名の%s", name,
+		    jtrns_mon_gen(mdat->mname, mtmp->female));
+#endif
+#if 0 /*JP*/
 	    } else if (is_mplayer(mdat) && (bp = strstri(name, " the ")) != 0) {
 		/* <name> the <adjective> <invisible> <saddled> <rank> */
 		char pbuf[BUFSZ];
@@ -702,22 +858,37 @@
 		Strcpy(buf, pbuf);
 		article = ARTICLE_NONE;
 		name_at_start = TRUE;
+#endif
 	    } else {
 		Strcat(buf, name);
+#if 0 /*JP*/
 		name_at_start = TRUE;
+#endif
 	    }
 	} else if (is_mplayer(mdat) && !In_endgame(&u.uz)) {
 	    char pbuf[BUFSZ];
 	    Strcpy(pbuf, rank_of((int)mtmp->m_lev,
 				 monsndx(mdat),
 				 (boolean)mtmp->female));
+/*JP
 	    Strcat(buf, lcase(pbuf));
+*/
+	    Strcat(buf, pbuf);
+#if 0 /*JP*/
 	    name_at_start = FALSE;
+#endif
 	} else {
+#if 0 /*JP*/
 	    Strcat(buf, mdat->mname);
 	    name_at_start = (boolean)type_is_pname(mdat);
+#else
+	    Strcat(buf, jtrns_mon_gen(mdat->mname, mtmp->female));
+#endif
 	}
 
+#if 1 /*JP*//* 日本語に冠詞はない */
+	return buf;
+#else
 	if (name_at_start && (article == ARTICLE_YOUR || !has_adjectives)) {
 	    if (mdat == &mons[PM_WIZARD_OF_YENDOR])
 		article = ARTICLE_THE;
@@ -748,6 +919,7 @@
 		    return buf;
 	    }
 	}
+#endif
 }
 
 #endif /* OVL0 */
@@ -966,8 +1138,13 @@
 	} while (name < SPECIAL_PM &&
 	    (type_is_pname(&mons[name]) || (mons[name].geno & G_NOGEN)));
 
+#if 0 /*JP*/
 	if (name >= SPECIAL_PM) return bogusmons[name - SPECIAL_PM];
 	return mons[name].mname;
+#else
+	if (name >= SPECIAL_PM) return jtrns_mon(bogusmons[name - SPECIAL_PM]);
+	return jtrns_mon_gen(mons[name].mname, rn2(2));
+#endif
 }
 
 #ifdef REINCARNATION
@@ -994,6 +1171,7 @@
 #ifdef OVL2
 
 static NEARDATA const char * const hcolors[] = {
+#if 0 /*JP*/
 	"ultraviolet", "infrared", "bluish-orange",
 	"reddish-green", "dark white", "light black", "sky blue-pink",
 	"salty", "sweet", "sour", "bitter",
@@ -1003,6 +1181,17 @@
 	"cabernet", "sangria", "fuchsia", "wisteria",
 	"lemon-lime", "strawberry-banana", "peppermint",
 	"romantic", "incandescent"
+#else
+	"紫外色の", "赤外色の", "青色がかったオレンジ色の",
+	"赤みがかった緑色の", "暗い白色の", "明るい黒の", "水色がかったピンク色の",
+	"塩辛い", "甘い", "すっぱい", "苦い",
+	"しま模様の", "らせん状の", "波状の", "格子模様状の", "チェック状の", "放射状の",
+	"ペーズリー模様の", "しみ状の", "青色の斑点状の", "点状の",
+	"四角形状の", "丸状の", "三角状の",
+	"日本酒色の", "ぶどう酒色の", "桜色の", "藤色の",
+	"レモンライム色の", "苺バナナ色の", "ペパーミント色の",
+	"ロマンチックな色の", "まぶしい"
+#endif
 };
 
 const char *
@@ -1018,13 +1207,19 @@
 rndcolor()
 {
 	int k = rn2(CLR_MAX);
+#if 0 /*JP:T*/
 	return Hallucination ? hcolor((char *)0) : (k == NO_COLOR) ?
 		"colorless" : c_obj_colors[k];
+#else
+	return Hallucination ? hcolor((char *)0) : (k == NO_COLOR) ?
+		"無色の" : c_obj_colors[k];
+#endif
 }
 
 /* Aliases for road-runner nemesis
  */
 static const char * const coynames[] = {
+#if 0 /*JP*/
 	"Carnivorous Vulgaris","Road-Runnerus Digestus",
 	"Eatibus Anythingus"  ,"Famishus-Famishus",
 	"Eatibus Almost Anythingus","Eatius Birdius",
@@ -1036,6 +1231,33 @@
 	"Hungrii Flea-Bagius","Overconfidentii Vulgaris",
 	"Caninus Nervous Rex","Grotesques Appetitus",
 	"Nemesis Riduclii","Canis latrans"
+#else
+	/* http://www.daneel.org/r_gakume.htm 参考 */ 
+	"肉食犬科卑劣属","路走鳥食科消化属", 
+	"食欲強科何物食属","飢餓科飢餓属", 
+	"食欲強科凡何物食属","食欲科鳥食属", 
+	"餓死科凄絶属","永久科餓鬼属", 
+	"飢餓科野卑属","餓死科卑劣利口属", 
+	"食欲科垂涎属","石頭科恋母王属", 
+	"肉食狼科垂涎属","石頭科貪欲属", 
+	"常準備科食欲強属","欲望科巨大属", 
+	"腹減科蚤沢山属","過信科卑劣属", 
+	"神経質犬科大王属","奇怪科嗜好属", 
+	"復讐科揶揄属","犬科犬属" 
+	/*
+	"何としてもつかまえ食べたいーの","オッタマゲーションおっかけ科", 
+	"いざとなったら何でも食べちゃう狼科" ,"お腹と背中がくっつく寸前狼科", 
+	"食いたがり狼科","鳥食いたがり狼科", 
+	"ハングリー狼科","永久性腹ぺこ科", 
+	"腹ペコで食べたいーの","あの手この手狼科", 
+	"腹へりひれはれ科","Hardheadipus Oedipus", 
+	"アイディア狼科","Hard-Headipus Ravenus", 
+	"なんとしてもつかまえ食べたいーの","腹ペコ狼科", 
+	"なんとしてもつかまえ食べたいーの","なんとしてもつかまえ食べたいーの", 
+	"なんとしてもつかまえ食べたいーの","腹へりポンポコリン狼科", 
+	"２４時間戦える腹ぺこ狼科","普通のコヨーテ" 
+	*/ 
+#endif 
 };
 	
 char *
diff -aurN slashem-0.0.7E6F2/src/do_wear.c jslashem-0.0.7E6F2-J0.0.8/src/do_wear.c
--- slashem-0.0.7E6F2/src/do_wear.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/do_wear.c	2004-06-27 16:52:50.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifndef OVLB
@@ -16,8 +25,11 @@
 static NEARDATA int todelay;
 static boolean cancelled_don = FALSE;
 
+#if 0 /*JP*/
 static NEARDATA const char see_yourself[] = "see yourself";
+#endif
 static NEARDATA const char unknown_type[] = "Unknown type of %s (%d)";
+#if 0 /*JP*/
 static NEARDATA const char c_armor[]  = "armor",
 			   c_suit[]   = "suit",
 #ifdef TOURIST
@@ -32,6 +44,22 @@
 			   c_sword[]  = "sword",
 			   c_axe[]    = "axe",
 			   c_that_[]  = "that";
+#else /*JP*/
+static NEARDATA const char c_armor[]  = "鎧",
+			   c_suit[]   = "服",
+#ifdef TOURIST
+			   c_shirt[]  = "シャツ",
+#endif
+			   c_cloak[]  = "クローク",
+			   c_gloves[] = "小手",
+			   c_boots[]  = "靴",
+			   c_helmet[] = "兜",
+			   c_shield[] = "盾",
+			   c_weapon[] = "武器",
+			   c_sword[]  = "剣",
+			   c_axe[]    = "斧",
+			   c_that_[]  = "それ";
+#endif /*JP*/
 
 static NEARDATA const long takeoff_order[] = { WORN_BLINDF, W_WEP,
 	WORN_SHIELD, WORN_GLOVES, LEFT_RING, RIGHT_RING, WORN_CLOAK,
@@ -47,15 +75,27 @@
 STATIC_DCL struct obj *NDECL(do_takeoff);
 STATIC_PTR int NDECL(take_off);
 STATIC_DCL int FDECL(menu_remarm, (int));
+#if 0 /*JP*/
 STATIC_DCL void FDECL(already_wearing, (const char*));
+#else
+STATIC_DCL void FDECL(already_wearing, (const char*, struct obj *));
+#endif
 STATIC_DCL void FDECL(already_wearing2, (const char*, const char*));
 
 void
 off_msg(otmp)
 register struct obj *otmp;
 {
+#if 0 /*JP*/
 	if(flags.verbose)
 	    You("were wearing %s.", doname(otmp));
+#else
+	const char *j;
+	const char *m;
+	m = joffmsg(otmp, &j);
+	if(flags.verbose)
+	    You("%s%s%s．", doname(otmp), j, jpast(m));
+#endif
 }
 
 /* for items that involve no delay */
@@ -63,6 +103,7 @@
 on_msg(otmp)
 register struct obj *otmp;
 {
+#if 0 /*JP*/
 	if (flags.verbose) {
 	    char how[BUFSZ];
 
@@ -73,6 +114,14 @@
 		obj_is_pname(otmp) ? the(xname(otmp)) : an(xname(otmp)),
 		how);
 	}
+#else
+  const char *j;
+  const char *m;
+  m = jonmsg(otmp, &j);
+
+	if(flags.verbose)
+	  You("%s%s%s．", xname(otmp), j, jpast(m));
+#endif
 }
 
 /*
@@ -101,14 +150,22 @@
 		/* though not better than potion speed */
 		if (!oldprop && !(HFast & TIMEOUT)) {
 			makeknown(uarmf->otyp);
+#if 0 /*JP*/
 			You_feel("yourself speed up%s.",
 				(oldprop || HFast) ? " a bit more" : "");
+#else
+			You("%s素早くなったような気がした．",
+			        (oldprop  || HFast) ? "さらに" : "");
+#endif
 		}
 		break;
 	case ELVEN_BOOTS:
 		if (!oldprop && !HStealth && !BStealth) {
 			makeknown(uarmf->otyp);
+/*JP
 			You("walk very quietly.");
+*/
+			Your("足音は小さくなった．");
 		}
 		break;
 	case FUMBLE_BOOTS:
@@ -142,8 +199,13 @@
 	case SPEED_BOOTS:
 		if (!Very_fast && !cancelled_don) {
 			makeknown(otyp);
+#if 0 /*JP*/
 			You_feel("yourself slow down%s.",
 				Fast ? " a bit" : "");
+#else
+			You("%sのろくなったような気がした．",
+				oldprop ? "ちょっと" : "");
+#endif
 		}
 		break;
 	case WATER_WALKING_BOOTS:
@@ -157,7 +219,10 @@
 	case ELVEN_BOOTS:
 		if (!oldprop && !HStealth && !BStealth && !cancelled_don) {
 			makeknown(otyp);
+/*JP
 			You("sure are noisy.");
+*/
+			Your("足音は大きくなった．");
 		}
 		break;
 	case FUMBLE_BOOTS:
@@ -210,9 +275,15 @@
 		/* Note: it's already being worn, so we have to cheat here. */
 		if ((HInvis || EInvis || pm_invisible(youmonst.data)) && !Blind) {
 		    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 		    You("can %s!",
 			See_invisible ? "no longer see through yourself"
 			: see_yourself);
+#else
+		    pline("%s！",
+			  See_invisible ? "あなたは透明でなくなった" :
+			  "自分自身が見えるようになった");
+#endif
 		}
 		break;
 	case CLOAK_OF_INVISIBILITY:
@@ -221,20 +292,37 @@
 		if (!oldprop && !HInvis && !Blind) {
 		    makeknown(uarmc->otyp);
 		    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 		    pline("Suddenly you can%s yourself.",
 			See_invisible ? " see through" : "not see");
+#else
+		    pline("突然，%sなった．",
+			See_invisible ? "あなたは透明に" : "自分自身が見えなく");
+#endif
 		}
 		break;
 	case POISONOUS_CLOAK:
 		if (Poison_resistance)
+#if 0 /*JP*/
 			pline("This cloak feels a little itchy.");
+#else
+			pline("このクロークは少しかゆい．");
+#endif
 		else {
 		    makeknown(uarmc->otyp);
+#if 0 /*JP*/
 		    poisoned("cloak",A_STR,"poisonous cloak",3);
+#else
+		    poisoned("クローク",A_STR,"服毒のクローク",3);
+#endif
 		}
 		break;
 	case OILSKIN_CLOAK:
+#if 0 /*JP*/
 		pline("%s very tightly.", Tobjnam(uarmc, "fit"));
+#else
+		pline("%sはとてもぴっちり合う．",xname(uarmc));
+#endif
 		break;
 	/* Alchemy smock gives poison _and_ acid resistance */
 #if 0
@@ -277,18 +365,29 @@
 	case MUMMY_WRAPPING:
 		if (Invis && !Blind) {
 		    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 		    You("can %s.",
 			See_invisible ? "see through yourself"
 			: "no longer see yourself");
+#else
+		    pline("%s．",
+			See_invisible ? "あなたは透明になった" : "自分自身が見えなくなった");
+#endif
 		}
 		break;
 	case CLOAK_OF_INVISIBILITY:
 		if (!oldprop && !HInvis && !Blind) {
 		    makeknown(CLOAK_OF_INVISIBILITY);
 		    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 		    pline("Suddenly you can %s.",
 			See_invisible ? "no longer see through yourself"
 			: see_yourself);
+#else
+		    pline("突然，%s．",
+			See_invisible ? "あなたは透明でなくなった" :
+			"自分自身が見えるようになった");
+#endif
 		}
 		break;
 #if 0
@@ -340,21 +439,42 @@
 	case DUNCE_CAP:
 		if (!uarmh->cursed) {
 		    if (Blind)
+/*JP
 			pline("%s for a moment.", Tobjnam(uarmh, "vibrate"));
+*/
+			pline("%sは一瞬震えた．", xname(uarmh));
 		    else
+#if 0 /*JP*/
 			pline("%s %s for a moment.",
 			      Tobjnam(uarmh, "glow"), hcolor(NH_BLACK));
+#else
+			pline("%sは一瞬%s輝いた．",
+			      xname(uarmh), jconj_adj(hcolor(NH_BLACK)));
+#endif
 		    curse(uarmh);
 		}
 		flags.botl = 1;		/* reveal new alignment or INT & WIS */
 		if (Hallucination) {
+#if 0 /*JP*/
 		    pline("My brain hurts!"); /* Monty Python's Flying Circus */
+#else
+		    pline("のーみそバーン！"); /*モンティパイソンとはちょっと違うけど*/
+#endif
 		} else if (uarmh->otyp == DUNCE_CAP) {
+#if 0 /*JP*/
 		    You_feel("%s.",	/* track INT change; ignore WIS */
 		  ACURR(A_INT) <= (ABASE(A_INT) + ABON(A_INT) + ATEMP(A_INT)) ?
 			     "like sitting in a corner" : "giddy");
+#else
+		    You("%sような気がした．",
+		  ACURR(A_INT) <= (ABASE(A_INT) + ABON(A_INT) + ATEMP(A_INT)) ?
+			     "街角に座っている" : "目がまわった");
+#endif
 		} else {
+/*JP
 		    Your("mind oscillates briefly.");
+*/
+		    You("少しも迷わず寝返った．");
 		    makeknown(HELM_OF_OPPOSITE_ALIGNMENT);
 		}
 		break;
@@ -421,7 +541,11 @@
 		break;
 	case GAUNTLETS_OF_SWIMMING:
 		if (u.uinwater) {
+#if 0 /*JP*/
 		   pline("Hey! You can swim!");
+#else
+		   pline("おや！あなたは泳げるようだ！");
+#endif
 		   spoteffects(TRUE);
 		}
 		break;
@@ -454,7 +578,11 @@
 	    break;
 	case GAUNTLETS_OF_SWIMMING:
 	    if (u.uinwater) {
+#if 0 /*JP*/
 	       You("begin to thrash about!");
+#else
+	       You("のたうち始めた！");
+#endif
 	       spoteffects(TRUE);
 	    }
 	    break;
@@ -480,9 +608,15 @@
 		touch_petrifies(&mons[uwep->corpsenm])) {
 	char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 	You("wield the %s in your bare %s.",
 	    corpse_xname(uwep, TRUE), makeplural(body_part(HAND)));
 	Strcpy(kbuf, an(killer_cxname(uwep, TRUE)));
+#else
+	You("%sを素%sで持った．",
+	   corpse_xname(uwep, TRUE),  body_part(HAND));
+	Sprintf( kbuf, "%sの死体に触れて", corpse_xname(uwep, TRUE));
+#endif
 	instapetrify(kbuf);
 	uwepgone();  /* life-saved still doesn't allow touching cockatrice */
     }
@@ -492,10 +626,17 @@
 	touch_petrifies(&mons[uswapwep->corpsenm])) {
 	char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 	You("wield the %s in your bare %s.",
 	    corpse_xname(uswapwep, TRUE), body_part(HAND));
 
 	Strcpy(kbuf, an(killer_cxname(uswapwep, TRUE)));
+#else
+	You("%sを素%sで持った．",
+	    corpse_xname(uswapwep, TRUE), body_part(HAND));
+
+	Sprintf( kbuf, "%sの死体に触れて", corpse_xname(uswapwep, TRUE));
+#endif
 	instapetrify(kbuf);
 	uswapwepgone();	/* lifesaved still doesn't allow touching cockatrice */
     }
@@ -646,14 +787,25 @@
 		/* Don't use same message as polymorph */
 		if (orig_sex != poly_gender()) {
 		    makeknown(AMULET_OF_CHANGE);
+#if 0 /*JP*/
 		    You("are suddenly very %s!", flags.female ? "feminine"
 			: "masculine");
+#else
+		    You("突然%s！", flags.female ? "女っぽくなった"
+			: "男っぽくなった");
+#endif
 		    flags.botl = 1;
 		} else
 		    /* already polymorphed into single-gender monster; only
 		       changed the character's base sex */
+/*JP
 		    You("don't feel like yourself.");
+*/
+		    You("自分自身じゃなくなった気がした．");
+/*JP
 		pline_The("amulet disintegrates!");
+*/
+		pline("魔除けはこなごなになった！");
 		if (orig_sex == poly_gender() && uamul->dknown &&
 			!objects[AMULET_OF_CHANGE].oc_name_known &&
 			!objects[AMULET_OF_CHANGE].oc_uname)
@@ -672,7 +824,10 @@
 		break;*/
 	case AMULET_OF_STRANGULATION:
 		makeknown(AMULET_OF_STRANGULATION);
+/*JP
 		pline("It constricts your throat!");
+*/
+		pline("魔除けはあなたの喉を絞めつけた！");
 		Strangled = 6;
 		break;
 	case AMULET_OF_RESTFUL_SLEEP:
@@ -682,14 +837,26 @@
   
 			makeknown(AMULET_OF_RESTFUL_SLEEP);
 			do {
+#if 0 /*JP*/
 			getlin("How many moves do you wish to sleep for? [1-500]", buf);
+#else
+			getlin("どのくらいの期間眠りますか？[1-500]", buf);
+#endif
 				    sleeptime = (!*buf || *buf=='\033') ? 0 : atoi(buf);
 				} while (sleeptime < 1 || sleeptime > 500);
 			if (sleeptime > 0) {
+#if 0 /*JP*/
 				You("sit down and fall asleep.");
+#else
+				You("座って眠り込んだ．");
+#endif
 				nomul(-sleeptime);
 				u.usleep = 1;
+#if 0 /*JP*/
 				nomovemsg = "You wake up from your refreshing nap.";
+#else
+				nomovemsg = "あなたは眠りから醒めた．";
+#endif
 		HSleeping = rnd(100);
 			}                
 		} else HSleeping = rnd(100);
@@ -702,7 +869,11 @@
 		break;
 	case AMULET_OF_FLYING:
 		if (!(EFlying & ~W_AMUL) && !is_flyer(youmonst.data)) {
+#if 0 /*JP*/
 			You_feel("like flying!");
+#else
+			You("飛べるような気がする！");
+#endif
 			if (!Levitation)
 				float_up();
 			makeknown(AMULET_OF_FLYING);
@@ -745,7 +916,10 @@
 		    setworn((struct obj *)0, W_AMUL);
 		    if (!breathless(youmonst.data) && !amphibious(youmonst.data)
 						&& !Swimming) {
+/*JP
 			You("suddenly inhale an unhealthy amount of water!");
+*/
+			You("突然，大量の水を飲み込んだ！");
 		    	(void) drown();
 		    }
 		    return;
@@ -753,7 +927,10 @@
 		break;
 	case AMULET_OF_STRANGULATION:
 		if (Strangled) {
+/*JP
 			You("can breathe more easily!");
+*/
+			You("楽に呼吸できるようになった！");
 			Strangled = 0;
 		}
 		break;
@@ -835,7 +1012,10 @@
 		if (Invis && !oldprop && !HSee_invisible &&
 				!perceives(youmonst.data) && !Blind) {
 		    newsym(u.ux,u.uy);
+/*JP
 		    pline("Suddenly you are transparent, but there!");
+*/
+		    pline("突然透明になった．しかし存在はしている！");
 		    makeknown(RIN_SEE_INVISIBLE);
 		}
 		break;
@@ -980,15 +1160,24 @@
 
 		if (Invisible && !Blind) {
 		    newsym(u.ux,u.uy);
+/*JP
 		    pline("Suddenly you cannot see yourself.");
+*/
+			pline("突然，自分自身が見えなくなった．");
 		    makeknown(RIN_SEE_INVISIBLE);
 		}
 		break;
 	case RIN_INVISIBILITY:
 		if (!Invis && !BInvis && !Blind) {
 		    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 		    Your("body seems to unfade%s.",
 			 See_invisible ? " completely" : "..");
+#else
+			Your("体が%s現われ%s．",
+			     See_invisible ? "完全に" : "次第に",
+			     See_invisible ? "た" : "てきた");
+#endif
 		    makeknown(RIN_INVISIBILITY);
 		}
 		break;
@@ -1077,13 +1266,19 @@
 
 	if (Blind && !already_blind) {
 	    changed = TRUE;
+/*JP
 	    if (flags.verbose) You_cant("see any more.");
+*/
+	    if (flags.verbose) You("何も見えなくなった．");
 	    /* set ball&chain variables before the hero goes blind */
 	    if (Punished) set_bc(0);
 	} else if (already_blind && !Blind) {
 	    changed = TRUE;
 	    /* "You are now wearing the Eyes of the Overworld." */
+/*JP
 	    You("can see!");
+*/
+	    You("目が見えるようになった！");
 	}
 	if (changed) {
 	    /* blindness has just been toggled */
@@ -1108,17 +1303,26 @@
 		/* "still cannot see" makes no sense when removing lenses
 		   since they can't have been the cause of your blindness */
 		if (otmp->otyp != LENSES)
+/*JP
 		    You("still cannot see.");
+*/
+		    You("まだ目が見えない．");
 	    } else {
 		changed = TRUE;	/* !was_blind */
 		/* "You were wearing the Eyes of the Overworld." */
+/*JP
 		You_cant("see anything now!");
+*/
+		You("今は何も見ることができない！");
 		/* set ball&chain variables before the hero goes blind */
 		if (Punished) set_bc(0);
 	    }
 	} else if (was_blind) {
 	    changed = TRUE;	/* !Blind */
+/*JP
 	    You("can see again.");
+*/
+	    You("ふたたび目が見えるようになった．");
 	}
 	if (changed) {
 	    /* blindness has just been toggled */
@@ -1205,6 +1409,8 @@
 {
 	register struct obj *otmp = (struct obj *)0;
 	int armorpieces = 0;
+	const char *j;
+	const char *m;
 
 #define MOREARM(x) if (x) { armorpieces++; otmp = x; }
 	MOREARM(uarmh);
@@ -1226,20 +1432,38 @@
 	if (!armorpieces) {
 	     /* assert( GRAY_DRAGON_SCALES > YELLOW_DRAGON_SCALE_MAIL ); */
 		if (uskin)
+#if 0 /*JP*/
 		    pline_The("%s merged with your skin!",
 			      uskin->otyp >= GRAY_DRAGON_SCALES ?
 				"dragon scales are" : "dragon scale mail is");
+#else
+		    pline("ドラゴンの鱗%sはあなたの肌と融合してしまっている！",
+			      uskin->otyp >= GRAY_DRAGON_SCALES ?
+				"" : "鎧");
+#endif
 		else
+#if 0 /*JP*/
 		    pline("Not wearing any armor.%s", (iflags.cmdassist && 
 				(uleft || uright || uamul || ublindf)) ?
 			  "  Use 'R' command to remove accessories." : "");
+#else
+		    pline("鎧の類を装備していない．%s", (iflags.cmdassist && 
+				(uleft || uright || uamul || ublindf)) ?
+			  "'R'コマンドで装飾品を外すことができる．" : "");
+#endif
 		return 0;
 	}
 	if (armorpieces > 1)
+/*JP
 		otmp = getobj(clothes, "take off");
+*/
+		otmp = getobj(clothes, "の装備を解く");
 	if (otmp == 0) return(0);
 	if (!(otmp->owornmask & W_ARMOR)) {
+/*JP
 		You("are not wearing that.");
+*/
+		You("それは装備していない．");
 		return(0);
 	}
 	/* note: the `uskin' case shouldn't be able to happen here; dragons
@@ -1249,7 +1473,12 @@
 			  || ((otmp == uarmu) && (uarmc || uarm))
 #endif
 		) {
+#if 0 /*JP*/
 	    You_cant("take that off.");
+#else
+	    m = joffmsg(otmp, &j);
+	    You("それ%s%sことはできない．", j, m);
+#endif
 	    return 0;
 	}
 
@@ -1276,19 +1505,33 @@
 	MOREACC(ublindf);
 
 	if(!Accessories) {
+#if 0 /*JP*/
 		pline("Not wearing any accessories.%s", (iflags.cmdassist &&
+#else
+		pline("装飾品は身につけていない．%s", (iflags.cmdassist &&
+#endif
 			    (uarm || uarmc ||
 #ifdef TOURIST
 			     uarmu ||
 #endif
 			     uarms || uarmh || uarmg || uarmf)) ?
+#if 0 /*JP*/
 		      "  Use 'T' command to take off armor." : "");
+#else
+		      "'T'コマンドで鎧を外すことができる．" : "");
+#endif
 		return(0);
 	}
+/*JP
 	if (Accessories != 1) otmp = getobj(accessories, "remove");
+*/
+	if (Accessories != 1) otmp = getobj(accessories, "はずす");
 	if(!otmp) return(0);
 	if(!(otmp->owornmask & (W_RING | W_AMUL | W_TOOL))) {
+/*JP
 		You("are not wearing that.");
+*/
+		You("それは身につけていない．");
 		return(0);
 	}
 
@@ -1324,9 +1567,13 @@
 {
 	/* Curses, like chickens, come home to roost. */
 	if((otmp == uwep) ? welded(otmp) : (int)otmp->cursed) {
+#if 0 /*JP*/
 		You("can't.  %s cursed.",
 			(is_boots(otmp) || is_gloves(otmp) || otmp->quan > 1L)
 			? "They are" : "It is");
+#else
+		pline("無理だ．それは呪われている．");
+#endif
 		otmp->bknown = TRUE;
 		return(1);
 	}
@@ -1343,19 +1590,31 @@
 	if(delay) {
 		nomul(delay);
 		if (is_helmet(otmp)) {
+/*JP
 			nomovemsg = "You finish taking off your helmet.";
+*/
+			nomovemsg = "あなたは兜を脱ぎおえた．";
 			afternmv = Helmet_off;
 		     }
 		else if (is_gloves(otmp)) {
+/*JP
 			nomovemsg = "You finish taking off your gloves.";
+*/
+			nomovemsg = "あなたは小手を脱ぎおえた．";
 			afternmv = Gloves_off;
 		     }
 		else if (is_boots(otmp)) {
+/*JP
 			nomovemsg = "You finish taking off your boots.";
+*/
+			nomovemsg = "あなたは靴を脱ぎおえた．";
 			afternmv = Boots_off;
 		     }
 		else {
+/*JP
 			nomovemsg = "You finish taking off your suit.";
+*/
+			nomovemsg = "あなたは着ている物を脱ぎおえた．";
 			afternmv = Armor_off;
 		}
 	} else {
@@ -1388,18 +1647,38 @@
 	return(1);
 }
 
+/*JP 
+** 物によって動詞が変化するので otmpを追加
+*/
 STATIC_OVL void
+#if 0 /*JP*/
 already_wearing(cc)
 const char *cc;
+#else
+already_wearing(cc, otmp)
+const char *cc;
+struct obj *otmp;
+#endif
 {
+#if 1 /*JP*/
+	const char *j;
+	const char *m;
+	m = jconj(jonmsg(otmp, &j), "ている");
+#endif
+/*JP
 	You("are already wearing %s%c", cc, (cc == c_that_) ? '!' : '.');
+*/
+	You("もう%s%s%s%s", cc, j,  m, (cc == c_that_) ? "！" : "．");
 }
 
 STATIC_OVL void
 already_wearing2(cc1, cc2)
 const char *cc1, *cc2;
 {
+/*JP
 	You_cant("wear %s because you're wearing %s there already.", cc1, cc2);
+*/
+	You_cant("%sを身に付けているので%sを身につけられない．", cc2, cc1);
 }
 
 /*
@@ -1417,6 +1696,10 @@
 {
     int err = 0;
     const char *which;
+#if 1 /*JP*/
+    const char *m;
+    const char *j;
+#endif
 
     which = is_cloak(otmp) ? c_cloak :
 #ifdef TOURIST
@@ -1427,10 +1710,16 @@
 	    /* same exception for cloaks as used in m_dowear() */
 	    (which != c_cloak || youmonst.data->msize != MZ_SMALL) &&
 	    (racial_exception(&youmonst, otmp) < 1)) {
+/*JP
 	if (noisy) pline_The("%s will not fit on your body.", which);
+*/
+	if (noisy) pline("%sはあなたの体に合わない．", which);
 	return 0;
     } else if (otmp->owornmask & W_ARMOR) {
+/*JP
 	if (noisy) already_wearing(c_that_);
+*/
+	if (noisy) already_wearing(c_that_, otmp);
 	return 0;
     }
 
@@ -1441,64 +1730,119 @@
 #endif
 	    )) {
 	if (noisy)
+#if 0 /*JP*/
 	    You("cannot do that while holding your %s.",
+#else
+	    pline("%sを持ったままではそれは出来ない．",
+#endif
 		is_sword(uwep) ? c_sword : c_weapon);
 	return 0;
     }
 
     if (is_helmet(otmp)) {
 	if (uarmh) {
+#if 0 /*JP*/
 	    if (noisy) already_wearing(an(c_helmet));
+#else
+	    if (noisy) already_wearing(an(c_helmet), uarmh);
+#endif
 	    err++;
 	} else if (Upolyd && has_horns(youmonst.data) && !is_flimsy(otmp)) {
 	    /* (flimsy exception matches polyself handling) */
 	    if (noisy)
+#if 0 /*JP*/
 		pline_The("%s won't fit over your horn%s.",
 			  c_helmet, plur(num_horns(youmonst.data)));
+#else
+		pline("角がじゃまで%sを身につけられない", c_helmet);
+#endif
 	    err++;
 	} else
 	    *mask = W_ARMH;
     } else if (is_shield(otmp)) {
 	if (uarms) {
+#if 0 /*JP*/
 	    if (noisy) already_wearing(an(c_shield));
+#else
+	    if (noisy) already_wearing(an(c_shield), uarms);
+#endif
 	    err++;
 	} else if (uwep && bimanual(uwep)) {
 	    if (noisy) 
+#if 0 /*JP*/
 		You("cannot wear a shield while wielding a two-handed %s.",
 		    is_sword(uwep) ? c_sword :
 		    (uwep->otyp == BATTLE_AXE) ? c_axe : c_weapon);
+#else
+		{
+		    m = jconj(jonmsg(otmp, &j), "ている");
+		    You("両手持ちの%s%s%sので盾で身を守れない．",
+		        is_sword(uwep) ? c_sword :
+		        uwep->otyp == BATTLE_AXE ? c_axe : c_weapon,
+		        j, m);
+		}
+#endif
 	    err++;
 	} else if (u.twoweap) {
 	    if (noisy) {
 		if (uwep && uswapwep)
+#if 0 /*JP*/
 		    You("cannot wear a shield while wielding two weapons.");
+#else
+		    You("二刀流をしている間は盾で身を守れない．");
+#endif
 		else
+#if 0 /*JP*/
 		    You("cannot wear a shield while fighting with two %s.",
 			    makeplural(body_part(HAND)));
+#else
+		    You("両%sで戦闘している間は盾で身を守れない．",
+			    makeplural(body_part(HAND)));
+#endif
 	    }
 	    err++;
 	} else
 	    *mask = W_ARMS;
     } else if (is_boots(otmp)) {
 	if (uarmf) {
+#if 0 /*JP*/
 	    if (noisy) already_wearing(c_boots);
+#else
+	    if (noisy) already_wearing(c_boots, uarmf);
+#endif
 	    err++;
 	} else if (Upolyd && slithy(youmonst.data)) {
+#if 0 /*JP*/
 	    if (noisy) You("have no feet...");	/* not body_part(FOOT) */
+#else
+	    if (noisy) You("足がない．．．");	/* not body_part(FOOT) */
+#endif
 	    err++;
 	} else if (Upolyd && youmonst.data->mlet == S_CENTAUR) {
 	    /* break_armor() pushes boots off for centaurs,
 	       so don't let dowear() put them back on... */
+#if 0 /*JP*/
 	    if (noisy) pline("You have too many hooves to wear %s.",
+#else
+	    if (noisy) pline("%sを履くには足が多すぎる．",
+#endif
 			     c_boots);	/* makeplural(body_part(FOOT)) yields
 					   "rear hooves" which sounds odd */
 	    err++;
 	} else if (u.utrap && (u.utraptype == TT_BEARTRAP ||
 				u.utraptype == TT_INFLOOR)) {
 	    if (u.utraptype == TT_BEARTRAP) {
+#if 0 /*JP*/
 		if (noisy) Your("%s is trapped!", body_part(FOOT));
+#else
+		if (noisy) Your("%sは罠にかかっている！", body_part(FOOT));
+#endif
 	    } else {
+#if 0 /*JP*/
 		if (noisy) Your("%s are stuck in the %s!",
+#else
+		if (noisy) Your("%sは%sにはまっている！",
+#endif
 				makeplural(body_part(FOOT)),
 				surface(u.ux, u.uy));
 	    }
@@ -1507,10 +1851,17 @@
 	    *mask = W_ARMF;
     } else if (is_gloves(otmp)) {
 	if (uarmg) {
+#if 0 /*JP*/
 	    if (noisy) already_wearing(c_gloves);
+#else
+	    if (noisy) already_wearing(c_gloves, uarmg);
+#endif
 	    err++;
 	} else if (welded(uwep)) {
+/*JP
 	    if (noisy) You("cannot wear gloves over your %s.",
+*/
+	    if (noisy) You("%sの上から小手を装備できない．",
 			   is_sword(uwep) ? c_sword : c_weapon);
 	    err++;
 	} else
@@ -1519,9 +1870,16 @@
     } else if (is_shirt(otmp)) {
 	if (uarm || uarmc || uarmu) {
 	    if (uarmu) {
+#if 0 /*JP*/
 		if (noisy) already_wearing(an(c_shirt));
+#else
+		if (noisy) already_wearing(an(c_shirt), uarmc);
+#endif
 	    } else {
+/*JP
 		if (noisy) You_cant("wear that over your %s.",
+*/
+		if (noisy) You("%sの上から着ることはできない．",
 			           (uarm && !uarmc) ? c_armor : cloak_simple_name(uarmc));
 	    }
 	    err++;
@@ -1530,16 +1888,25 @@
 #endif
     } else if (is_cloak(otmp)) {
 	if (uarmc) {
+/*JP
 	    if (noisy) already_wearing(an(cloak_simple_name(uarmc)));
+*/
+	    if (noisy) already_wearing(an(cloak_simple_name(uarmc)), uarmc);
 	    err++;
 	} else
 	    *mask = W_ARMC;
     } else if (is_suit(otmp)) {
 	if (uarmc) {
+/*JP
 	    if (noisy) You("cannot wear armor over a %s.", cloak_simple_name(uarmc));
+*/
+	    if (noisy) You("%sの上から着ることはできない．", cloak_simple_name(uarmc));
 	    err++;
 	} else if (uarm) {
+/*JP
 	    if (noisy) already_wearing("some armor");
+*/
+	    if (noisy) already_wearing("鎧", uarm);
 	    err++;
 	} else
 	    *mask = W_ARM;
@@ -1547,7 +1914,10 @@
 	/* getobj can't do this after setting its allow_all flag; that
 	   happens if you have armor for slots that are covered up or
 	   extra armor for slots that are filled */
+/*JP
 	if (noisy) silly_thing("wear", otmp);
+*/
+	if (noisy) silly_thing("身につける", otmp);
 	err++;
     }
 /* Unnecessary since now only weapons and special items like pick-axes get
@@ -1568,15 +1938,25 @@
 	struct obj *otmp;
 	int delay;
 	long mask = 0;
+#if 0 /*JP*/
+	const char *j;
+	const char *m;
+#endif
 
 	/* cantweararm checks for suits of armor */
 	/* verysmall or nohands checks for shields, gloves, etc... */
 	if ((verysmall(youmonst.data) || nohands(youmonst.data))) {
+/*JP
 		pline("Don't even bother.");
+*/
+		pline("そんなつまらないことにこだわるな．");
 		return(0);
 	}
 
+/*JP
 	otmp = getobj(clothes, "wear");
+*/
+	otmp = getobj(clothes, "身につける");
 	if(!otmp) return(0);
 
 	if (!canwearobj(otmp,&mask,TRUE)) return(0);
@@ -1587,9 +1967,15 @@
 	if (otmp->otyp == HELM_OF_OPPOSITE_ALIGNMENT &&
 			qstart_level.dnum == u.uz.dnum) {	/* in quest */
 		if (u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL])
+/*JP
 			You("narrowly avoid losing all chance at your goal.");
+*/
+		You("目的を達成する可能性を失うことをなんとか回避した．");
 		else	/* converted */
+/*JP
 			You("are suddenly overcome with shame and change your mind.");
+*/
+			You("突然恥ずかしくなって考えを変えた．");
 		u.ublessed = 0; /* lose your god's protection */
 		makeknown(otmp->otyp);
 		flags.botl = 1;
@@ -1611,7 +1997,10 @@
 		if(is_helmet(otmp)) afternmv = Helmet_on;
 		if(is_gloves(otmp)) afternmv = Gloves_on;
 		if(otmp == uarm) afternmv = Armor_on;
+/*JP
 		nomovemsg = "You finish your dressing maneuver.";
+*/
+		nomovemsg = "あなたは装備し終った．";
 	} else {
 		if(is_cloak(otmp)) (void) Cloak_on();
 		if (is_shield(otmp)) (void) Shield_on();
@@ -1632,16 +2021,30 @@
 	long mask = 0L;
 
 	if(uleft && uright && uamul && ublindf) {
+#if 0 /*JP*/
 		Your("%s%s are full, and you're already wearing an amulet and %s.",
 			humanoid(youmonst.data) ? "ring-" : "",
 			makeplural(body_part(FINGER)),
 			ublindf->otyp==LENSES ? "some lenses" : "a blindfold");
+#else
+		Your("%s%sはふさがってるし，すでに魔除けと%sも身につけている．",
+			humanoid(youmonst.data) ? "薬" : "",
+			makeplural(body_part(FINGER)),
+			ublindf->otyp==LENSES ? "レンズ" : "目隠し");
+	  return(0);
+#endif
 		return(0);
 	}
+/*JP
 	otmp = getobj(accessories, "put on");
+*/
+	otmp = getobj(accessories, "身につける");
 	if(!otmp) return(0);
 	if(otmp->owornmask & (W_RING | W_AMUL | W_TOOL)) {
+/*JP
 		already_wearing(c_that_);
+*/
+		already_wearing(c_that_, otmp);
 		return(0);
 	}
 	if(welded(otmp)) {
@@ -1656,13 +2059,22 @@
 		setuqwep((struct obj *) 0);
 	if(otmp->oclass == RING_CLASS || otmp->otyp == MEAT_RING) {
 		if(nolimbs(youmonst.data)) {
+/*JP
 			You("cannot make the ring stick to your body.");
+*/
+			You("指輪をはめれない体だ．");
 			return(0);
 		}
 		if(uleft && uright){
+#if 0 /*JP*/
 			There("are no more %s%s to fill.",
 				humanoid(youmonst.data) ? "ring-" : "",
 				makeplural(body_part(FINGER)));
+#else
+			pline("はめることのできる%s%sがない．",
+				humanoid(youmonst.data) ? "薬" : "",
+				makeplural(body_part(FINGER)));
+#endif
 			return(0);
 		}
 		if(uleft) mask = RIGHT_RING;
@@ -1671,9 +2083,15 @@
 			char qbuf[QBUFSZ];
 			char answer;
 
+#if 0 /*JP*/
 			Sprintf(qbuf, "Which %s%s, Right or Left?",
 				humanoid(youmonst.data) ? "ring-" : "",
 				body_part(FINGER));
+#else
+			Sprintf(qbuf, "どちらの%s%s，右(r)それとも左(l)？",
+				humanoid(youmonst.data) ? "薬" : "",
+				body_part(FINGER));
+#endif
 			if(!(answer = yn_function(qbuf, "rl", '\0')))
 				return(0);
 			switch(answer){
@@ -1689,17 +2107,26 @@
 		} while(!mask);
 		if (uarmg && uarmg->cursed) {
 			uarmg->bknown = TRUE;
+/*JP
 		    You("cannot remove your gloves to put on the ring.");
+*/
+		    You("指輪をはめようとしたが小手が脱げない．");
 			return(0);
 		}
 		if (welded(uwep) && bimanual(uwep)) {
 			/* welded will set bknown */
+/*JP
 	    You("cannot free your weapon hands to put on the ring.");
+*/
+	    You("指輪をはめようとしたが利腕の自由がきかない．");
 			return(0);
 		}
 		if (welded(uwep) && mask==RIGHT_RING) {
 			/* welded will set bknown */
+/*JP
 	    You("cannot free your weapon hand to put on the ring.");
+*/
+	    You("指輪をはめようとしたが利腕の自由がきかない．");
 			return(0);
 		}
 		if (otmp->oartifact && !touch_artifact(otmp, &youmonst))
@@ -1708,7 +2135,10 @@
 		Ring_on(otmp);
 	} else if (otmp->oclass == AMULET_CLASS) {
 		if(uamul) {
+/*JP
 			already_wearing("an amulet");
+*/
+			already_wearing("魔除け", uamul);
 			return(0);
 		}
 		if (otmp->oartifact && !touch_artifact(otmp, &youmonst))
@@ -1723,24 +2153,47 @@
 	} else {	/* it's a blindfold, towel, or lenses */
 		if (ublindf) {
 			if (ublindf->otyp == TOWEL)
+#if 0 /*JP*/
 				Your("%s is already covered by a towel.",
 					body_part(FACE));
+#else
+				You("既にタオルを身につけている．");
+#endif
 			else if (ublindf->otyp == BLINDFOLD) {
 				if (otmp->otyp == LENSES)
+/*JP
 					already_wearing2("lenses", "a blindfold");
+*/
+					already_wearing2("レンズ", "目隠し");
 				else
+/*JP
 					already_wearing("a blindfold");
+*/
+					already_wearing("目隠し", ublindf);
 			} else if (ublindf->otyp == LENSES) {
 				if (otmp->otyp == BLINDFOLD)
+/*JP
 					already_wearing2("a blindfold", "some lenses");
+*/
+					already_wearing2("目隠し", "レンズ");
 				else
+/*JP
 					already_wearing("some lenses");
+*/
+					already_wearing("レンズ", ublindf);
 			} else
+#if 0 /*JP*/
 				already_wearing(something); /* ??? */
+#else
+				already_wearing("何か", ublindf); /* ??? */
+#endif
 			return(0);
 		}
 		if (otmp->otyp != BLINDFOLD && otmp->otyp != TOWEL && otmp->otyp != LENSES) {
+/*JP
 			You_cant("wear that!");
+*/
+			You_cant("それを身につけることはできない");
 			return(0);
 		}
 		if (otmp->oartifact && !touch_artifact(otmp, &youmonst))
@@ -1828,10 +2281,14 @@
 	rightfall = (uright && !uright->cursed && (!welded(uwep)));
 	if (!uarmg && (leftfall || rightfall) && !nolimbs(youmonst.data)) {
 		/* changed so cursed rings don't fall off, GAN 10/30/86 */
+#if 0 /*JP*/
 		Your("%s off your %s.",
 			(leftfall && rightfall) ? "rings slip" : "ring slips",
 			(leftfall && rightfall) ? makeplural(body_part(FINGER)) :
 			body_part(FINGER));
+#else
+		Your("指輪は%sから滑り落ちた．", body_part(FINGER));
+#endif
 		xfl++;
 		if (leftfall) {
 			otmp = uleft;
@@ -1847,12 +2304,21 @@
 
 	otmp = uswapwep;
 	if (u.twoweap && otmp) {
+#if 0 /*JP*/
 		otherwep = is_sword(otmp) ? c_sword :
 		    makesingular(oclass_names[(int)otmp->oclass]);
 		Your("%s %sslips from your %s.",
 			otherwep,
 			xfl ? "also " : "",
 			makeplural(body_part(HAND)));
+#else
+		otherwep = is_sword(otmp) ? c_sword :
+		    jtrns_obj('S',oclass_names[(int)otmp->oclass]);
+		You("%s%s%sから滑り落とした．",
+			otherwep,
+			xfl ? "もまた" : "を",
+			body_part(HAND));
+#endif
 		setuswapwep((struct obj *)0, FALSE);
 		xfl++;
 		if (otmp->otyp != LOADSTONE || !otmp->cursed)
@@ -1863,15 +2329,27 @@
 		const char *thiswep;
 
 		/* nice wording if both weapons are the same type */
+#if 0 /*JP*/
 		thiswep = is_sword(otmp) ? c_sword :
 		    makesingular(oclass_names[(int)otmp->oclass]);
+#else
+		thiswep = is_sword(otmp) ? c_sword :
+		    jtrns_obj('S',oclass_names[(int)otmp->oclass]);
+#endif
 		if (otherwep && strcmp(thiswep, otherwep)) otherwep = 0;
 
 		/* changed so cursed weapons don't fall, GAN 10/30/86 */
+#if 0 /*JP*/
 		Your("%s%s %sslips from your %s.",
 			otherwep ? "other " : "", thiswep,
 			xfl ? "also " : "",
 			makeplural(body_part(HAND)));
+#else
+		You("%s%s%s%sから滑り落とした．",
+			otherwep ? "もうひとつの" : "", thiswep,
+			xfl ? "もまた" : "を",
+			body_part(HAND));
+#endif
 		setuwep((struct obj *)0, FALSE);
 		if (otmp->otyp != LOADSTONE || !otmp->cursed)
 			dropx(otmp);
@@ -1965,19 +2443,32 @@
 	/* special ring checks */
 	if (otmp == uright || otmp == uleft) {
 	    if (nolimbs(youmonst.data)) {
+#if 0 /*JP*/
 		pline_The("ring is stuck.");
+#else
+		pline("指輪は体に埋まってしまっている．");
+#endif
 		return 0;
 	    }
 	    why = 0;	/* the item which prevents ring removal */
 	    if (welded(uwep) && (otmp == uright || bimanual(uwep))) {
+/*JP
 		Sprintf(buf, "free a weapon %s", body_part(HAND));
+*/
+		Sprintf(buf, "利腕の自由がきかない");
 		why = uwep;
 	    } else if (uarmg && uarmg->cursed) {
+/*JP
 		Sprintf(buf, "take off your %s", c_gloves);
+*/
+		Sprintf(buf, "%sが脱げない", c_gloves);
 		why = uarmg;
 	    }
 	    if (why) {
+/*JP
 		You("cannot %s to remove the ring.", buf);
+*/
+		You("指輪をはずそうとしたが%s．", buf);
 		why->bknown = TRUE;
 		return 0;
 	    }
@@ -1985,24 +2476,40 @@
 	/* special glove checks */
 	if (otmp == uarmg) {
 	    if (welded(uwep)) {
+#if 0 /*JP*/
 		You("are unable to take off your %s while wielding that %s.",
 		    c_gloves, is_sword(uwep) ? c_sword : c_weapon);
+#else
+		You("%sを持ったまま%sをはずすことはできない．",
+		    is_sword(uwep) ? c_sword : c_weapon, c_gloves);
+#endif
 		uwep->bknown = TRUE;
 		return 0;
 	    } else if (Glib) {
+#if 0 /*JP*/
 		You_cant("take off the slippery %s with your slippery %s.",
 			 c_gloves, makeplural(body_part(FINGER)));
+#else
+		You_cant("滑りやすい%sを滑りやすい%sではずせない．",
+			 c_gloves, body_part(FINGER));
+#endif
 		return 0;
 	    }
 	}
 	/* special boot checks */
 	if (otmp == uarmf) {
 	    if (u.utrap && u.utraptype == TT_BEARTRAP) {
+/*JP
 		pline_The("bear trap prevents you from pulling your %s out.",
+*/
+		pline("%sが熊の罠につかまっているので脱ぐことができない．",
 			  body_part(FOOT));
 		return 0;
 	    } else if (u.utrap && u.utraptype == TT_INFLOOR) {
+/*JP
 		You("are stuck in the %s, and cannot pull your %s out.",
+*/
+		You("%sが%sにはまっているので脱ぐことができない．",
 		    surface(u.ux, u.uy), makeplural(body_part(FOOT)));
 		return 0;
 	    }
@@ -2015,21 +2522,36 @@
 		) {
 	    why = 0;	/* the item which prevents disrobing */
 	    if (uarmc && uarmc->cursed) {
+/*JP
 		Sprintf(buf, "remove your %s", cloak_simple_name(uarmc));
+*/
+		Sprintf(buf, "%sが脱げない", cloak_simple_name(uarmc));
 		why = uarmc;
 #ifdef TOURIST
 	    } else if (otmp == uarmu && uarm && uarm->cursed) {
+/*JP
 		Sprintf(buf, "remove your %s", c_suit);
+*/
+		Sprintf(buf, "%sが脱げない", c_suit);
 		why = uarm;
 #endif
 	    } else if (welded(uwep) && bimanual(uwep)) {
+#if 0 /*JP*/
 		Sprintf(buf, "release your %s",
 			is_sword(uwep) ? c_sword :
 			(uwep->otyp == BATTLE_AXE) ? c_axe : c_weapon);
+#else
+		Sprintf(buf, "%sが手放せない",
+			is_sword(uwep) ? c_sword :
+			(uwep->otyp == BATTLE_AXE) ? c_axe : c_weapon);
+#endif
 		why = uwep;
 	    }
 	    if (why) {
+/*JP
 		You("cannot %s to take off %s.", buf, the(xname(otmp)));
+*/
+		You("%sをはずそうとしたが%s．", xname(otmp), buf);
 		why->bknown = TRUE;
 		return 0;
 	    }
@@ -2072,16 +2594,29 @@
 	if (taking_off == W_WEP) {
 	  if(!cursed(uwep)) {
 	    setuwep((struct obj *) 0, TRUE);
+#if 0 /*JP*/
 	    You("are empty %s.", body_part(HANDED));
+#else
+	    You("何も%sにしていない．", body_part(HAND));
+#endif
 	    u.twoweap = FALSE;
 	  }
 	} else if (taking_off == W_SWAPWEP) {
 	  setuswapwep((struct obj *) 0, TRUE);
+#if 0 /*JP*/
 	  You("no longer have a second weapon readied.");
+#else
+	  You("予備の武器をおさめた．");
+#endif
 	  u.twoweap = FALSE;
 	} else if (taking_off == W_QUIVER) {
+#if 0 /*JP*/
 	  setuqwep((struct obj *) 0);
 	  You("no longer have ammunition readied.");
+#else
+	  You("装填していた%sをおさめた．", doname(uquiver));
+	  setuqwep((struct obj *) 0);
+#endif
 	} else if (taking_off == WORN_ARMOR) {
 	  otmp = uarm;
 	  if(!cursed(otmp)) (void) Armor_off();
@@ -2121,7 +2656,9 @@
 	return(otmp);
 }
 
+#if 0 /*JP*/
 static const char *disrobing = "";
+#endif
 
 STATIC_PTR
 int
@@ -2151,7 +2688,10 @@
 	todelay = 0;
 
 	if (taking_off == 0L) {
+/*JP
 	  You("finish %s.", disrobing);
+*/
+	  You("装備を解きおえた．");
 	  return 0;
 	} else if (taking_off == W_WEP) {
 	  todelay = 1;
@@ -2204,7 +2744,11 @@
 	 */
 	if (todelay > 0) todelay--;
 
+#if 0 /*JP*/
 	set_occupation(take_off, disrobing, 0);
+#else
+	set_occupation(take_off, "装備を解く", 0);
+#endif
 	return(1);		/* get busy */
 }
 
@@ -2213,7 +2757,9 @@
 reset_remarm()
 {
 	taking_off = takeoff_mask = 0L;
+#if 0 /*JP*/
 	disrobing = nul;
+#endif
 }
 
 /* the 'A' command -- remove multiple worn items */
@@ -2223,27 +2769,41 @@
     int result = 0;
 
     if (taking_off || takeoff_mask) {
+/*JP
 	You("continue %s.", disrobing);
+*/
+	You("装備を解くのを再開した．");
+/*JP
 	set_occupation(take_off, disrobing, 0);
+*/
+	set_occupation(take_off, "装備を解く", 0);
 	return 0;
     } else if (!uwep && !uswapwep && !uquiver && !uamul && !ublindf &&
 		!uleft && !uright && !wearing_armor()) {
+/*JP
 	You("are not wearing anything.");
+*/
+	You("何も装備していない．");
 	return 0;
     }
 
     add_valid_menu_class(0); /* reset */
     if (flags.menu_style != MENU_TRADITIONAL ||
+/*JP
 	    (result = ggetobj("take off", select_off, 0, FALSE, (unsigned *)0)) < -1)
+*/
+	    (result = ggetobj("の装備を解く", select_off, 0, FALSE, (unsigned *)0)) < -1)
 	result = menu_remarm(result);
 
     if (takeoff_mask) {
 	/* default activity for armor and/or accessories,
 	   possibly combined with weapons */
+#if 0 /*JP*/
 	disrobing = "disrobing";
 	/* specific activity when handling weapons only */
 	if (!(takeoff_mask & ~(W_WEP|W_SWAPWEP|W_QUIVER)))
 	    disrobing = "disarming";
+#endif
 	(void) take_off();
     }
     /* The time to perform the command is already completely accounted for
@@ -2265,7 +2825,10 @@
 	all_worn_categories = (retry == -2);
     } else if (flags.menu_style == MENU_FULL) {
 	all_worn_categories = FALSE;
+/*JP
 	n = query_category("What type of things do you want to take off?",
+*/
+	n = query_category("どのタイプの物の装備を解きますか？",
 			   invent, WORN_TYPES|ALL_TYPES, &pick_list, PICK_ANY);
 	if (!n) return 0;
 	for (i = 0; i < n; i++) {
@@ -2277,11 +2840,17 @@
 	free((genericptr_t) pick_list);
     } else if (flags.menu_style == MENU_COMBINATION) {
 	all_worn_categories = FALSE;
+/*JP
 	if (ggetobj("take off", select_off, 0, TRUE, (unsigned *)0) == -2)
+*/
+	if (ggetobj("の装備を解く", select_off, 0, TRUE, (unsigned *)0) == -2)
 	    all_worn_categories = TRUE;
     }
 
+/*JP
     n = query_objlist("What do you want to take off?", invent,
+*/
+    n = query_objlist("どの装備を解きますか？", invent,
 			SIGNAL_NOMENU|USE_INVLET|INVORDER_SORT,
 			&pick_list, PICK_ANY,
 			all_worn_categories ? is_worn : is_worn_by_type);
@@ -2290,7 +2859,10 @@
 	    (void) select_off(pick_list[i].item.a_obj);
 	free((genericptr_t) pick_list);
     } else if (n < 0 && flags.menu_style != MENU_COMBINATION) {
+/*JP
 	There("is nothing else you can remove or unwield.");
+*/
+	pline("装備を解けるものは何もない．");
     }
     return 0;
 }
@@ -2307,42 +2879,68 @@
 
 	if (DESTROY_ARM(uarmc)) {
 		if (donning(otmp)) cancel_don();
+#if 0 /*JP:T*/
 		Your("%s crumbles and turns to dust!",
 		     cloak_simple_name(uarmc));
+#else
+		Your("%sは粉々になった！",
+		     cloak_simple_name(uarmc));
+#endif
 		(void) Cloak_off();
 		useup(otmp);
 	} else if (DESTROY_ARM(uarm)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("armor turns to dust and falls to the %s!",
+*/
+		Your("鎧は塵となり%sに落ちた！",
 			surface(u.ux,u.uy));
 		(void) Armor_gone();
 		useup(otmp);
 #ifdef TOURIST
 	} else if (DESTROY_ARM(uarmu)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("shirt crumbles into tiny threads and falls apart!");
+*/
+		Your("シャツはズタズタに裂け，小さな糸屑となり落ちた！");
 		(void) Shirt_off();
 		useup(otmp);
 #endif
 	} else if (DESTROY_ARM(uarmh)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("helmet turns to dust and is blown away!");
+*/
+		Your("兜は塵となり吹きとんだ！");
 		(void) Helmet_off();
 		useup(otmp);
 	} else if (DESTROY_ARM(uarmg)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("gloves vanish!");
+*/
+		Your("小手は消えた！");
 		(void) Gloves_off();
 		useup(otmp);
+/*JP
 		selftouch("You");
+*/
+		selftouch("そのときあなたは");
 	} else if (DESTROY_ARM(uarmf)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("boots disintegrate!");
+*/
+		Your("靴は粉々に砕けた！");
 		(void) Boots_off();
 		useup(otmp);
 	} else if (DESTROY_ARM(uarms)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("shield crumbles away!");
+*/
+		Your("盾は砕け散った！");
 		(void) Shield_off();
 		useup(otmp);
 	} else {
diff -aurN slashem-0.0.7E6F2/src/dog.c jslashem-0.0.7E6F2-J0.0.8/src/dog.c
--- slashem-0.0.7E6F2/src/dog.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dog.c	2004-06-27 16:52:36.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "edog.h"
 #include "emin.h"
@@ -69,7 +78,10 @@
 		    if (!quietly)
 			/* have just been given "You <do something with>
 			   the figurine and it transforms." message */
+/*JP
 			pline("... into a pile of dust.");
+*/
+			pline("．．．そしてちりの山になった．");
 		    break;	/* mtmp is null */
 		}
 	    } else if (!rn2(3)) {
@@ -78,7 +90,10 @@
 		pm = rndmonst();
 		if (!pm) {
 		  if (!quietly)
+/*JP
 		    There("seems to be nothing available for a familiar.");
+*/
+		    pline("下僕は現れなかった．");
 		  break;
 		}
 	    }
@@ -86,7 +101,10 @@
 	    mtmp = makemon(pm, x, y, MM_EDOG|MM_IGNOREWATER);
 	    if (otmp && !mtmp) { /* monster was genocided or square occupied */
 	 	if (!quietly)
+/*JP
 		   pline_The("figurine writhes and then shatters into pieces!");
+*/
+		    pline("人形はもがき，くだけ散った！");
 		break;
 	    }
 	} while (!mtmp && --trycnt > 0);
@@ -106,7 +124,10 @@
 		mtmp->mtame = 0;	/* not tame after all */
 		if (chance == 2) { /* hostile (cursed figurine) */
 		    if (!quietly)
+/*JP
 		       You("get a bad feeling about this.");
+*/
+			You("嫌な予感がした．");
 		    mtmp->mpeaceful = 0;
 		    set_malign(mtmp);
 		}
@@ -203,10 +224,17 @@
 	/* default pet names */
 	if (!*petname && pettype == PM_LITTLE_DOG) {
 	    /* All of these names were for dogs. */
+#if 0 /*JP*/
 	    if(Role_if(PM_CAVEMAN)) petname = "Slasher";   /* The Warrior */
 	    if(Role_if(PM_SAMURAI)) petname = "Hachi";     /* Shibuya Station */
 	    if(Role_if(PM_BARBARIAN)) petname = "Idefix";  /* Obelix */
 	    if(Role_if(PM_RANGER)) petname = "Sirius";     /* Orion's dog */
+#else
+	    if(Role_if(PM_CAVEMAN)) petname = "スラッシャー";
+	    if(Role_if(PM_SAMURAI)) petname = "ハチ公";
+	    if(Role_if(PM_BARBARIAN)) petname = "イデフィクス";
+	    if(Role_if(PM_RANGER)) petname = "シリウス";
+#endif /*JP*/
 	}
 
 	mtmp = makemon(&mons[pettype], u.ux, u.uy, MM_EDOG);
@@ -581,25 +609,43 @@
 		stay_behind = FALSE;
 		if (mtmp->mtame && mtmp->meating) {
 			if (canseemon(mtmp))
+#if 0 /*JP*/
 			    pline("%s is still eating.", Monnam(mtmp));
+#else
+			    pline("%sはまだ食べている．", Monnam(mtmp));
+#endif
 			stay_behind = TRUE;
 #ifdef BLACKMARKET                
 		} else if (mtmp->mtame && (ttmp = t_at(u.ux,u.uy)) && 
 		    ttmp->ttyp == MAGIC_PORTAL &&
 		    (Is_blackmarket(&ttmp->dst) || Is_blackmarket(&u.uz))) {
+#if 0 /*JP*/
 			pline("%s can't follow you %s.",
 			      Monnam(mtmp), Is_blackmarket(&u.uz) ?
 			      "through the portal" : "into the Black Market");
+#else
+			pline("%sはあなたを追って%sことができない．",
+			      Monnam(mtmp), Is_blackmarket(&u.uz) ?
+			      "入口をくぐる" : "ブラックマーケットに入る");
+#endif
 			stay_behind = TRUE;
 #endif /* BLACKMARKET */
 		} else if (mon_has_amulet(mtmp)) {
 			if (canseemon(mtmp))
+#if 0 /*JP*/
 			    pline("%s seems very disoriented for a moment.",
+#else
+			    pline("%sは一瞬方向感覚を失ったようだ．",
+#endif
 				Monnam(mtmp));
 			stay_behind = TRUE;
 		} else if (mtmp->mtame && mtmp->mtrapped) {
 			if (canseemon(mtmp))
+#if 0 /*JP*/
 			    pline("%s is still trapped.", Monnam(mtmp));
+#else
+			    pline("%sはまだ罠にかかったままだ．", Monnam(mtmp));
+#endif
 			stay_behind = TRUE;
 		}
 #ifdef STEED
@@ -607,10 +653,17 @@
 #endif
 		if (stay_behind) {
 			if (mtmp->mleashed) {
+#if 0 /*JP*/
 				pline("%s leash suddenly comes loose.",
 					humanoid(mtmp->data)
 					    ? (mtmp->female ? "Her" : "His")
 					    : "Its");
+#else
+				pline("%sに結ばれた紐は突然ゆるんだ．",
+				        humanoid(mtmp->data)
+					    ? (mtmp->female ? "彼女" : "彼")
+					    : "その生物");
+#endif
 				m_unleash(mtmp, FALSE);
 			}
 			continue;
@@ -649,7 +702,10 @@
 	    } else if (mtmp->mleashed) {
 		/* this can happen if your quest leader ejects you from the
 		   "home" level while a leashed pet isn't next to you */
+/*JP
 		pline("%s leash goes slack.", s_suffix(Monnam(mtmp)));
+*/
+		pline("%sに結ばれた紐はたるんだ．", Monnam(mtmp));
 		m_unleash(mtmp, FALSE);
 	    }
 	}
@@ -887,11 +943,20 @@
 		    boolean big_corpse = (obj->otyp == CORPSE &&
 					  obj->corpsenm >= LOW_PM &&
 				mons[obj->corpsenm].msize > mtmp->data->msize);
+#if 0 /*JP*/
 		    pline("%s catches %s%s",
 			  Monnam(mtmp), the(xname(obj)),
 			  !big_corpse ? "." : ", or vice versa!");
+#else
+		    pline("%sは%sをつかまえた%s",
+			  Monnam(mtmp), the(xname(obj)),
+			  !big_corpse ? "．" : "，と言うよりその逆か！");
+#endif
 		} else if (cansee(mtmp->mx,mtmp->my))
+/*JP
 		    pline("%s.", Tobjnam(obj, "stop"));
+*/
+		    pline("%sは止まった．", xname(obj));
 		/* dog_eat expects a floor object */
 		place_object(obj, mtmp->mx, mtmp->my);
 		(void) dog_eat(mtmp, obj, mtmp->mx, mtmp->my, FALSE);
@@ -1006,13 +1071,24 @@
 	if(!quietly && cansee(mtmp->mx, mtmp->my)) {
 	    if (haseyes(youmonst.data)) {
 		if (haseyes(mtmp->data))
+#if 0 /*JP*/
 			pline("%s %s to look you in the %s.",
 				Monnam(mtmp),
 				mtmp->mpeaceful ? "seems unable" :
 					    "refuses",
 				body_part(EYE));
+#else
+			pline("%sはあなたの%s%s．",
+			      Monnam(mtmp),
+			      body_part(EYE),
+			      mtmp->mpeaceful ? "を見ることができないようだ" :
+			      "から目をそらした");
+#endif
 		else 
+/*JP
 			pline("%s avoids your gaze.",
+*/
+			pline("%sはあなたのにらみを回避した．",
 				Monnam(mtmp));
 	    }
 	}
diff -aurN slashem-0.0.7E6F2/src/dogmove.c jslashem-0.0.7E6F2-J0.0.8/src/dogmove.c
--- slashem-0.0.7E6F2/src/dogmove.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dogmove.c	2004-08-05 09:49:24.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #include "mfndpos.h"
@@ -193,10 +202,17 @@
 	/* However, invisible monsters should still be "it" even though out of
 	   sight locations should not. */
 	if (vis)
+#if 0 /*JP*/
 	    pline("%s %s %s.", mon_visible(mtmp) ? noit_Monnam(mtmp) : "It",
 		  vampiric ? "drains" : devour ? "devours" : "eats",
 		  (obj->oclass == FOOD_CLASS) ?
 			singular(obj, doname) : doname(obj));
+#else
+	    pline("%sは%sを%s．", mon_visible(mtmp) ? noit_Monnam(mtmp) : "何か",
+		  (obj->oclass == FOOD_CLASS) ?
+			singular(obj, doname) : doname(obj),
+		  devour ? "飲み込んでいる" : "食べている");
+#endif
 	/* It's a reward if it's DOGFOOD and the player dropped/threw it. */
 	/* We know the player had it if invlet is set -dlc */
 	if(dogfood(mtmp,obj) == DOGFOOD && obj->invlet)
@@ -211,7 +227,10 @@
 	    obj->oerodeproof = 0;
 	    mtmp->mstun = 1;
 	    if (canseemon(mtmp) && flags.verbose) {
+/*JP
 		pline("%s spits %s out in disgust!",
+*/
+		pline("%sは%sをペッと吐き出した！",
 		      Monnam(mtmp), distant_name(obj,doname));
 	    }
 	} else if (vampiric) {
@@ -287,11 +306,17 @@
 		    mtmp->mhp = mtmp->mhpmax;
 		if (mtmp->mhp < 1) goto dog_died;
 		if (cansee(mtmp->mx, mtmp->my))
+/*JP
 		    pline("%s is confused from hunger.", Monnam(mtmp));
+*/
+		    pline("%sは空腹のため混乱している．", Monnam(mtmp));
 		else if (couldsee(mtmp->mx, mtmp->my))
 		    beg(mtmp);
 		else
+/*JP
 		    You_feel("worried about %s.", y_monnam(mtmp));
+*/
+		    You("%sが心配になった．", y_monnam(mtmp));
 		stop_occupation();
 	    } else if (monstermoves > edog->hungrytime + 750 || mtmp->mhp < 1) {
  dog_died:
@@ -300,12 +325,24 @@
 		    && mtmp != u.usteed
 #endif
 		    )
+/*JP
 		    Your("leash goes slack.");
+*/
+		    Your("紐はたるんだ．");
 		else if (cansee(mtmp->mx, mtmp->my))
+#if 0 /*JP*/
 		    pline("%s starves.", Monnam(mtmp));
+#else
+		    pline("%sは飢えで死んだ．", Monnam(mtmp));
+#endif
 		else
+#if 0 /*JP*/
 		    You_feel("%s for a moment.",
 			Hallucination ? "bummed" : "sad");
+#else
+		    You("%s気分におそわれた．",
+			Hallucination ? "がっかりした" : "悲しい");
+#endif
 		mondied(mtmp);
 		return(TRUE);
 	    }
@@ -376,7 +413,10 @@
 						(obj->quan <= dogquan))
 			    {
 			    if (cansee(omx, omy) && flags.verbose)
+/*JP
 				pline("%s picks up %s.", Monnam(mtmp),
+*/
+				pline("%sは%sを拾った．", Monnam(mtmp),
 				    distant_name(obj, doname));
 			    obj_extract_self(obj);
 			    newsym(omx,omy);
@@ -390,7 +430,11 @@
 #ifndef GOLDOBJ
 				    obj->quan -= dogquan;
 				    if (cansee(omx, omy) && flags.verbose)
+#if 0 /*JP*/
 					pline("%s picks up %d gold pieces.", 
+#else
+					pline("%sは%d枚の金貨を拾った．",
+#endif
 							Monnam(mtmp),
 							dogquan);
 				    mtmp->mgold += dogquan;
@@ -398,7 +442,11 @@
 						if (obj->quan != dogquan)
 							obj = splitobj(obj, dogquan);
 				    if (cansee(omx, omy) && flags.verbose)
+#if 0 /*JP*/
 							pline("%s picks up %s.", 
+#else
+					pline("%sは%sを拾った．",
+#endif
 							Monnam(mtmp),
 							doname(obj));
 							obj_extract_self(obj);
@@ -642,9 +690,17 @@
 		    && rn2(edog->abuse + 2)) {
 	/* Treason */
 	if (canseemon(mtmp))
+#if 0 /*JP*/
 	    pline("%s turns on you!", Monnam(mtmp));
+#else
+	    pline("%sはあなたに敵対した！", Monnam(mtmp));
+#endif
 	else
+#if 0 /*JP*/
 	    pline("You feel uneasy about %s.", y_monnam(mtmp));
+#else
+	    pline("あなたは%sを不安に感じた．", y_monnam(mtmp));
+#endif
 	mtmp->mpeaceful = 0;
 	mtmp->mtame = 0;
 	mtmp->mtraitor = TRUE;
@@ -765,8 +821,14 @@
 		 * it disappears, angrily, and sends in some nasties
 		 */
 		if (canspotmon(mtmp)) {
+/*JP
 		    pline("%s rebukes you, saying:", Monnam(mtmp));
+*/
+		    pline("%sはあなたを非難した：", Monnam(mtmp));
+/*JP
 		    verbalize("Since you desire conflict, have some more!");
+*/
+		    verbalize("闘争を望んでいるようだから，もっと与えてやろう！");
 		}
 		mongone(mtmp);
 		i = rnd(4);
@@ -793,7 +855,10 @@
 	if (!Conflict && !mtmp->mconf &&
 	    mtmp == u.ustuck && !sticks(youmonst.data)) {
 	    unstuck(mtmp);	/* swallowed case handled above */
+/*JP
 	    You("get released!");
+*/
+	    You("動けるようになった！");
 	}
 	if (!nohands(mtmp->data) && !verysmall(mtmp->data)) {
 		allowflags |= OPENDOOR;
@@ -969,7 +1034,10 @@
 
 		if (info[chi] & ALLOW_U) {
 			if (mtmp->mleashed) { /* play it safe */
+/*JP
 				pline("%s breaks loose of %s leash!",
+*/
+				pline("%sは%sの紐で自由を奪われた！",
 				      Monnam(mtmp), mhis(mtmp));
 				m_unleash(mtmp, FALSE);
 			}
@@ -1000,7 +1068,11 @@
 		remove_monster(omx, omy);
 		place_monster(mtmp, nix, niy);
 		if (has_edog && !is_spell && cursemsg[chi] && (cansee(omx,omy) || cansee(nix,niy)))
+#if 0 /*JP*/
 			pline("%s moves only reluctantly.", Monnam(mtmp));
+#else
+			pline("%sはいやいや動いた．", Monnam(mtmp));
+#endif
 		for (j=MTSZ-1; j>0; j--) mtmp->mtrack[j] = mtmp->mtrack[j-1];
 		mtmp->mtrack[0].x = omx;
 		mtmp->mtrack[0].y = omy;
diff -aurN slashem-0.0.7E6F2/src/dokick.c jslashem-0.0.7E6F2-J0.0.8/src/dokick.c
--- slashem-0.0.7E6F2/src/dokick.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dokick.c	2004-07-25 11:57:34.000000000 +0900
@@ -2,6 +2,15 @@
 /* Copyright (c) Izchak Miller, Mike Stephenson, Steve Linhart, 1989. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "eshk.h"
 
@@ -23,7 +32,10 @@
 
 static NEARDATA struct obj *kickobj;
 
+/*JP
 static const char kick_passes_thru[] = "kick passes harmlessly through";
+*/
+static const char kick_passes_thru[] = "蹴りはダメージを与えずにすり抜けた";
 
 STATIC_OVL void
 kickdmg(mon, clumsy)
@@ -54,7 +66,10 @@
 	    blessed_foot_damage = 1;
 
 	if (mon->data == &mons[PM_SHADE] && !blessed_foot_damage) {
+/*JP
 	    pline_The("%s.", kick_passes_thru);
+*/
+	    pline_The("%s．", kick_passes_thru);
 	    /* doesn't exercise skill or abuse alignment or frighten pet,
 	       and shades have no passive counterattack */
 	    return;
@@ -99,7 +114,10 @@
 		mdx = mon->mx + u.dx;
 		mdy = mon->my + u.dy;
 		if(goodpos(mdx, mdy, mon, 0)) {
+/*JP
 			pline("%s reels from the blow.", Monnam(mon));
+*/
+			pline("%sは強打されよろめいた．", Monnam(mon));
 			if (m_in_out_region(mon, mdx, mdy)) {
 			    remove_monster(mon->mx, mon->my);
 			    newsym(mon->mx, mon->my);
@@ -157,10 +175,18 @@
 			(!uarmf || !uarmf->blessed)) {
 		    /* doesn't matter whether it would have hit or missed,
 		       and shades have no passive counterattack */
+#if 0 /*JP*/
 		    Your("%s %s.", kick_passes_thru, mon_nam(mon));
+#else
+		    You("%sを蹴ったが，%s．", mon_nam(mon), kick_passes_thru);
+#endif
 		    break;	/* skip any additional kicks */
 		} else if (tmp > (roll = rnd(20))) {
+#if 0 /*JP*/
 		    You("kick %s.", mon_nam(mon));
+#else
+		    You("%sを蹴った．", mon_nam(mon));
+#endif
 		    sum = damageum(mon, uattk);
 		    (void)passive(mon, (boolean)(sum > 0), (sum != 2), AT_KICK);
 		    if (sum == 2)
@@ -175,7 +201,10 @@
 
 	if(Levitation && !rn2(3) && verysmall(mon->data) &&
 	   !is_flyer(mon->data)) {
+/*JP
 		pline("Floating in the air, you miss wildly!");
+*/
+		pline("空中に浮いているので，大きく外した！");
 		exercise(A_DEX, FALSE);
 		(void) passive(mon, FALSE, 1, AT_KICK);
 		return;
@@ -198,7 +227,11 @@
 	else objenchant = 0;
 
 	if (objenchant < canhitmon && !Upolyd) {
+#if 0 /*JP*/
 		Your("attack doesn't seem to harm %s.",
+#else
+		Your("攻撃は%sにダメージを与えなかったようだ．",
+#endif
 			mon_nam(mon));
 		(void) passive(mon, FALSE, 1, TRUE);
 		return;
@@ -210,7 +243,10 @@
 	if(i < (j*3)/10) {
 		if(!rn2((i < j/10) ? 2 : (i < j/5) ? 3 : 4)) {
 			if(martial() && !rn2(2)) goto doit;
+/*JP
 			Your("clumsy kick does no damage.");
+*/
+			Your("不器用な蹴りでダメージを与えられなかった．");
 			(void) passive(mon, FALSE, 1, AT_KICK);
 			return;
 		}
@@ -223,15 +259,23 @@
 	else if (uarm && objects[uarm->otyp].oc_bulky && ACURR(A_DEX) < rnd(25))
 		clumsy = TRUE;
 doit:
+/*JP
 	You("kick %s.", mon_nam(mon));
+*/
+	You("%sを蹴った．", mon_nam(mon));
 	if(!rn2(clumsy ? 3 : 4) && (clumsy || !bigmonst(mon->data)) &&
 	   mon->mcansee && !mon->mtrapped && !thick_skinned(mon->data) &&
 	   mon->data->mlet != S_EEL && haseyes(mon->data) && mon->mcanmove &&
 	   !mon->mstun && !mon->mconf && !mon->msleeping &&
 	   mon->data->mmove >= 12) {
 		if(!nohands(mon->data) && !rn2(martial() ? 5 : 3)) {
+#if 0 /*JP*/
 		    pline("%s blocks your %skick.", Monnam(mon),
 				clumsy ? "clumsy " : "");
+#else
+		    pline("%sはあなたの%s蹴りを防いだ．", Monnam(mon),
+				clumsy ? "不器用な" : "");
+#endif
 		    (void) passive(mon, FALSE, 1, AT_KICK);
 		    return;
 		} else {
@@ -241,6 +285,7 @@
 			    unmap_object(x, y);
 			    newsym(x, y);
 			}
+#if 0 /*JP*/
 			pline("%s %s, %s evading your %skick.", Monnam(mon),
 				(can_teleport(mon->data) ? "teleports" :
 				 is_floater(mon->data) ? "floats" :
@@ -249,6 +294,16 @@
 					"slides" : "jumps"),
 				clumsy ? "easily" : "nimbly",
 				clumsy ? "clumsy " : "");
+#else
+			pline("%sは%s，%sあなたの%s蹴りをたくみに避けた．", Monnam(mon),
+				(can_teleport(mon->data) ? "瞬間移動し" :
+				 is_floater(mon->data) ? "浮き" :
+				 is_flyer(mon->data) ? "はばたき" :
+				 (nolimbs(mon->data)  || slithy(mon->data))
+					? "横に滑り" : "跳ね"),
+				clumsy ? "楽々と" : "素早く",
+				clumsy ? "不器用な" : "");
+#endif
 			(void) passive(mon, FALSE, 1, AT_KICK);
 			return;
 		    }
@@ -275,8 +330,13 @@
 	} else if (!mtmp->mcanmove) {
 		/* too light to do real damage */
 		if (canseemon(mtmp)) {
+#if 0 /*JP:T*/
 		    pline_The("%s harmlessly %s %s.", xname(gold),
 			      otense(gold, "hit"), mon_nam(mtmp));
+#else
+		    pline("%sは%sに命中した．", xname(gold),
+			      mon_nam(mtmp));
+#endif
 		    msg_given = TRUE;
 		}
 	} else {
@@ -289,7 +349,10 @@
 
 		/* greedy monsters catch gold */
 		if (cansee(mtmp->mx, mtmp->my))
+/*JP
 		    pline("%s catches the gold.", Monnam(mtmp));
+*/
+		    pline("%sは金貨をキャッチした．", Monnam(mtmp));
 #ifndef GOLDOBJ
 		mtmp->mgold += gold->quan;
 #endif
@@ -303,9 +366,15 @@
 				robbed -= value;
 #endif
 				if (robbed < 0) robbed = 0;
+#if 0 /*JP*/
 				pline_The("amount %scovers %s recent losses.",
 				      !robbed ? "" : "partially ",
 				      mhis(mtmp));
+#else
+				pline("%s%sの損失を補填するのに使われた．",
+				      !robbed ? "" : "金の一部は",
+				      mhis(mtmp));
+#endif
 				ESHK(mtmp)->robbed = robbed;
 				if(!robbed)
 					make_happy_shk(mtmp, FALSE);
@@ -316,15 +385,28 @@
 #else
 				    ESHK(mtmp)->credit += value;
 #endif
+#if 0 /*JP*/
 				    You("have %ld %s in credit.",
+#else
+				    You("%ld%sを貸しにした．",
+#endif
 					ESHK(mtmp)->credit,
 					currency(ESHK(mtmp)->credit));
+/*JP
 				} else verbalize("Thanks, scum!");
+*/
+				} else verbalize("ありがとよ！くそったれ！");
 			}
 		} else if (mtmp->ispriest) {
 			if (mtmp->mpeaceful)
+/*JP
 			    verbalize("Thank you for your contribution.");
+*/
+			    verbalize("寄付に感謝します．");
+/*JP
 			else verbalize("Thanks, scum!");
+*/
+			else verbalize("ありがとよ！くそったれ！");
 		} else if (is_mercenary(mtmp->data)) {
 		    long goldreqd = 0L;
 
@@ -350,8 +432,14 @@
 			}
 		     }
 		     if (mtmp->mpeaceful)
+/*JP
 			    verbalize("That should do.  Now beat it!");
+*/
+			    verbalize("なんだい？これは？");
+/*JP
 		     else verbalize("That's not enough, coward!");
+*/
+		     else verbalize("そんなもので済むか，卑怯者！");
 		}
 
 #ifndef GOLDOBJ
@@ -392,9 +480,15 @@
 	    otmp2 = otmp->nobj;
 	    if (objects[otmp->otyp].oc_material == GLASS &&
 		otmp->oclass != GEM_CLASS && !obj_resists(otmp, 33, 100)) {
+/*JP
 		result = "shatter";
+*/
+		result = "ガチャン";
 	    } else if (otmp->otyp == EGG && !rn2(3)) {
+/*JP
 		result = "cracking";
+*/
+		result = "グシャッ";
 	    }
 	    if (result) {
 		if (otmp->otyp == MIRROR) change_luck(-2);
@@ -403,7 +497,10 @@
 		 * but it's always exactly 1 that breaks */
 		if (otmp->otyp == EGG && otmp->spe && otmp->corpsenm >= LOW_PM)
 		    change_luck(-1);
+/*JP
 		You_hear("a muffled %s.", result);
+*/
+		You_hear("こもった%sという音を聞いた．", result);
 		if (costly)
 		    loss += stolen_value(otmp, x, y,
 					 (boolean)shkp->mpeaceful, TRUE);
@@ -417,10 +514,17 @@
 	}
 	if (costly && loss) {
 	    if (!insider) {
+/*JP
 		You("caused %ld %s worth of damage!", loss, currency(loss));
+*/
+		You("%ld%s分のダメージを与えた！", loss, currency(loss));
 		make_angry_shk(shkp, x, y);
 	    } else {
+#if 0 /*JP*/
 		You("owe %s %ld %s for objects destroyed.",
+#else
+		You("器物破損で%sに%ld%sの借りをつくった．",
+#endif
 		    mon_nam(shkp), loss, currency(loss));
 	    }
 	}
@@ -449,14 +553,24 @@
 			   trap->ttyp == SPIKED_PIT) && !Passes_walls) ||
 			 trap->ttyp == WEB)) {
 		if (!trap->tseen) find_trap(trap);
+#if 0 /*JP*/
 		You_cant("kick %s that's in a %s!", something,
 			 Hallucination ? "tizzy" :
 			 (trap->ttyp == WEB) ? "web" : "pit");
+#else
+		You("%sでは%sを蹴ることができない",
+		    Hallucination ? "混乱した状態" :
+		    trap->ttyp == WEB ? "くもの巣の中" : "落し穴の中",
+		    something);
+#endif
 		return 1;
 	}
 
 	if(Fumbling && !rn2(3)) {
+/*JP
 		Your("clumsy kick missed.");
+*/
+		Your("不器用な蹴りは外れた．");
 		return(1);
 	}
 
@@ -464,13 +578,26 @@
 			&& !Stone_resistance && !uarmf) {
 	    char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 	    You("kick the %s with your bare %s.",
 		corpse_xname(kickobj, TRUE), makeplural(body_part(FOOT)));
+#else
+	    You("素%sで%sを蹴った．",
+		makeplural(body_part(FOOT)), corpse_xname(kickobj, TRUE));
+#endif
 	    if (!(poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))) {
+#if 0 /*JP*/
 		You("turn to stone...");
+#else
+		You("石になった．．．");
+#endif
 		killer_format = KILLED_BY;
 		/* KMH -- otmp should be kickobj */
+#if 0 /*JP*/
 		Sprintf(kbuf, "kicking %s without boots",
+#else
+		Sprintf(kbuf, "靴無しで%sを蹴って",
+#endif
 			an(killer_cxname(kickobj, TRUE)));
 		killer = kbuf;
 		done(STONING);
@@ -511,25 +638,44 @@
 	    if ((!martial() && rn2(20) > ACURR(A_DEX)) ||
 		    IS_ROCK(levl[u.ux][u.uy].typ) || closed_door(u.ux, u.uy)) {
 		if (Blind)
+/*JP
 		    pline("It doesn't come loose.");
+*/
+		    pline("びくともしない．");
 		else
+#if 0 /*JP*/
 		    pline("%s %sn't come loose.",
 			  The(distant_name(kickobj, xname)),
 			  otense(kickobj, "do"));
+#else
+		    pline("%sはびくともしない．",
+				distant_name(kickobj, xname));
+#endif
 		return (!rn2(3) || martial());
 	    }
 	    if (Blind)
+/*JP
 		pline("It comes loose.");
+*/
+		pline("ヒビが入ってきた．");
 	    else
+#if 0 /*JP*/
 		pline("%s %s loose.",
 		      The(distant_name(kickobj, xname)),
 		      otense(kickobj, "come"));
+#else
+		pline("%sのまわりにヒビが入ってきた．",
+		      The(distant_name(kickobj, xname)));
+#endif
 	    obj_extract_self(kickobj);
 	    newsym(x, y);
 	    if (costly && (!costly_spot(u.ux, u.uy) ||
 		    !index(u.urooms, *in_rooms(x, y, SHOPBASE))))
 		addtobill(kickobj, FALSE, FALSE, FALSE);
+/*JP
 	    if (!flooreffects(kickobj, u.ux, u.uy, "fall")) {
+*/
+	    if (!flooreffects(kickobj, u.ux, u.uy, "落ちる")) {
 		place_object(kickobj, u.ux, u.uy);
 		stackobj(kickobj);
 		newsym(u.ux, u.uy);
@@ -541,13 +687,19 @@
 	if(Is_box(kickobj)) {
 		boolean otrp = kickobj->otrapped;
 
+/*JP
 		if(range < 2) pline("THUD!");
+*/
+		if(range < 2) pline("ガン！");
 
 		container_impact_dmg(kickobj);
 
 		if (kickobj->olocked) {
 		    if (!rn2(5) || (martial() && !rn2(2))) {
+/*JP
 			You("break open the lock!");
+*/
+			You("鍵を壊し開けた！");
 			kickobj->olocked = 0;
 			kickobj->obroken = 1;
 			if (otrp) (void) chest_trap(kickobj, LEG, FALSE);
@@ -555,7 +707,10 @@
 		    }
 		} else {
 		    if (!rn2(3) || (martial() && !rn2(2))) {
+/*JP
 			pline_The("lid slams open, then falls shut.");
+*/
+			pline("蓋がばたんと開き，閉じた．");
 			if (otrp) (void) chest_trap(kickobj, LEG, FALSE);
 			return(1);
 		    }
@@ -572,15 +727,23 @@
 	 * from its current position
 	 */
 	if(range < 2 || (isgold && kickobj->quan > 300L)) {
+/*JP
 	    if(!Is_box(kickobj)) pline("Thump!");
+*/
+	    if(!Is_box(kickobj)) pline("ゴツン！");
 	    return(!rn2(3) || martial());
 	}
 
 	if (kickobj->quan > 1L && !isgold) kickobj = splitobj(kickobj, 1L);
 
 	if (slide && !Blind)
+#if 0 /*JP*/
 	    pline("Whee!  %s %s across the %s.", Doname2(kickobj),
 		  otense(kickobj, "slide"), surface(x,y));
+#else
+	    pline("ズルッ！%sは%sの上を滑った．", Doname2(kickobj),
+		surface(x,y));
+#endif
 
 	obj_extract_self(kickobj);
 	(void) snuff_candle(kickobj);
@@ -621,7 +784,10 @@
 				    (boolean)shkp->mpeaceful, FALSE);
 	}
 
+/*JP
 	if(flooreffects(kickobj,bhitpos.x,bhitpos.y,"fall")) return(1);
+*/
+	if(flooreffects(kickobj,bhitpos.x,bhitpos.y,"落ちる")) return(1);
 	place_object(kickobj, bhitpos.x, bhitpos.y);
 	stackobj(kickobj);
 	newsym(kickobj->ox, kickobj->oy);
@@ -635,6 +801,7 @@
 	const char *what;
 
 	if (kickobj) what = distant_name(kickobj,doname);
+#if 0 /*JP*/
 	else if (IS_DOOR(maploc->typ)) what = "a door";
 	else if (IS_TREE(maploc->typ)) what = "a tree";
 	else if (IS_STWALL(maploc->typ)) what = "a wall";
@@ -653,6 +820,26 @@
 	else if (maploc->typ == IRONBARS) what = "an iron bar";
 	else what = "something weird";
 	return strcat(strcpy(buf, "kicking "), what);
+#else /*JP*/
+	else if (IS_DOOR(maploc->typ)) what = "扉";
+	else if (IS_TREE(maploc->typ)) what = "木";
+	else if (IS_STWALL(maploc->typ)) what = "壁";
+	else if (IS_ROCK(maploc->typ)) what = "岩";
+	else if (IS_THRONE(maploc->typ)) what = "玉座";
+	else if (IS_FOUNTAIN(maploc->typ)) what = "泉";
+	else if (IS_GRAVE(maploc->typ)) what = "墓石";
+#ifdef SINKS
+	else if (IS_SINK(maploc->typ)) what = "流し台";
+        else if (IS_TOILET(maploc->typ)) what = "トイレ";        
+#endif
+	else if (IS_ALTAR(maploc->typ)) what = "祭壇";
+	else if (IS_DRAWBRIDGE(maploc->typ)) what = "跳ね橋";
+	else if (maploc->typ == STAIRS) what = "階段";
+	else if (maploc->typ == LADDER) what = "はしご";
+	else if (maploc->typ == IRONBARS) what = "鉄棒";
+	else what = "何か妙なもの";
+	return strcat(strcpy(buf, what), "を蹴って");
+#endif /*JP*/
 }
 
 int
@@ -665,15 +852,27 @@
 	char buf[BUFSZ];
 
 	if (nolimbs(youmonst.data) || slithy(youmonst.data)) {
+/*JP
 		You("have no legs to kick with.");
+*/
+		You("何かを蹴ろうにも足がない．");
 		no_kick = TRUE;
 	} else if (verysmall(youmonst.data)) {
+/*JP
 		You("are too small to do any kicking.");
+*/
+		You("何かを蹴るには小さすぎる．");
 		no_kick = TRUE;
 #ifdef STEED
 	} else if (u.usteed) {
+/*JP
 		if (yn_function("Kick your steed?", ynchars, 'y') == 'y') {
+*/
+		if (yn_function("馬を蹴る？", ynchars, 'y') == 'y') {
+/*JP
 		    You("kick %s.", mon_nam(u.usteed));
+*/
+		You("%sを蹴った．", mon_nam(u.usteed));
 		    kick_steed();
 		    return 1;
 		} else {
@@ -686,28 +885,50 @@
 		const char *bp = body_part(LEG);
 
 		if (wl == BOTH_SIDES) bp = makeplural(bp);
+#if 0 /*JP*/
 		Your("%s%s %s in no shape for kicking.",
 		     (wl == LEFT_SIDE) ? "left " :
 			(wl == RIGHT_SIDE) ? "right " : "",
 		     bp, (wl == BOTH_SIDES) ? "are" : "is");
+#else
+		You("%s%sを怪我をしており蹴れない．",
+		     (wl == LEFT_SIDE) ? "左" :
+			(wl == RIGHT_SIDE) ? "右" : "",
+		     bp);
+#endif
 		no_kick = TRUE;
 	} else if (near_capacity() > SLT_ENCUMBER) {
+/*JP
 		Your("load is too heavy to balance yourself for a kick.");
+*/
+		You("たくさんものを持ちすぎて蹴りのためのバランスがとれない．");
 		no_kick = TRUE;
 	} else if (youmonst.data->mlet == S_LIZARD) {
+/*JP
 		Your("legs cannot kick effectively.");
+*/
+		Your("足ではうまく蹴れない．");
 		no_kick = TRUE;
 	} else if (u.uinwater && !rn2(2)) {
+/*JP
 		Your("slow motion kick doesn't hit anything.");
+*/
+		Your("遅い動きの蹴りでは命中しようがない．");
 		no_kick = TRUE;
 	} else if (u.utrap) {
 		switch (u.utraptype) {
 		    case TT_PIT:
+/*JP
 			pline("There's not enough room to kick down here.");
+*/
+			pline("落し穴にはまっているので，蹴れない．");
 			break;
 		    case TT_WEB:
 		    case TT_BEARTRAP:
+/*JP
 			You_cant("move your %s!", body_part(LEG));
+*/
+			You("%sを動かすことができない！", body_part(LEG));
 			break;
 		    default:
 			break;
@@ -735,13 +956,22 @@
 
 	if(u.uswallow) {
 		switch(rn2(3)) {
+/*JP
 		case 0:  You_cant("move your %s!", body_part(LEG));
+*/
+		case 0:  You("%sを動かすことができない！", body_part(LEG));
 			 break;
 		case 1:  if (is_animal(u.ustuck->data)) {
+/*JP
 				pline("%s burps loudly.", Monnam(u.ustuck));
+*/
+				pline("%sは大きなゲップをした．", Monnam(u.ustuck));
 				break;
 			 }
+/*JP
 		default: Your("feeble kick has no effect."); break;
+*/
+		default: Your("弱々しい蹴りは効果がない"); break;
 		}
 		return(1);
 	}
@@ -757,7 +987,10 @@
 		if (isok(xx,yy) && !IS_ROCK(levl[xx][yy].typ) &&
 			!IS_DOOR(levl[xx][yy].typ) &&
 			(!Is_airlevel(&u.uz) || !OBJ_AT(xx,yy))) {
+/*JP
 		    You("have nothing to brace yourself against.");
+*/
+		    pline("支えにできるようなものが無い．");
 		    return(0);
 		}
 	}
@@ -807,7 +1040,10 @@
 	}
 	if (is_pool(x, y) ^ !!u.uinwater) {
 		/* objects normally can't be removed from water by kicking */
+/*JP
 		You("splash some water around.");
+*/
+		You("水を回りにまきちらした．");
 		return 1;
 	}
 
@@ -827,15 +1063,24 @@
 		if(maploc->typ == SDOOR) {
 		    if(!Levitation && rn2(30) < avrg_attrib) {
 			cvt_sdoor_to_door(maploc);	/* ->typ = DOOR */
+/*JP
 			pline("Crash!  %s a secret door!",
+*/
+			pline("ガシャン！あなたは秘密の扉を%s！",
 			      /* don't "kick open" when it's locked
 				 unless it also happens to be trapped */
 			(maploc->doormask & (D_LOCKED|D_TRAPPED)) == D_LOCKED ?
+/*JP
 			      "Your kick uncovers" : "You kick open");
+*/
+			      "発見した" : "蹴り開けた");
 			exercise(A_DEX, TRUE);
 			if(maploc->doormask & D_TRAPPED) {
 			    maploc->doormask = D_NODOOR;
+/*JP
 			    b_trapped("door", FOOT);
+*/
+			    b_trapped("扉", FOOT);
 			} else if (maploc->doormask != D_NODOOR &&
 				   !(maploc->doormask & D_LOCKED))
 			    maploc->doormask = D_ISOPEN;
@@ -851,7 +1096,10 @@
 		}
 		if(maploc->typ == SCORR) {
 		    if(!Levitation && rn2(30) < avrg_attrib) {
+/*JP
 			pline("Crash!  You kick open a secret passage!");
+*/
+			pline("ガシャン！あなたは秘密の通路を蹴りやぶった！");
 			exercise(A_DEX, TRUE);
 			maploc->typ = CORR;
 			if (Blind)
@@ -870,9 +1118,15 @@
 			maploc->doormask = 0; /* don't leave loose ends.. */
 			(void) mkgold((long)rnd(200), x, y);
 			if (Blind)
+/*JP
 			    pline("CRASH!  You destroy it.");
+*/
+			    pline("ガシャン！あなたは何かを破壊した．");
 			else {
+/*JP
 			    pline("CRASH!  You destroy the throne.");
+*/
+			    pline("ガシャン！あなたは玉座を破壊した．");
 			    newsym(x, y);
 			}
 			exercise(A_DEX, TRUE);
@@ -885,9 +1139,15 @@
 			    (void) mksobj_at(rnd_class(DILITHIUM_CRYSTAL,
 					LUCKSTONE-1), x, y, FALSE, TRUE);
 			if (Blind)
+/*JP
 			    You("kick %s loose!", something);
+*/
+			    You("なにかを蹴り散らした！");
 			else {
+/*JP
 			    You("kick loose some ornamental coins and gems!");
+*/
+			    You("装飾用の金貨や宝石を蹴り散らした！");
 			    newsym(x, y);
 			}
 			/* prevent endless milking */
@@ -903,7 +1163,10 @@
 		}
 		if(IS_ALTAR(maploc->typ)) {
 		    if(Levitation) goto dumb;
+/*JP
 		    You("kick %s.",(Blind ? something : "the altar"));
+*/
+		    You("%sを蹴った．",(Blind ? "何か" : "祭壇"));
 		    if(!rn2(3)) goto ouch;
 		    altar_wrath(x, y);
 		    exercise(A_DEX, TRUE);
@@ -911,12 +1174,21 @@
 		}
 		if(IS_FOUNTAIN(maploc->typ)) {
 		    if(Levitation) goto dumb;
+/*JP
 		    You("kick %s.",(Blind ? something : "the fountain"));
+*/
+		    You("%sを蹴った．",(Blind ? "何か" : "泉"));
 		    if(!rn2(3)) goto ouch;
 		    /* make metal boots rust */
 		    if(uarmf && rn2(3))
+/*JP
 			if (!rust_dmg(uarmf, "metal boots", 1, FALSE, &youmonst)) {
+*/
+			if (!rust_dmg(uarmf, "金属の靴", 1, FALSE, &youmonst)) {
+/*JP
 				Your("boots get wet.");
+*/
+				Your("靴は濡れた．");
 				/* could cause short-lived fumbling here */
 			}
 		    exercise(A_DEX, TRUE);
@@ -929,7 +1201,11 @@
 		    /* nothing, fruit or trouble? 75:23.5:1.5% */
 		    if (rn2(3)) {
 			if ( !rn2(6) && !(mvitals[PM_KILLER_BEE].mvflags & G_GONE) )
+#if 0 /*JP*/
 			    You_hear("a low buzzing."); /* a warning */
+#else
+			    You_hear("ぶーんという音を聞いた．"); /* a warning */
+#endif
 			goto ouch;
 		    }
 		    if (rn2(15) && !(maploc->looted & TREE_LOOTED) &&
@@ -938,17 +1214,28 @@
 			short frtype = treefruit->otyp;
 			treefruit->quan = nfruit;
 			if (is_plural(treefruit))
+/*JP
 			    pline("Some %s fall from the tree!", xname(treefruit));
+*/
+				pline("%sが何個か木から落ちてきた！", xname(treefruit));
 			else
+/*JP
 			    pline("%s falls from the tree!", An(xname(treefruit)));
+*/
+				pline("%sが木から落ちてきた！", An(xname(treefruit)));
 			nfall = scatter(x,y,2,MAY_HIT,treefruit);
 			if (nfall != nfruit) {
 			    /* scatter left some in the tree, but treefruit
 			     * may not refer to the correct object */
 			    treefruit = mksobj(frtype, TRUE, FALSE);
 			    treefruit->quan = nfruit-nfall;
+#if 0 /*JP*/
 			    pline("%ld %s got caught in the branches.",
 				nfruit-nfall, xname(treefruit));
+#else
+			    pline("%ld個の%sが枝にひっかかった．",
+				nfruit-nfall, xname(treefruit));
+#endif
 			    dealloc_obj(treefruit);
 			}
 			exercise(A_DEX, TRUE);
@@ -968,9 +1255,15 @@
 				made++;
 			}
 			if ( made )
+/*JP
 			    pline("You've attracted the tree's former occupants!");
+*/
+			pline("木の先住民を起こしてしまった！");
 			else
+/*JP
 			    You("smell stale honey.");
+*/
+			    pline("古いはちみつのにおいがした．");
 			maploc->looted |= TREE_SWARM;
 			return(1);
 		    }
@@ -979,7 +1272,11 @@
 #ifdef SINKS
 		if(IS_TOILET(maploc->typ)) {
 		   if(Levitation) goto dumb;
+#if 0 /*JP*/
 		   pline("Klunk!");
+#else
+		   pline("ガラン！");
+#endif
 		   if (!rn2(4)) breaktoilet(x,y);
 		   return(1);
 		}
@@ -994,16 +1291,28 @@
 		    if(Levitation) goto dumb;
 		    if(rn2(5)) {
 			if(flags.soundok)
+/*JP
 			    pline("Klunk!  The pipes vibrate noisily.");
+*/
+			    pline("ガラン！パイプはうるさく振動した．");
+/*JP
 			else pline("Klunk!");
+*/
+			else pline("ガラン！");
 			exercise(A_DEX, TRUE);
 			return(1);
 		    } else if(!(maploc->looted & S_LPUDDING) && !rn2(3) &&
 			  !(mvitals[PM_BLACK_PUDDING].mvflags & G_GONE)) {
 			if (Blind)
+/*JP
 			    You_hear("a gushing sound.");
+*/
+			    You_hear("なにかが噴出する音を聞いた．");
 			else
+/*JP
 			    pline("A %s ooze gushes up from the drain!",
+*/
+			    pline("%s液体が排水口からにじみ出た！",
 					 hcolor(NH_BLACK));
 			(void) makemon(&mons[PM_BLACK_PUDDING],
 					 x, y, NO_MM_FLAGS);
@@ -1014,20 +1323,34 @@
 		    } else if(!(maploc->looted & S_LDWASHER) && !rn2(3) &&
 			      !(mvitals[washerndx].mvflags & G_GONE)) {
 			/* can't resist... */
+#if 0 /*JP*/
 			pline("%s returns!", (Blind ? Something :
 							"The dish washer"));
+#else
+			pline("%sが戻ってきた！", (Blind ? "何か" :
+							"皿洗い"));
+#endif
 			if (makemon(&mons[washerndx], x, y, NO_MM_FLAGS))
 			    newsym(x,y);
 			maploc->looted |= S_LDWASHER;
 			exercise(A_DEX, TRUE);
 			return(1);
 		    } else if(!rn2(3)) {
+#if 0 /*JP*/
 			pline("Flupp!  %s.", (Blind ?
 				      "You hear a sloshing sound" :
 				      "Muddy waste pops up from the drain"));
+#else
+			pline("うわ！%s．", (Blind ?
+				      "あなたは，バチャバチャする音を聞いた" :
+				      "排水口からどろどろの廃棄物が出てくる"));
+#endif
 			if(!(maploc->looted & S_LRING)) { /* once per sink */
 			    if (!Blind)
+/*JP
 				You("see a ring shining in its midst.");
+*/
+				You("その中に光る指輪を見つけた．");
 			    (void) mkobj_at(RING_CLASS, x, y, TRUE);
 			    newsym(x, y);
 			    exercise(A_DEX, TRUE);
@@ -1044,12 +1367,18 @@
 		    if(!IS_STWALL(maploc->typ) && maploc->ladder == LA_DOWN)
 			goto dumb;
 ouch:
+/*JP
 		    pline("Ouch!  That hurts!");
+*/
+		    pline("いてっ！怪我した！");
 		    exercise(A_DEX, FALSE);
 		    exercise(A_STR, FALSE);
 		    if (Blind) feel_location(x,y); /* we know we hit it */
 		    if (is_drawbridge_wall(x,y) >= 0) {
+/*JP
 			pline_The("drawbridge is unaffected.");
+*/
+		    pline("跳ね橋はびくともしない．");
 			/* update maploc to refer to the drawbridge */
 			(void) find_drawbridge(&x,&y);
 			maploc = &levl[x][y];
@@ -1070,10 +1399,16 @@
 dumb:
 		exercise(A_DEX, FALSE);
 		if (martial() || ACURR(A_DEX) >= 16 || rn2(3)) {
+/*JP
 			You("kick at empty space.");
+*/
+			You("何もない空間を蹴った．");
 			if (Blind) feel_location(x,y);
 		} else {
+/*JP
 			pline("Dumb move!  You strain a muscle.");
+*/
+			pline("ばかげた動きだ！筋肉を痛めた．");
 			exercise(A_STR, FALSE);
 			set_wounded_legs(RIGHT_SIDE, 5 + rnd(5));
 		}
@@ -1096,16 +1431,28 @@
 		boolean shopdoor = *in_rooms(x, y, SHOPBASE) ? TRUE : FALSE;
 		/* break the door */
 		if(maploc->doormask & D_TRAPPED) {
+/*JP
 		    if (flags.verbose) You("kick the door.");
+*/
+		    if (flags.verbose) You("扉を蹴った．");
 		    exercise(A_STR, FALSE);
 		    maploc->doormask = D_NODOOR;
+/*JP
 		    b_trapped("door", FOOT);
+*/
+		    b_trapped("扉", FOOT);
 		} else if(ACURR(A_STR) > 18 && !rn2(5) && !shopdoor) {
+/*JP
 		    pline("As you kick the door, it shatters to pieces!");
+*/
+		    pline("扉を蹴ると，こなごなにくだけた！");
 		    exercise(A_STR, TRUE);
 		    maploc->doormask = D_NODOOR;
 		} else {
+/*JP
 		    pline("As you kick the door, it crashes open!");
+*/
+		    pline("扉を蹴ると，壊れて開いた！");
 		    exercise(A_STR, TRUE);
 		    maploc->doormask = D_BROKEN;
 		}
@@ -1116,7 +1463,10 @@
 		unblock_point(x,y);		/* vision */
 		if (shopdoor) {
 		    add_damage(x, y, 400L);
+/*JP
 		    pay_for_damage("break", FALSE);
+*/
+		    pay_for_damage("壊す", FALSE);
 		}
 		if (in_town(x, y))
 		  for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
@@ -1126,10 +1476,19 @@
 			couldsee(mtmp->mx, mtmp->my) &&
 			mtmp->mpeaceful) {
 			if (canspotmon(mtmp))
+/*JP
 			    pline("%s yells:", Amonnam(mtmp));
+*/
+			    pline("%sは叫んだ：", Amonnam(mtmp));
 			else
+/*JP
 			    You_hear("someone yell:");
+*/
+			    You_hear("誰かが叫んでいるのを聞いた：");
+/*JP
 			verbalize("Halt, thief!  You're under arrest!");
+*/
+			verbalize("止まれ泥棒！おまえを逮捕する！");
 			(void) angry_guards(FALSE);
 			break;
 		    }
@@ -1137,7 +1496,10 @@
 	} else {
 	    if (Blind) feel_location(x,y);	/* we know we hit it */
 	    exercise(A_STR, TRUE);
+/*JP
 	    pline("WHAMMM!!!");
+*/
+	    pline("ぐぁぁぁん！");
 	    if (in_town(x, y))
 		for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
 		    if (DEADMONSTER(mtmp)) continue;
@@ -1145,15 +1507,31 @@
 				mtmp->data == &mons[PM_WATCH_CAPTAIN]) &&
 			    mtmp->mpeaceful && couldsee(mtmp->mx, mtmp->my)) {
 			if (canspotmon(mtmp))
+#if 0 /*JP*/
 			    pline("%s yells:", Amonnam(mtmp));
+#else
+			    pline("%sは叫んだ：", Amonnam(mtmp));
+#endif
 			else
+#if 0 /*JP*/
 			    You_hear("someone yell:");
+#else
+			    You_hear("誰かが叫んでいるのを聞いた：");
+#endif
 			if(levl[x][y].looted & D_WARNED) {
+#if 0 /*JP*/
 			    verbalize("Halt, vandal!  You're under arrest!");
+#else
+			    verbalize("止まれ野蛮人！おまえを逮捕する！");
+#endif
 			    (void) angry_guards(FALSE);
 			} else {
 			    int i;
+#if 0 /*JP*/
 			    verbalize("Hey, stop damaging that door!");
+#else
+			    verbalize("おい，扉を破壊するのをやめろ！");
+#endif
 			    /* [ALI] Since marking a door as warned will have
 			     * the side effect of trapping the door, it must be
 			     * included in the doors[] array in order that trap
@@ -1286,38 +1664,78 @@
 	}
 
 	if (dct && cansee(x, y)) {      /* at least one object fell */
+#if 0 /*JP*/
 	    const char *what = (dct == 1L ? "object falls" : "objects fall");
+#else
+	    const char *what = "物";
+#endif
 
 	    if (missile)
+#if 0 /*JP*/
 		pline("From the impact, %sother %s.",
 		      dct == oct ? "the " : dct == 1L ? "an" : "", what);
+#else
+		pline("衝撃で，他の%sが落ちた．",what);
+#endif
 	    else if (oct == dct)
+#if 0 /*JP*/
 		pline("%s adjacent %s %s.",
 		      dct == 1L ? "The" : "All the", what, gate_str);
+#else
+		pline("近くにあった%sが%s落ちた．",
+		      what, gate_str);
+#endif
 	    else
+#if 0 /*JP*/
 		pline("%s adjacent %s %s.",
 		      dct == 1L ? "One of the" : "Some of the",
 		      dct == 1L ? "objects falls" : what, gate_str);
+#else
+		pline("近くにあった%s%s%s落ちた．",
+		      what,
+		      dct == 1L ? "が" : "のいくつかが",
+		      gate_str);
+#endif
 	}
 
 	if(costly && shkp && price) {
 		if(ESHK(shkp)->robbed > robbed) {
+#if 0 /*JP*/
 		    You("removed %ld %s worth of goods!", price, currency(price));
+#else
+		    You("%ld%s分の品物を取りさった！", price, currency(price));
+#endif
 		    if(cansee(shkp->mx, shkp->my)) {
 			if(ESHK(shkp)->customer[0] == 0)
 			    (void) strncpy(ESHK(shkp)->customer,
 					   plname, PL_NSIZ);
 			if(angry)
+#if 0 /*JP*/
 			    pline("%s is infuriated!", Monnam(shkp));
+#else
+			    pline("%sは激怒した！", Monnam(shkp));
+#endif
+#if 0 /*JP*/
 			else pline("\"%s, you are a thief!\"", plname);
+#else
+			else pline("「%sめ，おまえは泥棒だな！」", plname);
+#endif
+#if 0 /*JP*/
 		    } else  You_hear("a scream, \"Thief!\"");
+#else
+		    } else You_hear("金切り声を聞いた「泥棒！」");
+#endif
 		    hot_pursuit(shkp);
 		    (void) angry_guards(FALSE);
 		    return;
 		}
 		if(ESHK(shkp)->debit > debit) {
 		    long amt = (ESHK(shkp)->debit - debit);
+#if 0 /*JP*/
 		    You("owe %s %ld %s for goods lost.",
+#else
+		    You("品物消失のため%sに%ld%sの借りをつくった．",
+#endif
 			Monnam(shkp),
 			amt, currency(amt));
 		}
@@ -1411,14 +1829,23 @@
 		) {
 		if (otmp->otyp == MIRROR)
 		    change_luck(-2);
+/*JP
 		result = "crash";
+*/
+		result = "グシャッ";
 	    } else {
 		/* penalty for breaking eggs laid by you */
 		if (otmp->otyp == EGG && otmp->spe && otmp->corpsenm >= LOW_PM)
 		    change_luck((schar) -min(otmp->quan, 5L));
+/*JP
 		result = "splat";
+*/
+		result = "ベチャッ";
 	    }
+/*JP
 	    You_hear("a muffled %s.",result);
+*/
+				You_hear("こもった%sという音を聞いた．", result);
 	    obj_extract_self(otmp);
 	    obfree(otmp, (struct obj *) 0);
 	    return TRUE;
@@ -1496,24 +1923,42 @@
 {
 	char obuf[BUFSZ];
 
+#if 0 /*JP*/
 	Sprintf(obuf, "%s%s",
 		 (otmp->otyp == CORPSE &&
 			type_is_pname(&mons[otmp->corpsenm])) ? "" : "The ",
 		 xname(otmp));
+#else
+	Sprintf(obuf, "%sは", xname(otmp));
+#endif
 
 	if(num) { /* means: other objects are impacted */
+#if 0 /*JP*/
 	    Sprintf(eos(obuf), " %s %s object%s",
 		    otense(otmp, "hit"),
 		    num == 1L ? "another" : "other",
 		    num > 1L ? "s" : "");
+#else
+	    Sprintf(eos(obuf), "他の物体に命中して");
+#endif
 	    if(nodrop)
+/*JP
 		Sprintf(eos(obuf), ".");
+*/
+		Sprintf(eos(obuf), "止まった．");
 	    else
+#if 0 /*JP*/
 		Sprintf(eos(obuf), " and %s %s.",
 			otense(otmp, "fall"), gate_str);
+#else
+		Sprintf(eos(obuf), "%s落ちた．", gate_str);
+#endif
 	    pline("%s", obuf);
 	} else if(!nodrop)
+/*JP
 	    pline("%s %s %s.", obuf, otense(otmp, "fall"), gate_str);
+*/
+	    pline("%s%s落ちた．", obuf, gate_str);
 }
 
 /* migration destination for objects which fall down to next level */
@@ -1530,19 +1975,28 @@
 
 	if ((xdnstair == x && ydnstair == y) ||
 		(sstairs.sx == x && sstairs.sy == y && !sstairs.up)) {
+/*JP
 	    gate_str = "down the stairs";
+*/
+	    gate_str = "階段から";
 	    return (xdnstair == x && ydnstair == y) ?
 		    MIGR_STAIRS_UP : MIGR_SSTAIRS;
 	}
 	if (xdnladder == x && ydnladder == y) {
+/*JP
 	    gate_str = "down the ladder";
+*/
+	    gate_str = "はしごから";
 	    return MIGR_LADDER_UP;
 	}
 
 	if (((ttmp = t_at(x, y)) != 0 && ttmp->tseen) &&
 		(ttmp->ttyp == TRAPDOOR || ttmp->ttyp == HOLE)) {
 	    gate_str = (ttmp->ttyp == TRAPDOOR) ?
+/*JP
 		    "through the trap door" : "through the hole";
+*/
+		    "落し扉に" : "穴に";
 	    return MIGR_RANDOM;
 	}
 	return MIGR_NOWHERE;
diff -aurN slashem-0.0.7E6F2/src/dothrow.c jslashem-0.0.7E6F2-J0.0.8/src/dothrow.c
--- slashem-0.0.7E6F2/src/dothrow.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dothrow.c	2004-07-27 08:59:56.000000000 +0900
@@ -4,6 +4,15 @@
 
 /* Contains code for 't' (throw) */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "edog.h"
 
@@ -120,7 +129,11 @@
 	if(obj->oclass == COIN_CLASS && obj != uquiver) return(throw_gold(obj));
 #endif
 
+#if 0 /*JP*/
 	if(!canletgo(obj,"throw"))
+#else
+	if(!canletgo(obj,"投げる"))
+#endif
 		return(0);
 
 	if(obj == uwep && welded(obj)) {
@@ -129,25 +142,44 @@
 	}
 
 	if (obj->oartifact == ART_MJOLLNIR && obj != uwep) {
+#if 0 /*JP*/
 	    pline("%s must be wielded before it can be thrown.",
+#else
+	    pline("投げる前に%sを装備しなくてはならない．",
+#endif
 		The(xname(obj)));
 		return(0);
 	}
 	if ((obj->oartifact == ART_MJOLLNIR && ACURR(A_STR) < STR19(25))
 	   || (obj->otyp == BOULDER && !throws_rocks(youmonst.data))) {
+#if 0 /*JP*/
 		pline("It's too heavy.");
+#else
+		pline("重すぎて投げられない．");
+#endif
 		return(1);
 	}
 	if(!u.dx && !u.dy && !u.dz) {
+#if 0 /*JP*/
 		You("cannot throw an object at yourself.");
+#else
+		pline("自分に向かっては投げられない．");
+#endif
 		return(0);
 	}
 	u_wipe_engr(2);
 	if (!uarmg && !Stone_resistance && (obj->otyp == CORPSE &&
 		    touch_petrifies(&mons[obj->corpsenm]))) {
+#if 0 /*JP*/
 		You("throw the %s corpse with your bare %s.",
 		    mons[obj->corpsenm].mname, body_part(HAND));
 		Sprintf(killer_buf, "%s corpse", an(mons[obj->corpsenm].mname));
+#else
+		You("素%sで%sの死体を投げた．",
+		    body_part(HAND), jtrns_mon(mons[obj->corpsenm].mname));
+		Sprintf(killer_buf, "%sの死体を素手で投げて",
+		    jtrns_mon(mons[obj->corpsenm].mname));
+#endif
 		instapetrify(killer_buf);
 	}
 	if (welded(obj)) {
@@ -220,7 +252,11 @@
 		/* more than usual == volley */
 		if (((shotlimit <= 0) || (shotlimit >= multishot)) && 
 			(obj->quan >= multishot))
+#if 0 /*JP*/
 		    You("let fly a volley of %s!", xname(obj));
+#else
+		    You("%sを連射した！", xname(obj));
+#endif
 	    }
 
 	    /* Shotlimit controls your rate of fire */
@@ -255,10 +291,18 @@
 	   attempted to specify a count */
 	if (multishot > 1 || shotlimit > 0) {
 	    /* "You shoot N arrows." or "You throw N daggers." */
+#if 0 /*JP*/
 	    You("%s %d %s.",
 		m_shot.s ? "shoot" : "throw",
 		multishot,	/* (might be 1 if player gave shotlimit) */
 		(multishot == 1) ? singular(obj, xname) :  xname(obj));
+#else
+	    You("%d%sの%sを%s．",
+		multishot,	/* (might be 1 if player gave shotlimit) */
+	    	(objects[obj->otyp].oc_skill == -P_FIREARM) ? "発" : "本",
+		xname(obj),
+		m_shot.s ? "撃った" : "投げた");
+#endif
 	}
 
 	wep_mask = obj->owornmask;
@@ -307,12 +351,18 @@
 	 */
 
 	if (notake(youmonst.data)) {
+/*JP
 	    You("are physically incapable of throwing anything.");
+*/
+	    You("何かを投げるのは物理的に無理だ．");
 	    return 0;
 	}
 
 	if(check_capacity((char *)0)) return(0);
+/*JP
 	obj = getobj(uslinging() ? bullets : toss_objs, "throw");
+*/
+	obj = getobj(uslinging() ? bullets : toss_objs, "投げる");
 	/* it is also possible to throw food */
 	/* (or jewels, or iron balls... ) */
 
@@ -405,7 +455,10 @@
 	int result, shotlimit;
 
 	if (notake(youmonst.data)) {
+/*JP
 	    You("are physically incapable of doing that.");
+*/
+	    pline("それは物理的に無理だ．");
 	    return 0;
 	}
 
@@ -413,15 +466,24 @@
 	if (!uquiver) {
 		if (!flags.autoquiver) {
 			/* Don't automatically fill the quiver */
+/*JP
 			You("have no ammunition readied!");
+*/
+			You("発射準備が整っていない！");
 			return(dothrow());
 		}
 		autoquiver();
 		if (!uquiver) {
+/*JP
 			You("have nothing appropriate for your quiver!");
+*/
+			You("発射するものがない！");
 			return(dothrow());
 		} else {
+/*JP
 			You("fill your quiver:");
+*/
+			You("装填した:");
 			prinv((char *)0, uquiver, 0L);
 		}
 	}
@@ -471,8 +533,13 @@
 	if (IS_ALTAR(levl[u.ux][u.uy].typ))
 		doaltarobj(obj);
 	else
+#if 0 /*JP*/
 		pline("%s hit%s the %s.", Doname2(obj),
 		      (obj->quan == 1L) ? "s" : "", surface(u.ux,u.uy));
+#else
+		pline("%sは%sに命中した．", Doname2(obj),
+		      surface(u.ux,u.uy));
+#endif
 
 	if (hero_breaks(obj, u.ux, u.uy, TRUE)) return;
 	if (ship_object(obj, u.ux, u.uy, FALSE)) return;
@@ -582,7 +649,10 @@
     struct trap *ttmp;
     
     if (!isok(x,y)) {
+/*JP
 	You_feel("the spirits holding you back.");
+*/
+	You_feel("あなたを捕まえていた魂が戻った気がした．");
 	return FALSE;
     } else if (!in_out_region(x, y)) {
 	return FALSE;
@@ -594,30 +664,60 @@
 	if (IS_ROCK(levl[x][y].typ) || closed_door(x,y)) {
 	    const char *s;
 
+/*JP
 	    pline("Ouch!");
+*/
+	    pline("いてっ！");
 	    if (IS_TREE(levl[x][y].typ))
+/*JP
 		s = "bumping into a tree";
+*/
+		s = "木にぶちあたって";
 	    else if (IS_ROCK(levl[x][y].typ))
+/*JP
 		s = "bumping into a wall";
+*/
+		s = "壁にぶちあたって";
 	    else
+/*JP
 		s = "bumping into a door";
+*/
+		s = "扉にぶちあたって";
 	    losehp(rnd(2+*range), s, KILLED_BY);
 	    return FALSE;
 	}
 	if (levl[x][y].typ == IRONBARS) {
+/*JP
 	    You("crash into some iron bars.  Ouch!");
+*/
+	    You("鉄の棒にぶちあたった．いてっ！");
+/*JP
 	    losehp(rnd(2+*range), "crashing into iron bars", KILLED_BY);
+*/
+	    losehp(rnd(2+*range), "鉄の棒にぶちあたって", KILLED_BY);
 	    return FALSE;
 	}
 	if ((obj = sobj_at(BOULDER,x,y)) != 0) {
+/*JP
 	    You("bump into a %s.  Ouch!", xname(obj));
+*/
+	    You("%sにぶちあたった．いてっ！", xname(obj));
+/*JP
 	    losehp(rnd(2+*range), "bumping into a boulder", KILLED_BY);
+*/
+	    losehp(rnd(2+*range), "岩にぶちあたって", KILLED_BY);
 	    return FALSE;
 	}
 	if (!may_pass) {
 	    /* did we hit a no-dig non-wall position? */
+/*JP
 	    You("smack into something!");
+*/
+	    You("何かにぶちあたった！");
+/*JP
 	    losehp(rnd(2+*range), "touching the edge of the universe", KILLED_BY);
+*/
+	    losehp(rnd(2+*range), "世界の果てに触れて", KILLED_BY);
 	    return FALSE;
 	}
 	if ((u.ux - x) && (u.uy - y) &&
@@ -625,16 +725,27 @@
 	    boolean too_much = (invent && (inv_weight() + weight_cap() > 600));
 	    /* Move at a diagonal. */
 	    if (bigmonst(youmonst.data) || too_much) {
+#if 0 /*JP*/
 		You("%sget forcefully wedged into a crevice.",
 			too_much ? "and all your belongings " : "");
+#else
+		You("%sはむりやりすき間に押し込められた．",
+			too_much ? "と全部の荷物" : "");
+#endif
+/*JP
 		losehp(rnd(2+*range), "wedging into a narrow crevice", KILLED_BY);
+*/
+		losehp(rnd(2+*range), "狭いすき間に押し込められて", KILLED_BY);
 		return FALSE;
 	    }
 	}
     }
 
     if ((mon = m_at(x, y)) != 0) {
+/*JP
 	You("bump into %s.", a_monnam(mon));
+*/
+	You("%sにぶちあたった．", a_monnam(mon));
 	wakeup(mon);
 	return FALSE;
     }
@@ -642,7 +753,10 @@
 	bad_rock(&youmonst, u.ux, y) && bad_rock(&youmonst, x, u.uy)) {
 	/* Move at a diagonal. */
 	if (In_sokoban(&u.uz)) {
+/*JP
 	    You("come to an abrupt halt!");
+*/
+	    You("とつぜん停止した！");
 	    return FALSE;
 	}
     }
@@ -677,9 +791,14 @@
 		return TRUE;
     	} else {
 		if (ttmp->tseen)
+#if 0 /*JP*/
 		    You("pass right over %s %s.",
 		    	(ttmp->ttyp == ARROW_TRAP) ? "an" : "a",
 		    	defsyms[trap_to_defsym(ttmp->ttyp)].explanation);
+#else
+		    You("%sの真上を通過した．",
+		    	jtrns_obj('^', defsyms[trap_to_defsym(ttmp->ttyp)].explanation));
+#endif
     	}
     }
     if (--*range < 0)		/* make sure our range never goes negative */
@@ -734,13 +853,22 @@
      * for diagonal movement, give the player a message and return.
      */
     if(Punished && !carried(uball)) {
+/*JP
 	You_feel("a tug from the iron ball.");
+*/
+	You_feel("鉄球にひっぱられているような気がした．");
 	nomul(0);
 	return;
     } else if (u.utrap) {
+#if 0 /*JP*/
 	You("are anchored by the %s.",
 	    u.utraptype == TT_WEB ? "web" : u.utraptype == TT_LAVA ? "lava" :
 		u.utraptype == TT_INFLOOR ? surface(u.ux,u.uy) : "trap");
+#else
+	You("%sに据えつけられている．",
+	    u.utraptype == TT_WEB ? "くもの巣" : u.utraptype == TT_LAVA ? "溶岩" :
+		u.utraptype == TT_INFLOOR ? surface(u.ux,u.uy) : "罠");
+#endif
 	nomul(0);
 	return;
     }
@@ -754,12 +882,20 @@
     nomul(-range);
     nomovemsg = 0;
     if (verbose)
+/*JP
 	You("%s in the opposite direction.", range > 1 ? "hurtle" : "float");
+*/
+	You("逆方向に飛ばされた．");
     /* if we're in the midst of shooting multiple projectiles, stop */
     if (m_shot.i < m_shot.n) {
 	/* last message before hurtling was "you shoot N arrows" */
+#if 0 /*JP*/
 	You("stop %sing after the first %s.",
 	    m_shot.s ? "shoot" : "throw", m_shot.s ? "shot" : "toss");
+#else
+	You("ひとつ目を%sところで残りを%sのをやめた．",
+	    m_shot.s ? "撃った" : "投げた", m_shot.s ? "撃つ" : "投げる");
+#endif
 	m_shot.n = m_shot.i;	/* make current shot be the last */
     }
     if (In_sokoban(&u.uz))
@@ -857,16 +993,25 @@
 
     if (hitsroof) {
 	if (breaktest(obj)) {
+/*JP
 		pline("%s hits the %s.", Doname2(obj), ceiling(u.ux, u.uy));
+*/
+		pline("%sは%sに命中した．", Doname2(obj), ceiling(u.ux, u.uy));
 		breakmsg(obj, !Blind);
 		breakobj(obj, u.ux, u.uy, TRUE, TRUE);
 		return FALSE;
 	}
 	almost = "";
     } else {
+/*JP
 	almost = " almost";
+*/
+	almost = "もう少しで";
     }
+/*JP
     pline("%s%s hits the %s, then falls back on top of your %s.",
+*/
+    pline("%sは%s%sに命中した，そして%sの上に落ちてきた．",
 	  Doname2(obj), almost, ceiling(u.ux,u.uy), body_part(HEAD));
 
     /* object now hits you */
@@ -893,10 +1038,16 @@
 		goto petrify;
 	case CREAM_PIE:
 	case BLINDING_VENOM:
+/*JP
 		pline("You've got it all over your %s!", body_part(FACE));
+*/
+		pline("それは%sをべっとりと覆った！", body_part(FACE));
 		if (blindinc) {
 		    if (otyp == BLINDING_VENOM && !Blind)
+/*JP
 			pline("It blinds you!");
+*/
+			pline("目が見えなくなった！");
 		    u.ucreamed += blindinc;
 		    make_blinded(Blinded + (long)blindinc, FALSE);
 		    if (!Blind) Your(vision_clears);
@@ -931,24 +1082,41 @@
 	if (uarmh) {
 	    if (less_damage && dmg < (Upolyd ? u.mh : u.uhp)) {
 		if (!artimsg)
+/*JP
 		    pline("Fortunately, you are wearing a hard helmet.");
+*/
+		    pline("幸運にも，あなたは固い兜を身につけていた．");
 	    } else if (flags.verbose &&
 		    !(obj->otyp == CORPSE && touch_petrifies(&mons[obj->corpsenm])))
+/*JP
 		Your("%s does not protect you.", xname(uarmh));
+*/
+		Your("%sでは防ぎきれなかった．", xname(uarmh));
 	} else if (obj->otyp == CORPSE && touch_petrifies(&mons[obj->corpsenm])) {
 	    if (!Stone_resistance &&
 		    !(poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))) {
  petrify:
 		killer_format = KILLED_BY;
+#if 0 /*JP*/
 		killer = "elementary physics";	/* "what goes up..." */
+#else
+		killer = "初等物理により";	/* "what goes up..." */
+#endif
+/*JP
 		You("turn to stone.");
+*/
+		You("石になった．");
 		if (obj) dropy(obj);	/* bypass most of hitfloor() */
 		done(STONING);
 		return obj ? TRUE : FALSE;
 	    }
 	}
 	hitfloor(obj);
+#if 0 /*JP*/
 	losehp(dmg, "falling object", KILLED_BY_AN);
+#else
+	losehp(dmg, "落下物で", KILLED_BY_AN);
+#endif
     }
     return TRUE;
 }
@@ -1010,13 +1178,22 @@
 	if ((obj->cursed || obj->greased) && (u.dx || u.dy) && !rn2(7)) {
 	    boolean slipok = TRUE;
 	    if (ammo_and_launcher(obj, launcher))
+#if 0 /*JP*/
 		pline("%s!", Tobjnam(obj, "misfire"));
+#else
+		pline("%sははずれた！", xname(obj));
+#endif
 	    else {
 		/* only slip if it's greased or meant to be thrown */
 		if (obj->greased || throwing_weapon(obj))
 		    /* BUG: this message is grammatically incorrect if obj has
 		       a plural name; greased gloves or boots for instance. */
+#if 0 /*JP*/
 		    pline("%s as you throw it!", Tobjnam(obj, "slip"));
+#else
+		    pline("%sを投げようとしたが，ずり落ちてしまった！",
+		    	  xname(obj));
+#endif
 		else slipok = FALSE;
 	    }
 	    if (slipok) {
@@ -1033,7 +1210,10 @@
 	     : (u.uhp < 10 && u.uhp != u.uhpmax)) &&
 	    obj->owt > (unsigned)((Upolyd ? u.mh : u.uhp) * 2) &&
 	    !Is_airlevel(&u.uz)) {
+/*JP
 	    You("have so little stamina, %s drops from your grasp.",
+*/
+	    You("握力がなくなっていたので，%sを握りそこねて落とした．",
 		the(xname(obj)));
 	    exercise(A_CON, FALSE);
 	    u.dx = u.dy = 0;
@@ -1049,8 +1229,13 @@
 	} else if(u.dz) {
 	    if (u.dz < 0 && Role_if(PM_VALKYRIE) &&
 		    obj->oartifact == ART_MJOLLNIR && !impaired) {
+#if 0 /*JP*/
 		pline("%s the %s and returns to your hand!",
 		      Tobjnam(obj, "hit"), ceiling(u.ux,u.uy));
+#else
+		pline("%sは%sに命中しあなたの手に戻ってきた！",
+		      xname(obj), ceiling(u.ux,u.uy));
+#endif
 		obj = addinv(obj);
 		(void) encumber_msg();
 		setuwep(obj, TRUE);
@@ -1073,9 +1258,15 @@
 	    else if (is_bullet(obj) && ammo_and_launcher(obj, launcher)) {
 		if (!Is_airlevel(&u.uz) && !Is_waterlevel(&u.uz) && !Underwater
 			&& (objects[obj->otyp].oc_dir & EXPLOSION)) {
+#if 0 /*JP*/
 		    pline("%s hit%s the %s and explodes in a ball of fire!",
 			    Doname2(obj), (obj->quan == 1L) ? "s" : "",
 			    u.dz < 0 ? ceiling(u.ux, u.uy) : surface(u.ux, u.uy));
+#else
+		    pline("%sは%sにあたり，火の玉を上げて爆発した！",
+			    Doname2(obj),
+			    u.dz < 0 ? ceiling(u.ux, u.uy) : surface(u.ux, u.uy));
+#endif
 		    explode(u.ux, u.uy, ZT_SPELL(ZT_FIRE), d(3, 8),
 			    WEAPON_CLASS, EXPL_FIERY);
 		}
@@ -1201,8 +1392,13 @@
 	} else if (ammo_and_launcher(obj, launcher) &&
 		(objects[obj->otyp].oc_dir & EXPLOSION)) {
 	    if (cansee(bhitpos.x,bhitpos.y)) 
+#if 0 /*JP*/
 		pline("%s explodes in a ball of fire!", Doname2(obj));
 	    else You_hear("an explosion");
+#else
+		pline("%sは火の玉を上げて爆発した！", Doname2(obj));
+	    else You("爆発音を聞いた．");
+#endif
 	    explode(bhitpos.x, bhitpos.y, ZT_SPELL(ZT_FIRE),
 		    d(3,8), WEAPON_CLASS, EXPL_FIERY);
 	}
@@ -1227,7 +1423,10 @@
 		    sho_obj_return_to_u(obj);	    /* display its flight */
 
 		    if (!impaired && rn2(100)) {
+/*JP
 			pline("%s to your hand!", Tobjnam(obj, "return"));
+*/
+			pline("%sはあなたの手に戻ってきた！", xname(obj));
 			obj = addinv(obj);
 			(void) encumber_msg();
 			setuwep(obj, TRUE);
@@ -1237,17 +1436,32 @@
 		    } else {
 			int dmg = rn2(2);
 			if (!dmg) {
+#if 0 /*JP*/
 			    pline(Blind ? "%s lands %s your %s." :
 					"%s back to you, landing %s your %s.",
 				  Blind ? Something : Tobjnam(obj, "return"),
 				  Levitation ? "beneath" : "at",
 				  makeplural(body_part(FOOT)));
+#else
+			    pline("%sは%sあなたの%sの%sに落ちた．",
+				  xname(obj),
+				  Blind ? "" : "戻ってきて，",
+				  body_part(FOOT),
+				  Levitation ? "下" : "そば");
+#endif
 			} else {
 			    dmg += rnd(3);
+#if 0 /*JP*/
 			    pline(Blind ? "%s your %s!" :
 					"%s back toward you, hitting your %s!",
 				  Tobjnam(obj, Blind ? "hit" : "fly"),
 				  body_part(ARM));
+#else
+			    pline("%sは%sあなたの%sに命中した！",
+				  xname(obj),
+				  Blind ? "" : "戻ってきて，",
+				  body_part(ARM));
+#endif
 			    (void) artifact_hit((struct monst *)0,
 						&youmonst, obj, &dmg, 0);
 			    losehp(dmg, xname(obj),
@@ -1273,12 +1487,20 @@
 		    breakobj(obj, bhitpos.x, bhitpos.y, TRUE, TRUE);
 		    return;
 		}
+/*JP
 		if(flooreffects(obj,bhitpos.x,bhitpos.y,"fall")) return;
+*/
+		if(flooreffects(obj,bhitpos.x,bhitpos.y,"落ちる")) return;
 		obj_no_longer_held(obj);
 		if (mon && mon->isshk && is_pick(obj)) {
 		    if (cansee(bhitpos.x, bhitpos.y))
+#if 0 /*JP*/
 			pline("%s snatches up %s.",
 			      Monnam(mon), the(xname(obj)));
+#else
+			pline("%sは%sを奪いとった．",
+			      Monnam(mon), the(xname(obj)));
+#endif
 		    if(*u.ushops)
 			check_shop_obj(obj, bhitpos.x, bhitpos.y, FALSE);
 		    (void) mpickobj(mon, obj);	/* may merge and free obj */
@@ -1362,7 +1584,10 @@
        an arrow just landing short of any target (no message in that case),
        so will realize that there is a valid target here anyway. */
     if (!canseemon(mon) || (mon->m_ap_type && mon->m_ap_type != M_AP_MONSTER))
+/*JP
 	pline("%s %s.", The(missile), otense(obj, "miss"));
+*/
+	pline("%sははずれた．", The(missile));
     else
 	miss(missile, mon);
     if (!rn2(3)) wakeup(mon);
@@ -1452,10 +1677,16 @@
 	/* sleeping unicorns don't catch gems */
 	if (obj->oclass == GEM_CLASS && is_unicorn(mon->data) && !mon->msleeping) {
 	    if (mon->mtame) {
+/*JP
 		pline("%s catches and drops %s.", Monnam(mon), the(xname(obj)));
+*/
+		pline("%sは%sをくわえて置いた．", Monnam(mon), the(xname(obj)));
 		return 0;
 	    } else {
+/*JP
 		pline("%s catches %s.", Monnam(mon), the(xname(obj)));
+*/
+		pline("%sは%sをくわえた．", Monnam(mon), the(xname(obj)));
 		return gem_accept(mon, obj);
 	    }
 	}
@@ -1468,13 +1699,21 @@
 	    mon->mstrategy &= ~STRAT_WAITMASK;
 
 	    if (mon->mcanmove) {
+/*JP
 		pline("%s catches %s.", Monnam(mon), the(xname(obj)));
+*/
+		pline("%sは%sを掴んだ．", Monnam(mon), the(xname(obj)));
 		if (mon->mpeaceful) {
 		    boolean next2u = monnear(mon, u.ux, u.uy);
 
 		    finish_quest(obj);	/* acknowledge quest completion */
+#if 0 /*JP*/
 		    pline("%s %s %s back to you.", Monnam(mon),
 			  (next2u ? "hands" : "tosses"), the(xname(obj)));
+#else
+		    pline("%sは%sをあなたに返した．", Monnam(mon),
+			  the(xname(obj)));
+#endif
 		    if (!next2u) sho_obj_return_to_u(obj);
 		    obj = addinv(obj);	/* back into your inventory */
 		    (void) encumber_msg();
@@ -1539,8 +1778,13 @@
 		if (ammo_and_launcher(obj, launcher) &&
 			(launcher->oartifact == ART_HELLFIRE)) {
 		    if (cansee(bhitpos.x,bhitpos.y)) 
+#if 0 /*JP*/
 			pline("%s explodes in a ball of fire!", Doname2(obj));
 		    else You_hear("an explosion");
+#else
+			pline("%sは火の玉を上げて爆発した！", Doname2(obj));
+		    else You("爆発音を聞いた．");
+#endif
 		    explode(bhitpos.x, bhitpos.y, ZT_SPELL(ZT_FIRE),
 			    d(2,6), WEAPON_CLASS, EXPL_FIERY);
 		}
@@ -1587,9 +1831,15 @@
 			} else if (ammo_and_launcher(obj, launcher) &&
 				(objects[obj->otyp].oc_dir & EXPLOSION)) {
 			    if (cansee(bhitpos.x,bhitpos.y)) 
+#if 0 /*JP*/
 				pline("%s explodes in a ball of fire!",
 					Doname2(obj));
 			    else You_hear("an explosion");
+#else
+				pline("%sは火の玉を上げて爆発した！",
+					Doname2(obj));
+			    else You("爆発音を聞いた．");
+#endif
 			    explode(bhitpos.x, bhitpos.y, ZT_SPELL(ZT_FIRE),
 				    d(3,8), WEAPON_CLASS, EXPL_FIERY);
 			    obfree(obj, (struct obj *)0);
@@ -1661,9 +1911,15 @@
 			}
 	    	}
 	    }
+#if 0 /*JP*/
 	    pline("%s into %s %s.",
 		Tobjnam(obj, "vanish"), s_suffix(mon_nam(mon)),
 		is_animal(u.ustuck->data) ? "entrails" : "currents");
+#else
+	    pline("%sは%sの%sへ消えた．",
+		  xname(obj), mon_nam(mon),
+		  is_animal(u.ustuck->data) ? "内臓の中" : "流れ");
+#endif
 	} else {
 	    tmiss(obj, mon);
 	}
@@ -1679,13 +1935,24 @@
 	boolean is_buddy = sgn(mon->data->maligntyp) == sgn(u.ualign.type);
 	boolean is_gem = objects[obj->otyp].oc_material == GEMSTONE;
 	int ret = 0;
+#if 0 /*JP*/
 	static NEARDATA const char nogood[] = " is not interested in your junk.";
 	static NEARDATA const char acceptgift[] = " accepts your gift.";
 	static NEARDATA const char maybeluck[] = " hesitatingly";
 	static NEARDATA const char noluck[] = " graciously";
 	static NEARDATA const char addluck[] = " gratefully";
+#else
+	static NEARDATA const char nogood[] = "あなたのガラクタに興味を示さない．";
+	static NEARDATA const char acceptgift[] = "あなたの贈り物を受けとった．";
+	static NEARDATA const char maybeluck[] = "ためらいながら";
+	static NEARDATA const char noluck[] = "丁重に";
+	static NEARDATA const char addluck[] = "喜んで";
+#endif
 
 	Strcpy(buf,Monnam(mon));
+#if 1 /*JP*/
+	Strcat(buf,"は");
+#endif
 	mon->mpeaceful = 1;
 	mon->mavenge = 0;
 
@@ -1845,11 +2112,19 @@
 				 * like vampire or (presumed) human blood
 				 * on their altars.
 				 */
+#if 0 /*JP*/
 				pline("You'll regret this infamous offense!");
+#else
+				You("破廉恥な攻撃を後悔することになるだろう！");
+#endif
 				exercise(A_WIS, FALSE);
 			    }
 			    /* curse the lawful/neutral altar */
+#if 0 /*JP*/
 			    pline_The("altar is stained with blood.");
+#else
+			    pline("祭壇は血で汚された．");
+#endif
 			    if (!Is_astralevel(&u.uz))
 				levl[x][y].altarmask = AM_CHAOTIC;
 			    angry_priest();
@@ -1858,13 +2133,20 @@
 				if (obj->otyp != POT_WATER) {
 					if (!breathless(youmonst.data))
 			    		     /* [what about "familiar odor" when known?] */
+/*JP
 					    You("smell a peculiar odor...");
+*/
+					    You("薬っぽい匂いがした．．．");
 					else {
+#if 0 /*JP*/
 					    int numeyes = eyecount(youmonst.data);
 					    Your("%s water%s.",
 						 (numeyes == 1) ? body_part(EYE) :
 							makeplural(body_part(EYE)),
 						 (numeyes == 1) ? "s" : "");
+#else
+					    You("涙%sになった．", body_part(EYE));
+#endif
 					}
 				}
 				potionbreathe(obj);
@@ -1941,7 +2223,13 @@
 {
 	const char *to_pieces;
 
+#if 0 /*JP*/
 	to_pieces = "";
+#else
+	/* "shatter" → "こなごなになった"
+	   "shatter into a thousand pieces" → "くだけてばらばらになった" */
+	to_pieces = "こなごな";
+#endif
 	switch (obj->oclass == POTION_CLASS ? POT_WATER : obj->otyp) {
 		default: /* glass or crystal wand */
 		    if (obj->oclass != WAND_CLASS)
@@ -1953,25 +2241,44 @@
 #ifdef TOURIST
 		case EXPENSIVE_CAMERA:
 #endif
+/*JP
 			to_pieces = " into a thousand pieces";
+*/
+			to_pieces = "くだけてばらばら";
 			/*FALLTHRU*/
 		case POT_WATER:		/* really, all potions */
 			if (!in_view)
+/*JP
 			    You_hear("%s shatter!", something);
+*/
+			    You_hear("%sが壊れる音を聞いた！", something);
 			else
+#if 0 /*JP*/
 			    pline("%s shatter%s%s!", Doname2(obj),
 				(obj->quan==1) ? "s" : "", to_pieces);
+#else
+			    pline("%sは%sになった！", Doname2(obj), to_pieces);
+#endif
 			break;
 		case EGG:
 		case MELON:
+/*JP
 			pline("Splat!");
+*/
+			pline("ビチャ！");
 			break;
 		case CREAM_PIE:
+/*JP
 			if (in_view) pline("What a mess!");
+*/
+			if (in_view) pline("こりゃひどい！");
 			break;
 		case ACID_VENOM:
 		case BLINDING_VENOM:
+/*JP
 			pline("Splash!");
+*/
+			pline("ビチャ！");
 			break;
 	}
 }
@@ -1992,7 +2299,10 @@
 		flags.botl = 1;
 		dealloc_obj(obj);
 #endif
+/*JP
 		You("cannot throw gold at yourself.");
+*/
+		pline("自分に金貨を投げることはできない．");
 		return(0);
 	}
 #ifdef GOLDOBJ
@@ -2000,13 +2310,25 @@
 #endif
 	if(u.uswallow) {
 		pline(is_animal(u.ustuck->data) ?
+#if 0 /*JP*/
 			"%s in the %s's entrails." : "%s into %s.",
+#else
+			"%sは%sの腹の中へ消えていった．" : "%sは%sの中へ消えていった．",
+#endif
 #ifndef GOLDOBJ
+#if 0 /*JP*/
 			"The gold disappears", mon_nam(u.ustuck));
+#else
+			"金貨", mon_nam(u.ustuck));
+#endif
 		u.ustuck->mgold += zorks;
 		dealloc_obj(obj);
 #else
+#if 0 /*JP*/
 			"The money disappears", mon_nam(u.ustuck));
+#else
+			"お金", mon_nam(u.ustuck));
+#endif
 		add_to_minv(u.ustuck, obj);
 #endif
 		return(1);
@@ -2015,10 +2337,16 @@
 	if(u.dz) {
 		if (u.dz < 0 && !Is_airlevel(&u.uz) &&
 					!Underwater && !Is_waterlevel(&u.uz)) {
+/*JP
 	pline_The("gold hits the %s, then falls back on top of your %s.",
+*/
+	pline("金貨は%sに命中し，あなたの%sの真上に落ちてきた．",
 		    ceiling(u.ux,u.uy), body_part(HEAD));
 		    /* some self damage? */
+/*JP
 		    if(uarmh) pline("Fortunately, you are wearing a helmet!");
+*/
+		    if(uarmh) pline("幸運なことに，あなたは兜を身につけている！");
 		}
 		bhitpos.x = u.ux;
 		bhitpos.y = u.uy;
@@ -2049,9 +2377,15 @@
 		}
 	}
 
+/*JP
 	if(flooreffects(obj,bhitpos.x,bhitpos.y,"fall")) return(1);
+*/
+	if(flooreffects(obj,bhitpos.x,bhitpos.y,"落ちる")) return(1);
 	if(u.dz > 0)
+/*JP
 		pline_The("gold hits the %s.", surface(bhitpos.x,bhitpos.y));
+*/
+		pline("金貨は%sに命中した．", surface(bhitpos.x,bhitpos.y));
 	place_object(obj,bhitpos.x,bhitpos.y);
 	if(*u.ushops) sellobj(obj, bhitpos.x, bhitpos.y);
 	stackobj(obj);
diff -aurN slashem-0.0.7E6F2/src/drawing.c jslashem-0.0.7E6F2-J0.0.8/src/drawing.c
--- slashem-0.0.7E6F2/src/drawing.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/drawing.c	2004-06-27 16:52:54.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) NetHack Development Team 1992.			  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "tcap.h"
 
@@ -197,6 +204,7 @@
 };
 
 const struct symdef def_warnsyms[WARNCOUNT] = {
+#if 0 /*JP*/
 	{'0', "unknown creature causing you worry", C(CLR_WHITE)},  	/* white warning  */
 	{'1', "unknown creature causing you concern", C(CLR_RED)},	/* pink warning   */
 	{'2', "unknown creature causing you anxiety", C(CLR_RED)},	/* red warning    */
@@ -205,6 +213,15 @@
 						C(CLR_MAGENTA)},        /* purple warning */
 	{'5', "unknown creature causing you dread",
 						C(CLR_BRIGHT_MAGENTA)}	/* black warning  */
+#else
+	{'0', "あなたが気にしている謎の怪物", C(CLR_WHITE)},  	/* white warning  */
+	{'1', "あなたが心配している謎の怪物", C(CLR_RED)},	/* pink warning   */
+	{'2', "あなたが懸念している謎の怪物", C(CLR_RED)},	/* red warning    */
+	{'3', "あなたが気をもんでいる謎の怪物", C(CLR_RED)},	/* ruby warning   */
+	{'4', "あなたが恐れている謎の怪物", C(CLR_MAGENTA)},        /* purple warning */
+	{'5', "あなたが非常に恐れている謎の怪物",
+						C(CLR_BRIGHT_MAGENTA)}	/* black warning  */
+#endif
 };
 
 /*
@@ -325,6 +342,7 @@
 void NDECL((*ibmgraphics_mode_callback)) = 0;	/* set in tty_start_screen() */
 #endif /* PC9800 */
 
+#if 0/*JP*/
 static uchar ibm_graphics[MAXPCHARS] = {
 /* 0*/	g_FILLER(S_stone),
 	0xb3,	/* S_vwall:	meta-3, vertical rule */
@@ -420,6 +438,7 @@
 	g_FILLER(S_explode8),
 	g_FILLER(S_explode9),
 };
+#endif
 #endif  /* ASCIIGRAPH */
 
 #ifdef TERMLIB
@@ -677,6 +696,7 @@
 	    if (ascgraphics_mode_callback) (*ascgraphics_mode_callback)();
 #endif
 	    break;
+#if 0 /*JP*/
 #ifdef ASCIIGRAPH
 	case IBM_GRAPHICS:
 /*
@@ -694,6 +714,7 @@
 #endif
 	    break;
 #endif /* ASCIIGRAPH */
+#endif /*JP*/
 #ifdef TERMLIB
 	case DEC_GRAPHICS:
 /*
@@ -745,6 +766,7 @@
 	VENOM_SYM
 };
 
+#if 0 /*JP*/
 # ifdef ASCIIGRAPH
 /* Rogue level graphics.  Under IBM graphics mode, use the symbols that were
  * used for Rogue on the IBM PC.  Unfortunately, this can't be completely
@@ -788,6 +810,7 @@
 	VENOM_SYM
 };
 # endif /* ASCIIGRAPH */
+#endif /*JP*/
 
 void
 assign_rogue_graphics(is_rlevel)
@@ -808,6 +831,7 @@
 	/* Use a loop: char != uchar on some machines. */
 	for (i = 0; i < MAXMCLASSES; i++)
 	    monsyms[i] = def_monsyms[i];
+#if 0 /*JP*/
 # if defined(ASCIIGRAPH) && !defined(MSWIN_GRAPHICS)
 	if (iflags.IBMgraphics
 #  if defined(USE_TILES) && defined(MSDOS)
@@ -816,6 +840,7 @@
 		)
 	    monsyms[S_HUMAN] = 0x01; /* smiley face */
 # endif
+#endif /*JP*/
 	for (i = 0; i < MAXPCHARS; i++)
 	    showsyms[i] = defsyms[i].sym;
 
@@ -825,6 +850,7 @@
  * all of this info and to simply initialize it via a for() loop like r_oc_syms.
  */
 
+#if 0 /*JP*/
 # ifdef ASCIIGRAPH
 	if (!iflags.IBMgraphics
 #  if defined(USE_TILES) && defined(MSDOS)
@@ -832,8 +858,10 @@
 #  endif
 				) {
 # endif
+#endif /*JP*/
 	    showsyms[S_vodoor]  = showsyms[S_hodoor]  = showsyms[S_ndoor] = '+';
 	    showsyms[S_upstair] = showsyms[S_dnstair] = '%';
+#if 0 /*JP*/
 # ifdef ASCIIGRAPH
 	} else {
 	    /* a la EPYX Rogue */
@@ -882,8 +910,10 @@
 #endif
 	}
 #endif /* ASCIIGRAPH */
+#endif /* JP */
 
 	for (i = 0; i < MAXOCLASSES; i++) {
+#if 0 /* JP */
 #if defined(ASCIIGRAPH) && !defined(LINUX)
 	    if (iflags.IBMgraphics
 # if defined(USE_TILES) && defined(MSDOS)
@@ -893,6 +923,7 @@
 		oc_syms[i] = IBM_r_oc_syms[i];
 	    else
 #endif /* ASCIIGRAPH && !LINUX */
+#endif /* JP */
 		oc_syms[i] = r_oc_syms[i];
 	}
 #if defined(MSDOS) && defined(USE_TILES)
diff -aurN slashem-0.0.7E6F2/src/dungeon.c jslashem-0.0.7E6F2-J0.0.8/src/dungeon.c
--- slashem-0.0.7E6F2/src/dungeon.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/dungeon.c	2004-06-10 08:55:14.000000000 +0900
@@ -6,6 +6,11 @@
 #include "dgn_file.h"
 #include "dlb.h"
 
+#if defined(_MSC_VER) && !defined(WIN32)
+#include "../japanese/emalloc.h"
+#define alloc(s) emalloc(s)
+#endif
+
 #ifdef OVL1
 
 #define DUNGEON_AREA    FILE_AREA_UNSHARE
diff -aurN slashem-0.0.7E6F2/src/eat.c jslashem-0.0.7E6F2-J0.0.8/src/eat.c
--- slashem-0.0.7E6F2/src/eat.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/eat.c	2004-08-05 09:56:16.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 /* #define DEBUG */	/* uncomment to enable new eat code debugging */
 
@@ -81,6 +89,7 @@
 STATIC_OVL boolean force_save_hs = FALSE;
 
 const char *hu_stat[] = {
+#if 0 /*JP*/
 	"Satiated",
 	"        ",
 	"Hungry  ",
@@ -88,6 +97,15 @@
 	"Fainting",
 	"Fainted ",
 	"Starved "
+#else
+	"満腹    ",
+	"        ",
+	"ぺこぺこ",
+	"衰弱    ",
+	"ふらふら",
+	"卒倒    ",
+	"餓死    "
+#endif
 };
 
 #endif /* OVLB */
@@ -151,6 +169,7 @@
 	u.uhs = NOT_HUNGRY;
 }
 
+#if 0 /*JP*/
 static const struct { const char *txt; int nut; } tintxts[] = {
 	{"deep fried",	 60},
 	{"pickled",	 40},
@@ -181,6 +200,38 @@
 	{"broiled",      80},
 	{"smoked",       50},
 	{"", 0}
+#else
+static const struct { const char *txt; int nut; char after;} tintxts[] = {
+	{"の揚げ物",	 60, 0x01},
+	{"の漬物",	 40, 0x01},
+	{"のスープ",	 20, 0x01},
+	{"のピューレ",	500, 0x01},
+#define ROTTEN_TIN 4
+	{"腐った",	-50, 0x00},
+#define HOMEMADE_TIN 5
+	{"自家製の",	 50, 0x00},
+	{"のかき揚げ",   80, 0x01},
+	{"の砂糖漬け",  100, 0x01},
+	{"ゆでた",       50, 0x00},
+	{"乾燥",         55, 0x00},
+	{"四川風",       70, 0x00},
+#define FRENCH_FRIED_TIN 11
+	{"フレンチフライの",   40, 0x00},
+	{"のソテー",     95, 0x01},
+	{"のテリヤキ",   80, 0x01},
+	{"の燻製",       50, 0x01},
+	/* [Tom] added a few new styles */        
+	{"のかき揚げ",   80, 0x01},
+	{"の砂糖漬け",  100, 0x01},
+	{"ゆでた",       50, 0x00},
+	{"の干物",       55, 0x01},
+	{"の煮物",       70, 0x01},
+	{"フレンチフライの",   40, 0x00},
+	{"のソテー",     95, 0x01},
+	{"のテリヤキ",   80, 0x01},
+	{"の燻製",       50, 0x01},
+	{"", 0, 0x00}
+#endif
 };
 #define TTSZ	SIZE(tintxts)
 
@@ -232,6 +283,7 @@
 boolean the_pfx;
 {
 	const char *result;
+#if 0 /*JP*/
 	int mnum = food->corpsenm;
 
 	if (food->otyp == CORPSE && (mons[mnum].geno & G_UNIQ) && !Hallucination) {
@@ -243,10 +295,13 @@
 		    s_suffix(mons[mnum].mname));
 	    result = bufp;
 	} else {
+#endif /*JP*/
 	    /* the ordinary case */
 	    result = singular(food, xname);
 	    if (the_pfx) result = the(result);
+#if 0 /*JP*/
 	}
+#endif
 	return result;
 }
 
@@ -266,7 +321,11 @@
 			return;
 	} else if (Role_if(PM_KNIGHT) && u.ualign.type == A_LAWFUL) {
 			adjalign(-1);		/* gluttony is unchivalrous */
+#if 0 /*JP*/
 		You("feel like a glutton!");        
+#else
+		You("大食漢のような気がした！");
+#endif
 	}
 
 	exercise(A_CON, FALSE);
@@ -275,12 +334,22 @@
 		/* choking by eating AoS doesn't involve stuffing yourself */
 		/* ALI - nor does other non-food nutrition (eg., life-blood) */
 		if (!food || food->otyp == AMULET_OF_STRANGULATION) {
+#if 0 /*JP*/
 			nomovemsg = "You recover your composure.";
 			You("choke over it.");
+#else
+			nomovemsg = "冷静を取り戻した．";
+			You("首を絞められた．");
+#endif
 			nomul(-2);
 			return;
 		}
+#if 0 /*JP*/
 		You("stuff yourself and then vomit voluminously.");
+#else
+		pline("がつがつと口に詰め込んだが，"
+		      "ドバっと吐き出してしまった．");
+#endif
 		morehungry(1000);	/* you just got *very* sick! */
 		nomovemsg = 0;
 		vomit();
@@ -291,9 +360,15 @@
 		 * high score list & tombstone.  So plan accordingly.
 		 */
 		if(food) {
+/*JP
 			You("choke over your %s.", foodword(food));
+*/
+			You("%sを喉に詰まらせてしまった．", foodword(food));
 			if (food->oclass == COIN_CLASS) {
+/*JP
 				killer = "a very rich meal";
+*/
+				killer = "とても高価な料理で";
 			} else {
 				killer = food_xname(food, FALSE);
 				if (food->otyp == CORPSE &&
@@ -304,10 +379,19 @@
 				}
 			}
 		} else {
+/*JP
 			You("choke over it.");
+*/
+			pline("喉に詰まらせてしまった．");
+/*JP
 			killer = "quick snack";
+*/
+			killer = "早食いで";
 		}
+/*JP
 		You("die...");
+*/
+		pline("あなたは死にました．．．");
 		done(CHOKING);
 	}
 }
@@ -364,7 +448,10 @@
 		 !otmp->no_charge)
 		 || otmp->unpaid)) {
 		/* create a dummy duplicate to put on bill */
+/*JP
 		verbalize("You bit it, you bought it!");
+*/
+		verbalize("食べたのなら買ってもらうよ！");
 		bill_dummy_object(otmp);
 	    }
 	    otmp->oeaten = (otmp->otyp == CORPSE ?
@@ -474,8 +561,13 @@
 		if (message) pline(nomovemsg);
 		nomovemsg = 0;
 	} else if (message)
+#if 0 /*JP*/
 		You("finish %s %s.", victual.piece->odrained ? "draining" :
 		  "eating", food_xname(victual.piece, TRUE));
+#else
+		You("%sを%s終えた．", food_xname(victual.piece, TRUE),
+		  victual.piece->odrained ? "吸い" : "食べ");
+#endif
 
 	if(victual.piece->otyp == CORPSE) {
 		if (!victual.piece->odrained || Race_if(PM_VAMPIRE) && !rn2(5))
@@ -500,18 +592,32 @@
 	if (your_race(&mons[pm])) {
 	    if (!CANNIBAL_ALLOWED()) {
 		if (allowmsg) {
+#if 0 /*JP*/
 		    if (Upolyd)
 			You("have a bad feeling deep inside.");
 		    You("cannibal!  You will regret this!");
+#else
+		    if (Upolyd)
+			You("嫌悪感におそわれた．");
+		    pline("共喰いだ！後悔するぞ！");
+#endif
 		}
 		HAggravate_monster |= FROMOUTSIDE;
 		change_luck(-rn1(4,2));		/* -5..-2 */
 	    } else if (Role_if(PM_CAVEMAN)) {
 		adjalign(sgn(u.ualign.type));
+#if 0 /*JP*/
 		You("honour the dead.");
+#else
+		You("死に敬意を表した．");
+#endif
 	    } else {
 		adjalign(-sgn(u.ualign.type));
+#if 0 /*JP*/
 		You_feel("evil and fiendish!");
+#else
+		You("邪悪で残酷な気分になった！");
+#endif
 	    }
 	    return TRUE;
 	}
@@ -526,10 +632,16 @@
 	if (touch_petrifies(&mons[pm]) || pm == PM_MEDUSA) {
 	    if (!Stone_resistance &&
 		!(poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))) {
+/*JP
 		Sprintf(killer_buf, "tasting %s meat", mons[pm].mname);
+*/
+		Sprintf(killer_buf, "%sの肉を口にして", jtrns_mon(mons[pm].mname));
 		killer_format = KILLED_BY;
 		killer = killer_buf;
+/*JP
 		You("turn to stone.");
+*/
+		You("石になった．");
 		done(STONING);
 		if (victual.piece)
 		    victual.eating = FALSE;
@@ -545,9 +657,16 @@
 	    case PM_HOUSECAT:
 	    case PM_LARGE_CAT:
 		if (!CANNIBAL_ALLOWED()) {
+#if 0 /*JP*/
 		    You_feel("that %s the %s%s was a bad idea.",
 		      victual.eating ? "eating" : "biting",
 		      occupation == opentin ? "tinned " : "", mons[pm].mname);
+#else
+		    pline("%s%s%sのはよくない気がした．",
+			jtrns_mon(mons[pm].mname),
+			occupation == opentin ? "の缶詰" : "",
+			victual.eating ? "を食べる" : "を口にする") ;
+#endif
 		    HAggravate_monster |= FROMOUTSIDE;
 		}
 		break;
@@ -558,11 +677,22 @@
 	    case PM_PESTILENCE:
 	    case PM_FAMINE:
 		{ char buf[BUFSZ];
+/*JP
 		    pline("Eating that is instantly fatal.");
+*/
+		    pline("食べたらすぐに死んでしまった．");
+#if 0 /*JP*/
 		    Sprintf(buf, "unwisely ate the body of %s",
 			    mons[pm].mname);
+#else
+		    Sprintf(buf, "愚かにも%sを食べて",
+			    jtrns_mon(mons[pm].mname));
+#endif
 		    killer = buf;
+/*JP
 		    killer_format = NO_KILLER_PREFIX;
+*/
+		    killer_format = KILLED_BY;
 		    done(DIED);
 		    /* It so happens that since we know these monsters */
 		    /* cannot appear in tins, victual.piece will always */
@@ -574,7 +704,10 @@
 	    case PM_GREEN_SLIME:
 		if (!Slimed && !Unchanging && !flaming(youmonst.data) &&
 			youmonst.data != &mons[PM_GREEN_SLIME]) {
+/*JP
 		    You("don't feel very well.");
+*/
+	    	    You("すごく気分が悪い．");
 		    Slimed = 10L;
 		    flags.botl = 1;
 		}
@@ -602,7 +735,11 @@
 	case PM_DEATH:
 	case PM_PESTILENCE:
 	case PM_FAMINE:
+#if 0 /*JP*/
 	    pline("Unfortunately, eating any of it is fatal.");
+#else
+	    pline("なんたる不幸！それに噛み付くのは致命的だ．");
+#endif
 	    done_in_by(mon);
 	    return TRUE;		/* lifesaved */
 
@@ -610,7 +747,11 @@
 	    if (!Unchanging && youmonst.data != &mons[PM_FIRE_VORTEX] &&
 			    youmonst.data != &mons[PM_FIRE_ELEMENTAL] &&
 			    youmonst.data != &mons[PM_GREEN_SLIME]) {
+#if 0 /*JP*/
 		You("don't feel very well.");
+#else
+		You("すごく気分が悪い．");
+#endif
 		Slimed = 10L;
 	    }
 	    /* Fall through */
@@ -628,10 +769,18 @@
 	Stoned = 0;
 	delayed_killer = 0;
 	if (Hallucination)
+#if 0 /*JP*/
 	    pline("What a pity - you just ruined a future piece of %sart!",
 		  ACURR(A_CHA) > 15 ? "fine " : "");
+#else
+	    pline("なんてことだ！%s芸術作品になれたかもしれないのに！",
+		  ACURR(A_CHA) > 15 ? "貴重な" : "");
+#endif
 	else
+/*JP
 	    You_feel("limber!");
+*/
+	    You("体が軟らかくなったような気がした！");
 }
 
 /*
@@ -811,8 +960,13 @@
 		debugpline("Trying to give fire resistance");
 #endif
 		if(!(HFire_resistance & FROMOUTSIDE)) {
+#if 0 /*JP*/
 			You(Hallucination ? "be chillin'." :
 			    "feel a momentary chill.");
+#else
+			You(Hallucination ? "「クール宅配便」されているようだ" :
+			    "一瞬寒けがした．");
+#endif
 			HFire_resistance |= FROMOUTSIDE;
 		}
 		break;
@@ -821,7 +975,10 @@
 		debugpline("Trying to give sleep resistance");
 #endif
 		if(!(HSleep_resistance & FROMOUTSIDE)) {
+/*JP
 			You_feel("wide awake.");
+*/
+			You("ぱっちり目がさめた．");
 			HSleep_resistance |= FROMOUTSIDE;
 		}
 		break;
@@ -830,7 +987,10 @@
 		debugpline("Trying to give cold resistance");
 #endif
 		if(!(HCold_resistance & FROMOUTSIDE)) {
+/*JP
 			You_feel("full of hot air.");
+*/
+			You("熱風を全身に感じた．");
 			HCold_resistance |= FROMOUTSIDE;
 		}
 		break;
@@ -840,8 +1000,13 @@
 #endif
 		if(!(HDisint_resistance & FROMOUTSIDE)) {
 			You_feel(Hallucination ?
+#if 0 /*JP*/
 			    "totally together, man." :
 			    "very firm.");
+#else
+			  "世界人類と兄弟になったような気がした．" :
+			  "とても頑丈になったような気がした．");
+#endif
 			HDisint_resistance |= FROMOUTSIDE;
 		}
 		break;
@@ -851,9 +1016,15 @@
 #endif
 		if(!(HShock_resistance & FROMOUTSIDE)) {
 			if (Hallucination)
+/*JP
 				You_feel("grounded in reality.");
+*/
+				You("実はアースされているような気がした．");
 			else
+/*JP
 				Your("health currently feels amplified!");
+*/
+				pline("健康が増幅されたような気がした！");
 			HShock_resistance |= FROMOUTSIDE;
 		}
 		break;
@@ -863,7 +1034,10 @@
 #endif
 		if(!(HPoison_resistance & FROMOUTSIDE)) {
 			You_feel(Poison_resistance ?
+/*JP
 				 "especially healthy." : "healthy.");
+*/
+				 "特に健康になった気がした．" : "健康になった気がした．");
 			HPoison_resistance |= FROMOUTSIDE;
 		}
 		break;
@@ -872,8 +1046,13 @@
 		debugpline("Trying to give teleport");
 #endif
 		if(!(HTeleportation & FROMOUTSIDE)) {
+#if 0 /*JP*/
 			You_feel(Hallucination ? "diffuse." :
 			    "very jumpy.");
+#else
+			pline(Hallucination ? "体が飛び散ったような気がした．" :
+			    "跳躍力が高まったような気がした．");
+#endif
 			HTeleportation |= FROMOUTSIDE;
 		}
 		break;
@@ -883,8 +1062,13 @@
 #endif
 		if(!(HTeleport_control & FROMOUTSIDE)) {
 			You_feel(Hallucination ?
+#if 0 /*JP*/
 			    "centered in your personal space." :
 			    "in control of yourself.");
+#else
+			    "自己中心的になったような気がした．" :
+			    "自分自身を制御できるような気がした．");
+#endif
 			HTeleport_control |= FROMOUTSIDE;
 		}
 		break;
@@ -894,8 +1078,13 @@
 #endif
 		if(!(HTelepat & FROMOUTSIDE)) {
 			You_feel(Hallucination ?
+#if 0 /*JP*/
 			    "in touch with the cosmos." :
 			    "a strange mental acuity.");
+#else
+			    "宇宙の神秘に触れたような気がした．" :
+			    "奇妙な精神的鋭さを感じた．");
+#endif
 			HTelepat |= FROMOUTSIDE;
 			/* If blind, make sure monsters show up. */
 			if (Blind) see_monsters();
@@ -931,7 +1120,10 @@
 			u.uen = u.uenmax;
 		    }
 		    if (old_uen != u.uen) {
+/*JP
 			    You_feel("a mild buzz.");
+*/
+			    You("すこしふらふらした．");
 			    flags.botl = 1;
 		    }
 		}
@@ -939,11 +1131,20 @@
 	    case PM_WRAITH:
 		switch(rnd(10)) {                
 		case 1:
+#if 0 /*JP*/
 		    You("feel that was a bad idea.");
 		    losexp("eating a wraith corpse", FALSE);
+#else
+		    You("悪い予感がする．");
+		    losexp("レイスの死体を食べて", FALSE);
+#endif
 		    break;
 		case 2:                        
+#if 0 /*JP*/
 		    You("don't feel so good ...");
+#else
+		    You("気分が悪くなった気がする．．．");
+#endif
 		    if (Upolyd) {
 			u.mhmax -= 4;
 			if (u.mhmax < 1) u.mhmax = 1;
@@ -955,14 +1156,26 @@
 		    if (u.uenmax < 1) u.uenmax = 1;
 		    u.uen -= 8;
 		    if (u.uen < 0) u.uen = 0;
+#if 0 /*JP*/
 		    losehp(4, "eating a wraith corpse", KILLED_BY);
+#else
+		    losehp(4, "レイスの死体を食べて", KILLED_BY);
+#endif
 		    break;
 		case 3:                        
 		case 4: 
+#if 0 /*JP*/
 		    You("feel something strange for a moment.");
+#else
+		    You("一瞬奇妙な気分におそわれた．");
+#endif
 		    break;
 		case 5: 
+#if 0 /*JP*/
 		    You("feel physically and mentally stronger!");
+#else
+		    You("肉体的にも精神的にも強くなった気がした！");
+#endif
 		    if (Upolyd) {
 			u.mhmax += 4;
 			u.mh = u.mhmax;
@@ -978,7 +1191,11 @@
 		case 8:
 		case 9:                        
 		case 10:                
+#if 0 /*JP*/
 		    You("feel that was a smart thing to do.");
+#else
+		    You("この行動は賢明な気がする．");
+#endif
 		pluslvl(FALSE);
 		break;
 		default:            
@@ -1024,7 +1241,10 @@
 			set_itimeout(&HInvis, (long)rn1(100, 50));
 			if (!Blind && !BInvis) self_invis_message();
 		} else {
+/*JP
 			if (!(HInvis & INTRINSIC)) You_feel("hidden!");
+*/
+			if (!(HInvis & INTRINSIC)) Your("姿は隠された！");
 			HInvis |= FROMOUTSIDE;
 			HSee_invisible |= FROMOUTSIDE;
 		}
@@ -1048,17 +1268,29 @@
 		tmp += 20;
 		if (youmonst.data->mlet != S_MIMIC && !Unchanging) {
 		    char buf[BUFSZ];
+#if 0 /*JP*/
 		    You_cant("resist the temptation to mimic %s.",
 			Hallucination ? "an orange" : "a pile of gold");
+#else
+		    You("%sを真似したい誘惑にかられた．",
+			Hallucination ? "オレンジ" : "金貨の山");
+#endif
 #ifdef STEED
                     /* A pile of gold can't ride. */
 		    if (u.usteed) dismount_steed(DISMOUNT_FELL);
 #endif
 		    nomul(-tmp);
+#if 0 /*JP*/
 		    Sprintf(buf, Hallucination ?
 			"You suddenly dread being peeled and mimic %s again!" :
 			"You now prefer mimicking %s again.",
 			an(Upolyd ? youmonst.data->mname : urace.noun));
+#else
+		    Sprintf(buf, Hallucination ?
+			"突然丸裸にされるのが恐ろしくなってまた%sの真似をした！" :
+			"こんどはまた%sの真似がしたくなった．",
+			    jtrns_mon(Upolyd ? youmonst.data->mname : urace.noun));
+#endif
 		    eatmbuf = strcpy((char *) alloc(strlen(buf) + 1), buf);
 		    nomovemsg = eatmbuf;
 		    afternmv = eatmdone;
@@ -1072,13 +1304,22 @@
 		}
 		break;
 	    case PM_QUANTUM_MECHANIC:
+/*JP
 		Your("velocity suddenly seems very uncertain!");
+*/
+		Your("速度が突然，不確定になった！");
 		if (HFast & INTRINSIC) {
 			HFast &= ~INTRINSIC;
+/*JP
 			You("seem slower.");
+*/
+			You("遅くなったようだ．");
 		} else {
 			HFast |= FROMOUTSIDE;
+/*JP
 			You("seem faster.");
+*/
+			You("速くなったようだ．");
 		}
 		break;
 	    case PM_LIZARD:
@@ -1089,13 +1330,20 @@
 	    case PM_DOPPELGANGER:
 	 /* case PM_SANDESTIN: */
 		if (!Unchanging) {
+/*JP
 		    You_feel("a change coming over you.");
+*/
+		    pline("変化が訪れた．");
 		    polyself(FALSE);
 		}
 		break;
 	    case PM_GENETIC_ENGINEER: /* Robin Johnson -- special msg */
 		if (!Unchanging) {
+#if 0 /*JP*/
 		    You("undergo a freakish metamorphosis!");
+#else
+		    You("奇形な変化をしはじめた！");
+#endif
 		    polyself(FALSE);
 		}
 		break;
@@ -1108,13 +1356,19 @@
 #endif
 		if (ABASE(A_INT) < ATTRMAX(A_INT)) {
 			if (!rn2(2)) {
+/*JP
 				pline("Yum! That was real brain food!");
+*/
+				pline("うまい！これこそ本当の「頭の良くなる食事」だ！");
 				(void) adjattrib(A_INT, 1, FALSE);
 				break;	/* don't give them telepathy, too */
 			}
 		}
 		else {
+/*JP
 			pline("For some reason, that tasted bland.");
+*/
+			pline("どうしたわけか，淡白な味だ．");
 		}
 		}
 		/* fall through to default case */
@@ -1124,7 +1378,10 @@
 
 		if (dmgtype(ptr, AD_STUN) || dmgtype(ptr, AD_HALU) ||
 		    pm == PM_VIOLET_FUNGUS) {
+/*JP
 			pline ("Oh wow!  Great stuff!");
+*/
+			pline ("ワーォ！こりゃすごい！");
 			make_hallucinated(HHallucination + 200,FALSE,0L);
 		}
 		if(is_giant(ptr) && !rn2(4)) gainstr((struct obj *)0, 0);
@@ -1193,7 +1450,10 @@
 {
     u.uconduct.unvegetarian++;
     if (Role_if(PM_MONK)) {
+/*JP
 	You_feel("guilty.");
+*/
+	pline("罪を感じた．");
 	adjalign(-1);
     }
     return;
@@ -1210,7 +1470,10 @@
 	     costly_spot(tin.tin->ox, tin.tin->oy) &&
 	     !tin.tin->no_charge)
 	    || tin.tin->unpaid)) {
+/*JP
 	    verbalize("You %s it, you bought it!", verb ? verb : "open");
+*/
+	    verbalize("%sのなら買ってもらうよ！", verb ? verb : "開けた");
 	    if(tin.tin->quan > 1L) tin.tin = splitobj(tin.tin, 1L);
 	    bill_dummy_object(tin.tin);
 	}
@@ -1228,21 +1491,36 @@
 					/* perhaps it was stolen? */
 		return(0);		/* %% probably we should use tinoid */
 	if(tin.usedtime++ >= 50) {
+/*JP
 		You("give up your attempt to open the tin.");
+*/
+		You("缶を開けるのをあきらめた．");
 		return(0);
 	}
 	if(tin.usedtime < tin.reqtime)
 		return(1);		/* still busy */
 	if(tin.tin->otrapped ||
 	   (tin.tin->cursed && tin.tin->spe != -1 && !rn2(8))) {
+/*JP
 		b_trapped("tin", 0);
+*/
+		b_trapped("缶", 0);
+/*JP
 		costly_tin("destroyed");
+*/
+		costly_tin("壊した");
 		goto use_me;
 	}
+/*JP
 	You("succeed in opening the tin.");
+*/
+	You("缶を開けるのに成功した．");
 	if(tin.tin->spe != 1) {
 	    if (tin.tin->corpsenm == NON_PM) {
+/*JP
 		pline("It turns out to be empty.");
+*/
+		pline("缶は空っぽだった．");
 		tin.tin->dknown = tin.tin->known = TRUE;
 		costly_tin((const char*)0);
 		goto use_me;
@@ -1271,21 +1549,42 @@
 	    /* WAC - you only recognize if you've eaten this before */
 	    if (!mvitals[tin.tin->corpsenm].eaten && !Hallucination) {
 		if (rn2(2))
+#if 0 /*JP*/
 			pline ("It smells kind of like %s.",
 				monexplain[mons[tin.tin->corpsenm].mlet]);
+#else
+			pline ("まるで%sのような匂いがした．",
+				jtrns_obj('S', monexplain[mons[tin.tin->corpsenm].mlet]));
+#endif
 		else 
+#if 0 /*JP*/
 			pline_The("smell is unfamiliar.");
+#else
+			pline("はじめて嗅ぐ匂いだ．");
+#endif
 	    } else
 #endif
+#if 0 /*JP*/
 	    pline("It smells like %s%s.", (which == 2) ? "the " : "", what);
+#else
+	    pline("%sのような匂いがした．", jtrns_mon(what));
+#endif
 
+#if 0 /*JP*/
 	    if (yn("Eat it?") == 'n') {
+#else
+	    if (yn("食べますか？") == 'n') {
+#endif
 #ifdef EATEN_MEMORY
 	    	/* ALI - you know the tin iff you recognized the contents */
 		if (mvitals[tin.tin->corpsenm].eaten)
 #endif
 		if (!Hallucination) tin.tin->dknown = tin.tin->known = TRUE;
+#if 0 /*JP*/
 		if (flags.verbose) You("discard the open tin.");
+#else
+		if (flags.verbose) You("開けた缶を捨てた．");
+#endif
 		costly_tin((const char*)0);
 		goto use_me;
 	    }
@@ -1293,6 +1592,7 @@
 	    victual.piece = (struct obj *)0;
 	    victual.fullwarn = victual.eating = victual.doreset = FALSE;
 
+#if 0 /*JP*/
 #ifdef EATEN_MEMORY
 	    /* WAC - you only recognize if you've eaten this before */
 	    You("consume %s %s.", tintxts[r].txt,
@@ -1302,6 +1602,22 @@
 	    You("consume %s %s.", tintxts[r].txt,
 			mons[tin.tin->corpsenm].mname);
 #endif
+#else /*JP*/
+/*JP 
+  afterフラグのついてないもの（腐った，ゆでた，乾燥，四川風，フレンチ風）は前置に，
+  それ以外は後置．
+ */
+	
+	    You("%s%s%sの缶詰をたいらげた．",
+		( tintxts[r].after ) ? "" : tintxts[r].txt,
+#ifdef EATEN_MEMORY
+		mvitals[tin.tin->corpsenm].eaten ?
+		  jtrns_mon(mons[tin.tin->corpsenm].mname) : "何か",
+#else
+		jtrns_mon(mons[tin.tin->corpsenm].mname),
+#endif
+		( tintxts[r].after ) ? tintxts[r].txt : "") ;
+#endif /*JP*/
 
 	    /* KMH, conduct */
 	    u.uconduct.food++;
@@ -1326,21 +1642,38 @@
 	    if(r == 0 || r == FRENCH_FRIED_TIN) {
 	        /* Assume !Glib, because you can't open tins when Glib. */
 		incr_itimeout(&Glib, rnd(15));
+/*JP
 		pline("Eating deep fried food made your %s very slippery.",
+*/
+		pline("揚げ物を食べたのであなたの%sは滑りやすくなった．",
 		      makeplural(body_part(FINGER)));
 	    }
 	} else {
 	    if (tin.tin->cursed)
+#if 0 /*JP*/
 		pline("It contains some decaying%s%s substance.",
 			Blind ? "" : " ", Blind ? "" : hcolor(NH_GREEN));
+#else
+		pline("%s腐った物体が入っている．",
+			Blind ? "" : hcolor(NH_GREEN));
+#endif
 	    else
+/*JP
 		pline("It contains spinach.");
+*/
+		pline("ホウレン草が入っている．");
 
+/*JP
 	    if (yn("Eat it?") == 'n') {
+*/
+	    if (yn("食べますか？") == 'n') {
 		if (!Hallucination && !tin.tin->cursed)
 		    tin.tin->dknown = tin.tin->known = TRUE;
 		if (flags.verbose)
+/*JP
 		    You("discard the open tin.");
+*/
+		    You("開けた缶を捨てた．");
 		costly_tin((const char*)0);
 		goto use_me;
 	    }
@@ -1349,8 +1682,13 @@
 	    costly_tin((const char*)0);
 
 	    if (!tin.tin->cursed)
+#if 0 /*JP*/
 		pline("This makes you feel like %s!",
 		      Hallucination ? "Swee'pea" : "Popeye");
+#else
+		pline("%sのような気分になった！",
+		      Hallucination ? "スイーピー" : "ポパイ");
+#endif
 	    lesshungry(600);
 	    gainstr(tin.tin, 0);
 	    u.uconduct.food++;
@@ -1369,13 +1707,22 @@
 	register int tmp;
 
 	if (metallivorous(youmonst.data)) {
+/*JP
 		You("bite right into the metal tin...");
+*/
+		You("金属の缶を噛みはじめた．．．");
 		tmp = 1;
 	} else if (nolimbs(youmonst.data)) {
+/*JP
 		You("cannot handle the tin properly to open it.");
+*/
+		You("缶をうまく開けられない．");
 		return;
 	} else if (otmp->blessed) {
+/*JP
 		pline_The("tin opens like magic!");
+*/
+		pline("缶は魔法のように開いた！");
 		tmp = 1;
 	} else if(uwep) {
 		switch(uwep->otyp) {
@@ -1399,13 +1746,24 @@
 		default:
 			goto no_opener;
 		}
+#if 0 /*JP*/
 		pline("Using your %s you try to open the tin.",
 			aobjnam(uwep, (char *)0));
+#else
+		You("%sを使って缶を開けようとした．",
+			xname(uwep));
+#endif
 	} else {
 no_opener:
+/*JP
 		pline("It is not so easy to open this tin.");
+*/
+		pline("この缶を開けるのは容易なことではない．");
 		if(Glib) {
+/*JP
 			pline_The("tin slips from your %s.",
+*/
+			pline("缶はあなたの%sから滑り落ちた．",
 			      makeplural(body_part(FINGER)));
 			if(otmp->quan > 1L) {
 			    otmp = splitobj(otmp, 1L);
@@ -1419,7 +1777,10 @@
 	tin.reqtime = tmp;
 	tin.usedtime = 0;
 	tin.tin = otmp;
+/*JP
 	set_occupation(opentin, "opening the tin", 0);
+*/
+	set_occupation(opentin, "缶を開ける", 0);
 	return;
 }
 
@@ -1435,32 +1796,61 @@
 rottenfood(obj)
 struct obj *obj;
 {
+/*JP
 	pline("Blecch!  Rotten %s!", foodword(obj));
+*/
+	pline("ゲェ！腐った%sだ！", foodword(obj));
 	if(!rn2(4)) {
+#if 0 /*JP*/
 		if (Hallucination) You_feel("rather trippy.");
 		else You_feel("rather %s.", body_part(LIGHT_HEADED));
+#else
+		if (Hallucination) You("へろへろした．");
+		else You("%s．", body_part(LIGHT_HEADED));
+#endif
 		make_confused(HConfusion + d(2,4),FALSE);
 	} else if(!rn2(4) && !Blind) {
+/*JP
 		pline("Everything suddenly goes dark.");
+*/
+		pline("突然全てが暗くなった．");
 		make_blinded((long)d(2,10),FALSE);
 		if (!Blind) Your(vision_clears);
 	} else if(!rn2(3)) {
 		const char *what, *where;
 		if (!Blind)
+/*JP
 		    what = "goes",  where = "dark";
+*/
+		    what = "なった",  where = "暗闇に";
 		else if (Levitation || Is_airlevel(&u.uz) ||
 			 Is_waterlevel(&u.uz))
+/*JP
 		    what = "you lose control of",  where = "yourself";
+*/
+		    what = "制御できなくなった",  where = "自分を";
 		else
+/*JP
 		    what = "you slap against the", where =
+*/
+		    what = "にぶつかった",  where =
 #ifdef STEED
+/*JP
 			   (u.usteed) ? "saddle" :
+*/
+			   (u.usteed) ? "鞍" :
 #endif
 			   surface(u.ux,u.uy);
+/*JP
 		pline_The("world spins and %s %s.", what, where);
+*/
+		pline("世界が回転し，%s%s．", where, what);
 		flags.soundok = 0;
 		nomul(-rnd(10));
+/*JP
 		nomovemsg = "You are conscious again.";
+*/
+		nomovemsg = "あなたはまた正気づいた．";
 		afternmv = Hear_again;
 		return(1);
 	}
@@ -1481,7 +1871,9 @@
 {
 	int tp = 0, mnum = otmp->corpsenm;
 	long rotted = 0L;
+/*JP
 	boolean uniq = !!(mons[mnum].geno & G_UNIQ);
+*/
 	int retcode = 0;
 	boolean stoneable = (touch_petrifies(&mons[mnum]) && !Stone_resistance &&
 				!poly_when_stoned(youmonst.data));
@@ -1509,10 +1901,15 @@
 	    /* oeaten is set up by touchfood */
 	    if (otmp->odrained ? otmp->oeaten <= drainlevel(otmp) :
 	      otmp->oeaten < mons[otmp->corpsenm].cnutrit) {
+#if 0 /*JP*/
 	    	pline("There is no blood left in this corpse!");
+#else
+	    	pline("この死体には血液がもう残っていない！");
+#endif
 	    	return 3;
 	    } else if (rotted <= 0 &&
 	      (peek_at_iced_corpse_age(otmp) + 5) >= monstermoves) {
+#if 0 /*JP*/
 		char buf[BUFSZ];
 
 		/* Generate the name for the corpse */
@@ -1524,9 +1921,16 @@
 			    s_suffix(mons[mnum].mname));
 
 	    	pline("You drain the blood from %s.", buf);
+#else
+	    	You("%sから血を吸った．", corpse_xname(otmp,TRUE));
+#endif
 		otmp->odrained = 1;
 	    } else {
+#if 0 /*JP*/
 	    	pline("The blood in this corpse has coagulated!");
+#else
+	    	pline("この死体の血はすでに固まってしまっている！");
+#endif
 	    	return 3;
 	    }
 	}
@@ -1537,17 +1941,35 @@
 	if (mnum != PM_ACID_BLOB && !stoneable && rotted > 5L) {
 	    boolean cannibal = maybe_cannibal(mnum, FALSE);
 	    if (u.umonnum == PM_GHOUL || u.umonnum == PM_GHAST) {
+#if 0 /*JP*/
 	    	pline("Yum - that %s was well aged%s!",
 		      mons[mnum].mlet == S_FUNGUS ? "fungoid vegetation" :
 		      !vegetarian(&mons[mnum]) ? "meat" : "protoplasm",
 		      cannibal ? ", cannibal" : "");
-	    } else {	    
+#else
+		pline("うーむ．．．%sはほどよく熟成されている%s！",
+		      mons[mnum].mlet == S_FUNGUS ? "細菌に汚染された植物" :
+		      !vegetarian(&mons[mnum]) ? "肉" : "生物",
+		      cannibal ? "が，共食いだ" : "");
+#endif
+	    } else {
+#if 0 /*JP*/
 		pline("Ulch - that %s was tainted%s!",
 		      mons[mnum].mlet == S_FUNGUS ? "fungoid vegetation" :
 		      !vegetarian(&mons[mnum]) ? "meat" : "protoplasm",
 		      cannibal ? ", cannibal" : "");
+#else
+		pline("オェ！この%sは腐っている%s！",
+		      mons[mnum].mlet == S_FUNGUS ? "細菌に汚染された植物" :
+		      !vegetarian(&mons[mnum]) ? "肉" : "生物",
+		      cannibal ? "．しかも共食いだ" : "");
+#endif
 		if (Sick_resistance) {
+#if 0 /*JP*/
 			pline("It doesn't seem at all sickening, though...");
+#else
+			pline("しかし，いたって元気だ．．．");
+#endif
 		} else {
 			char buf[BUFSZ];
 			long sick_time;
@@ -1556,12 +1978,16 @@
 			/* make sure new ill doesn't result in improvement */
 			if (Sick && (sick_time > Sick))
 			    sick_time = (Sick > 1L) ? Sick - 1L : 1L;
+#if 0 /*JP*/
 			if (!uniq || Hallucination)
 			    Sprintf(buf, "rotted %s", corpse_xname(otmp,TRUE));
 			else
 			    Sprintf(buf, "%s%s rotted corpse",
 				    !type_is_pname(&mons[mnum]) ? "the " : "",
 				    s_suffix(mons[mnum].mname));
+#else
+			Sprintf(buf, "腐った%sを食べ食中毒", corpse_xname(otmp,TRUE));
+#endif
 			make_sick(sick_time, buf, TRUE, SICK_VOMITABLE);
 		}
 		if (carried(otmp)) useup(otmp);
@@ -1570,25 +1996,48 @@
 	    }
 	} else if (youmonst.data == &mons[PM_GHOUL] || 
 		   youmonst.data == &mons[PM_GHAST]) {
+#if 0 /*JP*/
 		pline ("This corpse is too fresh!");
+#else
+		pline ("この死体は新鮮すぎる！");
+#endif
 		return 3;
 	} else if (acidic(&mons[mnum]) && !Acid_resistance) {
 		tp++;
+#if 0 /*JP:T*/
 		You("have a very bad case of stomach acid."); /* not body_part() */
 		losehp(rnd(15), "acidic corpse", KILLED_BY_AN);
+#else
+		pline("胃酸の調子がとても悪い．");
+		losehp(rnd(15), "酸の死体で", KILLED_BY_AN);
+#endif
 	} else if (poisonous(&mons[mnum]) && rn2(5)) {
 		tp++;
+#if 0 /*JP*/
 		pline("Ecch - that must have been poisonous!");
+#else
+		pline("ウゲェー，有毒だったにちがいない！");
+#endif
 		if(!Poison_resistance) {
 			losestr(rnd(4));
+#if 0 /*JP*/
 			losehp(rnd(15), "poisonous corpse", KILLED_BY_AN);
 		} else	You("seem unaffected by the poison.");
+#else
+			losehp(rnd(15), "毒の死体で", KILLED_BY_AN);
+		} else	You("毒の影響を受けないようだ．");
+#endif
 	/* now any corpse left too long will make you mildly ill */
 	} else if ((rotted > 5L || (rotted > 3L && rn2(5)))
 					&& !Sick_resistance) {
 		tp++;
+#if 0 /*JP*/
 		You_feel("%ssick.", (Sick) ? "very " : "");
 		losehp(rnd(8), "cadaver", KILLED_BY_AN);
+#else
+		You("%s気分が悪い．", (Sick) ? "とても" : "");
+		losehp(rnd(8), "腐乱死体で", KILLED_BY_AN);
+#endif
 	}
 
 	/* delay is weight dependent */
@@ -1605,7 +2054,11 @@
 
 	    if (!mons[otmp->corpsenm].cnutrit) {
 		/* no nutrution: rots away, no message if you passed out */
+#if 0 /*JP*/
 		if (!retcode) pline_The("corpse rots away completely.");
+#else
+		if (!retcode) pline("死体は完全に腐ってしまった．");
+#endif
 		if (carried(otmp)) useup(otmp);
 		else useupf(otmp, 1L);
 		retcode = 2;
@@ -1615,6 +2068,7 @@
 	    if (otmp->odrained && otmp->oeaten < drainlevel(otmp))
 	        otmp->oeaten = drainlevel(otmp);
 	} else if (!is_vampire(youmonst.data)) {
+#if 0 /*JP*/
 	    pline("%s%s %s!",
 		  !uniq ? "This " : !type_is_pname(&mons[mnum]) ? "The " : "",
 		  food_xname(otmp, FALSE),
@@ -1622,6 +2076,13 @@
 		   (!carnivorous(youmonst.data) && herbivorous(youmonst.data)) :
 		   (carnivorous(youmonst.data) && !herbivorous(youmonst.data)))
 		  ? "is delicious" : "tastes terrible");
+#else
+	    pline("この%sは%s！", food_xname(otmp, FALSE),
+		  (vegan(&mons[mnum]) ?
+		   (!carnivorous(youmonst.data) && herbivorous(youmonst.data)) :
+		   (carnivorous(youmonst.data) && !herbivorous(youmonst.data)))
+		  ? "とても旨い" : "ひどい味だ");
+#endif
 	}
 
 #ifdef EATEN_MEMORY
@@ -1662,8 +2123,13 @@
 	    return;
 	}
 
+#if 0 /*JP*/
 	Sprintf(msgbuf, "%s %s", otmp->odrained ? "draining" : "eating",
 	  food_xname(otmp, TRUE));
+#else
+	Sprintf(msgbuf, "%sを%s", food_xname(otmp, TRUE), 
+	  otmp->odrained ? "吸う" : "食べる");
+#endif
 	set_occupation(eatfood, msgbuf, 0);
 }
 
@@ -1680,10 +2146,17 @@
 
 	    case FOOD_RATION:
 		if(u.uhunger <= 200)
+#if 0 /*JP:T*/
 		    pline(Hallucination ? "Oh wow, like, superior, man!" :
 			  "That food really hit the spot!");
 		else if(u.uhunger <= 700) pline("That satiated your %s!",
 						body_part(STOMACH));
+#else
+		    pline(Hallucination ?
+			"まったりとして，それでいてしつこくない！これぞ究極のメニューだ！" :
+			"この食べ物は本当に申し分ない！");
+		else if(u.uhunger <= 700) pline("満腹になった！");
+#endif
 		break;
 	    case TRIPE_RATION:
 		if (carnivorous(youmonst.data) && (!humanoid(youmonst.data)) || 
@@ -1692,12 +2165,25 @@
 		    /* Symptom of lycanthropy is starting to like your
 		     * alternative form's food! 
 		     */
+#if 0 /*JP*/
 		    pline("That tripe ration was surprisingly good!");
+#else
+		    pline("このモツ肉はおどろくほど旨い！");
+#endif
 		else if (maybe_polyd(is_orc(youmonst.data), Race_if(PM_ORC)))
+#if 0 /*JP*/
 		    pline(Hallucination ? "Tastes great! Less filling!" :
 			  "Mmm, tripe... not bad!");
+#else
+		    pline(Hallucination ? "うまい！もっとほしくなるね！" :
+			  "んー，モツか．．．悪くない！");
+#endif
 		else {
+#if 0 /*JP*/
 		    pline("Yak - dog food!");
+#else
+		    pline("うげ，ドッグフードだ！");
+#endif
 		    more_experienced(1,0);
 		    newexplevel();
 		    /* not cannibalism, but we use similar criteria
@@ -1707,75 +2193,147 @@
 		}
 		break;
 	    case PILL:            
+#if 0 /*JP*/
 		You("swallow the little pink pill.");
+#else
+		You("小さいピンク色の錠剤をのみ込んだ．");
+#endif
 		switch(rn2(7))
 		{
 		   case 0:
 			/* [Tom] wishing pills are from the Land of Oz */
+#if 0 /*JP*/
 			pline ("The pink sugar coating hid a silver wishing pill!");
+#else
+			pline ("ピンク色の糖衣は銀の願いの錠剤を隠し覆っていた！");
+#endif
 			makewish();
 			break;
 		   case 1:
 			if(!Poison_resistance) {
+#if 0 /*JP*/
 				You("feel your stomach twinge.");
+#else
+				You("腹部に刺すような痛みを感じた．");
+#endif
 				losestr(rnd(4));
+#if 0 /*JP*/
 				losehp(rnd(15), "poisonous pill", KILLED_BY_AN);
 			} else  You("seem unaffected by the poison.");
+#else
+				losehp(rnd(15), "有毒な錠剤で", KILLED_BY_AN);
+			} else  You("毒の影響を受けなかったようだ．");
+#endif
 			break;
 		   case 2:
+#if 0 /*JP*/
 			pline ("Everything begins to get blurry.");
+#else
+			pline ("全ての物がぼやけ始めた．");
+#endif
 			make_stunned(HStun + 30,FALSE);
 			break;
 		   case 3:
+#if 0 /*JP*/
 			pline ("Oh wow!  Look at the lights!");
+#else
+			pline ("ワーオ！七色の光だ！");
+#endif
 			make_hallucinated(HHallucination + 150,FALSE,0L);
 			break;
 		   case 4:
+#if 0 /*JP*/
 			pline("That tasted like vitamins...");
+#else
+			pline("ビタミン剤のような味がする．．．");
+#endif
 			lesshungry(600);
 			break;
 		   case 5:
 			if(Sleep_resistance) {
+#if 0 /*JP*/
 				pline("Hmm. Nothing happens.");
+#else
+				pline("うーん．何も起きなかったようだ．");
+#endif
 			} else {
+#if 0 /*JP*/
 				pline("You feel drowsy...");
+#else
+				You("眠くなった．．．");
+#endif
 				nomul(-rn2(50));
 				u.usleep = 1;
+#if 0 /*JP*/
 				nomovemsg = "You wake up.";
+#else
+				nomovemsg = "目を覚ました．";
+#endif
 			}
 			break;
 		   case 6:
+#if 0 /*JP*/
 			pline("Wow... everything is moving in slow motion...");
+#else
+			pline("ワーオ．．．全てがスローモーションで動いている．．．");
+#endif
 			/* KMH, balance patch -- Use incr_itimeout() instead of += */
 			incr_itimeout(&HFast, rn1(10,200));
 			break;
 		}
 		break;
 	    case MUSHROOM:
+#if 0 /*JP*/
 	       pline("This %s is %s", singular(otmp, xname),
 	       otmp->cursed ? (Hallucination ? "far-out!" : "terrible!") :
 		      Hallucination ? "groovy!" : "delicious!");
+#else
+	       pline("この%sは%s", singular(otmp, xname),
+	       otmp->cursed ? (Hallucination ? "型破りな味だ！" : "ひどくまずい！") :
+		      Hallucination ? "五つ星ものだ！" : "うまい！");
+#endif
 		switch(rn2(10))
 		{
 		   case 0:
 		   case 1:
 			if(!Poison_resistance) {
+#if 0 /*JP*/
 				You("feel rather ill....");
+#else
+				You("気分が悪くなった．．．．");
+#endif
 				losestr(rnd(4));
+#if 0 /*JP*/
 				losehp(rnd(15), "poisonous mushroom", KILLED_BY_AN);
 			} else  You("burp loudly.");
+#else
+				losehp(rnd(15), "毒キノコで", KILLED_BY_AN);
+			} else  You("大きなげっぷをした．");
+#endif
 			break;
 		   case 2:
+#if 0 /*JP*/
 			pline ("That mushroom tasted a little funny.");
+#else
+			pline ("このキノコは少し変な味がする．");
+#endif
 			make_stunned(HStun + 30,FALSE);
 			break;
 		   case 3:
+#if 0 /*JP*/
 			pline ("Whoa! Everything looks groovy!");
+#else
+			pline ("ワーオ！なにもかもがステキに見える！");
+#endif
 			make_hallucinated(HHallucination + 150,FALSE,0L);
 			break;
 		   case 4:
 			gainstr(otmp, 1);
+#if 0 /*JP*/
 			pline ("You feel stronger!");
+#else
+			You("強くなったような気がした！");
+#endif
 			break;                                           
 		   case 5:
 		   case 6:
@@ -1800,8 +2358,14 @@
 	    default:
 		if (otmp->otyp == SLIME_MOLD && !otmp->cursed
 			&& otmp->spe == current_fruit)
+/*JP
 		    pline("My, that was a %s %s!",
+*/
+		    pline("おや，なんて%s%sだ！",
+/*JP
 			  Hallucination ? "primo" : "yummy",
+*/
+			  Hallucination ? "上品な" : "おいしい",
 			  singular(otmp, xname));
 		else
 #ifdef UNIX
@@ -1820,11 +2384,19 @@
 #endif
 #ifdef MAC	/* KMH -- Why should Unix have all the fun? */
 		if (otmp->otyp == APPLE) {
+#if 0 /*JP*/
 			pline("This Macintosh is wonderful!");
+#else
+			pline("すばらしい！マッキントッシュに違いない！");
+#endif
 		} else
 #endif
 		if (otmp->otyp == EGG && stale_egg(otmp)) {
+#if 0 /*JP*/
 		    pline("Ugh.  Rotten egg.");	/* perhaps others like it */
+#else
+		    pline("ウゲェー腐った卵だ．");
+#endif
 		    make_vomiting(Vomiting+d(10,4), TRUE);
 		} else {
 		    boolean bad_for_you;
@@ -1832,6 +2404,7 @@
 		    bad_for_you = otmp->cursed ||
 		      (Race_if(PM_HUMAN_WEREWOLF) &&
 		      otmp->otyp == SPRIG_OF_WOLFSBANE);
+#if 0 /*JP*/
 		    pline("This %s is %s", singular(otmp, xname),
 		      bad_for_you ? (Hallucination ? "grody!" : "terrible!") :
 		      (otmp->otyp == CRAM_RATION
@@ -1839,6 +2412,15 @@
 		      || otmp->otyp == C_RATION)
 		      ? "bland." :
 		      Hallucination ? "gnarly!" : "delicious!");
+#else
+		    pline("この%sは%s", singular(otmp, xname),
+		      bad_for_you ? (Hallucination ? "イケてない！" : "ひどい味だ！") :
+		      (otmp->otyp == CRAM_RATION
+		      || otmp->otyp == K_RATION
+		      || otmp->otyp == C_RATION)
+		      ? "味気ない．" :
+		      Hallucination ? "イケてる！" : "うまい！");
+#endif
 		}
 		break;
 	}
@@ -1848,8 +2430,13 @@
 accessory_has_effect(otmp)
 struct obj *otmp;
 {
+#if 0 /*JP*/
 	pline("Magic spreads through your body as you digest the %s.",
 	    otmp->oclass == RING_CLASS ? "ring" : "amulet");
+#else
+	pline("あなたが%sを消化すると，その魔力が体にしみこんだ．",
+	    otmp->oclass == RING_CLASS ? "指輪" : "魔除け");
+#endif
 }
 
 STATIC_OVL void
@@ -1885,7 +2472,10 @@
 		    if (Invis && !oldprop && !ESee_invisible &&
 				!perceives(youmonst.data) && !Blind) {
 			newsym(u.ux,u.uy);
+/*JP
 			pline("Suddenly you can see yourself.");
+*/
+			pline("突然自分自身が見えるようになった．");
 			makeknown(typ);
 		    }
 		    break;
@@ -1893,8 +2483,13 @@
 		    if (!oldprop && !EInvis && !BInvis &&
 					!See_invisible && !Blind) {
 			newsym(u.ux,u.uy);
+#if 0 /*JP*/
 			Your("body takes on a %s transparency...",
 				Hallucination ? "normal" : "strange");
+#else
+			pline("%sあなたの体は透過性をもった．．．",
+				Hallucination ? "あたりまえなことだが" : "奇妙なことに");
+#endif
 			makeknown(typ);
 		    }
 		    break;
@@ -1961,15 +2556,23 @@
 		if (!(HSleep_resistance & FROMOUTSIDE))
 		    accessory_has_effect(otmp);
 		if (!Sleep_resistance)
+/*JP
 		    You_feel("wide awake.");
+*/
+		    You("ぱっちり目がさめた．");
 		HSleep_resistance |= FROMOUTSIDE;
 		break;
 	    case AMULET_OF_CHANGE:
 		accessory_has_effect(otmp);
 		makeknown(typ);
 		change_sex();
+#if 0 /*JP*/
 		You("are suddenly very %s!",
 		    flags.female ? "feminine" : "masculine");
+#else
+		You("突然%sっぽくなった！", 
+		    flags.female ? "女" : "男");
+#endif
 		flags.botl = 1;
 		break;
 	    case AMULET_OF_UNCHANGING:
@@ -2013,7 +2616,10 @@
 	register struct obj *otmp = victual.piece;
 
 	/* lesshungry wants an occupation to handle choke messages correctly */
+/*JP
 	set_occupation(eatfood, "eating non-food", 0);
+*/
+	set_occupation(eatfood, "食べる", 0);
 	lesshungry(victual.nmod);
 	occupation = 0;
 	victual.piece = (struct obj *)0;
@@ -2042,13 +2648,21 @@
 	/* KMH -- idea by "Tommy the Terrorist" */
 	if ((otmp->otyp == TRIDENT) && !otmp->cursed)
 	{
+#if 0 /*JP*/
 		pline(Hallucination ? "Four out of five dentists agree." :
 				"That was pure chewing satisfaction!");
+#else
+		pline(Hallucination ? "五人に四人の歯医者がトライデントをお薦めしています．" :
+				"純粋に噛みたい気持を満たした！");
+#endif
 		exercise(A_WIS, TRUE);
 	}
 	if ((otmp->otyp == FLINT) && !otmp->cursed)
 	{
+/*JP
 		pline("Yabba-dabba delicious!");
+*/
+		pline("ヤッバダッバうまい！"); /* Flintstonesのパロディみたいです．原作よく知らず */
 		exercise(A_CON, TRUE);
 	}
 
@@ -2065,17 +2679,27 @@
 /* NOTE: the order of these words exactly corresponds to the
    order of oc_material values #define'd in objclass.h. */
 static const char *foodwords[] = {
+#if 0 /*JP*/
 	"meal", "liquid", "wax", "food", "meat",
 	"paper", "cloth", "leather", "wood", "bone", "scale",
 	"metal", "metal", "metal", "silver", "gold", "platinum", "mithril",
 	"plastic", "glass", "rich food", "stone"
+#else
+	"肉", "液体", "油", "食料", "肉",
+	"紙", "服", "皮", "木", "骨", "鱗",
+	"金属", "金属", "金属", "銀", "金", "プラチナ", "ミスリル",
+	"プラスチック", "ガラス", "高級料理", "石"
+#endif
 };
 
 STATIC_OVL const char *
 foodword(otmp)
 register struct obj *otmp;
 {
+/*JP
 	if (otmp->oclass == FOOD_CLASS) return "food";
+*/
+	if (otmp->oclass == FOOD_CLASS) return "食料";
 	if (otmp->oclass == GEM_CLASS &&
 	    objects[otmp->otyp].oc_material == GLASS &&
 	    otmp->dknown)
@@ -2095,7 +2719,11 @@
 	    case HOLY_WAFER:            
 		if (u.ualign.type == A_LAWFUL) {
 			if (u.uhp < u.uhpmax) {
+#if 0 /*JP*/
 				You("feel warm inside.");
+#else
+				pline("腹の中がぽかぽかする．");
+#endif
 				u.uhp += rn1(20,20);
 				if (u.uhp > u.uhpmax) u.uhp = u.uhpmax;
 			} 
@@ -2105,7 +2733,11 @@
 		    you_unwere(TRUE);
 		}
 		if (u.ualign.type == A_CHAOTIC) {
+#if 0 /*JP*/
 		    You("feel a burning inside!");
+#else
+		    You("腹の中が焼けつくようだ！");
+#endif
 		    u.uhp -= rn1(10,10);
 		    /* KMH, balance patch 2 -- should not have 0 hp */
 		    if (u.uhp < 1) u.uhp = 1;
@@ -2117,7 +2749,11 @@
 	    /* body parts -- now checks for artifact and name*/
 	    case EYEBALL:
 		if (!otmp->oartifact) break;
+#if 0 /*JP*/
 		You("feel a burning inside!");
+#else
+		You("腹の中が焼けつくようだ！");
+#endif
 		u.uhp -= rn1(50,150);
 		if (u.uhp <= 0) {
 		  killer_format = KILLED_BY;
@@ -2127,7 +2763,11 @@
 		break;
 	    case SEVERED_HAND:
 		if (!otmp->oartifact) break;
+#if 0 /*JP*/
 		You("feel the hand scrabbling around inside of you!");
+#else
+		pline("手が腹の中をひっかき回している！");
+#endif
 		u.uhp -= rn1(50,150);
 		if (u.uhp <= 0) {
 		  killer_format = KILLED_BY;
@@ -2136,7 +2776,11 @@
 		}
 		break;
 	    case FORTUNE_COOKIE:
+#if 0 /*JP*/
 	    	if (yn("Read the fortune?") == 'y') {
+#else
+	    	if (yn("占いを読みますか？") == 'y') {
+#endif
 		outrumor(bcsign(otmp), BY_COOKIE);
 		if (!Blind) u.uconduct.literate++;
 		}
@@ -2160,8 +2804,13 @@
 			u.uhp = u.uhpmax;
 		    } else if(u.uhp <= 0) {
 			killer_format = KILLED_BY_AN;
+#if 0 /*JP*/
 			killer = "rotten lump of royal jelly";
 			done(POISONING);
+#else
+			killer = "腐ったロイヤルゼリーを食べ食中毒で";
+			done(DIED);
+#endif
 		    }
 		}
 		if(!otmp->cursed) heal_legs();
@@ -2172,7 +2821,10 @@
 			!(poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))) {
 			if (!Stoned) Stoned = 5;
 			killer_format = KILLED_BY_AN;
+/*JP
 			Sprintf(killer_buf, "%s egg", mons[otmp->corpsenm].mname);
+*/
+			Sprintf(killer_buf, "%sの卵で", jtrns_mon(mons[otmp->corpsenm].mname));
 			delayed_killer = killer_buf;
 		    }
 		}
@@ -2200,18 +2852,33 @@
 	   ability to detect food that is unfit for consumption
 	   or dangerous and avoid it. */
 
+#if 0 /*JP*/
 	char buf[BUFSZ], foodsmell[BUFSZ],
 	     it_or_they[QBUFSZ], eat_it_anyway[QBUFSZ];
+#else
+	char buf[BUFSZ], foodsmell[BUFSZ],
+	     eat_it_anyway[QBUFSZ];
+#endif
 	boolean cadaver = (otmp->otyp == CORPSE),
 		stoneorslime = FALSE;
 	int material = objects[otmp->otyp].oc_material,
 	    mnum = otmp->corpsenm;
 	long rotted = 0L;
 
+#if 0 /*JP*/
 	Strcpy(foodsmell, Tobjnam(otmp, "smell"));
+#else
+	Strcpy(foodsmell, xname(otmp));
+#endif
+#if 0 /*JP*/
 	Strcpy(it_or_they, (otmp->quan == 1L) ? "it" : "they");
+#endif
+#if 0 /*JP*/
 	Sprintf(eat_it_anyway, "Eat %s anyway?",
 		(otmp->quan == 1L) ? "it" : "one");
+#else
+	Strcpy(eat_it_anyway, "それでも食べる？");
+#endif
 
 	if (cadaver || otmp->otyp == EGG || otmp->otyp == TIN) {
 		/* These checks must match those in eatcorpse() */
@@ -2240,48 +2907,83 @@
 
 	if (cadaver && mnum != PM_ACID_BLOB && rotted > 5L && !Sick_resistance) {
 		/* Tainted meat */
+#if 0 /*JP*/
 		Sprintf(buf, "%s like %s could be tainted! %s",
 			foodsmell, it_or_they, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは汚染されているようなにおいがする！%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
 	if (stoneorslime) {
+#if 0 /*JP*/
 		Sprintf(buf, "%s like %s could be something very dangerous! %s",
 			foodsmell, it_or_they, eat_it_anyway);
+#else
+		Sprintf(buf, "%sはなんだかすごく危険そうなにおいがする！%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
 	if (otmp->orotten || (cadaver && rotted > 3L)) {
 		/* Rotten */
+#if 0 /*JP*/
 		Sprintf(buf, "%s like %s could be rotten! %s",
 			foodsmell, it_or_they, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは腐ったようなにおいがする！%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
 	if (cadaver && poisonous(&mons[mnum]) && !Poison_resistance) {
 		/* poisonous */
+#if 0 /*JP*/
 		Sprintf(buf, "%s like %s might be poisonous! %s",
 			foodsmell, it_or_they, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは毒をもっていそうなにおいがする！%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
 	if (cadaver && !vegetarian(&mons[mnum]) &&
 	    !u.uconduct.unvegetarian && Role_if(PM_MONK)) {
+#if 0 /*JP*/
 		Sprintf(buf, "%s unhealthy. %s",
 			foodsmell, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは健康に悪そうなにおいがする．%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
 	if (cadaver && acidic(&mons[mnum]) && !Acid_resistance) {
+#if 0 /*JP*/
 		Sprintf(buf, "%s rather acidic. %s",
 			foodsmell, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは少し酸っぱそうなにおいがする．%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
 	if (Upolyd && u.umonnum == PM_RUST_MONSTER &&
 	    is_metallic(otmp) && otmp->oerodeproof) {
+#if 0 /*JP*/
 		Sprintf(buf, "%s disgusting to you right now. %s",
 			foodsmell, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは気分が悪くなるにおいがする．%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
@@ -2295,7 +2997,11 @@
 	      material == EYEBALL || material == SEVERED_HAND ||
 	      material == DRAGON_HIDE || material == WAX) ||
 	     (cadaver && !vegan(&mons[mnum])))) {
+#if 0 /*JP*/
 		Sprintf(buf, "%s foul and unfamiliar to you. %s",
+#else
+		Sprintf(buf, "%sは汚れていて，あなたになじまないようなにおいがする．%s",
+#endif
 			foodsmell, eat_it_anyway);
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
@@ -2305,7 +3011,11 @@
 	      material == EYEBALL || material == SEVERED_HAND ||
 	      material == DRAGON_HIDE) ||
 	     (cadaver && !vegetarian(&mons[mnum])))) {
+#if 0 /*JP*/
 		Sprintf(buf, "%s unfamiliar to you. %s",
+#else
+		Sprintf(buf, "%sはあなたになじまないようなにおいがする．%s",
+#endif
 			foodsmell, eat_it_anyway);
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
@@ -2313,8 +3023,13 @@
 
 	if (cadaver && mnum != PM_ACID_BLOB && rotted > 5L && Sick_resistance) {
 		/* Tainted meat with Sick_resistance */
+#if 0 /*JP*/
 		Sprintf(buf, "%s like %s could be tainted! %s",
 			foodsmell, it_or_they, eat_it_anyway);
+#else
+		Sprintf(buf, "%sは汚染されているようなにおいがする！%s",
+			foodsmell, eat_it_anyway);
+#endif
 		if (yn_function(buf,ynchars,'n')=='n') return 1;
 		else return 2;
 	}
@@ -2332,16 +3047,28 @@
 	
 	boolean dont_start = FALSE;
 	if (Strangled) {
+#if 0 /*JP*/
 		pline("If you can't breathe air, how can you consume solids?");
+#else
+		pline("息もできないのに，どうやって食べたらいいんだい？");
+#endif
 		return 0;
 	}
+#if 0 /*JP*/
 	if (!(otmp = floorfood("eat"))) return 0;
+#else
+	if (!(otmp = floorfood("食べる"))) return 0;
+#endif
 	if (check_capacity((char *)0)) return 0;
 
 	if (u.uedibility) {
 		int res = edibility_prompts(otmp);
 		if (res) {
+#if 0 /*JP*/
 		    Your("%s stops tingling and your sense of smell returns to normal.",
+#else
+		    Your("%sがうずうずするのは止まり，嗅覚は普通に戻った．",
+#endif
 			body_part(NOSE));
 		    u.uedibility = 0;
 		    if (res == 1) return 0;
@@ -2354,7 +3081,10 @@
 	 * metallic meal, etc....
 	 */
 	if (!is_edible(otmp)) {
+/*JP
 	    You("cannot eat that!");
+*/
+	    You("それを食べられない！");
 	    return 0;
 	} else if ((otmp->owornmask & (W_ARMOR|W_TOOL|W_AMUL
 #ifdef STEED
@@ -2362,7 +3092,10 @@
 #endif
 			)) != 0) {
 	    /* let them eat rings */
+/*JP
 	    You_cant("eat %s you're wearing.", something);
+*/
+	    You("身につけている間は食べれない．");
 	    return 0;
 	}
 	if (is_metallic(otmp) &&
@@ -2374,11 +3107,17 @@
 		    else
 			otmp = splitobj(otmp, 1L);
 		}
+/*JP
 		pline("Ulch - That %s was rustproofed!", xname(otmp));
+*/
+		pline("ウゲェー！%sは防錆されている！", xname(otmp));
 		/* The regurgitated object's rustproofing is gone now */
 		otmp->oerodeproof = 0;
 		make_stunned(HStun + rn2(10), TRUE);
+/*JP
 		You("spit %s out onto the %s.", the(xname(otmp)),
+*/
+		You("%sを%sに吐き出した．", the(xname(otmp)),
 			surface(u.ux, u.uy));
 		if (carried(otmp)) {
 			freeinv(otmp);
@@ -2388,13 +3127,20 @@
 		return 1;
 	}
 	if (otmp->otyp == EYEBALL || otmp->otyp == SEVERED_HAND) {
+#if 0 /*JP*/
 	    Strcpy(qbuf,"Are you sure you want to eat that?");
+#else
+	    Strcpy(qbuf,"本当にそれを食べたいのですか？");
+#endif
 	    if ((c = yn_function(qbuf, ynqchars, 'n')) != 'y') return 0;
 	}
 
 	/* KMH -- Slow digestion is... indigestible */
 	if (otmp->otyp == RIN_SLOW_DIGESTION) {
+/*JP
 		pline("This ring is indigestible!");
+*/
+		pline("この指輪は消化しにくい！");
 		(void) rottenfood(otmp);
 		if (otmp->dknown && !objects[otmp->otyp].oc_name_known
 				&& !objects[otmp->otyp].oc_uname)
@@ -2435,14 +3181,32 @@
 		(void) rottenfood(otmp);
 
 	    if (otmp->oclass == WEAPON_CLASS && otmp->opoisoned) {
+/*JP
 		pline("Ecch - that must have been poisonous!");
+*/
+		pline("ウゲェー，有毒だったに違いない！");  
 		if(!Poison_resistance) {
 		    losestr(rnd(4));
+#if 0 /*JP*/
 		    losehp(rnd(15), xname(otmp), KILLED_BY_AN);
+#else
+		    {
+		      char jbuf[BUFSIZ];
+		      Strcpy(jbuf, xname(otmp));
+		      Strcat(jbuf, "で");
+		      losehp(rnd(15), jbuf, KILLED_BY_AN);
+		    }
+#endif
 		} else
+/*JP
 		    You("seem unaffected by the poison.");
+*/
+		    You("毒の影響を受けないようだ．");
 	    } else if (!otmp->cursed)
+/*JP
 		pline("This %s is delicious!",
+*/
+		pline("この%sは旨い！",
 		      otmp->oclass == COIN_CLASS ? foodword(otmp) :
 		      singular(otmp, xname));
 
@@ -2471,7 +3235,10 @@
 	 */
 	    if (u.uhs != SATIATED) victual.canchoke = FALSE;
 	    victual.piece = touchfood(otmp);
+/*JP
 	    You("resume your meal.");
+*/
+	    You("食事を再開した．");
 	    start_eating(victual.piece);
 	    return(1);
 	}
@@ -2699,15 +3466,24 @@
 	     */
 	    if (u.uhunger >= 1500) {
 		if (!victual.eating || (victual.eating && !victual.fullwarn)) {
+/*JP
 		    pline("You're having a hard time getting all of it down.");
+*/
+		    pline("全てを飲みこむには時間がかかる．");
+/*JP
 		    nomovemsg = "You're finally finished.";
+*/
+		    nomovemsg = "やっと食べ終えた．";
 		    if (!victual.eating)
 			multi = -2;
 		    else {
 			victual.fullwarn = TRUE;
 			if (victual.canchoke && victual.reqtime > 1) {
 			    /* a one-gulp food will not survive a stop */
+/*JP
 			    if (yn_function("Stop eating?",ynchars,'y')=='y') {
+*/
+			    if (yn_function("食べるのを中断しますか？",ynchars,'y')=='y') {
 				reset_eat();
 				nomovemsg = (char *)0;
 			    }
@@ -2753,7 +3529,10 @@
 	if(is_fainted()) {
 		flags.soundok = 0;
 		nomul(-10+(u.uhunger/10));
+/*JP
 		nomovemsg = "You regain consciousness.";
+*/
+		nomovemsg = "あなたは正気づいた．";
 		afternmv = unfaint;
 	}
 }
@@ -2815,10 +3594,16 @@
 			if(!is_fainted() && multi >= 0 /* %% */) {
 				/* stop what you're doing, then faint */
 				stop_occupation();
+/*JP
 				You("faint from lack of food.");
+*/
+				You("腹が減って倒れた．");
 				flags.soundok = 0;
 				nomul(-10+(u.uhunger/10));
+/*JP
 				nomovemsg = "You regain consciousness.";
+*/
+				nomovemsg = "あなたは正気づいた．";
 				afternmv = unfaint;
 				newhs = FAINTED;
 			}
@@ -2827,9 +3612,15 @@
 			u.uhs = STARVED;
 			flags.botl = 1;
 			bot();
+/*JP
 			You("die from starvation.");
+*/
+			You("餓死した．");
 			killer_format = KILLED_BY;
+/*JP
 			killer = "starvation";
+*/
+			killer = "食料不足で餓死した";
 			done(STARVING);
 			/* if we return, we lifesaved, and that calls newuhs */
 			return;
@@ -2845,12 +3636,23 @@
 		case HUNGRY:
 			if (Hallucination) {
 			    You((!incr) ?
+#if 0 /*JP*/
 				"now have a lesser case of the munchies." :
 				"are getting the munchies.");
+#else
+				"ハラヘリが減った．":
+				"ハラヘリヘリハラ．");
+#endif
 			} else
+#if 0 /*JP*/
 			    You((!incr) ? "only feel hungry now." :
 				  (u.uhunger < 145) ? "feel hungry." :
 				   "are beginning to feel hungry.");
+#else
+			    You((!incr) ? "単に腹ペコ状態になった．" :
+				  (u.uhunger < 145) ? "空腹感を感じた．" :
+				   "空腹感をおぼえはじめた．");
+#endif
 			if (incr && occupation &&
 			    (occupation != eatfood && occupation != opentin))
 			    stop_occupation();
@@ -2858,18 +3660,35 @@
 		case WEAK:
 			if (Hallucination)
 			    pline((!incr) ?
+#if 0 /*JP*/
 				  "You still have the munchies." :
       "The munchies are interfering with your motor capabilities.");
+#else
+				  "ハラヘリが減らない．":
+ 				  "ハラヘリがモーター性能に影響を与えている．");
+#endif
 			else if (incr &&
 				(Role_if(PM_WIZARD) || Race_if(PM_ELF) ||
 				 Role_if(PM_VALKYRIE)))
+#if 0 /*JP*/
 			    pline("%s needs food, badly!",
 				  (Role_if(PM_WIZARD) || Role_if(PM_VALKYRIE)) ?
 				  urole.name.m : "Elf");
+#else
+			    pline("%sには至急食料が必要だ！",
+					(Role_if(PM_WIZARD) || Role_if(PM_VALKYRIE)) ?
+					urole.jname.m : "エルフ");
+#endif
 			else
+#if 0 /*JP*/
 			    You((!incr) ? "feel weak now." :
 				  (u.uhunger < 45) ? "feel weak." :
 				   "are beginning to feel weak.");
+#else
+			    You((!incr) ? "衰弱状態になった．":
+				  (u.uhunger < 45) ? "衰弱してきた．" :
+				   "弱くなってきたように感じた．");
+#endif
 			if (incr && occupation &&
 			    (occupation != eatfood && occupation != opentin))
 			    stop_occupation();
@@ -2879,9 +3698,15 @@
 		flags.botl = 1;
 		bot();
 		if ((Upolyd ? u.mh : u.uhp) < 1) {
+/*JP
 			You("die from hunger and exhaustion.");
+*/
+			You("空腹と衰弱で死んだ．");
 			killer_format = KILLED_BY;
+/*JP
 			killer = "exhaustion";
+*/
+			killer = "空腹と衰弱で";
 			done(STARVING);
 			return;
 		}
@@ -2925,9 +3750,15 @@
 		/* If not already stuck in the trap, perhaps there should
 		   be a chance to becoming trapped?  Probably not, because
 		   then the trap would just get eaten on the _next_ turn... */
+/*JP
 		Sprintf(qbuf, "There is a bear trap here (%s); eat it?",
+*/
+		Sprintf(qbuf, "ここには熊の罠(%s)がある",
 			(u.utrap && u.utraptype == TT_BEARTRAP) ?
+/*JP
 				"holding you" : "armed");
+*/
+				"あなたを掴まえている" : "稼動中");
 		if ((c = yn_function(qbuf, ynqchars, 'n')) == 'y') {
 		    u.utrap = u.utraptype = 0;
 		    deltrap(ttmp);
diff -aurN slashem-0.0.7E6F2/src/end.c jslashem-0.0.7E6F2-J0.0.8/src/end.c
--- slashem-0.0.7E6F2/src/end.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/end.c	2004-07-27 09:06:56.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #define NEED_VARARGS	/* comment line for pre-compiled headers */
 
 #include "hack.h"
@@ -66,6 +74,7 @@
 # endif
 #endif
 
+#if 0 /*JP*/
 /*
  * The order of these needs to match the macros in hack.h.
  */
@@ -76,7 +85,18 @@
 	"genocided", "panic", "trickery",
 	"quit", "escaped", "ascended"
 };
+#endif /*JP*/
 
+#if 1 /*JP*/
+static NEARDATA const char *ends[] = {		/* "when you..." */
+	"死んだ", "裏切られて死んだ", "窒息した", "毒におかされた", "餓死した", "溺死した",
+	"焼死した", "溶岩に溶けた",
+	"押し潰された", "石になった", "どろどろに溶けた",
+	"虐殺された",
+	"パニックにおちいった", "奇妙な出来事に会った",
+	"抜けた", "脱出した", "昇天した", "殺された"
+};
+#else
 static NEARDATA const char *ends[] = {		/* "when you..." */
 	"died", "were betrayed", "choked", "were poisoned", "starved", 
 	"drowned", "burned", "dissolved in the lava",
@@ -84,6 +104,7 @@
 	"were genocided", "panicked", "were tricked",
 	"quit", "escaped", "ascended"
 };
+#endif
 
 /*ARGSUSED*/
 void
@@ -115,7 +136,10 @@
 int
 done2()
 {
+/*JP
 	if(yn("Really quit?") == 'n') {
+*/
+	if(yn("本当に？") == 'n') {
 #ifndef NO_SIGNAL
 		(void) signal(SIGINT, (SIG_RET_TYPE) done1);
 #endif
@@ -191,14 +215,23 @@
 	char buf[BUFSZ];
 	boolean distorted = (boolean)(Hallucination && canspotmon(mtmp));
 
+#if 0 /*JP*/
 	You("die...");
+#else
+	pline("あなたは死にました．．．");
+#endif
 	/* for those wand o'death, touch o'death, poisoned spike times... */        
 	if (Instant_Death)
+#if 0 /*JP*/
 	    You("were hosed!");
+#else
+	    pline("寝耳に水とはこのことだ！");
+#endif
 	mark_synch();	/* flush buffered screen output */
 	buf[0] = '\0';
 	killer_format = KILLED_BY_AN;
 	if (!Blind || Blind_telepat) {        
+#if 0 /*JP*/ /* 日本語には関係ないのでまとめてコメントアウト */
 	/* "killed by the high priest of Crom" is okay, "killed by the high
 	   priest" alone isn't */
 	if ((mtmp->data->geno & G_UNIQ) != 0 && !(mtmp->data == &mons[PM_HIGH_PRIEST] && !mtmp->ispriest)) {
@@ -211,17 +244,34 @@
 		Strcat(buf, "the ");
 		killer_format = KILLED_BY;
 	}
+#endif
 	if (mtmp->minvis)
+/*JP
 		Strcat(buf, "invisible ");
+*/
+		Strcat(buf, "透明な");
 	if (distorted)
+/*JP
 		Strcat(buf, "hallucinogen-distorted ");
+*/
+		Strcat(buf, "幻覚で歪んだ");
 
 	if(mtmp->data == &mons[PM_GHOST]) {
+#if 0 /*JP*/
 		Strcat(buf, "ghost");
 		if (mtmp->mnamelth) Sprintf(eos(buf), " of %s", NAME(mtmp));
+#else
+		if (mtmp->mnamelth) Sprintf(eos(buf), "%sの幽霊", NAME(mtmp));
+		else Strcat(buf, "幽霊");
+#endif
 	} else if(mtmp->isshk) {
+#if 0 /*JP*/
 		Sprintf(eos(buf), "%s %s, the shopkeeper",
 			(mtmp->female ? "Ms." : "Mr."), shkname(mtmp));
+#else
+		Sprintf(eos(buf), "%sという名の店主",
+			shkname(mtmp));
+#endif
 		killer_format = KILLED_BY;
 	} else if (mtmp->ispriest || mtmp->isminion) {
 		/* m_monnam() suppresses "the" prefix plus "invisible", and
@@ -229,16 +279,36 @@
 		killer = m_monnam(mtmp);
 		Strcat(buf, killer);
 	} else {
+#if 0 /*JP*/
 		Strcat(buf, mtmp->data->mname);
 		if (mtmp->mnamelth)
 		    Sprintf(eos(buf), " called %s", NAME(mtmp));
+#else
+		Strcat(buf, jtrns_mon_gen(mtmp->data->mname, mtmp->female));
+		if (mtmp->mnamelth)
+		    Sprintf(eos(buf), "%sと呼ばれる", NAME(mtmp));
+#endif
 	}
 
+#if 0 /*JP*/
 		if (multi) Strcat(buf,", while helpless");
+	    /*JP
+	      日本語では "為す術も無く" は "死んだ/殺された/石化した" 等の寸前で補う為，
+	      こちらのif (multi)の処理は削除
+	    */
+#endif
 	} else {
 		killer_format = KILLED_BY;
+#if 0 /*JP*/
 		Strcat(buf,"something while blind");
 		if (multi) Strcat(buf," and helpless");
+#else
+	    /*JP
+	      日本語では "為す術も無く" は "死んだ/殺された/石化した" 等の寸前で補う為，
+	      こちらのif (multi)の処理は削除
+	    */
+		Strcat(buf,"暗闇の中何者か");
+#endif
 	}
 
 	killer = buf;
@@ -256,11 +326,56 @@
 				(mvitals[u.ugrave_arise].mvflags & G_GENOD))
 		u.ugrave_arise = NON_PM;
 	if (touch_petrifies(mtmp->data))
+#if 0 /*JP*/
 		done(STONING);
+#else
+	{
+	    /*JP
+	      topten.c の killed_by_prefix を参照のこと。
+	      STONING の場合は "石化した" が補われる。
+	    */
+	    Strcat(buf, "の攻撃で");
+	    /*JP
+	      日本語では "為す術も無く" は "死んだ/殺された/石化した" 等の寸前で補う為，
+	      if (multi)の処理をここに移動
+	    */
+	    if (multi) Strcat(buf,"為す術も無く");
+		done(STONING);
+	}
+#endif
 	else if (mtmp->mtraitor)
+#if 0 /*JP*/
+		done(BETRAYED);
+#else
+	{
+	    /*JP
+	      日本語では "為す術も無く" は "死んだ/殺された/石化した" 等の寸前で補う為，
+	      if (multi)の処理をここに移動
+	    */
+	    if (multi) Strcat(buf,"に為す術も無く");
 		done(BETRAYED);
+	}
+#endif
 	else
+#if 0 /*JP*/
 		done(DIED);
+#else
+	{
+	    /*JP
+	      日本語では "為す術も無く" は "死んだ/殺された/石化した" 等の寸前で補う為，
+	      if (multi)の処理をここに移動
+	      またKILLED_SUFFIXの "に" が "為す術も無く" の前に入るようにここで処理
+	    */
+	    if (multi) Strcat(buf,"に為す術も無く");
+	    else Strcat(buf,"に");
+	    /*JP
+	      DIED の場合は通常 "死んだ" が補われるが、
+	      怪物による場合は "殺された" を補う。
+	    */
+	    killer_format = KILLED_SUFFIX;
+	    done(DIED);
+	}
+#endif
 	return;
 }
 
@@ -284,11 +399,19 @@
 	    iflags.window_inited = 0; /* they're gone; force raw_print()ing */
 	}
 
+#if 0 /*JP*/
 	raw_print(program_state.gameover ?
 		  "Postgame wrapup disrupted." :
 		  !program_state.something_worth_saving ?
 		  "Program initialization has failed." :
 		  "Suddenly, the dungeon collapses.");
+#else
+	raw_print(program_state.gameover ?
+		  "ゲーム終了時の処理が崩壊した．" :
+		  !program_state.something_worth_saving ?
+		  "プログラムの初期化に失敗した．" :
+		  "突然迷宮が崩れた．");
+#endif
 #if defined(WIZARD) && !defined(MICRO)
 # if defined(NOTIFY_NETHACK_BUGS)
 	if (!wizard)
@@ -298,14 +421,20 @@
 	    raw_print("\nError save file being written.\n");
 # else
 	if (!wizard)
+/*JP
 	    raw_printf("Report error to \"%s\"%s.",
+*/
+	    raw_printf("%sにエラーを報告してください．%s",
 #  ifdef WIZARD_NAME	/*(KR1ED)*/
 			WIZARD_NAME,
 #  else
 			WIZARD,
 #  endif
 			!program_state.something_worth_saving ? "" :
+/*JP
 			" and it may be possible to rebuild.");
+*/
+			"エラー発生．再実行不可能．");
 # endif
 	if (program_state.something_worth_saving) {
 	    set_error_savefile();
@@ -379,10 +508,18 @@
 
 	if (invent) {
 	    if(taken)
+#if 0 /*JP*/
 		Sprintf(qbuf,"Do you want to see what you had when you %s?",
 			(how == QUIT) ? "quit" : "died");
+#else
+		Sprintf(qbuf,"%sとき何を持っていたか見ますか？",
+			(how == QUIT) ? "やめた" : "死んだ");
+#endif
 	    else
+/*JP
 		Strcpy(qbuf,"Do you want your possessions identified?");
+*/
+		Strcpy(qbuf,"持ち物を識別しますか？"); 
 
 	    ask = should_query_disclose_option('i', &defquery);
 	    if (!done_stopprint) {
@@ -408,8 +545,13 @@
 
 	ask = should_query_disclose_option('a', &defquery);
 	if (!done_stopprint) {
+#if 0 /*JP:T*/
 	    c = ask ? yn_function("Do you want to see your attributes?",
 				  ynqchars, defquery) : defquery;
+#else
+	    c = ask ? yn_function("属性を見ますか？",
+				  ynqchars, defquery) : defquery;
+#endif
 	    if (c == 'y')
 		enlightenment(how >= PANICKED ? 1 : 2); /* final */
 	    if (c == 'q') done_stopprint++;
@@ -425,8 +567,13 @@
 
 	ask = should_query_disclose_option('c', &defquery);
 	if (!done_stopprint) {
+#if 0 /*JP:T*/
 	    c = ask ? yn_function("Do you want to see your conduct?",
 				  ynqchars, defquery) : defquery;
+#else
+	    c = ask ? yn_function("どういう行動をとったか見ますか？",
+				  ynqchars, defquery) : defquery;
+#endif
 	    if (c == 'y')
 		show_conduct(how >= PANICKED ? 1 : 2);
 	    if (c == 'q') done_stopprint++;
@@ -450,7 +597,10 @@
 	    Sick = 0;
 	}
 	if (how == CHOKING) init_uhunger();
+/*JP
 	nomovemsg = "You survived that attempt on your life.";
+*/
+	nomovemsg = "あなたは生きながらえた．";
 	flags.move = 0;
 	if(multi > 0) multi = 0; else multi = -1;
 	if(u.utrap && u.utraptype == TT_LAVA) u.utrap = 0;
@@ -529,7 +679,9 @@
     char pbuf[BUFSZ];
     struct obj *otmp;
     long value, points;
+#if 0 /*JP*/
     short dummy;	/* object type returned by artifact_name() */
+#endif
 
     for (otmp = list; otmp; otmp = otmp->nobj) {
 	if (otmp->oartifact ||
@@ -544,11 +696,18 @@
 		makeknown(otmp->otyp);
 		otmp->known = otmp->dknown = otmp->bknown = otmp->rknown = 1;
 		/* assumes artifacts don't have quan > 1 */
+#if 0 /*JP*/
 		Sprintf(pbuf, "%s%s (worth %ld %s and %ld points)",
 			the_unique_obj(otmp) ? "The " : "",
 			otmp->oartifact ? artifact_name(xname(otmp), &dummy) :
 				OBJ_NAME(objects[otmp->otyp]),
 			value, currency(value), points);
+#else
+		Sprintf(pbuf, "%s(%ld%s，%ldポイントの価値)，",
+			otmp->oartifact ? xname(otmp) :
+			jtrns_obj(' ', OBJ_NAME(objects[otmp->otyp])),
+			value, currency(value), points);
+#endif
 		putstr(endwin, 0, pbuf);
 	    }
 	}
@@ -576,7 +735,10 @@
 	    }
 #ifdef WIZARD
 	    if (wizard) {
+/*JP
 		You("are a very tricky wizard, it seems.");
+*/
+		You("とても扱いにくいwizardのようだ．");
 		return;
 	    }
 #endif
@@ -592,16 +754,29 @@
 	/* Avoid killed by "a" burning or "a" starvation */
 	if (!killer && (how == STARVING || how == BURNING))
 		killer_format = KILLED_BY;
+/*JP
 	Strcpy(kilbuf, (!killer || how >= PANICKED ? deaths[how] : killer));
+*/
+	Strcpy(kilbuf, (!killer || how >= PANICKED ? ends[how] : killer));
 	killer = kilbuf;
 
 	if (how < PANICKED) u.umortality++;
 	if (how == STONING && uamul && uamul->otyp == AMULET_VERSUS_STONE) {
+#if 0 /*JP*/
 		pline("But wait...");
+#else
+		pline("ちょっとまった．．．");
+#endif
 		makeknown(AMULET_VERSUS_STONE);
+#if 0 /*JP:T*/
 		Your("medallion %s%s!",
 		      !Blind ? "begins to glow" : "feels warm",
 		      uamul->cursed ? " and disintegrates" : "");
+#else
+		Your("魔除けは%s%s！",
+		      !Blind ? "輝きはじめ" : "暖かくなりはじめ",
+		      uamul->cursed ? "，崩れていく" : "た");
+#endif
 		/* blessed -> uncursed -> cursed -> gone */
 		if (uamul->cursed)
 			useup(uamul);
@@ -619,13 +794,25 @@
 		return;
 	}
 	if (Lifesaved && (how <= GENOCIDED)) {
+#if 0 /*JP*/
 		pline("But wait...");
+#else
+		pline("ちょっとまった．．．");
+#endif
 		makeknown(AMULET_OF_LIFE_SAVING);
+#if 0 /*JP:T*/
 		Your("medallion %s!",
 		      !Blind ? "begins to glow" : "feels warm");
 		if (how == CHOKING) You("vomit ...");
 		You_feel("much better!");
 		pline_The("medallion crumbles to dust!");
+#else
+		Your("魔除けは%s！",
+		      !Blind ? "輝きはじめた" : "暖かくなりはじめた");
+		if (how == CHOKING) You("胃の中のものを吐いた．．．");
+		You("気分がよくなった！");
+		pline("魔除けはこなごなにくだけた！");
+#endif
 		/* KMH -- Bullet-proofing */
 		if (uamul)
 			useup(uamul);
@@ -634,7 +821,11 @@
 		if(u.uhpmax <= 0) u.uhpmax = 10;	/* arbitrary */
 		savelife(how);
 		if (how == GENOCIDED)
+#if 0 /*JP*/
 			pline("Unfortunately you are still genocided...");
+#else
+			pline("残念ながら，あなたはもう虐殺されている．．．");
+#endif
 		else {
 			killer = 0;
 			killer_format = 0;
@@ -646,9 +837,14 @@
 			wizard ||
 #endif
 			discover) && (how <= GENOCIDED || how == TURNED_SLIME)) {
+#if 0 /*JP*/
 		if(yn("Die?") == 'y') goto die;
 		pline("OK, so you don't %s.",
 			(how == CHOKING) ? "choke" : "die");
+#else
+		if(yn("死んでみる？") == 'y') goto die;
+		You("死ななかった．");
+#endif
 		if(u.uhpmax <= 0) u.uhpmax = u.ulevel * 8;	/* arbitrary */
 		savelife(how);
 		killer = 0;
@@ -675,7 +871,10 @@
 	 * smiling... :-)  -3.
 	 */
 	if (moves <= 1 && how < PANICKED)	/* You die... --More-- */
+/*JP
 	    pline("Do not pass go.  Do not collect 200 %s.", currency(200L));
+*/
+	    pline("注意一秒，怪我一生，死亡一歩．");
 
 	if (have_windows) wait_synch();	/* flush screen output */
 #ifndef NO_SIGNAL
@@ -717,10 +916,18 @@
 		}
 		corpse = mk_named_object(CORPSE, &mons[mnum],
 				       u.ux, u.uy, plname);
+#if 0 /*JP*/
 		Sprintf(pbuf, "%s, %s%s", plname,
 			killer_format == NO_KILLER_PREFIX ? "" :
 			killed_by_prefix[how],
 			killer_format == KILLED_BY_AN ? an(killer) : killer);
+#else
+		Sprintf(pbuf, "%s%s%s",
+			killer_format == KILLED_BY_AN ? an(killer) : killer,
+			killer_format == NO_KILLER_PREFIX ? "" :
+			killed_by_prefix[how],
+			plname);
+#endif
 		make_grave(u.ux, u.uy, pbuf);
 	    }
 	}
@@ -731,7 +938,10 @@
 			how = DIED;
 			u.umortality++;	/* skipped above when how==QUIT */
 			/* note that killer is pointing at kilbuf */
+/*JP
 			Strcpy(kilbuf, "quit while already on Charon's boat");
+*/
+			Strcpy(kilbuf, "カロンの舟に乗っている間に抜けた");
 		}
 	}
 	if (how == ESCAPED || how == PANICKED)
@@ -782,7 +992,11 @@
 	if (bones_ok) {
 #ifdef WIZARD
 		/* KMH -- We need the "Save bones?" prompt for testing! */
+#if 0 /*JP*/
 	    if (!wizard || yn("Save bones?") == 'y')
+#else
+	    if (!wizard || yn("骨をうめる？") == 'y')
+#endif
 #endif
 		savebones(corpse);
 	    /* corpse may be invalid pointer now so
@@ -818,21 +1032,39 @@
 /* changing kilbuf really changes killer. we do it this way because
    killer is declared a (const char *)
 */
+/*JP
 	if (u.uhave.amulet) Strcat(kilbuf, " (with the Amulet)");
+*/
+	if (u.uhave.amulet) Strcat(kilbuf, "魔除けを手に");
 	else if (how == ESCAPED) {
 	    if (Is_astralevel(&u.uz))	/* offered Amulet to wrong deity */
+/*JP
 		Strcat(kilbuf, " (in celestial disgrace)");
+*/
+		Strcat(kilbuf, "天上で恥辱を受け脱出した");
 	    else if (carrying(FAKE_AMULET_OF_YENDOR))
+/*JP
 		Strcat(kilbuf, " (with a fake Amulet)");
+*/
+		Strcpy(kilbuf, "偽物の魔除けを掴まされ脱出した");
 		/* don't bother counting to see whether it should be plural */
 	}
 
 	if (!done_stopprint) {
+#if 0 /*JP*/
 	    Sprintf(pbuf, "%s %s the %s...", Goodbye(), plname,
 		   how != ASCENDED ?
 		      (const char *) ((flags.female && urole.name.f) ?
 		         urole.name.f : urole.name.m) :
 		      (const char *) (flags.female ? "Demigoddess" : "Demigod"));
+#else
+	    Sprintf(pbuf, "%s%sの%s．．．", Goodbye(FALSE),
+		   how != ASCENDED ?
+		    (const char *) ((flags.female && urole.jname.f) ?
+				    urole.jname.f : urole.jname.m) :
+		    (const char *) (flags.female ? "女神" : "神"),
+		    plname);
+#endif
 	    putstr(endwin, 0, pbuf);
 	    putstr(endwin, 0, "");
 	}
@@ -862,25 +1094,43 @@
 	    keepdogs(TRUE);
 	    viz_array[0][0] |= IN_SIGHT; /* need visibility for naming */
 	    mtmp = mydogs;
+/*JP
 	    if (!done_stopprint) Strcpy(pbuf, "You");
+*/
+	    if (!done_stopprint) Strcpy(pbuf, "あなた");
 	    if (mtmp) {
 		while (mtmp) {
 		    if (!done_stopprint)
+/*JP
 			Sprintf(eos(pbuf), " and %s", mon_nam(mtmp));
+*/
+			Sprintf(eos(pbuf), "と%s", mon_nam(mtmp));
 		    if (mtmp->mtame)
 			u.urexp += mtmp->mhp;
 		    mtmp = mtmp->nmon;
 		}
+#if 1 /*JP*/
+		if (!done_stopprint) Strcat(pbuf, "は");
+#endif
 		if (!done_stopprint) putstr(endwin, 0, pbuf);
 		pbuf[0] = '\0';
 	    } else {
+/*JP
 		if (!done_stopprint) Strcat(pbuf, " ");
+*/
+		if (!done_stopprint) Strcat(pbuf, "は");
 	    }
 	    if (!done_stopprint) {
+#if 0 /*JP*/
 		Sprintf(eos(pbuf), "%s with %ld point%s,",
 			how==ASCENDED ? "went to your reward" :
 					"escaped from the dungeon",
 			u.urexp, plur(u.urexp));
+#else
+		Sprintf(eos(pbuf), "%ldポイントマークし%s．",
+			u.urexp,
+			how==ASCENDED ? "昇天した" : "迷宮から脱出した");
+#endif
 		putstr(endwin, 0, pbuf);
 	    }
 
@@ -902,14 +1152,23 @@
 			otmp->dknown = 1;	/* seen it (blindness fix) */
 			otmp->onamelth = 0;
 			otmp->quan = count;
+#if 0 /*JP*/
 			Sprintf(pbuf, "%8ld %s (worth %ld %s),",
+#else
+			Sprintf(pbuf, "%ld個の%s(%ld%sの価値)，",
+#endif
 				count, xname(otmp),
 				count * (long)objects[typ].oc_cost, currency(2L));
 			obfree(otmp, (struct obj *)0);
 		    } else {
 			Sprintf(pbuf,
+#if 0 /*JP*/
 				"%8ld worthless piece%s of colored glass,",
 				count, plur(count));
+#else
+				"%ld個の価値のない色つきガラス，",
+				count);
+#endif
 		    }
 		    putstr(endwin, 0, pbuf);
 		}
@@ -920,33 +1179,63 @@
 	    if (u.uz.dnum == 0 && u.uz.dlevel <= 0) {
 		/* level teleported out of the dungeon; `how' is DIED,
 		   due to falling or to "arriving at heaven prematurely" */
+#if 0 /*JP*/
 		Sprintf(pbuf, "You %s beyond the confines of the dungeon",
 			(u.uz.dlevel < 0) ? "passed away" : ends[how]);
+#else
+		Sprintf(pbuf, "迷宮の領域を越え%s．",
+			(u.uz.dlevel < 0) ? "消えさった" : ends[how]);
+#endif
 	    } else {
 		/* more conventional demise */
 		const char *where = dungeons[u.uz.dnum].dname;
 
+/*JP
 		if (Is_astralevel(&u.uz)) where = "The Astral Plane";
+*/
+		if (In_endgame(&u.uz)) where = "精霊界にて";
+/*JP
 		Sprintf(pbuf, "You %s in %s", ends[how], where);
+*/
+		Sprintf(pbuf, "あなたは%s", jtrns_obj('d', where));
 		if (!In_endgame(&u.uz) && !Is_knox(&u.uz))
+/*JP
 		    Sprintf(eos(pbuf), " on dungeon level %d",
+*/
+		    Sprintf(eos(pbuf), "の地下%d階で",
 			    In_quest(&u.uz) ? dunlev(&u.uz) : depth(&u.uz));
 	    }
 
+#if 0 /*JP*/
 	    Sprintf(eos(pbuf), " with %ld point%s,",
 		    u.urexp, plur(u.urexp));
+#else
+	    Sprintf(eos(pbuf), " %ldポイントをマークし，",
+		    u.urexp);
+#endif
 	    putstr(endwin, 0, pbuf);
 	}
 
 	if (!done_stopprint) {
+#if 0 /*JP*/
 	    Sprintf(pbuf, "and %ld piece%s of gold, after %ld move%s.",
 		    umoney, plur(umoney), moves, plur(moves));
+#else
+	    Sprintf(pbuf, "%ld枚の金貨を持って，%ld歩動いた．",
+		    u.ugold, moves);
+#endif
 	    putstr(endwin, 0, pbuf);
 	}
 	if (!done_stopprint) {
+#if 0 /*JP*/
 	    Sprintf(pbuf,
 	     "You were level %d with a maximum of %d hit point%s when you %s.",
 		    u.ulevel, u.uhpmax, plur(u.uhpmax), ends[how]);
+#else
+	    Sprintf(pbuf,
+	     "%sとき，あなたはレベル%uで，最大体力は%dであった．",
+		    ends[how],u.ulevel, u.uhpmax);
+#endif
 	    putstr(endwin, 0, pbuf);
 	    putstr(endwin, 0, "");
 	}
@@ -986,7 +1275,10 @@
 		    continue;	/* wrong type of container */
 		} else if (box->cobj) {
 		    winid tmpwin = create_nhwindow(NHW_MENU);
+/*JP
 		    Sprintf(buf, "Contents of %s:", the(xname(box)));
+*/
+		    Sprintf(buf, "%sの中身：", the(xname(box)));
 		    putstr(tmpwin, 0, buf);
 		    putstr(tmpwin, 0, "");
 		    for (obj = box->cobj; obj; obj = obj->nobj) {
@@ -1002,7 +1294,10 @@
 		    if (all_containers)
 			container_contents(box->cobj, identified, TRUE);
 		} else {
+/*JP
 		    pline("%s empty.", Tobjnam(box, "are"));
+*/
+		    pline("%sは空っぽだ．", xname(box));
 		    display_nhwindow(WIN_MESSAGE, FALSE);
 		}
 	    }
@@ -1026,6 +1321,15 @@
 	    dlb_cleanup();
 	}
 
+#if 1 /*JP*/
+	jputchar('\0');	/* reset terminal */
+	if (iflags.DECgraphics){
+	  putchar(033);
+	  putchar('$');
+	  putchar(')');
+	  putchar('B');
+	}
+#endif
 	nethack_exit(status);
 }
 
@@ -1041,6 +1345,9 @@
     winid klwin;
     char buf[BUFSZ];
 
+#ifdef GCC_WARN
+    c = 0;
+#endif
     /* get totals first */
     for (i = LOW_PM; i < NUMMONS; i++) {
 	if (mvitals[i].died) ntypes++;
@@ -1052,12 +1359,20 @@
      * includes all dead monsters, not just those killed by the player
      */
     if (ntypes != 0) {
+#if 0 /*JP:T*/
 	c = ask ? yn_function("Do you want an account of creatures vanquished?",
 			      ynqchars, defquery) : defquery;
+#else
+	c = ask ? yn_function("倒したモンスターの一覧を見ますか？",
+			      ynqchars, defquery) : defquery;
+#endif
 	if (c == 'q') done_stopprint++;
 	if (c == 'y') {
 	    klwin = create_nhwindow(NHW_MENU);
+/*JP
 	    putstr(klwin, 0, "Vanquished creatures:");
+*/
+	    putstr(klwin, 0, "倒したモンスター：");
 	    putstr(klwin, 0, "");
 
 	    /* countdown by monster "toughness" */
@@ -1065,10 +1380,16 @@
 	      for (i = LOW_PM; i < NUMMONS; i++)
 		if (mons[i].mlevel == lev && (nkilled = mvitals[i].died) > 0) {
 		    if ((mons[i].geno & G_UNIQ) && i != PM_HIGH_PRIEST) {
+#if 0 /*JP*/
 			Sprintf(buf, "%s%s",
 				!type_is_pname(&mons[i]) ? "The " : "",
 				mons[i].mname);
+#else
+			Sprintf(buf, "%s",
+				jtrns_mon(mons[i].mname));
+#endif
 			if (nkilled > 1) {
+#if 0 /*JP*/
 			    switch (nkilled) {
 				case 2:  Sprintf(eos(buf)," (twice)");  break;
 				case 3:  Sprintf(eos(buf)," (thrice)");  break;
@@ -1076,15 +1397,26 @@
 						 nkilled, plur(nkilled));
 					 break;
 			    }
+#else
+			    Sprintf(eos(buf)," (%d回)", nkilled);
+#endif
 			}
 		    } else {
 			/* trolls or undead might have come back,
 			   but we don't keep track of that */
 			if (nkilled == 1)
+/*JP
 			    Strcpy(buf, an(mons[i].mname));
+*/
+			    Strcpy(buf, jtrns_mon(mons[i].mname));
 			else
+#if 0 /*JP*/
 			    Sprintf(buf, "%d %s",
 				    nkilled, makeplural(mons[i].mname));
+#else
+			    Sprintf(buf, "%d体の%s",
+				    nkilled, jtrns_mon(mons[i].mname));
+#endif
 		    }
 		    putstr(klwin, 0, buf);
 		}
@@ -1094,7 +1426,10 @@
 	     */
 	    if (ntypes > 1) {
 		putstr(klwin, 0, "");
+/*JP
 		Sprintf(buf, "%ld creatures vanquished.", total_killed);
+*/
+		Sprintf(buf, "%ld匹のモンスターを倒した．", total_killed);
 		putstr(klwin, 0, buf);
 	    }
 	    display_nhwindow(klwin, TRUE);
@@ -1108,7 +1443,11 @@
 dolistvanq()
 {
     if (!list_vanquished('y', FALSE))
+#if 0 /*JP*/
         pline("No monsters have yet been killed.");
+#else
+        pline("モンスターをまだ一体も倒していない．");
+#endif
     return(0);
 }
     
@@ -1135,31 +1474,52 @@
     winid klwin;
     char buf[BUFSZ];
 
+#ifdef GCC_WARN
+    c = 0;
+#endif
     ngenocided = num_genocides();
 
     /* genocided species list */
     if (ngenocided != 0) {
+#if 0 /*JP:T*/
 	c = ask ? yn_function("Do you want a list of species genocided?",
 			      ynqchars, defquery) : defquery;
+#else
+	c = ask ? yn_function("虐殺した種の一覧を見ますか？",
+			      ynqchars, defquery) : defquery;
+#endif
 	if (c == 'q') done_stopprint++;
 	if (c == 'y') {
 	    klwin = create_nhwindow(NHW_MENU);
+/*JP
 	    putstr(klwin, 0, "Genocided species:");
+*/
+	    putstr(klwin, 0, "虐殺した種:");
 	    putstr(klwin, 0, "");
 
 	    for (i = LOW_PM; i < NUMMONS; i++)
 		if (mvitals[i].mvflags & G_GENOD) {
 		    if ((mons[i].geno & G_UNIQ) && i != PM_HIGH_PRIEST)
+#if 0 /*JP*/
 			Sprintf(buf, "%s%s",
 				!type_is_pname(&mons[i]) ? "" : "the ",
 				mons[i].mname);
+#else
+			Sprintf(buf, "%s", jtrns_mon(mons[i].mname));
+#endif
 		    else
+/*JP
 			Strcpy(buf, makeplural(mons[i].mname));
+*/
+			Strcpy(buf, jtrns_mon(mons[i].mname));
 		    putstr(klwin, 0, buf);
 		}
 
 	    putstr(klwin, 0, "");
+/*JP
 	    Sprintf(buf, "%d species genocided.", ngenocided);
+*/
+	    Sprintf(buf, "%d種類の種を虐殺した．", ngenocided);
 	    putstr(klwin, 0, buf);
 
 	    display_nhwindow(klwin, TRUE);
diff -aurN slashem-0.0.7E6F2/src/engrave.c jslashem-0.0.7E6F2-J0.0.8/src/engrave.c
--- slashem-0.0.7E6F2/src/engrave.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/engrave.c	2004-08-05 09:57:24.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 #include <ctype.h>
@@ -11,6 +19,7 @@
 #ifdef OVLB
 /* random engravings */
 static const char *random_mesg[] = {
+#if 0 /*JP*/
 	"Elbereth",
 	/* trap engravings */
 	"Vlad was here", "ad aerarium",
@@ -55,6 +64,52 @@
 	"Silly rabbit, Trix are for kids!", /* Trix */
  	"I'll be back!", /* Terminator */
  	"That is not dead which can eternal lie.", /* HPL */
+#else
+	"Elbereth",
+	/* trap engravings */
+	"ヴラドはここにいる", "ad aerarium",
+	/* take-offs and other famous engravings */
+	"Owlbreath", "Galadriel",
+	"キルロイ参上",
+	"A.S. ->", "<- A.S.", /* Journey to the Center of the Earth */
+	"それはできません．", /* 昔のアドベンチャーゲーム */
+	"ここから入らんとするものは全て希望を捨てよ．", /* 神曲:地獄編, ダンテ */
+	"よく来たな", /* Prisoner */
+	"ご迷惑をおかけしたことを深くお詫びいたします．", /* So Long... */
+	"早く来い来い木曜日", /* アメリカ横断ウルトラクイズ */
+	"のらくろ",
+	"バイア☆ラ 8?7-5309",
+	"動物にエサを与えないでください．", /* Various zoos around the world */
+	"私負けましたわ", /* 回文 */
+	"イチ推し！", /* Siskel & Ebert */
+	"Hello, World!", /* The First C Program */
+#ifdef MAIL
+	"ユー・ガッタ・メール！", /* AOL */
+#endif
+	"冗談じゃない！", /* Clueless */ /* 参考: http://www.iris.dti.ne.jp/~yfurui/alicia/rep_asif.html */
+	/* [Tom] added these */
+	"Y?v?l s??ks!", /* just kidding... */
+	"T?m ?as h?r?",
+	/* Tsanth added these */
+	"Gazortenplatz", /* Tribute to David Fizz */
+	"John 3:16", /* You see this everywhere; why not here? */
+	"Exhale! Exhale! Exhale!", /* Prodigy */
+	"All you need is love.", /* The Beatles */
+	"動物にエサを与えないでください．", /* Various zoos around the world */
+	"「．．．とくれせんたぼーび」って魔法の呪文か？", /* Final Fantasy I (US) */
+	"Madam, in Eden, I'm Adam.", /* A palindrome */
+	"イチ推し！", /* Siskel & Ebert */
+	"Hello, World!", /* The First Program line */
+	"様変り．", /* Various people at various times in history */
+	"ユー・ガット・メール！", /* AOL */
+	"UY WUZ HERE", /* :] */
+	"楽しい事をしていると時は早くたつ．", /* Who said this first, anyway? */
+	"冗談じゃない！", /* Clueless */
+	"How bizarre, how bizarre.", /* OMC */
+	"Silly rabbit, Trix are for kids!", /* Trix */
+ 	"また戻る！", /* Terminator */
+ 	"久遠に臥したるもの死する事なく．", /* HPL */
+#endif
 };
 
 char *
@@ -91,6 +146,7 @@
 	{'0', "C("},    {'1', "|"},     {'6', "o"},     {'7', "/"},
 	{'8', "3o"}
 };
+/*JP*/
 
 void
 wipeout_text(engr, cnt, seed)
@@ -98,7 +154,11 @@
 int cnt;
 unsigned seed;		/* for semi-controlled randomization */
 {
+#if 0 /*JP*/
 	char *s;
+#else
+	unsigned char *s;
+#endif
 	int i, j, nxt, use_rubout, lth = (int)strlen(engr);
 
 	if (lth && cnt > 0) {
@@ -116,9 +176,36 @@
 		    seed *= 31,  seed %= (BUFSZ-1);
 		    use_rubout = seed & 3;
 		}
+#if 0 /*JP*/
 		s = &engr[nxt];
+#else
+/*JP
+**	2BYTE文字を間違わずに消す
+**
+**	英語では，'E' -> 'F' など断片的に文字が消えていくようなエンコーディングを
+**	しているが，日本語ではとりあえず保留．
+*/
+
+		if(is_kanji2(engr, nxt))
+		  --nxt;
+
+		s = (unsigned char *)&engr[nxt];
 		if (*s == ' ') continue;
 
+		if(is_kanji1(engr, nxt)){
+
+		  if(engr[nxt] == "？"[0] && engr[nxt+1] == "？"[1]){
+		    s[0] = ' ';
+		    s[1] = ' ';
+		    continue;
+		  }
+		  else{
+		    s[0] = "？"[0];
+		    s[1] = "？"[1];
+		    continue;
+		  }
+		}
+#endif
 		/* rub out unreadable & small punctuation marks */
 		if (index("?.,'`-|_", *s)) {
 		    *s = ' ';
@@ -174,28 +261,61 @@
 
 	if ((x == u.ux) && (y == u.uy) && u.uswallow &&
 		is_animal(u.ustuck->data))
+/*JP
 	    return "maw";
+*/
+	    return "胃袋";
 	else if (IS_AIR(lev->typ) && Is_airlevel(&u.uz))
+/*JP
 	    return "air";
+*/
+	    return "空中";
 	else if (is_pool(x,y))
+/*JP
 	    return (Underwater && !Is_waterlevel(&u.uz)) ? "bottom" : "water";
+*/
+	    return (Underwater && !Is_waterlevel(&u.uz)) ? "水の底" : "水中";
 	else if (is_ice(x,y))
+/*JP
 	    return "ice";
+*/
+	    return "氷";
 	else if (is_lava(x,y))
+/*JP
 	    return "lava";
+*/
+	    return "溶岩";
 	else if (lev->typ == DRAWBRIDGE_DOWN)
+/*JP
 	    return "bridge";
+*/
+	    return "橋";
 	else if(IS_ALTAR(levl[x][y].typ))
+/*JP
 	    return "altar";
+*/
+	    return "祭壇";
 	else if(IS_GRAVE(levl[x][y].typ))
+/*JP
 	    return "headstone";
+*/
+	    return "墓石";
 	else if(IS_FOUNTAIN(levl[x][y].typ))
+/*JP
 	    return "fountain";
+*/
+	    return "泉";
 	else if ((IS_ROOM(lev->typ) && !Is_earthlevel(&u.uz)) ||
 		 IS_WALL(lev->typ) || IS_DOOR(lev->typ) || lev->typ == SDOOR)
+/*JP
 	    return "floor";
+*/
+	    return "床";
 	else
+/*JP
 	    return "ground";
+*/
+	    return "地面";
 }
 
 const char *
@@ -209,20 +329,41 @@
 	 * see check_special_room()
 	 */
 	if (*in_rooms(x,y,VAULT))
+/*JP
 	    what = "vault's ceiling";
+*/
+	    what = "倉庫の天井";
 	else if (*in_rooms(x,y,TEMPLE))
+/*JP
 	    what = "temple's ceiling";
+*/
+	    what = "寺院の天井";
 	else if (*in_rooms(x,y,SHOPBASE))
+/*JP
 	    what = "shop's ceiling";
+*/
+	    what = "店の天井";
 	else if (IS_AIR(lev->typ))
+/*JP
 	    what = "sky";
+*/
+	    what = "空";
 	else if (Underwater)
+/*JP
 	    what = "water's surface";
+*/
+	    what = "水面";
 	else if ((IS_ROOM(lev->typ) && !Is_earthlevel(&u.uz)) ||
 		 IS_WALL(lev->typ) || IS_DOOR(lev->typ) || lev->typ == SDOOR)
+/*JP
 	    what = "ceiling";
+*/
+	    what = "天井";
 	else
+/*JP
 	    what = "rock above";
+*/
+	    what = "上方の岩";
 
 	return what;
 }
@@ -312,31 +453,50 @@
 	    case DUST:
 		if(!Blind) {
 			sensed = 1;
+#if 0 /*JP*/
 			pline("%s is written here in the %s.", Something,
 				is_ice(x,y) ? "frost" : "dust");
+#else
+			pline("何かの文字が%sに書いてある．",
+				is_ice(x,y) ? "氷" : "ほこり");
+#endif
 		}
 		break;
 	    case ENGRAVE:
 	    case HEADSTONE:
 		if (!Blind || can_reach_floor()) {
 			sensed = 1;
+#if 0 /*JP*/
 			pline("%s is engraved here on the %s.",
 				Something,
 				surface(x,y));
+#else
+			pline("何かの文字が%sに刻まれている．",
+				surface(x,y));
+#endif
 		}
 		break;
 	    case BURN:
 		if (!Blind || can_reach_floor()) {
 			sensed = 1;
+#if 0 /*JP*/
 			pline("Some text has been %s into the %s here.",
 				is_ice(x,y) ? "melted" : "burned",
 				surface(x,y));
+#else
+			pline("何かの文字が%s%sいる．",
+				surface(x,y),
+				is_ice(x,y) ? "に刻まれて" : "で燃えて");
+#endif
 		}
 		break;
 	    case MARK:
 		if(!Blind) {
 			sensed = 1;
+/*JP
 			pline("There's some graffiti on the %s here.",
+*/
+			pline("%sに落書がある．",
 				surface(x,y));
 		}
 		break;
@@ -347,7 +507,10 @@
 		 */
 		if(!Blind) {
 			sensed = 1;
+/*JP
 			You("see a message scrawled in blood here.");
+*/
+			You("血文字がなぐり書きされているのを見つけた．");
 		}
 		break;
 	    default:
@@ -357,11 +520,19 @@
 	    }
 	    if (sensed && !read_it &&
 			    flags.suppress_alert < FEATURE_NOTICE_VER(0,0,7)) {
+#if 0 /*JP*/
 		pline("Use \"r.\" to read it.");
+#else
+		pline("[読むときは\"r.\"を使ってね]");
+#endif
 	    } else if (sensed && read_it) {
 		int len;
 	    	char *et;
+#if 0 /*JP*/
 	    	unsigned maxelen = BUFSZ - sizeof("You feel the words: \"\". ");
+#else
+	    	unsigned maxelen = BUFSZ - sizeof("あなたは次のように感じた：「」");
+#endif
 	    	len = strlen(ep->engr_txt);
 	    	if (len > maxelen) {
 	    		(void)strncpy(buf,  ep->engr_txt, (int)maxelen);
@@ -374,8 +545,13 @@
 		if (len != 1 || (!index(et, 'x') && !index(et, 'X')))
 			u.uconduct.literate++;
 
+#if 0 /*JP*/
 		You("%s: \"%s\".",
 		      (Blind) ? "feel the words" : "read",  et);
+#else
+		You("%s：「%s」",
+		      (Blind) ? "次のように感じた" : "読んだ",  ep->engr_txt);
+#endif
 		if(flags.run > 1) nomul(0);
 		return TRUE;
 	    }
@@ -427,6 +603,7 @@
 int
 freehand()
 {
+
 	return(!uwep || !welded(uwep) ||
 	   (!bimanual(uwep) && (!uarms || !uarms->cursed)));
 /*	if ((uwep && bimanual(uwep)) ||
@@ -508,26 +685,44 @@
 
 	if(u.uswallow) {
 		if (is_animal(u.ustuck->data)) {
+/*JP
 			pline("What would you write?  \"Jonah was here\"?");
+*/
+			pline("何を書くんだい？「ヨナはここにいる」？");
 			return(0);
 		} else if (is_whirly(u.ustuck->data)) {
+/*JP
 			You_cant("reach the %s.", surface(u.ux,u.uy));
+*/
+			You("%sに届かない．", surface(u.ux,u.uy));
 			return(0);
 		} else
 			jello = TRUE;
 	} else if (is_lava(u.ux, u.uy)) {
+/*JP
 		You_cant("write on the lava!");
+*/
+		You("溶岩には書けない！");
 		return(0);
 	} else if (is_pool(u.ux,u.uy) || IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
+/*JP
 		You_cant("write on the water!");
+*/
+		You("水には書けない！");
 		return(0);
 	}
 	if(Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)/* in bubble */) {
+/*JP
 		You_cant("write in thin air!");
+*/
+		You("空中には書けない！");
 		return(0);
 	}
 	if (cantwield(youmonst.data)) {
+/*JP
 		You_cant("even hold anything!");
+*/
+		You("何も持てない！");
 		return(0);
 	}
 	if (check_capacity((char *)0)) return (0);
@@ -536,7 +731,10 @@
 	 * Edited by GAN 10/20/86 so as not to change weapon wielded.
 	 */
 
+/*JP
 	otmp = getobj(styluses, "write with");
+*/
+	otmp = getobj(styluses, "使って書く");
 	if(!otmp) return(0);		/* otmp == zeroobj if fingers */
 
 	if (otmp == &zeroobj) writer = makeplural(body_part(FINGER));
@@ -546,31 +744,54 @@
 	 * while both your hands are tied up.
 	 */
 	if (!freehand() && otmp != uwep && !otmp->owornmask) {
+/*JP
 		You("have no free %s to write with!", body_part(HAND));
+*/
+		pline("%sの自由が効かないので書けない！", body_part(HAND));
 		return(0);
 	}
 
 	if (jello) {
+/*JP
 		You("tickle %s with your %s.", mon_nam(u.ustuck), writer);
+*/
+		You("%sで%sをくすぐった．", writer, mon_nam(u.ustuck));
+/*JP
 		Your("message dissolves...");
+*/
+		Your("メッセージは消えた．．．");
 		return(0);
 	}
 	if (otmp->oclass != WAND_CLASS && !can_reach_floor()) {
+/*JP
 		You_cant("reach the %s!", surface(u.ux,u.uy));
+*/
+		You("%sに届かない！", surface(u.ux,u.uy));
 		return(0);
 	}
 	if (IS_ALTAR(levl[u.ux][u.uy].typ)) {
+/*JP
 		You("make a motion towards the altar with your %s.", writer);
+*/
+		You("%sを使って祭壇に書こうとした．", writer);
 		altar_wrath(u.ux, u.uy);
 		return(0);
 	}
 	if (IS_GRAVE(levl[u.ux][u.uy].typ)) {
 	    if (otmp == &zeroobj) { /* using only finger */
+#if 0 /*JP:T*/
 		You("would only make a small smudge on the %s.",
 			surface(u.ux, u.uy));
+#else
+		You("は%sに小さなしみをつけることしかできなかった．",
+			surface(u.ux, u.uy));
+#endif
 		return(0);
 	    } else if (!levl[u.ux][u.uy].disturbed) {
+/*JP
 		You("disturb the undead!");
+*/
+		You("不死の者の眠りを妨げた！");
 		levl[u.ux][u.uy].disturbed = 1;
 		(void) makemon(&mons[PM_GHOUL], u.ux, u.uy, NO_MM_FLAGS);
 		exercise(A_WIS, FALSE);
@@ -607,7 +828,10 @@
 	    /* Objects too large to engrave with */
 	    case BALL_CLASS:
 	    case ROCK_CLASS:
+/*JP
 		You_cant("engrave with such a large object!");
+*/
+		pline("そんな大きなものを使って文字を刻めない！");
 		ptext = FALSE;
 		break;
 
@@ -615,8 +839,13 @@
 	    case FOOD_CLASS:
 	    case SCROLL_CLASS:
 	    case SPBOOK_CLASS:
+#if 0 /*JP*/
 		Your("%s would get %s.", xname(otmp),
 			is_ice(u.ux,u.uy) ? "all frosty" : "too dirty");
+#else
+		Your("%sは%sなった．", xname(otmp),
+			is_ice(u.ux,u.uy) ? "氷づけに" : "汚なく");
+#endif
 		ptext = FALSE;
 		break;
 
@@ -657,20 +886,29 @@
 			 */
 		    case WAN_STRIKING:
 			Strcpy(post_engr_text,
+/*JP
 			"The wand unsuccessfully fights your attempt to write!"
+*/
+			"あなたが書こうとすると杖は抵抗した！"
 			);
 			break;
 		    case WAN_SLOW_MONSTER:
 			if (!Blind) {
 			   Sprintf(post_engr_text,
+/*JP
 				   "The bugs on the %s slow down!",
+*/
+				   "%sの上の虫の動きが遅くなった！",
 				   surface(u.ux, u.uy));
 			}
 			break;
 		    case WAN_SPEED_MONSTER:
 			if (!Blind) {
 			   Sprintf(post_engr_text,
+/*JP
 				   "The bugs on the %s speed up!",
+*/
+				   "%sの上の虫の動きが速くなった！",
 				   surface(u.ux, u.uy));
 			}
 			break;
@@ -678,14 +916,22 @@
 		    case WAN_EXTRA_HEALING:
 			if (!Blind) {
 			   Sprintf(post_engr_text,
+#if 0 /*JP*/
 				   "The bugs on the %s look healthier!",
+#else
+				   "%sの上の虫が元気になったようだ！",
+#endif
 				   surface(u.ux, u.uy));
 			}
 			break;
 		    case WAN_FEAR:
 			if (!Blind) {
 			   Sprintf(post_engr_text,
+#if 0 /*JP*/
 				   "The bugs on the %s run away!",
+#else
+				   "%sの上の虫が逃げだした！",
+#endif
 				   surface(u.ux, u.uy));
 			}
 			break;
@@ -712,7 +958,11 @@
 			    oep = engr_at(u.ux,u.uy);
 			    if (!Blind) {
 				if (!oep)
+#if 0 /*JP*/
 				    pline_The("engraving on the %s vanishes!",
+#else
+				    pline("%sの上の文字は消えた！",
+#endif
 				      surface(u.ux,u.uy));
 				else {
 				    strcpy(buf, oep->engr_txt);
@@ -733,7 +983,10 @@
 			ptext = TRUE;
 			if (!Blind) {
 			   Sprintf(post_engr_text,
+/*JP
 				   "The %s is riddled by bullet holes!",
+*/
+				   "%sは散弾で細かい穴だらけになった！",
 				   surface(u.ux, u.uy));
 			}
 			break;
@@ -743,7 +996,10 @@
 		    case WAN_DEATH:
 			if (!Blind) {
 			   Sprintf(post_engr_text,
+/*JP
 				   "The bugs on the %s stop moving!",
+*/
+				   "%sの上の虫の動きが止まった！",
 				   surface(u.ux, u.uy));
 			}
 			break;
@@ -751,14 +1007,20 @@
 		    case WAN_COLD:
 			if (!Blind)
 			    Strcpy(post_engr_text,
+/*JP
 				"A few ice cubes drop from the wand.");
+*/
+				"氷のかけらが杖からこぼれ落ちた．");
 			if(!oep || (oep->engr_type != BURN))
 			    break;
 		    case WAN_CANCELLATION:
 		    case WAN_MAKE_INVISIBLE:
 			if (oep && oep->engr_type != HEADSTONE) {
 			    if (!Blind)
+/*JP
 				pline_The("engraving on the %s vanishes!",
+*/
+				pline("%sの上の文字は消えた！",
 					surface(u.ux,u.uy));
 			    dengr = TRUE;
 			}
@@ -766,7 +1028,10 @@
 		    case WAN_TELEPORTATION:
 			if (oep && oep->engr_type != HEADSTONE) {
 			    if (!Blind)
+/*JP
 				pline_The("engraving on the %s vanishes!",
+*/
+				pline("%sの上の文字は消えた！",
 					surface(u.ux,u.uy));
 			    teleengr = TRUE;
 			}
@@ -778,19 +1043,35 @@
 			type  = ENGRAVE;
 			if(!objects[otmp->otyp].oc_name_known) {
 			    if (flags.verbose)
+#if 0 /*JP*/
 				pline("This %s is a wand of digging!",
 				xname(otmp));
+#else
+				pline("これは穴掘りの杖だ！");
+#endif
 			    doknown = TRUE;
 			}
 			if (!Blind)
+#if 0 /*JP*/
 			    Strcpy(post_engr_text,
 				IS_GRAVE(levl[u.ux][u.uy].typ) ?
 				"Chips fly out from the headstone." :
 				is_ice(u.ux,u.uy) ?
 				"Ice chips fly up from the ice surface!" :
 				"Gravel flies up from the floor.");
+#else
+			    Strcpy(post_engr_text,
+				IS_GRAVE(levl[u.ux][u.uy].typ) ?
+				"墓石から破片が飛び散った．" :
+				is_ice(u.ux,u.uy) ?
+				"氷の表面から氷のかけらが飛び散った．" :
+			        "砂利が床から飛び散った．");
+#endif
 			else
+/*JP
 			    Strcpy(post_engr_text, "You hear drilling!");
+*/
+			    Strcpy(post_engr_text, "穴が開く音を聞いた！");
 			break;
 
 		    /* type = BURN wands */
@@ -799,40 +1080,70 @@
 			type  = BURN;
 			if(!objects[otmp->otyp].oc_name_known) {
 			if (flags.verbose)
+#if 0 /*JP*/
 			    pline("This %s is a wand of fire!", xname(otmp));
+#else
+			    pline("これは炎の杖だ！");
+#endif
 			    doknown = TRUE;
 			}
 			Strcpy(post_engr_text,
+#if 0 /*JP*/
 				Blind ? "You feel the wand heat up." :
 					"Flames fly from the wand.");
+#else
+				Blind ? "杖が暖かくなったような気がした．" :
+					"炎が杖から飛び散った．");
+#endif
 			break;
 		    case WAN_FIREBALL:
 			ptext = TRUE;
 			type  = BURN;
 			if(!objects[otmp->otyp].oc_name_known) {
 			if (flags.verbose)
+#if 0 /*JP*/
 			    pline("This %s is a wand of fireballs!", xname(otmp));
+#else
+			    pline("これは火球の杖だ！");
+#endif
 			    doknown = TRUE;
 			}
 			Strcpy(post_engr_text,
+#if 0 /*JP*/
 				Blind ? "You feel the wand heat up." :
 					"Flames fly from the wand.");
+#else
+				Blind ? "杖が暖かくなったような気がした．" :
+					"炎が杖から飛び散った．");
+#endif
 			break;
 		    case WAN_LIGHTNING:
 			ptext = TRUE;
 			type  = BURN;
 			if(!objects[otmp->otyp].oc_name_known) {
 			    if (flags.verbose)
+#if 0 /*JP*/
 				pline("This %s is a wand of lightning!",
 					xname(otmp));
+#else
+				pline("これは雷の杖だ！");
+#endif
 			    doknown = TRUE;
 			}
 			if (!Blind) {
 			    Strcpy(post_engr_text,
+#if 0 /*JP*/
 				    "Lightning arcs from the wand.");
+#else
+				    "火花が杖から飛び散った．");
+#endif
 			    doblind = TRUE;
 			} else
+#if 0 /*JP*/
 			    Strcpy(post_engr_text, "You hear crackling!");
+#else
+			    Strcpy(post_engr_text, "パチパチという音を聞いた！");
+#endif
 			break;
 
 		    /* type = MARK wands */
@@ -840,7 +1151,10 @@
 		    }
 		} else /* end if zappable */
 		    if (!can_reach_floor()) {
+/*JP
 			You_cant("reach the %s!", surface(u.ux,u.uy));
+*/
+			You("%sに届かない！", surface(u.ux,u.uy));
 			return(0);
 		    }
 		break;
@@ -849,27 +1163,40 @@
 #ifdef LIGHTSABERS
 		if (is_lightsaber(otmp)) {
 			if (otmp->lamplit) type = BURN;
+#if 0 /*JP*/
 			else Your("%s is deactivated!", aobjnam(otmp,"are"));
+#else
+			else Your("%sは起動していない！", xname(otmp));
+#endif
 		} else
 #endif
 		if(is_blade(otmp)) {
 		    if ((int)otmp->spe > -3)
 			type = ENGRAVE;
 		    else
+/*JP
 			Your("%s too dull for engraving.", aobjnam(otmp,"are"));
+*/
+			pline("%sは刃がボロボロで，文字を彫れない．",xname(otmp));
 		}
 		break;
 
 	    case TOOL_CLASS:
 		if(otmp == ublindf) {
 		    pline(
+/*JP
 		"That is a bit difficult to engrave with, don't you think?");
+*/
+		"ちょっとそれで彫るのは大変だろう，そう思わない？");
 		    return(0);
 		}
 		switch (otmp->otyp)  {
 		    case MAGIC_MARKER:
 			if (otmp->spe <= 0)
+/*JP
 			    Your("marker has dried out.");
+*/
+			    Your("マーカは乾ききった．");
 			else
 			    type = MARK;
 			break;
@@ -881,19 +1208,36 @@
 				(oep->engr_type == ENGR_BLOOD) ||
 				(oep->engr_type == MARK )) {
 				if (!Blind)
+/*JP
 				    You("wipe out the message here.");
+*/
+				    You("メッセージを拭きとった．");
 				else
+#if 0 /*JP*/
 				    Your("%s %s %s.", xname(otmp),
 					 otense(otmp, "get"),
 					 is_ice(u.ux,u.uy) ?
 					 "frosty" : "dusty");
+#else
+				    pline("%sは%sなった．", xname(otmp),
+					  is_ice(u.ux,u.uy) ?
+					  "氷づけに" : "ほこりまみれに");
+#endif
 				dengr = TRUE;
 			    } else
+/*JP
 				Your("%s can't wipe out this engraving.",
+*/
+				pline("この文字は%sでは拭きとれない．",
 				     xname(otmp));
 			else
+#if 0 /*JP*/
 			    Your("%s %s %s.", xname(otmp), otense(otmp, "get"),
 				  is_ice(u.ux,u.uy) ? "frosty" : "dusty");
+#else
+			    pline("%sは%sなった．", xname(otmp),
+				  is_ice(u.ux,u.uy) ? "氷づけに" : "ほこりまみれに");
+#endif
 			break;
 		    default:
 			break;
@@ -903,7 +1247,10 @@
 	    case VENOM_CLASS:
 #ifdef WIZARD
 		if (wizard) {
+/*JP
 		    pline("Writing a poison pen letter??");
+*/
+		    pline("ふむ．これこそ本当の毒舌だ．");
 		    break;
 		}
 #endif
@@ -945,23 +1292,39 @@
 	/* Something has changed the engraving here */
 	if (*buf) {
 	    make_engr_at(u.ux, u.uy, buf, moves, type);
+/*JP
 	    pline_The("engraving now reads: \"%s\".", buf);
+*/
+	    pline("刻まれた文字を読んだ：「%s」．", buf);
 	    ptext = FALSE;
 	}
 
 	if (zapwand && (otmp->spe < 0)) {
+#if 0 /*JP*/
 	    pline("%s %sturns to dust.",
 		  The(xname(otmp)), Blind ? "" : "glows violently, then ");
+#else
+	    pline("%sは%sちりとなった．",
+		  xname(otmp), Blind ? "" : "激しく輝き，");
+#endif
 	    if (!IS_GRAVE(levl[u.ux][u.uy].typ))
+#if 0 /*JP*/
 		You("are not going to get anywhere trying to write in the %s with your dust.",
 		    is_ice(u.ux,u.uy) ? "frost" : "dust");
+#else
+		You("塵で%sに何か書こうとしたが，できなかった．",
+		    is_ice(u.ux,u.uy) ? "氷" : "ほこり");
+#endif
 	    useup(otmp);
 	    ptext = FALSE;
 	}
 
 	if (!ptext) {		/* Early exit for some implements. */
 	    if (otmp->oclass == WAND_CLASS && !can_reach_floor())
+/*JP
 		You_cant("reach the %s!", surface(u.ux,u.uy));
+*/
+		You("%sに届かない！", surface(u.ux,u.uy));
 	    return(1);
 	}
 
@@ -979,7 +1342,10 @@
 		c = 'y';
 	    } else if ( (type == oep->engr_type) && (!Blind ||
 		 (oep->engr_type == BURN) || (oep->engr_type == ENGRAVE)) ) {
+/*JP
 		c = yn_function("Do you want to add to the current engraving?",
+*/
+		c = yn_function("何か書き加えますか？",
 				ynqchars, 'y');
 		if (c == 'q') {
 		    pline(Never_mind);
@@ -992,10 +1358,17 @@
 		if( (oep->engr_type == DUST) || (oep->engr_type == ENGR_BLOOD) ||
 		    (oep->engr_type == MARK) ) {
 		    if (!Blind) {
+#if 0 /*JP*/
 			You("wipe out the message that was %s here.",
 			    ((oep->engr_type == DUST)  ? "written in the dust" :
 			    ((oep->engr_type == ENGR_BLOOD) ? "scrawled in blood"   :
 							 "written")));
+#else
+			You("%sメッセージを拭きとった．",
+			    ((oep->engr_type == DUST)  ? "ほこりに書かれている" :
+			    ((oep->engr_type == BLOOD) ? "血文字でなぐり書きされている"   :
+							 "書かれている")));
+#endif
 			del_engr(oep);
 			oep = (struct engr *)0;
 		    } else
@@ -1003,16 +1376,26 @@
 			eow = TRUE;
 		} else
 		    if ( (type == DUST) || (type == MARK) || (type == ENGR_BLOOD) ) {
+#if 0 /*JP*/
 			You(
 			 "cannot wipe out the message that is %s the %s here.",
 			 oep->engr_type == BURN ?
 			   (is_ice(u.ux,u.uy) ? "melted into" : "burned into") :
 			   "engraved in", surface(u.ux,u.uy));
+#else
+			You("%sメッセージを拭きとれなかった．",
+			    ((oep->engr_type == DUST)  ? "ほこりに書かれている" :
+			    ((oep->engr_type == BLOOD) ? "血文字でなぐり書きされている"   :
+							 "書かれている")));
+#endif
 			return(1);
 		    } else
 			if ( (type != oep->engr_type) || (c == 'n') ) {
 			    if (!Blind || can_reach_floor())
+/*JP
 				You("will overwrite the current message.");
+*/
+				You("メッセージを上書きしようとした．");
 			    eow = TRUE;
 			}
 	    }
@@ -1021,47 +1404,98 @@
 	eloc = surface(u.ux,u.uy);
 	switch(type){
 	    default:
+#if 0 /*JP*/
 		everb = (oep && !eow ? "add to the weird writing on" :
 				       "write strangely on");
+#else
+		everb = (oep && !eow ? "奇妙な文字列に書き加える" :
+				       "奇妙な文字列を書く");
+#endif
 		break;
 	    case DUST:
+#if 0 /*JP*/
 		everb = (oep && !eow ? "add to the writing in" :
 				       "write in");
 		eloc = (is_ice(u.ux,u.uy) ? "frost" : "dust");
+#else
+		everb = (oep && !eow ? "書き加える" :
+				       "書く");
+		eloc = is_ice(u.ux,u.uy) ? "氷" : "ほこり";
+#endif
 		break;
 	    case HEADSTONE:
+#if 0 /*JP*/
 		everb = (oep && !eow ? "add to the epitaph on" :
 				       "engrave on");
+#else
+		everb = (oep && !eow ? "墓碑銘を刻み加える" :
+				       "墓碑銘を刻む");
+#endif
 		break;
 	    case ENGRAVE:
+#if 0 /*JP*/
 		everb = (oep && !eow ? "add to the engraving in" :
 				       "engrave in");
+#else
+		everb = (oep && !eow ? "刻み加える" :
+				       "刻む");
+#endif
 		break;
 	    case BURN:
+#if 0 /*JP*/
 		everb = (oep && !eow ?
 			( is_ice(u.ux,u.uy) ? "add to the text melted into" :
 					      "add to the text burned into") :
 			( is_ice(u.ux,u.uy) ? "melt into" : "burn into"));
+#else
+		everb = (oep && !eow ?
+			( is_ice(u.ux,u.uy) ? "刻み加える" :
+			                      "燃えている文字に書き加える") :
+			( is_ice(u.ux,u.uy) ? "刻む" : "焼印をいれる"));
+#endif
 		break;
 	    case MARK:
+#if 0 /*JP*/
 		everb = (oep && !eow ? "add to the graffiti on" :
 				       "scribble on");
+#else
+		everb = (oep && !eow ? "落書に書き加える" :
+				       "はしり書きする");
+#endif
 		break;
 	    case ENGR_BLOOD:
+#if 0 /*JP*/
 		everb = (oep && !eow ? "add to the scrawl on" :
 				       "scrawl on");
+#else
+		everb = (oep && !eow ? "なぐり書きに書き加える" :
+				       "なぐり書きする");
+#endif
 		break;
 	}
 
 	/* Tell adventurer what is going on */
 	if (otmp != &zeroobj)
+#if 0 /*JP*/
 	    You("%s the %s with %s.", everb, eloc, doname(otmp));
+#else
+	    You("%sで%sに%s", doname(otmp), eloc, jconj(everb,"た"));
+#endif
 	else
+#if 0 /*JP*/
 	    You("%s the %s with your %s.", everb, eloc,
 		makeplural(body_part(FINGER)));
+#else
+	    You("%sで%sに%s", makeplural(body_part(FINGER)),
+		eloc, jconj(everb,"た"));
+#endif
 
 	/* Prompt for engraving! */
+#if 0 /*JP*/
 	Sprintf(qbuf,"What do you want to %s the %s here?", everb, eloc);
+#else
+	Sprintf(qbuf,"%sに何と%s？", eloc, jconj(everb,"ますか"));
+#endif
 	getlin(qbuf, ebuf);
 
 	/* Count the actual # of chars engraved not including spaces */
@@ -1071,8 +1505,12 @@
 	if (len == 0 || index(ebuf, '\033')) {
 	    if (zapwand) {
 		if (!Blind)
+#if 0 /*JP*/
 		    pline("%s, then %s.",
 			  Tobjnam(otmp, "glow"), otense(otmp, "fade"));
+#else
+		    pline("%sは輝いたが，すぐに消えた．", xname(otmp));
+#endif
 		return(1);
 	    } else {
 		pline(Never_mind);
@@ -1087,12 +1525,27 @@
 	/* Mix up engraving if surface or state of mind is unsound.
 	   Note: this won't add or remove any spaces. */
 	for (sp = ebuf; *sp; sp++) {
+#if 0 /*JP*/
 	    if (isspace(*sp)) continue;
+#else
+	    if (isspace_8(*sp)) continue;
+#endif
 	    if (((type == DUST || type == ENGR_BLOOD) && !rn2(25)) ||
 		    (Blind && !rn2(11)) || (Confusion && !rn2(7)) ||
 		    (Stunned && !rn2(4)) || (Hallucination && !rn2(2)))
+#if 0 /*JP*/
 		*sp = ' ' + rnd(96 - 2);	/* ASCII '!' thru '~'
 						   (excludes ' ' and DEL) */
+#else
+	    {
+		if(is_kanji1(ebuf, sp-ebuf))
+		  jrndm_replace(sp);
+		else if(is_kanji2(ebuf, sp-ebuf))
+		  jrndm_replace(sp-1);
+		else
+		  *sp = '!' + rn2(93); /* ASCII-code only */
+	    }
+#endif
 	}
 
 	/* Previous engraving is overwritten */
@@ -1107,11 +1560,17 @@
 	switch(type){
 	    default:
 		multi = -(len/10);
+/*JP
 		if (multi) nomovemsg = "You finish your weird engraving.";
+*/
+		if (multi) nomovemsg = "あなたは奇妙な刻みを終えた．";
 		break;
 	    case DUST:
 		multi = -(len/10);
+/*JP
 		if (multi) nomovemsg = "You finish writing in the dust.";
+*/
+		if (multi) nomovemsg = "あなたはほこりに書き終えた．";
 		break;
 	    case HEADSTONE:
 	    case ENGRAVE:
@@ -1126,11 +1585,17 @@
 			 *	 However, you could now engrave "Elb", then
 			 *	 "ere", then "th".
 			 */
+/*JP
 		    Your("%s dull.", aobjnam(otmp, "get"));
+*/
+		    Your("%sは刃こぼれした．", xname(otmp));
 		    if (otmp->unpaid) {
 			struct monst *shkp = shop_keeper(*u.ushops);
 			if (shkp) {
+/*JP
 			    You("damage it, you pay for it!");
+*/
+			    You("未払いのものに傷をつけてしまった．支払いをしなきゃ！");
 			    bill_dummy_object(otmp);
 			}
 		    }
@@ -1144,14 +1609,22 @@
 		    if ( (otmp->oclass == RING_CLASS) ||
 			 (otmp->oclass == GEM_CLASS) )
 			multi = -len;
+/*JP
 		if (multi) nomovemsg = "You finish engraving.";
+*/
+		if (multi) nomovemsg = "あなたは刻み終えた．";
 		break;
 	    case BURN:
 		multi = -(len/10);
 		if (multi)
 		    nomovemsg = is_ice(u.ux,u.uy) ?
+#if 0 /*JP*/
 			"You finish melting your message into the ice.":
 			"You finish burning your message into the floor.";
+#else
+			"氷へメッセージを溶かし込み終えた．":
+			"床へメッセージを焼きいれ終えた．";
+#endif
 		break;
 	    case MARK:
 		multi = -(len/10);
@@ -1159,29 +1632,50 @@
 		    (otmp->otyp == MAGIC_MARKER)) {
 		    maxelen = (otmp->spe) * 2; /* one charge / 2 letters */
 		    if (len > maxelen) {
+#if 0 /*JP*/
 			Your("marker dries out.");
+#else
+			Your("マーカは乾ききった．");
+#endif
 			otmp->spe = 0;
 			multi = -(maxelen/10);
 		    } else
 			if (len > 1) otmp->spe -= len >> 1;
 			else otmp->spe -= 1; /* Prevent infinite grafitti */
 		}
+#if 0 /*JP*/
 		if (multi) nomovemsg = "You finish defacing the dungeon.";
+#else
+		if (multi) nomovemsg = "あなたは迷宮への落書を書き終えた．";
+#endif
 		break;
 	    case ENGR_BLOOD:
 		multi = -(len/10);
+#if 0 /*JP*/
 		if (multi) nomovemsg = "You finish scrawling.";
+#else
+		if (multi) nomovemsg = "はしり書きを書き終えた．";
+#endif
 		break;
 	}
 
 	/* Chop engraving down to size if necessary */
 	if (len > maxelen) {
 	    for (sp = ebuf; (maxelen && *sp); sp++)
+#if 0 /*JP*/
 		if (!isspace((int)*sp)) maxelen--;
+#else
+		if (!isspace_8(*sp)) maxelen--;
+#endif
 	    if (!maxelen && *sp) {
 		*sp = (char)0;
+#if 0 /*JP*/
 		if (multi) nomovemsg = "You cannot write any more.";
 		You("only are able to write \"%s\"", ebuf);
+#else
+		if (multi) nomovemsg = "これ以上何も書けなかった．";
+		You("「%s」とまでしか書けなかった．", ebuf);
+#endif
 	    }
 	}
 
@@ -1195,7 +1689,10 @@
 	if (post_engr_text[0]) pline(post_engr_text);
 
 	if (doblind && !resists_blnd(&youmonst)) {
+/*JP
 	    You("are blinded by the flash!");
+*/
+	    You("まばゆい光で目がくらんだ！");
 	    make_blinded((long)rnd(50),FALSE);
 	    if (!Blind) Your(vision_clears);
 	}
@@ -1293,6 +1790,7 @@
 
 /* Epitaphs for random headstones */
 static const char *epitaphs[] = {
+#if 0 /*JP*/
 	"Rest in peace",
 	"R.I.P.",
 	"Rest In Pieces",
@@ -1324,6 +1822,37 @@
 	"Go away!",
 	/* From SLASH'EM */
 	"This old man, he played one, he played knick-knack on my thumb."
+#else
+	"安らかに眠れ．",
+	"注意 --墓の中に価値あるものは＊ひとつも＊ない．",
+ 	"1994-1995 今迄でもっとも長生きしたハッカー．",
+	"名もしらぬハッカーの墓．",
+	"ここに眠っているのは誰かは知らない．しかし我々は埋葬した．",
+	"スパーキー -- すばらしい犬だった．",
+	"送電用の第三のレールに気をつけよ．",
+	"Made in Taiwan.",
+	"オレトモダチ，オレイイヤツ，オレ死んだ，オレ食料．",
+	"肉汁，肉汁，肉汁",
+	"下を見ろ！",
+	"掘らないでください．とても幸せなんです．-- 居住者",
+	"郵便屋さん．電報は下記の住所に転送してください．ゲヘナ市アスモデウス要塞5番町．",
+	"メリーさんの羊/ふわふわ真っ白/困ったときには/最初に逃げた",
+	"気をつけよ！さもなくば同じことが起きる．-- 使用者",
+	"もうすぐ仲間になれる！！ -- イェンダーの魔法使い",
+	"気をつけよ！この墓は有毒な廃棄物が含まれている．",
+	"涅槃で待つ",
+	"無神論者ここに眠る．みんな着飾っているが，行く所がない．",
+	"エゼキエルここに眠る．享年102歳．いいやつは早く死ぬ．",
+	"わが妻ここに眠る．ここに眠らせた！妻は安息を得，私も安息を得た．",
+	"ジョニー・イーストここに眠る．眠ったままで失礼します．",
+	"彼はいつも土の上で眠っていたが，とうとう土の中で眠ることになった．",
+	"自ら灰になった．",
+	"早く咲けば，早く散る．早く去る．しかし決して忘れない．",
+	"ジョナサン・ブレイクここに眠る．ブレーキではなくアクセルを踏んだ．",
+	"立ちされ！",
+	/* From SLASH'EM */
+	"このおじいさん　１つ　たたいた　ぼくの　おやゆびのうえで　とんとん　たたいた"
+#endif
 };
 
 /* Create a headstone at the given location.
diff -aurN slashem-0.0.7E6F2/src/exper.c jslashem-0.0.7E6F2-J0.0.8/src/exper.c
--- slashem-0.0.7E6F2/src/exper.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/exper.c	2004-06-27 16:53:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /*STATIC_DCL*/ long FDECL(newuexp, (int));
@@ -171,7 +179,10 @@
 	if (!force && Drain_resistance) return;
 
 	if (u.ulevel > 1) {
+/*JP
 		pline("%s level %d.", Goodbye(), u.ulevel--);
+*/
+		pline("さようならレベル%d．", u.ulevel--);
 		/* remove intrinsic abilities */
 		adjabil(u.ulevel + 1, u.ulevel);
 		reset_rndmonst(NON_PM);	/* new monster selection */
@@ -278,7 +289,10 @@
 {		/*	(false for potion of gain level)      */
 	register int num;
 
+/*JP
 	if (!incr) You_feel("more experienced.");
+*/
+	if (!incr) You("より経験をつんだような気がした．");
 	num = newhp();
 	u.uhpmax += num;
 	u.uhp += num;
@@ -306,7 +320,10 @@
 	    }
 	    ++u.ulevel;
 	    if (u.ulevelmax < u.ulevel) u.ulevelmax = u.ulevel;
+/*JP
 	    pline("Welcome to experience level %d.", u.ulevel);
+*/
+	    pline("レベル%dにようこそ．", u.ulevel);
 	    adjabil(u.ulevel - 1, u.ulevel);	/* give new intrinsics */
 	    reset_rndmonst(NON_PM);		/* new monster selection */
 	}
diff -aurN slashem-0.0.7E6F2/src/explode.c jslashem-0.0.7E6F2-J0.0.8/src/explode.c
--- slashem-0.0.7E6F2/src/explode.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/explode.c	2004-06-27 16:53:08.000000000 +0900
@@ -2,6 +2,14 @@
 /*	Copyright (C) 1990 by Ken Arromdee */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef OVL0
@@ -181,6 +189,9 @@
 	boolean generic = FALSE;
 	boolean silent = FALSE, remote = FALSE;
 	xchar xi, yi;
+#if 1 /*JP*/
+	char jbuf[BUFSZ];
+#endif
 
 	if (dest > 0) silent = TRUE;	
 	if (dest == 2) remote = TRUE;
@@ -201,34 +212,73 @@
 		}
 
 	if (olet == MON_EXPLODE) {
+#if 0 /*JP*/
+	    str = killer;
+#else
+/*JP	こういう日本語化のときに面倒なコーディングはやめてくれぃ */
+	    strcpy(jbuf, killer);
 	    str = killer;
+	    {
+/*JP	苦肉の策 */
+		int len = strlen(str);
+		if(len > 2 && str[len - 2] == "で"[0] && str[len - 1] == "で"[1]){
+		    ((char *)str)[len - 2] = '\0';
+		}
+	    }
+#endif
 	    killer = 0;		/* set again later as needed */
 	    adtyp = AD_PHYS;
 	} else
 	switch (abs(type) % 10) {
+/*JP
 		case 0: str = "magical blast";
+*/
+		case 0: str = "魔法の風";
 			adtyp = AD_MAGM;
 			break;
+#if 0 /*JP*/
 		case 1: str =   olet == BURNING_OIL ?	"burning oil" :
 				olet == SCROLL_CLASS ?	"tower of flame" :
 							"fireball";
+#else
+		case 1: str =   olet == BURNING_OIL ?	"燃えている油" :
+				olet == SCROLL_CLASS ?	"火柱" :
+							"火の玉";
+#endif
 			adtyp = AD_FIRE;
 			break;
+/*JP
 		case 2: str = "ball of cold";
+*/
+		case 2: str = "氷の玉";
 			adtyp = AD_COLD;
 			break;
 /* Assume that wands are death, others are disintegration */
+#if 0 /*JP*/
 		case 4: str =  (olet == WAND_CLASS) ? "death field" :
 							"disintegration field";
+#else
+		case 4: str = (olet == WAND_CLASS) ? "死の風" :
+							"分解の風";
+#endif
 			adtyp = AD_DISN;
 			break;
+/*JP
 		case 5: str = "ball of lightning";
+*/
+		case 5: str = "雷玉";
 			adtyp = AD_ELEC;
 			break;
+/*JP
 		case 6: str = "poison gas cloud";
+*/
+		case 6: str = "毒の雲";
 			adtyp = AD_DRST;
 			break;
+/*JP
 		case 7: str = "splash of acid";
+*/
+		case 7: str = "酸のしぶき";
 			adtyp = AD_ACID;
 			break;
 		default: impossible("explosion base type %d?", type); return;
@@ -390,11 +440,19 @@
 #endif
 	} else if (!remote) {
 	    if (olet == MON_EXPLODE) {
+#if 0 /*JP*/
 		str = "explosion";
+#else
+		str = "爆発";
+#endif
 		generic = TRUE;
 	    }
 	    if (flags.soundok)
+#if 0 /*JP*/
 		You_hear(is_pool(x, y) ? "a muffled explosion." : "a blast.");
+#else
+		You("%s爆発音を聞いた．", is_pool(x, y) ? "くぐもった" : "");
+#endif
 	}
 
 	    if (dam) for(i = 0; i < area->nlocations; i++) {
@@ -417,6 +475,7 @@
 		if (DEADMONSTER(mtmp)) continue;
 		if (u.uswallow && mtmp == u.ustuck) {
 			if (is_animal(u.ustuck->data))
+#if 0 /*JP*/
 				if (!silent) pline("%s gets %s!",
 				      Monnam(u.ustuck),
 				      (adtyp == AD_FIRE) ? "heartburn" :
@@ -427,7 +486,20 @@
 				      (adtyp == AD_DRST) ? "poisoned" :
 				      (adtyp == AD_ACID) ? "an upset stomach" :
 				       "fried");
+#else
+				if (!silent) pline("%sは%s！",
+				      Monnam(u.ustuck),
+				      (adtyp == AD_FIRE) ? "燃えた" :
+				      (adtyp == AD_COLD) ? "凍らされた" :
+				      (adtyp == AD_DISN) ? ((olet == WAND_CLASS) ?
+				       "浄化の力を浴びた" : "穴をあけられた") :
+				      (adtyp == AD_ELEC) ? "電撃をくらった" :
+				      (adtyp == AD_DRST) ? "毒をくらった" :
+				      (adtyp == AD_ACID) ? "酸をくらった" :
+				       "パリパリになった");
+#endif
 			else
+#if 0 /*JP*/
 				if (!silent) pline("%s gets slightly %s!",
 				      Monnam(u.ustuck),
 				      (adtyp == AD_FIRE) ? "toasted" :
@@ -438,9 +510,25 @@
 				      (adtyp == AD_DRST) ? "intoxicated" :
 				      (adtyp == AD_ACID) ? "burned" :
 				       "fried");
+#else
+				if (!silent) pline("%sは少しだけ%s！",
+				      Monnam(u.ustuck),
+				      (adtyp == AD_FIRE) ? "焦げた" :
+				      (adtyp == AD_COLD) ? "凍った" :
+				      (adtyp == AD_DISN) ? ((olet == WAND_CLASS) ?
+				       "浄化の力を浴びた" : "穴をあけられた") :
+				      (adtyp == AD_ELEC) ? "電撃をくらった" :
+				      (adtyp == AD_DRST) ? "毒をくらった" :
+				      (adtyp == AD_ACID) ? "酸をくらった" :
+				       "パリパリになった");
+#endif
 		} else if (!silent && cansee(xi, yi)) {
 		    if(mtmp->m_ap_type) seemimic(mtmp);
+#if 0 /*JP*/
 		    pline("%s is caught in the %s!", Monnam(mtmp), str);
+#else
+		    pline("%sは%sにつつまれた！", Monnam(mtmp), str);
+#endif
 		}
 
 		idamres += destroy_mitem(mtmp, SCROLL_CLASS, (int) adtyp);
@@ -461,7 +549,11 @@
 
 			if (resist(mtmp, olet, 0, FALSE)) {
 			    if (!silent && cansee(xi,yi))
+#if 0 /*JP*/
 				pline("%s resists the %s!", Monnam(mtmp), str);
+#else
+				pline("%sは%sに抵抗した！", Monnam(mtmp), str);
+#endif
 			    mdam = dam/2;
 			}
 			if (mtmp == u.ustuck)
@@ -501,12 +593,18 @@
 		if ((type >= 0 || adtyp == AD_PHYS || olet == WEAPON_CLASS) &&
 		    /* gas spores */
 				flags.verbose && olet != SCROLL_CLASS)
+/*JP
 			You("are caught in the %s!", str);
+*/
+			You("%sにつつまれた！", str);
 		/* do property damage first, in case we end up leaving bones */
 		if (adtyp == AD_FIRE) burn_away_slime();
 		if (Invulnerable) {
 		    damu = 0;
+/*JP
 		    You("are unharmed!");
+*/
+		    You("傷つかない！");
 		} else if (Half_physical_damage && adtyp == AD_PHYS)
 		    damu = (damu+1) / 2;
 		if (adtyp == AD_FIRE) (void) burnarmor(&youmonst);
@@ -544,13 +642,21 @@
 				Strcpy(killer_buf, str);
 			    killer_format = KILLED_BY_AN;
 			} else if (type >= 0 && olet != SCROLL_CLASS) {
+#if 0 /*JP*/
 			    killer_format = NO_KILLER_PREFIX;
 			    Sprintf(killer_buf, "caught %sself in %s own %s",
 				    uhim(), uhis(), str);
+#else
+			    killer_format = KILLED_BY;
+			    Sprintf(killer_buf, "自分自身の%sにつつまれて",
+				    str);
+#endif
+#if 0 /*JP*//* an をつけるかどうかは関係ない */
 			} else if (!strncmpi(str,"tower of flame", 8) ||
 				   !strncmpi(str,"fireball", 8)) {
 			    killer_format = KILLED_BY_AN;
 			    Strcpy(killer_buf, str);
+#endif
 			} else {
 			    killer_format = KILLED_BY;
 			    Strcpy(killer_buf, str);
@@ -565,10 +671,17 @@
 	}
 
 	if (shopdamage) {
+#if 0 /*JP*/
 		pay_for_damage(adtyp == AD_FIRE ? "burn away" :
 			       adtyp == AD_COLD ? "shatter" :
 			       adtyp == AD_DISN ? "disintegrate" : "destroy",
 			       FALSE);
+#else
+		pay_for_damage(adtyp == AD_FIRE ? "燃やす" :
+			       adtyp == AD_COLD ? "粉々にする" :
+			       adtyp == AD_DISN ? "粉砕する" : "破壊する",
+			       FALSE);
+#endif
 	}
 
 	/* explosions are noisy */
@@ -640,7 +753,10 @@
 			&& ((otmp->otyp == BOULDER) || (otmp->otyp == STATUE))
 			&& rn2(10)) {
 		if (otmp->otyp == BOULDER) {
+/*JP
 		    pline("%s apart.", Tobjnam(otmp, "break"));
+*/
+		    pline("%sは一部分が砕けた．",xname(otmp));
 		    fracture_rock(otmp);
 		    place_object(otmp, sx, sy);
 		    if ((otmp = sobj_at(BOULDER, sx, sy)) != 0) {
@@ -653,9 +769,14 @@
 
 		    if ((trap = t_at(sx,sy)) && trap->ttyp == STATUE_TRAP)
 			    deltrap(trap);
+/*JP
 		    pline("%s.", Tobjnam(otmp, "crumble"));
+*/
+		    pline("%sはこなごなになった．",xname(otmp));
 		    (void) break_statue(otmp);
+#ifndef FIX_BUG_C340_2
 		    place_object(otmp, sx, sy);	/* put fragments on floor */
+#endif
 		}
 		used_up = TRUE;
 
@@ -1009,7 +1130,10 @@
 	  EXPL_NOXIOUS, dest, isyou);
     }
     free_explode_region(gas_area);
+/*JP
     if (shop_damage) pay_for_damage("damage", FALSE);
+*/
+    if (shop_damage) pay_for_damage("傷つける", FALSE);
 }
 
 void arm_bomb(obj, yours)
diff -aurN slashem-0.0.7E6F2/src/files.c jslashem-0.0.7E6F2-J0.0.8/src/files.c
--- slashem-0.0.7E6F2/src/files.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/files.c	2004-07-27 09:01:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "dlb.h"
 
@@ -498,9 +506,15 @@
 	if (fd >= 0)
 	    level_info[lev].flags |= LFILE_EXISTS;
 	else if (errbuf)        /* failure explanation */
+#if 0 /*JP*/
 	    Sprintf(errbuf,
 		    "Cannot create file \"%s\" for level %d (errno %d).",
 		    lock, lev, errno);
+#else
+	    Sprintf(errbuf,
+		    "地下%d階のファイル\"%s\"を開けない(errno %d)．",
+		    lev, lock, errno);
+#endif
 
 	return fd;
 }
@@ -545,9 +559,15 @@
 	   settle for `lock' instead of `fq_lock' because the latter
 	   might end up being too big for nethack's BUFSZ */
 	if (fd < 0 && errbuf)
+#if 0 /*JP*/
 	    Sprintf(errbuf,
 		    "Cannot open file \"%s\" for level %d (errno %d).",
 		    lock, lev, errno);
+#else
+	    Sprintf(errbuf,
+		    "地下%d階のファイル\"%s\"を開けない(errno %d)．",
+		    lev, lock, errno);
+#endif
 
 	return fd;
 }
@@ -745,9 +765,15 @@
 # endif	/* FILE_AREAS */
 #endif
 	if (fd < 0 && errbuf) /* failure explanation */
+#if 0 /*JP*/
 	    Sprintf(errbuf,
 		    "Cannot create bones \"%s\", id %s (errno %d).",
 		    lock, *bonesid, errno);
+#else
+	    Sprintf(errbuf,
+		    "地下%d階のファイル\"%s\"を開けない(errno %d)．",
+		    *bonesid, lock, errno);
+#endif
 
 # if defined(VMS) && !defined(SECURE)
 	/*
@@ -1736,6 +1762,21 @@
 		return(fp);
 # else	/* should be only UNIX left */
 	envp = nh_getenv("HOME");
+#if 1 /*JP*/
+	if (!envp)
+		Strcpy(tmp_config, ".jslashemrc");
+	else
+		Sprintf(tmp_config, "%s/%s", envp, ".jslashemrc");
+	if ((fp = fopenp(tmp_config, "r")) != (FILE *)0)
+		return(fp);
+/* Kazuhiro Fujieda <fujieda@jaist.ac.jp> 94/6/22 */
+	if (!envp)
+		Strcpy(tmp_config, ".jnethackrc");
+	else
+		Sprintf(tmp_config, "%s/%s", envp, ".jnethackrc");
+	if ((fp = fopenp(tmp_config, "r")) != (FILE *)0)
+		return(fp);
+#endif
 	if (!envp)
 		Strcpy(tmp_config, configfile);
 	else
@@ -1887,7 +1928,11 @@
 
 	/* remove trailing whitespace */
 	bufp = eos(buf);
+#if 0 /*JP*/
 	while (--bufp > buf && isspace((int)*bufp))
+#else
+	while (--bufp > buf && isspace_8(*bufp))
+#endif
 		continue;
 
 	if (bufp <= buf)
@@ -1902,7 +1947,11 @@
 	if (!bufp) return 0;
 
 	/* skip  whitespace between '=' and value */
+#if 0 /*JP*/
 	do { ++bufp; } while (isspace((int)*bufp));
+#else
+	do { ++bufp; } while (isspace_8(*bufp));
+#endif
 
 	/* Go through possible variables */
 	/* some of these (at least LEVELS and SAVE) should now set the
@@ -2217,6 +2266,8 @@
 # endif
 #endif
 	char	buf[4*BUFSZ];
+/*JP*/
+	char	jbuf[4*BUFSZ];
 	FILE	*fp;
 	int     i;
 #ifdef PROXY_GRAPHICS
@@ -2242,10 +2293,17 @@
 	set_duplicate_opt_detection(1);
 
 	while (fgets(buf, 4*BUFSZ, fp)) {
+	    Strcpy(jbuf, str2ic(buf));
+#if 0 /*JP*/
 		if (!parse_config_line(fp, buf, tmp_ramdisk, tmp_levels)) {
 			raw_printf("Bad option line:  \"%.50s\"", buf);
 			wait_synch();
 		}
+#else
+		if (!parse_config_line(fp, jbuf, tmp_ramdisk, tmp_levels)) {
+			raw_printf("Bad option line:  \"%.50s\"", jbuf);
+		}
+#endif
 	}
 	(void) fclose(fp);
 	
diff -aurN slashem-0.0.7E6F2/src/fountain.c jslashem-0.0.7E6F2-J0.0.8/src/fountain.c
--- slashem-0.0.7E6F2/src/fountain.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/fountain.c	2004-08-05 17:02:14.000000000 +0900
@@ -4,6 +4,14 @@
 
 /* Code for drinking from fountains. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL void NDECL(dowatersnakes);
@@ -16,7 +24,10 @@
 floating_above(what)
 const char *what;
 {
+/*JP
     You("are floating high above the %s.", what);
+*/
+    You("%sの遥か上方に浮いている．", what);
 }
 
 STATIC_OVL void
@@ -27,16 +38,27 @@
 
     if (!(mvitals[PM_WATER_MOCCASIN].mvflags & G_GONE)) {
 	if (!Blind)
+#if 0 /*JP*/
 	    pline("An endless stream of %s pours forth!",
 		  Hallucination ? makeplural(rndmonnam()) : "snakes");
+#else
+	    pline("%sがどどっと流れた！",
+		  Hallucination ? makeplural(rndmonnam()) : "蛇");
+#endif
 	else
+/*JP
 	    You_hear("%s hissing!", something);
+*/
+	    You_hear("シーッという音を聞いた！");
 	while(num-- > 0)
 	    if((mtmp = makemon(&mons[PM_WATER_MOCCASIN],
 			u.ux, u.uy, NO_MM_FLAGS)) && t_at(mtmp->mx, mtmp->my))
 		(void) mintrap(mtmp);
     } else
+/*JP
 	pline_The("fountain bubbles furiously for a moment, then calms.");
+*/
+	pline("泉は突然激しく泡だち，やがて静かになった．");
 }
 
 STATIC_OVL
@@ -48,22 +70,39 @@
     if(!(mvitals[PM_WATER_DEMON].mvflags & G_GONE)) {
 	if((mtmp = makemon(&mons[PM_WATER_DEMON],u.ux,u.uy, NO_MM_FLAGS))) {
 	    if (!Blind)
+#if 0 /*JP*/
 		You("unleash %s!", a_monnam(mtmp));
+#else
+		You("%sを解き放した！", a_monnam(mtmp));
+#endif
 	    else
+#if 0 /*JP*/
 		You_feel("the presence of evil.");
+#else
+		You_feel("邪悪な存在を感じた！");
+#endif
 /* ------------===========STEPHEN WHITE'S NEW CODE============------------ */
 	/* Give those on low levels a (slightly) better chance of survival */
 	/* 35% at level 1, 30% at level 2, 25% at level 3, etc... */            
 	if (rnd(100) > (60 + 5*level_difficulty())) {
+#if 0 /*JP*/
 		pline("Grateful for %s release, %s grants you a wish!",
 		      mhis(mtmp), mhe(mtmp));
+#else
+		pline("%sは解放をとても感謝し，のぞみをかなえてくれるようだ！",
+		      mhis(mtmp));
+#endif
 		makewish();
 		mongone(mtmp);
 	    } else if (t_at(mtmp->mx, mtmp->my))
 		(void) mintrap(mtmp);
 	}
     } else
+#if 0 /*JP*/
 	pline_The("fountain bubbles furiously for a moment, then calms.");
+#else
+	pline("泉は突然激しく泡だち，やがて静かになった．");
+#endif
 }
 
 STATIC_OVL void
@@ -74,17 +113,29 @@
 	if(!(mvitals[PM_WATER_NYMPH].mvflags & G_GONE) &&
 	   (mtmp = makemon(&mons[PM_WATER_NYMPH],u.ux,u.uy, NO_MM_FLAGS))) {
 		if (!Blind)
+/*JP
 		   You("attract %s!", a_monnam(mtmp));
+*/
+		   pline("%sが現われた！", a_monnam(mtmp));
 		else
+/*JP
 		   You_hear("a seductive voice.");
+*/
+		   You_hear("魅惑的な声を聞いた．");
 		mtmp->msleeping = 0;
 		if (t_at(mtmp->mx, mtmp->my))
 		    (void) mintrap(mtmp);
 	} else
 		if (!Blind)
+/*JP
 		   pline("A large bubble rises to the surface and pops.");
+*/
+		   pline("大きな泡が沸き出てはじけた．");
 		else
+/*JP
 		   You_hear("a loud pop.");
+*/
+		   You_hear("大きなものがはじける音を聞いた．");
 }
 
 void
@@ -96,9 +147,15 @@
 	do_clear_area(u.ux, u.uy, 7, gush, (genericptr_t)&madepool);
 	if (!madepool) {
 	    if (drinking)
+/*JP
 		Your("thirst is quenched.");
+*/
+		Your("渇きは癒された．");
 	    else
+/*JP
 		pline("Water sprays all over you.");
+*/
+		pline("水しぶきがあなたにかかった．");
 	}
 }
 
@@ -120,7 +177,10 @@
 		return;
 
 	if (!((*(int *)poolcnt)++))
+/*JP
 	    pline("Water gushes forth from the overflowing fountain!");
+*/
+	    pline("泉から水がどどっと溢れ出た！");
 
 	/* Put a pool at x, y */
 	levl[x][y].typ = POOL;
@@ -137,8 +197,14 @@
 STATIC_OVL void
 dofindgem() /* Find a gem in the sparkling waters. */
 {
+/*JP
 	if (!Blind) You("spot a gem in the sparkling waters!");
+*/
+	if (!Blind) pline("きらめく水の中に宝石を見つけた！");
+/*JP
 	else You_feel("a gem here!");
+*/
+	else You_feel("宝石があるようだ！");
 	(void) mksobj_at(rnd_class(DILITHIUM_CRYSTAL, LUCKSTONE-1),
 			 u.ux, u.uy, FALSE, FALSE);
 	SET_FOUNTAIN_LOOTED(u.ux,u.uy);
@@ -163,18 +229,30 @@
 				mtmp->data == &mons[PM_WATCH_CAPTAIN]) &&
 			       couldsee(mtmp->mx, mtmp->my) &&
 			       mtmp->mpeaceful) {
+/*JP
 				pline("%s yells:", Amonnam(mtmp));
+*/
+				pline("%sは叫んだ：", Amonnam(mtmp));
+/*JP
 				verbalize("Hey, stop using that fountain!");
+*/
+				verbalize("おい，泉を汚すな！");
 				break;
 			    }
 			}
 			/* You can see or hear this effect */
+/*JP
 			if(!mtmp) pline_The("flow reduces to a trickle.");
+*/
+			if(!mtmp) pline("流れはちょろちょろになった．");
 			return;
 		}
 #ifdef WIZARD
 		if (isyou && wizard) {
+/*JP
 			if (yn("Dry up fountain?") == 'n')
+*/
+			if (yn("泉を飲みほしますか？") == 'n')
 				return;
 		}
 #endif
@@ -182,7 +260,10 @@
 		levl[x][y].typ = ROOM;
 		levl[x][y].looted = 0;
 		levl[x][y].blessedftn = 0;
+/*JP
 		if (cansee(x,y)) pline_The("fountain dries up!");
+*/
+		if (cansee(x,y)) pline("泉は干上がった！");
 		/* The location is seen if the hero/monster is invisible */
 		/* or felt if the hero is blind.			 */
 		newsym(x, y);
@@ -200,14 +281,20 @@
 	register int fate = rnd(30);
 
 	if (Levitation) {
+/*JP
 		floating_above("fountain");
+*/
+		floating_above("泉");
 		return;
 	}
 
 	if (mgkftn && u.uluck >= 0 && fate >= 10) {
 		int i, ii, littleluck = (u.uluck < 4);
 
+/*JP
 		pline("Wow!  This makes you feel great!");
+*/
+		pline("ワォ！とても気持ちよくなった！");
 		/* blessed restore ability */
 		for (ii = 0; ii < A_MAX; ii++)
 		    if (ABASE(ii) < AMAX(ii)) {
@@ -222,14 +309,20 @@
 		    if (++i >= A_MAX) i = 0;
 		}
 		display_nhwindow(WIN_MESSAGE, FALSE);
+/*JP
 		pline("A wisp of vapor escapes the fountain...");
+*/
+		pline("煙のかたまりが泉から逃げた．．．");
 		exercise(A_WIS, TRUE);
 		levl[u.ux][u.uy].blessedftn = 0;
 		return;
 	}
 
 	if (fate < 10) {
+/*JP
 		pline_The("cool draught refreshes you.");
+*/
+		pline("冷たい一杯でさっぱりした．");
 		u.uhunger += rnd(10); /* don't choke on water */
 		newuhs(FALSE);
 		if(mgkftn) return;
@@ -238,33 +331,57 @@
 
 		case 19: /* Self-knowledge */
 
+/*JP
 			You_feel("self-knowledgeable...");
+*/
+			You("自分自身が判るような気がした．．．");
 			display_nhwindow(WIN_MESSAGE, FALSE);
 			enlightenment(0);
 			exercise(A_WIS, TRUE);
+/*JP
 			pline_The("feeling subsides.");
+*/
+			pline("その感じはなくなった．");
 			break;
 
 		case 20: /* Foul water */
 
+/*JP
 			pline_The("water is foul!  You gag and vomit.");
+*/
+			pline("水はひどく不快な味がした！あなたは吐き戻した．");
 			morehungry(rn1(20, 11));
 			vomit();
 			break;
 
 		case 21: /* Poisonous */
 
+/*JP
 			pline_The("water is contaminated!");
+*/
+			pline("水は汚染されている！");
 			if (Poison_resistance) {
+#if 0 /*JP*/
 			   pline(
 			      "Perhaps it is runoff from the nearby %s farm.",
 				 fruitname(FALSE));
+#else
+			   pline(
+			      "たぶん，これは近くの%sの農場から流れている．",
+				 fruitname(FALSE));
+#endif
+/*JP
 			   losehp(rnd(4),"unrefrigerated sip of juice",
+*/
+			   losehp(rnd(4),"腐った果汁のしたたりで",
 				KILLED_BY_AN);
 			   break;
 			}
 			losestr(rn1(4,3));
+/*JP
 			losehp(rnd(10),"contaminated water", KILLED_BY);
+*/
+			losehp(rnd(10),"汚染された水で", KILLED_BY);
 			exercise(A_CON, FALSE);
 			break;
 
@@ -280,7 +397,10 @@
 		case 24: /* Curse an item */ {
 			register struct obj *obj;
 
+/*JP
 			pline("This water's no good!");
+*/
+			pline("この水はとてもまずい！");
 			morehungry(rn1(20, 11));
 			exercise(A_CON, FALSE);
 			for(obj = invent; obj ; obj = obj->nobj)
@@ -292,14 +412,29 @@
 
 			if (Blind) {
 			    if (Invisible) {
+/*JP
 				You("feel transparent.");
+*/
+			    You("透明になった気がする．");
 			    } else {
+/*JP
 			    	You("feel very self-conscious.");
+*/
+			    	You("自意識過剰に感じた．");
+/*JP
 			    	pline("Then it passes.");
+*/
+			    	pline("その感じは消えた．");
 			    }
 			} else {
+/*JP
 			   You("see an image of someone stalking you.");
+*/
+			   You("何かが自分の後をつけている映像を見た．");
+/*JP
 			   pline("But it disappears.");
+*/
+			   pline("しかし，それは消えてしまった．");
 			}
 			HSee_invisible |= FROMOUTSIDE;
 			newsym(u.ux,u.uy);
@@ -327,7 +462,10 @@
 		case 29: /* Scare */ {
 			register struct monst *mtmp;
 
+/*JP
 			pline("This water gives you bad breath!");
+*/
+			pline("水を飲んだら息が臭くなった！");
 			for(mtmp = fmon; mtmp; mtmp = mtmp->nmon)
 			    if(!DEADMONSTER(mtmp))
 				monflee(mtmp, 0, FALSE, FALSE);
@@ -341,7 +479,10 @@
 
 		default:
 
+/*JP
 			pline("This tepid water is tasteless.");
+*/
+			pline("このなまぬるい水は味がない．");
 			break;
 	    }
 	}
@@ -353,7 +494,10 @@
 register struct obj *obj;
 {
 	if (Levitation) {
+/*JP
 		floating_above("fountain");
+*/
+		floating_above("泉");
 		return;
 	}
 
@@ -366,8 +510,14 @@
 
 		if (u.ualign.type != A_LAWFUL) {
 			/* Ha!  Trying to cheat her. */
+/*JP
 			pline("A freezing mist rises from the water and envelopes the sword.");
+*/
+			pline("氷の霧が水から立ち昇り，剣をつつんだ．");
+/*JP
 			pline_The("fountain disappears!");
+*/
+			pline("泉は消えてしまった！");
 			curse(obj);
 			if (obj->spe > -6 && !rn2(3)) obj->spe--;
 			obj->oerodeproof = FALSE;
@@ -375,8 +525,14 @@
 		} else {
 			/* The lady of the lake acts! - Eric Backus */
 			/* Be *REAL* nice */
+/*JP
 	  pline("From the murky depths, a hand reaches up to bless the sword.");
+*/
+	  pline("にごった深みから，剣を祝福せんと手が伸びてきた．");
+/*JP
 			pline("As the hand retreats, the fountain disappears!");
+*/
+			pline("手が退くと，泉は消えてしまった！");
 			obj = oname(obj, artiname(ART_EXCALIBUR));
 			discover_artifact(ART_EXCALIBUR);
 			bless(obj);
@@ -411,10 +567,16 @@
 		case 14: /* Uncurse the item */
 			if(obj->cursed) {
 			    if (!Blind)
+/*JP
 				pline_The("water glows for a moment.");
+*/
+				pline("水は輝きだした．");
 			    uncurse(obj);
 			} else {
+/*JP
 			    pline("A feeling of loss comes over you.");
+*/
+			    pline("奇妙な脱力感があなたをおそった．");
 			}
 			break;
 		case 15:
@@ -441,18 +603,30 @@
 			dogushforth(FALSE);
 			break;
 		case 26: /* Strange feeling */
+/*JP
 			pline("A strange tingling runs up your %s.",
+*/
+			pline("奇妙なしびれがあなたの%sに走った．",
 							body_part(ARM));
 			break;
 		case 27: /* Strange feeling */
+/*JP
 			You_feel("a sudden chill.");
+*/
+			You("突然寒けを感じた．");
 			break;
 		case 28: /* Strange feeling */
+/*JP
 			pline("An urge to take a bath overwhelms you.");
+*/
+			pline("風呂に入りたいという欲望にかられた．");
 #ifndef GOLDOBJ
 			if (u.ugold > 10) {
 			    u.ugold -= somegold() / 10;
+/*JP
 			    You("lost some of your gold in the fountain!");
+*/
+			    You("金貨を数枚，泉に落としてしまった！");
 			    CLEAR_FOUNTAIN_LOOTED(u.ux,u.uy);
 			    exercise(A_WIS, FALSE);
 			}
@@ -471,7 +645,10 @@
 				    money -= coin_loss * denomination;				  
 				    if (!otmp->quan) delobj(otmp);
 				}
+/*JP
 			        You("lost some of your money in the fountain!");
+*/
+			        You("金貨を数枚，泉に落としてしまった！");
 				CLEAR_FOUNTAIN_LOOTED(u.ux,u.uy);
 			        exercise(A_WIS, FALSE);
                             }
@@ -490,7 +667,10 @@
 			(rnd((dunlevs_in_dungeon(&u.uz)-dunlev(&u.uz)+1)*2)+5),
 			u.ux, u.uy);
 		    if (!Blind)
+/*JP
 		pline("Far below you, you see coins glistening in the water.");
+*/
+		You("遥か下の水中に金貨の輝きをみつけた．");
 		    exercise(A_WIS, TRUE);
 		    newsym(u.ux,u.uy);
 		    break;
@@ -505,7 +685,11 @@
 register struct obj *obj;
 {
 	if (Levitation) {
+#if 0 /*JP*/
 	    floating_above("toilet");
+#else
+	    floating_above("トイレ");
+#endif
 	    return;
 	}
 	(void) get_wet(obj, FALSE);
@@ -515,14 +699,26 @@
 	    return;
 	}
 	if(is_poisonable(obj)) {
+#if 0 /*JP*/
 	    if (flags.verbose)  You("cover it in filth.");
+#else
+	    if (flags.verbose)  You("それに汚物をつけた．");
+#endif
 	    obj->opoisoned = TRUE;
 	}
 	if (obj->oclass == FOOD_CLASS) {
+#if 0 /*JP*/
 	    if (flags.verbose)  pline("My! It certainly looks tastier now...");
+#else
+	    if (flags.verbose)  pline("おや！おいしそうに見える．．．");
+#endif
 	    obj->orotten = TRUE;
 	}
+#if 0 /*JP*/
 	if (flags.verbose)  pline("Yuck!");
+#else
+	if (flags.verbose)  pline("ゲーッ！");
+#endif
 }
 
 
@@ -531,7 +727,10 @@
 int x, y;
 {
     if(cansee(x,y) || (x == u.ux && y == u.uy))
+/*JP
 	pline_The("pipes break!  Water spurts out!");
+*/
+	pline("配管が壊れ水が噴出した！");
     level.flags.nsinks--;
     levl[x][y].doormask = 0;
     levl[x][y].typ = FOUNTAIN;
@@ -545,7 +744,11 @@
 {
     register int num = rn1(5,2);
     struct monst *mtmp;
+#if 0 /*JP*/
     pline("The toilet suddenly shatters!");
+#else
+    pline("トイレは突然こなごなになった！");
+#endif
     level.flags.nsinks--;
     levl[x][y].typ = FOUNTAIN;
     level.flags.nfountains++;
@@ -553,16 +756,29 @@
     if (!rn2(3)) {
       if (!(mvitals[PM_BABY_CROCODILE].mvflags & G_GONE)) {
 	if (!Blind) {
+#if 0 /*JP*/
 	    if (!Hallucination) pline("Oh no! Crocodiles come out from the pipes!");
 	    else pline("Oh no! Tons of poopies!");
+#else
+	    if (!Hallucination) pline("うおっ！配管からクロコダイルが出てきた！");
+	    else pline("うおっ！ポパイが沢山出てきた！");
+#endif
 	} else
+#if 0 /*JP*/
 	    You("hear something scuttling around you!");
+#else
+	    pline("何かがあなたの周りを駆け回っている！");
+#endif
 	while(num-- > 0)
 	    if((mtmp = makemon(&mons[PM_BABY_CROCODILE],u.ux,u.uy, NO_MM_FLAGS)) &&
 	       t_at(mtmp->mx, mtmp->my))
 		(void) mintrap(mtmp);
       } else
+#if 0 /*JP*/
 	pline("The sewers seem strangely quiet.");
+#else
+	pline("下水道は妙に静かだ．");
+#endif
     }
 }
 
@@ -573,28 +789,56 @@
 	struct monst *mtmp;
 
 	if (Levitation) {
+/*JP
 		floating_above("sink");
+*/
+		floating_above("流し台");
 		return;
 	}
 	switch(rn2(20)) {
+/*JP
 		case 0: You("take a sip of very cold water.");
+*/
+		case 0: You("とても冷たい水を一口飲んだ．");
 			break;
+/*JP
 		case 1: You("take a sip of very warm water.");
+*/
+		case 1: You("とてもぬるい水を一口飲んだ．");
 			break;
+/*JP
 		case 2: You("take a sip of scalding hot water.");
+*/
+		case 2: You("とても熱い水を一口飲んだ．");
 			if (Fire_resistance)
+/*JP
 				pline("It seems quite tasty.");
+*/
+				pline("とてもおいしい水だ．");
+/*JP
 			else losehp(rnd(6), "sipping boiling water", KILLED_BY);
+*/
+			else losehp(rnd(6), "沸騰した水を飲んで", KILLED_BY);
 			break;
 		case 3: if (mvitals[PM_SEWER_RAT].mvflags & G_GONE)
+/*JP
 				pline_The("sink seems quite dirty.");
+*/
+				pline("流し台はとても汚ならしい．");
 			else {
 				mtmp = makemon(&mons[PM_SEWER_RAT],
 						u.ux, u.uy, NO_MM_FLAGS);
+#if 0 /*JP*/
 				if (mtmp) pline("Eek!  There's %s in the sink!",
 					(Blind || !canspotmon(mtmp)) ?
 					"something squirmy" :
 					a_monnam(mtmp));
+#else
+				if (mtmp) pline("げ！流し台に%sがいる！",
+					(Blind || !canspotmon(mtmp)) ?
+					"おぞましいもの" :
+					a_monnam(mtmp));
+#endif
 			}
 			break;
 		case 4: do {
@@ -605,59 +849,114 @@
 				}
 			} while(!otmp);
 			otmp->cursed = otmp->blessed = 0;
+#if 0 /*JP*/
 			pline("Some %s liquid flows from the faucet.",
 			      Blind ? "odd" :
 			      hcolor(OBJ_DESCR(objects[otmp->otyp])));
+#else
+			pline("蛇口から%s液体が流れた．",
+			      Blind ? "奇妙な" :
+			      hcolor(jtrns_obj('!',OBJ_DESCR(objects[otmp->otyp]))));
+#endif
 			otmp->dknown = !(Blind || Hallucination);
 			otmp->fromsink = 1; /* kludge for docall() */
 			/* dopotion() deallocs dummy potions */
 			(void) dopotion(otmp);
 			break;
 		case 5: if (!(levl[u.ux][u.uy].looted & S_LRING)) {
+#if 0 /*JP*/
 			    You("find a ring in the sink!");
+#else
+			    You("流し台に指輪をみつけた！");
+#endif
 			    (void) mkobj_at(RING_CLASS, u.ux, u.uy, TRUE);
 			    levl[u.ux][u.uy].looted |= S_LRING;
 			    exercise(A_WIS, TRUE);
 			    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 			} else pline("Some dirty water backs up in the drain.");
+#else
+			} else pline("汚ない水が排水口に流れた．");
+#endif
 			break;
 		case 6: breaksink(u.ux,u.uy);
 			break;
+#if 0 /*JP*/
 		case 7: pline_The("water moves as though of its own will!");
+#else
+		case 7: pline("水が意思を持っているかのように動いた！");
+#endif
 			if ((mvitals[PM_WATER_ELEMENTAL].mvflags & G_GONE)
 			    || !makemon(&mons[PM_WATER_ELEMENTAL],
 					u.ux, u.uy, NO_MM_FLAGS))
+#if 0 /*JP*/
 				pline("But it quiets down.");
+#else
+				pline("しかし，静かになった．");
+#endif
 			break;
+#if 0 /*JP*/
 		case 8: pline("Yuk, this water tastes awful.");
+#else
+		case 8: pline("オェ，とてもひどい味がする．");
+#endif
 			more_experienced(1,0);
 			newexplevel();
 			break;
+#if 0 /*JP*/
 		case 9: pline("Gaggg... this tastes like sewage!  You vomit.");
+#else
+		case 9: pline("ゲェー．下水のような味がする！あなたは吐き戻した．");
+#endif
 			morehungry(rn1(30-ACURR(A_CON), 11));
 			vomit();
 			break;
 		case 10:
 			/* KMH, balance patch -- new intrinsic */
+#if 0 /*JP*/
 			pline("This water contains toxic wastes!");
+#else
+			pline("この水は有毒な排水を含んでいる！");
+#endif
 			if (!Unchanging) {
 			if (!Unchanging) {
+#if 0 /*JP*/
 				You("undergo a freakish metamorphosis!");
+#else
+				You("奇形な変化をしはじめた！");
+#endif
 				polyself(FALSE);
 			}
 			}
 			break;
 		/* more odd messages --JJB */
+#if 0 /*JP*/
 		case 11: You_hear("clanking from the pipes...");
+#else
+		case 11: You_hear("配管のカチンという音を聞いた．．．");
+#endif
 			break;
+#if 0 /*JP*/
 		case 12: You_hear("snatches of song from among the sewers...");
+#else
+		case 12: You_hear("下水の中からとぎれとぎれの歌を聞いた．．．");
+#endif
 			break;
 		case 19: if (Hallucination) {
+#if 0 /*JP*/
 		   pline("From the murky drain, a hand reaches up... --oops--");
+#else
+		   pline("暗い排水口から手が伸びてきた．．--おっと--");
+#endif
 				break;
 			}
+#if 0 /*JP*/
 		default: You("take a sip of %s water.",
 			rn2(3) ? (rn2(2) ? "cold" : "warm") : "hot");
+#else
+		default: You("%s水を一口飲んだ．",
+			rn2(3) ? (rn2(2) ? "冷い" : "ぬるい") : "熱い");
+#endif
 	}
 }
 
@@ -665,11 +964,19 @@
 drinktoilet()
 {
 	if (Levitation) {
+#if 0 /*JP*/
 		floating_above("toilet");
+#else
+		floating_above("トイレ");
+#endif
 		return;
 	}
 	if ((youmonst.data->mlet == S_DOG) && (rn2(5))){
+#if 0 /*JP*/
 		pline("The toilet water is quite refreshing!");
+#else
+		pline("トイレの水はあなたをさっぱりさせた！");
+#endif
 		u.uhunger += 10;
 		return;
 	}
@@ -678,39 +985,71 @@
 		static NEARDATA struct obj *otmp;
  */
 		case 0: if (mvitals[PM_SEWER_RAT].mvflags & G_GONE)
+#if 0 /*JP*/
 				pline("The toilet seems quite dirty.");
+#else
+				pline("トイレはとても汚ならしい．");
+#endif
 			else {
 				static NEARDATA struct monst *mtmp;
 
 				mtmp = makemon(&mons[PM_SEWER_RAT], u.ux, u.uy,
 					NO_MM_FLAGS);
+#if 0 /*JP*/
 				pline("Eek!  There's %s in the toilet!",
 					Blind ? "something squirmy" :
 					a_monnam(mtmp));
+#else
+				pline("げ！トイレに%sがいる！",
+					Blind ? "おぞましいもの":
+					a_monnam(mtmp));
+#endif
 			}
 			break;
 		case 1: breaktoilet(u.ux,u.uy);
 			break;
+#if 0 /*JP*/
 		case 2: pline("Something begins to crawl out of the toilet!");
+#else
+		case 2: pline("何かがトイレから這い出てきた！");
+#endif
 			if (mvitals[PM_BROWN_PUDDING].mvflags & G_GONE
 			    || !makemon(&mons[PM_BROWN_PUDDING], u.ux, u.uy,
 					NO_MM_FLAGS))
+#if 0 /*JP*/
 				pline("But it slithers back out of sight.");
+#else
+				pline("しかしそれは滑べり落ちて消え去った．");
+#endif
 			break;
 		case 3:
 		case 4: if (mvitals[PM_BABY_CROCODILE].mvflags & G_GONE)
+#if 0 /*JP*/
 				pline("The toilet smells fishy.");
+#else
+				pline("トイレはなま臭い．");
+#endif
 			else {
 				static NEARDATA struct monst *mtmp;
 
 				mtmp = makemon(&mons[PM_BABY_CROCODILE], u.ux,
 					 u.uy, NO_MM_FLAGS);
+#if 0 /*JP*/
 				pline("Egad!  There's %s in the toilet!",
 					Blind ? "something squirmy" :
 					a_monnam(mtmp));
+#else
+				pline("うおっと！トイレに%sがいる！",
+					Blind ? "おぞましいもの":
+					a_monnam(mtmp));
+#endif
 			}
 			break;
+#if 0 /*JP*/
 		default: pline("Gaggg... this tastes like sewage!  You vomit.");
+#else
+		default: pline("ゲェー．下水のような味がする！あなたは吐き戻した．");
+#endif
 			morehungry(rn1(30-ACURR(A_CON), 11));
 			vomit();
 	}
@@ -723,7 +1062,11 @@
 register struct obj *obj;
 {
 	if (Levitation) {
+#if 0 /*JP*/
 		floating_above("fountain");
+#else
+		floating_above("泉");
+#endif
 		return;
 	}
 
@@ -737,10 +1080,17 @@
 		case 14: /* Uncurse the item */
 			if(obj->cursed) {
 			    if (!Blind)
+#if 0 /*JP*/
 				pline_The("water glows for a moment.");
+#else
+				pline_The("水が一瞬輝いた．");
+#endif
 			    uncurse(obj);
 			} else {
+/*JP
 			    pline("A feeling of loss comes over you.");
+*/
+			    pline("奇妙な脱力感があなたをおそった．");
 			}
 			break;
 		case 15:
@@ -767,18 +1117,30 @@
 			dogushforth(FALSE);
 			break;
 		case 26: /* Strange feeling */
+/*JP
 			pline("A strange tingling runs up your %s.",
+*/
+			pline("奇妙なしびれがあなたの%sに走った．",
 							body_part(ARM));
 			break;
 		case 27: /* Strange feeling */
+/*JP
 			You_feel("a sudden chill.");
+*/
+			You("突然寒けを感じた．");
 			break;
 		case 28: /* Strange feeling */
+/*JP
 			pline("An urge to take a bath overwhelms you.");
+*/
+			pline("風呂に入りたいという欲望にかられた．");
 #ifndef GOLDOBJ
 			if (u.ugold > 10) {
 			    u.ugold -= somegold() / 10;
+/*JP
 			    You("lost some of your gold in the fountain!");
+*/
+			    You("金貨を数枚，泉に落としてしまった！");
 			    CLEAR_FOUNTAIN_LOOTED(u.ux,u.uy);
 			    exercise(A_WIS, FALSE);
 			}
@@ -797,7 +1159,10 @@
 				    money -= coin_loss * denomination;				  
 				    if (!otmp->quan) delobj(otmp);
 				}
+/*JP
 			        You("lost some of your money in the fountain!");
+*/
+			        You("金貨を数枚，泉に落としてしまった！");
 			        levl[u.ux][u.uy].looted &= ~F_LOOTED;
 			        exercise(A_WIS, FALSE);
                             }
@@ -816,7 +1181,10 @@
 			(rnd((dunlevs_in_dungeon(&u.uz)-dunlev(&u.uz)+1)*2)+5),
 			u.ux, u.uy);
 		    if (!Blind)
+/*JP
 		pline("Far below you, you see coins glistening in the water.");
+*/
+		You("遥か下の水中に金貨の輝きをみつけた．");
 		    exercise(A_WIS, TRUE);
 		    newsym(u.ux,u.uy);
 		    break;
@@ -832,14 +1200,24 @@
 register struct obj *obj;
 {
 	if (Levitation) {
+/*JP
 	    floating_above("toilet");
+*/
+	    floating_above("トイレ");
 	    return;
 	}
 	if(is_poisonable(obj)) {
+/*JP
 	    if (flags.verbose)  You("cover it in filth.");
+*/
+	    if (flags.verbose)  You("それに汚物をつけた．");
 	    obj->opoisoned = TRUE;
 	}
+#if 0 /*JP*/
 	if (flags.verbose)  pline("Yuck!");
+#else
+	if (flags.verbose)  pline("ゲーッ！");
+#endif
 }
 
 void
@@ -859,38 +1237,76 @@
 			else {
 				mtmp = makemon(&mons[PM_SEWER_RAT],
 						u.ux, u.uy, NO_MM_FLAGS);
+#if 0 /*JP*/
 				pline("Eek!  There's %s in the sink!",
 					Blind ? "something squirmy" :
 					a_monnam(mtmp));
+#else
+				pline("げ！流し台に%sがいる！",
+					Blind ? "おぞましいもの":
+					a_monnam(mtmp));
+#endif
 			}
 			break;
 		case 1: if (!(levl[u.ux][u.uy].looted & S_LRING)) {
+#if 0 /*JP*/
 			    You("find a ring in the sink!");
+#else
+			    You("流し台に指輪をみつけた！");
+#endif
 			    (void) mkobj_at(RING_CLASS, u.ux, u.uy, TRUE);
 			    levl[u.ux][u.uy].looted |= S_LRING;
 			    exercise(A_WIS, TRUE);
 			    newsym(u.ux,u.uy);
+#if 0 /*JP*/
 			} else pline("Some dirty water backs up in the drain.");
+#else
+			} else pline("汚ない水が排水口に流れた．");
+#endif
 			break;
 		case 2: breaksink(u.ux,u.uy);
 			break;
+#if 0 /*JP*/
 		case 3: pline_The("water moves as though of its own will!");
+#else
+		case 3: pline("水が意思を持っているかのように動いた！");
+#endif
 			if ((mvitals[PM_WATER_ELEMENTAL].mvflags & G_GONE)
 			    || !makemon(&mons[PM_WATER_ELEMENTAL],
 					u.ux, u.uy, NO_MM_FLAGS))
+#if 0 /*JP*/
 				pline("But it quiets down.");
+#else
+				pline("しかし，静かになった．");
+#endif
 			break;
 		case 4:
+#if 0 /*JP*/
 			pline("This water contains toxic wastes!");
+#else
+			pline("この水は有毒な排水を含んでいる！");
+#endif
 			obj = poly_obj(obj, STRANGE_OBJECT);
 			u.uconduct.polypiles++;
 			break;
+#if 0 /*JP*/
 		case 5: You_hear("clanking from the pipes...");
+#else
+		case 5: You_hear("配管のカチンという音を聞いた．．．");
+#endif
 			break;
+#if 0 /*JP*/
 		case 6: You_hear("snatches of song from among the sewers...");
+#else
+		case 6: You_hear("下水の中からとぎれとぎれの歌を聞いた．．．");
+#endif
 			break;
 		case 19: if (Hallucination) {
+#if 0 /*JP*/
 		   pline("From the murky drain, a hand reaches up... --oops--");
+#else
+		   pline("暗い排水口から手が伸びてきた．．--おっと--");
+#endif
 				break;
 			}
 		default:
diff -aurN slashem-0.0.7E6F2/src/gypsy.c jslashem-0.0.7E6F2-J0.0.8/src/gypsy.c
--- slashem-0.0.7E6F2/src/gypsy.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/gypsy.c	2004-08-22 14:32:36.000000000 +0900
@@ -4,6 +4,11 @@
 #include "egyp.h"
 #include "qtext.h"
 
+/*
+**	Japanese version Copyright
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
 
 /* To do:
  *	fortune_lev()
@@ -56,22 +61,42 @@
 	long umoney;
 	umoney = money_cnt(invent);
 #endif
+#if 0 /*JP*/
 	verbalize("For %ld credit I will %s!", cost, txt);
+#else
+	verbalize("%sをするには%ldの預け金が必要よ！", txt, cost);
+#endif
 	if (EGYP(mtmp)->credit >= cost) {
+#if 0 /*JP*/
 		if (yn("Accept this offer?") == 'y') {
+#else
+		if (yn("この申し出を受けますか？") == 'y') {
+#endif
 			EGYP(mtmp)->credit -= cost;
 			return (TRUE);
 		}
 #ifndef GOLDOBJ
 	} else if (EGYP(mtmp)->credit + u.ugold >= cost)
+#if 0 /*JP*/
 		verbalize("What a pity that I can't accept gold!");
 #else
+		verbalize("金塊をもらえないなんて残念ね！");
+#endif
+#else
 	} else if (EGYP(mtmp)->credit + umoney >= cost)
+#if 0 /*JP*/
 		verbalize("What a pity that I can't accept money!");
+#else
+		verbalize("お金をもらえないなんて残念ね！");
+#endif
 #endif
 		/* Maybe you could try gambling some of it for credit... */
 	else
+#if 0 /*JP*/
 		verbalize("What a pity that you don't have enough!");
+#else
+		verbalize("あなたに十分な持ち合わせがないなんて残念ね！");
+#endif
 	return (FALSE);
 }
 
@@ -93,12 +118,20 @@
 #else
  													umoney) {		
 #endif
+#if 0 /*JP*/
 		You("don't have enough money for the minimum bet.");
+#else
+		You("賭け事をするための最小金額をも持っていない．");
+#endif
 		return (0L);
 	}
 
 	/* Prompt for an amount */
+#if 0 /*JP*/
 	Sprintf(prompt, "Bet how much (%ld to %ld)?", minimum,
+#else
+	Sprintf(prompt, "幾ら賭ける？ (%ld 〜 %ld)", minimum,
+#endif
 			EGYP(mtmp)->credit + 
 #ifndef GOLDOBJ
 													u.ugold);
@@ -110,11 +143,19 @@
 
 	/* Validate the amount */
 	if (bet == 0L) {
+#if 0 /*JP*/
 		pline("Never mind.");
+#else
+		pline("まぁ，気にしちゃ駄目よ．");
+#endif
 		return (0L);
 	}
 	if (bet < minimum) {
+#if 0 /*JP*/
 		You("must bet at least %ld.", minimum);
+#else
+		You("最低で%ldは賭けなければならない．", minimum);
+#endif
 		return (0L);
 	}
 	if (bet > EGYP(mtmp)->credit +
@@ -123,7 +164,11 @@
 #else
 								umoney) {												
 #endif
+#if 0 /*JP*/
 		You("don't have that much money to bet!");
+#else
+		You("賭けのお金が足りない！");
+#endif
 		return (0L);
 	}
 	return (bet);
@@ -133,7 +178,11 @@
 /*** Card-related functions ***/
 
 static const char *suits[CARD_SUITS] =
+#if 0 /*JP*/
 { "swords", "wands",     "shields",  "rings" };          /* Special */
+#else
+{ "剣",     "杖",        "盾",       "指輪" };           /* Special */
+#endif
 /* swords    wands/rods  roses/cups  pentacles/disks/coins  Tarot */
 /* spade     bastoni     coppe       denari                 Italian */
 /* swords    batons      cups        coins                  (translated) */
@@ -141,12 +190,18 @@
 
 
 static const char *ranks[CARD_RANKS] =
+#if 0 /*JP*/
 { "ace", "2", "3", "4", "5", "6", "7", "8", "9", "10",
    /*none*/       "jack",       "queen", "king" }; /* French */
 /* page/princess  knight/prince  queen    king        Tarot */
+#else
+{ "エース", "２", "３", "４", "５", "６", "７", "８", "９", "１０",
+   /*none*/       "ジャック",   "クイーン", "キング" }; /* French */
+#endif
 
 
 static const char *trumps[CARD_TRUMPS] =
+#if 0 /*JP*/
 {	"the Fool",               /* This is NOT a Joker */
 	"the Magician",           /* same as the Magus */
 	"the High Priestess",     /* sometimes placed after the Emperor */
@@ -171,6 +226,32 @@
 	"the Sun",
 	"Judgement",              /* sometimes Aeon */
 	"Infinity"                /* replaces the World or the Universe */
+#else
+{	"愚者",              /* This is NOT a Joker */
+	"魔術師",            /* same as the Magus */
+	"女司祭長",          /* sometimes placed after the Emperor */
+#if 0
+	"女帝",              /* not included here */
+	"皇帝",              /* not included here */
+#endif
+	"神託",              /* same as the Hierophant */
+	"恋人",
+	"戦車",
+	"力",                /* sometimes Adjustment */
+	"隠者",
+	"運命の輪",          /* sometimes Fortune */
+	"正義",              /* sometimes Lust */
+	"囚人",              /* replaces the Hanged Man */
+	"悪魔",              /* normally #15 */
+	"魔術",              /* replaces Art or Temperance */
+	"死神",              /* swapped with the Devil so it remains #13 */
+	"塔",                /* really! */
+	"星",
+	"月",
+	"太陽",
+	"審判",              /* sometimes Aeon */
+	"無限"               /* replaces the World or the Universe */
+#endif
 };
 
 
@@ -181,8 +262,11 @@
 	xchar *cards = &EGYP(mtmp)->cards[0];
 	int i, j, k;
 
-
+#if 0 /*JP*/
 	pline("%s shuffles the cards.", Monnam(mtmp));
+#else
+	pline("%sはカードをシャッフルした．", Monnam(mtmp));
+#endif
 	for (i = 0; i < CARD_TOTAL; i++)
 		/* Initialize the value */
 		cards[i] = i;
@@ -219,19 +303,35 @@
 	if (num < 0 || num >= CARD_TOTAL) {
 		/* Invalid card */
 		impossible("no such card %d", num);
+#if 0 /*JP*/
 		Strcpy(buf, "a card");
+#else
+		Strcpy(buf, "カード");
+#endif
 	} else if (card_istrump(num)) {
 		/* Handle trump cards */
 		r = card_trump(num);
 		if (!r)
+#if 0 /*JP*/
 			Sprintf(buf, "the zero of trumps (%s)", trumps[r]);
+#else
+			Sprintf(buf, "切り札のゼロ『%s』", trumps[r]);
+#endif
 		else
+#if 0 /*JP*/
 			Sprintf(buf, "the %d of trumps (%s)", r, trumps[r]);
+#else
+			Sprintf(buf, "切り札の%d『%s』", r, trumps[r]);
+#endif
 	} else {
 		/* Handle suited cards */
 		r = card_rank(num);
 		s = card_suit(num);
+#if 0 /*JP*/
 		Sprintf(buf, "the %s of %s", ranks[r], suits[s]);
+#else
+		Sprintf(buf, "%sの%s", suits[s], ranks[r]);
+#endif
 	}
 	return;
 }
@@ -265,14 +365,26 @@
 	dep = lev_by_name(name);
 	if (!dep) {
 		/* Perhaps the level doesn't exist? */
+#if 0 /*JP*/
 		verbalize("The vision is hazy.");
+#else
+		verbalize("幻像が霞んでいて見えないわ．");
+#endif
 		return;
 	}
 
 	if (dep == depth(&u.uz))
+#if 0 /*JP*/
 		verbalize("I see %s here.", txt);
+#else
+		verbalize("そこには%sが見えるわね．", txt);
+#endif
 	else {
+#if 0 /*JP*/
 		verbalize("I see %s on level %d.", txt, (int)dep);
+#else
+		verbalize("%d階に%sが見えるわね．", (int)dep, txt);
+#endif
 /*		if (gypsy_offer(mtmp, 5000L, "teleport you there"))
 			;*/
 	}
@@ -298,13 +410,21 @@
 	if (wizard) {
 		long t = -1;
 
+#if 0 /*JP*/
 		getlin("Which trump?", buf);
+#else
+		getlin("どのカードを選ぶ？", buf);
+#endif
 		(void) sscanf(buf, "%ld", &t);
 		if (t >= 0) card = t + CARD_SUITED;
 	}
 #endif
 	card_name(card, buf);
+#if 0 /*JP*/
 	verbalize("You have drawn %s.", buf);
+#else
+	verbalize("あなたは%sを引いたわ．", buf);
+#endif
 
 	if (card_istrump(card))
 		switch (card_trump(card)) {
@@ -316,21 +436,38 @@
 			if (u.uevent.udemigod)
 				resurrect();
 			else
+#if 0 /*JP*/
 				fortune_lev(mtmp, "fakewiz1",
 					"an entrance to the Wizard's tower");
+#else
+				fortune_lev(mtmp, "fakewiz1",
+					"魔法使いの塔の入口");
+#endif
 				/*fortune_lev(mtmp, &portal_level);*/
 			break;
 		case 2: /* the High Priestess */
 			if (u.uhave.amulet)
+#if 0 /*JP*/
 				verbalize("I see a high altar in the heavens.");
+#else
+				verbalize("天国に主祭壇が見えるわね．");
+#endif
 				/* Can only get there by ascending... */
 			else
+#if 0 /*JP*/
 				verbalize("I see a high altar on level %d.",
+#else
+				verbalize("%d階に主祭壇が見えるわね．",
+#endif
 						depth(&sanctum_level));
 				/* Can only get there by invocation... */
 			break;
 		case 3: /* the Oracle */
+#if 0 /*JP*/
 			fortune_lev(mtmp, "oracle", "the Oracle");
+#else
+			fortune_lev(mtmp, "oracle", "神託所");
+#endif
 			/*fortune_lev(mtmp, &oracle_level);*/
 			break;
 		case 4: /* the Lovers */
@@ -338,8 +475,13 @@
 				u.ux, u.uy, 0);
 			break;
 		case 5: /* the Chariot */
+#if 0 /*JP*/
 			if (gypsy_offer(mtmp, 5000L,
 					"teleport you to a level of your choosing")) {
+#else
+			if (gypsy_offer(mtmp, 5000L,
+					"望む階にテレポートさせる")) {
+#endif
 				incr_itimeout(&HTeleport_control, 1);
 				level_tele();
 			}
@@ -349,16 +491,31 @@
 			incr_itimeout(&HHalf_physical_damage, rn1(500, 500));
 			break;
 		case 7: /* the Hermit */
+#if 0 /*JP*/
 			You_feel("like hiding!");
+#else
+			You("隠れたいと思った！");
+#endif
 			incr_itimeout(&HTeleportation, rn1(300, 300));
 			incr_itimeout(&HInvis, rn1(500, 500));
 			newsym(u.ux, u.uy);
 			break;
 		case 8: /* the Wheel of Fortune */
 			if (Hallucination)
+#if 0 /*JP*/
 				pline("Where is Vanna?");
+#else
+				/* アメリカでの国民的ゲーム番組"Wheel Of Fortune"では
+				 * Vanna Whiteさんが司会者をしているらしい．
+				 */
+				pline("ヴァンナはどこだい？");
+#endif
 			else
+#if 0 /*JP*/
 				You_feel("lucky!");
+#else
+				pline("ラッキー！");
+#endif
 			if (u.uluck < 0)
 				u.uluck = 0;
 			else
@@ -385,23 +542,40 @@
 					|| Antimagic)
 				shieldeff(u.ux, u.uy);
 			else if(Hallucination)
+#if 0 /*JP*/
 				You("have an out of body experience.");
+#else
+				You("こんな経験したことがない．");
+#endif
 			else  {
 				killer_format = KILLED_BY;
+#if 0 /*JP*/
 				killer = "the card of Death";
+#else
+				killer = "死神のカードで";
+#endif
 				done(DIED);
 			}
 			break;
 		case 14: /* the Tower */
+#if 0 /*JP*/
 			fortune_lev(mtmp, "vlad\'s tower", "Vlad the Impaler");
+#else
+			fortune_lev(mtmp, "vlad\'s tower", "ヴラド侯の塔");
+#endif
 			/* fortune_lev(mtmp, &vlad_level); */
 			break;
 		case 15: /* the Star */
 			otyp = birthstones[getmonth()];
 			makeknown(otyp);
 			if ((otmp = mksobj(otyp, TRUE, FALSE)) != (struct obj *)0) {
+#if 0 /*JP*/
 				pline("%s reaches behind your %s and pulls out %s.",
 						Monnam(mtmp), body_part(HEAD), doname(otmp));
+#else
+				pline("%sはあなたの%sの裏に手を伸ばし，%sを引っ張り出した．",
+						Monnam(mtmp), body_part(HEAD), doname(otmp));
+#endif
 				if (pickup_object(otmp, otmp->quan, FALSE) <= 0) {
 					obj_extract_self(otmp);
 					place_object(otmp, u.ux, u.uy);
@@ -418,17 +592,33 @@
 			flags.moonphase = phase_of_the_moon();
 			switch (flags.moonphase) {
 				case NEW_MOON:
+#if 0 /*JP*/
 					pline("Be careful!  New moon tonight.");
+#else
+					pline("注意なさい！今晩は新月だから．");
+#endif
 					break;
 				case 1:	case 2:	case 3:
+#if 0 /*JP*/
 					pline_The("moon is waxing tonight.");
+#else
+					pline("今晩も月は満ちていくわ．");
+#endif
 					break;
 				case FULL_MOON:
+#if 0 /*JP*/
 					You("are lucky!  Full moon tonight.");
+#else
+					pline("ラッキーね！今晩は満月よ．");
+#endif
 					change_luck(1);
 					break;
 				case 5:	case 6:	case 7:
+#if 0 /*JP*/
 					pline_The("moon is waning tonight.");
+#else
+					pline("今晩も月は欠けていくわ．");
+#endif
 					break;
 				default:
 					impossible("wierd moonphase %d", flags.moonphase);
@@ -437,22 +627,47 @@
 			break;
 		case 17: /* the Sun */
 			if (midnight())
+#if 0 /*JP*/
 				verbalize("It is the witching hour.  Beware of the undead!");
+#else
+				verbalize("今は魔法の支配する時よ．アンデッドに気をつけなさい！");
+#endif
 			else if (night())
+#if 0 /*JP*/
 				verbalize("It is nighttime.  Beware of creatures of the night!");
+#else
+				verbalize("今は夜の支配する時よ． 夜の獣に気をつけて！");
+#endif
 			else
+#if 0 /*JP*/
 				verbalize("It is daytime.  Shouldn't you be working?");
+#else
+				verbalize("今は昼よ．働いているべきじゃないの？");
+#endif
 			break;
 		case 18: /* Judgement */
+#if 0 /*JP*/
 			fortune_lev(mtmp, "portal to quest",
 				"a portal to a quest");
+#else
+			fortune_lev(mtmp, "portal to quest",
+				"故郷");
+#endif
 			/* fortune_lev(mtmp, &quest_level); */
 			break;
 		case 19: /* Infinity */
 			if (mtmp->mcan) {
+#if 0 /*JP*/
 				verbalize("I wish I wasn't here!");
+#else
+				verbalize("わたしはここに居ないことを望むわ！");
+#endif
 				mongone(mtmp);
+#if 0 /*JP*/
 			} else if (gypsy_offer(mtmp, 10000L, "grant you a wish")) {
+#else
+			} else if (gypsy_offer(mtmp, 10000L, "願いを叶える")) {
+#endif
 				mtmp->mcan = TRUE;
 				makewish();
 			}
@@ -493,20 +708,43 @@
 
 	/* Shuffle and pick */
 	if (flags.verbose)
+#if 0 /*JP*/
 		pline("%s places three cards and rearranges them.", Monnam(mtmp));
+#else
+		pline("%sはカードを3枚，並べて置いた．", Monnam(mtmp));
+#endif
 	any.a_void = 0;	/* zero out all bits */
 	win = create_nhwindow(NHW_MENU);
 	start_menu(win);
 	any.a_char = 'l';
+#if 0 /*JP*/
 	add_menu(win, NO_GLYPH, &any , 'l', 0, ATR_NONE,
 			"Left card", MENU_UNSELECTED);
+#else
+	add_menu(win, NO_GLYPH, &any , 'l', 0, ATR_NONE,
+			"左のカード", MENU_UNSELECTED);
+#endif
 	any.a_char = 'c';
+#if 0 /*JP*/
 	add_menu(win, NO_GLYPH, &any , 'c', 0, ATR_NONE,
 			"Center card", MENU_UNSELECTED);
+#else
+	add_menu(win, NO_GLYPH, &any , 'c', 0, ATR_NONE,
+			"中央のカード", MENU_UNSELECTED);
+#endif
 	any.a_char = 'r';
+#if 0 /*JP*/
 	add_menu(win, NO_GLYPH, &any , 'r', 0, ATR_NONE,
 			"Right card", MENU_UNSELECTED);
+#else
+	add_menu(win, NO_GLYPH, &any , 'r', 0, ATR_NONE,
+			"右のカード", MENU_UNSELECTED);
+#endif
+#if 0 /*JP*/
 	end_menu(win, "Pick a card:");
+#else
+	end_menu(win, "カードを選んでください：");
+#endif
 	while (select_menu(win, PICK_ONE, &selected) != 1) ;
 	destroy_nhwindow(win);
 
@@ -525,9 +763,17 @@
 	/* Did we win? */
 	if (u.umonteluck <= rn2(MONTE_MAX)) {
 		if (u.umonteluck == 0)
+#if 0 /*JP*/
 			verbalize("You win!  Wasn't that easy?");
+#else
+			verbalize("あなたの勝ち！ 簡単じゃなかったかしら？");
+#endif
 		else
+#if 0 /*JP*/
 			verbalize("You win!");
+#else
+			verbalize("あなたの勝ち！");
+#endif
 		EGYP(mtmp)->credit += bet;
 
 		/* Make it harder for next time */
@@ -535,7 +781,11 @@
 		if (u.umonteluck > MONTE_MAX) u.umonteluck = MONTE_MAX;
 	} else {
 		card_name(rn1(2, 1), buf);
+#if 0 /*JP*/
 		verbalize("Sorry, you picked %s.  Try again.", buf);
+#else
+		verbalize("ごめんね，あなたが選んだカードは%sよ．やりなおしてちょうだい．", buf);
+#endif
 		gypsy_charge(mtmp, bet);
 
 		/* Make it a little easier for next time */
@@ -656,24 +906,45 @@
 					buf, MENU_UNSELECTED);
 		}
 		any.a_int = NINETYNINE_HAND + 1;
+#if 0 /*JP*/
 		add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
 				"Forfeit", MENU_UNSELECTED);
+#else
+		add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
+				"罰金を払う", MENU_UNSELECTED);
+#endif
+#if 0 /*JP*/
 		end_menu(win, "Play a card:");
+#else
+		end_menu(win, "カード遊び：");
+#endif
 		while (select_menu(win, PICK_ONE, &selected) != 1) ;
 		destroy_nhwindow(win);
 
 		/* Play the card */
 		which = selected[0].item.a_int-1;
 		if (which >= NINETYNINE_HAND) {
+#if 0 /*JP*/
 			You("forfeit.");
+#else
+			You("罰金を支払った．");
+#endif
 			gypsy_charge(mtmp, bet);
 			return;
 		}
 		card_name(uhand[which], buf);
 		total = nn_play(uhand[which], total);
+#if 0 /*JP*/
 		You("play %s for a total of %d.", buf, total);
+#else
+		pline("%sを出したので場の合計は%dよ．", buf, total);
+#endif
 		if (total < 0 || total > NINETYNINE_GOAL) {
+#if 0 /*JP*/
 			You("lose!");
+#else
+			You("負けた！");
+#endif
 			gypsy_charge(mtmp, bet);
 			return;
 		}
@@ -681,7 +952,11 @@
 		/* Draw a new card */
 		uhand[which] = card_draw(mtmp);
 		if (uhand[which] < 0) {
+#if 0 /*JP*/
 			pline_The("deck is empty.  You win!");
+#else
+			pline_The("山のカードがなくなったわ．あなたの勝ち！");
+#endif
 			EGYP(mtmp)->credit += bet;
 			return;
 		}
@@ -696,7 +971,11 @@
 			}
 		if (!n) {
 			/* No playable cards */
+#if 0 /*JP*/
 			pline("%s forfeits.  You win!", Monnam(mtmp));
+#else
+			pline("%sは罰金を支払った．あなたの勝ち！", Monnam(mtmp));
+#endif
 			EGYP(mtmp)->credit += bet;
 			return;
 		}
@@ -704,12 +983,20 @@
 		/* Play the card */
 		card_name(ghand[which], buf);
 		total = nn_play(ghand[which], total);
+#if 0 /*JP*/
 		pline("%s plays %s for a total of %d.", Monnam(mtmp), buf, total);
+#else
+		pline("%sは%sを出したので場の合計は%dだ．", Monnam(mtmp), buf, total);
+#endif
 
 		/* Draw a new card */
 		ghand[which] = card_draw(mtmp);
 		if (ghand[which] < 0) {
+#if 0 /*JP*/
 			pline_The("deck is empty.  You win!");
+#else
+			pline_The("山のカードがなくなったわ．あなたの勝ち！");
+#endif
 			EGYP(mtmp)->credit += bet;
 			return;
 		}
@@ -733,25 +1020,42 @@
 
 
 	/* Prompt for an item */
+#if 0 /*JP*/
 	otmp = getobj((const char *)pawnables, "pawn");
+#else
+	otmp = getobj((const char *)pawnables, "質に入れる");
+#endif
 
 	/* Is the item valid? */
 	if (!otmp) return;
 	if (!objects[otmp->otyp].oc_name_known) {
 		/* Reject unknown objects */
+#if 0 /*JP*/
 		verbalize("Is this merchandise authentic?");
+#else
+		verbalize("この品は本物かしら？");
+#endif
 		return;
 	}
 	if (otmp->otyp < DILITHIUM_CRYSTAL || otmp->otyp > LAST_GEM) {
 		/* Reject glass */
+#if 0 /*JP*/
 		verbalize("Don\'t bother with that junk!");
+#else
+		verbalize("ガラクタはお断りよ！");
+#endif
 		return;
 	}
 
 	/* Give the credit */
 	value = otmp->quan * objects[otmp->otyp].oc_cost;
+#if 0 /*JP*/
 	pline("%s gives you %ld zorkmid%s credit.", Monnam(mtmp),
 			value, plur(value));
+#else
+	pline("%sはあなたに%ldゴールド分の預け金を配当した．", Monnam(mtmp),
+			value);
+#endif
 	EGYP(mtmp)->credit += value;
 
 	/* Gypsies don't keep merchandise; it could get stolen! */
@@ -823,6 +1127,7 @@
 		return;
 
 	/* Add up your available money */
+#if 0 /*JP*/
 	You("have %ld zorkmid%s credit and are carrying %ld zorkmid%s.",
 			EGYP(mtmp)->credit, plur(EGYP(mtmp)->credit),
 #ifndef GOLDOBJ
@@ -830,6 +1135,15 @@
 #else
 			umoney, plur(umoney));			
 #endif
+#else
+	You("%ldゴールドの預け金と%ldゴールドの現金を持っている．",
+			EGYP(mtmp)->credit,
+#ifndef GOLDOBJ
+			u.ugold);
+#else
+			umoney);
+#endif
+#endif
 	money = EGYP(mtmp)->credit +
 #ifndef GOLDOBJ
 											u.ugold;
@@ -846,24 +1160,40 @@
 	any.a_char = 'f';
 	if (money >= FORTUNE_COST)
 		add_menu(win, NO_GLYPH, &any , 'f', 0, ATR_NONE,
+#if 0 /*JP*/
 				"Read your fortune", MENU_UNSELECTED);
+#else
+				"運勢を占う", MENU_UNSELECTED);
+#endif
 
 	/* Three-card monte */
 	any.a_char = 'm';
 	if (money >= MONTE_COST)
 		add_menu(win, NO_GLYPH, &any , 'm', 0, ATR_NONE,
+#if 0 /*JP*/
 				"Three-card monte", MENU_UNSELECTED);
+#else
+				"スリー・カード・モンテ", MENU_UNSELECTED);
+#endif
 
 	/* Ninety-nine */
 	any.a_char = 'n';
 	if (money >= NINETYNINE_COST)
 		add_menu(win, NO_GLYPH, &any , 'n', 0, ATR_NONE,
+#if 0 /*JP*/
 				"Ninety-nine", MENU_UNSELECTED);
+#else
+				"ナインティ・ナイン", MENU_UNSELECTED);
+#endif
 
 	/* Pawn gems (always available) */
 	any.a_char = 'p';
 	add_menu(win, NO_GLYPH, &any , 'p', 0, ATR_NONE,
+#if 0 /*JP*/
 			"Pawn gems", MENU_UNSELECTED);
+#else
+			"宝石を質に入れる", MENU_UNSELECTED);
+#endif
 
 	/* Yendorian Tarocchi */
 	any.a_char = 't';
@@ -874,10 +1204,19 @@
 	/* Help */
 	any.a_char = '?';
 		add_menu(win, NO_GLYPH, &any , '?', 0, ATR_NONE,
+#if 0 /*JP*/
 				"Help", MENU_UNSELECTED);
 
+#else
+				"ヘルプ", MENU_UNSELECTED);
+
+#endif
 	/* Display the menu */
+#if 0 /*JP*/
 	end_menu(win, "Play which game?");
+#else
+	end_menu(win, "どのゲームを選ぶ？");
+#endif
 	n = select_menu(win, PICK_ONE, &selected);
 	destroy_nhwindow(win);
 	if (n > 0) switch (selected[0].item.a_char) {
@@ -897,7 +1236,11 @@
 			tarocchi(mtmp);
 			break;
 		case '?':
+#if 0 /*JP*/
 			display_file_area(FILE_AREA_SHARE, "gypsy.txt", TRUE);
+#else
+			display_file_area(FILE_AREA_SHARE, "jgypsy.txt", TRUE);
+#endif
 			break;
 	}
 
diff -aurN slashem-0.0.7E6F2/src/hack.c jslashem-0.0.7E6F2-J0.0.8/src/hack.c
--- slashem-0.0.7E6F2/src/hack.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/hack.c	2004-08-24 12:47:10.515625000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef OVL1
@@ -155,11 +163,20 @@
 		     if (showmsg && flags.verbose) {
 			const char *what;
 			if (herb == CLOVE_OF_GARLIC)
+#if 0 /*JP*/
 			  what = "some garlic";
+#else
+			  what = "にんにく";
+#endif
 			else 
 			  what = an(xname(otmp));
+#if 0 /*JP*/
 			Norep("Suddenly you notice %s growing on the %s.",
 			      what, surface(pos.x,pos.y));
+#else
+			Norep("あなたは急に%sが%sの上で成長していることに気づいた．",
+			      what, surface(pos.x,pos.y));
+#endif
 		     }
 		  }
 		  return TRUE;
@@ -196,11 +213,20 @@
 	 if (otmp->owt <= waterforce) {
 	    if (showmsg && Underwater && 
 		(cansee(pos.x,pos.y) || cansee(x,y))) {
+#if 0 /*JP*/
 	       Norep("%s floats%s in%s the murky water.",
 		     An(xname(otmp)),
 		     (cansee(x,y) && cansee(pos.x,pos.y)) ? "" :
 		     (cansee(x,y) ? " away from you" : " towards you"),
 		     flags.verbose ? " the currents of" : "");
+#else
+	       Norep("%sは暗い水%s%s．",
+		     An(xname(otmp)),
+		     flags.verbose ? "の流れにのって" : "に浮いて",
+		     (cansee(x,y) && cansee(pos.x,pos.y)) ? "いる" :
+		     (cansee(x,y) ? "あなたから遠ざかっていく" : "あなたに近づいてくる")
+	       );
+#endif
 	    }
 	    obj_extract_self(otmp);
 	    place_object(otmp, pos.x,pos.y);
@@ -245,17 +271,31 @@
 	       obj_extract_self(otmp);
 	       if (showmsg) {
 		  if ((cansee(pos.x,pos.y) || cansee(x,y))) {
+#if 0 /*JP*/
 		     Norep("%s falls from %s%s.",
 			   cansee(pos.x,pos.y) ? An(xname(otmp)) : Something,
 			   cansee(x,y) ? "the tree" : "somewhere",
 			   (cansee(x,y) && IS_POOL(lev->typ)) ? 
 			   " into the water" : "");
+#else
+		     Norep("%sが%s%s落ちてきた．",
+			   cansee(pos.x,pos.y) ? An(xname(otmp)) : "何か",
+			   cansee(x,y) ? "木から" : "どこかから",
+			   (cansee(x,y) && IS_POOL(lev->typ)) ? 
+			   "水の中に" : "");
+#endif
 		  } else if (distu(pos.x,pos.y) < 9 && 
 			     otmp->otyp != EUCALYPTUS_LEAF) {
 		     /* a leaf is too light to cause any sound */
+#if 0 /*JP*/
 		     You_hear("a %s!",
 			      (IS_POOL(lev->typ) || IS_FOUNTAIN(lev->typ)) ? 
 			      "plop" : "splut"); /* rainforesty sounds */
+#else
+		     You("%sという音を聞いた！",
+			      (IS_POOL(lev->typ) || IS_FOUNTAIN(lev->typ)) ? 
+			      "ドプン" : "コトン"); /* 熱帯雨林の音 */
+#endif
 		  }
 	       }
 	       place_object(otmp, pos.x,pos.y);
@@ -400,7 +440,11 @@
 	nomul(0);
 	if (Levitation || Is_airlevel(&u.uz)) {
 		if (Blind) feel_location(sx,sy);
+#if 0 /*JP*/
 	    You("don't have enough leverage to push %s.", the(xname(otmp)));
+#else
+	    You("体が浮いているので%sを押せない．", the(xname(otmp)));
+#endif
 	    /* Give them a chance to climb over it? */
 	    return -1;
 	}
@@ -410,7 +454,11 @@
 #endif
 				    ) {
 		if (Blind) feel_location(sx,sy);
+#if 0 /*JP*/
 	    pline("You're too small to push that %s.", xname(otmp));
+#else
+	    You("小さすぎて%sを押せない．",xname(otmp));
+#endif
 	    goto cannot_push;
 	}
 	if (isok(rx,ry) && !IS_ROCK(levl[rx][ry].typ) &&
@@ -427,13 +475,27 @@
 		/* KMH -- Sokoban doesn't let you push boulders diagonally */
 	    if (In_sokoban(&u.uz) && u.dx && u.dy) {
 	    	if (Blind) feel_location(sx,sy);
+#if 0 /*JP*/
 	    	pline("%s won't roll diagonally on this %s.",
 	        		The(xname(otmp)), surface(sx, sy));
+#else
+	    	pline("%sの上では%sは斜めに押せない．",
+		      surface(sx, sy), The(xname(otmp)));
+#endif
 	    	goto cannot_push;
 	    }
 
+#if 0 /*JP*/
 	    if (revive_nasty(rx, ry, "You sense movement on the other side."))
 		return (-1);
+#else
+	    {
+		char jbuf[BUFSIZ];
+		Sprintf(jbuf,"%sの反対側に動きを感じた．", xname(otmp));
+		if (revive_nasty(rx, ry, jbuf))
+		    return (-1);
+	    }
+#endif
 
 	    if (mtmp && !noncorporeal(mtmp->data) &&
 		    (!mtmp->mtrapped ||
@@ -442,22 +504,34 @@
 
 		if (Blind) feel_location(sx,sy);
 		if (canspotmon(mtmp)) {
+#if 0 /*JP*/
 		    boolean by_name = (mtmp->data->geno & G_UNIQ ||
 				       mtmp->isshk || mtmp->mnamelth);
 		    if (by_name && !Hallucination)
 			pline("%s is on the other side.", Monnam(mtmp));
 		    else
 			pline("There's %s on the other side.", a_monnam(mtmp));
+#else
+		    pline("反対側に%sがいる．", a_monnam(mtmp));
+#endif
 		} else {
+#if 0 /*JP*/
 		    You_hear("a monster behind %s.", the(xname(otmp)));
+#else
+		    pline("%sの背後に怪物の気配がする．", the(xname(otmp)));
+#endif
 		    map_invisible(rx, ry);
 		}
 		if (flags.verbose)
+#if 0 /*JP*/
 		    pline("Perhaps that's why %s cannot move it.",
 #ifdef STEED
 				u.usteed ? y_monnam(u.usteed) :
 #endif
 				"you");
+#else
+		    pline("たぶんこれが，岩を動かせない理由だ．");
+#endif
 		goto cannot_push;
 	    }
 
@@ -469,9 +543,15 @@
 			place_object(otmp, rx, ry);
 			unblock_point(sx, sy);
 			newsym(sx, sy);
+#if 0 /*JP*/
 			pline("KAABLAMM!!!  %s %s land mine.",
 			      Tobjnam(otmp, "trigger"),
 			      ttmp->madeby_u ? "your" : "a");
+#else
+			pline("ちゅどーん！！%sで%s地雷の起爆スイッチが入った．",
+			      xname(otmp),
+			      ttmp->madeby_u ? "あなたの仕掛けた" : "");
+#endif
 			blow_up_landmine(ttmp);
 			/* if the boulder remains, it should fill the pit */
 			fill_pit(u.ux, u.uy);
@@ -486,7 +566,10 @@
 		       the pit will temporarily be seen even
 		       if this is one among multiple boulders */
 		    if (!Blind) viz_array[ry][rx] |= IN_SIGHT;
+/*JP
 		    if (!flooreffects(otmp, rx, ry, "fall")) {
+*/
+		    if (!flooreffects(otmp, rx, ry, "落ちる")) {
 			place_object(otmp, rx, ry);
 		    }
 		    if (mtmp && !Blind) newsym(rx, ry);
@@ -494,9 +577,13 @@
 		case HOLE:
 		case TRAPDOOR:
 		    if (Blind)
+/*JP
 			pline("Kerplunk!  You no longer feel %s.",
+*/
+			pline("ドサッ！あなたはもう%sを感じられない．",
 				the(xname(otmp)));
 		    else
+#if 0 /*JP*/
 			pline("%s%s and %s a %s in the %s!",
 			  Tobjnam(otmp,
 			   (ttmp->ttyp == TRAPDOOR) ? "trigger" : "fall"),
@@ -504,6 +591,12 @@
 			  otense(otmp, "plug"),
 			  (ttmp->ttyp == TRAPDOOR) ? "trap door" : "hole",
 			  surface(rx, ry));
+#else
+		    pline("%sは落ちて%sの%sを埋めた！",
+			  xname(otmp),
+			  surface(rx, ry),
+			  (ttmp->ttyp == TRAPDOOR) ? "落し扉" : "穴");
+#endif
 		    deltrap(ttmp);
 		    delobj(otmp);
 		    bury_objs(rx, ry);
@@ -513,11 +606,17 @@
 		case TELEP_TRAP:
 #ifdef STEED
 		    if (u.usteed)
+/*JP
 			pline("%s pushes %s and suddenly it disappears!",
+*/
+			pline("%sが%sを押すと，突然それは消滅した！",
 			      upstart(y_monnam(u.usteed)), the(xname(otmp)));
 		    else
 #endif
+/*JP
 		    You("push %s and suddenly it disappears!",
+*/
+		    You("%sを押すと，突然それは消滅した！",
 			the(xname(otmp)));
 		    if (ttmp->ttyp == TELEP_TRAP)
 			rloco(otmp);
@@ -562,14 +661,25 @@
 		if (!u.usteed) {
 #endif
 		  if (moves > lastmovetime+2 || moves < lastmovetime)
+#if 0 /*JP*/
 		    pline("With %s effort you move %s.",
 			  throws_rocks(youmonst.data) ? "little" : "great",
 			  the(xname(otmp)));
+#else
+		    pline("%s力をこめて%sを押した．",
+			  throws_rocks(youmonst.data) ? "ちょいと" : "",
+			  the(xname(otmp)));
+#endif
 		  exercise(A_STR, TRUE);
 #ifdef STEED
 		} else 
+#if 0 /*JP*/
 		    pline("%s moves %s.",
 			  upstart(y_monnam(u.usteed)), the(xname(otmp)));
+#else
+		    pline("%sは%sを動かした．",
+			  upstart(y_monnam(u.usteed)), xname(otmp));
+#endif
 #endif
 		lastmovetime = moves;
 	    }
@@ -588,26 +698,45 @@
 	nopushmsg:
 #ifdef STEED
 	  if (u.usteed)
+/*JP
 	    pline("%s tries to move %s, but cannot.",
+*/
+	    pline("%sは%sを動かそうとしたが出来なかった．",
 		  upstart(y_monnam(u.usteed)), the(xname(otmp)));
 	  else
 #endif
+/*JP
 	    You("try to move %s, but in vain.", the(xname(otmp)));
+*/
+	    You("%sを動かそうとしたが，だめだった．", the(xname(otmp)));
 		 if (Blind) feel_location(sx,sy);
 	cannot_push:
 	    if (throws_rocks(youmonst.data)) {
 #ifdef STEED
 		if (u.usteed && P_SKILL(P_RIDING) < P_BASIC) {
+#if 0 /*JP*/
 		    You("aren't skilled enough to %s %s from %s.",
 			(flags.pickup && !In_sokoban(&u.uz))
 			    ? "pick up" : "push aside",
 			the(xname(otmp)), y_monnam(u.usteed));
+#else
+		    You("%sに%sを%sるほど技量がない．",
+				mon_nam(u.usteed),
+				the(xname(otmp)), 
+				flags.pickup ? "拾わせ" : "押させ");
+#endif
 		} else
 #endif
 		{
+#if 0 /*JP*/
 		    pline("However, you can easily %s.",
 			(flags.pickup && !In_sokoban(&u.uz))
 			    ? "pick it up" : "push it aside");
+#else
+		    pline("しかし，あなたは簡単にそれを%s．",
+			(flags.pickup && !In_sokoban(&u.uz))
+			    ? "拾えた" : "別の方に押せた");
+#endif
 		    if (In_sokoban(&u.uz))
 			change_luck(-1);	/* Sokoban guilt */
 		    break;
@@ -623,7 +752,10 @@
 		 (!u.dx || !u.dy || (IS_ROCK(levl[u.ux][sy].typ)
 				     && IS_ROCK(levl[sx][u.uy].typ))))
 		|| verysmall(youmonst.data))) {
+/*JP
 		pline("However, you can squeeze yourself into a small opening.");
+*/
+		pline("しかし，あなたは小さい隙間にこじ入った．");
 		if (In_sokoban(&u.uz))
 		    change_luck(-1);	/* Sokoban guilt */
 		break;
@@ -652,8 +784,13 @@
 	(void) memset((genericptr_t)&digging, 0, sizeof digging);
 
     if (!boulder && IS_ROCK(lev->typ) && !may_dig(x,y)) {
+#if 0 /*JP*/
 	You("hurt your teeth on the %s.",
 	    IS_TREE(lev->typ) ? "tree" : "hard stone");
+#else
+	You("%sで歯を痛めた．",
+	    IS_TREE(lev->typ) ? "木" : "固い岩");
+#endif
 	nomul(0);
 	return 1;
     } else if (digging.pos.x != x || digging.pos.y != y ||
@@ -667,19 +804,34 @@
 	/* solid rock takes more work & time to dig through */
 	digging.effort =
 	    (IS_ROCK(lev->typ) && !IS_TREE(lev->typ) ? 30 : 60) + u.udaminc;
+#if 0 /*JP*/
 	You("start chewing %s %s.",
 	    (boulder || IS_TREE(lev->typ)) ? "on a" : "a hole in the",
 	    boulder ? "boulder" :
 	    IS_TREE(lev->typ) ? "tree" : IS_ROCK(lev->typ) ? "rock" : "door");
+#else
+	    You("%s%sはじめた．",
+		boulder ? "岩" :
+		IS_TREE(lev->typ) ? "木" : IS_ROCK(lev->typ) ? "石" : "扉",
+		boulder ? "を噛み" : "に穴をあけ");
+#endif
 	watch_dig((struct monst *)0, x, y, FALSE);
 	return 1;
     } else if ((digging.effort += (30 + u.udaminc)) <= 100)  {
 	if (flags.verbose)
+#if 0 /*JP*/
 	    You("%s chewing on the %s.",
 		digging.chew ? "continue" : "begin",
 		boulder ? "boulder" :
 		IS_TREE(lev->typ) ? "tree" :
 		IS_ROCK(lev->typ) ? "rock" : "door");
+#else
+	    You("%sを噛み%s．",
+		boulder ? "岩" :
+		IS_TREE(lev->typ) ? "木" :
+		IS_ROCK(lev->typ) ? "石" : "扉",
+		digging.chew ? "続けた" : "はじめた");
+#endif
 	digging.chew = TRUE;
 	watch_dig((struct monst *)0, x, y, FALSE);
 	return 1;
@@ -691,7 +843,11 @@
 
     if (boulder) {
 	delobj(boulder);		/* boulder goes bye-bye */
+#if 0 /*JP*/
 	You("eat the boulder.");	/* yum */
+#else
+	You("岩を食べた．");	/* yum */
+#endif
 
 	/*
 	 *  The location could still block because of
@@ -710,9 +866,15 @@
     } else if (IS_WALL(lev->typ)) {
 	if (*in_rooms(x, y, SHOPBASE)) {
 	    add_damage(x, y, 10L * ACURRSTR);
+/*JP
 	    dmgtxt = "damage";
+*/
+	    dmgtxt = "傷つける";
 	}
+/*JP
 	digtxt = "chew a hole in the wall.";
+*/
+	digtxt = "壁に穴を開けた．";
 	if (level.flags.is_maze_lev) {
 	    lev->typ = ROOM;
 	} else if (level.flags.is_cavernous_lev && !in_town(x, y)) {
@@ -722,14 +884,23 @@
 	    lev->doormask = D_NODOOR;
 	}
     } else if (IS_TREE(lev->typ)) {
+/*JP
 	digtxt = "chew through the tree.";
+*/
+	digtxt = "木に穴を開けた．";
 	lev->typ = ROOM;
     } else if (lev->typ == SDOOR) {
 	if (lev->doormask & D_TRAPPED) {
 	    lev->doormask = D_NODOOR;
+/*JP
 	    b_trapped("secret door", 0);
+*/
+	    b_trapped("秘密の扉", 0);
 	} else {
+/*JP
 	    digtxt = "chew through the secret door.";
+*/
+	    digtxt = "秘密の扉を噛み砕いた．";
 	    lev->doormask = D_BROKEN;
 	}
 	lev->typ = DOOR;
@@ -737,18 +908,30 @@
     } else if (IS_DOOR(lev->typ)) {
 	if (*in_rooms(x, y, SHOPBASE)) {
 	    add_damage(x, y, 400L);
+/*JP
 	    dmgtxt = "break";
+*/
+	    dmgtxt = "壊す";
 	}
 	if (lev->doormask & D_TRAPPED) {
 	    lev->doormask = D_NODOOR;
+/*JP
 	    b_trapped("door", 0);
+*/
+	    b_trapped("扉", 0);
 	} else {
+/*JP
 	    digtxt = "chew through the door.";
+*/
+	    digtxt = "扉を砕いた．";
 	    lev->doormask = D_BROKEN;
 	}
 
     } else { /* STONE or SCORR */
+/*JP
 	digtxt = "chew a passage through the rock.";
+*/
+	digtxt = "岩を噛み砕いて通り抜けた．";
 	lev->typ = CORR;
     }
 
@@ -776,7 +959,10 @@
 }
 
 #ifdef SINKS
+/*JP
 static NEARDATA const char fell_on_sink[] = "fell onto a sink";
+*/
+static NEARDATA const char fell_on_sink[] = "流し台に落ちて";
 
 STATIC_OVL void
 dosinkfall()
@@ -784,7 +970,10 @@
 	register struct obj *obj;
 
 	if (is_floater(youmonst.data) || (HLevitation & FROMOUTSIDE)) {
+/*JP
 	    You("wobble unsteadily for a moment.");
+*/
+	    You("ちょっとふらついた．");
 	} else {
 	    long save_ELev = ELevitation, save_HLev = HLevitation;
 
@@ -793,15 +982,33 @@
 	       be fatal; fortunately the fact that rings and boots
 	       are really still worn has no effect on bones data */
 	    ELevitation = HLevitation = 0L;
+/*JP
 	    You("crash to the floor!");
+*/
+	    You("床に叩きつけられた！");
+#if 0 /*JP*/
 	    losehp(rn1(8, 25 - (int)ACURR(A_CON)),
 		   fell_on_sink, NO_KILLER_PREFIX);
+#else
+	    losehp(rn1(8, 25 - (int)ACURR(A_CON)),
+		   fell_on_sink, KILLED_BY);
+#endif
 	    exercise(A_DEX, FALSE);
+/*JP
 	    selftouch("Falling, you");
+*/
+	    selftouch("落ちながら，あなたは");
 	    for (obj = level.objects[u.ux][u.uy]; obj; obj = obj->nexthere)
 		if (obj->oclass == WEAPON_CLASS || is_weptool(obj)) {
+/*JP
 		    You("fell on %s.", doname(obj));
+*/
+		    You("%sの上に落ちた．",doname(obj));
+#if 0 /*JP*/
 		    losehp(rnd(3), fell_on_sink, NO_KILLER_PREFIX);
+#else
+		    losehp(rnd(3), fell_on_sink, KILLED_BY);
+#endif
 		    exercise(A_CON, FALSE);
 		}
 	    ELevitation = save_ELev;
@@ -906,7 +1113,11 @@
 	    if (!(Passes_walls || passes_bars(youmonst.data)))
 		return FALSE;
 	    else if (In_sokoban(&u.uz)) {
+#if 0 /*JP*/
 		pline_The("Sokoban bars resist your ability.");
+#else
+		pline_The("倉庫番の鉄格子はあなたの能力に抵抗した．");
+#endif
 		return FALSE;
 	    }
 	} else if (Passes_walls && may_passwall(x,y)) {
@@ -923,9 +1134,15 @@
 	} else {
 	    if (mode == DO_MOVE) {
 		if (Is_stronghold(&u.uz) && is_db_wall(x,y))
+/*JP
 		    pline_The("drawbridge is up!");
+*/
+		    pline("跳ね橋は上っている！");
 		if (Passes_walls && !may_passwall(x,y) && In_sokoban(&u.uz))
+/*JP
 		    pline_The("Sokoban walls resist your ability.");
+*/
+	    		pline_The("倉庫番の壁はあなたの能力に抵抗した．");
 	    }
 	    return FALSE;
 	}
@@ -936,13 +1153,27 @@
 	    if (artifact_door(x, y)) {
 		if (mode == DO_MOVE) {
 		    if (amorphous(youmonst.data))
+/*JP
 			You("try to ooze under the door, but the gap is too small.");
+*/
+			You("扉の下からにじみ出ようとしたが，隙間が狭すぎた．");
 		    else if (tunnels(youmonst.data) && !needspick(youmonst.data))
+/*JP
 			You("hurt your teeth on the re-enforced door.");
+*/
+			You("堅固な扉によって歯を痛めた．");
 		    else if (x == u.ux || y == u.uy) {
-			if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) {                            pline("Ouch!  You bump into a heavy door.");
+			if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) {
+#if 0 /*JP*/
+                            pline("Ouch!  You bump into a heavy door.");
+#else
+			    pline("いてっ！あなたは重いドアにぶつかった．");
+#endif
 			    exercise(A_DEX, FALSE);
+/*JP
 			} else pline("That door is closed.");
+*/
+			} else pline("その扉は閉まっている．");
 		    }
 		}
 		return FALSE;
@@ -950,27 +1181,42 @@
 	    if (Passes_walls)
 		;	/* do nothing */
 	    else if (can_ooze(&youmonst)) {
+/*JP
 		if (mode == DO_MOVE) You("ooze under the door.");
+*/
+		if (mode == DO_MOVE) You("扉の下からにじみ出た．");
 	    } else if (tunnels(youmonst.data) && !needspick(youmonst.data)) {
 		/* Eat the door. */
 		if (mode == DO_MOVE && still_chewing(x,y)) return FALSE;
 	    } else {
 		if (mode == DO_MOVE) {
 		    if (amorphous(youmonst.data))
+/*JP
 			You("try to ooze under the door, but can't squeeze your possessions through.");
+*/
+			You("扉の下からにじみ出た，しかし持ち物はそうはいかない．");
 		    else if (x == ux || y == uy) {
 			if (Blind || Stunned || ACURR(A_DEX) < 10 || Fumbling) {
 #ifdef STEED
 			    if (u.usteed) {
+/*JP
 				You_cant("lead %s through that closed door.",
+*/
+				You_cant("%sに閉まった扉を通過させることはできない．",
 				      y_monnam(u.usteed));
 		 	    } else
 #endif
 			    {
+/*JP
 			        pline("Ouch!  You bump into a door.");
+*/
+			        pline("いてっ！頭を扉にぶつけた．");
 			        exercise(A_DEX, FALSE);
 			    }
+/*JP
 			} else pline("That door is closed.");
+*/
+			} else pline("扉は閉まっている．");
 		    }
 		} else if (mode == TEST_TRAV) goto testdiag;
 		return FALSE;
@@ -995,17 +1241,26 @@
 	/* Move at a diagonal. */
 	if (In_sokoban(&u.uz)) {
 	    if (mode == DO_MOVE)
+/*JP
 		You("cannot pass that way.");
+*/
+	    	You("通りぬけできない．");
 	    return FALSE;
 	}
 	if (bigmonst(youmonst.data)) {
 	    if (mode == DO_MOVE)
+/*JP
 		Your("body is too large to fit through.");
+*/
+		Your("体が大きすぎて通りぬけられない．");
 	    return FALSE;
 	}
 	if (invent && (inv_weight() + weight_cap() > 600)) {
 	    if (mode == DO_MOVE)
+/*JP
 		You("are carrying too much to get through.");
+*/
+		pline("物を持ちすぎて通りぬけられない．");
 	    return FALSE;
 	}
     }
@@ -1250,10 +1505,16 @@
 			: (u.uhp < 10 && u.uhp != u.uhpmax))))
 	   && !Is_airlevel(&u.uz)) {
 	    if(wtcap < OVERLOADED) {
+/*JP
 		You("don't have enough stamina to move.");
+*/
+		You("へとへとで動けない．");
 		exercise(A_CON, FALSE);
 	    } else
+/*JP
 		You("collapse under your load.");
+*/
+		pline("物を持ちすぎて倒れた．");
 	    nomul(0);
 	    return;
 	}
@@ -1267,13 +1528,22 @@
 			!Levitation && !Flying) {
 		    switch(rn2(3)) {
 		    case 0:
+/*JP
 			You("tumble in place.");
+*/
+			You("その場で倒れた．");
 			exercise(A_DEX, FALSE);
 			break;
 		    case 1:
+/*JP
 			You_cant("control your movements very well."); break;
+*/
+			You("うまく歩けない．"); break;
 		    case 2:
+/*JP
 			pline("It's hard to walk in thin air.");
+*/
+			pline("空中を歩くのは難しい．");
 			exercise(A_DEX, TRUE);
 			break;
 		    }
@@ -1304,7 +1574,12 @@
 #ifdef STEED
 		/* Check if your steed can move */
 		if (u.usteed && (!u.usteed->mcanmove || u.usteed->msleeping)) {
+#if 0 /*JP*/
 		    Your("steed doesn't respond!");
+#else
+		    /*JP 日本語には汎用的な騎乗している動物を指し示す言葉がない・・・ */
+		    Your("騎乗している%sからの反応がない！", Monnam(u.usteed));
+#endif
 		    nomul(0);
 		    return;
 		}
@@ -1360,7 +1635,10 @@
 			/* When polymorphed into a sticking monster,
 			 * u.ustuck means it's stuck to you, not you to it.
 			 */
+/*JP
 			You("release %s.", mon_nam(u.ustuck));
+*/
+			You("%sを放した．", mon_nam(u.ustuck));
 			setustuck(0);
 		    } else {
 			/* If holder is asleep or paralyzed:
@@ -1375,7 +1653,10 @@
 			switch (rn2(!u.ustuck->mcanmove ? 8 : 40)) {
 			case 0: case 1: case 2:
 			pull_free:
+/*JP
 			    You("pull free from %s.", mon_nam(u.ustuck));
+*/
+			    You("%sをひきはなした．", mon_nam(u.ustuck));
 			    setustuck(0);
 			    break;
 			case 3:
@@ -1389,7 +1670,10 @@
 			    if (u.ustuck->mtame &&
 				!Conflict && !u.ustuck->mconf)
 				goto pull_free;
+/*JP
 			    You("cannot escape from %s!", mon_nam(u.ustuck));
+*/
+			    You("%sから逃げられない！", mon_nam(u.ustuck));
 			    nomul(0);
 			    return;
 			}
@@ -1440,9 +1724,15 @@
 						    && !sensemon(mtmp))
 		    stumble_onto_mimic(mtmp);
 		else if (mtmp->mpeaceful && !Hallucination)
+/*JP
 		    pline("Pardon me, %s.", m_monnam(mtmp));
+*/
+		    pline("ちょっとごめんなさいよ，%sさん．", m_monnam(mtmp));
 		else
+/*JP
 		    You("move right into %s.", mon_nam(mtmp));
+*/
+		    You("%sのそばに移動した．", mon_nam(mtmp));
 		return;
 	    }
 	    if(flags.forcefight || !mtmp->mundetected || sensemon(mtmp) ||
@@ -1455,7 +1745,10 @@
 		    } else if (!Upolyd && u.uhp > 1) {
 			u.uhp--;
 		    } else {
+/*JP
 			You("pass out from exertion!");
+*/
+			You("気絶した．");
 			exercise(A_CON, FALSE);
 			fall_asleep(-10, FALSE);
 		    }
@@ -1465,6 +1758,10 @@
 		/* sometimes, instead of attacking, you displace it. */
 		/* Good joke, huh? */
 		if ((mtmp->data == &mons[PM_DISPLACER_BEAST]) && (!rn2(2)))
+/* DEBUG-start displader beast is displaced you with iron-ball */
+		    if (!Punished || drag_ball(x,y, &bc_control, &ballx, &bally
+			, &chainx, &chainy, &cause_delay, TRUE))
+/* DEBUG-end   displader beast is displaced you with iron-ball */
 		{
 		  /* first, move you */
 		  u.ux += u.dx;
@@ -1472,7 +1769,11 @@
 		  /* put him where you were */
 		  remove_monster(x, y);
 		  place_monster(mtmp, u.ux0, u.uy0);
+#if 0 /*JP*/
 		  You("displaced %s.", mtmp->mnamelth ? NAME(mtmp) : mon_nam(mtmp));
+#else
+		  You("%sと位置を交換した．", mtmp->mnamelth ? NAME(mtmp) : mon_nam(mtmp));
+#endif
 		  goto finish_move;
 		}
 		/* try to attack; note that it might evade */
@@ -1486,11 +1787,20 @@
 	    (memory_is_invisible(x, y) && !flags.nopick)) {
 		boolean expl = (Upolyd && attacktype(youmonst.data, AT_EXPL));
 	    	char buf[BUFSZ];
+/*JP
 		Sprintf(buf,"a vacant spot on the %s", surface(x,y));
+*/
+		Sprintf(buf,"%sの空いている場所", surface(x,y));
+#if 0 /*JP*/
 		You("%s %s.",
 		    expl ? "explode at" : "attack",
 		    !Underwater ? "thin air" :
 		    is_pool(x,y) ? "empty water" : buf);
+#else
+		You("%sを攻撃した．",
+		    !Underwater ? "何もない空間" :
+		    is_pool(x,y) ? "何もない水中" : buf);
+#endif
 		unmap_object(x, y); /* known empty -- remove 'I' if present */
 		newsym(x, y);
 		nomul(0);
@@ -1507,26 +1817,40 @@
 	/* not attacking an animal, so we try to move */
 #ifdef STEED
 	if (u.usteed && !u.usteed->mcanmove && (u.dx || u.dy)) {
+/*JP
 		pline("%s won't move!", upstart(y_monnam(u.usteed)));
+*/
+		pline("%sは動かない！", upstart(y_monnam(u.usteed)));
 		nomul(0);
 		return;
 	} else
 #endif
 	if(!youmonst.data->mmove) {
+#if 0 /*JP*/
 		You("are rooted %s.",
 		    Levitation || Is_airlevel(&u.uz) || Is_waterlevel(&u.uz) ?
 		    "in place" : "to the ground");
+#else
+ 		You("その場に立ちすくんだ．");
+#endif
 		nomul(0);
 		return;
 	}
 	if(u.utrap) {
 		if(u.utraptype == TT_PIT) {
 		    if (!rn2(2) && sobj_at(BOULDER, u.ux, u.uy)) {
+/*JP
 			Your("%s gets stuck in a crevice.", body_part(LEG));
+*/
+			Your("%sは割れ目にはまった．", body_part(LEG));
 			display_nhwindow(WIN_MESSAGE, FALSE);
 			clear_nhwindow(WIN_MESSAGE);
+/*JP
 			You("free your %s.", body_part(LEG));
+*/
+			You("%sは自由になった．", body_part(LEG));
 		    } else if (!(--u.utrap)) {
+#if 0 /*JP*/
 			You("%s to the edge of the pit.",
 				(In_sokoban(&u.uz) && Levitation) ?
 				"struggle against the air currents and float" :
@@ -1534,40 +1858,74 @@
 				u.usteed ? "ride" :
 #endif
 				"crawl");
+#else
+			You("落し穴のはじまで%s．",
+				(In_sokoban(&u.uz) && Levitation) ?
+				"空中をもがいて移動した" :
+#ifdef STEED
+				u.usteed ? "移動した" :
+#endif
+				"這っていった");
+#endif
 			fill_pit(u.ux, u.uy);
 			vision_full_recalc = 1;	/* vision limits change */
 		    } else if (flags.verbose) {
 #ifdef STEED
 			if (u.usteed)
+/*JP
 			    Norep("%s is still in a pit.",
+*/
+			    	Norep("%sはまだ落し穴にいる．",
 				  upstart(y_monnam(u.usteed)));
 			else
 #endif
 			Norep( (Hallucination && !rn2(5)) ?
+#if 0 /*JP*/
 				"You've fallen, and you can't get up." :
 				"You are still in a pit." );
+#else
+				"あなたは落ちた，起きあがれないよう．":
+			        "まだ落し穴にいる．");
+#endif
 		    }
 		} else if (u.utraptype == TT_LAVA) {
 		    if(flags.verbose) {
+/*JP
 			predicament = "stuck in the lava";
+*/
+			predicament = "溶岩にはまった";
 #ifdef STEED
 			if (u.usteed)
+#if 0 /*JP*/
 			    Norep("%s is %s.", upstart(y_monnam(u.usteed)),
 				  predicament);
+#else
+			    Norep("%sは%s．", upstart(y_monnam(u.usteed)),
+				  predicament);
+#endif
 			else
 #endif
+/*JP
 			Norep("You are %s.", predicament);
+*/
+			Norep("あなたは%s．", predicament);
 		    }
 		    if(!is_lava(x,y)) {
 			u.utrap--;
 			if((u.utrap & 0xff) == 0) {
 #ifdef STEED
 			    if (u.usteed)
+/*JP
 				You("lead %s to the edge of the lava.",
+*/
+				You("%sを溶岩の端まで導いた．",
 				    y_monnam(u.usteed));
 			    else
 #endif
+/*JP
 			     You("pull yourself to the edge of the lava.");
+*/
+			    You("溶岩の端までかろうじて，たどりついた．");
 			    u.utrap = 0;
 			}
 		    }
@@ -1575,62 +1933,113 @@
 		} else if (u.utraptype == TT_WEB) {
 		    if(uwep && uwep->oartifact == ART_STING) {
 			u.utrap = 0;
+/*JP
 			pline("Sting cuts through the web!");
+*/
+			pline("スティングはくもの巣を切りさいた！");
 			return;
 		    }
 		    if(--u.utrap) {
 			if(flags.verbose) {
+/*JP
 			    predicament = "stuck to the web";
+*/
+			    predicament = "くもの巣にひっかかった";
 #ifdef STEED
 			    if (u.usteed)
+#if 0 /*JP*/
 				Norep("%s is %s.", upstart(y_monnam(u.usteed)),
 				      predicament);
+#else
+				Norep("%sは%s．", upstart(y_monnam(u.usteed)),
+				      predicament);
+#endif
 			    else
 #endif
+/*JP
 			    Norep("You are %s.", predicament);
+*/
+			    Norep("あなたは%s．", predicament);
 			}
 		    } else {
 #ifdef STEED
 			if (u.usteed)
+/*JP
 			    pline("%s breaks out of the web.",
+*/
+				pline("%sはくもの巣を壊した．",
 				  upstart(y_monnam(u.usteed)));
 			else
 #endif
+/*JP
 			You("disentangle yourself.");
+*/
+			You("自分でほどいた．");
 		    }
 		} else if (u.utraptype == TT_INFLOOR) {
 		    if(--u.utrap) {
 			if(flags.verbose) {
+/*JP
 			    predicament = "stuck in the";
+*/
+			    predicament = "にはまった";
 #ifdef STEED
 			    if (u.usteed)
+#if 0 /*JP*/
 				Norep("%s is %s %s.",
 				      upstart(y_monnam(u.usteed)),
 				      predicament, surface(u.ux, u.uy));
+#else
+				Norep("%sは%s%s．",
+				      upstart(y_monnam(u.usteed)),
+				      predicament, surface(u.ux, u.uy));
+#endif
 			    else
 #endif
+#if 0 /*JP*/
 			    Norep("You are %s %s.", predicament,
 				  surface(u.ux, u.uy));
+#else
+			    Norep("あなたは%s%s．", surface(u.ux, u.uy),
+				  predicament);
+#endif
 			}
 		    } else {
 #ifdef STEED
 			if (u.usteed)
+/*JP
 			    pline("%s finally wiggles free.",
+*/
+				pline("%sは体をくねらせてぬけた．",
 				  upstart(y_monnam(u.usteed)));
 			else
 #endif
+/*JP
 			You("finally wiggle free.");
+*/
+			You("体をくねらせてぬけた．");
 		    }
 		} else {
 		    if(flags.verbose) {
+/*JP
 			predicament = "caught in a bear trap";
+*/
+			predicament = "熊の罠につかまった";
 #ifdef STEED
 			if (u.usteed)
+#if 0 /*JP*/
 			    Norep("%s is %s.", upstart(y_monnam(u.usteed)),
 				  predicament);
+#else
+			    Norep("%sは%s．", upstart(y_monnam(u.usteed)),
+				  predicament);
+#endif
 			else
 #endif
+/*JP
 			Norep("You are %s.", predicament);
+*/
+			Norep("あなたは%s．", predicament);
 		    }
 		    if((u.dx && u.dy) || !rn2(5)) u.utrap--;
 		}
@@ -1706,7 +2115,10 @@
 		       (bigmonst(mtmp->data) || (curr_mon_load(mtmp) > 600))) {
 		/* can't swap places when pet won't fit thru the opening */
 		u.ux = u.ux0,  u.uy = u.uy0;	/* didn't move after all */
+/*JP
 		You("stop.  %s won't fit through.", upstart(y_monnam(mtmp)));
+*/
+		You("止まった．%sは通り抜けられない．", upstart(y_monnam(mtmp)));
 	    } else {
 		char pnambuf[BUFSZ];
 
@@ -1719,8 +2131,14 @@
 		/* check for displacing it into pools and traps */
 		switch (minliquid(mtmp) ? 2 : mintrap(mtmp)) {
 		case 0:
+#if 0 /*JP*/
 		    You("%s %s.", mtmp->mtame ? "displaced" : "frightened",
 			pnambuf);
+#else
+		    You("%s%sた．",
+			pnambuf,
+			mtmp->mtame ? "と入れ換わっ" : "を怖がらせ");
+#endif
 		    break;
 		case 1:		/* trapped */
 		case 3:		/* changed levels */
@@ -1733,7 +2151,10 @@
 		     * treat a pet!  your god gets angry.
 		     */
 		    if (rn2(4)) {
+/*JP
 			You_feel("guilty about losing your pet like this.");
+*/
+			pline("このような形でペットを失うとは罪深いことだと思った．");
 			u.ugangr++;
 			adjalign(-15);
 		    }
@@ -1825,20 +2246,41 @@
 
 	    nomul(0);		/* stop running or travelling */
 	    if (Hallucination)
+#if 0 /*JP*/
 		pline("You're picking up good vibrations!");
+#else
+		pline("あなたはイイ感じの振動を感じた！");
+#endif
 	    else {
 #ifdef STEED
+/*JP
 	    if (u.usteed) Sprintf(buf, "beneath %s", y_monnam(u.usteed));
+*/
+	    if (u.usteed) Sprintf(buf, "%sの下に", y_monnam(u.usteed));
 	    else
 #endif
+/*JP
 	    if (Levitation || Flying) Strcpy(buf, "beneath you");
+*/
+	    if (Levitation || Flying) Strcpy(buf, "下方に");
+/*JP
 	    else Sprintf(buf, "under your %s", makeplural(body_part(FOOT)));
+*/
+	    else Strcpy(buf, "足元に");
 
+/*JP
 	    You_feel("a strange vibration %s.", buf);
+*/
+	    You("%s奇妙な振動を感じた．", buf);
 	    }
 	    if (otmp && otmp->spe == 7 && otmp->lamplit)
+#if 0 /*JP*/
 		pline("%s %s!", The(xname(otmp)),
 		    Blind ? "throbs palpably" : "glows with a strange light");
+#else
+	        pline("%sは%sした！", The(xname(otmp)),
+		    Blind ? "かすかに振動" : "奇妙な光を発");
+#endif
 	}
 }
 
@@ -1856,22 +2298,43 @@
 
 		if (!is_pool(u.ux,u.uy)) {
 			if (Is_waterlevel(&u.uz))
+/*JP
 				You("pop into an air bubble.");
+*/
+				You("ひょいと空気の泡に入った．");
 			else if (is_lava(u.ux, u.uy))
+#if 0 /*JP*/
 				You("leave the water...");	/* oops! */
+#else
+				You("水から抜けだした．．．");	/* oops! */
+#endif
 			else
+#if 0 /*JP*/
 				You("are on solid %s again.",
 				    is_ice(u.ux, u.uy) ? "ice" : "land");
+#else
+				You("固い%sの上にまた戻った．",
+				    is_ice(u.ux, u.uy) ? "氷" : "地面");
+#endif
 		}
 		else if (Is_waterlevel(&u.uz))
 			goto stillinwater;
 		else if (Levitation)
+/*JP
 			You("pop out of the water like a cork!");
+*/
+			You("コルクのように飛びだした！");
 		/* KMH, balance patch -- new intrinsic */
 		else if (Flying)
+/*JP
 			You("fly out of the water.");
+*/
+			You("水から飛びだした．");
 		else if (Wwalking)
+/*JP
 			You("slowly rise above the surface.");
+*/
+			You("ゆっくり水面まで上がった．");
 /*              else if (Swimming)
 			You("paddle up to the surface.");*/
 		else
@@ -1923,19 +2386,35 @@
 		mtmp->mundetected = mtmp->msleeping = 0;
 		switch(mtmp->data->mlet) {
 		    case S_PIERCER:
+/*JP
 			pline("%s suddenly drops from the %s!",
+*/
+			pline("%sが突然%sから落ちてきた！",
 			      Amonnam(mtmp), ceiling(u.ux,u.uy));
 			if(mtmp->mtame) /* jumps to greet you, not attack */
 			    ;
 			else if(uarmh && is_metallic(uarmh))
+/*JP
 			    pline("Its blow glances off your helmet.");
+*/
+			    pline("攻撃はあなたの兜をかすめただけだった．");
 			else if (u.uac + 3 <= rnd(20))
+#if 0 /*JP*/
 			    You("are almost hit by %s!",
 				x_monnam(mtmp, ARTICLE_A, "falling", 0, TRUE));
+#else
+			    You("落ちてきた%sにもう少しで当たるところだった．",
+				x_monnam(mtmp, ARTICLE_A, "", 0, TRUE));
+#endif
 			else {
 			    int dmg;
+#if 0 /*JP*/
 			    You("are hit by %s!",
 				x_monnam(mtmp, ARTICLE_A, "falling", 0, TRUE));
+#else
+			    You("落ちてきた%sに当たった！",
+				x_monnam(mtmp, ARTICLE_A, "", 0, TRUE));
+#endif
 			    dmg = d(4,6);
 			    if(Half_physical_damage) dmg = (dmg+1) / 2;
 			    mdamageu(mtmp, dmg);
@@ -1943,15 +2422,26 @@
 			break;
 		    default:	/* monster surprises you. */
 			if(mtmp->mtame)
+#if 0 /*JP*/
 			    pline("%s jumps near you from the %s.",
+  					Amonnam(mtmp));
+#else
+			    pline("%sが%sからあなたの近くに飛んできた．",
 					Amonnam(mtmp), ceiling(u.ux,u.uy));
+#endif
 			else if(mtmp->mpeaceful) {
+/*JP
 				You("surprise %s!",
+*/
+				You("%sを驚かした！",
 				    Blind && !sensemon(mtmp) ?
 				    something : a_monnam(mtmp));
 				mtmp->mpeaceful = 0;
 			} else
+/*JP
 			    pline("%s attacks you by surprise!",
+*/
+			    pline("%sは驚いてあなたを攻撃した！",
 					Amonnam(mtmp));
 			break;
 		}
@@ -2136,69 +2626,130 @@
 	     * but everything else gives a message only the first time */
 	    switch (rt) {
 		case ZOO:
+/*JP
 		    pline("Welcome to David's treasure zoo!");
+*/
+		    pline("デビット宝箱動物園にようこそ！");
 		    break;
 		case SWAMP:
+#if 0 /*JP*/
 		    pline("It %s rather %s down here.",
 			  Blind ? "feels" : "looks",
 			  Blind ? "humid" : "muddy");
+#else
+		    pline("かなり%s%s．",
+			  Blind ? "湿気がある" : "どろどろしている",
+			  Blind ? "場所のようだ" : "場所だ");
+#endif
 		    break;
 		case COURT:
+/*JP
 		    You("enter an opulent throne room!");
+*/
+		    You("華やかな玉座の間に入った！");
 		    break;
 		case REALZOO:
+/*JP
 		    You("enter a smelly zoo!");
+*/
+		    pline("すごい匂いがする！");
+		    You("動物園に入った！");
 		    break;
 		case GIANTCOURT:
-		    You("enter a giant throne room!");
+/*JP
+		    You("enter a giant throne room!");*/
+		    You("巨大な玉座がある部屋に入った！");
 		    break;
 		case DRAGONLAIR:
-		    You("enter a dragon lair...");
+/*JP
+		    You("enter a dragon lair...");*/
+		    You("ドラゴンの巣に入った．．．");
 		    break;
 		case BADFOODSHOP:
-		    You("enter an abandoned store...");
+/*JP
+		    You("enter an abandoned store...");*/
+		    You("捨てられた店に入った．．．");
 		    break;
 		case LEPREHALL:
-		    You("enter a leprechaun hall!");
+/*JP
+		    You("enter a leprechaun hall!");*/
+		    You("レプラコーンホールに入った！");
 		    break;
 		case MORGUE:
 		    if(midnight()) {
+#if 0 /*JP*/
 			const char *run = locomotion(youmonst.data, "Run");
 			pline("%s away!  %s away!", run, run);
+#else
+			const char *run = locomotion(youmonst.data, "走れ");
+			pline("%s！%s！逃げろ！", run, run);
+#endif
 		    } else
+/*JP
 			You("have an uncanny feeling...");
+*/
+			You("不気味な感じがした．．．");
 		    break;
 		case BEEHIVE:
+/*JP
 		    You("enter a giant beehive!");
+*/
+		    You("巨大な蜂の巣に入った！");
 		    break;
 		case LEMUREPIT:
+/*JP
 		    You("enter a pit of screaming lemures!");
+*/
+		    You("叫喚のレムレースの住み処に入った！");
 		    break;
 		case MIGOHIVE:
+/*JP
 		    You("enter a strange hive!");
+*/
+		    You("奇妙な巣の中に入った！");
 		    break;
 		case FUNGUSFARM:
+/*JP
 		    You("enter a room full of fungi!");
+*/
+		    You("キノコで一杯の部屋に入った！");
 		    break;
 		case COCKNEST:
+/*JP
 		    You("enter a disgusting nest!");
+*/
+		    You("むっとする臭いのする鳥の巣に入った！");
 		    break;
 		case ANTHOLE:
+/*JP
 		    You("enter an anthole!");
+*/
+		    You("アリの巣に入った！");
 		    break;
 		case BARRACKS:
 		    if(monstinroom(&mons[PM_SOLDIER], roomno) ||
 			monstinroom(&mons[PM_SERGEANT], roomno) ||
 			monstinroom(&mons[PM_LIEUTENANT], roomno) ||
 			monstinroom(&mons[PM_CAPTAIN], roomno))
+/*JP
 			You("enter a military barracks!");
+*/
+			You("軍人の兵舍に入った！");
 		    else
+/*JP
 			You("enter an abandoned barracks.");
+*/
+			You("放置されたままの兵舍に入った．");
 		    break;
 		case DELPHI:
 		    if(monstinroom(&mons[PM_ORACLE], roomno))
+#if 0 /*JP*/
 			verbalize("%s, %s, welcome to Delphi!",
 					Hello((struct monst *) 0), plname);
+#else
+			verbalize("おお%s，デルファイの神託所によくぞまいられた！",
+					plname);
+#endif
 		    break;
 		case TEMPLE:
 		    intemple(roomno + ROOMOFFSET);
@@ -2270,12 +2821,22 @@
 	if(u.uswallow) {
 	    if (!u.ustuck->minvent) {
 		if (is_animal(u.ustuck->data)) {
+#if 0 /*JP*/
 		    You("pick up %s tongue.",
 				    s_suffix(mon_nam(u.ustuck)));
 		    pline("But it's kind of slimy, so you drop it.");
+#else
+		    You("%sの舌を拾った．", mon_nam(u.ustuck));
+		    pline("しかし，それはぬるぬるして不快だったので捨ててしまった．");
+#endif
 		} else
+#if 0 /*JP*/
 		    You("don't %s anything in here to pick up.",
 			  Blind ? "feel" : "see");
+#else
+		    pline("ここには拾えるものがない%s．",
+			  Blind ? "ようだ" : "");
+#endif
 		return(1);
 	    } else {
 	    	int tmpcount = -count;
@@ -2285,36 +2846,58 @@
 	if(is_pool(u.ux, u.uy)) {
 	    if (Wwalking || is_floater(youmonst.data) || is_clinger(youmonst.data)
 			|| (Flying && !Breathless)) {
+/*JP
 		You("cannot dive into the water to pick things up.");
+*/
+		You("物を拾いあげるために水に飛びこめない．");
 		return(0);
 	    } else if (!Underwater) {
+#if 0 /*JP*/
 		You_cant("even see the bottom, let alone pick up %s.",
 				something);
+#else
+		pline("底さえ見えない，拾うのはやめよう．");
+#endif
 		return(0);
 	    }
 	}
 	if (is_lava(u.ux, u.uy)) {
 	    if (Wwalking || is_floater(youmonst.data) || is_clinger(youmonst.data)
 			|| (Flying && !Breathless)) {
+/*JP
 		You_cant("reach the bottom to pick things up.");
+*/
+		You_cant("物を拾い上げるために底までいけない．");
 		return(0);
 	    } else if (!likes_lava(youmonst.data)) {
+/*JP
 		You("would burn to a crisp trying to pick things up.");
+*/
+		You("拾い上げようとしたら丸焦げになってしまうだろう．");
 		return(0);
 	    }
 	}
 	if(!OBJ_AT(u.ux, u.uy)) {
+/*JP
 		There("is nothing here to pick up.");
+*/
+		pline("ここには拾えるものはない．");
 		return(0);
 	}
 	if (!can_reach_floor()) {
 #ifdef STEED
 		if (u.usteed && P_SKILL(P_RIDING) < P_BASIC)
+/*JP
 		    You("aren't skilled enough to reach from %s.",
+*/
+			You("まだ十分に技量を積んでいないので，%sから届かない．",
 			y_monnam(u.usteed));
 		else
 #endif
+/*JP
 		You("cannot reach the %s.", surface(u.ux,u.uy));
+*/
+		You("%sにたどりつくことができない．", surface(u.ux,u.uy));
 		return(0);
 	}
 
@@ -2326,7 +2909,10 @@
 		 */
 		if ((traphere->ttyp == PIT || traphere->ttyp == SPIKED_PIT) &&
 		     (!u.utrap || (u.utrap && u.utraptype != TT_PIT))) {
+/*JP
 			You("cannot reach the bottom of the pit.");
+*/
+			You("落し穴の底に%sが届かなかった．", body_part(HAND));
 			return(0);
 		}
 	}
@@ -2505,20 +3091,38 @@
 	const char *who;
 	int i, powercnt;
 
+#if 0 /*JP*/
 	who = (Role_if(PM_WIZARD) || Role_if(PM_VALKYRIE)) ?
 		urole.name.m : "Elf";
+#else
+	who = (Role_if(PM_WIZARD) || Role_if(PM_VALKYRIE)) ?
+		urole.jname.m : "エルフ";
+#endif
 	if (u.uhp == 1) {
+/*JP
 	    pline("%s is about to die.", who);
+*/
+	    pline("%sは死にかけている．", who);
 	} else {
 	    for (i = 0, powercnt = 0; i < SIZE(powers); ++i)
 		if (u.uprops[powers[i]].intrinsic & INTRINSIC) ++powercnt;
 
+#if 0 /*JP*/
 	    pline(powercnt >= 4 ? "%s, all your powers will be lost..."
 				: "%s, your life force is running out.", who);
+#else
+	    pline(powercnt >= 4 ? "%s，あなたの全ての力は失われつつある．．．"
+				: "%s，あなたの生命力は尽きようとしている．．．", who);
+#endif
 	}
     } else {
+#if 0 /*JP*/
 	You_hear(u.uhp == 1 ? "the wailing of the Banshee..."
 			    : "the howling of the CwnAnnwn...");
+#else
+	You_hear(u.uhp == 1 ? "バンシーのすすり泣きが聞こえる．．．"
+			    : "クーン・アンヌーンの遠吠が聞こえる．．．");
+#endif
     }
 }
 
@@ -2592,7 +3196,10 @@
 	/* [max] Invulnerable no dmg */
 	if (Invulnerable) {
 		n = 0;
+/*JP
 		pline("You are unharmed!");
+*/
+		pline("あなたは傷つかない！");
 		/* NOTE: DO NOT RETURN - losehp is also called to check for death 
 		 * via u.uhp < 1
 		 */
@@ -2620,7 +3227,10 @@
 	if(u.uhp < 1) {
 		killer_format = k_format;
 		killer = knam;		/* the thing that killed you */
+/*JP
 		You("die...");
+*/
+		pline("あなたは死にました．．．");
 		done(DIED);
 	} else if (n > 0 && u.uhp*10 < u.uhpmax) {
 		maybe_wail();
@@ -2732,7 +3342,10 @@
 	if(str)
 	    pline(str);
 	else
+/*JP
 	    You_cant("do that while carrying so much stuff.");
+*/
+	    You("沢山ものを持ちすぎているので，そんなことはできない．");
 	return 1;
     }
     return 0;
diff -aurN slashem-0.0.7E6F2/src/hacklib.c jslashem-0.0.7E6F2-J0.0.8/src/hacklib.c
--- slashem-0.0.7E6F2/src/hacklib.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/hacklib.c	2004-06-10 08:55:14.000000000 +0900
@@ -3,6 +3,11 @@
 /* Copyright (c) Robert Patrick Rankin, 1991		  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+	Y2K problem fixed
+	by Issei Numata		1 Nov, 1999	
+ */
+
 /* We could include only config.h, except for the overlay definitions... */
 #include "hack.h"
 /*=
@@ -144,6 +149,19 @@
     return s;
 }
 
+#if 1 /*JP*/
+/* there are no `possessive' in Japanese	*/
+/* by issei@jaist.ac.jp                        	*/
+char *
+s_suffix(s)
+     const char *s;
+{
+  Static char buf[BUFSZ];
+
+  Strcpy(buf, s);
+  return buf;
+}
+#else
 char *
 s_suffix(s)		/* return a name converted to possessive */
     const char *s;
@@ -159,6 +177,7 @@
 	Strcat(buf, "'s");
     return buf;
 }
+#endif
 
 char *
 xcrypt(str, buf)	/* trivial text encryption routine (see makedefs) */
@@ -521,7 +540,11 @@
 yymmdd(date)
 time_t date;
 {
+#if 0 /*JP*/
 	Static char datestr[10];
+#else
+	Static char datestr[16];
+#endif
 	struct tm *lt;
 
 	if (date == 0)
@@ -533,8 +556,17 @@
 		lt = localtime(&date);
 #endif
 
+#if 0 /*JP*/
 	Sprintf(datestr, "%02d%02d%02d",
 		lt->tm_year, lt->tm_mon + 1, lt->tm_mday);
+#else
+/*
+  Y2K problem fixed (by issei 1 Nov 1999)
+  now yymmdd returned 8 degits format like as '20000101'
+ */
+	Sprintf(datestr, "%04d%02d%02d",
+		lt->tm_year + 1900, lt->tm_mon + 1, lt->tm_mday);
+#endif
 	return(datestr);
 }
 #endif
diff -aurN slashem-0.0.7E6F2/src/invent.c jslashem-0.0.7E6F2-J0.0.8/src/invent.c
--- slashem-0.0.7E6F2/src/invent.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/invent.c	2004-06-28 17:53:08.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #define NOINVSYM	'#'
@@ -422,7 +430,11 @@
 	  /*       away. Should monsters do the same?  */
 
 	  if (mon == &youmonst) {
+#if 0 /*JP*/
 	    You("extinguish %s before putting it away.", 
+#else
+	    You("%sを片付ける前に灯を消した．", 
+#endif
 		yname(obj));
 	    end_burn(obj, TRUE);
 	  }
@@ -687,8 +699,12 @@
 currency(amount)
 long amount;
 {
+#if 0 /*JP*/
 	if (amount == 1L) return "zorkmid";
 	else return "zorkmids";
+#else
+	return "ゴールド";
+#endif
 }
 
 boolean
@@ -801,7 +817,12 @@
 taking_off(action)
 const char *action;
 {
+#if 0 /*JP*/
     return !strcmp(action, "take off") || !strcmp(action, "remove");
+#else
+    return !strcmp(action, "take off") || !strcmp(action, "remove")
+        || !strcmp(action, "脱ぐ") || !strcmp(action, "はずす") || !strcmp(action, "装備を解く");
+#endif
 }
 
 /* match the prompt for either 'W' or 'P' command */
@@ -809,7 +830,11 @@
 putting_on(action)
 const char *action;
 {
+#if 0 /*JP*//*例によってハードコーディング。do_wear.c */
     return !strcmp(action, "wear") || !strcmp(action, "put on");
+#else
+    return !strcmp(action, "身につける");
+#endif
 }
 
 STATIC_OVL int
@@ -847,30 +872,68 @@
 		    (otmp->oclass == TOOL_CLASS &&
 		     otyp != BLINDFOLD && otyp != TOWEL && otyp != LENSES)))
 /*add check for improving*/
+#if 0 /*JP*/
                 || ( (!strcmp(word, "wield") || !strcmp(word, "improve")) &&
+#else
+                || ( (!strcmp(word, "wield") || !strcmp(word, "装備する")
+                   || !strcmp(word, "improve") || !strcmp(word, "鍛える")) &&
+#endif
 		    (otmp->oclass == TOOL_CLASS && !is_weptool(otmp)))
+#if 0 /*JP*/
 		|| (!strcmp(word, "eat") && !is_edible(otmp))
+#else
+		|| ((!strcmp(word, "eat") || !strcmp(word, "食べる")) && !is_edible(otmp))
+#endif
+#if 0 /*JP*/
 		|| (!strcmp(word, "revive") && otyp != CORPSE) /* revive */
+#else
+		|| ((!strcmp(word, "revive") || !strcmp(word, "蘇生させる")) && otyp != CORPSE) /* revive */
+#endif
+#if 0 /*JP*/
 		|| (!strcmp(word, "sacrifice") &&
+#else
+		|| ((!strcmp(word, "sacrifice") || !strcmp(word, "捧げる")) &&
+#endif
 		    (otyp != CORPSE &&
 		     otyp != SEVERED_HAND &&                    
 		     otyp != EYEBALL &&	/* KMH -- fixed */
 		     otyp != AMULET_OF_YENDOR && otyp != FAKE_AMULET_OF_YENDOR))
+#if 0 /*JP*/
 		|| (!strcmp(word, "write with") &&
+#else
+		|| ((!strcmp(word, "write with") || !strcmp(word, "使って書く")) &&
+#endif
 		    (otmp->oclass == TOOL_CLASS &&
 		     otyp != MAGIC_MARKER && otyp != TOWEL))
+#if 0 /*JP*/
 		|| (!strcmp(word, "tin") &&
+#else
+		|| ((!strcmp(word, "tin")||!strcmp(word,"缶詰めにする")) &&
+#endif
 		    (otyp != CORPSE || !tinnable(otmp)))
+#if 0 /*JP*/
 		|| (!strcmp(word, "rub") &&
+#else
+		|| ((!strcmp(word, "rub") || !strcmp(word, "こする")) &&
+#endif
 		    ((otmp->oclass == TOOL_CLASS &&
 		      otyp != OIL_LAMP && otyp != MAGIC_LAMP &&
 		      otyp != BRASS_LANTERN) ||
 		     (otmp->oclass == GEM_CLASS && !is_graystone(otmp))))
+#if 0 /*JP*/
 		|| (!strncmp(word, "rub on the stone", 16) &&
+#else
+		|| ((!strncmp(word, "rub on the stone", 16) || !strncmp(word, "石でこする", 10))&&
+#endif
 		    *let == GEM_CLASS &&	/* using known touchstone */
 		    otmp->dknown && objects[otyp].oc_name_known)
+#if 0 /*JP*/
 		|| ((!strcmp(word, "use or apply") ||
 			!strcmp(word, "untrap with")) &&
+#else
+		|| ((!strcmp(word, "use or apply") || !strcmp(word, "使う") ||
+			!strcmp(word, "untrap with") || !strcmp(word, "使って解除する")) &&
+#endif
 		     /* Picks, axes, pole-weapons, bullwhips */
 		    ((otmp->oclass == WEAPON_CLASS && !is_pick(otmp) &&
 #ifdef FIREARMS
@@ -888,13 +951,21 @@
 		     (otyp != POT_OIL || !otmp->dknown ||
 		      !objects[POT_OIL].oc_name_known) &&
 		      /* water is only for untrapping */
+#if 0 /*JP*/
 		     (strcmp(word, "untrap with") || 
+#else
+		     (strcmp(word, "untrap with") || strcmp(word, "使って解除する") || 
+#endif
 		      otyp != POT_WATER || !otmp->dknown ||
 		      !objects[POT_WATER].oc_name_known)) ||
 		     (otmp->oclass == FOOD_CLASS &&
 		      otyp != CREAM_PIE && otyp != EUCALYPTUS_LEAF) ||
 		     (otmp->oclass == GEM_CLASS && !is_graystone(otmp))))
+#if 0 /*JP*/
 		|| (!strcmp(word, "invoke") &&
+#else
+		|| ((!strcmp(word, "invoke") || !strcmp(word, "魔力を使う")) &&
+#endif
 		    (!otmp->oartifact && !objects[otyp].oc_unique &&
 		     (otyp != FAKE_AMULET_OF_YENDOR || otmp->known) &&
 		     otyp != CRYSTAL_BALL &&	/* #invoke synonym for apply */
@@ -903,12 +974,29 @@
 		     otyp != MIRROR && otyp != MAGIC_LAMP &&
 		     (otyp != OIL_LAMP ||	/* don't list known oil lamp */
 		      (otmp->dknown && objects[OIL_LAMP].oc_name_known))))
+#if 0 /*JP*/
 		|| (!strcmp(word, "untrap with") &&
+#else
+		|| ((!strcmp(word, "untrap with") || !strcmp(word, "使って解除する")) &&
+#endif
 		    (otmp->oclass == TOOL_CLASS && otyp != CAN_OF_GREASE))
+#if 0 /*JP*/
 		|| (!strcmp(word, "charge") && !is_chargeable(otmp))
+#else
+		|| ((!strcmp(word, "charge") || !strcmp(word, "充填する")) && !is_chargeable(otmp))
+#endif
+#if 0 /*JP*/
 		|| (!strcmp(word, "poison") && !is_poisonable(otmp))
+#else
+		|| ((!strcmp(word, "poison") || !strcmp(word, "毒を塗る")) && !is_poisonable(otmp))
+#endif
+#if 0 /*JP*/
 		|| ((!strcmp(word, "draw blood with") ||
 			!strcmp(word, "bandage your wounds with")) &&
+#else
+		|| ((!strcmp(word, "draw blood with") || !strcmp(word, "採血する") ||
+		     !strcmp(word, "bandage your wounds with") || !strcmp(word, "傷に包帯を巻く")) &&
+#endif
 		    (otmp->oclass == TOOL_CLASS && otyp != MEDICAL_KIT))
 		    )
 			return 2;
@@ -941,6 +1029,13 @@
 !!!! may be able to remove "usegold"
 #endif
  */
+/*JP
+** word には動詞が入る．
+**
+** 日本語では，「どれを書きますか」より「どれに書きますか」の方が自然なので，
+** 最初の一文字に「に」や「の」を指定した場合は助詞を変更する．
+**
+*/
 struct obj *
 getobj(let,word)
 register const char *let,*word;
@@ -970,6 +1065,20 @@
 	struct obj *floorchain;
 	int floorfollow;
 
+#if 1 /*JP*/
+	const char *joshi = "を";
+	const char *what = "どれ";
+
+	if(!strncmp(word, "に", 2)){
+	  word += 2;
+	  joshi = "に";
+	}
+	else if(!strncmp(word, "の", 2)){
+	  word += 2;
+	  joshi = "の";
+	  what = "ど";
+	}
+#endif
 	if(*let == ALLOW_COUNT) let++, allowcnt = 1;
 #ifndef GOLDOBJ
 	if(*let == COIN_CLASS) let++,
@@ -979,9 +1088,15 @@
 #endif
 
 	/* Equivalent of an "ugly check" for gold */
+#if 0 /*JP*/
 	if (usegold && !strcmp(word, "eat") &&
 	    (!metallivorous(youmonst.data)
 	     || youmonst.data == &mons[PM_RUST_MONSTER]))
+#else
+	if (usegold && (!strcmp(word, "eat") || !strcmp(word, "食べる")) &&
+	    (!metallivorous(youmonst.data)
+	     || youmonst.data == &mons[PM_RUST_MONSTER]))
+#endif
 #ifndef GOLDOBJ
 		usegold = allowgold = FALSE;
 #else
@@ -1010,11 +1125,21 @@
 	 * them is handled a bit differently (and also requires that we set
 	 * allowall in the caller)
 	 */
+#if 0 /*JP*/
 	if(allowall && !strcmp(word, "read")) allowall = FALSE;
+#else
+	if(allowall && (!strcmp(word, "read") || !strcmp(word, "読む")))
+	  allowall = FALSE;
+#endif
 
 	/* another ugly check: show boulders (not statues) */
 	if(*let == WEAPON_CLASS &&
+#if 0 /*JP*/
 	   !strcmp(word, "throw") && throws_rocks(youmonst.data))
+#else
+	   (!strcmp(word, "throw") || !strcmp(word, "投げる"))
+	   && throws_rocks(youmonst.data))
+#endif
 	    useboulder = TRUE;
 
 	if(allownone) *bp++ = '-';
@@ -1056,7 +1181,10 @@
 	    } else {
 
 		/* "ugly check" for reading fortune cookies, part 2 */
+/*JP
 		if ((!strcmp(word, "read") &&
+*/
+		if (((!strcmp(word, "read")||!strcmp(word, "読む")) &&
 		    (otmp->otyp == FORTUNE_COOKIE
 #ifdef TOURIST
 			|| otmp->otyp == T_SHIRT
@@ -1093,15 +1221,24 @@
 	   !allowgold &&
 #endif
 	   !allowfloor && !allowthisplace) {
+#if 0 /*JP*/
 		You("don't have anything %sto %s.",
 			foox ? "else " : "", word);
+#else
+		You("%s%sものを持っていない．",
+			foox ? "他に" : "", jconj(word, "れる"));
+#endif
 		return((struct obj *)0);
 	}
 	
 	for(;;) {
 		cnt = 0;
 		if (allowcnt == 2) allowcnt = 1;  /* abort previous count */
+#if 0 /*JP*/
 		Sprintf(qbuf, "What do you want to %s? [", word);
+#else
+		Sprintf(qbuf, "%s%s%sか？[", what, joshi, jconj(word,"ます"));
+#endif
 		bp = eos(qbuf);
 		if (buf[0]) {
 		    Sprintf(bp, "%s or ?", buf);
@@ -1136,7 +1273,10 @@
 			ilet = readchar();
 		}
 		if(digit(ilet)) {
+/*JP
 			pline("No count allowed with this command.");
+*/
+			pline("このコマンドに数字はつかえない．");
 			continue;
 		}
 		if(index(quitchars,ilet)) {
@@ -1149,16 +1289,23 @@
 		}
 		if(ilet == def_oc_syms[COIN_CLASS]) {
 			if (!usegold) {
+#if 0 /*JP*/
 			    if (!strncmp(word, "rub on ", 7)) {
 				/* the dangers of building sentences... */
 				You("cannot rub gold%s.", word + 3);
 			    } else {
 				You("cannot %s gold.", word);
 			    }
+#else
+			    You("金貨%s%sことはできない．", joshi, word);
+#endif
 			    return(struct obj *)0;
 #ifndef GOLDOBJ
 			} else if (!allowgold) {
+/*JP
 				You("are not carrying any gold.");
+*/
+				You("一銭も持ってない．");
 				return(struct obj *)0;
 #endif
 			} 
@@ -1170,7 +1317,10 @@
 			 * from Larn.
 			 */
 			if(cnt < 0) {
+/*JP
 	pline_The("LRS would be very interested to know you have that much.");
+*/
+	pline("その技はとあるゲームのカジノで使えたけど，もはや使えないよ．");
 				return(struct obj *)0;
 			}
 
@@ -1196,10 +1346,18 @@
 			pline(silly_thing_to, word);
 			return(struct obj *)0;
 		    } else if (!allowfloor) {
+#if 0 /*JP*/
 			pline("There's nothing here to %s.", word);
+#else
+			pline("そこには%sものがない．", word);
+#endif
 			return(struct obj *)0;
 		    }
+#if 0 /*JP*/
 		    Sprintf(qbuf, "%s what?", word);
+#else
+		    Sprintf(qbuf, "何を%s？", word);
+#endif
 		    n = query_objlist(qbuf, floorchain,
 			    floorfollow|INVORDER_SORT|SIGNAL_CANCEL, &pick_list,
 			    PICK_ONE, allowall ? allow_all : allow_ugly);
@@ -1237,7 +1395,11 @@
 		    /* they typed a letter (not a space) at the prompt */
 		}
 		/* WAC - throw now takes a count to allow for single/controlled shooting */
+#if 0 /*JP*/
 		if(allowcnt == 2 && !strcmp(word,"throw")) {
+#else
+		if(allowcnt == 2 && (!strcmp(word,"throw") || !strcmp(word, "投げる"))) {
+#endif
 		    /* permit counts for throwing gold, but don't accept
 		     * counts for other things since the throw code will
 		     * split off a single item anyway */
@@ -1266,13 +1428,19 @@
 		for (otmp = invent; otmp; otmp = otmp->nobj)
 			if (otmp->invlet == ilet) break;
 		if(!otmp) {
+/*JP
 			You("don't have that object.");
+*/
+			You("そんなものを持ってない．");
 #ifdef REDO
 			if (in_doagain) return((struct obj *) 0);
 #endif
 			continue;
 		} else if (cnt < 0 || otmp->quan < cnt) {
+/*JP
 			You("don't have that many!  You have only %ld.",
+*/
+			You("そんなに持てない！せいぜい%ld個ってとこだ．",
 			    otmp->quan);
 #ifdef REDO
 			if (in_doagain) return((struct obj *) 0);
@@ -1309,32 +1477,55 @@
 const char *word;
 struct obj *otmp;
 {
+#if 0 /*JP*/
 	const char *s1, *s2, *s3, *what;
+#else
+	const char *s1, *s2, *s3;
+#endif
 	int ocls = otmp->oclass, otyp = otmp->otyp;
 
 	s1 = s2 = s3 = 0;
 	/* check for attempted use of accessory commands ('P','R') on armor
 	   and for corresponding armor commands ('W','T') on accessories */
-	if (ocls == ARMOR_CLASS) {
+	if (ocls == ARMOR_CLASS) {/*argrath*/
+#if 0 /*JP*/
 	    if (!strcmp(word, "put on"))
 		s1 = "W", s2 = "wear", s3 = "";
 	    else if (!strcmp(word, "remove"))
 		s1 = "T", s2 = "take", s3 = " off";
+#else
+	    if (!strcmp(word, "身につける"))
+		s1 = "W", s2 = "身につける", s3 = "";
+	    else if (!strcmp(word, "はずす"))
+		s1 = "T", s2 = "はずす", s3 = "";
+#endif
 	} else if ((ocls == RING_CLASS || otyp == MEAT_RING) ||
 		ocls == AMULET_CLASS ||
 		(otyp == BLINDFOLD || otyp == TOWEL || otyp == LENSES)) {
+#if 0 /*JP*/
 	    if (!strcmp(word, "wear"))
 		s1 = "P", s2 = "put", s3 = " on";
 	    else if (!strcmp(word, "take off"))
 		s1 = "R", s2 = "remove", s3 = "";
+#else
+	    if (!strcmp(word, "身につける"))
+		s1 = "P", s2 = "身につける", s3 = "";
+	    else if (!strcmp(word, "はずす"))
+		s1 = "R", s2 = "はずす", s3 = "";
+#endif
 	}
 	if (s1) {
+#if 0 /*JP*/
 	    what = "that";
 	    /* quantity for armor and accessory objects is always 1,
 	       but some things should be referred to as plural */
 	    if (otyp == LENSES || is_gloves(otmp) || is_boots(otmp))
 		what = "those";
+#endif
+/*JP
 	    pline("Use the '%s' command to %s %s%s.", s1, s2, what, s3);
+*/
+		pline("それを%sには'%s'コマンドを使うこと．", s2, s1);
 	} else {
 	    pline(silly_thing_to, word);
 	}
@@ -1385,6 +1576,13 @@
 /* interactive version of getobj - used for Drop, Identify and */
 /* Takeoff (A). Return the number of times fn was called successfully */
 /* If combo is TRUE, we just use this to get a category list */
+/*JP CHECK: 3.4.1 の呼び出し元
+do.c:845:		(result = ggetobj("置く", drop, 0, FALSE, (unsigned *)0)) < -1)
+do.c:909:	i = ggetobj("置く", drop, 0, TRUE, &ggoresults);
+do_wear.c:2422:	    (result = ggetobj("の装備を解く", select_off, 0, FALSE, (unsigned *)0)) < -1)
+do_wear.c:2475:	if (ggetobj("の装備を解く", select_off, 0, TRUE, (unsigned *)0) == -2)
+invent.c:1763:		n = ggetobj("識別する", identify, id_limit, FALSE, (unsigned *)0);
+*/
 int
 ggetobj(word, fn, mx, combo, resultflags)
 const char *word;
@@ -1404,10 +1602,25 @@
 	char sym, *ip, olets[MAXOCLASSES+5], ilets[MAXOCLASSES+5];
 	char extra_removeables[3+1];	/* uwep,uswapwep,uquiver */
 	char buf[BUFSZ], qbuf[QBUFSZ];
+#if 1 /*JP*/
+	const char *joshi = "を";
+
+	if(!strncmp(word, "に", 2)){
+	  word += 2;
+	  joshi = "に";
+	}
+	else if(!strncmp(word, "の", 2)){
+	  word += 2;
+	  joshi = "の";
+	}
+#endif
 
 	if (resultflags) *resultflags = 0;
 #ifndef GOLDOBJ
+/*JP
 	allowgold = (u.ugold && !strcmp(word, "drop")) ? 1 : 0;
+*/
+	allowgold = (u.ugold && !strcmp(word, "置く")) ? 1 : 0;
 #endif
 	takeoff = ident = allflag = m_seen = FALSE;
 #ifndef GOLDOBJ
@@ -1415,14 +1628,20 @@
 #else
 	if(!invent){
 #endif
+/*JP
 		You("have nothing to %s.", word);
+*/
+		You("%sものは持っていない．", jcan(word));
 		return(0);
 	}
 	add_valid_menu_class(0);	/* reset */
 	if (taking_off(word)) {
 	    takeoff = TRUE;
 	    filter = is_worn;
+/*JP
 	} else if (!strcmp(word, "identify")) {
+*/
+	} else if (!strcmp(word, "識別する")) {
 	    ident = TRUE;
 	    filter = not_fully_identified;
 	}
@@ -1454,8 +1673,13 @@
 	ilets[iletct] = '\0';
 
 	for (;;) {
+#if 0 /*JP*/
 	    Sprintf(qbuf,"What kinds of thing do you want to %s? [%s]",
 		    word, ilets);
+#else
+	    Sprintf(qbuf,"どの種類のもの%s%sか？[%s]",joshi,
+		    jconj(word,"ます"), ilets);
+#endif
 	    getlin(qbuf, buf);
 	    if (buf[0] == '\033') return(0);
 	    if (index(buf, 'i')) {
@@ -1482,23 +1706,41 @@
 		if (index(extra_removeables, oc_of_sym)) {
 		    ;	/* skip rest of takeoff checks */
 		} else if (!index(removeables, oc_of_sym)) {
+/*JP
 		    pline("Not applicable.");
+*/
+		    pline("それはできない．");
 		    return 0;
 		} else if (oc_of_sym == ARMOR_CLASS && !wearing_armor()) {
+/*JP
 		    You("are not wearing any armor.");
+*/
+		    You("鎧を着ていない．");
 		    return 0;
 		} else if (oc_of_sym == WEAPON_CLASS &&
 			!uwep && !uswapwep && !uquiver) {
+/*JP
 		    You("are not wielding anything.");
+*/
+		    You("何も装備していない．");
 		    return 0;
 		} else if (oc_of_sym == RING_CLASS && !uright && !uleft) {
+/*JP
 		    You("are not wearing rings.");
+*/
+		    You("指輪を身につけていない．");
 		    return 0;
 		} else if (oc_of_sym == AMULET_CLASS && !uamul) {
+/*JP
 		    You("are not wearing an amulet.");
+*/
+		    You("魔除けを身につけていない．");
 		    return 0;
 		} else if (oc_of_sym == TOOL_CLASS && !ublindf) {
+/*JP
 		    You("are not wearing a blindfold.");
+*/
+		    You("目隠しをしていない．");
 		    return 0;
 		}
 	    }
@@ -1508,7 +1750,10 @@
 		if (allowgold == 1)
 		    (*fn)(mkgoldobj(u.ugold));
 		else if (!u.ugold)
+/*JP
 		    You("have no gold.");
+*/
+		    You("一銭も持っていない．");
 		allowgold = 2;
 #else
 		flags.botl = 1;
@@ -1535,7 +1780,10 @@
 	    } else if (sym == 'm') {
 		m_seen = TRUE;
 	    } else if (oc_of_sym == MAXOCLASSES) {
+/*JP
 		You("don't have any %c's.", sym);
+*/
+		You("%cに属する物を持っていない．", sym);
 	    } else if (oc_of_sym != VENOM_CLASS) {	/* suppress venom */
 		if (!index(olets, oc_of_sym)) {
 		    add_valid_menu_class(oc_of_sym);
@@ -1579,6 +1827,11 @@
  * If allflag then no questions are asked. Max gives the max nr of
  * objects to be treated. Return the number of objects treated.
  */
+/*JP CHECK: 3.4.2 での呼び出し元
+invent.c:1546:ggetobj() int cnt = askchain(&invent, olets, allflag, fn, ckfn, mx, word); 
+pickup.c:2596:("nodot") if (askchain((struct obj **)&current_container->cobj,
+pickup.c:2692:("nodot") (void) askchain((struct obj **)&invent,
+*/
 int
 askchain(objchn, olets, allflag, fn, ckfn, mx, word)
 struct obj **objchn;
@@ -1593,9 +1846,17 @@
 	char qbuf[QBUFSZ];
 
 	takeoff = taking_off(word);
+/*JP
 	ident = !strcmp(word, "identify");
+*/
+	ident = !strcmp(word, "識別する");
+#if 0 /*JP*/
 	nodot = (!strcmp(word, "nodot") || !strcmp(word, "drop") ||
 		 ident || takeoff);
+#else
+	nodot = (!strcmp(word, "nodot") || !strcmp(word, "置く") ||
+		 ident || takeoff);
+#endif
 	ininv = (*objchn == invent);
 	/* Changed so the askchain is interrogated in the order specified.
 	 * For example, if a person specifies =/ then first all rings will be
@@ -1615,7 +1876,10 @@
 		if (!allflag) {
 			Strcpy(qbuf, !ininv ? doname(otmp) :
 				xprname(otmp, (char *)0, ilet, !nodot, 0L, 0L));
+/*JP
 			Strcat(qbuf, "?");
+*/
+			Strcat(qbuf, "？");
 			sym = (takeoff || ident || otmp->quan < 2L) ?
 				nyaq(qbuf) : nyNaq(qbuf);
 		}
@@ -1665,8 +1929,14 @@
 	}
 	if (olets && *olets && *++olets)
 		goto nextclass;
+/*JP
 	if(!takeoff && (dud || cnt)) pline("That was all.");
+*/
+	if(!takeoff && (dud || cnt)) pline("これで全部だ．");
+/*JP
 	else if(!dud && !cnt) pline("No applicable objects.");
+*/
+	else if(!dud && !cnt) pline("それはできない．");
 ret:
 	return(cnt);
 }
@@ -1709,8 +1979,13 @@
     /* assumptions:  id_limit > 0 and at least one unID'd item is present */
 
     while (id_limit) {
+#if 0 /*JP*/
 	Sprintf(buf, "What would you like to identify %s?",
 		first ? "first" : "next");
+#else
+	Sprintf(buf, "どれを%sに識別しますか？",
+		first ? "最初" : "次");
+#endif
 	n = query_objlist(buf, invent, SIGNAL_NOMENU|USE_INVLET|INVORDER_SORT,
 		&pick_list, PICK_ANY, not_fully_identified);
 
@@ -1721,7 +1996,10 @@
 	    free((genericptr_t) pick_list);
 	    mark_synch(); /* Before we loop to pop open another menu */
 	} else {
+/*JP
 	    if (n < 0) pline("That was all.");
+*/
+	    if (n < 0) pline("これで全部だ．");
 	    id_limit = 0; /* Stop now */
 	}
 	first = 0;
@@ -1742,7 +2020,10 @@
 	if (not_fully_identified(obj)) ++unid_cnt, the_obj = obj;
 
     if (!unid_cnt) {
+/*JP
 	You("have already identified all of your possessions.");
+*/
+	You("全ての所有物を識別してしまっている．");
     } else if (!id_limit) {
 	/* identify everything */
 	if (unid_cnt == 1) {
@@ -1759,7 +2040,10 @@
 	n = 0;
 	if (flags.menu_style == MENU_TRADITIONAL)
 	    do {
+/*JP
 		n = ggetobj("identify", identify, id_limit, FALSE, (unsigned *)0);
+*/
+		n = ggetobj("識別する", identify, id_limit, FALSE, (unsigned *)0);
 		if (n < 0) break; /* quit or no eligible items */
 	    } while ((id_limit -= n) > 0);
 	if (n == 0 || n < -1)
@@ -1797,9 +2081,15 @@
 long quan;
 {
 	if (!prefix) prefix = "";
+#if 0 /*JP*/
 	pline("%s%s%s",
 	      prefix, *prefix ? " " : "",
 	      xprname(obj, (char *)0, obj_to_let(obj), TRUE, 0L, quan));
+#else
+	pline("%s%s",
+	      xprname(obj, (char *)0, obj_to_let(obj), *prefix ? FALSE : TRUE, 0L, quan),
+	      prefix);
+#endif
 }
 
 #endif /* OVL2 */
@@ -1834,19 +2124,31 @@
      */
     if (cost != 0 || let == '*') {
 	/* if dot is true, we're doing Iu, otherwise Ix */
+#if 0 /*JP*/
 	Sprintf(li, "%c - %-45s %6ld %s",
+#else
+	Sprintf(li, "%c - %-45s %6ld%s",
+#endif
 		(dot && use_invlet ? obj->invlet : let),
 		(txt ? txt : doname(obj)), cost, currency(cost));
 #ifndef GOLDOBJ
     } else if (obj && obj->oclass == COIN_CLASS) {
+#if 0 /*JP*/
 	Sprintf(li, "%ld gold piece%s%s", obj->quan, plur(obj->quan),
 		(dot ? "." : ""));
+#else
+	Sprintf(li, "%ld枚の金貨%s", obj->quan,
+		(dot ? "．" : ""));
+#endif
 #endif
     } else {
 	/* ordinary inventory display or pickup message */
 	Sprintf(li, "%c - %s%s",
 		(use_invlet ? obj->invlet : let),
+/*JP
 		(txt ? txt : doname(obj)), (dot ? "." : ""));
+*/
+		(txt ? txt : doname(obj)), (dot ? "．" : ""));
     }
     if (savequan) obj->quan = savequan;
 
@@ -1945,9 +2247,15 @@
 	*/
 	if (!invent && !(flags.perm_invent && !lets && !want_reply)) {
 #ifndef GOLDOBJ
+/*JP
 	    pline("Not carrying anything%s.", u.ugold ? " except gold" : "");
+*/
+	    pline("%s何も持っていない．", u.ugold ? "お金以外" : "");
 #else
+/*JP
 	    pline("Not carrying anything.");
+*/
+	    pline("何も持っていない．");
 #endif
 #ifdef PROXY_GRAPHICS
 	    busy--;
@@ -1975,6 +2283,9 @@
 #ifdef PROXY_GRAPHICS
 	    busy--;
 #endif
+#if 1 /*JP*/
+	    set_trns_mode(1);
+#endif
 	    return ret;
 	}
 
@@ -2021,6 +2332,9 @@
 #ifdef PROXY_GRAPHICS
 	busy--;
 #endif
+#if 1 /*JP*/
+	set_trns_mode(1);
+#endif
 	return ret;
 }
 
@@ -2180,7 +2494,10 @@
     }
 
     putstr(win, 0, "");
+/*JP
     putstr(win, 0, xprname((struct obj *)0, "Total:", '*', FALSE, totcost, 0L));
+*/
+    putstr(win, 0, xprname((struct obj *)0, "合計：", '*', FALSE, totcost, 0L));
     display_nhwindow(win, FALSE);
     destroy_nhwindow(win);
 }
@@ -2207,14 +2524,20 @@
 	boolean billx = *u.ushops && doinvbill(0);
 	menu_item *pick_list;
 	boolean traditional = TRUE;
+/*JP
 	const char *prompt = "What type of object do you want an inventory of?";
+*/
+	const char *prompt = "どの種類の持ち物を見ますか？";
 
 #ifndef GOLDOBJ
 	if (!invent && !u.ugold && !billx) {
 #else
 	if (!invent && !billx) {
 #endif
+/*JP
 	    You("aren't carrying anything.");
+*/
+	    You("その種類の物は何も持っていない．");
 	    return 0;
 	}
 	unpaid_count = count_unpaid(invent);
@@ -2282,14 +2605,20 @@
 	    if (billx)
 		(void) doinvbill(1);
 	    else
+/*JP
 		pline("No used-up objects on your shopping bill.");
+*/
+		pline("使ってしまった物は商店の請求書にない．");
 	    return 0;
 	}
 	if (c == 'u') {
 	    if (unpaid_count)
 		dounpaid();
 	    else
+/*JP
 		You("are not carrying any unpaid objects.");
+*/
+		You("未払いのアイテムを持っていない．");
 	    return 0;
 	}
 	if (traditional) {
@@ -2297,7 +2626,10 @@
 	    if (oclass == COIN_CLASS) {
 		return doprgold();
 	    } else if (index(types, c) > index(types, '\033')) {
+/*JP
 		You("have no such objects.");
+*/
+	        You("何も持っていない．");
 		return 0;
 	    }
 	    this_type = oclass;
@@ -2325,12 +2657,18 @@
 	    switch (lev->doormask) {
 	    case D_NODOOR:	cmap = S_ndoor; break;	/* "doorway" */
 	    case D_ISOPEN:	cmap = S_vodoor; break;	/* "open door" */
+/*JP
 	    case D_BROKEN:	dfeature = "broken door"; break;
+*/
+	    case D_BROKEN:	dfeature = "壊れた扉"; break;
 	    default:	cmap = S_vcdoor; break;	/* "closed door" */
 	    }
 	    /* override door description for open drawbridge */
 	    if (is_drawbridge_wall(x, y) >= 0)
+/*JP
 		dfeature = "open drawbridge portcullis",  cmap = -1;
+*/
+		dfeature = "降りている跳ね橋", cmap = -1;
 	} else if (IS_FOUNTAIN(ltyp))
 	    cmap = S_fountain;				/* "fountain" */
 	else if (IS_THRONE(ltyp))
@@ -2340,7 +2678,11 @@
 	else if (is_ice(x,y))
 	    cmap = S_ice;				/* "ice" */
 	else if (is_pool(x,y))
+#if 0 /*JP*/
 	    dfeature = "pool of water";
+#else
+	    dfeature = "水たまり";
+#endif
 #ifdef SINKS
 	else if (IS_SINK(ltyp))
 	    cmap = S_sink;				/* "sink" */
@@ -2348,7 +2690,11 @@
 	    cmap = S_toilet;
 #endif
 	else if (IS_ALTAR(ltyp)) {
+#if 0 /*JP*/
 	    Sprintf(altbuf, "altar to %s (%s)", a_gname(),
+#else
+	    Sprintf(altbuf, "%sの祭壇(%s)", a_gname(),
+#endif
 		    align_str(Amask2align(lev->altarmask & ~AM_SHRINE)));
 	    dfeature = altbuf;
 	} else if ((x == xupstair && y == yupstair) ||
@@ -2370,9 +2716,18 @@
 	else if (ltyp == TREE)
 	    cmap = S_tree;				/* "tree" */
 	else if (ltyp == IRONBARS)
+#if 0 /*JP*/
 	    dfeature = "set of iron bars";
+#else
+	    dfeature = "鉄の棒";
+#endif
 
+#if 0 /*JP*/
 	if (cmap >= 0) dfeature = defsyms[cmap].explanation;
+#else
+	if (cmap >= 0) 
+	    dfeature = jtrns_obj('S', defsyms[cmap].explanation);
+#endif
 	if (dfeature) Strcpy(buf, dfeature);
 	return dfeature;
 }
@@ -2386,7 +2741,11 @@
 {
 	struct obj *otmp;
 	struct trap *trap;
+#if 0 /*JP*/
 	const char *verb = Blind ? "feel" : "see";
+#else
+	const char *verb = Blind ? "があるような気がした" : "をみつけた";
+#endif
 	const char *dfeature = (char*) 0;
 	char fbuf[BUFSZ], fbuf2[BUFSZ];
 	winid tmpwin;
@@ -2394,54 +2753,103 @@
 
 	if (u.uswallow && u.ustuck) {
 	    struct monst *mtmp = u.ustuck;
+#if 0 /*JP*/
 	    Sprintf(fbuf, "Contents of %s %s",
 		s_suffix(mon_nam(mtmp)), mbodypart(mtmp, STOMACH));
 	    /* Skip "Contents of " by using fbuf index 12 */
 	    You("%s to %s what is lying in %s.",
 		Blind ? "try" : "look around", verb, &fbuf[12]);
+#else
+	    Sprintf(fbuf, "%sの%sの中身",
+		mon_nam(mtmp), mbodypart(mtmp, STOMACH));
+	    /*語順が違うので素直に*/
+	    You("%sの%sに何があるか%s．",
+		mon_nam(mtmp), mbodypart(mtmp, STOMACH),
+		Blind ? "さぐった" : "見回した");
+#endif
 	    otmp = mtmp->minvent;
 	    if (otmp) {
 		for ( ; otmp; otmp = otmp->nobj) {
 			/* If swallower is an animal, it should have become stone but... */
 			if (otmp->otyp == CORPSE) feel_cockatrice(otmp, FALSE);
 		}
+#if 0 /*JP*/
 		if (Blind) Strcpy(fbuf, "You feel");
 		Strcat(fbuf,":");
+#else
+		Sprintf(fbuf, "ここにある%sものは．．．", Blind ? "らしい" : "");
+#endif
 	    	(void) display_minventory(mtmp, MINV_ALL, fbuf);
 	    } else {
+#if 0 /*JP*/
 		You("%s no objects here.", verb);
+#else
+		pline(Blind ? "あなたは何もないような気がした．"
+		      : "あなたは何もみつけられなかった．");
+#endif
 	    }
 	    return(!!Blind);
 	}
 	if (!skip_objects && (trap = t_at(u.ux,u.uy)) && trap->tseen)
+#if 0 /*JP*/
 		There("is %s here.",
 			an(defsyms[trap_to_defsym(trap->ttyp)].explanation));
+#else
+		pline("ここには%sがある．",
+			jtrns_obj('^', (defsyms[trap_to_defsym(trap->ttyp)].explanation)));
+#endif
 
 	otmp = level.objects[u.ux][u.uy];
 	dfeature = dfeature_at(u.ux, u.uy, fbuf2);
+#if 0 /*JP*/
 	if (dfeature && !strcmp(dfeature, "pool of water") && Underwater)
+#else
+	if (dfeature && !strcmp(dfeature, "水たまり") && Underwater)
+#endif
 		dfeature = 0;
 
 	if (Blind) {
 		boolean drift = Is_airlevel(&u.uz) || Is_waterlevel(&u.uz);
+#if 0 /*JP*/
 		if (dfeature && !strncmp(dfeature, "altar ", 6)) {
+#else
+		if (dfeature && !strncmp(dfeature, "祭壇", 4)) {
+#endif
 		    /* don't say "altar" twice, dfeature has more info */
+#if 0 /*JP*/
 		    You("try to feel what is here.");
+#else
+		    You("ここに何があるのか調べようとした．");
+#endif
 		} else {
+#if 0 /*JP*/
 		    You("try to feel what is %s%s.",
 			drift ? "floating here" : "lying here on the ",
 			drift ? ""		: surface(u.ux, u.uy));
+#else
+		    You("何が%s%sのか調べようとした．",
+			drift ?	""	     : surface(u.ux, u.uy),
+			drift ? "浮いている" : "の上にある");
+#endif
 		}
 		if (dfeature && !drift && !strcmp(dfeature, surface(u.ux,u.uy)))
 			dfeature = 0;		/* ice already identifed */
 		if (!can_reach_floor()) {
+#if 0 /*JP*/
 			pline("But you can't reach it!");
+#else
+			pline("しかし届かない！");
+#endif
 			return(0);
 		}
 	}
 
 	if (dfeature) {
+#if 0 /*JP*/
 		Sprintf(fbuf, "There is %s here.", an(dfeature));
+#else
+		Sprintf(fbuf, "ここには%sがある．", an(dfeature));
+#endif
 		if (flags.suppress_alert < FEATURE_NOTICE_VER(0,0,7) &&
 			(IS_FOUNTAIN(levl[u.ux][u.uy].typ) ||
 #ifdef SINKS
@@ -2449,14 +2857,24 @@
 			 IS_TOILET(levl[u.ux][u.uy].typ)
 #endif
 			))
+#if 0 /*JP*/
 		    Strcat(fbuf, "  Use \"q.\" to drink from it.");
+#else
+		    Strcat(fbuf, "  \"q.\"を使って水を飲める．");
+#endif
 	}
 
 	if (!otmp || is_lava(u.ux,u.uy) || (is_pool(u.ux,u.uy) && !Underwater)) {
 		if (dfeature) pline(fbuf);
 		sense_engr_at(u.ux, u.uy, FALSE); /* Eric Backus */
 		if (!skip_objects && (Blind || !dfeature))
+#if 0 /*JP*/
 		    You("%s no objects here.", verb);
+#else
+		    pline(Blind ?
+			  "なにもないような気がする．" :
+			  "なにもみつけられなかった．");
+#endif
 		return(!!Blind);
 	}
 	/* we know there is something here */
@@ -2464,17 +2882,29 @@
 	if (skip_objects) {
 	    if (dfeature) pline(fbuf);
 	    sense_engr_at(u.ux, u.uy, FALSE); /* Eric Backus */
+#if 0 /*JP*/
 	    There("are %s%s objects here.",
 		  (obj_cnt <= 10) ? "several" : "many",
 		  picked_some ? " more" : "");
+#else
+	    pline("ここには%sものが%sある．",
+		  (obj_cnt <= 10) ? "いくつか" : "沢山の",
+		  picked_some ? "さらに" : "");
+#endif
 	} else if (!otmp->nexthere) {
 	    /* only one object */
 	    if (dfeature) pline(fbuf);
 	    sense_engr_at(u.ux, u.uy, FALSE); /* Eric Backus */
 #ifdef INVISIBLE_OBJECTS
-	    if (otmp->oinvis && !See_invisible) verb = "feel";
 #endif
+#if 0 /*JP*/
+	    if (otmp->oinvis && !See_invisible) verb = "feel";
 	    You("%s here %s.", verb, doname(otmp));
+#else
+	    if (otmp->oinvis && !See_invisible)
+		verb = "があるような気がした";
+	    pline("%s%s．", doname(otmp), verb);
+#endif
 	    if (otmp->otyp == CORPSE) feel_cockatrice(otmp, FALSE);
 	} else {
 	    display_nhwindow(WIN_MESSAGE, FALSE);
@@ -2483,8 +2913,13 @@
 		putstr(tmpwin, 0, fbuf);
 		putstr(tmpwin, 0, "");
 	    }
+#if 0 /*JP:T*/
 	    putstr(tmpwin, 0, Blind ? "Things that you feel here:" :
 				      "Things that are here:");
+#else
+	    putstr(tmpwin, 0, Blind ? "ここにあるらしいものは．．．" :
+				      "ここにあるものは．．．");
+#endif
 	    for ( ; otmp; otmp = otmp->nexthere) {
 		if (otmp->otyp == CORPSE && will_feel_cockatrice(otmp, FALSE)) {
 			char buf[BUFSZ];
@@ -2531,12 +2966,25 @@
 
 	if (will_feel_cockatrice(otmp, force_touch)) {
 	    if(poly_when_stoned(youmonst.data))
+#if 0 /*JP*/
 			You("touched the %s corpse with your bare %s.",
 				mons[otmp->corpsenm].mname, makeplural(body_part(HAND)));
+#else
+			You("%sの死体に素%sで触った．",
+				jtrns_mon(mons[otmp->corpsenm].mname), body_part(HAND));
+#endif
 	    else
+#if 0 /*JP*/
 			pline("Touching the %s corpse is a fatal mistake...",
 				mons[otmp->corpsenm].mname);
+#else
+			pline("%sの死体に触れるのは致命的な間違いだ．．．",
+				jtrns_mon(mons[otmp->corpsenm].mname));
+#endif
+/*JP
 		Sprintf(kbuf, "%s corpse", an(mons[otmp->corpsenm].mname));
+*/
+		Sprintf(kbuf, "%sの死体で", jtrns_mon(mons[otmp->corpsenm].mname));
 		instapetrify(kbuf);
 	}
 }
@@ -2654,15 +3102,26 @@
 	   take containers into account */
 #ifndef GOLDOBJ
 	if(!u.ugold)
+/*JP
 	    Your("wallet is empty.");
+*/
+	    Your("財布は空っぽだ．");
 	else
+/*JP
 	    Your("wallet contains %ld gold piece%s.", u.ugold, plur(u.ugold));
+*/
+	    Your("財布には%ld枚の金貨が入っている．", u.ugold);
 #else
         long umoney = money_cnt(invent);
 	if(!umoney)
+/*JP
 	    Your("wallet is empty.");
+*/
 	else
+/*JP
 	    Your("wallet contains %ld %s.", umoney, currency(umoney));
+*/
+	    Your("財布には%ld%sが入っている．", umoney, currency(umoney));
 #endif
 	shopper_financial_report();
 	return 0;
@@ -2676,15 +3135,27 @@
 {
     if (!uwep) {
 	if (!u.twoweap){
+#if 0 /*JP*/
 	You("are empty %s.", body_part(HANDED));
+#else
+	    You("%sに武器をもっていない．", body_part(HAND));
+#endif
 	    return 0;
 	}
 	/* Avoid printing "right hand empty" and "other hand empty" */
 	if (!uswapwep) {
+#if 0 /*JP*/
 	    You("are attacking with both %s.", makeplural(body_part(HAND)));
+#else
+	    You("どちらの%sにも武器をもっていない．", body_part(HAND));
+#endif
 	    return 0;
 	}
+#if 0 /*JP*/
 	Your("right %s is empty.", body_part(HAND));
+#else
+	Your("右%sに武器をもっていない．", body_part(HAND));
+#endif
     } else {
 	prinv((char *)0, uwep, 0L);
     }
@@ -2692,7 +3163,11 @@
     	if (uswapwep)
     	    prinv((char *)0, uswapwep, 0L);
     	else
+#if 0 /*JP*/
     	    Your("other %s is empty.", body_part(HAND));
+#else
+    	    Your("もう片方の%sに武器を持っていない．", body_part(HAND));
+#endif
     }
     return 0;
 #if 0
@@ -2715,7 +3190,10 @@
 doprarm()
 {
 	if(!wearing_armor())
+/*JP
 		You("are not wearing any armor.");
+*/
+		You("鎧を着ていない．");
 	else {
 #ifdef TOURIST
 		char lets[8];
@@ -2743,7 +3221,10 @@
 doprring()
 {
 	if(!uleft && !uright)
+/*JP
 		You("are not wearing any rings.");
+*/
+		You("指輪を身につけていない．");
 	else {
 		char lets[3];
 		register int ct = 0;
@@ -2760,7 +3241,10 @@
 dopramulet()
 {
 	if (!uamul)
+/*JP
 		You("are not wearing an amulet.");
+*/
+		You("魔除けを身につけていない．");
 	else
 		prinv((char *)0, uamul, 0L);
 	return 0;
@@ -2791,7 +3275,10 @@
 	    if (tool_in_use(otmp))
 		lets[ct++] = obj_to_let(otmp);
 	lets[ct] = '\0';
+/*JP
 	if (!ct) You("are not using any tools.");
+*/
+	if (!ct) You("使える道具をもっていない．");
 	else (void) display_inventory(lets, FALSE);
 	return 0;
 }
@@ -2809,7 +3296,10 @@
 	    if (is_worn(otmp) || tool_in_use(otmp))
 		lets[ct++] = obj_to_let(otmp);
 	lets[ct] = '\0';
+/*JP
 	if (!ct) You("are not wearing or wielding anything.");
+*/
+	if (!ct) You("何も着ていないし，装備していない．");
 	else (void) display_inventory(lets, FALSE);
 	return 0;
 }
@@ -2853,10 +3343,17 @@
  * This must match the object class order.
  */
 STATIC_VAR NEARDATA const char *names[] = { 0,
+#if 0 /*JP*/
 	"Illegal objects", "Weapons", "Armor", "Rings", "Amulets",
 	"Tools", "Comestibles", "Potions", "Scrolls", "Spellbooks",
 	"Wands", "Coins", "Gems", "Boulders/Statues", "Iron balls",
 	"Chains", "Venoms"
+#else
+	"妙な物体", "武器", "鎧", "指輪", "魔除け",
+	"道具", "食料", "薬", "巻物", "魔法書",
+        "杖", "金貨", "宝石", "岩または彫像", "鉄球",
+        "鎖", "毒"
+#endif
 };
 
 static NEARDATA const char oth_symbols[] = {
@@ -2865,7 +3362,10 @@
 };
 
 static NEARDATA const char *oth_names[] = {
+/*JP
 	"Bagged/Boxed items"
+*/
+	"詰められた道具"
 };
 
 static NEARDATA char *invbuf = (char *)0;
@@ -2888,14 +3388,20 @@
 	else
 	    class_name = names[0];
 
+/*JP
 	len = strlen(class_name) + (unpaid ? sizeof "unpaid_" : sizeof "");
+*/
+	len = strlen(class_name) + (unpaid ? sizeof "未払いの" : sizeof "");
 	if (len > invbufsiz) {
 	    if (invbuf) free((genericptr_t)invbuf);
 	    invbufsiz = len + 10; /* add slop to reduce incremental realloc */
 	    invbuf = (char *) alloc(invbufsiz);
 	}
 	if (unpaid)
+/*JP
 	    Strcat(strcpy(invbuf, "Unpaid "), class_name);
+*/
+	    Strcat(strcpy(invbuf, "未払いの"), class_name);
 	else
 	    Strcpy(invbuf, class_name);
 	return invbuf;
@@ -2939,7 +3445,10 @@
 	if (!flags.invlet_constant) reassign();
 	/* get a pointer to the object the user wants to organize */
 	allowall[0] = ALL_CLASSES; allowall[1] = '\0';
+/*JP
 	if (!(obj = getobj(allowall,"adjust"))) return(0);
+*/
+	if (!(obj = getobj(allowall,"調整する"))) return(0);
 
 	/* initialize the list with all upper and lower case letters */
 	for (let = 'a', ix = 0;  let <= 'z';) alphabet[ix++] = let++;
@@ -2964,20 +3473,29 @@
 
 	/* get new letter to use as inventory letter */
 	for (;;) {
+/*JP
 		Sprintf(qbuf, "Adjust letter to what [%s]?",buf);
+*/
+		Sprintf(qbuf, "どの文字に調整しますか[%s]？", buf);
 		let = yn_function(qbuf, (char *)0, '\0');
 		if(index(quitchars,let)) {
 			pline(Never_mind);
 			return(0);
 		}
 		if (let == '@' || !letter(let))
+/*JP
 			pline("Select an inventory slot letter.");
+*/
+			pline("持ち物の文字を選んでください．");
 		else
 			break;
 	}
 
 	/* change the inventory and print the resulting item */
+/*JP
 	adj_type = "Moving:";
+*/
+	adj_type = "を移動した．";
 
 	/*
 	 * don't use freeinv/addinv to avoid double-touching artifacts,
@@ -2987,13 +3505,19 @@
 
 	for (otmp = invent; otmp;)
 		if (merged(&otmp,&obj)) {
+/*JP
 			adj_type = "Merging:";
+*/
+			adj_type = "を合わせた．";
 			obj = otmp;
 			otmp = otmp->nobj;
 			extract_nobj(obj, &invent);
 		} else {
 			if (otmp->invlet == let) {
+/*JP
 				adj_type = "Swapping:";
+*/
+				adj_type = "を交換した．";
 				otmp->invlet = obj->invlet;
 			}
 			otmp = otmp->nobj;
@@ -3076,8 +3600,13 @@
 	int do_all = (dflags & MINV_ALL) != 0;
 #endif
 
+#if 0 /*JP*/
 	Sprintf(tmp,"%s %s:", s_suffix(noit_Monnam(mon)),
 		do_all ? "possessions" : "armament");
+#else
+	Sprintf(tmp, "%sの%s：", Monnam(mon),
+		do_all ? "持ち物" : "装備");
+#endif
 
 #ifndef GOLDOBJ
 	if (do_all ? (mon->minvent || mon->mgold)
@@ -3118,7 +3647,10 @@
 
 	    set_uasmon();
 	} else {
+/*JP
 	    invdisp_nothing(title ? title : tmp, "(none)");
+*/
+	    invdisp_nothing(title ? title : tmp, "(何もない)");
 	    n = 0;
 	}
 
@@ -3152,13 +3684,19 @@
 	int n;
 	menu_item *selected = 0;
 
+/*JP
 	Sprintf(tmp,"Contents of %s:", doname(obj));
+*/
+	Sprintf(tmp,"%sの中身：", doname(obj));
 
 	if (obj->cobj) {
 	    n = query_objlist(tmp, obj->cobj, INVORDER_SORT, &selected,
 			    PICK_NONE, allow_all);
 	} else {
+/*JP
 	    invdisp_nothing(tmp, "(empty)");
+*/
+	    invdisp_nothing(tmp, "(空っぽ)");
 	    n = 0;
 	}
 	if (n > 0) {
@@ -3204,7 +3742,10 @@
 	if (n) {
 	    only.x = x;
 	    only.y = y;
+/*JP
 	    if (query_objlist("Things that are buried here:",
+*/
+	    if (query_objlist("ここに埋められているもの：",
 			      level.buriedobjlist, INVORDER_SORT,
 			      &selected, PICK_NONE, only_here) > 0)
 		free((genericptr_t)selected);
diff -aurN slashem-0.0.7E6F2/src/lock.c jslashem-0.0.7E6F2-J0.0.8/src/lock.c
--- slashem-0.0.7E6F2/src/lock.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/lock.c	2004-08-03 22:01:18.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_PTR int NDECL(picklock);
@@ -50,17 +58,35 @@
 {
 	/* "unlocking"+2 == "locking" */
 	static const char *actions[] = {
+/* 
+** 英語は un をつけるだけで逆の意味になるが，日本語はそうはいかない．
+** 誰だ？こんな数バイトけちるコード書いたやつは？
+*/
+#if 0 /*JP*/
 		/* [0] */	"unlocking the door",
 		/* [1] */	"unlocking the chest",
 		/* [2] */	"unlocking the box",
 		/* [3] */	"picking the lock"
+#else
+		/* [0] */	"扉の鍵をはずす", 
+		/* [1] */	"宝箱の鍵をはずす",
+		/* [2] */	"箱の鍵をはずす",  
+		/* [3] */	"鍵をはずす"    
+#endif /*JP*/
 	};
 
 	/* if the target is currently unlocked, we're trying to lock it now */
 	if (xlock.door && !(xlock.door->doormask & D_LOCKED))
+#if 0 /*JP*/
 		return actions[0]+2;	/* "locking the door" */
+#else
+		return "扉に鍵をかける";
+#endif
 	else if (xlock.box && !xlock.box->olocked)
+/*JP
 		return xlock.box->otyp == CHEST ? actions[1]+2 : actions[2]+2;
+*/
+		return xlock.box->otyp == CHEST ? "宝箱に鍵をかける" : "箱に鍵をかける";
 	/* otherwise we're trying to unlock it */
 	else if (xlock.picktyp == LOCK_PICK)
 		return actions[3];	/* "picking the lock" */
@@ -89,29 +115,47 @@
 	    }
 	    switch (xlock.door->doormask) {
 		case D_NODOOR:
+/*JP
 		    pline("This doorway has no door.");
+*/
+		    pline("出入口には扉がない．");
 		    return((xlock.usedtime = 0));
 		case D_ISOPEN:
+/*JP
 		    You("cannot lock an open door.");
+*/
+		    pline("開いてる扉に鍵をかけられない．");
 		    return((xlock.usedtime = 0));
 		case D_BROKEN:
+/*JP
 		    pline("This door is broken.");
+*/
+		    pline("扉は壊れている．");
 		    return((xlock.usedtime = 0));
 	    }
 	}
 
 	if (xlock.usedtime++ >= 50 || nohands(youmonst.data)) {
+/*JP
 	    You("give up your attempt at %s.", lock_action());
+*/
+	    pline("%sのをあきらめた．", lock_action());
 	    exercise(A_DEX, TRUE);	/* even if you don't succeed */
 	    return((xlock.usedtime = 0));
 	}
 
 	if(rn2(100) >= xlock.chance) return(1);		/* still busy */
 
+/*JP
 	You("succeed in %s.", lock_action());
+*/
+	You("%sのに成功した．", lock_action());
 	if (xlock.door) {
 	    if(xlock.door->doormask & D_TRAPPED) {
+/*JP
 		    b_trapped("door", FINGER);
+*/
+		    b_trapped("扉", FINGER);
 		    xlock.door->doormask = D_NODOOR;
 		    unblock_point(u.ux+u.dx, u.uy+u.dy);
 		    if (*in_rooms(u.ux+u.dx, u.uy+u.dy, SHOPBASE))
@@ -140,7 +184,10 @@
 		return((xlock.usedtime = 0));		/* you or it moved */
 
 	if (xlock.usedtime++ >= 50 || !uwep || nohands(youmonst.data)) {
+/*JP
 	    You("give up your attempt to force the lock.");
+*/
+	    pline("鍵をこじ開けるのをあきらめた．");
 	    if(xlock.usedtime >= 50)		/* you made the effort */
 	      exercise((xlock.picktyp) ? A_DEX : A_STR, TRUE);
 	    return((xlock.usedtime = 0));
@@ -153,10 +200,17 @@
 		/* for a +0 weapon, probability that it survives an unsuccessful
 		 * attempt to force the lock is (.992)^50 = .67
 		 */
+#if 0 /*JP*/
 		pline("%sour %s broke!",
 		      (uwep->quan > 1L) ? "One of y" : "Y", xname(uwep));
+#else
+		pline("%sは壊れてしまった！",xname(uwep));
+#endif
 		useup(uwep);
+/*JP
 		You("give up your attempt to force the lock.");
+*/
+		pline("鍵をこじ開けるのをあきらめた．");
 		exercise(A_DEX, TRUE);
 		return((xlock.usedtime = 0));
 	    }
@@ -165,7 +219,10 @@
 
 	if(rn2(100) >= xlock.chance) return(1);		/* still busy */
 
+/*JP
 	You("succeed in forcing the lock.");
+*/
+	pline("鍵をこじ開けた．");
 	xlock.box->olocked = 0;
 	xlock.box->obroken = 1;
 	if((xlock.picktyp == 0 && !rn2(3)) || (xlock.picktyp == 2 && !rn2(5))) {
@@ -176,8 +233,13 @@
 	    costly = (*u.ushops && costly_spot(u.ux, u.uy));
 	    shkp = costly ? shop_keeper(*u.ushops) : 0;
 
+#if 0 /*JP*/
 	    pline("In fact, you've totally destroyed %s.",
 		  the(xname(xlock.box)));
+#else
+	    pline("実際のところ，%sを完全に壊してしまった．",
+		  xname(xlock.box));
+#endif
 
 	    /* Put the contents on ground at the hero's feet. */
 	    while ((otmp = xlock.box->cobj) != 0) {
@@ -210,7 +272,10 @@
 	    if (costly)
 		loss += stolen_value(xlock.box, u.ux, u.uy,
 					     (boolean)shkp->mpeaceful, TRUE);
+/*JP
 	    if(loss) You("owe %ld %s for objects destroyed.", loss, currency(loss));
+*/
+	    if(loss) You("器物破損で%ld%sの借りをつくった．", loss, currency(loss));
 	    delobj(xlock.box);
 	}
 	exercise((xlock.picktyp) ? A_DEX : A_STR, TRUE);
@@ -227,32 +292,60 @@
 	} 
 	switch (xlock.door->doormask) {
 	    case D_NODOOR:
+#if 0 /*JP*/
 		pline("This doorway has no door.");
+#else
+		pline("この戸口には扉がない．");
+#endif
 		return((xlock.usedtime = 0));
 	    case D_ISOPEN:
+#if 0 /*JP*/
 		You("cannot lock an open door.");
+#else
+		You("開いた扉に鍵はかけられない．");
+#endif
 		return((xlock.usedtime = 0));
 	    case D_BROKEN:
+#if 0 /*JP*/
 		pline("This door is broken.");
+#else
+		pline("この扉は壊れてしまっている．");
+#endif
 		return((xlock.usedtime = 0));
 	}
 	
 	if (xlock.usedtime++ >= 50 || nohands(youmonst.data)) {
+#if 0 /*JP*/
 	    You("give up your attempt at %s the door.",
 	    	(xlock.picktyp == 2 ? "melting" : xlock.picktyp == 1 ? 
 	    		"prying open" : "breaking down"));
+#else
+	    You("扉を%s開けようとするのをあきらめた．",
+	    	(xlock.picktyp == 2 ? "溶かし" : xlock.picktyp == 1 ? 
+	    		"こじ" : "壊して"));
+#endif
 	    exercise(A_STR, TRUE);      /* even if you don't succeed */
 	    return((xlock.usedtime = 0));
 	}
 
 	if(rn2(100) > xlock.chance) return(1);          /* still busy */
 
+#if 0 /*JP*/
 	You("succeed in %s the door.",
 	    	(xlock.picktyp == 2 ? "melting" : xlock.picktyp == 1 ? 
 	    		"prying open" : "breaking down"));
+#else
+	You("ドアを%s開けた．",
+	    	(xlock.picktyp == 2 ? "溶かし" : xlock.picktyp == 1 ? 
+	    		"こじ" : "壊して"));
+#endif
 
 	if(xlock.door->doormask & D_TRAPPED) {
+#if 0 /*JP*/
 	    b_trapped("door", 0);
+#else
+	    b_trapped("扉", 0);
+#endif
 	    xlock.door->doormask = D_NODOOR;
 	} else if (xlock.picktyp == 1)
 	    xlock.door->doormask = D_BROKEN;
@@ -295,30 +388,51 @@
 
 	/* check whether we're resuming an interrupted previous attempt */
 	if (xlock.usedtime && picktyp == xlock.picktyp) {
+/*JP
 	    static char no_longer[] = "Unfortunately, you can no longer %s %s.";
+*/
+	    static char no_longer[] = "ざんねんながら，あなたは%s%s";
 
 	    if (nohands(youmonst.data)) {
+/*JP
 		const char *what = (picktyp == LOCK_PICK) ? "pick" : "key";
+*/
+		const char *what = (picktyp == LOCK_PICK) ? "鍵開け器具" : "鍵";
 #ifdef TOURIST
+/*JP
 		if (picktyp == CREDIT_CARD) what = "card";
+*/
+		if (picktyp == CREDIT_CARD) what = "カード";
 #endif
+/*JP
 		pline(no_longer, "hold the", what);
+*/
+		pline(no_longer, what, "をつかめない");
 		reset_pick();
 		return 0;
 	    } else if (xlock.box && !can_reach_floor()) {
+/*JP
 		pline(no_longer, "reach the", "lock");
+*/
+		pline(no_longer, "鍵に", "届かない");
 		reset_pick();
 		return 0;
 	    } else if (!xlock.door || xlock.key == pick->oartifact) {
 		const char *action = lock_action();
+/*JP
 		You("resume your attempt at %s.", action);
+*/
+		pline("%sのを再開した．", action);
 		set_occupation(picklock, action, 0);
 		return(1);
 	    }
 	}
 
 	if(nohands(youmonst.data)) {
+/*JP
 		You_cant("hold %s -- you have no hands!", doname(pick));
+*/
+		You("%sをつかむことができない！手がないんだもの！", xname(pick));
 		return(0);
 	}
 
@@ -332,22 +446,36 @@
 	}
 	ch = 0;		/* lint suppression */
 
+/*JP
 	if(!get_adjacent_loc((char *)0, "Invalid location!", u.ux, u.uy, &cc)) return 0;
+*/
+	if(!get_adjacent_loc((char *)0, "位置がおかしい！", u.ux, u.uy, &cc)) return 0;
 	if (cc.x == u.ux && cc.y == u.uy) {	/* pick lock on a container */
 	    const char *verb;
 	    boolean it;
 	    int count;
 
 	    if (u.dz < 0) {
+#if 0 /*JP*/
 		There("isn't any sort of lock up %s.",
 		      Levitation ? "here" : "there");
+#else
+		pline("%sには鍵をかけるような物はない．",
+		      Levitation ? "ここ" : "下方");
+#endif
 		return 0;
 	    } else if (is_lava(u.ux, u.uy)) {
+/*JP
 		pline("Doing that would probably melt your %s.",
+*/
+		pline("そんなことをしたら%sが溶けてしまう．",
 		      xname(pick));
 		return 0;
 	    } else if (is_pool(u.ux, u.uy) && !Underwater) {
+/*JP
 		pline_The("water has no lock.");
+*/
+		pline("水に錠前はない．");
 		return 0;
 	    }
 
@@ -357,31 +485,54 @@
 		if (Is_box(otmp)) {
 		    ++count;
 		    if (!can_reach_floor()) {
+/*JP
 			You_cant("reach %s from up here.", the(xname(otmp)));
+*/
+			You("ここにある%sに届かない．", the(xname(otmp)));
 			return 0;
 		    }
 		    it = 0;
+#if 0 /*JP*/
 		    if (otmp->obroken) verb = "fix";
 		    else if (!otmp->olocked) verb = "lock", it = 1;
 		    else if (picktyp != LOCK_PICK) verb = "unlock", it = 1;
 		    else verb = "pick";
+#else
+		    if (otmp->obroken) verb = "修復する";
+		    else if (!otmp->olocked) verb = "鍵をかける", it = 1;
+		    else if (picktyp != LOCK_PICK) verb = "鍵をはずす", it = 1;
+		    else verb = "こじあける";
+#endif /*JP*/
+#if 0 /*JP*/
 		    Sprintf(qbuf, "There is %s here, %s %s?",
 		    	    safe_qbuf("", sizeof("There is  here, unlock its lock?"),
 			    	doname(otmp), an(simple_typename(otmp->otyp)), "a box"),
 			    verb, it ? "it" : "its lock");
+#else
+		    Sprintf(qbuf, "ここには%sがある．%s？",
+		    	    safe_qbuf("", sizeof("ここにはがある．鍵をはずしますか？"),
+			    	doname(otmp), an(simple_typename(otmp->otyp)), "箱"),
+			    verb);
+#endif
 
 		    c = ynq(qbuf);
 		    if(c == 'q') return(0);
 		    if(c == 'n') continue;
 
 		    if (otmp->obroken) {
+/*JP
 			You_cant("fix its broken lock with %s.", doname(pick));
+*/
+			You("壊れた鍵を%sで修復できない．", doname(pick));
 			return 0;
 		    }
 #ifdef TOURIST
 		    else if (picktyp == CREDIT_CARD && !otmp->olocked) {
 			/* credit cards are only good for unlocking */
+/*JP
 			You_cant("do that with %s.", doname(pick));
+*/
+			pline("%sじゃそんなことはできない．", doname(pick));
 			return 0;
 		    }
 #endif
@@ -391,7 +542,11 @@
 			case CREDIT_CARD:
 			    if(!rn2(20) && !pick->blessed &&
 			    		!pick->oartifact) {                            
+#if 0 /*JP*/
 					Your("credit card breaks in half!");
+#else
+					Your("クレジットカードは真っ二つに折れた！");
+#endif
 					useup(pick);
 					return(1);
 			    }
@@ -401,7 +556,11 @@
 			case LOCK_PICK:
 			    if(!rn2(Role_if(PM_ROGUE) ? 40 : 30) &&
 			    		!pick->blessed && !pick->oartifact) {                            
+#if 0 /*JP*/
 					You("break your pick!");
+#else
+					You("鍵開け器具を壊してしまった！");
+#endif
 					useup(pick);
 					return(1);
 			    }
@@ -409,7 +568,11 @@
 			    break;
 			case SKELETON_KEY:
                 if(!rn2(15) && !pick->blessed && !pick->oartifact) {
+#if 0 /*JP*/
 					Your("key didn't quite fit the lock and snapped!");
+#else
+					Your("鍵は全く錠に合わずポキンと折れてしまった！");
+#endif
 					useup(pick);
 					return(1);
 			    }
@@ -426,14 +589,20 @@
 		}
 	    if (c != 'y') {
 		if (!count)
+/*JP
 		    There("doesn't seem to be any sort of lock here.");
+*/
+		    pline("ここには鍵をかけるような物はないようだ．");
 		return(0);		/* decided against all boxes */
 	    }
 	} else {			/* pick the lock in a door */
 	    struct monst *mtmp;
 
 	    if (u.utrap && u.utraptype == TT_PIT) {
+/*JP
 		You_cant("reach over the edge of the pit.");
+*/
+		pline("落し穴の中から届かない．");
 		return(0);
 	    }
 
@@ -444,44 +613,77 @@
 #ifdef TOURIST
 		if (picktyp == CREDIT_CARD &&
 		    (mtmp->isshk || mtmp->data == &mons[PM_ORACLE]))
+/*JP
 		    verbalize("No checks, no credit, no problem.");
+*/
+		    verbalize("いつもニコニコ現金払い．");
 		else
 #endif
+/*JP
 		    pline("I don't think %s would appreciate that.", mon_nam(mtmp));
+*/
+		    pline("%sがその価値を認めるとは思えない．", mon_nam(mtmp));
 		return(0);
 	    }
 	    if(!IS_DOOR(door->typ)) {
 		if (is_drawbridge_wall(cc.x,cc.y) >= 0)
+#if 0 /*JP*/
 		    You("%s no lock on the drawbridge.",
 				Blind ? "feel" : "see");
+#else
+		    pline("跳ね橋には鍵がない%s．",
+				Blind ? "ようだ" : "ように見える");
+#endif
 		else
+#if 0 /*JP*/
 		    You("%s no door there.",
 				Blind ? "feel" : "see");
+#else
+		    pline("ここには扉がない%s．",
+				Blind ? "ようだ" : "ように見える");
+#endif
 		return(0);
 	    }
 	    switch (door->doormask) {
 		case D_NODOOR:
+/*JP
 		    pline("This doorway has no door.");
+*/
+	            pline("出入口には扉がない．");
 		    return(0);
 		case D_ISOPEN:
+/*JP
 		    You("cannot lock an open door.");
+*/
+		    pline("開いてる扉に鍵をかけれない．");
 		    return(0);
 		case D_BROKEN:
+/*JP
 		    pline("This door is broken.");
+*/
+		    pline("扉は壊れている");
 		    return(0);
 		default:
 #ifdef TOURIST
 		    /* credit cards are only good for unlocking */
 		    if(picktyp == CREDIT_CARD && !(door->doormask & D_LOCKED)) {
+/*JP
 			You_cant("lock a door with a credit card.");
+*/
+		        You("クレジットカードで鍵をかけることはできない．");
 			return(0);
 		    }
 #endif
 		    /* ALI - Artifact doors */
 		    key = artifact_door(cc.x, cc.y);
 
+#if 0 /*JP*/
 		    Sprintf(qbuf,"%sock it?",
 			(door->doormask & D_LOCKED) ? "Unl" : "L" );
+#else
+		    Sprintf(qbuf,"%sますか？",
+			(door->doormask & D_LOCKED) ? "はずし" : "かけ" );
+#endif
 
 		    c = yn(qbuf);
 		    if(c == 'n') return(0);
@@ -492,7 +694,11 @@
 			case CREDIT_CARD:
 			    if(!rn2(Role_if(PM_TOURIST) ? 30 : 20) && !pick->blessed &&
 			    		!pick->oartifact) {
+#if 0 /*JP*/
 					You("break your card off in the door!");
+#else
+					pline("扉の隙間に差し込んだカードは折れてしまった！");
+#endif
 					useup(pick);
 					return(0);
 			    }
@@ -502,7 +708,11 @@
 			case LOCK_PICK:
 			    if(!rn2(Role_if(PM_ROGUE) ? 40 : 30) && !pick->blessed &&
 			    		!pick->oartifact) {
+#if 0 /*JP*/
 					You("break your pick!");
+#else
+					You("鍵開け器具を壊してしまった！");
+#endif
 					useup(pick);
 					return(0);
 			    }
@@ -510,7 +720,11 @@
 			    break;
 			case SKELETON_KEY:
 				if(!rn2(15) && !pick->blessed && !pick->oartifact) {
+#if 0 /*JP*/
 					Your("key wasn't designed for this door and broke!");
+#else
+					Your("鍵はこの扉のための鍵ではなかったので壊れてしまった！");
+#endif
 					useup(pick);
 					return(0);
 			    }
@@ -525,7 +739,11 @@
 		    xlock.key = pick->oartifact;
 		    if (key && xlock.key != key) {
 			if (picktyp == SKELETON_KEY) {
+#if 0 /*JP*/
 			    Your("key doesn't seem to fit.");
+#else
+			    Your("鍵は合わないようだ．");
+#endif
 			    return(0);
 			}
 			else ch = -1;		/* -1 == 0% chance */
@@ -549,17 +767,29 @@
 	char qbuf[QBUFSZ];
 
 	if (!uwep) { /* Might want to make this so you use your shoulder */
+#if 0 /*JP*/
 	    You_cant("force anything without a weapon.");
+#else
+	    pline("武器なしで鍵をこじあけることはできない．");
+#endif
 	     return(0);
 	}
 
 	if (u.utrap && u.utraptype == TT_WEB) {
+#if 0 /*JP*/
 	    You("are entangled in a web!");
+#else
+	    You("くもの巣に絡まった！");
+#endif
 	    return(0);
 #ifdef LIGHTSABERS
 	} else if (uwep && is_lightsaber(uwep)) {
 	    if (!uwep->lamplit) {
+#if 0 /*JP*/
 		Your("lightsaber is deactivated!");
+#else
+		Your("%sは起動していない！", xname(uwep));
+#endif
 		return(0);
 	    }
 #endif
@@ -580,8 +810,13 @@
 	   || uwep->otyp == RUBBER_HOSE
 #endif
 	  ) {
+#if 0 /*JP*/
 	    You_cant("force anything without a %sweapon.",
 		  (uwep) ? "proper " : "");
+#else
+	    pline("%s武器なしで鍵をこじあけることはできない．",
+		  (uwep) ? "適切な" : "");
+#endif
 	    return(0);
 	}
 
@@ -593,12 +828,22 @@
 	picktyp = is_blade(uwep) ? 1 : 0;
 	if(xlock.usedtime && picktyp == xlock.picktyp) {
 	    if (xlock.box) {
+#if 0 /*JP*/
 	    You("resume your attempt to force the lock.");
 	    set_occupation(forcelock, "forcing the lock", 0);
+#else
+	    pline("箱の錠前をこじあけるのを再開した．");
+	    set_occupation(forcelock, "錠前をこじあける", 0);
+#endif
 	    return(1);
 	    } else if (xlock.door) {
+#if 0 /*JP*/
 		You("resume your attempt to force the door.");
 		set_occupation(forcedoor, "forcing the door", 0);
+#else
+		pline("扉をこじあけるのを再開した．");
+		set_occupation(forcedoor, "扉をこじあける", 0);
+#endif
 		return(1);
 	    }
 	}
@@ -614,14 +859,26 @@
 	for(otmp = level.objects[u.ux][u.uy]; otmp; otmp = otmp->nexthere)
 	    if(Is_box(otmp)) {
 		if (otmp->obroken || !otmp->olocked) {
+#if 0 /*JP*/
 		    There("is %s here, but its lock is already %s.",
 			  doname(otmp), otmp->obroken ? "broken" : "unlocked");
+#else
+		    pline("ここには%sがある，しかしその鍵はもう%s．",
+			  doname(otmp), otmp->obroken ? "壊れている" : "はずされている");
+#endif
 		    continue;
 		}
+#if 0 /*JP*/
 		Sprintf(qbuf,"There is %s here, force its lock?",
 			safe_qbuf("", sizeof("There is  here, force its lock?"),
 				doname(otmp), an(simple_typename(otmp->otyp)),
 				"a box"));
+#else
+		Sprintf(qbuf,"ここには%sがある，鍵をこじあけますか？",
+			safe_qbuf("", sizeof("ここにはがある，鍵をこじあけますか？"),
+				doname(otmp), an(simple_typename(otmp->otyp)),
+				"箱"));
+#endif
 
 		c = ynq(qbuf);
 		if(c == 'q') return(0);
@@ -629,13 +886,25 @@
 
 #ifdef LIGHTSABERS
 		if(picktyp == 2)
+#if 0 /*JP*/
 		    You("begin melting it with your %s.", xname(uwep));
+#else
+		    You("%sで錠前を溶かし始めた．", xname(uwep));
+#endif
 		else
 #endif
 		if(picktyp)
+#if 0 /*JP*/
 		    You("force your %s into a crack and pry.", xname(uwep));
+#else
+		    You("%sを鍵穴に入れてガチャガチャした．",xname(uwep));
+#endif
 		else
+#if 0 /*JP*/
 		    You("start bashing it with your %s.", xname(uwep));
+#else
+		    pline("%sで殴りつけた．", xname(uwep));
+#endif
 		xlock.box = otmp;
 #ifdef LIGHTSABERS
 		if (is_lightsaber(uwep))
@@ -649,7 +918,11 @@
 	    }
 	    if(xlock.box)   {
 	    	xlock.door = 0;
+#if 0 /*JP*/
 	    	set_occupation(forcelock, "forcing the lock", 0);
+#else
+	    	set_occupation(forcelock, "鍵をこじあける", 0);
+#endif
 	    	return(1);
 	    }
 	} else {		/* break down/open door */
@@ -661,9 +934,17 @@
 			&& mtmp->m_ap_type != M_AP_OBJECT) {
 
 		if (mtmp->isshk || mtmp->data == &mons[PM_ORACLE])		
+#if 0 /*JP*/
 		    verbalize("What do you think you are, a Jedi?"); /* Phantom Menace */
+#else
+		    verbalize("自分が何をしているのか判っているのか？ジェダイよ．"); /* Phantom Menace */
+#endif
 		else
+#if 0 /*JP*/
 		    pline("I don't think %s would appreciate that.", mon_nam(mtmp));
+#else
+		    pline("%sはそれを評価しないんじゃないかな．", mon_nam(mtmp));
+#endif
 		return(0);
 	    }
 	    /* Lightsabers dig through doors and walls via dig.c */
@@ -676,36 +957,72 @@
 
 	    if(!IS_DOOR(door->typ)) { 
 		if (is_drawbridge_wall(x,y) >= 0)
+#if 0 /*JP*/
 		    pline("The drawbridge is too solid to force open.");
+#else
+		    pline("自明な方法じゃ跳ね橋は降りない．");
+#endif
 		else
+#if 0 /*JP*/
 		    You("%s no door there.",
 				Blind ? "feel" : "see");
+#else
+		pline("そこには扉はない%s．",
+				Blind ? "ようだ" : "ように見える");
+#endif
 		return(0);
 	    }
 	    /* ALI - artifact doors */
 	    if (artifact_door(x, y)) {
+#if 0 /*JP*/
 		pline("This door is too solid to force open.");
+#else
+		pline("この扉はあまりにも強固でこじ開けることができない．");
+#endif
 		return 0;
 	    }
 	    switch (door->doormask) {
 		case D_NODOOR:
+#if 0 /*JP*/
 		    pline("This doorway has no door.");
+#else
+		    pline("この戸口には扉がない．");
+#endif
 		    return(0);
 		case D_ISOPEN:
+#if 0 /*JP*/
 		    You("cannot force an open door.");
+#else
+		    You("すでに開いている扉をこじ開けることはできない．");
+#endif
 		    return(0);
 		case D_BROKEN:
+#if 0 /*JP*/
 		    pline("This door is broken.");
+#else
+		    pline("この扉は壊れている．");
+#endif
 		    return(0);
 		default:
+#if 0 /*JP*/
 		    c = yn("Break down the door?");
+#else
+		    c = yn("扉を破壊しますか？");
+#endif
 		    if(c == 'n') return(0);
 
 		    if(picktyp == 1)
+#if 0 /*JP*/
 			You("force your %s into a crack and pry.", xname(uwep));
+#else
+			You("%sを割れ目にねじ込んでこじ開けた．", xname(uwep));
+#endif
 		    else
+#if 0 /*JP*/
 			You("start bashing it with your %s.", xname(uwep));
-		    xlock.box = otmp;
+#else
+			You("%sで扉を殴りつけはじめた．", xname(uwep));
+#endif
 #ifdef LIGHTSABERS
 		    if (is_lightsaber(uwep))
 			xlock.chance = uwep->spe + 38;
@@ -716,11 +1033,17 @@
 		    xlock.usedtime = 0;    
 		    xlock.door = door;
 		    xlock.box = 0;
+/*JP
 		    set_occupation(forcedoor, "forcing the door", 0);
+*/
+		    set_occupation(forcedoor, "鍵をこじあける", 0);
 	return(1);
 	    }
 	}
+/*JP
 	You("decide not to force the issue.");
+*/
+	pline("それは無意味な行為だ．");
 	return(0);
 }
 
@@ -732,12 +1055,18 @@
 	struct monst *mtmp;
 
 	if (nohands(youmonst.data)) {
+/*JP
 	    You_cant("open anything -- you have no hands!");
+*/
+	    You("何も開けることができない！手がないんだもの！");
 	    return 0;
 	}
 
 	if (u.utrap && u.utraptype == TT_PIT) {
+/*JP
 	    You_cant("reach over the edge of the pit.");
+*/
+	    pline("落し穴の中から届かない．");
 	    return 0;
 	}
 
@@ -759,15 +1088,24 @@
 
 	if(!IS_DOOR(door->typ)) {
 		if (is_db_wall(cc.x,cc.y)) {
+/*JP
 		    There("is no obvious way to open the drawbridge.");
+*/
+		    pline("跳ね橋を降ろす明白な方法はない．");
 		    return(0);
 		}
+#if 0 /*JP*/
 		You("%s no door there.",
 				Blind ? "feel" : "see");
+#else
+		pline("そこには扉はない%s．",
+				Blind ? "ようだ" : "ように見える");
+#endif
 		return(0);
 	}
 
 	if (!(door->doormask & D_CLOSED)) {
+#if 0 /*JP*/
 	    const char *mesg;
 
 	    switch (door->doormask) {
@@ -777,20 +1115,45 @@
 	    default:	   mesg = " is locked"; break;
 	    }
 	    pline("This door%s.", mesg);
+#else
+	    switch(door->doormask) {
+		case D_BROKEN:
+		  pline("扉は壊れている．"); 
+		  break;
+		case D_NODOOR:
+		  pline("出入口には扉がない．");
+		  break;
+		case D_ISOPEN:
+		  pline("扉はもう開いている．");
+		  break;
+		default:
+		  pline("扉には鍵が掛かっている．"); 
+		  break;
+	    }
+#endif
 	    if (Blind) feel_location(cc.x,cc.y);
 	    return(0);
 	}
 
 	if(verysmall(youmonst.data)) {
+/*JP
 	    pline("You're too small to pull the door open.");
+*/
+	    You("小さすぎて扉を開けられない．");
 	    return(0);
 	}
 
 	/* door is known to be CLOSED */
 	if (rnl(20) < (ACURRSTR+ACURR(A_DEX)+ACURR(A_CON))/3) {
+/*JP
 	    pline_The("door opens.");
+*/
+	    pline("扉は開いた．");
 	    if(door->doormask & D_TRAPPED) {
+/*JP
 		b_trapped("door", FINGER);
+*/
+		b_trapped("扉", FINGER);
 		door->doormask = D_NODOOR;
 		if (*in_rooms(cc.x, cc.y, SHOPBASE)) add_damage(cc.x, cc.y, 0L);
 	    } else
@@ -802,7 +1165,10 @@
 	    unblock_point(cc.x,cc.y);		/* vision: new see through there */
 	} else {
 	    exercise(A_STR, TRUE);
+/*JP
 	    pline_The("door resists!");
+*/
+	    pline("なかなか開かない！");
 	}
 
 	return(1);
@@ -817,14 +1183,22 @@
 
 	if(mtmp && mtmp->m_ap_type != M_AP_FURNITURE) {
 		if (mtmp->m_ap_type == M_AP_OBJECT) goto objhere;
+#if 0 /*JP*/
 		pline("%s stands in the way!", !canspotmon(mtmp) ?
 			"Some creature" : Monnam(mtmp));
+#else
+		pline("%sが立ちふさがっている．", !canspotmon(mtmp) ?
+			"何者か" : Monnam(mtmp));
+#endif
 		if (!canspotmon(mtmp))
 		    map_invisible(mtmp->mx, mtmp->my);
 		return(TRUE);
 	}
 	if (OBJ_AT(x, y)) {
+/*JP
 objhere:	pline("%s's in the way.", Something);
+*/
+objhere:	pline("何かが出入口にある．");
 		return(TRUE);
 	}
 	return(FALSE);
@@ -838,12 +1212,18 @@
 	struct monst *mtmp;
 
 	if (nohands(youmonst.data)) {
+/*JP
 	    You_cant("close anything -- you have no hands!");
+*/
+	    You("閉めることができない！手がないんだもの！");
 	    return 0;
 	}
 
 	if (u.utrap && u.utraptype == TT_PIT) {
+/*JP
 	    You_cant("reach over the edge of the pit.");
+*/
+	    pline("落し穴の中から届かない．");
 	    return 0;
 	}
 
@@ -852,7 +1232,10 @@
 	x = u.ux + u.dx;
 	y = u.uy + u.dy;
 	if((x == u.ux) && (y == u.uy)) {
+/*JP
 		You("are in the way!");
+*/
+		pline("あなたが出入口にいるので閉まらない．");
 		return(1);
 	}
 
@@ -870,27 +1253,44 @@
 
 	if(!IS_DOOR(door->typ)) {
 		if (door->typ == DRAWBRIDGE_DOWN)
+/*JP
 		    There("is no obvious way to close the drawbridge.");
+*/
+		    pline("跳ね橋を上げる明白な方法はない．");
 		else
+#if 0 /*JP*/
 		    You("%s no door there.",
 				Blind ? "feel" : "see");
+#else
+		    pline("そこに扉はない%s．",
+				Blind ? "ようだ" : "ように見える");
+#endif
 		return(0);
 	}
 
 	if(door->doormask == D_NODOOR) {
+/*JP
 	    pline("This doorway has no door.");
+*/
+	    pline("扉は壊れている．");
 	    return(0);
 	}
 
 	if(obstructed(x, y)) return(0);
 
 	if(door->doormask == D_BROKEN) {
+/*JP
 	    pline("This door is broken.");
+*/
+	    pline("扉は壊れている．");
 	    return(0);
 	}
 
 	if(door->doormask & (D_CLOSED | D_LOCKED)) {
+/*JP
 	    pline("This door is already closed.");
+*/
+	    pline("扉はもう閉じている．");
 	    return(0);
 	}
 
@@ -900,7 +1300,10 @@
 		&& !u.usteed
 #endif
 		) {
+/*JP
 		 pline("You're too small to push the door closed.");
+*/
+		 You("小さすぎて扉を閉められない．");
 		 return(0);
 	    }
 	    if (
@@ -908,7 +1311,10 @@
 		 u.usteed ||
 #endif
 		rn2(25) < (ACURRSTR+ACURR(A_DEX)+ACURR(A_CON))/3) {
+/*JP
 		pline_The("door closes.");
+*/
+		pline("扉は閉じた．");
 		door->doormask = D_CLOSED;
 		if (Blind)
 		    feel_location(x,y);	/* the hero knows she closed it */
@@ -918,7 +1324,10 @@
 	    }
 	    else {
 	        exercise(A_STR, TRUE);
+/*JP
 	        pline_The("door resists!");
+*/
+	        pline("なかなか閉まらない！");
 	    }
 	}
 
@@ -935,7 +1344,10 @@
 	case WAN_LOCKING:
 	case SPE_WIZARD_LOCK:
 	    if (!obj->olocked) {	/* lock it; fix if broken */
+/*JP
 		pline("Klunk!");
+*/
+		pline("カチ！");
 		obj->olocked = 1;
 		obj->obroken = 0;
 		res = 1;
@@ -944,7 +1356,10 @@
 	case WAN_OPENING:
 	case SPE_KNOCK:
 	    if (obj->olocked) {		/* unlock; couldn't be broken */
+/*JP
 		pline("Klick!");
+*/
+		pline("コンコン！");
 		obj->olocked = 0;
 		res = 1;
 	    } else			/* silently fix if broken */
@@ -970,8 +1385,13 @@
 	boolean res = TRUE;
 	int loudness = 0;
 	const char *msg = (const char *)0;
+#if 0 /*JP*/
 	const char *dustcloud = "A cloud of dust";
 	const char *quickly_dissipates = "quickly dissipates";
+#else
+	const char *dustcloud = "ほこり";
+	const char *quickly_dissipates = "あっと言うまに飛び散った";
+#endif
 	int key = artifact_door(x, y);		/* ALI - Artifact doors */
 	
 	if (door->typ == SDOOR) {
@@ -987,7 +1407,10 @@
 		door->doormask = D_CLOSED | (door->doormask & D_TRAPPED);
 		}
 		newsym(x,y);
+/*JP
 		if (cansee(x,y)) pline("A door appears in the wall!");
+*/
+		if (cansee(x,y)) pline("壁から扉が現れた！");
 		if (otmp->otyp == WAN_OPENING || otmp->otyp == SPE_KNOCK)
 		    return TRUE;
 		break;		/* striking: continue door handling below */
@@ -1005,17 +1428,29 @@
 	    if (Is_rogue_level(&u.uz)) {
 	    	boolean vis = cansee(x,y);
 		/* Can't have real locking in Rogue, so just hide doorway */
+/*JP
 		if (vis) pline("%s springs up in the older, more primitive doorway.",
+*/
+		if (vis) pline("古くさい，原始的な出入口に%sが立ちこめた．",
 			dustcloud);
 		else
+/*JP
 			You_hear("a swoosh.");
+*/
+			You_hear("シューッという音を聞いた．");
 		if (obstructed(x,y)) {
+/*JP
 			if (vis) pline_The("cloud %s.",quickly_dissipates);
+*/
+			if (vis) pline("ほこりは%s．",quickly_dissipates);
 			return FALSE;
 		}
 		block_point(x, y);
 		door->typ = SDOOR;
+/*JP
 		if (vis) pline_The("doorway vanishes!");
+*/
+		if (vis) pline("出入口は消えた！");
 		newsym(x,y);
 		return TRUE;
 	    }
@@ -1026,7 +1461,11 @@
 	    if (t_at(x,y)) {
 		/* maketrap() clears doormask, so it should be NODOOR */
 		pline(
+#if 0 /*JP*/
 		"%s springs up in the doorway, but %s.",
+#else
+		"%sが出入口に立ちこめた，しかし%s",
+#endif
 		dustcloud, quickly_dissipates);
 		return FALSE;
 	    }
@@ -1034,25 +1473,53 @@
 	    switch (door->doormask & ~D_TRAPPED) {
 	    case D_CLOSED:
 		if (key)
+#if 0 /*JP*/
 		    msg = "The door closes!";
+#else
+		    msg = "扉が閉まった！";
+#endif
 		else
+#if 0 /*JP*/
 		msg = "The door locks!";
+#else
+		    msg = "扉に鍵がかかった！";
+#endif
 		break;
 	    case D_ISOPEN:
 		if (key)
+#if 0 /*JP*/
 		    msg = "The door swings shut!";
+#else
+		    msg = "扉は勢いよく閉まった！";
+#endif
 		else
+#if 0 /*JP*/
 		msg = "The door swings shut, and locks!";
+#else
+		    msg = "扉は勢いよく閉まり，鍵がかかった！";
+#endif
 		break;
 	    case D_BROKEN:
 		if (key)
+#if 0 /*JP*/
 		    msg = "The broken door reassembles!";
+#else
+		    msg = "壊れた扉が集まって元通りになった！";
+#endif
 		else
+#if 0 /*JP*/
 		msg = "The broken door reassembles and locks!";
+#else
+		    msg = "壊れた扉が集まって元通りになり，鍵がかかった！";
+#endif
 		break;
 	    case D_NODOOR:
 		msg =
+#if 0 /*JP*/
 		"A cloud of dust springs up and assembles itself into a door!";
+#else
+		"ほこりがたちこめ，集まって扉になった！";
+#endif
 		break;
 	    default:
 		res = FALSE;
@@ -1068,7 +1535,11 @@
 	case WAN_OPENING:
 	case SPE_KNOCK:
 	    if (!key && door->doormask & D_LOCKED) {
+#if 0 /*JP*/
 		msg = "The door unlocks!";
+#else
+		msg = "扉の鍵ははずれた！";
+#endif
 		door->doormask = D_CLOSED | (door->doormask & D_TRAPPED);
 	    } else res = FALSE;
 	    break;
@@ -1080,9 +1551,15 @@
 			(void) mb_trapped(m_at(x,y));
 		    else if (flags.verbose) {
 			if (cansee(x,y))
+/*JP
 			    pline("KABOOM!!  You see a door explode.");
+*/
+			    pline("ちゅどーん！扉が爆発した．");
 			else if (flags.soundok)
+/*JP
 			    You_hear("a distant explosion.");
+*/
+			    You_hear("遠くの爆発音を聞いた．");
 		    }
 		    door->doormask = D_NODOOR;
 		    unblock_point(x,y);
@@ -1093,9 +1570,15 @@
 		door->doormask = D_BROKEN;
 		if (flags.verbose) {
 		    if (cansee(x,y))
+/*JP
 			pline_The("door crashes open!");
+*/
+			pline("扉は壊れ開いた！");
 		    else if (flags.soundok)
+/*JP
 			You_hear("a crashing sound.");
+*/
+			You_hear("何かが壊れる音を聞いた．");
 		}
 		unblock_point(x,y);
 		newsym(x,y);
@@ -1131,7 +1614,10 @@
 	long save_Blinded;
 
 	if (otmp->oclass == POTION_CLASS) {
+/*JP
 		You("%s %s shatter!", Blind ? "hear" : "see", an(bottlename()));
+*/
+		You("%sが割れ%sた！", bottlename(), Blind ? "る音を聞い" : "");	
 		if (!breathless(youmonst.data) || haseyes(youmonst.data))
 			potionbreathe(otmp);
 		return;
@@ -1143,22 +1629,46 @@
 	thing = singular(otmp, xname);
 	Blinded = save_Blinded;
 	switch (objects[otmp->otyp].oc_material) {
+/*JP
 	case PAPER:	disposition = "is torn to shreds";
+*/
+	case PAPER:	disposition = "は寸断された";
 		break;
+/*JP
 	case WAX:	disposition = "is crushed";
+*/
+	case WAX:	disposition = "を床にぶちまけた";
 		break;
+/*JP
 	case VEGGY:	disposition = "is pulped";
+*/
+	case VEGGY:	disposition = "はどろどろになった";
 		break;
+/*JP
 	case FLESH:	disposition = "is mashed";
+*/
+	case FLESH:	disposition = "はどろどろになった";
 		break;
+/*JP
 	case GLASS:	disposition = "shatters";
+*/
+	case GLASS:	disposition = "は割れた";
 		break;
+/*JP
 	case WOOD:	disposition = "splinters to fragments";
+*/
+	case WOOD:	disposition = "はかけらになった";
 		break;
+/*JP
 	default:	disposition = "is destroyed";
+*/
+	default:	disposition = "は壊れた";
 		break;
 	}
+/*JP
 	pline("%s %s!", An(thing), disposition);
+*/
+	pline("%s%s！", thing, disposition);
 }
 
 /* ALI - Kevin Hugo's artifact doors.
diff -aurN slashem-0.0.7E6F2/src/mail.c jslashem-0.0.7E6F2-J0.0.8/src/mail.c
--- slashem-0.0.7E6F2/src/mail.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mail.c	2004-06-27 17:42:24.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef MAIL
@@ -259,9 +267,15 @@
 
 /* Let the mail daemon have a larger vocabulary. */
 static NEARDATA const char *mail_text[] = {
+#if 0 /*JP*/
     "Gangway!",
     "Look out!",
     "Pardon me!"
+#else
+    "どいたどいた！",
+    "気をつけろ！",
+    "じゃまするよ！"
+#endif
 };
 #define md_exclamations()	(mail_text[rn2(3)])
 
@@ -321,7 +335,10 @@
 	if ((mon = m_at(fx,fy)) != 0)	/* save monster at this position */
 	    verbalize(md_exclamations());
 	else if (fx == u.ux && fy == u.uy)
+/*JP
 	    verbalize("Excuse me.");
+*/
+	    verbalize("ちょっとしつれい．");
 
 	place_monster(md,fx,fy);	/* put md down */
 	newsym(fx,fy);			/* see it */
@@ -346,7 +363,10 @@
     if ((mon = m_at(fx, fy)) != 0) {
 	place_monster(md, fx, fy);	/* display md with text below */
 	newsym(fx, fy);
+/*JP
 	verbalize("This place's too crowded.  I'm outta here.");
+*/
+	verbalize("ここは混みすぎ．ここで待ってるよ．");
 
 	if ((mon->mx != fx) || (mon->my != fy))	/* put mon back */
 	    place_worm_seg(mon, fx, fy);
@@ -384,12 +404,18 @@
     if (!md_rush(md, stop.x, stop.y)) goto go_back;
 
     message_seen = TRUE;
+/*JP
     verbalize("%s, %s!  %s.", Hello(md), plname, info->display_txt);
+*/
+    verbalize("%s，%s．", Hello(md, TRUE), info->display_txt);
 
     if (info->message_typ) {
 	struct obj *obj = mksobj(SCR_MAIL, FALSE, FALSE);
 	if (distu(md->mx,md->my) > 2)
+/*JP
 	    verbalize("Catch!");
+*/
+	    verbalize("ほらよ！");
 	display_nhwindow(WIN_MESSAGE, FALSE);
 	if (info->object_nam) {
 	    obj = oname(obj, info->object_nam);
@@ -402,7 +428,10 @@
 		/* Note: renaming object will discard the hidden command. */
 	    }
 	}
+/*JP
 	obj = hold_another_object(obj, "Oops!",
+*/
+	obj = hold_another_object(obj, "おっと！",
 				  (const char *)0, (const char *)0);
     }
 
@@ -413,7 +442,10 @@
     /* deliver some classes of messages even if no daemon ever shows up */
 give_up:
     if (!message_seen && info->message_typ == MSG_OTHER)
+/*JP
 	pline("Hark!  \"%s.\"", info->display_txt);
+*/
+	pline("「%s．」と言うことだ！", info->display_txt);
 }
 
 # if !defined(UNIX) && !defined(VMS) && !defined(LAN_MAIL)
@@ -430,7 +462,10 @@
 	}
 	if (--mustgetmail <= 0) {
 		static struct mail_info
+/*JP
 			deliver = {MSG_MAIL,"I have some mail for you",0,0};
+*/
+			deliver = {MSG_MAIL,"メールを持ってきたよ",0,0};
 		newmail(&deliver);
 		mustgetmail = -1;
 	}
@@ -445,11 +480,23 @@
     char buf[BUFSZ];
     line = getrumor(bcsign(otmp), buf, TRUE);
     if (!*line)
+#if 0 /*JP*/
 	   line = "NetHack rumors file closed for renovation.";
+#else
+	   line = "噂の真相は刷新のため休刊している．";
+#endif
     if (Blind) {
+#if 0 /*JP*/
 	pline("Unfortunately you cannot see what it says.");
+#else
+	pline("不幸にも何と書いてあるのか見ることができない．");
+#endif
     } else
+#if 0 /*JP*/
 	pline("It reads:  \"%s\"", line);
+#else
+	pline("それを読んだ：\"%s\"", line);
+#endif
 
 }
 
@@ -479,10 +526,16 @@
 		if (nmstat.st_size) {
 		    static struct mail_info deliver = {
 #  ifndef NO_MAILREADER
+/*JP
 			MSG_MAIL, "I have some mail for you",
+*/
+			MSG_MAIL, "メールを持ってきたよ",
 #  else
 			/* suppress creation and delivery of scroll of mail */
+/*JP
 			MSG_OTHER, "You have some mail in the outside world",
+*/
+			MSG_OTHER, "外の世界からのメールだ",
 #  endif
 			0, 0
 		    };
@@ -593,10 +646,16 @@
 	if (lan_mail_check()) {
 		    static struct mail_info deliver = {
 #  ifndef NO_MAILREADER
+/*JP
 			MSG_MAIL, "I have some mail for you",
+*/
+			MSG_MAIL, "メールを持ってきたよ",
 #  else
 			/* suppress creation and delivery of scroll of mail */
+/*JP
 			MSG_OTHER, "You have some mail in the outside world",
+*/
+			MSG_OTHER, "外の世界からのメールだ",
 #  endif
 			0, 0
 		    };
diff -aurN slashem-0.0.7E6F2/src/makemon.c jslashem-0.0.7E6F2-J0.0.8/src/makemon.c
--- slashem-0.0.7E6F2/src/makemon.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/makemon.c	2004-06-27 16:53:30.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "epri.h"
 #include "emin.h"
@@ -2135,9 +2143,15 @@
 	    ptr = &mons[newtype];
 	    if (mvitals[newtype].mvflags & G_GENOD) {	/* allow G_EXTINCT */
 		if (sensemon(mtmp))
+#if 0 /*JP*/
 		    pline("As %s grows up into %s, %s %s!", mon_nam(mtmp),
 			an(ptr->mname), mhe(mtmp),
 			nonliving(ptr) ? "expires" : "dies");
+#else
+		    pline("%sが成長して%sになると%sしまった！", mon_nam(mtmp),
+			jtrns_mon_gen(ptr->mname, mtmp->female),
+			nonliving(ptr) ? "消えて" : "死んで");
+#endif
 		set_mon_data(mtmp, ptr, -1);	/* keep mvitals[] accurate */
 		mondied(mtmp);
 		return (struct permonst *)0;
diff -aurN slashem-0.0.7E6F2/src/mcastu.c jslashem-0.0.7E6F2-J0.0.8/src/mcastu.c
--- slashem-0.0.7E6F2/src/mcastu.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mcastu.c	2004-07-27 09:01:48.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /* monster mage spells */
@@ -55,21 +63,39 @@
 	    const char *point_msg;  /* spellcasting monsters are impolite */
 
 	    if (undirected)
+/*JP
 		point_msg = "all around, then curses";
+*/
+		point_msg = "あたり一面を";
 	    else if ((Invis && !perceives(mtmp->data) &&
 			(mtmp->mux != u.ux || mtmp->muy != u.uy)) ||
 		    (youmonst.m_ap_type == M_AP_OBJECT &&
 			youmonst.mappearance == STRANGE_OBJECT) ||
 		    u.uundetected)
+/*JP
 		point_msg = "and curses in your general direction";
+*/
+		point_msg = "あなたのいるあたりを";
 	    else if (Displaced && (mtmp->mux != u.ux || mtmp->muy != u.uy))
+/*JP
 		point_msg = "and curses at your displaced image";
+*/
+		point_msg = "あなたの幻影を";
 	    else
+/*JP
 		point_msg = "at you, then curses";
+*/
+		point_msg = "あなたを";
 
+/*JP
 	    pline("%s points %s.", Monnam(mtmp), point_msg);
+*/
+	    pline("%sは%s指差し，呪いをかけた．", Monnam(mtmp), point_msg);
 	} else if ((!(moves % 4) || !rn2(4))) {
+/*JP
 	    if (flags.soundok) Norep("You hear a mumbled curse.");
+*/
+	    if (flags.soundok) Norep("呪いの言葉をつぶやく声を聞いた．");
 	}
 }
 
@@ -251,10 +277,17 @@
 	   penalizing mspec_used. */
 	if (!foundyou && thinks_it_foundyou &&
 		!is_undirected_spell(mattk->adtyp, spellnum)) {
+#if 0 /*JP*/
 	    pline("%s casts a spell at %s!",
 		canseemon(mtmp) ? Monnam(mtmp) : "Something",
 		levl[mtmp->mux][mtmp->muy].typ == WATER
 		    ? "empty water" : "thin air");
+#else
+	    pline("%sは何もない%sに魔法をかけた！",
+		canseemon(mtmp) ? Monnam(mtmp) : "何者か",
+		levl[mtmp->mux][mtmp->muy].typ == WATER
+		    ? "水中" : "空間");
+#endif
 	    return(0);
 	}
 
@@ -301,10 +334,15 @@
 	if (mtmp->mconf || rnd(100) > chance) { /* fumbled attack */
 #endif
 	    if (canseemon(mtmp) && flags.soundok)
+#if 0 /*JP*/
 		pline_The("air crackles around %s.", mon_nam(mtmp));
+#else
+		pline("%sの回りの空気はピリピリしている．", mon_nam(mtmp));
+#endif
 	    return(0);
 	}
 	if (canspotmon(mtmp) || !is_undirected_spell(mattk->adtyp, spellnum)) {
+#if 0 /*JP*/
 	    pline("%s casts a spell%s!",
 		  canspotmon(mtmp) ? Monnam(mtmp) : "Something",
 		  is_undirected_spell(mattk->adtyp, spellnum) ? "" :
@@ -314,6 +352,21 @@
 		  (Displaced && (mtmp->mux != u.ux || mtmp->muy != u.uy)) ?
 		  " at your displaced image" :
 		  " at you");
+#else
+	    char *who = (canspotmon(mtmp) ? Monnam(mtmp) : "何者か");
+	    if(is_undirected_spell(mattk->adtyp, spellnum)){
+		pline("%sは呪文を唱えた！", who);
+	    } else {
+		pline("%sはあなた%sに魔法をかけた！",
+		      who,
+		      (Invisible && !perceives(mtmp->data) && 
+		       (mtmp->mux != u.ux || mtmp->muy != u.uy)) ?
+		      "のすぐそば" :
+		      (Displaced && (mtmp->mux != u.ux || mtmp->muy != u.uy)) ?
+		      "の幻影" :
+		      "");
+	    }
+#endif
 	}
 
 /*
@@ -338,31 +391,52 @@
 	switch (mattk->adtyp) {
 
 	    case AD_FIRE:
+/*JP
 		pline("You're enveloped in flames.");
+*/
+		You("炎につつまれた．");
 		if(Fire_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			pline("But you resist the effects.");
+*/
+			pline("しかし，あなたは影響を受けない．");
 			dmg = 0;
 		}
 		if (Slimed) {
+/*JP
 			pline("The slime is burned away!");
+*/
+			pline("スライムが焼け落ちた！");
 			Slimed =0;
 		}
 		burn_away_slime();
 		break;
 	    case AD_COLD:
+/*JP
 		pline("You're covered in frost.");
+*/
+		You("氷に覆われた．");
 		if(Cold_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			pline("But you resist the effects.");
+*/
+			pline("しかし，あなたは影響を受けない．");
 			dmg = 0;
 		}
 		break;
 	    case AD_MAGM:
+/*JP
 		You("are hit by a shower of missiles!");
+*/
+		You("魔法の矢をくらった！");
 		if(Antimagic) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			pline_The("missiles bounce off!");
+*/
+			pline("魔法の矢は反射した！");
 			dmg = 0;
 		}
 		break;
@@ -404,26 +478,50 @@
 
     switch (spellnum) {
     case MGC_DEATH_TOUCH:
+#if 0 /*JP*/
 	pline("Oh no, %s's using the touch of death!", mhe(mtmp));
+#else
+	pline("なんてこったい，%sは死の宣告を使っている！", mhe(mtmp));
+#endif
 	if (nonliving(youmonst.data) || is_demon(youmonst.data)) {
+#if 0 /*JP*/
 	    You("seem no deader than before.");
+#else
+	    You("これ以上死ねないようだ．");
+#endif
 	} else if (!Antimagic && rn2(mtmp->m_lev) > 12) {
 	    if (Hallucination) {
+#if 0 /*JP*/
 		You("have an out of body experience.");
+#else
+		You("幽体離脱を体験した．");
+#endif
 	    } else {
 		killer_format = KILLED_BY_AN;
+#if 0 /*JP*/
 		killer = "touch of death";
+#else
+		killer = "死の宣告で";
+#endif
 		done(DIED);
 	    }
 	} else {
 	    if (Antimagic) shieldeff(u.ux, u.uy);
+#if 0 /*JP*/
 	    pline("Lucky for you, it didn't work!");
+#else
+	    pline("運のよいことになんともなかった！");
+#endif
 	}
 	dmg = 0;
 	break;
     case MGC_CREATE_POOL:
 	if (levl[u.ux][u.uy].typ == ROOM || levl[u.ux][u.uy].typ == CORR) {
+#if 0 /*JP*/
 	    pline("A pool appears beneath you!");
+#else
+	    pline("あなたの足元に水たまりが出現した！");
+#endif
 	    levl[u.ux][u.uy].typ = POOL;
 	    del_engr_at(u.ux, u.uy);
 	    water_damage(level.objects[u.ux][u.uy], FALSE, TRUE);
@@ -435,7 +533,11 @@
 	break;
     case MGC_CLONE_WIZ:
 	if (mtmp->iswiz && flags.no_of_wizards == 1) {
+#if 0 /*JP*/
 	    pline("Double Trouble...");
+#else
+	    pline("二重苦だ．．．");
+#endif
 	    clonewiz();
 	    dmg = 0;
 	} else
@@ -447,20 +549,40 @@
 
 	count = nasty(mtmp);	/* summon something nasty */
 	if (mtmp->iswiz)
+#if 0 /*JP*/
 	    verbalize("Destroy the thief, my pet%s!", plur(count));
+#else
+	    verbalize("盗賊を殺せ！我が下僕よ！");
+#endif
 	else {
+#if 0 /*JP*/
 	    const char *mappear =
 		(count == 1) ? "A monster appears" : "Monsters appear";
+#else
+	    const char *mappear = "怪物が%s現れた！";
+#endif
 
 	    /* messages not quite right if plural monsters created but
 	       only a single monster is seen */
 	    if (Invisible && !perceives(mtmp->data) &&
 				    (mtmp->mux != u.ux || mtmp->muy != u.uy))
+#if 0 /*JP*/
 		pline("%s around a spot near you!", mappear);
+#else
+		pline(mappear, "あなたのすぐそばに");
+#endif
 	    else if (Displaced && (mtmp->mux != u.ux || mtmp->muy != u.uy))
+#if 0 /*JP*/
 		pline("%s around your displaced image!", mappear);
+#else
+		pline(mappear, "あなたの幻影のすぐそばに");
+#endif
 	    else
+#if 0 /*JP*/
 		pline("%s from nowhere!", mappear);
+#else
+		pline(mappear, "どこからともなく");
+#endif
 	}
 	dmg = 0;
 	break;
@@ -470,36 +592,64 @@
 		coord mm;   
 		mm.x = u.ux;   
 		mm.y = u.uy;   
+#if 0 /*JP*/
 		pline("Undead creatures are called forth from the grave!");   
+#else
+		pline("不死の怪物たちが墓の外に呼び出された！");
+#endif
 		mkundead(&mm, FALSE, NO_MINVENT);   
 	}
 	dmg = 0;   
 	break;   
     case MGC_AGGRAVATION:
+#if 0 /*JP*/
 	You_feel("that monsters are aware of your presence.");
+#else
+	You_feel("怪物たちがあなたの存在に気付いたような気がした．");
+#endif
 	aggravate();
 	dmg = 0;
 	break;
     case MGC_CURSE_ITEMS:
+#if 0 /*JP*/
 	You_feel("as if you need some help.");
+#else
+	You_feel("助けが必要な気がした．");
+#endif
 	rndcurse();
 	dmg = 0;
 	break;
     case MGC_DESTRY_ARMR:
 	if (Antimagic) {
 	    shieldeff(u.ux, u.uy);
+#if 0 /*JP*/
 	    pline("A field of force surrounds you!");
+#else
+	    pline("不思議な力があなたをとりまいた！");
+#endif
 	} else if (!destroy_arm(some_armor(&youmonst))) {
+#if 0 /*JP*/
 	    Your("skin itches.");
+#else
+	    You("ムズムズした．");
+#endif
 	}
 	dmg = 0;
 	break;
     case MGC_WEAKEN_YOU:		/* drain strength */
 	if (Antimagic) {
 	    shieldeff(u.ux, u.uy);
+#if 0 /*JP*/
 	    You_feel("momentarily weakened.");
+#else
+	    You_feel("一瞬弱くなったような気がした．");
+#endif
 	} else {
+#if 0 /*JP*/
 	    You("suddenly feel weaker!");
+#else
+	    You("突然弱くなったような気がした．");
+#endif
 	    dmg = mtmp->m_lev - 6;
 	    if (Half_spell_damage) dmg = (dmg + 1) / 2;
 	    losestr(rnd(dmg));
@@ -511,8 +661,13 @@
     case MGC_DISAPPEAR:		/* makes self invisible */
 	if (!mtmp->minvis && !mtmp->invis_blkd) {
 	    if (canseemon(mtmp))
+#if 0 /*JP*/
 		pline("%s suddenly %s!", Monnam(mtmp),
 		      !See_invisible ? "disappears" : "becomes transparent");
+#else
+		pline("%sは突然%s！", Monnam(mtmp),
+		      !See_invisible ? "消えた" : "透明になった");
+#endif
 	    mon_set_minvis(mtmp);
 	    dmg = 0;
 	} else
@@ -522,10 +677,16 @@
 	if (Antimagic || Free_action) {
 	    shieldeff(u.ux, u.uy);
 	    if (!Stunned)
+/*JP
 		You_feel("momentarily disoriented.");
+*/
+		You("一瞬方向感覚を失った．");
 	    make_stunned(1L, FALSE);
 	} else {
+/*JP
 	    You(Stunned ? "struggle to keep your balance." : "reel...");
+*/
+	    You(Stunned ? "バランスを取ろうともがいた．" : "よろめいた．．．");
 	    dmg = d(ACURR(A_DEX) < 12 ? 6 : 4, 4);
 	    if (Half_spell_damage) dmg = (dmg + 1) / 2;
 	    make_stunned(HStun + dmg, FALSE);
@@ -539,7 +700,10 @@
     case MGC_CURE_SELF:
 	if (mtmp->mhp < mtmp->mhpmax) {
 	    if (canseemon(mtmp))
+/*JP
 		pline("%s looks better.", Monnam(mtmp));
+*/
+		pline("%sは気分がよくなったようだ．", Monnam(mtmp));
 	    /* note: player healing does 6d4; this used to do 1d8 */
 	    if ((mtmp->mhp += d(3,6)) > mtmp->mhpmax)
 		mtmp->mhp = mtmp->mhpmax;
@@ -554,13 +718,25 @@
 	    dmg = (dmg + 1) / 2;
 	}
 	if (dmg <= 5)
+/*JP
 	    You("get a slight %sache.", body_part(HEAD));
+*/
+	    You("ちょっと%s痛がした．",body_part(HEAD));
 	else if (dmg <= 10)
+/*JP
 	    Your("brain is on fire!");
+*/
+	    You("怒りにつつまれた！");
 	else if (dmg <= 20)
+/*JP
 	    Your("%s suddenly aches painfully!", body_part(HEAD));
+*/
+	    You("突然%s痛におそわれた！", body_part(HEAD));
 	else
+/*JP
 	    Your("%s suddenly aches very painfully!", body_part(HEAD));
+*/
+	    You("突然激しい%s痛におそわれた！", body_part(HEAD));
 	break;
     default:
 	impossible("mcastu: invalid magic spell (%d)", spellnum);
@@ -586,12 +762,18 @@
     switch (spellnum) {
     case CLC_GEYSER:
 	/* this is physical damage, not magical damage */
+/*JP
 	pline("A sudden geyser slams into you from nowhere!");
+*/
+	pline("濁流がどこからともなく現れてあなたを打ちつけた！");
 	dmg = d(8, 6);
 	if (Half_physical_damage) dmg = (dmg + 1) / 2;
 	break;
     case CLC_FIRE_PILLAR:
+/*JP
 	pline("A pillar of fire strikes all around you!");
+*/
+	pline("あなたの周りに火柱が立った！");
 	if (Fire_resistance) {
 	    shieldeff(u.ux, u.uy);
 	    dmg = 0;
@@ -611,10 +793,19 @@
 
 	/* WAC add lightning strike effect */
 	zap_strike_fx(u.ux, u.uy, AD_ELEC - 1);
+#if 0 /*JP*/
 	pline("A bolt of lightning strikes down at you from above!");
 	reflects = ureflects("It bounces off your %s%s.", "");
+#else
+	pline("あなたの真上から稲妻が降り注いだ！");
+	reflects = ureflects("それはあなたの%s%sで跳ね返った．", "");
+#endif
 	if (!Blind) {
+#if 0 /*JP*/
 	    pline("You are blinded by the flash!");
+#else
+	    You("まばゆい光で目がくらんだ！");
+#endif
 	    make_blinded(Half_spell_damage ? 10L : 20L, FALSE);
 	}
 	if (reflects || Shock_resistance) {
@@ -630,7 +821,10 @@
 	break;
     }
     case CLC_CURSE_ITEMS:
+/*JP
 	You_feel("as if you need some help.");
+*/
+	You_feel("助けが必要な気がした．");
 	rndcurse();
 	dmg = 0;
 	break;
@@ -667,30 +861,54 @@
          * -- message assumes plural monsters seen
          */
 	if (!success)
+#if 0 /*JP*/
 	    pline("%s casts at a clump of sticks, but nothing happens.",
+#else
+	    pline("%sは棒切れに魔法をかけたが，なにもおこらなかった．",
+#endif
 		Monnam(mtmp));
 	else if (let == S_SNAKE)
+#if 0 /*JP*/
 	    pline("%s transforms a clump of sticks into snakes!",
+#else
+	    pline("%sは棒切れをヘビに変えた！",
+#endif
 		Monnam(mtmp));
 	else if (Invisible && !perceives(mtmp->data) &&
 				(mtmp->mux != u.ux || mtmp->muy != u.uy))
+#if 0 /*JP*/
 	    pline("%s summons insects around a spot near you!",
+#else
+	    pline("%sは虫をあなたのすぐそばに召喚した！",
+#endif
 		Monnam(mtmp));
 	else if (Displaced && (mtmp->mux != u.ux || mtmp->muy != u.uy))
+#if 0 /*JP*/
 	    pline("%s summons insects around your displaced image!",
+#else
+	    pline("%sは虫をあなたの幻影の周りに召喚した！",
+#endif
 		Monnam(mtmp));
 	else
+#if 0 /*JP*/
 	    pline("%s summons insects!", Monnam(mtmp));
+#else
+	    pline("%sは虫を召喚した！", Monnam(mtmp));
+#endif
 	dmg = 0;
 	break;
       }
     case CLC_BLIND_YOU:
 	/* note: resists_blnd() doesn't apply here */
 	if (!Blinded) {
+#if 0 /*JP*/
 	    int num_eyes = eyecount(youmonst.data);
 	    pline("Scales cover your %s!",
 		  (num_eyes == 1) ?
 		  body_part(EYE) : makeplural(body_part(EYE)));
+#else
+	    pline("鱗があなたの%sを覆った！", body_part(EYE));
+#endif
 	    make_blinded(Half_spell_damage ? 100L : 200L, FALSE);
 	    if (!Blind) Your(vision_clears);
 	    dmg = 0;
@@ -701,11 +919,17 @@
 	if (Antimagic || Free_action) {
 	    shieldeff(u.ux, u.uy);
 	    if (multi >= 0)
+/*JP
 		You("stiffen briefly.");
+*/
+		You("一瞬硬直した．");
 	    nomul(-1);
 	} else {
 	    if (multi >= 0)
+/*JP
 		You("are frozen in place!");
+*/
+		You("その場で動けなくなった！");
 	    dmg = 4 + (int)mtmp->m_lev;
 	    if (Half_spell_damage) dmg = (dmg + 1) / 2;
 	    nomul(-dmg);
@@ -716,7 +940,10 @@
     case CLC_CONFUSE_YOU:
 	if (Antimagic) {
 	    shieldeff(u.ux, u.uy);
+/*JP
 	    You_feel("momentarily dizzy.");
+*/
+	    You("一瞬めまいがした．");
 	} else {
 	    boolean oldprop = !!Confusion;
 
@@ -724,16 +951,28 @@
 	    if (Half_spell_damage) dmg = (dmg + 1) / 2;
 	    make_confused(HConfusion + dmg, TRUE);
 	    if (Hallucination)
+#if 0 /*JP*/
 		You_feel("%s!", oldprop ? "trippier" : "trippy");
+#else
+		You("%sへろへろになった！", oldprop ? "もっと" : "");
+#endif
 	    else
+#if 0 /*JP*/
 		You_feel("%sconfused!", oldprop ? "more " : "");
+#else
+		You("%s混乱した！", oldprop ? "もっと" : "");
+#endif
 	}
 	dmg = 0;
 	break;
     case CLC_CURE_SELF:
 	if (mtmp->mhp < mtmp->mhpmax) {
 	    if (canseemon(mtmp))
+#if 0 /*JP*/
 		pline("%s looks better.", Monnam(mtmp));
+#else
+		pline("%sは気分がよくなったようだ．", Monnam(mtmp));
+#endif
 	    /* note: player healing does 6d4; this used to do 1d8 */
 	    if ((mtmp->mhp += d(3,6)) > mtmp->mhpmax)
 		mtmp->mhp = mtmp->mhpmax;
@@ -746,13 +985,25 @@
 	    dmg = (dmg + 1) / 2;
 	}
 	if (dmg <= 5)
+/*JP
 	    Your("skin itches badly for a moment.");
+*/
+	    Your("皮膚は一瞬，ムズムズっとした．");
 	else if (dmg <= 10)
+/*JP
 	    pline("Wounds appear on your body!");
+*/
+	    pline("傷があなたの体に出来た！");
 	else if (dmg <= 20)
+/*JP
 	    pline("Severe wounds appear on your body!");
+*/
+	    pline("ひどい傷があなたの体に出来た！");
 	else
+/*JP
 	    Your("body is covered with painful wounds!");
+*/
+	    pline("体が傷だらけになった！");
 	break;
     default:
 	impossible("mcastu: invalid clerical spell (%d)", spellnum);
@@ -889,7 +1140,10 @@
 	    nomul(0);
 	    if(mattk->adtyp && (mattk->adtyp < 11)) { /* no cf unsigned >0 */
 		if(canseemon(mtmp))
+/*JP
 		    pline("%s zaps you with a %s!", Monnam(mtmp),
+*/
+		    pline("%sは%sをあなたに向けて放った．", Monnam(mtmp),
 			  flash_types[ad_to_typ(mattk->adtyp)]);
 		buzz(-ad_to_typ(mattk->adtyp), (int)mattk->damn,
 		     mtmp->mx, mtmp->my, sgn(tbx), sgn(tby));
diff -aurN slashem-0.0.7E6F2/src/mhitm.c jslashem-0.0.7E6F2-J0.0.8/src/mhitm.c
--- slashem-0.0.7E6F2/src/mhitm.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mhitm.c	2004-08-22 14:43:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "artifact.h"
 #include "edog.h"
@@ -18,7 +26,10 @@
 static NEARDATA struct obj *otmp;
 
 static const char brief_feeling[] =
+/*JP
 	"have a %s feeling for a moment, then it passes.";
+*/
+	"%s気持におそわれたが，すぐに過ぎさった．";
 
 STATIC_DCL char *FDECL(mon_nam_too, (char *,struct monst *,struct monst *));
 STATIC_DCL void FDECL(mrustm, (struct monst *, struct monst *, struct obj *));
@@ -50,11 +61,15 @@
 {
 	Strcpy(outbuf, mon_nam(mon));
 	if (mon == other_mon)
+#if 1 /*JP*/
+	    Strcpy(outbuf, "自分自身");
+#else
 	    switch (pronoun_gender(mon)) {
 	    case 0:	Strcpy(outbuf, "himself");  break;
 	    case 1:	Strcpy(outbuf, "herself");  break;
 	    default:	Strcpy(outbuf, "itself"); break;
 	    }
+#endif
 	return outbuf;
 }
 
@@ -68,9 +83,16 @@
 	if(flags.soundok && (farq != far_noise || moves-noisetime > 10)) {
 		far_noise = farq;
 		noisetime = moves;
+#if 0 /*JP*/
 		You_hear("%s%s.",
 			(mattk->aatyp == AT_EXPL) ? "an explosion" : "some noises",
 			farq ? " in the distance" : "");
+#else
+		You_hear("%s%sを聞いた．",
+		        farq ? "遠くで" : "",
+			(mattk->aatyp == AT_EXPL) ? "爆発音" : "何かが戦う音"
+			);
+#endif
 	}
 }
 
@@ -113,17 +135,34 @@
 		if (mdef->m_ap_type) seemimic(mdef);
 		if (magr->m_ap_type) seemimic(magr);
 		if (flags.verbose && !nearmiss && blocker) {
+#if 0 /*JP*/
 			fmt = "%s %s blocks";
 			Sprintf(buf,fmt, s_suffix(Monnam(mdef)), 
 				aobjnam(blocker, (char *)0));
 	                pline("%s %s.", buf, mon_nam_too(mon_name, magr, mdef));
+#else
+			fmt = "%sは%%sの攻撃を%sによって防いだ．";
+			Sprintf(buf,fmt, s_suffix(Monnam(mdef)), xname(blocker));
+	                pline(buf, mon_nam_too(mon_name, magr, mdef));
+#endif
 		} else {
 		fmt = (could_seduce(magr,mdef,mattk) && !magr->mcan) ?
+#if 0 /*JP*/
 				"%s pretends to be friendly to" : 
 				((flags.verbose && nearmiss) ? "%s just misses" : 
 				  "%s misses");
+#else
+			"%sは%%sに友好的なふりをした．" :
+			((flags.verbose && nearmiss) ?
+			  "%sの%%sへの攻撃は空を切った．" : 
+			  "%sの%%sへの攻撃は外れた．");
+#endif
 		Sprintf(buf, fmt, Monnam(magr));
+#if 0 /*JP*/
 	                pline("%s %s.", buf, mon_nam_too(mon_name, mdef, magr));
+#else
+			pline(buf, mon_nam_too(mon_name, mdef, magr));
+#endif
 		}
 	} else  noises(magr, mattk);
 }
@@ -171,7 +210,10 @@
 		if(monnear(mtmp,mon->mx,mon->my)) {
 		    if(!u.uswallow && (mtmp == u.ustuck)) {
 			if(!rn2(4)) {
+/*JP
 			    pline("%s releases you!", Monnam(mtmp));
+*/
+			    pline("%sはあなたを解放した！", Monnam(mtmp));
 			    setustuck(0);
 			} else
 			    break;
@@ -268,10 +310,17 @@
 	mdef->mundetected = 0;
 	newsym(mdef->mx, mdef->my);
 	if(canseemon(mdef) && !sensemon(mdef)) {
+#if 0 /*JP:T*/
 	    if (u.usleep) You("dream of %s.",
 				(mdef->data->geno & G_UNIQ) ?
 				a_monnam(mdef) : makeplural(m_monnam(mdef)));
+#else
+	    if (u.usleep) You("%sの夢を見た．", a_monnam(mdef));
+#endif
+/*JP
 	    else pline("Suddenly, you notice %s.", a_monnam(mdef));
+*/
+	    else pline("突然，あなたは%sに気がついた．", a_monnam(mdef));
 	}
     }
 
@@ -323,12 +372,25 @@
 		    char buf[BUFSZ];
 		    Strcpy(buf, Monnam(magr));
 		    if (vis)
+#if 0 /*JP*/
 			pline("%s points at %s, then curses.", buf,
 				mon_nam(mdef));
+#else
+			pline("%sは%sを指差し，呪いをかけた．", buf,
+			      mon_nam(mdef));
+#endif
 		    else
+#if 0 /*JP*/
 			pline("%s points and curses at something.", buf);
+#else
+			pline("%sはどこかを指差し，呪いをかけた．", buf);
+#endif
 		} else if (flags.soundok)
+#if 0 /*JP*/
 		    Norep("You hear a mumbled curse.");
+#else
+		    Norep("呪いの言葉をつぶやく声を聞いた．");
+#endif
 		break;
 
 	    case AT_WEAP:
@@ -388,7 +450,10 @@
 				char buf[BUFSZ];
 
 				Strcpy(buf, Monnam(mdef));
+/*JP
 				pline("%s divides as %s hits it!", buf, mon_nam(magr));
+*/
+				pline("%sの攻撃で%sが分裂した！", mon_nam(magr), buf);
 			    }
 			}
 		    }
@@ -481,14 +546,26 @@
 	if (magr->mcan) {
 	    if (flags.soundok) {
 		if (canseemon(magr))
+#if 0 /*JP*/
 		    pline("%s coughs.", Monnam(magr));
+#else
+		    pline("%sはせきをした．", Monnam(magr));
+#endif
 		else
+#if 0 /*JP*/
 		    You_hear("a cough.");
+#else
+		    You_hear("せきの音を聞いた．");
+#endif
 	    }
 	} else if (!magr->mspec_used && rn2(3)) {
 	    if (typ >= AD_MAGM && typ <= AD_ACID) {
 		if (canseemon(magr))
+#if 0 /*JP*/
 		    pline("%s breathes %s!", Monnam(magr), breathwep[typ-1]);
+#else
+		    pline("%sは%sのブレスを吐いた！", Monnam(magr), breathwep[typ-1]);
+#endif
 		mhp = mdef->mhp;
 		buzz((int)(-20 - (typ-1)), (int)mattk->damn,
 			magr->mx, magr->my, sgn(tbx), sgn(tby));
@@ -517,10 +594,18 @@
     if (magr->mcan) {
 	if (flags.soundok) {
 	    if (canseemon(magr))
+#if 0 /*JP*/
 		pline("A dry rattle comes from %s throat.",
+#else
+		pline("%sの喉がガラガラと鳴った．",
+#endif
 			s_suffix(mon_nam(magr)));
 	    else
+#if 0 /*JP*/
 		You_hear("a dry rattle.");
+#else
+		You_hear("喉をガラガラと鳴らす音を聞いた．");
+#endif
 	}
 	return MM_MISS;
     }
@@ -540,7 +625,11 @@
 	}
 	if (!rn2(BOLT_LIM - distmin(magr->mx, magr->my, mdef->mx, mdef->my))) {
 	    if (canseemon(magr))
+#if 0 /*JP*/
 		pline("%s spits venom!", Monnam(magr));
+#else
+		pline("%sは毒を吐いた！", Monnam(magr));
+#endif
 	    mhp = mdef->mhp;
 	    m_throw(magr, magr->mx, magr->my, sgn(tbx), sgn(tby),
 		    distmin(magr->mx, magr->my, mdef->mx, mdef->my), otmp);
@@ -586,8 +675,12 @@
 
 	if (vis) {
 	    onm = xname(otmp);
+#if 0 /*JP*/
 	    pline("%s thrusts %s.", Monnam(magr),
 		  obj_is_pname(otmp) ? the(onm) : an(onm));
+#else
+	    pline("%sは%sを突き刺した．", Monnam(magr), onm);
+#endif
 	}
 
 	dam = dmgval(otmp, mdef);
@@ -599,29 +692,59 @@
 
 	if (find_mac(mdef) + hitv <= rnd(20)) {
 	    if (flags.verbose && canseemon(mdef))
+#if 0 /*JP*/
 		pline("It misses %s.", mon_nam(mdef));
+#else
+		pline("%sへの攻撃ははずれた．", mon_nam(mdef));
+#endif
 	    else if (vis)
+#if 0 /*JP*/
 		pline("It misses.");
+#else
+		pline("それははずれた．");
+#endif
 	    return MM_MISS;
 	} else {
 	    if (flags.verbose && canseemon(mdef))
+#if 0 /*JP*/
 		pline("It hits %s%s", a_monnam(mdef), exclam(dam));
+#else
+		pline("%sに命中した%s", a_monnam(mdef), exclam(dam));
+#endif
 	    else if (vis)
+#if 0 /*JP*/
 		pline("It hits.");
+#else
+		pline("それは命中した．");
+#endif
 	    if (objects[otmp->otyp].oc_material == SILVER &&
 		    hates_silver(mdef->data) && canseemon(mdef)) {
 		if (vis)
+#if 0 /*JP*/
 		    pline_The("silver sears %s flesh!",
+#else
+		    pline_The("%sの体は銀で焼かれた！",
+#endif
 			    s_suffix(mon_nam(mdef)));
 		else
+#if 0 /*JP*/
 		    pline("%s flesh is seared!", s_suffix(Monnam(mdef)));
+#else
+		    pline("%sの体が焼けただれた！", s_suffix(Monnam(mdef)));
+#endif
 	    }
 	    mdef->mhp -= dam;
 	    if (mdef->mhp < 1) {
 		if (canseemon(mdef))
+#if 0 /*JP*/
 		    pline("%s is %s!", Monnam(mdef),
 			    (nonliving(mdef->data) || !canspotmon(mdef))
 			    ? "destroyed" : "killed");
+#else
+		    pline("%sは%s！", Monnam(mdef),
+			    (nonliving(mdef->data) || !canspotmon(mdef))
+			    ? "倒された" : "死んだ");
+#endif
 		mondied(mdef);
 		return MM_DEF_DIED | MM_HIT;
 	    }
@@ -699,7 +822,11 @@
 	if (multishot > 1) {
 	    /* "N arrows"; multishot > 1 implies otmp->quan > 1, so
 	       xname()'s result will already be pluralized */
+#if 0 /*JP*/
 	    Sprintf(onmbuf, "%d %s", multishot, xname(otmp));
+#else
+	    Sprintf(onmbuf, "%d本の%s", multishot, xname(otmp));
+#endif
 	    onm = onmbuf;
 	} else {
 	    /* "an arrow" */
@@ -707,6 +834,7 @@
 	    onm = obj_is_pname(otmp) ? the(onm) : an(onm);
 	}
 	m_shot.s = ammo_and_launcher(otmp,mwep) ? TRUE : FALSE;
+#if 0 /*JP*/
 	pline("%s %s %s!", Monnam(magr),
 #ifdef FIREARMS
 	      m_shot.s ? is_bullet(otmp) ? "fires" : "shoots" : "throws",
@@ -714,6 +842,10 @@
 #else
 	      m_shot.s ? "shoots" : "throws", onm);
 #endif
+#else /*JP*/
+	    pline("%sは%sを%s！", Monnam(magr), onm,
+		  m_shot.s ? "撃った" : "投げた");
+#endif /*JP*/
 	m_shot.o = otmp->otyp;
     } else {
 	m_shot.o = STRANGE_OBJECT;	/* don't give multishot feedback */
@@ -751,44 +883,84 @@
 		if(mdef->m_ap_type) seemimic(mdef);
 		if(magr->m_ap_type) seemimic(magr);
 		if((compat = could_seduce(magr,mdef,mattk)) && !magr->mcan) {
+#if 0 /*JP*/
 			Sprintf(buf, "%s %s", Monnam(magr),
 				mdef->mcansee ? "smiles at" : "talks to");
 			pline("%s %s %s.", buf, mon_nam(mdef),
 				compat == 2 ?
 					"engagingly" : "seductively");
+#else
+			Sprintf(buf, "%sは%%sに%%s%s．", Monnam(magr),
+				mdef->mcansee ? "微笑みかけた" : "話しかけた");
+			pline(buf, mon_nam(mdef),
+				compat == 2 ?
+					"魅力的に" : "誘惑的に");
+#endif
 		} else {
 		    char magr_name[BUFSZ];
 
 		    Strcpy(magr_name, Monnam(magr));
 		    switch (mattk->aatyp) {
 			case AT_BITE:
+#if 0 /*JP*/
 				Sprintf(buf,"%s bites", magr_name);
+#else
+				Sprintf(buf,"%sは%%sに噛みついた．", magr_name);
+#endif
 				break;
 			case AT_STNG:
+#if 0 /*JP*/
 				Sprintf(buf,"%s stings", magr_name);
+#else
+				Sprintf(buf,"%sは%%sを突きさした．", magr_name);
+#endif
 				break;
 			case AT_BUTT:
+#if 0 /*JP*/
 				Sprintf(buf,"%s butts", magr_name);
+#else
+				Sprintf(buf,"%sは%%sに頭突きをくらわした．", magr_name);
+#endif
 				break;
 			case AT_TUCH:
+#if 0 /*JP*/
 				Sprintf(buf,"%s touches", magr_name);
+#else
+				Sprintf(buf,"%sは%%sに触れた．", magr_name);
+#endif
 				break;
 			case AT_TENT:
+#if 0 /*JP*/
 				Sprintf(buf, "%s tentacles suck",
+#else
+				Sprintf(buf, "%sの触手が%%sの体液を吸いとった．",
+#endif
 					s_suffix(magr_name));
 				break;
 			case AT_HUGS:
 				if (magr != u.ustuck) {
+#if 0 /*JP*/
 				    Sprintf(buf,"%s squeezes", magr_name);
+#else
+				    Sprintf(buf,"%sは%%sを絞めた．", magr_name);
+#endif
 				    break;
 				}
 			case AT_MULTIPLY:
 				/* No message. */
 				break;
 			default:
+#if 0 /*JP*/
 				Sprintf(buf,"%s hits", magr_name);
+#else
+				Sprintf(buf,"%sの%%sへの攻撃は命中した．", magr_name);
+#endif
 		    }
+#if 0 /*JP*/
 		    pline("%s %s.", buf, mon_nam_too(mdef_name, mdef, magr));
+#else
+		    pline(buf, mon_nam_too(mdef_name, mdef, magr));
+#endif
 		}
 	} else  noises(magr, mattk);
 	return(mdamagem(magr, mdef, mattk));
@@ -803,37 +975,59 @@
 	char buf[BUFSZ];
 
 	if(vis) {
+#if 0 /*JP*/
 		Sprintf(buf,"%s gazes at", Monnam(magr));
 		pline("%s %s...", buf, mon_nam(mdef));
+#else
+		Sprintf(buf,"%sは%%sをにらみつけた．．．", Monnam(magr));
+		pline(buf, mon_nam(mdef));
+#endif
 	}
 
 	if (magr->mcan || !magr->mcansee ||
 	    (magr->minvis && !perceives(mdef->data)) ||
 	    !mdef->mcansee || mdef->msleeping) {
+/*JP
 	    if(vis) pline("but nothing happens.");
+*/
+	    if(vis) pline("しかし何もおこらなかった．");
 	    return(MM_MISS);
 	}
 	/* call mon_reflects 2x, first test, then, if visible, print message */
 	if (magr->data == &mons[PM_MEDUSA] && mon_reflects(mdef, (char *)0)) {
 	    if (canseemon(mdef))
 		(void) mon_reflects(mdef,
+/*JP
 				    "The gaze is reflected away by %s %s.");
+*/
+				    "睨みは%sの%sで反射した．");
 	    if (mdef->mcansee) {
 		if (mon_reflects(magr, (char *)0)) {
 		    if (canseemon(magr))
 			(void) mon_reflects(magr,
+/*JP
 					"The gaze is reflected away by %s %s.");
+*/
+					"睨みは%sの%sで反射した．");
 		    return (MM_MISS);
 		}
 		if (mdef->minvis && !perceives(magr->data)) {
 		    if (canseemon(magr)) {
+#if 0 /*JP*/
 			pline("%s doesn't seem to notice that %s gaze was reflected.",
 			      Monnam(magr), mhis(magr));
+#else
+			pline("睨みが反射していることに%sは気付いていないようだ．",
+			      Monnam(magr));
+#endif
 		    }
 		    return (MM_MISS);
 		}
 		if (canseemon(magr))
+/*JP
 		    pline("%s is turned to stone!", Monnam(magr));
+*/
+		    pline("%sは石になった！", Monnam(magr));
 		monstone(magr);
 		if (magr->mhp > 0) return (MM_MISS);
 		return (MM_AGR_DIED);
@@ -857,8 +1051,13 @@
 	if (mdef->data->msize >= MZ_HUGE) return MM_MISS;
 
 	if (vis) {
+#if 0 /*JP*/
 		Sprintf(buf,"%s swallows", Monnam(magr));
 		pline("%s %s.", buf, mon_nam(mdef));
+#else
+		Sprintf(buf,"%sは%%sをぐっと飲みこんだ．", Monnam(magr));
+		pline(buf, mon_nam(mdef));
+#endif
 	}
 	for (obj = mdef->minvent; obj; obj = obj->nobj)
 	    (void) snuff_lit(obj);
@@ -901,7 +1100,10 @@
 	}
 	else {					/* both alive, put them back */
 	    if (cansee(dx, dy))
+/*JP
 		pline("%s is regurgitated!", Monnam(mdef));
+*/
+		pline("%sは吐き戻された！", Monnam(mdef));
 
 	    place_monster(magr, ax, ay);
 	    place_monster(mdef, dx, dy);
@@ -923,7 +1125,10 @@
 	    return MM_MISS;
 
 	if(cansee(magr->mx, magr->my))
+/*JP
 		pline("%s explodes!", Monnam(magr));
+*/
+		pline("%sは爆発した！", Monnam(magr));
 	else	noises(magr, mattk);
 
 	remove_monster(magr->mx, magr->my);     /* MAR */
@@ -941,7 +1146,11 @@
 		setmangry(mdef);
 	/* give this one even if it was visible, except for spell creatures */
 	if (magr->mtame && !magr->isspell)
+#if 0 /*JP*/
 	    You(brief_feeling, "melancholy");
+#else
+	    You(brief_feeling, "もの悲しい");
+#endif
 
 	return result;
 }
@@ -975,11 +1184,17 @@
 		    mon_to_stone(magr);
 		    return MM_HIT; /* no damage during the polymorph */
 		}
+/*JP
 		if (vis) pline("%s turns to stone!", Monnam(magr));
+*/
+		if (vis) pline("%sは石になった！", Monnam(magr));
 		monstone(magr);
 		if (magr->mhp > 0) return 0;
 		else if (magr->mtame && !vis)
+/*JP
 		    You(brief_feeling, "peculiarly sad");
+*/
+		    You(brief_feeling, "とても悲しい");
 		return MM_AGR_DIED;
 	    }
 	}
@@ -1025,19 +1240,34 @@
 		/* eating a Rider or its corpse is fatal */
 		if (is_rider(mdef->data)) {
 		    if (vis)
+#if 0 /*JP*/
 			pline("%s %s!", Monnam(magr),
 			      mdef->data == &mons[PM_FAMINE] ?
 				"belches feebly, shrivels up and dies" :
 			      mdef->data == &mons[PM_PESTILENCE] ?
 				"coughs spasmodically and collapses" :
 				"vomits violently and drops dead");
+#else
+			pline("%s%s！", Monnam(magr),
+			      mdef->data == &mons[PM_FAMINE] ?
+				"弱々しく吐きもどしたかと思うと，体がしぼみ死んでしまった" :
+			      mdef->data == &mons[PM_PESTILENCE] ?
+				"痙攣したようにせきこみ倒れた" :
+				"激しく嘔吐し死んだ");
+#endif
 		    mondied(magr);
 		    if (magr->mhp > 0) return 0;	/* lifesaved */
 		    else if (magr->mtame && !vis)
+/*JP
 			You(brief_feeling, "queasy");
+*/
+			You(brief_feeling, "不安な");
 		    return MM_AGR_DIED;
 		}
+/*JP
 		if(flags.verbose && flags.soundok) verbalize("Burrrrp!");
+*/
+		if(flags.verbose && flags.soundok) verbalize("げっぷ！");
 		tmp = mdef->mhp;
 		/* Use up amulet of life saving */
 		if (!!(obj = mlifesaver(mdef))) m_useup(mdef, obj);
@@ -1070,8 +1300,12 @@
 	    case AD_STUN:
 		if (magr->mcan) break;
 		if (canseemon(mdef))
+#if 0 /*JP*/
 		    pline("%s %s for a moment.", Monnam(mdef),
 			  makeplural(stagger(mdef->data, "stagger")));
+#else
+		    pline("%sはすこしよろめいた．", Monnam(mdef));
+#endif
 		mdef->mstun = 1;
 		goto physical;
 	    case AD_LEGS:
@@ -1142,10 +1376,16 @@
 			    boolean water = (mdef->data ==
 					     &mons[PM_WATER_ELEMENTAL]);
 
+#if 0 /*JP*/
 			    pline("%s %s %s%s %s%s.", s, xname(otmp),
 				  (water ? "vaporize" : "burn"),
 				  (otmp->quan > 1L ? "" : "s"),
 				  (water ? "part of " : ""), mon_nam(mdef));
+#else
+			    pline("%s%sは%s%sを%s．", s, xname(otmp), mon_nam(mdef),
+				  (water ? "の一部" : ""),
+				  (water ? "蒸発させた" : "燃やした"));
+#endif
 			  }
 
 			  burn_faster(otmp, 1);
@@ -1167,7 +1407,11 @@
                         if(otmp && objects[otmp->otyp].oc_material == SILVER &&
                           (hates_silver(pd))) {
                                 tmp += 8;
+#if 0 /*JP*/
                                 if (vis) pline("The silver sears %s!", mon_nam(mdef));
+#else
+                                if (vis) pline("%sは銀で焼かれた！", mon_nam(mdef));
+#endif
                         }
                         /* Stakes do extra dmg agains vamps */
                         if (otmp && otmp->otyp == WOODEN_STAKE && is_vampire(pd)) {
@@ -1175,9 +1419,15 @@
                                         if (!rn2(10)) {
                                                 if (vis) {
                                                         Strcpy(buf, Monnam(magr));
+#if 0 /*JP*/
                                                         pline("%s plunges the stake into the heart of %s.",
                                                                 buf, mon_nam(mdef));
                                                         pline("%s's body vaporizes!", Monnam(mdef));
+#else
+                                                        pline("%sは%sの心臓を杭で突き刺した．",
+                                                                buf, mon_nam(mdef));
+                                                        pline("%sの身体は蒸発した！", Monnam(mdef));
+#endif
                                                 }
                                                 mondead(mdef); /* no corpse */
                                                 if (mdef->mhp < 0) return (MM_DEF_DIED |
@@ -1185,7 +1435,11 @@
                                         } else {
                                                 if (vis) {
                                                         Strcpy(buf, Monnam(magr));
+#if 0 /*JP*/
                                                         pline("%s drives the stake into %s.",
+#else
+                                                        pline("%Sは%sに杭を打ち込んだ．",
+#endif
                                                                 buf, mon_nam(mdef));
                                                 }
                                                 tmp += rnd(6) + 2;
@@ -1193,7 +1447,11 @@
                                 } else {
                                         if (vis) {
                                                 Strcpy(buf, Monnam(magr));
+#if 0 /*JP*/
                                                 pline("%s drives the stake into %s.",
+#else
+                                                pline("%sは%sに杭を打ち込んだ．",
+#endif
                                                         buf, mon_nam(mdef));
                                         }
                                         tmp += rnd(6);
@@ -1226,16 +1484,30 @@
 		    break;
 		}
 		if (vis)
+#if 0 /*JP*/
 		    pline("%s is %s!", Monnam(mdef),
 			  on_fire(mdef->data, mattk));
+#else
+		    pline("%sは%s！", Monnam(mdef),
+			  on_fire(mdef->data, mattk));
+#endif
 		if (pd == &mons[PM_STRAW_GOLEM] ||
 		    pd == &mons[PM_WAX_GOLEM] ||
 		    pd == &mons[PM_PAPER_GOLEM]) {
+#if 0 /*JP*/
 			if (vis) pline("%s burns completely!", Monnam(mdef));
+#else
+			if (vis) pline("%sは灰になった！", Monnam(mdef));
+#endif
 			mondied(mdef);
 			if (mdef->mhp > 0) return 0;
 			else if (mdef->mtame && !vis)
+#if 0 /*JP*/
 			    pline("May %s roast in peace.", mon_nam(mdef));
+#else
+			    /* Rest in peaceのもじり。どう訳そう？ */
+			    pline("%sは丸焼けになったに違いない．", mon_nam(mdef));
+#endif
 			return (MM_DEF_DIED | (grow_up(magr,mdef) ?
 							0 : MM_AGR_DIED));
 		}
@@ -1243,7 +1515,10 @@
 		tmp += destroy_mitem(mdef, SPBOOK_CLASS, AD_FIRE);
 		if (resists_fire(mdef)) {
 		    if (vis)
+/*JP
 			pline_The("fire doesn't seem to burn %s!",
+*/
+			pline("%sは炎で燃えないようだ！",
 								mon_nam(mdef));
 		    shieldeff(mdef->mx, mdef->my);
 		    golemeffects(mdef, AD_FIRE, tmp);
@@ -1259,10 +1534,16 @@
 		    tmp = 0;
 		    break;
 		}
+/*JP
 		if (vis) pline("%s is covered in frost!", Monnam(mdef));
+*/
+		if (vis) pline("%sは氷で覆われた！", Monnam(mdef));
 		if (resists_cold(mdef)) {
 		    if (vis)
+/*JP
 			pline_The("frost doesn't seem to chill %s!",
+*/
+			pline("氷は%sを凍らすことができないようだ！",
 								mon_nam(mdef));
 		    shieldeff(mdef->mx, mdef->my);
 		    golemeffects(mdef, AD_COLD, tmp);
@@ -1277,10 +1558,16 @@
 		    tmp = 0;
 		    break;
 		}
+/*JP
 		if (vis) pline("%s gets zapped!", Monnam(mdef));
+*/
+		if (vis) pline("%sは衝撃をくらった！", Monnam(mdef));
 		tmp += destroy_mitem(mdef, WAND_CLASS, AD_ELEC);
 		if (resists_elec(mdef)) {
+/*JP
 		    if (vis) pline_The("zap doesn't shock %s!", mon_nam(mdef));
+*/
+		    if (vis) pline("衝撃は%sに影響を与えない！", mon_nam(mdef));
 		    shieldeff(mdef->mx, mdef->my);
 		    golemeffects(mdef, AD_ELEC, tmp);
 		    tmp = 0;
@@ -1297,12 +1584,20 @@
 		}
 		if (resists_acid(mdef)) {
 		    if (vis)
+/*JP
 			pline("%s is covered in acid, but it seems harmless.",
+*/
+			pline("%sは酸につつまれた．しかしなんともないようだ．",
 			      Monnam(mdef));
 		    tmp = 0;
 		} else if (vis) {
+#if 0 /*JP*/
 		    pline("%s is covered in acid!", Monnam(mdef));
 		    pline("It burns %s!", mon_nam(mdef));
+#else
+		    pline("%sは酸につつまれた！", Monnam(mdef));
+		    pline("%sを燃やした！", mon_nam(mdef));
+#endif
 		}
 		if (!rn2(30)) erode_armor(mdef, TRUE);
 		if (!rn2(6)) erode_obj(MON_WEP(mdef), TRUE, TRUE);
@@ -1310,11 +1605,17 @@
 	    case AD_RUST:
 		if (magr->mcan) break;
 		if (pd == &mons[PM_IRON_GOLEM]) {
+/*JP
 			if (vis) pline("%s falls to pieces!", Monnam(mdef));
+*/
+			if (vis) pline("%sはバラバラになった！", Monnam(mdef));
 			mondied(mdef);
 			if (mdef->mhp > 0) return 0;
 			else if (mdef->mtame && !vis)
+/*JP
 			    pline("May %s rust in peace.", mon_nam(mdef));
+*/
+			    pline("%sはバラバラになって錆びた．", mon_nam(mdef));
 			return (MM_DEF_DIED | (grow_up(magr,mdef) ?
 							0 : MM_AGR_DIED));
 		}
@@ -1332,11 +1633,17 @@
 		if (magr->mcan) break;
 		if (pd == &mons[PM_WOOD_GOLEM] ||
 		    pd == &mons[PM_LEATHER_GOLEM]) {
+/*JP
 			if (vis) pline("%s falls to pieces!", Monnam(mdef));
+*/
+			if (vis) pline("%sはバラバラになった！", Monnam(mdef));
 			mondied(mdef);
 			if (mdef->mhp > 0) return 0;
 			else if (mdef->mtame && !vis)
+/*JP
 			    pline("May %s rot in peace.", mon_nam(mdef));
+*/
+			    pline("%sはバラバラになって腐った．", mon_nam(mdef));
 			return (MM_DEF_DIED | (grow_up(magr,mdef) ?
 							0 : MM_AGR_DIED));
 		}
@@ -1347,17 +1654,28 @@
 		if (magr->mcan) break;
 		if (mattk->aatyp == AT_GAZE && mon_reflects(mdef, (char *)0)) {
 		    tmp = 0;
+#if 0 /*JP*/
 		    (void) mon_reflects(mdef, "But it reflects from %s %s!");
+#else
+		    (void) mon_reflects(mdef, "しかしそれは%sの%sで反射した！");
+#endif
 		    if (poly_when_stoned(pa)) {
 			mon_to_stone(magr);
 			break;
 		    }
 		    if (!resists_ston(magr)) {
+#if 0 /*JP*/
 			if (vis) pline("%s turns to stone!", Monnam(magr));
+#else
+			if (vis) pline("%sは石になった！", Monnam(magr));
+#endif
 			monstone(magr);
 			if (magr->mhp > 0) return 0;
 			else if (magr->mtame && !vis)
+/*JP
 			    You(brief_feeling, "peculiarly sad");
+*/
+			    You(brief_feeling, "とても悲しい");
 			return MM_AGR_DIED;
 		    }
 		}
@@ -1370,11 +1688,17 @@
 			break;
 		}
 		if (!resists_ston(mdef)) {
+/*JP
 			if (vis) pline("%s turns to stone!", Monnam(mdef));
+*/
+			if (vis) pline("%sは石になった！", Monnam(mdef));
 			monstone(mdef);
  post_stone:		if (mdef->mhp > 0) return 0;
 			else if (mdef->mtame && !vis)
+/*JP
 			    You(brief_feeling, "peculiarly sad");
+*/
+			    You(brief_feeling, "とても悲しい");
 			return (MM_DEF_DIED | (grow_up(magr,mdef) ?
 							0 : MM_AGR_DIED));
 		}
@@ -1393,7 +1717,10 @@
 		    	&& mdef != u.usteed
 #endif
 		    	)
+/*JP
 			pline("%s suddenly disappears!", mdef_Monnam);
+*/
+			pline("%sは突然消えた！", Monnam(mdef));
 		}
 		break;
 	    case AD_SLEE:
@@ -1402,9 +1729,17 @@
 		if (cancelled) break;
 		if (mattk->aatyp == AT_GAZE && mon_reflects(mdef, (char *)0)) {
 		    tmp = 0;
+#if 0 /*JP*/
 		    (void) mon_reflects(mdef, "But it reflects from %s %s!");
+#else
+		    (void) mon_reflects(mdef, "しかしそれは%sの%sで反射した！");
+#endif
 		    if (sleep_monst(magr, rnd(10), -1))
+#if 0 /*JP*/
 			if (vis) pline("%s is put to sleep!", Monnam(magr));
+#else
+			if (vis) pline("%sは眠り込んだ．", Monnam(magr));
+#endif
 		    break;
 		}
 
@@ -1412,7 +1747,10 @@
 			sleep_monst(mdef, rnd(10), -1)) {
 		    if (vis) {
 			Strcpy(buf, Monnam(mdef));
+/*JP
 			pline("%s is put to sleep by %s.", buf, mon_nam(magr));
+*/
+			pline("%sは%sによって眠りにおちた．", buf, mon_nam(magr));
 		    }
 		    mdef->mstrategy &= ~STRAT_WAITFORU;
 		    slept_monst(mdef);
@@ -1425,7 +1763,11 @@
 		    break;
 		} 
 		if (vis && mattk->aatyp == AT_GAZE) 
+#if 0 /*JP*/
 		    pline("%s gazes intently!", Monnam(magr));
+#else
+		    pline("%sは集中して睨みつけた！", Monnam(magr));
+#endif
 		if (mattk->aatyp == AT_GAZE && mon_reflects(mdef, (char *)0)) {
 		    /* WAC reflected gaze 
 		     * Oooh boy...that was a bad move :B 
@@ -1433,24 +1775,48 @@
 		    tmp = 0;
 		    if (vis) {
 			shieldeff(mdef->mx, mdef->my);
+#if 0 /*JP*/
 			(void) mon_reflects(mdef, "But it reflects from %s %s!");
+#else
+			(void) mon_reflects(mdef, "しかしそれは%sの%sで反射した！");
+#endif
 		    }
 		    if (resists_magm(magr)) {
+#if 0 /*JP*/
 			if (vis) pline("%s shudders momentarily...", Monnam(magr));
+#else
+			if (vis) pline("%sは一瞬震えた．．．", Monnam(magr));
+#endif
 			break;
 		    }
+#if 0 /*JP*/
 		    if (vis) pline("%s dies!", Monnam(magr));
+#else
+		    if (vis) pline("%sは死んだ！", Monnam(magr));
+#endif
 		    mondied(magr);
 		    if (magr->mhp > 0) return 0;  /* lifesaved */
 		    else if (magr->mtame && !vis)
+#if 0 /*JP*/
 			You(brief_feeling, "peculiarly sad");
+#else
+			You(brief_feeling, "とても悲しい");
+#endif
 		    return MM_AGR_DIED;
 		} else if (is_undead(mdef->data)) {
 		    /* Still does normal damage */
+#if 0 /*JP*/
 		    if (vis) pline("Something didn't work...");
+#else
+		    if (vis) pline("何かが動かなかった．．．");
+#endif
 		    break;
 		} else if (resists_magm(mdef)) {
+#if 0 /*JP*/
 		    if (vis) pline("%s shudders momentarily...", Monnam(mdef));
+#else
+		    if (vis) pline("%sは一瞬震えた．．．", Monnam(mdef));
+#endif
 		} else {
 		    tmp = mdef->mhp;
 		}
@@ -1460,7 +1826,10 @@
 		if(!cancelled && mdef->mcanmove) {
 		    if (vis) {
 			Strcpy(buf, Monnam(mdef));
+/*JP
 			pline("%s is frozen by %s.", buf, mon_nam(magr));
+*/
+			pline("%sは%sによって動けなくなった．", buf, mon_nam(magr));
 		    }
 		    mdef->mcanmove = 0;
 		    mdef->mfrozen = rnd(10);
@@ -1471,7 +1840,11 @@
 		if(!cancelled && mdef->mcanmove) {
 		    if (vis) {
 			Strcpy(buf, Monnam(magr));
+#if 0 /*JP*/
 			pline("%s mercilessly tickles %s.", buf, mon_nam(mdef));
+#else
+			pline("%sは容赦なく%sをくすぐった．", buf, mon_nam(mdef));
+#endif
 		    }
 		    mdef->mcanmove = 0;
 		    mdef->mfrozen = rnd(10);
@@ -1486,7 +1859,10 @@
 		    mon_adjust_speed(mdef, -1, (struct obj *)0);
 		    mdef->mstrategy &= ~STRAT_WAITFORU;
 		    if (mdef->mspeed != oldspeed && vis)
+/*JP
 			pline("%s slows down.", Monnam(mdef));
+*/
+			pline("%sは動作がのろくなった．", Monnam(mdef));
 		}
 		break;
 	    case AD_CONF:
@@ -1496,7 +1872,10 @@
 		 * we still should check for it).
 		 */
 		if (!magr->mcan && !mdef->mconf && !magr->mspec_used) {
+/*JP
 		    if (vis) pline("%s looks confused.", Monnam(mdef));
+*/
+		    if (vis) pline("%sは混乱しているように見える．", Monnam(mdef));
 		    mdef->mconf = 1;
 		    mdef->mstrategy &= ~STRAT_WAITFORU;
 		}
@@ -1506,7 +1885,11 @@
 	    	if (resists_magm(mdef)) {
 		    if (vis) {
 			shieldeff(mdef->mx,mdef->my);
+#if 0 /*JP*/
 			pline("%s is unaffected.", Monnam(mdef));
+#else
+			pline("%sは影響を受けない．", Monnam(mdef));
+#endif
 		    }
 	    	} else {
 	    	    mon_drain_en(mdef, 
@@ -1519,7 +1902,10 @@
 		    register unsigned rnd_tmp;
 
 		    if (vis && mdef->mcansee)
+/*JP
 			pline("%s is blinded.", Monnam(mdef));
+*/
+			pline("%sは目が見えなくなった．", Monnam(mdef));
 		    rnd_tmp = d((int)mattk->damn, (int)mattk->damd);
 		    if ((rnd_tmp += mdef->mblinded) > 127) rnd_tmp = 127;
 		    mdef->mblinded = rnd_tmp;
@@ -1530,8 +1916,13 @@
 		break;
 	    case AD_HALU:
 		if (!magr->mcan && haseyes(pd) && mdef->mcansee) {
+#if 0 /*JP*/
 		    if (vis) pline("%s looks %sconfused.",
 				    Monnam(mdef), mdef->mconf ? "more " : "");
+#else
+		    if (vis) pline("%sは%s混乱しているように見える．",
+				    Monnam(mdef), mdef->mconf ? "ますます" : "");
+#endif
 		    mdef->mconf = 1;
 		    mdef->mstrategy &= ~STRAT_WAITFORU;
 		}
@@ -1548,20 +1939,35 @@
 			were_change(mdef);
 		    if (pd == &mons[PM_CLAY_GOLEM]) {
 			    if (vis) {
+/*JP
 				pline("Some writing vanishes from %s head!",
+*/
+				pline("何かの文字が%sの頭から消えた！",
 				    s_suffix(mon_nam(mdef)));
+/*JP
 				pline("%s is destroyed!", Monnam(mdef));
+*/
+				pline("%sは破壊された！", Monnam(mdef));
 			    }
 			    mondied(mdef);
 			    if (mdef->mhp > 0) return 0;
 			    else if (mdef->mtame && !vis)
+/*JP
 				You(brief_feeling, "strangely sad");
+*/
+				You(brief_feeling, "妙に悲しい");
 			    return (MM_DEF_DIED | (grow_up(magr,mdef) ?
 							0 : MM_AGR_DIED));
 		    }
 		    if (flags.soundok) {
+/*JP
 			    if (!vis) You_hear("laughter.");
+*/
+			    if (!vis) You_hear("笑い声を聞いた．");
+/*JP
 			    else pline("%s chuckles.", Monnam(magr));
+*/
+			    else pline("%sはくすくす笑った．", Monnam(magr));
 		    }
 		}
 		break;
@@ -1589,12 +1995,18 @@
 		mdef->mstrategy &= ~STRAT_WAITFORU;
 		if (vis) {
 		    Strcpy(buf, Monnam(magr));
+/*JP
 		    pline("%s steals some gold from %s.", buf, mon_nam(mdef));
+*/
+		    pline("%sは%sから金を盗んだ．", buf, mon_nam(mdef));
 		}
 		if (!tele_restrict(magr)) {
 		    (void) rloc(magr, FALSE);
 		    if (vis && !canspotmon(magr))
+/*JP
 			pline("%s suddenly disappears!", buf);
+*/
+			pline("%sは突然消えた！", buf);
 		}
 		break;
 	    case AD_DRLI:
@@ -1608,7 +2020,10 @@
 		if (!cancelled && rn2(2) && !resists_drli(mdef)) {
 			tmp = d(2,6);
 			if (vis)
+/*JP
 			    pline("%s suddenly seems weaker!", Monnam(mdef));
+*/
+			    pline("%sは突然弱くなったように見えた！", Monnam(mdef));
 			mdef->mhpmax -= tmp;
 			if (mdef->m_lev == 0)
 				tmp = mdef->mhp;
@@ -1655,8 +2070,13 @@
 			(void) add_to_minv(magr, otmp);
 			if (vis) {
 				Strcpy(buf, Monnam(magr));
+#if 0 /*JP*/
 				pline("%s steals %s from %s!", buf,
 				    onambuf, mdefnambuf);
+#else
+				pline("%sは%sから%sを盗んだ！", buf,
+				    mdefnambuf, onambuf);
+#endif
 			}
 			possibly_unwield(mdef, FALSE);
 			mdef->mstrategy &= ~STRAT_WAITFORU;
@@ -1668,7 +2088,10 @@
 			    !tele_restrict(magr)) {
 			    (void) rloc(magr, FALSE);
 			    if (vis && !canspotmon(magr))
+/*JP
 				pline("%s suddenly disappears!", buf);
+*/
+				pline("%sは突然消えた！", buf);
 			}
 		}
 		tmp = 0;
@@ -1680,16 +2103,25 @@
 		
 		if (!cancelled && !rn2(8)) {
 		    if (vis)
+/*JP
 			pline("%s %s was poisoned!", s_suffix(Monnam(magr)),
+*/
+			pline("%sの%sは毒されている！", Monnam(magr),
 			      mpoisons_subj(magr, mattk));
 		    if (resists_poison(mdef)) {
 			if (vis)
+/*JP
 			    pline_The("poison doesn't seem to affect %s.",
+*/
+ 			    pline("%sは毒の影響を与えない．",
 				mon_nam(mdef));
 		    } else {
 			if (rn2(10)) tmp += rn1(10,6);
 			else {
+/*JP
 			    if (vis) pline_The("poison was deadly...");
+*/
+			    if (vis) pline("毒で死にかけている．．．");
 			    tmp = mdef->mhp;
 			}
 		    }
@@ -1697,7 +2129,10 @@
 		break;
 	    case AD_DRIN:
 		if (notonhead || !has_head(pd)) {
+/*JP
 		    if (vis) pline("%s doesn't seem harmed.", Monnam(mdef));
+*/
+		    if (vis) pline("%sは傷ついたようには見えない．", Monnam(mdef));
 		    /* Not clear what to do for green slimes */
 		    tmp = 0;
 		    break;
@@ -1705,15 +2140,26 @@
 		if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
 		    if (vis) {
 			Strcpy(buf, s_suffix(Monnam(mdef)));
+#if 0 /*JP*/
 			pline("%s helmet blocks %s attack to %s head.",
 				buf, s_suffix(mon_nam(magr)),
 				mhis(mdef));
+#else
+			pline("%sの兜は%sの頭への攻撃を防いだ．",
+				buf, mon_nam(magr));
+#endif
 		    }
 		    break;
 		}
+/*JP
 		if (vis) pline("%s brain is eaten!", s_suffix(Monnam(mdef)));
+*/
+		if (vis) pline("%sの脳は食べられた！", Monnam(mdef));
 		if (mindless(pd)) {
+/*JP
 		    if (vis) pline("%s doesn't notice.", Monnam(mdef));
+*/
+		    if (vis) pline("%sは気づいていない．", Monnam(mdef));
 		    break;
 		}
 		tmp += rnd(10); /* fakery, since monsters lack INT scores */
@@ -1722,7 +2168,10 @@
 		    magr->mconf = 0;
 		}
 		if (tmp >= mdef->mhp && vis)
+/*JP
 		    pline("%s last thought fades away...",
+*/
+		    pline("%sの最後の思いがよぎる．．．",
 			          s_suffix(Monnam(mdef)));
 		break;
 	    case AD_SLIM:
@@ -1764,8 +2213,13 @@
 			tmp = rnd(30);
 		    } else 
 #endif
+#if 0 /*JP*/
 		    (void) mon_poly(mdef, FALSE,
 			    "%s undergoes a freakish metamorphosis!");
+#else
+		    (void) mon_poly(mdef, FALSE,
+			    "%sは奇形な変化をしはじめた！");
+#endif
 		}
 		break;
 	    case AD_CALM:	/* KMH -- koala attack */
@@ -1788,7 +2242,11 @@
 	/* STEPHEN WHITE'S NEW CODE */
 	if (objenchant < canhitmon && vis) {
 			Strcpy(buf, Monnam(magr));
+#if 0 /*JP*/
 			pline("%s doesn't seem to harm %s.", buf,
+#else
+			pline("%sは%sにダメージを与えられなかったようだ．", buf,
+#endif
 								mon_nam(mdef));
 		return(MM_HIT);
 	}
@@ -1877,7 +2335,10 @@
 {
 	if ((mon->msleeping || !mon->mcanmove) && mon == u.ustuck &&
 		!sticks(youmonst.data) && !u.uswallow) {
+/*JP
 	    pline("%s grip relaxes.", s_suffix(Monnam(mon)));
+*/
+	    pline("%sの握る力が弱くなった．", Monnam(mon));
 	    unstuck(mon);
 	}
 }
@@ -1906,15 +2367,26 @@
 	    (is_acid ? obj->oeroded2 : obj->oeroded) < MAX_ERODE) {
 		if (obj->greased || obj->oerodeproof || (obj->blessed && rn2(3))) {
 		    if (cansee(mdef->mx, mdef->my) && flags.verbose)
+/*JP
 			pline("%s weapon is not affected.",
+*/
+			pline("%sの武器は影響を受けない．", 
 			                 s_suffix(Monnam(magr)));
 		    if (obj->greased && !rn2(2)) obj->greased = 0;
 		} else {
 		    if (cansee(mdef->mx, mdef->my)) {
+#if 0 /*JP*/
 			pline("%s %s%s!", s_suffix(Monnam(magr)),
 			    aobjnam(obj, (is_acid ? "corrode" : "rust")),
 			    (is_acid ? obj->oeroded2 : obj->oeroded)
 				? " further" : "");
+#else
+			pline("%sの%sは%s%s！", Monnam(magr),
+			      xname(obj),
+			      (is_acid ? obj->oeroded2 : obj->oeroded)
+			      ? "さらに" : "",
+			      is_acid ? "腐食した" : "錆びた");
+#endif
 		    }
 		    if (is_acid) obj->oeroded2++;
 		    else obj->oeroded++;
@@ -1930,9 +2402,16 @@
 	char buf[BUFSZ];
 	if (!flags.verbose || Blind || !mon_visible(magr)) return;
 	Strcpy(buf, mon_nam(mdef));
+#if 0 /*JP*/
 	pline("%s %s %s %s at %s.", Monnam(magr),
 	      (objects[otemp->otyp].oc_dir & PIERCE) ? "thrusts" : "swings",
 	      mhis(magr), singular(otemp, xname), buf);
+#else
+	pline((objects[otemp->otyp].oc_dir & PIERCE) ?
+	      "%sは%sで%sを突いた．" :
+	      "%sは%sを振りまわし%sを攻撃した．", Monnam(magr),
+	      xname(otemp), buf);
+#endif
 }
 
 /*
@@ -1969,11 +2448,17 @@
 		if (mhit && !rn2(2)) {
 		    Strcpy(buf, Monnam(magr));
 		    if(canseemon(magr))
+/*JP
 			pline("%s is splashed by %s acid!",
+*/
+			pline("%sは%sの酸を浴びた！",
 			      buf, s_suffix(mon_nam(mdef)));
 		    if (resists_acid(magr)) {
 			if(canseemon(magr))
+/*JP
 			    pline("%s is not affected.", Monnam(magr));
+*/
+			    pline("%sは影響をうけない．", Monnam(magr));
 			tmp = 0;
 		    }
 		} else tmp = 0;
@@ -1983,12 +2468,21 @@
 	    if(resists_magm(magr)) {
 		if(canseemon(magr)) {
 		shieldeff(magr->mx, magr->my);
+#if 0 /*JP*/
 		pline("A hail of magic missiles narrowly misses %s!",mon_nam(magr));
+#else
+		pline("魔法の矢の雨はことごとく%sを外した！",mon_nam(magr));
+#endif
 		}
 	    } else {
 		if(canseemon(magr))
+#if 0 /*JP*/
 			pline(magr->data == &mons[PM_WOODCHUCK] ? "ZOT!" : 
 			"%s is hit by magic missiles appearing from thin air!",Monnam(magr));
+#else
+			pline(magr->data == &mons[PM_WOODCHUCK] ? "ＺＯＴ！" : 
+			"%sは突然現れた魔法の矢に撃たれた！",Monnam(magr));
+#endif
 		goto assess_dmg;
 	    }
 	    break;
@@ -2011,14 +2505,20 @@
 		    if (!rn2(4)) tmp = 127;
 		    if (magr->mcansee && haseyes(madat) && mdef->mcansee &&
 			(perceives(madat) || !mdef->minvis)) {
+/*JP
 			Sprintf(buf, "%s gaze is reflected by %%s %%s.",
+*/
+			Sprintf(buf, "%sのにらみは%%sによって%%s．",
 				s_suffix(mon_nam(mdef)));
 			if (mon_reflects(magr,
 					 canseemon(magr) ? buf : (char *)0))
 				return(mdead|mhit);
 			Strcpy(buf, Monnam(magr));
 			if(canseemon(magr))
+/*JP
 			    pline("%s is frozen by %s gaze!",
+*/
+			    pline("%sは%sのにらみで動けなくなった！",
 				  buf, s_suffix(mon_nam(mdef)));
 			magr->mcanmove = 0;
 			magr->mfrozen = tmp;
@@ -2027,7 +2527,10 @@
 		} else { /* gelatinous cube */
 		    Strcpy(buf, Monnam(magr));
 		    if(canseemon(magr))
+/*JP
 			pline("%s is frozen by %s.", buf, mon_nam(mdef));
+*/
+			pline("%sは%sによって動けなくなった．", buf, mon_nam(mdef));
 		    magr->mcanmove = 0;
 		    magr->mfrozen = tmp;
 		    return (mdead|mhit);
@@ -2036,14 +2539,20 @@
 	    case AD_COLD:
 		if (resists_cold(magr)) {
 		    if (canseemon(magr)) {
+/*JP
 			pline("%s is mildly chilly.", Monnam(magr));
+*/
+			pline("%sは冷えた．", Monnam(magr));
 			golemeffects(magr, AD_COLD, tmp);
 		    }
 		    tmp = 0;
 		    break;
 		}
 		if(canseemon(magr))
+/*JP
 		    pline("%s is suddenly very cold!", Monnam(magr));
+*/
+		    pline("%sは突然凍りづけになった！", Monnam(magr));
 		mdef->mhp += tmp / 2;
 		if (mdef->mhpmax < mdef->mhp) mdef->mhpmax = mdef->mhp;
 		if (mdef->mhpmax > ((int) (mdef->m_lev+1) * 8))
@@ -2053,34 +2562,50 @@
 		if (!magr->mstun) {
 		    magr->mstun = 1;
 		    if (canseemon(magr))
+#if 0 /*JP*/
 			pline("%s %s...", Monnam(magr),
 			      makeplural(stagger(magr->data, "stagger")));
+#else
+			pline("%sはくらくらした．．．", Monnam(magr));
+#endif
 		}
 		tmp = 0;
 		break;
 	    case AD_FIRE:
 		if (resists_fire(magr)) {
 		    if (canseemon(magr)) {
+/*JP
 			pline("%s is mildly warmed.", Monnam(magr));
+*/
+			pline("%sは暖かくなった．", Monnam(magr));
 			golemeffects(magr, AD_FIRE, tmp);
 		    }
 		    tmp = 0;
 		    break;
 		}
 		if(canseemon(magr))
+/*JP
 		    pline("%s is suddenly very hot!", Monnam(magr));
+*/
+		    pline("%sは突然とても熱くなった！", Monnam(magr));
 		break;
 	    case AD_ELEC:
 		if (resists_elec(magr)) {
 		    if (canseemon(magr)) {
+/*JP
 			pline("%s is mildly tingled.", Monnam(magr));
+*/
+		        pline("%sはピリピリしている．", Monnam(magr));
 			golemeffects(magr, AD_ELEC, tmp);
 		    }
 		    tmp = 0;
 		    break;
 		}
 		if(canseemon(magr))
+/*JP
 		    pline("%s is jolted with electricity!", Monnam(magr));
+*/
+		    pline("%sは電気ショックをうけた！", Monnam(magr));
 		break;
 	    default: tmp = 0;
 		break;
diff -aurN slashem-0.0.7E6F2/src/mhitu.c jslashem-0.0.7E6F2-J0.0.8/src/mhitu.c
--- slashem-0.0.7E6F2/src/mhitu.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mhitu.c	2004-08-05 10:01:12.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "artifact.h"
 #include "edog.h"
@@ -48,42 +56,86 @@
 	/* If same gender, "engagingly" for nymph, normal msg for others */
 	if((compat = could_seduce(mtmp, &youmonst, mattk)) && !mtmp->mcan &&
 	    !mtmp->mspec_used) {
+#if 0 /*JP*/
 	        pline("%s %s you %s.", Monnam(mtmp), Blind ? "talks to" :
 	              "smiles at", compat == 2 ? "engagingly" :
 	              "seductively");
+#else
+		pline("%sはあなた%s%s．", Monnam(mtmp),
+			compat == 2 ? "を引きつけるように" : "に好意をよせるように",
+			Blind ? "話しかけた" : "微笑んだ");
+#endif
 	} else switch (mattk->aatyp) {
 		case AT_CLAW:
+#if 0 /*JP*/
 			pline("%s claws you!", Monnam(mtmp));
+#else
+			pline("%sは引っかいた！", Monnam(mtmp));
+#endif
 			break;
 		case AT_BITE:
+#if 0 /*JP*/
 			pline("%s bites!", Monnam(mtmp));
+#else
+			pline("%sは噛みついた！", Monnam(mtmp));
+#endif
 			break;
 		case AT_KICK:
+#if 0 /*JP*/
 			pline("%s kicks%c", Monnam(mtmp),
 				    thick_skinned(youmonst.data) ? '.' : '!');
+#else
+			pline("%sは蹴とばした%s",Monnam(mtmp), 
+					thick_skinned(youmonst.data) ? "．" : "！");
+#endif
 			break;
 		case AT_STNG:
+#if 0 /*JP*/
 			pline("%s stings!", Monnam(mtmp));
+#else
+			pline("%sは突きさした！", Monnam(mtmp));
+#endif
 			break;
 		case AT_BUTT:
+#if 0 /*JP*/
 			pline("%s butts!", Monnam(mtmp));
+#else
+			pline("%sは頭突きをくらわした！", Monnam(mtmp));
+#endif
 			break;
 		case AT_TUCH:
+#if 0 /*JP*/
 			pline("%s touches you!", Monnam(mtmp));
+#else
+			pline("%sはあなたに触れた！", Monnam(mtmp));
+#endif
 			break;
 		case AT_TENT:
+#if 0 /*JP*/
 			pline("%s tentacles suck you!",
 				        s_suffix(Monnam(mtmp)));
+#else
+			pline("%sの触手があなたの体液を吸いとった！", 
+					Monnam(mtmp));
+#endif
 			break;
 		case AT_EXPL:
 		case AT_BOOM:
+#if 0 /*JP*/
 			pline("%s explodes!", Monnam(mtmp));
+#else
+			pline("%sは爆発した！", Monnam(mtmp));
+#endif
 			break;
 		case AT_MULTIPLY:
 			/* No message. */
 		break;
 		default:
+#if 0 /*JP*/
 			pline("%s hits!", Monnam(mtmp));
+#else
+			pline("%sの攻撃は命中した！", Monnam(mtmp));
+#endif
 	    }
 }
 
@@ -156,20 +208,43 @@
 	    map_invisible(mtmp->mx, mtmp->my);
 
 	if(could_seduce(mtmp, &youmonst, mattk) && !mtmp->mcan)
+#if 0 /*JP*/
 	    pline("%s pretends to be friendly.", Monnam(mtmp));
+#else
+	    pline("%sは友好的なふりをしている．",Monnam(mtmp));
+#endif
 	else {
 	    if (!flags.verbose || !nearmiss && !blocker)
+#if 0 /*JP*/
 		pline("%s misses.", Monnam(mtmp));
+#else
+		pline("%sの攻撃ははずれた．", Monnam(mtmp));
+#endif
 	    else if (!blocker)
+#if 0 /*JP*/
 		pline("%s just misses!", Monnam(mtmp));
+#else
+		pline("%sの攻撃は空を切った．", Monnam(mtmp));
+#endif
 	    else if (blocker == &zeroobj)
+#if 0 /*JP*/
 		pline("%s is stopped by the golden haze.", Monnam(mtmp));
+#else
+		pline("%sの攻撃は黄金色のかすみによってさえぎられた．", Monnam(mtmp));
+#endif
 	    else
+#if 0 /*JP*/
 		Your("%s %s%s %s attack.", 
 			simple_typename(blocker->otyp),
 			rn2(2) ? "block" : "deflect",
 			(blocker == uarmg || blocker == uarmf) ? "" : "s",
 			s_suffix(mon_nam(mtmp)));
+#else
+		Your("%sが%sの攻撃を%s．", 
+			simple_typename(blocker->otyp),
+			Monnam(mtmp),
+			rn2(2) ? "防いだ" : "はじいた");
+#endif
 
 	    if (MON_WEP(mtmp)) {
 		struct obj *obj = MON_WEP(mtmp);
@@ -177,11 +252,21 @@
 		if (rnd(100) < (obj->oeroded * 5 / 2)) {
 		    if (obj->spe > -5) {    
 			obj->spe--;
+#if 0 /*JP*/
 			pline("%s %s is damaged further!",
 				s_suffix(Monnam(mtmp)), xname(obj));
+#else
+			pline("%sの%sはさらに傷んだ！",
+				Monnam(mtmp), xname(obj));
+#endif
 		    } else
+#if 0 /*JP*/
 			pline("%s %s is badly battered!", 
 				s_suffix(Monnam(mtmp)), xname(obj));
+#else
+			pline("%sの%sはひどく傷ついている！", 
+				Monnam(mtmp), xname(obj));
+#endif
 		}
 	    }
 	}
@@ -193,9 +278,15 @@
 register struct obj *otemp;
 {
         if (!flags.verbose || Blind || !mon_visible(mtmp)) return;
+#if 0 /*JP*/
 	pline("%s %s %s %s.", Monnam(mtmp),
 	      (objects[otemp->otyp].oc_dir & PIERCE) ? "thrusts" : "swings",
 	      mhis(mtmp), singular(otemp, xname));
+#else
+	pline("%sは%s%s．", Monnam(mtmp),
+	      xname(otemp),
+	      (objects[otemp->otyp].oc_dir & PIERCE) ? "を突いた" : "を振りまわした");
+#endif
 }
 
 /* return how a poison attack was delivered */
@@ -208,11 +299,20 @@
 	    struct obj *mwep = (mtmp == &youmonst) ? uwep : MON_WEP(mtmp);
 	    /* "Foo's attack was poisoned." is pretty lame, but at least
 	       it's better than "sting" when not a stinging attack... */
+/*JP
 	    return (!mwep || !mwep->opoisoned) ? "attack" : "weapon";
+*/
+	    return (!mwep || !mwep->opoisoned) ? "攻撃" : "武器";
 	} else {
+#if 0 /*JP*/
 	    return (mattk->aatyp == AT_TUCH) ? "contact" :
 		   (mattk->aatyp == AT_GAZE) ? "gaze" :
 		   (mattk->aatyp == AT_BITE) ? "bite" : "sting";
+#else
+	    return (mattk->aatyp == AT_TUCH) ? "接触" :
+		   (mattk->aatyp == AT_GAZE) ? "にらみ" :
+		   (mattk->aatyp == AT_BITE) ? "噛みつき" : "突きさし";
+#endif
 	}
 	stop_occupation();
 }
@@ -222,9 +322,15 @@
 u_slow_down()
 {
 	HFast = 0L;
+#if 0 /*JP*/
 	if (!Fast) You("slow down.");
 	   /* speed boots */
 	else Your("quickness feels less natural.");
+#else
+	if (!Fast) You("動きが遅くなった．");
+	   /* speed boots */
+	else You("速さについていけなくなった．");
+#endif
 	exercise(A_DEX, FALSE);
 }
 
@@ -249,16 +355,28 @@
 
 	if (!mtmp->mcansee || (Invis && !perceives(mtmp->data))) {
 	    const char *swings =
+#if 0 /*JP*/
 		mattk->aatyp == AT_BITE ? "snaps" :
 		mattk->aatyp == AT_KICK ? "kicks" :
 		(mattk->aatyp == AT_STNG ||
 		 mattk->aatyp == AT_BUTT ||
 		 nolimbs(mtmp->data)) ? "lunges" : "swings";
+#else
+		mattk->aatyp == AT_BITE ? "噛みつく" :
+		mattk->aatyp == AT_KICK ? "蹴とばす" :
+		(mattk->aatyp == AT_STNG ||
+		 mattk->aatyp == AT_BUTT ||
+		 nolimbs(mtmp->data)) ? "突進する" : "振り回す";
+#endif
 
 	    if (compat)
+/*JP
 		pline("%s tries to touch you and misses!", Monnam(mtmp));
+*/
+		pline("%sはあなたに触ろうとしたが失敗した！", Monnam(mtmp));
 	    else
 		switch(rn2(3)) {
+#if 0 /*JP*/
 		case 0: pline("%s %s wildly and misses!", Monnam(mtmp),
 			      swings);
 		    break;
@@ -270,14 +388,35 @@
 		    break;
 		default:pline("%s %s wildly!", Monnam(mtmp), swings);
 		    break;
+#else /*JP*/
+		case 0: pline("%sは激しく%sが，はずした．", Monnam(mtmp),
+			      jconj(swings, "た"));
+		    break;
+		case 1: pline("%sの攻撃はあなたの脇腹をかすめた．", Monnam(mtmp));
+		    break;
+		case 2: pline("%sは%sを打ちつけた！", Monnam(mtmp),
+				Underwater ? "水" : "何もないところ");
+		    break;
+		default:pline("%sは激しく%s！", Monnam(mtmp),
+			      jconj(swings, "た"));
+		    break;
+#endif /*JP*/
 		}
 	} else if (Displaced) {
 	    if (compat)
+#if 0 /*JP*/
 		pline("%s smiles %s at your %sdisplaced image...",
 			Monnam(mtmp),
 			compat == 2 ? "engagingly" : "seductively",
 			Invis ? "invisible " : "");
+#else
+		pline("%sは%sあなたの幻影に対して%s微笑んだ．．．",
+			Monnam(mtmp),
+			Invis ? "透明な" : "",
+			compat == 2 ? "魅力的に" : "誘惑的に");
+#endif
 	    else
+#if 0 /*JP*/
 		pline("%s strikes at your %sdisplaced image and misses you!",
 			/* Note: if you're both invisible and displaced,
 			 * only monsters which see invisible will attack your
@@ -285,14 +424,26 @@
 			 * invisible.
 			 */
                         Monnam(mtmp),Invis ? "invisible " : "");
+#else
+		pline("%sはあなたの%s幻影を攻撃し，はずした！",
+			Monnam(mtmp),Invis ? "透明な" : "");
+#endif
 
 	} else if (Underwater) {
 	    /* monsters may miss especially on water level where
 	       bubbles shake the player here and there */
 	    if (compat)
+#if 0 /*JP*/
 		pline("%s reaches towards your distorted image.",Monnam(mtmp));
+#else
+		pline("%sはあなたの歪んだ幻影の方へ向かった．",Monnam(mtmp));
+#endif
 	    else
+#if 0 /*JP*/
 		pline("%s is fooled by water reflections and misses!",Monnam(mtmp));
+#else
+		pline("%sは水の反射にだまされ，はずした！",Monnam(mtmp));
+#endif
 
 	} else impossible("%s attacks you without knowing your location?",
 		Monnam(mtmp));
@@ -306,7 +457,10 @@
 {
 	if (message) {
 		if (is_animal(mdat))
+/*JP
 			You("get regurgitated!");
+*/
+			You("吐きだされた！");
 		else {
 			char blast[40];
 			register int i;
@@ -322,16 +476,34 @@
 					switch (mdat->mattk[i].adtyp) {
 						case AD_ELEC:
 							Strcpy(blast,
+#if 0 /*JP*/
 						      " in a shower of sparks");
+#else
+							"の火花の雨の中から");
+#endif
 							break;
 						case AD_COLD:
 							Strcpy(blast,
+#if 0 /*JP*/
 							" in a blast of frost");
+#else
+							"の冷気の風の中から");
+#endif
+							break;
+#if 1 /*JP*//*By Hiramoto Kouji*/
+						default:
+							Strcpy(blast, "から");
 							break;
+#endif
 					}
 				} else
+#if 0 /*JP*/
 					Strcpy(blast, " with a squelch");
                                 You("get expelled from %s%s!",mon_nam(mtmp), blast);
+#else
+					Strcpy(blast, "から吐き出されるように");
+				You("%s%s脱出した！", mon_nam(mtmp), blast);
+#endif
 			}
 		}
 	}
@@ -341,7 +513,10 @@
 	spoteffects(TRUE);
 	/* to cover for a case where mtmp is not in a next square */
 	if(um_dist(mtmp->mx,mtmp->my,1))
+/*JP
 		pline("Brrooaa...  You land hard at some distance.");
+*/
+		pline("ブロロロ．．遠くに着陸するのは難しい．");
 }
 
 #endif /* OVLB */
@@ -463,7 +638,10 @@
 		    coord cc; /* maybe we need a unexto() function? */
 		    struct obj *obj;
 
+/*JP
 		    You("fall from the %s!", ceiling(u.ux,u.uy));
+*/
+		    You("%sから落ちた！", ceiling(u.ux,u.uy));
 		    if (enexto(&cc, u.ux, u.uy, youmonst.data)) {
 			remove_monster(mtmp->mx, mtmp->my);
 			newsym(mtmp->mx,mtmp->my);
@@ -473,8 +651,13 @@
 			set_apparxy(mtmp);
 			newsym(u.ux,u.uy);
 		    } else {
+#if 0 /*JP*/
 			pline("%s is killed by a falling %s (you)!",
 					Monnam(mtmp), youmonst.data->mname);
+#else
+			pline("%sは落ちてきた%s(あなた)によって死んだ！",
+						Monnam(mtmp),jtrns_mon_gen(youmonst.data->mname, flags.female));
+#endif
 			killed(mtmp);
 			newsym(u.ux,u.uy);
 			if (mtmp->mhp > 0) return 0;
@@ -485,21 +668,33 @@
 
 		    obj = which_armor(mtmp, WORN_HELMET);
 		    if (obj && is_metallic(obj)) {
+/*JP
 			Your("blow glances off %s helmet.",
+*/
+			Your("攻撃は%sの兜をかすめた．",
 			               s_suffix(mon_nam(mtmp)));
 		    } else {
 			if (3 + find_mac(mtmp) <= rnd(20)) {
+/*JP
 			    pline("%s is hit by a falling piercer (you)!",
+*/
+			    pline("%sは落ちる針(あなた)で傷ついた！",
 								Monnam(mtmp));
 			    if ((mtmp->mhp -= d(3,6)) < 1)
 				killed(mtmp);
 			} else
+/*JP
 			  pline("%s is almost hit by a falling piercer (you)!",
+*/
+			  pline("%sはもう少しで落ちる針(あなた)で傷つくところだった！",
 								Monnam(mtmp));
 		    }
 		} else {
 		    if (!youseeit)
+/*JP
 			pline("It tries to move where you are hiding.");
+*/
+			pline("何者かがあなたが隠れているところを移動しようとした．");
 		    else {
 			/* Ugly kludge for eggs.  The message is phrased so as
 			 * to be directed at the monster, not the player,
@@ -517,12 +712,23 @@
 				if (obj->otyp == EGG) obj->spe = 0;
 			    }
 			    if (youmonst.data->mlet == S_EEL)
+#if 0 /*JP*/
 		pline("Wait, %s!  There's a hidden %s named %s there!",
 				m_monnam(mtmp), youmonst.data->mname, plname);
+#else
+	     pline("待て，%s！%sという名の%sが隠れている！",
+				m_monnam(mtmp), plname, jtrns_mon_gen(youmonst.data->mname, flags.female));
+#endif
 			    else
+#if 0 /*JP*/
 	     pline("Wait, %s!  There's a %s named %s hiding under %s!",
 				m_monnam(mtmp), youmonst.data->mname, plname,
 				doname(level.objects[u.ux][u.uy]));
+#else
+	     pline("待て，%s！%sという名の%sが%sの下に隠れている！",
+				m_monnam(mtmp), plname, jtrns_mon_gen(youmonst.data->mname, flags.female), 
+				doname(level.objects[u.ux][u.uy]));
+#endif
 			    if (obj) obj->spe = save_spe;
 			} else
 			    impossible("hiding under nothing?");
@@ -533,9 +739,16 @@
 	}
 	if (youmonst.data->mlet == S_MIMIC && youmonst.m_ap_type &&
 		    !range2 && foundyou && !u.uswallow) {
+#if 0 /*JP*/
 		if (!youseeit) pline("It gets stuck on you.");
 		else pline("Wait, %s!  That's a %s named %s!",
 			   m_monnam(mtmp), youmonst.data->mname, plname);
+#else
+		if (!youseeit) pline("何者かがあなたの上にのしかかった");
+		    else pline("待て，%s！それは%sという名の%sだ！",
+			       m_monnam(mtmp), 
+			       plname, jtrns_mon_gen(youmonst.data->mname, flags.female));
+#endif
 		setustuck(mtmp);
 		youmonst.m_ap_type = M_AP_NOTHING;
 		youmonst.mappearance = 0;
@@ -546,19 +759,39 @@
 	/* player might be mimicking an object */
 	if (youmonst.m_ap_type == M_AP_OBJECT && !range2 && foundyou && !u.uswallow) {
 	    if (!youseeit)
+#if 0 /*JP*/
 		 pline("%s %s!", Something,
 			(likes_gold(mtmp->data) && youmonst.mappearance == GOLD_PIECE) ?
 			"tries to pick you up" : "disturbs you");
+#else
+		 pline("%sは%s！", Something,
+			(likes_gold(mtmp->data) && youmonst.mappearance == GOLD_PIECE) ?
+			"あなたを拾おうとした" : "無視した");
+#endif
+#if 0 /*JP*/
 	    else pline("Wait, %s!  That %s is really %s named %s!",
 			m_monnam(mtmp),
 			mimic_obj_name(&youmonst),
 			an(mons[u.umonnum].mname),
 			plname);
+#else
+	    else pline("待て，%s！その%sは%sという名の%sだ！",
+			m_monnam(mtmp),
+			mimic_obj_name(&youmonst),
+			plname,
+		        jtrns_mon(mons[u.umonnum].mname));
+#endif
 	    if (multi < 0) {	/* this should always be the case */
 		char buf[BUFSZ];
+#if 0 /*JP*/
 		Sprintf(buf, "You appear to be %s again.",
 			Upolyd ? (const char *) an(youmonst.data->mname) :
 			    (const char *) "yourself");
+#else
+		Sprintf(buf, "あなたはふたたび%sになった．",
+			Upolyd ? (const char *) a_monnam(&youmonst) :
+			    (const char *) "自分自身");
+#endif
 		unmul(buf);	/* immediately stop mimicking */
 	    }
 	    return 0;
@@ -601,27 +834,51 @@
 
 	    if(!rn2(4) && !mtmp->mcan) {
 	    	int numseen, numhelp;
+#if 0 /*JP*/
 		char buf[BUFSZ], genericwere[BUFSZ];
+#else
+		char genericwere[BUFSZ];
+#endif
 
 		Strcpy(genericwere, "creature");
 		numhelp = were_summon(mdat, FALSE, &numseen, genericwere);
 		if (youseeit) {
+/*JP
 			pline("%s summons help!", Monnam(mtmp));
+*/
+			pline("%sは助けを呼んだ！", Monnam(mtmp));
 			if (numhelp > 0) {
 			    if (numseen == 0)
+/*JP
 				You_feel("hemmed in.");
+*/
+			pline("何者かに囲まれたような気がする．");
+/*JP
 			} else pline("But none comes.");
+*/
+			} else pline("しかし何も来なかった．");
 		} else {
 			const char *from_nowhere;
 
 			if (flags.soundok) {
+#if 0 /*JP:T*/
 				pline("%s %s!", Something,
 					makeplural(growl_sound(mtmp)));
+#else
+				pline("何かが%s！", growl_sound(mtmp));
+#endif
 				from_nowhere = "";
+/*JP
 			} else from_nowhere = " from nowhere";
+*/
+			} else from_nowhere = "どこからともなく";
 			if (numhelp > 0) {
+/*JP
 			    if (numseen < 1) You_feel("hemmed in.");
+*/
+			    if (numseen < 1) pline("何者かに囲まれたような気がする．");
 			    else {
+#if 0 /*JP*/
 				if (numseen == 1)
 			    		Sprintf(buf, "%s appears",
 							an(genericwere));
@@ -629,6 +886,12 @@
 			    		Sprintf(buf, "%s appear",
 							makeplural(genericwere));
 				pline("%s%s!", upstart(buf), from_nowhere);
+#else
+				pline("%sが%s現れた！",
+				      strcmp(genericwere, "creature") ?
+				      jtrns_mon(genericwere) :
+				      "何か", from_nowhere);
+#endif
 			    }
 			} /* else no help came; but you didn't know it tried */
 		}
@@ -638,13 +901,22 @@
 	if(u.uinvulnerable) {
 	    /* monsters won't attack you */
 	    if(mtmp == u.ustuck)
+/*JP
 		pline("%s loosens its grip slightly.", Monnam(mtmp));
+*/
+		pline("%sは締めつけをわずかに緩めた．", Monnam(mtmp));
 	    else if(!range2) {
 		if (youseeit || sensemon(mtmp))
+/*JP
 		    pline("%s starts to attack you, but pulls back.",
+*/
+		    pline("%sはあなたを攻撃しかけたが，ひっこめた．",
 			  Monnam(mtmp));
 		else
+/*JP
 		    You_feel("%s move nearby.", something);
+*/
+		    pline("何者かがあなたのそばを通りぬけたような気がした．");
 	    }
 	    return (0);
 	}
@@ -710,15 +982,28 @@
 		                                missmu(mtmp, tmp, j, mattk);
 				}
 			    } else if (is_animal(mtmp->data)) {
+/*JP
 				pline("%s gulps some air!", Monnam(mtmp));
+*/
+				pline("%sは息を吸いこんた！", Monnam(mtmp));
 			    } else {
 				if (youseeit)
+/*JP
 				    pline("%s lunges forward and recoils!",
+*/
+				    pline("%sは突進し，戻った！",
 					  Monnam(mtmp));
 				else
+#if 0 /*JP*/
 				    You_hear("a %s nearby.",
 					     is_whirly(mtmp->data) ?
 						"rushing noise" : "splat");
+#else
+						You_hear("すぐそばで%s音を聞いた．",
+						    is_whirly(mtmp->data)?
+						    "突撃してくる" :
+						    "ピシャッという");
+#endif
 			   }
 			}
 			break;
@@ -819,7 +1104,10 @@
 	    if(sum[i] == 1) {	    /* successful attack */
 		if (u.usleep && u.usleep < monstermoves && !rn2(10)) {
 		    multi = -1;
+/*JP
 		    nomovemsg = "The combat suddenly awakens you.";
+*/
+		    nomovemsg = "あなたは起こされた．";
 		}
 	    }
 	    if(sum[i] == 2) return 1;		/* attacker dead */
@@ -908,11 +1196,23 @@
 struct permonst *mdat;
 {
 	if (Sick_resistance) {
+/*JP
 		You_feel("a slight illness.");
+*/
+		You("すこし気分が悪くなったような気がした．");
 		return FALSE;
 	} else {
+#if 0 /*JP*/
 		make_sick(Sick ? Sick/3L + 1L : (long)rn1(ACURR(A_CON), 20),
 			mdat->mname, TRUE, SICK_NONVOMITABLE);
+#else
+		static char jbuf[BUFSZ];
+
+		Strcpy(jbuf, jtrns_mon(mdat->mname));
+		Strcat(jbuf, "によって");
+		make_sick(Sick ? Sick/3L + 1L : (long)rn1(ACURR(A_CON), 20),
+			jbuf, TRUE, SICK_NONVOMITABLE);
+#endif
 		return TRUE;
 	}
 }
@@ -934,6 +1234,7 @@
 	   protection might fail (33% chance) when the armor is cursed */
 	if (obj && (obj->greased || obj->otyp == OILSKIN_CLOAK) &&
 		(!obj->cursed || rn2(3))) {
+#if 0 /*JP*/
 	    pline("%s %s your %s %s!",
 		  Monnam(mtmp),
 		  (mattk->adtyp == AD_WRAP) ?
@@ -943,19 +1244,38 @@
 		     for undiscovered oilskin cloak */
 		  (obj->greased || objects[obj->otyp].oc_name_known) ?
 			xname(obj) : cloak_simple_name(obj));
+#else
+	    pline("%sは%s%s%s！",
+		  Monnam(mtmp),
+		  obj->greased ? "油の塗られた" : "滑りやすい",
+		  (obj->greased || objects[obj->otyp].oc_name_known) ?
+			xname(obj) : cloak_simple_name(obj),
+		  (mattk->adtyp == AD_WRAP) ?
+			"で滑った" : "をつかまえようとしたが，できなかった");
+#endif
 
 	    if (obj->greased && !rn2(2)) {
+/*JP
 		pline_The("grease wears off.");
+*/
+		pline("脂は落ちてしまった．");
 		obj->greased = 0;
 		update_inventory();
 	    }
 	    return TRUE;
 	/* 50% chance (with a luck bonus) of slipping free with free action */
 	} else if (Free_action && (rnl(10) < 5)) {
+#if 0 /*JP*/
                 pline("%s %s you, but you quickly free yourself!",
                        Monnam(mtmp),
                        (mattk->adtyp == AD_WRAP) ?
                       "swings itself around of" : "grabs");
+#else
+                pline("%sはあなた%sが，あなたは素早く振りほどいた！",
+                       Monnam(mtmp),
+                       (mattk->adtyp == AD_WRAP) ?
+                      "に巻きついた" : "を掴んだ");
+#endif
                 return TRUE;
 	}
 	return FALSE;
@@ -1035,9 +1355,12 @@
 	    mtmp->mundetected = 0;
 	    if (!(Blind ? Blind_telepat : Unblind_telepat)) {
 		struct obj *obj;
+#if 0 /*JP*/
 		const char *what;
+#endif
 
 		if ((obj = level.objects[mtmp->mx][mtmp->my]) != 0) {
+#if 0 /*JP*/
 		    if (Blind && !obj->dknown)
 			what = something;
 		    else if (is_pool(mtmp->mx, mtmp->my) && !Underwater)
@@ -1046,6 +1369,14 @@
 			what = doname(obj);
 
 		    pline("%s was hidden under %s!", Amonnam(mtmp), what);
+#else
+		    if (Blind && !obj->dknown)
+		        pline("%sが何かの下に隠れている！", Amonnam(mtmp));
+		    else if (is_pool(mtmp->mx, mtmp->my) && !Underwater)
+		        pline("%sが水中に隠れている！", Amonnam(mtmp));
+		    else
+		        pline("%sが%sの下に隠れている！", Amonnam(mtmp), doname(obj));
+#endif
 		}
 		newsym(mtmp->mx, mtmp->my);
 	    }
@@ -1073,17 +1404,31 @@
 			    dmg = 0;
 			} else {
 			    setustuck(mtmp);
+#if 0 /*JP*/
 			    pline("%s grabs you!", Monnam(mtmp));
+#else
+			    pline("%sにつかまえられている！", Monnam(mtmp));
+#endif
 			}
 		    } else if(u.ustuck == mtmp) {
 			exercise(A_STR, FALSE);
 			if (mtmp->data == &mons[PM_ROPE_GOLEM] && Breathless) {
+#if 0 /*JP*/
 			    You("are being strangled.");
+#else
+			    You("首を絞められている．");
+#endif
 			    dmg = (dmg+1) / 2;
 			} else
+#if 0 /*JP*/
 			    You("are being %s.",
 				    (mtmp->data == &mons[PM_ROPE_GOLEM])
 				    ? "choked" : "crushed");
+#else
+			    You("%sている．",
+				(mtmp->data == &mons[PM_ROPE_GOLEM])
+				? "首を絞められ" : "押しつぶされ");
+#endif
 		    }
 		} else {			  /* hand to hand weapon */
 		    if(mattk->aatyp == AT_WEAP && otmp) {
@@ -1091,8 +1436,13 @@
 			if (otmp->otyp == CORPSE &&
 				touch_petrifies(&mons[otmp->corpsenm])) {
 			    dmg = 1;
+#if 0 /*JP*/
 			    pline("%s hits you with the %s corpse.",
 				Monnam(mtmp), mons[otmp->corpsenm].mname);
+#else
+			    pline("%sは%sの死体で攻撃した．",
+				Monnam(mtmp), jtrns_mon(mons[otmp->corpsenm].mname));
+#endif
 			    if (!Stoned) goto do_stone;
 			}
 
@@ -1141,26 +1491,43 @@
 
 			if (objects[otmp->otyp].oc_material == SILVER &&
 				hates_silver(youmonst.data)) {
+/*JP
 			    pline("The silver sears your flesh!");
+*/
+			    pline("あなたの体は銀で焼かれた！");
 			}
 			/* Stakes do extra dmg agains vamps */
 			if (otmp->otyp == WOODEN_STAKE &&
 				is_vampire(youmonst.data)) {
 			    if (otmp->oartifact == ART_STAKE_OF_VAN_HELSING) {
 				if (!rn2(10)) {
+#if 0 /*JP*/
 				    pline("%s plunges the stake into your heart.",
 					    Monnam(mtmp));
 				    killer = "a wooden stake in the heart.";
+#else
+				    pline("%sはあなたの心臓を杭で突き刺した．",
+					    Monnam(mtmp));
+				    killer = "心臓を木の杭で突き刺されて";
+#endif
 				    killer_format = KILLED_BY_AN;
 				    u.ugrave_arise = NON_PM; /* No corpse */
 				    done(DIED);
 				} else {
+#if 0 /*JP*/
 				    pline("%s drives the stake into you.",
+#else
+				    pline("%sはあなたに杭を打ち込んだ．",
+#endif
 					    Monnam(mtmp));
 				    dmg += rnd(6) + 2;
 				}
 			    } else {
+#if 0 /*JP*/
 				pline("%s drives the stake into you.",
+#else
+				pline("%sはあなたに杭を打ち込んだ．",
+#endif
 					Monnam(mtmp));
 				dmg += rnd(6);
 			    }
@@ -1172,9 +1539,14 @@
 			    if (nopoison < 2) nopoison = 2;
 			    if (!rn2(nopoison)) {
 				otmp->opoisoned = FALSE;
+#if 0 /*JP*/
 				pline("%s %s no longer poisoned.",
 				       s_suffix(Monnam(mtmp)),
 				       aobjnam(otmp, "are"));
+#else
+				pline("%sの武器にはもう毒が塗られていない．",
+				       s_suffix(Monnam(mtmp)));
+#endif
 			    }
 			}
 			if (dmg <= 0) dmg = 1;
@@ -1187,11 +1559,18 @@
 			  boolean water = (youmonst.data ==
 					   &mons[PM_WATER_ELEMENTAL]);
 
+#if 0 /*JP*/
 			  pline("%s %s%s %syou!",
 				(Blind ? "It" : Yname2(otmp)),
 				(water ? "vaporize" : "burn"),
 				(plural ? "" : "s"),
 				(water ? "part of " : ""));
+#else
+			  pline("%sによってあなた%sは%s！",
+				(Blind ? "それ" : Yname2(otmp)),
+			  	(water ? "の一部" : ""),
+				(water ? "蒸発してしまった" : "燃やされた"));
+#endif
 
 			  if (!rn2(2) && burnarmor(&youmonst)) {
 			    dmg++;
@@ -1225,7 +1604,10 @@
 			    flags.botl = 1;
 			    dmg = 0;
 			    if(cloneu())
+/*JP
 			    You("divide as %s hits you!",mon_nam(mtmp));
+*/
+			    pline("%sの攻撃によってあなたは分裂した！", mon_nam(mtmp));
 			}
 			urustm(mtmp, otmp);
 		    } else if (mattk->aatyp != AT_TUCH || dmg != 0 ||
@@ -1240,15 +1622,24 @@
 	    case AD_FIRE:
 		hitmsg(mtmp, mattk);
 		if (uncancelled) {
+/*JP
 		    pline("You're %s!", on_fire(youmonst.data, mattk));
+*/
+		    pline("あなたは%s！", on_fire(youmonst.data, mattk));
 		    if (youmonst.data == &mons[PM_STRAW_GOLEM] ||
 		        youmonst.data == &mons[PM_PAPER_GOLEM]) {
+/*JP
 			    You("roast!");
+*/
+			    You("焦げた！");
 			    /* KMH -- this is okay with unchanging */
 			    rehumanize();
 			    break;
 		    } else if (Fire_resistance) {
+/*JP
 			pline_The("fire doesn't feel hot!");
+*/
+			pline("火はぜんぜん熱くない！");
 			dmg = 0;
                         } else if (u.umonnum == PM_STRAW_GOLEM ||
 				   u.umonnum == PM_PAPER_GOLEM ||
@@ -1278,9 +1669,15 @@
 	    case AD_COLD:
 		hitmsg(mtmp, mattk);
 		if (uncancelled) {
+/*JP
 		    pline("You're covered in frost!");
+*/
+		    You("氷で覆われた！");
 		    if (Cold_resistance) {
+/*JP
 			pline_The("frost doesn't seem cold!");
+*/
+			pline("氷は冷さを感じさせない！");
 			dmg = 0;
 		    }
 		    if((int) mtmp->m_lev > rn2(20))
@@ -1290,9 +1687,15 @@
 	    case AD_ELEC:
 		hitmsg(mtmp, mattk);
 		if (uncancelled) {
+/*JP
 		    You("get zapped!");
+*/
+		    You("電撃をくらった！");
 		    if (Shock_resistance) {
+/*JP
 			pline_The("zap doesn't shock you!");
+*/
+			pline("電撃はしびれを感じさせない！");
 			dmg = 0;
 		    }
 		    if((int) mtmp->m_lev > rn2(20))
@@ -1306,13 +1709,22 @@
 		if (uncancelled && multi >= 0 && !rn2(5)) {
 		    if (Sleep_resistance) break;
 		    fall_asleep(-rnd(10), TRUE);
+/*JP
 		    if (Blind) You("are put to sleep!");
+*/
+		    if (Blind) You("眠りにおちた！");
+/*JP
 		    else You("are put to sleep by %s!", mon_nam(mtmp));
+*/
+		    else You("%sに眠らされた！", mon_nam(mtmp));
 		}
 		break;
 	    case AD_BLND:
 		if (can_blnd(mtmp, &youmonst, mattk->aatyp, (struct obj*)0)) {
+/*JP
 		    if (!Blind) pline("%s blinds you!", Monnam(mtmp));
+*/
+		    if (!Blind) pline("%s攻撃で目が見えなくなった！", Monnam(mtmp));
 		    make_blinded(Blinded+(long)dmg,FALSE);
 		    if (!Blind) Your(vision_clears);
 		}
@@ -1329,15 +1741,26 @@
 dopois:
 		hitmsg(mtmp, mattk);
 		if (uncancelled && !rn2(8)) {
+#if 0 /*JP*/
 		    Sprintf(buf, "%s %s",
 			    s_suffix(Monnam(mtmp)), mpoisons_subj(mtmp, mattk));
+#else
+			Sprintf(buf, "%sの%s",
+			    Monnam(mtmp), mpoisons_subj(mtmp, mattk));
+#endif
+/*JP
 		    poisoned(buf, ptmp, mdat->mname, 30);
+*/
+		    poisoned(buf, ptmp, jtrns_mon(mdat->mname), 30);
 		}
 		break;
 	    case AD_DRIN:
 		hitmsg(mtmp, mattk);
 		if (defends(AD_DRIN, uwep) || !has_head(youmonst.data)) {
+/*JP
 		    You("don't seem harmed.");
+*/
+		    You("傷ついていないようだ．");
 		    /* Not clear what to do for green slimes */
 		    break;
 		}
@@ -1345,7 +1768,11 @@
 
 		if (uarmh && rn2(8)) {
 		    /* not body_part(HEAD) */
+#if 0 /*JP*/
 		    Your("helmet blocks the attack to your head.");
+#else
+		    Your("兜が頭への攻撃を防いだ．");
+#endif
 		    break;
 		}
 		
@@ -1359,7 +1786,11 @@
 		mdamageu(mtmp, dmg);
 
 		if (!uarmh || uarmh->otyp != DUNCE_CAP) {
+#if 0 /*JP*/
 		    Your("brain is eaten!");
+#else
+		    Your("脳は食べられた！");
+#endif
 		    /* No such thing as mindless players... */
 		    if (ABASE(A_INT) <= ATTRMIN(A_INT)) {
 			int lifesaved = 0;
@@ -1376,16 +1807,28 @@
 				    /* explicitly chose not to die;
 				       arbitrarily boost intelligence */
 				    ABASE(A_INT) = ATTRMIN(A_INT) + 2;
+/*JP
 				    You_feel("like a scarecrow.");
+*/
+				    You("かかしのような気持がした．");
 				    break;
 				}
 			    }
 
 			    if (lifesaved)
+/*JP
 				pline("Unfortunately your brain is still gone.");
+*/
+			        pline("残念ながらあなたには脳がない．");
 			    else
+/*JP
 				Your("last thought fades away.");
+*/
+				Your("最後の思いが走馬燈のように横ぎった．");
+/*JP
 			    killer = "brainlessness";
+*/
+			    killer = "脳を失って";
 			    killer_format = KILLED_BY;
 			    done(DIED);
 			    lifesaved++;
@@ -1402,10 +1845,19 @@
 		hitmsg(mtmp, mattk);
 		if (uncancelled && multi >= 0 && !rn2(3)) {
 		    if (Free_action) {
+/*JP
 			You("momentarily stiffen.");            
+*/
+			You("一瞬硬直した．");
 		    } else {
+/*JP
 			if (Blind) You("are frozen!");
+*/
+		    if (Blind) You("動けない！");
+/*JP
 			else You("are frozen by %s!", mon_nam(mtmp));
+*/
+		    else pline("%sによって動けなくなった！", mon_nam(mtmp));
 			nomovemsg = 0;	/* default: "you can move again" */
 			nomul(-rnd(10));
 			exercise(A_DEX, FALSE);
@@ -1416,10 +1868,19 @@
 		hitmsg(mtmp, mattk);
 		if (uncancelled && multi >= 0 && !rn2(3)) {
 		    if (Free_action)
+#if 0 /*JP*/
 			You_feel("horrible tentacles probing your flesh!");
+#else
+			You_feel("身の毛のよだつ触手があなたの身体をまさぐった！");
+#endif
 		    else {
+#if 0 /*JP*/
 			if (Blind) You("are mercilessly tickled!");
 			else You("are mercilessly tickled by %s!", mon_nam(mtmp));
+#else
+			if (Blind) You("容赦なくくすぐられた！");
+			else You("容赦なく%sにくすぐられた！", mon_nam(mtmp));
+#endif
 			nomovemsg = 0;	/* default: "you can move again" */
 			nomul(-rnd(10));
 			exercise(A_DEX, FALSE);
@@ -1432,7 +1893,11 @@
 		/* if vampire biting (and also a pet) */
 		if (is_vampire(mtmp->data) && mattk->aatyp == AT_BITE &&
 			has_blood(youmonst.data)) {
+#if 0 /*JP*/
 			   Your("blood is being drained!");
+#else
+			   You("血を吸われた！");
+#endif
 			   /* Get 1/20th of full corpse value
 			    * Therefore 4 bites == 1 drink
 			    */
@@ -1441,12 +1906,20 @@
 		}
 		
 		if (uncancelled && !rn2(3) && !Drain_resistance) {
+#if 0 /*JP*/
 		    losexp("life drainage", FALSE);
+#else
+		    losexp("生命力を吸収されて", FALSE);
+#endif
 		}
 		break;
 	    case AD_LEGS:
 		{ register long side = rn2(2) ? RIGHT_SIDE : LEFT_SIDE;
+#if 0 /*JP*/
 		  const char *sidestr = (side == RIGHT_SIDE) ? "right" : "left";
+#else
+		  const char *sidestr = (side == RIGHT_SIDE) ? "右" : "左";
+#endif
 
 		/* This case is too obvious to ignore, but Nethack is not in
 		 * general very good at considering height--most short monsters
@@ -1458,29 +1931,53 @@
 			u.usteed ||
 #endif
 				    Levitation || Flying) {
+#if 0 /*JP*/
 		    pline("%s tries to reach your %s %s!", Monnam(mtmp),
 			  sidestr, body_part(LEG));
+#else
+		    pline("%sはあなたの%s%sに攻撃しようとした！", Monnam(mtmp),
+			  sidestr, body_part(LEG));
+#endif
 		    dmg = 0;
 		  } else if (mtmp->mcan) {
+#if 0 /*JP*/
 		    pline("%s nuzzles against your %s %s!", Monnam(mtmp),
 			  sidestr, body_part(LEG));
+#else
+		    pline("%sはあなたの%s%sに鼻をすりよせた！", Monnam(mtmp),
+			  sidestr, body_part(LEG));
+#endif
 		    dmg = 0;
 		  } else {
 		    if (uarmf) {
 			if (rn2(2) && (uarmf->otyp == LOW_BOOTS ||
 					     uarmf->otyp == IRON_SHOES))
+#if 0 /*JP*/
 			    pline("%s pricks the exposed part of your %s %s!",
 				Monnam(mtmp), sidestr, body_part(LEG));
+#else
+			    pline("%sはあなたの%s%sをちくりと刺した！",
+				Monnam(mtmp), sidestr, body_part(LEG));
+#endif
 			else if (!rn2(5))
+/*JP
 			    pline("%s pricks through your %s boot!",
+*/
+			    pline("%sはあなたの%sの靴をちくりと刺した！", 
 				Monnam(mtmp), sidestr);
 			else {
+/*JP
 			    pline("%s scratches your %s boot!", Monnam(mtmp),
+*/
+			    pline("%sはあなたの%sの靴をひっかいた！", Monnam(mtmp),
 				sidestr);
 			    dmg = 0;
 			    break;
 			}
+/*JP
 		    } else pline("%s pricks your %s %s!", Monnam(mtmp),
+*/
+		    } else pline("%sはあなたの%s%sをちくりと刺した！", Monnam(mtmp),
 			  sidestr, body_part(LEG));
 		    set_wounded_legs(side, rnd(60-ACURR(A_DEX)));
 		    exercise(A_STR, FALSE);
@@ -1493,10 +1990,16 @@
 		if(!rn2(3)) {
 		    if (mtmp->mcan) {
 			if (flags.soundok)
+/*JP
 			    You_hear("a cough from %s!", mon_nam(mtmp));
+*/
+			    You_hear("%sがゴホッゴホッという音を聞いた！", mon_nam(mtmp));
 		    } else {
 			if (flags.soundok)
+/*JP
 			    You_hear("%s hissing!", s_suffix(mon_nam(mtmp)));
+*/
+			    You_hear("%sがシューッという声を聞いた！", mon_nam(mtmp));
 			if(!rn2(10) ||
 			    (flags.moonphase == NEW_MOON && !have_lizard())) {
  do_stone:
@@ -1504,7 +2007,10 @@
 				    && !(poly_when_stoned(youmonst.data) &&
 					polymon(PM_STONE_GOLEM))) {
 				Stoned = 5;
+/*JP
 				delayed_killer = mtmp->data->mname;
+*/
+				delayed_killer = jtrns_mon(mtmp->data->mname);
 				if (mtmp->data->geno & G_UNIQ) {
 				    if (!type_is_pname(mtmp->data)) {
 					static char kbuf[BUFSZ];
@@ -1534,7 +2040,10 @@
 			if (u_slip_free(mtmp, mattk)) {
 			    dmg = 0;
 			} else {
+/*JP
 			    pline("%s swings itself around you!",
+*/
+			    pline("%sはあなたに身体を絡みつかせた！",
 				  Monnam(mtmp));
 			    setustuck(mtmp);
 			}
@@ -1547,19 +2056,34 @@
 				!Is_medusa_level(&u.uz) &&
 				!Is_waterlevel(&u.uz);
 
+/*JP
 			    pline("%s drowns you...", Monnam(mtmp));
+*/
+			    pline("あなたは%sに絡みつかれて溺れた．．．", Monnam(mtmp));
 			    killer_format = KILLED_BY_AN;
+#if 0 /*JP*/
 			    Sprintf(buf, "%s by %s",
 				    moat ? "moat" : "pool of water",
 				    an(mtmp->data->mname));
+#else
+			    Sprintf(buf, "%sの%sに絡みつかれて",
+				    moat ? "堀" : "池",
+				    jtrns_mon(mtmp->data->mname));
+#endif
 			    killer = buf;
 			    done(DROWNING);
 			} else if(mattk->aatyp == AT_HUGS)
+/*JP
 			    You("are being crushed.");
+*/
+			    You("押しつぶされた．");
 		    } else {
 			dmg = 0;
 			if(flags.verbose)
+/*JP
 			    pline("%s brushes against your %s.", Monnam(mtmp),
+*/
+			    pline("%sはあなたの%sに触れた．", Monnam(mtmp),
 				   body_part(LEG));
 		    }
 		} else dmg = 0;
@@ -1570,7 +2094,10 @@
 			!Protection_from_shape_changers &&
 			!is_were(youmonst.data) &&
 			!defends(AD_WERE,uwep)) {
+/*JP
 		    You_feel("feverish.");
+*/
+		    You("熱があるような気がした．");
 		    exercise(A_CON, FALSE);
 		    u.ulycn = monsndx(mdat);
 		    upermonst.mflags2 |= (M2_WERE);
@@ -1593,9 +2120,15 @@
 			|| dmgtype(youmonst.data, AD_SSEX)
 #endif
 						) {
+#if 0 /*JP*/
 			pline("%s %s.", Monnam(mtmp), mtmp->minvent ?
 		    "brags about the goods some dungeon explorer provided" :
 		    "makes some remarks about how difficult theft is lately");
+#else
+			pline("%sは%s．", Monnam(mtmp), mtmp->minvent ?
+			"ある迷宮の冒険家が置いてった品物を自慢した" :
+			"窃盗がいかに困難か淡々と述べた．");
+#endif
 			if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
 			return 3;
 		} else if (mtmp->mcan) {
@@ -1607,10 +2140,17 @@
 			 */
 			int do_charm = is_neuter(mdat) || \
 			  flags.female == mtmp->female;
+#if 0 /*JP*/
 			pline("%s tries to %s you, but you seem %s.",
 			    Adjmonnam(mtmp, "plain"),
 			    do_charm ? "charm" : "seduce",
 			    do_charm ? "unaffected" : "uninterested");
+#else
+			pline("%sはあなたを%sしようとした，しかしあなたは%s",
+			    Adjmonnam(mtmp, "地味な"),
+			    do_charm ? "魅了" : "誘惑",
+			    do_charm ? "影響をうけない" : "興味がない");
+#endif
 		    }
 		    if(rn2(3)) {
 			if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
@@ -1629,10 +2169,16 @@
 			    (void) rloc(mtmp, FALSE);
 			if (is_animal(mtmp->data) && *buf) {
 			    if (canseemon(mtmp))
+#if 0 /*JP*/
 				pline("%s tries to %s away with %s.",
 				      Monnam(mtmp),
 				      locomotion(mtmp->data, "run"),
 				      buf);
+#else
+				pline("%sは%sを持って逃げ出した．",
+				      Monnam(mtmp),
+				      buf);
+#endif
 			}
 			monflee(mtmp, 0, FALSE, FALSE);
 			return 3;
@@ -1659,7 +2205,10 @@
 		hitmsg(mtmp, mattk);
 		if (uncancelled) {
 		    if(flags.verbose)
+/*JP
 			Your("position suddenly seems very uncertain!");
+*/
+			pline("自分のいる位置が突然不明確になった！");
 		    tele();
 		}
 		break;
@@ -1667,7 +2216,11 @@
 		hitmsg(mtmp, mattk);
 		if (mtmp->mcan) break;
 		if (u.umonnum == PM_IRON_GOLEM) {
+#if 0 /*JP*/
 			You("rust!");
+#else
+			You("錆びついた！");
+#endif
 			u.uhp -= mons[u.umonnum].mlevel;
 			u.uhpmax -= mons[u.umonnum].mlevel;
 			if (u.uhpmax < 1) u.uhpmax = 1;
@@ -1688,7 +2241,11 @@
 		if (mtmp->mcan) break;
 		if (u.umonnum == PM_WOOD_GOLEM ||
 		    u.umonnum == PM_LEATHER_GOLEM) {
+#if 0 /*JP*/
 			You("rot!");
+#else
+			You("腐った！");
+#endif
 			u.uhp -= mons[u.umonnum].mlevel;
 			u.uhpmax -= mons[u.umonnum].mlevel;
 			if (u.uhpmax < 1) u.uhpmax = 1;
@@ -1711,7 +2268,10 @@
 #endif
 		   && !uarm && !uarmh && !uarms && !uarmg && !uarmc && !uarmf) {
 		    boolean goaway = FALSE;
+/*JP
 		    pline("%s hits!  (I hope you don't mind.)", Monnam(mtmp));
+*/
+		    pline("%sの攻撃は命中した．(気にしないように．)", Monnam(mtmp));
 		    if (Upolyd) {
 			u.mh += rnd(7);
 /* STEPHEN WHITE'S NEW CODE */                                            
@@ -1748,7 +2308,10 @@
 		} else {
 		    if (Role_if(PM_HEALER)) {
 			if (flags.soundok && !(moves % 5))
+/*JP
 		      verbalize("Doc, I can't help you unless you cooperate.");
+*/
+		      verbalize("ドクター！協力をおねがいしますわ．");
 			dmg = 0;
 		    } else hitmsg(mtmp, mattk);
 		}
@@ -1758,11 +2321,20 @@
 		if(!night() && mdat == &mons[PM_GREMLIN]) break;
 		if(!mtmp->mcan && !rn2(10)) {
 		    if (flags.soundok) {
+#if 0 /*JP*/
 			if (Blind) You_hear("laughter.");
 			else       pline("%s chuckles.", Monnam(mtmp));
+#else
+			if (Blind) You_hear("笑い声を聞いた．");
+			else       pline("%sはクスクス笑った．", Monnam(mtmp));
+#endif
 		    }
 		    if (u.umonnum == PM_CLAY_GOLEM) {
+#if 0 /*JP*/
 			pline("Some writing vanishes from your head!");
+#else
+			pline("いくつかの文字があなたの頭から消えた！");
+#endif
 			u.uhp -= mons[u.umonnum].mlevel;
 			u.uhpmax -= mons[u.umonnum].mlevel;
 			if (u.uhpmax < 1) u.uhpmax = 1;
@@ -1785,10 +2357,16 @@
 		hitmsg(mtmp, mattk);
 		if(!mtmp->mcan && !rn2(3)) {
 		    if (Acid_resistance) {
+/*JP
 			pline("You're covered in acid, but it seems harmless.");
+*/
+			pline("酸で覆われた．しかし傷つかない．");
 			dmg = 0;
 		    } else {
+/*JP
 			pline("You're covered in acid!	It burns!");
+*/
+			You("酸で覆われ焼けた！");
 			exercise(A_STR, FALSE);
 		    }
 		} else		dmg = 0;
@@ -1810,41 +2388,70 @@
 		if(!mtmp->mcan && !rn2(4) && !mtmp->mspec_used) {
 		    mtmp->mspec_used = mtmp->mspec_used + (dmg + rn2(6));
 		    if(Confusion)
+#if 0 /*JP*/
 			 You("are getting even more confused.");
 		    else You("are getting confused.");
+#else
+			 You("ますます混乱した．");
+		    else You("混乱してきた．");
+#endif
 		    make_confused(HConfusion + dmg, FALSE);
 		}
 		dmg = 0;
 		break;
 	    case AD_DETH:
+#if 0 /*JP*/
 		pline("%s reaches out with its deadly touch.", Monnam(mtmp));
+#else
+		pline("%sは死の腕をのばした．", Monnam(mtmp));
+#endif
 		if (is_undead(youmonst.data)) {
 		    /* Still does normal damage */
+#if 0 /*JP*/
 		    pline("Was that the touch of death?");
+#else
+		    pline("今のは死の宣告だったのかな？");
+#endif
 		    break;
 		}
 		switch (rn2(20)) {
 		case 19: case 18: case 17:
 		    if (!Antimagic) {
 			killer_format = KILLED_BY_AN;
+#if 0 /*JP*/
 			killer = "touch of death";
+#else
+			killer = "死の宣告で";
+#endif
 			done(DIED);
 			dmg = 0;
 			break;
 		    } /* else FALLTHRU */
 		default: /* case 16: ... case 5: */
+#if 0 /*JP*/
 		    You_feel("your life force draining away...");
+#else
+		    You("体力が奪われていくような気がした．．．");
+#endif
 		    permdmg = 1;	/* actual damage done below */
 		    break;
 		case 4: case 3: case 2: case 1: case 0:
 		    if (Antimagic) shieldeff(u.ux, u.uy);
+#if 0 /*JP*/
 		    pline("Lucky for you, it didn't work!");
+#else
+		    pline("運のよいことになんともなかった！");
+#endif
 		    dmg = 0;
 		    break;
 		}
 		break;
 	    case AD_PEST:
+#if 0 /*JP*/
 		pline("%s reaches out, and you feel fever and chills.",
+#else
+		pline("%sは腕をのばした，あなたは悪寒を感じた．",
+#endif
 			Monnam(mtmp));
 		(void) diseasemu(mdat); /* plus the normal damage */
 		/* No damage if invulnerable; setting dmg zero prevents
@@ -1852,7 +2459,11 @@
 		if (Invulnerable) dmg = 0;
 		break;
 	    case AD_FAMN:
+#if 0 /*JP*/
 		pline("%s reaches out, and your body shrivels.",
+#else
+		pline("%sは腕を伸ばした，あなたの体はしなびた．",
+#endif
 			Monnam(mtmp));
 		exercise(A_CON, FALSE);
 		if (!is_fainted()) morehungry(rn1(40,40));
@@ -1867,7 +2478,11 @@
 		hitmsg(mtmp, mattk);
 		if (uncancelled && !Unchanging && !Antimagic) {
 		    if (flags.verbose)
+#if 0 /*JP*/
 			You("undergo a freakish metamorphosis!");
+#else
+			You("奇形な変化をしはじめた！");
+#endif
 		    polyself(FALSE);
 		}
 		break;
@@ -1875,20 +2490,35 @@
 		hitmsg(mtmp, mattk);
 		if (!uncancelled) break;
 		if (flaming(youmonst.data)) {
+/*JP
 		    pline_The("slime burns away!");
+*/
+		    pline_The("スライムは燃えた！");
 		    dmg = 0;
 		} else if (Unchanging ||
 				youmonst.data == &mons[PM_GREEN_SLIME]) {
+/*JP
 		    You("are unaffected.");
+*/
+		    You("影響を受けない．");
 		    dmg = 0;
 		} else if (!Slimed) {
+/*JP
 		    You("don't feel very well.");
+*/
+		    You("気分が悪い．");
 		    Slimed = 10L;
 		    flags.botl = 1;
 		    killer_format = KILLED_BY_AN;
+/*JP
 		    delayed_killer = mtmp->data->mname;
+*/
+		    delayed_killer = jtrns_mon(mtmp->data->mname);
 		} else
+/*JP
 		    pline("Yuck!");
+*/
+		    pline("ウゲェー！");
 		break;
 	    case AD_ENCH:	/* KMH -- remove enchantment (disenchanter) */
 		hitmsg(mtmp, mattk);
@@ -1898,7 +2528,10 @@
 		    struct obj *obj = some_armor(&youmonst);
 
 		    if (drain_item(obj)) {
+/*JP
 			Your("%s less effective.", aobjnam(obj, "seem"));
+*/
+			Your("%sから魔力が消えた．", xname(obj));
 		    }
 		}
 		break;
@@ -1954,8 +2587,10 @@
 		    *hpmax_p -= permdmg;
 		else if (*hpmax_p > lowerlimit)
 		    *hpmax_p = lowerlimit;
+#ifndef GCC_WARN
 		else	/* unlikely... */
 		    ;	/* already at or below minimum threshold; do nothing */
+#endif
 		flags.botl = 1;
 	    }
 
@@ -2005,25 +2640,40 @@
 			 * like horses for now :-)
 			 */
 			Strcpy(buf, mon_nam(u.usteed));
+/*JP
 			pline ("%s lunges forward and plucks you off %s!",
+*/
+			pline ("%sは突進しあなたを%sから引き落した！",
 				Monnam(mtmp), buf);
 			dismount_steed(DISMOUNT_ENGULFED);
 		} else
 #endif
+/*JP
 		pline("%s engulfs you!", Monnam(mtmp));
+*/
+		pline("%sはあなたを飲みこんだ！", Monnam(mtmp));
 		stop_occupation();
 		reset_occupations();	/* behave as if you had moved */
 
 		if (u.utrap) {
+#if 0 /*JP*/
 			You("are released from the %s!",
 				u.utraptype==TT_WEB ? "web" : "trap");
+#else
+			You("%sから解放された！",
+				u.utraptype==TT_WEB ? "くもの巣" : "罠");
+#endif
 			u.utrap = 0;
 		}
 
 		i = number_leashed();
 		if (i > 0) {
+#if 0 /*JP*/
 		    const char *s = (i > 1) ? "leashes" : "leash";
 		    pline_The("%s %s loose.", s, vtense(s, "snap"));
+#else
+		    pline("紐はパチンと切れた．");
+#endif
 		    unleash_all();
 		}
 
@@ -2059,37 +2709,68 @@
 			u.uswldtim = 0;
 			tmp = 0;
 		    } else if (u.uswldtim == 0) {
+#if 0 /*JP*/
 			pline("%s totally digests you!", Monnam(mtmp));
+#else
+			pline("%sはあなたを完全に消化した！", Monnam(mtmp));
+#endif
 			tmp = u.uhp;
 			if (Half_physical_damage) tmp *= 2; /* sorry */
 		    } else {
+#if 0 /*JP*/
 			pline("%s%s digests you!", Monnam(mtmp),
 			      (u.uswldtim == 2) ? " thoroughly" :
 			      (u.uswldtim == 1) ? " utterly" : "");
+#else
+			pline("%sはあなたを%s消化している！", Monnam(mtmp),
+			      (u.uswldtim == 2) ? " 徹底的に" :
+			      (u.uswldtim == 1) ? " 完全に" : "");
+#endif
 			exercise(A_STR, FALSE);
 		    }
 		    break;
 		case AD_PHYS:
 		    if (mtmp->data == &mons[PM_FOG_CLOUD]) {
+#if 0 /*JP*/
 			You("are laden with moisture and %s",
 			    flaming(youmonst.data) ? "are smoldering out!" :
 			    Breathless ? "find it mildly uncomfortable." :
 			    amphibious(youmonst.data) ? "feel comforted." :
 			    "can barely breathe!");
+#else
+			You("湿気に苦しめられ，%s",
+			    flaming(youmonst.data) ? "くすぶった！" :
+			    Breathless ? "少々不快に感じた．" :
+			    amphibious(youmonst.data) ? "安らぎを感じた．" :
+			    "息をするのがやっとだ！");
+#endif
 			/* NB: Amphibious includes Breathless */
 			if (Amphibious && !flaming(youmonst.data)) tmp = 0;
 		    } else {
+#if 0 /*JP*/
 			You("are pummeled with debris!");
+#else
+			You("瓦礫で痛めつけられた！");
+#endif
 			exercise(A_STR, FALSE);
 		    }
 		    break;
 		case AD_ACID:
 		    if (Acid_resistance) {
+#if 0 /*JP*/
 			You("are covered with a seemingly harmless goo.");
+#else
+			You("ねばつくものでおわれた．");
+#endif
 			tmp = 0;
 		    } else {
+#if 0 /*JP*/
 		      if (Hallucination) pline("Ouch!  You've been slimed!");
 		      else You("are covered in slime!  It burns!");
+#else
+		      if (Hallucination) pline("げげん！あなたはぬるぬるだ！");
+		      else You("べとべとになった．そして酸に焼かれた！");
+#endif
 		      exercise(A_STR, FALSE);
 		    }
 		    /* Mik: Go corrode a few things... */
@@ -2109,7 +2790,11 @@
 		case AD_BLND:
 		    if (can_blnd(mtmp, &youmonst, mattk->aatyp, (struct obj*)0)) {
 			if(!Blind) {
+#if 0 /*JP*/
 			    You_cant("see in here!");
+#else
+			    You("何も見えない！");
+#endif
 			    make_blinded((long)tmp,FALSE);
 			    if (!Blind) Your(vision_clears);
 			} else
@@ -2120,10 +2805,16 @@
 		    break;
 		case AD_ELEC:
 		    if(!mtmp->mcan && rn2(2)) {
+/*JP
 			pline_The("air around you crackles with electricity.");
+*/
+			pline("あなたの回りの空気は電気でピリピリしている．");
 			if (Shock_resistance) {
 				shieldeff(u.ux, u.uy);
+/*JP
 				You("seem unhurt.");
+*/
+				You("傷つかないようだ．");
 				ugolemeffects(AD_ELEC,tmp);
 				tmp = 0;
 			}
@@ -2133,20 +2824,32 @@
 		    if(!mtmp->mcan && rn2(2)) {
 			if (Cold_resistance) {
 				shieldeff(u.ux, u.uy);
+/*JP
 				You_feel("mildly chilly.");
+*/
+				pline("ひんやりした．");
 				ugolemeffects(AD_COLD,tmp);
 				tmp = 0;
+/*JP
 			} else You("are freezing to death!");
+*/
+			} else You("凍死しそうだ！");
 		    } else tmp = 0;
 		    break;
 		case AD_FIRE:
 		    if(!mtmp->mcan && rn2(2)) {
 			if (Fire_resistance) {
 				shieldeff(u.ux, u.uy);
+/*JP
 				You_feel("mildly hot.");
+*/
+				pline("ポカポカした．");
 				ugolemeffects(AD_FIRE,tmp);
 				tmp = 0;
+/*JP
 			} else You("are burning to a crisp!");
+*/
+			} else You("燃えてカラカラになった！");
 			burn_away_slime();
 		    } else tmp = 0;
 		    break;
@@ -2164,14 +2867,25 @@
 	if (tmp) stop_occupation();
 
 	if (touch_petrifies(youmonst.data) && !resists_ston(mtmp)) {
+#if 0 /*JP*/
 	    pline("%s very hurriedly %s you!", Monnam(mtmp),
 		  is_animal(mtmp->data)? "regurgitates" : "expels");
+#else
+		pline("%sは急いであなたを%sした！", Monnam(mtmp),
+		       is_animal(mtmp->data)? "吐き戻" : "排出");
+#endif
 	    expels(mtmp, mtmp->data, FALSE);
 	} else if (!u.uswldtim || youmonst.data->msize >= MZ_HUGE) {
+/*JP
 	    You("get %s!", is_animal(mtmp->data)? "regurgitated" : "expelled");
+*/
+	    You("%sされた！", is_animal(mtmp->data)? "吐き戻" : "排出");
 	    if (flags.verbose && (is_animal(mtmp->data) ||
 		    (dmgtype(mtmp->data, AD_DGST) && Slow_digestion)))
+/*JP
 		pline("Obviously %s doesn't like your taste.", mon_nam(mtmp));
+*/
+		You("どうも%s好みの味じゃないようだ．", mon_nam(mtmp));
 	    expels(mtmp, mtmp->data, FALSE);
 	}
 	return(1);
@@ -2186,10 +2900,17 @@
     if (mtmp->mcan) return(0);
 
     if (!ufound)
+#if 0 /*JP*/
 	pline("%s explodes at a spot in %s!",
 	    canseemon(mtmp) ? Monnam(mtmp) : "It",
 	    levl[mtmp->mux][mtmp->muy].typ == WATER
 		? "empty water" : "thin air");
+#else
+	pline("%sは何もない%sで爆発した！",
+	      canseemon(mtmp) ? Monnam(mtmp) : "何者か",
+	      levl[mtmp->mux][mtmp->muy].typ == WATER ?
+	      "水中" : "空間");
+#endif
     else {
 	register int tmp = d((int)mattk->damn, (int)mattk->damd);
 	register boolean not_affected = defends((int)mattk->adtyp, uwep);
@@ -2209,10 +2930,16 @@
 
 		if (!not_affected) {
 		    if (ACURR(A_DEX) > rnd(20)) {
+/*JP
 			You("duck some of the blast.");
+*/
+			You("衝撃をさけた．");
 			tmp = (tmp+1) / 2;
 		    } else {
+/*JP
 		        if (flags.verbose) You("get blasted!");
+*/
+		        if (flags.verbose) You("衝撃をくらった！");
 		    }
 		    if (mattk->adtyp == AD_FIRE) burn_away_slime();
 		    if (Half_physical_damage) tmp = (tmp+1) / 2;
@@ -2225,11 +2952,17 @@
 		if (!not_affected) {
 		    /* sometimes you're affected even if it's invisible */
 		    if (mon_visible(mtmp) || (rnd(tmp /= 2) > u.ulevel)) {
+/*JP
 			You("are blinded by a blast of light!");
+*/
+			You("まばゆい光に目がくらんだ！");
 			make_blinded((long)tmp, FALSE);
 			if (!Blind) Your(vision_clears);
 		    } else if (flags.verbose)
+/*JP
 			You("get the impression it was not terribly bright.");
+*/
+			You("それは恐ろしくまぶしいというほどじゃないと思った．");
 		}
 		break;
 
@@ -2241,9 +2974,15 @@
 		if (!not_affected) {
 		    boolean chg;
 		    if (!Hallucination)
+/*JP
 			You("are caught in a blast of kaleidoscopic light!");
+*/
+			You("万華鏡の光に捕らえられた！");
 		    chg = make_hallucinated(HHallucination + (long)tmp,FALSE,0L);
+/*JP
 		    You("%s.", chg ? "are freaked out" : "seem unaffected");
+*/
+		    You("%s.", chg ? "酔いしれた" : "影響をうけなかった");
 		}
 		break;
 
@@ -2251,7 +2990,10 @@
 		break;
 	}
 	if (not_affected) {
+/*JP
 	    You("seem unaffected by it.");
+*/
+	    You("影響を受けないようだ．");
 	    ugolemeffects((int)mattk->adtyp, tmp);
 	}
     }
@@ -2266,14 +3008,24 @@
 	register struct monst *mtmp;
 	register struct attack  *mattk;
 {
+#if 1 /*JP*/
+	static char jbuf[BUFSZ];
+#endif
 	switch(mattk->adtyp) {
 	    case AD_STON:
 		if (mtmp->mcan || !mtmp->mcansee) {
 		    if (!canseemon(mtmp)) break;	/* silently */
+#if 0 /*JP:T*/
 		    pline("%s %s.", Monnam(mtmp),
 			  (mtmp->data == &mons[PM_MEDUSA] && mtmp->mcan) ?
 				"doesn't look all that ugly" :
 				"gazes ineffectually");
+#else
+		    pline("%sは%s．", Monnam(mtmp),
+			  (mtmp->data == &mons[PM_MEDUSA] && mtmp->mcan) ?
+				"それほど醜くないことに気がついた" :
+				"無意味ににらんだ");
+#endif
 		    break;
 		}
 		if (Reflecting && couldsee(mtmp->mx, mtmp->my) &&
@@ -2282,20 +3034,34 @@
 		    boolean useeit = canseemon(mtmp);
 
 		    if (useeit)
+/*JP
 			(void) ureflects("%s gaze is reflected by your %s.",
+*/
+		    	(void) ureflects("%sのにらみは%sで反射された．",
 					 s_suffix(Monnam(mtmp)));
 		    if (mon_reflects(mtmp, !useeit ? (char *)0 :
+/*JP
 				     "The gaze is reflected away by %s %s!"))
+*/
+		    			"にらみは%sの%sによって反射された！"))
 			break;
 		    if (!m_canseeu(mtmp)) { /* probably you're invisible */
 			if (useeit)
+#if 0 /*JP:T*/
 			    pline(
 		      "%s doesn't seem to notice that %s gaze was reflected.",
 				  Monnam(mtmp), mhis(mtmp));
+#else
+			    pline("睨みが反射していることに%sは気付いていないようだ．",
+				Monnam(mtmp));
+#endif
 			break;
 		    }
 		    if (useeit)
+/*JP
 			pline("%s is turned to stone!", Monnam(mtmp));
+*/
+			pline("%sは石になった！", Monnam(mtmp));
 		    stoned = TRUE;
 		    killed(mtmp);
 
@@ -2304,13 +3070,24 @@
 		}
 		if (canseemon(mtmp) && couldsee(mtmp->mx, mtmp->my) &&
 		    !Stone_resistance) {
+/*JP
 		    You("meet %s gaze.", s_suffix(mon_nam(mtmp)));
+*/
+		    You("%sににらまれた．", s_suffix(mon_nam(mtmp)));
 		    stop_occupation();
 		    if(poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))
 			break;
+/*JP
 		    You("turn to stone...");
+*/
+		    You("石になった．．．");
 		    killer_format = KILLED_BY;
+#if 0 /*JP*/
 		    killer = mtmp->data->mname;
+#else
+		    Sprintf(jbuf, "%sのにらみで", jtrns_mon(mons[PM_MEDUSA].mname));
+		    killer = jbuf;
+#endif
 		    done(STONING);
 		}
 		break;
@@ -2322,10 +3099,16 @@
 
 		    mtmp->mspec_used = mtmp->mspec_used + (conf + rn2(6));
 		    if(!Confusion)
+/*JP
 			pline("%s gaze confuses you!",
+*/
+			pline("%sのにらみであなたは混乱した！",
 			                  s_suffix(Monnam(mtmp)));
 		    else
+/*JP
 			You("are getting more and more confused.");
+*/
+			You("ますます混乱した．");
 		    make_confused(HConfusion + conf, FALSE);
 		    stop_occupation();
 		}
@@ -2337,7 +3120,10 @@
 		    int stun = d(2,6);
 
 		    mtmp->mspec_used = mtmp->mspec_used + (stun + rn2(6));
+/*JP
 		    pline("%s stares piercingly at you!", Monnam(mtmp));
+*/
+		    pline("%sは冷いまなざしをあなたに向けた！", Monnam(mtmp));
 		    make_stunned(HStun + stun, TRUE);
 		    stop_occupation();
 		}
@@ -2347,7 +3133,10 @@
 			&& distu(mtmp->mx,mtmp->my) <= BOLT_LIM*BOLT_LIM) {
 		    int blnd = d((int)mattk->damn, (int)mattk->damd);
 
+/*JP
 		    You("are blinded by %s radiance!",
+*/
+		    You("%sの光で目が見えなくなった！",
 			              s_suffix(mon_nam(mtmp)));
 		    make_blinded((long)blnd,FALSE);
 		    stop_occupation();
@@ -2364,10 +3153,16 @@
 			mtmp->mcansee && !mtmp->mspec_used && rn2(5)) {
 		    int dmg = d(2,6);
 
+/*JP
 		    pline("%s attacks you with a fiery gaze!", Monnam(mtmp));
+*/
+		    pline("%sは炎のにらみ攻撃をしてきた", Monnam(mtmp));
 		    stop_occupation();
 		    if (Fire_resistance) {
+/*JP
 			pline_The("fire doesn't feel hot!");
+*/
+			pline("火はぜんぜん熱くない！");
 			dmg = 0;
 		    }
 		    burn_away_slime();
@@ -2388,7 +3183,10 @@
 		   multi >= 0 && !rn2(5) && !Sleep_resistance) {
 
 		    fall_asleep(-rnd(10), TRUE);
+/*JP
 		    pline("%s gaze makes you very sleepy...",
+*/
+		    pline("%sのにらみであなたは眠くなった．．．",
 			  s_suffix(Monnam(mtmp)));
 		}
 		break;
@@ -2406,71 +3204,148 @@
 		if(!mtmp->mcan && canseemon(mtmp) &&
 				mtmp->mcansee && !mtmp->mspec_used && rn2(3)) {
 		    if (Displaced && rn2(3)) {
+#if 0 /*JP*/
 			if (!Blind) pline("%s gazes at your displaced image!",Monnam(mtmp));
+#else
+			if (!Blind) pline("%sはあなたの幻影を睨みつけた！",Monnam(mtmp));
+#endif
 			    break;
 		    }
 		    if ((Invisible && rn2(3)) || rn2(4)) {
+#if 0 /*JP*/
 			if (!Blind) pline("%s gazes around, but misses you!",Monnam(mtmp));
+#else
+			if (!Blind) pline("%sはあなたのいるあたりを睨みつけたがはずれた！",Monnam(mtmp));
+#endif
 			break;
 		    }
+#if 0 /*JP*/
 			if (!Blind) pline("%s gazes directly at you!",Monnam(mtmp));
 		    if (!Blind) pline("%s gazes directly at you!",Monnam(mtmp));
+#else
+		    if (!Blind) pline("%sはあなたのいる方向を睨みつけた！",Monnam(mtmp));
+#endif
 		    if(Reflecting && m_canseeu(mtmp) && !mtmp->mcan) {
 			if(!Blind) {
+#if 0 /*JP*/
 		    	    (void) ureflects("%s gaze is reflected by your %s.",
 		    			s_suffix(Monnam(mtmp)));
+#else
+		    	    (void) ureflects("%sの睨みはあなたの%sによって反射した．",
+		    			s_suffix(Monnam(mtmp)));
+#endif
+#if 0 /*JP*/
 		    	    if (mon_reflects(mtmp,
 		    			"The gaze is reflected away by %s %s!"))
+#else
+		    	    if (mon_reflects(mtmp,
+		    			"睨みは%sの%sいよって反射し返された！"))
+#endif
 				break;
 			}
 			if (sleep_monst(mtmp, rnd(10), -1) && !Blind)
+#if 0 /*JP*/
 			    pline("%s is put to sleep!", Monnam(mtmp));
+#else
+			    pline("%sは突然眠りにおちた！", Monnam(mtmp));
+#endif
 			break;
 		    } else if (Sleep_resistance) {
+#if 0 /*JP*/
 			pline("You yawn.");
+#else
+			pline("あなたはあくびした．");
+#endif
 		    } else {
 			nomul(-rnd(10));
 			u.usleep = 1;
+#if 0 /*JP*/
 			nomovemsg = "You wake up.";
 			if (Blind)  You("are put to sleep!");
 			else You("are put to sleep by %s!",mon_nam(mtmp));
+#else
+			nomovemsg = "目を覚ました．";
+			if (Blind)  You("突然眠りにおちた！");
+			else You("%sによって突然眠り込んでしまった！",mon_nam(mtmp));
+#endif
 		    }
 		}
 		break;
 	    case AD_DETH:
 		if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee && !mtmp->mspec_used && rn2(4)) {
 		    if (Displaced && rn2(3)) {
+#if 0 /*JP*/
 			if (!Blind) pline("%s gazes at your displaced image!",Monnam(mtmp));
+#else
+			if (!Blind) pline("%sはあなたの幻影を睨みつけた！",Monnam(mtmp));
+#endif
 			    break;
 		    }
 		    if ((Invisible && rn2(3)) || rn2(4)) {
+#if 0 /*JP*/
 			if (!Blind) pline("%s gazes around, but misses you!",Monnam(mtmp));
+#else
+			if (!Blind) pline("%sはあなたのいるあたりを睨みつけたがはずれた！",Monnam(mtmp));
+#endif
 			break;
 		    }
+#if 0 /*JP*/
 		    if (!Blind) pline("%s gazes directly at you!",Monnam(mtmp));
+#else
+		    if (!Blind) pline("%sはあなたのいる方向を睨みつけた！",Monnam(mtmp));
+#endif
 		    if(Reflecting && m_canseeu(mtmp) && !mtmp->mcan) {
 			if(!Blind) {
+#if 0 /*JP*/
 		    	    (void) ureflects("%s gaze is reflected by your %s.",
 		    			s_suffix(Monnam(mtmp)));
+#else
+		    	    (void) ureflects("%sの睨みはあなたの%sによって反射した．",
+		    			s_suffix(Monnam(mtmp)));
+#endif
+#if 0 /*JP*/
 		    	    if (mon_reflects(mtmp,
 		    			"The gaze is reflected away by %s %s!"))
+#else
+		    	    if (mon_reflects(mtmp,
+		    			"睨みは%sの%sいよって反射し返された！"))
+#endif
 				break;
+#if 0 /*JP*/
 			    pline("%s is killed by it's own gaze of death!",
 							Monnam(mtmp));
+#else
+			    pline("%sは自らの死の睨みによって死んだ！",
+							Monnam(mtmp));
+#endif
 			}
 			killed(mtmp);
 			if (mtmp->mhp > 0) break;
 			return 2;
 		    } else if (is_undead(youmonst.data)) {
 			/* Still does normal damage */
+#if 0 /*JP*/
 			pline("Was that the gaze of death?");
+#else
+			pline("死の睨みってなんだい？");
+#endif
 			break;
 		    } else if (Antimagic) {
+#if 0 /*JP*/
 			You("shudder momentarily...");
+#else
+			You("一瞬震えた．．．");
+#endif
 		    } else {
+#if 0 /*JP*/
 			You("die...");
 			killer_format = KILLED_BY_AN;
 			killer = "gaze of death";
+#else
+			You("死んだ．．．");
+			killer_format = KILLED_BY;
+			killer = "死の睨みで";
+#endif
 			done(DIED);
 		    }
 		}
@@ -2478,30 +3353,53 @@
 	    case AD_PHYS:
 	        if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee && !mtmp->mspec_used && rn2(3)) {
 	                if (Displaced && rn2(3)) {
+#if 0 /*JP*/
 	                        if (!Blind) pline("%s gazes at your displaced image!",Monnam(mtmp));
+#else
+				if (!Blind) pline("%sはあなたの幻影を睨みつけた！",Monnam(mtmp));
+#endif
 	                        break;
 	                }
 	                if ((Invisible && rn2(3)) || rn2(4)) {
+#if 0 /*JP*/
 	                        if (!Blind) pline("%s gazes around, but misses you!",Monnam(mtmp));
+#else
+				if (!Blind) pline("%sはあなたのいるあたりを睨みつけたがはずれた！",Monnam(mtmp));
+#endif
 	                        break;
 	                }
+#if 0 /*JP*/
 	                if (!Blind) pline("%s gazes directly at you!",Monnam(mtmp));
 	                pline("You are wracked with pains!");
+#else
+		        if (!Blind) pline("%sはあなたのいる方向を睨みつけた！",Monnam(mtmp));
+	                pline("あなたは激痛を伴う傷をつけられた！");
+#endif
 	                mdamageu(mtmp, d(3,8));
 	        }
 	        break;
 	    case AD_DRST:
 	        if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee && !mtmp->mspec_used && rn2(5)) {
+#if 0 /*JP*/
 	                pline("%s stares into your eyes...", Monnam(mtmp));
 	                poisoned("The gaze", A_STR, mtmp->data->mname, 30);
+#else
+	                pline("%sはあなたの目を凝視した．．．", Monnam(mtmp));
+	                poisoned("睨み", A_STR, jtrns_mon(mtmp->data->mname), 30);
+#endif
 	        }
 	        break;
 	    case AD_PLYS:
 	        if(!mtmp->mcan && multi >= 0 && canseemon(mtmp) && mtmp->mcansee && !mtmp->mspec_used && rn2(5)) {
+#if 0 /*JP*/
 	                pline("%s stares at you!", Monnam(mtmp));
 	                if (Free_action) You("stiffen momentarily.");
+#else
+	                pline("%sはあなたを凝視した！", Monnam(mtmp));
+	                if (Free_action) You("一瞬硬直した．");
+#endif
 	                else {
-	                        You("are frozen by %s!", mon_nam(mtmp));
+	                        You("%sによって硬直した！", mon_nam(mtmp));
 				nomovemsg = 0;
 	                        nomul(-rnd(4));
 	                        exercise(A_DEX, FALSE);
@@ -2510,9 +3408,17 @@
 	        break;
 	    case AD_TLPT:
 	        if(!mtmp->mcan && canseemon(mtmp) && mtmp->mcansee && !mtmp->mspec_used && rn2(5)) {
+#if 0 /*JP*/
 	                pline("%s stares blinkingly at you!", Monnam(mtmp));
+#else
+	                pline("%sは瞬きしながらあなたを凝視した！", Monnam(mtmp));
+#endif
 	                if(flags.verbose)
+#if 0 /*JP*/
 	                        Your("position suddenly seems very uncertain!");
+#else
+				pline("自分のいる位置が突然不明確になった！");
+#endif
 	                tele();
 		}
 		break;
@@ -2533,7 +3439,11 @@
 	 
 	if (Invulnerable) n=0;
 	if (n == 0) {
+#if 0 /*JP*/
 		pline("You are unharmed.");
+#else
+		pline("あなたは傷つかない．");
+#endif
 		return;
 	}
 
@@ -2589,15 +3499,26 @@
 	if ((is_acid ? is_corrodeable(obj) : is_rustprone(obj)) &&
 	    (is_acid ? obj->oeroded2 : obj->oeroded) < MAX_ERODE) {
 		if (obj->greased || obj->oerodeproof || (obj->blessed && rn2(3))) {
+#if 0 /*JP*/
 		        if (vis) pline("Somehow, %s weapon is not affected.",
+#else
+		        if (vis) pline("どういうわけか，%sの武器は影響をうけない．",
+#endif
 						s_suffix(mon_nam(mon)));
 		    if (obj->greased && !rn2(2)) obj->greased = 0;
 		} else {
+#if 0 /*JP*/
 		        if (vis) pline("%s %s%s!",
 			        s_suffix(Monnam(mon)),
 				aobjnam(obj, (is_acid ? "corrode" : "rust")),
 			        (is_acid ? obj->oeroded2 : obj->oeroded)
 				    ? " further" : "");
+#else
+			pline("%sの%sは%s%s！",
+			        Monnam(mon), xname(obj),
+			        obj->oeroded ? "さらに" : "",
+				aobjnam(obj, (is_acid ? "腐食した" : "錆びた")));
+#endif
 		    if (is_acid) obj->oeroded2++;
 		    else obj->oeroded++;
 		}
@@ -2672,33 +3593,59 @@
 	char qbuf[QBUFSZ];
 
 	if (mon->mcan || mon->mspec_used) {
+#if 0 /*JP*/
 		pline("%s acts as though %s has got a %sheadache.",
 		      Monnam(mon), mhe(mon),
 		      mon->mcan ? "severe " : "");
+#else
+	  pline("%sは%s頭が痛いふりをした．",
+		      Monnam(mon),
+		      mon->mcan ? "ひどく" : "");
+#endif
 		return 0;
 	}
 
 	if (unconscious()) {
+/*JP
 		pline("%s seems dismayed at your lack of response.",
+*/
+		pline("%sは返事がないので気が萎えたようだ．",
 		      Monnam(mon));
 		return 0;
 	}
 
+/*JP
 	if (Blind) pline("It caresses you...");
+*/
+	if (Blind) pline("何者かがあなたを抱きしめてる．．．");
+/*JP
 	else You_feel("very attracted to %s.", mon_nam(mon));
+*/
+	else You("%sに引きつけられてるような気がした．", mon_nam(mon));
 
 	for(ring = invent; ring; ring = nring) {
 	    nring = ring->nobj;
 	    if (ring->otyp != RIN_ADORNMENT) continue;
 	    if (fem) {
 		if (rn2(20) < ACURR(A_CHA)) {
+#if 0 /*JP*/
 		    Sprintf(qbuf, "\"That %s looks pretty.  May I have it?\"",
 			safe_qbuf("",sizeof("\"That  looks pretty.  May I have it?\""),
 			xname(ring), simple_typename(ring->otyp), "ring"));
+#else
+		    Sprintf(qbuf, "「なんて素敵な%sでしょう．わたしにくれません？」",
+			safe_qbuf("",sizeof("「なんて素敵なでしょう．わたしにくれません？」"),
+			xname(ring), simple_typename(ring->otyp), "指輪"));
+#endif
 		    makeknown(RIN_ADORNMENT);
 		    if (yn(qbuf) == 'n') continue;
+#if 0 /*JP*/
 		} else pline("%s decides she'd like your %s, and takes it.",
 			Blind ? "She" : Monnam(mon), xname(ring));
+#else
+		} else pline("%sは%sがとても気にいって，それを取りあげた．",
+			Blind ? "彼女" : Monnam(mon), xname(ring));
+#endif
 		makeknown(RIN_ADORNMENT);
 		if (ring==uleft || ring==uright) Ring_gone(ring);
 		if (ring==uwep) setuwep((struct obj *)0, FALSE);
@@ -2714,36 +3661,69 @@
 			break;
 		if (ring==uleft || ring==uright) continue;
 		if (rn2(20) < ACURR(A_CHA)) {
+#if 0 /*JP*/
 		    Sprintf(qbuf,"\"That %s looks pretty.  Would you wear it for me?\"",
 			safe_qbuf("",
 			    sizeof("\"That  looks pretty.  Would you wear it for me?\""),
 			    xname(ring), simple_typename(ring->otyp), "ring"));
+#else
+		    Sprintf(qbuf,"「おやなんてすばらしい%sだ．私のために指にはめてくれないかい？」",
+			safe_qbuf("",
+			    sizeof("「おやなんてすばらしいだ．私のために指にはめてくれないかい？」"),
+			    xname(ring), simple_typename(ring->otyp), "指輪"));
+#endif
 		    makeknown(RIN_ADORNMENT);
 		    if (yn(qbuf) == 'n') continue;
 		} else {
+#if 0 /*JP*/
 		    pline("%s decides you'd look prettier wearing your %s,",
 			Blind ? "He" : Monnam(mon), xname(ring));
 		    pline("and puts it on your finger.");
+#else
+		    pline("%sは%sをつけたあなたがより魅力的だと考え，",
+			Blind ? "彼" : Monnam(mon), xname(ring));
+		    pline("あなたの指にそれをはめた．");
+#endif
 		}
 		makeknown(RIN_ADORNMENT);
 		if (!uright) {
+#if 0 /*JP*/
 		    pline("%s puts %s on your right %s.",
 			Blind ? "He" : Monnam(mon), the(xname(ring)), body_part(HAND));
+#else
+		    pline("%sは%sをあなたの右%sにはめた．",
+			Blind ? "彼" : Monnam(mon), the(xname(ring)), body_part(HAND));
+#endif
 		    setworn(ring, RIGHT_RING);
 		} else if (!uleft) {
+#if 0 /*JP*/
 		    pline("%s puts %s on your left %s.",
 			Blind ? "He" : Monnam(mon), the(xname(ring)), body_part(HAND));
+#else
+		    pline("%sは%sをあなたの左%sにはめた．",
+			Blind ? "彼" : Monnam(mon), the(xname(ring)), body_part(HAND));
+#endif
 		    setworn(ring, LEFT_RING);
 		} else if (uright && uright->otyp != RIN_ADORNMENT) {
 		    Strcpy(buf, xname(uright));
+#if 0 /*JP*/
 		    pline("%s replaces your %s with your %s.",
 			Blind ? "He" : Monnam(mon), buf, xname(ring));
+#else
+		    pline("%sは%sを%sにとりかえた．",
+			Blind ? "彼" : Monnam(mon), buf, xname(ring));
+#endif
 		    Ring_gone(uright);
 		    setworn(ring, RIGHT_RING);
 		} else if (uleft && uleft->otyp != RIN_ADORNMENT) {
 		    Strcpy(buf, xname(uleft));
+#if 0 /*JP*/
 		    pline("%s replaces your %s with your %s.",
 			Blind ? "He" : Monnam(mon), buf, xname(ring));
+#else
+		    pline("%sは%sを%sにとりかえた．",
+			Blind ? "彼" : Monnam(mon), buf, xname(ring));
+#endif
 		    Ring_gone(uleft);
 		    setworn(ring, LEFT_RING);
 		} else impossible("ring replacement");
@@ -2757,12 +3737,23 @@
 								&& !uarmu
 #endif
 									)
+#if 0 /*JP*/
 		pline("%s murmurs sweet nothings into your ear.",
 			Blind ? (fem ? "She" : "He") : Monnam(mon));
+#else
+		pline("%sはあなたの耳もとで甘いささやきをつぶやいた．",
+			Blind ? (fem ? "彼女" : "彼") : Monnam(mon));
+#endif
 	else
+#if 0 /*JP*/
 		pline("%s murmurs in your ear, while helping you undress.",
 			Blind ? (fem ? "She" : "He") : Monnam(mon));
+#else
+		pline("%sは耳もとであなたの服を脱がせながらささやいた",
+			Blind ? (fem ? "彼女" : "彼") : Monnam(mon));
+#endif
 	mayberem(uarmc, cloak_simple_name(uarmc));
+#if 0 /*JP*/
 	if(!uarmc)
 		mayberem(uarm, "suit");
 	mayberem(uarmf, "boots");
@@ -2782,10 +3773,25 @@
 	if(!uarmc && !uarm)
 		mayberem(uarmu, "shirt");
 #endif
+#else /*JP*/
+	if(!uarmc) mayberem(uarm, "スーツ");
+	mayberem(uarmf, "ブーツ");
+	if(!uwep || !welded(uwep)) mayberem(uarmg, "小手");
+	if (uarms) mayberem(uarms, "盾");
+	mayberem(uarmh, "兜");
+#ifdef TOURIST
+	if(!uarmc && !uarm) mayberem(uarmu, "シャツ");
+#endif
+#endif /*JP*/
 
 	if (uarm || uarmc) {
+#if 0 /*JP*/
 		verbalize("You're such a %s; I wish...",
 				flags.female ? "sweet lady" : "nice guy");
+#else
+		verbalize( flags.female ? "チャーミングだ．．．といいのに"
+			: "すてき．．．だといいのに");
+#endif
 		if (!tele_restrict(mon)) (void) rloc(mon, FALSE);
 		return 1;
 	}
@@ -2793,74 +3799,135 @@
 		adjalign(1);
 
 	/* by this point you have discovered mon's identity, blind or not... */
+#if 0 /*JP*/
 	pline("Time stands still while you and %s lie in each other's arms...",
+#else
+	pline("あなたは%sと抱き合った，時が止まったように感じた．．．",
+#endif
 		noit_mon_nam(mon));
 	/* Well,  IT happened ... */
 	u.uconduct.celibacy++;
 	
 	if (rn2(35) > ACURR(A_CHA) + ACURR(A_INT)) {
 		/* Don't bother with mspec_used here... it didn't get tired! */
+#if 0 /*JP*/
 		pline("%s seems to have enjoyed it more than you...",
+#else
+		pline("%sはあなたよりずっと楽しんだようだ．．．",
+#endif
 			noit_Monnam(mon));
 		switch (rn2(5)) {
+#if 0 /*JP*/
 			case 0: You_feel("drained of energy.");
+#else
+			case 0: You("体力が消耗したような気がした．");
+#endif
 				u.uen = 0;
 				u.uenmax -= rnd(Half_physical_damage ? 5 : 10);
 			        exercise(A_CON, FALSE);
 				if (u.uenmax < 0) u.uenmax = 0;
 				break;
+#if 0 /*JP*/
 			case 1: You("are down in the dumps.");
+#else
+			case 1: You("意気消沈した．");
+#endif
 				(void) adjattrib(A_CON, -1, TRUE);
 			        exercise(A_CON, FALSE);
 				flags.botl = 1;
 				break;
+#if 0 /*JP*/
 			case 2: Your("senses are dulled.");
+#else
+			case 2: Your("五感は鈍った．");
+#endif
 				(void) adjattrib(A_WIS, -1, TRUE);
 			        exercise(A_WIS, FALSE);
 				flags.botl = 1;
 				break;
 			case 3:
 				if (!Drain_resistance) {
+#if 0 /*JP*/
 				    You_feel("out of shape.");
 				    losexp("overexertion", FALSE);
+#else
+				    You("くたびれた．");
+				    losexp("過労で", FALSE);
+#endif
 				} else {
+#if 0 /*JP*/
 				    You("have a curious feeling...");
+#else
+				    You("変な感じがした．．．");
+#endif
 				}
 				break;
 			case 4: {
 				int tmp;
+#if 0 /*JP*/
 				You_feel("exhausted.");
+#else
+				You("疲れを感じた．");
+#endif
 			        exercise(A_STR, FALSE);
 				tmp = rn1(10, 6);
 				if(Half_physical_damage) tmp = (tmp+1) / 2;
+#if 0 /*JP*/
 				losehp(tmp, "exhaustion", KILLED_BY);
+#else
+				losehp(tmp, "精力の使いすぎで", KILLED_BY);
+#endif
 				break;
 			}
 		}
 	} else {
 		mon->mspec_used = rnd(100); /* monster is worn out */
+#if 0 /*JP*/
 		You("seem to have enjoyed it more than %s...",
+#else
+		You("%sよりも楽しんだ．．．",
+#endif
 		    noit_mon_nam(mon));
 		switch (rn2(5)) {
+#if 0 /*JP*/
 		case 0: You_feel("raised to your full potential.");
+#else
+		case 0: You("絶頂に達した！");
+#endif
 			exercise(A_CON, TRUE);
 			u.uen = (u.uenmax += rnd(5));
 			break;
+#if 0 /*JP*/
 		case 1: You_feel("good enough to do it again.");
+#else
+		case 1: You("まだできると思った．");
+#endif
 			(void) adjattrib(A_CON, 1, TRUE);
 			exercise(A_CON, TRUE);
 			flags.botl = 1;
 			break;
+#if 0 /*JP*/
 		case 2: You("will always remember %s...", noit_mon_nam(mon));
+#else
+		case 2: You("いつまでも%sを覚えてるだろう．．．", mon_nam(mon));
+#endif
 			(void) adjattrib(A_WIS, 1, TRUE);
 			exercise(A_WIS, TRUE);
 			flags.botl = 1;
 			break;
+#if 0 /*JP*/
 		case 3: pline("That was a very educational experience.");
+#else
+		case 3: pline("とても貴重な経験だった．");
+#endif
 			pluslvl(FALSE);
 			exercise(A_WIS, TRUE);
 			break;
+#if 0 /*JP*/
 		case 4: You_feel("restored to health!");
+#else
+		case 4: You("とても健康になった！");
+#endif
 			u.uhp = u.uhpmax;
 			if (Upolyd) u.mh = u.mhmax;
 			exercise(A_STR, TRUE);
@@ -2871,12 +3938,22 @@
 
 	if (mon->mtame) /* don't charge */ ;
 	else if (rn2(20) < ACURR(A_CHA)) {
+#if 0 /*JP*/
 		pline("%s demands that you pay %s, but you refuse...",
 			noit_Monnam(mon),
 			Blind ? (fem ? "her" : "him") : mhim(mon));
+#else
+		pline("%sはあなたに金を払うよう要求した，しかしあなたは拒んだ．．．",
+			Monnam(mon));
+#endif
 	} else if (u.umonnum == PM_LEPRECHAUN)
+#if 0 /*JP*/
 		pline("%s tries to take your money, but fails...",
 				noit_Monnam(mon));
+#else
+		pline("%sは金を取ろうとしたが，失敗した．．．",
+				noit_Monnam(mon));
+#endif
 	else {
 #ifndef GOLDOBJ
 		long cost;
@@ -2890,9 +3967,16 @@
 			if (!cost) cost = 1L;
 		}
 		if (cost > u.ugold) cost = u.ugold;
+/*JP
 		if (!cost) verbalize("It's on the house!");
+*/
+		if (!cost) verbalize("これはおごり%s！",fem ? "よ" : "さ");
 		else {
+#if 0 /*JP*/
 		    pline("%s takes %ld %s for services rendered!",
+#else
+		    pline("%sはサービス料として%ld%s奪い取った！",
+#endif
 			    noit_Monnam(mon), cost, currency(cost));
 		    u.ugold -= cost;
 		    mon->mgold += cost;
@@ -2911,9 +3995,16 @@
 			if (!cost) cost = 1L;
 		}
 		if (cost > umoney) cost = umoney;
+/*JP
 		if (!cost) verbalize("It's on the house!");
+*/
+		if (!cost) verbalize("これはおごり%s！", fem ? "よ" : "さ");
 		else { 
+#if 0 /*JP*/
 		    pline("%s takes %ld %s for services rendered!",
+#else
+		    pline("%sはサービス料として%ld%s奪い取った！",
+#endif
 			    noit_Monnam(mon), cost, currency(cost));
                     money2mon(mon, cost);
 		    flags.botl = 1;
@@ -2935,15 +4026,28 @@
 	if (!obj || !obj->owornmask) return;
 
 	if (rn2(20) < ACURR(A_CHA)) {
+#if 0 /*JP*/
 		Sprintf(qbuf,"\"Shall I remove your %s, %s?\"",
 			str,
 			(!rn2(2) ? "lover" : !rn2(2) ? "dear" : "sweetheart"));
+#else
+		Sprintf(qbuf,"「%sを取っていい，%s？」",
+			str,
+			(!rn2(2) ? "ねぇ" : flags.female ? "ハニー" : "ダーリン" ));
+#endif
 		if (yn(qbuf) == 'n') return;
 	} else {
 		char hairbuf[BUFSZ];
 
+#if 0 /*JP*/
 		Sprintf(hairbuf, "let me run my fingers through your %s",
 			body_part(HAIR));
+#else
+		Sprintf(hairbuf,
+			flags.female ? "なんて綺麗な%sなんだ" : "兜を取ったらなかなかイカスじゃない",
+			body_part(HAIR));
+#endif
+#if 0 /*JP*/
 		verbalize("Take off your %s; %s.", str,
 			(obj == uarm)  ? "let's get a little closer" :
 			(obj == uarmc || obj == uarms) ? "it's in the way" :
@@ -2954,6 +4058,18 @@
 #endif
 			/* obj == uarmh */
 			hairbuf);
+#else /*JP*/
+		verbalize("%sを脱いで．．．%s．", str,
+			(obj == uarm)  ? "ちょっと寄りそって" :
+			(obj == uarmc || obj == uarms) ? "そうそう" :
+			(obj == uarmf) ?(flags.female ? "綺麗な足だね" : "うふっ，たくましい足ね") :
+			(obj == uarmg) ?(flags.female ? "なんて素敵な手だ" : "たくましい腕ね") :
+#ifdef TOURIST
+			(obj == uarmu) ?(flags.female ? "きれいな体だ" : "たくましいのね") :
+#endif
+			/* obj == uarmh */
+			hairbuf);
+#endif /*JP*/
 	}
 	remove_worn_item(obj, TRUE);
 }
@@ -2988,9 +4104,15 @@
 	switch(olduasmon->mattk[i].adtyp) {
 	    case AD_ACID:
 		if (!rn2(2)) {
+/*JP
 		    pline("%s is splashed by your acid!", Monnam(mtmp));
+*/
+		    pline("%sはあなたの酸をくらった！", Monnam(mtmp));
 		    if (resists_acid(mtmp)) {
+/*JP
 			pline("%s is not affected.", Monnam(mtmp));
+*/
+			pline("%sは影響をうけない．", Monnam(mtmp));
 			tmp = 0;
 		    }
 		} else tmp = 0;
@@ -3012,7 +4134,10 @@
 			mon_to_stone(mtmp);
 			return (1);
 		    }
+/*JP
 		    pline("%s turns to stone!", Monnam(mtmp));
+*/
+		    pline("%sは石になった！", Monnam(mtmp));
 		    stoned = 1;
 		    xkilled(mtmp, 0);
 		    if (mtmp->mhp > 0) return 1;
@@ -3035,7 +4160,10 @@
 	if (rn2(3)) switch(youmonst.data->mattk[i].adtyp) {
 	    case AD_PHYS:
 	    	if (youmonst.data->mattk[i].aatyp == AT_BOOM) {
+/*JP
 	    	    You("explode!");
+*/
+	    	    pline("あなたは爆発した！");
 	    	    /* KMH, balance patch -- this is okay with unchanging */
 	    	    rehumanize();
 	    	    goto assess_dmg;
@@ -3048,20 +4176,36 @@
 		    if (mtmp->mcansee && haseyes(mtmp->data) && rn2(3) &&
 				(perceives(mtmp->data) || !Invis)) {
 			if (Blind)
+#if 0 /*JP*/
 			    pline("As a blind %s, you cannot defend yourself.",
 							youmonst.data->mname);
+#else
+			    pline("%sは目が見えないので，防御できない．",
+							jtrns_mon_gen(youmonst.data->mname, flags.female));
+#endif
 		        else {
+#if 0 /*JP*/
 			    if (mon_reflects(mtmp,
 					    "Your gaze is reflected by %s %s."))
+#else
+			    if (mon_reflects(mtmp,
+					     "あなたのにらみは%sの%sで反射した．"))
+#endif
 				return 1;
+/*JP
 			    pline("%s is frozen by your gaze!", Monnam(mtmp));
+*/
+			    pline("%sはあなたのにらみで動けなくなった！", Monnam(mtmp));
 			    mtmp->mcanmove = 0;
 			    mtmp->mfrozen = tmp;
 			    return 3;
 			}
 		    }
 		} else { /* gelatinous cube */
+/*JP
 		    pline("%s is frozen by you.", Monnam(mtmp));
+*/
+		    pline("%sは動けない．", Monnam(mtmp));
 		    mtmp->mcanmove = 0;
 		    mtmp->mfrozen = tmp;
 		    return 3;
@@ -3070,12 +4214,18 @@
 	    case AD_COLD: /* Brown mold or blue jelly */
 		if (resists_cold(mtmp)) {
 		    shieldeff(mtmp->mx, mtmp->my);
+/*JP
 		    pline("%s is mildly chilly.", Monnam(mtmp));
+*/
+		    pline("%sは冷えた．", Monnam(mtmp));
 		    golemeffects(mtmp, AD_COLD, tmp);
 		    tmp = 0;
 		    break;
 		}
+/*JP
 		pline("%s is suddenly very cold!", Monnam(mtmp));
+*/
+		pline("%sは突然凍りづけになった！", Monnam(mtmp));
 		u.mh += tmp / 2;
 		if (u.mhmax < u.mh) u.mhmax = u.mh;
 		if (u.mhmax > ((youmonst.data->mlevel+1) * 8))
@@ -3084,30 +4234,50 @@
 	    case AD_STUN: /* Yellow mold */
 		if (!mtmp->mstun) {
 		    mtmp->mstun = 1;
+#if 0 /*JP*/
 		    pline("%s %s.", Monnam(mtmp),
 			  makeplural(stagger(mtmp->data, "stagger")));
+#else
+		    pline("%sはくらくらした．", Monnam(mtmp));
+#endif
 		}
 		tmp = 0;
 		break;
 	    case AD_FIRE: /* Red mold */
 		if (resists_fire(mtmp)) {
 		    shieldeff(mtmp->mx, mtmp->my);
+#if 0 /*JP*/
 		    pline("%s is mildly warm.", Monnam(mtmp));
+#else
+		    pline("%sは暖かくなった．", Monnam(mtmp));
+#endif
 		    golemeffects(mtmp, AD_FIRE, tmp);
 		    tmp = 0;
 		    break;
 		}
+#if 0 /*JP*/
 		pline("%s is suddenly very hot!", Monnam(mtmp));
+#else
+		pline("%sは突然熱くなった！", Monnam(mtmp));
+#endif
 		break;
 	    case AD_ELEC:
 		if (resists_elec(mtmp)) {
 		    shieldeff(mtmp->mx, mtmp->my);
+#if 0 /*JP*/
 		    pline("%s is slightly tingled.", Monnam(mtmp));
+#else
+		    pline("%sはちょっとピリピリした．", Monnam(mtmp));
+#endif
 		    golemeffects(mtmp, AD_ELEC, tmp);
 		    tmp = 0;
 		    break;
 		}
+#if 0 /*JP*/
 		pline("%s is jolted with your electricity!", Monnam(mtmp));
+#else
+		pline("%sは電気ショックをうけた！", Monnam(mtmp));
+#endif
 		break;
 	    default: tmp = 0;
 		break;
@@ -3116,7 +4286,10 @@
 
     assess_dmg:
 	if((mtmp->mhp -= tmp) <= 0) {
+/*JP
 		pline("%s dies!", Monnam(mtmp));
+*/
+		pline("%sは死んだ！", Monnam(mtmp));
 		xkilled(mtmp,0);
 		if (mtmp->mhp > 0) return 1;
 		return 2;
diff -aurN slashem-0.0.7E6F2/src/minion.c jslashem-0.0.7E6F2-J0.0.8/src/minion.c
--- slashem-0.0.7E6F2/src/minion.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/minion.c	2004-06-27 16:53:42.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "emin.h"
 #include "epri.h"
@@ -126,10 +134,19 @@
 	mon = makemon(&mons[mnum], u.ux, u.uy, NO_MM_FLAGS);
     if (mon) {
 	if (talk) {
+/*JP
 	    pline_The("voice of %s booms:", align_gname(alignment));
+*/
+	    pline("%sの声が響いた:", align_gname(alignment));
+/*JP
 	    verbalize("Thou shalt pay for thy indiscretion!");
+*/
+	    verbalize("汝，無分別なる行いの罰を受けるべし！");
 	    if (!Blind)
+/*JP
 		pline("%s appears before you.", Amonnam(mon));
+*/
+		pline("%sがあなたの前に現われた．", Amonnam(mon));
 	}
 	mon->mpeaceful = FALSE;
 	/* don't call set_malign(); player was naughty */
@@ -144,7 +161,10 @@
 	long cash, demand, offer;
 
 	if (uwep && uwep->oartifact == ART_EXCALIBUR) {
+/*JP
 	    pline("%s looks very angry.", Amonnam(mtmp));
+*/
+	    pline("%sはとても怒っているように見える．", Amonnam(mtmp));
 	    mtmp->mpeaceful = mtmp->mtame = 0;
 	    set_malign(mtmp);
 	    newsym(mtmp->mx, mtmp->my);
@@ -154,12 +174,20 @@
 	/* Slight advantage given. */
 	if (is_dprince(mtmp->data) && mtmp->minvis) {
 	    mtmp->minvis = mtmp->perminvis = 0;
+/*JP
 	    if (!Blind) pline("%s appears before you.", Amonnam(mtmp));
+*/
+	    if (!Blind) pline("%sが目の前に現われた．", Amonnam(mtmp));
 	    newsym(mtmp->mx,mtmp->my);
 	}
 	if (youmonst.data->mlet == S_DEMON) {	/* Won't blackmail their own. */
+#if 0 /*JP*/
 	    pline("%s says, \"Good hunting, %s.\"",
 		  Amonnam(mtmp), flags.female ? "Sister" : "Brother");
+#else
+	    pline("%sは言った「よう兄%s！」．そして消えた．",
+		  Amonnam(mtmp), flags.female ? "妹" : "弟");
+#endif
 	    if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
 	    return(1);
 	}
@@ -182,17 +210,30 @@
 	    if (mon_has_amulet(mtmp))
 		demand = cash + (long)rn1(1000,40);
 
+#if 0 /*JP*/
 	    pline("%s demands %ld %s for safe passage.",
+#else
+	    pline("%sは通行料として%ld%s要求した．",
+#endif
 		  Amonnam(mtmp), demand, currency(demand));
 
 	    if ((offer = bribe(mtmp)) >= demand) {
+/*JP
 		pline("%s vanishes, laughing about cowardly mortals.",
+*/
+		pline("臆病な定命のものを笑いながら，%sは消えた．",
 		      Amonnam(mtmp));
 	    } else if (offer > 0L && (long)rnd(40) > (demand - offer)) {
+/*JP
 		pline("%s scowls at you menacingly, then vanishes.",
+*/
+		    pline("%sはあなたを威嚇し，消えた．",
 		      Amonnam(mtmp));
 	    } else {
+/*JP
 		pline("%s gets angry...", Amonnam(mtmp));
+*/
+		    pline("%sは怒った．．．", Amonnam(mtmp));
 		mtmp->mpeaceful = 0;
 		set_malign(mtmp);
 		return 0;
@@ -285,33 +326,61 @@
 	long umoney = money_cnt(invent);
 #endif
 
+#if 0 /*JP*/
 	getlin("How much will you offer?", buf);
+#else
+	getlin("お金をいくら与える？", buf);
+#endif
 	if (sscanf(buf, "%ld", &offer) != 1) offer = 0L;
 
 	/*Michael Paddon -- fix for negative offer to monster*/
 	/*JAR880815 - */
 	if (offer < 0L) {
+#if 0 /*JP*/
 		You("try to shortchange %s, but fumble.",
+#else
+		You("%sをだまそうとしたが，失敗した．",
+#endif
 			mon_nam(mtmp));
 		return 0L;
 	} else if (offer == 0L) {
+#if 0 /*JP*/
 		You("refuse.");
+#else
+		You("拒んだ．");
+#endif
 		return 0L;
 #ifndef GOLDOBJ
 	} else if (offer >= u.ugold) {
+#if 0 /*JP*/
 		You("give %s all your gold.", mon_nam(mtmp));
+#else
+		You("%sにお金を全て与えた．", mon_nam(mtmp));
+#endif
 		offer = u.ugold;
 	} else {
+#if 0 /*JP*/
 		You("give %s %ld %s.", mon_nam(mtmp), offer, currency(offer));
+#else
+		You("%sに%ld%s与えた．", mon_nam(mtmp), offer, currency(offer));
+#endif
 	}
 	u.ugold -= offer;
 	mtmp->mgold += offer;
 #else
 	} else if (offer >= umoney) {
+#if 0 /*JP*/
 		You("give %s all your money.", mon_nam(mtmp));
+#else
+		You("%sにお金を全て与えた．", mon_nam(mtmp));
+#endif
 		offer = umoney;
 	} else {
+#if 0 /*JP*/
 		You("give %s %ld %s.", mon_nam(mtmp), offer, currency(offer));
+#else
+		You("%sに%ld%s与えた．", mon_nam(mtmp), offer, currency(offer));
+#endif
 	}
 	(void) money2mon(mtmp, offer);
 #endif
diff -aurN slashem-0.0.7E6F2/src/mklev.c jslashem-0.0.7E6F2-J0.0.8/src/mklev.c
--- slashem-0.0.7E6F2/src/mklev.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mklev.c	2004-06-27 16:53:44.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 /* #define DEBUG */	/* uncomment to enable code debugging */
 
@@ -468,7 +476,10 @@
 			(char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
 			(char *)0, (char *)0, (char *)0, (char *)0,
 			/* 14..16: trap door, teleport, level-teleport */
+/*JP
 			"Vlad was here", "ad aerarium", "ad aerarium",
+*/
+			"ヴラドはここにいる", "ad aerarium", "ad aerarium",
 			(char *)0, (char *)0, (char *)0, (char *)0, (char *)0,
 			(char *)0,
 };
@@ -1474,7 +1485,10 @@
 	} while (occupied(m.x, m.y) || bydoor(m.x, m.y));
 
 	/* Put a grave at m.x, m.y */
+/*JP
 	make_grave(m.x, m.y, dobell ? "Saved by the bell!" : (char *) 0);
+*/
+	make_grave(m.x, m.y, dobell ? "ベルに救われた！" : (char *) 0);
 
 	/* Possibly fill it with objects */
 	if (!rn2(3)) (void) mkgold(0L, m.x, m.y);
@@ -1511,8 +1525,14 @@
     xchar ymin = inv_pos.y, ymax = inv_pos.y;
     register xchar i;
 
+/*JP
     pline_The("floor shakes violently under you!");
+*/
+    pline("あなたの下の床が突然揺れた！");
+/*JP
     pline_The("walls around you begin to bend and crumble!");
+*/
+    pline("そしてまわりの壁がねじれ，砕けた！");
     display_nhwindow(WIN_MESSAGE, TRUE);
 
     mkinvpos(xmin, ymin, 0);		/* middle, before placing stairs */
@@ -1539,7 +1559,10 @@
 	delay_output();
     }
 
+/*JP
     You("are standing at the top of a stairwell leading down!");
+*/
+    You("下に続く吹き抜け階段の上に立っている！");
     mkstairs(u.ux, u.uy, 0, (struct mkroom *)0); /* down */
     newsym(u.ux, u.uy);
     vision_full_recalc = 1;	/* everything changed */
diff -aurN slashem-0.0.7E6F2/src/mkmaze.c jslashem-0.0.7E6F2-J0.0.8/src/mkmaze.c
--- slashem-0.0.7E6F2/src/mkmaze.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mkmaze.c	2004-06-27 18:13:24.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "sp_lev.h"
 #include "lev.h"	/* save & restore info */
@@ -1168,7 +1176,10 @@
 		u.dx = dx;
 		eff = TRUE;
 	}
+/*JP
 	if (eff) pline("Water turbulence affects your movements.");
+*/
+	if (eff) pline("水の流れがあなたの動きに影響を与えた．");
 }
 
 void
@@ -1235,25 +1246,47 @@
 	schar ltyp;
 
 	if (!isok(x,y))
+#if 0 /*JP*/
 		return "drink";		/* should never happen */
+#else
+		return "酒";		/* should never happen */
+#endif
 	lev = &levl[x][y];
 	ltyp = lev->typ;
 
 	if (is_lava(x,y))
+/*JP
 		return "lava";
+*/
+		return "溶岩";
 	else if (ltyp == ICE ||
 		 (ltyp == DRAWBRIDGE_UP &&
 		  (levl[x][y].drawbridgemask & DB_UNDER) == DB_ICE))
+/*JP
 		return "ice";
+*/
+		return "氷";
 	else if (((ltyp != POOL) && (ltyp != WATER) &&
 	  !Is_medusa_level(&u.uz) && !Is_waterlevel(&u.uz) && !Is_juiblex_level(&u.uz)) ||
 	   (ltyp == DRAWBRIDGE_UP && (levl[x][y].drawbridgemask & DB_UNDER) == DB_MOAT))
+/*JP
 		return "moat";
+*/
+		return "堀";
 	else if ((ltyp != POOL) && (ltyp != WATER) && Is_juiblex_level(&u.uz))
+/*JP
 		return "swamp";
+*/
+		return "沼";
 	else if (ltyp == POOL)
+/*JP
 		return "pool of water";
+*/
+		return "水たまり";
+/*JP
 	else return "water";
+*/
+	else return "水中";
 }
 
 STATIC_OVL void
diff -aurN slashem-0.0.7E6F2/src/mon.c jslashem-0.0.7E6F2-J0.0.8/src/mon.c
--- slashem-0.0.7E6F2/src/mon.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mon.c	2004-08-05 10:05:22.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* If you're using precompiled headers, you don't want this either */
 #ifdef MICROPORT_BUG
 #define MKROOM_H
@@ -207,7 +215,10 @@
 	    case PM_BLACK_UNICORN:
 		if (mtmp->mrevived && rn2(20)) {
 			if (canseemon(mtmp))
+/*JP
 			   pline("%s recently regrown horn crumbles to dust.",
+*/
+			   pline("最近再生した%sの角は粉々になった．",
 				s_suffix(Monnam(mtmp)));
 		} else
 			(void) mksobj_at(UNICORN_HORN, x, y, TRUE, FALSE);
@@ -267,25 +278,42 @@
 			/* Only when Medusa leaves a corpse */
 			mtmp2 = makemon(&mons[PM_PEGASUS], x, y, 0);
 			if (mtmp2) {
+#if 0 /*JP*/
 				You("%s something spring forth from the corpse of %s.",
 						Blind ? "sense" : "see", mon_nam(mtmp));
+#else
+				You("何かが%sの死体から飛び出してくるのを%s．", mon_nam(mtmp),
+						Blind ? "感じた" : "見た");
+#endif
 				mtmp2->mpeaceful = 1;
 				mtmp2->mtame = 0;
 			}
 			goto default_1;
 		}
 	    case PM_NIGHTMARE:
+#if 0 /*JP*/
 			pline("All that remains is her horn...");
+#else
+			pline("あとには彼女の角だけが残った．．．");
+#endif
 			obj = oname(mksobj(UNICORN_HORN, TRUE, FALSE),
 					artiname(ART_NIGHTHORN));
 			goto initspecial;
 	    case PM_BEHOLDER:
+#if 0 /*JP*/
 			pline("All that remains is a single eye...");
+#else
+			pline("あとには一つの目玉だけが残った．．．");
+#endif
 			obj = oname(mksobj(EYEBALL, TRUE, FALSE),
 					artiname(ART_EYE_OF_THE_BEHOLDER));
 			goto initspecial;
 	    case PM_VECNA:
+#if 0 /*JP*/
 			pline("All that remains is a hand...");
+#else
+			pline("あとには一本の腕だけが残った．．．");
+#endif
 			obj = oname(mksobj(SEVERED_HAND, TRUE, FALSE),
 					artiname(ART_HAND_OF_VECNA));
 		initspecial:
@@ -511,7 +539,10 @@
     } else if (mtmp->data == &mons[PM_IRON_GOLEM] && inpool && !rn2(5)) {
 	int dam = d(2,6);
 	if (cansee(mtmp->mx,mtmp->my))
+/*JP
 	    pline("%s rusts.", Monnam(mtmp));
+*/
+	    pline("%sは錆びた．", Monnam(mtmp));
 	mtmp->mhp -= dam;
 	if (mtmp->mhpmax > dam) mtmp->mhpmax -= dam;
 	if (mtmp->mhp < 1) {
@@ -531,19 +562,31 @@
 	if (!is_clinger(mtmp->data) && !likes_lava(mtmp->data)) {
 	    if (!resists_fire(mtmp)) {
 		if (cansee(mtmp->mx,mtmp->my))
+#if 0 /*JP*/
 		    pline("%s %s.", Monnam(mtmp),
 			  mtmp->data == &mons[PM_WATER_ELEMENTAL] ?
 			  "boils away" : "burns to a crisp");
+#else
+		    pline("%sは%sた．", Monnam(mtmp),
+			  mtmp->data == &mons[PM_WATER_ELEMENTAL] ?
+			  "沸騰し" : "燃えてパリパリになっ");
+#endif
 		mondead(mtmp);
 	    }
 	    else {
 		if (--mtmp->mhp < 1) {
 		    if (cansee(mtmp->mx,mtmp->my))
+/*JP
 			pline("%s surrenders to the fire.", Monnam(mtmp));
+*/
+			pline("%sは炎に呑まれた．", Monnam(mtmp));
 		    mondead(mtmp);
 		}
 		else if (cansee(mtmp->mx,mtmp->my))
+/*JP
 		    pline("%s burns slightly.", Monnam(mtmp));
+*/
+		    pline("%sはちょっと焦げた．", Monnam(mtmp));
 	    }
 	    if (mtmp->mhp > 0) {
 		(void) fire_damage(mtmp->minvent, FALSE, FALSE,
@@ -561,13 +604,21 @@
 	if (!is_clinger(mtmp->data)
 	    && !is_swimmer(mtmp->data) && !amphibious(mtmp->data)) {
 	    if (cansee(mtmp->mx,mtmp->my)) {
+/*JP
 		    pline("%s drowns.", Monnam(mtmp));
+*/
+		    pline("%sは溺れた．", Monnam(mtmp));
 	    }
 	    if (u.ustuck && u.uswallow && u.ustuck == mtmp) {
 	    /* This can happen after a purple worm plucks you off a
 		flying steed while you are over water. */
+#if 0 /*JP:T*/
 		pline("%s sinks as water rushes in and flushes you out.",
 			Monnam(mtmp));
+#else
+		pline("%sは水流に沈み．あなたを吐き出した．",
+			Monnam(mtmp));
+#endif
 	    }
 	    mondead(mtmp);
 	    if (mtmp->mhp > 0) {
@@ -780,25 +831,45 @@
 		touch_artifact(otmp,mtmp)) {
 		if (mtmp->data == &mons[PM_RUST_MONSTER] && otmp->oerodeproof) {
 		    if (cansee(mtmp->mx,mtmp->my) && flags.verbose) {
+#if 0 /*JP*/
 			pline("%s eats %s!",
 				Monnam(mtmp),
 				distant_name(otmp,doname));
+#else
+			pline("%sは%sを食べている！",
+				Monnam(mtmp),
+				distant_name(otmp,doname));
+#endif
 		    }
 		    /* The object's rustproofing is gone now */
 		    otmp->oerodeproof = 0;
 		    mtmp->mstun = 1;
 		    if (canseemon(mtmp) && flags.verbose) {
+#if 0 /*JP*/
 			pline("%s spits %s out in disgust!",
 			      Monnam(mtmp), distant_name(otmp,doname));
+#else
+			pline("%sは%sをペッと吐き出した！",
+			      Monnam(mtmp), distant_name(otmp,doname));
+#endif
 		    }
 		/* KMH -- Don't eat indigestible/choking objects */
 		} else if (otmp->otyp != AMULET_OF_STRANGULATION &&
 				otmp->otyp != RIN_SLOW_DIGESTION) {
 		    if (cansee(mtmp->mx,mtmp->my) && flags.verbose)
+#if 0 /*JP*/
 			pline("%s eats %s!", Monnam(mtmp),
 				distant_name(otmp,doname));
+#else
+			pline("%sは%sを食べている！", Monnam(mtmp),
+				distant_name(otmp,doname));
+#endif
 		    else if (flags.soundok && flags.verbose)
+#if 0 /*JP*/
 			You_hear("a crunching sound.");
+#else
+			You_hear("バリバリと食べる音を聞いた．");
+#endif
 		    mtmp->meating = otmp->owt/2 + 1;
 		    /* Heal up to the object's weight in hp */
 		    if (mtmp->mhp < mtmp->mhpmax) {
@@ -831,7 +902,10 @@
 				ptr = mtmp->data;
 			    } else if (!resists_ston(mtmp)) {
 				if (canseemon(mtmp))
+/*JP
 				    pline("%s turns to stone!", Monnam(mtmp));
+*/
+				    pline("%sは石になった！", Monnam(mtmp));
 				monstone(mtmp);
 				ptr = (struct permonst *)0;
 			    }
@@ -866,10 +940,19 @@
 	       if (otmp->otyp == CORPSE &&
 		  otmp->age+50 <= monstermoves) {
 		    if (cansee(mtmp->mx,mtmp->my) && flags.verbose)
+#if 0 /*JP*/
 			pline("%s eats %s!", Monnam(mtmp),
 				distant_name(otmp,doname));
+#else
+			pline("%sは%sを食べている！", Monnam(mtmp),
+				distant_name(otmp,doname));
+#endif
 		    else if (flags.soundok && flags.verbose)
+#if 0 /*JP*/
 			You("hear an awful gobbling noise!");
+#else
+			You("何かをむさぼり食らう恐ろしい音を聞いた！");
+#endif
 		    mtmp->meating = 2;
 		    delobj(otmp);
 		    break; /* only eat one at a time... */
@@ -904,10 +987,16 @@
 		    continue;
 		++count;
 		if (cansee(mtmp->mx,mtmp->my) && flags.verbose)
+/*JP
 		    pline("%s eats %s!", Monnam(mtmp),
+*/
+		    pline("%sは%sを食べている！", Monnam(mtmp),
 			    distant_name(otmp, doname));
 		else if (flags.soundok && flags.verbose)
+/*JP
 		    You_hear("a slurping sound.");
+*/
+		    You_hear("ごくんと飲み込む音を聞いた．");
 		/* Heal up to the object's weight in hp */
 		if (mtmp->mhp < mtmp->mhpmax) {
 		    mtmp->mhp += objects[otmp->otyp].oc_weight;
@@ -948,10 +1037,16 @@
 				    otmp != uball && otmp != uchain) {
 		++ecount;
 		if (ecount == 1) {
+/*JP
 			Sprintf(buf, "%s engulfs %s.", Monnam(mtmp),
+*/
+			Sprintf(buf, "%sは%sを飲み込んだ．", Monnam(mtmp),
 			    distant_name(otmp,doname));
 		} else if (ecount == 2)
+/*JP
 			Sprintf(buf, "%s engulfs several objects.", Monnam(mtmp));
+*/
+			Sprintf(buf, "%sはいくつかの物を飲み込んだ．", Monnam(mtmp));
 		obj_extract_self(otmp);
 		(void) mpickobj(mtmp, otmp);	/* slurp */
 	    }
@@ -962,9 +1057,13 @@
 	    if (cansee(mtmp->mx, mtmp->my) && flags.verbose && buf[0])
 		pline("%s", buf);
 	    else if (flags.soundok && flags.verbose)
+#if 0 /*JP*/
 	    	You_hear("%s slurping sound%s.",
 			ecount == 1 ? "a" : "several",
 			ecount == 1 ? "" : "s");
+#else
+	    	You_hear("ズルズルという音を聞いた．");
+#endif
 	}
 	return ((count > 0) || (ecount > 0)) ? 1 : 0;
 }
@@ -987,8 +1086,12 @@
 #endif
 	if (cansee(mtmp->mx, mtmp->my) ) {
 	    if (flags.verbose && !mtmp->isgd)
+#if 0 /*JP*/
 		pline("%s picks up some %s.", Monnam(mtmp),
 			mat_idx == GOLD ? "gold" : "money");
+#else
+		pline("%sはお金を拾った．", Monnam(mtmp));
+#endif
 	    newsym(mtmp->mx, mtmp->my);
 	}
     }
@@ -1023,7 +1126,10 @@
 		if (otmp->oinvis && !perceives(mtmp->data)) continue;
 #endif
 		if (cansee(mtmp->mx,mtmp->my) && flags.verbose)
+/*JP
 			pline("%s picks up %s.", Monnam(mtmp),
+*/
+			pline("%sは%sを拾った．", Monnam(mtmp),
 			      (distu(mtmp->mx, mtmp->my) <= 5) ?
 				doname(otmp) : distant_name(otmp, doname));
 		obj_extract_self(otmp);
@@ -1552,16 +1658,29 @@
 		visible = u.uswallow && u.ustuck == mtmp ||
 			cansee(mtmp->mx, mtmp->my);
 		if (visible) {
+#if 0 /*JP*/
 			pline("But wait...");
 			pline("%s medallion begins to glow!",
 				s_suffix(Monnam(mtmp)));
+#else
+			pline("しかし．．．");
+			pline("%sのメダリオンが輝きはじめた！",
+				Monnam(mtmp));
+#endif
 			makeknown(AMULET_OF_LIFE_SAVING);
 			if (attacktype(mtmp->data, AT_EXPL)
 			    || attacktype(mtmp->data, AT_BOOM))
+#if 0 /*JP*/
 				pline("%s reconstitutes!", Monnam(mtmp));
 			else
 				pline("%s looks much better!", Monnam(mtmp));
 			pline_The("medallion crumbles to dust!");
+#else
+				pline("%sは再構成された！", Monnam(mtmp));
+			else
+				pline("%sはすっかり回復したようだ！", Monnam(mtmp));
+			pline_The("メダリオンはこなごなにくだけてしまった！");
+#endif
 		}
 		m_useup(mtmp, lifesave);
 		mtmp->mcanmove = 1;
@@ -1573,7 +1692,11 @@
 		mtmp->mhp = mtmp->mhpmax;
 		if (mvitals[monsndx(mtmp->data)].mvflags & G_GENOD) {
 			if (visible)
+#if 0 /*JP*/
 			    pline("Unfortunately %s is still genocided...",
+#else
+			    pline("しかし%sは虐殺されている．．．",
+#endif
 				mon_nam(mtmp));
 		} else
 			return;
@@ -1600,12 +1723,18 @@
 	    visible = u.uswallow && u.ustuck == mtmp || cansee(mtmp->mx,mtmp->my);
 	    mtmp->mhp = mtmp->mhpmax;
 	    if (visible)
+/*JP
 		pline("But wait...");
+*/
+		pline("だがちょっと待て．．．");
 	    if (newcham(mtmp, &mons[mtmp->oldmonnm], FALSE, visible))
 		mtmp->mhp = mtmp->mhpmax/2;
 	    else {
 		if (visible)
+/*JP
 		    pline("%s shudders!", Monnam(mtmp));
+*/
+		    pline("%sは震えた！", Monnam(mtmp));
 		mtmp->mhp = 0;
 	    }
 	}
@@ -1720,7 +1849,11 @@
 
 	if (mdat == &mons[PM_VLAD_THE_IMPALER] || mdat->mlet == S_LICH) {
 	    if (cansee(mon->mx, mon->my) && !was_swallowed)
+#if 0 /*JP*/
 		pline("%s body crumbles into dust.", s_suffix(Monnam(mon)));
+#else
+		pline("%sの体は粉々になった．", Monnam(mon));
+#endif
 	    /* KMH -- make_corpse() handles Vecna */
 	    return (mdat == &mons[PM_VECNA]);
 	}
@@ -1738,28 +1871,49 @@
 	    	else tmp = 0;
 		if (was_swallowed && magr) {
 		    if (magr == &youmonst) {
+/*JP
 			There("is an explosion in your %s!",
+*/
+			pline("%sの中で爆発が起きた！",
 			      body_part(STOMACH));
+#if 0 /*JP*/
 			Sprintf(killer_buf, "%s explosion",
 				s_suffix(mdat->mname));
+#else
+			Sprintf(killer_buf, "%sの爆発で", 
+				jtrns_mon(mdat->mname));
+#endif
 			if (Half_physical_damage) tmp = (tmp+1) / 2;
 			losehp(tmp, killer_buf, KILLED_BY_AN);
 		    } else {
+/*JP
 			if (flags.soundok) You_hear("an explosion.");
+*/
+			if (flags.soundok) You_hear("爆発音を聞いた．");
 			magr->mhp -= tmp;
 			if (magr->mhp < 1) mondied(magr);
 			if (magr->mhp < 1) { /* maybe lifesaved */
 			    if (canspotmon(magr))
+/*JP
 				pline("%s rips open!", Monnam(magr));
+*/
+				pline("%sはビリっと破れた！", Monnam(magr));
 			} else if (canseemon(magr))
+/*JP
 			    pline("%s seems to have indigestion.",
+*/
+			    pline("%sは消化不良のようだ．",
 				  Monnam(magr));
 		    }
 
 		    return FALSE;
 		}
 
+#if 0 /*JP*/
 	    	Sprintf(buf, "%s explosion", s_suffix(mdat->mname));
+#else
+	    	Sprintf(buf, "%sの爆発で", jtrns_mon(mdat->mname));
+#endif
 	    	killer = buf;
 	    	killer_format = KILLED_BY_AN;
 	    	explode(mon->mx, mon->my, -1, tmp, MON_EXPLODE, EXPL_NOXIOUS); 
@@ -1770,10 +1924,19 @@
 	/* Cthulhu Deliquesces... */
 	if (mdat == &mons[PM_CTHULHU]) {
 	    if (cansee(mon->mx, mon->my))
+#if 0 /*JP*/
 		pline("%s body deliquesces into a cloud of noxious gas!",
 			s_suffix(Monnam(mon)));
+#else
+		pline("%sの身体が有毒なガスの中で溶けてゆく！",
+			s_suffix(Monnam(mon)));
+#endif
 	    else
+#if 0 /*JP*/
 		You_hear("hissing and bubbling!");
+#else
+		You_hear("しゅーしゅー，ぶくぶくという音を聞いた！");
+#endif
 	    /* ...into a stinking cloud... */
 	    (void) create_cthulhu_death_cloud(mon->mx, mon->my, 3, 8);
 	    return (FALSE);
@@ -1865,7 +2028,10 @@
      (obj->otyp == STATUE && mons[obj->corpsenm].msize >= mdef->data->msize) ||
 #endif
 				obj_resists(obj, 0, 0)) {
+/*JP
 			if (flooreffects(obj, x, y, "fall")) continue;
+*/
+			if (flooreffects(obj, x, y, "落ちる")) continue;
 			place_object(obj, x, y);
 		    } else {
 			if (obj->lamplit) end_burn(obj, TRUE);
@@ -1911,9 +2077,15 @@
 	mondead(mdef);
 	if (wasinside) {
 		if (is_animal(mdef->data))
+#if 0 /*JP*/
 			You("%s through an opening in the new %s.",
 				locomotion(youmonst.data, "jump"),
 				xname(otmp));
+#else
+			You("新しくできた%sから%s．",
+				xname(otmp),
+				jumpedthrough(youmonst.data, "飛び出た"));
+#endif
 	}
 }
 
@@ -1928,11 +2100,22 @@
 
 	if ((mdef->wormno ? worm_known(mdef) : cansee(mdef->mx, mdef->my))
 		&& fltxt)
+#if 0 /*JP*/
 	    pline("%s is %s%s%s!", Monnam(mdef),
 			nonliving(mdef->data) ? "destroyed" : "killed",
 		    *fltxt ? " by the " : "",
 		    fltxt
 		 );
+#else
+	{
+	    if( *fltxt )
+	      pline("%sは%sによって%s！", Monnam(mdef), fltxt,
+		    nonliving(mdef->data) ? "倒された" : "殺された");
+	    else
+	      pline("%sは%s！", Monnam(mdef), 
+		    nonliving(mdef->data) ? "倒された" : "殺された");
+	}
+#endif
 	else
 	    be_sad = (mdef->mtame != 0 && !mdef->isspell);
 
@@ -1943,7 +2126,10 @@
 	    mondied(mdef);
 
 	if (be_sad && mdef->mhp <= 0)
+/*JP
 	    You("have a sad feeling for a moment, then it passes.");
+*/
+	    You("悲しい気持におそわれたが，すぐに過ぎさった．");
 }
 
 
@@ -1958,10 +2144,17 @@
 
 	if ((mdef->wormno ? worm_known(mdef) : cansee(mdef->mx, mdef->my))
 			&& fltxt)
+#if 0 /*JP*/
 		pline("%s is %s%s%s!", Monnam(mdef),
 				nonliving(mdef->data) ? "destroyed" : "killed",
 				*fltxt ? " by the " : "",
 				fltxt);
+#else
+		pline("%sは%s%s%s！", Monnam(mdef),
+				fltxt,
+				*fltxt ? "によって" : "",
+				nonliving(mdef->data) ? "倒された" : "殺された");
+#endif
 	else
 		be_sad = (mdef->mtame != 0 && !mdef->isspell); 
 
@@ -1972,7 +2165,10 @@
 		xkilled(mdef,0);
 
 	if (be_sad && mdef->mhp <= 0)
+/*JP
 		You("have a sad feeling for a moment, then it passes.");
+*/
+		You("悲しい気持におそわれたが，すぐに過ぎさった．");
 }
 
 
@@ -2024,11 +2220,17 @@
 	u.uconduct.killer++;
 
 	if (dest & 1) {
+/*JP
 	    const char *verb = nonliving(mtmp->data) ? "destroy" : "kill";
+*/
 
 	    if (!wasinside && !canspotmon(mtmp))
+/*JP
 		You("%s it!", verb);
+*/
+		You("何者かを倒した！");
 	    else {
+#if 0 /*JP*/
 		You("%s %s!", verb,
 		    !mtmp->mtame ? mon_nam(mtmp) :
 			x_monnam(mtmp,
@@ -2036,6 +2238,11 @@
 				 "poor",
 				 mtmp->mnamelth ? SUPPRESS_SADDLE : 0,
 				 FALSE));
+#else
+		You("%s%sを倒した！",
+			mtmp->mtame ? "かわいそうな" : "",
+			mon_nam(mtmp));
+#endif
 	    }
 	}
 
@@ -2064,7 +2271,10 @@
 		 */
 		stoned = FALSE;
 		if ((!u.uswallow || u.ustuck != mtmp) && !cansee(x, y))
+/*JP
 		    pline("Maybe not...");
+*/
+		    pline("いや，違うかも．．．");
 		return;
 	}
 
@@ -2127,7 +2337,10 @@
 	   u.ualign.type != A_CHAOTIC) {
 		HTelepat &= ~INTRINSIC;
 		change_luck(-2);
+/*JP
 		You("murderer!");
+*/
+		You("殺人鬼だ！");
 		if (Blind && !Blind_telepat)
 		    see_monsters(); /* Can't sense monsters any more. */
 	}
@@ -2135,7 +2348,10 @@
 	if (is_unicorn(mdat) &&
 				sgn(u.ualign.type) == sgn(mdat->maligntyp)) {
 		change_luck(-5);
+/*JP
 		You_feel("guilty...");
+*/
+		You("罪を感じた．．．");
 	}
 	/* give experience points */
 	tmp = experience(mtmp, (int)mvitals[mndx].died + 1);
@@ -2145,14 +2361,24 @@
 	/* adjust alignment points */
 	if (mtmp->m_id == quest_status.leader_m_id) {		/* REAL BAD! */
 	    adjalign(-(u.ualign.record+(int)ALIGNLIM/2));
+#if 0 /*JP*/
 	    pline("That was %sa bad idea...",
 	    		u.uevent.qcompleted ? "probably " : "");
+#else
+	    pline("%sよくない行為だった．．．",
+	    		u.uevent.qcompleted ? "たぶん" : "");
+#endif
 	} else if (mdat->msound == MS_NEMESIS)	/* Real good! */
 	    adjalign((int)(ALIGNLIM/4));
 	else if (mdat->msound == MS_GUARDIAN) {	/* Bad */
 	    adjalign(-(int)(ALIGNLIM/8));
+#if 0 /*JP*/
 	    if (!Hallucination) pline("That was probably a bad idea...");
 	    else pline("Whoopsie-daisy!");
+#else
+	    if (!Hallucination) pline("よくない行為だった．．．");
+	    else pline("シンジマッター！");
+#endif
 	} else if (mtmp->ispriest) {
 		adjalign((p_coaligned(mtmp)) ? -2 : 2);
 		/* cancel divine protection for killing your priest */
@@ -2162,12 +2388,22 @@
 	} else if (mtmp->mtame) {
 		adjalign(-15);	/* bad!! */
 		/* your god is mighty displeased... */
+#if 0 /*JP*/
 		if (!Hallucination) You_hear("the rumble of distant thunder...");
 		else You_hear("the studio audience applaud!");
+#else
+		if (!Hallucination) You_hear("遠くで雷鳴を聞いた．．．");
+		else pline("聴衆の喝采を浴びた！");
+#endif
 	} else if (mtmp->mpeaceful) {
 		adjalign(-5);
+#if 0 /*JP*/
 		if (!Hallucination) pline("The gods will probably not appreciate this...");
 		else pline("Whoopsie-daisy!");
+#else
+		if (!Hallucination) pline("神は恐らくこれをよしとしないだろう．．．");
+		else pline("シンジマッター！");
+#endif
 	}
 
 	/* malign was already adjusted for u.ualign.type and randomization */
@@ -2185,15 +2421,24 @@
     if(mtmp->data->mlet == S_GOLEM) {
 	/* it's a golem, and not a stone golem */
 	if(canseemon(mtmp))
+/*JP
 	    pline("%s solidifies...", Monnam(mtmp));
+*/
+	    pline("%sは凝固した．．．", Monnam(mtmp));
 	if (newcham(mtmp, &mons[PM_STONE_GOLEM], FALSE, FALSE)) {
 	    if (!polymorphed)
 		mtmp->oldmonnm = PM_STONE_GOLEM;    /* Change is permanent */
 	    if(canseemon(mtmp))
+/*JP
 		pline("Now it's %s.", an(mtmp->data->mname));
+*/
+		pline("なんと%sになってしまった．", a_monnam(mtmp));
 	} else {
 	    if(canseemon(mtmp))
+/*JP
 		pline("... and returns to normal.");
+*/
+		pline("．．．そして普通に戻った．");
 	}
     } else
 	impossible("Can't polystone %s!", a_monnam(mtmp));
@@ -2271,9 +2516,15 @@
 
 static const char *poiseff[] = {
 
+#if 0 /*JP*/
 	" feel weaker", "r brain is on fire",
 	"r judgement is impaired", "r muscles won't obey you",
 	" feel very sick", " break out in hives"
+#else
+	"とても衰弱した", "頭に血がのぼった",
+	"判断力を失った", "思うように動けない",
+	"とても気分が悪い", "じんましんがあらわれた"
+#endif
 };
 
 void
@@ -2281,7 +2532,10 @@
 
 	int	typ;
 {
+/*JP
 	pline("You%s.", poiseff[typ]);
+*/
+	You("%s．", poiseff[typ]);
 }
 
 void
@@ -2289,10 +2543,15 @@
 const char *string, *pname;
 int  typ, fatal;
 {
+#if 0 /*JP*/
 	int i, plural, kprefix = KILLED_BY_AN;
+#else
+	int i, kprefix = KILLED_BY_AN;
+#endif
 	boolean thrown_weapon = (fatal < 0);
 
 	if (thrown_weapon) fatal = -fatal;
+#if 0 /*JP*/
 	if(strcmp(string, "blast") && !thrown_weapon) {
 	    /* 'blast' has already given a 'poison gas' message */
 	    /* so have "poison arrow", "poison dart", etc... */
@@ -2301,12 +2560,26 @@
 	    pline("%s%s %s poisoned!", isupper((int)*string) ? "" : "The ",
 			string, plural ? "were" : "was");
 	}
+#else
+	if((strcmp(string, "blast") && strcmp(string,"風")
+	    && strcmp(string,"息")) && !thrown_weapon) {
+	    pline("%sは毒におかされている！",string);
+	}
+#endif
 
 	if(Poison_resistance) {
+#if 0 /*JP*/
 		if(!strcmp(string, "blast")) shieldeff(u.ux, u.uy);
 		pline_The("poison doesn't seem to affect you.");
+#else
+		if(!strcmp(string, "blast") || !strcmp(string,"息") ||
+		   !strcmp(string,"風"))
+		    shieldeff(u.ux, u.uy);
+		pline("毒は効かなかったようだ．");
+#endif
 		return;
 	}
+#if 0 /*JP*//*日本語では不要*/
 	/* suppress killer prefix if it already has one */
 	if ((i = name_to_mon(pname)) >= LOW_PM && mons[i].geno & G_UNIQ) {
 	    kprefix = KILLED_BY;
@@ -2317,28 +2590,58 @@
 	    /*[ does this need a plural check too? ]*/
 	    kprefix = KILLED_BY;
 	}
+#endif
 	i = rn2(fatal + 20*thrown_weapon);
 	if(i == 0 && typ != A_CHA) {
 		if (Invulnerable)
+/*JP
 		   pline("You are unharmed!");
+*/
+		    You("傷つかない！");
 		else {
 		u.uhp = -1;
+/*JP
 		pline_The("poison was deadly...");
+*/
+		pline("毒は致死量だった．．．");
 		}
 	} else if(i <= 5) {
 		/* Check that a stat change was made */
 		if (adjattrib(typ, thrown_weapon ? -1 : -rn1(3,3), 1))
+/*JP
 		    pline("You%s!", poiseff[typ]);
+*/
+		    You("%s！", poiseff[typ]);
 	} else {
+#if 1 /*JP*/
+		char ptmp[BUFSZ];
+#endif
 		i = thrown_weapon ? rnd(6) : rn1(10,6);
 		if(Half_physical_damage) i = (i+1) / 2;
+#if 0 /*JP*/
 		losehp(i, pname, kprefix);
+#else
+		Sprintf(ptmp, "%sの攻撃で", pname);
+		losehp(i, ptmp, kprefix);
+#endif
 	}
 	if(u.uhp < 1) {
 		killer_format = kprefix;
+#if 0 /*JP*/
 		killer = pname;
 		/* "Poisoned by a poisoned ___" is redundant */
 		done(strstri(pname, "poison") ? DIED : POISONING);
+#else
+		if ( strstr(pname, "毒") ) {
+			char ptmp[BUFSZ];
+			Sprintf(ptmp, "%sで", pname);
+			killer = ptmp;
+			done(DIED);
+		} else {
+			killer = pname;
+			done(POISONING);
+		}
+#endif
 	}
 	(void) encumber_msg();
 }
@@ -2351,7 +2654,10 @@
 {
     if(mtmp->data->msound == MS_SHRIEK) {
 	if(flags.soundok) {
+/*JP
 	    pline("%s shrieks.", Monnam(mtmp));
+*/
+	    pline("%sは金切り声をあげた．", Monnam(mtmp));
 	    stop_occupation();
 	}
 	/* [Tom] took out the weird purple worm thing and lowered prob from 10 */        
@@ -2401,7 +2707,10 @@
 
 	if (couldsee(mtmp->mx, mtmp->my)) {
 		if (humanoid(mtmp->data) || mtmp->isshk || mtmp->isgd)
+/*JP
 		    pline("%s gets angry!", Monnam(mtmp));
+*/
+		    pline("%sは怒った！", Monnam(mtmp));
 		else if (flags.verbose && flags.soundok) growl(mtmp);
 	}
 
@@ -2434,10 +2743,14 @@
 		    if (canseemon(mon)) ++got_mad;
 		}
 	    if (got_mad && !Hallucination)
+#if 0 /*JP*/
 		pline_The("%s appear%s to be angry too...",
 		      got_mad == 1 ? q_guardian->mname :
 				    makeplural(q_guardian->mname),
 		      got_mad == 1 ? "s" : "");
+#else
+		pline("%sも怒った．．．", jtrns_mon(q_guardian->mname));
+#endif
 	}
 }
 
@@ -2665,13 +2978,30 @@
 		char pprompt[BUFSZ], buf[BUFSZ];
 		int tries = 0;
 		do {
+#if 0 /*JP*/
 			Sprintf(pprompt,
 				"Change %s into what kind of monster? [type the name]",
+#else
+			Sprintf(pprompt,
+				"%sをどのようなモンスターに変身させますか？ [名前を入れてね]",
+#endif
 				mon_nam(mon));
 			getlin(pprompt,buf);
+#if 1 /*JP*/
+			(void)mungspaces(buf);
+			{
+			    const char *p;
+			    p = etrns_mon(buf);
+			    if(p) strcpy(buf, p);
+			}
+#endif
 			mndx = name_to_mon(buf);
 			if (mndx < LOW_PM)
+#if 0 /*JP*/
 				You("cannot polymorph %s into that.", mon_nam(mon));
+#else
+				You("%sをそれに変化させることはできない．", mon_nam(mon));
+#endif
 			else break;
 		} while(++tries < 5);
 		if (tries==5) pline(thats_enough_tries);
@@ -2836,8 +3166,13 @@
 	    		!Stone_resistance && rnl(3)) {
 	    	char buf[BUFSZ];
 
+#if 0 /*JP*/
 	    	pline("You touch %s.", mon_nam(u.usteed));
 	    	Sprintf(buf, "riding %s", an(u.usteed->data->mname));
+#else
+		pline("あなたは%sに触れた．", mon_nam(u.usteed));
+		Sprintf(buf, "%sに乗って", mon_nam(u.usteed));
+#endif
 	    	instapetrify(buf);
  	    }
 	    if (!can_ride(u.usteed)) dismount_steed(DISMOUNT_POLY);
@@ -2863,22 +3198,43 @@
 
 	if (msg && (u.uswallow && mtmp == u.ustuck || canspotmon(mtmp))) {
 	    if (alt_mesg && is_mplayer(mdat))
+#if 0 /*JP*/
 		pline("%s is suddenly very %s!", oldname,
 			mtmp->female ? "feminine" : "masculine");
+#else
+		pline("%sは突然とても%sらしくなった！", oldname,
+			mtmp->female ? "女" : "男");
+#endif
 	    else if (alt_mesg)
+#if 0 /*JP*/
 		pline("%s changes into a %s!", oldname,
 			is_human(mdat) ? "human" : mdat->mname + 4);
+#else
+		/* + 4 は wereを削っているらしい・・・ */
+		pline("%sは%sの姿になった！", oldname,
+			is_human(mdat) ? "人間" : jtrns_mon(mdat->mname + 4));
+#endif
 	    else {
 	    uchar save_mnamelth = mtmp->mnamelth;
 	    mtmp->mnamelth = 0;
+#if 0 /*JP*/
 	    pline("%s turns into %s!", oldname,
 		  mdat == &mons[PM_GREEN_SLIME] ? "slime" :
 		  x_monnam(mtmp, ARTICLE_A, (char*)0, SUPPRESS_SADDLE, FALSE));
+#else
+	    pline("%sは%sになった！", oldname,
+		  mdat == &mons[PM_GREEN_SLIME] ? "スライム" :
+		  x_monnam(mtmp, ARTICLE_A, (char*)0, SUPPRESS_SADDLE, FALSE));
+#endif
 	    mtmp->mnamelth = save_mnamelth;
 	    }
 	} else if (msg && couldsee)
 	    /* No message if we only sensed the monster previously */
+#if 0 /*JP*/
 	    pline("%s suddenly disappears!", oldname);
+#else
+	    pline("%sは突然消えた！", oldname);
+#endif
 
 	/* [ALI] In Slash'EM, this must come _after_ "<mon> turns into <mon>"
 	 * since it's possible to get both messages.
@@ -2890,9 +3246,15 @@
 				if (!noncorporeal(mdat) && !amorphous(mdat) &&
 				    !is_whirly(mdat) &&
 				    (mdat != &mons[PM_YELLOW_LIGHT])) {
+#if 0 /*JP*/
 					You("break out of %s%s!", mon_nam(mtmp),
 					    (is_animal(mdat)?
 					    "'s stomach" : ""));
+#else
+					You("%s%sを破り出た！", mon_nam(mtmp),
+					    (is_animal(mdat)?
+					    "の胃袋" : ""));
+#endif
 					mtmp->mhp = 1;  /* almost dead */
 				}
 				expels(mtmp, olddata, FALSE);
@@ -2907,7 +3269,10 @@
 	possibly_unwield(mtmp, polyspot);	/* might lose use of weapon */
 	mon_break_armor(mtmp, polyspot);
 	if (!(mtmp->misc_worn_check & W_ARMG))
+/*JP
 	    mselftouch(mtmp, "No longer petrify-resistant, ",
+*/
+	    mselftouch(mtmp, "石化への抵抗力がなくなって，",
 			!flags.mon_moving);
 	m_dowear(mtmp, FALSE);
 
@@ -3103,7 +3468,10 @@
 	    mon->mhp += dam;
 	    if (mon->mhp > mon->mhpmax) mon->mhp = mon->mhpmax;
 	    if (cansee(mon->mx, mon->my))
+/*JP
 		pline("%s seems healthier.", Monnam(mon));
+*/
+		pline("%sは元気になったように見える．", Monnam(mon));
 	}
     }
 }
@@ -3134,16 +3502,31 @@
 	}
 	if(ct) {
 	    if(!silent) { /* do we want pline msgs? */
+#if 0 /*JP*/
 		if(slct) pline_The("guard%s wake%s up!",
 				 slct > 1 ? "s" : "", slct == 1 ? "s" : "");
+#else
+		if(slct) pline("番兵は目を覚ました！");
+#endif
 		if(nct || sct) {
+#if 0 /*JP*/
 			if(nct) pline_The("guard%s get%s angry!",
 				nct == 1 ? "" : "s", nct == 1 ? "s" : "");
+#else
+			if(nct) pline("番兵は怒った！");
+#endif
 			else if(!Blind)
+#if 0 /*JP*/
 				You("see %sangry guard%s approaching!",
 				  sct == 1 ? "an " : "", sct > 1 ? "s" : "");
+#else
+				You("怒った番兵が近寄ってくるのが見えた！");
+#endif
 		} else if(flags.soundok)
+/*JP
 			You_hear("the shrill sound of a guard's whistle.");
+*/
+			You("番兵の笛がけたたましく鳴るのが聞こえた．");
 	    }
 	    return(TRUE);
 	}
@@ -3177,9 +3560,15 @@
 		break;
 	    case M_AP_OBJECT:
 		if (otyp == SPE_HEALING || otyp == SPE_EXTRA_HEALING) {
+#if 0 /*JP*/
 		    pline("%s seems a more vivid %s than before.",
 				The(simple_typename(ap)),
 				c_obj_colors[objects[ap].oc_color]);
+#else
+		    pline("%sは以前よりより鮮やかな%sになったようだ．",
+				The(simple_typename(ap)),
+				c_obj_colors[objects[ap].oc_color]);
+#endif
 		}
 		break;
 	}
diff -aurN slashem-0.0.7E6F2/src/mondata.c jslashem-0.0.7E6F2-J0.0.8/src/mondata.c
--- slashem-0.0.7E6F2/src/mondata.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mondata.c	2004-08-05 09:36:00.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "eshk.h"
 #include "epri.h"
@@ -677,6 +685,7 @@
     else return(mtmp->data);
 }
 
+#if 0 /*JP*/
 static const char *levitate[4]	= { "float", "Float", "wobble", "Wobble" };
 static const char *flys[4]	= { "fly", "Fly", "flutter", "Flutter" };
 static const char *flyl[4]	= { "fly", "Fly", "stagger", "Stagger" };
@@ -684,6 +693,15 @@
 static const char *ooze[4]	= { "ooze", "Ooze", "tremble", "Tremble" };
 static const char *immobile[4]	= { "wiggle", "Wiggle", "pulsate", "Pulsate" };
 static const char *crawl[4]	= { "crawl", "Crawl", "falter", "Falter" };
+#else
+static const char *levitate[4]	= { "浮く", "浮く", "よろめく", "よろめく" };
+static const char *flys[4]	= { "飛ぶ", "飛ぶ", "はためく", "はためく" };
+static const char *flyl[4]	= { "飛ぶ", "飛ぶ", "よろめく", "よろめく" };
+static const char *slither[4]	= { "滑る", "滑る", "たじろぐ", "たじろぐ" };
+static const char *ooze[4]	= { "にじみ出る", "にじみ出る", "震える", "震える" };
+static const char *immobile[4]	= { "震える", "震える", "震える", "震える" };
+static const char *crawl[4]	= { "はいずる", "はいずる", "たじろぐ", "たじろぐ" };
+#endif
 
 const char *
 locomotion(ptr, def)
@@ -724,6 +742,28 @@
 	       );
 
 }
+#if 1 /*JP*/
+static const char *levitate2	= "浮き出た";
+static const char *fly2		= "飛び出た";
+static const char *slither2	= "滑り出た";
+static const char *ooze2	= "にじみ出た";
+static const char *crawl2	= "はいずり出た";
+
+const char *
+jumpedthrough(ptr, def)
+const struct permonst *ptr;
+const char *def;
+{
+	return (
+		is_floater(ptr) ? levitate2 :
+		is_flyer(ptr)   ? fly2 :
+		slithy(ptr)     ? slither2 :
+		amorphous(ptr)  ? ooze2 :
+		nolimbs(ptr)    ? crawl2 :
+		def
+	       );
+}
+#endif
 
 /* return a phrase describing the effect of fire attack on a type of monster */
 const char *
@@ -738,16 +778,25 @@
     case PM_FIRE_VORTEX:
     case PM_FIRE_ELEMENTAL:
     case PM_SALAMANDER:
+/*JP
 	what = "already on fire";
+*/
+	what = "すでに炎につつまれている";
 	break;
     case PM_WATER_ELEMENTAL:
     case PM_FOG_CLOUD:
     case PM_STEAM_VORTEX:
+/*JP
 	what = "boiling";
+*/
+	what = "沸騰した";
 	break;
     case PM_ICE_VORTEX:
     case PM_GLASS_GOLEM:
+/*JP
 	what = "melting";
+*/
+	what = "溶けた";
 	break;
     case PM_STONE_GOLEM:
     case PM_CLAY_GOLEM:
@@ -756,10 +805,16 @@
     case PM_EARTH_ELEMENTAL:
     case PM_DUST_VORTEX:
     case PM_ENERGY_VORTEX:
+/*JP
 	what = "heating up";
+*/
+	what = "熱くなった";
 	break;
     default:
+/*JP
 	what = (mattk->aatyp == AT_HUGS) ? "being roasted" : "on fire";
+*/
+	what = (mattk->aatyp == AT_HUGS) ? "丸焼けになった" : "火だるまになった";
 	break;
     }
     return what;
diff -aurN slashem-0.0.7E6F2/src/monmove.c jslashem-0.0.7E6F2-J0.0.8/src/monmove.c
--- slashem-0.0.7E6F2/src/monmove.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/monmove.c	2004-06-27 16:53:54.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "mfndpos.h"
 #include "artifact.h"
@@ -27,9 +35,15 @@
 {
 	if (flags.verbose) {
 	    if (cansee(mtmp->mx, mtmp->my))
+/*JP
 		pline("KABOOM!!  You see a door explode.");
+*/
+		pline("ちゅどーん！扉が爆発するのを見た．");
 	    else if (flags.soundok)
+/*JP
 		You_hear("a distant explosion.");
+*/
+		You_hear("遠方で爆発する音を聞いた．");
 	}
 	wake_nearto(mtmp->mx, mtmp->my, 7*7);
 	mtmp->mstun = 1;
@@ -61,13 +75,22 @@
 
 		if(couldsee(mtmp->mx, mtmp->my)) {
 
+/*JP
 		  pline("%s yells:", Amonnam(mtmp));
+*/
+		  pline("%sは叫んだ：", Amonnam(mtmp));
 		  if(levl[x][y].looted & D_WARNED) {
+/*JP
 			verbalize("Halt, thief!  You're under arrest!");
+*/
+			verbalize("待て！ぬすっと！おまえを逮捕する！");
 			(void) angry_guards(!(flags.soundok));
 		  } else {
 			int i;
+/*JP
 			verbalize("Hey, stop picking that lock!");
+*/
+			verbalize("おい，鍵を勝手に開けるんじゃない！");
 			/* [ALI] Since marking a door as warned will have
 			 * the side effect of trapping the door, it must be
 			 * included in the doors[] array in order that trap
@@ -261,7 +284,11 @@
 		expels(mtmp, mtmp->data, TRUE);
 	    else if (!sticks(youmonst.data)) {
 		unstuck(mtmp);	/* monster lets go when fleeing */
+#if 0 /*JP*/
 		You("get released!");
+#else
+		You("解放された！");
+#endif
 	    }
 	}
 
@@ -276,7 +303,10 @@
 		mtmp->mfleetim = min(fleetime, 127);
 	    }
 	    if (!mtmp->mflee && fleemsg && canseemon(mtmp) && !mtmp->mfrozen)
+/*JP
 		pline("%s turns to flee!", (Monnam(mtmp)));
+*/
+		pline("%sはおびえて逃げ出した！", (Monnam(mtmp)));
 	    mtmp->mflee = 1;
 	}
 }
@@ -426,8 +456,13 @@
 	if(nearby && mdat->msound == MS_BRIBE &&
 	   mtmp->mpeaceful && !mtmp->mtame && !u.uswallow) {
 		if (mtmp->mux != u.ux || mtmp->muy != u.uy) {
+#if 0 /*JP*/
 			pline("%s whispers at thin air.",
 			    cansee(mtmp->mux, mtmp->muy) ? Monnam(mtmp) : "It");
+#else
+			pline("%sがささやいた．",
+			    cansee(mtmp->mux, mtmp->muy) ? Monnam(mtmp) : "何か");
+#endif
 
 			if (is_demon(youmonst.data)) {
 			  /* "Good hunting, brother" */
@@ -435,7 +470,10 @@
 			} else {
 			    mtmp->minvis = mtmp->perminvis = 0;
 			    /* Why?  For the same reason in real demon talk */
+/*JP
 			    pline("%s gets angry!", Amonnam(mtmp));
+*/
+			    pline("%sは怒った！", Amonnam(mtmp));
 			    mtmp->mpeaceful = 0;
 			    /* since no way is an image going to pay it off */
 			}
@@ -452,28 +490,49 @@
 		struct monst *m2, *nmon = (struct monst *)0;
 
 		if (canseemon(mtmp))
+/*JP
 			pline("%s concentrates.", Monnam(mtmp));
+*/
+			pline("%sは精神を集中している．", Monnam(mtmp));
 		if (distu(mtmp->mx, mtmp->my) > BOLT_LIM * BOLT_LIM) {
+/*JP
 			You("sense a faint wave of psychic energy.");
+*/
+			You("サイコエネルギーの波動を感じた．");
 			goto toofar;
 		}
+/*JP
 		pline("A wave of psychic energy pours over you!");
+*/
+		pline("あなたはサイコエネルギーの波動を浴びた！");
 		if (mtmp->mpeaceful &&
 		    (!Conflict || resist(mtmp, RING_CLASS, 0, 0)))
+/*JP
 			pline("It feels quite soothing.");
+*/
+			pline("心がなごんだ．");
 		else {
 			register boolean m_sen = sensemon(mtmp);
 
 			if (m_sen || (Blind_telepat && rn2(2)) || !rn2(10)) {
 				int dmg;
+#if 0 /*JP*/
 				pline("It locks on to your %s!",
 					m_sen ? "telepathy" :
 					Blind_telepat ? "latent telepathy" : "mind");
+#else
+				pline("それはあなたの%sを直撃した！",
+					m_sen ? "テレパシー能力" :
+					Blind_telepat ? "潜在能力" : "精神");
+#endif
 				dmg = (mdat == &mons[PM_CTHULHU])?
 					rn1(10, 10) :
 					rn1(4, 4);
 				if (Half_spell_damage) dmg = (dmg+1) / 2;
+/*JP
 				losehp(dmg, "psychic blast", KILLED_BY_AN);
+*/
+				losehp(dmg, "サイコ攻撃で", KILLED_BY_AN);
 			}
 		}
 		for(m2=fmon; m2; m2 = nmon) {
@@ -485,7 +544,10 @@
 			if ((telepathic(m2->data) &&
 			    (rn2(2) || m2->mblinded)) || !rn2(10)) {
 				if (cansee(m2->mx, m2->my))
+/*JP
 				    pline("It locks on to %s.", mon_nam(m2));
+*/
+				    pline("%sを直撃した．", mon_nam(m2));
 				m2->mhp -= rnd(15);
 				if (m2->mhp <= 0)
 				    if (mtmp->uexp)
@@ -638,7 +700,10 @@
 register struct monst *mtmp;
 {
 	if (sticks(youmonst.data) && mtmp==u.ustuck && !u.uswallow) {
+/*JP
 		pline("%s cannot escape from you!", Monnam(mtmp));
+*/
+		pline("%sはあなたから逃げられない！", Monnam(mtmp));
 		return(TRUE);
 	}
 	return(FALSE);
@@ -757,7 +822,10 @@
 #ifdef MAIL
 	if(ptr == &mons[PM_MAIL_DAEMON]) {
 	    if(flags.soundok && canseemon(mtmp))
+/*JP
 		verbalize("I'm late!");
+*/
+		verbalize("遅くなってすまない！");
 	    mongone(mtmp);
 	    return(2);
 	}
@@ -1129,10 +1197,17 @@
 
 		    if(here->doormask & (D_LOCKED|D_CLOSED) && amorphous(ptr)) {
 			if (flags.verbose && canseemon(mtmp))
+#if 0 /*JP*/
 			    pline("%s %s under the door.", Monnam(mtmp),
 				  (ptr == &mons[PM_FOG_CLOUD] ||
 				   ptr == &mons[PM_YELLOW_LIGHT])
 				  ? "flows" : "oozes");
+#else
+			    pline("%sは扉の下から%s．", Monnam(mtmp),
+				  (ptr == &mons[PM_FOG_CLOUD] ||
+				   ptr == &mons[PM_YELLOW_LIGHT])
+				  ? "流れでた" : "にじみでた");
+#endif
 		    } else if(here->doormask & D_LOCKED && can_unlock) {
 			if(btrapped) {
 			    here->doormask = D_NODOOR;
@@ -1142,9 +1217,15 @@
 			} else {
 			    if (flags.verbose) {
 				if (canseeit)
+/*JP
 				   You("see a door unlock and open.");
+*/
+				   You("扉の鍵がはずれ，開くのが見えた．");
 				else if (flags.soundok)
+/*JP
 				   You_hear("a door unlock and open.");
+*/
+				   You_hear("扉の鍵がはずれ，開く音を聞いた．");
 			    }
 			    here->doormask = D_ISOPEN;
 			    /* newsym(mtmp->mx, mtmp->my); */
@@ -1159,9 +1240,15 @@
 			} else {
 			    if (flags.verbose) {
 				if (canseeit)
+/*JP
 				     You("see a door open.");
+*/
+				     You("扉が開くのが見えた．");
 				else if (flags.soundok)
+/*JP
 				     You_hear("a door open.");
+*/
+				     You_hear("扉が開く音を聞いた．");
 			    }
 			    here->doormask = D_ISOPEN;
 			    /* newsym(mtmp->mx, mtmp->my); */  /* done below */
@@ -1183,9 +1270,15 @@
 			} else {
 			    if (flags.verbose) {
 				if (canseeit)
+/*JP
 				    You("see a door crash open.");
+*/
+				    You("扉が破壊されるのを見た．");
 				else if (flags.soundok)
+/*JP
 				    You_hear("a door crash open.");
+*/
+				    You_hear("扉が破壊される音を聞いた．");
 			    }
 			    if (here->doormask & D_LOCKED && !rn2(2))
 				    here->doormask = D_NODOOR;
@@ -1199,10 +1292,15 @@
 		    }
 		} else if (levl[mtmp->mx][mtmp->my].typ == IRONBARS) {
 			if (flags.verbose && canseemon(mtmp))
+#if 0 /*JP*/
 			    Norep("%s %s %s the iron bars.", Monnam(mtmp),
 				  /* pluralization fakes verb conjugation */
 				  makeplural(locomotion(ptr, "pass")),
 				  passes_walls(ptr) ? "through" : "between");
+#else
+			    Norep("%sは鉄の棒%sをすり抜けた．", Monnam(mtmp),
+				  passes_walls(ptr) ? "" : "の間");
+#endif
 		}
 
 		/* possibly dig */
diff -aurN slashem-0.0.7E6F2/src/mplayer.c jslashem-0.0.7E6F2-J0.0.8/src/mplayer.c
--- slashem-0.0.7E6F2/src/mplayer.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mplayer.c	2004-06-27 16:53:56.000000000 +0900
@@ -2,6 +2,14 @@
 /*	Copyright (c) Izchak Miller, 1992.			  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL const char *NDECL(dev_name);
@@ -34,6 +42,10 @@
 	"Helge", "Ron", "Timo",
 	/* VMS team */
 	"Joshua", "Pat",
+#if 1 /*JP*/
+	/* Japanese team */
+	"Issei", "Nao", "Mya",
+#endif
 	""};
 
 
@@ -70,6 +82,9 @@
 {
 	boolean fmlkind = is_female(mtmp->data);
 	const char *devnam;
+#if 1 /*JP*/
+	char tmp_nam[PL_NSIZ];
+#endif
 
 	devnam = dev_name();
 	if (!devnam)
@@ -82,10 +97,19 @@
 	    mtmp->female = 1;
 	else
 	    mtmp->female = 0;
+#if 0 /*JP*/
 	Strcat(nam, " the ");
 	Strcat(nam, rank_of((int)mtmp->m_lev,
 			    monsndx(mtmp->data),
 			    (boolean)mtmp->female));
+#else
+	Strcpy(tmp_nam, rank_of(rn1(11, 20),
+			    highc(mtmp->data->mname[0]),
+			    (boolean)mtmp->female));
+	Strcat(tmp_nam, "の");
+	Strcat(tmp_nam, nam);
+	Strcpy(nam, tmp_nam);
+#endif
 }
 
 STATIC_OVL void
@@ -336,6 +360,7 @@
 mplayer_talk(mtmp)
 register struct monst *mtmp;
 {
+#if 0 /*JP*/
 	static const char *same_class_msg[3] = {
 		"I can't win, and neither will you!",
 		"You don't deserve to win!",
@@ -345,13 +370,46 @@
 		"Fight, scum!",
 		"Here is what I have to say!",
 	};
+#else
+	static const char *same_class_msg_f[3] = {
+		"私ですら達成できないのに，あなたに達成できて？",
+		"あなたが成功するなんてありえませんわ．",
+		"名誉は私に！あなたになんてとんでもない．",
+	},		  *other_class_msg_f[3] = {
+		"私と話したいですって？",
+		"剣を取りなさい！",
+		"あなたと話すことなどありませんわ！",
+	};
+	static const char *same_class_msg[3] = {
+		"私ですら達成できないのに，お前に達成できるのか？",
+		"お前が成功するなんてことはないな．",
+		"名誉を我に！お前じゃない！",
+	},		  *other_class_msg[3] = {
+		"下衆が話しかけるか？ははーん？",
+		"戦え！この野郎！",
+		"お前と話すことなどなにもない！",
+	};
+#endif
 
 	if(mtmp->mpeaceful) return; /* will drop to humanoid talk */
 
+#if 0 /*JP*/
 	pline("Talk? -- %s",
 		(mtmp->data == &mons[urole.malenum] ||
 		mtmp->data == &mons[urole.femalenum]) ?
 		same_class_msg[rn2(3)] : other_class_msg[rn2(3)]);
+#else
+	if(mtmp->female)
+	    pline("話す？ -- %s",
+		  (mtmp->data == &mons[urole.malenum] ||
+		   mtmp->data == &mons[urole.femalenum]) ?
+		  same_class_msg_f[rn2(3)] : other_class_msg_f[rn2(3)]);
+	else
+	    pline("話す？ -- %s",
+		  (mtmp->data == &mons[urole.malenum] ||
+		   mtmp->data == &mons[urole.femalenum]) ?
+		  same_class_msg[rn2(3)] : other_class_msg[rn2(3)]);
+#endif
 }
 
 /*mplayer.c*/
diff -aurN slashem-0.0.7E6F2/src/mthrowu.c jslashem-0.0.7E6F2-J0.0.8/src/mthrowu.c
--- slashem-0.0.7E6F2/src/mthrowu.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/mthrowu.c	2004-08-22 14:42:46.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL int FDECL(drop_throw,(struct monst *, struct obj *,BOOLEAN_P,int,int));
@@ -20,6 +28,7 @@
  * Keep consistent with breath weapons in zap.c, and AD_* in monattk.h.
  */
 NEARDATA const char *breathwep[] = {
+#if 0 /*JP*/
 				"fragments",
 				"fire",
 				"frost",
@@ -30,6 +39,18 @@
 				"acid",
 				"strange breath #8",
 				"strange breath #9"
+#else
+				"破片",
+				"炎",
+				"冷気",
+				"睡眠ガス",
+				"死の光線",
+				"稲妻",
+				"毒ガス",
+				"酸",
+				"strange breath #8",
+				"strange breath #9"
+#endif
 };
 
 /* hero is hit by something other than a monster */
@@ -51,34 +72,62 @@
 	    knm = strcpy(knmbuf, killer_xname(obj));
 	    kprefix = KILLED_BY;  /* killer_name supplies "an" if warranted */
 	} else {
+#if 0 /*JP*/
 	    knm = name;
 	    /* [perhaps ought to check for plural here to] */
 	    if (!strncmpi(name, "the ", 4) ||
 		    !strncmpi(name, "an ", 3) ||
 		    !strncmpi(name, "a ", 2)) kprefix = KILLED_BY;
+#else
+	    knm = strcpy(knmbuf, name);
+#endif
 	}
+#if 1 /*JP*/
+        strcat(knmbuf, "に当たって");
+#endif
 	onm = (obj && obj_is_pname(obj)) ? the(name) :
 			    (obj && obj->quan > 1L) ? name : an(name);
 	is_acid = (obj && obj->otyp == ACID_VENOM);
 
 	if(u.uac + tlev <= rnd(20)) {
+/*JP
 		if(Blind || !flags.verbose) pline("It misses.");
+*/
+		if(Blind || !flags.verbose) pline("それははずれた．");
+/*JP
 		else You("are almost hit by %s.", onm);
+*/
+		else pline("もう少しで%sに命中するところだった！",onm);
 		return(0);
 	} else {
+/*JP
 		if(Blind || !flags.verbose) You("are hit!");
+*/
+		if(Blind || !flags.verbose) pline("何かがあなたに命中した！");
+/*JP
 		else You("are hit by %s%s", onm, exclam(dam));
+*/
+		else pline("%sがあなたに命中した！", onm);
 
 		if (obj && objects[obj->otyp].oc_material == SILVER
 				&& hates_silver(youmonst.data)) {
 			dam += rnd(20);
+/*JP
 			pline_The("silver sears your flesh!");
+*/
+			pline("あなたの体は銀で焼かれた！");
 			exercise(A_CON, FALSE);
 		}
 		if (is_acid && Acid_resistance)
+/*JP
 			pline("It doesn't seem to hurt you.");
+*/
+			pline("あなたは傷つかなかった．");
 		else {
+/*JP
 			if (is_acid) pline("It burns!");
+*/
+			if (is_acid) pline("酸で焼かれた！");
 			if (Half_physical_damage) dam = (dam+1) / 2;
 			losehp(dam, knm, kprefix);
 			exercise(A_STR, FALSE);
@@ -136,8 +185,13 @@
 		}
 	} else if (objects[obj->otyp].oc_dir & EXPLOSION) {
 	    	if (cansee(bhitpos.x,bhitpos.y)) 
+#if 0 /*JP*/
 	    		pline("%s explodes in a ball of fire!", Doname2(obj));
 	    	else You_hear("an explosion");
+#else
+	    		pline("%sは火の玉を上げて爆発した！", Doname2(obj));
+	    	else You("爆発音を聞いた．");
+#endif
 		explode(bhitpos.x, bhitpos.y, -ZT_SPELL(ZT_FIRE), d(3,8),
 		    EXPL_FIERY, WEAPON_CLASS);
 	}
@@ -148,9 +202,17 @@
 		  && is_ammo(obj) && ammo_and_launcher(obj, mwep)) {
 	  
 		if (cansee(bhitpos.x,bhitpos.y)) 
+#if 0 /*JP*/
 			pline("%s explodes in a ball of fire!", Doname2(obj));
+#else
+			pline("%sは火の玉を上げて爆発した！", Doname2(obj));
+#endif
 		else 
+#if 0 /*JP*/
 			You_hear("an explosion");
+#else
+			You_hear("爆発音を聞いた．");
+#endif
 
 		explode(bhitpos.x, bhitpos.y, -ZT_SPELL(ZT_FIRE),
 		    d(2,6), EXPL_FIERY, WEAPON_CLASS);
@@ -167,7 +229,11 @@
 		if (down_gate(x, y) != -1)
 			objgone = ship_object(obj, x, y, FALSE);
 		if (!objgone) {
+#if 0 /*JP*/
 			if (!flooreffects(obj,x,y,"fall")) { /* don't double-dip on damage */
+#else
+			if (!flooreffects(obj,x,y,"落ちる")) { /* don't double-dip on damage */
+#endif
 			    place_object(obj, x, y);
 			    if (!mtmp && x == u.ux && y == u.uy)
 				mtmp = &youmonst;
@@ -208,7 +274,10 @@
 	if (tmp < rnd(20)) {
 	    if (!ismimic) {
 		if (vis) miss(distant_name(otmp, mshot_xname), mtmp);
+/*JP
 		else if (verbose) pline("It is missed.");
+*/
+		else if (verbose) pline("何かがかすめた．");
 	    }
 	    if (!range) { /* Last position; object drops */
 		(void) drop_throw(mon, otmp, 0, mtmp->mx, mtmp->my);
@@ -230,7 +299,11 @@
 	    damage = dmgval(otmp, mtmp);
 # ifdef P_SPOON
             if (otmp->otyp == SPOON) {
+#if 0 /*JP*/
+            pline("スプーンは%sに当たるとキラリと光った．",
+#else
             pline("The spoon flashes brightly as it hits %s.",
+#endif
                    the(mon_nam(mtmp)));
             }
 # endif /* P_SPOON */
@@ -240,43 +313,74 @@
 	    if (ismimic) seemimic(mtmp);
 	    mtmp->msleeping = 0;
 	    if (vis) hit(distant_name(otmp,mshot_xname), mtmp, exclam(damage));
+/*JP
 	    else if (verbose) pline("%s is hit%s", Monnam(mtmp), exclam(damage));
+*/
+	    else if (verbose) pline("%sに命中した%s", Monnam(mtmp), exclam(damage));
 
 	    if (otmp->opoisoned && is_poisonable(otmp)) {
 		if (resists_poison(mtmp)) {
+#if 0 /*JP*/
 		    if (vis) pline_The("poison doesn't seem to affect %s.",
+#else
+		    if (vis) pline("%sは毒の影響を受けない．",
+#endif
 				   mon_nam(mtmp));
 		} else {
 		    if (rn2(30)) {
 			damage += rnd(6);
 		    } else {
+/*JP
 			if (vis) pline_The("poison was deadly...");
+*/
+			if (vis) pline("毒は致死量だった．．．");
 			damage = mtmp->mhp;
 		    }
 		}
 	    }
 	    if (objects[otmp->otyp].oc_material == SILVER &&
 		    hates_silver(mtmp->data)) {
+/*JP
 		if (vis) pline_The("silver sears %s flesh!",
+*/
+	        if (vis) pline("%sの体は銀で焼かれた！",
 				s_suffix(mon_nam(mtmp)));
+/*JP
 		else if (verbose) pline("Its flesh is seared!");
+*/
+		else if (verbose) pline("何者かの体は焼かれた！");
 	    }
 	    if (otmp->otyp == ACID_VENOM && cansee(mtmp->mx,mtmp->my)) {
 		if (resists_acid(mtmp)) {
 		    if (vis || verbose)
+/*JP
 			pline("%s is unaffected.", Monnam(mtmp));
+*/
+			pline("%sは影響を受けない．", Monnam(mtmp));
 		    damage = 0;
 		} else {
+/*JP
 		    if (vis) pline_The("acid burns %s!", mon_nam(mtmp));
+*/
+		    if (vis) pline("%sは酸で焼かれた！", mon_nam(mtmp));
+/*JP
 		    else if (verbose) pline("It is burned!");
+*/
+		    else if (verbose) pline("何かは焼かれた！");
 		}
 	    }
 	    mtmp->mhp -= damage;
 	    if (mtmp->mhp < 1) {
 		if (vis || verbose)
+#if 0 /*JP*/
 		    pline("%s is %s!", Monnam(mtmp),
 			(nonliving(mtmp->data) || !canspotmon(mtmp))
 			? "destroyed" : "killed");
+#else
+		    pline("%sは%s！", Monnam(mtmp),
+			(nonliving(mtmp->data) || !canspotmon(mtmp))
+			? "倒された" : "死んだ");
+#endif
 		/* don't blame hero for unknown rolling boulder trap */
 		if (!flags.mon_moving &&
 		    (otmp->otyp != BOULDER || range >= 0 || !otmp->otrapped))
@@ -288,7 +392,10 @@
 		    (uchar)(otmp->otyp == BLINDING_VENOM ? AT_SPIT : AT_WEAP),
 		    otmp)) {
 		if (vis && mtmp->mcansee)
+/*JP
 		    pline("%s is blinded by %s.", Monnam(mtmp), the(xname(otmp)));
+*/
+		    pline("%sは%sによって目が見えなくなった．", Monnam(mtmp), the(xname(otmp)));
 		mtmp->mcansee = 0;
 		tmp = (int)mtmp->mblinded + rnd(25) + 20;
 		if (tmp > 127) tmp = 127;
@@ -367,10 +474,18 @@
 	if (singleobj->cursed && (dx || dy) && !rn2(7)) {
 	    if(canseemon(mon) && flags.verbose) {
 		if(is_ammo(singleobj))
+/*JP
 		    pline("%s misfires!", Monnam(mon));
+*/
+		    pline("%sははずした！", Monnam(mon));
 		else
+#if 0 /*JP*/
 		    pline("%s as %s throws it!",
 			  Tobjnam(singleobj, "slip"), mon_nam(mon));
+#else
+		    pline("%sが投げようとしたとたん%sが滑った！",
+			  mon_nam(mon), xname(singleobj));
+#endif
 	    }
 	    dx = rn2(3)-1;
 	    dy = rn2(3)-1;
@@ -412,17 +527,31 @@
 			    singleobj->otyp <= LAST_GEM+9 /* 9 glass colors */
 			    && is_unicorn(youmonst.data)) {
 			if (singleobj->otyp > LAST_GEM) {
+/*JP
 			    You("catch the %s.", xname(singleobj));
+*/
+			    You("%sをつかまえた．", xname(singleobj));
+/*JP
 			    You("are not interested in %s junk.",
+*/
+			    You("%sのガラクタに興味はない．",
 				s_suffix(mon_nam(mon)));
 			    makeknown(singleobj->otyp);
 			    dropy(singleobj);
 			} else {
+/*JP
 			    You("accept %s gift in the spirit in which it was intended.",
+*/
+			    You("これが欲しかったんだと思いながら%sの贈り物を受けとった．",
 				s_suffix(mon_nam(mon)));
 			    (void)hold_another_object(singleobj,
+#if 0 /*JP*/
 				"You catch, but drop, %s.", xname(singleobj),
 				"You catch:");
+#else
+				"あなたは%sをつかまえたが，落した．", xname(singleobj),
+				"をつかまえた．");
+#endif
 			}
 			break;
 		    }
@@ -476,11 +605,20 @@
 					AT_SPIT : AT_WEAP), singleobj)) {
 			blindinc = rnd(25);
 			if(singleobj->otyp == CREAM_PIE) {
+/*JP
 			    if(!Blind) pline("Yecch!  You've been creamed.");
+*/
+			    if(!Blind) pline("ウェー．クリームをかぶった．");
+#if 0 /*JP*/
 			    else pline("There's %s sticky all over your %s.",
 				       something,
 				       body_part(FACE));
+#else
+			    else pline("あなたは%sにべとつくものを感じた．",
+					      body_part(FACE));
+#endif
 			} else if(singleobj->otyp == BLINDING_VENOM) {
+#if 0 /*JP*/
 			    int num_eyes = eyecount(youmonst.data);
 			    /* venom in the eyes */
 			    if(!Blind) pline_The("venom blinds you.");
@@ -488,6 +626,10 @@
 				      (num_eyes == 1) ? body_part(EYE) :
 						makeplural(body_part(EYE)),
 				      (num_eyes == 1) ? "s" : "");
+#else
+			    if(!Blind) pline("毒で目が見えなくなった．");
+			    else Your("%sはちくちくした．", makeplural(body_part(EYE)));
+#endif
 			}
 		    }
 		    if (hitu && singleobj->otyp == EGG) {
@@ -595,8 +737,12 @@
 
 	    if (canseemon(mtmp)) {
 		onm = xname(otmp);
+#if 0 /*JP*/
 		pline("%s thrusts %s.", Monnam(mtmp),
 		      obj_is_pname(otmp) ? the(onm) : an(onm));
+#else
+		pline("%sは%sを突き刺した．", Monnam(mtmp), onm);
+#endif
 	    }
 
 	    dam = dmgval(otmp, &youmonst);
@@ -690,7 +836,10 @@
 	    if (multishot > 1) {
 		/* "N arrows"; multishot > 1 implies otmp->quan > 1, so
 		   xname()'s result will already be pluralized */
+/*JP
 		Sprintf(onmbuf, "%d %s", multishot, xname(otmp));
+*/
+		Sprintf(onmbuf, "%d本の%s", multishot, xname(otmp));
 		onm = onmbuf;
 	    } else {
 		/* "an arrow" */
@@ -698,6 +847,7 @@
 		onm = obj_is_pname(otmp) ? the(onm) : an(onm);
 	    }
 	    m_shot.s = ammo_and_launcher(otmp,mwep) ? TRUE : FALSE;
+#if 0 /*JP*/
 	    pline("%s %s %s!", Monnam(mtmp),
 #ifdef FIREARMS
 		  m_shot.s ? is_bullet(otmp) ? "fires" : "shoots" : "throws",
@@ -705,6 +855,10 @@
 #else
 		  m_shot.s ? "shoots" : "throws", onm);
 #endif
+#else /*JP*/
+	    pline("%sは%sを%s！", Monnam(mtmp), onm,
+		  m_shot.s ? "撃った" : "投げた");
+#endif /*JP*/
 	    m_shot.o = otmp->otyp;
 	} else {
 	    m_shot.o = STRANGE_OBJECT;	/* don't give multishot feedback */
@@ -734,7 +888,10 @@
 	if(mtmp->mcan) {
 
 	    if(flags.soundok)
+/*JP
 		pline("A dry rattle comes from %s throat.",
+*/
+		pline("%sの喉がガラガラと鳴った．",
 		                      s_suffix(mon_nam(mtmp)));
 	    return 0;
 	}
@@ -753,7 +910,10 @@
 		}
 		if(!rn2(BOLT_LIM-distmin(mtmp->mx,mtmp->my,mtmp->mux,mtmp->muy))) {
 		    if (canseemon(mtmp))
+/*JP
 			pline("%s spits venom!", Monnam(mtmp));
+*/
+			pline("%sは毒を吐いた！", Monnam(mtmp));
 		    m_throw(mtmp, mtmp->mx, mtmp->my, sgn(tbx), sgn(tby),
 			distmin(mtmp->mx,mtmp->my,mtmp->mux,mtmp->muy), otmp);
 		    nomul(0);
@@ -779,9 +939,15 @@
 	    if(mtmp->mcan) {
 		if(flags.soundok) {
 		    if(canseemon(mtmp))
+/*JP
 			pline("%s coughs.", Monnam(mtmp));
+*/
+			pline("%sはせきをした．", Monnam(mtmp));
 		    else
+/*JP
 			You_hear("a cough.");
+*/
+			You_hear("せきの音を聞いた．");
 		}
 		return(0);
 	    }
@@ -790,7 +956,10 @@
 		if((typ >= AD_MAGM) && (typ <= AD_ACID)) {
 
 		    if(canseemon(mtmp))
+/*JP
 			pline("%s breathes %s!", Monnam(mtmp),
+*/
+			pline("%sは%sのブレスを吐いた！", Monnam(mtmp),
 			      breathwep[typ-1]);
 		    buzz((int) (-20 - (typ-1)), (int)mattk->damn,
 			 mtmp->mx, mtmp->my, sgn(tbx), sgn(tby));
@@ -822,7 +991,10 @@
 
 	if((typ >= AD_MAGM) && (typ <= AD_ACID)) {
 		if(canseemon(mtmp))
+/*JP
 			pline("%s breathes %s!", Monnam(mtmp),
+*/
+			pline("%sは%sのブレスを吐いた！", Monnam(mtmp),
 				breathwep[typ-1]);
 		/* Do the door first - monster is ON TOP so call direct */
 		zap_over_floor(mtmp->mx, mtmp->my, (int) (-20 - (typ-1)), NULL);
@@ -946,13 +1118,22 @@
 	    *obj_p = otmp = 0;		/* object is now gone */
 	    /* breakage makes its own noises */
 	else if (obj_type == BOULDER || obj_type == HEAVY_IRON_BALL)
+/*JP
 	    pline("Whang!");
+*/
+	    pline("ぐわーん！");
 	else if (otmp->oclass == COIN_CLASS ||
 		objects[obj_type].oc_material == GOLD ||
 		objects[obj_type].oc_material == SILVER)
+/*JP
 	    pline("Clink!");
+*/
+	    pline("チャリン！");
 	else
+/*JP
 	    pline("Clonk!");
+*/
+	    pline("ゴツン！");
     }
 
     return hits;
diff -aurN slashem-0.0.7E6F2/src/muse.c jslashem-0.0.7E6F2-J0.0.8/src/muse.c
--- slashem-0.0.7E6F2/src/muse.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/muse.c	2004-06-27 19:09:18.000000000 +0900
@@ -3,6 +3,14 @@
 /* NetHack may be freely redistributed.  See license for details.  */
 
 /*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+/*
  * Monster item usage routines.
  */
 
@@ -65,7 +73,10 @@
 
 	if (obj->oclass == POTION_CLASS) {
 	    coord cc;
+/*JP
 	    static const char *empty = "The potion turns out to be empty.";
+*/
+	    static const char *empty = "薬は空っぽであることがわかった．";
 	    const char *potion_descr;
 	    struct monst *mtmp;
 #define POTION_OCCUPANT_CHANCE(n) (13 + 2*(n))	/* also in potion.c */
@@ -82,10 +93,19 @@
 			if (vis) pline(empty);
 		    } else {
 			if (vis) {
+/*JP
 			    pline("As %s opens the bottle, an enormous %s emerges!",
+*/
+			pline("%sが瓶を開けると，巨大な%sが出てきた！",
 			       mon_nam(mon),
+/*JP
 			       Hallucination ? rndmonnam() : (const char *)"ghost");
+*/
+			       jtrns_mon(Hallucination ? rndmonnam() : (const char *)"ghost"));
+/*JP
 			    pline("%s is frightened to death, and unable to move.",
+*/
+			pline("%sはまっさおになって驚き，動けなくなった．",
 				    Monnam(mon));
 			}
 			mon->mcanmove = 0;
@@ -105,18 +125,33 @@
 		    if (vis) pline(empty);
 		} else {
 		    if (vis)
+/*JP
 			pline("In a cloud of smoke, %s emerges!",
+*/
+			pline("煙の中から，%sが現われた！",
 							a_monnam(mtmp));
+/*JP
 		    pline("%s speaks.", vis ? Monnam(mtmp) : Something);
+*/
+		    pline("%sは話した．", vis ? Monnam(mtmp) : Something);
 		/* I suspect few players will be upset that monsters */
 		/* can't wish for wands of death here.... */
 		    if (rn2(2)) {
+/*JP
 			verbalize("You freed me!");
+*/
+		        verbalize("解放してくれたのはお前か！");
 			mtmp->mpeaceful = 1;
 			set_malign(mtmp);
 		    } else {
+/*JP
 			verbalize("It is about time.");
+*/
+			verbalize("さらばだ！");
+/*JP
 			if (vis) pline("%s vanishes.", Monnam(mtmp));
+*/
+			if (vis) pline("%sは消えた．", Monnam(mtmp));
 			mongone(mtmp);
 		    }
 		}
@@ -127,9 +162,15 @@
 	    int dam = d(obj->spe+2, 6);
 
 	    if (flags.soundok) {
+/*JP
 		if (vis) pline("%s zaps %s, which suddenly explodes!",
+*/
+		if (vis) pline("%sは%sをふりかざした，それは突然爆発した！",
 			Monnam(mon), an(xname(obj)));
+/*JP
 		else You_hear("a zap and an explosion in the distance.");
+*/
+		else You_hear("遠方の杖の音と爆発音を聞いた．");
 	    }
 	    m_useup(mon, obj);
 	    if (mon->mhp <= dam) {
@@ -151,14 +192,28 @@
 {
 	if (!canseemon(mtmp)) {
 		if (flags.soundok)
+#if 0 /*JP*/
 			You_hear("a %s zap.",
 					(distu(mtmp->mx,mtmp->my) <= (BOLT_LIM+1)*(BOLT_LIM+1)) ?
 					"nearby" : "distant");
+#else
+			You_hear("%sくで杖の音を聞いた．",
+			    (distu(mtmp->mx,mtmp->my) <= (BOLT_LIM+1)*(BOLT_LIM+1)) ?
+			    "近" : "遠");
+#endif
 	} else if (self)
+#if 0 /*JP*/
 		pline("%s zaps %sself with %s!",
 		      Monnam(mtmp), mhim(mtmp), doname(otmp));
+#else
+		pline("%sは自分自身に%sをふりかざした！",
+		      Monnam(mtmp),  doname(otmp));
+#endif
 	else {
+/*JP
 		pline("%s zaps %s!", Monnam(mtmp), an(xname(otmp)));
+*/
+		pline("%sは%sをふりかざした！", Monnam(mtmp), an(xname(otmp)));
 		stop_occupation();
 	}
 }
@@ -190,15 +245,24 @@
 	otmp->bknown = savebknown;
 
 	if (vismon)
+/*JP
 	    pline("%s reads %s!", Monnam(mtmp), onambuf);
+*/
+	    pline("%sは%sを読んだ！", Monnam(mtmp), onambuf);
 	else
+/*JP
 	    You_hear("%s reading %s.",
+*/
+	    You_hear("%sが%sを読んでいる声を聞いた．",
 		x_monnam(mtmp, ARTICLE_A, (char *)0,
 		    (SUPPRESS_IT|SUPPRESS_INVISIBLE|SUPPRESS_SADDLE), FALSE),
 		onambuf);
 
 	if (mtmp->mconf)
+/*JP
 	    pline("Being confused, %s mispronounces the magic words...",
+*/
+	    pline("混乱しているので，%sは呪文を間違って唱えてしまった．．．",
 		  vismon ? mon_nam(mtmp) : mhe(mtmp));
 }
 
@@ -209,10 +273,16 @@
 {
 	if (canseemon(mtmp)) {
 		otmp->dknown = 1;
+/*JP
 		pline("%s drinks %s!", Monnam(mtmp), singular(otmp, doname));
+*/
+		pline("%sは%sを飲んだ！", Monnam(mtmp), singular(otmp, doname));
 	} else
 		if (flags.soundok)
+/*JP
 			You_hear("a chugging sound.");
+*/
+			You_hear("ゴクッ！という音を聞いた．");
 }
 
 /* Defines for various types of stuff.  The order in which monsters prefer
@@ -565,7 +635,10 @@
 	int i, fleetim, how = 0;
 	struct obj *otmp = m.defensive;
 	boolean vis, vismon, oseen;
+/*JP
 	const char *mcsa = "%s can see again.";
+*/
+	const char *mcsa = "%sはまた見えるようになった．";
 
 	if ((i = precheck(mtmp, otmp)) != 0) return i;
 	vis = cansee(mtmp->mx, mtmp->my);
@@ -582,9 +655,15 @@
 	case MUSE_UNICORN_HORN:
 		if (vismon) {
 		    if (otmp)
+/*JP
 			pline("%s uses a unicorn horn!", Monnam(mtmp));
+*/
+			pline("%sはユニコーンの角を使った！", Monnam(mtmp));
 		    else
+/*JP
 			pline_The("tip of %s's horn glows!", mon_nam(mtmp));
+*/
+			pline("%sの角の先端が輝いた！", mon_nam(mtmp));
 		}
 		if (!mtmp->mcansee) {
 		    mtmp->mcansee = 1;
@@ -593,14 +672,23 @@
 		} else if (mtmp->mconf || mtmp->mstun) {
 		    mtmp->mconf = mtmp->mstun = 0;
 		    if (vismon)
+/*JP
 			pline("%s seems steadier now.", Monnam(mtmp));
+*/
+			pline("%sは平静をとりもどした．", Monnam(mtmp));
 		} else impossible("No need for unicorn horn?");
 		return 2;
 	case MUSE_BUGLE:
 		if (vismon)
+/*JP
 			pline("%s plays %s!", Monnam(mtmp), doname(otmp));
+*/
+			pline("%sは%sを吹いた！", Monnam(mtmp), doname(otmp));
 		else if (flags.soundok)
+/*JP
 			You_hear("a bugle playing reveille!");
+*/
+			You("起床ラッパの音を聞いた！");
 		awaken_soldiers();
 		return 2;
 	case MUSE_WAN_TELEPORTATION_SELF:
@@ -625,7 +713,10 @@
 #endif
 			On_W_tower_level(&u.uz)) && !rn2(3)) {
 		    if (vismon)
+/*JP
 			pline("%s seems disoriented for a moment.",
+*/
+			pline("%sは一瞬方向感覚を失った．",
 				Monnam(mtmp));
 		    return 2;
 		}
@@ -658,14 +749,20 @@
 
 			if (mon_has_amulet(mtmp) || In_endgame(&u.uz)) {
 			    if (vismon)
+/*JP
 				pline("%s seems very disoriented for a moment.",
+*/
+				pline("%sは一瞬方向感覚を失った．",
 					Monnam(mtmp));
 			    return 2;
 			}
 			nlev = random_teleport_level();
 			if (nlev == depth(&u.uz)) {
 			    if (vismon)
+/*JP
 				pline("%s shudders for a moment.",
+*/
+				pline("%sは一瞬震えた．",
 								Monnam(mtmp));
 			    return 2;
 			}
@@ -688,12 +785,18 @@
 		    (is_drawbridge_wall(mtmp->mx, mtmp->my) >= 0) ||
 		    (sstairs.sx && sstairs.sx == mtmp->mx &&
 				   sstairs.sy == mtmp->my)) {
+/*JP
 			pline_The("digging ray is ineffective.");
+*/
+			pline("掘削の光は効果がない．");
 			return 2;
 		}
 		if (!Can_dig_down(&u.uz)) {
 		    if(canseemon(mtmp))
+/*JP
 			pline_The("%s here is too hard to dig in.",
+*/
+			pline("ここの%sは固くて掘れない．",
 					surface(mtmp->mx, mtmp->my));
 		    return 2;
 		}
@@ -701,12 +804,25 @@
 		if (!ttmp) return 2;
 		seetrap(ttmp);
 		if (vis) {
+#if 0 /*JP*/
 		    pline("%s has made a hole in the %s.", Monnam(mtmp),
 				surface(mtmp->mx, mtmp->my));
+#else
+		    pline("%sは%sに穴を開けた．", Monnam(mtmp),
+				surface(mtmp->mx, mtmp->my));
+#endif
+#if 0 /*JP*/
 		    pline("%s %s through...", Monnam(mtmp),
 			  is_flyer(mtmp->data) ? "dives" : "falls");
+#else
+		    pline("%sは通り抜けて%s．．．", Monnam(mtmp),
+			  is_flyer(mtmp->data) ? "飛びこんだ" : "落ちた");
+#endif
 		} else if (flags.soundok)
+/*JP
 			You_hear("%s crash through the %s.", something,
+*/
+			You_hear("何かが%sを通り抜けて落ちる音を聞いた．．．",
 				surface(mtmp->mx, mtmp->my));
 		/* we made sure that there is a level for mtmp to go to */
 		migrate_to_level(mtmp, ledger_no(&u.uz) + 1,
@@ -788,9 +904,15 @@
 		if (vis) {
 			struct trap *t;
 			t = t_at(trapx,trapy);
+#if 0 /*JP*/
 			pline("%s %s into a %s!", Monnam(mtmp),
 			makeplural(locomotion(mtmp->data, "jump")),
 			t->ttyp == TRAPDOOR ? "trap door" : "hole");
+#else
+			pline("%sは%sに%s入った！", Monnam(mtmp),
+			      t->ttyp == TRAPDOOR ? "落し扉" : "穴",
+			      jconj(locomotion(mtmp->data, "飛ぶ"), "て"));
+#endif
 			if (levl[trapx][trapy].typ == SCORR) {
 			    levl[trapx][trapy].typ = CORR;
 			    unblock_point(trapx, trapy);
@@ -819,7 +941,10 @@
 			if (mon_has_special(mtmp))
 				return 0;
 			if (vismon)
+/*JP
 			    pline("%s escapes the dungeon!", Monnam(mtmp));
+*/
+			    pline("%sは迷宮から逃走した！", Monnam(mtmp));
 			mongone(mtmp);
 			return 2;
 		}
@@ -827,7 +952,10 @@
 		if (Inhell && mon_has_amulet(mtmp) && !rn2(4) &&
 			(dunlev(&u.uz) < dunlevs_in_dungeon(&u.uz) - 3)) {
 		    if (vismon) pline(
+/*JP
      "As %s climbs the stairs, a mysterious force momentarily surrounds %s...",
+*/
+     "%sが階段をのぼろうとすると奇妙な力が%sをつつんだ．．．",
 				     mon_nam(mtmp), mhim(mtmp));
 		    /* simpler than for the player; this will usually be
 		       the Wizard and he'll immediately go right to the
@@ -836,26 +964,38 @@
 		    migrate_to_level(mtmp, ledger_no(&u.uz) + 1,
 				     MIGR_RANDOM, (coord *)0);
 		} else {
+/*JP
 		    if (vismon) pline("%s escapes upstairs!", Monnam(mtmp));
+*/
+		    if (vismon) pline("%sは階段をのぼって逃げた！", Monnam(mtmp));
 		    migrate_to_level(mtmp, ledger_no(&u.uz) - 1,
 				     MIGR_STAIRS_DOWN, (coord *)0);
 		}
 		return 2;
 	case MUSE_DOWNSTAIRS:
 		m_flee(mtmp);
+/*JP
 		if (vismon) pline("%s escapes downstairs!", Monnam(mtmp));
+*/
+		if (vismon) pline("%sは階段を降りて逃げた！", Monnam(mtmp));
 		migrate_to_level(mtmp, ledger_no(&u.uz) + 1,
 				 MIGR_STAIRS_UP, (coord *)0);
 		return 2;
 	case MUSE_UP_LADDER:
 		m_flee(mtmp);
+/*JP
 		if (vismon) pline("%s escapes up the ladder!", Monnam(mtmp));
+*/
+		if (vismon) pline("%sははしごをのぼって逃げた！", Monnam(mtmp));
 		migrate_to_level(mtmp, ledger_no(&u.uz) - 1,
 				 MIGR_LADDER_DOWN, (coord *)0);
 		return 2;
 	case MUSE_DN_LADDER:
 		m_flee(mtmp);
+/*JP
 		if (vismon) pline("%s escapes down the ladder!", Monnam(mtmp));
+*/
+		if (vismon) pline("%sははしごを降りて逃げた！", Monnam(mtmp));
 		migrate_to_level(mtmp, ledger_no(&u.uz) + 1,
 				 MIGR_LADDER_UP, (coord *)0);
 		return 2;
@@ -865,22 +1005,32 @@
 		/* regular stairs, not sstairs.			*/
 		if (sstairs.up) {
 			if (vismon)
+/*JP
 			    pline("%s escapes upstairs!", Monnam(mtmp));
+*/
+			    pline("%sは階段をのぼって逃げた！", Monnam(mtmp));
 			if(Inhell) {
 			    migrate_to_level(mtmp, ledger_no(&sstairs.tolev),
 					     MIGR_RANDOM, (coord *)0);
 			    return 2;
 			}
 		} else	if (vismon)
+/*JP
 		    pline("%s escapes downstairs!", Monnam(mtmp));
+*/
+		    pline("%sは階段を降りて逃げた！", Monnam(mtmp));
 		migrate_to_level(mtmp, ledger_no(&sstairs.tolev),
 				 MIGR_SSTAIRS, (coord *)0);
 		return 2;
 	case MUSE_TELEPORT_TRAP:
 		m_flee(mtmp);
 		if (vis) {
+#if 0 /*JP*/
 			pline("%s %s onto a teleport trap!", Monnam(mtmp),
 				makeplural(locomotion(mtmp->data, "jump")));
+#else
+			pline("%sは瞬間移動の罠に飛び込んだ！", Monnam(mtmp));
+#endif
 			if (levl[trapx][trapy].typ == SCORR) {
 			    levl[trapx][trapy].typ = CORR;
 			    unblock_point(trapx, trapy);
@@ -903,7 +1053,11 @@
 		mtmp->mhp += i;
 		if (mtmp->mhp > mtmp->mhpmax) mtmp->mhp = ++mtmp->mhpmax;
 		if (!otmp->cursed) mtmp->mcansee = 1;
+#if 0 /*JP*/
 		if (vismon) pline("%s begins to look better.", Monnam(mtmp));
+#else
+		if (vismon) pline("%sは気分がよくなってきたようだ．", Monnam(mtmp));
+#endif
 		if (oseen) makeknown(WAN_HEALING);
 		return 2;
 	case MUSE_WAN_EXTRA_HEALING:
@@ -913,7 +1067,11 @@
 		mtmp->mhp += i;
 		if (mtmp->mhp > mtmp->mhpmax) mtmp->mhp = ++mtmp->mhpmax;
 		if (!otmp->cursed) mtmp->mcansee = 1;
+#if 0 /*JP*/
 		if (vismon) pline("%s begins to look better.", Monnam(mtmp));
+#else
+		if (vismon) pline("%sは気分がよくなってきたようだ．", Monnam(mtmp));
+#endif
 		if (oseen) makeknown(WAN_EXTRA_HEALING);
 		return 2;
 	case MUSE_POT_HEALING:
@@ -926,7 +1084,10 @@
 			mtmp->mblinded = 0;
 			if (vismon) pline(mcsa, Monnam(mtmp));
 		}
+/*JP
 		if (vismon) pline("%s looks better.", Monnam(mtmp));
+*/
+		if (vismon) pline("%sは気分がよくなったようだ．", Monnam(mtmp));
 		if (oseen) makeknown(POT_HEALING);
 		m_useup(mtmp, otmp);
 		return 2;
@@ -941,7 +1102,10 @@
 			mtmp->mblinded = 0;
 			if (vismon) pline(mcsa, Monnam(mtmp));
 		}
+/*JP
 		if (vismon) pline("%s looks much better.", Monnam(mtmp));
+*/
+		if (vismon) pline("%sとても気分がよくなったようだ．", Monnam(mtmp));
 		if (oseen) makeknown(POT_EXTRA_HEALING);
 		m_useup(mtmp, otmp);
 		return 2;
@@ -954,7 +1118,10 @@
 			mtmp->mblinded = 0;
 			if (vismon) pline(mcsa, Monnam(mtmp));
 		}
+/*JP
 		if (vismon) pline("%s looks completely healed.", Monnam(mtmp));
+*/
+		if (vismon) pline("%sは完全に回復したようだ．", Monnam(mtmp));
 		if (oseen) makeknown(otmp->otyp);
 		m_useup(mtmp, otmp);
 		return 2;
@@ -964,10 +1131,16 @@
 		    i = rnd(8) + rnd(2);
 		    mtmp->mhp += i;
 		    mtmp->mhpmax += i;
+/*JP
 		    if (vismon) pline("%s looks full of life.", Monnam(mtmp));
+*/
+		    if (vismon) pline("%sは生命に満ちているように見える．", Monnam(mtmp));
 		}
 		else if (vismon)
+/*JP
 		    pline("%s discards the congealed blood in disgust.", Monnam(mtmp));
+*/
+		    pline("%sは凝固した血液をいまいましそうに投げ捨てた．", Monnam(mtmp));
 		if (oseen) makeknown(POT_VAMPIRE_BLOOD);
 		m_useup(mtmp, otmp);
 		return 2;
@@ -1234,26 +1407,47 @@
 			if (zap_oseen) makeknown(WAN_STRIKING);
 			if (Antimagic) {
 			    shieldeff(u.ux, u.uy);
+/*JP
 			    pline("Boing!");
+*/
+			    pline("ボイン！");
 			} else if (rnd(20) < 10 + u.uac) {
+/*JP
 			    pline_The("wand hits you!");
+*/
+			    pline("杖はあなたに命中した！");
 			    tmp = d(2,12);
 			    if(Half_spell_damage) tmp = (tmp+1) / 2;
+/*JP
 			    losehp(tmp, "wand", KILLED_BY_AN);
+*/
+			    losehp(tmp, "衝撃の杖によって", KILLED_BY_AN);
+/*JP
 			} else pline_The("wand misses you.");
+*/
+			} else pline("杖ははずれた．");
 			stop_occupation();
 			nomul(0);
 		} else if (resists_magm(mtmp)) {
 			shieldeff(mtmp->mx, mtmp->my);
+/*JP
 			pline("Boing!");
+*/
+			pline("ボイン！");
 		} else if (rnd(20) < 10+find_mac(mtmp)) {
 			tmp = d(2,12);
+/*JP
 			hit("wand", mtmp, exclam(tmp));
+*/
+			hit("杖", mtmp, exclam(tmp));
 			(void) resist(mtmp, otmp->oclass, tmp, TELL);
 			if (cansee(mtmp->mx, mtmp->my) && zap_oseen)
 				makeknown(WAN_STRIKING);
 		} else {
+/*JP
 			miss("wand", mtmp);
+*/
+			miss("杖", mtmp);
 			if (cansee(mtmp->mx, mtmp->my) && zap_oseen)
 				makeknown(WAN_STRIKING);
 		}
@@ -1267,7 +1461,10 @@
 			if (mtmp->ispriest &&
 				*in_rooms(mtmp->mx, mtmp->my, TEMPLE)) {
 			    if (cansee(mtmp->mx, mtmp->my))
+/*JP
 				pline("%s resists the magic!", Monnam(mtmp));
+*/
+				pline("%sは魔法を防いだ！", Monnam(mtmp));
 			    mtmp->msleeping = 0;
 			    if(mtmp->m_ap_type) seemimic(mtmp);
 			} else if (!tele_restrict(mtmp))
@@ -1283,9 +1480,16 @@
 		if (mtmp == &youmonst) {
 			if (Drain_resistance) {
 				shieldeff(u.ux, u.uy);
+/*JP
 				pline("Boing!");
+*/
+				pline("ボイン！");
 			} else
+#if 0 /*JP*/
 				losexp("life drainage", FALSE);
+#else
+				losexp("生命力を吸収されて", FALSE);
+#endif
 			if (zap_oseen)
 				makeknown(WAN_DRAINING);
 			break;
@@ -1300,7 +1504,10 @@
 			else {
 				mtmp->m_lev--;
 				if (canseemon(mtmp)) {
+/*JP
 					pline("%s suddenly seems weaker!", Monnam(mtmp));
+*/
+					pline("%sは突然弱くなったように見えた！", Monnam(mtmp));
 				}
 			}
 		}
@@ -1457,9 +1664,15 @@
 	case MUSE_FROST_HORN:
 		if (oseen) {
 			makeknown(otmp->otyp);
+/*JP
 			pline("%s plays a %s!", Monnam(mtmp), xname(otmp));
+*/
+			pline("%sは%sを吹いた！", Monnam(mtmp), xname(otmp));
 		} else
+/*JP
 			You_hear("a horn being played.");
+*/
+			You_hear("ホルンの音を聞いた．");
 		otmp->spe--;
 		m_using = TRUE;
 		buzz(-30 - ((otmp->otyp==FROST_HORN) ? AD_COLD-1 : AD_FIRE-1),
@@ -1489,12 +1702,22 @@
 		mreadmsg(mtmp, otmp);
 	    	/* Identify the scroll */
 		if (canspotmon(mtmp)) {
+#if 0 /*JP*/
 		    pline_The("%s rumbles %s %s!", ceiling(mtmp->mx, mtmp->my),
 	    			otmp->blessed ? "around" : "above",
 				mon_nam(mtmp));
+#else
+		    pline("%sの%sの%sからゴロゴロと音が聞こえてきた．",
+			  mon_nam(mtmp),
+			  otmp->blessed ? "まわり" : "真上",
+			  ceiling(mtmp->mx, mtmp->my));
+#endif
 		    if (oseen) makeknown(otmp->otyp);
 		} else if (cansee(mtmp->mx, mtmp->my)) {
+/*JP
 		    pline_The("%s rumbles in the middle of nowhere!",
+*/
+		    pline_The("どこかの%sからゴロゴロと音が聞こえてきた．",
 			ceiling(mtmp->mx, mtmp->my));
 		    if (mtmp->minvis)
 			map_invisible(mtmp->mx, mtmp->my);
@@ -1531,8 +1754,13 @@
 				int mdmg;
 
 				if (cansee(mtmp2->mx, mtmp2->my)) {
+#if 0 /*JP*/
 				    pline("%s is hit by %s!", Monnam(mtmp2),
 	    	    	    			doname(otmp2));
+#else
+				    pline("%sは%sに命中した！",
+					  doname(otmp2), Monnam(mtmp2));
+#endif
 				    if (mtmp2->minvis && !canspotmon(mtmp2))
 					map_invisible(mtmp2->mx, mtmp2->my);
 				}
@@ -1540,25 +1768,40 @@
 				if (helmet) {
 				    if(is_metallic(helmet)) {
 					if (canspotmon(mtmp2))
+/*JP
 					    pline("Fortunately, %s is wearing a hard helmet.", mon_nam(mtmp2));
+*/
+					    pline("幸運にも%sは固い兜を身につけている．", mon_nam(mtmp2));
 					else if (flags.soundok)
+/*JP
 					    You_hear("a clanging sound.");
+*/
+					    You_hear("ガツーンという音を聞いた．");
 					if (mdmg > 2) mdmg = 2;
 				    } else {
 					if (canspotmon(mtmp2))
+/*JP
 					    pline("%s's %s does not protect %s.",
+*/
+					    pline("%sの%sでは%sを防げない．",
 						Monnam(mtmp2), xname(helmet),
 						mhim(mtmp2));
 				    }
 				}
 	    	    	    	mtmp2->mhp -= mdmg;
 	    	    	    	if (mtmp2->mhp <= 0) {
+/*JP
 				    pline("%s is killed.", Monnam(mtmp2));
+*/
+				    pline("%sは死んだ．", Monnam(mtmp2));
 	    	    	    	    mondied(mtmp2);
 				}
 	    	    	    }
 	    	    	    /* Drop the rock/boulder to the floor */
+/*JP
 	    	    	    if (!flooreffects(otmp2, x, y, "fall")) {
+*/
+	    	    	    if (!flooreffects(otmp2, x, y, "落ちる")) {
 	    	    	    	place_object(otmp2, x, y);
 	    	    	    	stackobj(otmp2);
 	    	    	    	newsym(x, y);  /* map the rock */
@@ -1582,25 +1825,42 @@
 			    !Passes_walls &&
 			    !noncorporeal(youmonst.data) &&
 			    !unsolid(youmonst.data)) {
+/*JP
 			You("are hit by %s!", doname(otmp2));
+*/
+			You("%sはあなたに命中した！", doname(otmp2));
 			dmg = dmgval(otmp2, &youmonst) * otmp2->quan;
 			if (uarmh) {
 			    if(is_metallic(uarmh)) {
+/*JP
 				pline("Fortunately, you are wearing a hard helmet.");
+*/
+				pline("幸運にも，あなたは固い兜を身につけていた．");
 				if (dmg > 2) dmg = 2;
 			    } else if (flags.verbose) {
+#if 0 /*JP*/
 				Your("%s does not protect you.",
 						xname(uarmh));
+#else
+				Your("%sでは防げない．",
+						xname(uarmh));
+#endif
 			    }
 			}
 		    } else
 			dmg = 0;
+/*JP
 		    if (!flooreffects(otmp2, u.ux, u.uy, "fall")) {
+*/
+		    if (!flooreffects(otmp2, u.ux, u.uy, "落ちる")) {
 			place_object(otmp2, u.ux, u.uy);
 			stackobj(otmp2);
 			newsym(u.ux, u.uy);
 		    }
+/*JP
 		    if (dmg) losehp(dmg, "scroll of earth", KILLED_BY_AN);
+*/
+		    if (dmg) losehp(dmg, "大地の巻物で", KILLED_BY_AN);
 		}
 	    xxx_noobj:
 
@@ -1667,7 +1927,10 @@
 		 */
 		if (cansee(mtmp->mx, mtmp->my)) {
 			otmp->dknown = 1;
+/*JP
 			pline("%s hurls %s!", Monnam(mtmp),
+*/
+			pline("%sは%sを強く投げつけた！", Monnam(mtmp),
 						singular(otmp, doname));
 		}
 		m_throw(mtmp, mtmp->mx, mtmp->my, sgn(mtmp->mux-mtmp->mx),
@@ -1892,7 +2155,10 @@
 			/* insurance against future changes... */
 			if(on_level(&tolevel, &u.uz)) goto skipmsg;
 			if (vismon) {
+/*JP
 			    pline("%s rises up, through the %s!",
+*/
+			    pline("%sは%sを突き抜けた！",
 				  Monnam(mtmp), ceiling(mtmp->mx, mtmp->my));
 			    if(!objects[POT_GAIN_LEVEL].oc_name_known
 			      && !objects[POT_GAIN_LEVEL].oc_uname)
@@ -1905,7 +2171,10 @@
 		    } else {
 skipmsg:
 			if (vismon) {
+/*JP
 			    pline("%s looks uneasy.", Monnam(mtmp));
+*/
+			    pline("%sは不安げに見える．", Monnam(mtmp));
 			    if(!objects[POT_GAIN_LEVEL].oc_name_known
 			      && !objects[POT_GAIN_LEVEL].oc_uname)
 				docall(otmp);
@@ -1914,7 +2183,10 @@
 			return 2;
 		    }
 		}
+/*JP
 		if (vismon) pline("%s seems more experienced.", Monnam(mtmp));
+*/
+		if (vismon) pline("%sは経験を積んだように見える．", Monnam(mtmp));
 		if (oseen) makeknown(POT_GAIN_LEVEL);
 		m_useup(mtmp, otmp);
 		if (!grow_up(mtmp,(struct monst *)0)) return 1;
@@ -1932,11 +2204,20 @@
 		mon_set_minvis(mtmp);
 		if (vismon && mtmp->minvis) {	/* was seen, now invisible */
 		    if (See_invisible)
+#if 0 /*JP*/
 			pline("%s body takes on a %s transparency.",
 			      s_suffix(nambuf),
 			      Hallucination ? "normal" : "strange");
+#else
+		        pline("%s%sの体は透過性をもった．",
+			      Hallucination ? "あたりまえなことだが" : "奇妙なことに",
+			      nambuf);
+#endif
 		    else
+/*JP
 			pline("Suddenly you cannot see %s.", nambuf);
+*/
+			pline("%sは突然見えなくなった．", nambuf);
 		    if (oseen) makeknown(otmp->otyp);
 		}
 		if (otmp->otyp == POT_INVISIBILITY) {
@@ -1964,7 +2245,10 @@
 #if 0
 		(void) newcham(mtmp, muse_newcham_mon(), TRUE, vismon);
 #else
+/*JP
 		(void) mon_poly(mtmp, FALSE, "%s changes!");
+*/
+		(void) mon_poly(mtmp, FALSE, "%sは姿を変えた！");
 #endif
 		if (oseen) makeknown(WAN_POLYMORPH);
 		return 2;
@@ -1974,16 +2258,24 @@
 		if (vismon) pline("%s suddenly mutates!", Monnam(mtmp));
 		(void) newcham(mtmp, muse_newcham_mon(mtmp), FALSE, vismon);
 #else
+/*JP
 		(void) mon_poly(mtmp, FALSE, "%s suddenly mutates!");
+*/
+		(void) mon_poly(mtmp, FALSE, "%sは突然変化した！");
 #endif
 		if (oseen) makeknown(POT_POLYMORPH);
 		m_useup(mtmp, otmp);
 		return 2;
 	case MUSE_POLY_TRAP:
 		if (vismon)
+#if 0 /*JP*/
 		    pline("%s deliberately %s onto a polymorph trap!",
 			Monnam(mtmp),
 			makeplural(locomotion(mtmp->data, "jump")));
+#else
+		    pline("%sはわざと変化の罠に飛びこんだ！",
+			  Monnam(mtmp));
+#endif
 		if (vis) seetrap(t_at(trapx,trapy));
 
 		/*  don't use rloc() due to worms */
@@ -1996,13 +2288,19 @@
 #if 0
 		(void) newcham(mtmp, (struct permonst *)0, FALSE, vismon);
 #else
+/*JP
 		(void) mon_poly(mtmp, FALSE, "%s changes!");
+*/
+		(void) mon_poly(mtmp, FALSE, "%sは姿を変えた！");
 #endif
 		return 2;
 	case MUSE_BULLWHIP:
 		/* attempt to disarm hero */
 		if (uwep && !rn2(5)) {
+/*JP
 		    const char *The_whip = vismon ? "The bullwhip" : "A whip";
+*/
+		    const char *The_whip = vismon ? "鞭" : "鞭";
 		    int where_to = rn2(4);
 		    struct obj *obj = uwep;
 		    const char *hand;
@@ -2013,24 +2311,42 @@
 		    if (bimanual(obj)) hand = makeplural(hand);
 
 		    if (vismon)
+/*JP
 			pline("%s flicks a bullwhip towards your %s!",
+*/
+			pline("%sはあなたの%sに向かって鞭を打った！",
 			      Monnam(mtmp), hand);
 		    if (obj->otyp == HEAVY_IRON_BALL) {
+/*JP
 			pline("%s fails to wrap around %s.",
+*/
+			pline("%sは%sにはからみつかなかった．",
 			      The_whip, the_weapon);
 			return 1;
 		    }
+/*JP
 		    pline("%s wraps around %s you're wielding!",
+*/
+		    pline("%sはあなたの装備している%sにからみついた！",
 			  The_whip, the_weapon);
 		    if (welded(obj)) {
+#if 0 /*JP*/
 			pline("%s welded to your %s%c",
 			      !is_plural(obj) ? "It is" : "They are",
 			      hand, !obj->bknown ? '!' : '.');
+#else
+			pline("しかし，それはまだあなたの%sの中にある%s",
+			      hand, !obj->bknown ? "！" : "．");
+#endif
 			/* obj->bknown = 1; */ /* welded() takes care of this */
 			where_to = 0;
 		    }
 		    if (!where_to) {
+#if 0 /*JP*/
 			pline_The("whip slips free.");  /* not `The_whip' */
+#else
+			pline("鞭はほどけた．");  /* not `The_whip' */
+#endif
 			return 1;
 		    } else if (where_to == 3 && hates_silver(mtmp->data) &&
 			    objects[obj->otyp].oc_material == SILVER) {
@@ -2042,17 +2358,26 @@
 		    uwepgone();
 		    switch (where_to) {
 			case 1:		/* onto floor beneath mon */
+/*JP
 			    pline("%s yanks %s from your %s!", Monnam(mtmp),
+*/
+			    pline("%sは%sをあなたの%sからぐいとひっぱった！", Monnam(mtmp),
 				  the_weapon, hand);
 			    place_object(obj, mtmp->mx, mtmp->my);
 			    break;
 			case 2:		/* onto floor beneath you */
+/*JP
 			    pline("%s yanks %s to the %s!", Monnam(mtmp),
+*/
+			    pline("%sは%sを%sに引き落した！", Monnam(mtmp),
 				  the_weapon, surface(u.ux, u.uy));
 			    dropy(obj);
 			    break;
 			case 3:		/* into mon's inventory */
+/*JP
 			    pline("%s snatches %s!", Monnam(mtmp),
+*/
+			    pline("%sは%sを奪った！", Monnam(mtmp),
 				  the_weapon);
 			    (void) mpickobj(mtmp,obj);
 			    break;
@@ -2072,7 +2397,10 @@
 you_aggravate(mtmp)
 struct monst *mtmp;
 {
+/*JP
 	pline("For some reason, %s presence is known to you.",
+*/
+	pline("なぜか，あなたは%sの存在に気がついた．",
 		s_suffix(noit_mon_nam(mtmp)));
 	cls();
 #ifdef CLIPPING
@@ -2080,13 +2408,19 @@
 #endif
 	show_glyph(mtmp->mx, mtmp->my, mon_to_glyph(mtmp));
 	display_self();
+/*JP
 	You_feel("aggravated at %s.", noit_mon_nam(mtmp));
+*/
+	You("%sに腹がたった．", mon_nam(mtmp));
 	display_nhwindow(WIN_MAP, TRUE);
 	docrt();
 	if (unconscious()) {
 		multi = -1;
 		nomovemsg =
+/*JP
 		      "Aggravated, you are jolted into full consciousness.";
+*/
+		      "腹がたっていて，ピリピリしている．";
 	}
 	newsym(mtmp->mx,mtmp->my);
 	if (!canspotmon(mtmp))
@@ -2230,42 +2564,63 @@
 
 	if (orefl && orefl->otyp == SHIELD_OF_REFLECTION) {
 	    if (str) {
+/*JP
 		pline(str, s_suffix(mon_nam(mon)), "shield");
+*/
+		pline(str, mon_nam(mon), "盾");
 		makeknown(SHIELD_OF_REFLECTION);
 	    }
 	    return TRUE;
 	} else if (arti_reflects(MON_WEP(mon))) {
 	    /* due to wielded artifact weapon */
 	    if (str)
+/*JP
 		pline(str, s_suffix(mon_nam(mon)), "weapon");
+*/
+		pline(str, mon_nam(mon), "武器");
 	    return TRUE;
 	} else if ((orefl = which_armor(mon, W_AMUL)) &&
 				orefl->otyp == AMULET_OF_REFLECTION) {
 	    if (str) {
+/*JP
 		pline(str, s_suffix(mon_nam(mon)), "amulet");
+*/
+		pline(str, mon_nam(mon), "魔除け");
 		makeknown(AMULET_OF_REFLECTION);
 	    }
 	    return TRUE;
 	} else if (mon->data == &mons[PM_NIGHTMARE]) {
+/*JP
 	    pline(str,s_suffix(mon_nam(mon)),"horn");
+*/
+	    pline(str, mon_nam(mon), "角");
 	    return TRUE;
 	} else if ((orefl = which_armor(mon, W_ARM)) &&
 		(orefl->otyp == SILVER_DRAGON_SCALES || orefl->otyp == SILVER_DRAGON_SCALE_MAIL)) {
 	    if (str)
+/*JP
 		pline(str, s_suffix(mon_nam(mon)), "armor");
+*/
+		pline(str, mon_nam(mon), "鎧");
 	    return TRUE;
 	} else if (mon->data == &mons[PM_SILVER_DRAGON] ||
 		mon->data == &mons[PM_CHROMATIC_DRAGON]) {
 	    /* Silver dragons only reflect when mature; babies do not */
 	    if (str)
+/*JP
 		pline(str, s_suffix(mon_nam(mon)), "scales");
+*/
+		pline(str, mon_nam(mon), "鱗");
 	    return TRUE;
 	} else if (mon->data == &mons[PM_DIAMOND_GOLEM]
 	         || mon->data == &mons[PM_SAPPHIRE_GOLEM]
 	         || mon->data == &mons[PM_CRYSTAL_GOLEM]) {
 	    /* Some of the higher golems have intrinsic reflection */
 	    if (str)
+/*JP
 		pline(str, s_suffix(mon_nam(mon)), "body");
+*/
+		pline(str, mon_nam(mon), "身体");
 	    return TRUE;
 	}
 	return FALSE;
@@ -2278,34 +2633,52 @@
 	/* Check from outermost to innermost objects */
 	if (EReflecting & W_ARMS) {
 	    if (fmt && str) {
+/*JP
 	    	pline(fmt, str, "shield");
+*/
+	    	pline(fmt, str, "盾");
 	    	makeknown(SHIELD_OF_REFLECTION);
 	    }
 	    return TRUE;
 	} else if (EReflecting & W_WEP) {
 	    /* Due to wielded artifact weapon */
 	    if (fmt && str)
+/*JP
 	    	pline(fmt, str, "weapon");
+*/
+	    	pline(fmt, str, "武器");
 	    return TRUE;
 	} else if (EReflecting & W_AMUL) {
 	    if (fmt && str) {
+/*JP
 	    	pline(fmt, str, "medallion");
+*/
+	    	pline(fmt, str, "メダリオン");
 	    	makeknown(AMULET_OF_REFLECTION);
 	    }
 	    return TRUE;
 	} else if (EReflecting & W_ARM) {
 	    if (fmt && str)
+/*JP
 	    	pline(fmt, str, "armor");
+*/
+	    	pline(fmt, str, "鎧");
 	    return TRUE;
 	} else if (youmonst.data == &mons[PM_SILVER_DRAGON]) {
 	    if (fmt && str)
+/*JP
 	    	pline(fmt, str, "scales");
+*/
+	    	pline(fmt, str, "鱗");
 	    return TRUE;
 	} else if (youmonst.data == &mons[PM_DIAMOND_GOLEM]
 	         || youmonst.data == &mons[PM_SAPPHIRE_GOLEM]
 	         || youmonst.data == &mons[PM_CRYSTAL_GOLEM]) {
 	    if (fmt && str)
+/*JP
 	    	pline(fmt, str, "body");
+*/
+	    	pline(fmt, str, "身体");
 	    return TRUE;
 	}
 	return FALSE;
@@ -2352,36 +2725,60 @@
 	long save_quan = obj->quan;
 
 	obj->quan = 1L;
+#if 0 /*JP*/
 	pline("%s %ss %s.", Monnam(mon),
 		    (obj->otyp == POT_ACID) ? "quaff" : "eat",
 		    distant_name(obj,doname));
+#else
+	pline("%sは%sを%s．", Monnam(mon),
+		  distant_name(obj,doname),
+		  (obj->otyp == POT_ACID) ? "飲んだ" : "食べた");
+#endif
 	obj->quan = save_quan;
     } else if (flags.soundok)
+/*JP
 	You_hear("%s.", (obj->otyp == POT_ACID) ? "drinking" : "chewing");
+*/
+	You_hear("%sという音を聞いた．", (obj->otyp == POT_ACID) ? "ゴクン" : "クチャクチャ");
     m_useup(mon, obj);
     if (((obj->otyp == POT_ACID) || acidic(&mons[obj->corpsenm])) &&
 		    !resists_acid(mon)) {
 	mon->mhp -= rnd(15);
+/*JP
 	pline("%s has a very bad case of stomach acid.",
+*/
+	pline("%sは胃酸の調子がとても悪い．",
 	    Monnam(mon));
     }
     if (mon->mhp <= 0) {
+/*JP
 	pline("%s dies!", Monnam(mon));
+*/
+	pline("%sは死んだ！", Monnam(mon));
 	if (by_you) xkilled(mon, 0);
 	else mondead(mon);
 	return;
     }
     if (stoning && canseemon(mon)) {
 	if (Hallucination)
+/*JP
     pline("What a pity - %s just ruined a future piece of art!",
+*/
+    pline("なんてことだ！%sは芸術作品になれたかもしれないのに！",
 	    mon_nam(mon));
 	else
+/*JP
 	    pline("%s seems limber!", Monnam(mon));
+*/
+	    pline("%sは体が柔らかくなったように見える！", Monnam(mon));
     }
     if (obj->otyp == CORPSE && obj->corpsenm == PM_LIZARD && mon->mconf) {
 	mon->mconf = 0;
 	if (canseemon(mon))
+/*JP
 	    pline("%s seems steadier now.", Monnam(mon));
+*/
+	    pline("%sはより丈夫になったようだ．", Monnam(mon));
     }
     if (mon->mtame && !mon->isminion && nutrit > 0) {
 	struct edog *edog = EDOG(mon);
diff -aurN slashem-0.0.7E6F2/src/music.c jslashem-0.0.7E6F2-J0.0.8/src/music.c
--- slashem-0.0.7E6F2/src/music.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/music.c	2004-07-27 09:08:34.000000000 +0900
@@ -3,6 +3,14 @@
 /* NetHack may be freely redistributed.  See license for details. */
 
 /*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+/*
  * This file contains the different functions designed to manipulate the
  * musical instruments and their various effects.
  *
@@ -123,12 +131,21 @@
 		newsym(mtmp->mx, mtmp->my);
 		if (canseemon(mtmp)) {
 		    if (!could_see_mon)
+/*JP
 			You("notice %s, swaying with the music.",
+*/
+			You("%sが音楽に合わせて揺れているのに気付いた．",
 			    a_monnam(mtmp));
 		    else
+#if 0 /*JP*/
 			pline("%s freezes, then sways with the music%s.",
 			      Monnam(mtmp),
 			      was_peaceful ? "" : ", and now seems quieter");
+#else
+			pline("%sは立ちすくみ，音楽に合わせて揺れ%sた．",
+			      Monnam(mtmp),
+			      was_peaceful ? "" : "，おとなしくなっ");
+#endif
 		}
 	    }
 	    mtmp = mtmp->nmon;
@@ -153,7 +170,10 @@
 		mtmp->mavenge = 0;
 		if (canseemon(mtmp))
 		    pline(
+/*JP
 		     "%s listens cheerfully to the music, then seems quieter.",
+*/
+		     "%sは音楽に聞きいり，おとなしくなった．",
 			  Monnam(mtmp));
 	    }
 	    mtmp = mtmp->nmon;
@@ -173,9 +193,15 @@
 		mtmp->mpeaceful = mtmp->msleeping = mtmp->mfrozen = 0;
 		mtmp->mcanmove = 1;
 		if (canseemon(mtmp))
+/*JP
 		    pline("%s is now ready for battle!", Monnam(mtmp));
+*/
+		    pline("%sは戦いの準備が整った！", Monnam(mtmp));
 		else
+/*JP
 		    Norep("You hear the rattle of battle gear being readied.");
+*/
+		    Norep("あなたは戦いの準備が整ったことを示す音を聞いた．");
 	    }
 	    mtmp = mtmp->nmon;
 	}
@@ -236,12 +262,21 @@
 		if (mtmp->mundetected && is_hider(mtmp->data)) {
 		    mtmp->mundetected = 0;
 		    if (cansee(x,y))
+/*JP
 			pline("%s is shaken loose from the ceiling!",
+*/
+			pline("%sは揺すられ，天井から落ちてきた！",
 							    Amonnam(mtmp));
 		    else
+/*JP
 			You_hear("a thumping sound.");
+*/
+			You_hear("ドンドンという音を聞いた．");
 		    if (x==u.ux && y==u.uy)
+/*JP
 			You("easily dodge the falling %s.",
+*/
+			You("落ちてきた%sを簡単にかわした．",
 							    mon_nam(mtmp));
 		    newsym(x,y);
 		}
@@ -249,31 +284,49 @@
 	    if (!rn2(14 - force)) switch (levl[x][y].typ) {
 		  case FOUNTAIN : /* Make the fountain disappear */
 			if (cansee(x,y))
+/*JP
 				pline_The("fountain falls into a chasm.");
+*/
+				pline("泉の水は地割れに飲み込まれ，干上がった．");
 			goto do_pit;
 #ifdef SINKS
 		  case SINK :
 			if (cansee(x,y))
+/*JP
 				pline_The("kitchen sink falls into a chasm.");
+*/
+				pline("流し台は地割れに飲み込まれた．");
 			goto do_pit;
 		  case TOILET :
 			if (cansee(x,y))
+/*JP
 				pline("The toilet falls into a chasm.");
+*/
+				pline("トイレは地割れに飲み込まれた．");
 			goto do_pit;
 #endif
 		  case ALTAR :
 			if (Is_astralevel(&u.uz) || Is_sanctum(&u.uz)) break;
 
 			if (cansee(x,y))
+/*JP
 				pline_The("altar falls into a chasm.");
+*/
+				pline("祭壇は地割れに飲み込まれた．");
 			goto do_pit;
 		  case GRAVE :
 			if (cansee(x,y))
+/*JP
 				pline_The("headstone topples into a chasm.");
+*/
+				pline("墓石は崩れさった．");
 			goto do_pit;
 		  case THRONE :
 			if (cansee(x,y))
+/*JP
 				pline_The("throne falls into a chasm.");
+*/
+				pline("玉座は地割れに飲み込まれた．");
 			/* Falls into next case */
 		  case ROOM :
 		  case CORR : /* Try to make a pit */
@@ -287,8 +340,13 @@
 
 		    if ((otmp = sobj_at(BOULDER, x, y)) != 0) {
 			if (cansee(x, y))
+#if 0 /*JP*/
 			   pline("KADOOM! The boulder falls into a chasm%s!",
 			      ((x == u.ux) && (y == u.uy)) ? " below you" : "");
+#else
+			   pline("ドドーン！岩は%s地割れに落ちた！",
+			      ((x == u.ux) && (y == u.uy)) ? "あなたの下の" : "");
+#endif
 			if (mtmp)
 				mtmp->mtrapped = 0;
 			obj_extract_self(otmp);
@@ -303,19 +361,37 @@
 			if(!is_flyer(mtmp->data) && !is_clinger(mtmp->data)) {
 			    mtmp->mtrapped = 1;
 			    if(cansee(x,y))
+/*JP
 				pline("%s falls into a chasm!", Monnam(mtmp));
+*/
+				pline("%sは地割れに落ちた！", Monnam(mtmp));
 			    else if (flags.soundok && humanoid(mtmp->data))
+/*JP
 				You_hear("a scream!");
+*/
+				You_hear("叫び声を聞いた！");
+/*JP
 			    mselftouch(mtmp, "Falling, ", TRUE);
+*/
+			    mselftouch(mtmp, "落下中，", TRUE);
 			    if (mtmp->mhp > 0)
 				if ((mtmp->mhp -= rnd(6)) <= 0) {
 				    if(!cansee(x,y))
+/*JP
 					pline("It is destroyed!");
+*/
+					pline("何者かは死んだ！");
 				    else {
+#if 0 /*JP*/
 					You("destroy %s!", mtmp->mtame ?
 					    x_monnam(mtmp, ARTICLE_THE, "poor",
 				mtmp->mnamelth ? SUPPRESS_SADDLE : 0, FALSE):
 					    mon_nam(mtmp));
+#else
+				        pline("%s%sは死んだ！", mtmp->mtame ?
+					      "かわいそうな" : "",
+					      mon_nam(mtmp));
+#endif
 				    }
 				    xkilled(mtmp,0);
 				}
@@ -324,15 +400,29 @@
 				/* KMH, balance patch -- new intrinsic */
 			    if (Levitation || Flying ||
 						is_clinger(youmonst.data)) {
+#if 0 /*JP*/
 				    pline("A chasm opens up under you!");
 				    You("don't fall in!");
+#else
+				    pline("地割れが足元に開いた！");
+				    You("落ちなかった！");
+#endif
 			    } else {
+/*JP
 				    You("fall into a chasm!");
+*/
+				    You("地割れに落ちた！");
 				    u.utrap = rn1(6,2);
 				    u.utraptype = TT_PIT;
+#if 0 /*JP:T*/
 				    losehp(rnd(6),"fell into a chasm",
 					NO_KILLER_PREFIX);
 				    selftouch("Falling, you");
+#else
+				    losehp(rnd(6),"地割れに落ちて",
+					KILLED_BY);
+				    selftouch("落ちながら，あなたは");
+#endif
 			    }
 		    } else newsym(x,y);
 		    break;
@@ -341,7 +431,10 @@
 		    if (artifact_door(x, y))  break;
 		    if (levl[x][y].doormask == D_NODOOR) goto do_pit;
 		    if (cansee(x,y))
+/*JP
 			pline_The("door collapses.");
+*/
+			pline_The("扉はこなごなになった．");
 		    if (*in_rooms(x, y, SHOPBASE))
 			add_damage(x, y, 0L);
 		    levl[x][y].doormask = D_NODOOR;
@@ -384,16 +477,25 @@
 #endif /* MAC || AMIGA || VPIX_MUSIC || PCMUSIC */
 
 	if (!do_spec)
+/*JP
 	    pline("What you produce is quite far from music...");
+*/
+	    pline("あなたが奏でたものは音楽とはとても呼べない．．．");
 	else
+/*JP
 	    You("start playing %s.", the(xname(instr)));
+*/
+	    You("%sを奏ではじめた．", the(xname(instr)));
 
 	switch (instr->otyp) {
 	case MAGIC_FLUTE:		/* Make monster fall asleep */
 	    if (do_spec && instr->spe > 0) {
 		consume_obj_charge(instr, TRUE);
 
+/*JP
 		You("produce soft music.");
+*/
+		You("柔らかい音色を奏でた．");
 		put_monsters_to_sleep(u.ulevel * 5);
 		exercise(A_DEX, TRUE);
 		break;
@@ -402,7 +504,10 @@
 	/* KMH, balance patch -- removed
 	case PAN_PIPE: */
 	    do_spec &= (rn2(ACURR(A_DEX)) + u.ulevel > 25);
+/*JP
 	    pline("%s.", Tobjnam(instr, do_spec ? "trill" : "toot"));
+*/
+	    pline("%sを%sた．", xname(instr), do_spec ? "奏で" : "吹い");
 	    if (do_spec) charm_snakes(u.ulevel * 3);
 	    exercise(A_DEX, TRUE);
 	    break;
@@ -412,13 +517,21 @@
 		consume_obj_charge(instr, TRUE);
 
 		if (!getdir((char *)0)) {
+/*JP
 		    pline("%s.", Tobjnam(instr, "vibrate"));
+*/
+		    pline("%sは震えた．", xname(instr));
 		    break;
 		} else if (!u.dx && !u.dy && !u.dz) {
 		    if ((damage = zapyourself(instr, TRUE)) != 0) {
+#if 0 /*JP*/
 			char buf[BUFSZ];
 			Sprintf(buf, "using a magical horn on %sself", uhim());
 			losehp(damage, buf, KILLED_BY);
+#else
+			losehp(damage, "自分自身の魔法のホルンの力を浴びて",
+			       KILLED_BY);
+#endif
 		    }
 		} else {
 		    buzz((instr->otyp == FROST_HORN) ? AD_COLD-1 : AD_FIRE-1,
@@ -428,12 +541,18 @@
 		break;
 	    } /* else FALLTHRU */
 	case TOOLED_HORN:		/* Awaken or scare monsters */
+/*JP
 	    You("produce a frightful, grave sound.");
+*/
+	    You("身震いするような死者の音楽を奏でた．");
 	    awaken_monsters(u.ulevel * 30);
 	    exercise(A_WIS, FALSE);
 	    break;
 	case BUGLE:			/* Awaken & attract soldiers */
+/*JP
 	    You("extract a loud noise from %s.", the(xname(instr)));
+*/
+	    You("%sから大きな耳障りな音を出した．", the(xname(instr)));
 	    awaken_soldiers();
 	    exercise(A_WIS, FALSE);
 	    break;
@@ -441,15 +560,23 @@
 	    if (do_spec && instr->spe > 0) {
 		consume_obj_charge(instr, TRUE);
 
+/*JP
 		pline("%s very attractive music.", Tobjnam(instr, "produce"));
+*/
+		pline("%sはとても魅力的な音楽を奏でた．", xname(instr));
 		charm_monsters((u.ulevel - 1) / 3 + 1);
 		exercise(A_DEX, TRUE);
 		break;
 	    } /* else FALLTHRU */
 	case WOODEN_HARP:		/* May calm Nymph */
 	    do_spec &= (rn2(ACURR(A_DEX)) + u.ulevel > 25);
+#if 0 /*JP*/
 	    pline("%s %s.", The(xname(instr)),
 		  do_spec ? "produces a lilting melody" : "twangs");
+#else
+	    You("%s．", 
+		  do_spec ? "軽快な音楽を奏でた" : "ポローンという音を出した");
+#endif
 	    if (do_spec) calm_nymphs(u.ulevel * 3);
 	    exercise(A_DEX, TRUE);
 	    break;
@@ -457,8 +584,14 @@
 	    if (do_spec && instr->spe > 0) {
 		consume_obj_charge(instr, TRUE);
 
+/*JP
 		You("produce a heavy, thunderous rolling!");
+*/
+		You("重厚な雷のような音を奏でた！");
+/*JP
 		pline_The("entire dungeon is shaking around you!");
+*/
+		pline("あなたの回りの迷宮が揺れた！");
 		do_earthquake((u.ulevel - 1) / 3 + 1);
 		/* shake up monsters in a much larger radius... */
 		awaken_monsters(ROWNO * COLNO);
@@ -491,7 +624,10 @@
 		break;
 #endif
 	case LEATHER_DRUM:		/* Awaken monsters */
+/*JP
 	    You("beat a deafening row!");
+*/
+	    You("耳が聞こえなくなるくらい叩いた！");
 	    awaken_monsters(u.ulevel * 40);
 	    exercise(A_WIS, FALSE);
 	    break;
@@ -516,17 +652,29 @@
     boolean ok;
 
     if (Underwater) {
+/*JP
 	You_cant("play music underwater!");
+*/
+	You("水の中では音楽を奏でられない！");
 	return(0);
     }
     if (instr->otyp != LEATHER_DRUM && instr->otyp != DRUM_OF_EARTHQUAKE) {
+/*JP
 	c = yn("Improvise?");
+*/
+	c = yn("即興で演奏する？");
     }
     if (c == 'n') {
+/*JP
 	if (u.uevent.uheard_tune == 2 && yn("Play the passtune?") == 'y') {
+*/
+	if (u.uevent.uheard_tune == 2 && yn("コードを演奏する？") == 'y') {
 	    Strcpy(buf, tune);
 	} else {
+/*JP
 	    getlin("What tune are you playing? [5 notes, A-G]", buf);
+*/
+	    getlin("どのような調べを演奏しますか？[A-G から5音をいれてね]", buf);
 	    (void)mungspaces(buf);
 	    /* convert to uppercase and change any "H" to the expected "B" */
 	    for (s = buf; *s; s++) {
@@ -539,7 +687,10 @@
 		if (*s == 'H') *s = 'B';
 	    }
 	}
+/*JP
 	You("extract a strange sound from %s!", the(xname(instr)));
+*/
+	You("%sから奇妙な音を出した！", the(xname(instr)));
 #ifdef UNIX386MUSIC
 	/* if user is at the console, play through the console speaker */
 	if (atconsole())
@@ -623,13 +774,26 @@
 			}
 			 if(tumblers) {
 			if(gears)
+#if 0 /*JP*/
 			    You_hear("%d tumbler%s click and %d gear%s turn.",
 				tumblers, plur(tumblers), gears, plur(gears));
+#else
+			    You_hear("%dの金具がカチっとなり，%dの歯車がまわる音を聞いた",
+				tumblers, gears);
+#endif
 			else
+#if 0 /*JP*/
 			    You_hear("%d tumbler%s click.",
 				tumblers, plur(tumblers));
+#else
+			    You_hear("%dの金具がカチっとなる音を聞いた．",
+				tumblers);
+#endif
 			 } else if(gears) {
+/*JP
 			You_hear("%d gear%s turn.", gears, plur(gears));
+*/
+			You_hear("%dの歯車が回る音を聞いた．", gears);
 			/* could only get `gears == 5' by playing five
 			   correct notes followed by excess; otherwise,
 			   tune would have matched above */
@@ -663,7 +827,10 @@
      */
     char	*termtype = nh_getenv("TERM");
 
+/*JP
      return(!strcmp(termtype, "AT386") || !strcmp(termtype, "xterm"));
+*/
+     return(!strcmp(termtype, "AT386") || !strcmp(termtype, "xterm") || !strcmp(termtype, "kterm"));
 }
 
 STATIC_OVL void
diff -aurN slashem-0.0.7E6F2/src/o_init.c jslashem-0.0.7E6F2-J0.0.8/src/o_init.c
--- slashem-0.0.7E6F2/src/o_init.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/o_init.c	2004-06-27 16:54:08.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"	/* save & restore info */
 
@@ -419,7 +427,10 @@
     start_menu(tmpwin);
 
     any.a_void = 0;
+/*JP
     add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_BOLD, "Discoveries",
+*/
+    add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_BOLD, "発見物一覧",
       MENU_UNSELECTED);
     add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, "",
       MENU_UNSELECTED);
@@ -429,9 +440,15 @@
     for (i = dis = 0; i < SIZE(uniq_objs); i++)
 	if (objects[uniq_objs[i]].oc_name_known) {
 	    if (!dis++)
+#if 0 /*JP*/
 		add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
 		  "Unique Items", MENU_UNSELECTED);
 		Sprintf(buf, "  %s", OBJ_NAME(objects[uniq_objs[i]]));
+#else
+		add_menu(tmpwin, NO_GLYPH, &any, 0, 0, iflags.menu_headings,
+		  "特殊アイテム", MENU_UNSELECTED);
+		Sprintf(buf, "  %s", jtrns_obj(' ', OBJ_NAME(objects[uniq_objs[i]])));
+#endif
 	    add_menu(tmpwin, objnum_to_glyph(uniq_objs[i]), &any,
 	      0, 0, ATR_NONE, buf, MENU_UNSELECTED);
 	    ++ct;
@@ -468,7 +485,10 @@
     }
     end_menu(tmpwin, (char *) 0);
     if (ct == 0) {
+/*JP
 	You("haven't discovered anything yet...");
+*/
+	You("まだ何も発見していない．．．");
     } else
 	(void) select_menu(tmpwin, PICK_NONE, &selected);
     destroy_nhwindow(tmpwin);
diff -aurN slashem-0.0.7E6F2/src/objnam.c jslashem-0.0.7E6F2-J0.0.8/src/objnam.c
--- slashem-0.0.7E6F2/src/objnam.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/objnam.c	2004-08-23 09:31:16.000000000 +0900
@@ -2,11 +2,24 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 
 /* "an uncursed greased partly eaten guardian naga hatchling [corpse]" */
+#if 0 /*JP*/
 #define PREFIX	80	/* (56) */
+#else
+/* 「呪われていない油の塗られた食べかけのクロマティック・ドラゴン(の死体)」*/
+#define PREFIX	100
+#endif
 #define SCHAR_LIM 127
 #define NUMOBUF 12
 
@@ -16,6 +29,11 @@
 #endif
 static char *NDECL(nextobuf);
 static void FDECL(add_erosion_words, (struct obj *, char *));
+static char *FDECL(substitute, (char *,     char *,     char *));
+static char *FDECL(transpose, (char *buf,char *));
+static char *FDECL(delete, (char *, char *str));
+static int FDECL(digit_8, (int));
+static int FDECL(atoi_8, (const char *));
 
 STATIC_DCL char *FDECL(xname2, (struct obj *));
 
@@ -100,30 +118,87 @@
 	register const char *dn = OBJ_DESCR(*ocl);
 	register const char *un = ocl->oc_uname;
 	register int nn = ocl->oc_name_known;
+#if 1 /*JP*/
+	char type;
+	char type_name[BUFSZ];
+#endif
 
 	if (Role_if(PM_SAMURAI) && Japanese_item_name(otyp))
 		actualn = Japanese_item_name(otyp);
+#if 1 /*JP*/
+	buf[0]='\0';
+	type_name[0]='\0';
+	if(un)
+	  Sprintf(buf, "%sと呼ばれる", un);
+#endif
 	switch(ocl->oc_class) {
 	case COIN_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, "coin");
+#else
+		if(nn)
+		    Strcat(buf,jtrns_obj('$',actualn));
+		type = '$';
+#endif
 		break;
 	case POTION_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, "potion");
+#else
+		if(nn)
+		    Strcat(buf,jtrns_obj('!',actualn));
+		else if(un)
+		    Strcat(buf, "薬");
+		type = '!';
+#endif
 		break;
 	case SCROLL_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, "scroll");
+#else
+		if(nn)
+		    Strcat(buf,jtrns_obj('?',actualn));
+		else if(un)
+		    Strcat(buf, "巻物");
+		 type = '?';
+#endif
 		break;
 	case WAND_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, "wand");
+#else
+		if(nn)
+		    Strcat(buf,jtrns_obj('/',actualn));
+		else if(un)
+		    Strcat(buf, "杖");
+		type = '/';
+#endif
 		break;
 	case SPBOOK_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, "spellbook");
+#else
+		if(nn)
+		    Strcat(buf,jtrns_obj('+',actualn));
+		else if(un)
+		    Strcat(buf, "魔法書");
+		type = '+';
+#endif
 		break;
 	case RING_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, "ring");
+#else
+		if(nn)
+		    Strcat(buf,jtrns_obj('=',actualn));
+		else if(un)
+		    Strcat(buf, "指輪");
+		type = '=';
+#endif
 		break;
 	case AMULET_CLASS:
 		if(nn)
+#if 0 /*JP*/
 			Strcpy(buf,actualn);
 		else
 			Strcpy(buf,"amulet");
@@ -132,8 +207,28 @@
 		if(dn)
 			Sprintf(eos(buf)," (%s)",dn);
 		return(buf);
+#else
+		    Strcat(buf,jtrns_obj('"',actualn));
+		else if(un)
+		    Strcat(buf, "魔除け");
+		type = '"';
+		break;
+#endif
+#if 1 /*JP*/
+	case GEM_CLASS:
+		if(nn)
+		  Strcat(buf,jtrns_obj('*',actualn));
+		else if(un)
+		  Strcat(buf, "宝石");
+		type = '*';
+		break;
+#endif
 	default:
+#if 1 /*JP*/
+		type = ' ';
+#endif
 		if(nn) {
+#if 0 /*JP*/
 			Strcpy(buf, actualn);
 			if (GemStone(otyp))
 				Strcat(buf, " stone");
@@ -141,16 +236,29 @@
 				Sprintf(eos(buf), " called %s", un);
 			if(dn)
 				Sprintf(eos(buf), " (%s)", dn);
+#else
+			Strcat(buf, jtrns_obj(' ',actualn));
+#endif
 		} else {
+#if 0 /*JP*/
 			Strcpy(buf, dn ? dn : actualn);
 			if(ocl->oc_class == GEM_CLASS)
 				Strcat(buf, (ocl->oc_material == MINERAL) ?
 						" stone" : " gem");
 			if(un)
 				Sprintf(eos(buf), " called %s", un);
+#else
+			Strcat(buf, dn ? jtrns_obj(' ',dn)
+			   : jtrns_obj(' ',actualn));
+#endif
 		}
+#if 0 /*JP*/
 		return(buf);
+#else
+		break;
+#endif
 	}
+#if 0 /*JP*/
 	/* here for ring/scroll/potion/wand */
 	if(nn) {
 	    if (ocl->oc_unique)
@@ -163,8 +271,14 @@
 	}
 	if(un)
 		Sprintf(eos(buf), " called %s", un);
+#endif
 	if(dn)
+#if 0 /*JP*/
 		Sprintf(eos(buf), " (%s)", dn);
+#else
+		Sprintf(eos(buf), "(%s%s)", jtrns_obj(type, dn),
+		  ocl->oc_class == POTION_CLASS ? "薬" : "");
+#endif
 	return(buf);
 }
 
@@ -221,6 +335,11 @@
 fruitname(juice)
 boolean juice;	/* whether or not to append " juice" to the name */
 {
+#if 1 /*JP*//*日本語ではそこまでしない*/
+    char *buf = nextobuf();
+    Sprintf(buf, "%s%s", pl_fruit, juice ? "ジュース" : "");
+    return buf;
+#else
     char *buf = nextobuf();
     const char *fruit_nam = strstri(pl_fruit, " of ");
 
@@ -231,6 +350,7 @@
 
     Sprintf(buf, "%s%s", makesingular(fruit_nam), juice ? " juice" : "");
     return buf;
+#endif
 }
 
 #endif /* OVLB */
@@ -247,6 +367,9 @@
 	register const char *actualn = OBJ_NAME(*ocl);
 	register const char *dn = OBJ_DESCR(*ocl);
 	register const char *un = ocl->oc_uname;
+#if 1 /*JP*/
+	register const char *jactualn = NULL,*jdn = NULL;
+#endif
 
 	buf = nextobuf() + PREFIX;	/* leave room for "17 -3 " */
 	if (Role_if(PM_SAMURAI) && Japanese_item_name(typ))
@@ -265,66 +388,157 @@
 
 	/* We could put a switch(obj->oclass) here but currently only this one case exists */
 	if (obj->oclass == WEAPON_CLASS && is_poisonable(obj) && obj->opoisoned)
+#if 0 /*JP*/
 		Strcpy(buf, "poisoned ");
+#else
+		Strcpy(buf, "毒の塗られた");
+#endif
 
 	if (obj_is_pname(obj))
+#if 0 /*JP*/
+	    goto nameit;
+#else
+	{
+	    Strcat(buf, jtrns_obj('A', ONAME(obj)));
 	    goto nameit;
+	}
+#endif
+#if 1 /*JP*/
+	if (obj->onamelth && obj->dknown) {
+	  if(!obj->oartifact)
+	    Strcat(buf, ONAME(obj));
+	  else
+	    Strcat(buf, jtrns_obj('A', ONAME(obj)));
+	  Strcat(buf, "と名づけられた");
+	}
+#endif
 	switch (obj->oclass) {
 	    case AMULET_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('"', actualn);
+		jdn = jtrns_obj('"', dn);
+#endif
 		if (!obj->dknown)
+/*JP
 			Strcpy(buf, "amulet");
+*/
+			Strcat(buf, "魔除け");  
 		else if (typ == AMULET_OF_YENDOR ||
 			 typ == FAKE_AMULET_OF_YENDOR)
 			/* each must be identified individually */
+/*JP
 			Strcpy(buf, obj->known ? actualn : dn);
+*/
+			Strcat(buf, obj->known ? jactualn : jdn);
 		else if (nn)
+#if 0 /*JP*/
 			Strcpy(buf, actualn);
+#else
+			Strcat(buf, jactualn);
+#endif
 		else if (un)
+/*JP
 			Sprintf(buf,"amulet called %s", un);
+*/
+			Sprintf(eos(buf),"%sと呼ばれる魔除け", un);
 		else
+/*JP
 			Sprintf(buf,"%s amulet", dn);
+*/
+			Sprintf(eos(buf),"%s", jdn);
 		break;
 	    case WEAPON_CLASS:
 	    case VENOM_CLASS:
 	    case TOOL_CLASS:
+#if 1 /*JP*/
+		if(obj->oclass == WEAPON_CLASS){
+			jactualn = jtrns_obj(')',actualn);
+			jdn = jtrns_obj(')',dn);
+		}
+		else if(obj->oclass == VENOM_CLASS){
+		  jactualn = jtrns_obj('\'',actualn);
+		  jdn = jtrns_obj('\'',dn);
+		}
+		else if(obj->oclass == TOOL_CLASS){
+		  jactualn = jtrns_obj('(',actualn);
+		  jdn = jtrns_obj('(',dn);
+		}
+#endif
 		if (typ == LENSES)
+/*JP
 			Strcpy(buf, "pair of ");
+*/
+			Strcpy(buf, "一対の");
 
 		if (!obj->dknown)
+/*JP
 			Strcat(buf, dn ? dn : actualn);
+*/
+			Strcat(buf, jdn ? jdn : jactualn);
 		else if (nn)
+/*JP
 			Strcat(buf, actualn);
+*/
+			Strcat(buf, jactualn);
 		else if (un) {
+#if 0 /*JP*/
 			Strcat(buf, dn ? dn : actualn);
 			Strcat(buf, " called ");
 			Strcat(buf, un);
+#else
+			Strcat(buf, un);
+			Strcat(buf, "と呼ばれる");
+			Strcat(buf, jdn ? jdn : jactualn);
+#endif
 		} else
+/*JP
 			Strcat(buf, dn ? dn : actualn);
+*/
+			Strcat(buf, jdn ? jdn : jactualn);
+#if 0 /*JP*/ /*これは語順の関係から上の方で定義*/
 		/* If we use an() here we'd have to remember never to use */
 		/* it whenever calling doname() or xname(). */
 		if (typ == FIGURINE)
 		    Sprintf(eos(buf), " of a%s %s",
 			index(vowels,*(mons[obj->corpsenm].mname)) ? "n" : "",
 			mons[obj->corpsenm].mname);
+#endif
 		break;
 	    case ARMOR_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj(']',actualn);
+		jdn = jtrns_obj(']',dn);
+#endif
 		/* depends on order of the dragon scales objects */
 		if (typ >= GRAY_DRAGON_SCALES && typ <= YELLOW_DRAGON_SCALES) {
+/*JP
 			Sprintf(buf, "set of %s", actualn);
+*/
+			Sprintf(buf, "%s一式", jactualn);
 			break;
 		}
+/*JP
 		if(is_boots(obj) || is_gloves(obj)) Strcpy(buf,"pair of ");
+*/
+		if(is_boots(obj) || is_gloves(obj)) Strcat(buf,"一対の");
 
 		if(obj->otyp >= ELVEN_SHIELD && obj->otyp <= ORCISH_SHIELD
 				&& !obj->dknown) {
+/*JP
 			Strcpy(buf, "shield");
+*/
+			Strcat(buf, "盾");
 			break;
 		}
 		if(obj->otyp == SHIELD_OF_REFLECTION && !obj->dknown) {
+/*JP
 			Strcpy(buf, "smooth shield");
+*/
+			Strcat(buf, "すべすべした盾");
 			break;
 		}
 
+#if 0 /*JP*/
 		if(nn)	Strcat(buf, actualn);
 		else if(un) {
 			if(is_boots(obj))
@@ -342,8 +556,25 @@
 			Strcat(buf, " called ");
 			Strcat(buf, un);
 		} else	Strcat(buf, dn);
+#else
+		if(nn)	Strcat(buf, jactualn);
+		else if(un) {
+			char *p;
+			if(is_boots(obj)) p = "靴";
+			else if(is_gloves(obj)) p = "小手";
+			else if(is_cloak(obj)) p = "クローク";
+			else if(is_helmet(obj)) p = "兜";
+			else if(is_shield(obj)) p = "盾";
+			else p = "鎧";
+			Sprintf(eos(buf), "%sと呼ばれる%s", un, p);
+		} else	Strcat(buf, jdn);
+#endif
 		break;
 	    case FOOD_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('%',actualn);
+		jdn = jtrns_obj('%',dn);
+#endif
 		if (typ == SLIME_MOLD) {
 			register struct fruit *f;
 
@@ -357,24 +588,58 @@
 			break;
 		}
 
+#if 0 /*JP*/
 		Strcpy(buf, actualn);
+#endif
 		if (typ == TIN && obj->known) {
 		    if(obj->spe > 0)
+/*JP
 			Strcat(buf, " of spinach");
+*/
+			Strcat(buf, "ホウレン草の");
 		    else if (obj->corpsenm == NON_PM)
+/*JP
 		        Strcpy(buf, "empty tin");
+*/
+		        Strcat(buf, "空っぽの");
 		    else if (vegetarian(&mons[obj->corpsenm]))
+/*JP
 			Sprintf(eos(buf), " of %s", mons[obj->corpsenm].mname);
+*/
+			Sprintf(eos(buf), "%sの", jtrns_mon(mons[obj->corpsenm].mname));
 		    else
+/*JP
 			Sprintf(eos(buf), " of %s meat", mons[obj->corpsenm].mname);
+*/
+			Sprintf(eos(buf), "%sの肉の", jtrns_mon(mons[obj->corpsenm].mname));
 		}
+#if 1 /*JP*/
+		Strcat(buf, jactualn);
+#endif
 		break;
 	    case COIN_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('$',actualn);
+		jdn = jtrns_obj('$',dn);
+		Strcat(buf, jactualn);
+		break;
+#endif
 	    case CHAIN_CLASS:
+#if 0 /*JP*/
 		Strcpy(buf, actualn);
+#else
+		jactualn = jtrns_obj('_',actualn);
+		jdn = jtrns_obj('_',dn);
+		Strcat(buf, jactualn);
+#endif
 		break;
 	    case ROCK_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('\'',actualn);
+		jdn = jtrns_obj('\'',dn);
+#endif
 		if (typ == STATUE)
+#if 0 /*JP*/
 		    Sprintf(buf, "%s%s of %s%s",
 			(Role_if(PM_ARCHEOLOGIST) && (obj->spe & STATUE_HISTORIC)) ? "historic " : "" ,
 			actualn,
@@ -384,106 +649,250 @@
 								"an " : "a "),
 			mons[obj->corpsenm].mname);
 		else Strcpy(buf, actualn);
+#else
+		    Sprintf(eos(buf), "%s%sの%s", 
+			    (Role_if(PM_ARCHEOLOGIST) && obj->spe) ? "歴史的な" : "" ,
+			    jtrns_mon(mons[obj->corpsenm].mname), jactualn);
+		else Strcat(buf, jactualn);
+#endif
 		break;
 	    case BALL_CLASS:
+#if 0 /*JP*/
 		Sprintf(buf, "%sheavy iron ball",
 			(obj->owt > ocl->oc_weight) ? "very " : "");
+#else
+		jactualn = jtrns_obj('0',actualn);
+		jdn = jtrns_obj('0',dn);
+		Sprintf(eos(buf), "%s%s",
+			(obj->owt > ocl->oc_weight) ? "とても" : "", jactualn);
+#endif
 		break;
 	    case POTION_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('!',actualn);
+		jdn = jtrns_obj('!',dn);
+#endif
 		if (obj->dknown && obj->odiluted)
+/*JP
 			Strcpy(buf, "diluted ");
+*/
+			Strcat(buf, "薄まった");
 		if(nn || un || !obj->dknown) {
+#if 0 /*JP*/
 			Strcat(buf, "potion");
 			if(!obj->dknown) break;
+#else
+			if(!obj->dknown){
+			  Strcat(buf,"薬");
+			  break;
+			}
+#endif
 			if(nn) {
+#if 0 /*JP*/
 			    Strcat(buf, " of ");
+#endif
 			    if (typ == POT_WATER &&
 				obj->bknown && (obj->blessed || obj->cursed)) {
+/*JP
 				Strcat(buf, obj->blessed ? "holy " : "unholy ");
+*/
+				Strcat(buf, obj->blessed ? "聖" : "不浄な");
 			    }
+/*JP
 			    Strcat(buf, actualn);
+*/
+			    Strcat(buf, jactualn);
 			} else {
+#if 0 /*JP*/
 				Strcat(buf, " called ");
 				Strcat(buf, un);
+#else
+				Strcat(buf, un);
+				Strcat(buf, "と呼ばれる薬");
+#endif
 			}
 		} else {
+#if 0 /*JP*/
 			Strcat(buf, dn);
 			Strcat(buf, " potion");
+#else
+			Strcat(buf, jdn);
+			Strcat(buf, "薬");
+#endif
 		}
 		break;
 	case SCROLL_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('?', actualn);
+		jdn = jtrns_obj('?', dn);
+		if(!obj->dknown){
+			Strcat(buf,"巻物");
+			break;
+		}
+#else
 		Strcpy(buf, "scroll");
 		if(!obj->dknown) break;
+#endif
 		if(nn) {
+#if 0 /*JP*/
 			Strcat(buf, " of ");
 			Strcat(buf, actualn);
+#else
+			Strcat(buf, jactualn);
+#endif
 		} else if(un) {
+#if 0 /*JP*/
 			Strcat(buf, " called ");
 			Strcat(buf, un);
+#else
+			Strcat(buf, un);
+			Strcat(buf, "と呼ばれる巻物");
+#endif
 		} else if (ocl->oc_magic) {
+#if 0 /*JP*/
 			Strcat(buf, " labeled ");
 			Strcat(buf, dn);
+#else
+			Strcat(buf, jdn);
+#endif
 		} else {
+#if 0 /*JP*/
 			Strcpy(buf, dn);
 			Strcat(buf, " scroll");
+#else
+			Strcat(buf, jdn);
+#endif
 		}
 		break;
 	case WAND_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('/',actualn);
+		jdn = jtrns_obj('/',dn);
+#endif
 		if(!obj->dknown)
+/*JP
 			Strcpy(buf, "wand");
+*/
+			Strcat(buf, "杖");
 		else if(nn)
+/*JP
 			Sprintf(buf, "wand of %s", actualn);
+*/
+			Strcat(buf, jactualn);
 		else if(un)
+/*JP
 			Sprintf(buf, "wand called %s", un);
+*/
+			Sprintf(eos(buf), "%sと呼ばれる杖", un);
 		else
+/*JP
 			Sprintf(buf, "%s wand", dn);
+*/
+			Strcat(buf, jdn);
 		break;
 	case SPBOOK_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('+',actualn);
+		jdn = jtrns_obj('+',dn);
+#endif
 		if (!obj->dknown) {
+/*JP
 			Strcpy(buf, "spellbook");
+*/
+			Strcat(buf, "魔法書");
 		} else if (nn) {
+#if 0 /*JP*/
 			if (typ != SPE_BOOK_OF_THE_DEAD)
 			    Strcpy(buf, "spellbook of ");
 			Strcat(buf, actualn);
+#else
+			Strcat(buf, jactualn);
+#endif
 		} else if (un) {
+/*JP
 			Sprintf(buf, "spellbook called %s", un);
+*/
+			Sprintf(eos(buf), "%sと呼ばれる魔法書", un);
 		} else
+/*JP
 			Sprintf(buf, "%s spellbook", dn);
+*/
+			Sprintf(eos(buf), "%s", jdn);
 		break;
 	case RING_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('=',actualn);
+		jdn = jtrns_obj('=',dn);
+#endif
 		if(!obj->dknown)
+/*JP
 			Strcpy(buf, "ring");
+*/
+			Strcat(buf, "指輪");
 		else if(nn) {
+#if 0 /*JP*/
 			/* KMH -- "mood ring" instead of "ring of mood" */
 			if (typ == RIN_MOOD)
 				Sprintf(buf, "%s ring", actualn);
 			else
 			Sprintf(buf, "ring of %s", actualn);
+#else
+			Strcat(buf, jactualn);
+#endif
 		} else if(un)
+/*JP
 			Sprintf(buf, "ring called %s", un);
+*/
+			Sprintf(eos(buf), "%sと呼ばれる指輪", un);
 		else
+/*JP
 			Sprintf(buf, "%s ring", dn);
+*/
+			Strcat(buf, jdn);
 		break;
 	case GEM_CLASS:
+#if 1 /*JP*/
+		jactualn = jtrns_obj('*',actualn);
+		jdn = jtrns_obj('*',dn);
+#endif
 	    {
 		const char *rock =
+/*JP
 			    (ocl->oc_material == MINERAL) ? "stone" : "gem";
+*/
+			    (ocl->oc_material == MINERAL) ? "石" : "宝石";
 		if (!obj->dknown) {
+/*JP
 		    Strcpy(buf, rock);
+*/
+		    Strcat(buf, rock);
 		} else if (!nn) {
+#if 0 /*JP*/
 		    if (un) Sprintf(buf,"%s called %s", rock, un);
 		    else Sprintf(buf, "%s %s", dn, rock);
+#else
+		    if (un) Sprintf(eos(buf), "%sと呼ばれる%s", un, rock);
+		    else Strcat(buf, jdn);
+#endif
 		} else {
+#if 0 /*JP*/
 		    Strcpy(buf, actualn);
 		    if (GemStone(typ)) Strcat(buf, " stone");
+#else
+		    Strcpy(buf, jactualn);
+#endif
 		}
 		break;
 	    }
 	default:
 		Sprintf(buf,"glorkum %d %d %d", obj->oclass, typ, obj->spe);
 	}
+#if 0 /*JP*/
 	if (obj->quan != 1L) Strcpy(buf, makeplural(buf));
 
+#endif
+  
+#if 0 /*JP*/
 	if (obj->onamelth && obj->dknown) {
 		Strcat(buf, " named ");
 nameit:
@@ -491,6 +900,9 @@
 	}
 
 	if (!strncmpi(buf, "the ", 4)) buf += 4;
+#else
+nameit:
+#endif
 	return(buf);
 } /* end Hallu */
 
@@ -533,7 +945,13 @@
 	Strcpy(tmpbuf, onm);
 	/* "the Nth arrow"; value will eventually be passed to an() or
 	   The(), both of which correctly handle this "the " prefix */
+#if 0 /*JP*/
 	Sprintf(onm, "the %d%s %s", m_shot.i, ordin(m_shot.i), tmpbuf);
+#else
+	Sprintf(onm, "%d%s目の%s", m_shot.i,
+		(objects[obj->otyp].oc_skill == -P_FIREARM) ? "発" : "本",
+		tmpbuf);
+#endif
     }
 
     return onm;
@@ -542,6 +960,7 @@
 #endif /* OVL1 */
 #ifdef OVL0
 
+#if 0 /*JP*/
 /* used for naming "the unique_item" instead of "a unique_item" */
 boolean
 the_unique_obj(obj)
@@ -555,6 +974,7 @@
 	return (boolean)(objects[obj->otyp].oc_unique &&
 			 (obj->known || obj->otyp == AMULET_OF_YENDOR));
 }
+#endif
 
 static void
 add_erosion_words(obj,prefix)
@@ -570,26 +990,50 @@
 	 * rotted food and diluted potions, which are all not is_damageable().
 	 */
 	if (obj->oeroded && !iscrys) {
+#if 0 /*JP*/
 		switch (obj->oeroded) {
 			case 2:	Strcat(prefix, "very "); break;
 			case 3:	Strcat(prefix, "thoroughly "); break;
 		}			
 		Strcat(prefix, is_rustprone(obj) ? "rusty " : "burnt ");
+#else
+		switch (obj->oeroded) {
+			case 2:	Strcat(prefix, "とても"); break;
+			case 3:	Strcat(prefix, "かなり"); break;
+		}			
+		Strcat(prefix, is_rustprone(obj) ? "錆びた" : "傷ついた");
+#endif
 	}
 	if (obj->oeroded2 && !iscrys) {
+#if 0 /*JP*/
 		switch (obj->oeroded2) {
 			case 2:	Strcat(prefix, "very "); break;
 			case 3:	Strcat(prefix, "thoroughly "); break;
 		}			
 		Strcat(prefix, is_corrodeable(obj) ? "corroded " :
 			"rotted ");
+#else
+		switch (obj->oeroded2) {
+			case 2:	Strcat(prefix, "とても"); break;
+			case 3:	Strcat(prefix, "かなり"); break;
+		}			
+		Strcat(prefix, is_corrodeable(obj) ? "腐食した" :
+			"腐った");
+#endif
 	}
 	if (obj->rknown && obj->oerodeproof)
 		Strcat(prefix,
+#if 0 /*JP*/
 		       iscrys ? "fixed " :
 		       is_rustprone(obj) ? "rustproof " :
 		       is_corrodeable(obj) ? "corrodeproof " :	/* "stainless"? */
 		       is_flammable(obj) ? "fireproof " : "");
+#else
+		       iscrys ? "安定した" :
+		       is_rustprone(obj) ? "錆びない" :
+		       is_corrodeable(obj) ? "腐食しない" :	/* "stainless"? */
+		       is_flammable(obj) ? "燃えない" : "");
+#endif
 }
 
 char *
@@ -599,10 +1043,14 @@
 	boolean ispoisoned = FALSE;
 	char prefix[PREFIX];
 	char tmpbuf[PREFIX+1];
+
 	/* when we have to add something at the start of prefix instead of the
 	 * end (Strcat is used on the end)
 	 */
 	register char *bp = xname(obj);
+#if 1 /*JP*/ /*  苦肉の策 */
+	char preprefix[PREFIX], *tp;
+#endif
 
 	/* When using xname, we want "poisoned arrow", and when using
 	 * doname, we want "poisoned +0 arrow".  This kludge is about the only
@@ -610,24 +1058,123 @@
 	 * combining both into one function taking a parameter.
 	 */
 	/* must check opoisoned--someone can have a weirdly-named fruit */
+#if 0 /*JP*/
 	if (!strncmp(bp, "poisoned ", 9) && obj->opoisoned) {
 		bp += 9;
 		ispoisoned = TRUE;
 	}
+#else
+	if (!strncmp(bp, "毒の塗られた", 12) && obj->opoisoned) {
+		bp += 12;
+		ispoisoned = TRUE;
+	}
+#endif
+#if 1 /*JP*/
+	/* JP
+	 *「子猫のたまと名づけられた死体」より「たまと名づけられた子猫の死体」
+	 *  のほうが自然である．
+	 */
+	preprefix[0] = '\0';
+	if((tp = strstri(bp, "名づけられた")) != NULL){
+	  tp += 12; /* 「名づけられた」*/
+	  strncpy(preprefix, bp, tp - bp);
+	  preprefix[tp - bp] = '\0';
+	  bp = tp;
+	}
+	Strcpy(prefix, "");
+#endif
 
 	if(obj->quan != 1L)
+#if 0 /*JP*/
 		Sprintf(prefix, "%ld ", obj->quan);
+#else /* 日本語としては数詞がないのは不自然 */
+	{
+	  Sprintf(prefix, "%ld", obj->quan);
+	  switch(obj->oclass){
+	  case WEAPON_CLASS:
+	  case WAND_CLASS:
+	    if(obj->otyp==SHURIKEN)
+	      Strcat(prefix,"枚の");
+	    else if(objects[obj->otyp].oc_skill==-P_FIREARM)
+	      Strcat(prefix,"発分の");
+	    else if(objects[obj->otyp].oc_skill==P_FIREARM)
+	      Strcat(prefix,"丁の");
+	    else
+	      Strcat(prefix,"本の");
+	    break;
+	  case ARMOR_CLASS:
+	    Strcat(prefix,"着の");
+	    break;
+	  case GEM_CLASS:
+	  case ROCK_CLASS:
+	  case BALL_CLASS:
+	    Strcat(prefix,"個の");
+	    break;
+	  case SCROLL_CLASS:
+	    Strcat(prefix,"枚の");
+	    break;
+	  case SPBOOK_CLASS:
+	    Strcat(prefix,"冊の");
+	    break;
+	  case POTION_CLASS:
+	  case RING_CLASS:
+	  case AMULET_CLASS:
+	  case FOOD_CLASS:
+	    if(obj->quan < 10L)
+	      Strcat(prefix,"つの");
+	    else
+	      Strcat(prefix,"の");
+	    break;
+	  case COIN_CLASS:
+	    break;
+	  default:
+	    switch(obj->otyp){
+	    case CREDIT_CARD:
+	    case TOWEL:
+	    case BLINDFOLD:
+	      Strcat(prefix,"枚の");
+	      break;
+	    case SKELETON_KEY:
+	    case TALLOW_CANDLE:
+	    case WAX_CANDLE:
+	    case PICK_AXE:
+	    case UNICORN_HORN:
+	    case LEASH:
+	    case STETHOSCOPE:
+	    case MAGIC_MARKER:
+	      Strcat(prefix,"本の");
+	      break;
+	    case CRYSTAL_BALL:
+	      Strcat(prefix,"個の");
+	      break;
+	    default:
+	      if(obj->quan < 10L)
+		Strcat(prefix,"つの");
+	      else
+		Strcat(prefix,"の");
+	    }
+	  }
+	}
+#endif
+#if 0 /*JP*/ /* 冠詞は不要 */
 	else if (!Hallucination && (obj_is_pname(obj) || the_unique_obj(obj))) {
 		if (!strncmpi(bp, "the ", 4))
 		    bp += 4;
 		Strcpy(prefix, "the ");
 	} else Strcpy(prefix, "a ");
+#endif
 
 #ifdef INVISIBLE_OBJECTS
+/*JP
 	if (obj->oinvis) Strcat(prefix,"invisible ");
+*/
+	if (obj->oinvis) Strcat(prefix,"透明な");
 #endif
 #if defined(WIZARD) && defined(UNPOLYPILE)
+/*JP
 	if (wizard && is_hazy(obj)) Strcat(prefix,"hazy ");
+*/
+	if (wizard && is_hazy(obj)) Strcat(prefix,"霞んだ");
 #endif
 
 	if ((!Hallucination || Role_if(PM_PRIEST) || Role_if(PM_NECROMANCER)) &&
@@ -639,9 +1186,15 @@
 	     * always allow "uncursed potion of water"
 	     */
 	    if (Hallucination ? !rn2(10) : obj->cursed)
+/*JP
 		Strcat(prefix, "cursed ");
+*/
+		Strcat(prefix, "呪われた");
 	    else if (Hallucination ? !rn2(10) : obj->blessed)
+/*JP
 		Strcat(prefix, "blessed ");
+*/
+		Strcat(prefix, "祝福された");
 	    else if ((!obj->known || !objects[obj->otyp].oc_charged ||
 		      (obj->oclass == ARMOR_CLASS ||
 		       obj->oclass == RING_CLASS))
@@ -661,20 +1214,32 @@
 			&& obj->otyp != FAKE_AMULET_OF_YENDOR
 			&& obj->otyp != AMULET_OF_YENDOR
 			&& !Role_if(PM_PRIEST) && !Role_if(PM_NECROMANCER))
+/*JP
 		Strcat(prefix, "uncursed ");
+*/
+		Strcat(prefix, "呪われていない");
 	}
 
+/*JP
 	if (Hallucination ? !rn2(100) : obj->greased) Strcat(prefix, "greased ");
+*/
+	if (Hallucination ? !rn2(100) : obj->greased) Strcat(prefix, "油の塗られた");
 
 	switch(obj->oclass) {
 	case AMULET_CLASS:
 		add_erosion_words(obj, prefix);
 		if(obj->owornmask & W_AMUL)
+/*JP
 			Strcat(bp, " (being worn)");
+*/
+			Strcat(bp, "(身につけている)");
 		break;
 	case WEAPON_CLASS:
 		if(ispoisoned)
+/*JP
 			Strcat(prefix, "poisoned ");
+*/
+			Strcat(prefix, "毒の塗られた");
 plus:
 		add_erosion_words(obj, prefix);
 		if (Hallucination)
@@ -689,16 +1254,25 @@
 			is_lightsaber(obj) ||
 # endif
 			obj->otyp == STICK_OF_DYNAMITE) {
+/*JP
 		    if (obj->lamplit) Strcat(bp, " (lit)");
+*/
+		    if (obj->lamplit) Strcat(bp, " (光っている)");
 #  ifdef DEBUG
 		    Sprintf(eos(bp), " (%d)", obj->age);		
 #  endif
 		} else if (is_grenade(obj))
+/*JP
 		    if (obj->oarmed) Strcat(bp, " (armed)");
+*/
+		    if (obj->oarmed) Strcat(bp, " (作動している)");
 #else	/* FIREARMS */
 # ifdef LIGHTSABERS
 		if (is_lightsaber(obj)) {
+/*JP
 		    if (obj->lamplit) Strcat(bp, " (lit)");
+*/
+		    if (obj->lamplit) Strcat(bp, " (光っている)");
 #  ifdef DEBUG
 		    Sprintf(eos(bp), " (%d)", obj->age);		
 #  endif
@@ -708,8 +1282,13 @@
 		break;
 	case ARMOR_CLASS:
 		if(obj->owornmask & W_ARMOR)
+#if 0 /*JP*/
 			Strcat(bp, (obj == uskin) ? " (embedded in your skin)" :
 				" (being worn)");
+#else
+			Strcat(bp, (obj == uskin) ? "(肌に埋めこまれている)" :
+				"(身につけている)");
+#endif
 		goto plus;
 	case TOOL_CLASS:
 		/* weptools already get this done when we go to the +n code */
@@ -722,14 +1301,21 @@
 				| W_SADDLE
 #endif
 				)) {
+/*JP
 			Strcat(bp, " (being worn)");
+*/
+			Strcat(bp, "(身につけている)");
 			break;
 		}
 		if (obj->otyp == LEASH && obj->leashmon != 0) {
+/*JP
 			Strcat(bp, " (in use)");
+*/
+			Strcat(bp, "(結びつけている)");
 			break;
 		}
 		if (obj->otyp == CANDELABRUM_OF_INVOCATION) {
+#if 0 /*JP*/
 			if (!obj->spe)
 			    Strcpy(tmpbuf, "no");
 			else
@@ -737,6 +1323,18 @@
 			Sprintf(eos(bp), " (%s candle%s%s)",
 				tmpbuf, plur(obj->spe),
 				!obj->lamplit ? " attached" : ", lit");
+#else
+			if(!obj->spe)
+			    Sprintf(eos(bp), "(一本も取りつけられていない)");
+			else {
+			    if(!obj->lamplit)
+				Sprintf(eos(bp), "(%d本取りつけられている)",
+					obj->spe);
+			    else
+				Sprintf(eos(bp), "(%d本光っている)",
+					obj->spe);
+			}
+#endif
 			break;
 		} else if (obj->otyp == OIL_LAMP || obj->otyp == MAGIC_LAMP ||
 			obj->otyp == BRASS_LANTERN || obj->otyp == TORCH ||
@@ -745,9 +1343,15 @@
 			    /* WAC - magic candles are never "partly used" */
 			    obj->otyp != MAGIC_CANDLE &&
 			    obj->age < 20L * (long)objects[obj->otyp].oc_cost)
+/*JP
 				Strcat(prefix, "partly used ");
+*/
+				Strcat(prefix, "使いさしの");
 			if(obj->lamplit)
+/*JP
 				Strcat(bp, " (lit)");
+*/
+				Strcat(bp, "(光っている)");
 		}
 		if (is_weptool(obj))
 			goto plus;
@@ -772,19 +1376,30 @@
 		if (Hallucination)
 			break;
 		if(obj->known)
+/*JP
 		    Sprintf(eos(bp), " (%d:%d)", (int)obj->recharged, obj->spe);
+*/
+		    Sprintf(eos(bp), "(%d:%d)", (int)obj->recharged, obj->spe);
 		break;
 	case POTION_CLASS:
 		if (Hallucination)
 			break;
 		if (obj->otyp == POT_OIL && obj->lamplit)
+/*JP
 		    Strcat(bp, " (lit)");
+*/
+		    Strcat(bp, "(光っている)");
 		break;
 	case RING_CLASS:
 		add_erosion_words(obj, prefix);
 ring:
+#if 0 /*JP*/
 		if(obj->owornmask & W_RINGR) Strcat(bp, " (on right ");
 		if(obj->owornmask & W_RINGL) Strcat(bp, " (on left ");
+#else
+		if(obj->owornmask & W_RINGR) Strcat(bp, "(右");
+		if(obj->owornmask & W_RINGL) Strcat(bp, "(左");
+#endif
 		if(obj->owornmask & W_RING) {
 		    Strcat(bp, body_part(HAND));
 		    Strcat(bp, ")");
@@ -800,18 +1415,30 @@
 		if (obj->otyp == CORPSE && obj->odrained) {
 #ifdef WIZARD
 		    if (wizard && obj->oeaten < drainlevel(obj))
+/*JP
 			Strcpy(tmpbuf, "over-drained ");
+*/
+			Strcpy(tmpbuf, "吸われ過ぎの");
 		    else
 #endif
+#if 0 /*JP*/
 		    Sprintf(tmpbuf, "%sdrained ",
 		      (obj->oeaten > drainlevel(obj)) ? "partly " : "");
+#else
+		    Strcpy(tmpbuf, (obj->oeaten > drainlevel(obj)) ? "吸いかけの" : "吸い尽くされた");
+#endif
 		}
 		else if (obj->oeaten)
+#if 0 /*JP*/
 		    Strcpy(tmpbuf, "partly eaten ");
+#else
+		    Strcpy(tmpbuf, "食べかけの");
+#endif
 		else
 		    tmpbuf[0] = '\0';
 		Strcat(prefix, tmpbuf);
 		if (obj->otyp == CORPSE && !Hallucination) {
+#if 0 /*JP*/
 		    if (mons[obj->corpsenm].geno & G_UNIQ) {
 			Sprintf(prefix, "%s%s ",
 				(type_is_pname(&mons[obj->corpsenm]) ?
@@ -822,6 +1449,10 @@
 			Strcat(prefix, mons[obj->corpsenm].mname);
 			Strcat(prefix, " ");
 		    }
+#else
+		    Sprintf(eos(prefix), "%sの",
+			    jtrns_mon(mons[obj->corpsenm].mname));
+#endif
 		} else if (obj->otyp == EGG) {
 #if 0	/* corpses don't tell if they're stale either */
 		    if (obj->known && stale_egg(obj))
@@ -830,10 +1461,18 @@
 		    if (obj->corpsenm >= LOW_PM &&
 			    (obj->known ||
 			    mvitals[obj->corpsenm].mvflags & MV_KNOWS_EGG)) {
+#if 0 /*JP*/
 			Strcat(prefix, mons[obj->corpsenm].mname);
 			Strcat(prefix, " ");
+#else
+			Strcat(prefix, jtrns_mon(mons[obj->corpsenm].mname));
+			Strcat(prefix, "の");
+#endif
 			if (obj->spe)
+/*JP
 			    Strcat(bp, " (laid by you)");
+*/
+			    Strcat(bp, "(あなたが産んだ)");
 		    }
 		}
 		if (obj->otyp == MEAT_RING) goto ring;
@@ -842,27 +1481,45 @@
 	case CHAIN_CLASS:
 		add_erosion_words(obj, prefix);
 		if(obj->owornmask & W_BALL)
+/*JP
 			Strcat(bp, " (chained to you)");
+*/
+			Strcat(bp, "(あなたに繋がれている)");
 			break;
 	}
 	if((obj->owornmask & W_WEP) && !mrg_to_wielded) {
 		if (obj->quan != 1L) {
+/*JP
 			Strcat(bp, " (wielded)");
+*/
+			Strcat(bp, "(装備している)");
 		} else {
 			const char *hand_s = body_part(HAND);
 
 			if (bimanual(obj)) hand_s = makeplural(hand_s);
+/*JP
 			Sprintf(eos(bp), " (weapon in %s)", hand_s);
+*/
+			Sprintf(eos(bp), "(%sにしている)", hand_s);
 		}
 	}
 	if(obj->owornmask & W_SWAPWEP) {
 		if (u.twoweap)
+/*JP
 			Sprintf(eos(bp), " (wielded in other %s)",
+*/
+			Sprintf(eos(bp), "(左%sにしている)",
 				body_part(HAND));
 		else
+/*JP
 			Strcat(bp, " (alternate weapon; not wielded)");
+*/
+			Strcat(bp, "(予備の武器;装備していない)");
 	}
+/*JP
 	if(obj->owornmask & W_QUIVER) Strcat(bp, " (in quiver)");
+*/
+	if(obj->owornmask & W_QUIVER) Strcat(bp, "(装填している)");
 	if (!Hallucination && obj->unpaid) {
 		xchar ox, oy; 
 		long quotedprice = unpaid_cost(obj);
@@ -873,13 +1530,18 @@
 		    costly_spot(ox, oy) &&
 		    (shkp = shop_keeper(*in_rooms(ox, oy, SHOPBASE))))
 			quotedprice += contained_cost(obj, shkp, 0L, FALSE, TRUE);
+#if 0 /*JP*/
 		Sprintf(eos(bp), " (unpaid, %ld %s)",
+#else
+		Sprintf(eos(bp), "(未払い，%ld%s)",
+#endif
 			quotedprice, currency(quotedprice));
 	}
 #ifdef WIZARD
 	if (wizard && obj->in_use)	/* Can't use "(in use)", see leashes */
 		Strcat(bp, " (finishing)");	/* always a bug */
 #endif
+#if 0 /*JP*/ /* a-an はない */
 	if (!strncmp(prefix, "a ", 2) &&
 			index(vowels, *(prefix+2) ? *(prefix+2) : *bp)
 			&& (*(prefix+2) || (strncmp(bp, "uranium", 7)
@@ -889,6 +1551,7 @@
 		Strcpy(prefix, "an ");
 		Strcpy(prefix+3, tmpbuf+2);
 	}
+#endif
 
 #ifdef SHOW_WEIGHT
 	  /* [max] weight inventory */
@@ -898,7 +1561,12 @@
 		        Sprintf (eos(bp), " {%d}", obj->owt);
 #endif
 
+#if 0 /*JP*/
 	bp = strprepend(bp, prefix);
+#else
+	Strcat(preprefix,prefix);
+	bp = strprepend(bp, preprefix);
+#endif
 	return(bp);
 }
 
@@ -949,6 +1617,11 @@
 {
 	char *nambuf = nextobuf();
 
+#if 1 /*JP*/
+	Sprintf(nambuf, "%sの死体", jtrns_mon(mons[
+		Hallucination ? rndmonnum() : otmp->corpsenm].mname));
+	return nambuf;
+#else
 	Sprintf(nambuf, "%s corpse",
 		mons[Hallucination ? rndmonnum() : otmp->corpsenm].mname);
 
@@ -956,6 +1629,7 @@
 	    return nambuf;
 	else
 	    return makeplural(nambuf);
+#endif
 }
 
 /* xname, unless it's a corpse, then corpse_xname(obj, FALSE) */
@@ -1018,12 +1692,18 @@
     if (obj->otyp == CORPSE) {
 	buf = nextobuf();
 
+#if 0 /*JP*/
 	Sprintf(buf, "%s%s corpse",
 		Hallucination ? "hallucinogen-distorted " : "",
 		mons[obj->corpsenm].mname);
 
 	if (!ignore_oquan && obj->quan >= 2)
 	    buf = makeplural(buf);
+#else
+	Sprintf(buf, "%s%sの死体",
+		Hallucination ? "幻覚で歪んだ" : "",
+		jtrns_mon(mons[obj->corpsenm].mname));
+#endif
     } else
 	buf = killer_xname(obj);
     return buf;
@@ -1067,6 +1747,7 @@
 {
 	char *buf = nextobuf();
 
+#if 0 /*JP*/
 	buf[0] = '\0';
 
 	if (strncmpi(str, "the ", 4) &&
@@ -1085,6 +1766,9 @@
 	}
 
 	Strcat(buf, str);
+#else
+	Strcpy(buf, str);
+#endif
 	return buf;
 }
 
@@ -1093,7 +1777,9 @@
 const char *str;
 {
 	register char *tmp = an(str);
+#if 0 /*JP*/
 	*tmp = highc(*tmp);
+#endif
 	return tmp;
 }
 
@@ -1106,6 +1792,7 @@
 const char *str;
 {
 	char *buf = nextobuf();
+#if 0 /*JP*/
 	boolean insert_the = FALSE;
 
 	if (!strncmpi(str, "the ", 4)) {
@@ -1145,6 +1832,9 @@
 	    buf[0] = '\0';
 	Strcat(buf, str);
 
+#else
+	Strcpy(buf, str);
+#endif /*JP*/
 	return buf;
 }
 
@@ -1153,10 +1843,22 @@
 const char *str;
 {
     register char *tmp = the(str);
+#if 0 /*JP*/
     *tmp = highc(*tmp);
+#endif
     return tmp;
 }
 
+#if 1 /*JP*/
+char *
+aobjnam(otmp, verb)
+register struct obj *otmp;
+register const char *verb;
+{
+    return xname(otmp);
+}
+
+#else
 /* returns "count cxname(otmp)" or just cxname(otmp) if count == 1 */
 char *
 aobjnam(otmp,verb)
@@ -1164,6 +1866,17 @@
 register const char *verb;
 {
 	register char *bp = cxname(otmp);
+#if 1 /*JP*/
+	static char prefix[PREFIX];
+
+	Strcpy(prefix,bp);
+	if(verb){
+	  Strcat(prefix,"は");
+	  Strcat(prefix,verb);
+	}
+
+	return prefix;
+#else
 	char prefix[PREFIX];
 
 	if(otmp->quan != 1L) {
@@ -1176,8 +1889,11 @@
 	    Strcat(bp, otense(otmp, verb));
 	}
 	return(bp);
+#endif
 }
+#endif
 
+#if 0 /*JP*//*日本語には三単現のsはない*/
 /* like aobjnam, but prepend "The", not count, and use xname */
 char *
 Tobjnam(otmp, verb)
@@ -1192,7 +1908,9 @@
 	}
 	return(bp);
 }
+#endif
 
+#if 0 /*JP*//*日本語には三単現のsはない*/
 /* return form of the verb (input plural) if xname(otmp) were the subject */
 char *
 otense(otmp, verb)
@@ -1213,6 +1931,7 @@
 	Strcpy(buf, verb);
 	return buf;
 }
+#endif
 
 /* various singular words that vtense would otherwise categorize as plural */
 static const char * const special_subjs[] = {
@@ -1227,6 +1946,7 @@
 	0
 };
 
+#if 0 /*JP*//*日本語には三単現のsはない*/
 /* return form of the verb (input plural) for present tense 3rd person subj */
 char *
 vtense(subj, verb)
@@ -1321,6 +2041,7 @@
 
 	return buf;
 }
+#endif
 
 /* capitalized variant of doname() */
 char *
@@ -1340,9 +2061,15 @@
 {
 	char *outbuf = nextobuf();
 	char *s = shk_your(outbuf, obj);	/* assert( s == outbuf ); */
+#if 0 /*JP*/
 	int space_left = BUFSZ - strlen(s) - sizeof " ";
 
 	return strncat(strcat(s, " "), cxname(obj), space_left);
+#else
+	int space_left = BUFSZ - strlen(s);
+
+	return strncat(s, xname(obj), space_left);
+#endif
 }
 
 /* capitalized variant of yname() */
@@ -1352,7 +2079,9 @@
 {
 	char *s = yname(obj);
 
+#if 0 /*JP*/
 	*s = highc(*s);
+#endif
 	return s;
 }
 
@@ -1366,9 +2095,15 @@
 {
 	char *outbuf = nextobuf();
 	char *s = shk_your(outbuf, obj);	/* assert( s == outbuf ); */
+#if 0 /*JP*/
 	int space_left = BUFSZ - strlen(s) - sizeof " ";
 
 	return strncat(strcat(s, " "), simple_typename(obj->otyp), space_left);
+#else
+	int space_left = BUFSZ - strlen(s);
+
+	return strncat(s, simple_typename(obj->otyp), space_left);
+#endif
 }
 
 /* capitalized variant of ysimple_name() */
@@ -1378,7 +2113,9 @@
 {
 	char *s = ysimple_name(obj);
 
+#if 0 /*JP*/
 	*s = highc(*s);
+#endif
 	return s;
 }
 
@@ -1412,6 +2149,11 @@
 makeplural(oldstr)
 const char *oldstr;
 {
+/*JP: Japanese is simple... */
+#if 1 /*JP*/
+	char *str = nextobuf();
+	Strcpy(str, oldstr);
+#else
 	/* Note: cannot use strcmpi here -- it'd give MATZot, CAVEMeN,... */
 	register char *spot;
 	char *str = nextobuf();
@@ -1622,6 +2364,7 @@
 	Strcpy(spot+1, "s");
 
 bottom:	if (excess) Strcpy(eos(str), excess);
+#endif /*JP*/
 	return str;
 }
 
@@ -1688,11 +2431,20 @@
  * WAC made most of the STRCMP ==> STRCMPI so that they are case insensitive
  * catching things like "bag of Tricks"
  */
+/*JP
+ * 基本的には単数化は必要ないのでコメントアウト。
+ * 但し、願いで複数形の英語を入力すると判定されなくなるので、
+ * それを避けたい場合は #define USE_MAKESINGULAR すれば単数化される。
+ */
 char *
 makesingular(oldstr)
 const char *oldstr;
 {
+#ifdef USE_MAKESINGULAR /*JP*/
 	register char *p, *bp;
+#else
+	register char *bp;
+#endif
 	char *str = nextobuf();
 
 	if (!oldstr || !*oldstr) {
@@ -1703,6 +2455,7 @@
 	Strcpy(str, oldstr);
 	bp = str;
 
+#ifdef USE_MAKESINGULAR /*JP*//*日本語は単複同形*/
 	while (*bp == ' ') bp++;
 	/* find "cloves of garlic", "worthless pieces of blue glass" */
 	if ((p = strstri(bp, "s of ")) != 0) {
@@ -1796,6 +2549,7 @@
 
 		/* here we cannot find the plural suffix */
 	}
+#endif
 	return bp;
 }
 
@@ -1975,6 +2729,7 @@
  * return null.
  * If from_user is false, we're reading from the wizkit, nothing was typed in.
  */
+
 struct obj *
 readobjnam(bp, no_wish, from_user)
 register char *bp;
@@ -1995,6 +2750,10 @@
 	struct fruit *f;
 	int ftype = current_fruit;
 	char fruitbuf[BUFSZ];
+#if 1 /*JP*/
+	char buf[BUFSZ];
+	char pfx[BUFSZ];
+#endif
 	/* Fruits may not mess up the ability to wish for real objects (since
 	 * you can leave a fruit in a bones file and it will be added to
 	 * another person's game), so they must be checked for last, after
@@ -2031,6 +2790,134 @@
 	actualn = dn = un = 0;
 
 	if (!bp) goto any;
+
+#if 1 /*JP*/
+	/* 2バイト文字のスペースを削除 */
+#undef WISHDEBUG
+
+#ifdef WISHDEBUG
+	pline("Wish DEBUG[%s]\n", bp);
+#endif
+	while(delete(bp, "　"))
+	      ;
+#ifdef WISHDEBUG
+	pline("Wish DEBUG[%s]\n", bp);
+#endif
+	Strcpy(buf, bp);
+
+#define S(a, b)	substitute(buf, (a), (b))
+#define T(a)	transpose(buf, (a))
+#define D(a)	delete(buf, (a))
+#define I(a)	insert(buf, (a))
+
+/* 特殊2バイト文字を1バイト文字へ変換 */
+
+	while(S("＋", "+") ||
+	      S("−", "-") ||
+	      S("（", "(") ||
+	      S("）", ")") ||
+	      S("０", "0") ||
+	      S("１", "1") ||
+	      S("２", "2") ||
+	      S("３", "3") ||
+	      S("４", "4") ||
+	      S("５", "5") ||
+	      S("６", "6") ||
+	      S("７", "7") ||
+	      S("８", "8") ||
+	      S("９", "9"))
+	  ;
+
+#ifdef WISHDEBUG
+	pline("Wish DEBUG0[%s]\n", bp);
+#endif
+
+	T("と名づけられた");
+	T("と呼ばれる");
+	T("と言う名の");
+	T("という名の");
+
+	S("と名づけられた", " named ");
+	S("と呼ばれる", " called ");
+	S("と言う名の", " named ");
+	S("という名の", " named ");
+
+	T("ホウレン草の");
+	S("ホウレン草の", " of spinach "); 
+
+	T("の死体");
+	S("の死体", " corpse of "); 
+
+	T("の死骸");
+	S("の死骸", " corpse of "); 
+
+	T("の像");
+	S("の像", " statue of "); 
+
+	T("の人形");
+	S("の人形", " figurine of "); 
+
+	S("祝福された", "blessed ");
+	S("聖水", "holy water ");
+	S("聖なる", "blessed ");
+
+	S("呪われた", "cursed ");
+	S("不浄な", "cursed ");
+
+	S("呪われていない", "uncursed ");
+
+	S("錆びない", "rustproof ");
+	S("腐食しない", "erodeproof ");
+	S("燃えない", "corrodeproof ");
+	S("傷つかない", "fireproof ");
+
+	S("光っている", "lit ");
+	S("燃えている", "burning ");
+	S("消えている", "unlit ");
+	S("ラベルのない", "unlabelled ");
+	S("真っ白な", "blank ");
+
+	S("毒の塗られた", "poisoned ");
+	S("油の塗られた", "greased ");
+	S("脂の塗られた", "greased ");
+
+	S("とても", "very ");
+	S("かなり", "thoroughly ");
+
+	S("錆びた", "rusty ");
+	S("腐食した", "eroded ");
+	S("傷ついた", "damaged ");
+	S("腐った", "rotted ");
+	S("燃えた", "burned ");
+
+	S("食べかけの", "partly eaten ");
+
+	S("薄い", "diluted ");
+	S("薄まった", "diluted ");
+
+	S("空の", "empty ");
+	S("空っぽの", "empty ");
+
+	D("一式");
+
+	if(strlen(buf)>4 && !strcmp(buf + strlen(buf) - 4, "巻物"))
+	  Strcpy(pfx, "scroll of ");
+	else if(strlen(buf)>6 && !strcmp(buf + strlen(buf) - 6, "巻き物"))
+	  Strcpy(pfx, "scroll of ");
+	else if(strlen(buf)>6 && !strcmp(buf + strlen(buf) - 6, "魔法書"))
+	  Strcpy(pfx, "spellbook of ");
+	else if(strlen(buf)>2 && !strcmp(buf + strlen(buf) - 2, "杖"))
+	  Strcpy(pfx, "wand of ");
+	else if(strlen(buf)>4 && !strcmp(buf + strlen(buf) - 4, "指輪"))
+	  Strcpy(pfx, "ring of ");
+	else
+	  pfx[0] = '\0';
+
+	bp = buf;
+#ifdef WISHDEBUG
+	pline("Wish DEBUG1[%s]\n", bp);
+#endif
+#endif /*JP*/
 	/* first, remove extra whitespace they may have typed */
 	(void)mungspaces(bp);
 	/* allow wishing for "nothing" to preserve wishless conduct...
@@ -2049,15 +2936,94 @@
 			cnt = 1;
 		} else if (!strncmpi(bp, "the ", l=4)) {
 			;	/* just increment `bp' by `l' below */
+#if 0 /*JP*/
 		} else if (!cnt && digit(*bp) && strcmp(bp, "0")) {
 			cnt = atoi(bp);
 			while(digit(*bp)) bp++;
+#else
+		} else if (!cnt && digit_8(*bp) && strcmp(bp, "0")) {
+			cnt = atoi_8(bp);
+			while(digit_8(*bp)) bp++;
+#endif
 			while(*bp == ' ') bp++;
 			l = 0;
+#if 1 /*JP*/
+/* 後に数詞があるときは削除 */
+			if(!strncmp(bp, "冊の", l = 4) ||
+			   !strncmp(bp, "本の", l = 4) ||
+			   !strncmp(bp, "丁の", l = 4) ||
+			   !strncmp(bp, "発の", l = 4) ||
+			   !strncmp(bp, "発分の", l = 6) ||
+			   !strncmp(bp, "着の", l = 4) ||
+			   !strncmp(bp, "個の", l = 4) ||
+			   !strncmp(bp, "枚の", l = 4) ||
+			   !strncmp(bp, "つの", l = 4) ||
+			   !strncmp(bp, "の", l = 2))
+			  ;
+			else
+			  l = 0;
+#endif
+#if 1 /*JP*/
+ /*
+漢字で数字を指定するときは数詞が必要
+*/
+		} else if(!cnt && 
+			  (!strncmp(bp + 2, "冊の", l = 4) ||
+			   !strncmp(bp + 2, "本の", l = 4) ||
+			   !strncmp(bp + 2, "丁の", l = 4) ||
+			   !strncmp(bp + 2, "発の", l = 4) ||
+			   !strncmp(bp + 2, "発分の", l = 6) ||
+			   !strncmp(bp + 2, "着の", l = 4) ||
+			   !strncmp(bp + 2, "個の", l = 4) ||
+			   !strncmp(bp + 2, "枚の", l = 4) ||
+			   !strncmp(bp + 2, "つの", l = 4) ||
+			   !strncmp(bp + 2, "の", l = 2))){
+		  if(!strncmp(bp, "一", 2)){
+		    cnt = 1;
+		  }
+		  else if(!strncmp(bp, "二", 2)){
+		    cnt = 2;
+		  }
+		  else if(!strncmp(bp, "三", 2)){
+		    cnt = 3;
+		  }
+		  else if(!strncmp(bp, "四", 2)){
+		    cnt = 4;
+		  }
+		  else if(!strncmp(bp, "五", 2)){
+		    cnt = 5;
+		  }
+		  else if(!strncmp(bp, "六", 2)){
+		    cnt = 6;
+		  }
+		  else if(!strncmp(bp, "七", 2)){
+		    cnt = 7;
+		  }
+		  else if(!strncmp(bp, "八", 2)){
+		    cnt = 8;
+		  }
+		  else if(!strncmp(bp, "九", 2)){
+		    cnt = 9;
+		  }
+		  else if(!strncmp(bp, "十", 2)){
+		    cnt = 10;
+		  }
+		  if(cnt)
+		    l += 2;
+		  else{
+		    l = 0;
+		    cnt = 1;
+		  }
+#endif
 		} else if (*bp == '+' || *bp == '-') {
 			spesgn = (*bp++ == '+') ? 1 : -1;
+#if 0 /*JP*/
 			spe = atoi(bp);
 			while(digit(*bp)) bp++;
+#else
+			spe = atoi_8(bp);
+			while(digit_8(*bp)) bp++;
+#endif
 			while(*bp == ' ') bp++;
 			l = 0;
 		} else if (!strncmpi(bp, "blessed ", l=8)
@@ -2144,7 +3110,10 @@
 		if (!strcmpi(p, "lit)")) {
 		    islit = 1;
 		} else {
+/*JP
 		    spe = atoi(p);
+*/
+		    spe = atoi_8(p);
 		    while(digit(*p)) p++;
 		    if (*p == ':') {
 			p++;
@@ -2162,6 +3131,76 @@
 		}
 	    }
 	}
+#if 1 /*JP*/
+	while(*bp == ' ')
+	  ++bp;
+/*
+天邪鬼のために 1から10まではサポート．
+*/
+	if(!strncmp(bp, "一", 2)){
+	  spe = 1; bp += 2;
+	}
+	else if(!strncmp(bp, "二", 2)){
+	  spe = 2; bp += 2;
+	}
+	else if(!strncmp(bp, "三", 2)){
+	  spe = 3; bp += 2;
+	}
+	else if(!strncmp(bp, "四", 2)){
+	  spe = 4; bp += 2;
+	}
+	else if(!strncmp(bp, "五", 2)){
+	  spe = 5; bp += 2;
+	}
+	else if(!strncmp(bp, "六", 2)){
+	  spe = 6; bp += 2;
+	}
+	else if(!strncmp(bp, "七", 2)){
+	  spe = 7; bp += 2;
+	}
+	else if(!strncmp(bp, "八", 2)){
+	  spe = 8; bp += 2;
+	}
+	else if(!strncmp(bp, "九", 2)){
+	  spe = 9; bp += 2;
+	}
+	else if(!strncmp(bp, "十", 2)){
+	  spe = 10; bp += 2;
+	}
+
+	while(*bp == ' ')
+	  ++bp;
+
+	while(1)
+	{
+	  unsigned char *bp2, *bp1;
+	  unsigned char buf1[BUFSZ];
+	  const char *en;
+
+	  bp1 = buf1;
+	  bp2 = (unsigned char *)bp;
+
+	  while(!(*bp2 & 0x80))
+	    ++bp2;
+
+	  while(*bp2 & 0x80){
+	    *(bp1++) = *(bp2++);
+	    *(bp1++) = *(bp2++);
+	  }
+	  *bp1 = '\0';
+
+#ifdef WISHDEBUG
+	  pline("Wish DEBUG2[%s]\n", bp);
+#endif
+	  en = etrns_obj(' ', buf1);
+	  Strcat(pfx, en);
+	  if(!strcmp(en, buf1) || !substitute(bp, buf1, pfx))
+	    break;
+	}
+#ifdef WISHDEBUG
+	pline("Wish DEBUG3[%s]", bp);
+#endif
+#endif
 /*
    otmp->spe is type schar; so we don't want spe to be any bigger or smaller.
    also, spe should always be positive  -- some cheaters may try to confuse
@@ -3033,7 +4072,10 @@
 	    artifact_exists(otmp, ONAME(otmp), FALSE);
 	    obfree(otmp, (struct obj *) 0);
 	    otmp = &zeroobj;
+/*JP
 	    pline("For a moment, you feel %s in your %s, but it disappears!",
+*/
+	    pline("一瞬%sが%sの中にあるような感じがしたが，すぐに消えさった！",
 		  something,
 		  makeplural(body_part(HAND)));
 	}
@@ -3103,21 +4145,42 @@
     if (cloak) {
 	switch (cloak->otyp) {
 	case ROBE:
+#if 0 /*JP*/
 	    return "robe";
+#else
+	    return "ローブ";
+#endif
 	case MUMMY_WRAPPING:
+#if 0 /*JP*/
 	    return "wrapping";
+#else
+	    return "包帯";
+#endif
 	case LAB_COAT:
+#if 0 /*JP*/
 	    return "coat";
+#else
+	    return "白衣";
+#endif
 #ifdef ALCHEMY_SMOCK
 	case ALCHEMY_SMOCK:
+#if 0 /*JP*/
 	    return (objects[cloak->otyp].oc_name_known &&
 			cloak->dknown) ? "smock" : "apron";
+#else
+	    return (objects[cloak->otyp].oc_name_known &&
+			cloak->dknown) ? "スモック" : "エプロン";
+#endif
 #endif
 	default:
 	    break;
 	}
     }
+#if 0 /*JP*/
     return "cloak";
+#else
+    return "クローク";
+#endif
 }
 
 const char *
@@ -3126,11 +4189,149 @@
 {
 	if (mtmp->m_ap_type == M_AP_OBJECT && mtmp->mappearance != STRANGE_OBJECT) {
 		int idx = objects[mtmp->mappearance].oc_descr_idx;
+#if 0 /*JP*/
 		if (mtmp->mappearance == GOLD_PIECE) return "gold";
+#else
+		if (mtmp->mappearance == GOLD_PIECE) return "金塊";
+#endif
 		return obj_descr[idx].oc_name;
 	}
+#if 0 /*JP*/
 	return "whatcha-may-callit";
+#else
+	return "何とかいうもの";
+#endif
 }
 #endif /* OVLB */
 
+#if 1 /*JP*/
+/*
+**  文字列 buf の str1を str2へ置換
+**  bufは置換後の文字列が入るだけの領域が必要
+*/
+static
+char *
+substitute(buf, str1, str2)
+     char *buf;
+     char *str1;
+     char *str2;
+{
+  unsigned char *p, *pp;
+  char tmp[BUFSZ];
+  int len = strlen(str1);
+
+  if(!buf)
+    return buf;
+
+  p = (unsigned char *)buf;
+
+  while(*p){
+    if(!strncmp(p, str1, len)){
+      Strcpy(tmp, p + len);
+      while(*str2)
+	*(p++) = *(str2++);
+
+      pp = tmp;
+      while(*pp)
+	*(p++) = *(pp++);
+      *(p++) = '\0';
+      return buf;
+    }
+    if(*p >= 0x80)
+      p += 2;
+    else
+      ++p;
+  }
+
+  return (char *)0;
+}
+
+/*
+**  文字列 buf の strの前の部分と strの後の部分を交換する．
+**
+**  EX) ほえほえ(と名づけられた)犬 -> 犬(と名づけられた)ほえほえ
+*/
+static 
+char *
+transpose(buf, str)
+     char *buf;
+     char *str;
+{
+  unsigned char *p, *pp, *ppp;
+  char tmp[BUFSZ];
+  int len = strlen(str);
+
+  Strcpy(tmp, buf);
+  ppp = pp = p = (unsigned char *)tmp;
+
+  while(*p){
+    if(!strncmp(p, str, len)){
+      Strcpy(buf, p + len);
+      Strcat(buf, str);
+      ppp = eos(buf);
+      while(pp != p)
+	*(ppp++) = *(pp++);
+      *(ppp++) = '\0';
+      return buf;
+    }
+    if(*p >= 0x80)
+      p += 2;
+    else
+      ++p;
+  }
+
+  return (char *)0;
+
+}
+/*
+**  文字列 buf の先頭に strを挿入する
+*/
+#if 0
+static 
+char *
+insert(buf, str)
+     char *buf;
+     char *str;
+{
+  return substitute(buf, "", str);
+}
+#endif
+  
+/*
+**  文字列 buf から strを取り除く．
+*/
+static
+char *
+delete(buf, str)
+     char *buf;
+     char *str;
+{
+  return substitute(buf, str, (char *)"");
+}
+
+static int
+digit_8(c)
+     int c;
+{
+  unsigned int uc = c;
+
+  return (uc >= '0' && uc <= '9') ? 1 : 0;
+}
+
+static int
+atoi_8(s)
+     const char *s;
+{
+  char *pp;
+  char tmp[BUFSZ];
+
+  pp = tmp;
+
+  while(digit_8(*s))
+    *(pp++) = *(s++);
+  *pp = '\0';
+
+  return atoi(tmp);
+}
+#endif
 /*objnam.c*/
diff -aurN slashem-0.0.7E6F2/src/options.c jslashem-0.0.7E6F2-J0.0.8/src/options.c
--- slashem-0.0.7E6F2/src/options.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/options.c	2004-06-17 22:57:38.000000000 +0900
@@ -389,6 +389,9 @@
 	{ "windowtype", "windowing system to use", WINTYPELEN, DISP_IN_GAME },
 	{ "wolfname",  "the name of your (first) wolf (e.g., wolfname:Beast)",
 						PL_PSIZ, DISP_IN_GAME },
+#if 1 /*JP*/
+	{ "kcode", "端末の漢字コード,", 4, SET_IN_FILE },
+#endif
 	{ (char *)0, (char *)0, 0, 0 }
 };
 
@@ -528,7 +531,11 @@
 		       *q = index(user_string, '=');
 
 	    if (!p || (q && q < p)) p = q;
+#if 0 /*JP*/
 	    while(p && p > user_string && isspace(*(p-1))) p--;
+#else
+	    while(p && p > user_string && isspace_8(*(p-1))) p--;
+#endif
 	    if (p) len = (int)(p - user_string);
 	}
 
@@ -1130,7 +1137,11 @@
    
    tmps = cs;
    tmps++;
+#if 0 /*JP*/
    while (*tmps && isspace(*tmps)) tmps++;
+#else
+   while (*tmps && isspace_8(*tmps)) tmps++;
+#endif
 
    for (i = 0; i < SIZE(colornames); i++)
      if (strstri(tmps, colornames[i].name) == tmps) {
@@ -1145,7 +1156,11 @@
    tmps = strchr(str, '&');
    if (tmps) {
       tmps++;
+#if 0 /*JP*/
       while (*tmps && isspace(*tmps)) tmps++;
+#else
+      while (*tmps && isspace_8(*tmps)) tmps++;
+#endif
       for (i = 0; i < SIZE(attrnames); i++)
 	if (strstri(tmps, attrnames[i].name) == tmps) {
 	   a = attrnames[i].attr;
@@ -1159,7 +1174,11 @@
    tmps = str;
    if ((*tmps == '"') || (*tmps == '\'')) {
       cs--;
+#if 0 /*JP*/
       while (isspace(*cs)) cs--;
+#else
+      while (isspace_8(*cs)) cs--;
+#endif
       if (*cs == *tmps) {
 	 *cs = '\0';
 	 tmps++;
@@ -1216,9 +1235,17 @@
 	}
 
 	/* strip leading and trailing white space */
+#if 0 /*JP*/
 	while (isspace((int)*opts)) opts++;
+#else
+	while (isspace_8((int)*opts)) opts++;
+#endif
 	op = eos(opts);
+#if 0 /*JP*/
 	while (--op >= opts && isspace((int)*op)) *op = '\0';
+#else
+	while (--op >= opts && isspace_8((int)*op)) *op = '\0';
+#endif
 
 	if (!*opts) return;
 	negated = FALSE;
@@ -1604,7 +1631,10 @@
 			num++;
 		    }
 		    if (num >= 100) {
+/*JP
 			pline("Doing that so many times isn't very fruitful.");
+*/
+			pline("そんなに何回もやってもほとんど意味はない．");
 			return;
 		    }
 		}
@@ -2064,6 +2094,14 @@
 		if (badopt) badoption(opts);
 		return;
 	}
+#if 1 /*JP*/
+        if (!strncmpi(opts, "kcode", 3)){
+	    if ((op = string_for_env_opt("kcode", opts, FALSE)) != 0){
+		setkcode(*op);
+	    }
+	    return;
+        }
+#endif
 
 	/* scores:5t[op] 5a[round] o[wn] */
 	if (match_optname(opts, "scores", 4, TRUE)) {
@@ -2572,9 +2610,17 @@
 	}
 
 	/* strip leading and trailing white space */
+#if 0 /*JP*/
 	while (isspace((int)*opts)) opts++;
+#else
+	while (isspace_8((int)*opts)) opts++;
+#endif
 	op = eos(opts);
+#if 0 /*JP*/
 	while (--op >= opts && isspace((int)*op)) *op = '\0';
+#else
+	while (--op >= opts && isspace_8((int)*op)) *op = '\0';
+#endif
 
 	if (!*opts) return;
 	negated = FALSE;
@@ -2642,9 +2688,17 @@
 	}
 
 	/* strip leading and trailing white space */
+#if 0 /*JP*/
 	while (isspace((int)*opts)) opts++;
+#else
+	while (isspace_8((int)*opts)) opts++;
+#endif
 	op = eos(opts);
+#if 0 /*JP*/
 	while (--op >= opts && isspace((int)*op)) *op = '\0';
+#else
+	while (--op >= opts && isspace_8((int)*op)) *op = '\0';
+#endif
 
 	if (!*opts) return;
 	negated = FALSE;
@@ -3895,7 +3949,11 @@
 
 		    for(c = pl_fruit; *c >= '0' && *c <= '9'; c++)
 			;
+#if 0 /*JP*/
 		    if (isspace(*c) || *c == 0) numeric = TRUE;
+#else
+		    if (isspace_8(*c) || *c == 0) numeric = TRUE;
+#endif
 		}
 		if (found || numeric ||
 		    !strncmp(str, "cursed ", 7) ||
@@ -4291,18 +4349,30 @@
 		wn = tfg = tbg = (char *)0;
 
 		/* until first non-space in case there's leading spaces - before colorname*/
+#if 0 /*JP*/
 		while(*newop && isspace(*newop)) newop++;
+#else
+		while(*newop && isspace_8(*newop)) newop++;
+#endif
 		if (*newop) wn = newop;
 		else return 0;
 
 		/* until first space - colorname*/
+#if 0 /*JP*/
 		while(*newop && !isspace(*newop)) newop++;
+#else
+		while(*newop && !isspace_8(*newop)) newop++;
+#endif
 		if (*newop) *newop = '\0';
 		else return 0;
 		newop++;
 
 		/* until first non-space - before foreground*/
+#if 0 /*JP*/
 		while(*newop && isspace(*newop)) newop++;
+#else
+		while(*newop && isspace_8(*newop)) newop++;
+#endif
 		if (*newop) tfg = newop;
 		else return 0;
 
@@ -4313,12 +4383,20 @@
 		newop++;
 
 		/* until first non-space (in case there's leading space after slash) - before background */
+#if 0 /*JP*/
 		while(*newop && isspace(*newop)) newop++;
+#else
+		while(*newop && isspace_8(*newop)) newop++;
+#endif
 		if (*newop) tbg = newop;
 		else return 0;
 
 		/* until first space - background */
+#if 0 /*JP*/
 		while(*newop && !isspace(*newop)) newop++;
+#else
+		while(*newop && !isspace_8(*newop)) newop++;
+#endif
 		if (*newop) *newop++ = '\0';
 
 		for (j = 0; j < 4; ++j) {
diff -aurN slashem-0.0.7E6F2/src/pager.c jslashem-0.0.7E6F2-J0.0.8/src/pager.c
--- slashem-0.0.7E6F2/src/pager.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/pager.c	2004-08-05 10:20:56.000000000 +0900
@@ -5,12 +5,23 @@
 /* This file contains the command routines dowhatis() and dohelp() and */
 /* a few other help related facilities */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "dlb.h"
 
 STATIC_DCL boolean FDECL(is_swallow_sym, (int));
 STATIC_DCL int FDECL(append_str, (char *, const char *));
+/*JP
 STATIC_DCL struct permonst * FDECL(lookat, (int, int, char *, char *));
+*/
+STATIC_DCL struct permonst * FDECL(lookat, (int, int, char *, char *, char *));
 STATIC_DCL void FDECL(checkfile,
 		      (char *,struct permonst *,BOOLEAN_P,BOOLEAN_P));
 STATIC_DCL int FDECL(do_look, (BOOLEAN_P));
@@ -45,8 +56,13 @@
     if (strstri(buf, new_str)) return 0;
 
     space_left = BUFSZ - strlen(buf) - 1;
+#if 0 /*JP*/
     (void) strncat(buf, " or ", space_left);
     (void) strncat(buf, new_str, space_left - 4);
+#else
+    (void) strncat(buf, "または", space_left);
+    (void) strncat(buf, new_str, space_left - 6);
+#endif
     return 1;
 }
 
@@ -55,14 +71,28 @@
  * If not hallucinating and the glyph is a monster, also monster data.
  */
 STATIC_OVL struct permonst *
+#if 0 /*JP*/
 lookat(x, y, buf, monbuf)
     int x, y;
     char *buf, *monbuf;
+#else
+/*JP*/ /* `buf2' is English name for search data file easily. */
+lookat(x, y, buf, monbuf, buf2)
+    int x, y;
+    char *buf, *monbuf, *buf2;
+#endif
 {
     register struct monst *mtmp = (struct monst *) 0;
     struct permonst *pm = (struct permonst *) 0;
     int glyph;
 
+#if 1 /*JP*/
+    if(!query_lang_mode())
+      (void)set_trns_mode(0);
+
+    buf[0] = 0;
+    buf2[0] = 0;
+#endif
     buf[0] = monbuf[0] = 0;
     glyph = glyph_at(x,y);
     if (u.ux == x && u.uy == y && senseself()) {
@@ -74,6 +104,7 @@
 	    Sprintf(race, "%s ", urace.adj);
 	}
 
+#if 0 /*JP*/
 	Sprintf(buf, "%s%s%s called %s",
 		Invis ? "invisible " : "",
 		race,
@@ -105,11 +136,21 @@
 #endif
 
 
+#else
+	Sprintf(buf, "%s%sという名の%s",
+		Invis ? "姿の見えない" : "",
+		plname,
+		jtrns_mon(mons[u.umonnum].mname));
+	Strcpy(buf2, mons[u.umonnum].mname);
+#endif
 #ifdef STEED
 	if (u.usteed) {
 	    char steedbuf[BUFSZ];
 
+/*JP
 	    Sprintf(steedbuf, ", mounted on %s", y_monnam(u.usteed));
+*/
+	    Sprintf(steedbuf, "，%sに乗っている", y_monnam(u.usteed));
 	    /* assert((sizeof buf >= strlen(buf)+strlen(steedbuf)+1); */
 	    Strcat(buf, steedbuf);
 	}
@@ -137,8 +178,15 @@
 	}
     } else if (u.uswallow) {
 	/* all locations when swallowed other than the hero are the monster */
+#if 0 /*JP*/
 	Sprintf(buf, "interior of %s",
 				    Blind ? "a monster" : a_monnam(u.ustuck));
+#else
+	Sprintf(buf2, "interior of %s",
+				    Blind ? "a monster" : a_monnam(u.ustuck));
+	Sprintf(buf, "%sの内部",
+				    Blind ? "怪物" : a_monnam(u.ustuck));
+#endif
 	pm = u.ustuck->data;
     } else if (glyph_is_monster(glyph)) {
 	bhitpos.x = x;
@@ -154,6 +202,7 @@
 		name = distant_monnam(mtmp, ARTICLE_NONE, monnambuf);
 
 	    pm = mtmp->data;
+#if 0 /*JP*/
 	    Sprintf(buf, "%s%s%s",
 		    (mtmp->mx != x || mtmp->my != y) ?
 			((mtmp->isshk && accurate)
@@ -161,11 +210,30 @@
 		    (mtmp->mtame && accurate) ? "tame " :
 		    (mtmp->mpeaceful && accurate) ? "peaceful " : "",
 		    name);
+#else
+	    Strcpy(buf2, mtmp->data->mname);
+	    Sprintf(buf, "%s%s%s",
+		    (mtmp->mtame && accurate) ? "手なずけられた" :
+		    (mtmp->mpeaceful && accurate) ? "友好的な" : "",
+		    name,
+		    (mtmp->mx != x || mtmp->my != y) ?
+			((mtmp->isshk && accurate)
+				? "の尻尾" : "の尻尾") : "");
+#endif
 	    if (u.ustuck == mtmp)
+#if 0 /*JP*/
 		Strcat(buf, (Upolyd && sticks(youmonst.data)) ?
 			", being held" : ", holding you");
+#else
+		Strcat(buf, (Upolyd && sticks(youmonst.data)) ?
+			"，あなたが掴まえている" : "，あなたを掴まえている");
+#endif
 	    if (mtmp->mleashed)
+#if 0 /*JP*/
 		Strcat(buf, ", leashed to you");
+#else
+		Strcat(buf, "，紐で結ばれている");
+#endif
 
 	    if (mtmp->mtrapped && cansee(mtmp->mx, mtmp->my)) {
 		struct trap *t = t_at(mtmp->mx, mtmp->my);
@@ -174,8 +242,13 @@
 		/* newsym lets you know of the trap, so mention it here */
 		if (tt == BEAR_TRAP || tt == PIT ||
 			tt == SPIKED_PIT || tt == WEB)
+#if 0 /*JP*/
 		    Sprintf(eos(buf), ", trapped in %s",
 			    an(defsyms[trap_to_defsym(tt)].explanation));
+#else
+		    Sprintf(eos(buf), ", %sに捕まっている",
+			    jtrns_obj('^', defsyms[trap_to_defsym(tt)].explanation));
+#endif
 	    }
 
 	    {
@@ -209,40 +282,84 @@
 
 		if (ways_seen > 1 || !normal) {
 		    if (normal) {
+/*JP
 			Strcat(monbuf, "normal vision");
+*/
+			Strcat(monbuf, "通常の視覚");
 			/* can't actually be 1 yet here */
+/*JP
 			if (ways_seen-- > 1) Strcat(monbuf, ", ");
+*/
+			if (ways_seen-- > 1) Strcat(monbuf, "，");
 		    }
 		    if (useemon && mtmp->minvis) {
+/*JP
 			Strcat(monbuf, "see invisible");
+*/
+			Strcat(monbuf, "見えないものを見る視覚");
+/*JP
 			if (ways_seen-- > 1) Strcat(monbuf, ", ");
+*/
+			if (ways_seen-- > 1) Strcat(monbuf, "，");
 		    }
 		    if ((!mtmp->minvis || See_invisible) &&
 			    see_with_infrared(mtmp)) {
+/*JP
 			Strcat(monbuf, "infravision");
+*/
+			Strcat(monbuf, "赤外線が見える視覚");
+/*JP
 			if (ways_seen-- > 1) Strcat(monbuf, ", ");
+*/
+			if (ways_seen-- > 1) Strcat(monbuf, "，");
 		    }
 		    if (tp_sensemon(mtmp)) {
+/*JP
 			Strcat(monbuf, "telepathy");
+*/
+			Strcat(monbuf, "テレパシー");
+/*JP
 			if (ways_seen-- > 1) Strcat(monbuf, ", ");
+*/
+			if (ways_seen-- > 1) Strcat(monbuf, "，");
 		    }
 		    if (useemon && xraydist > 0 &&
 			    distu(mtmp->mx, mtmp->my) <= xraydist) {
 			/* Eyes of the Overworld */
+/*JP
 			Strcat(monbuf, "astral vision");
+*/
+			Strcat(monbuf, "精神による視覚");
+/*JP
 			if (ways_seen-- > 1) Strcat(monbuf, ", ");
+*/
+			if (ways_seen-- > 1) Strcat(monbuf, "，");
 		    }
 		    if (Detect_monsters) {
+/*JP
 			Strcat(monbuf, "monster detection");
+*/
+			Strcat(monbuf, "怪物を発見する能力");
+/*JP
 			if (ways_seen-- > 1) Strcat(monbuf, ", ");
+*/
+			if (ways_seen-- > 1) Strcat(monbuf, "，");
 		    }
 		    if (MATCH_WARN_OF_MON(mtmp)) {
 		    	char wbuf[BUFSZ];
 			if (Hallucination)
+/*JP
 				Strcat(monbuf, "paranoid delusion");
+*/
+				Strcat(monbuf, "偏執的妄想");
 			else {
+#if 0 /*JP*/
 				Sprintf(wbuf, "warned of %s",
 					makeplural(mtmp->data->mname));
+#else
+				Sprintf(wbuf, "%sを警告している",
+					jtrns_mon(mtmp->data->mname));
+#endif
 		    		Strcat(monbuf, wbuf);
 		    	}
 		    	if (ways_seen-- > 1) Strcat(monbuf, ", ");
@@ -268,44 +385,95 @@
 	    Strcpy(buf, distant_name(otmp, xname));
 
 	if (levl[x][y].typ == STONE || levl[x][y].typ == SCORR)
+/*JP
 	    Strcat(buf, " embedded in stone");
+*/
+	    Strcat(buf, "，岩に埋めこまれている");
 	else if (IS_WALL(levl[x][y].typ) || levl[x][y].typ == SDOOR)
+/*JP
 	    Strcat(buf, " embedded in a wall");
+*/
+	    Strcat(buf, "，壁に埋めこまれている");
 	else if (closed_door(x,y))
+/*JP
 	    Strcat(buf, " embedded in a door");
+*/
+	    Strcat(buf, "，扉に埋めこまれている");
 	else if (is_pool(x,y))
+	    /*JP 3.4.3 この部分は物体にしか使われない */
+/*JP
 	    Strcat(buf, " in water");
+*/
+	    Strcat(buf, "，水中にある");
 	else if (is_lava(x,y))
+#if 0 /*JP*/
 	    Strcat(buf, " in molten lava");	/* [can this ever happen?] */
+#else
+	    Strcat(buf, "，溶岩の中にある");	/* [can this ever happen?] */
+#endif
     } else if (glyph_is_trap(glyph)) {
 	int tnum = what_trap(glyph_to_trap(glyph));
+#if 0 /*JP*/
 	Strcpy(buf, defsyms[trap_to_defsym(tnum)].explanation);
+#else
+	Strcpy(buf, jtrns_obj('^', defsyms[
+	    trap_to_defsym(Hallucination ? rn2(TRAPNUM-3)+3 : tnum)].explanation));
+#endif
     } else if(!glyph_is_cmap(glyph)) {
+/*JP
 	Strcpy(buf,"dark part of a room");
+*/
+	Strcpy(buf,"部屋の暗い部分");
     } else switch(glyph_to_cmap(glyph)) {
     case S_altar:
 	if(!In_endgame(&u.uz))
+#if 0 /*JP*/
 	    Sprintf(buf, "%s altar",
 		align_str(Amask2align(levl[x][y].altarmask & ~AM_SHRINE)));
+#else
+	    Sprintf(buf, "%sの祭壇",
+		align_str(Amask2align(levl[x][y].altarmask & ~AM_SHRINE)));
+#endif
+/*JP
 	else Sprintf(buf, "aligned altar");
+*/
+	else Sprintf(buf, "属性の祭壇");
 	break;
     case S_ndoor:
 	if (is_drawbridge_wall(x, y) >= 0)
+/*JP
 	    Strcpy(buf,"open drawbridge portcullis");
+*/
+	    Strcpy(buf,"降りている跳ね橋");
 	else if ((levl[x][y].doormask & ~D_TRAPPED) == D_BROKEN)
+/*JP
 	    Strcpy(buf,"broken door");
+*/
+	    Strcpy(buf,"壊れた扉");
 	else
+/*JP
 	    Strcpy(buf,"doorway");
+*/
+	    Strcpy(buf,"通路");
 	break;
     case S_cloud:
+/*JP
 	Strcpy(buf, Is_airlevel(&u.uz) ? "cloudy area" : "fog/vapor cloud");
+*/
+	Strcpy(buf, Is_airlevel(&u.uz) ? "曇っている場所" : "霧/蒸気の雲");
 	break;
     case S_water:
     case S_pool:
+/*JP
 	Strcpy(buf, level.flags.lethe? "sparkling water" : "water");
+*/
+	Strcpy(buf, level.flags.lethe? "泡立つ水" : "水");
 	break;
     default:
+/*JP
 	Strcpy(buf,defsyms[glyph_to_cmap(glyph)].explanation);
+*/
+	Strcpy(buf, jtrns_obj('S', defsyms[glyph_to_cmap(glyph)].explanation));
 	break;
     }
 
@@ -337,7 +505,11 @@
 
     fp = dlb_fopen_area(NH_DATAAREA, NH_DATAFILE, "r");
     if (!fp) {
+#if 0 /*JP*/
 	pline("Cannot open data file!");
+#else
+	pline("データファイルを開けない！");
+#endif
 	return;
     }
 
@@ -445,11 +617,18 @@
 		return;
 	}
 
+/*JP
 	if (user_typed_name || without_asking || yn("More info?") == 'y') {
+*/
+	if (user_typed_name || without_asking || yn("詳細を見る？") == 'y') {
 	    winid datawin;
 
 	    if (dlb_fseek(fp, txt_offset + entry_offset, SEEK_SET) < 0) {
+#if 0 /*JP*/
 		pline("? Seek error on 'data' file!");
+#else
+		pline("'data'ファイルのシークエラー！");
+#endif
 		(void) dlb_fclose(fp);
 		return;
 	    }
@@ -464,7 +643,10 @@
 	    destroy_nhwindow(datawin);
 	}
     } else if (user_typed_name)
+/*JP
 	pline("I don't have any information on those things.");
+*/
+	pline("そんな名前は聞いたことがない．");
 
     (void) dlb_fclose(fp);
 }
@@ -476,13 +658,20 @@
 #define LOOK_VERBOSE		3	/* ':' -- show more info w/o asking */
 
 /* also used by getpos hack in do_name.c */
+/*JP
 const char what_is_an_unknown_object[] = "an unknown object";
+*/
+const char what_is_an_unknown_object[] = "謎の物体";
 
 STATIC_OVL int
 do_look(quick)
     boolean quick;	/* use cursor && don't search for "more info" */
 {
     char    out_str[BUFSZ], look_buf[BUFSZ];
+#if 1 /*JP*/
+    char look_buf2[BUFSZ];
+    const char *firstmatch2 = 0;
+#endif
     const char *x_str, *firstmatch = 0;
     struct permonst *pm = 0;
     int     i, ans = 0;
@@ -494,12 +683,18 @@
     boolean need_to_look;	/* need to get explan. from glyph */
     boolean hit_trap;		/* true if found trap explanation */
     int skipped_venom;		/* non-zero if we ignored "splash of venom" */
+/*JP
     static const char *mon_interior = "the interior of a monster";
+*/
+    static const char *mon_interior = "怪物の内部";
 
     if (quick) {
 	from_screen = TRUE;	/* yes, we want to use the cursor */
     } else {
+/*JP
 	i = ynq("Specify unknown object by cursor?");
+*/
+	i = ynq("カーソルで物体を指定する？");
 	if (i == 'q') return 0;
 	from_screen = (i == 'y');
     }
@@ -509,7 +704,10 @@
 	cc.y = u.uy;
 	sym = 0;		/* gcc -Wall lint */
     } else {
+/*JP
 	getlin("Specify what? (type the word)", out_str);
+*/
+	getlin("何を調べる？(文字を入れてね)", out_str);
 	if (out_str[0] == '\0' || out_str[0] == '\033')
 	    return 0;
 
@@ -538,10 +736,17 @@
 	    int glyph;	/* glyph at selected position */
 
 	    if (flags.verbose)
+#if 0 /*JP*/
 		pline("Please move the cursor to %s.",
 		       what_is_an_unknown_object);
+#else
+		pline("カーソルを物体に移動してください．");
+#endif
 	    else
+/*JP
 		pline("Pick an object.");
+*/
+		pline("物体を指定してください．");
 
 	    ans = getpos(&cc, quick, what_is_an_unknown_object);
 	    if (ans < 0 || cc.x < 0) {
@@ -588,11 +793,22 @@
 		monexplain[i]) {
 		need_to_look = TRUE;
 		if (!found) {
+/*JP
 		    Sprintf(out_str, "%c       %s", sym, an(monexplain[i]));
+*/
+		    Sprintf(out_str, "%c       %s", sym, jtrns_obj('S', monexplain[i]));
+#if 0 /*JP*/
 		    firstmatch = monexplain[i];
+#else
+		    firstmatch = jtrns_obj('S',monexplain[i]);
+		    firstmatch2 = monexplain[i];
+#endif
 		    found++;
 		} else {
+/*JP
 		    found += append_str(out_str, an(monexplain[i]));
+*/
+		    found += append_str(out_str, jtrns_obj('S',monexplain[i]));
 		}
 	    }
 	}
@@ -603,7 +819,11 @@
 		(sym == monsyms[S_HUMAN] && cc.x == u.ux && cc.y == u.uy) :
 		(sym == def_monsyms[S_HUMAN] && !iflags.showrace)) &&
 	    !(Race_if(PM_HUMAN) || Race_if(PM_ELF)) && !Upolyd)
+#if 0 /*JP*/
 	    found += append_str(out_str, "you");	/* tack on "or you" */
+#else
+	    found += append_str(out_str, "あなた");	/* tack on "or you" */
+#endif
 
 	/*
 	 * Special case: if identifying from the screen, and we're swallowed,
@@ -613,7 +833,12 @@
 	if (u.uswallow && from_screen && is_swallow_sym(sym)) {
 	    if (!found) {
 		Sprintf(out_str, "%c       %s", sym, mon_interior);
+#if 0 /*JP*/
 		firstmatch = mon_interior;
+#else
+		firstmatch = "怪物の内部";
+		firstmatch2 = mon_interior;
+#endif
 	    } else {
 		found += append_str(out_str, mon_interior);
 	    }
@@ -629,22 +854,44 @@
 		    continue;
 		}
 		if (!found) {
+/*JP
 		    Sprintf(out_str, "%c       %s", sym, an(objexplain[i]));
+*/
+		    Sprintf(out_str, "%c       %s", sym, jtrns_obj('S',objexplain[i]));
+#if 0 /*JP*/
 		    firstmatch = objexplain[i];
+#else
+		    firstmatch = jtrns_obj('S',objexplain[i]);
+		    firstmatch2 = objexplain[i];
+#endif
 		    found++;
 		} else {
+/*JP
 		    found += append_str(out_str, an(objexplain[i]));
+*/
+		    found += append_str(out_str, jtrns_obj('S',objexplain[i]));
 		}
 	    }
 	}
 
 	if (sym == DEF_INVISIBLE) {
 	    if (!found) {
+/*JP
 		Sprintf(out_str, "%c       %s", sym, an(invisexplain));
+*/
+		Sprintf(out_str, "%c       %s", sym, jtrns_obj('S',invisexplain));
+#if 0 /*JP*/
 		firstmatch = invisexplain;
+#else
+		firstmatch = jtrns_obj('S', invisexplain);
+		firstmatch2 = invisexplain;
+#endif
 		found++;
 	    } else {
+/*JP
 		found += append_str(out_str, an(invisexplain));
+*/
+		found += append_str(out_str, jtrns_obj('S', invisexplain));
 	    }
 	}
 
@@ -656,31 +903,57 @@
 	    x_str = defsyms[i].explanation;
 	    if (sym == (from_screen ? showsyms[i] : defsyms[i].sym) && *x_str) {
 		/* avoid "an air", "a water", or "a floor of a room" */
+#if 0 /*JP*/
 		int article = (i == S_room) ? 2 :		/* 2=>"the" */
 			      !(strcmp(x_str, "air") == 0 ||	/* 1=>"an"  */
 				strcmp(x_str, "water") == 0);	/* 0=>(none)*/
+#endif
 
 		if (!found) {
 		    if (is_cmap_trap(i)) {
+/*JP
 			Sprintf(out_str, "%c       a trap", sym);
+*/
+			Sprintf(out_str, "%c       罠", sym);
 			hit_trap = TRUE;
 		    } else if (level.flags.lethe && !strcmp(x_str, "water")) {
+#if 0 /*JP*/
 			Sprintf(out_str, "%c       sparkling water", sym);
+#else
+			Sprintf(out_str, "%c       泡立つ水", sym);
+#endif
 		    } else {
+#if 0 /*JP*/
 			Sprintf(out_str, "%c       %s", sym,
 				article == 2 ? the(x_str) :
 				article == 1 ? an(x_str) : x_str);
+#else
+			Sprintf(out_str, "%c       %s", sym,
+				jtrns_obj('S', x_str));
+#endif
 		    }
+#if 0 /*JP*/
 		    firstmatch = x_str;
+#else
+		    firstmatch = jtrns_obj('S', x_str);
+		    firstmatch2 = x_str;
+#endif
 		    found++;
 		} else if (!u.uswallow && !(hit_trap && is_cmap_trap(i)) &&
 			   !(found >= 3 && is_cmap_drawbridge(i))) {
+#if 0 /*JP*/
 		    if (level.flags.lethe && !strcmp(x_str, "water"))
 			found += append_str(out_str, "sparkling water");
 		    else
 		    	found += append_str(out_str,
 					article == 2 ? the(x_str) :
 					article == 1 ? an(x_str) : x_str);
+#else
+		    if (level.flags.lethe && !strcmp(x_str, "water"))
+			found += append_str(out_str, "泡立つ水");
+		    else
+			found += append_str(out_str, jtrns_obj('S', x_str));
+#endif
 		    if (is_cmap_trap(i)) hit_trap = TRUE;
 		}
 
@@ -697,6 +970,9 @@
 			Sprintf(out_str, "%c       %s",
 				sym, def_warnsyms[i].explanation);
 			firstmatch = def_warnsyms[i].explanation;
+#if 1 /*JP*/ /* 多分不要だが念のため */
+			firstmatch2 = firstmatch;
+#endif
 			found++;
 		} else {
 			found += append_str(out_str, def_warnsyms[i].explanation);
@@ -713,11 +989,20 @@
 	if (skipped_venom && found < 2) {
 	    x_str = objexplain[VENOM_CLASS];
 	    if (!found) {
+#if 0 /*JP*/
 		Sprintf(out_str, "%c       %s", sym, an(x_str));
 		firstmatch = x_str;
+#else
+		Sprintf(out_str, "%c       %s", sym, jtrns_obj('S', (x_str)));
+		firstmatch = jtrns_obj('S', x_str);
+		firstmatch2 = x_str;
+#endif
 		found++;
 	    } else {
+/*JP
 		found += append_str(out_str, an(x_str));
+*/
+		found += append_str(out_str, jtrns_obj('S', x_str));
 	    }
 	}
 
@@ -741,15 +1026,24 @@
 		char monbuf[BUFSZ];
 		char temp_buf[BUFSZ];
 
+/*JP
 		pm = lookat(cc.x, cc.y, look_buf, monbuf);
+*/
+		pm = lookat(cc.x, cc.y, look_buf, monbuf, look_buf2);
 		firstmatch = look_buf;
+#if 1 /*JP*/
+		firstmatch2 = look_buf2;
+#endif
 		if (*firstmatch) {
 		    Sprintf(temp_buf, " (%s)", firstmatch);
 		    (void)strncat(out_str, temp_buf, BUFSZ-strlen(out_str)-1);
 		    found = 1;	/* we have something to look up */
 		}
 		if (monbuf[0]) {
+/*JP
 		    Sprintf(temp_buf, " [seen: %s]", monbuf);
+*/
+		    Sprintf(temp_buf, "[%s]", monbuf);
 		    (void)strncat(out_str, temp_buf, BUFSZ-strlen(out_str)-1);
 		}
 #ifdef WIZARD
@@ -769,16 +1063,31 @@
 	if (found) {
 	    pline("%s", out_str);
 	    /* check the data file for information about this thing */
+#if 0 /*JP*/
 	    if (found == 1 && ans != LOOK_QUICK && ans != LOOK_ONCE &&
 			(ans == LOOK_VERBOSE || (flags.help && !quick))) {
+#else
+	    if (found == 1 && ans != LOOK_QUICK && ans != LOOK_ONCE &&
+			(ans == LOOK_VERBOSE || (flags.help && !quick)) &&
+			firstmatch2) {
+#endif
 		char temp_buf[BUFSZ];
+#if 0 /*JP*/
 		Strcpy(temp_buf, level.flags.lethe 
 					&& !strcmp(firstmatch, "water")?
 				"lethe" : firstmatch);
+#else
+		Strcpy(temp_buf, level.flags.lethe
+					&& !strcmp(firstmatch, "water")?
+				"レーテ" : firstmatch2);
+#endif
 		checkfile(temp_buf, pm, FALSE, (boolean)(ans == LOOK_VERBOSE));
 	    }
 	} else {
+/*JP
 	    pline("I've never heard of such things.");
+*/
+	    pline("そんな名前は聞いたことがない．");
 	}
 
     } while (from_screen && !quick && ans != LOOK_ONCE);
@@ -818,6 +1127,7 @@
 			    tt == ROCKTRAP) break;
 		}
 		tt = what_trap(tt);
+#if 0 /*JP*/
 		pline("That is %s%s%s.",
 		      an(defsyms[trap_to_defsym(tt)].explanation),
 		      !trap->madeby_u ? "" : (tt == WEB) ? " woven" :
@@ -826,9 +1136,18 @@
 			     as much "set" as "dug" anyway */
 			  (tt == HOLE || tt == PIT) ? " dug" : " set",
 		      !trap->madeby_u ? "" : " by you");
+#else
+		pline("それは%s%sだ．",
+		      !trap->madeby_u ? "" : (tt == WEB) ? "あなたが張った" :
+			  (tt == HOLE || tt == PIT) ? "あなたが掘った" : "あなたが仕掛けた",
+		      jtrns_obj('^', defsyms[trap_to_defsym(tt)].explanation));
+#endif
 		return 0;
 	    }
+/*JP
 	pline("I can't see a trap there.");
+*/
+	pline("そこには罠はみあたらない．");
 	return 0;
 }
 
@@ -843,7 +1162,11 @@
 
 	fp = dlb_fopen_area(NH_CMDHELPAREA, NH_CMDHELPFILE, "r");
 	if (!fp) {
+#if 0 /*JP*/
 		pline("Cannot open data file!");
+#else
+	pline("データファイルを開けない！");
+#endif
 		return 0;
 	}
 
@@ -888,7 +1211,10 @@
 #if defined(UNIX) || defined(VMS)
 	introff();
 #endif
+/*JP
 	q = yn_function("What command?", (char *)0, '\0');
+*/
+	q = yn_function("どういうコマンド？", (char *)0, '\0');
 #if defined(UNIX) || defined(VMS)
 	intron();
 #endif
@@ -896,12 +1222,16 @@
 	if (reslt)
 		pline("%s", reslt);
 	else
+/*JP
 		pline("I've never heard of such commands.");
+*/
+		pline("そんなコマンドは知らない．");
 	return 0;
 }
 
 /* data for help_menu() */
 static const char *help_menu_items[] = {
+#if 0 /*JP*/
 /* 0*/	"Long description of the game and commands.",
 /* 1*/	"List of game commands.",
 /* 2*/	"Concise history of Slash'EM.",
@@ -921,6 +1251,28 @@
 #ifdef WIZARD
 	"List of wizard-mode commands.",
 #endif
+#else /*JP*/
+/* 0*/	"ゲームおよびコマンドの解説．(長文)",
+/* 1*/	"コマンド一覧．",
+/* 2*/	"NetHackの簡単な歴史．",
+/*	"JNetHackの簡単な歴史．",*/
+/* 3*/	"画面に表示される文字の説明．",
+/* 4*/	"このキーが何を意味するかの説明．",
+/* 5*/	"ゲームのオプション一覧．",
+/* 6*/	"ゲームのオプション一覧．(長文)",
+/* 7*/	"拡張コマンド一覧．",
+/* 8*/	"NetHackのライセンス．",
+#ifndef MAC
+/*WAC Add access to txt guidebook*/
+/* 9*/  "Slash'EMガイドブック",
+#endif
+#ifdef PORT_HELP
+	"%sに特有のヘルプおよびコマンド．",
+#endif
+#ifdef WIZARD
+	"ウィザードモードのコマンド一覧．",
+#endif
+#endif /*JP*/
 	"",
 	(char *)0
 };
@@ -972,7 +1324,10 @@
 		add_menu(tmpwin, NO_GLYPH, &any, 0, 0,
 			ATR_NONE, help_menu_items[i], MENU_UNSELECTED);
 	    }
+/*JP
 	end_menu(tmpwin, "Select one item:");
+*/
+	end_menu(tmpwin, "選んでください：");
 	n = select_menu(tmpwin, PICK_ONE, &selected);
 	destroy_nhwindow(tmpwin);
 	if (n > 0) {
diff -aurN slashem-0.0.7E6F2/src/pickup.c jslashem-0.0.7E6F2-J0.0.8/src/pickup.c
--- slashem-0.0.7E6F2/src/pickup.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/pickup.c	2004-07-27 09:08:40.000000000 +0900
@@ -3,6 +3,14 @@
 /* NetHack may be freely redistributed.  See license for details. */
 
 /*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+/*
  *	Contains code for picking objects up, and container use.
  */
 
@@ -56,9 +64,15 @@
 /* if you can figure this out, give yourself a hearty pat on the back... */
 #define GOLD_CAPACITY(w,n)	(((w) * -100L) - ((n) + 50L) - 1L)
 
+#if 0 /*JP*/
 static const char moderateloadmsg[] = "You have a little trouble lifting";
 static const char nearloadmsg[] = "You have much trouble lifting";
 static const char overloadmsg[] = "You have extreme difficulty lifting";
+#else
+static const char moderateloadmsg[] = "を持ったら少しふらついた．";
+static const char nearloadmsg[] = "はずっしりと肩にのしかかった．";
+static const char overloadmsg[] = "を持ちあげるのはとてもつらい．";
+#endif
 
 /* BUG: this lets you look at cockatrice corpses while blind without
    touching them */
@@ -201,8 +215,13 @@
 		oclasses[oclassct = 0] = '\0';
 		*one_at_a_time = *everything = FALSE;
 		not_everything = FALSE;
+#if 0 /*JP*/
 		Sprintf(qbuf,"What kinds of thing do you want to %s? [%s]",
 			action, ilets);
+#else
+		Sprintf(qbuf,"どの種類のものを%sか？[%s]",
+			jconj(action,"ます"), ilets);
+#endif
 		getlin(qbuf,inbuf);
 		if (*inbuf == '\033') return FALSE;
 
@@ -226,6 +245,7 @@
 			    oclasses[oclassct++] = oc_of_sym;
 			    oclasses[oclassct] = '\0';
 			} else {
+#if 0 /*JP*/
 			    if (!where)
 				where = !strcmp(action,"pick up")  ? "here" :
 					!strcmp(action,"take out") ?
@@ -234,6 +254,16 @@
 				There("are no %c's %s.", sym, where);
 			    else
 				You("have no %c's.", sym);
+#else
+			    if (!where)
+			        where = (!strcmp(action,"pick up")||!strcmp(action,"拾う")) ? "ここ" :
+					(!strcmp(action,"take out")||!strcmp(action,"取り出す")) ?
+							    "の中" : "";
+			    if (*where)
+				pline("%cは%sにない．", sym, where);
+			    else
+				You("%cは持っていない．", sym);
+#endif
 			    not_everything = TRUE;
 			}
 		    }
@@ -434,7 +464,10 @@
 		}
 		if (notake(youmonst.data)) {
 		    if (!autopickup)
+/*JP
 			You("are physically incapable of picking anything up.");
+*/
+			You("物理的に拾いあげることができない．");
 		    else
 			check_here(FALSE);
 		    return (0);
@@ -468,7 +501,10 @@
 	    /* use menus exclusively */
 	    if (count) {	/* looking for N of something */
 		char buf[QBUFSZ];
+/*JP
 		Sprintf(buf, "Pick %d of what?", count);
+*/
+		Sprintf(buf, "何を%d個拾いますか？", count);
 		val_for_n_or_more = count;	/* set up callback selector */
 		n = query_objlist(buf, objchain,
 			    traverse_how|AUTOSELECT_SINGLE|INVORDER_SORT,
@@ -477,7 +513,10 @@
 		for (i = 0; i < n; i++)
 		    pick_list[i].count = count;
 	    } else {
+/*JP
 		n = query_objlist("Pick up what?", objchain,
+*/
+		n = query_objlist("何を拾いますか？", objchain,
 			traverse_how|AUTOSELECT_SINGLE|INVORDER_SORT|FEEL_COCKATRICE,
 			&pick_list, PICK_ANY, all_but_uchain);
 	    }
@@ -520,17 +559,28 @@
 	    } else if (ct >= 2) {
 		int via_menu = 0;
 
+#if 0 /*JP*/
 		There("are %s objects here.",
 		      (ct <= 10) ? "several" : "many");
+#else
+		pline("ここには%sものがある．",
+		      (ct <= 10) ? "いくつか" : "沢山の");
+#endif
 		if (!query_classes(oclasses, &selective, &all_of_a_type,
+/*JP
 				   "pick up", objchain,
+*/
+				   "拾う", objchain,
 				   traverse_how == BY_NEXTHERE,
 #ifndef GOLDOBJ
 				   FALSE,
 #endif
 				   &via_menu)) {
 		    if (!via_menu) return (0);
+/*JP
 		    n = query_objlist("Pick up what?",
+*/
+		    n = query_objlist("何を拾いますか？",
 				  objchain,
 				  traverse_how|(selective ? 0 : INVORDER_SORT),
 				  &pick_list, PICK_ANY,
@@ -551,9 +601,15 @@
 
 		if (!all_of_a_type) {
 		    char qbuf[BUFSZ];
+#if 0 /*JP*/
 		    Sprintf(qbuf, "Pick up %s?",
 			safe_qbuf("", sizeof("Pick up ?"), doname(obj),
 					an(simple_typename(obj->otyp)), "something"));
+#else
+		    Sprintf(qbuf, "%sを拾いますか？",
+			safe_qbuf("", sizeof("%sを拾いますか？"), doname(obj),
+					an(simple_typename(obj->otyp)), "これ"));
+#endif
 		    switch ((obj->quan < 2L) ? ynaq(qbuf) : ynNaq(qbuf)) {
 		    case 'q': goto end_query;	/* out 2 levels */
 		    case 'n': continue;
@@ -857,7 +913,10 @@
 		any.a_void = 0;
 		any.a_int = ALL_TYPES_SELECTED;
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 		       (qflags & WORN_TYPES) ? "All worn types" : "All types",
+*/
+		       (qflags & WORN_TYPES) ? "身につけるもの全て" : "全て",
 			MENU_UNSELECTED);
 		invlet = 'b';
 	} else
@@ -893,7 +952,10 @@
 		any.a_void = 0;
 		any.a_int = 'u';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 			"Unpaid items", MENU_UNSELECTED);
+*/
+			"未払の道具", MENU_UNSELECTED);
 	}
 	/* billed items: checked by caller, so always include if BILLED_TYPES */
 	if (qflags & BILLED_TYPES) {
@@ -901,7 +963,10 @@
 		any.a_void = 0;
 		any.a_int = 'x';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 			 "Unpaid items already used up", MENU_UNSELECTED);
+*/
+			 "未払で使ってしまった道具", MENU_UNSELECTED);
 	}
 	if (qflags & CHOOSE_ALL) {
 		invlet = 'A';
@@ -909,8 +974,13 @@
 		any.a_int = 'A';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
 			(qflags & WORN_TYPES) ?
+#if 0 /*JP*/
 			"Auto-select every item being worn" :
 			"Auto-select every item", MENU_UNSELECTED);
+#else
+			"身につけられる物全て" :
+			"全て", MENU_UNSELECTED);
+#endif
 	}
 	/* items with b/u/c/unknown if there are any */
 	if (do_blessed) {
@@ -918,28 +988,40 @@
 		any.a_void = 0;
 		any.a_int = 'B';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 			"Items known to be Blessed", MENU_UNSELECTED);
+*/
+			"祝福されているとわかっているもの", MENU_UNSELECTED);
 	}
 	if (do_cursed) {
 		invlet = 'C';
 		any.a_void = 0;
 		any.a_int = 'C';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 			"Items known to be Cursed", MENU_UNSELECTED);
+*/
+			"呪われているとわかっているもの", MENU_UNSELECTED);
 	}
 	if (do_uncursed) {
 		invlet = 'U';
 		any.a_void = 0;
 		any.a_int = 'U';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 			"Items known to be Uncursed", MENU_UNSELECTED);
+*/
+			"呪われていないとわかっているもの", MENU_UNSELECTED);
 	}
 	if (do_buc_unknown) {
 		invlet = 'X';
 		any.a_void = 0;
 		any.a_int = 'X';
 		add_menu(win, NO_GLYPH, &any, invlet, 0, ATR_NONE,
+/*JP
 			"Items of unknown B/C/U status",
+*/
+			"祝福／呪いがわからないもの",
 			MENU_UNSELECTED);
 	}
 	end_menu(win, qstr);
@@ -996,7 +1078,11 @@
     long umoney = money_cnt(invent);
 #endif
     unsigned saveowt;
+#if 0 /*JP*/
     const char *verb, *prefx1, *prefx2, *suffx;
+#else
+    const char *verb, *prefx1;
+#endif
     char obj_nambuf[BUFSZ], where[BUFSZ];
 
     savequan = obj->quan;
@@ -1101,11 +1187,23 @@
 	/* some message will be given */
 	Strcpy(obj_nambuf, doname(obj));
 	if (container) {
+/*JP
 	    Sprintf(where, "in %s", the(xname(container)));
+*/
+	    Sprintf(where, "%sの中に入っている", the(xname(container)));
+/*JP
 	    verb = "carry";
+*/
+	    verb = "運べない";
 	} else {
+/*JP
 	    Strcpy(where, "lying here");
+*/
+	    Strcpy(where, "ここに置いてある");
+/*JP
 	    verb = telekinesis ? "acquire" : "lift";
+*/
+	    verb = telekinesis ? "獲得できない" : "持ちあげられない";
 	}
     } else {
 	/* lint supppression */
@@ -1115,29 +1213,51 @@
     /* we can carry qq of them */
     if (qq > 0) {
 	if (qq < count)
+#if 0 /*JP*/
 	    You("can only %s %s of the %s %s.",
 		verb, (qq == 1L) ? "one" : "some", obj_nambuf, where);
+#else
+	    You("%s%sのうちの%sしか%s．",
+		where, obj_nambuf, (qq == 1L) ? "１つ" : "いくつか", verb);
+#endif
 	*wt_after = wt;
 	return qq;
     }
 
+#if 0 /*JP*/
     if (!container) Strcpy(where, "here");  /* slightly shorter form */
+#else
+    if (!container) Strcpy(where, "ここには");  /* slightly shorter form */
+#endif
 #ifndef GOLDOBJ
     if (invent || u.ugold) {
 #else
     if (invent || umoney) {
 #endif
+#if 0 /*JP*/
 	prefx1 = "you cannot ";
 	prefx2 = "";
 	suffx  = " any more";
+#else
+	prefx1 = "これ以上";
+#endif
     } else {
+#if 0 /*JP*/
 	prefx1 = (obj->quan == 1L) ? "it " : "even one ";
 	prefx2 = "is too heavy for you to ";
 	suffx  = "";
+#else
+	prefx1 = "重すぎて";
+#endif
     }
+#if 0 /*JP*/
     There("%s %s %s, but %s%s%s%s.",
 	  otense(obj, "are"), obj_nambuf, where,
 	  prefx1, prefx2, verb, suffx);
+#else
+    pline("%s%sがある，しかし%s．",
+	  where, obj_nambuf, verb);
+#endif
 
  /* *wt_after = iw; */
     return 0L;
@@ -1154,8 +1274,13 @@
     int result, old_wt, new_wt, prev_encumbr, next_encumbr;
 
     if (obj->otyp == BOULDER && In_sokoban(&u.uz)) {
+#if 0 /*JP*/
 	You("cannot get your %s around this %s.",
 			body_part(HAND), xname(obj));
+#else
+	You("%sを%sで持ちあげることができない．",
+			xname(obj), body_part(HAND));
+#endif
 	return -1;
     }
     if (obj->otyp == LOADSTONE ||
@@ -1171,7 +1296,10 @@
 #else
     } else if (inv_cnt() >= 52 && !merge_choice(invent, obj)) {
 #endif
+/*JP
 	Your("knapsack cannot accommodate any more items.");
+*/
+	Your("ナップザックはこれ以上アイテムを詰め込めない．");
 	result = -1;	/* nothing lifted */
     } else {
 	result = 1;
@@ -1185,8 +1313,12 @@
 	    } else {
 		char qbuf[BUFSZ];
 		long savequan = obj->quan;
+#if 1 /*JP*/
+		const char *msg;
+#endif
 
 		obj->quan = *cnt_p;
+#if 0 /*JP*/
 		Strcpy(qbuf,
 			(next_encumbr > HVY_ENCUMBER) ? overloadmsg :
 			(next_encumbr > MOD_ENCUMBER) ? nearloadmsg :
@@ -1194,6 +1326,15 @@
 		Sprintf(eos(qbuf), " %s. Continue?",
 			safe_qbuf(qbuf, sizeof(" . Continue?"),
 				doname(obj), an(simple_typename(obj->otyp)), "something"));
+#else
+		msg = (next_encumbr > HVY_ENCUMBER) ? overloadmsg :
+			(next_encumbr > MOD_ENCUMBER) ? nearloadmsg :
+			moderateloadmsg;
+		Sprintf(qbuf, "%s%s．続けますか？", 
+			safe_qbuf(qbuf, strlen(msg) + sizeof("．続けますか？"),
+				doname(obj), simple_typename(obj->otyp), "これ"),
+			msg);
+#endif
 		obj->quan = savequan;
 		switch (ynq(qbuf)) {
 		case 'q':  result = -1; break;
@@ -1250,7 +1391,10 @@
 	int res, nearload;
 #ifndef GOLDOBJ
 	const char *where = (obj->ox == u.ux && obj->oy == u.uy) ?
+/*JP
 			    "here" : "there";
+*/
+			    "ここ" : "そこ";
 #endif
 
 	if (obj->quan < count) {
@@ -1279,26 +1423,50 @@
 
 	    if (gold_capacity <= 0L) {
 		pline(
+#if 0 /*JP*/
 	       "There %s %ld gold piece%s %s, but you cannot carry any more.",
 		      otense(obj, "are"),
 		      obj->quan, plur(obj->quan), where);
+#else
+		"%sには%ld個の金塊がある，しかしこれ以上持てない．",
+		      where, obj->quan);
+#endif
 		return 0;
 	    } else if (gold_capacity < count) {
+#if 0 /*JP*/
 		You("can only %s %s of the %ld gold pieces lying %s.",
 		    telekinesis ? "acquire" : "carry",
 		    gold_capacity == 1L ? "one" : "some", obj->quan, where);
+#else
+		You("%sにある%ld個の金塊の%sしか%s．",
+		    where,
+		    obj->quan, gold_capacity == 1L ? "ひとつ" : "一部",
+		    telekinesis ? "獲得できない" : "運べない");
+#endif
+#if 0 /*JP*/
 		pline("%s %ld gold piece%s.",
 		    nearloadmsg, gold_capacity, plur(gold_capacity));
+#else
+		pline("%ld個の金塊%s．", 
+		      gold_capacity, nearloadmsg);
+#endif
 		u.ugold += gold_capacity;
 		obj->quan -= gold_capacity;
 		costly_gold(obj->ox, obj->oy, gold_capacity);
 	    } else {
 		u.ugold += count;
 		if ((nearload = near_capacity()) != 0)
+#if 0 /*JP*/
 		    pline("%s %ld gold piece%s.",
 			  nearload < MOD_ENCUMBER ?
 			  moderateloadmsg : nearloadmsg,
 			  count, plur(count));
+#else
+		    pline("%ld個の金塊%s",
+			  count,
+			  nearload < MOD_ENCUMBER ?
+			  moderateloadmsg : nearloadmsg);
+#endif
 		else
 		    prinv((char *) 0, obj, count);
 		costly_gold(obj->ox, obj->oy, count);
@@ -1320,14 +1488,22 @@
 			char kbuf[BUFSZ];
 
 			Strcpy(kbuf, an(corpse_xname(obj, TRUE)));
+/*JP
 			pline("Touching %s is a fatal mistake.", kbuf);
+*/
+			pline("%sの死体に触れるのは致命的な間違いだ．", kbuf);
 			Strcpy(kbuf, an(killer_cxname(obj, TRUE)));
 			instapetrify(kbuf);
 		    return -1;
 		}
 	    } else if (is_rider(&mons[obj->corpsenm])) {
+#if 0 /*JP*/
 		pline("At your %s, the corpse suddenly moves...",
 			telekinesis ? "attempted acquisition" : "touch");
+#else
+		pline("あなたが%sると突然死体が動き出した．．．",
+			telekinesis ? "獲得しようとす" : "触");
+#endif
 		(void) revive_corpse(obj, FALSE);
 		exercise(A_WIS, FALSE);
 		return -1;
@@ -1336,10 +1512,16 @@
 	    if (obj->blessed) obj->blessed = 0;
 	    else if (!obj->spe && !obj->cursed) obj->spe = 1;
 	    else {
+#if 0 /*JP*/
 		pline_The("scroll%s %s to dust as you %s %s up.",
 			plur(obj->quan), otense(obj, "turn"),
 			telekinesis ? "raise" : "pick",
 			(obj->quan == 1L) ? "it" : "them");
+#else
+		pline("%s巻物はあなたが%s塵となってしまった．",
+			(obj->quan == 1L) ? "その" : "それらの",
+			telekinesis ? "確保すると" : "拾い上げると");
+#endif
 		if (!(objects[SCR_SCARE_MONSTER].oc_name_known) &&
 				    !(objects[SCR_SCARE_MONSTER].oc_uname))
 		    docall(obj);
@@ -1418,6 +1600,7 @@
 
     if(oldcap < newcap) {
 	switch(newcap) {
+#if 0 /*JP*/
 	case 1: Your("movements are slowed slightly because of your load.");
 		break;
 	case 2: You("rebalance your load.  Movement is difficult.");
@@ -1427,11 +1610,23 @@
 		break;
 	default: You("%s move a handspan with this load!",
 		     newcap == 4 ? "can barely" : "can't even");
+#else
+	case 1: Your("動きは荷物のために少し遅くなった．");
+		break;
+	case 2: You("荷物の釣合をとり直したが，動きにくい．");
+		break;
+	case 3: You("荷物の重みでのたうちまわった．動くのが非常にきつい．");
+		break;
+	case 4: You("かろうじて，動くことができる．");
+		break;
+	default: You("この重さでは少しも動けない！");
+#endif
 		break;
 	}
 	flags.botl = 1;
     } else if(oldcap > newcap) {
 	switch(newcap) {
+#if 0 /*JP*/
 	case 0: Your("movements are now unencumbered.");
 		break;
 	case 1: Your("movements are only slowed slightly by your load.");
@@ -1441,6 +1636,16 @@
 	case 3: You("%s under your load.  Movement is still very hard.",
 		    stagger(youmonst.data, "stagger"));
 		break;
+#else
+	case 0: Your("動きは楽になった．");
+		break;
+	case 1: You("ちょっと動きやすくなった．");
+		break;
+	case 2: You("荷物の釣合をとり直した．だがまだ動くのはきつい．");
+		break;
+	case 3: You("荷物の重みがずっしりと肩にくる．まだ動くのが非常にきつい．");
+		break;
+#endif
 	}
 	flags.botl = 1;
     }
@@ -1478,18 +1683,32 @@
 			rider_cant_reach(); /* not skilled enough to reach */
 		else
 #endif
+/*JP
 			You("cannot reach the %s.", surface(x, y));
+*/
+			You("%sに届かない．", surface(x, y));
 		return FALSE;
 	} else if (is_pool(x, y) || is_lava(x, y)) {
 		/* at present, can't loot in water even when Underwater */
+#if 0 /*JP*/
 		You("cannot loot things that are deep in the %s.",
 		    is_lava(x, y) ? "lava" : "water");
+#else
+		You("%sに深くに沈んだものを開けることできない．",
+		    is_lava(u.ux, u.uy) ? "溶岩" : "水");
+#endif
 		return FALSE;
 	} else if (nolimbs(youmonst.data)) {
+/*JP
 		pline("Without limbs, you cannot loot anything.");
+*/
+		pline("手足がないので，開けることはできない．");
 		return FALSE;
 	} else if (!freehand()) {
+/*JP
 		pline("Without a free %s, you cannot loot anything.",
+*/
+		pline("自由になる%sがないので，開けることはできない．",
 			body_part(HAND));
 		return FALSE;
 	}
@@ -1519,7 +1738,9 @@
     int timepassed = 0;
     coord cc;
     boolean underfoot = TRUE;
+#if 0 /*JP*/
     const char *dont_find_anything = "don't find anything";
+#endif
     struct monst *mtmp;
     char qbuf[BUFSZ];
     int prev_inquiry = 0;
@@ -1530,7 +1751,11 @@
 	return 0;
     }
     if (nohands(youmonst.data)) {
+#if 0 /*JP*/
 	You("have no hands!");	/* not `body_part(HAND)' */
+#else
+	pline("あなたには手がない！");
+#endif
 	return 0;
     }
     cc.x = u.ux; cc.y = u.uy;
@@ -1545,32 +1770,54 @@
 	    nobj = cobj->nexthere;
 
 	    if (Is_container(cobj)) {
+#if 0 /*JP*/
 		Sprintf(qbuf, "There is %s here, loot it?",
 			safe_qbuf("", sizeof("There is  here, loot it?"),
 			     doname(cobj), an(simple_typename(cobj->otyp)),
 			     "a container"));
+#else
+		Sprintf(qbuf, "ここには%sがある．開けますか？",
+			safe_qbuf("", sizeof("ここにはがある．開けますか？"),
+			     doname(cobj), an(simple_typename(cobj->otyp)),
+			     "入れ物"));
+#endif
 		c = ynq(qbuf);
 		if (c == 'q') return (timepassed);
 		if (c == 'n') continue;
 		any = TRUE;
 
 		if (cobj->olocked) {
+/*JP
 		    pline("Hmmm, it seems to be locked.");
+*/
+		    pline("むーん，鍵がかかっているようだ．");
 		    continue;
 		}
 		if (cobj->otyp == BAG_OF_TRICKS) {
 		    int tmp;
+/*JP
 		    You("carefully open the bag...");
+*/
+		    You("慎重に鞄を開けた．．．");
+/*JP
 		    pline("It develops a huge set of teeth and bites you!");
+*/
+		    pline("鞄から大きな歯が生えてきて，あなたを噛んだ！");
 		    tmp = rnd(10);
 		    if (Half_physical_damage) tmp = (tmp+1) / 2;
+/*JP
 		    losehp(tmp, "carnivorous bag", KILLED_BY_AN);
+*/
+		    losehp(tmp, "食肉鞄に噛まれて", KILLED_BY_AN);
 		    makeknown(BAG_OF_TRICKS);
 		    timepassed = 1;
 		    continue;
 		}
 
+/*JP
 		You("carefully open %s...", the(xname(cobj)));
+*/
+		You("慎重に%sを開けた．．．", the(xname(cobj)));
 		timepassed |= use_container(cobj, 0);
 		if (multi < 0) return 1;		/* chest trap */
 	    }
@@ -1603,7 +1850,10 @@
 			    goto gotit;	/* two level break */
 gotit:
 		if (coffers) {
+/*JP
 	    verbalize("Thank you for your contribution to reduce the debt.");
+*/
+	    verbalize("赤字国債返済のための寄付に感謝します．");
 		    (void) add_to_container(coffers, goldob);
 		    coffers->owt = weight(coffers);
 		} else {
@@ -1613,7 +1863,10 @@
 #ifndef GOLDOBJ
 			mon->mgold += goldob->quan;
 			delobj(goldob);
+/*JP
 			pline("The exchequer accepts your contribution.");
+*/
+			pline("財務省はあなたの寄付を受けとった．");
 		    } else {
 			dropx(goldob);
 		    }
@@ -1622,7 +1875,10 @@
 		dropx(goldob);
 #else
 			add_to_minv(mon, goldob);
+/*JP
 			pline("The exchequer accepts your contribution.");
+*/
+			pline("財務省はあなたの寄付を受けとった．");
 		    } else {
 			dropy(goldob);
 		    }
@@ -1630,18 +1886,29 @@
 	    } else {
 		dropy(goldob);
 #endif
+/*JP
 		pline("Ok, now there is loot here.");
+*/
+		pline("オーケー，ここに賄賂を置いておこう．");
 	    }
 	}
     } else if (IS_GRAVE(levl[cc.x][cc.y].typ)) {
+/*JP
 	You("need to dig up the grave to effectively loot it...");
+*/
+	You("墓荒らしをするには掘らなくては．．．");
     }
     /*
      * 3.3.1 introduced directional looting for some things.
      */
     if (c != 'y' && mon_beside(u.ux, u.uy)) {
+#if 0 /*JP*/
 	if (!get_adjacent_loc("Loot in what direction?", "Invalid loot location",
 			u.ux, u.uy, &cc)) return 0;
+#else
+	if (!get_adjacent_loc("どの方向を調べる？", "調べるものがない",
+			u.ux, u.uy, &cc)) return 0;
+#endif
 	if (cc.x == u.ux && cc.y == u.uy) {
 	    underfoot = TRUE;
 	    if (container_at(cc.x, cc.y, FALSE))
@@ -1649,8 +1916,13 @@
 	} else
 	    underfoot = FALSE;
 	if (u.dz < 0) {
+#if 0 /*JP*/
 	    You("%s to loot on the %s.", dont_find_anything,
 		ceiling(cc.x, cc.y));
+#else
+	    You("%sを調べたが何もみつからなかった．",
+		ceiling(cc.x, cc.y));
+#endif
 	    timepassed = 1;
 	    return timepassed;
 	}
@@ -1664,21 +1936,40 @@
 	if (!underfoot) {
 	    if (container_at(cc.x, cc.y, FALSE)) {
 		if (mtmp) {
+#if 0 /*JP*/
 		    You_cant("loot anything %sthere with %s in the way.",
 			    prev_inquiry ? "else " : "", mon_nam(mtmp));
+#else
+		    pline("%sがいるので%s箱を開けられない．",
+			    mon_nam(mtmp), prev_inquiry ? "ほかの" : "");
+#endif
 		    return timepassed;
 		} else {
+#if 0 /*JP*/
 		    You("have to be at a container to loot it.");
+#else
+		    You("は箱を開けるためには同じ位置にいなければならない．");
+#endif
 		}
 	    } else {
+#if 0 /*JP*/
 		You("%s %sthere to loot.", dont_find_anything,
 			(prev_inquiry || prev_loot) ? "else " : "");
+#else
+		pline("ここには%s開けられるものはない．",
+			(prev_inquiry || prev_loot) ? "ほかに" : "");
+#endif
 		return timepassed;
 	    }
 	}
     } else if (c != 'y' && c != 'n') {
+#if 0 /*JP*/
 	You("%s %s to loot.", dont_find_anything,
 		    underfoot ? "here" : "there");
+#else
+	pline("%sには開けられるものはない．",
+		    underfoot ? "ここ" : "そこ");
+#endif
     }
     return (timepassed);
 }
@@ -1703,15 +1994,25 @@
     if (mtmp && mtmp != u.usteed && (otmp = which_armor(mtmp, W_SADDLE))) {
 	long unwornmask;
 	if (passed_info) *passed_info = 1;
+/*JP
 	Sprintf(qbuf, "Do you want to remove the saddle from %s?",
+*/
+	Sprintf(qbuf, "%sから鞍をはずしますか？",
 		x_monnam(mtmp, ARTICLE_THE, (char *)0, SUPPRESS_SADDLE, FALSE));
 	if ((c = yn_function(qbuf, ynqchars, 'n')) == 'y') {
 		if (nolimbs(youmonst.data)) {
+#if 0 /*JP*/
 		    You_cant("do that without limbs."); /* not body_part(HAND) */
+#else
+		    You_cant("手がないとできない．");
+#endif
 		    return (0);
 		}
 		if (otmp->cursed) {
+/*JP
 		    You("can't. The saddle seems to be stuck to %s.",
+*/
+		    pline("鞍は%sにくっついているようだ．",
 			x_monnam(mtmp, ARTICLE_THE, (char *)0,
 				SUPPRESS_SADDLE, FALSE));
 			    
@@ -1724,7 +2025,10 @@
 		    otmp->owornmask = 0L;
 		    update_mon_intrinsics(mtmp, otmp, FALSE, FALSE);
 		}
+/*JP
 		otmp = hold_another_object(otmp, "You drop %s!", doname(otmp),
+*/
+		otmp = hold_another_object(otmp, "%sを落とした！", doname(otmp),
 					(const char *)0);
 		timepassed = rnd(3);
 		if (prev_loot) *prev_loot = TRUE;
@@ -1786,18 +2090,32 @@
 		impossible("<in> no current_container?");
 		return 0;
 	} else if (obj == uball || obj == uchain) {
+/*JP
 		You("must be kidding.");
+*/
+		pline("ご冗談を．");
 		return 0;
 	} else if (obj == current_container) {
+/*JP
 		pline("That would be an interesting topological exercise.");
+*/
+		pline("それは興味をそそられるトポロジーの問題だ．");
 		return 0;
 	} else if (obj->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL)) {
+#if 0 /*JP*/
 		Norep("You cannot %s %s you are wearing.",
 			Icebox ? "refrigerate" : "stash", something);
+#else
+		Norep("身につけているものを%sことはできない．", 
+			Icebox ? "冷凍する" : "しまう");
+#endif
 		return 0;
 	} else if ((obj->otyp == LOADSTONE) && obj->cursed) {
 		obj->bknown = 1;
+/*JP
 	      pline_The("stone%s won't leave your person.", plur(obj->quan));
+*/
+		pline("どういうわけかその石をしまうことはできない．");
 		return 0;
 	} else if (obj->otyp == AMULET_OF_YENDOR ||
 		   obj->otyp == CANDELABRUM_OF_INVOCATION ||
@@ -1807,10 +2125,16 @@
 	 * steal them.  It also becomes a pain to check to see if someone
 	 * has the Amulet.  Ditto for the Candelabrum, the Bell and the Book.
 	 */
+/*JP
 	    pline("%s cannot be confined in such trappings.", The(xname(obj)));
+*/
+	    pline("%sは詰めることはできない．", The(xname(obj)));
 	    return 0;
 	} else if (obj->otyp == LEASH && obj->leashmon != 0) {
+/*JP
 		pline("%s attached to your pet.", Tobjnam(obj, "are"));
+*/
+		pline("%sはペットに付けられている．", xname(obj));
 		return 0;
 	} else if (obj == uwep) {
 		if (welded(obj)) {
@@ -1836,7 +2160,10 @@
 		    char kbuf[BUFSZ];
 
 		    Strcpy(kbuf, an(corpse_xname(obj, TRUE)));
+/*JP
 		    pline("Touching %s is a fatal mistake.", kbuf);
+*/
+		    pline("%sの死体に触れるのは致命的な間違いだ．", kbuf);
 		    Strcpy(kbuf, an(killer_cxname(obj, TRUE)));
 		    instapetrify(kbuf);
 		    return -1;
@@ -1854,7 +2181,10 @@
 		 *  of evaluation of the parameters is undefined.
 		 */
 		Strcpy(buf, the(xname(obj)));
+/*JP
 		You("cannot fit %s into %s.", buf,
+*/
+		pline("%sを%sに詰め込むことはできない．", buf,
 		    the(xname(current_container)));
 		return 0;
 	}
@@ -1889,9 +2219,15 @@
 		}
 	} else if (Is_mbag(current_container) && mbag_explodes(obj, 0)) {
 		/* explicitly mention what item is triggering the explosion */
+#if 0 /*JP:T*/
 		pline(
 	      "As you put %s inside, you are blasted by a magical explosion!",
 		      doname(obj));
+#else
+		pline(
+	      "%sを中に入れたとたん，魔法の爆発を浴びた！",
+		      doname(obj));
+#endif
 		if (Has_contents(obj)) {
 		    struct obj *otmp;
 		    while((otmp = container_extract_indestructable(obj)))
@@ -1911,13 +2247,19 @@
 		else
 			panic("in_container:  bag not found.");
 
+/*JP
 		losehp(d(6,6),"magical explosion", KILLED_BY_AN);
+*/
+		losehp(d(6,6),"魔法の爆発で", KILLED_BY_AN);
 		current_container = 0;	/* baggone = TRUE; */
 	}
 
 	if (current_container) {
 	    Strcpy(buf, the(xname(current_container)));
+/*JP
 	    You("put %s into %s.", doname(obj), buf);
+*/
+	You("%sを%sの中にしまった．", doname(obj), buf);
 
 	    /* gold in container always needs to be added to credit */
 	    if (floor_container && obj->oclass == COIN_CLASS)
@@ -1969,7 +2311,10 @@
 		    char kbuf[BUFSZ];
 
 		    Strcpy(kbuf, an(corpse_xname(obj, TRUE)));
+/*JP
 		    pline("Touching %s is a fatal mistake.", kbuf);
+*/
+		    pline("%sの死体に触れるのは致命的な間違いだ．", kbuf);
 		    Strcpy(kbuf, an(killer_cxname(obj, TRUE)));
 		    instapetrify(kbuf);
 		    return -1;
@@ -2002,14 +2347,22 @@
 		addtobill(obj, FALSE, FALSE, FALSE);
 	}
 	if (is_pick(obj) && !obj->unpaid && *u.ushops && shop_keeper(*u.ushops))
+/*JP
 		verbalize("You sneaky cad! Get out of here with that pick!");
+*/
+		verbalize("卑劣なやつめ！すぐにつるはしを持って消えな！");
 
 	otmp = addinv(obj);
 	loadlev = near_capacity();
 	prinv(loadlev ?
 	      (loadlev < MOD_ENCUMBER ?
+#if 0 /*JP*/
 	       "You have a little trouble removing" :
 	       "You have much trouble removing") : (char *)0,
+#else
+	       "を運ぶのは少々困難だ．" :
+	       "を運ぶのはかなり困難だ．") : (char *)0,
+#endif
 	      otmp, count);
 
 	if (is_gold) {
@@ -2031,9 +2384,17 @@
     long loss = 0L;
 
     if (item->dknown)
+/*JP
 	pline("%s %s vanished!", Doname2(item), otense(item, "have"));
+*/
+	pline("%sは消え去った！", Doname2(item));
     else
+#if 0 /*JP*/
 	You("%s %s disappear!", Blind ? "notice" : "see", doname(item));
+#else
+	You("%sが見えなくなるの%s．",
+		doname(item), Blind ? "に気づいた" : "を見た");
+#endif
 
     if (*u.ushops && (shkp = shop_keeper(*u.ushops)) != 0) {
 	if (held ? (boolean) item->unpaid : costly_spot(u.ux, u.uy))
@@ -2048,7 +2409,10 @@
 observe_quantum_cat(box)
 struct obj *box;
 {
+/*JP
     static NEARDATA const char sc[] = "Schroedinger's Cat";
+*/
+	    static NEARDATA const char sc[] = "シュレディンガーの猫";
     struct obj *deadcat;
     struct monst *livecat;
     xchar ox, oy;
@@ -2067,9 +2431,15 @@
 	livecat->mpeaceful = 1;
 	set_malign(livecat);
 	if (!canspotmon(livecat))
+/*JP
 	    You("think %s brushed your %s.", something, body_part(FOOT));
+*/
+	    You("%sがあなたの%sをくすぐった．", something, body_part(FOOT));
 	else
+/*JP
 	    pline("%s inside the box is still alive!", Monnam(livecat));
+*/
+	    pline("箱のなかの%sはまだ生きている！", Monnam(livecat));
 	(void) christen_monst(livecat, sc);
     } else {
 	deadcat = mk_named_object(CORPSE, &mons[PM_HOUSECAT],
@@ -2078,8 +2448,13 @@
 	    obj_extract_self(deadcat);
 	    (void) add_to_container(box, deadcat);
 	}
+#if 0 /*JP*/
 	pline_The("%s inside the box is dead!",
 	    Hallucination ? rndmonnam() : "housecat");
+#else
+	pline("箱の中の%sは死んでいる！",
+	    jtrns_mon(Hallucination ? rndmonnam() : "housecat"));
+#endif
     }
     box->owt = weight(box);
     return;
@@ -2107,18 +2482,34 @@
 
 	emptymsg[0] = '\0';
 	if (nohands(youmonst.data)) {
+#if 0 /*JP*/
 		You("have no hands!");	/* not `body_part(HAND)' */
+#else
+		pline("あなたには手がない！");	/* not `body_part(HAND)' */
+#endif
 		return 0;
 	} else if (!freehand()) {
+/*JP
 		You("have no free %s.", body_part(HAND));
+*/
+		You("%sの自由が効かない．", body_part(HAND));
 		return 0;
 	}
 	if (obj->olocked) {
+/*JP
 	    pline("%s to be locked.", Tobjnam(obj, "seem"));
+*/
+	    pline("%sは鍵がかかっているようだ．", xname(obj));
+/*JP
 	    if (held) You("must put it down to unlock.");
+*/
+	    if (held) pline("下に置かないことには鍵をはずせない．");
 	    return 0;
 	} else if (obj->otrapped) {
+/*JP
 	    if (held) You("open %s...", the(xname(obj)));
+*/
+	    if (held) You("%sを開けた．．．", the(xname(obj)));
 	    (void) chest_trap(obj, HAND, FALSE);
 	    /* even if the trap fails, you've used up this turn */
 	    if (multi >= 0) {	/* in case we didn't become paralyzed */
@@ -2145,10 +2536,18 @@
 	    otmp = curr->nobj;
 		if (!rn2(13) && !evades_destruction(curr)) {
 		if (curr->dknown)
+/*JP
 		    pline("%s to have vanished!", The(aobjnam(curr,"seem")));
+*/
+		    pline("%sは消滅してしまったようだ！", xname(curr));
 		else
+#if 0 /*JP*/
 		    You("%s %s disappear.", Blind ? "notice" : "see",
 							doname(curr));
+#else
+		    You("%sが消滅したのを%s．", doname(curr),
+						Blind ? "感じた" : "見た");
+#endif
 		if (*u.ushops && (shkp = shop_keeper(*u.ushops)) != 0) {
 		    if(held) {
 			if(curr->unpaid)
@@ -2174,12 +2573,20 @@
 	    cnt++;
 
 	if (loss)	/* magic bag lost some shop goods */
+/*JP
 	    You("owe %ld %s for lost merchandise.", loss, currency(loss));
+*/
+	    You("失った商品のために%ld%sの負債を負った．", loss, currency(loss));
 	obj->owt = weight(obj);	/* in case any items were lost */
   
 	if (!cnt)
+#if 0 /*JP:T*/
 	    Sprintf(emptymsg, "%s is %sempty.", Yname2(obj),
 		    quantum_cat ? "now " : "");
+#else
+	    Sprintf(emptymsg, "%sは%s空っぽだ．", Yname2(obj),
+		    quantum_cat ? "今は" : "");
+#endif
 	if (current_container->otyp == MEDICAL_KIT) {
 	    if (!cnt)
 		pline("%s", emptymsg);
@@ -2188,9 +2595,14 @@
 	    return 0;
 	}
 	if (cnt || flags.menu_style == MENU_FULL) {
+#if 0 /*JP*/
 	    Strcpy(qbuf, "Do you want to take something out of ");
 	    Sprintf(eos(qbuf), "%s?",
 		    safe_qbuf(qbuf, 1, yname(obj), ysimple_name(obj), "it"));
+#else
+	    Sprintf(qbuf, "%sから何か取り出しますか？",
+		    safe_qbuf(qbuf, sizeof("から何か取り出しますか？"), yname(obj), ysimple_name(obj), "そこ"));
+#endif
 	    if (flags.menu_style != MENU_TRADITIONAL) {
 		if (flags.menu_style == MENU_FULL) {
 		    int t;
@@ -2203,12 +2615,18 @@
 #endif
 		    if (!outokay && !inokay) {
 			pline("%s", emptymsg);
+/*JP
 			You("don't have anything to put in.");
+*/
+	    You("入れるものが何もない．");
 			return used;
 		    }
 		    menuprompt[0] = '\0';
 		    if (!cnt) Sprintf(menuprompt, "%s ", emptymsg);
+/*JP
 		    Strcat(menuprompt, "Do what?");
+*/
+		    Strcat(menuprompt, "どうする？");
 		    t = in_or_out_menu(menuprompt, current_container, outokay, inokay);
 		    if (t <= 0) return 0;
 		    loot_out = (t & 0x01) != 0;
@@ -2233,7 +2651,10 @@
 		    goto ask_again2;
 		case 'y':
 		    if (query_classes(select, &one_by_one, &allflag,
+/*JP
 				      "take out", current_container->cobj,
+*/
+				      "取り出す", current_container->cobj,
 				      FALSE,
 #ifndef GOLDOBJ
 				      FALSE,
@@ -2271,11 +2692,17 @@
 	if (!invent) {
 #endif
 	    /* nothing to put in, but some feedback is necessary */
+/*JP
 	    You("don't have anything to put in.");
+*/
+	    You("中に入れるものを何も持っていない．");
 	    return used;
 	}
 	if (flags.menu_style != MENU_FULL) {
+/*JP
 	    Sprintf(qbuf, "Do you wish to put %s in?", something);
+*/
+	    Strcpy(qbuf, "中に何か入れますか？");
 	    Strcpy(pbuf, ynqchars);
 	    if (flags.menu_style == MENU_TRADITIONAL && invent && inv_cnt() > 0)
 		Strcat(pbuf, "m");
@@ -2320,7 +2747,10 @@
 	    } else {
 		/* traditional code */
 		menu_on_request = 0;
+/*JP
 		if (query_classes(select, &one_by_one, &allflag, "put in",
+*/
+		if (query_classes(select, &one_by_one, &allflag, "入れる",
 				   invent, FALSE,
 #ifndef GOLDOBJ
 				   (u.ugold != 0L),
@@ -2359,7 +2789,10 @@
     int n, i, n_looted = 0;
     boolean all_categories = TRUE, loot_everything = FALSE;
     char buf[BUFSZ];
+/*JP
     const char *takeout = "Take out", *putin = "Put in";
+*/
+    const char *takeout = "取り出しますか", *putin = "入れますか";
     struct obj *otmp, *otmp2;
     menu_item *pick_list;
     int mflags, res;
@@ -2369,7 +2802,10 @@
 	all_categories = (retry == -2);
     } else if (flags.menu_style == MENU_FULL) {
 	all_categories = FALSE;
+/*JP
 	Sprintf(buf,"%s what type of objects?", put_in ? putin : takeout);
+*/
+	Sprintf(buf,"どのタイプの物体を%s？", put_in ? putin : takeout);
 	mflags = put_in ? ALL_TYPES | BUC_ALLBKNOWN | BUC_UNKNOWN :
 		          ALL_TYPES | CHOOSE_ALL | BUC_ALLBKNOWN | BUC_UNKNOWN;
 	n = query_category(buf, put_in ? invent : container->cobj,
@@ -2395,7 +2831,10 @@
     } else {
 	mflags = INVORDER_SORT;
 	if (put_in && flags.invlet_constant) mflags |= USE_INVLET;
+/*JP
 	Sprintf(buf,"%s what?", put_in ? putin : takeout);
+*/
+	Sprintf(buf,"何を%s？", put_in ? putin : takeout);
 	n = query_objlist(buf, put_in ? invent : container->cobj,
 			  mflags, &pick_list, PICK_ANY,
 			  all_categories ? allow_all : allow_category);
@@ -2441,21 +2880,30 @@
     start_menu(win);
     if (outokay) {
 	any.a_int = 1;
+/*JP
 	Sprintf(buf,"Take %s out of %s", something, the(xname(obj)));
+*/
+	Sprintf(buf,"%sから出す", the(xname(obj)));
 	add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE,
 			buf, MENU_UNSELECTED);
     }
     menuselector++;
     if (inokay) {
 	any.a_int = 2;
+/*JP
 	Sprintf(buf,"Put %s into %s", something, the(xname(obj)));
+*/
+	Sprintf(buf,"%sへ入れる", the(xname(obj)));
 	add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE, buf, MENU_UNSELECTED);
     }
     menuselector++;
     if (outokay && inokay) {
 	any.a_int = 3;
 	add_menu(win, NO_GLYPH, &any, *menuselector, 0, ATR_NONE,
+/*JP
 			"Both of the above", MENU_UNSELECTED);
+*/
+			"両方", MENU_UNSELECTED);
     }
     end_menu(win, prompt);
     n = select_menu(win, PICK_ONE, &pick_list);
diff -aurN slashem-0.0.7E6F2/src/pline.c jslashem-0.0.7E6F2-J0.0.8/src/pline.c
--- slashem-0.0.7E6F2/src/pline.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/pline.c	2004-08-05 10:23:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #define NEED_VARARGS /* Uses ... */	/* comment line for pre-compiled headers */
 #include "hack.h"
 #include "epri.h"
@@ -116,7 +124,10 @@
 	char *tmp;
 	VA_START(line);
 	VA_INIT(line, const char *);
+/*JP
 	vpline(YouMessage(tmp, "You ", line), VA_ARGS);
+*/
+	vpline(YouMessage(tmp, "あなたは", line), VA_ARGS);
 	VA_END();
 }
 
@@ -126,7 +137,10 @@
 	char *tmp;
 	VA_START(line);
 	VA_INIT(line, const char *);
+/*JP
 	vpline(YouMessage(tmp, "Your ", line), VA_ARGS);
+*/
+	vpline(YouMessage(tmp, "あなたの", line), VA_ARGS);
 	VA_END();
 }
 
@@ -136,7 +150,10 @@
 	char *tmp;
 	VA_START(line);
 	VA_INIT(line, const char *);
+/*JP
 	vpline(YouMessage(tmp, "You feel ", line), VA_ARGS);
+*/
+	vpline(YouMessage(tmp, "あなたは", line), VA_ARGS);
 	VA_END();
 }
 
@@ -147,7 +164,10 @@
 	char *tmp;
 	VA_START(line);
 	VA_INIT(line, const char *);
+/*JP
 	vpline(YouMessage(tmp, "You can't ", line), VA_ARGS);
+*/
+	vpline(YouMessage(tmp, "あなたは", line), VA_ARGS);
 	VA_END();
 }
 
@@ -157,7 +177,10 @@
 	char *tmp;
 	VA_START(line);
 	VA_INIT(line, const char *);
+/*JP
 	vpline(YouMessage(tmp, "The ", line), VA_ARGS);
+*/
+	vpline(YouMessage(tmp, "", line), VA_ARGS);
 	VA_END();
 }
 
@@ -167,7 +190,10 @@
 	char *tmp;
 	VA_START(line);
 	VA_INIT(line, const char *);
+/*JP
 	vpline(YouMessage(tmp, "There ", line), VA_ARGS);
+*/
+	vpline(YouMessage(tmp, "", line), VA_ARGS);
 	VA_END();
 }
 
@@ -175,15 +201,46 @@
 void
 You_hear VA_DECL(const char *,line)
 	char *tmp;
+#if 1 /*JP*/
+	char *adj;
+	char *p;
+#endif
 	VA_START(line);
 	VA_INIT(line, const char *);
 	if (Underwater)
+/*JP
 		YouPrefix(tmp, "You barely hear ", line);
+*/
+		adj = "かすかに";
 	else if (u.usleep)
+/*JP
 		YouPrefix(tmp, "You dream that you hear ", line);
+*/
+		adj = "夢の中で";
 	else
+/*JP
 		YouPrefix(tmp, "You hear ", line);
+*/
+		adj = "";
+#if 0 /*JP*/
 	vpline(strcat(tmp, line), VA_ARGS);
+#else
+	tmp = You_buf(strlen(adj) + strlen(line) + sizeof("あなたは   "));
+
+	p = (char *)strstr(line, "聞こ") ;
+	if( p == NULL )
+		Strcpy(tmp, "あなたは");
+	else
+		Strcpy(tmp, "");
+	if( p != NULL || (p = (char *)strstr(line, "聞い")) != NULL ){
+		strncat(tmp, line, (p - line));
+		strcat(tmp, adj);
+		strcat(tmp, p);
+	} else{
+		Strcat(tmp, line);
+	}
+	vpline(tmp, VA_ARGS);
+#endif
 	VA_END();
 }
 
@@ -194,10 +251,17 @@
 	if (!flags.soundok) return;
 	VA_START(line);
 	VA_INIT(line, const char *);
+#if 0 /*JP*/
 	tmp = You_buf((int)strlen(line) + sizeof "\"\"");
 	Strcpy(tmp, "\"");
 	Strcat(tmp, line);
 	Strcat(tmp, "\"");
+#else
+	tmp = You_buf((int)strlen(line) + sizeof "「」");
+	Strcpy(tmp, "「");
+	Strcat(tmp, line);
+	Strcat(tmp, "」");
+#endif
 	vpline(tmp, VA_ARGS);
 	VA_END();
 }
@@ -257,7 +321,11 @@
 	    paniclog("impossible", pbuf);
 	}
 	vpline(s,VA_ARGS);
+#if 0 /*JP*/
 	pline("Program in disorder - perhaps you'd better #quit.");
+#else
+	pline("プログラムに障害発生 - #quitしたほうがよさそうだ．");
+#endif
 	program_state.in_impossible = 0;
 	VA_END();
 }
@@ -267,12 +335,22 @@
     aligntyp alignment;
 {
     switch ((int)alignment) {
+#if 0 /*JP*/
 	case A_CHAOTIC: return "chaotic";
 	case A_NEUTRAL: return "neutral";
 	case A_LAWFUL:	return "lawful";
 	case A_NONE:	return "unaligned";
+#else
+	case A_CHAOTIC: return "混沌";
+	case A_NEUTRAL: return "中立";
+	case A_LAWFUL:	return "秩序";
+	case A_NONE:	return "無心";
+#endif
     }
+/*JP
     return "unknown";
+*/
+    return "不明";
 }
 
 void
@@ -292,6 +370,7 @@
 		A_NEUTRAL;
 
 	info[0] = 0;
+#if 0 /*JP*/
 	if (mtmp->mtame) {	  Strcat(info, ", tame");
 #ifdef WIZARD
 	    if (wizard) {
@@ -303,14 +382,51 @@
 	    }
 #endif
 	}
+#else
+	if (mtmp->mtame) {	  Strcat(info, ", 飼いならされている");
+#ifdef WIZARD
+	    if (wizard) {
+		Sprintf(eos(info), " (%d", mtmp->mtame);
+		if (!mtmp->isminion)
+		    Sprintf(eos(info), "; hungry %ld; apport %d",
+			EDOG(mtmp)->hungrytime, EDOG(mtmp)->apport);
+		Strcat(info, ")");
+	    }
+#endif
+	}
+#endif /*JP*/
+/*JP
 	else if (mtmp->mpeaceful) Strcat(info, ", peaceful");
+*/
+	else if (mtmp->mpeaceful) Strcat(info, ", 友好的");
+/*JP
 	else if (mtmp->mtraitor)  Strcat(info, ", traitor");
+*/
+	else if (mtmp->mtraitor) Strcat(info, ", 裏切り");
+/*JP
 	if (mtmp->meating)	  Strcat(info, ", eating");
+*/
+	if (mtmp->meating)	  Strcat(info, ", 食事中");
+/*JP
 	if (mtmp->mcan)		  Strcat(info, ", cancelled");
+*/
+	if (mtmp->mcan)		  Strcat(info, ", 無力");
+/*JP
 	if (mtmp->mconf)	  Strcat(info, ", confused");
+*/
+	if (mtmp->mconf)	  Strcat(info, ", 混乱状態");
+#if 0 /*JP:T*/
 	if (mtmp->mblinded || !mtmp->mcansee)
 				  Strcat(info, ", blind");
+#else
+	if (mtmp->mblinded || !mtmp->mcansee)
+				  Strcat(info, ", 盲目");
+#endif
+/*JP
 	if (mtmp->mstun)	  Strcat(info, ", stunned");
+*/
+	if (mtmp->mstun)	  Strcat(info, ", くらくら状態");
+#if 0 /*JP*/
 	if (mtmp->msleeping)	  Strcat(info, ", asleep");
 #if 0	/* unfortunately mfrozen covers temporary sleep and being busy
 	   (donning armor, for instance) as well as paralysis */
@@ -323,25 +439,63 @@
 	else if (mtmp->mstrategy & STRAT_WAITMASK)
 				  Strcat(info, ", meditating");
 	else if (mtmp->mflee) {	  Strcat(info, ", scared");
+#else /*JP*/
+	if (mtmp->msleeping)	  Strcat(info, ", 睡眠状態");
+	else if (mtmp->mfrozen || !mtmp->mcanmove)
+				  Strcat(info, ", 動けない");
+				  /* [arbitrary reason why it isn't moving] */
+	else if (mtmp->mstrategy & STRAT_WAITMASK)
+				  Strcat(info, ", 冥想中");
+	else if (mtmp->mflee) {	  Strcat(info, ", 怯えている");
+#endif
 #ifdef WIZARD
 	    if (wizard)		  Sprintf(eos(info), " (%d)", mtmp->mfleetim);
 #endif
 	}
+/*JP
 	if (mtmp->mtrapped)	  Strcat(info, ", trapped");
+*/
+	if (mtmp->mtrapped)	  Strcat(info, ", 罠にかかっている");
+#if 0 /*JP:T*/
 	if (mtmp->mspeed)	  Strcat(info,
 					mtmp->mspeed == MFAST ? ", fast" :
 					mtmp->mspeed == MSLOW ? ", slow" :
 					", ???? speed");
+#else
+	if (mtmp->mspeed)	  Strcat(info,
+					mtmp->mspeed == MFAST ? ", 素早い" :
+					mtmp->mspeed == MSLOW ? ", 遅い" :
+					", 速度不明");
+#endif
+/*JP
 	if (mtmp->mundetected)	  Strcat(info, ", concealed");
+*/
+	if (mtmp->mundetected)	  Strcat(info, ", 隠れている");
+/*JP
 	if (mtmp->minvis)	  Strcat(info, ", invisible");
+*/
+	if (mtmp->minvis)	  Strcat(info, ", 不可視");
+#if 0 /*JP:T*/
 	if (mtmp == u.ustuck)	  Strcat(info,
 			(sticks(youmonst.data)) ? ", held by you" :
 				u.uswallow ? (is_animal(u.ustuck->data) ?
 				", swallowed you" :
 				", engulfed you") :
 				", holding you");
+#else
+	if (mtmp == u.ustuck)	  Strcat(info,  
+			(sticks(youmonst.data)) ? ", あなたが掴まえている" :
+				u.uswallow ? (is_animal(u.ustuck->data) ?
+				", 飲み込んでいる" :
+				", 巻き込んでいる") :
+				", 掴まえている");
+#endif
 #ifdef STEED
+#if 0 /*JP*/
 	if (mtmp == u.usteed)	  Strcat(info, ", carrying you");
+#else
+	if (mtmp == u.usteed)	  Strcat(info, ", あなたを乗せている");
+#endif
 #endif
 
 	/* avoid "Status of the invisible newt ..., invisible" */
@@ -349,7 +503,10 @@
 	Strcpy(monnambuf, x_monnam(mtmp, ARTICLE_THE, (char *)0,
 	    (SUPPRESS_IT|SUPPRESS_INVISIBLE), FALSE));
 
+/*JP
 	pline("Status of %s (%s):  Level %d  HP %d(%d)  Pw %d(%d)  AC %d%s.",
+*/
+	pline("%sの状態 (%s)： Level %d  HP %d(%d)  Pw %d(%d)  AC %d%s",
 		monnambuf,
 		align_str(alignment),
 		mtmp->m_lev,
@@ -368,30 +525,67 @@
 
 	info[0] = '\0';
 	if (Sick) {
+#if 0 /*JP*/
 		Strcat(info, ", dying from");
+#else
+		Strcat(info, ", ");
+#endif
 		if (u.usick_type & SICK_VOMITABLE)
+/*JP
 			Strcat(info, " food poisoning");
+*/
+			Strcat(info, "食中毒");
 		if (u.usick_type & SICK_NONVOMITABLE) {
 			if (u.usick_type & SICK_VOMITABLE)
+/*JP
 				Strcat(info, " and");
+*/
+				Strcat(info, "と");
+/*JP
 			Strcat(info, " illness");
+*/
+			Strcat(info, "病気");
 		}
+#if 1 /*JP*/
+		Strcat(info, "で死につつある");
+#endif
 	}
+#if 0 /*JP*/
 	if (Stoned)		Strcat(info, ", solidifying");
 	if (Slimed)		Strcat(info, ", becoming slimy");
 	if (Strangled)		Strcat(info, ", being strangled");
 	if (Vomiting)		Strcat(info, ", nauseated"); /* !"nauseous" */
 	if (Confusion)		Strcat(info, ", confused");
+#else
+	if (Stoned)		Strcat(info, ", 石化しつつある");
+	if (Slimed)		Strcat(info, ", スライムになりつつある");
+	if (Strangled)		Strcat(info, ", 首を締められている");
+	if (Vomiting)		Strcat(info, ", 吐き気がする");
+	if (Confusion)		Strcat(info, ", 混乱状態");
+#endif
 	if (Blind) {
+/*JP
 	    Strcat(info, ", blind");
+*/
+	    Strcat(info, ", 盲目状態");
 	    if (u.ucreamed) {
+#if 0 /*JP*/
 		if ((long)u.ucreamed < Blinded || Blindfolded
 						|| !haseyes(youmonst.data))
 		    Strcat(info, ", cover");
 		Strcat(info, "ed by sticky goop");
+#else
+		Strcat(info, "ねばねばべとつくもので");
+		if ((long)u.ucreamed < Blinded || Blindfolded
+						|| !haseyes(youmonst.data))
+		    Strcat(info, "覆われている，");
+#endif
 	    }	/* note: "goop" == "glop"; variation is intentional */
 	}
+/*JP
 	if (Stunned)		Strcat(info, ", stunned");
+*/
+	if (Stunned)		Strcat(info, ", くらくら状態");
 #ifdef STEED
 	if (!u.usteed)
 #endif
@@ -399,24 +593,51 @@
 	    const char *what = body_part(LEG);
 	    if ((Wounded_legs & BOTH_SIDES) == BOTH_SIDES)
 		what = makeplural(what);
+/*JP
 				Sprintf(eos(info), ", injured %s", what);
+*/
+				Sprintf(eos(info), ", %sにけがをしている", what);
 	}
+/*JP
 	if (Glib)		Sprintf(eos(info), ", slippery %s",
+*/
+	if (Glib)		Sprintf(eos(info), ", %sがぬるぬる",
 					makeplural(body_part(HAND)));
+#if 0 /*JP*/
 	if (u.utrap)		Strcat(info, ", trapped");
 	if (Fast)		Strcat(info, Very_fast ?
 						", very fast" : ", fast");
 	if (u.uundetected)	Strcat(info, ", concealed");
 	if (Invis)		Strcat(info, ", invisible");
+#else
+	if (u.utrap)		Strcat(info, ", 罠にかかっている");
+	if (Fast)		Strcat(info, Very_fast ?
+						", とても素早い" : ", 素早い");
+	if (u.uundetected)	Strcat(info, ", 隠れている");
+	if (Invis)		Strcat(info, ", 不可視");
+#endif
 	if (u.ustuck) {
+#if 0 /*JP*/
 	    if (sticks(youmonst.data))
 		Strcat(info, ", holding ");
 	    else
 		Strcat(info, ", held by ");
 	    Strcat(info, mon_nam(u.ustuck));
+#else
+	    Strcat(info, ", ");
+	    Strcat(info, mon_nam(u.ustuck));
+	    if (sticks(youmonst.data))
+		Strcat(info, "を掴まえている");
+	    else
+		Strcat(info, "に掴まえられている");
+#endif
 	}
 
+/*JP
 	pline("Status of %s (%s%s):  Level %d  HP %d(%d)  Pw %d(%d)  AC %d%s.",
+*/
+	pline("%sの状態 (%s %s)： Level %d  HP %d(%d)  Pw %d(%d)  AC %d%s",
+#if 0 /*JP*/
 		plname,
 		    (u.ualign.record >= 20) ? "piously " :
 		    (u.ualign.record > 13) ? "devoutly " :
@@ -426,6 +647,17 @@
 		    (u.ualign.record >= 1) ? "haltingly " :
 		    (u.ualign.record == 0) ? "nominally " :
 					    "insufficiently ",
+#else
+	      plname,
+		    (u.ualign.record >= 20) ? "敬虔" :
+		    (u.ualign.record > 13) ? "信心深い" :
+		    (u.ualign.record > 8) ? "熱烈" :
+		    (u.ualign.record > 3) ? "声のかん高い" :
+		    (u.ualign.record == 3) ? "" :
+		    (u.ualign.record >= 1) ? "有名無実" :
+		    (u.ualign.record == 0) ? "迷惑" :
+					    "不適当",
+#endif
 		align_str(u.ualign.type),
 		Upolyd ? mons[u.umonnum].mlevel : u.ulevel,
 		Upolyd ? u.mh : u.uhp,
@@ -439,10 +671,17 @@
 void
 self_invis_message()
 {
+#if 0 /*JP*/
 	pline("%s %s.",
 	    Hallucination ? "Far out, man!  You" : "Gee!  All of a sudden, you",
 	    See_invisible ? "can see right through yourself" :
 		"can't see yourself");
+#else
+	pline("%sあなたは%s．",
+	    Hallucination ? "ワーオ！" : "げ！突然",
+	    See_invisible ? "自分自身がちゃんと見えなくなった" :
+		"自分自身が見えなくなった");
+#endif
 }
 
 #endif /* OVLB */
diff -aurN slashem-0.0.7E6F2/src/polyself.c jslashem-0.0.7E6F2-J0.0.8/src/polyself.c
--- slashem-0.0.7E6F2/src/polyself.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/polyself.c	2004-08-05 10:26:22.000000000 +0900
@@ -3,6 +3,14 @@
 /* NetHack may be freely redistributed.  See license for details. */
 
 /*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+/*
  * Polymorph self routine.
  *
  * Note:  the light source handling code assumes that both youmonst.m_id
@@ -108,9 +116,15 @@
 			(mvitals[urace.femalenum].mvflags & G_GENOD))) {
 	    /* intervening activity might have clobbered genocide info */
 	    killer = delayed_killer;
+/*JP
 	    if (!killer || !strstri(killer, "genocid")) {
+*/
+	    if (!killer || !strstr(killer, "虐殺")) {
 		killer_format = KILLED_BY;
+/*JP
 		killer = "self-genocide";
+*/
+		killer = "自虐的虐殺で";
 	    }
 	    done(GENOCIDED);
 	}
@@ -247,20 +261,36 @@
 		    if (u.uhpmax <= 0) u.uhpmax = 1;
 		} else {
 dead: /* we come directly here if their experience level went to 0 or less */
+/*JP
 		    Your("new form doesn't seem healthy enough to survive.");
+*/
+		    Your("新しい姿は生きていくだけの力がないようだ．");
 		    killer_format = KILLED_BY_AN;
+/*JP
 		    killer="unsuccessful polymorph";
+*/
+		    killer="変化の失敗で";
 		    done(DIED);
 		    newuhs(FALSE);
 		    return; /* lifesaved */
 		}
 	}
 	newuhs(FALSE);
+#if 0 /*JP*/
 	polyman("feel like a new %s!",
 		(flags.female && urace.individual.f) ? urace.individual.f :
 		(urace.individual.m) ? urace.individual.m : urace.noun);
+#else
+	polyman("%sとして生まれかわったような気がした！",
+		jtrns_mon_gen(
+		    (flags.female && urace.individual.f) ? urace.individual.f :
+		    (urace.individual.m) ? urace.individual.m : urace.noun, flags.female));
+#endif
 	if (Slimed) {
+/*JP
 		Your("body transforms, but there is still slime on you.");
+*/
+		Your("体は変化したが，スライムがついたままだ．");
 		Slimed = 10L;
 	}
 	flags.botl = 1;
@@ -291,7 +321,10 @@
 			!isvamp && !Race_if(PM_DOPPELGANGER)) {
 		if (rn2(12) > ACURR(A_CON)) {
 		You(shudder_for_moment);
+/*JP
 		losehp(rnd(30), "system shock", KILLED_BY_AN);
+*/
+		losehp(rnd(30), "システムショックで", KILLED_BY_AN);
 		exercise(A_CON, FALSE);
 		return;
 	    }
@@ -300,16 +333,33 @@
 
 	if (Polymorph_control || forcecontrol) {
 		do {
+/*JP
 			getlin("Become what kind of monster? [type the name]",
+*/
+			getlin("どの種の怪物になる？[怪物名を入れてね]",
 				buf);
+#if 1 /*JP*/
+			(void)mungspaces(buf);
+			{
+			    const char *p;
+			    p = etrns_mon(buf);
+			    if(p) strcpy(buf, p);
+			}
+#endif
 			mntmp = name_to_mon(buf);
 			if (mntmp < LOW_PM)
+/*JP
 				pline("I've never heard of such monsters.");
+*/
+				pline("そんな怪物は聞いたことがない．");
 			/* Note:  humans are illegal as monsters, but an
 			 * illegal monster forces newman(), which is what we
 			 * want if they specified a human.... */
 			else if (!polyok(&mons[mntmp]) && !your_race(&mons[mntmp]))
+/*JP
 				You("cannot polymorph into that.");
+*/
+				pline("それになることはできない．");
 			else break;
 		} while(++tries < 5);
 		if (tries==5) pline(thats_enough_tries);
@@ -321,11 +371,25 @@
 		/* Not an experienced Doppelganger yet */
 		do {
 			/* Slightly different wording */
+/*JP
 			getlin("Attempt to become what kind of monster? [type the name]",
+*/
+			getlin("どの種の怪物になりたい？[怪物名を入れてね]",
 				buf);
+#if 1 /*JP*/
+			(void)mungspaces(buf);
+			{
+			    const char *p;
+			    p = etrns_mon(buf);
+			    if(p) strcpy(buf, p);
+			}
+#endif
 			mntmp = name_to_mon(buf);
 			if (mntmp < LOW_PM)
+/*JP
 				pline("I've never heard of such monsters.");
+*/
+				pline("そんな怪物は聞いたことがない．");
 			/* Note:  humans are illegal as monsters, but an
 			 * illegal monster forces newman(), which is what we
 			 * want if they specified a human.... */
@@ -333,7 +397,10 @@
 				You("cannot polymorph into that.");
 #ifdef EATEN_MEMORY
 			else if (!mvitals[mntmp].eaten) {
+/*JP
 				You("attempt an unfamiliar polymorph.");
+*/
+				You("未知の怪物に変化しようとした．");
 				if ((rn2(5) + u.ulevel) < mons[mntmp].mlevel)
 				    mntmp = LOW_PM - 1; /* Didn't work for sure */
 				/* Either way, give it a shot */
@@ -404,7 +471,10 @@
 		newman();
 	else if(!polymon(mntmp)) return;
 
+/*JP
 	if (!uarmg) selftouch("No longer petrify-resistant, you");
+*/
+	if (!uarmg) selftouch("石化への抵抗力がなくなって，あなたは");
 
  made_change:
 	new_light = Upolyd ? emits_light(youmonst.data) : 0;
@@ -432,7 +502,12 @@
 	int mlvl;
 
 	if (mvitals[mntmp].mvflags & G_GENOD) {	/* allow G_EXTINCT */
+#if 0 /*JP:T*/
 		You_feel("rather %s-ish.",mons[mntmp].mname);
+#else
+		You("%sっぽくなったような気がした",
+		    jtrns_mon(mons[mntmp].mname));
+#endif
 		exercise(A_WIS, TRUE);
 		return(0);
 	}
@@ -443,15 +518,24 @@
   
 	if (is_undead(&mons[mntmp]) && Role_if(PM_UNDEAD_SLAYER)) {
 		if (Polymorph_control) { 
+/*JP
 			You("hear a voice boom out: \"How dare you take such a form!\"");
+*/
+			You("声が響きわたった: 「何故に滅ぼすべき者の姿をとろうとするのか！」");
 			u.ualign.record -= 5;
 #ifdef NOARTIFACTWISH
 			u.usacrifice = 0;
 #endif
 			exercise(A_WIS, FALSE);
 		 } else {
+#if 0 /*JP*/
 			You("start to change into %s, but a voice booms out:", an(mons[mntmp].mname));
 			pline("\"No, I will not allow such a change!\"");
+#else
+			You("%sに変化しはじめた．しかし声が響きわたった:",
+			    jtrns_mon_gen(mons[mntmp].mname, flags.female));
+			pline("「そなたをそのような姿にさせはせぬ！」");
+#endif
 		 }
 		 return(0);
 	}
@@ -489,20 +573,41 @@
 	}
 	if (dochange) {
 		flags.female = !flags.female;
+#if 0 /*JP*/
 		You("%s %s%s!",
 		    (u.umonnum != mntmp) ? "turn into a" : "feel like a new",
 		    (is_male(&mons[mntmp]) || is_female(&mons[mntmp])) ? "" :
 			flags.female ? "female " : "male ",
 		    mons[mntmp].mname);
+#else
+		You("%s%sになった%s！",
+		    (is_male(&mons[mntmp]) || is_female(&mons[mntmp])) ? "" :
+			flags.female ? "女の" : "男の",
+		    jtrns_mon_gen(mons[mntmp].mname, flags.female),
+		    (u.umonnum != mntmp) ? "" : "ような気がした");
+#endif
 	} else {
 		if (u.umonnum != mntmp)
+#if 0 /*JP*/
 			You("turn into %s!", an(mons[mntmp].mname));
+#else
+			You("%sになった！", 
+			    jtrns_mon_gen(mons[mntmp].mname, flags.female));
+#endif
 		else
+#if 0 /*JP*/
 			You_feel("like a new %s!", mons[mntmp].mname);
+#else
+			You("別の%sになったような気がした！", 
+			    jtrns_mon_gen(mons[mntmp].mname, flags.female));
+#endif
 	}
 	if (Stoned && poly_when_stoned(&mons[mntmp])) {
 		/* poly_when_stoned already checked stone golem genocide */
+/*JP
 		You("turn to stone!");
+*/
+		You("石になった！");
 		mntmp = PM_STONE_GOLEM;
 		Stoned = 0;
 		delayed_killer = 0;
@@ -520,15 +625,24 @@
 	if (Stone_resistance && Stoned) { /* parnes@eniac.seas.upenn.edu */
 		Stoned = 0;
 		delayed_killer = 0;
+/*JP
 		You("no longer seem to be petrifying.");
+*/
+		You("石化から解放されたようだ．");
 	}
 	if (Sick_resistance && Sick) {
 		make_sick(0L, (char *) 0, FALSE, SICK_ALL);
+/*JP
 		You("no longer feel sick.");
+*/
+		You("病気から解放されたようだ．");
 	}
 	if (Slimed) {
 	    if (flaming(youmonst.data)) {
+/*JP
 		pline_The("slime burns away!");
+*/
+		pline_The("スライムは燃えた！");
 		Slimed = 0L;
 		flags.botl = 1;
 	    } else if (mntmp == PM_GREEN_SLIME) {
@@ -608,9 +722,15 @@
 	    		!Stone_resistance && rnl(3)) {
 	    	char buf[BUFSZ];
 
+#if 0 /*JP*/
 	    	pline("No longer petrifying-resistant, you touch %s.",
 	    			mon_nam(u.usteed));
 	    	Sprintf(buf, "riding %s", an(u.usteed->data->mname));
+#else
+	    	pline("石化への耐性がないのに%sに触れてしまった．",
+	    			mon_nam(u.usteed));
+	    	Sprintf(buf, "%sに乗って", a_monnam(u.usteed));
+#endif
 	    	instapetrify(buf);
  	    }
 	    if (!can_ride(u.usteed)) dismount_steed(DISMOUNT_POLY);
@@ -618,32 +738,71 @@
 #endif
 
 	if (flags.verbose) {
+/*JP
 	    static const char use_thec[] = "Use the command #%s to %s.";
+*/
+	    static const char use_thec[] = "#%sコマンドで%sことができる．";
 	    static const char monsterc[] = "monster";
 	    if (can_breathe(youmonst.data))
+/*JP
 		pline(use_thec,monsterc,"use your breath weapon");
+*/
+		pline(use_thec,monsterc,"息を吐きかける");
 	    if (attacktype(youmonst.data, AT_SPIT))
+/*JP
 		pline(use_thec,monsterc,"spit venom");
+*/
+		pline(use_thec,monsterc,"毒を吐く");
 	    if (youmonst.data->mlet == S_NYMPH)
+/*JP
 		pline(use_thec,monsterc,"remove an iron ball");
+*/
+		pline(use_thec,monsterc,"鉄球をはずす");
 	    if (attacktype(youmonst.data, AT_GAZE))
+/*JP
 		pline(use_thec,monsterc,"gaze at monsters");
+*/
+		pline(use_thec,monsterc,"怪物を睨む");
 	    if (is_hider(youmonst.data))
+/*JP
 		pline(use_thec,monsterc,"hide");
+*/
+		pline(use_thec,monsterc,"隠れる");
 	    if (is_were(youmonst.data))
+/*JP
 		pline(use_thec,monsterc,"summon help");
+*/
+		pline(use_thec,monsterc,"仲間を召喚する");
 	    if (webmaker(youmonst.data))
+/*JP
 		pline(use_thec,monsterc,"spin a web");
+*/
+		pline(use_thec,monsterc,"くもの巣を張る");
 	    if (u.umonnum == PM_GREMLIN)
+/*JP
 		pline(use_thec,monsterc,"multiply in a fountain");
+*/
+		pline(use_thec,monsterc,"泉の中で分裂する");
 	    if (is_unicorn(youmonst.data))
+/*JP
 		pline(use_thec,monsterc,"use your horn");
+*/
+		pline(use_thec,monsterc,"角を使う");
 	    if (is_mind_flayer(youmonst.data))
+/*JP
 		pline(use_thec,monsterc,"emit a mental blast");
+*/
+		pline(use_thec,monsterc,"精神波を発生させる");
 	    if (youmonst.data->msound == MS_SHRIEK) /* worthless, actually */
+/*JP
 		pline(use_thec,monsterc,"shriek");
+*/
+		pline(use_thec,monsterc,"金切り声をあげる");
 	    if (lays_eggs(youmonst.data) && flags.female)
+/*JP
 		pline(use_thec,"sit","lay an egg");
+*/
+		pline(use_thec,"sit","卵を産む");
 	}
 	/* you now know what an egg of your type looks like */
 	if (lays_eggs(youmonst.data)) {
@@ -657,27 +816,44 @@
 	    spoteffects(TRUE);
 	if (Passes_walls && u.utrap && u.utraptype == TT_INFLOOR) {
 	    u.utrap = 0;
+/*JP
 	    pline_The("rock seems to no longer trap you.");
+*/
+	    pline("岩に閉じ込められることはないだろう．");
 	} else if (likes_lava(youmonst.data) && u.utrap && u.utraptype == TT_LAVA) {
 	    u.utrap = 0;
+/*JP
 	    pline_The("lava now feels soothing.");
+*/
+	    pline("溶岩が精神を落ちつかせてくれる．");
 	}
 	if (amorphous(youmonst.data) || is_whirly(youmonst.data) || unsolid(youmonst.data)) {
 	    if (Punished) {
+/*JP
 		You("slip out of the iron chain.");
+*/
+		You("鉄の鎖からするりと抜けた．");
 		unpunish();
 	    }
 	}
 	if (u.utrap && (u.utraptype == TT_WEB || u.utraptype == TT_BEARTRAP) &&
 		(amorphous(youmonst.data) || is_whirly(youmonst.data) || unsolid(youmonst.data) ||
 		  (youmonst.data->msize <= MZ_SMALL && u.utraptype == TT_BEARTRAP))) {
+#if 0 /*JP*/
 	    You("are no longer stuck in the %s.",
 		    u.utraptype == TT_WEB ? "web" : "bear trap");
+#else
+	    You("%sから脱出した．",
+		    u.utraptype == TT_WEB ? "くもの巣" : "熊の罠");
+#endif
 	    /* probably should burn webs too if PM_FIRE_ELEMENTAL */
 	    u.utrap = 0;
 	}
 	if (webmaker(youmonst.data) && u.utrap && u.utraptype == TT_WEB) {
+/*JP
 	    You("orient yourself on the web.");
+*/
+	    You("くもの巣に適応した．");
 	    u.utrap = 0;
 	}
 	flags.botl = 1;
@@ -700,17 +876,26 @@
 	if ((otmp = uarm) != 0) {
 	    if(otmp->oartifact) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("armor falls off!");
+*/
+		Your("鎧は脱げ落ちた！");
 		(void) Armor_gone();
 		dropx(otmp); /*WAC Drop instead of destroy*/
 	    } else if (controlled_change && !otmp->cursed) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		You("quickly remove your armor as you start to change.");
+*/
+		You("変化が始まる前に急いで鎧を外した．");
 		(void) Armor_gone();
 		dropx(otmp); /*WAC Drop instead of destroy*/
 	    } else {
 		if (donning(otmp)) cancel_don();
+/*JP
 		You("break out of your armor!");
+*/
+		You("鎧を壊した！");
 		exercise(A_STR, FALSE);
 		(void) Armor_gone();
 		useup(otmp);
@@ -718,16 +903,25 @@
 	}
 	if ((otmp = uarmc) != 0) {
 	    if(otmp->oartifact) {
+/*JP
 		Your("%s falls off!", cloak_simple_name(otmp));
+*/
+		Your("%sは脱げ落ちた！", cloak_simple_name(otmp));
 		(void) Cloak_off();
 		dropx(otmp);
 	    } else if (controlled_change && !otmp->cursed) {
+/*JP
 		You("remove your %s before you transform.",
+*/
+		You("変身する前に%sを外した．",
 			cloak_simple_name(otmp));
 		(void) Cloak_off();
 		dropx(otmp);
 	    } else {
+/*JP
 		Your("%s tears apart!", cloak_simple_name(otmp));
+*/
+		Your("%sはずたずたに引き裂かれた！", cloak_simple_name(otmp));
 		(void) Cloak_off();
 		useup(otmp);
 	    }
@@ -735,11 +929,16 @@
 #ifdef TOURIST
 	if ((otmp = uarmu) != 0) {
 		if (controlled_change && !otmp->cursed) {
-			You("take off your shirt just before it starts to rip.");
+/*JP
+			You("破れる前にシャツを脱いだ．");
+*/
 			setworn((struct obj *)0, otmp->owornmask & W_ARMU);
 			dropx(otmp);
 		} else {                
+/*JP
 		Your("shirt rips to shreds!");
+*/
+		Your("シャツは引き裂かれた！");
 		useup(uarmu);
 	}
 	}
@@ -747,22 +946,37 @@
     } else if (sliparm(youmonst.data)) {
 	if (((otmp = uarm) != 0) && (racial_exception(&youmonst, otmp) < 1)) {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("armor falls around you!");
+*/
+		Your("鎧はあなたのまわりに落ちた！");
 		(void) Armor_gone();
 		dropx(otmp);
 	}
 	if ((otmp = uarmc) != 0) {
 		if (is_whirly(youmonst.data))
+/*JP
 			Your("%s falls, unsupported!", cloak_simple_name(otmp));
+*/
+			Your("%sはすとんと落ちた！", cloak_simple_name(otmp));
+/*JP
 		else You("shrink out of your %s!", cloak_simple_name(otmp));
+*/
+		else You("%sから縮み出た！", cloak_simple_name(otmp));
 		(void) Cloak_off();
 		dropx(otmp);
 	}
 #ifdef TOURIST
 	if ((otmp = uarmu) != 0) {
 		if (is_whirly(youmonst.data))
+/*JP
 			You("seep right through your shirt!");
+*/
+			You("シャツからしみ出た！");
+/*JP
 		else You("become much too small for your shirt!");
+*/
+		else You("シャツよりずっと小さくなった！");
 		setworn((struct obj *)0, otmp->owornmask & W_ARMU);
 		dropx(otmp);
 	}
@@ -771,15 +985,23 @@
     if (has_horns(youmonst.data)) {
 	if ((otmp = uarmh) != 0) {
 	    if (is_flimsy(otmp) && !donning(otmp)) {
+#if 0 /*JP*/
 		char hornbuf[BUFSZ], yourbuf[BUFSZ];
 
 		/* Future possiblities: This could damage/destroy helmet */
 		Sprintf(hornbuf, "horn%s", plur(num_horns(youmonst.data)));
 		Your("%s %s through %s %s.", hornbuf, vtense(hornbuf, "pierce"),
 		     shk_your(yourbuf, otmp), xname(otmp));
+#else
+		char yourbuf[BUFSZ];
+		Your("角が%s%sをつらぬいた．", shk_your(yourbuf, otmp), xname(otmp));
+#endif
 	    } else {
 		if (donning(otmp)) cancel_don();
+/*JP
 		Your("helmet falls to the %s!", surface(u.ux, u.uy));
+*/
+	    Your("兜は%sに落ちた！", surface(u.ux, u.uy));
 		(void) Helmet_off();
 		dropx(otmp);
 	    }
@@ -789,19 +1011,28 @@
 	if ((otmp = uarmg) != 0) {
 	    if (donning(otmp)) cancel_don();
 	    /* Drop weapon along with gloves */
+/*JP
 	    You("drop your gloves%s!", uwep ? " and weapon" : "");
+*/
+	    You("小手%sを落した！", uwep ? "や武器" : "");
 	    drop_weapon(0);
 	    (void) Gloves_off();
 	    dropx(otmp);
 	}
 	if ((otmp = uarms) != 0) {
+/*JP
 	    You("can no longer hold your shield!");
+*/
+	    You("もう盾を持ってられない！");
 	    (void) Shield_off();
 	    dropx(otmp);
 	}
 	if ((otmp = uarmh) != 0) {
 	    if (donning(otmp)) cancel_don();
+/*JP
 	    Your("helmet falls to the %s!", surface(u.ux, u.uy));
+*/
+	    Your("兜は%sに落ちた！", surface(u.ux, u.uy));
 	    (void) Helmet_off();
 	    dropx(otmp);
 	}
@@ -811,9 +1042,17 @@
 	if ((otmp = uarmf) != 0) {
 	    if (donning(otmp)) cancel_don();
 	    if (is_whirly(youmonst.data))
+/*JP
 		Your("boots fall away!");
+*/
+		Your("靴は脱げ落ちた！");
+#if 0 /*JP*/
 	    else Your("boots %s off your feet!",
 			verysmall(youmonst.data) ? "slide" : "are pushed");
+#else
+	    else Your("靴はあなたの足から%s！",
+			verysmall(youmonst.data) ? "滑り落ちた" : "脱げ落ちた");
+#endif
 	    (void) Boots_off();
 	    dropx(otmp);
 	}
@@ -835,8 +1074,12 @@
 	if (!alone || cantwield(youmonst.data)) {
 	    struct obj *wep = uwep;
 
+#if 0 /*JP*/
 	    if (alone) You("find you must drop your weapon%s!",
 			   	u.twoweap ? "s" : "");
+#else
+	    if (alone) You("武器を落したことに気がついた！");
+#endif
 	    otmp2 = u.twoweap ? uswapwep : 0;
 	    uwepgone();
 	    if (!wep->cursed || wep->otyp != LOADSTONE)
@@ -861,19 +1104,30 @@
 	
 	/* KMH, balance patch -- you can't revert back while unchanging */
 	if (Unchanging && forced) {
+#if 0 /*JP*/
 		killer_format = NO_KILLER_PREFIX;
 		killer = "killed while stuck in creature form";
+#else
+		killer_format = KILLED_BY;
+		killer = "元の姿へ戻れずに";
+#endif
 		done(DIED);
 	}
 
 	if (emits_light(youmonst.data))
 	    del_light_source(LS_MONSTER, (genericptr_t)&youmonst);
+/*JP
 	polyman("return to %s form!", urace.adj);
+*/
+	polyman("%sに戻った！", urace.j);
 
 	if (u.uhp < 1) {
 	    char kbuf[256];
 
+/*JP
 	    Sprintf(kbuf, "reverting to unhealthy %s form", urace.adj);
+*/
+	    Sprintf(kbuf, "不健康な%sの姿に戻って", urace.j);
 	    killer_format = KILLED_BY;
 	    killer = kbuf;
 	    done(DIED);
@@ -888,7 +1142,10 @@
 	    u.uhp = (u.uhp/2) + 1;
 	}
 
+/*JP
 	if (!uarmg) selftouch("No longer petrify-resistant, you");
+*/
+	if (!uarmg) selftouch("石化への抵抗力がなくなって，あなたは");
 	nomul(0);
 
 	flags.botl = 1;
@@ -908,24 +1165,39 @@
 	struct monst *mtmp;
 
 	if (Blind) {
+/*JP
 		You("can't see a thing!");
+*/
+		You("なにも見ることができない！");
 		return(0);
 	}
 	if (u.uen < 20) {
+/*JP
 		You("lack the energy to use your special gaze!");
+*/
+		You("特別な睨みを効かせるのに十分なエネルギーがかけている！");
 		return(0);
 	}
+/*JP
 	pline("Where do you wish to look?");
+*/
+	pline("どこを睨みたい？");
 	cc.x = u.ux;
 	cc.y = u.uy;
+/*JP
 	getpos(&cc, TRUE, "the spot to look");
+*/
+	getpos(&cc, TRUE, "睨む場所");
 
 	if (cc.x == -10) return (0); /* user pressed esc */
 
 	mtmp = m_at(cc.x, cc.y);
 
 	if (!mtmp || !canseemon(mtmp)) {
+/*JP
 		You("don't see a monster there!");
+*/
+		pline("そこにモンスターは見あたらない！");
 		return (0);
 	}
 
@@ -935,27 +1207,48 @@
 		  && !Confusion && !Hallucination)) {
 		  	char qbuf[QBUFSZ];
 		  	
+/*JP
 			Sprintf(qbuf, "Really gaze at %s?", mon_nam(mtmp));
+*/
+			Sprintf(qbuf, "本当に%sを睨みつけますか？", mon_nam(mtmp));
 			if (yn(qbuf) != 'y') return (0);
 			if (mtmp->mpeaceful) setmangry(mtmp);
 	}
 
 	u.uen -= 20;
 
+/*JP
 	You("gaze at %s...", mon_nam(mtmp));
+*/
+	You("%sを睨みつけた．．．", mon_nam(mtmp));
 
 	if ((mtmp->data==&mons[PM_MEDUSA]) && !mtmp->mcan) {
+/*JP
 		pline("Gazing at the awake Medusa is not a very good idea.");
+*/
+		pline("メデューサを睨むのは全く良くない考えだ．");
 		/* as if gazing at a sleeping anything is fruitful... */
+/*JP
 		You("turn to stone...");
+*/
+		You("石になった．．．");
 		killer_format = KILLED_BY;
+/*JP
 		killer = "deliberately gazing at Medusa's hideous countenance";
+*/
+		killer = "恐ろしいメデューサの顔を故意に見つめて";
 		done(STONING);
 	} else if (!mtmp->mcansee || mtmp->msleeping) {
+/*JP
 	    pline("But nothing happens.");
+*/
+	    pline("何も起こらなかった．");
 	    return (1);
 	} else if (Invis && !perceives(mtmp->data)) {
+/*JP
 	    pline("%s seems not to notice your gaze.", Monnam(mtmp));
+*/
+	    pline("%sはあなたの睨みに気付いていないようだ．", Monnam(mtmp));
 	    return (1);
 	} else {
 	    register struct attack *mattk;
@@ -977,7 +1270,10 @@
 	int energy = 0;
 
 	if (Strangled) {
+/*JP
 	    You_cant("breathe.  Sorry.");
+*/
+	    You_cant("息を吐くことができない．残念．");
 	    return(0);
 	}
 
@@ -990,7 +1286,10 @@
 	    energy = 15;
 
 	if (u.uen < energy) {
+/*JP
 	    You("don't have enough energy to breathe!");
+*/
+	    You("息を吐くのに十分なエネルギーがなかった．");
 	    return(0);
 	}
 
@@ -1030,7 +1329,10 @@
 doremove()
 {
 	if (!Punished) {
+/*JP
 		You("are not chained to anything!");
+*/
+		You("何もつながれていない！");
 		return(0);
 	}
 	unpunish();
@@ -1044,11 +1346,17 @@
 
 	if (Levitation || Is_airlevel(&u.uz)
 	    || Underwater || Is_waterlevel(&u.uz)) {
+/*JP
 		You("must be on the ground to spin a web.");
+*/
+		You("くもの巣を張るには地面の上にいなくてはならない．");
 		return(0);
 	}
 	if (u.uswallow) {
+/*JP
 		You("release web fluid inside %s.", mon_nam(u.ustuck));
+*/
+		You("%sの内でくもの巣を吐き出した．", mon_nam(u.ustuck));
 		if (is_animal(u.ustuck->data)) {
 			expels(u.ustuck, u.ustuck->data, TRUE);
 			return(0);
@@ -1067,55 +1375,93 @@
 				sweep[0] = '\0';
 				switch(u.ustuck->data->mattk[i].adtyp) {
 					case AD_FIRE:
+/*JP
 						Strcpy(sweep, "ignites and ");
+*/
+						Strcpy(sweep, "発火し");
 						break;
 					case AD_ELEC:
+/*JP
 						Strcpy(sweep, "fries and ");
+*/
+						Strcpy(sweep, "焦げ");
 						break;
 					case AD_COLD:
 						Strcpy(sweep,
+/*JP
 						      "freezes, shatters and ");
+*/
+						      "凍りつき，こなごなになり");
 						break;
 				}
+/*JP
 				pline_The("web %sis swept away!", sweep);
+*/
+				pline("くもの巣は%sなくなった！", sweep);
 			}
 			return(0);
 		}		     /* default: a nasty jelly-like creature */
+/*JP
 		pline_The("web dissolves into %s.", mon_nam(u.ustuck));
+*/
+		pline("くもの巣は分解して%sになった．", mon_nam(u.ustuck));
 		return(0);
 	}
 	if (u.utrap) {
+/*JP
 		You("cannot spin webs while stuck in a trap.");
+*/
+		You("罠にはまっている間はくもの巣を張れない．");
 		return(0);
 	}
 	exercise(A_DEX, TRUE);
 	if (ttmp) switch (ttmp->ttyp) {
 		case PIT:
+/*JP
 		case SPIKED_PIT: You("spin a web, covering up the pit.");
+*/
+		case SPIKED_PIT: You("くもの巣を張り，落し穴を覆った．");
 			deltrap(ttmp);
 			bury_objs(u.ux, u.uy);
 			newsym(u.ux, u.uy);
 			return(1);
+/*JP
 		case SQKY_BOARD: pline_The("squeaky board is muffled.");
+*/
+		case SQKY_BOARD: pline("きしむ板は覆われた．");
 			deltrap(ttmp);
 			newsym(u.ux, u.uy);
 			return(1);
 		case TELEP_TRAP:
 		case LEVEL_TELEP:
 		case MAGIC_PORTAL:
+/*JP
 			Your("webbing vanishes!");
+*/
+			Your("くもの巣は消えた！");
 			return(0);
+/*JP
 		case WEB: You("make the web thicker.");
+*/
+		case WEB: You("くもの巣をより厚くした．");
 			return(1);
 		case HOLE:
 		case TRAPDOOR:
+#if 0 /*JP*/
 			You("web over the %s.",
 			    (ttmp->ttyp == TRAPDOOR) ? "trap door" : "hole");
+#else
+			You("%sをくもの巣で覆った．",
+			    (ttmp->ttyp == TRAPDOOR) ? "落し扉" : "穴");
+#endif
 			deltrap(ttmp);
 			newsym(u.ux, u.uy);
 			return 1;
 		case ROLLING_BOULDER_TRAP:
+/*JP
 			You("spin a web, jamming the trigger.");
+*/
+			You("くもの巣を張って，スイッチを動かなくした．");
 			deltrap(ttmp);
 			newsym(u.ux, u.uy);
 			return(1);
@@ -1130,7 +1476,10 @@
 		case MAGIC_TRAP:
 		case ANTI_MAGIC:
 		case POLY_TRAP:
+/*JP
 			You("have triggered a trap!");
+*/
+			You("罠を始動させてしまった！");
 			dotrap(ttmp, 0);
 			return(1);
 		default:
@@ -1139,8 +1488,13 @@
 		}
 	else if (On_stairs(u.ux, u.uy)) {
 	    /* cop out: don't let them hide the stairs */
+#if 0 /*JP:T*/
 	    Your("web fails to impede access to the %s.",
 		 (levl[u.ux][u.uy].typ == STAIRS) ? "stairs" : "ladder");
+#else
+	    Your("くもの巣は%sへの移動を邪魔できない．",
+		 (levl[u.ux][u.uy].typ == STAIRS) ? "階段" : "はしご");
+#endif
 	    return(1);
 		 
 	}
@@ -1158,16 +1512,25 @@
 {
 	int placeholder;
 	if (u.uen < 10) {
+/*JP
 	    You("lack the energy to send forth a call for help!");
+*/
+	    You("助けを呼ぶだけの体力がない！");
 	    return(0);
 	}
 	u.uen -= 10;
 	flags.botl = 1;
 
+/*JP
 	You("call upon your brethren for help!");
+*/
+	You("仲間を呼んだ！");
 	exercise(A_WIS, TRUE);
 	if (!were_summon(youmonst.data, TRUE, &placeholder, (char *)0))
+/*JP
 		pline("But none arrive.");
+*/
+		pline("しかし，何も来ない．");
 	return(1);
 }
 
@@ -1196,11 +1559,17 @@
 
 
 	if (Blind) {
+/*JP
 	    You_cant("see anything to gaze at.");
+*/
+		You("目が見えないので，にらめない．");
 	    return 0;
 	}
 	if (u.uen < 15) {
+/*JP
 	    You("lack the energy to use your special gaze!");
+*/
+	    You("にらむだけの体力がない！");
 	    return(0);
 	}
 	u.uen -= 15;
@@ -1211,22 +1580,37 @@
 	    if (canseemon(mtmp) && couldsee(mtmp->mx, mtmp->my)) {
 		looked++;
 		if (Invis && !perceives(mtmp->data))
+/*JP
 		    pline("%s seems not to notice your gaze.", Monnam(mtmp));
+*/
+		    pline("%sはあなたのにらみに気がついてないようだ．", Monnam(mtmp));
 		else if (mtmp->minvis && !See_invisible)
+/*JP
 		    You_cant("see where to gaze at %s.", Monnam(mtmp));
+*/
+		    You("%sは見えないので，にらめない", Monnam(mtmp));
 		else if (mtmp->m_ap_type == M_AP_FURNITURE
 			|| mtmp->m_ap_type == M_AP_OBJECT) {
 		    looked--;
 		    continue;
 		} else if (flags.safe_dog && !Confusion && !Hallucination
 		  && mtmp->mtame) {
+/*JP
 		    You("avoid gazing at %s.", y_monnam(mtmp));
+*/
+		    You("%sから目をそらしてしまった．", y_monnam(mtmp));
 		} else {
 		    if (flags.confirm && mtmp->mpeaceful && !Confusion
 							&& !Hallucination) {
+#if 0 /*JP*/
 			Sprintf(qbuf, "Really %s %s?",
 			    (adtyp == AD_CONF) ? "confuse" : "attack",
 			    mon_nam(mtmp));
+#else
+			Sprintf(qbuf, "本当に%sを%s？",
+			    mon_nam(mtmp),
+			    (adtyp == AD_CONF) ? "混乱させる" : "攻撃する");
+#endif
 			if (yn(qbuf) != 'y') continue;
 			setmangry(mtmp);
 		    }
@@ -1240,16 +1624,30 @@
 		     */
 		    if (adtyp == AD_CONF) {
 			if (!mtmp->mconf)
+/*JP
 			    Your("gaze confuses %s!", mon_nam(mtmp));
+*/
+			    Your("にらみは%sを混乱させた！", mon_nam(mtmp));
 			else
+/*JP
 			    pline("%s is getting more and more confused.",
+*/
+			    pline("%sはますます混乱した！",
 							Monnam(mtmp));
 			mtmp->mconf = 1;
 		    } else if (adtyp == AD_FIRE) {
 			int dmg = d(2,6);
+#if 0 /*JP*/
 			You("attack %s with a fiery gaze!", mon_nam(mtmp));
+#else
+			You("炎のにらみで%sを攻撃した！", mon_nam(mtmp));
+#endif
 			if (resists_fire(mtmp)) {
+#if 0 /*JP*/
 			    pline_The("fire doesn't burn %s!", mon_nam(mtmp));
+#else
+			    pline("%sは炎で燃えなかった！", mon_nam(mtmp));
+#endif
 			    dmg = 0;
 			}
 			if((int) u.ulevel > rn2(20))
@@ -1267,7 +1665,10 @@
 		    if (!DEADMONSTER(mtmp) &&
 			  (mtmp->data==&mons[PM_FLOATING_EYE]) && !mtmp->mcan) {
 			if (!Free_action) {
+/*JP
 			    You("are frozen by %s gaze!",
+*/
+			    You("%sのにらみで動けなくなった！", 
 					     s_suffix(mon_nam(mtmp)));
 			    nomul((u.ulevel > 6 || rn2(4)) ?
 				    -d((int)mtmp->m_lev+1,
@@ -1275,7 +1676,10 @@
 				    : -200);
 			    return 1;
 			} else
+/*JP
 			    You("stiffen momentarily under %s gaze.",
+*/
+			    You("%sのにらみで一瞬硬直した．",
 				    s_suffix(mon_nam(mtmp)));
 		    }
 		    /* Technically this one shouldn't affect you at all because
@@ -1286,18 +1690,30 @@
 		    if (!DEADMONSTER(mtmp) &&
 			    (mtmp->data==&mons[PM_MEDUSA]) && !mtmp->mcan) {
 			pline(
+/*JP
 			 "Gazing at the awake %s is not a very good idea.",
+*/
+			 "目を覚ましている%sをにらむのは賢いことじゃない．",
 			    l_monnam(mtmp));
 			/* as if gazing at a sleeping anything is fruitful... */
+/*JP
 			You("turn to stone...");
+*/
+			You("石になった．．．");
 			killer_format = KILLED_BY;
+/*JP
 			killer = "deliberately meeting Medusa's gaze";
+*/
+			killer = "わざわざメデューサのにらみをまともに見て";
 			done(STONING);
 		    }
 		}
 	    }
 	}
+/*JP
 	if (!looked) You("gaze at no place in particular.");
+*/
+	if (!looked) You("実際には何もにらめなかった．");
 	return 1;
 }
 #endif
@@ -1309,7 +1725,10 @@
 	boolean ismimic = youmonst.data->mlet == S_MIMIC;
 
 	if (u.uundetected || (ismimic && youmonst.m_ap_type != M_AP_NOTHING)) {
+/*JP
 		You("are already hiding.");
+*/
+		You("もう隠れている．");
 		return(0);
 	}
 	if (ismimic) {
@@ -1328,13 +1747,19 @@
 	struct monst *mtmp, *nmon;
 
 	if (u.uen < 10) {
+/*JP
 	    You("concentrate but lack the energy to maintain doing so.");
+*/
+	    You("集中した．しかしエネルギーが足りない．");
 	    return(0);
 	}
 	u.uen -= 10;
 	flags.botl = 1;
 
+/*JP
 	pline("A wave of psychic energy pours out.");
+*/
+	pline("精神エネルギー波が放散した．");
 	for(mtmp=fmon; mtmp; mtmp = nmon) {
 		int u_sen;
 
@@ -1347,10 +1772,17 @@
 			continue;
 		u_sen = telepathic(mtmp->data) && !mtmp->mcansee;
 		if (u_sen || (telepathic(mtmp->data) && rn2(3)) || !rn2(2)) {
+#if 0 /*JP*/
 			You("lock in on %s %s.", s_suffix(mon_nam(mtmp)),
 				u_sen ? "telepathy" :
 				telepathic(mtmp->data) ? "latent telepathy" :
 				"mind");
+#else
+			pline("%sの%sり込んだ．", mon_nam(mtmp),
+				u_sen ? "精神に入" :
+				telepathic(mtmp->data) ? "潜在的精神に入" :
+				"深層意識に潜");
+#endif
 			mtmp->mhp -= rn1(4,4);
 			if (mtmp->mhp <= 0)
 				killed(mtmp);
@@ -1362,7 +1794,10 @@
 STATIC_OVL void
 uunstick()
 {
+/*JP
 	pline("%s is no longer in your clutches.", Monnam(u.ustuck));
+*/
+	pline("%sはあなたの手から逃れた．", Monnam(u.ustuck));
 	setustuck(0);
 }
 
@@ -1371,7 +1806,10 @@
 boolean silently;
 {
 	if (uskin) {
+/*JP
 		if (!silently) Your("skin returns to its original form.");
+*/
+		Your("皮膚は本来の姿に戻った．");
 		uarm = uskin;
 		uskin = (struct obj *)0;
 		/* undo save/restore hack */
@@ -1388,50 +1826,125 @@
 int part;
 {
 	static NEARDATA const char
+#if 0 /*JP*/
 	*humanoid_parts[] = { "arm", "eye", "face", "finger",
 		"fingertip", "foot", "hand", "handed", "head", "leg",
 		"light headed", "neck", "spine", "toe", "hair",
 		"blood", "lung", "nose", "stomach"},
+#else
+	*humanoid_parts[] = { "腕", "目", "顔", "指",
+		"指先", "足", "手", "手にする", "頭", "足",
+		"めまいがした", "首", "背骨", "爪先", "髪",
+		"血", "肺", "鼻", "胃"},
+#endif
+#if 0 /*JP*/
 	*jelly_parts[] = { "pseudopod", "dark spot", "front",
 		"pseudopod extension", "pseudopod extremity",
 		"pseudopod root", "grasp", "grasped", "cerebral area",
 		"lower pseudopod", "viscous", "middle", "surface",
 		"pseudopod extremity", "ripples", "juices",
 		"surface", "sensor", "stomach" },
+#else
+	*jelly_parts[] = { "擬似触手", "黒い斑点", "前面",
+		"擬似触手の先", "擬似触手",
+		"擬似触手の幹", "触手", "握る", "脳の領域",
+		"下方の擬似触手", "ねばねばしてきた", "中間領域", "表面",
+		"擬似触手", "波紋", "体液",
+		"表面", "感覚器", "胃"},
+#endif
+#if 0 /*JP*/
 	*animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip",
 		"rear claw", "foreclaw", "clawed", "head", "rear limb",
 		"light headed", "neck", "spine", "rear claw tip",
 		"fur", "blood", "lung", "nose", "stomach" },
+#else
+	*animal_parts[] = { "前足", "目", "顔", "前爪", "爪先",
+		"後爪", "前爪", "ひっかける", "頭", "後足",
+		"めまいがした", "首", "背骨", "後爪先",
+		"毛皮", "血", "肺", "鼻", "胃"},
+#endif
+#if 0 /*JP*/
 	*bird_parts[] = { "wing", "eye", "face", "wing", "wing tip",
 		"foot", "wing", "winged", "head", "leg",
 		"light headed", "neck", "spine", "toe",
 		"feathers", "blood", "lung", "bill", "stomach" },
+#else
+	*bird_parts[] = { "翼", "目", "顔", "翼", "翼の先",
+		"足", "翼", "翼にとる", "頭", "足",
+		"めまいがした", "首", "背骨", "爪先",
+		"羽毛", "血", "肺", "くちばし", "胃" },
+#endif
+#if 0 /*JP*/
 	*horse_parts[] = { "foreleg", "eye", "face", "forehoof", "hoof tip",
 		"rear hoof", "foreclaw", "hooved", "head", "rear leg",
 		"light headed", "neck", "backbone", "rear hoof tip",
 		"mane", "blood", "lung", "nose", "stomach"},
+#else
+	*horse_parts[] = { "前足", "目", "顔", "前蹄", "蹄",
+		"後蹄", "前爪", "蹄にはさむ", "頭", "後足",
+		"めまいがした", "首", "背骨", "後爪先",
+		"たてがみ", "血", "肺", "鼻", "胃"},
+#endif
+#if 0 /*JP*/
 	*sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle",
 		"tentacle tip", "lower appendage", "tentacle", "tentacled",
 		"body", "lower tentacle", "rotational", "equator", "body",
 		"lower tentacle tip", "cilia", "life force", "retina",
 		"olfactory nerve", "interior" },
+#else
+	*sphere_parts[] = { "突起", "視覚神経", "体", "触手",
+		"触手の先", "下の突起", "触手", "触手に持つ",
+		"体", "下の触手", "回転した", "中心線", "体",
+		"下の触手の先", "繊毛", "生命力", "網膜",
+		"嗅覚中枢", "内部" },
+#endif
+#if 0 /*JP*/
 	*fungus_parts[] = { "mycelium", "visual area", "front", "hypha",
 		"hypha", "root", "strand", "stranded", "cap area",
 		"rhizome", "sporulated", "stalk", "root", "rhizome tip",
 		"spores", "juices", "gill", "gill", "interior" },
+#else
+	*fungus_parts[] = { "菌糸体", "視覚領域", "前", "菌糸",
+		"菌糸", "根", "触手", "触手にからみつける", "傘",
+		"根茎", "混乱する", "軸", "根", "根茎の先",
+		"芽胞", "体液", "えら", "えら", "内部"},
+#endif
+#if 0 /*JP*/
 	*vortex_parts[] = { "region", "eye", "front", "minor current",
 		"minor current", "lower current", "swirl", "swirled",
 		"central core", "lower current", "addled", "center",
 		"currents", "edge", "currents", "life force",
 		"center", "leading edge", "interior" },
+#else
+	*vortex_parts[] = { "領域", "目", "前", "小さい流れ",
+		"小さい流れ", "下部の流れ", "渦巻", "渦に巻く",
+		"渦の中心", "下部の流れ", "混乱した", "中心部",
+		"流れ", "外周", "気流", "生命力",
+		"中心", "前縁", "内部"},
+#endif
+#if 0 /*JP*/
 	*snake_parts[] = { "vestigial limb", "eye", "face", "large scale",
 		"large scale tip", "rear region", "scale gap", "scale gapped",
 		"head", "rear region", "light headed", "neck", "length",
 		"rear scale", "scales", "blood", "lung", "forked tongue", "stomach" },
+#else
+	*snake_parts[] = { "退化した足", "目", "顔", "大きな鱗",
+		"大きな鱗の先", "後部分", "鱗の隙間", "鱗の隙間につける",
+		"頭", "後部分", "めまいがした", "首", "体",
+		"後部分の鎧", "鱗", "血", "肺", "舌", "胃"},
+#endif
+#if 0 /*JP*/
 	*fish_parts[] = { "fin", "eye", "premaxillary", "pelvic axillary",
 		"pelvic fin", "anal fin", "pectoral fin", "finned", "head", "peduncle",
 		"played out", "gills", "dorsal fin", "caudal fin",
 		"scales", "blood", "gill", "nostril", "stomach" };
+#else
+	*fish_parts[] = { "ひれ", "目", "顔", "ひれの先",
+		"ひれの先", "尾びれ", "胸ひれ", "ひれで持つ", "頭", "尾びれ",
+		"めまいがした", "えら", "背びれ", "尾びれ",
+		"鱗", "血", "えら", "鼻", "胃" };
+#endif /*JP*/
+#if 0 /*JP*/
 	/* claw attacks are overloaded in mons[]; most humanoids with
 	   such attacks should still reference hands rather than claws */
 	static const char not_claws[] = {
@@ -1440,8 +1953,14 @@
 		S_ORC, S_GIANT,		/* quest nemeses */
 		'\0'		/* string terminator; assert( S_xxx != 0 ); */
 	};
+#endif
 	struct permonst *mptr = mon->data;
 
+#if 0 /*JP*/
+/* pawは犬とか猫の手，clawはタカの足のようなかぎつめ，
+   どっちらも日本語じゃ「手」でいいでしょう．
+   trunkは象の鼻を意味するそうです。日本語では単に鼻でいいかと。
+*/
 	if (part == HAND || part == HANDED) {	/* some special cases */
 	    if (mptr->mlet == S_DOG || mptr->mlet == S_FELINE ||
 		    mptr->mlet == S_YETI)
@@ -1455,13 +1974,26 @@
 	if ((mptr == &mons[PM_MUMAK] || mptr == &mons[PM_MASTODON]) &&
 		part == NOSE)
 	    return "trunk";
+#endif
 	if (mptr == &mons[PM_SHARK] && part == HAIR)
+#if 0 /*JP*/
 	    return "skin";	/* sharks don't have scales */
+#else
+	    return "頭";	/* sharks don't have scales */
+#endif
 	if (mptr == &mons[PM_JELLYFISH] && (part == ARM || part == FINGER ||
 	    part == HAND || part == FOOT || part == TOE))
+#if 0 /*JP*/
 	    return "tentacle";
+#else
+	    return "触手";
+#endif
 	if (mptr == &mons[PM_FLOATING_EYE] && part == EYE)
+#if 0 /*JP*/
 	    return "cornea";
+#else
+	    return "角膜";
+#endif
 	if (humanoid(mptr) &&
 		(part == ARM || part == FINGER || part == FINGERTIP ||
 		    part == HAND || part == HANDED))
@@ -1472,10 +2004,17 @@
 		(mptr == &mons[PM_ROTHE] && part != HAIR))
 	    return horse_parts[part];
 	if (mptr->mlet == S_LIGHT) {
+#if 0 /*JP*/
 		if (part == HANDED) return "rayed";
 		else if (part == ARM || part == FINGER ||
 				part == FINGERTIP || part == HAND) return "ray";
 		else return "beam";
+#else
+		if (part == HANDED || part == ARM || part == FINGER ||
+				part == FINGERTIP || part == HAND) {
+		    return "光";
+		}
+#endif
 	}
 	if (mptr->mlet == S_EEL && mptr != &mons[PM_JELLYFISH])
 	    return fish_parts[part];
@@ -1541,7 +2080,10 @@
 		u.mh += heal;
 		if (u.mh > u.mhmax) u.mh = u.mhmax;
 		flags.botl = 1;
+/*JP
 		pline("Strangely, you feel better than before.");
+*/
+		pline("奇妙なことに，前より気分がよくなった．");
 		exercise(A_STR, TRUE);
 	}
 }
@@ -1686,10 +2228,16 @@
 	     * We deliberately don't say what form the ritual takes since it
 	     * is unaffected by blindness, confusion, stun etc. 
 	     */
+/*JP
 	    if (yn("Transform into your draconic form?") == 'n') 
+*/
+	    if (yn("ドラゴンの姿に変身しますか？") == 'n') 
 		can_polyatwill = TRUE;
 	    else if (!scales && !scale_mail && u.uen <= EN_BABY_DRAGON) {
+/*JP
 		You("don't have the energy to polymorph.");
+*/
+		You("変身するだけのエネルギーが無い．");
 		return 0;		
 	    } else {
 		/* Check if you can do the adult form */
@@ -1717,16 +2265,26 @@
 		if (mvitals[draconic.mon].mvflags & G_GENOD)
 		    draconic.merge = FALSE;
 		set_occupation(mage_transform,
+/*JP
 			"transforming into your draconic form", 0);
 		You("begin the transformation ritual.");
+*/
+			"あなたに適したドラゴンの姿に変身する", 0);
+		You("変身の儀式をはじめた．");
 		return 1;
 	    }
 	}
 	if (Race_if(PM_DOPPELGANGER)) {
+/*JP
 	    if (yn("Polymorph at will?") == 'n')	    
+*/
+	    if (yn("変化しますか？") == 'n')
 	    	can_polyatwill = TRUE;
 	    else if (u.uen < EN_DOPP) {
+/*JP
 		You("don't have the energy to polymorph!");
+*/
+		You("変化するだけのエネルギーが無い！");
 		return 0;
 	    } else {
 		u.uen -= EN_DOPP;
@@ -1746,16 +2304,28 @@
 	    }
 	} else if (Race_if(PM_HUMAN_WEREWOLF) &&
 		(!Upolyd || u.umonnum == u.ulycn)) {
+/*JP
 	    if (yn("Change form?") == 'n')
+*/
+	    if (yn("姿を変えますか？") == 'n')
 	    	can_polyatwill = TRUE;
 	    else if (u.ulycn == NON_PM) {
 	    	/* Very serious */
+/*JP
 	    	You("are no longer a lycanthrope!");
+*/
+	    	You("もう獣人ではない！");
 	    } else if (u.ulevel <= 2) {
+/*JP
 	    	You("can't invoke the change at will yet.");
+*/
+	    	You("まだ姿を変える方法を知らない．");
 		return 0;		
 	    } else if (u.uen < EN_WERE) {
+/*JP
 		You("don't have the energy to change form!");
+*/
+		You("姿を変えるだけのエネルギーが無い！");
 		return 0;
 	    } else {
 	    	/* Committed to the change now */
@@ -1773,10 +2343,16 @@
 		}
 	    }
 	} else if (!can_polyatwill) {
+/*JP
 	    pline("You can't polymorph at will%s.", 
 		    ((Role_if(PM_FLAME_MAGE) || Role_if(PM_ICE_MAGE) || 
 		      Race_if(PM_HUMAN_WEREWOLF) || Race_if(PM_DOPPELGANGER)) ?
 		    " yet" : ""));
+*/
+	    pline("あなたは%s変化できない．", 
+		    ((Role_if(PM_FLAME_MAGE) || Role_if(PM_ICE_MAGE) || 
+		      Race_if(PM_HUMAN_WEREWOLF) || Race_if(PM_DOPPELGANGER)) ?
+		    "今の所は" : ""));
 	    return 0;
 	}
 
@@ -1792,7 +2368,10 @@
 	 * Should check that monster being morphed into is not genocided
 	 * see do_merge above for correct use
 	 */
+/*JP
 	You("merge with your scaly armor.");
+*/
+				You("鱗の鎧と一体化した．");
 	uskin = uarm;
 	uarm = (struct obj *)0;
 	/* save/restore hack */
@@ -1811,10 +2390,16 @@
 
 	old_light = (u.umonnum >= LOW_PM) ? emits_light(youmonst.data) : 0;
 	do {
+/*JP
 		getlin("Become what kind of monster? [type the name]", buf);
+*/
+		getlin("どの種の怪物になる？[英語名を入れてね]", buf);
 		mntmp = name_to_mon(buf);
 		if (mntmp < LOW_PM)
+/*JP
 				pline("I've never heard of such monsters.");
+*/
+				pline("そんな怪物は聞いたことがない．");
 			/* Note:  humans are illegal as monsters, but an
 			 * illegal monster forces newman(), which is what we
 			 * want if they specified a human.... */
@@ -1838,10 +2423,16 @@
 			You("cannot polymorph into that.");
 #ifdef EATEN_MEMORY
 		else if (!mvitals[mntmp].eaten && (rn2((u.ulevel + 25)) < 20)) {
+/*JP
 			You("don't have the knowledge to polymorph into that.");
+*/
+			pline("あなたにはその怪物に関する知識がない．");
 			return;  /* Nice try */
 		} else {
+/*JP
 			You("attempt an unfamiliar polymorph.");
+*/
+			You("未知の怪物に変化しようとした．");
 			break;
 		}
 #endif
diff -aurN slashem-0.0.7E6F2/src/potion.c jslashem-0.0.7E6F2-J0.0.8/src/potion.c
--- slashem-0.0.7E6F2/src/potion.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/potion.c	2004-07-27 09:09:10.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 
@@ -74,8 +82,13 @@
 
 	if (!xtime && old) {
 		if (talk)
+#if 0 /*JP*/
 		    You_feel("less %s now.",
 			Hallucination ? "trippy" : "confused");
+#else
+		    You("%sがおさまった",
+			Hallucination ? "ヘロヘロ" : "混乱");
+#endif
 	}
 	if ((xtime && !old) || (!xtime && old)) flags.botl = TRUE;
 
@@ -91,17 +104,28 @@
 
 	if (!xtime && old) {
 		if (talk)
+#if 0 /*JP*/
 		    You_feel("%s now.",
 			Hallucination ? "less wobbly" : "a bit steadier");
+#else
+		    You_feel("%s．",
+			Hallucination ? "へろりらがおさまった" : "だんだんしっかりしてきた");
+#endif
 	}
 	if (xtime && !old) {
 		if (talk) {
 #ifdef STEED
 			if (u.usteed)
+/*JP
 				You("wobble in the saddle.");
+*/
+				You("鞍の上でぐらぐらした．");
 			else
 #endif
+/*JP
 			You("%s...", stagger(youmonst.data, "stagger"));
+*/
+			You("%s．．．", stagger(youmonst.data, "くらくらした"));
 		}
 	}
 	if ((!xtime && old) || (xtime && !old)) flags.botl = TRUE;
@@ -122,11 +146,19 @@
 	    if (Sick_resistance) return;
 	    if (!old) {
 		/* newly sick */
+/*JP
 		You_feel("deathly sick.");
+*/
+		You("病気で死にそうだ．");
 	    } else {
 		/* already sick */
+#if 0 /*JP*/
 		if (talk) You_feel("%s worse.",
 			      xtime <= Sick/2L ? "much" : "even");
+#else
+		if (talk) You("%s悪化したような気がする．",
+			      xtime <= Sick/2L ? "さらに" : "もっと");
+#endif
 	    }
 	    set_itimeout(&Sick, xtime);
 	    u.usick_type |= type;
@@ -135,10 +167,16 @@
 	    /* was sick, now not */
 	    u.usick_type &= ~type;
 	    if (u.usick_type) { /* only partly cured */
+/*JP
 		if (talk) You_feel("somewhat better.");
+*/
+		if (talk) You("ちょっとよくなった．");
 		set_itimeout(&Sick, Sick * 2); /* approximation */
 	    } else {
+/*JP
 		if (talk) pline("What a relief!");
+*/
+		if (talk) pline("ああ助かった！");
 		Sick = 0L;		/* set_itimeout(&Sick, 0L) */
 	    }
 	    flags.botl = TRUE;
@@ -164,13 +202,22 @@
 	long old = Vomiting;
 
 	if(!xtime && old)
+/*JP
 	    if(talk) You_feel("much less nauseated now.");
+*/
+	    if(talk) You("吐き気がおさまった．");
 
 	set_itimeout(&Vomiting, xtime);
 }
 
+/*JP
 static const char vismsg[] = "vision seems to %s for a moment but is %s now.";
+*/
+static const char vismsg[] = "視界は一瞬%sなったがまた%sなった．";
+/*JP
 static const char eyemsg[] = "%s momentarily %s.";
+*/
+static const char eyemsg[] = "%sは一瞬%s．";
 
 void
 make_blinded(xtime, talk)
@@ -179,8 +226,10 @@
 {
 	long old = Blinded;
 	boolean u_could_see, can_see_now;
+#if 0 /*JP*/
 	int eyecnt;
 	char buf[BUFSZ];
+#endif
 
 	/* we need to probe ahead in case the Eyes of the Overworld
 	   are or will be overriding blindness */
@@ -194,9 +243,15 @@
 	if (can_see_now && !u_could_see) {	/* regaining sight */
 	    if (talk) {
 		if (Hallucination)
+/*JP
 		    pline("Far out!  Everything is all cosmic again!");
+*/
+		    pline("げ！なにもかもがまた虹色に見える！");
 		else
+/*JP
 		    You("can see again.");
+*/
+		    You("また見えるようになった．");
 	    }
 	} else if (old && !xtime) {
 	    /* clearing temporary blindness without toggling blindness */
@@ -204,13 +259,22 @@
 		if (!haseyes(youmonst.data)) {
 		    strange_feeling((struct obj *)0, (char *)0);
 		} else if (Blindfolded) {
+#if 0 /*JP*/
 		    Strcpy(buf, body_part(EYE));
 		    eyecnt = eyecount(youmonst.data);
 		    Your(eyemsg, (eyecnt == 1) ? buf : makeplural(buf),
 			 (eyecnt == 1) ? "itches" : "itch");
+#else
+		    Your(eyemsg, body_part(EYE), "かゆくなった");
+#endif
 		} else {	/* Eyes of the Overworld */
+#if 0 /*JP*/
 		    Your(vismsg, "brighten",
 			 Hallucination ? "sadder" : "normal");
+#else
+		    Your(vismsg, "明るく",
+			 Hallucination ? "根暗に" : "普通に");
+#endif
 		}
 	    }
 	}
@@ -218,9 +282,15 @@
 	if (u_could_see && !can_see_now) {	/* losing sight */
 	    if (talk) {
 		if (Hallucination)
+/*JP
 		    pline("Oh, bummer!  Everything is dark!  Help!");
+*/
+		    pline("暗いよー，狭いよー，恐いよー！");
 		else
+/*JP
 		    pline("A cloud of darkness falls upon you.");
+*/
+		    pline("暗黒の雲があなたを覆った．");
 	    }
 	    /* Before the hero goes blind, set the ball&chain variables. */
 	    if (Punished) set_bc(0);
@@ -230,13 +300,22 @@
 		if (!haseyes(youmonst.data)) {
 		    strange_feeling((struct obj *)0, (char *)0);
 		} else if (Blindfolded) {
+#if 0 /*JP*/
 		    Strcpy(buf, body_part(EYE));
 		    eyecnt = eyecount(youmonst.data);
 		    Your(eyemsg, (eyecnt == 1) ? buf : makeplural(buf),
 			 (eyecnt == 1) ? "twitches" : "twitch");
+#else
+		    Your(eyemsg, body_part(EYE), "ピクピクした");
+#endif
 		} else {	/* Eyes of the Overworld */
+#if 0 /*JP*/
 		    Your(vismsg, "dim",
 			 Hallucination ? "happier" : "normal");
+#else
+		    Your(vismsg, "薄暗く",
+			 Hallucination ? "ハッピーに" : "普通に");
+#endif
 		}
 	    }
 	}
@@ -260,9 +339,17 @@
 	boolean changed = 0;
 	const char *message, *verb;
 
+#if 0 /*JP*/
 	message = (!xtime) ? "Everything %s SO boring now." :
 			     "Oh wow!  Everything %s so cosmic!";
+#else
+	message = (!xtime) ? "何もかもが＊退屈＊に%sる．" :
+			     "ワーオ！何もかも虹色に%sる！";
+#endif
+/*JP
 	verb = (!Blind) ? "looks" : "feels";
+*/
+	verb = (!Blind) ? "見え" : "感じ";
 
 	if (mask) {
 	    if (HHallucination) changed = TRUE;
@@ -279,14 +366,21 @@
 		if (!haseyes(youmonst.data)) {
 		    strange_feeling((struct obj *)0, (char *)0);
 		} else if (Blind) {
+#if 0 /*JP*/
 		    char buf[BUFSZ];
 		    int eyecnt = eyecount(youmonst.data);
 
 		    Strcpy(buf, body_part(EYE));
 		    Your(eyemsg, (eyecnt == 1) ? buf : makeplural(buf),
 			 (eyecnt == 1) ? "itches" : "itch");
+#else
+		    Your(eyemsg, body_part(EYE), "かゆくなった");
+#endif
 		} else {	/* Grayswandir */
+/*JP
 		    Your(vismsg, "flatten", "normal");
+*/
+		    Your(vismsg, "おかしく", "普通に");
 		}
 	    }
 	}
@@ -317,19 +411,37 @@
 	struct monst *mtmp = makemon(&mons[PM_GHOST], u.ux, u.uy, NO_MM_FLAGS);
 
 	if (!mtmp) {
+/*JP
 		pline("This bottle turns out to be empty.");
+*/
+		pline("瓶は空っぽだった．");
 		return;
 	}
 	if (Blind) {
+/*JP
 		pline("As you open the bottle, %s emerges.", something);
+*/
+		pline("瓶を開けると，何かが出てきた．");
 		return;
 	}
+/*JP
 	pline("As you open the bottle, an enormous %s emerges!",
+*/
+	pline("瓶を開けると，巨大な%sが出てきた！",
+/*JP
 		Hallucination ? rndmonnam() : (const char *)"ghost");
+*/
+		Hallucination ? rndmonnam() : (const char *)"幽霊");
 	if(flags.verbose)
+/*JP
 	    You("are frightened to death, and unable to move.");
+*/
+	    You("まっさおになって驚き，動けなくなった．");
 	nomul(-3);
+/*JP
 	nomovemsg = "You regain your composure.";
+*/
+	nomovemsg = "あなたは平静を取り戻した．";
 }
 
 /* "Quaffing is like drinking, except you spill more."  -- Terry Pratchett
@@ -343,7 +455,10 @@
 	char *qp = quaffables;
 
 	if (Strangled) {
+/*JP
 		pline("If you can't breathe air, how can you drink liquid?");
+*/
+		pline("息もできないのに，どうやって液体を飲むんだい？");
 		return 0;
 	}
 
@@ -357,7 +472,10 @@
 	    *qp++ = ALLOW_THISPLACE;
 	Strcpy(qp, beverages);
 
+/*JP
 	otmp = getobj(quaffables, "drink");
+*/
+	otmp = getobj(quaffables, "飲む");
 	if (otmp == &thisplace) {
 	    if (IS_FOUNTAIN(levl[u.ux][u.uy].typ)) {
 		drinkfountain();
@@ -373,7 +491,10 @@
 		return 1;
 	    }
 #endif
+/*JP
 	    pline("Do you know what lives in this water!");
+*/
+	    pline("この水中で何が生きているのか知ってるかい！");
 	    return 1;
 	}
 	if(!otmp) return(0);
@@ -416,8 +537,13 @@
 
 	if(nothing) {
 	    unkn++;
+#if 0 /*JP*/
 	    You("have a %s feeling for a moment, then it passes.",
 		  Hallucination ? "normal" : "peculiar");
+#else
+	    You("%s気分におそわれたが，すぐに消えさった．",
+		  Hallucination ? "普通の" : "独特な");
+#endif
 	}
 	if(otmp->dknown && !objects[otmp->otyp].oc_name_known) {
 		if(!unkn) {
@@ -456,13 +582,23 @@
 	case SPE_RESTORE_ABILITY:
 		unkn++;
 		if(otmp->cursed) {
+/*JP
 		    pline("Ulch!  This makes you feel mediocre!");
+*/
+		    pline("うーん，どうもさえないなあ．");
 		    break;
 		} else {
+#if 0 /*JP*/
 		    pline("Wow!  This makes you feel %s!",
 			  (otmp->blessed) ?
 				(unfixable_trouble_count(FALSE) ? "better" : "great")
 			  : "good");
+#else
+		    pline("ワーオ！気分が%sよくなった！",
+			  (otmp->blessed) ?
+				(unfixable_trouble_count(FALSE) ? "とても" : "より")
+			  : "");
+#endif
 		    i = rn2(A_MAX);		/* start at a random point */
 		    for (ii = 0; ii < A_MAX; ii++) {
 			lim = AMAX(i);
@@ -484,19 +620,38 @@
 				  TRUE, 0L);
 		break;
 	case POT_AMNESIA:
+#if 0 /*JP*/
 		pline(Hallucination? "This tastes like champagne!" :
 			"This liquid bubbles and fizzes as you drink it.");
+#else
+		pline(Hallucination? "これはシャンパンによく似た味だ！" :
+			"あなたが飲むと液体はシュッという音を立てて泡立った．");
+#endif
 		forget((!otmp->blessed? ALL_SPELLS : 0) | ALL_MAP);
 		if (Hallucination)
+#if 0 /*JP*/
 		    pline("Hakuna matata!");
+#else
+		    /* スワヒリ語で「小さい事は気にするな」の意 */
+		    pline("ハクナマタタ！");
+#endif
 		else
+#if 0 /*JP*/
 		    You_feel("your memories dissolve.");
+#else
+		    You("記憶がぼやけていくのを感じた．");
+#endif
 
 		/* Blessed amnesia makes you forget lycanthropy, sickness */
 		if (otmp->blessed) {
 		    if (u.ulycn >= LOW_PM && !Race_if(PM_HUMAN_WEREWOLF)) {
+#if 0 /*JP*/
 			You("forget your affinity to %s!",
 					makeplural(mons[u.ulycn].mname));
+#else
+			You("%sへの親近感を忘れ去った！",
+					jtrns_mon(mons[u.ulycn].mname));
+#endif
 			if (youmonst.data == &mons[u.ulycn])
 			    you_unwere(FALSE);
 			u.ulycn = NON_PM;	/* cure lycanthropy */
@@ -511,7 +666,10 @@
 		break;
 	case POT_WATER:
 		if(!otmp->blessed && !otmp->cursed) {
+/*JP
 		    pline("This tastes like water.");
+*/
+		    pline("水のような味がする．");
 		    u.uhunger += rnd(10);
 		    newuhs(FALSE);
 		    break;
@@ -520,25 +678,40 @@
 		if(is_undead(youmonst.data) || is_demon(youmonst.data) ||
 				u.ualign.type == A_CHAOTIC) {
 		    if(otmp->blessed) {
+/*JP
 			pline("This burns like acid!");
+*/
+			pline("酸のように舌がひりひりする！");
 			exercise(A_CON, FALSE);
 			if (u.ulycn >= LOW_PM && !Race_if(PM_HUMAN_WEREWOLF)) {
+/*JP
 			    Your("affinity to %s disappears!",
+*/
+			    Your("%sへの親近感はなくなった！",
 				 makeplural(mons[u.ulycn].mname));
 			    if (youmonst.data == &mons[u.ulycn])
 				you_unwere(FALSE);
 			    u.ulycn = NON_PM;	/* cure lycanthropy */
 			}
+/*JP
 			losehp(d(6,6), "potion of holy water", KILLED_BY_AN);
+*/
+			losehp(d(2,6), "聖水で", KILLED_BY_AN);
 		    } else if(otmp->cursed) {
+/*JP
 			You_feel("quite proud of yourself.");
+*/
+			You("自尊心を感じた．");
 			healup(d(6,6),0,0,0);
 			if (u.ulycn >= LOW_PM && !Upolyd) you_were();
 			exercise(A_CON, TRUE);
 		    }
 		} else {
 		    if(otmp->blessed) {
+/*JP
 			You_feel("full of awe.");
+*/
+			You("畏怖の念にかられた．");
 			if(u.ualign.type == A_LAWFUL) healup(d(6,6),0,0,0);                        
 			make_sick(0L, (char *) 0, TRUE, SICK_ALL);
 			exercise(A_WIS, TRUE);
@@ -549,11 +722,21 @@
 			/* make_confused(0L,TRUE); */
 		    } else {
 			if(u.ualign.type == A_LAWFUL) {
+/*JP
 			    pline("This burns like acid!");
+*/
+			    pline("酸のように舌がひりひりする！");
+#if 0 /*JP*/
 			    losehp(d(6,6), "potion of unholy water",
 				KILLED_BY_AN);
+#else
+			    losehp(d(2,6), "不浄な水で", KILLED_BY_AN);
+#endif
 			} else
+/*JP
 			    You_feel("full of dread.");
+*/
+			    You("恐怖の念にかられた．");
 			if (u.ulycn >= LOW_PM && !Upolyd) you_were();
 			exercise(A_CON, FALSE);
 		    }
@@ -561,9 +744,15 @@
 		break;
 	case POT_BOOZE:
 		unkn++;
+#if 0 /*JP*/
 		pline("Ooph!  This tastes like %s%s!",
 		      otmp->odiluted ? "watered down " : "",
 		      Hallucination ? "dandelion wine" : "liquid fire");
+#else
+		pline("うぇっぷ！これは%s%sのような味がする！",
+		      otmp->odiluted ? "水で薄めた" : "",
+		      Hallucination ? "タンポポワイン" : "燃料オイル");
+#endif
 		if (!otmp->blessed)
 		    make_confused(itimeout_incr(HConfusion, d(3,8)), FALSE);
 		/* the whiskey makes us feel better */
@@ -572,32 +761,50 @@
 		newuhs(FALSE);
 		exercise(A_WIS, FALSE);
 		if(otmp->cursed) {
+/*JP
 			You("pass out.");
+*/
+			You("気絶した．");
 			multi = -rnd(15);
+/*JP
 			nomovemsg = "You awake with a headache.";
+*/
+			nomovemsg = "目がさめたが頭痛がする．";
 		}
 		break;
 	case POT_ENLIGHTENMENT:
 		if(otmp->cursed) {
 			unkn++;
+/*JP
 			You("have an uneasy feeling...");
+*/
+			You("不安な気持になった．．．");
 			exercise(A_WIS, FALSE);
 		} else {
 			if (otmp->blessed) {
 				(void) adjattrib(A_INT, 1, FALSE);
 				(void) adjattrib(A_WIS, 1, FALSE);
 			}
+/*JP
 			You_feel("self-knowledgeable...");
+*/
+			You("自分自身が判るような気がした．．．");
 			display_nhwindow(WIN_MESSAGE, FALSE);
 			enlightenment(0);
+/*JP
 			pline_The("feeling subsides.");
+*/
+			pline("その感じはなくなった．");
 			exercise(A_WIS, TRUE);
 		}
 		break;
 	case SPE_INVISIBILITY:
 		/* spell cannot penetrate mummy wrapping */
 		if (BInvis && uarmc->otyp == MUMMY_WRAPPING) {
+/*JP
 			You_feel("rather itchy under your %s.", xname(uarmc));
+*/
+			You("%sの下がムズムズした．", xname(uarmc));
 			break;
 		}
 		/* FALLTHRU */
@@ -611,7 +818,10 @@
 		else incr_itimeout(&HInvis, rn1(15,31));
 		newsym(u.ux,u.uy);	/* update position */
 		if(otmp->cursed) {
+/*JP
 		    pline("For some reason, you feel your presence is known.");
+*/
+		    pline("なぜか，存在が知られているような気がした．");
 		    aggravate();
 		}
 		break;
@@ -623,14 +833,26 @@
 
 		unkn++;
 		if (otmp->cursed)
+#if 0 /*JP*/
 		    pline("Yecch!  This tastes %s.",
 			  Hallucination ? "overripe" : "rotten");
+#else
+		    pline("オェー！これは%sジュースの味がする．",
+			  Hallucination ? "熟しすぎた" : "腐った");
+#endif
 		else
+#if 0 /*JP*/
 		    pline(Hallucination ?
 		      "This tastes like 10%% real %s%s all-natural beverage." :
 				"This tastes like %s%s.",
 			  otmp->odiluted ? "reconstituted " : "",
 			  fruitname(TRUE));
+#else
+		    pline(Hallucination ?
+			   "10%%%sの純自然飲料のような味がする．" :
+			   "%s%sジュースのような味がする．",
+			  otmp->odiluted ? "成分調整された" : "", pl_fruit);
+#endif
 		if (otmp->otyp == POT_FRUIT_JUICE) {
 		    u.uhunger += (otmp->odiluted ? 5 : 10) * (2 + bcsign(otmp));
 		    newuhs(FALSE);
@@ -650,24 +872,40 @@
 		see_monsters();	/* see invisible monsters */
 		newsym(u.ux,u.uy); /* see yourself! */
 		if (msg && !Blind) { /* Blind possible if polymorphed */
+/*JP
 		    You("can see through yourself, but you are visible!");
+*/
+		    You("透明である．しかし見えるようになった！");
 		    unkn--;
 		}
 		break;
 	    }
 	case POT_PARALYSIS:
 		if (Free_action)
+/*JP
 		    You("stiffen momentarily.");
+*/
+		    You("一瞬動けなくなった．");             
 		else {
 		    if (Levitation || Is_airlevel(&u.uz)||Is_waterlevel(&u.uz))
+/*JP
 			You("are motionlessly suspended.");
+*/
+			You("空中で動けなくなった．");
 #ifdef STEED
 		    else if (u.usteed)
+/*JP
 			You("are frozen in place!");
+*/
+			You("その場で動けなくなった！");
 #endif
 		    else
+#if 0 /*JP*/
 			Your("%s are frozen to the %s!",
 			     makeplural(body_part(FOOT)), surface(u.ux, u.uy));
+#else
+			You("動けなくなった！");
+#endif
 		    nomul(-(rn1(10, 25 - 12*bcsign(otmp))));
 		    nomovemsg = You_can_move_again;
 		    exercise(A_DEX, FALSE);
@@ -675,9 +913,15 @@
 		break;
 	case POT_SLEEPING:
 		if(Sleep_resistance || Free_action)
+/*JP
 		    You("yawn.");
+*/
+		    You("あくびをした．");
 		else {
+/*JP
 		    You("suddenly fall asleep!");
+*/
+		    pline("突然眠ってしまった！");
 		    fall_asleep(-rn1(10, 25 - 12*bcsign(otmp)), TRUE);
 		}
 		break;
@@ -704,7 +948,10 @@
 			}
 		    }
 		    see_monsters();
+/*JP
 		    if (unkn) You_feel("lonely.");
+*/
+		    if (unkn) You("心細くなった．");
 		    break;
 		}
 		if (monster_detect(otmp, 0))
@@ -718,21 +965,41 @@
 		exercise(A_WIS, TRUE);
 		break;
 	case POT_SICKNESS:
+/*JP
 		pline("Yecch!  This stuff tastes like poison.");
+*/
+		pline("ウェー！毒のような味がする．");
 		if (otmp->blessed) {
+#if 0 /*JP*/
 		    pline("(But in fact it was mildly stale %s.)",
 			  fruitname(TRUE));
+#else
+		    pline("(しかし実際それは少し古くなった%s．)",
+			  fruitname(TRUE));
+#endif
 		    if (!Role_if(PM_HEALER)) {
 			/* NB: blessed otmp->fromsink is not possible */
+/*JP
 			losehp(1, "mildly contaminated potion", KILLED_BY_AN);
+*/
+			losehp(1, "病気に汚染された薬で", KILLED_BY_AN);
 		    }
 		} else {
 		    if(Poison_resistance)
+#if 0 /*JP*/
 			pline(
 			  "(But in fact it was biologically contaminated %s.)",
 			      fruitname(TRUE));
+#else
+			pline(
+			  "(しかし実際それは生物学的に汚染された%sだ．)",
+			      fruitname(TRUE));
+#endif
 		    if (Role_if(PM_HEALER))
+/*JP
 			pline("Fortunately, you have been immunized.");
+*/
+			pline("幸運なことに，あなたは免疫がある．");
 		    else {
 			int typ = rn2(A_MAX);
 
@@ -745,26 +1012,41 @@
 			if(!Poison_resistance) {
 			    if (otmp->fromsink)
 				losehp(rnd(10)+5*!!(otmp->cursed),
+/*JP
 				       "contaminated tap water", KILLED_BY);
+*/
+				       "疫病に汚染された水で", KILLED_BY_AN);
 			    else
 				losehp(rnd(10)+5*!!(otmp->cursed),
+/*JP
 				       "contaminated potion", KILLED_BY_AN);
+*/
+				       "疫病に汚染された薬で", KILLED_BY_AN);
 			}
 			exercise(A_CON, FALSE);
 		    }
 		}
 		if(Hallucination) {
+/*JP
 			You("are shocked back to your senses!");
+*/
+			You("五感に衝撃を受けた！");
 			(void) make_hallucinated(0L,FALSE,0L);
 		}
 		break;
 	case POT_CONFUSION:
 		if(!Confusion) {
 		    if (Hallucination) {
+/*JP
 			pline("What a trippy feeling!");
+*/
+			pline("なんかヘロヘロする！");
 			unkn++;
 		    } else
+/*JP
 			pline("Huh, What?  Where am I?");
+*/
+			pline("ほえ？私は誰？");
 		} else	nothing++;
 		make_confused(itimeout_incr(HConfusion,
 					    rn1(7, 16 - 8 * bcsign(otmp))),
@@ -775,7 +1057,10 @@
 		if (otmp->cursed)
 			nothing++;
 		else if (!BClairvoyant) {
+/*JP
 			if (Hallucination) pline("Dude! See-through walls!");
+*/
+			if (Hallucination) pline("見てみなよ！壁がシースルーだ！");
 			do_vicinity_map();
 		}
 		if (otmp->blessed)
@@ -783,26 +1068,55 @@
 		break;
 	case POT_ESP:
 	{
+#if 0 /*JP*/
 		char *mod = (char *) 0;
+#else
+		char mod = 0 ;
+#endif
 
 
 		/* KMH -- handle cursed, blessed */
 		if (otmp->cursed) {
+#if 0 /*JP*/
 			if (HTelepat) mod = "less ";
+#else
+			if (HTelepat) mod = -1;
+#endif
 			else unkn++;
 			HTelepat = 0;
 		} else if (otmp->blessed) {
+#if 0 /*JP*/
 			mod = "fully ";
+#else
+			mod = 2;
+#endif
 			incr_itimeout(&HTelepat, rn1(100, 200));
 			HTelepat |= FROMOUTSIDE;
 		} else {
+#if 0 /*JP*/
 			mod = "more ";
+#else
+			mod = 1;
+#endif
 			incr_itimeout(&HTelepat, rn1(50, 100));
 		}
 		if (mod)
+#if 0 /*JP*/
 			You_feel(Hallucination ?
 				"%sin touch with the cosmos." :
 				"%smentally acute.", mod);
+#else
+			if ( Hallucination )
+				You_feel("宇宙と%sような気がした．",
+					(mod==1)?"接触している":
+					(mod==2)?"完全に一体化している":
+					"の交信が途絶えた");
+			else
+				You_feel("精神的な鋭敏さが%sような気がした．",
+					(mod==1)?"強まった":
+					(mod==2)?"完全になった":
+					"消えてしまった");
+#endif
 		see_monsters();
 		break;
 	}
@@ -820,11 +1134,18 @@
 	case POT_INVULNERABILITY:
 		incr_itimeout(&Invulnerable, rn1(4, 8 + 4 * bcsign(otmp)));
 		You_feel(Hallucination ?
+#if 0 /*JP*/
 				"like a super-duper hero!" : "invulnerable!");
+#else
+				"極上のヒーローのようだ！" : "無敵になった気がした！");
+#endif
 		break;
 	case POT_GAIN_ABILITY:
 		if(otmp->cursed) {
+/*JP
 		    pline("Ulch!  That potion tasted foul!");
+*/
+		    pline("ウェ！悪臭がする！");
 		    unkn++;
 		} else if (Fixed_abil) {
 		    nothing++;
@@ -853,10 +1174,18 @@
 		} /* and fall through */
 	case SPE_HASTE_SELF:
 		if (!Very_fast)
+#if 0 /*JP*/
 			You("are suddenly moving %sfaster.",
 				Fast ? "" : "much ");
+#else
+			You("突然%s速く移動できるようになった．",
+				Fast ? "" : "とても");
+#endif
 		else {
+/*JP
 			Your("%s get new energy.",
+*/
+			pline("%sにエネルギーが注ぎこまれるような感じがした",
 				makeplural(body_part(LEG)));
 			unkn++;
 		}
@@ -876,7 +1205,10 @@
 			/* they went up a level */
 			if((ledger_no(&u.uz) == 1 && u.uhave.amulet) ||
 				Can_rise_up(u.ux, u.uy, &u.uz)) {
+/*JP
 			    const char *riseup ="rise up, through the %s!";
+*/
+			    const char *riseup ="%sを突き抜けた！";
 			    /* [ALI] Special handling for quaffing potions
 			     * off the floor (otmp won't be valid after
 			     * we change levels otherwise).
@@ -898,13 +1230,19 @@
 
 				get_level(&newlevel, newlev);
 				if(on_level(&newlevel, &u.uz)) {
+/*JP
 				    pline("It tasted bad.");
+*/
+				    pline("とてもまずい．");
 				    break;
 				} else You(riseup, ceiling(u.ux,u.uy));
 				goto_level(&newlevel, FALSE, FALSE, FALSE);
 			    }
 			}
+/*JP
 			else You("have an uneasy feeling.");
+*/
+			else You("不安な気持になった．");
 			break;
 		}
 		pluslvl(FALSE);
@@ -915,13 +1253,19 @@
 			u.uexp = rndexp(TRUE);
 		break;
 	case POT_HEALING:
+/*JP
 		You_feel("better.");
+*/
+		You("気分がよくなった．");
 		healup(d(5,6) + 5 * bcsign(otmp),
 		       !otmp->cursed ? 1 : 0, 1+1*!!otmp->blessed, !otmp->cursed);
 		exercise(A_CON, TRUE);
 		break;
 	case POT_EXTRA_HEALING:
+/*JP
 		You_feel("much better.");
+*/
+		You("気分がとてもよくなった．");
 		healup(d(6,8) + 5 * bcsign(otmp),
 		       otmp->blessed ? 5 : !otmp->cursed ? 2 : 0,
 		       !otmp->cursed, TRUE);
@@ -930,7 +1274,10 @@
 		exercise(A_STR, TRUE);
 		break;
 	case POT_FULL_HEALING:
+/*JP
 		You_feel("completely healed.");
+*/
+		You("完全に回復した．");
 		healup(400, 4+4*bcsign(otmp), !otmp->cursed, TRUE);
 		/* Restore one lost level if blessed */
 		if (otmp->blessed && u.ulevel < u.ulevelmax) {
@@ -957,12 +1304,24 @@
 	   && (u.ux != sstairs.sx || u.uy != sstairs.sy || !sstairs.up)
 	   && (!xupladder || u.ux != xupladder || u.uy != yupladder)
 	) {
+#if 0 /*JP*/
 					You("hit your %s on the %s.",
 						body_part(HEAD),
 						ceiling(u.ux,u.uy));
+#else
+					You("%sを%sにぶつけた．",
+						body_part(HEAD),
+						ceiling(u.ux,u.uy));
+#endif
+#if 0 /*JP*/
 					losehp(uarmh ? 1 : rnd(10),
 						"colliding with the ceiling",
 						KILLED_BY);
+#else
+					losehp(uarmh ? 1 : rnd(10),
+						"天井に頭をぶつけて",
+						KILLED_BY);
+#endif
 				} else (void) doup();
 			}
 		} else
@@ -976,9 +1335,15 @@
 	case POT_GAIN_ENERGY:			/* M. Stephenson */
 		{       register int num , num2;
 			if(otmp->cursed)
+/*JP
 			    You_feel("lackluster.");
+*/
+			    You("意気消沈した．");
 			else
+/*JP
 			    pline("Magical energies course through your body.");
+*/
+			    pline("魔法のエネルギーがあなたの体に満ちた．");
 			num = rnd(25) + 5 * otmp->blessed + 10;                        
 			num2 = rnd(2) + 2 * otmp->blessed + 1;
 			u.uenmax += (otmp->cursed) ? -num2 : num2;
@@ -999,36 +1364,64 @@
 
 			if (otmp->lamplit) {
 			    if (likes_fire(youmonst.data)) {
+/*JP
 				pline("Ahh, a refreshing drink.");
+*/
+				pline("わーお，生き返る．");
 				good_for_you = TRUE;
 			    } else {
+/*JP
 				You("burn your %s.", body_part(FACE));
+*/
+				Your("%sは黒焦げになった．", body_part(FACE));
 				losehp(d(Fire_resistance ? 1 : 3, 4),
+/*JP
 				       "burning potion of oil", KILLED_BY_AN);
+*/
+				       "燃えている油を飲んで", KILLED_BY_AN);
 			    }
 			} else if(otmp->cursed)
+/*JP
 			    pline("This tastes like castor oil.");
+*/
+			    pline("ひまし油のような味がする．");
 			else
+/*JP
 			    pline("That was smooth!");
+*/
+			    pline("口あたりがよい！");
 			exercise(A_WIS, good_for_you);
 		}
 		break;
 	case POT_ACID:
 		if (Acid_resistance)
 			/* Not necessarily a creature who _likes_ acid */
+/*JP
 			pline("This tastes %s.", Hallucination ? "tangy" : "sour");
+*/
+			pline("%s味がする．", Hallucination ? "ぴりっとした" : "酸の");
 		else {
+#if 0 /*JP*/
 			pline("This burns%s!", otmp->blessed ? " a little" :
 					otmp->cursed ? " a lot" : " like acid");
 			losehp(d(otmp->cursed ? 2 : 1, otmp->blessed ? 4 : 8),
 					"potion of acid", KILLED_BY_AN);
+#else
+			pline("%s焦げた！", otmp->blessed ? "少し" :
+					otmp->cursed ? "すごく" : "");
+			losehp(d(otmp->cursed ? 2 : 1, otmp->blessed ? 4 : 8),
+					"酸の薬で", KILLED_BY_AN);
+#endif
 			exercise(A_CON, FALSE);
 		}
 		if (Stoned) fix_petrification();
 		unkn++; /* holy/unholy water can burn like acid too */
 		break;
 	case POT_POLYMORPH:
+/*JP
 		You_feel("a little %s.", Hallucination ? "normal" : "strange");
+*/
+		You("少し%sな感じがした．", Hallucination ? "普通" : "変");
 		if (!Unchanging) polyself(FALSE);
 		break;
 	case POT_BLOOD:
@@ -1038,12 +1431,23 @@
 		if (maybe_polyd(is_vampire(youmonst.data), Race_if(PM_VAMPIRE))) {
 		    violated_vegetarian();
 		    if (otmp->cursed)
+#if 0 /*JP*/
 			pline("Yecch!  This %s.", Hallucination ?
 			"liquid could do with a good stir" : "blood has congealed");
+#else
+			pline("ゲェー！こりゃ%s．", Hallucination ?
+			"よくかき混ぜないとダメだ" : "血が固まっちまってる");
+#endif
 		    else pline(Hallucination ?
+#if 0 /*JP*/
 		      "The %s liquid stirs memories of home." :
 		      "The %s blood tastes delicious.",
 			  otmp->odiluted ? "watery" : "thick");
+#else
+		      "%s液体が故郷の記憶を呼び起こす．" :
+		      "%s血液は美味しい．",
+			  otmp->odiluted ? "水っぽい" : "濃い");
+#endif
 		    if (!otmp->cursed)
 			lesshungry((otmp->odiluted ? 1 : 2) *
 			  (otmp->otyp == POT_VAMPIRE_BLOOD ? 400 :
@@ -1064,8 +1468,13 @@
 		       duplicated "you feel guilty" messages */
 		    u.uconduct.unvegetarian++;
 		    if (u.ualign.type == A_LAWFUL || Role_if(PM_MONK)) {
+#if 0 /*JP*/
 			You_feel("%sguilty about drinking such a vile liquid.",
 				Role_if(PM_MONK) ? "especially " : "");
+#else
+			You("下劣なものを飲んでしまうことによる罪を%s感じた．",
+				Role_if(PM_MONK) ? "激しく" : "");
+#endif
 			u.ugangr++;
 			adjalign(-15);
 		    } else if (u.ualign.type == A_NEUTRAL)
@@ -1075,7 +1484,11 @@
 			u.mtimedone = 0;	/* "Permament" change */
 		} else {
 		    violated_vegetarian();
+#if 0 /*JP*/
 		    pline("Ugh.  That was vile.");
+#else
+		    pline("ウゲェー，こりゃ酷い．");
+#endif
 		    make_vomiting(Vomiting+d(10,8), TRUE);
 		}
 		break;
@@ -1086,6 +1499,24 @@
 	return(-1);
 }
 
+#ifdef	JPEXTENSION
+void
+make_totter(xtime, talk)
+long xtime;	/* nonzero if this is an attempt to turn on hallucination */
+boolean talk;
+{
+	const char *message = 0;
+
+	if (!xtime)
+	    message = "方向感覚が正常になった．";
+	else
+	    message = "方向感覚が麻痺した．";
+
+	set_itimeout(&Totter, xtime);
+	pline(message);
+}
+#endif
+
 void
 healup(nhp, nxtra, curesick, cureblind)
 	int nhp, nxtra;
@@ -1128,8 +1559,13 @@
 register const char *txt;
 {
 	if (flags.beginner || !txt)
+#if 0 /*JP*/
 		You("have a %s feeling for a moment, then it passes.",
 		Hallucination ? "normal" : "strange");
+#else
+		You("%s気分におそわれたが，すぐに消えさった．",
+		Hallucination ? "普通の" : "奇妙な");
+#endif
 	else
 		pline(txt);
 
@@ -1144,7 +1580,11 @@
 }
 
 const char *bottlenames[] = {
+#if 0 /*JP*/
 	"bottle", "phial", "flagon", "carafe", "flask", "jar", "vial"
+#else
+	"瓶","瑠璃瓶","一升瓶","水差し","フラスコ","壷","ガラス瓶"
+#endif
 };
 
 const char *
@@ -1166,24 +1606,42 @@
 
 	if(isyou) {
 		distance = 0;
+/*JP
 		pline_The("%s crashes on your %s and breaks into shards.",
+*/
+		pline("%sがあなたの%sの上で壊れ破片となった．",
 			botlnam, body_part(HEAD));
+/*JP
 		losehp(rnd(2), "thrown potion", KILLED_BY_AN);
+*/
+		losehp(rnd(2), "投げられた薬で", KILLED_BY_AN);
 	} else {
 		distance = distu(mon->mx,mon->my);
+/*JP
 		if (!cansee(mon->mx,mon->my)) pline("Crash!");
+*/
+		if (!cansee(mon->mx,mon->my)) pline("ガシャン！");
 		else {
 		    char *mnam = mon_nam(mon);
 		    char buf[BUFSZ];
 
 		    if(has_head(mon->data)) {
+/*JP
 			Sprintf(buf, "%s %s",
+*/
+			Sprintf(buf, "%sの%s",
 				s_suffix(mnam),
+/*JP
 				(notonhead ? "body" : "head"));
+*/
+				(notonhead ? "体" : "頭"));
 		    } else {
 			Strcpy(buf, mnam);
 		    }
+/*JP
 		    pline_The("%s crashes on %s and breaks into shards.",
+*/
+		    pline("%sが%sの上で壊れ破片となった．",
 			   botlnam, buf);
 		}
 		if(rn2(5) && mon->mhp > 1)
@@ -1192,7 +1650,10 @@
 
 	/* oil doesn't instantly evaporate */
 	if (obj->otyp != POT_OIL && cansee(mon->mx,mon->my))
+/*JP
 		pline("%s.", Tobjnam(obj, "evaporate"));
+*/
+		pline("%sは蒸発した．", xname(obj));
 
     if (isyou) {
 	switch (obj->otyp) {
@@ -1201,15 +1662,28 @@
 		    splatter_burning_oil(u.ux, u.uy);
 		break;
 	case POT_POLYMORPH:
+/*JP
 		You_feel("a little %s.", Hallucination ? "normal" : "strange");
+*/
+		You("%sな感じがした．", Hallucination ? "普通" : "変");
 		if (!Unchanging && !Antimagic) polyself(FALSE);
 		break;
 	case POT_ACID:
 		if (!Acid_resistance) {
+#if 0 /*JP*/
 		    pline("This burns%s!", obj->blessed ? " a little" :
 				    obj->cursed ? " a lot" : "");
+#else
+		    pline("%s燃えた！", obj->blessed ? "少し" :
+				    obj->cursed ? "はげしく" : "");
+#endif
+#if 0 /*JP*/
 		    losehp(d(obj->cursed ? 2 : 1, obj->blessed ? 4 : 8),
 				    "potion of acid", KILLED_BY_AN);
+#else
+		    losehp(d(obj->cursed ? 2 : 1, obj->blessed ? 4 : 8),
+				    "酸の薬", KILLED_BY_AN);
+#endif
 		}
 		break;
 	case POT_AMNESIA:
@@ -1229,7 +1703,10 @@
 		if (mon->data == &mons[PM_PESTILENCE]) goto do_illness;
 		angermon = FALSE;
 		if (canseemon(mon))
+/*JP
 			pline("%s looks better.", Monnam(mon));
+*/
+			pline("%sは気分がよくなったように見える．", Monnam(mon));
 		healup_mon(mon, d(5,6) + 5 * bcsign(obj),
 			!obj->cursed ? 1 : 0, 1+1*!!obj->blessed, !obj->cursed);
 		break;
@@ -1237,7 +1714,10 @@
 		if (mon->data == &mons[PM_PESTILENCE]) goto do_illness;
 		angermon = FALSE;
 		if (canseemon(mon))
+/*JP
 			pline("%s looks much better.", Monnam(mon));
+*/
+			pline("%sはとても気分がよくなったように見える．", Monnam(mon));
 		healup_mon(mon, d(6,8) + 5 * bcsign(obj),
 			obj->blessed ? 5 : !obj->cursed ? 2 : 0,
 			!obj->cursed, TRUE);
@@ -1249,7 +1729,10 @@
 	case POT_GAIN_ABILITY:
 		angermon = FALSE;
 		    if (canseemon(mon))
+/*JP
 			pline("%s looks sound and hale again.", Monnam(mon));
+*/
+			pline("%sは元気になったように見える．", Monnam(mon));
 		healup_mon(mon, 400, 5+5*!!(obj->blessed), !(obj->cursed), 1);
 		break;
 	case POT_SICKNESS:
@@ -1258,7 +1741,11 @@
 			   dmgtype(mon->data, AD_PEST) || /* won't happen, see prior goto */
 			   resists_poison(mon)) {
 		    if (canseemon(mon))
+#if 0 /*JP*/
 			pline("%s looks unharmed.", Monnam(mon));
+#else
+			pline("%sはなんともないようだ．", Monnam(mon));
+#endif
 		    break;
 		}
  do_illness:
@@ -1268,7 +1755,10 @@
 			mon->mhp /= 2;
 		if (mon->mhp > mon->mhpmax) mon->mhp = mon->mhpmax;
 		if (canseemon(mon))
+/*JP
 		    pline("%s looks rather ill.", Monnam(mon));
+*/
+		    pline("%sは病気っぽく見える．", Monnam(mon));
 		break;
 	case POT_CONFUSION:
 	case POT_BOOZE:
@@ -1288,7 +1778,10 @@
 	    if (resists_magm(mon)) {
                 shieldeff(mon->mx, mon->my);
 	    } else if (!resist (mon, POTION_CLASS, 0, NOTELL)) {
+/*JP
                 mon_poly(mon, your_fault, "%s changes!");
+*/
+		mon_poly(mon, your_fault, "%sは変化した！");
                 if (!Hallucination && canspotmon (mon))
                                 makeknown (POT_POLYMORPH);
 	    }
@@ -1300,7 +1793,10 @@
 	case POT_SLEEPING:
 		/* wakeup() doesn't rouse victims of temporary sleep */
 		if (sleep_monst(mon, rnd(12), POTION_CLASS)) {
+/*JP
 		    pline("%s falls asleep.", Monnam(mon));
+*/
+		    pline("%sは眠ってしまった．", Monnam(mon));
 		    slept_monst(mon);
 		}
 		break;
@@ -1330,8 +1826,13 @@
 		if (is_undead(mon->data) || is_demon(mon->data) ||
 			is_were(mon->data)) {
 		    if (obj->blessed) {
+#if 0 /*JP*/
 			pline("%s %s in pain!", Monnam(mon),
 			      is_silent(mon->data) ? "writhes" : "shrieks");
+#else
+			pline("%sは苦痛%s！", Monnam(mon),
+			      is_silent(mon->data) ? "に身もだえした" : "の叫び声をあげた");
+#endif
 			mon->mhp -= d(2,6);
 			if (mon->mhp < 1) {
 			    if (your_fault)
@@ -1344,7 +1845,10 @@
 		    } else if (obj->cursed) {
 			angermon = FALSE;
 			if (canseemon(mon))
+/*JP
 			    pline("%s looks healthier.", Monnam(mon));
+*/
+			    pline("%sはより元気になったように見える．", Monnam(mon));
 			mon->mhp += d(2,6);
 			if (mon->mhp > mon->mhpmax) mon->mhp = mon->mhpmax;
 			if (is_were(mon->data) && is_human(mon->data) &&
@@ -1357,9 +1861,15 @@
 		} else if(mon->data == &mons[PM_FLAMING_SPHERE] ||
 			mon->data == &mons[PM_IRON_GOLEM]) {
 		    if (canseemon(mon))
+#if 0 /*JP*/
 			pline("%s %s.", Monnam(mon),
 				mon->data == &mons[PM_IRON_GOLEM] ?
 				"rusts" : "flickers");
+#else
+			pline("%sは%s．", Monnam(mon),
+				mon->data == &mons[PM_IRON_GOLEM] ?
+				"錆びた" : "ちらついた");
+#endif
 		    mon->mhp -= d(1,6);
 		    if (mon->mhp < 1) {
 			if (your_fault)
@@ -1378,9 +1888,15 @@
 		    break;
 		case PM_FLAMING_SPHERE:
 		case PM_IRON_GOLEM:
+#if 0 /*JP*/
 		    if (canseemon(mon)) pline("%s %s.", Monnam(mon),
 			    monsndx(mon->data) == PM_IRON_GOLEM ?
 			    "rusts" : "flickers");
+#else
+		    if (canseemon(mon)) pline("%sは%s．", Monnam(mon),
+			    monsndx(mon->data) == PM_IRON_GOLEM ?
+			    "錆びた" : "ちらついた");
+#endif
 		    mon->mhp -= d(1,6);
 		    if (mon->mhp < 1)
 			if (your_fault)
@@ -1393,41 +1909,67 @@
 		case PM_WIZARD_OF_YENDOR:
 		    if (your_fault) {
 			if (canseemon(mon)) 
+#if 0 /*JP*/
 			    pline("%s laughs at you!", Monnam(mon));
+#else
+			    pline("%sはあなたに向かって笑いかけた！", Monnam(mon));
+#endif
 			forget(1);
 		    }
 		    break;
 		case PM_MEDUSA:
 		    if (canseemon(mon))
+/*JP
 			pline("%s looks like %s's having a bad hair day!", 
+*/
+			pline("%sは整髪料の質の悪さを気にしているようだ！", 
 					Monnam(mon), mhe(mon));
 		    break;
 		case PM_CROESUS:
 		    if (canseemon(mon))
+#if 0 /*JP*/
 		        pline("%s says: 'My gold! I must count my gold!'", 
+#else
+		        pline("『ワシの金！ワシの金を数えなければ！』と%sはつぶやいた．", 
+#endif
 					Monnam(mon));
 		    break;
 		case PM_DEATH:
  		    if (canseemon(mon))
+/*JP
 		        pline("%s pauses, then looks at you thoughtfully!", 
+*/
+		        pline("%sは足を止め，あなたをつくづくと見つめた．！", 
 					Monnam(mon));
 		    break;
 		case PM_FAMINE:
 		    if (canseemon(mon))
+/*JP
 		        pline("%s looks unusually hungry!", Monnam(mon));
+*/
+		        pline("%sは異常に空腹なように見える！", Monnam(mon));
 		    break;
 		case PM_PESTILENCE:
 		    if (canseemon(mon))
+/*JP
 		        pline("%s looks unusually well!", Monnam(mon));
+*/
+		        pline("%sは異常に元気そうに見える！", Monnam(mon));
 		    break;
 		default:
 		    if (mon->data->msound == MS_NEMESIS && canseemon(mon)
 				    && your_fault)
+/*JP
 			pline("%s curses your ancestors!", Monnam(mon));
+*/
+			pline("%sはあなたの先祖を呪った！", Monnam(mon));
 		    else if (mon->isshk) {
 			angermon = FALSE;
 			if (canseemon(mon))
+/*JP
 			    pline("%s looks at you curiously!", 
+*/
+			    pline("%sはあなたを好奇のまなざしで見つめた．", 
 					    Monnam(mon));
 			make_happy_shk(mon, FALSE);
 		    } else if (!is_covetous(mon->data) && !rn2(4) &&
@@ -1436,10 +1978,16 @@
 			if (canseemon(mon)) {
 			    if (mon->msleeping) {
 				wakeup(mon);
+/*JP
 				pline("%s wakes up looking bewildered!", 
+*/
+				pline("%sは目覚めたが戸惑っているようだ！", 
 						Monnam(mon));
 			    } else
+/*JP
 				pline("%s looks bewildered!", Monnam(mon));
+*/
+				pline("%sは戸惑っているようだ！", Monnam(mon));
 			    mon->mpeaceful = TRUE;
 			    mon->mtame = FALSE;	
 			}
@@ -1462,8 +2010,13 @@
 	/* KMH, balance patch -- added */
 	case POT_ACID:
 		if (!resists_acid(mon) && !resist(mon, POTION_CLASS, 0, NOTELL)) {
+#if 0 /*JP*/
 		    pline("%s %s in pain!", Monnam(mon),
 			  is_silent(mon->data) ? "writhes" : "shrieks");
+#else
+		    pline("%sは苦痛%s！", Monnam(mon),
+			  is_silent(mon->data) ? "に身もだえした" : "の叫び声をあげた");
+#endif
 		    mon->mhp -= d(obj->cursed ? 2 : 1, obj->blessed ? 4 : 8);
 		    if (mon->mhp < 1) {
 			if (your_fault)
@@ -1514,12 +2067,19 @@
 	case POT_GAIN_ABILITY:
 		if(obj->cursed) {
 		    if (!breathless(youmonst.data))
+/*JP
 			pline("Ulch!  That potion smells terrible!");
+*/
+			pline("ウゲェ！薬はものすごい匂いがする！");
 		    else if (haseyes(youmonst.data)) {
+#if 0 /*JP*/
 			int numeyes = eyecount(youmonst.data);
 			Your("%s sting%s!",
 			     (numeyes == 1) ? body_part(EYE) : makeplural(body_part(EYE)),
 			     (numeyes == 1) ? "s" : "");
+#else
+			Your("%sがずきずきする！", body_part(EYE));
+#endif
 		    }
 		    break;
 		} else {
@@ -1560,49 +2120,79 @@
 		}
 		break;
 	case POT_HALLUCINATION:
+/*JP
 		You("have a momentary vision.");
+*/
+		You("一瞬幻影につつまれた．");
 		break;
 	case POT_CONFUSION:
 	case POT_BOOZE:
 		if(!Confusion)
+/*JP
 			You_feel("somewhat dizzy.");
+*/
+			You("めまいを感じた．");
 		make_confused(itimeout_incr(HConfusion, rnd(5)), FALSE);
 		break;
 	case POT_INVISIBILITY:
 		if (!Blind && !Invis) {
 		    kn++;
+#if 0 /*JP*/
 		    pline("For an instant you %s!",
 			See_invisible ? "could see right through yourself"
 			: "couldn't see yourself");
+#else
+		    pline("一瞬自分自身が%s見えなくなった！",
+			See_invisible ? "正しく"
+			: "");
+#endif
 		}
 		break;
 	case POT_PARALYSIS:
 		kn++;
 		if (!Free_action) {
+/*JP
 		    pline("%s seems to be holding you.", Something);
+*/
+		    pline("%sがあなたをつかまえているような気がした．", Something);
 		    nomul(-rnd(5));
 		    nomovemsg = You_can_move_again;
 		    exercise(A_DEX, FALSE);
+/*JP
 		} else You("stiffen momentarily.");
+*/
+		} else You("一瞬硬直した．");
 		break;
 	case POT_SLEEPING:
 		kn++;
 		if (!Free_action && !Sleep_resistance) {
+/*JP
 		    You_feel("rather tired.");
+*/
+		    You("すこし疲れた．");
 		    nomul(-rnd(5));
 		    nomovemsg = You_can_move_again;
 		    exercise(A_DEX, FALSE);
+/*JP
 		} else You("yawn.");
+*/
+		} else You("あくびをした．");
 		break;
 	case POT_SPEED:
+/*JP
 		if (!Fast) Your("knees seem more flexible now.");
+*/
+		if (!Fast) Your("膝はよりすばやく動くようになった．");
 		incr_itimeout(&HFast, rnd(5));
 		exercise(A_DEX, TRUE);
 		break;
 	case POT_BLINDNESS:
 		if (!Blind && !u.usleep) {
 		    kn++;
+/*JP
 		    pline("It suddenly gets dark.");
+*/
+		    pline("突然暗くなった．");
 		}
 		make_blinded(itimeout_incr(Blinded, rnd(5)), FALSE);
 		if (!Blind && !u.usleep) Your(vision_clears);
@@ -1623,13 +2213,28 @@
 		if(u.umonnum == PM_GREMLIN)
 		    (void)split_mon(&youmonst, (struct monst *)0);
 		else if(u.umonnum == PM_FLAMING_SPHERE) {
+/*JP
 		    You("flicker!");
+*/
+		    You("ちらついた！");
+/*JP
 		    losehp(d(1,6),"potion of amnesia", KILLED_BY_AN);
+*/
+		    losehp(d(1,6),"記憶喪失の薬で", KILLED_BY_AN);
 		} else if(u.umonnum == PM_IRON_GOLEM) {
+/*JP
 		    You("rust!");
+*/
+		    You("錆びた！");
+/*JP
 		    losehp(d(1,6),"potion of amnesia", KILLED_BY_AN);
+*/
+		    losehp(d(1,6),"記憶喪失の薬で", KILLED_BY_AN);
 		}
+/*JP
 		You_feel("dizzy!");
+*/
+		You("めまいを感じた！");
 		forget(1 + rn2(5));
 		break;
 	case POT_ACID:
@@ -1640,8 +2245,12 @@
 	case POT_VAMPIRE_BLOOD:
 		if (maybe_polyd(is_vampire(youmonst.data), Race_if(PM_VAMPIRE))) {
 		    exercise(A_WIS, FALSE);
+/*JP
 		    You_feel("a %ssense of loss.",
 		      obj->otyp == POT_VAMPIRE_BLOOD ? "terrible " : "");
+*/
+		    You("%s喪失感におそわれた．",
+		      obj->otyp == POT_VAMPIRE_BLOOD ? "恐ろしい" : "");
 		} else
 		    exercise(A_CON, FALSE);
 		break;
@@ -1902,9 +2511,17 @@
     boolean dummy = FALSE;
 
     if (!used) used = &dummy;
+#if 0 /*JP*/
     if (!*used) Your("%s for a moment.", aobjnam(obj, "sparkle"));
+#else
+    if (!*used) Your("%sは一瞬泡立った．", xname(obj));
+#endif
     if(obj->unpaid && costly_spot(u.ux, u.uy) && !*used) {
+#if 0 /*JP*/
 	You("damage it, you pay for it.");
+#else
+	You("それの質を落してしまったため，賠償せねばならない．");
+#endif
 	bill_dummy_object(obj);
     }
     *used = TRUE;
@@ -1944,7 +2561,11 @@
 	    case POTION_CLASS:
 		if (obj->otyp == POT_WATER && amnesia) {
 		    if (amnesia) {
+#if 0 /*JP*/
 			Your("%s to sparkle.", aobjnam(obj,"start"));
+#else
+			Your("%sは泡立ちはじめた．", xname(obj));
+#endif
 			obj->odiluted 	= 0;
 			obj->otyp 	= POT_AMNESIA;
 			used 		= TRUE;
@@ -1955,7 +2576,11 @@
 
 		/* Diluting a !ofAmnesia just gives water... */
 		if (obj->otyp == POT_AMNESIA) { 
+#if 0 /*JP*/
 			Your("%s flat.", aobjnam(obj,"become"));
+#else
+			Your("%sは気が抜けてきた．", xname(obj));
+#endif
 			obj->odiluted = 0;
 			obj->otyp = POT_WATER;
 			used = TRUE;
@@ -1964,12 +2589,24 @@
 
 		/* KMH -- Water into acid causes an explosion */
 		if (obj->otyp == POT_ACID) {
+/*JP
 			pline("It boils vigorously!");
+*/
+			pline("激しく沸騰した！");
+/*JP
 			You("are caught in the explosion!");
+*/
+			You("爆発に巻き込まれた！");
+/*JP
 			losehp(Acid_resistance ? rnd(5) : rnd(10),
 			       "elementary chemistry", KILLED_BY);
+*/
+			losehp(rnd(10), "初等化学実験で", KILLED_BY);
 			if (amnesia) {
+/*JP
 			    You_feel("a momentary lapse of reason!");
+*/
+			    You("一瞬，爆発の原因を失念してしまった！");
 			    forget(2 + rn2(3));
 			}
 			makeknown(obj->otyp);
@@ -1977,12 +2614,24 @@
 			break;
 		}
 		if (amnesia)
+#if 0 /*JP*/
 		    pline("%s %s completely.", Your_buf, aobjnam(obj,"dilute"));
+#else
+		    pline("%s%sは完全に薄まった．", Your_buf, xname(obj));
+#endif
 		else
+#if 0 /*JP*/
 		    pline("%s %s%s.", Your_buf, aobjnam(obj,"dilute"),
 		      		obj->odiluted ? " further" : "");
+#else
+		    pline("%s%sは%s薄まった．", Your_buf, xname(obj),
+			  obj->odiluted ? "さらに" : "");
+#endif
 		if(obj->unpaid && costly_spot(u.ux, u.uy)) {
+/*JP
 		    You("dilute it, you pay for it.");
+*/
+		    You("薄めてしまった，賠償せねばならない．");
 		    bill_dummy_object(obj);
 		}
 		if (obj->odiluted || amnesia) {
@@ -2004,12 +2653,19 @@
 #endif
 		    ) {
 			if (!Blind) {
+#if 0 /*JP*/
 				boolean oq1 = obj->quan == 1L;
 				pline_The("scroll%s %s.",
 					  oq1 ? "" : "s", otense(obj, "fade"));
+#else
+				pline("巻物の文字は薄れた．");
+#endif
 			}
 			if(obj->unpaid && costly_spot(u.ux, u.uy)) {
+/*JP
 			    You("erase it, you pay for it.");
+*/
+			    You("文字を消してしまった，賠償せねばならない．");
 			    bill_dummy_object(obj);
 			}
 			obj->otyp = SCR_BLANK_PAPER;
@@ -2020,17 +2676,27 @@
 	    case SPBOOK_CLASS:
 		if (obj->otyp != SPE_BLANK_PAPER) {
 			if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
+/*JP
 	pline("%s suddenly heats up; steam rises and it remains dry.",
+*/
+	pline("%sは突然熱くなり，蒸気がたちこめ，乾いてしまった．",
 				The(xname(obj)));
 			} else {
 			    if (!Blind) {
+#if 0 /*JP*/
 				    boolean oq1 = obj->quan == 1L;
 				    pline_The("spellbook%s %s.",
 					oq1 ? "" : "s", otense(obj, "fade"));
+#else
+				    pline("魔法書の文字は薄れた．");
+#endif
 			    }
 			    if(obj->unpaid) {
 				subfrombill(obj, shop_keeper(*u.ushops));
+/*JP
 			        You("erase it, you pay for it.");
+*/
+			        You("文字を消してしまった，賠償せねばならない．");
 			        bill_dummy_object(obj);
 			    }
 			    obj->otyp = SPE_BLANK_PAPER;
@@ -2112,12 +2778,20 @@
 		}
 		if (!obj->oerodeproof && is_rustprone(obj) &&
 		    (obj->oeroded < MAX_ERODE) && !rn2(2)) {
+#if 0 /*JP*/
 			pline("%s %s some%s.",
 			      Your_buf, aobjnam(obj, "rust"),
 			      obj->oeroded ? " more" : "what");
+#else
+			pline("%s%sは%s錆びた", Your_buf, xname(obj),
+			      obj->oeroded ? "さらに" : "");
+#endif
 			obj->oeroded++;
 			if(obj->unpaid && costly_spot(u.ux, u.uy) && !used) {
+/*JP
 			    You("damage it, you pay for it.");
+*/
+			    You("価値を下げてしまった，賠償せねばならない．");
 			    bill_dummy_object(obj);
 			}
 			used = TRUE;
@@ -2146,7 +2820,10 @@
 	if (used) 
 	    update_inventory();
 	else 
+/*JP
 	    pline("%s %s wet.", Your_buf, aobjnam(obj,"get"));
+*/
+	pline("%s%sは濡れた．", Your_buf, xname(obj));
 
 	return used;
 }
@@ -2518,10 +3195,16 @@
 			    !costly_spot(u.ux, u.uy))
 			make_angry_shk(shkp, ox, oy);
 		    else {
+/*JP
 			pline("%s gets angry!", Monnam(shkp));
+*/
+			pline("%sは激怒した！", Monnam(shkp));
 			hot_pursuit(shkp);
 		    }
+/*JP
 		} else Norep("%s is furious!", Monnam(shkp));
+*/
+		} else Norep("%sは怒った！", Monnam(shkp));
 		otyp2 = obj->otyp;
 		obj->otyp = otyp;
 		/*
@@ -2598,24 +3281,36 @@
 
 
 	allowall[0] = ALL_CLASSES; allowall[1] = '\0';
+/*JP
 	if(!(obj = getobj(allowall, "dip")))
+*/
+	if(!(obj = getobj(allowall, "浸す")))
 		return(0);
 
 	here = levl[u.ux][u.uy].typ;
 	/* Is there a fountain to dip into here? */
 	if (IS_FOUNTAIN(here)) {
+/*JP
 		if(yn("Dip it into the fountain?") == 'y') {
+*/
+		if(yn("泉に浸しますか？") == 'y') {
 			dipfountain(obj);
 			return(1);
 		}
 	} else if (IS_TOILET(here)) {        
+/*JP
 		if(yn("Dip it into the toilet?") == 'y') {
+*/
+		if(yn("トイレに浸しますか？") == 'y') {
 			diptoilet(obj);
 			return(1);
 		}
 	} else if (is_pool(u.ux,u.uy)) {
 		tmp = waterbody_name(u.ux,u.uy);
+/*JP
 		Sprintf(qbuf, "Dip it into the %s?", tmp);
+*/
+		Sprintf(qbuf, "%sに浸しますか？", tmp);
 		if (yn(qbuf) == 'y') {
 		    if (Levitation) {
 			floating_above(tmp);
@@ -2632,10 +3327,16 @@
 		}
 	}
 
+/*JP
 	if(!(potion = getobj(beverages, "dip into")))
+*/
+	if(!(potion = getobj(beverages, "に浸す")))
 		return(0);
 	if (potion == obj && potion->quan == 1L) {
+/*JP
 		pline("That is a potion bottle, not a Klein bottle!");
+*/
+		pline("これは薬瓶だ！クラインの壷じゃない！");
 		return 0;
 	}
 
@@ -2652,10 +3353,17 @@
 		if (potion->blessed) {
 			if (obj->cursed) {
 				if (useeit)
+#if 0 /*JP*/
 				    pline("%s %s %s.",
 					  Your_buf,
 					  aobjnam(obj, "softly glow"),
 					  hcolor(NH_AMBER));
+#else
+				    pline("%s%sはうっすらと%s輝いた．",
+					  Your_buf,
+					  xname(obj),
+					  jconj_adj(hcolor(NH_AMBER)));
+#endif
 				uncurse(obj);
 				obj->bknown=1;
 	poof:
@@ -2667,10 +3375,15 @@
 			} else if(!obj->blessed) {
 				if (useeit) {
 				    tmp = hcolor(NH_LIGHT_BLUE);
+#if 0 /*JP*/
 				    pline("%s %s with a%s %s aura.",
 					  Your_buf,
 					  aobjnam(obj, "softly glow"),
 					  index(vowels, *tmp) ? "n" : "", tmp);
+#else
+				    pline("%s%sはぼんやりとした%sオーラにつつまれた",
+					  Your_buf, xname(obj), tmp);
+#endif
 				}
 				bless(obj);
 				obj->bknown=1;
@@ -2679,20 +3392,31 @@
 		} else if (potion->cursed) {
 			if (obj->blessed) {
 				if (useeit)
+#if 0 /*JP*/
 				    pline("%s %s %s.",
 					  Your_buf,
 					  aobjnam(obj, "glow"),
 					  hcolor((const char *)"brown"));
+#else
+				    pline("%s%sは%s輝いた",
+					  Your_buf, xname(obj),
+					  jconj_adj(hcolor((const char *)"茶色の")));
+#endif
 				unbless(obj);
 				obj->bknown=1;
 				goto poof;
 			} else if(!obj->cursed) {
 				if (useeit) {
 				    tmp = hcolor(NH_BLACK);
+#if 0 /*JP*/
 				    pline("%s %s with a%s %s aura.",
 					  Your_buf,
 					  aobjnam(obj, "glow"),
 					  index(vowels, *tmp) ? "n" : "", tmp);
+#else
+				    pline("%s%sは%sオーラにつつまれた．",
+					  Your_buf, xname(obj),tmp);
+#endif
 				}
 				curse(obj);
 				obj->bknown=1;
@@ -2719,7 +3443,10 @@
 	/* KMH, balance patch -- idea by Dylan O'Donnell <dylanw@demon.net> */
 	else if (potion->otyp == POT_GAIN_LEVEL && upgrade_obj(obj)) {
 	    /* The object was upgraded */
+/*JP
 	    pline("Hmm!  You don't recall dipping that into the potion.");
+*/
+	    pline("むむ！ 浸してしまった物はリコールできない．");
 	    prinv((char *)0, obj, 0L);			
 	    if (!objects[potion->otyp].oc_name_known &&
 		    !objects[potion->otyp].oc_uname)
@@ -2760,7 +3487,10 @@
 			prinv((char *)0, obj, 0L);
 			return 1;
 		} else {
+/*JP
 			pline("Nothing seems to happen.");
+*/
+			pline("何も起こらなかったようだ．");
 			goto poof;
 		}
 	    }
@@ -2772,17 +3502,26 @@
 		stop_timer(UNPOLY_OBJ, (genericptr_t) obj);
 		obj->oldtyp = STRANGE_OBJECT;
 		if (!Blind)
+/*JP
 			pline("%s seems less hazy.", Yname2(obj));
+*/
+			pline("%sは少しぼんやりした．", Yname2(obj));
 		useup(potion);
 		return (1);
 #endif
 	} else if(obj->oclass == POTION_CLASS && obj->otyp != potion->otyp) {
 		/* Mixing potions is dangerous... */
+/*JP
 		pline_The("potions mix...");
+*/
+		pline("薬は調合された．．．");
 		/* KMH, balance patch -- acid is particularly unstable */
 		if (obj->cursed || obj->otyp == POT_ACID ||
 		    potion->cursed || potion->otyp == POT_ACID || !rn2(10)) {
+/*JP
 			pline("BOOM!  They explode!");
+*/
+			pline("バーン！爆発した！");
 			exercise(A_STR, FALSE);
 			if (!breathless(youmonst.data) || haseyes(youmonst.data))
 				potionbreathe(obj);
@@ -2791,7 +3530,10 @@
 			/* MRKR: an alchemy smock ought to be */
 			/* some protection against this: */
 			losehp(Acid_resistance ? rnd(5) : rnd(10),
+/*JP
 			       "alchemic blast", KILLED_BY_AN);
+*/
+			       "調合の失敗で", KILLED_BY_AN);
 			return(1);
 		}
 
@@ -2819,7 +3561,10 @@
 				break;
 			default:
 				if (!Blind)
+/*JP
 			  pline_The("mixture glows brightly and evaporates.");
+*/
+				  pline("混ぜると薬は明るく輝き，蒸発した．");
 				useup(obj);
 				useup(potion);
 				return(1);
@@ -2829,11 +3574,21 @@
 		obj->odiluted = (obj->otyp != POT_WATER);
 
 		if (obj->otyp == POT_WATER && !Hallucination) {
+#if 0 /*JP*/
 			pline_The("mixture bubbles%s.",
 				Blind ? "" : ", then clears");
+#else
+			pline("薬を混ぜると%s泡だった．",
+				Blind ? "" : "しばらく");
+#endif
 		} else if (!Blind) {
+#if 0 /*JP*/
 			pline_The("mixture looks %s.",
 				hcolor(OBJ_DESCR(objects[obj->otyp])));
+#else
+			pline("混ぜた薬は%s薬に見える．",
+				jtrns_obj('!',OBJ_DESCR(objects[obj->otyp])));
+#endif
 		}
 
 		useup(potion);
@@ -2844,8 +3599,13 @@
 	    if (potion->otyp == POT_INVISIBILITY && !obj->oinvis) {
 		obj->oinvis = TRUE;
 		if (!Blind)
+#if 0 /*JP*/
 		    pline(!See_invisible ? "Where did %s go?" :
 			  "Gee!  All of a sudden you can see right through %s.",
+#else
+		    pline(!See_invisible ? "%sはどこに行ったんだ？" :
+			  "おやまあ！突然，%sは透き通って見えるようになった．",
+#endif
 			  the(xname(obj)));
 		goto poof;
 	    } else if (potion->otyp == POT_SEE_INVISIBLE && obj->oinvis) {
@@ -2854,7 +3614,11 @@
 		    if (!See_invisible)
 			pline("So that's where %s went!", the(xname(obj)));
 		    else
+#if 0 /*JP*/
 			You("can no longer see through %s.",
+#else
+			You("%sはもう透き通って見えない．",
+#endif
 				the(xname(obj)));
 		}
 		goto poof;
@@ -2866,10 +3630,16 @@
 	    if(potion->otyp == POT_SICKNESS && !obj->opoisoned) {
 		char buf[BUFSZ];
 		if (potion->quan > 1L)
+/*JP
 		    Sprintf(buf, "One of %s", the(xname(potion)));
+*/
+		    Sprintf(buf, "%sのひとつ", the(xname(potion)));
 		else
 		    Strcpy(buf, The(xname(potion)));
+/*JP
 		pline("%s forms a coating on %s.",
+*/
+		pline("%sが%sに塗られた．",
 		      buf, the(xname(obj)));
 		obj->opoisoned = TRUE;
 		goto poof;
@@ -2877,7 +3647,10 @@
 		      (potion->otyp == POT_HEALING ||
 		       potion->otyp == POT_EXTRA_HEALING ||
 		       potion->otyp == POT_FULL_HEALING)) {
+/*JP
 		pline("A coating wears off %s.", the(xname(obj)));
+*/
+		pline("毒が%sから剥げおちた．", the(xname(obj)));
 		obj->opoisoned = 0;
 		goto poof;
 	    }
@@ -2892,14 +3665,24 @@
 		    /* catch_lit does all the work if true */
 		} else if (obj->oerodeproof || obj_resists(obj, 5, 95) ||
 			   !is_flammable(obj) || obj->oclass == FOOD_CLASS) {
+#if 0 /*JP*/
 		    pline("%s %s to burn for a moment.",
 			  Yname2(obj), otense(obj, "seem"));
+#else
+		    pline("%sはしばらくの間燃えた．", Yname2(obj));
+#endif
 		} else {
 		    if ((omat == PLASTIC || omat == PAPER) && !obj->oartifact)
 			obj->oeroded = MAX_ERODE;
+#if 0 /*JP*/
 		    pline_The("burning oil %s %s.",
 			    obj->oeroded == MAX_ERODE ? "destroys" : "damages",
 			    yname(obj));
+#else
+		    pline("%sは燃えている油によって%s．",
+			    yname(obj),
+			    obj->oeroded == MAX_ERODE ? "破壊された" : "傷つけられた");
+#endif
 		    if (obj->oeroded == MAX_ERODE) {
 			obj_extract_self(obj);
 			obfree(obj, (struct obj *)0);
@@ -2908,14 +3691,20 @@
 			/* we know it's carried */
 			if (obj->unpaid) {
 			    /* create a dummy duplicate to put on bill */
+/*JP
 			    verbalize("You burnt it, you bought it!");
+*/
+			    verbalize("燃やしたのなら買ってもらうよ！");
 			    bill_dummy_object(obj);
 			}
 			obj->oeroded++;
 		    }
 		}
 	    } else if (potion->cursed) {
+/*JP
 		pline_The("potion spills and covers your %s with oil.",
+*/
+		pline("油は飛び散りあなたの%sにかかった．",
 			  makeplural(body_part(FINGER)));
 		incr_itimeout(&Glib, d(2,10));
 	    } else if (obj->oclass != WEAPON_CLASS && !is_weptool(obj)) {
@@ -2928,13 +3717,24 @@
 	    } else if ((!is_rustprone(obj) && !is_corrodeable(obj)) ||
 			is_ammo(obj) || (!obj->oeroded && !obj->oeroded2)) {
 		/* uses up potion, doesn't set obj->greased */
+#if 0 /*JP*/
 		pline("%s %s with an oily sheen.",
 		      Yname2(obj), otense(obj, "gleam"));
+#else
+		pline("%sは油の光沢できらりと光った．",
+		      Yname2(obj));
+#endif
 	    } else {
+#if 0 /*JP*/
 		pline("%s %s less %s.",
 		      Yname2(obj), otense(obj, "are"),
 		      (obj->oeroded && obj->oeroded2) ? "corroded and rusty" :
 			obj->oeroded ? "rusty" : "corroded");
+#else
+		pline("%sの%sが取れた．", Yname2(obj),
+		      (obj->oeroded && obj->oeroded2) ? "腐食と錆" :
+		      obj->oeroded ? "錆" : "腐食");
+#endif
 		if (obj->oeroded > 0) obj->oeroded--;
 		if (obj->oeroded2 > 0) obj->oeroded2--;
 		wisx = TRUE;
@@ -2949,12 +3749,19 @@
 	if (potion->otyp == POT_ACID && (obj->oclass == ARMOR_CLASS ||
 		obj->oclass == WEAPON_CLASS || is_weptool(obj))) {
 	    if (!potion->blessed && obj->oerodeproof) {
+/*JP
 		pline("%s %s golden shield.",  Yname2(obj),
 			(obj->quan > 1L) ? "lose their" : "loses its");
+*/
+		/*日本語では単複の別は省略*/
+		pline("%sは金色の輝きを失った．",  Yname2(obj));
 		obj->oerodeproof = 0;
 		makeknown(potion->otyp);
 	    } else {
+/*JP
 		pline("%s looks a little dull.", Yname2(obj));
+*/
+		pline("%sの色が少し鈍ったように見える．", Yname2(obj));
 		if (!objects[potion->otyp].oc_name_known &&
 			!objects[potion->otyp].oc_uname)
 		    docall(potion);
@@ -2982,10 +3789,16 @@
 		obj->age = 0;
 	    }
 	    if (obj->age > 1000L) {
+/*JP
                 pline("%s %s full.", Yname2(obj), otense(obj, "are"));
+*/
+		pline("%sにはたっぷり入っている．", Yname2(obj));
 		potion->in_use = FALSE; /* didn't go poof */
 	    } else {
+/*JP
                 You("fill your %s with oil.", yname(obj));
+*/
+		You("%sに油を入れた．", yname(obj));
 		check_unpaid(potion);	/* Yendorian Fuel Tax */
 		obj->age += 2*potion->age;	/* burns more efficiently */
 		if (obj->age > 1500L) obj->age = 1500L;
@@ -3001,7 +3814,11 @@
 	potion->in_use = FALSE;         /* didn't go poof */
 	if ((obj->otyp == UNICORN_HORN || obj->oclass == GEM_CLASS) &&
 	    (mixture = mixtype(obj, potion)) != 0) {
+#if 0 /*JP*/
 		char oldbuf[BUFSZ], newbuf[BUFSZ];
+#else
+		char oldbuf[BUFSZ];
+#endif
 		short old_otyp = potion->otyp;
 		boolean old_dknown = FALSE;
 		boolean more_than_one = potion->quan > 1;
@@ -3009,8 +3826,13 @@
 		oldbuf[0] = '\0';
 		if (potion->dknown) {
 		    old_dknown = TRUE;
+#if 0 /*JP*/
 		    Sprintf(oldbuf, "%s ",
 			    hcolor(OBJ_DESCR(objects[potion->otyp])));
+#else
+		    Sprintf(oldbuf, "%s",
+			    jtrns_obj('!', hcolor(OBJ_DESCR(objects[potion->otyp]))));
+#endif
 		}
 		/* with multiple merged potions, split off one and
 		   just clear it */
@@ -3033,9 +3855,15 @@
 			singlepotion->in_use = TRUE;
 			if (Hallucination && obj->otyp == DILITHIUM_CRYSTAL) {
 			    /* Thanks to Robin Johnson */
+/*JP
 			    pline("Warning, Captain!  The warp core has been breached!");
+*/
+			    pline("危険です艦長！ このままではワープコアが破壊されます！");
 			}
+/*JP
 			pline("BOOM!  %s explodes!", The(xname(singlegem)));
+*/
+			pline("ボーンッ！ %sが爆発した！", xname(singlegem));
 			exercise(A_STR, FALSE);
 			if (!breathless(youmonst.data) || haseyes(youmonst.data))
 			    potionbreathe(singlepotion);
@@ -3044,18 +3872,27 @@
 			/* MRKR: an alchemy smock ought to be */
 			/* some protection against this: */
 			losehp(Acid_resistance ? rnd(5) : rnd(10), 
+/*JP
 			       "alchemic blast", KILLED_BY_AN);
+*/
+			       "調合の失敗で", KILLED_BY_AN);
 			return(1);	  
 		    }
 
+/*JP
 		    pline("%s dissolves in %s.", The(xname(singlegem)), 
+*/
+		    pline("%sは%sに溶けた．", The(xname(singlegem)), 
 			  the(xname(singlepotion)));
 		    makeknown(POT_ACID);
 		    useup(singlegem);
 		}
 
 		if(singlepotion->unpaid && costly_spot(u.ux, u.uy)) {
+/*JP
 		    You("use it, you pay for it.");
+*/
+		    You("使ってしまった，賠償せねばならない．");
 		    bill_dummy_object(singlepotion);
 		}
 
@@ -3077,6 +3914,7 @@
 		    singlepotion->dknown = FALSE;
 		} else {
 		    singlepotion->dknown = !Hallucination;
+#if 0 /*JP*/
 		    if (mixture == POT_WATER && singlepotion->dknown)
 			Sprintf(newbuf, "clears");
 		    else
@@ -3085,6 +3923,13 @@
 		    pline_The("%spotion%s %s.", oldbuf,
 			      more_than_one ? " that you dipped into" : "",
 			      newbuf);
+#else
+		    if (mixture == POT_WATER && singlepotion->dknown)
+			pline("%s薬は透明になった．", oldbuf);
+		    else
+			pline("%s薬は%s薬になった．", oldbuf, jtrns_obj('!',
+				hcolor(OBJ_DESCR(objects[mixture]))));
+#endif
 		    if(!objects[old_otyp].oc_uname &&
 			!objects[old_otyp].oc_name_known && old_dknown) {
 			struct obj fakeobj;
@@ -3097,7 +3942,10 @@
 		}
 		obj_extract_self(singlepotion);
 		singlepotion = hold_another_object(singlepotion,
+/*JP
 					"You juggle and drop %s!",
+*/
+					"お手玉して%sを落としてしまった！",
 					doname(singlepotion), (const char *)0);
 		update_inventory();
 		}
@@ -3105,7 +3953,10 @@
 		return(1);
 	}
 
+/*JP
 	pline("Interesting...");
+*/
+	pline("面白い．．．");
 	return(1);
 }
 
@@ -3131,16 +3982,29 @@
 	genie_type = PM_DJINNI;
 #endif
 	if(!(mtmp = makemon(&mons[genie_type], u.ux, u.uy, NO_MM_FLAGS))){
+/*JP
 		pline("It turns out to be empty.");
+*/
+		pline("薬は空っぽだった．");
 		return;
 	}
 
 	if (!Blind) {
+#if 0 /*JP*/
 		pline("In a cloud of smoke, %s emerges!", a_monnam(mtmp));
 		pline("%s speaks.", Monnam(mtmp));
+#else
+		pline("煙の中から，%sが現われた！", a_monnam(mtmp));
+		pline("%sは話しかけた．", Monnam(mtmp));
+#endif
 	} else {
+#if 0 /*JP*/
 		You("smell acrid fumes.");
 		pline("%s speaks.", Something);
+#else
+		You("ツンとする匂いがした．");
+		pline("%sが話しかけた．", Something);
+#endif
 	}
 
 	chance = rn2(5);
@@ -3149,22 +4013,40 @@
 	/* 0,1,2,3,4:  b=80%,5,5,5,5; nc=20%,20,20,20,20; c=5%,5,5,5,80 */
 
 	switch (chance) {
+/*JP
 	case 0 : verbalize("I am in your debt.  I will grant one wish!");
+*/
+	case 0 : verbalize("お前には借りができた．１つ願いをかなえてやろう！");
 		makewish();
 		mongone(mtmp);
 		break;
+/*JP
 	case 1 : verbalize("Thank you for freeing me!");
+*/
+	case 1 : verbalize("私を助けてくれたことを感謝する！");
 		(void) tamedog(mtmp, (struct obj *)0);
 		break;
+/*JP
 	case 2 : verbalize("You freed me!");
+*/
+	case 2 : verbalize("解放してくれたのはお前か！");
 		mtmp->mpeaceful = TRUE;
 		set_malign(mtmp);
 		break;
+/*JP
 	case 3 : verbalize("It is about time!");
+*/
+	case 3 : verbalize("さらばだ！");
+/*JP
 		pline("%s vanishes.", Monnam(mtmp));
+*/
+		pline("%sは消えた．", Monnam(mtmp));
 		mongone(mtmp);
 		break;
+/*JP
 	default: verbalize("You disturbed me, fool!");
+*/
+	default: verbalize("おまえは私の眠りを妨げた．おろかものめ！");
 		break;
 	}
 }
@@ -3180,9 +4062,11 @@
 	char reason[BUFSZ];
 
 	reason[0] = '\0';
+#if 0 /*JP*/
 	if (mtmp) Sprintf(reason, " from %s heat",
 			  (mtmp == &youmonst) ? (const char *)"your" :
 			      (const char *)s_suffix(mon_nam(mtmp)));
+#endif
 
 	if (mon == &youmonst) {
 	    mtmp2 = cloneu();
@@ -3190,7 +4074,10 @@
 		mtmp2->mhpmax = u.mhmax / 2;
 		u.mhmax -= mtmp2->mhpmax;
 		flags.botl = 1;
+/*JP
 		You("multiply%s!", reason);
+*/
+		You("%s分裂した！", reason);
 	    }
 	} else {
 	    mtmp2 = clone_mon(mon, 0, 0);
@@ -3198,7 +4085,10 @@
 		mtmp2->mhpmax = mon->mhpmax / 2;
 		mon->mhpmax -= mtmp2->mhpmax;
 		if (canspotmon(mon))
+/*JP
 		    pline("%s multiplies%s!", Monnam(mon), reason);
+*/
+		    pline("%sは%s分裂した！", Monnam(mon), reason);
 	    }
 	}
 	return mtmp2;
diff -aurN slashem-0.0.7E6F2/src/pray.c jslashem-0.0.7E6F2-J0.0.8/src/pray.c
--- slashem-0.0.7E6F2/src/pray.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/pray.c	2004-07-27 09:27:54.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Benson I. Margulies, Mike Stephenson, Steve Linhart, 1989. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "epri.h"
 
@@ -51,10 +59,17 @@
 static const char	*Moloch = "Moloch";
 
 static const char *godvoices[] = {
+#if 0 /*JP*/
     "booms out",
     "thunders",
     "rings out",
     "booms",
+#else
+    "響きわたった",
+    "雷のように響いた",
+    "とどろいた",
+    "響いた",
+#endif
 };
 
 /* values calculated when prayer starts, and used when completed */
@@ -275,33 +290,53 @@
 	int i;
 	struct obj *otmp = 0;
 	const char *what = (const char *)0;
+#if 0 /*JP*/
 	static NEARDATA const char leftglow[] = "left ring softly glows",
 				   rightglow[] = "right ring softly glows";
+#else
+	static NEARDATA const char leftglow[] = "左の指輪",
+				   rightglow[] = "右の指輪";
+#endif
 
 	switch (trouble) {
 	    case TROUBLE_STONED:
+/*JP
 		    You_feel("more limber.");
+*/
+		    You("軟らかくなったような気がした．");
 		    Stoned = 0;
 		    flags.botl = 1;
 		    delayed_killer = 0;
 		    break;
 	    case TROUBLE_SLIMED:
+/*JP
 		    pline_The("slime disappears.");
+*/
+		    You("どろどろ感は消えた．");
 		    Slimed = 0;
 		    flags.botl = 1;
 		    delayed_killer = 0;
 		    break;
 	    case TROUBLE_STRANGLED:
 		    if (uamul && uamul->otyp == AMULET_OF_STRANGULATION) {
+/*JP
 			Your("amulet vanishes!");
+*/
+			Your("魔除けは消えさった！");
 			useup(uamul);
 		    }
+/*JP
 		    You("can breathe again.");
+*/
+		    You("呼吸できるようになった．");
 		    Strangled = 0;
 		    flags.botl = 1;
 		    break;
 	    case TROUBLE_LAVA:
+/*JP
 		    You("are back on solid ground.");
+*/
+		    You("固い地面に戻った．");
 		    /* teleport should always succeed, but if not,
 		     * just untrap them.
 		     */
@@ -312,19 +347,28 @@
 		    losestr(-1);
 		    /* fall into... */
 	    case TROUBLE_HUNGRY:
+/*JP
 		    Your("%s feels content.", body_part(STOMACH));
+*/
+		    Your("食欲は満たされた．");
 		    init_uhunger ();
 		    flags.botl = 1;
 		    break;
 	    case TROUBLE_SICK:
+/*JP
 		    You_feel("better.");
+*/
+		    You("気分が良くなった．");
 		    make_sick(0L, (char *) 0, FALSE, SICK_ALL);
 		    break;
 	    case TROUBLE_HIT:
 		    /* "fix all troubles" will keep trying if hero has
 		       5 or less hit points, so make sure they're always
 		       boosted to be more than that */
+/*JP
 		    You_feel("much better.");
+*/
+		    You("気分が良くなった．");
 		    if (Upolyd) {
 			u.mhmax += rnd(5);
 			if (u.mhmax <= 5) u.mhmax = 5+1;
@@ -340,7 +384,10 @@
 		    flags.botl = 1;
 		    break;
 	    case TROUBLE_STUCK_IN_WALL:
+/*JP
 		    Your("surroundings change.");
+*/
+		    Your("環境が変化した．");
 		    /* no control, but works on no-teleport levels */
 		    (void) safe_teleds(FALSE);
 		    break;
@@ -360,7 +407,10 @@
 		    }
 		    if (Upolyd && nohands(youmonst.data)) {
 			if (!Unchanging) {
+/*JP
 			    Your("shape becomes uncertain.");
+*/
+			    Your("体型は不明確になった．");
 			    rehumanize();  /* "You return to {normal} form." */
 			} else if ((otmp = unchanger()) != 0 && otmp->cursed) {
 			    /* otmp is an amulet of unchanging */
@@ -379,7 +429,10 @@
 	/*
 	 */
 	    case TROUBLE_PUNISHED:
+/*JP
 		    Your("chain disappears.");
+*/
+		    Your("鎖は消えた．");
 		    unpunish();
 		    break;
 	    case TROUBLE_FUMBLING:
@@ -401,18 +454,31 @@
 		    }
 		    uncurse(otmp);
 		    if (!Blind) {
+#if 0 /*JP*/
 			Your("%s %s.", what ? what :
 				(const char *)aobjnam(otmp, "softly glow"),
 			     hcolor(NH_AMBER));
+#else
+			    Your("%sは%sやわらかく輝いた．",
+				 what ? what :
+				 (const char *)xname(otmp),
+				 jconj_adj(hcolor(NH_AMBER)));
+#endif
 			otmp->bknown = TRUE;
 		    }
 		    update_inventory();
 		    break;
 	    case TROUBLE_POISONED:
 		    if (Hallucination)
+/*JP
 			pline("There's a tiger in your tank.");
+*/
+			pline("あなたのタンクの中にトラがいる．");
 		    else
+/*JP
 			You_feel("in good health again.");
+*/
+			You("また健康になったような気がした．");
 		    for(i=0; i<A_MAX; i++) {
 			if(ABASE(i) < AMAX(i)) {
 				ABASE(i) = AMAX(i);
@@ -423,12 +489,16 @@
 		    break;
 	    case TROUBLE_BLIND:
 	    	    {
+#if 0 /*JP*/
 	    	    	int num_eyes = eyecount(youmonst.data);
 		    const char *eye = body_part(EYE);
 
 			Your("%s feel%s better.",
 			 (num_eyes == 1) ? eye : makeplural(eye),
 			     (num_eyes == 1) ? "s" : "");
+#else
+			pline("%sが回復したような気がした．", body_part(EYE));
+#endif
 		    u.ucreamed = 0;
 			make_blinded(0L,FALSE);
 			break;
@@ -443,11 +513,17 @@
 		    make_confused(0L,TRUE);
 		    break;
 	    case TROUBLE_HALLUCINATION:
+/*JP
 		    pline ("Looks like you are back in Kansas.");
+*/
+		    pline ("見て！カンサスに戻ってきたんだわ．");
 		    (void) make_hallucinated(0L,FALSE,0L);
 		    break;
 	    case TROUBLE_LOW_ENERGY:
+/*JP
 		    You_feel("revitalised.");
+*/
+		    You("魔力が満ちたような気がした．");
 		    u.uen = u.uenmax;
 		    flags.botl = 1;
 		    break;
@@ -456,10 +532,16 @@
 		    otmp = which_armor(u.usteed, W_SADDLE);
 		    uncurse(otmp);
 		    if (!Blind) {
+#if 0 /*JP:T*/
 			pline("%s %s %s.",
 			      s_suffix(upstart(y_monnam(u.usteed))),
 			      aobjnam(otmp, "softly glow"),
 			      hcolor(NH_AMBER));
+#else
+			pline("%sは%sやわらかく輝いた．",
+			      y_monnam(u.usteed),
+			      hcolor(NH_AMBER));
+#endif
 			otmp->bknown = TRUE;
 		    }
 		    break;
@@ -479,39 +561,78 @@
 aligntyp resp_god;
 {
 	if (u.uswallow) {
+/*JP
 	    pline("Suddenly a bolt of lightning comes down at you from the heavens!");
+*/
+	    pline("突然空から稲妻が落ちてきた！");
+/*JP
 	    pline("It strikes %s!", mon_nam(u.ustuck));
+*/
+	    pline("稲妻は%sに命中した！", mon_nam(u.ustuck));
 	    if (!resists_elec(u.ustuck)) {
+/*JP
 		pline("%s fries to a crisp!", Monnam(u.ustuck));
+*/
+		pline("%sはパリパリになった！", Monnam(u.ustuck));
 		/* Yup, you get experience.  It takes guts to successfully
 		 * pull off this trick on your god, anyway.
 		 */
 		xkilled(u.ustuck, 0);
+/*JP
 	    } else pline("%s seems unaffected.", Monnam(u.ustuck));
+*/
+	    } else pline("%sは影響を受けない．", Monnam(u.ustuck));
 	} else {
+/*JP
 	    pline("Suddenly, a bolt of lightning strikes you!");
+*/
+	    pline("突然，稲妻があなたに命中した！");
 	    if (Reflecting) {
 		shieldeff(u.ux, u.uy);
+/*JP
 		if (Blind) pline("For some reason you're unaffected.");
+*/
+		if (Blind) pline("なぜかあなたは影響を受けない．");
 		else
+/*JP
 		    (void) ureflects("%s reflects from your %s.", "It");
+*/
+		    (void) ureflects("%sは%sによって反射された．", "何か");
 	    } else if (Shock_resistance) {
 		shieldeff(u.ux, u.uy);
+/*JP
 		pline("It seems not to affect you.");
+*/
+	        pline("稲妻は影響を与えない．");
 	    } else fry_by_god(resp_god);
 	}
 
+/*JP
 	pline("%s is not deterred...", align_gname(resp_god));
+*/
+	pline("%sはあきらめなかった．．．", align_gname(resp_god));
 	if (u.uswallow) {
+/*JP
 	    pline("A wide-angle disintegration beam aimed at you hits %s!",
+*/
+	    pline("あなたを狙った粉砕の光線が%sに命中した！",
 			mon_nam(u.ustuck));
 	    if (!resists_disint(u.ustuck)) {
+/*JP
 		pline("%s fries to a crisp!", Monnam(u.ustuck));
+*/
+		pline("%sはパリパリになった！", Monnam(u.ustuck));
 		xkilled(u.ustuck, 2); /* no corpse */
 	    } else
+/*JP
 		pline("%s seems unaffected.", Monnam(u.ustuck));
+*/
+		pline("%sは影響を受けない．", Monnam(u.ustuck));
 	} else {
+/*JP
 	    pline("A wide-angle disintegration beam hits you!");
+*/
+	    pline("粉砕の光線があなたに命中した！");
 
 	    /* disintegrate shield and body armor before disintegrating
 	     * the impudent mortal, like black dragon breath -3.
@@ -531,12 +652,21 @@
 	    if (!Disint_resistance)
 		fry_by_god(resp_god);
 	    else {
+/*JP
 		You("bask in its %s glow for a minute...", NH_BLACK);
+*/
+		You("しばらく，その%s輝きで暖まった．．．", NH_BLACK);
+/*JP
 		godvoice(resp_god, "You have further angered me!");
+*/
+		godvoice(resp_god, "きさまは私をさらに怒らせた！");
 	    }
 	    if (Is_astralevel(&u.uz) || Is_sanctum(&u.uz)) {
 		/* one more try for high altars */
+/*JP
 		verbalize("Thou cannot escape my wrath, mortal!");
+*/
+		verbalize("定命の者よ，汝我が怒りから逃がれることならん！");
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
@@ -545,14 +675,23 @@
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
+/*JP
 		verbalize("Annihilate %s, my servants!", uhim());
+*/
+		verbalize("%sを完全に殺せ，わが下僕よ！", uhim());
 	    } else {
+/*JP
 		verbalize("Thou cannot escape my wrath, mortal!");
+*/
+		verbalize("定命の者よ，汝我が怒りから逃がれることならん！");
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
 		summon_minion(resp_god, FALSE);
+/*JP
 		verbalize("Destroy %s, my servants!", uhim());
+*/
+		verbalize("%sを殺せ，わが下僕よ！", uhim());
 	    }
 	}
 }
@@ -563,9 +702,15 @@
 {
 	char killerbuf[64];
 
+/*JP
 	You("fry to a crisp.");
+*/
+	You("パリパリになった．");
 	killer_format = KILLED_BY;
+/*JP
 	Sprintf(killerbuf, "the wrath of %s", align_gname(resp_god));
+*/
+	Sprintf(killerbuf, "%sの怒りに触れ", align_gname(resp_god));
 	killer = killerbuf;
 	done(DIED);
 }
@@ -591,18 +736,34 @@
 
 	switch (rn2(maxanger)) {
 	    case 0:
+#if 0 /*JP*/
 	    case 1:	You_feel("that %s is %s.", align_gname(resp_god),
 			    Hallucination ? "bummed" : "displeased");
+#else
+	    case 1:	You("%sが%sいるような気がした．", align_gname(resp_god),
+			    Hallucination ? "ねだって" : "立腹して");
+#endif
 			break;
 	    case 2:
 	    case 3:
 			godvoice(resp_god,(char *)0);
+#if 0 /*JP*/
 			pline("\"Thou %s, %s.\"",
 			    (ugod_is_angry() && resp_god == u.ualign.type)
 				? "hast strayed from the path" :
 						"art arrogant",
 			      youmonst.data->mlet == S_HUMAN ? "mortal" : "creature");
+#else
+			pline("「汝%s，%sよ．」",
+			    (ugod_is_angry() && resp_god == u.ualign.type)
+			        ? "その道から踏み出ておる":
+						"傲慢なり",
+			      youmonst.data->mlet == S_HUMAN ? "定命のもの" : "生物");
+#endif
+/*JP
 			verbalize("Thou must relearn thy lessons!");
+*/
+			verbalize("汝いま一度学ぶべし！");
 			(void) adjattrib(A_WIS, -3, FALSE);
 			losexp((char *)0, FALSE);
 			break;
@@ -614,18 +775,30 @@
 	    case 4:
 	    case 5:	gods_angry(resp_god);
 			if (!Blind && !Antimagic)
+/*JP
 			    pline("%s glow surrounds you.",
+*/
+			    pline("%s光があなたを取り巻いた．",
 				  An(hcolor(NH_BLACK)));
 			rndcurse();
 			break;
 	    case 7:
 	    case 8:	godvoice(resp_god,(char *)0);
+#if 0 /*JP*/
 			verbalize("Thou durst %s me?",
 				  (on_altar() &&
 				   (a_align(u.ux,u.uy) != resp_god)) ?
 				  "scorn":"call upon");
 			pline("\"Then die, %s!\"",
 			      youmonst.data->mlet == S_HUMAN ? "mortal" : "creature");
+#else
+			verbalize("汝，我%s？",
+				  (on_altar() &&
+				   (a_align(u.ux,u.uy) != resp_god)) ?
+				  "をさげすむか？" : "に祈りを求めしか？");
+			pline("「死ね，%sよ！」",
+			      youmonst.data->mlet == S_HUMAN ? "定命のもの" : "生物");
+#endif
 			summon_minion(resp_god, FALSE);
 			break;
 
@@ -648,13 +821,24 @@
 	if (Blind) str = Something;
 	if (u.uswallow) {
 	    /* barrier between you and the floor */
+#if 0 /*JP*/
 	    pline("%s %s into %s %s.", str, vtense(str, "drop"),
 		  s_suffix(mon_nam(u.ustuck)), mbodypart(u.ustuck, STOMACH));
+#else
+	    pline("%sが%sの%sに落ちた．", str,
+		  mon_nam(u.ustuck), mbodypart(u.ustuck, STOMACH));
+#endif
 	} else {
+#if 0 /*JP*/
 	    pline("%s %s %s your %s!", str,
 		  Blind ? "lands" : vtense(str, "appear"),
 		  Levitation ? "beneath" : "at",
 		  makeplural(body_part(FOOT)));
+#else
+	    pline("%sがあなたの%sに%s！", str,
+		  Levitation ? "の下方に" : "足元",
+		  Blind ? "着地した" : "現われた");
+#endif
 	}
 }
 
@@ -681,20 +865,32 @@
     switch (u.ualign.type) {
     case A_LAWFUL:
 	u.uevent.uhand_of_elbereth = 1;
+/*JP
 	verbalize("I crown thee...  The Hand of Elbereth!");
+*/
+	verbalize("汝にさずけよう．．．エルベレスの御手を！");
 	break;
     case A_NEUTRAL:
 	u.uevent.uhand_of_elbereth = 2;
 	in_hand = (uwep && uwep->oartifact == ART_VORPAL_BLADE);
 	already_exists = exist_artifact(LONG_SWORD, artiname(ART_VORPAL_BLADE));
+/*JP
 	verbalize("Thou shalt be my Envoy of Balance!");
+*/
+	verbalize("汝，我が調和の使者なり！");
 	break;
     case A_CHAOTIC:
 	u.uevent.uhand_of_elbereth = 3;
 	in_hand = (uwep && uwep->oartifact == ART_STORMBRINGER);
 	already_exists = exist_artifact(RUNESWORD, artiname(ART_STORMBRINGER));
+#if 0 /*JP*/
 	verbalize("Thou art chosen to %s for My Glory!",
 		  already_exists && !in_hand ? "take lives" : "steal souls");
+#else
+	verbalize("汝，我が栄光のため%sとして選ばれん！",
+		  already_exists && !in_hand ?
+			      "生きながらえん者" : "魂を奪いしためる者");
+#endif
 	break;
     }
 
@@ -710,7 +906,10 @@
 	obj = mksobj(class_gift, TRUE, FALSE);
 	bless(obj);
 	obj->bknown = TRUE;
+/*JP
 	at_your_feet("A spellbook");
+*/
+	at_your_feet("魔法書");
 	dropy(obj);
 	u.ugifts++;
 	/* when getting a new book for known spell, enhance
@@ -733,7 +932,10 @@
 	if (class_gift != STRANGE_OBJECT) {
 	    ;		/* already got bonus above */
 	} else if (obj && obj->otyp == LONG_SWORD && !obj->oartifact) {
+/*JP
 	    if (!Blind) Your("sword shines brightly for a moment.");
+*/
+	    if (!Blind) Your("剣はしばらくの間明るく輝いた．");
 	    obj = oname(obj, artiname(ART_EXCALIBUR));
 	    if (obj && obj->oartifact == ART_EXCALIBUR) u.ugifts++;
 	}
@@ -746,13 +948,19 @@
 	if (class_gift != STRANGE_OBJECT) {
 	    ;		/* already got bonus above */
 	} else if (in_hand) {
+/*JP
 	    Your("%s goes snicker-snack!", xname(obj));
+*/
+	    Your("%sは軽くなった！", xname(obj));
 	    obj->dknown = TRUE;
 	} else if (!already_exists) {
 	    obj = mksobj(LONG_SWORD, FALSE, FALSE);
 	    obj = oname(obj, artiname(ART_VORPAL_BLADE));
 	    obj->spe = 1;
+/*JP
 	    at_your_feet("A sword");
+*/
+	    at_your_feet("剣");
 	    dropy(obj);
 	    u.ugifts++;
 	}
@@ -765,11 +973,18 @@
       {
 	char swordbuf[BUFSZ];
 
+/*JP
 	Sprintf(swordbuf, "%s sword", hcolor(NH_BLACK));
+*/
+	Sprintf(swordbuf, "%s剣", hcolor(NH_BLACK));
 	if (class_gift != STRANGE_OBJECT) {
 	    ;		/* already got bonus above */
 	} else if (in_hand) {
+#if 0 /*JP*/
 	    Your("%s hums ominously!", swordbuf);
+#else
+	    Your("%sは気味の悪い音を立てた！", swordbuf);
+#endif
 	    obj->dknown = TRUE;
 	} else if (!already_exists) {
 	    obj = mksobj(RUNESWORD, FALSE, FALSE);
@@ -805,7 +1020,10 @@
 	unrestrict_weapon_skill(weapon_type(obj));
     } else if (class_gift == STRANGE_OBJECT) {
 	/* opportunity knocked, but there was nobody home... */
+/*JP
 	You_feel("unworthy.");
+*/
+	You("価値がないと思った．");
     }
     update_inventory();
     return;
@@ -824,12 +1042,21 @@
 	int pet_chance = 0;
  */
 
+#if 0 /*JP*/
 	You_feel("that %s is %s.", align_gname(g_align),
 	    u.ualign.record >= DEVOUT ?
 	    Hallucination ? "pleased as punch" : "well-pleased" :
 	    u.ualign.record >= STRIDENT ?
 	    Hallucination ? "ticklish" : "pleased" :
 	    Hallucination ? "full" : "satisfied");
+#else
+	pline("%sが%sような気がした．", align_gname(g_align),
+	    u.ualign.record >= DEVOUT ?
+	    Hallucination ? "くそ機嫌いい" : "ご機嫌麗しい" :
+	    u.ualign.record >= STRIDENT ?
+	    Hallucination ? "くすぐったがっている" : "上機嫌である" :
+	    Hallucination ? "腹いっぱいである" : "満足している");
+#endif
 
 	/* not your deity */
 	if (on_altar() && p_aligntyp != u.ualign.type) {
@@ -893,26 +1120,47 @@
 
 		*repair_buf = '\0';
 		if (uwep->oeroded || uwep->oeroded2)
+#if 0 /*JP*/
 		    Sprintf(repair_buf, " and %s now as good as new",
 			    otense(uwep, "are"));
+#else
+		    Sprintf(repair_buf, "さらに新品同様になった．");
+#endif
 
 		if (uwep->cursed) {
 		    uncurse(uwep);
 		    uwep->bknown = TRUE;
 		    if (!Blind)
+#if 0 /*JP*/
 			Your("%s %s%s.", aobjnam(uwep, "softly glow"),
 			     hcolor(NH_AMBER), repair_buf);
+#else
+			Your("%sは%sやわらかく輝いた．%s", xname(uwep), 
+			     jconj_adj(hcolor(NH_AMBER)), repair_buf);
+#endif
+/*JP
 		    else You_feel("the power of %s over your %s.",
+*/
+		    else pline("%sの力が%sに注がれているのを感じた．",
 			u_gname(), xname(uwep));
 		    *repair_buf = '\0';
 		} else if (!uwep->blessed) {
 		    bless(uwep);
 		    uwep->bknown = TRUE;
 		    if (!Blind)
+#if 0 /*JP*/
 			Your("%s with %s aura%s.",
 			     aobjnam(uwep, "softly glow"),
 			     an(hcolor(NH_LIGHT_BLUE)), repair_buf);
+#else
+			Your("%sは%sやわらかなオーラにつつまれた．%s",
+			     xname(uwep), 
+			     an(hcolor(NH_LIGHT_BLUE)), repair_buf);
+#endif
+/*JP
 		    else You_feel("the blessing of %s over your %s.",
+*/
+		    else pline("%sの祝福が%sに注がれているのを感じた．",
 			u_gname(), xname(uwep));
 		    *repair_buf = '\0';
 		}
@@ -924,8 +1172,14 @@
 		    /* only give this message if we didn't just bless
 		       or uncurse (which has already given a message) */
 		    if (*repair_buf)
+#if 0 /*JP*/
 			Your("%s as good as new!",
 			     aobjnam(uwep, Blind ? "feel" : "look"));
+#else
+			Your("%sは新品同様になった%s！",
+			     xname(uwep),
+			     Blind ? "ような気がする" : "");
+#endif
 		}
 		update_inventory();
 	    }
@@ -935,15 +1189,31 @@
 	    if (!u.uevent.uopened_dbridge) {
 		if (u.uevent.uheard_tune < 1) {
 		    godvoice(g_align,(char *)0);
+#if 0 /*JP*/
 		    verbalize("Hark, %s!",
 			  youmonst.data->mlet == S_HUMAN ? "mortal" : "creature");
+#else
+		    verbalize("%sよ，聞け！",
+			  youmonst.data->mlet == S_HUMAN ? "人間" : "生物");
+#endif
+#if 0 /*JP*/
 		    verbalize(
 			"To enter the castle, thou must play the right tune!");
+#else
+		    verbalize(
+			"汝城に入らんと欲するならば，正しき調べを奏でるべし！");
+#endif
 		    u.uevent.uheard_tune++;
 		    break;
 		} else if (u.uevent.uheard_tune < 2) {
+/*JP
 		    You_hear("a divine music...");
+*/
+		    You_hear("神の音楽を聞いた．．．");
+/*JP
 		    pline("It sounds like:  \"%s\".", tune);
+*/
+		    pline("それは次のように聞こえた:  「%s」", tune);
 		    u.uevent.uheard_tune++;
 		    break;
 		}
@@ -951,7 +1221,10 @@
 	    /* Otherwise, falls into next case */
 	case 2:
 	    if (!Blind)
+/*JP
 		You("are surrounded by %s glow.", an(hcolor(NH_GOLDEN)));
+*/
+		You("%s輝きにつつまれた．", hcolor(NH_GOLDEN));
 	    /* if any levels have been lost (and not yet regained),
 	       treat this effect like blessed full healing */
 	    if (u.ulevel < u.ulevelmax) {
@@ -974,15 +1247,26 @@
 	    int any = 0;
 
 	    if (Blind)
+/*JP
 		You_feel("the power of %s.", u_gname());
+*/
+		You("%sの力を感じた．", u_gname());
+/*JP
 	    else You("are surrounded by %s aura.",
+*/
+	    else You("%sオーラにつつまれた．",
 		     an(hcolor(NH_LIGHT_BLUE)));
 	    for(otmp=invent; otmp; otmp=otmp->nobj) {
 		if (otmp->cursed) {
 		    uncurse(otmp);
 		    if (!Blind) {
+#if 0 /*JP*/
 			Your("%s %s.", aobjnam(otmp, "softly glow"),
 			     hcolor(NH_AMBER));
+#else
+			Your("%sは%sやわらかく輝いた．", xname(otmp),
+			     jconj_adj(hcolor(NH_AMBER)));
+#endif
 			otmp->bknown = TRUE;
 			++any;
 		    }
@@ -1004,7 +1288,10 @@
 	    struct obj *otmp;
 	    int sp_no, trycnt = u.ulevel + 1;
 
+/*JP
 	    at_your_feet("An object");
+*/
+	    at_your_feet("何か");
 	    /* not yet known spells given preference over already known ones */
 	    /* Also, try to grant a spell for which there is a skill slot */
 	    otmp = mkobj(SPBOOK_CLASS, TRUE);
@@ -1026,26 +1313,47 @@
 	    break;
 	}
 	case 5: {
+/*JP
 	    const char *msg="\"and thus I grant thee the gift of %s!\"";
+*/
+	    const char *msg="「さらに汝に%sをさずけよう！」";
+/*JP
 	    godvoice(u.ualign.type, "Thou hast pleased me with thy progress,");
+*/
+	    godvoice(u.ualign.type, "汝の成長は非常に望ましい，");
 	    if (!(HTelepat & INTRINSIC))  {
 		HTelepat |= FROMOUTSIDE;
+/*JP
 		pline(msg, "Telepathy");
+*/
+		pline(msg, "テレパシー");
 		if (Blind) see_monsters();
 	    } else if (!(HFast & INTRINSIC))  {
 		HFast |= FROMOUTSIDE;
+/*JP
 		pline(msg, "Speed");
+*/
+		pline(msg, "速さ");
 	    } else if (!(HStealth & INTRINSIC))  {
 		HStealth |= FROMOUTSIDE;
+/*JP
 		pline(msg, "Stealth");
+*/
+		pline(msg, "忍の力");
 	    } else {
 		if (!(HProtection & INTRINSIC))  {
 		    HProtection |= FROMOUTSIDE;
 		    if (!u.ublessed)  u.ublessed = rn1(3, 2);
 		} else u.ublessed++;
+/*JP
 		pline(msg, "my protection");
+*/
+		pline(msg, "我が護り");
 	    }
+/*JP
 	    verbalize("Use it wisely in my name!");
+*/
+	    verbalize("我が名に於いて有効に使うがよい！");
 	    break;
 	}
 	default:	impossible("Confused deity!");
@@ -1085,11 +1393,17 @@
 	    other = TRUE;
     }
     if(!Blind && changed) {
+#if 0 /*JP*/
 	pline("%s potion%s on the altar glow%s %s for a moment.",
 	      ((other && changed > 1L) ? "Some of the" :
 					(other ? "One of the" : "The")),
 	      ((other || changed > 1L) ? "s" : ""), (changed > 1L ? "" : "s"),
 	      (bless_water ? hcolor(NH_LIGHT_BLUE) : hcolor(NH_BLACK)));
+#else
+	pline("%s祭壇の薬は一瞬%s輝いた．",
+	      (other && changed > 1L) ? "いくつかの" : "",
+	      jconj_adj(bless_water ? hcolor(NH_LIGHT_BLUE) : hcolor(NH_BLACK)));
+#endif
     }
     return((boolean)(changed > 0L));
 }
@@ -1099,6 +1413,7 @@
     aligntyp g_align;
     const char *words;
 {
+#if 0 /*JP*/
     const char *quot = "";
     if(words)
 	quot = "\"";
@@ -1107,13 +1422,24 @@
 
     pline_The("voice of %s %s: %s%s%s", align_gname(g_align),
 	  godvoices[rn2(SIZE(godvoices))], quot, words, quot);
+#else
+    if(words)
+      pline("%sの声が%s: 「%s」", align_gname(g_align),
+	    godvoices[rn2(SIZE(godvoices))], words);
+    else
+      pline("%sの声が%s：", align_gname(g_align),
+	    godvoices[rn2(SIZE(godvoices))]);
+#endif
 }
 
 STATIC_OVL void
 gods_angry(g_align)
     aligntyp g_align;
 {
+/*JP
     godvoice(g_align, "Thou hast angered me.");
+*/
+    godvoice(g_align, "汝，我を怒りしめた．");
 }
 
 /* The g_align god is upset with you. */
@@ -1137,19 +1463,36 @@
     if (Hallucination)
 	switch (rn2(3)) {
 	    case 0:
+/*JP
 		Your("sacrifice sprouts wings and a propeller and roars away!");
+*/
+		Your("献上物は羽をはやし，プロペラがまわり，飛んでった！");
 		break;
 	    case 1:
+/*JP
 		Your("sacrifice puffs up, swelling bigger and bigger, and pops!");
+*/
+		Your("献上物は噴煙をあげ，どんどん膨れ，そしてはじけた！");
 		break;
 	    case 2:
+/*JP
 		Your("sacrifice collapses into a cloud of dancing particles and fades away!");
+*/
+		Your("献上物は細かく砕け，踊り出し，どこかに行ってしまった！");
 		break;
 	}
     else if (Blind && u.ualign.type == A_LAWFUL)
+/*JP
 	Your("sacrifice disappears!");
+*/
+	Your("献上物は消えた！");
+#if 0 /*JP*/
     else Your("sacrifice is consumed in a %s!",
 	      u.ualign.type == A_LAWFUL ? "flash of light" : "burst of flame");
+#else
+    else Your("献上物は%s消えさった！",
+	      u.ualign.type == A_LAWFUL ? "まばゆい光を放ち" : "炎を上げ");
+#endif
     if (carried(otmp)) useup(otmp);
     else useupf(otmp, 1L);
     exercise(A_WIS, TRUE);
@@ -1186,20 +1529,35 @@
     if (mon) {
 	switch ((int)alignment) {
 	   case A_LAWFUL:
+/*JP
 		pline("%s", Blind ? "You feel the presence of goodness." :
 		 "There is a puff of white fog!");
+*/
+		pline("%s", Blind ? "あなたは善良な者の存在を感じた．" :
+		 "ぽんっと白い霧が噴き出した！");
 	   break;
 	   case A_NEUTRAL:
+/*JP
 		pline("%s", Blind ? "You hear the earth rumble..." :
 		 "A cloud of gray smoke gathers around you!");
+*/
+		pline("%s", Blind ? "あなたは大地のうなりを聞いた．．．" :
+		 "灰色の煙の雲があなたの周りに集まった！");
 	   break;
 	   case A_CHAOTIC:
 	   case A_NONE:
+/*JP
 		pline("%s", Blind ? "You hear an evil chuckle!" :
 		 "A miasma of stinking vapors coalesces around you!");
+*/
+		pline("%s", Blind ? "あなたは邪悪なくすくす笑いを聞いた！" :
+		 "悪臭のする毒気があなたの周りに集まった！");
 	   break;
 	}
+/*JP
 	godvoice(u.ualign.type, "My minion shall serve thee!");
+*/
+	godvoice(u.ualign.type, "我がしもべは必ずや役立つであろう！");
 	return;
     }
 }
@@ -1216,10 +1574,18 @@
 
     mnum = lawful_minion(u.ulevel);
     mon = make_pet_minion(mnum,A_LAWFUL);
+/*JP
     pline("%s", Blind ? "You feel the presence of goodness." :
 	 "There is a puff of white fog!");
+*/
+    pline("%s", Blind ? "あなたは善良な者の存在を感じた．" :
+	 "ぽんっと白い霧が噴き出した！");
+/*JP
     if (u.uhp > (u.uhpmax / 10)) godvoice(u.ualign.type, "My minion shall serve thee!");
     else godvoice(u.ualign.type, "My minion shall save thee!");
+*/
+    if (u.uhp > (u.uhpmax / 10)) godvoice(u.ualign.type, "我がしもべは必ずや役立つであろう！");
+    else godvoice(u.ualign.type, "我がしもべはそなたを救うであろう！");
 }
 
 
@@ -1244,7 +1610,10 @@
 	/* you're handling this corpse, even if it was killed upon the altar */
 	feel_cockatrice(otmp, TRUE);
 
+/*JP
 	pline("%s looks at you %sfully.", Monnam(mtmp), woodchuck ? "scorn" : "thought");
+*/
+	pline("%sはあなたを%s見つめた．", Monnam(mtmp), woodchuck ? "軽蔑するようなまなざしで" : "つくづくと");
 	outrumor(woodchuck ? -1 : 0, FALSE);
 	consume_offering(otmp);
 	adjalign(-1);	/* Your god is jealous */
@@ -1273,20 +1642,34 @@
 	for(orac = fmon; orac; orac = orac->nmon)
 	    if (orac->data == &mons[PM_ORACLE]) break;
 	if (!orac || distu(orac->mx, orac->my) > 2 || !mon_visible(orac)) {
+/*JP
 	    pline("I see no one next to you to take a sacrifice.");
+*/
+	    pline("あなたのそばには捧げる相手が見当たらない．");
 	    return 0;
 	}
     }
     if (!orac && (!on_altar() || u.uswallow)) {
+/*JP
 	You("are not standing on an altar.");
+*/
+	You("祭壇の上に立っていない．");
 	return 0;
     }
 
+#if 0 /*JP*/
     if (In_endgame(&u.uz)) {
 	if (!(otmp = getobj(sacrifice_types, "sacrifice"))) return 0;
     } else {
 	if (!(otmp = getobj(ext_sacrifice_types, "sacrifice"))) return 0;
     }
+#else
+    if (In_endgame(&u.uz)) {
+	if (!(otmp = getobj(sacrifice_types, "捧げる"))) return 0;
+    } else {
+	if (!(otmp = getobj(ext_sacrifice_types, "捧げる"))) return 0;
+    }
+#endif
 
     /* KMH -- offerings to Oracle */
     if (orac) return (offer_oracle(orac, otmp));
@@ -1306,7 +1689,10 @@
     /* sacrificing the eye and/or hand of Vecna is a special case */
     if (otmp->oartifact == ART_EYE_OF_THE_BEHOLDER ||
 	    otmp->oartifact == ART_HAND_OF_VECNA) {
+/*JP
 	You("offer this evil thing to %s...", a_gname());
+*/
+	You("邪悪なものを%に捧げた．．．", a_gname());
 	value = MAXVALUE; /* holy crap! */
 	u.uconduct.gnostic++;	/* KMH, ethics */
     }
@@ -1331,10 +1717,16 @@
 
 	if (your_race(ptr)) {
 	    if (is_demon(youmonst.data) || Race_if(PM_HUMAN_WEREWOLF)) {
+/*JP
 		You("find the idea very satisfying.");
+*/
+		You("その考えは素晴しいと思った．");
 		exercise(A_WIS, TRUE);
 	    } else if (u.ualign.type != A_CHAOTIC) {
+/*JP
 		    pline("You'll regret this infamous offense!");
+*/
+		    pline("汝，この侮辱の行ないを後悔するべし！");
 		    exercise(A_WIS, FALSE);
 	    }
 
@@ -1342,8 +1734,11 @@
 		/* curse the lawful/neutral altar */
 		int race = mrace2race(ptr->mflags2);
 		if (race != ROLE_NONE)
+/*JP
 		    pline_The("altar is stained with %s blood.",
 			    races[race].adj);
+*/
+		pline("祭壇は%sの血で汚れている．", races[race].j);
 		else
 		    impossible("Bad monster race?");
 		if(!Is_astralevel(&u.uz))
@@ -1358,51 +1753,81 @@
 		/* is equivalent to demon summoning */
 		if (altaralign == A_CHAOTIC && u.ualign.type != A_CHAOTIC) {
 		    pline(
+/*JP
 		     "The blood floods the altar, which vanishes in %s cloud!",
+*/
+		     "血が祭壇からあふれ，祭壇は%s雲となり消えた！",
 			  an(hcolor(NH_BLACK)));
 		    levl[u.ux][u.uy].typ = ROOM;
 		    levl[u.ux][u.uy].altarmask = 0;
 		    newsym(u.ux, u.uy);
 		    angry_priest();
+/*JP
 		    demonless_msg = "cloud dissipates";
+*/
+		    demonless_msg = "雲は消えた．";
 		} else {
 		    /* either you're chaotic or altar is Moloch's or both */
+/*JP
 		    pline_The("blood covers the altar, and a dark cloud forms!");
+*/
+		    pline("血が祭壇を覆った！");
 		    change_luck(altaralign == A_NONE ? -2 : 2);
+/*JP
 		    demonless_msg = "blood coagulates";
+*/
+		    demonless_msg = "血がこびりついた";
 		}
 		if ((pm = dlord(altaralign)) != NON_PM &&
 		    (dmon = makemon(&mons[pm], u.ux, u.uy, NO_MM_FLAGS))) {
 		    /* here to be seen */
 		    dmon->minvis = FALSE;
+/*JP
 		    You("have summoned %s!", a_monnam(dmon));
+*/
+		    You("%sを召喚した！", a_monnam(dmon));
 		    if (sgn(u.ualign.type) == sgn(dmon->data->maligntyp)) {
 			dmon->mpeaceful = TRUE;
 			} else if (is_dprince(dmon->data)) {
 			switch (rn2(5)) {
 			  case 0:
+/*JP
 			       pline("He is furious!");
+*/
+			       pline("彼は激怒した！");
 			       dmon->mpeaceful = FALSE;
 			  break;
 			  case 1:
+/*JP
 			       pline("Angered at your summons, he curses you!");
+*/
+			       pline("召喚に怒った彼があなたに呪いかけた！");
 			       /* but not angry enough to whup yer ass */
 			       for(octmp = invent; octmp ; octmp = octmp->nobj)
 				 if (!rn2(6)) curse(octmp);
 			       break;
 			  case 2: 
 			  case 3:
+/*JP
 			       You("are terrified, and unable to move.");
+*/
+			       You("恐怖で動けなくなった．");
 			       nomul(-3);
 			       nomovemsg = 0;
 			       break;                
 			  case 4:
+/*JP
 			       pline("Amused, he grants you a wish!");
+*/
+			       pline("楽しませてくれたお礼に願いを叶えてやろう！");
 			       makewish();
 			  break;
 		       }
 		    }
+/*JP
 		} else pline_The("%s.", demonless_msg);
+*/
+		} else pline("%s．", demonless_msg);
 	    }
 
 	    if (u.ualign.type != A_CHAOTIC) {
@@ -1420,7 +1845,10 @@
 		    && mtmp->mtame) {
 	    /* mtmp is a temporary pointer to a tame monster's attributes,
 	     * not a real monster */
+/*JP
 	    pline("So this is how you repay loyalty?");
+*/
+	    pline("それでこれがあなたの忠義に報いるものか？");
 	    adjalign(-3);
 	    value = -1;
 	    HAggravate_monster |= FROMOUTSIDE;
@@ -1432,17 +1860,29 @@
 
 	    /* If same as altar, always a very bad action. */
 	    if (unicalign == altaralign) {
+#if 0 /*JP*/
 		pline("Such an action is an insult to %s!",
 		      (unicalign == A_CHAOTIC)
 		      ? "chaos" : unicalign ? "law" : "balance");
+#else
+		pline("そのような行動は『%s』に反する！",
+		      (unicalign == A_CHAOTIC)
+		      ? "混沌" : unicalign ? "秩序" : "調和");
+#endif
 		(void) adjattrib(A_WIS, -1, TRUE);
 		value = -5;
 	    } else if (u.ualign.type == altaralign) {
 		/* If different from altar, and altar is same as yours, */
 		/* it's a very good action */
 		if (u.ualign.record < ALIGNLIM)
+/*JP
 		    You_feel("appropriately %s.", align_str(u.ualign.type));
+*/
+		    You("%sにふさわしいと感じた．", align_str(u.ualign.type));
+/*JP
 		else You_feel("you are thoroughly on the right path.");
+*/
+		else You("完全に正しい道を歩んでいるのを感じた．");
 		adjalign(5);
 #ifdef NOARTIFACTWISH
 		u.usacrifice += 5;
@@ -1461,9 +1901,15 @@
     if (otmp->otyp == AMULET_OF_YENDOR) {
 	if (!Is_astralevel(&u.uz)) {
 	    if (Hallucination)
+/*JP
 		    You_feel("homesick.");
+*/
+		    You("故郷が恋しくなった．");
 	    else
+/*JP
 		    You_feel("an urge to return to the surface.");
+*/
+		    You("地上に帰りたい気持に駆り立てられた．");
 	    return 1;
 	} else {
 	    /* The final Test.	Did you win? */
@@ -1471,26 +1917,59 @@
 	    u.uevent.ascended = 1;
 	    if(carried(otmp)) useup(otmp); /* well, it's gone now */
 	    else useupf(otmp, 1L);
+/*JP
 	    You("offer the Amulet of Yendor to %s...", a_gname());
+*/
+	    You("イェンダーの魔除けを%sに献上した．．．",a_gname());
 	    if (u.ualign.type != altaralign) {
 		/* And the opposing team picks you up and
 		   carries you off on their shoulders */
 		adjalign(-99);
+#if 0 /*JP*/
 		pline("%s accepts your gift, and gains dominion over %s...",
 		      a_gname(), u_gname());
+#else
+		pline("%sはあなたの送り物を受けとり，%sの権力を得た．．．",
+		      a_gname(), u_gname());
+#endif
+/*JP
 		pline("%s is enraged...", u_gname());
+*/
+		pline("%sは激怒した．．．", u_gname());
+/*JP
 		pline("Fortunately, %s permits you to live...", a_gname());
+*/
+		pline("幸運にも，%sはあなたの存在を許している．．．",a_gname());
+#if 0 /*JP*/
 		pline("A cloud of %s smoke surrounds you...",
 		      hcolor((const char *)"orange"));
+#else
+		pline("%s煙があなたを取り囲んだ．．．",
+		      hcolor((const char *)"オレンジ色の"));
+#endif
 		done(ESCAPED);
 	    } else { /* super big win */
 		adjalign(10);
+/*JP
 pline("An invisible choir sings, and you are bathed in radiance...");
+*/
+pline("どこからともなく聖歌隊の歌が聞こえ，あなたは光に包まれた．．．");
+/*JP
 		godvoice(altaralign, "Congratulations, mortal!");
+*/
+		godvoice(altaralign, "よくやった！人間よ！");
 		display_nhwindow(WIN_MESSAGE, FALSE);
+/*JP
 verbalize("In return for thy service, I grant thee the gift of Immortality!");
+*/
+ 		verbalize("汝の偉業に対し，不死の体を捧げようぞ！");
+#if 0 /*JP*/
 		You("ascend to the status of Demigod%s...",
 		    flags.female ? "dess" : "");
+#else
+		You("昇天し，%s神となった．．．",
+		    flags.female ? "女" : "");
+#endif
 		done(ASCENDED);
 	    }
 	}
@@ -1498,10 +1977,18 @@
 
     if (otmp->otyp == FAKE_AMULET_OF_YENDOR) {
 	    if (flags.soundok)
+/*JP
 		You_hear("a nearby thunderclap.");
+*/
+		You_hear("近くに雷が落ちた音を聞いた．");
 	    if (!otmp->known) {
+#if 0 /*JP*/
 		You("realize you have made a %s.",
 		    Hallucination ? "boo-boo" : "mistake");
+#else
+		You("%sことに気がついた．",
+		    Hallucination ? "「ハズレ」だった" : "間違いを犯した");
+#endif
 		otmp->known = TRUE;
 		change_luck(-1);
 		return 1;
@@ -1528,9 +2015,18 @@
 	 * REAL BAD NEWS!!! High altars cannot be converted.  Even an attempt
 	 * gets the god who owns it truely pissed off.
 	 */
+/*JP
 	You_feel("the air around you grow charged...");
+*/
+	You("回りの空気にエネルギーが満ちていくような気がした．．．");
+/*JP
 	pline("Suddenly, you realize that %s has noticed you...", a_gname());
+*/
+	pline("突然，%sがあなたをじっと見ているのに気がついた．．．",a_gname());
+/*JP
 	godvoice(altaralign, "So, mortal!  You dare desecrate my High Temple!");
+*/
+	godvoice(altaralign, "人間よ！おまえは我が神聖なる寺院を汚すのか！");
 	/* Throw everything we have at the player */
 	god_zaps_you(altaralign);
     } else if (value < 0) { /* I don't think the gods are gonna like this... */
@@ -1547,9 +2043,15 @@
 	    if (ugod_is_angry() || (altaralign == A_NONE && Inhell)) {
 		if(u.ualignbase[A_CURRENT] == u.ualignbase[A_ORIGINAL] &&
 		   altaralign != A_NONE) {
+/*JP
 		    You("have a strong feeling that %s is angry...", u_gname());
+*/
+		    You("%sが怒っているのを確信した．．．", u_gname());
 		    consume_offering(otmp);
+/*JP
 		    pline("%s accepts your allegiance.", a_gname());
+*/
+		    pline("%sはあなたの属性を受けいれた．", a_gname());
 
 		    /* The player wears a helm of opposite alignment? */
 		    if (uarmh && uarmh->otyp == HELM_OF_OPPOSITE_ALIGNMENT)
@@ -1559,7 +2061,10 @@
 		    u.ublessed = 0;
 		    flags.botl = 1;
 
+/*JP
 		    You("have a sudden sense of a new direction.");
+*/
+		    You("突然，別の感覚にめざめた．");
 		    /* Beware, Conversion is costly */
 		    change_luck(-3);
 		    u.ublesscnt += 300;
@@ -1570,8 +2075,14 @@
 #ifdef NOARTIFACTWISH
 		    u.usacrifice = 0;
 #endif
+/*JP
 		    pline("%s rejects your sacrifice!", a_gname());
+*/
+		    pline("%sはあなたの献上物を受けいれない！", a_gname());
+/*JP
 		    godvoice(altaralign, "Suffer, infidel!");
+*/
+		    godvoice(altaralign, "異端者よ！失せろ！！");
 		    change_luck(-5);
 		    (void) adjattrib(A_WIS, -2, TRUE);
 		    if (!Inhell) angrygods(u.ualign.type);
@@ -1579,14 +2090,23 @@
 		return(1);
 	    } else {
 		consume_offering(otmp);
+/*JP
 		You("sense a conflict between %s and %s.",
+*/
+		You("%sと%s間の争いを感じた．",
 		    u_gname(), a_gname());
 		if (rn2(8 + u.ulevel) > 5) {
 		    struct monst *pri;
+/*JP
 		    You_feel("the power of %s increase.", u_gname());
+*/
+		    You("%sの力が増大したような気がした．", u_gname());
 		    if (rnl(u.ulevel) > 3) {
 		    	/* KMH -- Only a chance of this happening */
+/*JP
 				You("feel %s is very angry at you!", a_gname());                    
+*/
+				You("激しい怒りが自分に向けられていると感じた！", a_gname());
 				summon_minion(altaralign, FALSE);
 				summon_minion(altaralign, FALSE);
 		    }
@@ -1602,10 +2122,17 @@
 		    levl[u.ux][u.uy].altarmask =
 			levl[u.ux][u.uy].altarmask | (Align2amask(u.ualign.type));
 		    if (!Blind)
+#if 0 /*JP*/
 			pline_The("altar glows %s.",
 			      hcolor(
 			      u.ualign.type == A_LAWFUL ? NH_WHITE :
 			      u.ualign.type ? NH_BLACK : (const char *)"gray"));
+#else
+			pline("祭壇は%s輝いた．",
+			      jconj_adj(hcolor(
+			      u.ualign.type == A_LAWFUL ? NH_WHITE :
+			      u.ualign.type ? NH_BLACK : (const char *)"灰色の")));
+#endif
 
 		    if (rnl(u.ulevel) > 6 && u.ualign.record > 0 &&
 		       rnd(u.ualign.record) > (3*ALIGNLIM)/4)
@@ -1615,7 +2142,10 @@
 		       !p_coaligned(pri))
 			angry_priest();
 		} else {
+/*JP
 		    pline("Unluckily, you feel the power of %s decrease.",
+*/
+		    pline("不幸にも，%sの力が減少したのを感じた．",
 			  u_gname());
 		    change_luck(-1);
 #ifdef NOARTIFACTWISH
@@ -1638,26 +2168,45 @@
 	    if(u.ugangr < 0) u.ugangr = 0;
 	    if(u.ugangr != saved_anger) {
 		if (u.ugangr) {
+#if 0 /*JP*/
 		    pline("%s seems %s.", u_gname(),
 			  Hallucination ? "groovy" : "slightly mollified");
+#else
+		    pline("%sは%sに見える．", u_gname(),
+			  Hallucination ? "素敵" : "ちょっと和らいだよう");
+#endif
 
 		    if ((int)u.uluck < 0) change_luck(1);
 		} else {
+#if 0 /*JP*/
 		    pline("%s seems %s.", u_gname(), Hallucination ?
 			  "cosmic (not a new fact)" : "mollified");
+#else
+		    pline("%sは%sに見える．", u_gname(), Hallucination ?
+			  "虹色(新事実ではない)" : "軽蔑したよう");
+#endif
 
 		    if ((int)u.uluck < 0) u.uluck = 0;
 		}
 	    } else { /* not satisfied yet */
 		if (Hallucination)
+/*JP
 		    pline_The("gods seem tall.");
+*/
+		    pline("神はお高くとまっているように見える．");
+/*JP
 		else You("have a feeling of inadequacy.");
+*/
+		else You("まだまだだと感じた．");
 	    }
 	} else if(ugod_is_angry()) {
 	    if(value > MAXVALUE) value = MAXVALUE;
 	    if(value > -u.ualign.record) value = -u.ualign.record;
 	    adjalign(value);
+/*JP
 	    You_feel("partially absolved.");
+*/
+	    You("少しだけゆるしてもらえたような気がした．");
 	} else if (u.ublesscnt > 0) {
 	    u.ublesscnt -=
 		((value * (u.ualign.type == A_CHAOTIC ? 500 : 300)) / MAXVALUE);
@@ -1665,15 +2214,27 @@
 	    if(u.ublesscnt != saved_cnt) {
 		if (u.ublesscnt) {
 		    if (Hallucination)
+/*JP
 			You("realize that the gods are not like you and I.");
+*/
+			You("神のツーカーの仲ではないことを悟った．");
 		    else
+/*JP
 			You("have a hopeful feeling.");
+*/
+			pline("希望が見えてきたような気がした．");
 		    if ((int)u.uluck < 0) change_luck(1);
 		} else {
 		    if (Hallucination)
+/*JP
 			pline("Overall, there is a smell of fried onions.");
+*/
+			pline("たまねぎを揚げた匂いがした．");
 		    else
+/*JP
 			You("have a feeling of reconciliation.");
+*/
+			You("許された気がした．");
 		    if ((int)u.uluck < 0) u.uluck = 0;
 		}
 	    }
@@ -1691,8 +2252,14 @@
 		    if (otmp->cursed) uncurse(otmp);
 		    otmp->oerodeproof = TRUE;
 		    dropy(otmp);
+/*JP
 		    at_your_feet("An object");
+*/
+		    at_your_feet("何か");
+/*JP
 		    godvoice(u.ualign.type, "Use my gift wisely!");
+*/
+		    godvoice(u.ualign.type, "我が与えしもの賢く使うべし！");
 		    u.ugifts++;
 		    u.ublesscnt = rnz(300 + (50 * nartifacts));
 		    exercise(A_WIS, TRUE);
@@ -1701,7 +2268,10 @@
 		    discover_artifact(otmp->oartifact);
 		    return(1);
 		} else {
+/*JP
 		    pline("A spellbook appears at your %s!",
+*/
+		    pline("あなたの%s元に魔法書が現れた！",
 				    makeplural(body_part(FOOT)));
 		    bless(mkobj_at(SPBOOK_CLASS,
 				    u.ux, u.uy, TRUE));
@@ -1724,10 +2294,18 @@
 	    if ((int)u.uluck < 0) u.uluck = 0;
 	    if (u.uluck != saved_luck) {
 		if (Blind)
+/*JP
 		    You("think %s brushed your %s.",something, body_part(FOOT));
+*/
+		    pline("%sがあなたの%sをくすぐった．", something, body_part(FOOT));
 		else You(Hallucination ?
+#if 0 /*JP*/
 		    "see crabgrass at your %s.  A funny thing in a dungeon." :
 		    "glimpse a four-leaf clover at your %s.",
+#else
+		    "%s元にペンペン草をみつけた．迷宮にしては珍しい．":
+		    "四葉のクローバーを%s元に見つけた．",
+#endif
 		    makeplural(body_part(FOOT)));
 	    }
 	}
@@ -1749,13 +2327,21 @@
 
     if (is_demon(youmonst.data) && (p_aligntyp != A_CHAOTIC)) {
 	if (praying)
+#if 0 /*JP*/
 	    pline_The("very idea of praying to a %s god is repugnant to you.",
 		  p_aligntyp ? "lawful" : "neutral");
+#else
+	    pline("%sの神に祈りをささげるのは常識に背く．",
+		p_aligntyp ? "秩序" : "中立");
+#endif
 	return FALSE;
     }
 
     if (praying)
+/*JP
 	You("begin praying to %s.", align_gname(p_aligntyp));
+*/
+	You("%sに祈りを捧げた．", align_gname(p_aligntyp));
 
     if (u.ualign.type && u.ualign.type == -p_aligntyp)
 	alignment = -u.ualign.record;		/* Opposite alignment altar */
@@ -1794,7 +2380,10 @@
 
     /* Confirm accidental slips of Alt-P */
     if (flags.prayconfirm)
+/*JP
 	if (yn("Are you sure you want to pray?") == 'n')
+*/
+	if (yn("祈りますか？") == 'n')
 	    return 0;
 
     u.uconduct.gnostic++;
@@ -1805,12 +2394,21 @@
     flags.soundok = 1;
 
     if (IS_TOILET(levl[u.ux][u.uy].typ)) {
+/*JP
 	pline("You pray to the Porcelain God.");
+*/
+	pline("あなたは厠の神に祈った．");
 	if (!Sick && !HConfusion && !HStun) {
+/*JP
 	    pline("He ignores your pleas.");
+*/
+	    pline("彼はあなたの祈りを無視した．");
 	    return(1);
 	}
+/*JP
 	pline("He smiles upon you.");
+*/
+	pline("彼はあなたに微笑みかけた．");
 	if (Sick) make_sick(0L, (char *)0, TRUE, SICK_ALL);
 	if (HConfusion) make_confused(0L, TRUE);
 	if (HStun) make_stunned(0L, TRUE);
@@ -1822,7 +2420,10 @@
 
 #ifdef WIZARD
     if (wizard && p_type >= 0) {
+/*JP
 	if (yn("Force the gods to be pleased?") == 'y') {
+*/
+	if (yn("無理矢理神に微笑んでもらいますか？") == 'y') {
 	    u.ublesscnt = 0;
 	    if (u.uluck < 0) u.uluck = 0;
 	    if (u.ualign.record <= 0) u.ualign.record = 1;
@@ -1832,12 +2433,18 @@
     }
 #endif
     nomul(-3);
+/*JP
     nomovemsg = "You finish your prayer.";
+*/
+    nomovemsg = "祈り終えた．";
     afternmv = prayer_done;
 
 	/* if you've been true to your god you can't die while you pray */
     if(p_type == 3 && !Inhell) {
+/*JP
 	if (!Blind) You("are surrounded by a shimmering light.");
+*/
+	if (!Blind) You("かすかな光につつまれた．");
 	u.uinvulnerable = TRUE;
     }
     return(1);
@@ -1852,9 +2459,17 @@
     if(p_type == -1) {
 	godvoice(alignment,
 		 alignment == A_LAWFUL ?
+#if 0 /*JP*/
 		 "Vile creature, thou durst call upon me?" :
 		 "Walk no more, perversion of nature!");
+#else
+		 "卑劣な生物よ，汝，我に祈りを求めたか？" :
+		 "動くな！死にぞこないの生物よ！");
+#endif
+/*JP
 	You_feel("like you are falling apart.");
+*/
+	You("バラバラになったような気がした．");
 	if (Upolyd) {
 	    /* KMH, balance patch -- Gods have mastery over unchanging */
 	rehumanize();
@@ -1862,12 +2477,18 @@
 	/* ALI, Racially undead (ie., vampires) get the same penalties */
 	else if (rn2(20) > ACURR(A_CON))
 	    u.uhp = (u.uhp/2) + 1;
+/*JP
 	losehp(rnd(20), "residual undead turning effect", KILLED_BY_AN);
+*/
+	losehp(rnd(20), "不死の生物を元に戻す力で", KILLED_BY_AN);
 	exercise(A_CON, FALSE);
 	return(1);
     }
     if (Inhell) {
+/*JP
 	pline("Since you are in Gehennom, %s won't help you.",
+*/
+	pline("ゲヘナに%sの力は届かない．",
 	      align_gname(alignment));
 	/* haltingly aligned is least likely to anger */
 	if (u.ualign.record <= 0 || rnl(u.ualign.record))
@@ -1919,7 +2540,10 @@
 			    return spelleffects(sp_no, TRUE);
 		}
 
+/*JP
 		You("don't know how to turn undead!");
+*/
+		You("不死の生き物を土に戻す方法を知らない！");
 		return(0);
 	}
 	return(turn_undead());
@@ -1937,18 +2561,27 @@
 		    (is_demon(youmonst.data) || is_undead(youmonst.data))) ||
 				u.ugangr > 6 /* "Die, mortal!" */) {
 
+/*JP
 		pline("For some reason, %s seems to ignore you.", u_gname());
+*/
+		pline("なぜか，%sはあなたを無視したようだ．", u_gname());
 		aggravate();
 		exercise(A_WIS, FALSE);
 		return(0);
 	}
 
 	if (Inhell) {
+/*JP
 	    pline("Since you are in Gehennom, %s won't help you.", u_gname());
+*/
+	    pline("ゲヘナに%sの力は届かない．", u_gname());
 	    aggravate();
 	    return(0);
 	}
+/*JP
 	pline("Calling upon %s, you chant an arcane formula.", u_gname());
+*/
+	pline("%sに祈りを求めると，あなたは不可思議な言葉の聖歌を聞いた．", u_gname());
 	exercise(A_WIS, TRUE);
 
 	/* note: does not perform unturn_dead() on victims' inventories */
@@ -1968,7 +2601,10 @@
 		    mtmp->msleeping = 0;
 		    if (Confusion) {
 			if (!once++)
+/*JP
 			    pline("Unfortunately, your voice falters.");
+*/
+			    pline("残念ながら，あなたの声はどもってしまった．");
 			mtmp->mflee = 0;
 			mtmp->mfrozen = 0;
 			mtmp->mcanmove = 1;
@@ -2040,10 +2676,16 @@
      case A_NEUTRAL:	gnam = urole.ngod; break;
      case A_CHAOTIC:	gnam = urole.cgod; break;
      default:		impossible("unknown alignment.");
+/*JP
 			gnam = "someone"; break;
+*/
+			return "誰か";
     }
     if (*gnam == '_') ++gnam;
+/*JP
     return gnam;
+*/
+    return jtrns_mon(gnam);
 }
 
 /* hallucination handling for priest/minion names: select a random god
@@ -2066,7 +2708,10 @@
     }
     if (!gnam) gnam = Moloch;
     if (*gnam == '_') ++gnam;
+/*JP
     return gnam;
+*/
+    return jtrns_mon(gnam);
 }
 
 /* deity's title */
@@ -2074,7 +2719,10 @@
 align_gtitle(alignment)
 aligntyp alignment;
 {
+/*JP
     const char *gnam, *result = "god";
+*/
+    const char *gnam, *result = "主神";
 
     switch (alignment) {
      case A_LAWFUL:	gnam = urole.lgod; break;
@@ -2082,7 +2730,10 @@
      case A_CHAOTIC:	gnam = urole.cgod; break;
      default:		gnam = 0; break;
     }
+/*JP
     if (gnam && *gnam == '_') result = "goddess";
+*/
+    if (gnam && *gnam == '_') result = "女神";
     return result;
 }
 
@@ -2093,12 +2744,21 @@
     aligntyp altaralign = a_align(x,y);
 
     if(!strcmp(align_gname(altaralign), u_gname())) {
+/*JP
 	godvoice(altaralign, "How darest thou desecrate my altar!");
+*/
+	godvoice(altaralign, "汝，我が祭壇を汚すか！");
 	(void) adjattrib(A_WIS, -1, FALSE);
     } else {
+/*JP
 	pline("A voice (could it be %s?) whispers:",
+*/
+	pline("ささやき声が聞こえる(たぶん%s？):",
 	      align_gname(altaralign));
+/*JP
 	verbalize("Thou shalt pay, infidel!");
+*/
+	verbalize("異端者よ！報いを受けよ！");
 	change_luck(-1);
     }
 }
@@ -2192,10 +2852,17 @@
 		    bless(otmp);
 		    otmp->bknown = TRUE;
 		    if (!Blind)
+#if 0 /*JP*/
 			    Your("%s %s.",
 				 what ? what :
 				 (const char *)aobjnam (otmp, "softly glow"),
 				 hcolor(NH_AMBER));
+#else
+			    Your("%sは%sやわらかく輝いた．",
+				 what ? what :
+				 (const char *)xname(otmp),
+				 jconj_adj(hcolor(NH_AMBER)));
+#endif
 			break;
 		}
 	}
diff -aurN slashem-0.0.7E6F2/src/priest.c jslashem-0.0.7E6F2-J0.0.8/src/priest.c
--- slashem-0.0.7E6F2/src/priest.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/priest.c	2004-06-27 16:54:26.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Izchak Miller, Steve Linhart, 1989.		  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "mfndpos.h"
 #include "eshk.h"
@@ -99,7 +107,10 @@
 		    check_special_room(FALSE);
 		if(ib) {
 			if (cansee(mtmp->mx,mtmp->my))
+/*JP
 			    pline("%s picks up %s.", Monnam(mtmp),
+*/
+			    pline("%sは%sを拾った．", Monnam(mtmp),
 				distant_name(ib,doname));
 			obj_extract_self(ib);
 			(void) mpickobj(mtmp, ib);
@@ -165,7 +176,10 @@
 	   (Conflict && !resist(priest, RING_CLASS, 0, 0))) {
 		if(monnear(priest, u.ux, u.uy)) {
 			if(Displaced)
+/*JP
 				Your("displaced image doesn't fool %s!",
+*/
+			        Your("幻影は%sをだませなかった！",
 					mon_nam(priest));
 			(void) mattacku(priest);
 			return(0);
@@ -259,40 +273,84 @@
 register struct monst *mon;
 char *pname;		/* caller-supplied output buffer */
 {
+#if 0 /*JP*/
 	const char *what = Hallucination ? rndmonnam() : mon->data->mname;
+#else
+	const char *what = Hallucination ? rndmonnam() :
+	    jtrns_mon_gen(mon->data->mname, mon->female);
+#endif
 
+/*JP
 	Strcpy(pname, "the ");
+*/
+	Strcpy(pname, "");
+/*JP
 	if (mon->minvis) Strcat(pname, "invisible ");
+*/
+	if (mon->minvis) Strcat(pname, "透明な");
 	if (mon->ispriest || mon->data == &mons[PM_ALIGNED_PRIEST] ||
 					mon->data == &mons[PM_ANGEL]) {
 		/* use epri */
+#if 1 /*JP*/
+		Strcat(pname, halu_gname((int)EPRI(mon)->shralign));
+		Strcat(pname, "の");
+#endif
 		if (mon->mtame && mon->data == &mons[PM_ANGEL])
+/*JP
 			Strcat(pname, "guardian ");
+*/
+			Strcat(pname, "警護の");
 		if (mon->data != &mons[PM_ALIGNED_PRIEST] &&
 				mon->data != &mons[PM_HIGH_PRIEST]) {
 			Strcat(pname, what);
+#if 0 /*JP*/
 			Strcat(pname, " ");
+#endif
 		}
 		if (mon->data != &mons[PM_ANGEL]) {
 			if (!mon->ispriest && EPRI(mon)->renegade)
+/*JP
 				Strcat(pname, "renegade ");
+*/
+				Strcat(pname, "裏切り者の");
 			if (mon->data == &mons[PM_HIGH_PRIEST])
+/*JP
 				Strcat(pname, "high ");
+*/
+				Strcat(pname, "位の高い");
 			if (Hallucination)
+/*JP
 				Strcat(pname, "poohbah ");
+*/
+				Strcat(pname, "無能官僚");
 			else if (mon->female)
+/*JP
 				Strcat(pname, "priestess ");
+*/
+				Strcat(pname, "尼僧");
 			else
+/*JP
 				Strcat(pname, "priest ");
+*/
+				Strcat(pname, "僧侶");
 		}
+#if 0 /*JP*/
 		Strcat(pname, "of ");
 		Strcat(pname, halu_gname((int)EPRI(mon)->shralign));
+#endif
 		return(pname);
 	}
 	/* use emin instead of epri */
+#if 0 /*JP*/
 	Strcat(pname, what);
 	Strcat(pname, " of ");
 	Strcat(pname, halu_gname(EMIN(mon)->min_align));
+#else
+	Strcat(pname, halu_gname(EMIN(mon)->min_align));
+	Strcat(pname, "の");
+	Strcat(pname, what);
+#endif
+
 	return(pname);
 }
 
@@ -356,22 +414,41 @@
 		       the endgame; for the Sanctum, the next message names
 		       Moloch so suppress the "of Moloch" for him here too */
 		    if (sanctum && !Hallucination) priest->ispriest = 0;
+#if 0 /*JP*/
 		    pline("%s intones:",
 			canseemon(priest) ? Monnam(priest) : "A nearby voice");
+#else
+		    pline("%sが詠唱した：",
+			canseemon(priest) ? Monnam(priest) : "近くで誰か");
+#endif
 		    priest->ispriest = save_priest;
 		}
 		msg2 = 0;
 		if(sanctum && Is_sanctum(&u.uz)) {
 		    if(priest->mpeaceful) {
+/*JP
 			msg1 = "Infidel, you have entered Moloch's Sanctum!";
+*/
+			msg1 = "異端者よ！ここは，モーロックの聖域だ！";
+/*JP
 			msg2 = "Be gone!";
+*/
+			msg2 = "立ちされ！";
 			priest->mpeaceful = 0;
 			set_malign(priest);
 		    } else
+/*JP
 			msg1 = "You desecrate this place by your presence!";
+*/
+		        msg1 = "おまえはこの神聖な場所を汚している！";
 		} else {
+#if 0 /*JP*/
 		    Sprintf(buf, "Pilgrim, you enter a %s place!",
 			    !shrined ? "desecrated" : "sacred");
+#else
+		    Sprintf(buf, "巡礼者よ，おまえは%s地にいる！",
+			    !shrined ? "不浄の" : "神聖なる");
+#endif
 		    msg1 = buf;
 		}
 		if (can_speak) {
@@ -382,16 +459,31 @@
 		    /* !tended -> !shrined */
 		    if (!shrined || !p_coaligned(priest) ||
 			    u.ualign.record <= ALGN_SINNED)
+#if 0 /*JP*/
 			You("have a%s forbidding feeling...",
 				(!shrined) ? "" : " strange");
+#else
+			You("%s近づきがたい気持がした．．．",
+				(!shrined) ? "" : "奇妙な");
+#endif
+/*JP
 		    else You("experience a strange sense of peace.");
+*/
+		    else You("奇妙な満ち足りた気持ちになった．");
 		}
 	    } else {
 		switch(rn2(3)) {
+#if 0 /*JP*/
 		  case 0: You("have an eerie feeling..."); break;
 		  case 1: You_feel("like you are being watched."); break;
 		  default: pline("A shiver runs down your %s.",
 			body_part(SPINE)); break;
+#else
+		  case 0: You("ぞっとした．．．"); break;
+		  case 1: You("見つめられているような気がした．"); break;
+		  default: pline("あなたの%sを震えが走った．",
+			body_part(SPINE)); break;
+#endif
 		}
 		if(!rn2(5)) {
 		    struct monst *mtmp;
@@ -399,14 +491,26 @@
 		    if(!(mtmp = makemon(&mons[PM_GHOST],u.ux,u.uy,NO_MM_FLAGS)))
 			return;
 		    if (!Blind || sensemon(mtmp))
+/*JP
 			pline("An enormous ghost appears next to you!");
+*/
+		    pline("巨大な幽霊があなたのすぐそばに現われた！");
+/*JP
 		    else You("sense a presence close by!");
+*/
+		    else You("すぐそばに何かがいるのを感じた！");
 		    mtmp->mpeaceful = 0;
 		    set_malign(mtmp);
 		    if(flags.verbose)
+/*JP
 			You("are frightened to death, and unable to move.");
+*/
+			You("まっさおになって驚き，動けなくなった．");
 		    nomul(-3);
+/*JP
 		    nomovemsg = "You regain your composure.";
+*/
+		    nomovemsg = "あなたは平静を取り戻した．";
 	       }
 	   }
        }
@@ -423,7 +527,10 @@
 	u.uconduct.gnostic++;
 
 	if(priest->mflee || (!priest->ispriest && coaligned && strayed)) {
+/*JP
 	    pline("%s doesn't want anything to do with you!",
+*/
+	    pline("%sはあなたにかまいたくないようだ！",
 				Monnam(priest));
 	    priest->mpeaceful = 0;
 	    return;
@@ -433,13 +540,22 @@
 	if(!histemple_at(priest,priest->mx,priest->my) ||
 		 !priest->mpeaceful || !priest->mcanmove || priest->msleeping) {
 	    static const char *cranky_msg[3] = {
+#if 0 /*JP*/
 		"Thou wouldst have words, eh?  I'll give thee a word or two!",
 		"Talk?  Here is what I have to say!",
 		"Pilgrim, I would speak no longer with thee."
+#else
+		"汝言葉を望むのか？",
+		"話す？何を言えばよいのだ！",
+		"巡礼者よ，汝に語ることなどない．"
+#endif
 	    };
 
 	    if(!priest->mcanmove || priest->msleeping) {
+/*JP
 		pline("%s breaks out of %s reverie!",
+*/
+		pline("%sは%sの瞑想を中断した！",
 		      Monnam(priest), mhis(priest));
 		priest->mfrozen = priest->msleeping = 0;
 		priest->mcanmove = 1;
@@ -452,7 +568,10 @@
 	/* you desecrated the temple and now you want to chat? */
 	if(priest->mpeaceful && *in_rooms(priest->mx, priest->my, TEMPLE) &&
 		  !has_shrine(priest)) {
+/*JP
 	    verbalize("Begone!  Thou desecratest this holy place with thy presence.");
+*/
+	    verbalize("立ち去れ！汝はこの神聖なる場所を汚している．");
 	    priest->mpeaceful = 0;
 	    return;
 	}
@@ -461,8 +580,13 @@
 	    if(coaligned && !strayed) {
 		if (priest->mgold > 0L) {
 		    /* Note: two bits is actually 25 cents.  Hmm. */
+#if 0 /*JP*/
 		    pline("%s gives you %s for an ale.", Monnam(priest),
 			(priest->mgold == 1L) ? "one bit" : "two bits");
+#else
+		    pline("%sはあなたがエール酒を飲めるように，%sを与えた．", Monnam(priest),
+			(priest->mgold == 1L) ? "金貨1枚" : "金貨2枚");
+#endif
 		    if (priest->mgold > 1L)
 			u.ugold = 2L;
 		    else
@@ -475,37 +599,66 @@
                 long pmoney = money_cnt(priest->minvent);
 		if (pmoney > 0L) {
 		    /* Note: two bits is actually 25 cents.  Hmm. */
+#if 0 /*JP*/
 		    pline("%s gives you %s for an ale.", Monnam(priest),
 			(pmoney == 1L) ? "one bit" : "two bits");
+#else
+		    pline("%sはあなたがエール酒を飲めるように，%sを与えた．", Monnam(priest),
+			(priest->mgold == 1L) ? "金貨1枚" : "金貨2枚");
+#endif
 		     money2u(priest, pmoney > 1L ? 2 : 1);
 #endif
 		} else
+/*JP
 		    pline("%s preaches the virtues of poverty.", Monnam(priest));
+*/
+		    pline("%sは貧困の美徳について説教した．", Monnam(priest));
 		exercise(A_WIS, TRUE);
 	    } else
+/*JP
 		pline("%s is not interested.", Monnam(priest));
+*/
+		pline("%sは興味を示さない．", Monnam(priest));
 	    return;
 	} else {
 	    long offer;
 
+/*JP
 	    pline("%s asks you for a contribution for the temple.",
+*/
+	    pline("%sはあなたに寺院への寄贈を求めた．",
 			Monnam(priest));
 	    if((offer = bribe(priest)) == 0) {
+/*JP
 		verbalize("Thou shalt regret thine action!");
+*/
+		verbalize("汝の行為は神を冒涜するものなり！");
 		if(coaligned) adjalign(-1);
 	    } else if(offer < (u.ulevel * 200)) {
 #ifndef GOLDOBJ
+/*JP
 		if(u.ugold > (offer * 2L)) verbalize("Cheapskate.");
+*/
+		if(u.ugold > (offer * 2L)) verbalize("ケチめ．");
 #else
+/*JP
 		if(money_cnt(invent) > (offer * 2L)) verbalize("Cheapskate.");
+*/
+		if(money_cnt(invent) > (offer * 2L)) verbalize("ケチめ．");
 #endif
 		else {
+/*JP
 		    verbalize("I thank thee for thy contribution.");
+*/
+		    verbalize("汝の寄贈に報いようぞ．");
 		    /*  give player some token  */
 		    exercise(A_WIS, TRUE);
 		}
 	    } else if(offer < (u.ulevel * 400)) {
+/*JP
 		verbalize("Thou art indeed a pious individual.");
+*/
+		verbalize("汝，まさに敬虔なり．");
 #ifndef GOLDOBJ
 		if(u.ugold < (offer * 2L)) {
 #else
@@ -513,20 +666,29 @@
 #endif
 		    if (coaligned && u.ualign.record <= ALGN_SINNED)
 			adjalign(1);
+/*JP
 		    verbalize("I bestow upon thee a blessing.");
+*/
+		    verbalize("汝に祝福を．");
 		    /* KMH, intrinsic patch */
 		    incr_itimeout(&HClairvoyant, rn1(500,500));
 		}
 	    } else if(offer < (u.ulevel * 600) &&
 		      u.ublessed < 20 &&
 		      (u.ublessed < 9 || !rn2(u.ublessed))) {
+/*JP
 		verbalize("Thy devotion has been rewarded.");
+*/
+		verbalize("汝が献身に報わん．");
 		if (!(HProtection & INTRINSIC))  {
 			HProtection |= FROMOUTSIDE;
 			if (!u.ublessed)  u.ublessed = rn1(3, 2);
 		} else u.ublessed++;
 	    } else {
+/*JP
 		verbalize("Thy selfless generosity is deeply appreciated.");
+*/
+		verbalize("汝自身の真価は大いに認められた．");
 #ifndef GOLDOBJ
 		if(u.ugold < (offer * 2L) && coaligned) {
 #else
@@ -763,15 +925,24 @@
 
 	switch(rn2(3)) {
 	case 0:
+/*JP
 	    pline("%s roars in anger:  \"Thou shalt suffer!\"",
+*/
+	    pline("%sは怒りの声をあげた：「汝，苦しむがよい！」",
 			a_gname_at(ax, ay));
 	    break;
 	case 1:
+/*JP
 	    pline("%s voice booms:  \"How darest thou harm my servant!\"",
+*/
+	    pline("%sの声が響いた：「わが下僕に苦しむがよい！」",
 			s_suffix(a_gname_at(ax, ay)));
 	    break;
 	default:
+/*JP
 	    pline("%s roars:  \"Thou dost profane my shrine!\"",
+*/
+	    pline("%sの声が聞こえる：「汝，我が聖堂を汚したり！」",
 			a_gname_at(ax, ay));
 	    break;
 	}
diff -aurN slashem-0.0.7E6F2/src/quest.c jslashem-0.0.7E6F2-J0.0.8/src/quest.c
--- slashem-0.0.7E6F2/src/quest.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/quest.c	2004-06-27 16:54:30.000000000 +0900
@@ -2,6 +2,14 @@
 /*	Copyright 1991, M. Stephenson		  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /*  quest dungeon branch routines. */
@@ -115,14 +123,28 @@
 #ifdef WIZARD
     if (wizard && talk) {
 	if (u.ualign.type != original_alignment) {
+#if 0 /*JP*/
 	    You("are currently %s instead of %s.",
 		align_str(u.ualign.type), align_str(original_alignment));
+#else
+	    You("%sではなく%sの属性である．",
+		align_str(original_alignment), align_str(u.ualign.type));
+#endif
 	} else if (u.ualignbase[A_CURRENT] != original_alignment) {
+/*JP
 	    You("have converted.");
+*/
+	    You("変更されている．");
 	} else if (u.ualign.record < MIN_QUEST_ALIGN) {
+/*JP
 	    You("are currently %d and require %d.",
+*/
+	    Your("属性値は現在%dで%d必要だ．",
 		u.ualign.record, MIN_QUEST_ALIGN);
+/*JP
 	    if (yn_function("adjust?", (char *)0, 'y') == 'y')
+*/
+	    if (yn_function("直す？", (char *)0, 'y') == 'y')
 		u.ualign.record = MIN_QUEST_ALIGN;
 	}
     }
@@ -329,9 +351,14 @@
 	if (mtmp->data == &mons[PM_PRISONER] &&
 			(mtmp->mstrategy & STRAT_WAITMASK)) {
 	    /* Awaken the prisoner */
+#if 0 /*JP*/
 	    if (canseemon(mtmp))
 	    	pline("%s speaks:", Monnam(mtmp));
 	    verbalize("I'm finally free!");
+#else
+	    	pline("%sは話した：", Monnam(mtmp));
+	    verbalize("ついに自由だ！");
+#endif
 	    mtmp->mstrategy &= ~STRAT_WAITMASK;
 	    mtmp->mpeaceful = 1;
 
diff -aurN slashem-0.0.7E6F2/src/questpgr.c jslashem-0.0.7E6F2-J0.0.8/src/questpgr.c
--- slashem-0.0.7E6F2/src/questpgr.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/questpgr.c	2004-06-27 16:54:32.000000000 +0900
@@ -2,6 +2,14 @@
 /*	Copyright 1991, M. Stephenson		  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details.
+*/
+
 #include "hack.h"
 #include "dlb.h"
 
@@ -30,7 +38,9 @@
 static struct	qtlists	qt_list;
 static dlb	*msg_file;
 /* used by ldrname() and neminame(), then copied into cvt_buf */
+#if 0 /*JP*/
 static char	nambuf[sizeof cvt_buf];
+#endif
 
 #ifdef DEBUG
 static void NDECL(dump_qtlist);
@@ -166,10 +176,14 @@
 {
 	int i = urole.ldrnum;
 
+#if 0 /*JP*/
 	Sprintf(nambuf, "%s%s",
 		type_is_pname(&mons[i]) ? "" : "the ",
 		mons[i].mname);
 	return nambuf;
+#else
+	return(jtrns_mon(mons[i].mname));
+#endif
 }
 
 STATIC_OVL const char *
@@ -190,10 +204,14 @@
 {
 	int i = urole.neminum;
 
+#if 0 /*JP*/
 	Sprintf(nambuf, "%s%s",
 		type_is_pname(&mons[i]) ? "" : "the ",
 		mons[i].mname);
 	return nambuf;
+#else
+	return(jtrns_mon(mons[i].mname));
+#endif
 }
 
 STATIC_OVL const char *
@@ -201,7 +219,10 @@
 {
 	int i = urole.guardnum;
 
+/*JP
 	return(mons[i].mname);
+*/
+	return(jtrns_mon(mons[i].mname));
 }
 
 STATIC_OVL const char *
@@ -233,23 +254,37 @@
 
 	    case 'p':	str = plname;
 			break;
+#if 0 /*JP*/
 	    case 'c':	str = (flags.female && urole.name.f) ?
 	    			urole.name.f : urole.name.m;
+#else
+	    case 'c':	str = (flags.female && urole.jname.f) ?
+	    			urole.jname.f : urole.jname.m;
+#endif
 			break;
 	    case 'r':	str = rank_of(u.ulevel, Role_switch, flags.female);
 			break;
 	    case 'R':	str = rank_of(MIN_QUEST_LEVEL, Role_switch,
 	    			flags.female);
 			break;
+/*JP
 	    case 's':	str = (flags.female) ? "sister" : "brother";
+*/
+	    case 's':	str = (flags.female) ? "妹" : "弟";
 			break;
+/*JP
 	    case 'S':	str = (flags.female) ? "daughter" : "son";
+*/
+	    case 'S':	str = (flags.female) ? "娘" : "息子";
 			break;
 	    case 'l':	str = ldrname();
 			break;
 	    case 'i':	str = intermed();
 			break;
+/*JP
 	    case 'o':	str = the(artiname(urole.questarti));
+*/
+	    case 'o':	str = jtrns_obj('A', (artiname(urole.questarti)));
 			break;
 	    case 'n':	str = neminame();
 			break;
@@ -263,19 +298,40 @@
 			break;
 	    case 'A':	str = align_str(u.ualign.type);
 			break;
+/*JP
 	    case 'd':	str = align_gname(u.ualignbase[A_ORIGINAL]);
+*/
+	    case 'd':	str = jtrns_mon(align_gname(u.ualignbase[A_ORIGINAL]));
 			break;
+/*JP
 	    case 'D':	str = align_gname(A_LAWFUL);
+*/
+	    case 'D':	str = jtrns_mon(align_gname(A_LAWFUL));
 			break;
+/*JP
 	    case 'C':	str = "chaotic";
+*/
+	    case 'C':	str = "混沌";
 			break;
+/*JP
 	    case 'N':	str = "neutral";
+*/
+	    case 'N':	str = "中立";
 			break;
+/*JP
 	    case 'L':	str = "lawful";
+*/
+	    case 'L':	str = "秩序";
 			break;
+/*JP
 	    case 'x':	str = Blind ? "sense" : "see";
+*/
+	    case 'x':	str = Blind ? "感じ" : "見";
 			break;
+/*JP
 	    case 'Z':	str = dungeons[0].dname;
+*/
+	    case 'Z':	str = jtrns_obj('d',dungeons[0].dname);
 			break;
 	    case '%':	str = "%";
 			break;
diff -aurN slashem-0.0.7E6F2/src/read.c jslashem-0.0.7E6F2-J0.0.8/src/read.c
--- slashem-0.0.7E6F2/src/read.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/read.c	2004-07-27 09:27:58.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 
@@ -27,7 +35,11 @@
 
 
 static char *warnings[] = {
+#if 0 /*JP*/
 	"white", "pink", "red", "ruby", "purple", "black"
+#else
+	"白い","ピンク色の","赤い","ルビー色の","紫の","黒い"
+#endif
 };
 
 #if 0
@@ -60,7 +72,10 @@
 
 	known = FALSE;
 	if(check_capacity((char *)0)) return (0);
+/*JP
 	scroll = getobj(class_list, "read");
+*/
+	scroll = getobj(class_list, "読む");
 	if(!scroll) return(0);
 
 	if (scroll == &thisplace) {
@@ -73,11 +88,17 @@
 	    char *clr = (char *)0;
 
 	    if (Blind) {
+/*JP
 		You("cannot see it!");
+*/
+		You("それを見ることができない！");
 		return 0;
 	    }
 	    if (scroll->where != OBJ_INVENT || !(scroll->owornmask & W_RING)) {
+/*JP
 		pline("Perhaps you should put it on first.");
+*/
+		pline("おそらく，それを一番上に置くべきだろう．");
 		return 0;
 	    }
 	    if (scroll->dknown && objects[scroll->otyp].oc_name_known)
@@ -94,30 +115,61 @@
 			break;
 		    case RIN_MOOD:
 			if (u.ualign.record >= DEVOUT)
+#if 0 /*JP*/
 			    clr = "green";	/* well-pleased */
+#else
+			    clr = "緑色の";	/* well-pleased */
+#endif
 			else if (u.ualign.record >= STRIDENT)
+#if 0 /*JP*/
 			    clr = "yellow";	/* pleased */
+#else
+			    clr = "黄色の";	/* pleased */
+#endif
 			else if (u.ualign.record > 0)
+#if 0 /*JP*/
 			    clr = "orange";	/* satisfied */
+#else
+			    clr = "橙色の";	/* satisfied */
+#endif
 			else
+#if 0 /*JP*/
 			    clr = "red";	/* you've been naughty */
+#else
+			    clr = "赤色の";	/* you've been naughty */
+#endif
 			break;
 		    default:
 			break;
 		}
 	    if (!clr)
+#if 0 /*JP*/
 		pline("There seems to be nothing special about this ring.");
+#else
+		pline("この指輪に特別なものは何も見つからなかった．");
+#endif
 	    else if (scroll->cursed)
+#if 0 /*JP*/
 		pline("It appears dark.");
+#else
+		pline("それは暗く見えた．");
+#endif
 	    else
+#if 0 /*JP*/
 		pline("It glows %s!", hcolor(clr));
+#else
+		pline("それは%s輝いた！", jconj_adj(hcolor(clr)));
+#endif
 	    return 1;
 	}
 
 	/* outrumor has its own blindness check */
 	if(scroll->otyp == FORTUNE_COOKIE) {
 	    if(flags.verbose)
+/*JP
 		You("break up the cookie and throw away the pieces.");
+*/
+		You("クッキーを割り，かけらを投げすてた．");
 	    outrumor(bcsign(scroll), BY_COOKIE);
 	    if (!Blind) u.uconduct.literate++;
 		if (carried(scroll)) useup(scroll);
@@ -126,6 +178,7 @@
 #ifdef TOURIST
 	} else if (scroll->otyp == T_SHIRT) {
 	    static const char *shirt_msgs[] = { /* Scott Bigham */
+#if 0 /*JP*/
     "I explored the Dungeons of Doom and all I got was this lousy T-shirt!",
     "Is that Mjollnir in your pocket or are you just happy to see me?",
     "It's not the size of your sword, it's how #enhance'd you are with it.",
@@ -142,38 +195,77 @@
     "Don't Panic",				/* HHGTTG */
     "Furinkan High School Athletic Dept.",	/* Ranma 1/2 */
     "Hel-LOOO, Nurse!",			/* Animaniacs */
+#else
+    "私は運命の迷宮を調査していたが，手に入れたのはきたないＴシャツだけだった！",
+    "ポケットにミュルニールが入っているの？それとも私に会えてうれしい？",
+    "剣の大きさが問題なのではない．それが如何に#enhanceされているかなのだ．",
+    "マダム・エルバイラのサキュバス館 永久顧客",
+    "マダム・エルバイラのサキュバス館 今月の最優秀功労者",
+    "ローディオス金庫の番人，それは暗く小さい部屋の中",
+    "イェンダー軍兵士，それは巨大な団体の中",
+    "私はイェンダー軍の新兵訓練所を乗り越えました",
+    "ローディオス会計学校 室内ラクロスチーム",
+    "Oracle(TM) の泉 第１０回濡れＴシャツコンテスト",
+    "おい，黒ドラゴン！こいつを分解しろ！",
+    "馬鹿と一緒にいます → ",
+    "私は悪くない！Izchakに投票したもの！",
+    "あ わ て る な",	/* 銀河ヒッチハイクガイド */
+    "風林館高校陸上部",	/* Ranma 1/2 */
+    "Ｈｅｌ−ＬＯＯＯ，Ｎｕｒｓｅ！",	/* Animaniacs */
+#endif
 	    };
 	    char buf[BUFSZ];
 	    int erosion;
 
 	    if (Blind) {
+/*JP
 		You_cant("feel any Braille writing.");
+*/
+		You("点字はどうも書いてないようだ．");
 		return 0;
 	    }
 	    u.uconduct.literate++;
 	    if(flags.verbose)
+/*JP
 		pline("It reads:");
+*/
+		pline("それを読んだ：");
 	    Strcpy(buf, shirt_msgs[scroll->o_id % SIZE(shirt_msgs)]);
 	    erosion = greatest_erosion(scroll);
 	    if (erosion)
 		wipeout_text(buf,
 			(int)(strlen(buf) * erosion / (2*MAX_ERODE)),
 			     scroll->o_id ^ (unsigned)u.ubirthday);
+/*JP
 	    pline("\"%s\"", buf);
+*/
+	    pline("「%s」", buf);
 	    return 1;
 #endif	/* TOURIST */
 	} else if (scroll->oclass != SCROLL_CLASS
 		&& scroll->oclass != SPBOOK_CLASS) {
+/*JP
 	    pline(silly_thing_to, "read");
+*/
+	    pline(silly_thing_to, "読む");
 	    return(0);
 	} else if (Blind) {
 	    const char *what = 0;
 	    if (scroll->oclass == SPBOOK_CLASS)
+/*JP
 		what = "mystic runes";
+*/
+		what = "神秘的なルーン文字";
 	    else if (!scroll->dknown)
+/*JP
 		what = "formula on the scroll";
+*/
+		what = "巻物の呪文";
 	    if (what) {
+/*JP
 		pline("Being blind, you cannot read the %s.", what);
+*/
+		pline("目が見えないので，あなたは%sを読むことができない．", what);
 		return(0);
 	    }
 	}
@@ -197,16 +289,30 @@
 		 * These are now part of the illiterate challenge.
 		 */
 	  if(Blind)
+#if 0 /*JP*/
 	    pline("As you %s the formula on it, the scroll disappears.",
 			is_silent(youmonst.data) ? "cogitate" : "pronounce");
+#else
+	    pline("呪文を唱えると，巻物は消えた．");
+#endif
 	  else
+/*JP
 	    pline("As you read the scroll, it disappears.");
+*/
+	    pline("巻物を読むと，それは消えた．");
 	  if(confused) {
 	    if (Hallucination)
+/*JP
 		pline("Being so trippy, you screw up...");
+*/
+		pline("とてもへろへろなので，くしゃくしゃにしてしまった．．．");
 	    else
+#if 0 /*JP*/
 		pline("Being confused, you mis%s the magic words...",
 			is_silent(youmonst.data) ? "understand" : "pronounce");
+#else
+		pline("混乱しているので，呪文を間違ってしまった．．．");
+#endif
 	  }
 	}
 	if(!seffects(scroll))  {
@@ -241,7 +347,10 @@
 		    obj->spe = 0;
 		    if (obj->otyp == OIL_LAMP || obj->otyp == BRASS_LANTERN)
 			obj->age = 0;
+/*JP
 		    Your("%s %s briefly.",xname(obj), otense(obj, "vibrate"));
+*/
+		    Your("%sは小刻みに振動した．",xname(obj));
 		} else pline(nothing_happens);
 	}
 }
@@ -250,8 +359,13 @@
 p_glow1(otmp)
 register struct obj	*otmp;
 {
+#if 0 /*JP*/
 	Your("%s %s briefly.", xname(otmp),
 	     otense(otmp, Blind ? "vibrate" : "glow"));
+#else
+	Your("%sは小刻みに%s．", xname(otmp),
+		Blind ? "振動した" : "輝いた");
+#endif
 }
 
 static void
@@ -259,11 +373,18 @@
 register struct obj	*otmp;
 register const char *color;
 {
+#if 0 /*JP*/
 	Your("%s %s%s%s for a moment.",
 		xname(otmp),
 		otense(otmp, Blind ? "vibrate" : "glow"),
 		Blind ? "" : " ",
 		Blind ? nul : hcolor(color));
+#else
+	Your("%sは一瞬%s%s．",
+		xname(otmp),
+		Blind ? (const char *)"" : jconj_adj(hcolor(color)),
+		Blind ? "振動した" : "輝いた");
+#endif
 }
 
 /* Is the object chargeable?  For purposes of inventory display; it is */
@@ -325,7 +446,10 @@
 	    n = (int)obj->recharged;
 	    if (n > 0 && (obj->otyp == WAN_WISHING ||
 		    (n * n * n > rn2(7*7*7)))) {	/* recharge_limit */
+/*JP
 		Your("%s vibrates violently, and explodes!",xname(obj));
+*/
+		Your("%sは激しく振動し，爆発した！",xname(obj));
 		wand_explode(obj, FALSE);
 		return;
 	    }
@@ -345,7 +469,10 @@
 		if (obj->spe < n) obj->spe = n;
 		else obj->spe++;
 		if (obj->otyp == WAN_WISHING && obj->spe > 3) {
+/*JP
 		    Your("%s vibrates violently, and explodes!",xname(obj));
+*/
+		    Your("%sは激しく振動し，爆発した！",xname(obj));
 		    wand_explode(obj, FALSE);
 		    return;
 		}
@@ -383,7 +510,10 @@
 	     */
 	    n = (int)obj->recharged;
 	    if (n > 0 && (n * n * n > rn2(7*7*7))) {	/* recharge_limit */
+/*JP
 		Your("%s crumbles to dust!", xname(obj));
+*/
+		Your("%sはこなごなにくだけた！", xname(obj));
 		useup(obj);
 		    return;
 		}
@@ -413,17 +543,30 @@
 
 	    /* destruction depends on current state, not adjustment */
 	    if (obj->spe > rn2(7) || obj->spe <= -5) {
+#if 0 /*JP*/
 		Your("%s %s momentarily, then %s!",
 		     xname(obj), otense(obj,"pulsate"), otense(obj,"explode"));
+#else
+		Your("%sは一瞬脈動し，爆発した！",
+  		     xname(obj));
+#endif
 		if (is_on) Ring_gone(obj);
 		s = rnd(3 * abs(obj->spe));	/* amount of damage */
 		useup(obj);
+/*JP
 		losehp(s, "exploding ring", KILLED_BY_AN);
+*/
+		losehp(s, "指輪の爆発で", KILLED_BY_AN);
 	    } else {
 		long mask = is_on ? (obj == uleft ? LEFT_RING :
 				     RIGHT_RING) : 0L;
+#if 0 /*JP*/
 		Your("%s spins %sclockwise for a moment.",
 		     xname(obj), s < 0 ? "counter" : "");
+#else
+		Your("%sは一瞬%s時計回りに回転した．",
+		     xname(obj), s < 0 ? "反" : "");
+#endif
 		/* cause attributes and/or properties to be updated */
 		if (is_on) Ring_off(obj);
 		obj->spe += s;	/* update the ring while it's off */
@@ -456,7 +599,10 @@
 		else if (rechrg && obj->otyp == MAGIC_MARKER) {	/* previously recharged */
 		    obj->recharged = 1;	/* override increment done above */
 		    if (obj->spe < 3)
+/*JP
 			Your("marker seems permanently dried out.");
+*/
+			Your("マーカは完全に乾ききってしまった．");
 		    else
 			pline(nothing_happens);
 		} else if (is_blessed) {
@@ -493,7 +639,11 @@
 		    stripspe(obj);
 		    if (obj->lamplit) {
 			if (!Blind)
+#if 0 /*JP*/
 			    pline("%s out!", Tobjnam(obj, "go"));
+#else
+			    pline("%sは消えた！", xname(obj));
+#endif
 			end_burn(obj, TRUE);
 		    }
 		} else if (is_blessed) {
@@ -519,7 +669,10 @@
 			end_burn(obj, TRUE);
 			obj->age = 0;
 			if (!Blind)
+/*JP
 			    pline("%s deactivates!", The(xname(obj)));
+*/
+			    pline("%sは停止した！", The(xname(obj)));
 		    } else
 			obj->age = 0;
 		} else if (is_blessed) {
@@ -585,7 +738,10 @@
 
 	} else {
  not_chargable:
+/*JP
 	    You("have a feeling of loss.");
+*/
+	    You("なにか損した気分になった．");
 	}
 }
 
@@ -825,7 +981,10 @@
 	case SCR_MAIL:
 		known = TRUE;
 		if (sobj->spe)
+/*JP
 		    pline("This seems to be junk mail addressed to the finder of the Eye of Larn.");
+*/
+		    pline("Eye of Larnのファインダーに宛てられたゴミメイルのようだ．");
 		/* note to the puzzled: the game Larn actually sends you junk
 		 * mail if you win!
 		 */
@@ -842,8 +1001,14 @@
 		otmp = some_armor(&youmonst);
 		if(!otmp) {
 			strange_feeling(sobj,
+/*JP
 					!Blind ? "Your skin glows then fades." :
+*/
+					!Blind ? "あなたの体は一瞬輝いた．" :
+/*JP
 					"Your skin feels warm for a moment.");
+*/
+					"あなたの体は一瞬暖かくなった．");
 			exercise(A_CON, !sobj->cursed);
 			exercise(A_STR, !sobj->cursed);
 			return(1);
@@ -852,23 +1017,42 @@
 			otmp->oerodeproof = !(sobj->cursed);
 			if(Blind) {
 			    otmp->rknown = FALSE;
+#if 0 /*JP*/
 			    Your("%s %s warm for a moment.",
 				xname(otmp), otense(otmp, "feel"));
+#else
+			    Your("%sは一瞬暖かくなった．",
+				xname(otmp));
+#endif
 			} else {
 			    otmp->rknown = TRUE;
+#if 0 /*JP*/
 			    Your("%s %s covered by a %s %s %s!",
 				xname(otmp), otense(otmp, "are"),
 				sobj->cursed ? "mottled" : "shimmering",
 				 hcolor(sobj->cursed ? NH_BLACK : NH_GOLDEN),
 				sobj->cursed ? "glow" :
 				  (is_shield(otmp) ? "layer" : "shield"));
+#else
+			    Your("%sは%s%s%sで覆われた！",
+				xname(otmp),
+				jconj_adj(hcolor(sobj->cursed ? NH_BLACK : NH_GOLDEN)),
+				sobj->cursed ? "光るまだらの" : "ゆらめく",
+				sobj->cursed ? "輝き" :
+				  (is_shield(otmp) ? "バリア" : "バリア"));
+#endif
 			}
 			if (otmp->oerodeproof &&
 			    (otmp->oeroded || otmp->oeroded2)) {
 			    otmp->oeroded = otmp->oeroded2 = 0;
+#if 0 /*JP*/
 			    Your("%s %s as good as new!",
 				 xname(otmp),
 				 otense(otmp, Blind ? "feel" : "look"));
+#else
+			    Your("%sは新品同様になったように%s！",
+				 xname(otmp), Blind ? "感じた" : "見えた");
+#endif
 			}
 			break;
 		}
@@ -892,6 +1076,7 @@
 		s = sobj->cursed ? -otmp->spe : otmp->spe;
 		
 		if (s > (special_armor ? 5 : 3) && rn2(s)) {
+#if 0 /*JP*/
 		Your("%s violently %s%s%s for a while, then %s.",
 		     xname(otmp),
 		     otense(otmp, Blind ? "vibrate" : "glow"),
@@ -899,6 +1084,12 @@
 		     (Blind || same_color) ? nul :
 			hcolor(sobj->cursed ? NH_BLACK : NH_SILVER),
 		     otense(otmp, "evaporate"));
+#else
+		Your("%sはしばらくの間激しく%s%s，蒸発した．",
+			    xname(otmp),
+			    Blind ? nul : jconj_adj(hcolor(sobj->cursed ? NH_BLACK : NH_SILVER)),
+			    Blind ? "振動し" : "輝き");
+#endif
 			if(is_cloak(otmp)) (void) Cloak_off();
 			if(is_boots(otmp)) (void) Boots_off();
 			if(is_helmet(otmp)) (void) Helmet_off();
@@ -920,7 +1111,10 @@
 		if (s >= 0 && otmp->otyp >= GRAY_DRAGON_SCALES &&
 					otmp->otyp <= YELLOW_DRAGON_SCALES) {
 			/* dragon scales get turned into dragon scale mail */
+/*JP
 			Your("%s merges and hardens!", xname(otmp));
+*/
+			Your("%sは融合し固くなった！", xname(otmp));
 			setworn((struct obj *)0, W_ARM);
 			/* assumes same order */
 			otmp->otyp = GRAY_DRAGON_SCALE_MAIL +
@@ -934,6 +1128,7 @@
 			setworn(otmp, W_ARM);
 			break;
 		}
+#if 0 /*JP*/
 		Your("%s %s%s%s%s for a %s.",
 			xname(otmp),
 		        s == 0 ? "violently " : nul,
@@ -941,6 +1136,15 @@
 			(!Blind && !same_color) ? " " : nul,
 			(Blind || same_color) ? nul : hcolor(sobj->cursed ? NH_BLACK : NH_SILVER),
 			  (s*s>1) ? "while" : "moment");
+#else
+		Your("%sは%s%s%s%s．",
+			xname(otmp),
+			(s*s>1) ? "しばらくの間" : "一瞬",
+		        s == 0 ? "激しく" : nul,
+			Blind ? nul : 
+		     jconj_adj(hcolor(sobj->cursed ? NH_BLACK : NH_SILVER)),
+			Blind ? "振動した" : "輝いた");
+#endif
 		otmp->cursed = sobj->cursed;
 		if (!otmp->blessed || sobj->cursed)
 			otmp->blessed = sobj->blessed;
@@ -952,9 +1156,15 @@
 
 		if ((otmp->spe > (special_armor ? 5 : 3)) &&
 		    (special_armor || !rn2(7)))
+#if 0 /*JP*/
 			Your("%s suddenly %s %s.",
 				xname(otmp), otense(otmp, "vibrate"),
 				Blind ? "again" : "unexpectedly");
+#else
+			Your("%sは突然%s振動した．",
+				xname(otmp),
+				Blind ? "また" : "思いもよらず");
+#endif
 		break;
 	    }
 	case SCR_DESTROY_ARMOR:
@@ -962,7 +1172,10 @@
 		otmp = some_armor(&youmonst);
 		if(confused) {
 			if(!otmp) {
+/*JP
 				strange_feeling(sobj,"Your bones itch.");
+*/
+				strange_feeling(sobj,"骨がムズムズする．");
 				exercise(A_STR, FALSE);
 				exercise(A_CON, FALSE);
 				return(1);
@@ -973,14 +1186,20 @@
 		}
 		if(!sobj->cursed || !otmp || !otmp->cursed) {
 		    if(!destroy_arm(otmp)) {
+/*JP
 			strange_feeling(sobj,"Your skin itches.");
+*/
+			strange_feeling(sobj,"皮膚がムズムズする．");
 			exercise(A_STR, FALSE);
 			exercise(A_CON, FALSE);
 			return(1);
 		    } else
 			known = TRUE;
 		} else {	/* armor and scroll both cursed */
+/*JP
 		    Your("%s %s.", xname(otmp), otense(otmp, "vibrate"));
+*/
+		    Your("%sは振動した．", xname(otmp));
 		    if (otmp->spe >= -6) otmp->spe--;
 		    make_stunned(HStun + rn1(10, 10), TRUE);
 		}
@@ -989,40 +1208,79 @@
 	case SCR_CONFUSE_MONSTER:
 	case SPE_CONFUSE_MONSTER:
 		if(youmonst.data->mlet != S_HUMAN || sobj->cursed) {
+/*JP
 			if(!HConfusion) You_feel("confused.");
+*/
+			if(!HConfusion) You("混乱した．");
 			make_confused(HConfusion + rnd(100),FALSE);
 		} else  if(confused) {
 		    if(!sobj->blessed) {
+#if 0 /*JP*/
 			Your("%s begin to %s%s.",
 			    makeplural(body_part(HAND)),
 			    Blind ? "tingle" : "glow ",
 			    Blind ? nul : hcolor(NH_PURPLE));
+#else
+			Your("%sは%s%sはじめた．",
+			    makeplural(body_part(HAND)),
+			    Blind ? nul : jconj_adj(hcolor(NH_PURPLE)),
+			    Blind ? "ヒリヒリし" : "輝き");
+#endif
 			make_confused(HConfusion + rnd(100),FALSE);
 		    } else {
+#if 0 /*JP*/
 			pline("A %s%s surrounds your %s.",
 			    Blind ? nul : hcolor(NH_RED),
 			    Blind ? "faint buzz" : " glow",
 			    body_part(HEAD));
+#else
+			pline("%s%sがあなたの%sを取り巻いた．",
+			    Blind ? nul : jconj_adj(hcolor(NH_RED)),
+			    Blind ? "かすかにブーンと鳴るもの" : "輝くもの",
+			    body_part(HEAD));
+#endif
 			make_confused(0L,TRUE);
 		    }
 		} else {
 		    if (!sobj->blessed) {
+#if 0 /*JP*/
 			Your("%s%s %s%s.",
 			makeplural(body_part(HAND)),
 			Blind ? "" : " begin to glow",
 			Blind ? (const char *)"tingle" : hcolor(NH_RED),
 			u.umconf ? " even more" : "");
+#else
+			Your("%sは%s%s%s．",
+			makeplural(body_part(HAND)),
+			u.umconf ? "少し" : "",
+			Blind ? (const char *)"ヒリヒリした" : 
+			     jconj_adj(hcolor(NH_RED)),
+			Blind ? "" : "輝きはじめた");
+#endif
 			u.umconf++;
 		    } else {
 			if (Blind)
+#if 0 /*JP*/
 			    Your("%s tingle %s sharply.",
 				makeplural(body_part(HAND)),
 				u.umconf ? "even more" : "very");
+#else
+			    Your("%sは%sピリピリする．",
+				makeplural(body_part(HAND)),
+				u.umconf ? "少し" : "とても");
+#endif
 			else
+#if 0 /*JP*/
 			    Your("%s glow a%s brilliant %s.",
 				makeplural(body_part(HAND)),
 				u.umconf ? "n even more" : "",
 				hcolor(NH_RED));
+#else
+			    Your("%sは%s%s明るく輝いた．",
+				makeplural(body_part(HAND)),
+				u.umconf ? "少し" : "",
+				jconj_adj(hcolor(NH_RED)));
+#endif
 			/* after a while, repeated uses become less effective */
 			if (u.umconf >= 40)
 			    u.umconf++;
@@ -1049,20 +1307,38 @@
 		    }
 		}
 		if(!ct)
+#if 0 /*JP*/
 		      You_hear("%s in the distance.",
 			       (confused || sobj->cursed) ? "sad wailing" :
 							"maniacal laughter");
+#else
+		      You_hear("遠くで%sを聞いた．",
+			       (confused || sobj->cursed) ? "悲しく泣き叫ぶ声" :
+							"狂ったように笑う声");
+#endif
 		else if(sobj->otyp == SCR_SCARE_MONSTER)
+#if 0 /*JP*/
 			You_hear("%s close by.",
 				  (confused || sobj->cursed) ? "sad wailing" :
 						 "maniacal laughter");
+#else
+			You_hear("近くで%sを聞いた．",
+				  (confused || sobj->cursed) ? "悲しく泣き叫ぶ声" :
+						 "狂ったように笑う声");
+#endif
 		break;
 	    }
 	case SCR_BLANK_PAPER:
 	    if (Blind)
+/*JP
 		You("don't remember there being any magic words on this scroll.");
+*/
+		You("巻物に呪文が書いてなかったことを思いだした．");
 	    else
+/*JP
 		pline("This scroll seems to be blank.");
+*/
+		pline("この巻物には何も書いてないように見える．");
 	    known = TRUE;
 	    break;
 	/* KMH, balance patch -- removed
@@ -1074,17 +1350,32 @@
 	    {	register struct obj *obj;
 		if(confused) {
 		    if (Hallucination)
+/*JP
 			You_feel("the power of the Force against you!");
+*/
+			You("フォースの力があなたにはむかっているように感じた！");
 		    else
+/*JP
 			You_feel("like you need some help.");
+*/
+			You("自分が助けを必要としているような気がした．");
 		} else
 		    if (Hallucination)
+/*JP
 			You_feel("in touch with the Universal Oneness.");
+*/
+			You("宇宙原理の調和に触れているような気がした．");
 		    else
+/*JP
 			You_feel("like someone is helping you.");
+*/
+			pline("誰かがあなたを助けているような気がした．");
 
 		if (sobj->cursed) {
+/*JP
 		    pline_The("scroll disintegrates.");
+*/
+		    pline("巻物は粉々になった．");
 		} else {
 		    for (obj = invent; obj; obj = obj->nobj) {
 			long wornmask;
@@ -1181,7 +1472,10 @@
 			if (!sobj->cursed && Role_if(PM_NECROMANCER)) {
 			    if (!resist(mtmp, sobj->oclass, 0, TELL)) {
 				mtmp = tamedog(mtmp, (struct obj *) 0);
+/*JP
 				if (mtmp) You("dominate %s!", mon_nam(mtmp));
+*/
+				if (mtmp) You("%sを支配した！", mon_nam(mtmp));
 			    }
 			} else setmangry(mtmp);
 		}
@@ -1195,13 +1489,20 @@
 			int sp_no;
 			for (sp_no = 0; sp_no < MAXSPELL; sp_no++)
 			    if (spl_book[sp_no].sp_id == SPE_COMMAND_UNDEAD) {
+/*JP
 				You("try to command %s", mon_nam(mtmp));
+*/
+				You("%sに命令を下した．", mon_nam(mtmp));
 				spelleffects(sp_no, TRUE);
 				break;
 			    }
 			if (sp_no == MAXSPELL)
+/*JP
 			    You("don't seem to have the spell command undead memorized!");
 		    } else You("don't know how to command undead...");
+*/
+			    You("不死の怪物に命令できる魔法を覚えていないようだ！");
+		    } else You("不死の怪物に命令する術を知らない．．．");
 		}
 		/* flush monsters before asking for identification */
 		flush_screen(0);
@@ -1215,19 +1516,36 @@
 			uwep->oerodeproof = !(sobj->cursed);
 			if (Blind) {
 			    uwep->rknown = FALSE;
+/*JP
 			    Your("weapon feels warm for a moment.");
+*/
+			    pline("武器が一瞬暖かくなったような気がした．");
 			} else {
 			    uwep->rknown = TRUE;
+#if 0 /*JP*/
 			    Your("%s covered by a %s %s %s!",
 				aobjnam(uwep, "are"),
 				sobj->cursed ? "mottled" : "shimmering",
 				hcolor(sobj->cursed ? NH_PURPLE : NH_GOLDEN),
 				sobj->cursed ? "glow" : "shield");
+#else
+			    Your("%sは%s%s%sで覆われた！",
+				xname(uwep),
+				jconj_adj(hcolor(
+				  sobj->cursed ? NH_PURPLE : NH_GOLDEN)),
+				sobj->cursed ? "光るまだらの" : "ゆらめく",
+				sobj->cursed ? "輝き" : "バリア");
+#endif
 			}
 			if (uwep->oerodeproof && (uwep->oeroded || uwep->oeroded2)) {
 			    uwep->oeroded = uwep->oeroded2 = 0;
+#if 0 /*JP*/
 			    Your("%s as good as new!",
 				 aobjnam(uwep, Blind ? "feel" : "look"));
+#else
+			    pline("%sは新品同様になったように%s！",
+				 xname(uwep), Blind ? "感じた" : "見えた");
+#endif
 			}
 		/* KMH, balance patch -- Restore the NetHack success rate */
 		} else return !chwepon(sobj,
@@ -1271,7 +1589,10 @@
 		break;
 	    }
 	case SCR_GENOCIDE:
+/*JP
 		You("have found a scroll of genocide!");
+*/
+		pline("これは虐殺の巻物だ！");
 		known = TRUE;
 		if (sobj->blessed) do_class_genocide();
 		else do_genocide(!sobj->cursed | (2 * !!Confusion));
@@ -1310,9 +1631,15 @@
 	case SCR_IDENTIFY:
 		/* known = TRUE; */
 		if(confused)
+/*JP
 			You("identify this as an identify scroll.");
+*/
+			You("これは識別の巻物だと識別した．");
 		else
+/*JP
 			pline("This is an identify scroll.");
+*/
+			pline("これは識別の巻物だ．");
 		if (sobj->blessed || (!sobj->cursed && !rn2(5))) {
 			cval = rn2(5);
 			/* Note: if rn2(5)==0, identify all items */
@@ -1329,7 +1656,10 @@
 		return(1);
 	case SCR_CHARGING:
 		if (confused) {
+/*JP
 		    You_feel("charged up!");
+*/
+		    You_feel("充填されたような気がする！");
 		    if (u.uen < u.uenmax)
 			u.uen = u.uenmax;
 		    else
@@ -1338,18 +1668,33 @@
 		    break;
 		}
 		known = TRUE;
+/*JP
 		pline("This is a charging scroll.");
+*/
+		pline("これは充填の巻物だ！");
+/*JP
 		otmp = getobj(all_count, "charge");
+*/
+		otmp = getobj(all_count, "充填する");
 		if (!otmp) break;
 		recharge(otmp, sobj->cursed ? -1 : (sobj->blessed ? 1 : 0));
 		break;
 	case SCR_MAGIC_MAPPING:
 		if (level.flags.nommap) {
+/*JP
 		    Your("mind is filled with crazy lines!");
+*/
+		    Your("心にただならぬ線！線！線！が浮びあがった！");
 		    if (Hallucination)
+/*JP
 			pline("Wow!  Modern art.");
+*/
+			pline("ワォ！モダンアートだ！");
 		    else
+/*JP
 			Your("%s spins in bewilderment.", body_part(HEAD));
+*/
+			You("当惑して目がまわった．");
 		    make_confused(HConfusion + rnd(30), FALSE);
 		    break;
 		}
@@ -1365,11 +1710,17 @@
 		known = TRUE;
 	case SPE_MAGIC_MAPPING:
 		if (level.flags.nommap) {
+/*JP
 		    Your("%s spins as %s blocks the spell!", body_part(HEAD), something);
+*/
+		    You("何かが呪文をさえぎり，目がまわった！");
 		    make_confused(HConfusion + rnd(30), FALSE);
 		    break;
 		}
+/*JP
 		pline("A map coalesces in your mind!");
+*/
+		pline("地図があなたの心に融合した！");
 		cval = (sobj->cursed && !confused);
 		if(cval) HConfusion = 1;	/* to screw up map */
 		do_mapping();
@@ -1377,7 +1728,10 @@
 		  object_detect(sobj,0);
 		if(cval) {
 		    HConfusion = 0;		/* restore */
+/*JP
 		    pline("Unfortunately, you can't grasp the details.");
+*/
+		    pline("残念ながら，あなたは詳細を得ることができなかった．");
 		}
 		break;
 	case SCR_AMNESIA:
@@ -1385,13 +1739,25 @@
 		forget(	(!sobj->blessed ? ALL_SPELLS : 0) |
 			(!confused || sobj->cursed ? ALL_MAP : 0) );
 		if (Hallucination) /* Ommmmmm! */
+/*JP
 			Your("mind releases itself from mundane concerns.");
+*/
+			Your("心は平凡な利害関係から解放された．");
 		else if (!strncmpi(plname, "Maud", 4))
+/*JP
 			pline("As your mind turns inward on itself, you forget everything else.");
+*/
+			pline("あなたの心は内側に向き，全てを忘れてしまった．");
 		else if (rn2(2))
+/*JP
 			pline("Who was that Maud person anyway?");
+*/
+			pline("Maudって娘はいったい誰だい？");
 		else
+/*JP
 			pline("Thinking of Maud you forget everything else.");
+*/
+			pline("Maudを考えること以外，あなたは全てを忘れてしまった．");
 		exercise(A_WIS, FALSE);
 		break;
 	case SCR_FIRE:
@@ -1408,21 +1774,41 @@
 		    if(Fire_resistance) {
 			shieldeff(u.ux, u.uy);
 			if(!Blind)
+/*JP
 			    pline("Oh, look, what a pretty fire in your %s.",
+*/
+			    pline("わぁごらん．小さな火が%sにある．",
 				makeplural(body_part(HAND)));
+/*JP
 			else You_feel("a pleasant warmth in your %s.",
+*/
+			else You_feel("%sの中に快適な暖かさを感じた．",
 				makeplural(body_part(HAND)));
 		    } else {
+#if 0 /*JP:T*/
 			pline_The("scroll catches fire and you burn your %s.",
 				makeplural(body_part(HAND)));
+#else
+			pline("巻物に火が燃えうつり，あなたの%sを焼いた．",
+				makeplural(body_part(HAND)));
+#endif
+/*JP
 			losehp(1, "scroll of fire", KILLED_BY_AN);
+*/
+			losehp(1, "炎の巻物で", KILLED_BY_AN);
 		    }
 		    return(1);
 		}
 		if (Underwater)
+/*JP
 			pline_The("water around you vaporizes violently!");
+*/
+			pline("あなたの回りの水は沸騰した！");
 		else {
+/*JP
 		    pline_The("scroll erupts in a tower of flame!");
+*/
+		    pline("巻物から火柱が立ち昇った！");
 		    burn_away_slime();
 		}
 		explode(u.ux, u.uy, ZT_SPELL(ZT_FIRE), (2*(rn1(3, 3) + 2 * cval) + 1)/3,
@@ -1438,8 +1824,14 @@
 	    	register int x, y;
 
 	    	/* Identify the scroll */
+#if 0 /*JP*/
 	    	pline_The("%s rumbles %s you!", ceiling(u.ux,u.uy),
 	    			sobj->blessed ? "around" : "above");
+#else
+	    	pline("あなたの%sの%sからゴロゴロと音が聞こえてきた！",
+		      sobj->blessed ? "まわり" : "真上",
+		      ceiling(u.ux,u.uy));
+#endif
 	    	known = 1;
 	    	if (In_sokoban(&u.uz))
 	    	    change_luck(-1);	/* Sokoban guilt */
@@ -1473,8 +1865,13 @@
 				int mdmg;
 
 				if (cansee(mtmp->mx, mtmp->my)) {
+#if 0 /*JP*/
 				    pline("%s is hit by %s!", Monnam(mtmp),
 	    	    	    			doname(otmp2));
+#else
+				    pline("%sが%sに命中した！",
+					  doname(otmp2), Monnam(mtmp));
+#endif
 				    if (mtmp->minvis && !canspotmon(mtmp))
 					map_invisible(mtmp->mx, mtmp->my);
 				}
@@ -1482,15 +1879,26 @@
 				if (helmet) {
 				    if(is_metallic(helmet)) {
 					if (canspotmon(mtmp))
+/*JP
 					    pline("Fortunately, %s is wearing a hard helmet.", mon_nam(mtmp));
+*/
+					    pline("幸運にも，%sは固い兜を身につけている．", mon_nam(mtmp));
 					else if (flags.soundok)
+/*JP
 					    You_hear("a clanging sound.");
+*/
+					    You_hear("ガランガランという音を聞いた．");
 					if (mdmg > 2) mdmg = 2;
 				    } else {
 					if (canspotmon(mtmp))
+#if 0 /*JP*/
 					    pline("%s's %s does not protect %s.",
 						Monnam(mtmp), xname(helmet),
 						mhim(mtmp));
+#else
+					    pline("%sの%sでは守れない．",
+						  Monnam(mtmp), xname(uarmh));
+#endif
 				    }
 				}
 	    	    	    	mtmp->mhp -= mdmg;
@@ -1498,7 +1906,10 @@
 	    	    	    	    xkilled(mtmp, 1);
 	    	    	    }
 	    	    	    /* Drop the rock/boulder to the floor */
+/*JP
 	    	    	    if (!flooreffects(otmp2, x, y, "fall")) {
+*/
+	    	    	    if (!flooreffects(otmp2, x, y, "落ちる")) {
 	    	    	    	place_object(otmp2, x, y);
 	    	    	    	stackobj(otmp2);
 	    	    	    	newsym(x, y);  /* map the rock */
@@ -1521,33 +1932,53 @@
 				!Passes_walls &&
 				!noncorporeal(youmonst.data) &&
 				!unsolid(youmonst.data)) {
+/*JP
 			You("are hit by %s!", doname(otmp2));
+*/
+			pline("%sが命中した！", doname(otmp2));
 			dmg = dmgval(otmp2, &youmonst) * otmp2->quan;
 			if (uarmh && !sobj->cursed) {
 			    if(is_metallic(uarmh)) {
+/*JP
 				pline("Fortunately, you are wearing a hard helmet.");
+*/
+				pline("幸運にも，あなたは固い兜を身につけている．");
 				if (dmg > 2) dmg = 2;
 			    } else if (flags.verbose) {
+#if 0 /*JP*/
 				Your("%s does not protect you.",
 						xname(uarmh));
+#else
+				Your("%sでは守れない．",
+						xname(uarmh));
+#endif
 			    }
 			}
 		    } else
 			dmg = 0;
 		    /* Must be before the losehp(), for bones files */
+/*JP
 		    if (!flooreffects(otmp2, u.ux, u.uy, "fall")) {
+*/
+		    if (!flooreffects(otmp2, u.ux, u.uy, "落ちる")) {
 			place_object(otmp2, u.ux, u.uy);
 			stackobj(otmp2);
 			newsym(u.ux, u.uy);
 		    }
+/*JP
 		    if (dmg) losehp(dmg, "scroll of earth", KILLED_BY_AN);
+*/
+		    if (dmg) losehp(dmg, "大地の巻物で", KILLED_BY_AN);
 		}
 	    }
 	    break;
 	case SCR_PUNISHMENT:
 		known = TRUE;
 		if(confused || sobj->blessed) {
+/*JP
 			You_feel("guilty.");
+*/
+			You("罪を感じた．");
 			break;
 		}
 		punish(sobj);
@@ -1555,17 +1986,29 @@
 	case SCR_STINKING_CLOUD: {
 	        coord cc;
 
+/*JP
 		You("have found a scroll of stinking cloud!");
+*/
+		You("悪臭雲の巻物を発見した！");
 		known = TRUE;
+/*JP
 		pline("Where do you want to center the cloud?");
+*/
+		pline("雲の中心をどこにしますか？");
 		cc.x = u.ux;
 		cc.y = u.uy;
+/*JP
 		if (getpos(&cc, TRUE, "the desired position") < 0) {
+*/
+		if (getpos(&cc, TRUE, "狙う場所") < 0) {
 		    pline(Never_mind);
 		    return 0;
 		}
 		if (!cansee(cc.x, cc.y) || distu(cc.x, cc.y) >= 32) {
+/*JP
 		    You("smell rotten eggs.");
+*/
+		    pline("くさった卵のにおいがした．");
 		    return 0;
 		}
 		(void) create_gas_cloud(cc.x, cc.y, 3+bcsign(sobj),
@@ -1584,9 +2027,15 @@
 register struct obj *obj;
 {
     obj->in_use = TRUE;	/* in case losehp() is fatal */
+/*JP
     Your("%s vibrates violently, and explodes!",xname(obj));
+*/
+    Your("%sは激しく振動し，爆発した！",xname(obj));
     nhbell();
+/*JP
     losehp(rnd(2*(u.uhpmax+1)/3), "exploding wand", KILLED_BY_AN);
+*/
+    losehp(rnd(2*(u.uhpmax+1)/3), "杖の爆発で", KILLED_BY_AN);
     useup(obj);
     exercise(A_STR, FALSE);
 }
@@ -1622,14 +2071,23 @@
 
 		if (!Blind) {
 		    if(u.uswallow) {
+/*JP
 			pline("It seems even darker in here than before.");
+*/
+			pline("前より暗くなったように見える．");
 			return;
 		    }
 		    if (uwep && artifact_light(uwep) && uwep->lamplit)
+/*JP
 			pline("Suddenly, the only light left comes from %s!",
+*/
+			pline("突然，明かりが%sだけになった！",
 				the(xname(uwep)));
 		    else
+/*JP
 			You("are surrounded by darkness!");
+*/
+			You("暗闇に覆われた！");
 		}
 
 		/* the magic douses lamps, et al, too */
@@ -1641,18 +2099,33 @@
 		if (Blind) goto do_it;
 		if(u.uswallow){
 			if (is_animal(u.ustuck->data))
+#if 0 /*JP*/
 				pline("%s %s is lit.",
 				        s_suffix(Monnam(u.ustuck)),
 					mbodypart(u.ustuck, STOMACH));
+#else
+				pline("%sの%sは明るくなった．",
+				        Monnam(u.ustuck),
+					mbodypart(u.ustuck, STOMACH));
+#endif
 			else
 				if (is_whirly(u.ustuck->data))
+/*JP
 					pline("%s shines briefly.",
+*/
+					pline("%sはちょっと輝いた．",
 					      Monnam(u.ustuck));
 				else
+/*JP
 					pline("%s glistens.", Monnam(u.ustuck));
+*/
+					pline("%sはきらきら輝いた．", Monnam(u.ustuck));
 			return;
 		}
+/*JP
 		pline("A lit field surrounds you!");
+*/
+		pline("灯りがあなたを取り囲んだ！");
 	}
 
 do_it:
@@ -1723,12 +2196,18 @@
 			return;
 		}
 		do {
+/*JP
                     getlin("What class of monsters do you wish to genocide? [? for help]",
+*/
+		    getlin("どのクラスに属する怪物を虐殺しますか？[?でヘルプ]",
 			buf);
 		    (void)mungspaces(buf);
 		} while (buf[0]=='\033' || !buf[0]);
 		/* choosing "none" preserves genocideless conduct */
 		if (!strcmpi(buf, "none") ||
+#if 1 /*JP*/
+		    !strcmpi(buf, "なし") ||
+#endif
 		    !strcmpi(buf, "nothing")) return;
 
 		if (strlen(buf) == 1) {
@@ -1744,7 +2223,10 @@
 				   def_monsyms[i], 0, ATR_NONE,
 				   an(monexplain[i]), MENU_UNSELECTED);
                         }
+/*JP
                         end_menu(tmpwin, "Monster Types");
+*/
+                        end_menu(tmpwin, "怪物のクラス");
                         n = 0;
                         while (n == 0) n = select_menu(tmpwin, PICK_ONE,
                                 &selected);
@@ -1781,10 +2263,16 @@
 		if (!goodcnt && class != mons[urole.malenum].mlet &&
 				class != mons[urace.malenum].mlet) {
 			if (gonecnt)
+/*JP
 	pline("All such monsters are already nonexistent.");
+*/
+	pline("その怪物はもういない．");
 			else if (immunecnt ||
 				(buf[0] == DEF_INVISIBLE && buf[1] == '\0'))
+/*JP
 	You("aren't permitted to genocide such monsters.");
+*/
+	You("その怪物を虐殺することはできない．");
 			else
 #ifdef WIZARD	/* to aid in topology testing; remove pesky monsters */
 			  if (wizard && buf[0] == '*') {
@@ -1797,11 +2285,17 @@
 				mongone(mtmp);
 				gonecnt++;
 			    }
+/*JP
 	pline("Eliminated %d monster%s.", gonecnt, plur(gonecnt));
+*/
+	pline("%dの怪物を除いた．", gonecnt);
 			    return;
 			} else
 #endif
+/*JP
 	pline("That symbol does not represent any monster.");
+*/
+	pline("その記号の怪物はいない．");
 			continue;
 		}
 
@@ -1823,11 +2317,17 @@
 			    reset_rndmonst(i);
 			    kill_genocided_monsters();
 			    update_inventory();		/* eggs & tins */
+/*JP
 			    pline("Wiped out all %s.", nam);
+*/
+			    pline("%sを全て排除した．", jtrns_mon(nam));
 			    if (Upolyd && i == u.umonnum) {
 				u.mh = -1;
 				if (Unchanging) {
+/*JP
 				    if (!feel_dead++) You("die.");
+*/
+				    if (!feel_dead++) You("死にました．．．");
 				    /* finish genociding this class of
 				       monsters before ultimately dying */
 				    gameover = TRUE;
@@ -1840,15 +2340,24 @@
 			    if (i == urole.malenum || i == urace.malenum) {
 				u.uhp = -1;
 				if (Upolyd) {
+/*JP
 				    if (!feel_dead++) You_feel("dead inside.");
+*/
+				    if (!feel_dead++) You("魂が死んだような気がした．");
 				} else {
+/*JP
 				    if (!feel_dead++) You("die.");
+*/
+				    if (!feel_dead++) You("死にました．．．");
 				    gameover = TRUE;
 				}
 			    }
 			} else if (mvitals[i].mvflags & G_GENOD) {
 			    if (!gameover)
+/*JP
 				pline("All %s are already nonexistent.", nam);
+*/
+				pline("%sは既にいない．", jtrns_mon(nam));
 			} else if (!gameover) {
 			  /* suppress feedback about quest beings except
 			     for those applicable to our own role */
@@ -1868,16 +2377,24 @@
 				/* one special case */
 				if (i == PM_HIGH_PRIEST) uniq = FALSE;
 
+#if 0 /*JP*/
 				You("aren't permitted to genocide %s%s.",
 				    (uniq && !named) ? "the " : "",
 				    (uniq || named) ? mons[i].mname : nam);
+#else
+				You("%sを虐殺できない．",
+				    jtrns_mon((uniq || named) ? mons[i].mname : nam));
+#endif
 			    }
 			}
 		    }
 		}
 		if (gameover || u.uhp == -1) {
 		    killer_format = KILLED_BY_AN;
+/*JP
 		    killer = "scroll of genocide";
+*/
+				killer = "虐殺の巻物で";
 		    if (gameover) done(GENOCIDED);
 		}
 		return;
@@ -1912,11 +2429,27 @@
 		    pline(thats_enough_tries);
 		    return;
 		}
+/*JP
 		getlin("What monster do you want to genocide? [type the name]",
+*/
+		getlin("どの怪物を虐殺しますか？",
 			buf);
 		(void)mungspaces(buf);
+#if 1 /*JP*/
+		{
+		    const char *p;
+		    p = etrns_mon(buf);
+		    if(p) strcpy(buf, p);
+		}
+#endif
+
 		/* choosing "none" preserves genocideless conduct */
+#if 0 /*JP*/
 		if (!strcmpi(buf, "none") || !strcmpi(buf, "nothing")) {
+#else
+		if (!strcmpi(buf, "none") || !strcmpi(buf, "nothing")
+		    || !strcmpi(buf, "なし")){
+#endif
 		    /* ... but no free pass if cursed */
 		    if (!(how & REALLY)) {
 			ptr = rndmonst();
@@ -1928,8 +2461,13 @@
 
 		mndx = name_to_mon(buf);
 		if (mndx == NON_PM || (mvitals[mndx].mvflags & G_GENOD)) {
+#if 0 /*JP*/
 			pline("Such creatures %s exist in this world.",
 			      (mndx == NON_PM) ? "do not" : "no longer");
+#else
+			pline("そのような生き物は%sこの世界に存在しない．",
+			      (mndx == NON_PM) ? "" : "もはや");
+#endif
 			continue;
 		}
 		ptr = &mons[mndx];
@@ -1947,8 +2485,14 @@
 			if(flags.soundok) {
 	/* fixme: unconditional "caverns" will be silly in some circumstances */
 			    if(flags.verbose)
+/*JP
 			pline("A thunderous voice booms through the caverns:");
+*/
+			pline("雷のような声が洞窟に響いた：");
+/*JP
 			    verbalize("No, mortal!  That will not be done.");
+*/
+			    pline("「定命の者よ！その望みはかなうまい．」");
 			}
 			continue;
 		}
@@ -1959,7 +2503,10 @@
 	    }
 	}
 
+/*JP
 	which = "all ";
+*/
+	which = "全て";
 	if (Hallucination) {
 	    if (Upolyd)
 		Strcpy(buf,youmonst.data->mname);
@@ -1971,13 +2518,20 @@
 	} else {
 	    Strcpy(buf, ptr->mname); /* make sure we have standard singular */
 	    if ((ptr->geno & G_UNIQ) && ptr != &mons[PM_HIGH_PRIEST])
+/*JP
 		which = !type_is_pname(ptr) ? "the " : "";
+*/
+		which = !type_is_pname(ptr) ? "" : "";
 	}
 	if (how & REALLY) {
 	    /* setting no-corpse affects wishing and random tin generation */
 	    mvitals[mndx].mvflags |= (G_GENOD | G_NOCORPSE);
+#if 0 /*JP*/
 	    pline("Wiped out %s%s.", which,
 		  (*which != 'a') ? buf : makeplural(buf));
+#else
+	    pline("%sを%s一掃した．", jtrns_mon(buf), which);
+#endif
 
 	    if (killplayer) {
 		/* might need to wipe out dual role */
@@ -1993,14 +2547,23 @@
 		u.uhp = -1;
 		if (how & PLAYER) {
 		    killer_format = KILLED_BY;
+/*JP
 		    killer = "genocidal confusion";
+*/
+		    killer = "混乱による自虐的虐殺で";
 		} else if (how & ONTHRONE) {
 		    /* player selected while on a throne */
 		    killer_format = KILLED_BY_AN;
+/*JP
 		    killer = "imperious order";
+*/
+		    killer = "傲慢な命令で";
 		} else { /* selected player deliberately, not confused */
 		    killer_format = KILLED_BY_AN;
+/*JP
 		    killer = "scroll of genocide";
+*/
+		    killer = "虐殺の巻物で";
 		}
 
 	/* Polymorphed characters will die as soon as they're rehumanized. */
@@ -2008,7 +2571,10 @@
 		if (Upolyd && ptr != youmonst.data) {
 			delayed_killer = killer;
 			killer = 0;
+/*JP
 			You_feel("dead inside.");
+*/
+				    You("魂が死んだような気がした．");
 		} else
 			done(GENOCIDED);
 	    } else if (ptr == youmonst.data) {
@@ -2030,7 +2596,10 @@
 			break;	/* just made last one */
 		}
 	    if (cnt)
+/*JP
 		pline("Sent in some %s.", makeplural(buf));
+*/
+	        pline("%sが送られてきた．", jtrns_mon(buf));
 	    else
 		pline(nothing_happens);
 	}
@@ -2042,14 +2611,23 @@
 {
 	/* KMH -- Punishment is still okay when you are riding */
 	/* KMH -- Punishment is still okay when you are riding */
+/*JP
 	You("are being punished for your misbehavior!");
+*/
+	You("不作法のため罰を受けた！");
 	if(Punished){
+/*JP
 		Your("iron ball gets heavier.");
+*/
+		Your("鉄球はさらに重くなった．");
 		uball->owt += 160 * (1 + sobj->cursed);
 		return;
 	}
 	if (amorphous(youmonst.data) || is_whirly(youmonst.data) || unsolid(youmonst.data)) {
+/*JP
 		pline("A ball and chain appears, then falls away.");
+*/
+		pline("鉄球と鎖が現われたが，するっと抜けた．");
 		dropy(mkobj(BALL_CLASS, TRUE));
 		return;
 	}
@@ -2124,9 +2702,19 @@
 	do {
 	    which = urole.malenum;      /* an arbitrary index into mons[] */
 	    maketame = makepeaceful = makehostile = FALSE;
+/*JP
 	    getlin("Create what kind of monster? [type the name or symbol]",
+*/
+	    getlin("どの種の怪物を作りますか？[名前かシンボルを入れてね]",
 		   buf);
 	    bufp = mungspaces(buf);
+#if 1 /*JP*/
+	    {
+		const char *p;
+		p = etrns_mon(buf);
+		if(p) strcpy(buf, p);
+	    }
+#endif
 	    if (*bufp == '\033') return (struct monst *)0;
 	    /* allow the initial disposition to be specified */
 	    if (!strncmpi(bufp, "tame ", 5)) {
@@ -2148,7 +2736,10 @@
 		if (which >= LOW_PM) break;		/* got one */
 	    }
 	    /* no good; try again... */
+/*JP
 	    pline("I've never heard of such monsters.");
+*/
+		    pline("そのような怪物は聞いたことがない．");
 	} while (++tries < 5);
 
 	if (tries == 5) {
diff -aurN slashem-0.0.7E6F2/src/region.c jslashem-0.0.7E6F2-J0.0.8/src/region.c
--- slashem-0.0.7E6F2/src/region.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/region.c	2004-06-20 13:20:44.000000000 +0900
@@ -923,7 +923,10 @@
 	cthulhu = makemon(&mons[PM_CTHULHU], cx, cy, 
 				MM_NOCOUNTBIRTH | NO_MINVENT);
 	if (cthulhu && canseemon(cthulhu))
+/*JP
 	    pline("%s reforms!", Monnam(cthulhu));
+*/
+	    pline("%sは姿を変えた！", Monnam(cthulhu));
     }
     return ret;
 }
@@ -945,12 +948,24 @@
 	if (!Blind)
 	    make_blinded(1L, FALSE);
 	if (!Poison_resistance) {
+/*JP
 	    pline("%s is burning your %s!", Something, makeplural(body_part(LUNG)));
+*/
+	    pline("何か妙なものを吸いこんだ！");
+/*JP
 	    You("cough and spit blood!");
+*/
+	    You("咳きこみ，血を吐いた！");
+/*JP
 	    losehp(rnd(dam) + 5, "gas cloud", KILLED_BY_AN);
+*/
+	    losehp(rnd(dam) + 5, "ガス雲で", KILLED_BY_AN);
 	    return FALSE;
 	} else {
+/*JP
 	    You("cough!");
+*/
+	    You("咳きこんだ！");
 	    return FALSE;
 	}
     } else {			/* A monster is inside the cloud */
@@ -959,7 +974,10 @@
 	/* Non living and non breathing monsters are not concerned */
 	if (!nonliving(mtmp->data) && !breathless(mtmp->data)) {
 	    if (cansee(mtmp->mx, mtmp->my))
+/*JP
 		pline("%s coughs!", Monnam(mtmp));
+*/
+		pline("%sは咳きこんだ！", Monnam(mtmp));
 	    if (heros_fault(reg))
 	    	setmangry(mtmp);
 	    if (haseyes(mtmp->data) && mtmp->mcansee) {
@@ -973,7 +991,10 @@
 		if (heros_fault(reg))
 		    killed(mtmp);
 		else
+/*JP
 		    monkilled(mtmp, "gas cloud", AD_DRST);
+*/
+		    monkilled(mtmp, "ガス雲", AD_DRST);
 		if (mtmp->mhp <= 0) {	/* not lifesaved */
 		    return TRUE;
 		}
diff -aurN slashem-0.0.7E6F2/src/restore.c jslashem-0.0.7E6F2-J0.0.8/src/restore.c
--- slashem-0.0.7E6F2/src/restore.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/restore.c	2004-06-27 16:54:38.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 #include "tcap.h" /* for TERMLIB and ASCIIGRAPH */
@@ -118,7 +126,11 @@
 	    } else
 #endif /* GOLDOBJ */
 	    if (otmp->in_use) {
+#if 0 /*JP*/
 		if (!quietly) pline("Finishing off %s...", xname(otmp));
+#else
+		if (!quietly) pline("%sを使い終えた．．．", xname(otmp));
+#endif
 		useup(otmp);
 	    }
 	}
@@ -369,7 +381,11 @@
 	if (uid != getuid()) {		/* strange ... */
 	    /* for wizard mode, issue a reminder; for others, treat it
 	       as an attempt to cheat and refuse to restore this file */
+#if 0 /*JP*/
 	    pline("Saved game was not yours.");
+#else
+	    pline("セーブされたゲームはあなたのものではない．");
+#endif
 #ifdef WIZARD
 	if(!wizard)
 #endif
@@ -392,7 +408,11 @@
 #endif
 	if(u.uhp <= 0 && (!Upolyd || u.mh <= 0)) {
 	    u.ux = u.uy = 0;	/* affects pline() [hence You()] */
+#if 0 /*JP*/
 	    You("were not healthy enough to survive restoration.");
+#else
+	    You("再開できるほど健康ではなかった．");
+#endif
 	    /* wiz1_level.dlevel is used by mklev.c to see if lots of stuff is
 	     * uninitialized, so we only have to set it and not the other stuff.
 	     */
@@ -516,7 +536,11 @@
 		/* The savelev can't proceed because the size required
 		 * is greater than the available disk space.
 		 */
+#if 0 /*JP*/
 		pline("Not enough space on `%s' to restore your game.",
+#else
+		pline("ゲームを再開するための`%s'のためのスペースがない．",
+#endif
 			levels);
 
 		/* Remove levels and bones that may have been created.
@@ -546,7 +570,11 @@
 #endif
 		{
 # endif
+#if 0 /*JP*/
 			pline("Be seeing you...");
+#else
+			pline("また会いましょう．．．");
+#endif
 			terminate(EXIT_SUCCESS);
 # ifndef AMIGA
 		}
@@ -676,10 +704,17 @@
 	 * Side effect of this is that you don't see this message until after the
 	 * all the levels are loaded
 	 */
+#if 0 /*JP*/
 	You("return to level %d in %s%s.",
 		depth(&u.uz), dungeons[u.uz.dnum].dname,
 		flags.debug ? " while in debug mode" :
 		flags.explore ? " while in explore mode" : "");
+#else
+	You("%s%sの地下%d階に戻ってきた．",
+	    flags.debug ? "ウィザードモード中の" :
+	    flags.explore ? "探検モード中の" : "",
+	    jtrns_obj('d',dungeons[u.uz.dnum].dname), depth(&u.uz));
+#endif
 
 #ifdef MFLOPPY
 	gameDiskPrompt();
@@ -719,9 +754,15 @@
 trickery(reason)
 char *reason;
 {
+#if 0 /*JP*/
 	pline("Strange, this map is not as I remember it.");
 	pline("Somebody is trying some trickery here...");
 	pline("This game is void.");
+#else
+	pline("妙だ，この地図は私が覚えていたものと違う．．．");
+	pline("だれかがここでいかさまをしようとしたようだ．．．");
+	pline("このゲームは無効となる．");
+#endif
 	killer = reason;
 	done(TRICKED);
 }
diff -aurN slashem-0.0.7E6F2/src/rip.c jslashem-0.0.7E6F2-J0.0.8/src/rip.c
--- slashem-0.0.7E6F2/src/rip.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/rip.c	2004-07-25 02:40:00.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL void FDECL(center, (int, char *));
@@ -120,6 +128,7 @@
 	switch (killer_format) {
 		default: impossible("bad killer format?");
 		case KILLED_BY_AN:
+#if 0 /*JP*/
                       if (Instant_Death) {
                         Strcpy(buf, "instantly ");
                         strcat(buf, killed_by_prefix[how]);
@@ -129,8 +138,18 @@
                         strcat(buf, killed_by_prefix[how]);
                       } else Strcpy(buf, killed_by_prefix[how]);
 			Strcat(buf, an(killer));
+#else
+			if (Instant_Death) {
+			    Strcpy(buf, "あっけなく");
+			} else if (Quick_Death) {
+			    Strcpy(buf, "あっというまに");
+			} else Strcpy(buf, "") ;
+			Strcat(buf, an(killer));
+			Strcat(buf, killed_by_prefix[how]);
+#endif
 			break;
 		case KILLED_BY:
+#if 0 /*JP*/
                       if (Instant_Death) {
                         Strcpy(buf, "instantly ");
                         strcat(buf, killed_by_prefix[how]);
@@ -141,21 +160,71 @@
                       } else Strcpy(buf, killed_by_prefix[how]);
 			Strcat(buf, killer);
 			break;
+#else
+			if (Instant_Death) {
+			    Strcpy(buf, "あっけなく");
+			} else if (Quick_Death) {
+			    Strcpy(buf, "あっというまに");
+			} else Strcpy(buf, "") ;
+			Strcat(buf, killer);
+			Strcat(buf, killed_by_prefix[how]);
+			break;
+#endif
 		case NO_KILLER_PREFIX:
 			Strcpy(buf, killer);
 			break;
+#if 1 /*JP*/
+		case KILLED_SUFFIX:
+			Strcpy(buf, killer);
+			Strcat(buf, "殺された");
+#endif
 	}
 
 	/* Put death type on stone */
 	for (line=DEATH_LINE, dpx = buf; line<YEAR_LINE; line++) {
 		register int i,i0;
 		char tmpchar;
+#if 1 /*JP*/
+		unsigned char *uc;
+		int jstone_line;
+
+		if ((i0=strlen(dpx))<= STONE_LINE_LEN)
+		  jstone_line = STONE_LINE_LEN;
+		else if (i0/2 <= STONE_LINE_LEN )
+		  jstone_line = ((i0+3)/4)*2;
+		else if (i0/3 <= STONE_LINE_LEN )
+		  jstone_line = ((i0+5)/6)*2;
+		else
+		  jstone_line = ((i0+7)/8)*2;
+#endif
 
+#if 0 /*JP*/
 		if ( (i0=strlen(dpx)) > STONE_LINE_LEN) {
 				for(i = STONE_LINE_LEN;
 				    ((i0 > STONE_LINE_LEN) && i); i--)
+#else
+		if ( i0 > jstone_line) {
+				for(i = jstone_line;
+				    ((i0 > jstone_line) && i); i--)
+#endif
 					if(dpx[i] == ' ') i0 = i;
+#if 0 /*JP*/
 				if(!i) i0 = STONE_LINE_LEN;
+#else
+				if(!i){
+				  i0=0;
+/*
+				  while(i0<STONE_LINE_LEN){
+*/
+				  while(i0<jstone_line){
+				    uc = (unsigned char *)(dpx+i0);
+				    if(*uc <128)
+				      ++i0;
+				    else
+				      i0+=2;
+				  }
+				}
+#endif
 		}
 		tmpchar = dpx[i0];
 		dpx[i0] = 0;
diff -aurN slashem-0.0.7E6F2/src/role.c jslashem-0.0.7E6F2-J0.0.8/src/role.c
--- slashem-0.0.7E6F2/src/role.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/role.c	2004-07-07 20:59:24.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985-1999. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 
@@ -24,8 +32,15 @@
  *
  * God names use a leading underscore to flag goddesses.
  */
+/*JP
+  文字列の最初の一文字目を見るコードが随所に存在するので、
+  英語名を残しておく。 (see you.h)
+*/
+
 const struct Role roles[] = {
-{	{"Archeologist", 0}, {
+{	{"Archeologist", 0}, 
+	{"考古学者", 0}, {
+#if 0 /*JP*/
 	{"Digger",      0},
 	{"Field Worker",0},
 	{"Investigator",0},
@@ -35,8 +50,20 @@
 	{"Speleologist",0},
 	{"Collector",   0},
 	{"Curator",     0} },
+#else
+	{"鉱員",	0},
+	{"労働者",      0},
+	{"調査者",      0},
+	{"発掘者",	0},
+	{"掘削者",	0},
+	{"探検者",	0},
+	{"洞窟学者",    0},
+	{"美術収集者",	0},
+	{"館長",	0} },
+#endif
+
 	"Quetzalcoatl", "Camaxtli", "Huhetotl", /* Central American */
-	"Arc", "the College of Archeology", "the Tomb of the Toltec Kings",
+	"Arc", "考古学大学", "トルテック王の墓",
 	PM_ARCHEOLOGIST, NON_PM, NON_PM,
 	PM_LORD_CARNARVON, PM_STUDENT, PM_MINION_OF_HUHETOTL,
 	NON_PM, PM_HUMAN_MUMMY, S_SNAKE, S_MUMMY,
@@ -54,7 +81,9 @@
 	{  1, 0,  0, 1,  0, 1 },14,	/* Energy */
 	10, 5, 0, 2, 10, A_INT, SPE_MAGIC_MAPPING,   -4
 },
-{	{"Barbarian", 0}, {
+{	{"Barbarian", 0}, 
+	{"野蛮人", 0}, {
+#if 0 /*JP*/
 	{"Plunderer",   "Plunderess"},
 	{"Pillager",    0},
 	{"Bandit",      0},
@@ -64,8 +93,19 @@
 	{"Slayer",      0},
 	{"Chieftain",   "Chieftainess"},
 	{"Conqueror",   "Conqueress"} },
+#else
+	{"盗賊",	"女盗賊"},
+	{"略奪者",	0},
+	{"悪漢",	0},
+	{"山賊",	0},
+	{"侵略者",	0},
+	{"強盗",	0},
+	{"殺戮者",	0},
+	{"首領",	"女首領"},
+        {"征服王",	0} },
+#endif
 	"Mitra", "Crom", "Set", /* Hyborian */
-	"Bar", "the Camp of the Duali Tribe", "the Duali Oasis",
+	"Bar", "デュアリ族のキャンプ", "デュアリ族のオアシス",
 	PM_BARBARIAN, NON_PM, NON_PM,
 	PM_PELIAS, PM_CHIEFTAIN, PM_THOTH_AMON,
 	PM_OGRE, PM_TROLL, S_OGRE, S_TROLL,
@@ -83,7 +123,9 @@
 	{  1, 0,  0, 1,  0, 1 },10,	/* Energy */
 	10, 14, 0, 0,  8, A_INT, SPE_HASTE_SELF,      -4
 },
-{	{"Caveman", "Cavewoman"}, {
+{	{"Caveman", "Cavewoman"}, 
+	{"洞窟人", 0}, {
+#if 0 /*JP*/
 	{"Troglodyte",  0},
 	{"Aborigine",   0},
 	{"Wanderer",    0},
@@ -93,8 +135,19 @@
 	{"Nomad",       0},
 	{"Rover",       0},
 	{"Pioneer",     0} },
+#else
+	{"穴居人",	0},
+	{"原住民",	0},
+	{"放浪者",	0},
+	{"浮浪者",	0},
+	{"旅行者",	0},
+	{"放遊者",	0},
+	{"遊牧民",	0},
+	{"流浪者",	0},
+	{"先駆者",	0} },
+#endif
 	"Anu", "_Ishtar", "Anshar", /* Babylonian */
-	"Cav", "the Caves of the Ancestors", "the Dragon's Lair",
+	"Cav", "太古の洞窟", "竜の隠れ家",
 	PM_CAVEMAN, PM_CAVEWOMAN, PM_LITTLE_DOG,
 	PM_SHAMAN_KARNOV, PM_NEANDERTHAL, PM_CHROMATIC_DRAGON,
 	PM_BUGBEAR, PM_HILL_GIANT, S_HUMANOID, S_GIANT,
@@ -112,7 +165,9 @@
 	{  1, 0,  0, 1,  0, 1 },10,	/* Energy */
 	0, 12, 0, 1,  8, A_INT, SPE_DIG,             -4
 },
-{	{"Flame Mage", 0}, {
+{	{"Flame Mage", 0},
+	{"炎の魔術師", 0}, {
+#if 0 /*JP*/
 	{"Spark",         0},   /* WAC was Igniter */
 	{"Igniter",       0},
 	{"Broiler",       0},   /* WAC was Igniter */
@@ -122,8 +177,19 @@
 	{"Incinerator",   0},
 	{"Disintegrator", 0},   /* WAC was Incinerator */
 	{"Flame-Master",  0} },
+#else
+	{"火花者",        0},   /* WAC was Igniter */
+	{"点火者",        0},
+	{"加熱者",        0},   /* WAC was Igniter */
+	{"燃焼者",        0},   /* WAC was Torcher */
+	{"発炎者",        0},
+	{"烈火者",        0},   /* WAC was Torcher */
+	{"焼却者",        0},
+	{"分解者",        0},   /* WAC was Incinerator */
+	{"炎の支配者",    0} },
+#endif
 	"Earth", "Fire", "Ash", /* Special */
-	"Fla", "the great Circle of Flame", "the Water Mage's Cave",
+	"Fla", "炎の偉大なる地", "水の魔術師の洞窟",
 	PM_FLAME_MAGE, NON_PM, PM_HELL_HOUND_PUP,
 	PM_HIGH_FLAME_MAGE, PM_IGNITER, PM_WATER_MAGE,
 	PM_WATER_ELEMENTAL, PM_RUST_MONSTER, S_ELEMENTAL, S_RUSTMONST,
@@ -142,7 +208,9 @@
 	0, 1, 0, 
 	2, 10, A_INT, SPE_FIREBALL,        -4 /* From old role.c */
 },
-{	{"Healer", 0}, {
+{	{"Healer", 0}, 
+	{"薬師", 0}, {
+#if 0 /*JP*/
 	{"Rhizotomist",    0},
 	{"Empiric",        0},
 	{"Embalmer",       0},
@@ -152,8 +220,19 @@
 	{"Magister",       "Magistra"},
 	{"Physician",      0},
 	{"Chirurgeon",     0} },
+#else
+	{"見習い",      0},
+	{"医師見習い",	0},
+	{"看護師",	"看護婦"},
+	{"医師助手",	0},
+	{"薬物主任",	0},
+	{"医師主任",	"看護主任"},
+	{"漢方医",	0},
+	{"内科医",	0},
+	{"外科医",	0} },
+#endif
 	"_Athena", "Hermes", "Poseidon", /* Greek */
-	"Hea", "the Temple of Epidaurus", "the Temple of Coeus",
+	"Hea", "エピダウラス寺院", "コオス寺院",
 	PM_HEALER, NON_PM, NON_PM,
 	PM_HIPPOCRATES, PM_ATTENDANT, PM_CYCLOPS,
 	PM_GIANT_RAT, PM_SNAKE, S_RODENT, S_YETI,
@@ -171,7 +250,9 @@
 	{  1, 4,  0, 1,  0, 2 },20,	/* Energy */
 	10, 3,-3, 2, 10, A_WIS, SPE_CURE_SICKNESS,   -4
 },
-{	{"Ice Mage", 0}, {
+{	{"Ice Mage", 0},
+	{"氷の魔術師", 0}, {
+#if 0 /*JP*/
 	{"Cooler",        0},   /* WAC was Chiller */
 	{"Condenser",     0},   /* WAC was Chiller */
 	{"Chiller",       0},
@@ -181,8 +262,19 @@
 	{"Freezer",       0},
 	{"Sublimer",      0},   /* WAC was Freezer */
 	{"Ice-Master",    0} },
+#else
+	{"冷涼者",        0},   /* WAC was Chiller */
+	{"冷却者",        0},   /* WAC was Chiller */
+	{"冷凍者",        0},
+	{"結霜者",        0},
+	{"永久結霜者",    0},   /* WAC was Froster */
+	{"氷結者",        0},   /* WAC was Froster */
+	{"凍結者",        0},
+	{"昇華者",        0},   /* WAC was Freezer */
+	{"氷の支配者",    0} },
+#endif
 	"Air", "Frost", "Smoke", /* Special */
-	"Ice", "the great Ring of Ice", "the Earth Mage's Cave",
+	"Ice", "氷の偉大なる地", "大地の魔術師の洞窟",
 	PM_ICE_MAGE, NON_PM, PM_WINTER_WOLF_CUB,
 	PM_HIGH_ICE_MAGE, PM_FROSTER, PM_EARTH_MAGE,
 	PM_RUST_MONSTER, PM_XORN, S_RUSTMONST, S_XORN,
@@ -201,7 +293,9 @@
 	0, 1, 0, 
 	2, 10, A_INT, SPE_CONE_OF_COLD,    -4 /* From old role.c */
 },
-{	{"Knight", 0}, {
+{	{"Knight", 0}, 
+	{"騎士", 0}, {
+#if 0 /*JP*/
 	{"Gallant",     0},
 	{"Esquire",     0},
 	{"Bachelor",    0},
@@ -211,8 +305,19 @@
 	{"Chevalier",   "Chevaliere"},
 	{"Seignieur",   "Dame"},
 	{"Paladin",     0} },
+#else
+	{"見習い",	0},
+	{"歩兵",	0},
+	{"戦士",	"女戦士"},
+	{"騎兵",	0},
+	{"重戦士",	0},
+	{"騎士",	0},
+	{"重騎士",	0},
+	{"勲騎士",	0},
+	{"聖騎士",	0} },
+#endif
 	"Lugh", "_Brigit", "Manannan Mac Lir", /* Celtic */
-	"Kni", "Camelot Castle", "the Isle of Glass",
+	"Kni", "キャメロット城", "ガラスの島",
 	PM_KNIGHT, NON_PM, PM_PONY,
 	PM_KING_ARTHUR, PM_PAGE, PM_IXOTH,
 	PM_QUASIT, PM_OCHRE_JELLY, S_IMP, S_JELLY,
@@ -229,7 +334,9 @@
 	{  1, 4,  0, 1,  0, 2 },10,	/* Energy */
 	10, 8,-2, 0,  9, A_WIS, SPE_TURN_UNDEAD,     -4
 },
-{	{"Monk", 0}, {
+{	{"Monk", 0}, 
+	{"武闘家", 0}, {
+#if 0 /*JP*/
 	{"Candidate",         0},
 	{"Novice",            0},
 	{"Initiate",          0},
@@ -239,9 +346,19 @@
 	{"Student of Winds",  0},
 	{"Student of Fire",   0},
 	{"Master",            0} },
+#endif
+	{"入門希望者",	0},
+	{"初心者",	0},
+	{"入門者伝",	0},
+	{"土の習い手",	0},
+	{"水の習い手",	0},
+	{"金の習い手",	0},
+	{"風の習い手",	0},
+	{"火の習い手",	0},
+	{"免許皆伝",	0} },
 	"Shan Lai Ching", "Chih Sung-tzu", "Huan Ti", /* Chinese */
-	"Mon", "the Monastery of Chan-Sune",
-	  "the Monastery of the Earth-Lord",
+	"Mon", "チャン・スー修道院",
+	  "地王の修道院",
 	PM_MONK, NON_PM, NON_PM,
 	PM_GRAND_MASTER, PM_ABBOT, PM_MASTER_KAEN,
 	PM_EARTH_ELEMENTAL, PM_XORN, S_ELEMENTAL, S_XORN,
@@ -259,7 +376,9 @@
 	{  2, 2,  0, 2,  0, 2 },10,	/* Energy */
 	10, 8,-2, 2, 20, A_WIS, SPE_RESTORE_ABILITY, -4
 },
-{	{"Necromancer", 0}, {
+{	{"Necromancer", 0},
+	{"死人使い", 0}, {
+#if 0 /*JP*/
 	{"Gravedigger",  0},
 	{"Embalmer", 0},
 	{"Mortician", 0},
@@ -269,8 +388,19 @@
 	{"Necromancer", 0},
 	{"Undead Master", 0},
 	{"Lich Lord", 0} },
+#else
+	{"墓掘り",  0},
+	{"死人製作者", 0},
+	{"葬儀屋", 0},
+	{"ゾンビロード", 0},
+	{"グールマスター",0},
+	{"死人使い", 0},
+	{"死人使い", 0},
+	{"アンデットマスター", 0},
+	{"リッチロード", 0} },
+#endif
 	"Nharlotep", "Zugguthobal", "Gothuulbe", /* Assorted slimy things */
-	"Nec", "the Tower of the Dark Lord", "the Lair of Maugneshaagar",
+	"Nec", "ダークロードの塔", "マウグネッシャガーの隠れ家",
 	PM_NECROMANCER, NON_PM, PM_GHOUL,
 	PM_DARK_LORD, PM_EMBALMER, PM_MAUGNESHAAGAR,
 	PM_NUPPERIBO, PM_MONGBAT, S_BAT, S_IMP,
@@ -288,7 +418,9 @@
 	0, 1, 0, 
 	2, 10, A_INT, SPE_SUMMON_UNDEAD,   -4
 },
-{	{"Priest", "Priestess"}, {
+{	{"Priest", "Priestess"}, 
+	{"僧侶", "尼僧"}, {
+#if 0 /*JP*/
 	{"Aspirant",    0},
 	{"Acolyte",     0},
 	{"Adept",       0},
@@ -298,8 +430,19 @@
 	{"Lama",        0},
 	{"Patriarch",   "Matriarch"},
 	{"High Priest", "High Priestess"} },
+#else
+	{"修道者",	"修道女"},
+	{"侍者",	0},
+	{"侍祭",	0},
+	{"僧侶",	"尼僧"},
+	{"助任司祭",	0},
+	{"聖者",	"聖女"},
+	{"司教",	0},
+	{"大司教",	0},
+	{"大僧上",      0} },
+#endif
 	0, 0, 0,	/* chosen randomly from among the other roles */
-	"Pri", "the Great Temple", "the Temple of Nalzok",
+	"Pri", "偉大なる寺院", "ナルゾク寺院",
 	PM_PRIEST, PM_PRIESTESS, NON_PM,
 	PM_ARCH_PRIEST, PM_ACOLYTE, PM_NALZOK,
 	PM_HUMAN_ZOMBIE, PM_WRAITH, S_ZOMBIE, S_WRAITH,
@@ -319,7 +462,9 @@
 },
   /* Note:  Rogue precedes Ranger so that use of `-R' on the command line
      retains its traditional meaning. */
-{	{"Rogue", 0}, {
+{	{"Rogue", 0}, 
+	{"盗賊", 0}, {
+#if 0 /*JP*/
 	{"Footpad",     0},
 	{"Cutpurse",    0},
 	{"Rogue",       0},
@@ -329,8 +474,19 @@
 	{"Filcher",     0},
 	{"Magsman",     "Magswoman"},
 	{"Thief",       0} },
+#else
+	{"追いはぎ",	0},
+	{"ひったくり",	0},
+	{"スリ",	0},
+	{"ごろつき",	0},
+	{"こそどろ",	0},
+	{"空巣",	0},
+	{"泥棒",	"女泥棒"},
+	{"強盗",	0},
+	{"大泥棒",	0} },
+#endif
 	"Issek", "Mog", "Kos", /* Nehwon */
-	"Rog", "the Thieves' Guild Hall", "the Assassins' Guild Hall",
+	"Rog", "盗賊ギルド", "暗殺者ギルド",
 	PM_ROGUE, NON_PM, NON_PM,
 	PM_MASTER_OF_THIEVES, PM_THUG, PM_MASTER_ASSASSIN,
 	PM_LEPRECHAUN, PM_GUARDIAN_NAGA, S_NYMPH, S_NAGA,
@@ -348,7 +504,8 @@
 	{  1, 0,  0, 1,  0, 1 },11,	/* Energy */
 	10, 8, 0, 1,  9, A_INT, SPE_DETECT_TREASURE, -4
 },
-{	{"Ranger", 0}, {
+{	{"Ranger", 0}, 
+	{"レンジャー", 0}, {
 #if 0	/* OBSOLETE */
 	{"Edhel",       "Elleth"},
 	{"Edhel",       "Elleth"},      /* elf-maid */
@@ -363,6 +520,7 @@
 	{"Elentar",     "Elentari"},	/* Star-king, -queen (Q.) */
 	"Solonor Thelandira", "Aerdrie Faenya", "Lolth", /* Elven */
 #endif
+#if 0 /*JP*/
 	{"Tenderfoot",    0},
 	{"Lookout",       0},
 	{"Trailblazer",   0},
@@ -372,8 +530,19 @@
 	{"Archer",        0},
 	{"Sharpshooter",  0},
 	{"Marksman",      "Markswoman"} },
+#else
+	{"新米",	0},
+	{"見張り",	0},
+	{"先導",	0},
+	{"偵察",	0},
+	{"斥候",	0},
+	{"弓兵",	0},	/* One skilled at crossbows */
+	{"中級弓兵",	0},
+	{"上級弓兵",	0},
+	{"名人",	0} },
+#endif
 	"Mercury", "_Venus", "Mars", /* Roman/planets */
-	"Ran", "Orion's camp", "the cave of the wumpus",
+	"Ran", "オリオンのキャンプ", "ワンパスの洞窟",
 	PM_RANGER, NON_PM, PM_LITTLE_DOG /* Orion & canis major */,
 	PM_ORION, PM_HUNTER, PM_SCORPIUS,
 	PM_FOREST_CENTAUR, PM_SCORPION, S_CENTAUR, S_SPIDER,
@@ -391,7 +560,9 @@
 	{  1, 0,  0, 1,  0, 1 },12,	/* Energy */
 	10, 9, 2, 1, 10, A_INT, SPE_INVISIBILITY,   -4
 },
-{	{"Samurai", 0}, {
+{	{"Samurai", 0}, 
+	{"侍", 0}, {
+#if 0 /*JP*/
 	{"Hatamoto",    0},  /* Banner Knight */
 	{"Ronin",       0},  /* no allegiance */
 	{"Ninja",       "Kunoichi"},  /* secret society */
@@ -401,8 +572,19 @@
 	{"Daimyo",      0},  /* a samurai lord */
 	{"Kuge",        0},  /* Noble of the Court */
 	{"Shogun",      0} },/* supreme commander, warlord */
+#else
+	{"旗本",	0},  /* Banner Knight */
+	{"浪人",	0},  /* no allegiance */
+	{"忍者",	"くノ一"},  /* secret society */
+	{"城主",	0},  /* heads a castle */
+	{"領主",	0},  /* has a territory */
+	{"国主",	0},  /* heads a province */
+	{"大名",	"腰元"},  /* a samurai lord */
+	{"公家",	0},  /* Noble of the Court */
+	{"将軍",	"大奥"} },  /* supreme commander, warlord */
+#endif
 	"_Amaterasu Omikami", "Raijin", "Susanowo", /* Japanese */
-	"Sam", "the Castle of the Taro Clan", "the Shogun's Castle",
+	"Sam", "太郎一族の城", "将軍の城",
 	PM_SAMURAI, NON_PM, PM_LITTLE_DOG,
 	PM_LORD_SATO, PM_ROSHI, PM_ASHIKAGA_TAKAUJI,
 	PM_WOLF, PM_STALKER, S_DOG, S_ELEMENTAL,
@@ -420,7 +602,9 @@
 	10, 10, 0, 0,  8, A_INT, SPE_CLAIRVOYANCE,    -4
 },
 #ifdef TOURIST
-{	{"Tourist", 0}, {
+{	{"Tourist", 0}, 
+	{"観光客", 0}, {
+#if 0 /*JP*/
 	{"Rambler",     0},
 	{"Sightseer",   0},
 	{"Excursionist",0},
@@ -430,8 +614,19 @@
 	{"Voyager",     0},
 	{"Explorer",    0},
 	{"Adventurer",  0} },
+#else
+	{"プー太郎",	"プー子"},
+	{"観光客",	0},
+	{"周遊旅行者",  0},
+	{"遍歴者",      0},
+	{"旅行者",	0},
+	{"旅人",	0},
+	{"航海者",	0},
+	{"探検家",	0},
+	{"冒険者",	0} },
+#endif
 	"Blind Io", "_The Lady", "Offler", /* Discworld */
-	"Tou", "Ankh-Morpork", "the Thieves' Guild Hall",
+	"Tou", "旅行トラブルセンター", "盗賊ギルド",
 	PM_TOURIST, NON_PM, NON_PM,
 	PM_TWOFLOWER, PM_GUIDE, PM_MASTER_OF_THIEVES,
 	PM_GIANT_SPIDER, PM_FOREST_CENTAUR, S_SPIDER, S_CENTAUR,
@@ -449,7 +644,9 @@
 	0, 5, 1, 2, 10, A_INT, SPE_CHARM_MONSTER,   -4
 },
 #endif
-{	{"Undead Slayer", 0}, {
+{	{"Undead Slayer", 0},
+	{"アンデットスレイヤー", 0}, {
+#if 0 /*JP*/
 	{"Assistant",    0},
 	{"Eliminator",   0},
 	{"Eliminator",   0},
@@ -459,8 +656,19 @@
 	{"Vindicator",  0},
 	{"Vindicator",  0},
 	{"Undead Slayer", 0} },
+#else
+	{"助手",    0},
+	{"殺戮者",   0},
+	{"殺戮者",   0},
+	{"殲滅者", 0},
+	{"殲滅者", 0},
+	{"破壊者",   0},
+	{"復讐者",  0},
+	{"復讐者",  0},
+	{"不死を滅する者", 0} },
+#endif
 	"Seeker", "Osiris", "Seth", /* Egyptian */
-	"Und", "the Temple of Light", "the Crypt of Dracula",
+	"Und", "光の神殿", "ドラキュラの地下室",
 	PM_UNDEAD_SLAYER, NON_PM, NON_PM,
 	PM_VAN_HELSING, PM_EXTERMINATOR, PM_COUNT_DRACULA,
 	PM_HUMAN_MUMMY, PM_VAMPIRE, S_MUMMY, S_VAMPIRE,
@@ -478,7 +686,9 @@
 	{  1, 4,  0, 1,  0, 2 },10,	/* Energy */
 	10, 8,-2, 0,  9, A_WIS, SPE_TURN_UNDEAD,     -4
 },
-{	{"Valkyrie", 0}, {
+{	{"Valkyrie", 0}, 
+	{"ワルキューレ", 0}, {
+#if 0 /*JP*/
 	{"Stripling",   0},
 	{"Skirmisher",  0},
 	{"Fighter",     0},
@@ -488,8 +698,19 @@
 	{"Hero",        "Heroine"},
 	{"Champion",    0},
 	{"Lord",        "Lady"} },
+#else
+	{"見習い",	0},
+	{"歩兵",	0},
+	{"戦士",	"女戦士"},
+	{"騎兵",      "女重騎兵"},
+	{"戦闘兵",	0},
+	{"攻撃兵",      0},
+	{"英雄",	0},
+	{"闘士",	"女闘士"},
+	{"ロード",	"レディ"} },
+#endif
 	"Tyr", "Odin", "Loki", /* Norse */
-	"Val", "the Shrine of Destiny", "the cave of Surtur",
+	"Val", "運命の聖堂", "サーターの洞窟",
 	PM_VALKYRIE, NON_PM, NON_PM /*PM_WINTER_WOLF_CUB*/,
 	PM_NORN, PM_WARRIOR, PM_LORD_SURTUR,
 	PM_FIRE_ANT, PM_FIRE_GIANT, S_ANT, S_GIANT,
@@ -506,7 +727,9 @@
 	{  1, 0,  0, 1,  0, 1 },10,	/* Energy */
 	0, 10,-2, 0,  9, A_WIS, SPE_LIGHTNING,    -4
 },
-{	{"Wizard", 0}, {
+{	{"Wizard", 0}, 
+	{"魔法使い", 0}, {
+#if 0 /*JP*/
 	{"Evoker",      0},
 	{"Conjurer",    0},
 	{"Thaumaturge", 0},
@@ -516,8 +739,19 @@
 	{"Sorcerer",    "Sorceress"},
 	{"Wizard",      0},
 	{"Mage",        0} },
+#else
+	{"手品師",	0},
+	{"奇術師",	0},
+	{"占い師",	0},
+	{"霊感師",	0},
+	{"召喚師",	0},
+	{"妖術師",      0},
+	{"魔術師",      0},
+	{"魔法使い",	"魔女"},
+	{"大魔法使い",	0} },
+#endif
 	"Ptah", "Thoth", "Anhur", /* Egyptian */
-	"Wiz", "the Lonely Tower", "the Tower of Darkness",
+	"Wiz", "調和の塔", "暗黒の塔",
 	PM_WIZARD, NON_PM, PM_KITTEN,
 	PM_NEFERET_THE_GREEN, PM_APPRENTICE, PM_DARK_ONE,
 	PM_VAMPIRE_BAT, PM_XORN, S_BAT, S_WRAITH,
@@ -536,9 +770,11 @@
 	0, 1, 0, 3, 10, A_INT, SPE_MAGIC_MISSILE,   -4
 },
 #ifdef YEOMAN
-{	{"Yeoman", 0}, {
+{	{"Yeoman", 0},
+	{"衛士", 0}, {
 	/* Landowner titles, naval ranks and positions */
 	/* We intentionally avoid Lieutenant and Captain */
+#if 0 /*JP*/
 	{"Usher",          0},
 	{"Steward",        "Stewardess"},
 	{"Keeper",         0},
@@ -548,8 +784,19 @@
 	{"Constable",      0},
 	{"Chancellor",     0},
 	{"Regent",         0} },
+#else
+	{"案内係",         0},
+	{"世話役",         "メイド"},
+	{"守衛",           0},
+	{"儀式係",         0},
+	{"執事長",         "メイド長"},
+	{"侍従",           0},
+	{"城守",           0},
+	{"司法官",         0},
+	{"摂政",         0} },
+#endif
 	"His Majesty", "His Holiness", "The Commons", /* The three estates */
-	"Yeo", "London", "the inner ward",
+	"Yeo", "ロンドン", "地下牢",
 	PM_YEOMAN, NON_PM, PM_PONY,
 	PM_CHIEF_YEOMAN_WARDER, PM_YEOMAN_WARDER, PM_COLONEL_BLOOD,
 	PM_RAVEN, PM_WEREWOLF, S_RODENT, S_DOG,
@@ -576,7 +823,7 @@
  * choices.  This may be munged in role_init().
  */
 struct Role urole =
-{	{"Undefined", 0}, { {0, 0}, {0, 0}, {0, 0},
+{	{"Undefined", 0}, {"謎", 0}, { {0, 0}, {0, 0}, {0, 0},
 	{0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0}, {0, 0} },
 	"L", "N", "C", "Xxx", "home", "locate",
 	NON_PM, NON_PM, NON_PM, NON_PM, NON_PM, NON_PM,
@@ -596,7 +843,11 @@
 
 /* Table of all races */
 const struct Race races[] = {
+#if 0 /*JP*/
 {	"doppelganger", "doppelganger", "doppelganger-kind", "Dop",
+#else
+{	"doppelganger", "ドッペルゲンガー", "doppelganger", "doppelganger-kind", "Dop",
+#endif
 	{0, 0},
 	PM_DOPPELGANGER, NON_PM, PM_HUMAN_MUMMY, PM_HUMAN_ZOMBIE,
 	MH_HUMAN | ROLE_MALE|ROLE_FEMALE | ROLE_NEUTRAL|ROLE_CHAOTIC,
@@ -608,7 +859,11 @@
 	{  0, 0,  0, 1,  1, 0 },	/* Hit points */
 	{  7, 0,  5, 0,  5, 0 }		/* Energy */
 },
+#if 0 /*JP*/
 {	"drow", "droven", "drovenkind", "Dro",
+#else
+{	"drow", "ドロウ", "droven", "drovenkind", "Dro",
+#endif
 	{0, 0},
 	PM_DROW, NON_PM, PM_ELF_MUMMY, PM_ELF_ZOMBIE,
 	MH_ELF | ROLE_MALE|ROLE_FEMALE | ROLE_CHAOTIC,
@@ -620,7 +875,10 @@
 	{  1, 0,  0, 1,  1, 0 },	/* Hit points */
 	{  2, 0,  3, 0,  3, 0 }		/* Energy */
 },
+/*JP
 {	"dwarf", "dwarven", "dwarvenkind", "Dwa",
+*/
+{	"dwarf", "ドワーフ", "dwarven", "dwarvenkind", "Dwa",
 	{0, 0},
 	PM_DWARF, NON_PM, PM_DWARF_MUMMY, PM_DWARF_ZOMBIE,
 	MH_DWARF | ROLE_MALE|ROLE_FEMALE | ROLE_LAWFUL,
@@ -632,7 +890,10 @@
 	{  4, 0,  0, 3,  2, 0 },	/* Hit points */
 	{  0, 0,  0, 0,  0, 0 }		/* Energy */
 },
+/*JP
 {	"elf", "elven", "elvenkind", "Elf",
+*/
+{	"elf", "エルフ", "elven", "elvenkind", "Elf",
 	{0, 0},
 	PM_ELF, NON_PM, PM_ELF_MUMMY, PM_ELF_ZOMBIE,
 	MH_ELF | ROLE_MALE|ROLE_FEMALE | ROLE_LAWFUL|ROLE_NEUTRAL,
@@ -644,7 +905,10 @@
 	{  1, 0,  0, 1,  1, 0 },	/* Hit points */
 	{  2, 0,  3, 0,  3, 0 }		/* Energy */
 },
+/*JP
 {	"gnome", "gnomish", "gnomehood", "Gno",
+*/
+{	"gnome", "ノーム", "gnomish", "gnomehood", "Gno",
 	{0, 0},
 	PM_GNOME, NON_PM, PM_GNOME_MUMMY, PM_GNOME_ZOMBIE,
 	MH_GNOME | ROLE_MALE|ROLE_FEMALE | ROLE_NEUTRAL,
@@ -656,7 +920,10 @@
 	{  1, 0,  0, 1,  0, 0 },	/* Hit points */
 	{  2, 0,  2, 0,  2, 0 }		/* Energy */
 },
+/*JP
 {	"hobbit", "hobbit", "hobbit-kind", "Hob",
+*/
+{	"hobbit", "ホビット", "hobbit", "hobbit-kind", "Hob",
 	{0, 0},
 	PM_HOBBIT, NON_PM, NON_PM, NON_PM,
 	MH_HOBBIT | ROLE_MALE|ROLE_FEMALE | ROLE_LAWFUL|ROLE_NEUTRAL,
@@ -668,8 +935,13 @@
 	{  2, 0,  0, 2,  1, 0 },	/* Hit points */
 	{  2, 0,  2, 1,  2, 0 }		/* Energy */
 },
+#if 0 /*JP*/
 {	"human", "human", "humanity", "Hum",
 	{"man", "woman"},
+#else
+{	"human", "人間", "human", "humanity", "Hum",
+	{"男", "女"},
+#endif
 	PM_HUMAN, NON_PM, PM_HUMAN_MUMMY, PM_HUMAN_ZOMBIE,
 	MH_HUMAN | ROLE_MALE|ROLE_FEMALE |
 	  ROLE_LAWFUL|ROLE_NEUTRAL|ROLE_CHAOTIC,
@@ -681,7 +953,11 @@
 	{  2, 0,  0, 2,  1, 0 },	/* Hit points */
 	{  1, 0,  2, 0,  2, 0 }		/* Energy */
 },
+#if 0 /*JP*/
 {	"lycanthrope", "lycanthropic", "lycanthropehood", "Lyc",
+#else
+{	"lycanthrope", "獣人", "lycanthropic", "lycanthropehood", "Lyc",
+#endif
 	{0, 0},
 	PM_HUMAN_WEREWOLF, NON_PM, PM_HUMAN_MUMMY, PM_HUMAN_ZOMBIE,
 	MH_WERE | ROLE_MALE|ROLE_FEMALE | ROLE_CHAOTIC,
@@ -693,7 +969,10 @@
 	{  4, 0,  0, 2,  2, 0 },	/* Hit points */
 	{  5, 0,  4, 0,  4, 0 }		/* Energy */
 },
+/*JP
 {	"orc", "orcish", "orcdom", "Orc",
+*/
+{	"orc", "オーク", "orcish", "orcdom", "Orc",
 	{0, 0},
 	PM_ORC, NON_PM, PM_ORC_MUMMY, PM_ORC_ZOMBIE,
 	MH_ORC | ROLE_MALE|ROLE_FEMALE | ROLE_CHAOTIC,
@@ -705,7 +984,10 @@
 	{  1, 0,  0, 1,  0, 0 },	/* Hit points */
 	{  1, 0,  1, 0,  1, 0 }		/* Energy */
 },
+/*JP
 {	"vampire", "vampiric", "vampirehood", "Vam",
+*/
+{	"vampire", "吸血鬼", "vampiric", "vampirehood", "Vam",
 	{0, 0},
 	PM_VAMPIRE, NON_PM, PM_HUMAN_MUMMY, PM_HUMAN_ZOMBIE,
 	MH_VAMPIRE | ROLE_MALE|ROLE_FEMALE | ROLE_CHAOTIC,
@@ -725,7 +1007,10 @@
  * choices.  This may be munged in role_init().
  */
 struct Race urace =
+/*JP
 {	"something", "undefined", "something", "Xxx",
+*/
+{	"something", "謎", "undefined", "something", "Xxx",
 	{0, 0},
 	NON_PM, NON_PM, NON_PM, NON_PM,
 	0, 0, 0, 0,
@@ -739,9 +1024,16 @@
 
 /* Table of all genders */
 const struct Gender genders[] = {
+#if 0 /*JP*/
 	{"male",	"he",	"him",	"his",	"Mal",	ROLE_MALE},
 	{"female",	"she",	"her",	"her",	"Fem",	ROLE_FEMALE},
 	{"neuter",	"it",	"it",	"its",	"Ntr",	ROLE_NEUTER}
+#else
+	/*JP: オプションで使っているので英語名を残しておく。 (see you.h) */
+	{"male",	"男性",	"彼",	"彼",	"彼の",	"Mal",	ROLE_MALE},
+	{"female",	"女性",	"彼女",	"彼女",	"彼女の","Fem",	ROLE_FEMALE},
+	{"neuter",	"中性",	"それ",	"それ",	"その",	"Ntr",	ROLE_NEUTER}
+#endif
 };
 
 #ifdef MAC_MPW
@@ -750,10 +1042,17 @@
 
 /* Table of all alignments */
 const struct Align aligns[] = {
+#if 0 /*JP*/
 	{"law",		"lawful",	"Law",	ROLE_LAWFUL,	A_LAWFUL},
 	{"balance",	"neutral",	"Neu",	ROLE_NEUTRAL,	A_NEUTRAL},
 	{"chaos",	"chaotic",	"Cha",	ROLE_CHAOTIC,	A_CHAOTIC},
 	{"evil",	"unaligned",	"Una",	0,		A_NONE}
+#else
+	{"law",		"秩序",	"lawful",	"Law",	ROLE_LAWFUL,	A_LAWFUL},
+	{"balance",	"中立",	"neutral",	"Neu",	ROLE_NEUTRAL,	A_NEUTRAL},
+	{"chaos",	"混沌",	"chaotic",	"Cha",	ROLE_CHAOTIC,	A_CHAOTIC},
+	{"evil",	"無心",	"unaligned",	"Una",	0,		A_NONE}
+#endif
 };
 
 STATIC_DCL char * FDECL(promptsep, (char *, int));
@@ -1361,6 +1660,7 @@
 char *buf;
 int num_post_attribs;
 {
+#if 0 /*JP*/
 	const char *conj = "and ";
 	if (num_post_attribs > 1
 	    && post_attribs < num_post_attribs && post_attribs > 1)
@@ -1368,6 +1668,12 @@
 	Strcat(buf, " ");
 	--post_attribs;
 	if (!post_attribs && num_post_attribs > 1) Strcat(buf, conj);
+#else
+	if(num_post_attribs > post_attribs){
+		Strcat(buf, "，");
+	}
+	--post_attribs;
+#endif
 	return buf;
 }
 
@@ -1404,7 +1710,10 @@
 {
 	int k, gendercount = 0, aligncount = 0;
 	char buf[BUFSZ];
+/*JP
 	static char err_ret[] = " character's";
+*/
+	static char err_ret[] = "キャラクターの";
 	boolean donefirst = FALSE;
 
 	if (!suppliedbuf || buflen < 1) return err_ret;
@@ -1423,12 +1732,22 @@
 	if (alignnum != ROLE_NONE && alignnum != ROLE_RANDOM) {
 		/* if race specified, and multiple choice of alignments for it */
 		if ((racenum >= 0) && (aligncount > 1)) {
+#if 0 /*JP*/
 			if (donefirst) Strcat(buf, " ");
 			Strcat(buf, aligns[alignnum].adj);
+#else
+			if (donefirst) Strcat(buf, "の");
+			Strcat(buf, aligns[alignnum].j);
+#endif
 			donefirst = TRUE;
 		} else {
+#if 0 /*JP*/
 			if (donefirst) Strcat(buf, " ");
 			Strcat(buf, aligns[alignnum].adj);
+#else
+			if (donefirst) Strcat(buf, "の");
+			Strcat(buf, aligns[alignnum].j);
+#endif
 			donefirst = TRUE;
 		}
 	} else {
@@ -1455,13 +1774,23 @@
 			and name of role itself does not distinguish gender */
 			if ((rolenum != ROLE_NONE) && (gendercount > 1)
 						&& !roles[rolenum].name.f) {
+#if 0 /*JP*/
 				if (donefirst) Strcat(buf, " ");
 				Strcat(buf, genders[gendnum].adj);
+#else
+				if (donefirst) Strcat(buf, "の");
+				Strcat(buf, genders[gendnum].j);
+#endif
 				donefirst = TRUE;
 			}
 	        } else {
+#if 0 /*JP*/
 			if (donefirst) Strcat(buf, " ");
 	        	Strcat(buf, genders[gendnum].adj);
+#else
+			if (donefirst) Strcat(buf, "の");
+			Strcat(buf, genders[gendnum].j);
+#endif
 			donefirst = TRUE;
 	        }
 	} else {
@@ -1477,14 +1806,24 @@
 
 	if (racenum != ROLE_NONE && racenum != ROLE_RANDOM) {
 		if (validrole(rolenum) && ok_race(rolenum, racenum, gendnum, alignnum)) {
+#if 0 /*JP*/
 			if (donefirst) Strcat(buf, " "); 
 			Strcat(buf, (rolenum == ROLE_NONE) ?
 				races[racenum].noun :
 				races[racenum].adj);
+#else
+			if (donefirst) Strcat(buf, "の"); 
+			Strcat(buf, races[racenum].j);
+#endif
 			donefirst = TRUE;
 		} else if (!validrole(rolenum)) {
+#if 0 /*JP*/
 			if (donefirst) Strcat(buf, " ");
 			Strcat(buf, races[racenum].noun);
+#else
+			if (donefirst) Strcat(buf, "の"); 
+			Strcat(buf, races[racenum].j);
+#endif
 			donefirst = TRUE;
 		} else {
 			pa[BP_RACE] = 1;
@@ -1497,19 +1836,38 @@
 	/* <your lawful female gnomish> || <your lawful female gnome> */
 
 	if (validrole(rolenum)) {
+/*JP
 		if (donefirst) Strcat(buf, " ");
+*/
+		if (donefirst) Strcat(buf, "の");
 		if (gendnum != ROLE_NONE) {
+#if 0 /*JP*/
 		    if (gendnum == 1  && roles[rolenum].name.f)
 			Strcat(buf, roles[rolenum].name.f);
 		    else
   			Strcat(buf, roles[rolenum].name.m);
+#else
+		    if (gendnum == 1  && roles[rolenum].jname.f)
+			Strcat(buf, roles[rolenum].jname.f);
+		    else
+  			Strcat(buf, roles[rolenum].jname.m);
+#endif
 		} else {
+#if 0 /*JP*/
 			if (roles[rolenum].name.f) {
 				Strcat(buf, roles[rolenum].name.m);
 				Strcat(buf, "/");
 				Strcat(buf, roles[rolenum].name.f);
 			} else 
 				Strcat(buf, roles[rolenum].name.m);
+#else
+			if (roles[rolenum].jname.f) {
+				Strcat(buf, roles[rolenum].jname.m);
+				Strcat(buf, "/");
+				Strcat(buf, roles[rolenum].jname.f);
+			} else 
+				Strcat(buf, roles[rolenum].jname.m);
+#endif
 		}
 		donefirst = TRUE;
 	} else if (rolenum == ROLE_NONE) {
@@ -1518,10 +1876,18 @@
 	}
 	
 	if ((racenum == ROLE_NONE || racenum == ROLE_RANDOM) && !validrole(rolenum)) {
+#if 0 /*JP*/
 		if (donefirst) Strcat(buf, " ");
 		Strcat(buf, "character");
+#else
+		if (donefirst) Strcat(buf, "の");
+		Strcat(buf, "キャラクター");
+#endif
 		donefirst = TRUE;
 	}
+#if 1 /*JP*/
+	Strcat(buf, "の");
+#endif
 	/* <your lawful female gnomish cavewoman> || <your lawful female gnome>
 	 *    || <your lawful female character>
 	 */
@@ -1537,19 +1903,26 @@
 char *buf;
 int buflen, rolenum, racenum, gendnum, alignnum;
 {
+/*JP
 	const char *defprompt = "Shall I pick a character for you? [ynq] ";
+*/
+	const char *defprompt = "適当にキャラクターを選んでよいですか？[ynq] ";
 	int num_post_attribs = 0;
 	char tmpbuf[BUFSZ];
 	
 	if (buflen < QBUFSZ)
 		return (char *)defprompt;
 
+#if 0 /*JP*/
 	Strcpy(tmpbuf, "Shall I pick ");
 	if (racenum != ROLE_NONE || validrole(rolenum))
 		Strcat(tmpbuf, "your ");
 	else {
 		Strcat(tmpbuf, "a ");
 	}
+#else
+	Strcpy(tmpbuf, "");
+#endif
 	/* <your> */
 
 	(void)  root_plselection_prompt(eos(tmpbuf), buflen - strlen(tmpbuf),
@@ -1567,22 +1940,37 @@
 	if (post_attribs) {
 		if (pa[BP_RACE]) {
 			(void) promptsep(eos(buf), num_post_attribs);
+/*JP
 			Strcat(buf, "race");
+*/
+			Strcat(buf, "種族");
 		}
 		if (pa[BP_ROLE]) {
 			(void) promptsep(eos(buf), num_post_attribs);
+/*JP
 			Strcat(buf, "role");
+*/
+			Strcat(buf, "職業");
 		}
 		if (pa[BP_GEND]) {
 			(void) promptsep(eos(buf), num_post_attribs);
+/*JP
 			Strcat(buf, "gender");
+*/
+			Strcat(buf, "性別");
 		}
 		if (pa[BP_ALIGN]) {
 			(void) promptsep(eos(buf), num_post_attribs);
+/*JP
 			Strcat(buf, "alignment");
+*/
+			Strcat(buf, "属性");
 		}
 	}
+/*JP
 	Strcat(buf, " for you? [ynq] ");
+*/
+	Strcat(buf, "を適当に選んでよろしいですか？[ynq] ");
 	return buf;
 }
 
@@ -1750,6 +2138,10 @@
 	return;
 }
 
+#if 0 /*JP*/
+/*
+  あいさつは日本語として自然になるよう大きく仕様を変更
+ */
 const char *
 Hello(mtmp)
 struct monst *mtmp;
@@ -1762,14 +2154,22 @@
 	    		"Irasshaimase" : "Konnichi wa"); /* Japanese */
 #ifdef TOURIST
 	case PM_TOURIST:
+# if 0 /*JP*/
 	    return ("Aloha");       /* Hawaiian */
+# else
+	    return ("アローハ");       /* Hawaiian */
+# endif
 #endif
 	case PM_VALKYRIE:
 	    return (
 #ifdef MAIL
 	    		mtmp && mtmp->data == &mons[PM_MAIL_DAEMON] ? "Hallo" :
 #endif
+#if 0 /*JP*/
 	    		"Velkommen");   /* Norse */
+#else
+	    		"ようこそ");
+#endif
 	default:
 	    return ("Hello");
 	}
@@ -1793,5 +2193,94 @@
 	    return ("Goodbye");
 	}
 }
+#else
+const char *
+Hello(mtmp, nameflg)
+struct monst *mtmp;
+int nameflg;
+{
+    static char helo_buf[BUFSZ];
+
+
+    switch (Role_switch) {
+    case PM_KNIGHT:
+	if(nameflg)
+	    Sprintf(helo_buf, "よくぞ參った%sよ", plname);
+	else
+	    Sprintf(helo_buf, "よくぞ參った");
+	break;
+    case PM_SAMURAI:
+	if(nameflg)
+	    Sprintf(helo_buf, "よくぞ参られた%sよ", plname);
+	else
+	    Sprintf(helo_buf, "よくぞ参られた");
+	break;
+#ifdef TOURIST
+    case PM_TOURIST:
+	if(nameflg)
+	    Sprintf(helo_buf, "アローハ%s", plname);
+	else
+	    Sprintf(helo_buf, "アローハ");
+	break;
+#endif
+    case PM_VALKYRIE:
+	if(nameflg)
+	    Sprintf(helo_buf, "魂の守護者%sよ", plname);
+	else
+	    Sprintf(helo_buf, "魂の守護者");
+	break;
+    default:
+	if(nameflg)
+	    Sprintf(helo_buf, "ようこそ%s", plname);
+	else
+	    Sprintf(helo_buf, "ようこそ");
+	break;
+    }
+
+    return helo_buf;
+}
 
+const char *
+Goodbye(int nameflg)
+{
+    static char helo_buf[BUFSZ];
+
+    switch (Role_switch) {
+    case PM_KNIGHT:
+	if(nameflg)
+	    Sprintf(helo_buf, "さらば敬虔なる騎士の%sよ", plname);
+	else
+	    Sprintf(helo_buf, "さらば敬虔なる");
+	break;
+    case PM_SAMURAI:
+	if(nameflg)
+	    Sprintf(helo_buf, "さらば武士道を志す%sよ", plname);
+	else
+	    Sprintf(helo_buf, "さらば武士道を志す");
+	break;
+#ifdef TOURIST
+    case PM_TOURIST:
+	if(nameflg)
+	    Sprintf(helo_buf, "アローハ%s", plname);
+	else
+	    Sprintf(helo_buf, "アローハ");
+	break;
+#endif
+    case PM_VALKYRIE:
+	if(nameflg)
+	    Sprintf(helo_buf, "さらば魂の守護者%sよ", plname);
+	else
+	    Sprintf(helo_buf, "さらば魂の守護者");
+	break;
+    default:
+	if(nameflg)
+	    Sprintf(helo_buf, "さようなら%s", plname);
+	else
+	    Sprintf(helo_buf, "さようなら");
+	break;
+    }
+
+    return helo_buf;
+}
+#endif
 /* role.c */
diff -aurN slashem-0.0.7E6F2/src/rumors.c jslashem-0.0.7E6F2-J0.0.8/src/rumors.c
--- slashem-0.0.7E6F2/src/rumors.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/rumors.c	2004-06-27 16:54:44.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 #include "dlb.h"
@@ -28,6 +36,12 @@
  * and placed there by 'makedefs'.
  */
 
+#if defined(_MSC_VER) && !defined(WIN32)
+#include "../japanese/emalloc.h"
+#define alloc(s) emalloc(s)
+#endif
+
+
 STATIC_DCL void FDECL(init_rumors, (dlb *));
 STATIC_DCL void FDECL(init_oracles, (dlb *));
 
@@ -128,7 +142,10 @@
 	    else
 		exercise(A_WIS, (adjtruth > 0));
 	} else {
+/*JP
 		pline("Can't open rumors file!");
+*/
+		pline("rumorsファイルが開けない！");
 		true_rumor_size = -1;	/* don't try to open it again */
 	}
 	return rumor_buf;
@@ -140,7 +157,10 @@
 int mechanism;
 {
 	static const char fortune_msg[] =
+/*JP
 		"This cookie has a scrap of paper inside.";
+*/
+		"このクッキーには紙切が入っている．";
 	const char *line;
 	char buf[BUFSZ];
 	boolean reading = (mechanism == BY_COOKIE ||
@@ -153,19 +173,31 @@
 	    else if (Blind) {
 		if (mechanism == BY_COOKIE)
 			pline(fortune_msg);
+/*JP
 		pline("What a pity that you cannot read it!");
+*/
+		pline("それを読めないなんて気の毒な！");
 	    	return;
 	    }
 	}
 	line = getrumor(truth, buf, reading ? FALSE : TRUE);
 	if (!*line)
+/*JP
 		line = "NetHack rumors file closed for renovation.";
+*/
+		line = "噂の真相は刷新のため休刊している．";
 	switch (mechanism) {
 	    case BY_ORACLE:
 	 	/* Oracle delivers the rumor */
+#if 0 /*JP*/
 		pline("True to her word, the Oracle %ssays: ",
 		  (!rn2(4) ? "offhandedly " : (!rn2(3) ? "casually " :
 		  (rn2(2) ? "nonchalantly " : ""))));
+#else
+		pline("約束どおりに，賢者は%s述べた:",
+		(!rn2(4) ? "無造作に" : (!rn2(3) ? "何気なく" :
+		(rn2(2) ? "無頓着に" : ""))));
+#endif
 		verbalize("%s", line);
 		exercise(A_WIS, TRUE);
 		return;
@@ -173,7 +205,10 @@
 		pline(fortune_msg);
 		/* FALLTHRU */
 	    case BY_PAPER:
+/*JP
 		pline("It reads:");
+*/
+		pline("それを読んだ:");
 		break;
 	}
 	pline("%s", line);
@@ -264,10 +299,18 @@
 		tmpwin = create_nhwindow(NHW_TEXT);
 		if (delphi)
 		    putstr(tmpwin, 0, special ?
+#if 0 /*JP*/
 		          "The Oracle scornfully takes all your money and says:" :
 		          "The Oracle meditates for a moment and then intones:");
+#else
+		      "賢者は軽蔑したようにあなたの全てのお金を受けとり，述べた：" :
+		      "賢者はしばらく冥想し，詠唱した：");
+#endif
 		else
+/*JP
 		    putstr(tmpwin, 0, "The message reads:");
+*/
+		    putstr(tmpwin, 0, "メッセージ:");
 		putstr(tmpwin, 0, "");
 
 		while(dlb_fgets(line, COLNO, oracles) && strcmp(line,"---\n")) {
@@ -278,7 +321,10 @@
 		destroy_nhwindow(tmpwin);
 		(void) dlb_fclose(oracles);
 	} else {
+/*JP
 		pline("Can't open oracles file!");
+*/
+		pline("oraclesファイルを開けない！");
 		oracle_flg = -1;	/* don't try to open it again */
 	}
 }
@@ -297,22 +343,34 @@
 	multi = 0;
 
 	if (!oracl) {
+/*JP
 		There("is no one here to consult.");
+*/
+		pline("ここには神託を述べる人はいない．");
 		return 0;
 	} else if (!oracl->mpeaceful) {
+/*JP
 		pline("%s is in no mood for consultations.", Monnam(oracl));
+*/
+		pline("賢者は神託を告げてくれる雰囲気ではない．");
 		return 0;
 #ifndef GOLDOBJ
 	} else if (!u.ugold) {
 #else
 	} else if (!umoney) {
 #endif
+/*JP
 		You("have no money.");
+*/
+		You("お金がない．");
 		return 0;
 	}
 
 	Sprintf(qbuf,
+/*JP
 		"\"Wilt thou settle for a minor consultation?\" (%d %s)",
+*/
+		"「汝，低位の神託を受けるか？」(%d%s)",
 		minor_cost, currency((long)minor_cost));
 	switch (ynq(qbuf)) {
 	    default:
@@ -324,7 +382,10 @@
 #else
 		if (umoney < (long)minor_cost) {
 #endif
+/*JP
 		    You("don't even have enough money for that!");
+*/
+		    You("これに払えるだけのお金すら持っていない！");
 		    return 0;
 		}
 		u_pay = minor_cost;
@@ -337,7 +398,10 @@
 #endif
 		    (oracle_cnt == 1 || oracle_flg < 0)) return 0;
 		Sprintf(qbuf,
+/*JP
 			"\"Then dost thou desire a major one?\" (%d %s)",
+*/
+			"「ならば汝，高位の神託を受けるか？」(%d%s)",
 			major_cost, currency((long)major_cost));
 		if (yn(qbuf) != 'y') return 0;
 #ifndef GOLDOBJ
diff -aurN slashem-0.0.7E6F2/src/save.c jslashem-0.0.7E6F2-J0.0.8/src/save.c
--- slashem-0.0.7E6F2/src/save.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/save.c	2004-06-27 16:54:48.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 #include "quest.h"
@@ -67,19 +75,28 @@
 #endif
 
 	clear_nhwindow(WIN_MESSAGE);
+/*JP
 	if(yn("Really save?") == 'n') {
+*/
+	if(yn("本当に保存する？") == 'n') {
 		clear_nhwindow(WIN_MESSAGE);
 		if(multi > 0) nomul(0);
 	} else {
 		clear_nhwindow(WIN_MESSAGE);
+/*JP
 		pline("Saving...");
+*/
+		pline("保存中．．．");
 #if defined(UNIX) || defined(VMS) || defined(__EMX__)
 		program_state.done_hup = 0;
 #endif
 #ifdef KEEP_SAVE
                 saverestore = FALSE;
                 if (flags.keep_savefile)
+/*JP
                         if(yn("Really quit?") == 'n') saverestore = TRUE;
+*/
+                        if(yn("本当に保存する？") == 'n') saverestore = TRUE;
                 if(dosave0() && !saverestore) {
 #else
 		if(dosave0()) {
@@ -88,7 +105,10 @@
 			u.uhp = -1;		/* universal game's over indicator */
 			/* make sure they see the Saving message */
 			display_nhwindow(WIN_MESSAGE, TRUE);
+/*JP
 			exit_nhwindows("Be seeing you...");
+*/
+			exit_nhwindows("また会いましょう．．．");
 			terminate(EXIT_SUCCESS);
 	}
 /*WAC redraw later
@@ -190,8 +210,14 @@
 	    if (fd > 0) {
 		(void) close(fd);
 		clear_nhwindow(WIN_MESSAGE);
+/*JP
 		There("seems to be an old save file.");
+*/
+		pline("前にセーブしたファイルがあります．");
+/*JP
 		if (yn("Overwrite the old file?") == 'n') {
+*/
+		if (yn("古いファイルに上書きしますか？") == 'n') {
 		    compress_area(fq_save, SAVEF);
 #ifdef KEEP_SAVE
 /*WAC don't restore if you didn't save*/
diff -aurN slashem-0.0.7E6F2/src/shk.c jslashem-0.0.7E6F2-J0.0.8/src/shk.c
--- slashem-0.0.7E6F2/src/shk.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/shk.c	2004-08-22 22:50:32.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "eshk.h"
 
@@ -159,7 +167,11 @@
     obj_extract_self(mongold);
 
     if (!merge_choice(invent, mongold) && inv_cnt() >= 52) {
+#if 0 /*JP*/
 	You("have no room for the money!");
+#else
+	You("お金を持つ余裕がない！");
+#endif
 	dropy(mongold);
     } else {
 	addinv(mongold);
@@ -349,12 +361,18 @@
 	register boolean nokops;
 	char kopname[20];
   
+/*JP
 	Strcpy(kopname, "Keystone Kops");
+*/
+	Strcpy(kopname, "警備員");
 
 	if(!shkp) return;
 
 	if (flags.soundok)
+/*JP
 	    pline("An alarm sounds!");
+*/
+	    pline("警報が鳴りひびいた！");
 
 	nokops = ((mvitals[PM_KEYSTONE_KOP].mvflags & G_GONE) &&
 		  (mvitals[PM_KOP_SERGEANT].mvflags & G_GONE) &&
@@ -368,13 +386,19 @@
 		  (mvitals[PM_LIEUTENANT].mvflags & G_GONE) &&
 		  (mvitals[PM_CAPTAIN].mvflags & G_GONE));
  
+/*JP
 	Strcpy(kopname, "guards");
+*/
+	Strcpy(kopname, "守衛");
       }
 #endif /* defined(BLACKMARKET) */
  
 	if(!angry_guards(!flags.soundok) && nokops) {
 	    if(flags.verbose && flags.soundok)
+/*JP
 		pline("But no one seems to respond to it.");
+*/
+		pline("しかし誰も応答しなかった．");
 	    return;
 	}
 
@@ -390,14 +414,20 @@
 		{
 		/* Create swarm around you, if you merely "stepped out" */
 		if (flags.verbose)
+/*JP
 		    pline_The("%s appear!", kopname);
+*/
+		    pline_The("%sが現れた！", kopname);
 		mm.x = u.ux;
 		mm.y = u.uy;
 		makekops(&mm);
 		return;
 	    }
 	    if (flags.verbose)
+/*JP
 		 pline_The("%s are after you!", kopname);
+*/
+		 pline("%sがいる！", kopname);
 	    /* Create swarm near down staircase (hinders return to level) */
 #ifdef BLACKMARKET            
 	    if (Is_blackmarket(&u.uz)) {
@@ -448,8 +478,12 @@
 	if (!mt->mtame && NAME(mt) && *NAME(mt) && mt->mpeaceful &&
 		mt != shkp && inside_shop(mt->mx, mt->my) == eshkp->shoproom) {
 	    if (!mesg_given) {
+#if 0 /*JP*/
 		pline("%s calls for %s assistants!",
 			noit_Monnam(shkp), mhis(shkp));
+#else
+		pline("%sは助っ人を呼んだ！", noit_Monnam(shkp));
+#endif
 		mesg_given = TRUE;
 	    }
 	    wakeup(mt);
@@ -507,8 +541,13 @@
 	     * Try to intimidate him into paying his bill
 	     */
 	    verbalize(NOTANGRY(shkp) ?
+#if 0 /*JP*/
 		      "%s!  Please pay before leaving." :
 		      "%s!  Don't you leave without paying!",
+#else
+		      "%sさん！帰る前に，お金を払っていただけませんか．" :
+		      "%s！帰る前に，金を払え！",
+#endif
 		      plname);
 	    return;
 	}
@@ -573,11 +612,18 @@
 	rouse_shk(shkp, TRUE);
 	total = (addupbill(shkp) + eshkp->debit);
 	if (eshkp->credit >= total) {
+#if 0 /*JP*/
 	    Your("credit of %ld %s is used to cover your shopping bill.",
+#else
+	    Your("預け金から%ld%sが勘定の支払いに使われた．",
+#endif
 		 eshkp->credit, currency(eshkp->credit));
 	    total = 0L;		/* credit gets cleared by setpaid() */
 	} else {
+/*JP
 	    You("escaped the shop without paying!");
+*/
+	    You("金を払わずに店から逃げた！");
 	    total -= eshkp->credit;
 	}
 	setpaid(shkp);
@@ -585,11 +631,18 @@
 
 	/* by this point, we know an actual robbery has taken place */
 	eshkp->robbed += total;
+#if 0 /*JP*/
 	You("stole %ld %s worth of merchandise.",
+#else
+	You("雑貨を%ld%s分盗んだ．",
+#endif
 	    total, currency(total));
 	if (!Role_if(PM_ROGUE)) {     /* stealing is unlawful */
 	    adjalign(-sgn(u.ualign.type));
+/*JP
 	    You("feel like an evil rogue.");
+*/
+	    pline("これではまるで泥棒だ．");
 	}
 
 	hot_pursuit(shkp);
@@ -604,7 +657,10 @@
 	register int rt;
 	register struct monst *shkp;
 	register struct eshk *eshkp;
+/*JP
 	static const char no_shk[] = "This shop appears to be deserted.";
+*/
+	static const char no_shk[] = "店は廃虚と化している．";
 	static char empty_shops[5];
 
 	if(!*enterstring)
@@ -647,14 +703,23 @@
 	    return;	/* no dialog */
 
 	if (Invis) {
+/*JP
 	    pline("%s senses your presence.", shkname(shkp));
+*/
+	    pline("%sはあなたの存在に気がついた．", shkname(shkp));
 #ifdef BLACKMARKET            
 	    if (!Is_blackmarket(&u.uz)) {
+/*JP
 	    verbalize("Invisible customers are not welcome!");
+*/
+	    verbalize("透明なお客さんとは感心しないな！");
 	    return;
 	}
 #else /* BLACKMARKET */
+/*JP
 	    verbalize("Invisible customers are not welcome!");
+*/
+	    verbalize("透明なお客さんとは感心しないな！");
 	    return;
 #endif /* BLACKMARKET */
 	}
@@ -662,7 +727,10 @@
 #ifdef BLACKMARKET
 	    if (Is_blackmarket(&u.uz) &&
 		u.umonnum>0 && mons[u.umonnum].mlet != S_HUMAN) {
+/*JP
 	      verbalize("Non-human customers are not welcome!");
+*/
+	      verbalize("人間じゃないお客さんとは感心しないな！");
 	      return;
 	}
 #endif /* BLACKMARKET */
@@ -670,18 +738,32 @@
 	rt = rooms[*enterstring - ROOMOFFSET].rtype;
 
 	if (ANGRY(shkp)) {
+/*JP
 	    verbalize("So, %s, you dare return to %s %s?!",
+*/
+	    verbalize("%s！わざわざ%sの%sに戻ってきたのか？！",
 		      plname,
 		      s_suffix(shkname(shkp)),
 		      shtypes[rt - SHOPBASE].name);
 	} else if (eshkp->robbed) {
+/*JP
 	    pline("%s mutters imprecations against shoplifters.", shkname(shkp));
+*/
+	    pline("%sは泥棒をののしった．", shkname(shkp));
 	} else {
+#if 0 /*JP*/
 	    verbalize("%s, %s!  Welcome%s to %s %s!",
 		      Hello(shkp), plname,
 		      eshkp->visitct++ ? " again" : "",
 		      s_suffix(shkname(shkp)),
 		      shtypes[rt - SHOPBASE].name);
+#else
+	    verbalize("%s！%sの%sに%s！",
+		      Hello(shkp, TRUE),
+		      shkname(shkp),
+		      shtypes[rt - SHOPBASE].name,
+		      eshkp->visitct++ ? "また来ましたね" : "ようこそ");
+#endif
 	}
 	/* can't do anything about blocking if teleported in */
 	if (!inside_shop(u.ux, u.uy)) {
@@ -694,30 +776,50 @@
 	    if (pick || mattock) {
 		int cnt = 1;
 		if (pick && mattock) {	/* carrying both types */
+/*JP
 		    tool = "digging tool";
+*/
+		    tool = "掘る道具";
 		    cnt = 2;	/* `more than 1' is all that matters */
 		} else if (pick) {
+/*JP
 		    tool = "pick-axe";
+*/
+		    tool = "つるはし";
 		    /* hack: `pick' already points somewhere into inventory */
 		    while ((pick = pick->nobj) != 0)
 			if (pick->otyp == PICK_AXE) ++cnt;
 		} else {	/* assert(mattock != 0) */
+/*JP
 		    tool = "mattock";
+*/
+		    tool = "つるはし";
 		    while ((mattock = mattock->nobj) != 0)
 			if (mattock->otyp == DWARVISH_MATTOCK) ++cnt;
 		    /* [ALI] Shopkeeper indicates mattock(s) */
 		    if (!Blind) makeknown(DWARVISH_MATTOCK);
 		}
 		verbalize(NOTANGRY(shkp) ?
+#if 0 /*JP*/
 			  "Will you please leave your %s%s outside?" :
 			  "Leave the %s%s outside.",
 			  tool, plur(cnt));
+#else
+			  "%sを外に置いてきていただけませんか？" :
+			  "%sを外へ置いてこい！",
+			  tool);
+#endif
 		should_block = TRUE;
 #ifdef STEED
 	    } else if (u.usteed) {
 		verbalize(NOTANGRY(shkp) ?
+#if 0 /*JP*/
 			  "Will you please leave %s outside?" :
 			  "Leave %s outside.", y_monnam(u.usteed));
+#else
+			  "%sを外に置いてきていただけませんか？" :
+			  "%sを外へ置いてこい！", y_monnam(u.usteed));
+#endif
 		should_block = TRUE;
 #endif
 	    } else {
@@ -790,7 +892,10 @@
 
 	if (this_shkp &&
 	    !(ESHK(this_shkp)->credit || shop_debt(ESHK(this_shkp)))) {
+/*JP
 	    You("have no credit or debt in here.");
+*/
+	    You("預け金も借金もない．");
 	    this_shkp = 0;	/* skip first pass */
 	}
 
@@ -802,16 +907,30 @@
 		if ((shkp != this_shkp) ^ pass) continue;
 		eshkp = ESHK(shkp);
 		if ((amt = eshkp->credit) != 0)
+#if 0 /*JP*/
 		    You("have %ld %s credit at %s %s.",
+#else
+		    You("%ld%sの預け金が%sの%sにある．",
+#endif
 			amt, currency(amt), s_suffix(shkname(shkp)),
 			shtypes[eshkp->shoptype - SHOPBASE].name);
 		else if (shkp == this_shkp)
+/*JP
 		    You("have no credit in here.");
+*/
+		    You("預け金はない．");
 		if ((amt = shop_debt(eshkp)) != 0)
+#if 0 /*JP*/
 		    You("owe %s %ld %s.",
+#else
+		    You("%sに%ld%sの借りがある．",
+#endif
 			shkname(shkp), amt, currency(amt));
 		else if (shkp == this_shkp)
+/*JP
 		    You("don't owe any money here.");
+*/
+		    pline("この店に借りはない．");
 	    }
 }
 
@@ -868,11 +987,17 @@
 
 		while (--ct >= 0)
 		    if (bp->bo_id == obj->o_id) {
+/*JP
 			if (!obj->unpaid) pline("onbill: paid obj on bill?");
+*/
+			if (!obj->unpaid) pline("勘定：払う？");
 			return bp;
 		    } else bp++;
 	}
+/*JP
 	if(obj->unpaid & !silent) pline("onbill: unpaid obj not on bill?");
+*/
+	if(obj->unpaid & !silent) pline("勘定：払わない？");
 	return (struct bill_x *)0;
 }
 
@@ -1090,11 +1215,17 @@
 
 	if(credit == 0L) return(tmp);
 	if(credit >= tmp) {
+/*JP
 		pline_The("price is deducted from your credit.");
+*/
+		pline("代金は預け金から差し引かれた．");
 		ESHK(shkp)->credit -=tmp;
 		tmp = 0L;
 	} else {
+/*JP
 		pline_The("price is partially covered by your credit.");
+*/
+		pline("代金の一部はあなたの預け金で補われた．");
 		ESHK(shkp)->credit = 0L;
 		tmp -= credit;
 	}
@@ -1140,7 +1271,10 @@
 #ifdef KOPS
 		kops_gone(TRUE);
 #else
+/*JP
 		You_feel("vaguely apprehensive.");
+*/
+		You("なんとなく不安に思った．");
 #endif
 		pacify_guards();
 	}
@@ -1205,8 +1339,13 @@
 	if (!shkp->mcanmove || shkp->msleeping) {
 	    /* greed induced recovery... */
 	    if (verbosely && canspotmon(shkp))
+#if 0 /*JP*/
 		pline("%s %s.", Monnam(shkp),
 		      shkp->msleeping ? "wakes up" : "can move again");
+#else
+		pline("%sは%s．", Monnam(shkp),
+		      shkp->msleeping ? "目が覚めた" : "ふたたび動けるようになった");
+#endif
 	    shkp->msleeping = 0;
 	    shkp->mfrozen = 0;
 	    shkp->mcanmove = 1;
@@ -1228,7 +1367,10 @@
 	eshkp->robbed = 0L;
 	if (guilty && !Role_if(PM_ROGUE)) {
 		adjalign(sgn(u.ualign.type));
+/*JP
 		You("feel your guilt vanish.");        
+*/
+		You("罪が許されたと感じた．");
 	}
 	if(!inhishop(shkp)) {
 		char shk_nam[BUFSZ];
@@ -1250,9 +1392,15 @@
 					 MIGR_APPROX_XY, &eshkp->shd);
 		}
 		if (vanished)
+/*JP
 		    pline("Satisfied, %s suddenly disappears!", shk_nam);
+*/
+		    pline("%sは満足すると，突然消えた！", shk_nam);
 	} else if(wasmad)
+/*JP
 		pline("%s calms down.", Monnam(shkp));
+*/
+		pline("%sは落着いた．", Monnam(shkp));
 
 	if(!angry_shk_exists()) {
 #ifdef KOPS
@@ -1302,15 +1450,28 @@
 	sx = shkp->mx,  sy = shkp->my;
 	if (isok(ox, oy) && cansee(ox, oy) && !cansee(sx, sy))
 		shkp->mx = ox,  shkp->my = oy;
+#if 0 /*JP*/
 	pline("%s %s!", Monnam(shkp),
 	      !ANGRY(shkp) ? "gets angry" : "is furious");
+#else
+	pline("%sは%s！", Monnam(shkp),
+	      !ANGRY(shkp) ? "怒った" : "怒り狂った");
+#endif
 	shkp->mx = sx,  shkp->my = sy;
 	hot_pursuit(shkp);
 }
 
+/*JP
 STATIC_VAR const char no_money[] = "Moreover, you%s have no money.";
+*/
+STATIC_VAR const char no_money[] = "しかしあなたはお金がない%s．";
+#if 0 /*JP:T*/
 STATIC_VAR const char not_enough_money[] =
 			    "Besides, you don't have enough to interest %s.";
+#else
+STATIC_VAR const char not_enough_money[] =
+		"しかも，あなたは%sが興味を持つほどお金を持っていない！";
+#endif
 
 #else
 STATIC_VAR const char no_money[];
@@ -1380,12 +1541,18 @@
 	}
 
 	if ((!sk && (!Blind || Blind_telepat)) || (!Blind && !seensk)) {
+/*JP
       There("appears to be no shopkeeper here to receive your payment.");
+*/
+      pline("支払いを受けとる店主はここにはいないようだ．");
 		return(0);
 	}
 
 	if(!seensk) {
+/*JP
 		You_cant("see...");
+*/
+		You("見ることができない．．．");
 		return(0);
 	}
 
@@ -1407,7 +1574,10 @@
 			shkp; shkp = next_shkp(shkp->nmon, FALSE))
 		    if (canspotmon(shkp)) break;
 		if (shkp != resident && distu(shkp->mx, shkp->my) > 2) {
+/*JP
 		    pline("%s is not near enough to receive your payment.",
+*/
+		    pline("%sは遠くにいるので支払えない．",
 					     Monnam(shkp));
 		    return(0);
 		}
@@ -1416,24 +1586,39 @@
 		coord cc;
 		int cx, cy;
 
+/*JP
 		pline("Pay whom?");
+*/
+		pline("誰に払う？");
 		cc.x = u.ux;
 		cc.y = u.uy;
+/*JP
 		if (getpos(&cc, TRUE, "the creature you want to pay") < 0)
+*/
+		if (getpos(&cc, TRUE, "支払いたい相手") < 0)
 		    return 0;	/* player pressed ESC */
 		cx = cc.x;
 		cy = cc.y;
 		if(cx < 0) {
+/*JP
 		     pline("Try again...");
+*/
+		     pline("もう一度．．．");
 		     return(0);
 		}
 		if(u.ux == cx && u.uy == cy) {
+/*JP
 		     You("are generous to yourself.");
+*/
+		     pline("自分自身になんて気前のいいこと！");
 		     return(0);
 		}
 		mtmp = m_at(cx, cy);
 		if(!mtmp) {
+/*JP
 		     There("is no one there to receive your payment.");
+*/
+		     pline("支払いを受けとれる相手はいない．");
 		     return(0);
 		}
 		/* KMH -- Permit paying gypsies */
@@ -1444,12 +1629,18 @@
 			}
 		} else
 		if(!mtmp->isshk) {
+/*JP
 		     pline("%s is not interested in your payment.",
+*/
+		     pline("%sは支払いに興味を示さない．",
 				    Monnam(mtmp));
 		     return(0);
 		}
 		if (mtmp != resident && distu(mtmp->mx, mtmp->my) > 2) {
+/*JP
 		     pline("%s is too far to receive your payment.",
+*/
+		     pline("%sは支払いを受けとるには遠すぎる．",
 				    Monnam(mtmp));
 		     return(0);
 		}
@@ -1471,8 +1662,13 @@
 	    rouse_shk(shkp, TRUE);
 
 	if (!shkp->mcanmove || shkp->msleeping) { /* still asleep/paralyzed */
+#if 0 /*JP:T*/
 		pline("%s %s.", Monnam(shkp),
 		      rn2(2) ? "seems to be napping" : "doesn't respond");
+#else
+		pline("%sは%s．", Monnam(shkp),
+		      rn2(2) ? "居眠りをしているようだ" : "反応がない");
+#endif
 		return 0;
 	}
 
@@ -1481,20 +1677,30 @@
                 umoney = money_cnt(invent);
 #endif
 		if(!ltmp)
+/*JP
 		    You("do not owe %s anything.", mon_nam(shkp));
+*/
+		    You("%sに借りはない．", mon_nam(shkp));
 #ifndef GOLDOBJ
 		else if(!u.ugold) {
 #else
 		else if(!umoney) {
 #endif
+/*JP
 		    You("%shave no money.", stashed_gold ? "seem to " : "");
+*/
+		    You("お金がない%s．", stashed_gold ? "ようだ" : "");
 		    if(stashed_gold)
 
+#if 0 /*JP*/
 #ifndef GOLDOBJ
 			pline("But you have some gold stashed away.");
 #else
 				pline("But you have some money stashed away.");
 #endif
+#else /*JP*/
+			pline("しかし，あなたにはちょっっとしたヘソクリがある．");
+#endif /*JP*/
 		} else {
 #ifndef GOLDOBJ
 		    long ugold = u.ugold;
@@ -1502,22 +1708,42 @@
 #else
 		    if(umoney > ltmp) {
 #endif
+#if 0 /*JP*/
 			You("give %s the %ld gold piece%s %s asked for.",
 			    mon_nam(shkp), ltmp, plur(ltmp), mhe(shkp));
+#else
+			You("%sに望み通り%ldの金塊を与えた．",
+			    mon_nam(shkp), ltmp);
+#endif
 			pay(ltmp, shkp);
 		    } else {
 #ifndef GOLDOBJ
+/*JP
 			You("give %s all your%s gold.", mon_nam(shkp),
+*/
+			You("%sに%s金塊全部を与えた．", mon_nam(shkp),
 #else
+/*JP
 			You("give %s all your%s money.", mon_nam(shkp),
+*/
+			You("%sに%sお金全部を与えた．", mon_nam(shkp),
 #endif
+/*JP
 					stashed_gold ? " openly kept" : "");
+*/
+					stashed_gold ? "手持ちの" : "");
 #ifndef GOLDOBJ
 			pay(u.ugold, shkp);
+/*JP
 			if (stashed_gold) pline("But you have hidden gold!");
+*/
+			if (stashed_gold) pline("しかし，あなたはヘソクリがある！");
 #else
 			pay(umoney, shkp);
+/*JP
 			if (stashed_gold) pline("But you have hidden money!");
+*/
+			if (stashed_gold) pline("しかし，あなたはヘソクリがある！");
 #endif
 		    }
 #ifndef GOLDOBJ
@@ -1525,7 +1751,10 @@
 #else
 		    if((umoney < ltmp/2L) || (umoney < ltmp && stashed_gold))
 #endif
+/*JP
 			pline("Unfortunately, %s doesn't look satisfied.",
+*/
+			pline("残念ながら，%sは満足してないようだ．",
 			      mhe(shkp));
 		    else
 			make_happy_shk(shkp, FALSE);
@@ -1539,13 +1768,19 @@
                 umoney = money_cnt(invent);
 #endif
 		if(!ltmp && NOTANGRY(shkp)) {
+/*JP
 		    You("do not owe %s anything.", mon_nam(shkp));
+*/
+		    You("%sに借りはない．", mon_nam(shkp));
 #ifndef GOLDOBJ
 		    if (!u.ugold)
 #else
 		    if (!umoney)
 #endif
+/*JP
 			pline(no_money, stashed_gold ? " seem to" : "");
+*/
+		        pline(no_money, stashed_gold ? "ようだ" : "");
 		 
 #ifdef OTHER_SERVICES
 /*		    else */
@@ -1553,7 +1788,10 @@
 #endif                
 		
 		} else if(ltmp) {
+/*JP
 		    pline("%s is after blood, not money!", Monnam(shkp));
+*/
+		    pline("%sは血まみれだ．お金どころじゃない！", Monnam(shkp));
 #ifndef GOLDOBJ
 		    if(u.ugold < ltmp/2L ||
 				(u.ugold < ltmp && stashed_gold)) {
@@ -1563,20 +1801,34 @@
 				(umoney < ltmp && stashed_gold)) {
 			if (!umoney)
 #endif
+/*JP
 			    pline(no_money, stashed_gold ? " seem to" : "");
+*/
+			    pline(no_money, stashed_gold ? "ようだ" : "");
 			else pline(not_enough_money, mhim(shkp));
 			return(1);
 		    }
+/*JP
 		    pline("But since %s shop has been robbed recently,",
+*/
+		    pline("しかし，%sの店は最近盗みにあったので，",
 			  mhis(shkp));
+#if 0 /*JP*/
 		    pline("you %scompensate %s for %s losses.",
+#else
+		    You("%sの損失%sを補填した．", mon_nam(shkp),
+#endif
 #ifndef GOLDOBJ
 			  (u.ugold < ltmp) ? 
 #else
 			  (umoney < ltmp) ?
 #endif
+#if 0 /*JP*/
 			  "partially " : "",
 			  mon_nam(shkp), mhis(shkp));
+#else
+			  "の一部" : "");
+#endif
 #ifndef GOLDOBJ
 		    pay(u.ugold < ltmp ? u.ugold : ltmp, shkp);
 #else
@@ -1586,7 +1838,10 @@
 		} else {
 		    /* shopkeeper is angry, but has not been robbed --
 		     * door broken, attacked, etc. */
+/*JP
 		    pline("%s is after your hide, not your money!",
+*/
+		    pline("%sはあなたの命を狙っている，お金どころじゃない！",
 			  Monnam(shkp));
 #ifndef GOLDOBJ
 		    if(u.ugold < 1000L) {
@@ -1595,18 +1850,29 @@
 		    if(umoney < 1000L) {
 			if (!umoney)
 #endif
+/*JP
 			    pline(no_money, stashed_gold ? " seem to" : "");
+*/
+			    pline(no_money, stashed_gold ? "ようだ" : "");
 			else pline(not_enough_money, mhim(shkp));
 			return(1);
 		    }
+#if 0 /*JP*/
 		    You("try to appease %s by giving %s 1000 gold pieces.",
 			x_monnam(shkp, ARTICLE_THE, "angry", 0, FALSE),
 			mhim(shkp));
+#else
+		    You("金貨1000枚を%sに手渡してなだめようとした．",
+			x_monnam(shkp, ARTICLE_THE, "怒った", 0, FALSE));
+#endif
 		    pay(1000L,shkp);
 		    if (strncmp(eshkp->customer, plname, PL_NSIZ) || rn2(3))
 			make_happy_shk(shkp, FALSE);
 		    else
+/*JP
 			pline("But %s is as angry as ever.", mon_nam(shkp));
+*/
+			pline("しかし%sはまだ怒っている．", mon_nam(shkp));
 		}
 		return(1);
 	}
@@ -1623,32 +1889,63 @@
 #ifdef GOLDOBJ
                 umoney = money_cnt(invent);
 #endif
+#if 0 /*JP*/
 		Sprintf(sbuf, "You owe %s %ld %s ",
 					   shkname(shkp), dtmp, currency(dtmp));
+#endif
 		if(loan) {
 		    if(loan == dtmp)
+/*JP
 			Strcat(sbuf, "you picked up in the store.");
+*/
+			Strcpy(sbuf, "店の中で拾ったものに対して，");
+#if 0 /*JP*/
 		    else Strcat(sbuf,
 			   "for gold picked up and the use of merchandise.");
+#else
+		    else Strcpy(sbuf,"拾ったお金や使った雑貨に対して，");
+#endif
+/*JP
 		} else Strcat(sbuf, "for the use of merchandise.");
+*/
+		} else Strcpy(sbuf, "使った雑貨に対して，");
+#if 1 /*JP*/
+		Sprintf(eos(sbuf), "%sに%ld%sの借りがある．",
+			shkname(shkp), dtmp, currency(dtmp));
+#endif
 		pline(sbuf);
 #ifndef GOLDOBJ
 		if (u.ugold + eshkp->credit < dtmp) {
+#if 0 /*JP*/
 		    pline("But you don't%s have enough gold%s.",
+#else /*JP*/
+		    pline("しかし，金塊%s足りない%s．",
+#endif /*JP*/
 #else
 		if (umoney + eshkp->credit < dtmp) {
+#if 0 /*JP*/
 		    pline("But you don't%s have enough money%s.",
+#else /*JP*/
+		    pline("しかし，お金%s足りない%s．",
+#endif /*JP*/
 #endif
-
+#if 0 /*JP*/
 			stashed_gold ? " seem to" : "",
 			eshkp->credit ? " or credit" : "");
+#else
+			eshkp->credit ? "も預け金も" : "が",
+			stashed_gold ? "ようだ" : "");
+#endif
 		    return(1);
 		} else {
 		    if (eshkp->credit >= dtmp) {
 			eshkp->credit -= dtmp;
 			eshkp->debit = 0L;
 			eshkp->loan = 0L;
+/*JP
 			Your("debt is covered by your credit.");
+*/
+			Your("借金は預け金で補われた．");
 		    } else if (!eshkp->credit) {
 #ifndef GOLDOBJ
 			u.ugold -= dtmp;
@@ -1658,7 +1955,10 @@
 #endif
 			eshkp->debit = 0L;
 			eshkp->loan = 0L;
+/*JP
 			You("pay that debt.");
+*/
+			You("借金を払った．");
 			flags.botl = 1;
 		    } else {
 			dtmp -= eshkp->credit;
@@ -1671,8 +1971,14 @@
 #endif
 			eshkp->debit = 0L;
 			eshkp->loan = 0L;
+/*JP
 			pline("That debt is partially offset by your credit.");
+*/
+			pline("その借金は一部預け金で相殺された．");
+/*JP
 			You("pay the remainder.");
+*/
+			You("残りを払った．");
 			flags.botl = 1;
 		    }
 		    paid = TRUE;
@@ -1687,9 +1993,15 @@
             umoney = money_cnt(invent);
 	    if (!umoney && !eshkp->credit) {
 #endif
+#if 0 /*JP*/
 		You("%shave no money or credit%s.",
 				    stashed_gold ? "seem to " : "",
 				    paid ? " left" : "");
+#else
+		You("%sお金も預け金も持ってない%s．",
+				    paid ? "もう" : "",
+				    stashed_gold ? "ようだ" : "");
+#endif
 		return(0);
 	    }
 #ifndef GOLDOBJ
@@ -1697,20 +2009,33 @@
 #else
 	    if ((umoney + eshkp->credit) < cheapest_item(shkp)) {
 #endif
+#if 0 /*JP*/
 		You("don't have enough money to buy%s the item%s you picked.",
 		    eshkp->billct > 1 ? " any of" : "", plur(eshkp->billct));
+#else
+		pline("拾った品物を買うにはお金が足りない．");
+#endif
 		if(stashed_gold)
 #ifndef GOLDOBJ
+/*JP
 		    pline("Maybe you have some gold stashed away?");
+*/
+		    You("どこかに金塊を隠しているのかも？");
 #else
+/*JP
 		    pline("Maybe you have some money stashed away?");
+*/
+		    You("どこかにお金を隠しているのかも？");
 #endif
 		return(0);
 	    }
 
 	    /* this isn't quite right; it itemizes without asking if the
 	     * single item on the bill is partly used up and partly unpaid */
+/*JP
 	    itemize = (eshkp->billct > 1 ? yn("Itemized billing?") == 'y' : 1);
+*/
+	    itemize = (eshkp->billct > 1 ? yn("個別に勘定しますか？") == 'y' : 1);
 
 	    for (pass = 0; pass <= 1; pass++) {
 		tmp = 0;
@@ -1763,7 +2088,10 @@
 	        update_inventory(); /* Done in dopayobj() if itemize. */
 	}
 	if(!ANGRY(shkp) && paid)
+/*JP
 	    verbalize("Thank you for shopping in %s %s!",
+*/
+	    verbalize("%sの%sへまたどうぞ！",
 		s_suffix(shkname(shkp)),
 		shtypes[eshkp->shoptype - SHOPBASE].name);
 	return(1);
@@ -1791,13 +2119,22 @@
 	int n;
 
 	/* Do you want to use other services */
+/*JP
 	if (yn("Do you wish to try our other services?") != 'y' ) return;
+*/
+	if (yn("その他のサービスを受けますか？") != 'y' ) return;
 
 	/* Init your name */
 	if (!is_human(youmonst.data))
+/*JP
 		slang="ugly";
+*/
+		slang="お前さん";
 	else
+/*JP
 		slang = (flags.female) ? "lady" : "buddy";
+*/
+		slang = (flags.female) ? "お嬢さん" : "旦那";
 
 	/* Init the shopkeeper */
 	shkp = shop_keeper(/* roomno= */*u.ushops);
@@ -1823,20 +2160,29 @@
 	any.a_int = 1;
 	if (ESHK(shkp)->services & (SHK_ID_BASIC|SHK_ID_PREMIUM))
 	     add_menu(tmpwin, NO_GLYPH, &any , 'i', 0, ATR_NONE,
+/*JP
 	         "Identify", MENU_UNSELECTED);
+*/
+	         "識別", MENU_UNSELECTED);
   
   	/* All shops can uncurse */
 	any.a_int = 2;
 	if (ESHK(shkp)->services & (SHK_UNCURSE))
 	     add_menu(tmpwin, NO_GLYPH, &any , 'u', 0, ATR_NONE,
+/*JP
 	         "Uncurse", MENU_UNSELECTED);
+*/
+	         "解呪", MENU_UNSELECTED);
   
   	/* Weapon appraisals.  Weapon & general stores can do this. */
 	if ((ESHK(shkp)->services & (SHK_UNCURSE)) &&
 			(shk_class_match(WEAPON_CLASS, shkp))) {
 		any.a_int = 3;
 		add_menu(tmpwin, NO_GLYPH, &any , 'a', 0, ATR_NONE,
+/*JP
 				"Appraise", MENU_UNSELECTED);
+*/
+				"武器鑑定", MENU_UNSELECTED);
 	}
   
   	/* Weapon-works!  Only a weapon store. */
@@ -1845,10 +2191,16 @@
 		any.a_int = 4;
 		if (ESHK(shkp)->services & (SHK_SPECIAL_A|SHK_SPECIAL_B))
 			add_menu(tmpwin, NO_GLYPH, &any , 'w', 0, ATR_NONE,
+/*JP
 				"Weapon-works", MENU_UNSELECTED);
+*/
+				"武器関係", MENU_UNSELECTED);
 		else
 			add_menu(tmpwin, NO_GLYPH, &any , 'p', 0, ATR_NONE,
+/*JP
 				"Poison", MENU_UNSELECTED);
+*/
+				"毒塗り", MENU_UNSELECTED);
 	}
   
   	/* Armor-works */
@@ -1856,7 +2208,10 @@
 			 && (shk_class_match(ARMOR_CLASS, shkp) == SHK_MATCH)) {
 		any.a_int = 5;
 		add_menu(tmpwin, NO_GLYPH, &any , 'r', 0, ATR_NONE,
+/*JP
 				"Armor-works", MENU_UNSELECTED);
+*/
+				"防具関係", MENU_UNSELECTED);
 	}
   
   	/* Charging: / ( = */
@@ -1867,10 +2222,16 @@
 			(shk_class_match(RING_CLASS, shkp) == SHK_MATCH))) {
 		any.a_int = 6;
 		add_menu(tmpwin, NO_GLYPH, &any , 'c', 0, ATR_NONE,
+/*JP
 				"Charge", MENU_UNSELECTED);
+*/
+				"充填", MENU_UNSELECTED);
 	}
 
+/*JP
 	end_menu(tmpwin, "Services Available:");
+*/
+	end_menu(tmpwin, "利用可能なサービス:");
 	n = select_menu(tmpwin, PICK_ONE, &selected);
 	destroy_nhwindow(tmpwin);
 
@@ -1940,8 +2301,13 @@
 #else
 	if(itemize && umoney + ESHK(shkp)->credit == 0L){
 #endif
+#if 0 /*JP*/
 		You("%shave no money or credit left.",
 			     stashed_gold ? "seem to " : "");
+#else
+		You("もうお金も預け金もない%s．",
+			     stashed_gold ? "ようだ" : "");
+#endif
 		return PAY_BROKE;
 	}
 	/* we may need to temporarily adjust the object, if part of the
@@ -1963,28 +2329,50 @@
 
 	if (itemize) {
 	    char qbuf[BUFSZ];
+#if 0 /*JP*/
 	    Sprintf(qbuf,"%s for %ld %s.  Pay?", quan == 1L ?
+#else
+	    Sprintf(qbuf,"%sは%ld%sです．買いますか？", quan == 1L ?
+#endif
 		    Doname2(obj) : doname(obj), ltmp, currency(ltmp));
 	    if (yn(qbuf) == 'n') {
 		buy = PAY_SKIP;		/* don't want to buy */
 	    } else if (quan < bp->bquan && !consumed) { /* partly used goods */
 		obj->quan = bp->bquan - save_quan;	/* used up amount */
+#if 0 /*JP*/
 		verbalize("%s for the other %s before buying %s.",
 			  ANGRY(shkp) ? "Pay" : "Please pay", xname(obj),
 			  save_quan > 1L ? "these" : "this one");
+#else
+		verbalize("それを買うまえに他の%sを%s",
+			  xname(obj),
+			  ANGRY(shkp) ? "払え！" : "払ってください．");
+#endif
 		buy = PAY_SKIP;		/* shk won't sell */
 	    }
 	}
 #ifndef GOLDOBJ
 	if (buy == PAY_BUY && u.ugold + ESHK(shkp)->credit < ltmp) {
+/*JP
 	    You("don't%s have gold%s enough to pay for %s.",
+*/
+	    You("%sの代金を支払うだけの金塊%s持ってない%s．",
 #else
 	if (buy == PAY_BUY && umoney + ESHK(shkp)->credit < ltmp) {
+/*JP
 	    You("don't%s have money%s enough to pay for %s.",
+*/
+	    You("%sの代金を支払うだけのお金%s持ってない%s．",
 #endif
+#if 0 /*JP*/
 		stashed_gold ? " seem to" : "",
 		(ESHK(shkp)->credit > 0L) ? " or credit" : "",
 		doname(obj));
+#else
+		doname(obj),
+		(ESHK(shkp)->credit > 0L) ? "も預け金も" : "を",
+		stashed_gold ? "ようだ" : "");
+#endif
 	    buy = itemize ? PAY_SKIP : PAY_CANT;
 	}
 
@@ -1996,9 +2384,15 @@
 	}
 
 	pay(ltmp, shkp);
+#if 0 /*JP*/
 	shk_names_obj(shkp, obj, consumed ?
 			"paid for %s at a cost of %ld gold piece%s.%s" :
 			"bought %s for %ld gold piece%s.%s", ltmp, "");
+#else
+	shk_names_obj(shkp, obj, consumed ?
+			"%sに金貨%ld枚%sを支払った．%s" :
+			"%sを金貨%ld枚%sで買った．%s", ltmp, "");
+#endif
 	obj->quan = save_quan;		/* restore original count */
 	/* quan => amount just bought, save_quan => remaining unpaid count */
 	if (consumed) {
@@ -2082,12 +2476,20 @@
 	/* already took everything you had.		*/
 	if (numsk > 1) {
 	    if (cansee(shkp->mx, shkp->my && croaked))
+#if 0 /*JP*/
 		pline("%s %slooks at your corpse%s and %s.",
 		      Monnam(shkp),
 		      (!shkp->mcanmove || shkp->msleeping) ? "wakes up, " : "",
 		      !rn2(2) ? (shkp->female ? ", shakes her head," :
 			   ", shakes his head,") : "",
 		      !inhishop(shkp) ? "disappears" : "sighs");
+#else
+		pline("%sは%sあなたの死体を見て%s%s．",
+		      Monnam(shkp),
+		      (!shkp->mcanmove || shkp->msleeping) ? "目をさますと" : "",
+		      !rn2(2) ? "首を振り，" : "",
+		      !inhishop(shkp) ? "姿を消した" : "溜息をついた");
+#endif
 	    rouse_shk(shkp, FALSE);	/* wake shk for bones */    
 	    taken = (roomno == eshkp->shoproom);
 	    goto skip;
@@ -2099,7 +2501,10 @@
 	    !eshkp->billct && !eshkp->robbed && !eshkp->debit &&
 	     NOTANGRY(shkp) && !eshkp->following) {
 		if (invent)
+/*JP
 			pline("%s gratefully inherits all your possessions.",
+*/
+			pline("%sはあなたの持ち物をありがたく受けとった．",
 				shkname(shkp));
 		set_repo_loc(eshkp);
 		goto clear;
@@ -2121,10 +2526,18 @@
 #endif
 		takes[0] = '\0';
 		if (!shkp->mcanmove || shkp->msleeping)
+/*JP
 			Strcat(takes, "wakes up and ");
+*/
+			Strcat(takes, "目がさめると，");
 		if (distu(shkp->mx, shkp->my) > 2)
+/*JP
 			Strcat(takes, "comes and ");
+*/
+			Strcat(takes, "近づき，");
+#if 0 /*JP*/
 		Strcat(takes, "takes");
+#endif
 
 #ifndef GOLDOBJ
 		if (loss > u.ugold || !loss || roomno == eshkp->shoproom) {
@@ -2139,7 +2552,10 @@
 			  if (umoney > 0) money2mon(shkp, umoney);
 #endif
 			flags.botl = 1;
+/*JP
 			pline("%s %s all your possessions.",
+*/
+			pline("%sは%sあなたの持ち物すべてをもらった．",
 			      shkname(shkp), takes);
 			taken = TRUE;
 			/* where to put player's invent (after disclosure) */
@@ -2152,12 +2568,20 @@
                         money2mon(shkp, loss);
 #endif
 			flags.botl = 1;
+#if 0 /*JP*/
 			pline("%s %s the %ld %s %sowed %s.",
 			      Monnam(shkp), takes,
 			      loss, currency(loss),
 			      strncmp(eshkp->customer, plname, PL_NSIZ) ?
 					"" : "you ",
 			      shkp->female ? "her" : "him");
+#else
+			pline("%sは%s%s借りている%ld%sを受けとった．",
+			      Monnam(shkp), takes,
+			      strncmp(eshkp->customer, plname, PL_NSIZ) ?
+					"" : "あなたが",
+			      loss, currency(loss));
+#endif
 			/* shopkeeper has now been paid in full */
 			pacify_shk(shkp);
 			eshkp->following = 0;
@@ -2550,7 +2974,10 @@
 		return;
 
 	if (ESHK(shkp)->billct == BILLSZ) {
+/*JP
 		You("got that for free!");
+*/
+		You("それをただで手に入れた！");
 		return;
 	}
 
@@ -2636,12 +3063,23 @@
 	obj_name = doname(obj);
 	/* Use an alternate message when extra information is being provided */
 	if (was_unknown) {
+/*JP
 	    Sprintf(fmtbuf, "%%s; you %s", fmt);
+*/
+	    Sprintf(fmtbuf, "%s", fmt);
 	    obj_name[0] = highc(obj_name[0]);
+#if 0 /*JP*/
 	    pline(fmtbuf, obj_name, (obj->quan > 1) ? "them" : "it",
 		  amt, plur(amt), arg);
+#else
+	    pline(fmtbuf, obj_name,
+		  amt, "", arg);
+#endif
 	} else {
+/*JP
 	    You(fmt, obj_name, amt, plur(amt), arg);
+*/
+	    You(fmt, obj_name, amt, "", arg);
 	}
 }
 
@@ -2667,7 +3105,10 @@
 	      ) return;
 
 	if(ESHK(shkp)->billct == BILLSZ) {
+/*JP
 		You("got that for free!");
+*/
+		You("それをただで手に入れた！");
 		return;
 	}
 
@@ -2719,37 +3160,74 @@
 	    char buf[BUFSZ];
 
 	    if(!ltmp) {
+/*JP
 		pline("%s has no interest in %s.", Monnam(shkp),
+*/
+		pline("%sは%sに興味を示さない．", Monnam(shkp),
 					     the(xname(obj)));
 		return;
 	    }
+#if 0 /*JP*/
 	    Strcpy(buf, "\"For you, ");
 	    if (ANGRY(shkp)) Strcat(buf, "scum ");
+#else
+	    Strcpy(buf, "「");
+	    if (ANGRY(shkp)) Strcat(buf, "このクソったれ");
+#endif
 	    else {
 		static const char *honored[5] = {
+#if 0 /*JP*/
 		  "good", "honored", "most gracious", "esteemed",
 		  "most renowned and sacred"
+#else
+		    "やぁ", "やぁ，名誉ある", "やぁ，上品な", "やぁ，尊敬する",
+		    "やぁ，高名で神聖な"
+#endif
 		};
 		Strcat(buf, honored[rn2(4) + u.uevent.udemigod]);
+/*JP
 		if (!is_human(youmonst.data)) Strcat(buf, " creature");
+*/
+		if (!is_human(youmonst.data)) Strcat(buf, "生物さん");
 		else
+/*JP
 		    Strcat(buf, (flags.female) ? " lady" : " sir");
+*/
+		    Strcat(buf, (flags.female) ? "お嬢さん" : "旦那さん");
 	    }
 	    if(ininv) {
 		long quan = obj->quan;
 		obj->quan = 1L; /* fool xname() into giving singular */
+#if 0 /*JP*/
 		pline("%s; only %ld %s %s.\"", buf, ltmp,
 			(quan > 1L) ? "per" : "for this", xname(obj));
+#else
+		pline("%s．%sは%sたったの金貨%ld枚だ．」", buf, xname(obj),
+			(quan > 1L) ? "1つ" : "", ltmp);
+#endif
 		obj->quan = quan;
 	    } else
+#if 0 /*JP*/
 		pline("%s will cost you %ld %s%s.",
 			The(xname(obj)), ltmp, currency(ltmp),
 			(obj->quan > 1L) ? " each" : "");
+#else
+		pline("%sは%s%ld%sだ",
+			The(xname(obj)),
+			(obj->quan > 1L) ? "それぞれ" : "", ltmp, currency(ltmp));
+#endif
 	} else if(!silent) {
+#if 0 /*JP*/
 	    if(ltmp) pline_The("list price of %s is %ld %s%s.",
 				   the(xname(obj)), ltmp, currency(ltmp),
 				   (obj->quan > 1L) ? " each" : "");
 	    else pline("%s does not notice.", Monnam(shkp));
+#else
+	    if(ltmp) pline("%sの値段は%s%ld%sだ．",
+				   the(xname(obj)), 
+				   (obj->quan > 1L) ? "それぞれ" : "", ltmp, currency(ltmp));
+	    else pline("%sは気がついていない．", Monnam(shkp));
+#endif
 	}
 }
 
@@ -2942,31 +3420,59 @@
 
 		if (credit_use) {
 		    if (ESHK(shkp)->credit) {
+#if 0 /*JP*/
 			You("have %ld %s credit remaining.",
+#else
+			You("%ld%sの預け金が残っている．",
+#endif
 				 ESHK(shkp)->credit, currency(ESHK(shkp)->credit));
 			return value;
 		    } else if (!value) {
+/*JP
 			You("have no credit remaining.");
+*/
+			pline("預け金はなくなった．");
 			return 0;
 		    }
+#if 0 /*JP*/
 		    still = "still ";
+#else
+		    still = "さらに";
+#endif
 		}
 		if(obj->oclass == COIN_CLASS)
+#if 0 /*JP*/
 		    You("%sowe %s %ld %s!", still,
+#else
+		    You("%s%sに%ld%sの借りをつくった！", still,
+#endif
 			mon_nam(shkp), value, currency(value));
 		else
+#if 0 /*JP*/
 		    You("%sowe %s %ld %s for %s!", still,
 			mon_nam(shkp), value, currency(value),
 			obj->quan > 1L ? "them" : "it");
+#else
+		    You("%s%sに%ld%sの借りをつくった！", still,
+			mon_nam(shkp), value, currency(value));
+#endif
 	    }
 	} else {
 	    ESHK(shkp)->robbed += value;
 
 	    if(!silent) {
 		if(cansee(shkp->mx, shkp->my)) {
+#if 0 /*JP*/
 		    Norep("%s booms: \"%s, you are a thief!\"",
 				Monnam(shkp), plname);
+#else
+		    Norep("%sは叫んだ：「%s，待て！このどろぼうめ！」",
+				Monnam(shkp), plname);
+#endif
+/*JP
 		} else  Norep("You hear a scream, \"Thief!\"");
+*/
+		} else  Norep("金切り声を聞いた，「待て！このどろぼうめ！」");
 	    }
 	    hot_pursuit(shkp);
 	    (void) angry_guards(FALSE);
@@ -3046,7 +3552,10 @@
 		} else obj->no_charge = 1;
 
 		if(!unpaid && (sell_how != SELL_DONTSELL))
+/*JP
 		    pline("%s seems uninterested.", Monnam(shkp));
+*/
+		    pline("%sは興味がないようだ．", Monnam(shkp));
 		return;
 	}
 
@@ -3055,7 +3564,10 @@
 	eshkp = ESHK(shkp);
 
 	if (ANGRY(shkp)) { /* they become shop-objects, no pay */
+/*JP
 		pline("Thank you, scum!");
+*/
+		pline("ありがとよ，このクソったれ！");
 		subfrombill(obj, shkp);
 		return;
 	}
@@ -3066,7 +3578,10 @@
 		if((eshkp->robbed -= offer < 0L))
 			eshkp->robbed = 0L;
 		if(offer) verbalize(
+/*JP
   "Thank you for your contribution to restock this recently plundered shop.");
+*/
+  "寄贈をどうもありがとう．最近盗みにあって参ってたんだ．");
 		subfrombill(obj, shkp);
 		return;
 	}
@@ -3081,8 +3596,14 @@
 			 else eshkp->loan = 0L;
 		    }
 		    eshkp->debit -= gltmp;
+/*JP
 		    Your("debt is %spaid off.",
+*/
+		    Your("借金は%s支払われた．",
+/*JP
 				eshkp->debit ? "partially " : "");
+*/
+				eshkp->debit ? "一部" : "");
 		} else {
 		    long delta = gltmp - eshkp->debit;
 
@@ -3090,10 +3611,18 @@
 		    if(eshkp->debit) {
 			eshkp->debit = 0L;
 			eshkp->loan = 0L;
+/*JP
 			Your("debt is paid off.");
+*/
+			Your("借金は支払われた．");
 		    }
+#if 0 /*JP*/
 		    pline("%ld %s %s added to your credit.",
 				delta, currency(delta), delta > 1L ? "are" : "is");
+#else
+		    pline("%ld%sを預けた．",
+				delta, currency(delta));
+#endif
 		}
 		if(offer) goto move_on;
 		else {
@@ -3117,8 +3646,13 @@
 	   || (obj->oclass == FOOD_CLASS && obj->oeaten)
 	   || (Is_candle(obj) &&
 		   obj->age < 20L * (long)objects[obj->otyp].oc_cost)) {
+#if 0 /*JP*/
 		pline("%s seems uninterested%s.", Monnam(shkp),
 			cgold ? " in the rest" : "");
+#else
+		pline("%sは%s興味がないようだ．", Monnam(shkp),
+			cgold ? "残り物には" : "");
+#endif
 		if (container)
 		    dropped_container(obj, shkp, FALSE);
 		obj->no_charge = 1;
@@ -3136,10 +3670,18 @@
 		if (sell_how == SELL_NORMAL || auto_credit) {
 		    c = sell_response = 'y';
 		} else if (sell_response != 'n') {
+/*JP
 		    pline("%s cannot pay you at present.", Monnam(shkp));
+*/
+		    pline("%sは今のところは支払えない．", Monnam(shkp));
 		    Sprintf(qbuf,
+#if 0 /*JP*/
 			    "Will you accept %ld %s in credit for %s?",
 			    tmpcr, currency(tmpcr), doname(obj));
+#else
+			    "%sについて%ld%sの預け金を受けいれますか？",
+			    doname(obj), tmpcr, currency(tmpcr));
+#endif
 		    /* won't accept 'a' response here */
 		    /* KLY - 3/2000 yes, we will, it's a damn nuisance
                        to have to constantly hit 'y' to sell for credit */
@@ -3152,11 +3694,18 @@
 		    c = 'n';
 
 		if (c == 'y') {
+#if 0 /*JP*/
 		    shk_names_obj(shkp, obj, (sell_how != SELL_NORMAL) ?
 			    "traded %s for %ld zorkmid%s in %scredit." :
 			"relinquish %s and acquire %ld zorkmid%s in %scredit.",
 			    tmpcr,
 			    (eshkp->credit > 0L) ? "additional " : "");
+#else
+		    shk_names_obj(shkp, obj, (sell_how != SELL_NORMAL) ?
+			  "%sを金貨%ld枚分の預け金で受けとった%s．" :
+			  "%sを渡し，金貨%ld枚分の預け金を得た%s．",
+				  tmpcr, "");
+#endif
 		    eshkp->credit += tmpcr;
 		    subfrombill(obj, shkp);
 		} else {
@@ -3180,6 +3729,7 @@
 		    only_partially_your_contents =
 			(contained_cost(obj, shkp, 0L, FALSE, FALSE) !=
 			 contained_cost(obj, shkp, 0L, FALSE, TRUE));
+#if 0 /*JP*/
 		    Sprintf(qbuf,
 			 "%s offers%s %ld gold piece%s for%s %s %s.  Sell %s?",
 			    Monnam(shkp), short_funds ? " only" : "",
@@ -3190,6 +3740,14 @@
 			    (obj->quan == 1L &&
 			    !(!ltmp && cltmp && only_partially_your_contents)) ?
 			    "it" : "them");
+#else
+		    Sprintf(qbuf,
+			    "%sはあなたの%s%sに%ldの値%s．売りますか？",
+			    Monnam(shkp), cxname(obj),
+			    (!ltmp && cltmp) ? "の中身" : "",
+			    offer, 
+			    short_funds ? "しかつけなかった" : "をつけた");
+#endif
 		} else  qbuf[0] = '\0';		/* just to pacify lint */
 
 		switch (sell_response ? sell_response : ynaq(qbuf)) {
@@ -3207,9 +3765,15 @@
 			    pay(-offer, shkp);
 			    shk_names_obj(shkp, obj, (sell_how != SELL_NORMAL) ?
 				    (!ltmp && cltmp && only_partially_your_contents) ?
+#if 0 /*JP*/
 			    	    "sold some items inside %s for %ld gold pieces%s.%s" :
 				    "sold %s for %ld gold piece%s.%s" :
 	       "relinquish %s and receive %ld gold piece%s in compensation.%s",
+#else
+			    	    "%sの中身を金貨%ld枚で売った%s．%s" :
+				    "%sを金貨%ld枚で売った%s．%s" :
+	       "%sを渡し，金貨%ld枚の代償を受けとった%s．%s",
+#endif
 				    offer, "");
 			    break;
 		 default:   impossible("invalid sell response");
@@ -3253,7 +3817,10 @@
 	}
 
 	datawin = create_nhwindow(NHW_MENU);
+/*JP
 	putstr(datawin, 0, "Unpaid articles already used up:");
+*/
+	putstr(datawin, 0, "すでに使ってしまった未払の品目：");
 	putstr(datawin, 0, "");
 
 	totused = 0L;
@@ -3289,12 +3856,21 @@
 	    /* additional shop debt which has no itemization available */
 	    if (totused) putstr(datawin, 0, "");
 	    totused += eshkp->debit;
+#if 0 /*JP*/
 	    buf_p = xprname((struct obj *)0,
 			    "usage charges and/or other fees",
 			    GOLD_SYM, FALSE, eshkp->debit, 0L);
+#else
+	    buf_p = xprname((struct obj *)0,
+			    "使用料または他の手数料",
+			    GOLD_SYM, FALSE, eshkp->debit, 0L);
+#endif
 	    putstr(datawin, 0, buf_p);
 	}
+/*JP
 	buf_p = xprname((struct obj *)0, "Total:", '*', FALSE, totused, 0L);
+*/
+	buf_p = xprname((struct obj *)0, "合計：", '*', FALSE, totused, 0L);
 	putstr(datawin, 0, "");
 	putstr(datawin, 0, buf_p);
 	display_nhwindow(datawin, FALSE);
@@ -3374,12 +3950,22 @@
 	    /* if it is the shk's pos, you hit and anger him */
 	    (shkp->mx != x || shkp->my != y)) {
 		if (mnearto(shkp, x, y, TRUE))
+/*JP
 		    verbalize("Out of my way, scum!");
+*/
+		    verbalize("どけ，クソったれ！");
 		if (cansee(x, y)) {
+#if 0 /*JP*/
 		    pline("%s nimbly%s catches %s.",
 			  Monnam(shkp),
 			  (x == shkp->mx && y == shkp->my) ? "" : " reaches over and",
 			  the(xname(obj)));
+#else
+		    pline("%sはすばやく%s%sをつかまえた．",
+			  Monnam(shkp),
+			  (x == shkp->mx && y == shkp->my) ? "" : "近づいて",
+			  the(xname(obj)));
+#endif
 		    if (!canspotmon(shkp))
 			map_invisible(x, y);
 		    delay_output();
@@ -3507,25 +4093,52 @@
 	if (!did_repair)
 	    return;
 	if (saw_walls) {
+#if 0 /*JP*/
 	    pline("Suddenly, %s section%s of wall close%s up!",
 		  (saw_walls == 1) ? "a" : (saw_walls <= 3) ?
 						  "some" : "several",
 		  (saw_walls == 1) ? "" : "s", (saw_walls == 1) ? "s" : "");
+#else
+	    pline("突然，壁が%s閉まった！",
+		  (saw_walls == 1) ? "一箇所" : (saw_walls <= 3) ?
+						  "何箇所か" : "あちこちで");
+#endif
 	    if (saw_door)
+/*JP
 		pline_The("shop door reappears!");
+*/
+		pline("店の扉がまた現われた！");
 	    if (saw_floor)
+/*JP
 		pline_The("floor is repaired!");
+*/
+		pline("床は修復された！");
 	} else {
 	    if (saw_door)
+/*JP
 		pline("Suddenly, the shop door reappears!");
+*/
+		pline("突然，店の扉がまた現われた！");
 	    else if (saw_floor)
+/*JP
 		pline("Suddenly, the floor damage is gone!");
+*/
+		pline("突然，床の傷がなくなった！");
 	    else if (saw_untrap)
+/*JP
 	        pline("Suddenly, the trap is removed from the floor!");
+*/
+	        pline("突然罠が床から消えた！");
 	    else if (inside_shop(u.ux, u.uy) == ESHK(shkp)->shoproom)
+/*JP
 		You_feel("more claustrophobic than before.");
+*/
+		You("前より閉所恐怖症気味になった．");
 	    else if (flags.soundok && !rn2(10))
+/*JP
 		Norep("The dungeon acoustics noticeably change.");
+*/
+		Norep("迷宮の音響はいちじるしく変った．");
 	}
 	if (stop_picking)
 		stop_occupation();
@@ -3618,7 +4231,10 @@
 		 *
 		 * Take the easy way out and put ball&chain under hero.
 		 */
+/*JP
 		verbalize("Get your junk out of my wall!");
+*/
+		verbalize("そのガラクタを外に持って行きな！");
 		unplacebc();	/* pick 'em up */
 		placebc();	/* put 'em down */
 	    }
@@ -3689,24 +4305,40 @@
 		if(ANGRY(shkp) ||
 		   (Conflict && !resist(shkp, RING_CLASS, 0, 0))) {
 			if(Displaced)
+/*JP
 			  Your("displaced image doesn't fool %s!",
+*/
+			  pline("%sはあなたの幻影にだまされなかった！",
 				mon_nam(shkp));
 			(void) mattacku(shkp);
 			return(0);
 		}
 		if(eshkp->following) {
 			if(strncmp(eshkp->customer, plname, PL_NSIZ)) {
+#if 0 /*JP*/
 			    verbalize("%s, %s!  I was looking for %s.",
 				    Hello(shkp), plname, eshkp->customer);
+#else
+			    verbalize("%s！わたしは%sを探しています．",
+				    Hello(shkp, TRUE), eshkp->customer);
+#endif
 				    eshkp->following = 0;
 			    return(0);
 			}
 			if(moves > followmsg+4) {
+#if 0 /*JP*/
 			    verbalize("%s, %s!  Didn't you forget to pay?",
 				    Hello(shkp), plname);
+#else
+			    verbalize("%s！支払いを忘れていませんか？",
+				    Hello(shkp, TRUE));
+#endif
 			    followmsg = moves;
 			    if (!rn2(9)) {
+/*JP
 			      pline("%s doesn't like customers who don't pay.",
+*/
+			      pline ("%sは金を払わない客が嫌いみたいだ．",
 				    Monnam(shkp));
 				rile_shk(shkp);
 			    }
@@ -3821,7 +4453,10 @@
 {
     register struct monst *shkp = shop_keeper(*u.ushops);
     int lang;
+/*JP
     const char *grabs = "grabs";
+*/
+    const char *grabs = "つかんだ";
 
     if(!shkp) return;
 
@@ -3836,7 +4471,10 @@
 
     if(!inhishop(shkp)) {
 	if (Role_if(PM_KNIGHT)) {
+/*JP
 	    You_feel("like a common thief.");
+*/
+	    You("泥棒同然な気がした．");
 	    adjalign(-sgn(u.ualign.type));
 	}
         /* WAC He may not be here now,  but... */
@@ -3847,15 +4485,29 @@
     if(!fall) {
 	if (lang == 2) {
 	    if(u.utraptype == TT_PIT)
+#if 0 /*JP*/
 		verbalize(
 			"Be careful, %s, or you might fall through the floor.",
 			flags.female ? "madam" : "sir");
+#else
+	    verbalize("注意してください%s，床から落ちますよ．",
+		flags.female ? "お嬢さん" : "お客さん");
+#endif
 	    else
+#if 0 /*JP*/
 		verbalize("%s, do not damage the floor here!",
 			flags.female ? "Madam" : "Sir");
+#else
+	    verbalize("%s，床に傷をつけないでください！",
+			flags.female ? "お嬢さん" : "お客さん");
+#endif
 	}
 	if (Role_if(PM_KNIGHT)) {
+#if 0 /*JP*/
 	    You_feel("like a common thief.");
+#else
+	    You("泥棒同然な気がした．");
+#endif
 	    adjalign(-sgn(u.ualign.type));
 	}
     } else if(!um_dist(shkp->mx, shkp->my, 5) &&
@@ -3863,7 +4515,10 @@
 		(ESHK(shkp)->billct || ESHK(shkp)->debit)) {
 	    register struct obj *obj, *obj2;
 	    if (nolimbs(shkp->data)) {
+/*JP
 		grabs = "knocks off";
+*/
+		grabs = "叩き落した";
 #if 0
 	       /* This is what should happen, but for balance
 	        * reasons, it isn't currently.
@@ -3880,16 +4535,27 @@
 		/* for some reason the shopkeeper can't come next to you */
 		if (distu(shkp->mx, shkp->my) > 2) {
 		    if (lang == 2)
+/*JP
 			pline("%s curses you in anger and frustration!",
+*/
+			pline("怒りで不満のたまっている%sはあなたを呪った！",
 			      shkname(shkp));
 		    rile_shk(shkp);
 		    return;
 		} else
+#if 0 /*JP*/
 		    pline("%s %s, and %s your backpack!",
 			  shkname(shkp),
 			  makeplural(locomotion(shkp->data,"leap")), grabs);
+#else
+		    pline("%sは飛びついて，あなたの背負い袋を%s！",
+					shkname(shkp), grabs);
+#endif
 	    } else
+/*JP
 		pline("%s %s your backpack!", shkname(shkp), grabs);
+*/
+		pline("%sはあなたの背負い袋を%s！", shkname(shkp), grabs);
 
 	    for(obj = invent; obj; obj = obj2) {
 		obj2 = obj->nobj;
@@ -3966,8 +4632,13 @@
 	register boolean uinshp = (*u.ushops != '\0');
 	char qbuf[80];
 	register xchar x, y;
+#if 0 /*JP*/
 	boolean dugwall = !strcmp(dmgstr, "dig into") ||	/* wand */
 			  !strcmp(dmgstr, "damage");		/* pick-axe */
+#else
+	boolean ni_wo = !strcmp(dmgstr, "穴をあける");		/* wand */
+	boolean dugwall = (ni_wo || !strcmp(dmgstr, "傷つける")); /* pick-axe */
+#endif
 	struct damage *tmp_dam, *appear_here = 0;
 	/* any number >= (80*80)+(24*24) would do, actually */
 	long cost_of_damage = 0L;
@@ -4042,7 +4713,10 @@
 	if(uinshp) {
 		if(um_dist(shkp->mx, shkp->my, 1) &&
 			!um_dist(shkp->mx, shkp->my, 3)) {
+/*JP
 		    pline("%s leaps towards you!", shkname(shkp));
+*/
+		    pline("%sはあなたに飛びかかった！", shkname(shkp));
 		    mnexto(shkp);
 		}
 		if(um_dist(shkp->mx, shkp->my, 1)) goto getcad;
@@ -4055,8 +4729,14 @@
 	     */
 	    if (MON_AT(x, y)) {
 		if(flags.soundok) {
+/*JP
 		    You_hear("an angry voice:");
+*/
+		    You_hear("怒りの声を聞いた：");
+/*JP
 		    verbalize("Out of my way, scum!");
+*/
+		    verbalize("どけ！クソったれ！");
 		    wait_synch();
 #if defined(UNIX) || defined(VMS)
 # if defined(SYSV) || defined(ULTRIX) || defined(VMS)
@@ -4077,20 +4757,44 @@
 #endif
 				|| !rn2(50)) {
 		if(um_dist(x, y, 1) && !uinshp) {
+/*JP
 		    pline("%s shouts:", shkname(shkp));
+*/
+		    pline("%sはさけんだ：", shkname(shkp));
+#if 0 /*JP*/
 		    verbalize("Who dared %s my %s?", dmgstr,
 					 dugwall ? "shop" : "door");
+#else
+		    verbalize("誰が%s%s%sりしたんだろう？",
+					 dugwall ? "店" : "扉",
+					 ni_wo ? "に" : "を",
+					 jconj(dmgstr,"た"));
+#endif
 		} else {
 getcad:
+#if 0 /*JP*/
 		    verbalize("How dare you %s my %s?", dmgstr,
 					 dugwall ? "shop" : "door");
+#else
+		    verbalize("どうして%s%s%sりしたんだ？",
+					 dugwall ? "店" : "扉",
+					 ni_wo ? "に" : "を",
+					 jconj(dmgstr,"た"));
+#endif
 		}
 		hot_pursuit(shkp);
 		return;
 	}
 
+/*JP
 	if (Invis) Your("invisibility does not fool %s!", shkname(shkp));
+*/
+	if(Invis) pline("%sは透明なあなたにだまされなかった！", shkname(shkp));
+#if 0 /*JP*/
 	Sprintf(qbuf,"\"Cad!  You did %ld %s worth of damage!\"  Pay? ",
+#else
+	Sprintf(qbuf,"「おい！%ld%sの損害だ！」払いますか？",
+#endif
 		 cost_of_damage, currency(cost_of_damage));
 	if(yn(qbuf) != 'n') {
 		cost_of_damage = check_credit(cost_of_damage, shkp);
@@ -4101,13 +4805,19 @@
                 money2mon(shkp, cost_of_damage);
 #endif
 		flags.botl = 1;
+/*JP
 		pline("Mollified, %s accepts your restitution.",
+*/
+		pline("%sは，感情をやわらげ賠償金を受けとった．",
 			shkname(shkp));
 		/* move shk back to his home loc */
 		home_shk(shkp, FALSE);
 		pacify_shk(shkp);
 	} else {
+/*JP
 		verbalize("Oh, yes!  You'll pay!");
+*/
+		verbalize("さあ，払うんだ！");
 		hot_pursuit(shkp);
 		adjalign(-sgn(u.ualign.type));
 	}
@@ -4166,7 +4876,10 @@
     struct monst *shkp = shop_keeper(inside_shop(u.ux, u.uy));
 
     tmpwin = create_nhwindow(NHW_MENU);
+/*JP
     putstr(tmpwin, 0, "Fine goods for sale:");
+*/
+    putstr(tmpwin, 0, "売りにでているすばらしい商品：");
     putstr(tmpwin, 0, "");
     for (otmp = first_obj; otmp; otmp = otmp->nexthere) {
 	if (otmp->oclass == COIN_CLASS) continue;
@@ -4175,27 +4888,51 @@
 	if (Has_contents(otmp))
 	    cost += contained_cost(otmp, shkp, 0L, FALSE, FALSE);
 	if (!cost) {
+/*JP
 	    Strcpy(price, "no charge");
+*/
+	    Strcpy(price, "無料");
 	} else {
+#if 0 /*JP*/
 	    Sprintf(price, "%ld %s%s", cost, currency(cost),
 		    otmp->quan > 1L ? " each" : "");
+#else
+	    Sprintf(price, "%s%ld%s", 
+		    otmp->quan > 1L ? "それぞれ" : "", cost, currency(cost));
+#endif
 	}
+#if 0 /*JP*/
 	Sprintf(buf, "%s, %s", doname(otmp), price);
+#else
+	Sprintf(buf, "%s，%s", doname(otmp), price);
+#endif
 	putstr(tmpwin, 0, buf),  cnt++;
     }
     if (cnt > 1) {
 	display_nhwindow(tmpwin, TRUE);
     } else if (cnt == 1) {
 	if (first_obj->no_charge || first_obj == uball || first_obj == uchain){
+#if 0 /*JP*/
 	    pline("%s!", buf);	/* buf still contains the string */
+#else
+	    pline("%s！", buf);	/* buf still contains the string */
+#endif
 	} else {
 	    /* print cost in slightly different format, so can't reuse buf */
 	    cost = get_cost(first_obj, (struct monst *)0);
 	    if (Has_contents(first_obj))
 		cost += contained_cost(first_obj, shkp, 0L, FALSE, FALSE);
+#if 0 /*JP*/
 	    pline("%s, price %ld %s%s%s", doname(first_obj),
 		cost, currency(cost), first_obj->quan > 1L ? " each" : "",
 		shk_embellish(first_obj, cost));
+#else
+	    pline("%s%sは%s%ld%sだ．", 
+		  shk_embellish(first_obj, cost),
+		  doname(first_obj),
+		  first_obj->quan > 1L ? "それぞれ" : "",
+		  cost, currency(cost));
+#endif
 	}
     }
     destroy_nhwindow(tmpwin);
@@ -4214,29 +4951,51 @@
 	switch (choice) {
 	    case 4:
 		if (cost < 10L) break; else o = itm->oclass;
+/*JP
 		if (o == FOOD_CLASS) return ", gourmets' delight!";
+*/
+		if (o == FOOD_CLASS) return "グルメが泣いて喜ぶ";
 		if (objects[itm->otyp].oc_name_known
 		    ? objects[itm->otyp].oc_magic
 		    : (o == AMULET_CLASS || o == RING_CLASS   ||
 		       o == WAND_CLASS   || o == POTION_CLASS ||
 		       o == SCROLL_CLASS || o == SPBOOK_CLASS))
+/*JP
 		    return ", painstakingly developed!";
+*/
+		    return "一級の魔力を秘めた";
+/*JP
 		return ", superb craftsmanship!";
+*/
+		return "一流職人の作った";
+#if 0 /*JP*/
 	    case 3: return ", finest quality.";
 	    case 2: return ", an excellent choice.";
 	    case 1: return ", a real bargain.";
+#else
+	    case 3: return "最高の品質を誇る";
+	    case 2: return "さすがお客さん目が高い！";
+	    case 1: return "本日の目玉商品！";
+#endif
 	   default: break;
 	}
     } else if (itm->oartifact) {
+/*JP
 	return ", one of a kind!";
+*/
+	return "これは世界にまたとない！";
     }
+/*JP
     return ".";
+*/
+    return "";
 }
 #endif /*OVL3*/
 #ifdef OVLB
 
 /* First 4 supplied by Ronen and Tamar, remainder by development team */
 const char *Izchak_speaks[]={
+#if 0 /*JP*/
     "%s says: 'These shopping malls give me a headache.'",
     "%s says: 'Slow down.  Think clearly.'",
     "%s says: 'You need to take things one at a time.'",
@@ -4246,6 +5005,17 @@
     "%s says: 'Don't try to steal from me - I have friends in high places!'",
     "%s says: 'You may well need something from this shop in the future.'",
     "%s comments about the Valley of the Dead as being a gateway."
+#else
+    "%s曰く『これらショッピング街は頭痛のタネだ．』",
+    "%s曰く『落ち着いて，明晰に考えよ．』",
+    "%s曰く『一度に一個ずつ取る必要がある．』",
+    "%s曰く『ホモっぽいコーヒは好きじゃない．．．コロンビアン・スプレモをたのむ．』",
+    "開発チームに何らかの協定を求めることは困難だと%sは述べた．",
+    "%sは神に仕えるやつは金を儲けていると述べた．",
+    "%s曰く『私から盗もうなんて思わないことだ．上の方に知り合いがいるんだから．』",
+    "%s曰く『将来この店の何かが必要となるだろう』",
+    "%sは死の谷はゲートウェイだろうとコメントを述べた．"
+#endif
 };
 
 void
@@ -4261,7 +5031,11 @@
 		   not actually a shk, which could happen if someone
 		   wishes for a shopkeeper statue and then animates it.
 		   (Note: shkname() would be "" in a case like this.) */
+#if 0 /*JP*/
 		pline("%s asks whether you've seen any untended shops recently.",
+#else
+		pline("%sは最近どこかに店員のいない店はないかとたずねた．",
+#endif
 		      Monnam(shkp));
 		/* [Perhaps we ought to check whether this conversation
 		   is taking place inside an untended shop, but a shopless
@@ -4271,47 +5045,90 @@
 
 	eshk = ESHK(shkp);
 	if (ANGRY(shkp))
+#if 0 /*JP*/
 		pline("%s mentions how much %s dislikes %s customers.",
 			shkname(shkp), mhe(shkp),
 			eshk->robbed ? "non-paying" : "rude");
+#else
+		pline("%sは%s客は大嫌いだと言った．",
+			shkname(shkp), 
+			eshk->robbed ? "金を支払わない" : "無礼な");
+#endif
 	else if (eshk->following) {
 		if (strncmp(eshk->customer, plname, PL_NSIZ)) {
+#if 0 /*JP*/
 		    verbalize("%s %s!  I was looking for %s.",
 			    Hello(shkp), plname, eshk->customer);
+#else
+		    verbalize("%s！私は%sを探しています．",
+			    Hello(shkp, TRUE), eshk->customer);
+#endif
 		    eshk->following = 0;
 		} else {
+#if 0 /*JP*/
 		    verbalize("%s %s!  Didn't you forget to pay?",
 			      Hello(shkp), plname);
+#else
+		    verbalize("%s！支払いを忘れていませんか？", 
+			      Hello(shkp, TRUE));
+#endif
 		}
 	} else if (eshk->billct) {
 		register long total = addupbill(shkp) + eshk->debit;
+#if 0 /*JP*/
 		pline("%s says that your bill comes to %ld %s.",
+#else
+		pline("%sは勘定が%ld%sになると言った．",
+#endif
 		      shkname(shkp), total, currency(total));
 	} else if (eshk->debit)
+#if 0 /*JP*/
 		pline("%s reminds you that you owe %s %ld %s.",
 		      shkname(shkp), mhim(shkp),
 		      eshk->debit, currency(eshk->debit));
+#else
+		pline("あなたは%sに%ld%sの借りがあることを思いだした",
+		      shkname(shkp),
+		      eshk->debit, currency(eshk->debit));
+#endif
 	else if (eshk->credit)
+#if 0 /*JP*/
 		pline("%s encourages you to use your %ld %s of credit.",
+#else
+		pline("%sはクレジットで%ld%s使うよう勧めた．",
+#endif
 		      shkname(shkp), eshk->credit, currency(eshk->credit));
 	else if (eshk->robbed)
+#if 0 /*JP*/
 		pline("%s complains about a recent robbery.", shkname(shkp));
+#else
+		pline("%s最近の強盗について愚痴をこぼした．", shkname(shkp));
+#endif
 #ifndef GOLDOBJ
 	else if (shkp->mgold < 50)
 #else
 	else if ((shkmoney = money_cnt(shkp->minvent)) < 50)
 #endif
+/*JP
 		pline("%s complains that business is bad.", shkname(shkp));
+*/
+		pline("%sは商売が旨くいってないと愚痴をこぼした．", shkname(shkp));
 #ifndef GOLDOBJ
 	else if (shkp->mgold > 4000)
 #else
 	else if (shkmoney > 4000)
 #endif
+/*JP
 		pline("%s says that business is good.", shkname(shkp));
+*/
+		pline("%sは商売が旨くいっていると言った．", shkname(shkp));
 	else if (strcmp(shkname(shkp), "Izchak") == 0)
 		pline(Izchak_speaks[rn2(SIZE(Izchak_speaks))],shkname(shkp));
 	else
+/*JP
 		pline("%s talks about the problem of shoplifters.",shkname(shkp));
+*/
+		pline("%sは万引の問題について話した．", shkname(shkp));
 }
 
 #ifdef KOPS
@@ -4330,8 +5147,12 @@
 	    }
 	}
 	if (cnt && !silent)
+#if 0 /*JP*/
 	    pline_The("Kop%s (disappointed) vanish%s into thin air.",
 		      plur(cnt), cnt == 1 ? "es" : "");
+#else
+	    pline("がっかりした警官は空気にとけて消えた．");
+#endif
 }
 #endif	/* KOPS */
 
@@ -4434,15 +5255,34 @@
 
 	arg1 = arg2 = "";
 	if (otmp->oclass == SPBOOK_CLASS && !altusage) {
+/*JP
 	    fmt = "%sYou owe%s %ld %s.";
+*/
+	    fmt = "%s%s%ld%sの借りだ．";
+#if 0 /*JP*/
 	    arg1 = rn2(2) ? "This is no free library, cad!  " : "";
 	    arg2 = ESHK(shkp)->debit > 0L ? " an additional" : "";
+#else
+	    arg1 = rn2(2) ? "おい！ここは図書館じゃない！" : "";
+	    arg2 = ESHK(shkp)->debit > 0L ? "さらに言えば" : "";
+#endif
 	} else if (otmp->otyp == POT_OIL) {
+/*JP
 	    fmt = "%s%sThat will cost you %ld %s (Yendorian Fuel Tax).";
+*/
+	    fmt = "%s%s値段は%ld%s(イェンダー燃料税)だ．";
 	} else {
+/*JP
 	    fmt = "%s%sUsage fee, %ld %s.";
+*/
+	    fmt = "%s%s使用料は，%ld%sだ．";
+#if 0 /*JP*/
 	    if (!rn2(3)) arg1 = "Hey!  ";
 	    if (!rn2(3)) arg2 = "Ahem.  ";
+#else
+	    if (!rn2(3)) arg1 = "おい！";
+	    if (!rn2(3)) arg2 = "ゴホン．";
+#endif
 	}
 
 	if (shkp->mcanmove || !shkp->msleeping)
@@ -4475,18 +5315,37 @@
 	eshkp = ESHK(shkp);
 	if(eshkp->credit >= amount) {
 	    if(eshkp->credit > amount)
+#if 0 /*JP*/
 		Your("credit is reduced by %ld %s.",
+#else
+		Your("預け金は%ld%sに減った．",
+#endif
 					amount, currency(amount));
+#if 0 /*JP*/
 	    else Your("credit is erased.");
+#else
+	    else Your("預け金は帳消しになった．");
+#endif
 	    eshkp->credit -= amount;
 	} else {
 	    delta = amount - eshkp->credit;
 	    if(eshkp->credit)
+/*JP
 		Your("credit is erased.");
+*/
+		Your("預け金は帳消しになった．");
 	    if(eshkp->debit)
+#if 0 /*JP*/
 		Your("debt increases by %ld %s.",
+#else
+		Your("借金は%ld%sに増えた．",
+#endif
 					delta, currency(delta));
+#if 0 /*JP*/
 	    else You("owe %s %ld %s.",
+#else
+	    else You("%sに%ld%sの借りをつくった．",
+#endif
 				shkname(shkp), delta, currency(delta));
 	    eshkp->debit += delta;
 	    eshkp->loan += delta;
@@ -4519,8 +5378,13 @@
 	    && shkp->mcanmove && !shkp->msleeping
 	    && (ESHK(shkp)->debit || ESHK(shkp)->billct ||
 		ESHK(shkp)->robbed)) {
+#if 0 /*JP*/
 		pline("%s%s blocks your way!", shkname(shkp),
 				Invis ? " senses your motion and" : "");
+#else
+		pline("%sは%sあなたの前に立ちふさがった！", shkname(shkp),
+				Invis ? "動きを感じとり，" : "");
+#endif
 		return(TRUE);
 	}
 	return(FALSE);
@@ -4559,8 +5423,13 @@
 			|| u.usteed
 #endif
 	  )) {
+#if 0 /*JP*/
 		pline("%s%s blocks your way!", shkname(shkp),
 				Invis ? " senses your motion and" : "");
+#else
+		pline("%s%sあなたの前に立ちふさがった！", shkname(shkp),
+				Invis ? "動きを感じとり，" : "");
+#endif
 		return(TRUE);
 	}
 	return(FALSE);
@@ -4575,7 +5444,11 @@
 struct obj *obj;
 {
 	if (!shk_owns(buf, obj) && !mon_owns(buf, obj))
+#if 0 /*JP*/
 	    Strcpy(buf, carried(obj) ? "your" : "the");
+#else
+	    Strcpy(buf, "");
+#endif
 	return buf;
 }
 
@@ -4585,7 +5458,9 @@
 struct obj *obj;
 {
 	(void) shk_your(buf, obj);
+#if 0 /*JP*/
 	*buf = highc(*buf);
+#endif
 	return buf;
 }
 
@@ -4601,7 +5476,17 @@
 	    (obj->unpaid ||
 	     (obj->where==OBJ_FLOOR && !obj->no_charge && costly_spot(x,y)))) {
 	    shkp = shop_keeper(inside_shop(x, y));
+#if 0 /*JP*/
 	    return strcpy(buf, shkp ? s_suffix(shkname(shkp)) : "the");
+#else
+	    if (shkp) {
+		strcpy(buf, shkname(shkp));
+		strcat(buf, "の");
+	    } else {
+		strcpy(buf, "");
+	    }
+	    return buf;
+#endif
 	}
 	return (char *)0;
 }
@@ -4612,7 +5497,15 @@
 struct obj *obj;
 {
 	if (obj->where == OBJ_MINVENT)
+#if 0 /*JP*/
 	    return strcpy(buf, s_suffix(mon_nam(obj->ocarry)));
+#else
+	{
+	    strcpy(buf, mon_nam(obj->ocarry));
+	    strcat(buf, "の");
+	    return buf;
+	}
+#endif
 	return (char *)0;
 }
 
@@ -4653,26 +5546,41 @@
 	char ident_type;
 
 	/* Pick object */
+/*JP
 	if ( !(obj = getobj(identify_types, "have identified"))) return;
+*/
+	if ( !(obj = getobj(identify_types, "識別する"))) return;
 
 	/* Will shk be guessing? */
         if ((guesswork = !shk_obj_match(obj, shkp)))
 	{
+/*JP
 		verbalize("I don't handle that sort of item, but I could try...");
+*/
+		verbalize("この種類の品を扱った事は無いのだが．．．やってみよう．");
 	}
 
 	/* Here we go */
 	/* KMH -- fixed */
 	if (ESHK(shkp)->services & (SHK_ID_BASIC|SHK_ID_PREMIUM) ==
 			SHK_ID_BASIC|SHK_ID_PREMIUM) {
+/*JP
 		ident_type = yn_function("[B]asic service or [P]remier",
+*/
+		ident_type = yn_function("通常サービス[b] 又は特殊サービス [p]",
 		     ident_chars, '\0');
 		if (ident_type == '\0') return;
 	} else if (ESHK(shkp)->services & SHK_ID_BASIC) {
+/*JP
 		verbalize("I only offer basic identification.");
+*/
+		verbalize("当店で提供できるのは通常サービスのみです．");
 		ident_type = 'b';
 	} else if (ESHK(shkp)->services & SHK_ID_PREMIUM) {
+/*JP
 		verbalize("I only make complete identifications.");
+*/
+		verbalize("当店で提供できるのは特殊サービスのみです．");
 		ident_type = 'p';
 	}
 
@@ -4693,11 +5601,17 @@
 	if (ripoff)
 	{
 		if (no_cheat) {
+/*JP
 			verbalize("That item's already identified!");
+*/
+			verbalize("それは既に識別済みですよ！");
 			return;
 		}
 		/* Object already identified: Try and cheat the customer. */
+/*JP
 		pline("%s chuckles greedily...", mon_nam(shkp));
+*/
+		pline("%sは強欲な笑みをもらした．．．", mon_nam(shkp));
 		mult = 1;
 	
 	/* basic */        
@@ -4746,11 +5660,17 @@
 	/* Shopkeeper deviousness */
 	if (ident_type == 'b') {
 	    if (Hallucination) {
+/*JP
 		pline("You hear %s tell you it's a pot of flowers.",
+*/
+		pline("あなたは%sが，これは花瓶いっぱいの花かと尋ねてきたのを聞いた．",
 			mon_nam(shkp));
 		return;
 	    } else if (Confusion) {
+/*JP
 		pline("%s tells you but you forget.", mon_nam(shkp));
+*/
+		pline("%sが何か言ったようだったがあなたは忘れてしまった．", mon_nam(shkp));
 		return;
 	    }
 	}
@@ -4762,10 +5682,16 @@
 		** Identify successful if rn2() < #.  
 		*/
 		if (!rn2(ident_type == 'b' ? 4 : 2)) {
+/*JP
 			verbalize("Success!");
+*/
+			verbalize("よし，成功だ！");
 			/* Rest of msg will come from identify(); */
 		} else {
+/*JP
 			verbalize("Sorry.  I guess it's not your lucky day.");
+*/
+			verbalize("済まないな．日が悪かったようだ．");
 			return;
 		}
 	}
@@ -4796,7 +5722,10 @@
 	int charge;                     /* How much to uncurse          */
 
 	/* Pick object */
+/*JP
 	if ( !(obj = getobj(identify_types, "uncurse"))) return;
+*/
+	if ( !(obj = getobj(identify_types, "呪いを解く"))) return;
 
 	/* Charge is same as cost */
 	charge = get_cost(obj, shop_keeper(/* roomno= */*u.ushops));
@@ -4817,14 +5746,20 @@
 	    !no_cheat)
 	{
 		/* Not identified! */
+/*JP
 		pline("%s snickers and says \"See, nice and uncursed!\"",
+*/
+		pline("%sはほくそ笑んで言った．「ほら，呪いが解けたぞ！」",
 			mon_nam(shkp));
 		obj->bknown = FALSE;
 	}
 	else if (Confusion)
 	{
 		/* Curse the item! */
+/*JP
 		You("accidentally ask for the item to be cursed");
+*/
+		You("何故かその品が呪われるよう頼んでしまった．");
 		curse(obj);
 	}
 	else if (Hallucination)
@@ -4835,19 +5770,30 @@
 		*/
 		if (!rn2(4))
 		{
+/*JP
 		    pline("Distracted by your blood-shot %s, the shopkeeper",
 			makeplural(body_part(EYE)));
 		    pline("accidentally blesses the item!");
+*/
+		    pline("あなたの血走った%sから目をそらしていた店主は，",
+			makeplural(body_part(EYE)));
+		    pline("何故かその品を祝福してしまった！");
 		    bless(obj);
 		}
 		else
 		{
+/*JP
 			You("can't see straight and point to the wrong item");
+*/
+			You("真っ直ぐ物を見られなくて，違う品を指差した．");
 		}
 	}
 	else
 	{
+/*JP
 		verbalize("All done - safe to handle, now!");
+*/
+		verbalize("終わったよ．これでもう手にしても大丈夫だ！");
 		uncurse(obj);
 	}
 }
@@ -4859,7 +5805,11 @@
 ** Appraise a weapon or armor
 */
 static const char basic_damage[] =
+/*JP
 	"Basic damage against small foes %s, against large foes %s.";
+*/
+	/* 出力されるのはoc_wsdamとoc_wldam = 武器の基本最大ダメージ [Sakusha]*/
+	"小型の相手に最大%s，大型の相手に最大%sのダメージを与えられるな．";
 
 static void
 shk_appraisal(slang, shkp)
@@ -4874,7 +5824,10 @@
 
 
 	/* Pick object */
+/*JP
 	if ( !(obj = getobj(weapon_types, "appraise"))) return;
+*/
+	if ( !(obj = getobj(weapon_types, "鑑定する"))) return;
 
 	charge = get_cost(obj, shop_keeper(/* roomno= */*u.ushops)) / 3;
 
@@ -4890,12 +5843,18 @@
 	} else */
 	if (shk_class_match(WEAPON_CLASS, shkp) == SHK_MATCH)
 	{
+/*JP
 		verbalize("Ok, %s, let's see what we have here.", slang);
+*/
+		verbalize("オーケイ，%s．商品を見ていってくれ．", slang);
 		guesswork = FALSE;
 	}
 	else
 	{
+/*JP
 		verbalize("Mind you, I'm not an expert in this field.");
+*/
+		verbalize("私はこの分野の専門では無いんですがねえ．");
 		guesswork = TRUE;
 	}
 
@@ -4905,12 +5864,18 @@
 	/* Shopkeeper deviousness */
 	if (Confusion)
 	{
+/*JP
 		pline("The numbers get all mixed up in your head.");
+*/
+		pline("数字があなたのあたまのなかですっかりごっちゃになってしまった．");
 		return;
 	}
 	else if (Hallucination)
 	{
+/*JP
 		You("hear %s say it'll \"knock 'em dead\"",
+*/
+		You("%sがこれは多分「叩いてみたが死んでいる」のだろうと言ったのを聞いた．",
 			mon_nam(shkp));
 		return;
 	}
@@ -4926,7 +5891,10 @@
 		{
 		    case 1:
 			/* Shkp's an idiot */
+/*JP
 			verbalize("Sorry, %s, but I'm not certain.", slang);
+*/
+			verbalize("済まない%s，私にはわからない．", slang);
 			break;
 
 		    case 2:
@@ -4957,7 +5925,10 @@
 **
 ** Perform ops on weapon for customer
 */
+/*JP
 static const char we_offer[] = "We offer the finest service available!";
+*/
+static const char we_offer[] = "我々は最高のサービスを提供しております！";
 static void
 shk_weapon_works(slang, shkp)
 char *slang;
@@ -4973,14 +5944,23 @@
 
     /* Pick weapon */
     if (ESHK(shkp)->services & (SHK_SPECIAL_A | SHK_SPECIAL_B))
+/*JP
 	obj = getobj(weapon_types, "improve");
+*/
+	obj = getobj(weapon_types, "強化する");
     else
+/*JP
 	obj = getobj(weapon_types, "poison");
+*/
+	obj = getobj(weapon_types, "毒を塗る");
     if (!obj) return;
 
     /* Check if you asked for a non weapon tool to be improved */
     if (obj->oclass == TOOL_CLASS && !is_weptool(obj))
+/*JP
 	pline("%s grins greedily...", mon_nam(shkp));
+*/
+	pline("%sは強欲ににやりと笑った．．．", mon_nam(shkp));
 
     if (ESHK(shkp)->services & (SHK_SPECIAL_A | SHK_SPECIAL_B)) {
 	any.a_void = 0;         /* zero out all bits */
@@ -4990,22 +5970,34 @@
 	if (ESHK(shkp)->services & SHK_SPECIAL_A) {
 	    any.a_int = 1;
 	    add_menu(tmpwin, NO_GLYPH, &any , 'w', 0, ATR_NONE,
+/*JP
 		    "Ward against damage", MENU_UNSELECTED);
+*/
+		    "修理", MENU_UNSELECTED);
 	}
 	if (ESHK(shkp)->services & SHK_SPECIAL_B) {
 	    any.a_int = 2;
 	    add_menu(tmpwin, NO_GLYPH, &any , 'e', 0, ATR_NONE,
+/*JP
 		    "Enchant", MENU_UNSELECTED);
+*/
+		    "魔力付与", MENU_UNSELECTED);
 	}
 
 	/* Can object be poisoned? */
 	if (is_poisonable(obj) && (ESHK(shkp)->services & SHK_SPECIAL_C)) {
 	    any.a_int = 3;
 	    add_menu(tmpwin, NO_GLYPH, &any , 'p', 0, ATR_NONE,
+/*JP
 		    "Poison", MENU_UNSELECTED);
+*/
+		    "毒塗り", MENU_UNSELECTED);
 	}
 
+/*JP
 	end_menu(tmpwin, "Weapon-works:");
+*/
+	end_menu(tmpwin, "武器関係:");
 	n = select_menu(tmpwin, PICK_ONE, &selected);
 	destroy_nhwindow(tmpwin);
 	if (n > 0)
@@ -5026,17 +6018,27 @@
 	    break;
 
 	case 1:
+/*JP
 	    verbalize("This'll leave your %s untouchable!", xname(obj));
+*/
+	    verbalize("%sに触れないでくれよ！", xname(obj));
 	    
 	    /* Costs more the more eroded it is (oeroded 0-3 * 2) */
 	    charge = 500 * (obj->oeroded + obj->oeroded2 + 1);
 	    if (obj->oeroded + obj->oeroded2 > 2)
+/*JP
 		verbalize("This thing's in pretty sad condition, %s", slang);
+*/
+		verbalize("これはまたひどい状態ですな，%s．", slang);
 
 	    /* Another warning if object is naturally rustproof */
 	    if (obj->oerodeproof || !is_damageable(obj))
+/*JP
 		pline("%s gives you a suspciously happy smile...",
 			mon_nam(shkp));
+*/
+		pline("%sはあなたを見て営業スマイルを浮かべた．．．",
+			mon_nam(shkp));
 
 	    /* Artifacts cost more to deal with */
 	    if (obj->oartifact) charge = charge * 3 / 2;
@@ -5048,9 +6050,15 @@
 
 	    /* Have some fun, but for this $$$ it better work. */
 	    if (Confusion)
+/*JP
 		You("fall over in appreciation");
+*/
+		You("鑑定にくじけた．");
 	    else if (Hallucination)
+/*JP
 		Your(" - tin roof, un-rusted!");
+*/
+		Your("缶の蓋は錆びてない！");
 
 	    obj->oeroded = obj->oeroded2 = 0;
 	    obj->rknown = TRUE;
@@ -5058,7 +6066,10 @@
 	    break;
 
 	case 2:
+/*JP
 	    verbalize("Guaranteed not to harm your weapon, or your money back!");
+*/
+	    verbalize("武器を壊したりはしませんぜ，もし壊したら御代は返します！");
 	    /*
 	    ** The higher the enchantment, the more costly!
 	    ** Gets to the point where you need to rob fort ludios
@@ -5076,20 +6087,33 @@
 
 	    if (shk_offer_price(slang, charge, shkp) == FALSE) return;
 	    if (obj->spe+1 > 5) { 
+/*JP
 		verbalize("I can't enchant this any higher!");
+*/
+		verbalize("これ以上は私には無理だ！");
 		charge = 0;
 		break;
 	    }
 	    /* Have some fun! */
 	    if (Confusion)
+/*JP
 		Your("%s unexpectedly!", aobjnam(obj, "vibrate"));
+*/
+		Your("%sは突然振動した．", xname(obj));
 	    else if (Hallucination)
+/*JP
 		Your("%s to evaporate into thin air!", aobjnam(obj, "seem"));
+*/
+	    /* ...壊れてくれれば面白かったのだが絶対に壊れないようなのでここで意訳 */
+		pline("「クホホホホホ！」あなたの%sは蒸発してしまった！", xname(obj));
 	    /* ...No actual vibrating and no evaporating */
 
 	    if (obj->otyp == WORM_TOOTH) {
 		obj->otyp = CRYSKNIFE;
+/*JP
 		Your("weapon seems sharper now.");
+*/
+		Your("武器はより鋭くなったように見える．");
 		obj->cursed = 0;
 		break;
 	    }
@@ -5098,7 +6122,10 @@
 	    break;
 
 	case 3:
+/*JP
 	    verbalize("Just imagine what poisoned %s can do!", xname(obj));
+*/
+	    verbalize("どんな毒塗り%sが出来上がるか想像してみてくれ！", xname(obj));
 
 	    charge = 10 * obj->quan;
 
@@ -5133,7 +6160,10 @@
 	int n;
 
 	/* Pick armor */
+/*JP
 	if ( !(obj = getobj(armor_types, "improve"))) return;
+*/
+	if ( !(obj = getobj(armor_types, "強化する"))) return;
 
 	/* Here we go */
 	/*WAC - did this using the windowing system...*/
@@ -5142,11 +6172,20 @@
 	start_menu(tmpwin);
 	any.a_int = 1;
 	if (ESHK(shkp)->services & (SHK_SPECIAL_A))
+/*JP
 		add_menu(tmpwin, NO_GLYPH, &any , 'r', 0, ATR_NONE, "Rust/Fireproof", MENU_UNSELECTED);
+*/
+		add_menu(tmpwin, NO_GLYPH, &any , 'r', 0, ATR_NONE, "耐火/腐食防御", MENU_UNSELECTED);
 	any.a_int = 2;
 	if (ESHK(shkp)->services & (SHK_SPECIAL_B))
+/*JP
 		add_menu(tmpwin, NO_GLYPH, &any , 'e', 0, ATR_NONE, "Enchant", MENU_UNSELECTED);
+*/
+		add_menu(tmpwin, NO_GLYPH, &any , 'e', 0, ATR_NONE, "魔力付与", MENU_UNSELECTED);
+/*JP
 	end_menu(tmpwin, "Armor-works:");
+*/
+	end_menu(tmpwin, "防具関係:");
 	n = select_menu(tmpwin, PICK_ONE, &selected);
 	destroy_nhwindow(tmpwin);
 
@@ -5156,11 +6195,17 @@
 	switch(selected[0].item.a_int) {
 		case 1:
 		if (!flags.female && is_human(youmonst.data))
+/*JP
 		     verbalize("They'll call you the man of stainless steel!");
+*/
+		     verbalize("あなたはステンレス鋼の男と呼ばれるようになるだろうな！");
 
 		/* Costs more the more rusty it is (oeroded 0-3) */
 		charge = 300 * (obj->oeroded+1);
+/*JP
 		if (obj->oeroded > 2) verbalize("Yikes!  This thing's a mess!");
+*/
+		if (obj->oeroded > 2) verbalize("うひゃ！ こいつは滅茶苦茶だな！");
 
 		/* Artifacts cost more to deal with */
 		/* KMH -- Avoid floating-point */
@@ -5173,9 +6218,15 @@
 
 		/* Have some fun, but for this $$$ it better work. */
 		if (Confusion)
+/*JP
 			You("forget how to put your %s back on!", xname(obj));
+*/
+			You("%sを取り戻す方法を忘れてしまった！", xname(obj));
 		else if (Hallucination)
+/*JP
 			You("mistake your %s for a pot and...", xname(obj));
+*/
+			You("%sをポットと間違えた．そして．．．", xname(obj));
 
 		obj->oeroded = 0;
 		obj->rknown = TRUE;
@@ -5183,7 +6234,10 @@
 		break;
 
 		case 2:
+/*JP
 		verbalize("Nobody will ever hit on you again.");
+*/
+		verbalize("どんな攻撃もあなたに当たらなくなるだろうな．");
  
 		/* Higher enchantment levels cost more. */
 		charge = (obj->spe+1) * (obj->spe+1) * 500;
@@ -5198,17 +6252,26 @@
 
 		if (shk_offer_price(slang, charge, shkp) == FALSE) return;
 		if (obj->spe+1 > 3) { 
+/*JP
 			verbalize("I can't enchant this any higher!");
+*/
+			verbalize("これ以上は私には無理だ！");
 			charge = 0;
 			break;
 			}
 		 /* Have some fun! */
+/*JP
 		if (Hallucination) Your("%s looks dented.", xname(obj));
+*/
+		if (Hallucination) Your("%sはへこんだように見える．", xname(obj));
 		
 		if (obj->otyp >= GRAY_DRAGON_SCALES &&
 					obj->otyp <= YELLOW_DRAGON_SCALES) {
 			/* dragon scales get turned into dragon scale mail */
+/*JP
 			Your("%s merges and hardens!", xname(obj));
+*/
+			Your("%sは融合し固くなった！", xname(obj));
 			setworn((struct obj *)0, W_ARM);
 			/* assumes same order */
 			obj->otyp = GRAY_DRAGON_SCALE_MAIL +
@@ -5253,13 +6316,25 @@
 
 	/* What type of shop are we? */
 	if (shk_class_match(WAND_CLASS, shkp) == SHK_MATCH)
+/*JP
 		obj = getobj(wand_types, "charge");
+*/
+		obj = getobj(wand_types, "充填する");
 	else if (shk_class_match(TOOL_CLASS, shkp) == SHK_MATCH)
+/*JP
 		obj = getobj(tool_types, "charge");
+*/
+		obj = getobj(tool_types, "充填する");
 	else if (shk_class_match(RING_CLASS, shkp) == SHK_MATCH)
+/*JP
 		obj = getobj(ring_types, "charge");
+*/
+		obj = getobj(ring_types, "充填する");
 	else if (shk_class_match(SPBOOK_CLASS, shkp) == SHK_MATCH)
+/*JP
 		obj = getobj(spbook_types, "charge");
+*/
+		obj = getobj(spbook_types, "充填する");
 	if (!obj) return;
 
 	/*
@@ -5271,14 +6346,23 @@
 		/* What type of service? */
 		if ((ESHK(shkp)->services & (SHK_SPECIAL_A|SHK_SPECIAL_B)) ==
 				(SHK_SPECIAL_A|SHK_SPECIAL_B)) {
+/*JP
 			type = yn_function("[B]asic service or [P]remier",
+*/
+			type = yn_function("通常サービス[b] 又は特殊サービス [p]",
 					ident_chars, '\0');
 			if (type == '\0') return;
 		} else if (ESHK(shkp)->services & SHK_SPECIAL_A) {
+/*JP
 			pline ("I only perform basic charging.");
+*/
+			pline ("当店で提供できるのは通常サービスのみです．");
 			type = 'b';
 		} else if (ESHK(shkp)->services & SHK_SPECIAL_B) {
+/*JP
 			pline ("I only perform complete charging.");
+*/
+			pline ("当店で提供できるのは特殊サービスのみです．");
 			type = 'p';
 		}
  	}
@@ -5305,7 +6389,10 @@
 	/* Shopkeeper deviousness */
 	if ((Confusion || Hallucination) && !no_cheat)
 	{
+/*JP
 		pline("%s says it's charged and pushes you toward the door",
+*/
+		pline("%sは充填が終わったと言って，あなたを出入り口に押していった．",
 			Monnam(shkp));
 		return;
 	}
@@ -5329,7 +6416,10 @@
 		}
 	if (!obj)
 	{
+/*JP
 		verbalize("Oops!  Sorry about that...");
+*/
+		verbalize("おおっと！済まない．．．");
 		return;
 	}
 
@@ -5344,8 +6434,12 @@
 			if (type == 'p') obj->spe++;
 
 			/* Fun */
+/*JP
 			verbalize("Since you'll have everything you always wanted,");
 			verbalize("...How about loaning me some money?");
+*/
+			verbalize("あなたは望む物全てを手に入れられるのでしょうな．");
+			verbalize("．．．私にお金を貸してくれませんか？");
 #ifndef GOLDOBJ
 			shkp->mgold += u.ugold;
 			u.ugold = 0;
@@ -5400,11 +6494,18 @@
 	long credit = ESHK(shkp)->credit;
 
 	/* Ask y/n if player wants to pay */
+/*JP
         Sprintf(sbuf, "It'll cost you %ld zorkmid%s.  Interested?",
 		charge, plur(charge));
+*/
+	/* 日本語には複数のsは無い */
+        Sprintf(sbuf, "%ldゴールドかかります．宜しいですか？", charge);
 
 	if ( yn(sbuf) != 'y' ) {
+/*JP
 		verbalize("It's your call, %s.", slang);
+*/
+		verbalize("では仕方ないですね，%s．", slang);
 		return(FALSE);
 	}
 
@@ -5418,7 +6519,10 @@
 #else
 	if (charge > (money_cnt(invent) + credit)) {  
 #endif
+/*JP
 		verbalize("Cash on the spot, %s, and you ain't got the dough!",
+*/
+		verbalize("これは現金払いでないと駄目ですぜ，%s！",
 			slang);
 		return(FALSE);
 	}
@@ -5521,13 +6625,19 @@
 	special++;
     }
     if (!shkp)
+/*JP
 	putstr(win, 0, "No shopkeepers with bills");
+*/
+	putstr(win, 0, "借りのある店主はいない");
     else
 	for (; shkp; ) {
 	    bp = ESHK(shkp)->bill_p;
 	    ct = ESHK(shkp)->billct;
 	    if (ct) {
+/*JP
 		Sprintf(buf, "Your bill with %s", noit_mon_nam(shkp));
+*/
+		Sprintf(buf, "%sに対する借り", noit_mon_nam(shkp));
 		if (shkp == ushkp) {
 		    Strcat(buf, " (here)");
 		    ushkp = NULL;
@@ -5551,7 +6661,10 @@
 		}
 	    }
 	    else {
+/*JP
 		Sprintf(buf, "You do not owe %s anything.", noit_mon_nam(shkp));
+*/
+		Sprintf(buf, "あなたは%sには借りがない．", noit_mon_nam(shkp));
 		putstr(win, 0, buf);
 	    }
 	    if (special)
diff -aurN slashem-0.0.7E6F2/src/shknam.c jslashem-0.0.7E6F2-J0.0.8/src/shknam.c
--- slashem-0.0.7E6F2/src/shknam.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/shknam.c	2004-06-28 00:53:30.000000000 +0900
@@ -4,6 +4,14 @@
 
 /* shknam.c -- initialize a shop */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "eshk.h"
 
@@ -220,40 +228,73 @@
  * a new shop type.
  */
 const struct shclass shtypes[] = {
+/*JP
 	{"general store", RANDOM_CLASS, 24,
+*/
+	{"雑貨屋", RANDOM_CLASS, 24,
 	    D_SHOP, {{100, RANDOM_CLASS}, {0, 0}, {0, 0}}, shkgeneral},
+/*JP
 	{"used armor dealership", ARMOR_CLASS, 20,
+*/
+	{"中古鎧商会", ARMOR_CLASS, 20,
 	    D_SHOP, {{90, ARMOR_CLASS}, {10, WEAPON_CLASS}, {0, 0}},
 	     shkarmors},
+/*JP
 	{"second-hand bookstore", SCROLL_CLASS, 4, D_SHOP,
+*/
+	{"古書店", SCROLL_CLASS, 4, D_SHOP,
 	    {{90, SCROLL_CLASS}, {10, SPBOOK_CLASS}, {0, 0}}, shkbooks},
+/*JP
 	{"liquor emporium", POTION_CLASS, 4, D_SHOP,
+*/
+	{"お酒の百貨店", POTION_CLASS, 4, D_SHOP,
 	    {{100, POTION_CLASS}, {0, 0}, {0, 0}}, shkliquors},
 #ifdef FIREARMS	/* KMH -- no longer "antique" */
+/*JP
 	{"weapons outlet", WEAPON_CLASS, 20, D_SHOP, {
+*/
+	{"武器専門小売店", WEAPON_CLASS, 20, D_SHOP, {
 	    {80, WEAPON_CLASS}, {6, -BULLET}, {3, -BULLET}, {1, -SILVER_BULLET},
 #else
+/*JP
 	{"antique weapons outlet", WEAPON_CLASS, 20, D_SHOP, {
+*/
+	{"古武器専門小売店", WEAPON_CLASS, 20, D_SHOP,
 	    {90, WEAPON_CLASS},
 #endif
 	    {10, ARMOR_CLASS}, {0, 0}}, shkweapons},
+/*JP
 	{"delicatessen", FOOD_CLASS, 4, D_SHOP,
+*/
+	{"食品店", FOOD_CLASS, 4, D_SHOP,
 	    {{83, FOOD_CLASS}, {5, -POT_FRUIT_JUICE}, {4, -POT_BOOZE},
 	     {5, -POT_WATER}, {3, -ICE_BOX}}, shkfoods},
+/*JP
 	{"jewelers", RING_CLASS, 4, D_SHOP,
+*/
+	{"宝石店", RING_CLASS, 4, D_SHOP,
 	    {{85, RING_CLASS}, {10, GEM_CLASS}, {5, AMULET_CLASS}, {0, 0}},
 	    shkrings},
+/*JP
 	{"quality apparel and accessories", WAND_CLASS, 4, D_SHOP,
+*/
+	{"おシャレな洋品店", WAND_CLASS, 4, D_SHOP,
 	    {{90, WAND_CLASS}, {5, -LEATHER_GLOVES}, {5, -ELVEN_CLOAK}, {0, 0}},
 	     shkwands},
+/*JP
 	{"hardware store", TOOL_CLASS, 4, D_SHOP,
+*/
+	{"道具屋", TOOL_CLASS, 4, D_SHOP,
 	    {{100, TOOL_CLASS}, {0, 0}}, shktools},
 	/* Actually shktools is ignored; the code specifically chooses a
 	 * random implementor name (along with candle shops having
 	 * random shopkeepers)
 	 */
 	/* STEPHEN WHITE'S NEW CODE */
+/*JP
 	{"pet store", TOOL_CLASS, 4, D_SHOP, {
+*/
+	{"ペット専門店", TOOL_CLASS, 4, D_SHOP,{
 #ifdef STEED
 	    {67, -FIGURINE}, {5, -LEASH},{10, -TRIPE_RATION}, {5, -SADDLE},
 #else
@@ -261,22 +302,34 @@
 #endif
 	    {10, -TIN_WHISTLE}, {3, -MAGIC_WHISTLE}}, shkpet},
 	/* Robin Johnson -- 4% taken from pet store */
+/*JP
 	{"frozen food store", TOOL_CLASS, 4, D_SHOP,
+*/
+	{"冷凍食品店", TOOL_CLASS, 4, D_SHOP,
 		{{90, -ICE_BOX}, {10, -TIN},
 		/* shopkeeper will pay for corpses, but they aren't generated */
 		/* on the shop floor */
 		{0, -CORPSE}, {0, 0}}, shkfoods},
+/*JP
 	{"rare books", SPBOOK_CLASS, 4, D_SHOP,
+*/
+	{"貴重本専門店", SPBOOK_CLASS, 4, D_SHOP,
 	    {{90, SPBOOK_CLASS}, {10, SCROLL_CLASS}, {0, 0}}, shkbooks},
 	/* Shops below this point are "unique".  That is they must all have a
 	 * probability of zero.  They are only created via the special level
 	 * loader.
 	 */
+/*JP
 	{"lighting store", TOOL_CLASS, 0, D_SHOP,
+*/
+	{"照明店", TOOL_CLASS, 0, D_SHOP,
 	    {{25, -WAX_CANDLE}, {35, -TALLOW_CANDLE}, {5, -TORCH}, {11, -BRASS_LANTERN},
 	    {16, -OIL_LAMP}, {3, -MAGIC_LAMP}, {5, -MAGIC_CANDLE}}, shklight},
 #ifdef BLACKMARKET
+/*JP
 	{"black market", RANDOM_CLASS, 0, D_SHOP,
+*/
+	{"闇市", RANDOM_CLASS, 0, D_SHOP,
 	   {{100, RANDOM_CLASS}, {0, 0}, {0, 0}}, shkblack},
 #endif /* BLACKMARKET */
 	{(char *)0, 0, 0, 0, {{0, 0}, {0, 0}, {0, 0}}, 0}
@@ -336,7 +389,11 @@
 struct monst *shk;
 const char * const *nlp;
 {
+#if 0 /*JP*/
 	int i, trycnt, names_avail;
+#else
+        int trycnt, names_avail;
+#endif
 	const char *shname = 0;
 	struct monst *mtmp;
 	int name_wanted;
@@ -348,6 +405,32 @@
 	    shname = "Izchak";
 	    shk->female = FALSE;
 	} else {
+#if 1 /*JP*/
+	     /* We decide to use simple way */
+	    for (names_avail = 0; nlp[names_avail]; names_avail++)
+		 ;
+
+	    for (trycnt = 0; trycnt < 50; trycnt++) {
+		 name_wanted = rn2(names_avail);
+		 shk->female = name_wanted & 1;
+		 shname = nlp[name_wanted];
+		 if(shname[0] & 0x80){
+		      shk->female = 0;
+		 }
+		 else if(shname[0] == '_'){
+		      ++shname;
+		      shk->female = 1;
+		 }
+		 for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
+		      if (mtmp == shk) continue;
+		      if (!mtmp->isshk) continue;
+		      if (strcmp(ESHK(mtmp)->shknam, shname)) continue;
+		      break;
+		 }
+		 if(!mtmp)
+		      break;
+	    }
+#else
 	    /* We want variation from game to game, without needing the save
 	       and restore support which would be necessary for randomization;
 	       try not to make too many assumptions about time_t's internals;
@@ -387,6 +470,7 @@
 		}
 		if (!mtmp) break;	/* new name */
 	    }
+#endif
 	}
 	(void) strncpy(ESHK(shk)->shknam, shname, PL_NSIZ);
 	ESHK(shk)->shknam[PL_NSIZ-1] = 0;
@@ -584,7 +668,10 @@
 	    else if(inside_shop(sx-1,sy)) m++;
 	    if(inside_shop(sx,sy+1)) n--;
 	    else if(inside_shop(sx,sy-1)) n++;
+/*JP
 	    Sprintf(buf, "Closed for inventory");
+*/
+	    Sprintf(buf, "棚卸しのため閉店");
 	    make_engr_at(m, n, buf, 0L, DUST);
     }
 
diff -aurN slashem-0.0.7E6F2/src/sit.c jslashem-0.0.7E6F2-J0.0.8/src/sit.c
--- slashem-0.0.7E6F2/src/sit.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/sit.c	2004-07-03 15:47:30.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "artifact.h"
 
@@ -10,9 +18,15 @@
 {
 #ifndef GOLDOBJ
 	if (u.ugold <= 0)  {
+/*JP
 		You_feel("a strange sensation.");
+*/
+		You("奇妙な感覚を覚えた．");
 	} else {
+/*JP
 		You("notice you have no gold!");
+*/
+		You("お金を持ってないことに気がついた！");
 		u.ugold = 0;
 		flags.botl = 1;
 	}
@@ -27,9 +41,15 @@
 		}
 	}
 	if (!lost_money)  {
+/*JP
 		You_feel("a strange sensation.");
+*/
+		You("奇妙な感覚を覚えた．");
 	} else {
+/*JP
 		You("notice you have no money!");
+*/
+		You("お金を持ってないことに気がついた！");
 		flags.botl = 1;
 	}
 #endif
@@ -38,23 +58,35 @@
 int
 dosit()
 {
+/*JP
 	static const char sit_message[] = "sit on the %s.";
+*/
+	static const char sit_message[] = "%sに座った．";
 	register struct trap *trap;
 	register int typ = levl[u.ux][u.uy].typ;
 
 
 #ifdef STEED
 	if (u.usteed) {
+/*JP
 	    You("are already sitting on %s.", mon_nam(u.usteed));
+*/
+	    You("もう%sに座っている．", mon_nam(u.usteed));
 	    return (0);
 	}
 #endif
 
 	if(!can_reach_floor())	{
 	    if (Levitation)
+/*JP
 		You("tumble in place.");
+*/
+		You("その場で宙返りした．");
 	    else
+/*JP
 		You("are sitting on air.");
+*/
+		You("空中に座った．");
 	    return 0;
 	} else if (is_pool(u.ux, u.uy) && !Underwater) {  /* water walking */
 	    goto in_water;
@@ -64,9 +96,15 @@
 	    register struct obj *obj;
 
 	    obj = level.objects[u.ux][u.uy];
+/*JP
 	    You("sit on %s.", the(xname(obj)));
+*/
+	    You("%sに座った．", the(xname(obj)));
 	    if (!(Is_box(obj) || objects[obj->otyp].oc_material == CLOTH))
+/*JP
 		pline("It's not very comfortable...");
+*/
+		pline("あまり座りごこちがよくない．．．");
 
 	} else if ((trap = t_at(u.ux, u.uy)) != 0 ||
 		   (u.utrap && (u.utraptype >= TT_LAVA))) {
@@ -74,123 +112,233 @@
 	    if (u.utrap) {
 		exercise(A_WIS, FALSE);	/* you're getting stuck longer */
 		if(u.utraptype == TT_BEARTRAP) {
+/*JP
 		    You_cant("sit down with your %s in the bear trap.", body_part(FOOT));
+*/
+		    pline("%sが熊の罠にはさまっているので座れない．", body_part(FOOT));
 		    u.utrap++;
 	        } else if(u.utraptype == TT_PIT) {
 		    if(trap->ttyp == SPIKED_PIT) {
+/*JP
 			You("sit down on a spike.  Ouch!");
+*/
+			You("トゲの上に座った．いてっ！");
+/*JP
 			losehp(1, "sitting on an iron spike", KILLED_BY);
+*/
+			losehp(1, "鉄のトゲの上に座って", KILLED_BY);
 			exercise(A_STR, FALSE);
 		    } else
+/*JP
 			You("sit down in the pit.");
+*/
+			You("落し穴の中で座った．");
 		    u.utrap += rn2(5);
 		} else if(u.utraptype == TT_WEB) {
+/*JP
 		    You("sit in the spider web and get entangled further!");
+*/
+		    You("くもの巣の中で座ったら，より絡まった！");
 		    u.utrap += rn1(10, 5);
 		} else if(u.utraptype == TT_LAVA) {
 		    /* Must have fire resistance or they'd be dead already */
+/*JP
 		    You("sit in the lava!");
+*/
+		    You("溶岩の中に座った！");
 		    u.utrap += rnd(4);
+/*JP
 		    losehp(d(2,10), "sitting in lava", KILLED_BY);
+*/
+		    losehp(d(2,10), "溶岩の中に座って", KILLED_BY);
 		} else if(u.utraptype == TT_INFLOOR) {
+/*JP
 		    You_cant("maneuver to sit!");
+*/
+		    You("座るような動作ができない！");
 		    u.utrap++;
 		}
 	    } else {
+/*JP
 	        You("sit down.");
+*/
+	        You("座った．");
 		dotrap(trap, 0);
 	    }
 	} else if(Underwater || Is_waterlevel(&u.uz)) {
 	    if (Is_waterlevel(&u.uz))
+/*JP
 		There("are no cushions floating nearby.");
+*/
+		pline("近くに浮いているクッションはない．");
 	    else
+/*JP
 		You("sit down on the muddy bottom.");
+*/
+		You("どろどろした底に座った．");
 	} else if(is_pool(u.ux, u.uy)) {
  in_water:
+/*JP
 	    You("sit in the water.");
+*/
+	    You("水の中で座った．");
 	    if (!rn2(10) && uarm)
+/*JP
 		(void) rust_dmg(uarm, "armor", 1, TRUE, &youmonst);
+*/
+		(void) rust_dmg(uarm, "鎧", 1, TRUE, &youmonst);
 	    else if (!rn2(10) && uarmf && uarmf->otyp != WATER_WALKING_BOOTS)
+/*JP
 		(void) rust_dmg(uarm, "armor", 1, TRUE, &youmonst);
+*/
+		(void) rust_dmg(uarm, "鎧", 1, TRUE, &youmonst);
 #ifdef SINKS
 	} else if(IS_SINK(typ)) {
-
+#if 0 /*JP*/
 	    You(sit_message, defsyms[S_sink].explanation);
 	    Your("%s gets wet.", humanoid(youmonst.data) ? "rump" : "underside");
+#else
+	    You(sit_message, jtrns_obj('S', defsyms[S_sink].explanation));
+	    Your("%sは濡れた．", humanoid(youmonst.data) ? "尻" : "下部");
+#endif
 	} else if(IS_TOILET(typ)) {
+/*JP
 	    You(sit_message, defsyms[S_toilet].explanation);
+*/
+	    You(sit_message, jtrns_obj('S', defsyms[S_toilet].explanation));
+/*JP
 	    if ((!Sick) && (u.uhs > 0)) You("don't have to go...");
+*/
+	    if ((!Sick) && (u.uhs > 0)) You("する必要がない．．．");
 	    else {
+#if 0 /*JP*/
 			if (Role_if(PM_BARBARIAN) || Role_if(PM_CAVEMAN)) You("miss...");
 			else You("grunt.");
+#else
+			if (Role_if(PM_BARBARIAN) || Role_if(PM_CAVEMAN)) You("外した．．．");
+			else You("うなった．");
+#endif
 			if (Sick) make_sick(0L, (char *)0, TRUE, SICK_ALL);
 			if (u.uhs == 0) morehungry(rn2(400)+200);
 	    }
 #endif
 	} else if(IS_ALTAR(typ)) {
-
+/*JP
 	    You(sit_message, defsyms[S_altar].explanation);
+*/
+	    You(sit_message, jtrns_obj('S', defsyms[S_altar].explanation));
 	    altar_wrath(u.ux, u.uy);
 
 	} else if(IS_GRAVE(typ)) {
 
+/*JP
 	    You(sit_message, defsyms[S_grave].explanation);
+*/
+	    You(sit_message, jtrns_obj('S', defsyms[S_grave].explanation));
 
 	} else if(typ == STAIRS) {
 
+/*JP
 	    You(sit_message, "stairs");
+*/
+	    You(sit_message, "階段");
 
 	} else if(typ == LADDER) {
 
+/*JP
 	    You(sit_message, "ladder");
+*/
+	    You(sit_message, "はしご");
 
 	} else if (is_lava(u.ux, u.uy)) {
 
 	    /* must be WWalking */
+/*JP
 	    You(sit_message, "lava");
+*/
+	    You(sit_message, "溶岩");
 	    burn_away_slime();
 	    if (likes_lava(youmonst.data)) {
+/*JP
 		pline_The("lava feels warm.");
+*/
+		pline("溶岩は暖かい．");
 		return 1;
 	    }
+/*JP
 	    pline_The("lava burns you!");
+*/
+	    You("溶岩で燃えた！");
 	    if (Slimed) {
+/*JP
 	       pline("The slime is burned away!");
+*/
+	       pline("スライムは焼け落ちた！");
 	       Slimed = 0;
 	    }
+#if 0 /*JP*/
 	    losehp(d((Fire_resistance ? 2 : 10), 10),
 		   "sitting on lava", KILLED_BY);
+#else
+	    losehp(d((Fire_resistance ? 2 : 10), 10),
+		   "溶岩に座って", KILLED_BY);
+#endif
 
 	} else if (is_ice(u.ux, u.uy)) {
 
+/*JP
 	    You(sit_message, defsyms[S_ice].explanation);
+*/
+	    You(sit_message, jtrns_obj('S', defsyms[S_ice].explanation));
+/*JP
 	    if (!Cold_resistance) pline_The("ice feels cold.");
+*/
+	    if (!Cold_resistance) pline("氷は冷たく感じた");
 
 	} else if (typ == DRAWBRIDGE_DOWN) {
 
+/*JP
 	    You(sit_message, "drawbridge");
+*/
+	    You(sit_message, "跳ね橋");
 
 	} else if(IS_THRONE(typ)) {
 
+/*JP
 	    You(sit_message, defsyms[S_throne].explanation);
+*/
+	    You(sit_message, jtrns_obj('S', defsyms[S_throne].explanation));
 	    if (rnd(6) > 4)  {
 		switch (rnd(13))  {
 		    case 1:
 			(void) adjattrib(rn2(A_MAX), -rn1(4,3), FALSE);
+/*JP
 			losehp(rnd(10), "cursed throne", KILLED_BY_AN);
+*/
+			losehp(rnd(10), "呪われた玉座で", KILLED_BY_AN);
 			break;
 		    case 2:
 			(void) adjattrib(rn2(A_MAX), 1, FALSE);
 			break;
 		    case 3:
+#if 0 /*JP*/
 			pline("A%s electric shock shoots through your body!",
 			      (Shock_resistance) ? "n" : " massive");
 			losehp(Shock_resistance ? rnd(6) : rnd(30),
 			       "electric chair", KILLED_BY_AN);
+#else
+			pline("%s電気があなたの体を走り抜けた！",
+			      (Shock_resistance) ? "" : "激しい");
+			losehp(Shock_resistance ? rnd(6) : rnd(30),
+			       "電気椅子で", KILLED_BY_AN);
+#endif
 			exercise(A_CON, FALSE);
 			break;
 		    case 4:
+/*JP
 			You_feel("much, much better!");
+*/
+			You_feel("とても，とても元気になったような気がした！");
 			if (Upolyd) {
 			    if (u.mh >= (u.mhmax - 5))  u.mhmax += 4;
 			    u.mh = u.mhmax;
@@ -208,7 +356,10 @@
 		    case 6:
 /* ------------===========STEPHEN WHITE'S NEW CODE============------------ */                                                
 			if(u.uluck < 7) {
+/*JP
 			    You_feel("your luck is changing.");
+*/
+			    pline("運がよくなったような気がする．");
 			    change_luck(5);
 			} else	    makewish();
 			break;
@@ -216,22 +367,39 @@
 			{
 			register int cnt = rnd(10);
 
+#if 0 /*JP*/
 			pline("A voice echoes:");
 			verbalize("Thy audience hath been summoned, %s!",
 				  flags.female ? "Dame" : "Sire");
+#else
+			pline("声が響いた:");
+			verbalize("%sよ！汝の聴衆召喚されし．",
+				  flags.female ? "女" : "男");
+#endif
 			while(cnt--)
 			    (void) makemon(courtmon(), u.ux, u.uy, NO_MM_FLAGS);
 			break;
 			}
 		    case 8:
+#if 0 /*JP*/
 			pline("A voice echoes:");
 			verbalize("By thy Imperious order, %s...",
 				  flags.female ? "Dame" : "Sire");
+#else
+			pline("声が響いた:");
+			verbalize("%sよ！汝の傲慢聞きいれようぞ．",
+				  flags.female ? "女" : "男");
+#endif
 			do_genocide(5);	/* REALLY|ONTHRONE, see do_genocide() */
 			break;
 		    case 9:
+#if 0 /*JP*/
 			pline("A voice echoes:");
 	verbalize("A curse upon thee for sitting upon this most holy throne!");
+#else
+			pline("声が響いた:");
+	verbalize("聖なる玉座に座りし汝に呪いあれ！");
+#endif
 			if (Luck > 0)  {
 			    make_blinded(Blinded + rn1(100,250),TRUE);
 			} else	    rndcurse();
@@ -240,38 +408,59 @@
 			if (Luck < 0 || (HSee_invisible & INTRINSIC))  {
 				if (level.flags.nommap) {
 					pline(
+/*JP
 					"A terrible drone fills your head!");
+*/
+					"恐しいブンブンという音が頭に響いた！");
 					make_confused(HConfusion + rnd(30),
 									FALSE);
 				} else {
+/*JP
 					pline("An image forms in your mind.");
+*/
+					pline("あるイメージが頭に浮んだ．");
 					do_mapping();
 				}
 			} else  {
+/*JP
 				Your("vision becomes clear.");
+*/
+				Your("視界は冴え渡った．");
 				HSee_invisible |= FROMOUTSIDE;
 				newsym(u.ux, u.uy);
 			}
 			break;
 		    case 11:
 			if (Luck < 0)  {
+/*JP
 			    You_feel("threatened.");
+*/
+			    You("脅迫されているような気がした．");
 			    aggravate();
 			} else  {
 
+/*JP
 			    You_feel("a wrenching sensation.");
+*/
+			    You("ねじられたような感覚を感じた．");
 			    tele();		/* teleport him */
 			}
 			break;
 		    case 12:
+/*JP
 			You("are granted an insight!");
+*/
+			You("洞察力を得た！");
 			if (invent) {
 			    /* rn2(5) agrees w/seffects() */
 			    identify_pack(rn2(5));
 			}
 			break;
 		    case 13:
+/*JP
 			Your("mind turns into a pretzel!");
+*/
+			Your("心はクネクネになった！");
 			make_confused(HConfusion + rn1(7,16),FALSE);
 			break;
 		    default:	impossible("throne effect");
@@ -279,15 +468,24 @@
 		}
 	    } else {
 		if (is_prince(youmonst.data))
+/*JP
 		    You_feel("very comfortable here.");
+*/
+		    You("ここはとても落ち着く．");
 		else
+/*JP
 		    You_feel("somehow out of place...");
+*/
+		    You("何故か場違いの気がした．．．");
 	    }
 
 	    if (!rn2(3) && IS_THRONE(levl[u.ux][u.uy].typ)) {
 		/* may have teleported */
 		levl[u.ux][u.uy].typ = ROOM;
+/*JP
 		pline_The("throne vanishes in a puff of logic.");
+*/
+		pline("玉座はふっと消えた．");
 		newsym(u.ux,u.uy);
 	    }
 
@@ -295,12 +493,18 @@
 		struct obj *uegg;
 
 		if (!flags.female) {
+/*JP
 			pline("Males can't lay eggs!");
+*/
+			pline("雄は卵を産めない！");
 			return 0;
 		}
 
 		if (u.uhunger < (int)objects[EGG].oc_nutrition) {
+/*JP
 			You("don't have enough energy to lay an egg.");
+*/
+			You("卵を産むだけのエネルギーがない．");
 			return 0;
 		}
 
@@ -311,14 +515,23 @@
 		uegg->corpsenm = egg_type_from_parent(u.umonnum, FALSE);
 		uegg->known = uegg->dknown = 1;
 		attach_egg_hatch_timeout(uegg);
+/*JP
 		You("lay an egg.");
+*/
+		You("卵を産んだ");
 		dropy(uegg);
 		stackobj(uegg);
 		morehungry((int)objects[EGG].oc_nutrition);
 	} else if (u.uswallow)
+/*JP
 		There("are no seats in here!");
+*/
+		pline("ここには椅子はない！");
 	else
+/*JP
 		pline("Having fun sitting on the %s?", surface(u.ux,u.uy));
+*/
+		pline("%sに座って楽しいかい？", surface(u.ux,u.uy));
 	return(1);
 }
 
@@ -328,16 +541,25 @@
 	int	nobj = 0;
 	int	cnt, onum;
 	struct	obj	*otmp;
+/*JP
 	static const char mal_aura[] = "feel a malignant aura surround %s.";
+*/
+	static const char mal_aura[] = "邪悪なオーラを%sの回りに感じた．";
 
 	if (uwep && (uwep->oartifact == ART_MAGICBANE) && rn2(20)) {
+/*JP
 	    You(mal_aura, "the magic-absorbing blade");
+*/
+	    You(mal_aura, "魔力を吸いとる刀");
 	    return;
 	}
 
 	if(Antimagic) {
 	    shieldeff(u.ux, u.uy);
+/*JP
 	    You(mal_aura, "you");
+*/
+	    You(mal_aura, "あなた");
 	}
 
 	for (otmp = invent; otmp; otmp = otmp->nobj) {
@@ -364,7 +586,10 @@
 
 		if(otmp->oartifact && spec_ability(otmp, SPFX_INTEL) &&
 		   rn2(10) < 8) {
+/*JP
 		    pline("%s!", Tobjnam(otmp, "resist"));
+*/
+		    pline("%sは影響を受けない！", xname(otmp));
 		    continue;
 		}
 
@@ -386,10 +611,16 @@
 	    else
 		curse(otmp);
 	    if (!Blind) {
+#if 0 /*JP*/
 		pline("%s %s %s.",
 		      s_suffix(upstart(y_monnam(u.usteed))),
 		      aobjnam(otmp, "glow"),
 		      hcolor(otmp->cursed ? NH_BLACK : (const char *)"brown"));
+#else
+		pline("%sは%sに輝いた．",
+		      upstart(y_monnam(u.usteed)),
+		      hcolor(otmp->cursed ? NH_BLACK : (const char *)"茶色の"));
+#endif
 		otmp->bknown = TRUE;
 	    }
 	}
@@ -402,60 +633,97 @@
 	switch(rnd(11)) {
 	case 1 : if (HFire_resistance & INTRINSIC) {
 			HFire_resistance &= ~INTRINSIC;
+/*JP
 			You_feel("warmer.");
+*/
+			You("暖かさを感じた．");
 			break;
 		}
 	case 2 : if (HTeleportation & INTRINSIC) {
 			HTeleportation &= ~INTRINSIC;
+/*JP
 			You_feel("less jumpy.");
+*/
+			You("ちょっと落ちついた．");
 			break;
 		}
 	case 3 : if (HPoison_resistance & INTRINSIC) {
 			HPoison_resistance &= ~INTRINSIC;
+/*JP
 			You_feel("a little sick!");
+*/
+			You("少し気分が悪くなった！");
 			break;
 		}
 	case 4 : if (HTelepat & INTRINSIC) {
 			HTelepat &= ~INTRINSIC;
 			if (Blind && !Blind_telepat)
 			    see_monsters();	/* Can't sense mons anymore! */
+/*JP
 			Your("senses fail!");
+*/
+			Your("五感は麻痺した！");
 			break;
 		}
 	case 5 : if (HCold_resistance & INTRINSIC) {
 			HCold_resistance &= ~INTRINSIC;
+/*JP
 			You_feel("cooler.");
+*/
+			You("涼しさを感じた．");
 			break;
 		}
 	case 6 : if (HInvis & INTRINSIC) {
 			HInvis &= ~INTRINSIC;
+/*JP
 			You_feel("paranoid.");
+*/
+			You("妄想を抱いた．");
 			break;
 		}
 	case 7 : if (HSee_invisible & INTRINSIC) {
 			HSee_invisible &= ~INTRINSIC;
+#if 0 /*JP*/
 			You("%s!", Hallucination ? "tawt you taw a puttie tat"
 						: "thought you saw something");
+#else
+			if(Hallucination)
+			    You("だれ蟹みら，れている．");
+			else
+			    You("誰かに見られているような気がした！");
+#endif
 			break;
 		}
 	case 8 : if (HFast & INTRINSIC) {
 			HFast &= ~INTRINSIC;
+/*JP
 			You_feel("slower.");
+*/
+			You("遅くなったような気がした．");
 			break;
 		}
 	case 9 : if (HStealth & INTRINSIC) {
 			HStealth &= ~INTRINSIC;
+/*JP
 			You_feel("clumsy.");
+*/
+			You("不器用になったような気がした．");
 			break;
 		}
 	case 10: if (HProtection & INTRINSIC) {
 			HProtection &= ~INTRINSIC;
+/*JP
 			You_feel("vulnerable.");
+*/
+			You("無防備になった気がした．");
 			break;
 		}
 	case 11: if (HAggravate_monster & INTRINSIC) {
 			HAggravate_monster &= ~INTRINSIC;
+/*JP
 			You_feel("less attractive.");
+*/
+			You("魅力が失せたような気がした．");
 			break;
 		}
 	default: break;
diff -aurN slashem-0.0.7E6F2/src/sounds.c jslashem-0.0.7E6F2-J0.0.8/src/sounds.c
--- slashem-0.0.7E6F2/src/sounds.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/sounds.c	2004-08-25 20:49:11.562500000 +0900
@@ -2,6 +2,14 @@
 /*	Copyright (c) 1989 Janet Walz, Mike Threepoint */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "edog.h"
 #ifdef USER_SOUNDS
@@ -70,29 +78,62 @@
 
     if (level.flags.nfountains && !rn2(400)) {
 	static const char * const fountain_msg[4] = {
+/*JP
 		"bubbling water.",
+*/
+		"ゴボゴボという音を聞いた．",
+/*JP
 		"water falling on coins.",
+*/
+		"ピチャピチャという音を聞いた．",
+/*JP
 		"the splashing of a naiad.",
+*/
+		"バシャバシャという音を聞いた．",
+/*JP
 		"a soda fountain!",
+*/
+		"炭酸飲料のシューという音を聞いた．"
 	};
 	You_hear(fountain_msg[rn2(3)+hallu]);
     }
 #ifdef SINK
     if (level.flags.nsinks && !rn2(300)) {
 	static const char * const sink_msg[3] = {
+/*JP
 		"a slow drip.",
+*/
+	        "水がぽたぽたと落ちる音を聞いた．",
+/*JP
 		"a gurgling noise.",
+*/
+		"がらがらという音を聞いた．",
+/*JP
 		"dishes being washed!",
+*/
+		"皿を洗う音を聞いた．",
 	};
 	You_hear(sink_msg[rn2(2)+hallu]);
     }
 #endif
     if (level.flags.has_court && !rn2(200)) {
 	static const char * const throne_msg[4] = {
+/*JP
 		"the tones of courtly conversation.",
+*/
+	        "上品な話し声を聞いた．",
+/*JP
 		"a sceptre pounded in judgment.",
+*/
+		"裁判で笏を突く音を聞いた．",
+/*JP
 		"Someone shouts \"Off with %s head!\"",
+*/
+		"だれかが「そのものの首を跳ねよ」と叫ぶ声を聞いた．",
+/*JP
 		"Queen Beruthiel's cats!",
+*/
+		"ベルサイユ女王の猫の声を聞いた．",
 	};
 	for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
 	    if (DEADMONSTER(mtmp)) continue;
@@ -111,15 +152,34 @@
     }
     if (level.flags.has_swamp && !rn2(200)) {
 	static const char * const swamp_msg[3] = {
+#if 0 /*JP*/
 		"hear mosquitoes!",
 		"smell marsh gas!",	/* so it's a smell...*/
 		"hear Donald Duck!",
+#else
+		"蚊の羽音を聞いた．",
+		"腐った匂いがした！",	/* so it's a smell...*/
+		"ドナルドダックの声を聞いた！",
+#endif
 	};
+#if 0 /*JP*/
 	You(swamp_msg[rn2(2)+hallu]);
+#else
+	{
+		int c;
+		c = rn2(2)+hallu;
+		if(c == 1){
+			You(swamp_msg[c]);
+		} else {
+			You_hear(swamp_msg[c]);
+		}
+	}
+#endif
 	return;
     }
     if (level.flags.spooky && !rn2(200)) {
 	static const char *spooky_msg[24] = {
+#if 0 /*JP*/
 		"hear screaming in the distance!",
 		"hear a faint whisper: \"Please leave your measurements for your custom-made coffin.\"",
 		"hear a door creak ominously.",
@@ -146,6 +206,35 @@
 		"hear someone singing: \"Jingle bells, jingle bells...\"",
 	};
 	You(spooky_msg[rn2(15)+hallu*9]);
+#else
+		"あなたのすぐそばから悲鳴が聞こえた！",
+		"かすかなささやきが聞こえた：「寸法をとらせて頂けませんか？棺を特注する必要がありまして．」",
+		"ドアが無気味にきしむ音を聞いた．",
+		"ほんの数歩ほど離れた場所から強い息遣いが聞こえてきた！",
+		"暗闇から足を引きずる音が近づいてくるのが聞こえた！",
+		"壁の向こうから苦悶のうめきとうなり声が聞こえてきた！",
+		"あなたのすぐそばで狂ったようなくすくす笑いが聞こえた！",
+		"腐った死体の匂いがする．",
+		"あなたはクロロホルムの匂いをかいだ！",
+		"あなたは氷の様に冷たい手が首筋をなでるのを感じた．",
+		"あなたは幽霊の手があなたの顔をなで回すのを感じた．",
+		"あなたは誰かがあなたの墓の上で踊っているように感じた．",
+		"あなたは誰かが首筋に息を吹きかけているのを感じた．",
+		"あなたは壁が迫ってくるように感じた．",
+		"あ，何か踏んづけた．うわあ，ぐしゃぐしゃだ．．．",	/*"あなたは何かを踏んづけて，ぐしゃっとつぶした．",*/
+		"「そこに行けるのは一人だけだ！」と，力強い声が発せられるのを聞いた．",
+		"あなたの周囲で声が響いた：「警告：自殺シーケンス作動中！」",
+		"義理の母の料理の香りがただよってきた！",
+		"馬の糞の匂いがした．",
+		"誰かが「ハンバーガーご注文された方いらっしゃいますか？」と叫ぶのを聞いた．",
+		"トワイライトゾーンのテーマがかすかに流れているのが聞こえた．",
+		"暴力的な奴が「I'll be back!」とつぶやくのを聞いた．",
+		"どこからか，あなたを応援する声が聞こえた！",
+		"「ジングルベル，ジングルベル．．．」という歌声が聞こえた．",
+	};
+	/* 日本語では "あなたは" の後に "匂い/香りがした" 等を入れる事が難しい事もあり,この際省略*/
+	pline(spooky_msg[rn2(15)+hallu*9]);
+#endif
 	return;
     }
     if (level.flags.has_vault && !rn2(200)) {
@@ -174,19 +263,33 @@
 #endif /* AZTEC_C_WORKAROUND */
 		    {
 			if (gold_in_vault)
+#if 0 /*JP*/
 			    You_hear(!hallu ? "someone counting money." :
 				"the quarterback calling the play.");
+#else
+			    You_hear(!hallu ? "誰かがお金を数えている音を聞いた．" :
+				"クォータバックが指示をする声を聞いた．");
+#endif
 			else
+/*JP
 			    You_hear("someone searching.");
+*/
+			    You_hear("誰かが捜索している音を聞いた．");
 			break;
 		    }
 		    /* fall into... (yes, even for hallucination) */
 		}
 		case 0:
+/*JP
 		    You_hear("the footsteps of a guard on patrol.");
+*/
+		    You_hear("警備員のパトロールする音を聞いた．");
 		    break;
 		case 2:
+/*JP
 		    You_hear("Ebenezer Scrooge!");
+*/
+		    You_hear("こち亀の両さんの声を聞いた！");
 		    break;
 	    }
 	return;
@@ -198,14 +301,25 @@
 		mon_in_room(mtmp, BEEHIVE)) {
 		switch (rn2(2)+hallu) {
 		    case 0:
+/*JP
 			You_hear("a low buzzing.");
+*/
+			You_hear("ぶーんという音を聞いた．");
 			break;
 		    case 1:
+/*JP
 			You_hear("an angry drone.");
+*/
+			You_hear("興奮した雄バチの音を聞いた．");
 			break;
 		    case 2:
+#if 0 /*JP*/
 			You_hear("bees in your %sbonnet!",
 			    uarmh ? "" : "(nonexistent) ");
+#else
+			You_hear("ハチがあなたの帽子%sの中にいる音を聞いた！",
+			    uarmh ? "" : "(被ってないけど)");
+#endif
 			break;
 		}
 		return;
@@ -219,15 +333,28 @@
 		mon_in_room(mtmp, MORGUE)) {
 		switch (rn2(2)+hallu) {
 		    case 0:
+/*JP
 			You("suddenly realize it is unnaturally quiet.");
+*/
+			You("不自然なくらい静かなのに気づいた．");
 			break;
 		    case 1:
+#if 0 /*JP*/
 			pline_The("%s on the back of your %s stands up.",
 				body_part(HAIR), body_part(NECK));
+#else
+			pline("あなたの%sのうしろの%sが逆立った．",
+				body_part(NECK), body_part(HAIR));
+#endif
 			break;
 		    case 2:
+#if 0 /*JP*/
 			pline_The("%s on your %s seems to stand up.",
 				body_part(HAIR), body_part(HEAD));
+#else
+			pline("あなたの%sの%sは逆立った．",
+				body_part(HEAD), body_part(HAIR));
+#endif
 			break;
 		}
 		return;
@@ -236,10 +363,17 @@
     }
     if (level.flags.has_barracks && !rn2(200)) {
 	static const char * const barracks_msg[4] = {
+#if 0 /*JP*/
 		"blades being honed.",
 		"loud snoring.",
 		"dice being thrown.",
 		"General MacArthur!",
+#else
+		"刃物を研ぐ音を聞いた．",
+		"大きないびきを聞いた．",
+		"ダイスが振られる音を聞いた．",
+		"マッカーサー将軍の声を聞いた．",
+#endif
 	};
 	int count = 0;
 
@@ -260,9 +394,15 @@
     }
     if (level.flags.has_zoo && !rn2(200)) {
 	static const char * const zoo_msg[3] = {
+#if 0 /*JP*/
 		"a sound reminiscent of an elephant stepping on a peanut.",
 		"a sound reminiscent of a seal barking.",
 		"Doctor Doolittle!",
+#else
+		"象がピーナッツの上で踊るような音を聞いた．",
+		"アシカが吠えるような音を聞いた．",
+		"ドリトル先生の声を聞いた．",
+#endif
 	};
 	for (mtmp = fmon; mtmp; mtmp = mtmp->nmon) {
 	    if (DEADMONSTER(mtmp)) continue;
@@ -282,9 +422,15 @@
 	if (tended_shop(sroom) &&
 		!index(u.ushops, ROOM_INDEX(sroom) + ROOMOFFSET)) {
 	    static const char * const shop_msg[3] = {
+#if 0 /*JP*/
 		    "someone cursing shoplifters.",
 		    "the chime of a cash register.",
 		    "Neiman and Marcus arguing!",
+#else
+		    "誰かが泥棒をののしる声を聞いた．",
+		    "レジのチーンという音を聞いた．",
+		    "イトーとヨーカドーの議論を聞いた！",
+#endif
 	    };
 	    You_hear(shop_msg[rn2(2)+hallu]);
 	}
@@ -298,11 +444,19 @@
 	/* and don't produce silly effects when she's clearly visible */
 	if (mtmp && (hallu || !canseemon(mtmp))) {
 	    static const char * const ora_msg[5] = {
+#if 0 /*JP*/
 		    "a strange wind.",		/* Jupiter at Dodona */
 		    "convulsive ravings.",	/* Apollo at Delphi */
 		    "snoring snakes.",		/* AEsculapius at Epidaurus */
 		    "someone say \"No more woodchucks!\"",
 		    "a loud ZOT!"		/* both rec.humor.oracle */
+#else
+		"奇妙な風の音を聞いた．",
+		"半狂乱の声を聞いた．",
+		"蛇の咆哮を聞いた．",
+		"誰かが「もうウッドチャックはいらない」と言っている声を聞いた．",
+		"大きなＺＯＴを聞いた！"
+#endif
 	    };
 	    /* KMH -- Give funny messages on Groundhog Day */
 	    if (flags.groundhogday) hallu = 1;
@@ -314,9 +468,15 @@
     if (!Is_blackmarket(&u.uz) && at_dgn_entrance("One-eyed Sam's Market") &&
         !rn2(200)) {
       static const char *blkmar_msg[3] = {
+#if 0 /*JP*/
         "You hear someone complaining about the prices.",
         "Somebody whispers: \"Food rations? Only 900 zorkmids.\"",
         "You feel like searching for more gold.",
+#else
+        "あなたは誰かが値段について愚痴を言っているのを聞いた．",
+        "誰かのささやきが聞こえた：「食糧はたったの金貨900枚だ．」",
+        "あなたは更に多くの金貨を嗅ぎつけたような気がした．",
+#endif
       };
       pline(blkmar_msg[rn2(2)+hallu]);
     }
@@ -327,8 +487,15 @@
 #ifdef OVLB
 
 static const char * const h_sounds[] = {
+#if 0 /*JP*/
     "beep", "boing", "sing", "belche", "creak", "cough", "rattle",
     "ululate", "pop", "jingle", "sniffle", "tinkle", "eep"
+#else
+    "ピーッと鳴いた","騒ぎたてた","歌った","キーキーと鳴いた",
+    "せき込んだ","ゴロゴロ鳴った","ホーホー鳴いた","ポンと鳴いた",
+    "ガランガランと鳴いた","クンクン鳴いた","チリンチリンと鳴いた",
+    "イーッと鳴いた"
+#endif
 };
 
 /* make the sounds of a pet in any level of distress */
@@ -355,8 +522,13 @@
 	panic("strange level of distress");
 
     if (verb) {
+#if 0 /*JP*/
 	pline("%s %s%c", Monnam(mtmp), vtense((char *)0, verb),
 		lev>1?'!':'.');
+#else
+	pline("%sは%s%s", Monnam(mtmp), makeplural(verb),
+		lev>1?"！":"．");
+#endif
 	if (flags.run) nomul(0);
 	wake_nearto(mtmp->mx,mtmp->my,mtmp->data->mlevel*6*lev);
     }
@@ -374,38 +546,71 @@
 	switch (mtmp->data->msound) {
 	case MS_MEW:
 	case MS_HISS:
+/*JP
 	    ret = "hiss";
+*/
+	    ret = "シーッと鳴いた";
 	    break;
 	case MS_BARK:
 	case MS_GROWL:
+/*JP
 	    ret = "growl";
+*/
+	    ret = "はげしく吠えた";
 	    break;
 	case MS_ROAR:
+/*JP
 	    ret = "roar";
+*/
+	    ret = "吠えた";
 	    break;
 	case MS_BUZZ:
+/*JP
 	    ret = "buzz";
+*/
+	    ret = "ブーッと鳴いた";
 	    break;
 	case MS_SQEEK:
+/*JP
 	    ret = "squeal";
+*/
+	    ret = "キーキー鳴いた";
 	    break;
 	case MS_SQAWK:
+/*JP
 	    ret = "screech";
+*/
+	    ret = "金切り声を立てた";
 	    break;
 	case MS_NEIGH:
+/*JP
 	    ret = "neigh";
+*/
+	    ret = "いなないた";
 	    break;
 	case MS_WAIL:
+/*JP
 	    ret = "wail";
+*/
+	    ret = "悲しく鳴いた";
 	    break;
 	case MS_SILENT:
+/*JP
 		ret = "commotion";
+*/
+		ret = "興奮した";
 		break;
 	case MS_PARROT:
+/*JP
 	    ret = "squaark";
+*/
+	    ret = "クァーックと鳴いた";
 	    break;
 	default:
+/*JP
 		ret = "scream";
+*/
+		ret = "金切り声をあげた";
 	}
 	return ret;
 }
@@ -422,23 +627,41 @@
 
     switch(mtmp->data->msound) {
 	case MS_MEW:
+/*JP
 	ret = "yowl";
+*/
+	    ret = "悲しく鳴いた";
 	    break;
 	case MS_BARK:
 	case MS_GROWL:
+/*JP
 	ret = "yelp";
+*/
+	    ret = "キャンキャン鳴いた";
 	    break;
 	case MS_ROAR:
+/*JP
 	ret = "snarl";
+*/
+	    ret = "うなった";
 	    break;
 	case MS_SQEEK:
+/*JP
 	ret = "squeal";
+*/
+	    ret = "キーキー鳴いた";
 	    break;
 	case MS_SQAWK:
+/*JP
 	ret = "screak";
+*/
+	    ret = "金切り声を立てた";
 	    break;
 	case MS_WAIL:
+/*JP
 	ret = "wail";
+*/
+	    ret = "悲しく鳴いた";
 	    break;
     default:
 	ret = (const char*) 0;
@@ -459,13 +682,22 @@
     switch (mtmp->data->msound) {
 	case MS_MEW:
 	case MS_GROWL:
+/*JP
 	ret = "whimper";
+*/
+	    ret = "クンクン鳴いた";
 	    break;
 	case MS_BARK:
+/*JP
 	ret = "whine";
+*/
+	    ret = "クーンと鳴いた";
 	    break;
 	case MS_SQEEK:
+/*JP
 	ret = "squeal";
+*/
+	    ret = "キーキー鳴いた";
 	    break;
     default:
 	ret = (const char *)0;
@@ -488,7 +720,10 @@
     else if (mtmp->data->msound >= MS_HUMANOID) {
 	if (!canspotmon(mtmp))
 	    map_invisible(mtmp->mx, mtmp->my);
+/*JP
 	verbalize("I'm hungry.");
+*/
+	verbalize("はらぺこだ．");
 }
 }
 
@@ -544,17 +779,28 @@
 				       u.umonnum == PM_MIST_WOLF ||
 				       u.umonnum == PM_WINTER_WOLF ||
 	    			       u.umonnum == PM_WINTER_WOLF_CUB));
+#if 0 /*JP*/
 		const char *racenoun = (flags.female && urace.individual.f) ?
 					urace.individual.f : (urace.individual.m) ?
 					urace.individual.m : urace.noun;
+#else
+		const char *racenoun = (flags.female) ? "あなた" : "おまえ" ;
+#endif
 
 		if (mtmp->mtame) {
 			if (kindred) {
+#if 0 /*JP*/
 				Sprintf(verbuf, "Good %s to you Master%s",
 					isnight ? "evening" : "day",
 					isnight ? "!" : ".  Why do we not rest?");
+#else
+				Sprintf(verbuf, "ご主人様，%s%s",
+					isnight ? "こんばんは" : "こんにちは",
+					isnight ? "!" : "．お休みになりませんか？");
+#endif
 				verbl_msg = verbuf;
 		    	} else {
+#if 0 /*JP*/
 		    	    Sprintf(verbuf,"%s%s",
 				nightchild ? "Child of the night, " : "",
 				midnight() ?
@@ -562,36 +808,70 @@
 				isnight ?
 					"I beg you, help me satisfy this growing craving!" :
 					"I find myself growing a little weary.");
+#else
+		    	    Sprintf(verbuf,"%s%s",
+				nightchild ? "夜の仔よ，" : "",
+				midnight() ?
+					"私はこれ以上渇望を抑えられない！" :
+				isnight ?
+					"ふくれあがる渇望を満たすのを助けてくれないか？頼む！" :
+					"私は少々疲れたようだ．");
+#endif
 				verbl_msg = verbuf;
 			}
 		} else if (mtmp->mpeaceful) {
 			if (kindred && isnight) {
+#if 0 /*JP*/
 				Sprintf(verbuf, "Good feeding %s!",
 	    				flags.female ? "sister" : "brother");
+#else
+				Sprintf(verbuf, "よう兄弟！");
+#endif
 				verbl_msg = verbuf;
  			} else if (nightchild && isnight) {
+#if 0 /*JP*/
 				Sprintf(verbuf,
 				    "How nice to hear you, child of the night!");
+#else
+				Sprintf(verbuf,
+				    "夜の仔よ，元気そうだな！");
+#endif
 				verbl_msg = verbuf;
 	    		} else
+/*JP
 		    		verbl_msg = "I only drink... potions.";
+*/
+				verbl_msg = "私は薬．．しか飲まない";
     	        } else {
 			int vampindex;
 	    		static const char * const vampmsg[] = {
 			       /* These first two (0 and 1) are specially handled below */
+#if 0 /*JP*/
 	    			"I vant to suck your %s!",
 	    			"I vill come after %s without regret!",
+#else
+				"お前の%sをよこせ！",
+				"存分に%sを追撃させてもらおう！",
+#endif
 		    	       /* other famous vampire quotes can follow here if desired */
 	    		};
 			if (kindred)
+#if 0 /*JP*/
 			    verbl_msg = "This is my hunting ground that you dare to prowl!";
+#else
+			    verbl_msg = "おまえがうろついているこのあたりは私の狩場だ！";
+#endif
 			else if (youmonst.data == &mons[PM_SILVER_DRAGON] ||
 				 youmonst.data == &mons[PM_BABY_SILVER_DRAGON]) {
 			    /* Silver dragons are silver in color, not made of silver */
+#if 0 /*JP*/
 			    Sprintf(verbuf, "%s! Your silver sheen does not frighten me!",
 					youmonst.data == &mons[PM_SILVER_DRAGON] ?
 					"Fool" : "Young Fool");
 			    verbl_msg = verbuf; 
+#else
+			    verbl_msg = "ばかめ！おまえの銀の輝きなど怖くないぞ！";
+#endif
 			} else {
 			    vampindex = rn2(SIZE(vampmsg));
 			    if (vampindex == 0) {
@@ -599,7 +879,11 @@
 	    			verbl_msg = verbuf;
 			    } else if (vampindex == 1) {
 				Sprintf(verbuf, vampmsg[vampindex],
+#if 0 /*JP*/
 					Upolyd ? an(mons[u.umonnum].mname) : an(racenoun));
+#else
+					Upolyd ? jtrns_mon(mons[u.umonnum].mname) : racenoun);
+#endif
 	    			verbl_msg = verbuf;
 		    	    } else
 			    	verbl_msg = vampmsg[vampindex];
@@ -609,169 +893,322 @@
 	    break;
 	case MS_WERE:
 	    if (flags.moonphase == FULL_MOON && (night() ^ !rn2(13))) {
+#if 0 /*JP*/
 		pline("%s throws back %s head and lets out a blood curdling %s!",
 		      Monnam(mtmp), mhis(mtmp),
 		      ptr == &mons[PM_HUMAN_WERERAT] ? "shriek" : "howl");
+#else
+		pline("%sは頭をのけぞらし背筋が凍るような%sをあげた！",
+		      Monnam(mtmp),
+		      ptr == &mons[PM_HUMAN_WERERAT] ? "金切り声" : "咆哮");
+#endif
 		wake_nearto(mtmp->mx, mtmp->my, 11*11);
 	    } else
 		pline_msg =
+/*JP
 		     "whispers inaudibly.  All you can make out is \"moon\".";
+*/
+		     "聞きとれないような声でささやいた．かろうじて『月』という言葉だけが聞きとれた．";
 	    break;
 	case MS_BARK:
 	    if (flags.moonphase == FULL_MOON && night()) {
+/*JP
 		pline_msg = "howls.";
+*/
+		pline_msg = "吠えた．";
 	    } else if (mtmp->mpeaceful) {
 		if (mtmp->mtame &&
 			(mtmp->mconf || mtmp->mflee || mtmp->mtrapped ||
 			 moves > EDOG(mtmp)->hungrytime || mtmp->mtame < 5))
+/*JP
 		    pline_msg = "whines.";
+*/
+		    pline_msg = "クンクン鳴いた．";
 		else if (mtmp->mtame && EDOG(mtmp)->hungrytime > moves + 1000)
+/*JP
 		    pline_msg = "yips.";
+*/
+		    pline_msg = "キャンキャン鳴いた．";
 		else {
 		    if (mtmp->data != &mons[PM_DINGO])	/* dingos do not actually bark */
+/*JP
 			    pline_msg = "barks.";
+*/
+			    pline_msg = "ワンワン吠えた．";
 		}
 	    } else {
+/*JP
 		pline_msg = "growls.";
+*/
+		pline_msg = "激しく吠えた．";
 	    }
 	    break;
 	case MS_MEW:
 	    if (mtmp->mtame) {
 		if (mtmp->mconf || mtmp->mflee || mtmp->mtrapped ||
 			mtmp->mtame < 5)
+/*JP
 		    pline_msg = "yowls.";
+*/
+		    pline_msg = "悲しく鳴いた．";
 		else if (moves > EDOG(mtmp)->hungrytime)
+/*JP
 		    pline_msg = "meows.";
+*/
+		    pline_msg = "ニャーンと鳴いた．";
 		else if (EDOG(mtmp)->hungrytime > moves + 1000)
+/*JP
 		    pline_msg = "purrs.";
+*/
+		    pline_msg = "ゴロゴロと鳴いた．";
 		else
+/*JP
 		    pline_msg = "mews.";
+*/
+		    pline_msg = "ニャーニャー鳴いた．";
 		break;
 	    } /* else FALLTHRU */
 	case MS_GROWL:
+/*JP
 	    pline_msg = mtmp->mpeaceful ? "snarls." : "growls!";
+*/
+	    pline_msg = mtmp->mpeaceful ? "うなった．" : "激しく吠えた．";
 	    break;
 	case MS_ROAR:
+/*JP
 	    pline_msg = mtmp->mpeaceful ? "snarls." : "roars!";
+*/
+	    pline_msg = mtmp->mpeaceful ? "うなった．" : "とても激しく吠えた．";
 	    break;
 	case MS_SQEEK:
+/*JP
 	    pline_msg = "squeaks.";
+*/
+	    pline_msg = "キーキー鳴いた．";
 	    break;
 	case MS_PARROT:
 	    switch (rn2(8)) {
 		default:
 		case 0:
+/*JP
 		    pline_msg = "squaarks louldly!";
+*/
+		    pline_msg = "うるさく鳴いた！";
 		    break;
 		case 1:
+/*JP
 		    pline_msg = "says 'Polly want a lembas wafer!'";
+*/
+		    pline_msg = "「ポリーはレンバスが欲しい！」と言った．";
 		    break;
 		case 2:
+/*JP
 		    pline_msg = "says 'Nobody expects the Spanish Inquisition!'";
+*/
+		    pline_msg = "「スペインの宗教裁判からは誰も逃れられない」と言った．";
 		    break;
 		case 3:
+/*JP
 		    pline_msg = "says 'Who's a good boy, then?'";
+*/
+		    pline_msg = "「いい子にしてたかな？」と言った．";
 		    break;
 		case 4:
+/*JP
 		    pline_msg = "says 'Show us yer knickers!'";
+*/
+			/*スラングか？*/
+		    pline_msg = "「ブルマーを見せな！」と言った．";
 		    break;
 		case 5:
+/*JP
 		    pline_msg = "says 'You'll never make it!'";
+*/
+		    pline_msg = "「お前には出来ない！」と言った．";
 		    break;
 		case 6:
+/*JP
 		    pline_msg = "whistles suggestively!";
+*/
+		    pline_msg = "ピーッと暗示的な鳴き声をあげた！";
 		    break;
 		case 7:
+/*JP
 		    pline_msg = "says 'What sort of a sword do you call that!'";
+*/
+		    pline_msg = "「どんな種類の剣を呼ぶつもりだ！」と言った．";
 		    break;
 	    }
 	    break;
 	case MS_SQAWK:
 	    if (ptr == &mons[PM_RAVEN] && !mtmp->mpeaceful)
+/*JP
 	    	verbl_msg = "Nevermore!";
+*/
+	    	verbl_msg = "くたばれ！";
 	    else
+/*JP
 	    	pline_msg = "squawks.";
+*/
+		pline_msg = "キーキー鳴いた．";
 	    break;
 	case MS_HISS:
 	    if (!mtmp->mpeaceful)
+/*JP
 		pline_msg = "hisses!";
+*/
+		pline_msg = "シーッと鳴いた！";
 	    else return 0;	/* no sound */
 	    break;
 	case MS_BUZZ:
+/*JP
 	    pline_msg = mtmp->mpeaceful ? "drones." : "buzzes angrily.";
+*/
+	    pline_msg = mtmp->mpeaceful ? "ぶーんと鳴った．" : "ぶんぶん鳴った．";
 	    break;
 	case MS_GRUNT:
+/*JP
 	    pline_msg = "grunts.";
+*/
+	    pline_msg = "ぶーぶー鳴いた．";
 	    break;
 	case MS_NEIGH:
 	    if (mtmp->mtame < 5)
+/*JP
 		pline_msg = "neighs.";
+*/
+		pline_msg = "いなないた．";
 	    else if (moves > EDOG(mtmp)->hungrytime)
+/*JP
 		pline_msg = "whinnies.";
+*/
+		pline_msg = "ヒヒーンと鳴いた．";
 	    else
+/*JP
 		pline_msg = "whickers.";
+*/
+		pline_msg = "ヒヒヒーンと鳴いた．";
 	    break;
 	case MS_WAIL:
+/*JP
 	    pline_msg = "wails mournfully.";
+*/
+	    pline_msg = "悲しげに鳴いた．";
 	    break;
 	case MS_GURGLE:
+/*JP
 	    pline_msg = "gurgles.";
+*/
+	    pline_msg = "ごろごろ喉を鳴らした．";
 	    break;
 	case MS_BURBLE:
+/*JP
 	    pline_msg = "burbles.";
+*/
+	    pline_msg = "ぺちゃくちゃしゃべった．";
 	    break;
 	case MS_SHRIEK:
+/*JP
 	    pline_msg = "shrieks.";
+*/
+	    pline_msg = "金切り声をあげた．";
 	    aggravate();
 	    break;
 	case MS_IMITATE:
+/*JP
 	    pline_msg = "imitates you.";
+*/
+	    pline_msg = "あなたの真似をした．";
 	    break;
 	case MS_SHEEP:
+/*JP
 	    pline_msg = "baaaas.";
+*/
+	    pline_msg = "メェ〜と鳴いた．";
 	    break;
 	case MS_CHICKEN:
+/*JP
 	    pline_msg = "clucks.";
+*/
+	    pline_msg = "コッコッと鳴いた．";
 	    break;
 	case MS_COW:
+/*JP
 	    pline_msg = "bellows.";
+*/
+	    pline_msg = "モーッと鳴いた．";
 	    break;
 	case MS_BONES:
+/*JP
 	    pline("%s rattles noisily.", Monnam(mtmp));
+*/
+	    pline("%sはガタガタと騒ぎだした．",Monnam(mtmp));
+/*JP
 	    You("freeze for a moment.");
+*/
+	    You("しばらく動けない．");
 	    nomul(-2);
 	    nomovemsg = 0;
 	    break;
 	case MS_LAUGH:
 	    {
 		static const char * const laugh_msg[4] = {
+/*JP
 		    "giggles.", "chuckles.", "snickers.", "laughs.",
+*/
+		    "くすくす笑った．", "くすっすと笑った．", "ばかにしたように笑った．", "笑った．",
 		};
 		pline_msg = laugh_msg[rn2(4)];
 	    }
 	    break;
 	case MS_MUMBLE:
+/*JP
 	    pline_msg = "mumbles incomprehensibly.";
+*/
+	    pline_msg = "不可解な言葉をつぶやいた．";
 	    break;
 	case MS_DJINNI:
 	    if (mtmp->mtame) {
+/*JP
 		verbl_msg = "Sorry, I'm all out of wishes.";
+*/
+		verbl_msg = "私を助けてくれたことを感謝する！";
 	    } else if (mtmp->mpeaceful) {
 		if (ptr == &mons[PM_WATER_DEMON])
+/*JP
 		    pline_msg = "gurgles.";
+*/
+		    pline_msg = "ゴボゴボゴボゴボ．";
 		else
+/*JP
 		    verbl_msg = "I'm free!";
+*/
+		    verbl_msg = "やっと自由になった！";
+/*JP
 	    } else verbl_msg = "This will teach you not to disturb me!";
+*/
+	    } else verbl_msg = "じゃまをしないでくれ！";
 	    break;
 	case MS_BOAST:	/* giants */
 	    if (!mtmp->mpeaceful) {
 		switch (rn2(4)) {
+#if 0 /*JP*/
 		case 0: pline("%s boasts about %s gem collection.",
 			      Monnam(mtmp), mhis(mtmp));
+#else
+		case 0: pline("%sは自分の宝石のコレクションを自慢した．",
+			      Monnam(mtmp));
+#endif
 			break;
+/*JP
 		case 1: pline_msg = "complains about a diet of mutton.";
+*/
+		case 1: pline_msg = "羊の食事についての不満を述べた．";
 			break;
+/*JP
 	       default: pline_msg = "shouts \"Fee Fie Foe Foo!\" and guffaws.";
+*/
+	       default: pline_msg = "『わっはっはっは！』とばか笑いした．";
 			wake_nearto(mtmp->mx, mtmp->my, 7*7);
 			break;
 		}
@@ -787,53 +1224,104 @@
 	    }
 	    /* Generic peaceful humanoid behaviour. */
 	    if (mtmp->mflee)
+/*JP
 		pline_msg = "wants nothing to do with you.";
+*/
+		pline_msg = "あなたと関係を持ちたくないようだ．";
 	    else if (mtmp->mhp < mtmp->mhpmax/4)
+/*JP
 		pline_msg = "moans.";
+*/
+		pline_msg = "うめき声をあげた．";
 	    else if (mtmp->mconf || mtmp->mstun)
+/*JP
 		verbl_msg = !rn2(3) ? "Huh?" : rn2(2) ? "What?" : "Eh?";
+*/
+		verbl_msg = !rn2(3) ? "へ？" : rn2(2) ? "何？" : "え？";
 	    else if (!mtmp->mcansee)
+/*JP
 		verbl_msg = "I can't see!";
+*/
+		verbl_msg = "何も見えない！";
 	    else if (mtmp->mtrapped) {
 		struct trap *t = t_at(mtmp->mx, mtmp->my);
 
 		if (t) t->tseen = 1;
+/*JP
 		verbl_msg = "I'm trapped!";
+*/
+	        verbl_msg = "罠にはまってしまった！";
 	    } else if (mtmp->mhp < mtmp->mhpmax/2)
+/*JP
 		pline_msg = "asks for a potion of healing.";
+*/
+		pline_msg = "回復の薬を持ってないか尋ねた．";
 	    else if (mtmp->mtame && !mtmp->isminion &&
 						moves > EDOG(mtmp)->hungrytime)
+/*JP
 		verbl_msg = "I'm hungry.";
+*/
+		verbl_msg = "腹が減ったな．";
 	    /* Specific monsters' interests */
 	    else if (is_elf(ptr))
+/*JP
 		pline_msg = "curses orcs.";
+*/
+		pline_msg = "オークを呪った．";
 	    else if (is_dwarf(ptr))
+/*JP
 		pline_msg = "talks about mining.";
+*/
+		pline_msg = "採掘について話した．";
 	    else if (likes_magic(ptr))
+/*JP
 		pline_msg = "talks about spellcraft.";
+*/
+		pline_msg = "魔力について話した．";
 	    else if (ptr->mlet == S_CENTAUR)
+/*JP
 		pline_msg = "discusses hunting.";
+*/
+		pline_msg = "猟について議論した．";
 	    else switch (monsndx(ptr)) {
 		case PM_HOBBIT:
 		    pline_msg = (mtmp->mhpmax - mtmp->mhp >= 10) ?
+#if 0 /*JP*/
 				"complains about unpleasant dungeon conditions."
 				: "asks you about the One Ring.";
+#else
+				"不愉快な迷宮の状態について不満を述べた．"
+				: "「一つの指輪」について尋ねた．";
+#endif
 		    break;
 #if 0	/* OBSOLETE */
 		case PM_FARMER_MAGGOT:
+#if 0 /*JP*/
 			pline_msg = "mumbles something about Morgoth.";
+#else
+			pline_msg = "冥王『モルゴス』についてつぶやいた．";
+#endif
 			break;
 #endif
 		case PM_ARCHEOLOGIST:
+/*JP
     pline_msg = "describes a recent article in \"Spelunker Today\" magazine.";
+*/
+		    pline_msg = "「日刊洞窟」の最新の記事を執筆している．";
 		    break;
 #ifdef TOURIST
 		case PM_TOURIST:
+/*JP
 		    verbl_msg = "Aloha.";
+*/
+		    verbl_msg = "アローハ．";
 		    break;
 #endif
 		default:
+/*JP
 		    pline_msg = "discusses dungeon exploration.";
+*/
+		    pline_msg = "迷宮探検について議論した．";
 		    break;
 	    }
 	    break;
@@ -850,25 +1338,56 @@
 #endif
 	    {
 		case 2:
+#if 0 /*JP*/
 			verbl_msg = "Hello, sailor.";
+#else
+			switch(poly_gender()){
+			case 0:	      
+			  verbl_msg = "こんにちは．あらいい男ね．";
+			break;
+			case 1:
+			  verbl_msg = "こんにちは，お嬢さん．";
+			  break;
+			default:
+			  verbl_msg = "こんにちは．";
+			  break;
+			}
+#endif
 			break;
 		case 1:
+/*JP
 			pline_msg = "comes on to you.";
+*/
+			pline_msg = "あなたのほうへやってきた．";
 			break;
 		default:
+/*JP
 			pline_msg = "cajoles you.";
+*/
+			pline_msg = "あなたをおだてた．";
 	    }
 	    break;
 #ifdef KOPS
 	case MS_ARREST:
 	    if (mtmp->mpeaceful)
+#if 0 /*JP*/
 		verbalize("Just the facts, %s.",
 		      flags.female ? "Ma'am" : "Sir");
+#else
+		verbalize("これが現実だよ%s．",
+		      flags.female ? "お嬢さん" : "きみ");
+#endif
 	    else {
 		static const char * const arrest_msg[3] = {
+#if 0 /*JP*/
 		    "Anything you say can be used against you.",
 		    "You're under arrest!",
 		    "Stop in the name of the Law!",
+#else
+		    "おまえの言うことはおまえにとって不利な証拠となることがある！",
+		    "おまえを逮捕する！",
+		    "法の名のもと直ちに中止せよ！",
+#endif
 		};
 		verbl_msg = arrest_msg[rn2(3)];
 	    }
@@ -892,22 +1411,39 @@
 		/* fall through */
 	case MS_SPELL:
 	    /* deliberately vague, since it's not actually casting any spell */
+/*JP
 	    pline_msg = "seems to mutter a cantrip.";
+*/
+	    pline_msg = "ぶつぶつとつぶやいている．";
 	    break;
 	case MS_NURSE:
 	    if (uwep && (uwep->oclass == WEAPON_CLASS || is_weptool(uwep))
 		|| (u.twoweap && uswapwep && (uswapwep->oclass == WEAPON_CLASS
 		|| is_weptool(uswapwep))))
+/*JP
 		verbl_msg = "Put that weapon away before you hurt someone!";
+*/
+		verbl_msg = "武器をおさめなさい！それは人を傷つけるものよ！";
 	    else if (uarmc || uarm || uarmh || uarms || uarmg || uarmf)
 		verbl_msg = Role_if(PM_HEALER) ?
+#if 0 /*JP*/
 			  "Doc, I can't help you unless you cooperate." :
 			  "Please undress so I can examine you.";
+#else
+			  "先生，あなたの協力なしではどうしようもありませんわ．" :
+			  "服を脱いでください．あなたを診察しますわ．";
+#endif
 #ifdef TOURIST
 	    else if (uarmu)
+/*JP
 		verbl_msg = "Take off your shirt, please.";
+*/
+		verbl_msg = "シャツを脱いでください．";
 #endif
+/*JP
 	    else verbl_msg = "Relax, this won't hurt a bit.";
+*/
+	    else verbl_msg = "おちついて．ちっとも痛くないわよ．";
 	    break;
 	case MS_GUARD:
 #ifndef GOLDOBJ
@@ -915,20 +1451,38 @@
 #else
 	    if (money_cnt(invent))
 #endif
+/*JP
 		verbl_msg = "Please drop that gold and follow me.";
+*/
+		verbl_msg = "金を置いてついてきてください．";
 	    else
+/*JP
 		verbl_msg = "Please follow me.";
+*/
+		verbl_msg = "ついてきてください．";
 	    break;
 	case MS_SOLDIER:
 	    {
 		static const char * const soldier_foe_msg[3] = {
+#if 0 /*JP*/
 		    "Resistance is useless!",
 		    "You're dog meat!",
 		    "Surrender!",
+#else
+		    "抵抗しても無駄だ！",
+		    "犬に喰われちまえ！",
+		    "降伏しろ！",
+#endif
 		},		  * const soldier_pax_msg[3] = {
+#if 0 /*JP*/
 		    "What lousy pay we're getting here!",
 		    "The food's not fit for Orcs!",
 		    "My feet hurt, I've been on them all day!",
+#else
+		    "なんて金払いが悪いんだ！",
+		    "なんだい？オークでも喰えねぇぜ！",
+		    "足を怪我した，ずっとこの調子だ！",
+#endif
 		};
 		verbl_msg = mtmp->mpeaceful ? soldier_pax_msg[rn2(3)]
 					    : soldier_foe_msg[rn2(3)];
@@ -936,12 +1490,21 @@
 	    break;
 	case MS_RIDER:
 	    if (ptr == &mons[PM_DEATH] && !rn2(10))
+/*JP
 		pline_msg = "is busy reading a copy of Sandman #8.";
+*/
+		pline_msg = "Sandmanの8章を読むのに忙しい．";
+/*JP
 	    else verbl_msg = "Who do you think you are, War?";
+*/
+	    else verbl_msg = "自分が何者か考えたことがあるか，ウォーよ？";
 	    break;
     }
 
+/*JP
     if (pline_msg) pline("%s %s", Monnam(mtmp), pline_msg);
+*/
+    if (pline_msg) pline("%sは%s", Monnam(mtmp), pline_msg);
     else if (verbl_msg) verbalize(verbl_msg);
     return(1);
 }
@@ -966,19 +1529,31 @@
     struct obj *otmp;
 
     if (is_silent(youmonst.data)) {
+/*JP
 	pline("As %s, you cannot speak.", an(youmonst.data->mname));
+*/
+	pline("あなたは%sなので，話すことができない．", jtrns_mon_gen(youmonst.data->mname, flags.female));
 	return(0);
     }
     if (Strangled) {
+/*JP
 	You_cant("speak.  You're choking!");
+*/
+	You("話せない．あなたは首を絞められている！");
 	return(0);
     }
     if (u.uswallow) {
+/*JP
 	pline("They won't hear you out there.");
+*/
+	You("外へ向って話をしたが，誰も聞きいれなかった．");
 	return(0);
     }
     if (Underwater) {
+/*JP
 	Your("speech is unintelligible underwater.");
+*/
+	pline("水面下では，あなたの話はろくに理解されない．");
 	return(0);
     }
 
@@ -994,7 +1569,10 @@
 	return(1);
     }
 
+/*JP
     if (!getdir("Talk to whom? (in what direction)")) {
+*/
+    if (!getdir("誰と話しますか？[方向を入れてね]")) {
 	/* decided not to chat */
 	return(0);
     }
@@ -1004,7 +1582,10 @@
 	return (domonnoise(u.usteed));
 #endif
     if (u.dz) {
+/*JP
 	pline("They won't hear you %s there.", u.dz < 0 ? "up" : "down");
+*/
+	pline("%s向って話をしても意味がない．", u.dz < 0 ? "上へ" : "下へ");
 	return(0);
     }
 
@@ -1018,7 +1599,10 @@
 	    return(1);
 	}
 */
+/*JP
 	pline("Talking to yourself is a bad habit for a dungeoneer.");
+*/
+	pline("迷宮探検者にとって一人言は悪い癖だ．");
 	return(0);
     }
 
@@ -1035,7 +1619,10 @@
 	/* If it is unseen, the player can't tell the difference between
 	   not noticing him and just not existing, so skip the message. */
 	if (canspotmon(mtmp))
+/*JP
 	    pline("%s seems not to notice you.", Monnam(mtmp));
+*/
+	    pline("%sはあなたに気がついていないようだ．", Monnam(mtmp));
 	return(0);
     }
 
@@ -1045,7 +1632,10 @@
     if (mtmp->mtame && mtmp->meating) {
 	if (!canspotmon(mtmp))
 	    map_invisible(mtmp->mx, mtmp->my);
+/*JP
 	pline("%s is eating noisily.", Monnam(mtmp));
+*/
+	pline("%sはバリバリと物を食べている．", Monnam(mtmp));
 	return (0);
     }
 
diff -aurN slashem-0.0.7E6F2/src/spell.c jslashem-0.0.7E6F2-J0.0.8/src/spell.c
--- slashem-0.0.7E6F2/src/spell.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/spell.c	2004-07-15 23:22:54.000000000 +0900
@@ -2,6 +2,14 @@
 /*	Copyright (c) M. Stephenson 1988			  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Masaki Miyaso, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "edog.h"
 
@@ -107,7 +115,9 @@
 #define uarmfbon 2 /* All metal interferes to some degree */
 
 /* since the spellbook itself doesn't blow up, don't say just "explodes" */
+#if 0 /*JP*/
 static const char explodes[] = "radiates explosive energy";
+#endif
 
 /* convert an alnum into a number in the range 0..61, or -1 if not an alnum */
 STATIC_OVL int
@@ -134,11 +144,17 @@
 
 	switch(rn2(lev)) {
 	case 0:
+/*JP
 		You_feel("a wrenching sensation.");
+*/
+		You("ねじられたような感覚を感じた．");
 		tele();		/* teleport him */
 		break;
 	case 1:
+/*JP
 		You_feel("threatened.");
+*/
+		You("おどされているような気がした．");
 		aggravate();
 		break;
 	case 2:
@@ -149,44 +165,82 @@
 		take_gold();
 		break;
 	case 4:
+/*JP
 		pline("These runes were just too much to comprehend.");
+*/
+		pline("このルーン文字を理解するのは困難だ．");
 		make_confused(HConfusion + rn1(7,16),FALSE);
 		break;
 	case 5:
+/*JP
 		pline_The("book was coated with contact poison!");
+*/
+		pline("この本は接触型の毒で覆われている！");
 		if (uarmg) {
 		    if (uarmg->oerodeproof || !is_corrodeable(uarmg)) {
+/*JP
 			Your("gloves seem unaffected.");
+*/
+			pline("小手は影響を受けなかったようだ．");
 		    } else if (uarmg->oeroded2 < MAX_ERODE) {
 			if (uarmg->greased) {
+/*JP
 			    grease_protect(uarmg, "gloves", &youmonst);
+*/
+			    grease_protect(uarmg, "小手", &youmonst);
 			} else {
+#if 0 /*JP*/
 			    Your("gloves corrode%s!",
 				 uarmg->oeroded2+1 == MAX_ERODE ?
 				 " completely" : uarmg->oeroded2 ?
 				 " further" : "");
+#else
+			    pline("小手は%s腐食した！",
+				  uarmg->oeroded2+1 == MAX_ERODE ?
+				  "完全に" : uarmg->oeroded2 ?
+				  "さらに" : "");
+#endif
 			    uarmg->oeroded2++;
 			}
 		    } else
+#if 0 /*JP*/
 			Your("gloves %s completely corroded.",
 			     Blind ? "feel" : "look");
+#else
+			pline("小手は完全に腐食した%s．",
+			     Blind ? "ようだ" : "ように見える");
+#endif
 		    break;
 		}
 		/* temp disable in_use; death should not destroy the book */
 		bp->in_use = FALSE;
 		losestr(Poison_resistance ? rn1(2,1) : rn1(4,3));
 		losehp(rnd(Poison_resistance ? 6 : 10),
+/*JP
 		       "contact-poisoned spellbook", KILLED_BY_AN);
+*/
+		       "接触毒の魔法書で", KILLED_BY_AN);
 		bp->in_use = TRUE;
 		break;
 	case 6:
 		if(Antimagic) {
 		    shieldeff(u.ux, u.uy);
+/*JP
 		    pline_The("book %s, but you are unharmed!", explodes);
+*/
+		    pline("本は強力なエネルギーを放出した，しかしあなたは傷つかない！");
 		} else {
+#if 0 /*JP*/
 		    pline("As you read the book, it %s in your %s!",
 			  explodes, body_part(FACE));
+#else
+		    pline("本は強力なエネルギーをあなたの%sに放出した！",
+			  body_part(FACE));
+#endif
+/*JP
 		    losehp(2*rnd(10)+5, "exploding rune", KILLED_BY_AN);
+*/
+		    losehp(2*rnd(10)+5, "強力なルーン文字のエネルギーで", KILLED_BY_AN);
 		}
 		return TRUE;
 	default:
@@ -206,9 +260,15 @@
 	if (!rn2(3) && spellbook->otyp != SPE_BOOK_OF_THE_DEAD) {
 	    spellbook->in_use = TRUE;	/* in case called from learn */
 	    pline(
+/*JP
 	"Being confused you have difficulties in controlling your actions.");
+*/
+	  "混乱しているので，そういうことをするのは難しい．");
 	    display_nhwindow(WIN_MESSAGE, FALSE);
+/*JP
 	    You("accidentally tear the spellbook to pieces.");
+*/
+	    You("うっかり，魔法書を引きさいてしまった．");
 	    if (!objects[spellbook->otyp].oc_name_known &&
 		!objects[spellbook->otyp].oc_uname)
 		docall(spellbook);
@@ -216,8 +276,13 @@
 	    else useupf(spellbook, 1L);
 	    gone = TRUE;
 	} else {
+#if 0 /*JP*/
 	    You("find yourself reading the %s line over and over again.",
 		spellbook == book ? "next" : "first");
+#else
+	    You("%sの行を何度も繰り返して読んでいた．",
+		spellbook == book ? "次" : "最初");
+#endif
 	}
 	return gone;
 }
@@ -230,7 +295,10 @@
     struct monst *mtmp, *mtmp2;
     coord mm;
 
+/*JP
     You("turn the pages of the Book of the Dead...");
+*/
+    You("死者の書のページをめくった．．．");
     makeknown(SPE_BOOK_OF_THE_DEAD);
     /* KMH -- Need ->known to avoid "_a_ Book of the Dead" */
     book2->known = 1;
@@ -240,14 +308,26 @@
 			 arti_cursed = FALSE;
 
 	if(book2->cursed) {
+/*JP
 	    pline_The("runes appear scrambled.  You can't read them!");
+*/
+	    pline("ルーン文字はごちゃまぜになっており，読むことができなかった！");
 	    return;
 	}
 
 	if(!u.uhave.bell || !u.uhave.menorah) {
+/*JP
 	    pline("A chill runs down your %s.", body_part(SPINE));
+*/
+	    pline("寒けがあなたの%sを走った．", body_part(SPINE));
+/*JP
 	    if(!u.uhave.bell) You_hear("a faint chime...");
+*/
+	    if(!u.uhave.bell) You_hear("かすかなベルの音を聞いた．．．");
+/*JP
 	    if(!u.uhave.menorah) pline("Vlad's doppelganger is amused.");
+*/
+	    if(!u.uhave.menorah) pline("ヴラドの生霊は笑った．");
 	    return;
 	}
 
@@ -265,8 +345,13 @@
 	}
 
 	if(arti_cursed) {
+#if 0 /*JP*/
 	    pline_The("invocation fails!");
 	    pline("At least one of your artifacts is cursed...");
+#else
+	    pline("特殊能力は発揮されなかった！");
+	    pline("少なくともあなたの聖器のひとつが呪われている．．．");
+#endif
 	} else if(arti1_primed && arti2_primed) {
 	    unsigned soon = (unsigned) d(2,6);	/* time til next intervene() */
 
@@ -278,7 +363,10 @@
 	    u.uevent.udemigod = 1;	/* wizdead() */
 	    if (!u.udg_cnt || u.udg_cnt > soon) u.udg_cnt = soon;
 	} else {	/* at least one artifact not prepared properly */
+/*JP
 	    You("have a feeling that %s is amiss...", something);
+*/
+	    You("何かが間違っているような気がした．．．");
 	    goto raise_dead;
 	}
 	return;
@@ -288,7 +376,10 @@
     if (book2->cursed) {
 raise_dead:
 
+/*JP
 	You("raised the dead!");
+*/
+	You("死者を蘇らせた！");
 	/* first maybe place a dangerous adversary */
 	if (!rn2(3) && ((mtmp = makemon(&mons[PM_MASTER_LICH],
 					u.ux, u.uy, NO_MINVENT)) != 0 ||
@@ -323,13 +414,22 @@
     } else {
 	switch(rn2(3)) {
 	case 0:
+/*JP
 	    Your("ancestors are annoyed with you!");
+*/
+	    Your("先祖はあなたが嫌いなようだ！");
 	    break;
 	case 1:
+/*JP
 	    pline_The("headstones in the cemetery begin to move!");
+*/
+	    pline("墓地の墓石が動きはじめた！");
 	    break;
 	default:
+/*JP
 	    pline("Oh my!  Your name appears in the book!");
+*/
+	    pline("なんてこったい！あなたの名前が本に書いてある！");
 	}
     }
     return;
@@ -371,16 +471,28 @@
 	    return(0);
 	}
 
+#if 0 /*JP*/
 	Sprintf(splname, objects[booktype].oc_name_known ?
 			"\"%s\"" : "the \"%s\" spell",
 		OBJ_NAME(objects[booktype]));
+#else
+	Sprintf(splname, objects[booktype].oc_name_known ?
+			"\"%s\"" : "\"%s\"",
+		jtrns_obj('+', OBJ_NAME(objects[booktype])));
+#endif
 	for (i = 0; i < MAXSPELL; i++)  {
 		if (spellid(i) == booktype)  {
 			if (book->spestudied > MAX_SPELL_STUDY) {
+/*JP
 			    pline("This spellbook is too faint to be read anymore.");
+*/
+			    pline("この魔法書の文字は薄すぎてこれ以上読めない．");
 			    book->otyp = booktype = SPE_BLANK_PAPER;
 			} else if (spellknow(i) <= MAX_CAN_STUDY) {
+/*JP
 			    Your("knowledge of that spell is keener.");
+*/
+			    Your("%sに対する知識はさらに研ぎすまされた．", splname);
 			    incrnknow(i);
 			    book->spestudied++;
 			    if (end_delay) {
@@ -391,7 +503,10 @@
 			    }
 			    exercise(A_WIS, TRUE);      /* extra study */
 			} else { /* MAX_CAN_STUDY < spellknow(i) <= MAX_SPELL_STUDY */
+/*JP
 			    You("know %s quite well already.", splname);
+*/
+			    You("すでに%sを熟知している．", splname);
 			    costly = FALSE;
 			}
 			/* make book become known even when spell is already
@@ -403,9 +518,14 @@
 			spl_book[i].sp_lev = objects[booktype].oc_level;
 			incrnknow(i);
 			book->spestudied++;
+#if 0 /*JP*/
 			You("have keen knowledge of the spell.");
 			You(i > 0 ? "add %s to your repertoire." : "learn %s.",
 			    splname);
+#else
+			You("呪文に関する強烈な知識を得た．");
+			You(i > 0 ? "%sをレパートリーに加えた．" : "%sを習得した．", splname);
+#endif
 			makeknown((int)booktype);
 			break;
 		}
@@ -437,19 +557,30 @@
 		    /* handle the sequence: start reading, get interrupted,
 		       have book become erased somehow, resume reading it */
 		    booktype != SPE_BLANK_PAPER) {
+/*JP
 		You("continue your efforts to memorize the spell.");
+*/
+		You("魔法の学習を再開した．");
 	} else {
 		/* KMH -- Simplified this code */
 		if (booktype == SPE_BLANK_PAPER) {
+/*JP
 			pline("This spellbook is all blank.");
+*/
+			pline("この魔法書は真っ白だ．");
 			makeknown(booktype);
 			return(1);
 		}
 		if (spellbook->spe && confused) {
 		    check_unpaid_usage(spellbook, TRUE);
 		    consume_obj_charge(spellbook, FALSE);
+#if 0 /*JP*/
 		    pline_The("words on the page seem to glow faintly purple.");
 		    You_cant("quite make them out.");
+#else
+		    pline_The("そのページに書かれている言葉は，うっすらと紫色に光っているように見える．");
+		    You("それらは全く理解することができなかった．");
+#endif
 		    return 1;
 		}
 
@@ -493,8 +624,13 @@
 			    !confused && !spellbook->spe) {
 			    char qbuf[QBUFSZ];
 			    Sprintf(qbuf,
+#if 0 /*JP*/
 		      "This spellbook is %sdifficult to comprehend. Continue?",
 				    (read_ability < 12 ? "very " : ""));
+#else
+		      "この魔法書を理解するのは%s困難だ．続けますか？",
+					(read_ability < 12 ? "とても" : ""));
+#endif
 			    if (yn(qbuf) != 'y') {
 				spellbook->in_use = FALSE;
 				return(1);
@@ -513,7 +649,10 @@
 		    nomul(delay);			/* study time */
 		    delay = 0;
 		    if(gone || !rn2(3)) {
+/*JP
 			if (!gone) pline_The("spellbook crumbles to dust!");
+*/
+			if (!gone) pline("魔法書は塵となった！");
 			if (!objects[spellbook->otyp].oc_name_known &&
 				!objects[spellbook->otyp].oc_uname)
 			    docall(spellbook);
@@ -538,7 +677,11 @@
 		    if (spellbook->spe) {
 			check_unpaid_usage(spellbook, TRUE);
 			consume_obj_charge(spellbook, FALSE);
+#if 0 /*JP*/
 			pline_The("words on the page seem to glow faintly.");
+#else
+			pline("そのページの単語はうっすらと光っているように見えた．");
+#endif
 			if (!too_hard)
 			    delay /= 3;
 		    }
@@ -553,7 +696,11 @@
 	        	char qbuf[QBUFSZ];
 	        	
 	        	if (multi + 1 > MAX_STUDY_TIME) multi = MAX_STUDY_TIME - 1;
+#if 0 /*JP*/
 	        	Sprintf(qbuf, "Study for at least %i turns?", (multi+1));
+#else
+	        	Sprintf(qbuf, "少なくとも%iターンを消費しますが学びますか？", (multi+1));
+#endif
 			if (ynq(qbuf) != 'y') {
 				multi = 0;
 				return(1);
@@ -565,13 +712,22 @@
 #endif
 		}
 
+#if 0 /*JP*/
 		You("begin to %s the runes.",
 		    spellbook->otyp == SPE_BOOK_OF_THE_DEAD ? "recite" :
 		    "memorize");
+#else
+		You("ルーン文字を%sしはじめた．",
+		    spellbook->otyp == SPE_BOOK_OF_THE_DEAD ? "暗唱" :
+		    "記憶");
+#endif
 	}
 
 	book = spellbook;
+/*JP
 	set_occupation(learn, "studying", 0);
+*/
+	set_occupation(learn, "学ぶ", 0);
 	return(1);
 }
 
@@ -629,7 +785,10 @@
 	char ilet, lets[BUFSZ], qbuf[QBUFSZ];
 
 	if (spellid(0) == NO_SPELL)  {
+/*JP
 	    You("don't know any spells right now.");
+*/
+	    You("魔法を知らない．");
 	    return FALSE;
 	}
 	if (flags.menu_style == MENU_TRADITIONAL) {
@@ -649,7 +808,10 @@
 	    else  Sprintf(lets, "a-z A-Z 0-9");
 
 	    for(;;)  {
+/*JP
 		Sprintf(qbuf, "Cast which spell? [%s ?]", lets);
+*/
+		Sprintf(qbuf, "どの魔法を唱える？[%s ?]", lets);
 		if ((ilet = yn_function(qbuf, (char *)0, '\0')) == '?')
 		    break;
 
@@ -661,11 +823,19 @@
 		    *spell_no = idx;
 		    return TRUE;
 		} else
+/*JP
 		    You("don't know that spell.");
+*/
+		    You("そんな魔法は知らない．");
 	    }
 	}
+#if 0 /*JP*/
 	return dospellmenu("Choose which spell to cast",
 			   SPELLMENU_CAST, spell_no);
+#else
+	return dospellmenu("どの魔法を唱える？",
+			   SPELLMENU_CAST, spell_no);
+#endif
 }
 
 /* the 'Z' command -- cast a spell */
@@ -684,19 +854,40 @@
 {
 	switch (skill) {
 	    case P_ATTACK_SPELL:
+/*JP
 	        return " attack";
+*/
+		return "攻撃";
 	    case P_HEALING_SPELL:
+/*JP
 		return "healing";
+*/
+		return "治癒";
 	    case P_DIVINATION_SPELL:
+/*JP
 	        return " divine";
+*/
+		return "予知";
 	    case P_ENCHANTMENT_SPELL:
+/*JP
 	        return "enchant";
+*/
+		return "補助";
 		case P_PROTECTION_SPELL:
+/*JP
 	        return "protect";
+*/
+		return "護り";
 	    case P_BODY_SPELL:
+/*JP
 	        return "   body";
+*/
+		return "肉体";
 	    case P_MATTER_SPELL:
+/*JP
 	        return " matter";
+*/
+		return "物質";
 	    default:
 		impossible("Unknown spell skill, %d;", skill);
 		return "";
@@ -752,13 +943,21 @@
 		const char *hgolden = hcolor(NH_GOLDEN);
 
 		if (u.uspellprot)
+/*JP
 		    pline_The("%s haze around you becomes more dense.",
+*/
+		    pline("あなたのまわりの%s霞が濃くなった",
 			      hgolden);
 		else
+#if 0 /*JP*/
 		    pline_The("%s around you begins to shimmer with %s haze.",
 			/*[ what about being inside solid rock while polyd? ]*/
 			(Underwater || Is_waterlevel(&u.uz)) ? "water" : "air",
 			      an(hgolden));
+#else
+		    pline("あなたのまわりに%s霧があらわれてキラキラと光った．",
+			      hgolden);
+#endif
 	    }
 	    u.uspellprot += gain;
 	    u.uspmtime =
@@ -767,7 +966,10 @@
 		u.usptime = u.uspmtime;
 	    find_ac();
 	} else {
+/*JP
 	    Your("skin feels warm for a moment.");
+*/
+	    Your("肌は一瞬ポカポカした．");
 	}
 }
 
@@ -823,33 +1025,60 @@
 	 * decrement of spell knowledge is done every turn.
 	 */
 	if (spellknow(spell) <= 0) {
+/*JP
 	    Your("knowledge of this spell is twisted.");
+*/
+	    Your("この魔法に関する知識はよじれた．");
+/*JP
 	    pline("It invokes nightmarish images in your mind...");
+*/
+	    pline("それは悪夢を心に浮ばせた．．．");
 	    spell_backfire(spell);
 	    return(0);
 	} else if (spellknow(spell) <= 100) {
+/*JP
 	    You("strain to recall the spell.");
+*/
+	    You("魔法を思いだそうとした．");
 	} else if (spellknow(spell) <= 1000) {
+/*JP
 	    Your("knowledge of this spell is growing faint.");
+*/
+	    Your("この魔法に関する知識が消えてゆく．");
 	}
 	energy = (spellev(spell) * 5);    /* 5 <= energy <= 35 */
 
 	if (u.uhunger <= 10 && spellid(spell) != SPE_DETECT_FOOD) {
+/*JP
 		You("are too hungry to cast that spell.");
+*/
+	        pline("腹が減りすぎて魔法を唱えられない．");
 		return(0);
 	} else if (ACURR(A_STR) < 4)  {
+/*JP
 		You("lack the strength to cast spells.");
+*/
+		pline("強さが少なすぎて魔法を唱えられない．");
 		return(0);
 	} else if(check_capacity(
+/*JP
 		"Your concentration falters while carrying so much stuff.")) {
+*/
+		"たくさんものを持ちすぎて集中できない．")){
 	    return (1);
 	} else if (!freehand()) {
+/*JP
 		Your("arms are not free to cast!");
+*/
+		pline("魔法を唱えようにも腕の自由が効かない！");
 		return (0);
 	}
 
 	if (u.uhave.amulet) {
+/*JP
 		You_feel("the amulet draining your energy away.");
+*/
+		pline("魔除けがあなたのエネルギーを吸いとっているような気がした．");
 		energy += rnd(2*energy);
 	}
 		if (spellid(spell) != SPE_DETECT_FOOD) {
@@ -889,14 +1118,23 @@
 			if (hungr > u.uhunger-3)
 				hungr = u.uhunger-3;
 	if (energy > u.uen)  {
+/*JP
 		You("don't have enough energy to cast that spell.");
+*/
+		pline("魔法を唱えるだけの十分なエネルギーを持っていない．");
 		/* WAC/ALI Experts can override with HP/hunger loss */
+/*JP
 		if ((role_skill >= P_SKILLED) && (yn("Continue?") == 'y')) {
+*/
+		if ((role_skill >= P_SKILLED) && (yn("続けますか？") == 'y')) {
 			energy -= u.uen;
 			hungr += energy * 2;
 			if (hungr > u.uhunger - 1)
 				hungr = u.uhunger - 1;
+/*JP
 			losehp(energy,"spellcasting exhaustion", KILLED_BY);
+*/
+			losehp(energy,"呪文詠唱による消耗で", KILLED_BY);
 			if (role_skill < P_EXPERT) exercise(A_WIS, FALSE);
 			energy = u.uen;
 		} else
@@ -906,7 +1144,10 @@
 
 	chance = percent_success(spell);
 	if (confused || (rnd(100) > chance)) {
+/*JP
 		pline("You fail to cast the spell correctly.");
+*/
+		You("魔法を正しく唱えることができなかった．");
 
 #ifdef ALLEG_FX
                 if (iflags.usealleg) alleg_aura(u.ux, u.uy, P_ATTACK_SPELL-1);
@@ -973,13 +1214,21 @@
 			if (atme) u.dx = u.dy = u.dz = 0;
 			else if (!getdir((char *)0)) {
 			    /* getdir cancelled, re-use previous direction */
+/*JP
 			    pline_The("magical energy is released!");
+*/
+			    pline("魔法のエネルギーが解放された！");
 			}
 			if(!u.dx && !u.dy && !u.dz) {
 			    if ((damage = zapyourself(pseudo, TRUE)) != 0) {
+#if 0 /*JP*/
 				char buf[BUFSZ];
 				Sprintf(buf, "zapped %sself with a spell", uhim());
 				losehp(damage, buf, NO_KILLER_PREFIX);
+#else
+				losehp(damage, "自分自身の魔法を浴びて",
+				       KILLED_BY);
+#endif
 			    }
 			} else weffects(pseudo);
 		} else weffects(pseudo);
@@ -1014,7 +1263,10 @@
 		    pseudo->blessed = 0;
 		    (void) seffects(pseudo);
 		} else
+/*JP
 		    Your("enchantment failed!");
+*/
+		    Your("魔力付与に失敗した！");
 		break;
 
 	/* these are all duplicates of potion effects */
@@ -1035,9 +1287,15 @@
 		healup(0, 0, FALSE, TRUE);
 		break;
 	case SPE_CURE_SICKNESS:
+/*JP
 		if (Sick) You("are no longer ill.");
+*/
+		if (Sick) Your("病気は直った．");
 		if (Slimed) {
+/*JP
 		    pline_The("slime disappears!");
+*/
+		    pline("スライムは消えた！");
 		    Slimed = 0;
 		 /* flags.botl = 1; -- healup() handles this */
 		}
@@ -1051,7 +1309,10 @@
 		    do_vicinity_map();
 		/* at present, only one thing blocks clairvoyance */
 		else if (uarmh && uarmh->otyp == CORNUTHAUM)
+/*JP
 		    You("sense a pointy hat on top of your %s.",
+*/
+		    You("とがった帽子を%sの上に発見した．",
 			body_part(HEAD));
 		break;
 	case SPE_PROTECTION:
@@ -1063,7 +1324,10 @@
 		break;
 	case SPE_RESIST_POISON:
 		if(!(HPoison_resistance & INTRINSIC)) {
+/*JP
 			You("feel healthy ..... for the moment at least.");
+*/
+			You("健康になったような気がした．．．．．．さしあたって一時的に．");
 			incr_itimeout(&HPoison_resistance, rn1(1000, 500) +
 				spell_damage_bonus(spellid(spell))*100);
 		} else pline(nothing_happens);	/* Already have as intrinsic */
@@ -1071,16 +1335,25 @@
 	case SPE_RESIST_SLEEP:
 		if(!(HSleep_resistance & INTRINSIC)) {
 			if (Hallucination)
+/*JP
 				pline("Too much coffee!");
+*/
+				pline("コーヒーが多すぎる！");
 			else
+/*JP
 				You("no longer feel tired.");
+*/
+				You("もはや疲れていないような気がした．");
 			incr_itimeout(&HSleep_resistance, rn1(1000, 500) +
 				spell_damage_bonus(spellid(spell))*100);
 		} else pline(nothing_happens);	/* Already have as intrinsic */
 		break;
 	case SPE_ENDURE_COLD:
 		if(!(HCold_resistance & INTRINSIC)) {
+/*JP
 			You("feel warmer.");
+*/
+			You("より暖かくなったと感じた．");
 			incr_itimeout(&HCold_resistance, rn1(1000, 500) +
 				spell_damage_bonus(spellid(spell))*100);
 		} else pline(nothing_happens);	/* Already have as intrinsic */
@@ -1088,9 +1361,15 @@
 	case SPE_ENDURE_HEAT:
 		if(!(HFire_resistance & INTRINSIC)) {
 			if (Hallucination)
+/*JP
 				pline("Excellent! You feel, like, totally cool!");
+*/
+				pline("素晴らしい！ クールになったような気がする！");
 			else
+/*JP
 				You("feel colder.");
+*/
+				You("より寒くなったと感じた．");
 			incr_itimeout(&HFire_resistance, rn1(1000, 500) +
 				spell_damage_bonus(spellid(spell))*100);
 		} else pline(nothing_happens);	/* Already have as intrinsic */
@@ -1098,18 +1377,30 @@
 	case SPE_INSULATE:
 		if(!(HShock_resistance & INTRINSIC)) {
 			if (Hallucination)
+/*JP
 				pline("Bummer! You've been grounded!");
+*/
+				pline("よっしゃあ！ アース完了！");
 			else
+/*JP
 				You("are not at all shocked by this feeling.");
+*/
+				You("全く衝撃を感じなかった．");
 			incr_itimeout(&HShock_resistance, rn1(1000, 500) +
 				spell_damage_bonus(spellid(spell))*100);
 		} else pline(nothing_happens);	/* Already have as intrinsic */
 		break;
 	case SPE_ENLIGHTEN: 
+/*JP
 		You("feel self-knowledgeable...");
+*/
+		You("自分自身が判るような気がした．．．");
 		display_nhwindow(WIN_MESSAGE, FALSE);
 		enlightenment(FALSE);
+/*JP
 		pline("The feeling subsides.");
+*/
+		pline("その感じはなくなった．");
 		exercise(A_WIS, TRUE);
 		break;
 
@@ -1135,7 +1426,10 @@
 	/* KMH -- new spells */
 	case SPE_PASSWALL:
 		if (!Passes_walls)
+/*JP
 			You_feel("ethereal.");
+*/
+			You("身体が非物質化したように感じた．");
 		incr_itimeout(&HPasses_walls, rn1(100, 50));
 		break;
 
@@ -1185,11 +1479,20 @@
 	struct spell spl_tmp;
 
 	if (spellid(0) == NO_SPELL)
+/*JP
 	    You("don't know any spells right now.");
+*/
+	    You("魔法を知らない．");
 	else {
+#if 0 /*JP*/
 	    while (dospellmenu("Currently known spells",
 			       SPELLMENU_VIEW, &splnum)) {
 		Sprintf(qbuf, "Reordering spells; swap '%s' with",
+#else
+	    while (dospellmenu("現在知っている魔法一覧",
+			       SPELLMENU_VIEW, &splnum)) {
+		Sprintf(qbuf, "'%s'と並び変える魔法は？",
+#endif
 			spellname(splnum));
 		if (!dospellmenu(qbuf, splnum, &othnum)) break;
 
@@ -1227,19 +1530,32 @@
 	 * in the window-ports (say via a tab character).
 	 */
 	if (!iflags.menu_tab_sep)
+/*JP
 		Sprintf(buf, "%-20s     Level  %-12s Fail", "    Name", "Category");
+*/
+		Sprintf(buf, "%-28s     Level  %-6s 成功率", "    Name", "分類");
 	else
+/*JP
 		Sprintf(buf, "Name\tLevel\tCategory\tFail");
+*/
+		Sprintf(buf, "Name\tLevel\t分類\t成功率");
 	if (flags.menu_style == MENU_TRADITIONAL)
 		Strcat(buf, iflags.menu_tab_sep ? "\tKey" : "  Key");
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_BOLD, buf, MENU_UNSELECTED);
 	for (i = 0; i < MAXSPELL && spellid(i) != NO_SPELL; i++) {
 		Sprintf(buf, iflags.menu_tab_sep ?
-			"%s\t%-d%s\t%s\t%-d%%" : "%-20s  %2d%s   %-12s %3d%%",
+			"%s\t%-d%s\t%s\t%-d%%" : "%-28s  %2d%s   %-6s %3d%%",
+#if 0 /*JP*/
 			spellname(i), spellev(i),
 			spellknow(i) ? " " : "*",
 			spelltypemnemonic(spell_skilltype(spellid(i))),
 			100 - percent_success(i));
+#else
+			jtrns_obj('+', spellname(i)), spellev(i),
+			spellknow(i) ? " " : "*",
+			spelltypemnemonic(spell_skilltype(spellid(i))),
+			percent_success(i));
+#endif
 		if (flags.menu_style == MENU_TRADITIONAL)
 			Sprintf(eos(buf), iflags.menu_tab_sep ?
 				"\t%c" : "%4c ", spellet(i) ? spellet(i) : ' ');
@@ -1433,15 +1749,24 @@
 
 	if (getspell(&spell_no)) {
 		if (spellknow(spell_no) <= 0) {
+/*JP
 			You("are unable to focus your memory of the spell.");
+*/
+			You("その魔法を思い出せない．");
 			return (FALSE);
 		} else if (spellknow(spell_no) <= 1000) {
+/*JP
 			Your("focus and reinforce your memory of the spell.");
+*/
+			Your("その魔法に関する知識は強化された．");
 			incrnknow(spell_no);
 			exercise(A_WIS, TRUE);      /* extra study */
 			return (TRUE);
 		} else /* 1000 < spellknow(spell_no) <= 5000 */
+/*JP
 			You("know that spell quite well already.");
+*/
+			Your("その魔法に関する知識は充分だ．");
 	}
 	return (FALSE);
 }
diff -aurN slashem-0.0.7E6F2/src/steal.c jslashem-0.0.7E6F2-J0.0.8/src/steal.c
--- slashem-0.0.7E6F2/src/steal.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/steal.c	2004-06-27 16:55:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_PTR int NDECL(stealarm);
@@ -16,13 +24,28 @@
 {
 	return (
 #ifdef TOURIST
+/*JP
 		(otmp == uarmu) ? "shirt" :
+*/
+		(otmp == uarmu) ? "シャツ" :
 #endif
+/*JP
 		(otmp == uarmf) ? "boots" :
+*/
+		(otmp == uarmf) ? "靴" :
+/*JP
 		(otmp == uarms) ? "shield" :
+*/
+		(otmp == uarms) ? "盾" :
+/*JP
 		(otmp == uarmg) ? "gloves" :
+*/
+		(otmp == uarmg) ? "小手" :
 		(otmp == uarmc) ? cloak_simple_name(otmp) :
+/*JP
 		(otmp == uarmh) ? "helmet" : "armor");
+*/
+		(otmp == uarmh) ? "兜" : "鎧");
 }
 
 #ifndef GOLDOBJ
@@ -48,7 +71,10 @@
 	    mtmp->mgold += gold->quan;
 	    delobj(gold);
 	    newsym(u.ux, u.uy);
+/*JP
 	    pline("%s quickly snatches some gold from between your %s!",
+*/
+	    pline("%sは素早くあなたの%s元から金をひったくった！",
 		    Monnam(mtmp), makeplural(body_part(FOOT)));
 	    if(!u.ugold || !rn2(5)) {
 		if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
@@ -57,7 +83,10 @@
 	    }
 	} else if(u.ugold) {
 	    u.ugold -= (tmp = somegold());
+/*JP
 	    Your("purse feels lighter.");
+*/
+	    Your("財布は軽くなった．");
 	    mtmp->mgold += tmp;
 	if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
 	    mtmp->mavenge = 1;
@@ -117,7 +146,10 @@
             obj_extract_self(fgold);
 	    add_to_minv(mtmp, fgold);
 	    newsym(u.ux, u.uy);
+/*JP
 	    pline("%s quickly snatches some gold from between your %s!",
+*/
+	    pline("%sは素早くあなたの%s元から金をひったくった！",
 		    Monnam(mtmp), makeplural(body_part(FOOT)));
 	    if(!ygold || !rn2(5)) {
 		if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
@@ -130,7 +162,10 @@
             if (tmp < ygold->quan) ygold = splitobj(ygold, tmp);
             freeinv(ygold);
             add_to_minv(mtmp, ygold);
+/*JP
 	    Your("purse feels lighter.");
+*/
+	    Your("財布は軽くなった．");
 	    if (!tele_restrict(mtmp)) (void) rloc(mtmp, FALSE);
 	    monflee(mtmp, 0, FALSE, FALSE);
 	    flags.botl = 1;
@@ -158,7 +193,10 @@
 			if(otmp->unpaid)
 			    subfrombill(otmp, shop_keeper(*u.ushops));
 			freeinv(otmp);
+/*JP
 			pline("%s steals %s!", Monnam(mtmp), doname(otmp));
+*/
+			pline("%sは%sを盗んだ！", Monnam(mtmp), doname(otmp));
 			(void) mpickobj(mtmp,otmp);	/* may free otmp */
 			/* Implies seduction, "you gladly hand over ..."
 			   so we don't set mavenge bit here. */
@@ -252,9 +290,15 @@
 nothing_to_steal:
 	    /* Not even a thousand men in armor can strip a naked man. */
 	    if(Blind)
+/*JP
 	      pline("Somebody tries to rob you, but finds nothing to steal.");
+*/
+	      pline("誰かがあなたから盗もうとしたが，盗むものがないことに気がついた．");
 	    else
+/*JP
 	      pline("%s tries to rob you, but there is nothing to steal!",
+*/
+	      pline("%sはあなたから盗もうとしたが，盗むものがないことに気がついた！",
 		Monnam(mtmp));
 	    return(1);  /* let thief flee */
 	}
@@ -323,12 +367,20 @@
 		ostuck = (otmp->cursed && otmp->owornmask);
 
 	    if (ostuck || !can_carry(mtmp, otmp)) {
+#if 0 /*JP*/
 		static const char * const how[] = { "steal","snatch","grab","take" };
  cant_take:
 		pline("%s tries to %s your %s but gives up.",
 		      Monnam(mtmp), how[rn2(SIZE(how))],
 		      (otmp->owornmask & W_ARMOR) ? equipname(otmp) :
 		       cxname(otmp));
+#else
+ cant_take:
+		pline("%sは%sを盗もうとしたが諦めた．",
+		      Monnam(mtmp),
+		      (otmp->owornmask & W_ARMOR) ? equipname(otmp) :
+		       cxname(otmp));
+#endif
 		/* the fewer items you have, the less likely the thief
 		   is going to stick around to try again (0) instead of
 		   running away (1) */
@@ -368,17 +420,20 @@
 			int curssv = otmp->cursed;
 			int slowly;
 			boolean seen = canspotmon(mtmp);
+#if 0 /*JP*/
 			char pronoun[4];
 
 			if (!seen) {
 			    strcpy(pronoun, mhe(mtmp));
 			    pronoun[0] = highc(pronoun[0]);
 			}
+#endif
 			otmp->cursed = 0;
 			/* can't charm you without first waking you */
 			if (multi < 0 && is_fainted()) unmul((char *)0);
 			slowly = (armordelay >= 1 || multi < 0);
 			if (do_charm) {
+#if 0 /*JP*/
 			    char action[15];
 			    if (curssv)
 				sprintf(action, "let %s take",
@@ -389,13 +444,34 @@
 			    pline("%s charms you.  You gladly %s your %s.",
 				  !seen ? pronoun : Monnam(mtmp), action,
 				  equipname(otmp));
+#else
+			    pline("%sはあなたを魅了した．あなたはよろこんで%sを%s%s．",
+				  !seen ? mhis(mtmp) : Monnam(mtmp),
+				  equipname(otmp),
+				  slowly ? "はずし始め" : "はずして",
+				  curssv ? "あげた" : "手渡した");
+#endif
 			}
 			else
+#if 0 /*JP*/
 			    pline("%s seduces you and %s off your %s.",
 				  !seen ? pronoun : Adjmonnam(mtmp, "beautiful"),
 				  curssv ? "helps you to take" :
 				  slowly ? "you start taking" : "you take",
 				  equipname(otmp));
+#else
+			    if(curssv){
+				pline("%sはあなたを誘惑して，あなたが%sをはずすのを%s．",
+				  !seen ? "何者か" : Adjmonnam(mtmp, "美しい"),
+				  equipname(otmp),
+				  slowly ? "手伝い始めた" : "手伝った");
+			    } else {
+				pline("%sはあなたを誘惑した．あなたは%sを%s．",
+				  !seen ? "何者か" : Adjmonnam(mtmp, "美しい"),
+				  equipname(otmp),
+				  slowly ? "はずし始めた" : "はずした");
+			    }
+#endif
 			named++;
 			/* the following is to set multi for later on */
 			nomul(-armordelay);
@@ -431,7 +507,10 @@
 	mtmp->mavenge = 1;
 
 	freeinv(otmp);
+/*JP
 	pline("%s stole %s.", named ? "It" : Monnam(mtmp), doname(otmp));
+*/
+	pline("%sは%sを盗んだ．", named ? "それ" : Monnam(mtmp), doname(otmp));
 	could_petrify = (otmp->otyp == CORPSE &&
 			 touch_petrifies(&mons[otmp->corpsenm]));
 	(void) mpickobj(mtmp,otmp);	/* may free otmp */
@@ -469,7 +548,10 @@
 	attacktype(mtmp->data, AT_ENGL)) {
 	/* this is probably a burning object that you dropped or threw */
 	if (u.uswallow && mtmp == u.ustuck && !Blind)
+/*JP
 	    pline("%s out.", Tobjnam(otmp, "go"));
+*/
+	    pline("%sは飛びだした．", xname(otmp));
 	snuff_otmp = TRUE;
     }
     /* Must do carrying effects on object prior to add_to_minv() */
@@ -526,7 +608,10 @@
 	/* mpickobj wont merge otmp because none of the above things
 	   to steal are mergable */
 	(void) mpickobj(mtmp,otmp);	/* may merge and free otmp */
+/*JP
 	pline("%s stole %s!", Monnam(mtmp), doname(otmp));
+*/
+	pline("%sは%sを盗んだ！", Monnam(mtmp), doname(otmp));
 	if (can_teleport(mtmp->data) && !tele_restrict(mtmp))
 	    (void) rloc(mtmp, FALSE);
     }
@@ -561,8 +646,14 @@
 	obj->owornmask = 0L;
     }
     if (verbosely && cansee(omx, omy))
+/*JP
 	pline("%s drops %s.", Monnam(mon), distant_name(obj, doname));
+*/
+	pline("%sは%sを置いた．", Monnam(mon), distant_name(obj, doname));
+/*JP
     if (!flooreffects(obj, omx, omy, "fall")) {
+*/
+    if (!flooreffects(obj, omx, omy, "落ちる")) {
 	place_object(obj, omx, omy);
 	stackobj(obj);
     }
@@ -637,8 +728,12 @@
 		register long g = mtmp->mgold;
 		(void) mkgold(g, omx, omy);
 		if (is_pet && cansee(omx, omy) && flags.verbose)
+#if 0 /*JP*/
 			pline("%s drops %ld gold piece%s.", Monnam(mtmp),
 				g, plur(g));
+#else
+			pline("%sは%ldの金塊を置いた．", Monnam(mtmp), g);
+#endif
 		mtmp->mgold = 0L;
 	}
 #endif
diff -aurN slashem-0.0.7E6F2/src/steed.c jslashem-0.0.7E6F2-J0.0.8/src/steed.c
--- slashem-0.0.7E6F2/src/steed.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/steed.c	2004-08-05 12:07:18.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Kevin Hugo, 1998-1999. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 
@@ -18,7 +26,10 @@
 void
 rider_cant_reach()
 {
+/*JP
      You("aren't skilled enough to reach from %s.", y_monnam(u.usteed));
+*/
+     You("まだ十分に技量を積んでいないので，%sから届かない", y_monnam(u.usteed));
 }
 
 /*** Putting the saddle on ***/
@@ -49,10 +60,17 @@
 
 	/* Can you use it? */
 	if (nohands(youmonst.data)) {
+#if 0 /*JP*/
 		You("have no hands!");	/* not `body_part(HAND)' */
+#else
+		pline("あなたには手がない！");	/* not `body_part(HAND)' */
+#endif
 		return 0;
 	} else if (!freehand()) {
+/*JP
 		You("have no free %s.", body_part(HAND));
+*/
+		You("%sの自由が効かない．", body_part(HAND));
 		return 0;
 	}
 
@@ -62,44 +80,69 @@
 	    return 0;
 	}
 	if (!u.dx && !u.dy) {
+#if 0 /*JP*/
 	    pline("Saddle yourself?  Very funny...");
+#else
+	    pline("自分自身に鞍？おもしろい．．．");
+#endif
 	    return 0;
 	}
 	if (!isok(u.ux+u.dx, u.uy+u.dy) ||
 			!(mtmp = m_at(u.ux+u.dx, u.uy+u.dy)) ||
 			!canspotmon(mtmp)) {
+/*JP
 	    pline("I see nobody there.");
+*/
+	    pline("そこには誰もいないように見える．");
 	    return 1;
 	}
 
 	/* Is this a valid monster? */
 	if (mtmp->misc_worn_check & W_SADDLE ||
 			which_armor(mtmp, W_SADDLE)) {
+/*JP
 	    pline("%s doesn't need another one.", Monnam(mtmp));
+*/
+	    pline("%sはもう鞍が取りつけられている．", Monnam(mtmp));
 	    return 1;
 	}
 	ptr = mtmp->data;
 	if (touch_petrifies(ptr) && !uarmg && !Stone_resistance) {
 	    char kbuf[BUFSZ];
 
+/*JP
 	    You("touch %s.", mon_nam(mtmp));
+*/
+	    You("%sに触れた．", mon_nam(mtmp));
  	    if (!(poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))) {
+/*JP
 		Sprintf(kbuf, "attempting to saddle %s", an(mtmp->data->mname));
+*/
+		Sprintf(kbuf, "%sに鞍を取りつけようとして", a_monnam(mtmp));
 		instapetrify(kbuf);
  	    }
 	}
 	if (ptr == &mons[PM_INCUBUS] || ptr == &mons[PM_SUCCUBUS]) {
+/*JP
 	    pline("Shame on you!");
+*/
+	    pline("みっともないぞ！");
 	    exercise(A_WIS, FALSE);
 	    return 1;
 	}
 	if (mtmp->isminion || mtmp->isshk || mtmp->ispriest ||
 			mtmp->isgd || mtmp->iswiz) {
+/*JP
 	    pline("I think %s would mind.", mon_nam(mtmp));
+*/
+	    pline("%sは鞍をつけられることを気にしているようだ．", mon_nam(mtmp));
 	    return 1;
 	}
 	if (!can_saddle(mtmp)) {
+/*JP
 		You_cant("saddle such a creature.");
+*/
+		You("その生き物に鞍はとりつけられない．");
 		return 1;
 	}
 
@@ -138,7 +181,10 @@
 
 	/* Make the attempt */
 	if (rn2(100) < chance) {
+/*JP
 	    You("put the saddle on %s.", mon_nam(mtmp));
+*/
+	    You("鞍を%sに取りつけた．", mon_nam(mtmp));
 	    if (otmp->owornmask) remove_worn_item(otmp, FALSE);
 	    freeinv(otmp);
 	    /* mpickobj may free otmp it if merges, but we have already
@@ -149,7 +195,10 @@
 	    otmp->leashmon = mtmp->m_id;
 	    update_mon_intrinsics(mtmp, otmp, TRUE, FALSE);
 	} else
+/*JP
 	    pline("%s resists!", Monnam(mtmp));
+*/
+	    pline("%sは拒否した！", Monnam(mtmp));
 	return 1;
 }
 
@@ -176,7 +225,10 @@
 	    dismount_steed(DISMOUNT_BYCHOICE);
 	else if (getdir((char *)0) && isok(u.ux+u.dx, u.uy+u.dy)) {
 #ifdef WIZARD
+/*JP
 	if (wizard && yn("Force the mount to succeed?") == 'y')
+*/
+	if (wizard && yn("無理矢理成功させますか？") == 'y')
 		forcemount = TRUE;
 #endif
 	    return (mount_steed(m_at(u.ux+u.dx, u.uy+u.dy), forcemount));
@@ -198,13 +250,20 @@
 
 	/* Sanity checks */
 	if (u.usteed) {
+/*JP
 	    You("are already riding %s.", mon_nam(u.usteed));
+*/
+	    	You("もう%sに乗っている．", mon_nam(u.usteed));
 	    return (FALSE);
 	}
 
 	/* Is the player in the right form? */
 	if (Hallucination && !force) {
+#if 0 /*JP*/
 	    pline("Maybe you should find a designated driver.");
+#else
+	    pline("おそらくあなたは指定ドライバーを探すべきだろう．");
+#endif
 	    return (FALSE);
 	}
 	/* While riding Wounded_legs refers to the steed's,
@@ -218,7 +277,11 @@
 	 * minimized, if not eliminated altogether.
 	 */
 	if (Wounded_legs) {
+#if 0 /*JP*/
 	    Your("%s are in no shape for riding.", makeplural(body_part(LEG)));
+#else
+	    pline("%sを怪我しているので乗れない．", makeplural(body_part(LEG)));
+#endif
 #ifdef WIZARD
 	    if (force && wizard && yn("Heal your legs?") == 'y')
 		HWounded_legs = EWounded_legs = 0;
@@ -229,11 +292,17 @@
 
 	if (Upolyd && (!humanoid(youmonst.data) || verysmall(youmonst.data) ||
 			bigmonst(youmonst.data) || slithy(youmonst.data))) {
+/*JP
 	    You("won't fit on a saddle.");
+*/
+	    You("鞍に合わない．");
 	    return (FALSE);
 	}
 	if(!force && (near_capacity() > SLT_ENCUMBER)) {
+/*JP
 	    You_cant("do that while carrying so much stuff.");
+*/
+	    You("沢山物を持ちすぎており出来ない．");
 	    return (FALSE);
 	}
 
@@ -242,89 +311,148 @@
 		mtmp->mundetected ||
 		mtmp->m_ap_type == M_AP_FURNITURE ||
 		mtmp->m_ap_type == M_AP_OBJECT))) {
+/*JP
 	    pline("I see nobody there.");
+*/
+	    	pline("そこには何も見えない．");
 	    return (FALSE);
 	}
 	if (u.uswallow || u.ustuck || u.utrap || Punished ||
 	    !test_move(u.ux, u.uy, mtmp->mx-u.ux, mtmp->my-u.uy, TEST_MOVE)) {
 	    if (Punished || !(u.uswallow || u.ustuck || u.utrap))
+/*JP
 		You("are unable to swing your %s over.", body_part(LEG)); 
+*/
+		You("鞍をまたぐことができない．");
 	    else
+/*JP
 		You("are stuck here for now.");
+*/
+        	You("はまっているので出来ない．");
 	    return (FALSE);
 	}
 
 	/* Is this a valid monster? */
 	otmp = which_armor(mtmp, W_SADDLE);
 	if (!otmp) {
+/*JP
 	    pline("%s is not saddled.", Monnam(mtmp));
+*/
+	    pline("%sには鞍が取りつけられていない．", Monnam(mtmp));
 	    return (FALSE);
 	}
 	ptr = mtmp->data;
 	if (touch_petrifies(ptr) && !Stone_resistance) {
 	    char kbuf[BUFSZ];
 
+/*JP
 	    You("touch %s.", mon_nam(mtmp));
+*/
+	    You("%sに触れた．", mon_nam(mtmp));
+/*JP
 	    Sprintf(kbuf, "attempting to ride %s", an(mtmp->data->mname));
+*/
+	    Sprintf(kbuf, "%sに乗ろうとして", a_monnam(mtmp));
 	    instapetrify(kbuf);
 	}
 	if (!mtmp->mtame || mtmp->isminion) {
+/*JP
 	    pline("I think %s would mind.", mon_nam(mtmp));
+*/
+	    pline("%sは鞍をつけられることを気にしているようだ．", mon_nam(mtmp));
 	    return (FALSE);
 	}
 	if (mtmp->mtrapped) {
 	    struct trap *t = t_at(mtmp->mx, mtmp->my);
 
+#if 0 /*JP*/
 	    You_cant("mount %s while %s's trapped in %s.",
 		     mon_nam(mtmp), mhe(mtmp),
 		     an(defsyms[trap_to_defsym(t->ttyp)].explanation));
+#else
+	    You("%sに捕まっている%sには乗れない．",
+		     jtrns_obj('^', defsyms[trap_to_defsym(t->ttyp)].explanation),
+		     mon_nam(mtmp));
+#endif
 	    return (FALSE);
 	}
 
 	if (!force && !Role_if(PM_KNIGHT) && !(--mtmp->mtame)) {
 	    /* no longer tame */
 	    newsym(mtmp->mx, mtmp->my);
+#if 0 /*JP*/
 	    pline("%s resists%s!", Monnam(mtmp),
 		  mtmp->mleashed ? " and its leash comes off" : "");
+#else
+	    pline("%sは拒否%s！", Monnam(mtmp),
+		  mtmp->mleashed ? "して，紐をはずした" : "した");
+#endif
 	    if (mtmp->mleashed) m_unleash(mtmp, FALSE);
 	    return (FALSE);
 	}
 	if (!force && Underwater && !is_swimmer(ptr)) {
+/*JP
 	    You_cant("ride that creature while under water.");
+*/
+	    You("水中で乗ることはできない．");
 	    return (FALSE);
 	}
 	if (!can_saddle(mtmp) || !can_ride(mtmp)) {
+/*JP
 	    You_cant("ride such a creature.");
+*/
+	    You("その生き物に乗ることはできない．");
 	    return (0);
 	}
 
 	/* Is the player impaired? */
 	if (!force && !is_floater(ptr) && !is_flyer(ptr) &&
 			Levitation && !Lev_at_will) {
+/*JP
 	    You("cannot reach %s.", mon_nam(mtmp));
+*/
+	    You("%sに届かない．", mon_nam(mtmp));
 	    return (FALSE);
 	}
 	if (!force && uarm && is_metallic(uarm) &&
 			greatest_erosion(uarm)) {
+#if 0 /*JP*/
 	    Your("%s armor is too stiff to be able to mount %s.",
 			uarm->oeroded ? "rusty" : "corroded",
 			mon_nam(mtmp));
+#else
+	    Your("%s鎧はギシギシいっており%sに乗れない",
+			uarm->oeroded ? "錆びた" : "腐食した",
+			mon_nam(mtmp));
+#endif
 	    return (FALSE);
 	}
 	if (!force && (Confusion || Fumbling || Glib || Wounded_legs ||
 		otmp->cursed || (u.ulevel+mtmp->mtame < rnd(MAXULEV/2+5)))) {
 	    if (Levitation) {
+/*JP
 		pline("%s slips away from you.", Monnam(mtmp));
+*/
+		pline("%sはあなたからはなれていった．", Monnam(mtmp));
 		return FALSE;
 	    }
+/*JP
 	    You("slip while trying to get on %s.", mon_nam(mtmp));
+*/
+	    You("%sに乗ろうとしてすべった．", mon_nam(mtmp));
 
+#if 0 /*JP*/
 	    Sprintf(buf, "slipped while mounting %s",
 		    /* "a saddled mumak" or "a saddled pony called Dobbin" */
 		    x_monnam(mtmp, ARTICLE_A, (char *)0,
 			SUPPRESS_IT|SUPPRESS_INVISIBLE|SUPPRESS_HALLUCINATION,
 			     TRUE));
 	    losehp(rn1(5,10), buf, NO_KILLER_PREFIX);
+#else
+	    Sprintf(buf, "%sに乗ろうとしてすべり落ちて",
+		    m_monnam(mtmp));
+	    losehp(rn1(5,10), buf, KILLED_BY);
+#endif
 	    return (FALSE);
 	}
 
@@ -332,8 +460,14 @@
 	if (!force) {
 	    if (Levitation && !is_floater(ptr) && !is_flyer(ptr))
 	    	/* Must have Lev_at_will at this point */
+/*JP
 	    	pline("%s magically floats up!", Monnam(mtmp));
+*/
+	    	pline("%sは魔法の力で浮いた！", Monnam(mtmp));
+/*JP
 	    You("mount %s.", mon_nam(mtmp));
+*/
+	    You("%sに乗った．", mon_nam(mtmp));
 	}
 	/* setuwep handles polearms differently when you're mounted */
 	if (uwep && is_pole(uwep)) unweapon = FALSE;
@@ -434,11 +568,23 @@
 		    u.usteed->mcanmove = 1;
 		}
 		if (u.usteed->msleeping || !u.usteed->mcanmove)
+#if 0 /*JP*/
 		    pline("%s stirs.", He);
+#else
+		    pline("%sは動き出した．", He);
+#endif
 		else
+#if 0 /*JP*/
 		    pline("%s rouses %sself!", He, mhim(u.usteed));
+#else
+		    pline("%sは奮起した！", He);
+#endif
 	    } else
+#if 0 /*JP*/
 		pline("%s does not respond.", He);
+#else
+		pline("%sは反応しない．", He);
+#endif
 	    return;
 	}
 
@@ -451,7 +597,10 @@
 	    return;
 	}
 
+/*JP
 	pline("%s gallops!", Monnam(u.usteed));
+*/
+	pline("%sは速足になった！", Monnam(u.usteed));
 	u.ugallop += rn1(20, 30);
 	return;
 }
@@ -464,7 +613,10 @@
 	struct monst *mtmp;
 	struct obj *otmp;
 	coord cc;
+/*JP
 	const char *verb = "fall";
+*/
+	const char *verb = "落ちた";
 	boolean repair_leg_damage = TRUE;
 	unsigned save_utrap = u.utrap;
 	boolean have_spot = landing_spot(&cc,reason,0);
@@ -478,16 +630,28 @@
 	otmp = which_armor(mtmp, W_SADDLE);
 	switch (reason) {
 	    case DISMOUNT_THROWN:
+/*JP
 		verb = "are thrown";
+*/
+		verb = "ふり落された";
 	    case DISMOUNT_FELL:
+/*JP
 		You("%s off of %s!", verb, mon_nam(mtmp));
+*/
+		You("%sから%s！", mon_nam(mtmp), verb);
 		if (!have_spot) have_spot = landing_spot(&cc,reason,1);
+/*JP
 		losehp(rn1(10,10), "riding accident", KILLED_BY_AN);
+*/
+		losehp(rn1(10,10), "乗りものから落ちて", KILLED_BY_AN);
 		set_wounded_legs(BOTH_SIDES, (int)HWounded_legs + rn1(5,5));
 		repair_leg_damage = FALSE;
 		break;
 	    case DISMOUNT_POLY:
+/*JP
 		You("can no longer ride %s.", mon_nam(u.usteed));
+*/
+		You("%sに乗ってられない．", mon_nam(u.usteed));
 		if (!have_spot) have_spot = landing_spot(&cc,reason,1);
 		break;
 	    case DISMOUNT_ENGULFED:
@@ -502,22 +666,41 @@
 	    case DISMOUNT_BYCHOICE:
 	    default:
 		if (otmp && otmp->cursed) {
+#if 0 /*JP*/
 		    You("can't.  The saddle %s cursed.",
 			otmp->bknown ? "is" : "seems to be");
+#else
+		    You("降りられない．鞍は呪われている%s．",
+			otmp->bknown ? "" : "ようだ");
+#endif
 		    otmp->bknown = TRUE;
 		    return;
 		}
 		if (!have_spot) {
+/*JP
 		    You("can't. There isn't anywhere for you to stand.");
+*/
+		    pline("あなたの立つ場所がないので降りられない．");
 		    return;
 		}
 		if (!mtmp->mnamelth) {
+#if 0 /*JP*/
 			pline("You've been through the dungeon on %s with no name.",
 				an(mtmp->data->mname));
+#else
+			pline("あなたは名無しの%sと共に迷宮内にいる．",
+				jtrns_mon(mtmp->data->mname));
+#endif
 			if (Hallucination)
+/*JP
 				pline("It felt good to get out of the rain.");
+*/
+				pline("雨のなかから抜け出るのによいと思った．");
 		} else
+/*JP
 			You("dismount %s.", mon_nam(mtmp));
+*/
+			You("%sから降りた．", mon_nam(mtmp));
 	}
 	/* While riding these refer to the steed's legs
 	 * so after dismounting they refer to the player's
@@ -548,14 +731,20 @@
 		if (!is_flyer(mdat) && !is_floater(mdat) && !is_clinger(mdat)) {
 		    if (is_pool(u.ux, u.uy)) {
 			if (!Underwater)
+/*JP
 			    pline("%s falls into the %s!", Monnam(mtmp),
+*/
+			    pline("%sは%sに落ちた！", Monnam(mtmp),
 							surface(u.ux, u.uy));
 			if (!is_swimmer(mdat) && !amphibious(mdat)) {
 			    killed(mtmp);
 			    adjalign(-1);
 			}
 		    } else if (is_lava(u.ux, u.uy)) {
+/*JP
 			pline("%s is pulled into the lava!", Monnam(mtmp));
+*/
+			pline("%sは溶岩の中にひっぱられた！", Monnam(mtmp));
 			if (!likes_lava(mdat)) {
 			    killed(mtmp);
 			    adjalign(-1);
diff -aurN slashem-0.0.7E6F2/src/tech.c jslashem-0.0.7E6F2-J0.0.8/src/tech.c
--- slashem-0.0.7E6F2/src/tech.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/tech.c	2004-08-24 12:51:23.000000000 +0900
@@ -5,6 +5,14 @@
 
 /* All of the techs from cmd.c are ported here */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Masaki Miyaso, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /* #define DEBUG */		/* turn on for diagnostics */
@@ -38,6 +46,7 @@
  */
  
 STATIC_OVL NEARDATA const char *tech_names[] = {
+#if 0 /*JP*/
 	"no technique",
 	"berserk",
 	"kiii",
@@ -81,6 +90,51 @@
 	"spirit bomb",
 	"draw blood",
 	""
+#else
+	"技能なし",
+	"狂戦士化",
+	"必殺",
+	"調査",
+	"手術",
+	"記憶の鮮明化",
+	"矢の雨",
+	"武器修練",
+	"切り刻みの爪",
+	"癒しの手",
+	"愛馬をなだめる",
+	"ターンアンデッド",
+	"バニッシュ",
+	"首掻き斬り",	/*盗賊の技なので「首刎ね」からこちらに変更。短剣で頚動脈を切るイメージで*/
+	"祝福",
+	"精霊拳",
+	"原始の雄叫び",
+	"液化移動",
+	"クリティカル",
+	"操りの印",
+	"嵐の印",
+	"解放の印",
+	"ゾンビ化",
+	"蘇生",
+	"火除けの呪言",
+	"冷気除けの呪言",
+	"雷除けの呪言",
+	"細工",
+	"憤怒の爆発",
+	"明滅",
+	"気功拳",
+	"魔力収集",
+	"回復の気功",
+	"武器落とし",
+	"金縛り",
+	"コンビネーション",
+	"連続打撃",	/*"柄頭殴り"ではない．monkの技[Sakusha]*/
+	"グランドスラム",
+	"空中ダッシュ",
+	"力のうねり",
+	"気功爆弾",
+	"採血",
+	""
+#endif
 };
 
 static const struct innate_tech 
@@ -324,7 +378,10 @@
 	for (ntechs = i = 0; i < MAXTECH; i++)
 	    if (techid(i) != NO_TECH) ntechs++;
 	if (ntechs == 0)  {
+/*JP
             You("don't know any techniques right now.");
+*/
+	    You("特殊技能を全く持っていない．");
 	    return FALSE;
 	}
 	if (flags.menu_style == MENU_TRADITIONAL) {
@@ -334,7 +391,10 @@
             else Sprintf(lets, "a-z A-%c", 'A' + ntechs - 27);
 
 	    for(;;)  {
+/*JP
                 Sprintf(qbuf, "Perform which technique? [%s ?]", lets);
+*/
+                Sprintf(qbuf, "どの特殊技能を使いますか？ [%s ?]", lets);
 		if ((ilet = yn_function(qbuf, (char *)0, '\0')) == '?')
 		    break;
 
@@ -357,7 +417,10 @@
 				}
 			    }
 		}
+/*JP
                 You("don't know that technique.");
+*/
+                You("その特殊技能を知らない．");
 	    }
 	}
         return dotechmenu(PICK_ONE, tech_no);
@@ -392,9 +455,17 @@
 		if ((len = strlen(techname(i))) > longest)
 		    longest = len;
 	    }
+#if 0 /*JP*/
 	    Sprintf(buf, "    %-*s Level   Status", longest, "Name");
+#else
+	    Sprintf(buf, "    %-*s レベル  状態", longest, "技能名");
+#endif
 	} else
+#if 0 /*JP*/
 	    Sprintf(buf, "Name\tLevel\tStatus");
+#else
+	    Sprintf(buf, "技能名\tレベル\t状態");
+#endif
 
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
 
@@ -419,11 +490,18 @@
 			    tech_list[i].t_intrinsic & FROMEXPER ? 'X' : ' ',
 			    tech_list[i].t_intrinsic & FROMRACE ? 'R' : ' ',
 			    tech_list[i].t_intrinsic & FROMOUTSIDE ? 'O' : ' ',
+/*JP
 			    tech_inuse(techid(i)) ? "Active" :
 			    level <= 0 ? "Beyond recall" :
 			    can_limitbreak() ? "LIMIT" :
 			    !techtout(i) ? "Prepared" : 
 			    techtout(i) > 100 ? "Not Ready" : "Soon",
+*/
+			    tech_inuse(techid(i)) ? "使用可" :
+			    level <= 0 ? "思い出せず" :
+			    can_limitbreak() ? "リミット" :
+			    !techtout(i) ? "準備完了" : 
+			    techtout(i) > 100 ? "準備中" : "もうすぐ",
 			    techtout(i));
 		else
 		    Sprintf(buf, "%s%s\t%2d%c%c%c\t%s(%i)",
@@ -431,30 +509,51 @@
 			    tech_list[i].t_intrinsic & FROMEXPER ? 'X' : ' ',
 			    tech_list[i].t_intrinsic & FROMRACE ? 'R' : ' ',
 			    tech_list[i].t_intrinsic & FROMOUTSIDE ? 'O' : ' ',
+/*JP
 			    tech_inuse(techid(i)) ? "Active" :
 			    level <= 0 ? "Beyond recall" :
 			    can_limitbreak() ? "LIMIT" :
 			    !techtout(i) ? "Prepared" : 
 			    techtout(i) > 100 ? "Not Ready" : "Soon",
+*/
+			    tech_inuse(techid(i)) ? "使用可" :
+			    level <= 0 ? "思い出せず" :
+			    can_limitbreak() ? "リミット" :
+			    !techtout(i) ? "準備完了" : 
+			    techtout(i) > 100 ? "準備中" : "もうすぐ",
 			    techtout(i));
 	    else
 #endif
 	    if (!iflags.menu_tab_sep)			
 		Sprintf(buf, "%s%-*s %5d   %s",
 			prefix, longest, techname(i), level,
+/*JP
 			tech_inuse(techid(i)) ? "Active" :
 			level <= 0 ? "Beyond recall" :
 			can_limitbreak() ? "LIMIT" :
 			!techtout(i) ? "Prepared" : 
 			techtout(i) > 100 ? "Not Ready" : "Soon");
+*/
+			tech_inuse(techid(i)) ? "使用可" :
+			level <= 0 ? "思い出せず" :
+			can_limitbreak() ? "リミット" :
+			!techtout(i) ? "準備完了" : 
+			techtout(i) > 100 ? "準備中" : "もうすぐ");
 	    else
 		Sprintf(buf, "%s%s\t%5d\t%s",
 			prefix, techname(i), level,
+/*JP
 			tech_inuse(techid(i)) ? "Active" :
 			level <= 0 ? "Beyond recall" :
 			can_limitbreak() ? "LIMIT" :
 			!techtout(i) ? "Prepared" : 
 			techtout(i) > 100 ? "Not Ready" : "Soon");
+*/
+			tech_inuse(techid(i)) ? "使用可" :
+			level <= 0 ? "思い出せず" :
+			can_limitbreak() ? "リミット" :
+			!techtout(i) ? "準備完了" : 
+			techtout(i) > 100 ? "準備中" : "もうすぐ");
 
 	    add_menu(tmpwin, NO_GLYPH, &any,
 		    techtout(i) ? 0 : let, 0, ATR_NONE, buf, MENU_UNSELECTED);
@@ -464,8 +563,12 @@
 	if (!techs_useable) 
 	    how = PICK_NONE;
 
+/*JP
 	end_menu(tmpwin, how == PICK_ONE ? "Choose a technique" :
 					   "Currently known techniques");
+*/
+	end_menu(tmpwin, how == PICK_ONE ? "特殊技能選択" :
+					   "現在覚えている特殊技能");
 
 	n = select_menu(tmpwin, how, &selected);
 	destroy_nhwindow(tmpwin);
@@ -512,7 +615,10 @@
     struct obj *obj, *otmp;
     makeknown(MEDICAL_KIT);
     if (!(obj = carrying(MEDICAL_KIT))) {
+/*JP
 	if (feedback) You("need a medical kit to do that.");
+*/
+	if (feedback) pline("それを行うには医療キットが必要だ．");
 	return (struct obj *)0;
     }
     for (otmp = invent; otmp; otmp = otmp->nobj)
@@ -528,8 +634,12 @@
 	    break;
     if (!otmp) {
 	if (feedback)
+/*JP
 	    You_cant("find any more %s in %s.",
 		    makeplural(simple_typename(type)), yname(obj));
+*/
+	    You("それ以上%sの中から%sを見つけられなかった．",
+		    yname(obj), makeplural(simple_typename(type)));
 	return (struct obj *)0;
     }
     return otmp;
@@ -544,7 +654,9 @@
 {
 	/* These variables are used in various techs */
 	struct obj *obj, *otmp;
+#if 0 /*JP*/
 	const char *str;
+#endif
 	struct monst *mtmp;
 	int num;
 	char Your_buf[BUFSZ];
@@ -554,15 +666,26 @@
 
 	/* check timeout */
 	if (tech_inuse(techid(tech_no))) {
+/*JP
 	    pline("This technique is already active!");
+*/
+	    pline("その特殊技能は現在使用中だ！");
 	    return (0);
 	}
         if (techtout(tech_no) && !can_limitbreak()) {
+/*JP
 	    You("have to wait %s before using your technique again.",
                 (techtout(tech_no) > 100) ?
                         "for a while" : "a little longer");
+*/
+	    pline("その特殊技能が再び使用できるようになるまで，%s時間がかかる．",
+                (techtout(tech_no) > 100) ?
+                        "かなり" : "しばらく");
 #ifdef WIZARD
+/*JP
             if (!wizard || (yn("Use technique anyways?") == 'n'))
+*/
+            if (!wizard || (yn("無理矢理使いますか？") == 'n'))
 #endif
                 return(0);
         }
@@ -573,18 +696,30 @@
 		/* WAC stolen from the spellcasters...'A' can identify from
         	   historical research*/
 		if(Hallucination || Stunned || Confusion) {
+/*JP
 		    You("can't concentrate right now!");
+*/
+		    You("この状態では集中できない！");
 		    return(0);
 		} else if((ACURR(A_INT) + ACURR(A_WIS)) < rnd(60)) {
+/*JP
 			pline("Nothing in your pack looks familiar.");
+*/
+			Your("持ち物は見慣れた品ばかりだ．");
                     t_timeout = rn1(500,500);
 		    break;
 		} else if(invent) {
+/*JP
 			You("examine your possessions.");
+*/
+			You("自分の持ち物を検査した．");
 			identify_pack((int) ((techlev(tech_no) / 10) + 1));
 		} else {
 			/* KMH -- fixed non-compliant string */
+/*JP
 		    You("are already quite familiar with the contents of your pack.");
+*/
+		    You("自分の持ち物に何があるか全て知っている．");
 		    break;
 		}
                 t_timeout = rn1(500,1500);
@@ -592,21 +727,33 @@
             case T_EVISCERATE:
 		/*only when empty handed, in human form!*/
 		if (Upolyd) {
+/*JP
 		        You("can't do this while polymorphed!");
+*/
+		        You("変化中はその技能を使えない！");
 		        break;
 		}
 		if (!uwep) {
+/*JP
 		        Your("fingernails extend into claws!");
+*/
+		        Your("爪は鋭く尖った！");
 		        aggravate();
                         techt_inuse(tech_no) = d(2,4) + (techlev(tech_no)/5) + 2; /* [max] was d(2,8) */
                         t_timeout = rn1(1000,1000); /* [max] increased delay */
 		} else {
+/*JP
 		    You("can't do this while holding a weapon!");
+*/
+		    pline("武器を持っている間は爪を変化させられない！");
 		    return(0);
 		}
 		break;
             case T_BERSERK:
+/*JP
 		You("fly into a berserk rage!");
+*/
+		You("内から沸き立つ兇暴な感情を爆発させた！");
 		techt_inuse(tech_no) = d(2,8) +
                		(techlev(tech_no)/5) + 2;
 		incr_itimeout(&HFast, techt_inuse(tech_no));
@@ -615,35 +762,58 @@
             case T_REINFORCE:
 		/* WAC spell-users can study their known spells*/
 		if(Hallucination || Stunned || Confusion) {
+/*JP
 		    You("can't concentrate right now!");
+*/
+		    You("この状態では集中できない！");
 		    break;
                	} else {
+/*JP
 		    You("concentrate...");
+*/
+		    You("集中した．．．");
 		    if (studyspell()) t_timeout = rn1(1000,500); /*in spell.c*/
 		}
                break;
             case T_FLURRY:
+#if 0 /*JP*/
                 Your("%s %s become blurs as they reach for your quiver!",
 			uarmg ? "gloved" : "bare",      /* Del Lamb */
 			makeplural(body_part(HAND)));
+#else /*小手をつけているかどうかは省略*/
+                Your("矢筒にやる%sが，かすむほど素早く動いた！",
+			makeplural(body_part(HAND)));
+#endif
                 techt_inuse(tech_no) = rnd((int) (techlev(tech_no)/6 + 1)) + 2;
                 t_timeout = rn1(1000,500);
 		break;
             case T_PRACTICE:
                 if(!uwep || (weapon_type(uwep) == P_NONE)) {
+/*JP
 		    You("are not wielding a weapon!");
+*/
+		    You("武器を装備していない！");
 		    return(0);
 		} else if(uwep->known == TRUE) {
                     practice_weapon();
 		} else {
                     if (not_fully_identified(uwep)) {
+/*JP
                         You("examine %s.", doname(uwep));
+*/
+                        You("%sを調べた．", doname(uwep));
                             if (rnd(15) <= ACURR(A_INT)) {
                                 makeknown(uwep->otyp);
                                 uwep->known = TRUE;
+/*JP
                                 You("discover it is %s",doname(uwep));
+*/
+                                You("それが%sであるとわかった．",doname(uwep));
                                 } else
+/*JP
                      pline("Unfortunately, you didn't learn anything new.");
+*/
+                     pline("不幸な事に，何ら得るものは無かった．");
                     } 
                 /*WAC Added practicing code - in weapon.c*/
                     practice_weapon();
@@ -652,23 +822,35 @@
 		break;
             case T_SURGERY:
 		if (Hallucination || Stunned || Confusion) {
+/*JP
 		    You("are in no condition to perform surgery!");
+*/
+		    You("とても手術にかかれる状態ではない！");
 		    break;
 		}
 		if ((Sick) || (Slimed)) {       /* WAC cure sliming too */
 		    if(carrying(SCALPEL)) {
+/*JP
 			pline("Using your scalpel (ow!), you cure your infection!");
+*/
+			You("メスを手に，自分で自分を（！）手術した．");
 			make_sick(0L,(char *)0, TRUE,SICK_ALL);
 			Slimed = 0;
 			if(u.uhp > 6) u.uhp -= 5;
 			else          u.uhp = 1;
                         t_timeout = rn1(500,500);
 			break;
+/*JP
 		    } else pline("If only you had a scalpel...");
+*/
+		    } else pline("メスさえあれば．．．");
 		}
 		if (u.uhp < u.uhpmax) {
 		    otmp = use_medical_kit(BANDAGE, FALSE,
+/*JP
 			    "bandage your wounds with");
+*/
+			    "傷に包帯を巻く");
 		    if (otmp) {
 			check_unpaid(otmp);
 			if (otmp->quan > 1L)
@@ -677,31 +859,51 @@
 			    obj_extract_self(otmp);
 			    obfree(otmp, (struct obj *)0);
 			}
+/*JP
 			pline("Using %s, you bandage your wounds.", yname(otmp));
+*/
+			You("%sを傷口に巻いた．", yname(otmp));
 			u.uhp += (techlev(tech_no) * (rnd(2)+1)) + rn1(5,5);
 		    } else {
+/*JP
 			pline("You strap your wounds as best you can.");
+*/
+			You("とりあえず傷口を縛った．");
 			u.uhp += (techlev(tech_no)) + rn1(5,5);
 		    }
                     t_timeout = rn1(1000,500);
 		    if (u.uhp > u.uhpmax) u.uhp = u.uhpmax;
 		    flags.botl = TRUE;
+/*JP
 		} else pline("You don't need your healing powers!");
+*/
+		} else pline("あなたは治療の必要はない！");
 		break;
             case T_HEAL_HANDS:
 		if (u.uhp < u.uhpmax || Sick || Slimed) { /*WAC heal sliming */
+/*JP
 			if (Sick) You("lay your hands on the foul sickness...");
 			pline("A warm glow spreads through your body!");
 			if (Slimed) pline_The("slime is removed.");
+*/
+			if (Sick) You("患部に%sをかざした．．．", makeplural(body_part(HAND)));
+			pline("あたたかい力があなたの身体に広がった！");
+			if (Slimed) pline("スライムは取り除かれた．");
 			Slimed = 0;
 			if(Sick) make_sick(0L,(char*)0, TRUE, SICK_ALL);
 			else     u.uhp += (techlev(tech_no) * 4);
 			if (u.uhp > u.uhpmax) u.uhp = u.uhpmax;
                         t_timeout = 3000;
+/*JP
 		} else pline("Nothing happens...");
+*/
+		} else pline("何も起きなかった．．．");
 		break;
             case T_KIII:
+/*JP
 		You("scream \"KIIILLL!\"");
+*/
+		You("叫んだ．「殺してやる殺してやる殺してやる．．．！」");
 		aggravate();
                 techt_inuse(tech_no) = rnd((int) (techlev(tech_no)/6 + 1)) + 2;
                 t_timeout = rn1(1000,500);
@@ -709,22 +911,35 @@
 #ifdef STEED
 	    case T_CALM_STEED:
                 if (u.usteed) {
+/*JP
                         pline("%s gets tamer.", Monnam(u.usteed));
+*/
+                        pline("%sは調教された．", Monnam(u.usteed));
                         tamedog(u.usteed, (struct obj *) 0);
                         t_timeout = rn1(1000,500);
                 } else
+/*JP
                         Your("technique is only effective when riding a monster.");
+*/
+                        pline("この技能は乗馬中でないと使用できない．");
                 break;
 #endif
             case T_TURN_UNDEAD:
                 return(turn_undead());
 	    case T_VANISH:
 		if (Invisible && Fast) {
+/*JP
 			You("are already quite nimble and undetectable.");
+*/
+			You("既に素早いし敵に気づかれもしない．");
 		}
                 techt_inuse(tech_no) = rn1(50,50) + techlev(tech_no);
+/*JP
 		if (!Invisible) pline("In a puff of smoke,  you disappear!");
 		if (!Fast) You("feel more nimble!");
+*/
+		if (!Invisible) Your("姿は煙と共に消え失せた！");
+		if (!Fast) You("更に素早くなったような気がした！");
 		incr_itimeout(&HInvis, techt_inuse(tech_no));
 		incr_itimeout(&HFast, techt_inuse(tech_no));
 		newsym(u.ux,u.uy);      /* update position */
@@ -734,12 +949,18 @@
 		if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
 		    /* Hopefully a mistake ;B */
+/*JP
 		    You("decide against that idea.");
+*/
+		    pline("それは良い考えとはいえない．");
 		    return(0);
 		}
 		mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 		if (!mtmp) {
+/*JP
 		    You("perform a flashy twirl!");
+*/
+		    Your("攻撃は派手に宙をきった！");
 		    return (0);
 		} else {
 		    int oldhp = mtmp->mhp;
@@ -748,7 +969,10 @@
 		    if (!attack(mtmp)) return(0);
 		    if (!DEADMONSTER(mtmp) && mtmp->mhp < oldhp &&
 			    !noncorporeal(mtmp->data) && !unsolid(mtmp->data)) {
+/*JP
 			You("strike %s vital organs!", s_suffix(mon_nam(mtmp)));
+*/
+			You("%sの重要な臓器を攻撃した！", mon_nam(mtmp));
 			/* Base damage is always something, though it may be
 			 * reduced to zero if the hero is hampered. However,
 			 * since techlev will never be zero, stiking vital
@@ -757,7 +981,10 @@
 			tmp = mtmp->mhp > 1 ? mtmp->mhp / 2 : 1;
 			if (!humanoid(mtmp->data) || is_golem(mtmp->data) ||
 				mtmp->data->mlet == S_CENTAUR) {
+/*JP
 			    You("are hampered by the differences in anatomy.");
+*/
+			    pline("相手の身体構造が人間とは違っていたため弱点を突けなかった．");
 			    tmp /= 2;
 			}
 			tmp += techlev(tech_no);
@@ -768,18 +995,28 @@
 		break;
 	    case T_CUTTHROAT:
 		if (!is_blade(uwep)) {
+#if 0 /*JP*/
 			You("need a blade to perform cutthroat!");
+#else
+			pline("首を掻き切るには刃のついた武器が必要だ．");
+#endif
 			return (0);
 		}
 	    	if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
 			/* Hopefully a mistake ;B */
+/*JP
 			pline("Things may be going badly,  but that's extreme.");
+*/
+			pline("失敗しそうだ．派手ではあるが．");
 			return(0);
 		}
 		mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 		if (!mtmp) {
+/*JP
 			You("attack...nothing!");
+*/
+			You("何も無い空間に攻撃した．");
 			return (0);
 		} else {
 			int oldhp = mtmp->mhp;
@@ -788,13 +1025,26 @@
 			if (!DEADMONSTER(mtmp) && mtmp->mhp < oldhp) {
 				int tmp = 0;
 				if (!has_head(mtmp->data) || u.uswallow) {
+#if 0 /*JP*/
 					You("can't perform cutthroat on %s!",mon_nam(mtmp));
+#else
+					/*[喉掻き切り->首刎ね]pline("掻き切ろうにも%sには喉が無い！",mon_nam(mtmp));*/
+					pline("%sの首が見当たらない！",mon_nam(mtmp));
+#endif
 				}
 				if (rn2(5) < (techlev(tech_no)/10 + 1)) {
+#if 0 /*JP*/
 					You("sever %s head!", s_suffix(mon_nam(mtmp)));
+#else
+					/*[喉掻き切り->首刎ね] You("%sの喉を掻き切った！", s_suffix(mon_nam(mtmp)));*/
+					You("%sの首を掻き切った！", s_suffix(mon_nam(mtmp)));
+#endif
 					tmp = mtmp->mhp;
 				} else {
+/*JP
 					You("hurt %s badly!", s_suffix(mon_nam(mtmp)));
+*/
+					You("%sに重傷を負わせた！", s_suffix(mon_nam(mtmp)));
 					tmp = mtmp->mhp / 2;
 				}
 				tmp += techlev(tech_no);
@@ -806,33 +1056,55 @@
 	    case T_BLESSING:
 		allowall[0] = ALL_CLASSES; allowall[1] = '\0';
 		
+/*JP
 		if ( !(obj = getobj(allowall, "bless"))) return(0);
 		pline("An aura of holiness surrounds your hands!");
+*/
+		if ( !(obj = getobj(allowall, "祝福する"))) return(0);
+		pline("聖なるオーラがあなたの%sを包んだ！", makeplural(body_part(HAND)));
                 if (!Blind) (void) Shk_Your(Your_buf, obj);
 		if (obj->cursed) {
                 	if (!Blind)
+#if 0 /*JP*/
                     		pline("%s %s %s.",Your_buf,
 						  aobjnam(obj, "softly glow"),
 						  hcolor(NH_AMBER));
+#else
+				pline("%s%sは%sやわらかく輝いた．", Your_buf,
+						  xname(obj), 
+						  jconj_adj(hcolor(NH_AMBER)));
+#endif
 				uncurse(obj);
 				obj->bknown=1;
 		} else if(!obj->blessed) {
 			if (!Blind) {
+#if 0 /*JP*/
 				str = hcolor(NH_LIGHT_BLUE);
 				pline("%s %s with a%s %s aura.",
 					  Your_buf,
 					  aobjnam(obj, "softly glow"),
 					  index(vowels, *str) ? "n" : "", str);
+#else
+				pline("%s%sは%sのオーラに包まれた．", Your_buf,
+						  xname(obj), 
+						  jconj_adj(hcolor(NH_LIGHT_BLUE)));
+#endif
 			}
 			bless(obj);
 			obj->bknown=1;
 		} else {
 			if (obj->bknown) {
+/*JP
 				pline ("That object is already blessed!");
+*/
+				pline ("その品は既に祝福されている！");
 				return(0);
 			}
 			obj->bknown=1;
+/*JP
 			pline("The aura fades.");
+*/
+			pline("オーラは消えた．");
 		}
 		t_timeout = rn1(1000,500);
 		break;
@@ -846,7 +1118,10 @@
 		t_timeout = rn1(1000,500);
 	    	break;
 	    case T_PRIMAL_ROAR:	    	
+/*JP
 	    	You("let out a bloodcurdling roar!");
+*/
+	    	You("身の毛もよだつ雄叫びをあげた！");
 	    	aggravate();
 
 		techt_inuse(tech_no) = d(2,6) + (techlev(tech_no)) + 2;
@@ -881,44 +1156,75 @@
     		cc.x = sx = u.ux;
 		cc.y = sy = u.uy;
 
+/*JP
 		getpos(&cc, TRUE, "the desired position");
+*/
+		getpos(&cc, TRUE, "希望する位置");
 		if(cc.x == -10) return 0; /* user pressed esc */
 
 		dx = cc.x - u.ux;
 		dy = cc.y - u.uy;
 		/* allow diagonals */
 	    	if ((dx && dy) && (dx != dy) && (dx != -dy)) {
+/*JP
 	    		You("can only leap in straight lines!");
+*/
+			You("直線上でないと移動できない！");
 			return (0);
 	    	} else if (distu(cc.x, cc.y) > (19 + techlev(tech_no))) {
+/*JP
 	    		pline("Too far!");
+*/
+			pline("遠すぎる！");
 			return (0);
 		} else if (((mtmp = m_at(cc.x, cc.y)) != 0) ||
 		    (!isok(cc.x, cc.y) ||
 		    ((IS_ROCK(levl[cc.x][cc.y].typ) ||
 		     sobj_at(BOULDER, cc.x, cc.y) || closed_door(cc.x, cc.y))))) {
+#if 0 /*JP*/
 			You("cannot flow there!"); /* MAR */
+#else
+			You("そこには流れ込めない！");
+#endif
 			return (0);
 		} else {
+/*JP
 		    You("liquify!");
+*/
+		    You("液体と化した！");
 		    if(u.utrap) {
 			switch(u.utraptype) {
 			    case TT_BEARTRAP: 
+/*JP
 				You("slide out of the bear trap.");
+*/
+				You("熊の罠から抜け出した．");
 				break;
 			    case TT_PIT:
+/*JP
 				You("leap from the pit!");
+*/
+				You("落し穴から流れ出た！");
 				break;
 			    case TT_WEB:
+/*JP
 				You("flow through the web!");
+*/
+				You("蜘蛛の巣を透過した！");
 				break;
 			    case TT_LAVA:
+/*JP
 				You("separate from the lava!");
+*/
+				You("溶岩から分離した！");
 				u.utrap = 0;
 				break;
 			    case TT_INFLOOR:
 				u.utrap = 0;
+/*JP
 				You("ooze out of the floor!");
+*/
+				You("床から流れて抜けた！");
 			}
 			u.utrap = 0;
 		    }
@@ -945,15 +1251,24 @@
 		    	    if (!chance || (3 - chance) > AC_VALUE(find_mac(mtmp)))
 		    	    	break;
 			    setmangry(mtmp);
+/*JP
 		    	    You("catch %s in your acid trail!", mon_nam(mtmp));
+*/
+		    	    You("通り道に残した酸の跡に%sを巻き込んだ！", mon_nam(mtmp));
 		    	    if (!resists_acid(mtmp)) {
 				int tmp = 1;
 				/* Need to add a to-hit */
 				tmp += d(2,4);
 				tmp += rn2((int) (techlev(tech_no)/5 + 1));
+/*JP
 				if (!Blind) pline_The("acid burns %s!", mon_nam(mtmp));
+*/
+				if (!Blind) pline("酸は%sを焼いた！", mon_nam(mtmp));
 				hurtmon(mtmp, tmp);
+/*JP
 			    } else if (!Blind) pline_The("acid doesn't affect %s!", mon_nam(mtmp));
+*/
+			    } else if (!Blind) pline("酸は%sには効果がなかった！", mon_nam(mtmp));
 			}
 			/* Clean up */
 			tmp_at(DISP_END,0);
@@ -963,7 +1278,10 @@
 		    /* A little Sokoban guilt... */
 		    if (In_sokoban(&u.uz))
 			change_luck(-1);
+/*JP
 		    You("reform!");
+*/
+		    You("元の姿に戻った！");
 		    teleds(cc.x, cc.y, FALSE);
 		    nomul(-1);
 		    nomovemsg = "";
@@ -975,13 +1293,19 @@
 		/* Have enough power? */
 		num = 50 - techlev(tech_no)/5;
 		if (u.uen < num) {
+/*JP
 			You("don't have enough power to invoke the sigil!");
+*/
+			You("印を結ぶ充分な魔力が無い！");
 			return (0);
 		}
 		u.uen -= num;
 
 		/* Invoke */
+/*JP
 		You("invoke the sigil of tempest!");
+*/
+		You("嵐の印を結んだ！");
                 techt_inuse(tech_no) = d(1,6) + rnd(techlev(tech_no)/5 + 1) + 2;
 		u_wipe_engr(2);
 		return(0);
@@ -990,13 +1314,19 @@
 		/* Have enough power? */
 		num = 30 - techlev(tech_no)/5;
 		if (u.uen < num) {
+/*JP
 			You("don't have enough power to invoke the sigil!");
+*/
+			You("印を結ぶ充分な魔力が無い！");
 			return (0);
 		}
 		u.uen -= num;
 
 		/* Invoke */
+/*JP
 		You("invoke the sigil of control!");
+*/
+		You("操りの印を結んだ！");
                 techt_inuse(tech_no) = d(1,4) + rnd(techlev(tech_no)/5 + 1) + 2;
 		u_wipe_engr(2);
 		return(0);
@@ -1005,13 +1335,19 @@
 		/* Have enough power? */
 		num = 100 - techlev(tech_no)/5;
 		if (u.uen < num) {
+/*JP
 			You("don't have enough power to invoke the sigil!");
+*/
+			You("印を結ぶ充分な魔力が無い！");
 			return (0);
 		}
 		u.uen -= num;
 
 		/* Invoke */
+/*JP
 		You("invoke the sigil of discharge!");
+*/
+		You("解放の印を結んだ！");
                 techt_inuse(tech_no) = d(1,4) + rnd(techlev(tech_no)/5 + 1) + 2;
 		u_wipe_engr(2);
 		return(0);
@@ -1019,7 +1355,10 @@
             case T_RAISE_ZOMBIES: {
             	int x,y;
             	
+/*JP
             	You("chant the ancient curse...");
+*/
+            	You("太古の呪いを詠唱した．．．");
 		for (i=0; i<3; i++) for (j=0; j<3; j++) {
 	            x = u.ux + i - 1; y = u.uy + j - 1;
 			if (OBJ_AT(x,y)) {
@@ -1035,7 +1374,10 @@
 					if (mtmp) {
 				    	    if (!resist(mtmp, SPBOOK_CLASS, 0, TELL)) {
 			                       mtmp = tamedog(mtmp, (struct obj *) 0);
+/*JP
 			                       You("dominate %s!", mon_nam(mtmp));
+*/
+			                       You("%sを支配した！", mon_nam(mtmp));
 		                            } else setmangry(mtmp);
 					}
 				    }
@@ -1054,11 +1396,17 @@
 		}
             	num = 100 - techlev(tech_no); /* WAC make this depend on mon? */
             	if ((Upolyd && u.mh <= num) || (!Upolyd && u.uhp <= num)){
+/*JP
 		    You("don't have the strength to perform revivification!");
+*/
+		    You("蘇生を行うだけの充分な力が無い！");
 		    return 0;
             	}
 
+/*JP
             	obj = getobj((const char *)revivables, "revive");
+*/
+            	obj = getobj((const char *)revivables, "蘇生する");
             	if (!obj) return (0);
             	mtmp = revive(obj);
             	if (mtmp) {
@@ -1080,7 +1428,10 @@
 		/* Already have it intrinsically? */
 		if (HFire_resistance & FROMOUTSIDE) return (0);
 
+/*JP
 		You("invoke the ward against flame!");
+*/
+		You("火除けの呪言を唱えた！");
 		HFire_resistance += rn1(100,50);
 		HFire_resistance += techlev(tech_no);
 		t_timeout = rn1(1000,500);
@@ -1090,7 +1441,10 @@
 		/* Already have it intrinsically? */
 		if (HCold_resistance & FROMOUTSIDE) return (0);
 
+/*JP
 		You("invoke the ward against ice!");
+*/
+		You("冷気除けの呪言を唱えた！");
 		HCold_resistance += rn1(100,50);
 		HCold_resistance += techlev(tech_no);
 		t_timeout = rn1(1000,500);
@@ -1100,7 +1454,10 @@
 		/* Already have it intrinsically? */
 		if (HShock_resistance & FROMOUTSIDE) return (0);
 
+/*JP
 		You("invoke the ward against lightning!");
+*/
+		You("雷除けの呪言を唱えた！");
 		HShock_resistance += rn1(100,50);
 		HShock_resistance += techlev(tech_no);
 		t_timeout = rn1(1000,500);
@@ -1108,25 +1465,46 @@
 	    	break;
 	    case T_TINKER:
 		if (Blind) {
+/*JP
 			You("can't do any tinkering if you can't see!");
+*/
+			You("目が見えないので細工ができない！");
 			return (0);
 		}
 		if (!uwep) {
+/*JP
 			You("aren't holding an object to work on!");
+*/
+			You("作業すべき品を手にしていない！");
 			return (0);
 		}
+#if 0 /*JP*/
 		You("are holding %s.", doname(uwep));
 		if (yn("Start tinkering on this?") != 'y') return(0);
 		You("start working on %s",doname(uwep));
+#else
+		You("%sを手にしている．", doname(uwep));
+		if (yn("これに細工を加えますか？") != 'y') return(0);
+		You("%sの加工をはじめた．",doname(uwep));
+#endif
 		delay=-150 + techlev(tech_no);
+/*JP
 		set_occupation(tinker, "tinkering", 0);
+*/
+		set_occupation(tinker, "細工する", 0);
 		break;
 	    case T_RAGE:     	
 		if (Upolyd) {
+/*JP
 			You("cannot focus your anger!");
+*/
+			You("怒りを一点に集中できない！");
 			return(0);
 		}
+/*JP
 	    	You("feel the anger inside you erupt!");
+*/
+	    	You("内なる怒りの爆発を感じた！");
 		num = 50 + (4 * techlev(tech_no));
 	    	techt_inuse(tech_no) = num + 1;
 		u.uhpmax += num;
@@ -1134,7 +1512,10 @@
 		t_timeout = rn1(1000,500);
 		break;	    
 	    case T_BLINK:
+/*JP
 	    	You("feel the flow of time slow down.");
+*/
+	    	You("時の流れが遅くなったように感じた．");
                 techt_inuse(tech_no) = rnd(techlev(tech_no) + 1) + 2;
 		t_timeout = rn1(1000,500);
 	    	break;
@@ -1144,56 +1525,95 @@
 		break;
             case T_DRAW_ENERGY:
             	if (u.uen == u.uenmax) {
+#if 0 /*JP*/
             		if (Hallucination) You("are fully charged!");
 			else You("cannot hold any more energy!");
+#else
+            		if (Hallucination) You("めいっぱい充電されてます！");
+			else You("これ以上魔力を吸収できない！");
+#endif
 			return(0);           		
             	}
+/*JP
                 You("begin drawing energy from your surroundings!");
+*/
+                You("周囲の魔力を吸収し始めた！");
 		delay=-15;
+/*JP
 		set_occupation(draw_energy, "drawing energy", 0);                
+*/
+		set_occupation(draw_energy, "魔力を吸収する", 0);                
                 t_timeout = rn1(1000,500);
 		break;
             case T_CHI_HEALING:
             	if (u.uen < 1) {
+/*JP
             		You("are too weak to attempt this!");
+*/
+            		You("それを行うにはあまりにも衰弱しすぎている！");
             		return(0);
             	}
+/*JP
 		You("direct your internal energy to restoring your body!");
+*/
+		You("内なる力を肉体の再生の為に注ぎこんだ！");
                 techt_inuse(tech_no) = techlev(tech_no)*2 + 4;
                 t_timeout = rn1(1000,500);
 		break;	
 	    case T_DISARM:
 	    	if (P_SKILL(weapon_type(uwep)) == P_NONE) {
+/*JP
 	    		You("aren't wielding a proper weapon!");
+*/
+	    		You("適切な武器を装備していない！");
 	    		return(0);
 	    	}
 	    	if ((P_SKILL(weapon_type(uwep)) < P_SKILLED) || (Blind)) {
+/*JP
 	    		You("aren't capable of doing this!");
+*/
+	    		pline("あなたにはそれを扱う能力がない！");
 	    		return(0);
 	    	}
 		if (u.uswallow) {
+/*JP
 	    		pline("What do you think %s is?  A sword swallower?",
 				mon_nam(u.ustuck));
+*/
+	    		pline("%sを何だと思ってるんだい？ 剣呑みの大道芸人だとでも？",
+				mon_nam(u.ustuck));
 	    		return(0);
 		}
 
 	    	if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
 			/* Hopefully a mistake ;B */
+/*JP
 			pline("Why don't you try wielding something else instead.");
+*/
+			pline("代わりに他の相手を狙ってみたら？");
 			return(0);
 		}
 		mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 		if (!mtmp || !canspotmon(mtmp)) {
 			if (memory_is_invisible(u.ux + u.dx, u.uy + u.dy))
+/*JP
 			    You("don't know where to aim for!");
+*/
+			    You("どの部位を狙えばよいかわからない！");
 			else
+/*JP
 			    You("don't see anything there!");
+*/
+			    pline("そこには何もいないように見える．");
 			return (0);
 		}
 	    	obj = MON_WEP(mtmp);   /* can be null */
 	    	if (!obj) {
+/*JP
 	    		You_cant("disarm an unarmed foe!");
+*/
+	    		pline("丸腰の相手に対して武器落としは意味が無い！");
 	    		return(0);
 	    	}
 		/* Blindness dealt with above */
@@ -1202,13 +1622,19 @@
 				|| obj->oinvis && !See_invisible
 #endif
 				) {
+/*JP
 	    		You_cant("see %s weapon!", s_suffix(mon_nam(mtmp)));
+*/
+	    		You("%sの武器が見えない！", mon_nam(mtmp));
 	    		return(0);
 		}
 		num = ((rn2(techlev(tech_no) + 15)) 
 			* (P_SKILL(weapon_type(uwep)) - P_SKILLED + 1)) / 10;
 
+/*JP
 		You("attempt to disarm %s...",mon_nam(mtmp));
+*/
+		You("%sの武器を叩き落そうとした．．．",mon_nam(mtmp));
 		/* WAC can't yank out cursed items */
                 if (num > 0 && (!Fumbling || !rn2(10)) && !obj->cursed) {
 		    int roll;
@@ -1220,8 +1646,12 @@
 		    switch (roll) {
 			case 2:
 			    /* to floor near you */
+/*JP
 			    You("knock %s %s to the %s!",
 				s_suffix(mon_nam(mtmp)),
+*/
+			    You("%sの%sを%sに叩き落した！",
+				mon_nam(mtmp),
 				xname(obj),
 				surface(u.ux, u.uy));
 			    if (obj->otyp == CRYSKNIFE &&
@@ -1244,7 +1674,10 @@
 					dmgval(obj, &youmonst),
 					obj, xname(obj));
 				if (hitu)
+/*JP
 				    pline("%s hits you as you try to snatch it!",
+*/
+				    pline("%sを奪おうとしたらあなたに当たった！",
 					    The(xname(obj)));
 				place_object(obj, u.ux, u.uy);
 				stackobj(obj);
@@ -1252,7 +1685,10 @@
 			    }
 #endif /* 0 */
 			    /* right into your inventory */
+/*JP
 			    You("snatch %s %s!", s_suffix(mon_nam(mtmp)),
+*/
+			    You("%sの%sを奪った！", mon_nam(mtmp),
 				    xname(obj));
 			    if (obj->otyp == CORPSE &&
 				    touch_petrifies(&mons[obj->corpsenm]) &&
@@ -1261,17 +1697,31 @@
 					polymon(PM_STONE_GOLEM))) {
 				char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 				Sprintf(kbuf, "%s corpse",
 					an(mons[obj->corpsenm].mname));
+#else
+				Sprintf(kbuf, "%sの死体",
+					jtrns_mon(mons[obj->corpsenm].mname));
+#endif
+/*JP
 				pline("Snatching %s is a fatal mistake.", kbuf);
+*/
+				pline("%sを奪ったのは致命的なミスだ．", kbuf);
 				instapetrify(kbuf);
 			    }
+/*JP
 			    obj = hold_another_object(obj, "You drop %s!",
+*/
+			    obj = hold_another_object(obj, "%sを落した！",
 				    doname(obj), (const char *)0);
 			    break;
 			default:
 			    /* to floor beneath mon */
+/*JP
 			    You("knock %s from %s grasp!", the(xname(obj)),
+*/
+			    You("%sを%sの握りからひっぱった！", the(xname(obj)),
 				    s_suffix(mon_nam(mtmp)));
 			    if (obj->otyp == CRYSKNIFE &&
 				    (!obj->oerodeproof || !rn2(10))) {
@@ -1283,9 +1733,15 @@
 			    break;
 		    }
 		} else if (mtmp->mcanmove && !mtmp->msleeping)
+/*JP
 		    pline("%s evades your attack.", Monnam(mtmp));
+*/
+		    pline("%sはあなたの攻撃をかわした．", Monnam(mtmp));
 		else
+/*JP
 		    You("fail to dislodge %s %s.", s_suffix(mon_nam(mtmp)),
+*/
+		    You("%sの%sを叩き落す事に失敗した．", s_suffix(mon_nam(mtmp)),
 			    xname(obj));
 		wakeup(mtmp);
 		if (!mtmp->mcanmove && !rn2(10)) {
@@ -1296,13 +1752,19 @@
 	    case T_DAZZLE:
 	    	/* Short range stun attack */
 	    	if (Blind) {
+/*JP
 	    		You("can't see anything!");
+*/
+	    		You("何も見えない！");
 	    		return(0);
 	    	}
 	    	if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
 			/* Hopefully a mistake ;B */
+/*JP
 			You("can't see yourself!");
+*/
+			You("あなた自身の位置がわからない！");
 			return(0);
 		}
 		for(i = 0; (i  <= ((techlev(tech_no) / 8) + 1) 
@@ -1311,29 +1773,53 @@
 		    if (mtmp && canseemon(mtmp)) break;
 		}
 		if (!mtmp || !canseemon(mtmp)) {
+/*JP
 			You("fail to make eye contact with anything!");
+*/
+			You("見つめるべき相手が見当たらない！");
 			return (0);
 		}
+/*JP
                 You("stare at %s.", mon_nam(mtmp));
+*/
+                You("%sを見つめた．", mon_nam(mtmp));
                 if (!haseyes(mtmp->data))
+/*JP
                 	pline("..but %s has no eyes!", mon_nam(mtmp));
+*/
+                	pline("．．しかし%sには目がない！", mon_nam(mtmp));
                 else if (!mtmp->mcansee)
+/*JP
                 	pline("..but %s cannot see you!", mon_nam(mtmp));
+*/
+                	pline("．．しかし%sはあなたを見る事が出来ない！", mon_nam(mtmp));
                 if ((rn2(6) + rn2(6) + (techlev(tech_no) - mtmp->m_lev)) > 10) {
+/*JP
 			You("dazzle %s!", mon_nam(mtmp));
+*/
+			You("%sを金縛りにした！", mon_nam(mtmp));
 			mtmp->mcanmove = 0;
 			mtmp->mfrozen = rnd(10);
 		} else {
+/*JP
                        pline("%s breaks the stare!", Monnam(mtmp));
+*/
+                       pline("%sはにらみを打ち破った！", Monnam(mtmp));
 		}
                	t_timeout = rn1(50,25);
 	    	break;
 	    case T_BLITZ:
 	    	if (uwep || (u.twoweap && uswapwep)) {
+/*JP
 			You("can't do this while wielding a weapon!");
+*/
+			pline("武器を持っていてはこの技は使えない！");
 	    		return(0);
 	    	} else if (uarms) {
+/*JP
 			You("can't do this while holding a shield!");
+*/
+			pline("盾を持っていてはこの技は使えない！");
 	    		return(0);
 	    	}
 	    	if (!doblitz()) return (0);		
@@ -1342,15 +1828,24 @@
 	    	break;
             case T_PUMMEL:
 	    	if (uwep || (u.twoweap && uswapwep)) {
+/*JP
 			You("can't do this while wielding a weapon!");
+*/
+			pline("武器を持っていてはこの技は使えない！");
 	    		return(0);
 	    	} else if (uarms) {
+/*JP
 			You("can't do this while holding a shield!");
+*/
+			pline("盾を持っていてはこの技は使えない！");
 	    		return(0);
 	    	}
 		if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
+/*JP
 			You("flex your muscles.");
+*/
+			You("筋肉を曲げた．");
 			return(0);
 		}
             	if (!blitz_pummel()) return(0);
@@ -1358,15 +1853,24 @@
 		break;
             case T_G_SLAM:
 	    	if (uwep || (u.twoweap && uswapwep)) {
+/*JP
 			You("can't do this while wielding a weapon!");
+*/
+			pline("武器を持っていてはこの技は使えない！");
 	    		return(0);
 	    	} else if (uarms) {
+/*JP
 			You("can't do this while holding a shield!");
+*/
+			pline("盾を持っていてはこの技は使えない！");
 	    		return(0);
 	    	}
 		if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
+/*JP
 			You("flex your muscles.");
+*/
+			You("筋肉を曲げた．");
 			return(0);
 		}
             	if (!blitz_g_slam()) return(0);
@@ -1375,7 +1879,10 @@
             case T_DASH:
 		if (!getdir((char *)0)) return(0);
 		if (!u.dx && !u.dy) {
+/*JP
 			You("stretch.");
+*/
+			You("筋肉を伸ばした．");
 			return(0);
 		}
             	if (!blitz_dash()) return(0);
@@ -1387,10 +1894,16 @@
 		break;            	
             case T_SPIRIT_BOMB:
 	    	if (uwep || (u.twoweap && uswapwep)) {
+/*JP
 			You("can't do this while wielding a weapon!");
+*/
+			pline("武器を持っていてはこの技は使えない！");
 	    		return(0);
 	    	} else if (uarms) {
+/*JP
 			You("can't do this while holding a shield!");
+*/
+			pline("盾を持っていてはこの技は使えない！");
 	    		return(0);
 	    	}
 		if (!getdir((char *)0)) return(0);
@@ -1405,14 +1918,23 @@
 		     * potions of vampire blood would no longer be
 		     * appropriate.
 		     */
+/*JP
 		    You("must be in your natural form to draw blood.");
+*/
+		    pline("採血するには本来の姿に戻る必要がある．");
 		    return(0);
 		}
+/*JP
 		obj = use_medical_kit(PHIAL, TRUE, "draw blood with");
+*/
+		obj = use_medical_kit(PHIAL, TRUE, "採血する");
 		if (!obj)
 		    return 0;
 		if (u.ulevel <= 1) {
+/*JP
 		    You_cant("seem to find a vein.");
+*/
+		    You("静脈の位置がわからなかった．");
 		    return 0;
 		}
 		check_unpaid(obj);
@@ -1422,15 +1944,22 @@
 		    obj_extract_self(obj);
 		    obfree(obj, (struct obj *)0);
 		}
+/*JP
 		pline("Using your medical kit, you draw off a phial of your blood.");
 		losexp("drawing blood", TRUE);
+*/
+		pline("医療キットを使い，自分の血を一瓶抜き取った．");
+		losexp("血を抜いて", TRUE);
 		if (u.uexp > 0)
 		    u.uexp = newuexp(u.ulevel - 1);
 		otmp = mksobj(POT_VAMPIRE_BLOOD, FALSE, FALSE);
 		otmp->cursed = obj->cursed;
 		otmp->blessed = obj->blessed;
 		(void) hold_another_object(otmp,
+/*JP
 			"You fill, but have to drop, %s!", doname(otmp),
+*/
+			"いっぱいいっぱいで，%sを落とさなければならない！", doname(otmp),
 			(const char *)0);
 		t_timeout = rn1(1000, 500);
 		break;
@@ -1479,47 +2008,86 @@
 	        if (!(--techt_inuse(i)))
 	        switch (techid(i)) {
 		    case T_EVISCERATE:
+/*JP
 			You("retract your claws.");
+*/
+			You("爪を引っ込めた．");
 			/* You're using bare hands now,  so new msg for next attack */
 			unweapon=TRUE;
 			/* Lose berserk status */
 			repeat_hit = 0;
 			break;
 		    case T_BERSERK:
+/*JP
 			The("red haze in your mind clears.");
+*/
+			pline("心の中の赤いもやが晴れた．");
 			break;
 		    case T_KIII:
+/*JP
 			You("calm down.");
+*/
+			You("落ち着いた．");
 			break;
 		    case T_FLURRY:
+/*JP
 			You("relax.");
+*/
+			You("緊張が解けた．");
 			break;
 		    case T_E_FIST:
+/*JP
 			You("feel the power dissipate.");
+*/
+			You("力が消えたのを感じた．");
 			break;
 		    case T_SIGIL_TEMPEST:
+/*JP
 			pline_The("sigil of tempest fades.");
+*/
+			pline_The("嵐の印は消えていった．");
 			break;
 		    case T_SIGIL_CONTROL:
+/*JP
 			pline_The("sigil of control fades.");
+*/
+			pline_The("操りの印は消えていった．");
 			break;
 		    case T_SIGIL_DISCHARGE:
+/*JP
 			pline_The("sigil of discharge fades.");
+*/
+			pline_The("解放の印は消えていった．");
 			break;
 		    case T_RAGE:
+/*JP
 			Your("anger cools.");
+*/
+			Your("怒りは鎮まった．");
 			break;
 		    case T_POWER_SURGE:
+/*JP
 			pline_The("awesome power within you fades.");
+*/
+			pline("あなたの内の偉大な力は消えていった．");
 			break;
 		    case T_BLINK:
+/*JP
 			You("sense the flow of time returning to normal.");
+*/
+			pline("あなたの時の流れは元に戻った．");
 			break;
 		    case T_CHI_STRIKE:
+/*JP
 			You("feel the power in your hands dissipate.");
+*/
+			You("手に宿った力が消えたのを感じた．");
 			break;
 		    case T_CHI_HEALING:
+/*JP
 			You("feel the healing power dissipate.");
+*/
+			You("癒しの力が消えたのを感じた．");
 			break;
 	            default:
 	            	break;
@@ -1641,14 +2209,20 @@
 	    for(; tech->tech_id; tech++)
 		if(oldlevel < tech->ulevel && newlevel >= tech->ulevel) {
 		    if (tech->ulevel != 1 && !tech_known(tech->tech_id))
+/*JP
 			You("learn how to perform %s!",
+*/
+			You("%sの技能の使い方を覚えた！",
 			  tech_names[tech->tech_id]);
 		    learntech(tech->tech_id, mask, tech->tech_lev);
 		} else if (oldlevel >= tech->ulevel && newlevel < tech->ulevel
 		    && tech->ulevel != 1) {
 		    learntech(tech->tech_id, mask, -1);
 		    if (!tech_known(tech->tech_id))
+/*JP
 			You("lose the ability to perform %s!",
+*/
+			You("%sの技能の使い方を忘れてしまった！",
 			  tech_names[tech->tech_id]);
 		}
 	}
@@ -1695,7 +2269,10 @@
 	if (!uwep)
 		return (0);
 
+/*JP
 	You("finish your tinkering.");
+*/
+	You("加工を終えた．");
 	chance = 5;
 /*	chance += PSKILL(P_TINKER); */
 	if (rnl(10) < chance) {		
@@ -1705,7 +2282,10 @@
 	}
 
 	setuwep(otmp, FALSE);
+/*JP
 	You("now hold %s!", doname(otmp));
+*/
+	You("今%sを手にしている！", doname(otmp));
 	return(0);
 }
 
@@ -1768,12 +2348,18 @@
 		flags.botl = 1;
 		return(1); /* still busy */
 	}
+/*JP
 	You("finish drawing energy from your surroundings.");
+*/
+	You("周囲の魔力を吸収し終えた．");
 	return(0);
 }
 
 static const char 
+/*JP
 	*Enter_Blitz = "Enter Blitz Command[. to end]: ";
+*/
+	*Enter_Blitz = "コマンド入力[ピリオド(.)で終了]: ";
 
 /* Keep commands that reference the same blitz together 
  * Keep the BLITZ_START before the BLITZ_CHAIN before the BLITZ_END
@@ -1814,7 +2400,10 @@
 	}
 	
 	if (u.uen < 10) {
+/*JP
 		You("are too weak to attempt this!");
+*/
+		You("それを行えないほど衰弱している！");
             	return(0);
 	}
 
@@ -1904,7 +2493,10 @@
 		}
 	    }
 	    if (!done) {
+/*JP
 		You("stumble!");
+*/
+		You("こけた！");
 		return(1);
 	    }
     	}
@@ -1931,12 +2523,20 @@
 	start_menu(tmpwin);
 	any.a_void = 0;         /* zero out all bits */
 
+/*JP
         Sprintf(buf, "%16s %10s %-17s", "[LU = Left Up]", "[U = Up]", "[RU = Right Up]");
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
         Sprintf(buf, "%16s %10s %-17s", "[L = Left]", "", "[R = Right]");
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
         Sprintf(buf, "%16s %10s %-17s", "[LD = Left Down]", "[D = Down]", "[RD = Right Down]");
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);        
+*/
+        Sprintf(buf, "%16s %10s %-17s", "[LU = 左上]", "[U = 上]", "[RU = 右上]");
+	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
+        Sprintf(buf, "%16s %10s %-17s", "[L = 左]", "", "[R = 右]");
+	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
+        Sprintf(buf, "%16s %10s %-17s", "[LD = 左下]", "[D = 下]", "[RD = 右下]");
+	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);        
 
         Sprintf(buf, "%-30s %10s   %s", "Name", "Type", "Command");
 	add_menu(tmpwin, NO_GLYPH, &any, 0, 0, ATR_NONE, buf, MENU_UNSELECTED);
@@ -1947,18 +2547,30 @@
                     (i && blitzes[i].blitz_tech == blitzes[(i-1)].blitz_tech ?
                     	"" : tech_names[blitzes[i].blitz_tech]), 
                     (blitzes[i].blitz_type == BLITZ_START ? 
+/*JP
                     	"starter" :
+*/
+                    	"開始" :
                     	(blitzes[i].blitz_type == BLITZ_CHAIN ? 
+/*JP
 	                    	"chain" : 
+*/
+	                    	"連鎖" : 
 	                    	(blitzes[i].blitz_type == BLITZ_END ? 
+/*JP
                     			"finisher" : "unknown"))),
+*/
+                    			"決め技" : "不明"))),
                     blitzes[i].blitz_cmd);
 
 		add_menu(tmpwin, NO_GLYPH, &any,
                          0, 0, ATR_NONE, buf, MENU_UNSELECTED);
 	    }
 	}
+/*JP
         end_menu(tmpwin, "Currently known blitz manoeuvers");
+*/
+        end_menu(tmpwin, "現在判明している連続技の一覧");
 
 	n = select_menu(tmpwin, PICK_NONE, &selected);
 	destroy_nhwindow(tmpwin);
@@ -1977,10 +2589,16 @@
 	}
 
 	if (u.uen < 1) {
+/*JP
 		You("are too weak to attempt this!");
+*/
+		You("それを行えないほど衰弱している！");
             	return(0);
 	}
+/*JP
 	You("feel energy surge through your hands!");
+*/
+	You("拳が光ってうなるのを感じた！");
 	techt_inuse(tech_no) = techlev(tech_no) + 4;
 	return(1);
 }
@@ -1998,7 +2616,10 @@
 	}
 	
 	str = makeplural(body_part(HAND));
+/*JP
 	You("focus the powers of the elements into your %s.", str);
+*/
+	You("精霊の力を%sに込めた．", str);
 	techt_inuse(tech_no) = rnd((int) (techlev(tech_no)/3 + 1)) + d(1,4) + 2;
 	return 1;
 }
@@ -2015,11 +2636,17 @@
 		return(0);
 	}
 
+/*JP
 	You("let loose a barrage of blows!");
+*/
+	You("連続で拳を放った！");
 
 	mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 	if (!mtmp) {
+/*JP
 		You("strike nothing.");
+*/
+		pline("何にも当たらなかった．");
 		return (0);
 	}
 	if (!attack(mtmp)) return (0);
@@ -2052,7 +2679,10 @@
 
 	mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 	if (!mtmp) {
+/*JP
 		You("strike nothing.");
+*/
+		pline("何にも当たらなかった．");
 		return (0);
 	}
 	if (!attack(mtmp)) return (0);
@@ -2061,7 +2691,10 @@
 	mtmp = m_at(u.ux + u.dx, u.uy + u.dy);
 	if (!mtmp || u.uswallow) return(1);
 	
+/*JP
 	You("hurl %s downwards...", mon_nam(mtmp));
+*/
+	You("%sを下方に投げ飛ばした．．．", mon_nam(mtmp));
 	if (Is_airlevel(&u.uz) || Is_waterlevel(&u.uz)) return(1);
 	
 	tmp = (5 + rnd(6) + (techlev(tech_no) / 5));
@@ -2070,21 +2703,35 @@
 	if (chasm) {
 		chasm->tseen = 1;
 		levl[(u.ux + u.dx)][(u.uy + u.dy)].doormask = 0;
+/*JP
 		pline("%s slams into the ground, creating a crater!", Monnam(mtmp));
+*/
+		pline("%sは地面に叩き付けられ，クレーターが出来た！", Monnam(mtmp));
 		tmp *= 2;
 	}
 
+/*JP
 	mselftouch(mtmp, "Falling, ", TRUE);
+*/
+	mselftouch(mtmp, "落下中，", TRUE);
 	if (!DEADMONSTER(mtmp))
 	    if ((mtmp->mhp -= tmp) <= 0) {
 		if(!cansee(u.ux + u.dx, u.uy + u.dy))
+/*JP
 		    pline("It is destroyed!");
+*/
+		    pline("何者かは死んだ！");
 		else {
+#if 0 /*JP*/
 		    You("destroy %s!", 	
 		    	mtmp->mtame
 			    ? x_monnam(mtmp, ARTICLE_THE, "poor",
 				mtmp->mnamelth ? SUPPRESS_SADDLE : 0, FALSE)
 			    : mon_nam(mtmp));
+#else
+		    pline("%s%sは死んだ！", mtmp->mtame ? "かわいそうな" : "",
+			      mon_nam(mtmp));
+#endif
 
 		}
 		xkilled(mtmp,0);
@@ -2105,7 +2752,10 @@
 	}
 	
 	if ((!Punished || carried(uball)) && !u.utrap)
+/*JP
 	    You("dash forwards!");
+*/
+	    You("前方にダッシュした！");
 	hurtle(u.dx, u.dy, 2, FALSE);
 	multi = 0;		/* No paralysis with dash */
 	return 1;
@@ -2123,10 +2773,16 @@
 	}
 
 	if (Upolyd) {
+/*JP
 		You("cannot tap into your full potential in this form.");
+*/
+		pline("この姿ではあなたの力を最大限引き出す事はできない．");
 		return(0);
 	}
+/*JP
     	You("tap into the full extent of your power!");
+*/
+    	You("ステップを踏み，力を最大限まで高めた！");
 	num = 50 + (2 * techlev(tech_no));
     	techt_inuse(tech_no) = num + 1;
 	u.uenmax += num;
@@ -2147,10 +2803,16 @@
 		return(0);
 	}
 
+/*JP
 	You("gather your energy...");
+*/
+	You("エネルギーを集めはじめた．．．");
 	
 	if (u.uen < 10) {
+/*JP
 		pline("But it fizzles out.");
+*/
+		pline("しかしそれは散ってしまった．");
 		u.uen = 0;
 	}
 
diff -aurN slashem-0.0.7E6F2/src/teleport.c jslashem-0.0.7E6F2-J0.0.8/src/teleport.c
--- slashem-0.0.7E6F2/src/teleport.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/teleport.c	2004-06-27 16:55:14.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Masaki Miyaso, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL boolean FDECL(tele_jump_ok, (int,int,int,int));
@@ -644,7 +652,10 @@
 		yelp(mtmp);
 		return FALSE;
 	    } else {
+/*JP
 		Your("leash goes slack.");
+*/
+		Your("紐はたるんだ．");
  release_it:
 		m_unleash(mtmp, FALSE);
 		return TRUE;
@@ -663,7 +674,10 @@
 #ifdef WIZARD
 		if (!wizard) {
 #endif
+/*JP
 		    pline("A mysterious force prevents you from teleporting!");
+*/
+		    pline("奇妙な力が瞬間移動を防いだ！");
 		    return;
 #ifdef WIZARD
 		}
@@ -686,7 +700,10 @@
         && (!wizard) )
 #endif
 	{
+/*JP
 	    You_feel("disoriented for a moment.");
+*/
+	    You("一瞬方向感覚を失ったような気がした．");
 	    return;
 	}
 	if ((Teleport_control && !Stunned)
@@ -695,8 +712,12 @@
 #endif
 					) {
 	    if (unconscious()) {
+/*JP
 		pline("Being unconscious, you cannot control your teleport.");
+*/
+		pline("意識がないので，あなたは瞬間移動を制御できない．");
 	    } else {
+#if 0 /*JP*/
 #ifdef STEED
 		    char buf[BUFSZ];
 		    if (u.usteed) Sprintf(buf," and %s", mon_nam(u.usteed));
@@ -706,9 +727,15 @@
 				u.usteed ? buf :
 #endif
 			   "");
+#else /*JP*/
+		    pline("どの位置に瞬間移動しますか？");
+#endif /*JP*/
 		    cc.x = u.ux;
 		    cc.y = u.uy;
+/*JP
 		    if (getpos(&cc, TRUE, "the desired position") < 0)
+*/
+		    if (getpos(&cc, TRUE, "移動したい場所") < 0)
 			return;	/* abort */
 		    /* possible extensions: introduce a small error if
 		       magic power is low; allow transfer to solid rock */
@@ -716,7 +743,10 @@
 			teleds(cc.x, cc.y, FALSE);
 			return;
 		    }
+/*JP
 		    pline("Sorry...");
+*/
+		    pline("おっと．．．");
 		}
 	}
 
@@ -734,8 +764,14 @@
 
 	if (trap) {
 		if (trap->once) {
+/*JP
 			pline("This is a vault teleport, usable once only.");
+*/
+			pline("一度かぎりの倉庫への瞬間移動の罠だ．");
+/*JP
 			if (yn("Jump in?") == 'n')
+*/
+			if (yn("飛び込む？") == 'n')
 				trap = 0;
 			else {
 				deltrap(trap);
@@ -743,8 +779,12 @@
 			}
 		}
 		if (trap)
+#if 0 /*JP*/
 			You("%s onto the teleportation trap.",
 			    locomotion(youmonst.data, "jump"));
+#else
+			You("瞬間移動の罠に飛びこんだ．");
+#endif
 	}
 	if (!trap) {
 	    boolean castit = FALSE;
@@ -764,8 +804,14 @@
 #endif
 		    if (!castit) {
 			if (!Teleportation)
+/*JP
 			    You("don't know that spell.");
+*/
+			    You("そんな魔法は知らない．");
+/*JP
 			else You("are not able to teleport at will.");
+*/
+			else You("自分の意思で瞬間移動できない．");
 			return(0);
 		    }
 #ifdef WIZARD
@@ -777,8 +823,13 @@
 #ifdef WIZARD
 		if (!wizard) {
 #endif
+#if 0 /*JP*/
 			You("lack the strength %s.",
 			    castit ? "for a teleport spell" : "to teleport");
+#else
+			You("%sだけの力がない．",
+			    castit ? "瞬間移動の魔法を唱える" : "瞬間移動する");
+#endif
 			return 1;
 #ifdef WIZARD
 		}
@@ -793,14 +844,22 @@
 		else
 #endif
 		{
+#if 0 /*JP*/
 			You("lack the energy %s.",
 			    castit ? "for a teleport spell" : "to teleport");
+#else
+			You("%sだけのエネルギーがない．",
+			    castit ? "瞬間移動の魔法を唱える" : "瞬間移動する");
+#endif
 			return 1;
 		}
 	    }
 
 	    if (check_capacity(
+/*JP
 			"Your concentration falters from carrying so much."))
+*/
+			"沢山ものを持ちすぎて集中できない．"))
 		return 1;
 
 	    if (castit) {
@@ -848,7 +907,10 @@
 						&& !wizard
 #endif
 							) {
+/*JP
 	    You_feel("very disoriented for a moment.");
+*/
+	    You("一瞬方向感覚を大きく失ったような気がした．");
 	    return;
 	}
 	if ((Teleport_control && !Stunned)
@@ -859,26 +921,38 @@
 	    char qbuf[BUFSZ];
 	    int trycnt = 0;
 
+/*JP
 	    Strcpy(qbuf, "To what level do you want to teleport?");
+*/
+	    Strcpy(qbuf, "何階に移動しますか？");
 	    do {
 		if (++trycnt == 2) {
 #ifdef WIZARD
 			if (wizard) Strcat(qbuf, " [type a number or ? for a menu]");
 			else
 #endif
+/*JP
 			Strcat(qbuf, " [type a number]");
+*/
+			Strcat(qbuf, " [数字をいれてね]");
 		}
 		getlin(qbuf, buf);
 		if (!strcmp(buf,"\033")) {	/* cancelled */
 		    if (Confusion && rnl(5)) {
+/*JP
 			pline("Oops...");
+*/
+			pline("おっと．．．");
 			goto random_levtport;
 		    }
 		    return;
 		} else if (!strcmp(buf,"*")) {
 		    goto random_levtport;
 		} else if (Confusion && rnl(5)) {
+/*JP
 		    pline("Oops...");
+*/
+		    pline("おっと．．．");
 		    goto random_levtport;
 		}
 #ifdef WIZARD
@@ -930,19 +1004,48 @@
 	    if (newlev == 0) {
 		if (trycnt >= 10)
 		    goto random_levtport;
+/*JP
 		if (ynq("Go to Nowhere.  Are you sure?") != 'y') return;
+*/
+		if(ynq("どことも知れぬ場所に行きます？よろしいですか？") != 'y') return;
+#if 0 /*JP*/
 		You("%s in agony as your body begins to warp...",
 		    is_silent(youmonst.data) ? "writhe" : "scream");
+#else
+	        You("体が移動しはじめると，苦しみ%s．．．",
+		    is_silent(youmonst.data) ? "で身もだえした" : "のあえぎ声を出した");
+#endif
 		display_nhwindow(WIN_MESSAGE, FALSE);
+/*JP
 		You("cease to exist.");
+*/
+		You("存在が消滅した．");
+#if 0 /*JP:T*/
 		if (invent) Your("possessions land on the %s with a thud.",
 				surface(u.ux, u.uy));
+#else
+		if (invent) Your("持ちものはドサッと%sに落ちた．",
+				surface(u.ux, u.uy));
+#endif
+#if 0 /*JP*/
 		killer_format = NO_KILLER_PREFIX;
 		killer = "committed suicide";
+#else
+		killer_format = KILLED_BY;
+		killer = "自殺行為で";
+#endif
 		done(DIED);
+/*JP
 		pline("An energized cloud of dust begins to coalesce.");
+*/
+		pline("エネルギーをもったほこりの渦が結合しはじめた．");
+#if 0 /*JP:T*/
 		Your("body rematerializes%s.", invent ?
 			", and you gather up all your possessions" : "");
+#else
+		Your("体は再び実体化した．%s", invent ?
+			"そして全ての持ち物を拾い上げた．" : "");
+#endif
 		return;
 	    }
 
@@ -986,7 +1089,10 @@
 	    int llimit = dunlevs_in_dungeon(&u.uz);
 
 	    if (newlev >= 0 || newlev <= -llimit) {
+/*JP
 		You_cant("get there from here.");
+*/
+		You("そこには行けない．");
 		return;
 	    }
 	    newlevel.dnum = u.uz.dnum;
@@ -1007,31 +1113,68 @@
 		    in_mklev = FALSE;
 		}
 		if (newlev <= -10) {
+/*JP
 			You("arrive in heaven.");
+*/
+			You("天国に辿りついた．");
+/*JP
 			verbalize("Thou art early, but we'll admit thee.");
+*/
+			verbalize("汝，死ぬには早すぎるがそれもよかろう．");
+#if 0 /*JP*/
 			killer_format = NO_KILLER_PREFIX;
 			killer = "went to heaven prematurely";
+#else
+			killer_format = KILLED_BY;
+			killer = "若くして天国に行き";
+#endif
 		} else if (newlev == -9) {
+/*JP
 			You_feel("deliriously happy. ");
+*/
+			You("狂ったような幸せを感じた．");
+/*JP
 			pline("(In fact, you're on Cloud 9!) ");
+*/
+			pline("(本当に苦を乗り越えた場所にいる！) ");
 			display_nhwindow(WIN_MESSAGE, FALSE);
 		} else
+/*JP
 			You("are now high above the clouds...");
+*/
+			You("雲の遥か上にいる．．．");
 
 		if (killer) {
 		    ;		/* arrival in heaven is pending */
 		} else if (Levitation) {
+/*JP
 		    escape_by_flying = "float gently down to earth";
+*/
+		    escape_by_flying = "ゆっくり地面に降りた．";
 		} else if (Flying) {
+/*JP
 		    escape_by_flying = "fly down to the ground";
+*/
+		    escape_by_flying = "ゆっくり地面に降りた．";
 		} else {
+/*JP
 		    pline("Unfortunately, you don't know how to fly.");
+*/
+		    pline("不幸にも，あなたは飛びかたを知らない．");
+/*JP
 		    You("plummet a few thousand feet to your death.");
+*/
+		    pline("数千フィートの死のダイビングだ！");
+#if 0 /*JP:T*/
 		    Sprintf(buf,
 			  "teleported out of the dungeon and fell to %s death",
 			    uhis());
 		    killer = buf;
 		    killer_format = NO_KILLER_PREFIX;
+#else
+		    killer = "迷宮を飛びだしダイビングして";
+		    killer_format = KILLED_BY;
+#endif
 		}
 	}
 
@@ -1045,13 +1188,19 @@
 	    done(DIED);
 	    /* can only get here via life-saving (or declining to die in
 	       explore|debug mode); the hero has now left the dungeon... */
+/*JP
 	    escape_by_flying = "find yourself back on the surface";
+*/
+	    escape_by_flying = "気がついたら地上に戻っていた";
 	    u.uz = lsav;	/* restore u.uz so escape code works */
 	}
 
 	/* calls done(ESCAPED) if newlevel==0 */
 	if (escape_by_flying) {
+/*JP
 	    You("%s.", escape_by_flying);
+*/
+	    You("%s．", escape_by_flying);
 	    newlevel.dnum = 0;		/* specify main dungeon */
 	    newlevel.dlevel = 0;	/* escape the dungeon */
 	    /* [dlevel used to be set to 1, but it doesn't make sense to
@@ -1080,7 +1229,10 @@
 # endif /* WIZARD */
 		newlev = dungeons[u.uz.dnum].depth_start +
 					dunlevs_in_dungeon(&u.uz) - 2;
+/*JP
 		pline("Sorry...");
+*/
+		pline("おっと．．．");
 # ifdef WIZARD
                 }
 # endif /* WIZARD */
@@ -1126,20 +1278,29 @@
 	/* problem: level teleport landing escapes the check */
 	if (!on_level(&u.uz, &u.uz0)) return;
 
+/*JP
 	You("activated a magic portal!");
+*/
+	pline("魔法の入口が作動した！");
 
 	/* prevent the poor shnook, whose amulet was stolen while in
 	 * the endgame, from accidently triggering the portal to the
 	 * next level, and thus losing the game
 	 */
 	if (In_endgame(&u.uz) && !u.uhave.amulet) {
+/*JP
 	    You_feel("dizzy for a moment, but nothing happens...");
+*/
+	    You("一瞬めまいを感じた，しかし何も起きなかった．．．");
 	    return;
 	}
 
 	target_level = ttmp->dst;
 	schedule_goto(&target_level, FALSE, FALSE, 1,
+/*JP
 		      "You feel dizzy for a moment, but the sensation passes.",
+*/
+		      "一瞬めまいを感じた，しかしその感覚は消えた．",
 		      (char *)0);
 }
 
@@ -1150,7 +1311,10 @@
 	if (In_endgame(&u.uz) || Antimagic) {
 		if (Antimagic)
 			shieldeff(u.ux, u.uy);
+/*JP
 		You_feel("a wrenching sensation.");
+*/
+		You("ねじられたような感覚を感じた．");
 	} else if (!next_to_u()) {
 		You(shudder_for_moment);
 	} else if (trap->once) {
@@ -1165,20 +1329,35 @@
 level_tele_trap(trap)
 struct trap *trap;
 {
+#if 0 /*JP*/
 	You("%s onto a level teleport trap!",
 		      Levitation ? (const char *)"float" :
 				  locomotion(youmonst.data, "step"));
+#else
+	You("別の階への瞬間移動の罠を%s！",
+	    Levitation ? (const char *)"見下ろした" :
+	    jconj(locomotion(youmonst.data, "踏む"), "た"));
+#endif
 	if (Antimagic) {
 	    shieldeff(u.ux, u.uy);
 	}
 	if (Antimagic || In_endgame(&u.uz)) {
+/*JP
 	    You_feel("a wrenching sensation.");
+*/
+	    You("ねじられたような感覚を感じた．");
 	    return;
 	}
 	if (!Blind)
+/*JP
 	    You("are momentarily blinded by a flash of light.");
+*/
+	    You("まばゆい光で一瞬目がくらんだ．");
 	else
+/*JP
 	    You("are momentarily disoriented.");
+*/
+	    You("一瞬方向感覚を失った．");
 	deltrap(trap);
 	newsym(u.ux,u.uy);	/* get rid of trap symbol */
 	level_tele();
@@ -1356,8 +1535,13 @@
 {
 	if (level.flags.noteleport) {
 		if (canseemon(mon))
+#if 0 /*JP*/
 		    pline("A mysterious force prevents %s from teleporting!",
 			mon_nam(mon));
+#else
+		    pline("奇妙な力が%sの瞬間移動を防いだ！",
+			mon_nam(mon));
+#endif
 		return TRUE;
 	}
 	return FALSE;
@@ -1385,9 +1569,15 @@
 
 	    if (in_sight) {
 		if (canseemon(mtmp))
+/*JP
 		    pline("%s seems disoriented.", monname);
+*/
+		    pline("%sは一瞬方向感覚を失ったようだ．", monname);
 		else
+/*JP
 		    pline("%s suddenly disappears!", monname);
+*/
+		    pline("%sは突然消えた！", monname);
 		seetrap(trap);
 	    }
 	}
@@ -1415,8 +1605,13 @@
 		    assign_level(&tolevel, &valley_level);
 		} else if (Is_botlevel(&u.uz)) {
 		    if (in_sight && trap->tseen)
+#if 0 /*JP*/
 			pline("%s avoids the %s.", Monnam(mtmp),
 			(tt == HOLE) ? "hole" : "trap");
+#else
+			pline("%sは%sを回避した．", Monnam(mtmp),
+			(tt == HOLE) ? "穴" : "罠");
+#endif
 		    return 0;
 		} else {
 		    get_level(&tolevel, depth(&u.uz) + 1);
@@ -1425,7 +1620,10 @@
 		if (In_endgame(&u.uz) &&
 		    (mon_has_amulet(mtmp) || is_home_elemental(mptr))) {
 		    if (in_sight && mptr->mlet != S_ELEMENTAL) {
+/*JP
 			pline("%s seems to shimmer for a moment.",
+*/
+		        pline("%sが一瞬輝いたように見えた",
 							Monnam(mtmp));
 			seetrap(trap);
 		    }
@@ -1451,21 +1649,30 @@
 
 		if (mon_has_amulet(mtmp) || In_endgame(&u.uz)) {
 		    if (in_sight)
+/*JP
 			pline("%s seems very disoriented for a moment.",
+*/
+			pline("%sは一瞬方向感覚を大きく失ったようだ．",
 				Monnam(mtmp));
 		    return 0;
 		}
 		nlev = random_teleport_level();
 		if (nlev == depth(&u.uz)) {
 		    if (in_sight)
+/*JP
 			pline("%s shudders for a moment.", Monnam(mtmp));
+*/
+			pline("%sは一瞬震えた．", Monnam(mtmp));
 		    return 0;
 		}
 		get_level(&tolevel, nlev);
 	    }
 
 	    if (in_sight) {
+/*JP
 		pline("Suddenly, %s disappears out of sight.", mon_nam(mtmp));
+*/
+		pline("突然%sが視界から消えた．", mon_nam(mtmp));
 		seetrap(trap);
 	    }
 	    migrate_to_level(mtmp, ledger_no(&tolevel),
@@ -1505,7 +1712,10 @@
 		    within_bounded_area(tx, ty, dndest.nlx, dndest.nly,
 						dndest.nhx, dndest.nhy)))));
 
+/*JP
 	if (flooreffects(obj, tx, ty, "fall")) {
+*/
+	if (flooreffects(obj, tx, ty, "落ちる")) {
 	    return;
 	} else if (otx == 0 && oty == 0) {
 	    ;	/* fell through a trap door; no update of old loc needed */
@@ -1597,11 +1807,17 @@
 
 	if (mtmp->ispriest && *in_rooms(mtmp->mx, mtmp->my, TEMPLE)) {
 	    if (give_feedback)
+/*JP
 		pline("%s resists your magic!", Monnam(mtmp));
+*/
+		pline("%sは魔法を防いだ！", Monnam(mtmp));
 	    return FALSE;
 	} else if (level.flags.noteleport && u.uswallow && mtmp == u.ustuck) {
 	    if (give_feedback)
+/*JP
 		You("are no longer inside %s!", mon_nam(mtmp));
+*/
+		You("%sの内部から脱出した！", mon_nam(mtmp));
 	    unstuck(mtmp);
 	    rloc(mtmp, FALSE);
 	} else if (is_rider(mtmp->data) && rn2(13) &&
@@ -1618,7 +1834,10 @@
 		 * locations but, in my view, is less informative.
 		 */
 		xchar omx, omy;
+/*JP
 		pline("To what position do you want %s to be teleported?",
+*/
+		pline("%sをどの位置に瞬間移動させますか？",
 		       mon_nam(mtmp));
 		cc.x = omx = mtmp->mx;
 		cc.y = omy = mtmp->my;
@@ -1630,7 +1849,10 @@
 		    if (mtmp->isshk && !inhishop(mtmp))
 			make_angry_shk(mtmp, omx, omy);
 		} else {
+/*JP
 		    pline("Sorry...");
+*/
+		    pline("おっと．．．");
 		    rloc(mtmp, FALSE);
 		}
 	    } else
diff -aurN slashem-0.0.7E6F2/src/timeout.c jslashem-0.0.7E6F2-J0.0.8/src/timeout.c
--- slashem-0.0.7E6F2/src/timeout.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/timeout.c	2004-08-05 12:10:28.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Masaki Miyaso, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"	/* for checking save modes */
 
@@ -20,11 +28,19 @@
 
 /* He is being petrified - dialogue by inmet!tower */
 static NEARDATA const char * const stoned_texts[] = {
+#if 0 /*JP*/
 	"You are slowing down.",		/* 5 */
 	"Your limbs are stiffening.",		/* 4 */
 	"Your limbs have turned to stone.",	/* 3 */
 	"You have turned to stone.",		/* 2 */
 	"You are a statue."			/* 1 */
+#else
+	"あなたはのろくなった．",		/* 5 */
+	"あなたの手足は硬直した．",		/* 4 */
+	"あなたの手足は石化した．",	/* 3 */
+	"あなたは石になった．",		/* 2 */
+	"あなたは彫像になった．"	/* 1 */
+#endif
 };
 
 STATIC_OVL void
@@ -46,11 +62,19 @@
 
 /* He is getting sicker and sicker prior to vomiting */
 static NEARDATA const char * const vomiting_texts[] = {
+#if 0 /*JP*/
 	"are feeling mildly nauseated.",	/* 14 */
 	"feel slightly confused.",		/* 11 */
 	"can't seem to think straight.",	/* 8 */
 	"feel incredibly sick.",		/* 5 */
 	"suddenly vomit!"			/* 2 */
+#else
+	"ちょっと吐き気がした．",	/* 14 */
+	"少し混乱した．",		/* 11 */
+	"まともに思考できなくなった．",	/* 8 */
+	"とても気分が悪くなった．",	/* 5 */
+	"突然嘔吐した！"		/* 2 */
+#endif
 };
 
 STATIC_OVL void
@@ -78,19 +102,35 @@
 }
 
 static NEARDATA const char * const choke_texts[] = {
+#if 0 /*JP*/
 	"You find it hard to breathe.",
 	"You're gasping for air.",
 	"You can no longer breathe.",
 	"You're turning %s.",
 	"You suffocate."
+#else
+	"あなたは呼吸が困難になった．",
+	"あなたは苦しくてあえいだ．",
+	"あなたはもう呼吸ができない．",
+	"あなたは%sなった．",
+	"あなたは窒息した．"
+#endif
 };
 
 static NEARDATA const char * const choke_texts2[] = {
+#if 0 /*JP*/
 	"Your %s is becoming constricted.",
 	"Your blood is having trouble reaching your brain.",
 	"The pressure on your %s increases.",
 	"Your consciousness is fading.",
 	"You suffocate."
+#else
+	"あなたの%sは締めつけられた．",
+	"血液のめぐりが悪くなった．",
+	"%sの圧力が高くなった．",
+	"意識が遠くなってきた．",
+	"あなたは窒息した．"
+#endif
 };
 
 STATIC_OVL void
@@ -105,7 +145,10 @@
 		const char *str = choke_texts[SIZE(choke_texts)-i];
 
 		if (index(str, '%'))
+/*JP
 		    pline(str, hcolor(NH_BLUE));
+*/
+		    pline(str, jconj_adj(hcolor(NH_BLUE)));
 		else
 		    pline(str);
 	    }
@@ -114,11 +157,19 @@
 }
 
 static NEARDATA const char * const slime_texts[] = {
+#if 0 /*JP*/
 	"You are turning a little %s.",           /* 5 */
 	"Your limbs are getting oozy.",              /* 4 */
 	"Your skin begins to peel away.",            /* 3 */
 	"You are turning into %s.",       /* 2 */
 	"You have become %s."             /* 1 */
+#else
+	"少し%sなった．",			/* 5 */
+	"手足が溶けはじめた．",              	/* 4 */
+	"肌がどろどろになってきた．",           /* 3 */
+	"%sになりはじめた．",      	/* 2 */
+	"%sになってしまった．",		/* 1 */
+#endif
 };
 
 STATIC_OVL void
@@ -133,9 +184,15 @@
 	    if (index(str, '%')) {
 		if (i == 4L) {	/* "you are turning green" */
 		    if (!Blind)	/* [what if you're already green?] */
+/*JP
 			pline(str, hcolor(NH_GREEN));
+*/
+			pline(str, jconj_adj(hcolor(NH_GREEN)));
 		} else
+/*JP
 		    pline(str, an(Hallucination ? rndmonnam() : "green slime"));
+*/
+		    pline(str, jtrns_mon(Hallucination ? rndmonnam() : "green slime"));
 	    } else
 		pline(str);
 	}
@@ -151,7 +208,10 @@
 burn_away_slime()
 {
 	if (Slimed) {
+/*JP
 	    pline_The("slime that covers you is burned away!");
+*/
+	    pline("あなたを覆っていたスライムは焼け落ちた！");
 	    Slimed = 0L;
 	    flags.botl = 1;
 	}
@@ -214,15 +274,23 @@
 		u.uspellprot--;
 		find_ac();
 		if (!Blind)
+#if 0 /*JP*/
 		    Norep("The %s haze around you %s.", hcolor(NH_GOLDEN),
 			  u.uspellprot ? "becomes less dense" : "disappears");
+#else
+		    Norep("あなたの回りの%s霧は%s．", hcolor(NH_GOLDEN),
+			  u.uspellprot ? "消えはじめた" : "消えた");
+#endif
 	    }
 	}
 
 #ifdef STEED
 	if (u.ugallop) {
 	    if (--u.ugallop == 0L && u.usteed)
+/*JP
 	    	pline("%s stops galloping.", Monnam(u.usteed));
+*/
+	    	pline("%sは速駆けをやめた．", Monnam(u.usteed));
 	}
 #endif
 
@@ -231,14 +299,23 @@
 		switch(upp - u.uprops){
 		case STONED:
 			if (delayed_killer && !killer) {
+#if 0 /*JP*/
 				killer = delayed_killer;
+#else
+			    char buf[BUFSZ];
+			    Sprintf(buf, "%sの攻撃で", delayed_killer);
+			    killer = buf;
+#endif
 				delayed_killer = 0;
 			}
 			if (!killer) {
 				/* leaving killer_format would make it
 				   "petrified by petrification" */
 				killer_format = NO_KILLER_PREFIX;
+/*JP
 				killer = "killed by petrification";
+*/
+				killer = "石化攻撃で";
 			}
 			done(STONING);
 			break;
@@ -249,7 +326,10 @@
 			}
 			if (!killer) {
 				killer_format = NO_KILLER_PREFIX;
+/*JP
 				killer = "turned into green slime";
+*/
+				killer = "緑スライムになった";
 			}
 			done(TURNED_SLIME);
 			break;
@@ -257,7 +337,10 @@
 			make_vomiting(0L, TRUE);
 			break;
 		case SICK:
+/*JP
 			You("die from your illness.");
+*/
+			You("病気で死んだ．");
 			killer_format = KILLED_BY_AN;
 			killer = u.usick_cause;
 			if ((m_idx = name_to_mon(killer)) >= LOW_PM) {
@@ -274,56 +357,109 @@
 			break;
 		case FAST:
 			if (!Very_fast)
+#if 0 /*JP*/
 				You_feel("yourself slowing down%s.",
 							Fast ? " a bit" : "");
+#else
+				You("%s遅くなったような気がした．",
+							Fast ? "ちょっと" : "");
+#endif
 			break;
 		case FIRE_RES:
 			if (!Fire_resistance)
+#if 0 /*JP*/
 				You("feel a little warmer.");
+#else
+				You("少し暖かくなったような気がした．");
+#endif
 			break;
 		case COLD_RES:
 			if (!Cold_resistance)
+#if 0 /*JP*/
 				You("feel a little cooler.");
+#else
+				You("少し冷たくなったような気がした．");
+#endif
 			break;
 		case SLEEP_RES:
 			if (!Sleep_resistance)
+#if 0 /*JP*/
 				You("feel a little sleepy.");
+#else
+				You("少し眠くなったような気がした．");
+#endif
 			break;
 		case SHOCK_RES:
 			if (!Shock_resistance)
+#if 0 /*JP*/
 				You("feel a little static cling.");
+#else
+				You("少し静電気を感じたような気がした．");
+#endif
 			break;
 		case POISON_RES:
 			if (!Poison_resistance)
+#if 0 /*JP*/
 				You("feel a little less healthy.");
+#else
+				You("少し健康的でなくなったような気がした．");
+#endif
 			break;
 		case DISINT_RES:
 			if (!Disint_resistance)
+#if 0 /*JP*/
 				You("feel a little less firm.");
+#else
+				You("少し頑丈でなくなったような気がした．");
+#endif
 			break;
 		case TELEPORT:
 			if (!Teleportation)
+#if 0 /*JP*/
 				You("feel a little less jumpy.");
+#else
+				You("少し跳躍力が下がったような気がした．");
+#endif
 			break;
 		case TELEPORT_CONTROL:
 			if (!Teleport_control)
+#if 0 /*JP*/
 				You("feel a little less in control of yourself.");
+#else
+				You("少し自分自身の制御が効かなくなったような気がした．");
+#endif
 			break;
 		case TELEPAT:
 			if (!HTelepat)
+#if 0 /*JP*/
 				You("feel a little less mentally acute.");
+#else
+				You("少し精神的な鋭敏さがなくなったような気がした．");
+#endif
 			break;
 		case FREE_ACTION:
 			if (!Free_action)
+#if 0 /*JP*/
 				You("feel a little stiffer.");
+#else
+				You("少し身体が強張ってきたような気がした．");
+#endif
 			break;
 		case PASSES_WALLS:
 			if (!Passes_walls)
+#if 0 /*JP*/
 				You("feel a little more solid.");
+#else
+				You("少し身体がより物質に近くなったような気がした．");
+#endif
 			break;
 		case INVULNERABLE:
 			if (!Invulnerable)
+#if 0 /*JP*/
 				You("are no longer invulnerable.");
+#else
+				You("もう不死身ではない．");
+#endif
 			break;
 		case CONFUSION:
 			HConfusion = 1; /* So make_confused works properly */
@@ -343,9 +479,15 @@
 		case INVIS:
 			newsym(u.ux,u.uy);
 			if (!Invis && !BInvis && !Blind) {
+#if 0 /*JP*/
 			    You(!See_invisible ?
 				    "are no longer invisible." :
 				    "can no longer see through yourself.");
+#else
+			    You(!See_invisible ?
+				    "もう透明ではない．" :
+				    "透きとおっていない．");
+#endif
 			    stop_occupation();
 			}
 			break;
@@ -359,6 +501,13 @@
 			heal_legs();
 			stop_occupation();
 			break;
+#ifdef JPEXTENSION
+		case TOTTER:
+		    	Totter = 0;
+			make_totter(0L, TRUE);
+			stop_occupation();
+			break;
+#endif
 		case HALLUC:
 			HHallucination = 1;
 			(void) make_hallucinated(0L, TRUE, 0L);
@@ -368,7 +517,10 @@
 			if (unconscious() || Sleep_resistance)
 				HSleeping += rnd(100);
 			else if (Sleeping) {
+/*JP
 				You("fall asleep.");
+*/
+				You("眠りに落ちた．");
 				sleeptime = rnd(20);
 				fall_asleep(-sleeptime, TRUE);
 				HSleeping += sleeptime + rnd(100);
@@ -379,7 +531,10 @@
 			break;
 		case STRANGLED:
 			killer_format = KILLED_BY;
+/*JP
 			killer = (u.uburied) ? "suffocation" : "strangulation";
+*/
+			killer = (u.uburied) ? "窒息して" : "首を締められて";
 			done(DIED);
 			break;
 		case FUMBLING:
@@ -394,7 +549,10 @@
 			     * to this number must be thoroughly play tested.
 			     */
 			    if ((inv_weight() > -500)) {
+/*JP
 				You("make a lot of noise!");
+*/
+				You("大きな音をたてた！");
 				wake_nearby();
 			    }
 			}
@@ -432,7 +590,10 @@
 	}
 	/* early wakeup from combat won't be possible until next monster turn */
 	u.usleep = monstermoves;
+/*JP
 	nomovemsg = wakeup_msg ? "You wake up." : You_can_move_again;
+*/
+	nomovemsg = wakeup_msg ? "目を覚ました．" : You_can_move_again;
 }
 
 
@@ -472,7 +633,10 @@
 	oldobj = obj->oldtyp;
 
 	if (carried(obj) && !silent) /* silent == TRUE is a strange case... */
+/*JP
 		pline("Suddenly, your %s!", aobjnam(obj, "transmute"));
+*/
+		pline("急にあなたの%sは変化した！", xname(obj));
 
 	(void) stop_timer(UNPOLY_OBJ, (genericptr_t) obj);
 
@@ -549,7 +713,10 @@
 	i = newcham(mtmp, type, polyspot, transform_msg);
 	if (system_shock && (!i || !rn2(25))) {
 	    /* Uhoh.  !i == newcham wasn't able to make the polymorph...*/
+/*JP
 	    if (transform_msg) pline("%s shudders.", Monnam(mtmp));
+*/
+	    if (transform_msg) pline("%sは震えた．", Monnam(mtmp));
 	    if (i) mtmp->mhp -= rnd(30);
 	    if (!i || (mtmp->mhp <= 0)) {
 		if (your_fault) xkilled(mtmp, 3);
@@ -588,7 +755,10 @@
 
 	if (!newcham(mtmp, &mons[oldmon], FALSE, (canseemon(mtmp) && !silent))) {
 	    /* Wasn't able to unpolymorph */
+/*JP
 	    if (canseemon(mtmp) && !silent) pline("%s shudders.", oldname);
+*/
+	    if (canseemon(mtmp) && !silent) pline("%sは震えた．", oldname);
 	    mondead(mtmp);
 	    return;
 	}
@@ -596,7 +766,10 @@
 	/* Check if current form is genocided */
 	if (mvitals[oldmon].mvflags & G_GENOD) {
 	    mtmp->mhp = 0;
+/*JP
 	    if (canseemon(mtmp) && !silent) pline("%s shudders.", oldname);
+*/
+	    if (canseemon(mtmp) && !silent) pline("%sは震えた．", oldname);
 	    /*  Since only player can read scrolls of genocide... */
 	    xkilled(mtmp, 3);
 	    return;
@@ -624,7 +797,10 @@
 	/* Now if you play with other people's property... */
 	if (yours && (!carried(bomb) && costly_spot(bomb->ox, bomb->oy) &&
 		!bomb->no_charge || bomb->unpaid)) {
+/*JP
 	    verbalize("You play with it, you pay for it!");
+*/
+	    verbalize("ピンを抜いたのなら支払ってもらおう！");
 	    bill_dummy_object(bomb);
 	}
 
@@ -661,20 +837,29 @@
 			}
 			if (!silent) {
 			    if (canseemon(mtmp))
+/*JP
 				You("see %s engulfed in an explosion!", mon_nam(mtmp));
+*/
+				pline("%sが爆発に巻き込まれるのが見えた！", mon_nam(mtmp));
 			}
 		    	mtmp->mhp -= d(2,5);
 			if(mtmp->mhp < 1) {
 				if(!bomb->yours) 
 					monkilled(mtmp, 
+/*JP
 						  (silent ? "" : "explosion"),
+*/
+						  (silent ? "" : "爆発で"),
 						  AD_PHYS);
 				else xkilled(mtmp, !silent);
 			}
 			break;
 		    case OBJ_INVENT:
 		    	/* This shouldn't be silent! */
+/*JP
 			pline("Something explodes inside your knapsack!");
+*/
+			pline("何かがあなたの背負い袋の中で爆発した！");
 			if (bomb == uwep) {
 			    uwepgone();
 			    stop_occupation();
@@ -685,22 +870,40 @@
 			    uqwepgone();
 			    stop_occupation();
 			}
+/*JP
 		    	losehp(d(2,5), "carrying live explosives", KILLED_BY);
+*/
+		    	losehp(d(2,5), "爆発物運搬中に事故で", KILLED_BY);
 		    	break;
 		    case OBJ_FLOOR:
 			underwater = is_pool(x, y);
 			if (!silent) {
 			    if (x == u.ux && y == u.uy) {
 				if (underwater && (Flying || Levitation))
+#if 0 /*JP*/
 				    pline_The("water boils beneath you.");
+#else
+				    pline("あなたの%s元の水が沸騰した．",
+					makeplural(body_part(FOOT)));
+#endif
 				else if (underwater && Wwalking)
+/*JP
 				    pline_The("water erupts around you.");
+*/
+				    pline("あなたの周囲に水柱が立ち昇った．");
+/*JP
 				else pline("A bomb explodes under your %s!",
+*/
+				else pline("あなたの%s元で爆弾が爆発した！",
 				  makeplural(body_part(FOOT)));
 			    } else if (cansee(x, y))
 				You(underwater ?
+/*JP
 				    "see a plume of water shoot up." :
 				    "see a bomb explode.");
+*/
+				    "水柱が上がるのを見た．" :
+				    "爆弾が爆発するのを見た．");
 			}
 			if (underwater && (Flying || Levitation || Wwalking)) {
 			    if (Wwalking && x == u.ux && y == u.uy) {
@@ -723,7 +926,10 @@
 		    	break;
 		    default:	/* Buried, contained, etc. */
 			if (!silent)
+/*JP
 			    You_hear("a muffled explosion.");
+*/
+			    pline("くぐもった爆発音が聞こえた．");
 			goto free_bomb;
 			break;
 		}
@@ -857,10 +1063,16 @@
 	    boolean siblings = (hatchcount > 1), redraw = FALSE;
 
 	    if (cansee_hatchspot) {
+#if 0 /*JP*/
 		Sprintf(monnambuf, "%s%s",
 			siblings ? "some " : "",
 			siblings ?
 			makeplural(m_monnam(mon)) : an(m_monnam(mon)));
+#else
+		Sprintf(monnambuf, "%s%s",
+			siblings ? "いくつかの" : "",
+			a_monnam(mon));
+#endif
 		/* we don't learn the egg type here because learning
 		   an egg type requires either seeing the egg hatch
 		   or being familiar with the egg already,
@@ -872,25 +1084,48 @@
 		case OBJ_INVENT:
 		    knows_egg = TRUE; /* true even if you are blind */
 		    if (!cansee_hatchspot)
+#if 0 /*JP*/
 			You_feel("%s %s from your pack!", something,
 			    locomotion(mon->data, "drop"));
+#else
+		        pline("何かがあなたの背負い袋から%sような気がした．",
+			    jconj(locomotion(mon->data, "落ちる"),"た"));
+#endif
 		    else
+#if 0 /*JP*/
 			You("see %s %s out of your pack!",
 			    monnambuf, locomotion(mon->data, "drop"));
+#else
+		        pline("%sがあなたの背負い袋から%s．",
+			    monnambuf,
+			    jconj(locomotion(mon->data, "落ちる"),"た"));
+#endif
 		    if (yours) {
+#if 0 /*JP*/
 			pline("%s cries sound like \"%s%s\"",
 			    siblings ? "Their" : "Its",
 			    flags.female ? "mommy" : "daddy",
 			    egg->spe ? "." : "?");
+#else
+			pline("それは『%s』と鳴いているようだ",
+			    flags.female ? "ママ" : "パパ");
+#endif
 		    } else if (mon->data->mlet == S_DRAGON) {
+#if 0 /*JP*/
 			verbalize("Gleep!");		/* Mything eggs :-) */
+#else
+			verbalize("ブォー！");		/* Mything eggs :-) */
+#endif
 		    }
 		    break;
 
 		case OBJ_FLOOR:
 		    if (cansee_hatchspot) {
 			knows_egg = TRUE;
+/*JP
 			You("see %s hatch.", monnambuf);
+*/
+			You("%sが卵から孵化するのを見た．", monnambuf);
 			redraw = TRUE;	/* update egg's map location */
 		    }
 		    break;
@@ -899,16 +1134,31 @@
 		    if (cansee_hatchspot) {
 			/* egg carring monster might be invisible */
 			if (canseemon(egg->ocarry)) {
+/*JP
 			    Sprintf(carriedby, "%s pack",
+*/
+			    Sprintf(carriedby, "%sの背負い袋から",
 				     s_suffix(a_monnam(egg->ocarry)));
 			    knows_egg = TRUE;
 			}
 			else if (is_pool(mon->mx, mon->my))
+/*JP
 			    Strcpy(carriedby, "empty water");
+*/
+			    Strcpy(carriedby, "何もない水中から");
 			else
+/*JP
 			    Strcpy(carriedby, "thin air");
+*/
+			    Strcpy(carriedby, "何もない空間から");
+#if 0 /*JP*/
 			You("see %s %s out of %s!", monnambuf,
 			    locomotion(mon->data, "drop"), carriedby);
+#else
+			You("%sが%s%sのを見た．", monnambuf,
+			    carriedby, 
+			    locomotion(mon->data, "落ちる"));
+#endif
 		    }
 		    break;
 #if 0
@@ -996,44 +1246,80 @@
 		name; if not, look for rocks to trip over; trip over
 		anonymous "something" if there aren't any rocks.
 	     */
+/*JP
 	    pronoun = otmp->quan == 1L ? "it" : Hallucination ? "they" : "them";
+*/
+	    pronoun = "何か";
 	    what = !otmp->nexthere ? pronoun :
 		  (otmp->dknown || !Blind) ? doname(otmp) :
 		  ((otmp = sobj_at(ROCK, u.ux, u.uy)) == 0 ? something :
+/*JP
 		  (otmp->quan == 1L ? "a rock" : "some rocks"));
+*/
+		   "石");
 	    if (Hallucination) {
 		what = strcpy(buf, what);
 		buf[0] = highc(buf[0]);
+#if 0 /*JP*/
 		pline("Egads!  %s bite%s your %s!",
 			what, (!otmp || otmp->quan == 1L) ? "s" : "",
 			body_part(FOOT));
+#else
+		pline("ぐわぁ！%sが%sに噛みついた！",
+			what, body_part(FOOT));
+#endif
 	    } else {
+/*JP
 		You("trip over %s.", what);
+*/
+		You("%sにつまづいた．", what);
 	    }
 	} else if (rn2(3) && is_ice(u.ux, u.uy)) {
+/*JP
 	    pline("%s %s%s on the ice.",
+*/
+	    pline("%sは氷の上で滑った．",
 #ifdef STEED
 		u.usteed ? upstart(x_monnam(u.usteed,
 				u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
 				(char *)0, SUPPRESS_SADDLE, FALSE)) :
 #endif
+/*JP
 		"You", rn2(2) ? "slip" : "slide", on_foot ? "" : "s");
+*/
+		"あなた");
 	} else {
 	    if (on_foot) {
 		switch (rn2(4)) {
 		  case 1:
+#if 0 /*JP*/
 			You("trip over your own %s.", Hallucination ?
 				"elbow" : makeplural(body_part(FOOT)));
+#else
+			You("自分の%sを踏んでつまづいた．", Hallucination ?
+				"肘" : makeplural(body_part(FOOT)));
+#endif
 			break;
 		  case 2:
+#if 0 /*JP*/
 			You("slip %s.", Hallucination ?
 				"on a banana peel" : "and nearly fall");
+#else
+		You("%s．", Hallucination ?
+			"バナナの皮で滑った" : "滑って転びそうになった");
+#endif
 			break;
 		  case 3:
+/*JP
 			You("flounder.");
+*/
+			You("じたばたした．");
 			break;
 		  default:
+/*JP
 			You("stumble.");
+*/
+			You("よろめいた．");
 			break;
 		}
 	    }
@@ -1041,16 +1327,28 @@
 	    else {
 		switch (rn2(4)) {
 		  case 1:
+/*JP
 			Your("%s slip out of the stirrups.", makeplural(body_part(FOOT)));
+*/
+			You("あぶみを踏み外してしまった．");
 			break;
 		  case 2:
+/*JP
 			You("let go of the reins.");
+*/
+			You("手綱を放してしまった．");
 			break;
 		  case 3:
+/*JP
 			You("bang into the saddle-horn.");
+*/
+			You("サドルホーンにぶつかってしまった．");
 			break;
 		  default:
+/*JP
 			You("slide to one side of the saddle.");
+*/
+			You("鞍の片側に滑ってしまった．");
 			break;
 		}
 		dismount_steed(DISMOUNT_FELL);
@@ -1068,10 +1366,16 @@
 	switch (obj->where) {
 	    case OBJ_INVENT:
 	    case OBJ_MINVENT:
+/*JP
 		pline("%s flickers%s.", Yname2(obj), tailer);
+*/
+		pline("%sは%s点滅した．", Yname2(obj), tailer);
 		break;
 	    case OBJ_FLOOR:
+/*JP
 		You("see %s flicker%s.", an(xname(obj)), tailer);
+*/
+		You("%sが%s点滅するのが見えた．", an(xname(obj)), tailer);
 		break;
 	}
 }
@@ -1084,15 +1388,27 @@
 	/* from adventure */
 	switch (obj->where) {
 	    case OBJ_INVENT:
+/*JP
 		Your("lantern is getting dim.");
+*/
+		Your("ランタンは暗くなった．");
 		if (Hallucination)
+/*JP
 		    pline("Batteries have not been invented yet.");
+*/
+		    pline("電池はまだ発明されてないんだっけ．");
 		break;
 	    case OBJ_FLOOR:
+/*JP
 		You("see a lantern getting dim.");
+*/
+		pline("ランタンが暗くなったのが見えた．");
 		break;
 	    case OBJ_MINVENT:
+/*JP
 		pline("%s lantern is getting dim.",
+*/
+		pline("%sのランタンは暗くなった．",
 		    s_suffix(Monnam(obj->ocarry)));
 		break;
 	}
@@ -1162,11 +1478,17 @@
 			switch (obj->where) {
 			    case OBJ_INVENT:
 			    case OBJ_MINVENT:
+/*JP
 				pline("%s potion of oil has burnt away.",
+*/
+				pline("%sオイルは燃えつきた．",
 				    whose);
 				break;
 			    case OBJ_FLOOR:
+/*JP
 				You("see a burning potion of oil go out.");
+*/
+				You("オイルの火が消えたのが見えた．");
 				need_newsym = TRUE;
 				break;
 			}
@@ -1189,7 +1511,10 @@
 				lantern_message(obj);
 			    else
 				see_lamp_flicker(obj,
+/*JP
 				    obj->age == 50L ? " considerably" : "");
+*/
+				    obj->age == 50L ? "激しく" : "");
 			}
 			break;
 
@@ -1201,11 +1526,17 @@
 				switch (obj->where) {
 				    case OBJ_INVENT:
 				    case OBJ_MINVENT:
+/*JP
 					pline("%s %s seems about to go out.",
+*/
+					pline("%s%sは今にも消えそうだ．",
 					    whose, xname(obj));
 					break;
 				    case OBJ_FLOOR:
+/*JP
 					You("see %s about to go out.",
+*/
+					pline("%sが消えかけているのが見えた．",
 					    an(xname(obj)));
 					break;
 				}
@@ -1220,17 +1551,29 @@
 				case OBJ_INVENT:
 				case OBJ_MINVENT:
 				    if (obj->otyp == BRASS_LANTERN)
+/*JP
 					pline("%s lantern has run out of power.",
+*/
+					pline("%sランタンの力を使い切った．",
 					    whose);
 				    else
+/*JP
 					pline("%s %s has gone out.",
+*/
+					pline("%s%sは消えた．",
 					    whose, xname(obj));
 				    break;
 				case OBJ_FLOOR:
 				    if (obj->otyp == BRASS_LANTERN)
+/*JP
 					You("see a lantern run out of power.");
+*/
+					You("ランタンが消えるのが見えた．");
 				    else
+/*JP
 					You("see %s go out.",
+*/
+					You("%sが消えるのが見えた．",
 					    an(xname(obj)));
 				    break;
 			    }
@@ -1240,8 +1583,14 @@
 			
 			if (obj->otyp == TORCH) {
 			  if (obj->unpaid && costly_spot(u.ux, u.uy)) {
+#if 0 /*JP*/
 			    const char *ithem = obj->quan > 1L ? "them" : "it";
 			    verbalize("You burn %s, you bought %s!", ithem, ithem);
+#else
+			    /* 元になる言い回しが何かあるのだろうか？
+			     * 今の所は従来の商品と同様の文章で処理する */
+			    verbalize("燃やしたのなら買ってもらうよ！");
+#endif
 			    bill_dummy_object(obj);
 			  }
 			}
@@ -1271,16 +1620,27 @@
 			    switch (obj->where) {
 				case OBJ_INVENT:
 				case OBJ_MINVENT:
+#if 0 /*JP*/
 				    pline("%s %scandle%s getting short.",
 					whose,
 					menorah ? "candelabrum's " : "",
 					many ? "s are" : " is");
+#else
+				    pline("%s%sろうそくは短くなった．",
+					whose,
+					menorah ? "燭台の" : "");
+#endif
 				    break;
 				case OBJ_FLOOR:
+#if 0 /*JP*/
 				    You("see %scandle%s getting short.",
 					    menorah ? "a candelabrum's " :
 						many ? "some " : "a ",
 					    many ? "s" : "");
+#else
+				    You("%sろうそくが短くなるのが見えた．",
+					    menorah ? "燭台の" : "");
+#endif
 				    break;
 			    }
 			break;
@@ -1291,19 +1651,30 @@
 				case OBJ_INVENT:
 				case OBJ_MINVENT:
 				    pline(
+#if 0 /*JP*/
 					"%s %scandle%s flame%s flicker%s low!",
 					    whose,
 					    menorah ? "candelabrum's " : "",
 					    many ? "s'" : "'s",
 					    many ? "s" : "",
 					    many ? "" : "s");
+#else
+					"%s%sろうそくの炎は点滅し，暗くなった！",
+					    whose,
+					    menorah ? "燭台の" : "");
+#endif
 				    break;
 				case OBJ_FLOOR:
+#if 0 /*JP*/
 				    You("see %scandle%s flame%s flicker low!",
 					    menorah ? "a candelabrum's " :
 						many ? "some " : "a ",
 					    many ? "s'" : "'s",
 					    many ? "s" : "");
+#else
+				    You("%sろうそくの炎が点滅し，暗くなるのが見えた！",
+					    menorah ? "燭台の" : "");
+#endif
 				    break;
 			    }
 			break;
@@ -1315,43 +1686,68 @@
 				switch (obj->where) {
 				    case OBJ_INVENT:
 				    case OBJ_MINVENT:
+#if 0 /*JP*/
 					pline("%s candelabrum's flame%s.",
 					    whose,
 					    many ? "s die" : " dies");
+#else
+					pline("%s燭台の炎は消えた．",
+					    whose);
+#endif
 					break;
 				    case OBJ_FLOOR:
+#if 0 /*JP*/
 					You("see a candelabrum's flame%s die.",
 						many ? "s" : "");
+#else
+					You("燭台の炎が消えるのが見えた．");
+#endif
 					break;
 				}
 			    } else {
 				switch (obj->where) {
 				    case OBJ_INVENT:
 				    case OBJ_MINVENT:
+#if 0 /*JP*/
 					pline("%s %s %s consumed!",
 					    whose,
 					    xname(obj),
 					    many ? "are" : "is");
+#else
+					pline("%s%sは燃えつきた！",
+					    whose,
+					    xname(obj));
+#endif
 					break;
 				    case OBJ_FLOOR:
 					/*
 					You see some wax candles consumed!
 					You see a wax candle consumed!
 					*/
+#if 0 /*JP*/
 					You("see %s%s consumed!",
 					    many ? "some " : "",
 					    many ? xname(obj):an(xname(obj)));
+#else
+					You("%sが燃えつきるのが見えた！",
+					    xname(obj));
+#endif
 					need_newsym = TRUE;
 					break;
 				}
 
 				/* post message */
 				pline(Hallucination ?
+#if 0 /*JP*/
 					(many ? "They shriek!" :
 						"It shrieks!") :
 					Blind ? "" :
 					    (many ? "Their flames die." :
 						    "Its flame dies."));
+#else
+				        "それは震えた．" :
+					"炎は消えた．");
+#endif
 			    }
 			}
 			end_burn(obj, FALSE);
@@ -1383,7 +1779,10 @@
 	    case RED_DOUBLE_LIGHTSABER:
 	    	if (obj->altmode && obj->cursed && !rn2(25)) {
 		    obj->altmode = FALSE;
+/*JP
 		    pline("%s %s reverts to single blade mode!",
+*/
+		    pline("%s%sは剣モードに戻った！",
 			    whose, xname(obj));
 	    	}
 	    case GREEN_LIGHTSABER: 
@@ -1408,14 +1807,23 @@
 			    switch (obj->where) {
 				case OBJ_INVENT:
 				case OBJ_MINVENT:
+/*JP
 				    pline("%s %s dims!",whose, xname(obj));
+*/
+				    pline("%s%sが暗くなった！",whose, xname(obj));
 				    break;
 				case OBJ_FLOOR:
+/*JP
 				    You("see %s dim!", an(xname(obj)));
+*/
+				    pline("%sの刃が暗くなるのが見えた！", xname(obj));
 				    break;
 			    }
 			} else {
+/*JP
 			    You("hear the hum of %s change!", an(xname(obj)));
+*/
+			    pline("%sのうなる音が変化した！", xname(obj));
 			}
 			break;
 		    case 0:
@@ -1466,14 +1874,23 @@
 		switch (obj->where) {
 			case OBJ_INVENT:
 			case OBJ_MINVENT:
+/*JP
 			    pline("%s %s deactivates.",whose, xname(obj));
+*/
+			    pline("%s%sは停止した．",whose, xname(obj));
 			    break;
 			case OBJ_FLOOR:
+/*JP
 			    You("see %s deactivate.", an(xname(obj)));
+*/
+			    pline("%sが停止するのが見えた．", xname(obj));
 			    break;
 		}
 	    } else {
+/*JP
 		You("hear a lightsaber deactivate.");
+*/
+		pline("%sのうなりが聞こえなくなった．", xname(obj));
 	    }
 	}
 	if (obj->otyp == RED_DOUBLE_LIGHTSABER) obj->altmode = FALSE;
@@ -1738,14 +2155,20 @@
 
     if(levl[u.ux][u.uy].typ == CLOUD) {
 	/* inside a cloud during a thunder storm is deafening */
+/*JP
 	pline("Kaboom!!!  Boom!!  Boom!!");
+*/
+	pline("ピカッ！！ゴロゴロゴロゴロ！！ドーン！");
 	if(!u.uinvulnerable) {
 	    stop_occupation();
 	    nomul(-3);
 	    nomovemsg = 0;
 	}
     } else
+/*JP
 	You_hear("a rumbling noise.");
+*/
+	You_hear("雷の音を聞いた．");
 }
 #endif /* OVL1 */
 
diff -aurN slashem-0.0.7E6F2/src/topten.c jslashem-0.0.7E6F2-J0.0.8/src/topten.c
--- slashem-0.0.7E6F2/src/topten.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/topten.c	2004-06-30 22:56:08.000000000 +0900
@@ -83,10 +83,17 @@
 
 /* must fit with end.c; used in rip.c */
 NEARDATA const char * const killed_by_prefix[] = {
+#if 0 /*JP*/
 	"killed by ", "betrayed by ", "choked on ", "poisoned by ", "died of ", 
 	"drowned in ", "burned by ", "dissolved in ", "crushed to death by ", 
 	"petrified by ", "turned to slime by ", "killed by ", 
 	"", "", "", "", ""
+#else
+	"死んだ", "に裏切られて死んだ", "で窒息した", "の毒で死んだ", "",
+	"溺死した", "焼死した", "溶岩に溶けた", "押し潰された",
+	"石になった", "にスライムにされた", "虐殺された",
+	"", "", "", "", ""
+#endif
 };
 
 static winid toptenwin = WIN_ERR;
@@ -399,18 +406,35 @@
 	switch (killer_format) {
 		default: impossible("bad killer format?");
 		case KILLED_BY_AN:
+#if 0 /*JP*/
 			Strcat(t0->death, killed_by_prefix[how]);
 			(void) strncat(t0->death, an(killer),
 						DTHSZ-strlen(t0->death));
+#else
+			(void) strncat(t0->death, an(killer),
+						DTHSZ-strlen(t0->death));
+			Strcat(t0->death, killed_by_prefix[how]);
+#endif
 			break;
 		case KILLED_BY:
+#if 0 /*JP*/
 			Strcat(t0->death, killed_by_prefix[how]);
 			(void) strncat(t0->death, killer,
 						DTHSZ-strlen(t0->death));
+#else
+			(void) strncat(t0->death, killer,
+						DTHSZ-strlen(t0->death));
+			Strcat(t0->death, killed_by_prefix[how]);
+#endif
 			break;
 		case NO_KILLER_PREFIX:
 			(void) strncat(t0->death, killer, DTHSZ);
 			break;
+#if 1 /*JP*/
+		case KILLED_SUFFIX:
+			(void) strncat(t0->death, killer, DTHSZ);
+			Strcat(t0->death, "殺された");
+#endif
 	}
 	t0->birthdate = yyyymmdd(u.ubirthday);
 	t0->deathdate = yyyymmdd((time_t)0L);
@@ -443,8 +467,13 @@
 		char pbuf[BUFSZ];
 		topten_print("");
 		Sprintf(pbuf,
+#if 0 /*JP*/
 	      "Since you were in %s mode, the score list will not be checked.",
 		    wizard ? "wizard" : "discover");
+#else
+	      "%sモードでプレイしたのでスコアリストには載らない．",
+		    wizard ? "ウィザード" : "発見");
+#endif
 		topten_print(pbuf);
 	    }
 	    goto showwin;
@@ -510,7 +539,10 @@
 			HUP {
 			    char pbuf[BUFSZ];
 			    Sprintf(pbuf,
+/*JP
 			  "You didn't beat your previous score of %ld points.",
+*/
+			  "あなたは以前の%ldポイントのスコアに届かなかった．",
 				    t1->points);
 			    topten_print(pbuf);
 			    topten_print("");
@@ -546,12 +578,20 @@
 #endif	/* UPDATE_RECORD_IN_PLACE */
 		if(!done_stopprint) if(rank0 > 0){
 		    if(rank0 <= 10)
+/*JP
 			topten_print("You made the top ten list!");
+*/
+			topten_print("あなたはトップ10リストに載った！");
 		    else {
 			char pbuf[BUFSZ];
 			Sprintf(pbuf,
+#if 0 /*JP*/
 			  "You reached the %d%s place on the top %d list.",
 				rank0, ordin(rank0), ENTRYMAX);
+#else
+			  "あなたは，トップ%dリストの%d位に載った！",
+				ENTRYMAX, rank0 );
+#endif
 			topten_print(pbuf);
 		    }
 		    topten_print("");
@@ -650,10 +690,26 @@
 {
 	boolean second_line = TRUE;
 	char linebuf[BUFSZ];
+#if 0 /*JP*/
 	char *bp, hpbuf[24], linebuf3[BUFSZ];
+#else
+	char *bp, hpbuf[24];
+	char who[BUFSZ];
+	char where[BUFSZ];
+	char action[BUFSZ];
+	char car[BUFSZ];
+	char cdr[BUFSZ];
+	const char *jdeath;
+#endif
 	int hppos, lngr;
 
 
+#if 1 /*JP*/
+	linebuf[0] = '\0';
+	who[0] = '\0';
+	where[0] = '\0';
+	action[0] = '\0';
+#endif
 	linebuf[0] = '\0';
 	if (rank) Sprintf(eos(linebuf), "%3d", rank);
 	else Strcat(linebuf, "   ");
@@ -668,9 +724,27 @@
 	 */
 	Sprintf(eos(linebuf), "-%s", t1->plgend);
 	if (t1->plalign[0] != '?')
+/*JP
 		Sprintf(eos(linebuf), "-%s ", t1->plalign);
+*/
+		Sprintf(eos(linebuf), "-%s", t1->plalign);
 	else
+/*JP
 		Strcat(linebuf, " ");
+*/
+		Strcat(linebuf, "");
+#if 1 /*JP*/
+	Strcat(linebuf, "は");
+/*JP: 日本語では「○○を手に」を先に追加しないと不自然 */
+	jdeath = t1->death;
+	if (!strncmp(jdeath, "魔除けを手に", 12))
+	    jdeath += 12;
+	else if (!strncmp(jdeath, "天上で恥辱を受け", 16))
+	    jdeath += 16;
+	else if (!strncmp(jdeath, "偽物の魔除けを掴まされ", 24))
+	    jdeath += 24;
+#endif
+#if 0 /*JP*/
 	if (!strncmp("escaped", t1->death, 7)) {
 	    Sprintf(eos(linebuf), "escaped the dungeon %s[max level %d]",
 		    !strncmp(" (", t1->death + 7, 2) ? t1->death + 7 + 2 : "",
@@ -678,8 +752,22 @@
 	    /* fixup for closing paren in "escaped... with...Amulet)[max..." */
 	    if ((bp = index(linebuf, ')')) != 0)
 		*bp = (t1->deathdnum == astral_level.dnum) ? '\0' : ' ';
+#else
+	if (!strncmp("脱出した", jdeath, 8)
+	    || !strncmp("escaped", jdeath, 7)) {
+	    char jbuf[BUFSZ];
+	    strncpy(jbuf, t1->death, jdeath - t1->death);
+	    jbuf[jdeath - t1->death] = '\0';
+	    Sprintf(action, "%s迷宮から脱出した[最大地下%d階]",
+		    jbuf, t1->maxlvl);
+#endif
 	    second_line = FALSE;
+#if 0 /*JP*/
 	} else if (!strncmp("ascended", t1->death, 8)) {
+#else
+	} else if (!strncmp("昇天した", jdeath, 8)
+		   || !strncmp("ascended", jdeath, 8)) {
+#endif
 
 #ifdef RECORD_CONDUCT
 		/* Add a notation for conducts kept */
@@ -713,13 +801,28 @@
 		}
 #endif
 
+#if 0 /*JP:T*/
 	    Sprintf(eos(linebuf), "ascended to demigod%s-hood",
 		    (t1->plgend[0] == 'F') ? "dess" : "");
+#else
+	    Sprintf(action, "昇天し%s神となった",
+		    (t1->plgend[0] == 'F') ? "女" : "");
+#endif
 	    second_line = FALSE;
 	} else {
+/*JP
 	    if (!strncmp(t1->death, "quit", 4)) {
+*/
+	    if (!strncmp(jdeath, "抜けた", 4)) {
+#if 0 /*JP*/
 		Strcat(linebuf, "quit");
+#else
+		Strcat(action, t1->death);
+#endif
 		second_line = FALSE;
+#if 1 /*JP*/
+	    }
+#else
 	    } else if (!strncmp(t1->death, "died of st", 10)) {
 		Strcat(linebuf, "starved to death");
 		second_line = FALSE;
@@ -733,53 +836,119 @@
 	    } else if (!strncmp(t1->death, "petrified by ", 13)) {
 		Strcat(linebuf, "turned to stone");
 	    } else Strcat(linebuf, "died");
+#endif /*JP*/
 
 	    if (t1->deathdnum == astral_level.dnum) {
 		int deathlev = t1->deathlev;
+#if 0 /*JP*/
 		const char *arg, *fmt = " on the Plane of %s";
+#else
+		const char *arg;
+#endif
 
 		if (!t1->ver_major && !t1->ver_minor && t1->patchlevel < 7)
 			deathlev--;
 
 		switch (deathlev) {
 		case -5:
+#if 0 /*JP*/
 			fmt = " on the %s Plane";
 			arg = "Astral";	break;
+#else
+			arg = "命の精霊界"; break;
+#endif
 		case -4:
+/*JP
 			arg = "Water";	break;
+*/
+			arg = "水の精霊界"; break;
 		case -3:
+/*JP
 			arg = "Fire";	break;
+*/
+			arg = "火の精霊界"; break;
 		case -2:
+/*JP
 			arg = "Air";	break;
+*/
+			arg = "風の精霊界"; break;
 		case -1:
+/*JP
 			arg = "Earth";	break;
+*/
+			arg = "地の精霊界"; break;
 		default:
 			arg = "Void";	break;
 		}
+/*JP
 		Sprintf(eos(linebuf), fmt, arg);
+*/
+		Sprintf(where, "%sにて", arg);
 	    } else {
+/*JP
 		Sprintf(eos(linebuf), " in %s", dungeons[t1->deathdnum].dname);
+*/
+		Sprintf(eos(linebuf), "%s", jtrns_obj('d', dungeons[t1->deathdnum].dname));
 		if (t1->deathdnum != knox_level.dnum)
+/*JP
 		    Sprintf(eos(linebuf), " on level %d", t1->deathlev);
+*/
+		    Sprintf(eos(linebuf), "の地下%d階にて", t1->deathlev);
 		if (t1->deathlev != t1->maxlvl)
+/*JP
 		    Sprintf(eos(linebuf), " [max %d]", t1->maxlvl);
+*/
+		    Sprintf(eos(where), "[最大地下%d階]", t1->maxlvl);
 	    }
 
 	    /* kludge for "quit while already on Charon's boat" */
 	    if (!strncmp(t1->death, "quit ", 5))
 		Strcat(linebuf, t1->death + 4);
 	}
+#if 0 /*JP*/
 	Strcat(linebuf, ".");
+#endif
 
 	/* Quit, starved, ascended, and escaped contain no second line */
 	if (second_line)
+/*JP
 	    Sprintf(eos(linebuf), "  %c%s.", highc(*(t1->death)), t1->death+1);
+*/
+	    Sprintf(action, "%s", t1->death);
 
+#if 1 /*JP*/
+	Sprintf(eos(linebuf), "%s%s%s．", who, where, action);
+#endif
 	lngr = (int)strlen(linebuf);
 	if (t1->hp <= 0) hpbuf[0] = '-', hpbuf[1] = '\0';
 	else Sprintf(hpbuf, "%d", t1->hp);
 	/* beginning of hp column after padding (not actually padded yet) */
 	hppos = COLNO - (sizeof("  Hp [max]")-1); /* sizeof(str) includes \0 */
+#if 1 /*JP*/
+	while(lngr >= hppos ){
+/*
+**	hpposより前の適当な位置で分割する．
+*/
+	    car[0] = '\0';
+	    cdr[0] = '\0';
+	    split_japanese(linebuf, car, cdr, hppos);
+
+	    bp = eos(car);
+	    if (so) {
+		while (bp < car + (COLNO-1)) *bp++ = ' ';
+		*bp = 0;
+		topten_print_bold(car);
+	    } else
+		topten_print(car);
+	    
+	    Sprintf(linebuf, "%15s %s", "", cdr);
+	    lngr = (int)strlen(linebuf);
+	}
+/*
+  日本語が入ると文字列を後から見ていくことはできないため
+  コメントアウト
+*/
+#else
 	while (lngr >= hppos) {
 	    for(bp = eos(linebuf);
 		    !(*bp == ' ' && (bp-linebuf < hppos));
@@ -799,6 +968,7 @@
 	    Sprintf(linebuf, "%15s %s", "", linebuf3);
 	    lngr = strlen(linebuf);
 	}
+#endif /*JP*/
 	/* beginning of hp column not including padding */
 	hppos = COLNO - 7 - (int)strlen(hpbuf);
 	bp = eos(linebuf);
diff -aurN slashem-0.0.7E6F2/src/trap.c jslashem-0.0.7E6F2-J0.0.8/src/trap.c
--- slashem-0.0.7E6F2/src/trap.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/trap.c	2004-07-27 09:28:50.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 extern const char * const destroy_strings[];	/* from zap.c */
@@ -38,15 +46,28 @@
 STATIC_VAR const char tower_of_flame[];
 STATIC_VAR const char *A_gush_of_water_hits;
 STATIC_VAR const char * const blindgas[6];
+#if 1 /*JP*/
+STATIC_VAR const char *dig_you[2];
+STATIC_VAR const char *web_you[2];
+STATIC_VAR const char * const blindgas[6];
+#endif
 
 #else
 
+#if 0 /*JP*/
 STATIC_VAR const char * const a_your[2] = { "a", "your" };
 STATIC_VAR const char * const A_Your[2] = { "A", "Your" };
 STATIC_VAR const char tower_of_flame[] = "tower of flame";
 STATIC_VAR const char * const A_gush_of_water_hits = "A gush of water hits";
 STATIC_VAR const char * const blindgas[6] = 
 	{"humid", "odorless", "pungent", "chilling", "acrid", "biting"};
+#else
+const char *set_you[2] = { "", "あなたの仕掛けた" };
+STATIC_VAR const char *dig_you[2] = { "", "あなたが掘った" };
+STATIC_VAR const char *web_you[2] = { "", "あなたが張った" };
+STATIC_VAR const char * const blindgas[6] = 
+	{"むしむしする", "無臭の", "刺激臭のする", "冷たい", "ツンとしたにおいの", "ひりひりする"};
+#endif
 
 #endif /* OVLB */
 
@@ -69,9 +90,15 @@
 	    item = (victim == &youmonst) ? uarmh : which_armor(victim, W_ARMH);
 	    if (item) {
 		mat_idx = objects[item->otyp].oc_material;
+/*JP
 	    	Sprintf(buf,"%s helmet", materialnm[mat_idx] );
+*/
+	    	Sprintf(buf,"%sの兜", materialnm[mat_idx] );
 	    }
+/*JP
 	    if (!burn_dmg(item, item ? buf : "helmet")) continue;
+*/
+	    if (!burn_dmg(item, item ? buf : "兜")) continue;
 	    break;
 	case 1:
 	    item = (victim == &youmonst) ? uarmc : which_armor(victim, W_ARMC);
@@ -87,20 +114,32 @@
 #ifdef TOURIST
 	    item = (victim == &youmonst) ? uarmu : which_armor(victim, W_ARMU);
 	    if (item)
+/*JP
 		(void) burn_dmg(item, "shirt");
+*/
+		(void) burn_dmg(item, "シャツ");
 #endif
 	    return TRUE;
 	case 2:
 	    item = (victim == &youmonst) ? uarms : which_armor(victim, W_ARMS);
+/*JP
 	    if (!burn_dmg(item, "wooden shield")) continue;
+*/
+	    if (!burn_dmg(item, "木の盾")) continue;
 	    break;
 	case 3:
 	    item = (victim == &youmonst) ? uarmg : which_armor(victim, W_ARMG);
+/*JP
 	    if (!burn_dmg(item, "gloves")) continue;
+*/
+	    if (!burn_dmg(item, "小手")) continue;
 	    break;
 	case 4:
 	    item = (victim == &youmonst) ? uarmf : which_armor(victim, W_ARMF);
+/*JP
 	    if (!burn_dmg(item, "boots")) continue;
+*/
+	    if (!burn_dmg(item, "靴")) continue;
 	    break;
 	}
 	break; /* Out of while loop */
@@ -123,8 +162,14 @@
 boolean print;
 struct monst *victim;
 {
+/*JP
 	static NEARDATA const char * const action[] = { "smoulder", "rust", "rot", "corrode" };
+*/
+	static NEARDATA const char * const action[] = { "くすぶった","錆びた","腐った","腐食した" };
+/*JP
 	static NEARDATA const char * const msg[] =  { "burnt", "rusted", "rotten", "corroded" };
+*/
+	static NEARDATA const char * const msg[] =  { "焦げた", "錆びた", "腐った", "腐食した" };
 	boolean vulnerable = FALSE;
 	boolean grprot = FALSE;
 	boolean is_primary = TRUE;
@@ -154,10 +199,17 @@
 	if (!vulnerable) {
 	    if (flags.verbose) {
 		if (victim == &youmonst)
+/*JP
 		    Your("%s %s not affected.", ostr, vtense(ostr, "are"));
+*/
+		    Your("%sは影響を受けなかった．",ostr);
 		else if (vismon)
+#if 0 /*JP*/
 		    pline("%s's %s %s not affected.", Monnam(victim), ostr,
 			  vtense(ostr, "are"));
+#else
+		    pline("%sの%sは影響を受けなかった．", Monnam(victim), ostr);
+#endif
 	    }
 	} else if (erosion < MAX_ERODE) {
 	    if (grprot && otmp->greased) {
@@ -165,23 +217,46 @@
 	    } else if (otmp->oerodeproof || (otmp->blessed && !rnl(4))) {
 		if (flags.verbose) {
 		    if (victim == &youmonst)
+#if 0 /*JP*/
 			pline("Somehow, your %s %s not affected.",
 			      ostr, vtense(ostr, "are"));
+#else
+			pline("なぜか，%sは影響を受けなかった．",ostr);
+#endif
 		    else if (vismon)
+#if 0 /*JP*/
 			pline("Somehow, %s's %s %s not affected.",
 			      mon_nam(victim), ostr, vtense(ostr, "are"));
+#else
+			pline("なぜか，%sの%sは影響を受けなかった．",
+			      mon_nam(victim), ostr);
+#endif
 		}
 	    } else {
 		if (victim == &youmonst)
+#if 0 /*JP*/
 		    Your("%s %s%s!", ostr,
 			 vtense(ostr, action[type]),
 			 erosion+1 == MAX_ERODE ? " completely" :
 			    erosion ? " further" : "");
+#else
+		    Your("%sは%s%s！", ostr, 
+			 otmp->oeroded+1 == MAX_ERODE ? "完全に" :
+			 otmp->oeroded ? "さらに" : "",
+			 action[type]);
+#endif
 		else if (vismon)
+#if 0 /*JP*/
 		    pline("%s's %s %s%s!", Monnam(victim), ostr,
 			vtense(ostr, action[type]),
 			erosion+1 == MAX_ERODE ? " completely" :
 			  erosion ? " further" : "");
+#else
+		    pline("%sの%sは%s%s！", Monnam(victim), ostr,
+			  otmp->oeroded+1 == MAX_ERODE ? "完全に" :
+			  otmp->oeroded ? "さらに" : "",
+			  action[type]);
+#endif
 		if (is_primary)
 		    otmp->oeroded++;
 		else
@@ -191,13 +266,24 @@
 	} else {
 	    if (flags.verbose) {
 		if (victim == &youmonst)
+#if 0 /*JP*/
 		    Your("%s %s completely %s.", ostr,
 			 vtense(ostr, Blind ? "feel" : "look"),
 			 msg[type]);
+#else
+		    Your("%sは完全に%s%s．", ostr, msg[type],
+			 Blind ? "ようだ" : "");
+#endif
 		else if (vismon)
+#if 0 /*JP*/
 		    pline("%s's %s %s completely %s.",
 			  Monnam(victim), ostr,
 			  vtense(ostr, "look"), msg[type]);
+#else
+		    pline("%sの%sは完全に%s%s．", 
+			  Monnam(victim), ostr, msg[type],
+			  Blind ? "ようだ" : "");
+#endif
 	    }
 	}
 	return(TRUE);
@@ -209,25 +295,44 @@
 register const char *ostr;
 struct monst *victim;
 {
+/*JP
 	static const char txt[] = "protected by the layer of grease!";
+*/
+	static const char txt[] = "油の塗りこみによって守られている！";
 	boolean vismon = victim && (victim != &youmonst) && canseemon(victim);
 
 	if (ostr) {
 	    if (victim == &youmonst)
+/*JP
 		Your("%s %s %s", ostr, vtense(ostr, "are"), txt);
+*/
+		Your("%sは%s", ostr, txt);
 	    else if (vismon)
+#if 0 /*JP*/
 		pline("%s's %s %s %s", Monnam(victim),
 		    ostr, vtense(ostr, "are"), txt);
+#else
+		pline("%sの%sは%s", Monnam(victim), ostr, txt);
+#endif
 	} else {
 	    if (victim == &youmonst)
+/*JP
 		Your("%s %s",aobjnam(otmp,"are"), txt);
+*/
+		Your("%sは%s",xname(otmp),txt);
 	    else if (vismon)
+/*JP
 		pline("%s's %s %s", Monnam(victim), aobjnam(otmp,"are"), txt);
+*/
+		pline("%sの%sは%s",Monnam(victim), xname(otmp), txt);
 	}
 	if (!rn2(2)) {
 	    otmp->greased = 0;
 	    if (carried(otmp)) {
+/*JP
 		pline_The("grease dissolves.");
+*/
+		pline("油ははげてしまった．");
 		update_inventory();
 	    }
 	}
@@ -342,11 +447,20 @@
 	    seetrap(t);
 	    if (!In_sokoban(&u.uz)) {
 		if (t->ttyp == TRAPDOOR)
+/*JP
 			pline("A trap door opens up under you!");
+*/
+			pline("落し扉があなたの足元に開いた！");
 		else 
+/*JP
 			pline("There's a gaping hole under you!");
+*/
+			pline("あなたの足下にぽっかりと穴が開いている！");
 	    }
+/*JP
 	} else pline_The("%s opens up under you!", surface(u.ux,u.uy));
+*/
+	} else pline("足元の%sに穴が開いた！", surface(u.ux,u.uy));
 
 	if (In_sokoban(&u.uz) && Can_fall_thru(&u.uz))
 	    ;	/* KMH -- You can't escape the Sokoban level traps */
@@ -357,20 +471,37 @@
 					newlevel == dunlevs_in_dungeon(&u.uz))
 		) {
 		if (Role_if(PM_ARCHEOLOGIST) && uwep && uwep->otyp == BULLWHIP)            
+/*JP
 		pline("But thanks to your trusty whip ...");
-	    dont_fall = "don't fall in.";
+*/
+		    pline("だが，あなたの信頼できる鞭のおかげで．．．");
+/*JP
+	    dont_fall = "あなたは落ちなかった．";
+*/
 	} else if (youmonst.data->msize >= MZ_HUGE) {
+/*JP
 	    dont_fall = "don't fit through.";
+*/
+	    dont_fall = "通り抜けるにはサイズが合わない．";
 	} else if (!next_to_u()) {
+/*JP
 	    dont_fall = "are jerked back by your pet!";
+*/
+	    dont_fall = "あなたはペットによって引っぱりもどされた！";
 	}
 	if (dont_fall) {
+/*JP
 	    You(dont_fall);
+*/
+	    pline(dont_fall);
 	    /* hero didn't fall through, but any objects here might */
 	    impact_drop((struct obj *)0, u.ux, u.uy, 0);
 	    if (!td) {
 		display_nhwindow(WIN_MESSAGE, FALSE);
+/*JP
 		pline_The("opening under you closes up.");
+*/
+		pline_The("足下に開いていたものは閉じた．");
 	    }
 	    return;
 	}
@@ -383,7 +514,10 @@
 	    dtmp.dlevel = newlevel;
 	}
 	if (!td)
+/*JP
 	    Sprintf(msgbuf, "The hole in the %s above you closes up.",
+*/
+	    Sprintf(msgbuf, "%sに開いた穴は閉じた．",
 		    ceiling(u.ux,u.uy));
 	schedule_goto(&dtmp, FALSE, TRUE, 0,
 		      (char *)0, !td ? msgbuf : (char *)0);
@@ -491,24 +625,52 @@
 	if (mon->m_ap_type) seemimic(mon);
 	else mon->mundetected = FALSE;
 	if ((x == u.ux && y == u.uy) || cause == ANIMATE_SPELL) {
+#if 0 /*JP*/
 	    const char *comes_to_life = nonliving(mon->data) ?
 					"moves" : "comes to life"; 
+#else
+	    const char *comes_to_life = nonliving(mon->data) ?
+					"動い" : "生命を帯び";
+#endif
 	    if (cause == ANIMATE_SPELL)
+#if 0 /*JP*/
 	    	pline("%s %s!", upstart(statuename),
 	    		canspotmon(mon) ? comes_to_life : "disappears");
+#else
+	    	pline("%sは%sた！", upstart(statuename),
+	    		canspotmon(mon) ? comes_to_life : "消え");
+#endif
 	    else
+#if 0 /*JP*/
 		pline_The("statue %s!",
 			canspotmon(mon) ? comes_to_life : "disappears");
+#else
+		pline("彫像は%sた！",
+			canspotmon(mon) ? comes_to_life : "消え");
+#endif
 	    if (historic) {
+/*JP
 		    You_feel("guilty that the historic statue is now gone.");
+*/
+		    You("歴史的な彫像がなくなってしまったことに罪を感じた．");
 		    adjalign(-1);
 	    }
 	} else if (cause == ANIMATE_SHATTER)
+#if 0 /*JP*/
 	    pline("Instead of shattering, the statue suddenly %s!",
 		canspotmon(mon) ? "comes to life" : "disappears");
+#else
+	    pline("砕けるかわりに，彫像は%sた！",
+		canspotmon(mon) ? "生命を帯び" : "消え");
+#endif
 	else { /* cause == ANIMATE_NORMAL */
+#if 0 /*JP*/
 	    You("find %s posing as a statue.",
 		canspotmon(mon) ? a_monnam(mon) : something);
+#else
+	    You("%sが彫像のふりをしているのを見つけた．",
+		canspotmon(mon) ? a_monnam(mon) : something);
+#endif
 	    stop_occupation();
 	}
 	/* avoid hiding under nothing */
@@ -608,28 +770,46 @@
 	     * reason why the player cannot escape the trap with a dexterity
 	     * check, clinging to the ceiling, etc.
 	     */
+#if 0 /*JP:T*/
 	    pline("Air currents pull you down into %s %s!",
 	    	a_your[trap->madeby_u],
 	    	defsyms[trap_to_defsym(ttype)].explanation);
+#else
+	    pline("空気の流れがあなたを%sに引き戻した！",
+	    	jtrns_obj('^', defsyms[trap_to_defsym(ttype)].explanation));
+#endif
 	    /* then proceed to normal trap effect */
 	} else if (already_seen) {
 	    if ((Levitation || Flying) &&
 		    (ttype == PIT || ttype == SPIKED_PIT || ttype == HOLE ||
 		    ttype == BEAR_TRAP)) {
+#if 0 /*JP:T*/
 		You("%s over %s %s.",
 		    Levitation ? "float" : "fly",
 		    a_your[trap->madeby_u],
 		    defsyms[trap_to_defsym(ttype)].explanation);
+#else
+		You("%s%sの上%s．",
+		    set_you[trap->madeby_u],
+		    jtrns_obj('^', defsyms[trap_to_defsym(ttype)].explanation),
+		    Levitation ? "を見下ろした" : "を飛んでいる");
+#endif
 		return;
 	    }
 	    if(!Fumbling && ttype != MAGIC_PORTAL &&
 		ttype != ANTI_MAGIC && !forcebungle &&
 		(!rn2(5) ||
 	    ((ttype == PIT || ttype == SPIKED_PIT) && is_clinger(youmonst.data)))) {
+#if 0 /*JP:T*/
 		You("escape %s %s.",
 		    (ttype == ARROW_TRAP && !trap->madeby_u) ? "an" :
 			a_your[trap->madeby_u],
 		    defsyms[trap_to_defsym(ttype)].explanation);
+#else
+		You("%s%sをするりと避けた．",
+		    set_you[trap->madeby_u],
+		    jtrns_obj('^', defsyms[trap_to_defsym(ttype)].explanation));
+#endif
 		return;
 	    }
 	}
@@ -641,14 +821,20 @@
 	switch(ttype) {
 	    case ARROW_TRAP:
 		if (trap->once && trap->tseen && !rn2(15)) {
+/*JP
 		    You_hear("a loud click!");
+*/
+		    You_hear("ガチャッという大きな音を聞いた！");
 		    deltrap(trap);
 		    newsym(u.ux,u.uy);
 		    break;
 		}
 		trap->once = 1;
 		seetrap(trap);
+/*JP
 		pline("An arrow shoots out at you!");
+*/
+		pline("矢が飛んできた！");
 		otmp = mksobj(ARROW, TRUE, FALSE);
 		otmp->quan = 1L;
 		otmp->owt = weight(otmp);
@@ -657,7 +843,10 @@
 		if (u.usteed && !rn2(2) && steedintrap(trap, otmp)) /* nothing */;
 		else
 #endif
+/*JP
 		if (thitu(8, dmgval(otmp, &youmonst), otmp, "arrow")) {
+*/
+		if (thitu(8, dmgval(otmp, &youmonst), otmp, "矢")) {
 		    obfree(otmp, (struct obj *)0);
 		} else {
 		    place_object(otmp, u.ux, u.uy);
@@ -668,14 +857,19 @@
 		break;
 	    case DART_TRAP:
 		if (trap->once && trap->tseen && !rn2(15)) {
+/*JP
 		    You_hear("a soft click.");
+*/
+		    You_hear("プチッという音を聞いた．");
 		    deltrap(trap);
 		    newsym(u.ux,u.uy);
 		    break;
 		}
 		trap->once = 1;
 		seetrap(trap);
+/*JP
 		pline("A little dart shoots out at you!");
+*/
 		otmp = mksobj(DART, TRUE, FALSE);
 		otmp->quan = 1L;
 		otmp->owt = weight(otmp);
@@ -684,9 +878,15 @@
 		if (u.usteed && !rn2(2) && steedintrap(trap, otmp)) /* nothing */;
 		else
 #endif
+/*JP
 		if (thitu(7, dmgval(otmp, &youmonst), otmp, "little dart")) {
+*/
+		if (thitu(7, dmgval(otmp, &youmonst), otmp, "投げ矢")) {
 		    if (otmp->opoisoned)
+/*JP
 			poisoned("dart", A_CON, "little dart", -10);
+*/
+			poisoned("投げ矢", A_CON, "小さな投げ矢", -10);
 		    obfree(otmp, (struct obj *)0);
 		} else {
 		    place_object(otmp, u.ux, u.uy);
@@ -697,8 +897,13 @@
 		break;
 	    case ROCKTRAP:
 		if (trap->once && trap->tseen && !rn2(15)) {
+#if 0 /*JP*/
 		    pline("A trap door in %s opens, but nothing falls out!",
 			  the(ceiling(u.ux,u.uy)));
+#else
+		    pline("落し扉が%sに開いたが，何も落ちてこなかった！",
+			  ceiling(u.ux,u.uy));
+#endif
 		    deltrap(trap);
 		    newsym(u.ux,u.uy);
 		} else {
@@ -710,17 +915,26 @@
 		    otmp->quan = 1L;
 		    otmp->owt = weight(otmp);
 
+/*JP
 		    pline("A trap door in %s opens and %s falls on your %s!",
+*/
+		    pline("落し扉が%sに開き，%sがあなたの%sに落ちてきた！",
 			  the(ceiling(u.ux,u.uy)),
 			  an(xname(otmp)),
 			  body_part(HEAD));
 
 		    if (uarmh) {
 			if(is_metallic(uarmh)) {
+/*JP
 			    pline("Fortunately, you are wearing a hard helmet.");
+*/
+			    pline("幸運にも，あなたは固い兜を身につけていた．");
 			    dmg = 2;
 			} else if (flags.verbose) {
+/*JP
 			    Your("%s does not protect you.", xname(uarmh));
+*/
+			    Your("%sでは防げない．", xname(uarmh));
 			}
 		    }
 
@@ -728,7 +942,10 @@
 		    stackobj(otmp);
 		    newsym(u.ux,u.uy);	/* map the rock */
 
+/*JP
 		    losehp(dmg, "falling rock", KILLED_BY_AN);
+*/
+		    losehp(dmg, "落岩で", KILLED_BY_AN);
 		    exercise(A_STR, FALSE);
 		}
 		break;
@@ -738,13 +955,22 @@
 		    if (!Blind) {
 			seetrap(trap);
 			if (Hallucination)
+/*JP
 				You("notice a crease in the linoleum.");
+*/
+				You("床の仕上材のしわに気がついた．");
 			else
+/*JP
 				You("notice a loose board below you.");
+*/
+				You("足元の緩んだ板に気がついた．");
 		    }
 		} else {
 		    seetrap(trap);
+/*JP
 		    pline("A board beneath you squeaks loudly.");
+*/
+		    pline("足元の板が大きくきしんだ．");
 		    wake_nearby();
 		}
 		break;
@@ -754,8 +980,13 @@
 		seetrap(trap);
 		if(amorphous(youmonst.data) || is_whirly(youmonst.data) ||
 						    unsolid(youmonst.data)) {
+#if 0 /*JP*/
 		    pline("%s bear trap closes harmlessly through you.",
 			    A_Your[trap->madeby_u]);
+#else
+		    pline("%s熊の罠は噛みついたが，するっと通り抜けた．",
+			    set_you[trap->madeby_u]);
+#endif
 		    break;
 		}
 		if(
@@ -763,24 +994,43 @@
 		   !u.usteed &&
 #endif
 		   youmonst.data->msize <= MZ_SMALL) {
+#if 0 /*JP*/
 		    pline("%s bear trap closes harmlessly over you.",
 			    A_Your[trap->madeby_u]);
+#else
+		    pline("%s熊の罠は噛みついたが，遥か上方だった．",
+			    set_you[trap->madeby_u]);
+#endif
 		    break;
 		}
 		u.utrap = rn1(4, 4);
 		u.utraptype = TT_BEARTRAP;
 #ifdef STEED
 		if (u.usteed) {
+#if 0 /*JP*/
 		    pline("%s bear trap closes on %s %s!",
 			A_Your[trap->madeby_u], s_suffix(mon_nam(u.usteed)),
 			mbodypart(u.usteed, FOOT));
+#else
+		    pline("%s熊の罠は%sの%sに噛みついた！",
+			set_you[trap->madeby_u], mon_nam(u.usteed),
+			mbodypart(u.usteed, FOOT));
+#endif
 		} else
 #endif
 		{
+#if 0 /*JP*/
 		    pline("%s bear trap closes on your %s!",
 			    A_Your[trap->madeby_u], body_part(FOOT));
+#else
+		    pline("%s熊の罠があなたの%sに噛みついた！",
+			  set_you[trap->madeby_u], body_part(FOOT));
+#endif
 		    if(u.umonnum == PM_OWLBEAR || u.umonnum == PM_BUGBEAR)
+/*JP
 			You("howl in anger!");
+*/
+			You("怒りの咆哮をあげた！");
 		}
 		exercise(A_DEX, FALSE);
 		break;
@@ -788,10 +1038,16 @@
 	    case SLP_GAS_TRAP:
 		seetrap(trap);
 		if(Sleep_resistance || breathless(youmonst.data)) {
+/*JP
 		    You("are enveloped in a cloud of gas!");
+*/
+		    You("ガス雲につつまれた！");
 		    break;
 		}
+/*JP
 		pline("A cloud of gas puts you to sleep!");
+*/
+		pline("あなたはガス雲で眠ってしまった！");
 		fall_asleep(-rnd(25), TRUE);
 #ifdef STEED
 		(void) steedintrap(trap, (struct obj *)0);
@@ -803,21 +1059,42 @@
 		if (u.umonnum == PM_IRON_GOLEM) {
 		    int dam = u.mhmax;
 
+/*JP
 		    pline("%s you!", A_gush_of_water_hits);
+*/
+		    pline("水が噴出してあなたに命中した！");
+/*JP
 		    You("are covered with rust!");
+*/
+		    You("錆に覆われた！");
 		    if (Half_physical_damage) dam = (dam+1) / 2;
+/*JP
 		    losehp(dam, "rusting away", KILLED_BY);
+*/
+		    losehp(dam, "完全に錆びて", KILLED_BY);
 		    break;
 		} else if (u.umonnum == PM_FLAMING_SPHERE) {
 		    int dam = u.mhmax;
 
+/*JP
 		    pline("%s you!", A_gush_of_water_hits);
+*/
+		    pline("水が噴出してあなたに命中した！");
+/*JP
 		    You("are extinguished!");
+*/
+		    You("消火された！");
 		    if (Half_physical_damage) dam = (dam+1) / 2;
+/*JP
 		    losehp(dam, "drenching", KILLED_BY);
+*/
+		    losehp(dam, "ずぶぬれになって", KILLED_BY);
 		    break;
 		} else if (u.umonnum == PM_GREMLIN && rn2(3)) {
+/*JP
 		    pline("%s you!", A_gush_of_water_hits);
+*/
+		    pline("水が噴出してあなたに命中した！");
 		    (void)split_mon(&youmonst, (struct monst *)0);
 		    break;
 		}
@@ -829,39 +1106,66 @@
 	     */
 		switch (rn2(5)) {
 		    case 0:
+/*JP
 			pline("%s you on the %s!", A_gush_of_water_hits,
+*/
+			pline("水が噴出してあなたの%sに命中した！",
 				    body_part(HEAD));
+/*JP
 			(void) rust_dmg(uarmh, "helmet", 1, TRUE, &youmonst);
+*/
+			(void) rust_dmg(uarmh, "兜", 1, TRUE, &youmonst);
 			break;
 		    case 1:
+/*JP
 			pline("%s your left %s!", A_gush_of_water_hits,
+*/
+			pline("水が噴出してあなたの左%sに命中した！",
 				    body_part(ARM));
+/*JP
 			if (rust_dmg(uarms, "shield", 1, TRUE, &youmonst))
+*/
+			if (rust_dmg(uarms, "盾", 1, TRUE, &youmonst))
 			    break;
 			if (u.twoweap || (uwep && bimanual(uwep)))
 			    erode_obj(u.twoweap ? uswapwep : uwep, FALSE, TRUE);
+/*JP
 glovecheck:		(void) rust_dmg(uarmg, "gauntlets", 1, TRUE, &youmonst);
+*/
+glovecheck:		(void) rust_dmg(uarmg, "小手", 1, TRUE, &youmonst);
 			/* Not "metal gauntlets" since it gets called
 			 * even if it's leather for the message
 			 */
 			break;
 		    case 2:
+/*JP
 			pline("%s your right %s!", A_gush_of_water_hits,
+*/
+			pline("水が噴出してあなたの右%sに命中した！",
 				    body_part(ARM));
 			erode_obj(uwep, FALSE, TRUE);
 			goto glovecheck;
 		    default:
+/*JP
 			pline("%s you!", A_gush_of_water_hits);
+*/
+			pline("水が噴出してあなたに命中した！");
 			for (otmp=invent; otmp; otmp = otmp->nobj)
 				    (void) snuff_lit(otmp);
 			if (uarmc)
 			    (void) rust_dmg(uarmc, cloak_simple_name(uarmc),
 						1, TRUE, &youmonst);
 			else if (uarm)
+/*JP
 			    (void) rust_dmg(uarm, "armor", 1, TRUE, &youmonst);
+*/
+			    (void) rust_dmg(uarm, "鎧", 1, TRUE, &youmonst);
 #ifdef TOURIST
 			else if (uarmu)
+/*JP
 			    (void) rust_dmg(uarmu, "shirt", 1, TRUE, &youmonst);
+*/
+			    (void) rust_dmg(uarmu, "シャツ", 1, TRUE, &youmonst);
 #endif
 		}
 		update_inventory();
@@ -879,13 +1183,28 @@
 		seetrap(trap);
 		if (!In_sokoban(&u.uz) && is_clinger(youmonst.data)) {
 		    if(trap->tseen) {
+#if 0 /*JP:T*/
 			You("see %s %spit below you.", a_your[trap->madeby_u],
 			    ttype == SPIKED_PIT ? "spiked " : "");
+#else
+			pline("足元に%s%s落し穴を発見した．",
+			    dig_you[trap->madeby_u],
+			    ttype == SPIKED_PIT ? "トゲだらけの" : "");
+#endif
 		    } else {
+#if 0 /*JP:T*/
 			pline("%s pit %sopens up under you!",
 			    A_Your[trap->madeby_u],
 			    ttype == SPIKED_PIT ? "full of spikes " : "");
+#else
+			pline("%s%s落し穴が足元に開いた！",
+			      dig_you[trap->madeby_u],
+			      ttype == SPIKED_PIT ? "トゲだらけの" : "");
+#endif
+/*JP
 			You("don't fall in!");
+*/
+			pline("しかし，あなたは落ちなかった！");
 		    }
 		    break;
 		}
@@ -894,40 +1213,80 @@
 #ifdef STEED
 		    if (u.usteed) {
 		    	if ((trflags & RECURSIVETRAP) != 0)
+#if 0 /*JP*/
 			    Sprintf(verbbuf, "and %s fall",
 				x_monnam(u.usteed,
 				    u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
 				    (char *)0, SUPPRESS_SADDLE, FALSE));
+#else /*JP*/
+			    Sprintf(verbbuf, "と%sは",
+				x_monnam(u.usteed,
+				    u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
+				    (char *)0, SUPPRESS_SADDLE, FALSE));
+#endif /*JP*/
 			else
+#if 0 /*JP*/
 			    Sprintf(verbbuf,"lead %s",
 				x_monnam(u.usteed,
 					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
 				 	 "poor", SUPPRESS_SADDLE, FALSE));
+#else /*JP*/
+			    Sprintf(verbbuf,"は%sを道連れに",
+				x_monnam(u.usteed,
+					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
+				 	 "かわいそうな", SUPPRESS_SADDLE, FALSE));
+#endif /*JP*/
 		    } else
 #endif
+/*JP
 		    Strcpy(verbbuf,"fall");
+*/
+		    Strcpy(verbbuf,"は");
+/*JP
 		   You("%s into %s pit!", verbbuf, a_your[trap->madeby_u]);
+*/
+		   pline("あなた%s%s落し穴に落ちた！", verbbuf, dig_you[trap->madeby_u]);
 		}
 		/* wumpus reference */
 		if (Role_if(PM_RANGER) && !trap->madeby_u && !trap->once &&
 			In_quest(&u.uz) && Is_qlocate(&u.uz)) {
+/*JP
 		    pline("Fortunately it has a bottom after all...");
+*/
+		    pline("幸い，結局は底があった．．．");
 		    trap->once = 1;
 		} else if (u.umonnum == PM_PIT_VIPER ||
 			u.umonnum == PM_PIT_FIEND)
+/*JP
 		    pline("How pitiful.  Isn't that the pits?");
+*/
+		    pline("この落し穴はいい仕事をしている．");
 		if (ttype == SPIKED_PIT) {
+/*JP
 		    const char *predicament = "on a set of sharp iron spikes";
+*/
+		    const char *predicament = "鋭い鉄のトゲトゲの上に落ちた";
 #ifdef STEED
 		    if (u.usteed) {
+#if 0 /*JP:T*/
 			pline("%s lands %s!",
 				upstart(x_monnam(u.usteed,
 					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
 					 "poor", SUPPRESS_SADDLE, FALSE)),
 			      predicament);
+#else
+			pline("%sは%s！",
+				upstart(x_monnam(u.usteed,
+					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
+					 "かわいそうな", SUPPRESS_SADDLE, FALSE)),
+			      predicament);
+#endif
 		    } else
 #endif
+/*JP
 		    You("land %s!", predicament);
+*/
+		    You("%s！", predicament);
 		}
 		if (!Passes_walls)
 		    u.utrap = rn1(6,2);
@@ -936,18 +1295,32 @@
 		if (!steedintrap(trap, (struct obj *)0)) {
 #endif
 		if (ttype == SPIKED_PIT) {
+#if 0 /*JP:T*/
 		    losehp(rnd(10),"fell into a pit of iron spikes",
 			NO_KILLER_PREFIX);
+#else
+		    losehp(rnd(10),"トゲだらけの落し穴に落ちて",
+			KILLED_BY);
+#endif
 		    if (!rn2(6))
+/*JP
 			poisoned("spikes", A_STR, "fall onto poison spikes", 8);
+*/
+			poisoned("トゲ", A_STR, "落し穴のトゲ", 8);
 		} else
+/*JP
 		    losehp(rnd(6),"fell into a pit", NO_KILLER_PREFIX);
+*/
+		    losehp(rnd(6),"落し穴に落ちて", KILLED_BY);
 		if (Punished && !carried(uball)) {
 		    unplacebc();
 		    ballfall();
 		    placebc();
 		}
+/*JP
 		selftouch("Falling, you");
+*/
+		selftouch("落下中，あなたは");
 		vision_full_recalc = 1;	/* vision limits change */
 		exercise(A_STR, FALSE);
 		exercise(A_DEX, FALSE);
@@ -982,21 +1355,37 @@
 		    if (acidic(youmonst.data) || u.umonnum == PM_GELATINOUS_CUBE ||
 			u.umonnum == PM_FIRE_ELEMENTAL) {
 			if (webmsgok)
+#if 0 /*JP*/
 			    You("%s %s spider web!",
 				(u.umonnum == PM_FIRE_ELEMENTAL) ? "burn" : "dissolve",
 				a_your[trap->madeby_u]);
+#else
+			    You("%sくもの巣を%s！",
+				web_you[trap->madeby_u],
+				(u.umonnum == PM_FIRE_ELEMENTAL) ? "焼いた" : "こなごなにした");
+#endif
 			deltrap(trap);
 			newsym(u.ux,u.uy);
 			break;
 		    }
+#if 0 /*JP:T*/
 		    if (webmsgok) You("flow through %s spider web.",
 			    a_your[trap->madeby_u]);
+#else
+		    if (webmsgok) You("%sくもの巣をするりと通り抜けた．",
+			    web_you[trap->madeby_u]);
+#endif
 		    break;
 		}
 		if (webmaker(youmonst.data)) {
 		    if (webmsgok)
+#if 0 /*JP:T*/
 		    	pline(trap->madeby_u ? "You take a walk on your web."
 					 : "There is a spider web here.");
+#else
+			pline(trap->madeby_u ? "自分で張ったくもの巣の上を歩いた．"
+			      : "ここにはくもの巣がある．");
+#endif
 		    break;
 		}
 		if (webmsgok) {
@@ -1004,17 +1393,34 @@
 		   verbbuf[0] = '\0';
 #ifdef STEED
 		   if (u.usteed)
+#if 0 /*JP*/
 		   	Sprintf(verbbuf,"lead %s",
 				x_monnam(u.usteed,
 					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
 				 	 "poor", SUPPRESS_SADDLE, FALSE));
+#else
+		   	Sprintf(verbbuf, "あなたと%s",
+				x_monnam(u.usteed,
+					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
+				 	 "かわいそうな", SUPPRESS_SADDLE, FALSE));
+#endif
 		   else
 #endif
 			
+#if 0 /*JP*/
 		    Sprintf(verbbuf, "%s", Levitation ? (const char *)"float" :
 		      		locomotion(youmonst.data, "stumble"));
+#else
+		    Sprintf(verbbuf, "%s", Levitation ? (const char *)"浮きながら" :
+		      		jconj(locomotion(youmonst.data, "つまずく"), "て"));
+#endif
+#if 0 /*JP*/
 		    You("%s into %s spider web!",
 			verbbuf, a_your[trap->madeby_u]);
+#else
+		    You("%s%sくもの巣にひっかかった！",
+			verbbuf, web_you[trap->madeby_u]);
+#endif
 		}
 		u.utraptype = TT_WEB;
 
@@ -1058,7 +1464,10 @@
 		    else {
 			u.utrap = 0;
 			if (webmsgok)
+/*JP
 				You("tear through %s web!", a_your[trap->madeby_u]);
+*/
+				You("%sくもの巣を切り裂いた！", web_you[trap->madeby_u]);
 			deltrap(trap);
 			newsym(u.ux,u.uy);	/* get rid of trap symbol */
 		    }
@@ -1074,9 +1483,18 @@
 		if (!rn2(30)) {
 		    deltrap(trap);
 		    newsym(u.ux,u.uy);	/* update position */
+/*JP
 		    You("are caught in a magical explosion!");
+*/
+		    You("魔法の爆発を浴びた！");
+/*JP
 		    losehp(rnd(10), "magical explosion", KILLED_BY_AN);
+*/
+		    losehp(rnd(10), "魔法の爆発を浴びて", KILLED_BY_AN);
+/*JP
 		    Your("body absorbs some of the magical energy!");
+*/
+		    Your("体は魔法のエネルギーを少し吸いとった！");
 		    u.uen = (u.uenmax += 2);
 		} else domagictrap();
 #ifdef STEED
@@ -1088,7 +1506,10 @@
 		seetrap(trap);
 		if(Antimagic) {
 		    shieldeff(u.ux, u.uy);
+/*JP
 		    You_feel("momentarily lethargic.");
+*/
+		    You("一瞬無気力感を感じた．");
 		} else drain_en(rnd(u.ulevel) + 1);
 		break;
 
@@ -1097,19 +1518,34 @@
 		seetrap(trap);
 #ifdef STEED
 		if (u.usteed)
+/*JP
 			Sprintf(verbbuf, "lead %s",
+*/
+			Sprintf(verbbuf, "%sとともに飛び込んだ",
 				x_monnam(u.usteed,
 					 u.usteed->mnamelth ? ARTICLE_NONE : ARTICLE_THE,
 				 	 (char *)0, SUPPRESS_SADDLE, FALSE));
 		else
 #endif
+#if 0 /*JP*/
 		 Sprintf(verbbuf,"%s",
 		    Levitation ? (const char *)"float" :
 		    locomotion(youmonst.data, "step"));
+#else
+		 Sprintf(verbbuf,"%s",
+		    jconj(Levitation ? (const char *)"浮きながら飛びこむ" : 
+		    locomotion(youmonst.data, "踏み込む"), "た"));
+#endif
+/*JP
 		You("%s onto a polymorph trap!", verbbuf);
+*/
+		You("変化の罠に%s！", verbbuf);
 		if(Antimagic || Unchanging) {
 		    shieldeff(u.ux, u.uy);
+/*JP
 		    You_feel("momentarily different.");
+*/
+		    You("一瞬違った感じがした．");
 		    /* Trap did nothing; don't remove it --KAA */
 		} else {
 #ifdef STEED
@@ -1117,7 +1553,10 @@
 #endif
 		    deltrap(trap);	/* delete trap before polymorph */
 		    newsym(u.ux,u.uy);	/* get rid of trap symbol */
+/*JP
 		    You_feel("a change coming over you.");
+*/
+		    You("変化が訪れたような気がした．");
 		    polyself(FALSE);
 		}
 		break;
@@ -1130,16 +1569,32 @@
 		if (Levitation || Flying) {
 		    if (!already_seen && rn2(3)) break;
 		    seetrap(trap);
+#if 0 /*JP*/
 		    pline("%s %s in a pile of soil below you.",
 			    already_seen ? "There is" : "You discover",
 			    trap->madeby_u ? "the trigger of your mine" :
 					     "a trigger");
+#else
+		    if(already_seen)
+		      pline("ここには%s地雷の起爆スイッチがある．",
+			    set_you[trap->madeby_u]);
+		    else
+		      You("足下の土の山に%s地雷の起爆スイッチをみつけた．",
+			    set_you[trap->madeby_u]);
+#endif
 		    if (already_seen && rn2(3)) break;
+#if 0 /*JP*/
 		    pline("KAABLAMM!!!  %s %s%s off!",
 			  forcebungle ? "Your inept attempt sets" :
 					"The air currents set",
 			    already_seen ? a_your[trap->madeby_u] : "",
 			    already_seen ? " land mine" : "it");
+#else
+		    pline("ちゅどーん！！%s%s地雷の起爆スイッチが発動した！",
+			    forcebungle ? "不器用なせいで" :
+			    		  "空気の流れで",
+			    set_you[trap->madeby_u]);
+#endif
 		} else {
 #ifdef STEED
 		    /* prevent landmine from killing steed, throwing you to
@@ -1151,8 +1606,13 @@
 		    if (recursive_mine) break;
 #endif
 		    seetrap(trap);
+#if 0 /*JP*/
 		    pline("KAABLAMM!!!  You triggered %s land mine!",
 					    a_your[trap->madeby_u]);
+#else
+		    pline("ちゅどーん！！%s地雷の起爆スイッチを踏んだ！",
+			    set_you[trap->madeby_u]);
+#endif
 #ifdef STEED
 		    if (u.usteed) steed_mid = u.usteed->m_id;
 		    recursive_mine = TRUE;
@@ -1170,7 +1630,10 @@
 			(void)keep_saddle_with_steedcorpse(steed_mid, fobj, saddle);
 #endif
 		newsym(u.ux,u.uy);		/* update trap symbol */
+/*JP
 		losehp(rnd(16), "land mine", KILLED_BY_AN);
+*/
+		losehp(rnd(16), "地雷を踏んで", KILLED_BY_AN);
 		/* fall recursively into the pit... */
 		if ((trap = t_at(u.ux, u.uy)) != 0) dotrap(trap, RECURSIVETRAP);
 		fill_pit(u.ux, u.uy);
@@ -1180,12 +1643,18 @@
 		int style = ROLL | (trap->tseen ? LAUNCH_KNOWN : 0);
 
 		seetrap(trap);
+/*JP
 		pline("Click! You trigger a rolling boulder trap!");
+*/
+		pline("カチッ！あなたは落岩のスイッチを踏んだ！");
 		if(!launch_obj(BOULDER, trap->launch.x, trap->launch.y,
 		      trap->launch2.x, trap->launch2.y, style)) {
 		    deltrap(trap);
 		    newsym(u.ux,u.uy);	/* get rid of trap symbol */
+/*JP
 		    pline("Fortunately for you, no boulder was released.");
+*/
+		    pline("運のよいことに岩は転がってこなかった．");
 		}
 		break;
 	    }
@@ -1250,7 +1719,10 @@
 			    mtmp->mcanmove = 0;
 			    mtmp->mfrozen = rnd(25);
 			    if (in_sight) {
+/*JP
 				pline("%s suddenly falls asleep!",
+*/
+				pline("%sはとつぜん眠ってしまった！",
 				      Monnam(mtmp));
 			    }
 			}
@@ -1276,7 +1748,10 @@
 			if (!can_saddle(mtmp) || !can_ride(mtmp)) {
 				dismount_steed(DISMOUNT_POLY);
 			} else {
+/*JP
 				You("have to adjust yourself in the saddle on %s.",
+*/
+				You("%sの鞍の上で座りなおした．",
 					x_monnam(mtmp,
 					 mtmp->mnamelth ? ARTICLE_NONE : ARTICLE_A,
 				 	 (char *)0, SUPPRESS_SADDLE, FALSE));
@@ -1384,9 +1859,15 @@
 	switch (style) {
 	    case ROLL|LAUNCH_UNSEEN:
 			if (otyp == BOULDER) {
+#if 0 /*JP:T*/
 			    You_hear(Hallucination ?
 				     "someone bowling." :
 				     "rumbling in the distance.");
+#else
+			    You_hear(Hallucination ?
+				     "誰かがボーリングをしている音を聞いた．" :
+				     "遠くのゴロゴロという音を聞いた．");
+#endif
 			}
 			style &= ~LAUNCH_UNSEEN;
 			goto roll;
@@ -1423,7 +1904,10 @@
 		if ((mtmp = m_at(bhitpos.x, bhitpos.y)) != 0) {
 			if (otyp == BOULDER && throws_rocks(mtmp->data)) {
 			    if (rn2(3)) {
+/*JP
 				pline("%s snatches the boulder.",
+*/
+				pline("%sは岩をもぎとった．",
 					Monnam(mtmp));
 				singleobj->otrapped = 0;
 				(void) mpickobj(mtmp, singleobj);
@@ -1454,10 +1938,17 @@
 			switch(t->ttyp) {
 			case LANDMINE:
 			    if (rn2(10) > 2) {
+#if 0 /*JP*/
 			  	pline(
 				  "KAABLAMM!!!%s",
 				  cansee(bhitpos.x, bhitpos.y) ?
 					" The rolling boulder triggers a land mine." : "");
+#else
+			  	pline(
+				  "ちゅどーん！！%s",
+				  cansee(bhitpos.x, bhitpos.y) ?
+					"転がってきた岩が地雷の起爆スイッチを踏んだ．" : "");
+#endif
 				deltrap(t);
 				del_engr_at(bhitpos.x,bhitpos.y);
 				place_object(singleobj, bhitpos.x, bhitpos.y);
@@ -1474,9 +1965,15 @@
 			case LEVEL_TELEP:
 			case TELEP_TRAP:
 			    if (cansee(bhitpos.x, bhitpos.y))
+/*JP
 			    	pline("Suddenly the rolling boulder disappears!");
+*/
+			    	pline("転がってきた岩がとつぜん消えた！");
 			    else
+/*JP
 			    	You_hear("a rumbling stop abruptly.");
+*/
+			    	pline("ゴロゴロという音が突然止まった．");
 			    singleobj->otrapped = 0;
 			    if (t->ttyp == TELEP_TRAP)
 				rloco(singleobj);
@@ -1502,27 +1999,42 @@
 			    /* the boulder won't be used up if there is a
 			       monster in the trap; stop rolling anyway */
 			    x2 = bhitpos.x,  y2 = bhitpos.y;  /* stops here */
+/*JP
 			    if (flooreffects(singleobj, x2, y2, "fall"))
+*/
+			    if (flooreffects(singleobj, x2, y2, "落ちる"))
 				used_up = TRUE;
 			    dist = -1;	/* stop rolling immediately */
 			    break;
 			}
 			if (used_up || dist == -1) break;
 		    }
+/*JP
 		    if (flooreffects(singleobj, bhitpos.x, bhitpos.y, "fall")) {
+*/
+		    if (flooreffects(singleobj, bhitpos.x, bhitpos.y, "落ちる")) {
 			used_up = TRUE;
 			break;
 		    }
 		    if (otyp == BOULDER &&
 		       (otmp2 = sobj_at(BOULDER, bhitpos.x, bhitpos.y)) != 0) {
 			const char *bmsg =
+/*JP
 				" as one boulder sets another in motion";
+*/
+				"ひとつの岩が他の岩を動かしたかのような，";
 
 			if (!isok(bhitpos.x + dx, bhitpos.y + dy) || !dist ||
 			    IS_ROCK(levl[bhitpos.x + dx][bhitpos.y + dy].typ))
+/*JP
 			    bmsg = " as one boulder hits another";
+*/
+			    bmsg = "ひとつの岩が他の岩に当たったような";
 
+/*JP
 		    	You_hear("a loud crash%s!",
+*/
+		    	You_hear("%s大きなゴンという音を聞いた！",
 				cansee(bhitpos.x, bhitpos.y) ? bmsg : "");
 			obj_extract_self(otmp2);
 			/* pass off the otrapped flag to the next boulder */
@@ -1536,7 +2048,10 @@
 		}
 		if (otyp == BOULDER && closed_door(bhitpos.x,bhitpos.y)) {
 			if (cansee(bhitpos.x, bhitpos.y))
+/*JP
 				pline_The("boulder crashes through a door.");
+*/
+				pline("岩は扉を破壊した．");
 			levl[bhitpos.x][bhitpos.y].doormask = D_BROKEN;
 			if (dist) unblock_point(bhitpos.x, bhitpos.y);
 		}
@@ -1671,7 +2186,10 @@
 {
 	if (!mtmp->m_enmax) return;
 	if (canseemon(mtmp)) 
+/*JP
 		pline("%s looks less powerful!", Monnam(mtmp));
+*/
+		pline("%sは気力が弱まったようだ！", Monnam(mtmp));
 	mtmp->m_en -= n;
 	if(mtmp->m_en < 0)  {
 		mtmp->m_enmax += mtmp->m_en;
@@ -1710,7 +2228,10 @@
 		    if (!rn2(2)) {
 			mtmp->mtrapped = 0;
 			if (canseemon(mtmp))
+/*JP
 			    pline("%s pulls free...", Monnam(mtmp));
+*/
+			    pline("%sは助け上げられた．", Monnam(mtmp));
 			fill_pit(mtmp->mx, mtmp->my);
 		    }
 		} else {
@@ -1719,13 +2240,19 @@
 	    } else if (metallivorous(mptr)) {
 		if (trap->ttyp == BEAR_TRAP) {
 		    if (canseemon(mtmp))
+/*JP
 			pline("%s eats a bear trap!", Monnam(mtmp));
+*/
+		    pline("%sは熊の罠を食べた！", Monnam(mtmp));
 		    deltrap(trap);
 		    mtmp->meating = 5;
 		    mtmp->mtrapped = 0;
 		} else if (trap->ttyp == SPIKED_PIT) {
 		    if (canseemon(mtmp))
+/*JP
 			pline("%s munches on some spikes!", Monnam(mtmp));
+*/
+			pline("%sはトゲトゲを食べた！", Monnam(mtmp));
 		    trap->ttyp = PIT;
 		    mtmp->meating = 5;
 		}
@@ -1764,8 +2291,13 @@
 		case ARROW_TRAP:
 			if (trap->once && trap->tseen && !rn2(15)) {
 			    if (in_sight && see_it)
+#if 0 /*JP:T*/
 				pline("%s triggers a trap but nothing happens.",
 				      Monnam(mtmp));
+#else
+				pline("%sがわなを起動させたが何も起こらなかった．",
+				      Monnam(mtmp));
+#endif
 			    deltrap(trap);
 			    newsym(mtmp->mx, mtmp->my);
 			    break;
@@ -1781,8 +2313,13 @@
 		case DART_TRAP:
 			if (trap->once && trap->tseen && !rn2(15)) {
 			    if (in_sight && see_it)
+#if 0 /*JP:T*/
 				pline("%s triggers a trap but nothing happens.",
 				      Monnam(mtmp));
+#else
+				pline("%sがわなを起動させたが何も起こらなかった．",
+				      Monnam(mtmp));
+#endif
 			    deltrap(trap);
 			    newsym(mtmp->mx, mtmp->my);
 			    break;
@@ -1798,8 +2335,13 @@
 		case ROCKTRAP:
 			if (trap->once && trap->tseen && !rn2(15)) {
 			    if (in_sight && see_it)
+#if 0 /*JP:T*/
 				pline("A trap door above %s opens, but nothing falls out!",
 				      mon_nam(mtmp));
+#else
+				pline("%sの上の扉が開いたが，何も落ちてこなかった！",
+				      mon_nam(mtmp));
+#endif
 			    deltrap(trap);
 			    newsym(mtmp->mx, mtmp->my);
 			    break;
@@ -1818,10 +2360,16 @@
 			if(is_flyer(mptr)) break;
 			/* stepped on a squeaky board */
 			if (in_sight) {
+/*JP
 			    pline("A board beneath %s squeaks loudly.", mon_nam(mtmp));
+*/
+			    pline("%sの足元の板が大きくきしんだ．", mon_nam(mtmp));
 			    seetrap(trap);
 			} else
+/*JP
 			   You_hear("a distant squeak.");
+*/
+			   You_hear("遠くできしむ音を聞いた．");
 			/* wake up nearby monsters */
 			wake_nearto(mtmp->mx, mtmp->my, 40);
 			break;
@@ -1832,14 +2380,22 @@
 				!is_whirly(mptr) && !unsolid(mptr)) {
 			    mtmp->mtrapped = 1;
 			    if(in_sight) {
+#if 0 /*JP*/
 				pline("%s is caught in %s bear trap!",
 				      Monnam(mtmp), a_your[trap->madeby_u]);
+#else
+				pline("%sは%s熊の罠につかまった！",
+				      Monnam(mtmp), set_you[trap->madeby_u]);
+#endif
 				seetrap(trap);
 			    } else {
 				if((mptr == &mons[PM_OWLBEAR]
 				    || mptr == &mons[PM_BUGBEAR])
 				   && flags.soundok)
+/*JP
 				    You_hear("the roaring of an angry bear!");
+*/
+				    You_hear("怒りの咆哮を聞いた！");
 			    }
 			}
 			break;
@@ -1850,7 +2406,10 @@
 			    mtmp->mcanmove = 0;
 			    mtmp->mfrozen = rnd(25);
 			    if (in_sight) {
+/*JP
 				pline("%s suddenly falls asleep!",
+*/
+				pline("%sは突然眠りに落ちた！",
 				      Monnam(mtmp));
 				seetrap(trap);
 			    }
@@ -1866,33 +2425,56 @@
 			switch (rn2(5)) {
 			case 0:
 			    if (in_sight)
+#if 0 /*JP*/
 				pline("%s %s on the %s!", A_gush_of_water_hits,
 				    mon_nam(mtmp), mbodypart(mtmp, HEAD));
+#else
+				pline("水が噴出して，%sの%sに命中した！", 
+				    mon_nam(mtmp), mbodypart(mtmp, HEAD));
+#endif
 			    target = which_armor(mtmp, W_ARMH);
+/*JP
 			    (void) rust_dmg(target, "helmet", 1, TRUE, mtmp);
+*/
+			    (void) rust_dmg(target, "兜", 1, TRUE, mtmp);
 			    break;
 			case 1:
 			    if (in_sight)
+/*JP
 				pline("%s %s's left %s!", A_gush_of_water_hits,
+*/
+				pline("水が噴出して，%sの左%sに命中した！",
 				    mon_nam(mtmp), mbodypart(mtmp, ARM));
 			    target = which_armor(mtmp, W_ARMS);
+/*JP
 			    if (rust_dmg(target, "shield", 1, TRUE, mtmp))
+*/
+			    if (rust_dmg(target, "盾", 1, TRUE, mtmp))
 				break;
 			    target = MON_WEP(mtmp);
 			    if (target && bimanual(target))
 				erode_obj(target, FALSE, TRUE);
 glovecheck:		    target = which_armor(mtmp, W_ARMG);
+/*JP
 			    (void) rust_dmg(target, "gauntlets", 1, TRUE, mtmp);
+*/
+			    (void) rust_dmg(target, "小手", 1, TRUE, mtmp);
 			    break;
 			case 2:
 			    if (in_sight)
+/*JP
 				pline("%s %s's right %s!", A_gush_of_water_hits,
+*/
+				pline("水が噴出して，%sの右%sに命中した！",
 				    mon_nam(mtmp), mbodypart(mtmp, ARM));
 			    erode_obj(MON_WEP(mtmp), FALSE, TRUE);
 			    goto glovecheck;
 			default:
 			    if (in_sight)
+/*JP
 				pline("%s %s!", A_gush_of_water_hits,
+*/
+				pline("水が噴出して，%sに命中した！", 
 				    mon_nam(mtmp));
 			    for (otmp=mtmp->minvent; otmp; otmp = otmp->nobj)
 				(void) snuff_lit(otmp);
@@ -1903,27 +2485,42 @@
 			    else {
 				target = which_armor(mtmp, W_ARM);
 				if (target)
+/*JP
 				    (void) rust_dmg(target, "armor", 1, TRUE, mtmp);
+*/
+				    (void) rust_dmg(target, "鎧", 1, TRUE, mtmp);
 #ifdef TOURIST
 				else {
 				    target = which_armor(mtmp, W_ARMU);
+/*JP
 				    (void) rust_dmg(target, "shirt", 1, TRUE, mtmp);
+*/
+				    (void) rust_dmg(target, "シャツ", 1, TRUE, mtmp);
 				}
 #endif
 			    }
 			}
 			if (mptr == &mons[PM_IRON_GOLEM]) {
 				if (in_sight)
+/*JP
 				    pline("%s falls to pieces!", Monnam(mtmp));
+*/
+				    pline("%sはくだけちった！", Monnam(mtmp));
 				else if(mtmp->mtame)
+/*JP
 				    pline("May %s rust in peace.",
+*/
+				    pline("%sはおそらくくだけちった．",
 								mon_nam(mtmp));
 				mondied(mtmp);
 				if (mtmp->mhp <= 0)
 					trapkilled = TRUE;
 			} else if (mptr == &mons[PM_FLAMING_SPHERE]) {
 				if (in_sight)
+/*JP
 				    pline("%s is extinguished!", Monnam(mtmp));
+*/
+				    pline("%sは消火された！", Monnam(mtmp));
 				mondied(mtmp);
 				if (mtmp->mhp <= 0)
 					trapkilled = TRUE;
@@ -1935,21 +2532,37 @@
 		case FIRE_TRAP:
  mfiretrap:
 			if (in_sight)
+#if 0 /*JP*/
 			    pline("A %s erupts from the %s under %s!",
 				  tower_of_flame,
 				  surface(mtmp->mx,mtmp->my), mon_nam(mtmp));
+#else
+			    pline("火柱が%sの足元の%sから立ちのぼった！",
+				  mon_nam(mtmp), surface(mtmp->mx,mtmp->my));
+#endif
 			else if (see_it)  /* evidently `mtmp' is invisible */
+#if 0 /*JP*/
 			    You("see a %s erupt from the %s!",
 				tower_of_flame, surface(mtmp->mx,mtmp->my));
+#else
+			    You("火柱が%sから生じるのを見た！",
+				surface(mtmp->mx,mtmp->my));
+#endif
 			if (Slimed) {
+/*JP
 				pline("The slime that covers you is burned away!");
+*/
+				pline("あなたを覆っていたスライムは焼け落ちた！");
 				Slimed = 0;
 			}
 
 			if (resists_fire(mtmp)) {
 			    if (in_sight) {
 				shieldeff(mtmp->mx,mtmp->my);
+/*JP
 				pline("%s is uninjured.", Monnam(mtmp));
+*/
+				pline("が，%sは傷つかない．", Monnam(mtmp));
 			    }
 			} else {
 			    int num = d(2,4), alt;
@@ -1981,7 +2594,10 @@
 			}
 			if (burn_floor_paper(mtmp->mx, mtmp->my, see_it, FALSE) &&
 				!see_it && distu(mtmp->mx, mtmp->my) <= 3*3)
+/*JP
 			    You("smell smoke.");
+*/
+			    pline("煙の匂いがした．");
 			if (is_ice(mtmp->mx,mtmp->my))
 			    melt_ice(mtmp->mx,mtmp->my);
 			if (see_it) seetrap(trap);
@@ -1989,24 +2605,43 @@
 
 		case PIT:
 		case SPIKED_PIT:
+/*JP
 			fallverb = "falls";
+*/
+			fallverb = "落ちる";
 			if (is_flyer(mptr) || is_floater(mptr) ||
 				(mtmp->wormno && count_wsegs(mtmp) > 5) ||
 				is_clinger(mptr)) {
 			    if (!inescapable) break;	/* avoids trap */
+#if 0 /*JP*/
 			    fallverb = "is dragged";	/* sokoban pit */
+#else
+			    fallverb = "ずり落ちる";	/* sokoban pit */
+#endif
 			}
 			if (!passes_walls(mptr))
 			    mtmp->mtrapped = 1;
 			if(in_sight) {
+#if 0 /*JP*/
 			    pline("%s %s into %s pit!",
 				  Monnam(mtmp), fallverb,
 				  a_your[trap->madeby_u]);
+#else
+			    pline("%sは%s落し穴に%s！",
+				  Monnam(mtmp), set_you[trap->madeby_u],
+				  jconj(fallverb, "た"));
+#endif
 			    if (mptr == &mons[PM_PIT_VIPER] || mptr == &mons[PM_PIT_FIEND])
+/*JP
 				pline("How pitiful.  Isn't that the pits?");
+*/
+				pline("この落し穴はいい仕事をしている．");
 			    seetrap(trap);
 			}
+/*JP
 			mselftouch(mtmp, "Falling, ", FALSE);
+*/
+			mselftouch(mtmp, "落下中，", FALSE);
 			if (mtmp->mhp <= 0 ||
 				thitm(0, mtmp, (struct obj *)0,
 				      rnd((tt == PIT) ? 6 : 10), FALSE))
@@ -2025,7 +2660,10 @@
 				mptr->msize >= MZ_HUGE) {
 			    if (inescapable) {	/* sokoban hole */
 				if (in_sight) {
+/*JP
 				    pline("%s seems to be yanked down!",
+*/
+				    pline("%sは引き落されたようだ！",
 					  Monnam(mtmp));
 				    /* suppress message in mlevel_tele_trap() */
 				    in_sight = FALSE;
@@ -2057,19 +2695,33 @@
 			       mptr == &mons[PM_GELATINOUS_CUBE] ||
 			       mptr == &mons[PM_FIRE_ELEMENTAL]) {
 				if (in_sight)
+#if 0 /*JP*/
 				    pline("%s %s %s spider web!",
 					  Monnam(mtmp),
 					  (mptr == &mons[PM_FIRE_ELEMENTAL]) ?
 					    "burns" : "dissolves",
 					  a_your[trap->madeby_u]);
+#else
+				    pline("%s%sくもの巣を%s！",
+					  Monnam(mtmp),
+					  web_you[trap->madeby_u],
+					  (mptr == &mons[PM_FIRE_ELEMENTAL]) ?
+					    "焼いた" : "こなごなにした");
+#endif
 				deltrap(trap);
 				newsym(mtmp->mx, mtmp->my);
 				break;
 			    }
 			    if (in_sight) {
+#if 0 /*JP*/
 				pline("%s flows through %s spider web.",
 				      Monnam(mtmp),
 				      a_your[trap->madeby_u]);
+#else
+				pline("%sは%sくもの巣をするりと通り抜けた．",
+				      Monnam(mtmp),
+				      web_you[trap->madeby_u]);
+#endif
 				seetrap(trap);
 			    }
 			    break;
@@ -2079,7 +2731,10 @@
 			    case PM_OWLBEAR: /* Eric Backus */
 			    case PM_BUGBEAR:
 				if (!in_sight) {
+/*JP
 				    You_hear("the roaring of a confused bear!");
+*/
+				    You_hear("混乱の咆哮を聞いた！");
 				    mtmp->mtrapped = 1;
 				    break;
 				}
@@ -2091,9 +2746,15 @@
 				    (mtmp->wormno && count_wsegs(mtmp) > 5)) {
 				    tear_web = TRUE;
 				} else if (in_sight) {
+#if 0 /*JP*/
 				    pline("%s is caught in %s spider web.",
 					  Monnam(mtmp),
 					  a_your[trap->madeby_u]);
+#else
+				    pline("%sは%sくもの巣につかまった．",
+					  Monnam(mtmp),
+					  web_you[trap->madeby_u]);
+#endif
 				    seetrap(trap);
 				}
 				mtmp->mtrapped = tear_web ? 0 : 1;
@@ -2113,8 +2774,13 @@
 			}
 			if (tear_web) {
 			    if (in_sight)
+#if 0 /*JP*/
 				pline("%s tears through %s spider web!",
 				      Monnam(mtmp), a_your[trap->madeby_u]);
+#else
+				pline("%sは%sくもの巣を引き裂いた！",
+				      Monnam(mtmp), web_you[trap->madeby_u]);
+#endif
 			    deltrap(trap);
 			    newsym(mtmp->mx, mtmp->my);
 			}
@@ -2129,13 +2795,19 @@
 			    deltrap(trap);
 			    newsym(mtmp->mx, mtmp->my);
 			    if (in_sight) 
+/*JP
 				pline("%s is caught in a magical explosion.",
+*/
+				pline("%sは魔法の爆発を浴びた．",
 				    Monnam(mtmp));
 			    if (thitm(0, mtmp, (struct obj *)0, rnd(10), FALSE))
 				trapkilled = TRUE;
 			    else {
 			    	if (in_sight)
+/*JP
 				    pline("%s looks filled with power.",
+*/
+				    pline("%sは魔力が満たされたように見える．",
 					    Monnam(mtmp));
 			    	mtmp->m_en = (mtmp->m_enmax += 2);
 			    }
@@ -2146,7 +2818,10 @@
 		    	if (resists_magm(mtmp)) {
 			    if (in_sight) {
 				shieldeff(mtmp->mx,mtmp->my);
+/*JP
 				pline("%s is uninjured.", Monnam(mtmp));
+*/
+				pline("%sは傷つかない．", Monnam(mtmp));
 			    }
 		    	} else {
 		    	    mon_drain_en(mtmp, 
@@ -2159,22 +2834,37 @@
 			if(is_flyer(mptr)) {
 				boolean already_seen = trap->tseen;
 				if (in_sight && !already_seen) {
+/*JP
 	pline("A trigger appears in a pile of soil below %s.", mon_nam(mtmp));
+*/
+	pline("%sの足元の土の山に起爆スイッチが現われた．", mon_nam(mtmp));
 					seetrap(trap);
 				}
 				if (rn2(3)) break;
 				if (in_sight) {
 					newsym(mtmp->mx, mtmp->my);
+#if 0 /*JP*/
 					pline_The("air currents set %s off!",
 					  already_seen ? "a land mine" : "it");
+#else
+					pline("空気の流れでスイッチが入った！");
+#endif
 				}
 			} else if(in_sight) {
 			    newsym(mtmp->mx, mtmp->my);
+#if 0 /*JP*/
 			    pline("KAABLAMM!!!  %s triggers %s land mine!",
 				Monnam(mtmp), a_your[trap->madeby_u]);
+#else
+			    pline("ちゅどーん！！%sは%s地雷の起爆スイッチを踏んだ！",
+				Monnam(mtmp), set_you[trap->madeby_u]);
+#endif
 			}
 			if (!in_sight)
+/*JP
 				pline("Kaablamm!  You hear an explosion in the distance!");
+*/
+				pline("ちゅどーん！あなたは遠方の爆発音を聞いた");
 			blow_up_landmine(trap);
 			if (thitm(0, mtmp, (struct obj *)0, rnd(16), FALSE))
 				trapkilled = TRUE;
@@ -2187,7 +2877,10 @@
 			if (mtmp->mhp <= 0) trapkilled = TRUE;
 			if (unconscious()) {
 				multi = -1;
+/*JP
 				nomovemsg="The explosion awakens you!";
+*/
+				nomovemsg="爆発であなたは起きた！";
 			}
 			break;
 
@@ -2208,7 +2901,10 @@
                                 if (mtmp->mhp < 0) mondead(mtmp);
                         } else {
 #endif
+/*JP
 			mon_poly(mtmp, FALSE, "%s changes!");
+*/
+			mon_poly(mtmp, FALSE, "%sは変化した！");
 			if (in_sight) seetrap(trap);
 		    }
 		    break;
@@ -2219,10 +2915,16 @@
 
 		        newsym(mtmp->mx,mtmp->my);
 			if (in_sight)
+#if 0 /*JP*/
 			    pline("Click! %s triggers %s.", Monnam(mtmp),
 				  trap->tseen ?
 				  "a rolling boulder trap" :
 				  something);
+#else
+			  pline("カチッ！%sは%sのスイッチを踏んだ！", Monnam(mtmp),
+				  trap->tseen ?
+				  "岩の罠" : "何か");
+#endif
 			if (launch_obj(BOULDER, trap->launch.x, trap->launch.y,
 				trap->launch2.x, trap->launch2.y, style)) {
 			    if (in_sight) trap->tseen = TRUE;
@@ -2253,7 +2955,10 @@
 	if (Stone_resistance) return;
 	if (poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))
 	    return;
+/*JP
 	You("turn to stone...");
+*/
+	You("石になった．．．");
 	killer_format = KILLED_BY_AN;
 	killer = str;
 	done(STONING);
@@ -2275,7 +2980,10 @@
 	mon_adjust_speed(mon, -3, (struct obj *)0);
 
 	if (cansee(mon->mx, mon->my))
+/*JP
 		pline("%s turns to stone.", Monnam(mon));
+*/
+		pline("%sは石になった．", Monnam(mon));
 	if (byplayer) {
 		stoned = TRUE;
 		xkilled(mon,0);
@@ -2290,17 +2998,29 @@
 
 	if(uwep && uwep->otyp == CORPSE && touch_petrifies(&mons[uwep->corpsenm])
 			&& !Stone_resistance) {
+#if 0 /*JP*/
 		pline("%s touch the %s corpse.", arg,
 		        mons[uwep->corpsenm].mname);
 		Sprintf(kbuf, "%s corpse", an(mons[uwep->corpsenm].mname));
+#else
+		pline("%s%sの死体に触った．", arg,
+		        jtrns_mon(mons[uwep->corpsenm].mname));
+		Sprintf(kbuf, "%sの死体で", jtrns_mon(mons[uwep->corpsenm].mname));
+#endif
 		instapetrify(kbuf);
 	}
 	/* Or your secondary weapon, if wielded */
 	if(u.twoweap && uswapwep && uswapwep->otyp == CORPSE &&
 			touch_petrifies(&mons[uswapwep->corpsenm]) && !Stone_resistance){
+#if 0 /*JP*/
 		pline("%s touch the %s corpse.", arg,
 		        mons[uswapwep->corpsenm].mname);
 		Sprintf(kbuf, "%s corpse", an(mons[uswapwep->corpsenm].mname));
+#else
+		pline("%s%sの死体に触った．", arg,
+		        jtrns_mon(mons[uswapwep->corpsenm].mname));
+		Sprintf(kbuf, "%sの死体で", jtrns_mon(mons[uwep->corpsenm].mname));
+#endif
 		instapetrify(kbuf);
 	}
 }
@@ -2315,9 +3035,15 @@
 
 	if (mwep && mwep->otyp == CORPSE && touch_petrifies(&mons[mwep->corpsenm])) {
 		if (cansee(mon->mx, mon->my)) {
+#if 0 /*JP*/
 			pline("%s%s touches the %s corpse.",
 			    arg ? arg : "", arg ? mon_nam(mon) : Monnam(mon),
 			    mons[mwep->corpsenm].mname);
+#else
+			pline("%s%sは%sの死体に触った．", 
+			    arg ? arg : "", arg ? mon_nam(mon) : Monnam(mon),
+			    jtrns_mon(mons[mwep->corpsenm].mname));
+#endif
 		}
 		minstapetrify(mon, byplayer);
 	}
@@ -2330,10 +3056,18 @@
 	if (Stoned) {
 		Stoned = 0;
 		if (!Hallucination)
+/*JP
 			You_feel("limber!");
+*/
+			You("体が軟らかくなったような気がした！");
 	    else
+#if 0 /*JP*/
 		pline("What a pity - you just ruined a future piece of %sart!",
 		      ACURR(A_CHA) > 15 ? "fine " : "");
+#else
+		pline("なんてことだ！%s芸術作品になれたかもしれないのに！",
+		      ACURR(A_CHA) > 15 ? "貴重な" : "");
+#endif
 		/* The problem was fixed */
 		return (1);
 	}
@@ -2348,41 +3082,73 @@
 	if(u.utrap) {
 		if(u.utraptype == TT_PIT) {
 			u.utrap = 0;
+/*JP
 			You("float up, out of the pit!");
+*/
+			You("浮き上がって，落し穴から出た！");
 			vision_full_recalc = 1;	/* vision limits change */
 			fill_pit(u.ux, u.uy);
 		} else if (u.utraptype == TT_INFLOOR) {
+/*JP
 			Your("body pulls upward, but your %s are still stuck.",
+*/
+			Your("体は引き上げられた．しかし%sはまだはまっている．",
 			     makeplural(body_part(LEG)));
 		} else {
+/*JP
 			You("float up, only your %s is still stuck.",
+*/
+			You("浮き出た．%sだけがはまっている．",
 				body_part(LEG));
 		}
 	}
 	else if(Is_waterlevel(&u.uz))
+/*JP
 		pline("It feels as though you've lost some weight.");
+*/
+		You("まるで体重が減ったように感じた．");
 	else if(u.uinwater)
 		spoteffects(TRUE);
 	else if(u.uswallow)
 		You(is_animal(u.ustuck->data) ?
+#if 0 /*JP*/
 			"float away from the %s."  :
 			"spiral up into %s.",
+#else
+			"%sの中で浮いた．" :
+			"%sの中でぐるぐる回転した．",
+#endif
 		    is_animal(u.ustuck->data) ?
 			surface(u.ux, u.uy) :
 			mon_nam(u.ustuck));
 	else if (Hallucination)
+/*JP
 		pline("Up, up, and awaaaay!  You're walking on air!");
+*/
+		pline("上れ，上れ，上れぇぇぇぇ！あなたは空中を歩いている！");
 	else if(Is_airlevel(&u.uz))
+/*JP
 		You("gain control over your movements.");
+*/
+		You("うまく歩けるようになった．");
 	else
+/*JP
 		You("start to float in the air!");
+*/
+		You("空中に浮きはじめた！");
 #ifdef STEED
 	if (u.usteed && !is_floater(u.usteed->data) &&
 						!is_flyer(u.usteed->data)) {
 	    if (Lev_at_will)
+/*JP
 	    	pline("%s magically floats up!", Monnam(u.usteed));
+*/
+	    	pline("%sは魔法の力で浮いた！", Monnam(u.usteed));
 	    else {
+/*JP
 	    	You("cannot stay on %s.", mon_nam(u.usteed));
+*/
+	    	You("%sの上に乗っていられない．", mon_nam(u.usteed));
 	    	dismount_steed(DISMOUNT_GENERIC);
 	    }
 	}
@@ -2401,7 +3167,10 @@
 	    ((t->ttyp == PIT) || (t->ttyp == SPIKED_PIT)) &&
 	    (otmp = sobj_at(BOULDER, x, y))) {
 		obj_extract_self(otmp);
+/*JP
 		(void) flooreffects(otmp, x, y, "settle");
+*/
+		(void) flooreffects(otmp, x, y, "はまる");
 	}
 }
 
@@ -2417,8 +3186,12 @@
 	ELevitation &= ~emask;
 	if(Levitation) return(0); /* maybe another ring/potion/boots */
 	if(u.uswallow) {
+#if 0 /*JP*/
 	    You("float down, but you are still %s.",
 		is_animal(u.ustuck->data) ? "swallowed" : "engulfed");
+#else
+	    You("着地したが，まだ飲み込まれたままだ．");
+#endif
 	    return(1);
 	}
 
@@ -2439,11 +3212,21 @@
 	if(!Flying) {
 		if (!u.uswallow && u.ustuck) {
 			if (sticks(youmonst.data))
+#if 0 /*JP:T*/
 				You("aren't able to maintain your hold on %s.",
 					mon_nam(u.ustuck));
+#else
+				You("%sをつかまえ続けていられなくなった．",
+					mon_nam(u.ustuck));
+#endif
 			else
+#if 0 /*JP:T*/
 				pline("Startled, %s can no longer hold you!",
 					mon_nam(u.ustuck));
+#else
+				pline("%sは驚いてあなたを放してしまった！",
+					mon_nam(u.ustuck));
+#endif
 			u.ustuck = 0;
 		}
 		/* kludge alert:
@@ -2465,9 +3248,15 @@
 	if (!trap) {
 	    trap = t_at(u.ux,u.uy);
 	    if(Is_airlevel(&u.uz))
+/*JP
 		You("begin to tumble in place.");
+*/
+		You("その場でひっくり返りはじめた．");
 	    else if (Is_waterlevel(&u.uz) && !no_msg)
+/*JP
 		You_feel("heavier.");
+*/
+		You("重くなったような気がした．");
 	    /* u.uinwater msgs already in spoteffects()/drown() */
 	    else if (!u.uinwater && !no_msg) {
 #ifdef STEED
@@ -2476,13 +3265,22 @@
 		{
 		    boolean sokoban_trap = (In_sokoban(&u.uz) && trap);
 		    if (Hallucination)
+#if 0 /*JP*/
 			pline("Bummer!  You've %s.",
 			      is_pool(u.ux,u.uy) ?
 			      "splashed down" : sokoban_trap ? "crashed" :
 			      "hit the ground");
+#else
+				pline("やめてぇ！あなたは%s．",
+				      is_pool(u.ux,u.uy) ?
+					"ザブンと落ちた" : "地面にたたきつけられた");
+#endif
 		    else {
 			if (!sokoban_trap)
+/*JP
 			    You("float gently to the %s.",
+*/
+			    You("静かに%sまで辿りついた．",
 				surface(u.ux, u.uy));
 			else {
 			    /* Justification elsewhere for Sokoban traps
@@ -2492,12 +3290,21 @@
 			     * air currents once leviation
 			     * ceases knocks you off your feet.
 			     */
+/*JP
 			    You("fall over.");
+*/
+			    You("つまづいた．");
+/*JP
 			    losehp(rnd(2), "dangerous winds", KILLED_BY);
+*/
+			    losehp(rnd(2), "危険な風", KILLED_BY);
 #ifdef STEED
 			    if (u.usteed) dismount_steed(DISMOUNT_FELL);
 #endif
+/*JP
 			    selftouch("As you fall, you");
+*/
+			    selftouch("落ちながら，あなたは");
 			}
 		    }
 		}
@@ -2542,17 +3349,37 @@
  */
 
 	if ((box && !carried(box)) ? is_pool(box->ox, box->oy) : Underwater) {
+#if 0 /*JP*/
 	    pline("A cascade of steamy bubbles erupts from %s!",
 		    the(box ? xname(box) : surface(u.ux,u.uy)));
+#else
+	    pline("蒸気の泡が%sからしゅーっと発生した！",
+		    box ? xname(box) : surface(u.ux,u.uy));
+#endif
+/*JP
 	    if (Fire_resistance) You("are uninjured.");
+*/
+	    if (Fire_resistance) You("傷つかない．");
+/*JP
 	    else losehp(rnd(3), "boiling water", KILLED_BY);
+*/
+	    else losehp(rnd(3), "沸騰した水で", KILLED_BY);
 	    return;
 	}
+#if 0 /*JP*/
 	pline("A %s %s from %s!", tower_of_flame,
 	      box ? "bursts" : "erupts",
 	      the(box ? xname(box) : surface(u.ux,u.uy)));
+#else
+	pline("火柱が%sから%s！",
+	      box ? xname(box) : surface(u.ux,u.uy),
+	      box ? "吹き出した" : "立ちのぼった");
+#endif
 	if (Slimed) {        
+/*JP
 	      pline("The slime that covers you is burned away!");
+*/
+	      pline("あなたを覆っていたスライムは焼け落ちた！");
 	      Slimed = 0;
 	}
 	if (Fire_resistance) {
@@ -2576,9 +3403,15 @@
 		u.uhpmax -= rn2(min(u.uhpmax,num + 1)), flags.botl = 1;
 	}
 	if (!num)
+/*JP
 	    You("are uninjured.");
+*/
+	    You("傷つかない．");
 	else
+/*JP
 	    losehp(num, tower_of_flame, KILLED_BY_AN);
+*/
+	    losehp(num, "火柱で", KILLED_BY_AN);
 	burn_away_slime();
 
 	if (burnarmor(&youmonst) || rn2(3)) {
@@ -2587,7 +3420,10 @@
 	    destroy_item(POTION_CLASS, AD_FIRE);
 	}
 	if (!box && burn_floor_paper(u.ux, u.uy, see_it, TRUE) && !see_it)
+/*JP
 	    You("smell paper burning.");
+*/
+	    You("紙のこげる匂いがした．");
 	if (is_ice(u.ux, u.uy))
 	    melt_ice(u.ux, u.uy);
 }
@@ -2604,13 +3440,22 @@
 	  register int cnt = rnd(4);
 
 	  if (!resists_blnd(&youmonst)) {
+/*JP
 		You("are momentarily blinded by a flash of light!");
+*/
+		You("まばゆい光で一瞬目がくらんだ！");
 		make_blinded((long)rn1(5,10),FALSE);
 		if (!Blind) Your(vision_clears);
 	  } else if (!Blind) {
+/*JP
 		You("see a flash of light!");
+*/
+		You("まばゆい光を浴びた！");
 	  }  else
+/*JP
 		You_hear("a deafening roar!");
+*/
+		You_hear("耳をつんざくような咆哮を聞いた！");
 	  while(cnt--)
 		(void) makemon((struct permonst *) 0, u.ux, u.uy, NO_MM_FLAGS);
 	}
@@ -2626,40 +3471,79 @@
 			break;
 
 	     /* odd feelings */
+/*JP
 	     case 13:	pline("A shiver runs up and down your %s!",
+*/
+	     case 13:	pline("震えがあなたの%sを走った！",
 			      body_part(SPINE));
 			break;
+#if 0 /*JP*/
 	     case 14:	You_hear(Hallucination ?
 				"the moon howling at you." :
 				"distant howling.");
+#else
+	     case 14:	if (Hallucination)
+				pline("ふにゃ？月が吠えている．") ;
+			else
+				You_hear("遠方の遠吠を聞いた．");
+#endif
 			break;
 	     case 15:	if (on_level(&u.uz, &qstart_level))
+#if 0 /*JP*/
 			    You_feel("%slike the prodigal son.",
 			      (flags.female || (Upolyd && is_neuter(youmonst.data))) ?
 				     "oddly " : "");
+#else
+/*JP 訳注 prodigal sonは聖書のルカ伝かららしい．よーわからん */
+			    You("%s放蕩息子を好きになったような気がした．",
+			      (flags.female || (Upolyd && is_neuter(youmonst.data))) ?
+				     "異常に" : "");
+#endif
 			else
+#if 0 /*JP*/
 			    You("suddenly yearn for %s.",
 				Hallucination ? "Cleveland" :
 			    (In_quest(&u.uz) || at_dgn_entrance("The Quest")) ?
 						"your nearby homeland" :
 						"your distant homeland");
+#else
+			    You("突然%sが恋しくなった．",
+				Hallucination ? "青森" :
+			    (In_quest(&u.uz) || at_dgn_entrance("The Quest")) ?
+						"すぐそこにある故郷" :
+						"はるかかなたの故郷");
+#endif
 			break;
 	     case 16:
 			{
 				int dmg;
 
+/*JP
 				Your("pack shakes violently!");
+*/
+				Your("袋は激しく揺れた！");
 /* KMH, balance patch -- Idea by Wolfgang von Hansen <wvh@geodesy.inka.de> */
 				dmg = jumble_pack();
 				if (dmg)
+/*JP
 					losehp(dmg, "violence", KILLED_BY);
+*/
+					losehp(dmg, "激しく揺れた袋で", KILLED_BY);
 			break;
 			}
 	     case 17:	You(Hallucination ?
+#if 0 /*JP*/
 				"smell hamburgers." :
 				"smell charred flesh.");
+#else
+				"ハンバーガーの匂いがした．" :
+				"黒焦げの肉の匂いがした．");
+#endif
 			break;
+/*JP
 	     case 18:	You_feel("tired.");
+*/
+	     case 18:	You("疲れを感じた．");
 			break;
 
 	     /* very occasionally something nice happens. */
@@ -2739,9 +3623,15 @@
 	    if (!force && (Luck + 5) > rn2(chance))
 		continue;
 	    /* Container is burnt up - dump contents out */
+/*JP
 	    if (in_sight) pline("%s catches fire and burns.", Yname2(obj));
+*/
+	    if (in_sight) pline("%sは火がついて燃えた．", Yname2(obj));
 	    if (Has_contents(obj)) {
+/*JP
 		if (in_sight) pline("Its contents fall out.");
+*/
+		if (in_sight) pline("中身が出てきた．");
 		for (otmp = obj->cobj; otmp; otmp = ncobj) {
 		    ncobj = otmp->nobj;
 		    obj_extract_self(otmp);
@@ -2763,35 +3653,55 @@
 	    if (obj->otyp == SCR_FIRE || obj->otyp == SPE_FIREBALL)
 		continue;
 	    if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
+/*JP
 		if (in_sight) pline("Smoke rises from %s.", the(xname(obj)));
+*/
+		if (in_sight) pline("%sから煙があがった．", the(xname(obj)));
 		continue;
 	    }
 	    dindx = (obj->oclass == SCROLL_CLASS) ? 2 : 3;
 	    if (in_sight)
+#if 0 /*JP*/
 		pline("%s %s.", Yname2(obj), (obj->quan > 1) ?
 		      destroy_strings[dindx*3 + 1] : destroy_strings[dindx*3]);
+#else
+		pline("%sは%s．", Yname2(obj), destroy_strings[dindx*3]);
+#endif
 	    delobj(obj);
 	    retval++;
 	} else if (obj->oclass == POTION_CLASS) {
 	    dindx = 1;
 	    if (in_sight)
+#if 0 /*JP*/
 		pline("%s %s.", Yname2(obj), (obj->quan > 1) ?
 		      destroy_strings[dindx*3 + 1] : destroy_strings[dindx*3]);
+#else
+		pline("%sは%s．", Yname2(obj), destroy_strings[dindx*3]);
+#endif
 	    delobj(obj);
 	    retval++;
 	} else if (is_flammable(obj) && obj->oeroded < MAX_ERODE &&
 		   !(obj->oerodeproof || (obj->blessed && !rnl(4)))) {
 	    if (in_sight) {
+#if 0 /*JP*/
 		pline("%s %s%s.", Yname2(obj), otense(obj, "burn"),
 		      obj->oeroded+1 == MAX_ERODE ? " completely" :
 		      obj->oeroded ? " further" : "");
+#else
+		pline("%sは%s燃えた．", Yname2(obj),
+		      obj->oeroded+1 == MAX_ERODE ? "完全に" :
+		      obj->oeroded ? "さらに" : "");
+#endif
 	    }
 	    obj->oeroded++;
 	}
     }
 
     if (retval && !in_sight)
+/*JP
 	You("smell smoke.");
+*/
+	You("煙のにおいがした．");
     return retval;
 }
 
@@ -2856,13 +3766,19 @@
 		    case SPBOOK_CLASS:
 			/* Spell books get blanked... */
 			if (obj->otyp == SPE_BOOK_OF_THE_DEAD)
+/*JP
 				pline("Steam rises from %s.", the(xname(obj)));
+*/
+				pline("蒸気が%sから立ちのぼった．", xname(obj));
 			else obj->otyp = SPE_BLANK_PAPER;
 			break;
 		    case POTION_CLASS:
 			if (obj->otyp == POT_ACID) {
 				/* damage player/monster? */
+/*JP
 				pline("A potion explodes!");
+*/
+				pline("薬瓶が爆発した！");
 				delobj(obj);
 				continue;
 			} else
@@ -3010,7 +3926,10 @@
 	    if (!otmp) {
 		/* Nothing available left to drop; try gold */
 		if (u.ugold) {
+/*JP
 		    pline("In desperation, you drop your purse.");
+*/
+				You("やけくそで財布を落した．");
 		    /* Hack: gold is not in the inventory, so make a gold object
 		     * and put it at the head of the inventory list.
 		     */
@@ -3046,7 +3965,11 @@
 {
 	boolean inpool_ok = FALSE, crawl_ok;
 	int i, x, y;
+#if 0 /*JP*/
 	char *sparkle = level.flags.lethe? "sparkling " : "";
+#else
+	char *sparkle = level.flags.lethe? "泡立つ" : "";
+#endif
 
 	/* happily wading in the same contiguous pool */
 	if (u.uinwater && is_pool(u.ux-u.dx,u.uy-u.dy) &&
@@ -3057,6 +3980,7 @@
 	}
 
 	if (!u.uinwater) {
+#if 0 /*JP*/
 	    You("%s into the %swater%c",
 		Is_waterlevel(&u.uz) ? "plunge" : "fall",
 		sparkle,
@@ -3064,12 +3988,25 @@
 	    if (!Swimming && !Is_waterlevel(&u.uz))
 		    You("sink like %s.",
 			Hallucination ? "the Titanic" : "a rock");
+#else
+	    You("%s水の中に%s%s",
+		sparkle,
+		Is_waterlevel(&u.uz) ? "飛びこんだ" : "落ちた",
+		Amphibious ? "．" : "！");
+	    if (!Swimming && !Is_waterlevel(&u.uz))
+		You("%sのように沈んだ．",
+		    Hallucination ? "タイタニック号" : "岩");
+#endif
 	}
 
 	if (level.flags.lethe) {
 	    /* Bad idea */
+#if 0 /*JP*/
 	    You_feel("the sparkling waters of the Lethe sweep away your "
 			    "cares!");
+#else
+	    You("レーテ河の泡立つ水が記憶を洗い流してゆくような気がする！");
+#endif
 	    forget(25);
 	}
 
@@ -3078,29 +4015,48 @@
 	if (u.umonnum == PM_GREMLIN && rn2(3))
 	    (void)split_mon(&youmonst, (struct monst *)0);
 	else if (u.umonnum == PM_IRON_GOLEM) {
+/*JP
 	    You("rust!");
+*/
+	    You("錆びた！");
 	    i = d(2,6);
 	    if (u.mhmax > i) u.mhmax -= i;
+/*JP
 	    losehp(i, "rusting away", KILLED_BY);
+*/
+	    losehp(i, "完全に錆びて", KILLED_BY);
 	}
 	if (inpool_ok) return(FALSE);
 
 	if ((i = number_leashed()) > 0) {
+#if 0 /*JP*/
 		pline_The("leash%s slip%s loose.",
 			(i > 1) ? "es" : "",
 			(i > 1) ? "" : "s");
+#else
+		pline("紐がゆるんだ．");
+#endif
 		unleash_all();
 	}
 
 	if (Amphibious || Swimming) {
 		if (Amphibious) {
 			if (flags.verbose)
+/*JP
 				pline("But you aren't drowning.");
+*/
+				pline("しかし，あなたは溺れなかった．");
 			if (!Is_waterlevel(&u.uz)) {
 				if (Hallucination)
+/*JP
 					Your("keel hits the bottom.");
+*/
+					You("底にニードロップを決めた．");
 				else
+/*JP
 					You("touch bottom.");
+*/
+					You("底についた．");
 			}
 		}
 		if (Punished) {
@@ -3125,12 +4081,19 @@
 	}
 	if ((Teleportation || can_teleport(youmonst.data)) &&
 		    !u.usleep && (Teleport_control || rn2(3) < Luck+2)) {
+#if 0 /*JP:T*/
 		You("attempt a teleport spell.");	/* utcsri!carroll */
+#else
+		You("瞬間移動の呪文を唱えてみた．");
+#endif
 		if (!level.flags.noteleport) {
 			(void) dotele();
 			if(!is_pool(u.ux,u.uy))
 				return(TRUE);
+/*JP
 		} else pline_The("attempted teleport spell fails.");
+*/
+		} else pline("瞬間移動の呪文は失敗した．");
 	}
 #ifdef STEED
 	if (u.usteed) {
@@ -3144,7 +4107,10 @@
 	/* if sleeping, wake up now so that we don't crawl out of water
 	   while still asleep; we can't do that the same way that waking
 	   due to combat is handled; note unmul() clears u.usleep */
+/*JP
 	if (u.usleep) unmul("Suddenly you wake up!");
+*/
+	if (u.usleep) unmul("突然あなたは目が覚めた！");
 	/* can't crawl if unable to move (crawl_ok flag stays false) */
 	if (multi < 0 || (Upolyd && !youmonst.data->mmove)) goto crawl;
 	/* look around for a place to crawl to */
@@ -3170,40 +4136,70 @@
 		boolean succ = Is_waterlevel(&u.uz) ? TRUE :
 				emergency_disrobe(&lost);
 
+/*JP
 		You("try to crawl out of the water.");
+*/
+		You("水からはいあがろうとした．");
 		if (lost)
+/*JP
 			You("dump some of your gear to lose weight...");
+*/
+			You("体を軽くするためいくつか物を投げすてた．．．");
 		if (succ) {
+/*JP
 			pline("Pheew!  That was close.");
+*/
+			pline("ハァハァ！よかった．");
 			teleds(x,y,TRUE);
 			return(TRUE);
 		}
 		/* still too much weight */
+/*JP
 		pline("But in vain.");
+*/
+		pline("が，無駄だった．");
 	}
 	u.uinwater = 1;
+/*JP
 	You("drown.");
+*/
+	You("溺れた．");
 	/* [ALI] Vampires return to vampiric form on drowning.
 	 */
 	if (Upolyd && !Unchanging && Race_if(PM_VAMPIRE)) {
 		rehumanize();
 		u.uinwater = 0;
+#if 0 /*JP*/
 		You("fly up out of the water!");
+#else
+		You("水の外に飛んで上がった！") ;
+#endif
 		return (TRUE);
 	}
 	killer_format = KILLED_BY_AN;
 	killer = (levl[u.ux][u.uy].typ == POOL || Is_medusa_level(&u.uz)) ?
+/*JP
 	    "pool of water" : "moat";
+*/
+	    "水たまりで" : "堀で";
 	done(DROWNING);
 	/* oops, we're still alive.  better get out of the water. */
 	while (!safe_teleds(TRUE)) {
+/*JP
 		pline("You're still drowning.");
+*/
+		You("溺れている．");
 		done(DROWNING);
 	}
 	if (u.uinwater) {
 	u.uinwater = 0;
+#if 0 /*JP*/
 	You("find yourself back %s.", Is_waterlevel(&u.uz) ?
 		"in an air bubble" : "on land");
+#else
+	You("いつのまにか%sにいるのに気がついた．", Is_waterlevel(&u.uz) ?
+	    "空気の泡の中" : "地面");
+#endif
 	}
 	return(TRUE);
 	
@@ -3214,7 +4210,10 @@
 register int n;
 {
 	if (!u.uenmax) return;
+/*JP
 	You_feel("your magical energy drain away!");
+*/
+	You("魔法のエネルギーが吸いとられたような気がした！");
 	u.uen -= n;
 	if(u.uen < 0)  {
 		u.uenmax += u.uen;
@@ -3228,19 +4227,32 @@
 dountrap()	/* disarm a trap */
 {
 	if (near_capacity() >= HVY_ENCUMBER) {
+/*JP
 	    pline("You're too strained to do that.");
+*/
+	    pline("罠を解除しようにも物を持ちすぎている．");
 	    return 0;
 	}
 	if ((nohands(youmonst.data) && !webmaker(youmonst.data)) || !youmonst.data->mmove) {
+/*JP
 	    pline("And just how do you expect to do that?");
+*/
+	    pline("いったい何を期待しているんだい？");
 	    return 0;
 	} else if (u.ustuck && sticks(youmonst.data)) {
+/*JP
 	    pline("You'll have to let go of %s first.", mon_nam(u.ustuck));
+*/
+	    pline("%sを手離さないことにはできない．", mon_nam(u.ustuck));
 	    return 0;
 	}
 	if (u.ustuck || (welded(uwep) && bimanual(uwep))) {
+#if 0 /*JP*/
 	    Your("%s seem to be too busy for that.",
 		 makeplural(body_part(HAND)));
+#else
+	    Your("そんなことをする余裕なんてない．");
+#endif
 	    return 0;
 	}
 	return untrap(FALSE);
@@ -3335,13 +4347,19 @@
 	
 	/* Test for monster first, monsters are displayed instead of trap. */
 	if (mtmp && (!mtmp->mtrapped || !holdingtrap)) {
+/*JP
 		pline("%s is in the way.", Monnam(mtmp));
+*/
+		pline("そこには%sがいる．", Monnam(mtmp));
 		return 0;
 	}
 	/* We might be forced to move onto the trap's location. */
 	if (sobj_at(BOULDER, ttmp->tx, ttmp->ty)
 				&& !Passes_walls && !under_u) {
+/*JP
 		There("is a boulder in your way.");
+*/
+		pline("そこには岩がある．");
 		return 0;
 	}
 	/* duplicate tight-space checks from test_move */
@@ -3351,8 +4369,13 @@
 	    if ((invent && (inv_weight() + weight_cap() > 600)) ||
 		bigmonst(youmonst.data)) {
 		/* don't allow untrap if they can't get thru to it */
+#if 0 /*JP*/
 		You("are unable to reach the %s!",
 		    defsyms[trap_to_defsym(ttype)].explanation);
+#else
+		You("%sに届かない！",
+		  jtrns_obj('^', defsyms[trap_to_defsym(ttype)].explanation));
+#endif
 		return 0;
 	    }
 	}
@@ -3360,19 +4383,30 @@
 	if (!can_reach_floor()) {
 #ifdef STEED
 		if (u.usteed && P_SKILL(P_RIDING) < P_BASIC)
+/*JP
 			You("aren't skilled enough to reach from %s.",
+*/
+			You("まだ十分に技量を積んでいないので，%sから届かない．",
 				mon_nam(u.usteed));
 		else
 #endif
+#if 0 /*JP*/
 		You("are unable to reach the %s!",
 			defsyms[trap_to_defsym(ttype)].explanation);
+#else
+		You("%sに届かない！",
+			jtrns_obj('^', defsyms[trap_to_defsym(ttype)].explanation));
+#endif
 		return 0;
 	}
 
 	/* Will our hero succeed? */
 	if (force_failure || untrap_prob(ttmp)) {
 		if (rnl(5)) {
+/*JP
 		    pline("Whoops...");
+*/
+		    pline("うわっ．．．");
 		    if (mtmp) {		/* must be a trap that holds monsters */
 			if (ttype == BEAR_TRAP) {
 			    if (mtmp->mtame) abuse_dog(mtmp);
@@ -3381,7 +4415,10 @@
 			    if (!webmaker(youmonst.data)) {
 				struct trap *ttmp2 = maketrap(u.ux, u.uy, WEB);
 				if (ttmp2) {
+/*JP
 				    pline_The("webbing sticks to you. You're caught too!");
+*/
+				    pline_The("くもの巣があなたにからんできた．ますます捕まってしまった！");
 				    dotrap(ttmp2, NOWEBMSG);
 #ifdef STEED
 				    if (u.usteed && u.utrap) {
@@ -3391,7 +4428,10 @@
 #endif
 				}
 			    } else
+/*JP
 				pline("%s remains entangled.", Monnam(mtmp));
+*/
+				pline("%sはからまったままだ．", Monnam(mtmp));
 			}
 		    } else if (under_u) {
 			dotrap(ttmp, 0);
@@ -3399,10 +4439,16 @@
 			move_into_trap(ttmp);
 		    }
 		} else {
+#if 0 /*JP*/
 		    pline("%s %s is difficult to %s.",
 			  ttmp->madeby_u ? "Your" : under_u ? "This" : "That",
 			  defsyms[trap_to_defsym(ttype)].explanation,
 			  (ttype == WEB) ? "remove" : "disarm");
+#else
+		    pline("%s%sを解除するのは困難だ．",
+			  ttmp->madeby_u ? "あなたの仕掛けた" : under_u ? "この" : "その",
+			  jtrns_obj('^', defsyms[trap_to_defsym(ttype)].explanation));
+#endif
 		}
 		return 1;
 	}
@@ -3421,13 +4467,19 @@
 		    mtmp->data->mlet != S_HUMAN) {
 		mtmp->mpeaceful = 1;
 		set_malign(mtmp);	/* reset alignment */
+/*JP
 		pline("%s is grateful.", Monnam(mtmp));
+*/
+		pline("%sは喜んでいる．", Monnam(mtmp));
 	    }
 	    /* Helping someone out of a trap is a nice thing to do,
 	     * A lawful may be rewarded, but not too often.  */
 	    if (!rn2(3) && !rnl(8) && u.ualign.type == A_LAWFUL) {
 		adjalign(1);
+/*JP
 		You_feel("that you did the right thing.");
+*/
+		You("正しいことをしたような気がした．");
 	    }
 	}
 }
@@ -3447,16 +4499,28 @@
 	   There's no need for a cockatrice test, only the trap is touched */
 	if ((mtmp = m_at(ttmp->tx,ttmp->ty)) != 0) {
 		mtmp->mtrapped = 0;
+#if 0 /*JP*/
 		You("remove %s %s from %s.", the_your[ttmp->madeby_u],
 			(ttmp->ttyp == BEAR_TRAP) ? "bear trap" : "webbing",
 			mon_nam(mtmp));
+#else
+		You("%s%sを%sからはずした", set_you[ttmp->madeby_u],
+			(ttmp->ttyp == BEAR_TRAP) ? "熊の罠" : "くもの巣",
+			mon_nam(mtmp));
+#endif
 		reward_untrap(ttmp, mtmp);
 	} else {
 		if (ttmp->ttyp == BEAR_TRAP) {
+/*JP
 			You("disarm %s bear trap.", the_your[ttmp->madeby_u]);
+*/
+			You("%s熊の罠を解除した．", set_you[ttmp->madeby_u]);
 			cnv_trap_obj(BEARTRAP, 1, ttmp);
 		} else /* if (ttmp->ttyp == WEB) */ {
+/*JP
 			You("succeed in removing %s web.", the_your[ttmp->madeby_u]);
+*/
+			You("%sくもの巣を取り除いた．", set_you[ttmp->madeby_u]);
 			deltrap(ttmp);
 		}
 	}
@@ -3471,7 +4535,10 @@
 	int fails = try_disarm(ttmp, FALSE);
 
 	if (fails < 2) return fails;
+/*JP
 	You("disarm %s land mine.", the_your[ttmp->madeby_u]);
+*/
+	You("%s地雷を解除した．", set_you[ttmp->madeby_u]);
 	cnv_trap_obj(LAND_MINE, 1, ttmp);
 	return 1;
 }
@@ -3484,7 +4551,10 @@
 	int fails = try_disarm(ttmp, FALSE);
 
 	if (fails < 2) return fails;
+/*JP
 	You("disarm the water trap!");
+*/
+	You("水の罠を解除した！");
 	deltrap(ttmp);
 	levl[trapx][trapy].typ = FOUNTAIN;
 	newsym(trapx, trapy);
@@ -3506,12 +4576,18 @@
 	struct obj *obj;
 	boolean bad_tool;
 
+/*JP
 	obj = getobj(disarmpotion, "untrap with");
+*/
+	obj = getobj(disarmpotion, "使って解除する");
 	if (!obj) return 0;
 
 	if (obj->otyp == POT_OIL)
 	{
+/*JP
 		Your("potion of oil explodes!");
+*/
+		Your("油瓶は爆発した！");
 		splatter_burning_oil(ttmp->tx,ttmp->ty);
 		delobj(obj);
 		return 1;
@@ -3522,7 +4598,10 @@
 	fails = try_disarm(ttmp, bad_tool);
 
 	if (fails < 2) return fails;
+/*JP
 	You("manage to extinguish the pilot light!");
+*/
+	You("何とかして作動ランプを消した！");
 	cnv_trap_obj(POT_OIL, 4 - rnl(4), ttmp);
 	more_experienced(1, 5);
 	newexplevel();
@@ -3538,7 +4617,10 @@
 	boolean bad_tool;
 	int fails, trapx = ttmp->tx, trapy = ttmp->ty;
 
+/*JP
 	obj = getobj(oil, "untrap with");
+*/
+	obj = getobj(oil, "使って解除する");
 	if (!obj) return 0;
 
 	bad_tool = (obj->cursed ||
@@ -3555,7 +4637,11 @@
 	    useup(obj);	/* oil */
 	    makeknown(POT_OIL);
 	}
+#if 0 /*JP*/
 	You("repair the squeaky board.");	/* no madeby_u */
+#else
+	You("きしむ板を修理した．");	/* no madeby_u */
+#endif
 	deltrap(ttmp);
 	newsym(trapx, trapy);
 	more_experienced(1, 5);
@@ -3571,7 +4657,10 @@
 	int fails = try_disarm(ttmp, FALSE);
 
 	if (fails < 2) return fails;
+/*JP
 	You("disarm %s trap.", the_your[ttmp->madeby_u]);
+*/
+	pline("%s罠を解除した．", set_you[ttmp->madeby_u]);
 	cnv_trap_obj(otyp, 50-rnl(50), ttmp);
 	return 1;
 }
@@ -3588,14 +4677,22 @@
 	int wc = weight_cap();
 
 	if (((wt * 2) / wc) >= HVY_ENCUMBER) {
+#if 0 /*JP*/
 	    pline("%s is %s for you to lift.", Monnam(mtmp),
 		  stuff ? "carrying too much" : "too heavy");
+#else
+		pline("%sは%s持ちあげることができない．", Monnam(mtmp),
+		  stuff ? "物を持ちすぎており" : "重すぎて");
+#endif
 	    if (!ttmp->madeby_u && !mtmp->mpeaceful && mtmp->mcanmove &&
 		    !mindless(mtmp->data) &&
 		    mtmp->data->mlet != S_HUMAN && rnl(10) < 3) {
 		mtmp->mpeaceful = 1;
 		set_malign(mtmp);		/* reset alignment */
+/*JP
 		pline("%s thinks it was nice of you to try.", Monnam(mtmp));
+*/
+		pline("%sはあなたの努力に感謝しているようだ．", Monnam(mtmp));
 	    }
 	    return 0;
 	}
@@ -3622,7 +4719,10 @@
 	 * Test the monster first - monsters are displayed before traps.
 	 */
 	if (!mtmp->mtrapped) {
+/*JP
 		pline("%s isn't trapped.", Monnam(mtmp));
+*/
+		pline("%sは罠にかかっていない．", Monnam(mtmp));
 		return 0;
 	}
 	/* Do you have the necessary capacity to lift anything? */
@@ -3630,7 +4730,10 @@
 
 	/* Will our hero succeed? */
 	if ((uprob = untrap_prob(ttmp)) && !mtmp->msleeping && mtmp->mcanmove) {
+/*JP
 		You("try to reach out your %s, but %s backs away skeptically.",
+*/
+		You("%sを差し延べようとしたが%sは警戒している．",
 			makeplural(body_part(ARM)),
 			mon_nam(mtmp));
 		return 1;
@@ -3639,42 +4742,71 @@
 
 	/* is it a cockatrice?... */
 	if (touch_petrifies(mtmp->data) && !uarmg && !Stone_resistance) {
+#if 0 /*JP*/
 		You("grab the trapped %s using your bare %s.",
 				mtmp->data->mname, makeplural(body_part(HAND)));
+#else
+		You("罠にかかっている%sを素%sで掴んだ．",
+				jtrns_mon_gen(mtmp->data->mname, mtmp->female), body_part(HAND));
+#endif
 
 		if (poly_when_stoned(youmonst.data) && polymon(PM_STONE_GOLEM))
 			display_nhwindow(WIN_MESSAGE, FALSE);
 		else {
 			char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 			Sprintf(kbuf, "trying to help %s out of a pit",
 					an(mtmp->data->mname));
+#else
+			Sprintf(kbuf, "罠にかかっている%sを助けようとして",
+				a_monnam(mtmp));
+#endif
 			instapetrify(kbuf);
 			return 1;
 		}
 	}
 	/* need to do cockatrice check first if sleeping or paralyzed */
 	if (uprob) {
+#if 0 /*JP*/
 	    You("try to grab %s, but cannot get a firm grasp.",
 		mon_nam(mtmp));
+#else
+	    You("%sをつかもうとしたが，しっかりと握れなかった．",
+		mon_nam(mtmp));
+#endif
 	    if (mtmp->msleeping) {
 		mtmp->msleeping = 0;
+/*JP
 		pline("%s awakens.", Monnam(mtmp));
+*/
+		pline("%sは目を覚ました．", Monnam(mtmp));
 	    }
 	    return 1;
 	}
 
+#if 0 /*JP*/
 	You("reach out your %s and grab %s.",
 	    makeplural(body_part(ARM)), mon_nam(mtmp));
+#else
+	You("%sを伸ばして%sをつかんだ．",
+	    body_part(ARM), mon_nam(mtmp));
+#endif
 
 	if (mtmp->msleeping) {
 	    mtmp->msleeping = 0;
+/*JP
 	    pline("%s awakens.", Monnam(mtmp));
+*/
+	    pline("%sは目を覚ました．", Monnam(mtmp));
 	} else if (mtmp->mfrozen && !rn2(mtmp->mfrozen)) {
 	    /* After such manhandling, perhaps the effect wears off */
 	    mtmp->mcanmove = 1;
 	    mtmp->mfrozen = 0;
+/*JP
 	    pline("%s stirs.", Monnam(mtmp));
+*/
+	    pline("%sは動き始めた．", Monnam(mtmp));
 	}
 
 	/* is the monster too heavy? */
@@ -3686,7 +4818,10 @@
 		wt += otmp->owt;
 	if (!try_lift(mtmp, ttmp, wt, TRUE)) return 1;
 
+/*JP
 	You("pull %s out of the pit.", mon_nam(mtmp));
+*/
+	You("%sを落し穴からひっぱった．", mon_nam(mtmp));
 	mtmp->mtrapped = 0;
 	fill_pit(mtmp->mx, mtmp->my);
 	reward_untrap(ttmp, mtmp);
@@ -3723,20 +4858,36 @@
 
 	if ((ttmp = t_at(x,y)) && ttmp->tseen) {
 		deal_with_floor_trap = TRUE;
+/*JP
 		Strcpy(the_trap, the(defsyms[trap_to_defsym(ttmp->ttyp)].explanation));
+*/
+		Strcpy(the_trap, jtrns_obj('^', defsyms[trap_to_defsym(ttmp->ttyp)].explanation));
 		if (box_here) {
 			if (ttmp->ttyp == PIT || ttmp->ttyp == SPIKED_PIT) {
+#if 0 /*JP*/
 			    You_cant("do much about %s%s.",
 					the_trap, u.utrap ?
 					" that you're stuck in" :
 					" while standing on the edge of it");
+#else
+			    pline("%s%sに対してはたいしたことはできない．",
+					u.utrap ?
+					"自分がはまっている" :
+					"すぐそばの", the_trap);
+#endif
 			    trap_skipped = TRUE;
 			    deal_with_floor_trap = FALSE;
 			} else {
+#if 0 /*JP*/
 			    Sprintf(qbuf, "There %s and %s here. %s %s?",
 				(containercnt == 1) ? "is a container" : "are containers",
 				an(defsyms[trap_to_defsym(ttmp->ttyp)].explanation),
 				ttmp->ttyp == WEB ? "Remove" : "Disarm", the_trap);
+#else
+			    Sprintf(qbuf, "箱と%sがある．%s？",
+				jtrns_obj('^', an(defsyms[trap_to_defsym(ttmp->ttyp)].explanation)),
+				ttmp->ttyp == WEB ? "取り除く" : "解除する");
+#endif
 			    switch (ynq(qbuf)) {
 				case 'q': return(0);
 				case 'n': trap_skipped = TRUE;
@@ -3747,8 +4898,12 @@
 		}
 		if (deal_with_floor_trap) {
 		if (u.utrap) {
+#if 0 /*JP*/
 			You("cannot deal with %s while trapped%s!", the_trap,
 				(x == u.ux && y == u.uy) ? " in it" : "");
+#else
+			pline("罠にかかっている間は罠を解除できない！");
+#endif
 			return 1;
 		}
 		switch(ttmp->ttyp) {
@@ -3770,16 +4925,25 @@
 			case PIT:
 			case SPIKED_PIT:
 				if (!u.dx && !u.dy) {
+/*JP
 				    You("are already on the edge of the pit.");
+*/
+				    You("もう落し穴の端にいる．");
 				    return 0;
 				}
 				if (!(mtmp = m_at(x,y))) {
+/*JP
 				    pline("Try filling the pit instead.");
+*/
+				    pline("なんとか埋めることを考えてみたら？");
 				    return 0;
 				}
 				return help_monster_out(mtmp, ttmp);
 			default:
+/*JP
 				You("cannot disable %s trap.", (u.dx || u.dy) ? "that" : "this");
+*/
+				pline("%s罠は解除できない．", (u.dx || u.dy) ? "その" : "この");
 				return 0;
 		    }
 		}
@@ -3788,16 +4952,25 @@
 	if(!u.dx && !u.dy) {
 	    for(otmp = level.objects[x][y]; otmp; otmp = otmp->nexthere)
 		if(Is_box(otmp)) {
+#if 0 /*JP*/
 		    Sprintf(qbuf, "There is %s here. Check it for traps?",
 			safe_qbuf("", sizeof("There is  here. Check it for traps?"),
 				doname(otmp), an(simple_typename(otmp->otyp)), "a box"));
+#else
+		    Sprintf(qbuf, "%sがある．わなを調べますか？",
+			safe_qbuf("", sizeof("がある．わなを調べますか？"),
+				doname(otmp), an(simple_typename(otmp->otyp)), "箱"));
+#endif
 		    switch (ynq(qbuf)) {
 			case 'q': return(0);
 			case 'n': continue;
 		    }
 #ifdef STEED
 		    if (u.usteed && P_SKILL(P_RIDING) < P_BASIC) {
+/*JP
 			You("aren't skilled enough to reach from %s.",
+*/
+			You("まだ十分に技量を積んでいないので，%sから届かない．",
 				mon_nam(u.usteed));
 			return(0);
 		    }
@@ -3805,10 +4978,16 @@
 		    if((otmp->otrapped && (force || (!confused
 				&& rn2(MAXULEV + 1 - u.ulevel) < 10)))
 		       || (!force && confused && !rn2(3))) {
+/*JP
 			You("find a trap on %s!", the(xname(otmp)));
+*/
+			pline("%sに罠を発見した！", the(xname(otmp)));
 			if (!confused) exercise(A_WIS, TRUE);
 
+/*JP
 			switch (ynq("Disarm it?")) {
+*/
+			switch (ynq("解除しますか？")) {
 			    case 'q': return(1);
 			    case 'n': trap_skipped = TRUE;  continue;
 			}
@@ -3821,19 +5000,33 @@
 				rnd(75+level_difficulty()/2) > ch)) {
 				(void) chest_trap(otmp, FINGER, TRUE);
 			    } else {
+/*JP
 				You("disarm it!");
+*/
+				You("解除した！");
 				otmp->otrapped = 0;
 			    }
+/*JP
 			} else pline("That %s was not trapped.", xname(otmp));
+*/
+			} else pline("その%sに罠はない．", xname(otmp));
 			return(1);
 		    } else {
+/*JP
 			You("find no traps on %s.", the(xname(otmp)));
+*/
+			pline("罠を発見できなかった．");
 			return(1);
 		    }
 		}
 
+#if 0 /*JP*/
 	    You(trap_skipped ? "find no other traps here."
 			     : "know of no traps here.");
+#else
+	    You(trap_skipped ? "他の罠を見つけられなかった．"
+			     : "ここに罠がないことを知っている．");
+#endif
 	    return(0);
 	}
 
@@ -3849,21 +5042,36 @@
 
 	if (!IS_DOOR(levl[x][y].typ)) {
 	    if ((ttmp = t_at(x,y)) && ttmp->tseen)
+/*JP
 		You("cannot disable that trap.");
+*/
+		You("罠を解除できなかった．");
 	    else
+/*JP
 		You("know of no traps there.");
+*/
+		You("そこに罠がないことを知っている．");
 	    return(0);
 	}
 
 	switch (levl[x][y].doormask) {
 	    case D_NODOOR:
+/*JP
 		You("%s no door there.", Blind ? "feel" : "see");
+*/
+		pline("そこには扉がない%s．", Blind ? "ようだ" : "ように見える");
 		return(0);
 	    case D_ISOPEN:
+/*JP
 		pline("This door is safely open.");
+*/
+		pline("その扉は安全に開いている．");
 		return(0);
 	    case D_BROKEN:
+/*JP
 		pline("This door is broken.");
+*/
+		pline("その扉は壊れている．");
 		return(0);
 	}
 
@@ -3871,29 +5079,50 @@
 	     && (force ||
 		 (!confused && rn2(MAXULEV - u.ulevel + 11) < 10)))
 	    || (!force && confused && !rn2(3))) {
+/*JP
 		You("find a trap on the door!");
+*/
+		pline("扉に罠を発見した！");
 		exercise(A_WIS, TRUE);
+/*JP
 		if (ynq("Disarm it?") != 'y') return(1);
+*/
+		if (ynq("解除しますか？") != 'y') return(1);
 		if (levl[x][y].doormask & D_TRAPPED) {
 		    ch = 15 + (Role_if(PM_ROGUE) ? u.ulevel*3 : u.ulevel);
 		    exercise(A_DEX, TRUE);
 		    if(!force && (confused || Fumbling ||
 				     rnd(75+level_difficulty()/2) > ch)) {
+/*JP
 			You("set it off!");
+*/
+		        You("スイッチを入れてしまった！");
+/*JP
 			b_trapped("door", FINGER);
+*/
+			b_trapped("扉", FINGER);
 			levl[x][y].doormask = D_NODOOR;
 			unblock_point(x, y);
 			newsym(x, y);
 			/* (probably ought to charge for this damage...) */
 			if (*in_rooms(x, y, SHOPBASE)) add_damage(x, y, 0L);
 		    } else {
+/*JP
 			You("disarm it!");
+*/
+		        You("解除した！");
 			levl[x][y].doormask &= ~D_TRAPPED;
 		    }
+/*JP
 		} else pline("This door was not trapped.");
+*/
+		} else pline("扉に罠はなかった．");
 		return(1);
 	} else {
+/*JP
 		You("find no traps on the door.");
+*/
+		pline("扉に罠を発見できなかった．");
 		return(1);
 	}
 }
@@ -3917,28 +5146,49 @@
 
 	otmp->otrapped = 0;	/* trap is one-shot; clear flag first in case
 				   chest kills you and ends up in bones file */
+/*JP
 	You(disarm ? "set it off!" : "trigger a trap!");
+*/
+	You(disarm ? "スイッチを入れてしまった！" : "罠にひっかかった！");
 	display_nhwindow(WIN_MESSAGE, FALSE);
 	if (Luck > -13 && rn2(13+Luck) > 7) {	/* saved by luck */
 	    /* trap went off, but good luck prevents damage */
 	    switch (rn2(13)) {
 		case 12:
+/*JP
 		case 11:  msg = "explosive charge is a dud";  break;
+*/
+		case 11:  msg = "爆発は不発だった";  break;
 		case 10:
+/*JP
 		case  9:  msg = "electric charge is grounded";  break;
+*/
+		case  9:  msg = "電撃が放出されたがアースされていた";  break;
 		case  8:
+/*JP
 		case  7:  msg = "flame fizzles out";  break;
+*/
+		case  7:  msg = "炎はシューっと消えた";  break;
 		case  6:
 		case  5:
+/*JP
 		case  4:  msg = "poisoned needle misses";  break;
+*/
+		case  4:  msg = "毒針は刺さらなかった";  break;
 		case  3:
 		case  2:
 		case  1:
+/*JP
 		case  0:  msg = "gas cloud blows away";  break;
+*/
+		case  0:  msg = "ガス雲は吹き飛んだ";  break;
 		default:  impossible("chest disarm bug");  msg = (char *)0;
 			  break;
 	    }
+/*JP
 	    if (msg) pline("But luckily the %s!", msg);
+*/
+	    if (msg) pline("が運のよいことに%s！", msg);
 	} else {
 	    switch(rn2(20) ? ((Luck >= 13) ? 0 : rn2(13-Luck)) : rn2(26)) {
 		case 25:
@@ -3958,8 +5208,14 @@
 			  insider = (*u.ushops && inside_shop(u.ux, u.uy) &&
 				    *in_rooms(ox, oy, SHOPBASE) == *u.ushops);
 
+/*JP
 			  pline("%s!", Tobjnam(obj, "explode"));
+*/
+			  pline("%sは爆発した！", xname(obj));
+/*JP
 			  Sprintf(buf, "exploding %s", xname(obj));
+*/
+			  Sprintf(buf, "%sの爆発で", xname(obj));
 
 			  if(costly)
 			      loss += stolen_value(obj, ox, oy,
@@ -3991,10 +5247,18 @@
 			  exercise(A_STR, FALSE);
 			  if(costly && loss) {
 			      if(insider)
+#if 0 /*JP*/
 			      You("owe %ld %s for objects destroyed.",
+#else
+			      You("器物破損で%ld%sの借りをつくった．",
+#endif
 							loss, currency(loss));
 			      else {
+#if 0 /*JP*/
 				  You("caused %ld %s worth of damage!",
+#else
+				  You("%ld%s分の損害を引きおこした！",
+#endif
 							loss, currency(loss));
 				  make_angry_shk(shkp, ox, oy);
 			      }
@@ -4005,17 +5269,29 @@
 		case 19:
 		case 18:
 		case 17:
+/*JP
 			pline("A cloud of noxious gas billows from %s.",
+*/
+			pline("有毒ガスが%sから渦まいた．",
 							the(xname(obj)));
+/*JP
 			poisoned("gas cloud", A_STR, "cloud of poison gas",15);
+*/
+			poisoned("ガス雲", A_STR, "ガス雲",15);
 			exercise(A_CON, FALSE);
 			break;
 		case 16:
 		case 15:
 		case 14:
 		case 13:
+/*JP
 			You_feel("a needle prick your %s.",body_part(bodypart));
+*/
+			You("%sチクッという痛みを感じた．", body_part(bodypart));
+/*JP
 			poisoned("needle", A_CON, "poisoned needle",10);
+*/
+			poisoned("針", A_CON, "毒針",10);
 			exercise(A_CON, FALSE);
 			break;
 		case 12:
@@ -4029,45 +5305,75 @@
 		case 6: {
 			int dmg;
 
+/*JP
 			You("are jolted by a surge of electricity!");
+*/
+			You("電気ショックをくらった！");
 			if(Shock_resistance)  {
 			    shieldeff(u.ux, u.uy);
+/*JP
 			    You("don't seem to be affected.");
+*/
+			    pline("しかしあなたは影響を受けない．");
 			    dmg = 0;
 			} else
 			    dmg = d(4, 4);
 			destroy_item(RING_CLASS, AD_ELEC);
 			destroy_item(WAND_CLASS, AD_ELEC);
+/*JP
 			if (dmg) losehp(dmg, "electric shock", KILLED_BY_AN);
+*/
+			if (dmg) losehp(dmg, "電気ショックで", KILLED_BY_AN);
 			break;
 		      }
 		case 5:
 		case 4:
 		case 3:
 			if (!Free_action) {                        
-			if (!Free_action) {                        
+/*JP
 			pline("Suddenly you are frozen in place!");
+*/
+			pline("突然その場で動けなくなった！");
 			nomul(-d(5, 6));
 			exercise(A_DEX, FALSE);
 			nomovemsg = You_can_move_again;
+/*JP
 			} else You("momentarily stiffen.");
-			} else You("momentarily stiffen.");                        
+*/
+			} else You("一瞬硬直した．");
 			break;
 		case 2:
 		case 1:
 		case 0:
+#if 0 /*JP:T*/
 			pline("A cloud of %s gas billows from %s.",
 				Blind ? blindgas[rn2(SIZE(blindgas))] :
 				rndcolor(), the(xname(obj)));
+#else
+			pline("%sガス雲が%sの底で渦まいた．",
+				Blind ? blindgas[rn2(SIZE(blindgas))] :
+				jconj_adj(rndcolor()), the(xname(obj)));
+#endif
 			if(!Stunned) {
 			    if (Hallucination)
+/*JP
 				pline("What a groovy feeling!");
+*/
+				pline("なんて素敵なんだ！");
 			    else if (Blind)
+#if 0 /*JP:T*/
 				You("%s and get dizzy...",
 				    stagger(youmonst.data, "stagger"));
+#else
+				You("くらくらし，めまいがした．．．");
+#endif
 			    else
+#if 0 /*JP:T*/
 				You("%s and your vision blurs...",
 				    stagger(youmonst.data, "stagger"));
+#else
+				You("くらくらし，景色がぼやけてきた．．．");
+#endif
 			}
 			make_stunned(HStun + rn1(7, 16),FALSE);
 			(void) make_hallucinated(HHallucination + rn1(5, 16),FALSE,0L);
@@ -4155,9 +5461,15 @@
 	register int lvl = level_difficulty();
 	int dmg = rnd(5 + (lvl < 5 ? lvl : 2+lvl/2));
 
+/*JP
 	pline("KABOOM!!  %s was booby-trapped!", The(item));
+*/
+	pline("ちゅどーん！！%sにブービートラップが仕掛けられていた！", The(item));
 	wake_nearby();
+/*JP
 	losehp(dmg, "explosion", KILLED_BY_AN);
+*/
+	losehp(dmg, "ブービートラップの爆発で", KILLED_BY_AN);
 	exercise(A_STR, FALSE);
 	if (bodypart) exercise(A_CON, FALSE);
 	make_stunned(HStun + dmg, TRUE);
@@ -4185,12 +5497,20 @@
 	 */
 	if(!strike) {
 		if (obj && cansee(mon->mx, mon->my))
+#if 0 /*JP*/
 		    pline("%s is almost hit by %s!", Monnam(mon), doname(obj));
+#else
+		    pline("もう少しで%sが%sに命中するところだった！", doname(obj),
+			      Monnam(mon));
+#endif
 	} else {
 		int dam = 1;
 
 		if (obj && cansee(mon->mx, mon->my))
+/*JP
 			pline("%s is hit by %s!", Monnam(mon), doname(obj));
+*/
+			pline("%sが%sに命中した！", doname(obj), Monnam(mon));
 		if (d_override) dam = d_override;
 		else if (obj) {
 			dam = dmgval(obj, mon);
@@ -4218,13 +5538,26 @@
 boolean
 unconscious()
 {
+/*
+**	もう，かんべんしてよー．こんなコーディング．．．sigh．．．
+**
+**	You regain con  --  eat.c(2), potion.c(1)
+**	You are consci  --  eat.c(2)
+*/
 	return((boolean)(multi < 0 && (!nomovemsg ||
 		u.usleep ||
+#if 1 /*JP*/
+		!strncmp(nomovemsg,"あなたは正気づいた", 18) ||
+		!strncmp(nomovemsg,"あなたはまた正気づ", 18) ||
+#endif
 		!strncmp(nomovemsg,"You regain con", 14) ||
 		!strncmp(nomovemsg,"You are consci", 14))));
 }
 
+/*JP
 static const char lava_killer[] = "molten lava";
+*/
+static const char lava_killer[] = "どろどろの溶岩で";
 
 boolean
 lava_effects()
@@ -4238,7 +5571,10 @@
 
 
     if (Slimed) {
+/*JP
 	pline("The slime boils away!");
+*/
+	pline("スライムは沸騰して蒸発した！");
 	Slimed = 0;
     }
 
@@ -4246,13 +5582,19 @@
 
 	if(Wwalking) {
 	    dmg = d(6,6);
+/*JP
 	    pline_The("lava here burns you!");
+*/
+	    pline("溶岩があなたを焼きつくした！");
 	    if(dmg < u.uhp) {
 		losehp(dmg, lava_killer, KILLED_BY);
 		goto burn_stuff;
 	    }
 	} else
+/*JP
 	    You("fall into the lava!");
+*/
+	    You("溶岩に落ちた！");
 
 	usurvive = Lifesaved || discover;
 #ifdef WIZARD
@@ -4263,7 +5605,10 @@
 	    if(is_organic(obj) && !obj->oerodeproof) {
 		if(obj->owornmask) {
 		    if (usurvive)
+/*JP
 			Your("%s into flame!", aobjnam(obj, "burst"));
+*/
+			Your("%sは燃えた！", xname(obj));
 
 		    if(obj == uarm) (void) Armor_gone();
 		    else if(obj == uarmc) (void) Cloak_off();
@@ -4290,20 +5635,32 @@
 	u.uhp = -1;
 	killer_format = KILLED_BY;
 	killer = lava_killer;
+/*JP
 	You("burn to a crisp...");
+*/
+	You("燃えてパリパリになった．．．");
 	done(BURNING);
 	while (!safe_teleds(TRUE)) {
+/*JP
 		pline("You're still burning.");
+*/
+		You("まだ燃えている．");
 		done(BURNING);
 	}
+/*JP
 	You("find yourself back on solid %s.", surface(u.ux, u.uy));
+*/
+	You("いつのまにか固い%sに戻っていた．", surface(u.ux, u.uy));
 	return(TRUE);
     }
 
     if (!Wwalking) {
 	u.utrap = rn1(4, 4) + (rn1(4, 12) << 8);
 	u.utraptype = TT_LAVA;
+/*JP
 	You("sink into the lava, but it only burns slightly!");
+*/
+	You("溶岩に沈んだが，ちょっと焦げただけだ！");
 	if (u.uhp > 1)
 	    losehp(1, lava_killer, KILLED_BY);
     }
@@ -4313,7 +5670,10 @@
     if(uarmf && !uarmf->oerodeproof && is_organic(uarmf)) {
 	/* save uarmf value because Boots_off() sets uarmf to null */
 	obj = uarmf;
+/*JP
 	Your("%s bursts into flame!", xname(obj));
+*/
+	Your("%sは燃えた！", xname(obj));
 	(void) Boots_off();
 	useup(obj);
     }
diff -aurN slashem-0.0.7E6F2/src/uhitm.c jslashem-0.0.7E6F2-J0.0.8/src/uhitm.c
--- slashem-0.0.7E6F2/src/uhitm.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/uhitm.c	2004-08-27 09:20:27.875000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL boolean FDECL(known_hitum, (struct monst *,int,int *,struct attack *));
@@ -160,7 +168,10 @@
 		    !glyph_is_warning(glyph_at(u.ux+u.dx,u.uy+u.dy)) &&
 		    !memory_is_invisible(u.ux+u.dx, u.uy+u.dy) &&
 		    !(!Blind && mtmp->mundetected && hides_under(mtmp->data))) {
+/*JP
 		pline("Wait!  There's %s there you can't see!",
+*/
+		pline("ちょっと待った！姿の見えない%sがいる！",
 			something);
 		map_invisible(u.ux+u.dx, u.uy+u.dy);
 		/* if it was an invisible mimic, treat it as if we stumbled
@@ -202,10 +213,18 @@
 		struct obj *obj;
 
 		if (Blind || (is_pool(mtmp->mx,mtmp->my) && !Underwater))
+/*JP
 		    pline("Wait!  There's a hidden monster there!");
+*/
+		    pline("待て！怪物が隠れている！");
 		else if ((obj = level.objects[mtmp->mx][mtmp->my]) != 0)
+#if 0 /*JP*/
 		    pline("Wait!  There's %s hiding under %s!",
 			  an(l_monnam(mtmp)), doname(obj));
+#else
+		    pline("待て！%sの下に%sが隠れている！",
+			  doname(obj), l_monnam(mtmp));
+#endif
 		return 0;
 	    }
 	}
@@ -228,7 +247,10 @@
 			return retval;
 		}
 		if (canspotmon(mtmp)) {
+/*JP
 			Sprintf(qbuf, "Really attack %s?", mon_nam(mtmp));
+*/
+			Sprintf(qbuf, "本当に%sを攻撃するの？", mon_nam(mtmp));
 			if (yn(qbuf) != 'y') {
 				/* Stormbringer is not tricked so easily */
 				if (!barehanded && u.twoweap && uswapwep &&
@@ -257,7 +279,10 @@
 	    (!mtmp->mcanmove || mtmp->msleeping ||
 	     (mtmp->mflee && !mtmp->mavenge)) &&
 	    u.ualign.record > -10) {
+/*JP
 	    You("caitiff!");
+*/
+	    pline("やっていることがまるで蛮族だ！");
 	    adjalign(-1);
 	}
 }
@@ -277,7 +302,10 @@
 /*	attacking peaceful creatures is bad for the samurai's giri */
 	if (Role_if(PM_SAMURAI) && mtmp->mpeaceful &&
 	    u.ualign.record > -10) {
+/*JP
 	    You("dishonorably attack the innocent!");
+*/
+	    pline("無実の者を攻撃するのは不名誉だ！");
 	    adjalign(-1);
 	}
 
@@ -305,7 +333,10 @@
 #if 0
 	if(Role_if(PM_MONK) && !Upolyd) {
 	    if (uarm) {
+/*JP
 		Your("armor is rather cumbersome...");
+*/
+	    	pline("鎧が邪魔だ．．．");
 		tmp -= urole.spelarmr;
 	    } else if (!uwep && !uarms) {
 		tmp += (u.ulevel / 3) + 2;
@@ -320,7 +351,11 @@
 		  	
 		  tmp += (u.ulevel / 3) + 2;
 		else if (!uwep && (!u.twoweap || !uswapwep)) {
+#if 0 /*JP*/
 		   pline("Your armor is rather cumbersome...");
+#else
+		   pline("鎧がちょっと邪魔だ．．．");
+#endif
 		   tmp += (u.ulevel / 9) + 1;
 		}
 	}
@@ -394,11 +429,17 @@
 		    monflee(mtmp, rnd(6), FALSE, FALSE);
 		    Strcpy(buf, y_monnam(mtmp));
 		    buf[0] = highc(buf[0]);
+/*JP
 		    You("stop.  %s is in the way!", buf);
+*/
+		    You("止まった．%sが道にいる！", buf);
 		    return(TRUE);
 		} else if ((mtmp->mfrozen || (! mtmp->mcanmove)
 				|| (mtmp->data->mmove == 0)) && rn2(6)) {
+/*JP
 		    pline("%s doesn't seem to move!", Monnam(mtmp));
+*/
+		    pline("%sは動けないようだ．", Monnam(mtmp));
 		    return(TRUE);
 		} else return(FALSE);
 	    }
@@ -413,13 +454,19 @@
 	if (Upolyd) {
 		/* certain "pacifist" monsters don't attack */
 		if(noattacks(youmonst.data)) {
+/*JP
 			You("have no way to attack monsters physically.");
+*/
+			You("物理的に怪物を攻撃するすべがない．");
 			mtmp->mstrategy &= ~STRAT_WAITMASK;
 			goto atk_done;
 		}
 	}
 
+/*JP
 	if(check_capacity("You cannot fight while so heavily loaded."))
+*/
+	if(check_capacity("あなたは物をたくさん持ちすぎて戦えない．"))
 	    goto atk_done;
 
 	if (u.twoweap && !can_twoweapon())
@@ -428,18 +475,33 @@
 	if(unweapon) {
 	    unweapon = FALSE;
 	    if(flags.verbose) {
-		if(uwep)
+	if(uwep)
+/*JP
 		    You("begin bashing monsters with your %s.",
+*/
+		    You("%sで怪物をなぐりつけた．",
 			aobjnam(uwep, (char *)0));
 		else if (tech_inuse(T_EVISCERATE))
+/*JP
 		    You("begin slashing monsters with your claws.");
+*/
+		    You("爪でモンスターをなで斬りにした．");
 		else if (!cantwield(youmonst.data)) {
 		    if (P_SKILL(P_MARTIAL_ARTS) >= P_EXPERT)
+/*JP
 			You("assume a martial arts stance.");
+*/
+			You("マーシャルアーツの構えをとった．");
+#if 0 /*JP*/
 		    else You("begin %sing monsters with your %s %s.",
 			Role_if(PM_MONK) ? "strik" : "bash",
 			uarmg ? "gloved" : "bare",	/* Del Lamb */
 			makeplural(body_part(HAND)));
+#else
+		    else You("%sで怪物を%sつけた．",
+			uarmg ? "グローブ" : "素手",
+			Role_if(PM_MONK) ? "打ち" : "なぐり");
+#endif
 	    }
 	}
 	}
@@ -497,9 +559,15 @@
 	       Stormbringer acquire similar anti-social behavior... */
 	    if (flags.verbose)
 		if (override_confirmation == HIT_UWEP)
+/*JP
 		    Your("bloodthirsty blade attacks!");
+*/
+		    Your("武器は血に飢えている！");
 		else
+/*JP
 		    pline("The black blade will not be thwarted!");
+*/
+		    pline("誰にも黒の刃を妨げることはできない！");
 	}
 
 	if(!*mhit) {
@@ -585,6 +653,7 @@
 		    /* Length of growl depends on how angry you get */
 		    switch (repeat_hit) {
 		    	case 0: /* This shouldn't be possible, but... */
+#if 0 /*JP*/
 			case 1: pline("Grrrrr!"); break;
 			case 2: pline("Rarrrgh!"); break;
 			case 3: pline("Grrarrgh!"); break;
@@ -592,6 +661,15 @@
 			case 5: pline("Raaarrrrrr!"); break;
 			case 6: 
 			default:pline("Grrrrrrarrrrg!"); break;
+#else
+			case 1: pline("グルルルルルッ！"); break;
+			case 2: pline("ガルルルルルルッ！"); break;
+			case 3: pline("グルルァッルルッッ！"); break;
+			case 4: pline("ガルァグルルググルァ！"); break;
+			case 5: pline("ガァァッッルッルルルッ！"); break;
+			case 6: 
+			default:pline("グルルルルルルラルルルルッ！"); break;
+#endif
 		    }
 		}
 	    }
@@ -728,7 +806,9 @@
 	struct obj *monwep;
 	struct obj *launcher;
 	char yourbuf[BUFSZ];
+#if 0 /*JP*/
 	char unconventional[BUFSZ];	/* substituted for word "attack" in msg */
+#endif
 	char saved_oname[BUFSZ];
 
 	if (thrown == 1) launcher = uwep;
@@ -760,7 +840,9 @@
 	    if (hit_as_four(&youmonst))		objenchant = 4;
 	}
 
+#if 0 /*JP*/
 	unconventional[0] = '\0';
+#endif
 	saved_oname[0] = '\0';
 
 	wakeup(mon);
@@ -805,7 +887,11 @@
 	    /* WAC - Hand-to-Hand Combat Techniques */
 
 	    if ((tech_inuse(T_CHI_STRIKE))  && (u.uen > 0)) {
+#if 0 /*JP*/
 		You("feel a surge of force.");
+#else
+		You("力の高まりを感じた．");
+#endif
 		tmp += (u.uen > (10 + (u.ulevel / 5)) ? 
 			 (10 + (u.ulevel / 5)) : u.uen);
 		u.uen -= (10 + (u.ulevel / 5));
@@ -818,14 +904,20 @@
 		dmgbonus = noeffect ? 0 : d(2,4);
 		switch (rn2(4)) {
 		    case 0: /* Fire */
+/*JP
 			if (!Blind) pline("%s is on fire!", Monnam(mon));
+*/
+			if (!Blind) pline("%sは燃えた！", Monnam(mon));
 			dmgbonus += destroy_mitem(mon, SCROLL_CLASS, AD_FIRE);
 			dmgbonus += destroy_mitem(mon, SPBOOK_CLASS, AD_FIRE);
 			if (noeffect || resists_fire(mon)) {
 			    if (!noeffect)
 				shieldeff(mon->mx, mon->my);
 			    if (!Blind) 
+/*JP
 				pline_The("fire doesn't heat %s!", mon_nam(mon));
+*/
+				pline_The("炎は%sに影響がない！", mon_nam(mon));
 			    golemeffects(mon, AD_FIRE, dmgbonus);
 			    if (!noeffect)
 				dmgbonus = 0;
@@ -836,12 +928,18 @@
 			dmgbonus += destroy_mitem(mon, POTION_CLASS, AD_FIRE);
 			break;
 		    case 1: /* Cold */
+/*JP
 		    	if (!Blind) pline("%s is covered in frost!", Monnam(mon));
+*/
+		    	if (!Blind) pline("%sは氷で覆われた！", Monnam(mon));
 			if (noeffect || resists_cold(mon)) {
 			    if (!noeffect)
 				shieldeff(mon->mx, mon->my);
 			    if (!Blind) 
+/*JP
 				pline_The("frost doesn't chill %s!", mon_nam(mon));
+*/
+				pline_The("氷は%sを凍らすことができない！", mon_nam(mon));
 			    golemeffects(mon, AD_COLD, dmgbonus);
 			    dmgbonus = 0;
 			    noeffect = 0;
@@ -849,13 +947,19 @@
 			dmgbonus += destroy_mitem(mon, POTION_CLASS, AD_COLD);
 			break;
 		    case 2: /* Elec */
+/*JP
 			if (!Blind) pline("%s is zapped!", Monnam(mon));
+*/
+			if (!Blind) pline("%sは電撃をくらった！", Monnam(mon));
 			dmgbonus += destroy_mitem(mon, WAND_CLASS, AD_ELEC);
 			if (noeffect || resists_elec(mon)) {
 			    if (!noeffect)
 				shieldeff(mon->mx, mon->my);
 			    if (!Blind)
+/*JP
 				pline_The("zap doesn't shock %s!", mon_nam(mon));
+*/
+				pline_The("電撃は%sに影響を与えない！", mon_nam(mon));
 			    golemeffects(mon, AD_ELEC, dmgbonus);
 			    if (!noeffect)
 				dmgbonus = 0;
@@ -867,10 +971,16 @@
 			break;
 		    case 3: /* Acid */
 			if (!Blind)
+/*JP
 			    pline("%s is covered in acid!", Monnam(mon));
+*/
+			    pline("%sは酸を浴びた！", Monnam(mon));
 			if (noeffect || resists_acid(mon)) {
 			    if (!Blind)
+/*JP
 				pline_The("acid doesn't burn %s!", Monnam(mon));
+*/
+				pline_The("酸は%sを侵すことができない！", Monnam(mon));
 			    dmgbonus = 0;
 			    noeffect = 0;
 			}
@@ -931,9 +1041,16 @@
 				obj->otyp == BOOMERANG && !rnl(4) == 4-1) {
 			boolean more_than_1 = (obj->quan > 1L);
 
+#if 0 /*JP*/
 			pline("As you hit %s, %s%s %s breaks into splinters.",
 			      mon_nam(mon), more_than_1 ? "one of " : "",
 			      shk_your(yourbuf, obj), xname(obj));
+#else
+			pline("%sを攻撃すると，%s%s%sはこっぱみじんになった．",
+			      mon_nam(mon),
+			      shk_your(yourbuf, obj), xname(obj),
+			       more_than_1 ? "のひとつ" : "");
+#endif
 			if (!more_than_1) {
 			    if (obj == uwep)
 				uwepgone();   /* set unweapon */
@@ -956,7 +1073,10 @@
 		    if (!valid_weapon_attack || mon == u.ustuck) {
 			;	/* no special bonuses */
 		    } else if (mon->mflee && Role_if(PM_ROGUE) && !Upolyd) {
+/*JP
 			You("strike %s from behind!", mon_nam(mon));
+*/
+			You("%sを背後から攻撃した！", mon_nam(mon));
 			tmp += rnd(u.ulevel);
 			hittxt = TRUE;
 		    } else if (dieroll == 2 && obj == uwep &&
@@ -982,9 +1102,14 @@
 			setmnotwielded(mon,monwep);
 			MON_NOWEP(mon);
 			mon->weapon_check = NEED_WEAPON;
+#if 0 /*JP*/
 			pline("%s %s %s from the force of your blow!",
 			      s_suffix(Monnam(mon)), xname(monwep),
 			      otense(monwep, "shatter"));
+#else
+			pline("%sの%sはあなたの一撃で粉々になった！",
+			      Monnam(mon), xname(monwep));
+#endif
 			m_useup(mon, monwep);
 			/* If someone just shattered MY weapon, I'd flee! */
 			if (rn2(4)) {
@@ -1015,7 +1140,10 @@
 		    if (thrown && (is_ammo(obj) || is_missile(obj))) {
 #ifdef P_SPOON
 			if (obj->oartifact == ART_HOUCHOU) {
+/*JP
 			    pline("There is a bright flash as it hits %s.",
+*/
+			    pline("%sに当たるとギラリと光った．",
 				the(mon_nam(mon)));
 			    tmp = dmgval(obj, mon);
 			}
@@ -1092,7 +1220,9 @@
 	    } else {
 		if (mdat == &mons[PM_SHADE] && !shade_aware(obj)) {
 		    tmp = 0;
+#if 0 /*JP*/
 		    Strcpy(unconventional, cxname(obj));
+#endif
 		} else {
 		switch(obj->otyp) {
 		    case BOULDER:		/* 1d20 */
@@ -1102,7 +1232,10 @@
 			break;
 		    case MIRROR:
 			if (breaktest(obj)) {
+/*JP
 			    You("break %s mirror.  That's bad luck!",
+*/
+			    You("%s鏡を壊してしまった．こりゃまいった！",
 				shk_your(yourbuf, obj));
 			    change_luck(-2);
 			    useup(obj);
@@ -1115,7 +1248,10 @@
 			break;
 #ifdef TOURIST
 		    case EXPENSIVE_CAMERA:
+/*JP
 			You("succeed in destroying %s camera.  Congratulations!",
+*/
+			You("%sカメラを壊すことができた．おめでとう！",
 			    shk_your(yourbuf, obj));
 			useup(obj);
 			return(TRUE);
@@ -1124,13 +1260,20 @@
 #endif
 		    case CORPSE:		/* fixed by polder@cs.vu.nl */
 			if (touch_petrifies(&mons[obj->corpsenm])) {
+#if 0 /*JP*/
 			    static const char withwhat[] = "corpse";
+#endif
 			    tmp = 1;
 			    hittxt = TRUE;
+#if 0 /*JP*/
 			    You("hit %s with %s %s.", mon_nam(mon),
 				obj->dknown ? the(mons[obj->corpsenm].mname) :
 				an(mons[obj->corpsenm].mname),
 				(obj->quan > 1) ? makeplural(withwhat) : withwhat);
+#else
+			    You("%sを%sの死体で攻撃した．", mon_nam(mon),
+				jtrns_mon(mons[obj->corpsenm].mname));
+#endif
 			    if (!munstone(mon, TRUE))
 				minstapetrify(mon, TRUE);
 			    if (resists_ston(mon)) break;
@@ -1149,7 +1292,9 @@
 #define useup_eggs(o)	{ if (thrown) obfree(o,(struct obj *)0); \
 			  else useupall(o); \
 			  o = (struct obj *)0; }	/* now gone */
+#if 0 /*JP*/
 			long cnt = obj->quan;
+#endif
 
 			tmp = 1;		/* nominal physical damage */
 			get_dmg_bonus = FALSE;
@@ -1166,11 +1311,17 @@
 
 			if (touch_petrifies(&mons[obj->corpsenm])) {
 			    /*learn_egg_type(obj->corpsenm);*/
+#if 0 /*JP*/
 			    pline("Splat! You hit %s with %s %s egg%s!",
 				mon_nam(mon),
 				obj->known ? "the" : cnt > 1L ? "some" : "a",
 				obj->known ? mons[obj->corpsenm].mname : "petrifying",
 				plur(cnt));
+#else
+			    pline("ビチャッ！あなたは%sに%sの卵を投げつけた！",
+				mon_nam(mon),
+				jtrns_mon(mons[obj->corpsenm].mname));
+#endif
 #if 0
 			    obj->known = 1;	/* (not much point...) */
 #endif
@@ -1181,15 +1332,29 @@
 			    return (boolean) (mon->mhp > 0);
 			} else {	/* ordinary egg(s) */
 			    const char *eggp =
+#if 0 /*JP*/
 				     (obj->corpsenm != NON_PM && obj->known) ?
 					      the(mons[obj->corpsenm].mname) :
 					      (cnt > 1L) ? "some" : "an";
+#else
+				     (obj->corpsenm != NON_PM && obj->known) ?
+					      jtrns_mon(mons[obj->corpsenm].mname) : "";
+#endif
+#if 0 /*JP*/
 			    You("hit %s with %s egg%s.",
 				mon_nam(mon), eggp, plur(cnt));
+#else
+			    You("%sに%s%s卵を投げつけた．",
+				mon_nam(mon), eggp, *eggp ? "の" : "");
+#endif
 			    if (touch_petrifies(mdat) && !stale_egg(obj)) {
+#if 0 /*JP*/
 				pline_The("egg%s %s alive any more...",
 				      plur(cnt),
 				      (cnt == 1L) ? "isn't" : "aren't");
+#else
+				pline("もう卵が孵化することはないだろう．．．");
+#endif
 				if (obj->timed) obj_stop_timers(obj);
 				obj->otyp = ROCK;
 				obj->oclass = GEM_CLASS;
@@ -1199,7 +1364,10 @@
 				obj->owt = weight(obj);
 				if (thrown) place_object(obj, mon->mx, mon->my);
 			    } else {
+/*JP
 				pline("Splat!");
+*/
+				pline("ビチャッ！");
 				useup_eggs(obj);
 				exercise(A_WIS, FALSE);
 			    }
@@ -1221,10 +1389,18 @@
 				     ? AT_SPIT : AT_WEAP), obj)) {
 			    if (Blind) {
 				pline(obj->otyp == CREAM_PIE ?
+/*JP
 				      "Splat!" : "Splash!");
+*/
+				      "ビシャッ！" : "ピチャッ！");
 			    } else if (obj->otyp == BLINDING_VENOM) {
+#if 0 /*JP*/
 				pline_The("venom blinds %s%s!", mon_nam(mon),
 					  mon->mcansee ? "" : " further");
+#else
+				pline("毒液で%sは%s目が見えなくなった！", mon_nam(mon),
+					mon->mcansee ? "" : "さらに");
+#endif
 			    } else {
 				char *whom = mon_nam(mon);
 				char *what = The(xname(obj));
@@ -1233,10 +1409,20 @@
 				/* note: s_suffix returns a modifiable buffer */
 				if (haseyes(mdat)
 				    && mdat != &mons[PM_FLOATING_EYE])
+#if 0 /*JP*/
 				    whom = strcat(strcat(s_suffix(whom), " "),
 						  mbodypart(mon, FACE));
+#else
+				    whom = strcat(strcat(s_suffix(whom), "の"),
+						  mbodypart(mon, FACE));
+#endif
+#if 0 /*JP*/
 				pline("%s %s over %s!",
 				      what, vtense(what, "splash"), whom);
+#else
+				pline("%sは%sにぶちまけられた！",
+				      what, whom);
+#endif
 			    }
 			    setmangry(mon);
 			    mon->mcansee = 0;
@@ -1245,7 +1431,10 @@
 				mon->mblinded = 127;
 			    else mon->mblinded += tmp;
 			} else {
+/*JP
 			    pline(obj->otyp==CREAM_PIE ? "Splat!" : "Splash!");
+*/
+			    pline(obj->otyp==CREAM_PIE ? "ビシャッ！" : "ピチャッ！");
 			    setmangry(mon);
 			}
 			if (thrown) obfree(obj, (struct obj *)0);
@@ -1256,11 +1445,17 @@
 			break;
 		    case ACID_VENOM: /* thrown (or spit) */
 			if (resists_acid(mon)) {
+/*JP
 				Your("venom hits %s harmlessly.",
+*/
+				pline("毒液は%sには効果がなかった．",
 					mon_nam(mon));
 				tmp = 0;
 			} else {
+/*JP
 				Your("venom burns %s!", mon_nam(mon));
+*/
+				Your("毒液は%sを焼いた！", mon_nam(mon));
 				tmp = dmgval(obj, mon);
 			}
 			if (thrown) obfree(obj, (struct obj *)0);
@@ -1314,7 +1509,11 @@
 	if (tech_inuse(T_BERSERK)) tmp += 4;
 	if (tech_inuse(T_EVISCERATE)) {
 		tmp += rnd((int) (u.ulevel/2 + 1)) + (u.ulevel/2); /* [max] was only + u.ulevel */
+#if 0 /*JP*/
                 You("slash %s!", mon_nam(mon));
+#else
+                You("%sを切り裂いた！", mon_nam(mon));
+#endif
 		hittxt = TRUE;
 	}
 
@@ -1334,16 +1533,26 @@
 	    int nopoison = (10 - (obj->owt/10));            
 	    if(nopoison < 2) nopoison = 2;
 	    if Role_if(PM_SAMURAI) {
+/*JP
 		You("dishonorably use a poisoned weapon!");
+*/
+		You("不名誉にも毒の武器を使用した！");
 		adjalign(-sgn(u.ualign.type));
 	    } else if ((u.ualign.type == A_LAWFUL) && (u.ualign.record > -10)) {
+/*JP
 		You_feel("like an evil coward for using a poisoned weapon.");
+*/
+		You("毒の武器を使用するのは卑怯だと感じた．");
 		adjalign(-1);
 	    }
 	    if (obj && !rn2(nopoison)) {
 		obj->opoisoned = FALSE;
+#if 0 /*JP*/
 		Your("%s %s no longer poisoned.", xname(obj),
 		     otense(obj, "are"));
+#else
+		Your("%sはもう毒が塗られていない．", xname(obj));
+#endif
 	    }
 	    if (resists_poison(mon))
 		needpoismsg = TRUE;
@@ -1358,10 +1567,15 @@
 	    tmp = 0;
 	    if (mdat == &mons[PM_SHADE]) {
 		if (!hittxt) {
+#if 0 /*JP*/
 		    const char *what = unconventional[0] ? unconventional : "attack";
 		    Your("%s %s harmlessly through %s.",
 		    	what, vtense(what, "pass"),
 			mon_nam(mon));
+#else
+		    Your("攻撃は%sを通りぬけた．",
+		    	mon_nam(mon));
+#endif
 		    hittxt = TRUE;
 		}
 	    } else {
@@ -1372,10 +1586,18 @@
 #ifdef STEED
 	if (jousting) {
 	    tmp += d(2, (obj == uwep) ? 10 : 2);        /* [was in dmgval()] */
+#if 0 /*JP*/
 	    You("joust %s%s",
 			 mon_nam(mon), canseemon(mon) ? exclam(tmp) : ".");
+#else
+	    You("%sに突撃した%s",
+			 mon_nam(mon), canseemon(mon) ? exclam(tmp) : "．");
+#endif
 	    if (jousting < 0) {
+/*JP
 		Your("%s shatters on impact!", xname(obj));
+*/
+		Your("%sは衝撃で壊れた！", xname(obj));
 		/* (must be either primary or secondary weapon to get here) */
 		u.twoweap = FALSE;      /* untwoweapon() is too verbose here */
 		if (obj == uwep) uwepgone();            /* set unweapon */
@@ -1398,8 +1620,13 @@
 	    if (rnd(100) < P_SKILL(P_BARE_HANDED_COMBAT) &&
 			!bigmonst(mdat) && !thick_skinned(mdat)) {
 		if (canspotmon(mon))
+#if 0 /*JP*/
 		    pline("%s %s from your powerful strike!", Monnam(mon),
 			  makeplural(stagger(mon->data, "stagger")));
+#else
+		    pline("%sはあなたの会心の一撃でよろめいた！",
+			  Monnam(mon));
+#endif
 		/* avoid migrating a dead monster */
 		if (mon->mhp > tmp) {
 		    mhurtle(mon, u.dx, u.dy, 1);
@@ -1414,7 +1641,11 @@
 	    if (silvermsg)
 		tmp = 8;
 	    else {
+#if 0 /*JP*/
 		Your("attack doesn't seem to harm %s.", mon_nam(mon));
+#else
+		Your("攻撃は%sにダメージを与えなかったようだ．", mon_nam(mon));
+#endif
 		hittxt = TRUE;
 		tmp = 0;
 	    }
@@ -1428,16 +1659,25 @@
               || (P_SKILL(weapon_type(obj)) >= P_EXPERT)
               || obj->oartifact == ART_STAKE_OF_VAN_HELSING) {
                 if (!rn2(10)) {
+/*JP
                     You("plunge your stake into the heart of %s.",
+*/
+                    You("%sの心臓に杭を突き刺した．",
                         mon_nam(mon));
                     vapekilled = TRUE;
                 } else {
+/*JP
                     You("drive your stake into %s.", mon_nam(mon));
+*/
+                    You("%sに杭を打ち込んだ．", mon_nam(mon));
                     tmp += rnd(6) + 2;
                     hittxt = TRUE;
                 }
             } else {
+/*JP
                 You("drive your stake into %s.", mon_nam(mon));
+*/
+                You("%sに杭を打ち込んだ．", mon_nam(mon));
                 tmp += rnd(6);
                 hittxt = TRUE;
             }
@@ -1454,7 +1694,10 @@
 		if (canhitmon < u.ulevel / 8 &&
 				!thick_skinned(mdat)) {
 			if(!Blind)
+/*JP
 			pline("You strike %s extremely hard!",
+*/
+			    You("%sに極めて大きな打撃を与えた！",
 				mon_nam(mon));
 			tmp *= 2;
 			hittxt = TRUE;
@@ -1462,7 +1705,10 @@
 		else if (canhitmon < u.ulevel / 4 &&
 				!thick_skinned(mdat)) {
 			if(!Blind)
+/*JP
 			pline("You strike %s very hard!",
+*/
+			    You("%sに大きな打撃を与えた！",
 				mon_nam(mon));
 			tmp += (tmp/2);
 			hittxt = TRUE;
@@ -1470,7 +1716,10 @@
 		else if (canhitmon < u.ulevel / 2 &&
 			 !bigmonst(mon->data) && !thick_skinned(mdat)) {
 			if(!Blind)
+/*JP
 			pline("%s staggers from your powerful strike!",
+*/
+			pline("%sはあなたの強烈な打撃でよろめいた！",
 				Monnam(mon));
 			mon->mstun = 1;
 			hittxt = TRUE;
@@ -1508,7 +1757,10 @@
 		   && mon->mhp > 1 && !thrown && !mon->mcan
 		   /* && !destroyed  -- guaranteed by mhp > 1 */ ) {
 		if (clone_mon(mon, 0, 0)) {
+/*JP
 			pline("%s divides as you hit it!", Monnam(mon));
+*/
+			pline("あなたの攻撃で%sは分裂した！", Monnam(mon));
 			hittxt = TRUE;
 		}
 	}
@@ -1516,9 +1768,17 @@
 	if (!hittxt &&			/*( thrown => obj exists )*/
 	  (!destroyed || (thrown && m_shot.n > 1 && m_shot.o == obj->otyp))) {
 		if (thrown) hit(mshot_xname(obj), mon, exclam(tmp));
+/*JP
 		else if (!flags.verbose) You("hit it.");
+*/
+		else if(!flags.verbose) pline("攻撃は命中した．");
+#if 0 /*JP*/
 		else You("%s %s%s", Role_if(PM_BARBARIAN) ? "smite" : "hit",
 			 mon_nam(mon), canseemon(mon) ? exclam(tmp) : ".");
+#else
+		else Your("%sへの攻撃は命中した%s", mon_nam(mon), canseemon(mon)
+			? exclam(tmp) : "．");
+#endif
 	}
 
 	if (burnmsg) {
@@ -1527,9 +1787,15 @@
 	  /* (this does not do any extra damage) */
 
 	  if (!Blind) {
+#if 0 /*JP*/
 	    Your("%s %s %s.", xname(obj),
 		 (mon->data == &mons[PM_WATER_ELEMENTAL]) ?
 		 "vaporizes part of" : "burns", mon_nam(mon));
+#else
+	    Your("%sは%s%s．", xname(obj), mon_nam(mon),
+		 (mon->data == &mons[PM_WATER_ELEMENTAL]) ?
+		 "の一部を蒸発させた" : "を燃やした");
+#endif
 	  }
 
 	  if (!rn2(2) && burnarmor(mon)) {
@@ -1543,7 +1809,11 @@
 
 	  if (mon->data == &mons[PM_WATER_ELEMENTAL]) {
 	    if (!Blind) {
+#if 0 /*JP*/
 	      Your("%s goes out.", xname(obj));
+#else
+	      Your("%sの火が消えた．", xname(obj));
+#endif
 	    }
 	    end_burn(obj, TRUE);
 	  }
@@ -1560,38 +1830,70 @@
 
 		if (canspotmon(mon)) {
 		    if (barehand_silver_rings == 1)
+/*JP
 			fmt = "Your silver ring sears %s!";
+*/
+			fmt = "%sは銀の指輪で焼かれた！";
 		    else if (barehand_silver_rings == 2)
+/*JP
 			fmt = "Your silver rings sear %s!";
+*/
+			fmt = "%sは銀の指輪で焼かれた！";
 		    else if (silverobj && saved_oname[0]) {
+#if 0 /*JP*/
 		    	Sprintf(silverobjbuf, "Your %s%s %s %%s!",
 		    		strstri(saved_oname, "silver") ?
 					"" : "silver ",
 				saved_oname, vtense(saved_oname, "sear"));
+#else
+		    	Sprintf(silverobjbuf, "%%sは%s%sで焼かれた！",
+		    		strstri(saved_oname, "銀") ?
+					"" : "銀の",
+				saved_oname);
+#endif
 		    	fmt = silverobjbuf;
 		    } else
+/*JP
 			fmt = "The silver sears %s!";
+*/
+			fmt = "%sは銀で焼かれた！";
 		} else {
 		    *whom = highc(*whom);	/* "it" -> "It" */
+/*JP
 		    fmt = "%s is seared!";
+*/
+		    fmt = "%sは焼かれた．";
 		}
 		/* note: s_suffix returns a modifiable buffer */
 		if (!noncorporeal(mdat))
+/*JP
 		    whom = strcat(s_suffix(whom), " flesh");
+*/
+		    whom = strcat(s_suffix(whom), "の肉");
 		pline(fmt, whom);
 	}
 
 	if (needpoismsg)
+/*JP
 		pline_The("poison doesn't seem to affect %s.", mon_nam(mon));
+*/
+		pline("毒は%sに効かなかったようだ．", mon_nam(mon));
 	if (poiskilled) {
+/*JP
 		pline_The("poison was deadly...");
+*/
+		pline("毒は致死量だった．．．");
 		if (!already_killed) xkilled(mon, 0);
 		return FALSE;
 /* For vamps */
         } else if (vapekilled) {
                 if (cansee(mon->mx, mon->my))
+#if 0 /*JP*/
                     pline("%s%ss body vaporizes!", Monnam(mon),
                             canseemon(mon) ? "'" : "");                
+#else
+                    pline("%sの肉体が蒸発した！", Monnam(mon));
+#endif
                 if (!already_killed) xkilled(mon, 2);
 		return FALSE;
 	} else if (destroyed) {
@@ -1603,7 +1905,10 @@
 			mon->mconf = 1;
 			if (!mon->mstun && mon->mcanmove && !mon->msleeping &&
 				canseemon(mon))
+/*JP
 			    pline("%s appears confused.", Monnam(mon));
+*/
+			    pline("%sは混乱しているようだ．", Monnam(mon));
 		}
 	}
 
@@ -1659,6 +1964,7 @@
 	   protection might fail (33% chance) when the armor is cursed */
 	if (obj && (obj->greased || obj->otyp == OILSKIN_CLOAK) &&
 		(!obj->cursed || rn2(3))) {
+#if 0 /*JP*/
 	    You("%s %s %s %s!",
 		mattk->adtyp == AD_WRAP ?
 			"slip off of" : "grab, but cannot hold onto",
@@ -1668,9 +1974,21 @@
 		   for undiscovered oilskin cloak */
 		(obj->greased || objects[obj->otyp].oc_name_known) ?
 			xname(obj) : cloak_simple_name(obj));
+#else
+	    You("%sの%s%s%s！",
+		mon_nam(mdef),
+		obj->greased ? "油の塗られた" : "滑りやすい",
+		(obj->greased || objects[obj->otyp].oc_name_known) ?
+		xname(obj) : cloak_simple_name(obj),
+		mattk->adtyp == AD_WRAP ?
+			"で滑った" : "をつかまようとした，しかしできなかった");
+#endif
 
 	    if (obj->greased && !rn2(2)) {
+/*JP
 		pline_The("grease wears off.");
+*/
+		pline("油は落ちてしまった．");
 		obj->greased = 0;
 	    }
 	    return TRUE;
@@ -1720,7 +2038,10 @@
 	struct permonst *pm;
 	struct monst *dtmp;
 
+/*JP
 	pline("Some hell-p has arrived!");
+*/
+	pline("地獄の仲間が現われた！");
 	i = !rn2(6) ? ndemon(u.ualign.type) : NON_PM;
 	pm = i != NON_PM ? &mons[i] : youmonst.data;
 	if ((dtmp = makemon(pm, u.ux, u.uy, NO_MM_FLAGS)) != 0)
@@ -1770,11 +2091,19 @@
 	if (stealoid) {		/* we will be taking everything */
 	    if (gender(mdef) == (int) u.mfemale &&
 			youmonst.data->mlet == S_NYMPH)
+/*JP
 		You("charm %s.  She gladly hands over her possessions.",
+*/
+		You("%sをうっとりさせた．彼女はよろこんで持ち物をさしだした．",
 		    mon_nam(mdef));
 	    else
+#if 0 /*JP*/
 		You("seduce %s and %s starts to take off %s clothes.",
 		    mon_nam(mdef), mhe(mdef), mhis(mdef));
+#else
+		You("%sを誘惑した．%sは服を脱ぎはじめた．",
+		    mon_nam(mdef), mhe(mdef));
+#endif
 	}
 
 	while ((otmp = mdef->minvent) != 0) {
@@ -1791,18 +2120,30 @@
 		update_mon_intrinsics(mdef, otmp, FALSE, FALSE);
 
 		if (otmp == stealoid)	/* special message for final item */
+#if 0 /*JP*/
 		    pline("%s finishes taking off %s suit.",
 			  Monnam(mdef), mhis(mdef));
+#else
+		    pline("%sは脱ぎ終えた．", Monnam(mdef));
+#endif
 	    }
 	    /* give the object to the character */
+#if 0 /*JP*/
 	    otmp = hold_another_object(otmp, "You snatched but dropped %s.",
 				       doname(otmp), "You steal: ");
+#else
+	    otmp = hold_another_object(otmp, "あなたは%sを盗んだが落とした．",
+				       doname(otmp), "盗んだ物：");
+#endif
 	    if (otmp->where != OBJ_INVENT) continue;
 	    if (otmp->otyp == CORPSE &&
 		    touch_petrifies(&mons[otmp->corpsenm]) && !uarmg) {
 		char kbuf[BUFSZ];
 
+/*JP
 		Sprintf(kbuf, "stolen %s corpse", mons[otmp->corpsenm].mname);
+*/
+		Sprintf(kbuf, "%sの死体を盗んで", jtrns_mon(mons[otmp->corpsenm].mname));
 		instapetrify(kbuf);
 		break;		/* stop the theft even if hero survives */
 	    }
@@ -1854,8 +2195,12 @@
 	switch(mattk->adtyp) {
 	    case AD_STUN:
 		if(!Blind)
+#if 0 /*JP*/
 		    pline("%s %s for a moment.", Monnam(mdef),
 			  makeplural(stagger(mdef->data, "stagger")));
+#else
+		    pline("%sは一瞬くらくらした．", Monnam(mdef));
+#endif
 		mdef->mstun = 1;
 		goto physical;
 	    case AD_LEGS:
@@ -1890,12 +2235,18 @@
 		    break;
 		}
 		if (!Blind)
+/*JP
 		    pline("%s is %s!", Monnam(mdef),
+*/
+		    pline("%sは%s!", Monnam(mdef),
 			  on_fire(mdef->data, mattk));
 		if (pd == &mons[PM_STRAW_GOLEM] ||
 		    pd == &mons[PM_PAPER_GOLEM]) {
 		    if (!Blind)
+/*JP
 		    	pline("%s burns completely!", Monnam(mdef));
+*/
+		    	pline("%sは灰と化した！", Monnam(mdef));
 		    xkilled(mdef,2);
 		    tmp = 0;
 		    break;
@@ -1905,7 +2256,10 @@
 			pd == &mons[PM_PAPER_GOLEM] ||
 		    pd == &mons[PM_WAX_GOLEM]) {
 		    if (!Blind)
+/*JP
 			pline("%s falls to pieces!", Monnam(mdef));
+*/
+			pline("%sはバラバラになった！", Monnam(mdef));
 			xkilled(mdef,3);
 			return(2);
 		}
@@ -1913,7 +2267,10 @@
 		tmp += destroy_mitem(mdef, SPBOOK_CLASS, AD_FIRE);
 		if (resists_fire(mdef)) {
 		    if (!Blind)
+/*JP
 			pline_The("fire doesn't heat %s!", mon_nam(mdef));
+*/
+			pline("炎は%sに影響がない！", mon_nam(mdef));
 		    golemeffects(mdef, AD_FIRE, tmp);
 		    shieldeff(mdef->mx, mdef->my);
 		    tmp = 0;
@@ -1926,11 +2283,17 @@
 		    tmp = 0;
 		    break;
 		}
+/*JP
 		if (!Blind) pline("%s is covered in frost!", Monnam(mdef));
+*/
+		if (!Blind) pline("%sは氷で覆われた！", Monnam(mdef));
 		if (resists_cold(mdef)) {
 		    shieldeff(mdef->mx, mdef->my);
 		    if (!Blind)
+/*JP
 			pline_The("frost doesn't chill %s!", mon_nam(mdef));
+*/
+			pline("氷は%sを凍らすことができない！", mon_nam(mdef));
 		    golemeffects(mdef, AD_COLD, tmp);
 		    tmp = 0;
 		}
@@ -1941,11 +2304,17 @@
 		    tmp = 0;
 		    break;
 		}
+/*JP
 		if (!Blind) pline("%s is zapped!", Monnam(mdef));
+*/
+		if (!Blind) pline("%sは電撃をくらった！", Monnam(mdef));
 		tmp += destroy_mitem(mdef, WAND_CLASS, AD_ELEC);
 		if (resists_elec(mdef)) {
 		    if (!Blind)
+/*JP
 			pline_The("zap doesn't shock %s!", mon_nam(mdef));
+*/
+			pline("電撃は%sに影響を与えない！", mon_nam(mdef));
 		    golemeffects(mdef, AD_ELEC, tmp);
 		    shieldeff(mdef->mx, mdef->my);
 		    tmp = 0;
@@ -1974,7 +2343,10 @@
 		if (mdef->mgold) {
 		    u.ugold += mdef->mgold;
 		    mdef->mgold = 0;
+/*JP
 		    Your("purse feels heavier.");
+*/
+		    You("財布が重くなったような気がした．");
 		}
 #else
                 /* This you as a leprechaun, so steal
@@ -1985,9 +2357,15 @@
 		        obj_extract_self(mongold);  
 		        if (merge_choice(invent, mongold) || inv_cnt() < 52) {
 			    addinv(mongold);
+/*JP
 			    Your("purse feels heavier.");
+*/
+			    You("財布が重くなったような気がした．");
 			} else {
+/*JP
                             You("grab %s's gold, but find no room in your knapsack.", mon_nam(mdef));
+*/
+                            You("%sのお金をつかんだが，持ち物袋に入らなかった．", mon_nam(mdef));
 			    dropy(mongold);
 		        }
 		    }
@@ -2006,13 +2384,19 @@
 		    Strcpy(nambuf, Monnam(mdef));
 		    if (u_teleport_mon(mdef, FALSE) &&
 			    u_saw_mon && !canseemon(mdef))
+/*JP
 			pline("%s suddenly disappears!", nambuf);
+*/
+			pline("%sは突然消えた！", Monnam(mdef));
 		}
 		break;
 	    case AD_BLND:
 		if (can_blnd(&youmonst, mdef, mattk->aatyp, (struct obj*)0)) {
 		    if(!Blind && mdef->mcansee)
+/*JP
 			pline("%s is blinded.", Monnam(mdef));
+*/
+			pline("%sは目が見えなくなった．", Monnam(mdef));
 		    mdef->mcansee = 0;
 		    tmp += mdef->mblinded;
 		    if (tmp > 127) tmp = 127;
@@ -2024,13 +2408,19 @@
 		if (night() && !rn2(10) && !mdef->mcan) {
 		    if (mdef->data == &mons[PM_CLAY_GOLEM]) {
 			if (!Blind)
+/*JP
 			    pline("Some writing vanishes from %s head!",
+*/
+			    pline("%sの頭に書いてある文字のいくつかが消えた！",
 				s_suffix(mon_nam(mdef)));
 			xkilled(mdef, 0);
 			/* Don't return yet; keep hp<1 and tmp=0 for pet msg */
 		    } else {
 			mdef->mcan = 1;
+/*JP
 			You("chuckle.");
+*/
+			You("くすくす笑った．");
 		    }
 		}
 		tmp = 0;
@@ -2045,20 +2435,29 @@
 				/* For the life of a creature is in the blood
 				   (Lev 17:11) */
 				if (flags.verbose)
+/*JP
 				    You("feed on the lifeblood.");
+*/
+				    You("生き血を啜った．");
 				/* [ALI] Biting monsters does not count against
 				   eating conducts. The draining of life is
 				   considered to be primarily a non-physical
 				   effect */
 				lesshungry(xtmp * 6);
 			}
+/*JP
 			pline("%s suddenly seems weaker!", Monnam(mdef));
+*/
+			pline("%sは突然弱くなったように見えた！", Monnam(mdef));
 			mdef->mhpmax -= xtmp;
 #ifdef SHOW_DMG
 			if (xtmp < mdef->mhp) showdmg(xtmp);
 #endif
 			if ((mdef->mhp -= xtmp) <= 0 || !mdef->m_lev) {
+/*JP
 				pline("%s dies!", Monnam(mdef));
+*/
+				pline("%sは死んだ！", Monnam(mdef));
 				xkilled(mdef,0);
 			} else
 				mdef->m_lev--;
@@ -2067,7 +2466,10 @@
 		break;
 	    case AD_RUST:
 		if (pd == &mons[PM_IRON_GOLEM]) {
+/*JP
 			pline("%s falls to pieces!", Monnam(mdef));
+*/
+			pline("%sはバラバラになった！", Monnam(mdef));
 			xkilled(mdef,0);
 		}
 		hurtmarmor(mdef, AD_RUST);
@@ -2080,7 +2482,10 @@
 	    case AD_DCAY:
 		if (pd == &mons[PM_WOOD_GOLEM] ||
 		    pd == &mons[PM_LEATHER_GOLEM]) {
+/*JP
 			pline("%s falls to pieces!", Monnam(mdef));
+*/
+			pline("%sはバラバラになった！", Monnam(mdef));
 			xkilled(mdef,0);
 		}
 		hurtmarmor(mdef, AD_DCAY);
@@ -2090,13 +2495,22 @@
 	    case AD_DRDX:
 	    case AD_DRCO:
 		if (!negated && !rn2(8)) {
+/*JP
 		    Your("%s was poisoned!", mpoisons_subj(&youmonst, mattk));
+*/
+		    Your("%sは毒されている！", mpoisons_subj(&youmonst, mattk));
 		    if (resists_poison(mdef))
+/*JP
 			pline_The("poison doesn't seem to affect %s.",
+*/
+			pline("毒は%sに影響を与えない．",
 				mon_nam(mdef));
 		    else {
 			if (!rn2(10)) {
+/*JP
 			    Your("poison was deadly...");
+*/
+			    Your("与えた毒は致死量だった．．．");
 			    tmp = mdef->mhp;
 			} else tmp += rn1(10,6);
 		    }
@@ -2104,11 +2518,17 @@
 		break;
 	    case AD_DRIN:
 		if (notonhead || !has_head(mdef->data)) {
+/*JP
 		    pline("%s doesn't seem harmed.", Monnam(mdef));
+*/
+		    pline("%sは傷ついたようには見えない．", Monnam(mdef));
 		    tmp = 0;
 		    if (!Unchanging && mdef->data == &mons[PM_GREEN_SLIME]) {
 			if (!Slimed) {
+/*JP
 			    You("suck in some slime and don't feel very well.");
+*/
+			    You("スライムを吸い取って，具合が悪くなった．");
 			    Slimed = 10L;
 			}
 		    }
@@ -2117,24 +2537,38 @@
 		if (m_slips_free(mdef, mattk)) break;
 
 		if ((mdef->misc_worn_check & W_ARMH) && rn2(8)) {
+#if 0 /*JP*/
 		    pline("%s helmet blocks your attack to %s head.",
 			  s_suffix(Monnam(mdef)), mhis(mdef));
+#else
+		    pline("%sの兜が頭への攻撃を防いだ．",
+			  Monnam(mdef));
+#endif
 		    break;
 		}
 
+/*JP
 		You("eat %s brain!", s_suffix(mon_nam(mdef)));
+*/
+		You("%sの脳を食べた！", mon_nam(mdef));
 		u.uconduct.food++;
 		if (touch_petrifies(mdef->data) && !Stone_resistance && !Stoned) {
 		    Stoned = 5;
 		    killer_format = KILLED_BY_AN;
+/*JP
 		    delayed_killer = mdef->data->mname;
+*/
+		    delayed_killer = jtrns_mon(mdef->data->mname);
 		}
 		if (!vegan(mdef->data))
 		    u.uconduct.unvegan++;
 		if (!vegetarian(mdef->data))
 		    violated_vegetarian();
 		if (mindless(mdef->data)) {
+/*JP
 		    pline("%s doesn't notice.", Monnam(mdef));
+*/
+		    pline("%sは気付いていない．", Monnam(mdef));
 		    break;
 		}
 		tmp += rnd(10);
@@ -2157,7 +2591,10 @@
 			if (m_slips_free(mdef, mattk)) {
 			    tmp = 0;
 			} else {
+/*JP
 			    You("swing yourself around %s!",
+*/
+			    You("%sに身体を絡みつかせた！",
 				  mon_nam(mdef));
 			    setustuck(mdef);
 			}
@@ -2165,14 +2602,23 @@
 			/* Monsters don't wear amulets of magical breathing */
 			if (is_pool(u.ux,u.uy) && !is_swimmer(mdef->data) &&
 			    !amphibious(mdef->data)) {
+/*JP
 			    You("drown %s...", mon_nam(mdef));
+*/
+			    You("%sを溺れさせた．．．", mon_nam(mdef));
 			    tmp = mdef->mhp;
 			} else if(mattk->aatyp == AT_HUGS)
+/*JP
 			    pline("%s is being crushed.", Monnam(mdef));
+*/
+			    pline("%sは押しつぶされた．", Monnam(mdef));
 		    } else {
 			tmp = 0;
 			if (flags.verbose)
+/*JP
 			    You("brush against %s %s.",
+*/
+			    You("%sの%sに触れた．",
 				s_suffix(mon_nam(mdef)),
 				mbodypart(mdef, LEG));
 		    }
@@ -2180,14 +2626,20 @@
 		break;
 	    case AD_PLYS:
 		if (!negated && mdef->mcanmove && !rn2(3) && tmp < mdef->mhp) {
+/*JP
 		    if (!Blind) pline("%s is frozen by you!", Monnam(mdef));
+*/
+		    if (!Blind) pline("%sはあなたのにらみで動けなくなった！", Monnam(mdef));
 		    mdef->mcanmove = 0;
 		    mdef->mfrozen = rnd(10);
 		}
 		break;
 	    case AD_TCKL:
 		if (!negated && mdef->mcanmove && !rn2(3) && tmp < mdef->mhp) {
+/*JP
 		    if (!Blind) You("mercilessly tickle %s!", mon_nam(mdef));
+*/
+		    if (!Blind) You("容赦なく%sをくすぐった！", mon_nam(mdef));
 		    mdef->mcanmove = 0;
 		    mdef->mfrozen = rnd(10);
 		}
@@ -2195,16 +2647,30 @@
 	    case AD_SLEE:
 		if (mattk->aatyp == AT_GAZE && mon_reflects(mdef, (char *)0)) {
 		    tmp = 0;
+#if 0 /*JP*/
 		    (void) mon_reflects(mdef, "But it reflects from %s %s!");
+#else
+		    (void) mon_reflects(mdef, "しかしそれは%sの%sで反射した！");
+#endif
 		    if (Sleep_resistance || Free_action) {
+#if 0 /*JP*/
 			pline("You yawn.");
+#else
+			pline("あなたはあくびした．");
+#endif
 			break;
 		    } else {
 			nomul(-rnd(10));
 			u.usleep = 1;
+#if 0 /*JP*/
 			nomovemsg = "You wake up.";
 			if (Blind)  You("are put to sleep!");
 			else You("are put to sleep by your reflected gaze!");
+#else
+			nomovemsg = "目を覚ました．";
+			if (Blind)  You("突然眠りにおちた！");
+			else You("あなたの反射してきた睨みによって突然眠り込んでしまった！");
+#endif
 			break;
 		    }
 		}
@@ -2213,7 +2679,10 @@
 			(mattk->aatyp != AT_WEAP || barehanded_hit) &&
 			sleep_monst(mdef, rnd(10), -1)) {
 		    if (!Blind)
+/*JP
 			pline("%s is put to sleep by you!", Monnam(mdef));
+*/
+			pline("%sは突然眠りにおちた！", Monnam(mdef));
 		    slept_monst(mdef);
 		}
 		else
@@ -2223,7 +2692,10 @@
 		if (negated) break;	/* physical damage only */
 		if (!rn2(4) && !flaming(mdef->data) &&
 				mdef->data != &mons[PM_GREEN_SLIME]) {
+/*JP
 		    You("turn %s into slime.", mon_nam(mdef));
+*/
+	    	    You("%sはスライムになった．", mon_nam(mdef));
 		    (void) newcham(mdef, &mons[PM_GREEN_SLIME], FALSE, !Blind);
 		    tmp = 0;
 		}
@@ -2238,19 +2710,29 @@
 
 		    mon_adjust_speed(mdef, -1, (struct obj *)0);
 		    if (mdef->mspeed != oldspeed && canseemon(mdef))
+/*JP
 			pline("%s slows down.", Monnam(mdef));
+*/
+			pline("%sはのろくなった．", Monnam(mdef));
 		}
 		break;
 	    case AD_CONF:
 		if (!mdef->mconf) {
 		    if (canseemon(mdef))
+/*JP
 			pline("%s looks confused.", Monnam(mdef));
+*/
+			pline("%sは混乱したようだ．", Monnam(mdef));
 		    mdef->mconf = 1;
 		}
 		else
 		{
 		    if (canseemon(mdef))
+#if 0 /*JP*/
 			pline("%s is getting more and more confused.",
+#else
+			pline("%sはますます混乱した．",
+#endif
 				Monnam(mdef));
 		    mdef->mconf++;
 		}
@@ -2270,8 +2752,13 @@
 			/* no corpse after system shock */
 			tmp = rnd(30);
 #endif
+#if 0 /*JP*/
 		    } else if (!mon_poly(mdef, TRUE,
 			    "%s undergoes a freakish metamorphosis!"))
+#else
+		    } else if (!mon_poly(mdef, TRUE,
+			    "%sは奇形な変化をしはじめた！"))
+#endif
 			/* prevent killing the monster again - 
 			 * could be killed in mon_poly */
 			tmp = 0;
@@ -2284,29 +2771,57 @@
 		    break;
 		}
 		if (mattk->aatyp == AT_GAZE) 
+#if 0 /*JP*/
 		    You("look directly at %s!", mon_nam(mdef));
+#else
+		    You("%sのいる方向を見た！", mon_nam(mdef));
+#endif
 		if ((mattk->aatyp == AT_GAZE) && (mon_reflects(mdef, (char *)0))) {
 		    /* WAC reflected gaze 
 		     * Oooh boy...that was a bad move :B 
 		     */
 		    tmp = 0;
 		    shieldeff(mdef->mx, mdef->my);
+#if 0 /*JP*/
 		    (void) mon_reflects(mdef, "But it reflects from %s %s!");
+#else
+		    (void) mon_reflects(mdef, "しかしそれは%sの%sで反射した！");
+#endif
 		    if (Antimagic) {
+#if 0 /*JP*/
 			You("shudder momentarily...");
+#else
+			You("一瞬震えた．．．");
+#endif
 			break;
 		    }
+#if 0 /*JP*/
 		    You("die...");
+#else
+		    You("死んだ．．．");
+#endif
 		    killer_format = KILLED_BY;
+#if 0 /*JP*/
 		    killer = "a reflected gaze of death";
+#else
+		    killer = "反射された死の睨みで";
+#endif
 		    done(DIED);
 		} else if (is_undead(mdef->data)) {
 		    /* Still does normal damage */
+#if 0 /*JP*/
 		    if (!Blind) pline("Something didn't work...");
+#else
+		    if (!Blind) pline("何かが動かなかった．．．");
+#endif
 		    break;
 		} else if (resists_magm(mdef)) {
 		    if (!Blind)
+#if 0 /*JP*/
 			pline("%s shudders momentarily...", Monnam(mdef));
+#else
+			pline("%sは一瞬震えた．．．", Monnam(mdef));
+#endif
 		} else {
 		    tmp = mdef->mhp;
 		}
@@ -2315,7 +2830,11 @@
 	    	if (resists_magm(mdef)) {
 		    if (!Blind) {
 			shieldeff(mdef->mx,mdef->my);
+#if 0 /*JP*/
 			pline("%s is unaffected.", Monnam(mdef));
+#else
+			pline("%sは影響を受けない．", Monnam(mdef));
+#endif
 		    }
 	    	} else {
 	    	    mon_drain_en(mdef, 
@@ -2327,7 +2846,11 @@
 		if (!mdef->iswiz && mdef->data != &mons[PM_MEDUSA] &&
 				!(mdef->data->mflags3 & M3_COVETOUS) &&
 				!(mdef->data->geno & G_UNIQ)) {
+#if 0 /*JP*/
 		    pline("You calm %s.", mon_nam(mdef));
+#else
+		    You("%sを落ちつかせた．", mon_nam(mdef));
+#endif
 		    mdef->mpeaceful = 1;
 		    mdef->mtame = 0;
 		    tmp = 0;
@@ -2339,7 +2862,11 @@
 
 	mdef->mstrategy &= ~STRAT_WAITFORU; /* in case player is very fast */
 	if (tmp && noeffect && !DEADMONSTER(mdef)) {
+#if 0 /*JP*/
 	     You("don't seem to harm %s.", mon_nam(mdef));
+#else
+	     You("%sにダメージを与えられなかったようだ．", mon_nam(mdef));
+#endif
 	     tmp = 0;
 	     return 1;
 	}
@@ -2353,10 +2880,16 @@
 
 	if((mdef->mhp -= tmp) < 1) {
 	    if (mdef->mtame && !cansee(mdef->mx,mdef->my)) {
+/*JP
 		You_feel("embarrassed for a moment.");
+*/
+		You("しばらく困惑した．");
 		if (tmp) xkilled(mdef, 0); /* !tmp but hp<1: already killed */
 	    } else if (!flags.verbose) {
+/*JP
 		You("destroy it!");
+*/
+		You("倒した！");
 		if (tmp) xkilled(mdef, 0);
 	    } else
 		if (tmp) killed(mdef);
@@ -2370,37 +2903,61 @@
 register struct monst *mdef;
 register struct attack *mattk;
 {
+#if 1 /*JP*/
+	char *jad = "";
+#endif
 	register int tmp = d((int)mattk->damn, (int)mattk->damd);
 
+/*JP
 	You("explode!");
+*/
+	You("爆発した！");
 	switch(mattk->adtyp) {
 	    boolean resistance; /* only for cold/fire/elec */
 
 	    case AD_BLND:
 		if (!resists_blnd(mdef)) {
+/*JP
 		    pline("%s is blinded by your flash of light!", Monnam(mdef));
+*/
+		    pline("%sはまばゆい光で目がくらんだ！", Monnam(mdef));
 		    mdef->mblinded = min((int)mdef->mblinded + tmp, 127);
 		    mdef->mcansee = 0;
 		}
 		break;
 	    case AD_HALU:
 		if (haseyes(mdef->data) && mdef->mcansee) {
+/*JP
 		    pline("%s is affected by your flash of light!",
+*/
+		    pline("%sはまばゆい光で影響をうけた！",
 			  Monnam(mdef));
 		    mdef->mconf = 1;
 		}
 		break;
 	    case AD_COLD:
+#if 1 /*JP*/
+		jad = "氷";
+#endif
 		resistance = resists_cold(mdef);
 		goto common;
 	    case AD_FIRE:
+#if 1 /*JP*/
+		jad = "炎";
+#endif
 		resistance = resists_fire(mdef);
 		goto common;
 	    case AD_ELEC:
+#if 1 /*JP*/
+		jad = "電撃";
+#endif
 		resistance = resists_elec(mdef);
 common:
 		if (!resistance) {
+/*JP
 		    pline("%s gets blasted!", Monnam(mdef));
+*/
+		    pline("%sは%sを浴びた！", Monnam(mdef), jad);
 		    mdef->mhp -= tmp;
 		    if (mdef->mhp <= 0) {
 			 killed(mdef);
@@ -2411,7 +2968,10 @@
 		    if (is_golem(mdef->data))
 			golemeffects(mdef, (int)mattk->adtyp, tmp);
 		    else
+/*JP
 			pline_The("blast doesn't seem to affect %s.",
+*/
+			pline("%sは%sに影響を与えなかったようだ．", jad,
 				mon_nam(mdef));
 		}
 		break;
@@ -2430,7 +2990,10 @@
 		tmp_at(DISP_ALWAYS, mon_to_glyph(&youmonst));
 		tmp_at(mdef->mx, mdef->my);
 	}
+/*JP
 	You("engulf %s!", mon_nam(mdef));
+*/
+	You("%sを飲み込んだ！", mon_nam(mdef));
 	delay_output();
 	delay_output();
 }
@@ -2477,12 +3040,22 @@
 		    case AD_DGST:
 			/* eating a Rider or its corpse is fatal */
 			if (is_rider(mdef->data)) {
+/*JP
 			 pline("Unfortunately, digesting any of it is fatal.");
+*/
+			 pline("残念ながら，それを食べるのは致命的な間違いだ．");
 			    end_engulf();
+#if 0 /*JP:T*/
 			    Sprintf(msgbuf, "unwisely tried to eat %s",
 				    mdef->data->mname);
 			    killer = msgbuf;
 			    killer_format = NO_KILLER_PREFIX;
+#else
+			    Sprintf(msgbuf, "愚かにも%sを食べて",
+				    jtrns_mon(mdef->data->mname));
+			    killer = msgbuf;
+			    killer_format = KILLED_BY;
+#endif
 			    done(DIED);
 			    return 0;		/* lifesaved */
 			}
@@ -2505,7 +3078,10 @@
 			newuhs(FALSE);
 			xkilled(mdef,2);
 			if (mdef->mhp > 0) { /* monster lifesaved */
+/*JP
 			    You("hurriedly regurgitate the sizzling in your %s.",
+*/
+			    You("%sの中でシューシューという音を立てているものを大急ぎで吐き戻した．",
 				body_part(STOMACH));
 			} else {
 			    tmp = 1 + (mdef->data->cwt >> 8);
@@ -2515,7 +3091,10 @@
 				/* nutrition only if there can be a corpse */
 				u.uhunger += (mdef->data->cnutrit+1) / 2;
 			    } else tmp = 0;
+/*JP
 			    Sprintf(msgbuf, "You totally digest %s.",
+*/
+			    Sprintf(msgbuf, "あなたは%sを完全に消化した．",
 					    mon_nam(mdef));
 			    if (tmp != 0) {
 				/* setting afternmv = end_engulf is tempting,
@@ -2523,14 +3102,22 @@
 				 * attacked (which uses his real location) or
 				 * if his See_invisible wears off
 				 */
+/*JP
 				You("digest %s.", mon_nam(mdef));
+*/
+				You("%sを消化している．", mon_nam(mdef));
 				if (Slow_digestion) tmp *= 2;
 				nomul(-tmp);
 				nomovemsg = msgbuf;
 			    } else pline("%s", msgbuf);
 			    if (mdef->data == &mons[PM_GREEN_SLIME]) {
+#if 0 /*JP*/
 				Sprintf(msgbuf, "%s isn't sitting well with you.",
 					The(mdef->data->mname));
+#else
+				Sprintf(msgbuf, "%sはあなたとうまく折り合いをつけられないようだ．",
+					jtrns_mon(mdef->data->mname));
+#endif
 				if (!Unchanging) {
 					Slimed = 5L;
 					flags.botl = 1;
@@ -2542,28 +3129,46 @@
 			return(2);
 		    case AD_PHYS:
 			if (youmonst.data == &mons[PM_FOG_CLOUD]) {
+/*JP
 			    pline("%s is laden with your moisture.",
+*/
+			    pline("%sはあなたの湿気に苦しめられている．",
 				  Monnam(mdef));
 			    if (amphibious(mdef->data) &&
 				!flaming(mdef->data)) {
 				dam = 0;
+/*JP
 				pline("%s seems unharmed.", Monnam(mdef));
+*/
+				pline("%sは傷ついていないようだ．", Monnam(mdef));
 			    }
 			} else
+/*JP
 			    pline("%s is pummeled with your debris!",
+*/
+			    pline("%sは瓦礫で痛めつけられた！",
 				  Monnam(mdef));
 			break;
 		    case AD_ACID:
+/*JP
 			pline("%s is covered with your goo!", Monnam(mdef));
+*/
+			pline("%sはねばつくもので覆われた！", Monnam(mdef));
 			if (resists_acid(mdef)) {
+/*JP
 			    pline("It seems harmless to %s.", mon_nam(mdef));
+*/
+			    pline("しかし，%sはなんともない．", mon_nam(mdef));
 			    dam = 0;
 			}
 			break;
 		    case AD_BLND:
 			if (can_blnd(&youmonst, mdef, mattk->aatyp, (struct obj *)0)) {
 			    if (mdef->mcansee)
+/*JP
 				pline("%s can't see in there!", Monnam(mdef));
+*/
+				pline("%sは目が見えなくなった！", mon_nam(mdef));
 			    mdef->mcansee = 0;
 			    dam += mdef->mblinded;
 			    if (dam > 127) dam = 127;
@@ -2573,9 +3178,15 @@
 			break;
 		    case AD_ELEC:
 			if (rn2(2)) {
+/*JP
 			    pline_The("air around %s crackles with electricity.", mon_nam(mdef));
+*/
+			    pline("%sの回りの空気は静電気でピリピリしている．", mon_nam(mdef));
 			    if (resists_elec(mdef)) {
+/*JP
 				pline("%s seems unhurt.", Monnam(mdef));
+*/
+				pline("しかし，%sは平気なようだ．", Monnam(mdef));
 				dam = 0;
 			    }
 			    golemeffects(mdef,(int)mattk->adtyp,dam);
@@ -2584,20 +3195,32 @@
 		    case AD_COLD:
 			if (rn2(2)) {
 			    if (resists_cold(mdef)) {
+/*JP
 				pline("%s seems mildly chilly.", Monnam(mdef));
+*/
+				pline("%sは冷えたようだ．", Monnam(mdef));
 				dam = 0;
 			    } else
+/*JP
 				pline("%s is freezing to death!",Monnam(mdef));
+*/
+				pline("%sは凍死しそうだ！",Monnam(mdef));
 			    golemeffects(mdef,(int)mattk->adtyp,dam);
 			} else dam = 0;
 			break;
 		    case AD_FIRE:
 			if (rn2(2)) {
 			    if (resists_fire(mdef)) {
+/*JP
 				pline("%s seems mildly hot.", Monnam(mdef));
+*/
+				pline("%sは暖かくなったようだ．", Monnam(mdef));
 				dam = 0;
 			    } else
+/*JP
 				pline("%s is burning to a crisp!",Monnam(mdef));
+*/
+				pline("%sは燃えてカラカラになった！",Monnam(mdef));
 			    golemeffects(mdef,(int)mattk->adtyp,dam);
 			} else dam = 0;
 			break;
@@ -2608,17 +3231,31 @@
 		    if (mdef->mhp <= 0)	/* not lifesaved */
 			return(2);
 		}
+#if 0 /*JP*/
 		You("%s %s!", is_animal(youmonst.data) ? "regurgitate"
 			: "expel", mon_nam(mdef));
+#else
+		You("%sを%s！", mon_nam(mdef),
+		    is_animal(youmonst.data) ? "吐き戻した" : "排出した");
+#endif
 		if (Slow_digestion || is_animal(youmonst.data)) {
+/*JP
 		    pline("Obviously, you didn't like %s taste.",
+*/
+		    pline("どうも%sの味は好きになれない．",
 			  s_suffix(mon_nam(mdef)));
 		}
 	    } else {
 		char kbuf[BUFSZ];
 
+/*JP
 		You("bite into %s.", mon_nam(mdef));
+*/
+		You("%sに噛みついた．", mon_nam(mdef));
+/*JP
 		Sprintf(kbuf, "swallowing %s whole", an(mdef->data->mname));
+*/
+		Sprintf(kbuf, "%sを完全に飲み込んで", a_monnam(mdef));
 		instapetrify(kbuf);
 	    }
 	}
@@ -2654,19 +3291,35 @@
 	}
 	
 	if (could_seduce(&youmonst, mdef, mattk)) {
+/*JP
 		You("pretend to be friendly to %s.", mon_nam(mdef));
+*/
+		You("%sに友好的なふりをした．", mon_nam(mdef));
 	} else if(canspotmon(mdef) && flags.verbose) {
 		if (nearmiss || !blocker) {
+/*JP
 		    You("%smiss %s.", (nearmiss ? "just " : ""),mon_nam(mdef));
+*/
+		    Your("%sへの攻撃は%s外れた．", mon_nam(mdef), (nearmiss ? "ぎりぎり" : ""));
 		} else {
         	    /* Blocker */
+#if 0 /*JP*/
         	    pline("%s %s %s your attack.", 
         		s_suffix(Monnam(mdef)),
         		aobjnam(blocker, (char *)0),
         		(rn2(2) ? "blocks" : "deflects"));    
+#else
+        	    pline("%sはあなたの攻撃を%sによって%s．", 
+        		s_suffix(Monnam(mdef)),
+        		aobjnam(blocker, (char *)0),
+        		(rn2(2) ? "防いだ" : "弾いた"));    
+#endif
 		}
 	} else {
+/*JP
 		You("%smiss it.", ((flags.verbose && nearmiss) ? "just " : ""));
+*/
+		Your("何者かへの攻撃は%s外れた．", ((flags.verbose && nearmiss) ? "ぎりぎり" : ""));
 	}
 	if (!mdef->msleeping && mdef->mcanmove)
 		wakeup(mdef);
@@ -2851,11 +3504,19 @@
 
 			    if (!u.uswallow &&
 				(compat=could_seduce(&youmonst, mon, mattk))) {
+#if 0 /*JP*/
 				You("%s %s %s.",
 				    mon->mcansee && haseyes(mon->data)
 				    ? "smile at" : "talk to",
 				    mon_nam(mon),
 				    compat == 2 ? "engagingly":"seductively");
+#else
+				You("%sへ%s%s．",
+				    mon_nam(mon),
+				    compat == 2 ? "魅力的に":"誘惑的に",
+				    mon->mcansee && haseyes(mon->data)
+				    ? "微笑みかけた" : "話しかけた");
+#endif
 				/* doesn't anger it; no wakeup() */
 				sum[i] = hit_notouch[damageum(mon, mattk)];
 				break;
@@ -2865,23 +3526,47 @@
 			    if (mon->data == &mons[PM_SHADE] &&
 					!(mattk->aatyp == AT_KICK &&
 					    uarmf && uarmf->blessed)) {
+/*JP
 				Your("attack passes harmlessly through %s.",
+*/
+				Your("攻撃は%sをすっと通りぬけた．",
 				    mon_nam(mon));
 				break;
 			    }
 			    if (mattk->aatyp == AT_KICK)
+/*JP
 				    You("kick %s.", mon_nam(mon));
+*/
+				    You("%sを蹴った．", mon_nam(mon));
 			    else if (mattk->aatyp == AT_BITE)
+/*JP
 				    You("bite %s.", mon_nam(mon));
+*/
+				    You("%sに噛みついた．", mon_nam(mon));
 			    else if (mattk->aatyp == AT_STNG)
+/*JP
 				    You("sting %s.", mon_nam(mon));
+*/
+				    You("%sを突きさした．", mon_nam(mon));
 			    else if (mattk->aatyp == AT_BUTT)
+/*JP
 				    You("butt %s.", mon_nam(mon));
+*/
+				    You("%sに頭突きをくらわした．", mon_nam(mon));
 			    else if (mattk->aatyp == AT_TUCH)
+/*JP
 				    You("touch %s.", mon_nam(mon));
+*/
+				    You("%sに触れた．", mon_nam(mon));
 			    else if (mattk->aatyp == AT_TENT)
+/*JP
 				    Your("tentacles suck %s.", mon_nam(mon));
+*/
+				    Your("触手が%sの体液を吸いとった．", mon_nam(mon));
+/*JP
 			    else You("hit %s.", mon_nam(mon));
+*/
+			    else Your("%sへの攻撃は命中した．", mon_nam(mon));
 			    sum[i] = hit_touch[damageum(mon, mattk)];
 			} else
 			    missum(mon, tmp, dieroll, mattk);
@@ -2894,17 +3579,30 @@
 			dhit = 1;
 			wakeup(mon);
 			if (mon->data == &mons[PM_SHADE])
+/*JP
 			    Your("hug passes harmlessly through %s.",
+*/
+			    You("%sを羽交い絞めにしようとしたが失敗した．",
 				mon_nam(mon));
 			else if (!sticks(mon->data) && !u.uswallow) {
 			    if (mon==u.ustuck) {
+#if 0 /*JP*/
 				pline("%s is being %s.", Monnam(mon),
 				    u.umonnum==PM_ROPE_GOLEM ?
 				    breathless(mon->data) ? "strangled" :
 				    "choked" : "crushed");
+#else
+				pline("%sは%s．", Monnam(mon),
+				    u.umonnum==PM_ROPE_GOLEM ?
+				    breathless(mon->data) ? "巻きつかれている" :
+				    "首を絞められている" : "押しつぶされている");
+#endif
 				sum[i] = hit_touch[damageum(mon, mattk)];
 			    } else if(i >= 2 && sum[i-1] && sum[i-2]) {
+/*JP
 				You("grab %s!", mon_nam(mon));
+*/
+				You("%sをつかまえた！", mon_nam(mon));
 				setustuck(mon);
 				sum[i] = hit_touch[damageum(mon, mattk)];
 			    }
@@ -2921,7 +3619,10 @@
 			if((dhit = (tmp > (dieroll = rnd(20+i))))) {
 				wakeup(mon);
 				if (mon->data == &mons[PM_SHADE])
+/*JP
 				    Your("attempt to surround %s is harmless.",
+*/
+				    You("%sを飲みこもうとしたが失敗した．",
 					mon_nam(mon));
 				else {
 				    sum[i]= hit_touch[gulpum(mon,mattk)];
@@ -2930,8 +3631,13 @@
 						mon->data->mlet == S_MUMMY) &&
 					    rn2(5) &&
 					    !Sick_resistance) {
+#if 0 /*JP*/
 					You_feel("%ssick.",
 					    (Sick) ? "very " : "");
+#else
+					You_feel("%s気分が悪い．",
+					    (Sick) ? "とても" : "");
+#endif
 					mdamageu(mon, rnd(8));
 				    }
 				}
@@ -2964,25 +3670,51 @@
 				break;
 			}
 			if (!canseemon(mon) && rn2(3)) {
+#if 0 /*JP*/
 				You("gaze around,  but miss!");
+#else
+				You("あたりを睨みつけたが外した！");
+#endif
 				dhit = 0;
 				break;
 			}
+#if 0 /*JP*/
 			You("gaze at %s...", mon_nam(mon));
+#else
+			You("%sを睨みつけた．．．", mon_nam(mon));
+#endif
 
 			if ((mon->data==&mons[PM_MEDUSA]) && !mon->mcan) {
+#if 0 /*JP*/
 				pline("Gazing at the awake Medusa is not a very good idea.");
+#else
+				pline("メデューサを睨むのは全く良くない考えだ．");
+#endif
 				/* as if gazing at a sleeping anything is fruitful... */
+#if 0 /*JP*/
 				You("turn to stone...");
+#else
+				You("石になった．．．");
+#endif
 				killer_format = KILLED_BY;
+#if 0 /*JP*/
 				killer = "deliberately gazing at Medusa's hideous countenance";
+#else
+				killer = "恐ろしいメデューサの顔を故意に見つめて";
+#endif
 				done(STONING);
 			} else if (!mon->mcansee || mon->msleeping) {
+/*JP
 				pline("But nothing happens.");
+*/
+				pline("何も起こらなかった．");
 				dhit = 0;
 				break;
 			} else if (Invis && !perceives(mon->data)) {
+/*JP
 				pline("%s seems not to notice your gaze.", Monnam(mon));
+*/
+				pline("%sはあなたの睨みに気付いていないようだ．", Monnam(mon));
 				break;
 			}
 			sum[i] = hit_notouch[damageum(mon, mattk)];
@@ -3053,8 +3785,14 @@
 
 	  case AD_ACID:
 	    if(mhit && rn2(2)) {
+/*JP
 		if (Blind || !flags.verbose) You("are splashed!");
+*/
+		if (Blind || !flags.verbose) You("何かを浴びせられた！");
+/*JP
 		else	You("are splashed by %s acid!",
+*/
+		else	You("%sの酸を浴びせられた！", 
 			                s_suffix(mon_nam(mon)));
 
 		if (!Acid_resistance)
@@ -3090,7 +3828,10 @@
 		if (!Stone_resistance &&
 			    !(poly_when_stoned(youmonst.data) &&
 				polymon(PM_STONE_GOLEM))) {
+/*JP
 			You("turn to stone...");
+*/
+			You("石になった．．．");
 			done_in_by(mon);
 			return 2;
 		}
@@ -3121,9 +3862,15 @@
 	    /* wrath of gods for attacking Oracle */
 	    if(Antimagic) {
 		shieldeff(u.ux, u.uy);
+/*JP
 		pline("A hail of magic missiles narrowly misses you!");
+*/
+		pline("魔法の矢の雨をなんとかかわした！");
 	    } else {
+/*JP
 		You("are hit by magic missiles appearing from thin air!");
+*/
+		pline("突如空中に現われた魔法の矢が命中した！");
 		mdamageu(mon, tmp);
 	    }
 	    break;
@@ -3139,10 +3886,19 @@
 
 	      case AD_DRST:
 	       if (!Strangled && !Breathless) {
+#if 0 /*JP*/
 		 pline("You inhale a cloud of spores!");
 		 poisoned("spores", A_STR, "spore cloud", 30);
+#else
+		 pline("あなたは胞子の雲を吸い込んでしまった！");
+		 poisoned("胞子", A_STR, "胞子の雲", 30);
+#endif
 	       } else {
+#if 0 /*JP*/
 		 pline("A cloud of spores surrounds you!");
+#else
+		 pline("胞子の雲はあなたを取り巻いた！");
+#endif
 	       }
 	      break;
 	      case AD_PLYS:
@@ -3151,26 +3907,46 @@
 			break;
 		    }
 		    if(mon->mcansee) {
+/*JP
 			if (ureflects("%s gaze is reflected by your %s.",
+*/
+		    if (ureflects("%sのにらみは%sによって反射された．",
 				    s_suffix(Monnam(mon))))
 			    ;
 			else if (Free_action)
+/*JP
 			    You("momentarily stiffen under %s gaze!",
+*/
+			    You("%sのにらみで一瞬硬直した！",
 				    s_suffix(mon_nam(mon)));
 			else {
+/*JP
 			    You("are frozen by %s gaze!",
+*/
+			    You("%sのにらみで動けなくなった！",
 				  s_suffix(mon_nam(mon)));
 			    nomul((ACURR(A_WIS) > 12 || rn2(4)) ? -tmp : -127);
 			}
 		    } else {
+#if 0 /*JP*/
 			pline("%s cannot defend itself.",
 				Adjmonnam(mon,"blind"));
+#else
+			pline("%sは防御できない．",
+				Adjmonnam(mon,"目の見えない"));
+#endif
 			if(!rn2(500)) change_luck(-1);
 		    }
 		} else if (Free_action) {
+/*JP
 		    You("momentarily stiffen.");
+*/
+		    You("一瞬硬直した．");
 		} else { /* gelatinous cube */
+/*JP
 		    You("are frozen by %s!", mon_nam(mon));
+*/
+		    You("%sによって動けなくなった！", mon_nam(mon));
 	    	    nomovemsg = 0;	/* default: "you can move again" */
 		    nomul(-tmp);
 		    exercise(A_DEX, FALSE);
@@ -3180,11 +3956,17 @@
 		if(monnear(mon, u.ux, u.uy)) {
 		    if(Cold_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			You_feel("a mild chill.");
+*/
+			You("寒さを感じた．");
 			ugolemeffects(AD_COLD, tmp);
 			break;
 		    }
+/*JP
 		    You("are suddenly very cold!");
+*/
+		    You("突然，猛烈に寒くなった！");
 		    mdamageu(mon, tmp);
 		/* monster gets stronger with your heat! */
 		    mon->mhp += tmp / 2;
@@ -3202,22 +3984,34 @@
 		if(monnear(mon, u.ux, u.uy)) {
 		    if(Fire_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			You_feel("mildly warm.");
+*/
+			You("暖かさを感じた．");
 			ugolemeffects(AD_FIRE, tmp);
 			break;
 		    }
+/*JP
 		    You("are suddenly very hot!");
+*/
+		    You("突然，猛烈に熱くなった！");
 		    mdamageu(mon, tmp);
 		}
 		break;
 	      case AD_ELEC:
 		if(Shock_resistance) {
 		    shieldeff(u.ux, u.uy);
+/*JP
 		    You_feel("a mild tingle.");
+*/
+		    You("ピリピリと痺れを感じた．");
 		    ugolemeffects(AD_ELEC, tmp);
 		    break;
 		}
+/*JP
 		You("are jolted with electricity!");
+*/
+		You("電気ショックをうけた！");
 		mdamageu(mon, tmp);
 		break;
 	      case AD_ENCH:	/* KMH -- remove enchantment (disenchanter) */
@@ -3292,7 +4086,10 @@
 	    if (!mon->mcan) {
 		if (drain_item(obj) && carried(obj) &&
 		    (obj->known || obj->oclass == ARMOR_CLASS)) {
+/*JP
 		    Your("%s less effective.", aobjnam(obj, "seem"));
+*/
+		    Your("%sから魔力が消えた．", xname(obj));
 	    	}
 	    	break;
 	    }
@@ -3308,9 +4105,15 @@
 stumble_onto_mimic(mtmp)
 struct monst *mtmp;
 {
+#if 0 /*JP*/
 	const char *fmt = "Wait!  That's %s!",
 		   *generic = "a monster",
 		   *what = 0;
+#else
+	const char *fmt = "ちょっとまった！%sだ！",
+		   *generic = "怪物",
+		   *what = 0;
+#endif
 
 	if(!u.ustuck && !mtmp->mflee && dmgtype(mtmp->data,AD_STCK))
 	    setustuck(mtmp);
@@ -3324,19 +4127,31 @@
 #ifdef DISPLAY_LAYERS
 	    if (levl[u.ux+u.dx][u.uy+u.dy].mem_bg == S_hcdoor ||
 		    levl[u.ux+u.dx][u.uy+u.dy].mem_bg == S_vcdoor)
+/*JP
 		fmt = "The door actually was %s!";
+*/
+		fmt = "扉は実際には%sだった！";
 	    else if (levl[u.ux+u.dx][u.uy+u.dy].mem_obj == GOLD_PIECE)
+/*JP
 		fmt = "That gold was %s!";
+*/
+		fmt = "金塊は%sだった！";
 #else
 	    int glyph = levl[u.ux+u.dx][u.uy+u.dy].glyph;
 
 	    if (glyph_is_cmap(glyph) &&
 		    (glyph_to_cmap(glyph) == S_hcdoor ||
 		     glyph_to_cmap(glyph) == S_vcdoor))
+/*JP
 		fmt = "The door actually was %s!";
+*/
+		fmt = "扉は実際には%sだった！";
 	    else if (glyph_is_object(glyph) &&
 		    glyph_to_obj(glyph) == GOLD_PIECE)
+/*JP
 		fmt = "That gold was %s!";
+*/
+		fmt = "金塊は%sだった！";
 #endif
 
 	    /* cloned Wiz starts out mimicking some other monster and
@@ -3360,14 +4175,26 @@
 	if (!u.umconf || mon->mconf) return;
 	if (u.umconf == 1) {
 		if (Blind)
+/*JP
 			Your("%s stop tingling.", hands);
+*/
+			Your("%sの痺れがとれた．", hands);
 		else
+/*JP
 			Your("%s stop glowing %s.", hands, hcolor(NH_RED));
+*/
+			Your("%sの%s輝きはなくなった．", hands, hcolor(NH_RED));
 	} else {
 		if (Blind)
+/*JP
 			pline_The("tingling in your %s lessens.", hands);
+*/
+			pline("%sの痺れがとれてきた．",hands);
 		else
+/*JP
 			Your("%s no longer glow so brightly %s.", hands,
+*/
+			Your("%sの%s輝きがなくなってきた．",hands,
 				hcolor(NH_RED));
 	}
 	u.umconf--;
@@ -3383,22 +4210,33 @@
 	if (mtmp->msleeping) {
 	    mtmp->msleeping = 0;
 	    if (useeit) {
+/*JP
 		pline_The("flash awakens %s.", mon_nam(mtmp));
+*/
+		pline("閃光で%sが目を覚ました．", mon_nam(mtmp));
 		res = 1;
 	    }
 	} else if (mtmp->data->mlet != S_LIGHT) {
 	    if (!resists_blnd(mtmp)) {
 		tmp = dist2(otmp->ox, otmp->oy, mtmp->mx, mtmp->my);
 		if (useeit) {
+/*JP
 		    pline("%s is blinded by the flash!", Monnam(mtmp));
+*/
+		    pline("%sは閃光で目が見えなくなった！", Monnam(mtmp));
 		    res = 1;
 		}
 		if (mtmp->data == &mons[PM_GREMLIN]) {
 		    /* Rule #1: Keep them out of the light. */
 		    amt = otmp->otyp == WAN_LIGHT ? d(1 + otmp->spe, 4) :
 		          rn2(min(mtmp->mhp,4));
+#if 0 /*JP*/
 		    pline("%s %s!", Monnam(mtmp), amt > mtmp->mhp / 2 ?
 			  "wails in agony" : "cries out in pain");
+#else
+		    pline("%sは%s！", Monnam(mtmp), amt > mtmp->mhp / 2 ?
+			  "苦痛の声をあげた" : "激痛で叫んだ");
+#endif
 		    if ((mtmp->mhp -= amt) <= 0) {
 			if (flags.mon_moving)
 			    monkilled(mtmp, (char *)0, AD_BLND);
diff -aurN slashem-0.0.7E6F2/src/vault.c jslashem-0.0.7E6F2-J0.0.8/src/vault.c
--- slashem-0.0.7E6F2/src/vault.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/vault.c	2004-08-15 19:06:48.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "vault.h"
 
@@ -53,8 +61,14 @@
 		EGD(grd)->fcbeg++;
 	}
 	if(grd->mhp <= 0) {
+/*JP
 	    pline_The("corridor disappears.");
+*/
+	    pline("通路は消えた．");
+/*JP
 	    if(IS_ROCK(levl[u.ux][u.uy].typ)) You("are encased in rock.");
+*/
+	    if(IS_ROCK(levl[u.ux][u.uy].typ)) You("石につつまれた．");
 	}
 	return(TRUE);
 }
@@ -236,17 +250,30 @@
 
 	reset_faint();			/* if fainted - wake up */
 	if (canspotmon(guard))
+#if 0 /*JP*/
 	    pline("Suddenly one of the Vault's %s enters!",
 		  makeplural(g_monnam(guard)));
+#else
+	    pline("突然，倉庫の番兵が入ってきた！");
+#endif
 	else
+/*JP
 	    pline("Someone else has entered the Vault.");
+*/
+	    pline("誰かが倉庫に入ってきた．");
 	newsym(guard->mx,guard->my);
 	if (youmonst.m_ap_type == M_AP_OBJECT || u.uundetected) {
 	    if (youmonst.m_ap_type == M_AP_OBJECT &&
 			youmonst.mappearance != GOLD_PIECE)
+/*JP
 	    	verbalize("Hey! Who left that %s in here?", mimic_obj_name(&youmonst));
+*/
+	    	verbalize("おい！だれがこの%sをここに置いて行ったんだ？", mimic_obj_name(&youmonst));
 	    /* You're mimicking some object or you're hidden. */
+/*JP
 	    pline("Puzzled, %s turns around and leaves.", mhe(guard));
+*/
+	    pline("%sは困惑しながら，向き直って去っていった．", mhe(guard));
 	    mongone(guard);
 	    return;
 	}
@@ -254,7 +281,10 @@
 	    /* [we ought to record whether this this message has already
 	       been given in order to vary it upon repeat visits, but
 	       discarding the monster and its egd data renders that hard] */
+/*JP
 	    verbalize("I'll be back when you're ready to speak to me!");
+*/
+	    verbalize("話せるようになったら戻ってきてやる！");
 	    mongone(guard);
 	    return;
 	}
@@ -263,9 +293,12 @@
 	if (multi > 0) { nomul(0); unmul((char *)0); }
 	trycount = 5;
 	do {
+/*JP
 	    getlin("\"Hello stranger, who are you?\" -", buf);
+*/
+	    getlin("「見ない顔だな，おまえは誰だ？」-", buf);
 	    (void) mungspaces(buf);
-	} while (!letter(buf[0]) && --trycount > 0);
+	} while (!letter(buf[0]) && !is_kanji(buf[0]) && --trycount > 0);
 
 	if (u.ualign.type == A_LAWFUL &&
 	    /* ignore trailing text, in case player includes character's rank */
@@ -273,17 +306,31 @@
 		adjalign(-1);		/* Liar! */
 	}
 
+#if 0 /*JP*/
 	if (!strcmpi(buf, "Croesus") || !strcmpi(buf, "Kroisos")
+#else
+	if (!strcmpi(buf, "Croesus") || !strcmpi(buf, "Kroisos") || !strcmp(buf, "クロイソス")
+#endif
 #ifdef TOURIST
+#if 0 /*JP*/
 		|| !strcmpi(buf, "Creosote")
+#else
+		|| !strcmpi(buf, "Creosote") || !strcmp(buf, "クレオソート")
+#endif
 #endif
 	    ) {
 	    if (!mvitals[PM_CROESUS].died) {
+/*JP
 		verbalize("Oh, yes, of course.  Sorry to have disturbed you.");
+*/
+		verbalize("いや，こりゃ，えーと，お騒がせした．");
 		mongone(guard);
 	    } else {
 		setmangry(guard);
+/*JP
 		verbalize("Back from the dead, are you?  I'll remedy that!");
+*/
+		verbalize("ほう！死の世界から戻ってきたのか？うそなら上手につけ！");
 		/* don't want guard to waste next turn wielding a weapon */
 		if (!MON_WEP(guard)) {
 		    guard->weapon_check = NEED_HTH_WEAPON;
@@ -292,25 +339,52 @@
 	    }
 	    return;
 	}
+/*JP
 	verbalize("I don't know you.");
+*/
+	verbalize("知らんな．");
 #ifndef GOLDOBJ
 	if (!u.ugold && !hidden_gold())
+/*JP
 	    verbalize("Please follow me.");
+*/
+	    verbalize("私の後についてきなさい．");
 	else {
 	    if (!u.ugold)
+/*JP
 		verbalize("You have hidden gold.");
+*/
+		verbalize("まだ金貨を隠してるな．");
+/*JP
 	    verbalize("Most likely all your gold was stolen from this vault.");
+*/
+	    verbalize("倉庫から盗んだ金貨があるだろう．");
+/*JP
 	    verbalize("Please drop that gold and follow me.");
+*/
+	    verbalize("それをそっくり戻してから，私の後についてきなさい．");
 	}
 #else
         umoney = money_cnt(invent);
 	if (!umoney && !hidden_gold())
+/*JP
 	    verbalize("Please follow me.");
+*/
+	    verbalize("私の後についてきなさい．");
 	else {
 	    if (!umoney)
+/*JP
 		verbalize("You have hidden money.");
+*/
+		verbalize("まだお金を隠してるな．");
+/*JP
 	    verbalize("Most likely all your money was stolen from this vault.");
+*/
+	    verbalize("倉庫から盗んだお金があるだろう．");
+/*JP
 	    verbalize("Please drop that money and follow me.");
+*/
+	    verbalize("それをそっくり戻してから，私の後についてきなさい．");
 	}
 #endif
 	EGD(guard)->gdx = gx;
@@ -421,12 +495,24 @@
 
 	if(movedgold || fixed) {
 	    if(in_fcorridor(grd, grd->mx, grd->my) || cansee(grd->mx, grd->my))
+/*JP
 		pline_The("%s whispers an incantation.", g_monnam(grd));
+*/
+		pline("%sは呪文をささやいた．", g_monnam(grd));
+/*JP
 	    else You_hear("a distant chant.");
+*/
+	    else You_hear("遠方での呪文を聞いた．");
 	    if(movedgold)
+/*JP
 		pline("A mysterious force moves the gold into the vault.");
+*/
+		pline("神秘的な力が金貨を倉庫へ運んだ．");
 	    if(fixed)
+/*JP
 		pline_The("damaged vault's walls are magically restored!");
+*/
+		pline("傷ついた倉庫の壁は魔法で復元された！");
 	}
 }
 
@@ -485,21 +571,37 @@
 	    if(u_in_vault &&
 			(u_carry_gold || um_dist(grd->mx, grd->my, 1))) {
 		if(egrd->warncnt == 3)
+/*JP
 			verbalize("I repeat, %sfollow me!",
+*/
+			verbalize("繰り返す！%s私についてこい！",
 				u_carry_gold ? (
 #ifndef GOLDOBJ
 					  !u.ugold ?
+#if 0 /*JP*/
 					  "drop that hidden gold and " :
 					  "drop that gold and ") : "");
 #else
+					  "隠し持ってる金貨を置いて" :
+					  "金貨を置いて") : "");
+#endif
+#else
 					  !umoney ?
+#if 0 /*JP*/
 					  "drop that hidden money and " :
 					  "drop that money and ") : "");
+#else
+					  "隠し持ってるお金を置いて" :
+					  "お金を置いて") : "");
+#endif
 #endif
 		if(egrd->warncnt == 7) {
 			m = grd->mx;
 			n = grd->my;
+/*JP
 			verbalize("You've been warned, knave!");
+*/
+			verbalize("警告はしたぞ，悪党め！");
 			mnexto(grd);
 			levl[m][n].typ = egrd->fakecorr[0].ftyp;
 			newsym(m,n);
@@ -521,15 +623,26 @@
 		    grd->mpeaceful = 0;
 letknow:
 		    if (!cansee(grd->mx, grd->my) || !mon_visible(grd))
+/*JP
 			You_hear("the shrill sound of a guard's whistle.");
+*/
+			You_hear("番兵の鋭い笛の音を聞いた．");
 		    else
 			You(um_dist(grd->mx, grd->my, 2) ?
+#if 0 /*JP*/
 			    "see an angry %s approaching." :
 			    "are confronted by an angry %s.",
+#else
+			    "怒った%sが近づいてくるのを見た．" :
+			    "怒った%sと対峙した．",
+#endif
 			    g_monnam(grd));
 		    return(-1);
 		} else {
+/*JP
 		    verbalize("Well, begone.");
+*/
+		    verbalize("立ち去れ．");
 		    wallify_vault(grd);
 		    egrd->gddone = 1;
 		    goto cleanup;
@@ -542,7 +655,10 @@
 		  !egrd->gddone && !in_fcorridor(grd, u.ux, u.uy) &&
 		  levl[egrd->fakecorr[0].fx][egrd->fakecorr[0].fy].typ
 				 == egrd->fakecorr[0].ftyp) {
+/*JP
 		pline_The("%s, confused, disappears.", g_monnam(grd));
+*/
+		pline("%sは混乱し，消えた．", g_monnam(grd));
 		disappear_msg_seen = TRUE;
 		goto cleanup;
 	    }
@@ -556,10 +672,16 @@
 		}
 		if(egrd->warncnt < 6) {
 			egrd->warncnt = 6;
+/*JP
 			verbalize("Drop all your gold, scoundrel!");
+*/
+			verbalize("金を全部置いてゆけ，ならずもの！");
 			return(0);
 		} else {
+/*JP
 			verbalize("So be it, rogue!");
+*/
+			verbalize("盗人め！");
 			grd->mpeaceful = 0;
 			return(-1);
 		}
@@ -590,7 +712,10 @@
 		} else {
 		    /* just for insurance... */
 		    if (MON_AT(m, n) && m != grd->mx && n != grd->my) {
+/*JP
 			verbalize("Out of my way, scum!");
+*/
+			verbalize("目の前から消えろ，クソったれ！");
 			(void) rloc(m_at(m, n), FALSE);
 		    }
 		    remove_monster(grd->mx, grd->my);
@@ -599,8 +724,13 @@
 		    mpickgold(grd);	/* does a newsym */
 		}
 		if(cansee(m,n))
+#if 0 /*JP*/
 		    pline("%s%s picks up the gold.", Monnam(grd),
 				grd->mpeaceful ? " calms down and" : "");
+#else
+		    pline("%sは%s金貨を拾った．", Monnam(grd),
+				grd->mpeaceful ? "怒りを静め" : "");
+#endif
 		if(x != grd->mx || y != grd->my) {
 		    remove_monster(grd->mx, grd->my);
 		    newsym(grd->mx, grd->my);
@@ -614,7 +744,10 @@
 		}
 	}
 	if(um_dist(grd->mx, grd->my, 1) || egrd->gddone) {
+/*JP
 		if(!egrd->gddone && !rn2(10)) verbalize("Move along!");
+*/
+		if(!egrd->gddone && !rn2(10)) verbalize("離れるな！");
 		restfakecorr(grd);
 		return(0);	/* didn't move */
 	}
@@ -723,7 +856,10 @@
 		if(!semi_dead && (in_fcorridor(grd, u.ux, u.uy) ||
 				     cansee(x, y))) {
 		    if (!disappear_msg_seen && see_guard)
+/*JP
 			pline("Suddenly, the %s disappears.", g_monnam(grd));
+*/
+			pline("突然，%sは消えた．", g_monnam(grd));
 		    return(1);
 		}
 		return(-2);
@@ -758,7 +894,10 @@
 #endif
 
 	if (u.uinvault) {
+/*JP
 	    Your("%ld %s goes into the Magic Memory Vault.",
+*/
+	    Your("%ld%sは魔法のメモリー倉庫に入った．",
 #ifndef GOLDOBJ
 		u.ugold,
 		currency(u.ugold));
@@ -774,12 +913,20 @@
 		return;
 	    }
 	    mnexto(grd);
+/*JP
 	    pline("%s remits your gold to the vault.", Monnam(grd));
+*/
+	    pline("%sはあなたの金貨を倉庫に送った．", Monnam(grd));
 	    gx = rooms[EGD(grd)->vroom].lx + rn2(2);
 	    gy = rooms[EGD(grd)->vroom].ly + rn2(2);
 	    Sprintf(buf,
+#if 0 /*JP*/
 		"To Croesus: here's the gold recovered from %s the %s.",
 		plname, mons[u.umonster].mname);
+#else
+		"クロイソスへ: ここに%sの%sから取り戻した金貨を送る．",
+		jtrns_mon(mons[u.umonster].mname), plname );
+#endif
 	    make_grave(gx, gy, buf);
 	}
 #ifndef GOLDOBJ
diff -aurN slashem-0.0.7E6F2/src/version.c jslashem-0.0.7E6F2-J0.0.8/src/version.c
--- slashem-0.0.7E6F2/src/version.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/version.c	2004-06-27 16:55:28.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "date.h"
 /*
@@ -10,8 +18,10 @@
  */
 #ifdef SHORT_FILENAMES
 #include "patchlev.h"
+#include "../japanese/jpatchle.h"
 #else
 #include "patchlevel.h"
+#include "../japanese/jpatchlevel.h"
 #endif
 
 /* #define BETA_INFO "" */	/* "[ beta n]" */
@@ -39,12 +49,28 @@
 	return buf;
 }
 
+/* fill and return the given buffer with the long nethack version string */
+char *
+getjversionstring(buf)
+char *buf;
+{
+	Strcpy(buf, JVERSION_ID);
+#if defined(BETA) && defined(BETA_INFO)
+	Sprintf(eos(buf), " %s", BETA_INFO);
+#endif
+#if defined(RUNTIME_PORT_ID)
+	append_port_id(buf);
+#endif
+	return buf;
+}
+
 int
 doversion()
 {
 	char buf[BUFSZ];
 
 	pline("%s", getversionstring(buf));
+	pline("%s", getjversionstring(buf));
 	return 0;
 }
 
diff -aurN slashem-0.0.7E6F2/src/weapon.c jslashem-0.0.7E6F2-J0.0.8/src/weapon.c
--- slashem-0.0.7E6F2/src/weapon.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/weapon.c	2004-07-11 21:46:48.000000000 +0900
@@ -7,6 +7,16 @@
  *	bonuses for any given weapon used, as well as weapons selection
  *	code for monsters.
  */
+
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	changing point is marked `JP' (94/6/7)
+**	For 3.4.0, Copyright (c) Kentaro Shirakata, 2002
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /* categories whose names don't come from OBJ_NAME(objects[type]) */
@@ -106,6 +116,7 @@
 give_may_advance_msg(skill)
 int skill;
 {
+#if 0 /*JP*/
 	You_feel("more %s in your %sskills.",
 	    !P_RESTRICTED(skill) ? "confident" : "comfortable",
 		skill == P_NONE ?
@@ -117,6 +128,14 @@
             skill <= P_LAST_H_TO_H ?
 	            "fighting ":
 	            "");
+#else
+	You("%sスキルを高める%s．",
+		(skill == P_NONE)        ? "" :
+		(skill <= P_LAST_WEAPON) ? "武器の" :
+		(skill <= P_LAST_SPELL)  ? "魔法の" :
+		(skill <= P_LAST_H_TO_H) ? "戦いの" : "",
+	    !P_RESTRICTED(skill) ? "自信が湧いてきた" : "確信が持てた");
+#endif
 }
 
 #endif	/* OVLB */
@@ -136,9 +155,16 @@
 
 #ifdef OVLB
 
+#if 0 /*JP*/
 #define P_NAME(type) (skill_names_indices[type] > 0 ? \
 		      OBJ_NAME(objects[skill_names_indices[type]]) : \
 			odd_skill_names[-skill_names_indices[type]])
+#else
+#define PP_NAME(type) (skill_names_indices[type] > 0 ? \
+		      OBJ_NAME(objects[skill_names_indices[type]]) : \
+			odd_skill_names[-skill_names_indices[type]])
+#define P_NAME(type)	jtrns_obj('K', PP_NAME(type))
+#endif
 
 static NEARDATA const char kebabable[] = {
 	S_XORN, S_DRAGON, S_JABBERWOCK, S_NAGA, S_GIANT, '\0'
@@ -697,12 +723,18 @@
 		mon->weapon_check = NO_WEAPON_WANTED;
 		obj_extract_self(obj);
 		if (cansee(mon->mx, mon->my)) {
+/*JP
 		    pline("%s drops %s.", Monnam(mon),
+*/
+			pline("%sは%sを置いた．", Monnam(mon),
 			  distant_name(obj, doname));
 		    newsym(mon->mx, mon->my);
 		}
 		/* might be dropping object into water or lava */
+/*JP
 		if (!flooreffects(obj, mon->mx, mon->my, "drop")) {
+*/
+		if (!flooreffects(obj, mon->mx, mon->my, "落ちる")) {
 		    if (polyspot) bypass_obj(obj);
 		    place_object(obj, mon->mx, mon->my);
 		    stackobj(obj);
@@ -791,26 +823,50 @@
 		 */
 		if (mw_tmp && mw_tmp->cursed && mw_tmp->otyp != CORPSE) {
 		    if (canseemon(mon)) {
+#if 0 /*JP*/
 			char welded_buf[BUFSZ];
+#endif
 			const char *mon_hand = mbodypart(mon, HAND);
 
 			if (bimanual(mw_tmp)) mon_hand = makeplural(mon_hand);
+#if 0 /*JP*/
 			Sprintf(welded_buf, "%s welded to %s %s",
 				otense(mw_tmp, "are"),
 				mhis(mon), mon_hand);
+#endif
 
 			if (obj->otyp == PICK_AXE) {
+#if 0 /*JP*/
 			    pline("Since %s weapon%s %s,",
 				  s_suffix(mon_nam(mon)),
 				  plur(mw_tmp->quan), welded_buf);
+#else
+			    pline("%sは武器を手にしようとしたが，",
+				  mon_nam(mon));
+#endif
+#if 0 /*JP*/
 			    pline("%s cannot wield that %s.",
 				mon_nam(mon), xname(obj));
+#else
+			    pline("%sは%sを装備できなかった．",
+				mon_nam(mon), xname(obj));
+#endif
 			} else {
+#if 0 /*JP*/
 			    pline("%s tries to wield %s.", Monnam(mon),
 				doname(obj));
+#else
+			    pline("%sは%sを装備しようとした．", Monnam(mon),
+				doname(obj));
+#endif
+#if 0 /*JP*/
 			    pline("%s %s %s!",
 				  s_suffix(Monnam(mon)),
 				  xname(mw_tmp), welded_buf);
+#else
+			    pline("%sは%sを手にした！",
+				  Monnam(mon), xname(mw_tmp));
+#endif
 			}
 			mw_tmp->bknown = 1;
 		    }
@@ -821,21 +877,36 @@
 		setmnotwielded(mon, mw_tmp);
 		mon->weapon_check = NEED_WEAPON;
 		if (canseemon(mon)) {
+/*JP
 		    pline("%s wields %s!", Monnam(mon), doname(obj));
+*/
+		    pline("%sは%sを装備した！", Monnam(mon), doname(obj));
 		    if (obj->cursed && obj->otyp != CORPSE) {
+#if 0 /*JP*/
 			pline("%s %s to %s %s!",
 			    Tobjnam(obj, "weld"),
 			    is_plural(obj) ? "themselves" : "itself",
 			    s_suffix(mon_nam(mon)), mbodypart(mon,HAND));
+#else
+				pline("%sは勝手に%sの%sに装備された！",
+					xname(obj),
+					mon_nam(mon), mbodypart(mon,HAND));
+#endif
 			obj->bknown = 1;
 		    }
 		}
 		if (artifact_light(obj) && !obj->lamplit) {
 		    begin_burn(obj, FALSE);
 		    if (canseemon(mon))
+#if 0 /*JP*/
 			pline("%s brilliantly in %s %s!",
 			    Tobjnam(obj, "glow"), 
 			    s_suffix(mon_nam(mon)), mbodypart(mon,HAND));
+#else
+			pline("%sは%sの%sの中で輝いた！",
+			    xname(obj), 
+			    mon_nam(mon), mbodypart(mon,HAND));
+#endif
 		}
 		obj->owornmask = W_WEP;
 #ifdef LIGHTSABERS
@@ -860,14 +931,23 @@
 	/* WAC - Check lightsaber is on */
 	if (!obj->lamplit) {
 	    if (obj->cursed && !rn2(2)) {
+/*JP
 		if (canseemon(mon)) pline("%s %s flickers and goes out.", 
 			s_suffix(Monnam(mon)), xname(obj));
+*/
+		if (canseemon(mon)) pline("%sの%sは点滅して消えた．", 
+			Monnam(mon), xname(obj));
 
 	    } else {
 		if (canseemon(mon)) {
 			makeknown(obj->otyp);
+#if 0 /*JP*/
 			pline("%s ignites %s.", Monnam(mon),
 				an(xname(obj)));
+#else
+			pline("%sは%sの光の刃を発現させた．", Monnam(mon),
+				xname(obj));
+#endif
 		}	    	
 		begin_burn(obj, FALSE);
 	    }
@@ -876,8 +956,13 @@
 		if (obj->otyp == RED_DOUBLE_LIGHTSABER && !obj->altmode) {
 		    /* Do we want to activate dual bladed mode? */
 		    if (!obj->altmode && (!obj->cursed || rn2(4))) {
+#if 0 /*JP*/
 			if (canseemon(mon)) pline("%s ignites the second blade of %s.", 
 				Monnam(mon), an(xname(obj)));
+#else
+			pline("%sは%sの柄頭側の光の刃も発現させた．", Monnam(mon),
+				xname(obj));
+#endif
 		    	obj->altmode = TRUE;
 		    	return;
 		    } else obj->altmode = FALSE;
@@ -966,6 +1051,7 @@
     const char *ptr;
 
     switch (P_SKILL(skill)) {
+#if 0 /*JP*/
 	case P_UNSKILLED:    ptr = "Unskilled"; break;
 	case P_BASIC:	     ptr = "Basic";     break;
 	case P_SKILLED:	     ptr = "Skilled";   break;
@@ -981,6 +1067,23 @@
 	    else ptr = "Unprecedented";
 	    break;
 	default:	     ptr = "Unknown";	break;
+#else
+	case P_UNSKILLED:    ptr = "初心者"; break;
+	case P_BASIC:	     ptr = "入門者";     break;
+	case P_SKILLED:	     ptr = "熟練者";   break;
+	case P_EXPERT:	     ptr = "エキスパート";    break;
+	case P_MASTER:	     ptr = "マスター";    break;
+	case P_GRAND_MASTER: 
+            if (skill <= P_LAST_WEAPON)
+                    ptr = "大魔法使い" ;
+            else if (skill <= P_LAST_SPELL)
+                    ptr = "伝説の者";
+	    else if (skill <= P_LAST_H_TO_H) 
+	    	    ptr = "グランドマスター"; 
+	    else ptr = "破天荒";	/* unprecedented-"前例のない,空前の,無比の,新しい,新奇な."*/
+	    break;
+	default:	     ptr = "不明";	break;
+#endif
     }
     Strcpy(buf, ptr);
     return buf;
@@ -1084,13 +1187,23 @@
     P_SKILL(skill)++;
     u.skill_record[u.skills_advanced++] = skill;
     /* subtly change the advance message to indicate no more advancement */
+#if 0 /*JP*/
     You("are now %s skilled in %s.",
 	P_SKILL(skill) >= P_MAX_SKILL(skill) ? "most" : "more",
 	P_NAME(skill));
+#else
+    Your("%sのスキルを%s高めた．", 
+	jtrns_obj(')', P_NAME(skill)),
+	P_SKILL(skill) >= P_MAX_SKILL(skill) ? "最高に" : "さらに");
+#endif
     if (!tech_known(T_DISARM) && (P_SKILL(skill) == P_SKILLED) && 
     		skill <= P_LAST_WEAPON && skill != P_WHIP) {
     	learntech(T_DISARM, FROMOUTSIDE, 1);
+#if 0 /*JP*/
     	You("learn how to perform disarm!");
+#else
+    	You("相手の武器を叩き落す方法を学習した！");
+#endif
     }
 }
 
@@ -1098,9 +1211,15 @@
 	short first, last;
 	const char *name;
 } skill_ranges[] = {
+#if 0 /*JP*/
     { P_FIRST_H_TO_H, P_LAST_H_TO_H, "Fighting Skills" },
     { P_FIRST_WEAPON, P_LAST_WEAPON, "Weapon Skills" },
     { P_FIRST_SPELL,  P_LAST_SPELL,  "Spellcasting Skills" },
+#else
+    { P_FIRST_H_TO_H, P_LAST_H_TO_H, "戦いのスキル" },
+    { P_FIRST_WEAPON, P_LAST_WEAPON, "武器のスキル" },
+    { P_FIRST_SPELL,  P_LAST_SPELL,  "魔法のスキル" },
+#endif
 };
 
 /*
@@ -1124,7 +1243,11 @@
     boolean speedy = FALSE;
 
 #ifdef WIZARD
+#if 0 /*JP*/
 	if (wizard && yn("Advance skills without practice?") == 'y')
+#else
+	if (wizard && yn("修練なしにスキルを上昇させますか？") == 'y')
+#endif
 	    speedy = TRUE;
 #endif
 
@@ -1151,19 +1274,32 @@
 	    if (eventually_advance > 0 || maxxed_cnt > 0) {
 		any.a_void = 0;
 		if (eventually_advance > 0) {
+#if 0 /*JP*/
 		    Sprintf(buf,
 			    "(Skill%s flagged by \"*\" may be enhanced %s.)",
 			    plur(eventually_advance),
 			    (u.ulevel < MAXULEV) ?
 				"when you're more experienced" :
 				"if skill slots become available");
+#else
+		    Sprintf(buf,
+			    "(\"*\"がついているスキルは%s高められる．)",
+			    (u.ulevel < MAXULEV) ?
+				"もっと経験をつめば" :
+				"スキルスロットが使えるようになれば");
+#endif
 		    add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
 			     buf, MENU_UNSELECTED);
 		}
 		if (maxxed_cnt > 0) {
+#if 0 /*JP*/
 		    Sprintf(buf,
 		  "(Skill%s flagged by \"#\" cannot be enhanced any further.)",
 			    plur(maxxed_cnt));
+#else
+		    Sprintf(buf,
+		  "(\"#\"がついているスキルはこれ以上高められない．)");
+#endif
 		    add_menu(win, NO_GLYPH, &any, 0, 0, ATR_NONE,
 			     buf, MENU_UNSELECTED);
 		}
@@ -1232,8 +1368,13 @@
 			 buf, MENU_UNSELECTED);
 	    }
 
+#if 0 /*JP*/
 	    Strcpy(buf, (to_advance > 0) ? "Pick a skill to advance:" :
 					   "Current skills:");
+#else
+	    Strcpy(buf, (to_advance > 0) ? "スキルを選択してください：" :
+					   "現在のスキル：");
+#endif
 #ifdef WIZARD
 	    if (wizard && !speedy)
 		Sprintf(eos(buf), "  (%d slot%s available)",
@@ -1249,7 +1390,10 @@
 		/* check for more skills able to advance, if so then .. */
 		for (n = i = 0; i < P_NUM_SKILLS; i++) {
 		    if (can_advance(i, speedy)) {
+/*JP
 			if (!speedy) You_feel("you could be more dangerous!");
+*/
+			if (!speedy) You("さらにスキルを高めることができそうな気がした！");
 			n++;
 			break;
 		    }
@@ -1706,7 +1850,11 @@
 		  you won't be wasting your time ;B*/
 		return(1); /* still busy */
     }
+#if 0 /*JP*/
 	You("finish your practice session.");
+#else
+	You("修行を終えた．");
+#endif
 	use_skill(weapon_type(uwep),
 	    practice_needed_to_advance(P_SKILL(weapon_type(uwep)),weapon_type(uwep))/3);
 	return(0);
@@ -1717,21 +1865,42 @@
 {
 	if (can_practice(weapon_type(uwep))
 #ifdef WIZARD
+/*JP
 	    || (wizard && (yn("Skill at normal max. Practice?") == 'y'))
+*/
+	    || (wizard && (yn("そのスキルは通常なら頭打ちですが，更に修行しますか？") == 'y'))
 #endif
 	    ) {
 		if (uwep)    
+/*JP
 		    You("start practicing intensely with %s",doname(uwep));
+*/
+		    You("%sを振り，真剣に修行を開始した．",doname(uwep));
 		else
+#if 0 /*JP*/
 		    You("start practicing intensely with your %s %s.",
 		            uarmg ? "gloved" : "bare",      /* Del Lamb */
 		makeplural(body_part(HAND)));
+#else
+	    	/*日本語では「腕を振り」の方が良いか? また小手をつけているかどうかは省略*/
+		    You("%sを振り，真剣に修行を開始した．",
+		makeplural(body_part(ARM)));
+#endif
 
 		delay=-10;
+/*JP
 		set_occupation(practice, "practicing", 0);
+*/
+		set_occupation(practice, "修行する", 0);
 	} else if (P_SKILL(weapon_type(uwep)) >= P_MAX_SKILL(weapon_type(uwep)))
+/*JP
 		You("cannot increase your skill in %s.", P_NAME(weapon_type(uwep)));
+*/
+		You("%sのスキルをこれ以上高める事ができない．", P_NAME(weapon_type(uwep)));
+/*JP
 	else You("cannot learn much about %s right now.",
+*/
+	else pline("%sのスキルを高めるにはまだ経験が足りない．",
                 P_NAME(weapon_type(uwep)));
                 
 }
@@ -1745,9 +1914,14 @@
     if (artifact_light(obj) && obj->lamplit) {
 	end_burn(obj, FALSE);
 	if (canseemon(mon))
+#if 0 /*JP*/
 	    pline("%s in %s %s %s glowing.", The(xname(obj)),
 		  s_suffix(mon_nam(mon)), mbodypart(mon,HAND),
 		  otense(obj, "stop"));
+#else
+	    pline("%sが持つ%sの輝きが消えた．",
+		  mon_nam(mon), xname(obj));
+#endif
     }
     obj->owornmask &= ~W_WEP;
 }
diff -aurN slashem-0.0.7E6F2/src/were.c jslashem-0.0.7E6F2-J0.0.8/src/were.c
--- slashem-0.0.7E6F2/src/were.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/were.c	2004-06-27 16:57:16.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef OVL0
@@ -22,14 +30,24 @@
 		    const char *howler;
 
 		    switch (monsndx(mon->data)) {
+#if 0 /*JP*/
 		    case PM_HUMAN_WEREWOLF:	howler = "wolf";    break;
 		    case PM_HUMAN_WEREJACKAL:	howler = "jackal";  break;
 		    case PM_HUMAN_WEREPANTHER:	howler = "panther"; break;
 		    case PM_HUMAN_WERETIGER:	howler = "tiger";   break;
+#else
+		    case PM_HUMAN_WEREWOLF:	howler = "狼";		break;
+		    case PM_HUMAN_WEREJACKAL:	howler = "ジャッカル";	break;
+		    case PM_HUMAN_WEREPANTHER:	howler = "ヒョウ";	break;
+		    case PM_HUMAN_WERETIGER:	howler = "虎";		break;
+#endif
 		    default:			howler = (char *)0; break;
 		    }
 		    if (howler)
+/*JP
 			You_hear("a %s howling at the moon.", howler);
+*/
+			You_hear("月夜に%sが吠える声を聞いた．", howler);
 		}
 	    }
 	} else if (!rn2(30) || Protection_from_shape_changers) {
@@ -76,9 +94,15 @@
 	}
 
 	if(canseemon(mon) && !Hallucination)
+#if 0 /*JP*/
 	    pline("%s changes into a %s.", Monnam(mon),
 			is_human(&mons[pm]) ? "human" :
 			mons[pm].mname+4);
+#else
+	    pline("%sは%sの姿になった．", Monnam(mon),
+			is_human(&mons[pm]) ? "人間" :
+			jtrns_mon(mons[pm].mname + 4));
+#endif
 
 	set_mon_data(mon, &mons[pm], 0);
 	if (mon->msleeping || !mon->mcanmove) {
@@ -177,8 +201,13 @@
 	if (Unchanging || (u.umonnum == u.ulycn)) return;
 	if (Polymorph_control) {
 	    /* `+4' => skip "were" prefix to get name of beast */
+#if 0 /*JP*/
 	    Sprintf(qbuf, "Do you want to change into %s? ",
 		    an(mons[u.ulycn].mname+4));
+#else
+	    Sprintf(qbuf,"%sに変化しますか？",
+		    jtrns_mon(mons[u.ulycn].mname + 4));
+#endif
 	    if(yn(qbuf) == 'n') return;
 	}
 	(void) polymon(u.ulycn);
@@ -193,20 +222,31 @@
 	if (purify) {
 	    if (Race_if(PM_HUMAN_WEREWOLF)) {
 		/* An attempt to purify you has been made! */
+#if 0 /*JP*/
 		You_feel("very bad!");
+#else
+		You("とても気分が悪い！");
+#endif
 		(void) adjattrib(A_STR, -rn1(3,3), 2);
 		(void) adjattrib(A_CON, -rn1(3,3), 1);
 		if (u.uhp > 10) u.uhp = rnd(5);
 		else u.uhp = 1;
 		return;
 	    }
+/*JP
 	    You_feel("purified.");
+*/
+	    You("浄められたような気がした．");
 	    u.ulycn = NON_PM;	/* cure lycanthropy */
 	    upermonst.mflags2 &= ~(M2_WERE);
 	}
 	/* KMH, balance patch -- new intrinsic */
 	if (!Unchanging && in_wereform &&
+#if 0 /*JP*/
 		(!Polymorph_control || yn("Remain in beast form?") == 'n'))
+#else
+		(!Polymorph_control || yn("元の姿に戻る？") == 'n'))
+#endif
 	    rehumanize();
 }
 
diff -aurN slashem-0.0.7E6F2/src/wield.c jslashem-0.0.7E6F2-J0.0.8/src/wield.c
--- slashem-0.0.7E6F2/src/wield.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/wield.c	2004-06-27 16:55:58.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /* KMH -- Differences between the three weapon slots.
@@ -97,7 +105,10 @@
 	setworn(obj, W_WEP);
 	if (uwep == obj && artifact_light(olduwep) && olduwep->lamplit) {
 	    end_burn(olduwep, FALSE);
+/*JP
 	    if (!Blind) pline("%s glowing.", Tobjnam(olduwep, "stop"));
+*/
+	    if (!Blind) pline("%sは輝きを止めた．", xname(olduwep));
 	}
 	/* Note: Explicitly wielding a pick-axe will not give a "bashing"
 	 * message.  Wielding one via 'a'pplying it will.
@@ -133,44 +144,76 @@
 	if (!wep) {
 	    /* No weapon */
 	    if (uwep) {
+/*JP
 		You("are empty %s.", body_part(HANDED));
+*/
+	        You("%sを空けた．", body_part(HAND));
 		setuwep((struct obj *) 0, put_away);
 		res++;
 	    } else
+/*JP
 		You("are already empty %s.", body_part(HANDED));
+*/
+		You("何も%sにしていない！", body_part(HAND));
 	} else if (!uarmg && !Stone_resistance && wep->otyp == CORPSE
 				&& touch_petrifies(&mons[wep->corpsenm])) {
 	    /* Prevent wielding cockatrice when not wearing gloves --KAA */
 	    char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 	    You("wield the %s corpse in your bare %s.",
 		mons[wep->corpsenm].mname, makeplural(body_part(HAND)));
+#else
+	    You("%sの死体を%sにした．",
+		jtrns_mon(mons[wep->corpsenm].mname), makeplural(body_part(HAND)));
+#endif
+/*JP
 	    Sprintf(kbuf, "%s corpse", an(mons[wep->corpsenm].mname));
+*/
+            Sprintf(kbuf, "%sの死体に触れて", jtrns_mon(mons[wep->corpsenm].mname));
 	    instapetrify(kbuf);
 	} else if (uarms && bimanual(wep))
+#if 0 /*JP*/
 	    You("cannot wield a two-handed %s while wearing a shield.",
 		is_sword(wep) ? "sword" :
 		    wep->otyp == BATTLE_AXE ? "axe" : "weapon");
+#else
+	    pline("盾を装備しているときに両手持ちの%sを装備できない．",
+		is_sword(wep) ? "剣" :
+		    wep->otyp == BATTLE_AXE ? "斧" : "武器");
+#endif
 	else if (wep->oartifact && !touch_artifact(wep, &youmonst)) {
 	    res++;	/* takes a turn even though it doesn't get wielded */
 	} else if (tech_inuse(T_EVISCERATE)) {
 		/* WAC - if you have 'L' has claws out and wields weapon,
 		 * can't retract claws
 		 */
+/*JP
 		You("can't retract your claws!");
+*/
+		You("爪を引っ込めることはできない！");
 	} else {
 	    /* Weapon WILL be wielded after this point */
 	    res++;
 	    if (will_weld(wep)) {
+/*JP
 		const char *tmp = xname(wep), *thestr = "The ";
+*/
+		const char *tmp = xname(wep), *thestr = "";
 		if (strncmp(tmp, thestr, 4) && !strncmp(The(tmp),thestr,4))
 		    tmp = thestr;
 		else tmp = "";
+#if 0 /*JP*/
 		pline("%s%s %s to your %s!", tmp, aobjnam(wep, "weld"),
 			(wep->quan == 1L) ? "itself" : "themselves", /* a3 */
 			bimanual(wep) ?
 				(const char *)makeplural(body_part(HAND))
 				: body_part(HAND));
+#else
+	        pline("%sは勝手にあなたの%sに装備された．",
+		      xname(wep), 
+		      body_part(HAND));
+#endif
 		wep->bknown = TRUE;
 	    } else {
 		/* The message must be printed before setuwep (since
@@ -192,7 +235,10 @@
 	    if (artifact_light(wep) && !wep->lamplit) {
 		begin_burn(wep, FALSE);
 		if (!Blind)
+/*JP
 		    pline("%s to glow brilliantly!", Tobjnam(wep, "begin"));
+*/
+		    pline("%sが光り輝きはじめた！", xname(wep));
 	    }
 
 #if 0
@@ -210,7 +256,10 @@
 
 		if ((this_shkp = shop_keeper(inside_shop(u.ux, u.uy))) !=
 		    (struct monst *)0) {
+/*JP
 		    pline("%s says \"You be careful with my %s!\"",
+*/
+		    pline("%sは述べた「%sの扱いは気をつけてくれよ！」",
 			  shkname(this_shkp),
 			  xname(wep));
 		}
@@ -259,16 +308,25 @@
 	/* May we attempt this? */
 	multi = 0;
 	if (cantwield(youmonst.data)) {
+/*JP
 		pline("Don't be ridiculous!");
+*/
+		pline("ばかばかしい！");
 		return(0);
 	}
 
 	/* Prompt for a new weapon */
+/*JP
 	if (!(wep = getobj(wield_objs, "wield")))
+*/
+	if (!(wep = getobj(wield_objs, body_part(HANDED))))
 		/* Cancelled */
 		return (0);
 	else if (wep == uwep) {
+/*JP
 	    You("are already wielding that!");
+*/
+	    You("もうそれを%sにしている！", body_part(HAND));
 	    if (is_weptool(wep)) unweapon = FALSE;	/* [see setuwep()] */
 		return (0);
 	} else if (welded(uwep)) {
@@ -290,7 +348,10 @@
 			| W_SADDLE
 #endif
 			)) {
+/*JP
 		You("cannot wield that!");
+*/
+		You("それを装備できない！");
 		return (0);
 	}
 
@@ -314,7 +375,10 @@
 	/* May we attempt this? */
 	multi = 0;
 	if (cantwield(youmonst.data)) {
+/*JP
 		pline("Don't be ridiculous!");
+*/
+		pline("ばかばかしい！");
 		return(0);
 	}
 	if (welded(uwep)) {
@@ -342,7 +406,10 @@
 		if (uswapwep)
 			prinv((char *)0, uswapwep, 0L);
 		else
+/*JP
 			You("have no secondary weapon readied.");
+*/
+			You("予備の武器の用意をやめた．");
 	}
 
 	if (u.twoweap && !can_twoweapon())
@@ -366,10 +433,16 @@
 	/* Slash'EM has used Q for quiver since it started */
 	/* Because 'Q' used to be quit... */
 	if (flags.suppress_alert < FEATURE_NOTICE_VER(0,0,0))
+/*JP
 		pline("Note: Please use #quit if you wish to exit the game.");
+*/
+		pline("注意:ゲームを終了するときは #quitコマンドを使うこと．");
 
 	/* Prompt for a new quiver */
+/*JP
 	if (!(newquiver = getobj(quivee_types, "ready")))
+*/
+	if (!(newquiver = getobj(quivee_types, "装填する")))
 		/* Cancelled */
 		return (0);
 
@@ -378,26 +451,42 @@
 	if (newquiver == &zeroobj) {
 		/* Explicitly nothing */
 		if (uquiver) {
+/*JP
 			You("now have no ammunition readied.");
+*/
+			pline("装填するための矢玉がなくなった．");
 			setuqwep(newquiver = (struct obj *) 0);
 		} else {
+/*JP
 			You("already have no ammunition readied!");
+*/
+			pline("装填するための矢玉がない．");
 			return(0);
 		}
 	} else if (newquiver == uquiver) {
+/*JP
 		pline("That ammunition is already readied!");
+*/
+		pline("もう装填されている！");
 		return(0);
 	} else if (newquiver == uwep) {
 		/* Prevent accidentally readying the main weapon */
+#if 0 /*JP*/
 		pline("%s already being used as a weapon!",
 		      !is_plural(uwep) ? "That is" : "They are");
+#else
+		pline("もう武器として使われている！");
+#endif
 		return(0);
 	} else if (newquiver->owornmask & (W_ARMOR | W_RING | W_AMUL | W_TOOL
 #ifdef STEED
 			| W_SADDLE
 #endif
 			)) {
+/*JP
 		You("cannot ready that!");
+*/
+		You("それは使えない！");
 		return (0);
 	} else {
 		long dummy;
@@ -429,27 +518,40 @@
 struct obj *obj;
 const char *verb;	/* "rub",&c */
 {
+    /*JP 日本語では verb は未使用 */
     const char *what;
+#if 0 /*JP*/
     boolean more_than_1;
+#endif
 
     if (obj == uwep) return TRUE;   /* nothing to do if already wielding it */
 
+#if 0 /*JP*/
     if (!verb) verb = "wield";
+#endif
     what = xname(obj);
+#if 0 /*JP*/
     more_than_1 = (obj->quan > 1L ||
 		   strstri(what, "pair of ") != 0 ||
 		   strstri(what, "s of ") != 0);
+#endif
 
     if (obj->owornmask & (W_ARMOR|W_RING|W_AMUL|W_TOOL)) {
 	char yourbuf[BUFSZ];
 
+#if 0 /*JP:T*/
 	You_cant("%s %s %s while wearing %s.",
 		 verb, shk_your(yourbuf, obj), what,
 		 more_than_1 ? "them" : "it");
+#else
+	pline("身につけたままでは%s%sは使えない．",
+		 shk_your(yourbuf, obj), what);
+#endif
 	return FALSE;
     }
     if (welded(uwep)) {
 	if (flags.verbose) {
+#if 0 /*JP*/
 	    const char *hand = body_part(HAND);
 
 	    if (bimanual(uwep)) hand = makeplural(hand);
@@ -457,19 +559,33 @@
 	    pline(
 	     "Since your weapon is welded to your %s, you cannot %s %s %s.",
 		  hand, verb, more_than_1 ? "those" : "that", xname(obj));
+#else
+	    pline("武器を手にしているので，%sを使えない．", xname(obj));
+#endif
 	} else {
+/*JP
 	    You_cant("do that.");
+*/
+	    pline("それはできない．");
 	}
 	return FALSE;
     }
     if (cantwield(youmonst.data)) {
+/*JP
 	You_cant("hold %s strongly enough.", more_than_1 ? "them" : "it");
+*/
+	You("それを持つほど力がない．");
 	return FALSE;
     }
     /* check shield */
     if (uarms && bimanual(obj)) {
+#if 0 /*JP*/
 	You("cannot %s a two-handed %s while wearing a shield.",
 	    verb, (obj->oclass == WEAPON_CLASS) ? "weapon" : "tool");
+#else
+	pline("盾を装備したまま両手持ちの%sを装備できない．",
+	    (obj->oclass == WEAPON_CLASS) ? "武器" : "道具");
+#endif
 	return FALSE;
     }
     if (uquiver == obj) setuqwep((struct obj *)0);
@@ -478,7 +594,10 @@
 	/* doswapweapon might fail */
 	if (uswapwep == obj) return FALSE;
     } else {
+/*JP
 	You("now wield %s.", doname(obj));
+*/
+	You("%sを装備した．", doname(obj));
 	setuwep(obj, TRUE);
     }
     if (uwep != obj) return FALSE;	/* rewielded old object after dying */
@@ -504,52 +623,99 @@
 
 #define NOT_WEAPON(obj) (obj && !is_weptool(obj) && obj->oclass != WEAPON_CLASS)
 	if (!could_twoweap(youmonst.data) && (uwep || uswapwep)) {
+/*JP
 	    what = uwep && uswapwep ? "two weapons" : "more than one weapon";
+*/
+	    what = uwep && uswapwep ? "二刀流" : "二本以上の武器";
 	    if (cantwield(youmonst.data))
+/*JP
 		pline("Don't be ridiculous!");
+*/
+		pline("ばかばかしい！");
 	    else if (Upolyd)
+/*JP
 		You_cant("use %s in your current form.", what);
+*/
+		pline("通常の姿でなければ%sを使用できない．", what);
 	    else {
 		disallowed_by_role = P_MAX_SKILL(P_TWO_WEAPON_COMBAT) < P_BASIC;
 		disallowed_by_race = youmonst.data->mattk[1].aatyp != AT_WEAP;
 		*buf = '\0';
 		if (!disallowed_by_role)
+/*JP
 		    Strcpy(buf, disallowed_by_race ? urace.noun : urace.adj);
+*/
+		    Strcpy(buf, disallowed_by_race ? urace.j : urace.adj);
 		if (disallowed_by_role || !disallowed_by_race) {
 		    if (!disallowed_by_role)
+/*JP
 			Strcat(buf, " ");
+*/
+			Strcat(buf, "の");
 		    Strcat(buf, (flags.female && urole.name.f) ?
 			    urole.name.f : urole.name.m);
 		}
+/*JP
 		pline("%s aren't able to use %s at once.",
+*/
+		pline("%sは%sを同時に扱えない．",
 			makeplural(upstart(buf)), what);
 	    }
 	} else if (cantwield(youmonst.data))
+/*JP
 	    pline("Don't be ridiculous!");
+*/
+	    pline("ばかばかしい！");
 	else if (youmonst.data->mattk[1].aatyp != AT_WEAP &&
 		youmonst.data->mattk[1].aatyp != AT_CLAW) {
 	    if (Upolyd)
+#if 0 /*JP*/
 		You_cant("fight with two %s in your current form.",
+#else
+		You("現在の姿かたちでは両%sでの戦闘はできない．",
+#endif
 			makeplural(body_part(HAND)));
 	    else
+#if 0 /*JP*/
 		pline("%s aren't able to fight two-handed.",
 			upstart(makeplural(urace.noun)));
+#else
+		pline("%sは両手持ちによる戦闘ができない．",
+			upstart(makeplural(urace.j)));
+#endif
 	} else if (NOT_WEAPON(uwep) || NOT_WEAPON(uswapwep)) {
 	    otmp = NOT_WEAPON(uwep) ? uwep : uswapwep;
+#if 0 /*JP:T*/
 	    pline("%s %s.", Yname2(otmp),
 		is_plural(otmp) ? "aren't weapons" : "isn't a weapon");
+#else
+		pline("%sは武器じゃない．", Yname2(otmp));
+#endif
 	} else if ((uwep && bimanual(uwep)) || (uswapwep && bimanual(uswapwep))) {
 	    otmp = (uwep && bimanual(uwep)) ? uwep : uswapwep;
+/*JP
 	    pline("%s isn't one-handed.", Yname2(otmp));
+*/
+	    pline("%sは片手持ちの武器じゃない．", Yname2(otmp));
 	} else if (uarms) {
 	    if (uwep || uswapwep)
+#if 0 /*JP:T*/
 		what = uwep && uswapwep ?  "use two weapons" :
 		    "use more than one weapon";
+#else
+		what = uwep && uswapwep ? "二刀流はできない" : "二本以上の武器は使えない";
+#endif
 	    else {
+/*JP
 		sprintf(buf, "fight with two %s", makeplural(body_part(HAND)));
+*/
+		sprintf(buf, "両%sによる戦闘はできない", makeplural(body_part(HAND)));
 		what = buf;
 	    }
+/*JP
 	    You_cant("%s while wearing a shield.", what);
+*/
+	    You("盾を持っている間は%s．", what);
 	}
         /* WAC:  TODO: cannot wield conflicting alignment artifacts*/
 #if 0
@@ -562,9 +728,17 @@
                 (touch_petrifies(&mons[uswapwep->corpsenm])))) {
 	    char kbuf[BUFSZ];
 
+#if 0 /*JP*/
 	    You("wield the %s corpse with your bare %s.",
 		    mons[uswapwep->corpsenm].mname, body_part(HAND));
+#else
+	    You("%sを素%sで掴んだ．",
+		jtrns_mon(mons[uswapwep->corpsenm].mname), body_part(HAND));
+#endif
+/*JP
 	    Sprintf(kbuf, "%s corpse", an(mons[uswapwep->corpsenm].mname));
+*/
+	    Sprintf(kbuf, "%sの死体に触れて", jtrns_mon(mons[uswapwep->corpsenm].mname));            
 	    instapetrify(kbuf);
         } else if (uswapwep && (Glib || uswapwep->cursed)) {
 	    if (!Glib)
@@ -580,12 +754,18 @@
 void
 drop_uswapwep()
 {
+/*JP
 	char str[BUFSZ];
+*/
 	struct obj *obj = uswapwep;
 
+#if 0 /*JP*/
 	/* Avoid trashing makeplural's static buffer */
 	Strcpy(str, makeplural(body_part(HAND)));
 	Your("%s from your %s!",  aobjnam(obj, "slip"), str);
+#else
+	You("%sを落してしまった！", xname(obj));
+#endif
 	setuswapwep((struct obj *) 0, FALSE);
 	dropx(obj);
 }
@@ -596,12 +776,21 @@
 	/* You can always toggle it off */
 	if (u.twoweap) {
 		if (uwep)
+/*JP
 		    You("switch to your primary weapon.");
+*/
+		    You("ひとつの武器で戦闘することにした．");
 		else if (uswapwep) {
+/*JP
 		    You("are empty %s.", body_part(HANDED));
+*/
+		    You("何も%sにしていない．", body_part(HANDED));
 		    unweapon = TRUE;
 		} else
+/*JP
 		    You("switch to your right %s.", body_part(HAND));
+*/
+		    You("右%sに持ち替えた．", body_part(HAND));
 		if (uswapwep)
 		    unwield(uswapwep, TRUE);
 		u.twoweap = 0;
@@ -613,16 +802,30 @@
 	if (can_twoweapon()) {
 		/* Success! */
 		if (uwep && uswapwep)
+/*JP
 		    You("begin two-weapon combat.");
+*/
+		    You("二刀流で戦闘することにした．");
 		else if (uwep || uswapwep) {
+#if 0 /*JP*/
 		    You("begin fighting with a weapon and your %s %s.",
 			    uwep ? "left" : "right", body_part(HAND));
+#else
+		    You("武器と%s%sで戦闘することにした．",
+			    uwep ? "左" : "右", body_part(HAND));
+#endif
 		    unweapon = FALSE;
 		} else if (Upolyd)
+/*JP
 		    You("begin fighting with two %s.",
+*/
+		    You("%sだけで戦闘することにした．",
 			    makeplural(body_part(HAND)));
 		else
+/*JP
 		    You("begin two-handed combat.");
+*/
+		    You("両手持ちで戦闘することにした．");
 		u.twoweap = 1;
 		update_inventory();
 		return (rnd(20) > ACURR(A_DEX));
@@ -642,7 +845,10 @@
 	if (uwep) {
 		if (artifact_light(uwep) && uwep->lamplit) {
 		    end_burn(uwep, FALSE);
+/*JP
 		    if (!Blind) pline("%s glowing.", Tobjnam(uwep, "stop"));
+*/
+		    if (!Blind) pline("%sは輝きを止めた．", xname(uwep));
 		}
 		unwield(uwep, FALSE);
 		setworn((struct obj *)0, W_WEP);
@@ -674,12 +880,21 @@
 {
 	if (u.twoweap) {
 		if (uwep && uswapwep)
+/*JP
 		    You("can no longer use two weapons at once.");
+*/
+		    You("もう２つの武器を同時に使用することはできない．");
 		else if (cantwield(youmonst.data))
+/*JP
 		    You("can no longer control which %s to fight with.",
+*/
+		    You("この%sではもう武器を保持していくことができない．",
 			    body_part(HAND));
 		else
+/*JP
 		    You("can no longer use two %s to fight.",
+*/
+		    You("もう両%sでの戦闘をすることはできない．",
 			    makeplural(body_part(HAND)));
 		if (uswapwep)
 		    unwield(uswapwep, TRUE);
@@ -721,12 +936,25 @@
 	    {
 		if (!Blind) {
 		    if (victim == &youmonst)
+#if 0 /*JP*/
 			Your("%s.", aobjnam(target, "fade"));
+#else
+			Your("%sの文字が消えた．", xname(target));
+#endif
 		    else if (vismon)
+#if 0 /*JP*/
 			pline("%s's %s.", Monnam(victim),
 			      aobjnam(target, "fade"));
+#else
+			pline("%sが持つ%sの文字が消えた．", Monnam(victim),
+			      xname(target));
+#endif
 		    else if (visobj)
+#if 0 /*JP*/
 			pline_The("%s.", aobjnam(target, "fade"));
+#else
+			pline("%sの文字が消えた．", xname(target));
+#endif
 		}
 		target->otyp = SCR_BLANK_PAPER;
 		target->spe = 0;
@@ -735,28 +963,59 @@
 		(acid_dmg ? !is_corrodeable(target) : !is_rustprone(target))) {
 	    if (flags.verbose || !(target->oerodeproof && target->rknown)) {
 		if (victim == &youmonst)
+/*JP
 		    Your("%s not affected.", aobjnam(target, "are"));
+*/
+		    Your("%sは影響を受けない．", xname(target));
 		else if (vismon)
+#if 0 /*JP*/
 		    pline("%s's %s not affected.", Monnam(victim),
 			aobjnam(target, "are"));
+#else
+		    pline("%sの%sは影響を受けない．", Monnam(victim),
+			xname(target));
+#endif
 		/* no message if not carried */
 	    }
 	    if (target->oerodeproof) target->rknown = TRUE;
 	} else if (erosion < MAX_ERODE) {
 	    if (victim == &youmonst)
+#if 0 /*JP*/
 		Your("%s%s!", aobjnam(target, acid_dmg ? "corrode" : "rust"),
 		    erosion+1 == MAX_ERODE ? " completely" :
 		    erosion ? " further" : "");
+#else
+		Your("%sは%s%s！", xname(target),
+		     erosion+1 == MAX_ERODE ? "完全に" :
+		     erosion ? "さらに" : "",
+		     acid_dmg ? "腐食した" : "錆びた");
+#endif
 	    else if (vismon)
+#if 0 /*JP*/
 		pline("%s's %s%s!", Monnam(victim),
 		    aobjnam(target, acid_dmg ? "corrode" : "rust"),
 		    erosion+1 == MAX_ERODE ? " completely" :
 		    erosion ? " further" : "");
+#else
+		pline("%sの%sは%s%s！", Monnam(victim),
+			  xname(target),
+			  erosion+1 == MAX_ERODE ? "完全に" :
+			  erosion ? "さらに" : "",
+			  acid_dmg ? "腐食した" : "錆びた");
+#endif
 	    else if (visobj)
+#if 0 /*JP*/
 		pline_The("%s%s!",
 		    aobjnam(target, acid_dmg ? "corrode" : "rust"),
 		    erosion+1 == MAX_ERODE ? " completely" :
 		    erosion ? " further" : "");
+#else
+		pline("%sは%s%s！",
+		    xname(target),
+		    erosion+1 == MAX_ERODE ? "完全に" :
+		    erosion ? "さらに" : "",
+		    acid_dmg ? "腐食した" : "錆びた");
+#endif
 	    if (acid_dmg)
 		target->oeroded2++;
 	    else
@@ -764,17 +1023,37 @@
 	} else {
 	    if (flags.verbose) {
 		if (victim == &youmonst)
+#if 0 /*JP*/
 		    Your("%s completely %s.",
 			aobjnam(target, Blind ? "feel" : "look"),
 			acid_dmg ? "corroded" : "rusty");
+#else
+		    Your("%sは完全に%s%s．",
+			 xname(target),
+			 acid_dmg ? "腐食した" : "錆びた",
+ 			 Blind ? "ようだ" : "");
+#endif
 		else if (vismon)
+#if 0 /*JP*/
 		    pline("%s's %s completely %s.", Monnam(victim),
 			aobjnam(target, "look"),
 			acid_dmg ? "corroded" : "rusty");
+#else
+		    pline("%sの%sは完全に%s%s．", Monnam(victim),
+			xname(target),
+			acid_dmg ? "腐食した" : "錆びた",
+			Blind ? "ようだ" : "");
+#endif
 		else if (visobj)
+#if 0 /*JP*/
 		    pline_The("%s completely %s.",
 			aobjnam(target, "look"),
 			acid_dmg ? "corroded" : "rusty");
+#else
+		    Your("%sは完全に%s．",
+			 xname(target),
+			 acid_dmg ? "腐食した" : "錆びた");
+#endif
 	    }
 	}
 }
@@ -791,8 +1070,13 @@
 	if(!uwep || (uwep->oclass != WEAPON_CLASS && !is_weptool(uwep))) {
 		char buf[BUFSZ];
 
+#if 0 /*JP*/
 		Sprintf(buf, "Your %s %s.", makeplural(body_part(HAND)),
 			(amount >= 0) ? "twitch" : "itch");
+#else
+		Sprintf(buf, "あなたの%sは%s．", makeplural(body_part(HAND)),
+			(amount >= 0) ? "ひきつった" : "ムズムズした");
+#endif
 		strange_feeling(otmp, buf);
 		exercise(A_DEX, (boolean) (amount >= 0));
 		return(0);
@@ -803,7 +1087,10 @@
 	if(uwep->otyp == WORM_TOOTH && amount >= 0) {
 		uwep->otyp = CRYSKNIFE;
 		uwep->oerodeproof = 0;
+/*JP
 		Your("weapon seems sharper now.");
+*/
+		Your("武器はより鋭さを増したようだ．");
 		uwep->cursed = 0;
 		if (otyp != STRANGE_OBJECT) makeknown(otyp);
 		return(1);
@@ -812,34 +1099,57 @@
 	if(uwep->otyp == CRYSKNIFE && amount < 0) {
 		uwep->otyp = WORM_TOOTH;
 		uwep->oerodeproof = 0;
+/*JP
 		Your("weapon seems duller now.");
+*/
+		Your("武器はより鈍くなってしまったようだ．");
 		if (otyp != STRANGE_OBJECT && otmp->bknown) makeknown(otyp);
 		return(1);
 	}
 
 	if (amount < 0 && uwep->oartifact && restrict_name(uwep, ONAME(uwep))) {
 	    if (!Blind)
+/*JP
 		Your("%s %s.", aobjnam(uwep, "faintly glow"), color);
+*/
+		Your("%sはわずかに%s輝いた．", xname(uwep),jconj_adj(color));
 	    return(1);
 	}
 	/* there is a (soft) upper and lower limit to uwep->spe */
 	if(((uwep->spe > 5 && amount >= 0) || (uwep->spe < -5 && amount < 0))
 								&& rn2(3)) {
 	    if (!Blind)
+#if 0 /*JP*/
 	    Your("%s %s for a while and then %s.",
 		 aobjnam(uwep, "violently glow"), color,
 		 otense(uwep, "evaporate"));
+#else
+	    Your("%sはしばらく激しく%s輝き，蒸発した．",
+		 xname(uwep), jconj_adj(color));
+#endif
 	    else
+/*JP
 		Your("%s.", aobjnam(uwep, "evaporate"));
+*/
+		Your("%sは蒸発した．", xname(uwep));
 
 	    useupall(uwep);	/* let all of them disappear */
 	    return(1);
 	}
 	if (!Blind) {
+/*JP
 	    xtime = (amount*amount == 1) ? "moment" : "while";
+*/
+	    xtime = (amount*amount == 1) ? "一瞬" : "しばらくの間";
+#if 0 /*JP*/
 	    Your("%s %s for a %s.",
 		 aobjnam(uwep, amount == 0 ? "violently glow" : "glow"),
 		 color, xtime);
+#else
+	    Your("%sは%s%s%s輝いた．",
+		 xname(uwep), xtime, jconj_adj(color), 
+		 amount == 0 ? "激しく" : "");
+#endif
 	    if (otyp != STRANGE_OBJECT && uwep->known &&
 		    (amount > 0 || (amount < 0 && otmp->bknown)))
 		makeknown(otyp);
@@ -853,17 +1163,28 @@
 	 * spe dependent.  Give an obscure clue here.
 	 */
 	if (uwep->oartifact == ART_MAGICBANE && uwep->spe >= 0) {
+#if 0 /*JP*/
 		Your("right %s %sches!",
 			body_part(HAND),
 			(((amount > 1) && (uwep->spe > 1)) ? "flin" : "it"));
+#else
+		Your("右%sは%s！",
+			body_part(HAND),
+			(((amount > 1) && (uwep->spe > 1)) ? "ひりひりした" : "ムズムズした"));
+#endif
 	}
 
 	/* an elven magic clue, cookie@keebler */
 	/* elven weapons vibrate warningly when enchanted beyond a limit */
 	if ((uwep->spe > 5)
 		&& (is_elven_weapon(uwep) || uwep->oartifact || !rn2(7)))
+#if 0 /*JP*/
 	    Your("%s unexpectedly.",
 		aobjnam(uwep, "suddenly vibrate"));
+#else
+	    Your("%sは突然震えだした．",
+		xname(uwep));
+#endif
 
 	return(1);
 }
@@ -886,10 +1207,15 @@
 	long savewornmask;
 
 	savewornmask = obj->owornmask;
+#if 0 /*JP*/
 	Your("%s %s welded to your %s!",
 		xname(obj), otense(obj, "are"),
 		bimanual(obj) ? (const char *)makeplural(body_part(HAND))
 				: body_part(HAND));
+#else
+	You("%sを%sに構えた！", 
+		xname(obj), body_part(HAND));
+#endif
 	obj->owornmask = savewornmask;
 }
 
@@ -900,7 +1226,11 @@
 {
     /* MRKR: Extinguish torches when they are put away */
     if (put_away && obj->otyp == TORCH && obj->lamplit) {
+#if 0 /*JP*/
 	You("extinguish %s before putting it away.", yname(obj));
+#else
+	You("%sを片付ける前に灯を消した．", yname(obj));
+#endif
 	end_burn(obj, TRUE);
     }
 }
diff -aurN slashem-0.0.7E6F2/src/wizard.c jslashem-0.0.7E6F2-J0.0.8/src/wizard.c
--- slashem-0.0.7E6F2/src/wizard.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/wizard.c	2004-06-27 16:56:02.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* wizard code - inspired by rogue code from Merlyn Leroy (digi-g!brian) */
 /*	       - heavily modified to give the wiz balls.  (genat!mike)   */
 /*	       - dewimped and given some maledictions. -3. */
@@ -72,11 +80,20 @@
 		if(ttmp->ttyp == MAGIC_PORTAL) {
 		    int du = distu(ttmp->tx, ttmp->ty);
 		    if (du <= 9)
+/*JP
 			pline("%s hot!", Tobjnam(amu, "feel"));
+*/
+			pline("%sは熱く感じた！", xname(amu));
 		    else if (du <= 64)
+/*JP
 			pline("%s very warm.", Tobjnam(amu, "feel"));
+*/
+			pline("%sはとても暖かく感じた．", xname(amu));
 		    else if (du <= 144)
+/*JP
 			pline("%s warm.", Tobjnam(amu, "feel"));
+*/
+			pline("%sは暖かく感じた．", xname(amu));
 		    /* else, the amulet feels normal */
 		    break;
 		}
@@ -91,7 +108,10 @@
 		mtmp->msleeping = 0;
 		if (distu(mtmp->mx,mtmp->my) > 2)
 		    You(
+/*JP
     "get the creepy feeling that somebody noticed your taking the Amulet."
+*/
+ "あなたが魔除けを持っていることが誰かに知られたと感じてぞくぞくした．"
 		    );
 		return;
 	    }
@@ -353,7 +373,10 @@
 
 			if ((otmp = on_ground(which_arti(targ))) != 0) {
 			    if (cansee(mtmp->mx, mtmp->my))
+/*JP
 				pline("%s picks up %s.",
+*/
+				pline("%sは%sを拾った．",
 				    Monnam(mtmp),
 				    (distu(mtmp->mx, mtmp->my) <= 5) ?
 				     doname(otmp) : distant_name(otmp, doname));
@@ -480,11 +503,17 @@
 
 	if (!flags.no_of_wizards) {
 	    /* make a new Wizard */
+/*JP
 	    verb = "kill";
+*/
+	    verb = "を殺せし";
 	    mtmp = makemon(&mons[PM_WIZARD_OF_YENDOR], u.ux, u.uy, MM_NOWAIT);
 	} else {
 	    /* look for a migrating Wizard */
+/*JP
 	    verb = "elude";
+*/
+	    verb = "から逃れん";
 	    mmtmp = &migrating_mons;
 	    while ((mtmp = *mmtmp) != 0) {
 		if (mtmp->iswiz &&
@@ -513,8 +542,14 @@
 	if (mtmp) {
 		mtmp->msleeping = mtmp->mtame = mtmp->mpeaceful = 0;
 		set_malign(mtmp);
+/*JP
 		pline("A voice booms out...");
+*/
+		pline("声が高く鳴り響いた．．．");
+/*JP
 		verbalize("So thou thought thou couldst %s me, fool.", verb);
+*/
+		verbalize("余%sと思いしか，このうつけ者め．", verb);
 	}
 
 }
@@ -528,10 +563,16 @@
 	/* cases 0 and 5 don't apply on the Astral level */
 	switch (which) {
 	    case 0:
+/*JP
 	    case 1:	You_feel("vaguely nervous.");
+*/
+	    case 1:	You("何となく不安になった．");
 			break;
 	    case 2:	if (!Blind)
+/*JP
 			    You("notice a %s glow surrounding you.",
+*/
+			    pline("%s光があなたをとりまいているのに気がついた．",
 				  hcolor(NH_BLACK));
 			rndcurse();
 			break;
@@ -555,6 +596,7 @@
 }
 
 const char * const random_insult[] = {
+#if 0 /*JP*/
 	"antic",
 	"blackguard",
 	"caitiff",
@@ -583,9 +625,40 @@
 	"wittol",
 	"worm",
 	"wretch",
+#else
+	"ふざけた野郎",
+	"悪党",
+	"くそったれ",
+	"のろま",
+	"あんぽんたん",
+	"臆病者",
+	"白痴",
+	"ろくでなし",
+	"うつけ",
+	"悪魔の餌食",
+	"うすのろ",
+	"まぬけ",
+	"馬鹿",
+	"おいはぎ",
+	"愚か者",
+	"ならず者",
+	"悪人",
+	"極悪人",
+	"馬鹿たれ",
+	"卑怯者",
+	"風船頭",
+	"道楽者",
+	"厄介者",
+	"下郎",
+	"奴隷",	/* (sic.) */
+	"ふなむし",
+	"蛆虫",
+	"人でなし",
+#endif
 };
 
 const char * const random_malediction[] = {
+#if 0 /*JP*/
 	"Hell shall soon claim thy remains,",
 	"I chortle at thee, thou pathetic",
 	"Prepare to die, thou",
@@ -597,6 +670,19 @@
 	"Thou art doomed,",
 	"Thy fate is sealed,",
 	"Verily, thou shalt be one dead"
+#else
+	"地獄はいづれ，汝の亡骸を要求するであろう，",
+	"哀れなやつよのう．余は満足じゃ",
+	"汝，死に備えよ",
+	"抵抗しても無駄じゃ，",
+	"降参せよ．さもなくば死じゃ．",
+	"慈悲は無からん",
+	"汝，ずるを後悔すべし，",
+	"汝は余にとってノミのようなものじゃ，",
+	"汝は呪われておる，",
+	"汝の運命は封印されておる，",
+	"まことに汝は死にたる者なり"
+#endif
 };
 
 /* Insult or intimidate the player */
@@ -606,20 +692,36 @@
 {
 	if (mtmp->iswiz) {
 	    if (!rn2(5))  /* typical bad guy action */
+/*JP
 		pline("%s laughs fiendishly.", Monnam(mtmp));
+*/
+		pline("%sは悪魔のように笑った．", Monnam(mtmp));
 	    else
 		if (u.uhave.amulet && !rn2(SIZE(random_insult)))
+/*JP
 		    verbalize("Relinquish the amulet, %s!",
+*/
+		    verbalize("魔よけを手放せ，%s！",
 			  random_insult[rn2(SIZE(random_insult))]);
 		else if (u.uhp < 5 && !rn2(2))	/* Panic */
 		    verbalize(rn2(2) ?
+#if 0 /*JP*/
 			  "Even now thy life force ebbs, %s!" :
 			  "Savor thy breath, %s, it be thy last!",
+#else
+			  "今となってもなお汝の命はあえて衰えるのだ，%s！" :
+			  "息を味わっておけ，%s，汝の最期の時だ！",
+#endif
 			  random_insult[rn2(SIZE(random_insult))]);
 		else if (mtmp->mhp < 5 && !rn2(2))	/* Parthian shot */
 		    verbalize(rn2(2) ?
+#if 0 /*JP*/
 			      "I shall return." :
 			      "I'll be back.");
+#else
+			      "余は必ず帰ってくる．" :
+			      "余は戻ってくる．");
+#endif
 		else
 		    verbalize("%s %s!",
 			  random_malediction[rn2(SIZE(random_malediction))],
@@ -629,7 +731,10 @@
 			      QT_ANGELIC);
 	} else {
 	    if (!rn2(5))
+/*JP
 		pline("%s casts aspersions on your ancestry.", Monnam(mtmp));
+*/
+		pline("%sはあなたの家柄を中傷した．", Monnam(mtmp));
 	    else
 	        com_pager(rn2(QTN_DEMONIC) + QT_DEMONIC);
 	}
diff -aurN slashem-0.0.7E6F2/src/worm.c jslashem-0.0.7E6F2-J0.0.8/src/worm.c
--- slashem-0.0.7E6F2/src/worm.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/worm.c	2004-06-27 16:56:04.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 #include "lev.h"
 
@@ -373,7 +381,10 @@
 	if (flags.mon_moving)
 	    pline("Part of the tail of %s is cut off.", mon_nam(worm));
 	else
+/*JP
 	    You("cut part of the tail off of %s.", mon_nam(worm));
+*/
+	You("%sの尻尾の一部分を切った．", mon_nam(worm));
 	toss_wsegs(new_tail, TRUE);
 	if (worm->mhp > 1) worm->mhp /= 2;
 	return 1;
@@ -404,10 +415,17 @@
     /* Place the new monster at all the segment locations. */
     place_wsegs(new_worm);
 
+#if 0 /*JP*/
     if (flags.mon_moving)
 	pline("%s is cut in half.", Monnam(worm));
     else
 	You("cut %s in half.", mon_nam(worm));
+#else
+    if (flags.mon_moving)
+	pline("%sは真っぷたつになった．", Monnam(worm));
+    else
+	You("%sを真っぷたつにした．", mon_nam(worm));
+#endif
 
     return 1;
 }
diff -aurN slashem-0.0.7E6F2/src/worn.c jslashem-0.0.7E6F2-J0.0.8/src/worn.c
--- slashem-0.0.7E6F2/src/worn.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/worn.c	2004-06-27 16:56:08.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright (c) Issei Numata 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL void FDECL(m_lose_armor, (struct monst *,struct obj *));
@@ -203,17 +210,31 @@
 
     if (give_msg && (mon->mspeed != oldspeed || petrify) && canseemon(mon)) {
 	/* fast to slow (skipping intermediate state) or vice versa */
+#if 0 /*JP*/
 	const char *howmuch = (mon->mspeed + oldspeed == MFAST + MSLOW) ?
 				"much " : "";
+#else
+	const char *howmuch = (mon->mspeed + oldspeed == MFAST + MSLOW) ?
+				"すごく" : "";
+#endif
 
 	if (petrify) {
 	    /* mimic the player's petrification countdown; "slowing down"
 	       even if fast movement rate retained via worn speed boots */
+/*JP
 	    if (flags.verbose) pline("%s is slowing down.", Monnam(mon));
+*/
+	    if (flags.verbose) pline("%sはのろくなった．", Monnam(mon));
 	} else if (adjust > 0 || mon->mspeed == MFAST)
+/*JP
 	    pline("%s is suddenly moving %sfaster.", Monnam(mon), howmuch);
+*/
+	    pline("%sの動きは突然%sすばやくなった．", Monnam(mon), howmuch);
 	else
+/*JP
 	    pline("%s seems to be moving %sslower.", Monnam(mon), howmuch);
+*/
+	    pline("%sの動きは%sのろくなったように見える．", Monnam(mon), howmuch);
 
 	/* might discover an object if we see the speed change happen, but
 	   avoid making possibly forgotten book known when casting its spell */
@@ -504,11 +525,19 @@
 		char buf[BUFSZ];
 
 		if (old)
+/*JP
 		    Sprintf(buf, " removes %s and", distant_name(old, doname));
+*/
+		    Sprintf(buf, "%sをはずして", distant_name(old, doname));
 		else
 		    buf[0] = '\0';
+#if 0 /*JP*/
 		pline("%s%s puts on %s.", Monnam(mon),
 		      buf, distant_name(best,doname));
+#else
+		pline("%sは%s%sを身につけた．", Monnam(mon),
+		      buf, distant_name(best,doname));
+#endif
 	    } /* can see it */
 	    m_delay += objects[best->otyp].oc_delay;
 	    mon->mfrozen = m_delay;
@@ -522,7 +551,10 @@
 	/* if couldn't see it but now can, or vice versa, */
 	if (!creation && (unseen ^ !canseemon(mon))) {
 		if (mon->minvis && !See_invisible) {
+/*JP
 			pline("Suddenly you cannot see %s.", nambuf);
+*/
+			pline("突然%sが見えなくなった．", nambuf);
 			makeknown(best->otyp);
 		} /* else if (!mon->minvis) pline("%s suddenly appears!", Amonnam(mon)); */
 	}
@@ -616,8 +648,10 @@
 	struct permonst *mdat = mon->data;
 	boolean vis = cansee(mon->mx, mon->my);
 	boolean handless_or_tiny = (nohands(mdat) || verysmall(mdat));
+#if 0 /*JP*/
 	const char *pronoun = mhim(mon),
 			*ppronoun = mhis(mon);
+#endif
 
 	if (breakarm(mdat)) {
 	    if ((otmp = which_armor(mon, W_ARM)) != 0) {
@@ -628,54 +662,97 @@
 			   "the dragon merges with his scaly armor" is odd
 			   and the monster's previous form is already gone */
 		else if (vis)
+/*JP
 		    pline("%s breaks out of %s armor!", Monnam(mon), ppronoun);
+*/
+		    pline("%sは鎧をやぶり出た！", Monnam(mon));
 		else
+/*JP
 		    You_hear("a cracking sound.");
+*/
+		    You_hear("バリバリという音を聞いた．");
 		m_useup(mon, otmp);
 	    }
 	    if ((otmp = which_armor(mon, W_ARMC)) != 0) {
 		if (otmp->oartifact) {
 		    if (vis)
+#if 0 /*JP*/
 			pline("%s %s falls off!", s_suffix(Monnam(mon)),
 				cloak_simple_name(otmp));
+#else
+			pline("%sの%sは落ちた！", Monnam(mon),
+				cloak_simple_name(otmp));
+#endif
 		    if (polyspot) bypass_obj(otmp);
 		    m_lose_armor(mon, otmp);
 		} else {
 		    if (vis)
+#if 0 /*JP*/
 			pline("%s %s tears apart!", s_suffix(Monnam(mon)),
 				cloak_simple_name(otmp));
+#else
+			pline("%sの%sはずたずたになった！", Monnam(mon),
+				cloak_simple_name(otmp));
+#endif
 		    else
+/*JP
 			You_hear("a ripping sound.");
+*/
+			You_hear("ビリッという音を聞いた．");
 		    m_useup(mon, otmp);
 		}
 	    }
 #ifdef TOURIST
 	    if ((otmp = which_armor(mon, W_ARMU)) != 0) {
 		if (vis)
+/*JP
 		    pline("%s shirt rips to shreds!", s_suffix(Monnam(mon)));
+*/
+		    pline("%sのシャツはずたずたになった！", Monnam(mon));
 		else
+/*JP
 		    You_hear("a ripping sound.");
+*/
+		    You_hear("ビリッという音を聞いた．");
 		m_useup(mon, otmp);
 	    }
 #endif
 	} else if (sliparm(mdat)) {
 	    if ((otmp = which_armor(mon, W_ARM)) != 0) {
 		if (vis)
+#if 0 /*JP*/
 		    pline("%s armor falls around %s!",
 				 s_suffix(Monnam(mon)), pronoun);
+#else
+		    pline("%sの鎧が回りに落ちた！", 
+			         Monnam(mon));
+#endif
 		else
+/*JP
 		    You_hear("a thud.");
+*/
+		    You_hear("ドシンという音を聞いた．");
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
 	    }
 	    if ((otmp = which_armor(mon, W_ARMC)) != 0) {
 		if (vis) {
 		    if (is_whirly(mon->data))
+#if 0 /*JP*/
 			pline("%s %s falls, unsupported!",
 				     s_suffix(Monnam(mon)), cloak_simple_name(otmp));
+#else
+			pline("%sの%sは支えきれずに落ちた！", 
+				     Monnam(mon), cloak_simple_name(otmp));
+#endif
 		    else
+#if 0 /*JP*/
 			pline("%s shrinks out of %s %s!", Monnam(mon),
 						ppronoun, cloak_simple_name(otmp));
+#else
+			pline("%sは%sより縮んだ！", Monnam(mon),
+						cloak_simple_name(otmp));
+#endif
 		}
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
@@ -684,11 +761,21 @@
 	    if ((otmp = which_armor(mon, W_ARMU)) != 0) {
 		if (vis) {
 		    if (sliparm(mon->data))
+#if 0 /*JP*/
 			pline("%s seeps right through %s shirt!",
 					Monnam(mon), ppronoun);
+#else
+			pline("%sは自分のシャツにしみ込んだ！",
+					Monnam(mon));
+#endif
 		    else
+#if 0 /*JP*/
 			pline("%s becomes much too small for %s shirt!",
 					Monnam(mon), ppronoun);
+#else
+			pline("%sは自分のシャツよりずっと小さくなった！",
+					Monnam(mon));
+#endif
 		}
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
@@ -699,17 +786,29 @@
 	    /* [caller needs to handle weapon checks] */
 	    if ((otmp = which_armor(mon, W_ARMG)) != 0) {
 		if (vis)
+#if 0 /*JP*/
 		    pline("%s drops %s gloves%s!", Monnam(mon), ppronoun,
 					MON_WEP(mon) ? " and weapon" : "");
+#else
+		    pline("%sは小手%sを落した！", Monnam(mon), 
+					MON_WEP(mon) ? "と武器" : "");
+#endif
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
 	    }
 	    if ((otmp = which_armor(mon, W_ARMS)) != 0) {
 		if (vis)
+#if 0 /*JP*/
 		    pline("%s can no longer hold %s shield!", Monnam(mon),
 								ppronoun);
+#else
+		    pline("%sはもはや盾を持つことができない！", Monnam(mon));
+#endif
 		else
+/*JP
 		    You_hear("a clank.");
+*/
+		    You_hear("ガチャンという音を聞いた．");
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
 	    }
@@ -719,10 +818,18 @@
 		    /* flimsy test for horns matches polyself handling */
 		    (handless_or_tiny || !is_flimsy(otmp))) {
 		if (vis)
+#if 0 /*JP*/
 		    pline("%s helmet falls to the %s!",
 			  s_suffix(Monnam(mon)), surface(mon->mx, mon->my));
+#else
+		    pline("%sの兜は%sへ落ちた！", 
+			  Monnam(mon), surface(mon->mx, mon->my));
+#endif
 		else
+/*JP
 		    You_hear("a clank.");
+*/
+		    You_hear("ガチャンという音を聞いた．");
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
 	    }
@@ -731,11 +838,20 @@
 	    if ((otmp = which_armor(mon, W_ARMF)) != 0) {
 		if (vis) {
 		    if (is_whirly(mon->data))
+/*JP
 			pline("%s boots fall away!",
+*/
+			pline("%sの靴はぬげ落ちた！", 
 				       s_suffix(Monnam(mon)));
+#if 0 /*JP*/
 		    else pline("%s boots %s off %s feet!",
 			s_suffix(Monnam(mon)),
 			verysmall(mdat) ? "slide" : "are pushed", ppronoun);
+#else
+		    else pline("%sの靴は足から%s！", 
+			Monnam(mon),
+			verysmall(mdat) ? "滑り落ちた" : "引っぱられた");
+#endif
 		}
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
@@ -747,20 +863,34 @@
 		if (polyspot) bypass_obj(otmp);
 		m_lose_armor(mon, otmp);
 		if (vis)
+/*JP
 		    pline("%s saddle falls off.", s_suffix(Monnam(mon)));
+*/
+		    pline("%sから鞍が落ちた．", Monnam(mon));
 	    }
 	    if (mon == u.usteed)
 		goto noride;
 	} else if (mon == u.usteed && !can_ride(mon)) {
 	noride:
+/*JP
 	    You("can no longer ride %s.", mon_nam(mon));
+*/
+	    You("もう%sに乗っていられない．", mon_nam(mon));
 	    if (touch_petrifies(u.usteed->data) &&
 			!Stone_resistance && rnl(3)) {
 		char buf[BUFSZ];
 
+/*JP
 		You("touch %s.", mon_nam(u.usteed));
+*/
+		You("%sに触った．", mon_nam(u.usteed));
+#if 0 /*JP*/
 		Sprintf(buf, "falling off %s",
 				an(u.usteed->data->mname));
+#else
+		Sprintf(buf, "%sから落ちて",
+				a_monnam(u.usteed));
+#endif
 		instapetrify(buf);
 	    }
 	    dismount_steed(DISMOUNT_FELL);
diff -aurN slashem-0.0.7E6F2/src/write.c jslashem-0.0.7E6F2-J0.0.8/src/write.c
--- slashem-0.0.7E6F2/src/write.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/write.c	2004-07-27 09:29:00.000000000 +0900
@@ -1,6 +1,14 @@
 /*	SCCS Id: @(#)write.c	3.4	2001/11/29	*/
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 STATIC_DCL int FDECL(cost,(struct obj *));
@@ -81,36 +89,71 @@
 	int first, last, i;
 	boolean by_descr = FALSE;
 	const char *typeword;
+#if 1 /*JP*/
+	char tmp[BUFSZ];
+#endif
 
 	if (nohands(youmonst.data)) {
+/*JP
 	    You("need hands to be able to write!");
+*/
+	    You("書くためには手が必要だ！");
 	    return 0;
 	} else if (Glib) {
+#if 0 /*JP*/
 	    pline("%s from your %s.",
 		  Tobjnam(pen, "slip"), makeplural(body_part(FINGER)));
+#else
+	    pline("%sが%sから滑りおちた．", xname(pen),
+			body_part(FINGER));
+#endif
 	    dropx(pen);
 	    return 1;
 	}
 
 	/* get paper to write on */
+/*JP
 	paper = getobj(write_on,"write on");
+*/
+	paper = getobj(write_on,"に書く");
 	if(!paper)
 		return(0);
+/*JP
 	typeword = (paper->oclass == SPBOOK_CLASS) ? "spellbook" : "scroll";
+*/
+	typeword = (paper->oclass == SPBOOK_CLASS) ? "魔法書" : "巻物";
 	if(Blind && !paper->dknown) {
+/*JP
 		You("don't know if that %s is blank or not!", typeword);
+*/
+		You("%sが白紙かどうかわからない！", typeword);
 		return(1);
 	}
 	paper->dknown = 1;
 	if(paper->otyp != SCR_BLANK_PAPER && paper->otyp != SPE_BLANK_PAPER) {
+/*JP
 		pline("That %s is not blank!", typeword);
+*/
+		pline("%sは白紙じゃない！", typeword);
 		exercise(A_WIS, FALSE);
 		return(1);
 	}
 
 	/* what to write */
+#if 0 /*JP*/
 	Sprintf(qbuf, "What type of %s do you want to write?", typeword);
 	getlin(qbuf, namebuf);
+#else
+	Sprintf(qbuf, "どの種の%sの呪文を書きますか？", typeword);
+	getlin(qbuf, tmp);
+
+	if(paper->oclass == SPBOOK_CLASS){
+	  Strcpy(namebuf, etrns_obj('+', tmp));
+	}
+	else{
+	  Strcpy(namebuf, etrns_obj('?', tmp));
+	}
+#endif
 	(void)mungspaces(namebuf);	/* remove any excess whitespace */
 	if(namebuf[0] == '\033' || !namebuf[0])
 		return(1);
@@ -138,22 +181,36 @@
 		}
 	}
 
+/*JP
 	There("is no such %s!", typeword);
+*/
+	pline("そのような%sはない！", typeword);
 	return 1;
 found:
 
 	if (i == SCR_BLANK_PAPER || i == SPE_BLANK_PAPER) {
+#if 0 /*JP*/
 		You_cant("write that!");
 		pline("It's obscene!");
+#else
+		pline("白紙に白紙を書く？！");
+		pline("そういうやりかたはちょっと不愉快だな！");
+#endif
 		return 1;
 	} else if (i == SPE_BOOK_OF_THE_DEAD) {
+/*JP
 		pline("No mere dungeon adventurer could write that.");
+*/
+		pline("一介の迷宮冒険家にはそれは書けない．");
 		return 1;
 	} else if (by_descr && paper->oclass == SPBOOK_CLASS &&
 		    !objects[i].oc_name_known) {
 		/* can't write unknown spellbooks by description */
 		pline(
+/*JP
 		  "Unfortunately you don't have enough information to go on.");
+*/
+		  "残念ながらそれを書くだけの十分な知識がない．");
 		return 1;
 	}
 
@@ -169,7 +226,10 @@
 	/* see if there's enough ink */
 	basecost = cost(new_obj);
 	if(pen->spe < basecost/2)  {
+/*JP
 		Your("marker is too dry to write that!");
+*/
+		Your("マーカは乾きすぎておりうまく書けなかった！");
 		obfree(new_obj, (struct obj *) 0);
 		return(1);
 	}
@@ -182,14 +242,23 @@
 	/* dry out marker */
 	if (pen->spe < actualcost) {
 		pen->spe = 0;
+/*JP
 		Your("marker dries out!");
+*/
+		pline("書いている途中でマーカは乾ききった！");
 		/* scrolls disappear, spellbooks don't */
 		if (paper->oclass == SPBOOK_CLASS) {
 			pline_The(
+/*JP
 		       "spellbook is left unfinished and your writing fades.");
+*/
+			"魔法書には書ききれなかった．そして書いた文字は消えてしまった．");
 			update_inventory();	/* pen charges */
 		} else {
+/*JP
 			pline_The("scroll is now useless and disappears!");
+*/
+			pline_The("巻物は使いものにならなくなって消滅した！");
 			useup(paper);
 		}
 		obfree(new_obj, (struct obj *) 0);
@@ -201,19 +270,33 @@
 	if(!(objects[new_obj->otyp].oc_name_known) &&
 	   !(objects[new_obj->otyp].oc_uname) &&
 	   (rnl(Role_if(PM_WIZARD) ? 3 : 15))) {
+#if 0 /*JP*/
 		You("%s to write that!", by_descr ? "fail" : "don't know how");
+#else
+		You("%s！", by_descr ? "書くのに失敗した" : 
+		    "どうやって書くのか知らない");
+#endif
 		/* scrolls disappear, spellbooks don't */
 		if (paper->oclass == SPBOOK_CLASS) {
 			You(
+/*JP
        "write in your best handwriting:  \"My Diary\", but it quickly fades.");
+*/
+       "丁寧に書いた：「我が日記」．しかしあっと言う間に消えてしまった．");
 			update_inventory();	/* pen charges */
 		} else {
 			if (by_descr) {
 			    Strcpy(namebuf, OBJ_DESCR(objects[new_obj->otyp]));
 			    wipeout_text(namebuf, (6+MAXULEV - u.ulevel)/6, 0);
 			} else
+/*JP
 			    Sprintf(namebuf, "%s was here!", plname);
+*/
+			    Sprintf(namebuf, "%sはここにあり！", plname);
+/*JP
 			You("write \"%s\" and the scroll disappears.", namebuf);
+*/
+			You("「%s」と書いた．すると巻物は消えてしまった．", namebuf);
 			useup(paper);
 		}
 		obfree(new_obj, (struct obj *) 0);
@@ -226,17 +309,28 @@
 	/* success */
 	if (new_obj->oclass == SPBOOK_CLASS) {
 		/* acknowledge the change in the object's description... */
+#if 0 /*JP*/
 		pline_The("spellbook warps strangely, then turns %s.",
 		      OBJ_DESCR(objects[new_obj->otyp]));
+#else
+		pline("魔法書は妙に反りかえり，そして%sになった",
+		      jtrns_obj('+', OBJ_DESCR(objects[new_obj->otyp])));
+#endif
 	}
 	new_obj->blessed = (curseval > 0);
 	new_obj->cursed = (curseval < 0);
 #ifdef MAIL
 	if (new_obj->otyp == SCR_MAIL) new_obj->spe = 1;
 #endif
+#if 0 /*JP*/
 	new_obj = hold_another_object(new_obj, "Oops!  %s out of your grasp!",
 					       The(aobjnam(new_obj, "slip")),
 					       (const char *)0);
+#else
+	new_obj = hold_another_object(new_obj, "おっと！%sはあなたの手から滑り落ちた",
+					       xname(new_obj),
+					       (const char *)0);
+#endif
 	return(1);
 }
 
diff -aurN slashem-0.0.7E6F2/src/zap.c jslashem-0.0.7E6F2-J0.0.8/src/zap.c
--- slashem-0.0.7E6F2/src/zap.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/src/zap.c	2004-08-05 16:34:16.000000000 +0900
@@ -2,6 +2,14 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	(c) Issei Numata, Naoki Hamada, Shigehiro Miyashita, 1994-2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.0.7 Copyright (c) Miyaso Masaki, Shiganai Sakusha, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 /* Disintegration rays have special treatment; corpses are never left.
@@ -51,9 +59,13 @@
 STATIC_VAR const char are_blinded_by_the_flash[];
 extern const char * const flash_types[];
 #else
+/*JP
 STATIC_VAR const char are_blinded_by_the_flash[] = "are blinded by the flash!";
+*/
+STATIC_VAR const char are_blinded_by_the_flash[] = "まばゆい光で目が見えなくなった！";
 
 const char * const flash_types[] = {	/* also used in buzzmu(mcastu.c) */
+#if 0 /*JP*/
 	"magic missile",	/* Wands must be 0-9 */
 	"bolt of fire",
 	"bolt of cold",
@@ -64,7 +76,20 @@
 	"",
 	"",
 	"",
+#else
+	"魔法の矢",	/* Wands must be 0-9 */
+	"火の閃光",
+	"氷の閃光",
+	"眠り光線",
+	"死の光線",
+	"稲妻の閃光",
+	"",
+	"",
+	"",
+	"",
+#endif
 
+#if 0 /*JP*/
 	"magic missile",	/* Spell equivalents must be 10-19 */
 	"fireball",
 	"cone of cold",
@@ -75,7 +100,20 @@
 	"stream of acid",
 	"",
 	"",
+#else
+	"魔法の矢",	/* Spell equivalents must be 10-19 */
+	"火の玉",
+	"冷気",
+	"眠り光線",
+	"死の指",
+	"稲妻の閃光",    /* New spell & used for retribution */
+	"毒霧",  /*WAC New spells acid + poison*/
+	"酸の旋風",
+	"",
+	"",
+#endif
 
+#if 0 /*JP*/
 	"blast of missiles",	/* Dragon breath equivalents 20-29*/
 	"blast of fire",
 	"blast of frost",
@@ -86,7 +124,20 @@
 	"blast of acid",
 	"",
 	"",
+#else
+	"魔法の矢の息",	/* Dragon breath equivalents 20-29*/
+	"火の息",
+	"氷の息",
+	"睡眠ガスの息",
+	"分解の息",
+	"稲妻の息",
+	"毒ガスの息",
+	"酸の息",
+	"",
+	"",
+#endif
 
+#if 0 /*JP*/
 	"magical blast",        /* Megaspell equivalents must be 30-39 */
 	"fireball",             /*Should be same as explosion names*/
 	"ball of cold",
@@ -97,10 +148,23 @@
 	"splash of acid",
 	"",
 	""
+#else
+	"魔法の風",        /* Megaspell equivalents must be 30-39 */
+	"火の玉",             /*Should be same as explosion names*/
+	"氷の玉",
+	"",
+	"",
+	"雷玉",
+	"毒の雲",
+	"酸のしぶき",
+	"",
+	""
+#endif
 };
 
 /* Yells for Megaspells*/
 const char *yell_types[] = {    /*10 different beam types*/
+#if 0 /*JP*/
 	"With the wisdom of Merlin!",  /* Magic */ 
 		/* Merlin was the wizard who advised King Arthur */ 
 	"The rage of Huitzilopochtli!", /* Fire */ 
@@ -120,6 +184,26 @@
 		 * Ragnarok 
 		 */
 	"The anger of the Mad Chemist!", /* Acid */
+#else
+	"マーリンの知識と共に！",  /* Magic */ 
+		/* マーリンはアーサー王の相談役である魔法使い */ 
+	"ウィツロポチトリの情熱よ！", /* Fire */ 
+		/* ウィツロポチトリはアステカ神話の太陽神 */ 
+	"デメテルの悲しみよ！", /* Frost */
+		/* デメテル - 彼女の娘であるペルセフォネがさらわれたとき、
+		 * 	彼女の嘆きにより冬のようになってしまった。ギリシャ神話。
+		 */
+	"ヒュプノスの安らぎ", /* Sleep */ 
+		/* ヒュプノス - ギリシャ神話の眠りの神 */
+	"カーリーの憤怒", /* Disint */
+		/* カーリーはヒンズー教の死と破壊の神 */
+	"バルカンの炉より来たれ！", /* Lightning*/ 
+		/* バルカンとはゼウスの雷の炉 */
+	"ヨルムンガンドの牙より来たれ", /* Poison gas */ 
+		/* 北欧神話の大蛇。  毒はラグナロクで空と海にわだかまる
+		 */
+	"狂気の化学者の怒り！", /* Acid */
+#endif
 	"",
 	""
 };
@@ -136,7 +220,10 @@
 	boolean reveal_invis = FALSE;
 	boolean dbldam = Role_if(PM_KNIGHT) && u.uhave.questart;
 	int dmg, otyp = otmp->otyp;
+/*JP
 	const char *zap_type_text = "spell";
+*/
+	const char *zap_type_text = "魔法";
 	struct obj *obj;
 	boolean disguised_mimic = (mtmp->data->mlet == S_MIMIC &&
 				   mtmp->m_ap_type != M_AP_NOTHING);
@@ -145,16 +232,25 @@
 
 	if (objects[otyp].oc_class == SPBOOK_CLASS) {
 	    /* Is a spell */
-	    skilldmg = spell_damage_bonus(otyp);  
+	    skilldmg = spell_damage_bonus(otyp);
+/*JP
 	    zap_type_text = "spell";
+*/
+	    zap_type_text = "魔法";
+/*JP
 	} else zap_type_text = "wand";
+*/
+	} else zap_type_text = "杖";
 
 	if (u.uswallow && mtmp == u.ustuck)
 	    reveal_invis = FALSE;
 
 	switch(otyp) {
 	case WAN_STRIKING:
+/*JP
 		zap_type_text = "wand";
+*/
+		zap_type_text = "杖";
 		/* fall through */
 	case SPE_FORCE_BOLT:
 		reveal_invis = TRUE;
@@ -177,8 +273,14 @@
 			m_dowear(mtmp, FALSE); /* might want speed boots */
 			if (u.uswallow && (mtmp == u.ustuck) &&
 			    is_whirly(mtmp->data)) {
+/*JP
 				You("disrupt %s!", mon_nam(mtmp));
+*/
+				You("%sをバラバラにした！", mon_nam(mtmp));
+/*JP
 				pline("A huge hole opens up...");
+*/
+				pline("脱出できそうな穴が開いた．．．");
 				expels(mtmp, mtmp->data, TRUE);
 			}
 		}
@@ -218,7 +320,10 @@
 		       with their metabolism...) */
 		    if (mtmp->cham == CHAM_ORDINARY && !rn2(25)) {
 			if (canseemon(mtmp)) {
+/*JP
 			    pline("%s shudders!", Monnam(mtmp));
+*/
+			    pline("%sは身震いした！", Monnam(mtmp));
 			    makeknown(otyp);
 			}
 			/* dropped inventory shouldn't be hit by this zap */
@@ -252,7 +357,10 @@
 		Strcpy(nambuf, Monnam(mtmp));
 		mon_set_minvis(mtmp);
 		if (!oldinvis && knowninvisible(mtmp)) {
+/*JP
 		    pline("%s turns transparent!", nambuf);
+*/
+		    pline("%sは透明になった！", nambuf);
 		    makeknown(otyp);
 		}
 		break;
@@ -268,7 +376,10 @@
 		    !resist(mtmp, otmp->oclass, 0, NOTELL) &&
 		    (!mtmp->mflee || mtmp->mfleetim)) {
 		     if (canseemon(mtmp))
+/*JP
 			 pline("%s suddenly panics!", Monnam(mtmp));
+*/
+			 pline("%sはパニックに陥った！", Monnam(mtmp));
 		     monflee(mtmp, 0, FALSE, TRUE);
 		}
 		break;
@@ -283,8 +394,14 @@
 		wake = FALSE;	/* don't want immediate counterattack */
 		if (u.uswallow && mtmp == u.ustuck) {
 			if (is_animal(mtmp->data)) {
+/*JP
 				if (Blind) You_feel("a sudden rush of air!");
+*/
+				if (Blind) You("突然空気の激流を感じた！");
+/*JP
 				else pline("%s opens its mouth!", Monnam(mtmp));
+*/
+				else pline("%sは口を開いた！", Monnam(mtmp));
 			}
 			expels(mtmp, mtmp->data, TRUE);
 #ifdef STEED
@@ -334,11 +451,19 @@
 			    newsym(mtmp->mx, mtmp->my);
 			} else
 			    mimic_hit_msg(mtmp, otyp);
+#if 0 /*JP*/
 		    } else pline("%s %s%s better.", Monnam(mtmp),
 			  otmp->oclass == SPBOOK_CLASS ?
 			    "looks" : "begins to look",
 			  (otyp == SPE_EXTRA_HEALING ||
 			   otyp == WAN_EXTRA_HEALING) ? " much" : "" );
+#else
+		    } else pline("%sが%s元気に%sように見えた．", Monnam(mtmp),
+			  (otyp == SPE_EXTRA_HEALING ||
+			  otyp == WAN_EXTRA_HEALING) ? "とても" : "",
+			  otmp->oclass == SPBOOK_CLASS ?
+			    "なった" : "なってゆく");
+#endif
 		    makeknown(otyp);
 		}
 		/* Healing pets is a good thing ... */
@@ -377,10 +502,16 @@
 		    /* turn into flesh golem */
 		    if (newcham(mtmp, &mons[PM_FLESH_GOLEM], FALSE, FALSE)) {
 			if (canseemon(mtmp))
+/*JP
 			    pline("%s turns to flesh!", name);
+*/
+			    pline("%sの石化が解けた！", name);
 		    } else {
 			if (canseemon(mtmp))
+/*JP
 			    pline("%s looks rather fleshy for a moment.",
+*/
+			    pline("%sは一瞬石化が解けた．",
 				  name);
 		    }
 		} else
@@ -404,7 +535,10 @@
 			else {
 				mtmp->m_lev--;
 				if (canseemon(mtmp))
+/*JP
 					pline("%s suddenly seems weaker!", Monnam(mtmp));
+*/
+					pline("%sはとつぜん弱くなったような気がした！", Monnam(mtmp));
 			}
 		}
 		makeknown(otyp);
@@ -451,7 +585,10 @@
 		otmp->dknown = 1;	/* treat as "seen" */
 	    (void) display_minventory(mtmp, MINV_ALL, (char *)0);
 	} else {
+/*JP
 	    pline("%s is not carrying anything.", noit_Monnam(mtmp));
+*/
+	    pline("%sは何も持っていない．", Monnam(mtmp));
 	}
 }
 
@@ -732,7 +869,11 @@
 		    		    if (ghost->mtame)
 		    		    	savetame = ghost->mtame;
 		    		    if (canseemon(ghost))
+#if 0 /*JP*/
 		    		  	pline("%s is suddenly drawn into its former body!",
+#else
+		    		  	pline("%sは突然もとの体に引き込まれた！",
+#endif
 						Monnam(ghost));
 				    mondead(ghost);
 				    recorporealization = TRUE;
@@ -835,12 +976,24 @@
 	    if ((mtmp2 = revive(otmp)) != 0) {
 		++res;
 		if (youseeit) {
+#if 0 /*JP*/
 		    if (!once++) Strcpy(owner,
 					(mon == &youmonst) ? "Your" :
 					s_suffix(Monnam(mon)));
+#else
+		    if (!once++) Strcpy(owner,
+					(mon == &youmonst) ? "あなた" :
+					Monnam(mon));
+#endif
+/*JP
 		    pline("%s %s suddenly comes alive!", owner, corpse);
+*/
+		    pline("%sの%sは突然生命を帯びた！", owner, corpse);
 		} else if (canseemon(mtmp2))
+/*JP
 		    pline("%s suddenly appears!", Amonnam(mtmp2));
+*/
+		    pline("%sが突然現われた！", Amonnam(mtmp2));
 	    }
 	}
 	return res;
@@ -865,7 +1018,10 @@
 		if (obj->unpaid) {
 		    shkp = shop_keeper(*u.ushops);
 		    if (!shkp) return;
+/*JP
 		    Norep("You cancel an unpaid object, you pay for it!");
+*/
+		    Norep("あなたは未払のものを無力化してしまった．支払いをしなきゃ！");
 		    bill_dummy_object(obj);
 		}
 		break;
@@ -874,7 +1030,10 @@
 		shkp = shop_keeper(objroom);
 		if (!shkp || !inhishop(shkp)) return;
 		if (costly_spot(u.ux, u.uy) && objroom == *u.ushops) {
+/*JP
 		    Norep("You cancel it, you pay for it!");
+*/
+		    Norep("あなたは無効化してしまった．支払いをしなきゃ！");
 		    bill_dummy_object(obj);
 		} else
 		    (void) stolen_value(obj, obj->ox, obj->oy, FALSE, FALSE);
@@ -1189,7 +1348,10 @@
 	case METAL:
 	case MITHRIL:
 	    pm_index = PM_IRON_GOLEM;
+/*JP
 	    material = "metal ";
+*/
+	    material = "金属";
 	    break;
 	case COPPER:
 	case SILVER:
@@ -1197,54 +1359,91 @@
 	case GEMSTONE:
 	case MINERAL:
 	    pm_index = rn2(2) ? PM_STONE_GOLEM : PM_CLAY_GOLEM;
+/*JP
 	    material = "lithic ";
+*/
+	    material = "鉱物";
 	    break;
 	case 0:
 	case FLESH:
 	    /* there is no flesh type, but all food is type 0, so we use it */
 	    pm_index = PM_FLESH_GOLEM;
+/*JP
 	    material = "organic ";
+*/
+	    material = "有機物";
 	    break;
 	case WAX:
 		pm_index = PM_WAX_GOLEM;
+/*JP
 		material = "wax ";
+*/
+		material = "蝋";
 		break;
 	case WOOD:
 	    pm_index = PM_WOOD_GOLEM;
+/*JP
 	    material = "wood ";
+*/
+	    material = "木材";
 	    break;
 	case LEATHER:
 	    pm_index = PM_LEATHER_GOLEM;
+/*JP
 	    material = "leather ";
+*/
+	    material = "革";
 	    break;
 	case CLOTH:
 	    pm_index = PM_ROPE_GOLEM;
+/*JP
 	    material = "cloth ";
+*/
+	    material = "布";
 	    break;
 	case PLASTIC:
 	    pm_index = PM_PLASTIC_GOLEM;
+/*JP
 	    material = "plastic ";
+*/
+	    material = "樹脂";
 	    break;
 	case BONE:
 	    pm_index = PM_SKELETON;     /* nearest thing to "bone golem" */
+/*JP
 	    material = "bony ";
+*/
+	    material = "骨";
 	    break;
 	case GOLD:
 	    pm_index = PM_GOLD_GOLEM;
+/*JP
 	    material = "gold ";
+*/
+	    material = "金";
 	    break;
 	case GLASS:
 	    pm_index = PM_GLASS_GOLEM;
+/*JP
 	    material = "glassy ";
+*/
+	    material = "ガラス";
 	    break;
 	case PAPER:
 	    pm_index = PM_PAPER_GOLEM;
+/*JP
 	    material = "paper ";
+*/
+	    material = "紙";
 	    break;
 	default:
 	    /* if all else fails... */
 	    pm_index = PM_STRAW_GOLEM;
+#if 0 /*JP*/
 	    material = "";
+#else
+	    material = "物体";
+#endif
 	    break;
 	}
 
@@ -1255,7 +1454,10 @@
 	polyuse(obj, okind, (int)mons[pm_index].cwt);
 
 	if(mtmp && cansee(mtmp->mx, mtmp->my)) {
+/*JP
 	    pline("Some %sobjects meld, and %s arises from the pile!",
+*/
+	    pline("いくつかの%sが溶け，その山から%sが現われた！",
 		  material, a_monnam(mtmp));
 	}
 }
@@ -1368,7 +1570,10 @@
 	if (id == STRANGE_OBJECT && wizard && Polymorph_control) {
 	    int typ;
 	    char buf[BUFSZ];
+/*JP
 	    getlin("Polymorph into what? [type the name]", buf);
+*/
+	    getlin("どの種の怪物に変身しますか？[名前を入れてね]", buf);
 	    otmp = readobjnam(buf, (struct obj *)0, TRUE);
 	    if (otmp && otmp->oclass != obj->oclass) {
 		delobj(otmp);
@@ -1650,7 +1855,10 @@
 	if (unpoly /* && !rn2(20) */) {
 		set_obj_poly(otmp, obj);
 		if (is_hazy(otmp) && !Blind && carried(obj))
+/*JP
 			pline("%s seems hazy.", Yname2(otmp));
+*/
+			pline("%sは霞がかかったように見えた．", Yname2(otmp));
 	}
 #endif
 
@@ -1695,10 +1903,16 @@
 			    !costly_spot(u.ux, u.uy))
 			make_angry_shk(shkp, ox, oy);
 		    else {
+/*JP
 			pline("%s gets angry!", Monnam(shkp));
+*/
+			pline("%sは激怒した！", Monnam(shkp));
 			hot_pursuit(shkp);
 		    }
+/*JP
 		} else Norep("%s is furious!", Monnam(shkp));
+*/
+		} else Norep("%sは怒った！", Monnam(shkp));
 		if (!carried(otmp)) {
 		    if (costly_spot(u.ux, u.uy) && objroom == *u.ushops)
 			bill_dummy_object(obj);
@@ -1802,7 +2016,10 @@
 		obj->dknown = 1;
 		if (Is_container(obj) || obj->otyp == STATUE) {
 		    if (!obj->cobj)
+/*JP
 			pline("%s empty.", Tobjnam(obj, "are"));
+*/
+			pline("%sは空っぽだ．", xname(obj));
 		    else {
 			struct obj *o;
 			/* view contents (not recursively) */
@@ -1952,7 +2169,10 @@
 			if (mon) {
 			    delobj(obj);
 			    if (cansee(mon->mx, mon->my))
+/*JP
 				pline_The("figurine animates!");
+*/
+				pline("人形は動きだした！");
 			    break;
 			}
 			goto makecorpse;
@@ -1970,9 +2190,15 @@
 			if (herbivorous(youmonst.data) &&
 			    (!carnivorous(youmonst.data) ||
 			     Role_if(PM_MONK) || !u.uconduct.unvegetarian))
+/*JP
 			    Norep("You smell the odor of meat.");
+*/
+			    Norep("肉の悪臭が漂った．");
 			else
+/*JP
 			    Norep("You smell a delicious smell.");
+*/
+			    Norep("すばらしい香りだ！");
 			break;
 		    case WEAPON_CLASS:	/* crysknife */
 		    	/* fall through */
@@ -2038,7 +2264,10 @@
 	if(wand->spe < 0 || (wand->spe == 0 && rn2(121)))
 		return 0;
 	if(wand->spe == 0)
+/*JP
 		You("wrest one last charge from the worn-out wand.");
+*/
+		You("使いきった杖から最後の力をしぼりとった．");
 	wand->spe--;
 	return 1;
 }
@@ -2074,17 +2303,26 @@
 		case WAN_WISHING:
 			known = TRUE;
 			if(Luck + rn2(5) < 0) {
+/*JP
 				pline("Unfortunately, nothing happens.");
+*/
+				pline("残念ながら，何も起きなかった．");
 				break;
 			}
 			makewish();
 			break;
 		case WAN_ENLIGHTENMENT:
 			known = TRUE;
+/*JP
 			You_feel("self-knowledgeable...");
+*/
+			You("自分自身が判るような気がした．．．");
 			display_nhwindow(WIN_MESSAGE, FALSE);
 			enlightenment(FALSE);
+/*JP
 			pline_The("feeling subsides.");
+*/
+			pline("その感じはなくなった．");
 			exercise(A_WIS, TRUE);
 			break;
 	}
@@ -2103,7 +2341,10 @@
 	otmp->in_use = TRUE;	/* in case losehp() is fatal */
 	/* KMH, balance patch -- spells (not spellbooks) explode */
 	if (otmp->oclass != SPBOOK_CLASS)
+/*JP
 	pline("%s suddenly explodes!", The(xname(otmp)));
+*/
+	pline("%sは突然爆発した！", The(xname(otmp)));
 /*        losehp(d(otmp->spe+2,6), "exploding wand", KILLED_BY_AN);
         useup(otmp);*/
 	wand_explode (otmp, FALSE);
@@ -2118,7 +2359,10 @@
 	int	damage;
 
 	if(check_capacity((char *)0)) return(0);
+/*JP
 	obj = getobj(zap_syms, "zap");
+*/
+	obj = getobj(zap_syms, "振りかざす");
 	if(!obj) return(0);
 
 	check_unpaid(obj);
@@ -2138,13 +2382,21 @@
 		return(1);
 	} else if(!(objects[obj->otyp].oc_dir == NODIR) && !getdir((char *)0)) {
 		if (!Blind)
+/*JP
 		    pline("%s glows and fades.", The(xname(obj)));
+*/
+		    pline("%sは一瞬輝いた．", The(xname(obj)));
 		/* make him pay for knowing !NODIR */
 	} else if(!u.dx && !u.dy && !u.dz && !(objects[obj->otyp].oc_dir == NODIR)) {
 	    if ((damage = zapyourself(obj, TRUE)) != 0) {
+#if 0 /*JP:T*/
 		char buf[BUFSZ];
 		Sprintf(buf, "zapped %sself with a wand", uhim());
 		losehp(damage, buf, NO_KILLER_PREFIX);
+#else
+		losehp(damage, "自分自身の杖の力を浴びて",
+			KILLED_BY);
+#endif
 	    }
 	} else {
 
@@ -2160,7 +2412,10 @@
 		current_wand = 0;
 	}
 	if (obj && obj->spe < 0) {
+/*JP
 	    pline("%s to dust.", Tobjnam(obj, "turn"));
+*/
+	    pline("%sはちりとなった．", xname(obj));
 	    useup(obj);
 	}
 	update_inventory();	/* maybe used a charge */
@@ -2218,10 +2473,16 @@
 
 /*WAC Based off code that used to be the wizard patch mega fireball */
 	if (u.uinwater) {
+/*JP
 	    pline("You joking! In this weather?");
+*/
+	    pline("冗談言うなよ！こんなところでか？");
 	    return; 
 	} else if (Is_waterlevel(&u.uz)) { 
+/*JP
 	    You("better wait for the sun to come out.");
+*/
+	    You("太陽が出てくるまで待ったほうが賢明だろう．");
 	    return;
 	}
 	switch (abs(type) % 10)
@@ -2283,10 +2544,16 @@
 		case SPE_FORCE_BOLT:
 		    if(Antimagic) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			pline("Boing!");
+*/
+			pline("ボイン！");
 		    } else {
 			if (ordinary) {
+/*JP
 			    You("bash yourself!");
+*/
+			    You("自分自身を打ちつけた！");
 			    damage = d(2,12);
 			} else
 			    damage = d(1 + obj->spe,6);
@@ -2296,14 +2563,20 @@
 
 		/*WAC Add Spell Acid, Poison*/
 		case SPE_POISON_BLAST:
+/*JP
 		    poisoned("blast", A_DEX, "poisoned blast", 15);
+*/
+		    poisoned("息", A_DEX, "自分自身への毒吹き", 15);
 		    break;
 		case SPE_ACID_STREAM:
         	    /* KMH, balance patch -- new intrinsic */
         	    if (Acid_resistance) {
 			damage = 0;
         	    } else {
+/*JP
 			pline_The("acid burns!");
+*/
+			pline_The("酸を浴びた！");
 			damage = d(12,6);
 			exercise(A_STR, FALSE);
         	    }
@@ -2316,12 +2589,19 @@
 		/*WAC Added Spell Lightning*/
 		case SPE_LIGHTNING:
 		    if (!Shock_resistance) {
+/*JP
 			You("shock yourself!");
+*/
+			You("電撃をうけた！");
 			damage = d(12,6);
 			exercise(A_CON, FALSE);
 		    } else {
 			shieldeff(u.ux, u.uy);
+/*JP
 			You("zap yourself, but seem unharmed.");
+*/
+			You("自分に杖をふりかざしたが，怪我はしなかったようだ．");
+
 			ugolemeffects(AD_ELEC, d(12,6));
 		    }
 		    destroy_item(WAND_CLASS, AD_ELEC);
@@ -2336,7 +2616,10 @@
 		case WAN_FIREBALL:
 		    makeknown(WAN_FIREBALL);
 		case SPE_FIREBALL:
+/*JP
 		    You("explode a fireball on top of yourself!");
+*/
+		    Your("頭上で火の玉が爆発した！");
 		    explode(u.ux, u.uy, 11, d(6,6), WAND_CLASS, EXPL_FIERY);
 		    break;
 
@@ -2345,14 +2628,23 @@
 		case FIRE_HORN:
 		    if (Fire_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			You_feel("rather warm.");
+*/
+			You("ちょっと暖かく感じた．");
 			ugolemeffects(AD_FIRE, d(12,6));
 		    } else {
+/*JP
 			pline("You've set yourself afire!");
+*/
+			You("炎につつまれた！");
 			damage = d(12,6);
 		    }
 		    if (Slimed) {                    
+/*JP
 			pline("The slime is burned away!");
+*/
+			pline("スライムが焼け落ちた！");
 			Slimed = 0;
 		    }
 		    burn_away_slime();
@@ -2369,10 +2661,16 @@
 		case FROST_HORN:
 		    if (Cold_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			You_feel("a little chill.");
+*/
+			You("ちょっと冷たく感じた．");
 			ugolemeffects(AD_COLD, d(12,6));
 		    } else {
+/*JP
 			You("imitate a popsicle!");
+*/
+			You("アイスキャンデーのようになった！");
 			damage = d(12,6);
 		    }
 		    destroy_item(POTION_CLASS, AD_COLD);
@@ -2384,10 +2682,16 @@
 		case SPE_MAGIC_MISSILE:
 		    if(Antimagic) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			pline_The("missiles bounce!");
+*/
+			pline("魔法の矢ははねかえった！");
 		    } else {
 			damage = d(4,6);
+/*JP
 			pline("Idiot!  You've shot yourself!");
+*/
+			pline("何やってんだ！あなたは自分自身を撃った！");
 		    }
 		    break;
 		case WAN_POLYMORPH:
@@ -2405,10 +2709,16 @@
 			makeknown(obj->otyp);
 		case SPE_DRAIN_LIFE:
 			if (!Drain_resistance) {
+/*JP
 				losexp("life drainage", FALSE);
+*/
+				losexp("生命力を吸収されて", FALSE);
 			} else {
 				shieldeff(u.ux, u.uy);
+/*JP
 				pline("Boing!");
+*/
+				pline("ボイン！");
 			}
 			damage = 0;	/* No additional damage */
 			break;
@@ -2420,7 +2730,10 @@
 
 		    if (BInvis && uarmc->otyp == MUMMY_WRAPPING) {
 			/* A mummy wrapping absorbs it and protects you */
+/*JP
 		        You_feel("rather itchy under your %s.", xname(uarmc));
+*/
+		        You("%sの下がムズムズした．", xname(uarmc));
 		        break;
 		    }
 		    if (ordinary || !rn2(10)) {	/* permanent */
@@ -2438,9 +2751,15 @@
 		case WAN_SPEED_MONSTER:
 		    if (!(HFast & INTRINSIC)) {
 			if (!Fast)
+/*JP
 			    You("speed up.");
+*/
+			    You("動きが速くなった．");
 			else
+/*JP
 			    Your("quickness feels more natural.");
+*/
+			    You("速さに慣れてきた．");
 			makeknown(WAN_SPEED_MONSTER);
 			exercise(A_DEX, TRUE);
 		    }
@@ -2449,13 +2768,19 @@
 		    HFast |= FROMOUTSIDE;
 		    break;
 		case WAN_HEALING:
+/*JP
 		   You("begin to feel better.");
+*/
+		   You("気分がよくなってきたような気がする．");
 		   healup(d(5,6),0,0,0);
 		   exercise(A_STR, TRUE);
 		   makeknown(WAN_HEALING);
 		break;
 		case WAN_EXTRA_HEALING:
+/*JP
 		   You("feel much better.");
+*/
+		   You("気分がとてもよくなってきたような気がする．");
 		   healup(d(6,8),0,0,0);
 		   make_hallucinated(0L,TRUE,0L);
 		   exercise(A_STR, TRUE);
@@ -2464,7 +2789,10 @@
 		break;
 
 		case WAN_FEAR:
+/*JP
 			You("suddenly panic!");
+*/
+			You("急にパニックに陥った！");
 			if(!HConfusion)
 				make_confused(HConfusion + rnd(10),FALSE);
 			break;
@@ -2474,9 +2802,15 @@
 		case SPE_SLEEP:
 		    if(Sleep_resistance) {
 			shieldeff(u.ux, u.uy);
+/*JP
 			You("don't feel sleepy!");
+*/
+			You("眠くならない！");
 		    } else {
+/*JP
 			pline_The("sleep ray hits you!");
+*/
+			pline("眠り光線があなたに命中した！");
 			fall_asleep(-rnd(50), TRUE);
 		    }
 		    break;
@@ -2497,19 +2831,40 @@
 		case SPE_FINGER_OF_DEATH:
 		    if (nonliving(youmonst.data) || is_demon(youmonst.data)) {
 			pline((obj->otyp == WAN_DEATH) ?
+#if 0 /*JP*/
 			  "The wand shoots an apparently harmless beam at you."
 			  : "You seem no deader than before.");
+#else
+			  "杖の光線はどうやらあなたに影響を与えないもののようだ．"
+			  : "あなたはこれ以上死ねないようだ．");
+#endif
 			break;
 		    }
 		    if (Invulnerable) {
+/*JP
 			pline("You are unharmed!");
+*/
+			pline("あなたは傷つかない！");
 			break;
 		    }
+#if 0 /*JP*/
 		    killer_format = NO_KILLER_PREFIX;
+#else
+		    killer_format = KILLED_BY;
+#endif
+/*JP
 		    Sprintf(buf, "shot %sself with a death ray", uhim());
+*/
+		    Strcpy(buf, "自分が撃った死の光線によって");
 		    killer = buf;
+/*JP
 		    You("irradiate yourself with pure energy!");
+*/
+		    You("エネルギーを自分自身に照射した．");
+/*JP
 		    You("die.");
+*/
+		    pline("あなたは死にました．");
 		    makeknown(obj->otyp);
 			/* They might survive with an amulet of life saving */
 		    done(DIED);
@@ -2520,19 +2875,32 @@
 		case SPE_TURN_UNDEAD:
 		    (void) unturn_dead(&youmonst);
 		    if (is_undead(youmonst.data)) {
+#if 0 /*JP:T*/
 			You_feel("frightened and %sstunned.",
 			     Stunned ? "even more " : "");
+#else
+			You("恐怖し%sくらくらした．",
+			     Stunned ? "さらに" : "");
+#endif
 			make_stunned(HStun + rnd(30), FALSE);
 		    } else
+/*JP
 			You("shudder in dread.");
+*/
+			You("恐怖で震えた．");
 		    break;
 
 		case SPE_HEALING:
 		case SPE_EXTRA_HEALING:
 		    healup(obj->otyp == SPE_HEALING ? rnd(10) + 4 : d(3,8)+6,
 			   0, FALSE, FALSE);
+#if 0 /*JP:T*/
 		    You_feel("%sbetter.",
 			obj->otyp == SPE_EXTRA_HEALING ? "much " : "");
+#else
+		    You("%s気分がよくなった．",
+			obj->otyp == SPE_EXTRA_HEALING ? "とても" : "");
+#endif
 		    break;
 
 		case WAN_LIGHT:	/* (broken wand) */
@@ -2554,7 +2922,10 @@
 		case WAN_OPENING:
 		    if (Punished) makeknown(WAN_OPENING);
 		case SPE_KNOCK:
+/*JP
 		    if (Punished) Your("chain quivers for a moment.");
+*/
+		    if (Punished) Your("鎖は一瞬震えた．");
 		    break;
 		case WAN_DIGGING:
 		case SPE_DIG:
@@ -2688,12 +3059,24 @@
 {
 	boolean	youdefend = (mdef == &youmonst);
 	static const char writing_vanishes[] =
+/*JP
 				"Some writing vanishes from %s head!";
+*/
+				"何かの文字が%sの頭から消えた！";
+#if 0 /*JP:T*/
 	static const char your[] = "your";	/* should be extern */
+#else
+	static const char your[] = "あなた";	/* should be extern */
+#endif
 
 	if (youdefend) 
+#if 0 /*JP:T*/
 	    You(!Hallucination? "are covered in sparkling lights!"
 			      : "are enveloped by psychedelic fireworks!");
+#else
+	    You(!Hallucination? "きらめく輝きに覆われた！"
+			      : "サイケデリックな花火に包まれた！");
+#endif
 
 	if (youdefend ? (!youattack && Antimagic)
 		      : resist(mdef, obj->oclass, 0, NOTELL))
@@ -2721,7 +3104,10 @@
 	    }
 	    /* Indicate to the hero that something happened */
 	    if (did_cancel && !self_cancel && youdefend)
+/*JP
 		You_feel("a strange sense of loss.");
+*/
+		You_feel("何かを失ったような奇妙な気分になった．");
 	}
 
 	/* now handle special cases */
@@ -2730,7 +3116,10 @@
 		if ((u.umonnum == PM_CLAY_GOLEM) && !Blind)
 		    pline(writing_vanishes, your);
 		if (Unchanging)
+/*JP
 		    Your("amulet grows hot for a moment, then cools.");
+*/
+		    Your("魔除けはしばらく熱くなり，やがて元に戻った．");
 		else {
 		    u.uhp -= mons[u.umonnum].mlevel;
 		    u.uhpmax -= mons[u.umonnum].mlevel;
@@ -2782,13 +3171,22 @@
 	case WAN_PROBING:
 	    ptmp = 0;
 	    if (u.dz < 0) {
+/*JP
 		You("probe towards the %s.", ceiling(x,y));
+*/
+		You("上方の%sを調べた．", ceiling(x,y));
 	    } else {
 		ptmp += bhitpile(obj, bhito, x, y);
+/*JP
 		You("probe beneath the %s.", surface(x,y));
+*/
+		You("下方の%sを調べた．", surface(x,y));
 		ptmp += display_binventory(x, y, TRUE);
 	    }
+/*JP
 	    if (!ptmp) Your("probe reveals nothing.");
+*/
+	    if (!ptmp) pline("調査の結果何もないことがわかった．");
 	    return TRUE;	/* we've done our own bhitpile */
 	case WAN_OPENING:
 	case SPE_KNOCK:
@@ -2800,7 +3198,10 @@
 			/* can't use the stairs down to quest level 2 until
 			   leader "unlocks" them; give feedback if you try */
 			on_level(&u.uz, &qstart_level) && !ok_to_quest()) {
+/*JP
 		pline_The("stairs seem to ripple momentarily.");
+*/
+		pline("階段が一瞬揺れたように見えた．");
 		disclose = TRUE;
 	    }
 	    break;
@@ -2823,10 +3224,16 @@
 			!Is_airlevel(&u.uz) && !Is_waterlevel(&u.uz) &&
 			!Underwater && !Is_qstart(&u.uz)) {
 		/* similar to zap_dig() */
+/*JP
 		pline("A rock is dislodged from the %s and falls on your %s.",
+*/
+		pline("%sから岩が落ちてあなたの%sに命中した．",
 		      ceiling(x, y), body_part(HEAD));
 		losehp(rnd((uarmh && is_metallic(uarmh)) ? 2 : 6),
+/*JP
 		       "falling rock", KILLED_BY_AN);
+*/
+		       "落岩で", KILLED_BY_AN);
 		if ((otmp = mksobj_at(ROCK, x, y, FALSE, FALSE)) != 0) {
 		    (void)xname(otmp);	/* set dknown, maybe bknown */
 		    stackobj(otmp);
@@ -2835,14 +3242,25 @@
 	    } else if (!striking && ttmp && ttmp->ttyp == TRAPDOOR && u.dz > 0) {
 		if (!Blind) {
 			if (ttmp->tseen) {
+/*JP
 				pline("A trap door beneath you closes up then vanishes.");
+*/
+				pline("あなたの下にある落し扉が閉じて消えた．");
 				disclose = TRUE;
 			} else {
+#if 0 /*JP:T*/
 				You("see a swirl of %s beneath you.",
 					is_ice(x,y) ? "frost" : "dust");
+#else
+				pline("あなたの下で%sのうずが見えた．",
+					is_ice(x,y) ? "霜" : "ほこり");
+#endif
 			}
 		} else {
+/*JP
 			You_hear("a twang followed by a thud.");
+*/
+			You_hear("ゴツン，ビーンという音を聞いた．");
 		}
 		deltrap(ttmp);
 		ttmp = (struct trap *)0;
@@ -2854,7 +3272,10 @@
 		     Underwater || (Is_qstart(&u.uz) && u.dz < 0)) {
 		pline(nothing_happens);
 	    } else if (u.dz < 0) {	/* we should do more... */
+/*JP
 		pline("Blood drips on your %s.", body_part(FACE));
+*/
+		pline("血があなたの%sへしたたり落ちてきた．", body_part(FACE));
 	    } else if (u.dz > 0 && !OBJ_AT(u.ux, u.uy)) {
 		/*
 		Print this message only if there wasn't an engraving
@@ -2865,10 +3286,18 @@
 		    if (is_pool(u.ux, u.uy) || is_ice(u.ux, u.uy))
 			pline(nothing_happens);
 		    else
+#if 0 /*JP:T*/
 			pline("Blood %ss %s your %s.",
 			      is_lava(u.ux, u.uy) ? "boil" : "pool",
 			      Levitation ? "beneath" : "at",
 			      makeplural(body_part(FOOT)));
+#else
+ 			pline("%s%s%s．",
+ 			      makeplural(body_part(FOOT)),
+			      Levitation ? "の下" : "元",
+			      is_lava(u.ux, u.uy) ?
+			      "で血が沸騰した" : "に血だまりが出来た");
+#endif
 		}
 	    }
 	    break;
@@ -2900,9 +3329,15 @@
 		case SPE_STONE_TO_FLESH:
 		    if (e->engr_type == ENGRAVE) {
 			/* only affects things in stone */
+#if 0 /*JP:T*/
 			pline_The(Hallucination ?
 			    "floor runs like butter!" :
 			    "edges on the floor get smoother.");
+#else
+			pline(Hallucination ?
+			    "床がバターのように走っていった！" :
+			    "床の縁がなめらかになった．");
+#endif
 			wipe_engr_at(x, y, d(2,4));
 			}
 		    break;
@@ -2956,7 +3391,10 @@
 	    }
 	    /* give a clue if obj_zapped */
 	    if (obj_zapped)
+/*JP
 		You_feel("shuddering vibrations.");
+*/
+		You("ぞっとする振動を感じた．"); 
 
 	} else if (objects[otyp].oc_dir == NODIR) {
 	    zapnodir(obj);
@@ -2982,7 +3420,10 @@
 		            || (otyp >= SPE_LIGHTNING && otyp <= SPE_ACID_STREAM))
 					/*WAC - use sigil of discharge */
 		            && (tech_inuse(T_SIGIL_DISCHARGE))) {
+/*JP
 				You("yell \"%s\"",yell_types[otyp - SPE_MAGIC_MISSILE]);
+*/
+				You("は叫んだ．『%s』",yell_types[otyp - SPE_MAGIC_MISSILE]);
 				display_nhwindow(WIN_MESSAGE, TRUE);    /* --More-- */
 				buzz(ZT_MEGA(otyp - SPE_MAGIC_MISSILE),
 						u.ulevel/2 + 1 + skilldmg,
@@ -3081,7 +3522,10 @@
 	/* force == 0 occurs e.g. with sleep ray */
 	/* note that large force is usual with wands so that !! would
 		require information about hand/weapon/wand */
+/*JP
 	return (const char *)((force < 0) ? "?" : (force <= 4) ? "." : "!");
+*/
+	return (const char *)((force < 0) ? "？" : (force <= 4) ? "．" : "！");
 }
 
 void
@@ -3090,11 +3534,21 @@
 register struct monst *mtmp;
 register const char *force;		/* usually either "." or "!" */
 {
+#if 1 /*JP*/
+	if(*force == '.') force = "．";
+	if(*force == '!') force = "！";
+#endif
 	if((!cansee(bhitpos.x,bhitpos.y) && !canspotmon(mtmp) &&
 	     !(u.uswallow && mtmp == u.ustuck))
 	   || !flags.verbose)
+/*JP
 	    pline("%s %s it.", The(str), vtense(str, "hit"));
+*/
+	    pline("%sは何かに命中した．", The(str));
+/*JP
 	else pline("%s %s %s%s", The(str), vtense(str, "hit"),
+*/
+	else pline("%sは%sに命中した%s", The(str),
 		   mon_nam(mtmp), force);
 }
 
@@ -3103,10 +3557,17 @@
 register const char *str;
 register struct monst *mtmp;
 {
+#if 0 /*JP:T*/
 	pline("%s %s %s.", The(str), vtense(str, "miss"),
 	      ((cansee(bhitpos.x,bhitpos.y) || canspotmon(mtmp))
 	       && flags.verbose) ?
 	      mon_nam(mtmp) : "it");
+#else
+	pline("%sは%sからはずれた．", The(str),
+	      ((cansee(bhitpos.x,bhitpos.y) || canspotmon(mtmp))
+	       && flags.verbose) ?
+	      mon_nam(mtmp) : "何者か");
+#endif
 }
 #endif /*OVL0*/
 #ifdef OVL1
@@ -3358,15 +3819,25 @@
 		struct trap *t;
 		if ((bobj = sobj_at(BOULDER, x, y)) != 0) {
 		    if (cansee(x,y))
+#if 0 /*JP:T*/
 			pline("%s hits %s.",
 			      The(distant_name(obj, xname)), an(xname(bobj)));
+#else
+			pline("%sは%sに命中した．",
+			      The(distant_name(obj, xname)), an(xname(bobj)));
+#endif
 		    range = 0;
 		} else if (obj == uball) {
 		    if (!test_move(x - ddx, y - ddy, ddx, ddy, TEST_MOVE)) {
 			/* nb: it didn't hit anything directly */
 			if (cansee(x,y))
+#if 0 /*JP:T*/
 			    pline("%s jerks to an abrupt halt.",
 				  The(distant_name(obj, xname))); /* lame */
+#else
+			    pline("%sはとつぜんガクンと止まった．",
+				  The(distant_name(obj, xname))); /* lame */
+#endif
 			range = 0;
 		    } else if (In_sokoban(&u.uz) && (t = t_at(x, y)) != 0 &&
 			       (t->ttyp == PIT || t->ttyp == SPIKED_PIT ||
@@ -3394,7 +3865,10 @@
         }
 
 	if(shopdoor)
+/*JP
 	    pay_for_damage("destroy", FALSE);
+*/
+	    pay_for_damage("破壊する", FALSE);
 
 	return (struct monst *)0;
 }
@@ -3436,11 +3910,17 @@
 			if(Fumbling || rn2(20) >= ACURR(A_DEX)) {
 				/* we hit ourselves */
 				(void) thitu(10, rnd(10), (struct obj *)0,
+/*JP
 					"boomerang");
+*/
+					"ブーメラン");
 				break;
 			} else {	/* we catch it */
 				tmp_at(DISP_END, 0);
+/*JP
 				You("skillfully catch the boomerang.");
+*/
+				You("上手にブーメランを掴まえた．");
 				return(&youmonst);
 			}
 		}
@@ -3630,6 +4110,13 @@
 {
 	int dam = 0;
 
+#if 1 /*JP*/
+	char buf[BUFSZ];
+
+	Sprintf(buf, "%sによって", fltxt);
+	fltxt = buf;
+#endif
+
 	/* KMH -- Don't bother checking if the ray hit our steed.
 	 * 1.  Assume monsters aim to hit you.
 	 * 2.  If hit by own beam, let the hero suffer.
@@ -3641,7 +4128,10 @@
 	case ZT_MAGIC_MISSILE:
 	    if (Antimagic) {
 		shieldeff(sx, sy);
+/*JP
 		pline_The("missiles bounce off!");
+*/
+		pline("魔法の矢は反射した！");
 	    } else {
 		dam = d(nd,6);
 		exercise(A_STR, FALSE);
@@ -3650,13 +4140,19 @@
 	case ZT_FIRE:
 	    if (Fire_resistance) {
 		shieldeff(sx, sy);
+/*JP
 		You("don't feel hot!");
+*/
+		You("熱さを感じない！");
 		ugolemeffects(AD_FIRE, d(nd, 6));
 	    } else {
 		dam = d(nd, 6);
 	    }
 	    if (Slimed) {            
+/*JP
 		pline("The slime is burned away!");
+*/
+		pline("スライムが焼け落ちた！");
 		Slimed = 0;
 	    }
 	    burn_away_slime();
@@ -3669,7 +4165,10 @@
 	case ZT_COLD:
 	    if (Cold_resistance) {
 		shieldeff(sx, sy);
+/*JP
 		You("don't feel cold.");
+*/
+		You("冷たさを感じない．");
 		ugolemeffects(AD_COLD, d(nd, 6));
 	    } else {
 		dam = d(nd, 6);
@@ -3679,7 +4178,10 @@
 	case ZT_SLEEP:
 	    if (Sleep_resistance) {
 		shieldeff(u.ux, u.uy);
+/*JP
 		You("don't feel sleepy.");
+*/
+		You("眠くならない．");
 	    } else {
 		fall_asleep(-d(nd,25), TRUE); /* sleep ray */
 	    }
@@ -3687,7 +4189,10 @@
 	case ZT_DEATH:
 	    if (abs(type) == ZT_BREATH(ZT_DEATH)) {
 		if (Disint_resistance) {
+/*JP
 		    You("are not disintegrated.");
+*/
+		    You("分解されない．");
 		    break;
 		} else if (uarms) {
 		    /* destroy shield; other possessions are safe */
@@ -3706,20 +4211,32 @@
 		if (uarmu) (void) destroy_arm(uarmu);
 #endif
                 if (Invulnerable) {
+/*JP
                         pline("You are unharmed!");
+*/
+			You("傷つかない！");
                         break;
                 }
 	    } else if (nonliving(youmonst.data) || is_demon(youmonst.data)) {
 		shieldeff(sx, sy);
+/*JP
 		You("seem unaffected.");
+*/
+		You("影響を受けないようだ．");
 		break;
 	    } else if (Antimagic) {
 		shieldeff(sx, sy);
+/*JP
 		You("aren't affected.");
+*/
+		You("影響を受けない．");
 		break;
             } else if (Invulnerable) {
                 dam = 0;
+/*JP
                 pline("You are unharmed!");
+*/
+		You("傷つかない！");
                 break;
 	    }
 	    killer_format = KILLED_BY_AN;
@@ -3731,7 +4248,10 @@
 	case ZT_LIGHTNING:
 	    if (Shock_resistance) {
 		shieldeff(sx, sy);
+/*JP
 		You("aren't affected.");
+*/
+		You("影響を受けない．");
 		ugolemeffects(AD_ELEC, d(nd, 6));
 	    } else {
 		dam = d(nd, 6);
@@ -3741,14 +4261,24 @@
 	    if (!rn2(3)) destroy_item(RING_CLASS, AD_ELEC);
 	    break;
 	case ZT_POISON_GAS:
+#if 0 /*JP*/
 	    poisoned("blast", A_DEX, "poisoned blast", 15);
+#else
+	    if (abs(type) < ZT_BREATH(0))
+		poisoned("息", A_DEX, "毒吹き", 15);
+	    else
+		poisoned("息", A_DEX, "毒の息", 15);
+#endif
 	    break;
 	case ZT_ACID:
 		/* KMH, balance patch -- new intrinsic */
 	    if (Acid_resistance) {
 		dam = 0;
 	    } else {
+/*JP
 		pline_The("acid burns!");
+*/
+		pline("酸で焼けた！");
 		dam = d(nd,6);
 		exercise(A_STR, FALSE);
 	    }
@@ -3814,9 +4344,19 @@
 		    cnt += delquan;
 		    if (give_feedback) {
 			if (delquan > 1)
+#if 0 /*JP*/
 			    pline("%ld %s burn.", delquan, buf2);
+#else
+			    pline("%ld%sの%sが燃えた．", 
+				  delquan, 
+				  obj->oclass == SCROLL_CLASS ? "枚" : "冊",
+				  buf2);
+#endif
 			else
+/*JP
 			    pline("%s burns.", An(buf1));
+*/
+			    pline("%sは燃えた．", buf1);
 		    }
 		}
 	    }
@@ -3897,7 +4437,10 @@
 	if(type < 0) return;
 	tmp = zhitm(u.ustuck, type, nd, &otmp);
 	if(!u.ustuck)	u.uswallow = 0;
+/*JP
 	else	pline("%s rips into %s%s",
+*/
+	else	pline("%sは%sをひきさいた%s",
 		      The(fltxt), mon_nam(u.ustuck), exclam(tmp));
 	/* Using disintegration from the inside only makes a hole... */
 	if (tmp == MAGIC_COOKIE)
@@ -4001,7 +4544,10 @@
 		    if(cansee(mon->mx,mon->my)) {
 			hit(fltxt, mon, exclam(0));
 			shieldeff(mon->mx, mon->my);
+/*JP
 			(void) mon_reflects(mon, "But it reflects from %s %s!");
+*/
+			(void) mon_reflects(mon, "しかしそれは%sの%sで反射した！");
 		    }
 		    dx = -dx;
 		    dy = -dy;
@@ -4019,6 +4565,7 @@
                     if (mon->data == &mons[PM_DEATH] && abstype == ZT_DEATH && tmp != MAGIC_COOKIE) {
 			if (canseemon(mon)) {
 			    hit(fltxt, mon, ".");
+#if 0 /*JP:T*/
 			    pline("%s absorbs the deadly %s!", Monnam(mon),
 /*make this abs(type) rather than just type to catch those monsters*/
 /*actually,  breath should always be disintegration....*/
@@ -4026,6 +4573,12 @@
 					"blast" : "ray");
 			    pline("It seems even stronger than before.");
 /*It heals to max hitpoints.  Max hp is raised in zhitm */
+#else
+			    pline("%sは死の%sを吸収した！", Monnam(mon),
+				  abs(type) == ZT_BREATH(ZT_DEATH) ?
+					"息" : "光線");
+			    pline("さらに強くなったような気さえする．");
+#endif
 			}
 			mon->mhp = mon->mhpmax;
 			break; /* Out of while loop */
@@ -4036,12 +4589,23 @@
                     if (is_rider(mon->data) && abstype == ZT_DEATH && tmp == MAGIC_COOKIE) {
 			if (canseemon(mon)) {
 			    hit(fltxt, mon, ".");
+/*JP
 			    pline("%s disintegrates.", Monnam(mon));
+*/
+			    pline("%sはこなごなになった．", Monnam(mon));
+#if 0 /*JP:T*/
 			    pline("%s body reintegrates before your %s!",
 				  s_suffix(Monnam(mon)),
 				  (eyecount(youmonst.data) == 1) ?
 				  	body_part(EYE) : makeplural(body_part(EYE)));
+#else
+			    pline("%sの体はあなたの目の前で再結合した！",
+				  s_suffix(Monnam(mon)));
+#endif
+/*JP
 			    pline("%s resurrects!", Monnam(mon));
+*/
+		            pline("%sは蘇った！", Monnam(mon));
 			}
 			mon->mhp = mon->mhpmax;
 			break; /* Out of while loop */
@@ -4050,7 +4614,10 @@
 
 			if (canseemon(mon)) {
 			    if (!m_amulet)
+/*JP
 				pline("%s is disintegrated!", Monnam(mon));
+*/
+				pline("%sはこなごなになった！", Monnam(mon));
 			    else
 				hit(fltxt, mon, "!");
 			}
@@ -4096,7 +4663,10 @@
 			} else {
 			    /* some armor was destroyed; no damage done */
 			    if (canseemon(mon))
+/*JP
 				pline("%s %s is disintegrated!",
+*/
+				pline("%sの%sはこなごなになった！",
 				      s_suffix(Monnam(mon)),
 				      distant_name(otmp, xname));
 			    m_useup(mon, otmp);
@@ -4119,12 +4689,21 @@
 #endif
 	    if (zap_hit((int) u.uac, 0)) {
 		range -= 2;
+/*JP
 		pline("%s hits you!", The(fltxt));
+*/
+		pline("%sはあなたに命中した！", The(fltxt));
 		if (Reflecting && abs(type) != ZT_SPELL(ZT_FIRE)) {
 		    if (!Blind) {
+/*JP
 		    	(void) ureflects("But %s reflects from your %s!", "it");
+*/
+			(void) ureflects("しかし，%sはあなたの%sによって反射した．", "それ");
 		    } else
+/*JP
 			pline("For some reason you are not affected.");
+*/
+			pline("なぜかあなたは影響を受けなかった．");
 		    dx = -dx;
 		    dy = -dy;
 		    shieldeff(sx, sy);
@@ -4140,7 +4719,10 @@
 			range = 0;
 		}
 	    } else {
+/*JP
 		pline("%s whizzes by you!", The(fltxt));
+*/
+	        pline("%sはあなたのそばをかすめた！", The(fltxt));
 	    }
 	    if (abstype == ZT_LIGHTNING && !resists_blnd(&youmonst)) {
 		You(are_blinded_by_the_flash);
@@ -4165,7 +4747,10 @@
 	    bounce = 0;
 /*            range--;*/   
 	    if(range && isok(lsx, lsy) && cansee(lsx,lsy))
+/*JP
 		pline("%s bounces!", The(fltxt));
+*/
+		pline("%sは反射した！", The(fltxt));
 	    if(!dx || !dy || !rn2(20)) {
 		dx = -dx;
 		dy = -dy;
@@ -4233,9 +4818,15 @@
     if (abs(type) == ZT_SPELL(ZT_FIRE))
 	explode(sx, sy, type, d(12,6), 0, EXPL_FIERY);
     if (shopdamage)
+#if 0 /*JP*/
 	pay_for_damage(abstype == ZT_FIRE ?  "burn away" :
 		       abstype == ZT_COLD ?  "shatter" :
 		       abstype == ZT_DEATH ? "disintegrate" : "destroy", FALSE);
+#else
+	pay_for_damage(abstype == ZT_FIRE ?  "燃やす" :
+		       abstype == ZT_COLD ?  "粉々にする" :
+		       abstype == ZT_DEATH ? "粉砕する" : "破壊する", FALSE);
+#endif
     bhitpos = save_bhitpos;
 }
 #endif /*OVLB*/
@@ -4263,9 +4854,15 @@
 	unearth_objs(x, y);
 	if (Underwater) vision_recalc(1);
 	newsym(x,y);
+/*JP
 	if (cansee(x,y)) Norep("The ice crackles and melts.");
+*/
+	if (cansee(x,y)) Norep("氷はピキピキ鳴り，溶けた．");
 	if ((otmp = sobj_at(BOULDER, x, y)) != 0) {
+/*JP
 	    if (cansee(x,y)) pline("%s settles...", An(xname(otmp)));
+*/
+	    if (cansee(x,y)) pline("%sははまった．．．", An(xname(otmp)));
 	    do {
 		obj_extract_self(otmp);	/* boulder isn't being pushed */
 		if (!boulder_hits_pool(otmp, x, y, FALSE))
@@ -4299,16 +4896,25 @@
 
 	    if (t && t->ttyp == WEB) {
 		/* a burning web is too flimsy to notice if you can't see it */
+/*JP
 		if (cansee(x,y)) Norep("A web bursts into flames!");
+*/
+		if (cansee(x,y)) Norep("くもの巣は炎に包まれた！");
 		(void) delfloortrap(t);
 		if (cansee(x,y)) newsym(x,y);
 	    }
 	    if(is_ice(x, y)) {
 		melt_ice(x, y);
 	    } else if(is_pool(x,y)) {
+/*JP
 		const char *msgtxt = "You hear hissing gas.";
+*/
+		const char *msgtxt = "しゅーっというガスの音を聞いた．";
 		if(lev->typ != POOL) {	/* MOAT or DRAWBRIDGE_UP */
+/*JP
 		    if (cansee(x,y)) msgtxt = "Some water evaporates.";
+*/
+		    if (cansee(x,y)) msgtxt = "すこし水が蒸発した．";
 		} else {
 		    register struct trap *ttmp;
 
@@ -4316,13 +4922,19 @@
 		    lev->typ = ROOM;
 		    ttmp = maketrap(x, y, PIT);
 		    if (ttmp) ttmp->tseen = 1;
+/*JP
 		    if (cansee(x,y)) msgtxt = "The water evaporates.";
+*/
+		    if (cansee(x,y)) msgtxt = "水が蒸発した．";
 		}
 		Norep(msgtxt);
 		if (lev->typ == ROOM) newsym(x,y);
 	    } else if(IS_FOUNTAIN(lev->typ)) {
 		    if (cansee(x,y))
+/*JP
 			pline("Steam billows from the fountain.");
+*/
+			pline("蒸気が泉から立ちのぼった．");
 		    rangemod -= 1;
 		    dryup(x, y, type > 0);
 	    }
@@ -4337,9 +4949,15 @@
 		if (lev->typ == WATER) {
 		    /* For now, don't let WATER freeze. */
 		    if (cansee(x,y))
+/*JP
 			pline_The("water freezes for a moment.");
+*/
+			pline("水は一瞬凍った．");
 		    else
+/*JP
 			You_hear("a soft crackling.");
+*/
+			You_hear("ピキ！という音を聞いた．");
 		    rangemod -= 1000;	/* stop */
 		} else {
 		    rangemod -= 3;
@@ -4355,14 +4973,26 @@
 		    bury_objs(x,y);
 		    if(cansee(x,y)) {
 			if(moat)
+/*JP
 				Norep("The moat is bridged with ice!");
+*/
+				Norep("堀に氷の橋がかけられた！");
 			else if(lava)
+/*JP
 				Norep("The lava cools and solidifies.");
+*/
+				Norep("溶岩は冷え固まった．");
 			else
+/*JP
 				Norep("The water freezes.");
+*/
+				Norep("水は凍った．");
 			newsym(x,y);
 		    } else if(flags.soundok && !lava)
+/*JP
 			You_hear("a crackling sound.");
+*/
+			You_hear("ピキピキッという音を聞いた．");
 
 		    if (x == u.ux && y == u.uy) {
 			if (u.uinwater) {   /* not just `if (Underwater)' */
@@ -4373,11 +5003,17 @@
 			    vision_full_recalc = 1;
 			} else if (u.utrap && u.utraptype == TT_LAVA) {
 			    if (Passes_walls) {
+/*JP
 				You("pass through the now-solid rock.");
+*/
+			        You("いま固くなったばかりの石の中をすり抜けた．");
 			    } else {
 				u.utrap = rn1(50,20);
 				u.utraptype = TT_INFLOOR;
+/*JP
 				You("are firmly stuck in the cooling rock.");
+*/
+			        You("冷えた岩のなかにしっかりと埋まった．");
 			    }
 			}
 		    } else if ((mon = m_at(x,y)) != 0) {
@@ -4402,41 +5038,80 @@
 		switch(abstype) {
 		case ZT_FIRE:
 		    new_doormask = D_NODOOR;
+/*JP
 		    see_txt = "The door is consumed in flames!";
+*/
+		    see_txt = "扉は炎で焼きつくされた！";
+/*JP
 		    sense_txt = "smell smoke.";
+*/
+		    sense_txt = "煙の匂いがした．";
 		    break;
 		case ZT_COLD:
 		    new_doormask = D_NODOOR;
+/*JP
 		    see_txt = "The door freezes and shatters!";
+*/
+		    see_txt = "扉は凍り，こなごなになった！";
+/*JP
 		    sense_txt = "feel cold.";
+*/
+		    sense_txt = "あなたは冷気を感じた．";
 		    break;
 		case ZT_DEATH:
 		    /* death spells/wands don't disintegrate */
 		    if(abs(type) != ZT_BREATH(ZT_DEATH))
 			goto def_case;
 		    new_doormask = D_NODOOR;
+/*JP
 		    see_txt = "The door disintegrates!";
+*/
+		    see_txt = "扉は粉砕された！";
+/*JP
 		    hear_txt = "crashing wood.";
+*/
+		    hear_txt = "木の壊れる音を聞いた．";
 		    break;
 		case ZT_LIGHTNING:
 		    new_doormask = D_BROKEN;
+/*JP
 		    see_txt = "The door splinters!";
+*/
+		    see_txt = "扉はずたずたになった！";
+/*JP
 		    hear_txt = "crackling.";
+*/
+		    hear_txt = "ピキピキという音を聞いた．";
 		    break;
                 case ZT_ACID:
                     new_doormask = D_NODOOR;
+/*JP
                     see_txt = "The door melts!";
+*/
+		    see_txt = "扉は溶けた！";
+/*JP
                     hear_txt = "sizzling.";
+*/
+                    hear_txt = "シューシューという音を聞いた．";
 		    break;
 		default:
 		def_case:
 		    if(cansee(x,y)) {
+#if 0 /*JP*/
 			pline_The("door absorbs %s %s!",
 			      (type < 0) ? "the" : "your",
 			      abs(type) < ZT_SPELL(0) ? "bolt" :
 			      abs(type) < ZT_BREATH(0) ? "spell" :
 			      "blast");
 		    } else You_feel("vibrations.");
+#else
+			pline("扉は%s%sを吸収した！",
+			      (type < 0) ? "" : "あなたが放った",
+			      abs(type) < ZT_SPELL(0) ? "光線" :
+			      abs(type) < ZT_BREATH(0) ? "魔法" :
+			      "息");
+		    } else You("振動を感じた．");
+#endif
 		    break;
 		}
 		if (new_doormask >= 0) {	/* door gets broken */
@@ -4453,7 +5128,11 @@
 			pline(see_txt);
 			newsym(x, y);
 		    } else if (sense_txt) {
+#if 0 /*JP*/
 			You(sense_txt);
+#else
+			pline(sense_txt);
+#endif
 		    } else if (hear_txt) {
 			if (flags.soundok) You_hear(hear_txt);
 		    }
@@ -4467,8 +5146,13 @@
 	if(OBJ_AT(x, y) && abstype == ZT_FIRE)
 		if (burn_floor_paper(x, y, FALSE, type > 0) && couldsee(x, y)) {
 		    newsym(x,y);
+#if 0 /*JP:T*/
 		    You("%s of smoke.",
 			!Blind ? "see a puff" : "smell a whiff");
+#else
+		    pline("%s．",
+			!Blind ? "ぽわっと煙があがった" : "煙のプンという匂いがした");
+#endif
 		}
 	if ((mon = m_at(x,y)) != 0) {
 		/* Cannot use wakeup() which also angers the monster */
@@ -4532,7 +5216,10 @@
 	    place_object(item, obj->ox, obj->oy);
 	}
 	if (Role_if(PM_ARCHEOLOGIST) && !flags.mon_moving && (obj->spe & STATUE_HISTORIC)) {
+/*JP
 	    You_feel("guilty about damaging such a historic statue.");
+*/
+	    You_feel("このような歴史的な彫像に傷をつけるのは罪深いことだと思った．");
 	    adjalign(-1);
 	}
 	obj->spe = 0;
@@ -4541,12 +5228,21 @@
 }
 
 const char * const destroy_strings[] = {	/* also used in trap.c */
+#if 0 /*JP*/
 	"freezes and shatters", "freeze and shatter", "shattered potion",
 	"boils and explodes", "boil and explode", "boiling potion",
 	"catches fire and burns", "catch fire and burn", "burning scroll",
 	"catches fire and burns", "catch fire and burn", "burning book",
 	"turns to dust and vanishes", "turn to dust and vanish", "",
 	"breaks apart and explodes", "break apart and explode", "exploding wand"
+#else
+	"凍結して砕けた", "凍結して砕けた", "砕けた薬瓶で",
+	"沸騰して爆発した", "沸騰して爆発した", "沸騰した薬で",
+	"火がついて燃えた", "火がついて燃えた", "燃えた巻物で",
+	"火がついて燃えた", "火がついて燃えた", "燃えた魔法書で",
+	"塵になって消えた", "塵になって消えた", "",
+	"ばらばらに壊れて爆発した", "ばらばらに壊れて爆発した", "杖の爆発で"
+#endif
 };
 
 void
@@ -4590,8 +5286,14 @@
 		    if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
 			skip++;
 			if (!Blind)
+#if 0 /*JP:T*/
 			    pline("%s glows a strange %s, but remains intact.",
 				The(xname(obj)), hcolor("dark red"));
+#else
+			    pline("%sは奇妙に%s輝いたが何も変化しなかった．",
+				xname(obj), jconj_adj(hcolor("暗褐色の")));
+#endif
+
 		    }
 		    quan = obj->quan;
 		    switch(osym) {
@@ -4645,9 +5347,18 @@
 		    if(!rn2(3)) cnt++;
 
 		if(!cnt) continue;
+/*JP
 		if(cnt == quan)	mult = "Your";
+*/
+		if(cnt == quan)	mult = "";
+/*JP
 		else	mult = (cnt == 1L) ? "One of your" : "Some of your";
+*/
+		else	mult = (cnt == 1L) ? "のひとつ" : "のいくつか";
+/*JP
 		pline("%s %s %s!", mult, xname(obj),
+*/
+		pline("あなたの%s%sは%s！", xname(obj), mult, 
 			(cnt > 1L) ? destroy_strings[dindx*3 + 1]
 				  : destroy_strings[dindx*3]);
 		if(osym == POTION_CLASS && dmgtyp != AD_COLD) {
@@ -4672,7 +5383,10 @@
 		    useup(obj);
 		/* Do the damage if not resisted */
 		if(dmg) {
+/*JP
 		    if(xresist)	You("aren't hurt!");
+*/
+		    if(xresist)	You("傷つかない！");
 		    else {
 			const char *how = destroy_strings[dindx * 3 + 2];
 			boolean one = (cnt == 1L);
@@ -4725,9 +5439,15 @@
 		    if (obj->otyp == SPE_BOOK_OF_THE_DEAD) {
 			skip++;
 			if (vis)
+#if 0 /*JP:T*/
 			    pline("%s glows a strange %s, but remains intact.",
 				The(distant_name(obj, xname)),
 				hcolor("dark red"));
+#else
+			    pline("%sは奇妙に%s輝いたが何も変化しなかった．",
+				The(distant_name(obj, xname)),
+				jconj_adj(hcolor("暗褐色の")));
+#endif
 		    }
 		    quan = obj->quan;
 		    switch(osym) {
@@ -4775,7 +5495,10 @@
 		    if(!rn2(3)) cnt++;
 
 		if(!cnt) continue;
+/*JP
 		if (vis) pline("%s %s %s!",
+*/
+		if (vis) pline("%sの%sは%s！",
 			s_suffix(Monnam(mtmp)), xname(obj),
 			(cnt > 1L) ? destroy_strings[dindx*3 + 1]
 				  : destroy_strings[dindx*3]);
@@ -4816,7 +5539,10 @@
 	if (resisted) {
 	    if (tell) {
 		shieldeff(mtmp->mx, mtmp->my);
+/*JP
 		pline("%s resists!", Monnam(mtmp));
+*/
+		    pline("%sは防いだ！", Monnam(mtmp));
 	    }
 	    damage = (damage + 1) / 2;
 	}
@@ -4839,9 +5565,15 @@
 	int tries = 0;
 
 	nothing = zeroobj;  /* lint suppression; only its address matters */
+/*JP
 	if (flags.verbose) You("may wish for an object.");
+*/
+	if (flags.verbose) You("望みのものを手に入れられる！");
 retry:
+/*JP
 	getlin("For what do you wish?", buf);
+*/
+	getlin("何をお望み？", buf);
 	if(buf[0] == '\033') buf[0] = 0;
 	/*
 	 *  Note: if they wished for and got a non-object successfully,
@@ -4851,7 +5583,10 @@
 	 */
 	otmp = readobjnam(buf, &nothing, TRUE);
 	if (!otmp) {
+/*JP
 	    pline("Nothing fitting that description exists in the game.");
+*/
+	    pline("うーん．そんなものは存在しないようだ．");
 	    if (++tries < 5) goto retry;
 	    pline(thats_enough_tries);
 	    otmp = readobjnam((char *)0, (struct obj *)0, TRUE);
@@ -4867,6 +5602,7 @@
 
 	if (otmp != &zeroobj) {
 	    /* The(aobjnam()) is safe since otmp is unidentified -dlc */
+#if 0 /*JP*/
 	    (void) hold_another_object(otmp, u.uswallow ?
 				       "Oops!  %s out of your reach!" :
 				       (Is_airlevel(&u.uz) ||
@@ -4879,6 +5615,17 @@
 					     Is_airlevel(&u.uz) || u.uinwater ?
 						   "slip" : "drop")),
 				       (const char *)0);
+#else
+		Sprintf(buf, "%sが%s", xname(otmp),
+			Is_airlevel(&u.uz)||u.uinwater ? "滑り落ちた" : "落ちた");
+		(void) hold_another_object(otmp, u.uswallow ?
+				       "おっと，届かないところに%s！" :
+				       Is_airlevel(&u.uz) || u.uinwater ?
+				       "おっと，手から%s！" :
+				       "おっと，床に%s！",
+				       buf,
+				       (const char *)0);
+#endif
 	    u.ublesscnt += rn1(100,50);  /* the gods take notice */
 	}
 }
@@ -4897,25 +5644,40 @@
 	} else if (Is_waterlevel(&u.uz)) { 
 		You("better wait for the sun to come out."); return 0; 
 	} */
+/*JP
 	pline("Where do you want to cast the spell?");
+*/
+	pline("どこに向かって魔法を唱える？");
 	cc.x = u.ux;
 	cc.y = u.uy;
 	while (1) {
+/*JP
 		getpos(&cc, TRUE, "the desired position");
+*/
+		getpos(&cc, TRUE, "望む場所");
 		if(cc.x == -10) {
 			u.dx = u.ux; u.dy = u.uy;
 			return; /* user pressed esc */
 		}
 		/* The number of moves from hero to where the spell drops.*/
 		if (distmin(u.ux, u.uy, cc.x, cc.y) > 10) {
+/*JP
 			You("can't reach that far with your mind!");
+*/
+			You("あなたの精神では遠すぎて届かない！");
 		} else if (u.uswallow) {
+/*JP
 			pline("The spell is cut short!");
+*/
+			pline("魔法はその場で炸裂した！");
 			u.dx = u.ux;
 			u.dy = u.uy;
 			return;
 		} else if (!cansee(cc.x, cc.y) || IS_STWALL(levl[cc.x][cc.y].typ)) {
+/*JP
 			Your("mind fails to lock onto that location!");
+*/
+			Your("精神はその場所を補足できない！");
 		} else {
 			/* Bingo! */
 			u.dx=cc.x;
diff -aurN slashem-0.0.7E6F2/sys/msdos/Makefile.BC jslashem-0.0.7E6F2-J0.0.8/sys/msdos/Makefile.BC
--- slashem-0.0.7E6F2/sys/msdos/Makefile.BC	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/Makefile.BC	2004-06-10 08:55:20.000000000 +0900
@@ -811,10 +811,10 @@
 GAMEFILE = $(GAMEDIR)\$(GAME).exe
 
 #
-# make data.base an 8.3 filename to prevent an nmake warning
+# make jdata.base an 8.3 filename to prevent an nmake warning
 #
 
-DATABASE = $(DAT)\data.bas
+DATABASE = $(DAT)\jdata.bas
 
 #######################################################################
 #
@@ -850,7 +850,7 @@
 	if exist $(GAMEDIR)\makefile del $(GAMEDIR)\makefile
 ! ENDIF
 	copy $(SYS)\termcap       $(GAMEDIR)
-	if exist $(DOC)\guideb*.txt copy $(DOC)\guideb*.txt  $(GAMEDIR)
+	if exist $(DOC)\jguide*.txt copy $(DOC)\jguide*.txt  $(GAMEDIR)
 	if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt  $(GAMEDIR)\NetHack.txt
 	if exist $(DOC)\recover.txt copy $(DOC)\recover.txt  $(GAMEDIR)
 	copy $(SYS)\NetHack.cnf   $(GAMEDIR)
@@ -1392,7 +1392,7 @@
 $(DAT)\rumors: $(U)utility.tag    $(DAT)\rumors.tru   $(DAT)\rumors.fal
 	$(U)makedefs -r
 
-$(DAT)\quest.dat: $(U)utility.tag  $(DAT)\quest.txt
+$(DAT)\quest.dat: $(U)utility.tag  $(DAT)\jquest.txt
 	$(U)makedefs -q
 
 $(DAT)\oracles: $(U)utility.tag    $(DAT)\oracles.txt
diff -aurN slashem-0.0.7E6F2/sys/msdos/Makefile.GCC jslashem-0.0.7E6F2-J0.0.8/sys/msdos/Makefile.GCC
--- slashem-0.0.7E6F2/sys/msdos/Makefile.GCC	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/Makefile.GCC	2004-06-22 08:53:14.000000000 +0900
@@ -21,8 +21,8 @@
 # Game Installation Variables
 # NOTE: Make sure GAMEDIR exists before make is started.
 
-GAME = slashem
-#GAME = nethack
+GAME = jslashem
+#GAME = jnethack
 
 # The GNU Make has a problem if you include a drive spec below (unfortunately).
 GAMEDIR =../binary
@@ -41,6 +41,7 @@
 UTIL = ../util
 WIN  = ../win/tty
 WSHR = ../win/share
+JP   = ../japanese
 
 #
 #  Executables.
@@ -84,7 +85,7 @@
 # your tools.
 #
 YACC   = bison -y
-LEX    = flex
+LEX    = flex -8
 YTABC  = y_tab.c
 YTABH  = y_tab.h
 #If your tool produces y.tab.c and y.tab.h DOS might require
@@ -312,7 +313,6 @@
 
 #  Object files for the game itself.
 
-
 VOBJ01 = $(O)allmain.o  $(O)alloc.o    $(O)apply.o	  $(O)artifact.o $(O)attrib.o
 VOBJ02 = $(O)ball.o	    $(O)bones.o    $(O)borg.o	    $(O)botl.o     $(O)cmd.o       $(O)dbridge.o
 VOBJ03 = $(O)decl.o	    $(O)detect.o   $(O)display.o  $(O)do.o	     $(O)do_name.o
@@ -342,13 +342,15 @@
 
 VVOBJ  = $(O)version.o
 
+JOBJ   = jconj.o jlib.o jtrns.o
+
 VOBJ   = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
 	$(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
 	$(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
 	$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
 	$(VOBJ21) $(VOBJ22) $(VOBJ23)
 
-ALLOBJ = $(VOBJ) $(SOBJ) $(TILOBJ) $(VVOBJ)
+ALLOBJ = $(VOBJ) $(SOBJ) $(TILOBJ) $(VVOBJ) $(JOBJ)
 
 #==========================================
 # Header file macros
@@ -539,6 +541,9 @@
 	@$(subst /,\,$(UPD) $(MSYS)/tiles/subs/*.* $(GAMEDIR)/tiles/subs)
 endif
 	@$(subst /,\,$(UPD) $(DOC)/guidebo*.txt  $(GAMEDIR))
+	@$(subst /,\,$(UPD) $(DOC)/jguideb*.txt  $(GAMEDIR))
+	@$(subst /,\,$(UPD) ../Change*.j         $(GAMEDIR)/change.j)
+	@$(subst /,\,$(UPD) ../readme.j          $(GAMEDIR))
 	@$(subst /,\,if exist $(DOC)/$(GAME).txt $(UPD) $(DOC)/$(GAME).txt $(GAMEDIR))
 	@$(subst /,\,if exist ../readme.txt $(UPD) ../readme.txt $(GAMEDIR)/readme.txt)
 	@$(subst /,\,if exist ../slamfaq.txt $(UPD) ../slamfaq.txt $(GAMEDIR)/slamfaq.txt)
@@ -590,6 +595,7 @@
 	 echo $(SOBJ)   >> $(subst /,\,$@)
 	 echo $(TILOBJ) >> $(subst /,\,$@)
 	 echo $(VVOBJ)  >> $(subst /,\,$@)
+	 echo $(JOBJ)   >> $(subst /,\,$@)
 
 #==========================================
 #  Housekeeping.
@@ -636,8 +642,8 @@
 	$(subst /,\,if exist $(DAT)/rumors del $(DAT)/rumors)
 	$(subst /,\,if exist $(DAT)/dungeon.pdf del $(DAT)/dungeon.pdf)
 	$(subst /,\,if exist $(DAT)/dungeon del $(DAT)/dungeon)
-	$(subst /,\,if exist $(DAT)/oracles del $(DAT)/oracles)
-	$(subst /,\,if exist $(DAT)/quest.dat del $(DAT)/quest.dat)
+	$(subst /,\,if exist $(DAT)/joracles del $(DAT)/joracles)
+	$(subst /,\,if exist $(DAT)/jquest.dat del $(DAT)/jquest.dat)
 	$(subst /,\,if exist $(DAT)/dlb.lst del $(DAT)/dlb.lst)
 	$(subst /,\,if exist $(DAT)/*.lev del $(DAT)/*.lev)
 	$(subst /,\,if exist $(PLANAR_TIB) del $(PLANAR_TIB))
@@ -645,6 +651,10 @@
 	$(subst /,\,if exist $(WSHR)/monthin.txt del $(WSHR)/monthin.txt)
 	$(subst /,\,if exist $(WSHR)/objthin.txt del $(WSHR)/objthin.txt)
 	$(subst /,\,if exist $(WSHR)/oththin.txt del $(WSHR)/oththin.txt)
+	$(subst /,\,if exist $(SRC)\jlib.c del $(SRC)\jlib.c)
+	$(subst /,\,if exist $(SRC)\jtrns.c del $(SRC)\jtrns.c)
+	$(subst /,\,if exist $(SRC)\jconj.c del $(SRC)\jconj.c)
+	$(subst /,\,if exist $(INCL)\jdata.h del $(INCL)\jdata.h)
 # [CC] Old make spotless code which has not been made obsolete by 3.4.1 merge
 # txt2bmp: bitmap tiles
 	$(subst /,\,if exist index del index)
@@ -761,9 +771,9 @@
 
 endif
 
-$(O)lev_$(LEX).o:  $(HACK_H)   $(SP_LEV_H)	  $(INCL)/lev_comp.h \
-	$(U)lev_$(LEX).c
-	$(CC) $(cflags) -o$@ $(U)lev_$(LEX).c
+$(O)lev_lex.o:  $(HACK_H)   $(SP_LEV_H)	  $(INCL)/lev_comp.h \
+	$(U)lev_lex.c
+	$(CC) $(cflags) -o$@ $(U)lev_lex.c
 
 $(O)lev_main.o:  $(HACK_H) $(INCL)/sp_lev.h $(INCL)/date.h $(U)lev_main.c
 
@@ -797,7 +807,7 @@
 
 endif
 
-$(U)lev_$(LEX).c: $(U)lev_comp.l
+$(U)lev_lex.c: $(U)lev_comp.l
 ifeq  "$(DO_LEX)" "LEX_ACT"
 	@$(subst /,\,chdir $(UTIL))
 	@$(subst /,\,$(LEX) $(FLEXSKEL) lev_comp.l)
@@ -849,7 +859,7 @@
 
 ifeq  "$(DO_LEX)" "LEX_ACT"
 
-$(U)dgn_$(LEX).c: $(U)dgn_comp.l $(INCL)/dgn_comp.h
+$(U)dgn_lex.c: $(U)dgn_comp.l $(INCL)/dgn_comp.h
 	@$(subst /,\,chdir $(UTIL))
 	@$(subst /,\,$(LEX) $(FLEXSKEL)  dgn_comp.l)
 	@$(subst /,\,if exist $@ del $@)
@@ -858,7 +868,7 @@
 	@$(subst /,\,chdir $(SRC))
 else
 
-$(U)dgn_$(LEX).c: $(SSHR)/dgn_lex.c $(INCL)/dgn_comp.h
+$(U)dgn_lex.c: $(SSHR)/dgn_lex.c $(INCL)/dgn_comp.h
 	@echo ---
 	@echo For now, we will copy the prebuilt dgn_lex.c
 	@echo from $(SSHR) into $(U) and use it.
@@ -965,6 +975,9 @@
 $(O)tiletxt2.o: $(CONFIG_H) $(TILE_H) $(WSHR)/tilemap.c
 	$(CC) $(cflags) -I$(MSYS) -I$(WSHR) -DTILETEXT -DTILE_X=8 -o$@ $(WSHR)/tilemap.c
 
+$(INCL)/jdata.h: $(U)makedefs.exe $(DAT)/jtrnsobj.dat $(DAT)/jtrnsmon.dat
+	-$(subst /,\,$(U)makedefs -j)
+
 #
 # Allegro Tile Support
 #
@@ -1176,10 +1189,10 @@
 $(O)panic.o:   $(CONFIG_H)	  $(U)panic.c
 
 #============================================================
-# make data.base an 8.3 filename to prevent an make warning
+# make jdata.base an 8.3 filename to prevent an make warning
 #============================================================
 
-DATABASE = $(DAT)/data.bas
+DATABASE = $(DAT)/jdata.bas
 
 
 $(O)dat.tag: $(DAT)/nhshare $(DAT)/nhushare
@@ -1191,12 +1204,18 @@
 $(DAT)/rumors:	     $(O)utility.tag    $(DAT)/rumors.tru	$(DAT)/rumors.fal
 	@$(subst /,\,$(U)makedefs.exe -r)
 
-$(DAT)/quest.dat: $(O)utility.tag  $(DAT)/quest.txt
+$(DAT)/jrumors:	     $(O)utility.tag    $(DAT)/jrumors.tru	$(DAT)/jrumors.fal
+	@$(subst /,\,$(U)makedefs.exe -r)
+
+$(DAT)/quest.dat: $(O)utility.tag  $(DAT)/jquest.txt
 	@$(subst /,\,$(U)makedefs.exe -q)
 
 $(DAT)/oracles:	     $(O)utility.tag    $(DAT)/oracles.txt
 	@$(subst /,\,$(U)makedefs.exe -h)
 
+$(DAT)/joracles:     $(O)utility.tag    $(DAT)/joracles.txt
+	@$(subst /,\,$(U)makedefs.exe -h)
+
 $(O)sp_lev.tag: $(O)utility.tag $(DAT)/beholder.des $(DAT)/bigroom.des \
 	$(DAT)/blkmar.des   $(DAT)/castle.des   $(DAT)/grund.des \
 	$(DAT)/dragons.des  $(DAT)/endgame.des \
@@ -1293,20 +1312,20 @@
 #note that dir below assumes bin/dir.exe from djgpp distribution
 #
 $(DAT)/dlb.lst:	$(U)dlb_main.exe $(DAT)/data $(DAT)/rumors $(DAT)/dungeon \
-	    $(DAT)/oracles $(DAT)/quest.dat $(O)sp_lev.tag
+	    $(DAT)/joracles $(DAT)/quest.dat $(O)sp_lev.tag
 	@$(subst /,\,echo dat done >$(O)dat.tag)
 	@$(subst /,\,cd $(DAT))
 	@$(subst /,\,$(UPD) $(MSYS)/msdoshlp.txt .)
 	@$(subst /,\,echo data >dlb.lst)
-	@$(subst /,\,echo oracles >>dlb.lst)
+	@$(subst /,\,echo joracles >>dlb.lst)
 	@$(subst /,\,echo options >>dlb.lst)
-	@$(subst /,\,echo rumors >>dlb.lst)
-	@$(subst /,\,echo help >>dlb.lst)
-	@$(subst /,\,echo hh >>dlb.lst)
-	@$(subst /,\,echo cmdhelp >>dlb.lst)
-	@$(subst /,\,echo history >>dlb.lst)
-	@$(subst /,\,echo opthelp >>dlb.lst)
-	@$(subst /,\,echo wizhelp >>dlb.lst)
+	@$(subst /,\,echo jrumors >>dlb.lst)
+	@$(subst /,\,echo jhelp >>dlb.lst)
+	@$(subst /,\,echo jhh >>dlb.lst)
+	@$(subst /,\,echo jcmdhelp >>dlb.lst)
+	@$(subst /,\,echo jhistory >>dlb.lst)
+	@$(subst /,\,echo jopthelp >>dlb.lst)
+	@$(subst /,\,echo jwizhelp >>dlb.lst)
 	@$(subst /,\,echo license >>dlb.lst)
 	@$(subst /,\,echo msdoshlp.txt >>dlb.lst)
 	@$(subst /,\,echo gypsy.txt >>dlb.lst)
@@ -1351,8 +1370,12 @@
 $(O)sys.o : $(HACK_H) $(SSHR)/pcsys.c
 	$(CC) $(cflags) -o$@ $(SSHR)/pcsys.c
 
+random.o: $(HACK_H) $(SSHR)/random.c
+	@$(subst /,\,copy $(SSHR)\random.c .)
+	$(CC) $(CFLAGS) -D_POSIX_SOURCE -o$@ random.c
+
 # sys/msdos
-$(O)msdos.o : $(HACK_H)  $(MSYS)/msdos.c
+$(O)msdos.o : $(HACK_H)  $(MSYS)/msdos.c $(MSYS)/portio.h
 	$(CC) $(cflags) -o$@ $(MSYS)/msdos.c
 
 $(O)pckeys.o : $(HACK_H)  $(MSYS)/pckeys.c
@@ -1364,7 +1387,8 @@
 $(O)sound.o : $(HACK_H)  $(MSYS)/sound.c $(MSYS)/portio.h
 	$(CC) $(cflags) -o$@ $(MSYS)/sound.c
 
-$(O)video.o : $(HACK_H)  $(MSYS)/pcvideo.h $(MSYS)/portio.h $(MSYS)/video.c
+$(O)video.o : $(HACK_H)  $(MSYS)/pcvideo.h $(MSYS)/portio.h $(MSYS)/video.c \
+	$(MSYS)/pctiles.h
 	$(CC) $(cflags) -o$@ -I$(MSYS) $(MSYS)/video.c
 
 $(O)vidvga.o : $(HACK_H)  $(MSYS)/pcvideo.h $(MSYS)/portio.h $(TILE_H) $(MSYS)/vidvga.c
@@ -1386,6 +1410,15 @@
 2xsai.o: $(MSYS)/2xsai.c $(MSYS)/2xsai.h
 	$(CC) $(cflags) -I$(MSYS) $<
 
+jlib.o: $(JP)\jlib.c $(HACK_H)
+	$(CC) $(cflags) -o$@ $(JP)/jlib.c
+
+jconj.o: $(JP)\jconj.c $(HACK_H)
+	$(CC) $(cflags) -o$@ $(JP)/jconj.c
+
+jtrns.o: $(JP)/jtrns.c $(HACK_H) $(INCL)/jdata.h
+	$(CC) $(cflags) -o$@ $(JP)/jtrns.c
+
 # src dependencies
 
 #
@@ -1630,7 +1663,7 @@
 $(O)u_init.o: u_init.c $(HACK_H)
 $(O)uhitm.o: uhitm.c $(HACK_H)
 $(O)vault.o: vault.c $(HACK_H) $(INCL)/vault.h
-$(O)version.o: version.c $(HACK_H) $(INCL)/date.h $(PATCHLEV_H)
+$(O)version.o: version.c $(HACK_H) $(INCL)/date.h $(PATCHLEV_H) $(JP)/jpatchle.h
 $(O)vision.o: vision.c $(HACK_H) $(INCL)/vis_tab.h
 $(O)weapon.o: weapon.c $(HACK_H) $(INCL)/skills.h
 $(O)were.o: were.c $(HACK_H)
diff -aurN slashem-0.0.7E6F2/sys/msdos/Makefile.MSC jslashem-0.0.7E6F2-J0.0.8/sys/msdos/Makefile.MSC
--- slashem-0.0.7E6F2/sys/msdos/Makefile.MSC	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/Makefile.MSC	2004-07-03 22:20:02.000000000 +0900
@@ -29,7 +29,7 @@
 #
 
 GAME	= NetHack
-GAMEDIR = c:\games\nethack
+GAMEDIR = c:\games\jslashem
 
 #
 #
@@ -851,10 +851,10 @@
 GAMEFILE = $(GAMEDIR)\$(GAME).exe
 
 #
-# make data.base an 8.3 filename to prevent an nmake warning
+# make jdata.base an 8.3 filename to prevent an nmake warning
 #
 
-DATABASE = $(DAT)\data.bas
+DATABASE = $(DAT)\jdata.bas
 
 #######################################################################
 #
@@ -890,7 +890,7 @@
 	if exist $(GAMEDIR)\makefile del $(GAMEDIR)\makefile
 ! ENDIF
 	copy $(SYS)\termcap       $(GAMEDIR)
-	if exist $(DOC)\guideb*.txt copy $(DOC)\guideb*.txt  $(GAMEDIR)
+	if exist $(DOC)\jguideb*.txt copy $(DOC)\jguideb*.txt  $(GAMEDIR)
 	if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt  $(GAMEDIR)\NetHack.txt
 	if exist $(DOC)\recover.txt copy $(DOC)\recover.txt  $(GAMEDIR)
 	copy $(SYS)\NetHack.cnf   $(GAMEDIR)
@@ -1449,7 +1449,7 @@
 $(DAT)\rumors: $(U)utility.tag    $(DAT)\rumors.tru   $(DAT)\rumors.fal
 	$(U)makedefs -r
 
-$(DAT)\quest.dat: $(U)utility.tag  $(DAT)\quest.txt
+$(DAT)\quest.dat: $(U)utility.tag  $(DAT)\jquest.txt
 	$(U)makedefs -q
 
 $(DAT)\oracles: $(U)utility.tag    $(DAT)\oracles.txt
diff -aurN slashem-0.0.7E6F2/sys/msdos/pcvideo.h jslashem-0.0.7E6F2-J0.0.8/sys/msdos/pcvideo.h
--- slashem-0.0.7E6F2/sys/msdos/pcvideo.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/pcvideo.h	2004-06-10 08:55:20.000000000 +0900
@@ -239,6 +239,9 @@
 E void FDECL(txt_startup,(int*,int*));
 E void FDECL(txt_xputs, (const char *, int, int));
 E void FDECL(txt_xputc, (CHAR_P, int));
+#if 1 /*JP*/
+E void FDECL(txt_xputc2, (int, int, int));
+#endif
 
 /* ### vidvga.c ### */
 
@@ -270,9 +273,15 @@
 E void NDECL(vga_tty_end_screen);
 E void FDECL(vga_tty_startup,(int*,int*));
 E void FDECL(vga_WriteChar, (int, int, int, int));
+#if 1 /*JP*/
+E void FDECL(vga_WriteChar2, (int, int, int, int, int));
+#endif
 E void FDECL(vga_WriteStr, (char *, int, int, int, int));
 E void FDECL(vga_xputs, (const char *, int, int));
 E void FDECL(vga_xputc, (CHAR_P, int));
+#if 1 /*JP*/
+E void FDECL(vga_xputc2, (CHAR_P, CHAR_P, int));
+#endif
 E void FDECL(vga_xputg, (int, int, unsigned));
 E void FDECL(vga_userpan, (BOOLEAN_P));
 E void FDECL(vga_overview, (BOOLEAN_P));
diff -aurN slashem-0.0.7E6F2/sys/msdos/setup.bat jslashem-0.0.7E6F2-J0.0.8/sys/msdos/setup.bat
--- slashem-0.0.7E6F2/sys/msdos/setup.bat	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/setup.bat	2004-06-22 08:57:56.000000000 +0900
@@ -25,23 +25,23 @@
 if not exist ..\..\binary\* mkdir ..\..\binary
 if NOT exist ..\..\binary\license copy ..\..\dat\license ..\..\binary\license >nul
 
-if exist ..\..\dat\data.bas goto long1ok
-if exist ..\..\dat\data.base goto long1a
-if exist ..\..\dat\data~1.bas goto long1b
+if exist ..\..\dat\jdata.bas goto long1ok
+if exist ..\..\dat\jdata.base goto long1a
+if exist ..\..\dat\jdata~1.bas goto long1b
 goto err_long
 :long1a
 echo Changing some long-named distribution file names:
-echo "Copying ..\..\dat\data.base -> ..\..\dat\data.bas"
-copy ..\..\dat\data.base ..\..\dat\data.bas
+echo "Copying ..\..\dat\jdata.base -> ..\..\dat\jdata.bas"
+copy ..\..\dat\jdata.base ..\..\dat\jdata.bas
 if exist ..\..\dat\data.old del /Q ..\..\dat\data.old
-ren ..\..\dat\data.base data.old
+ren ..\..\dat\jdata.base data.old
 goto long1ok
 :long1b
 echo Changing some long-named distribution file names:
-echo "Copying ..\..\dat\data~1.bas -> ..\..\dat\data.bas"
-copy ..\..\dat\data~1.bas ..\..\dat\data.bas
+echo "Copying ..\..\dat\jdata~1.bas -> ..\..\dat\jdata.bas"
+copy ..\..\dat\jdata~1.bas ..\..\dat\jdata.bas
 if exist ..\..\dat\data.old del /Q ..\..\dat\data.old
-ren ..\..\dat\data~1.bas data.old
+ren ..\..\dat\jdata~1.bas data.old
 :long1ok
 
 if exist ..\..\include\patchlev.h goto long2ok
@@ -62,24 +62,24 @@
 :long2ok
 
 REM Missing guidebook is not fatal to the build process
-if exist ..\..\doc\guideboo.txt goto long3ok
-if exist ..\..\doc\guidebook.txt goto long3a
-if exist ..\..\doc\guideb~1.txt goto long3b
+if exist ..\..\doc\jguideboo.txt goto long3ok
+if exist ..\..\doc\jguidebook.txt goto long3a
+if exist ..\..\doc\jguideb~1.txt goto long3b
 goto warn3long
 :long3a
-echo "Copying ..\..\doc\guidebook.txt -> ..\..\doc\guideboo.txt"
-copy ..\..\doc\guidebook.txt ..\..\doc\guideboo.txt
+echo "Copying ..\..\doc\jguidebook.txt -> ..\..\doc\jguideboo.txt"
+copy ..\..\doc\jguidebook.txt ..\..\doc\jguideboo.txt
 if exist ..\..\doc\guideboo.old del /Q ..\..\doc\guideboo.old
-ren ..\..\doc\guidebook.txt guideboo.old
+ren ..\..\doc\jguidebook.txt guideboo.old
 goto long3ok
 :long3b
-echo "Copying ..\..\doc\guideb~1.txt -> ..\..\doc\guideboo.txt"
-copy ..\..\doc\guideb~1.txt ..\..\doc\guideboo.txt
+echo "Copying ..\..\doc\jguideb~1.txt -> ..\..\doc\jguideboo.txt"
+copy ..\..\doc\jguideb~1.txt ..\..\doc\jguideboo.txt
 if exist ..\..\doc\guideboo.old del /Q ..\..\doc\guideboo.old
-ren ..\..\doc\guideb~1.txt guideboo.old
+ren ..\..\doc\jguideb~1.txt guideboo.old
 goto long3ok
 :warn3long
-echo "Warning - There is no NetHack Guidebook (..\..\doc\guideboo.txt)"
+echo "Warning - There is no NetHack Guidebook (..\..\doc\jguideboo.txt)"
 echo "          included in your distribution.  Build will proceed anyway."
 :long3ok
 
@@ -125,7 +125,7 @@
 echo The following files need to exist under the names on the
 echo right in order to build NetHack:
 echo.
-echo  ..\..\dat\data.base        needs to be copied to ..\..\dat\data.bas
+echo  ..\..\dat\jdata.base        needs to be copied to ..\..\dat\jdata.bas
 echo  ..\..\include\patchlevel.h needs to be copied to ..\..\include\patchlev.h
 echo.
 echo setup.bat was unable to perform the necessary changes because at least
diff -aurN slashem-0.0.7E6F2/sys/msdos/video.c jslashem-0.0.7E6F2-J0.0.8/sys/msdos/video.c
--- slashem-0.0.7E6F2/sys/msdos/video.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/video.c	2004-06-10 08:55:20.000000000 +0900
@@ -643,6 +643,29 @@
 	}
 }
 
+/*JP*/
+void
+xputc2(ch, ch2)	/* write 2 bytes character (and attribute) */
+int ch;
+int ch2;
+{
+	int i;
+	char attribute;
+
+	i = iflags.grmode ? attrib_gr_normal
+			 : attrib_text_normal;
+
+	attribute = (char)((g_attribute == 0) ? i : g_attribute);
+	if (!iflags.grmode) {
+		txt_xputc2(ch, ch2, attribute);
+#  ifdef SCREEN_VGA
+	} else if (iflags.usevga) {
+		vga_xputc2(ch, ch2, attribute);
+#  endif /*SCREEN_VGA*/
+	}
+}
+
+
 void
 xputg(glyphnum,ch,special)	/* write out a glyph picture at current location */
 int glyphnum;
diff -aurN slashem-0.0.7E6F2/sys/msdos/vidtxt.c jslashem-0.0.7E6F2-J0.0.8/sys/msdos/vidtxt.c
--- slashem-0.0.7E6F2/sys/msdos/vidtxt.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/vidtxt.c	2004-06-10 08:55:20.000000000 +0900
@@ -296,6 +296,98 @@
  */
 
 # ifdef OVL0
+/*JP*/
+void
+txt_xputc2(ch, ch2, attr)	/* write out 2byte code character */
+     int ch;
+     int ch2;
+     int attr;
+{
+#  ifdef PC9800
+  unsigned char uc1, uc2;
+
+  uc1 = (unsigned char)ch;
+  uc2 = (unsigned char)ch2;
+
+  union REGS regs;
+
+  regs.h.dl = attr98[attr];
+  regs.h.ah = SETATT;
+  regs.h.cl = DIRECT_CON_IO;
+
+  (void) int86(DOS_EXT_FUNC, &regs, &regs);
+
+  regs.h.dl = uc1;
+  regs.h.ah = PUTCHAR;
+  regs.h.cl = DIRECT_CON_IO;
+
+  (void) int86(DOS_EXT_FUNC, &regs, &regs);
+
+  regs.h.dl = uc2;
+  regs.h.ah = PUTCHAR;
+  regs.h.cl = DIRECT_CON_IO;
+
+  (void) int86(DOS_EXT_FUNC, &regs, &regs);
+#  else
+#   ifdef SCREEN_BIOS
+  union REGS regs;
+#   endif
+  int col,row;
+  unsigned char uc1, uc2;
+
+  uc1 = (unsigned char)ch;
+  uc2 = (unsigned char)ch2;
+
+  txt_get_cursor(&col,&row);
+/*
+  ++col;
+  txt_gotoxy(col,row);
+*/
+
+#   ifdef SCREEN_DJGPPFAST
+  ScreenPutChar((int)uc1,attr,col,row);
+  ScreenPutChar((int)uc2,attr,col,row);
+#   endif
+#   ifdef SCREEN_BIOS
+  regs.h.ah = PUTCHARATT;  /* write att & character */
+  regs.h.al = uc1;	 /* character             */
+  regs.h.bh = 0;           /* display page          */
+  regs.h.bl = (char)attr;  /* BL = attribute        */
+  regs.x.cx = 1;	   /* one character         */
+  (void) int86(VIDEO_BIOS, &regs, &regs);
+  if (col < (CO - 1)) ++col;
+  txt_gotoxy(col,row);
+
+  regs.h.ah = PUTCHARATT;  /* write att & character */
+  regs.h.al = uc2;	 /* character             */
+  regs.h.bh = 0;           /* display page          */
+  regs.h.bl = (char)attr;  /* BL = attribute        */
+  regs.x.cx = 1;	   /* one character         */
+  (void) int86(VIDEO_BIOS, &regs, &regs);
+#   endif
+  if (col < (CO - 1 )) ++col;
+  txt_gotoxy(col,row);
+#  endif /* PC9800 */
+}
+
+#if 1 /*JP*/
+void
+txt_xputs(s,col,row)
+const char *s;
+int col,row;
+{
+  unsigned int buf[2];
+
+  if(s){
+    while(*s){
+      txt_gotoxy(col, row);
+      jbuffer(*s, buf, NULL, xputc, xputc2);
+      ++col;
+      ++s;
+    }
+  }
+}
+#else
 void
 txt_xputs(s,col,row)
 const char *s;
@@ -313,6 +405,7 @@
 		}
 	}
 }
+#endif
 
 void
 txt_xputc(ch,attr)	/* write out character (and attribute) */
diff -aurN slashem-0.0.7E6F2/sys/msdos/vidvga.c jslashem-0.0.7E6F2-J0.0.8/sys/msdos/vidvga.c
--- slashem-0.0.7E6F2/sys/msdos/vidvga.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/msdos/vidvga.c	2004-06-10 08:55:20.000000000 +0900
@@ -381,6 +381,24 @@
 	}
 }
 
+#if 1 /*JP*/
+void
+vga_xputc2(ch, ch2, attr)
+int ch;
+int ch2;
+int attr;
+{
+  int col, row;
+
+  col = curcol;
+  row = currow;
+
+  vga_WriteChar2((unsigned char)ch,(unsigned char)ch2,col,row,attr);
+  if (col < (CO -2 )) col+=2;
+  vga_gotoloc(col,row);
+}
+#endif
+
 void
 vga_xputc(ch,attr)	/* write out character (and attribute) */
 char ch;
@@ -481,6 +499,9 @@
 {
 	curcol = min(col,CO - 1); /* protection from callers */
 	currow = min(row,LI - 1);
+#if 1 /*JP*/
+	txt_gotoxy(col, row);
+#endif
 }
 
 #  if defined(USE_TILES) && defined(CLIPPING)
@@ -924,6 +945,40 @@
 	return 0;
 }
 
+#if 1 /*JP*/
+void
+vga_WriteChar2(chr, chr2, col, row, colour)
+int chr, chr2, col, row, colour;
+{
+  int saved_col, saved_row;
+
+  saved_col = curcol;
+  saved_row = currow;
+
+  vga_gotoloc(col, row);
+  txt_xputc2(chr, chr2, 14);
+
+  curcol = saved_col;
+  currow = saved_row;
+}
+
+void
+vga_WriteChar(chr, col, row, colour)
+int chr, col, row, colour;
+{
+  int saved_col, saved_row;
+
+  saved_col = curcol;
+  saved_row = currow;
+
+  vga_gotoloc(col, row);
+  txt_xputc(chr, 14);
+
+  curcol = saved_col;
+  currow = saved_row;
+}
+
+#else
 /*
  * Write character 'ch', at (x,y) and
  * do it using the colour 'colour'.
@@ -968,6 +1023,7 @@
 	outportb(0x3ce,8);
 	outportb(0x3cf,255);
 }
+#endif
 
 /*
  * This is the routine that displays a high-res "cell" pointed to by 'gp'
@@ -1046,6 +1102,20 @@
 char *s;
 int len,col,row,colour;
 {
+#if 1 /*JP*/
+	int i = 0;
+
+	g_attribute = 14;
+
+	if(s)
+	  while(*s && i<len){
+		  vga_gotoloc(col, row);
+		  jputchar(*s);
+		  ++col;
+		  ++s;
+		  ++i;
+	  }
+#else
 	unsigned char *us;
 	int i = 0;
 
@@ -1060,6 +1130,7 @@
 		++i;
 		++col;
 	}
+#endif
 }
 
 # endif /* OVLB */
diff -aurN slashem-0.0.7E6F2/sys/share/dgn_lex.c jslashem-0.0.7E6F2-J0.0.8/sys/share/dgn_lex.c
--- slashem-0.0.7E6F2/sys/share/dgn_lex.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/share/dgn_lex.c	2004-06-16 23:56:06.000000000 +0900
@@ -8,8 +8,7 @@
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
 
-#include <stdio.h>
-#include <unistd.h>
+#include "config.h"
 
 
 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
diff -aurN slashem-0.0.7E6F2/sys/share/lev_lex.c jslashem-0.0.7E6F2-J0.0.8/sys/share/lev_lex.c
--- slashem-0.0.7E6F2/sys/share/lev_lex.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/share/lev_lex.c	2004-06-16 23:55:44.000000000 +0900
@@ -8,8 +8,7 @@
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
 
-#include <stdio.h>
-#include <unistd.h>
+#include "config.h"
 
 
 /* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
diff -aurN slashem-0.0.7E6F2/sys/share/pcmain.c jslashem-0.0.7E6F2-J0.0.8/sys/share/pcmain.c
--- slashem-0.0.7E6F2/sys/share/pcmain.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/share/pcmain.c	2004-06-23 08:51:06.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 2000
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* main.c - MSDOS, OS/2, ST, Amiga, and NT NetHack */
 
 #include "hack.h"
@@ -245,7 +252,13 @@
 #ifdef CHDIR
 			chdirx(hackdir,0);
 #endif
+#if 1 /*JP*/
+			init_jtrns();
+#endif
 			prscore(argc, argv);
+#if 1 /*JP*/
+			jputchar('\0'); /* reset */
+#endif
 			nethack_exit(EXIT_SUCCESS);
 		}
 
@@ -410,7 +423,10 @@
 		    iflags.news = FALSE;
 		}
 #endif
+/*JP
 		pline("Restoring save file...");
+*/
+		pline("セーブファイルを復元中．．．");
 		mark_synch();	/* flush output */
 
 		if(!dorecover(fd))
@@ -420,10 +436,16 @@
 #endif
 		check_special_room(FALSE);
 		if (discover)
+/*JP
 			You("are in non-scoring discovery mode.");
+*/
+			pline("発見モードではスコアはのらないよ．");
 
 		if (discover || wizard) {
+/*JP
 			if(yn("Do you want to keep the save file?") == 'n'){
+*/
+			if(yn("セーブファイルを残しておきますか？") == 'n'){
 				(void) delete_savefile();
 			}
 		}
@@ -434,7 +456,10 @@
 		player_selection();
 		newgame();
 		if (discover)
+/*JP
 			You("are in non-scoring discovery mode.");
+*/
+			pline("発見モードではスコアはのらないよ．");
 
 		flags.move = 0;
 		set_wear();
@@ -506,11 +531,17 @@
 #endif
 		case 'u':
 			if(argv[0][2])
+/*JP
 			  (void) strncpy(plname, argv[0]+2, sizeof(plname)-1);
+*/
+			  (void) strncpy(plname, str2ic(argv[0]+2), sizeof(plname)-1);
 			else if(argc > 1) {
 			  argc--;
 			  argv++;
+/*JP
 			  (void) strncpy(plname, argv[0], sizeof(plname)-1);
+*/
+			  (void) strncpy(plname, str2ic(argv[0]), sizeof(plname)-1);
 			} else
 				raw_print("Player name expected after -u");
 			break;
diff -aurN slashem-0.0.7E6F2/sys/share/pcunix.c jslashem-0.0.7E6F2-J0.0.8/sys/share/pcunix.c
--- slashem-0.0.7E6F2/sys/share/pcunix.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/share/pcunix.c	2004-07-30 09:28:56.000000000 +0900
@@ -125,9 +125,13 @@
 	(void) close(fd);
 
 	if(iflags.window_inited) { 
+# ifdef SELF_RECOVER
+	  c = yn("There are files from a game in progress under your name. Recover?");
+# else
 	  pline("There is already a game in progress under your name.");
 	  pline("You may be able to use \"recover %s\" to get it back.\n",tbuf);
 	  c = yn("Do you want to destroy the old game?");
+# endif
 	} else {
 # if defined(MSDOS) && defined(NO_TERMS)
 		grmode = iflags.grmode;
@@ -135,10 +139,15 @@
 # endif
 		c = 'n';
 		ct = 0;
+# ifdef SELF_RECOVER
+		msmsg(
+		"There are files from a game in progress under your name. Recover? [yn]");
+# else
 		msmsg("\nThere is already a game in progress under your name.\n");
 		msmsg("If this is unexpected, you may be able to use \n");
 		msmsg("\"recover %s\" to get it back.",tbuf);
 		msmsg("\nDo you want to destroy the old game? [yn] ");
+# endif
 		while ((ci=nhgetch()) != '\n') {
 		    if (ct > 0) {
 			msmsg("\b \b");
@@ -153,6 +162,7 @@
 		}
 	}
 	if(c == 'y' || c == 'Y')
+# ifndef SELF_RECOVER
 		if(eraseoldlocks()) {
 # if defined(WIN32CON)
 			clear_screen();		/* display gets fouled up otherwise */
@@ -163,10 +173,26 @@
 			chdirx(orgdir, 0);
 			error("Couldn't destroy old game.");
 		}
+# else /*SELF_RECOVER*/
+		if(recover_savefile()) {
+#  if defined(WIN32CON)
+			clear_screen();		/* display gets fouled up otherwise */
+#  endif
+			goto gotlock;
+		} else {
+			unlock_file(HLOCK);
+			chdirx(orgdir, 0);
+			error("Couldn't recover old game.");
+		}
+# endif /*SELF_RECOVER*/
 	else {
 		unlock_file(HLOCK);
 		chdirx(orgdir, 0);
+# ifndef SELF_RECOVER
+		error("%s", "Cannot start a new game.");
+# else
 		error("%s", "");
+# endif
 	}
 
 gotlock:
@@ -201,9 +227,26 @@
  */
 register char *s;
 {
+#if 0 /*JP*/
 	register char *lp;
+#else
+	register unsigned char *lp;
+#endif
 
+#if 0 /*JP*/
 	for (lp = s; *lp; lp++)
+#else
+#ifdef SJIS_FILESYSTEM
+	lp = (unsigned char *)ic2str( s );
+	strcpy(s, lp);
+#endif
+
+	for (lp = s; *lp; lp++){
+		if (is_kanji(*lp)){
+		  lp++;
+		  continue;
+		}
+#endif
 		if (*lp <= ' ' || *lp == '"' || (*lp >= '*' && *lp <= ',') ||
 		    *lp == '.' || *lp == '/' || (*lp >= ':' && *lp <= '?') ||
 # ifdef OS2
@@ -211,6 +254,9 @@
 # endif
 		    *lp == '|' || *lp >= 127 || (*lp >= '[' && *lp <= ']'))
                         *lp = '_';
+#if 1 /*JP*/
+	 }
+#endif
 }
 # endif /* WIN32 */
 #endif /* OVLB */
diff -aurN slashem-0.0.7E6F2/sys/unix/Makefile.dat jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.dat
--- slashem-0.0.7E6F2/sys/unix/Makefile.dat	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.dat	2004-07-11 01:52:08.000000000 +0900
@@ -5,7 +5,7 @@
 # SHELL=E:/GEMINI2/MUPFEL.TTP
 # UUDECODE=uudecode
 
-VARDAT = data rumors quest.dat oracles options
+VARDAT = data jrumors quest.dat joracles options
 
 all:	$(VARDAT) spec_levs quest_levs dungeon
 
@@ -236,16 +236,21 @@
 	# cp ../win/gem/GEM_RSC.RSC GEM_RSC.RSC
 	$(UUDECODE) ../win/gem/gem_rsc.uu
 
-data:	data.base ../util/makedefs
+#data:	data.base ../util/makedefs
+data:	jdata.base ../util/makedefs
 	../util/makedefs -d
 
-rumors:	rumors.tru rumors.fal ../util/makedefs
+#rumors:	rumors.tru rumors.fal ../util/makedefs
+jrumors:	jrumors.tru jrumors.fal ../util/makedefs
 	../util/makedefs -r
 
-quest.dat:	quest.txt ../util/makedefs
+#quest.dat:	quest.txt ../util/makedefs
+quest.dat:	jquest.txt ../util/makedefs
 	../util/makedefs -q
 
-oracles:	oracles.txt ../util/makedefs
+# by issei 1994/2/5
+#oracles:	oracles.txt ../util/makedefs
+joracles:	joracles.txt ../util/makedefs
 	../util/makedefs -h
 
 # note: 'options' should have already been made when include/date.h was created
@@ -336,6 +341,7 @@
 	-rm -f gl*.png
 	-rm -f pet_mark.xbm rip.xpm mapbg.xpm
 	-rm -f rip.img GEM_RSC.RSC title.img nh16.img SlashEM.ad
+	-rm -f ../include/jdata.h
 	-rm -f ../win/share/monmag.txt ../win/share/mon32.txt
 	-rm -f ../win/share/objmag.txt ../win/share/obj32.txt
 	-rm -f ../win/share/othmag.txt ../win/share/oth32.txt
diff -aurN slashem-0.0.7E6F2/sys/unix/Makefile.doc jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.doc
--- slashem-0.0.7E6F2/sys/unix/Makefile.doc	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.doc	2004-07-11 01:45:02.000000000 +0900
@@ -11,9 +11,9 @@
 # for Atari
 # SHELL=E:/GEMINI2/MUPFEL.TTP
 
-GUIDEBOOK = Guidebook		# regular ASCII file
-#GUIDEBOOK = Guidebook.ps	# PostScript file
-#GUIDEBOOK = Guidebook.dvi	# TeX device-independent file
+GUIDEBOOK = jGuidebook		# regular ASCII file
+#GUIDEBOOK = jGuidebook.ps	# PostScript file
+#GUIDEBOOK = jGuidebook.dvi	# TeX device-independent file
 
 # Some versions of col need -x to keep them from converting spaces to tabs;
 # some versions of col don't do the conversion by default and don't
@@ -26,31 +26,31 @@
 PSCMD = groff -Wall -Tps
 
 # Use the "cat" GUIDECMD if groff and/or tbl are not installed
-# Not appropriate for creating Guidebook.txt.
+# Not appropriate for creating jGuidebook.txt.
 # DOS w/o cat users can use "type"
-# GUIDECMD = cat Guidebook.txt
-# GUIDECMD = type Guidebook.txt
+# GUIDECMD = cat jGuidebook.txt
+# GUIDECMD = type jGuidebook.txt
 # The following work better with groff-1.18, eg on Linux
-# GUIDECMD = tbl tmac.n Guidebook.mn | nroff -c -Tascii | $(COLCMD)
-# GUIDECMD = tbl tmac.n Guidebook.mn | groff -Wall -mtty-char -Tascii -P-u -P-b 
-GUIDECMD = tbl tmac.n Guidebook.mn | nroff | $(COLCMD)
+# GUIDECMD = tbl tmac.n jGuidebook.mn | nroff -c -Tascii | $(COLCMD)
+# GUIDECMD = tbl tmac.n jGuidebook.mn | groff -Wall -mtty-char -Tascii -P-u -P-b 
+GUIDECMD = tbl tmac.n jGuidebook.mn | nroff | $(COLCMD)
 
 # the basic guidebook
-Guidebook:	Guidebook.mn
-	$(GUIDECMD) > Guidebook
+jGuidebook:	jGuidebook.mn
+	$(GUIDECMD) > jGuidebook
 
 # Fancier output for those with ditroff, psdit and a PostScript printer.
-Guidebook.ps:	Guidebook.mn
-	tbl tmac.n Guidebook.mn | $(PSCMD) > Guidebook.ps
+jGuidebook.ps:	jGuidebook.mn
+	tbl tmac.n jGuidebook.mn | $(PSCMD) > jGuidebook.ps
 
 # Guidebook.tex is the same as Guidebook.mn but formatted with LaTeX.
 # - The invocation command for LaTeX may vary in different installations.
 # - To print Guidebook.dvi you need to use a suitable dvi-driver.
-Guidebook.dvi:	Guidebook.tex
-	latex Guidebook.tex
+jGuidebook.dvi:	jGuidebook.tex
+	latex jGuidebook.tex
 # Or for those with groff
-# Guidebook.dvi:	Guidebook.mn
-#	tbl tmac.n Guidebook.mn | groff -Wall -Tdvi > Guidebook.dvi
+# jGuidebook.dvi:	jGuidebook.mn
+#	tbl tmac.n jGuidebook.mn | groff -Wall -Tdvi > jGuidebook.dvi
 
 GAME    = slashem
 #GAME    = nethack
@@ -79,13 +79,13 @@
 	-$(DLBMANCREATE) $(MANDIR)/dlb.$(MANEXT)
 
 # manual creation for distribution
-DISTRIB = Guidebook.txt $(GAME).txt lev_comp.txt dgn_comp.txt recover.txt dlb.txt
+DISTRIB = jGuidebook.txt $(GAME).txt lev_comp.txt dgn_comp.txt recover.txt dlb.txt
 
 distrib: $(DISTRIB)
 	@echo "Plain text documentation is up to date."
 
-Guidebook.txt	: Guidebook.mn tmac.n
-	$(GUIDECMD) > Guidebook.txt
+jGuidebook.txt	: jGuidebook.mn tmac.n
+	$(GUIDECMD) > jGuidebook.txt
 $(GAME).txt	: $(GAME).6
 	nroff -man $(GAME).6 | $(COLCMD) > $(GAME).txt
 lev_comp.txt	: lev_comp.6
@@ -99,10 +99,10 @@
 
 
 clean:
-	-rm -f Guidebook.aux Guidebook.log
+	-rm -f jGuidebook.aux jGuidebook.log
 
 spotless: clean
-	-rm -f Guidebook Guidebook.ps Guidebook.dvi
+	-rm -f jGuidebook jGuidebook.ps jGuidebook.dvi
 
 maintainer-clean: spotless
 	-rm -f $(DISTRIB)
diff -aurN slashem-0.0.7E6F2/sys/unix/Makefile.src jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.src
--- slashem-0.0.7E6F2/sys/unix/Makefile.src	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.src	2004-06-22 09:02:10.000000000 +0900
@@ -55,6 +55,9 @@
 #SYSSRC = ../sys/be/bemain.c ../sys/share/unixtty.c ../sys/share/ioctl.c
 #SYSOBJ = bemain.o unixtty.o ioctl.o
 
+#JP by issei(93/11/10)
+JSRC = ../japanese/jconj.c ../japanese/jtrns.c ../japanese/jlib.c
+JOBJ = jconj.o jtrns.o jlib.o
 
 # if you are using gcc as your compiler:
 #	uncomment the CC definition below if it's not in your environment
@@ -69,7 +72,7 @@
 #
 #	If you are using GCC 2.2.2 or higher on a DPX/2, just use:
 #
-# CC = gcc -ansi
+CC = gcc
 #
 #	For HP/UX 10.20 with GCC:
 # CC = gcc -D_POSIX_SOURCE
@@ -144,7 +147,7 @@
 # flags for debugging:
 # CFLAGS = -g -I../include
 
-CFLAGS = -O -I../include
+CFLAGS = -W -g -O -I../include
 LFLAGS =
 
 # Only used for the Gnome interface.
@@ -190,6 +193,16 @@
 WINGTKCONFIG=PKG_CONFIG_PATH=/usr/devel/lib/pkgconfig pkg-config gtk+-2.0
 WINGTKCFLAGS=`$(WINGTKCONFIG) --cflags`
 
+# flags for IPv6 support
+#   for Linux + glibc-2.1.x / Solaris users
+# CFLAGS += -DINET6
+#   for KAME users
+# CFLAGS += -DINET6
+# LFLAGS += -L/usr/local/v6/lib -linet6
+#   for Linux libinet users
+# CFLAGS  = -DINET6 -I/usr/inet6/include $(CFLAGS)
+# LFLAGS += -L/usr/inet6/lib -linet6
+
 # Set the WINSRC, WINOBJ, and WINLIB lines to correspond to your desired
 # combination of windowing systems.  Also set windowing systems in config.h.
 #
@@ -336,8 +349,8 @@
 # WINTTYLIB = -ltermcap
 # WINTTYLIB = -lcurses
 # WINTTYLIB = -lcurses16
-# WINTTYLIB = -lncurses
-WINTTYLIB = -ltermlib
+ WINTTYLIB = -lncurses
+# WINTTYLIB = -ltermlib
 #
 # libraries for X11
 # If USE_XPM is defined in config.h, you will also need -lXpm here.
@@ -419,7 +432,7 @@
 LIBS =
 
 # make NetHack
-GAME     = slashem
+GAME     = jslashem
 # GAME     = slashem.prg
 
 # if you defined RANDOM in unixconf.h/tosconf.h since your system did not come
@@ -480,10 +493,10 @@
 WINCXXSRC = $(WINQTSRC) $(WINBESRC)
 
 # .c files for this version (for date.h)
-VERSOURCES = $(HACKCSRC) $(SYSSRC) $(WINSRC) $(GENCSRC)
+VERSOURCES = $(HACKCSRC) $(JSRC) $(SYSSRC) $(WINSRC) $(GENCSRC)
 
 # .c files for all versions using this Makefile (for lint and tags)
-CSOURCES = $(HACKCSRC) $(SYSSRC) $(WINCSRC) $(GENCSRC)
+CSOURCES = $(HACKCSRC) $(JSRC) $(SYSSRC) $(WINCSRC) $(GENCSRC)
 
 
 # all .h files except date.h, onames.h, pm.h, and vis_tab.h which would
@@ -522,7 +535,7 @@
 	uhitm.o vault.o vision.o vis_tab.o weapon.o were.o wield.o windows.o \
 	wizard.o worm.o worn.o write.o zap.o \
 	gypsy.o tech.o \
-	$(RANDOBJ) $(SYSOBJ) $(WINOBJ) version.o
+	$(RANDOBJ) $(JOBJ) $(SYSOBJ) $(WINOBJ) version.o
 # the .o files from the HACKCSRC, SYSSRC, and WINSRC lists
 
 $(GAME):	$(SYSTEM)
@@ -637,6 +650,9 @@
 vis_tab.c: ../include/vis_tab.h
 tile.c: ../win/share/tilemap.c $(HACK_H)
 	@( cd ../util ; $(MAKE) ../src/tile.c )
+#JP by issei(94/07/13)
+../include/jdata.h: $(MAKEDEFS) ../dat/jtrnsobj.dat ../dat/jtrnsmon.dat
+	@( cd ../util ; $(MAKE) ../include/jdata.h )
 
 ../win/gnome/gn_rip.h: ../win/X11/rip.xpm
 	cp ../win/X11/rip.xpm ../win/gnome/gn_rip.h
@@ -989,6 +1005,32 @@
 		../include/patchlevel.h ../include/winGL.h
 	$(CC) $(CFLAGS) $(SDLGL_CFLAGS) -c ../win/gl/gl_win.c
 tile.o: tile.c $(HACK_H)
+jconj.o: ../japanese/jconj.c  ../include/hack.h
+	$(CC) $(CFLAGS) -c ../japanese/jconj.c
+jtrns.o: ../japanese/jtrns.c  ../include/hack.h ../include/jdata.h
+	$(CC) $(CFLAGS) -c ../japanese/jtrns.c
+jlib.o: ../japanese/jlib.c  ../include/hack.h
+	$(CC) $(CFLAGS) -c ../japanese/jlib.c
+gtk.o: ../win/gtk/gtk.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtk.c
+gtkgetlin.o: ../win/gtk/gtkgetlin.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkgetlin.c
+gtkstatus.o: ../win/gtk/gtkstatus.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkstatus.c
+gtkmenu.o: ../win/gtk/gtkmenu.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkmenu.c
+gtkyn.o: ../win/gtk/gtkyn.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkyn.c
+gtkmap.o: ../win/gtk/gtkmap.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkmap.c
+gtkmessage.o: ../win/gtk/gtkmessage.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkmessage.c
+gtkmisc.o: ../win/gtk/gtkmisc.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/gtkmisc.c
+xshmmap.o: ../win/gtk/xshmmap.c ../include/hack.h ../include/winGTK.h
+	$(CC) $(CFLAGS) -c ../win/gtk/xshmmap.c
+xshm.o: ../win/gtk/xshm.c ../include/hack.h ../include/xshm.h
+	$(CC) $(CFLAGS) -c ../win/gtk/xshm.c
 qt_win.o: ../win/Qt/qt_win.cpp $(HACK_H) ../include/func_tab.h \
 		../include/dlb.h ../include/date.h ../include/patchlevel.h \
 		../include/tile2x11.h ../include/qt_win.h \
diff -aurN slashem-0.0.7E6F2/sys/unix/Makefile.top jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.top
--- slashem-0.0.7E6F2/sys/unix/Makefile.top	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.top	2004-07-11 14:03:58.000000000 +0900
@@ -15,7 +15,7 @@
 
 # make NetHack
 PREFIX   = /usr
-GAME     = slashem
+GAME     = jslashem
 # GAME     = slashem.prg
 GAMEUID  = games
 GAMEGRP  = bin
@@ -40,7 +40,7 @@
 # These must agree with the definitions in unixconf.h
 
 # Defs. for non file areas support.
-GAMEDIR  = $(PREFIX)/local/slashemdir
+GAMEDIR  = $(PREFIX)/local/jslashemdir
 VARDIR = $(GAMEDIR)
 FILE_AREA_VAR = $(VARDIR)
 FILE_AREA_SAVE = $(VARDIR)/save
@@ -103,7 +103,7 @@
 # CNF_SHARE_DATND = $(CNF_SHARE_PROXYND)
 CNF_SHARE_DATND =
 
-CNF_SHARE_DATD = data oracles options quest.dat rumors
+CNF_SHARE_DATD = data joracles options quest.dat jrumors
 CNF_SHARE_DAT = $(CNF_SHARE_DATD) $(CNF_SHARE_DATND)
 
 # Some versions of make use the SHELL environment variable as the shell
@@ -124,7 +124,8 @@
 # end of configuration
 #
 
-DATHELP = help hh cmdhelp history opthelp wizhelp gypsy.txt
+#DATHELP = help hh cmdhelp history opthelp wizhelp gypsy.txt
+DATHELP = jhelp jhh jcmdhelp jhistory jopthelp jwizhelp jgypsy.txt
 
 SPEC_LEVS = asmodeus.lev baalz.lev bigrm-?.lev castle.lev fakewiz?.lev \
 	juiblex.lev knox.lev medusa-?.lev minend-?.lev minefill.lev \
@@ -148,14 +149,14 @@
 $(GAME):
 	( cd src ; $(MAKE) )
 
-all:	$(GAME) recover Guidebook $(CNF_SHARE_DAT) dungeon spec_levs check-dlb
+all:	$(GAME) recover jGuidebook $(CNF_SHARE_DAT) dungeon spec_levs check-dlb
 	@echo "Done."
 
 # Note: many of the dependencies below are here to allow parallel make
 # to generate valid output
 
-Guidebook:
-	( cd doc ; $(MAKE) Guidebook )
+jGuidebook:
+	( cd doc ; $(MAKE) jGuidebook )
 
 manpages:
 	( cd doc ; $(MAKE) manpages )
@@ -163,11 +164,11 @@
 data: $(GAME)
 	( cd dat ; $(MAKE) data )
 
-rumors: $(GAME)
-	( cd dat ; $(MAKE) rumors )
+jrumors: $(GAME)
+	( cd dat ; $(MAKE) jrumors )
 
-oracles: $(GAME)
-	( cd dat ; $(MAKE) oracles )
+joracles: $(GAME)
+	( cd dat ; $(MAKE) joracles )
 
 #	Note: options should have already been made with make, but...
 options: $(GAME)
@@ -185,8 +186,8 @@
 	( cd util ; $(MAKE) dgn_comp )
 	( cd dat ; $(MAKE) dungeon )
 
-Guidebook.txt:
-	( cd doc; $(MAKE) Guidebook.txt )
+jGuidebook.txt:
+	( cd doc; $(MAKE) jGuidebook.txt )
 
 nhtiles.bmp: $(GAME)
 	( cd dat ; $(MAKE) nhtiles.bmp )
@@ -290,7 +291,7 @@
 	$(MAKE) dofiles-$${target-nodlb}
 	cp src/$(GAME) $(FILE_AREA_UNSHARE)
 	cp util/recover $(FILE_AREA_UNSHARE)
-	cp dat/license doc/Guidebook.txt $(FILE_AREA_DOC)
+	cp dat/license doc/jGuidebook.txt $(FILE_AREA_DOC)
 #	cp win/Qt/KDE/kslashem.kdelnk $(KDEDIR)/share/applnk/Games
 	-rm -f $(SHELLDIR)/$(GAME)
 	sed -e 's;/usr/games/lib/nethackdir;$(FILE_AREA_UNSHARE);' \
@@ -303,9 +304,9 @@
 	chmod $(GAMEPERM) $(FILE_AREA_UNSHARE)/$(GAME)
 	chmod $(EXEPERM) $(FILE_AREA_UNSHARE)/recover
 	-( cd $(FILE_AREA_DOC) ; \
-			$(CHOWN) $(GAMEUID) license Guidebook.txt ; \
-			$(CHGRP) $(GAMEGRP) license Guidebook.txt ; \
-			chmod $(FILEPERM) license Guidebook.txt )
+			$(CHOWN) $(GAMEUID) license jGuidebook.txt ; \
+			$(CHGRP) $(GAMEGRP) license jGuidebook.txt ; \
+			chmod $(FILEPERM) license jGuidebook.txt )
 	-$(CHOWN) $(GAMEUID) $(SHELLDIR)/$(GAME)
 	$(CHGRP) $(GAMEGRP) $(SHELLDIR)/$(GAME)
 	chmod $(EXEPERM) $(SHELLDIR)/$(GAME)
@@ -335,7 +336,7 @@
 			$(CHGRP) $(GAMEGRP) $(UNSHARE_DAT) ; \
 			chmod $(FILEPERM) $(UNSHARE_DAT) )
 
-update: $(GAME) recover $(CNF_SHARE_DAT) dungeon spec_levs Guidebook.txt
+update: $(GAME) recover $(CNF_SHARE_DAT) dungeon spec_levs jGuidebook.txt
 #	(don't yank the old version out from under people who're playing it)
 	-mv $(FILE_AREA_UNSHARE)/$(GAME) $(FILE_AREA_UNSHARE)/$(GAME).old
 #	quest.dat is also kept open and has the same problems over NFS
@@ -351,7 +352,7 @@
 # and a reminder
 	@echo You may also want to install the man pages via the doc Makefile.
 
-install: $(GAME) recover $(CNF_SHARE_DAT) dungeon spec_levs Guidebook.txt
+install: $(GAME) recover $(CNF_SHARE_DAT) dungeon spec_levs jGuidebook.txt
 # set up the directories
 # not all mkdirs have -p; those that don't will create a -p directory
 	-mkdir -p $(SHELLDIR)
diff -aurN slashem-0.0.7E6F2/sys/unix/Makefile.utl jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.utl
--- slashem-0.0.7E6F2/sys/unix/Makefile.utl	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/Makefile.utl	2004-06-10 08:55:20.000000000 +0900
@@ -15,7 +15,7 @@
 
 # if you are using gcc as your compiler,
 #	uncomment the CC definition below if it's not in your environment
-# CC = gcc
+CC = gcc
 #
 #	For Bull DPX/2 systems at B.O.S. 2.0 or higher use the following:
 #
@@ -101,11 +101,11 @@
 
 # yacc/lex programs to use to generate *_comp.h, *_lex.c, and *_yacc.c.
 # if, instead of yacc/lex you have bison/flex, comment/uncomment the following.
-YACC     = yacc
-LEX      = lex
-# YACC     = bison -y
+# YACC     = yacc
+# LEX      = lex
+YACC     = bison -y
 # YACC     = byacc
-# LEX      = flex
+LEX      = flex -8
  
 # these are the names of the output files from YACC/LEX. Under MS-DOS
 # and similar systems, they may differ
@@ -191,6 +191,8 @@
 	./makedefs -m
 ../include/vis_tab.h: makedefs
 	./makedefs -z
+../include/jdata.h: makedefs ../dat/jtrnsmon.dat ../dat/jtrnsobj.dat
+	./makedefs -j
 # makedefs -z makes both vis_tab.h and vis_tab.c, but writes the .h first
 ../src/vis_tab.c: ../include/vis_tab.h
 
diff -aurN slashem-0.0.7E6F2/sys/unix/nethack.sh jslashem-0.0.7E6F2-J0.0.8/sys/unix/nethack.sh
--- slashem-0.0.7E6F2/sys/unix/nethack.sh	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/nethack.sh	2004-06-10 08:55:20.000000000 +0900
@@ -4,7 +4,31 @@
 HACKDIR=/usr/games/lib/nethackdir
 export HACKDIR
 HACK=$HACKDIR/nethack
-MAXNROFPLAYERS=4
+MAXNROFPLAYERS=20
+
+# JP
+# set LC_ALL, NETHACKOPTIONS etc..
+#
+if [ "X$LC_ALL" = "X" -o "X$LC_ALL" = "XC" ] ; then
+	LC_ALL=ja_JP.eucJP
+	export LC_ALL
+fi
+if [ "X$LANG" = "X" -o "X$LANG" = "XC" ] ; then
+	LANG=ja_JP.eucJP
+	export LANG
+fi
+if [ "X$NETHACKOPTIONS" = "X" ] ; then
+	NEXTHACKOPTIONS=
+	export NETHACKOPTIONS
+fi
+if [ "X$USERFILESEARCHPATH" = "X" ] ; then
+	USERFILESEARCHPATH=$HACKDIR/%L/%N%C%S:$HACKDIR/%N%C%S:$HACKDIR/%N%S
+	export USERFILESEARCHPATH
+fi
+
+#if [ "X$DISPLAY" ] ; then
+#	xset fp+ $HACKDIR
+#fi
 
 # Since Nethack.ad is installed in HACKDIR, add it to XUSERFILESEARCHPATH
 case "x$XUSERFILESEARCHPATH" in
diff -aurN slashem-0.0.7E6F2/sys/unix/unixmain.c jslashem-0.0.7E6F2-J0.0.8/sys/unix/unixmain.c
--- slashem-0.0.7E6F2/sys/unix/unixmain.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/unixmain.c	2004-06-23 08:51:08.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 1994-1999
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* main.c - Unix NetHack */
 
 #include "hack.h"
@@ -106,11 +113,20 @@
 #ifdef CHDIR
 		chdirx(dir,0);
 #endif
+#if 1 /*JP*/
+		setkcode('I');
+		initoptions();
+		init_jtrns();
+		prscore(argc, argv);
+		jputchar('\0'); /* reset */
+#else
 		prscore(argc, argv);
+#endif
 		exit(EXIT_SUCCESS);
 	    }
 	}
 
+
 	/*
 	 * Change directories before we initialize the window system so
 	 * we can find the tile file.
@@ -135,6 +151,13 @@
 	    lock_windows(TRUE);         /* Can't be overridden from options */
 	}
 #endif
+#if 1 /*JP*/
+	/* Line like "OPTIONS=name:foo-@" may exist in config file.
+	 * In this case, need to select random class,
+	 * so must call setrandom() before initoptions().
+	 */
+	setrandom();
+#endif
 	initoptions();
 	init_nhwindows(&argc,argv);
 	exact_username = whoami();
@@ -245,7 +268,10 @@
 		    iflags.news = FALSE; /* in case dorecover() fails */
 		}
 #endif
+/*JP
 		pline("Restoring save file...");
+*/
+		pline("セーブファイルを復元中．．．");
 		mark_synch();	/* flush output */
 		if(!dorecover(fd))
 			goto not_recovered;
@@ -256,7 +282,10 @@
 		wd_message();
 
 		if (discover || wizard) {
+/*JP
 			if(yn("Do you want to keep the save file?") == 'n')
+*/
+			if(yn("セーブファイルを残しておきますか？") == 'n')
 			    (void) delete_savefile();
 			else {
 #ifndef FILE_AREAS
@@ -523,17 +552,26 @@
 {
 #ifdef WIZARD
 	if (wiz_error_flag) {
+/*JP
 		pline("Only user \"%s\" may access debug (wizard) mode.",
+*/
+		pline("「%s」のみがデバッグ(wizard)モードを使用できる．",
 # ifndef KR1ED
 			WIZARD);
 # else
 			WIZARD_NAME);
 # endif
+/*JP
 		pline("Entering discovery mode instead.");
+*/
+		pline("かわりに発見モードへ移行する．");
 	} else
 #endif
 	if (discover)
+/*JP
 		You("are in non-scoring discovery mode.");
+*/
+		You("スコアの載らない発見モードで起動した．");
 }
 
 /*
diff -aurN slashem-0.0.7E6F2/sys/unix/unixunix.c jslashem-0.0.7E6F2-J0.0.8/sys/unix/unixunix.c
--- slashem-0.0.7E6F2/sys/unix/unixunix.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/unix/unixunix.c	2004-06-23 08:51:10.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 /* This file collects some Unix dependencies */
 
 #include "hack.h"	/* mainly for index() which depends on BSD */
@@ -192,10 +199,18 @@
 		(void) close(fd);
 
 		if(iflags.window_inited) {
+/*JP
 		    c = yn("There is already a game in progress under your name.  Destroy old game?");
+*/
+		    c = yn("あなたの名前で不正終了したゲームが残っています．破棄しますか？");
 		} else {
+#if 0 /*JP*/
 		    (void) printf("\nThere is already a game in progress under your name.");
 		    (void) printf("  Destroy old game? [yn] ");
+#else
+		    (void) printf("\nあなたの名前で不正終了したゲームが残っています．");
+		    (void) printf("破棄しますか？[yn] ");
+#endif
 		    (void) fflush(stdout);
 		    c = getchar();
 		    (void) putchar(c);
@@ -254,10 +269,28 @@
 regularize(s)	/* normalize file name - we don't like .'s, /'s, spaces */
 register char *s;
 {
+#if 0 /*JP*/
 	register char *lp;
+#else
+	register unsigned char *lp;
+#endif
 
+#ifdef SJIS_FILESYSTEM
+	lp = (unsigned char *)ic2str( s );
+	strcpy(s, lp);
+	for (lp = s; *lp; lp++){
+	    if(is_kanji(*lp)){
+		lp++;
+		continue;
+	    }
+	    if(*lp == '.' || *lp == '/' || *lp == ' '){
+		*lp = '_';
+	    }
+	}
+#else
 	while((lp=index(s, '.')) || (lp=index(s, '/')) || (lp=index(s,' ')))
 		*lp = '_';
+#endif
 #if defined(SYSV) && !defined(AIX_31) && !defined(SVR4) && !defined(LINUX) && !defined(__APPLE__)
 	/* avoid problems with 14 character file name limit */
 # ifdef COMPRESS
diff -aurN slashem-0.0.7E6F2/sys/winnt/Makefile.bcc jslashem-0.0.7E6F2-J0.0.8/sys/winnt/Makefile.bcc
--- slashem-0.0.7E6F2/sys/winnt/Makefile.bcc	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/Makefile.bcc	2004-07-02 19:42:22.000000000 +0900
@@ -100,9 +100,9 @@
 #  It must be present prior to compilation.
 
 !IF "$(GRAPHICAL)" == "Y"
-GAME    = NetHackW                # Game Name
+GAME    = jslashemW               # Game Name
 !ELSE
-GAME    = NetHack                 # Game Name
+GAME    = jslashem                # Game Name
 !ENDIF
 GAMEDIR = ..\binary               # Game directory
 
@@ -120,6 +120,7 @@
 TTY   = ..\win\tty   # window port files (tty)
 WIN32 = ..\win\win32 # window port files (Win32)
 WSHR  = ..\win\share # Tile support files 
+JP    = ..\japanese
 
 #
 #  Object directory.
@@ -219,12 +220,12 @@
 	$(WIN32)\mhinput.h $(WIN32)\mhmain.h $(WIN32)\mhmap.h $(WIN32)\mhmenu.h \
 	$(WIN32)\mhmsg.h $(WIN32)\mhmsgwnd.h $(WIN32)\mhrip.h $(WIN32)\mhstatus.h \
 	$(WIN32)\mhtext.h $(WIN32)\resource.h $(WIN32)\winMS.h
-WINDLLS	=
-WINPFLAG= -DTILES -DMSWIN_GRAPHICS
+WINDLLS	= $(GAMEDIR)\nhdefkey.dll $(GAMEDIR)\nh340key.dll $(GAMEDIR)\nhraykey.dll
+WINPFLAG= -DTILES -DMSWIN_GRAPHICS -DWIN32CON
 NHRES	= $(O)winhack.res
 WINPINC	= -I$(WIN32)
 !ELSE
-WINPORT	= $(O)nttty.o    
+WINPORT	=
 WINPHDR	=
 WINDLLS	= $(GAMEDIR)\nhdefkey.dll $(GAMEDIR)\nh340key.dll $(GAMEDIR)\nhraykey.dll
 WINPFLAG= -DWIN32CON
@@ -253,6 +254,16 @@
 DLBFLG =
 ! ENDIF
 
+#
+# Uncomment the line below if you want to compile with the internal malloc
+# routines (used to test for memory leaks).
+# You will also need to define MONITOR_HEAP and INTERNAL_MALLOC in config.h
+#
+# Warning: Doing this increases the risk of a non-recoverable game crash.
+
+# USE_NHALLOC = Y
+
+TOUTCH_TEXT = "/**/"
 
 #==========================================
 # Setting up the compiler and linker
@@ -281,7 +292,8 @@
 GAMEFILE = $(FDIR)\$(GAME).exe # whole thing
 
 ! IF ("$(USE_DLB)"=="Y")
-DLB = nhdat
+DLB = $(DAT)\nhshare $(DAT)\nhushare
+DLBOBJS = $(O)dlb_main.o $(O)dlb.o $(O)alloc.o $(O)panic.o $(NHALLOCOBJ)
 ! ELSE
 DLB =
 ! ENDIF
@@ -370,10 +382,22 @@
 
 U  = $(UTIL)^\
 
+J  = $(JP)^\
+
 #
 # Utility Objects.
 #
 
+! IF ("$(USE_NHALLOC)"=="Y")
+NHALLOCOBJ = nhalloc.o
+NHALLOCDLL = nhalloc.dll
+NHALLOCA = nhalloc.a
+! ELSE
+NHALLOCOBJ =
+NHALLOCDLL =
+NHALLOCA =
+! ENDIF
+
 MAKESRC        = $(U)makedefs.c
 
 SPLEVSRC       = $(U)lev_yacc.c	$(U)lev_$(LEX).c $(U)lev_main.c  $(U)panic.c
@@ -392,6 +416,7 @@
 RECOVOBJS      = $(O)recover.o
 
 TILEFILES      = $(WSHR)\monsters.txt $(WSHR)\objects.txt $(WSHR)\other.txt
+TILEFILES32    = $(WSHR)\mon32.txt $(WSHR)\obj32.txt $(WSHR)\oth32.txt
 
 #
 # These are not invoked during a normal game build in 3.4
@@ -433,27 +458,30 @@
 VOBJ24 = $(O)trap.o     $(O)u_init.o   $(O)uhitm.o    $(O)vault.o   
 VOBJ25 = $(O)vis_tab.o  $(O)vision.o   $(O)weapon.o   $(O)were.o    
 VOBJ26 = $(O)wield.o    $(O)windows.o  $(O)wizard.o   $(O)worm.o    
-VOBJ27 = $(O)worn.o     $(O)write.o    $(O)zap.o     
+VOBJ27 = $(O)worn.o     $(O)write.o    $(O)zap.o      $(O)tech.o    
+VOBJ28 = $(O)gypsy.o
 
 DLBOBJ = $(O)dlb.o
 
-TTYOBJ = $(O)topl.o     $(O)getline.o  $(O)wintty.o
+TTYOBJ = $(O)topl.o     $(O)getline.o  $(O)wintty.o   $(O)termcap.o
 
-SOBJ   = $(O)winnt.o    $(O)pcsys.o      $(O)pcunix.o  \
-	   $(SOUND) $(O)pcmain.o	$(O)mapimail.o $(O)nhlan.o
+SOBJ   = $(O)winnt.o    $(O)pcsys.o      $(O)pcunix.o   $(O)nttty.o \
+	 $(SOUND)       $(O)pcmain.o     $(O)mapimail.o $(O)nhlan.o
 
 OBJS   = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
          $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
          $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
          $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
          $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
-         $(VOBJ26) $(VOBJ27)
+         $(VOBJ26) $(VOBJ27) $(VOBJ28)
 
 TILOBJ = $(WINPORT)
 
 VVOBJ  = $(O)version.o
 
-ALLOBJ  = $(TILOBJ) $(SOBJ) $(DLBOBJ)  $(TTYOBJ) $(WOBJ) $(OBJS) $(VVOBJ)
+JOBJ   = $(O)jconj.o $(O)jlib.o $(O)jtrns.o
+
+ALLOBJ  = $(TILOBJ) $(SOBJ) $(DLBOBJ)  $(TTYOBJ) $(WOBJ) $(OBJS) $(VVOBJ) $(JOBJ)
 
 
 !IF "$(GRAPHICAL)" == "Y"
@@ -496,7 +524,7 @@
 # Miscellaneous
 #==========================================
 
-DATABASE = $(DAT)\data.base
+DATABASE = $(DAT)\jdata.base
 
 #
 #  The name of the game.
@@ -529,19 +557,23 @@
 install: graphicschk $(GAME) $(O)install.tag
 	 @echo Done.
 
-$(O)install.tag: 	$(DAT)\data	$(DAT)\rumors	 $(DAT)\dungeon \
-	 	$(DAT)\oracles	$(DAT)\quest.dat $(O)sp_lev.tag $(DLB)
+$(O)install.tag: 	$(DAT)\data	$(DAT)\jrumors	 $(DAT)\dungeon \
+	 	$(DAT)\joracles	$(DAT)\quest.dat $(O)sp_lev.tag $(DLB)
 ! IF ("$(USE_DLB)"=="Y")
-	copy nhdat                $(GAMEDIR)
+	copy $(DAT)\nhshare       $(GAMEDIR)
+	copy $(DAT)\nhushare      $(GAMEDIR)
 	copy $(DAT)\license       $(GAMEDIR)
-	copy $(DAT)\opthelp       $(GAMEDIR)
+	copy $(DAT)\jopthelp      $(GAMEDIR)
 ! ELSE
 	copy $(DAT)\*.            $(GAMEDIR)
 	copy $(DAT)\*.dat         $(GAMEDIR)
 	copy $(DAT)\*.lev         $(GAMEDIR)
 	if exist $(GAMEDIR)\makefile del $(GAMEDIR)\makefile
 ! ENDIF
-	if exist $(DOC)\guidebook.txt copy $(DOC)\guidebook.txt $(GAMEDIR)\Guidebook.txt
+! IF ("$(USE_NHALLOC)"=="Y")
+	copy nhalloc.dll       $(GAMEDIR)
+! ENDIF
+	if exist $(DOC)\jguidebook.txt copy $(DOC)\jguidebook.txt $(GAMEDIR)\JGuidebook.txt
 	if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt $(GAMEDIR)\NetHack.txt
 	@if exist $(SRC)\$(GAME).PDB copy $(SRC)\$(GAME).pdb $(GAMEDIR)\$(GAME).pdb
 	@if exist $(GAMEDIR)\$(GAME).PDB echo NOTE: You may want to remove $(GAMEDIR)\$(GAME).pdb to conserve space
@@ -554,42 +586,81 @@
 	if exist $(U)recover.exe copy $(U)recover.exe  $(GAMEDIR)
 	if exist $(DOC)\recover.txt copy $(DOC)\recover.txt $(GAMEDIR)\recover.txt
 
-$(O)sp_lev.tag: $(O)utility.tag $(DAT)\bigroom.des  $(DAT)\castle.des \
-	$(DAT)\endgame.des $(DAT)\gehennom.des $(DAT)\knox.des   \
-	$(DAT)\medusa.des  $(DAT)\oracle.des   $(DAT)\tower.des  \
-	$(DAT)\yendor.des  $(DAT)\arch.des     $(DAT)\barb.des   \
-	$(DAT)\caveman.des $(DAT)\healer.des   $(DAT)\knight.des \
-	$(DAT)\monk.des    $(DAT)\priest.des   $(DAT)\ranger.des \
-	$(DAT)\rogue.des   $(DAT)\samurai.des  $(DAT)\sokoban.des \
-	$(DAT)\tourist.des $(DAT)\valkyrie.des $(DAT)\wizard.des
+$(O)sp_lev.tag: $(O)utility.tag         $(DAT)\beholder.des $(DAT)\bigroom.des \
+		$(DAT)\blkmar.des   $(DAT)\castle.des   $(DAT)\grund.des \
+		$(DAT)\dragons.des  $(DAT)\endgame.des  $(DAT)\gehennom.des \
+		$(DAT)\giants.des   $(DAT)\guild.des    $(DAT)\knox.des \
+		$(DAT)\kobold-1.des $(DAT)\kobold-2.des $(DAT)\lich.des \
+		$(DAT)\mall-1.des   $(DAT)\mall-2.des   $(DAT)\medusa.des \
+		$(DAT)\sokoban.des  $(DAT)\mines.des    $(DAT)\mtemple.des \
+		$(DAT)\newmall.des  $(DAT)\nymph.des    $(DAT)\oracle.des \
+		$(DAT)\rats.des     $(DAT)\sea.des      $(DAT)\spiders.des \
+		$(DAT)\stor-1.des   $(DAT)\stor-2.des   $(DAT)\stor-3.des \
+		$(DAT)\tomb.des     $(DAT)\tower.des    $(DAT)\yendor.des \
+		$(DAT)\arch.des     $(DAT)\barb.des 	$(DAT)\caveman.des \
+		$(DAT)\flame.des    $(DAT)\healer.des   $(DAT)\ice.des \
+		$(DAT)\knight.des   $(DAT)\monk.des     $(DAT)\necro.des \
+		$(DAT)\priest.des   $(DAT)\rogue.des    $(DAT)\samurai.des \
+		$(DAT)\tourist.des  $(DAT)\slayer.des   $(DAT)\valkyrie.des \
+		$(DAT)\wizard.des   $(DAT)\yeoman.des   $(DAT)\frnknstn.des \
+		$(DAT)\nightmar.des $(DAT)\ranger.des 
 	cd $(DAT)
+	$(U)lev_comp beholder.des
 	$(U)lev_comp bigroom.des
+	$(U)lev_comp blkmar.des
 	$(U)lev_comp castle.des
+	$(U)lev_comp grund.des
+	$(U)lev_comp dragons.des
 	$(U)lev_comp endgame.des
 	$(U)lev_comp gehennom.des
+	$(U)lev_comp giants.des
+	$(U)lev_comp guild.des
 	$(U)lev_comp knox.des
-	$(U)lev_comp mines.des
+	$(U)lev_comp kobold-1.des
+	$(U)lev_comp kobold-2.des
+	$(U)lev_comp lich.des
+	$(U)lev_comp mall-1.des
+	$(U)lev_comp mall-2.des
 	$(U)lev_comp medusa.des
-	$(U)lev_comp oracle.des
 	$(U)lev_comp sokoban.des
+	$(U)lev_comp mines.des
+	$(U)lev_comp mtemple.des
+	$(U)lev_comp newmall.des
+	$(U)lev_comp nymph.des
+	$(U)lev_comp oracle.des
+	$(U)lev_comp rats.des
+	$(U)lev_comp sea.des
+	$(U)lev_comp spiders.des
+	$(U)lev_comp stor-1.des
+	$(U)lev_comp stor-2.des
+	$(U)lev_comp stor-3.des
+	$(U)lev_comp tomb.des
 	$(U)lev_comp tower.des
 	$(U)lev_comp yendor.des
 	$(U)lev_comp arch.des
 	$(U)lev_comp barb.des
 	$(U)lev_comp caveman.des
+	$(U)lev_comp flame.des
 	$(U)lev_comp healer.des
+	$(U)lev_comp ice.des
 	$(U)lev_comp knight.des
 	$(U)lev_comp monk.des
+	$(U)lev_comp necro.des
 	$(U)lev_comp priest.des
-	$(U)lev_comp ranger.des
 	$(U)lev_comp rogue.des
 	$(U)lev_comp samurai.des
 	$(U)lev_comp tourist.des
+	$(U)lev_comp slayer.des
 	$(U)lev_comp valkyrie.des
 	$(U)lev_comp wizard.des
+	$(U)lev_comp yeoman.des
+	$(U)lev_comp frnknstn.des
+	$(U)lev_comp nightmar.des
+	$(U)lev_comp ranger.des
 	cd $(SRC)
 	echo sp_levs done > $(O)sp_lev.tag
 
+
 $(O)utility.tag: $(INCL)\date.h $(INCL)\onames.h $(INCL)\pm.h \
 		$(SRC)\monstr.c		$(SRC)\vis_tab.c  \
 		$(U)lev_comp.exe	$(INCL)\vis_tab.h \
@@ -603,11 +674,11 @@
 !IF "$(GRAPHICAL)"=="Y"
 $(NHRES): $(TILEBMP16) $(WIN32)\winhack.rc $(WIN32)\mnsel.bmp \
 	$(WIN32)\mnselcnt.bmp $(WIN32)\mnunsel.bmp \
-	$(WIN32)\petmark.bmp $(WIN32)\NetHack.ico $(WIN32)\rip.bmp \
+	$(WIN32)\petmark.bmp $(WIN32)\slashem.ico $(WIN32)\rip.bmp \
 	$(WIN32)\splash.bmp
 	@$(rc) -r -fo$@ -i$(WIN32) -i$(bccinc) -dNDEBUG $(WIN32)\winhack.rc
 !ELSE
-$(NHRES): $(NTSYS)\console.rc $(NTSYS)\NetHack.ico
+$(NHRES): $(NTSYS)\console.rc $(NTSYS)\slashem.ico
 	@$(rc) -r -fo$@ -i$(NTSYS) -i$(bccinc) -dNDEBUG $(NTSYS)\console.rc
 !ENDIF
 
@@ -736,6 +807,9 @@
 $(SRC)\vis_tab.c: $(U)makedefs.exe
 	$(U)makedefs -z
 
+$(INCL)\filename.h: $(U)makedefs.exe
+	$(U)makedefs -f
+
 #==========================================
 # uudecode utility and uuencoded targets
 #==========================================
@@ -745,14 +819,14 @@
 
 $(O)uudecode.o: $(SSYS)\uudecode.c
 
-$(NTSYS)\NetHack.ico : $(U)uudecode.exe $(NTSYS)\nhico.uu
+$(NTSYS)\slashem.ico : $(U)uudecode.exe $(NTSYS)\seico.uu
 	chdir $(NTSYS)
-	..\..\util\uudecode.exe nhico.uu
+	..\..\util\uudecode.exe seico.uu
 	chdir ..\..\src
 
-$(WIN32)\NetHack.ico : $(U)uudecode.exe $(NTSYS)\nhico.uu
+$(WIN32)\slashem.ico : $(U)uudecode.exe $(NTSYS)\seico.uu
 	chdir $(WIN32)
-	..\..\util\uudecode.exe ../../sys/winnt/nhico.uu
+	..\..\util\uudecode.exe ../../sys/winnt/seico.uu
 	chdir ..\..\src
 
 $(WIN32)\mnsel.bmp: $(U)uudecode.exe $(WIN32)\mnsel.uu
@@ -823,8 +897,8 @@
 	   @echo lev_comp.h from $(SSYS) into $(UTIL) and use them.
 	   @copy $(SSYS)\lev_yacc.c $(U)lev_yacc.c >nul
 	   @copy $(SSYS)\lev_comp.h $(INCL)\lev_comp.h >nul
-	   @echo /**/ >>$(U)lev_yacc.c
-	   @echo /**/ >>$(INCL)\lev_comp.h
+	   @echo $(TOUTCH_TEXT) >>$(U)lev_yacc.c
+	   @echo $(TOUTCH_TEXT) >>$(INCL)\lev_comp.h
 !	ENDIF
 
 $(U)lev_$(LEX).c: $(U)lev_comp.l
@@ -840,7 +914,7 @@
 	   @echo For now, we will copy the prebuilt lev_lex.c 
 	   @echo from $(SSYS) into $(UTIL) and use it.
 	   @copy $(SSYS)\lev_lex.c $@ >nul
-	   @echo /**/ >>$@
+	   @echo $(TOUTCH_TEXT) >>$@
 !	ENDIF
 
 #==========================================
@@ -879,8 +953,8 @@
 	   @echo dgn_comp.h from $(SSYS) into $(UTIL) and use them.
 	   @copy $(SSYS)\dgn_yacc.c $(U)dgn_yacc.c >nul
 	   @copy $(SSYS)\dgn_comp.h $(INCL)\dgn_comp.h >nul
-	   @echo /**/ >>$(U)dgn_yacc.c
-	   @echo /**/ >>$(INCL)\dgn_comp.h
+	   @echo $(TOUTCH_TEXT) >>$(U)dgn_yacc.c
+	   @echo $(TOUTCH_TEXT) >>$(INCL)\dgn_comp.h
 !	ENDIF
 
 $(U)dgn_$(LEX).c: $(U)dgn_comp.l
@@ -896,7 +970,7 @@
 	   @echo For now, we will copy the prebuilt dgn_lex.c 
 	   @echo from $(SSYS) into $(UTIL) and use it.
 	   @copy $(SSYS)\dgn_lex.c $@ >nul
-	   @echo /**/ >>$@
+	   @echo $(TOUTCH_TEXT) >>$@
 !	ENDIF
 
 
@@ -910,12 +984,44 @@
 
 $(INCL)\win32api.h: $(NTSYS)\win32api.h
 	copy $(NTSYS)\win32api.h $@
+$(INCL)\jdata.h: $(U)makedefs.exe $(DAT)\jtrnsobj.dat $(DAT)\jtrnsmon.dat
+	$(U)makedefs -j
 
 
 #==========================================
-# DLB utility and nhdat file creation
+# DLB utility and nhshare file creation
 #==========================================
 
+$(DAT)\nhshare:	$(U)dlb_main.exe $(DAT)\data $(DAT)\joracles $(DAT)\jrumors \
+		$(DAT)\jhelp $(DAT)\jhh $(DAT)\jcmdhelp $(DAT)\jhistory \
+		$(DAT)\jwizhelp $(DAT)\jgypsy.txt $(DAT)\quest.dat $(O)sp_lev.tag \
+		$(DAT)\porthelp
+	echo data >$(DAT)\dlb.lst
+	echo joracles >>$(DAT)\dlb.lst
+! IF ("$(USE_GUI)"=="Y")
+	echo guioptions >>$(DAT)\dlb.lst
+! ELSE
+	echo ttyoptions >>$(DAT)\dlb.lst
+! ENDIF
+	echo jrumors >>$(DAT)\dlb.lst
+	echo jhelp >>$(DAT)\dlb.lst
+	echo jhh >>$(DAT)\dlb.lst
+	echo jcmdhelp >>$(DAT)\dlb.lst
+	echo jhistory >>$(DAT)\dlb.lst
+	echo jopthelp >>$(DAT)\dlb.lst
+	echo jwizhelp >>$(DAT)\dlb.lst
+	echo jgypsy.txt >>$(DAT)\dlb.lst
+	echo license >>$(DAT)\dlb.lst
+	$(U)dlb_main cvCIf $(DAT) dlb.lst nhshare
+
+$(DAT)\nhushare:	$(U)dlb_main.exe $(DAT)\dungeon $(DAT)\quest.dat $(O)sp_lev.tag
+	echo dungeon > $(DAT)\dlb2.lst
+	echo quest.dat >>$(DAT)\dlb2.lst
+	cd $(DAT)
+	for %N in (*.lev) do echo %N >>$(DAT)\dlb2.lst
+	cd $(SRC)
+	$(U)dlb_main cvCIf $(DAT) $(DAT)\dlb2.lst nhushare
+
 $(U)dlb_main.exe: $(DLBOBJ) $(O)dlb.o $(SRC)\uuid.lib
 	@$(link) $(LFLAGSU) $(startobj) $(O)dlb_main.o $(O)dlb.o $(O)alloc.o $(O)panic.o, $@,,$(libsmt)
 
@@ -929,31 +1035,6 @@
 $(DAT)\porthelp: $(NTSYS)\porthelp
 	@copy $(NTSYS)\porthelp $@ >nul
 
-nhdat:	$(U)dlb_main.exe $(DAT)\data $(DAT)\oracles $(OPTIONS_FILE) \
-	$(DAT)\quest.dat $(DAT)\rumors $(DAT)\help $(DAT)\hh $(DAT)\cmdhelp \
-	$(DAT)\history $(DAT)\opthelp $(DAT)\wizhelp $(DAT)\dungeon $(DAT)\porthelp \
-	$(DAT)\license $(O)sp_lev.tag
-	cd $(DAT)
-	echo data >dlb.lst
-	echo oracles >>dlb.lst
-	if exist options echo options >>dlb.lst
-	if exist ttyoptions echo ttyoptions >>dlb.lst
-	if exist guioptions echo guioptions >>dlb.lst
-	if exist porthelp echo porthelp >>dlb.lst
-	echo quest.dat >>dlb.lst
-	echo rumors >>dlb.lst
-	echo help >>dlb.lst
-	echo hh >>dlb.lst
-	echo cmdhelp >>dlb.lst
-	echo history >>dlb.lst
-	echo opthelp >>dlb.lst
-	echo wizhelp >>dlb.lst
-	echo dungeon >>dlb.lst
-	echo license >>dlb.lst
-	for %N in (*.lev) do echo %N >>dlb.lst
-	$(U)dlb_main cIf dlb.lst $(SRC)\nhdat
-	cd $(SRC)
-
 #==========================================
 #  Recover Utility
 #==========================================
@@ -969,6 +1050,10 @@
 #  Tile Mapping
 #==========================================
 
+..\win\share\tile.h: ../win/share/tile_t.h $(U)tilemap.exe
+	$(U)tilemap.exe
+
+
 $(SRC)\tile.c: $(U)tilemap.exe
 	@echo A new $@ has been created
 	@$(U)tilemap
@@ -1009,7 +1094,12 @@
 !IF "$(GRAPHICAL)"=="Y"
 $(TILEBMP16): $(TILEUTIL16) $(TILEFILES)
 	@echo Creating 16x16 binary tile files (this may take some time)
-	@$(U)tile2bmp $(TILEBMP16)
+	@$(U)tile2bmp $(TILEBMP16) $(TILEFILES)
+
+$(TILEBMP32): $(TILEUTIL16) $(TILEFILES32)
+	@echo Creating 32x32 binary tile files (this may take some time)
+	@$(U)tile2bmp $@ $(TILEFILES32)
+
 !ENDIF
 
 $(U)tile2bmp.exe: $(O)tile2bmp.o $(TEXT_IO) $(SRC)\uuid.lib
@@ -1063,9 +1153,15 @@
 	if exist $(DAT)\guioptions	del $(DAT)\guioptions
 	if exist $(DAT)\oracle.lev	del $(DAT)\oracle.lev
 	if exist $(DAT)\oracles		del $(DAT)\oracles
+	if exist $(DAT)\joracles	del $(DAT)\joracles
 	if exist $(DAT)\orcus.lev	del $(DAT)\orcus.lev
 	if exist $(DAT)\rumors		del $(DAT)\rumors
+	if exist $(DAT)\jrumors		del $(DAT)\jrumors
 	if exist $(DAT)\quest.dat	del $(DAT)\quest.dat
+	if exist $(DAT)\nhshare		del $(DAT)\nhshare
+	if exist $(DAT)\nhushare	del $(DAT)\nhushare
+	if exist $(DAT)\dlb.lst		del $(DAT)\dlb.lst
+	if exist $(DAT)\dlb2.lst	del $(DAT)\dlb2.lst
 	if exist $(DAT)\sanctum.lev	del $(DAT)\sanctum.lev
 	if exist $(DAT)\soko?-?.lev	del $(DAT)\soko?-?.lev
 	if exist $(DAT)\tower?.lev	del $(DAT)\tower?.lev
@@ -1099,13 +1195,13 @@
 $(DAT)\data: $(O)utility.tag    $(DATABASE)
 	$(U)makedefs -d
 
-$(DAT)\rumors: $(O)utility.tag    $(DAT)\rumors.tru   $(DAT)\rumors.fal
+$(DAT)\jrumors: $(O)utility.tag    $(DAT)\jrumors.tru   $(DAT)\jrumors.fal
 	$(U)makedefs -r
 
-$(DAT)\quest.dat: $(O)utility.tag  $(DAT)\quest.txt
+$(DAT)\quest.dat: $(O)utility.tag  $(DAT)\jquest.txt
 	$(U)makedefs -q
 
-$(DAT)\oracles: $(O)utility.tag    $(DAT)\oracles.txt
+$(DAT)\joracles: $(O)utility.tag    $(DAT)\joracles.txt
 	$(U)makedefs -h
 
 $(DAT)\dungeon: $(O)utility.tag  $(DAT)\dungeon.def
@@ -1290,7 +1386,7 @@
 $(O)exper.o: exper.c $(HACK_H)
 $(O)explode.o: explode.c $(HACK_H)
 $(O)extralev.o: extralev.c $(HACK_H)
-$(O)files.o: files.c $(HACK_H) $(INCL)\dlb.h
+$(O)files.o: files.c $(HACK_H) $(INCL)\dlb.h $(INCL)\filename.h
 $(O)fountain.o: fountain.c $(HACK_H)
 $(O)hack.o: hack.c $(HACK_H)
 $(O)hacklib.o: hacklib.c $(HACK_H)
@@ -1373,6 +1469,12 @@
 $(O)worn.o: worn.c $(HACK_H)
 $(O)write.o: write.c $(HACK_H)
 $(O)zap.o: zap.c $(HACK_H)
+$(O)gypsy.o: gypsy.c $(HACK_H) $(INCL)\egyp.h $(INCL)\qtext.h
+$(O)tech.o: tech.c $(HACK_H)
+#JNH
+$(O)jlib.o: $(JP)\jlib.c $(HACK_H)
+$(O)jconj.o: $(JP)\jconj.c $(HACK_H)
+$(O)jtrns.o: $(JP)\jtrns.c $(HACK_H) $(INCL)\jdata.h
 
 # end of file
 
diff -aurN slashem-0.0.7E6F2/sys/winnt/Makefile.gcc jslashem-0.0.7E6F2-J0.0.8/sys/winnt/Makefile.gcc
--- slashem-0.0.7E6F2/sys/winnt/Makefile.gcc	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/Makefile.gcc	2004-06-27 00:56:18.000000000 +0900
@@ -493,6 +493,7 @@
 VOBJ21 = wizard.o   worm.o     worn.o     write.o
 VOBJ22 = zap.o	    light.o    dlb.o      dig.o      teleport.o
 VOBJ23 = region.o   tech.o     gypsy.o    mapglyph.o
+JOBJ = $(O)jconj.o $(O)jlib.o $(O)jtrns.o
 
 SOBJ   = winnt.o    pcsys.o    pcunix.o   nttty.o    random.o \
 	 $(SOUND)   nhlan.o
@@ -506,7 +507,7 @@
 	$(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
 	$(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
 	$(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
-	$(VOBJ21) $(VOBJ22) $(VOBJ23)
+	$(VOBJ21) $(VOBJ22) $(VOBJ23) $(JOBJ)
 
 ALLOBJ = $(VOBJ) $(SOBJ) $(VVOBJ) $(WINOBJ)
 
@@ -627,7 +628,7 @@
 	$(COPY) $(subst /,\,nhalloc.dll			$(GAMEDIR))
 endif
 	$(COPY) $(subst /,\,recover.exe			$(GAMEDIR))
-	$(COPY) $(subst /,\,$(DOC)\guidebook.txt	$(GAMEDIR))
+	$(COPY) $(subst /,\,$(DOC)\jguidebook.txt	$(GAMEDIR))
 	$(COPY) $(subst /,\,$(DOC)\recover.txt		$(GAMEDIR))
 	$(COPY) $(subst /,\,$(DOC)\slashem.txt		$(GAMEDIR))
 	$(ECHO) install done > install.tag
@@ -909,6 +910,9 @@
 vis_tab.c: makedefs.exe
 	-makedefs -z
 
+$(INCL)\jdata.h : makedefs.exe
+	-makedefs -j
+
 $(INCL)\filename.h: makedefs.exe
 	-makedefs -f
 
@@ -1421,7 +1425,19 @@
 	$(COPY) $(SSHR)\nhlan.c .
 	$(CCOMPILE) $(CFLAGS) -o$@ nhlan.c
 
-DATABASE = $(DAT)\data.base
+
+#
+# Japanese translation
+#
+
+$(O)jconj.o: ..\japanese\jconj.c  $(HACK_H)
+	$(cc) $(CFLAGS) -o$@ ..\japanese\jconj.c
+$(O)jlib.o: ..\japanese/jlib.c $(HACK_H)
+	$(cc) $(CFLAGS) -o$@ ..\japanese\jlib.c
+$(O)jtrns.o: ..\japanese/jtrns.c $(HACK_H) ..\include\jdata.h
+	$(cc) $(CFLAGS) -o$@ ..\japanese\jtrns.c
+
+DATABASE = $(DAT)\jdata.base
 
 dat.tag: $(DAT)\nhshare $(DAT)\nhushare $(CNF_SHARE_DATND)
 	@echo dat done >dat.tag
@@ -1429,13 +1445,13 @@
 $(DAT)\data:	 utility.tag	$(DATABASE)
 	-makedefs -d
 
-$(DAT)\rumors:	     utility.tag    $(DAT)\rumors.tru	$(DAT)\rumors.fal
+$(DAT)\jrumors:	     utility.tag    $(DAT)\jrumors.tru	$(DAT)\jrumors.fal
 	-makedefs -r
 
-$(DAT)\quest.dat: utility.tag  $(DAT)\quest.txt
+$(DAT)\quest.dat: utility.tag  $(DAT)\jquest.txt
 	-makedefs -q
 
-$(DAT)\oracles:	     utility.tag    $(DAT)\oracles.txt
+$(DAT)\joracles:	     utility.tag    $(DAT)\joracles.txt
 	-makedefs -h
 
 sp_lev.tag:     utility.tag         $(DAT)\beholder.des $(DAT)\bigroom.des \
@@ -1517,23 +1533,23 @@
 #
 # DLB stuff
 #
-$(DAT)\nhshare:	dlb_main.exe $(DAT)\data $(DAT)\rumors $(DAT)\dungeon \
-		$(DAT)\oracles $(DAT)\quest.dat sp_lev.tag
+$(DAT)\nhshare:	dlb_main.exe $(DAT)\data $(DAT)\jrumors $(DAT)\dungeon \
+		$(DAT)\joracles $(DAT)\quest.dat sp_lev.tag
 	$(ECHO) data >$(DAT)\dlb.lst
-	$(ECHO) oracles >>$(DAT)\dlb.lst
+	$(ECHO) joracles >>$(DAT)\dlb.lst
 ifeq ($(USE_GUI),Y)
 	$(ECHO) guioptions >>$(DAT)\dlb.lst
 else
 	$(ECHO) ttyoptions >>$(DAT)\dlb.lst
 endif
-	$(ECHO) rumors >>$(DAT)\dlb.lst
-	$(ECHO) help >>$(DAT)\dlb.lst
-	$(ECHO) hh >>$(DAT)\dlb.lst
-	$(ECHO) cmdhelp >>$(DAT)\dlb.lst
-	$(ECHO) history >>$(DAT)\dlb.lst
-	$(ECHO) opthelp >>$(DAT)\dlb.lst
-	$(ECHO) wizhelp >>$(DAT)\dlb.lst
-	$(ECHO) gypsy.txt >>$(DAT)\dlb.lst
+	$(ECHO) jrumors >>$(DAT)\dlb.lst
+	$(ECHO) jhelp >>$(DAT)\dlb.lst
+	$(ECHO) jhh >>$(DAT)\dlb.lst
+	$(ECHO) jcmdhelp >>$(DAT)\dlb.lst
+	$(ECHO) jhistory >>$(DAT)\dlb.lst
+	$(ECHO) jopthelp >>$(DAT)\dlb.lst
+	$(ECHO) jwizhelp >>$(DAT)\dlb.lst
+	$(ECHO) jgypsy.txt >>$(DAT)\dlb.lst
 	$(ECHO) license >>$(DAT)\dlb.lst
 	dlb_main cvCIf $(DAT) dlb.lst nhshare
 
diff -aurN slashem-0.0.7E6F2/sys/winnt/Makefile.msc jslashem-0.0.7E6F2-J0.0.8/sys/winnt/Makefile.msc
--- slashem-0.0.7E6F2/sys/winnt/Makefile.msc	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/Makefile.msc	2004-07-04 17:53:22.000000000 +0900
@@ -33,15 +33,15 @@
 # Graphical interface
 # Set to Y for a graphical version
 
-#GRAPHICAL = Y
+GRAPHICAL = N
 
 #  Set the gamedir according to your preference.  
 #  If not present prior to compilation it gets created.
 
 !IF "$(GRAPHICAL)" == "Y"
-GAME    = NetHackW                # Game Name
+GAME    = JSlashemW                # Game Name
 !ELSE
-GAME    = NetHack                 # Game Name
+GAME    = JSlashem                # Game Name
 !ENDIF
 
 GAMEDIR = ..\binary               # Game directory
@@ -60,6 +60,7 @@
 TTY   = ..\win\tty   # window port files (tty)
 WIN32 = ..\win\win32 # window port files (Win32)
 WSHR  = ..\win\share # Tile support files 
+JP    = ..\japanese  # JP
 
 #
 #  Object directory.
@@ -145,12 +146,12 @@
 	$(WIN32)\mhinput.h $(WIN32)\mhmain.h $(WIN32)\mhmap.h $(WIN32)\mhmenu.h \
 	$(WIN32)\mhmsg.h $(WIN32)\mhmsgwnd.h $(WIN32)\mhrip.h $(WIN32)\mhstatus.h \
 	$(WIN32)\mhtext.h $(WIN32)\resource.h $(WIN32)\winMS.h
-WINDLLS =
-WINPFLAG= -DTILES -DMSWIN_GRAPHICS
+WINDLLS = $(GAMEDIR)\nhdefkey.dll $(GAMEDIR)\nh340key.dll $(GAMEDIR)\nhraykey.dll
+WINPFLAG= -DTILES -DMSWIN_GRAPHICS -DWIN32CON
 NHRES	= $(O)winhack.res
 WINPINC	= -I$(WIN32)
 !ELSE
-WINPORT	= $(O)nttty.o    
+WINPORT	=
 WINPHDR	=
 WINDLLS	= $(GAMEDIR)\nhdefkey.dll $(GAMEDIR)\nh340key.dll $(GAMEDIR)\nhraykey.dll
 WINPFLAG= -DWIN32CON
@@ -180,6 +181,15 @@
 DLBFLG =
 ! ENDIF
 
+#
+# Uncomment the line below if you want to compile with the internal malloc
+# routines (used to test for memory leaks).
+# You will also need to define MONITOR_HEAP and INTERNAL_MALLOC in config.h
+#
+# Warning: Doing this increases the risk of a non-recoverable game crash.
+
+# USE_NHALLOC = Y
+
 #==========================================
 # Setting up the compiler and linker
 # macros. All builds include the base ones.
@@ -212,7 +222,8 @@
 GAMEFILE = $(GAMEDIR)\$(GAME).exe # whole thing
 
 ! IF ("$(USE_DLB)"=="Y")
-DLB = nhdat
+DLB = $(DAT)\nhshare $(DAT)\nhushare
+DLBOBJS = $(O)dlb_main.o $(O)dlb.o $(O)alloc.o $(O)panic.o $(NHALLOCOBJ)
 ! ELSE
 DLB =
 ! ENDIF
@@ -277,6 +288,12 @@
 {$(TTY)}.c{$(OBJ)}.o:
 	@$(CC) $(CFLAGS)  -Fo$@  $<
 
+#==========================================
+# Rules for files in japanese
+#==========================================
+
+{$(JP)}.c{$(OBJ)}.o:
+	@$(CC) $(CFLAGS)  -Fo$@ $<
 
 #==========================================
 # Rules for files in win\win32
@@ -306,6 +323,16 @@
 # Utility Objects.
 #
 
+! IF ("$(USE_NHALLOC)"=="Y")
+NHALLOCOBJ = nhalloc.o
+NHALLOCDLL = nhalloc.dll
+NHALLOCA = nhalloc.a
+! ELSE
+NHALLOCOBJ =
+NHALLOCDLL =
+NHALLOCA =
+! ENDIF
+
 MAKESRC        = $(U)makedefs.c
 
 SPLEVSRC       = $(U)lev_yacc.c	$(U)lev_$(LEX).c $(U)lev_main.c  $(U)panic.c
@@ -324,6 +351,7 @@
 RECOVOBJS      = $(O)recover.o
 
 TILEFILES      = $(WSHR)\monsters.txt $(WSHR)\objects.txt $(WSHR)\other.txt
+TILEFILES32    = $(WSHR)\mon32.txt $(WSHR)\obj32.txt $(WSHR)\oth32.txt
 
 #
 # These are not invoked during a normal game build in 3.4
@@ -352,7 +380,7 @@
 VOBJ07 = $(O)end.o      $(O)engrave.o  $(O)exper.o    $(O)explode.o 
 VOBJ08 = $(O)extralev.o $(O)files.o    $(O)fountain.o $(O)hack.o    
 VOBJ09 = $(O)hacklib.o  $(O)invent.o   $(O)light.o    $(O)lock.o    
-VOBJ10 = $(O)mail.o     $(O)pcmain.o   $(O)makemon.o  $(O)mapglyph.o $(O)mcastu.o  
+VOBJ10 = $(O)mail.o     $(O)makemon.o  $(O)mapglyph.o $(O)mcastu.o  
 VOBJ11 = $(O)mhitm.o    $(O)mhitu.o    $(O)minion.o   $(O)mklev.o   
 VOBJ12 = $(O)mkmap.o    $(O)mkmaze.o   $(O)mkobj.o    $(O)mkroom.o  
 VOBJ13 = $(O)mon.o      $(O)mondata.o  $(O)monmove.o  $(O)monst.o   
@@ -369,27 +397,30 @@
 VOBJ24 = $(O)trap.o     $(O)u_init.o   $(O)uhitm.o    $(O)vault.o   
 VOBJ25 = $(O)vis_tab.o  $(O)vision.o   $(O)weapon.o   $(O)were.o    
 VOBJ26 = $(O)wield.o    $(O)windows.o  $(O)wizard.o   $(O)worm.o    
-VOBJ27 = $(O)worn.o     $(O)write.o    $(O)zap.o     
+VOBJ27 = $(O)worn.o     $(O)write.o    $(O)zap.o      $(O)tech.o    
+VOBJ28 = $(O)gypsy.o
+
+JOBJ   = $(O)jlib.o     $(O)jtrns.o    $(O)jconj.o
 
 DLBOBJ = $(O)dlb.o
 
-TTYOBJ = $(O)topl.o     $(O)getline.o  $(O)wintty.o
+TTYOBJ = $(O)topl.o     $(O)getline.o    $(O)wintty.o   $(O)termcap.o
 
-SOBJ   = $(O)winnt.o    $(O)pcsys.o      $(O)pcunix.o  \
-	   $(SOUND) 	$(O)mapimail.o $(O)nhlan.o
+SOBJ   = $(O)winnt.o    $(O)pcsys.o      $(O)pcunix.o   $(O)nttty.o \
+	   $(SOUND)     $(O)pcmain.o     $(O)mapimail.o $(O)nhlan.o
 
 OBJS   = $(VOBJ01) $(VOBJ02) $(VOBJ03) $(VOBJ04) $(VOBJ05) \
          $(VOBJ06) $(VOBJ07) $(VOBJ08) $(VOBJ09) $(VOBJ10) \
          $(VOBJ11) $(VOBJ12) $(VOBJ13) $(VOBJ14) $(VOBJ15) \
          $(VOBJ16) $(VOBJ17) $(VOBJ18) $(VOBJ19) $(VOBJ20) \
          $(VOBJ21) $(VOBJ22) $(VOBJ23) $(VOBJ24) $(VOBJ25) \
-         $(VOBJ26) $(VOBJ27)
+         $(VOBJ26) $(VOBJ27) $(VOBJ28)
 
 WINPOBJ = $(WINPORT)
 
 VVOBJ  = $(O)version.o
 
-ALLOBJ  = $(WINPOBJ) $(SOBJ) $(DLBOBJ)  $(TTYOBJ) $(WOBJ) $(OBJS) $(VVOBJ)
+ALLOBJ  = $(WINPOBJ) $(SOBJ) $(DLBOBJ)  $(TTYOBJ) $(WOBJ) $(OBJS) $(VVOBJ) $(JOBJ)
 
 !IF "$(GRAPHICAL)" == "Y"
 OPTIONS_FILE = $(DAT)\guioptions
@@ -431,7 +462,7 @@
 # Miscellaneous
 #==========================================
 
-DATABASE = $(DAT)\data.base
+DATABASE = $(DAT)\jdata.base
 
 #
 #  The name of the game.
@@ -464,19 +495,20 @@
 install: envchk $(GAME) $(O)install.tag
 	 @echo Done.
 
-$(O)install.tag: 	$(DAT)\data	$(DAT)\rumors	 $(DAT)\dungeon \
-	 	$(DAT)\oracles	$(DAT)\quest.dat $(O)sp_lev.tag $(DLB)
+$(O)install.tag: 	$(DAT)\data	$(DAT)\jrumors	 $(DAT)\dungeon \
+	 	$(DAT)\joracles	$(DAT)\quest.dat $(O)sp_lev.tag $(DLB)
 ! IF ("$(USE_DLB)"=="Y")
-	copy nhdat                $(GAMEDIR)
+	copy $(DAT)\nhshare       $(GAMEDIR)
+	copy $(DAT)\nhushare      $(GAMEDIR)
 	copy $(DAT)\license       $(GAMEDIR)
-	copy $(DAT)\opthelp       $(GAMEDIR)
+	copy $(DAT)\jopthelp      $(GAMEDIR)
 ! ELSE
 	copy $(DAT)\*.            $(GAMEDIR)
 	copy $(DAT)\*.dat         $(GAMEDIR)
 	copy $(DAT)\*.lev         $(GAMEDIR)
 	if exist $(GAMEDIR)\makefile del $(GAMEDIR)\makefile
 ! ENDIF
-	if exist $(DOC)\guidebook.txt copy $(DOC)\guidebook.txt $(GAMEDIR)\Guidebook.txt
+	if exist $(DOC)\jguidebook.txt copy $(DOC)\jguidebook.txt $(GAMEDIR)\jGuidebook.txt
 	if exist $(DOC)\nethack.txt copy $(DOC)\nethack.txt $(GAMEDIR)\NetHack.txt
 	@if exist $(SRC)\$(GAME).PDB copy $(SRC)\$(GAME).pdb $(GAMEDIR)\$(GAME).pdb
 	@if exist $(GAMEDIR)\$(GAME).PDB echo NOTE: You may want to remove $(GAMEDIR)\$(GAME).pdb to conserve space
@@ -490,45 +522,83 @@
 	if exist $(DOC)\recover.txt copy $(DOC)\recover.txt $(GAMEDIR)\recover.txt
 
 $(O)sp_lev.tag: $(O)utility.tag $(DAT)\bigroom.des  $(DAT)\castle.des \
-	$(DAT)\endgame.des $(DAT)\gehennom.des $(DAT)\knox.des   \
-	$(DAT)\medusa.des  $(DAT)\oracle.des   $(DAT)\tower.des  \
-	$(DAT)\yendor.des  $(DAT)\arch.des     $(DAT)\barb.des   \
-	$(DAT)\caveman.des $(DAT)\healer.des   $(DAT)\knight.des \
-	$(DAT)\monk.des    $(DAT)\priest.des   $(DAT)\ranger.des \
-	$(DAT)\rogue.des   $(DAT)\samurai.des  $(DAT)\sokoban.des \
-	$(DAT)\tourist.des $(DAT)\valkyrie.des $(DAT)\wizard.des
+	$(DAT)\blkmar.des   $(DAT)\castle.des   $(DAT)\grund.des \
+	$(DAT)\dragons.des  $(DAT)\endgame.des  $(DAT)\gehennom.des \
+	$(DAT)\giants.des   $(DAT)\guild.des    $(DAT)\knox.des \
+	$(DAT)\kobold-1.des $(DAT)\kobold-2.des $(DAT)\lich.des \
+	$(DAT)\mall-1.des   $(DAT)\mall-2.des   $(DAT)\medusa.des \
+	$(DAT)\sokoban.des  $(DAT)\mines.des    $(DAT)\mtemple.des \
+	$(DAT)\newmall.des  $(DAT)\nymph.des    $(DAT)\oracle.des \
+	$(DAT)\rats.des     $(DAT)\sea.des      $(DAT)\spiders.des \
+	$(DAT)\stor-1.des   $(DAT)\stor-2.des   $(DAT)\stor-3.des \
+	$(DAT)\tomb.des     $(DAT)\tower.des    $(DAT)\yendor.des \
+	$(DAT)\arch.des     $(DAT)\barb.des 	$(DAT)\caveman.des \
+	$(DAT)\flame.des    $(DAT)\healer.des   $(DAT)\ice.des \
+	$(DAT)\knight.des   $(DAT)\monk.des     $(DAT)\necro.des \
+	$(DAT)\priest.des   $(DAT)\rogue.des    $(DAT)\samurai.des \
+	$(DAT)\tourist.des  $(DAT)\slayer.des   $(DAT)\valkyrie.des \
+	$(DAT)\wizard.des   $(DAT)\yeoman.des   $(DAT)\frnknstn.des \
+	$(DAT)\nightmar.des $(DAT)\ranger.des 
 	cd $(DAT)
+	$(U)lev_comp beholder.des
 	$(U)lev_comp bigroom.des
+	$(U)lev_comp blkmar.des
 	$(U)lev_comp castle.des
+	$(U)lev_comp grund.des
+	$(U)lev_comp dragons.des
 	$(U)lev_comp endgame.des
 	$(U)lev_comp gehennom.des
+	$(U)lev_comp giants.des
+	$(U)lev_comp guild.des
 	$(U)lev_comp knox.des
-	$(U)lev_comp mines.des
+	$(U)lev_comp kobold-1.des
+	$(U)lev_comp kobold-2.des
+	$(U)lev_comp lich.des
+	$(U)lev_comp mall-1.des
+	$(U)lev_comp mall-2.des
 	$(U)lev_comp medusa.des
-	$(U)lev_comp oracle.des
 	$(U)lev_comp sokoban.des
+	$(U)lev_comp mines.des
+	$(U)lev_comp mtemple.des
+	$(U)lev_comp newmall.des
+	$(U)lev_comp nymph.des
+	$(U)lev_comp oracle.des
+	$(U)lev_comp rats.des
+	$(U)lev_comp sea.des
+	$(U)lev_comp spiders.des
+	$(U)lev_comp stor-1.des
+	$(U)lev_comp stor-2.des
+	$(U)lev_comp stor-3.des
+	$(U)lev_comp tomb.des
 	$(U)lev_comp tower.des
 	$(U)lev_comp yendor.des
 	$(U)lev_comp arch.des
 	$(U)lev_comp barb.des
 	$(U)lev_comp caveman.des
+	$(U)lev_comp flame.des
 	$(U)lev_comp healer.des
+	$(U)lev_comp ice.des
 	$(U)lev_comp knight.des
 	$(U)lev_comp monk.des
+	$(U)lev_comp necro.des
 	$(U)lev_comp priest.des
-	$(U)lev_comp ranger.des
 	$(U)lev_comp rogue.des
 	$(U)lev_comp samurai.des
 	$(U)lev_comp tourist.des
+	$(U)lev_comp slayer.des
 	$(U)lev_comp valkyrie.des
 	$(U)lev_comp wizard.des
+	$(U)lev_comp yeoman.des
+	$(U)lev_comp frnknstn.des
+	$(U)lev_comp nightmar.des
+	$(U)lev_comp ranger.des
 	cd $(SRC)
 	echo sp_levs done > $(O)sp_lev.tag
 
 $(O)utility.tag: $(INCL)\date.h $(INCL)\onames.h $(INCL)\pm.h \
 		$(SRC)\monstr.c		$(SRC)\vis_tab.c  \
 		$(U)lev_comp.exe	$(INCL)\vis_tab.h \
-		$(U)dgn_comp.exe
+		$(U)dgn_comp.exe $(TILEUTIL16)
              @echo utilities made >$@
 	     @echo utilities made.
 
@@ -538,11 +608,11 @@
 !IF "$(GRAPHICAL)"=="Y"
 $(NHRES): $(TILEBMP16) $(WIN32)\winhack.rc $(WIN32)\mnsel.bmp \
 	$(WIN32)\mnselcnt.bmp $(WIN32)\mnunsel.bmp \
-	$(WIN32)\petmark.bmp $(WIN32)\NetHack.ico $(WIN32)\rip.bmp \
+	$(WIN32)\petmark.bmp $(WIN32)\slashem.ico $(WIN32)\rip.bmp \
 	$(WIN32)\splash.bmp
 	@$(rc) -r -fo$@ -i$(WIN32) -dNDEBUG $(WIN32)\winhack.rc
 !ELSE
-$(NHRES): $(NTSYS)\console.rc $(NTSYS)\NetHack.ico
+$(NHRES): $(NTSYS)\console.rc $(NTSYS)\slashem.ico
 	@$(rc) -r -fo$@ -i$(NTSYS) -dNDEBUG $(NTSYS)\console.rc
 !ENDIF
 
@@ -653,6 +723,9 @@
 	@if not exist $(OBJ)\*.* mkdir $(OBJ)
 	@$(CC) $(CFLAGSU) -Fo$@ $(U)makedefs.c
 
+$(INCL)\jdata.h: $(U)makedefs.exe $(DAT)\jtrnsobj.dat $(DAT)\jtrnsmon.dat
+	$(U)makedefs -j
+
 #
 #  date.h should be remade every time any of the source or include
 #  files is modified.
@@ -679,6 +752,9 @@
 $(SRC)\vis_tab.c: $(U)makedefs.exe
 	$(U)makedefs -z
 
+$(INCL)\filename.h: $(U)makedefs.exe
+	$(U)makedefs -f
+
 #==========================================
 # uudecode utility and uuencoded targets
 #==========================================
@@ -688,14 +764,14 @@
 
 $(O)uudecode.o: $(SSYS)\uudecode.c
 
-$(NTSYS)\NetHack.ico : $(U)uudecode.exe $(NTSYS)\nhico.uu 
+$(NTSYS)\slashem.ico : $(U)uudecode.exe $(NTSYS)\seico.uu
 	chdir $(NTSYS)
-	..\..\util\uudecode.exe nhico.uu
+	..\..\util\uudecode.exe seico.uu
 	chdir ..\..\src
 
-$(WIN32)\NetHack.ico : $(U)uudecode.exe $(NTSYS)\nhico.uu 
+$(WIN32)\slashem.ico : $(U)uudecode.exe $(NTSYS)\seico.uu
 	chdir $(WIN32)
-	..\..\util\uudecode.exe ../../sys/winnt/nhico.uu
+	..\..\util\uudecode.exe ../../sys/winnt/seico.uu
 	chdir ..\..\src
 
 $(WIN32)\mnsel.bmp: $(U)uudecode.exe $(WIN32)\mnsel.uu
@@ -907,29 +983,35 @@
 $(DAT)\porthelp: $(NTSYS)\porthelp
 	@copy $(NTSYS)\porthelp $@ >nul
 
-nhdat:	$(U)dlb_main.exe $(DAT)\data $(DAT)\oracles $(OPTIONS_FILE) \
-	$(DAT)\quest.dat $(DAT)\rumors $(DAT)\help $(DAT)\hh $(DAT)\cmdhelp \
-	$(DAT)\history $(DAT)\opthelp $(DAT)\wizhelp $(DAT)\dungeon $(DAT)\porthelp \
-	$(DAT)\license $(O)sp_lev.tag
+$(DAT)\nhshare:	$(U)dlb_main.exe $(DAT)\data $(DAT)\joracles $(OPTIONS_FILE) \
+	$(DAT)\jrumors $(DAT)\jhelp $(DAT)\jhh $(DAT)\jcmdhelp \
+	$(DAT)\jhistory $(DAT)\jopthelp $(DAT)\jwizhelp $(DAT)\porthelp \
+	$(DAT)\license $(DAT)\jgypsy.txt $(O)sp_lev.tag
 	cd $(DAT)
 	echo data >dlb.lst
-	echo oracles >>dlb.lst
+	echo joracles >>dlb.lst
 	if exist options echo options >>dlb.lst
 	if exist ttyoptions echo ttyoptions >>dlb.lst
 	if exist guioptions echo guioptions >>dlb.lst
 	if exist porthelp echo porthelp >>dlb.lst
-	echo quest.dat >>dlb.lst
-	echo rumors >>dlb.lst
-	echo help >>dlb.lst
-	echo hh >>dlb.lst
-	echo cmdhelp >>dlb.lst
-	echo history >>dlb.lst
-	echo opthelp >>dlb.lst
-	echo wizhelp >>dlb.lst
-	echo dungeon >>dlb.lst
+	echo jrumors >>dlb.lst
+	echo jhelp >>dlb.lst
+	echo jhh >>dlb.lst
+	echo jcmdhelp >>dlb.lst
+	echo jhistory >>dlb.lst
+	echo jopthelp >>dlb.lst
+	echo jwizhelp >>dlb.lst
+	echo jgypsy.txt >>dlb.lst
 	echo license >>dlb.lst
-	for %%N in (*.lev) do echo %%N >>dlb.lst
-	$(U)dlb_main cIf dlb.lst $(SRC)\nhdat
+	$(U)dlb_main cIf dlb.lst nhshare
+	cd $(SRC)
+
+$(DAT)\nhushare:	$(U)dlb_main.exe $(DAT)\dungeon $(DAT)\quest.dat $(O)sp_lev.tag
+	echo dungeon > $(DAT)\dlb2.lst
+	echo quest.dat >>$(DAT)\dlb2.lst
+	cd $(DAT)
+	for %%N in (*.lev) do echo %%N >>dlb2.lst
+	$(U)dlb_main cvCIf $(DAT) dlb2.lst nhushare
 	cd $(SRC)
 
 #==========================================
@@ -946,6 +1028,9 @@
 #  Tile Mapping
 #==========================================
 
+..\win\share\tile.h: ../win/share/tile_t.h $(U)tilemap.exe
+	$(U)tilemap.exe
+
 $(SRC)\tile.c: $(U)tilemap.exe
 	@echo A new $@ has been created
 	@$(U)tilemap
@@ -1011,10 +1096,10 @@
 !IF "$(GRAPHICAL)"=="Y"
 $(TILEBMP16): $(TILEUTIL16) $(TILEFILES)
 	@echo Creating 16x16 binary tile files (this may take some time)
-	@$(U)tile2bmp $(TILEBMP16)
-#$(TILEBMP32): $(TILEUTIL32) $(TILEFILES32)
-#	@echo Creating 32x32 binary tile files (this may take some time)
-#	@$(U)til2bm32 $(TILEBMP32)
+	@$(U)tile2bmp $(TILEBMP16) $(TILEFILES)
+$(TILEBMP32): $(TILEUTIL32) $(TILEFILES32)
+	@echo Creating 32x32 binary tile files (this may take some time)
+	@$(U)til2bm32 $(TILEBMP32) $(TILEFILES32)
 
 !ELSE
 $(TILEBMP16):
@@ -1086,9 +1171,13 @@
 	if exist $(DAT)\guioptions	del $(DAT)\guioptions
 	if exist $(DAT)\oracle.lev	del $(DAT)\oracle.lev
 	if exist $(DAT)\oracles		del $(DAT)\oracles
+	if exist $(DAT)\joracles	del $(DAT)\joracles
 	if exist $(DAT)\orcus.lev	del $(DAT)\orcus.lev
 	if exist $(DAT)\rumors		del $(DAT)\rumors
+	if exist $(DAT)\jrumors		del $(DAT)\jrumors
 	if exist $(DAT)\quest.dat	del $(DAT)\quest.dat
+	if exist $(DAT)\nhshare		del $(DAT)\nhshare
+	if exist $(DAT)\nhushare	del $(DAT)\nhushare
 	if exist $(DAT)\sanctum.lev	del $(DAT)\sanctum.lev
 	if exist $(DAT)\soko?-?.lev	del $(DAT)\soko?-?.lev
 	if exist $(DAT)\tower?.lev	del $(DAT)\tower?.lev
@@ -1099,6 +1188,7 @@
 	if exist $(SRC)\monstr.c        del $(SRC)\monstr.c
 	if exist $(SRC)\vis_tab.c       del $(SRC)\vis_tab.c
 	if exist $(U)recover.exe        del $(U)recover.exe
+	if exist $(INCL)\jdata.h        del $(INCL)\jdata.h
 	if exist nhdat.			del nhdat.
 	if exist $(O)obj.tag            del $(O)obj.tag
 	if exist $(O)gamedir.tag        del $(O)gamedir.tag
@@ -1130,13 +1220,13 @@
 $(DAT)\data: $(O)utility.tag    $(DATABASE)
 	$(U)makedefs -d
 
-$(DAT)\rumors: $(O)utility.tag    $(DAT)\rumors.tru   $(DAT)\rumors.fal
+$(DAT)\jrumors: $(O)utility.tag    $(DAT)\jrumors.tru   $(DAT)\jrumors.fal
 	$(U)makedefs -r
 
-$(DAT)\quest.dat: $(O)utility.tag  $(DAT)\quest.txt
+$(DAT)\quest.dat: $(O)utility.tag  $(DAT)\jquest.txt
 	$(U)makedefs -q
 
-$(DAT)\oracles: $(O)utility.tag    $(DAT)\oracles.txt
+$(DAT)\joracles: $(O)utility.tag    $(DAT)\joracles.txt
 	$(U)makedefs -h
 
 $(DAT)\dungeon: $(O)utility.tag  $(DAT)\dungeon.def
@@ -1299,8 +1389,8 @@
 	$(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qt_clust.cpp
 $(O)qttableview.o: ..\win\Qt\qttableview.cpp $(INCL)\qttableview.h
 	$(CXX) $(CXXFLAGS) -Fo$@ ..\win\Qt\qttableview.cpp
-$(O)monstr.o: monstr.c $(CONFIG_H)
-$(O)vis_tab.o: vis_tab.c $(CONFIG_H) $(INCL)\vis_tab.h
+$(O)monstr.o: $(SRC)\monstr.c $(CONFIG_H)
+$(O)vis_tab.o: $(SRC)\vis_tab.c $(CONFIG_H) $(INCL)\vis_tab.h
 $(O)allmain.o: allmain.c $(HACK_H)
 $(O)alloc.o: alloc.c $(CONFIG_H)
 $(O)apply.o: apply.c $(HACK_H) $(INCL)\edog.h
@@ -1331,7 +1421,7 @@
 $(O)exper.o: exper.c $(HACK_H)
 $(O)explode.o: explode.c $(HACK_H)
 $(O)extralev.o: extralev.c $(HACK_H)
-$(O)files.o: files.c $(HACK_H) $(INCL)\dlb.h
+$(O)files.o: files.c $(HACK_H) $(INCL)\dlb.h $(INCL)\filename.h
 $(O)fountain.o: fountain.c $(HACK_H)
 $(O)hack.o: hack.c $(HACK_H)
 $(O)hacklib.o: hacklib.c $(HACK_H)
@@ -1415,5 +1505,15 @@
 $(O)worn.o: worn.c $(HACK_H)
 $(O)write.o: write.c $(HACK_H)
 $(O)zap.o: zap.c $(HACK_H)
+$(O)gypsy.o: gypsy.c $(HACK_H) $(INCL)\egyp.h $(INCL)\qtext.h
+$(O)tech.o: tech.c $(HACK_H)
+
+#
+# from japanese
+#
+
+$(O)jlib.o:    $(PCH) $(JP)\jlib.c $(HACK_H)
+$(O)jconj.o:   $(PCH) $(JP)\jconj.c $(HACK_H)
+$(O)jtrns.o:   $(PCH) $(JP)\jtrns.c $(HACK_H) $(INCL)\jdata.h
 
 # end of file
diff -aurN slashem-0.0.7E6F2/sys/winnt/console.rc jslashem-0.0.7E6F2-J0.0.8/sys/winnt/console.rc
--- slashem-0.0.7E6F2/sys/winnt/console.rc	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/console.rc	2004-07-02 11:41:50.000000000 +0900
@@ -4,7 +4,7 @@
 
 #include "windows.h"
 
-1 ICON DISCARDABLE "NetHack.ICO"
+1 ICON DISCARDABLE "SlashEM.ICO"
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -28,14 +28,14 @@
     BEGIN
         BLOCK "040904b0"
         BEGIN
-            VALUE "FileDescription", "NetHack for Windows - TTY Interface\0"
-            VALUE "FileVersion", "3.4.3\0"
-            VALUE "InternalName", "NetHack\0"
+            VALUE "FileDescription", "JSlash'EM for Windows - TTY Interface\0"
+            VALUE "FileVersion", "0.0.7E6F2-J0.03\0"
+            VALUE "InternalName", "JSlash'EM\0"
             VALUE "LegalCopyright", "Copyright (C) 1985 - 2003.  By Stichting Mathematisch Centrum and M. Stephenson.  See license for details.\0"
-            VALUE "OriginalFilename", "NetHack.exe\0"
+            VALUE "OriginalFilename", "JSlashEM.exe\0"
             VALUE "PrivateBuild", "031014\0"
-            VALUE "ProductName", "NetHack\0"
-            VALUE "ProductVersion", "3.4.3\0"
+            VALUE "ProductName", "JSlashEM\0"
+            VALUE "ProductVersion", "0.0.7E6F2-J0.03\0"
         END
     END
     BLOCK "VarFileInfo"
diff -aurN slashem-0.0.7E6F2/sys/winnt/defaults.nh jslashem-0.0.7E6F2-J0.0.8/sys/winnt/defaults.nh
--- slashem-0.0.7E6F2/sys/winnt/defaults.nh	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/defaults.nh	2004-06-10 08:55:20.000000000 +0900
@@ -77,16 +77,19 @@
 #OPTIONS=tile_file:tiles32.bmp,tile_width:32,tile_height:32
 
 # Message window settings
-OPTIONS=font_message:Arial,font_size_message:9,align_message:top
+#OPTIONS=font_message:Arial,font_size_message:9,align_message:top
 
 # Menu settings
-OPTIONS=font_menu:Arial,font_size_menu:9
+#OPTIONS=font_menu:Arial,font_size_menu:9
 
 # Text settings
-OPTIONS=font_text:Courier New,font_size_text:9
+#OPTIONS=font_text:Courier New,font_size_text:9
 
 # Status window settings
-OPTIONS=font_status:Courier New,font_size_status:9
+#OPTIONS=font_status:Courier New,font_size_status:9
+
+# JP: Screen Kanji Code
+OPTIONS=kcode:sjis
 
 # Other
 OPTIONS=hilite_pet,!toptenwin
diff -aurN slashem-0.0.7E6F2/sys/winnt/nhdefkey.c jslashem-0.0.7E6F2-J0.0.8/sys/winnt/nhdefkey.c
--- slashem-0.0.7E6F2/sys/winnt/nhdefkey.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/nhdefkey.c	2004-06-10 08:55:20.000000000 +0900
@@ -163,6 +163,7 @@
 		if (vk == 0xBF) ch = M('?');
 		else ch = M(tolower(keycode));
         }
+#if 0 /*JP*/
 	/* Attempt to work better with international keyboards. */
 	else {
 		WORD chr[2];
@@ -182,6 +183,11 @@
 				*valid = FALSE;
 		    }
 	}
+#else
+	if(ch != 0){
+		*valid = TRUE;
+	}
+#endif
 	if (ch == '\r') ch = '\n';
 #ifdef PORT_DEBUG
 	if (portdebug) {
diff -aurN slashem-0.0.7E6F2/sys/winnt/nhsetup.bat jslashem-0.0.7E6F2-J0.0.8/sys/winnt/nhsetup.bat
--- slashem-0.0.7E6F2/sys/winnt/nhsetup.bat	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/nhsetup.bat	2004-06-10 13:48:26.000000000 +0900
@@ -92,7 +92,7 @@
 goto :fini
 
 :err_data
-echo A required file ..\..\dat\data.bas seems to be missing.
+echo A required file ..\..\dat\jdata.bas seems to be missing.
 echo Check "Files." in the root directory for your NetHack distribution
 echo and make sure that all required files exist.
 goto :fini
diff -aurN slashem-0.0.7E6F2/sys/winnt/nttty.c jslashem-0.0.7E6F2-J0.0.8/sys/winnt/nttty.c
--- slashem-0.0.7E6F2/sys/winnt/nttty.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/sys/winnt/nttty.c	2004-08-03 21:56:14.000000000 +0900
@@ -547,6 +547,32 @@
 	xputc_core(ch);
 }
 
+#if 1 /*JP*/
+void
+xputc2(ch1, ch2)
+int ch1;
+int ch2;
+{
+    unsigned char buf[2];
+    WORD attrs[2];
+    /* wintty.c では 1 バイト毎に curx を加算するが、ここは
+       2 バイトたまってから呼び出されるので、1 文字分先に進んで
+      しまっている。従って 1 を引く。 */
+    cursor.X = ttyDisplay->curx - 1;
+    cursor.Y = ttyDisplay->cury;
+
+    buf[0] = ch1;
+    buf[1] = ch2;
+
+    attrs[0] = attrs[1] = attr;
+
+    WriteConsoleOutputAttribute(hConOut,(const unsigned short *)&attrs,2,
+				cursor,&acount);
+    WriteConsoleOutputCharacter(hConOut,buf,2,
+				cursor,&ccount);
+}
+#endif
+
 void
 xputs(s)
 const char *s;
diff -aurN slashem-0.0.7E6F2/util/makedefs.c jslashem-0.0.7E6F2-J0.0.8/util/makedefs.c
--- slashem-0.0.7E6F2/util/makedefs.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/util/makedefs.c	2004-08-05 16:35:38.000000000 +0900
@@ -4,6 +4,13 @@
 /* Copyright (c) Dean Luick, 1990.				  */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright (c) Issei Numata 1994-1999
+**	changing point is marked `JP' (94/1/6)
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #define MAKEDEFS_C	/* use to conditionally include file sections */
 /* #define DEBUG */	/* uncomment for debugging info */
 
@@ -23,8 +30,18 @@
 /* version information */
 #ifdef SHORT_FILENAMES
 #include "patchlev.h"
+#if 1 /*JP*/
+#include "../japanese/jpatchle.h"
+#endif
 #else
 #include "patchlevel.h"
+#if 1 /*JP*/
+#include "../japanese/jpatchlevel.h"
+#endif
+#endif
+
+#if 1 /*JP*/
+#include <ctype.h>
 #endif
 
 #ifdef MAC
@@ -62,16 +79,33 @@
 #else
 #define OPTIONS_FILE    NH_OPTIONS_FILE
 #endif
+#if 0 /*JP*/
 #define ORACLE_FILE	"oracles"
+#else
+#define ORACLE_FILE	"joracles"
+#endif
 #define DATA_FILE	"data"
+#if 0 /*JP*/
 #define RUMOR_FILE	"rumors"
+#else
+#define RUMOR_FILE	"jrumors"
+#endif
 #define DGN_I_FILE	"dungeon.def"
 #define DGN_O_FILE	"dungeon.pdf"
 #define MON_STR_C	"monstr.c"
+#if 0 /*JP*/
 #define QTXT_I_FILE	"quest.txt"
+#else
+#define QTXT_I_FILE	"jquest.txt"
+#endif
 #define QTXT_O_FILE	"quest.dat"
 #define VIS_TAB_H	"vis_tab.h"
 #define VIS_TAB_C	"vis_tab.c"
+#if 1 /*JP*/
+#define JOBJ_FILE	"jtrnsobj.dat"
+#define JMON_FILE	"jtrnsmon.dat"
+#define JDATA		"jdata.h"
+#endif
 /*WAC filename*/
 /*input*/
 #define FILE_H          "file.h"
@@ -118,6 +152,9 @@
 	"#\tThis data file is generated by 'makedefs'.  Do not edit. \n";
 
 static struct version_info version;
+#if 1 /*JP*/
+static struct version_info jversion;
+#endif
 
 #ifdef MAC_MPW
 static const char *data_template()
@@ -175,6 +212,9 @@
 void NDECL(do_rumors);
 void NDECL(do_oracles);
 void NDECL(do_vision);
+#if 1 /*JP*/
+void NDECL(do_japanese);
+#endif
 /*WAC filenames*/
 void NDECL(do_filenames);
 
@@ -184,6 +224,9 @@
 static void NDECL(make_version);
 static char *FDECL(version_string, (char *));
 static char *FDECL(version_id_string, (char *,const char *));
+#if 1 /*JP*/
+static char *FDECL(jversion_id_string, (char *,const char *));
+#endif
 static char *FDECL(xcrypt, (const char *));
 static int FDECL(check_control, (char *));
 static char *FDECL(without_control, (char *));
@@ -336,6 +379,11 @@
 		case 'z':
 		case 'Z':	do_vision();
 				break;
+#if 1 /*JP*/
+		case 'j':
+		case 'J':	do_japanese();
+				break;
+#endif
 		default:	Fprintf(stderr,	"Unknown option '%c'.\n",
 					*options);
 				(void) fflush(stderr);
@@ -459,6 +507,12 @@
 				((unsigned long)VERSION_MINOR << 16) |
 				((unsigned long)PATCHLEVEL << 8) |
 				((unsigned long)EDITLEVEL);
+#if 1 /*JP*/
+	jversion.incarnation = ((long)JVERSION_MAJOR << 24) |
+				((long)JVERSION_MINOR << 16) |
+				((long)JPATCHLEVEL << 8) |
+				((long)JEDITLEVEL);
+#endif
 	/*
 	 * encoded feature list
 	 * Note:  if any of these magic numbers are changed or reassigned,
@@ -590,6 +644,39 @@
     return outbuf;
 }
 
+#if 1 /*JP*/
+static char *
+jversion_id_string(outbuf, build_date)
+char *outbuf;
+const char *build_date;
+{
+	Sprintf(outbuf,
+#ifdef BETA
+# ifdef PORT_SUB_ID
+		"%s JSLASH'EM %s Beta Version %d.%d.%d-%d - last build %s.",
+# else
+		"%s JSLASH'EM Beta Version %d.%d.%d-%d - last build %s.",
+# endif
+#else
+# ifdef PORT_SUB_ID
+		"%s JSLASH'EM %s Version %d.%d.%d - last build %s.",
+# else
+		"%s JSLASH'EM Version %d.%d.%d - last build %s.",
+# endif
+#endif
+		PORT_ID,
+#ifdef PORT_SUB_ID
+		PORT_SUB_ID,
+#endif
+		JVERSION_MAJOR, JVERSION_MINOR, JPATCHLEVEL,
+#ifdef BETA
+		JEDITLEVEL,
+#endif
+		build_date);
+	return outbuf;
+}
+#endif
+
 void
 do_date()
 {
@@ -612,6 +699,9 @@
 
 #ifdef KR1ED
 	(void) time(&clocktim);
+#if 1 /*JP*/
+	Fprintf(ofp,"#define JVERSION_NUMBER 0x%08lxL\n", jversion.incarnation);
+#endif
 	Strcpy(cbuf, ctime(&clocktim));
 #else
 	(void) time((time_t *)&clocktim);
@@ -643,6 +733,10 @@
 	Fprintf(ofp,"#define VERSION_STRING \"%s\"\n", version_string(buf));
 	Fprintf(ofp,"#define VERSION_ID \\\n \"%s\"\n",
 		version_id_string(buf, cbuf));
+#if 1 /*JP*/
+	Fprintf(ofp,"#define JVERSION_ID \\\n \"%s\"\n",
+		jversion_id_string(buf, cbuf));
+#endif
 #ifdef AMIGA
 	{
 	struct tm *tm = localtime((time_t *) &clocktim);
@@ -1001,6 +1095,17 @@
 	    Fprintf(ofp, ","),  length++;
 	}
 	Fprintf(ofp, "\n%swith a default of %s.", indent, DEFAULT_WINDOW_SYS);
+
+#if 1 /*JP*/
+/* internal kcode */
+/* IC=0 EUC */
+/* IC=1 SJIS */
+#define IC ((unsigned char)("漢"[0])==0x8a)
+
+	Fprintf(ofp,"\n\nInternal Kanji Code:\n\n");
+	Fprintf(ofp,"%s%s\n", indent, IC ? "SJIS" : "EUC");
+#endif
+
 	Fprintf(ofp,"\n\n");
 
 	Fclose(ofp);
@@ -1054,7 +1159,11 @@
 	Strcat(filename,file_prefix);
 #endif
 	Sprintf(eos(filename), DATA_TEMPLATE, DATA_FILE);
+#if 0 /*JP*/
 	Sprintf(infile, DATA_IN_TEMPLATE, DATA_FILE);
+#else
+	Sprintf(infile, DATA_IN_TEMPLATE, "j" DATA_FILE);
+#endif
 	Strcat(infile,
 #ifdef SHORT_FILENAMES
 		".bas"
@@ -1086,8 +1195,15 @@
 	entry_cnt = line_cnt = 0;
 	/* read through the input file and split it into two sections */
 	while (fgets(in_line, sizeof in_line, ifp)) {
+#if 0 /*JP*/
 	    if (d_filter(in_line)) continue;
 	    if (*in_line > ' ') {	/* got an entry name */
+#else
+	    unsigned char uc;
+	    uc = *((unsigned char *)in_line);
+	    if (d_filter(in_line)) continue;
+	    if (uc > ' ') {	/* got an entry name */
+#endif
 		/* first finish previous entry */
 		if (line_cnt)  Fprintf(ofp, "%d\n", line_cnt),  line_cnt = 0;
 		/* output the entry name */
@@ -1165,6 +1281,7 @@
 }
 
 static const char *special_oracle[] = {
+#if 0 /*JP*/
 	"\"...it is rather disconcerting to be confronted with the",
 	"following theorem from [Baker, Gill, and Solovay, 1975].",
 	"",
@@ -1175,6 +1292,18 @@
 	"This provides impressive evidence that the techniques that are",
 	"currently available will not suffice for proving that P != NP or          ",
 	"that P == NP.\"  [Garey and Johnson, p. 185.]"
+#else
+	"「次の定理[Baker, Gill, and Solovay, 1975]に直面することは",
+	"むしろ困惑することである．",
+	"",
+	"定理 7.18 次のような再帰的言語 A，Bが存在する",
+	"  (1)  P(A) == NP(A)，かつ",
+	"  (2)  P(B) != NP(B)",
+	"",
+	"これは現在 P != NPであるかまたは P == NPであるかを証明する",
+        "有効な手法がないことを強く示している．」",
+        "[Garey and Johnson, p. 185.]"
+#endif
 };
 
 /*
@@ -2438,6 +2567,154 @@
 }
 
 
+#if 1 /*JP*/
+
+#include "../japanese/hash.c"
+
+static int hash_tab[HASHSIZE]; 
+static int rhash_tab[HASHSIZE]; 
+
+/* JP
+** 
+*/
+#define WRMODE "w+"
+#define RDMODE "r"
+
+static int
+split_string(buf, key, val)
+char *buf, *key, *val;
+{
+    char *p;
+
+    if(buf[0] == '#') return 0;
+    p = buf;
+
+    while(isspace(*p)) p++;
+    if(*p == '\0') return 0;
+
+    while(*p!=':'){
+	if(!*p) return 0;
+	else if(*(unsigned char *)p<128) {
+	    *key++ = *p++;
+	} else {
+	    *key++ = *p++;
+	    *key++ = *p++;
+	}
+    }
+    *key = '\0';
+    p++;
+
+    while(isspace(*p)) p++;
+    if(*p == '\0') return 0;
+
+    while(*p != ':'){
+	if(!*p) return 0;
+	else if(*(unsigned char *)p<128) {
+	    *val++ = *p++;
+	} else {
+	    *val++ = *p++;
+	    *val++ = *p++;
+	}
+    }
+
+    *val = '\0';
+    return 1;
+}
+
+void
+do_japanese(void)
+{
+    FILE *fpr, *fpw;
+    char fnamer[BUFSZ], fnamew[BUFSZ];
+    unsigned char buf[BUFSZ], key[BUFSZ], val[BUFSZ];
+    int i, hval, rhval;
+
+    for(i = 0 ; i < HASHSIZE; ++i){
+	hash_tab[i] = -1;
+	rhash_tab[i] = -1;
+    }
+
+    sprintf(fnamew, INCLUDE_TEMPLATE,JDATA);
+    if((fpw = fopen(fnamew, WRMODE)) == (void *)NULL){
+	fprintf(stderr, "Error: Can't create %s\n", fnamew);
+	return;
+    }
+
+    fprintf(fpw, Dont_Edit_Code);
+
+    sprintf(fnamer, DATA_TEMPLATE, JMON_FILE);
+    if((fpr = fopen(fnamer, RDMODE)) == (void *)NULL)
+      fprintf(stderr, "Warning: Can't open %s\n", fnamer);
+    else {
+	fprintf(fpw,"static struct _jtrns_tab {\n");
+	fprintf(fpw,"  const int type;\n");
+	fprintf(fpw,"  const int next;\n");
+	fprintf(fpw,"  const int rev_next;\n");
+/*    fprintf(fpw,"  const int type;\n");*/
+	fprintf(fpw,"  const char *key;\n");
+	fprintf(fpw,"  const char *val;\n");
+	fprintf(fpw,"} jtrns_tab[] = {\n");
+
+	i = 0;
+	while(fgets((char *)buf, BUFSZ, fpr) != NULL){
+	    if(split_string(buf, key, val)){
+		hval = hash_val(key);
+		rhval = hash_val(val);
+
+		fprintf(fpw,"  {'@', %d, %d, \"%s\", \"%s\"},\n", 
+			hash_tab[hval], rhash_tab[rhval], key, val);
+
+		hash_tab[hval] = i;
+		rhash_tab[rhval] = i;
+		++i;
+	    }
+	}
+	fclose(fpr);
+
+	sprintf(fnamer, DATA_TEMPLATE, JOBJ_FILE);
+	if((fpr = fopen(fnamer, RDMODE)) == (void *)NULL)
+	  fprintf(stderr, "Warning: Can't open %s\n", fnamer);
+	else {
+	    while(fgets((char *)buf, BUFSZ, fpr) != NULL){
+		if(split_string(buf, key, val)){
+		    hval = hash_val(key + 1);
+		    rhval = hash_val(val);
+
+		    if(*key == '\'')
+		      fprintf(fpw, "  {'\\%c', %d, %d, \"%s\", \"%s\"},\n",
+			      *key, hash_tab[hval], rhash_tab[rhval],
+			      key + 1, val);
+		    else
+		      fprintf(fpw, "  {'%c', %d, %d, \"%s\", \"%s\"},\n",
+			      *key, hash_tab[hval], rhash_tab[rhval],
+			      key + 1, val);
+
+		    hash_tab[hval] = i;
+		    rhash_tab[rhval] = i;
+
+		    ++i;
+		}
+	    }
+	}
+	fclose(fpr);
+	fprintf(fpw, "  {'\\0', -1, -1, (void *)0, (void *)0},\n");
+	fprintf(fpw, "};\n");
+
+	fprintf(fpw, "static int hash_tab[] = {\n");
+	for (i = 0; i < HASHSIZE; i++)
+	  fprintf(fpw, "%d, \n", hash_tab[i]);
+	fprintf(fpw, "};\n");
+
+	fprintf(fpw, "static int rhash_tab[] = {\n");
+	for (i = 0; i < HASHSIZE; i++)
+	  fprintf(fpw, "%d, \n", rhash_tab[i]);
+	fprintf(fpw, "};\n");
+
+	fclose(fpw);
+    }
+}
+#endif
+  
 #ifdef STRICT_REF_DEF
 NEARDATA struct flag flags;
 # ifdef ATTRIB_H
diff -aurN slashem-0.0.7E6F2/win/Qt/Info.pli jslashem-0.0.7E6F2-J0.0.8/win/Qt/Info.pli
--- slashem-0.0.7E6F2/win/Qt/Info.pli	1970-01-01 09:00:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/Qt/Info.pli	2004-06-10 08:55:20.000000000 +0900
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE plist SYSTEM "file://localhost/System/Library/DTDs/PropertyList.dtd">
+<plist version="0.9">
+<dict>
+	<key>CFBundleIconFile</key>
+	<string>nethack.icns</string>
+	<key>CFBundlePackageType</key>
+	<string>APPL</string>
+        <key>CFBundleGetInfoString</key>
+	<string>Created by Qt/QMake</string>
+	<key>CFBundleSignature</key>
+	<string>ttxt</string>
+	<key>NOTE</key>
+	<string>Please, do NOT change this file -- It was generated by Qt/QMake.</string>
+</dict>
+</plist>
diff -aurN slashem-0.0.7E6F2/win/X11/Window.c jslashem-0.0.7E6F2-J0.0.8/win/X11/Window.c
--- slashem-0.0.7E6F2/win/X11/Window.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/Window.c	2004-06-10 08:55:20.000000000 +0900
@@ -7,6 +7,13 @@
  * drawing canvas with 16 colors and one font.
  */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 1994-1999
+**	changing point is marked `JP' (94/6/7) or XI18N (96/7/19)
+**	For 3.4.0, Copyright (c) Kentaro Shirakata, 2002
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #ifndef SYSV
 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
 #endif
@@ -76,6 +83,10 @@
 
     { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
 	  offset(font), XtRString, XtDefaultFont },
+#ifdef XI18N
+    { XtNfontSet, XtCFontSet, XtRFontSet, sizeof(XFontSet *),
+	  offset(fontset), XtRString, XtDefaultFontSet },
+#endif
     { XtNexposeCallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
 	  offset(expose_callback), XtRCallback, (char *)0 },
     { XtNcallback, XtCCallback, XtRCallback, sizeof(XtCallbackList),
@@ -168,3 +179,8 @@
 
 XFontStruct *
 WindowFontStruct(w) Widget w; { return ((WindowWidget)w)->window.font; }
+
+#ifdef XI18N
+XFontSet
+WindowFontSet(w) Widget w; { return ((WindowWidget)w)->window.fontset; }
+#endif
diff -aurN slashem-0.0.7E6F2/win/X11/dialogs.c jslashem-0.0.7E6F2-J0.0.8/win/X11/dialogs.c
--- slashem-0.0.7E6F2/win/X11/dialogs.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/dialogs.c	2004-06-10 08:55:20.000000000 +0900
@@ -41,6 +41,10 @@
  *	window itself.  Suggestion from David E. Wexelblat, dwex@goblin.org.
  */
 
+/*
+** marked as XI18N for i18n by issei (1994/1/10)
+*/
+
 #ifndef SYSV
 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
 #endif
@@ -62,12 +66,23 @@
 #endif
 
 #include "config.h"	/* #define for const for non __STDC__ compilers */
+#if 1 /*JP*/
+#ifdef XAW_I18N
+#include <X11/Xaw/Xawi18n.h>
+#endif
+#endif
 
 /* ":" added to both translations below to allow limited redefining of
  * keysyms before testing for keysym values -- dlc */
 static const char okay_accelerators[] =
+#if 0 /*JP*/
     "#override\n\
      :<Key>Return: set() notify() unset()\n";
+#else
+    "#override\n\
+     :<Key>Return: set() notify() unset()\n\
+     :<Ctrl>m: set() notify() unset()\n";
+#endif
 
 static const char cancel_accelerators[] =
     "#override\n\
@@ -113,6 +128,10 @@
     XtSetArg(args[num_args], XtNright, XtChainLeft);	num_args++;
     XtSetArg(args[num_args], XtNresizable, True);	num_args++;
     XtSetArg(args[num_args], XtNborderWidth, 0);	num_args++;
+
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     prompt = XtCreateManagedWidget("prompt", labelWidgetClass,
 				   form, args, num_args);
 
@@ -132,6 +151,9 @@
     XtSetArg(args[num_args], XtNeditType, XawtextEdit);	num_args++;
     XtSetArg(args[num_args], XtNresize, XawtextResizeWidth);	num_args++;
     XtSetArg(args[num_args], XtNstring, "");		num_args++;
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     response = XtCreateManagedWidget("response", asciiTextWidgetClass,
 				     form, args, num_args);
 
@@ -150,7 +172,14 @@
     XtSetArg(args[num_args], XtNresizable, True);	num_args++;
     XtSetArg(args[num_args], XtNaccelerators,
 	     XtParseAcceleratorTable(okay_accelerators));	num_args++;
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
+#if 0 /*JP*/
     okay = XtCreateManagedWidget("okay", commandWidgetClass,
+#else
+    okay = XtCreateManagedWidget("OK", commandWidgetClass,
+#endif
 				 form, args, num_args);
     XtAddCallback(okay, XtNcallback, okay_callback, form);
 
@@ -172,7 +201,14 @@
 	XtSetArg(args[num_args], XtNresizable, True);		num_args++;
 	XtSetArg(args[num_args], XtNaccelerators,
 	     XtParseAcceleratorTable(cancel_accelerators));	num_args++;
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
+#if 0 /*JP*/
 	cancel = XtCreateManagedWidget("cancel", commandWidgetClass,
+#else
+	cancel = XtCreateManagedWidget("キャンセル", commandWidgetClass,
+#endif
 				       form, args, num_args);
 	XtAddCallback(cancel, XtNcallback, cancel_callback, form);
 	XtInstallAccelerators(response, cancel);
@@ -231,26 +267,44 @@
     return XtNewString(s);
 }
 
+#ifndef max
 #define max(a,b) (((a) > (b)) ? (a) : (b))
+#endif
 /* set the default reponse */
 void
 SetDialogResponse(w, s)
     Widget w;
     String s;
 {
+#ifndef XI18N
     Arg args[4];
+#else
+    Arg args[5];
+#endif
     Widget response;
     XFontStruct *font;
     Dimension width, nwidth, leftMargin, rightMargin;
+#ifdef XI18N
+    XFontSet fontset;
+    XFontSetExtents *extent;
+#endif
 
     response = XtNameToWidget(w, "response");
     XtSetArg(args[0], XtNfont, &font);
     XtSetArg(args[1], XtNleftMargin, &leftMargin);
     XtSetArg(args[2], XtNrightMargin, &rightMargin);
     XtSetArg(args[3], XtNwidth, &width);
+#ifndef XI18N
     XtGetValues(response, args, FOUR);
     /* width includes margins as per Xaw documentation */
     nwidth = (font->max_bounds.width * strlen(s))+leftMargin+rightMargin;
+#else
+    XtSetArg(args[4], XtNfontSet, &fontset);
+    XtGetValues(response, args, FIVE);
+    extent = XExtentsOfFontSet(fontset);
+    nwidth = ((extent->max_logical_extent.width * strlen(s)) + leftMargin
+	      + rightMargin);
+#endif
     if (nwidth < width)
 	nwidth = width;
 
diff -aurN slashem-0.0.7E6F2/win/X11/winX.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winX.c
--- slashem-0.0.7E6F2/win/X11/winX.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winX.c	2004-07-10 16:09:22.000000000 +0900
@@ -8,6 +8,13 @@
  * interface.
  */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 1994-1999
+**	changing point is marked `JP' (94/6/7) or XI18N (96/7/19)
+**	For 3.4.0, Copyright (c) Kentaro Shirakata, 2002
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #ifndef SYSV
 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
 #endif
@@ -174,6 +181,10 @@
 					/*   in init_windows().		    */
 static Pixmap icon_pixmap = None;	/* Pixmap for icon.		    */
 
+#ifdef	INSTALLCOLORMAP
+Colormap     cmap;
+#endif
+
 /*
  * Find the window structure that corresponds to the given widget.  Note
  * that this is not the popup widget, nor the viewport, but the child.
@@ -329,6 +340,50 @@
     return True;
 }
 
+#ifdef INSTALLCOLORMAP
+Boolean
+nhCvtStringToColormap(dpy, args, num_args, fromVal, toVal, data)
+Display*	dpy;
+XrmValuePtr	args;
+Cardinal	*num_args;
+XrmValuePtr	fromVal;
+XrmValuePtr	toVal;
+XtPointer	data;
+{
+  XColor	black, white;
+  int screen = DefaultScreen(dpy);
+  Colormap dcmap = DefaultColormap(dpy, screen);
+  
+  if(strncmp(fromVal->addr, "install", 7)){
+    return False;
+  }
+  if(!cmap){
+    cmap = XCreateColormap(dpy,
+			   RootWindow(dpy, screen),
+			   DefaultVisual(dpy, screen),
+			   AllocNone);
+    /*
+      手抜き
+     */
+    black.red = 0;
+    black.green = 0;
+    black.blue = 0;
+
+    white.red = 0xffff;
+    white.green = 0xffff;
+    white.blue = 0xffff;
+
+    XAllocColor(dpy, dcmap, &black);
+    XAllocColor(dpy, dcmap, &white);
+
+    XAllocColor(dpy, cmap, &black);
+    XAllocColor(dpy, cmap, &white);
+  }
+  
+  done(Colormap, cmap);
+}
+#endif /*INSTALLCOLORMAP*/
+
 Boolean
 nhCvtStringToPixel(dpy, args, num_args, fromVal, toVal, closure_ret)
 Display*	dpy;
@@ -490,14 +545,20 @@
 X11_raw_print(str)
     const char *str;
 {
+/*JP
     (void) puts(str);
+*/
+    (void) jputs(str);
 }
 
 void
 X11_raw_print_bold(str)
     const char *str;
 {
+/*JP
     (void) puts(str);
+*/
+    (void) jputs(str);
 }
 
 void
@@ -867,7 +928,11 @@
 	panic("ripout on non-text window (window type [%d])", wp->type);
     }
 
+#ifndef XI18N
     calculate_rip_text(how);
+#else
+    calculate_rip_text(how, wp->Win_info.Text_info->fontset);
+#endif
 }
 #endif
 
@@ -914,6 +979,12 @@
       XtOffset(AppResources *,double_tile_size), XtRString, "False" },
     { "tile_file", "Tile_file", XtRString, sizeof(String),
       XtOffset(AppResources *,tile_file), XtRString, "" },
+#ifdef X11LARGETILE
+    { "tile_width", "Tile_width", XtRInt, sizeof(int),
+      XtOffset(AppResources *,tile_width), XtRString, "32" },
+    { "tile_height", "Tile_height", XtRInt, sizeof(int),
+      XtOffset(AppResources *,tile_height), XtRString, "32" },
+#endif
     { "icon", "Icon", XtRString, sizeof(String),
       XtOffset(AppResources *,icon), XtRString, "nh72" },
     { "message_lines", "Message_lines", XtRInt, sizeof(int),
@@ -946,6 +1017,14 @@
 	COPYRIGHT_BANNER_B,
 	COPYRIGHT_BANNER_C,
 	"",
+#if 1 /*JP*/
+	JA_COPYRIGHT_BANNER_A,
+	JA_COPYRIGHT_BANNER_B,
+	JA_COPYRIGHT_BANNER_C,
+	JA_COPYRIGHT_BANNER_D,
+	JA_COPYRIGHT_BANNER_E,
+	JA_COPYRIGHT_BANNER_F,
+#endif
 	"",
 	0
     };
@@ -1350,13 +1429,19 @@
     Cardinal num_args;
     Widget popup, dispfile;
     Position top_margin, bottom_margin, left_margin, right_margin;
+#if 0 /*JP*/
     XFontStruct *fs;
+#endif
     int new_width, new_height;
 #define LLEN 128
     char line[LLEN];
     int num_lines;
     char *textlines;
     int charcount;
+#ifdef XI18N
+    XFontSet fontset;
+    XFontSetExtents *extent;
+#endif
 
     /* Use the port-independent file opener to see if the file exists. */
 #ifdef FILE_AREAS
@@ -1427,6 +1512,10 @@
     XtSetArg(args[num_args], XtNdisplayCaret, False);		num_args++;
     XtSetArg(args[num_args], XtNtranslations,
 	XtParseTranslationTable(display_translations));		num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 
     dispfile = XtCreateManagedWidget(
 			"text",			/* name */
@@ -1437,7 +1526,11 @@
 
     /* Get font and border information. */
     num_args = 0;
+#ifndef XI18N
     XtSetArg(args[num_args], XtNfont,	      &fs);	       num_args++;
+#else
+    XtSetArg(args[num_args], XtNfontSet,      &fontset);       num_args++;
+#endif
     XtSetArg(args[num_args], XtNtopMargin,    &top_margin);    num_args++;
     XtSetArg(args[num_args], XtNbottomMargin, &bottom_margin); num_args++;
     XtSetArg(args[num_args], XtNleftMargin,   &left_margin);   num_args++;
@@ -1448,9 +1541,16 @@
      * The data files are currently set up assuming an 80 char wide window
      * and a fixed width font.  Soo..
      */
+#ifndef XI18N
     new_height = num_lines * nhFontHeight(dispfile) +
 						top_margin + bottom_margin;
     new_width  = 80 * fs->max_bounds.width + left_margin + right_margin;
+#else
+    extent = XExtentsOfFontSet(fontset);
+    new_height = num_lines * extent->max_logical_extent.height +
+						top_margin + bottom_margin;
+    new_width  = 40 * extent->max_logical_extent.width + left_margin + right_margin;
+#endif
 
     /* Set the new width and height. */
     num_args = 0;
@@ -1650,6 +1750,10 @@
 	num_args = 0;
 	XtSetArg(args[num_args], XtNtranslations,
 		XtParseTranslationTable(yn_translations));	num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 	yn_label = XtCreateManagedWidget("yn_label",
 				labelWidgetClass,
 				yn_popup,
@@ -1796,6 +1900,10 @@
 	num_args = 0;
 	XtSetArg(args[num_args], XtNtranslations,
 		 XtParseTranslationTable(yn_translations)); num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 	yn_label = XtCreateManagedWidget("yn_label",
 					 labelWidgetClass,
 					 form,
diff -aurN slashem-0.0.7E6F2/win/X11/winmap.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winmap.c
--- slashem-0.0.7E6F2/win/X11/winmap.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winmap.c	2004-06-10 08:55:20.000000000 +0900
@@ -25,7 +25,9 @@
 #include <X11/Xaw/Cardinals.h>
 #include <X11/Xaw/Scrollbar.h>
 #include <X11/Xaw/Viewport.h>
+#include <X11/Xaw/Label.h>
 #include <X11/Xatom.h>
+#include <X11/keysym.h>
 
 #ifdef PRESERVE_NO_SYSV
 # ifdef SYSV
@@ -76,6 +78,17 @@
 static void FDECL(get_char_info, (struct xwindow *));
 static void FDECL(display_cursor, (struct xwindow *));
 
+#ifdef X11LARGETILE
+struct pxm_slot_t {
+    int fg;
+    int bg;
+    int age;
+    Pixmap pixmap;
+};
+#define MAX_PXM_SLOTS 100
+    struct pxm_slot_t pxm_slot[MAX_PXM_SLOTS]; 
+#endif
+
 /* Global functions ======================================================== */
 
 void
@@ -212,6 +225,7 @@
 post_process_tiles()
 {
     Display *dpy = XtDisplay(toplevel);
+#if 0 /*JP*/
     unsigned int width, height;
     char *pet_mark_file;
 
@@ -236,6 +250,46 @@
 
     XDestroyImage(tile_image);	/* data bytes free'd also */
     tile_image = 0;
+#else
+    Colormap cmap;
+# ifdef USE_XPM
+    XpmAttributes attributes;
+# endif
+    Arg args[16];
+    XGCValues val;
+
+# ifdef USE_XPM
+    if(tile_image.data){
+      XtSetArg(args[0], XtNcolormap, &cmap);
+      XtGetValues(toplevel, args, ONE);
+      
+      attributes.valuemask = XpmCloseness | XpmColormap;
+      attributes.colormap = cmap;
+      attributes.closeness = 25000;
+
+      XpmCreatePixmapFromXpmImage(
+		dpy,
+		XtWindow(toplevel),
+		&tile_image,
+		&tile_pixmap,
+		&tile_clipmask,
+		&attributes
+		);
+
+      val.function = GXcopy;
+      val.clip_mask = tile_clipmask;
+
+      tile_gc = XCreateGC(
+		dpy,
+		XtWindow(toplevel),
+		GCFunction | GCClipMask,
+		&val
+		);
+		
+      XpmFreeXpmImage(&tile_image);
+    }
+# endif
+#endif /*JP*/
 
 #ifndef FILE_AREAS
     pet_mark_file = appResources.pet_mark_bitmap;
@@ -330,6 +384,7 @@
 	XFreePixmap(dpy, tile_pixmap);
 	tile_pixmap = None;
     }
+# endif
 
     map_info = wp->map_information;
     if (map_info->mtype.text_map) {
@@ -621,7 +676,13 @@
     mask = GCFunction | GCForeground | GCGraphicsExposures;
     values.graphics_exposures = False;
     values.foreground = WhitePixelOfScreen(screen) ^
+# ifndef X11LARGETILE
 	XGetPixel(tile_image, 0, tile_height*glyph2tile[cmap_to_glyph(S_corr)]);
+# else
+	XGetPixel(tile_image, 
+                tile_width*(glyph2tile[cmap_to_glyph(S_corr)]%TILE_PER_COL),
+                tile_height*(glyph2tile[cmap_to_glyph(S_corr)]/TILE_PER_COL));
+# endif
     values.function = GXxor;
     tile_info->white_gc = XtGetGC(wp->w, mask, &values);
 
@@ -637,11 +698,20 @@
     if (colormap) free((genericptr_t)colormap);
     if (tile_bytes) free((genericptr_t)tile_bytes);
     if (colors) free((genericptr_t)colors);
+# ifdef X11LARGETILE
+    {int i; for(i=0;i<MAX_PXM_SLOTS;i++){ pxm_slot[i].age=0;
+     pxm_slot[i].bg=pxm_slot[i].fg=-99;pxm_slot[i].pixmap=0;} }
+# endif
 #endif
 
     if (result) {				/* succeeded */
+#ifndef X11LARGETILE
 	map_info->square_height = tile_height;
 	map_info->square_width = tile_width;
+#else
+	map_info->square_height = TILE_HEIGHT;
+	map_info->square_width = TILE_WIDTH;
+#endif
 	map_info->square_ascent = 0;
 	map_info->square_lbearing = 0;
     } else {
@@ -1111,6 +1181,9 @@
     Cardinal in_nparams = (num_params ? *num_params : 0);
     char c;
     char keystring[MAX_KEY_STRING];
+#if 1 /*JP*/
+    KeySym keysym = 0;
+#endif
 
     switch (event->type) {
 	case ButtonPress:
@@ -1156,9 +1229,57 @@
 		 */
 		meta = !!(key->state & Mod1Mask);
 		nbytes =
+#if 0 /*JP*/
 		    XLookupString(key, keystring, MAX_KEY_STRING,
 				  (KeySym *)0, (XComposeStatus *)0);
+#else
+		    XLookupString(key, keystring, MAX_KEY_STRING,
+				  &keysym, (XComposeStatus *)0);
+#endif
 	    }
+#if 1 /*JP*/
+	    /*
+	      強引に
+	     */
+	    if(!iflags.num_pad){
+	      if(keysym == XK_KP_1 || keysym == XK_KP_End){
+		keystring[0] = 'b';
+		nbytes = 1;
+	    }
+	      else if(keysym == XK_KP_2 || keysym == XK_KP_Down){
+		keystring[0] = 'j';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_3 || keysym == XK_KP_Page_Down){
+		keystring[0] = 'n';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_4 || keysym == XK_KP_Left){
+		keystring[0] = 'h';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_5 || keysym == XK_KP_Begin){
+		keystring[0] = '.';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_6 || keysym == XK_KP_Right){
+		keystring[0] = 'l';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_7 || keysym == XK_KP_Home){
+		keystring[0] = 'y';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_8 || keysym == XK_KP_Up){
+		keystring[0] = 'k';
+		nbytes = 1;
+	      }
+	      else if(keysym == XK_KP_9 || keysym == XK_KP_Page_Up){
+		keystring[0] = 'u';
+		nbytes = 1;
+	      }
+	    }
+#endif /*JP*/
 	key_events:
 	    /* Modifier keys return a zero length string when pressed. */
 	    if (nbytes) {
@@ -1336,8 +1457,18 @@
 	Display* dpy = XtDisplay(wp->w);
 	Screen* screen = DefaultScreenOfDisplay(dpy);
 
+#ifdef X11LARGETILE
+         /* each slots ages */
+        {
+	     int i; 
+	     
+	     for(i=0 ; i<MAX_PXM_SLOTS ; i++)
+		  pxm_slot[i].age++;
+	}
+#endif
 	for (row = start_row; row <= stop_row; row++) {
 	    for (cur_col = start_col; cur_col <= stop_col; cur_col++) {
+#ifndef X11LARGETILE
 		int glyph = tile_map->glyphs[row][cur_col];
 		int tile = glyph2tile[glyph];
 		int src_x, src_y;
diff -aurN slashem-0.0.7E6F2/win/X11/winmenu.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winmenu.c
--- slashem-0.0.7E6F2/win/X11/winmenu.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winmenu.c	2004-06-10 08:55:20.000000000 +0900
@@ -691,6 +691,10 @@
     Boolean *boolp;
 #endif
     char gacc[QBUFSZ], *ap;
+#ifdef XI18N
+/*    XFontSet fontset;*/
+    XFontSetExtents *extent;
+#endif
 
     *menu_list = (menu_item *) 0;
     check_winid(window);
@@ -822,7 +826,11 @@
 	XtSetArg(args[num_args], XtNbottom, XtChainTop);	num_args++;
 	XtSetArg(args[num_args], XtNleft, XtChainLeft);		num_args++;
 	XtSetArg(args[num_args], XtNright, XtChainLeft);	num_args++;
+#if 0 /*JP*/
 	cancel = XtCreateManagedWidget("cancel",
+#else
+	cancel = XtCreateManagedWidget("キャンセル",
+#endif
 			commandWidgetClass,
 			form,
 			args, num_args);
@@ -837,7 +845,11 @@
 	XtSetArg(args[num_args], XtNbottom, XtChainTop);	num_args++;
 	XtSetArg(args[num_args], XtNleft, XtChainLeft);		num_args++;
 	XtSetArg(args[num_args], XtNright, XtChainLeft);	num_args++;
+#if 0 /*JP*/
 	all = XtCreateManagedWidget("all",
+#else
+	all = XtCreateManagedWidget("すべて選択",
+#endif
 			commandWidgetClass,
 			form,
 			args, num_args);
@@ -851,7 +863,11 @@
 	XtSetArg(args[num_args], XtNbottom, XtChainTop);	num_args++;
 	XtSetArg(args[num_args], XtNleft, XtChainLeft);		num_args++;
 	XtSetArg(args[num_args], XtNright, XtChainLeft);	num_args++;
+#if 0 /*JP*/
 	none = XtCreateManagedWidget("none",
+#else
+	none = XtCreateManagedWidget("すべて解除",
+#endif
 			commandWidgetClass,
 			form,
 			args, num_args);
@@ -865,7 +881,11 @@
 	XtSetArg(args[num_args], XtNbottom, XtChainTop);	num_args++;
 	XtSetArg(args[num_args], XtNleft, XtChainLeft);		num_args++;
 	XtSetArg(args[num_args], XtNright, XtChainLeft);	num_args++;
+#if 0 /*JP*/
 	invert = XtCreateManagedWidget("invert",
+#else
+	invert = XtCreateManagedWidget("反転",
+#endif
 			commandWidgetClass,
 			form,
 			args, num_args);
@@ -879,7 +899,11 @@
 	XtSetArg(args[num_args], XtNbottom, XtChainTop);	num_args++;
 	XtSetArg(args[num_args], XtNleft, XtChainLeft);		num_args++;
 	XtSetArg(args[num_args], XtNright, XtChainLeft);	num_args++;
+#if 0 /*JP*/
 	search = XtCreateManagedWidget("search",
+#else
+	search = XtCreateManagedWidget("検索",
+#endif
 			commandWidgetClass,
 			form,
 			args, num_args);
@@ -919,6 +943,9 @@
 	XtSetArg(args[num_args], XtNmaxSelectable,
 			menu_info->curr_menu.count);		num_args++;
 #endif
+#if defined(X11R6) && defined(XI18N)
+	XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 	wp->w = XtCreateManagedWidget(
 		    "menu_list",		/* name */
 #ifdef USE_FWF
@@ -934,7 +961,11 @@
 
 	/* Get the font and margin information. */
 	num_args = 0;
+#ifndef XI18N
 	XtSetArg(args[num_args], XtNfont, &menu_info->fs);	num_args++;
+#else
+	XtSetArg(args[num_args], XtNfontSet, &menu_info->fontset); 	num_args++;
+#endif
 	XtSetArg(args[num_args], XtNinternalHeight,
 				&menu_info->internal_height);	num_args++;
 	XtSetArg(args[num_args], XtNinternalWidth,
@@ -943,9 +974,15 @@
 	XtGetValues(wp->w, args, num_args);
 
 	/* font height is ascent + descent */
+#ifndef XI18N
 	menu_info->line_height =
 		menu_info->fs->max_bounds.ascent +
 		menu_info->fs->max_bounds.descent + row_spacing;
+#else
+	extent = XExtentsOfFontSet(menu_info->fontset);
+	menu_info->line_height =
+		extent->max_logical_extent.height + row_spacing;
+#endif	
 
 	menu_info->valid_widgets = TRUE;
 
@@ -961,7 +998,11 @@
 	/* get the longest string on new menu */
 	v_pixel_width = 0;
 	for (ptr = menu_info->new_menu.list_pointer; *ptr; ptr++) {
+#ifndef XI18N
 	    len = XTextWidth(menu_info->fs, *ptr, strlen(*ptr));
+#else
+	    len = XmbTextEscapement(menu_info->fontset, *ptr, strlen(*ptr));
+#endif
 	    if (len > v_pixel_width) v_pixel_width = len;
 	}
 
diff -aurN slashem-0.0.7E6F2/win/X11/winmesg.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winmesg.c
--- slashem-0.0.7E6F2/win/X11/winmesg.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winmesg.c	2004-06-10 08:55:20.000000000 +0900
@@ -37,7 +37,9 @@
 
 static struct line_element *FDECL(get_previous, (struct line_element *));
 static void FDECL(set_circle_buf, (struct mesg_info_t *,int));
+#ifndef XI18N
 static char *FDECL(split, (char *,XFontStruct *,DIMENSION_P));
+#endif
 static void FDECL(add_line, (struct mesg_info_t *,const char *));
 static void FDECL(redraw_message_window, (struct xwindow *));
 static void FDECL(mesg_check_size_change, (struct xwindow *));
@@ -77,6 +79,9 @@
     Cardinal num_args;
     Widget viewport;
     struct mesg_info_t *mesg_info;
+#ifdef XI18N
+    XFontSetExtents *extent;
+#endif
 
     wp->type = NHW_MESSAGE;
 
@@ -151,14 +156,27 @@
     /* Get the font information. */
     num_args = 0;
     XtSetArg(args[num_args], XtNfont, &mesg_info->fs);	       num_args++;
+#ifdef XI18N
+    XtSetArg(args[num_args], XtNfontSet, &mesg_info->fontset); num_args++;
+#endif
     XtGetValues(wp->w, args, num_args);
+#ifdef XI18N
+    extent = XExtentsOfFontSet(mesg_info->fontset);
+#endif
 
     /* Save character information for fast use later. */
+#ifndef XI18N
     mesg_info->char_width    = mesg_info->fs->max_bounds.width;
     mesg_info->char_height   = mesg_info->fs->max_bounds.ascent +
 					    mesg_info->fs->max_bounds.descent;
     mesg_info->char_ascent   = mesg_info->fs->max_bounds.ascent;
     mesg_info->char_lbearing = -mesg_info->fs->min_bounds.lbearing;
+#else
+    mesg_info->char_width    = extent->max_logical_extent.width;
+    mesg_info->char_height   = extent->max_logical_extent.height;
+    mesg_info->char_ascent   = -extent->max_logical_extent.y;
+    mesg_info->char_lbearing = extent->max_logical_extent.x;
+#endif
 
     get_gc(wp->w, mesg_info);
 
@@ -237,6 +255,32 @@
     struct xwindow *wp;
     const char *str;
 {
+#if defined(XI18N)
+    int len;
+    XRectangle ink_ext, lgc_ext;
+    char ss[1024],s1[1024],s2[1024]; /* may be enough */
+
+    Strcpy(ss, str);
+    while(1){
+      len = strlen(ss);
+      while(1){
+	XmbTextExtents(wp->mesg_information->fontset, ss, len,
+		       &ink_ext,&lgc_ext);
+	if(lgc_ext.width < wp->pixel_width)
+	  break;
+	--len;
+      }
+      if( len >= strlen(ss)){
+	add_line(wp->mesg_information, ss);
+	break;
+      }
+      split_japanese(ss, s1, s2, len);
+      add_line(wp->mesg_information, s1);
+      if(!*s2)
+	break;
+      Strcpy(ss,s2);
+    }
+#else
     char *mark, *remainder, buf[BUFSZ];
 
     if (!str) return;
@@ -249,6 +293,10 @@
 	remainder = split(mark, wp->mesg_information->fs, wp->pixel_width);
 	add_line(wp->mesg_information, mark);
     } while (remainder);
+# if 1 /*JP*/
+    add_line(wp->mesg_information, buf);
+# endif
+#endif /*XI18N*/
 }
 
 /* private functions ======================================================= */
@@ -352,6 +400,7 @@
  * Make sure the given string is shorter than the given pixel width.  If
  * not, back up from the end by words until we find a place to split.
  */
+#ifndef XI18N
 static char *
 split(s, fs, pixel_width)
     char *s;
@@ -377,6 +426,7 @@
     }
     return remainder;
 }
+#endif
 
 /*
  * Add a line of text to the window.  The first line in the curcular list
@@ -471,12 +521,22 @@
 		row < mesg_info->num_lines;
 		row++, y_base += mesg_info->char_height, curr = curr->next) {
 
+#ifndef XI18N
 	XDrawString(XtDisplay(wp->w), XtWindow(wp->w),
 		mesg_info->gc,
 		mesg_info->char_lbearing,
 		mesg_info->char_ascent + y_base,
 		curr->line,
 		curr->str_length);
+#else
+	XmbDrawString(XtDisplay(wp->w), XtWindow(wp->w),
+	        mesg_info->fontset,
+		mesg_info->gc,
+		mesg_info->char_lbearing,
+		mesg_info->char_ascent + y_base,
+		curr->line,
+		curr->str_length);
+#endif
 	/*
 	 * This draws a line at the _top_ of the line of text pointed to by
 	 * mesg_info->last_pause.
diff -aurN slashem-0.0.7E6F2/win/X11/winmisc.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winmisc.c
--- slashem-0.0.7E6F2/win/X11/winmisc.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winmisc.c	2004-06-10 08:55:20.000000000 +0900
@@ -8,6 +8,13 @@
  *	+ Global functions: player_selection() and get_ext_cmd().
  */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 1994-1999
+**	changing point is marked `JP' (94/6/7) or XI18N (96/7/19)
+**	For 3.4.0, Copyright (c) Kentaro Shirakata, 2002
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #ifndef SYSV
 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
 #endif
@@ -268,6 +275,11 @@
     const char **choices;
     char qbuf[QBUFSZ], plbuf[QBUFSZ];
 
+#ifdef XI18N
+    char **jroles;
+    char jtmp[256];
+#endif
+
     /* avoid unnecessary prompts further down */
     rigid_role_checks();
 
@@ -302,11 +314,20 @@
 	    else if (flags.initrace >= 0) flags.initrace = -1;
 	    else panic("no available ROLE+race+gender+alignment combinations");
 	}
+#if 0 /*JP*/
 	Sprintf(qbuf, "Choose your %s Role", s_suffix(plbuf));
+#else
+	Sprintf(qbuf, "%s職業を選択してください．", s_suffix(plbuf));
+#endif
 	popup = make_menu("player_selection", qbuf,
 		    player_select_translations,
+#if 0 /*JP*/
 		    "quit", ps_quit,
 		    "random", ps_random,
+#else
+		    "選択せずにゲーム終了", ps_quit,
+		    "ランダム", ps_random,
+#endif
 		    num_roles, choices, (Widget **)0, ps_select, &player_form);
 
 	ps_selected = -1;
@@ -366,11 +387,20 @@
 	    flags.initrace = availindex;
 	    free((genericptr_t)choices), choices = 0;
 	} else {
+#if 0 /*JP*/
 	    Sprintf(qbuf, "Pick your %s race", s_suffix(plbuf));
+#else
+	    Sprintf(qbuf, "%s種族を選択してください．", s_suffix(plbuf));
+#endif
 	    popup = make_menu("race_selection", qbuf,
 			race_select_translations,
+#if 0 /*JP*/
 			"quit", ps_quit,
 			"random", ps_random,
+#else
+			"選択せずにゲーム終了", ps_quit,
+			"ランダム", ps_random,
+#endif
 			num_races, choices, (Widget **)0,
 			ps_select, &player_form);
 
@@ -431,11 +461,20 @@
 	    flags.initgend = availindex;
 	    free((genericptr_t)choices), choices = 0;
 	} else {
+#if 0 /*JP*/
 	    Sprintf(qbuf, "Your %s gender?", s_suffix(plbuf));
+#else
+	    Sprintf(qbuf, "%s性別を選んでください．", s_suffix(plbuf));
+#endif
 	    popup = make_menu("gender_selection", qbuf,
 			gend_select_translations,
+#if 0 /*JP*/
 			"quit", ps_quit,
 			"random", ps_random,
+#else
+			"選択せずにゲーム終了", ps_quit,
+			"ランダム", ps_random,
+#endif
 			num_gends, choices, (Widget **)0,
 			ps_select, &player_form);
 
@@ -495,11 +534,20 @@
 	    flags.initalign = availindex;
 	    free((genericptr_t)choices), choices = 0;
 	} else {
+#if 0 /*JP*/
 	    Sprintf(qbuf, "Your %s alignment?", s_suffix(plbuf));
+#else
+	    Sprintf(qbuf, "%s属性を選択してください．", s_suffix(plbuf));
+#endif
 	    popup = make_menu("alignment_selection", qbuf,
 			algn_select_translations,
+#if 0 /*JP*/
 			"quit", ps_quit,
 			"random", ps_random,
+#else
+			"選択せずにゲーム終了", ps_quit,
+			"ランダム", ps_random,
+#endif
 			num_algns, choices, (Widget **)0,
 			ps_select, &player_form);
 
@@ -730,10 +778,19 @@
 	command_list[i] = extcmdlist[i].ef_txt;
 
     extended_command_popup = make_menu("extended_commands",
+#if 0 /*JP*/
 				"Extended Commands",
+#else
+				"拡張コマンド",
+#endif
 				extended_command_translations,
+#if 0 /*JP*/
 				"dismiss", extend_dismiss,
 				"help", extend_help,
+#else
+				"取消", extend_dismiss,
+				"へルプ", extend_help,
+#endif
 				num_commands, command_list, &extended_commands,
 				extend_select, &extended_command_form);
 
@@ -817,6 +874,9 @@
      * Create the label.
      */
     num_args = 0;
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     XtSetArg(args[num_args], XtNborderWidth, 0);	num_args++;
     label = XtCreateManagedWidget(popup_label,
 				labelWidgetClass,
@@ -832,6 +892,9 @@
     XtSetArg(args[num_args], XtNshapeStyle,
 				XmuShapeRoundedRectangle);	num_args++;
 */
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     left = XtCreateManagedWidget(left_name,
 		    commandWidgetClass,
 		    form,
@@ -850,6 +913,9 @@
     XtSetArg(args[num_args], XtNshapeStyle,
 				XmuShapeRoundedRectangle);	num_args++;
 */
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     right = XtCreateManagedWidget(right_name,
 		    commandWidgetClass,
 		    form,
@@ -871,6 +937,9 @@
 	    XtSetArg(args[num_args], XtNvertDistance, skip);	num_args++;
 	}
 
+#if defined(X11R6) && defined(XI18N)
+	    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 	*curr = XtCreateManagedWidget(widget_names[i],
 		    commandWidgetClass,
 		    form,
diff -aurN slashem-0.0.7E6F2/win/X11/winstat.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winstat.c
--- slashem-0.0.7E6F2/win/X11/winstat.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winstat.c	2004-06-10 08:55:22.000000000 +0900
@@ -10,6 +10,13 @@
  * Currently, only one status window (of any type) is _ever_ made.
  */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 1994-1999
+**	changing point is marked `JP' (94/6/7) or XI18N (96/7/19)
+**	For 3.4.0, Copyright (c) Kentaro Shirakata, 2002
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #ifndef SYSV
 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
 #endif
@@ -47,10 +54,16 @@
     boolean create_popup;
     Widget parent;
 {
+#if 0 /*JP*/
     XFontStruct *fs;
+#endif
     Arg args[8];
     Cardinal num_args;
     Position top_margin, bottom_margin, left_margin, right_margin;
+#ifdef XI18N
+    XFontSet fontset;
+    XFontSetExtents *extent;
+#endif
 
     wp->type = NHW_STATUS;
 
@@ -90,6 +103,10 @@
     XtSetArg(args[num_args], XtNscrollVertical,
 				    XawtextScrollWhenNeeded);	num_args++;
 
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     wp->w = XtCreateManagedWidget(
 		"status",		/* name */
 		asciiTextWidgetClass,
@@ -104,16 +121,28 @@
 
     /* Get the font and margin information. */
     num_args = 0;
+#ifndef XI18N
     XtSetArg(args[num_args], XtNfont,	      &fs);	       num_args++;
+#else
+    XtSetArg(args[num_args], XtNfontSet,      &fontset);       num_args++;
+#endif
     XtSetArg(args[num_args], XtNtopMargin,    &top_margin);    num_args++;
     XtSetArg(args[num_args], XtNbottomMargin, &bottom_margin); num_args++;
     XtSetArg(args[num_args], XtNleftMargin,   &left_margin);   num_args++;
     XtSetArg(args[num_args], XtNrightMargin,  &right_margin);  num_args++;
     XtGetValues(wp->w, args, num_args);
 
+#ifndef XI18N
     wp->pixel_height = 2 * nhFontHeight(wp->w) + top_margin + bottom_margin;
     wp->pixel_width  = COLNO * fs->max_bounds.width +
 						left_margin + right_margin;
+#else
+    extent = XExtentsOfFontSet(fontset);
+    wp->pixel_height = 2 * extent->max_logical_extent.height +
+						top_margin + bottom_margin;
+    wp->pixel_width  = COLNO/2 * extent->max_logical_extent.width +
+						left_margin + right_margin;
+#endif
 
     /* Set the new width and height. */
     num_args = 0;
@@ -247,6 +276,7 @@
  * + Blank value is 0 and should never change.
  */
 static struct X_status_value shown_stats[NUM_STATS] = {
+#if 0 /*JP*/
     { "Strength",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },	/* 0*/
     { "Dexterity",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
     { "Constitution",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
@@ -277,6 +307,36 @@
     { "Stunned",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },	/*25*/
     { "Hallucinating",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },
     { "",		SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE }, /*encumbr*/
+#else /*JP*/
+    { "強さ",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },	/* 0*/
+    { "素早さ",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "耐久力",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "知力",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "賢さ",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "魅力",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },	/* 5*/
+
+    { "",		SV_LABEL, (Widget) 0, -1, 0, FALSE, FALSE }, /* name */
+    { "",		SV_LABEL, (Widget) 0, -1, 0, FALSE, FALSE }, /* dlvl */
+    { "金",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "体力",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "最大体力",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },	/*10*/
+    { "魔力",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "最大魔力",	SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "鎧",		SV_VALUE, (Widget) 0,256, 0, FALSE, FALSE },
+    { "レベル",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "経験",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },	/*15*/
+    { "属性",		SV_VALUE, (Widget) 0, -2, 0, FALSE, FALSE },
+    { "時間",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+    { "スコア",		SV_VALUE, (Widget) 0, -1, 0, FALSE, FALSE },
+
+    { "",		SV_NAME,  (Widget) 0, -1, 0, FALSE, TRUE }, /* hunger*/
+    { "　混乱　",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },	/*20*/
+    { "　病気　",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },
+    { "　盲目　",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },
+    { "  眩暈  ",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },
+    { "　幻覚　",	SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE },
+    { "",		SV_NAME,  (Widget) 0,  0, 0, FALSE, TRUE }, /*encumbr*/
+#endif /*JP*/
 };
 
 
@@ -392,11 +452,17 @@
 	    buf[0] = 0;
 	    if (Sick) {
 		if (u.usick_type & SICK_VOMITABLE)
+/*JP
 		    Strcat(buf, "FoodPois");
+*/
+		    Strcat(buf, "食毒");
 		if (u.usick_type & SICK_NONVOMITABLE) {
 		    if (u.usick_type & SICK_VOMITABLE)
 			Strcat(buf, " ");
+/*JP
 		    Strcat(buf, "Ill");
+*/
+		    Strcat(buf, "病気");
 		}
 	    }
 	    XtSetArg(args[0], XtNlabel, buf);
@@ -571,9 +637,15 @@
 	    }
 	} else if (attr_rec == &shown_stats[F_ALIGN]) {
 
+#if 0 /*JP*/
 	    Strcpy(buf, (new_value == A_CHAOTIC) ? "Chaotic" :
 			(new_value == A_NEUTRAL) ? "Neutral" :
 						   "Lawful"  );
+#else
+	    Strcpy(buf, (new_value == A_CHAOTIC) ? "混沌" :
+			(new_value == A_NEUTRAL) ? "中立" :
+						   "秩序"  );
+#endif
 	} else {
 	    Sprintf(buf, "%ld", new_value);
 	}
@@ -798,6 +870,10 @@
 	    num_args = 0;
 	    XtSetArg(args[num_args], XtNborderWidth, 0);	num_args++;
 	    XtSetArg(args[num_args], XtNinternalHeight, 0);	num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+	    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 	    sv->w = XtCreateManagedWidget(
 				sv_index == F_NAME ? "name" : "dlevel",
 				labelWidgetClass,
@@ -808,6 +884,10 @@
 	    num_args = 0;
 	    XtSetArg(args[num_args], XtNborderWidth, 0);	num_args++;
 	    XtSetArg(args[num_args], XtNinternalHeight, 0);	num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+	    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 	    sv->w = XtCreateManagedWidget(sv->name,
 					labelWidgetClass,
 					parent,
diff -aurN slashem-0.0.7E6F2/win/X11/wintext.c jslashem-0.0.7E6F2-J0.0.8/win/X11/wintext.c
--- slashem-0.0.7E6F2/win/X11/wintext.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/wintext.c	2004-06-30 22:58:12.000000000 +0900
@@ -8,6 +8,13 @@
  *	+ No global functions.
  */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 1994-1999
+**	changing point is marked `JP' (94/6/7) or XI18N (96/7/19)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #ifndef SYSV
 #define PRESERVE_NO_SYSV	/* X11 include files may define SYSV */
 #endif
@@ -36,6 +43,9 @@
 #include <X11/xpm.h>
 #endif
 
+#ifdef	INSTALLCOLORMAP
+extern Colormap     cmap;
+#endif
 
 #define TRANSIENT_TEXT	/* text window is a transient window (no positioning) */
 
@@ -143,7 +153,11 @@
     append_text_buffer(&text_info->text, str, FALSE);
 
     /* Calculate text width and save longest line */
+#ifndef XI18N
     width = XTextWidth(text_info->fs, str, (int) strlen(str));
+#else
+    width = XmbTextEscapement(text_info->fontset, str, (int) strlen(str));
+#endif
     if (width > text_info->max_width)
 	text_info->max_width = width;
 }
@@ -158,6 +172,10 @@
     Cardinal num_args;
     Dimension width, height, font_height;
     int nlines;
+/*JP*/
+#ifdef XI18N
+    XFontSetExtents *extent;
+#endif
 
     text_info = wp->text_information;
     width  = text_info->max_width + text_info->extra_width;
@@ -165,6 +183,11 @@
     text_info->destroy_on_ack = FALSE;
     font_height = nhFontHeight(wp->w);
 
+/*JP*/
+#ifdef XI18N
+    extent = XExtentsOfFontSet(text_info->fontset);
+#endif
+
     /*
      * Calculate the number of lines to use.  First, find the number of
      * lines that would fit on the screen.  Next, remove four of these
@@ -173,14 +196,26 @@
      * _some_ lines.  Finally, use the number of lines in the text if
      * there are fewer than the max.
      */
+/*JP*/
+#ifndef XI18N
     nlines = (XtScreen(wp->w)->height - text_info->extra_height) / font_height;
+#else
+    nlines = (XtScreen(wp->w)->height - text_info->extra_height) /
+			extent->max_logical_extent.height;
+#endif
     nlines -= 4;
 
     if (nlines > text_info->text.num_lines)
 	nlines = text_info->text.num_lines;
     if (nlines <= 0) nlines = 1;
 
+/*JP*/
+#ifndef XI18N
     height = nlines * font_height + text_info->extra_height;
+#else
+    height = (nlines * extent->max_logical_extent.height)
+						    + text_info->extra_height;
+#endif
 
     num_args = 0;
 
@@ -290,6 +325,10 @@
     XtSetArg(args[num_args], XtNresize, XawtextResizeBoth);	num_args++;
     XtSetArg(args[num_args], XtNtranslations,
 		XtParseTranslationTable(text_translations));	num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
 
     wp->w = XtCreateManagedWidget(
 		killer && WIN_MAP == WIN_ERR ?
@@ -301,7 +340,11 @@
 
     /* Get the font and margin information. */
     num_args = 0;
+#ifndef XI18N
     XtSetArg(args[num_args], XtNfont,	      &text_info->fs); num_args++;
+#else
+    XtSetArg(args[num_args], XtNfontSet,	      &text_info->fontset); num_args++;
+#endif
     XtSetArg(args[num_args], XtNtopMargin,    &top_margin);    num_args++;
     XtSetArg(args[num_args], XtNbottomMargin, &bottom_margin); num_args++;
     XtSetArg(args[num_args], XtNleftMargin,   &left_margin);   num_args++;
@@ -310,6 +353,11 @@
 
     text_info->extra_width  = left_margin + right_margin;
     text_info->extra_height = top_margin + bottom_margin;
+
+#if 1 /*JP*/
+    /* Send events to "text" which is where the translations are. */
+    XtSetKeyboardFocus (form, wp->w);
+#endif
 }
 
 void
@@ -457,7 +505,11 @@
 extern const char *killed_by_prefix[];
 
 void
+#ifndef XI18N
 calculate_rip_text(int how)
+#else
+calculate_rip_text(int how, XFontSet fontset)
+#endif
 {
 	/* Follows same algorithm as genl_outrip() */
 
@@ -479,28 +531,79 @@
 	switch (killer_format) {
 		default: impossible("bad killer format?");
 		case KILLED_BY_AN:
+#if 0 /*JP*/
 			Strcpy(buf, killed_by_prefix[how]);
 			Strcat(buf, an(killer));
+#else
+			Strcpy(buf, an(killer));
+			Strcat(buf, killed_by_prefix[how]);
+#endif
 			break;
 		case KILLED_BY:
+#if 0 /*JP*/
 			Strcpy(buf, killed_by_prefix[how]);
 			Strcat(buf, killer);
+#else
+			Strcpy(buf, killer);
+			Strcat(buf, killed_by_prefix[how]);
+#endif
 			break;
 		case NO_KILLER_PREFIX:
 			Strcpy(buf, killer);
 			break;
+#if 1 /*JP*/
+		case KILLED_SUFFIX:
+			Strcpy(buf, killer);
+			Strcat(buf, "殺された");
+			break;
+#endif
 	}
 
 	/* Put death type on stone */
 	for (line=DEATH_LINE, dpx = buf; line<YEAR_LINE; line++) {
 		register int i,i0;
 		char tmpchar;
+#if 1 /*JP*/
+		unsigned char *uc;
+		int jstone_line;
+
+		if ((i0=strlen(dpx))<= STONE_LINE_LEN)
+		  jstone_line = STONE_LINE_LEN;
+		else if (i0/2 <= STONE_LINE_LEN )
+		  jstone_line = ((i0+3)/4)*2;
+		else if (i0/3 <= STONE_LINE_LEN )
+		  jstone_line = ((i0+5)/6)*2;
+		else
+		  jstone_line = ((i0+7)/8)*2;
+#endif
 
+#if 0 /*JP*/
 		if ( (i0=strlen(dpx)) > STONE_LINE_LEN) {
 			for(i = STONE_LINE_LEN;
 			    ((i0 > STONE_LINE_LEN) && i); i--)
+#else
+		if ( i0 > jstone_line) {
+				for(i = jstone_line;
+				    ((i0 > jstone_line) && i); i--)
+#endif
 				if(dpx[i] == ' ') i0 = i;
+#if 0 /*JP*/
 			if(!i) i0 = STONE_LINE_LEN;
+#else
+				if(!i){
+				  i0=0;
+/*
+				  while(i0<STONE_LINE_LEN){
+*/
+				  while(i0<jstone_line){
+				    uc = (unsigned char *)(dpx+i0);
+				    if(*uc <128)
+				      ++i0;
+				    else
+				      i0+=2;
+				  }
+				}
+#endif
 		}
 		tmpchar = dpx[i0];
 		dpx[i0] = 0;
@@ -569,10 +672,18 @@
     y=appResources.tombtext_y;
     for (i=0; i<=YEAR_LINE; i++) {
 	int len=strlen(rip_line[i]);
+#ifndef XI18N
 	XFontStruct* font=WindowFontStruct(w);
 	int width=XTextWidth(font, rip_line[i], len);
 	XDrawString(dpy, XtWindow(w), gc,
 		x-width/2, y, rip_line[i], len);
+#else
+	XFontSet fontset = WindowFontSet(w);
+/*	XFontSetExtents *extent = XExtentsOfFontSet(fontset);*/
+	int width = XmbTextEscapement(fontset, rip_line[i], len);
+	XmbDrawString(dpy, XtWindow(w), fontset, gc,
+		x-width/2, y, rip_line[i], len);
+#endif
 	x+=appResources.tombtext_dx;
 	y+=appResources.tombtext_dy;
     }
@@ -597,7 +708,12 @@
 	int errorcode;
 	char *rip_file;
 
+#if 0 /*JP*/
 	attributes.valuemask = XpmCloseness;
+#else
+	attributes.valuemask = XpmCloseness | XpmColormap;
+#endif
+	attributes.colormap = cmap;
 	attributes.closeness = 65535; /* Try anything */
 
 #ifndef FILE_AREAS
diff -aurN slashem-0.0.7E6F2/win/X11/winval.c jslashem-0.0.7E6F2-J0.0.8/win/X11/winval.c
--- slashem-0.0.7E6F2/win/X11/winval.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/X11/winval.c	2004-06-10 08:55:22.000000000 +0900
@@ -26,6 +26,10 @@
 #endif
 
 #include "hack.h"	/* #define for const for non __STDC__ compilers */
+/*JP*/
+#ifdef XAW_I18N
+#include <X11/Xaw/Xawi18n.h>
+#endif
 #include "winX.h"
 
 #define WNAME "name"
@@ -52,6 +56,10 @@
     XtSetArg(args[num_args], XtNjustify, XtJustifyRight);	num_args++;
     XtSetArg(args[num_args], XtNborderWidth, 0);		num_args++;
     XtSetArg(args[num_args], XtNlabel, name_value);		num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     XtSetArg(args[num_args], XtNinternalHeight, 0);		num_args++;
     name = XtCreateManagedWidget(WNAME,
 				labelWidgetClass,
@@ -61,6 +69,10 @@
     XtSetArg(args[num_args], XtNjustify, XtJustifyRight);	num_args++;
     XtSetArg(args[num_args], XtNborderWidth, 0);		num_args++;
     XtSetArg(args[num_args], XtNfromHoriz, name);		num_args++;
+/*JP*/
+#if defined(X11R6) && defined(XI18N)
+    XtSetArg(args[num_args], XtNinternational, True);	num_args++;
+#endif
     XtSetArg(args[num_args], XtNinternalHeight, 0);		num_args++;
     (void) XtCreateManagedWidget(WVALUE,
 				labelWidgetClass,
diff -aurN slashem-0.0.7E6F2/win/tty/getline.c jslashem-0.0.7E6F2-J0.0.8/win/tty/getline.c
--- slashem-0.0.7E6F2/win/tty/getline.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/tty/getline.c	2004-06-23 08:51:14.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef TTY_GRAPHICS
@@ -42,15 +49,25 @@
 }
 
 STATIC_OVL void
-hooked_tty_getlin(query, bufp, hook)
+hooked_tty_getlin(query, bfp, hook)
 const char *query;
-register char *bufp;
+register char *bfp;
 getlin_hook_proc hook;
 {
+#if 1 /*JP*/
+	char tmp[BUFSZ];
+	char *bufp = tmp;
+#endif
 	register char *obufp = bufp;
+/*JP
 	register int c;
+*/
+	int c;
 	struct WinDesc *cw = wins[WIN_MESSAGE];
 	boolean doprev = 0;
+#if 1 /*JP*/
+	unsigned int uc;
+#endif
 
 	if(ttyDisplay->toplin == 1 && !(cw->flags & WIN_STOP)) more();
 	cw->flags &= ~WIN_STOP;
@@ -68,6 +85,10 @@
 #endif /* not NEWAUTOCOMP */
 			break;
 		}
+#if 1 /*JP*/
+		uc = (*((unsigned int *)&c));
+		uc &= 0377;
+#endif
 		if(c == '\033') {
 			*obufp = c;
 			obufp[1] = 0;
@@ -106,6 +127,9 @@
 		    addtopl(obufp);
 		}
 		if(c == erase_char || c == '\b') {
+#if 1 /*JP*/
+		moreback:
+#endif
 			if(bufp != obufp) {
 #ifdef NEWAUTOCOMP
 				char *i;
@@ -121,6 +145,10 @@
 				*bufp = 0;
 #endif /* NEWAUTOCOMP */
 			} else	tty_nhbell();
+#if 1 /*JP*/
+			if(is_kanji2(tmp, bufp-tmp))
+			  goto moreback;
+#endif
 #if defined(apollo)
 		} else if(c == '\n' || c == '\r') {
 #else
@@ -130,7 +158,11 @@
 			*bufp = 0;
 #endif /* not NEWAUTOCOMP */
 			break;
+#if 0 /*JP*/
 		} else if(' ' <= (unsigned char) c && c != '\177' &&
+#else
+		} else if(' ' <= uc && uc < '\377' &&
+#endif
 			    (bufp-obufp < BUFSZ-1 && bufp-obufp < COLNO)) {
 				/* avoid isprint() - some people don't have it
 				   ' ' is not always a printing char */
@@ -140,10 +172,18 @@
 #endif /* NEWAUTOCOMP */
 			*bufp = c;
 			bufp[1] = 0;
+#if 0 /*JP*/
 			putsyms(bufp);
+#else
+			raw_putsyms(bufp);
+#endif
 			bufp++;
 			if (hook && (*hook)(obufp)) {
+#if 0 /*JP*/
 			    putsyms(bufp);
+#else
+			    raw_putsyms(bufp);
+#endif
 #ifndef NEWAUTOCOMP
 			    bufp = eos(bufp);
 #else /* NEWAUTOCOMP */
@@ -175,6 +215,9 @@
 	ttyDisplay->toplin = 2;		/* nonempty, no --More-- required */
 	ttyDisplay->inread--;
 	clear_nhwindow(WIN_MESSAGE);	/* clean up after ourselves */
+#if 1 /*JP*/
+	Strcpy(bfp, str2ic(tmp));
+#endif
 }
 
 void
@@ -270,7 +313,10 @@
 #endif
 
 	if (extcmdlist[i].ef_txt == (char *)0) {
+/*JP
 		pline("%s: unknown extended command.", buf);
+*/
+		pline("%s:拡張コマンドエラー", buf);
 		i = -1;
 	}
 
diff -aurN slashem-0.0.7E6F2/win/tty/termcap.c jslashem-0.0.7E6F2-J0.0.8/win/tty/termcap.c
--- slashem-0.0.7E6F2/win/tty/termcap.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/tty/termcap.c	2004-06-23 08:51:16.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #if defined (TTY_GRAPHICS) && !defined(NO_TERMS)
@@ -61,6 +68,7 @@
 STATIC_VAR char tbuf[512];
 #endif
 
+#ifdef OVLB
 #ifdef TEXTCOLOR
 # ifdef TOS
 const char *hilites[CLR_MAX];	/* terminal escapes for the various colors */
@@ -68,6 +76,7 @@
 char NEARDATA *hilites[CLR_MAX]; /* terminal escapes for the various colors */
 # endif
 #endif
+#endif
 
 #ifdef OVLB
 static char *KS = (char *)0, *KE = (char *)0;	/* keypad sequences */
@@ -563,7 +572,11 @@
 char c;
 #endif
 {
+#if 0 /*JP*/
 	(void) putchar(c);
+#else
+	(void) cputchar(c);
+#endif
 }
 
 void
@@ -571,6 +584,9 @@
 const char *s;
 {
 # ifndef TERMLIB
+#if 1 /*JP*/
+	(void) jputchar('\0');
+#endif
 	(void) fputs(s, stdout);
 # else
 #  if defined(NHSTDC) || defined(ULTRIX_PROTO)
@@ -688,7 +704,11 @@
 tty_nhbell()
 {
 	if (flags.silent) return;
+#if 0 /*JP*/
 	(void) putchar('\007');		/* curx does not change */
+#else
+	(void) cputchar('\007');		/* curx does not change */
+#endif
 	(void) fflush(stdout);
 }
 
@@ -739,10 +759,17 @@
 #endif
 #if defined(MICRO)
 	/* simulate the delay with "cursor here" */
+#if 1 /*JP*/
+	{
+	register int i;
+#endif
 	for (i = 0; i < 3; i++) {
 		cmov(ttyDisplay->curx, ttyDisplay->cury);
 		(void) fflush(stdout);
 	}
+#if 1 /*JP*/
+	}
+#endif
 #else /* MICRO */
 	/* BUG: if the padding character is visible, as it is on the 5620
 	   then this looks terrible. */
diff -aurN slashem-0.0.7E6F2/win/tty/topl.c jslashem-0.0.7E6F2-J0.0.8/win/tty/topl.c
--- slashem-0.0.7E6F2/win/tty/topl.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/tty/topl.c	2004-06-23 08:51:20.000000000 +0900
@@ -2,6 +2,13 @@
 /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
 /* NetHack may be freely redistributed.  See license for details. */
 
+/*
+**	Japanese version Copyright (C) Issei Numata, 2000
+**	For 3.4, Kentaro Shirakata, 2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
 #include "hack.h"
 
 #ifdef TTY_GRAPHICS
@@ -178,12 +185,14 @@
 {
 	int otoplin = ttyDisplay->toplin;
 	home();
+#if 0 /*JP*/
 	if(*str & 0x80) {
 		/* kludge for the / command, the only time we ever want a */
 		/* graphics character on the top line */
 		g_putch((int)*str++);
 		ttyDisplay->curx++;
 	}
+#endif
 	end_glyphout();	/* in case message printed during graphics output */
 	putsyms(str);
 	cl_end();
@@ -275,12 +284,37 @@
     ttyDisplay->toplin = 0;
     ttyDisplay->inmore = 0;
 }
+#if 1 /*JP*/
+static char *
+folding_japanese( str, pos )
+     char *str;
+     int pos;
+{
+  char ss[1024],s1[1024],s2[1024];
+  static char newstr[1024];		/* may be enough */
+
+  newstr[0] = '\0';
+  Strcpy(ss, str);
+  while(1){
+    split_japanese(ss, s1, s2, pos);
+    Strcat(newstr, s1);
+    if(!*s2)
+      break;
+    Strcat(newstr, "\n");
+    Strcpy(ss,s2);
+  }
+
+  return newstr;
+}
+#endif
 
 void
 update_topl(bp)
 	register const char *bp;
 {
+#if 0 /*JP*/
 	register char *tl, *otl;
+#endif
 	register int n0;
 	int notdied = 1;
 	struct WinDesc *cw = wins[WIN_MESSAGE];
@@ -306,6 +340,12 @@
 	    }
 	}
 	remember_topl();
+#if 1 /*JP*/
+	if( n0<CO )
+	  Strcpy(toplines, bp);
+	else
+	  Strcpy(toplines,folding_japanese(bp, CO-2));
+#else
 	(void) strncpy(toplines, bp, TBUFSZ);
 	toplines[TBUFSZ - 1] = 0;
 
@@ -320,6 +360,7 @@
 	    *tl++ = '\n';
 	    n0 = strlen(tl);
 	}
+#endif
 	if(!notdied) cw->flags &= ~WIN_STOP;
         if(!(cw->flags & WIN_STOP)) redotoplin(toplines);
 }
@@ -330,6 +371,12 @@
     char c;
 {
     register struct WinDesc *cw = wins[WIN_MESSAGE];
+#if 0 /*JP*/
+    static int kmode;
+#endif
+#if 1 /*JP*/
+    unsigned char uc = *((unsigned char *)(&c));
+#endif
 
     if(cw == (struct WinDesc *) 0) panic("Putsym window MESSAGE nonexistant");
 	
@@ -343,26 +390,42 @@
 	return;
     case '\n':
 	cl_end();
+#if 1 /*JP*/
+	(void) jputchar('\r'); /* raw mode で必要? */
+	(void) jputchar('\n');
+#endif
 	ttyDisplay->curx = 0;
 	ttyDisplay->cury++;
 	cw->cury = ttyDisplay->cury;
+#if 0 /*JP*/
 #ifdef WIN32CON
     (void) putchar(c);
 #endif
+#endif
 	break;
     default:
 	if(ttyDisplay->curx == CO-1)
 	    topl_putsym('\n'); /* 1 <= curx <= CO; avoid CO */
+#if 0 /*JP*/
 #ifdef WIN32CON
     (void) putchar(c);
 #endif
+#endif
+#if 1 /*JP*/
+	cw->curx = ttyDisplay->curx;
+	if(cw->curx == 0) cl_end();
+	(void) jputchar((unsigned char)uc);
+	cw->curx++;
 	ttyDisplay->curx++;
+#endif
     }
+#if 0 /*JP*/
     cw->curx = ttyDisplay->curx;
     if(cw->curx == 0) cl_end();
 #ifndef WIN32CON
     (void) putchar(c);
 #endif
+#endif
 }
 
 void
@@ -373,6 +436,61 @@
 	topl_putsym(*str++);
 }
 
+/* JP
+** do not translate kcode this function(see topl_putsym)
+*/
+STATIC_OVL
+void
+raw_topl_putsym(c)
+    char c;
+{
+    register struct WinDesc *cw = wins[WIN_MESSAGE];
+
+    if(cw == (struct WinDesc *) 0) panic("Putsym window MESSAGE nonexistant");
+	
+    switch(c) {
+    case '\b':
+	if(ttyDisplay->curx == 0 && ttyDisplay->cury > 0)
+	    tty_curs(BASE_WINDOW, CO, (int)ttyDisplay->cury-1);
+	backsp();
+	ttyDisplay->curx--;
+	cw->curx = ttyDisplay->curx;
+	return;
+    case '\n':
+	cl_end();
+#if 1 /*JP*/
+	(void) cputchar('\r'); /* raw mode で必要? */
+	(void) cputchar('\n');
+#endif
+	ttyDisplay->curx = 0;
+	ttyDisplay->cury++;
+	cw->cury = ttyDisplay->cury;
+	break;
+    default:
+	if(ttyDisplay->curx == CO-1)
+	    topl_putsym('\n'); /* 1 <= curx <= CO; avoid CO */
+#if 0 /*JP*/
+	ttyDisplay->curx++;
+#else
+    cw->curx = ttyDisplay->curx;
+    if(cw->curx == 0) cl_end();
+	(void) cputchar(c);
+	++cw->curx;
+	++ttyDisplay->curx;
+#endif
+    }
+}
+/* JP
+** do not translate kcode this function(see putsym)
+*/
+void
+raw_putsyms(str)
+    const char *str;
+{
+    while(*str)
+	raw_topl_putsym(*str++);
+}
+
 STATIC_OVL void
 removetopl(n)
 register int n;
diff -aurN slashem-0.0.7E6F2/win/tty/wintty.c jslashem-0.0.7E6F2-J0.0.8/win/tty/wintty.c
--- slashem-0.0.7E6F2/win/tty/wintty.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/tty/wintty.c	2004-07-10 16:09:04.000000000 +0900
@@ -3,6 +3,13 @@
 /* NetHack may be freely redistributed.  See license for details. */
 
 /*
+**	Japanese version (by Issei Numata)
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2002-2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+/*
  * Neither a standard out nor character-based control codes should be
  * part of the "tty look" windowing implementation.
  * h+ 930227
@@ -321,6 +328,15 @@
     tty_putstr(BASE_WINDOW, 0, COPYRIGHT_BANNER_B);
     tty_putstr(BASE_WINDOW, 0, COPYRIGHT_BANNER_C);
     tty_putstr(BASE_WINDOW, 0, "");
+#if 1 /*JP*/
+    tty_putstr(BASE_WINDOW, 0, JA_COPYRIGHT_BANNER_A);
+    tty_putstr(BASE_WINDOW, 0, JA_COPYRIGHT_BANNER_B);
+    tty_putstr(BASE_WINDOW, 0, JA_COPYRIGHT_BANNER_C);
+    tty_putstr(BASE_WINDOW, 0, JA_COPYRIGHT_BANNER_D);
+    tty_putstr(BASE_WINDOW, 0, JA_COPYRIGHT_BANNER_E);
+    tty_putstr(BASE_WINDOW, 0, JA_COPYRIGHT_BANNER_F);
+    tty_putstr(BASE_WINDOW, 0, "");
+#endif
     tty_display_nhwindow(BASE_WINDOW, FALSE);
 }
 
@@ -451,7 +467,11 @@
 			/* Permit the user to pick, if there is more than one */
 			if (n > 1) {
 				tty_clear_nhwindow(BASE_WINDOW);
+#if 0 /*JP*/
 				tty_putstr(BASE_WINDOW, 0, "Choosing Gender");
+#else
+				tty_putstr(BASE_WINDOW, 0, "性別選択");
+#endif
 				win = create_nhwindow(NHW_MENU);
 				start_menu(win);
 				any.a_void = 0;         /* zero out all bits */
@@ -460,18 +480,31 @@
 										flags.initalign)) {
 						any.a_int = i+1;
 						add_menu(win, NO_GLYPH, &any, genders[i].adj[0],
+#if 0 /*JP*/
 						0, ATR_NONE, genders[i].adj, MENU_UNSELECTED);
+#else
+						0, ATR_NONE, genders[i].j, MENU_UNSELECTED);
+#endif
 					}
 				any.a_int = pick_gend(flags.initrole, flags.initrace,
 							flags.initalign, PICK_RANDOM)+1;
 				if (any.a_int == 0)	/* must be non-zero */
 					any.a_int = randgend(flags.initrole, flags.initrace)+1;
 				add_menu(win, NO_GLYPH, &any , '*', 0, ATR_NONE,
+#if 0 /*JP*/
 						"Random", MENU_UNSELECTED);
+#else
+						"適当", MENU_UNSELECTED);
+#endif
 				any.a_int = i+1;	/* must be non-zero */
 				add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
+#if 0 /*JP*/
 						"Quit", MENU_UNSELECTED);
 				Sprintf(pbuf, "Pick the gender of your %s", plbuf);
+#else
+						"中断", MENU_UNSELECTED);
+				Sprintf(pbuf, "%s性別を選んでください", plbuf);
+#endif
 				end_menu(win, pbuf);
 				n = select_menu(win, PICK_ONE, &selected);
 				destroy_nhwindow(win);
@@ -522,7 +555,11 @@
 			/* Permit the user to pick, if there is more than one */
 			if (n > 1) {
 				tty_clear_nhwindow(BASE_WINDOW);
+#if 0 /*JP*/
 				tty_putstr(BASE_WINDOW, 0, "Choosing Alignment");
+#else
+		    		tty_putstr(BASE_WINDOW, 0, "属性選択");
+#endif
 				win = create_nhwindow(NHW_MENU);
 				start_menu(win);
 				any.a_void = 0;         /* zero out all bits */
@@ -531,18 +568,31 @@
 									flags.initgend, i)) {
 						any.a_int = i+1;
 						add_menu(win, NO_GLYPH, &any, aligns[i].adj[0],
+#if 0 /*JP*/
 						 0, ATR_NONE, aligns[i].adj, MENU_UNSELECTED);
+#else
+						 0, ATR_NONE, aligns[i].j, MENU_UNSELECTED);
+#endif
 					}
 				any.a_int = pick_align(flags.initrole, flags.initrace,
 							flags.initgend, PICK_RANDOM)+1;
 				if (any.a_int == 0)	/* must be non-zero */
 					any.a_int = randalign(flags.initrole, flags.initrace)+1;
 				add_menu(win, NO_GLYPH, &any , '*', 0, ATR_NONE,
+#if 0 /*JP*/
 						"Random", MENU_UNSELECTED);
+#else
+						"適当", MENU_UNSELECTED);
+#endif
 				any.a_int = i+1;	/* must be non-zero */
 				add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
+#if 0 /*JP*/
 						"Quit", MENU_UNSELECTED);
 				Sprintf(pbuf, "Pick the alignment of your %s", plbuf);
+#else
+						"中断", MENU_UNSELECTED);
+				Sprintf(pbuf, "%s属性を選んでください", plbuf);
+#endif
 				end_menu(win, pbuf);
 				n = select_menu(win, PICK_ONE, &selected);
 				destroy_nhwindow(win);
@@ -572,7 +622,11 @@
 	menu_item *selected = 0;
 
    	tty_clear_nhwindow(BASE_WINDOW);
+#if 0 /*JP*/
 	tty_putstr(BASE_WINDOW, 0, "Choosing Character's Role");
+#else
+	tty_putstr(BASE_WINDOW, 0, "職業選択");
+#endif
 
 	/* Prompt for a role */
 	win = create_nhwindow(NHW_MENU);
@@ -596,9 +650,14 @@
 				Strcat(rolenamebuf, roles[i].name.f);
 			} else 
 				Strcpy(rolenamebuf, roles[i].name.m);
-		}	
+		}
+#if 0 /*JP*/
 		add_menu(win, NO_GLYPH, &any, thisch,
 			    0, ATR_NONE, an(rolenamebuf), MENU_UNSELECTED);
+#else
+		add_menu(win, NO_GLYPH, &any, thisch,
+			    0, ATR_NONE, jtrns_mon(roles[i].name.m), MENU_UNSELECTED);
+#endif
 		lastch = thisch;
 	    }
 	}
@@ -607,11 +666,20 @@
 	if (any.a_int == 0)	/* must be non-zero */
 	    any.a_int = randrole()+1;
 	add_menu(win, NO_GLYPH, &any , '*', 0, ATR_NONE,
+#if 0 /*JP*/
 			"Random", MENU_UNSELECTED);
+#else
+			"適当", MENU_UNSELECTED);
+#endif
 	any.a_int = i+1;	/* must be non-zero */
 	add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
+#if 0 /*JP*/
 			"Quit", MENU_UNSELECTED);
 	Sprintf(pbuf, "Pick a role for your %s", plbuf);
+#else
+			"中断", MENU_UNSELECTED);
+	Sprintf(pbuf, "%s職業を選択してください．", plbuf);
+#endif
 	end_menu(win, pbuf);
 	n = select_menu(win, PICK_ONE, &selected);
 	destroy_nhwindow(win);
@@ -660,7 +728,11 @@
 	/* Permit the user to pick, if there is more than one */
 	if (n > 1) {
 	    tty_clear_nhwindow(BASE_WINDOW);
+#if 0 /*JP*/
 	    tty_putstr(BASE_WINDOW, 0, "Choosing Race");
+#else
+	    tty_putstr(BASE_WINDOW, 0, "種族選択");
+#endif
 	    win = create_nhwindow(NHW_MENU);
 	    start_menu(win);
 	    any.a_void = 0;         /* zero out all bits */
@@ -670,8 +742,13 @@
 		    any.a_int = i+1;	/* must be non-zero */
 		    thisch = lowc(races[i].noun[0]);
 		    if (thisch == lastch) thisch = highc(thisch);
+#if 0 /*JP*/
 		    add_menu(win, NO_GLYPH, &any, thisch,
 			0, ATR_NONE, races[i].noun, MENU_UNSELECTED);
+#else
+		    add_menu(win, NO_GLYPH, &any, thisch,
+			0, ATR_NONE, jtrns_mon(races[i].noun), MENU_UNSELECTED);
+#endif
 		    lastch = thisch;
 		}
 	    any.a_int = pick_race(flags.initrole, flags.initgend,
@@ -679,11 +756,20 @@
 	    if (any.a_int == 0)	/* must be non-zero */
 		any.a_int = randrace(flags.initrole)+1;
 	    add_menu(win, NO_GLYPH, &any , '*', 0, ATR_NONE,
+#if 0 /*JP*/
 			    "Random", MENU_UNSELECTED);
+#else
+			    "適当", MENU_UNSELECTED);
+#endif
 	    any.a_int = i+1;	/* must be non-zero */
 	    add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
+#if 0 /*JP*/
 			    "Quit", MENU_UNSELECTED);
 	    Sprintf(pbuf, "Pick the race of your %s", plbuf);
+#else
+			    "中断", MENU_UNSELECTED);
+	    Sprintf(pbuf, "%s種族を選択してください．", plbuf);
+#endif
 	    end_menu(win, pbuf);
 	    n = select_menu(win, PICK_ONE, &selected);
 	    destroy_nhwindow(win);
@@ -738,20 +824,35 @@
 		    
 		    thisch = lowc(races[i].noun[choicelet]);
 		    any.a_int = i+1;	/* must be non-zero */
+#if 0 /*JP*/
 		    add_menu(win, NO_GLYPH, &any, thisch,
 			0, ATR_NONE, races[i].noun, MENU_UNSELECTED);
+#else
+		    add_menu(win, NO_GLYPH, &any, thisch,
+			0, ATR_NONE, jtrns_mon(races[i].noun), MENU_UNSELECTED);
+#endif
 		}
 	    any.a_int = pick_race(flags.initrole, flags.initgend,
 				flags.initalign)+1;
 	    if (any.a_int == 0)	/* must be non-zero */
 		any.a_int = randrace(flags.initrole)+1;
 	    add_menu(win, NO_GLYPH, &any , '*', 0, ATR_NONE,
+#if 0 /*JP*/
 			    "Random", MENU_UNSELECTED);
+#else
+			    "適当", MENU_UNSELECTED);
+#endif
 	    any.a_int = i+1;	/* must be non-zero */
 	    add_menu(win, NO_GLYPH, &any , 'q', 0, ATR_NONE,
+#if 0 /*JP*/
 			    "Quit", MENU_UNSELECTED);
 	    Sprintf(pbuf, "Pick the race of your %s",
 			    roles[flags.initrole].name.m);
+#else
+			    "中断", MENU_UNSELECTED);
+	    Sprintf(pbuf, "%s種族を選択してください．",
+			    roles[flags.initrole].name.m);
+#endif
 	    end_menu(win, pbuf);
 	    n = select_menu(win, PICK_ONE, &selected);
 	    destroy_nhwindow(win);
@@ -797,15 +898,24 @@
 void
 tty_askname()
 {
+/*JP
     static char who_are_you[] = "Who are you? ";
+*/
+    static char who_are_you[] = "あなたは誰？ ";
     register int c, ct, tryct = 0;
+#if 1 /*JP*/
+    char ptmpname[PL_NSIZ];
+#endif
 
     tty_putstr(BASE_WINDOW, 0, "");
     do {
 	if (++tryct > 1) {
 	    if (tryct > 10) bail("Giving up after 10 tries.\n");
 	    tty_curs(BASE_WINDOW, 1, wins[BASE_WINDOW]->cury - 1);
+/*JP
 	    tty_putstr(BASE_WINDOW, 0, "Enter a name for your character...");
+*/
+	    tty_putstr(BASE_WINDOW, 0, "あなたのキャラクタの名前は？");
 	    /* erase previous prompt (in case of ESC after partial response) */
 	    tty_curs(BASE_WINDOW, 1, wins[BASE_WINDOW]->cury),  cl_end();
 	}
@@ -821,6 +931,9 @@
 #endif
 		/* some people get confused when their erase char is not ^H */
 		if (c == '\b' || c == '\177') {
+#if 1 /*JP*/
+		moreback:
+#endif
 			if(ct) {
 				ct--;
 #ifdef WIN32CON
@@ -840,34 +953,62 @@
 				(void) putchar('\b');
 #endif
 			}
+#if 1 /*JP*/
+			if(is_kanji2(ptmpname, ct))
+			  goto moreback;
+#endif
 			continue;
 		}
 #if defined(UNIX) || defined(VMS)
+# if 0 /*JP*/
 		if(c != '-' && c != '@')
 		if(c < 'A' || (c > 'Z' && c < 'a') || c > 'z') c = '_';
+# endif /*JP*/
 #endif
 		if (ct < (int)(sizeof plname) - 1) {
 #if defined(MICRO)
 # if defined(MSDOS)
 			if (iflags.grmode) {
+#  if 0 /*JP*/
 				(void) putchar(c);
+#  else
+				(void) cputchar(c);
+#   ifdef NO_TERMS
+				ttyDisplay->curx++;
+				wins[BASE_WINDOW]->curx++;
+#   endif
+#  endif /*JP*/
 			} else
 # endif
+/*JP
 			msmsg("%c", c);
+*/
+			(void) putchar(c);
 #else
 			(void) putchar(c);
 #endif
+#if 0 /*JP*/
 			plname[ct++] = c;
+#else
+			ptmpname[ct++] = c;
+#endif
 #ifdef WIN32CON
 			ttyDisplay->curx++;
 #endif
 		}
 	}
+#if 0 /*JP*/
 	plname[ct] = 0;
+#else
+	ptmpname[ct] = 0;
+#endif
     } while (ct == 0);
 
     /* move to next line to simulate echo of user's <return> */
     tty_curs(BASE_WINDOW, 1, wins[BASE_WINDOW]->cury + 1);
+#if 1 /*JP*/
+    Strcpy(plname, str2ic(ptmpname));
+#endif
 }
 
 void
@@ -880,6 +1021,9 @@
 STATIC_OVL void
 getret()
 {
+#if 1 /*JP*/
+	jputchar('\0');
+#endif
 	xputs("\n");
 	if(flags.standout)
 		standoutbeg();
@@ -1162,8 +1306,24 @@
 	     (int)ttyDisplay->curx + offset, (int)ttyDisplay->cury);
     if(flags.standout)
 	standoutbeg();
+/*JP
+    xputs(prompt);
+*/
+    jputchar('\0'); /* reset */
+#if 0 /*JP*/
     xputs(prompt);
     ttyDisplay->curx += strlen(prompt);
+#else
+    {
+      const char *p;
+      p = prompt;
+	while(*p){
+	    jputchar(*(p++));
+	    ttyDisplay->curx++;
+	}
+    }
+/*    jputs(prompt);*/
+#endif
     if(flags.standout)
 	standoutend();
 
@@ -1179,7 +1339,10 @@
     char ch = item->selected ? (item->count == -1L ? '+' : '#') : '-';
     tty_curs(window, 4, lineno);
     term_start_attr(item->attr);
+/*JP
     (void) putchar(ch);
+*/
+    (void) jputchar(ch);
     ttyDisplay->curx++;
     term_end_attr(item->attr);
 }
@@ -1377,7 +1540,11 @@
 		    tty_curs(window, 1, page_lines);
 		    if (cw->offx) cl_end();
 
+#if 0 /*JP*/
 		    (void) putchar(' ');
+#else
+		    (void) jputchar(' ');
+#endif
 		    ++ttyDisplay->curx;
 		    /*
 		     * Don't use xputs() because (1) under unix it calls
@@ -1405,11 +1572,23 @@
 			if (n == 2 && curr->identifier.a_void != 0 &&
 							curr->selected) {
 			    if (curr->count == -1L)
+#if 0 /*JP*/
 				(void) putchar('+'); /* all selected */
+#else
+				(void) jputchar('+'); /* all selected */
+#endif
 			    else
+#if 0 /*JP*/
 				(void) putchar('#'); /* count selected */
+#else
+				(void) jputchar('#'); /* count selected */
+#endif
 			} else
+#if 0 /*JP*/
 			    (void) putchar(*cp);
+#else
+			    (void) jputchar(*cp);
+#endif
 #ifdef MENU_COLOR
 		   if (iflags.use_menu_color && menucolr) {
 		      if (color != NO_COLOR) term_end_color();
@@ -1440,7 +1619,11 @@
 	    Strcat(resp, mapped_menu_cmds);
 
 	    if (cw->npages > 1)
+#if 0 /*JP*/
 			Sprintf(cw->morestr, "(%d of %d)",
+#else
+			Sprintf(cw->morestr, "(%d/%d)",
+#endif
 				curr_page + 1, (int) cw->npages);
 	    else if (msave)
 			Strcpy(cw->morestr, msave);
@@ -1639,7 +1822,11 @@
 	if (cw->data[i]) {
 	    attr = cw->data[i][0] - 1;
 	    if (cw->offx) {
+#if 0 /*JP*/
 		(void) putchar(' '); ++ttyDisplay->curx;
+#else
+		(void) jputchar(' '); ++ttyDisplay->curx;
+#endif
 	    }
 	    term_start_attr(attr);
 	    for (cp = &cw->data[i][1];
@@ -1650,7 +1837,11 @@
 		    *cp && (int) ttyDisplay->curx < (int) ttyDisplay->cols;
 		    cp++, ttyDisplay->curx++)
 #endif
+#if 0 /*JP*/
 		(void) putchar(*cp);
+#else
+		(void) jputchar(*cp);
+#endif
 	    term_end_attr(attr);
 	}
     }
@@ -1860,7 +2051,11 @@
 	nocmov(x, y);
 #ifndef NO_TERMS
     } else if ((x <= 3 && cy <= 3) || (!nh_CM && x < cx)) {
+# if 0 /*JP*/
 	(void) putchar('\r');
+# else
+	(void) cputchar('\r');
+# endif
 	ttyDisplay->curx = 0;
 	nocmov(x, y);
     } else if (!nh_CM) {
@@ -1880,6 +2075,9 @@
     char ch;
 {
     register struct WinDesc *cw = 0;
+#if 1 /*JP*/
+    static int prev_win;
+#endif
 
     if(window == WIN_ERR || (cw = wins[window]) == (struct WinDesc *) 0)
 	panic(winpanicstr,  window);
@@ -1889,7 +2087,15 @@
     case NHW_MAP:
     case NHW_BASE:
 	tty_curs(window, x, y);
+#if 0 /*JP*/
 	(void) putchar(ch);
+#else
+	if(cw->type!=NHW_MAP)
+	  (void) jputchar(ch);
+	else {
+	  (void) cputchar(ch);
+	}
+#endif
 	ttyDisplay->curx++;
 	cw->curx++;
 	break;
@@ -1899,6 +2105,9 @@
 	impossible("Can't putsym to window type %d", cw->type);
 	break;
     }
+#if 1 /*JP*/
+    prev_win = cw->type;
+#endif
 }
 
 
@@ -1936,6 +2145,13 @@
     register const char *nb;
     register int i, j, n0;
     register int k;
+#if 1 /*JP*/
+    int kchar2 = 0;		/* if 1, kanji 2nd byte */
+#endif
+
+#if 1 /*JP*/
+    jputchar('\0');	/* RESET */
+#endif
 
     /* Assume there's a real problem if the window is missing --
      * probably a panic message
@@ -1997,7 +2213,47 @@
 		}
 		break;
 	    }
+#if 0 /*JP*/
 	    if(*ob != *nb)
+#else /* this code updates all status line at any time */
+# if 0
+/* check 2-bytes character for Japanese	*/
+/* by issei 93/12/2 			*/
+	    uc = *((unsigned char *)nb);
+	    if((!(uc & 0x80) && *ob != *nb) || kflg){
+	      tty_putsym(WIN_STATUS, i, cw->cury, *nb);
+	    }
+	    else{
+	      if(*ob != *nb || *(ob+1)!= *(nb+1)){
+		tty_putsym(WIN_STATUS, i, cw->cury, *nb);
+		kflg = 1;
+	      }
+	    }
+# endif	/* 0 */
+#define ismbchar(c)	(((unsigned char)(c)) & 0x80)
+#define KANJI2	1
+#define KUPDATE	2
+	    if (kchar2)			/* kanji 2nd byte */
+	    {
+		if (kchar2 & KUPDATE)
+		    tty_putsym(WIN_STATUS, i, cw->cury, *nb);
+	    	kchar2 = 0;
+	    }
+	    else if (ismbchar(*nb))	/* kanji 1st byte */
+	    {
+		kchar2 = KANJI2;
+		/* Kanji char must be checked as 2-bytes pair. */
+		/* check i to prevent putting only kanji 1st byte at last. */
+		if ((*nb != *ob || *(nb+1) != *(ob+1)) && i < n0-1)
+		{
+		    tty_putsym(WIN_STATUS, i, cw->cury, *nb);
+		    kchar2 |= KUPDATE;	/* must do update */
+		}
+		/* else nb is the same char as old, so need not to update */
+	    }
+	    /* not kanji char */
+	    else if (*nb != *ob)
+#endif
 		tty_putsym(WIN_STATUS, i, cw->cury, *nb);
 	    if(*ob) ob++;
 
@@ -2042,7 +2298,11 @@
 	tty_curs(window, cw->curx+1, cw->cury);
 	term_start_attr(attr);
 	while(*str && (int) ttyDisplay->curx < (int) ttyDisplay->cols-1) {
+#if 0 /*JP*/
 	    (void) putchar(*str);
+#else
+	    (void) cputchar(*str);
+#endif
 	    str++;
 	    ttyDisplay->curx++;
 	}
@@ -2059,7 +2319,11 @@
 		cw->cury++;
 		tty_curs(window, cw->curx+1, cw->cury);
 	    }
+#if 0 /*JP*/
 	    (void) putchar(*str);
+#else
+	    (void) jputchar(*str);
+#endif
 	    str++;
 	    ttyDisplay->curx++;
 	}
@@ -2118,6 +2382,9 @@
 	}
 	break;
     }
+#if 1 /*JP*/
+    jputchar('\0');	/* RESET */
+#endif
 }
 
 void
@@ -2573,24 +2840,54 @@
 
 # if defined(ASCIIGRAPH) && !defined(NO_TERMS)
     if (iflags.IBMgraphics || iflags.eight_bit_tty) {
+#  ifdef PC9800
+    {
+	if (!GFlag) {
+	    graph_on();
+	    GFlag = TRUE;
+	}
+#   if 0 /*JP*/
+	(void) putchar(ch);
+#   else
+	(void) cputchar(ch);
+#   endif
+    }
+#  else
 	/* IBM-compatible displays don't need other stuff */
+#   if 0 /*JP*/
 	(void) putchar(ch);
+#   else
+	(void) cputchar(ch);
+#   endif
+#endif
     } else if (ch & 0x80) {
 	if (!GFlag || HE_resets_AS) {
 	    graph_on();
 	    GFlag = TRUE;
 	}
+# if 0 /*JP*/
 	(void) putchar((ch ^ 0x80)); /* Strip 8th bit */
+# else
+	(void) cputchar((ch ^ 0x80)); /* Strip 8th bit */
+# endif
     } else {
 	if (GFlag) {
 	    graph_off();
 	    GFlag = FALSE;
 	}
+# if 0 /*JP*/
 	(void) putchar(ch);
+# else
+	(void) jputchar(ch);
+# endif
     }
 
 #else
+# if 0 /*JP*/
     (void) putchar(ch);
+# else
+    (void) jputchar(ch);
+# endif
 
 #endif	/* ASCIIGRAPH && !NO_TERMS */
 
@@ -2679,7 +2976,11 @@
 
 #ifndef NO_TERMS
     if (ul_hack && ch == '_') {		/* non-destructive underscore */
+# if 0 /*JP*/
 	(void) putchar((char) ' ');
+# else
+	(void) cputchar((char) ' ');
+# endif
 	backsp();
     }
 #endif
@@ -2729,9 +3030,23 @@
 {
     if(ttyDisplay) ttyDisplay->rawprint++;
 #if defined(MICRO) || defined(WIN32CON)
+# if 0 /*JP*/
     msmsg("%s\n", str);
+# else
+    while(*str){
+	jbuffer(*(str++), NULL, NULL, NULL, NULL);
+#ifdef WIN32CON
+	ttyDisplay->curx++;
+#endif
+    }
+    msmsg("\n");
+# endif
 #else
+# if 0 /*JP*/
     puts(str); (void) fflush(stdout);
+# else
+    jputs(str); (void) fflush(stdout);
+# endif
 #endif
 }
 
@@ -2742,15 +3057,38 @@
     if(ttyDisplay) ttyDisplay->rawprint++;
     term_start_raw_bold();
 #if defined(MICRO) || defined(WIN32CON)
+# if 0 /*JP*/
     msmsg("%s", str);
+#ifndef PC9800
+    msmsg("\033[1m");
+#endif
+# else
+    while(*str){
+	jbuffer(*(str++), NULL, NULL, NULL, NULL);
+#ifdef WIN32CON
+	ttyDisplay->curx++;
+#endif
+    }
+# endif
 #else
+# if 0 /*JP*/
     (void) fputs(str, stdout);
+# else
+    (void) jputs(str);
+# endif
 #endif
     term_end_raw_bold();
 #if defined(MICRO) || defined(WIN32CON)
+#ifndef PC9800
+# if 0 /*JP*/
+    msmsg("\033[0m");
+# endif
+#endif
     msmsg("\n");
 #else
+# if 0 /*JP*/
     puts("");
+# endif
     (void) fflush(stdout);
 #endif
 }
diff -aurN slashem-0.0.7E6F2/win/win32/dlb_main.dsp jslashem-0.0.7E6F2-J0.0.8/win/win32/dlb_main.dsp
--- slashem-0.0.7E6F2/win/win32/dlb_main.dsp	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/dlb_main.dsp	2004-06-10 15:56:32.000000000 +0900
@@ -55,7 +55,7 @@
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Desc=Packaging via DLB
-PostBuild_Cmds=echo chdir ..\dat	 chdir ..\dat	 chdir	  echo data >dlb.lst	  echo oracles >>dlb.lst	  if exist options echo options >>dlb.lst	  if exist ttyoptions echo ttyoptions >>dlb.lst	  if exist guioptions echo guioptions >>dlb.lst	  if NOT exist porthelp copy ..\sys\winnt\porthelp porthelp	  if exist porthelp echo porthelp >>dlb.lst	  echo rumors >>dlb.lst	  echo help >>dlb.lst	  echo hh >>dlb.lst	  echo cmdhelp >>dlb.lst	  echo history >>dlb.lst	  echo opthelp >>dlb.lst	  echo wizhelp >>dlb.lst	  echo license >>dlb.lst	  ..\util\dlb_main.exe cIf dlb.lst nhshare	  echo dungeon > dlb2.lst	  echo quest.dat >>dlb2.lst	  for %%N in (*.lev) do echo %%N >>dlb2.lst	  ..\util\dlb_main.exe cIf dlb2.lst nhushare	  echo chdir ..\build	 chdir ..\build	 echo if NOT exist ..\binary\*.* mkdir ..\binary	  if NOT exist ..\binary\*.* mkdir ..\binary
+PostBuild_Cmds=echo chdir ..\dat	 chdir ..\dat	 chdir	  echo data >dlb.lst	  echo joracles >>dlb.lst	  if exist options echo options >>dlb.lst	  if exist ttyoptions echo ttyoptions >>dlb.lst	  if exist guioptions echo guioptions >>dlb.lst	  if NOT exist porthelp copy ..\sys\winnt\porthelp porthelp	  if exist porthelp echo porthelp >>dlb.lst	  echo jrumors >>dlb.lst	  echo jhelp >>dlb.lst	  echo jhh >>dlb.lst	  echo jcmdhelp >>dlb.lst	  echo jhistory >>dlb.lst	  echo jopthelp >>dlb.lst	  echo jwizhelp >>dlb.lst	  echo license >>dlb.lst	  ..\util\dlb_main.exe cIf dlb.lst nhshare	  echo dungeon > dlb2.lst	  echo quest.dat >>dlb2.lst	  for %%N in (*.lev) do echo %%N >>dlb2.lst	  ..\util\dlb_main.exe cIf dlb2.lst nhushare	  echo chdir ..\build	 chdir ..\build	 echo if NOT exist ..\binary\*.* mkdir ..\binary	  if NOT exist ..\binary\*.* mkdir ..\binary
 # End Special Build Tool
 
 !ELSEIF  "$(CFG)" == "dlb_main - Win32 Debug"
@@ -84,7 +84,7 @@
 # Begin Special Build Tool
 SOURCE="$(InputPath)"
 PostBuild_Desc=Packaging via dlb
-PostBuild_Cmds=echo chdir ..\dat	 chdir ..\dat	 chdir	  echo data >dlb.lst	  echo oracles >>dlb.lst	  if exist options echo options >>dlb.lst	  if exist ttyoptions echo ttyoptions >>dlb.lst	  if exist guioptions echo guioptions >>dlb.lst	  if NOT exist porthelp copy ..\sys\winnt\porthelp porthelp	  if exist porthelp echo porthelp >>dlb.lst	  echo rumors >>dlb.lst	  echo help >>dlb.lst	  echo hh >>dlb.lst	  echo cmdhelp >>dlb.lst	  echo history >>dlb.lst	  echo opthelp >>dlb.lst	  echo wizhelp >>dlb.lst	  echo license >>dlb.lst	  ..\util\dlb_main.exe cIf dlb.lst nhshare	  echo quest.dat >dlb2.lst	  echo dungeon >>dlb2.lst	  for %%N in (*.lev) do echo %%N >>dlb2.lst	  ..\util\dlb_main.exe cIf dlb2.lst nhushare	 echo chdir ..\build	 chdir ..\build	 echo if NOT exist ..\binary\*.* mkdir ..\binary	 if NOT exist ..\binary\*.* mkdir ..\binary
+PostBuild_Cmds=echo chdir ..\dat	 chdir ..\dat	 chdir	  echo data >dlb.lst	  echo joracles >>dlb.lst	  if exist options echo options >>dlb.lst	  if exist ttyoptions echo ttyoptions >>dlb.lst	  if exist guioptions echo guioptions >>dlb.lst	  if NOT exist porthelp copy ..\sys\winnt\porthelp porthelp	  if exist porthelp echo porthelp >>dlb.lst	  echo jrumors >>dlb.lst	  echo jhelp >>dlb.lst	  echo jhh >>dlb.lst	  echo jcmdhelp >>dlb.lst	  echo jhistory >>dlb.lst	  echo jopthelp >>dlb.lst	  echo jwizhelp >>dlb.lst	  echo license >>dlb.lst	  ..\util\dlb_main.exe cIf dlb.lst nhshare	  echo quest.dat >dlb2.lst	  echo dungeon >>dlb2.lst	  for %%N in (*.lev) do echo %%N >>dlb2.lst	  ..\util\dlb_main.exe cIf dlb2.lst nhushare	 echo chdir ..\build	 chdir ..\build	 echo if NOT exist ..\binary\*.* mkdir ..\binary	 if NOT exist ..\binary\*.* mkdir ..\binary
 # End Special Build Tool
 
 !ENDIF 
diff -aurN slashem-0.0.7E6F2/win/win32/makedefs.dsp jslashem-0.0.7E6F2-J0.0.8/win/win32/makedefs.dsp
--- slashem-0.0.7E6F2/win/win32/makedefs.dsp	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/makedefs.dsp	2004-06-10 15:58:02.000000000 +0900
@@ -60,6 +60,7 @@
 echo makedefs.exe -p	makedefs.exe -p	\
 echo makedefs.exe -m	makedefs.exe -m	\
 echo makedefs.exe -z	makedefs.exe -z	\
+echo makedefs.exe -j	makedefs.exe -j	\
 echo chdir ..\dat	chdir ..\dat	chdir	\
 echo Generating NetHack database	echo ..\util\makedefs.exe -d	..\util\makedefs.exe -d	\
 echo Generating rumors	echo ..\util\makedefs.exe -r	..\util\makedefs.exe -r	\
@@ -102,6 +103,7 @@
 echo makedefs.exe -p	makedefs.exe -p	\
 echo makedefs.exe -m	makedefs.exe -m	\
 echo makedefs.exe -z	makedefs.exe -z	\
+echo makedefs.exe -j	makedefs.exe -j	\
 echo chdir ..\dat	chdir ..\dat	chdir	\
 echo Generating NetHack database	echo ..\util\makedefs.exe -d	..\util\makedefs.exe -d	\
 echo Generating rumors	echo ..\util\makedefs.exe -r	..\util\makedefs.exe -r	\
diff -aurN slashem-0.0.7E6F2/win/win32/mhmain.c jslashem-0.0.7E6F2-J0.0.8/win/win32/mhmain.c
--- slashem-0.0.7E6F2/win/win32/mhmain.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/mhmain.c	2004-06-10 08:55:22.000000000 +0900
@@ -491,7 +491,10 @@
 			}
 			else
 			{
+/*JP
 			    switch (NHMessageBox(hWnd, TEXT("Save?"), MB_YESNOCANCEL | MB_ICONQUESTION)) {
+*/
+			    switch (NHMessageBox(hWnd, TEXT("保存して終了しますか？"), MB_YESNOCANCEL | MB_ICONQUESTION)) {
 			    case IDYES: NHEVENT_KBD('y'); dosave(); break;
 			    case IDNO: NHEVENT_KBD('q'); done(QUIT); break;
 			    case IDCANCEL: break;
diff -aurN slashem-0.0.7E6F2/win/win32/mswproc.c jslashem-0.0.7E6F2-J0.0.8/win/win32/mswproc.c
--- slashem-0.0.7E6F2/win/win32/mswproc.c	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/mswproc.c	2004-06-30 22:57:52.000000000 +0900
@@ -2,6 +2,13 @@
 /* NetHack may be freely redistributed.  See license for details. */
 
 /*
+**	Japanese version
+**	For 3.4, Copyright (c) Kentaro Shirakata, 2003
+**	For Slash'EM 0.7E6F2 Copyright (c) Miyaso Masaki, 2004
+**	JNetHack may be freely redistributed.  See license for details. 
+*/
+
+/*
  * This file implements the interface between the window port specific
  * code in the mswin port and the rest of the nethack game engine. 
 */
@@ -1775,16 +1782,32 @@
 	switch (killer_format) {
 		default: impossible("bad killer format?");
 		case KILLED_BY_AN:
+#if 0 /*JP*/
 			Strcpy(buf, killed_by_prefix[how]);
 			Strcat(buf, an(killer));
+#else
+			Strcpy(buf, an(killer));
+			Strcat(buf, killed_by_prefix[how]);
+#endif
 			break;
 		case KILLED_BY:
+#if 0 /*JP*/
 			Strcpy(buf, killed_by_prefix[how]);
 			Strcat(buf, killer);
+#else
+			Strcpy(buf, killer);
+			Strcat(buf, killed_by_prefix[how]);
+#endif
 			break;
 		case NO_KILLER_PREFIX:
 			Strcpy(buf, killer);
 			break;
+#if 1 /*JP*/
+		case KILLED_SUFFIX:
+			Strcpy(buf, killer);
+			Strcat(buf, "殺された");
+			break;
+#endif
 	}
 
 	/* Put death type on stone */
diff -aurN slashem-0.0.7E6F2/win/win32/nethackw.dsp jslashem-0.0.7E6F2-J0.0.8/win/win32/nethackw.dsp
--- slashem-0.0.7E6F2/win/win32/nethackw.dsp	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/nethackw.dsp	2004-06-10 16:02:32.000000000 +0900
@@ -62,7 +62,7 @@
 OutDir=.\Release
 SOURCE="$(InputPath)"
 PostBuild_Desc=Install exe
-PostBuild_Cmds=copy $(OutDir)\slashemw.exe ..\binary	 copy ..\dat\nhshare ..\binary	copy ..\dat\nhushare ..\binary	  copy ..\dat\license ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary\tiles32.bmp	  if exist ..\src\tiles128.bmp copy ..\src\tiles128.bmp ..\binary\tiles128.bmp	  if exist ..\doc\Guidebook.txt copy ..\doc\Guidebook.txt ..\binary\Guidebook.txt	 if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	 copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
+PostBuild_Cmds=copy $(OutDir)\slashemw.exe ..\binary	 copy ..\dat\nhshare ..\binary	copy ..\dat\nhushare ..\binary	  copy ..\dat\license ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary\tiles32.bmp	  if exist ..\src\tiles128.bmp copy ..\src\tiles128.bmp ..\binary\tiles128.bmp	  if exist ..\doc\jGuidebook.txt copy ..\doc\jGuidebook.txt ..\binary\jGuidebook.txt	 if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	 copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
 # End Special Build Tool
 
 !ELSEIF  "$(CFG)" == "NetHackW - Win32 Debug"
@@ -95,7 +95,7 @@
 OutDir=.\Debug
 SOURCE="$(InputPath)"
 PostBuild_Desc=Install exe
-PostBuild_Cmds=if NOT exist ..\binary\*.* mkdir ..\binary	  copy $(OutDir)\slashemw.exe ..\binary	  copy ..\dat\nhshare ..\binary	  copy ..\dat\nhushare ..\binary	  copy ..\dat\license ..\binary	 rem  if exist ..\src\tiles.bmp copy ..\src\tiles.bmp ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary	  if exist ..\doc\Guidebook.txt copy ..\doc\Guidebook.txt ..\binary\Guidebook.txt	  if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	  copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
+PostBuild_Cmds=if NOT exist ..\binary\*.* mkdir ..\binary	  copy $(OutDir)\slashemw.exe ..\binary	  copy ..\dat\nhshare ..\binary	  copy ..\dat\nhushare ..\binary	  copy ..\dat\license ..\binary	 rem  if exist ..\src\tiles.bmp copy ..\src\tiles.bmp ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary	  if exist ..\doc\jGuidebook.txt copy ..\doc\jGuidebook.txt ..\binary\jGuidebook.txt	  if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	  copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
 # End Special Build Tool
 
 !ELSEIF  "$(CFG)" == "NetHackW - Win32 GTK Debug"
@@ -130,7 +130,7 @@
 OutDir=.\NetHackW___Win32_GTK_Debug
 SOURCE="$(InputPath)"
 PostBuild_Desc=Install exe
-PostBuild_Cmds=if NOT exist ..\binary\*.* mkdir ..\binary	  copy $(OutDir)\Debug\slashemw.exe ..\binary	  copy ..\dat\nhshare ..\binary	  copy ..\dat\nhushare ..\binary	  copy ..\dat\license ..\binary	 rem  if exist ..\src\tiles.bmp copy ..\src\tiles.bmp ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary	  if exist ..\doc\Guidebook.txt copy ..\doc\Guidebook.txt ..\binary\Guidebook.txt	  if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	  copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
+PostBuild_Cmds=if NOT exist ..\binary\*.* mkdir ..\binary	  copy $(OutDir)\Debug\slashemw.exe ..\binary	  copy ..\dat\nhshare ..\binary	  copy ..\dat\nhushare ..\binary	  copy ..\dat\license ..\binary	 rem  if exist ..\src\tiles.bmp copy ..\src\tiles.bmp ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary	  if exist ..\doc\jGuidebook.txt copy ..\doc\jGuidebook.txt ..\binary\jGuidebook.txt	  if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	  copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
 # End Special Build Tool
 
 !ELSEIF  "$(CFG)" == "NetHackW - Win32 GTK Release "
@@ -167,7 +167,7 @@
 OutDir=.\NetHackW___Win32_GTK_Release_
 SOURCE="$(InputPath)"
 PostBuild_Desc=Install exe
-PostBuild_Cmds=copy $(OutDir)\slashemw.exe ..\binary	 copy ..\dat\nhdat ..\binary	  copy ..\dat\license ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary	  if exist ..\doc\Guidebook.txt copy ..\doc\Guidebook.txt ..\binary\Guidebook.txt	 if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	 copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
+PostBuild_Cmds=copy $(OutDir)\slashemw.exe ..\binary	 copy ..\dat\nhdat ..\binary	  copy ..\dat\license ..\binary	  if exist ..\src\tiles32.bmp copy ..\src\tiles32.bmp ..\binary	  if exist ..\doc\jGuidebook.txt copy ..\doc\jGuidebook.txt ..\binary\jGuidebook.txt	 if exist ..\doc\slashem.txt copy ..\doc\slashem.txt ..\binary\SlashEM.txt	 copy ..\sys\winnt\defaults.nh ..\binary\defaults.nh
 # End Special Build Tool
 
 !ENDIF 
@@ -331,6 +331,18 @@
 # End Source File
 # Begin Source File
 
+SOURCE=..\japanese\jconj.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\japanese\jlib.c
+# End Source File
+# Begin Source File
+
+SOURCE=..\japanese\jtrns.c
+# End Source File
+# Begin Source File
+
 SOURCE=..\src\light.c
 # End Source File
 # Begin Source File
diff -aurN slashem-0.0.7E6F2/win/win32/winMS.h jslashem-0.0.7E6F2-J0.0.8/win/win32/winMS.h
--- slashem-0.0.7E6F2/win/win32/winMS.h	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/winMS.h	2004-06-10 08:55:22.000000000 +0900
@@ -29,7 +29,11 @@
 #define TILE_BK_COLOR RGB(71, 108, 108)
 
 /* minimum/maximum font size (in points - 1/72 inch) */
+#if 0 /*JP*/
 #define NHFONT_DEFAULT_SIZE 9
+#else
+#define NHFONT_DEFAULT_SIZE 10
+#endif
 #define NHFONT_SIZE_MIN 3
 #define NHFONT_SIZE_MAX 20
 
diff -aurN slashem-0.0.7E6F2/win/win32/winhack.rc jslashem-0.0.7E6F2-J0.0.8/win/win32/winhack.rc
--- slashem-0.0.7E6F2/win/win32/winhack.rc	2004-05-03 19:17:00.000000000 +0900
+++ jslashem-0.0.7E6F2-J0.0.8/win/win32/winhack.rc	2004-06-10 16:05:22.000000000 +0900
@@ -23,8 +23,8 @@
 
 #if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
 #ifdef _WIN32
-LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
-#pragma code_page(1252)
+LANGUAGE LANG_JAPANESE, SUBLANG_DEFAULT
+#pragma code_page(932)
 #endif //_WIN32
 
 /////////////////////////////////////////////////////////////////////////////
@@ -41,6 +41,7 @@
 // Menu
 //
 
+#if 0 /*JP*/
 IDC_NETHACKW MENU DISCARDABLE 
 BEGIN
     POPUP "&File"
@@ -85,7 +86,52 @@
         MENUITEM "Slash'EM for &Windows help",   IDM_HELP_PORTHELP
     END
 END
-
+#else
+IDC_NETHACKW MENU DISCARDABLE 
+BEGIN
+    POPUP "ファイル(&F)"
+    BEGIN
+        MENUITEM "保存して終了(&S)",               IDM_SAVE
+        MENUITEM SEPARATOR
+        MENUITEM "NetHackの終了(&Q)",              IDM_EXIT
+    END
+    POPUP "表示(&M)"
+    BEGIN
+        MENUITEM "&0 - タイルを使用する",       IDM_MAP_TILES
+        MENUITEM "&1 - ASCII (4x6)",            IDM_MAP_ASCII4X6
+        MENUITEM "&2 - ASCII (6x8)",            IDM_MAP_ASCII6X8
+        MENUITEM "&3 - ASCII (8x8)",            IDM_MAP_ASCII8X8
+        MENUITEM "&4 - ASCII (16x8)",           IDM_MAP_ASCII16X8
+        MENUITEM "&5 - ASCII (7x12)",           IDM_MAP_ASCII7X12
+        MENUITEM "&6 - ASCII (8x12)",           IDM_MAP_ASCII8X12
+        MENUITEM "&7 - ASCII (16x12)",          IDM_MAP_ASCII16X12
+        MENUITEM "&8 - ASCII (12x16)",          IDM_MAP_ASCII12X16
+        MENUITEM "&9 - ASCII (10x18)",          IDM_MAP_ASCII10X18
+        MENUITEM SEPARATOR
+        MENUITEM "ウインドウに合わせる(&F)",    IDM_MAP_FIT_TO_SCREEN
+    END
+    POPUP "設定(&S)"
+    BEGIN
+        MENUITEM "NetHackモード(&N)",               IDM_NHMODE
+        MENUITEM SEPARATOR
+        MENUITEM "すべての設定をクリア(&C)",    IDM_CLEARSETTINGS
+    END
+    POPUP "ヘルプ(&H)"
+    BEGIN
+        MENUITEM "NetHackについて(&A)...",               IDM_ABOUT
+        MENUITEM "ゲームおよびコマンドの解説(長文)(&L)", IDM_HELP_LONG
+        MENUITEM "コマンド一覧(&C)",                     IDM_HELP_COMMANDS
+        MENUITEM "NetHackの簡単な歴史(&H)",              IDM_HELP_HISTORY
+        MENUITEM "画面に表示される文字の説明(&I)",       IDM_HELP_INFO_CHAR
+        MENUITEM "このキーが何を意味するかの説明(&K)",   IDM_HELP_INFO_KEY
+        MENUITEM "ゲームのオプション一覧(&O)",           IDM_HELP_OPTIONS
+        MENUITEM "ゲームのオプション一覧(長文)(&U)",     IDM_HELP_OPTIONS_LONG
+        MENUITEM "拡張コマンド一覧(&X)",                 IDM_HELP_EXTCMD
+        MENUITEM "NetHackのライセンス(&N)",              IDM_HELP_LICENSE
+        MENUITEM "Windowsに特有のヘルプおよびコマンド(&W)",  IDM_HELP_PORTHELP
+    END
+END
+#endif
 
 /////////////////////////////////////////////////////////////////////////////
 //
@@ -107,7 +153,11 @@
 IDD_ABOUTBOX DIALOG DISCARDABLE  22, 17, 230, 75
 STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
 CAPTION "About"
+#if 0 /*JP*/
 FONT 8, "System"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     LTEXT           "Slash'EM",IDC_ABOUT_VERSION,10,10,170,15,SS_NOPREFIX
     LTEXT           "Copyright",IDC_ABOUT_COPYRIGHT,10,30,210,40
@@ -117,7 +167,11 @@
 IDD_NHTEXT DIALOGEX 0, 0, 172, 178
 STYLE DS_SETFOREGROUND | WS_CHILD | WS_THICKFRAME
 EXSTYLE WS_EX_STATICEDGE
+#if 0 /*JP*/
 FONT 8, "MS Sans Serif"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     DEFPUSHBUTTON   "OK",IDOK,54,163,50,14
     EDITTEXT        IDC_TEXT_CONTROL,0,0,170,160,ES_MULTILINE | 
@@ -127,7 +181,11 @@
 IDD_MENU DIALOGEX 0, 0, 187, 153
 STYLE WS_CHILD | WS_CLIPSIBLINGS | WS_THICKFRAME
 EXSTYLE WS_EX_CLIENTEDGE | WS_EX_CONTROLPARENT | WS_EX_STATICEDGE
+#if 0 /*JP*/
 FONT 8, "MS Sans Serif"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     DEFPUSHBUTTON   "OK",IDOK,7,132,50,14,BS_FLAT
     PUSHBUTTON      "Cancel",IDCANCEL,130,132,50,14,BS_FLAT
@@ -139,7 +197,11 @@
 IDD_GETLIN DIALOG DISCARDABLE  0, 0, 131, 29
 STYLE DS_MODALFRAME | DS_CENTER | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Question?"
+#if 0 /*JP*/
 FONT 8, "MS Sans Serif"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     DEFPUSHBUTTON   "OK",IDOK,0,15,65,14
     PUSHBUTTON      "Cancel",IDCANCEL,65,15,65,14
@@ -148,8 +210,13 @@
 
 IDD_EXTCMD DIALOG DISCARDABLE  0, 0, 137, 117
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
+#if 0 /*JP*/
 CAPTION "Extended Commands"
 FONT 8, "MS Sans Serif"
+#else
+CAPTION "拡張コマンド"
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     DEFPUSHBUTTON   "OK",IDOK,80,7,50,14
     PUSHBUTTON      "Cancel",IDCANCEL,80,24,50,14
@@ -160,30 +227,60 @@
 IDD_PLAYER_SELECTOR DIALOG DISCARDABLE  0, 0, 152, 169
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "What are you?"
+#if 0 /*JP*/
 FONT 8, "MS Sans Serif"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
+#if 0 /*JP*/
     DEFPUSHBUTTON   "Play",IDOK,7,148,66,14
     PUSHBUTTON      "Quit",IDCANCEL,79,148,66,14
     LTEXT           "Name:",IDC_STATIC,7,8,25,10
+#else
+    DEFPUSHBUTTON   "OK",IDOK,7,148,66,14
+    PUSHBUTTON      "Quit",IDCANCEL,79,148,66,14
+    LTEXT           "名前:",IDC_STATIC,7,8,25,10
+#endif
     EDITTEXT        IDC_PLSEL_NAME,40,7,105,12,ES_AUTOHSCROLL | ES_READONLY | 
                     NOT WS_TABSTOP
+#if 0 /*JP*/
     GROUPBOX        "Role",IDC_STATIC,7,21,138,30
     CONTROL         "Random",IDC_PLSEL_ROLE_RANDOM,"Button",BS_AUTOCHECKBOX | 
+#else
+    GROUPBOX        "職業",IDC_STATIC,7,21,138,30
+    CONTROL         "ランダム",IDC_PLSEL_ROLE_RANDOM,"Button",BS_AUTOCHECKBOX | 
+#endif
                     WS_TABSTOP,14,34,40,10
     COMBOBOX        IDC_PLSEL_ROLE_LIST,63,33,75,50,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
+#if 0 /*JP*/
     GROUPBOX        "Race",IDC_STATIC,7,51,138,30
     CONTROL         "Random",IDC_PLSEL_RACE_RANDOM,"Button",BS_AUTOCHECKBOX | 
+#else
+    GROUPBOX        "種族",IDC_STATIC,7,51,138,30
+    CONTROL         "ランダム",IDC_PLSEL_RACE_RANDOM,"Button",BS_AUTOCHECKBOX | 
+#endif
                     WS_TABSTOP,14,63,40,10
     COMBOBOX        IDC_PLSEL_RACE_LIST,63,62,75,45,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
+#if 0 /*JP*/
     GROUPBOX        "Gender",IDC_STATIC,7,81,138,30
     CONTROL         "Random",IDC_PLSEL_GENDER_RANDOM,"Button",
+#else
+    GROUPBOX        "性別",IDC_STATIC,7,81,138,30
+    CONTROL         "ランダム",IDC_PLSEL_GENDER_RANDOM,"Button",
+#endif
                     BS_AUTOCHECKBOX | WS_TABSTOP,14,93,40,10
     COMBOBOX        IDC_PLSEL_GENDER_LIST,63,92,75,40,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
+#if 0 /*JP*/
     GROUPBOX        "Alignment",IDC_STATIC,7,111,138,30
     CONTROL         "Random",IDC_PLSEL_ALIGN_RANDOM,"Button",BS_AUTOCHECKBOX | 
+#else
+    GROUPBOX        "属性",IDC_STATIC,7,111,138,30
+    CONTROL         "ランダム",IDC_PLSEL_ALIGN_RANDOM,"Button",BS_AUTOCHECKBOX | 
+#endif
                     WS_TABSTOP,13,123,40,10
     COMBOBOX        IDC_PLSEL_ALIGN_LIST,63,122,75,45,CBS_DROPDOWNLIST | 
                     WS_VSCROLL | WS_TABSTOP
@@ -192,7 +289,11 @@
 IDD_NHRIP DIALOGEX 0, 0, 281, 209
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Here lies..."
+#if 0 /*JP*/
 FONT 8, "MS Sans Serif"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     DEFPUSHBUTTON   "OK",IDOK,82,188,50,14
 END
@@ -200,7 +301,11 @@
 IDD_SPLASH DIALOG DISCARDABLE  0, 0, 281, 257
 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
 CAPTION "Welcome to Slash'EM"
+#if 0 /*JP*/
 FONT 8, "MS Sans Serif"
+#else
+FONT 10, "ＭＳ Ｐゴシック"
+#endif
 BEGIN
     DEFPUSHBUTTON   "OK",IDOK,224,236,50,14
     EDITTEXT        IDC_EXTRAINFO,7,176,267,52,ES_MULTILINE | ES_READONLY | 
@@ -358,7 +463,11 @@
 
 STRINGTABLE DISCARDABLE 
 BEGIN
+#if 0 /*JP*/
     IDS_APP_TITLE           "Slash'EM for Windows - Native Graphical Interface"
+#else
+    IDS_APP_TITLE           "JSlash'EM for Windows - Native Graphical Interface"
+#endif
     IDC_NETHACKW            "SLASHEM"
     IDS_APP_TITLE_SHORT     "Slash'EM for Windows"
 END
