2017年11月15日水曜日

Firefox57を使ってみた雑感

ついにFirefox57が一般公開ですねえ。
ブランド名やアイコンまで変えて、今度からはFirefox Quantumだそうです。
ブランド名変えるくらいならIEとEdgeみたいに両方メンテしてくれたらいいと言いそうになりますが、まあそうもいかないでしょうね、体力的にも。

まあ、覚悟はしていましたが、これだけ準備期間があってもadd-onがやっぱりというか、なんというか、ご愁傷様モードですね。

とりあえず、Windows10の低DPI環境でもサイドバーに並べたブックマークがにじまないフォントを採用したことは、まことにご同慶の至りです。
ただ、こんなに行間がスカスカでしたっけ?

一応、サイドバーのブックマークの行間を調整するには、以前この記事のコメント欄でご紹介した方法を再掲しておきます(本文中ではなかったので念のため)。
[プロファイルフォルダ]/chrome/userChrome.css にコピー&ペーストしてご利用ください(緑の背景部分ではなく、どこでもいいので文字の部分をダブルクリックしますと全選択できます)。
1
2
3
4
/* サイドバーの行間を狭くする */
treechildren.sidebar-placesTreechildren::-moz-tree-row{
  height:1px !important;
}
こんだけです。

***2018/01/28追記***
以下の件はFirefox58から利用できなくなったようです。
***追記ここまで***

次に困ったのは、Googlebar Liteというadd-onを愛用していたので検索履歴を使う癖がついていたのですが、素のFirefoxだと検索履歴にアクセスするためには、検索ボックスにフォーカスを合わせてから↓キーを押下しないと履歴が出ないという間抜けな手間が必要だということです。
これも、userChrome.cssにちょっと追記するだけで、検索ボックスに下矢印ボタンを追加してマウスだけで検索履歴が表示できるようにすることができます。
1
2
3
4
5
/* 検索ボックスへ検索履歴ボタンの追加 */
#searchbar .autocomplete-history-dropmarker {
    -moz-binding: url("chrome://global/content/bindings/autocomplete.xml#history-dropmarker");
    display: -moz-box !important;
}
但し、検索ボックスに1文字でも何か文字が残っていると、履歴が出ませんので空欄にする間抜けな手間がいります。

あと、他ブラウザに倣ってコンテンツの表示にメイリオを採用を採用したようなのですが・・・なにやら妙に太い。太ましい
まるでEdgeのようです。というよりEdgeに合わせたのかな?
VivaldiやChrome(Blink系) は同じメイリオの16ポイントでもここまで太くないんですが、妙に太いですねえ。

これはフォントを変えればいいだけですからいいんですが、56までの標準だったMS Pゴシックのほうがきれいに見えるのはなぜでしょう??
またもや開発者がこれまでのように高精細環境でしか使ってないから游ゴシックをそのまま採用した時と同じ思考回路なんでしょうか。
高DPIだと太くないときれいに見えないから、的な。
まあ、Windowsのデスクトップ環境がまだ2桁DPIが主流ってのもいつまで続くかわかりませんし、作る側の勝手ですわな。

ま、以上、たわごとでした。
以下、うわごとです。

add-on製作者さんももうFirefoxを使ってないんでしょうね。
なんとかしてでも自分のadd-onを高い学習コストを支払ってでもWebExtentionに移植するというモチベーションが(今のところ)わかないものとお見受けします。
まあ、実際問題としてWebExtentionでは従来通りの仕様を実現できないadd-onが多いのでモチベーションを高められないんだと思います(それに仮に同じWebExtentionを使うadd-onを作るならシェアの高いchrome向けを作るでしょうねぇ)。

有用だったadd-onがここまでバッサリ消えてなくなってしまうと、同じように機能拡張が全然振るわないMicrosoft Edgeよりも不利かもしれませんね。EdgeはOS標準搭載ですからねえ。

まあ、ここまで互換性を無視して実現した挙句に我らの前に姿を現したFirefoxはブランド名をFirefox Quantumと改め、そしてタブを4ケタ開いても早いとかどうとか、一般ユーザにはまるで意味不明な売り文句といった批判もありますが、MozillaのCEOが言うところのビッグバンのbangがどこで炸裂[する|した]のかは今後のお楽しみであります。

まー、一度に読めるページはひとつなんだからタブなんて1つしか開かないわね。
同時に参照する必要があるならタブじゃなくて横か縦にウィンドウを並べるわねえ。

そもそも、IE以外で速度的にイラついたり困ったりすることなんてもう何年も経験していないし。

Firefox作ってる人たちってWindowsではFirefox使ってないんじゃないかな。

