開発日誌

テクニック

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 特定アクターのみ使用可能アイテム設定スクリプト

2012-09-15 15:07:27

ふと思い立って作ったRGSS2スクリプト素材を公開します。VX用です。

もうちょっとマシな名前は付けられなかったのかって感じですが、文字通り、特定のアクターだけが使用することのできるアイテムを作るスクリプトです。

具体的には、戦闘中は指定されたアクターのみが使用でき、移動時には指定されたアクターがパーティーにいて、かつ戦闘不能やマヒ、混乱など、自由行動できないステートにかかっていない場合のみ、使用できるようになります。

使い方は単純で、スクリプトを導入し、対象となるアイテムのメモ欄に、以下の文字列を記述すればOKです。

PANDA::EnableActor = n

nには、該当するアクター番号が入ります。例えば、「PANDA::EnableActor = 3」と記述すれば、3番のアクターだけがそのアイテムを使用することができるようになります。残念ながら、複数のアクターは指定できません。自分が必要になったら作りますが…。

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

[ テクニック ] [ 素材 ] アクター能力値かんたん調整

2012-08-26 21:00:15

主人公たちの能力値をエクセル上で簡単に編集して、データベースに反映させられる、VBAマクロファイルを公開します。実行には、Microsoft Office Excel 2003以上(2007以上推奨)が必要となります。

使い方は、いたって簡単。まずは、上記のファイルをダウンロードします。zipファイルなので、中身を解凍し、その中にあるエクセルファイル「ActorParameterVX.xls」を、ダブルクリックして起動します。

起動時に、マクロに関するセキュリティ警告が出ますので、マクロを有効にするよう操作してください。(画面はExcel 2007での表示)

「能力値設定」シートで、各アクターの能力値を調整します。Lv1の「値」の欄に初期値を、Lv2以降の「増」の欄に、それぞれレベルアップ時の増分を入力します。その他、アクターIDと名前、および経験値の基本値と増加度も入力します。入力すべき場所は、全てグリーンで表示しています。

「バランス確認」シートで、能力値の成長曲線のアクター間比較もできます。適宜確認しながら、あまりアンバランスにならないよう調整しましょう。

調整が完了したら、「スタート」シートに戻って、「スクリプト出力」ボタンをクリックし、スクリプトをファイルに保存します。

ここからは、RPGツクール本体での作業になります。ツクール本体でプロジェクトファイルを開き、スクリプトエディタの「▼ 素材」の一番最後に、スクリプトを挿入し、先ほど保存したスクリプトの内容を全て貼り付けます。

プロジェクトを保存して、テストプレイを起動します。タイトル画面が出たところで、テストプレイは終了させます。

再びプロジェクトファイルを開き、データベースの「アクター」で、変更が反映されていることを確認したら、スクリプトエディタを開いて、先ほど挿入したスクリプトを削除し、保存します。

なお、本システムで変更できるのは、経験値曲線の値と、能力値のみなので、アクターの名前や職業、その他のオプションなどは、この画面で別途設定する必要があります。

以上の作業で、アクターの能力値の細かい調整が、簡単にできるようになります。詳しい使い方や使用上の注意点等は、ファイル内に書かれている説明をご覧ください。

RPGツクールVXのデフォルト仕様に準拠しているため、アクターの仕様やタイトル画面表示の仕組みなどをスクリプトで変更している場合には、正しく設定が反映されない可能性があります。エクセル編集や初歩的なVBAの知識のある方は、本ファイルを改造することで対応させられますので、その辺はご自由にどうぞ。VX Aceへの対応も、改造すれば可能だと思います。VX Ace対応版は自分でも必要なので、いずれ公開する予定ですが、まだそこまで手が着けられていません…。

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

[ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] 乗船中使用不可スクリプト

2012-08-25 15:23:39

先日、小舟に乗っている最中にワープ魔法・アイテムを使うと、船に乗ったまま移動してしまうバグを修正しましたが、その時の副産物として、乗り物に乗っている最中は使用できなくするスキルやアイテムを作るスクリプトを公開します。VX用です。

使い方は単純で、上記スクリプトを導入し、対象となるアイテムもしくはスキルのメモ欄に、以下の指定文字列を記述するだけです。

