見出し画像

ゲーム制作記 2024/3月:マクロでアクション用ボタンとサブメニューだした話

この記事はゲーム開発知識皆無のティラノビルダー初心者が
自分用につけている備忘録です。説明もあるので長い。

今月やったことは
・アクション用ボタンをマクロで表示
・サブメニューボタン実装
・コンフィグをメニューボタンに追加・変更
・途中でセーブ画面に行く選択肢を入れる

進捗は1パート分構成終わりました。


ゲームの基本システム

今作っているゲーム:ワンバウoneは
謎解き風味のアドベンチャーゲームです。
色んなマップを駆け回って画面に表示されているポイントに特定のアクションやアイテムを使用することで先に進める系のやつですね。


■ビルダーのお気に入り登録機能

ティラノスクリプトで記述できなくても、
ビルダーにはコンポーネントをお気に入り登録できる機能があります。
何回も同じ場所に配置する画像があるけどxyや幅高さをいちいち覚えていられないし、とかジャンプ先が共通で毎回そこに飛ぶようにしたいとか。
1つのコンポーネントずつしか登録できませんが
何度も使用しいつも決まった数値での取り扱いになるものはお気に入りにするといちいち数値合わせしなくてよくなります。
(コピペでいいと思われがちですが、人間は必ず間違える生き物ですし。時間経った後からでもぱっと見でコンポーネント探せるのでやっぱり便利)

お気に入りの登録方法

保存したいコンポーネントで右クリック→お気に入り登録すると
名前を決められるようになるのでmodoとつけると

左のコンポーネント欄にmodoのアイコンができました。
これをドラックアンドドロップすると
ジャンプ先も画像もxy軸も幅高さも全部元と同じの画像ボタンが作れるようになってます。

お気に入りの消し方

右上のコンポーネント管理を押して
各お気に入りの表示非表示はレ点で変えます

右にあるお気に入り管理から削除できます。


■マクロ

マクロってなに?

ざっくりにいうと、ハンバーガーのセットメニューです。
「Aセットください」っていうだけでメニュー表通りのハンバーガーとポテトとドリンクが出てくる、みたいなものです。
長ったらしいのを毎回打つのめんどってときや
複数の処理をして欲しいな~って思ったとき、そのセット構成のテンプレを自分で作り、名前だけで呼び出せるって感じです。

そして、マクロを使う事の利点としては
元のマクロ定義を変更するだけで
そのマクロ使っている場所全部が一律で修正される
点ですね。
仮に1つずつコンポーネントで入力していっていると
10か所で同じことやってたのを微修正必要なので10か所分全部入れ直してくださいって言われたらしんどいよね?・・ということです。

ティラノスクリプトで作るような凝った作品ではないからいいや
というビルダー使用者でも
・フォントのサイズや色を変える(特に1ワード区切りの部分的な使用とか)
・そのキャラが喋る毎にぴょんと動いたようにみせる・・
とかの細かい設定もマクロでやると簡単だったりします

使い方

まずマクロを作る。
最初のうちは1つ2つの処理をするための簡単なマクロを作って運用してみるのが良いかと。
余談ですが私が初めてマクロを使ったのは、特定のワードにだけフォントの色を変えるようにするタグ記述を[fb]って省略するためでした。

マクロは最初に「定義」をしなくてはなりません。・・・え?定義?
定義とは一番最初に「このタグ名いれたら、こういう処理をしてね」ってビルダーにあらかじめ教えておく、ということです。

マクロを作る構造は
[macro name="マクロの名前"]←ここの名前が使用する際のタグになる。

実際にしてほしいスクリプトを入れる
 ティラノのタグでもよい。例えばifとかimageもつかえる

[endmacro] このマクロの処理はここまでって合図 必須

そして
④実際に①でつけた名前のタグを入力して使う、となってます。