いやあ、add-onのないFirefoxってホントわざわざ別途にインストールする気が起きない程度にごく普通のブラウザですねえ。
シェアが取れないわけだなぁ、と妙に納得してしまいました。
普通の人はアドオン入れたりしないまま使う人も多いだろうし、それならIEかEdgeか、なんだか流行りのchrome使いますわな。

でも選択肢は広いほうがいいので、個人的にはFirefoxには窒息しない程度に生き残ってもらえればうれしいですねえ。
まあ、自分から劣化Chrome化を目指しているのではないかという指摘もあるやらないやら。
しかしながらまだまだレンダリングエンジンが違うよ!今度はQuantumだよ!!という売りがありますから、どこまで大向こうに受けるのかは少々気になるところです。

以上、譫言までお読みいただきまして誠にありがとうございました。

2017年10月29日日曜日

SteamWorld Dig 日本語化

*** 2022/01/16 追記 ***
Don't BE EVILの社是でおなじみのGoogle様が勝手に人様に迷惑がかかる形で仕様変更しやがってくださいましたファイルのダウンロード先リンクの更新に対応しました。
いつも利用していますありがとうございますGoogleさま!!

何かの間違いだと思うのですが、なんだかんだでパラパラと結構な数の権限要求リクエストを頂戴しましたために、今さらの対応の運びとなりましたことをお詫びするとともにお役に立てれば欣快と心得ます。
なお、繰り返しになりますが何かの間違いだと思うので敢えてことさらに申し上げますが、steam版などは公式で日本語化されているため、このファイルは必要がないということにご留意いただければ幸いです。
元記事にもございます通り、Originでの無料配布版でしか試していません。
以上、よろしくお願いいたします。
*** 追記ここまで ***

過日、Originさんから無料でいただいた表題のゲーム、貰うだけもらっといて放置しといたのですが、Hegemony Romeも単調すぎてもうやる気がしないので日本語化できないかやってみました。

例によって作業シートはこちらです。
フォント生成ツールはこちらです(作業シートのTSVファイルからBundlePC/Language/en.csvに変換するスクリプト、およびシートから変換してフォントを一括生成するバッチサンプルも同梱してあります)。
    導入手順
  1. (Windowsのみ)Windows Subsystem for Linuxを導入する(bashとperlのため)。
    (LinuxおよびMac)monoをインストールする(EXEのため)。
  2. BundlePC/Fontsの中身およびBundlePC/Language/en.csvバックアップする
  3. BundlePC/Fontsにフォント生成ツールをダウンロードする
  4. ダウンロードしたフォント生成ツールを書庫フォルダ名のディレクトリ中に展開する。
  5. BundlePC/Fonts/SteamworldDigFontBuilder/SteamworldDigFontBuilder/scripts/を開く
  6. 作業シートのen.csvシートTSV形式でダウンロードし、ja.tsvという名称でBundlePC/Fonts/SteamworldDigFontBuilder/SteamworldDigFontBuilder/scriptsに保存する。
  7. makefonts_example.batを起動する(フォント名やサイズは適宜変更のこと)
LinuxまたはMacOSで作業する場合、EXEが.netなのでMonoを導入してください。また、バッチ中のパス区切り文字を\から/へ修正し、環境変数定義をそれぞれご利用のシェルに合わせてください。
Windowsで作業する場合、宗教上の理由やエディションの関係等でWindows Subsystem for Linuxを導入しない場合、バッチmakefonts_example.batbash -c で始まる行を削除し、別途perlが動作する環境(たとえば、Git for Windowsとか、Cygwinとか、VMWareでCentOSとか)でbash -c 以下で定義されているperlスクリプトを実行して成果物を生成してからバッチを起動してください。生成されたen.csvはBundlePC/Languageに、code.listはBundlePC/Fonts/SteamworldDigFontBuilder/SteamworldDigFontBuilder/scripts/ ディレクトリにそれぞれ配置してください。

なお、生成するフォントのオリジナルがファイル名を.orgを付与してBundlePC/Fontsに存在する場合(speak.org.fnt, speak.org.pngなど)、そのオリジナルフォントを生成するフォントに取り込みます
    死んでもperlやバッチファイルを使いたくない人向け作業手順
  1. 作業シートのD列またはC列の内容をBundlePC/Language/en.csvファイルにコピー&ペーストする。バックアップを忘れずに。
  2. BundlePC/Fontsに書庫内のEXEを取り出して配置する
  3. EXEで各フォントを生成する。バックアップを忘れずに。
    例えばspeak.fntの場合:
    SteamworldDigFontBuilder.EXE /batch /title speak /fontname "Meiryo" /fontsize 20.0 /color1 0xFF321402 /color2 0xFFFFFFFF
    EXEをコマンドラインオプションをつけずに起動するとGUI画面から対話的にフォントを生成できます
  4. 3.をmainmenu.fntなど日本語表示が必要なフォント分繰り返す。(但しゲーム中未使用の文字もフォント化するので馬鹿でかくなります)
    フォントやサイズ、色は適宜変更してください。
