2010年2月5日金曜日

日本語化Modのカスタマイズ

1.15パッチもリリースされて日本語化出来る方も増えてきたので、ここらへんで日本語化Modのカスタマイズの一例をご紹介。
ただし、かなりPCに慣れた方向けです。自称中級者くらいだと難しいかも。
少なくとも、日本語化Modの入れ方で悩んだ方には無理だと思います。
オリジナルファイルの編集などはしないので、Modを消してしまえばプレイに影響はないので、そのあたりは救いですけどね。

■クエストの説明文だけを日本語化したい
・まず、TorchEDでadm→dat,layoutに変換しておく
 インストール済みの場合は、アンインストール→インストールでイケる?未検証。
 だめだったら、adm→dat,layout変換ツールで変換。
・クエストの説明文は、Vasmanクエストを例にとると、

[INTRO]
UNITNAME:VASMAN
DIALOG:文字列・・・
SOUND:OldManGreet
[/INTRO]
[RETURN]
UNITNAME:VASMAN
DIALOG:文字列・・・
SOUND:OldManGreet
[/RETURN]
[COMPLETE]
UNITNAME:VASMAN
DIALOG:文字列・・・
SOUND:OldManGreet
[/COMPLETE]
[DETAILS]
UNITNAME:VASMAN
DIALOG:文字列・・・
[/DETAILS]

のようになっているので、これらを正規表現で指定してTorchEDで抽出したdat,layoutファイルに対して一括変換してしまえばOKです。
規則性、見えますよね・・・
他のクエストも基本的には同じ書式です。
分からない方は最悪コピペでもイケないことはないですが、元SEの自分的にはそんなのナンセンスでやってられません。
これだと、クエスト名などは英語のままでプレイ出来ます。

こんな感じでいろいろと自分に合わせてカスタマイズできますので、お好みでどうぞ。
本当は文字列リソースだけ別ファイルになっていて、それをインクルードする形式になっているのがベストだったんですけどね。

テキストファイルなので、まあ、最悪の事態は避けられてよかったな、と。

ちなみに、自分の方はというと、これ以前の記事で紹介した方法で変更したもので、現在のレベルで問題なくプレイ出来ているのと、
Xbox360用のマグナカルタ2を購入してしまったので、そっちが終わってから気が向いたら、って感じです。

2010年1月28日木曜日

日本語化Wiki作りました

リンクしておきます。
Torchlight 日本語化 Wiki
です。

Wikiでまとめたい情報がある方はご自由に編集してください。
自分はブログのほうが使い易いのでこっちでやります。

日本語化ファイルのダウンロード

ここでは、Torchlight日本語化ファイルのダウンロードとそのファイルの扱い方について説明します。
編集可能にするため一手間加えてあるので、ダウンロードしたままでは使用できません。

なお、この作業にはGoogleアカウントが必要なので、予め準備しておいてください。

■Googleドキュメントでの処理

まず、共有パスを開いて、



Japanizeの下にあるmediaにチェックを付け、
「その他の操作」から「エクスポート」を選択します。

しばらくすると、「変換とダウンロード」画面に変わるので、
次に、ドキュメントの横にあるコンボボックスから、
「Plaint Text」を選択し、
一番下にあるダウンロードボタンを押します。



すると、「ファイルを圧縮しています」画面が表示されるので、
「準備ができたら通知する」ボタンを押します。



Googleドキュメントでの作業はここまでで、圧縮ファイルが準備できたら
Googleからメールが送られてくるので、後はそのリンクからダウンロードするだけです。
Google側の圧縮には時間がかかりますが、ダウンロードサイズは1MByte少々なので、すぐにダウンロードできます。

Googleドキュメントは閉じてしまって結構です。

■ダウンロードファイルの処理
まず、ダウンロードしたファイルを展開しておきます。
Googleドキュメントではファイルの拡張子からファイルタイプを決定しているようなので、
今回の場合は、すべてのファイルの末尾に「.txt」を付加しています。
このため、そのままではModとして使用できないため、適当なファイル管理ソフトを使って、
「.txt」を削除してください。

引き続き、すべてのファイルの先頭のスペースを取り除いてください。
次に、すべての
«

»
を、
<

>
に置換してください。
編集画面では正しいのですが、ダウンロードすると何故か変わっちゃってるんで。
なお、置換に使用するソフトはunicode対応のソフトを使ってください。
こうすれば、通常のModとして利用できるので、
%appdata%\Roaming\runic games\torchlight\mods\Japanize
のファイルを更新すれば最新の状態が反映されます。


何か分からない点があれば、コメントでもメールでも質問受け付けますので、お気軽にどうぞ。

共有ファイルのパス

Googleドキュメント共有ファイルのパスを以下のとおり設定しました。

Torchlight日本語化共有パス

