OMORIのModの日本語化は地獄

技術的なことしか話しません

突然の愚痴です

OMORIのModを日本語化する作業はマジで手間取ります

全部OMOCATとPLAYISMが悪い

まあもともとModなんて作られる前提で開発してたわけじゃないから仕方ないけどね

英語版と多言語版で追いついてない差異が多すぎる

まずこれです

英語版は一番バグも少ないのですが、日本語版とデータを見比べると、バージョンは一緒なのに明らかに日本語版のコードのアップデートが追い付いていない箇所がたくさん見つかります。

これのおかげで、コモンイベントなどのスクリプトにパッチ処理をするときにバグるので、その辺うまく調整する必要があります。

その辺ある程度うまく調整してくれるMod cjkdatacompat を作りました。

中国の人もこのModを使ってるみたいです。

多言語版でもなぜか未完全の英語版のデータが入ってる

これは作業するうえで仕方ないのかもしれないけど、英語版のデータが入ってることにより、OneLoaderに不可解なバグが存在します。

これのおかげでたとえばプルートでファストトラベルする時、新しい地名を追加するのに苦労しています。

ハードコードされた言語間の差異が多すぎる

一番簡単な例が、日本語版のUIのフォントサイズは小さいのですが、フォントサイズなどがハードコードされているのでJavaScriptを目diffして書き換えないといい感じに表示できない点です

しかも英語版だけは半分ほど(全部じゃない!)ハードコードではなく言語ファイルからフォントサイズやマージンの広さなどを取ってきてくれる仕組みがあるのに、日本語版だとほとんど使われていません…

Custom Action Battle Text.js

こいつはマジで許せない

こんな調子で3000行くらいハードコードされてます

マジでこれを翻訳するのダルすぎる

ただReverieは2.5からこれを一切使わない仕組みを作ってくれてたので作業がめちゃくちゃ楽だったよ!

本当にこれらの修正作業をやってるときは虚無です

次ゲーム作るときはもうちょっとマシな構成にしてくれると嬉しいな!!!

2022年よかったゲーム

こんにちは、年末はずっと反物質を作り続けています

あなたは作ってますか?

これは自分が良かったと思ったゲームのランキングです。

この年にリリースされたものではないものも含まれています。

あくまで自分が初体験したタイミングです。

1位 OMORI

堂々の1位です。

というか1位はこれ以外考えられない。

間違いなくこのゲームは自分の人生を変えました。

毎年買って毎年1位にしたいくらい好きです。ずるい

でも来年Switch版を買えば来年も1位にできるね。

2位 GOODBYE WORLD

このゲームと最初出会ったのは2022年6月のSteamネクストフェスでした。

ストアページを見て一目惚れし、そのままデモを遊んで最終的には作者の人に応援のツイートを送ってました。

3位 Call of Duty®: Warzone™ 2.0

MW2は買ってません。自分は3arcじゃないCoDは買わないと決めているのだ…

まだ20時間しかやってないけどCoDやっぱ楽しいなってなっちゃった。

みんなクラッシュするって言ってるけど自分は1回しかしてないや。

DMZばっかりやってるけど楽しいもっとやりたい。

4位 Milk outside a bag of milk outside a bag of milk

初めて聞いた人は Milk inside … の方からやりましょう。

好きなんですがあまり言語化できないですね。

おそろいのTシャツを作って着てるくらいには好きです。

でも精神持たなくて全然遊べない…

5位 Dome Keeper

もうちょっとガッツリ遊びたいけどコンテンツが少ない気もする。

この記事書くの飽きてきました。

SteamもSpotifyとかRedditみたいな今年のまとめみたいなやつ作るらしいです。

早く見てみたいですね。

なんか年々主人公がつらい思いをするゲームじゃないと楽しめなくなってきている。

OMORIのMod “REVERIE” の日本語版2.5をリリースしました!!

この記事にはゲーム「OMORI」のネタバレが多少含まれます

追記: 2.5日本語版が出たぞ!!

(一番下に2.5の情報あります)

こんにちは。自分のOMORI歴は半年以下ですがなんか作っちゃいました。

このModは、OMORIに新たなストーリーを追加する大規模なModで、トゥルーエンド後の引っ越しの後、サニーがまたヘッドスペースに戻って冒険する、といった内容となっています。

ヘッドスペースでは、今までのお友達とは別に「パンキジ」「スイートハート」「スペースボーイ」の3人と一緒に冒険します。

既存のマップはほぼ出てこず、基本的には作り直されたフィールドとなっております。