スクリプトの詳しい使い方はスクリプトの頭のコメントを、EXEのそれはREADME.mdをそれぞれご覧ください。

とりあえず成果としては現状こんな感じです。

なんだ簡単そうじゃん、と言われちゃうとそうかもしれません。
確かにテキストデータはCSVファイルで編集は極楽。アクションゲームらしいので大した訳文もなし。ぶっちゃけ訳す必要すらなさげです。

が、それでも敢えて日本語化したいといったときに問題が一つ。

フォントが、PNGファイルと、そのPNGファイルに描画されている文字を管理するファイル(拡張子:.fnt)でペアになっているというめんどくさーいパターンなのです。

しかも管理ファイルが独自のバイナリ形式だったりします。
まず日本語化にはこの管理ファイルの構造から解析をしなくちゃなりませんでした。
しかし、フォント画像がpng中にあるわけですから、管理ファイルの構造さえわかってしまえば自家薬籠中の物となるわけです。

金曜から始めてfntファイルをバイナリエディタで眺めたり、cでfread()を並べてすったもんだの挙句、fntファイルの構造がだいたいわかり、上記の動画を製作するまでにはなりました。

1文字あたり30バイトの固定長レコードで構成されている構造で、かつリトルエンディアンだということはすぐにわかったのですが、その30バイト中にどういう情報が格納されているのかわからないのでバイトの区切りが分からず、そのあたりは苦労しましたが、結局単精度浮動小数のバイナリ表現だと気づけた段階でほぼ解析終了となりました。気づくまでが長くて己の無能さをかみしめていますが。

fntファイルのフォーマットをまとめるとこんな感じです。
    A)ヘッダ(可変長)
  1. magicword 4bytes ( bfmt ) 
  2. 16bit整数 収録文字中の最大高?
  3. 32bit整数 0x20 全ファイルに収録されるホワイトスペースの文字コードか?
    (最小の文字コードでもあるので開始文字コードかもしれない)
  4. 16bit整数 対応するpngファイル名長
  5. 4)で定義された長さのpngファイル名
  6. 16bit整数 fntファイルに格納されているフォント情報レコード数
    B)フォント情報レコード(固定長32bytes)
  1. 32bit整数 文字コード
  2. 単精度浮動小数 png画像中の文字画像の左上隅X座標
  3. 単精度浮動小数 png画像中の文字画像の左上隅Y座標
  4. 単精度浮動小数 png画像中の文字画像の幅
  5. 単精度浮動小数 png画像中の文字画像の高さ
  6. 単精度浮動小数 png画像中の文字画像のXベアリング
  7. 単精度浮動小数 png画像中の文字画像のYベアリング
  8. 32bit整数 png画像中の文字画像のアドバンス幅
    C)謎(4bytes)
  1. (all 0)
    末尾に00 00 00 00がつくのですが、これは何かの個数を表している気がしますが、日本語は固定ピッチなのでなんかカーニングやら合字とかの情報だったとしても何の役にも立たないのでほっといていいと思います。
ここまでわかってしまえば、あとはpng画像を生成するだけ・・・
といっても、日本語の場合、JIS第一第二水準の漢字にひらカナ、記号、全角数字があり、さらに半角文字やゲーム中にもともと用意されているLatin系の文字を加えてリスト化してみると7000文字を超えました。
超えましたが、まあ、リストを作る作業自体はさらっと(でもないけど)スクリプトを書いてしまえばおしまいなので数時間で終わりましたのでいいとして、この数はどうかと。
png生成処理も最初はImageMagickでやっちゃおうと思っていましたが、ImageTragickがらみでpolicyをいじったり正確なフォントのレンダリング後のサイズが把握しづらいなどもあって、結局C++でGDIゴリゴリより楽で、かつある程度バイナリも扱いやすい(?)C#で書いてしまいました。
本来は翻訳済みファイルに使用されている文字だけ抽出すりゃいいのでしょうが(※2017/11/01 必要文字のみフォント化に対応しました)、翻訳より先にフォントファイル解析および作成作業に入ってしまったこともあり、C#を採用したせいでコーディングもあっけなく終わったので、しゃらくさいのでこいつら全部をフォントファイルとして生成してしまいました。

