DCSS翻訳の新たな可能性とその限界

この記事はRoguelike Advent Calendar 2025の13日目の記事になります。

■ご挨拶と自己紹介

久々のblog投稿となります。初めての方は初めまして。dplusplusもしくはdppと申します。

過去記事を引用しつつ自己紹介します。

■TL;DR(要約)

新たな翻訳手法を教えてもらったのでDCSS 0.33の翻訳を試していました。
従来手法より楽な点もあれば解決困難な点もあり、結局現状としては停滞気味です。

■本題

さてDCSS本家の0.33.1が今年6月7日にリリースされた一方、日本語版の更新は途絶えている現状です。
実は0.23日本語版を途中まで開発していたのですが頓挫していました。
その理由としては、

  • DCSSへのモチベ低下
  • 当時は休職中で時間だけはあったが、復職してそうもいかなくなった
  • 本家の開発ペースが相変わらず活発すぎて追いつけない
  • そもそも翻訳作業は結構重いタスク

といった要因が挙げられます。

■時は流れ……

ある日、Discord経由でDCSS韓国サーバー(https://crawl.nemelex.cards/)の管理者ASCIIPhilia氏からコンタクトをいただきました。
その内容をかいつまむと、「現在韓国サーバーで韓国語への翻訳モジュールを開発しています。多言語対応もしているため、原理的には日本語翻訳も可能です。興味があったらぜひ協力してほしい」というものでした。

仕組みとしてはこうです。
DCSS本体には直接手を加えず、ブラウザにメッセージが表示されたところで翻訳モジュールがメッセージを対象の言語のメッセージに置換するという超力業ですが、恐ろしいことに全くストレスのない速度で動きます。最近の技術ってすごいなあ……

数時間翻訳モジュールの管理画面に入力した結果がこれ。

プレイヤービルド画面だけですが、綺麗に翻訳処理が動いています。

その後数カ月ほど入力を続け、ゲーム序盤のメッセージの大部分が日本語化された状態になりました。
現状の成果はDCSS韓国サーバーで見ることができます。
https://crawl.nemelex.cards/ にてユーザー登録し、設定ファイル編集(edit rcを押す)して

 translation_language = ja

を追加すれば日本語版として動作します。

■いいことばかりのように見えたが

この調子で進めていけば日本語版を新しく開発することも可能ではないか? と最初は楽観的に考えていました。
しかし、データ入力を進めていくにつれてこの方式では困難な事例がちらほらと見えてきました。

"〇〇 hits △△"の文を正しく訳すのが困難

DCSSでは"〇〇 hits △△"というメッセージが頻出し、多くは「〇〇は△△を攻撃した」と訳されるのですが、「〇〇が△△に当たった」の意味である場合も存在します。
ソースコードを改変する従来手法なら簡単に区別できますが、出てきたメッセージから機械的に判断することは難しいです。

また、"hit"という単語自体も厄介で、入力する正規表現パターンの不具合で以下のようになったりしました。

はい、white impの"hit"の部分ですね。

"〇〇, 〇〇, 〇〇, (中略) and 〇〇"のような文を適切に区切るのが難しい

"〇〇, 〇〇, 〇〇, (中略) and 〇〇"のような文がたまに使われることがありますが、適切に区切るための正規表現パターンを書くのが難度が高いです。
カンマならまだいいですが、場所によってはもっと誤検知を避けるのが面倒なところもあります。
ソースコード改変ならむしろ楽な方なのですが……

同じメッセージを違う文脈で別のメッセージに翻訳できない

"You feel yourself slow down."というメッセージは、「減速状態の開始」「加速状態の終了」両方に使われており、従来はそれぞれの文脈で違う訳語を割り当てていました。
今回の手法ではこの手は使えないので、どちらでもしっくり来るような訳文に変えることで対応しました。

メッセージは翻訳できるが、ダンプは翻訳できない

ブラウザ上で出力されるメッセージは翻訳できても、ファイル出力されるダンプ(途中経過を列記したテキストファイル)はゲーム本体に手を加えていないため翻訳できません。

共同作業が難しい

この翻訳モジュールは基本的には韓国語版のために作られたものなので、韓国語版の協力メンバーも翻訳のパターンを編集したりします。
韓国語版で行ったパターンの編集が原因で日本語版が正常に動かなくなったりすることもたまにあります。もちろん逆もありえます。
双方が緊密に連携を取れればいいのですが、母語が異なる同士で動作のクロスチェックを事前に行うのはあまりにも大変です。
現状は「正常に動かないことに気づいたら都度直す」という方法しか取れません。

メッセージを間引くことができない

「非常に大量にメッセージが実装されているが、ゲーム上は特に意味がない」ということもあります。
(★『謳う剣』装備中のメッセージなど)
従来はソースコード改変時にバリエーションをばっさり減らしたりしていましたが、ゲーム本体に手を加えられないため訳文の処理を最低限行わないといけません。
変換規則を書いて握りつぶすにしてもパターンが難解になります。

そもそも分量が多い

翻訳が楽になったように見えて、翻訳すべき分量が膨大なのは大して変わっていません。
膨大なモンスター、膨大な呪文、膨大なアイテム……
昨今はLLM翻訳の性能も目覚ましいですが、「特定の(マイナーな)ゲームのテキストを実装と矛盾せずに訳する」といった用途にはまったく追いついていないように思われます。
最低でも人力チェックは必要です。


上記のような様々な問題が出ており、現状としては開発作業が停滞気味です。
うまいこと解決できればよいのですが……
オチとかはありません。


次の記事はdeskull氏の「馬鹿馬鹿蛮怒0.0.1.3-Alphaリリース」です!