
ティラノスクリプトと私⑤CSVファイル読み込みプラグインでテキスト類を管理する
※ノベルゲーム特化型ゲームエンジン「ティラノスクリプト」でそこそこ本格的なゲームを作るため、Javascriptなどの面倒くさいことを(嫌々)試行錯誤するおっさんの備忘録です。(※ティラノスクリプトVer 521kで動作確認)
ティラノスクリプトのゲーム内テキストは配列変数に格納したものを使えば多言語にも柔軟に対応可能……ということを前回の記事で書きました。
これはもうひと枠上の言い方をすると「同じ場面で、場合によって表示する内容を複数の候補から選択して表示する時に便利」ということで、それは多言語化に限った話ではありません。
……
といったような前置きで始まる記事を約2年前に書こうとしていたのですが、下書きのまま放置していました!
配列の説明を思いきり遠回りにしようとして、途中で力尽きていたようです。当時言わんとしていたことをざっくりまとめると…
❶セリフテキストを配列化すれば扱いやすくなるけど、コードエディタ上で調整するには視認性が悪くミスしやすい

❷そこで「CSV読込プラグイン」の導入です!(以下、プラグインの使い方の説明)
リリースされて間もないこのプラグインがすべてを解決してくれます…と展開するつもりでした。
それをいまから改めて記事化するのは大変だなーと思ったので、弊サークルのYoutubeチャンネルでライブ配信しました。私の軽快なトーク()で、csv読込プラグインを用いた多言語対応化が説明されています。ご興味ある方は以下のアーカイブ動画をご確認ください!
解説動画リンク
上記Youtube動画の補足資料
■mc_loadcsvタグの表記(例・format=objectOでの配列化)
[mc_loadcsv file="gamedata/serif.csv" var="f.srf" format="objectO" wait="true"]
「file」パラメータ……読み込むcsvファイル名
・csvファイルの置き場所はdata>other>plugin>mc_loadcsv直下
・直下に作ったフォルダ内も可(上記コードではgamedetaフォルダを作成)
「var」パラメータ……csvファイルを配列化する際のメイン変数名
・f、sf、tfどのタイプのティラノ変数でもOK
・このプラグインに限ったことではないですが、予約語というか、使うと他のプログラムとの兼ね合いで正常に動かなくなる文字列もあるので注意。「frame」「fade」あたりを変数名に使おうとしたら、ダメでした
「format」パラメータ……配列の形式名
・array、arrayA、arrayO、object、objectA、objectOの6タイプ
・arrayとobjectの組み合わせパターンで、配列~二次元配列~連想配列~二次元連想配列を作成できます。
・以下リンクは、連想配列について簡単に解説していそうなサイト。正直、もっと簡単なものがあればいいかなぁって…
https://wa3.i-3-i.info/word11931.html
その他のパラメータについては、同プラグインファイル同梱のreadmeファイルをご参照ください!
■csvファイルの表記 (例・「serif.csvf」)

・各行の左端項(scene1_X)は、その行を指定するためのkey(キーワード)
・1行目の各項は、以降の行の同一タテ軸の項を指定するためのkeyです
・各keyには好きな名前をつけられますが、「1行目1項目は必ず”key”にする」「key名の先頭に数字を使わない」「同一軸のkey名はユニーク(被りなし)にする」などいくつかの縛りがあります
■作成した配列の表記 (例・変数名「f.serif」)
f.serif['sscene1_0']['JA']
※「sscene1_0」行の、「JA」列の中身 → こんにちはケン。
f.serif['sscene1_2'][sf.lang]
※「sscene1_2」行の、変数sf.langに代入されている文字(JA/EN/Tag)の列の中身 → 元気ですか? / How are you? / p のどれか
f.serif['scene1_' + tf.num]['EN']
※変数tf.numに代入されている数字(0~5)によって可変する指定行の、「EN」列の中身 → Hello ken. / Hi Ellen. / How are you? / Yes I'm fine. And you? / I'm crazy good! / END のどれか
・表記要素を大きくわけると「①ティラノ変数名」「②行を指定するkey名」「③列を指定するkey名」の3つ。
・各要素を[](スクエアブラケット?)で囲わず、各要素を.(ピリオド)で区切って表記してもOK。とはいえ各要素を可変状態(変数割り当て)で使用する際には、[]を使った方が良いみたいです
上記Youtube動画内容の追記
■正しい差し替えマクロ
動画内で思った通りに動かずテンパった、「セリフテキスト表示後、あらかじめ指定しておいた文末タグを自動実行する機能を追加したセリフ表示マクロ」の正しいものは、以下の通り。原因は単純な変数名入力ミスでした…。実行画面で「undefined」が表示されたら、変数名の指定がうまくいっていないことをまず疑いましょう。

■,(カンマ)を含んだ文字列の、csvファイル内での表記
動画中では「カンマを項目の区切りに使っているので、(カンマを含む)英文をひとまとまりのテキストとして認識させるには工夫が必要」などとお手上げ状態でした。
後に、カンマを含んだひとまとまりの文字列を”(ダブルクォーテーション)か'(シングルクォーテーション)で囲めば、強制的に文字列扱いしてくれるんじゃないの? と思い試してみました。コードエディタのcsv自動色分け表示機能的にはアリっぽい感じでしたが、起動させるとやはりカンマ部分で要素が分割されていました。地味に悩ましいですね…