見出し画像

Suika2|プレイヤーが任意でバックログを削除できるようにする

Ronron & duo_beraです、こんばんは。
今回はSuika2でプレイヤーが任意でバックログを削除できるような機能を搭載させる方法をメモしていきます。

目次から読みたいところへ移動してくださいね。


実際の動き

もちものチェック!のおじちゃんこと、リシュフェンのセリフが消去されています。

この記事をある程度読めば、必要箇所をいじったりする場合は除いて。ほぼ、全部コピペで済みますからね。難しくないです。

バックログ削除機能のメリット

  • ゲーム動作が重くなってきた場合、安定する可能性がある

上記のみです。
「いやぁ、そんなことだけで実装するのめんどくせぇ。かったりぃわ」って方はスルーでお願いします!

そもそもバックログというのは、ゲームを作ったりプログラム描いたりしている人ではおなじみの、「変数」ってのを大量に溜め込み、プレイヤーが文字として認識させるように表示させているため、重くなりがちです。

スマホだとスクロールがスムーズに動かないとか、私の既存のゲームでもあるんですけど。それは処理が重いからです。私も軽くさせる方法は知らん!という感じです。ブラックボックス的なアレです。

…ソシャゲをプレイしていて、バックログの処理を軽くできているゲームを見ると、すげぇなと思ったりします。

推測するに、プレイヤーがメインメニューに戻ってきたり、章を選択させる画面では内部でバックログを削除させるようにモジュール化させていると思います。それでも重くなるときは重いのですけども。

何年後かに、今よりもスマホのスペックがある程度高くなり、それらがコストに見合うように価格も標準化された場合、気にしなくていい話です

あとは、「そもそも俺様のゲームやるのにハイスペックモデルで遊んでくれよ^^」っていう思考であるなら気にしなくていいですね。

次は実装するためのデメリットです。

バックログ削除機能のデメリット

  • 中の人と同じバージョンで制作を固定させる必要性がある

  • 新バージョンで行いたい場合、開発へ加わる必要性がある

上記2つです。

中の人の使っているバージョンは16.90です。17.01の段階では正常に動かなかったため、16.90固定で開発しています。

ツクールMZも1.3系列で作ったりしている人は珍しくないです。(もちものチェック!でも、そうでした)
1作作り終えるためにバージョンを固定させるのは、何ら問題はないと思っています。

中の人と同じバージョンはこちら
Windows版 Suika2
Mac版 Suika2

2つ目は、デバッグができる人推奨です。

デバッグやバグの報告の手順例

1.CONFIG画面を開き、「フルスクリーン」ボタンをタップする
2.フルスクリーン画面になる
3.サブモニターにて1,2を行うと、ゲーム画面が画面外に行ってしまう

これらはSuika2で実際にあったバグでしたが、開発者さんへの伝達が上手く出来ず、再現が困難でした。現在は直っています。

こういうのが好きな人は開発に加わることをおすすめします。

中の人は開発に関わっていたことがありますが、リアルが忙しくなって、仲良しGeeksたちと交流する他はDiscordを覗く時間が惜しくなったナドの理由で抜けました。なので最新版でのサポートを望むのであれば、開発者さんであるktabataさんに直接やり取りしてもらう必要性があります。

ちなみに私、超シングルタスクなので思考があっち行ったりこっち行ったりすると、すんごく疲れちゃうんです。そういう性格なので。気にしないで欲しいです。

その他のデバッグの仕方は調べればいくらでも出てくるのと、諸々割愛します。

要件定義については古い部分もありますが、Google Chromeなどで翻訳しながら読んでおくと開発コストがググッと下がります。

要件定義書

作成手順

長々としてしまいましたが、ここからはサクッと手順を公開していきます。
意味はわからなくていいです。動けばいいので。

①guiのtype:goto;の直下にgosub:true;を追加

guiディレクトリ内の「好きなGUI」ファイルで使えるようにします。(おすすめはhistory.txtか、config.txt)

冒頭の動画内や、記事内では「TITLE」ボタンで発動させていますが、実装する際には、任意の場所に「バックログ削除」のボタンを作ってあげてください。

# タイトルへ戻るボタン
TITLE {
    # 種類:タイトルへ戻る
    #type: title;
    type: goto;
    gosub: true;

    # 移動先のスクリプトファイル
    #file: init.txt;
    # ジャンプ先のラベル
    label: [BACKLOG削除];

    # 座標とサイズ
    x: 967;
    y: 625;
    width: 174;
    height: 80;

    # ポイントされたときの効果音
    pointse: btn-change.ogg;

    # クリックされたときの効果音
    clickse: click.ogg;

    # 読み上げテキスト
    alt: このボタンはゲームのタイトル画面に戻るものです。;
}

サンプルを貼らないと意味がわからないと思ったので、guiの中身もメモとして残します。

#でコメントアウトしている部分は削除してくださって構いませんし、仕様に合わせて大きく変更することを推奨します。

実際に動く事が大事なので、今回はconfig.txtでテストしました。

②macro用のTEXTファイルを作成

init.txtで呼ぶためのtxtファイルを作成します。このファイル名はsub.txtにしています。
既にmacro用のファイルを作成している場合は、追加する形でも構いませんが、毎回どんなときでも呼べるファイルを作成してください。

:[BACKLOG削除]
# メッセージボックスと閉じるためのファイルを変更(閉じさせないため同ファイル)
@setconfig msgbox.bg.file 70.png
@setconfig msgbox.fg.file 70.png

