見出し画像

ゲーム制作記 2024/6月:ビルダーで全体マップを作る+シナリオ更新式にする場合の話

この記事はゲーム開発知識皆無のティラノビルダー初心者が
自分用につけている備忘録です。忘れやすい自分用なので回りくどい説明ばかりの長文。目次で必要な部分をみてくださ・・・
なるべくティラノビルダーのコンポーネントのみで動かせないものかともがいている人間の独り言です。

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



今月の進捗
今月はチャプター2が一通り動く程度に完成しました。
そしてこのゲームの公開についてですが、
チャプター3までできた段階で一旦公開し、残りの4と5は完成次第追加更新していくという計画となりました。
今回は移動用の全体マップを作った話と、
データ追加更新式の公開にするにあたり必要になる付随作業のお話です。


■全体フィールドマップを作る

ゲームでよく見かける全体地図みたいなのが出てきて「どこに行きますか?」でそのマップのスタート地点に飛べるやつ。

こういうの。センスの無さを笑うと良い

全体マップはそれ単体でシナリオを用意した方が良いですね。
目印になる建物のアイコンなどは画像ボタンでも良いですし、
背景に直で描き入れるかイメージ画像+クリッカブルでも良いです。
お好きなように。
とりあえずそこの個所を押したら各マップのスタート地点のシナリオに飛ばせばいいです。

アイコンイラストを置いてそれをクリックすると各マップにジャンプするだけで終わり…でも十分によいのですが
さらにひと手間二手間加えるとプレイヤーの印象がより変わるかと

まずそのための事前準備として、
シナリオの進行度を管理する(どの段階までゲームを進めたか)ために
シナリオ用のゲーム変数を1つ用意します。
この記事では便宜上「進行度の変数」って呼びます。
あとはゲームを進めた(特定のイベントまでクリアした)ときにシナリオ用の変数に1ずつ数字を増やして代入していきました。1から始まって次の地点では2を代入次は3を代入って感じに自分の好きなように。


○マップ用シナリオの大まかな構成

①『マップアイコンの表示』
『目印や次の目的地を表示する』
※この部分は別シナリオにしてマップ用シナリオ→目的地用のシナリオ→マップ用のシナリオの続きに戻るジャンプ経由でも良いかと
③『現在地を表示する』
④『ゲーム停止』
ここで初めて[ゲーム停止]をいれます。


①マップアイコンの表示

・画像ボタンをマップのアイコンにする場合
家や村の画像ボタンを用意しジャンプ先を各スタート地点にするだけ。
※必ず移動先には[改ページ]を入れてください
マウスが上に乗ったときに色が変わったり強調させる縁取りをいれたりしたいときは、[ティラノスクリプト]を使いましょう
詳しくは公式タグリファレンスの[button]の欄へ
enterseでマウスオン時に表示したい画像を指定します。
ビルダーの画像ボタンの追加欄からマウスオン時の差分画像を追加し、そのパスをenterse=から打っていきましょう。

・クリッカブルでやる場合
クリッカブルの指定範囲を元画像のサイズより気持ち二回りくらい大き目にするとプレイヤーが微妙なカーソルのズレで勘違いを起こさずに合わせやすくて良いかと。

※シナリオの進行度によってあとから追加されたり行けるようになるみたいな場合

こういう時にいまどのシナリオ段階なのかを判断する必要があるので、
上でも触れた「進行度の変数」を使うことになります。
全体マップのシナリオを複数(序盤の最初期版と地点追加版)作っておいて、進行度の変数の値でジャンプする全体マップのシナリオ先を変えるとかでも良いです。
(例)
[ラベルA:どこまでマップアイコンを表示するのか判断するラベル]
[ジャンプ:進行度の変数が10以下の場合、ラベルB「目的地表示用のラベル」へジャンプ]
[ラベルA1:アイコン①表示](進行度の変数が10以上なら表示される)
画像ボタンまたはクリッカブルを配置
[ジャンプ:進行度の変数が20以下の場合、ラベルB「目的地表示用のラベル」へジャンプ]
[ラベルA2:アイコン②表示](進行度の変数が20以上なら表示される)
画像ボタンまたはクリッカブルを配置
~~~~~~~~~~~~~~~~~
[ラベルB:目的地表示用のラベル]※この記事でいう②の部分