エネミーやボス、アイテムやスキル、音楽なども新しいものが多数追加されています。

また、難易度も「ふつう」「むずかしい」の2種類から選択でき、「ふつう」でも通常のOMORIより少し難しめな難易度設定となっています。

現在チャプター2まで公開されており、通しでプレイすれば2~3時間ほど遊べるボリュームとなっております。

インストール方法

まず断っておきますが、PC版でしか遊べません。

また、今回自分が作ったModは日本語版のOMORIでしか動きません。

1. OMORIのインストールフォルダを開きます

Steam版の方は、Steamを開き、ライブラリからOMORIを右クリックしてプロパティを選択。

開いたウィンドウの中の「ローカルファイル」タブを開き、「参照」を押します。

2. Modに必要なファイルをダウンロードします

ダウンロードする必要があるファイルは3つです。

どれもOMORI専用のMod公開サイトである mods.one からダウンロードできます。

必要なModは以下の3つ 2.5で1つ増えて4つになりました

それぞれページの下の方にダウンロードリンクがあります。

一番右の矢印を押せばダウンロードできます。

一番新しいバージョンをダウンロードしてください。

3. OneLoaderを正しい場所に展開します

まずはOneLoaderから、zipを解凍して、出てくる”www”フォルダを、OMORIのインストールフォルダの”www”がある場所に配置します。

“index.html”を置き換えるか? という警告が出れば正しい場所です。

置き換えて下さい。

出ない場合は間違った場所に展開しています。

4. 他のModを展開します

開いたフォルダの中から “www” を開き、更に “mods” を開きます。

後はこの中に他の2つのModのフォルダを置けばインストールは完了です。

このようなフォルダ配置になっていれば正しく配置できてます。

基本的に1つのModにつき、ここに配置されるフォルダは1つだけです。

また、”mods”の中のフォルダの中には必ず”mod.json”というファイルがあるはずです。

なければなにか間違えています。

他のModも同じく、基本的にここに配置するだけでインストールできます。

5. OMORIを起動してみよう

見慣れないロード画面が挟まり、いつもと違うスプラッシュスクリーンが出てきて。

左上にModの情報が表示されていれば成功です。

初回起動時、左上に青いやつが出ますが、それはModを自動アップデートするかどうかの設定です。

Enableなら有効、Disableなら無効です。

よくわからなければ数十秒放置すれば、自動設定され、次回以降でてこないので無視でいいです。

6. まだやることがあるぞ!!

無事起動したらオプションを開いてみましょう。

“LANGUAGE”と”MODS”が増えてると思います。

“MODS”からインストールしたModを確認できます。

ここに3つ先ほどインストールしたModがあるか確認して下さい。

そして、この次の文章が重要。

ここで”LANGUAGE”を選択して、日本語を選んで下さい。

選ぶとゲームが再起動します。うわあ~~

これをしないと一部のテキストが正常に翻訳されないので必ずして下さい。

一度すれば設定は保存されるので、次回以降はしなくてもいいです。

7. REVERIEの世界へようこそ

これでやることは終了です。

「はじめる」を選んで、難易度選択画面が出れば正常に導入されています。

うまくいかない場合、DiscordのREVERIE日本語サーバー で質問してみて下さい。

8. ヒント

バニラとセーブデータは共有です。

セーブデータは “www/save” の中に入ってるので、バックアップすることをオススメします。

(Modの影響で元のセーブデータが壊れる可能性も0ではないよ!! バックアップ大事)

個人的には Improved Save & Load Menu を使って、セーブスロットを増やすのを更にオススメします。

Modのタイトルにチャプター2という文字が入ってますが、このバージョンにチャプター1のデータも含まれています。

スキルは6つまで装備できます。

9. 最後に

突然10月頃にこのModを翻訳したいとReverieの公式英語Discordで発言したら、快諾していただきました。(結局2ヶ月かかってしまった…)

正直、REVERIEはボリュームも大きく、もしかしたらまだ翻訳しきれてない場所を見つけてしまうかもしれません。

そんな時はこっそりDiscordで教えてくれると嬉しいです。

それと、REVERIEを遊んでて、

「俺のスイートハートはこんなセリフ言わない!!」

みたいな解釈違いが起こるかもしれませんけど許して叩かないで…

というわけで、みんなREVERIEで遊んでね!!

感想はTwitterでハッシュタグ の両方をつけて投稿して下さい!

あと、もしDiscordとかで初見プレイ配信する人いたら誘ってください!見に行きます!

追記

この記事を書いたのが12/23くらいで、本当は12/25に公開する予定だったのですが、手違いで送れてしまいました… すいません…