誰でも編集できますので、お時間のある方はよろしくお願いします。
ある程度まとまったら、プロフィールの連絡先にメールもらえればZIPで配布します。

なお、編集した場合は必須ではないですが、直下のフォルダにあるList.htmlに編集内容を記載していただけると助かります。
Googleドキュメントにも保存時にコメントを付けられる機能があればよかったんですけどね。
(コミットログのような)

オリジナルの日本語ファイルを提供していただいた方にあらためて、ありがとうございます。

2010年1月27日水曜日

句読点の処理

続いて句読点の処理。
こちらは色コードの削除に比べるとシンプルで

正規表現の検索パターンに
[は|に|を|が|の|、|。]
おまけで、助詞っぽい文字も足してあります。
本当はワード検索と組み合わせた方が無駄な空白を増やさなくてすむのですが、面倒なのでパス。

置換パターンには
\0_
アンダースコアの位置に半角スペースです。
単に半角スペースが表示出来ないので、便宜的にアンダースコア付けただけです。

ここまでやると、かなりいい具合に表示出来るようになります。

正規表現って何?って方は、一つ前のエントリから読み返して下さい。

日本語Mod作者様はSteam版でないので、日本語表示出来ないとのことで、
なんだか申し訳なくなりつつ楽しませていただいております。

本当はYahooの形態素解析APIを使ったりすれば助詞だけを抜き出したりするのも可能なんですけど。
このあたりは、PHPでWebAPIを骨までしゃぶるで扱っているので、よかったらどうぞ。

なお、クエスト達成時などにアプリケーションエラーが発生する場合は、
一時的にglobals.datを消すだけで進めます。
このファイルに関しては、日本語Modの作者様も心配していたようなので、
なにかあるのかもしれませんが、自分には分かりません。

→根本的な解決策ではありませんが、globals.datの[TITLES]ブロックを英語版のオリジナルに戻せばアプリケーションエラーで落ちることはなくなることが分かりました。

正規表現で色コードを削除

有志の方が日本語Modを公開してくれたおかげで、Torchlightが日本語表示できるようになりました。
ただ、現状のバージョン1.14では、日本語が混じると色コードが誤認識されて、正しく表示されないことが多々あります。

なので、とりあえずは、色コード指定を削除してしまうのが手っ取り早い解決策。

ここでは、正規表現を使った文字列置換で色コードを削除する方法を紹介します。

まずは、正規表現に対応した文字列置換ソフトを用意します。
egrepでもDevasでもお好きなのをどうぞ。
ここでは、Devasを例にとります。

まず、左下のコンボボックスから「正規表現検索」を選択。
検索文字列に以下のパターン
\|c.{8}(.*?)\|u
を入力。
色コードは|cxxxxxx00文字列|uで指定されているので、中の文字列を取り出すにはこういったパターンになります。
何でこうなるのかを知りたい人はググってください。
対象ファイル/フォルダは自分の環境に合わせて入力。
対象ファイルの条件は
*.dat *.layout
を入力。
サブフォルダも検索をチェックしてから、
右下の検索ボタンを押す。
すると、検索結果一覧が出てくるので、
置換文字列に
\1
を入力してから、結果のプレビューボタンを押すと、置換結果が表示されます。
ちなみに、\1というのも正規表現のパターンでして、これは検索時に使用した()内の文字列を指すパターンです。
また、ここでは使いませんが、$0には、マッチした文字列全体が入っています。
問題なければ右下の置換ボタンを押せば一気に色コードを削除できます。

あとは、ワードの後ろに半角スペースを挿入すればかなり見やすくなります。
色がなくなるので、ちょっと素っ気無いですけど。

2010年1月26日火曜日

テーブル面倒・・・

テーブルタグ使うと、やたらと空白行が挿入されるので調べてみたんですが、Bloggerの仕様のようですね。

Blogger Beta Tips: Bloggerのテーブル空白問題

一見するとちょっと面倒ですが、Emacsユーザならこういうのはお手の物。

対象のテキストを読み込んだら先頭文字にカーソルを移動した後、
・C-x (
 でキーボードマクロ開始
・M-x end-of-line
 で最終文字へカーソル移動
・C-d
 で一文字削除
・C-x )
 でキーボードマクロ終了
・name-last-kbd-macro
 で適当な名前でマクロに名前を付けて(仮にcutcrという名前を付けることにします)
・[Esc]999 M-x cutcr
とすれば、一気に改行を削除できます。

Cinematicsの共有パス

続いて、Cinematicsのリストです。

共有パスは、
Cinematicsへの共有パス

リストは、
ディレクトリ名前
Cinematicsalch_gamewin.dat
Cinematicsalchemistintro.dat
Cinematicsdest_gamewin.dat
Cinematicsvanq_gamewin.dat
Cinematicsvanquisherintro.dat
Cinematicsvignette1.dat
Cinematicsvignette2.dat
Cinematicsvignette3.dat
Cinematicsvignette4.dat
Cinematicsvignette5.dat
Cinematicsvignette6.dat
Cinematicsvignette7.dat
Cinematicsvignette8.dat
Cinematicswarriorintro.dat