そのため、生成されたfnt+pngのペアを配布できません。
7000文字を超えるすべての文字を網羅するフリーのフォントを知らないからです。

ですから、もしやる気があるなら、fnt+pngのペアを生成するプログラムを公開しますから、手動で生成していただくことになります。

プログラムの使い方は、見ればわかります。
わからない場合はソースも添付しますので、そちらをご覧ください。SteamworldDigFontBuilderクラス以外は枝葉末節で、SteamworldDigFontBuilderクラスの長さはコメントを抜くと100行ちょいで大変簡単なプログラムなので万が一読む気になっても特に面倒くさいところはないと思います。

以上です。

2017年10月4日水曜日

Hegemony Rome: The Rise of Caesar 日本語化 進捗状況

日本語話者でやってる人いるのこれ?

ま、昨日より日本語化し始めたHegemony Rome: The Rise of Caesarですが、とりあえず概ね機械翻訳にかけ終えました。

和訳作業シートから生成されたlanguage.strはこちらからダウンロードいただけます(※これは最新版ではない可能性が極めて高いです。できればシートを直接ご利用ください)。

どんな感じになるか、スクリーンショットを取るのも面倒なのでイントロからゲーム開始までを撮影してみました。

この記事よりシートのほうが更新日時が新しければ、それはメンテナンスがかかってるということなのでそういう意味で記事にしときます。

*** 2017/10/16 追記 ***
DLCの翻訳も作成しましたので、各DLCのlanguage.strのダウンロード元を追記します。


*** 追記ここまで ***

具体的な成果物(日本語化作業シートのこと)からlanguage.strに落としてご利用くださいませ。

以下無駄口。

しかしまあ、文章本文中にhtmlのタグをまねた似非タグが散りばめられているのですが、これがまた極めて厳密。
等号の右辺と左辺の間にスペースがあるとゲームがクラッシュ。
タグを閉じ忘れてもゲームがクラッシュ。

機械翻訳の結果をそのまま掲載できない(タグの処理がグダるため)ので、手動でタグをつけたり外したりという手間を考えると、これをとりあえずはざっとでも機械翻訳にかけ終えられたのは奇跡ですわ。

とはいえ、まだタグの閉じ漏れなどが多数残っているようで、抜けやタグの閉じ忘れなどの見直しが必要ですが、とてもじゃないが手が回りません。
タグの閉じ忘れチェックツールを書く必要がありそうです。
とりあえずもうクラッシュはしないとは思います(2017/10/05)。

それと、google翻訳先生にお任せしている翻訳作業ですが、これがまあひどいひどい。
日ごろに輪をかけてすごい。

Ambushがマダムスタンドという訳文になったのはもう本当にうんざりしました。
誰かがそういう訳をgoogle翻訳に教え込んだんでしょうが・・・意味わからん。そもそもマダムスタンドってなんだろう??

そのほか、ゲルマンがドイツ人だったりガリアがゴールはいいとして、特にガリアの訳が挙句の果てはガリックだのゲーマーだのガルだのガールだのゴルだの、その他ありとあらゆるカタカナでこれでもかというほどバラエティ豊かな表現ぶり。
最終的には一括置換でもいいので訳語を統一しないといけませんね、誰かが

あとは表示領域内に収まりきらない文が勝手に切り捨てられるという現象も一部で見られているので、これを収まる訳文にブラッシュアップするなどの手間もかけないといけなさそうです。誰かが

最後にはローマ風に上院という訳文を元老院にするとか地名や民族名を英語読みから当時の呼び名にしたりサソリと訳されちゃうスコルピオなどのローマが誇る攻城兵器の名前を統一したりできればカンペキですが。。。カエサルがカールになったりシーザーになってるのをどうにかするのも必要ですね。誰かが

まあ、なんちゅうか。日本語話者でやってる人いるのこれ?(repeated)

今まで手掛けた和訳でも最も需要がないことが見え見え・・・しかもゲーム自体をやってないので面白いのかどうかも不明。我ながら極めて間抜け。

ここまでやったらもうガウル、ガリア、じゃなくてゴールしていいかなぁ
でもboldで書いた誰かって、私ですよねぇ

いつもなんでこういうことしちゃうんだろ。

2017年10月3日火曜日

Hegemony Rome: The Rise of Caesar 日本語化作業シート

和訳作業シートはこちらです。
イヤな目に会った前例により、匿名の方の直接の編集はお断りしております。編集権が欲しい方はシートへのコメント、またはこちらのコメント欄よりご請求ください。
どうしても編集したいけど匿名でいたい方はご自分のドライブにコピーする権限は付与してございますので、コピーなりダウンロードなりしたうえで利用ください。