PANDA::DisableInVehicle

私はワープ魔法・アイテムで使いましたが、他にも使い道はあるかと思います。また、全ての乗り物を対象にしていますが、飛行船だけとか、大型船だけとか、特定の乗り物に乗っている時などの判定も、簡単な改造で実現できるでしょう。

以前に公開した使用可否スイッチ制御スクリプトを用いて、並列処理で乗り物に乗っている状態を判定してスイッチをon/offする、といった方法でも実現できますが、それだけのことに並列処理を使うのも非効率なので、スクリプトにしました。

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

[ 天下御免!からくり屋敷 ] [ テクニック ] [ 素材 ] [ プラグイン/スクリプト ] [ ツクール情報 ] ステート相殺の不具合

2012-07-01 21:13:46

天下御免!からくり屋敷』のデバッグ作業中に、RPGツクールVXのプリセットスクリプトの不具合と思われる部分を発見しました。

戦闘中、防御力など変化していないのに、なぜか「防御力が元に戻った!」というメッセージが表示されるという現象に悩まされていたのですが、その原因がVXのプリセットスクリプトの不具合にあるらしいことが判明しました。Game_Battlerクラスのadd_stateメソッドで、ステートが相殺された場合にも、自然解除のターン数が設定されてしまっているのは、おかしいですね。新規プロジェクトで試してみても、同様の現象が起きました。

ちょっと検索してみた限りでは、あまり話題になっていない模様ですね。ただ、話題が皆無ではなかったので、不具合には違いないのでしょう。Scene_Battleクラスのremove_states_autoモジュールを見ると、実際のステートに変化が起きない場合は、ステート解除のメッセージが表示されることはないため、簡単にはこの不具合が発覚しないようですし、余計なメッセージが表示される以外には特に実害がないので、放置されているのでしょうか…。

というわけで、修正するスクリプトを作ってみました。Game_Battlerクラスのadd_stateメソッドに追加定義していますので、ここに手を加えている場合は競合に注意してください。

一応、能力値の上昇・低下に関わるステート相殺では、上手く動いている模様ですが、綿密なテストは行っていないので、いろいろな形でステートの相殺を応用しているような場合に、不備があるかもしれません。もし上手く動かないような場合には、コメント欄等にてご報告いただけると、ありがたいです。

[ 天下御免!からくり屋敷 ] [ テクニック ] 今週のハマり

2012-06-07 21:50:47

怒濤の日々が過ぎ、ようやく少し落ち着いたので、『天下御免!からくり屋敷』の制作を再開しました。

が、再開早々、バグに悩まされました。

蘇生魔法を使ってくる敵が出てくるのですが、生き返った敵のグラフィックが、なぜか表示されないという問題が…。気配はあれど、姿は見えず。攻撃でダメージを与えると、ようやく姿を現します。

エネミーの表示関係は特に手を着けていないはずなのに、おかしいなと思っていろいろスクリプトを追ってみたところ、ようやく原因が判明しました。

  • Sprite_Battlerで、ダメージを受けた際に、20フレーム間、点滅エフェクトがかかる。
  • @effect_duration変数で、19から0までカウントダウンしている。
  • 点滅エフェクトを実装しているupdate_blinkメソッドでは、
    self.visible = (@effect_duration % 10 < 5)
    となっており、@effect_duration変数の下1桁が0〜4の時に表示、5〜9の時に非表示となる仕組み。
  • ところで、戦闘高速化を施したため、ダメージを受けた際のウェイトを、30フレームから半分の15フレームにしていた。(Scene_Battleのdisplay_hp_damageメソッド)
  • このため、点滅エフェクトの20フレームのうち、15フレーム目、すなわちvisibleが非表示の状態で、崩壊エフェクトに移ってしまう。

こんなの、そう簡単には気付かないよ!

というわけで、ダメージを受けた際のウェイトは20フレーム以上確保するか、あるいは出現エフェクトを実装しているSprite_Battlerのupdate_appearメソッドに、self.visible = trueを入れるかすればOKのようです。とりあえず、後者で修正しましたが、戦闘高速化もたまに高速すぎて、何が起こったのか把握できないことがあるため、ウェイトの値を一律半分にしている現在の高速化方法は、見直した方がいいのかも。