まさかのバージョンアップがあったNetHack。JNetHackを対応させるための方針と現状をメモしておく。
(これはRoguelike Advent Calendar 201523日目の記事です。)
方針
対応プラットフォーム
WindowsとUNIX(Linux)に絞る。NetHackはまだDJGPPに対応してるけど、さすがにもういいよね。 WindowsCEとかQtとかにもパッチが当たってたのだけど手元で確認できないので削除。 この辺りはパッチが来たら対応する方向で。
文字コード
内部コードは「普通UTF-8だろ」という話もあるのだけど、悩んだ結果とりあえず今まで通りShift-JIS/EUC-JPで。 現状はいわゆる全角文字が2バイトでないと内部的におかしくなる。 これは余裕があれば直したい...と3.4.3のころも思ってたのでそのままかなあ。
JNetHackは内部コードと入出力コードを違うものにできるコードが入っているのだけど、これはゆくゆくは廃止予定。 ただ、この部分をうまく使って「内部コードはEUC-JPだけど入出力はUTF-8」が出来るかも知れないので悩み中。
日本語埋め込み
前のJNetHackは「アイテム名と怪物名を英語のままにする」ってオプションがあって、日本語入力が難しい環境でもプレイ出来るようになっていた。 これに対応するためにアイテムと怪物の日本語名は別ファイルになってて、表示時に変換するようになってた。
ただ、この機能のためにソースのパッチ量がすごく増えてたりしたし、今どきUNIX環境でも日本語入力に困ることはないと思うので、この切り替え機能は廃止。 とは言え単純にobjects.cとかを置き換えると、実はこのファイルは前処理でヘッダファイルの生成とかにも使われてるので、objectsj.cを作らざるを得なかった。
その他職業とか種族とかも名前の先頭文字を別用途にも使ってるので3.4.3では英語名と別に日本語名を持ってたのだけど、これも日本語名だけを持つようにして、別用途で使ってる方にパッチすることにした。 これでトータルのパッチ量は減るはず。
後、データファイルも英語版とは別ファイルで日本語版を用意してた(rumorsとjrumorsとか)けど、これも同じファイル名で書き換えてしまう予定。
現状
ということで現状をアップロードしたかったのだけど、osdn.jpのgitレポジトリはsandbox的に使うのがちょっと面倒な感じだったのでgithubに仮置き場を作った。
https://github.com/argrath/jnethack-alpha
今のところWindowsでだけ確認。ttyもguiも動くには動く。
困っていること
win32/guiの文字入力で日本語が入力できない。 日本語埋め込みにしたのでこのままだと自動的に虐殺なし願いなし挑戦になってしまう。 調べてみたら3.4.3の頃から入力できていなかった...。