②『目印や次の目的地を表示する』

作者以外には「行ける場所とただの背景」がすぐには見分けつきにくいのでマウス操作オンリーでは行ける場所だと一目でわかる目印があるとより遊びやすいと思います。
これは実に簡単な話で、行ける場所に目印の画像を配置するだけですね。
元のアイコン画像に最初から目印入れとくのでも、イメージ表示で矢印とか近くに置くのでも良いです。
目印については先ほどの①の各マップアイコン表示のところにそれぞれ一緒に[イメージ画像]でいれるのでも良いです。

・次の目的地を表示

プレイしていると、次はどこに行けばいいの?ってどうしてもなるものです。向かう先がわからないと、至る所をしらみつぶしで練り歩くことになってしまいますね。そういう時、シナリオの進行度で「次は○○へ行こう」って出してくれたらありがたいですね?
…その「次はどこに行けばいいのか?」を進行度の変数で管理します
・画面上に「次の目的地・・○○」ってテキストで表示させてもいいし
・通常の目印の他に「目的地」のマークをつけるのでもいい

主にこの2通りありそうです。

(例)
[ラベルB:目的地表示するためのラベル]
[ジャンプ:進行度の変数が5未満のときラベルB1へ]
[ジャンプ:進行度の変数が10未満のときラベルB2へ]
[ジャンプ:進行度の変数が15未満のときラベルB3へ]
[ジャンプ:進行度の変数が20未満のときラベルB4へ]
~~~~~~~~~~~~~~
[ラベルB1:目的地が自宅]
テキストの場合:[テキスト配置]で自宅と入れる
マークの場合:[イメージ表示]でその場所にマークを置く
[ジャンプ:次の「現在地表示のラベル」※この記事でいう③へ]
[ラベルB2:目的地が公園]
テキストの場合:[テキスト配置]で公園と入れる
マークの場合:[イメージ表示]でその場所にマークを置く
[ジャンプ:次の「現在地表示のラベル」※この記事でいう③へ]
[ラベルB3:目的地が学校]
テキストの場合:[テキスト配置]で学校と入れる
マークの場合:[イメージ表示]でその場所にマークを置く
[ジャンプ:次の「現在地表示のラベル」※この記事でいう③へ]
~~~~~~~~
と作っていきます。

あまりにも長くなるようだったら、別途に目的地表示用のシナリオを用意して、全体マップのシナリオ内のラベル→目的地表示用のシナリオ→全体マップの次のラベル※この記事でいう③のラベルへとジャンプで経由するのでも良いです。


③『現在地を表示する』

これは多分人によってはいるいらないあると思いますが、私はいる派なのでマップのシステム関係なく入れます。
この仕様には「マップの現在地」を判断する変数を用意します。
各マップに入った時点/もしくは出た時点で「マップの現在地」の変数にその場所の名前や値をいれかえて、それによって現在地として表示させるアイコンの座標を変えるというものです。

今回のゲームでは各マップから出て全体マップに行くときに「マップの現在地」の変数の値を変えて代入しています。
ティラノスクリプト無しでやると
[ラベルC]:現在地画像表示用のラベル※この記事でいう③
[ジャンプ:「現在地」の変数が村のときラベル:C1へ]
[ジャンプ:「現在地」の変数が山のときラベル:C2へ]
~~~~~~~~~

[ラベルC1:村]
[イメージ表示]:自キャラのアイコンの座標を合わせて表示
[ジャンプ:次の「ゲーム停止ラベル」※この記事でいう④へ]
[ラベルC2:山]
[イメージ表示]:自キャラのアイコンの座標を合わせて表示
[ジャンプ:次の「ゲーム停止ラベル」※この記事でいう④へ]


④ゲーム停止のラベル

