開発日誌

テクニック

[ 天下御免!からくり屋敷 ] [ テクニック ] 台詞の途中でスイッチを操作する

2020-02-04 23:32:15

前回の記事で、スイッチと並列処理のイベントを使って、台詞の途中でフキダシアイコンを出すことに成功しました。

「台詞の途中で」というのを実現するためには、並列処理の頭で適当なウェイトを入れる必要があります。基本的には1文字1フレームなので、出したいタイミングまでの文字数を数えればいいのですが、台詞の最後の方だと文字数を数えるのも面倒だったり、決定キーで台詞の一括表示とかをされるとタイミングがずれてしまうのが、ちょっと気になっていました。

そこで、台詞の途中でスイッチの操作ができるようにして、いちいちウェイトで調整しなくても、狙ったタイミングでイベントを起動できるようにしてみました。

具体的には、文章表示の途中で使える制御文字を拡張して、\+switch[n]と書けばn番のスイッチをON、\-switch[n]と書けばn番のスイッチをOFFに、それぞれできるようにしました。

本当は実装したスクリプトを素材として公開できればよかったのですが、今回は作品固有の処理がいろいろと書いてあるところに追加で書かざるを得なかったため、素材単体としては公開できません。VX用なので、今さらあまり需要もないと思いますが……。

代わりに、該当部分のキャプチャーを置いておきます。わずか数行なので、同じように書いてもらえればと思います。

ただの一発ギャグをかましたいだけのために、スクリプトの改造までやるのは、やり過ぎじゃなかろうか……。

[ 天下御免!からくり屋敷 ] [ テクニック ] 台詞の途中でフキダシアイコンを出す

2020-01-26 18:26:54

久しぶりにテクニック関連の記事を。

誰かがしゃべっている途中でフキダシアイコンを表示させたいと思って、実装してみました。

台詞の途中で向きを変えたり、ジャンプさせたり、あるいはSEを鳴らしたり、といったことは、イベントコマンドで文章の表示の手前に「移動ルートの設定」で、「移動が終わるまでウェイト」のチェックを外して、移動ルートの先頭に適当なウェイトを入れ、方向転換やジャンプ、SEの演奏を入れてやれば、望み通りの動作になるので、よく利用しています。

「移動ルートの設定」で設定可能なものなら、この方法でできるのですが、フキダシアイコンの表示は「移動ルートの設定」ではできないため、別の方法が必要です。

最初は、文章の表示を2つに分ける方法を考えました。1つ目の台詞は末尾に「\^」を付けて、入力待ちをせずに次に進むようにしておいて、フキダシアイコンの表示。それから2つ目の台詞は、1つ目で表示した部分までを「\>」で一瞬で表示させるようにして、途中から通常通りの表示をさせる方法です。しかし、この方法だと、フキダシアイコンを表示する時に、文章ウィンドウが一度閉じられてしまうため、綺麗ではありません。

そこで考えた方法が、スイッチ1つとイベント1つを使って、並列処理させる方法です。

まず、対象となる文章の表示を手前で、スイッチをONにします。そして、新たなイベントを用意し、出現条件はそのスイッチがONの場合、トリガーは「並列処理」にして、実行内容の先頭に適当なウェイトを入れた上で、フキダシアイコンの表示をします。最後にそのスイッチをOFFにして、並列処理が続かないようにします。

これで無事に、台詞の途中でフキダシアイコンを表示させることができました。1つの文章の途中で!や?などのフキダシアイコンを入れられると、感情表現が豊かになっていいですね。

最初から1つの台詞にしないで、複数の台詞に分けてしまえばいいのでしょうが、あまり台詞を短く切るのが好きではないので、こういうことができると助かります。

まあ、普通にプレイしている限りでは一瞬の出来事なので、ほとんど気に留める人はいないかもしれませんが……。

[ 天下御免!からくり屋敷 ] [ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] [ ツクール情報 ] 正しい蘇生術

2018-08-12 01:35:53

お久しぶりです!

続編の制作を始めると、既存部分に不具合があっても修正が困難になるので、心ゆくまで修正しようとしています。

敵が蘇生方術を使ってくる際に、複数の死亡者がいたとしても、必ず先頭の死亡者を蘇生させてくるような気がしていました。ランダムで選ばれるはずなのにおかしいな、と思っていろいろ調べてみた結果、プリセットスクリプトの不具合であることが分かりました。

Game_BattleActionのdecide_random_targetメソッドにおいて、対象が味方単体(for_friend?)ならば(生存中の)味方からターゲットをランダムに決定、対象が戦闘不能の味方単体(for_dead_friend?)ならば戦闘不能の味方からランダムに決定、としているのですが、for_friend?にはfor_dead_friend?の場合も含まれるので、この判定順序では対象を戦闘不能の味方にしていても、通常の味方単体で選ばれてしまいます。