それと、REVERIEが

OMORIの2周年を記念して追加ミニアップデートを追加するということで、これも公開次第翻訳作業をしたいと思います。

(正直このタイミングでなにか出すだろうなとは思ってた)

2023/02くらいに翻訳してた作業の裏話とかしんどかったことの記事を書こうかなぁ

追追記 2.5.0がでた!!

追追追記 2.5.0の日本語版ができた!!

完成するのにめちゃくちゃ時間がかかってしまいましたごめんなさい。

必要なModが1つ増えてるので注意!!

難易度は前より気持ち簡単になってます。

最初から最後までいろいろ変わってるので2.0をクリアした人も遊んでみてもいいかも。

バッジ機能も増えたよ!

遊んでね!!

あったら良いな こんなGoのアップデート

最近不眠症気味であまり眠れてません

今は早朝5時です。

今日アマゾンで買った M.2 SSD が届くのでメイン機にLinuxをインストールするつもりなんですけど、そのために体調を万全にするために寝たかったが眠れませんでした。

1. try マクロ

いい加減、

resp, err := http.Get(url)
if err != nil {
	return nil
}

と書くのは飽きました。

try マクロ (名前は適当) は1つ以上の任意の型を取ります。

ただし、一番右の引数は、その関数の返り値の一番右の型と同じかつ、nilable でなければなりません。

一番右の変数が nil でない場合、このマクロはこの関数を一番右の返り値は先程の値、それ以外はゼロ値で return します。

そうでなかった場合は、一番右以外の変数を返します。

このマクロを使うことで、上記のコードは以下のように書けます。

resp := try(http.Get(url))

2. デフォルト引数

そろそろ type PostStatusParam struct から脱却しませんか?

func PostStatus(
	text string,
	spoiler bool = false,
	photoes []io.Reader = nil,
	ctx context.Context = context.Background(),
) (*Status, error) {
	// send status
}

func main() {
	// do something
	PostStatus("the cake is a lie...", spoiler: true, photos: []io.Reader{f})
}

関数のオーバーロードはいらないよ。

3. nil非許容型

nilable な型の後に ! をつけることで、nil が入れられなくなります。

また、変数が宣言されるときに?をつけることで、nil許容型に変換されます。

var r io.Reader! // error

r, err := os.Open("readme.txt") // r は nil非許容型, err は nil許容型

r = nil	// error
r2? := r	// r2 は nil許容型
r2 = nil	// OK

Golangで?を追加するのは難しそうだなあと思って逆にすれば良いんじゃねと思った。

os.Open はエラーの場合、rnil になるじゃないかとお思いですが、呼び出してもエラーしか返さないダミーのリーダーが返されるようになります。

破壊的変更ですね。

いい加減流行りに乗りませんか。

4. イテレータ

Genericsが追加されたことだし、GoでもPythonのyieldみたいなことがしたい。

けどコンパイル言語だから難しそう。

チャネル使えば似たようなことが出来るのは知ってるよ?

議論はされまくってたから現実味は一番ある。

5. anyに続く新しい型

個人的に

type void struct{}

がほしいなぁと思っている。

まあ正確にはvoidじゃないんだろうが。

Portal with RTX のレビューに対してのお気持ち

tl;dr 3行のまとめ(?)は一番下にあります。

Portal with RTX がSteamでリリースされました。

クリアまでやったんですが、レビューにおすすめしないを書き込んでる人がいっぱいいて、あまりにも的はずれなコメントばかりなのでお気持ちを書きます。

その前に、最低要件はRTX3060なんですがそれ以下でやって重すぎるwとか書き込んでる算数もできない人は近寄らないでほしい。

あと設定をちゃんとしてくれ、自分はRTX2080だが最後まで30FPSで遊べたぞ。

(そもそも無料ゲームに低評価をつけるのが個人的にナンセンスだと思ってるけど)

みんなレイトレーシングを劇的に綺麗(綺麗の定義にもよるが)になる技術だと思ってるが、違うぞ

1. 綺麗リアルは別物

レイトレーシングは今までのレンダリング方式とは違い、光の情報を一つ一つ計算するので、リアルな光の挙動を簡単に再現することが出来る方式です。

この1つ上の文章に綺麗という単語は出てきていません。

綺麗というのは、個人の主観によるものです。

人によっては、Half-Lifeのようなチープなグラフィックのゲームのほうが綺麗だと感じる人もいるでしょう。

ですが、リアルかどうかというのは個人の主観によるものではなく現実にどれだけ近いかを指す言葉なので、大抵の人間の間で同じ尺度を共有できるでしょう。