②や③で色んなジャンプをしてきましたが、どの条件下の場合でも一番最後はすべて
[ラベルD:ゲーム停止用]
[ゲーム停止]
へ行きつくようなジャンプになっておわり、という形になります。
何を当たり前のことを…と思うかもですが[ゲーム停止]を使うのはここのタイミングです。マップのアイコン全ての表示/非表示のチェックが終わってから。
[画像ボタン][クリッカブル][分岐ボタン]などが有効になるのは、コンポーネントを配置した直後からではなく、[ゲーム停止]が入ったタイミングです。この仕様とジャンプなどを組み合わせて使うとこういうワールドマップでの何種類かのアイコンの表示/非表示などもできます。
長ったらしくここまで書いてきましたが、一番上の①から④のここまで全部ぶっ通しってわけなのです。

ここまでだらだら書いた結論としては
[if]とかがわかる方はそっちでやった方が作るとき分かりやすい
そもそもビルダーは、基本的なノベルゲームを作る機能に特化したエンジンなのでこれは致し方ない。でもビルダーの元はJavascriptで動くティラノスクリプトなので簡単な探索ゲームやコマンドRPGなんかも作れなくはない・・・


■シナリオ追加更新前提で公開するときに

今回のゲームは全体の5部構成のうち3部まで作った段階で公開することにしました。
理由は……ブラウザ・スマホ画面でのプレイの感じを4以降作る前に一度つかんでおきたかったからですかね
(あとプレイヤーのゲームシステムへのノリ方とか導線の検討とかしたい)

ノベコレ・ふりーむでのデータ更新の方法は簡単です。
1度公開までいけたらあとは追加/修正部分完成後もう一度全部アップロードすれば再度そのデータの審査が行われ、終わり次第運営さんが自動で新版に置き換えてくれます
更新されましたーとSNSで伝えれば、その後遊んでくれる方がブラウザでゲームを起動するとそのまま新バージョンで反映されます。
そう、ブ ラ ウ ザ 版は。

DL版で遊んでいた方が更新後のゲームを遊ぶためには
新バージョンをまた再DLすることになります。
それはつまり
旧バージョンで遊んでたセーブデータが丸ごとない状態ということ……?
・・・となったり色々あります。

ここから以下の内容は、
なるべく色んな方が遊びやすい形を考えるためのアイデアの1つとして参考にでもしてもらえればなと


・チャプター毎に予めゲーム本体を分割して配信するorチャプターセレクトを実装しておく

一番簡単で一番親切で一番不具合と無縁で安全な方法ともいえます。
前のチャプターから引き継ぐもの(キャラの好感度やEDの細かい分岐など)がないシステムのときは、これがベターなんじゃないかと。
一応引継ぎ要素があってもできないことはないのですが、その場合は新チャプター開始時のデフォルト値をすべて入れてあげないといけなかったり、再度プレイヤーに「あなたは前のチャプターでどのEDをみましたか?」と選択肢で答えてもらいそれぞれ分岐用の変数に変更を加える形になりますかね。

ブラウザ版でも旧バージョン時のセーブデータから続けてプレイしようとすると新バージョンでは起きない不具合が発生したりなどもありますので、
チャプターセレクト式の有無で再プレイのしやすさが滅茶苦茶変わります。長編ゲームは特にね。…お料理革命C.C.Cとかいうゲーム・・・

はじめから/つづきからを選ぶところに、チャプターセレクトにいく用のラベルと[分岐ボタン]などでそこに飛ぶための選択肢をつくり
[ラベル:チャプターセレクト]
[改ページ]※start/loadなどの分岐ボタンを消すため
[各チャプターへのボタン]→それぞれのシナリオ開始時点へのジャンプ
を入れていくかたちになるかと
前の画面に戻るためのボタンもあった方がプレイヤーの操作ミスに柔軟に対応できるのでおススメです。

上から順に「start」「load」「チャプターセレクト」「CGモード」です
「章のはじめから」を押すとこの画面になります

ゲーム初起動時から現バージョンの公開部分まで最初から全部一覧で表示されている式ならこれで終了。
各シナリオへのジャンプ先さえ間違えなければ本当にこれだけで終わります。