マクロはティラノスクリプトのタグそのまま使えますしJavaScriptでの記述も適応しているのだそうです。すごい。
しかし、ビルダーでマクロを使うには
コンポーネント:ティラノスクリプトで記述する必要があります。
ゲ製の先輩方がいうにはマクロ定義集めたシナリオを用意しておいて、
そこを1度コール・リターンで経由させてから始めると管理が楽なんだそうです。ゲームを公開するときはプレイヤーが必ず通る場所(title_screen.ksとか)にコール置けばいいんじゃないかなと。

プレビュー中に [タグ]は存在しません ってダイアログが出る

自作マクロを使うと何度も遭遇しがちなエラー。
プレビュー機能はあくまで1部のシステムks引き出して現在のシナリオの指定箇所から再生するだけなので、マクロ用シナリオに書いてあるマクロ定義を経由した状態ではありません。
(タイトルなどにコールを入れておいて、そこを通過したまま「セーブ」したデータからロードして動かしてプレビューする分には支障ないですが、製作中だとセーブデータの管理とか更新が大変だったり)
面倒ですが、プレビューの際はマクロを使用している各シナリオの頭やここからプレビューした箇所より以降にコールでマクロ定義を経由させないといけません。やらないと自作マクロ部分に行く度ダイアログが出てきます。
テスト時にはこの手間が必要ですが
ゲーム書き出し時は最初の経由だけでいいのでシナリオ作り終えたらコールを消しとくと余計な挙動が減るかと。
ビルダーの中身がわかる方は元を弄ってしまいましょう。first.ksにはだめ。

あと考えられるのは単純なタイプミスです。
[message_on]が[massage_on]になったりしてるときも
「そんなタグありません」と言われてしまいます。


実際に使ったマクロ

・調べた場所にどんなアクションをするのか選ぶためのボタン一覧表示
・サブメニューボタンの表示
・マップ切り替え用の演出
・fixレイヤーとメニューボタンを一緒に表示/非表示にする

こんなかんじです


■マクロで画像ボタンを配置する

このゲームでは犬(プレイヤー)が特定のオブジェクトをクリックした際、
「くんくん」「穴掘り」「吠える」「やめる」のどれかを選択してそのアクションをとることがあります。

左下にぽっと出てくる

各ボタンは画像ボタン(グラフィックボタン)で表示させているのでゲームの進行は止まるし、各ボタンのジャンプ先ラベルには改ページが必要となりますね。毎回の各座標と飛び先のラベル名は決まっているのでマクロの出番。

いつ画像ボタンが表示されても対応できるマクロ

マクロ定義の時点でstorageを指定せず、targetだけを指定したボタンだと
タグリファレンスのbutton項目などにもある通り今現在いるシナリオ内のラベルに飛びます
逆に定義の時点でstorageを決めていると
どのタイミングでそのマクロからボタンが表示されても定義に指定してあるシナリオにまずは飛ぶってことですね。
(%で動かしたりはできるんですけども。そこはマクロの解説を)

今回はマップ毎にシナリオを分けて作っているので
シナリオの場所は「今いるks」で
「くんくん」用、「穴掘り」用、「吠える」用、キャンセル用
それぞれのラベルを毎回用意してます。
「何のオブジェクト」に「どんなアクションをしたのか」を同じマップかつシナリオ内で判定できるように・・・って感じですね。

;犬のアクションボタン
[macro name="マクロ名"]
[button graphic="○○.png" target=* x="" y="" width="" heigth=""]
[button graphic="○○.png" target=* x="" y="" width="" heigth=""]
[button graphic="○○.png" target=* x="" y="" width="" heigth=""]
[button graphic="○○.png" target=* x="" y="" width="" height=""]
[endmacro]

こんな風に定義しておいて[マクロ名]で使えるのは楽ですね。
実際に後から各ボタン座標の修正が必要だったのですが、ここ弄るだけで全部変更されましたし。これを一個一個コンポーネントでやってたら見にくいなんてものじゃなくなってしまいますしね。


■サブメニューを製作する

通常のメニュー画面の他に
実績・キャラ紹介・ヒントを機能を入れたサブメニュー画面を作っていました。(本当はコンフィグもありましたがメニューに移動させました、後述)

デザインセンスが欲しい・・・切実に

