Crawl 日本版版のLINUX版動作確認のオファーをぬるぽさんから受けまして、いろいろやっております。画面表示は全部libncurses.a にまかせてあるんで、文字化けの問題はncurses でEUCを表示するパッチをkmcの方のページからもってきてncurses に当てたら解決しました。
KTerm のフォントに「豆腐」がないんで、Heng のascii_to_zenkaku と同じ方法で壁を「■」で表示するパッチを作ったらぬるぽさんに採用された模様。英語版IBMフォントの画面写真とか見ると、IBM 固有文字では非常に見やすいんですけど、日本語だと漢字とバッティングするんで表示できません。それに英語フォントは割と横幅が広いけど、日本語の半角文字は漢字との兼ね合いでどうしても縦:横=2:1になってしまう。だから全角表示で1:1にしてみますた。扉を「回」とか、床を「・」で表示できて、グッドです。
で、次はタイル。画面表示は17x17なんで、32x32ドットでも余裕で表示できる。問題は視界外の表示。17x17の視界内に表示された文字はenv.map という配列に記憶され、つぎに視界に入るまで更新されない。"X"コマンドで表示されるのはこのデータ。問題は、視界内のデータは対象アイテムやモンスターのデータを参照できるけど、視界外は文字だけしか記録されないんで(色もなし)、タイルで表示する時に情報が不足してしまう。だから武器なら武器一般、モンスターならモンスター一般で抽象化したタイルで表示するしかない。いちおうバッファは128-255 の文字が自由に使えるので、すこしは融通きくけど。
あとはアイテム。薬なんかの不確定名は「濁った青い薬」という風に形容詞を二つ使って表示される。画面上の色は後者の方で決まるんで、タイルも後者の形容詞の種類だけ作る。指輪とかはそれ以外にランダムな形容詞の不確定名をもつランダムアーティファクトがあるんで、余分にタイルを用意しておき、文字の色によって選んで表示する。武器・防具は、全部の種類について「オークの」「エルフの」「ドワーフの」という種類がある。ネトハクのように別のタイルを描いてたら終らないんで、無視する。ネトハクも別に無視して同じタイルにすればいいかもな。