この方式のメリット
・いかなる状況のプレイヤーでも自分の見たいチャプターからプレイできる。
・再プレイしたいときにセーブデータを残してなくても振り返りやすい。
この方式のデメリット
・フリゲの性質上ほとんどいないとは思いますが、一番最後のチャプターだけみて終わりになる人などもいる・・・かも
・少し上でも触れた通り、この機能だけではキャラの好感度やED分岐などの各プレイヤーの前チャプターまでの情報や実績の解放情報などを完璧には引き継げない(ノベコレのバッジ機能は別)

しかし、
今回のゲームには
・チャプターをクリアすると次のチャプターが解放される(つまり再DLだと最初からしか選べない)
各チャプターにサブ実績要素を入れてしまったので、
DL版の人は更新のたびに再DLするうえに、また1から遊ばせることになってしまう・・
でもほぼ10割の人が毎回1からやりおなしてまでこのゲーム遊ばないよね・・と悩みの種が

で思いついた苦肉の策が次の項目。


・パスワード式でいつでもチャプター解放+実績解放

セーブ機能があったりなかったりな時代の昔のゲームあるあるのパスワード手法です。
あいことばを知っていれば途中からゲームをスタートできるという仕様です。これはこれで昔のゲームっぽくて良いかも…とちょっと思ってました

この方式のメリット
・パスワードさえ知っていれば各プレイヤーが自分の進行段階からスタートできる
この方式のデメリット
・そもそもそのパスワードをプレイヤーの大半が常に確認できる場所に事前告知していないとこの機能の意味がない
・こんな手間取らせるなら最初から全部チャプター解放しておいてよという遊ぶ側の気持ち(いきなり最後からプレイしてEDみる人ほぼいないという意)
・サブ実績取得の有無までパスワードにしたらそれだけでパスワードの説明欄とかえらいこっちゃ

主人公の名前をプレイヤーが自由に入力するシステムありますね?
あれの作り方を応用すれば「パスワードで解放」式も作れるかと。
ティラノビルダー公式のガイドはこちら(ガイド内画像が現行のビルダーと見た目上異なっていて混乱しますが、現バージョンでも同じ操作でつくれます)

公式の解説を踏まえたうえで、今回応用した大まかな作り
【準備】
①パスワード入力用の変数を用意する
②パスワード入力用のシナリオを作る
③入力画面のラベル・正誤判断するラベル・正解/間違い用のラベルを作る
【組み方】

④入力画面のラベルに「テキスト入力」を配置
⑤「画像ボタン」で「正誤判断するラベル」へ飛ぶボタンを配置し「ゲーム停止」
⑥「正誤判断するラベル」に「入力コミット」と「改ページ」を置き、その下に代入変数が特定の値と同じとき実行される「ジャンプ」を置くことで入れた値によって各正解のラベルや間違いのラベルにジャンプする仕組みをつくる。
⑦「正解の値」を入れたとき、それぞれ必要な処理の種類分だけラベルをつくり、フラグの管理とかしてく。
⑧「正解以外のワードをいれたとき=間違い」のときの「間違い用ラベル」を用意する
終点用のラベルを用意してどの場合も「入力画面のラベル」にジャンプで戻させる。


①パスワード入力用の変数を用意する
名前はなんでもいいです。ここでは便宜上passにしときます。
(他の用途の変数とは絶対に併用しないように)

②パスワード入力用のシナリオを作る
タイトル画面などにボタンを配置してパスワード入力用のシナリオへのジャンプをいれます

「パスワード入力画面のラベル」・「入力されたパスワードが正解かどうか判断するためのラベル」・「結果表示ラベル」をそれぞれ用意する
入力画面→パスワードがあってるかチェック→正解なら正解/間違いなら間違いでジャンプ先をかえるという処理に使用します

③パスワード入力用のシナリオに、『テキスト入力』を配置
[テキスト入力]:左のコンポーネント欄のシステムにあります。茶色っぽい色の欄のやつ。※青色の「テキスト配置」ではありません

この代入変数の欄に①で作ったパスワード入力用の変数名を入れます
入力用ウィンドウのサイズや位置を調整します。

