25/07/07 22:58:56.10 O48nZ/qv.net
本編を英語化し始めてからようやく気づいたのだが(またこのパ)、
今のやり方だと「続きから」でゲームを再開したとき、一部が英語化されないことが判明した
何故かと言うと、現在の仕様ではゲーム内のアイテムやクリーチャーは
ゲーム開始時に生成用テーブルに従って名前、重さ、体力などの各プロパティが割り振られる
例えば「治療の薬」や「ゴブリン」がそれぞれのテーブルからインスタンス化される
しかし今のやり方では、その生成テーブル(の一部)を英語化しているだけなので、
すでに生成された後のインスタンス(=セーブデータに保存された情報)には反映されない
つまり再開しても英語にならないのである
それで、幾つか対応を考えてみた
(1) セーブデータをロードする時、データ内の全てのインスタンスをスキャンして、
英語化すべきプロパティがあったら英語にセットし直す
(2) インスタンスごとにプロパティを持たせるのではなく、
共通の値を持つプロパティは1つのデータとして共有参照し、そこを英語化する。
(例:ゴブリンの「ゴブリン」という名前は全インスタンスで共通 → 名前は共有参照データとして「Goblin」に置き換え)
(3) 諦める(人生諦めが肝心)
「今日は日本語でプレイしよう」、「今日は英語の気分だな」みたいな感じで
ゲーム再開のたびに言語を切り替える奴はおらんやろ……
正直(3)で誰も困らない気はするのだが、これまで各インスタンスが全プロパティを保持していたのは
はっきりいって冗長すぎた(ゲーム本体は1MB足らずなのにセーブデータは5、6MBあったのはこのせい)ので、
この機に(2)のやり方でデータ構造を見直そうと思っている
何が言いたいかというと、6か月コースが早くも9か月コースになりそうってこと(期間が3か月ずつ延びていく恐怖)
こんなに苦労しているのだから、リリースされたら大ヒット間違いなしだな!(エフォート・ジャスティフィケーション)
958:Text Dungeon(英語化)
25/07/07 23:11:10.12 O48nZ/qv.net
で、早速(って言うか、しばらくこれに手こずっていたのだが)ポーションのデータ構造を一部共有化してみた
こんな感じで日本語版でデータをセーブして
URLリンク(imgur.com)
タイトルに戻って英語版に切り替えて、ゲームを再開すると……
URLリンク(imgur.com)
ちゃんとポーションの名前が英語化されてる!(ご満悦)
URLリンク(imgur.com)
尚、共有化すべきなのは名前だけじゃなく、複数形の名前やポーションの説明文などもある
こういう「一種別について複数のプロパティをまとめて共有化/英語化」したい場合、JSONよりもCSVのほうが扱いやすいので
それ用のCSVを準備することにした、こんな感じ↓
URLリンク(imgur.com)
準備するファイルが増えていってどんどん複雑化していく悪寒……
まあ、なるようになーれ(AA略)
959:Text Dungeon(英語化)
25/07/17 21:57:49.42 BQA9x4Yr.net
Potionのデータ構造を見直したついでに、MODでユーザーが新規ポーションを追加できるようにしてみた
需要があるか分からないが(無い)、以下コード込みで手順を公開
まずMod製作用に公開するAPI(DLL)を用意
URLリンク(imgur.com)
全てinterfaceで定義して、ゲーム本体のクラスには直接アクセスしない方式にした
が、全部(または一部)publicにして本体を参照するやり方が簡単でいいかもしれない……次回作はそうしようかしら(10年後)
Mod(DLL)のコード
URLリンク(imgur.com)
上のAPIを使って新規ポーションの実装とDLL読み込み時の初期化処理(インスタンス受け取り)を行う
今回は「エリ草ー」(Potionじゃないし)と「ヤバい薬」(飲むと死ぬ)を実装
世界観ぶち壊しだけどModならまあええやろ(自作自壊派)
本体側のMod呼び出しクラス
URLリンク(imgur.com)
Modsフォルダー内の.dllを検索して、初期化(必要なインスタンスの引き渡し)とIPotionの登録を行う
現状では初期化処理を必ずMOD側で記述してもらう必要があり、この辺はまだまだ検討の余地がありそう
その他、IPotionをDictionaryに登録するクラスを作ったり、IPotionをPotionに変換するラッパーを作ったり、
必要なら不確定名を割り振ったり、登録情報を元に実際にPotionをゲームに登場させるメソッドを作ったりで、
実際のところAPIやModを作るよりこれらの方が大変だったが、長くなるので割愛
興味ある人がいたら公開しますよ!(いない)
960:Text Dungeon(英語化)
25/07/17 22:15:48.06 BQA9x4Yr.net
そして作成したMod(.dll)をModsフォルダに入れていざゲームを起動すると
怪しいポーションが登場
URLリンク(imgur.com)
飲むと……
URLリンク(imgur.com)
エリ草―の場合、不確定名を""(空文字)にしているので他のPotionと同様にランダムな名前が割り振られる
URLリンク(imgur.com)
飲むと鑑定されて、以後は「エリ草ー」になる
URLリンク(imgur.com)
尚、Modで作ったポーションの英語化(または日本語化)対応は……諦めようと思う(人生諦めが肝心)
Mod(DLL)のstringを自動でJSONやCSVに追加する仕組みとかできなくもないかもしれないが、それはそれでファイルの管理がややこしくなるし、
他のゲームのModでも他言語への翻訳はそれぞれのMod側で対応するのが主流っぽい
それに実際のところこのゲームのModを作る人は多分おらんやろうし……(そもそもプレイする人がいn)
本体の英語化はどうなったかって?じゃまた来週!(遁走)
961:Text Dungeon(英語化)
25/07/17 22:23:33.51 BQA9x4Yr.net
>>457氏
以前MOD用APIについて言及されていたと思いますが、
具体的にこんなAPIがほしいとか、こういう機能を実現したいとかありますかね
わしの実力的に対応できるかは置いといて、検討したいと思います
そんな昔のことは忘れたならば無理に思い出すことはないですが
962:456
25/07/17 23:18:06.35 DOoBRGzR.net
848の発言の事ですかね?
多分アレは自分では無いです。
欲しいAPIがあるかと言われると...無いw
と言うのも人から出されたゲームをクリアしたり出されたお題でゲーム作るのは好きなんですが人の作った物を改造するのは嫌いなんですw
〇〇だったら良いのにと思ったり言ったりはするんですが自分で触ると急に冷めてしまって...嵌ったゲームは逆に縛りプレイを始めてしまうような奴でして...
物語に入り込んでる所メタ発言で急に現実に戻されるのが嫌みたいな?何かめんどくさい奴ですねw
あったら良い機能としてはスイッチかXBoxコントローラーで全部操作可能とか
寝っ転がってやるときはこれが楽でいいんですよね(典型的ダメ人間)
963:Text Dungeon(英語化)
25/07/17 23:39:56.93 BQA9x4Yr.net
>>962
あれ、そうだったんですか
すみません、てっきり456氏の発言かと思い込んでいました
確かにModはメタ的というか、特にDLLだとプログラミングなので現実世界に引き戻される感がありますね
コントローラー対応は確かにあった方がいいですね(販売する気なら尚更)
ぼちぼち検討してみたいと思います
>>851氏
失礼しました
改めて何かご意見や希望等ありましたらお願いします
そんな昔のことは忘れたならば無理にry