クエスト一覧

Googleドキュメントへのアップロードが完了したので、まずはクエスト一覧から公開。

クエスト一覧へのリンク(Googleドキュメント)
リンクをクリックすると、Googleドキュメントのクエスト共有アイテムが編集できます。
テキストファイルなので、ブラウザ上で編集できます。
編集履歴が残るので、あらかじめ編集用のGoogleアカウントでログインした状態、もしくはGoogleからログアウトした状態でクリックしてください。
ログアウト状態でも編集できます。


ディレクトリ名前
Questscompletedonce.dat
QuestsMinerDialog.dat
QuestsRandomPeople.dat
QuestsRetirement.dat
QuestsshowIntro.dat
Quests\Bardquest1.dat
Quests\BardRandombardRandom.dat
Quests\GargarRandomAcquire.dat
Quests\GargarrandomDefeatAcquire.dat
Quests\Hatchquest1.dat
Quests\HatchRandomHatchRandomAcquireCave.dat
Quests\HatchRandomHatchRandomAcquireCrypt.dat
Quests\HatchRandomHatchRandomAcquireFortress.dat
Quests\HatchRandomHatchRandomAcquireLava.dat
Quests\HatchRandomHatchRandomAcquireMine.dat
Quests\HatchRandomHatchRandomAcquirePalace.dat
Quests\HatchRandomHatchRandomAcquireRuins.dat
Quests\mistressRandommistressRandom.dat
Quests\Randomrandomquest01.dat
Quests\Randomrandomquest02.dat
Quests\StoryQuest\Cavecavedefeatboss.dat
Quests\StoryQuest\Cavecavept1.dat
Quests\StoryQuest\Cavecaverandomshakes.dat
Quests\StoryQuest\CompleteGamecompletegame.dat
Quests\StoryQuest\CompleteGamegamecompletedialog.dat
Quests\StoryQuest\CompleteGameORDRAKKILLED.dat
Quests\StoryQuest\CryptCryptFirstQuest.dat
Quests\StoryQuest\CryptcryptQuestDefeatBoss.dat
Quests\StoryQuest\CryptCryptQuestGhostDialog.dat
Quests\StoryQuest\CryptcryptSylEntersLib.dat
Quests\StoryQuest\Fortressfortressbossdefeat.dat
Quests\StoryQuest\Fortressfortressopengate.dat
Quests\StoryQuest\Fortressfortresspt1.dat
Quests\StoryQuest\Fortressfortresspt2.dat
Quests\StoryQuest\Fortressfortresspt3.dat
Quests\StoryQuest\IntroDefeatTheFirstBoss.dat
Quests\StoryQuest\Introintrotogamept1.1.dat
Quests\StoryQuest\Introintrotogamept1.dat
Quests\StoryQuest\Introintrotogamept2.dat
Quests\StoryQuest\Introintrotogamept3.dat
Quests\StoryQuest\Introintrotogamept3_Pet.dat
Quests\StoryQuest\Introintrotogamept4.dat
Quests\StoryQuest\Introintrotogamept5.dat
Quests\StoryQuest\Introintrotogamept6.dat
Quests\StoryQuest\Lavalavabossdefeated.dat
Quests\StoryQuest\Lavalavapt1.dat
Quests\StoryQuest\Palacepalace_SylThankYou.dat
Quests\StoryQuest\PalacepalaceAlricDead.dat
Quests\StoryQuest\Palacepalacept1.dat
Quests\StoryQuest\Palacepalacept2.dat
Quests\StoryQuest\Palacepalacept2_2.dat
Quests\StoryQuest\Palacepalacept3.dat
Quests\StoryQuest\PalacePalaceSavedSyl.dat
Quests\StoryQuest\ruinsbossbeat.dat
Quests\StoryQuest\ruinsglyph1.dat
Quests\StoryQuest\ruinsglyph2.dat
Quests\StoryQuest\ruinsglyph3.dat
Quests\StoryQuest\ruinsruinspt1.dat
Quests\StoryQuest\ruinsruinspt2.2.dat
Quests\StoryQuest\ruinsruinspt2.dat
Quests\StoryQuest\ruinsRuinsPt3.dat
Quests\StoryQuest\ruinsruinspt4.dat
Quests\StrataFlagsenteredcave.dat
Quests\StrataFlagsenteredcrypt.dat
Quests\StrataFlagsenteredfortress.dat
Quests\StrataFlagsenteredlava.dat
Quests\StrataFlagsEnteredMine.dat
Quests\StrataFlagsenteredpalace.dat
Quests\StrataFlagsenteredruins.dat
Quests\Vasmanquest1.dat
Quests\Vasmanquest2.dat
Quests\Vasmanquest3.dat
Quests\Vasmanquest4.dat
Quests\Vasmanquest5.dat
Quests\Vasmanquest6.dat
Quests\Vasmanquest7.dat
Quests\VasmanRandomAnotherPieceCaves.dat
Quests\VasmanRandomAnotherPieceCrypt.dat
Quests\VasmanRandomAnotherPieceDwarven.dat
Quests\VasmanRandomAnotherPieceLava.dat
Quests\VasmanRandomAnotherPieceMine.dat
Quests\VasmanRandomAnotherPiecePalace.dat
Quests\VasmanRandomAnotherPieceRuins.dat
Quests\VasmanRandomEmberExaminationCaves.dat
Quests\VasmanRandomEmberExaminationCrypt.dat
Quests\VasmanRandomEmberExaminationDwarven.dat
Quests\VasmanRandomEmberExaminationLava.dat
Quests\VasmanRandomEmberExaminationMine.dat
Quests\VasmanRandomEmberExaminationPalace.dat
Quests\VasmanRandomEmberExaminationRuins.dat
Quests\VasmanRandomEmberHunterCaves.dat
Quests\VasmanRandomEmberHunterCrypt.dat
Quests\VasmanRandomEmberHunterDwarven.dat
Quests\VasmanRandomEmberHunterLava.dat
Quests\VasmanRandomEmberHunterMine.dat
Quests\VasmanRandomEmberHunterPalace.dat
Quests\VasmanRandomEmberHunterRuins.dat
Quests\VasmanRandomPeerReviewCaves.dat
Quests\VasmanRandomPeerReviewCrypt.dat
Quests\VasmanRandomPeerReviewDwarven.dat
Quests\VasmanRandomPeerReviewLava.dat
Quests\VasmanRandomPeerReviewMine.dat
Quests\VasmanRandomPeerReviewPalace.dat
Quests\VasmanRandomPeerReviewRuins.dat
Quests\VasmanRandomtheEmberCollectorCaves.dat
Quests\VasmanRandomtheEmberCollectorCrypt.dat
Quests\VasmanRandomtheEmberCollectorDwarven.dat
Quests\VasmanRandomtheEmberCollectorLava.dat
Quests\VasmanRandomtheEmberCollectorMine.dat
Quests\VasmanRandomtheEmberCollectorPalace.dat
Quests\VasmanRandomtheEmberCollectorRuins.dat