④『画像ボタン』で入力決定ボタンを用意する
画像ボタンで
「決定」ボタンを作ります。分岐ボタンやクリッカブルは×。
画像ボタンのジャンプ先は「入力されたパスワードが正解かどうか判断するためのラベル」へ。
元の画面(タイトルとか)に戻るボタンを入れるときもここに入れとく。
そして[ゲーム停止]

「入力されたパスワードが正解かどうか判断するためのラベル」に「入力コミット」「改ページ」を配置する
入力コミット:テキスト入力内でいれたワードを代入変数に代入する機能
改ページ:このラベルへのジャンプが画像ボタンによるジャンプなので入れないとこの後ゲームがとまってしまう

⑥「入力コミット」と「改ページ」の下に「正解のパスワードだった時の場合のジャンプ」と「間違ってる時のジャンプ」を作る
条件付きジャンプをフル活用します。

そうです。これはお料理革命c.c.c.の画面

ここの処理で「どのワードを入れたら正解なのか」を判断してます。
変数:passの値が「りんご」と同じだったとき~ラベル:りんごにジャンプ、
変数:passの値が「みかん」と同じだったとき~ラベル:みかんにジャンプ、
変数:passの値がそれ以外だったときは~ラベル:間違いにジャンプ~
って感じに条件によるジャンプを作っていきます。
因みに上の画像で*yumeokにとぶジャンプを沢山作っているのは同一の正解用ラベルに飛ぶキーワード候補が沢山あったからです。そういう使い方もできます。
間違いのラベルにいくジャンプは「正解以外の値」のときにしたいので、各ジャンプ配置の一番下に置いておくと、正解のとき以外は全て間違いのラベルに飛ぶようになります。

⑦正解用の各ラベルに実行する処理をいれる
と難しく書きましたが、
今回の場合だと入れたパスワードによって
・解放するチャプターの範囲を変える
・特定の実績を取得済みにする
という別々の処理が必要になるのでその分のラベルが必要になります。
入れたパスワードがどんな処理をさせるためのものなのかをリンクさせながら作る部分です。作り手自身が混乱しないように。
メッセージなどで「○○が解放されました」とか入れるとプレイヤーにもパスワード内容がわかりやすくて良いかと。

○チャプターセレクトのチャプターを解放させたい場合
元のチャプターセレクト画面でボタンの表示条件を「システム変数」にしているのなら、それをオンにすればいいのです。
チャプター4まで解放(チャプター4からスタートできる状態)させたいのなら「チャプター1~4全部のシステム変数をオンにすればいい。ということ。
例:
[ラベル:チャプター3まで解放]※pass=ch3でここにジャンプ
[変数設定:システム変数チャプター3にオンを代入]
[変数設定:システム変数チャプター2にオンを代入]
[変数設定:システム変数チャプター1にオンを代入]
[ジャンプ:パスワード入力画面に戻るための⑨ラベルへ]
[ラベル:チャプター2まで解放]※pass=ch2でここにジャンプ
[変数設定:システム変数チャプター2にオンを代入]
[変数設定:システム変数チャプター1にオンを代入]
[ジャンプ:パスワード入力画面に戻るための⑨ラベルへ]
[ラベル:チャプター1まで解放]※pass=ch1でここにジャンプ
[変数設定:システム変数チャプター1にオンを代入]
[ジャンプ:パスワード入力画面に戻るための⑨ラベルへ]


⑧正解以外を入力した際の間違い用のラベルを用意する
正解があるなら間違いも用意する、これゲーム作りの基本の基本の基本基本。
⑥でのジャンプの指定が間違っていなければ、⑦の正解ワード以外の解答はすべてここにくるようになっているはず。なので間違いのラベルは1種でいいかと。
メッセージで「あいことばがちがいます」っていれるとプレイヤーはミスしたことに気が付けるのでなるべくいれましょう。
例:
[ラベル:不正解]
[間違えましたのメッセージなど]
[ジャンプ:パスワード入力画面に戻るための⑨ラベルへ]