というわけで、判定の順序を入れ替えたら、蘇生対象がちゃんとランダムに選ばれるようになりました。

また、蘇生や途中で仲間を召喚する際に、アニメーションが表示されていないことに気付きました。蘇生や召喚した時点では、まだ対象が非表示の状態になっているため、アニメーションも表示されないのだろうと思って諦めていたのですが、修正の仕方が分かったので、ちゃんと表示されるようにしました。

今さらVX用のスクリプトに、どこまで需要があるのか分かりませんが、修正版のスクリプトを公開します。

蘇生対象者の選択修正は、Game_BattleActionのdecide_random_targetメソッドを直接書き換えています。また、アニメーションの表示はSprite_Battlerに親クラスであるSprite_Baseのanimation_set_spritesメソッドを継承して追加定義しています。この辺りに関わる改変スクリプトを入れている場合は、競合で正常に動作しない可能性がありますので、ご注意ください。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

[ 天下御免!からくり屋敷 ] [ テクニック ] 賢い敵の行動

2017-11-05 11:13:58

自分の攻撃力や防御力を上げてくる敵がいます。

既に上がっているところに、重ねて上げようとしても無駄になります。初期の頃の敵ならともかく、後半の強敵はそういう無駄行動はなくして、苦戦させられるようにしたいと思っています。

そこで考えたのは、攻撃力上昇可とか防御力上昇可のステートを用意して、バトルイベントで毎ターンそれぞれの敵の状態を確認し、攻撃力上昇状態になっていなければ攻撃力上昇可のステートを付与、敵の行動パターンではステートが攻撃力上昇可の場合に限って攻撃力上昇をやってくる、という風にしています。

この、バトルイベントで毎ターン確認する、というのがなかなか曲者で、条件のターン数a+b*xというのは、各バトラーが行動を決定し終わった後に発動するため、その時点での状態を行動に反映できません。一方で、条件をターン終了後にすると、1ターン目は発動しないため、最初のターンにその手の行動をしてこなくなってしまいます。

ツクールのヘルプの書きぶりから、条件を0ターン目にしてスパンをターンにすれば、もしや毎ターンのコマンド入力前にイベントが発動するのかと思ったのですが、やはりそのようなことはなく、結局0ターン目とターン終了後の2ページに同じものを記述することで、希望の動作を実現しました。もう少しスマートなやり方はないものでしょうか……。無理に標準機能で実装しようとせず、スクリプトでやればよかった。

この、敵キャラの行動パターン設定は、今のツクールMVでも全く変わっていませんが、せめて条件を複数設定できるとか、もう少し柔軟な設定ができるようになるといいのですがね。メモとかもないので、自作の条件を設定しようとすると、このようにバトルイベントと組み合わせるしかないですよね。

[ 天下御免!からくり屋敷 ] [ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] [ ツクール情報 ] 画面全体アニメーションの不具合修正

2017-10-29 16:44:30

RPGツクールVXのプリセットスクリプトのバグというか仕様として、アニメーションの基準位置が「画面」に設定されていても、対象となるキャラクターの分だけアニメーションが表示される、というものがあります。

単に重なって表示されるだけなので、実害がないと言えばないのですが、透明度を設定している場合は、重なっている分だけ濃く表示されてしまうため、気になると言えば気になります。

これまでは、EnDlEss DREamERさんの「アニメーション軽量化」を参考に、全体アニメーションの場合は最初の1体分だけを表示するようにしていたのですが、これだと今度は、対象のフラッシュが最初の1体にしか反映されないため、全体技なのに単体技のように見えてしまうという点が気になっていました。

というわけで、いろいろいじって、アニメーションは1体分だけ、ただし対象のフラッシュは対象者ごとに全部反映させる、というスクリプトを作ったので公開します。今さらVX用のスクリプトに、どこまで需要があるのかは分かりませんが……。

晴れて敵全体がフラッシュするようになった

問題なく意図通りに動作しているはずですが、アニメーションの仕様はいまいちよく把握していないので、思わぬエラーが潜んでいる可能性があります。また、なるべくaliasを用いた追加定義にしていますが、アニメーション周りの改変スクリプトを入れている場合は、競合で正常に動作しない可能性がありますので、ご注意ください。

質問やアドバイスなどはコメント欄まで、お気軽にどうぞ。素材利用条件などについては、このサイトについての「提供素材について」の項目などをご覧ください。

いやー、それにしても、この1ヶ月で相当制作が進みました。最初からこのペースで進めていれば、とっくの昔に完成していたものを……!