2010年1月25日月曜日

Googleドキュメントへまとめてアップロード

Googleドキュメントはとても便利なのですが、アップロードとダウンロードがとても面倒。
あくまでも作業共有スペースとして使ってね、という意図がみえて、これはこれでよいのですが、今回のように英語→日本語翻訳の作業ベースとする場合は、元々のファイル群をまず配置したいもの。

で、本題。
Googleドキュメントへ手軽にアップロードする方法としては、
DocListUploaderというGoogleが配布しているアプリがあって、これを使うことで、エクスプローラからGoogleドキュメントへファイルをアップロード出来るようになります。
ただし、これが中途半端な代物でして、ファイルのアップロードにしか対応していなくて、フォルダごとアップロードが出来ないので今回はパス。

もうちょっとましなことをしたいとなると、APIをたたくか、JAVAのコマンドラインツールを使うことになるわけです。

ここから下は、コマンドプロンプトの基本的な使い方が分かることを前提に書いてあります。
不明な点があればコメントでどうぞ。

Google Docs Batch Upload

これが目的のGoogle Docs Batch Uploadです。

まずは、JRE1.6が必須なので、コマンドプロンプトから
$>java -version
として、バージョンを確認しましょう。1.6以上ならOK、それ未満なら、1.6をインストールしておきましょう。
ここまできたら、後は簡単で、
$>java -jre google-docs-upload-1.3.1.jar アップロード対象のパス --username ユーザ名 --password パスワード --recursive
とすれば、アップロード対象のパスにあるサブディレクトリを含めた全ファイルがGoogleドキュメントへアップロード出来ます。

今回は、特定ディレクトリ(フォルダ)以下を全部アップロードしたかったので、使っていませんが、
コマンドラインオプションの--remote-folderでアップロード先を指定したり、
--skip-allで差分アップロードが出来たりしますので、用途によって使い分けると良いでしょう。
コマンドラインオプションの一覧は、Google Docs Batch Uploadで確認出来ます。

このブログについて

Torchlightが日本語化出来るようなので、翻訳して頂ける方々に作業環境を用意しました。

作業は、Googleドキュメントベースで出来るようにしてありますので、WebブラウザとGoogleのアカウントさえあればOKです。



Googleドキュメントへはデータのアップロード中なので、共有アドレスは後ほどお知らせします。