# メッセージボックスのy座標を変える
# xも変える必要性がある場合はxも任意で追加させよう
@setconfig msgbox.y 0

# ウェイト無しで文字を表示させる 
@setconfig msgbox.nowait 1

# メッセージボックス内のマージンをすべて消去
@setconfig msgbox.margin.left 0
@setconfig msgbox.margin.top 0
@setconfig msgbox.margin.right 0
@setconfig msgbox.margin.bottom 0

# 折りたたみメニューを非表示
@setconfig sysmenu.hidden 2

# [メッセージボックスを非表示にするボタンの座標] 
@setconfig msgbox.btn.hide.x 0
@setconfig msgbox.btn.hide.y 0
@setconfig msgbox.btn.hide.width 0
@setconfig msgbox.btn.hide.height 0

# メッセージボックス内のオートボタンの座標(メッセージボックス内の座標)
@setconfig msgbox.btn.auto.x 0
@setconfig msgbox.btn.auto.y 0
@setconfig msgbox.btn.auto.width 0
@setconfig msgbox.btn.auto.height 0

# メッセージボックス内のログボタンの座標(メッセージボックス内の座標)
@setconfig msgbox.btn.history.x 0
@setconfig msgbox.btn.history.y 0
@setconfig msgbox.btn.history.width 0
@setconfig msgbox.btn.history.height 0

# 上キーとマウスホイールでヒストリを表示させない
@setconfig msgbox.history.disable 1

# 絶対座標で表示させる
\p{348,346}BACKLOGを消去しました。

# ウェイト有りで表示させる 以下すべてをもとに戻す
@setconfig msgbox.nowait 0
@setconfig msgbox.bg.file system/msgbox/windowA.png
@setconfig msgbox.fg.file system/msgbox/windowA_hover.png
#自分の環境に合わせてファイル名などは変更してください

@setconfig msgbox.y 482
@setconfig msgbox.margin.left 368
@setconfig msgbox.margin.top 50
@setconfig msgbox.margin.right 203
@setconfig msgbox.margin.bottom 50
@setconfig sysmenu.hidden 0

# [メッセージボックスを非表示にするボタンの座標] 
#  - メッセージボックス内の座標
@setconfig msgbox.btn.hide.x 1231
@setconfig msgbox.btn.hide.y 87
@setconfig msgbox.btn.hide.width 48
@setconfig msgbox.btn.hide.height 48

# メッセージボックス内のオートボタンの座標(メッセージボックス内の座標)
@setconfig msgbox.btn.auto.x 1134
@setconfig msgbox.btn.auto.y 125
@setconfig msgbox.btn.auto.width 77
@setconfig msgbox.btn.auto.height 77

# メッセージボックス内のログボタンの座標(メッセージボックス内の座標, 省略可)
@setconfig msgbox.btn.history.x 1134 
@setconfig msgbox.btn.history.y 34 
@setconfig msgbox.btn.history.width 77
@setconfig msgbox.btn.history.height 77
# [上キーとマウスホイールでヒストリを表示する] 
@setconfig msgbox.history.disable 0
@wms clear-history.txt

# 一度システムメニューに戻ってきます
@gui system.txt cancel
@return

上記はそのまま私のゲームの仕様を載っけているため、ご自身のゲーム内の仕様に合わせて都度変更してください。
全くいじらず、そのまま仕様を合わせて使ってくださっても構いません。

◆動きに関してのメモです。

  1. 「BACKLOGを消去しました」と表示されている間はシステムメニューを動作させない

  2. ウィンドウに配置されたメニューボタン【ログ】、【メッセージを閉じる】、【AUTO】を触らせない

  3. ウィンドウの座標を変える

  4. ウィンドウの画像を変える

  5. ウィンドウ内のマージンをゼロにする

  6. 上キー、マウスホイール上、上スワイプでヒストリを表示させない

  7. メッセージをウェイト無しで表示させる

  8. guiに戻る前に最後はすべてもとに戻す

上記の条件を満たすためにメッセージウィンドウを全画面化させたいために、画像は黒70%の画像に変更させています。

同じ画像を使いたい方は、以下の画像をcgディレクトリ内に放り込んでくださいまし。減色済みです。

画像ソフトでの黒70%透過(著作権はないです。Free)
70.pngというファイルでcgディレクトリに置いてくだされば、コードの通りに動きます。

③init.txtなどシナリオ上でusing macro/sub.txtなどで呼ぶ

# ----------------------------------------------------
# macroを読み込ませない
@goto macroEND
using macro/sub.txt
:macroEND

上記のようにシナリオの末尾に必ず呼んであげてください。

txtディレクトリの中にmacroというフォルダを作っているため、このような表記ですが、txtディレクトリ直下の場合、

# ----------------------------------------------------
# macroを読み込ませない
@goto macroEND
using sub.txt
:macroEND

でOKです。

さいごに・・・

@setconfigは非常に使い勝手がいいので私のようにwmsがチンプンカンプンな方は積極的に使っていきましょう。

バックログ削除させるwmsはデフォルトに備わっているため、新規プロジェクトの中に入っているものでOKです。

guiからgosubで呼べれば、セーブ・remove用両方できるguiを別途用意して、【セーブファイルの消去】など。やりたいことがかなり出来るんじゃないかなと。

それでは、ここまでお読みくださってありがとうございました。

「ここ、わかんねーよ」なんてコメントが有れば、嬉しいです。修正加筆します。

この記事が参加している募集

最近の学び

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