投稿記事

コーディングの記事 (86)

竹林ソフト 2023/08/04 20:00

NPC をコーディングして領地経営するゲーム開発(翻訳データの準備)

前回の記事で未翻訳のデータを検出する仕組みを実装したので、翻訳データを登録していきます。

やったこと

翻訳済みのメッセージがファイル出力されるようにした

このゲームは Lua スクリプトを編集できるようにするために、その Lua スクリプトのファイルをフォルダに出力するようになっています。
そのときに、今までは英語版のファイル出力では以下のように tr() タグ内はオリジナルメッセージのまま出力するつもりでした。この tr() は、ゲームシステムで評価されるときに翻訳用データがあれば置き換えて出力してくれる仕組みです。

↓今までの Lua スクリプトファイルの出力例

この仕組みでもいいのですが、日本人以外が日本語を読めることを私は期待してなくて、そうすると読めない言語が目に入るとプレイヤーのストレスになる気がしました。なので、tr() はゲームシステム側がファイル出力するときに評価されるようにしました。

↓ C# で tr() を検索して置き換えるコードの抜粋

副次的な効果として、こうすることで出力したファイルに日本語が含まれていないかどうかで翻訳が適切に完了したかをチェックしやすくなりました。よいです。

↓ 置き換えたコードに日本語が含まれてないか検出するコードの抜粋

よいです。

翻訳に関係する不具合を修正した

翻訳データ中にカンマやクオーテーションがあった場合の処理が不適切だったので修正したりしました。

ひたすら DeepL で翻訳した

翻訳すべきデータが多いので、ひたすら変換して一読してから翻訳用のファイルに記述する、を繰り返しました。がんばりました。

まとめと今後の予定

とりあえず、PV 以外の気が重い作業がほぼ終わったので大変よいです。(API ドキュメントは日本語、英語の両方のドキュメント作成が未完了です)
今後の流れは PV 作成してストアページに申請、体験版をビルドしてストアページに申請、体験版の公開、という流れになる予定です。がんばります。

竹林ソフト 2023/07/29 20:00

NPC をコーディングして領地経営するゲーム開発(英訳の準備)

PV 作ってみて「英訳終わってないな」と思ったので英訳していきます。

英訳の準備

前々回の記事で作ったスクリプトを駆使してチュートリアルの2つのステージを英訳していきます。前々回に作ったスクリプトは「スクリプト中の日本語コメントに対応する英語コメントがあるかチェックするもの」と「翻訳メッセージを抽出するもの」の2つです。これらを、作った全ステージのスクリプトに適用していきます。

まず、今回の作業で作る翻訳メッセージを保存するためのディレクトリを作成して、それをゲーム中で読み込むようにします。

↓StageData ディレクトリにあるデータも読み込むようにした。

次は、この StageData に、各ステージの Lua スクリプトで必要になった翻訳データが記述された翻訳データを登録するあたりです。これは翻訳対象の言語ごとにファイルを用意する仕組みにしています。Japanese.txt とか English.txt とか。

↓例えば、主な翻訳対象であるセリフを抜き出した結果はこんな感じです。

この処理を全ステージの全ファイルに行えばオッケーです。
ただ、何も考えずにこれを整形してファイル保存すると同じセリフが異なるファイルにあったときに気付かないので、どこのファイルにそのセリフがあったかわかるようにします。どの行数にあったかは気にしないことにします。

具体的には例えば英語用の StageData/English.txt のデータが以下のようになるようにします。

# _01_ProductionTutorial/Taskcard/setup.lua.txt, <他のファイル>
妖精, <ここに '妖精' の英訳 Fairy を後で入力する>

# _01_ProductionTutorial/Taskcard/setup.lua.txt
私も帰ろっと!, <ここに後で英訳を入力する>

そして、なんやかんやで、そういう処理を行う Python スクリプトを作成しました。

↓作成したスクリプトを実行した結果の抜粋

過去に入力した翻訳データがあれば使われる仕組みも動作していて大変よいです。

あと、「日本語コメントに対応した英語コメントがあるかチェックする」方については、拡張子が .lua.txt のファイル全てにスクリプトを実行すればいいだけなので、find, xargs コマンドを使って処理します。

find ../SL/Assets/SL/Resources/StageFiles -name *.lua.txt | xargs python detect_missing_locale_comment.py

↓このコマンドを実行したときの結果

こっちも普通に動作していて大変よいです。
思ったよりも、翻訳データを準備する Python スクリプトの作成に時間がかかったので、翻訳の処理まわりはまた後日にやります。進んでるけど進んでねぇ!

まとめと今後の予定

暑いのは、なんというかダメです。ただ、今回も開発に着手できたので大変よいです。
次回も開発継続を目標にやっていきます。がんばります。

竹林ソフト 2023/07/21 20:00

NPC をコーディングして領地経営するゲーム開発(PV 作成の練習)

PV 作成目指して作業していきます。
ここ数回の記事で実際の動画編集を行えていないので、今回は「プレイ動画を撮る」「編集ソフトに取り込む」を目標にします。プレイ動画の取り直しが必要だと思ったら、後でまたやることにします。

プレイ動画を撮る

Streamlabs Desktop で録画するだけです。今回はプレイ中の様子をずっと録画します。

PV になるよう編集する

DaVinch Resolve で編集します。この編集ソフトの使い方は詳しくないので、いろいろ調べながらの作業になります。

↓プレイ動画から必要な箇所のみを切り出している様子

編集してみた感想

