ツクールVXに関するスクリプト素材を提供している、TYPE74RX-T様に、「バトル終了後イベント」なるスクリプトが在る。戦闘終了後にバトルイベントが発動できるという優れものだ。今回私は、戦闘中のBGMをランダムに変更させたいと思った。前回も、エンカウントするたびに戦闘BGMが変化する仕様にしていた。しかし、曲が終わると再び曲頭からループ再生される。mp3のバンド音楽ゆえ、一旦終わってからの無音が寂しい。さらに、同じ曲が数秒のブランクを経てリピートされるのは、正直なところ、萎える要素としては充分だろう。そこで今回は、戦闘が開始した直後に楽曲の抽選を行い、BGMが途切れるタイミングで再抽選を行う方式に決めた。残念ながら、デフォルトのバトルイベントでこの処理を組む事が出来なかった。それは技量不足に因るところかもしれないが、やはりスクリプトに頼らざるをえなかった。前述のバトル終了後イベントが、今回のBGMランダム抽選の鍵となる。
STEP1 「タイマーの改変」
曲の終わりを設定するのは、市販の楽曲を改造するわけではない。ただその曲の演奏時間をWMプレイヤー等で確認して、バトルイベントにてタイマーを起動させればいい。しかし、画面にタイマーが出現し気が散ることだろう。正直、気が散ることだろう。もうほんとに、気が散っている。故に私は、Sprite_Timerの各設定をunless $game_temp.in_battleで分岐させる手法を施した。これはつまり、戦闘中にタイマーを開始した場合に限り、ビットマップを作成・更新しない、要は画面上に数字を出さないという処理だ。しかしながら、ある日のことです。貴方がツク-ルVXを弄繰り回して遊んでいると、戦闘が急に終わることになるます。それは何故でしょうか。親御さんには秘密で、そっと教えてあげましょう。Game_Systemの最下部、フレーム更新メソッドを覗けば一目瞭然である。if 戦闘中にタイマーが0になったら、戦闘を中断するという処理が書き込まれているのだ。ご丁寧に。これはこれはご丁寧に書き込まれているのだ。なんて懇切丁寧慇懃実直なシステム周りなのだろう。などと感心している場合ではない。そんな処理は条件文だけ残して削除してしまえばいい。自らの手を汚すことなくして、ランダムBGMには到達出来ぬ。だ、そうです。でまぁ、戦闘中にタイマーが0になった場合は、$game_switches[11] = trueとしたわけですよ、はい。ちゃんちゃん。
STEP2 「イベントを発生させる」
勘の良い読者ならば、もうピコピンと来たであろう。そう、遂に冒頭で紹介したスクリプトの登場だ。ただ、このSTEPでどのような処理、改変が必要なのかは書かない。何故なら素材の二次配布的な形になってしまうから。それはそれとして、$game_system.updateは、バトルシーンのアップデート処理の中に入れ込もう。でないとタイマーが0になったことを確認してくれない。
最終STEP 「結果の確認」
無事にBGMが適切な時間に抽選されるようになった。ちなみに、全トループ(敵グループ)に設定をコピペするのは面倒になるため、トループ1のイベントを読み込ませているよ。ボス戦のときはまたボス用スイッチでも作ればいいけど、今のところはボス戦も同じランダムBGMでいいと思っている。嫌なら、スイッチをONにするタイミングを、バトル画面への切り替え直前ではなく、エンカウント処理の中にすればいいと思う。または、戦闘からマップに戻った際にスイッチをONにするのもいいだろう。曲を切り替えるタイミングで、一瞬重くなるものの、まぁいいさそれは、いいのさ、そんなことは。
しかし、上記の方法はボツとなった。理由は、タイマーの速度が倍になってしまうためだ。また、ゲームのウインドウがアクティブでない状態(スタートメニューを開いたり、ゲームをつけたまま他の作業をしている場合)ではBGMこそ流れていても、スクリプト含むRPGツクール内の機能は停止される。よって、タイマーの動きも止まってしまうため、BGMの終了タイミングがずれる。というわけで、ウインドウがアクティブでない場合、BGMの演奏も一時停止させる方法、これを教えて欲しい。ありがとう。
結局、タイマーの活用以前に重大な事を思い出したのである。それは、KGC Software様の提供する「昼夜切り替え」スクリプトの存在、また、利用経験ゆえに明白な仕様だ。このスクリプトでは、時間経過や歩数により時刻の流れを感じさせる機能を搭載している。さて、実はその時間経過による昼夜の切り替え判定、詰まるところ時間のカウントは、戦闘中にも継続して動いている。というわけで、早速だが活用させて頂いた。指定変数にBGMの秒数を代入するだけで、フェーズ遷移ではなく再抽選による新たなBGMへと遷移する仕組みだ。スクリプターありきのツクールVXだ。なぜそんな偏った仕様にしたのか皆目検討が付かない。あとそういやぁ、認証ってのがインストールした時以来、一度も無いなぁ。「うざっ」とか「だるっ」とか「めんどくさっ」とか「まんまみーやっ」とか思いつつ購入したのだが、認証無しは嬉しい誤算だ。このまま未来永劫、放射能が大地を、海を、大気を喰らい尽くすまで、無いといいなぁ。
とにかく最近は、スクリプトの競合回避に終始していた。あるいはちょっとしたものなら仕様を改変してみたり。たとえばステートや属性の有効度を、装備やスキルによって%ではなく数値で動かせるようにしたり、鍛治スクリプトの素材で必要になる通貨をゴールドではなくジュエルにしたりと。ちなみにジュエルは、鉱石アイテムから手に入れることが出来るようにした。鉱石を手に入れたら、鍛冶屋でジュエルに精製してもらえるという仕組みだ。実際はただの売却だが、鉱石の売値はデータベースに設定した値段の1000分の1にしてある。何故わざわざそうしたかと言えば、さば缶のツクールブログ様の「アイテム鑑定」スクリプトを導入しているから。鑑定難易度設定がレベルとそのアイテムに設定された値段で決まるためだ。あと「世界中の迷宮風戦闘画面」と紳士の月面工房様の「アクター毎のアイテム所持」と、おまけの「アイテム強化システム」もだ。当初はアイテム強化の際に素材となるアイテムを消費させる処理を作っていて、必要なアイテムを取得してウインドウに表示させていた。最後に、強化した際に必要素材を減少する処理を書くところまで出来た。ところが、lose_item、gain_itemに関する処理が、どのようなものになっているのか読み解けなかったため断念した。自分で書き加えた処理を全て削除して、元通りにしたのだが、後日、もしかしてアイテム情報を○○すれば・・・と一つの可能性を思いついたのだが、時既に遅し、もはや面倒臭いので諦めた。そうして右往左往するのもツクールの味だろう。Vivaメヒコ!(原発から遠ざかりたいという意味で。)
2011/04/12 追記
けど結局、60FPSを安定して確保するのは難しいから、色んな曲を繋ぎ合わせた大きい曲ファイル一個を組み込むほうが現実的だったり。一応、なるべく戦闘シーンの負荷は抑えようと思って、若干だけどグルグル渦巻きとかを控えめにした。あと、シーンバトルから自作メニューをコモンイベントから開いても反映されなかったから、シーンバトルは結構独立して動いるんだぁって。シーンバトルのほうでメニューを作り直すのは荷が重すぎたので、やむを得ず宝箱入手は戦闘後になってしまった。つまりマップ画面に戻ってから。昔2000で作ったゲームの、熟練度システムみたいだ。そのときはコモンの並列処理で監視させて、戦闘終了後に装備していた武器によって熟練度が貯まり、一定値を超えると、レベルアップでのスキル習得とは別にスキルを覚えるというもの。けど2000では、自作エンカウントでもそうだけど、戦闘後にすぐイベントを入れ込もうとしてもキャラが半歩くらい動いてしまうんだよね。あれがどうにも気に食わなかったけど、結局改善できなかった。それに比べたら、やっぱり最近のツクールは良い。不親切だけど不便ではない。そういえば戦闘と言えばデフォルトのグネグネ背景は結構好きなので、敢えて使っている。ダンジョン内はデフォルト渦巻き、フィールドでは、ぼかしと拡大のみ、という使い分け方をしている。あと前回作っていたのは戦闘曲がCBTだらけのゴアグラ中心で闇雲に導入していたけど、今回は何よりもRPGの雰囲気に合うように厳選した25曲だけを使用している。そしてデスメタル中心にした。思うに、ゲルマンゴア系統とノイズ手前のマシンブラスト系はよく合う。
STEP1 「タイマーの改変」
曲の終わりを設定するのは、市販の楽曲を改造するわけではない。ただその曲の演奏時間をWMプレイヤー等で確認して、バトルイベントにてタイマーを起動させればいい。しかし、画面にタイマーが出現し気が散ることだろう。正直、気が散ることだろう。もうほんとに、気が散っている。故に私は、Sprite_Timerの各設定をunless $game_temp.in_battleで分岐させる手法を施した。これはつまり、戦闘中にタイマーを開始した場合に限り、ビットマップを作成・更新しない、要は画面上に数字を出さないという処理だ。しかしながら、ある日のことです。貴方がツク-ルVXを弄繰り回して遊んでいると、戦闘が急に終わることになるます。それは何故でしょうか。親御さんには秘密で、そっと教えてあげましょう。Game_Systemの最下部、フレーム更新メソッドを覗けば一目瞭然である。if 戦闘中にタイマーが0になったら、戦闘を中断するという処理が書き込まれているのだ。ご丁寧に。これはこれはご丁寧に書き込まれているのだ。なんて懇切丁寧慇懃実直なシステム周りなのだろう。などと感心している場合ではない。そんな処理は条件文だけ残して削除してしまえばいい。自らの手を汚すことなくして、ランダムBGMには到達出来ぬ。だ、そうです。でまぁ、戦闘中にタイマーが0になった場合は、$game_switches[11] = trueとしたわけですよ、はい。ちゃんちゃん。
STEP2 「イベントを発生させる」
勘の良い読者ならば、もうピコピンと来たであろう。そう、遂に冒頭で紹介したスクリプトの登場だ。ただ、このSTEPでどのような処理、改変が必要なのかは書かない。何故なら素材の二次配布的な形になってしまうから。それはそれとして、$game_system.updateは、バトルシーンのアップデート処理の中に入れ込もう。でないとタイマーが0になったことを確認してくれない。
最終STEP 「結果の確認」
無事にBGMが適切な時間に抽選されるようになった。ちなみに、全トループ(敵グループ)に設定をコピペするのは面倒になるため、トループ1のイベントを読み込ませているよ。ボス戦のときはまたボス用スイッチでも作ればいいけど、今のところはボス戦も同じランダムBGMでいいと思っている。嫌なら、スイッチをONにするタイミングを、バトル画面への切り替え直前ではなく、エンカウント処理の中にすればいいと思う。または、戦闘からマップに戻った際にスイッチをONにするのもいいだろう。曲を切り替えるタイミングで、一瞬重くなるものの、まぁいいさそれは、いいのさ、そんなことは。
しかし、上記の方法はボツとなった。理由は、タイマーの速度が倍になってしまうためだ。また、ゲームのウインドウがアクティブでない状態(スタートメニューを開いたり、ゲームをつけたまま他の作業をしている場合)ではBGMこそ流れていても、スクリプト含むRPGツクール内の機能は停止される。よって、タイマーの動きも止まってしまうため、BGMの終了タイミングがずれる。というわけで、ウインドウがアクティブでない場合、BGMの演奏も一時停止させる方法、これを教えて欲しい。ありがとう。
結局、タイマーの活用以前に重大な事を思い出したのである。それは、KGC Software様の提供する「昼夜切り替え」スクリプトの存在、また、利用経験ゆえに明白な仕様だ。このスクリプトでは、時間経過や歩数により時刻の流れを感じさせる機能を搭載している。さて、実はその時間経過による昼夜の切り替え判定、詰まるところ時間のカウントは、戦闘中にも継続して動いている。というわけで、早速だが活用させて頂いた。指定変数にBGMの秒数を代入するだけで、フェーズ遷移ではなく再抽選による新たなBGMへと遷移する仕組みだ。スクリプターありきのツクールVXだ。なぜそんな偏った仕様にしたのか皆目検討が付かない。あとそういやぁ、認証ってのがインストールした時以来、一度も無いなぁ。「うざっ」とか「だるっ」とか「めんどくさっ」とか「まんまみーやっ」とか思いつつ購入したのだが、認証無しは嬉しい誤算だ。このまま未来永劫、放射能が大地を、海を、大気を喰らい尽くすまで、無いといいなぁ。
とにかく最近は、スクリプトの競合回避に終始していた。あるいはちょっとしたものなら仕様を改変してみたり。たとえばステートや属性の有効度を、装備やスキルによって%ではなく数値で動かせるようにしたり、鍛治スクリプトの素材で必要になる通貨をゴールドではなくジュエルにしたりと。ちなみにジュエルは、鉱石アイテムから手に入れることが出来るようにした。鉱石を手に入れたら、鍛冶屋でジュエルに精製してもらえるという仕組みだ。実際はただの売却だが、鉱石の売値はデータベースに設定した値段の1000分の1にしてある。何故わざわざそうしたかと言えば、さば缶のツクールブログ様の「アイテム鑑定」スクリプトを導入しているから。鑑定難易度設定がレベルとそのアイテムに設定された値段で決まるためだ。あと「世界中の迷宮風戦闘画面」と紳士の月面工房様の「アクター毎のアイテム所持」と、おまけの「アイテム強化システム」もだ。当初はアイテム強化の際に素材となるアイテムを消費させる処理を作っていて、必要なアイテムを取得してウインドウに表示させていた。最後に、強化した際に必要素材を減少する処理を書くところまで出来た。ところが、lose_item、gain_itemに関する処理が、どのようなものになっているのか読み解けなかったため断念した。自分で書き加えた処理を全て削除して、元通りにしたのだが、後日、もしかしてアイテム情報を○○すれば・・・と一つの可能性を思いついたのだが、時既に遅し、もはや面倒臭いので諦めた。そうして右往左往するのもツクールの味だろう。Vivaメヒコ!(原発から遠ざかりたいという意味で。)
2011/04/12 追記
けど結局、60FPSを安定して確保するのは難しいから、色んな曲を繋ぎ合わせた大きい曲ファイル一個を組み込むほうが現実的だったり。一応、なるべく戦闘シーンの負荷は抑えようと思って、若干だけどグルグル渦巻きとかを控えめにした。あと、シーンバトルから自作メニューをコモンイベントから開いても反映されなかったから、シーンバトルは結構独立して動いるんだぁって。シーンバトルのほうでメニューを作り直すのは荷が重すぎたので、やむを得ず宝箱入手は戦闘後になってしまった。つまりマップ画面に戻ってから。昔2000で作ったゲームの、熟練度システムみたいだ。そのときはコモンの並列処理で監視させて、戦闘終了後に装備していた武器によって熟練度が貯まり、一定値を超えると、レベルアップでのスキル習得とは別にスキルを覚えるというもの。けど2000では、自作エンカウントでもそうだけど、戦闘後にすぐイベントを入れ込もうとしてもキャラが半歩くらい動いてしまうんだよね。あれがどうにも気に食わなかったけど、結局改善できなかった。それに比べたら、やっぱり最近のツクールは良い。不親切だけど不便ではない。そういえば戦闘と言えばデフォルトのグネグネ背景は結構好きなので、敢えて使っている。ダンジョン内はデフォルト渦巻き、フィールドでは、ぼかしと拡大のみ、という使い分け方をしている。あと前回作っていたのは戦闘曲がCBTだらけのゴアグラ中心で闇雲に導入していたけど、今回は何よりもRPGの雰囲気に合うように厳選した25曲だけを使用している。そしてデスメタル中心にした。思うに、ゲルマンゴア系統とノイズ手前のマシンブラスト系はよく合う。
※コメント投稿者のブログIDはブログ作成者のみに通知されます