⑨パスワード入力画面①に戻すだけの終点ラベル
これいる?→多分要らない・・・
ジャンプで①の入力画面に戻す用のラベルです。
①に元のメイン画面(タイトルとか)にもどるボタンを用意していればそのまま用が済んだらそのまま戻れますね。
passの値を毎回リセットしたいときとか、演出入れたいときとかここに入れとくと全部の正解不正解ラベルで同じコンポーネント置き続けなくていいので助かるよ、というだけ。


今回は、旧版からチャプター進行度と実績の取得情報のデータが欲しいだけなんですよねえ、ということで
こんなに長ったらしく書き残しましたが、なんと今回このパスワード式は使いません。


・旧バージョンのセーブデータを移行させる

もうどうにでもなれーという状態の思考。
引き継いで欲しいのはシナリオ進行度と実績の解放の有無だけなのに…という気持ち。

これは一応私のPC環境のみで何度か検証しただけの物ですので、実際どんな挙動になるかは公開してみてからではないと不明ですし、
あまりにも大きい変更では旧バージョンでのセーブデータと現行バージョンでのゲームデータに相違が生まれて大体バグる要素大です。
旧→新で弄ってない部分から引き続き遊ぶ際などに用いられる手法になるのかなと。

このデータ移行は
DL版のプレイヤー各自に自分のPC内手持ちにある「旧バージョンのセーブデータ」を
まっさらな状態の新バージョンに書き写す(コピーして貼り付け)という操作をしてもらうことになります。

・タイトル名_sf
・タイトル名_tyrano_data
このSAVファイルの2つがそのゲームのセーブデータ関連なので旧バージョンのこれをそのまま新バージョンの同じところにコピーで移してもらうようプレイヤーに告知する必要があります。
※操作を誤ると復元できませんので決して旧版の元データを消したり移動したりしないようお願い+自己責任で行う旨をお伝えください

○ティラノビルダー側であらかじめ必要な操作

ティラノビルダーの設定でその操作を受け付けるかどうかを選べますので、その操作を想定している場合は「外部セーブファイルの上書き」を「許可」にしてください。(デフォルトの設定では禁止となっています)
これをしておかないと、データ移行操作後の新バージョンもしくは旧バージョンのゲーム起動時に「セーブデータの移動を検知しました」的な警告が出てプレイできない?かもしれません。
(それっぽい警告テキストがエンジン内に入ってたのをみたので勝手な憶測)

当然のことですがこの仕様は、
「自分が遊んでいた旧版のプレイデータを新版に持っていく」用途に限定した想定のものです。
公式以外のネットに落ちているデータをそのまま利用するための物ではありません。※そもそもそんなもの怖くて触りたくもないですよねってお話。

この方式のメリット
・一例として、体験版のデータをそのまま製品版に引き継げる
・今回のゲームのように実績の解放情報もそのまま新バージョンに移行できる
この方式のデメリット
・旧版のデータのせいで新版ゲーム進行中に予期せぬエラーが起きる可能性大なので、追加式の場合特に気を付ける。
プレイヤーにも「旧版のセーブデータ」はセーブ箇所によっては進行不能になるのでその場合「新版のstartからまたやり直してほしい」旨を伝えておくとトラブルを避けられます
・コピー時の操作にミスすると不具合が起きますので、やり方を丁寧に説明する必要があり作った側も遊ぶ側もひと手間大変

今回のゲームでは、セーブデータ移行で
・どのチャプターまでクリアしたのか
・どの実績を取得しているのか
の情報を新バージョンに引き継いでもらって、
引継ぎ後初回時に続きを遊ぶ場合は旧セーブデータからではなく「チャプターセレクト」で各チャプターの頭から遊んで貰うという形でプレイヤーさんにお願いする予定でいます。(バグることはもう予測ついているので)


今月は以上になります。
8月末に3章まで公開できる形にするため、がんばる。頑張る。
実は去年の今頃は「お料理革命c.c.c」を作っていたので、全く同じこと言ってました。おしりに火をつけて頑張りますひぃひぃ。

ここまでで約1万字です。

こんなに書いてもこのnoteにたどり着くひとも読むひともいねーよって思った貴方はとても賢い。本当にその通り。
でもこのnoteはど忘れをかましまくる私の為の備忘録なのでそれでよいし、これからもひっそり綴っていこうと思ってます。

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