編集してみて気付いたことを列挙します。

  • カーソルが録画されないようにする。
  • クリアしてないデータでプレイする。
  • UI Tooltip が急に表示されないように注意してカーソルを動かす。
  • 使いたい範囲だけでいいので英訳する。
  • ゲーム画面でエディタが開かれる展開が急すぎると思った。
    • 英文で説明をした方がよさそう。
  • 他のコーディングゲームの PV を見てみる。
  • In-Game エディタの操作がとてももっさりしている。
    • 何が起きているか調べる。

です。
全体的な PV 構成も、もう少し考えたいです。

まとめと今後の予定

いやいやですが、PV の編集に着手したのは大変よいです。
そして、英訳されてない箇所がとても目立ったので、次回は PV に使う範囲だけでも英訳しようと思います。次回もいやいやでいいので、PV 用の録画と編集には着手しようと思います。

竹林ソフト 2023/07/14 20:00

NPC をコーディングして領地経営するゲーム開発(ドキュメント修正と英訳)

ドキュメントを英訳して PV を途中まででいいので作る予定でしたが、英訳を作るための補助スクリプトを作る記事になります。

プレイ動画の保存しようとしてみて

実際に保存する前に「こういう操作を行ってそれを保存しよう」という練習を兼ねて操作してみて色々と気付かされたので書き出してみます。

  • ゲームのイベント中のコメントとセリフを処理するスクリプトを作りたい。
  • 操作しててキー操作が行えなくなることがあった。(不具合を取り切れていない)
  • 翻訳してて気付いたゲーム用語の修正など

それぞれについて、どうにかしていきます。

ゲームのイベント中のコメントとセリフを処理するスクリプトを作りたい

最初のステージではこういうシーンから始まるのですが、この処理内容は setup.lua というスクリプトに記述されています。

↓ゲーム開始後のイベントシーン

↓イベントシーンの処理を記述した Lua スクリプト

現時点で「選択された言語に対応したコメントを残す機能」「メッセージを置き換える機能」があって、それに対応した setup.lua に変更するとこうなります。

↓修正したもの

コメント行の "\~ja" は、オプションで選ばれている言語と一致するときのみ表示する仕組みです。

また、セリフに追加した tr() は translation のつもりで、ここで渡した文字列が多言語対応用の Japanese.txt や English.txt に登録されていれば置き換える仕組みになっています。

今から作るスクリプトでやりたいことは

  • "\~ja" の次の行に "\~en" がないときに、ファイル名と行番号を含んだ警告メッセージを出力する。
  • tr() 内の翻訳対象の文字列を、English.txt 用に抜き出す。

です。
それぞれの処理を Python で実装すると、こんな感じになります。私しか使わないスクリプトなので動けばオッケーです。

↓日本語コメントに対応する英語コメントがないのを検出するスクリプト

↓tr() の内容を抜き出すスクリプト

後は、実際にこのスクリプトを実行した結果を使うあたりですが、今回はこのくらいにします。

まとめと今後の予定

今回は、翻訳すべきテキストを検出したり抜き出したりする Python スクリプトを作成しました。
ぶっちゃけ、最近は暑くて開発にかける時間が足りてない気もするのですが、何もしないよりましなのでこんな感じで続けていきます。がんばります。

竹林ソフト 2023/07/07 20:00

NPC をコーディングして領地経営するゲーム開発(PV 用動画のための実装)

前回の記事で「こういう PV を作りたい」という内容を決めました。その PV の編集で使うプレイ動画のために必要な作業を行います。
それはそれとして「開発を終わらせるためには、開発するしかないんだな」と改めて思ったので、雑多なタスクにも着手します。

character:wait(second) の追加と利用

PV で何かの行動をした後に、PV 映えの間を表現するために待機用の character:wait() を追加しました。


よいです。

そして、実行するコードを say() で表示してみたのがこれです。

 -- 畑まで最短経路で移動する。
 character:say('character:move(cropField)', 5.0)
 character:move(cropField)

なんかイメージと違う。
白地に黒文字がよくないのか? フォントも小さくて読みにくい。

あと、character:say(message, seconds) の2番目の引数の表示秒数が無視されているのに気付いたので後でまた修正します。実際にテストするの大事ですね。

ダンジョン探索を行うあたり

ダンジョン探索を行うあたりは体験版に含めないので実装が途中までだったのですが、PV に含めることにしたので動作するようにします。

ただ、ダンジョン探索までのステージまでを開放するために高速実行でステージ実行してたら途中のステージでエラーになったのは後で見直します。

ともあれ、ステージを選択して実行したら、画面上のダンジョン探索のパネル表示は動作したのでオッケーです。


よいです。

敵が軍団で侵攻してくるのを防衛するあたり

ダンジョン探索のと同様に、敵が攻めてくるステージも修正して動作させました。


動画で見ると「矢を撃ち合ってるな」というのがわからなくはないのですが、静止画だとごちゃっとしてて状況把握がむつかしいです。

敵軍に体力バーがあった方がいいと思ったので、後で追加します。後は、城内で矢を撃っている NPC は敵軍がいる方を向かせるように修正します。
ステージが動作したのはよいです。

雑多なタスクに着手する

保存先を My Games 以下に変更する

最近はマイドキュメントの My Games 以下にセーブデータを作るのがより一般的な気がしたので AppData への保存から変更しました。変更したらファイルのパス中にスペース文字があるとエラーになるのに気付いたので修正しました。気付けてよかったです。

↓ 構文チェックのための luac のに渡すファイルパスを "" で囲むようにした。

まとめと今後の予定

PV 作成で使うあたりが動作するかを確認しました。できればドキュメントの英訳まで着手したかったのですが、それはまた次回に着手します。
PV 用には映す範囲だけの英訳でいいのですが、体験版を出す時点では全てのドキュメントを英訳する必要があるのが悩ましいです。がんばります。

月別アーカイブ

限定特典から探す

記事を検索