開発日誌

テクニック

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

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のようです。とりあえず、後者で修正しましたが、戦闘高速化もたまに高速すぎて、何が起こったのか把握できないことがあるため、ウェイトの値を一律半分にしている現在の高速化方法は、見直した方がいいのかも。

[ 天下御免!からくり屋敷 ] [ テクニック ] 不可視シンボルエンカウント

2011-10-17 23:20:54

引き続き和風ミニ(?)RPGの根幹システムを作成しています。

普段は見えないが接触すると戦闘に。

今回のゲームで導入してみたいのは、シンボルエンカウントだけど、敵シンボルの姿は普段は見えない、という方式。むかーしの「英雄伝説 I」のフィールド画面で採用されていたかと思います。

普通のシンボルエンカウントだと、ザコ戦を全て回避して進むことができますが、ボス戦などに臨むためにはそれなりに成長していなければならず、ザコ戦全回避では結局ゲームが成り立ちません。かといって普通のランダムエンカウントでは、適切なエンカウント率の調整が困難です。その点、この方式であれば、プレイする側の感覚としては、ランダムエンカウントに近いと思いますが、あっちへ寄り道して来ると1回エンカウントしている、みたいな絶妙なバランス調整が可能です。

気付かれた。逃げろー!

細かい仕様はいろいろ付けています。

  • 戦闘からは必ず逃げられるが、逃げた後はその敵シンボルが見えるようになって、追いかけてくる。
  • 一定範囲内に接近すると主人公を追いかけてくる。
  • 執拗に追いかけられても困るので、ある程度経つと追尾を中止する。
  • ある程度経つと消滅して、一定時間後に復活する。
  • 背後から接触された場合は不意打ちになる場合がある。
  • 狭い範囲に敵が固まってしまわないように、配置と移動範囲を調整する。
  • アイテムを使うと敵シンボルが見えるようになる。

けっこう良い方式だと思うのですが、採用しているゲームはほとんどないように思います。実はダメダメな方式だったらどうしようw

[ 天下御免!からくり屋敷 ] [ テクニック ] RubyでRubyを…

2011-10-08 14:11:23

数日間の苦闘の末、テキストにルビを振るシステムができあがりました!

和風RPGを制作する上では、どうしても難しい言葉とか固有名詞とかが出てきます。通常の西洋ファンタジーであれば、固有名詞はカタカナが中心ですし、ちょっと読めない人が多そうだと思った言葉は、簡単な言葉で置き換えたり、ひらがなに開いたりすることも可能ですが、和風だとそういうわけにもいきませんからね。「名刀こてつ」では攻撃力も半減しそうです。

いくつか既にルビ振りを可能にするスクリプト素材があるにはありましたが、ルビ振りのみで十分なのと、画面構成全体や文字表示など根幹の部分をいじるため、競合すると厄介なので、自力で実装しました。

ルビの分だけ1行の高さが変わりますし、会話メッセージだけでなく、アイテム名やモンスター名などもルビ振りをしたかったので(むしろそっちの方が重要)、かなり全シーンにわたって各ウィンドウの位置やサイズ調整が必要になりました。一瞬投げそうになったけど、やり始めてしまえば、思ったほど修正箇所は多くなかったかな。

というわけで、苦労の賜物↓

会話画面 ▲

装備変更画面 ▲

術選択画面 ▲

あとですね、一番の問題は、テキスト中にルビを入力するのが、けっこう面倒…。

[ ゲームリリース情報 ] [ 小さな大冒険 ] [ テクニック ] [ その他の雑記 ] プロジェクトファイル公開開始

2011-10-01 01:45:56

RPGツクール2000時代はゲームデータの暗号化がなく、エディターを持っている人にはゲームの中身が見られ放題でしたが、その代わりに上手いイベントの組み方などを参考にすることができ、ツクラー全体の技術力の底上げが叶っていたように思います。XPになって暗号化アーカイブが作れるようになったお陰で、ネタバレや改造されたり、素材やイベントをパクられたりする心配はなくなりましたが、他人のテクニックを参考にすることで互いの技術力の向上を図るという機会も失われてしまいました。まあ、どちらが良い悪いという話ではないのですが…。

小さな大冒険」は、自分の習作としての意味合いも込めて制作したので、グラフィックやストーリー展開などにはそれほど凝らず、イベントテクニックやバランス調整などに力を入れました。個人的には、内容の丸パクリや完全ネタバレ状態で進まれるのは困りますが、テクニックを参考にしてもらったり、あそこでもし「いいえ」を選んでたらどういう台詞が用意されていたんだろう?と中身を見てもらう分には大歓迎です。

というわけで、暗号化していない状態のプロジェクトファイルを公開することにしました。

「RPGツクールVX」本体をお持ちの方は、プロジェクトファイルを開いて中身をご覧いただけます。イベントやスクリプトの実装方法など、ぜひ参考にしてください。ただし、グラフィック素材やゲーム内容自体の盗用はおやめください。なお、「RPGツクールVX」本体をお持ちでない方には意味がありませんので、通常バージョンをご利用ください。

Vector」での公開も開始しました。今後ともどうぞよろしくお願いします。