このサブメニューへのボタンは1度出したらそれだけで表示させ続けたかったのでfixに置くことにしました。
サブメニュー用のシナリオをstorageに指定してジャンプさせるfixボタンをつくるだけ~って・・・

fixボタンだからコール/コールリターンだしそれでうまくいくかと思いきや、
サブメニュー内でfixでコールした分のリターンしないままずっとジャンプし続けたりする仕様になるのに加え、戻り先がなんかうまくいかなくなってたので[sleep_game]を使うことにしました。

[sleep_game]

詳しくは公式タグリファレンスから・・
この機能をbuttonで使うにはbottonタグ内にrole=sleepgameをしているとよいそう。ちなみにroleつかうと強制的にfixボタンになるそうです。

[sleep game]は[awakegame]か[breakgame]と1セット

一度スリープした先では必ずアウェイクかブレイクをしないといけません。
つまりスリープしてる先でさらにスリープ・・とはできないのです
(スリープ前の一番最初の画面まで戻れなくなってしまいます)

そこで困ったのがコンフィグです。
コンフィグ画面はスリープでゲームの進行そのものを止めて移動し
アウェイクで元の画面まで戻る
仕組みになっています。
そうなると、サブメニュー開く際にすでにスリープをつかっているこの構成ではその先にコンフィグをおくことができないということになってしまいます。

なので・・・メニュー画面にコンフィグを付けることに


■メニュー画面にコンフィグボタンを追加

ビルダーでのやり方は

こちらの記事がとても参考になりました。
(サイバーノーツ様は私のnote見るよりはるかにわかりやすい解説でいっぱいなのでティラノでこういうことやる方法を~って知りたい方はぜひ)
※メニュー画面のレイアウト変更には最低限のhtmlの知識が要ります。

コンフィグボタン追加したメニュー画面でしたが
セーブ・ロード・タイトルに戻るの3ボタンだけのメニューでちょうどいい感じだったのでなんか歪な感じになってしまった

これが前
もうちょっと全体をいじらないとダメかも・・・犬下げようかな

コンフィグボタンはもともと、タイトルの時点でプレイヤーに音量の調節してもらうのも含めてタイトル画面に置いておくつもりだったのですが、メニュー画面にもあって良いのかなとおもって。


■チャプターの終わりにセーブする選択肢

「ここまでの記録をセーブしますか?」って出るやつです。

・タイトルなどに戻らず現チャプターEDと次のOPへとそのまま続く仕様
・セーブができるメニュー画面をイベント中は非表示にしている
ということから、チャプターの区切りにセーブするかどうかの選択肢をチャプターEDの最後に入れることにしました。

しかし、ここでrole=saveにしたボタンでは変な挙動にしかならなかった(今思うとsavesnap見落としてたのかな?)ので

1:ここまで読んだことを記録しますか?というテキスト
※入力モードを「何もしない」にしておくとテキストが表示されたまま選択肢が出ます。

2:「はい」と「いいえ」の分岐ボタン表示
 【ゲーム停止】

3:「はい」のラベル
 ①【改ページ】
 ②【ウィンドウ非表示】
 ③ [showsave] これはセーブ画面を表示させるタグ
 ④進行用のラベルAにジャンプ

4:「いいえ」のラベル
 ①【改ページ】
 ②【ウィンドウ非表示】
 ③進行用のラベルAにジャンプ

5:ラベルA (次チャプターのop)

って感じにしたら想定通りの動きになりました。
因みにこのままでやるとセーブデータ欄に出るスクショはセーブ画面に移行する直前のものとなっているので背景だけじゃなく画像とかも置けばそれがセーブのスクショ場面になるのでアイキャッチみたいなのにするとお洒落かも

こんなかんじ・・

今回はここまでです。
実績とCGの開放など、1チャプター片付いたことで作業にテンプレが作られ一区切りができた感がありますね。
システム周りはこれ以上大きくうごかないつもりなのでこれからは少し楽できるなと思いつつゆったりまったりと続けていきたいです


この記事が気に入ったらサポートをしてみませんか?