まだ先日購入したバンドルのうち一作もやってないんですが、その一つのHegemony Rome: The Rise of Caesar、だれも手を付けていないけれど、日本語化できそうだネってな具合で手を付けてみたら極めて優秀な多言語対応ぶりで感動しました。

思わず作業シートと、作業シートからlanguage.strを再生成するスクリプトを作ってみたところ、結果は良好です。
例えば、ローディングスクリーンではこんな具合。ごめんね、機械翻訳でごめんね。
ナレーション画面だとこんな感じ。
デフォルトフォントだと中華系のフォントが入っていて日本語で使われる文字の収録数が少ないため、やたらと豆腐になるのですが、フォント設定(fontregistry.xnt)を変えるだけで上のサンプルのようにバッチリ日本語がきれいに表示されています。なお、上記のサンプルで使用したフォントはmeiryoです。
蟹行文字文化圏にありがちな文字間に(日本語では不自然な)空白を入れる必要もなく、極めて優秀、単純に翻訳するだけでおしまいなパターンなんてめったにありませんのでなんだかうれしくなっちゃいますねえ。

こんなに簡単に日本語化できるんならだれかやっててもよさそうなのに誰もやってない。
つまり・・・そういうことなんでしょうねえ。

なお、私自身もゲーム自体はやってないですしやるかどうかもわかりません。
やけにメモリ食うし動作も軽快とは見えないし、何よりマウスカーソルを奪ったらキーボード操作を介さないと放してくれないという、まるで20世紀に作られたかのようなプログラムなので、私の好みにまったくあいません。
ゲームの内容を理解する前に放棄するんじゃないかなあと思っています。そもそもバンドルについてきたってだけでのご縁ですので、いまだにどんなゲームかもまだ知らないですし。

余談ですが、google translateはローマ史が苦手みたいですね。
ガリアを正しくガリアと表記できたパターンがほとんどなくガウルだったりガールになってみたり、さらにはヴェルティンジェトリックスや小カトーなどは翻訳すらできないケースもちらほら散見されます。
まあ、アメリカだからいいのかな。ヨーロッパだったら許されない気もするけど。

ま、このまま機械翻訳を進めても、この調子じゃどうしようもないかもしれませんねぇ。

とりあえず、作業シートのTSVからlanguage.strを再生成するスクリプトは以下です。
注意点:
  • 以下の作業はHegemony Rome\Resources\Entitiesで行ってください。
  • オリジナルのlanguage.strはlanguage.str.orgにリネームする。
  • 作業シートの1行目および、全行のカラムA,B,C,Dは変更不可(下記のE,F列にある翻訳結果をlanguage.strに反映するために使用するためです)
  • カラムEに機械翻訳(必須。英文のままでも構いません)、カラムFに手動翻訳(空欄可)があること
  • 上記の点に留意なさって、作業シートを開いてコピペしてa.tsvというファイルとして保存。ダウンロードではない点に注意。
