こがしぱんるーむ

初心者のゲームプログラミング勉強記録

ティラノスクリプト~サブルーチンとマクロ~

こがしぱんです。

 

新年あけましておめでとうございます。

2025年もプログラミングの勉強がんばります!!

 

前回は「変数と演算を理解する」をやってみました。

 

今回は「サブルーチンとマクロ」です!

 

サブルーチンとマクロってなんぞや!?

 

公式によると、

ティラノスクリプトでは、何度も繰り返し利用する処理などをライブラリ化して、繰り返し利用する機能があります。
それが、今回利用する「サブルーチン」と「マクロ」です。

この2つは「他のまとまった機能を呼び出す」というところは一緒なのですが、使い方や用途がちがいます。

 

つまり、繰り返し利用する機能ってことですね!

 

「サブルーチン」と「マクロ」はそれぞれどう違うのか。

 

■サブルーチンの主な用途
・シナリオが大きく分岐する場合など、シナリオファイルを分けて作成しておき、サブルーチンで処理を移動させることでシナリオを分岐させる。

 

■マクロの主な用途
・何度も繰り返し利用するスクリプトをマクロにすることで、タグを記述するだけで繰り返し利用することができるようにする。

 

うーん、文章だけじゃ理解度がイマイチなので、公式に沿って使用方法を確認していきます。

 

■サブルーチンの使い方

サブルーチンは[call]タグを使って呼び出します。また、サブルーチンから呼び出し元に戻る場合は[return]タグを使います。

 

以下、コード例(公式より引用)

このように、ラベルを起点にサブルーチンを呼び出すことができます。
別ファイルのサブルーチンを呼び出したい場合は、storage属性でファイル名を指定して下さい。

 

例えば、AシナリオからBシナリオに飛んでAシナリオに戻ってくるような感じ...?

実際に何かノベルゲーム作る時にスクリプト打ってみて体験してみないと、イマイチ理解できないかも。まだ、ふわっとした理解度な気がする...。

 

■マクロの使い方

マクロとは、ある処理をまとめたものを1つのタグで呼び出せるようにできる機能
つまり、既存のタグや文章を組み合わせて自由に新しいタグを定義することができる、便利機能です。

何度も使用するタグはマクロ化しておけば、他のゲームを作る際にも再利用可能。

マクロは一度定義しておけば、そのマクロをどこからでも利用することができるようになります。
なので、必ずゲーム起動時に実行される必要があるため、first.ksの最初に記述しておくのが良いとのこと!


それでは、実際のコード例を確認。
シナリオを進める場合、クリック待ちの[l]と[r]を一緒に使う事が多いです。
ただ、2つタグを入力するのは面倒なので一個のタグで済むように、以下のようなマクロを定義。

 

以下、コード例(公式より引用)

このようにマクロを最初に定義しておけば、[lr]とタグを入力するだけで定義した処理を実行してくれます。便利!!

 

・マクロに数値を渡す

ティラノスクリプトでは、定義したマクロを呼び出す際に好きな値を渡すことができます。


以下コード例(公式より引用)

この例では定義した[newtag]というタグを呼び出す際にiroという属性と値を渡しています。
それを受け取った側は、%iroとすることで、値を渡しています。

このマクロの場合は、[newtag iro=任意の色コード]を入力することで、都度色を変更することができます。

 