ただ、大抵の人はリアルな方が綺麗だと思うと思いますが、これも違います。

「リアル イコール 綺麗」なのだとしたら、実写の映画にCGやVFXを使って大げさに画をいじる必要はなくなります。

2. リアルタイムレイトレーシングはプレイヤーのためのものではなく、アーティストのためのもの

リアルタイムでレイトレーシングが出来る一番のメリットは何だと思いますか?

それは、綺麗な映像を出力することではありません。

自分も、Battlefield V や Cyberpunk 2077 などで、レイトレーシングを有効にして遊んだことがありますが、正直差はほとんど実感していません。

では、一番のメリットは何でしょうか?

それは、ゲームなどを作るアーティストやグラフィックエンジニアが手軽で簡単にリアルな映像を出力できるからです。

今多く使われてるレイトレーシングではないレンダリング方式でも、十分レイトレーシングに近い品質の映像を出力することは可能です。

ただし、これを実現するにはアーティストやグラフィックエンジニアが血反吐を吐くような最適化や調整を何度も長い時間をかけて施しているから出来ることです。

リアルタイムレイトレーシングはその光の挙動をGPUの演算力の暴力でカバーすることで実現しています。

もし、リアルタイムレイトレーシングが普及すれば、ゲームや映像を作る人達の工数を大幅に削除することが出来るでしょう。

今のAAA級のゲームは発売に数年かかっていますが、将来はリアルタイムレイトレーシングのおかげで1年早くリリースできた、なんてことがあるかもしれません。

3. リアルタイムレイトレーシングはまだ実験段階

リアルタイムレイトレーシング自体がまだ実験段階です。

リアルタイムレイトレーシング自体がまだ実験段階です。

大事なことなので3回言いました。

リアルタイムレイトレーシング自体はNVIDIAや他のゲーム会社が数年(下手したら10年以上)かけて行ってる超大規模な全てのゲーマーを巻き込んでいる実験段階なんです。

例えば、レイトレーシングの品質を設定する重要なパラメーターでバウンド数という数値があります。

これの最大バウンド数設定が、今回のPortalなら Highで2 Ultraで4 となっております。

が、この数値は実際のレイトレーシングの品質としてはかなり小さいです。

例えば、BlenderのCycleレンダーでは、これのデフォルトの数値は12となっております。

実際の映画などではもっと多くバウンドさせているでしょう。

このバウンド数、1追加するだけで飛躍的に計算量が増えるので、現状のPortalだとカスタム設定で8を設定できるのですが、それだとRTX4090を4枚SLIしても60FPS出ないと思います。多分。

8すら現実的に設定するのが無理なのに実際の映画級の品質を出すためにはもっと多くの数値にしないといけません。ムリポ。

それに、リアルタイムレイトレーシングが実用段階なら、既にリアルタイムレイトレーシングしかサポートしていない新作のゲームが出ても良いはずです。

ですが、現状は出ていません。

4. Portal with RTX は レイトレーシングの宣伝目的で作られた訳では無い…と思う

NVIDIA はなぜ Portal with RTX を作ったのでしょうか?

そもそも今回この Portal を作ったのは NVIDIA であって、Valve ではありません。

Valve も協力はしたでしょうけど、少なくとも主導権を握ってたのは NVIDIA 側です。

それは、新しい NVIDIA のツールである NVIDIA RTX Remix というツールの宣伝目的で作られました。

このツールは、DirectX 9 以前の古いゲームをRTXに対応させるツールです。

ただし、このツールは ENB のような単純なツールではなく、テクスチャを上書きしたり、質感を再調整したりといったかなり高度なことが出来るかなり大規模なツールです。

このツールをリリースすれば、コミュニティが古いゲームをRTXに対応させてくれ、GPUが売れると NVIDIA は目論んだのでしょう。

その宣伝にピッタリのゲームが Portal だったわけです。

Source Engine という改造しやすいゲームエンジン製で、アセット数が少なく、レイトレーシングが映えやすい平面が多い。 なにより、メジャーで大人気のゲーム。

間違っても、今回の Portal が Source2 製ではないことはこの辺を読めば明らかだったはずなんですが、勝手に期待して勝手に落胆している人も中にはいました。

そんなに好きなゲームならなぜ調べないのか。よくわからないです。

まとめ

現状のリアルタイムレイトレーシングははっきり言って使い物にはあまりなりません。

ですが、数十年単位での将来の超高品質なゲームの糧には確実になっています。

新技術というのは、ある日突然完成するものではないのです。