そのうえで以下のスクリプトを実行した結果をlanguage.strにリダイレクトして保存します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
#!/usr/bin/env perl -w
#
# Hegemony Rome: The Rise of Caesar用
#  日本語化language.str生成スクリプト
#
# 引数: 日本語化済tsvファイル名
#   ハイフン: 標準入力
#   省略時  : a.tsv
#   ※tsvの内容は以下のシート内容をCtrl+Aで全コピーした内容を保存したファイル
#     https://docs.google.com/spreadsheets/d/1ZxyFLIHI7GFTSxWfHxfhY601CNAkSZZdEaymD6WYeAU/
# 必要データファイル(実行ディレクトリにあること):
#   language.str.org (オリジナルのlanguage.strをリネームしたもの)
# 出力先: STDOUT (language.strにリダイレクトして使用)
#
our $LANGUAGESTRMADEDATE=`LANG=C date`;
sub conbined_text_decode
{
  my $str =$_[0];
  my @arr = split( /\t/m, $str );
  my $text = $arr[4];
  if( defined( $arr[5] ) && $arr[5] ne "" && $arr[5] ne "\n" && $arr[5] ne "\r\n"){
    $text = $arr[5];
  }
  $text  =~ s/"//mg;
  $text  =~ s/"/\"/mg;
  $text  =~ s/\\t;/\t/mg;
  $text  =~ s/\n\n$/\n/mg;
   
 
  $text =~ s/%%%LANGUAGESTRMADEDATE%%%/$LANGUAGESTRMADEDATE/;
  return $text;
}
sub tag_check
{
  my ($indexno,$line) = (@_);
  my $str = $line;
 
  my $pre  = $str =~ s/<//g;
  my $post = $str =~ s/>//g;
   
  if( $pre != $post ){
    print STDERR "$line $pre vs $post TAG ERROR index=$indexno\n";
  }
}
my @TSV=();
my $combinedline="";
my $mode = 0;
my $translate_indexno = 0;
my $lineno = 0;
my $isfirst = 0;
my $INPUTFNAME=$ARGV[0];
my $FH = *STDIN;
if(!defined($INPUTFNAME)){
  $INPUTFNAME="a.tsv";
}
if( $INPUTFNAME ne "-" ){
  open (FIN_TSV, "<$INPUTFNAME") or die "can't open tsv $INPUTFNAME";
  $FH = *FIN_TSV;
}
while(<$FH>){
  my $line = $_;
  my @arr = split( /\t/,$line);
  if( $arr[0] eq "#lineno" ){
    next;
  }
  if($isfirst ==0){
    $combinedline = $line;
    $isfirst  = 1;
    next;
  }
 
  if( $#arr >= 2 && $arr[0] =~ m/^\d+$/ && $arr[1] =~ m/^\d+$/ ){
    @arr = split( /\t/,$combinedline);
    $translate_indexno = $arr[1];
    $TSV[ $translate_indexno ] = conbined_text_decode( $combinedline );
    $combinedline = $line;
  }
  else{
    $combinedline .= $line;
  }
}
my @arr = split( /\t/,$combinedline);
$translate_indexno = $arr[1];
$TSV[ $translate_indexno ] = conbined_text_decode( $combinedline );
if( $INPUTFNAME ne "-" ){
  close(FIN_TSV);
}
 
 
$combinedline="";
$mode = 0;
$translate_indexno = 0;
$lineno = 0;
open (FIN, "<language.str.org") or die "can't open language.str.org";
while(<FIN>){
  my $line = $_;
  $lineno++;
  if( $line =~ m/^%%LANGUAGE=en[\r\n]+/ ){
    $mode  = 1;
    print $line;
    next;
  }
  if( $mode  == 1 && $line =~ m/^%%STRING=<<HEREDOC[\r\n]/ ){
    $mode  = 2;
    $combinedline="";
    print $line;
    next;
  }
  if( $mode == 2 ){
    $translate_indexno++;
    $mode = 3;
    $combinedline = "";
  }
  if( $mode == 3 ){
    if( $line =~ m/^HEREDOC[\r\n]/ ){
      if(defined( $TSV[ $translate_indexno ])){
        tag_check( $translate_indexno, $TSV[ $translate_indexno ] );
        print $TSV[ $translate_indexno ];
        if( $TSV[ $translate_indexno ] !~ m/\n$/ ){
          print "\n";
        }
      }
      print $line;
      $mode = 0;
    }
    else{
      $combinedline .= $line;
    }
    next;
  }
  elsif( $mode == 0 ){
    print $line;
  }
}
close(FIN);
使い方はスクリプトの井桁(#)が並んでいる冒頭部分にあります。同じものがシートの備忘録にもありますので、そちらのほうが分かりやすいかもしれませんのでご覧ください。
いやあ、どんなOS(Windowsですら)でもperlがのってないOSはない時代になったので説明が楽でいいですわ。

結果だけ欲しい?
私もです。
まあ、翻訳元文が3,648文もあるんで、暇を見つけて機械翻訳にかけていきたいと思ってはいます。
そしてゆくゆくは機械翻訳版language.strを直接ダウンロードできるようにはしたいと、まあ・・・どうかなぁ。やらない気がするゲームなのでモチベーションは正直申し上げてかなり低いです。特に原文を機械翻訳にかけて結果をシートにペーストするような単純作業といった場合、モチベーションの低さが作業量に直結することは率直に認めます。

我こそは訳出するゾ、という方がおいでであればぜひよろしくお願いいたします。
ま。過去の例で一人も出てきたことはないうえにCapitalism Labでは古い古いと苦情ばっかりみたいなので申し訳ないです。そのために作業シート、変換ツール、ノウハウまで公開してんだろ。自分でやれよ

2017年10月2日月曜日

Steamでローマバンドルが85%引き

いったい何をとち狂ったのか、Steamでローマバンドルが85%引きだったというだけで買ってしまったようです。

その中身は

  • Imperium Romanum: Gold Edition
  • Hegemony Rome: The Rise of Caesar
  • Grand Ages: Rome
の豪華DLC込み三本立てで\843也。

うーん、そもそもやる時間あるのかな、てな具合に頭を抱えても後の祭り。

しかも、いくら安いからといっても、インペリアルローマ、日本語版(カプコン版)持ってるのにどうすんのこれ、しかも英語版だし全画面じゃん・・・

とりあえず、インペリアルローマですが、懐かしいので起動してみましたが、いくら昔やったことはあるので英語はいいとしても、全画面はやっぱりキツイです。
そこで昔使っていたD3DWindowerをWindows10で使ってみようとすると、管理者として起動してもグローバルフックに失敗しましたと言われて使えませんでした。
古いOSで起動すると使えるので、Windows10のBuild15063ではなにか仕様変更が入ったのかもしれません。セキュリティがどうとかこうとかでしょうかねぇ。
なんだかんだで試した挙句、DxWndで窓化できましたので、とりあえずは全画面の悪夢はまぬかれそうです。

そうなると、今度は日本語版持ってんのに英語版はどうなのよ、と思うわけです(そうかな?)。
確かにCD-ROMを入れなくていいので、Steam版でプレイできるならそちらのほうがいいとおもいますので、日本語化で検索してみるとありました
あったのですが・・・Autoが自動車だったりして機械翻訳をモロそのまま採用しておられる。
作者さんとしては「ここまでやったんだから訳ぐらい自分でやれ」という声が聞こえて来る気がします。

確かにその通りと思います。

私が過去に手掛けたゲームの和訳はことごとく結果だけクレクレ様しかおられないことは過去の経験で分かりますし、この機械翻訳文を公開しただけでも相当な手間がかかっていることもわかりますので、この仕組みをご提供いただけで感涙です。

しかし、訳文なんぞ誰でも改善できるわけです(しないままクレクレうるさい人が多いのは事実ですが)
すごいのは英語版では日本語表示できないのを何とかしてしまっておられるところ。
これはスバラシイ。

そこで、わたくしとしてはさらにスバラシイ翻訳を用意・・・なんぞしませんねぇ。
なんせ日本語版が手元にあるので、それを流用しちゃえばいいわけです。

日本語版の言語ファイルはJapanese.hpkにパックされていますが、hpkは単なるアーカイブファイルなので展開すると中身を取り出すことができます。
なので、English.hpkとJapanese.hpkを展開して比較すると、訳出されている文言はEnglish.hpkに含まれている文言はすべてJapanese.hpkに含まれており、さらにJapanese.hpkに含まれている訳文のほうがさらに多くの文を訳出しており、かつ、画像も日本語化してあることが分かります。
English.hpkとEnglish08.hpkのtextの差分はたった一文でした。

展開したファイルをそのまま利用するだけで昔懐かしいインペリアル・ローマが、CDROMなしで起動して目の前に現れました。
まあまだちゃんとプレイまではしてないんですが。(このままやらないかもしれない)

英語版のプログラムで日本語フォントを表示できるようにしてくださったishioさんに感謝いたします。

以上、日本語版と英語版を持ってる人にしか役に立たない情報でした。

次に、Grand Ages: Romeですが、これは検索してみると日本語化されているようなのでとりあえず措いておくとして、Hegemony Rome: The Rise Of Caesarはざっくり検索しても日本語化情報は見当たりませんでした。

で、ダウンロードしてディレクトリ構成をあさっていくと、Hegemony Rome\Resources\Entities配下に配置されているファイルに日本語をそのままUTF-8で記述して起動すると字幕を含めて日本語で表示されてることを確認できました。
まあ、一部の文字は化けるんですが、フォントの問題でしょうから最悪ひらがなでも何でもいいわけで。

バンドルでついてきただけなのでどういうゲームかもわからないので(わからないのに普通金払うかね)やるかどうかもわかりませんが、誰も手掛けていない様子ですので、気が向いたら例のCapitalism Labをはじめとしたいつものシートを作成して機械翻訳にかけて日本語化する仕組みを構築するかもしれません。というより、する気です。
だが今日ではありません。

積みゲーばっかり増やしてどうるのだか自分でもわかりません。

2017年9月29日金曜日

改訂版: Big Farm 造船所 dockyard まき餌およびマーメイドベイ新規追加料理の付加価値の対比

2017/09/28にGGSは遠洋漁業の仕様をまた変えました。
バランスだの遠洋漁業での漁獲を絶対売らせないなどと大口をたたいていた割には、あっさり口ほどもなく戻した点が大きな変更となっています。
ただし、販売単価は桁違いに下がっています。

そこで、以前の記事の内容を改めて再計算してみました。

まずまき餌から。
結論だけを言えば、まき餌は直売した場合は黒字になりません。
あからさまに魚市場への出荷への足手まといになるようにデザインされています。
個々のまき餌ごとの表は以下となります(表示域の都合で2表に分かれています)。
まず生産条件および費用は以下です。

まき餌生産費用
餌生産原料原料数原料費生産費用生産時間
(min)
生産個数費用/個
まき餌カキ230001002913100
まき餌メカジキ150005002951100
まき餌アサリ131560010029115700
まき餌ニシン354001002915500
まき餌ロブスター250001002915100
まき餌サーモン140002002922100
まき餌マグロ381001002918200
まき餌エビ171700010029117100
まき餌タラ270001002917100
カキのまき餌カキ345001504314650
アサリのまき餌アサリ192280015043122950
エビのまき餌エビ252500015043125150
ニシンのまき餌ニシン590002005719200
マグロのまき餌マグロ41080020057111000
ロブスターのまき餌ロブスター41000025072110250

上記の表を踏まえた利益、というより損失は以下です。(小数点第二位以下切り捨て)

餌生産原料売却益/個売却益/回売却益/時売却益/原料売却益/時/原料
まき餌カキ-2100-2100-4,344.83-1,050.00-2,172.41
まき餌メカジキ-100-500-1,034.48-500.00-1,034.48
まき餌アサリ-14700-14700-30,413.79-1,130.77-2,339.52
まき餌ニシン-4500-4500-9,310.34-1,500.00-3,103.45
まき餌ロブスター-4100-4100-8,482.76-2,050.00-4,241.38
まき餌サーモン-1100-2200-4,551.72-2,200.00-4,551.72
まき餌マグロ-7200-7200-14,896.55-2,400.00-4,965.52
まき餌エビ-16100-16100-33,310.34-947.06-1,959.43
まき餌タラ-6100-6100-12,620.69-3,050.00-6,310.34
カキのまき餌カキ-3650-3650-5,093.02-1,216.67-1,697.67
アサリのまき餌アサリ-18950-18950-26,441.86-997.37-1,391.68
エビのまき餌エビ-20650-20650-28,813.95-826.00-1,152.56
ニシンのまき餌ニシン-5200-5200-5,473.68-1,040.00-1,094.74
マグロのまき餌マグロ-7000-7000-7,368.42-1,750.00-1,842.11
ロブスターのまき餌ロブスター-5750-5750-4,791.67-1,437.50-1,197.92
軒並みまっかっか。

長大な生産時間を科すことで魚市場への出荷を抑制しつつ、かつプレイヤーにわたるドルをも抑制することができる画期的な価格設定となっています。
まあオーダーを受けるか蹴るかの参考になれば幸いです。

ついでに新メニューの生産原価が変更されているので、こちらも再計算しました。


シーフードシチュー(lv6)
販売単価生産数/回生産時間売上/時
$21,562.00108$26,952.50
費用科目単価数量まき餌にした場合の利益/時
カキ$1,500.0010-$21,724.14
アサリ$1,200.0010-$13,916.77
ロブスター$2,500.005-$5,989.58
生産費用$21,562.001
利益/回利益/時まき餌にした場合の利益/時/品目数
$154,558.00$19,319.75-$13,876.83

シーフードフライバイキング(lv6)
販売単価生産数/回生産時間売上/時
$31,678.00108$39,597.50
費用科目単価数量まき餌にした場合の利益/時
ニシン$1,800.0010-$10,947.37
マグロ$2,700.005-$9,210.53
エビ$1,000.0010-$11,525.58
生産費用$31,678.001
利益/回利益/時まき餌にした場合の利益/時/品目数
$243,602.00$30,450.25-$10,561.16

レアフィレ(lv7)
販売単価生産数/回生産時間売上/時
$84,140.00118$115,692.50
費用科目単価数量まき餌にした場合の利益/時
メカジキ$5,000.006-$6,206.90
サーモン$4,000.006-$27,310.34
タラ$3,500.006-$37,862.07
生産費用$84,140.001
利益/回利益/時まき餌にした場合の利益/時/品目数
$766,400.00$95,800.00-$23,793.10

魚の缶詰(lv7)
販売単価生産数/回生産時間売上/時
$44,921.00118$61,766.38
費用科目単価数量まき餌にした場合の利益/時
マグロ$2,700.005-$9,210.53
サーモン$4,000.006-$27,310.34
ニシン$1,800.004-$4,378.95
生産費用$44,921.001
利益/回利益/時まき餌にした場合の利益/時/品目数
$404,510.00$50,563.75-$13,633.27

製品単価は変わっていませんが、魚の販売単価が桁違いに下がっただけで以前に比べて利益が出るようになったように見えるだけのことで、実際のところは漁船で釣るコストで計算する場合は船体費用も漁具費用も変更はありませんから何も変わっていません。

生産時間を考慮すると、結局ほとんどの魚はそのまま売り払うことになるため、まあ気休めに作る感じでしょうか。

以上です。