さらに、マクロの中の属性に[*(アスタリスク]を指定すると、マクロに渡された属性を全て渡すことができます。


例えば、transタグのあとにwtタグをつけたマクロを作りたい場合、

以下コード例(公式より引用)

としておくことで、transwaitマクロに渡した属性をすべて、transタグに渡すことができます。

 

さらに、値が省略されたときに、デフォルトの値を指定したい場合は、% 付きの属性に、 | ( 縦棒 ) を書き、そのあとに省略された場合の値を指定します。

以下コード例(公式より引用)

この場合、マクロ呼び出し時にcolorという属性が指定されていなかった場合、|の後の数値がデフォルト値として採用されます。

 

また、マクロに渡された属性は、変数として利用することもできます。

以下コード例(公式より引用)

以上のコードを実行すると、
マクロにわたされた値は「[emb exp="mp.your_name"]」です。
と表示されます。

マクロの中ではmp.your_nameというローカル変数が利用できます。

・ローカル変数とは

 限られた場所でのみ有効(この変数はひとつのマクロの中だけで有効)な変数

※この変数はマクロの中だけで有効なのでご注意下さい

 

ということで、今回はここまで!

 

今回は「サブルーチンとマクロ」をやってみました。

マクロってすごい!めちゃくちゃ便利!!

最初にタグを定義しておけば、後はそのタグを記述すればいいので、コードもごちゃごちゃせずにすっきりして見やすくなりそう。

サブルーチンはふわっとした感じですが、マクロは何となく掴めた気がします!

 

次回もティラノスクリプトやっていきます!

 

 

 

 

ティラノスクリプト~変数と演算を理解する~

こがしぱんです。

 

前回は「レイヤーを理解しよう」をやってみました。

 

今回は「変数と演算を理解する」です!

私が苦手とする分野...。

 

まず、変数について!

ティラノビルダー編でもちょくちょく触れてきましたが(↓)、おさらいとして再度確認。

kogashipanroom.hatenablog.com

 

変数とは 何かを記憶させておく箱になります。
この「何か」というのは、例えば

・プレイヤーに入力させた、主人公の名前
・キャラクターの好感度
・フラグ管理(フラグが立ったみたいな)

など、いろいろです。

 

さっそく、ティラノスクリプトでの変数について確認していきます。

 

■変数の種類
ティラノスクリプトでは、以下の3つの種類の変数が利用できます。

・システム変数
ゲーム全体で共有する変数です。例えば、「エンディングを見たことがあるか否か」といったセーブデータに影響されない内容を保存します。

 

・ゲーム変数
セーブデータ毎に管理する変数です。他のセーブデータが呼び出されると上書きされます。 例えば、「アイテム管理」や「どの選択肢を選んだか」といったゲームの進行に関わるデータを保存します

 

・一時変数
一時的に使用するデータを保存します。ゲームを再開しても復元されません。

 

実際に公式のコードを見ていきます。(公式より引用)

(今回は実践しようがないのが残念...。)

これらで代入した値は、後で条件分岐で使ったりそのまま画面に表示したり、多様な活用が可能です。

 

さらに、[iscript]タグを使うと、連続したevalを完結に記述することができます。

例えば、先程のコードは(↓)

このように省略できます。

 

変数として使用可能な名前

ティラノスクリプトでは変数に自由な名前を付けることができます。

 

ただし、以下のルールは必須です。

・変数名には半角英数と全角文字、_ (アンダーバー) を使うことができる
(例) f.flag_test

(例)sf.your_name_3

 

・変数名の最初に数値がくることはできない
(例)× f.3name はダメ

 

変数の演算

計算をしたい場合は、

この例では、f.flag1 に 1 を足した物を f.flag1 に代入しています ( つまり f.flag1 に 1 を足している )。

 

次の例では掛け算を用います。

f.flag2 と f.flag3 をかけたもの(*)に f.flag1 が加算されたものが f.flag1 に入ります。
割り算を行うときは / (スラッシュ) を用います。

 

文字列の連結+を活用します。

 

■変数の削除

変数を削除する場合 delete 変数名と記述します。

例えば、f.flag1 を削除したい場合は

と記述します。

 

他にも、[clearvar]ゲーム変数を一括で全消去

[clearsysvar]タグでシステム変数を全消去できます。

 

🔳変数の内容を表示する

変数の内容をシナリオで表示したい場合は[emb]タグを使用。


例えば、以下のようになります。

実行結果は、

f.numの内容:200
f.mojiretuの内容:こんにちは

これは、主人公の名前を自由に選択できるときなどに、活用できます。

 

🔳エンティティ

エンティティ機能は、変数の内容で他のタグ属性を置き換える機能です。
属性の値に、&を続けて変数名を記述します。

 

ということで、今回はここまで!

 

今回は「変数と演算を理解する」をやってみました。

実践できないので、公式に沿って見ていくだけになりましたが、やっぱり変数関係はゴチャゴチャしてくる...!

いずれ実践して理解を深めていきたいです!

 

次回もティラノスクリプトやっていきます!

 

 

 

 

ティラノスクリプト~レイヤーを理解しよう~

こがしぱんです。

 

前回は「目パチ・口パク機能_その2」をやってみました。

 

今回は「レイヤーを理解しよう」です!

 

まずは、レイヤーについてです。(公式より引用)

ティラノスクリプトの画面は全てレイヤーと呼ばれるものが重なりあって作られています。
レイヤーは層のようなもので、透明なものがいくつも重なり合ってると考えるとわかりやすいでしょう。

(クリスタやフォトショップをいじったことある人には馴染み深いあのレイヤーです!)

 

趣旨は少し違いますがレイヤー機能について、さらに分かりやすく解説しているページです(↓)

www.clipstudio.net

 

次は、レイヤーの種類について。

 

ティラノスクリプトでは以下の種類のレイヤーが存在しています。(公式より引用)

・baseレイヤー
画面に1つだけ存在します。これは必ず一番後に位置していて、背景を表示するためのレイヤです。 このレイヤを指定する場合は layer="base"としてください。
レイヤの画像を非表示にする場合は[freeimage layer="base"]とすることで、背景画像がなくなります。

 

 ・前景レイヤー
キャラクターや画像を表示するためのレイヤーです。デフォルトで3個配置されていて、layer="0" layer="1"のように指定します。
前景レイヤの画像をクリアする場合は[freeimage]タグを使います。
(レイヤ数10というのはデフォルト値です。Config.tjsを修正することで自由に増減することができます)

 

 ・メッセージレイヤー
メッセージを表示するレイヤです。デフォルトで2個配置されています。
テキストを出力するメッセージレイヤは、[current layer="message0"] [current layer="message1"]のように指定することで切り替える事ができます。 (レイヤ数2というのはデフォルト値です。Config.tjsを修正することで自由に増減することができます)

 

 ・フリーレイヤー
このレイヤはlayer="free"のような形で指定することはできません。
グラフィックボタンやクリッカブル、HTMLなどが表示されるエリアです。
このレイヤは標準では非表示状態ですが 上記のタグを使用した場合、最前面に配置され、ストーリーが停止します。

[cm]タグを挿入することで、フリーレイヤは非表示かつ、レイヤの中身はクリアされます。 つまり、このレイヤが表示されている状態から、jumpする方法を提供し、その先で[cm]タグでストーリーが進行出来るようにする必要があります。

簡単な例を挙げると、選択肢をグラフィックボタンで表示 → クリックされた先で[cm]するとフリーレイヤが解除されて、ストーリーが進むということです。
 

・fixレイヤー

「layer=fix」のように指定します。「固定レイヤー」とも呼ばれます。このレイヤーには常に画面に表示しておきたいものが配置されます。

fixレイヤーは[clearfix]を実行しない限り、他のタグから消されることはありません。

 

 続いては、レイヤーの裏表とトランジションです。

 

フリーレイヤを除いたすべての1つのレイヤーに対して、表(fore)裏(back)という概念があります。

つまり、1つのレイヤーは表ページと裏ページという2つのレイヤーから成り立っているという事になります。

裏ページは常に非表示な状態でゲーム画面に出てくる事はありません。
じゃあ、何故存在するのかというと[trans](トランジション)というタグを実行した際、裏ページと表ページが入れ替える事ができるのです。

 

それでは、実際の例を見ていきましょう!

以下スクリプト(公式より引用)は、背景画像を切り替える時の方法です。

 

保存、実行!

エラーだ!!

 

原因追及!!

全然分からない...!

色々試行錯誤してみましたがエラーが取れない!

うーん、もう少し深くまで調べてみます。

原因が分かれば追記します。

 

ということで、今回はここまで!

 

今回は「レイヤーを理解しよう」をやってみました。

最後の裏表のトランジションが消化不良な感じでモヤモヤしますが、エラー原因を追究していけたらなと思います。

 

次回もティラノスクリプトやっていきます!

 

 

 

 

ティラノスクリプト~目パチ・口パク機能_その2~

こがしぱんです。

 

前回は「目パチ・口パク機能」をやってみました。

 

今回は「目パチ・口パク機能_その2」です!

 

前回の目パチ・口パク機能よりさらに詳しく内容を見ていきます。

 

目パチ・口パクの設定には[chara_layer]タグを使用します。

[chara_layer]タグはもともとキャラクターのパーツ(目、眉、口など)の差分ファイルを定義するためのタグでした。

 

今回のアップデートにより、この[chara_layer]タグに目パチや口パクの設定をするための新しいパラメータが増えたということになります。

 

■目パチ用の新しいパラメーターの一覧(公式より引用)

【frame_image】 → パーツアニメーションの差分画像。カンマ区切りで複数指定可能。storageに指定した画像と拡張子が同じである場合、拡張子を省略して書くことが可能。(アニメーションに使用する画像は、storageに指定した画像と同じ場所に配置します。アニメーションに使用する画像のファイル名が空白記号から始まっていてはいけません)

 

【frame_time】 → パーツアニメーションの各コマの時間。ミリ秒単位の数値をカンマ区切りで記述。storageに指定した画像の分も含めて指定します。ハイフンで区切った2個1組の数値を指定することで、その範囲からランダムで決定されるようにできます。目パチの時間にバラつきをもたせたい場合に使用できます。
省略した場合、標準的な目パチの頻度・速度を想定し、4000-8000,50,50,50…が設定されます。

 

【frame_direction】 → 最後のコマを表示したあとすぐ最初のコマに戻るのではなく逆順にコマを表示していく(0→1→2→1→0)ようにしたい場合、alternateを指定します。

 

【frame_loop】 → アニメーションをループさせずに最後のコマで止めたい場合はfalseを指定します。

 

目パチのためには最低限frame_imageを指定すればOKで、時間を調整したい場合はframe_timeも指定します。もちろんこのパラメータは目のパーツだけでなくすべてのパーツに指定できるため、目パチ以外のアニメーションも考えられそうです。

 

■口パク用の新しいパラメーターの一覧(公式より引用)

【lip_image】 → 口パクに使用する画像ファイル。frame_imageと同じように指定します。なお、frame_imageとlip_imageを併用することはできません。音声ファイルによるリップシンクを行う場合には、より口が閉じている画像から順に書きます。

 

【lip_time】 → 口パクの画像を切り替える時間をミリ秒単位で指定します。省略した場合は50ミリ秒となります。

 

【lip_type】 → 音声ファイル(ボイス)によるリップシンクを行いたい場合はvoiceを指定します。省略した場合はテキストベースの口パクになります。

 

【lip_volume】 → 音声ファイルによるリップシンクを行う場合に、画像を切り替える音量の区切りをカンマ区切りの数値で指定。音量は音声ファイル再生中にリアルタイムに解析され、0~100で表されます。数値はlip_imageで指定した画像の数だけ必要です。このパラメータは省略してもかまいませんが、違和感がある場合は微調整を推奨します。

 

【lip_se_buf】 → リップシンクの対象とする[playse]のbufを指定します。ここで指定したbufで[playse]が実行されたとき、chara_ptextにこのキャラの名前が入っているなら、このキャラのリップシンクを開始します。

 

【lip_se_buf_all】 → リップシンクの対象とする[playse]のbufを指定します。ここで指定されたbufで実行されたすべての[playse]について、このキャラのリップシンクを開始します。(chara_ptextに関係なく

 

口パクも同様に[chara_layer]で設定します。口パクにはテキストの口パクボイス音声と連動した口パク(リップシンクの2種類があります。

 

・テキストの口パク設定

最低限lip_imageだけ設定すればOK。時間を調整したい場合はlip_timeも併せて指定する。

 

・ボイスの口パク設定

ボイスのリップシンクを行う場合、lip_imageに加えてlip_type=voiceを指定する必要があります。また、以下のいずれかの方法でボイスとキャラの紐付けを行う必要があります。

lip_se_bufパラメータを指定する。そして[chara_ptext]でキャラの名前を出した上で、指定しておいたbufを使って[playse]でボイスを再生する。


lip_se_buf_allパラメータを指定する。その指定したbufを使って[playse]でボイスを再生する。(この場合キャラ名を出す必要はない)


ボイスを再生するときの[playse]に、たとえばchara=”akane”のように、charaパラメータでキャラ名を指定する。(この場合lip_se_bufやlip_se_buf_allは設定しなくてよい)


 [voconfig]を使ってボイスを再生する。(この場合もlip_se_bufやlip_se_buf_allは設定しなくてよい)

 

実際にボイス音声と連動した口パク(リップシンクスクリプトを見ていきます。

 

まず、以下、スクリプト(公式より引用)をコピペ。

 

変更した点は↓の赤枠

 

「lip_image="mid, open"」の後ろに「lip_type="voice"」を追加しただけ。

 

あとは音声を再生するタイミングで、

[playse chara="chara1" storage="voice/chara_1.mp3"]

のようにキャラクター名を指定すると、その音声に合わせて口がアニメーションしてくれます。


通常は無音のときは閉じた状態で、少し音量が上がると中間。一定レベルの音量になると最大といったように変化します。

 

続いては、途中で目パチや口パクの速度を変えたい場合

 

[cahra_layer]タグを再定義すると上書きすることが可能です。

 

例えば、以下スクリプトをコピペ(公式より引用)

 

保存、実行。

すっごい瞬きする!

目パチや口パクの速度を変えたい時は再定義すれば、すぐに変えることができます。

 

ということで、今回はここまで!

 

今回は「目パチ・口パク機能_その2」をやってみました。

 

前回よりもさらに詳しい内容の目パチ・口パクを見ていきました。

やはり目パチ・口パクが加わるとキャラが生き生きしてる感じしますね!

 

次回もティラノスクリプトやっていきます!

 

 

 

 

ティラノスクリプト~目パチ・口パク機能~

こがしぱんです。

 

前回は「キャラクターのパーツ差分機能_その2」をやってみました。

 

今回は「目パチ・口パク機能」です!

 

ティラノスクリプトでは、なんとキャラの目パチ・口パチ機能を実装することができるとのこと!

以下、リンクから実際の機能動作を見ることができます。

tyrano.jp

 

さっそく、目パチ・口パチ機能を使っていきます。

最初に目パチ・口パチのための差分画像を用意する必要があります。

 

今回は、以下の様な画像を使用。(公式より引用)

この目なし・口なしの画像がベースとなる画像で「base.png」とします。

 

続いて、目パチと口パクの差分画像を用意します。これらは先程のベース画像と同じ解像度で用意する必要があります。

 

■目パチ差分画像

 

・開いている状態(open.png


・中間の状態(mid.png

 

・閉じている状態(close.png

 

口パク画像も同じ様に用意します。

 

■口パク差分画像

 

・開いている状態(open.png

 

・中間の状態(mid.png

 

・閉じている状態(close.png

 

今回は目パチ・口パク用に「chara1」というフォルダを作成しました。

目パチは「data/fgimage/chara1/eye」、口パクは「data/fgimage/chara1/mouth」の中にそれぞれ画像を保存。

 

次は、目パチ・口パクのキャラクターを表示してみるです。

用意した画像を使ってゲームで表示させていきます。

 

今回も目パチ・口パク用のプロジェクトを作成します。

 

新規プロジェクトの作成方法については以下(↓)の記事にて記述しています。

kogashipanroom.hatenablog.com

 

目パチ・口パク用のプロジェクトを作成しました(↓)。

背景表示、メッセージウィンドウ表示、キャラ名欄などは付けている状態です。

 

まず、以下スクリプトをコピペ。(公式より引用)

 

内容について確認していきます。

まず、[chara_new]タグでベース画像を登録します。

 

次に、[chara_layer]タグを使って差分パーツである目パチと口パクを登録していきます。

 

■目パチ

storageパラメータで目が開いている状態(open.png)を登録し、frame_imageパラメータに中間(mid.png)、閉じている(close.png)を登録しています。

 

この「frame_image」パラメーターとは、パーツアニメーションの差分画像。カンマ区切りで複数指定できます。storageに指定した画像と拡張子が同じである場合、拡張子(.png)の省略が可能。

 

つまり、「 open」→「mid」→「close」の順番で差分がアニメーションするという定義になります。

 

そして最後のframe_timeパラメータでアニメーションの時間を制御することができます。

 

この「frame_time」パラメーターとは、パーツアニメーションの各コマの時間。storageに指定した画像の分も含めてミリ秒単位の数値をカンマ区切りで記述します

 

上記のスクリプトの場合、

・open.png4000〜6000ミリ秒の間でアニメーション実行
・close.png80ミリ秒間表示
・mid.png80ミリ秒間表示

という意味を表現しています。

 

ハイフンで区切った2個1組の数値を指定することで、その範囲からランダムで決定されるようにできます。

省略した場合、標準的な目パチの頻度・速度を想定し、4000-8000,50,50,50…が設定されます。目パチなどは一定間隔ではなく、ランダムに実行したほうが自然な表現が可能です。

 

■口パク

口パクの記述も目パチと同じです。
ティラノではnameで自動的に紐づけを実施し、当該のキャラクターが話している間は自動的に口パクをしてくれます

 

口パクにはテキストの口パクボイスの口パク(リップシンクの2種類があります。
特に指定がなければテキストタイプの口パクになります。

 

それでは、この内容で保存、実行!

ならない!!何故だ...。

 

色々調べてみたところ、もしかしてでは!

 

今、使ってるバージョンが「v523」なのでバージョンが足りてない疑惑...。

 

公式サイト確認したところ、いつの間にか「V6」まで出てました!

全然気づかなかった...。

 

さっそく、最新状態にアップデートしてきます!

 

まず、「ティラノスクリプトV6」

「ティラノスタジオV6」をダウンロード。

 

次に「TyranoStudio_win_std_v120/myprojects/目パチ・口パク」フォルダをコピー。「TyranoStudio_win_std_v601a/myprojects」フォルダの中に貼り付け。

 

そして、「tyranoscript_v600beta5」フォルダの「index.html」と「tyrano」フォルダをコピー。

 

「TyranoStudio_win_std_v601a/myprojects/目パチ・口パク」フォルダの中に貼り付け。

 

貼り付けする際に、↓の画面が出てくるかと思うので「ファイルを置き換える」をクリック。

「TyranoStudio_win_std_v601a」フォルダ内の「TyranoStudio.exe」をクリックし、起動。

 

起動する際に、↓の様な画面が出てくるかもしれませんが、

 

詳細情報」を押して、

 

実行」を押す。

 

すると、↓の様に「ティラノスタジオV6」が起動します!

 

次に「既存プロジェクトの読み込み」をクリック。

 

「TyranoStudio_win_std_v601a/myprojects/目パチ・口パク/index.html」を選択。

 

何か、エラー出てきた!

 

とりあえず、「OK」を選択。

 

アップデートが完了したとのことなので、「OK」を選択・



プロジェクトの読み込みができましたー!

 

さっそく、実行!

おおおおーー!目パチ・口パク来ましたーー!

 

ということで、今回はここまで!

 

今回は「目パチ・口パク機能」をやってみました。

 

今回の内容を通して身に染みて感じたのはアップデートは大事!ということですね...。

今後はバージョン情報もしっかり確認していきたい。

 

次回もティラノスクリプトやっていきます!

 

 

 

 

ティラノスクリプト~キャラクターのパーツ差分機能_その2~

こがしぱんです。

 

前回は「キャラクターのパーツ差分機能」をやってみました。

 

今回は「キャラクターのパーツ差分機能_その2」です!

前回では終わり切れなかった分をやっていきます。

 

前回、差分パーツを定義するところまで記述しました(↓)ので、今回は実際に差分変更を実施していきます。

 

差分変更を実施する場合のタグは[chara_part]です。以下スクリプト(公式より引用)をコピペ。

          ↓

このタグを使用することで、[chara_layer]タグで定義したpartとidの組み合わせをパラメータとして自由に指定できます。

 

また、複数を同時に変更することも簡単で、例えば「目」以外に「くち(mouse)」として、差分を定義していた場合、以下スクリプト(公式より引用)のように、同時にパーツを変更することも可能です。

 

それでは、公式よりサンプルパーツからキャラクターを表示するコードが丸ごと記載されていますので、(↓)

上から順に確認して実行してみたいと思います。

 

・体パーツ

 

この「body_back」というのが体の素体?みたいな感じですね。

一番後ろにくるパーツなので「zindex」は一番小さい数値に設定。

 

2行目に上から着るブレザーのパーツを定義。

 

「body_front」が体の前に当たるパーツになりますね。

「zindex」は数値が大きいほど前面に来るので、素体より大きい数値の「10」を設定。

 

・目パーツ

前回内容について記述しているのでそのまま。

 

・髪型パーツ

 

1行目に前髪パーツを定義。zindexは一番前面に来るので大きい数値の「40」を設定。

 

2行目に差分パーツを定義。

 

2行目はくせ毛パーツを定義。

 

・顔パーツ

 

1行目に顔の素体みたいなパーツを定義。zindexは体パーツより大きく、目・髪型パーツより小さい数値の「11」を設定。

 

2行目に差分パーツを定義。

 

2行目は青ざめた顔パーツを定義。

 

・表情パーツ

 

1行目に表情の眉と口にあたる素パーツ定義。zindexは目のパーツと同じ数値の「20」。


2行目に表情の差分パーツを定義。

 

2行目は驚きパーツを定義。

 

・アクセサリパーツ

こちらは、最初は非表示で、後から表示するパーツ

 

1行目にアクセサリパーツの定義。zindexは目・顔・表情パーツより大きく、髪型パーツより小さい数値の「30」。

デフォルトがアクセサリなしだから、storage="none"とすることで表示しないパーツを作ることができます

 

2行目に実際に付けるアクセサリの定義。

 

2行目はメガネパーツを定義。

 

ここまでで差分パーツの定義は完了です!

 

最後にキャラクター表示の定義(↓)をして、保存、実行!

無事、表示されました!

 

全体的にみるとゆうこちゃんがめっちゃ小さく見える...。かわいい。

 

次は、差分パーツを切り替えてみます。

 

以下、スクリプト(公式より引用)をコピペ。

 

保存、実行!

おおーー!変わった!

 

メガネっ子にしたい時は、以下スクリプトを入力。

これで多分、いけるはず!

 

保存、実行!

メガネっ子爆誕!!

これで差分パーツの定義については完了です。

 

最後に差分のデフォルト値について。

[chara_layer]で最初に登録したパーツはデフォルトとして、扱われます。

 

例えば、目の差分パーツの時、1個目のid="1"がデフォルトです。

デフォルトは[chara_show]の時に表示されるパーツになります。

 

もし、デフォルトにまとめて戻したい時は、[chara_part_reset]タグを使用すると簡単に戻すことができます。

 

以下、スクリプトを入力。

保存、実行!

メガネっ子になる瞬間もなく、秒でデフォルトに戻りました!

 

また、↓の様に[chara_part_reset name="yuko" part="face" ]の「part」で特定のパーツを指定することで、そのパーツだけデフォルトに戻すことが可能です。

 

例えば、髪型を「くせ毛」からデフォルトの「ナチュラル」へ。

 

保存、実行。

前髪のみ「くせ毛」からデフォルトの「ナチュラル」に変わりました。

  

 

また、part="〇〇"をカンマ(,)で区切ると複数のパーツを指定してデフォルトに戻すことも可能。

 

例えば、表情、髪型のみをデフォルトへ。

保存、実行。

表情「驚き」と髪型「くせ毛」のみデフォルトの表情「素」と髪型「ナチュラル」に変わりました。

 → 

 

ということで、今回はここまで!

 

今回は「キャラクターのパーツ差分機能_その2」をやってみました。

 

パーツごとに切替ができるので、組み合わせによってたくさんの表情パターンを作れるのがすごくいいですよね!

しかも、最初に定義していれば、実際に変更する時に指定したpart名を入力すれば変更できるのでお手軽ですし、スクリプト文も短くなるので見やすくなります。

 

次回もティラノスクリプトやっていきます!

 

 

 

 

ティラノスクリプト~キャラクターのパーツ差分機能~

こがしぱんです。

 

前回は「キャラクター操作編_キャラクター表情登録」をやってみました。

 

今回は「キャラクターのパーツ差分機能」をやっていきます!

 

まず、パーツ差分機能について内容を確認。(以下、公式より引用)

 

キャラクターの表情差分を作る時、従来の方法ですと差分の数だけ画像ファイルが必要でした。

 

例えば、あかねの表情差分だと「akane_angry.png」、「akane_doki.png」・・・の様に表情ごとに画像ファイルを用意しています。

 

しかし、差分パーツ機能を活用すると、差分パーツを組み合わせて、様々なパターンの表情を表現できるようになります。

 

他にも、「服装」が3パターン。表情が5パターン。髪型が5パターンの場合、すべての差分を表現するには画像ファイルが75ファイル必要になります。

 

しかし、差分パーツ機能を使用すると、必要な時に各々のパーツを組み合わせて表現できるので、必要な画像ファイルは13ファイルだけで済みます。

 

ゲームの容量を小さくできますし、動作も軽くすることができます。

 

それでは、実践していきます!

 

前回の内容と分けてスクリプトを記述したいので、キャラパーツ差分機能用のプロジェクトを作成したいと思います。

 

「キャラクター表示」(↓)では、

kogashipanroom.hatenablog.com

 

「ティラノスタジオ」を開いて「新規プロジェクト作成」からプロジェクト作成をしていました。

 

今回は別のやり方を試してみたいと思います。

 

「TyranoStudio_win_std_v120/myproject」フォルダに入っている「実践テクニック_キャラ操作」をコピーします。

     ↓

 

フォルダ名を「実践テクニック_キャラ差分パーツ」に変更。

 

ティラノスタジオを開いて、

 

右上の「既存プロジェクトの読み込み」をクリック。

 

「TyranoStudio_win_std_v120」のフォルダが開くので「myproject/実践テクニック_キャラ差分パーツ」から「index.html」を選択して「開く」をクリック。

 

右下に以下の様なポップアップが表示されます。

 

そして、プロジェクトを探してみると...、プロジェクト名が変わってない!!

何でだ....。

 

ググってみたところ、以下サイト様で解説が記載されていました。(ありがとうございます!)

note.com

 

最初に「実践テクニック_キャラ差分パーツ/data/system/Config.tjs」を開きます。

 

;System.title」と「;projectID」の名前を「実践テクニック_キャラ差分パーツ」に変えます。

 

;System.titleは既に「実践テクニック_キャラ操作」に変わっていたので、;projectIDを「tyaranoproject」から「実践テクニック_キャラ差分パーツ」へ変えます。

 

先ほど、読み込んだプロジェクトをティラノスタジオから一度、「削除」します。

 

次に、「TyranoStudio_win_std_v120/myproject/実践テクニック_キャラ差分パーツ」フォルダを開き「studio_config.json」を削除します。

 

「既存プロジェクトの読み込み」から「index.html」を選択して、読み込み。

 

プロジェクト名変わりました!

上手くいってよかった...。

 

それでは、パーツ差分機能について、実践していきます!

 

まずは、キャラクターと差分パーツの準備。

 

差分パーツは、同一サイズの透過されたpngファイルを重ねて、1枚のキャラクターを表現します。

 

今回は、以下リンクからキャラクター素材をダウンロード。

khmix.sakura.ne.jp

 

サイトの「Download」をクリック。

 

character_03.07.zip」がダウンロードされるので解凍。

        ↓

 

解凍したフォルダの中に、「data/default」というフォルダがあり中にキャラクターのパーツ差分ファイルが入っています。

 

・服

 

・目

 

 

・髪

上記以外にもたくさんの種類のパーツがフォルダ内にあります。

 

このように同じサイズの透過されたファイルを準備します。
これらを重ね合わせることで一つのキャラクターになります。

 

公式に沿って、以後、このファイルを使用していくため、「default」フォルダの名前を「yuko」と変更して「data/fgimage/chara/yuko」のように配置します。

 

   ↓

 

次に、差分パーツを定義して、表示します。

 

使用するタグは以下になります。

[chara_layer] → 差分パーツを定義します。


[chara_part] → 差分パーツで定義した表情を反映します。


[chara_part_reset] → 差分表示したパーツをデフォルトに一括で戻します。

 

最初にやることは、普通にキャラクターを表示する時と同様に[chara_new]でキャラクターを定義します。


ただし、いままでと違うのは、キャラクターの一番後ろに表示される土台を、storageに指定することです。

 

まずは、髪型。公式に沿って、ロングヘアを使用します。

data/fgimage/chara/yuko/hair_back/ロング.png

スクリプトは以下になりますのでコピペ。(公式より引用)

(背景以下の部分は削除してコピペしてます。)

上記スクリプトで最後列に配置するのは差分で変更しない画像を配置します。
このファイルを土台にして、パーツを定義していきます。

 

注)この土台となるパーツも差分で変更したい時は、完全に透明なファイルを[chara_new]で配置してください。

 

続いて上に乗るパーツの定義。例えば、目のパーツを登録したい場合。

以下、スクリプトをコピペ。(公式より引用)

 

気になったのが「zindex」。タグを検索してみたところ、以下の内容でした。

どうして数値が20で設定してあるんだろう?とりあえず、適当に数値置いたとかかな?

分からん...。

 

さらに調べてみたところ、「キャラ差分パーツ」の下の方に以下解説がありました。

つまり、最初にパーツを定義する時はzindexで数値の入力が必要ってことか!多分!

 

続いて「part」と「id」について。

part」はパーツとして登録する名前の指定。上記スクリプトだとpart=eyeとなっているため、eyeという名前の差分として、ファイルのパターンを登録しています。

 

id」は、パーツの中の差分を識別するための名前を指定します。例えば目というpartの中で笑顔の目はid=1、泣いてる目はid=2のようにidを分けて登録できます。

※id=○○は数字でなくても可

 

ということで、今回はここまで!

 

今回は「キャラクターのパーツ差分機能」をやってみました。

 

内容が盛りだくさんで1回じゃ終わり切れなかった...。

でも、差分機能を使いこなすことでゲームの容量や動作も軽くできるのでマスターしていきたいところ!

 

次回もティラノスクリプトやっていきます!