RPGツクールMVのウェブブラウザ機能やスマホ向け出力機能により、様々なことができるようになりました。プラグインの数も増えてきて、既存のゲームに近い処理もできるようになってきています。
そんな中、ちょこっと思ったことがあります。
「よくスマホゲームに見る曜日クエストみたいなのは作れないのか?」
▲スマホゲーム「白猫プロジェクト」より。キャラ育成に必要なアイテムが曜日ごとに手に入るクエストが登場する
▲スマホゲーム「グランブルーファンタジー」では曜日に応じてキャラクター進化に必要な素材が手に入るイベントが登場する
ウェブ出力版でプレイしているってことは、ウェブに繋いでいるんだから時間取得できるんじゃないかな……という発想からそんなことを思ったんですが、先日開催したRPGクリエイティ部飲み会の二次会でそんなことを話しているうちに、「いや、JavaScriptならローカルでも取得できないのかなぁ……」というような仮説に繋がり、実際やってみたらできたっぽいんですよね。
今日はその処理方法を皆さんにご紹介したいと思います。簡単な処理で再現できたので、ツクールMVのJavaScriptでの処理入門としても最適です。
曜日処理のサンプルデータ
スマホゲームなどに慣れていない一にとっては、
どういう意味?
と思われる方も多いかもしれませんので、
今回ツクールのデモデータを作成しました。
話し掛けた時の曜日に応じて、処理が変わるようなイベントという認識で見て頂ければと思います。
デイリーイベント処理を作ってみた
今回は以下のような流れで作成していきます。
1.スクリプトコマンドで曜日に関する情報を取得する
2.「1」で取得した情報をツクールで使えるようにツクールの変数に変換
3.ツクールの条件分岐で曜日ごとに異なる結果へ分岐させる
少し工程説明だけ見ると難しいかもしれません。
が、実際ではスクリプトコマンドでJavaScriptを使ったものが
2つ入っているだけで、ほとんどツクールで処理できるような形で作成できます。
なお、解説ではJavaScript入門も兼ねてわかりやすい書き方していますが、終盤に一行で書く方法も紹介しています。記述方法のみで良いようであれば、後述の「省略して記述・実行する方法」をご覧ください。
1.スクリプトコマンドで曜日に関する情報を取得する
まず、JavaScriptを使用して、曜日の情報を取得していきます。
曜日の情報を利用するために、まずJavaScriptで架空の変数を作成し、
その変数に日付や曜日などの時間情報を色々と取得できる
『new Date()』というのを使っていきます。
イベントの実行内容へイベントコマンド『上級』→『スクリプト』を選びます。
スクリプトを選ぶと、直接JavaScriptでの処理を記述できます。
以下の内容で記述を行って下さい。
youbi = new Date();
『new Date()』は、=(イコール)の左側に書いた
変数の中に、色々な情報を入れこむようなコマンドです。
今回はyoubiという変数の中に実施したので、youbiの中には
『new Date()』で様々な時間情報が取得されました。
▲『new Date()』でyoubi変数に情報を入れたイメージ
2.取得した情報をツクールで使えるようにツクールの変数に変換
今回は曜日による処理を行いたいので、曜日情報だけ抜き出します。
『new Date()』で取得した変数youbiの中には色々な情報が含まれていますが、
今回は曜日の情報だけを取得しなければいけません。
『new Date()』で取得した変数から曜日を呼び出すためには
『変数.getDay()』という記述を使っていきます。
今回はyoubiという変数を使っているので
『youbi.gerDay()』というコマンドを実行して、
複数の情報を持つyoubiの中から曜日だけを抜き出していきます。
なお、『変数.getDay()』で取得できる曜日の情報は
・日曜日が0
・月曜日が1
・火曜日が2
・水曜日が3
・木曜日が4
・金曜日が5
・土曜日が6
という曜日に応じた数字で記録されています。
(例えば、変数.getDay()で3が取得できた場合は水曜日)
せっかく数字情報で取得できるので、ツクール上で使いやすいよう
ツクールで作成した変数として取得していきましょう。
ツクール状の実行内容のイベントコマンドより
『ゲーム進行』→『変数の操作』を選びます。
ツクール上で曜日を管理する変数を用意します。そして、その数値に数をいれる操作『代入』を選択し、オペランドのスクリプト項目に、スクリプトの変数『youbi』に入っている曜日情報を『.getDay()』を使って取得していきます。
上記のようにオペランドのスクリプト項目に『youbi.getDay()』を記述しましょう。
今回はツクール上の変数1を『曜日チェック』という曜日管理用の変数にしました。
『youbi.getDay()』で取得できる曜日情報の数値(0~6)を
ツクールの変数1『曜日チェック』に代入したので、
今後はツクールの変数1『曜日チェック』を使って、
ツクール上で曜日の判断を行うことができるようになります。
ツクールの条件分岐で曜日ごとに異なる結果へ分岐させる
ここまで来たら、後は簡単です。
工程2でツクール上の変数の中に『0~6』で曜日情報が管理されています。
今回はツクールの変数1『曜日チェック』という変数にスクリプトで取得した
情報が0~6で入っています。
『.getDay()』では、曜日が
・日曜日が0
・月曜日が1
・火曜日が2
・水曜日が3
・木曜日が4
・金曜日が5
・土曜日が6
で取得でき、この数値を変数1『曜日チェック』に入れているので
・変数1『曜日チェック』が0なら日曜日
・変数1『曜日チェック』が1なら月曜日
・変数1『曜日チェック』が2なら火曜日
・変数1『曜日チェック』が3なら水曜日
・変数1『曜日チェック』が4なら木曜日
・変数1『曜日チェック』が5なら金曜日
・変数1『曜日チェック』が6なら土曜日
というわけです。ここまで来たら、
後は変数による分岐と一緒です。
曜日ごとに分岐したい場所にツクール実行内容の
イベントコマンドで『フロー制御』→『条件分岐』を選び、
条件分岐を変数1『曜日チェック』が曜日に応じた変数の時に
分岐するイベントを作成すれば完成です。
▲例えば、変数が1の時は月曜日なので、条件分岐の該当する場合のところに月曜日の処理を入れればOK▲
省略して記述・実行する方法
ここまで事細かにわかりやすい処理の方法を紹介してきましたが、
スクリプト側で変数を使わずに省略して書く方法も
教えてもらいました。
(こまさんありがとうございます)
実際やっているようなことはほとんど同じですが、
こちらのほうがスムーズな記述にもなるので、
工程とかの理解が不要な方や、ツクール側の処理を短く
したい方はこちらが便利です。
方法は簡単で、以前の方法は
一気に情報の取得から条件分岐までを条件分岐画面で行う方法です。
スクリプトコマンドを使わず、最初から
イベントコマンドの『条件分岐』→『スクリプト』項目に
「(new Date()).getDay()」という記述を行います。
この処理であれば、条件分岐のコマンドだけでも収まるので、
スムーズな処理を目指すのであれば、コチラの方法がオススメです。
参考:曜日を一行で取得するJavaScriptはこちらです。 | Ginpen.com
まとめ
今回はスクリプトコマンド欄にJavaScriptコマンドを記入して曜日を取得し、ツクールで活用することで簡易的な曜日判断イベントの作り方を紹介しました。
サンプルのゲームでは、台詞変化にしていますが、例えば場所移動で移動先を曜日ごとに変化させて、『月曜日は回復アイテムをたくさん落とす敵が沢山出てくるステージ』『火曜日は攻撃アイテムをたくさん落とすステージ』『金曜日はお金をたくさん落とす敵が出てくるステージ』などと特色をつけたような形にすれば、曜日ごとに応じた特色のあるイベントを作成することもでき、曜日を意識したプレイを導入できる可能性があります。
なお、今回の手順はあくまでも簡易的なものです。プレイヤーのコンピュータ側から情報を取得しているコマンドになるので、実際のスマホゲームなどと異なり、プレイヤー側の日付設定を変えてプレイすると、好きな曜日の処理ができるようになってしまったりします。
■new Date()についてわかりやすく解説されているサイトさん
参照:イヌでもわかるJavaScript講座 – Date(日付・時刻)の表示
参照:JavaScriptで日時(曜日)を取得、表示する方法(Syncer)
フリゲレベルであればこういった仕様を救済処置などとして利用していけば短所を長所として活用していくことも出来ますが、有料ゲームなどで正確にズルを防ぎたい場合などは注意していきましょう。
また、今回紹介した『new Date()』は様々な情報が取得できます。活用次第で色々な処理を行うこともできるので、ぜひリアル時間と連動するような何かをやりたい時とかは、活用してみるといいんじゃないかなーと思います。
*作成画面の画像、サンプルのゲームデータはRPGツクールMVを利用し作成しております。
RPGツクールMV→(c)2015 KADOKAWA CORPORATION./YOJI OJIMA